diff --git a/.DEPS.git b/.DEPS.git
index e6a2067..fbe18ed 100644
--- a/.DEPS.git
+++ b/.DEPS.git
@@ -5,20 +5,20 @@
 # FOR HOW TO ROLL DEPS
 vars = {
     'ffmpeg_hash':
-         '@681ca6bfed239ad2e1a6a3c8a586839c6dbd3e87',
+         '@ac4a9f31fe2610bd146857bbd55d7a260003a888',
     'webkit_url':
          'https://chromium.googlesource.com/chromium/blink.git',
     'git_url':
          'https://chromium.googlesource.com',
     'webkit_rev':
-         '@d755a8eb69563c10f78b1649aaf4086e63d715ca',
+         '@8743fca5ed4ee3c23d06e83999ed3af08401dd08',
     'angle_revision':
          '74697cf2064c0a2c0d7e1b1b28db439286766a05'
 }
 
 deps = {
     'src/breakpad/src':
-        Var('git_url') + '/external/google-breakpad/src.git@f7a16b06ff5fbc96df95c0c94e65bd8b679c5b16',
+        Var('git_url') + '/external/google-breakpad/src.git@b9b51eb55b9746fcdbf6a1dd69667d1ac5b13604',
     'src/chrome/browser/resources/pdf/html_office':
         Var('git_url') + '/chromium/html-office-public.git@c29b3dcd20a03c5cec041764d178245b7d306dec',
     'src/chrome/test/data/extensions/api_test/permissions/nacl_enabled/bin':
@@ -32,7 +32,7 @@
     'src/media/cdm/ppapi/api':
         Var('git_url') + '/chromium/cdm.git@53f0c537a5cc685663a51d4d8d7eb6b323a3e802',
     'src/native_client':
-        Var('git_url') + '/native_client/src/native_client.git@2d4a98a39fe258acf708511899fdb55f387a9d8b',
+        Var('git_url') + '/native_client/src/native_client.git@44c028817cc1a21f9d8814555b19fd42eae538ef',
     'src/sdch/open-vcdiff':
         Var('git_url') + '/external/open-vcdiff.git@438f2a5be6d809bc21611a94cd37bfc8c28ceb33',
     'src/testing/gmock':
@@ -54,7 +54,7 @@
     'src/third_party/cacheinvalidation/src':
         Var('git_url') + '/external/google-cache-invalidation-api/src.git@6cd2fc3c3f3b3c95870be4696e642d4c3f051b59',
     'src/third_party/clang_format/script':
-        Var('git_url') + '/chromium/llvm-project/cfe/tools/clang-format.git@ebc1600adbe81140f086227e185a37e4498923eb',
+        Var('git_url') + '/chromium/llvm-project/cfe/tools/clang-format.git@385fc3379dc95b67d601b4384b16b1ec0bf12361',
     'src/third_party/cld_2/src':
         Var('git_url') + '/external/cld2.git@3fced387543ba9bed402923b3c6feb459fb61f58',
     'src/third_party/ffmpeg':
@@ -76,13 +76,13 @@
     'src/third_party/libaddressinput/src':
         Var('git_url') + '/external/libaddressinput.git@3f7d76be9f572d8fdf512f4e2085109bc32a6128',
     'src/third_party/libc++/trunk':
-        Var('git_url') + '/chromium/llvm-project/libcxx.git@e3ef8601c853c8c056d96f6c88fd1f2b8e67372d',
+        Var('git_url') + '/chromium/llvm-project/libcxx.git@e785ef19637f88c5e3e9926fabd8a64cd7eac49d',
     'src/third_party/libc++abi/trunk':
-        Var('git_url') + '/chromium/llvm-project/libcxxabi.git@afba0fa03209315a0eb682cf3900d1a4ee141269',
+        Var('git_url') + '/chromium/llvm-project/libcxxabi.git@062ba40d41870a04e0aefb64f8122e91aa824147',
     'src/third_party/libexif/sources':
-        Var('git_url') + '/chromium/deps/libexif/sources.git@bd8e7ca8200abba0b57afc2c2e778d3db3fb4d33',
+        Var('git_url') + '/chromium/deps/libexif/sources.git@ed98343daabd7b4497f97fda972e132e6877c48a',
     'src/third_party/libjingle/source/talk':
-        Var('git_url') + '/external/webrtc/trunk/talk.git@92ad4370e12c1017bcc1137e738d81957a2d038e',
+        Var('git_url') + '/external/webrtc/trunk/talk.git@48284e07608ed8f726f67e48879ecc46df48fbd5',
     'src/third_party/libjpeg_turbo':
         Var('git_url') + '/chromium/deps/libjpeg_turbo.git@3395bcc26e390d2960d15020d4a4d27ae0c122fe',
     'src/third_party/libphonenumber/src/phonenumbers':
@@ -94,13 +94,13 @@
     'src/third_party/libsrtp':
         Var('git_url') + '/chromium/deps/libsrtp.git@2f2e557b809dc1dd7977098ad354a540f04beb4e',
     'src/third_party/libvpx':
-        Var('git_url') + '/chromium/deps/libvpx.git@37fc486eee21129fa42b92b99778b54caf773980',
+        Var('git_url') + '/chromium/deps/libvpx.git@497a01b086cc703ed01af8e8aeed3e5733ad8315',
     'src/third_party/libwebm/source':
         Var('git_url') + '/webm/libwebm.git@fb6b6e64444c637f27d103fd113e0c7bf4f107dd',
     'src/third_party/libyuv':
-        Var('git_url') + '/external/libyuv.git@c99fa63f6b8a240fb28c354752a192ac64fdf9b9',
+        Var('git_url') + '/external/libyuv.git@05c4c715090dd1ffdd3b9bbc52cc078e6398ac3a',
     'src/third_party/mesa/src':
-        Var('git_url') + '/chromium/deps/mesa.git@66c1c789ce3407472de9ed620c9f815639058835',
+        Var('git_url') + '/chromium/deps/mesa.git@457812d99a213dedf1c4cd38018ff48118d0c44f',
     'src/third_party/openmax_dl':
         Var('git_url') + '/external/webrtc/deps/third_party/openmax.git@0349a5549a2ad49d03bef9742a77f62f72ece1ed',
     'src/third_party/openssl':
@@ -120,11 +120,11 @@
     'src/third_party/sfntly/cpp/src':
         Var('git_url') + '/external/sfntly/cpp/src.git@8f090032dd4f8f8908f338cc73bb840b788377f2',
     'src/third_party/skia/gyp':
-        Var('git_url') + '/external/skia/gyp.git@b62fec7fcb34f152a209dc2184c8f89f4b80b75c',
+        Var('git_url') + '/external/skia/gyp.git@b460a213ddebe85e7a61996298582eff269b6f25',
     'src/third_party/skia/include':
-        Var('git_url') + '/external/skia/include.git@72f492321ad99fffc9962d8ef948a21df4f0687c',
+        Var('git_url') + '/external/skia/include.git@cfb32ead7d0bd08495f48486156ee9bc98045e69',
     'src/third_party/skia/src':
-        Var('git_url') + '/external/skia/src.git@482d2e86684260b1a7d8804b2c2df35bda72898a',
+        Var('git_url') + '/external/skia/src.git@93b0d3a5467e48b1b1ec7e4ab0c2c921dea045be',
     'src/third_party/smhasher/src':
         Var('git_url') + '/external/smhasher.git@b52816cce35fbfdda7d56c533cf53d15201513e3',
     'src/third_party/snappy/src':
@@ -134,31 +134,31 @@
     'src/third_party/swig/Lib':
         Var('git_url') + '/chromium/deps/swig/Lib.git@f2a695d52e61e6a8d967731434f165ed400f0d69',
     'src/third_party/trace-viewer':
-        Var('git_url') + '/external/trace-viewer.git@06893dc07731bf2bf4620e096b8d14abc4c99076',
+        Var('git_url') + '/external/trace-viewer.git@40253adbe30b792022242a57d4ed4dec4cdabb27',
     'src/third_party/usrsctp/usrsctplib':
         Var('git_url') + '/external/usrsctplib.git@368d86efa422ae7e549399f8c35783c0e80232f0',
     'src/third_party/webdriver/pylib':
         Var('git_url') + '/external/selenium/py.git@8212c8017c92a1ba740caf01c1acefb3674a6a44',
     'src/third_party/webgl/src':
-        Var('git_url') + '/external/khronosgroup/webgl.git@b6bce42c2484666d3e28dc25b12f27eb06f39f27',
+        Var('git_url') + '/external/khronosgroup/webgl.git@8f445334c2f13a6be762fbdc90c4d80397d31788',
     'src/third_party/webpagereplay':
         Var('git_url') + '/external/web-page-replay.git@1cf80576c1c4beb6185af0ac70eb7379c5e8262b',
     'src/third_party/webrtc':
-        Var('git_url') + '/external/webrtc/trunk/webrtc.git@55bc2810c06fe624311518c4502af5ca8a5c085c',
+        Var('git_url') + '/external/webrtc/trunk/webrtc.git@b031016337f09d758a97ed51b67788e574431103',
     'src/third_party/yasm/source/patched-yasm':
         Var('git_url') + '/chromium/deps/yasm/patched-yasm.git@c960eb11ccda80b10ed50be39df4f0663b371d1d',
     'src/tools/deps2git':
         Var('git_url') + '/chromium/tools/deps2git.git@f3ab61817e0c29800c6a5773eade3fc0d904d627',
     'src/tools/grit':
-        Var('git_url') + '/external/grit-i18n.git@3cc30808743b43aba1bc37a2c0e4b6fb55746508',
+        Var('git_url') + '/external/grit-i18n.git@1370f19146300b010e054e20bd733e183ba6f30e',
     'src/tools/gyp':
-        Var('git_url') + '/external/gyp.git@4e05c3342e09c44bbe594d0b5c7cda1227e7580f',
+        Var('git_url') + '/external/gyp.git@9a184eea4849278fd557627adcf48cb8e2ff9f67',
     'src/tools/page_cycler/acid3':
         Var('git_url') + '/chromium/deps/acid3.git@6be0a66a1ebd7ebc5abc1b2f405a945f6d871521',
     'src/tools/swarming_client':
         Var('git_url') + '/external/swarming.client.git@4eeada947e2fa4f48100ebb39b740bccabbc7747',
     'src/v8':
-        Var('git_url') + '/external/v8.git@c2e08d7d6b03e672e13fc3bf274a292009decce6',
+        Var('git_url') + '/external/v8.git@5aed4fc58b91cbb1ed563e2e07b74490ba953037',
 }
 
 deps_os = {
@@ -314,9 +314,9 @@
         'src/chrome/tools/test/reference_build/chrome_linux':
             Var('git_url') + '/chromium/reference_builds/chrome_linux64.git@5186d1b279358de0d9a581399281f2268932cd37',
         'src/third_party/chromite':
-            Var('git_url') + '/chromiumos/chromite.git@473f7ab6baf1781618f379a7680b56048b5e0ec1',
+            Var('git_url') + '/chromiumos/chromite.git@aaa614c9521c705071737f840f68d1262036bebe',
         'src/third_party/cros_system_api':
-            Var('git_url') + '/chromiumos/platform/system_api.git@926038efc28089447a2f9292d7dc8cdc7eff7a36',
+            Var('git_url') + '/chromiumos/platform/system_api.git@916c5d850ca4424b1de79e9e1054f34a23ee2e33',
         'src/third_party/fontconfig/src':
             Var('git_url') + '/external/fontconfig.git@f16c3118e25546c1b749f9823c51827a60aeb5c1',
         'src/third_party/freetype2/src':
@@ -363,7 +363,7 @@
         'src/third_party/swig/win':
             Var('git_url') + '/chromium/deps/swig/win.git@986f013ba518541adf5c839811efb35630a31031',
         'src/third_party/syzygy/binaries':
-            Var('git_url') + '/external/sawbuck/syzygy/binaries.git@df9bc6a160063bfced8def048fb75c560de449d1',
+            Var('git_url') + '/external/sawbuck/syzygy/binaries.git@fb4f87bc4c61151f2b9d38cd7ba321ab334a6992',
         'src/third_party/yasm/binaries':
             Var('git_url') + '/chromium/deps/yasm/binaries.git@52f9b3f4b0aa06da24ef8b123058bb61ee468881',
     },
diff --git a/.gitignore b/.gitignore
index cb53f38..f9dc728 100644
--- a/.gitignore
+++ b/.gitignore
@@ -69,6 +69,7 @@
 /chrome/app/theme/default_200_percent/google_chrome
 /chrome/app/theme/google_chrome
 /chrome/browser/autofill/internal
+/chrome/browser/extensions/api/ledger/
 /chrome/browser/extensions/default_extensions/chromeos
 /chrome/browser/google/linkdoctor_internal
 /chrome/browser/intents/internal/
@@ -86,6 +87,7 @@
 /chrome/chrome_user32_delay_imports.xml
 /chrome/chrome_version_resources.xml
 /chrome/common/extensions/api/api.xml
+/chrome/common/extensions/api/ledger/
 /chrome/Hammer
 /chrome/installer/linux/debian_wheezy_amd64-sysroot/
 /chrome/installer/linux/debian_wheezy_i386-sysroot/
diff --git a/AUTHORS b/AUTHORS
index f4c129d..8c0a049 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -38,6 +38,7 @@
 Arthur Lussos <developer0420@gmail.com>
 Arun Mankuzhi <arun.m@samsung.com>
 Arunprasad Rajkumar <ararunprasad@gmail.com>
+Avinaash Doreswamy <avi.nitk@samsung.com>
 Balazs Kelemen <b.kelemen@samsung.com>
 Behara Mani Shyam Patro <behara.ms@samsung.com>
 Bem Jones-Bey <bemajaniman@gmail.com>
@@ -144,6 +145,7 @@
 Jared Shumway <jaredshumway94@gmail.com>
 Jared Wein <weinjared@gmail.com>
 Jay Soffian <jaysoffian@gmail.com>
+Jeado Ko <haibane84@gmail.com>
 Jesse Miller <jesse@jmiller.biz>
 Jesus Sanchez-Palencia <jesus.sanchez-palencia.fernandez.fil@intel.com>
 Jin Yang <jin.a.yang@intel.com>
@@ -263,6 +265,7 @@
 Pierre-Antoine LaFayette <pierre.lafayette@gmail.com>
 Po-Chun Chang <pochang0403@gmail.com>
 Prashant Nevase <prashant.n@samsung.com>
+Puttaraju R <puttaraju.r@samsung.com>
 Qiankun Miao <qiankun.miao@intel.com>
 Qing Zhang <qing.zhang@intel.com>
 Radu Stavila <stavila@adobe.com>
@@ -286,6 +289,7 @@
 Robert Hogan <robhogan@gmail.com>
 Robert Nagy <robert.nagy@gmail.com>
 Robert Sesek <rsesek@bluestatic.org>
+Roland Takacs <rtakacs.u-szeged@partner.samsung.com>
 Rosen Dash <nqk836@motorola.com>
 Rosen Dash <rosen.dash@gmail.com>
 ruben <chromium@hybridsource.org>
@@ -335,6 +339,7 @@
 Sylvain Zimmer <sylvinus@gmail.com>
 Szymon Piechowicz <szymonpiechowicz@o2.pl>
 Takeshi Kurosawa <taken.spc@gmail.com>
+Tapu Kumar Ghose <ghose.tapu@gmail.com>
 Taylor Price <trprice@gmail.com>
 Ted Vessenes <tedvessenes@gmail.com>
 Teodora Novkovic <teodora.petrovic@gmail.com>
diff --git a/BUILD.gn b/BUILD.gn
index 9c1446b..b2b4bc1 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -21,13 +21,16 @@
     "//components/language_usage_metrics",
     "//components/navigation_metrics",
     "//components/onc",
+    "//components/os_crypt",
     "//components/startup_metric_utils",
+    "//components/resources:components_resources",
     #"//components/translate:translate_core_browser",
     #"//components/translate:translate_core_common",
+    "//components/url_matcher",
     "//crypto",
     "//device/usb",
     "//ipc",
-    #"//net",
+    "//net",
     #"//sdch",
     "//skia",
     #"//third_party/WebKit/Source/platform",
@@ -35,6 +38,7 @@
     "//third_party/leveldatabase",
     "//third_party/libpng",
     "//third_party/libusb",
+    "//third_party/libwebp",
     "//third_party/re2",
     "//third_party/smhasher:cityhash",
     "//third_party/smhasher:murmurhash3",
@@ -43,7 +47,9 @@
     "//tools/gn",
     "//ui/events",
     "//ui/gfx",
+    "//ui/resources",
     "//url",
+    "//v8:v8_base",
   ]
 
   if (is_linux) {
@@ -54,6 +60,9 @@
 
   if (is_android) {
     deps -= [
+      "//components/os_crypt",
+      "//crypto",
+      "//net",
       "//skia",
       "//third_party/libusb",
       "//tools/gn",
diff --git a/DEPS b/DEPS
index 8201c95..22bebf3 100644
--- a/DEPS
+++ b/DEPS
@@ -19,43 +19,43 @@
   "sourceforge_url": "http://svn.code.sf.net/p/%(repo)s/code",
   "llvm_url": "http://src.chromium.org/llvm-project",
   "llvm_git": "https://llvm.googlesource.com",
-  "libcxx_revision": "197314",
-  "libcxxabi_revision": "197063",
+  "libcxx_revision": "206024",
+  "libcxxabi_revision": "206024",
   "webkit_trunk": "http://src.chromium.org/blink/trunk",
   "nacl_trunk": "http://src.chromium.org/native_client/trunk",
-  "webkit_revision": "171541",
+  "webkit_revision": "172351",
   "chromium_git": "https://chromium.googlesource.com",
   "chromiumos_git": "https://chromium.googlesource.com/chromiumos",
   "skia_git": "https://skia.googlesource.com",
   "swig_revision": "230490",
-  "nacl_revision": "13006",
+  "nacl_revision": "13018",
   # After changing nacl_revision, run 'glient sync' and check native_client/DEPS
   # to update other nacl_*_revision's.
   "nacl_tools_revision": "12970",  # native_client/DEPS: tools_rev
   "google_toolbox_for_mac_revision": "662",
   "libaddressinput_revision": "176",
   "libphonenumber_revision": "621",
-  "libvpx_revision": "263116",
+  "libvpx_revision": "264320",
   "lss_revision": "26",
 
   # These two FFmpeg variables must be updated together.  One is used for SVN
   # checkouts and the other for Git checkouts.
-  "ffmpeg_revision": "255431",
-  "ffmpeg_hash": "681ca6bfed239ad2e1a6a3c8a586839c6dbd3e87",
+  "ffmpeg_revision": "264299",
+  "ffmpeg_hash": "ac4a9f31fe2610bd146857bbd55d7a260003a888",
 
   "sfntly_revision": "228",
   "lighttpd_revision": "33737",
-  "skia_revision": "14196",
-  "skia_hash": "a1ed7aec95eb8c77d1a39834fea476780007cade",
+  "skia_revision": "14324",
+  "skia_hash": "6e332f768f873323b418ee7b028f28662bfb43c6",
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Skia
   # and V8 without interference from each other.
   "v8_branch": "trunk",
-  "v8_revision": "20743",
+  "v8_revision": "20903",
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling WebRTC
   # and V8 without interference from each other.
-  "webrtc_revision": "5884",
+  "webrtc_revision": "5963",
   "jsoncpp_revision": "248",
   "nss_revision": "259440",
   # Three lines of non-changing comments so that
@@ -74,7 +74,7 @@
 
 deps = {
   "src/breakpad/src":
-    (Var("googlecode_url") % "google-breakpad") + "/trunk/src@1313",
+    (Var("googlecode_url") % "google-breakpad") + "/trunk/src@1318",
 
   "src/sdch/open-vcdiff":
     (Var("googlecode_url") % "open-vcdiff") + "/trunk@42",
@@ -89,7 +89,7 @@
     Var("chromium_git") + "/angle/angle.git@" + Var("angle_revision"),
 
   "src/third_party/trace-viewer":
-    (Var("googlecode_url") % "trace-viewer") + "/trunk@1240",
+    (Var("googlecode_url") % "trace-viewer") + "/trunk@1265",
 
   "src/third_party/WebKit":
     Var("webkit_trunk") + "@" + Var("webkit_revision"),
@@ -106,7 +106,7 @@
     "/trunk/deps/third_party/icu46@262949",
 
   "src/third_party/libexif/sources":
-    "/trunk/deps/third_party/libexif/sources@263766",
+    "/trunk/deps/third_party/libexif/sources@265008",
 
   "src/third_party/hunspell":
    "/trunk/deps/third_party/hunspell@256272",
@@ -134,10 +134,10 @@
     (Var("googlecode_url") % "snappy") + "/trunk@80",
 
   "src/tools/grit":
-    (Var("googlecode_url") % "grit-i18n") + "/trunk@160",
+    (Var("googlecode_url") % "grit-i18n") + "/trunk@167",
 
   "src/tools/gyp":
-    (Var("googlecode_url") % "gyp") + "/trunk@1892",
+    (Var("googlecode_url") % "gyp") + "/trunk@1895",
 
   "src/tools/swarming_client":
     Var("chromium_git") + "/external/swarming.client.git@" +
@@ -191,7 +191,7 @@
 
   "src/third_party/webgl/src":
     Var("chromium_git") +
-    "/external/khronosgroup/webgl.git@b6bce42c2484666d3e28dc25b12f27eb06f39f27",
+    "/external/khronosgroup/webgl.git@8f445334c2f13a6be762fbdc90c4d80397d31788",
 
   "src/third_party/swig/Lib":
     "/trunk/deps/third_party/swig/Lib@" + Var("swig_revision"),
@@ -253,7 +253,7 @@
         "/trunk/jsoncpp/src/lib_json@" + Var("jsoncpp_revision"),
 
   "src/third_party/libyuv":
-    (Var("googlecode_url") % "libyuv") + "/trunk@994",
+    (Var("googlecode_url") % "libyuv") + "/trunk@1000",
 
   "src/third_party/smhasher/src":
     (Var("googlecode_url") % "smhasher") + "/trunk@151",
@@ -279,7 +279,7 @@
     "/trunk/tools/deps2git@262731",
 
   "src/third_party/clang_format/script":
-    Var("llvm_url") + "/cfe/trunk/tools/clang-format@202065",
+    Var("llvm_url") + "/cfe/trunk/tools/clang-format@206068",
 
   "src/third_party/webpagereplay":
     (Var("googlecode_url") % "web-page-replay") + "/trunk@544",
@@ -294,7 +294,7 @@
     "/trunk/deps/cdm@262570",
 
   "src/third_party/mesa/src":
-    "/trunk/deps/third_party/mesa@261106",
+    "/trunk/deps/third_party/mesa@265279",
 
   "src/third_party/cld_2/src":
     (Var("googlecode_url") % "cld2") + "/trunk@160",
@@ -362,7 +362,7 @@
     # Binary level profile guided optimizations. This points to the
     # latest release binaries for the toolchain.
     "src/third_party/syzygy/binaries":
-      (Var("googlecode_url") % "sawbuck") + "/trunk/syzygy/binaries@2058",
+      (Var("googlecode_url") % "sawbuck") + "/trunk/syzygy/binaries@2126",
 
     # Binaries for nacl sdk.
     "src/third_party/nacl_sdk_binaries":
@@ -469,7 +469,7 @@
     # For Linux and Chromium OS.
     "src/third_party/cros_system_api":
       Var("chromiumos_git") + "/platform/system_api.git" +
-      "@926038efc28089447a2f9292d7dc8cdc7eff7a36",
+      "@916c5d850ca4424b1de79e9e1054f34a23ee2e33",
 
     # Note that this is different from Android's freetype repo.
     "src/third_party/freetype2/src":
@@ -479,7 +479,7 @@
     # Build tools for targeting ChromeOS.
     "src/third_party/chromite":
       Var("chromiumos_git") + "/chromite.git" +
-      "@473f7ab6baf1781618f379a7680b56048b5e0ec1",
+      "@aaa614c9521c705071737f840f68d1262036bebe",
 
     # Dependency of chromite.git.
     "src/third_party/pyelftools":
diff --git a/GypAndroid.darwin-arm.mk b/GypAndroid.darwin-arm.mk
index 2c1ddd3..2e6aa43 100644
--- a/GypAndroid.darwin-arm.mk
+++ b/GypAndroid.darwin-arm.mk
@@ -75,6 +75,7 @@
 include $(LOCAL_PATH)/gpu/command_buffer_common.target.darwin-arm.mk
 include $(LOCAL_PATH)/gpu/command_buffer_service.target.darwin-arm.mk
 include $(LOCAL_PATH)/gpu/disk_cache_proto.target.darwin-arm.mk
+include $(LOCAL_PATH)/gpu/gl_in_process_context.target.darwin-arm.mk
 include $(LOCAL_PATH)/gpu/gles2_c_lib.target.darwin-arm.mk
 include $(LOCAL_PATH)/gpu/gles2_cmd_helper.target.darwin-arm.mk
 include $(LOCAL_PATH)/gpu/gles2_implementation.target.darwin-arm.mk
@@ -152,6 +153,7 @@
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_codemirror_js.target.darwin-arm.mk
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_console_js.target.darwin-arm.mk
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_css.target.darwin-arm.mk
+include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_devices_js.target.darwin-arm.mk
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_elements_js.target.darwin-arm.mk
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_extensions_js.target.darwin-arm.mk
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_js.target.darwin-arm.mk
@@ -302,7 +304,6 @@
 include $(LOCAL_PATH)/ui/base/ui_base.target.darwin-arm.mk
 include $(LOCAL_PATH)/ui/base/ui_base_jni_headers.target.darwin-arm.mk
 include $(LOCAL_PATH)/ui/events/dom4_keycode_converter.target.darwin-arm.mk
-include $(LOCAL_PATH)/ui/events/events.target.darwin-arm.mk
 include $(LOCAL_PATH)/ui/events/events_base.target.darwin-arm.mk
 include $(LOCAL_PATH)/ui/events/gesture_detection.target.darwin-arm.mk
 include $(LOCAL_PATH)/ui/gfx/gfx.target.darwin-arm.mk
diff --git a/GypAndroid.darwin-mips.mk b/GypAndroid.darwin-mips.mk
index afdfabb..8ed6a60 100644
--- a/GypAndroid.darwin-mips.mk
+++ b/GypAndroid.darwin-mips.mk
@@ -75,6 +75,7 @@
 include $(LOCAL_PATH)/gpu/command_buffer_common.target.darwin-mips.mk
 include $(LOCAL_PATH)/gpu/command_buffer_service.target.darwin-mips.mk
 include $(LOCAL_PATH)/gpu/disk_cache_proto.target.darwin-mips.mk
+include $(LOCAL_PATH)/gpu/gl_in_process_context.target.darwin-mips.mk
 include $(LOCAL_PATH)/gpu/gles2_c_lib.target.darwin-mips.mk
 include $(LOCAL_PATH)/gpu/gles2_cmd_helper.target.darwin-mips.mk
 include $(LOCAL_PATH)/gpu/gles2_implementation.target.darwin-mips.mk
@@ -148,6 +149,7 @@
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_codemirror_js.target.darwin-mips.mk
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_console_js.target.darwin-mips.mk
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_css.target.darwin-mips.mk
+include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_devices_js.target.darwin-mips.mk
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_elements_js.target.darwin-mips.mk
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_extensions_js.target.darwin-mips.mk
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_js.target.darwin-mips.mk
@@ -284,7 +286,6 @@
 include $(LOCAL_PATH)/ui/base/ui_base.target.darwin-mips.mk
 include $(LOCAL_PATH)/ui/base/ui_base_jni_headers.target.darwin-mips.mk
 include $(LOCAL_PATH)/ui/events/dom4_keycode_converter.target.darwin-mips.mk
-include $(LOCAL_PATH)/ui/events/events.target.darwin-mips.mk
 include $(LOCAL_PATH)/ui/events/events_base.target.darwin-mips.mk
 include $(LOCAL_PATH)/ui/events/gesture_detection.target.darwin-mips.mk
 include $(LOCAL_PATH)/ui/gfx/gfx.target.darwin-mips.mk
diff --git a/GypAndroid.darwin-x86.mk b/GypAndroid.darwin-x86.mk
index 36d4867..9d036e1 100644
--- a/GypAndroid.darwin-x86.mk
+++ b/GypAndroid.darwin-x86.mk
@@ -75,6 +75,7 @@
 include $(LOCAL_PATH)/gpu/command_buffer_common.target.darwin-x86.mk
 include $(LOCAL_PATH)/gpu/command_buffer_service.target.darwin-x86.mk
 include $(LOCAL_PATH)/gpu/disk_cache_proto.target.darwin-x86.mk
+include $(LOCAL_PATH)/gpu/gl_in_process_context.target.darwin-x86.mk
 include $(LOCAL_PATH)/gpu/gles2_c_lib.target.darwin-x86.mk
 include $(LOCAL_PATH)/gpu/gles2_cmd_helper.target.darwin-x86.mk
 include $(LOCAL_PATH)/gpu/gles2_implementation.target.darwin-x86.mk
@@ -157,6 +158,7 @@
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_codemirror_js.target.darwin-x86.mk
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_console_js.target.darwin-x86.mk
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_css.target.darwin-x86.mk
+include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_devices_js.target.darwin-x86.mk
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_elements_js.target.darwin-x86.mk
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_extensions_js.target.darwin-x86.mk
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_js.target.darwin-x86.mk
@@ -312,7 +314,6 @@
 include $(LOCAL_PATH)/ui/base/ui_base.target.darwin-x86.mk
 include $(LOCAL_PATH)/ui/base/ui_base_jni_headers.target.darwin-x86.mk
 include $(LOCAL_PATH)/ui/events/dom4_keycode_converter.target.darwin-x86.mk
-include $(LOCAL_PATH)/ui/events/events.target.darwin-x86.mk
 include $(LOCAL_PATH)/ui/events/events_base.target.darwin-x86.mk
 include $(LOCAL_PATH)/ui/events/gesture_detection.target.darwin-x86.mk
 include $(LOCAL_PATH)/ui/gfx/gfx.target.darwin-x86.mk
diff --git a/GypAndroid.darwin-x86_64.mk b/GypAndroid.darwin-x86_64.mk
index 1af7eb2..22351eb 100644
--- a/GypAndroid.darwin-x86_64.mk
+++ b/GypAndroid.darwin-x86_64.mk
@@ -75,6 +75,7 @@
 include $(LOCAL_PATH)/gpu/command_buffer_common.target.darwin-x86_64.mk
 include $(LOCAL_PATH)/gpu/command_buffer_service.target.darwin-x86_64.mk
 include $(LOCAL_PATH)/gpu/disk_cache_proto.target.darwin-x86_64.mk
+include $(LOCAL_PATH)/gpu/gl_in_process_context.target.darwin-x86_64.mk
 include $(LOCAL_PATH)/gpu/gles2_c_lib.target.darwin-x86_64.mk
 include $(LOCAL_PATH)/gpu/gles2_cmd_helper.target.darwin-x86_64.mk
 include $(LOCAL_PATH)/gpu/gles2_implementation.target.darwin-x86_64.mk
@@ -157,6 +158,7 @@
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_codemirror_js.target.darwin-x86_64.mk
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_console_js.target.darwin-x86_64.mk
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_css.target.darwin-x86_64.mk
+include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_devices_js.target.darwin-x86_64.mk
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_elements_js.target.darwin-x86_64.mk
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_extensions_js.target.darwin-x86_64.mk
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_js.target.darwin-x86_64.mk
@@ -312,7 +314,6 @@
 include $(LOCAL_PATH)/ui/base/ui_base.target.darwin-x86_64.mk
 include $(LOCAL_PATH)/ui/base/ui_base_jni_headers.target.darwin-x86_64.mk
 include $(LOCAL_PATH)/ui/events/dom4_keycode_converter.target.darwin-x86_64.mk
-include $(LOCAL_PATH)/ui/events/events.target.darwin-x86_64.mk
 include $(LOCAL_PATH)/ui/events/events_base.target.darwin-x86_64.mk
 include $(LOCAL_PATH)/ui/events/gesture_detection.target.darwin-x86_64.mk
 include $(LOCAL_PATH)/ui/gfx/gfx.target.darwin-x86_64.mk
diff --git a/GypAndroid.linux-arm.mk b/GypAndroid.linux-arm.mk
index 84b7ec1..8111cd2 100644
--- a/GypAndroid.linux-arm.mk
+++ b/GypAndroid.linux-arm.mk
@@ -75,6 +75,7 @@
 include $(LOCAL_PATH)/gpu/command_buffer_common.target.linux-arm.mk
 include $(LOCAL_PATH)/gpu/command_buffer_service.target.linux-arm.mk
 include $(LOCAL_PATH)/gpu/disk_cache_proto.target.linux-arm.mk
+include $(LOCAL_PATH)/gpu/gl_in_process_context.target.linux-arm.mk
 include $(LOCAL_PATH)/gpu/gles2_c_lib.target.linux-arm.mk
 include $(LOCAL_PATH)/gpu/gles2_cmd_helper.target.linux-arm.mk
 include $(LOCAL_PATH)/gpu/gles2_implementation.target.linux-arm.mk
@@ -152,6 +153,7 @@
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_codemirror_js.target.linux-arm.mk
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_console_js.target.linux-arm.mk
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_css.target.linux-arm.mk
+include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_devices_js.target.linux-arm.mk
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_elements_js.target.linux-arm.mk
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_extensions_js.target.linux-arm.mk
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_js.target.linux-arm.mk
@@ -302,7 +304,6 @@
 include $(LOCAL_PATH)/ui/base/ui_base.target.linux-arm.mk
 include $(LOCAL_PATH)/ui/base/ui_base_jni_headers.target.linux-arm.mk
 include $(LOCAL_PATH)/ui/events/dom4_keycode_converter.target.linux-arm.mk
-include $(LOCAL_PATH)/ui/events/events.target.linux-arm.mk
 include $(LOCAL_PATH)/ui/events/events_base.target.linux-arm.mk
 include $(LOCAL_PATH)/ui/events/gesture_detection.target.linux-arm.mk
 include $(LOCAL_PATH)/ui/gfx/gfx.target.linux-arm.mk
diff --git a/GypAndroid.linux-mips.mk b/GypAndroid.linux-mips.mk
index 872e167..a519218 100644
--- a/GypAndroid.linux-mips.mk
+++ b/GypAndroid.linux-mips.mk
@@ -75,6 +75,7 @@
 include $(LOCAL_PATH)/gpu/command_buffer_common.target.linux-mips.mk
 include $(LOCAL_PATH)/gpu/command_buffer_service.target.linux-mips.mk
 include $(LOCAL_PATH)/gpu/disk_cache_proto.target.linux-mips.mk
+include $(LOCAL_PATH)/gpu/gl_in_process_context.target.linux-mips.mk
 include $(LOCAL_PATH)/gpu/gles2_c_lib.target.linux-mips.mk
 include $(LOCAL_PATH)/gpu/gles2_cmd_helper.target.linux-mips.mk
 include $(LOCAL_PATH)/gpu/gles2_implementation.target.linux-mips.mk
@@ -148,6 +149,7 @@
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_codemirror_js.target.linux-mips.mk
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_console_js.target.linux-mips.mk
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_css.target.linux-mips.mk
+include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_devices_js.target.linux-mips.mk
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_elements_js.target.linux-mips.mk
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_extensions_js.target.linux-mips.mk
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_js.target.linux-mips.mk
@@ -284,7 +286,6 @@
 include $(LOCAL_PATH)/ui/base/ui_base.target.linux-mips.mk
 include $(LOCAL_PATH)/ui/base/ui_base_jni_headers.target.linux-mips.mk
 include $(LOCAL_PATH)/ui/events/dom4_keycode_converter.target.linux-mips.mk
-include $(LOCAL_PATH)/ui/events/events.target.linux-mips.mk
 include $(LOCAL_PATH)/ui/events/events_base.target.linux-mips.mk
 include $(LOCAL_PATH)/ui/events/gesture_detection.target.linux-mips.mk
 include $(LOCAL_PATH)/ui/gfx/gfx.target.linux-mips.mk
diff --git a/GypAndroid.linux-x86.mk b/GypAndroid.linux-x86.mk
index ef32698..95f2ee3 100644
--- a/GypAndroid.linux-x86.mk
+++ b/GypAndroid.linux-x86.mk
@@ -75,6 +75,7 @@
 include $(LOCAL_PATH)/gpu/command_buffer_common.target.linux-x86.mk
 include $(LOCAL_PATH)/gpu/command_buffer_service.target.linux-x86.mk
 include $(LOCAL_PATH)/gpu/disk_cache_proto.target.linux-x86.mk
+include $(LOCAL_PATH)/gpu/gl_in_process_context.target.linux-x86.mk
 include $(LOCAL_PATH)/gpu/gles2_c_lib.target.linux-x86.mk
 include $(LOCAL_PATH)/gpu/gles2_cmd_helper.target.linux-x86.mk
 include $(LOCAL_PATH)/gpu/gles2_implementation.target.linux-x86.mk
@@ -157,6 +158,7 @@
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_codemirror_js.target.linux-x86.mk
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_console_js.target.linux-x86.mk
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_css.target.linux-x86.mk
+include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_devices_js.target.linux-x86.mk
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_elements_js.target.linux-x86.mk
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_extensions_js.target.linux-x86.mk
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_js.target.linux-x86.mk
@@ -312,7 +314,6 @@
 include $(LOCAL_PATH)/ui/base/ui_base.target.linux-x86.mk
 include $(LOCAL_PATH)/ui/base/ui_base_jni_headers.target.linux-x86.mk
 include $(LOCAL_PATH)/ui/events/dom4_keycode_converter.target.linux-x86.mk
-include $(LOCAL_PATH)/ui/events/events.target.linux-x86.mk
 include $(LOCAL_PATH)/ui/events/events_base.target.linux-x86.mk
 include $(LOCAL_PATH)/ui/events/gesture_detection.target.linux-x86.mk
 include $(LOCAL_PATH)/ui/gfx/gfx.target.linux-x86.mk
diff --git a/GypAndroid.linux-x86_64.mk b/GypAndroid.linux-x86_64.mk
index 931cd52..6bf34ab 100644
--- a/GypAndroid.linux-x86_64.mk
+++ b/GypAndroid.linux-x86_64.mk
@@ -75,6 +75,7 @@
 include $(LOCAL_PATH)/gpu/command_buffer_common.target.linux-x86_64.mk
 include $(LOCAL_PATH)/gpu/command_buffer_service.target.linux-x86_64.mk
 include $(LOCAL_PATH)/gpu/disk_cache_proto.target.linux-x86_64.mk
+include $(LOCAL_PATH)/gpu/gl_in_process_context.target.linux-x86_64.mk
 include $(LOCAL_PATH)/gpu/gles2_c_lib.target.linux-x86_64.mk
 include $(LOCAL_PATH)/gpu/gles2_cmd_helper.target.linux-x86_64.mk
 include $(LOCAL_PATH)/gpu/gles2_implementation.target.linux-x86_64.mk
@@ -157,6 +158,7 @@
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_codemirror_js.target.linux-x86_64.mk
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_console_js.target.linux-x86_64.mk
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_css.target.linux-x86_64.mk
+include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_devices_js.target.linux-x86_64.mk
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_elements_js.target.linux-x86_64.mk
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_extensions_js.target.linux-x86_64.mk
 include $(LOCAL_PATH)/third_party/WebKit/Source/devtools/concatenated_devtools_js.target.linux-x86_64.mk
@@ -312,7 +314,6 @@
 include $(LOCAL_PATH)/ui/base/ui_base.target.linux-x86_64.mk
 include $(LOCAL_PATH)/ui/base/ui_base_jni_headers.target.linux-x86_64.mk
 include $(LOCAL_PATH)/ui/events/dom4_keycode_converter.target.linux-x86_64.mk
-include $(LOCAL_PATH)/ui/events/events.target.linux-x86_64.mk
 include $(LOCAL_PATH)/ui/events/events_base.target.linux-x86_64.mk
 include $(LOCAL_PATH)/ui/events/gesture_detection.target.linux-x86_64.mk
 include $(LOCAL_PATH)/ui/gfx/gfx.target.linux-x86_64.mk
diff --git a/NOTICE b/NOTICE
index 23e4d1c..511fbba 100644
--- a/NOTICE
+++ b/NOTICE
@@ -2672,6 +2672,39 @@
 // ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 
+// Copyright (C) 2002-2013 The ANGLE Project Authors. 
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+//
+//     Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+//
+//     Redistributions in binary form must reproduce the above 
+//     copyright notice, this list of conditions and the following
+//     disclaimer in the documentation and/or other materials provided
+//     with the distribution.
+//
+//     Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc.
+//     Ltd., nor the names of their contributors may be used to endorse
+//     or promote products derived from this software without specific
+//     prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+// POSSIBILITY OF SUCH DAMAGE.
+
 
                                  Apache License
                            Version 2.0, January 2004
@@ -5360,6 +5393,34 @@
 ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
 PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
 
+// Copyright 2014 The Chromium Authors. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//    * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//    * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//    * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
 /*************************************************************************
  *
  *  IAccessible2 IDL Specification 
diff --git a/PRESUBMIT.py b/PRESUBMIT.py
index 1260528..67d5578 100644
--- a/PRESUBMIT.py
+++ b/PRESUBMIT.py
@@ -79,7 +79,7 @@
       False,
     ),
     (
-      'NSTrackingArea',
+      r'/NSTrackingArea\W',
       (
        'The use of NSTrackingAreas is prohibited. Please use CrTrackingArea',
        'instead.',
@@ -396,7 +396,14 @@
   for f in input_api.AffectedFiles(file_filter=file_filter):
     for line_num, line in f.ChangedContents():
       for func_name, message, error in _BANNED_OBJC_FUNCTIONS:
-        if func_name in line:
+        matched = False
+        if func_name[0:1] == '/':
+          regex = func_name[1:]
+          if input_api.re.search(regex, line):
+            matched = True
+        elif func_name in line:
+            matched = True
+        if matched:
           problems = warnings;
           if error:
             problems = errors;
@@ -911,8 +918,7 @@
                  r"^chrome[\\\/]browser[\\\/]ui[\\\/]startup[\\\/]"
                      r"startup_browser_creator\.cc$",
                  r"^chrome[\\\/]installer[\\\/]setup[\\\/].*",
-                 r"^chrome[\\\/]renderer[\\\/]extensions[\\\/]"
-                     r"logging_native_handler\.cc$",
+                 r"^extensions[\\\/]renderer[\\\/]logging_native_handler\.cc$",
                  r"^content[\\\/]common[\\\/]gpu[\\\/]client[\\\/]"
                      r"gl_helper_benchmark\.cc$",
                  r"^native_client_sdk[\\\/]",
@@ -1255,6 +1261,16 @@
   return results
 
 
+def GetTryServerMasterForBot(bot):
+  """Returns the Try Server master for the given bot.
+
+  Assumes that most Try Servers are on the tryserver.chromium master."""
+  non_default_master_map = {
+      'linux_gpu': 'tryserver.chromium.gpu',
+  }
+  return non_default_master_map.get(bot, 'tryserver.chromium')
+
+
 def GetDefaultTryConfigs(bots=None):
   """Returns a list of ('bot', set(['tests']), optionally filtered by [bots].
 
@@ -1323,6 +1339,7 @@
       'linux_chromium_compile_dbg': ['defaulttests'],
       'linux_chromium_rel': ['defaulttests'],
       'linux_chromium_clang_dbg': ['defaulttests'],
+      'linux_gpu': ['defaulttests'],
       'linux_nacl_sdk_build': ['compile'],
       'linux_rel': [
           'telemetry_perf_unittests',
@@ -1388,16 +1405,18 @@
                                  for x in builders_and_tests[bot]]
 
   if bots:
-    return {
-        'tryserver.chromium': dict((bot, set(builders_and_tests[bot]))
-                                   for bot in bots)
-    }
+    filtered_builders_and_tests = dict((bot, set(builders_and_tests[bot]))
+                                       for bot in bots)
   else:
-    return {
-        'tryserver.chromium': dict(
-            (bot, set(tests))
-            for bot, tests in builders_and_tests.iteritems())
-    }
+    filtered_builders_and_tests = dict(
+        (bot, set(tests))
+        for bot, tests in builders_and_tests.iteritems())
+
+  # Build up the mapping from tryserver master to bot/test.
+  out = dict()
+  for bot, tests in filtered_builders_and_tests.iteritems():
+    out.setdefault(GetTryServerMasterForBot(bot), {})[bot] = tests
+  return out
 
 
 def CheckChangeOnCommit(input_api, output_api):
@@ -1450,6 +1469,7 @@
       'linux_chromium_chromeos_rel',
       'linux_chromium_clang_dbg',
       'linux_chromium_rel',
+      'linux_gpu',
       'mac_chromium_compile_dbg',
       'mac_chromium_rel',
       'win_chromium_compile_dbg',
diff --git a/WATCHLISTS b/WATCHLISTS
index bfaaef8..748293c 100644
--- a/WATCHLISTS
+++ b/WATCHLISTS
@@ -215,6 +215,11 @@
     'content': {
       'filepath': 'content/',
     },
+    'content_input': {
+      'filepath': 'content/browser/renderer_host/input/|'\
+                  'content/common/input/|'\
+                  'content/renderer/input/',
+    },
     'content_shell': {
       'filepath': 'content/shell/',
     },
@@ -225,12 +230,12 @@
     'deep_memory_profiler': {
       'filepath': 'tools/(deep_memory_profiler|find_runtime_symbols)',
     },
-    'device_orientation': {
-      'filepath': 'content/browser/device_orientation/|'\
-                  'content/common/device_orientation/|'\
-                  'content/public/android/java/src/org/chromium/content/browser/DeviceMotionAndOrientation.java|'\
-                  'content/public/android/javatests/src/org/chromium/content/browser/DeviceMotionAndOrientationTest.java|'\
-                  'content/renderer/device_orientation/',
+    'device_sensors': {
+      'filepath': 'content/browser/device_sensors/|'\
+                  'content/common/device_sensors/|'\
+                  'content/public/android/java/src/org/chromium/content/browser/DeviceSensors.java|'\
+                  'content/public/android/javatests/src/org/chromium/content/browser/DeviceSensorsTest.java|'\
+                  'content/renderer/device_sensors/',
     },
     'devtools': {
       'filepath': 'devtools',
@@ -273,6 +278,9 @@
     'drive_resource_metadata': {
       'filepath': 'chrome/browser/chromeos/drive/resource_metadata'
     },
+    'events': {
+      'filepath': 'ui/events/',
+    },
     'extension': {
       'filepath': 'extension',
     },
@@ -286,7 +294,8 @@
                   'filebrowse'
     },
     'filesapp': {
-      'filepath': 'chrome/browser/resources/file_manager',
+      'filepath': 'chrome/browser/resources/file_manager|' \
+                  'ui/file_manager'
     },
     'ftp': {
       'filepath': 'ftp',
@@ -458,6 +467,9 @@
       'filepath': 'chrome/browser/resources/options/|'\
           'chrome/browser/ui/webui/options/',
     },
+    'overview_mode': {
+      'filepath': 'ash/wm/overview/',
+    },
     'ozone': {
       'filepath': 'ui/ozone/|'\
         'ui/events/ozone/|'\
@@ -752,10 +764,11 @@
     'clipboard': ['dcheng@chromium.org'],
     'content': ['jam@chromium.org',
                 'darin-cc@chromium.org'],
+    'content_input': ['jdduke+watch@chromium.org'],
     'content_shell': ['jochen+watch@chromium.org'],
     'cookie_monster': ['erikwright@chromium.org'],
     'deep_memory_profiler': ['dmikurube+memory@chromium.org'],
-    'device_orientation': ['timvolodine@chromium.org', 'mvanouwerkerk@chromium.org'],
+    'device_sensors': ['timvolodine@chromium.org', 'mvanouwerkerk@chromium.org', 'rijubrata.bhaumik@intel.com'],
     'devtools': ['pfeldman@chromium.org', 'yurys@chromium.org',
                  'vsevik@chromium.org', 'aandrey+blink@chromium.org',
                  'paulirish+reviews@chromium.org',
@@ -768,6 +781,7 @@
     'downloads_ui': ['asanka@chromium.org', 'benjhayden+dwatch@chromium.org'],
     'drive': ['tfarina@chromium.org'],
     'drive_resource_metadata': ['hashimoto+watch@chromium.org'],
+    'events': ['tdresser+watch@chromium.org'],
     'extension': ['chromium-apps-reviews@chromium.org',
                   'extensions-reviews@chromium.org'],
     'fileapi': ['kinuko+watch@chromium.org',
@@ -831,6 +845,7 @@
             'pedrosimonetti+watch@chromium.org'],
     'omnibox': ['suzhe@chromium.org'],
     'options': ['dbeam+watch-options@chromium.org'],
+    'overview_mode': ['tdanderson+overview@chromium.org'],
     'ozone': ['kalyan.kondapally@intel.com', 'ozone-reviews@chromium.org',
               'rjkroege@chromium.org'],
     'panels': ['dimich@chromium.org', 'jennb@chromium.org',
@@ -899,7 +914,8 @@
     'version_assembly': ['caitkp+watch@chromium.org',
                          'gab+watch@chromium.org'],
     'views': ['tfarina@chromium.org'],
-    'views_core': ['ben+views@chromium.org'],
+    'views_core': ['ben+views@chromium.org',
+                   'tdanderson+views@chromium.org'],
     'views_corewm': ['ben+corewm@chromium.org'],
     'virtual_keyboard': ['dfaden+virtualkb@google.com',
                          'groby+virtualkb@chromium.org'],
diff --git a/android_webview/android_webview_common.target.darwin-arm.mk b/android_webview/android_webview_common.target.darwin-arm.mk
index 46dd695..9a2354d 100644
--- a/android_webview/android_webview_common.target.darwin-arm.mk
+++ b/android_webview/android_webview_common.target.darwin-arm.mk
@@ -95,7 +95,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-fno-tree-sra \
 	-fuse-ld=gold \
 	-Wno-psabi \
@@ -147,12 +146,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -240,7 +242,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-fno-tree-sra \
 	-fuse-ld=gold \
 	-Wno-psabi \
@@ -292,12 +293,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -392,7 +396,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/android_webview/android_webview_common.target.darwin-mips.mk b/android_webview/android_webview_common.target.darwin-mips.mk
index 9e19f31..7cac107 100644
--- a/android_webview/android_webview_common.target.darwin-mips.mk
+++ b/android_webview/android_webview_common.target.darwin-mips.mk
@@ -95,7 +95,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-EL \
 	-mhard-float \
 	-ffunction-sections \
@@ -146,12 +145,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -239,7 +241,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-EL \
 	-mhard-float \
 	-ffunction-sections \
@@ -290,12 +291,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -388,7 +392,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/android_webview/android_webview_common.target.darwin-x86.mk b/android_webview/android_webview_common.target.darwin-x86.mk
index 6fe5a7c..c2a4527 100644
--- a/android_webview/android_webview_common.target.darwin-x86.mk
+++ b/android_webview/android_webview_common.target.darwin-x86.mk
@@ -94,7 +94,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-msse2 \
 	-mfpmath=sse \
 	-mmmx \
@@ -148,12 +147,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -239,7 +241,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-msse2 \
 	-mfpmath=sse \
 	-mmmx \
@@ -293,12 +294,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -390,7 +394,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/android_webview/android_webview_common.target.darwin-x86_64.mk b/android_webview/android_webview_common.target.darwin-x86_64.mk
index 1107c38..7940d31 100644
--- a/android_webview/android_webview_common.target.darwin-x86_64.mk
+++ b/android_webview/android_webview_common.target.darwin-x86_64.mk
@@ -96,7 +96,6 @@
 	-pipe \
 	-fPIC \
 	-Wno-unused-local-typedefs \
-	-Wno-unknown-pragmas \
 	-m64 \
 	-march=x86-64 \
 	-fuse-ld=gold \
@@ -148,12 +147,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -241,7 +243,6 @@
 	-pipe \
 	-fPIC \
 	-Wno-unused-local-typedefs \
-	-Wno-unknown-pragmas \
 	-m64 \
 	-march=x86-64 \
 	-fuse-ld=gold \
@@ -293,12 +294,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -390,7 +394,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/android_webview/android_webview_common.target.linux-arm.mk b/android_webview/android_webview_common.target.linux-arm.mk
index 46dd695..9a2354d 100644
--- a/android_webview/android_webview_common.target.linux-arm.mk
+++ b/android_webview/android_webview_common.target.linux-arm.mk
@@ -95,7 +95,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-fno-tree-sra \
 	-fuse-ld=gold \
 	-Wno-psabi \
@@ -147,12 +146,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -240,7 +242,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-fno-tree-sra \
 	-fuse-ld=gold \
 	-Wno-psabi \
@@ -292,12 +293,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -392,7 +396,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/android_webview/android_webview_common.target.linux-mips.mk b/android_webview/android_webview_common.target.linux-mips.mk
index 9e19f31..7cac107 100644
--- a/android_webview/android_webview_common.target.linux-mips.mk
+++ b/android_webview/android_webview_common.target.linux-mips.mk
@@ -95,7 +95,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-EL \
 	-mhard-float \
 	-ffunction-sections \
@@ -146,12 +145,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -239,7 +241,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-EL \
 	-mhard-float \
 	-ffunction-sections \
@@ -290,12 +291,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -388,7 +392,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/android_webview/android_webview_common.target.linux-x86.mk b/android_webview/android_webview_common.target.linux-x86.mk
index 6fe5a7c..c2a4527 100644
--- a/android_webview/android_webview_common.target.linux-x86.mk
+++ b/android_webview/android_webview_common.target.linux-x86.mk
@@ -94,7 +94,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-msse2 \
 	-mfpmath=sse \
 	-mmmx \
@@ -148,12 +147,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -239,7 +241,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-msse2 \
 	-mfpmath=sse \
 	-mmmx \
@@ -293,12 +294,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -390,7 +394,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/android_webview/android_webview_common.target.linux-x86_64.mk b/android_webview/android_webview_common.target.linux-x86_64.mk
index 1107c38..7940d31 100644
--- a/android_webview/android_webview_common.target.linux-x86_64.mk
+++ b/android_webview/android_webview_common.target.linux-x86_64.mk
@@ -96,7 +96,6 @@
 	-pipe \
 	-fPIC \
 	-Wno-unused-local-typedefs \
-	-Wno-unknown-pragmas \
 	-m64 \
 	-march=x86-64 \
 	-fuse-ld=gold \
@@ -148,12 +147,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -241,7 +243,6 @@
 	-pipe \
 	-fPIC \
 	-Wno-unused-local-typedefs \
-	-Wno-unknown-pragmas \
 	-m64 \
 	-march=x86-64 \
 	-fuse-ld=gold \
@@ -293,12 +294,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -390,7 +394,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/android_webview/android_webview_tests.gypi b/android_webview/android_webview_tests.gypi
index 18fcbe1..f3e8cbb 100644
--- a/android_webview/android_webview_tests.gypi
+++ b/android_webview/android_webview_tests.gypi
@@ -100,6 +100,7 @@
         'browser/net/android_stream_reader_url_request_job_unittest.cc',
         'browser/net/input_stream_reader_unittest.cc',
         'lib/main/webview_tests.cc',
+        'native/aw_contents_client_bridge_unittest.cc',
         'native/input_stream_unittest.cc',
         'native/state_serializer_unittest.cc',
       ],
@@ -122,6 +123,7 @@
       'type': 'none',
       'sources': [
           '../android_webview/unittestjava/src/org/chromium/android_webview/unittest/InputStreamUnittest.java',
+          '../android_webview/unittestjava/src/org/chromium/android_webview/unittest/MockAwContentsClientBridge.java',
       ],
       'variables': {
         'jni_gen_package': 'android_webview_unittests',
@@ -138,7 +140,6 @@
       ],
       'variables': {
         'test_suite_name': 'android_webview_unittests',
-        'input_shlib_path': '<(SHARED_LIB_DIR)/<(SHARED_LIB_PREFIX)android_webview_unittests<(SHARED_LIB_SUFFIX)',
       },
       'includes': [ '../build/apk_test.gypi' ],
     },
diff --git a/android_webview/browser/aw_content_browser_client.cc b/android_webview/browser/aw_content_browser_client.cc
index 778e466..db2dfa9 100644
--- a/android_webview/browser/aw_content_browser_client.cc
+++ b/android_webview/browser/aw_content_browser_client.cc
@@ -359,10 +359,13 @@
       const net::HttpNetworkSession* network_session,
       net::SSLCertRequestInfo* cert_request_info,
       const base::Callback<void(net::X509Certificate*)>& callback) {
-  LOG(WARNING) << "Client certificate request from "
-        << cert_request_info->host_and_port.ToString()
-        << " rejected. (Client certificates not supported in WebView)";
-  callback.Run(NULL);
+  AwContentsClientBridgeBase* client =
+      AwContentsClientBridgeBase::FromID(render_process_id, render_frame_id);
+  if (client) {
+    client->SelectClientCertificate(cert_request_info, callback);
+  } else {
+    callback.Run(NULL);
+  }
 }
 
 blink::WebNotificationPresenter::Permission
@@ -376,16 +379,9 @@
 
 void AwContentBrowserClient::ShowDesktopNotification(
     const content::ShowDesktopNotificationHostMsgParams& params,
-    int render_process_id,
-    int render_view_id,
-    bool worker) {
-  NOTREACHED() << "Android WebView does not support desktop notifications.";
-}
-
-void AwContentBrowserClient::CancelDesktopNotification(
-    int render_process_id,
-    int render_view_id,
-    int notification_id) {
+    content::RenderFrameHost* render_frame_host,
+    content::DesktopNotificationDelegate* delegate,
+    base::Closure* cancel_callback) {
   NOTREACHED() << "Android WebView does not support desktop notifications.";
 }
 
diff --git a/android_webview/browser/aw_content_browser_client.h b/android_webview/browser/aw_content_browser_client.h
index adae583..9e4f5f3 100644
--- a/android_webview/browser/aw_content_browser_client.h
+++ b/android_webview/browser/aw_content_browser_client.h
@@ -118,13 +118,9 @@
           int render_process_id) OVERRIDE;
   virtual void ShowDesktopNotification(
       const content::ShowDesktopNotificationHostMsgParams& params,
-      int render_process_id,
-      int render_view_id,
-      bool worker) OVERRIDE;
-  virtual void CancelDesktopNotification(
-      int render_process_id,
-      int render_view_id,
-      int notification_id) OVERRIDE;
+      content::RenderFrameHost* render_frame_host,
+      content::DesktopNotificationDelegate* delegate,
+      base::Closure* cancel_callback) OVERRIDE;
   virtual bool CanCreateWindow(const GURL& opener_url,
                                const GURL& opener_top_level_frame_url,
                                const GURL& source_origin,
diff --git a/android_webview/browser/aw_contents_client_bridge_base.h b/android_webview/browser/aw_contents_client_bridge_base.h
index a1b3b7f..a24aa4b 100644
--- a/android_webview/browser/aw_contents_client_bridge_base.h
+++ b/android_webview/browser/aw_contents_client_bridge_base.h
@@ -16,6 +16,7 @@
 }
 
 namespace net {
+class SSLCertRequestInfo;
 class X509Certificate;
 }
 
@@ -28,6 +29,8 @@
 // native/ from browser/ layer.
 class AwContentsClientBridgeBase {
  public:
+  typedef base::Callback<void(net::X509Certificate*)> SelectCertificateCallback;
+
   // Adds the handler to the UserData registry.
   static void Associate(content::WebContents* web_contents,
                         AwContentsClientBridgeBase* handler);
@@ -43,6 +46,9 @@
                                      const GURL& request_url,
                                      const base::Callback<void(bool)>& callback,
                                      bool* cancel_request) = 0;
+  virtual void SelectClientCertificate(
+      net::SSLCertRequestInfo* cert_request_info,
+      const SelectCertificateCallback& callback) = 0;
 
   virtual void RunJavaScriptDialog(
       content::JavaScriptMessageType message_type,
diff --git a/android_webview/browser/scoped_app_gl_state_restore.cc b/android_webview/browser/scoped_app_gl_state_restore.cc
index 6f71eee..059ce67 100644
--- a/android_webview/browser/scoped_app_gl_state_restore.cc
+++ b/android_webview/browser/scoped_app_gl_state_restore.cc
@@ -4,6 +4,8 @@
 
 #include "android_webview/browser/scoped_app_gl_state_restore.h"
 
+#include <string>
+
 #include "base/debug/trace_event.h"
 #include "base/lazy_instance.h"
 #include "ui/gl/gl_context.h"
@@ -48,7 +50,9 @@
     glDisable(cap);
 }
 
+bool g_globals_initialized = false;
 GLint g_gl_max_texture_units = 0;
+bool g_oes_vertex_array_object = false;
 
 }  // namespace
 
@@ -124,9 +128,16 @@
 
   glGetIntegerv(GL_FRAMEBUFFER_BINDING_EXT, &framebuffer_binding_ext_);
 
-  if (!g_gl_max_texture_units) {
+  if (!g_globals_initialized) {
+    g_globals_initialized = true;
+
     glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &g_gl_max_texture_units);
     DCHECK_GT(g_gl_max_texture_units, 0);
+
+    std::string extensions(
+        reinterpret_cast<const char*>(glGetString(GL_EXTENSIONS)));
+    g_oes_vertex_array_object =
+        extensions.find("GL_OES_vertex_array_object") != std::string::npos;
   }
 
   glGetIntegerv(GL_ACTIVE_TEXTURE, &active_texture_);
@@ -140,6 +151,9 @@
     glGetIntegerv(GL_TEXTURE_BINDING_EXTERNAL_OES,
                   &bindings.texture_external_oes);
   }
+
+  if (g_oes_vertex_array_object)
+    glGetIntegerv(GL_VERTEX_ARRAY_BINDING_OES, &vertex_array_bindings_oes_);
 }
 
 ScopedAppGLStateRestore::~ScopedAppGLStateRestore() {
@@ -225,6 +239,9 @@
 
   GLEnableDisable(GL_STENCIL_TEST, stencil_test_);
   glStencilFunc(stencil_func_, stencil_mask_, stencil_ref_);
+
+  if (g_oes_vertex_array_object)
+    glBindVertexArrayOES(vertex_array_bindings_oes_);
 }
 
 }  // namespace android_webview
diff --git a/android_webview/browser/scoped_app_gl_state_restore.h b/android_webview/browser/scoped_app_gl_state_restore.h
index a6e1b93..d28c9a5 100644
--- a/android_webview/browser/scoped_app_gl_state_restore.h
+++ b/android_webview/browser/scoped_app_gl_state_restore.h
@@ -95,6 +95,8 @@
 
   std::vector<TextureBindings> texture_bindings_;
 
+  GLint vertex_array_bindings_oes_;
+
   DISALLOW_COPY_AND_ASSIGN(ScopedAppGLStateRestore);
 };
 
diff --git a/android_webview/java/src/org/chromium/android_webview/AwBrowserContext.java b/android_webview/java/src/org/chromium/android_webview/AwBrowserContext.java
index fc991f8..d52ad4e 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwBrowserContext.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwBrowserContext.java
@@ -8,6 +8,7 @@
 import android.content.SharedPreferences;
 
 import org.chromium.content.browser.ContentViewStatics;
+import org.chromium.net.DefaultAndroidKeyStore;
 
 /**
  * Java side of the Browser Context: contains all the java side objects needed to host one
@@ -15,8 +16,6 @@
  * Note that due to running in single process mode, and limitations on renderer process only
  * being able to use a single browser context, currently there can only be one AwBrowserContext
  * instance, so at this point the class mostly exists for conceptual clarity.
- *
- * Obtain the default (singleton) instance with  AwBrowserProcess.getDefaultBrowserContext().
  */
 public class AwBrowserContext {
 
@@ -28,6 +27,8 @@
     private AwCookieManager mCookieManager;
     private AwFormDatabase mFormDatabase;
     private HttpAuthDatabase mHttpAuthDatabase;
+    private DefaultAndroidKeyStore mLocalKeyStore;
+    private ClientCertLookupTable mClientCertLookupTable;
 
     public AwBrowserContext(SharedPreferences sharedPreferences) {
         mSharedPreferences = sharedPreferences;
@@ -61,6 +62,20 @@
         return mHttpAuthDatabase;
     }
 
+    public DefaultAndroidKeyStore getKeyStore() {
+        if (mLocalKeyStore == null) {
+            mLocalKeyStore = new DefaultAndroidKeyStore();
+        }
+        return mLocalKeyStore;
+    }
+
+    public ClientCertLookupTable getClientCertLookupTable() {
+        if (mClientCertLookupTable == null) {
+            mClientCertLookupTable = new ClientCertLookupTable();
+        }
+        return mClientCertLookupTable;
+    }
+
     /**
      * @see android.webkit.WebView#pauseTimers()
      */
diff --git a/android_webview/java/src/org/chromium/android_webview/AwBrowserProcess.java b/android_webview/java/src/org/chromium/android_webview/AwBrowserProcess.java
index b3aa4f8..7044cb7 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwBrowserProcess.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwBrowserProcess.java
@@ -5,18 +5,13 @@
 package org.chromium.android_webview;
 
 import android.content.Context;
-import android.os.Build;
-import android.util.Log;
 
 import org.chromium.base.PathUtils;
 import org.chromium.base.ThreadUtils;
-import org.chromium.base.TraceEvent;
 import org.chromium.base.library_loader.LibraryLoader;
 import org.chromium.base.library_loader.ProcessInitException;
 import org.chromium.content.browser.BrowserStartupController;
 
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
 
 /**
  * Wrapper for the steps needed to initialize the java and native sides of webview chromium.
@@ -34,58 +29,11 @@
         PathUtils.setPrivateDataDirectorySuffix(PRIVATE_DATA_DIRECTORY_SUFFIX);
         try {
             LibraryLoader.loadNow();
-            initTraceEvent();
         } catch (ProcessInitException e) {
             throw new RuntimeException("Cannot load WebView", e);
         }
     }
 
-    // TODO(benm): Move this function into WebView code in Android tree to avoid reflection.
-    private static void initTraceEvent() {
-        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) return;
-
-        try {
-            final Class<?> traceClass = Class.forName("android.os.Trace");
-            final long traceTagView = traceClass.getField("TRACE_TAG_WEBVIEW").getLong(null);
-
-            final Class<?> systemPropertiesClass = Class.forName("android.os.SystemProperties");
-            final Method systemPropertiesGetLongMethod = systemPropertiesClass.getDeclaredMethod(
-                    "getLong", String.class, Long.TYPE);
-            final Method addChangeCallbackMethod = systemPropertiesClass.getDeclaredMethod(
-                    "addChangeCallback", Runnable.class);
-
-            // Won't reach here if any of the above reflect lookups fail.
-            addChangeCallbackMethod.invoke(null, new Runnable() {
-                @Override
-                public void run() {
-                    try {
-                        long enabledFlags = (Long) systemPropertiesGetLongMethod.invoke(
-                                null, "debug.atrace.tags.enableflags", 0);
-                        TraceEvent.setATraceEnabled((enabledFlags & traceTagView) != 0);
-                    } catch (IllegalArgumentException e) {
-                        Log.e(TAG, "systemPropertyChanged", e);
-                    } catch (IllegalAccessException e) {
-                        Log.e(TAG, "systemPropertyChanged", e);
-                    } catch (InvocationTargetException e) {
-                        Log.e(TAG, "systemPropertyChanged", e);
-                    }
-                }
-            });
-        } catch (ClassNotFoundException e) {
-            Log.e(TAG, "initTraceEvent", e);
-        } catch (NoSuchMethodException e) {
-            Log.e(TAG, "initTraceEvent", e);
-        } catch (IllegalArgumentException e) {
-            Log.e(TAG, "initTraceEvent", e);
-        } catch (IllegalAccessException e) {
-            Log.e(TAG, "initTraceEvent", e);
-        } catch (InvocationTargetException e) {
-            Log.e(TAG, "initTraceEvent", e);
-        } catch (NoSuchFieldException e) {
-            Log.e(TAG, "initTraceEvent", e);
-        }
-    }
-
     /**
      * Starts the chromium browser process running within this process. Creates threads
      * and performs other per-app resource allocations; must not be called from zygote.
diff --git a/android_webview/java/src/org/chromium/android_webview/AwContents.java b/android_webview/java/src/org/chromium/android_webview/AwContents.java
index c8796ac..832e907 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwContents.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwContents.java
@@ -508,7 +508,8 @@
         mLayoutSizer.setDelegate(new AwLayoutSizerDelegate());
         mLayoutSizer.setDIPScale(mDIPScale);
         mWebContentsDelegate = new AwWebContentsDelegateAdapter(contentsClient, mContainerView);
-        mContentsClientBridge = new AwContentsClientBridge(contentsClient);
+        mContentsClientBridge = new AwContentsClientBridge(contentsClient,
+                mBrowserContext.getKeyStore(), mBrowserContext.getClientCertLookupTable());
         mZoomControls = new AwZoomControls(this);
         mIoThreadClient = new IoThreadClientImpl();
         mInterceptNavigationDelegate = new InterceptNavigationDelegateImpl();
@@ -1369,6 +1370,15 @@
     }
 
     /**
+     * @see android.webkit.WebView#clearClientCertPreferences()
+     */
+    public void clearClientCertPreferences() {
+        mBrowserContext.getClientCertLookupTable().clear();
+        if (mNativeAwContents == 0) return;
+        nativeClearClientCertPreferences(mNativeAwContents);
+    }
+
+    /**
      * Method to return all hit test values relevant to public WebView API.
      * Note that this expose more data than needed for WebView.getHitTestResult.
      * Unsafely returning reference to mutable internal object to avoid excessive
@@ -2140,4 +2150,5 @@
 
     private native void nativeCreatePdfExporter(long nativeAwContents, AwPdfExporter awPdfExporter);
 
+    private native void nativeClearClientCertPreferences(long nativeAwContents);
 }
diff --git a/android_webview/java/src/org/chromium/android_webview/AwContentsClient.java b/android_webview/java/src/org/chromium/android_webview/AwContentsClient.java
index 22e7c7d..fa59347 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwContentsClient.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwContentsClient.java
@@ -21,6 +21,8 @@
 import org.chromium.content.browser.WebContentsObserverAndroid;
 import org.chromium.net.NetError;
 
+import java.security.Principal;
+
 /**
  * Base-class that an AwContents embedder derives from to receive callbacks.
  * This extends ContentViewClient, as in many cases we want to pass-thru ContentViewCore
@@ -165,6 +167,12 @@
 
     public abstract void onReceivedSslError(ValueCallback<Boolean> callback, SslError error);
 
+    // TODO(sgurun): Make abstract once this has rolled in downstream.
+    public void onReceivedClientCertRequest(
+            final AwContentsClientBridge.ClientCertificateRequestCallback callback,
+            final String[] keyTypes, final Principal[] principals, final String host,
+            final int port) { }
+
     public abstract void onReceivedLoginRequest(String realm, String account, String args);
 
     public abstract void onFormResubmission(Message dontResend, Message resend);
diff --git a/android_webview/java/src/org/chromium/android_webview/AwContentsClientBridge.java b/android_webview/java/src/org/chromium/android_webview/AwContentsClientBridge.java
index 66e4f1e..7b0bb40 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwContentsClientBridge.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwContentsClientBridge.java
@@ -6,10 +6,21 @@
 
 import android.net.http.SslCertificate;
 import android.net.http.SslError;
+import android.util.Log;
 import android.webkit.ValueCallback;
 
 import org.chromium.base.CalledByNative;
 import org.chromium.base.JNINamespace;
+import org.chromium.base.ThreadUtils;
+import org.chromium.net.AndroidPrivateKey;
+import org.chromium.net.DefaultAndroidKeyStore;
+
+import java.security.Principal;
+import java.security.PrivateKey;
+import java.security.cert.CertificateEncodingException;
+import java.security.cert.X509Certificate;
+
+import javax.security.auth.x500.X500Principal;
 
 /**
  * This class handles the JNI communication logic for the the AwContentsClient class.
@@ -20,14 +31,125 @@
  */
 @JNINamespace("android_webview")
 public class AwContentsClientBridge {
+    static final String TAG = "AwContentsClientBridge";
 
     private AwContentsClient mClient;
     // The native peer of this object.
     private long mNativeContentsClientBridge;
 
-    public AwContentsClientBridge(AwContentsClient client) {
+    private DefaultAndroidKeyStore mLocalKeyStore;
+
+    private ClientCertLookupTable mLookupTable;
+
+    // Used for mocking this class in tests.
+    protected AwContentsClientBridge(DefaultAndroidKeyStore keyStore,
+            ClientCertLookupTable table) {
+        mLocalKeyStore = keyStore;
+        mLookupTable = table;
+    }
+
+    public AwContentsClientBridge(AwContentsClient client, DefaultAndroidKeyStore keyStore,
+            ClientCertLookupTable table) {
         assert client != null;
         mClient = client;
+        mLocalKeyStore = keyStore;
+        mLookupTable = table;
+    }
+
+    /**
+     * Callback to communicate clientcertificaterequest back to the AwContentsClientBridge.
+     * The public methods should be called on UI thread.
+     * A request can not be proceeded, ignored  or canceled more than once. Doing this
+     * is a programming error and causes an exception.
+     */
+    public class ClientCertificateRequestCallback {
+
+        private int mId;
+        private String mHost;
+        private int mPort;
+        private boolean mIsCalled;
+
+        public ClientCertificateRequestCallback(int id, String host, int port) {
+            mId = id;
+            mHost = host;
+            mPort = port;
+        }
+
+        public void proceed(final PrivateKey privateKey, final X509Certificate[] chain) {
+            ThreadUtils.runOnUiThread(new Runnable() {
+                @Override
+                public void run() {
+                    proceedOnUiThread(privateKey, chain);
+                }
+            });
+        }
+
+        public void ignore() {
+            ThreadUtils.runOnUiThread(new Runnable() {
+                @Override
+                public void run() {
+                    ignoreOnUiThread();
+                }
+            });
+        }
+
+        public void cancel() {
+            ThreadUtils.runOnUiThread(new Runnable() {
+                @Override
+                public void run() {
+                    cancelOnUiThread();
+                }
+
+            });
+        }
+
+        private void proceedOnUiThread(PrivateKey privateKey, X509Certificate[] chain) {
+            checkIfCalled();
+
+            AndroidPrivateKey key = mLocalKeyStore.createKey(privateKey);
+
+            if (key == null || chain == null || chain.length == 0) {
+                Log.w(TAG, "Empty client certificate chain?");
+                provideResponse(null, null);
+                return;
+            }
+            // Encode the certificate chain.
+            byte[][] encodedChain = new byte[chain.length][];
+            try {
+                for (int i = 0; i < chain.length; ++i) {
+                    encodedChain[i] = chain[i].getEncoded();
+                }
+            } catch (CertificateEncodingException e) {
+                Log.w(TAG, "Could not retrieve encoded certificate chain: " + e);
+                provideResponse(null, null);
+                return;
+            }
+            mLookupTable.allow(mHost, mPort, key, encodedChain);
+            provideResponse(key, encodedChain);
+        }
+
+        private void ignoreOnUiThread() {
+            checkIfCalled();
+            provideResponse(null, null);
+        }
+
+        private void cancelOnUiThread() {
+            checkIfCalled();
+            mLookupTable.deny(mHost, mPort);
+            provideResponse(null, null);
+        }
+
+        private void checkIfCalled() {
+            if (mIsCalled) {
+                throw new IllegalStateException("The callback was already called.");
+            }
+            mIsCalled = true;
+        }
+
+        private void provideResponse(AndroidPrivateKey androidKey, byte[][] certChain) {
+            nativeProvideClientCertificateResponse(mNativeContentsClientBridge, mId,
+                    certChain, androidKey);
+        }
     }
 
     // Used by the native peer to set/reset a weak ref to the native peer.
@@ -53,8 +175,13 @@
         final SslError sslError = SslUtil.sslErrorFromNetErrorCode(certError, cert, url);
         ValueCallback<Boolean> callback = new ValueCallback<Boolean>() {
             @Override
-            public void onReceiveValue(Boolean value) {
-                proceedSslError(value.booleanValue(), id);
+            public void onReceiveValue(final Boolean value) {
+                ThreadUtils.runOnUiThread(new Runnable() {
+                    @Override
+                    public void run() {
+                        proceedSslError(value.booleanValue(), id);
+                    }
+                });
             }
         };
         mClient.onReceivedSslError(callback, sslError);
@@ -66,6 +193,43 @@
         nativeProceedSslError(mNativeContentsClientBridge, proceed, id);
     }
 
+    // Intentionally not private for testing the native peer of this class.
+    @CalledByNative
+    protected void selectClientCertificate(final int id, final String[] keyTypes,
+            byte[][] encodedPrincipals, final String host, final int port) {
+        ClientCertLookupTable.Cert cert = mLookupTable.getCertData(host, port);
+        if (mLookupTable.isDenied(host, port)) {
+            nativeProvideClientCertificateResponse(mNativeContentsClientBridge, id,
+                    null, null);
+            return;
+        }
+        if (cert != null) {
+            nativeProvideClientCertificateResponse(mNativeContentsClientBridge, id,
+                    cert.certChain, cert.privateKey);
+            return;
+        }
+        // Build the list of principals from encoded versions.
+        Principal[] principals = null;
+        if (encodedPrincipals.length > 0) {
+            principals = new X500Principal[encodedPrincipals.length];
+            for (int n = 0; n < encodedPrincipals.length; n++) {
+                try {
+                    principals[n] = new X500Principal(encodedPrincipals[n]);
+                } catch (IllegalArgumentException e) {
+                    Log.w(TAG, "Exception while decoding issuers list: " + e);
+                    nativeProvideClientCertificateResponse(mNativeContentsClientBridge, id,
+                        null, null);
+                    return;
+                }
+            }
+
+        }
+
+        final ClientCertificateRequestCallback callback =
+                new ClientCertificateRequestCallback(id, host, port);
+        mClient.onReceivedClientCertRequest(callback, keyTypes, principals, host, port);
+    }
+
     @CalledByNative
     private void handleJsAlert(String url, String message, int id) {
         JsResultHandler handler = new JsResultHandler(this, id);
@@ -110,6 +274,8 @@
     //--------------------------------------------------------------------------------------------
     private native void nativeProceedSslError(long nativeAwContentsClientBridge, boolean proceed,
             int id);
+    private native void nativeProvideClientCertificateResponse(long nativeAwContentsClientBridge,
+            int id, byte[][] certChain, AndroidPrivateKey androidKey);
 
     private native void nativeConfirmJsResult(long nativeAwContentsClientBridge, int id,
             String prompt);
diff --git a/android_webview/java/src/org/chromium/android_webview/AwSettings.java b/android_webview/java/src/org/chromium/android_webview/AwSettings.java
index a00235b..0b43d0b 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwSettings.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwSettings.java
@@ -14,6 +14,8 @@
 import android.webkit.WebSettings;
 import android.webkit.WebSettings.PluginState;
 
+import com.google.common.annotations.VisibleForTesting;
+
 import org.chromium.base.CalledByNative;
 import org.chromium.base.JNINamespace;
 import org.chromium.base.ThreadUtils;
@@ -36,6 +38,14 @@
         TEXT_AUTOSIZING,
     }
 
+    // These constants must be kept in sync with the Android framework, defined in WebSettimgs.
+    @VisibleForTesting
+    public static final int MIXED_CONTENT_ALWAYS_ALLOW = 0;
+    @VisibleForTesting
+    public static final int MIXED_CONTENT_NEVER_ALLOW = 1;
+    @VisibleForTesting
+    public static final int MIXED_CONTENT_COMPATIBILITY_MODE = 2;
+
     private static final String TAG = "AwSettings";
 
     // This class must be created on the UI thread. Afterwards, it can be
@@ -83,6 +93,7 @@
     private float mInitialPageScalePercent = 0;
     private boolean mSpatialNavigationEnabled;  // Default depends on device features.
     private boolean mEnableSupportedHardwareAcceleratedFeatures = false;
+    private int mMixedContentMode = MIXED_CONTENT_NEVER_ALLOW;
 
     private final boolean mSupportLegacyQuirks;
 
@@ -1430,6 +1441,34 @@
         }
     }
 
+    public void setMixedContentMode(int mode) {
+        synchronized (mAwSettingsLock) {
+            if (mMixedContentMode != mode) {
+                mMixedContentMode = mode;
+                mEventHandler.updateWebkitPreferencesLocked();
+            }
+        }
+    }
+
+    public int getMixedContentMode() {
+        synchronized (mAwSettingsLock) {
+            return mMixedContentMode;
+        }
+    }
+
+    @CalledByNative
+    private boolean getAllowRunningInsecureContentLocked() {
+        assert Thread.holdsLock(mAwSettingsLock);
+        return mMixedContentMode == MIXED_CONTENT_ALWAYS_ALLOW;
+    }
+
+    @CalledByNative
+    private boolean getAllowDisplayingInsecureContentLocked() {
+        assert Thread.holdsLock(mAwSettingsLock);
+        return mMixedContentMode == MIXED_CONTENT_ALWAYS_ALLOW ||
+                mMixedContentMode == MIXED_CONTENT_COMPATIBILITY_MODE;
+    }
+
     @CalledByNative
     private boolean supportsDoubleTapZoomLocked() {
         assert Thread.holdsLock(mAwSettingsLock);
diff --git a/android_webview/java/src/org/chromium/android_webview/ClientCertLookupTable.java b/android_webview/java/src/org/chromium/android_webview/ClientCertLookupTable.java
new file mode 100644
index 0000000..65ef44a
--- /dev/null
+++ b/android_webview/java/src/org/chromium/android_webview/ClientCertLookupTable.java
@@ -0,0 +1,76 @@
+// 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.
+
+package org.chromium.android_webview;
+
+import org.chromium.net.AndroidPrivateKey;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Store user's client certificate decision for a host and port pair. Not
+ * thread-safe. All accesses are done on UI thread.
+ */
+public class ClientCertLookupTable {
+
+    /**
+     * A container for the certificate data.
+     */
+    public static class Cert {
+        AndroidPrivateKey privateKey;
+        byte[][] certChain;
+        public Cert(AndroidPrivateKey privateKey, byte[][] certChain) {
+            this.privateKey = privateKey;
+            byte[][] newChain = new byte[certChain.length][];
+            for (int i = 0; i < certChain.length; i++) {
+                newChain[i] = Arrays.copyOf(certChain[i], certChain[i].length);
+            }
+            this.certChain = newChain;
+        }
+    };
+
+    private final Map<String, Cert> mCerts;
+    private final Set<String> mDenieds;
+
+    // Clear client certificate preferences
+    public void clear() {
+        mCerts.clear();
+        mDenieds.clear();
+    }
+
+    public ClientCertLookupTable() {
+        mCerts = new HashMap<String, Cert>();
+        mDenieds = new HashSet<String>();
+    }
+
+    public void allow(String host, int port, AndroidPrivateKey privateKey, byte[][] chain) {
+        String host_and_port = hostAndPort(host, port);
+        mCerts.put(host_and_port, new Cert(privateKey, chain));
+        mDenieds.remove(host_and_port);
+    }
+
+    public void deny(String host, int port) {
+        String host_and_port = hostAndPort(host, port);
+        mCerts.remove(host_and_port);
+        mDenieds.add(host_and_port);
+    }
+
+    public Cert getCertData(String host, int port) {
+        return mCerts.get(hostAndPort(host, port));
+    }
+
+    public boolean isDenied(String host, int port) {
+        return mDenieds.contains(hostAndPort(host, port));
+    }
+
+    // TODO(sgurun) add a test for this. Not separating host and pair properly will be
+    // a security issue.
+    private static String hostAndPort(String host, int port) {
+        return host + ":" + port;
+    }
+}
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientFullScreenVideoTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientFullScreenVideoTest.java
index f26696a..ee50901 100644
--- a/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientFullScreenVideoTest.java
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientFullScreenVideoTest.java
@@ -4,39 +4,63 @@
 
 package org.chromium.android_webview.test;
 
+import android.test.suitebuilder.annotation.MediumTest;
 import android.view.KeyEvent;
 
 import org.chromium.android_webview.test.util.VideoTestWebServer;
-import org.chromium.base.test.util.DisabledTest;
 import org.chromium.base.test.util.Feature;
+import org.chromium.content.browser.ContentVideoView;
 import org.chromium.content.browser.test.util.TouchCommon;
 
 /**
  * Test WebChromeClient::onShow/HideCustomView.
  */
 public class AwContentsClientFullScreenVideoTest extends AwTestBase {
+    private FullScreenVideoTestAwContentsClient mContentsClient;
 
-    /** Disabled to unblock the waterfall, investigating in http://crbug.com/361514. */
+    @MediumTest
     @Feature({"AndroidWebView"})
-    @DisabledTest
-    public void testOnShowAndHideCustomView() throws Throwable {
-        FullScreenVideoTestAwContentsClient contentsClient =
-                new FullScreenVideoTestAwContentsClient(getActivity());
+    public void testOnShowAndHideCustomViewWithCallback() throws Throwable {
+        doOnShowAndHideCustomViewTest(new Runnable() {
+            @Override
+            public void run() {
+                mContentsClient.getExitCallback().onCustomViewHidden();
+            }
+        });
+    }
+
+    @MediumTest
+    @Feature({"AndroidWebView"})
+    public void testOnShowAndHideCustomViewWithBackKey() throws Throwable {
+        doOnShowAndHideCustomViewTest(new Runnable() {
+            @Override
+            public void run() {
+                ContentVideoView view = mContentsClient.getVideoView();
+                view.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK));
+                view.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK));
+            }
+        });
+    }
+
+    private void doOnShowAndHideCustomViewTest(Runnable existFullscreen) throws Throwable {
+        mContentsClient = new FullScreenVideoTestAwContentsClient(getActivity());
         AwTestContainerView testContainerView =
-                createAwTestContainerViewOnMainSync(contentsClient);
+                createAwTestContainerViewOnMainSync(mContentsClient);
         enableJavaScriptOnUiThread(testContainerView.getAwContents());
         VideoTestWebServer webServer = new VideoTestWebServer(
                 getInstrumentation().getTargetContext());
         try {
             loadUrlSync(testContainerView.getAwContents(),
-                    contentsClient.getOnPageFinishedHelper(),
+                    mContentsClient.getOnPageFinishedHelper(),
                     webServer.getFullScreenVideoTestURL());
             Thread.sleep(5 * 1000);
+
             TouchCommon touchCommon = new TouchCommon(this);
             touchCommon.singleClickView(testContainerView);
-            contentsClient.waitForCustomViewShown();
-            getInstrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);
-            contentsClient.waitForCustomViewHidden();
+            mContentsClient.waitForCustomViewShown();
+
+            getInstrumentation().runOnMainSync(existFullscreen);
+            mContentsClient.waitForCustomViewHidden();
         } finally {
             if (webServer != null) webServer.getTestWebServer().shutdown();
         }
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsTest.java
index 5b7f86c..6f27291 100644
--- a/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsTest.java
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsTest.java
@@ -18,7 +18,6 @@
 import org.chromium.android_webview.AwSettings;
 import org.chromium.android_webview.test.TestAwContentsClient.OnDownloadStartHelper;
 import org.chromium.android_webview.test.util.CommonResources;
-import org.chromium.base.test.util.DisabledTest;
 import org.chromium.base.test.util.Feature;
 import org.chromium.content.browser.test.util.CallbackHelper;
 import org.chromium.net.test.util.TestWebServer;
@@ -291,9 +290,8 @@
         }
     }
 
-    /** Disabled to unblock the waterfall, investigating in http://crbug.com/363563. */
     @Feature({"AndroidWebView", "Downloads"})
-    @DisabledTest
+    @SmallTest
     public void testDownload() throws Throwable {
         AwTestContainerView testView = createAwTestContainerViewOnMainSync(mContentsClient);
         AwContents awContents = testView.getAwContents();
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AwSettingsTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/AwSettingsTest.java
index 6fd74b9..16ab9d9 100644
--- a/android_webview/javatests/src/org/chromium/android_webview/test/AwSettingsTest.java
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/AwSettingsTest.java
@@ -6,12 +6,14 @@
 
 import android.content.Context;
 import android.graphics.Point;
+import android.net.http.SslError;
 import android.os.Build;
 import android.os.SystemClock;
 import android.test.suitebuilder.annotation.MediumTest;
 import android.test.suitebuilder.annotation.SmallTest;
 import android.view.WindowManager;
 import android.webkit.JavascriptInterface;
+import android.webkit.ValueCallback;
 import android.webkit.WebSettings;
 
 import org.apache.http.Header;
@@ -2633,6 +2635,61 @@
         }
     }
 
+    @SmallTest
+    @Feature({"AndroidWebView", "Preferences"})
+    public void testAllowMixedMode() throws Throwable {
+        final TestAwContentsClient contentClient = new TestAwContentsClient() {
+            @Override
+            public void onReceivedSslError(ValueCallback<Boolean> callback, SslError error) {
+                callback.onReceiveValue(true);
+            }
+        };
+        final AwTestContainerView testContainerView =
+                createAwTestContainerViewOnMainSync(contentClient);
+        final AwContents awContents = testContainerView.getAwContents();
+        final AwSettings awSettings = getAwSettingsOnUiThread(awContents);
+
+        awSettings.setJavaScriptEnabled(true);
+
+        TestWebServer httpsServer = new TestWebServer(true);
+        TestWebServer httpServer = new TestWebServer(false);
+
+        final String JS_URL = "/insecure.js";
+        final String IMG_URL = "/insecure.png";
+        final String SECURE_URL = "/secure.html";
+        httpServer.setResponse(JS_URL, "window.loaded_js = 42;", null);
+        httpServer.setResponseBase64(IMG_URL, CommonResources.FAVICON_DATA_BASE64, null);
+
+        final String JS_HTML = "<script src=\"" + httpServer.getResponseUrl(JS_URL) +
+                "\"></script>";
+        final String IMG_HTML = "<img src=\"" + httpServer.getResponseUrl(IMG_URL) + "\" />";
+        final String SECURE_HTML = "<body>" + IMG_HTML + " " + JS_HTML + "</body>";
+
+        String secureUrl = httpsServer.setResponse(SECURE_URL, SECURE_HTML, null);
+
+        awSettings.setMixedContentMode(AwSettings.MIXED_CONTENT_NEVER_ALLOW);
+        loadUrlSync(awContents, contentClient.getOnPageFinishedHelper(), secureUrl);
+        assertEquals(1, httpsServer.getRequestCount(SECURE_URL));
+        assertEquals(0, httpServer.getRequestCount(JS_URL));
+        assertEquals(0, httpServer.getRequestCount(IMG_URL));
+
+        awSettings.setMixedContentMode(AwSettings.MIXED_CONTENT_ALWAYS_ALLOW);
+        loadUrlSync(awContents, contentClient.getOnPageFinishedHelper(), secureUrl);
+        assertEquals(2, httpsServer.getRequestCount(SECURE_URL));
+        assertEquals(1, httpServer.getRequestCount(JS_URL));
+        assertEquals(1, httpServer.getRequestCount(IMG_URL));
+
+        awSettings.setMixedContentMode(AwSettings.MIXED_CONTENT_COMPATIBILITY_MODE);
+        loadUrlSync(awContents, contentClient.getOnPageFinishedHelper(), secureUrl);
+        assertEquals(3, httpsServer.getRequestCount(SECURE_URL));
+        assertEquals(1, httpServer.getRequestCount(JS_URL));
+        assertEquals(2, httpServer.getRequestCount(IMG_URL));
+
+        httpServer.shutdown();
+        httpsServer.shutdown();
+    }
+
+
     static class ViewPair {
         private final AwTestContainerView mContainer0;
         private final TestAwContentsClient mClient0;
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/FullScreenVideoTestAwContentsClient.java b/android_webview/javatests/src/org/chromium/android_webview/test/FullScreenVideoTestAwContentsClient.java
index 7973a8d..2307109 100644
--- a/android_webview/javatests/src/org/chromium/android_webview/test/FullScreenVideoTestAwContentsClient.java
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/FullScreenVideoTestAwContentsClient.java
@@ -14,6 +14,7 @@
 
 import static org.chromium.base.test.util.ScalableTimeout.scaleTimeout;
 
+import org.chromium.content.browser.ContentVideoView;
 import org.chromium.content.browser.test.util.CallbackHelper;
 
 import java.util.concurrent.TimeUnit;
@@ -28,6 +29,8 @@
     private CallbackHelper mOnHideCustomViewCallbackHelper = new CallbackHelper();
 
     private Activity mActivity;
+    private ContentVideoView mVideoView;
+    private WebChromeClient.CustomViewCallback mExitCallback;
 
     public FullScreenVideoTestAwContentsClient(Activity activity) {
         mActivity = activity;
@@ -35,6 +38,10 @@
 
     @Override
     public void onShowCustomView(View view, WebChromeClient.CustomViewCallback callback) {
+        if (view instanceof ContentVideoView) {
+            mVideoView = (ContentVideoView)view;
+        }
+        mExitCallback = callback;
         mActivity.getWindow().setFlags(
                 WindowManager.LayoutParams.FLAG_FULLSCREEN,
                 WindowManager.LayoutParams.FLAG_FULLSCREEN);
@@ -53,6 +60,14 @@
         mOnHideCustomViewCallbackHelper.notifyCalled();
     }
 
+    public WebChromeClient.CustomViewCallback getExitCallback() {
+        return mExitCallback;
+    }
+
+    public ContentVideoView getVideoView() {
+        return mVideoView;
+    }
+
     public void waitForCustomViewShown() throws TimeoutException, InterruptedException {
         mOnShowCustomViewCallbackHelper.waitForCallback(0, 1, WAITING_SECONDS, TimeUnit.SECONDS);
     }
diff --git a/android_webview/libwebviewchromium.target.darwin-arm.mk b/android_webview/libwebviewchromium.target.darwin-arm.mk
index 908ef6d..8eaa82d 100644
--- a/android_webview/libwebviewchromium.target.darwin-arm.mk
+++ b/android_webview/libwebviewchromium.target.darwin-arm.mk
@@ -109,12 +109,12 @@
 	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_base_ui_base_gyp,,,$(GYP_VAR_PREFIX))/ui_base_ui_base_gyp.a \
 	$(call intermediates-dir-for,GYP,ui_resources_ui_resources_gyp,,,$(GYP_VAR_PREFIX))/ui_resources.stamp \
 	$(call intermediates-dir-for,GYP,ui_base_strings_ui_strings_gyp,,,$(GYP_VAR_PREFIX))/ui_strings.stamp \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_events_events_gyp,,,$(GYP_VAR_PREFIX))/ui_events_events_gyp.a \
 	$(call intermediates-dir-for,GYP,ui_base_ui_base_jni_headers_gyp,,,$(GYP_VAR_PREFIX))/ui_base_jni_headers.stamp \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_shell_dialogs_shell_dialogs_gyp,,,$(GYP_VAR_PREFIX))/ui_shell_dialogs_shell_dialogs_gyp.a \
 	$(call intermediates-dir-for,GYP,content_content_resources_gyp,,,$(GYP_VAR_PREFIX))/content_resources.stamp \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,gpu_gles2_c_lib_gyp,,,$(GYP_VAR_PREFIX))/gpu_gles2_c_lib_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,gpu_gles2_implementation_gyp,,,$(GYP_VAR_PREFIX))/gpu_gles2_implementation_gyp.a \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,gpu_gl_in_process_context_gyp,,,$(GYP_VAR_PREFIX))/gpu_gl_in_process_context_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,gpu_skia_bindings_gpu_skia_bindings_gyp,,,$(GYP_VAR_PREFIX))/gpu_skia_bindings_gpu_skia_bindings_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_environment_chromium_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_environment_chromium_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_common_lib_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_common_lib_gyp.a \
@@ -218,6 +218,7 @@
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_frontend_protocol_sources_gyp,,,$(GYP_VAR_PREFIX))/frontend_protocol_sources.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_console_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_console_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_search_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_search_js.stamp \
+	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_devices_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_devices_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_elements_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_elements_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_resources_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_resources_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_network_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_network_js.stamp \
@@ -556,7 +557,6 @@
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
 	-Wl,-shared,-Bsymbolic \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
@@ -644,10 +644,10 @@
 	ui_accessibility_ax_gen_gyp \
 	tools_json_schema_compiler_api_gen_util_gyp \
 	ui_base_ui_base_gyp \
-	ui_events_events_gyp \
 	ui_shell_dialogs_shell_dialogs_gyp \
 	gpu_gles2_c_lib_gyp \
 	gpu_gles2_implementation_gyp \
+	gpu_gl_in_process_context_gyp \
 	gpu_skia_bindings_gpu_skia_bindings_gyp \
 	mojo_mojo_environment_chromium_gyp \
 	mojo_mojo_common_lib_gyp \
diff --git a/android_webview/libwebviewchromium.target.darwin-mips.mk b/android_webview/libwebviewchromium.target.darwin-mips.mk
index 2a6e693..61ab4d4 100644
--- a/android_webview/libwebviewchromium.target.darwin-mips.mk
+++ b/android_webview/libwebviewchromium.target.darwin-mips.mk
@@ -108,12 +108,12 @@
 	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_base_ui_base_gyp,,,$(GYP_VAR_PREFIX))/ui_base_ui_base_gyp.a \
 	$(call intermediates-dir-for,GYP,ui_resources_ui_resources_gyp,,,$(GYP_VAR_PREFIX))/ui_resources.stamp \
 	$(call intermediates-dir-for,GYP,ui_base_strings_ui_strings_gyp,,,$(GYP_VAR_PREFIX))/ui_strings.stamp \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_events_events_gyp,,,$(GYP_VAR_PREFIX))/ui_events_events_gyp.a \
 	$(call intermediates-dir-for,GYP,ui_base_ui_base_jni_headers_gyp,,,$(GYP_VAR_PREFIX))/ui_base_jni_headers.stamp \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_shell_dialogs_shell_dialogs_gyp,,,$(GYP_VAR_PREFIX))/ui_shell_dialogs_shell_dialogs_gyp.a \
 	$(call intermediates-dir-for,GYP,content_content_resources_gyp,,,$(GYP_VAR_PREFIX))/content_resources.stamp \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,gpu_gles2_c_lib_gyp,,,$(GYP_VAR_PREFIX))/gpu_gles2_c_lib_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,gpu_gles2_implementation_gyp,,,$(GYP_VAR_PREFIX))/gpu_gles2_implementation_gyp.a \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,gpu_gl_in_process_context_gyp,,,$(GYP_VAR_PREFIX))/gpu_gl_in_process_context_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,gpu_skia_bindings_gpu_skia_bindings_gyp,,,$(GYP_VAR_PREFIX))/gpu_skia_bindings_gpu_skia_bindings_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_environment_chromium_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_environment_chromium_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_common_lib_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_common_lib_gyp.a \
@@ -215,6 +215,7 @@
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_frontend_protocol_sources_gyp,,,$(GYP_VAR_PREFIX))/frontend_protocol_sources.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_console_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_console_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_search_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_search_js.stamp \
+	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_devices_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_devices_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_elements_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_elements_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_resources_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_resources_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_network_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_network_js.stamp \
@@ -535,7 +536,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,-shared,-Bsymbolic \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
@@ -620,10 +620,10 @@
 	ui_accessibility_ax_gen_gyp \
 	tools_json_schema_compiler_api_gen_util_gyp \
 	ui_base_ui_base_gyp \
-	ui_events_events_gyp \
 	ui_shell_dialogs_shell_dialogs_gyp \
 	gpu_gles2_c_lib_gyp \
 	gpu_gles2_implementation_gyp \
+	gpu_gl_in_process_context_gyp \
 	gpu_skia_bindings_gpu_skia_bindings_gyp \
 	mojo_mojo_environment_chromium_gyp \
 	mojo_mojo_common_lib_gyp \
diff --git a/android_webview/libwebviewchromium.target.darwin-x86.mk b/android_webview/libwebviewchromium.target.darwin-x86.mk
index ef36d3f..49bae44 100644
--- a/android_webview/libwebviewchromium.target.darwin-x86.mk
+++ b/android_webview/libwebviewchromium.target.darwin-x86.mk
@@ -114,12 +114,12 @@
 	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_base_ui_base_gyp,,,$(GYP_VAR_PREFIX))/ui_base_ui_base_gyp.a \
 	$(call intermediates-dir-for,GYP,ui_resources_ui_resources_gyp,,,$(GYP_VAR_PREFIX))/ui_resources.stamp \
 	$(call intermediates-dir-for,GYP,ui_base_strings_ui_strings_gyp,,,$(GYP_VAR_PREFIX))/ui_strings.stamp \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_events_events_gyp,,,$(GYP_VAR_PREFIX))/ui_events_events_gyp.a \
 	$(call intermediates-dir-for,GYP,ui_base_ui_base_jni_headers_gyp,,,$(GYP_VAR_PREFIX))/ui_base_jni_headers.stamp \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_shell_dialogs_shell_dialogs_gyp,,,$(GYP_VAR_PREFIX))/ui_shell_dialogs_shell_dialogs_gyp.a \
 	$(call intermediates-dir-for,GYP,content_content_resources_gyp,,,$(GYP_VAR_PREFIX))/content_resources.stamp \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,gpu_gles2_c_lib_gyp,,,$(GYP_VAR_PREFIX))/gpu_gles2_c_lib_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,gpu_gles2_implementation_gyp,,,$(GYP_VAR_PREFIX))/gpu_gles2_implementation_gyp.a \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,gpu_gl_in_process_context_gyp,,,$(GYP_VAR_PREFIX))/gpu_gl_in_process_context_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,gpu_skia_bindings_gpu_skia_bindings_gyp,,,$(GYP_VAR_PREFIX))/gpu_skia_bindings_gpu_skia_bindings_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_environment_chromium_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_environment_chromium_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_common_lib_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_common_lib_gyp.a \
@@ -221,6 +221,7 @@
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_frontend_protocol_sources_gyp,,,$(GYP_VAR_PREFIX))/frontend_protocol_sources.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_console_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_console_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_search_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_search_js.stamp \
+	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_devices_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_devices_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_elements_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_elements_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_resources_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_resources_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_network_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_network_js.stamp \
@@ -554,7 +555,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,-shared,-Bsymbolic \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
@@ -645,10 +645,10 @@
 	ui_accessibility_ax_gen_gyp \
 	tools_json_schema_compiler_api_gen_util_gyp \
 	ui_base_ui_base_gyp \
-	ui_events_events_gyp \
 	ui_shell_dialogs_shell_dialogs_gyp \
 	gpu_gles2_c_lib_gyp \
 	gpu_gles2_implementation_gyp \
+	gpu_gl_in_process_context_gyp \
 	gpu_skia_bindings_gpu_skia_bindings_gyp \
 	mojo_mojo_environment_chromium_gyp \
 	mojo_mojo_common_lib_gyp \
diff --git a/android_webview/libwebviewchromium.target.darwin-x86_64.mk b/android_webview/libwebviewchromium.target.darwin-x86_64.mk
index 325f873..e361ac6 100644
--- a/android_webview/libwebviewchromium.target.darwin-x86_64.mk
+++ b/android_webview/libwebviewchromium.target.darwin-x86_64.mk
@@ -114,12 +114,12 @@
 	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_base_ui_base_gyp,,,$(GYP_VAR_PREFIX))/ui_base_ui_base_gyp.a \
 	$(call intermediates-dir-for,GYP,ui_resources_ui_resources_gyp,,,$(GYP_VAR_PREFIX))/ui_resources.stamp \
 	$(call intermediates-dir-for,GYP,ui_base_strings_ui_strings_gyp,,,$(GYP_VAR_PREFIX))/ui_strings.stamp \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_events_events_gyp,,,$(GYP_VAR_PREFIX))/ui_events_events_gyp.a \
 	$(call intermediates-dir-for,GYP,ui_base_ui_base_jni_headers_gyp,,,$(GYP_VAR_PREFIX))/ui_base_jni_headers.stamp \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_shell_dialogs_shell_dialogs_gyp,,,$(GYP_VAR_PREFIX))/ui_shell_dialogs_shell_dialogs_gyp.a \
 	$(call intermediates-dir-for,GYP,content_content_resources_gyp,,,$(GYP_VAR_PREFIX))/content_resources.stamp \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,gpu_gles2_c_lib_gyp,,,$(GYP_VAR_PREFIX))/gpu_gles2_c_lib_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,gpu_gles2_implementation_gyp,,,$(GYP_VAR_PREFIX))/gpu_gles2_implementation_gyp.a \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,gpu_gl_in_process_context_gyp,,,$(GYP_VAR_PREFIX))/gpu_gl_in_process_context_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,gpu_skia_bindings_gpu_skia_bindings_gyp,,,$(GYP_VAR_PREFIX))/gpu_skia_bindings_gpu_skia_bindings_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_environment_chromium_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_environment_chromium_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_common_lib_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_common_lib_gyp.a \
@@ -221,6 +221,7 @@
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_frontend_protocol_sources_gyp,,,$(GYP_VAR_PREFIX))/frontend_protocol_sources.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_console_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_console_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_search_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_search_js.stamp \
+	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_devices_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_devices_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_elements_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_elements_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_resources_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_resources_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_network_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_network_js.stamp \
@@ -554,7 +555,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,-shared,-Bsymbolic \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
@@ -645,10 +645,10 @@
 	ui_accessibility_ax_gen_gyp \
 	tools_json_schema_compiler_api_gen_util_gyp \
 	ui_base_ui_base_gyp \
-	ui_events_events_gyp \
 	ui_shell_dialogs_shell_dialogs_gyp \
 	gpu_gles2_c_lib_gyp \
 	gpu_gles2_implementation_gyp \
+	gpu_gl_in_process_context_gyp \
 	gpu_skia_bindings_gpu_skia_bindings_gyp \
 	mojo_mojo_environment_chromium_gyp \
 	mojo_mojo_common_lib_gyp \
diff --git a/android_webview/libwebviewchromium.target.linux-arm.mk b/android_webview/libwebviewchromium.target.linux-arm.mk
index 908ef6d..8eaa82d 100644
--- a/android_webview/libwebviewchromium.target.linux-arm.mk
+++ b/android_webview/libwebviewchromium.target.linux-arm.mk
@@ -109,12 +109,12 @@
 	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_base_ui_base_gyp,,,$(GYP_VAR_PREFIX))/ui_base_ui_base_gyp.a \
 	$(call intermediates-dir-for,GYP,ui_resources_ui_resources_gyp,,,$(GYP_VAR_PREFIX))/ui_resources.stamp \
 	$(call intermediates-dir-for,GYP,ui_base_strings_ui_strings_gyp,,,$(GYP_VAR_PREFIX))/ui_strings.stamp \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_events_events_gyp,,,$(GYP_VAR_PREFIX))/ui_events_events_gyp.a \
 	$(call intermediates-dir-for,GYP,ui_base_ui_base_jni_headers_gyp,,,$(GYP_VAR_PREFIX))/ui_base_jni_headers.stamp \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_shell_dialogs_shell_dialogs_gyp,,,$(GYP_VAR_PREFIX))/ui_shell_dialogs_shell_dialogs_gyp.a \
 	$(call intermediates-dir-for,GYP,content_content_resources_gyp,,,$(GYP_VAR_PREFIX))/content_resources.stamp \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,gpu_gles2_c_lib_gyp,,,$(GYP_VAR_PREFIX))/gpu_gles2_c_lib_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,gpu_gles2_implementation_gyp,,,$(GYP_VAR_PREFIX))/gpu_gles2_implementation_gyp.a \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,gpu_gl_in_process_context_gyp,,,$(GYP_VAR_PREFIX))/gpu_gl_in_process_context_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,gpu_skia_bindings_gpu_skia_bindings_gyp,,,$(GYP_VAR_PREFIX))/gpu_skia_bindings_gpu_skia_bindings_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_environment_chromium_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_environment_chromium_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_common_lib_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_common_lib_gyp.a \
@@ -218,6 +218,7 @@
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_frontend_protocol_sources_gyp,,,$(GYP_VAR_PREFIX))/frontend_protocol_sources.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_console_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_console_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_search_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_search_js.stamp \
+	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_devices_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_devices_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_elements_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_elements_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_resources_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_resources_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_network_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_network_js.stamp \
@@ -556,7 +557,6 @@
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
 	-Wl,-shared,-Bsymbolic \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
@@ -644,10 +644,10 @@
 	ui_accessibility_ax_gen_gyp \
 	tools_json_schema_compiler_api_gen_util_gyp \
 	ui_base_ui_base_gyp \
-	ui_events_events_gyp \
 	ui_shell_dialogs_shell_dialogs_gyp \
 	gpu_gles2_c_lib_gyp \
 	gpu_gles2_implementation_gyp \
+	gpu_gl_in_process_context_gyp \
 	gpu_skia_bindings_gpu_skia_bindings_gyp \
 	mojo_mojo_environment_chromium_gyp \
 	mojo_mojo_common_lib_gyp \
diff --git a/android_webview/libwebviewchromium.target.linux-mips.mk b/android_webview/libwebviewchromium.target.linux-mips.mk
index 2a6e693..61ab4d4 100644
--- a/android_webview/libwebviewchromium.target.linux-mips.mk
+++ b/android_webview/libwebviewchromium.target.linux-mips.mk
@@ -108,12 +108,12 @@
 	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_base_ui_base_gyp,,,$(GYP_VAR_PREFIX))/ui_base_ui_base_gyp.a \
 	$(call intermediates-dir-for,GYP,ui_resources_ui_resources_gyp,,,$(GYP_VAR_PREFIX))/ui_resources.stamp \
 	$(call intermediates-dir-for,GYP,ui_base_strings_ui_strings_gyp,,,$(GYP_VAR_PREFIX))/ui_strings.stamp \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_events_events_gyp,,,$(GYP_VAR_PREFIX))/ui_events_events_gyp.a \
 	$(call intermediates-dir-for,GYP,ui_base_ui_base_jni_headers_gyp,,,$(GYP_VAR_PREFIX))/ui_base_jni_headers.stamp \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_shell_dialogs_shell_dialogs_gyp,,,$(GYP_VAR_PREFIX))/ui_shell_dialogs_shell_dialogs_gyp.a \
 	$(call intermediates-dir-for,GYP,content_content_resources_gyp,,,$(GYP_VAR_PREFIX))/content_resources.stamp \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,gpu_gles2_c_lib_gyp,,,$(GYP_VAR_PREFIX))/gpu_gles2_c_lib_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,gpu_gles2_implementation_gyp,,,$(GYP_VAR_PREFIX))/gpu_gles2_implementation_gyp.a \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,gpu_gl_in_process_context_gyp,,,$(GYP_VAR_PREFIX))/gpu_gl_in_process_context_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,gpu_skia_bindings_gpu_skia_bindings_gyp,,,$(GYP_VAR_PREFIX))/gpu_skia_bindings_gpu_skia_bindings_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_environment_chromium_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_environment_chromium_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_common_lib_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_common_lib_gyp.a \
@@ -215,6 +215,7 @@
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_frontend_protocol_sources_gyp,,,$(GYP_VAR_PREFIX))/frontend_protocol_sources.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_console_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_console_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_search_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_search_js.stamp \
+	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_devices_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_devices_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_elements_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_elements_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_resources_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_resources_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_network_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_network_js.stamp \
@@ -535,7 +536,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,-shared,-Bsymbolic \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
@@ -620,10 +620,10 @@
 	ui_accessibility_ax_gen_gyp \
 	tools_json_schema_compiler_api_gen_util_gyp \
 	ui_base_ui_base_gyp \
-	ui_events_events_gyp \
 	ui_shell_dialogs_shell_dialogs_gyp \
 	gpu_gles2_c_lib_gyp \
 	gpu_gles2_implementation_gyp \
+	gpu_gl_in_process_context_gyp \
 	gpu_skia_bindings_gpu_skia_bindings_gyp \
 	mojo_mojo_environment_chromium_gyp \
 	mojo_mojo_common_lib_gyp \
diff --git a/android_webview/libwebviewchromium.target.linux-x86.mk b/android_webview/libwebviewchromium.target.linux-x86.mk
index ef36d3f..49bae44 100644
--- a/android_webview/libwebviewchromium.target.linux-x86.mk
+++ b/android_webview/libwebviewchromium.target.linux-x86.mk
@@ -114,12 +114,12 @@
 	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_base_ui_base_gyp,,,$(GYP_VAR_PREFIX))/ui_base_ui_base_gyp.a \
 	$(call intermediates-dir-for,GYP,ui_resources_ui_resources_gyp,,,$(GYP_VAR_PREFIX))/ui_resources.stamp \
 	$(call intermediates-dir-for,GYP,ui_base_strings_ui_strings_gyp,,,$(GYP_VAR_PREFIX))/ui_strings.stamp \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_events_events_gyp,,,$(GYP_VAR_PREFIX))/ui_events_events_gyp.a \
 	$(call intermediates-dir-for,GYP,ui_base_ui_base_jni_headers_gyp,,,$(GYP_VAR_PREFIX))/ui_base_jni_headers.stamp \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_shell_dialogs_shell_dialogs_gyp,,,$(GYP_VAR_PREFIX))/ui_shell_dialogs_shell_dialogs_gyp.a \
 	$(call intermediates-dir-for,GYP,content_content_resources_gyp,,,$(GYP_VAR_PREFIX))/content_resources.stamp \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,gpu_gles2_c_lib_gyp,,,$(GYP_VAR_PREFIX))/gpu_gles2_c_lib_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,gpu_gles2_implementation_gyp,,,$(GYP_VAR_PREFIX))/gpu_gles2_implementation_gyp.a \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,gpu_gl_in_process_context_gyp,,,$(GYP_VAR_PREFIX))/gpu_gl_in_process_context_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,gpu_skia_bindings_gpu_skia_bindings_gyp,,,$(GYP_VAR_PREFIX))/gpu_skia_bindings_gpu_skia_bindings_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_environment_chromium_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_environment_chromium_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_common_lib_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_common_lib_gyp.a \
@@ -221,6 +221,7 @@
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_frontend_protocol_sources_gyp,,,$(GYP_VAR_PREFIX))/frontend_protocol_sources.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_console_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_console_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_search_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_search_js.stamp \
+	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_devices_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_devices_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_elements_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_elements_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_resources_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_resources_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_network_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_network_js.stamp \
@@ -554,7 +555,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,-shared,-Bsymbolic \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
@@ -645,10 +645,10 @@
 	ui_accessibility_ax_gen_gyp \
 	tools_json_schema_compiler_api_gen_util_gyp \
 	ui_base_ui_base_gyp \
-	ui_events_events_gyp \
 	ui_shell_dialogs_shell_dialogs_gyp \
 	gpu_gles2_c_lib_gyp \
 	gpu_gles2_implementation_gyp \
+	gpu_gl_in_process_context_gyp \
 	gpu_skia_bindings_gpu_skia_bindings_gyp \
 	mojo_mojo_environment_chromium_gyp \
 	mojo_mojo_common_lib_gyp \
diff --git a/android_webview/libwebviewchromium.target.linux-x86_64.mk b/android_webview/libwebviewchromium.target.linux-x86_64.mk
index 325f873..e361ac6 100644
--- a/android_webview/libwebviewchromium.target.linux-x86_64.mk
+++ b/android_webview/libwebviewchromium.target.linux-x86_64.mk
@@ -114,12 +114,12 @@
 	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_base_ui_base_gyp,,,$(GYP_VAR_PREFIX))/ui_base_ui_base_gyp.a \
 	$(call intermediates-dir-for,GYP,ui_resources_ui_resources_gyp,,,$(GYP_VAR_PREFIX))/ui_resources.stamp \
 	$(call intermediates-dir-for,GYP,ui_base_strings_ui_strings_gyp,,,$(GYP_VAR_PREFIX))/ui_strings.stamp \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_events_events_gyp,,,$(GYP_VAR_PREFIX))/ui_events_events_gyp.a \
 	$(call intermediates-dir-for,GYP,ui_base_ui_base_jni_headers_gyp,,,$(GYP_VAR_PREFIX))/ui_base_jni_headers.stamp \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_shell_dialogs_shell_dialogs_gyp,,,$(GYP_VAR_PREFIX))/ui_shell_dialogs_shell_dialogs_gyp.a \
 	$(call intermediates-dir-for,GYP,content_content_resources_gyp,,,$(GYP_VAR_PREFIX))/content_resources.stamp \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,gpu_gles2_c_lib_gyp,,,$(GYP_VAR_PREFIX))/gpu_gles2_c_lib_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,gpu_gles2_implementation_gyp,,,$(GYP_VAR_PREFIX))/gpu_gles2_implementation_gyp.a \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,gpu_gl_in_process_context_gyp,,,$(GYP_VAR_PREFIX))/gpu_gl_in_process_context_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,gpu_skia_bindings_gpu_skia_bindings_gyp,,,$(GYP_VAR_PREFIX))/gpu_skia_bindings_gpu_skia_bindings_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_environment_chromium_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_environment_chromium_gyp.a \
 	$(call intermediates-dir-for,STATIC_LIBRARIES,mojo_mojo_common_lib_gyp,,,$(GYP_VAR_PREFIX))/mojo_mojo_common_lib_gyp.a \
@@ -221,6 +221,7 @@
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_frontend_protocol_sources_gyp,,,$(GYP_VAR_PREFIX))/frontend_protocol_sources.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_console_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_console_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_search_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_search_js.stamp \
+	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_devices_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_devices_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_elements_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_elements_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_resources_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_resources_js.stamp \
 	$(call intermediates-dir-for,GYP,third_party_WebKit_Source_devtools_concatenated_devtools_network_js_gyp,,,$(GYP_VAR_PREFIX))/concatenated_devtools_network_js.stamp \
@@ -554,7 +555,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,-shared,-Bsymbolic \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
@@ -645,10 +645,10 @@
 	ui_accessibility_ax_gen_gyp \
 	tools_json_schema_compiler_api_gen_util_gyp \
 	ui_base_ui_base_gyp \
-	ui_events_events_gyp \
 	ui_shell_dialogs_shell_dialogs_gyp \
 	gpu_gles2_c_lib_gyp \
 	gpu_gles2_implementation_gyp \
+	gpu_gl_in_process_context_gyp \
 	gpu_skia_bindings_gpu_skia_bindings_gyp \
 	mojo_mojo_environment_chromium_gyp \
 	mojo_mojo_common_lib_gyp \
diff --git a/android_webview/native/DEPS b/android_webview/native/DEPS
index 0c49faf..d221dcd 100644
--- a/android_webview/native/DEPS
+++ b/android_webview/native/DEPS
@@ -1,5 +1,6 @@
 include_rules = [
   "+content/public/browser",
+  "+content/public/test",
   "+ui/gfx",
   "+ui/shell_dialogs",
 
diff --git a/android_webview/native/android_protocol_handler.cc b/android_webview/native/android_protocol_handler.cc
index 256aa91..858d0fe 100644
--- a/android_webview/native/android_protocol_handler.cc
+++ b/android_webview/native/android_protocol_handler.cc
@@ -9,8 +9,8 @@
 #include "android_webview/common/url_constants.h"
 #include "android_webview/native/input_stream_impl.h"
 #include "base/android/jni_android.h"
-#include "base/android/jni_helper.h"
 #include "base/android/jni_string.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/strings/string_util.h"
 #include "content/public/common/url_constants.h"
 #include "jni/AndroidProtocolHandler_jni.h"
diff --git a/android_webview/native/aw_autofill_manager_delegate.cc b/android_webview/native/aw_autofill_manager_delegate.cc
index e1107d6..070e25e 100644
--- a/android_webview/native/aw_autofill_manager_delegate.cc
+++ b/android_webview/native/aw_autofill_manager_delegate.cc
@@ -200,7 +200,7 @@
 }
 
 bool RegisterAwAutofillManagerDelegate(JNIEnv* env) {
-  return RegisterNativesImpl(env) >= 0;
+  return RegisterNativesImpl(env);
 }
 
 } // namespace android_webview
diff --git a/android_webview/native/aw_autofill_manager_delegate.h b/android_webview/native/aw_autofill_manager_delegate.h
index 18ada09..159ff08 100644
--- a/android_webview/native/aw_autofill_manager_delegate.h
+++ b/android_webview/native/aw_autofill_manager_delegate.h
@@ -8,7 +8,7 @@
 #include <jni.h>
 #include <vector>
 
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/basictypes.h"
 #include "base/compiler_specific.h"
 #include "base/prefs/pref_registry_simple.h"
diff --git a/android_webview/native/aw_contents.cc b/android_webview/native/aw_contents.cc
index bde37b6..c7b07f8 100644
--- a/android_webview/native/aw_contents.cc
+++ b/android_webview/native/aw_contents.cc
@@ -54,6 +54,7 @@
 #include "content/public/common/renderer_preferences.h"
 #include "content/public/common/ssl_status.h"
 #include "jni/AwContents_jni.h"
+#include "net/cert/cert_database.h"
 #include "net/cert/x509_certificate.h"
 #include "third_party/skia/include/core/SkPicture.h"
 #include "ui/base/l10n/l10n_util_android.h"
@@ -165,6 +166,11 @@
       render_process_id, render_frame_id);
 }
 
+void NotifyClientCertificatesChanged() {
+  DCHECK_CURRENTLY_ON(BrowserThread::IO);
+  net::CertDatabase::GetInstance()->OnAndroidKeyStoreChanged();
+}
+
 }  // namespace
 
 // static
@@ -481,7 +487,7 @@
 }
 
 bool RegisterAwContents(JNIEnv* env) {
-  return RegisterNativesImpl(env) >= 0;
+  return RegisterNativesImpl(env);
 }
 
 namespace {
@@ -1038,6 +1044,13 @@
                                     extra_headers);
 }
 
+void AwContents::ClearClientCertPreferences(JNIEnv* env, jobject obj) {
+  content::BrowserThread::PostTask(
+      BrowserThread::IO,
+      FROM_HERE,
+      base::Bind(&NotifyClientCertificatesChanged));
+}
+
 void AwContents::SetJsOnlineProperty(JNIEnv* env,
                                      jobject obj,
                                      jboolean network_up) {
diff --git a/android_webview/native/aw_contents.h b/android_webview/native/aw_contents.h
index acae893..4c37f96 100644
--- a/android_webview/native/aw_contents.h
+++ b/android_webview/native/aw_contents.h
@@ -16,8 +16,8 @@
 #include "android_webview/browser/icon_helper.h"
 #include "android_webview/browser/renderer_host/aw_render_view_host_ext.h"
 #include "android_webview/browser/shared_renderer_state.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/android/scoped_java_ref.h"
-#include "base/android/jni_helper.h"
 #include "base/callback_forward.h"
 #include "base/memory/scoped_ptr.h"
 
@@ -129,6 +129,9 @@
 
   void DrawGL(AwDrawGLInfo* draw_info);
 
+  // TODO(sgurun) test this.
+  void ClearClientCertPreferences(JNIEnv* env, jobject obj);
+
   // Geolocation API support
   void ShowGeolocationPrompt(const GURL& origin, base::Callback<void(bool)>);
   void HideGeolocationPrompt(const GURL& origin);
diff --git a/android_webview/native/aw_contents_client_bridge.cc b/android_webview/native/aw_contents_client_bridge.cc
index 3485059..efb5a85 100644
--- a/android_webview/native/aw_contents_client_bridge.cc
+++ b/android_webview/native/aw_contents_client_bridge.cc
@@ -8,10 +8,14 @@
 #include "base/android/jni_android.h"
 #include "base/android/jni_array.h"
 #include "base/android/jni_string.h"
-#include "base/callback.h"
+#include "base/callback_helpers.h"
 #include "content/public/browser/browser_thread.h"
 #include "jni/AwContentsClientBridge_jni.h"
+#include "net/android/keystore_openssl.h"
 #include "net/cert/x509_certificate.h"
+#include "net/ssl/openssl_client_key_store.h"
+#include "net/ssl/ssl_cert_request_info.h"
+#include "net/ssl/ssl_client_cert_type.h"
 #include "url/gurl.h"
 
 using base::android::AttachCurrentThread;
@@ -24,6 +28,22 @@
 
 namespace android_webview {
 
+typedef net::OpenSSLClientKeyStore::ScopedEVP_PKEY ScopedEVP_PKEY;
+
+namespace {
+
+// Must be called on the I/O thread to record a client certificate
+// and its private key in the OpenSSLClientKeyStore.
+void RecordClientCertificateKey(
+    const scoped_refptr<net::X509Certificate>& client_cert,
+    ScopedEVP_PKEY private_key) {
+  DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
+  net::OpenSSLClientKeyStore::GetInstance()->RecordClientCertPrivateKey(
+      client_cert.get(), private_key.get());
+}
+
+}  // namespace
+
 AwContentsClientBridge::AwContentsClientBridge(JNIEnv* env, jobject obj)
     : java_ref_(env, obj) {
   DCHECK(obj);
@@ -49,7 +69,7 @@
     const base::Callback<void(bool)>& callback,
     bool* cancel_request) {
 
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
   JNIEnv* env = AttachCurrentThread();
 
   ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
@@ -73,12 +93,12 @@
   // if the request is cancelled, then cancel the stored callback
   if (*cancel_request) {
     pending_cert_error_callbacks_.Remove(request_id);
- }
+  }
 }
 
 void AwContentsClientBridge::ProceedSslError(JNIEnv* env, jobject obj,
                                              jboolean proceed, jint id) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
   CertErrorCallback* callback = pending_cert_error_callbacks_.Lookup(id);
   if (!callback || callback->is_null()) {
     LOG(WARNING) << "Ignoring unexpected ssl error proceed callback";
@@ -88,6 +108,147 @@
   pending_cert_error_callbacks_.Remove(id);
 }
 
+// This method is inspired by SelectClientCertificate() in
+// chrome/browser/ui/android/ssl_client_certificate_request.cc
+void AwContentsClientBridge::SelectClientCertificate(
+      net::SSLCertRequestInfo* cert_request_info,
+      const SelectCertificateCallback& callback) {
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
+
+  // Add the callback to id map.
+  int request_id = pending_client_cert_request_callbacks_.Add(
+      new SelectCertificateCallback(callback));
+  // Make sure callback is run on error.
+  base::ScopedClosureRunner guard(base::Bind(
+      &AwContentsClientBridge::HandleErrorInClientCertificateResponse,
+      base::Unretained(this),
+      request_id));
+
+  JNIEnv* env = base::android::AttachCurrentThread();
+  ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
+  if (obj.is_null())
+    return;
+
+  // Build the |key_types| JNI parameter, as a String[]
+  std::vector<std::string> key_types;
+  for (size_t i = 0; i < cert_request_info->cert_key_types.size(); ++i) {
+    switch (cert_request_info->cert_key_types[i]) {
+      case net::CLIENT_CERT_RSA_SIGN:
+        key_types.push_back("RSA");
+        break;
+      case net::CLIENT_CERT_DSS_SIGN:
+        key_types.push_back("DSA");
+        break;
+      case net::CLIENT_CERT_ECDSA_SIGN:
+        key_types.push_back("ECDSA");
+        break;
+      default:
+        // Ignore unknown types.
+        break;
+    }
+  }
+
+  ScopedJavaLocalRef<jobjectArray> key_types_ref =
+      base::android::ToJavaArrayOfStrings(env, key_types);
+  if (key_types_ref.is_null()) {
+    LOG(ERROR) << "Could not create key types array (String[])";
+    return;
+  }
+
+  // Build the |encoded_principals| JNI parameter, as a byte[][]
+  ScopedJavaLocalRef<jobjectArray> principals_ref =
+      base::android::ToJavaArrayOfByteArray(
+          env, cert_request_info->cert_authorities);
+  if (principals_ref.is_null()) {
+    LOG(ERROR) << "Could not create principals array (byte[][])";
+    return;
+  }
+
+  // Build the |host_name| and |port| JNI parameters, as a String and
+  // a jint.
+  ScopedJavaLocalRef<jstring> host_name_ref =
+      base::android::ConvertUTF8ToJavaString(
+          env, cert_request_info->host_and_port.host());
+
+  Java_AwContentsClientBridge_selectClientCertificate(
+      env,
+      obj.obj(),
+      request_id,
+      key_types_ref.obj(),
+      principals_ref.obj(),
+      host_name_ref.obj(),
+      cert_request_info->host_and_port.port());
+
+  // Release the guard.
+  ignore_result(guard.Release());
+}
+
+// This method is inspired by OnSystemRequestCompletion() in
+// chrome/browser/ui/android/ssl_client_certificate_request.cc
+void AwContentsClientBridge::ProvideClientCertificateResponse(
+    JNIEnv* env,
+    jobject obj,
+    int request_id,
+    jobjectArray encoded_chain_ref,
+    jobject private_key_ref) {
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
+
+  SelectCertificateCallback* callback =
+      pending_client_cert_request_callbacks_.Lookup(request_id);
+  DCHECK(callback);
+
+  // Make sure callback is run on error.
+  base::ScopedClosureRunner guard(base::Bind(
+      &AwContentsClientBridge::HandleErrorInClientCertificateResponse,
+      base::Unretained(this),
+      request_id));
+  if (encoded_chain_ref == NULL || private_key_ref == NULL) {
+    LOG(ERROR) << "Client certificate request cancelled";
+    return;
+  }
+  // Convert the encoded chain to a vector of strings.
+  std::vector<std::string> encoded_chain_strings;
+  if (encoded_chain_ref) {
+    base::android::JavaArrayOfByteArrayToStringVector(
+        env, encoded_chain_ref, &encoded_chain_strings);
+  }
+
+  std::vector<base::StringPiece> encoded_chain;
+  for (size_t i = 0; i < encoded_chain_strings.size(); ++i)
+    encoded_chain.push_back(encoded_chain_strings[i]);
+
+  // Create the X509Certificate object from the encoded chain.
+  scoped_refptr<net::X509Certificate> client_cert(
+      net::X509Certificate::CreateFromDERCertChain(encoded_chain));
+  if (!client_cert.get()) {
+    LOG(ERROR) << "Could not decode client certificate chain";
+    return;
+  }
+
+  // Create an EVP_PKEY wrapper for the private key JNI reference.
+  ScopedEVP_PKEY private_key(
+      net::android::GetOpenSSLPrivateKeyWrapper(private_key_ref));
+  if (!private_key.get()) {
+    LOG(ERROR) << "Could not create OpenSSL wrapper for private key";
+    return;
+  }
+
+  // RecordClientCertificateKey() must be called on the I/O thread,
+  // before the callback is called with the selected certificate on
+  // the UI thread.
+  content::BrowserThread::PostTaskAndReply(
+      content::BrowserThread::IO,
+      FROM_HERE,
+      base::Bind(&RecordClientCertificateKey,
+                 client_cert,
+                 base::Passed(&private_key)),
+      base::Bind(*callback, client_cert));
+  pending_client_cert_request_callbacks_.Remove(request_id);
+
+  // Release the guard.
+  ignore_result(guard.Release());
+}
+
 void AwContentsClientBridge::RunJavaScriptDialog(
     content::JavaScriptMessageType message_type,
     const GURL& origin_url,
@@ -206,8 +367,17 @@
   pending_js_dialog_callbacks_.Remove(id);
 }
 
+// Use to cleanup if there is an error in client certificate response.
+void AwContentsClientBridge::HandleErrorInClientCertificateResponse(
+    int request_id) {
+  SelectCertificateCallback* callback =
+      pending_client_cert_request_callbacks_.Lookup(request_id);
+  callback->Run(scoped_refptr<net::X509Certificate>());
+  pending_client_cert_request_callbacks_.Remove(request_id);
+}
+
 bool RegisterAwContentsClientBridge(JNIEnv* env) {
-  return RegisterNativesImpl(env) >= 0;
+  return RegisterNativesImpl(env);
 }
 
 }  // namespace android_webview
diff --git a/android_webview/native/aw_contents_client_bridge.h b/android_webview/native/aw_contents_client_bridge.h
index 4cd6c6c..3c97f33 100644
--- a/android_webview/native/aw_contents_client_bridge.h
+++ b/android_webview/native/aw_contents_client_bridge.h
@@ -8,7 +8,7 @@
 #include <jni.h>
 
 #include "android_webview/browser/aw_contents_client_bridge_base.h"
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/android/scoped_java_ref.h"
 #include "base/callback.h"
 #include "base/id_map.h"
@@ -29,7 +29,6 @@
 // any references.
 class AwContentsClientBridge : public AwContentsClientBridgeBase {
  public:
-
   AwContentsClientBridge(JNIEnv* env, jobject obj);
   virtual ~AwContentsClientBridge();
 
@@ -39,6 +38,9 @@
                                      const GURL& request_url,
                                      const base::Callback<void(bool)>& callback,
                                      bool* cancel_request) OVERRIDE;
+  virtual void SelectClientCertificate(
+      net::SSLCertRequestInfo* cert_request_info,
+      const SelectCertificateCallback& callback) OVERRIDE;
 
   virtual void RunJavaScriptDialog(
       content::JavaScriptMessageType message_type,
@@ -56,16 +58,23 @@
 
   // Methods called from Java.
   void ProceedSslError(JNIEnv* env, jobject obj, jboolean proceed, jint id);
+  void ProvideClientCertificateResponse(JNIEnv* env, jobject object,
+      jint request_id, jobjectArray encoded_chain_ref,
+      jobject private_key_ref);
   void ConfirmJsResult(JNIEnv*, jobject, int id, jstring prompt);
   void CancelJsResult(JNIEnv*, jobject, int id);
 
  private:
+  void HandleErrorInClientCertificateResponse(int id);
+
   JavaObjectWeakGlobalRef java_ref_;
 
   typedef const base::Callback<void(bool)> CertErrorCallback;
   IDMap<CertErrorCallback, IDMapOwnPointer> pending_cert_error_callbacks_;
   IDMap<content::JavaScriptDialogManager::DialogClosedCallback, IDMapOwnPointer>
       pending_js_dialog_callbacks_;
+  IDMap<SelectCertificateCallback, IDMapOwnPointer>
+      pending_client_cert_request_callbacks_;
 };
 
 bool RegisterAwContentsClientBridge(JNIEnv* env);
diff --git a/android_webview/native/aw_contents_client_bridge_unittest.cc b/android_webview/native/aw_contents_client_bridge_unittest.cc
new file mode 100644
index 0000000..e6714bb
--- /dev/null
+++ b/android_webview/native/aw_contents_client_bridge_unittest.cc
@@ -0,0 +1,152 @@
+// 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.
+
+#include "android_webview/native/aw_contents_client_bridge.h"
+
+#include "base/android/jni_android.h"
+#include "base/android/jni_array.h"
+#include "base/android/scoped_java_ref.h"
+#include "base/bind.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/run_loop.h"
+#include "content/public/test/test_browser_thread_bundle.h"
+#include "jni/MockAwContentsClientBridge_jni.h"
+#include "net/android/net_jni_registrar.h"
+#include "net/ssl/ssl_cert_request_info.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+
+using base::android::AttachCurrentThread;
+using base::android::ScopedJavaLocalRef;
+using net::SSLCertRequestInfo;
+using net::SSLClientCertType;
+using net::X509Certificate;
+using testing::NotNull;
+using testing::Test;
+
+namespace android_webview {
+
+namespace {
+
+// Tests the android_webview contents client bridge.
+class AwContentsClientBridgeTest : public Test {
+ public:
+  typedef AwContentsClientBridge::SelectCertificateCallback
+      SelectCertificateCallback;
+
+  AwContentsClientBridgeTest() { }
+
+  // Callback method called when a cert is selected.
+  void CertSelected(X509Certificate* cert);
+ protected:
+  virtual void SetUp();
+  void TestCertType(SSLClientCertType type, const std::string& expected_name);
+  // Create the TestBrowserThreads. Just instantiate the member variable.
+  content::TestBrowserThreadBundle thread_bundle_;
+  base::android::ScopedJavaGlobalRef<jobject> jbridge_;
+  scoped_ptr<AwContentsClientBridge> bridge_;
+  scoped_refptr<SSLCertRequestInfo> cert_request_info_;
+  X509Certificate* selected_cert_;
+  int cert_selected_callbacks_;
+  JNIEnv* env_;
+};
+
+}   // namespace
+
+void AwContentsClientBridgeTest::SetUp() {
+  env_ = AttachCurrentThread();
+  ASSERT_THAT(env_, NotNull());
+  ASSERT_TRUE(android_webview::RegisterAwContentsClientBridge(env_));
+  ASSERT_TRUE(RegisterNativesImpl(env_));
+  ASSERT_TRUE(net::android::RegisterJni(env_));
+  jbridge_.Reset(env_,
+      Java_MockAwContentsClientBridge_getAwContentsClientBridge(env_).obj());
+  bridge_.reset(new AwContentsClientBridge(env_, jbridge_.obj()));
+  selected_cert_ = NULL;
+  cert_selected_callbacks_ = 0;
+  cert_request_info_ = new net::SSLCertRequestInfo;
+}
+
+void AwContentsClientBridgeTest::CertSelected(X509Certificate* cert) {
+  selected_cert_ = cert;
+  cert_selected_callbacks_++;
+}
+
+TEST_F(AwContentsClientBridgeTest, TestClientCertKeyTypesCorrectlyEncoded) {
+  SSLClientCertType cert_types[3] = {net::CLIENT_CERT_RSA_SIGN,
+      net::CLIENT_CERT_DSS_SIGN, net::CLIENT_CERT_ECDSA_SIGN};
+  std::string expected_names[3] = {"RSA", "DSA" ,"ECDSA"};
+
+  for(int i = 0; i < 3; i++) {
+    TestCertType(cert_types[i], expected_names[i]);
+  }
+}
+
+void AwContentsClientBridgeTest::TestCertType(SSLClientCertType type,
+      const std::string& expected_name) {
+  cert_request_info_->cert_key_types.clear();
+  cert_request_info_->cert_key_types.push_back(type);
+  bridge_->SelectClientCertificate(
+      cert_request_info_.get(),
+      base::Bind(
+          &AwContentsClientBridgeTest::CertSelected,
+          base::Unretained(static_cast<AwContentsClientBridgeTest*>(this))));
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(0, cert_selected_callbacks_);
+  ScopedJavaLocalRef<jobjectArray> key_types =
+      Java_MockAwContentsClientBridge_getKeyTypes(env_, jbridge_.obj());
+  std::vector<std::string> vec;
+  base::android::AppendJavaStringArrayToStringVector(env_,
+                                                     key_types.obj(),
+                                                     &vec);
+  EXPECT_EQ(1u, vec.size());
+  EXPECT_EQ(expected_name, vec[0]);
+}
+
+// Verify that ProvideClientCertificateResponse works properly when the client
+// responds with a null key.
+TEST_F(AwContentsClientBridgeTest,
+    TestProvideClientCertificateResponseCallsCallbackOnNullKey) {
+  // Call SelectClientCertificate to create a callback id that mock java object
+  // can call on.
+  bridge_->SelectClientCertificate(
+    cert_request_info_.get(),
+    base::Bind(
+        &AwContentsClientBridgeTest::CertSelected,
+        base::Unretained(static_cast<AwContentsClientBridgeTest*>(this))));
+  bridge_->ProvideClientCertificateResponse(env_, jbridge_.obj(),
+      Java_MockAwContentsClientBridge_getRequestId(env_, jbridge_.obj()),
+      Java_MockAwContentsClientBridge_createTestCertChain(
+          env_, jbridge_.obj()).obj(),
+      NULL);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(NULL, selected_cert_);
+  EXPECT_EQ(1, cert_selected_callbacks_);
+}
+
+// Verify that ProvideClientCertificateResponse calls the callback with
+// NULL parameters when private key is not provided.
+TEST_F(AwContentsClientBridgeTest,
+    TestProvideClientCertificateResponseCallsCallbackOnNullChain) {
+  // Call SelectClientCertificate to create a callback id that mock java object
+  // can call on.
+  bridge_->SelectClientCertificate(
+    cert_request_info_.get(),
+    base::Bind(
+        &AwContentsClientBridgeTest::CertSelected,
+        base::Unretained(static_cast<AwContentsClientBridgeTest*>(this))));
+  int requestId =
+    Java_MockAwContentsClientBridge_getRequestId(env_, jbridge_.obj());
+  bridge_->ProvideClientCertificateResponse(env_, jbridge_.obj(),
+      requestId,
+      NULL,
+      Java_MockAwContentsClientBridge_createTestPrivateKey(
+          env_, jbridge_.obj()).obj());
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(NULL, selected_cert_);
+  EXPECT_EQ(1, cert_selected_callbacks_);
+}
+
+}   // android_webview
diff --git a/android_webview/native/aw_contents_io_thread_client_impl.cc b/android_webview/native/aw_contents_io_thread_client_impl.cc
index 3d16a43..c863971 100644
--- a/android_webview/native/aw_contents_io_thread_client_impl.cc
+++ b/android_webview/native/aw_contents_io_thread_client_impl.cc
@@ -9,8 +9,8 @@
 
 #include "android_webview/common/devtools_instrumentation.h"
 #include "android_webview/native/intercepted_request_data_impl.h"
-#include "base/android/jni_helper.h"
 #include "base/android/jni_string.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/lazy_instance.h"
 #include "base/memory/linked_ptr.h"
 #include "base/memory/scoped_ptr.h"
diff --git a/android_webview/native/aw_form_database.cc b/android_webview/native/aw_form_database.cc
index 851340e..2269d76 100644
--- a/android_webview/native/aw_form_database.cc
+++ b/android_webview/native/aw_form_database.cc
@@ -36,7 +36,7 @@
 }
 
 bool RegisterAwFormDatabase(JNIEnv* env) {
-  return RegisterNativesImpl(env) >= 0;
+  return RegisterNativesImpl(env);
 }
 
 } // namespace android_webview
diff --git a/android_webview/native/aw_http_auth_handler.cc b/android_webview/native/aw_http_auth_handler.cc
index 8146eae..0c4fd92 100644
--- a/android_webview/native/aw_http_auth_handler.cc
+++ b/android_webview/native/aw_http_auth_handler.cc
@@ -74,7 +74,7 @@
 }
 
 bool RegisterAwHttpAuthHandler(JNIEnv* env) {
-  return RegisterNativesImpl(env) >= 0;
+  return RegisterNativesImpl(env);
 }
 
 }  // namespace android_webview
diff --git a/android_webview/native/aw_pdf_exporter.cc b/android_webview/native/aw_pdf_exporter.cc
index 7a13fd7..8da47a0 100644
--- a/android_webview/native/aw_pdf_exporter.cc
+++ b/android_webview/native/aw_pdf_exporter.cc
@@ -111,7 +111,7 @@
 }
 
 bool RegisterAwPdfExporter(JNIEnv* env) {
-  return RegisterNativesImpl(env) >= 0;
+  return RegisterNativesImpl(env);
 }
 
 }  // namespace android_webview
diff --git a/android_webview/native/aw_pdf_exporter.h b/android_webview/native/aw_pdf_exporter.h
index c8795fc..d27b092 100644
--- a/android_webview/native/aw_pdf_exporter.h
+++ b/android_webview/native/aw_pdf_exporter.h
@@ -8,7 +8,7 @@
 #include <jni.h>
 
 #include "android_webview/browser/renderer_host/print_manager.h"
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/android/scoped_java_ref.h"
 #include "base/basictypes.h"
 #include "base/memory/scoped_ptr.h"
diff --git a/android_webview/native/aw_picture.cc b/android_webview/native/aw_picture.cc
index 9a7ff83..535908d 100644
--- a/android_webview/native/aw_picture.cc
+++ b/android_webview/native/aw_picture.cc
@@ -50,7 +50,7 @@
 }
 
 bool RegisterAwPicture(JNIEnv* env) {
-  return RegisterNativesImpl(env) >= 0;
+  return RegisterNativesImpl(env);
 }
 
 }  // namespace android_webview
diff --git a/android_webview/native/aw_picture.h b/android_webview/native/aw_picture.h
index 2cbb5b7..b1e31ee 100644
--- a/android_webview/native/aw_picture.h
+++ b/android_webview/native/aw_picture.h
@@ -7,7 +7,7 @@
 
 #include <jni.h>
 
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/android/scoped_java_ref.h"
 #include "base/memory/scoped_ptr.h"
 #include "content/public/browser/web_contents_observer.h"
diff --git a/android_webview/native/aw_quota_manager_bridge_impl.cc b/android_webview/native/aw_quota_manager_bridge_impl.cc
index 4821732..b066f35 100644
--- a/android_webview/native/aw_quota_manager_bridge_impl.cc
+++ b/android_webview/native/aw_quota_manager_bridge_impl.cc
@@ -350,7 +350,7 @@
 }
 
 bool RegisterAwQuotaManagerBridge(JNIEnv* env) {
-  return RegisterNativesImpl(env) >= 0;
+  return RegisterNativesImpl(env);
 }
 
 }  // namespace android_webview
diff --git a/android_webview/native/aw_quota_manager_bridge_impl.h b/android_webview/native/aw_quota_manager_bridge_impl.h
index c0158ed..f6aacc3 100644
--- a/android_webview/native/aw_quota_manager_bridge_impl.h
+++ b/android_webview/native/aw_quota_manager_bridge_impl.h
@@ -10,7 +10,7 @@
 #include <vector>
 
 #include "android_webview/browser/aw_quota_manager_bridge.h"
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/basictypes.h"
 #include "base/callback.h"
 #include "base/memory/ref_counted.h"
diff --git a/android_webview/native/aw_resource.cc b/android_webview/native/aw_resource.cc
index b110731..cf4b6f4 100644
--- a/android_webview/native/aw_resource.cc
+++ b/android_webview/native/aw_resource.cc
@@ -38,7 +38,7 @@
 }
 
 bool RegisterAwResource(JNIEnv* env) {
-  return RegisterNativesImpl(env) >= 0;
+  return RegisterNativesImpl(env);
 }
 
 }  // namespace AwResource
diff --git a/android_webview/native/aw_settings.cc b/android_webview/native/aw_settings.cc
index cf66d4e..8f54f7a 100644
--- a/android_webview/native/aw_settings.cc
+++ b/android_webview/native/aw_settings.cc
@@ -336,6 +336,11 @@
     // Using 100M instead of max int to avoid overflows.
     web_prefs->minimum_accelerated_2d_canvas_size = 100 * 1000 * 1000;
   }
+
+  web_prefs->allow_displaying_insecure_content =
+      Java_AwSettings_getAllowDisplayingInsecureContentLocked(env, obj);
+  web_prefs->allow_running_insecure_content =
+      Java_AwSettings_getAllowRunningInsecureContentLocked(env, obj);
 }
 
 static jlong Init(JNIEnv* env,
@@ -350,7 +355,7 @@
 }
 
 bool RegisterAwSettings(JNIEnv* env) {
-  return RegisterNativesImpl(env) >= 0;
+  return RegisterNativesImpl(env);
 }
 
 }  // namespace android_webview
diff --git a/android_webview/native/aw_settings.h b/android_webview/native/aw_settings.h
index 632862e..2f26622 100644
--- a/android_webview/native/aw_settings.h
+++ b/android_webview/native/aw_settings.h
@@ -7,7 +7,7 @@
 
 #include <jni.h>
 
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/android/scoped_java_ref.h"
 #include "base/memory/scoped_ptr.h"
 #include "content/public/browser/web_contents_observer.h"
diff --git a/android_webview/native/external_video_surface_container_impl.cc b/android_webview/native/external_video_surface_container_impl.cc
index ca9ed34..1a10ab5 100644
--- a/android_webview/native/external_video_surface_container_impl.cc
+++ b/android_webview/native/external_video_surface_container_impl.cc
@@ -85,7 +85,7 @@
 }
 
 bool RegisterExternalVideoSurfaceContainer(JNIEnv* env) {
-  return RegisterNativesImpl(env) >= 0;
+  return RegisterNativesImpl(env);
 }
 
 }  // namespace android_webview
diff --git a/android_webview/native/java_browser_view_renderer_helper.cc b/android_webview/native/java_browser_view_renderer_helper.cc
index ec2866f..df4f433 100644
--- a/android_webview/native/java_browser_view_renderer_helper.cc
+++ b/android_webview/native/java_browser_view_renderer_helper.cc
@@ -130,7 +130,7 @@
 }
 
 bool RegisterJavaBrowserViewRendererHelper(JNIEnv* env) {
-  return RegisterNativesImpl(env) >= 0;
+  return RegisterNativesImpl(env);
 }
 
 bool JavaBrowserViewRendererHelper::RasterizeIntoBitmap(
diff --git a/android_webview/native/webview_native.gyp b/android_webview/native/webview_native.gyp
index 27d599a..9a1761b 100644
--- a/android_webview/native/webview_native.gyp
+++ b/android_webview/native/webview_native.gyp
@@ -24,6 +24,7 @@
         '../../webkit/common/webkit_common.gyp:webkit_common',
         '../../webkit/storage_browser.gyp:webkit_storage_browser',
         '../../webkit/storage_common.gyp:webkit_storage_common',
+        '../../third_party/openssl/openssl.gyp:openssl',
         'android_webview_native_jni',
       ],
       'include_dirs': [
diff --git a/android_webview/native/webview_native.target.darwin-arm.mk b/android_webview/native/webview_native.target.darwin-arm.mk
index f9e9263..b115039 100644
--- a/android_webview/native/webview_native.target.darwin-arm.mk
+++ b/android_webview/native/webview_native.target.darwin-arm.mk
@@ -119,12 +119,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DAPPCACHE_USE_SIMPLE_CACHE' \
 	'-DUSE_OPENSSL=1' \
@@ -165,6 +168,7 @@
 	$(LOCAL_PATH)/skia/ext \
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
+	$(LOCAL_PATH)/third_party/openssl/openssl/include \
 	$(gyp_shared_intermediate_dir)/android_webview \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
@@ -246,12 +250,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DAPPCACHE_USE_SIMPLE_CACHE' \
 	'-DUSE_OPENSSL=1' \
@@ -293,6 +300,7 @@
 	$(LOCAL_PATH)/skia/ext \
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
+	$(LOCAL_PATH)/third_party/openssl/openssl/include \
 	$(gyp_shared_intermediate_dir)/android_webview \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
@@ -329,7 +337,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/android_webview/native/webview_native.target.darwin-mips.mk b/android_webview/native/webview_native.target.darwin-mips.mk
index 5866b57..ee49b97 100644
--- a/android_webview/native/webview_native.target.darwin-mips.mk
+++ b/android_webview/native/webview_native.target.darwin-mips.mk
@@ -118,12 +118,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DAPPCACHE_USE_SIMPLE_CACHE' \
 	'-DUSE_OPENSSL=1' \
@@ -164,6 +167,7 @@
 	$(LOCAL_PATH)/skia/ext \
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
+	$(LOCAL_PATH)/third_party/openssl/openssl/include \
 	$(gyp_shared_intermediate_dir)/android_webview \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
@@ -244,12 +248,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DAPPCACHE_USE_SIMPLE_CACHE' \
 	'-DUSE_OPENSSL=1' \
@@ -291,6 +298,7 @@
 	$(LOCAL_PATH)/skia/ext \
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
+	$(LOCAL_PATH)/third_party/openssl/openssl/include \
 	$(gyp_shared_intermediate_dir)/android_webview \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
@@ -325,7 +333,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/android_webview/native/webview_native.target.darwin-x86.mk b/android_webview/native/webview_native.target.darwin-x86.mk
index eece5b0..44b72ad 100644
--- a/android_webview/native/webview_native.target.darwin-x86.mk
+++ b/android_webview/native/webview_native.target.darwin-x86.mk
@@ -119,12 +119,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DAPPCACHE_USE_SIMPLE_CACHE' \
 	'-DUSE_OPENSSL=1' \
@@ -165,6 +168,7 @@
 	$(LOCAL_PATH)/skia/ext \
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
+	$(LOCAL_PATH)/third_party/openssl/openssl/include \
 	$(gyp_shared_intermediate_dir)/android_webview \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
@@ -245,12 +249,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DAPPCACHE_USE_SIMPLE_CACHE' \
 	'-DUSE_OPENSSL=1' \
@@ -292,6 +299,7 @@
 	$(LOCAL_PATH)/skia/ext \
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
+	$(LOCAL_PATH)/third_party/openssl/openssl/include \
 	$(gyp_shared_intermediate_dir)/android_webview \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
@@ -325,7 +333,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/android_webview/native/webview_native.target.darwin-x86_64.mk b/android_webview/native/webview_native.target.darwin-x86_64.mk
index f4caa9d..6601e01 100644
--- a/android_webview/native/webview_native.target.darwin-x86_64.mk
+++ b/android_webview/native/webview_native.target.darwin-x86_64.mk
@@ -120,12 +120,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DAPPCACHE_USE_SIMPLE_CACHE' \
 	'-DUSE_OPENSSL=1' \
@@ -166,6 +169,8 @@
 	$(LOCAL_PATH)/skia/ext \
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
+	$(LOCAL_PATH)/third_party/openssl/config/x64 \
+	$(LOCAL_PATH)/third_party/openssl/openssl/include \
 	$(gyp_shared_intermediate_dir)/android_webview \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
@@ -247,12 +252,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DAPPCACHE_USE_SIMPLE_CACHE' \
 	'-DUSE_OPENSSL=1' \
@@ -294,6 +302,8 @@
 	$(LOCAL_PATH)/skia/ext \
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
+	$(LOCAL_PATH)/third_party/openssl/config/x64 \
+	$(LOCAL_PATH)/third_party/openssl/openssl/include \
 	$(gyp_shared_intermediate_dir)/android_webview \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
@@ -327,7 +337,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/android_webview/native/webview_native.target.linux-arm.mk b/android_webview/native/webview_native.target.linux-arm.mk
index f9e9263..b115039 100644
--- a/android_webview/native/webview_native.target.linux-arm.mk
+++ b/android_webview/native/webview_native.target.linux-arm.mk
@@ -119,12 +119,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DAPPCACHE_USE_SIMPLE_CACHE' \
 	'-DUSE_OPENSSL=1' \
@@ -165,6 +168,7 @@
 	$(LOCAL_PATH)/skia/ext \
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
+	$(LOCAL_PATH)/third_party/openssl/openssl/include \
 	$(gyp_shared_intermediate_dir)/android_webview \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
@@ -246,12 +250,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DAPPCACHE_USE_SIMPLE_CACHE' \
 	'-DUSE_OPENSSL=1' \
@@ -293,6 +300,7 @@
 	$(LOCAL_PATH)/skia/ext \
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
+	$(LOCAL_PATH)/third_party/openssl/openssl/include \
 	$(gyp_shared_intermediate_dir)/android_webview \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
@@ -329,7 +337,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/android_webview/native/webview_native.target.linux-mips.mk b/android_webview/native/webview_native.target.linux-mips.mk
index 5866b57..ee49b97 100644
--- a/android_webview/native/webview_native.target.linux-mips.mk
+++ b/android_webview/native/webview_native.target.linux-mips.mk
@@ -118,12 +118,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DAPPCACHE_USE_SIMPLE_CACHE' \
 	'-DUSE_OPENSSL=1' \
@@ -164,6 +167,7 @@
 	$(LOCAL_PATH)/skia/ext \
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
+	$(LOCAL_PATH)/third_party/openssl/openssl/include \
 	$(gyp_shared_intermediate_dir)/android_webview \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
@@ -244,12 +248,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DAPPCACHE_USE_SIMPLE_CACHE' \
 	'-DUSE_OPENSSL=1' \
@@ -291,6 +298,7 @@
 	$(LOCAL_PATH)/skia/ext \
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
+	$(LOCAL_PATH)/third_party/openssl/openssl/include \
 	$(gyp_shared_intermediate_dir)/android_webview \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
@@ -325,7 +333,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/android_webview/native/webview_native.target.linux-x86.mk b/android_webview/native/webview_native.target.linux-x86.mk
index eece5b0..44b72ad 100644
--- a/android_webview/native/webview_native.target.linux-x86.mk
+++ b/android_webview/native/webview_native.target.linux-x86.mk
@@ -119,12 +119,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DAPPCACHE_USE_SIMPLE_CACHE' \
 	'-DUSE_OPENSSL=1' \
@@ -165,6 +168,7 @@
 	$(LOCAL_PATH)/skia/ext \
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
+	$(LOCAL_PATH)/third_party/openssl/openssl/include \
 	$(gyp_shared_intermediate_dir)/android_webview \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
@@ -245,12 +249,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DAPPCACHE_USE_SIMPLE_CACHE' \
 	'-DUSE_OPENSSL=1' \
@@ -292,6 +299,7 @@
 	$(LOCAL_PATH)/skia/ext \
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
+	$(LOCAL_PATH)/third_party/openssl/openssl/include \
 	$(gyp_shared_intermediate_dir)/android_webview \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
@@ -325,7 +333,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/android_webview/native/webview_native.target.linux-x86_64.mk b/android_webview/native/webview_native.target.linux-x86_64.mk
index f4caa9d..6601e01 100644
--- a/android_webview/native/webview_native.target.linux-x86_64.mk
+++ b/android_webview/native/webview_native.target.linux-x86_64.mk
@@ -120,12 +120,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DAPPCACHE_USE_SIMPLE_CACHE' \
 	'-DUSE_OPENSSL=1' \
@@ -166,6 +169,8 @@
 	$(LOCAL_PATH)/skia/ext \
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
+	$(LOCAL_PATH)/third_party/openssl/config/x64 \
+	$(LOCAL_PATH)/third_party/openssl/openssl/include \
 	$(gyp_shared_intermediate_dir)/android_webview \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
@@ -247,12 +252,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DAPPCACHE_USE_SIMPLE_CACHE' \
 	'-DUSE_OPENSSL=1' \
@@ -294,6 +302,8 @@
 	$(LOCAL_PATH)/skia/ext \
 	$(PWD)/external/icu4c/common \
 	$(PWD)/external/icu4c/i18n \
+	$(LOCAL_PATH)/third_party/openssl/config/x64 \
+	$(LOCAL_PATH)/third_party/openssl/openssl/include \
 	$(gyp_shared_intermediate_dir)/android_webview \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
@@ -327,7 +337,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/android_webview/renderer/aw_key_systems.cc b/android_webview/renderer/aw_key_systems.cc
index dc61bf9..ec976f0 100644
--- a/android_webview/renderer/aw_key_systems.cc
+++ b/android_webview/renderer/aw_key_systems.cc
@@ -8,7 +8,6 @@
 
 #include "base/command_line.h"
 #include "base/logging.h"
-#include "base/strings/string_split.h"
 #include "third_party/widevine/cdm/widevine_cdm_common.h"
 
 using content::KeySystemInfo;
@@ -18,7 +17,8 @@
 const char kAudioMp4[] = "audio/mp4";
 const char kVideoMp4[] = "video/mp4";
 const char kMp4a[] = "mp4a";
-const char kMp4aAvc1Avc3[] = "mp4a,avc1,avc3";
+const char kAvc1[] = "avc1";
+const char kAvc3[] = "avc3";
 
 // Return |name|'s parent key system.
 std::string GetDirectParentName(const std::string& name) {
@@ -35,8 +35,10 @@
   if (add_parent_name)
     info.parent_key_system = GetDirectParentName(key_system_name);
 
-  info.supported_types.push_back(std::make_pair(kAudioMp4, kMp4a));
-  info.supported_types.push_back(std::make_pair(kVideoMp4, kMp4aAvc1Avc3));
+  info.supported_types[kAudioMp4].insert(kMp4a);
+  info.supported_types[kVideoMp4] = info.supported_types[kAudioMp4];
+  info.supported_types[kVideoMp4].insert(kAvc1);
+  info.supported_types[kVideoMp4].insert(kAvc3);
 
   concrete_key_systems->push_back(info);
 }
diff --git a/android_webview/renderer/print_web_view_helper.cc b/android_webview/renderer/print_web_view_helper.cc
index 6179a31..006a371 100644
--- a/android_webview/renderer/print_web_view_helper.cc
+++ b/android_webview/renderer/print_web_view_helper.cc
@@ -32,8 +32,8 @@
 #include "third_party/WebKit/public/web/WebConsoleMessage.h"
 #include "third_party/WebKit/public/web/WebDocument.h"
 #include "third_party/WebKit/public/web/WebElement.h"
-#include "third_party/WebKit/public/web/WebFrame.h"
 #include "third_party/WebKit/public/web/WebFrameClient.h"
+#include "third_party/WebKit/public/web/WebLocalFrame.h"
 #include "third_party/WebKit/public/web/WebPlugin.h"
 #include "third_party/WebKit/public/web/WebPluginDocument.h"
 #include "third_party/WebKit/public/web/WebPrintParams.h"
@@ -537,6 +537,11 @@
     return owns_web_view_ && frame() && frame()->isLoading();
   }
 
+  // TODO(ojan): Remove this override and have this class use a non-null
+  // layerTreeView.
+  // blink::WebViewClient override:
+  virtual bool allowsBrokenNullLayerTreeView() const;
+
  protected:
   // blink::WebViewClient override:
   virtual void didStopLoading();
@@ -671,6 +676,10 @@
   frame()->loadRequest(blink::WebURLRequest(GURL(url_str)));
 }
 
+bool PrepareFrameAndViewForPrint::allowsBrokenNullLayerTreeView() const {
+  return true;
+}
+
 void PrepareFrameAndViewForPrint::didStopLoading() {
   DCHECK(!on_ready_.is_null());
   // Don't call callback here, because it can delete |this| and WebView that is
diff --git a/android_webview/renderer/print_web_view_helper_linux.cc b/android_webview/renderer/print_web_view_helper_linux.cc
index 97bcf5d..b84b68d 100644
--- a/android_webview/renderer/print_web_view_helper_linux.cc
+++ b/android_webview/renderer/print_web_view_helper_linux.cc
@@ -16,7 +16,7 @@
 #include "printing/page_size_margins.h"
 #include "skia/ext/platform_device.h"
 #include "skia/ext/vector_canvas.h"
-#include "third_party/WebKit/public/web/WebFrame.h"
+#include "third_party/WebKit/public/web/WebLocalFrame.h"
 
 #if !defined(OS_CHROMEOS) && !defined(OS_ANDROID)
 #include "base/process/process_handle.h"
diff --git a/android_webview/test/shell/src/org/chromium/android_webview/test/NullContentsClient.java b/android_webview/test/shell/src/org/chromium/android_webview/test/NullContentsClient.java
index 34e6ca5..353250c 100644
--- a/android_webview/test/shell/src/org/chromium/android_webview/test/NullContentsClient.java
+++ b/android_webview/test/shell/src/org/chromium/android_webview/test/NullContentsClient.java
@@ -9,6 +9,7 @@
 import android.net.http.SslError;
 import android.os.Looper;
 import android.os.Message;
+import android.util.Log;
 import android.view.KeyEvent;
 import android.view.View;
 import android.webkit.ConsoleMessage;
@@ -17,17 +18,23 @@
 import android.webkit.WebChromeClient;
 
 import org.chromium.android_webview.AwContentsClient;
+import org.chromium.android_webview.AwContentsClientBridge;
 import org.chromium.android_webview.AwHttpAuthHandler;
 import org.chromium.android_webview.InterceptedRequestData;
 import org.chromium.android_webview.JsPromptResultReceiver;
 import org.chromium.android_webview.JsResultReceiver;
 import org.chromium.base.ThreadUtils;
 
+import java.security.Principal;
+
 /**
  * As a convience for tests that only care about specefic callbacks, this class provides
  * empty implementations of all abstract methods.
  */
 public class NullContentsClient extends AwContentsClient {
+
+    private static final String TAG = "NullContentsClient";
+
     public NullContentsClient() {
         this(ThreadUtils.getUiThreadLooper());
     }
@@ -87,6 +94,14 @@
     }
 
     @Override
+    public void onReceivedClientCertRequest(
+            final AwContentsClientBridge.ClientCertificateRequestCallback callback,
+            final String[] keyTypes, final Principal[] principals, final String host,
+            final int port) {
+        callback.proceed(null, null);
+    }
+
+    @Override
     public void onReceivedLoginRequest(String realm, String account, String args) {
     }
 
@@ -101,19 +116,27 @@
 
     @Override
     public void handleJsAlert(String url, String message, JsResultReceiver receiver) {
+        Log.i(TAG, "handleJsAlert(" + url + ", " + message + ")");
+        receiver.cancel();
     }
 
     @Override
     public void handleJsBeforeUnload(String url, String message, JsResultReceiver receiver) {
+        Log.i(TAG, "handleJsBeforeUnload(" + url + ", " + message + ")");
+        receiver.confirm();
     }
 
     @Override
     public void handleJsConfirm(String url, String message, JsResultReceiver receiver) {
+        Log.i(TAG, "handleJsConfirm(" + url + ", " + message + ")");
+        receiver.cancel();
     }
 
     @Override
     public void handleJsPrompt(
             String url, String message, String defaultValue, JsPromptResultReceiver receiver) {
+        Log.i(TAG, "handleJsPrompt(" + url + ", " + message + ")");
+        receiver.cancel();
     }
 
     @Override
diff --git a/android_webview/tools/third_party_files_whitelist.txt b/android_webview/tools/third_party_files_whitelist.txt
index d07e4da..6259ad3 100644
--- a/android_webview/tools/third_party_files_whitelist.txt
+++ b/android_webview/tools/third_party_files_whitelist.txt
@@ -41,8 +41,6 @@
 # String 'copyright' used in code.
 chrome/browser/resources/file_manager/foreground/js/media/mediaplayer_scripts.js
 # String 'copyright' used in code.
-chrome/browser/resources/video_player/js/video_player_scripts.js
-# String 'copyright' used in code.
 chrome/common/importer/firefox_importer_utils.cc
 # Copyright Netscape Communications Corporation; MPL, GPL v2 or LGPL v2
 # license. Not used on Android.
@@ -72,6 +70,12 @@
 # Copyright Apple Inc, Nokia Corporation and Torch Mobile Inc; BSD license.
 # Moved from third_party/WebKit/.
 content/renderer/history_controller.cc
+# Copyright Apple Inc and Torch Mobile Inc; BSD license. Moved from
+# third_party/WebKit/.
+content/renderer/history_entry.h
+# Copyright Apple Inc, Nokia Corporation and Torch Mobile Inc; BSD license.
+# Moved from third_party/WebKit/.
+content/renderer/history_entry.cc
 # Copyright Google Inc, no license. Not used on Android.
 google_update/google_update_idl.idl
 # Native client not used in Android. Contains the word "Copyright"
@@ -164,6 +168,10 @@
 # third-party code is taken from WebKit, the license for which we already pick
 # up from webkit/.
 ui/events/keycodes/keyboard_codes_posix.h
+# String 'copyright' used in code.
+ui/file_manager/gallery/js/gallery_scripts.js
+# String 'copyright' used in code.
+ui/file_manager/video_player/js/video_player_scripts.js
 # This third-party code is taken from Mozilla, but is copyright Google and has
 # been re-licensed under the Chromium license.
 ui/gfx/codec/jpeg_codec.cc
diff --git a/android_webview/unittestjava/src/org/chromium/android_webview/unittest/MockAwContentsClientBridge.java b/android_webview/unittestjava/src/org/chromium/android_webview/unittest/MockAwContentsClientBridge.java
new file mode 100644
index 0000000..5c4238d
--- /dev/null
+++ b/android_webview/unittestjava/src/org/chromium/android_webview/unittest/MockAwContentsClientBridge.java
@@ -0,0 +1,59 @@
+// 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.
+
+package org.chromium.android_webview.unittest;
+
+import org.chromium.android_webview.AwContentsClientBridge;
+import org.chromium.android_webview.ClientCertLookupTable;
+import org.chromium.base.CalledByNative;
+import org.chromium.net.AndroidKeyStore;
+import org.chromium.net.AndroidPrivateKey;
+import org.chromium.net.DefaultAndroidKeyStore;
+
+class MockAwContentsClientBridge extends AwContentsClientBridge {
+
+    private int mId;
+    private String[] mKeyTypes;
+
+    public MockAwContentsClientBridge() {
+        super(new DefaultAndroidKeyStore(), new ClientCertLookupTable());
+    }
+
+    @Override
+    protected void selectClientCertificate(final int id, final String[] keyTypes,
+            byte[][] encodedPrincipals, final String host, final int port) {
+        mId = id;
+        mKeyTypes = keyTypes;
+    }
+
+    @CalledByNative
+    private static MockAwContentsClientBridge getAwContentsClientBridge() {
+        return new MockAwContentsClientBridge();
+    }
+
+    @CalledByNative
+    private String[] getKeyTypes() {
+      return mKeyTypes;
+    }
+
+    @CalledByNative
+    private int getRequestId() {
+        return mId;
+    }
+
+    @CalledByNative
+    private AndroidPrivateKey createTestPrivateKey() {
+        return new AndroidPrivateKey() {
+            @Override
+            public AndroidKeyStore getKeyStore() {
+                return null;
+            }
+        };
+    }
+
+    @CalledByNative
+    private byte[][] createTestCertChain() {
+        return new byte[][]{{1}};
+    }
+}
diff --git a/apps/app_window_geometry_cache.cc b/apps/app_window_geometry_cache.cc
index 8b6cbba..e12794b 100644
--- a/apps/app_window_geometry_cache.cc
+++ b/apps/app_window_geometry_cache.cc
@@ -34,7 +34,7 @@
     : prefs_(prefs),
       sync_delay_(base::TimeDelta::FromMilliseconds(kSyncTimeoutMilliseconds)) {
   registrar_.Add(this,
-                 chrome::NOTIFICATION_EXTENSION_LOADED,
+                 chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
                  content::Source<Profile>(profile));
   registrar_.Add(this,
                  chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
@@ -198,7 +198,7 @@
     const content::NotificationSource& source,
     const content::NotificationDetails& details) {
   switch (type) {
-    case chrome::NOTIFICATION_EXTENSION_LOADED: {
+    case chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED: {
       std::string extension_id =
           content::Details<const extensions::Extension>(details).ptr()->id();
       LoadGeometryFromStorage(extension_id);
diff --git a/apps/browser/api/app_runtime/app_runtime_api.cc b/apps/browser/api/app_runtime/app_runtime_api.cc
index 5b52100..65ebf61 100644
--- a/apps/browser/api/app_runtime/app_runtime_api.cc
+++ b/apps/browser/api/app_runtime/app_runtime_api.cc
@@ -10,16 +10,13 @@
 #include "base/values.h"
 #include "extensions/browser/event_router.h"
 #include "extensions/browser/extension_prefs.h"
-#include "extensions/browser/extension_system.h"
 #include "extensions/browser/extensions_browser_client.h"
-#include "extensions/common/extension.h"
 #include "url/gurl.h"
 
 using content::BrowserContext;
 using extensions::Event;
 using extensions::Extension;
 using extensions::ExtensionPrefs;
-using extensions::ExtensionSystem;
 
 namespace apps {
 
@@ -36,13 +33,12 @@
       extensions::ExtensionsBrowserClient::Get()->IsRunningInForcedAppMode());
   scoped_ptr<base::ListValue> args(new base::ListValue());
   args->Append(launch_data.release());
-  ExtensionSystem* system = ExtensionSystem::Get(context);
   scoped_ptr<Event> event(
       new Event(app_runtime::OnLaunched::kEventName, args.Pass()));
   event->restrict_to_browser_context = context;
   event->can_load_ephemeral_apps = true;
-  system->event_router()->DispatchEventWithLazyListener(extension_id,
-                                                        event.Pass());
+  extensions::EventRouter::Get(context)
+      ->DispatchEventWithLazyListener(extension_id, event.Pass());
   ExtensionPrefs::Get(context)
       ->SetLastLaunchTime(extension_id, base::Time::Now());
 }
@@ -64,8 +60,7 @@
       new Event(app_runtime::OnRestarted::kEventName, arguments.Pass()));
   event->restrict_to_browser_context = context;
   event->can_load_ephemeral_apps = true;
-  extensions::ExtensionSystem::Get(context)
-      ->event_router()
+  extensions::EventRouter::Get(context)
       ->DispatchEventToExtension(extension->id(), event.Pass());
 }
 
diff --git a/apps/launcher.cc b/apps/launcher.cc
index ba7c829..8d31a01 100644
--- a/apps/launcher.cc
+++ b/apps/launcher.cc
@@ -29,6 +29,8 @@
 #include "extensions/common/extension.h"
 #include "extensions/common/extension_messages.h"
 #include "extensions/common/manifest_handlers/kiosk_mode_info.h"
+#include "net/base/filename_util.h"
+#include "net/base/mime_sniffer.h"
 #include "net/base/mime_util.h"
 #include "net/base/net_util.h"
 #include "url/gurl.h"
@@ -181,8 +183,21 @@
     }
 
     std::string mime_type;
-    if (!net::GetMimeTypeFromFile(file_path_, &mime_type))
-      mime_type = kFallbackMimeType;
+    if (!net::GetMimeTypeFromFile(file_path_, &mime_type)) {
+      // If MIME type of the file can't be determined by its path,
+      // try to sniff it by its content.
+      std::vector<char> content(net::kMaxBytesToSniff);
+      int bytes_read = base::ReadFile(file_path_, &content[0], content.size());
+      if (bytes_read >= 0) {
+        net::SniffMimeType(&content[0],
+                           bytes_read,
+                           net::FilePathToFileURL(file_path_),
+                           std::string(),  // type_hint (passes no hint)
+                           &mime_type);
+      }
+      if (mime_type.empty())
+        mime_type = kFallbackMimeType;
+    }
 
     BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, base::Bind(
             &PlatformAppPathLauncher::LaunchWithMimeType, this, mime_type));
diff --git a/apps/shell/app_shell.gyp b/apps/shell/app_shell.gyp
index 368b97b..b8f394a 100644
--- a/apps/shell/app_shell.gyp
+++ b/apps/shell/app_shell.gyp
@@ -77,6 +77,7 @@
         '<(DEPTH)/extensions/extensions.gyp:extensions_renderer',
         '<(DEPTH)/skia/skia.gyp:skia',
         '<(DEPTH)/third_party/WebKit/public/blink.gyp:blink',
+        '<(DEPTH)/ui/wm/wm.gyp:wm',
         '<(DEPTH)/ui/wm/wm.gyp:wm_test_support',
         '<(DEPTH)/v8/tools/gyp/v8.gyp:v8',
       ],
@@ -119,6 +120,15 @@
         'common/shell_extensions_client.h',
         'renderer/shell_content_renderer_client.cc',
         'renderer/shell_content_renderer_client.h',
+        'renderer/shell_extensions_renderer_client.cc',
+        'renderer/shell_extensions_renderer_client.h',
+      ],
+      'conditions': [
+        ['chromeos==1', {
+          'dependencies': [
+            '<(DEPTH)/ui/chromeos/ui_chromeos.gyp:ui_chromeos',
+          ],
+        }],
       ],
     },
     {
diff --git a/apps/shell/browser/shell_browser_main_parts.cc b/apps/shell/browser/shell_browser_main_parts.cc
index 9ce8a1c..c886b74 100644
--- a/apps/shell/browser/shell_browser_main_parts.cc
+++ b/apps/shell/browser/shell_browser_main_parts.cc
@@ -23,6 +23,10 @@
 #include "ui/aura/window_tree_host.h"
 #include "ui/base/resource/resource_bundle.h"
 
+#if defined(OS_CHROMEOS)
+#include "chromeos/dbus/dbus_thread_manager.h"
+#endif
+
 using content::BrowserContext;
 using extensions::Extension;
 using extensions::ExtensionSystem;
@@ -55,6 +59,9 @@
 }
 
 void ShellBrowserMainParts::PostMainMessageLoopStart() {
+#if defined(OS_CHROMEOS)
+  chromeos::DBusThreadManager::Initialize();
+#endif
 }
 
 void ShellBrowserMainParts::PreEarlyInitialization() {
@@ -135,6 +142,12 @@
   desktop_controller_.reset();
 }
 
+void ShellBrowserMainParts::PostDestroyThreads() {
+#if defined(OS_CHROMEOS)
+  chromeos::DBusThreadManager::Shutdown();
+#endif
+}
+
 void ShellBrowserMainParts::OnHostCloseRequested(
     const aura::WindowTreeHost* host) {
   desktop_controller_->CloseAppWindow();
diff --git a/apps/shell/browser/shell_browser_main_parts.h b/apps/shell/browser/shell_browser_main_parts.h
index f5082e1..8ae3fe4 100644
--- a/apps/shell/browser/shell_browser_main_parts.h
+++ b/apps/shell/browser/shell_browser_main_parts.h
@@ -61,6 +61,7 @@
   virtual void PreMainMessageLoopRun() OVERRIDE;
   virtual bool MainMessageLoopRun(int* result_code) OVERRIDE;
   virtual void PostMainMessageLoopRun() OVERRIDE;
+  virtual void PostDestroyThreads() OVERRIDE;
 
   // aura::WindowTreeHostObserver overrides:
   virtual void OnHostCloseRequested(const aura::WindowTreeHost* host) OVERRIDE;
diff --git a/apps/shell/browser/shell_desktop_controller.cc b/apps/shell/browser/shell_desktop_controller.cc
index d369b5b..cc287c9 100644
--- a/apps/shell/browser/shell_desktop_controller.cc
+++ b/apps/shell/browser/shell_desktop_controller.cc
@@ -10,11 +10,14 @@
 #include "ui/aura/test/test_screen.h"
 #include "ui/aura/window.h"
 #include "ui/aura/window_event_dispatcher.h"
+#include "ui/aura/window_tree_host.h"
 #include "ui/base/ime/input_method_initializer.h"
 #include "ui/gfx/screen.h"
+#include "ui/wm/core/user_activity_detector.h"
 #include "ui/wm/test/wm_test_helper.h"
 
 #if defined(OS_CHROMEOS)
+#include "ui/chromeos/user_activity_power_manager_notifier.h"
 #include "ui/display/types/chromeos/display_mode.h"
 #include "ui/display/types/chromeos/display_snapshot.h"
 #endif
@@ -69,6 +72,14 @@
 #endif
   CreateRootWindow();
 
+  user_activity_detector_.reset(new wm::UserActivityDetector);
+  GetWindowTreeHost()->event_processor()->GetRootTarget()->AddPreTargetHandler(
+      user_activity_detector_.get());
+#if defined(OS_CHROMEOS)
+  user_activity_notifier_.reset(
+      new ui::UserActivityPowerManagerNotifier(user_activity_detector_.get()));
+#endif
+
   g_instance = this;
 }
 
@@ -76,6 +87,8 @@
   // The app window must be explicitly closed before desktop teardown.
   DCHECK(!app_window_);
   g_instance = NULL;
+  GetWindowTreeHost()->event_processor()->GetRootTarget()
+      ->RemovePreTargetHandler(user_activity_detector_.get());
   DestroyRootWindow();
   aura::Env::DeleteInstance();
 }
@@ -108,7 +121,7 @@
 
 #if defined(OS_CHROMEOS)
 void ShellDesktopController::OnDisplayModeChanged(
-    const std::vector<ui::DisplayConfigurator::DisplayState>& outputs) {
+    const std::vector<ui::DisplayConfigurator::DisplayState>& displays) {
   gfx::Size size = GetPrimaryDisplaySize();
   if (!size.IsEmpty())
     wm_test_helper_->host()->UpdateRootWindowSize(size);
@@ -143,11 +156,11 @@
 
 gfx::Size ShellDesktopController::GetPrimaryDisplaySize() {
 #if defined(OS_CHROMEOS)
-  const std::vector<ui::DisplayConfigurator::DisplayState>& states =
+  const std::vector<ui::DisplayConfigurator::DisplayState>& displays =
       display_configurator_->cached_displays();
-  if (states.empty())
+  if (displays.empty())
     return gfx::Size();
-  const ui::DisplayMode* mode = states[0].display->current_mode();
+  const ui::DisplayMode* mode = displays[0].display->current_mode();
   return mode ? mode->size() : gfx::Size();
 #else
   return gfx::Size();
diff --git a/apps/shell/browser/shell_desktop_controller.h b/apps/shell/browser/shell_desktop_controller.h
index 02b0a34..643f671 100644
--- a/apps/shell/browser/shell_desktop_controller.h
+++ b/apps/shell/browser/shell_desktop_controller.h
@@ -24,7 +24,14 @@
 class BrowserContext;
 }
 
+#if defined(OS_CHROMEOS)
+namespace ui {
+class UserActivityPowerManagerNotifier;
+}
+#endif
+
 namespace wm {
+class UserActivityDetector;
 class WMTestHelper;
 }
 
@@ -60,7 +67,7 @@
 #if defined(OS_CHROMEOS)
   // ui::DisplayConfigurator::Observer overrides.
   virtual void OnDisplayModeChanged(const std::vector<
-      ui::DisplayConfigurator::DisplayState>& outputs) OVERRIDE;
+      ui::DisplayConfigurator::DisplayState>& displays) OVERRIDE;
 #endif
 
  private:
@@ -83,6 +90,11 @@
 
   scoped_ptr<aura::TestScreen> test_screen_;
 
+  scoped_ptr<wm::UserActivityDetector> user_activity_detector_;
+#if defined(OS_CHROMEOS)
+  scoped_ptr<ui::UserActivityPowerManagerNotifier> user_activity_notifier_;
+#endif
+
   // The desktop supports a single app window.
   scoped_ptr<ShellAppWindow> app_window_;
 
diff --git a/apps/shell/browser/shell_extension_system.cc b/apps/shell/browser/shell_extension_system.cc
index ce7d3ac..37bb147 100644
--- a/apps/shell/browser/shell_extension_system.cc
+++ b/apps/shell/browser/shell_extension_system.cc
@@ -59,7 +59,7 @@
   RegisterExtensionWithRequestContexts(extension);
 
   content::NotificationService::current()->Notify(
-      chrome::NOTIFICATION_EXTENSION_LOADED,
+      chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
       content::Source<BrowserContext>(browser_context_),
       content::Details<const Extension>(extension));
 
diff --git a/apps/shell/browser/shell_extensions_browser_client.cc b/apps/shell/browser/shell_extensions_browser_client.cc
index 395bc18..7dcf741 100644
--- a/apps/shell/browser/shell_extensions_browser_client.cc
+++ b/apps/shell/browser/shell_extensions_browser_client.cc
@@ -150,6 +150,11 @@
   return false;
 }
 
+bool ShellExtensionsBrowserClient::IsWebViewRequest(
+    net::URLRequest* request) const {
+  return false;
+}
+
 net::URLRequestJob*
 ShellExtensionsBrowserClient::MaybeCreateResourceBundleRequestJob(
     net::URLRequest* request,
diff --git a/apps/shell/browser/shell_extensions_browser_client.h b/apps/shell/browser/shell_extensions_browser_client.h
index 245d46c..0862dd5 100644
--- a/apps/shell/browser/shell_extensions_browser_client.h
+++ b/apps/shell/browser/shell_extensions_browser_client.h
@@ -42,6 +42,7 @@
   virtual bool CanExtensionCrossIncognito(
       const extensions::Extension* extension,
       content::BrowserContext* context) const OVERRIDE;
+  virtual bool IsWebViewRequest(net::URLRequest* request) const OVERRIDE;
   virtual net::URLRequestJob* MaybeCreateResourceBundleRequestJob(
       net::URLRequest* request,
       net::NetworkDelegate* network_delegate,
diff --git a/apps/shell/renderer/shell_content_renderer_client.cc b/apps/shell/renderer/shell_content_renderer_client.cc
index 71cf442..a0dffbd 100644
--- a/apps/shell/renderer/shell_content_renderer_client.cc
+++ b/apps/shell/renderer/shell_content_renderer_client.cc
@@ -5,6 +5,7 @@
 #include "apps/shell/renderer/shell_content_renderer_client.h"
 
 #include "apps/shell/common/shell_extensions_client.h"
+#include "apps/shell/renderer/shell_extensions_renderer_client.h"
 #include "chrome/renderer/extensions/dispatcher.h"
 #include "chrome/renderer/extensions/extension_helper.h"
 #include "content/public/renderer/render_frame.h"
@@ -71,6 +72,9 @@
 
   extensions_client_.reset(new ShellExtensionsClient);
   extensions::ExtensionsClient::Set(extensions_client_.get());
+
+  extensions_renderer_client_.reset(new ShellExtensionsRendererClient);
+  extensions::ExtensionsRendererClient::Set(extensions_renderer_client_.get());
 }
 
 void ShellContentRendererClient::RenderFrameCreated(
diff --git a/apps/shell/renderer/shell_content_renderer_client.h b/apps/shell/renderer/shell_content_renderer_client.h
index 4f31225..4a34810 100644
--- a/apps/shell/renderer/shell_content_renderer_client.h
+++ b/apps/shell/renderer/shell_content_renderer_client.h
@@ -17,6 +17,7 @@
 namespace apps {
 
 class ShellExtensionsClient;
+class ShellExtensionsRendererClient;
 
 // Renderer initialization and runtime support for app_shell.
 class ShellContentRendererClient : public content::ContentRendererClient {
@@ -41,6 +42,7 @@
 
  private:
   scoped_ptr<ShellExtensionsClient> extensions_client_;
+  scoped_ptr<ShellExtensionsRendererClient> extensions_renderer_client_;
   scoped_ptr<extensions::Dispatcher> extension_dispatcher_;
 
   DISALLOW_COPY_AND_ASSIGN(ShellContentRendererClient);
diff --git a/apps/shell/renderer/shell_extensions_renderer_client.cc b/apps/shell/renderer/shell_extensions_renderer_client.cc
new file mode 100644
index 0000000..c5de265
--- /dev/null
+++ b/apps/shell/renderer/shell_extensions_renderer_client.cc
@@ -0,0 +1,25 @@
+// 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.
+
+#include "apps/shell/renderer/shell_extensions_renderer_client.h"
+
+namespace apps {
+
+ShellExtensionsRendererClient::ShellExtensionsRendererClient() {}
+
+ShellExtensionsRendererClient::~ShellExtensionsRendererClient() {}
+
+bool ShellExtensionsRendererClient::IsIncognitoProcess() const {
+  // app_shell doesn't support off-the-record contexts.
+  return false;
+}
+
+int ShellExtensionsRendererClient::GetLowestIsolatedWorldId() const {
+  // app_shell doesn't need to reserve world IDs for anything other than
+  // extensions, so we always return 1. Note that 0 is reserved for the global
+  // world.
+  return 1;
+}
+
+}  // namespace apps
diff --git a/apps/shell/renderer/shell_extensions_renderer_client.h b/apps/shell/renderer/shell_extensions_renderer_client.h
new file mode 100644
index 0000000..7b32f90
--- /dev/null
+++ b/apps/shell/renderer/shell_extensions_renderer_client.h
@@ -0,0 +1,29 @@
+// 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.
+
+#ifndef APPS_SHELL_RENDERER_SHELL_EXTENSIONS_RENDERER_CLIENT_H_
+#define APPS_SHELL_RENDERER_SHELL_EXTENSIONS_RENDERER_CLIENT_H_
+
+#include "base/macros.h"
+#include "extensions/renderer/extensions_renderer_client.h"
+
+namespace apps {
+
+class ShellExtensionsRendererClient
+    : public extensions::ExtensionsRendererClient {
+ public:
+  ShellExtensionsRendererClient();
+  virtual ~ShellExtensionsRendererClient();
+
+  // extensions::ExtensionsRendererClient implementation.
+  virtual bool IsIncognitoProcess() const OVERRIDE;
+  virtual int GetLowestIsolatedWorldId() const OVERRIDE;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(ShellExtensionsRendererClient);
+};
+
+}  // namespace apps
+
+#endif  // APPS_SHELL_RENDERER_SHELL_EXTENSIONS_RENDERER_CLIENT_H_
diff --git a/ash/accelerators/accelerator_table.cc b/ash/accelerators/accelerator_table.cc
index dc20fe1..10b568c 100644
--- a/ash/accelerators/accelerator_table.cc
+++ b/ash/accelerators/accelerator_table.cc
@@ -375,9 +375,6 @@
 const AcceleratorAction kActionsAllowedInAppMode[] = {
   BRIGHTNESS_DOWN,
   BRIGHTNESS_UP,
-  CYCLE_BACKWARD_MRU,
-  CYCLE_FORWARD_MRU,
-  TOGGLE_OVERVIEW,
   DISABLE_CAPS_LOCK,
   KEYBOARD_BRIGHTNESS_DOWN,
   KEYBOARD_BRIGHTNESS_UP,
diff --git a/ash/ash.gyp b/ash/ash.gyp
index a0db4b0..b0b9c6e 100644
--- a/ash/ash.gyp
+++ b/ash/ash.gyp
@@ -41,7 +41,7 @@
         '../ui/views/controls/webview/webview.gyp:webview',
         '../ui/views/views.gyp:views',
         '../ui/web_dialogs/web_dialogs.gyp:web_dialogs',
-        '../ui/wm/wm.gyp:wm_core',
+        '../ui/wm/wm.gyp:wm',
         '../url/url.gyp:url_lib',
         'ash_strings.gyp:ash_strings',
         'ash_resources',
@@ -371,8 +371,8 @@
         'system/chromeos/power/tray_power.h',
         'system/chromeos/power/video_activity_notifier.cc',
         'system/chromeos/power/video_activity_notifier.h',
-        'system/chromeos/rotation/tray_rotation_lock.h',
         'system/chromeos/rotation/tray_rotation_lock.cc',
+        'system/chromeos/rotation/tray_rotation_lock.h',
         'system/chromeos/screen_security/screen_capture_observer.h',
         'system/chromeos/screen_security/screen_capture_tray_item.cc',
         'system/chromeos/screen_security/screen_capture_tray_item.h',
@@ -606,6 +606,8 @@
         'wm/overview/window_selector_panels.h',
         'wm/overview/window_selector_window.cc',
         'wm/overview/window_selector_window.h',
+        'wm/panels/attached_panel_window_targeter.cc',
+        'wm/panels/attached_panel_window_targeter.h',
         'wm/panels/panel_frame_view.cc',
         'wm/panels/panel_frame_view.h',
         'wm/panels/panel_layout_manager.cc',
@@ -718,6 +720,7 @@
             '../device/bluetooth/bluetooth.gyp:device_bluetooth',
             '../ui/chromeos/ui_chromeos.gyp:ui_chromeos',
             '../ui/display/display.gyp:display',
+            '../ui/display/display.gyp:display_util',
           ],
         }, { # else: chromeos!=1
           'sources/': [
@@ -729,7 +732,6 @@
         }],
       ],
     },
-
     {
       'target_name': 'ash_with_content',
       'type': '<(component)',
@@ -870,6 +872,7 @@
         '../ui/aura/aura.gyp:aura',
         '../ui/aura/aura.gyp:aura_test_support',
         '../ui/base/ui_base.gyp:ui_base',
+        '../ui/base/ui_base.gyp:ui_base_test_support',
         '../ui/compositor/compositor.gyp:compositor',
         '../ui/compositor/compositor.gyp:compositor_test_support',
         '../ui/events/events.gyp:events',
@@ -880,13 +883,12 @@
         '../ui/message_center/message_center.gyp:message_center',
         '../ui/message_center/message_center.gyp:message_center_test_support',
         '../ui/resources/ui_resources.gyp:ui_resources',
-        '../ui/ui_unittests.gyp:ui_test_support',
         '../ui/views/controls/webview/webview_tests.gyp:webview_test_support',
         '../ui/views/examples/examples.gyp:views_examples_with_content_lib',
         '../ui/views/views.gyp:views',
         '../ui/views/views.gyp:views_test_support',
         '../ui/web_dialogs/web_dialogs.gyp:web_dialogs_test_support',
-        '../ui/wm/wm.gyp:wm_core',
+        '../ui/wm/wm.gyp:wm',
         '../url/url.gyp:url_lib',
         'ash_strings.gyp:ash_strings',
         'ash',
@@ -1070,6 +1072,7 @@
         }],
         ['chromeos==1', {
           'dependencies': [
+            '../chromeos/chromeos.gyp:chromeos_test_support_without_gmock',
             '../chromeos/chromeos.gyp:power_manager_proto',
             '../device/bluetooth/bluetooth.gyp:device_bluetooth',
             '../ui/display/display.gyp:display',
diff --git a/ash/desktop_background/desktop_background_controller.cc b/ash/desktop_background/desktop_background_controller.cc
index 8b54cb5..e756997 100644
--- a/ash/desktop_background/desktop_background_controller.cc
+++ b/ash/desktop_background/desktop_background_controller.cc
@@ -43,6 +43,8 @@
 
 }  // namespace
 
+const int DesktopBackgroundController::kInvalidResourceID = -1;
+
 DesktopBackgroundController::DesktopBackgroundController()
     : locked_(false),
       desktop_background_mode_(BACKGROUND_NONE),
@@ -83,7 +85,8 @@
   VLOG(1) << "SetWallpaper: image_id=" << WallpaperResizer::GetImageId(image)
           << " layout=" << layout;
 
-  if (WallpaperIsAlreadyLoaded(&image, kInvalidResourceID, layout)) {
+  if (WallpaperIsAlreadyLoaded(
+          &image, kInvalidResourceID, true /* compare_layouts */, layout)) {
     VLOG(1) << "Wallpaper is already loaded";
     return false;
   }
@@ -104,7 +107,8 @@
   VLOG(1) << "SetWallpaper: resource_id=" << resource_id
           << " layout=" << layout;
 
-  if (WallpaperIsAlreadyLoaded(NULL, resource_id, layout)) {
+  if (WallpaperIsAlreadyLoaded(
+          NULL, resource_id, true /* compare_layouts */, layout)) {
     VLOG(1) << "Wallpaper is already loaded";
     return false;
   }
@@ -196,11 +200,13 @@
 bool DesktopBackgroundController::WallpaperIsAlreadyLoaded(
     const gfx::ImageSkia* image,
     int resource_id,
+    bool compare_layouts,
     WallpaperLayout layout) const {
   if (!current_wallpaper_.get())
     return false;
 
-  if (layout != current_wallpaper_->layout())
+  // Compare layouts only if necessary.
+  if (compare_layouts && layout != current_wallpaper_->layout())
     return false;
 
   if (image) {
diff --git a/ash/desktop_background/desktop_background_controller.h b/ash/desktop_background/desktop_background_controller.h
index b1099c6..8d9f698 100644
--- a/ash/desktop_background/desktop_background_controller.h
+++ b/ash/desktop_background/desktop_background_controller.h
@@ -37,7 +37,7 @@
   // desktop's size.
   WALLPAPER_LAYOUT_STRETCH,
   // Tile the wallpaper over the background without scaling it.
-  WALLPAPER_LAYOUT_TILE,
+  WALLPAPER_LAYOUT_TILE
 };
 
 const SkColor kLoginWallpaperColor = 0xFEFEFE;
@@ -57,6 +57,10 @@
     BACKGROUND_IMAGE,
   };
 
+  // This is used to initialize Resource ID variables and to denote "no
+  // resource ID" in parameters.
+  static const int kInvalidResourceID;
+
   DesktopBackgroundController();
   virtual ~DesktopBackgroundController();
 
@@ -110,18 +114,20 @@
   // maximum width of all displays, and the maximum height of all displays.
   static gfx::Size GetMaxDisplaySizeInNative();
 
+  // Returns true if the specified wallpaper is already stored
+  // in |current_wallpaper_|.
+  // If |image| is NULL, resource_id is compared.
+  // If |compare_layouts| is false, layout is ignored.
+  bool WallpaperIsAlreadyLoaded(const gfx::ImageSkia* image,
+                                int resource_id,
+                                bool compare_layouts,
+                                WallpaperLayout layout) const;
+
  private:
   friend class DesktopBackgroundControllerTest;
   //  friend class chromeos::WallpaperManagerBrowserTestDefaultWallpaper;
   FRIEND_TEST_ALL_PREFIXES(DesktopBackgroundControllerTest, GetMaxDisplaySize);
 
-  // Returns true if the specified wallpaper is already stored
-  // in |current_wallpaper_|.
-  // If |image| is NULL, resource_id is compared.
-  bool WallpaperIsAlreadyLoaded(const gfx::ImageSkia* image,
-                                int resource_id,
-                                WallpaperLayout layout) const;
-
   // Creates view for all root windows, or notifies them to repaint if they
   // already exist.
   void SetDesktopBackgroundImageMode();
diff --git a/ash/desktop_background/wallpaper_resizer.cc b/ash/desktop_background/wallpaper_resizer.cc
index 46497b2..4bd0264 100644
--- a/ash/desktop_background/wallpaper_resizer.cc
+++ b/ash/desktop_background/wallpaper_resizer.cc
@@ -93,8 +93,6 @@
 
 }  // namespace
 
-const int kInvalidResourceID = -1;
-
 // static
 uint32_t WallpaperResizer::GetImageId(const gfx::ImageSkia& image) {
   const gfx::ImageSkiaRep& image_rep = image.GetRepresentation(1.0f);
@@ -120,7 +118,7 @@
                                    WallpaperLayout layout)
     : image_(image),
       original_image_id_(GetImageId(image_)),
-      resource_id_(kInvalidResourceID),
+      resource_id_(DesktopBackgroundController::kInvalidResourceID),
       target_size_(target_size),
       layout_(layout),
       weak_ptr_factory_(this) {
diff --git a/ash/desktop_background/wallpaper_resizer.h b/ash/desktop_background/wallpaper_resizer.h
index 2b86799..989dbdb 100644
--- a/ash/desktop_background/wallpaper_resizer.h
+++ b/ash/desktop_background/wallpaper_resizer.h
@@ -18,8 +18,6 @@
 
 class WallpaperResizerObserver;
 
-extern const int kInvalidResourceID;
-
 // Stores the current wallpaper data and resize it to |target_size| if needed.
 class ASH_EXPORT WallpaperResizer {
  public:
diff --git a/ash/display/display_change_observer_chromeos.cc b/ash/display/display_change_observer_chromeos.cc
index 4dfc8c4..ad6b029 100644
--- a/ash/display/display_change_observer_chromeos.cc
+++ b/ash/display/display_change_observer_chromeos.cc
@@ -19,9 +19,9 @@
 #include "grit/ash_strings.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/compositor/dip_util.h"
-#include "ui/display/display_util.h"
 #include "ui/display/types/chromeos/display_mode.h"
 #include "ui/display/types/chromeos/display_snapshot.h"
+#include "ui/display/util/display_util.h"
 #include "ui/gfx/display.h"
 
 namespace ash {
diff --git a/ash/display/display_controller_unittest.cc b/ash/display/display_controller_unittest.cc
index 3da1368..95b7af6 100644
--- a/ash/display/display_controller_unittest.cc
+++ b/ash/display/display_controller_unittest.cc
@@ -935,11 +935,11 @@
   EXPECT_EQ(1.0f, primary_root->GetHost()->compositor()->
       device_scale_factor());
   primary_root->MoveCursorTo(gfx::Point(50, 50));
-  EXPECT_EQ(1.0f, test_api.GetDisplay().device_scale_factor());
+  EXPECT_EQ(1.0f, test_api.GetCurrentCursor().device_scale_factor());
   EXPECT_EQ(2.0f, secondary_root->GetHost()->compositor()->
       device_scale_factor());
   secondary_root->MoveCursorTo(gfx::Point(50, 50));
-  EXPECT_EQ(2.0f, test_api.GetDisplay().device_scale_factor());
+  EXPECT_EQ(2.0f, test_api.GetCurrentCursor().device_scale_factor());
 
   // Switch primary and secondary
   display_controller->SetPrimaryDisplay(secondary_display);
@@ -949,23 +949,23 @@
   EXPECT_EQ(1.0f, secondary_root->GetHost()->compositor()->
       device_scale_factor());
   secondary_root->MoveCursorTo(gfx::Point(50, 50));
-  EXPECT_EQ(1.0f, test_api.GetDisplay().device_scale_factor());
+  EXPECT_EQ(1.0f, test_api.GetCurrentCursor().device_scale_factor());
   primary_root->MoveCursorTo(gfx::Point(50, 50));
   EXPECT_EQ(2.0f, primary_root->GetHost()->compositor()->
       device_scale_factor());
-  EXPECT_EQ(2.0f, test_api.GetDisplay().device_scale_factor());
+  EXPECT_EQ(2.0f, test_api.GetCurrentCursor().device_scale_factor());
 
   // Deleting 2nd display.
   UpdateDisplay("200x200");
   RunAllPendingInMessageLoop();  // RootWindow is deleted in a posted task.
 
   // Cursor's device scale factor should be updated even without moving cursor.
-  EXPECT_EQ(1.0f, test_api.GetDisplay().device_scale_factor());
+  EXPECT_EQ(1.0f, test_api.GetCurrentCursor().device_scale_factor());
 
   primary_root->MoveCursorTo(gfx::Point(50, 50));
   EXPECT_EQ(1.0f, primary_root->GetHost()->compositor()->
       device_scale_factor());
-  EXPECT_EQ(1.0f, test_api.GetDisplay().device_scale_factor());
+  EXPECT_EQ(1.0f, test_api.GetCurrentCursor().device_scale_factor());
 }
 
 TEST_F(DisplayControllerTest, OverscanInsets) {
diff --git a/ash/display/display_manager.cc b/ash/display/display_manager.cc
index 83d747a..7f6d713 100644
--- a/ash/display/display_manager.cc
+++ b/ash/display/display_manager.cc
@@ -838,6 +838,8 @@
 }
 
 const DisplayInfo& DisplayManager::GetDisplayInfo(int64 display_id) const {
+  DCHECK_NE(gfx::Display::kInvalidDisplayID, display_id);
+
   std::map<int64, DisplayInfo>::const_iterator iter =
       display_info_.find(display_id);
   CHECK(iter != display_info_.end()) << display_id;
diff --git a/ash/display/mouse_cursor_event_filter.cc b/ash/display/mouse_cursor_event_filter.cc
index cbc2207..8807f99 100644
--- a/ash/display/mouse_cursor_event_filter.cc
+++ b/ash/display/mouse_cursor_event_filter.cc
@@ -98,10 +98,8 @@
       return;
   }
 
-  if (!(event->flags() & ui::EF_IS_SYNTHESIZED)) {
-    Shell::GetInstance()->display_controller()->
-        cursor_window_controller()->UpdateLocation();
-  }
+  Shell::GetInstance()->display_controller()->
+      cursor_window_controller()->UpdateLocation();
 
   gfx::Point point_in_screen(event->location());
   wm::ConvertPointToScreen(target, &point_in_screen);
diff --git a/ash/display/mouse_cursor_event_filter_unittest.cc b/ash/display/mouse_cursor_event_filter_unittest.cc
index 1b34456..3325d37 100644
--- a/ash/display/mouse_cursor_event_filter_unittest.cc
+++ b/ash/display/mouse_cursor_event_filter_unittest.cc
@@ -368,11 +368,11 @@
   test::CursorManagerTestApi cursor_test_api(
       Shell::GetInstance()->cursor_manager());
 
-  EXPECT_EQ(1.0f, cursor_test_api.GetDisplay().device_scale_factor());
+  EXPECT_EQ(1.0f, cursor_test_api.GetCurrentCursor().device_scale_factor());
   WarpMouseCursorIfNecessary(root_windows[0], gfx::Point(399, 200));
-  EXPECT_EQ(2.0f, cursor_test_api.GetDisplay().device_scale_factor());
+  EXPECT_EQ(2.0f, cursor_test_api.GetCurrentCursor().device_scale_factor());
   WarpMouseCursorIfNecessary(root_windows[1], gfx::Point(400, 200));
-  EXPECT_EQ(1.0f, cursor_test_api.GetDisplay().device_scale_factor());
+  EXPECT_EQ(1.0f, cursor_test_api.GetCurrentCursor().device_scale_factor());
 }
 
 }  // namespace ash
diff --git a/ash/display/screen_ash.cc b/ash/display/screen_ash.cc
index d32deb8..9d42e49 100644
--- a/ash/display/screen_ash.cc
+++ b/ash/display/screen_ash.cc
@@ -234,7 +234,8 @@
     return GetPrimaryDisplay();
   const RootWindowSettings* rws = GetRootWindowSettings(root_window);
   if (rws->shutdown)
-    return gfx::Display(1);
+    return GetPrimaryDisplay();
+
   int64 id = rws->display_id;
   // if id is |kInvaildDisplayID|, it's being deleted.
   DCHECK(id != gfx::Display::kInvalidDisplayID);
diff --git a/ash/first_run/first_run_helper_unittest.cc b/ash/first_run/first_run_helper_unittest.cc
index 6952dd6..a86c064 100644
--- a/ash/first_run/first_run_helper_unittest.cc
+++ b/ash/first_run/first_run_helper_unittest.cc
@@ -137,10 +137,12 @@
   overlay_window->Focus();
   EXPECT_TRUE(overlay_window->HasFocus());
   int mouse_events;
-  overlay_window->SetEventFilter(new CountingEventHandler(&mouse_events));
+  CountingEventHandler handler(&mouse_events);
+  overlay_window->AddPreTargetHandler(&handler);
   GetEventGenerator().PressLeftButton();
   GetEventGenerator().ReleaseLeftButton();
   EXPECT_EQ(mouse_events, 2);
+  overlay_window->RemovePreTargetHandler(&handler);
 }
 
 }  // namespace test
diff --git a/ash/host/ash_window_tree_host_win.cc b/ash/host/ash_window_tree_host_win.cc
index 5ea0f4a..27fd5a4 100644
--- a/ash/host/ash_window_tree_host_win.cc
+++ b/ash/host/ash_window_tree_host_win.cc
@@ -108,7 +108,7 @@
 }  // namespace
 
 AshWindowTreeHost* AshWindowTreeHost::Create(const gfx::Rect& initial_bounds) {
-  if (base::win::GetVersion() >= base::win::VERSION_WIN8 &&
+  if (base::win::GetVersion() >= base::win::VERSION_WIN7 &&
       !CommandLine::ForCurrentProcess()->HasSwitch(
           ash::switches::kForceAshToDesktop))
     return AshRemoteWindowTreeHostWin::GetInstance();
diff --git a/ash/ime/candidate_window_view.cc b/ash/ime/candidate_window_view.cc
index ca37b23..87a39f5 100644
--- a/ash/ime/candidate_window_view.cc
+++ b/ash/ime/candidate_window_view.cc
@@ -148,6 +148,7 @@
       should_show_at_composition_head_(false),
       should_show_upper_side_(false),
       was_candidate_window_open_(false) {
+  set_use_focusless(true);
   set_parent_window(parent);
   set_margins(gfx::Insets());
 
diff --git a/ash/resources/ash_resources.grd b/ash/resources/ash_resources.grd
index ac3b4fc..1201745 100644
--- a/ash/resources/ash_resources.grd
+++ b/ash/resources/ash_resources.grd
@@ -17,23 +17,22 @@
       <!-- KEEP THESE IN ALPHABETICAL ORDER!  DO NOT ADD TO RANDOM PLACES JUST
            BECAUSE YOUR RESOURCES ARE FUNCTIONALLY RELATED OR FALL UNDER THE
            SAME CONDITIONALS. -->
-      <structure type="chrome_scaled_image" name="IDR_ASH_SHELF_BACKGROUND" file="common/launcher/launcher_background.png" />
-      <structure type="chrome_scaled_image" name="IDR_ASH_SHELF_CORNER" file="common/launcher/launcher_corner.png" />
-      <structure type="chrome_scaled_image" name="IDR_ASH_SHELF_DIMMING" file="common/launcher/launcher_dimming.png" />
-      <structure type="chrome_scaled_image" name="IDR_ASH_SHELF_ICON_APPLIST" file="common/alt_launcher/status_app_menu_icon.png" />
-      <structure type="chrome_scaled_image" name="IDR_ASH_SHELF_ICON_APPLIST_HOT" file="common/launcher/launcher_appmenu_hover.png" />
-      <structure type="chrome_scaled_image" name="IDR_ASH_SHELF_ICON_APPLIST_PUSHED" file="common/launcher/launcher_appmenu_pressed.png" />
-      <structure type="chrome_scaled_image" name="IDR_ASH_SHELF_LIST_BROWSER" file="common/launcher/window_switcher_icon_normal.png" />
-      <structure type="chrome_scaled_image" name="IDR_ASH_SHELF_LIST_INCOGNITO_BROWSER" file="common/launcher/window_switcher_icon_incognito.png" />
-      <structure type="chrome_scaled_image" name="IDR_ASH_SHELF_OVERFLOW" file="common/launcher/launcher_overflow.png" />
-      <structure type="chrome_scaled_image" name="IDR_ASH_SHELF_UNDERLINE_ACTIVE" file="common/alt_launcher/launcher_underline_active.png" />
-      <structure type="chrome_scaled_image" name="IDR_ASH_SHELF_UNDERLINE_RUNNING" file="common/alt_launcher/launcher_underline_running.png" />
-      <structure type="chrome_scaled_image" name="IDR_ASH_SHELF_ICON_TASK_MANAGER" file="common/launcher/task_manager.png" />
+      <structure type="chrome_scaled_image" name="IDR_ASH_SHELF_BACKGROUND" file="common/shelf/shelf_background.png" />
+      <structure type="chrome_scaled_image" name="IDR_ASH_SHELF_CORNER" file="common/shelf/shelf_corner.png" />
+      <structure type="chrome_scaled_image" name="IDR_ASH_SHELF_DIMMING" file="common/shelf/shelf_dimming.png" />
+      <structure type="chrome_scaled_image" name="IDR_ASH_SHELF_ICON_APPLIST" file="common/shelf/status_app_menu_icon.png" />
+      <structure type="chrome_scaled_image" name="IDR_ASH_SHELF_LIST_BROWSER" file="common/shelf/window_switcher_icon_normal.png" />
+      <structure type="chrome_scaled_image" name="IDR_ASH_SHELF_LIST_INCOGNITO_BROWSER" file="common/shelf/window_switcher_icon_incognito.png" />
+      <structure type="chrome_scaled_image" name="IDR_ASH_SHELF_OVERFLOW" file="common/shelf/shelf_overflow.png" />
+      <structure type="chrome_scaled_image" name="IDR_ASH_SHELF_UNDERLINE_ACTIVE" file="common/shelf/shelf_underline_active.png" />
+      <structure type="chrome_scaled_image" name="IDR_ASH_SHELF_UNDERLINE_RUNNING" file="common/shelf/shelf_underline_running.png" />
+      <structure type="chrome_scaled_image" name="IDR_ASH_SHELF_ICON_SETTINGS" file="common/shelf/settings_app_icon.png" />
+      <structure type="chrome_scaled_image" name="IDR_ASH_SHELF_ICON_TASK_MANAGER" file="common/shelf/task_manager.png" />
       <structure type="chrome_scaled_image" name="IDR_AURA_MULTI_WINDOW_RESIZE_H" file="common/multi_window_resize_horizontal.png" />
       <structure type="chrome_scaled_image" name="IDR_AURA_MULTI_WINDOW_RESIZE_V" file="common/multi_window_resize_vertical.png" />
-      <structure type="chrome_scaled_image" name="IDR_AURA_NOTIFICATION_BACKGROUND_NORMAL" file="common/alt_launcher/status_icon_background_normal.png" />
-      <structure type="chrome_scaled_image" name="IDR_AURA_NOTIFICATION_BACKGROUND_ON_BLACK" file="common/alt_launcher/status_icon_background_onblack_normal.png" />
-      <structure type="chrome_scaled_image" name="IDR_AURA_NOTIFICATION_BACKGROUND_PRESSED" file="common/alt_launcher/status_icon_background_pressed.png" />
+      <structure type="chrome_scaled_image" name="IDR_AURA_NOTIFICATION_BACKGROUND_NORMAL" file="common/shelf/status_icon_background_normal.png" />
+      <structure type="chrome_scaled_image" name="IDR_AURA_NOTIFICATION_BACKGROUND_ON_BLACK" file="common/shelf/status_icon_background_onblack_normal.png" />
+      <structure type="chrome_scaled_image" name="IDR_AURA_NOTIFICATION_BACKGROUND_PRESSED" file="common/shelf/status_icon_background_pressed.png" />
       <structure type="chrome_scaled_image" name="IDR_AURA_PHANTOM_WINDOW_BOTTOM" file="common/phantom_window_bottom.png" />
       <structure type="chrome_scaled_image" name="IDR_AURA_PHANTOM_WINDOW_BOTTOM_LEFT" file="common/phantom_window_bottom_left.png" />
       <structure type="chrome_scaled_image" name="IDR_AURA_PHANTOM_WINDOW_BOTTOM_RIGHT" file="common/phantom_window_bottom_right.png" />
@@ -51,24 +50,24 @@
       <structure type="chrome_scaled_image" name="IDR_AURA_RESIZE_SHADOW_TOP" file="common/resize_shadow_top.png" />
       <structure type="chrome_scaled_image" name="IDR_AURA_RESIZE_SHADOW_TOP_LEFT" file="common/resize_shadow_top_left.png" />
       <structure type="chrome_scaled_image" name="IDR_AURA_RESIZE_SHADOW_TOP_RIGHT" file="common/resize_shadow_top_right.png" />
-      <structure type="chrome_scaled_image" name="IDR_AURA_TRAY_BG_HORIZ_CENTER" file="common/alt_launcher/status_tray_normal_center.png" />
-      <structure type="chrome_scaled_image" name="IDR_AURA_TRAY_BG_HORIZ_CENTER_ONBLACK" file="common/alt_launcher/status_tray_normal_onblack_center.png" />
-      <structure type="chrome_scaled_image" name="IDR_AURA_TRAY_BG_HORIZ_CENTER_PRESSED" file="common/alt_launcher/status_tray_pressed_center.png" />
-      <structure type="chrome_scaled_image" name="IDR_AURA_TRAY_BG_HORIZ_LEFT" file="common/alt_launcher/status_tray_normal_left.png" />
-      <structure type="chrome_scaled_image" name="IDR_AURA_TRAY_BG_HORIZ_LEFT_ONBLACK" file="common/alt_launcher/status_tray_normal_onblack_left.png" />
-      <structure type="chrome_scaled_image" name="IDR_AURA_TRAY_BG_HORIZ_LEFT_PRESSED" file="common/alt_launcher/status_tray_pressed_left.png" />
-      <structure type="chrome_scaled_image" name="IDR_AURA_TRAY_BG_HORIZ_RIGHT" file="common/alt_launcher/status_tray_normal_right.png" />
-      <structure type="chrome_scaled_image" name="IDR_AURA_TRAY_BG_HORIZ_RIGHT_ONBLACK" file="common/alt_launcher/status_tray_normal_onblack_right.png" />
-      <structure type="chrome_scaled_image" name="IDR_AURA_TRAY_BG_HORIZ_RIGHT_PRESSED" file="common/alt_launcher/status_tray_pressed_right.png" />
-      <structure type="chrome_scaled_image" name="IDR_AURA_TRAY_BG_VERTICAL_BOTTOM" file="common/alt_launcher/status_tray_vertical_normal_bottom.png" />
-      <structure type="chrome_scaled_image" name="IDR_AURA_TRAY_BG_VERTICAL_BOTTOM_ONBLACK" file="common/alt_launcher/status_tray_vertical_normal_onblack_bottom.png" />
-      <structure type="chrome_scaled_image" name="IDR_AURA_TRAY_BG_VERTICAL_BOTTOM_PRESSED" file="common/alt_launcher/status_tray_vertical_pressed_bottom.png" />
-      <structure type="chrome_scaled_image" name="IDR_AURA_TRAY_BG_VERTICAL_TOP" file="common/alt_launcher/status_tray_vertical_normal_top.png" />
-      <structure type="chrome_scaled_image" name="IDR_AURA_TRAY_BG_VERTICAL_TOP_ONBLACK" file="common/alt_launcher/status_tray_vertical_normal_onblack_top.png" />
-      <structure type="chrome_scaled_image" name="IDR_AURA_TRAY_BG_VERTICAL_TOP_PRESSED" file="common/alt_launcher/status_tray_vertical_pressed_top.png" />
-      <structure type="chrome_scaled_image" name="IDR_AURA_TRAY_BG_VERTICAL_CENTER" file="common/alt_launcher/status_tray_vertical_normal_center.png" />
-      <structure type="chrome_scaled_image" name="IDR_AURA_TRAY_BG_VERTICAL_CENTER_ONBLACK" file="common/alt_launcher/status_tray_vertical_normal_onblack_center.png" />
-      <structure type="chrome_scaled_image" name="IDR_AURA_TRAY_BG_VERTICAL_CENTER_PRESSED" file="common/alt_launcher/status_tray_vertical_pressed_center.png" />
+      <structure type="chrome_scaled_image" name="IDR_AURA_TRAY_BG_HORIZ_CENTER" file="common/shelf/status_tray_normal_center.png" />
+      <structure type="chrome_scaled_image" name="IDR_AURA_TRAY_BG_HORIZ_CENTER_ONBLACK" file="common/shelf/status_tray_normal_onblack_center.png" />
+      <structure type="chrome_scaled_image" name="IDR_AURA_TRAY_BG_HORIZ_CENTER_PRESSED" file="common/shelf/status_tray_pressed_center.png" />
+      <structure type="chrome_scaled_image" name="IDR_AURA_TRAY_BG_HORIZ_LEFT" file="common/shelf/status_tray_normal_left.png" />
+      <structure type="chrome_scaled_image" name="IDR_AURA_TRAY_BG_HORIZ_LEFT_ONBLACK" file="common/shelf/status_tray_normal_onblack_left.png" />
+      <structure type="chrome_scaled_image" name="IDR_AURA_TRAY_BG_HORIZ_LEFT_PRESSED" file="common/shelf/status_tray_pressed_left.png" />
+      <structure type="chrome_scaled_image" name="IDR_AURA_TRAY_BG_HORIZ_RIGHT" file="common/shelf/status_tray_normal_right.png" />
+      <structure type="chrome_scaled_image" name="IDR_AURA_TRAY_BG_HORIZ_RIGHT_ONBLACK" file="common/shelf/status_tray_normal_onblack_right.png" />
+      <structure type="chrome_scaled_image" name="IDR_AURA_TRAY_BG_HORIZ_RIGHT_PRESSED" file="common/shelf/status_tray_pressed_right.png" />
+      <structure type="chrome_scaled_image" name="IDR_AURA_TRAY_BG_VERTICAL_BOTTOM" file="common/shelf/status_tray_vertical_normal_bottom.png" />
+      <structure type="chrome_scaled_image" name="IDR_AURA_TRAY_BG_VERTICAL_BOTTOM_ONBLACK" file="common/shelf/status_tray_vertical_normal_onblack_bottom.png" />
+      <structure type="chrome_scaled_image" name="IDR_AURA_TRAY_BG_VERTICAL_BOTTOM_PRESSED" file="common/shelf/status_tray_vertical_pressed_bottom.png" />
+      <structure type="chrome_scaled_image" name="IDR_AURA_TRAY_BG_VERTICAL_TOP" file="common/shelf/status_tray_vertical_normal_top.png" />
+      <structure type="chrome_scaled_image" name="IDR_AURA_TRAY_BG_VERTICAL_TOP_ONBLACK" file="common/shelf/status_tray_vertical_normal_onblack_top.png" />
+      <structure type="chrome_scaled_image" name="IDR_AURA_TRAY_BG_VERTICAL_TOP_PRESSED" file="common/shelf/status_tray_vertical_pressed_top.png" />
+      <structure type="chrome_scaled_image" name="IDR_AURA_TRAY_BG_VERTICAL_CENTER" file="common/shelf/status_tray_vertical_normal_center.png" />
+      <structure type="chrome_scaled_image" name="IDR_AURA_TRAY_BG_VERTICAL_CENTER_ONBLACK" file="common/shelf/status_tray_vertical_normal_onblack_center.png" />
+      <structure type="chrome_scaled_image" name="IDR_AURA_TRAY_BG_VERTICAL_CENTER_PRESSED" file="common/shelf/status_tray_vertical_pressed_center.png" />
       <structure type="chrome_scaled_image" name="IDR_AURA_TRAY_POPUP_LABEL_BUTTON_BORDER" file="common/tray_popup_label_button_border.png" />
       <structure type="chrome_scaled_image" name="IDR_AURA_TRAY_POPUP_LABEL_BUTTON_HOVER_BACKGROUND" file="common/tray_popup_label_button_hover_background.png" />
       <structure type="chrome_scaled_image" name="IDR_AURA_TRAY_POPUP_LABEL_BUTTON_NORMAL_BACKGROUND" file="common/tray_popup_label_button_normal_background.png" />
@@ -155,7 +154,7 @@
       <if expr="chromeos">
         <structure type="chrome_scaled_image" name="IDR_AURA_NOTIFICATION_LOW_POWER_CHARGER" file="cros/notification/notification_low_power_charger.png" />
         <structure type="chrome_scaled_image" name="IDR_AURA_NOTIFICATION_DISPLAY" file="cros/notification/display_notification_icon.png" />
-        <structure type="chrome_scaled_image" name="IDR_AURA_UBER_TRAY_ENTERPRISE_DARK" file="cros/status/status_managed.png" />
+        <structure type="chrome_scaled_image" name="IDR_AURA_UBER_TRAY_ENTERPRISE" file="cros/status/status_managed.png" />
         <structure type="chrome_scaled_image" name="IDR_AURA_UBER_TRAY_MANAGED_USER" file="cros/status/status_managed_mode_user.png" />
         <structure type="chrome_scaled_image" name="IDR_AURA_UBER_TRAY_NETWORK_1X" file="cros/network/statusbar_network_1x.png" />
         <structure type="chrome_scaled_image" name="IDR_AURA_UBER_TRAY_NETWORK_3G_DARK" file="cros/network/statusbar_network_3g_dark.png" />
diff --git a/ash/resources/default_100_percent/common/launcher/launcher_appmenu.png b/ash/resources/default_100_percent/common/launcher/launcher_appmenu.png
deleted file mode 100644
index 719d772..0000000
--- a/ash/resources/default_100_percent/common/launcher/launcher_appmenu.png
+++ /dev/null
Binary files differ
diff --git a/ash/resources/default_100_percent/common/launcher/launcher_appmenu_hover.png b/ash/resources/default_100_percent/common/launcher/launcher_appmenu_hover.png
deleted file mode 100644
index a41d0e4..0000000
--- a/ash/resources/default_100_percent/common/launcher/launcher_appmenu_hover.png
+++ /dev/null
Binary files differ
diff --git a/ash/resources/default_100_percent/common/launcher/launcher_appmenu_pressed.png b/ash/resources/default_100_percent/common/launcher/launcher_appmenu_pressed.png
deleted file mode 100644
index 98750f8..0000000
--- a/ash/resources/default_100_percent/common/launcher/launcher_appmenu_pressed.png
+++ /dev/null
Binary files differ
diff --git a/ash/resources/default_100_percent/common/launcher/launcher_background.png b/ash/resources/default_100_percent/common/launcher/launcher_background.png
deleted file mode 100644
index 212c0de..0000000
--- a/ash/resources/default_100_percent/common/launcher/launcher_background.png
+++ /dev/null
Binary files differ
diff --git a/ash/resources/default_100_percent/common/launcher/launcher_background_left.png b/ash/resources/default_100_percent/common/launcher/launcher_background_left.png
deleted file mode 100644
index aabd3b9..0000000
--- a/ash/resources/default_100_percent/common/launcher/launcher_background_left.png
+++ /dev/null
Binary files differ
diff --git a/ash/resources/default_100_percent/common/launcher/launcher_background_right.png b/ash/resources/default_100_percent/common/launcher/launcher_background_right.png
deleted file mode 100644
index dea5d31..0000000
--- a/ash/resources/default_100_percent/common/launcher/launcher_background_right.png
+++ /dev/null
Binary files differ
diff --git a/ash/resources/default_100_percent/common/launcher/launcher_dimming_left.png b/ash/resources/default_100_percent/common/launcher/launcher_dimming_left.png
deleted file mode 100644
index 42a4106..0000000
--- a/ash/resources/default_100_percent/common/launcher/launcher_dimming_left.png
+++ /dev/null
Binary files differ
diff --git a/ash/resources/default_100_percent/common/launcher/launcher_dimming_right.png b/ash/resources/default_100_percent/common/launcher/launcher_dimming_right.png
deleted file mode 100644
index f8852ac..0000000
--- a/ash/resources/default_100_percent/common/launcher/launcher_dimming_right.png
+++ /dev/null
Binary files differ
diff --git a/ash/resources/default_100_percent/common/launcher/launcher_underline_bottom_active.png b/ash/resources/default_100_percent/common/launcher/launcher_underline_bottom_active.png
deleted file mode 100644
index bdf9f4e..0000000
--- a/ash/resources/default_100_percent/common/launcher/launcher_underline_bottom_active.png
+++ /dev/null
Binary files differ
diff --git a/ash/resources/default_100_percent/common/launcher/launcher_underline_bottom_hover.png b/ash/resources/default_100_percent/common/launcher/launcher_underline_bottom_hover.png
deleted file mode 100644
index 93dd4a1..0000000
--- a/ash/resources/default_100_percent/common/launcher/launcher_underline_bottom_hover.png
+++ /dev/null
Binary files differ
diff --git a/ash/resources/default_100_percent/common/launcher/launcher_underline_bottom_running.png b/ash/resources/default_100_percent/common/launcher/launcher_underline_bottom_running.png
deleted file mode 100644
index ac5bccb..0000000
--- a/ash/resources/default_100_percent/common/launcher/launcher_underline_bottom_running.png
+++ /dev/null
Binary files differ
diff --git a/ash/resources/default_100_percent/common/launcher/launcher_underline_left_active.png b/ash/resources/default_100_percent/common/launcher/launcher_underline_left_active.png
deleted file mode 100644
index f232976..0000000
--- a/ash/resources/default_100_percent/common/launcher/launcher_underline_left_active.png
+++ /dev/null
Binary files differ
diff --git a/ash/resources/default_100_percent/common/launcher/launcher_underline_left_hover.png b/ash/resources/default_100_percent/common/launcher/launcher_underline_left_hover.png
deleted file mode 100644
index f232976..0000000
--- a/ash/resources/default_100_percent/common/launcher/launcher_underline_left_hover.png
+++ /dev/null
Binary files differ
diff --git a/ash/resources/default_100_percent/common/launcher/launcher_underline_left_running.png b/ash/resources/default_100_percent/common/launcher/launcher_underline_left_running.png
deleted file mode 100644
index 6a4294f..0000000
--- a/ash/resources/default_100_percent/common/launcher/launcher_underline_left_running.png
+++ /dev/null
Binary files differ
diff --git a/ash/resources/default_100_percent/common/launcher/launcher_underline_right_active.png b/ash/resources/default_100_percent/common/launcher/launcher_underline_right_active.png
deleted file mode 100644
index 82572f2..0000000
--- a/ash/resources/default_100_percent/common/launcher/launcher_underline_right_active.png
+++ /dev/null
Binary files differ
diff --git a/ash/resources/default_100_percent/common/launcher/launcher_underline_right_hover.png b/ash/resources/default_100_percent/common/launcher/launcher_underline_right_hover.png
deleted file mode 100644
index 82572f2..0000000
--- a/ash/resources/default_100_percent/common/launcher/launcher_underline_right_hover.png
+++ /dev/null
Binary files differ
diff --git a/ash/resources/default_100_percent/common/launcher/launcher_underline_right_running.png b/ash/resources/default_100_percent/common/launcher/launcher_underline_right_running.png
deleted file mode 100644
index 24de3c0..0000000
--- a/ash/resources/default_100_percent/common/launcher/launcher_underline_right_running.png
+++ /dev/null
Binary files differ
diff --git a/ash/resources/default_100_percent/common/shelf/settings_app_icon.png b/ash/resources/default_100_percent/common/shelf/settings_app_icon.png
new file mode 100644
index 0000000..9682a9b
--- /dev/null
+++ b/ash/resources/default_100_percent/common/shelf/settings_app_icon.png
Binary files differ
diff --git a/ash/resources/default_100_percent/common/alt_launcher/launcher_background.png b/ash/resources/default_100_percent/common/shelf/shelf_background.png
similarity index 100%
rename from ash/resources/default_100_percent/common/alt_launcher/launcher_background.png
rename to ash/resources/default_100_percent/common/shelf/shelf_background.png
Binary files differ
diff --git a/ash/resources/default_100_percent/common/launcher/launcher_corner.png b/ash/resources/default_100_percent/common/shelf/shelf_corner.png
similarity index 100%
rename from ash/resources/default_100_percent/common/launcher/launcher_corner.png
rename to ash/resources/default_100_percent/common/shelf/shelf_corner.png
Binary files differ
diff --git a/ash/resources/default_100_percent/common/launcher/launcher_dimming.png b/ash/resources/default_100_percent/common/shelf/shelf_dimming.png
similarity index 100%
rename from ash/resources/default_100_percent/common/launcher/launcher_dimming.png
rename to ash/resources/default_100_percent/common/shelf/shelf_dimming.png
Binary files differ
diff --git a/ash/resources/default_100_percent/common/launcher/launcher_overflow.png b/ash/resources/default_100_percent/common/shelf/shelf_overflow.png
similarity index 100%
rename from ash/resources/default_100_percent/common/launcher/launcher_overflow.png
rename to ash/resources/default_100_percent/common/shelf/shelf_overflow.png
Binary files differ
diff --git a/ash/resources/default_100_percent/common/alt_launcher/launcher_underline_active.png b/ash/resources/default_100_percent/common/shelf/shelf_underline_active.png
similarity index 100%
rename from ash/resources/default_100_percent/common/alt_launcher/launcher_underline_active.png
rename to ash/resources/default_100_percent/common/shelf/shelf_underline_active.png
Binary files differ
diff --git a/ash/resources/default_100_percent/common/alt_launcher/launcher_underline_running.png b/ash/resources/default_100_percent/common/shelf/shelf_underline_running.png
similarity index 100%
rename from ash/resources/default_100_percent/common/alt_launcher/launcher_underline_running.png
rename to ash/resources/default_100_percent/common/shelf/shelf_underline_running.png
Binary files differ
diff --git a/ash/resources/default_100_percent/common/alt_launcher/status_app_menu_icon.png b/ash/resources/default_100_percent/common/shelf/status_app_menu_icon.png
similarity index 100%
rename from ash/resources/default_100_percent/common/alt_launcher/status_app_menu_icon.png
rename to ash/resources/default_100_percent/common/shelf/status_app_menu_icon.png
Binary files differ
diff --git a/ash/resources/default_100_percent/common/alt_launcher/status_icon_background_normal.png b/ash/resources/default_100_percent/common/shelf/status_icon_background_normal.png
similarity index 100%
rename from ash/resources/default_100_percent/common/alt_launcher/status_icon_background_normal.png
rename to ash/resources/default_100_percent/common/shelf/status_icon_background_normal.png
Binary files differ
diff --git a/ash/resources/default_100_percent/common/alt_launcher/status_icon_background_onblack_normal.png b/ash/resources/default_100_percent/common/shelf/status_icon_background_onblack_normal.png
similarity index 100%
rename from ash/resources/default_100_percent/common/alt_launcher/status_icon_background_onblack_normal.png
rename to ash/resources/default_100_percent/common/shelf/status_icon_background_onblack_normal.png
Binary files differ
diff --git a/ash/resources/default_100_percent/common/alt_launcher/status_icon_background_pressed.png b/ash/resources/default_100_percent/common/shelf/status_icon_background_pressed.png
similarity index 100%
rename from ash/resources/default_100_percent/common/alt_launcher/status_icon_background_pressed.png
rename to ash/resources/default_100_percent/common/shelf/status_icon_background_pressed.png
Binary files differ
diff --git a/ash/resources/default_100_percent/common/alt_launcher/status_notification_icon.png b/ash/resources/default_100_percent/common/shelf/status_notification_icon.png
similarity index 100%
rename from ash/resources/default_100_percent/common/alt_launcher/status_notification_icon.png
rename to ash/resources/default_100_percent/common/shelf/status_notification_icon.png
Binary files differ
diff --git a/ash/resources/default_100_percent/common/alt_launcher/status_tray_normal_center.png b/ash/resources/default_100_percent/common/shelf/status_tray_normal_center.png
similarity index 100%
rename from ash/resources/default_100_percent/common/alt_launcher/status_tray_normal_center.png
rename to ash/resources/default_100_percent/common/shelf/status_tray_normal_center.png
Binary files differ
diff --git a/ash/resources/default_100_percent/common/alt_launcher/status_tray_normal_left.png b/ash/resources/default_100_percent/common/shelf/status_tray_normal_left.png
similarity index 100%
rename from ash/resources/default_100_percent/common/alt_launcher/status_tray_normal_left.png
rename to ash/resources/default_100_percent/common/shelf/status_tray_normal_left.png
Binary files differ
diff --git a/ash/resources/default_100_percent/common/alt_launcher/status_tray_normal_onblack_center.png b/ash/resources/default_100_percent/common/shelf/status_tray_normal_onblack_center.png
similarity index 100%
rename from ash/resources/default_100_percent/common/alt_launcher/status_tray_normal_onblack_center.png
rename to ash/resources/default_100_percent/common/shelf/status_tray_normal_onblack_center.png
Binary files differ
diff --git a/ash/resources/default_100_percent/common/alt_launcher/status_tray_normal_onblack_left.png b/ash/resources/default_100_percent/common/shelf/status_tray_normal_onblack_left.png
similarity index 100%
rename from ash/resources/default_100_percent/common/alt_launcher/status_tray_normal_onblack_left.png
rename to ash/resources/default_100_percent/common/shelf/status_tray_normal_onblack_left.png
Binary files differ
diff --git a/ash/resources/default_100_percent/common/alt_launcher/status_tray_normal_onblack_right.png b/ash/resources/default_100_percent/common/shelf/status_tray_normal_onblack_right.png
similarity index 100%
rename from ash/resources/default_100_percent/common/alt_launcher/status_tray_normal_onblack_right.png
rename to ash/resources/default_100_percent/common/shelf/status_tray_normal_onblack_right.png
Binary files differ
diff --git a/ash/resources/default_100_percent/common/alt_launcher/status_tray_normal_right.png b/ash/resources/default_100_percent/common/shelf/status_tray_normal_right.png
similarity index 100%
rename from ash/resources/default_100_percent/common/alt_launcher/status_tray_normal_right.png
rename to ash/resources/default_100_percent/common/shelf/status_tray_normal_right.png
Binary files differ
diff --git a/ash/resources/default_100_percent/common/alt_launcher/status_tray_pressed_center.png b/ash/resources/default_100_percent/common/shelf/status_tray_pressed_center.png
similarity index 100%
rename from ash/resources/default_100_percent/common/alt_launcher/status_tray_pressed_center.png
rename to ash/resources/default_100_percent/common/shelf/status_tray_pressed_center.png
Binary files differ
diff --git a/ash/resources/default_100_percent/common/alt_launcher/status_tray_pressed_left.png b/ash/resources/default_100_percent/common/shelf/status_tray_pressed_left.png
similarity index 100%
rename from ash/resources/default_100_percent/common/alt_launcher/status_tray_pressed_left.png
rename to ash/resources/default_100_percent/common/shelf/status_tray_pressed_left.png
Binary files differ
diff --git a/ash/resources/default_100_percent/common/alt_launcher/status_tray_pressed_right.png b/ash/resources/default_100_percent/common/shelf/status_tray_pressed_right.png
similarity index 100%
rename from ash/resources/default_100_percent/common/alt_launcher/status_tray_pressed_right.png
rename to ash/resources/default_100_percent/common/shelf/status_tray_pressed_right.png
Binary files differ
diff --git a/ash/resources/default_100_percent/common/alt_launcher/status_tray_vertical_normal_bottom.png b/ash/resources/default_100_percent/common/shelf/status_tray_vertical_normal_bottom.png
similarity index 100%
rename from ash/resources/default_100_percent/common/alt_launcher/status_tray_vertical_normal_bottom.png
rename to ash/resources/default_100_percent/common/shelf/status_tray_vertical_normal_bottom.png
Binary files differ
diff --git a/ash/resources/default_100_percent/common/alt_launcher/status_tray_vertical_normal_center.png b/ash/resources/default_100_percent/common/shelf/status_tray_vertical_normal_center.png
similarity index 100%
rename from ash/resources/default_100_percent/common/alt_launcher/status_tray_vertical_normal_center.png
rename to ash/resources/default_100_percent/common/shelf/status_tray_vertical_normal_center.png
Binary files differ
diff --git a/ash/resources/default_100_percent/common/alt_launcher/status_tray_vertical_normal_onblack_bottom.png b/ash/resources/default_100_percent/common/shelf/status_tray_vertical_normal_onblack_bottom.png
similarity index 100%
rename from ash/resources/default_100_percent/common/alt_launcher/status_tray_vertical_normal_onblack_bottom.png
rename to ash/resources/default_100_percent/common/shelf/status_tray_vertical_normal_onblack_bottom.png
Binary files differ
diff --git a/ash/resources/default_100_percent/common/alt_launcher/status_tray_vertical_normal_onblack_center.png b/ash/resources/default_100_percent/common/shelf/status_tray_vertical_normal_onblack_center.png
similarity index 100%
rename from ash/resources/default_100_percent/common/alt_launcher/status_tray_vertical_normal_onblack_center.png
rename to ash/resources/default_100_percent/common/shelf/status_tray_vertical_normal_onblack_center.png
Binary files differ
diff --git a/ash/resources/default_100_percent/common/alt_launcher/status_tray_vertical_normal_onblack_top.png b/ash/resources/default_100_percent/common/shelf/status_tray_vertical_normal_onblack_top.png
similarity index 100%
rename from ash/resources/default_100_percent/common/alt_launcher/status_tray_vertical_normal_onblack_top.png
rename to ash/resources/default_100_percent/common/shelf/status_tray_vertical_normal_onblack_top.png
Binary files differ
diff --git a/ash/resources/default_100_percent/common/alt_launcher/status_tray_vertical_normal_top.png b/ash/resources/default_100_percent/common/shelf/status_tray_vertical_normal_top.png
similarity index 100%
rename from ash/resources/default_100_percent/common/alt_launcher/status_tray_vertical_normal_top.png
rename to ash/resources/default_100_percent/common/shelf/status_tray_vertical_normal_top.png
Binary files differ
diff --git a/ash/resources/default_100_percent/common/alt_launcher/status_tray_vertical_pressed_bottom.png b/ash/resources/default_100_percent/common/shelf/status_tray_vertical_pressed_bottom.png
similarity index 100%
rename from ash/resources/default_100_percent/common/alt_launcher/status_tray_vertical_pressed_bottom.png
rename to ash/resources/default_100_percent/common/shelf/status_tray_vertical_pressed_bottom.png
Binary files differ
diff --git a/ash/resources/default_100_percent/common/alt_launcher/status_tray_vertical_pressed_center.png b/ash/resources/default_100_percent/common/shelf/status_tray_vertical_pressed_center.png
similarity index 100%
rename from ash/resources/default_100_percent/common/alt_launcher/status_tray_vertical_pressed_center.png
rename to ash/resources/default_100_percent/common/shelf/status_tray_vertical_pressed_center.png
Binary files differ
diff --git a/ash/resources/default_100_percent/common/alt_launcher/status_tray_vertical_pressed_top.png b/ash/resources/default_100_percent/common/shelf/status_tray_vertical_pressed_top.png
similarity index 100%
rename from ash/resources/default_100_percent/common/alt_launcher/status_tray_vertical_pressed_top.png
rename to ash/resources/default_100_percent/common/shelf/status_tray_vertical_pressed_top.png
Binary files differ
diff --git a/ash/resources/default_100_percent/common/launcher/task_manager.png b/ash/resources/default_100_percent/common/shelf/task_manager.png
similarity index 100%
rename from ash/resources/default_100_percent/common/launcher/task_manager.png
rename to ash/resources/default_100_percent/common/shelf/task_manager.png
Binary files differ
diff --git a/ash/resources/default_100_percent/common/launcher/window_switcher_icon_incognito.png b/ash/resources/default_100_percent/common/shelf/window_switcher_icon_incognito.png
similarity index 100%
rename from ash/resources/default_100_percent/common/launcher/window_switcher_icon_incognito.png
rename to ash/resources/default_100_percent/common/shelf/window_switcher_icon_incognito.png
Binary files differ
diff --git a/ash/resources/default_100_percent/common/launcher/window_switcher_icon_normal.png b/ash/resources/default_100_percent/common/shelf/window_switcher_icon_normal.png
similarity index 100%
rename from ash/resources/default_100_percent/common/launcher/window_switcher_icon_normal.png
rename to ash/resources/default_100_percent/common/shelf/window_switcher_icon_normal.png
Binary files differ
diff --git a/ash/resources/default_100_percent/common/window_control_icon_close.png b/ash/resources/default_100_percent/common/window_control_icon_close.png
index c859299..9d28237 100644
--- a/ash/resources/default_100_percent/common/window_control_icon_close.png
+++ b/ash/resources/default_100_percent/common/window_control_icon_close.png
Binary files differ
diff --git a/ash/resources/default_100_percent/common/window_control_icon_close_inactive.png b/ash/resources/default_100_percent/common/window_control_icon_close_inactive.png
index c308491..dba91d5 100644
--- a/ash/resources/default_100_percent/common/window_control_icon_close_inactive.png
+++ b/ash/resources/default_100_percent/common/window_control_icon_close_inactive.png
Binary files differ
diff --git a/ash/resources/default_100_percent/common/window_control_icon_left_snapped.png b/ash/resources/default_100_percent/common/window_control_icon_left_snapped.png
index f95dc66..67561f1 100644
--- a/ash/resources/default_100_percent/common/window_control_icon_left_snapped.png
+++ b/ash/resources/default_100_percent/common/window_control_icon_left_snapped.png
Binary files differ
diff --git a/ash/resources/default_100_percent/common/window_control_icon_minimize_inactive.png b/ash/resources/default_100_percent/common/window_control_icon_minimize_inactive.png
index 3e9b6a7..6f0837d 100644
--- a/ash/resources/default_100_percent/common/window_control_icon_minimize_inactive.png
+++ b/ash/resources/default_100_percent/common/window_control_icon_minimize_inactive.png
Binary files differ
diff --git a/ash/resources/default_100_percent/common/window_control_icon_right_snapped.png b/ash/resources/default_100_percent/common/window_control_icon_right_snapped.png
index 13603a5..3a4f15e 100644
--- a/ash/resources/default_100_percent/common/window_control_icon_right_snapped.png
+++ b/ash/resources/default_100_percent/common/window_control_icon_right_snapped.png
Binary files differ
diff --git a/ash/resources/default_100_percent/common/window_control_icon_size_inactive.png b/ash/resources/default_100_percent/common/window_control_icon_size_inactive.png
index 4cfa19a..c1fb862 100644
--- a/ash/resources/default_100_percent/common/window_control_icon_size_inactive.png
+++ b/ash/resources/default_100_percent/common/window_control_icon_size_inactive.png
Binary files differ
diff --git a/ash/resources/default_100_percent/cros/status/status_managed.png b/ash/resources/default_100_percent/cros/status/status_managed.png
index 88155e7..4ce3c23 100644
--- a/ash/resources/default_100_percent/cros/status/status_managed.png
+++ b/ash/resources/default_100_percent/cros/status/status_managed.png
Binary files differ
diff --git a/ash/resources/default_200_percent/common/launcher/launcher_appmenu.png b/ash/resources/default_200_percent/common/launcher/launcher_appmenu.png
deleted file mode 100644
index 8a3ba66..0000000
--- a/ash/resources/default_200_percent/common/launcher/launcher_appmenu.png
+++ /dev/null
Binary files differ
diff --git a/ash/resources/default_200_percent/common/launcher/launcher_appmenu_hover.png b/ash/resources/default_200_percent/common/launcher/launcher_appmenu_hover.png
deleted file mode 100644
index 7762f27..0000000
--- a/ash/resources/default_200_percent/common/launcher/launcher_appmenu_hover.png
+++ /dev/null
Binary files differ
diff --git a/ash/resources/default_200_percent/common/launcher/launcher_appmenu_pressed.png b/ash/resources/default_200_percent/common/launcher/launcher_appmenu_pressed.png
deleted file mode 100644
index 82ca4b2..0000000
--- a/ash/resources/default_200_percent/common/launcher/launcher_appmenu_pressed.png
+++ /dev/null
Binary files differ
diff --git a/ash/resources/default_200_percent/common/launcher/launcher_background.png b/ash/resources/default_200_percent/common/launcher/launcher_background.png
deleted file mode 100644
index 3a3e6a1..0000000
--- a/ash/resources/default_200_percent/common/launcher/launcher_background.png
+++ /dev/null
Binary files differ
diff --git a/ash/resources/default_200_percent/common/launcher/launcher_background_left.png b/ash/resources/default_200_percent/common/launcher/launcher_background_left.png
deleted file mode 100644
index 165f6b8..0000000
--- a/ash/resources/default_200_percent/common/launcher/launcher_background_left.png
+++ /dev/null
Binary files differ
diff --git a/ash/resources/default_200_percent/common/launcher/launcher_background_right.png b/ash/resources/default_200_percent/common/launcher/launcher_background_right.png
deleted file mode 100644
index 593780b..0000000
--- a/ash/resources/default_200_percent/common/launcher/launcher_background_right.png
+++ /dev/null
Binary files differ
diff --git a/ash/resources/default_200_percent/common/launcher/launcher_dimming_left.png b/ash/resources/default_200_percent/common/launcher/launcher_dimming_left.png
deleted file mode 100644
index 30d20e8..0000000
--- a/ash/resources/default_200_percent/common/launcher/launcher_dimming_left.png
+++ /dev/null
Binary files differ
diff --git a/ash/resources/default_200_percent/common/launcher/launcher_dimming_right.png b/ash/resources/default_200_percent/common/launcher/launcher_dimming_right.png
deleted file mode 100644
index 72f5a6f..0000000
--- a/ash/resources/default_200_percent/common/launcher/launcher_dimming_right.png
+++ /dev/null
Binary files differ
diff --git a/ash/resources/default_200_percent/common/launcher/launcher_underline_bottom_active.png b/ash/resources/default_200_percent/common/launcher/launcher_underline_bottom_active.png
deleted file mode 100644
index 2118115..0000000
--- a/ash/resources/default_200_percent/common/launcher/launcher_underline_bottom_active.png
+++ /dev/null
Binary files differ
diff --git a/ash/resources/default_200_percent/common/launcher/launcher_underline_bottom_hover.png b/ash/resources/default_200_percent/common/launcher/launcher_underline_bottom_hover.png
deleted file mode 100644
index 4062f82..0000000
--- a/ash/resources/default_200_percent/common/launcher/launcher_underline_bottom_hover.png
+++ /dev/null
Binary files differ
diff --git a/ash/resources/default_200_percent/common/launcher/launcher_underline_bottom_running.png b/ash/resources/default_200_percent/common/launcher/launcher_underline_bottom_running.png
deleted file mode 100644
index 7b7e3e2..0000000
--- a/ash/resources/default_200_percent/common/launcher/launcher_underline_bottom_running.png
+++ /dev/null
Binary files differ
diff --git a/ash/resources/default_200_percent/common/launcher/launcher_underline_left_active.png b/ash/resources/default_200_percent/common/launcher/launcher_underline_left_active.png
deleted file mode 100644
index c2937e7..0000000
--- a/ash/resources/default_200_percent/common/launcher/launcher_underline_left_active.png
+++ /dev/null
Binary files differ
diff --git a/ash/resources/default_200_percent/common/launcher/launcher_underline_left_hover.png b/ash/resources/default_200_percent/common/launcher/launcher_underline_left_hover.png
deleted file mode 100644
index c2937e7..0000000
--- a/ash/resources/default_200_percent/common/launcher/launcher_underline_left_hover.png
+++ /dev/null
Binary files differ
diff --git a/ash/resources/default_200_percent/common/launcher/launcher_underline_left_running.png b/ash/resources/default_200_percent/common/launcher/launcher_underline_left_running.png
deleted file mode 100644
index d7ac049..0000000
--- a/ash/resources/default_200_percent/common/launcher/launcher_underline_left_running.png
+++ /dev/null
Binary files differ
diff --git a/ash/resources/default_200_percent/common/launcher/launcher_underline_right_active.png b/ash/resources/default_200_percent/common/launcher/launcher_underline_right_active.png
deleted file mode 100644
index 2f9ac00..0000000
--- a/ash/resources/default_200_percent/common/launcher/launcher_underline_right_active.png
+++ /dev/null
Binary files differ
diff --git a/ash/resources/default_200_percent/common/launcher/launcher_underline_right_hover.png b/ash/resources/default_200_percent/common/launcher/launcher_underline_right_hover.png
deleted file mode 100644
index 2f9ac00..0000000
--- a/ash/resources/default_200_percent/common/launcher/launcher_underline_right_hover.png
+++ /dev/null
Binary files differ
diff --git a/ash/resources/default_200_percent/common/launcher/launcher_underline_right_running.png b/ash/resources/default_200_percent/common/launcher/launcher_underline_right_running.png
deleted file mode 100644
index 8fade19..0000000
--- a/ash/resources/default_200_percent/common/launcher/launcher_underline_right_running.png
+++ /dev/null
Binary files differ
diff --git a/ash/resources/default_200_percent/common/shelf/settings_app_icon.png b/ash/resources/default_200_percent/common/shelf/settings_app_icon.png
new file mode 100644
index 0000000..716b9cf
--- /dev/null
+++ b/ash/resources/default_200_percent/common/shelf/settings_app_icon.png
Binary files differ
diff --git a/ash/resources/default_200_percent/common/alt_launcher/launcher_background.png b/ash/resources/default_200_percent/common/shelf/shelf_background.png
similarity index 100%
rename from ash/resources/default_200_percent/common/alt_launcher/launcher_background.png
rename to ash/resources/default_200_percent/common/shelf/shelf_background.png
Binary files differ
diff --git a/ash/resources/default_200_percent/common/launcher/launcher_corner.png b/ash/resources/default_200_percent/common/shelf/shelf_corner.png
similarity index 100%
rename from ash/resources/default_200_percent/common/launcher/launcher_corner.png
rename to ash/resources/default_200_percent/common/shelf/shelf_corner.png
Binary files differ
diff --git a/ash/resources/default_200_percent/common/launcher/launcher_dimming.png b/ash/resources/default_200_percent/common/shelf/shelf_dimming.png
similarity index 100%
rename from ash/resources/default_200_percent/common/launcher/launcher_dimming.png
rename to ash/resources/default_200_percent/common/shelf/shelf_dimming.png
Binary files differ
diff --git a/ash/resources/default_200_percent/common/launcher/launcher_overflow.png b/ash/resources/default_200_percent/common/shelf/shelf_overflow.png
similarity index 100%
rename from ash/resources/default_200_percent/common/launcher/launcher_overflow.png
rename to ash/resources/default_200_percent/common/shelf/shelf_overflow.png
Binary files differ
diff --git a/ash/resources/default_200_percent/common/alt_launcher/launcher_underline_active.png b/ash/resources/default_200_percent/common/shelf/shelf_underline_active.png
similarity index 100%
rename from ash/resources/default_200_percent/common/alt_launcher/launcher_underline_active.png
rename to ash/resources/default_200_percent/common/shelf/shelf_underline_active.png
Binary files differ
diff --git a/ash/resources/default_200_percent/common/alt_launcher/launcher_underline_running.png b/ash/resources/default_200_percent/common/shelf/shelf_underline_running.png
similarity index 100%
rename from ash/resources/default_200_percent/common/alt_launcher/launcher_underline_running.png
rename to ash/resources/default_200_percent/common/shelf/shelf_underline_running.png
Binary files differ
diff --git a/ash/resources/default_200_percent/common/alt_launcher/status_app_menu_icon.png b/ash/resources/default_200_percent/common/shelf/status_app_menu_icon.png
similarity index 100%
rename from ash/resources/default_200_percent/common/alt_launcher/status_app_menu_icon.png
rename to ash/resources/default_200_percent/common/shelf/status_app_menu_icon.png
Binary files differ
diff --git a/ash/resources/default_200_percent/common/alt_launcher/status_icon_background_normal.png b/ash/resources/default_200_percent/common/shelf/status_icon_background_normal.png
similarity index 100%
rename from ash/resources/default_200_percent/common/alt_launcher/status_icon_background_normal.png
rename to ash/resources/default_200_percent/common/shelf/status_icon_background_normal.png
Binary files differ
diff --git a/ash/resources/default_200_percent/common/alt_launcher/status_icon_background_onblack_normal.png b/ash/resources/default_200_percent/common/shelf/status_icon_background_onblack_normal.png
similarity index 100%
rename from ash/resources/default_200_percent/common/alt_launcher/status_icon_background_onblack_normal.png
rename to ash/resources/default_200_percent/common/shelf/status_icon_background_onblack_normal.png
Binary files differ
diff --git a/ash/resources/default_200_percent/common/alt_launcher/status_icon_background_pressed.png b/ash/resources/default_200_percent/common/shelf/status_icon_background_pressed.png
similarity index 100%
rename from ash/resources/default_200_percent/common/alt_launcher/status_icon_background_pressed.png
rename to ash/resources/default_200_percent/common/shelf/status_icon_background_pressed.png
Binary files differ
diff --git a/ash/resources/default_200_percent/common/alt_launcher/status_notification_icon.png b/ash/resources/default_200_percent/common/shelf/status_notification_icon.png
similarity index 100%
rename from ash/resources/default_200_percent/common/alt_launcher/status_notification_icon.png
rename to ash/resources/default_200_percent/common/shelf/status_notification_icon.png
Binary files differ
diff --git a/ash/resources/default_200_percent/common/alt_launcher/status_tray_normal_center.png b/ash/resources/default_200_percent/common/shelf/status_tray_normal_center.png
similarity index 100%
rename from ash/resources/default_200_percent/common/alt_launcher/status_tray_normal_center.png
rename to ash/resources/default_200_percent/common/shelf/status_tray_normal_center.png
Binary files differ
diff --git a/ash/resources/default_200_percent/common/alt_launcher/status_tray_normal_left.png b/ash/resources/default_200_percent/common/shelf/status_tray_normal_left.png
similarity index 100%
rename from ash/resources/default_200_percent/common/alt_launcher/status_tray_normal_left.png
rename to ash/resources/default_200_percent/common/shelf/status_tray_normal_left.png
Binary files differ
diff --git a/ash/resources/default_200_percent/common/alt_launcher/status_tray_normal_onblack_center.png b/ash/resources/default_200_percent/common/shelf/status_tray_normal_onblack_center.png
similarity index 100%
rename from ash/resources/default_200_percent/common/alt_launcher/status_tray_normal_onblack_center.png
rename to ash/resources/default_200_percent/common/shelf/status_tray_normal_onblack_center.png
Binary files differ
diff --git a/ash/resources/default_200_percent/common/alt_launcher/status_tray_normal_onblack_left.png b/ash/resources/default_200_percent/common/shelf/status_tray_normal_onblack_left.png
similarity index 100%
rename from ash/resources/default_200_percent/common/alt_launcher/status_tray_normal_onblack_left.png
rename to ash/resources/default_200_percent/common/shelf/status_tray_normal_onblack_left.png
Binary files differ
diff --git a/ash/resources/default_200_percent/common/alt_launcher/status_tray_normal_onblack_right.png b/ash/resources/default_200_percent/common/shelf/status_tray_normal_onblack_right.png
similarity index 100%
rename from ash/resources/default_200_percent/common/alt_launcher/status_tray_normal_onblack_right.png
rename to ash/resources/default_200_percent/common/shelf/status_tray_normal_onblack_right.png
Binary files differ
diff --git a/ash/resources/default_200_percent/common/alt_launcher/status_tray_normal_right.png b/ash/resources/default_200_percent/common/shelf/status_tray_normal_right.png
similarity index 100%
rename from ash/resources/default_200_percent/common/alt_launcher/status_tray_normal_right.png
rename to ash/resources/default_200_percent/common/shelf/status_tray_normal_right.png
Binary files differ
diff --git a/ash/resources/default_200_percent/common/alt_launcher/status_tray_pressed_center.png b/ash/resources/default_200_percent/common/shelf/status_tray_pressed_center.png
similarity index 100%
rename from ash/resources/default_200_percent/common/alt_launcher/status_tray_pressed_center.png
rename to ash/resources/default_200_percent/common/shelf/status_tray_pressed_center.png
Binary files differ
diff --git a/ash/resources/default_200_percent/common/alt_launcher/status_tray_pressed_left.png b/ash/resources/default_200_percent/common/shelf/status_tray_pressed_left.png
similarity index 100%
rename from ash/resources/default_200_percent/common/alt_launcher/status_tray_pressed_left.png
rename to ash/resources/default_200_percent/common/shelf/status_tray_pressed_left.png
Binary files differ
diff --git a/ash/resources/default_200_percent/common/alt_launcher/status_tray_pressed_right.png b/ash/resources/default_200_percent/common/shelf/status_tray_pressed_right.png
similarity index 100%
rename from ash/resources/default_200_percent/common/alt_launcher/status_tray_pressed_right.png
rename to ash/resources/default_200_percent/common/shelf/status_tray_pressed_right.png
Binary files differ
diff --git a/ash/resources/default_200_percent/common/alt_launcher/status_tray_vertical_normal_bottom.png b/ash/resources/default_200_percent/common/shelf/status_tray_vertical_normal_bottom.png
similarity index 100%
rename from ash/resources/default_200_percent/common/alt_launcher/status_tray_vertical_normal_bottom.png
rename to ash/resources/default_200_percent/common/shelf/status_tray_vertical_normal_bottom.png
Binary files differ
diff --git a/ash/resources/default_200_percent/common/alt_launcher/status_tray_vertical_normal_center.png b/ash/resources/default_200_percent/common/shelf/status_tray_vertical_normal_center.png
similarity index 100%
rename from ash/resources/default_200_percent/common/alt_launcher/status_tray_vertical_normal_center.png
rename to ash/resources/default_200_percent/common/shelf/status_tray_vertical_normal_center.png
Binary files differ
diff --git a/ash/resources/default_200_percent/common/alt_launcher/status_tray_vertical_normal_onblack_bottom.png b/ash/resources/default_200_percent/common/shelf/status_tray_vertical_normal_onblack_bottom.png
similarity index 100%
rename from ash/resources/default_200_percent/common/alt_launcher/status_tray_vertical_normal_onblack_bottom.png
rename to ash/resources/default_200_percent/common/shelf/status_tray_vertical_normal_onblack_bottom.png
Binary files differ
diff --git a/ash/resources/default_200_percent/common/alt_launcher/status_tray_vertical_normal_onblack_center.png b/ash/resources/default_200_percent/common/shelf/status_tray_vertical_normal_onblack_center.png
similarity index 100%
rename from ash/resources/default_200_percent/common/alt_launcher/status_tray_vertical_normal_onblack_center.png
rename to ash/resources/default_200_percent/common/shelf/status_tray_vertical_normal_onblack_center.png
Binary files differ
diff --git a/ash/resources/default_200_percent/common/alt_launcher/status_tray_vertical_normal_onblack_top.png b/ash/resources/default_200_percent/common/shelf/status_tray_vertical_normal_onblack_top.png
similarity index 100%
rename from ash/resources/default_200_percent/common/alt_launcher/status_tray_vertical_normal_onblack_top.png
rename to ash/resources/default_200_percent/common/shelf/status_tray_vertical_normal_onblack_top.png
Binary files differ
diff --git a/ash/resources/default_200_percent/common/alt_launcher/status_tray_vertical_normal_top.png b/ash/resources/default_200_percent/common/shelf/status_tray_vertical_normal_top.png
similarity index 100%
rename from ash/resources/default_200_percent/common/alt_launcher/status_tray_vertical_normal_top.png
rename to ash/resources/default_200_percent/common/shelf/status_tray_vertical_normal_top.png
Binary files differ
diff --git a/ash/resources/default_200_percent/common/alt_launcher/status_tray_vertical_pressed_bottom.png b/ash/resources/default_200_percent/common/shelf/status_tray_vertical_pressed_bottom.png
similarity index 100%
rename from ash/resources/default_200_percent/common/alt_launcher/status_tray_vertical_pressed_bottom.png
rename to ash/resources/default_200_percent/common/shelf/status_tray_vertical_pressed_bottom.png
Binary files differ
diff --git a/ash/resources/default_200_percent/common/alt_launcher/status_tray_vertical_pressed_center.png b/ash/resources/default_200_percent/common/shelf/status_tray_vertical_pressed_center.png
similarity index 100%
rename from ash/resources/default_200_percent/common/alt_launcher/status_tray_vertical_pressed_center.png
rename to ash/resources/default_200_percent/common/shelf/status_tray_vertical_pressed_center.png
Binary files differ
diff --git a/ash/resources/default_200_percent/common/alt_launcher/status_tray_vertical_pressed_top.png b/ash/resources/default_200_percent/common/shelf/status_tray_vertical_pressed_top.png
similarity index 100%
rename from ash/resources/default_200_percent/common/alt_launcher/status_tray_vertical_pressed_top.png
rename to ash/resources/default_200_percent/common/shelf/status_tray_vertical_pressed_top.png
Binary files differ
diff --git a/ash/resources/default_200_percent/common/launcher/task_manager.png b/ash/resources/default_200_percent/common/shelf/task_manager.png
similarity index 100%
rename from ash/resources/default_200_percent/common/launcher/task_manager.png
rename to ash/resources/default_200_percent/common/shelf/task_manager.png
Binary files differ
diff --git a/ash/resources/default_200_percent/common/launcher/window_switcher_icon_incognito.png b/ash/resources/default_200_percent/common/shelf/window_switcher_icon_incognito.png
similarity index 100%
rename from ash/resources/default_200_percent/common/launcher/window_switcher_icon_incognito.png
rename to ash/resources/default_200_percent/common/shelf/window_switcher_icon_incognito.png
Binary files differ
diff --git a/ash/resources/default_200_percent/common/launcher/window_switcher_icon_normal.png b/ash/resources/default_200_percent/common/shelf/window_switcher_icon_normal.png
similarity index 100%
rename from ash/resources/default_200_percent/common/launcher/window_switcher_icon_normal.png
rename to ash/resources/default_200_percent/common/shelf/window_switcher_icon_normal.png
Binary files differ
diff --git a/ash/resources/default_200_percent/cros/status/status_managed.png b/ash/resources/default_200_percent/cros/status/status_managed.png
index 19161c1..5e12092 100644
--- a/ash/resources/default_200_percent/cros/status/status_managed.png
+++ b/ash/resources/default_200_percent/cros/status/status_managed.png
Binary files differ
diff --git a/ash/root_window_controller.cc b/ash/root_window_controller.cc
index 3d4a839..ba38e14 100644
--- a/ash/root_window_controller.cc
+++ b/ash/root_window_controller.cc
@@ -33,6 +33,7 @@
 #include "ash/touch/touch_observer_hud.h"
 #include "ash/wm/always_on_top_controller.h"
 #include "ash/wm/dock/docked_window_layout_manager.h"
+#include "ash/wm/panels/attached_panel_window_targeter.h"
 #include "ash/wm/panels/panel_layout_manager.h"
 #include "ash/wm/panels/panel_window_event_handler.h"
 #include "ash/wm/root_window_layout_manager.h"
@@ -156,7 +157,6 @@
       kShellWindowId_AlwaysOnTopContainer,
       kShellWindowId_SystemModalContainer,
       kShellWindowId_LockSystemModalContainer,
-      kShellWindowId_InputMethodContainer,
       kShellWindowId_UnparentedControlContainer, };
   for (size_t i = 0; i < arraysize(kContainerIdsToMove); i++) {
     int id = kContainerIdsToMove[i];
@@ -415,6 +415,9 @@
     if (shelf_->shelf_layout_manager())
       docked_layout_manager_->AddObserver(shelf_->shelf_layout_manager());
   }
+
+  // Notify shell observers that the shelf has been created.
+  Shell::GetInstance()->OnShelfCreatedForRootWindow(GetRootWindow());
 }
 
 void RootWindowController::UpdateAfterLoginStatusChange(
@@ -785,6 +788,20 @@
   panel_container->SetLayoutManager(panel_layout_manager_);
   panel_container_handler_.reset(new PanelWindowEventHandler);
   panel_container->AddPreTargetHandler(panel_container_handler_.get());
+
+  // Install an AttachedPanelWindowTargeter on the panel container to make it
+  // easier to correctly target shelf buttons with touch.
+  gfx::Insets mouse_extend(-kResizeOutsideBoundsSize,
+                           -kResizeOutsideBoundsSize,
+                           -kResizeOutsideBoundsSize,
+                           -kResizeOutsideBoundsSize);
+  gfx::Insets touch_extend = mouse_extend.Scale(
+      kResizeOutsideBoundsScaleForTouch);
+  panel_container->SetEventTargeter(scoped_ptr<ui::EventTargeter>(
+      new AttachedPanelWindowTargeter(panel_container,
+                                      mouse_extend,
+                                      touch_extend,
+                                      panel_layout_manager_)));
 }
 
 void RootWindowController::InitTouchHuds() {
@@ -894,7 +911,6 @@
       "PanelContainer",
       non_lock_screen_containers);
   SetUsesScreenCoordinates(panel_container);
-  SetUsesEasyResizeTargeter(panel_container);
 
   aura::Window* shelf_bubble_container =
       CreateContainer(kShellWindowId_ShelfBubbleContainer,
@@ -919,13 +935,6 @@
   SetUsesScreenCoordinates(modal_container);
   SetUsesEasyResizeTargeter(modal_container);
 
-  aura::Window* input_method_container = CreateContainer(
-      kShellWindowId_InputMethodContainer,
-      "InputMethodContainer",
-      non_lock_screen_containers);
-  ::wm::SetChildWindowVisibilityChangesAnimated(input_method_container);
-  SetUsesScreenCoordinates(input_method_container);
-
   // TODO(beng): Figure out if we can make this use
   // SystemModalContainerEventFilter instead of stops_event_propagation.
   aura::Window* lock_container = CreateContainer(
diff --git a/ash/root_window_controller_unittest.cc b/ash/root_window_controller_unittest.cc
index 69aad6b..99c340d 100644
--- a/ash/root_window_controller_unittest.cc
+++ b/ash/root_window_controller_unittest.cc
@@ -28,6 +28,7 @@
 #include "ui/events/test/test_event_handler.h"
 #include "ui/keyboard/keyboard_controller_proxy.h"
 #include "ui/keyboard/keyboard_switches.h"
+#include "ui/keyboard/keyboard_util.h"
 #include "ui/views/controls/menu/menu_controller.h"
 #include "ui/views/widget/widget.h"
 #include "ui/views/widget/widget_delegate.h"
@@ -653,13 +654,13 @@
   keyboard_window->SetBounds(gfx::Rect());
   keyboard_window->Show();
 
-  ui::test::TestEventHandler* handler = new ui::test::TestEventHandler;
-  root_window->SetEventFilter(handler);
+  ui::test::TestEventHandler handler;
+  root_window->AddPreTargetHandler(&handler);
 
   aura::test::EventGenerator event_generator(root_window, keyboard_window);
   event_generator.ClickLeftButton();
   int expected_mouse_presses = 1;
-  EXPECT_EQ(expected_mouse_presses, handler->num_mouse_events() / 2);
+  EXPECT_EQ(expected_mouse_presses, handler.num_mouse_events() / 2);
 
   for (int block_reason = FIRST_BLOCK_REASON;
        block_reason < NUMBER_OF_BLOCK_REASONS;
@@ -667,9 +668,10 @@
     BlockUserSession(static_cast<UserSessionBlockReason>(block_reason));
     event_generator.ClickLeftButton();
     expected_mouse_presses++;
-    EXPECT_EQ(expected_mouse_presses, handler->num_mouse_events() / 2);
+    EXPECT_EQ(expected_mouse_presses, handler.num_mouse_events() / 2);
     UnblockUserSession();
   }
+  root_window->RemovePreTargetHandler(&handler);
 }
 
 // Test for http://crbug.com/299787. RootWindowController should delete
@@ -702,6 +704,8 @@
   aura::Window* keyboard_window = controller->proxy()->GetKeyboardWindow();
   keyboard_container->AddChild(keyboard_window);
   keyboard_window->set_owned_by_parent(false);
+  keyboard_window->SetBounds(keyboard::KeyboardBoundsFromWindowBounds(
+      keyboard_container->bounds(), 100));
   keyboard_window->Show();
 
   gfx::Rect before = ash::Shell::GetScreen()->GetPrimaryDisplay().work_area();
@@ -731,11 +735,11 @@
       proxy()->GetKeyboardWindow();
   keyboard_container->AddChild(keyboard_window);
   keyboard_window->set_owned_by_parent(false);
-  keyboard_window->SetBounds(gfx::Rect());
-  keyboard_window->Show();
+  keyboard_window->SetBounds(keyboard::KeyboardBoundsFromWindowBounds(
+      keyboard_container->bounds(), 100));
 
-  ui::test::TestEventHandler* handler = new ui::test::TestEventHandler;
-  root_window->SetEventFilter(handler);
+  ui::test::TestEventHandler handler;
+  root_window->AddPreTargetHandler(&handler);
   aura::test::EventGenerator root_window_event_generator(root_window);
   aura::test::EventGenerator keyboard_event_generator(root_window,
                                                       keyboard_window);
@@ -746,17 +750,18 @@
   // Verify that mouse events to the root window are block with a visble modal
   // dialog.
   root_window_event_generator.ClickLeftButton();
-  EXPECT_EQ(0, handler->num_mouse_events());
+  EXPECT_EQ(0, handler.num_mouse_events());
 
   // Verify that event dispatch to the virtual keyboard is unblocked.
   keyboard_event_generator.ClickLeftButton();
-  EXPECT_EQ(1, handler->num_mouse_events() / 2);
+  EXPECT_EQ(1, handler.num_mouse_events() / 2);
 
   modal_widget->Close();
 
   // Verify that mouse events are now unblocked to the root window.
   root_window_event_generator.ClickLeftButton();
-  EXPECT_EQ(2, handler->num_mouse_events() / 2);
+  EXPECT_EQ(2, handler.num_mouse_events() / 2);
+  root_window->RemovePreTargetHandler(&handler);
 }
 
 }  // namespace test
diff --git a/ash/shelf/shelf_layout_manager.cc b/ash/shelf/shelf_layout_manager.cc
index 789c884..093d38b 100644
--- a/ash/shelf/shelf_layout_manager.cc
+++ b/ash/shelf/shelf_layout_manager.cc
@@ -1028,7 +1028,9 @@
   if (shelf_->shelf() && shelf_->shelf()->IsShowingOverflowBubble())
     return SHELF_AUTO_HIDE_SHOWN;
 
-  if (shelf_->IsActive() || shelf_->status_area_widget()->IsActive())
+  if (shelf_->IsActive() ||
+      (shelf_->status_area_widget() &&
+       shelf_->status_area_widget()->IsActive()))
     return SHELF_AUTO_HIDE_SHOWN;
 
   const std::vector<aura::Window*> windows =
diff --git a/ash/shell.cc b/ash/shell.cc
index 6891419..e694630 100644
--- a/ash/shell.cc
+++ b/ash/shell.cc
@@ -132,7 +132,7 @@
 #include "ash/system/chromeos/session/logout_confirmation_controller.h"
 #include "base/bind_helpers.h"
 #include "base/sys_info.h"
-#include "ui/chromeos/user_activity_notifier.h"
+#include "ui/chromeos/user_activity_power_manager_notifier.h"
 #include "ui/display/chromeos/display_configurator.h"
 #endif  // defined(OS_CHROMEOS)
 
@@ -407,6 +407,12 @@
     (*iter)->shelf()->CreateShelf();
 }
 
+void Shell::OnShelfCreatedForRootWindow(aura::Window* root_window) {
+  FOR_EACH_OBSERVER(ShellObserver,
+                    observers_,
+                    OnShelfCreatedForRootWindow(root_window));
+}
+
 void Shell::CreateKeyboard() {
   // TODO(bshe): Primary root window controller may not be the controller to
   // attach virtual keyboard. See http://crbug.com/303429
@@ -1001,7 +1007,7 @@
 
   power_event_observer_.reset(new PowerEventObserver());
   user_activity_notifier_.reset(
-      new ui::UserActivityNotifier(user_activity_detector_.get()));
+      new ui::UserActivityPowerManagerNotifier(user_activity_detector_.get()));
   video_activity_notifier_.reset(
       new VideoActivityNotifier(video_detector_.get()));
   bluetooth_notification_controller_.reset(new BluetoothNotificationController);
diff --git a/ash/shell.h b/ash/shell.h
index 56af8d1..6f88e1d 100644
--- a/ash/shell.h
+++ b/ash/shell.h
@@ -51,7 +51,7 @@
 namespace ui {
 class DisplayConfigurator;
 class Layer;
-class UserActivityNotifier;
+class UserActivityPowerManagerNotifier;
 }
 namespace views {
 class NonClientFrameView;
@@ -307,6 +307,9 @@
   // Initializes |shelf_|.  Does nothing if it's already initialized.
   void CreateShelf();
 
+  // Called when the shelf is created for |root_window|.
+  void OnShelfCreatedForRootWindow(aura::Window* root_window);
+
   // Creates a virtual keyboard. Deletes the old virtual keyboard if it already
   // exists.
   void CreateKeyboard();
@@ -689,7 +692,7 @@
 
 #if defined(OS_CHROMEOS)
   scoped_ptr<PowerEventObserver> power_event_observer_;
-  scoped_ptr<ui::UserActivityNotifier> user_activity_notifier_;
+  scoped_ptr<ui::UserActivityPowerManagerNotifier> user_activity_notifier_;
   scoped_ptr<VideoActivityNotifier> video_activity_notifier_;
   scoped_ptr<StickyKeysController> sticky_keys_controller_;
   scoped_ptr<ResolutionNotificationController>
diff --git a/ash/shell_observer.h b/ash/shell_observer.h
index 8c393d3..35b2555 100644
--- a/ash/shell_observer.h
+++ b/ash/shell_observer.h
@@ -32,6 +32,9 @@
   // Invoked after a non-primary root window is created.
   virtual void OnRootWindowAdded(aura::Window* root_window) {}
 
+  // Invoked after the shelf has been created for |root_window|.
+  virtual void OnShelfCreatedForRootWindow(aura::Window* root_window) {}
+
   // Invoked when the shelf alignment in |root_window| is changed.
   virtual void OnShelfAlignmentChanged(aura::Window* root_window) {}
 
diff --git a/ash/shell_window_ids.h b/ash/shell_window_ids.h
index a4bd516..f01e74b 100644
--- a/ash/shell_window_ids.h
+++ b/ash/shell_window_ids.h
@@ -61,50 +61,45 @@
 // The container for user-specific modal windows.
 const int kShellWindowId_SystemModalContainer = 13;
 
-// The container for input method components such like candidate windows.  They
-// are almost panels but have no activations/focus, and they should appear over
-// the AppList and SystemModal dialogs.
-const int kShellWindowId_InputMethodContainer = 14;
-
 // The container for the lock screen background.
-const int kShellWindowId_LockScreenBackgroundContainer = 15;
+const int kShellWindowId_LockScreenBackgroundContainer = 14;
 
 // The container for the lock screen.
-const int kShellWindowId_LockScreenContainer = 16;
+const int kShellWindowId_LockScreenContainer = 15;
 
 // The container for the lock screen modal windows.
-const int kShellWindowId_LockSystemModalContainer = 17;
+const int kShellWindowId_LockSystemModalContainer = 16;
 
 // The container for the status area.
-const int kShellWindowId_StatusContainer = 18;
+const int kShellWindowId_StatusContainer = 17;
 
 // The container for menus.
-const int kShellWindowId_MenuContainer = 19;
+const int kShellWindowId_MenuContainer = 18;
 
 // The container for drag/drop images and tooltips.
-const int kShellWindowId_DragImageAndTooltipContainer = 20;
+const int kShellWindowId_DragImageAndTooltipContainer = 19;
 
 // The container for bubbles briefly overlaid onscreen to show settings changes
-// (volume, brightness, etc.).
-const int kShellWindowId_SettingBubbleContainer = 21;
+// (volume, brightness, input method bubbles, etc.).
+const int kShellWindowId_SettingBubbleContainer = 20;
 
 // The container for special components overlaid onscreen, such as the
 // region selector for partial screenshots.
-const int kShellWindowId_OverlayContainer = 22;
+const int kShellWindowId_OverlayContainer = 21;
 
 // ID of the window created by PhantomWindowController or DragWindowController.
-const int kShellWindowId_PhantomWindow = 23;
+const int kShellWindowId_PhantomWindow = 22;
 
 // A parent container that holds the virtual keyboard container. This is to
 // ensure that the virtual keyboard is stacked above most containers but below
 // the mouse cursor and the power off animation.
-const int kShellWindowId_VirtualKeyboardParentContainer = 24;
+const int kShellWindowId_VirtualKeyboardParentContainer = 23;
 
 // The container for mouse cursor.
-const int kShellWindowId_MouseCursorContainer = 25;
+const int kShellWindowId_MouseCursorContainer = 24;
 
 // The topmost container, used for power off animation.
-const int kShellWindowId_PowerButtonAnimationContainer = 26;
+const int kShellWindowId_PowerButtonAnimationContainer = 25;
 
 }  // namespace ash
 
diff --git a/ash/strings/ash_strings_fi.xtb b/ash/strings/ash_strings_fi.xtb
index 14a1def..bb1139f 100644
--- a/ash/strings/ash_strings_fi.xtb
+++ b/ash/strings/ash_strings_fi.xtb
@@ -74,7 +74,7 @@
 <translation id="2688477613306174402">Määritykset</translation>
 <translation id="1272079795634619415">Pysäytä</translation>
 <translation id="4957722034734105353">Lisätietoja...</translation>
-<translation id="2964193600955408481">Wifi pois käytöstä</translation>
+<translation id="2964193600955408481">Wi-Fi pois käytöstä</translation>
 <translation id="4279490309300973883">Peilaus päällä</translation>
 <translation id="7973962044839454485">PPP-todennus epäonnistui virheellisen käyttäjänimen tai salasanan vuoksi</translation>
 <translation id="2509468283778169019">CAPS LOCK on päällä</translation>
@@ -137,7 +137,7 @@
 <translation id="1957803754585243749">0°</translation>
 <translation id="2354174487190027830">Aktivoidaan <ph name="NAME"/></translation>
 <translation id="4527045527269911712">Bluetooth-laite <ph name="DEVICE_NAME"/> pyytää lupaa laiteparin muodostamiseen.</translation>
-<translation id="8814190375133053267">Wifi</translation>
+<translation id="8814190375133053267">Wi-Fi</translation>
 <translation id="1923539912171292317">Automaattiset klikkaukset</translation>
 <translation id="1398853756734560583">Suurenna</translation>
 <translation id="2692809339924654275"><ph name="BLUETOOTH"/>: Yhdistetään…</translation>
@@ -149,7 +149,7 @@
 <translation id="2805756323405976993">Sovellukset</translation>
 <translation id="1512064327686280138">Aktivointivirhe</translation>
 <translation id="5097002363526479830">Yhteyden muodostaminen verkkoon &quot;<ph name="NAME"/>&quot; epäonnistui: <ph name="DETAILS"/></translation>
-<translation id="1850504506766569011">Wifi ei ole käytössä.</translation>
+<translation id="1850504506766569011">Wi-Fi ei ole käytössä.</translation>
 <translation id="2872961005593481000">Sammuta</translation>
 <translation id="2966449113954629791">Olet saattanut käyttää tiedonsiirtosaldosi loppuun. Käy <ph name="NAME"/>-aktivointiportaalissa ostamassa lisää saldoa.</translation>
 <translation id="8132793192354020517">Yhteys muodostettu verkkoon <ph name="NAME"/></translation>
@@ -185,7 +185,7 @@
 <translation id="9044646465488564462">Yhteyden muodostaminen verkkoon epäonnistui: <ph name="DETAILS"/></translation>
 <translation id="7029814467594812963">Sulje käyttökerta</translation>
 <translation id="479989351350248267">haku</translation>
-<translation id="8454013096329229812">Wifi on käytössä.</translation>
+<translation id="8454013096329229812">Wi-Fi on käytössä.</translation>
 <translation id="4872237917498892622">Alt + haku tai Shift</translation>
 <translation id="2429753432712299108">Bluetooth-laite <ph name="DEVICE_NAME"/> pyytää lupaa laiteparin muodostamiseen. Ennen kuin hyväksyt pyynnön, varmista, että laitteella näkyy tämä avain: <ph name="PASSKEY"/></translation>
 <translation id="9201131092683066720">Akussa on virtaa <ph name="PERCENTAGE"/> %.</translation>
diff --git a/ash/system/chromeos/enterprise/tray_enterprise.cc b/ash/system/chromeos/enterprise/tray_enterprise.cc
index ecb54e4..d2d2d77 100644
--- a/ash/system/chromeos/enterprise/tray_enterprise.cc
+++ b/ash/system/chromeos/enterprise/tray_enterprise.cc
@@ -38,7 +38,7 @@
   // instead.
   if (status == ash::user::LOGGED_IN_PUBLIC)
     return NULL;
-  tray_view_ = new LabelTrayView(this, IDR_AURA_UBER_TRAY_ENTERPRISE_DARK);
+  tray_view_ = new LabelTrayView(this, IDR_AURA_UBER_TRAY_ENTERPRISE);
   UpdateEnterpriseMessage();
   return tray_view_;
 }
diff --git a/ash/system/chromeos/power/power_event_observer.cc b/ash/system/chromeos/power/power_event_observer.cc
index 5ede06b..776b004 100644
--- a/ash/system/chromeos/power/power_event_observer.cc
+++ b/ash/system/chromeos/power/power_event_observer.cc
@@ -54,7 +54,7 @@
   shell->display_configurator()->SuspendDisplays();
 }
 
-void PowerEventObserver::SystemResumed(const base::TimeDelta& sleep_duration) {
+void PowerEventObserver::SuspendDone(const base::TimeDelta& sleep_duration) {
   Shell::GetInstance()->display_configurator()->ResumeDisplays();
   Shell::GetInstance()->system_tray_notifier()->NotifyRefreshClock();
 }
diff --git a/ash/system/chromeos/power/power_event_observer.h b/ash/system/chromeos/power/power_event_observer.h
index 518959b..46b6eb9 100644
--- a/ash/system/chromeos/power/power_event_observer.h
+++ b/ash/system/chromeos/power/power_event_observer.h
@@ -26,7 +26,7 @@
   // chromeos::PowerManagerClient::Observer overrides:
   virtual void BrightnessChanged(int level, bool user_initiated) OVERRIDE;
   virtual void SuspendImminent() OVERRIDE;
-  virtual void SystemResumed(const base::TimeDelta& sleep_duration) OVERRIDE;
+  virtual void SuspendDone(const base::TimeDelta& sleep_duration) OVERRIDE;
 
   // chromeos::SessionManagerClient::Observer overrides.
   virtual void ScreenIsLocked() OVERRIDE;
diff --git a/ash/system/chromeos/power/power_event_observer_unittest.cc b/ash/system/chromeos/power/power_event_observer_unittest.cc
index 94dcded..30cd2e9 100644
--- a/ash/system/chromeos/power/power_event_observer_unittest.cc
+++ b/ash/system/chromeos/power/power_event_observer_unittest.cc
@@ -53,7 +53,7 @@
   EXPECT_EQ(0, client->GetNumPendingSuspendReadinessCallbacks());
 
   // If the system is already locked, no callback should be requested.
-  observer_->SystemResumed(base::TimeDelta());
+  observer_->SuspendDone(base::TimeDelta());
   observer_->ScreenIsUnlocked();
   observer_->ScreenIsLocked();
   observer_->SuspendImminent();
@@ -61,7 +61,7 @@
 
   // It also shouldn't request a callback if it isn't instructed to lock the
   // screen.
-  observer_->SystemResumed(base::TimeDelta());
+  observer_->SuspendDone(base::TimeDelta());
   SetShouldLockScreenBeforeSuspending(false);
   observer_->SuspendImminent();
   EXPECT_EQ(0, client->GetNumPendingSuspendReadinessCallbacks());
diff --git a/ash/system/chromeos/virtual_keyboard/virtual_keyboard_tray.cc b/ash/system/chromeos/virtual_keyboard/virtual_keyboard_tray.cc
index 9eb190b..2875d9e 100644
--- a/ash/system/chromeos/virtual_keyboard/virtual_keyboard_tray.cc
+++ b/ash/system/chromeos/virtual_keyboard/virtual_keyboard_tray.cc
@@ -99,7 +99,7 @@
 }
 
 bool VirtualKeyboardTray::PerformAction(const ui::Event& event) {
-  keyboard::KeyboardController::GetInstance()->ShowAndLockKeyboard();
+  keyboard::KeyboardController::GetInstance()->ShowKeyboard(true);
   return true;
 }
 
diff --git a/ash/system/tray/default_system_tray_delegate.cc b/ash/system/tray/default_system_tray_delegate.cc
index 1c1749d..2c20da7 100644
--- a/ash/system/tray/default_system_tray_delegate.cc
+++ b/ash/system/tray/default_system_tray_delegate.cc
@@ -59,10 +59,6 @@
   return user::LOGGED_IN_USER;
 }
 
-bool DefaultSystemTrayDelegate::IsOobeCompleted() const {
-  return true;
-}
-
 void DefaultSystemTrayDelegate::ChangeProfilePicture() {
 }
 
diff --git a/ash/system/tray/default_system_tray_delegate.h b/ash/system/tray/default_system_tray_delegate.h
index b53301f..0f0a63f 100644
--- a/ash/system/tray/default_system_tray_delegate.h
+++ b/ash/system/tray/default_system_tray_delegate.h
@@ -22,7 +22,6 @@
   virtual void Shutdown() OVERRIDE;
   virtual bool GetTrayVisibilityOnStartup() OVERRIDE;
   virtual user::LoginStatus GetUserLoginStatus() const OVERRIDE;
-  virtual bool IsOobeCompleted() const OVERRIDE;
   virtual void ChangeProfilePicture() OVERRIDE;
   virtual const std::string GetEnterpriseDomain() const OVERRIDE;
   virtual const base::string16 GetEnterpriseMessage() const OVERRIDE;
diff --git a/ash/system/tray/system_tray_delegate.h b/ash/system/tray/system_tray_delegate.h
index c492f1f..7e22f22 100644
--- a/ash/system/tray/system_tray_delegate.h
+++ b/ash/system/tray/system_tray_delegate.h
@@ -130,7 +130,6 @@
 
   // Gets information about the active user.
   virtual user::LoginStatus GetUserLoginStatus() const = 0;
-  virtual bool IsOobeCompleted() const = 0;
 
   // Shows UI for changing user's profile picture.
   virtual void ChangeProfilePicture() = 0;
diff --git a/ash/system/tray/system_tray_item.cc b/ash/system/tray/system_tray_item.cc
index 554c589..6eb03a1 100644
--- a/ash/system/tray/system_tray_item.cc
+++ b/ash/system/tray/system_tray_item.cc
@@ -58,9 +58,6 @@
 }
 
 void SystemTrayItem::PopupDetailedView(int for_seconds, bool activate) {
-  // Never show a detailed view during OOBE, e.g. from a notification.
-  if (!Shell::GetInstance()->system_tray_delegate()->IsOobeCompleted())
-    return;
   system_tray()->ShowDetailedView(
       this, for_seconds, activate, BUBBLE_CREATE_NEW);
 }
diff --git a/ash/test/ash_test_helper.cc b/ash/test/ash_test_helper.cc
index 75034c5..f9e812c 100644
--- a/ash/test/ash_test_helper.cc
+++ b/ash/test/ash_test_helper.cc
@@ -154,7 +154,7 @@
 // static
 bool AshTestHelper::SupportsMultipleDisplays() {
 #if defined(OS_WIN)
-  return base::win::GetVersion() < base::win::VERSION_WIN8;
+  return false;
 #else
   return true;
 #endif
@@ -163,7 +163,7 @@
 // static
 bool AshTestHelper::SupportsHostWindowResize() {
 #if defined(OS_WIN)
-  return base::win::GetVersion() < base::win::VERSION_WIN8;
+  return false;
 #else
   return true;
 #endif
diff --git a/ash/test/cursor_manager_test_api.cc b/ash/test/cursor_manager_test_api.cc
index 22aa261..4ff7cf7 100644
--- a/ash/test/cursor_manager_test_api.cc
+++ b/ash/test/cursor_manager_test_api.cc
@@ -31,9 +31,16 @@
   return cursor_manager_->GetCursor();
 }
 
-gfx::Display CursorManagerTestApi::GetDisplay() const {
+gfx::Display::Rotation
+CursorManagerTestApi::GetCurrentCursorRotation() const {
   return ShellTestApi(Shell::GetInstance()).ash_native_cursor_manager()->
-      image_cursors_->GetDisplay();
+      image_cursors_->GetRotation();
+}
+
+float
+CursorManagerTestApi::GetCurrentCursorScale() const {
+  return ShellTestApi(Shell::GetInstance()).ash_native_cursor_manager()->
+      image_cursors_->GetScale();
 }
 
 }  // namespace test
diff --git a/ash/test/cursor_manager_test_api.h b/ash/test/cursor_manager_test_api.h
index 1b9c6b8..fce98ca 100644
--- a/ash/test/cursor_manager_test_api.h
+++ b/ash/test/cursor_manager_test_api.h
@@ -7,12 +7,9 @@
 
 #include "base/basictypes.h"
 #include "ui/base/cursor/cursor.h"
+#include "ui/gfx/display.h"
 #include "ui/gfx/native_widget_types.h"
 
-namespace gfx {
-class Display;
-}
-
 namespace wm {
 class CursorManager;
 }
@@ -28,7 +25,8 @@
 
   ui::CursorSetType GetCurrentCursorSet() const;
   gfx::NativeCursor GetCurrentCursor() const;
-  gfx::Display GetDisplay() const;
+  gfx::Display::Rotation GetCurrentCursorRotation() const;
+  float GetCurrentCursorScale() const;
 
  private:
   ::wm::CursorManager* cursor_manager_;
diff --git a/ash/wm/OWNERS b/ash/wm/OWNERS
index ee00745..6310ae0 100644
--- a/ash/wm/OWNERS
+++ b/ash/wm/OWNERS
@@ -1,2 +1,3 @@
 pkotwicz@chromium.org
 varkha@chromium.org
+flackr@chromium.org
diff --git a/ash/wm/app_list_controller.cc b/ash/wm/app_list_controller.cc
index aaf7012..d26ff37 100644
--- a/ash/wm/app_list_controller.cc
+++ b/ash/wm/app_list_controller.cc
@@ -296,7 +296,7 @@
     }
   }
 
-  aura::Window* window = view_->GetWidget()->GetNativeView();
+  aura::Window* window = view_->GetWidget()->GetNativeView()->parent();
   if (!window->Contains(target))
     SetVisible(false, window);
 }
diff --git a/ash/wm/ash_native_cursor_manager.cc b/ash/wm/ash_native_cursor_manager.cc
index 98078ac..e78eb94 100644
--- a/ash/wm/ash_native_cursor_manager.cc
+++ b/ash/wm/ash_native_cursor_manager.cc
@@ -95,8 +95,7 @@
       new_cursor.SetPlatformCursor(invisible_cursor.platform());
     }
   }
-  new_cursor.set_device_scale_factor(
-      image_cursors_->GetDisplay().device_scale_factor());
+  new_cursor.set_device_scale_factor(image_cursors_->GetScale());
 
   delegate->CommitCursor(new_cursor);
 
diff --git a/ash/wm/ash_native_cursor_manager_interactive_uitest.cc b/ash/wm/ash_native_cursor_manager_interactive_uitest.cc
index 5eee024..83df158 100644
--- a/ash/wm/ash_native_cursor_manager_interactive_uitest.cc
+++ b/ash/wm/ash_native_cursor_manager_interactive_uitest.cc
@@ -102,10 +102,10 @@
   display_manager->OnNativeDisplaysChanged(display_info_list);
 
   MoveMouseSync(Shell::GetAllRootWindows()[0], 10, 10);
-  EXPECT_EQ(1.0f, test_api.GetDisplay().device_scale_factor());
+  EXPECT_EQ(1.0f, test_api.GetCurrentCursor().device_scale_factor());
 
   MoveMouseSync(Shell::GetAllRootWindows()[0], 600, 10);
-  EXPECT_EQ(2.0f, test_api.GetDisplay().device_scale_factor());
+  EXPECT_EQ(2.0f, test_api.GetCurrentCursor().device_scale_factor());
 }
 
 }  // namespace ash
diff --git a/ash/wm/ash_native_cursor_manager_unittest.cc b/ash/wm/ash_native_cursor_manager_unittest.cc
index 812601f..5713fe3 100644
--- a/ash/wm/ash_native_cursor_manager_unittest.cc
+++ b/ash/wm/ash_native_cursor_manager_unittest.cc
@@ -4,6 +4,8 @@
 
 #include "ash/wm/ash_native_cursor_manager.h"
 
+#include "ash/display/display_info.h"
+#include "ash/display/display_manager.h"
 #include "ash/shell.h"
 #include "ash/test/ash_test_base.h"
 #include "ash/test/cursor_manager_test_api.h"
@@ -54,18 +56,16 @@
 TEST_F(AshNativeCursorManagerTest, LockCursor) {
   ::wm::CursorManager* cursor_manager = Shell::GetInstance()->cursor_manager();
   CursorManagerTestApi test_api(cursor_manager);
-  gfx::Display display(0);
+
 #if defined(OS_WIN)
   ui::CursorLoaderWin::SetCursorResourceModule(L"ash_unittests.exe");
 #endif
   cursor_manager->SetCursor(ui::kCursorCopy);
   EXPECT_EQ(ui::kCursorCopy, test_api.GetCurrentCursor().native_type());
-  display.set_device_scale_factor(2.0f);
-  display.set_rotation(gfx::Display::ROTATE_90);
-  cursor_manager->SetDisplay(display);
-  EXPECT_EQ(2.0f, test_api.GetDisplay().device_scale_factor());
+  UpdateDisplay("800x800*2/r");
+  EXPECT_EQ(2.0f, test_api.GetCurrentCursor().device_scale_factor());
   EXPECT_EQ(ui::CURSOR_SET_NORMAL, test_api.GetCurrentCursorSet());
-  EXPECT_EQ(gfx::Display::ROTATE_90, test_api.GetDisplay().rotation());
+  EXPECT_EQ(gfx::Display::ROTATE_90, test_api.GetCurrentCursorRotation());
   EXPECT_TRUE(test_api.GetCurrentCursor().platform());
 
   cursor_manager->LockCursor();
@@ -85,18 +85,16 @@
   EXPECT_EQ(ui::kCursorCopy, test_api.GetCurrentCursor().native_type());
 
   // Device scale factor and rotation do change even while cursor is locked.
-  display.set_device_scale_factor(1.0f);
-  display.set_rotation(gfx::Display::ROTATE_180);
-  cursor_manager->SetDisplay(display);
-  EXPECT_EQ(1.0f, test_api.GetDisplay().device_scale_factor());
-  EXPECT_EQ(gfx::Display::ROTATE_180, test_api.GetDisplay().rotation());
+  UpdateDisplay("800x800/u");
+  EXPECT_EQ(1.0f, test_api.GetCurrentCursor().device_scale_factor());
+  EXPECT_EQ(gfx::Display::ROTATE_180, test_api.GetCurrentCursorRotation());
 
   cursor_manager->UnlockCursor();
   EXPECT_FALSE(cursor_manager->IsCursorLocked());
 
   // Cursor type changes to the one specified while cursor is locked.
   EXPECT_EQ(ui::kCursorPointer, test_api.GetCurrentCursor().native_type());
-  EXPECT_EQ(1.0f, test_api.GetDisplay().device_scale_factor());
+  EXPECT_EQ(1.0f, test_api.GetCurrentCursor().device_scale_factor());
   EXPECT_TRUE(test_api.GetCurrentCursor().platform());
 }
 
@@ -133,18 +131,47 @@
 TEST_F(AshNativeCursorManagerTest, SetDeviceScaleFactorAndRotation) {
   ::wm::CursorManager* cursor_manager = Shell::GetInstance()->cursor_manager();
   CursorManagerTestApi test_api(cursor_manager);
+  UpdateDisplay("800x100*2");
+  EXPECT_EQ(2.0f, test_api.GetCurrentCursor().device_scale_factor());
+  EXPECT_EQ(gfx::Display::ROTATE_0, test_api.GetCurrentCursorRotation());
 
-  gfx::Display display(0);
-  display.set_device_scale_factor(2.0f);
-  cursor_manager->SetDisplay(display);
-  EXPECT_EQ(2.0f, test_api.GetDisplay().device_scale_factor());
-  EXPECT_EQ(gfx::Display::ROTATE_0, test_api.GetDisplay().rotation());
+  UpdateDisplay("800x100/l");
+  EXPECT_EQ(1.0f, test_api.GetCurrentCursor().device_scale_factor());
+  EXPECT_EQ(gfx::Display::ROTATE_270, test_api.GetCurrentCursorRotation());
+}
 
-  display.set_device_scale_factor(1.0f);
-  display.set_rotation(gfx::Display::ROTATE_270);
-  cursor_manager->SetDisplay(display);
-  EXPECT_EQ(1.0f, test_api.GetDisplay().device_scale_factor());
-  EXPECT_EQ(gfx::Display::ROTATE_270, test_api.GetDisplay().rotation());
+TEST_F(AshNativeCursorManagerTest, UIScaleShouldNotChangeCursor) {
+  int64 display_id = Shell::GetScreen()->GetPrimaryDisplay().id();
+  gfx::Display::SetInternalDisplayId(display_id);
+
+  ::wm::CursorManager* cursor_manager = Shell::GetInstance()->cursor_manager();
+  CursorManagerTestApi test_api(cursor_manager);
+  DisplayManager* display_manager = Shell::GetInstance()->display_manager();
+
+  DisplayInfo::SetAllowUpgradeToHighDPI(false);
+  display_manager->SetDisplayUIScale(display_id, 0.5f);
+  EXPECT_EQ(1.0f,
+            Shell::GetScreen()->GetPrimaryDisplay().device_scale_factor());
+  EXPECT_EQ(1.0f, test_api.GetCurrentCursor().device_scale_factor());
+
+  display_manager->SetDisplayUIScale(display_id, 1.0f);
+
+  DisplayInfo::SetAllowUpgradeToHighDPI(true);
+  // 1x display should keep using 1x cursor even if the DSF is upgraded to 2x.
+  display_manager->SetDisplayUIScale(display_id, 0.5f);
+  EXPECT_EQ(2.0f,
+            Shell::GetScreen()->GetPrimaryDisplay().device_scale_factor());
+  EXPECT_EQ(1.0f, test_api.GetCurrentCursor().device_scale_factor());
+
+  // 2x display should keep using 2x cursor regardless of the UI scale.
+  UpdateDisplay("800x800*2");
+  EXPECT_EQ(2.0f,
+            Shell::GetScreen()->GetPrimaryDisplay().device_scale_factor());
+  EXPECT_EQ(2.0f, test_api.GetCurrentCursor().device_scale_factor());
+  display_manager->SetDisplayUIScale(display_id, 2.0f);
+  EXPECT_EQ(1.0f,
+            Shell::GetScreen()->GetPrimaryDisplay().device_scale_factor());
+  EXPECT_EQ(2.0f, test_api.GetCurrentCursor().device_scale_factor());
 }
 
 TEST_F(AshNativeCursorManagerTest, DisabledQueryMouseLocation) {
diff --git a/ash/wm/default_state.cc b/ash/wm/default_state.cc
index b5aec38..de4c60c 100644
--- a/ash/wm/default_state.cc
+++ b/ash/wm/default_state.cc
@@ -477,8 +477,9 @@
   window_state->UpdateWindowShowStateFromStateType();
   window_state->NotifyPreStateTypeChange(previous_state_type);
 
-  if (state_type_ == wm::WINDOW_STATE_TYPE_NORMAL ||
-      state_type_ == wm::WINDOW_STATE_TYPE_DEFAULT) {
+  if ((state_type_ == wm::WINDOW_STATE_TYPE_NORMAL ||
+       state_type_ == wm::WINDOW_STATE_TYPE_DEFAULT) &&
+      !stored_bounds_.IsEmpty()) {
     // Use the restore mechanism to set the bounds for
     // the window in normal state. This also covers unminimize case.
     window_state->SetRestoreBoundsInParent(stored_bounds_);
diff --git a/ash/wm/drag_window_resizer_unittest.cc b/ash/wm/drag_window_resizer_unittest.cc
index dbb4da0..369a285 100644
--- a/ash/wm/drag_window_resizer_unittest.cc
+++ b/ash/wm/drag_window_resizer_unittest.cc
@@ -494,13 +494,13 @@
     // Grab (0, 0) of the window.
     scoped_ptr<WindowResizer> resizer(CreateDragWindowResizer(
         window_.get(), gfx::Point(), HTCAPTION));
-    EXPECT_EQ(1.0f, cursor_test_api.GetDisplay().device_scale_factor());
+    EXPECT_EQ(1.0f, cursor_test_api.GetCurrentCursor().device_scale_factor());
     ASSERT_TRUE(resizer.get());
     resizer->Drag(CalculateDragPoint(*resizer, 399, 200), 0);
     WarpMouseCursorIfNecessary(root_windows[0], gfx::Point(399, 200));
-    EXPECT_EQ(2.0f, cursor_test_api.GetDisplay().device_scale_factor());
+    EXPECT_EQ(2.0f, cursor_test_api.GetCurrentCursor().device_scale_factor());
     resizer->CompleteDrag();
-    EXPECT_EQ(2.0f, cursor_test_api.GetDisplay().device_scale_factor());
+    EXPECT_EQ(2.0f, cursor_test_api.GetCurrentCursor().device_scale_factor());
   }
 
   // Move window from the root window with 2.0 device scale factor to the root
@@ -518,13 +518,13 @@
     // Grab (0, 0) of the window.
     scoped_ptr<WindowResizer> resizer(CreateDragWindowResizer(
         window_.get(), gfx::Point(), HTCAPTION));
-    EXPECT_EQ(2.0f, cursor_test_api.GetDisplay().device_scale_factor());
+    EXPECT_EQ(2.0f, cursor_test_api.GetCurrentCursor().device_scale_factor());
     ASSERT_TRUE(resizer.get());
     resizer->Drag(CalculateDragPoint(*resizer, -200, 200), 0);
     WarpMouseCursorIfNecessary(root_windows[1], gfx::Point(400, 200));
-    EXPECT_EQ(1.0f, cursor_test_api.GetDisplay().device_scale_factor());
+    EXPECT_EQ(1.0f, cursor_test_api.GetCurrentCursor().device_scale_factor());
     resizer->CompleteDrag();
-    EXPECT_EQ(1.0f, cursor_test_api.GetDisplay().device_scale_factor());
+    EXPECT_EQ(1.0f, cursor_test_api.GetCurrentCursor().device_scale_factor());
   }
 }
 
diff --git a/ash/wm/image_cursors.cc b/ash/wm/image_cursors.cc
index e63bece..2a41375 100644
--- a/ash/wm/image_cursors.cc
+++ b/ash/wm/image_cursors.cc
@@ -6,6 +6,9 @@
 
 #include <float.h>
 
+#include "ash/display/display_info.h"
+#include "ash/display/display_manager.h"
+#include "ash/shell.h"
 #include "base/logging.h"
 #include "base/strings/string16.h"
 #include "ui/base/cursor/cursor.h"
@@ -56,41 +59,54 @@
   ui::kCursorProgress
 };
 
-ImageCursors::ImageCursors() : scale_(1.f), cursor_set_(ui::CURSOR_SET_NORMAL) {
+ImageCursors::ImageCursors() : cursor_set_(ui::CURSOR_SET_NORMAL) {
 }
 
 ImageCursors::~ImageCursors() {
 }
 
-gfx::Display ImageCursors::GetDisplay() const {
+float ImageCursors::GetScale() const {
   if (!cursor_loader_) {
     NOTREACHED();
     // Returning default on release build as it's not serious enough to crash
     // even if this ever happens.
-    return gfx::Display();
+    return 1.0f;
   }
-  return cursor_loader_->display();
+  return cursor_loader_->scale();
+}
+
+gfx::Display::Rotation ImageCursors::GetRotation() const {
+  if (!cursor_loader_) {
+    NOTREACHED();
+    // Returning default on release build as it's not serious enough to crash
+    // even if this ever happens.
+    return gfx::Display::ROTATE_0;
+  }
+  return cursor_loader_->rotation();
 }
 
 bool ImageCursors::SetDisplay(const gfx::Display& display) {
-  float device_scale_factor = display.device_scale_factor();
+  DCHECK(display.is_valid());
+  // Use the platform's device scale factor instead of display's
+  // that might have been adjusted for UI scale.
+  float scale_factor = Shell::GetInstance()->display_manager()->
+      GetDisplayInfo(display.id()).device_scale_factor();
+
   if (!cursor_loader_) {
     cursor_loader_.reset(ui::CursorLoader::Create());
-    cursor_loader_->set_scale(scale_);
-  } else if (cursor_loader_->display().rotation() == display.rotation() &&
-             cursor_loader_->display().device_scale_factor() ==
-             device_scale_factor) {
+  } else if (cursor_loader_->rotation() == display.rotation() &&
+             cursor_loader_->scale() == scale_factor) {
     return false;
   }
 
-  cursor_loader_->set_display(display);
+  cursor_loader_->set_rotation(display.rotation());
+  cursor_loader_->set_scale(scale_factor);
   ReloadCursors();
   return true;
 }
 
 void ImageCursors::ReloadCursors() {
-  const gfx::Display& display = cursor_loader_->display();
-  float device_scale_factor = display.device_scale_factor();
+  float device_scale_factor = cursor_loader_->scale();
 
   cursor_loader_->UnloadAll();
 
@@ -121,20 +137,6 @@
   }
 }
 
-void ImageCursors::SetScale(float scale) {
-  if (scale < FLT_EPSILON) {
-    NOTREACHED() << "Scale must be bigger than 0.";
-    scale = 1.0f;
-  }
-
-  scale_ = scale;
-
-  if (cursor_loader_.get()) {
-    cursor_loader_->set_scale(scale);
-    ReloadCursors();
-  }
-}
-
 void ImageCursors::SetCursorSet(ui::CursorSetType cursor_set) {
   if (cursor_set_ == cursor_set)
     return;
diff --git a/ash/wm/image_cursors.h b/ash/wm/image_cursors.h
index 55bc34c..1a75f40 100644
--- a/ash/wm/image_cursors.h
+++ b/ash/wm/image_cursors.h
@@ -9,12 +9,9 @@
 #include "base/memory/scoped_ptr.h"
 #include "base/strings/string16.h"
 #include "ui/base/cursor/cursor.h"
+#include "ui/gfx/display.h"
 #include "ui/gfx/native_widget_types.h"
 
-namespace gfx {
-class Display;
-}
-
 namespace ui {
 class CursorLoader;
 }
@@ -28,9 +25,9 @@
   ImageCursors();
   ~ImageCursors();
 
-  // Returns the display the cursors are loaded for. The display must
-  // be set by SetDisplay before using this.
-  gfx::Display GetDisplay() const;
+  // Returns the scale and rotation of the currently loaded cursor.
+  float GetScale() const;
+  gfx::Display::Rotation GetRotation() const;
 
   // Sets the display the cursors are loaded for. The device scale factor
   // determines the size of the image to load, and the rotation of the display
@@ -38,9 +35,6 @@
   // Returns true if the cursor image is reloaded.
   bool SetDisplay(const gfx::Display& display);
 
-  // Sets the scale of the mouse cursor icon.
-  void SetScale(float scale);
-
   // Sets the type of the mouse cursor icon.
   void SetCursorSet(ui::CursorSetType cursor_set);
 
@@ -52,7 +46,6 @@
   void ReloadCursors();
 
   scoped_ptr<ui::CursorLoader> cursor_loader_;
-  float scale_;
   ui::CursorSetType cursor_set_;
 
   DISALLOW_COPY_AND_ASSIGN(ImageCursors);
diff --git a/ash/wm/maximize_mode/maximize_mode_controller.cc b/ash/wm/maximize_mode/maximize_mode_controller.cc
index ac018bb..0b9ee53 100644
--- a/ash/wm/maximize_mode/maximize_mode_controller.cc
+++ b/ash/wm/maximize_mode/maximize_mode_controller.cc
@@ -31,9 +31,9 @@
 // the accelerometers for the base and lid approach the same values (i.e.
 // gravity pointing in the direction of the hinge). When this happens we cannot
 // compute the hinge angle reliably and must turn ignore accelerometer readings.
-// This is the angle from vertical under which we will not compute a hinge
-// angle.
-const float kHingeAxisAlignedThreshold = 15.0f;
+// This is the minimum acceleration perpendicular to the hinge under which to
+// detect hinge angle.
+const float kHingeAngleDetectionThreshold = 0.25f;
 
 // The maximum deviation from the acceleration expected due to gravity under
 // which to detect hinge angle and screen rotation.
@@ -115,18 +115,24 @@
   static const gfx::Vector3dF hinge_vector(0.0f, 1.0f, 0.0f);
   bool maximize_mode_engaged =
       Shell::GetInstance()->IsMaximizeModeWindowManagerEnabled();
+  // Ignore the component of acceleration parallel to the hinge for the purposes
+  // of hinge angle calculation.
+  gfx::Vector3dF base_flattened(base);
+  gfx::Vector3dF lid_flattened(lid);
+  base_flattened.set_y(0.0f);
+  lid_flattened.set_y(0.0f);
 
   // As the hinge approaches a vertical angle, the base and lid accelerometers
   // approach the same values making any angle calculations highly inaccurate.
   // Bail out early when it is too close.
-  float hinge_angle = AngleBetweenVectorsInDegrees(base, hinge_vector);
-  if (hinge_angle < kHingeAxisAlignedThreshold ||
-      hinge_angle > 180.0f - kHingeAxisAlignedThreshold) {
+  if (base_flattened.Length() < kHingeAngleDetectionThreshold ||
+      lid_flattened.Length() < kHingeAngleDetectionThreshold) {
     return;
   }
 
   // Compute the angle between the base and the lid.
-  float angle = ClockwiseAngleBetweenVectorsInDegrees(base, lid, hinge_vector);
+  float angle = ClockwiseAngleBetweenVectorsInDegrees(base_flattened,
+      lid_flattened, hinge_vector);
 
   // Toggle maximize mode on or off when corresponding thresholds are passed.
   // TODO(flackr): Make MaximizeModeController own the MaximizeModeWindowManager
diff --git a/ash/wm/maximize_mode/maximize_mode_window_manager_unittest.cc b/ash/wm/maximize_mode/maximize_mode_window_manager_unittest.cc
index 9f2c5d6..2023b3c 100644
--- a/ash/wm/maximize_mode/maximize_mode_window_manager_unittest.cc
+++ b/ash/wm/maximize_mode/maximize_mode_window_manager_unittest.cc
@@ -301,6 +301,31 @@
   EXPECT_EQ(rect.ToString(), w8->bounds().ToString());
 }
 
+// Test that a window which got created while the maximize mode window manager
+// is active gets restored to a usable (non tiny) size upon switching back.
+TEST_F(MaximizeModeWindowManagerTest,
+       CreateWindowInMaximizedModeRestoresToUsefulSize) {
+  ash::MaximizeModeWindowManager* manager = CreateMaximizeModeWindowManager();
+  ASSERT_TRUE(manager);
+  EXPECT_EQ(0, manager->GetNumberOfManagedWindows());
+
+  // We pass in an empty rectangle to simulate a window creation with no
+  // particular size.
+  gfx::Rect empty_rect(0, 0, 0, 0);
+  scoped_ptr<aura::Window> window(CreateWindow(ui::wm::WINDOW_TYPE_NORMAL,
+                                               empty_rect));
+  EXPECT_TRUE(wm::GetWindowState(window.get())->IsMaximized());
+  EXPECT_NE(empty_rect.ToString(), window->bounds().ToString());
+  gfx::Rect maximized_size = window->bounds();
+
+  // Destroy the maximize mode and check that the resulting size of the window
+  // is remaining as it is (but not maximized).
+  DestroyMaximizeModeWindowManager();
+
+  EXPECT_FALSE(wm::GetWindowState(window.get())->IsMaximized());
+  EXPECT_EQ(maximized_size.ToString(), window->bounds().ToString());
+}
+
 // Test that non-maximizable windows get properly handled when created in
 // maximized mode.
 TEST_F(MaximizeModeWindowManagerTest,
diff --git a/ash/wm/maximize_mode/workspace_backdrop_delegate.cc b/ash/wm/maximize_mode/workspace_backdrop_delegate.cc
index 0b7fc01..4e8a259 100644
--- a/ash/wm/maximize_mode/workspace_backdrop_delegate.cc
+++ b/ash/wm/maximize_mode/workspace_backdrop_delegate.cc
@@ -37,8 +37,15 @@
   // activateable.
   params.can_activate = false;
   background_->Init(params);
+  // Do not use the animation system. We don't want the bounds animation and
+  // opacity needs to get set to |kBackdropOpacity|.
+  ::wm::SetWindowVisibilityAnimationTransition(
+      background_->GetNativeView(),
+      ::wm::ANIMATE_NONE);
   background_->GetNativeView()->SetName("WorkspaceBackdropDelegate");
   background_->GetNativeView()->layer()->SetColor(SK_ColorBLACK);
+  // Make sure that the layer covers visibly everything - including the shelf.
+  background_->GetNativeView()->layer()->SetBounds(params.bounds);
   Show();
   RestackBackdrop();
   container_->AddObserver(this);
diff --git a/ash/wm/overview/OWNERS b/ash/wm/overview/OWNERS
deleted file mode 100644
index 343711b..0000000
--- a/ash/wm/overview/OWNERS
+++ /dev/null
@@ -1 +0,0 @@
-flackr@chromium.org
diff --git a/ash/wm/overview/window_overview.cc b/ash/wm/overview/window_overview.cc
index 8c7af63..fd618b3 100644
--- a/ash/wm/overview/window_overview.cc
+++ b/ash/wm/overview/window_overview.cc
@@ -264,7 +264,7 @@
   if (!target)
     return;
 
-  event->StopPropagation();
+  event->SetHandled();
   if (event->type() != ui::ET_MOUSE_RELEASED)
     return;
 
diff --git a/ash/wm/overview/window_selector_controller.cc b/ash/wm/overview/window_selector_controller.cc
index 71b97bf..b750e37 100644
--- a/ash/wm/overview/window_selector_controller.cc
+++ b/ash/wm/overview/window_selector_controller.cc
@@ -8,6 +8,7 @@
 #include "ash/root_window_controller.h"
 #include "ash/session_state_delegate.h"
 #include "ash/shell.h"
+#include "ash/system/tray/system_tray_delegate.h"
 #include "ash/wm/mru_window_tracker.h"
 #include "ash/wm/overview/window_selector.h"
 #include "ash/wm/window_state.h"
@@ -26,17 +27,23 @@
 // static
 bool WindowSelectorController::CanSelect() {
   // Don't allow a window overview if the screen is locked or a modal dialog is
-  // open.
+  // open or running in kiosk app session.
   return Shell::GetInstance()->session_state_delegate()->
              IsActiveUserSessionStarted() &&
          !Shell::GetInstance()->session_state_delegate()->IsScreenLocked() &&
-         !Shell::GetInstance()->IsSystemModalWindowOpen();
+         !Shell::GetInstance()->IsSystemModalWindowOpen() &&
+         Shell::GetInstance()->system_tray_delegate()->GetUserLoginStatus() !=
+             user::LOGGED_IN_KIOSK_APP;
 }
 
 void WindowSelectorController::ToggleOverview() {
   if (IsSelecting()) {
     OnSelectionCanceled();
   } else {
+    // Don't start overview if window selection is not allowed.
+    if (!CanSelect())
+      return;
+
     std::vector<aura::Window*> windows = ash::Shell::GetInstance()->
         mru_window_tracker()->BuildMruWindowList();
     // Don't enter overview mode with no windows.
diff --git a/ash/wm/overview/window_selector_item.cc b/ash/wm/overview/window_selector_item.cc
index a2c25b6..9866185 100644
--- a/ash/wm/overview/window_selector_item.cc
+++ b/ash/wm/overview/window_selector_item.cc
@@ -3,11 +3,75 @@
 // found in the LICENSE file.
 
 #include "ash/wm/overview/window_selector_item.h"
+
+#include "ash/screen_util.h"
+#include "ash/shell.h"
+#include "ash/shell_window_ids.h"
+#include "ash/wm/overview/scoped_transform_overview_window.h"
 #include "base/auto_reset.h"
+#include "third_party/skia/include/core/SkColor.h"
 #include "ui/aura/window.h"
+#include "ui/base/resource/resource_bundle.h"
+#include "ui/compositor/scoped_layer_animation_settings.h"
+#include "ui/views/controls/label.h"
+#include "ui/views/layout/box_layout.h"
+#include "ui/views/widget/widget.h"
 
 namespace ash {
 
+// Foreground label color.
+static const SkColor kLabelColor = SK_ColorWHITE;
+
+// Background label color.
+static const SkColor kLabelBackground = SK_ColorTRANSPARENT;
+
+// Label shadow color.
+static const SkColor kLabelShadow = 0xB0000000;
+
+// Vertical padding for the label, both over and beneath it.
+static const int kVerticalLabelPadding = 20;
+
+// Solid shadow length from the label
+static const int kVerticalShadowOffset = 1;
+
+// Amount of blur applied to the label shadow
+static const int kShadowBlur = 10;
+
+views::Widget* CreateWindowLabel(aura::Window* root_window,
+                                 const base::string16 title) {
+  views::Widget* widget = new views::Widget;
+  views::Widget::InitParams params;
+  params.type = views::Widget::InitParams::TYPE_POPUP;
+  params.can_activate = false;
+  params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
+  params.opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW;
+  params.parent =
+      Shell::GetContainer(root_window, ash::kShellWindowId_OverlayContainer);
+  params.accept_events = false;
+  params.visible_on_all_workspaces = true;
+  widget->set_focus_on_creation(false);
+  widget->Init(params);
+  views::Label* label = new views::Label;
+  label->SetEnabledColor(kLabelColor);
+  label->SetBackgroundColor(kLabelBackground);
+  label->SetShadowColors(kLabelShadow, kLabelShadow);
+  label->SetShadowOffset(0, kVerticalShadowOffset);
+  label->set_shadow_blur(kShadowBlur);
+  ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance();
+  label->SetFontList(bundle.GetFontList(ui::ResourceBundle::BoldFont));
+  label->SetText(title);
+  views::BoxLayout* layout = new views::BoxLayout(views::BoxLayout::kVertical,
+                                                  0,
+                                                  kVerticalLabelPadding,
+                                                  0);
+  label->SetLayoutManager(layout);
+  widget->SetContentsView(label);
+  widget->Show();
+  return widget;
+}
+
+const int WindowSelectorItem::kFadeInMilliseconds = 80;
+
 WindowSelectorItem::WindowSelectorItem()
     : root_window_(NULL),
       in_bounds_update_(false) {
@@ -24,6 +88,8 @@
   root_window_ = root_window;
   target_bounds_ = target_bounds;
   SetItemBounds(root_window, target_bounds, true);
+  // TODO(nsatragno): Handle window title updates.
+  UpdateWindowLabels(target_bounds, root_window);
 }
 
 void WindowSelectorItem::RecomputeWindowTransforms() {
@@ -34,4 +100,56 @@
   SetItemBounds(root_window_, target_bounds_, false);
 }
 
+void WindowSelectorItem::UpdateWindowLabels(const gfx::Rect& window_bounds,
+                                            aura::Window* root_window) {
+  gfx::Rect converted_bounds = ScreenUtil::ConvertRectFromScreen(root_window,
+                                                                 window_bounds);
+  gfx::Rect label_bounds(converted_bounds.x(),
+                         converted_bounds.bottom(),
+                         converted_bounds.width(),
+                         0);
+
+  // If the root window has changed, force the window label to be recreated
+  // and faded in on the new root window.
+  if (window_label_ &&
+      window_label_->GetNativeWindow()->GetRootWindow() != root_window) {
+    window_label_.reset();
+  }
+
+  if (!window_label_) {
+    window_label_.reset(CreateWindowLabel(root_window,
+                                          SelectionWindow()->title()));
+    label_bounds.set_height(window_label_->
+                            GetContentsView()->GetPreferredSize().height());
+    window_label_->GetNativeWindow()->SetBounds(label_bounds);
+    ui::Layer* layer = window_label_->GetNativeWindow()->layer();
+
+    layer->SetOpacity(0);
+    layer->GetAnimator()->StopAnimating();
+
+    layer->GetAnimator()->SchedulePauseForProperties(
+        base::TimeDelta::FromMilliseconds(
+            ScopedTransformOverviewWindow::kTransitionMilliseconds),
+        ui::LayerAnimationElement::OPACITY);
+
+    ui::ScopedLayerAnimationSettings settings(layer->GetAnimator());
+    settings.SetPreemptionStrategy(
+        ui::LayerAnimator::REPLACE_QUEUED_ANIMATIONS);
+    settings.SetTransitionDuration(base::TimeDelta::FromMilliseconds(
+        kFadeInMilliseconds));
+    layer->SetOpacity(1);
+  } else {
+    ui::ScopedLayerAnimationSettings settings(
+        window_label_->GetNativeWindow()->layer()->GetAnimator());
+    settings.SetPreemptionStrategy(
+        ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET);
+    settings.SetTransitionDuration(base::TimeDelta::FromMilliseconds(
+        ScopedTransformOverviewWindow::kTransitionMilliseconds));
+    label_bounds.set_height(window_label_->
+                            GetContentsView()->GetPreferredSize().height());
+    window_label_->GetNativeWindow()->SetBounds(label_bounds);
+  }
+
+}
+
 }  // namespace ash
diff --git a/ash/wm/overview/window_selector_item.h b/ash/wm/overview/window_selector_item.h
index eedf3e1..0c69dda 100644
--- a/ash/wm/overview/window_selector_item.h
+++ b/ash/wm/overview/window_selector_item.h
@@ -6,12 +6,18 @@
 #define ASH_WM_OVERVIEW_WINDOW_SELECTOR_ITEM_H_
 
 #include "base/compiler_specific.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/strings/string16.h"
 #include "ui/gfx/rect.h"
 
 namespace aura {
 class Window;
 }
 
+namespace views {
+class Widget;
+}
+
 namespace ash {
 
 // This class represents an item in overview mode. An item can have one or more
@@ -22,6 +28,10 @@
   WindowSelectorItem();
   virtual ~WindowSelectorItem();
 
+  // The time for the close buttons and labels to fade in when initially shown
+  // on entering overview mode.
+  static const int kFadeInMilliseconds;
+
   // Returns the root window on which this item is shown.
   virtual aura::Window* GetRootWindow() = 0;
 
@@ -74,7 +84,13 @@
   // Sets the bounds used by the selector item's windows.
   void set_bounds(const gfx::Rect& bounds) { bounds_ = bounds; }
 
+  // Creates a label to display under the window selector item.
+  void UpdateWindowLabels(const gfx::Rect& target_bounds,
+                          aura::Window* root_window);
+
  private:
+  friend class WindowSelectorTest;
+
   // The root window this item is being displayed on.
   aura::Window* root_window_;
 
@@ -90,6 +106,9 @@
   // a window layer for display on another monitor.
   bool in_bounds_update_;
 
+  // Label under the window displaying its active tab name.
+  scoped_ptr<views::Widget> window_label_;
+
   DISALLOW_COPY_AND_ASSIGN(WindowSelectorItem);
 };
 
diff --git a/ash/wm/overview/window_selector_unittest.cc b/ash/wm/overview/window_selector_unittest.cc
index 20184aa..ce93b69 100644
--- a/ash/wm/overview/window_selector_unittest.cc
+++ b/ash/wm/overview/window_selector_unittest.cc
@@ -8,6 +8,7 @@
 #include "ash/shelf/shelf.h"
 #include "ash/shelf/shelf_widget.h"
 #include "ash/shell.h"
+#include "ash/shell_window_ids.h"
 #include "ash/test/ash_test_base.h"
 #include "ash/test/shelf_test_api.h"
 #include "ash/test/shelf_view_test_api.h"
@@ -16,6 +17,7 @@
 #include "ash/wm/mru_window_tracker.h"
 #include "ash/wm/overview/window_selector.h"
 #include "ash/wm/overview/window_selector_controller.h"
+#include "ash/wm/overview/window_selector_item.h"
 #include "ash/wm/window_state.h"
 #include "ash/wm/window_util.h"
 #include "ash/wm/wm_event.h"
@@ -35,6 +37,8 @@
 #include "ui/compositor/scoped_animation_duration_scale_mode.h"
 #include "ui/gfx/rect_conversions.h"
 #include "ui/gfx/transform.h"
+#include "ui/views/controls/label.h"
+#include "ui/views/widget/native_widget_aura.h"
 #include "ui/wm/core/window_util.h"
 #include "ui/wm/public/activation_delegate.h"
 
@@ -225,6 +229,15 @@
   aura::Window* GetFocusedWindow() {
     return aura::client::GetFocusClient(
         Shell::GetPrimaryRootWindow())->GetFocusedWindow();
+    }
+
+  ScopedVector<WindowSelectorItem>* GetWindowItems() {
+    return &(ash::Shell::GetInstance()->window_selector_controller()->
+        window_selector_->windows_);
+    }
+
+  views::Widget* GetLabelWidget(ash::WindowSelectorItem* window) {
+    return window->window_label_.get();
   }
 
   test::ShelfViewTestAPI* shelf_view_test() {
@@ -1087,4 +1100,48 @@
   }
 }
 
+// Test that a label is created under the window on entering overview mode.
+TEST_F(WindowSelectorTest, CreateLabelUnderWindow) {
+  scoped_ptr<aura::Window> window(CreateWindow(gfx::Rect(0, 0, 100, 100)));
+  base::string16 window_title = base::UTF8ToUTF16("My window");
+  window->set_title(window_title);
+  ToggleOverview();
+  WindowSelectorItem* window_item = GetWindowItems()->back();
+  views::Widget* widget = GetLabelWidget(window_item);
+  // Has the label widget been created?
+  ASSERT_TRUE(widget);
+  views::Label* label = static_cast<views::Label*>(widget->GetContentsView());
+  // Verify the label matches the window title.
+  EXPECT_EQ(label->text(), window_title);
+  // Labels are located based on target_bounds, not the actual window item
+  // bounds.
+  gfx::Rect target_bounds(window_item->target_bounds());
+  gfx::Rect expected_label_bounds(target_bounds.x(),
+                                  target_bounds.bottom(),
+                                  target_bounds.width(),
+                                  label->GetPreferredSize().height());
+  gfx::Rect real_label_bounds = widget->GetNativeWindow()->bounds();
+  EXPECT_EQ(widget->GetNativeWindow()->bounds(), real_label_bounds);
+}
+
+// Tests that a label is created for the active panel in a group of panels in
+// overview mode.
+TEST_F(WindowSelectorTest, CreateLabelUnderPanel) {
+  scoped_ptr<aura::Window> panel1(CreatePanelWindow(gfx::Rect(0, 0, 100, 100)));
+  scoped_ptr<aura::Window> panel2(CreatePanelWindow(gfx::Rect(0, 0, 100, 100)));
+  base::string16 panel1_title = base::UTF8ToUTF16("My panel");
+  base::string16 panel2_title = base::UTF8ToUTF16("Another panel");
+  panel1->set_title(panel1_title);
+  panel2->set_title(panel2_title);
+  wm::ActivateWindow(panel1.get());
+  ToggleOverview();
+  WindowSelectorItem* window_item = GetWindowItems()->back();
+  views::Widget* widget = GetLabelWidget(window_item);
+  // Has the label widget been created?
+  ASSERT_TRUE(widget);
+  views::Label* label = static_cast<views::Label*>(widget->GetContentsView());
+  // Verify the label matches the active window title.
+  EXPECT_EQ(label->text(), panel1_title);
+}
+
 }  // namespace ash
diff --git a/ash/wm/overview/window_selector_window.cc b/ash/wm/overview/window_selector_window.cc
index 942edf4..59d2474 100644
--- a/ash/wm/overview/window_selector_window.cc
+++ b/ash/wm/overview/window_selector_window.cc
@@ -4,6 +4,7 @@
 
 #include "ash/wm/overview/window_selector_window.h"
 
+#include "ash/screen_util.h"
 #include "ash/shell.h"
 #include "ash/shell_window_ids.h"
 #include "ash/wm/overview/scoped_transform_overview_window.h"
@@ -46,10 +47,6 @@
   return widget;
 }
 
-// The time for the close button to fade in when initially shown on entering
-// overview mode.
-const int kCloseButtonFadeInMilliseconds = 80;
-
 }  // namespace
 
 WindowSelectorWindow::WindowSelectorWindow(aura::Window* window)
@@ -103,11 +100,14 @@
                                          bool animate) {
   gfx::Rect src_rect = transform_window_.GetBoundsInScreen();
   set_bounds(ScopedTransformOverviewWindow::
-      ShrinkRectToFitPreservingAspectRatio(src_rect, target_bounds));
+        ShrinkRectToFitPreservingAspectRatio(src_rect, target_bounds));
   transform_window_.SetTransform(root_window,
       ScopedTransformOverviewWindow::GetTransformForRect(src_rect, bounds()),
       animate);
-  UpdateCloseButtonBounds();
+  // TODO move close button management to WindowSelectorItem, so that we can
+  // also handle panels.
+  // See http://crbug.com/352143
+  UpdateCloseButtonBounds(root_window);
 }
 
 void WindowSelectorWindow::ButtonPressed(views::Button* sender,
@@ -116,9 +116,9 @@
       transform_window_.window())->Close();
 }
 
-void WindowSelectorWindow::UpdateCloseButtonBounds() {
-  aura::Window* root_window = GetRootWindow();
-  gfx::Rect align_bounds(bounds());
+void WindowSelectorWindow::UpdateCloseButtonBounds(aura::Window* root_window) {
+  gfx::Rect align_bounds(
+      ScreenUtil::ConvertRectFromScreen(root_window, bounds()));
   gfx::Transform close_button_transform;
   close_button_transform.Translate(align_bounds.right(), align_bounds.y());
 
@@ -153,7 +153,7 @@
       settings.SetPreemptionStrategy(
           ui::LayerAnimator::REPLACE_QUEUED_ANIMATIONS);
       settings.SetTransitionDuration(base::TimeDelta::FromMilliseconds(
-            kCloseButtonFadeInMilliseconds));
+            WindowSelectorItem::kFadeInMilliseconds));
       layer->SetOpacity(1);
     }
   } else {
diff --git a/ash/wm/overview/window_selector_window.h b/ash/wm/overview/window_selector_window.h
index 0c6d7b8..3b5094a 100644
--- a/ash/wm/overview/window_selector_window.h
+++ b/ash/wm/overview/window_selector_window.h
@@ -8,7 +8,6 @@
 #include "ash/wm/overview/scoped_transform_overview_window.h"
 #include "ash/wm/overview/window_selector_item.h"
 #include "base/compiler_specific.h"
-#include "base/memory/scoped_ptr.h"
 #include "ui/gfx/rect.h"
 #include "ui/views/controls/button/button.h"
 
@@ -46,11 +45,10 @@
   // views::ButtonListener:
   virtual void ButtonPressed(views::Button* sender,
                              const ui::Event& event) OVERRIDE;
-
  private:
   // Creates the close button window if it does not exist and updates the bounds
   // to match the window selector item.
-  void UpdateCloseButtonBounds();
+  void UpdateCloseButtonBounds(aura::Window* root_window);
 
   // The window with a scoped transform represented by this selector item.
   ScopedTransformOverviewWindow transform_window_;
diff --git a/ash/wm/panels/OWNERS b/ash/wm/panels/OWNERS
index c9dc2b8..aa215c7 100644
--- a/ash/wm/panels/OWNERS
+++ b/ash/wm/panels/OWNERS
@@ -1,2 +1 @@
-flackr@chromium.org
 stevenjb@chromium.org
diff --git a/ash/wm/panels/attached_panel_window_targeter.cc b/ash/wm/panels/attached_panel_window_targeter.cc
new file mode 100644
index 0000000..4e8b8f7
--- /dev/null
+++ b/ash/wm/panels/attached_panel_window_targeter.cc
@@ -0,0 +1,75 @@
+// 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.
+
+#include "ash/wm/panels/attached_panel_window_targeter.h"
+
+#include "ash/shelf/shelf.h"
+#include "ash/shell.h"
+#include "ash/wm/panels/panel_layout_manager.h"
+
+namespace ash {
+
+AttachedPanelWindowTargeter::AttachedPanelWindowTargeter(
+    aura::Window* container,
+    const gfx::Insets& default_mouse_extend,
+    const gfx::Insets& default_touch_extend,
+    PanelLayoutManager* panel_layout_manager)
+    : ::wm::EasyResizeWindowTargeter(container,
+                                     default_mouse_extend,
+                                     default_touch_extend),
+      panel_container_(container),
+      panel_layout_manager_(panel_layout_manager),
+      default_touch_extend_(default_touch_extend) {
+  Shell::GetInstance()->AddShellObserver(this);
+}
+
+AttachedPanelWindowTargeter::~AttachedPanelWindowTargeter() {
+  Shell::GetInstance()->RemoveShellObserver(this);
+}
+
+void AttachedPanelWindowTargeter::OnShelfCreatedForRootWindow(
+    aura::Window* root_window) {
+  UpdateTouchExtend(root_window);
+}
+
+void AttachedPanelWindowTargeter::OnShelfAlignmentChanged(
+    aura::Window* root_window) {
+  // Don't update the touch insets if the shelf has not yet been created.
+  if (!panel_layout_manager_->shelf())
+    return;
+
+  UpdateTouchExtend(root_window);
+}
+
+void AttachedPanelWindowTargeter::UpdateTouchExtend(aura::Window* root_window) {
+  // Only update the touch insets for panels if they are attached to the shelf
+  // in |root_window|.
+  if (panel_container_->GetRootWindow() != root_window)
+    return;
+
+  DCHECK(panel_layout_manager_->shelf());
+
+  gfx::Insets touch(default_touch_extend_);
+  switch (panel_layout_manager_->shelf()->alignment()) {
+    case SHELF_ALIGNMENT_BOTTOM:
+      touch = gfx::Insets(touch.top(), touch.left(), 0, touch.right());
+      break;
+    case SHELF_ALIGNMENT_LEFT:
+      touch = gfx::Insets(touch.top(), 0, touch.bottom(), touch.right());
+      break;
+    case SHELF_ALIGNMENT_RIGHT:
+      touch = gfx::Insets(touch.top(), touch.left(), touch.bottom(), 0);
+      break;
+    case SHELF_ALIGNMENT_TOP:
+      touch = gfx::Insets(0, touch.left(), touch.bottom(), touch.right());
+      break;
+    default:
+      NOTREACHED();
+      return;
+  }
+
+  set_touch_extend(touch);
+}
+
+}  // namespace ash
diff --git a/ash/wm/panels/attached_panel_window_targeter.h b/ash/wm/panels/attached_panel_window_targeter.h
new file mode 100644
index 0000000..d5e8196
--- /dev/null
+++ b/ash/wm/panels/attached_panel_window_targeter.h
@@ -0,0 +1,43 @@
+// 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.
+
+#ifndef ASH_WM_PANELS_ATTACHED_PANEL_WINDOW_TARGETER_H_
+#define ASH_WM_PANELS_ATTACHED_PANEL_WINDOW_TARGETER_H_
+
+#include "ash/shell_observer.h"
+#include "ui/wm/core/easy_resize_window_targeter.h"
+
+namespace ash {
+
+class PanelLayoutManager;
+
+// A window targeter installed on a panel container to disallow touch
+// hit-testing of attached panel edges that are adjacent to the shelf. This
+// makes it significantly easier to correctly target shelf buttons with touch.
+class AttachedPanelWindowTargeter : public ::wm::EasyResizeWindowTargeter,
+                                    public ShellObserver {
+ public:
+  AttachedPanelWindowTargeter(aura::Window* container,
+                              const gfx::Insets& default_mouse_extend,
+                              const gfx::Insets& default_touch_extend,
+                              PanelLayoutManager* panel_layout_manager);
+  virtual ~AttachedPanelWindowTargeter();
+
+  // ShellObserver:
+  virtual void OnShelfCreatedForRootWindow(aura::Window* root_window) OVERRIDE;
+  virtual void OnShelfAlignmentChanged(aura::Window* root_window) OVERRIDE;
+
+ private:
+  void UpdateTouchExtend(aura::Window* root_window);
+
+  aura::Window* panel_container_;
+  PanelLayoutManager* panel_layout_manager_;
+  gfx::Insets default_touch_extend_;
+
+  DISALLOW_COPY_AND_ASSIGN(AttachedPanelWindowTargeter);
+};
+
+}  // namespace ash
+
+#endif  // ASH_WM_PANELS_ATTACHED_PANEL_WINDOW_TARGETER_H_
diff --git a/ash/wm/panels/panel_layout_manager_unittest.cc b/ash/wm/panels/panel_layout_manager_unittest.cc
index 853f648..d32eb82 100644
--- a/ash/wm/panels/panel_layout_manager_unittest.cc
+++ b/ash/wm/panels/panel_layout_manager_unittest.cc
@@ -35,6 +35,7 @@
 #include "ui/aura/window.h"
 #include "ui/aura/window_event_dispatcher.h"
 #include "ui/base/l10n/l10n_util.h"
+#include "ui/events/event_utils.h"
 #include "ui/views/widget/widget.h"
 
 namespace ash {
@@ -59,9 +60,10 @@
     return CreateTestWindowInShellWithBounds(bounds);
   }
 
-  aura::Window* CreatePanelWindow(const gfx::Rect& bounds) {
+  aura::Window* CreatePanelWindowWithDelegate(aura::WindowDelegate* delegate,
+                                              const gfx::Rect& bounds) {
     aura::Window* window = CreateTestWindowInShellWithDelegateAndType(
-        NULL, ui::wm::WINDOW_TYPE_PANEL, 0, bounds);
+        delegate, ui::wm::WINDOW_TYPE_PANEL, 0, bounds);
     test::TestShelfDelegate* shelf_delegate =
         test::TestShelfDelegate::instance();
     shelf_delegate->AddShelfItem(window);
@@ -72,6 +74,10 @@
     return window;
   }
 
+  aura::Window* CreatePanelWindow(const gfx::Rect& bounds) {
+    return CreatePanelWindowWithDelegate(NULL, bounds);
+  }
+
   aura::Window* GetPanelContainer(aura::Window* panel) {
     return Shell::GetContainer(panel->GetRootWindow(),
                                kShellWindowId_PanelContainer);
@@ -784,6 +790,73 @@
   EXPECT_TRUE(w3->IsVisible());
 }
 
+// Verifies that touches along the attached edge of a panel do not
+// target the panel itself.
+TEST_F(PanelLayoutManagerTest, TouchHitTestPanel) {
+  aura::test::TestWindowDelegate delegate;
+  scoped_ptr<aura::Window> w(
+      CreatePanelWindowWithDelegate(&delegate, gfx::Rect(0, 0, 200, 200)));
+  ui::EventTarget* root = w->GetRootWindow();
+  ui::EventTargeter* targeter = root->GetEventTargeter();
+
+  // Note that the constants used in the touch locations below are
+  // arbitrarily-selected small numbers which will ensure the point is
+  // within the default extended region surrounding the panel. This value
+  // is calculated as
+  // kResizeOutsideBoundsSize * kResizeOutsideBoundsScaleForTouch
+  // in src/ash/root_window_controller.cc.
+
+  // Hit test outside the right edge with a bottom-aligned shelf.
+  SetAlignment(Shell::GetPrimaryRootWindow(), SHELF_ALIGNMENT_BOTTOM);
+  gfx::Rect bounds(w->bounds());
+  ui::TouchEvent touch(ui::ET_TOUCH_PRESSED,
+                       gfx::Point(bounds.right() + 3, bounds.y() + 2),
+                       0, ui::EventTimeForNow());
+  ui::EventTarget* target = targeter->FindTargetForEvent(root, &touch);
+  EXPECT_EQ(w.get(), target);
+
+  // Hit test outside the bottom edge with a bottom-aligned shelf.
+  touch.set_location(gfx::Point(bounds.x() + 6, bounds.bottom() + 5));
+  target = targeter->FindTargetForEvent(root, &touch);
+  EXPECT_NE(w.get(), target);
+
+  // Hit test outside the bottom edge with a right-aligned shelf.
+  SetAlignment(Shell::GetPrimaryRootWindow(), SHELF_ALIGNMENT_RIGHT);
+  bounds = w->bounds();
+  touch.set_location(gfx::Point(bounds.x() + 6, bounds.bottom() + 5));
+  target = targeter->FindTargetForEvent(root, &touch);
+  EXPECT_EQ(w.get(), target);
+
+  // Hit test outside the right edge with a right-aligned shelf.
+  touch.set_location(gfx::Point(bounds.right() + 3, bounds.y() + 2));
+  target = targeter->FindTargetForEvent(root, &touch);
+  EXPECT_NE(w.get(), target);
+
+  // Hit test outside the top edge with a left-aligned shelf.
+  SetAlignment(Shell::GetPrimaryRootWindow(), SHELF_ALIGNMENT_LEFT);
+  bounds = w->bounds();
+  touch.set_location(gfx::Point(bounds.x() + 4, bounds.y() - 6));
+  target = targeter->FindTargetForEvent(root, &touch);
+  EXPECT_EQ(w.get(), target);
+
+  // Hit test outside the left edge with a left-aligned shelf.
+  touch.set_location(gfx::Point(bounds.x() - 1, bounds.y() + 5));
+  target = targeter->FindTargetForEvent(root, &touch);
+  EXPECT_NE(w.get(), target);
+
+  // Hit test outside the left edge with a top-aligned shelf.
+  SetAlignment(Shell::GetPrimaryRootWindow(), SHELF_ALIGNMENT_TOP);
+  bounds = w->bounds();
+  touch.set_location(gfx::Point(bounds.x() - 1, bounds.y() + 5));
+  target = targeter->FindTargetForEvent(root, &touch);
+  EXPECT_EQ(w.get(), target);
+
+  // Hit test outside the top edge with a top-aligned shelf.
+  touch.set_location(gfx::Point(bounds.x() + 4, bounds.y() - 6));
+  target = targeter->FindTargetForEvent(root, &touch);
+  EXPECT_NE(w.get(), target);
+}
+
 INSTANTIATE_TEST_CASE_P(LtrRtl, PanelLayoutManagerTextDirectionTest,
                         testing::Bool());
 
diff --git a/ash/wm/system_modal_container_layout_manager_unittest.cc b/ash/wm/system_modal_container_layout_manager_unittest.cc
index 55f0d8c..568ea50 100644
--- a/ash/wm/system_modal_container_layout_manager_unittest.cc
+++ b/ash/wm/system_modal_container_layout_manager_unittest.cc
@@ -149,8 +149,8 @@
  public:
   virtual void SetUp() OVERRIDE {
     // Allow a virtual keyboard (and initialize it per default).
-   CommandLine::ForCurrentProcess()->AppendSwitch(
-       keyboard::switches::kEnableVirtualKeyboard);
+    CommandLine::ForCurrentProcess()->AppendSwitch(
+        keyboard::switches::kEnableVirtualKeyboard);
     AshTestBase::SetUp();
     Shell::GetPrimaryRootWindowController()->ActivateKeyboard(
         keyboard::KeyboardController::GetInstance());
@@ -184,31 +184,20 @@
     if (show == keyboard->keyboard_visible())
       return;
 
-    // The animation has to run in order to get the notification. Run the
-    // animation and wait until its finished.
-    ui::ScopedAnimationDurationScaleMode normal_duration_mode(
-        ui::ScopedAnimationDurationScaleMode::NORMAL_DURATION);
-    if (show)
-      keyboard->ShowAndLockKeyboard();
-    else
+    if (show) {
+      keyboard->ShowKeyboard(true);
+      if (keyboard->proxy()->GetKeyboardWindow()->bounds().height() == 0) {
+        keyboard->proxy()->GetKeyboardWindow()->SetBounds(
+            keyboard::KeyboardBoundsFromWindowBounds(
+                keyboard->GetContainerWindow()->bounds(), 100));
+      }
+    } else {
       keyboard->HideKeyboard(keyboard::KeyboardController::HIDE_REASON_MANUAL);
-
-    WaitForWindowAnimationToBeFinished(keyboard->GetContainerWindow());
+    }
 
     DCHECK_EQ(show, keyboard->keyboard_visible());
   }
 
-  void WaitForWindowAnimationToBeFinished(aura::Window* window) {
-    DCHECK(window);
-    ui::Layer* layer = window->layer();
-    ui::LayerAnimatorTestController controller(layer->GetAnimator());
-    gfx::AnimationContainerElement* element = layer->GetAnimator();
-    while (controller.animator()->is_animating()) {
-      controller.StartThreadedAnimationsIfNeeded();
-      base::TimeTicks step_time = controller.animator()->last_step_time();
-      element->Step(step_time + base::TimeDelta::FromMilliseconds(1000));
-    }
-  }
 };
 
 TEST_F(SystemModalContainerLayoutManagerTest, NonModalTransient) {
diff --git a/ash/wm/toplevel_window_event_handler.cc b/ash/wm/toplevel_window_event_handler.cc
index 8b6c9ba..f20a13f 100644
--- a/ash/wm/toplevel_window_event_handler.cc
+++ b/ash/wm/toplevel_window_event_handler.cc
@@ -476,7 +476,10 @@
         ConvertPointToParent(target, event->location()));
     AttemptToStartDrag(target, location_in_parent, component,
                        aura::client::WINDOW_MOVE_SOURCE_MOUSE);
-    event->StopPropagation();
+    // Set as handled so that other event handlers do no act upon the event
+    // but still receive it so that they receive both parts of each pressed/
+    // released pair.
+    event->SetHandled();
   } else {
     CompleteDrag(DRAG_COMPLETE);
   }
@@ -491,12 +494,13 @@
   CompleteDrag(event->type() == ui::ET_MOUSE_RELEASED ?
                    DRAG_COMPLETE : DRAG_REVERT);
   // Completing the drag may result in hiding the window. If this happens
-  // return true so no other handlers/observers see the event. Otherwise
-  // they see the event on a hidden window.
+  // mark the event as handled so no other handlers/observers act upon the
+  // event. They should see the event on a hidden window, to determine targets
+  // of destructive actions such as hiding. They should not act upon them.
   if (window_resizer_ &&
       event->type() == ui::ET_MOUSE_CAPTURE_CHANGED &&
       !target->IsVisible()) {
-    event->StopPropagation();
+    event->SetHandled();
   }
 }
 
diff --git a/ash/wm/window_positioner.cc b/ash/wm/window_positioner.cc
index 415211e..55d2060 100644
--- a/ash/wm/window_positioner.cc
+++ b/ash/wm/window_positioner.cc
@@ -50,7 +50,7 @@
 // WindowPositioner::SetIgnoreActivations().
 static bool disable_auto_positioning = false;
 
-// If set to true, by default the first window in ASH will be maxmized.
+// If set to true, by default the first window in ASH will be maximized.
 static bool maximize_first_window = false;
 
 // Check if any management should be performed (with a given |window|).
@@ -219,7 +219,7 @@
         window->GetRootWindow() == root_window && window->TargetVisibility() &&
         wm::GetWindowState(window)->window_position_managed()) {
       if (found && found != window) {
-        // no need to check !signle_window because the function must have
+        // no need to check !single_window because the function must have
         // been already returned in the "if (!single_window)" below.
         *single_window = false;
         return found;
@@ -274,7 +274,8 @@
     }
     return;
   }
-  bool maximized = wm::GetWindowState(top_window)->IsMaximized();
+  wm::WindowState* top_window_state = wm::GetWindowState(top_window);
+  bool maximized = top_window_state->IsMaximized();
   // We ignore the saved show state, but look instead for the top level
   // window's show state.
   if (show_state_in == ui::SHOW_STATE_DEFAULT) {
@@ -282,6 +283,23 @@
         ui::SHOW_STATE_DEFAULT;
   }
 
+  if (maximized) {
+    bool has_restore_bounds = top_window_state->HasRestoreBounds();
+    if (has_restore_bounds) {
+      // For a maximized window ignore the real bounds of the top level window
+      // and use its restore bounds instead. Offset the bounds to prevent the
+      // windows from overlapping exactly when restored.
+      *bounds_in_out = top_window_state->GetRestoreBoundsInScreen() +
+          gfx::Vector2d(kMinimumWindowOffset, kMinimumWindowOffset);
+    }
+    if (is_saved_bounds || has_restore_bounds) {
+      gfx::Rect work_area = screen->GetDisplayNearestWindow(target).work_area();
+      bounds_in_out->AdjustToFit(work_area);
+      // Use adjusted saved bounds or restore bounds, if there is one.
+      return;
+    }
+  }
+
   // Use the size of the other window. The window's bound will be rearranged
   // in ash::WorkspaceLayoutManager using this location.
   *bounds_in_out = top_window->GetBoundsInScreen();
@@ -419,7 +437,7 @@
   popup_position_offset_from_screen_corner_x = grid;
   popup_position_offset_from_screen_corner_y = grid;
   if (!pop_position_offset_increment_x) {
-    // When the popup position increment is , the last popup position
+    // When the popup position increment is 0, the last popup position
     // was not yet initialized.
     last_popup_position_x_ = popup_position_offset_from_screen_corner_x;
     last_popup_position_y_ = popup_position_offset_from_screen_corner_y;
diff --git a/ash/wm/window_positioner_unittest.cc b/ash/wm/window_positioner_unittest.cc
index 49c74b4..1459853 100644
--- a/ash/wm/window_positioner_unittest.cc
+++ b/ash/wm/window_positioner_unittest.cc
@@ -21,6 +21,8 @@
 TEST_F(WindowPositionerTest, OpenMaximizedWindowOnSecondDisplay) {
   if (!SupportsMultipleDisplays())
     return;
+  // Tests that for a screen that is narrower than kForceMaximizeWidthLimit
+  // a new window gets maximized.
   UpdateDisplay("400x400,500x500");
   Shell::GetInstance()->set_target_root_window(
       Shell::GetAllRootWindows()[1]);
@@ -58,6 +60,46 @@
       second_root_window).bounds().Contains(bounds));
 }
 
+// Tests that second window inherits first window's maximized state as well as
+// its restore bounds.
+TEST_F(WindowPositionerTest, SecondMaximizedWindowHasProperRestoreSize) {
+#if defined(OS_WIN)
+  ash::WindowPositioner::SetMaximizeFirstWindow(true);
+#endif
+  UpdateDisplay("1400x900");
+  shell::ToplevelWindow::CreateParams params;
+  params.can_resize = true;
+  params.can_maximize = true;
+  views::Widget* widget1 =
+      shell::ToplevelWindow::CreateToplevelWindow(params);
+  gfx::Rect bounds = widget1->GetWindowBoundsInScreen();
+
+#if !defined(OS_WIN)
+  // The window should have default size.
+  EXPECT_FALSE(widget1->IsMaximized());
+  EXPECT_EQ("300x300", bounds.size().ToString());
+  widget1->Maximize();
+#endif
+  // The window should be maximized.
+  bounds = widget1->GetWindowBoundsInScreen();
+  EXPECT_TRUE(widget1->IsMaximized());
+  EXPECT_EQ("0,0 1400x853", bounds.ToString());
+
+  // Create another window
+  views::Widget* widget2 =
+      shell::ToplevelWindow::CreateToplevelWindow(params);
+
+  // The second window should be maximized.
+  bounds = widget2->GetWindowBoundsInScreen();
+  EXPECT_TRUE(widget2->IsMaximized());
+  EXPECT_EQ("0,0 1400x853", bounds.ToString());
+
+  widget2->Restore();
+  // Second window's restored size should be set to default size.
+  bounds = widget2->GetWindowBoundsInScreen();
+  EXPECT_EQ("300x300", bounds.size().ToString());
+}
+
 namespace {
 
 // A WidgetDelegate that returns the out of display saved bounds.
diff --git a/ash/wm/workspace/workspace_event_handler.cc b/ash/wm/workspace/workspace_event_handler.cc
index bfc8104..bba3f76 100644
--- a/ash/wm/workspace/workspace_event_handler.cc
+++ b/ash/wm/workspace/workspace_event_handler.cc
@@ -15,16 +15,26 @@
 
 namespace ash {
 
-WorkspaceEventHandler::WorkspaceEventHandler() {
+WorkspaceEventHandler::WorkspaceEventHandler()
+    : click_component_(HTNOWHERE) {
 }
 
 WorkspaceEventHandler::~WorkspaceEventHandler() {
 }
 
 void WorkspaceEventHandler::OnMouseEvent(ui::MouseEvent* event) {
+  aura::Window* target = static_cast<aura::Window*>(event->target());
+  if (event->type() == ui::ET_MOUSE_PRESSED &&
+      event->IsOnlyLeftMouseButton() &&
+      ((event->flags() &
+          (ui::EF_IS_DOUBLE_CLICK | ui::EF_IS_TRIPLE_CLICK)) == 0)) {
+    click_component_ = target->delegate()->
+        GetNonClientComponent(event->location());
+  }
+
   if (event->handled())
     return;
-  aura::Window* target = static_cast<aura::Window*>(event->target());
+
   switch (event->type()) {
     case ui::ET_MOUSE_MOVED: {
       int component =
@@ -40,16 +50,29 @@
       break;
     case ui::ET_MOUSE_PRESSED: {
       wm::WindowState* target_state = wm::GetWindowState(target);
-      if (event->flags() & ui::EF_IS_DOUBLE_CLICK &&
-          event->IsOnlyLeftMouseButton() &&
-          target->delegate()->GetNonClientComponent(event->location()) ==
-          HTCAPTION) {
-        ash::Shell::GetInstance()->metrics()->RecordUserMetricsAction(
-            ash::UMA_TOGGLE_MAXIMIZE_CAPTION_CLICK);
-        const wm::WMEvent wm_event(wm::WM_EVENT_TOGGLE_MAXIMIZE_CAPTION);
-        target_state->OnWMEvent(&wm_event);
-        event->StopPropagation();
+
+      if (event->IsOnlyLeftMouseButton()) {
+        if (event->flags() & ui::EF_IS_DOUBLE_CLICK) {
+          int component = target->delegate()->
+              GetNonClientComponent(event->location());
+          if (component == HTCAPTION &&
+              component == click_component_) {
+            ash::Shell::GetInstance()->metrics()->RecordUserMetricsAction(
+                ash::UMA_TOGGLE_MAXIMIZE_CAPTION_CLICK);
+            const wm::WMEvent wm_event(wm::WM_EVENT_TOGGLE_MAXIMIZE_CAPTION);
+            target_state->OnWMEvent(&wm_event);
+            event->StopPropagation();
+          }
+          // WindowEventHandler can receive each event up to two times. Once a
+          // double-click has been received clear the target. Otherwise a
+          // duplicate of the event will be checking target history against
+          // itself.
+          click_component_ = HTNOWHERE;
+        }
+      } else {
+        click_component_ = HTNOWHERE;
       }
+
       multi_window_resize_controller_.Hide();
       HandleVerticalResizeDoubleClick(target_state, event);
       break;
@@ -60,29 +83,36 @@
 }
 
 void WorkspaceEventHandler::OnGestureEvent(ui::GestureEvent* event) {
-  if (event->handled())
+  if (event->handled() || event->type() != ui::ET_GESTURE_TAP)
     return;
+
   aura::Window* target = static_cast<aura::Window*>(event->target());
-  if (event->type() == ui::ET_GESTURE_TAP &&
-      target->delegate()->GetNonClientComponent(event->location()) ==
-      HTCAPTION) {
-    if (event->details().tap_count() == 2) {
-      ash::Shell::GetInstance()->metrics()->RecordUserMetricsAction(
-          ash::UMA_TOGGLE_MAXIMIZE_CAPTION_GESTURE);
-      // Note: TouchUMA::GESTURE_FRAMEVIEW_TAP is counted twice each time
-      // TouchUMA::GESTURE_MAXIMIZE_DOUBLETAP is counted once.
-      TouchUMA::GetInstance()->RecordGestureAction(
-          TouchUMA::GESTURE_MAXIMIZE_DOUBLETAP);
-      const wm::WMEvent wm_event(wm::WM_EVENT_TOGGLE_MAXIMIZE_CAPTION);
-      wm::GetWindowState(target)->OnWMEvent(&wm_event);
-      event->StopPropagation();
-      return;
-    } else {
-      // Note: TouchUMA::GESTURE_FRAMEVIEW_TAP is counted twice for each tap.
-      TouchUMA::GetInstance()->RecordGestureAction(
-          TouchUMA::GESTURE_FRAMEVIEW_TAP);
-    }
+  int previous_target_component = click_component_;
+  click_component_ = target->delegate()->
+      GetNonClientComponent(event->location());
+
+  if (click_component_ != HTCAPTION)
+    return;
+
+  if (event->details().tap_count() != 2) {
+    // Note: TouchUMA::GESTURE_FRAMEVIEW_TAP is counted twice for each tap.
+    TouchUMA::GetInstance()->
+        RecordGestureAction(TouchUMA::GESTURE_FRAMEVIEW_TAP);
+    return;
   }
+
+  if (click_component_ == previous_target_component) {
+    ash::Shell::GetInstance()->metrics()->RecordUserMetricsAction(
+        ash::UMA_TOGGLE_MAXIMIZE_CAPTION_GESTURE);
+    // Note: TouchUMA::GESTURE_FRAMEVIEW_TAP is counted twice each time
+    // TouchUMA::GESTURE_MAXIMIZE_DOUBLETAP is counted once.
+    TouchUMA::GetInstance()->RecordGestureAction(
+        TouchUMA::GESTURE_MAXIMIZE_DOUBLETAP);
+    const wm::WMEvent wm_event(wm::WM_EVENT_TOGGLE_MAXIMIZE_CAPTION);
+    wm::GetWindowState(target)->OnWMEvent(&wm_event);
+    event->StopPropagation();
+  }
+  click_component_ = HTNOWHERE;
 }
 
 void WorkspaceEventHandler::HandleVerticalResizeDoubleClick(
diff --git a/ash/wm/workspace/workspace_event_handler.h b/ash/wm/workspace/workspace_event_handler.h
index f949821..0610537 100644
--- a/ash/wm/workspace/workspace_event_handler.h
+++ b/ash/wm/workspace/workspace_event_handler.h
@@ -36,6 +36,13 @@
 
   MultiWindowResizeController multi_window_resize_controller_;
 
+  // The non-client component for the target of a MouseEvent or GestureEvent.
+  // Events can be destructive to the window tree, which can cause the
+  // component of a ui::EF_IS_DOUBLE_CLICK event to no longer be the same as
+  // that of the initial click. Acting on a double click should only occur for
+  // matching components. This will be set for left clicks, and tap events.
+  int click_component_;
+
   DISALLOW_COPY_AND_ASSIGN(WorkspaceEventHandler);
 };
 
diff --git a/ash/wm/workspace/workspace_event_handler_unittest.cc b/ash/wm/workspace/workspace_event_handler_unittest.cc
index fe9ec8c..f9a1e1a 100644
--- a/ash/wm/workspace/workspace_event_handler_unittest.cc
+++ b/ash/wm/workspace/workspace_event_handler_unittest.cc
@@ -85,8 +85,8 @@
   // Double clicking the vertical resize edge of a window should maximize it
   // vertically.
   gfx::Rect restored_bounds(10, 10, 50, 50);
-  aura::test::TestWindowDelegate wd;
-  scoped_ptr<aura::Window> window(CreateTestWindow(&wd, restored_bounds));
+  aura::test::TestWindowDelegate delegate;
+  scoped_ptr<aura::Window> window(CreateTestWindow(&delegate, restored_bounds));
 
   wm::ActivateWindow(window.get());
 
@@ -97,7 +97,7 @@
                                        window.get());
 
   // Double-click the top resize edge.
-  wd.set_window_component(HTTOP);
+  delegate.set_window_component(HTTOP);
   // On X a double click actually generates a drag between each press/release.
   // Explicitly trigger this path since we had bugs in dealing with it
   // correctly.
@@ -126,7 +126,7 @@
   EXPECT_FALSE(window_state->HasRestoreBounds());
 
   // Double clicking the left resize edge should maximize horizontally.
-  wd.set_window_component(HTLEFT);
+  delegate.set_window_component(HTLEFT);
   generator.DoubleClickLeftButton();
   bounds_in_screen = window->GetBoundsInScreen();
   EXPECT_EQ(restored_bounds.y(), bounds_in_screen.y());
@@ -142,21 +142,21 @@
 
 #if defined(OS_WIN)
   // Multi display test does not run on Win8 bot. crbug.com/247427.
-  if (base::win::GetVersion() >= base::win::VERSION_WIN8)
+  if (!SupportsMultipleDisplays())
     return;
 #endif
 
   // Verify the double clicking the resize edge works on 2nd display too.
   UpdateDisplay("200x200,400x300");
   gfx::Rect work_area2 = ScreenUtil::GetSecondaryDisplay().work_area();
-  restored_bounds.SetRect(220,20, 50, 50);
+  restored_bounds.SetRect(220, 20, 50, 50);
   window->SetBoundsInScreen(restored_bounds, ScreenUtil::GetSecondaryDisplay());
   aura::Window* second_root = Shell::GetAllRootWindows()[1];
   EXPECT_EQ(second_root, window->GetRootWindow());
   aura::test::EventGenerator generator2(second_root, window.get());
 
   // Y-axis maximization.
-  wd.set_window_component(HTTOP);
+  delegate.set_window_component(HTTOP);
   generator2.PressLeftButton();
   generator2.ReleaseLeftButton();
   generator2.set_flags(ui::EF_IS_DOUBLE_CLICK);
@@ -176,7 +176,7 @@
   EXPECT_EQ(restored_bounds.ToString(), window->GetBoundsInScreen().ToString());
 
   // X-axis maximization.
-  wd.set_window_component(HTLEFT);
+  delegate.set_window_component(HTLEFT);
   generator2.DoubleClickLeftButton();
   bounds_in_screen = window->GetBoundsInScreen();
   EXPECT_EQ(restored_bounds.y(), bounds_in_screen.y());
@@ -193,8 +193,8 @@
 // Tests the behavior when double clicking the border of a side snapped window.
 TEST_F(WorkspaceEventHandlerTest, DoubleClickSingleAxisWhenSideSnapped) {
   gfx::Rect restored_bounds(10, 10, 50, 50);
-  aura::test::TestWindowDelegate wd;
-  scoped_ptr<aura::Window> window(CreateTestWindow(&wd, restored_bounds));
+  aura::test::TestWindowDelegate delegate;
+  scoped_ptr<aura::Window> window(CreateTestWindow(&delegate, restored_bounds));
 
   gfx::Rect work_area_in_screen = Shell::GetScreen()->GetDisplayNearestWindow(
       window.get()).work_area();
@@ -214,7 +214,7 @@
   // to the restored bounds would be weird).
   aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow(),
                                        window.get());
-  wd.set_window_component(HTTOP);
+  delegate.set_window_component(HTTOP);
   generator.DoubleClickLeftButton();
   EXPECT_EQ(wm::WINDOW_STATE_TYPE_LEFT_SNAPPED, window_state->GetStateType());
   EXPECT_EQ(snapped_bounds_in_screen.ToString(),
@@ -222,7 +222,7 @@
 
   // Double clicking the right border should exit the side snapped state and
   // make the window take up the entire work area.
-  wd.set_window_component(HTRIGHT);
+  delegate.set_window_component(HTRIGHT);
   generator.DoubleClickLeftButton();
   EXPECT_TRUE(window_state->IsNormalStateType());
   EXPECT_EQ(work_area_in_screen.ToString(),
@@ -232,20 +232,20 @@
 TEST_F(WorkspaceEventHandlerTest,
        DoubleClickSingleAxisDoesntResizeVerticalEdgeIfConstrained) {
   gfx::Rect restored_bounds(10, 10, 50, 50);
-  aura::test::TestWindowDelegate wd;
-  scoped_ptr<aura::Window> window(CreateTestWindow(&wd, restored_bounds));
+  aura::test::TestWindowDelegate delegate;
+  scoped_ptr<aura::Window> window(CreateTestWindow(&delegate, restored_bounds));
 
   wm::ActivateWindow(window.get());
 
   gfx::Rect work_area = Shell::GetScreen()->GetDisplayNearestWindow(
       window.get()).work_area();
 
-  wd.set_maximum_size(gfx::Size(0, 100));
+  delegate.set_maximum_size(gfx::Size(0, 100));
 
   aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow(),
                                        window.get());
   // Double-click the top resize edge.
-  wd.set_window_component(HTTOP);
+  delegate.set_window_component(HTTOP);
   generator.DoubleClickLeftButton();
 
   // The size of the window should be unchanged.
@@ -256,20 +256,20 @@
 TEST_F(WorkspaceEventHandlerTest,
        DoubleClickSingleAxisDoesntResizeHorizontalEdgeIfConstrained) {
   gfx::Rect restored_bounds(10, 10, 50, 50);
-  aura::test::TestWindowDelegate wd;
-  scoped_ptr<aura::Window> window(CreateTestWindow(&wd, restored_bounds));
+  aura::test::TestWindowDelegate delegate;
+  scoped_ptr<aura::Window> window(CreateTestWindow(&delegate, restored_bounds));
 
   wm::ActivateWindow(window.get());
 
   gfx::Rect work_area = Shell::GetScreen()->GetDisplayNearestWindow(
       window.get()).work_area();
 
-  wd.set_maximum_size(gfx::Size(100, 0));
+  delegate.set_maximum_size(gfx::Size(100, 0));
 
   aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow(),
                                        window.get());
   // Double-click the top resize edge.
-  wd.set_window_component(HTRIGHT);
+  delegate.set_window_component(HTRIGHT);
   generator.DoubleClickLeftButton();
 
   // The size of the window should be unchanged.
@@ -279,14 +279,14 @@
 
 TEST_F(WorkspaceEventHandlerTest,
        DoubleClickOrTapWithModalChildDoesntMaximize) {
-  aura::test::TestWindowDelegate wd1;
-  aura::test::TestWindowDelegate wd2;
+  aura::test::TestWindowDelegate delegate1;
+  aura::test::TestWindowDelegate delegate2;
   scoped_ptr<aura::Window> window(
-      CreateTestWindow(&wd1, gfx::Rect(10, 20, 30, 40)));
+      CreateTestWindow(&delegate1, gfx::Rect(10, 20, 30, 40)));
   scoped_ptr<aura::Window> child(
-      CreateTestWindow(&wd2, gfx::Rect(0, 0, 1, 1)));
+      CreateTestWindow(&delegate2, gfx::Rect(0, 0, 1, 1)));
   window->SetProperty(aura::client::kCanMaximizeKey, true);
-  wd1.set_window_component(HTCAPTION);
+  delegate1.set_window_component(HTCAPTION);
 
   child->SetProperty(aura::client::kModalKey, ui::MODAL_TYPE_WINDOW);
   ::wm::AddTransientChild(window.get(), child.get());
@@ -308,9 +308,9 @@
 
 // Test the behavior as a result of double clicking the window header.
 TEST_F(WorkspaceEventHandlerTest, DoubleClickCaptionTogglesMaximize) {
-  aura::test::TestWindowDelegate wd;
+  aura::test::TestWindowDelegate delegate;
   scoped_ptr<aura::Window> window(
-      CreateTestWindow(&wd, gfx::Rect(1, 2, 30, 40)));
+      CreateTestWindow(&delegate, gfx::Rect(1, 2, 30, 40)));
   window->SetProperty(aura::client::kCanMaximizeKey, true);
 
   wm::WindowState* window_state = wm::GetWindowState(window.get());
@@ -321,19 +321,22 @@
   EXPECT_FALSE(window_state->IsMaximized());
 
   // 1) Double clicking a normal window should maximize.
-  wd.set_window_component(HTCAPTION);
+  delegate.set_window_component(HTCAPTION);
   aura::Window* root = Shell::GetPrimaryRootWindow();
   aura::test::EventGenerator generator(root, window.get());
+  generator.ClickLeftButton();
   generator.DoubleClickLeftButton();
   EXPECT_NE(restore_bounds.ToString(), window->bounds().ToString());
   EXPECT_TRUE(window_state->IsMaximized());
 
+  generator.ClickLeftButton();
   generator.DoubleClickLeftButton();
   EXPECT_TRUE(window_state->IsNormalStateType());
   EXPECT_EQ(restore_bounds.ToString(), window->bounds().ToString());
 
   // 2) Double clicking a horizontally maximized window should maximize.
-  wd.set_window_component(HTLEFT);
+  delegate.set_window_component(HTLEFT);
+  generator.ClickLeftButton();
   generator.DoubleClickLeftButton();
   EXPECT_TRUE(window_state->IsNormalStateType());
   EXPECT_EQ(work_area_in_parent.x(), window->bounds().x());
@@ -341,10 +344,12 @@
   EXPECT_EQ(work_area_in_parent.width(), window->bounds().width());
   EXPECT_EQ(restore_bounds.height(), window->bounds().height());
 
-  wd.set_window_component(HTCAPTION);
+  delegate.set_window_component(HTCAPTION);
+  generator.ClickLeftButton();
   generator.DoubleClickLeftButton();
   EXPECT_TRUE(window_state->IsMaximized());
 
+  generator.ClickLeftButton();
   generator.DoubleClickLeftButton();
   EXPECT_TRUE(window_state->IsNormalStateType());
   EXPECT_EQ(restore_bounds.ToString(), window->bounds().ToString());
@@ -354,9 +359,11 @@
   window_state->OnWMEvent(&snap_event);
   EXPECT_TRUE(window_state->IsSnapped());
   generator.MoveMouseTo(window->GetBoundsInRootWindow().CenterPoint());
+  generator.ClickLeftButton();
   generator.DoubleClickLeftButton();
   EXPECT_TRUE(window_state->IsMaximized());
 
+  generator.ClickLeftButton();
   generator.DoubleClickLeftButton();
   EXPECT_TRUE(window_state->IsNormalStateType());
   EXPECT_EQ(restore_bounds.ToString(), window->bounds().ToString());
@@ -366,11 +373,11 @@
 // toggle the maximized state.
 TEST_F(WorkspaceEventHandlerTest,
        DoubleClickMiddleButtonDoesNotToggleMaximize) {
-  aura::test::TestWindowDelegate wd;
+  aura::test::TestWindowDelegate delegate;
   scoped_ptr<aura::Window> window(
-      CreateTestWindow(&wd, gfx::Rect(1, 2, 30, 40)));
+      CreateTestWindow(&delegate, gfx::Rect(1, 2, 30, 40)));
   window->SetProperty(aura::client::kCanMaximizeKey, true);
-  wd.set_window_component(HTCAPTION);
+  delegate.set_window_component(HTCAPTION);
   aura::Window* root = Shell::GetPrimaryRootWindow();
   aura::test::EventGenerator generator(root, window.get());
 
@@ -395,11 +402,11 @@
 }
 
 TEST_F(WorkspaceEventHandlerTest, DoubleTapCaptionTogglesMaximize) {
-  aura::test::TestWindowDelegate wd;
+  aura::test::TestWindowDelegate delegate;
   gfx::Rect bounds(10, 20, 30, 40);
-  scoped_ptr<aura::Window> window(CreateTestWindow(&wd, bounds));
+  scoped_ptr<aura::Window> window(CreateTestWindow(&delegate, bounds));
   window->SetProperty(aura::client::kCanMaximizeKey, true);
-  wd.set_window_component(HTCAPTION);
+  delegate.set_window_component(HTCAPTION);
 
   wm::WindowState* window_state = wm::GetWindowState(window.get());
   EXPECT_FALSE(window_state->IsMaximized());
@@ -422,14 +429,14 @@
 TEST_F(WorkspaceEventHandlerTest, DeleteWhenDragging) {
   // Create a large window in the background. This is necessary so that when we
   // delete |window| WorkspaceEventHandler is still the active event handler.
-  aura::test::TestWindowDelegate wd2;
+  aura::test::TestWindowDelegate delegate2;
   scoped_ptr<aura::Window> window2(
-      CreateTestWindow(&wd2, gfx::Rect(0, 0, 500, 500)));
+      CreateTestWindow(&delegate2, gfx::Rect(0, 0, 500, 500)));
 
-  aura::test::TestWindowDelegate wd;
+  aura::test::TestWindowDelegate delegate;
   const gfx::Rect bounds(10, 20, 30, 40);
-  scoped_ptr<aura::Window> window(CreateTestWindow(&wd, bounds));
-  wd.set_window_component(HTCAPTION);
+  scoped_ptr<aura::Window> window(CreateTestWindow(&delegate, bounds));
+  delegate.set_window_component(HTCAPTION);
   aura::test::EventGenerator generator(window->GetRootWindow());
   generator.MoveMouseToCenterOf(window.get());
   generator.PressLeftButton();
@@ -441,10 +448,10 @@
 
 // Verifies deleting the window while in a run loop doesn't crash.
 TEST_F(WorkspaceEventHandlerTest, DeleteWhileInRunLoop) {
-  aura::test::TestWindowDelegate wd;
+  aura::test::TestWindowDelegate delegate;
   const gfx::Rect bounds(10, 20, 30, 40);
-  scoped_ptr<aura::Window> window(CreateTestWindow(&wd, bounds));
-  wd.set_window_component(HTCAPTION);
+  scoped_ptr<aura::Window> window(CreateTestWindow(&delegate, bounds));
+  delegate.set_window_component(HTCAPTION);
 
   ASSERT_TRUE(aura::client::GetWindowMoveClient(window->GetRootWindow()));
   base::MessageLoop::current()->DeleteSoon(FROM_HERE, window.get());
@@ -454,4 +461,91 @@
                     aura::client::WINDOW_MOVE_SOURCE_MOUSE);
 }
 
+// Verifies that double clicking in the header does not maximize if the target
+// component has changed.
+TEST_F(WorkspaceEventHandlerTest,
+    DoubleClickTwoDifferentTargetsDoesntMaximize) {
+  aura::test::TestWindowDelegate delegate;
+  scoped_ptr<aura::Window> window(
+      CreateTestWindow(&delegate, gfx::Rect(1, 2, 30, 40)));
+  window->SetProperty(aura::client::kCanMaximizeKey, true);
+
+  wm::WindowState* window_state = wm::GetWindowState(window.get());
+  gfx::Rect restore_bounds = window->bounds();
+  gfx::Rect work_area_in_parent = ScreenUtil::GetDisplayWorkAreaBoundsInParent(
+      window.get());
+
+  EXPECT_FALSE(window_state->IsMaximized());
+
+  // First click will go to a client
+  delegate.set_window_component(HTCLIENT);
+  aura::Window* root = Shell::GetPrimaryRootWindow();
+  aura::test::EventGenerator generator(root, window.get());
+  generator.ClickLeftButton();
+  EXPECT_FALSE(window_state->IsMaximized());
+
+  // Second click will go to the header
+  delegate.set_window_component(HTCAPTION);
+  generator.DoubleClickLeftButton();
+  EXPECT_FALSE(window_state->IsMaximized());
+}
+
+// Verifies that double tapping in the header does not maximize if the target
+// component has changed.
+TEST_F(WorkspaceEventHandlerTest, DoubleTapTwoDifferentTargetsDoesntMaximize) {
+  aura::test::TestWindowDelegate delegate;
+  scoped_ptr<aura::Window> window(
+      CreateTestWindow(&delegate, gfx::Rect(1, 2, 30, 40)));
+  window->SetProperty(aura::client::kCanMaximizeKey, true);
+
+  wm::WindowState* window_state = wm::GetWindowState(window.get());
+  gfx::Rect restore_bounds = window->bounds();
+  gfx::Rect work_area_in_parent = ScreenUtil::GetDisplayWorkAreaBoundsInParent(
+      window.get());
+
+  EXPECT_FALSE(window_state->IsMaximized());
+
+  // First tap will go to a client
+  delegate.set_window_component(HTCLIENT);
+  aura::Window* root = Shell::GetPrimaryRootWindow();
+  aura::test::EventGenerator generator(root, window.get());
+  generator.GestureTapAt(gfx::Point(25, 25));
+  EXPECT_FALSE(window_state->IsMaximized());
+
+  // Second tap will go to the header
+  delegate.set_window_component(HTCAPTION);
+  generator.GestureTapAt(gfx::Point(25, 25));
+  EXPECT_FALSE(window_state->IsMaximized());
+}
+
+TEST_F(WorkspaceEventHandlerTest,
+    RightClickDuringDoubleClickDoesntMaximize) {
+  aura::test::TestWindowDelegate delegate;
+  scoped_ptr<aura::Window> window(
+      CreateTestWindow(&delegate, gfx::Rect(1, 2, 30, 40)));
+  window->SetProperty(aura::client::kCanMaximizeKey, true);
+
+  wm::WindowState* window_state = wm::GetWindowState(window.get());
+  gfx::Rect restore_bounds = window->bounds();
+  gfx::Rect work_area_in_parent = ScreenUtil::GetDisplayWorkAreaBoundsInParent(
+      window.get());
+
+  EXPECT_FALSE(window_state->IsMaximized());
+
+  // First click will go to a client
+  delegate.set_window_component(HTCLIENT);
+  aura::Window* root = Shell::GetPrimaryRootWindow();
+  aura::test::EventGenerator generator(root, window.get());
+  generator.ClickLeftButton();
+  EXPECT_FALSE(window_state->IsMaximized());
+
+  // Second click will go to the header
+  delegate.set_window_component(HTCAPTION);
+  generator.PressRightButton();
+  generator.ReleaseRightButton();
+  EXPECT_FALSE(window_state->IsMaximized());
+  generator.DoubleClickLeftButton();
+  EXPECT_FALSE(window_state->IsMaximized());
+}
+
 }  // namespace ash
diff --git a/ash/wm/workspace_controller_unittest.cc b/ash/wm/workspace_controller_unittest.cc
index 6056a2f..a2556cf 100644
--- a/ash/wm/workspace_controller_unittest.cc
+++ b/ash/wm/workspace_controller_unittest.cc
@@ -1461,8 +1461,8 @@
   }
 }
 
-// Verifies events targeting just outside the window edges for panels.
-TEST_F(WorkspaceControllerTest, WindowEdgeHitTestPanel) {
+// Verifies mouse event targeting just outside the window edges for panels.
+TEST_F(WorkspaceControllerTest, WindowEdgeMouseHitTestPanel) {
   aura::test::TestWindowDelegate delegate;
   scoped_ptr<Window> window(CreateTestPanel(&delegate,
                                            gfx::Rect(20, 10, 100, 50)));
@@ -1491,10 +1491,38 @@
       EXPECT_EQ(window.get(), target);
     else
       EXPECT_NE(window.get(), target);
+  }
+}
 
+// Verifies touch event targeting just outside the window edges for panels.
+// The shelf is aligned to the bottom by default, and so touches just below
+// the bottom edge of the panel should not target the panel itself because
+// an AttachedPanelWindowTargeter is installed on the panel container.
+TEST_F(WorkspaceControllerTest, WindowEdgeTouchHitTestPanel) {
+  aura::test::TestWindowDelegate delegate;
+  scoped_ptr<Window> window(CreateTestPanel(&delegate,
+                                            gfx::Rect(20, 10, 100, 50)));
+  ui::EventTarget* root = window->GetRootWindow();
+  ui::EventTargeter* targeter = root->GetEventTargeter();
+  const gfx::Rect bounds = window->bounds();
+  const int kNumPoints = 5;
+  struct {
+    const char* direction;
+    gfx::Point location;
+    bool is_target_hit;
+  } points[kNumPoints] = {
+    { "left", gfx::Point(bounds.x() - 2, bounds.y() + 10), true },
+    { "top", gfx::Point(bounds.x() + 10, bounds.y() - 2), true },
+    { "right", gfx::Point(bounds.right() + 2, bounds.y() + 10), true },
+    { "bottom", gfx::Point(bounds.x() + 10, bounds.bottom() + 2), false },
+    { "outside", gfx::Point(bounds.x() + 10, bounds.y() - 31), false },
+  };
+  for (int i = 0; i < kNumPoints; ++i) {
+    SCOPED_TRACE(points[i].direction);
+    const gfx::Point& location = points[i].location;
     ui::TouchEvent touch(ui::ET_TOUCH_PRESSED, location, 0,
                          ui::EventTimeForNow());
-    target = targeter->FindTargetForEvent(root, &touch);
+    ui::EventTarget* target = targeter->FindTargetForEvent(root, &touch);
     if (points[i].is_target_hit)
       EXPECT_EQ(window.get(), target);
     else
diff --git a/base/BUILD.gn b/base/BUILD.gn
index 0ee30dc..32f75a2 100644
--- a/base/BUILD.gn
+++ b/base/BUILD.gn
@@ -3,6 +3,7 @@
 # found in the LICENSE file.
 
 import("//build/config/ui.gni")
+import("//build/config/android/rules.gni")
 
 component("base") {
   sources = [
@@ -11,16 +12,21 @@
     "third_party/dmg_fp/dtoa_wrapper.cc",
     "third_party/icu/icu_utf.cc",
     "third_party/icu/icu_utf.h",
+    "third_party/superfasthash/superfasthash.c",
     "allocator/allocator_extension.cc",
     "allocator/allocator_extension.h",
     "allocator/type_profiler_control.cc",
     "allocator/type_profiler_control.h",
-    "android/activity_status.cc",
-    "android/activity_status.h",
+    "android/application_status_listener.cc",
+    "android/application_status_listener.h",
     "android/base_jni_registrar.cc",
     "android/base_jni_registrar.h",
     "android/build_info.cc",
     "android/build_info.h",
+    "android/command_line_android.cc",
+    "android/command_line_android.h",
+    "android/content_uri_utils.cc",
+    "android/content_uri_utils.h",
     "android/cpu_features.cc",
     "android/fifo_utils.cc",
     "android/fifo_utils.h",
@@ -32,14 +38,19 @@
     "android/jni_android.h",
     "android/jni_array.cc",
     "android/jni_array.h",
-    "android/jni_helper.cc",
     "android/jni_helper.h",
     "android/jni_registrar.cc",
     "android/jni_registrar.h",
     "android/jni_string.cc",
     "android/jni_string.h",
+    "android/jni_weak_ref.cc",
+    "android/jni_weak_ref.h",
+    "android/library_loader/library_loader_hooks.cc",
+    "android/library_loader/library_loader_hooks.h",
     "android/memory_pressure_listener_android.cc",
     "android/memory_pressure_listener_android.h",
+    "android/java_handler_thread.cc",
+    "android/java_handler_thread.h",
     "android/path_service_android.cc",
     "android/path_service_android.h",
     "android/path_utils.cc",
@@ -75,6 +86,8 @@
     "base64.cc",
     "base64.h",
     "basictypes.h",
+    "big_endian.cc",
+    "big_endian.h",
     "bind.h",
     "bind_helpers.cc",
     "bind_helpers.h",
@@ -104,8 +117,6 @@
     "debug/alias.h",
     "debug/crash_logging.cc",
     "debug/crash_logging.h",
-    "debug/debug_on_start_win.cc",
-    "debug/debug_on_start_win.h",
     "debug/debugger.cc",
     "debug/debugger.h",
     "debug/debugger_posix.cc",
@@ -679,32 +690,6 @@
     "win/wrapped_window_proc.h",
   ]
 
-  if (is_android) {
-    sources -= [
-      "debug/stack_trace_posix.cc",
-    ]
-
-    # TODO(dpranke): crbug.com/360936.
-    # These are disabled until we have JNI support on Android.
-    sources -= [
-      "android/activity_status.cc",
-      "android/base_jni_registrar.cc",
-      "android/base_jni_registrar.h",
-      "android/build_info.cc",
-      "android/build_info.h",
-      "android/cpu_features.cc",
-      "android/important_file_writer_android.cc",
-      "android/memory_pressure_listener_android.cc",
-      "android/path_service_android.cc",
-      "android/path_utils.cc",
-      "android/sys_utils.cc",
-      "android/trace_event_binding.cc",
-      "message_loop/message_pump_android.cc",
-      "power_monitor/power_monitor_device_source_android.cc",
-      "threading/platform_thread_android.cc",
-    ]
-  }
-
   # TODO(brettw) I don't understand the conditions this file is used.
   sources -= [ "files/file_path_watcher_stub.cc" ]
 
@@ -731,9 +716,14 @@
     "//third_party/modp_b64",
   ]
 
-  if (!is_chromeos) {
+  if (is_android) {
+    deps += [
+      ":base_jni_headers",
+      "//third_party/android_tools:cpu_features"
+    ]
+
     sources -= [
-      "sys_info_chromeos.cc",
+      "debug/stack_trace_posix.cc",
     ]
   }
 
@@ -865,12 +855,14 @@
     "i18n/bidi_line_iterator.h",
     "i18n/break_iterator.cc",
     "i18n/break_iterator.h",
-    "i18n/char_iterator.cc",
-    "i18n/char_iterator.h",
     "i18n/case_conversion.cc",
     "i18n/case_conversion.h",
+    "i18n/char_iterator.cc",
+    "i18n/char_iterator.h",
     "i18n/file_util_icu.cc",
     "i18n/file_util_icu.h",
+    "i18n/i18n_constants.cc",
+    "i18n/i18n_constants.h",
     "i18n/icu_encoding_detection.cc",
     "i18n/icu_encoding_detection.h",
     "i18n/icu_string_conversions.cc",
@@ -881,12 +873,18 @@
     "i18n/number_formatting.h",
     "i18n/rtl.cc",
     "i18n/rtl.h",
+    "i18n/streaming_utf8_validator.cc",
+    "i18n/streaming_utf8_validator.h",
     "i18n/string_compare.cc",
     "i18n/string_compare.h",
     "i18n/string_search.cc",
     "i18n/string_search.h",
     "i18n/time_formatting.cc",
     "i18n/time_formatting.h",
+    "i18n/timezone.cc",
+    "i18n/timezone.h",
+    "i18n/utf8_validator_tables.cc",
+    "i18n/utf8_validator_tables.h",
   ]
   defines = [ "BASE_I18N_IMPLEMENTATION" ]
   configs += [ "//build/config/compiler:wexit_time_destructors" ]
@@ -913,3 +911,27 @@
   #  'optimize': 'max',
   #},
 }
+
+if (is_android) {
+  generate_jni("base_jni_headers") {
+    sources = [
+      "android/java/src/org/chromium/base/ApplicationStatus.java",
+      "android/java/src/org/chromium/base/BuildInfo.java",
+      "android/java/src/org/chromium/base/CommandLine.java",
+      "android/java/src/org/chromium/base/ContentUriUtils.java",
+      "android/java/src/org/chromium/base/CpuFeatures.java",
+      "android/java/src/org/chromium/base/ImportantFileWriterAndroid.java",
+      "android/java/src/org/chromium/base/library_loader/LibraryLoader.java",
+      "android/java/src/org/chromium/base/MemoryPressureListener.java",
+      "android/java/src/org/chromium/base/JavaHandlerThread.java",
+      "android/java/src/org/chromium/base/PathService.java",
+      "android/java/src/org/chromium/base/PathUtils.java",
+      "android/java/src/org/chromium/base/PowerMonitor.java",
+      "android/java/src/org/chromium/base/SystemMessageHandler.java",
+      "android/java/src/org/chromium/base/SysUtils.java",
+      "android/java/src/org/chromium/base/ThreadUtils.java",
+      "android/java/src/org/chromium/base/TraceEvent.java",
+    ]
+    jni_package = "base"
+  }
+}
diff --git a/base/allocator/allocator_extension_thunks.target.darwin-arm.mk b/base/allocator/allocator_extension_thunks.target.darwin-arm.mk
index 301d7ce..37a79c4 100644
--- a/base/allocator/allocator_extension_thunks.target.darwin-arm.mk
+++ b/base/allocator/allocator_extension_thunks.target.darwin-arm.mk
@@ -220,7 +220,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/allocator/allocator_extension_thunks.target.darwin-mips.mk b/base/allocator/allocator_extension_thunks.target.darwin-mips.mk
index 8523563..2694099 100644
--- a/base/allocator/allocator_extension_thunks.target.darwin-mips.mk
+++ b/base/allocator/allocator_extension_thunks.target.darwin-mips.mk
@@ -218,7 +218,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/allocator/allocator_extension_thunks.target.darwin-x86.mk b/base/allocator/allocator_extension_thunks.target.darwin-x86.mk
index d9761d9..f8ac07f 100644
--- a/base/allocator/allocator_extension_thunks.target.darwin-x86.mk
+++ b/base/allocator/allocator_extension_thunks.target.darwin-x86.mk
@@ -218,7 +218,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/allocator/allocator_extension_thunks.target.darwin-x86_64.mk b/base/allocator/allocator_extension_thunks.target.darwin-x86_64.mk
index 78b4b22..780e341 100644
--- a/base/allocator/allocator_extension_thunks.target.darwin-x86_64.mk
+++ b/base/allocator/allocator_extension_thunks.target.darwin-x86_64.mk
@@ -218,7 +218,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/allocator/allocator_extension_thunks.target.linux-arm.mk b/base/allocator/allocator_extension_thunks.target.linux-arm.mk
index 301d7ce..37a79c4 100644
--- a/base/allocator/allocator_extension_thunks.target.linux-arm.mk
+++ b/base/allocator/allocator_extension_thunks.target.linux-arm.mk
@@ -220,7 +220,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/allocator/allocator_extension_thunks.target.linux-mips.mk b/base/allocator/allocator_extension_thunks.target.linux-mips.mk
index 8523563..2694099 100644
--- a/base/allocator/allocator_extension_thunks.target.linux-mips.mk
+++ b/base/allocator/allocator_extension_thunks.target.linux-mips.mk
@@ -218,7 +218,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/allocator/allocator_extension_thunks.target.linux-x86.mk b/base/allocator/allocator_extension_thunks.target.linux-x86.mk
index d9761d9..f8ac07f 100644
--- a/base/allocator/allocator_extension_thunks.target.linux-x86.mk
+++ b/base/allocator/allocator_extension_thunks.target.linux-x86.mk
@@ -218,7 +218,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/allocator/allocator_extension_thunks.target.linux-x86_64.mk b/base/allocator/allocator_extension_thunks.target.linux-x86_64.mk
index 78b4b22..780e341 100644
--- a/base/allocator/allocator_extension_thunks.target.linux-x86_64.mk
+++ b/base/allocator/allocator_extension_thunks.target.linux-x86_64.mk
@@ -218,7 +218,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/android/java/src/org/chromium/base/TraceEvent.java b/base/android/java/src/org/chromium/base/TraceEvent.java
index ff1ff1f..c7b81ee 100644
--- a/base/android/java/src/org/chromium/base/TraceEvent.java
+++ b/base/android/java/src/org/chromium/base/TraceEvent.java
@@ -162,16 +162,22 @@
                         new IdleTracingLooperMonitor() : new BasicLooperMonitor();
     }
 
+
     /**
-     * Calling this will cause enabled() to be updated to match that set on the native side.
-     * The native library must be loaded before calling this method.
+     * Register an enabled observer, such that java traces are always enabled with native.
      */
-    public static void setEnabledToMatchNative() {
-        boolean enabled = nativeTraceEnabled();
-        if (sEnabled == enabled) return;
-        sEnabled = enabled;
-        ThreadUtils.getUiThreadLooper().setMessageLogging(
-            enabled() ? LooperMonitorHolder.sInstance : null);
+    public static void registerNativeEnabledObserver() {
+        nativeRegisterEnabledObserver();
+    }
+
+    /**
+     * Notification from native that tracing is enabled/disabled.
+     */
+    @CalledByNative
+    public static void setEnabled(boolean enabled) {
+       sEnabled = enabled;
+       ThreadUtils.getUiThreadLooper().setMessageLogging(
+           enabled ? LooperMonitorHolder.sInstance : null);
     }
 
     /**
@@ -180,12 +186,12 @@
      * systrace, this is for WebView only.
      */
     public static void setATraceEnabled(boolean enabled) {
+        if (sEnabled == enabled) return;
         if (enabled) {
             nativeStartATrace();
         } else {
             nativeStopATrace();
         }
-        setEnabledToMatchNative();
     }
 
     /**
@@ -340,7 +346,7 @@
         return stack[4].getClassName() + "." + stack[4].getMethodName();
     }
 
-    private static native boolean nativeTraceEnabled();
+    private static native void nativeRegisterEnabledObserver();
     private static native void nativeStartATrace();
     private static native void nativeStopATrace();
     private static native void nativeInstant(String name, String arg);
diff --git a/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java b/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java
index 0dc91dd..4c99512 100644
--- a/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java
+++ b/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java
@@ -215,7 +215,10 @@
         // following calls).
         sInitialized = true;
         CommandLine.enableNativeProxy();
-        TraceEvent.setEnabledToMatchNative();
+
+        // From now on, keep tracing in sync with native.
+        TraceEvent.registerNativeEnabledObserver();
+
         // Record histogram for the Chromium linker.
         if (Linker.isUsed()) {
             nativeRecordChromiumAndroidLinkerHistogram(Linker.loadAtFixedAddressFailed(),
diff --git a/base/android/jni_helper.cc b/base/android/jni_helper.cc
deleted file mode 100644
index fcb610e..0000000
--- a/base/android/jni_helper.cc
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright (c) 2012 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 "base/android/jni_helper.h"
-
-#include "base/android/jni_android.h"
-#include "base/logging.h"
-
-using base::android::AttachCurrentThread;
-
-JavaObjectWeakGlobalRef::JavaObjectWeakGlobalRef()
-  : obj_(NULL) {
-}
-
-JavaObjectWeakGlobalRef::JavaObjectWeakGlobalRef(
-    const JavaObjectWeakGlobalRef& orig)
-    : obj_(NULL) {
-  Assign(orig);
-}
-
-JavaObjectWeakGlobalRef::JavaObjectWeakGlobalRef(JNIEnv* env, jobject obj)
-    : obj_(env->NewWeakGlobalRef(obj)) {
-  DCHECK(obj_);
-}
-
-JavaObjectWeakGlobalRef::~JavaObjectWeakGlobalRef() {
-  reset();
-}
-
-void JavaObjectWeakGlobalRef::operator=(const JavaObjectWeakGlobalRef& rhs) {
-  Assign(rhs);
-}
-
-void JavaObjectWeakGlobalRef::reset() {
-  if (obj_) {
-    AttachCurrentThread()->DeleteWeakGlobalRef(obj_);
-    obj_ = NULL;
-  }
-}
-
-base::android::ScopedJavaLocalRef<jobject>
-    JavaObjectWeakGlobalRef::get(JNIEnv* env) const {
-  return GetRealObject(env, obj_);
-}
-
-base::android::ScopedJavaLocalRef<jobject> GetRealObject(
-    JNIEnv* env, jweak obj) {
-  jobject real = NULL;
-  if (obj) {
-    real = env->NewLocalRef(obj);
-    if (!real)
-      DLOG(ERROR) << "The real object has been deleted!";
-  }
-  return base::android::ScopedJavaLocalRef<jobject>(env, real);
-}
-
-void JavaObjectWeakGlobalRef::Assign(const JavaObjectWeakGlobalRef& other) {
-  if (&other == this)
-    return;
-
-  JNIEnv* env = AttachCurrentThread();
-  if (obj_)
-    env->DeleteWeakGlobalRef(obj_);
-
-  obj_ = other.obj_ ? env->NewWeakGlobalRef(other.obj_) : NULL;
-}
diff --git a/base/android/jni_helper.h b/base/android/jni_helper.h
index 895bf95..111fa22 100644
--- a/base/android/jni_helper.h
+++ b/base/android/jni_helper.h
@@ -2,40 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef BASE_ANDROID_JNI_HELPER_H_
-#define BASE_ANDROID_JNI_HELPER_H_
-
-#include <jni.h>
-
-#include "base/base_export.h"
-#include "base/android/scoped_java_ref.h"
-
-// Manages WeakGlobalRef lifecycle.
-// This class is not thread-safe w.r.t. get() and reset(). Multiple threads may
-// safely use get() concurrently, but if the user calls reset() (or of course,
-// calls the destructor) they'll need to provide their own synchronization.
-class BASE_EXPORT JavaObjectWeakGlobalRef {
- public:
-  JavaObjectWeakGlobalRef();
-  JavaObjectWeakGlobalRef(const JavaObjectWeakGlobalRef& orig);
-  JavaObjectWeakGlobalRef(JNIEnv* env, jobject obj);
-  virtual ~JavaObjectWeakGlobalRef();
-
-  void operator=(const JavaObjectWeakGlobalRef& rhs);
-
-  base::android::ScopedJavaLocalRef<jobject> get(JNIEnv* env) const;
-
-  void reset();
-
- private:
-  void Assign(const JavaObjectWeakGlobalRef& rhs);
-
-  jweak obj_;
-};
-
-// Get the real object stored in the weak reference returned as a
-// ScopedJavaLocalRef.
-BASE_EXPORT base::android::ScopedJavaLocalRef<jobject> GetRealObject(
-    JNIEnv* env, jweak obj);
-
-#endif  // BASE_ANDROID_JNI_HELPER_H_
+// This file has been renamed. Please use the new name.
+// TODO(newt): Remove this file when all users have been updated.
+#include "base/android/jni_weak_ref.h"
diff --git a/base/android/jni_weak_ref.cc b/base/android/jni_weak_ref.cc
new file mode 100644
index 0000000..35a76da
--- /dev/null
+++ b/base/android/jni_weak_ref.cc
@@ -0,0 +1,67 @@
+// 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.
+
+#include "base/android/jni_weak_ref.h"
+
+#include "base/android/jni_android.h"
+#include "base/logging.h"
+
+using base::android::AttachCurrentThread;
+
+JavaObjectWeakGlobalRef::JavaObjectWeakGlobalRef()
+  : obj_(NULL) {
+}
+
+JavaObjectWeakGlobalRef::JavaObjectWeakGlobalRef(
+    const JavaObjectWeakGlobalRef& orig)
+    : obj_(NULL) {
+  Assign(orig);
+}
+
+JavaObjectWeakGlobalRef::JavaObjectWeakGlobalRef(JNIEnv* env, jobject obj)
+    : obj_(env->NewWeakGlobalRef(obj)) {
+  DCHECK(obj_);
+}
+
+JavaObjectWeakGlobalRef::~JavaObjectWeakGlobalRef() {
+  reset();
+}
+
+void JavaObjectWeakGlobalRef::operator=(const JavaObjectWeakGlobalRef& rhs) {
+  Assign(rhs);
+}
+
+void JavaObjectWeakGlobalRef::reset() {
+  if (obj_) {
+    AttachCurrentThread()->DeleteWeakGlobalRef(obj_);
+    obj_ = NULL;
+  }
+}
+
+base::android::ScopedJavaLocalRef<jobject>
+    JavaObjectWeakGlobalRef::get(JNIEnv* env) const {
+  return GetRealObject(env, obj_);
+}
+
+base::android::ScopedJavaLocalRef<jobject> GetRealObject(
+    JNIEnv* env, jweak obj) {
+  jobject real = NULL;
+  if (obj) {
+    real = env->NewLocalRef(obj);
+    if (!real)
+      DLOG(ERROR) << "The real object has been deleted!";
+  }
+  return base::android::ScopedJavaLocalRef<jobject>(env, real);
+}
+
+void JavaObjectWeakGlobalRef::Assign(const JavaObjectWeakGlobalRef& other) {
+  if (&other == this)
+    return;
+
+  JNIEnv* env = AttachCurrentThread();
+  if (obj_)
+    env->DeleteWeakGlobalRef(obj_);
+
+  obj_ = other.obj_ ? env->NewWeakGlobalRef(other.obj_) : NULL;
+}
diff --git a/base/android/jni_weak_ref.h b/base/android/jni_weak_ref.h
new file mode 100644
index 0000000..ef39b8a
--- /dev/null
+++ b/base/android/jni_weak_ref.h
@@ -0,0 +1,41 @@
+// 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.
+
+#ifndef BASE_ANDROID_JNI_WEAK_REF_H_
+#define BASE_ANDROID_JNI_WEAK_REF_H_
+
+#include <jni.h>
+
+#include "base/android/scoped_java_ref.h"
+#include "base/base_export.h"
+
+// Manages WeakGlobalRef lifecycle.
+// This class is not thread-safe w.r.t. get() and reset(). Multiple threads may
+// safely use get() concurrently, but if the user calls reset() (or of course,
+// calls the destructor) they'll need to provide their own synchronization.
+class BASE_EXPORT JavaObjectWeakGlobalRef {
+ public:
+  JavaObjectWeakGlobalRef();
+  JavaObjectWeakGlobalRef(const JavaObjectWeakGlobalRef& orig);
+  JavaObjectWeakGlobalRef(JNIEnv* env, jobject obj);
+  virtual ~JavaObjectWeakGlobalRef();
+
+  void operator=(const JavaObjectWeakGlobalRef& rhs);
+
+  base::android::ScopedJavaLocalRef<jobject> get(JNIEnv* env) const;
+
+  void reset();
+
+ private:
+  void Assign(const JavaObjectWeakGlobalRef& rhs);
+
+  jweak obj_;
+};
+
+// Get the real object stored in the weak reference returned as a
+// ScopedJavaLocalRef.
+BASE_EXPORT base::android::ScopedJavaLocalRef<jobject> GetRealObject(
+    JNIEnv* env, jweak obj);
+
+#endif  // BASE_ANDROID_JNI_WEAK_REF_H_
diff --git a/base/android/trace_event_binding.cc b/base/android/trace_event_binding.cc
index f802f3d..e261411 100644
--- a/base/android/trace_event_binding.cc
+++ b/base/android/trace_event_binding.cc
@@ -9,6 +9,7 @@
 #include <set>
 
 #include "base/debug/trace_event.h"
+#include "base/debug/trace_event_impl.h"
 #include "base/lazy_instance.h"
 #include "jni/TraceEvent_jni.h"
 
@@ -54,10 +55,27 @@
   DISALLOW_COPY_AND_ASSIGN(TraceEventDataConverter);
 };
 
+class TraceEnabledObserver : public debug::TraceLog::EnabledStateObserver {
+  public:
+    virtual void OnTraceLogEnabled() OVERRIDE {
+      JNIEnv* env = base::android::AttachCurrentThread();
+      base::android::Java_TraceEvent_setEnabled(env, true);
+    }
+    virtual void OnTraceLogDisabled() OVERRIDE {
+      JNIEnv* env = base::android::AttachCurrentThread();
+      base::android::Java_TraceEvent_setEnabled(env, false);
+    }
+};
+
+base::LazyInstance<TraceEnabledObserver>::Leaky g_trace_enabled_state_observer_;
+
 }  // namespace
 
-static jboolean TraceEnabled(JNIEnv* env, jclass clazz) {
-  return base::debug::TraceLog::GetInstance()->IsEnabled();
+static void RegisterEnabledObserver(JNIEnv* env, jclass clazz) {
+  bool enabled = debug::TraceLog::GetInstance()->IsEnabled();
+  base::android::Java_TraceEvent_setEnabled(env, enabled);
+  debug::TraceLog::GetInstance()->AddEnabledStateObserver(
+      g_trace_enabled_state_observer_.Pointer());
 }
 
 static void StartATrace(JNIEnv* env, jclass clazz) {
diff --git a/base/atomicops_internals_arm64_gcc.h b/base/atomicops_internals_arm64_gcc.h
index 5cffb1d..bb6a346 100644
--- a/base/atomicops_internals_arm64_gcc.h
+++ b/base/atomicops_internals_arm64_gcc.h
@@ -284,7 +284,7 @@
 }
 
 inline Atomic64 Acquire_Load(volatile const Atomic64* ptr) {
-  Atomic32 value;
+  Atomic64 value;
 
   __asm__ __volatile__ (  // NOLINT
     "ldar %x[value], %[ptr]  \n\t"
diff --git a/base/base.gyp b/base/base.gyp
index 0e3e265..f2151b3 100644
--- a/base/base.gyp
+++ b/base/base.gyp
@@ -40,14 +40,6 @@
             ['chromeos==1', {
               'sources/': [ ['include', '_chromeos\\.cc$'] ]
             }],
-            ['toolkit_uses_gtk==1', {
-              'dependencies': [
-                '../build/linux/system.gyp:gtk',
-              ],
-              'export_dependent_settings': [
-                '../build/linux/system.gyp:gtk',
-              ],
-            }],
           ],
           'dependencies': [
             'symbolize',
@@ -220,8 +212,6 @@
         'message_loop/message_pump_android.h',
         'message_loop/message_pump_glib.cc',
         'message_loop/message_pump_glib.h',
-        'message_loop/message_pump_gtk.cc',
-        'message_loop/message_pump_gtk.h',
         'message_loop/message_pump_io_ios.cc',
         'message_loop/message_pump_io_ios.h',
         'message_loop/message_pump_observer.h',
@@ -253,12 +243,6 @@
         '../third_party/icu/icu.gyp:icuuc',
       ],
       'conditions': [
-        ['toolkit_uses_gtk==1', {
-          'dependencies': [
-            # i18n/rtl.cc uses gtk
-            '../build/linux/system.gyp:gtk',
-          ],
-        }],
         ['OS == "win"', {
           # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
           'msvs_disabled_warnings': [
@@ -696,13 +680,10 @@
             'file_version_info_unittest.cc',
           ],
           'conditions': [
-            [ 'toolkit_uses_gtk==1', {
+            [ 'desktop_linux==1', {
               'sources': [
                 'nix/xdg_util_unittest.cc',
               ],
-              'dependencies': [
-                '../build/linux/system.gyp:gtk',
-              ]
             }],
           ],
         }],
@@ -833,12 +814,6 @@
         'base',
       ],
       'conditions': [
-        ['toolkit_uses_gtk==1', {
-          'dependencies': [
-            # test_suite initializes GTK.
-            '../build/linux/system.gyp:gtk',
-          ],
-        }],
         ['os_posix==0', {
           'sources!': [
             'test/scoped_locale.cc',
@@ -974,17 +949,6 @@
           'PERF_TEST',
         ],
       },
-      'conditions': [
-        ['toolkit_uses_gtk==1', {
-          'dependencies': [
-            # Needed to handle the #include chain:
-            #   base/test/perf_test_suite.h
-            #   base/test/test_suite.h
-            #   gtk/gtk.h
-            '../build/linux/system.gyp:gtk',
-          ],
-        }],
-      ],
     },
     {
       'target_name': 'sanitizer_options',
@@ -1003,8 +967,23 @@
       'include_dirs': [
         '..',
       ],
+      # Some targets may want to opt-out from ASan, TSan and MSan and link
+      # without the corresponding runtime libraries. We drop the libc++
+      # dependency and omit the compiler flags to avoid bringing instrumented
+      # code to those targets.
+      'conditions': [
+        ['use_custom_libcxx==1', {
+          'dependencies!': [
+            '../third_party/libc++/libc++.gyp:libc++',
+            '../third_party/libc++abi/libc++abi.gyp:libc++abi',
+          ],
+        }],
+      ],
       'cflags!': [
         '-fsanitize=address',
+        '-fsanitize=thread',
+        '-fsanitize=memory',
+        '-fsanitize-memory-track-origins',
       ],
       'direct_dependent_settings': {
         'ldflags': [
@@ -1384,10 +1363,12 @@
           'target_name': 'chromium_android_linker',
           'type': 'shared_library',
           'conditions': [
-            ['android_webview_build == 0', {
-              # Avoid breaking the webview build because it doesn't have
-              # <(android_ndk_root)/crazy_linker.gyp. Note that it never uses
-              # the linker anyway.
+            ['android_webview_build == 0 and target_arch != "x64" and \
+               target_arch != "arm64"', {
+              # Avoid breaking the webview/64-bit build because they
+              # don't have <(android_ndk_root)/crazy_linker.gyp.
+              # Note that webview never uses the linker anyway.
+              # Note there is no 64-bit support in the linker.
               'sources': [
                 'android/linker/linker_jni.cc',
               ],
@@ -1410,7 +1391,6 @@
           ],
           'variables': {
             'test_suite_name': 'base_perftests',
-            'input_shlib_path': '<(SHARED_LIB_DIR)/<(SHARED_LIB_PREFIX)base_perftests<(SHARED_LIB_SUFFIX)',
           },
           'includes': [ '../build/apk_test.gypi' ],
         },
@@ -1449,7 +1429,6 @@
           ],
           'variables': {
             'test_suite_name': 'base_unittests',
-            'input_shlib_path': '<(SHARED_LIB_DIR)/<(SHARED_LIB_PREFIX)base_unittests<(SHARED_LIB_SUFFIX)',
           },
           'includes': [ '../build/apk_test.gypi' ],
         },
diff --git a/base/base.gypi b/base/base.gypi
index 92ecf6e..09a3afa 100644
--- a/base/base.gypi
+++ b/base/base.gypi
@@ -47,12 +47,13 @@
           'android/jni_android.h',
           'android/jni_array.cc',
           'android/jni_array.h',
-          'android/jni_helper.cc',
           'android/jni_helper.h',
           'android/jni_registrar.cc',
           'android/jni_registrar.h',
           'android/jni_string.cc',
           'android/jni_string.h',
+          'android/jni_weak_ref.cc',
+          'android/jni_weak_ref.h',
           'android/library_loader/library_loader_hooks.cc',
           'android/library_loader/library_loader_hooks.h',
           'android/memory_pressure_listener_android.cc',
@@ -130,8 +131,6 @@
           'debug/alias.h',
           'debug/crash_logging.cc',
           'debug/crash_logging.h',
-          'debug/debug_on_start_win.cc',
-          'debug/debug_on_start_win.h',
           'debug/debugger.cc',
           'debug/debugger.h',
           'debug/debugger_posix.cc',
@@ -733,9 +732,6 @@
                 'message_loop/message_pump_glib.cc',
               ],
           }],
-          ['<(toolkit_uses_gtk)==0 or >(nacl_untrusted_build)==1', {
-            'sources!': ['message_loop/message_pump_gtk.cc'],
-          }],
           ['(OS != "linux" and <(os_bsd) != 1 and OS != "android") or >(nacl_untrusted_build)==1', {
               'sources!': [
                 # Not automatically excluded by the *linux.cc rules.
diff --git a/base/base.target.darwin-arm.mk b/base/base.target.darwin-arm.mk
index 7e36062..cf66f7d 100644
--- a/base/base.target.darwin-arm.mk
+++ b/base/base.target.darwin-arm.mk
@@ -53,9 +53,9 @@
 	base/android/scoped_java_ref.cc \
 	base/android/jni_android.cc \
 	base/android/jni_array.cc \
-	base/android/jni_helper.cc \
 	base/android/jni_registrar.cc \
 	base/android/jni_string.cc \
+	base/android/jni_weak_ref.cc \
 	base/android/library_loader/library_loader_hooks.cc \
 	base/android/memory_pressure_listener_android.cc \
 	base/android/java_handler_thread.cc \
@@ -459,7 +459,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/base.target.darwin-mips.mk b/base/base.target.darwin-mips.mk
index fd8de30..4b0f615 100644
--- a/base/base.target.darwin-mips.mk
+++ b/base/base.target.darwin-mips.mk
@@ -53,9 +53,9 @@
 	base/android/scoped_java_ref.cc \
 	base/android/jni_android.cc \
 	base/android/jni_array.cc \
-	base/android/jni_helper.cc \
 	base/android/jni_registrar.cc \
 	base/android/jni_string.cc \
+	base/android/jni_weak_ref.cc \
 	base/android/library_loader/library_loader_hooks.cc \
 	base/android/memory_pressure_listener_android.cc \
 	base/android/java_handler_thread.cc \
@@ -455,7 +455,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/base.target.darwin-x86.mk b/base/base.target.darwin-x86.mk
index c6e90d7..0acbf3f 100644
--- a/base/base.target.darwin-x86.mk
+++ b/base/base.target.darwin-x86.mk
@@ -53,9 +53,9 @@
 	base/android/scoped_java_ref.cc \
 	base/android/jni_android.cc \
 	base/android/jni_array.cc \
-	base/android/jni_helper.cc \
 	base/android/jni_registrar.cc \
 	base/android/jni_string.cc \
+	base/android/jni_weak_ref.cc \
 	base/android/library_loader/library_loader_hooks.cc \
 	base/android/memory_pressure_listener_android.cc \
 	base/android/java_handler_thread.cc \
@@ -458,7 +458,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/base.target.darwin-x86_64.mk b/base/base.target.darwin-x86_64.mk
index 184a8de..7f3b813 100644
--- a/base/base.target.darwin-x86_64.mk
+++ b/base/base.target.darwin-x86_64.mk
@@ -53,9 +53,9 @@
 	base/android/scoped_java_ref.cc \
 	base/android/jni_android.cc \
 	base/android/jni_array.cc \
-	base/android/jni_helper.cc \
 	base/android/jni_registrar.cc \
 	base/android/jni_string.cc \
+	base/android/jni_weak_ref.cc \
 	base/android/library_loader/library_loader_hooks.cc \
 	base/android/memory_pressure_listener_android.cc \
 	base/android/java_handler_thread.cc \
@@ -458,7 +458,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/base.target.linux-arm.mk b/base/base.target.linux-arm.mk
index 7e36062..cf66f7d 100644
--- a/base/base.target.linux-arm.mk
+++ b/base/base.target.linux-arm.mk
@@ -53,9 +53,9 @@
 	base/android/scoped_java_ref.cc \
 	base/android/jni_android.cc \
 	base/android/jni_array.cc \
-	base/android/jni_helper.cc \
 	base/android/jni_registrar.cc \
 	base/android/jni_string.cc \
+	base/android/jni_weak_ref.cc \
 	base/android/library_loader/library_loader_hooks.cc \
 	base/android/memory_pressure_listener_android.cc \
 	base/android/java_handler_thread.cc \
@@ -459,7 +459,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/base.target.linux-mips.mk b/base/base.target.linux-mips.mk
index fd8de30..4b0f615 100644
--- a/base/base.target.linux-mips.mk
+++ b/base/base.target.linux-mips.mk
@@ -53,9 +53,9 @@
 	base/android/scoped_java_ref.cc \
 	base/android/jni_android.cc \
 	base/android/jni_array.cc \
-	base/android/jni_helper.cc \
 	base/android/jni_registrar.cc \
 	base/android/jni_string.cc \
+	base/android/jni_weak_ref.cc \
 	base/android/library_loader/library_loader_hooks.cc \
 	base/android/memory_pressure_listener_android.cc \
 	base/android/java_handler_thread.cc \
@@ -455,7 +455,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/base.target.linux-x86.mk b/base/base.target.linux-x86.mk
index c6e90d7..0acbf3f 100644
--- a/base/base.target.linux-x86.mk
+++ b/base/base.target.linux-x86.mk
@@ -53,9 +53,9 @@
 	base/android/scoped_java_ref.cc \
 	base/android/jni_android.cc \
 	base/android/jni_array.cc \
-	base/android/jni_helper.cc \
 	base/android/jni_registrar.cc \
 	base/android/jni_string.cc \
+	base/android/jni_weak_ref.cc \
 	base/android/library_loader/library_loader_hooks.cc \
 	base/android/memory_pressure_listener_android.cc \
 	base/android/java_handler_thread.cc \
@@ -458,7 +458,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/base.target.linux-x86_64.mk b/base/base.target.linux-x86_64.mk
index 184a8de..7f3b813 100644
--- a/base/base.target.linux-x86_64.mk
+++ b/base/base.target.linux-x86_64.mk
@@ -53,9 +53,9 @@
 	base/android/scoped_java_ref.cc \
 	base/android/jni_android.cc \
 	base/android/jni_array.cc \
-	base/android/jni_helper.cc \
 	base/android/jni_registrar.cc \
 	base/android/jni_string.cc \
+	base/android/jni_weak_ref.cc \
 	base/android/library_loader/library_loader_hooks.cc \
 	base/android/memory_pressure_listener_android.cc \
 	base/android/java_handler_thread.cc \
@@ -458,7 +458,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/base_i18n.target.darwin-arm.mk b/base/base_i18n.target.darwin-arm.mk
index 8e51ebe..11665f0 100644
--- a/base/base_i18n.target.darwin-arm.mk
+++ b/base/base_i18n.target.darwin-arm.mk
@@ -251,7 +251,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/base_i18n.target.darwin-mips.mk b/base/base_i18n.target.darwin-mips.mk
index ec60ec9..db05dcb 100644
--- a/base/base_i18n.target.darwin-mips.mk
+++ b/base/base_i18n.target.darwin-mips.mk
@@ -247,7 +247,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/base_i18n.target.darwin-x86.mk b/base/base_i18n.target.darwin-x86.mk
index 793f028..3d5883b 100644
--- a/base/base_i18n.target.darwin-x86.mk
+++ b/base/base_i18n.target.darwin-x86.mk
@@ -249,7 +249,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/base_i18n.target.darwin-x86_64.mk b/base/base_i18n.target.darwin-x86_64.mk
index bc45a38..7419913 100644
--- a/base/base_i18n.target.darwin-x86_64.mk
+++ b/base/base_i18n.target.darwin-x86_64.mk
@@ -249,7 +249,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/base_i18n.target.linux-arm.mk b/base/base_i18n.target.linux-arm.mk
index 8e51ebe..11665f0 100644
--- a/base/base_i18n.target.linux-arm.mk
+++ b/base/base_i18n.target.linux-arm.mk
@@ -251,7 +251,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/base_i18n.target.linux-mips.mk b/base/base_i18n.target.linux-mips.mk
index ec60ec9..db05dcb 100644
--- a/base/base_i18n.target.linux-mips.mk
+++ b/base/base_i18n.target.linux-mips.mk
@@ -247,7 +247,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/base_i18n.target.linux-x86.mk b/base/base_i18n.target.linux-x86.mk
index 793f028..3d5883b 100644
--- a/base/base_i18n.target.linux-x86.mk
+++ b/base/base_i18n.target.linux-x86.mk
@@ -249,7 +249,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/base_i18n.target.linux-x86_64.mk b/base/base_i18n.target.linux-x86_64.mk
index bc45a38..7419913 100644
--- a/base/base_i18n.target.linux-x86_64.mk
+++ b/base/base_i18n.target.linux-x86_64.mk
@@ -249,7 +249,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/base_prefs.target.darwin-arm.mk b/base/base_prefs.target.darwin-arm.mk
index edfdc56..bb7285d 100644
--- a/base/base_prefs.target.darwin-arm.mk
+++ b/base/base_prefs.target.darwin-arm.mk
@@ -235,7 +235,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/base_prefs.target.darwin-mips.mk b/base/base_prefs.target.darwin-mips.mk
index 05ddeed..aecbd66 100644
--- a/base/base_prefs.target.darwin-mips.mk
+++ b/base/base_prefs.target.darwin-mips.mk
@@ -231,7 +231,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/base_prefs.target.darwin-x86.mk b/base/base_prefs.target.darwin-x86.mk
index f7881ac..229b7d2 100644
--- a/base/base_prefs.target.darwin-x86.mk
+++ b/base/base_prefs.target.darwin-x86.mk
@@ -233,7 +233,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/base_prefs.target.darwin-x86_64.mk b/base/base_prefs.target.darwin-x86_64.mk
index b57fb59..4237368 100644
--- a/base/base_prefs.target.darwin-x86_64.mk
+++ b/base/base_prefs.target.darwin-x86_64.mk
@@ -233,7 +233,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/base_prefs.target.linux-arm.mk b/base/base_prefs.target.linux-arm.mk
index edfdc56..bb7285d 100644
--- a/base/base_prefs.target.linux-arm.mk
+++ b/base/base_prefs.target.linux-arm.mk
@@ -235,7 +235,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/base_prefs.target.linux-mips.mk b/base/base_prefs.target.linux-mips.mk
index 05ddeed..aecbd66 100644
--- a/base/base_prefs.target.linux-mips.mk
+++ b/base/base_prefs.target.linux-mips.mk
@@ -231,7 +231,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/base_prefs.target.linux-x86.mk b/base/base_prefs.target.linux-x86.mk
index f7881ac..229b7d2 100644
--- a/base/base_prefs.target.linux-x86.mk
+++ b/base/base_prefs.target.linux-x86.mk
@@ -233,7 +233,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/base_prefs.target.linux-x86_64.mk b/base/base_prefs.target.linux-x86_64.mk
index b57fb59..4237368 100644
--- a/base/base_prefs.target.linux-x86_64.mk
+++ b/base/base_prefs.target.linux-x86_64.mk
@@ -233,7 +233,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/base_static.target.darwin-arm.mk b/base/base_static.target.darwin-arm.mk
index 0ec968e..6e99300 100644
--- a/base/base_static.target.darwin-arm.mk
+++ b/base/base_static.target.darwin-arm.mk
@@ -217,7 +217,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/base_static.target.darwin-mips.mk b/base/base_static.target.darwin-mips.mk
index 81d5652..db696ac 100644
--- a/base/base_static.target.darwin-mips.mk
+++ b/base/base_static.target.darwin-mips.mk
@@ -213,7 +213,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/base_static.target.darwin-x86.mk b/base/base_static.target.darwin-x86.mk
index d2ab1b9..4cc7fc2 100644
--- a/base/base_static.target.darwin-x86.mk
+++ b/base/base_static.target.darwin-x86.mk
@@ -215,7 +215,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/base_static.target.darwin-x86_64.mk b/base/base_static.target.darwin-x86_64.mk
index 5ac7013..db95a24 100644
--- a/base/base_static.target.darwin-x86_64.mk
+++ b/base/base_static.target.darwin-x86_64.mk
@@ -215,7 +215,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/base_static.target.linux-arm.mk b/base/base_static.target.linux-arm.mk
index 0ec968e..6e99300 100644
--- a/base/base_static.target.linux-arm.mk
+++ b/base/base_static.target.linux-arm.mk
@@ -217,7 +217,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/base_static.target.linux-mips.mk b/base/base_static.target.linux-mips.mk
index 81d5652..db696ac 100644
--- a/base/base_static.target.linux-mips.mk
+++ b/base/base_static.target.linux-mips.mk
@@ -213,7 +213,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/base_static.target.linux-x86.mk b/base/base_static.target.linux-x86.mk
index d2ab1b9..4cc7fc2 100644
--- a/base/base_static.target.linux-x86.mk
+++ b/base/base_static.target.linux-x86.mk
@@ -215,7 +215,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/base_static.target.linux-x86_64.mk b/base/base_static.target.linux-x86_64.mk
index 5ac7013..db95a24 100644
--- a/base/base_static.target.linux-x86_64.mk
+++ b/base/base_static.target.linux-x86_64.mk
@@ -215,7 +215,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/base_switches.cc b/base/base_switches.cc
index abcdc20..81698cd 100644
--- a/base/base_switches.cc
+++ b/base/base_switches.cc
@@ -6,12 +6,6 @@
 
 namespace switches {
 
-// If the program includes base/debug/debug_on_start_win.h, the process will
-// (on Windows only) start the JIT system-registered debugger on itself and
-// will wait for 60 seconds for the debugger to attach to itself. Then a break
-// point will be hit.
-const char kDebugOnStart[]                  = "debug-on-start";
-
 // Disables the crash reporting.
 const char kDisableBreakpad[]               = "disable-breakpad";
 
diff --git a/base/base_switches.h b/base/base_switches.h
index 70d02e2..6e391a4 100644
--- a/base/base_switches.h
+++ b/base/base_switches.h
@@ -11,7 +11,6 @@
 
 namespace switches {
 
-extern const char kDebugOnStart[];
 extern const char kDisableBreakpad[];
 extern const char kEnableCrashReporter[];
 extern const char kFullMemoryCrashReport[];
diff --git a/base/debug/debug_on_start_win.cc b/base/debug/debug_on_start_win.cc
deleted file mode 100644
index 6ca88dd..0000000
--- a/base/debug/debug_on_start_win.cc
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright (c) 2011 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 "base/debug/debug_on_start_win.h"
-
-#include <windows.h>
-
-#include "base/base_switches.h"
-#include "base/basictypes.h"
-#include "base/debug/debugger.h"
-
-namespace base {
-namespace debug {
-
-// Minimalist implementation to try to find a command line argument. We can use
-// kernel32 exported functions but not the CRT functions because we're too early
-// in the process startup.
-// The code is not that bright and will find things like ---argument or
-// /-/argument.
-// Note: command_line is non-destructively modified.
-bool DebugOnStart::FindArgument(wchar_t* command_line, const char* argument_c) {
-  wchar_t argument[50] = {};
-  for (int i = 0; argument_c[i]; ++i)
-    argument[i] = argument_c[i];
-
-  int argument_len = lstrlen(argument);
-  int command_line_len = lstrlen(command_line);
-  while (command_line_len > argument_len) {
-    wchar_t first_char = command_line[0];
-    wchar_t last_char = command_line[argument_len+1];
-    // Try to find an argument.
-    if ((first_char == L'-' || first_char == L'/') &&
-        (last_char == L' ' || last_char == 0 || last_char == L'=')) {
-      command_line[argument_len+1] = 0;
-      // Skip the - or /
-      if (lstrcmpi(command_line+1, argument) == 0) {
-        // Found it.
-        command_line[argument_len+1] = last_char;
-        return true;
-      }
-      // Fix back.
-      command_line[argument_len+1] = last_char;
-    }
-    // Continue searching.
-    ++command_line;
-    --command_line_len;
-  }
-  return false;
-}
-
-// static
-int __cdecl DebugOnStart::Init() {
-  // Try to find the argument.
-  if (FindArgument(GetCommandLine(), switches::kDebugOnStart)) {
-    // We can do 2 things here:
-    // - Ask for a debugger to attach to us. This involve reading the registry
-    //   key and creating the process.
-    // - Do a int3.
-
-    // It will fails if we run in a sandbox. That is expected.
-    base::debug::SpawnDebuggerOnProcess(GetCurrentProcessId());
-
-    // Wait for a debugger to come take us.
-    base::debug::WaitForDebugger(60, false);
-  } else if (FindArgument(GetCommandLine(), switches::kWaitForDebugger)) {
-    // Wait for a debugger to come take us.
-    base::debug::WaitForDebugger(60, true);
-  }
-  return 0;
-}
-
-}  // namespace debug
-}  // namespace base
diff --git a/base/debug/debug_on_start_win.h b/base/debug/debug_on_start_win.h
deleted file mode 100644
index edcaa0a..0000000
--- a/base/debug/debug_on_start_win.h
+++ /dev/null
@@ -1,83 +0,0 @@
-// Copyright (c) 2011 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.
-
-// Define the necessary code and global data to look for kDebugOnStart command
-// line argument. When the command line argument is detected, it invokes the
-// debugger, if no system-wide debugger is registered, a debug break is done.
-
-#ifndef BASE_DEBUG_DEBUG_ON_START_WIN_H_
-#define BASE_DEBUG_DEBUG_ON_START_WIN_H_
-
-#include "base/basictypes.h"
-#include "build/build_config.h"
-
-// This only works on Windows. It's legal to include on other platforms, but
-// will be a NOP.
-#if defined(OS_WIN)
-
-#ifndef DECLSPEC_SELECTANY
-#define DECLSPEC_SELECTANY  __declspec(selectany)
-#endif
-
-namespace base {
-namespace debug {
-
-// There is no way for this code, as currently implemented, to work across DLLs.
-// TODO(rvargas): It looks like we really don't use this code, at least not for
-// Chrome. Figure out if it's really worth implementing something simpler.
-#if !defined(COMPONENT_BUILD)
-
-// Debug on start functions and data.
-class DebugOnStart {
- public:
-  // Expected function type in the .CRT$XI* section.
-  // Note: See VC\crt\src\internal.h for reference.
-  typedef int  (__cdecl *PIFV)(void);
-
-  // Looks at the command line for kDebugOnStart argument. If found, it invokes
-  // the debugger, if this fails, it crashes.
-  static int __cdecl Init();
-
-  // Returns true if the 'argument' is present in the 'command_line'. It does
-  // not use the CRT, only Kernel32 functions.
-  static bool FindArgument(wchar_t* command_line, const char* argument);
-};
-
-// Set the function pointer to our function to look for a crash on start. The
-// XIB section is started pretty early in the program initialization so in
-// theory it should be called before any user created global variable
-// initialization code and CRT initialization code.
-// Note: See VC\crt\src\defsects.inc and VC\crt\src\crt0.c for reference.
-#ifdef _WIN64
-
-// "Fix" the segment. On x64, the .CRT segment is merged into the .rdata segment
-// so it contains const data only.
-#pragma const_seg(push, ".CRT$XIB")
-// Declare the pointer so the CRT will find it.
-extern const DebugOnStart::PIFV debug_on_start;
-DECLSPEC_SELECTANY const DebugOnStart::PIFV debug_on_start =
-    &DebugOnStart::Init;
-// Fix back the segment.
-#pragma const_seg(pop)
-
-#else  // _WIN64
-
-// "Fix" the segment. On x86, the .CRT segment is merged into the .data segment
-// so it contains non-const data only.
-#pragma data_seg(push, ".CRT$XIB")
-// Declare the pointer so the CRT will find it.
-DECLSPEC_SELECTANY DebugOnStart::PIFV debug_on_start = &DebugOnStart::Init;
-// Fix back the segment.
-#pragma data_seg(pop)
-
-#endif  // _WIN64
-
-#endif  // defined(COMPONENT_BUILD)
-
-}  // namespace debug
-}  // namespace base
-
-#endif  // defined(OS_WIN)
-
-#endif  // BASE_DEBUG_DEBUG_ON_START_WIN_H_
diff --git a/base/debug/debugger.h b/base/debug/debugger.h
index 4f368d9..d62ea3f 100644
--- a/base/debug/debugger.h
+++ b/base/debug/debugger.h
@@ -14,10 +14,6 @@
 namespace base {
 namespace debug {
 
-// Starts the registered system-wide JIT debugger to attach it to specified
-// process.
-BASE_EXPORT bool SpawnDebuggerOnProcess(unsigned process_id);
-
 // Waits wait_seconds seconds for a debugger to attach to the current process.
 // When silent is false, an exception is thrown when a debugger is detected.
 BASE_EXPORT bool WaitForDebugger(int wait_seconds, bool silent);
diff --git a/base/debug/debugger_posix.cc b/base/debug/debugger_posix.cc
index 6554f3f..48393f4 100644
--- a/base/debug/debugger_posix.cc
+++ b/base/debug/debugger_posix.cc
@@ -14,7 +14,6 @@
 #include <sys/types.h>
 #include <unistd.h>
 
-#include <string>
 #include <vector>
 
 #if defined(__GLIBCXX__)
@@ -41,7 +40,6 @@
 #include "base/posix/eintr_wrapper.h"
 #include "base/safe_strerror_posix.h"
 #include "base/strings/string_piece.h"
-#include "base/strings/stringprintf.h"
 
 #if defined(USE_SYMBOLIZE)
 #include "base/third_party/symbolize/symbolize.h"
@@ -54,22 +52,6 @@
 namespace base {
 namespace debug {
 
-bool SpawnDebuggerOnProcess(unsigned process_id) {
-#if OS_ANDROID || OS_NACL
-  NOTIMPLEMENTED();
-  return false;
-#else
-  const std::string debug_cmd =
-      StringPrintf("xterm -e 'gdb --pid=%u' &", process_id);
-  LOG(WARNING) << "Starting debugger on pid " << process_id
-               << " with command `" << debug_cmd << "`";
-  int ret = system(debug_cmd.c_str());
-  if (ret == -1)
-    return false;
-  return true;
-#endif
-}
-
 #if defined(OS_MACOSX) || defined(OS_BSD)
 
 // Based on Apple's recommended method as described in
diff --git a/base/debug/debugger_win.cc b/base/debug/debugger_win.cc
index b13dbfd..ccc9c16 100644
--- a/base/debug/debugger_win.cc
+++ b/base/debug/debugger_win.cc
@@ -4,99 +4,12 @@
 
 #include "base/debug/debugger.h"
 
+#include <stdlib.h>
 #include <windows.h>
-#include <dbghelp.h>
-
-#include "base/basictypes.h"
-#include "base/logging.h"
 
 namespace base {
 namespace debug {
 
-namespace {
-
-// Minimalist key reader.
-// Note: Does not use the CRT.
-bool RegReadString(HKEY root, const wchar_t* subkey,
-                   const wchar_t* value_name, wchar_t* buffer, int* len) {
-  HKEY key = NULL;
-  DWORD res = RegOpenKeyEx(root, subkey, 0, KEY_READ, &key);
-  if (ERROR_SUCCESS != res || key == NULL)
-    return false;
-
-  DWORD type = 0;
-  DWORD buffer_size = *len * sizeof(wchar_t);
-  // We don't support REG_EXPAND_SZ.
-  res = RegQueryValueEx(key, value_name, NULL, &type,
-                        reinterpret_cast<BYTE*>(buffer), &buffer_size);
-  if (ERROR_SUCCESS == res && buffer_size != 0 && type == REG_SZ) {
-    // Make sure the buffer is NULL terminated.
-    buffer[*len - 1] = 0;
-    *len = lstrlen(buffer);
-    RegCloseKey(key);
-    return true;
-  }
-  RegCloseKey(key);
-  return false;
-}
-
-// Replaces each "%ld" in input per a value. Not efficient but it works.
-// Note: Does not use the CRT.
-bool StringReplace(const wchar_t* input, int value, wchar_t* output,
-                   int output_len) {
-  memset(output, 0, output_len*sizeof(wchar_t));
-  int input_len = lstrlen(input);
-
-  for (int i = 0; i < input_len; ++i) {
-    int current_output_len = lstrlen(output);
-
-    if (input[i] == L'%' && input[i + 1] == L'l' && input[i + 2] == L'd') {
-      // Make sure we have enough place left.
-      if ((current_output_len + 12) >= output_len)
-        return false;
-
-      // Cheap _itow().
-      wsprintf(output+current_output_len, L"%d", value);
-      i += 2;
-    } else {
-      if (current_output_len >= output_len)
-        return false;
-      output[current_output_len] = input[i];
-    }
-  }
-  return true;
-}
-
-}  // namespace
-
-// Note: Does not use the CRT.
-bool SpawnDebuggerOnProcess(unsigned process_id) {
-  wchar_t reg_value[1026];
-  int len = arraysize(reg_value);
-  if (RegReadString(HKEY_LOCAL_MACHINE,
-      L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\AeDebug",
-      L"Debugger", reg_value, &len)) {
-    wchar_t command_line[1026];
-    if (StringReplace(reg_value, process_id, command_line,
-                      arraysize(command_line))) {
-      // We don't mind if the debugger is present because it will simply fail
-      // to attach to this process.
-      STARTUPINFO startup_info = {0};
-      startup_info.cb = sizeof(startup_info);
-      PROCESS_INFORMATION process_info = {0};
-
-      if (CreateProcess(NULL, command_line, NULL, NULL, FALSE, 0, NULL, NULL,
-                        &startup_info, &process_info)) {
-        CloseHandle(process_info.hThread);
-        WaitForInputIdle(process_info.hProcess, 10000);
-        CloseHandle(process_info.hProcess);
-        return true;
-      }
-    }
-  }
-  return false;
-}
-
 bool BeingDebugged() {
   return ::IsDebuggerPresent() != 0;
 }
diff --git a/base/debug/leak_tracker.h b/base/debug/leak_tracker.h
index e5f0cb1..8c5aaf3 100644
--- a/base/debug/leak_tracker.h
+++ b/base/debug/leak_tracker.h
@@ -5,8 +5,10 @@
 #ifndef BASE_DEBUG_LEAK_TRACKER_H_
 #define BASE_DEBUG_LEAK_TRACKER_H_
 
-// Only enable leak tracking in debug builds.
-#ifndef NDEBUG
+#include "build/build_config.h"
+
+// Only enable leak tracking in non-uClibc debug builds.
+#if !defined(NDEBUG) && !defined(__UCLIBC__)
 #define ENABLE_LEAK_TRACKER
 #endif
 
diff --git a/base/debug/sanitizer_options.cc b/base/debug/sanitizer_options.cc
index 4fb2be8..4dc6d17 100644
--- a/base/debug/sanitizer_options.cc
+++ b/base/debug/sanitizer_options.cc
@@ -34,6 +34,8 @@
 //     official builds.
 //   replace_intrin=0 - do not intercept memcpy(), memmove() and memset() to
 //     work around http://crbug.com/162461 (ASan report in OpenCL on Mac).
+//   check_printf=1 - check the memory accesses to printf (and other formatted
+//     output routines) arguments.
 #if defined(OS_LINUX)
 #if defined(GOOGLE_CHROME_BUILD)
 // Default AddressSanitizer options for the official build. These do not affect
@@ -41,15 +43,16 @@
 // Chromium builds.
 const char kAsanDefaultOptions[] =
     "legacy_pthread_cond=1 malloc_context_size=5 strict_memcmp=0 "
-    "symbolize=false";
+    "symbolize=false check_printf=1";
 #else
 // Default AddressSanitizer options for buildbots and non-official builds.
 const char *kAsanDefaultOptions =
-    "strict_memcmp=0 symbolize=false";
+    "strict_memcmp=0 symbolize=false check_printf=1";
 #endif  // GOOGLE_CHROME_BUILD
 
 #elif defined(OS_MACOSX)
-const char *kAsanDefaultOptions = "strict_memcmp=0 replace_intrin=0";
+const char *kAsanDefaultOptions =
+    "strict_memcmp=0 replace_intrin=0 check_printf=1";
 #endif  // OS_LINUX
 
 #if defined(OS_LINUX) || defined(OS_MACOSX)
diff --git a/base/debug/trace_event_unittest.cc b/base/debug/trace_event_unittest.cc
index e6a73aa..53e2330 100644
--- a/base/debug/trace_event_unittest.cc
+++ b/base/debug/trace_event_unittest.cc
@@ -1413,7 +1413,7 @@
   Thread* threads[num_threads];
   WaitableEvent* task_complete_events[num_threads];
   for (int i = 0; i < num_threads; i++) {
-    threads[i] = new Thread(StringPrintf("Thread %d", i).c_str());
+    threads[i] = new Thread(StringPrintf("Thread %d", i));
     task_complete_events[i] = new WaitableEvent(false, false);
     threads[i]->Start();
     threads[i]->message_loop()->PostTask(
@@ -1453,7 +1453,7 @@
   Thread* threads[num_threads];
   PlatformThreadId thread_ids[num_threads];
   for (int i = 0; i < num_threads; i++)
-    threads[i] = new Thread(StringPrintf("Thread %d", i).c_str());
+    threads[i] = new Thread(StringPrintf("Thread %d", i));
 
   // Enable tracing.
   BeginTrace();
diff --git a/base/file_util.h b/base/file_util.h
index 487a171..7ca2d38 100644
--- a/base/file_util.h
+++ b/base/file_util.h
@@ -309,9 +309,9 @@
 // This is a cross-platform analog to Windows' SetEndOfFile() function.
 BASE_EXPORT bool TruncateFile(FILE* file);
 
-// Reads the given number of bytes from the file into the buffer.  Returns
-// the number of read bytes, or -1 on error.
-BASE_EXPORT int ReadFile(const FilePath& filename, char* data, int size);
+// Reads at most the given number of bytes from the file into the buffer.
+// Returns the number of read bytes, or -1 on error.
+BASE_EXPORT int ReadFile(const FilePath& filename, char* data, int max_size);
 
 // Writes the given buffer into the file, overwriting any data that was
 // previously there.  Returns the number of bytes written, or -1 on error.
diff --git a/base/file_util_posix.cc b/base/file_util_posix.cc
index e2eb2f8..f04053d 100644
--- a/base/file_util_posix.cc
+++ b/base/file_util_posix.cc
@@ -651,15 +651,15 @@
   return result;
 }
 
-int ReadFile(const FilePath& filename, char* data, int size) {
+int ReadFile(const FilePath& filename, char* data, int max_size) {
   ThreadRestrictions::AssertIOAllowed();
   int fd = HANDLE_EINTR(open(filename.value().c_str(), O_RDONLY));
   if (fd < 0)
     return -1;
 
-  ssize_t bytes_read = HANDLE_EINTR(read(fd, data, size));
-  if (int ret = IGNORE_EINTR(close(fd)) < 0)
-    return ret;
+  ssize_t bytes_read = HANDLE_EINTR(read(fd, data, max_size));
+  if (IGNORE_EINTR(close(fd)) < 0)
+    return -1;
   return bytes_read;
 }
 
@@ -670,8 +670,8 @@
     return -1;
 
   int bytes_written = WriteFileDescriptor(fd, data, size);
-  if (int ret = IGNORE_EINTR(close(fd)) < 0)
-    return ret;
+  if (IGNORE_EINTR(close(fd)) < 0)
+    return -1;
   return bytes_written;
 }
 
@@ -697,8 +697,8 @@
     return -1;
 
   int bytes_written = WriteFileDescriptor(fd, data, size);
-  if (int ret = IGNORE_EINTR(close(fd)) < 0)
-    return ret;
+  if (IGNORE_EINTR(close(fd)) < 0)
+    return -1;
   return bytes_written;
 }
 
diff --git a/base/file_util_unittest.cc b/base/file_util_unittest.cc
index 642c9d5..0d79391 100644
--- a/base/file_util_unittest.cc
+++ b/base/file_util_unittest.cc
@@ -21,6 +21,7 @@
 #include <algorithm>
 #include <fstream>
 #include <set>
+#include <vector>
 
 #include "base/base_paths.h"
 #include "base/file_util.h"
@@ -1960,6 +1961,51 @@
   EXPECT_EQ(L"hellohello", read_content);
 }
 
+TEST_F(FileUtilTest, ReadFile) {
+  // Create a test file to be read.
+  const std::string kTestData("The quick brown fox jumps over the lazy dog.");
+  FilePath file_path =
+      temp_dir_.path().Append(FILE_PATH_LITERAL("ReadFileTest"));
+
+  ASSERT_EQ(static_cast<int>(kTestData.size()),
+            WriteFile(file_path, kTestData.data(), kTestData.size()));
+
+  // Make buffers with various size.
+  std::vector<char> small_buffer(kTestData.size() / 2);
+  std::vector<char> exact_buffer(kTestData.size());
+  std::vector<char> large_buffer(kTestData.size() * 2);
+
+  // Read the file with smaller buffer.
+  int bytes_read_small = ReadFile(
+      file_path, &small_buffer[0], static_cast<int>(small_buffer.size()));
+  EXPECT_EQ(bytes_read_small, static_cast<int>(small_buffer.size()));
+  EXPECT_EQ(
+      std::string(small_buffer.begin(), small_buffer.end()),
+      std::string(kTestData.begin(), kTestData.begin() + small_buffer.size()));
+
+  // Read the file with buffer which have exactly same size.
+  int bytes_read_exact = ReadFile(
+      file_path, &exact_buffer[0], static_cast<int>(exact_buffer.size()));
+  EXPECT_EQ(bytes_read_exact, static_cast<int>(kTestData.size()));
+  EXPECT_EQ(std::string(exact_buffer.begin(), exact_buffer.end()), kTestData);
+
+  // Read the file with larger buffer.
+  int bytes_read_large = ReadFile(
+      file_path, &large_buffer[0], static_cast<int>(large_buffer.size()));
+  EXPECT_EQ(bytes_read_large, static_cast<int>(kTestData.size()));
+  EXPECT_EQ(std::string(large_buffer.begin(),
+                        large_buffer.begin() + kTestData.size()),
+            kTestData);
+
+  // Make sure the return value is -1 if the file doesn't exist.
+  FilePath file_path_not_exist =
+      temp_dir_.path().Append(FILE_PATH_LITERAL("ReadFileNotExistTest"));
+  EXPECT_EQ(-1,
+            ReadFile(file_path_not_exist,
+                     &exact_buffer[0],
+                     static_cast<int>(exact_buffer.size())));
+}
+
 TEST_F(FileUtilTest, ReadFileToString) {
   const char kTestData[] = "0123";
   std::string data;
diff --git a/base/file_util_win.cc b/base/file_util_win.cc
index 94b545a..eb9c6dc 100644
--- a/base/file_util_win.cc
+++ b/base/file_util_win.cc
@@ -571,7 +571,7 @@
   return _wfsopen(filename.value().c_str(), w_mode.c_str(), _SH_DENYNO);
 }
 
-int ReadFile(const FilePath& filename, char* data, int size) {
+int ReadFile(const FilePath& filename, char* data, int max_size) {
   ThreadRestrictions::AssertIOAllowed();
   base::win::ScopedHandle file(CreateFile(filename.value().c_str(),
                                           GENERIC_READ,
@@ -584,9 +584,9 @@
     return -1;
 
   DWORD read;
-  if (::ReadFile(file, data, size, &read, NULL) &&
-      static_cast<int>(read) == size)
+  if (::ReadFile(file, data, max_size, &read, NULL))
     return read;
+
   return -1;
 }
 
diff --git a/base/i18n/rtl.cc b/base/i18n/rtl.cc
index 84dc51f..d878c40 100644
--- a/base/i18n/rtl.cc
+++ b/base/i18n/rtl.cc
@@ -14,10 +14,6 @@
 #include "third_party/icu/source/common/unicode/uscript.h"
 #include "third_party/icu/source/i18n/unicode/coll.h"
 
-#if defined(TOOLKIT_GTK)
-#include <gtk/gtk.h>
-#endif
-
 namespace {
 
 // Extract language, country and variant, but ignore keywords.  For example,
@@ -123,12 +119,7 @@
 }
 
 bool IsRTL() {
-#if defined(TOOLKIT_GTK)
-  GtkTextDirection gtk_dir = gtk_widget_get_default_direction();
-  return gtk_dir == GTK_TEXT_DIR_RTL;
-#else
   return ICUIsRTL();
-#endif
 }
 
 bool ICUIsRTL() {
diff --git a/base/i18n/rtl_unittest.cc b/base/i18n/rtl_unittest.cc
index 8faaccf..2d923ac 100644
--- a/base/i18n/rtl_unittest.cc
+++ b/base/i18n/rtl_unittest.cc
@@ -14,10 +14,6 @@
 #include "testing/platform_test.h"
 #include "third_party/icu/source/i18n/unicode/usearch.h"
 
-#if defined(TOOLKIT_GTK)
-#include <gtk/gtk.h>
-#endif
-
 namespace base {
 namespace i18n {
 
@@ -27,10 +23,6 @@
 void SetRTL(bool rtl) {
   // Override the current locale/direction.
   SetICUDefaultLocale(rtl ? "he" : "en");
-#if defined(TOOLKIT_GTK)
-  // Do the same for GTK, which does not rely on the ICU default locale.
-  gtk_widget_set_default_direction(rtl ? GTK_TEXT_DIR_RTL : GTK_TEXT_DIR_LTR);
-#endif
   EXPECT_EQ(rtl, IsRTL());
 }
 
diff --git a/base/logging.cc b/base/logging.cc
index 0e66946..9fe235c 100644
--- a/base/logging.cc
+++ b/base/logging.cc
@@ -43,6 +43,7 @@
 #include <ctime>
 #include <iomanip>
 #include <ostream>
+#include <string>
 
 #include "base/base_switches.h"
 #include "base/command_line.h"
@@ -51,6 +52,8 @@
 #include "base/debug/stack_trace.h"
 #include "base/posix/eintr_wrapper.h"
 #include "base/strings/string_piece.h"
+#include "base/strings/string_util.h"
+#include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/synchronization/lock_impl.h"
 #include "base/threading/platform_thread.h"
@@ -555,7 +558,7 @@
 }
 
 LogMessage::~LogMessage() {
-#if !defined(NDEBUG) && !defined(OS_NACL)
+#if !defined(NDEBUG) && !defined(OS_NACL) && !defined(__UCLIBC__)
   if (severity_ == LOG_FATAL) {
     // Include a stack trace on a fatal.
     base::debug::StackTrace trace;
@@ -729,61 +732,40 @@
 }
 
 #if defined(OS_WIN)
-Win32ErrorLogMessage::Win32ErrorLogMessage(const char* file,
-                                           int line,
-                                           LogSeverity severity,
-                                           SystemErrorCode err,
-                                           const char* module)
-    : err_(err),
-      module_(module),
-      log_message_(file, line, severity) {
+BASE_EXPORT std::string SystemErrorCodeToString(SystemErrorCode error_code) {
+  const int error_message_buffer_size = 256;
+  char msgbuf[error_message_buffer_size];
+  DWORD flags = FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS;
+  DWORD len = FormatMessageA(flags, NULL, error_code, 0, msgbuf,
+                             arraysize(msgbuf), NULL);
+  if (len) {
+    // Messages returned by system end with line breaks.
+    return base::CollapseWhitespaceASCII(msgbuf, true) +
+        base::StringPrintf(" (0x%X)", error_code);
+  }
+  return base::StringPrintf("Error (0x%X) while retrieving error. (0x%X)",
+                            GetLastError(), error_code);
 }
+#elif defined(OS_POSIX)
+BASE_EXPORT std::string SystemErrorCodeToString(SystemErrorCode error_code) {
+  return safe_strerror(error_code);
+}
+#else
+#error Not implemented
+#endif
 
+
+#if defined(OS_WIN)
 Win32ErrorLogMessage::Win32ErrorLogMessage(const char* file,
                                            int line,
                                            LogSeverity severity,
                                            SystemErrorCode err)
     : err_(err),
-      module_(NULL),
       log_message_(file, line, severity) {
 }
 
 Win32ErrorLogMessage::~Win32ErrorLogMessage() {
-  const int error_message_buffer_size = 256;
-  char msgbuf[error_message_buffer_size];
-  DWORD flags = FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS;
-  HMODULE hmod;
-  if (module_) {
-    hmod = GetModuleHandleA(module_);
-    if (hmod) {
-      flags |= FORMAT_MESSAGE_FROM_HMODULE;
-    } else {
-      // This makes a nested Win32ErrorLogMessage. It will have module_ of NULL
-      // so it will not call GetModuleHandle, so recursive errors are
-      // impossible.
-      DPLOG(WARNING) << "Couldn't open module " << module_
-          << " for error message query";
-    }
-  } else {
-    hmod = NULL;
-  }
-  DWORD len = FormatMessageA(flags,
-                             hmod,
-                             err_,
-                             0,
-                             msgbuf,
-                             sizeof(msgbuf) / sizeof(msgbuf[0]),
-                             NULL);
-  if (len) {
-    while ((len > 0) &&
-           isspace(static_cast<unsigned char>(msgbuf[len - 1]))) {
-      msgbuf[--len] = 0;
-    }
-    stream() << ": " << msgbuf;
-  } else {
-    stream() << ": Error " << GetLastError() << " while retrieving error "
-        << err_;
-  }
+  stream() << ": " << SystemErrorCodeToString(err_);
   // We're about to crash (CHECK). Put |err_| on the stack (by placing it in a
   // field) and use Alias in hopes that it makes it into crash dumps.
   DWORD last_error = err_;
@@ -799,7 +781,7 @@
 }
 
 ErrnoLogMessage::~ErrnoLogMessage() {
-  stream() << ": " << safe_strerror(err_);
+  stream() << ": " << SystemErrorCodeToString(err_);
 }
 #endif  // OS_WIN
 
diff --git a/base/logging.h b/base/logging.h
index 8a268fa..dd17bce 100644
--- a/base/logging.h
+++ b/base/logging.h
@@ -426,29 +426,13 @@
   SYSLOG_IF(FATAL, !(condition)) << "Assert failed: " #condition ". "
 
 #if defined(OS_WIN)
-#define LOG_GETLASTERROR_STREAM(severity) \
+#define PLOG_STREAM(severity) \
   COMPACT_GOOGLE_LOG_EX_ ## severity(Win32ErrorLogMessage, \
       ::logging::GetLastSystemErrorCode()).stream()
-#define LOG_GETLASTERROR(severity) \
-  LAZY_STREAM(LOG_GETLASTERROR_STREAM(severity), LOG_IS_ON(severity))
-#define LOG_GETLASTERROR_MODULE_STREAM(severity, module) \
-  COMPACT_GOOGLE_LOG_EX_ ## severity(Win32ErrorLogMessage, \
-      ::logging::GetLastSystemErrorCode(), module).stream()
-#define LOG_GETLASTERROR_MODULE(severity, module)                       \
-  LAZY_STREAM(LOG_GETLASTERROR_STREAM(severity, module),                \
-              LOG_IS_ON(severity))
-// PLOG_STREAM is used by PLOG, which is the usual error logging macro
-// for each platform.
-#define PLOG_STREAM(severity) LOG_GETLASTERROR_STREAM(severity)
 #elif defined(OS_POSIX)
-#define LOG_ERRNO_STREAM(severity) \
+#define PLOG_STREAM(severity) \
   COMPACT_GOOGLE_LOG_EX_ ## severity(ErrnoLogMessage, \
       ::logging::GetLastSystemErrorCode()).stream()
-#define LOG_ERRNO(severity) \
-  LAZY_STREAM(LOG_ERRNO_STREAM(severity), LOG_IS_ON(severity))
-// PLOG_STREAM is used by PLOG, which is the usual error logging macro
-// for each platform.
-#define PLOG_STREAM(severity) LOG_ERRNO_STREAM(severity)
 #endif
 
 #define PLOG(severity)                                          \
@@ -622,17 +606,6 @@
 #define DLOG(severity)                                          \
   LAZY_STREAM(LOG_STREAM(severity), DLOG_IS_ON(severity))
 
-#if defined(OS_WIN)
-#define DLOG_GETLASTERROR(severity) \
-  LAZY_STREAM(LOG_GETLASTERROR_STREAM(severity), DLOG_IS_ON(severity))
-#define DLOG_GETLASTERROR_MODULE(severity, module)                      \
-  LAZY_STREAM(LOG_GETLASTERROR_STREAM(severity, module),                \
-              DLOG_IS_ON(severity))
-#elif defined(OS_POSIX)
-#define DLOG_ERRNO(severity)                                    \
-  LAZY_STREAM(LOG_ERRNO_STREAM(severity), DLOG_IS_ON(severity))
-#endif
-
 #define DPLOG(severity)                                         \
   LAZY_STREAM(PLOG_STREAM(severity), DLOG_IS_ON(severity))
 
@@ -640,6 +613,15 @@
 
 #define DVPLOG(verboselevel) DVPLOG_IF(verboselevel, VLOG_IS_ON(verboselevel))
 
+// TODO(vitalybuka): following should be removed and replaced with PLOG.
+#if defined(OS_WIN)
+#define LOG_GETLASTERROR(severity) PLOG(severity)
+#define DLOG_GETLASTERROR(severity) DPLOG(severity)
+#elif defined(OS_POSIX)
+#define LOG_ERRNO(severity) PLOG(severity)
+#define DLOG_ERRNO(severity) DPLOG(severity)
+#endif
+
 // Definitions for DCHECK et al.
 
 #if DCHECK_IS_ON
@@ -823,6 +805,7 @@
 // Alias for ::GetLastError() on Windows and errno on POSIX. Avoids having to
 // pull in windows.h just for GetLastError() and DWORD.
 BASE_EXPORT SystemErrorCode GetLastSystemErrorCode();
+BASE_EXPORT std::string SystemErrorCodeToString(SystemErrorCode error_code);
 
 #if defined(OS_WIN)
 // Appends a formatted system message of the GetLastError() type.
@@ -831,12 +814,6 @@
   Win32ErrorLogMessage(const char* file,
                        int line,
                        LogSeverity severity,
-                       SystemErrorCode err,
-                       const char* module);
-
-  Win32ErrorLogMessage(const char* file,
-                       int line,
-                       LogSeverity severity,
                        SystemErrorCode err);
 
   // Appends the error message before destructing the encapsulated class.
@@ -846,8 +823,6 @@
 
  private:
   SystemErrorCode err_;
-  // Optional name of the module defining the error.
-  const char* module_;
   LogMessage log_message_;
 
   DISALLOW_COPY_AND_ASSIGN(Win32ErrorLogMessage);
diff --git a/base/logging_unittest.cc b/base/logging_unittest.cc
index d03ed93..44a1be3 100644
--- a/base/logging_unittest.cc
+++ b/base/logging_unittest.cc
@@ -54,11 +54,7 @@
 
 TEST_F(LoggingTest, BasicLogging) {
   MockLogSource mock_log_source;
-  const int kExpectedDebugOrReleaseCalls = 6;
-  const int kExpectedDebugCalls = 6;
-  const int kExpectedCalls =
-      kExpectedDebugOrReleaseCalls + (DEBUG_MODE ? kExpectedDebugCalls : 0);
-  EXPECT_CALL(mock_log_source, Log()).Times(kExpectedCalls).
+  EXPECT_CALL(mock_log_source, Log()).Times(DEBUG_MODE ? 16 : 8).
       WillRepeatedly(Return("log message"));
 
   SetMinLogLevel(LOG_INFO);
@@ -76,6 +72,8 @@
   PLOG_IF(INFO, true) << mock_log_source.Log();
   VLOG(0) << mock_log_source.Log();
   VLOG_IF(0, true) << mock_log_source.Log();
+  VPLOG(0) << mock_log_source.Log();
+  VPLOG_IF(0, true) << mock_log_source.Log();
 
   DLOG(INFO) << mock_log_source.Log();
   DLOG_IF(INFO, true) << mock_log_source.Log();
@@ -83,6 +81,8 @@
   DPLOG_IF(INFO, true) << mock_log_source.Log();
   DVLOG(0) << mock_log_source.Log();
   DVLOG_IF(0, true) << mock_log_source.Log();
+  DVPLOG(0) << mock_log_source.Log();
+  DVPLOG_IF(0, true) << mock_log_source.Log();
 }
 
 TEST_F(LoggingTest, LogIsOn) {
@@ -159,6 +159,8 @@
   PLOG_IF(INFO, false) << mock_log_source.Log();
   VLOG(1) << mock_log_source.Log();
   VLOG_IF(1, true) << mock_log_source.Log();
+  VPLOG(1) << mock_log_source.Log();
+  VPLOG_IF(1, true) << mock_log_source.Log();
 
   DLOG(INFO) << mock_log_source.Log();
   DLOG_IF(INFO, true) << mock_log_source.Log();
@@ -166,6 +168,8 @@
   DPLOG_IF(INFO, true) << mock_log_source.Log();
   DVLOG(1) << mock_log_source.Log();
   DVLOG_IF(1, true) << mock_log_source.Log();
+  DVPLOG(1) << mock_log_source.Log();
+  DVPLOG_IF(1, true) << mock_log_source.Log();
 }
 
 // Official builds have CHECKs directly call BreakDebugger.
diff --git a/base/memory/shared_memory.h b/base/memory/shared_memory.h
index 87b923e..d48071e 100644
--- a/base/memory/shared_memory.h
+++ b/base/memory/shared_memory.h
@@ -42,9 +42,12 @@
 
 // Options for creating a shared memory object.
 struct SharedMemoryCreateOptions {
-  SharedMemoryCreateOptions() : name_deprecated(NULL), size(0),
-                                open_existing_deprecated(false),
-                                executable(false) {}
+  SharedMemoryCreateOptions()
+      : name_deprecated(NULL),
+        size(0),
+        open_existing_deprecated(false),
+        executable(false),
+        share_read_only(false) {}
 
   // DEPRECATED (crbug.com/345734):
   // If NULL, the object is anonymous.  This pointer is owned by the caller
@@ -64,6 +67,9 @@
 
   // If true, mappings might need to be made executable later.
   bool executable;
+
+  // If true, the file can be shared read-only to a process.
+  bool share_read_only;
 };
 
 // Platform abstraction for shared memory.  Provides a C++ wrapper
@@ -204,8 +210,8 @@
   // handle for use in the remote process.
   //
   // |*this| must have been initialized using one of the Create*() or Open()
-  // methods.  If it was constructed from a SharedMemoryHandle, this call will
-  // CHECK-fail.
+  // methods with share_read_only=true. If it was constructed from a
+  // SharedMemoryHandle, this call will CHECK-fail.
   //
   // Returns true on success, false otherwise.
   bool ShareReadOnlyToProcess(ProcessHandle process,
diff --git a/base/memory/shared_memory_posix.cc b/base/memory/shared_memory_posix.cc
index 2afe450..f0a28ba 100644
--- a/base/memory/shared_memory_posix.cc
+++ b/base/memory/shared_memory_posix.cc
@@ -143,11 +143,14 @@
       fp.reset(CreateAndOpenTemporaryFileInDir(directory, &path));
 
     if (fp) {
-      // Also open as readonly so that we can ShareReadOnlyToProcess.
-      readonly_fd.reset(HANDLE_EINTR(open(path.value().c_str(), O_RDONLY)));
-      if (!readonly_fd.is_valid()) {
-        DPLOG(ERROR) << "open(\"" << path.value() << "\", O_RDONLY) failed";
-        fp.reset();
+      if (options.share_read_only) {
+        // Also open as readonly so that we can ShareReadOnlyToProcess.
+        readonly_fd.reset(HANDLE_EINTR(open(path.value().c_str(), O_RDONLY)));
+        if (!readonly_fd.is_valid()) {
+          DPLOG(ERROR) << "open(\"" << path.value() << "\", O_RDONLY) failed";
+          fp.reset();
+          return false;
+        }
       }
       // Deleting the file prevents anyone else from mapping it in (making it
       // private), and prevents the need for cleanup (once the last fd is
@@ -196,12 +199,15 @@
       fix_size = false;
     }
 
-    // Also open as readonly so that we can ShareReadOnlyToProcess.
-    readonly_fd.reset(HANDLE_EINTR(open(path.value().c_str(), O_RDONLY)));
-    if (!readonly_fd.is_valid()) {
-      DPLOG(ERROR) << "open(\"" << path.value() << "\", O_RDONLY) failed";
-      close(fd);
-      fd = -1;
+    if (options.share_read_only) {
+      // Also open as readonly so that we can ShareReadOnlyToProcess.
+      readonly_fd.reset(HANDLE_EINTR(open(path.value().c_str(), O_RDONLY)));
+      if (!readonly_fd.is_valid()) {
+        DPLOG(ERROR) << "open(\"" << path.value() << "\", O_RDONLY) failed";
+        close(fd);
+        fd = -1;
+        return false;
+      }
     }
     if (fd >= 0) {
       // "a+" is always appropriate: if it's a new file, a+ is similar to w+.
@@ -267,6 +273,7 @@
   ScopedFD readonly_fd(HANDLE_EINTR(open(path.value().c_str(), O_RDONLY)));
   if (!readonly_fd.is_valid()) {
     DPLOG(ERROR) << "open(\"" << path.value() << "\", O_RDONLY) failed";
+    return false;
   }
   return PrepareMapFile(fp.Pass(), readonly_fd.Pass());
 }
@@ -352,7 +359,8 @@
 bool SharedMemory::PrepareMapFile(ScopedFILE fp, ScopedFD readonly_fd) {
   DCHECK_EQ(-1, mapped_file_);
   DCHECK_EQ(-1, readonly_mapped_file_);
-  if (fp == NULL || !readonly_fd.is_valid()) return false;
+  if (fp == NULL)
+    return false;
 
   // This function theoretically can block on the disk, but realistically
   // the temporary files we create will just go into the buffer cache
@@ -360,14 +368,16 @@
   base::ThreadRestrictions::ScopedAllowIO allow_io;
 
   struct stat st = {};
-  struct stat readonly_st = {};
   if (fstat(fileno(fp.get()), &st))
     NOTREACHED();
-  if (fstat(readonly_fd.get(), &readonly_st))
-    NOTREACHED();
-  if (st.st_dev != readonly_st.st_dev || st.st_ino != readonly_st.st_ino) {
-    LOG(ERROR) << "writable and read-only inodes don't match; bailing";
-    return false;
+  if (readonly_fd.is_valid()) {
+    struct stat readonly_st = {};
+    if (fstat(readonly_fd.get(), &readonly_st))
+      NOTREACHED();
+    if (st.st_dev != readonly_st.st_dev || st.st_ino != readonly_st.st_ino) {
+      LOG(ERROR) << "writable and read-only inodes don't match; bailing";
+      return false;
+    }
   }
 
   mapped_file_ = dup(fileno(fp.get()));
diff --git a/base/memory/shared_memory_unittest.cc b/base/memory/shared_memory_unittest.cc
index f2a9e74..4d49c36 100644
--- a/base/memory/shared_memory_unittest.cc
+++ b/base/memory/shared_memory_unittest.cc
@@ -373,7 +373,11 @@
   StringPiece contents = "Hello World";
 
   SharedMemory writable_shmem;
-  ASSERT_TRUE(writable_shmem.CreateAndMapAnonymous(contents.size()));
+  SharedMemoryCreateOptions options;
+  options.size = contents.size();
+  options.share_read_only = true;
+  ASSERT_TRUE(writable_shmem.Create(options));
+  ASSERT_TRUE(writable_shmem.Map(options.size));
   memcpy(writable_shmem.memory(), contents.data(), contents.size());
   EXPECT_TRUE(writable_shmem.Unmap());
 
diff --git a/base/message_loop/message_loop.cc b/base/message_loop/message_loop.cc
index 6bea30c..dd1a393 100644
--- a/base/message_loop/message_loop.cc
+++ b/base/message_loop/message_loop.cc
@@ -32,10 +32,8 @@
 #if defined(OS_ANDROID)
 #include "base/message_loop/message_pump_android.h"
 #endif
-
-#if defined(TOOLKIT_GTK)
-#include <gdk/gdk.h>
-#include <gdk/gdkx.h>
+#if defined(USE_GLIB)
+#include "base/message_loop/message_pump_glib.h"
 #endif
 
 namespace base {
@@ -100,6 +98,18 @@
 #endif
 }
 
+#if defined(OS_IOS)
+typedef MessagePumpIOSForIO MessagePumpForIO;
+#elif defined(OS_NACL)
+typedef MessagePumpDefault MessagePumpForIO;
+#elif defined(OS_POSIX)
+typedef MessagePumpLibevent MessagePumpForIO;
+#endif
+
+MessagePumpForIO* ToPumpIO(MessagePump* pump) {
+  return static_cast<MessagePumpForIO*>(pump);
+}
+
 }  // namespace
 
 //------------------------------------------------------------------------------
@@ -203,30 +213,20 @@
 // static
 scoped_ptr<MessagePump> MessageLoop::CreateMessagePumpForType(Type type) {
 // TODO(rvargas): Get rid of the OS guards.
-#if defined(OS_WIN)
-#define MESSAGE_PUMP_UI scoped_ptr<MessagePump>(new MessagePumpForUI())
-#define MESSAGE_PUMP_IO scoped_ptr<MessagePump>(new MessagePumpForIO())
-#elif defined(OS_IOS)
+#if defined(USE_GLIB) && !defined(OS_NACL)
+  typedef MessagePumpGlib MessagePumpForUI;
+#elif defined(OS_LINUX) && !defined(OS_NACL)
+  typedef MessagePumpLibevent MessagePumpForUI;
+#endif
+
+#if defined(OS_IOS) || defined(OS_MACOSX)
 #define MESSAGE_PUMP_UI scoped_ptr<MessagePump>(MessagePumpMac::Create())
-#define MESSAGE_PUMP_IO scoped_ptr<MessagePump>(new MessagePumpIOSForIO())
-#elif defined(OS_MACOSX)
-#define MESSAGE_PUMP_UI scoped_ptr<MessagePump>(MessagePumpMac::Create())
-#define MESSAGE_PUMP_IO scoped_ptr<MessagePump>(new MessagePumpLibevent())
 #elif defined(OS_NACL)
 // Currently NaCl doesn't have a UI MessageLoop.
 // TODO(abarth): Figure out if we need this.
 #define MESSAGE_PUMP_UI scoped_ptr<MessagePump>()
-// ipc_channel_nacl.cc uses a worker thread to do socket reads currently, and
-// doesn't require extra support for watching file descriptors.
-#define MESSAGE_PUMP_IO scoped_ptr<MessagePump>(new MessagePumpDefault())
-#elif defined(USE_OZONE)
-#define MESSAGE_PUMP_UI scoped_ptr<MessagePump>(new MessagePumpLibevent())
-#define MESSAGE_PUMP_IO scoped_ptr<MessagePump>(new MessagePumpLibevent())
-#elif defined(OS_POSIX)  // POSIX but not MACOSX.
-#define MESSAGE_PUMP_UI scoped_ptr<MessagePump>(new MessagePumpForUI())
-#define MESSAGE_PUMP_IO scoped_ptr<MessagePump>(new MessagePumpLibevent())
 #else
-#error Not implemented
+#define MESSAGE_PUMP_UI scoped_ptr<MessagePump>(new MessagePumpForUI())
 #endif
 
   if (type == MessageLoop::TYPE_UI) {
@@ -235,15 +235,13 @@
     return MESSAGE_PUMP_UI;
   }
   if (type == MessageLoop::TYPE_IO)
-    return MESSAGE_PUMP_IO;
-#if defined(TOOLKIT_GTK)
-  if (type == MessageLoop::TYPE_GPU)
-    return scoped_ptr<MessagePump>(new MessagePumpX11());
-#endif
+    return scoped_ptr<MessagePump>(new MessagePumpForIO());
+
 #if defined(OS_ANDROID)
   if (type == MessageLoop::TYPE_JAVA)
-    return MESSAGE_PUMP_UI;
+    return scoped_ptr<MessagePump>(new MessagePumpForUI());
 #endif
+
   DCHECK_EQ(MessageLoop::TYPE_DEFAULT, type);
   return scoped_ptr<MessagePump>(new MessagePumpDefault());
 }
@@ -653,6 +651,7 @@
   PostNonNestableTask(from_here, Bind(releaser, object));
 }
 
+#if !defined(OS_NACL)
 //------------------------------------------------------------------------------
 // MessageLoopForUI
 
@@ -669,24 +668,24 @@
 }
 #endif
 
-#if !defined(OS_NACL) && defined(OS_WIN)
+#if defined(OS_WIN)
 void MessageLoopForUI::AddObserver(Observer* observer) {
-  pump_ui()->AddObserver(observer);
+  static_cast<MessagePumpWin*>(pump_.get())->AddObserver(observer);
 }
 
 void MessageLoopForUI::RemoveObserver(Observer* observer) {
-  pump_ui()->RemoveObserver(observer);
+  static_cast<MessagePumpWin*>(pump_.get())->RemoveObserver(observer);
 }
-#endif  // !defined(OS_NACL) && defined(OS_WIN)
+#endif  // defined(OS_WIN)
 
-#if defined(USE_OZONE) && !defined(OS_NACL)
+#if defined(USE_OZONE) || (defined(OS_CHROMEOS) && !defined(USE_GLIB))
 bool MessageLoopForUI::WatchFileDescriptor(
     int fd,
     bool persistent,
     MessagePumpLibevent::Mode mode,
     MessagePumpLibevent::FileDescriptorWatcher *controller,
     MessagePumpLibevent::Watcher *delegate) {
-  return pump_libevent()->WatchFileDescriptor(
+  return static_cast<MessagePumpLibevent*>(pump_.get())->WatchFileDescriptor(
       fd,
       persistent,
       mode,
@@ -695,53 +694,49 @@
 }
 #endif
 
+#endif  // !defined(OS_NACL)
+
 //------------------------------------------------------------------------------
 // MessageLoopForIO
 
-#if defined(OS_WIN)
+#if !defined(OS_NACL)
+void MessageLoopForIO::AddIOObserver(
+    MessageLoopForIO::IOObserver* io_observer) {
+  ToPumpIO(pump_.get())->AddIOObserver(io_observer);
+}
 
+void MessageLoopForIO::RemoveIOObserver(
+    MessageLoopForIO::IOObserver* io_observer) {
+  ToPumpIO(pump_.get())->RemoveIOObserver(io_observer);
+}
+
+#if defined(OS_WIN)
 void MessageLoopForIO::RegisterIOHandler(HANDLE file, IOHandler* handler) {
-  pump_io()->RegisterIOHandler(file, handler);
+  ToPumpIO(pump_.get())->RegisterIOHandler(file, handler);
 }
 
 bool MessageLoopForIO::RegisterJobObject(HANDLE job, IOHandler* handler) {
-  return pump_io()->RegisterJobObject(job, handler);
+  return ToPumpIO(pump_.get())->RegisterJobObject(job, handler);
 }
 
 bool MessageLoopForIO::WaitForIOCompletion(DWORD timeout, IOHandler* filter) {
-  return pump_io()->WaitForIOCompletion(timeout, filter);
+  return ToPumpIO(pump_.get())->WaitForIOCompletion(timeout, filter);
 }
-
-#elif defined(OS_IOS)
-
+#elif defined(OS_POSIX)
 bool MessageLoopForIO::WatchFileDescriptor(int fd,
                                            bool persistent,
                                            Mode mode,
                                            FileDescriptorWatcher *controller,
                                            Watcher *delegate) {
-  return pump_io()->WatchFileDescriptor(
+  return ToPumpIO(pump_.get())->WatchFileDescriptor(
       fd,
       persistent,
       mode,
       controller,
       delegate);
 }
-
-#elif defined(OS_POSIX) && !defined(OS_NACL)
-
-bool MessageLoopForIO::WatchFileDescriptor(int fd,
-                                           bool persistent,
-                                           Mode mode,
-                                           FileDescriptorWatcher *controller,
-                                           Watcher *delegate) {
-  return pump_libevent()->WatchFileDescriptor(
-      fd,
-      persistent,
-      mode,
-      controller,
-      delegate);
-}
-
 #endif
 
+#endif  // !defined(OS_NACL)
+
 }  // namespace base
diff --git a/base/message_loop/message_loop.h b/base/message_loop/message_loop.h
index 07f9105..4bb7d55 100644
--- a/base/message_loop/message_loop.h
+++ b/base/message_loop/message_loop.h
@@ -32,15 +32,6 @@
 #include "base/message_loop/message_pump_io_ios.h"
 #elif defined(OS_POSIX)
 #include "base/message_loop/message_pump_libevent.h"
-#if !defined(OS_MACOSX) && !defined(OS_ANDROID)
-
-#if defined(USE_GLIB) && !defined(OS_NACL)
-#include "base/message_loop/message_pump_glib.h"
-#elif !defined(OS_ANDROID_HOST)
-#include "base/message_loop/message_pump_glib.h"
-#endif
-
-#endif
 #endif
 
 namespace base {
@@ -49,11 +40,6 @@
 class MessagePumpObserver;
 class RunLoop;
 class ThreadTaskRunnerHandle;
-#if defined(OS_ANDROID)
-class MessagePumpForUI;
-#elif defined(OS_ANDROID_HOST)
-typedef MessagePumpLibevent MessagePumpForUI;
-#endif
 class WaitableEvent;
 
 // A MessageLoop is used to process events for a particular thread.  There is
@@ -89,10 +75,6 @@
 //
 class BASE_EXPORT MessageLoop : public MessagePump::Delegate {
  public:
-#if defined(OS_WIN)
-  typedef MessagePumpObserver Observer;
-#endif
-
   // A MessageLoop has a particular type, which indicates the set of
   // asynchronous events it may process in addition to tasks and timers.
   //
@@ -103,11 +85,6 @@
   //   This type of ML also supports native UI events (e.g., Windows messages).
   //   See also MessageLoopForUI.
   //
-  // TYPE_GPU
-  //   This type of ML also supports native UI events for use in the GPU
-  //   process. On Linux this will always be an X11 ML (as compared with the
-  //   sometimes-GTK ML in the browser process).
-  //
   // TYPE_IO
   //   This type of ML also supports asynchronous IO.  See also
   //   MessageLoopForIO.
@@ -125,9 +102,6 @@
     TYPE_DEFAULT,
     TYPE_UI,
     TYPE_CUSTOM,
-#if defined(TOOLKIT_GTK)
-    TYPE_GPU,
-#endif
     TYPE_IO,
 #if defined(OS_ANDROID)
     TYPE_JAVA,
@@ -398,17 +372,6 @@
 
   //----------------------------------------------------------------------------
  protected:
-
-#if defined(OS_WIN)
-  MessagePumpWin* pump_win() {
-    return static_cast<MessagePumpWin*>(pump_.get());
-  }
-#elif defined(OS_POSIX) && !defined(OS_IOS)
-  MessagePumpLibevent* pump_libevent() {
-    return static_cast<MessagePumpLibevent*>(pump_.get());
-  }
-#endif
-
   scoped_ptr<MessagePump> pump_;
 
  private:
@@ -524,6 +487,8 @@
   DISALLOW_COPY_AND_ASSIGN(MessageLoop);
 };
 
+#if !defined(OS_NACL)
+
 //-----------------------------------------------------------------------------
 // MessageLoopForUI extends MessageLoop with methods that are particular to a
 // MessageLoop instantiated with TYPE_UI.
@@ -563,13 +528,15 @@
   void Start();
 #endif
 
-#if !defined(OS_NACL) && defined(OS_WIN)
+#if defined(OS_WIN)
+  typedef MessagePumpObserver Observer;
+
   // Please see message_pump_win for definitions of these methods.
   void AddObserver(Observer* observer);
   void RemoveObserver(Observer* observer);
 #endif
 
-#if defined(USE_OZONE) && !defined(OS_NACL)
+#if defined(USE_OZONE) || (defined(OS_CHROMEOS) && !defined(USE_GLIB))
   // Please see MessagePumpLibevent for definition.
   bool WatchFileDescriptor(
       int fd,
@@ -578,14 +545,6 @@
       MessagePumpLibevent::FileDescriptorWatcher* controller,
       MessagePumpLibevent::Watcher* delegate);
 #endif
-
- protected:
-#if !defined(OS_MACOSX) && !defined(OS_ANDROID)
-  // TODO(rvargas): Make this platform independent.
-  MessagePumpForUI* pump_ui() {
-    return static_cast<MessagePumpForUI*>(pump_.get());
-  }
-#endif
 };
 
 // Do not add any member variables to MessageLoopForUI!  This is important b/c
@@ -594,6 +553,8 @@
 COMPILE_ASSERT(sizeof(MessageLoop) == sizeof(MessageLoopForUI),
                MessageLoopForUI_should_not_have_extra_member_variables);
 
+#endif  // !defined(OS_NACL)
+
 //-----------------------------------------------------------------------------
 // MessageLoopForIO extends MessageLoop with methods that are particular to a
 // MessageLoop instantiated with TYPE_IO.
@@ -603,6 +564,23 @@
 //
 class BASE_EXPORT MessageLoopForIO : public MessageLoop {
  public:
+  MessageLoopForIO() : MessageLoop(TYPE_IO) {
+  }
+
+  // Returns the MessageLoopForIO of the current thread.
+  static MessageLoopForIO* current() {
+    MessageLoop* loop = MessageLoop::current();
+    DCHECK_EQ(MessageLoop::TYPE_IO, loop->type());
+    return static_cast<MessageLoopForIO*>(loop);
+  }
+
+  static bool IsCurrent() {
+    MessageLoop* loop = MessageLoop::current();
+    return loop && loop->type() == MessageLoop::TYPE_IO;
+  }
+
+#if !defined(OS_NACL)
+
 #if defined(OS_WIN)
   typedef MessagePumpForIO::IOHandler IOHandler;
   typedef MessagePumpForIO::IOContext IOContext;
@@ -629,70 +607,25 @@
     WATCH_WRITE = MessagePumpLibevent::WATCH_WRITE,
     WATCH_READ_WRITE = MessagePumpLibevent::WATCH_READ_WRITE
   };
-
 #endif
 
-  MessageLoopForIO() : MessageLoop(TYPE_IO) {
-  }
-
-  // Returns the MessageLoopForIO of the current thread.
-  static MessageLoopForIO* current() {
-    MessageLoop* loop = MessageLoop::current();
-    DCHECK_EQ(MessageLoop::TYPE_IO, loop->type());
-    return static_cast<MessageLoopForIO*>(loop);
-  }
-
-  static bool IsCurrent() {
-    MessageLoop* loop = MessageLoop::current();
-    return loop && loop->type() == MessageLoop::TYPE_IO;
-  }
-
-  void AddIOObserver(IOObserver* io_observer) {
-    pump_io()->AddIOObserver(io_observer);
-  }
-
-  void RemoveIOObserver(IOObserver* io_observer) {
-    pump_io()->RemoveIOObserver(io_observer);
-  }
+  void AddIOObserver(IOObserver* io_observer);
+  void RemoveIOObserver(IOObserver* io_observer);
 
 #if defined(OS_WIN)
   // Please see MessagePumpWin for definitions of these methods.
   void RegisterIOHandler(HANDLE file, IOHandler* handler);
   bool RegisterJobObject(HANDLE job, IOHandler* handler);
   bool WaitForIOCompletion(DWORD timeout, IOHandler* filter);
-
- protected:
-  // TODO(rvargas): Make this platform independent.
-  MessagePumpForIO* pump_io() {
-    return static_cast<MessagePumpForIO*>(pump_.get());
-  }
-
-#elif defined(OS_IOS)
-  // Please see MessagePumpIOSForIO for definition.
+#elif defined(OS_POSIX)
+  // Please see MessagePumpIOSForIO/MessagePumpLibevent for definition.
   bool WatchFileDescriptor(int fd,
                            bool persistent,
                            Mode mode,
                            FileDescriptorWatcher *controller,
                            Watcher *delegate);
-
- private:
-  MessagePumpIOSForIO* pump_io() {
-    return static_cast<MessagePumpIOSForIO*>(pump_.get());
-  }
-
-#elif defined(OS_POSIX)
-  // Please see MessagePumpLibevent for definition.
-  bool WatchFileDescriptor(int fd,
-                           bool persistent,
-                           Mode mode,
-                           FileDescriptorWatcher* controller,
-                           Watcher* delegate);
-
- private:
-  MessagePumpLibevent* pump_io() {
-    return static_cast<MessagePumpLibevent*>(pump_.get());
-  }
-#endif  // defined(OS_POSIX)
+#endif  // defined(OS_IOS) || defined(OS_POSIX)
+#endif  // !defined(OS_NACL)
 };
 
 // Do not add any member variables to MessageLoopForIO!  This is important b/c
diff --git a/base/message_loop/message_loop_unittest.cc b/base/message_loop/message_loop_unittest.cc
index 7ccee73..1b09eb0 100644
--- a/base/message_loop/message_loop_unittest.cc
+++ b/base/message_loop/message_loop_unittest.cc
@@ -12,7 +12,6 @@
 #include "base/message_loop/message_loop.h"
 #include "base/message_loop/message_loop_proxy_impl.h"
 #include "base/message_loop/message_loop_test.h"
-#include "base/message_loop/message_pump_dispatcher.h"
 #include "base/pending_task.h"
 #include "base/posix/eintr_wrapper.h"
 #include "base/run_loop.h"
@@ -23,6 +22,7 @@
 #include "testing/gtest/include/gtest/gtest.h"
 
 #if defined(OS_WIN)
+#include "base/message_loop/message_pump_dispatcher.h"
 #include "base/message_loop/message_pump_win.h"
 #include "base/process/memory.h"
 #include "base/strings/string16.h"
diff --git a/base/message_loop/message_pump_glib.cc b/base/message_loop/message_pump_glib.cc
index 3da5f56..873d496 100644
--- a/base/message_loop/message_pump_glib.cc
+++ b/base/message_loop/message_pump_glib.cc
@@ -121,7 +121,6 @@
 
 struct MessagePumpGlib::RunState {
   Delegate* delegate;
-  MessagePumpDispatcher* dispatcher;
 
   // Used to flag that the current Run() invocation should return ASAP.
   bool should_quit;
@@ -167,65 +166,6 @@
   close(wakeup_pipe_write_);
 }
 
-void MessagePumpGlib::RunWithDispatcher(Delegate* delegate,
-                                        MessagePumpDispatcher* dispatcher) {
-#ifndef NDEBUG
-  // Make sure we only run this on one thread. X/GTK only has one message pump
-  // so we can only have one UI loop per process.
-  static PlatformThreadId thread_id = PlatformThread::CurrentId();
-  DCHECK(thread_id == PlatformThread::CurrentId()) <<
-      "Running MessagePumpGlib on two different threads; "
-      "this is unsupported by GLib!";
-#endif
-
-  RunState state;
-  state.delegate = delegate;
-  state.dispatcher = dispatcher;
-  state.should_quit = false;
-  state.run_depth = state_ ? state_->run_depth + 1 : 1;
-  state.has_work = false;
-
-  RunState* previous_state = state_;
-  state_ = &state;
-
-  // We really only do a single task for each iteration of the loop.  If we
-  // have done something, assume there is likely something more to do.  This
-  // will mean that we don't block on the message pump until there was nothing
-  // more to do.  We also set this to true to make sure not to block on the
-  // first iteration of the loop, so RunUntilIdle() works correctly.
-  bool more_work_is_plausible = true;
-
-  // We run our own loop instead of using g_main_loop_quit in one of the
-  // callbacks.  This is so we only quit our own loops, and we don't quit
-  // nested loops run by others.  TODO(deanm): Is this what we want?
-  for (;;) {
-    // Don't block if we think we have more work to do.
-    bool block = !more_work_is_plausible;
-
-    more_work_is_plausible = g_main_context_iteration(context_, block);
-    if (state_->should_quit)
-      break;
-
-    more_work_is_plausible |= state_->delegate->DoWork();
-    if (state_->should_quit)
-      break;
-
-    more_work_is_plausible |=
-        state_->delegate->DoDelayedWork(&delayed_work_time_);
-    if (state_->should_quit)
-      break;
-
-    if (more_work_is_plausible)
-      continue;
-
-    more_work_is_plausible = state_->delegate->DoIdleWork();
-    if (state_->should_quit)
-      break;
-  }
-
-  state_ = previous_state;
-}
-
 // Return the timeout we want passed to poll.
 int MessagePumpGlib::HandlePrepare() {
   // We know we have work, but we haven't called HandleDispatch yet. Don't let
@@ -291,7 +231,60 @@
 }
 
 void MessagePumpGlib::Run(Delegate* delegate) {
-  RunWithDispatcher(delegate, NULL);
+#ifndef NDEBUG
+  // Make sure we only run this on one thread. X only has one message pump
+  // so we can only have one UI loop per process.
+  static PlatformThreadId thread_id = PlatformThread::CurrentId();
+  DCHECK(thread_id == PlatformThread::CurrentId()) <<
+      "Running MessagePumpGlib on two different threads; "
+      "this is unsupported by GLib!";
+#endif
+
+  RunState state;
+  state.delegate = delegate;
+  state.should_quit = false;
+  state.run_depth = state_ ? state_->run_depth + 1 : 1;
+  state.has_work = false;
+
+  RunState* previous_state = state_;
+  state_ = &state;
+
+  // We really only do a single task for each iteration of the loop.  If we
+  // have done something, assume there is likely something more to do.  This
+  // will mean that we don't block on the message pump until there was nothing
+  // more to do.  We also set this to true to make sure not to block on the
+  // first iteration of the loop, so RunUntilIdle() works correctly.
+  bool more_work_is_plausible = true;
+
+  // We run our own loop instead of using g_main_loop_quit in one of the
+  // callbacks.  This is so we only quit our own loops, and we don't quit
+  // nested loops run by others.  TODO(deanm): Is this what we want?
+  for (;;) {
+    // Don't block if we think we have more work to do.
+    bool block = !more_work_is_plausible;
+
+    more_work_is_plausible = g_main_context_iteration(context_, block);
+    if (state_->should_quit)
+      break;
+
+    more_work_is_plausible |= state_->delegate->DoWork();
+    if (state_->should_quit)
+      break;
+
+    more_work_is_plausible |=
+        state_->delegate->DoDelayedWork(&delayed_work_time_);
+    if (state_->should_quit)
+      break;
+
+    if (more_work_is_plausible)
+      continue;
+
+    more_work_is_plausible = state_->delegate->DoIdleWork();
+    if (state_->should_quit)
+      break;
+  }
+
+  state_ = previous_state;
 }
 
 void MessagePumpGlib::Quit() {
@@ -319,10 +312,6 @@
   ScheduleWork();
 }
 
-MessagePumpDispatcher* MessagePumpGlib::GetDispatcher() {
-  return state_ ? state_->dispatcher : NULL;
-}
-
 bool MessagePumpGlib::ShouldQuit() const {
   CHECK(state_);
   return state_->should_quit;
diff --git a/base/message_loop/message_pump_glib.h b/base/message_loop/message_pump_glib.h
index 9acc472..a13493a 100644
--- a/base/message_loop/message_pump_glib.h
+++ b/base/message_loop/message_pump_glib.h
@@ -17,19 +17,6 @@
 
 namespace base {
 
-// MessagePumpObserver is notified prior to an event being dispatched. As
-// Observers are notified of every change, they have to be FAST! The platform
-// specific implementation of the class is in message_pump_gtk/message_pump_x.
-class MessagePumpObserver;
-
-// MessagePumpDispatcher is used during a nested invocation of Run to dispatch
-// events. If Run is invoked with a non-NULL MessagePumpDispatcher, MessageLoop
-// does not dispatch events (or invoke gtk_main_do_event), rather every event is
-// passed to Dispatcher's Dispatch method for dispatch. It is up to the
-// Dispatcher to dispatch, or not, the event. The platform specific
-// implementation of the class is in message_pump_gtk/message_pump_x.
-class MessagePumpDispatcher;
-
 // This class implements a base MessagePump needed for TYPE_UI MessageLoops on
 // platforms using GLib.
 class BASE_EXPORT MessagePumpGlib : public MessagePump {
@@ -37,10 +24,6 @@
   MessagePumpGlib();
   virtual ~MessagePumpGlib();
 
-  // Like MessagePump::Run, but events are routed through dispatcher.
-  virtual void RunWithDispatcher(Delegate* delegate,
-                                 MessagePumpDispatcher* dispatcher);
-
   // Internal methods used for processing the pump callbacks.  They are
   // public for simplicity but should not be used directly.  HandlePrepare
   // is called during the prepare step of glib, and returns a timeout that
@@ -57,13 +40,9 @@
   virtual void ScheduleWork() OVERRIDE;
   virtual void ScheduleDelayedWork(const TimeTicks& delayed_work_time) OVERRIDE;
 
- protected:
-  // Returns the dispatcher for the current run state (|state_->dispatcher|).
-  MessagePumpDispatcher* GetDispatcher();
-
+ private:
   bool ShouldQuit() const;
 
- private:
   // We may make recursive calls to Run, so we save state that needs to be
   // separate between them in this structure type.
   struct RunState;
@@ -94,8 +73,6 @@
   DISALLOW_COPY_AND_ASSIGN(MessagePumpGlib);
 };
 
-typedef MessagePumpGlib MessagePumpForUI;
-
 }  // namespace base
 
 #endif  // BASE_MESSAGE_LOOP_MESSAGE_PUMP_GLIB_H_
diff --git a/base/message_loop/message_pump_glib_unittest.cc b/base/message_loop/message_pump_glib_unittest.cc
index 033e6cd..aaf6b4d 100644
--- a/base/message_loop/message_pump_glib_unittest.cc
+++ b/base/message_loop/message_pump_glib_unittest.cc
@@ -19,10 +19,6 @@
 #include "base/threading/thread.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
-#if defined(TOOLKIT_GTK)
-#include <gtk/gtk.h>
-#endif
-
 namespace base {
 namespace {
 
@@ -406,42 +402,6 @@
   EXPECT_EQ(3, injector()->processed_events());
 }
 
-
-namespace {
-
-#if defined(TOOLKIT_GTK)
-void AddEventsAndDrainGtk(EventInjector* injector) {
-  // Add a couple of dummy events
-  injector->AddDummyEvent(0);
-  injector->AddDummyEvent(0);
-  // Then add an event that will quit the main loop.
-  injector->AddEvent(0, MessageLoop::QuitWhenIdleClosure());
-
-  // Post a couple of dummy tasks
-  MessageLoop::current()->PostTask(FROM_HERE, Bind(&DoNothing));
-  MessageLoop::current()->PostTask(FROM_HERE, Bind(&DoNothing));
-
-  // Drain the events
-  while (gtk_events_pending()) {
-    gtk_main_iteration();
-  }
-}
-#endif
-
-}  // namespace
-
-#if defined(TOOLKIT_GTK)
-TEST_F(MessagePumpGLibTest, TestDrainingGtk) {
-  // Tests that draining events using Gtk works.
-  loop()->PostTask(
-      FROM_HERE,
-      Bind(&AddEventsAndDrainGtk, Unretained(injector())));
-  loop()->Run();
-
-  EXPECT_EQ(3, injector()->processed_events());
-}
-#endif
-
 namespace {
 
 // Helper class that lets us run the GLib message loop.
@@ -456,15 +416,9 @@
   }
 
   void RunLoop() {
-#if defined(TOOLKIT_GTK)
-    while (!quit_) {
-      gtk_main_iteration();
-    }
-#else
     while (!quit_) {
       g_main_context_iteration(NULL, TRUE);
     }
-#endif
   }
 
   void Quit() {
diff --git a/base/message_loop/message_pump_gtk.cc b/base/message_loop/message_pump_gtk.cc
deleted file mode 100644
index 3279d38..0000000
--- a/base/message_loop/message_pump_gtk.cc
+++ /dev/null
@@ -1,122 +0,0 @@
-// Copyright (c) 2012 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 "base/message_loop/message_pump_gtk.h"
-
-#include <gtk/gtk.h>
-#include <gdk/gdkx.h>
-
-#include "base/debug/trace_event.h"
-#include "base/profiler/scoped_profile.h"
-
-#error "The GTK+ port will be deleted later this week. If you are seeing this, you are trying to compile it. Please check your gyp flags for 'use_aura=0' and remove them."
-
-namespace base {
-
-namespace {
-
-ALLOW_UNUSED const char* EventToTypeString(const GdkEvent* event) {
-  switch (event->type) {
-    case GDK_NOTHING:           return "GDK_NOTHING";
-    case GDK_DELETE:            return "GDK_DELETE";
-    case GDK_DESTROY:           return "GDK_DESTROY";
-    case GDK_EXPOSE:            return "GDK_EXPOSE";
-    case GDK_MOTION_NOTIFY:     return "GDK_MOTION_NOTIFY";
-    case GDK_BUTTON_PRESS:      return "GDK_BUTTON_PRESS";
-    case GDK_2BUTTON_PRESS:     return "GDK_2BUTTON_PRESS";
-    case GDK_3BUTTON_PRESS:     return "GDK_3BUTTON_PRESS";
-    case GDK_BUTTON_RELEASE:    return "GDK_BUTTON_RELEASE";
-    case GDK_KEY_PRESS:         return "GDK_KEY_PRESS";
-    case GDK_KEY_RELEASE:       return "GDK_KEY_RELEASE";
-    case GDK_ENTER_NOTIFY:      return "GDK_ENTER_NOTIFY";
-    case GDK_LEAVE_NOTIFY:      return "GDK_LEAVE_NOTIFY";
-    case GDK_FOCUS_CHANGE:      return "GDK_FOCUS_CHANGE";
-    case GDK_CONFIGURE:         return "GDK_CONFIGURE";
-    case GDK_MAP:               return "GDK_MAP";
-    case GDK_UNMAP:             return "GDK_UNMAP";
-    case GDK_PROPERTY_NOTIFY:   return "GDK_PROPERTY_NOTIFY";
-    case GDK_SELECTION_CLEAR:   return "GDK_SELECTION_CLEAR";
-    case GDK_SELECTION_REQUEST: return "GDK_SELECTION_REQUEST";
-    case GDK_SELECTION_NOTIFY:  return "GDK_SELECTION_NOTIFY";
-    case GDK_PROXIMITY_IN:      return "GDK_PROXIMITY_IN";
-    case GDK_PROXIMITY_OUT:     return "GDK_PROXIMITY_OUT";
-    case GDK_DRAG_ENTER:        return "GDK_DRAG_ENTER";
-    case GDK_DRAG_LEAVE:        return "GDK_DRAG_LEAVE";
-    case GDK_DRAG_MOTION:       return "GDK_DRAG_MOTION";
-    case GDK_DRAG_STATUS:       return "GDK_DRAG_STATUS";
-    case GDK_DROP_START:        return "GDK_DROP_START";
-    case GDK_DROP_FINISHED:     return "GDK_DROP_FINISHED";
-    case GDK_CLIENT_EVENT:      return "GDK_CLIENT_EVENT";
-    case GDK_VISIBILITY_NOTIFY: return "GDK_VISIBILITY_NOTIFY";
-    case GDK_NO_EXPOSE:         return "GDK_NO_EXPOSE";
-    case GDK_SCROLL:            return "GDK_SCROLL";
-    case GDK_WINDOW_STATE:      return "GDK_WINDOW_STATE";
-    case GDK_SETTING:           return "GDK_SETTING";
-    case GDK_OWNER_CHANGE:      return "GDK_OWNER_CHANGE";
-    case GDK_GRAB_BROKEN:       return "GDK_GRAB_BROKEN";
-    case GDK_DAMAGE:            return "GDK_DAMAGE";
-    default:
-      return "Unknown Gdk Event";
-  }
-}
-
-}  // namespace
-
-MessagePumpGtk::MessagePumpGtk() : MessagePumpGlib() {
-  gdk_event_handler_set(&EventDispatcher, this, NULL);
-}
-
-MessagePumpGtk::~MessagePumpGtk() {
-  gdk_event_handler_set(reinterpret_cast<GdkEventFunc>(gtk_main_do_event),
-                        this, NULL);
-}
-
-void MessagePumpGtk::DispatchEvents(GdkEvent* event) {
-  UNSHIPPED_TRACE_EVENT1("toplevel", "MessagePumpGtk::DispatchEvents",
-                         "type", EventToTypeString(event));
-
-  WillProcessEvent(event);
-  gtk_main_do_event(event);
-  DidProcessEvent(event);
-}
-
-// static
-Display* MessagePumpGtk::GetDefaultXDisplay() {
-  static GdkDisplay* display = gdk_display_get_default();
-  if (!display) {
-    // GTK / GDK has not been initialized, which is a decision we wish to
-    // support, for example for the GPU process.
-    static Display* xdisplay = XOpenDisplay(NULL);
-    return xdisplay;
-  }
-  return GDK_DISPLAY_XDISPLAY(display);
-}
-
-void MessagePumpGtk::AddObserver(MessagePumpGdkObserver* observer) {
-  observers_.AddObserver(observer);
-}
-
-void MessagePumpGtk::RemoveObserver(MessagePumpGdkObserver* observer) {
-  observers_.RemoveObserver(observer);
-}
-
-void MessagePumpGtk::WillProcessEvent(GdkEvent* event) {
-  FOR_EACH_OBSERVER(MessagePumpGdkObserver,
-                    observers_,
-                    WillProcessEvent(event));
-}
-
-void MessagePumpGtk::DidProcessEvent(GdkEvent* event) {
-  FOR_EACH_OBSERVER(MessagePumpGdkObserver,
-                    observers_,
-                    DidProcessEvent(event));
-}
-
-// static
-void MessagePumpGtk::EventDispatcher(GdkEvent* event, gpointer data) {
-  MessagePumpGtk* message_pump = reinterpret_cast<MessagePumpGtk*>(data);
-  message_pump->DispatchEvents(event);
-}
-
-}  // namespace base
diff --git a/base/message_loop/message_pump_gtk.h b/base/message_loop/message_pump_gtk.h
deleted file mode 100644
index b3c3b8c..0000000
--- a/base/message_loop/message_pump_gtk.h
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright (c) 2012 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 BASE_MESSAGE_LOOP_MESSAGE_PUMP_GTK_H_
-#define BASE_MESSAGE_LOOP_MESSAGE_PUMP_GTK_H_
-
-#include "base/message_loop/message_pump_glib.h"
-
-typedef union _GdkEvent GdkEvent;
-typedef struct _XDisplay Display;
-
-namespace base {
-
-// The documentation for this class is in message_pump_glib.h
-class MessagePumpGdkObserver {
- public:
-  // This method is called before processing a message.
-  virtual void WillProcessEvent(GdkEvent* event) = 0;
-
-  // This method is called after processing a message.
-  virtual void DidProcessEvent(GdkEvent* event) = 0;
-
- protected:
-  virtual ~MessagePumpGdkObserver() {}
-};
-
-// This class implements a message-pump for dispatching GTK events.
-class BASE_EXPORT MessagePumpGtk : public MessagePumpGlib {
- public:
-  MessagePumpGtk();
-  virtual ~MessagePumpGtk();
-
-  // Dispatch an available GdkEvent. Essentially this allows a subclass to do
-  // some task before/after calling the default handler (EventDispatcher).
-  void DispatchEvents(GdkEvent* event);
-
-  // Returns default X Display.
-  static Display* GetDefaultXDisplay();
-
-  // Adds an Observer, which will start receiving notifications immediately.
-  void AddObserver(MessagePumpGdkObserver* observer);
-
-  // Removes an Observer.  It is safe to call this method while an Observer is
-  // receiving a notification callback.
-  void RemoveObserver(MessagePumpGdkObserver* observer);
-
- private:
-  // Invoked from EventDispatcher. Notifies all observers we're about to
-  // process an event.
-  void WillProcessEvent(GdkEvent* event);
-
-  // Invoked from EventDispatcher. Notifies all observers we processed an
-  // event.
-  void DidProcessEvent(GdkEvent* event);
-
-  // Callback prior to gdk dispatching an event.
-  static void EventDispatcher(GdkEvent* event, void* data);
-
-  // List of observers.
-  ObserverList<MessagePumpGdkObserver> observers_;
-
-  DISALLOW_COPY_AND_ASSIGN(MessagePumpGtk);
-};
-
-typedef MessagePumpGtk MessagePumpForUI;
-
-}  // namespace base
-
-#endif  // BASE_MESSAGE_LOOP_MESSAGE_PUMP_GTK_H_
diff --git a/base/run_loop.cc b/base/run_loop.cc
index 663d623..8344aa4 100644
--- a/base/run_loop.cc
+++ b/base/run_loop.cc
@@ -6,7 +6,7 @@
 
 #include "base/bind.h"
 
-#if defined(USE_AURA)
+#if defined(OS_WIN)
 #include "base/message_loop/message_pump_dispatcher.h"
 #endif
 
diff --git a/base/run_loop.h b/base/run_loop.h
index 71703f0..0024108 100644
--- a/base/run_loop.h
+++ b/base/run_loop.h
@@ -15,7 +15,7 @@
 class MessagePumpForUI;
 #endif
 
-#if defined(USE_AURA)
+#if defined(OS_WIN)
 class MessagePumpDispatcher;
 #endif
 
diff --git a/base/security_unittest.cc b/base/security_unittest.cc
index 6735f6a..fa067c8 100644
--- a/base/security_unittest.cc
+++ b/base/security_unittest.cc
@@ -59,7 +59,7 @@
 
 // Detect runtime TCMalloc bypasses.
 bool IsTcMallocBypassed() {
-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
+#if defined(OS_LINUX)
   // This should detect a TCMalloc bypass from Valgrind.
   char* g_slice = getenv("G_SLICE");
   if (g_slice && !strcmp(g_slice, "always-malloc"))
@@ -230,7 +230,7 @@
   }
 }
 
-#if (defined(OS_LINUX) || defined(OS_CHROMEOS)) && defined(__x86_64__)
+#if defined(OS_LINUX) && defined(__x86_64__)
 // Check if ptr1 and ptr2 are separated by less than size chars.
 bool ArePointersToSameArea(void* ptr1, void* ptr2, size_t size) {
   ptrdiff_t ptr_diff = reinterpret_cast<char*>(std::max(ptr1, ptr2)) -
@@ -286,6 +286,6 @@
   EXPECT_FALSE(impossible_random_address);
 }
 
-#endif  // (defined(OS_LINUX) || defined(OS_CHROMEOS)) && defined(__x86_64__)
+#endif  // defined(OS_LINUX) && defined(__x86_64__)
 
 }  // namespace
diff --git a/base/strings/utf_offset_string_conversions.cc b/base/strings/utf_offset_string_conversions.cc
index 339bd5e..731175f 100644
--- a/base/strings/utf_offset_string_conversions.cc
+++ b/base/strings/utf_offset_string_conversions.cc
@@ -6,30 +6,157 @@
 
 #include <algorithm>
 
+#include "base/logging.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/strings/string_piece.h"
 #include "base/strings/utf_string_conversion_utils.h"
 
 namespace base {
 
+OffsetAdjuster::Adjustment::Adjustment(size_t original_offset,
+                                       size_t original_length,
+                                       size_t output_length)
+    : original_offset(original_offset),
+      original_length(original_length),
+      output_length(output_length) {
+}
+
+// static
+void OffsetAdjuster::AdjustOffsets(
+    const Adjustments& adjustments,
+    std::vector<size_t>* offsets_for_adjustment) {
+  if (!offsets_for_adjustment || adjustments.empty())
+    return;
+  for (std::vector<size_t>::iterator i(offsets_for_adjustment->begin());
+       i != offsets_for_adjustment->end(); ++i)
+    AdjustOffset(adjustments, &(*i));
+}
+
+// static
+void OffsetAdjuster::AdjustOffset(const Adjustments& adjustments,
+                                  size_t* offset) {
+  if (*offset == string16::npos)
+    return;
+  size_t adjustment = 0;
+  for (Adjustments::const_iterator i = adjustments.begin();
+       i != adjustments.end(); ++i) {
+    if (*offset <= i->original_offset)
+      break;
+    if (*offset < (i->original_offset + i->original_length)) {
+      *offset = string16::npos;
+      return;
+    }
+    adjustment += (i->original_length - i->output_length);
+  }
+  *offset -= adjustment;
+}
+
+// static
+void OffsetAdjuster::MergeSequentialAdjustments(
+    const Adjustments& first_adjustments,
+    Adjustments* adjustments_on_adjusted_string) {
+  Adjustments::iterator adjusted_iter = adjustments_on_adjusted_string->begin();
+  Adjustments::const_iterator first_iter = first_adjustments.begin();
+  // Simultaneously iterate over all |adjustments_on_adjusted_string| and
+  // |first_adjustments|, adding adjustments to or correcting the adjustments
+  // in |adjustments_on_adjusted_string| as we go.  |shift| keeps track of the
+  // current number of characters collapsed by |first_adjustments| up to this
+  // point.  |currently_collapsing| keeps track of the number of characters
+  // collapsed by |first_adjustments| into the current |adjusted_iter|'s
+  // length.  These are characters that will change |shift| as soon as we're
+  // done processing the current |adjusted_iter|; they are not yet reflected in
+  // |shift|.
+  size_t shift = 0;
+  size_t currently_collapsing = 0;
+  while (adjusted_iter != adjustments_on_adjusted_string->end()) {
+    if ((first_iter == first_adjustments.end()) ||
+        ((adjusted_iter->original_offset + shift +
+          adjusted_iter->original_length) <= first_iter->original_offset)) {
+      // Entire |adjusted_iter| (accounting for its shift and including its
+      // whole original length) comes before |first_iter|.
+      //
+      // Correct the offset at |adjusted_iter| and move onto the next
+      // adjustment that needs revising.
+      adjusted_iter->original_offset += shift;
+      shift += currently_collapsing;
+      currently_collapsing = 0;
+      ++adjusted_iter;
+    } else if ((adjusted_iter->original_offset + shift) >
+               first_iter->original_offset) {
+      // |first_iter| comes before the |adjusted_iter| (as adjusted by |shift|).
+
+      // It's not possible for the adjustments to overlap.  (It shouldn't
+      // be possible that we have an |adjusted_iter->original_offset| that,
+      // when adjusted by the computed |shift|, is in the middle of
+      // |first_iter|'s output's length.  After all, that would mean the
+      // current adjustment_on_adjusted_string somehow points to an offset
+      // that was supposed to have been eliminated by the first set of
+      // adjustments.)
+      DCHECK_LE(first_iter->original_offset + first_iter->output_length,
+                adjusted_iter->original_offset + shift);
+
+      // Add the |first_adjustment_iter| to the full set of adjustments while
+      // making sure |adjusted_iter| continues pointing to the same element.
+      // We do this by inserting the |first_adjustment_iter| right before
+      // |adjusted_iter|, then incrementing |adjusted_iter| so it points to
+      // the following element.
+      shift += first_iter->original_length - first_iter->output_length;
+      adjusted_iter = adjustments_on_adjusted_string->insert(
+          adjusted_iter, *first_iter);
+      ++adjusted_iter;
+      ++first_iter;
+    } else {
+      // The first adjustment adjusted something that then got further adjusted
+      // by the second set of adjustments.  In other words, |first_iter| points
+      // to something in the range covered by |adjusted_iter|'s length (after
+      // accounting for |shift|).  Precisely,
+      //   adjusted_iter->original_offset + shift
+      //   <=
+      //   first_iter->original_offset
+      //   <=
+      //   adjusted_iter->original_offset + shift +
+      //       adjusted_iter->original_length
+
+      // Modify the current |adjusted_iter| to include whatever collapsing
+      // happened in |first_iter|, then advance to the next |first_adjustments|
+      // because we dealt with the current one.
+      const int collapse = static_cast<int>(first_iter->original_length) -
+          static_cast<int>(first_iter->output_length);
+      // This function does not know how to deal with a string that expands and
+      // then gets modified, only strings that collapse and then get modified.
+      DCHECK_GT(collapse, 0);
+      adjusted_iter->original_length += collapse;
+      currently_collapsing += collapse;
+      ++first_iter;
+    }
+  }
+  DCHECK_EQ(0u, currently_collapsing);
+  if (first_iter != first_adjustments.end()) {
+    // Only first adjustments are left.  These do not need to be modified.
+    // (Their offsets are already correct with respect to the original string.)
+    // Append them all.
+    DCHECK(adjusted_iter == adjustments_on_adjusted_string->end());
+    adjustments_on_adjusted_string->insert(
+        adjustments_on_adjusted_string->end(), first_iter,
+        first_adjustments.end());
+  }
+}
+
 // Converts the given source Unicode character type to the given destination
 // Unicode character type as a STL string. The given input buffer and size
 // determine the source, and the given output STL string will be replaced by
-// the result.
+// the result.  If non-NULL, |adjustments| is set to reflect the all the
+// alterations to the string that are not one-character-to-one-character.
+// It will always be sorted by increasing offset.
 template<typename SrcChar, typename DestStdString>
 bool ConvertUnicode(const SrcChar* src,
                     size_t src_len,
                     DestStdString* output,
-                    std::vector<size_t>* offsets_for_adjustment) {
-  if (offsets_for_adjustment) {
-    std::for_each(offsets_for_adjustment->begin(),
-                  offsets_for_adjustment->end(),
-                  LimitOffset<DestStdString>(src_len));
-  }
-
+                    OffsetAdjuster::Adjustments* adjustments) {
+  if (adjustments)
+    adjustments->clear();
   // ICU requires 32-bit numbers.
   bool success = true;
-  OffsetAdjuster offset_adjuster(offsets_for_adjustment);
   int32 src_len32 = static_cast<int32>(src_len);
   for (int32 i = 0; i < src_len32; i++) {
     uint32 code_point;
@@ -41,122 +168,62 @@
       chars_written = WriteUnicodeCharacter(0xFFFD, output);
       success = false;
     }
-    if (offsets_for_adjustment) {
-      // NOTE: ReadUnicodeCharacter() adjusts |i| to point _at_ the last
-      // character read, not after it (so that incrementing it in the loop
-      // increment will place it at the right location), so we need to account
-      // for that in determining the amount that was read.
-      offset_adjuster.Add(OffsetAdjuster::Adjustment(original_i,
-          i - original_i + 1, chars_written));
+
+    // Only bother writing an adjustment if this modification changed the
+    // length of this character.
+    // NOTE: ReadUnicodeCharacter() adjusts |i| to point _at_ the last
+    // character read, not after it (so that incrementing it in the loop
+    // increment will place it at the right location), so we need to account
+    // for that in determining the amount that was read.
+    if (adjustments && ((i - original_i + 1) != chars_written)) {
+      adjustments->push_back(OffsetAdjuster::Adjustment(
+          original_i, i - original_i + 1, chars_written));
     }
   }
   return success;
 }
 
-bool UTF8ToUTF16AndAdjustOffset(const char* src,
-                                size_t src_len,
-                                string16* output,
-                                size_t* offset_for_adjustment) {
-  std::vector<size_t> offsets;
-  if (offset_for_adjustment)
-    offsets.push_back(*offset_for_adjustment);
+bool UTF8ToUTF16WithAdjustments(
+    const char* src,
+    size_t src_len,
+    string16* output,
+    base::OffsetAdjuster::Adjustments* adjustments) {
   PrepareForUTF16Or32Output(src, src_len, output);
-  bool ret = ConvertUnicode(src, src_len, output, &offsets);
-  if (offset_for_adjustment)
-    *offset_for_adjustment = offsets[0];
-  return ret;
+  return ConvertUnicode(src, src_len, output, adjustments);
 }
 
-bool UTF8ToUTF16AndAdjustOffsets(const char* src,
-                                 size_t src_len,
-                                 string16* output,
-                                 std::vector<size_t>* offsets_for_adjustment) {
-  PrepareForUTF16Or32Output(src, src_len, output);
-  return ConvertUnicode(src, src_len, output, offsets_for_adjustment);
-}
-
-string16 UTF8ToUTF16AndAdjustOffset(const base::StringPiece& utf8,
-                                        size_t* offset_for_adjustment) {
-  std::vector<size_t> offsets;
-  if (offset_for_adjustment)
-    offsets.push_back(*offset_for_adjustment);
+string16 UTF8ToUTF16WithAdjustments(
+    const base::StringPiece& utf8,
+    base::OffsetAdjuster::Adjustments* adjustments) {
   string16 result;
-  UTF8ToUTF16AndAdjustOffsets(utf8.data(), utf8.length(), &result,
-                              &offsets);
-  if (offset_for_adjustment)
-    *offset_for_adjustment = offsets[0];
+  UTF8ToUTF16WithAdjustments(utf8.data(), utf8.length(), &result, adjustments);
   return result;
 }
 
 string16 UTF8ToUTF16AndAdjustOffsets(
     const base::StringPiece& utf8,
     std::vector<size_t>* offsets_for_adjustment) {
-  string16 result;
-  UTF8ToUTF16AndAdjustOffsets(utf8.data(), utf8.length(), &result,
-                              offsets_for_adjustment);
-  return result;
-}
-
-std::string UTF16ToUTF8AndAdjustOffset(
-    const base::StringPiece16& utf16,
-    size_t* offset_for_adjustment) {
-  std::vector<size_t> offsets;
-  if (offset_for_adjustment)
-    offsets.push_back(*offset_for_adjustment);
-  std::string result = UTF16ToUTF8AndAdjustOffsets(utf16, &offsets);
-  if (offset_for_adjustment)
-    *offset_for_adjustment = offsets[0];
+  std::for_each(offsets_for_adjustment->begin(),
+                offsets_for_adjustment->end(),
+                LimitOffset<base::StringPiece>(utf8.length()));
+  OffsetAdjuster::Adjustments adjustments;
+  string16 result = UTF8ToUTF16WithAdjustments(utf8, &adjustments);
+  OffsetAdjuster::AdjustOffsets(adjustments, offsets_for_adjustment);
   return result;
 }
 
 std::string UTF16ToUTF8AndAdjustOffsets(
     const base::StringPiece16& utf16,
     std::vector<size_t>* offsets_for_adjustment) {
+  std::for_each(offsets_for_adjustment->begin(),
+                offsets_for_adjustment->end(),
+                LimitOffset<base::StringPiece16>(utf16.length()));
   std::string result;
   PrepareForUTF8Output(utf16.data(), utf16.length(), &result);
-  ConvertUnicode(utf16.data(), utf16.length(), &result, offsets_for_adjustment);
+  OffsetAdjuster::Adjustments adjustments;
+  ConvertUnicode(utf16.data(), utf16.length(), &result, &adjustments);
+  OffsetAdjuster::AdjustOffsets(adjustments, offsets_for_adjustment);
   return result;
 }
 
-OffsetAdjuster::Adjustment::Adjustment(size_t original_offset,
-                                       size_t original_length,
-                                       size_t output_length)
-    : original_offset(original_offset),
-      original_length(original_length),
-      output_length(output_length) {
-}
-
-OffsetAdjuster::OffsetAdjuster(std::vector<size_t>* offsets_for_adjustment)
-    : offsets_for_adjustment_(offsets_for_adjustment) {
-}
-
-OffsetAdjuster::~OffsetAdjuster() {
-  if (!offsets_for_adjustment_ || adjustments_.empty())
-    return;
-  for (std::vector<size_t>::iterator i(offsets_for_adjustment_->begin());
-       i != offsets_for_adjustment_->end(); ++i)
-    AdjustOffset(i);
-}
-
-void OffsetAdjuster::Add(const Adjustment& adjustment) {
-  adjustments_.push_back(adjustment);
-}
-
-void OffsetAdjuster::AdjustOffset(std::vector<size_t>::iterator offset) {
-  if (*offset == string16::npos)
-    return;
-  size_t adjustment = 0;
-  for (std::vector<Adjustment>::const_iterator i = adjustments_.begin();
-       i != adjustments_.end(); ++i) {
-    if (*offset <= i->original_offset)
-      break;
-    if (*offset < (i->original_offset + i->original_length)) {
-      *offset = string16::npos;
-      return;
-    }
-    adjustment += (i->original_length - i->output_length);
-  }
-  *offset -= adjustment;
-}
-
 }  // namespace base
diff --git a/base/strings/utf_offset_string_conversions.h b/base/strings/utf_offset_string_conversions.h
index bdb7c11..463772d 100644
--- a/base/strings/utf_offset_string_conversions.h
+++ b/base/strings/utf_offset_string_conversions.h
@@ -14,35 +14,78 @@
 
 namespace base {
 
-// Like the conversions in utf_string_conversions.h, but also takes one or more
-// |offset[s]_for_adjustment| representing insertion/selection points between
-// characters: if |src| is "abcd", then 0 is before 'a', 2 is between 'b' and
-// 'c', and 4 is at the end of the string.  Valid input offsets range from 0 to
-// |src_len|.  On exit, each offset will have been modified to point at the same
-// logical position in the output string.  If an offset cannot be successfully
-// adjusted (e.g. because it points into the middle of a multibyte sequence), it
-// will be set to string16::npos.
-//
-// |offset[s]_for_adjustment| may be NULL.
-BASE_EXPORT bool UTF8ToUTF16AndAdjustOffset(const char* src,
-                                            size_t src_len,
-                                            string16* output,
-                                            size_t* offset_for_adjustment);
-BASE_EXPORT bool UTF8ToUTF16AndAdjustOffsets(
+// A helper class and associated data structures to adjust offsets into a
+// string in response to various adjustments one might do to that string
+// (e.g., eliminating a range).  For details on offsets, see the comments by
+// the AdjustOffsets() function below.
+class BASE_EXPORT OffsetAdjuster {
+ public:
+  struct BASE_EXPORT Adjustment {
+    Adjustment(size_t original_offset,
+               size_t original_length,
+               size_t output_length);
+
+    size_t original_offset;
+    size_t original_length;
+    size_t output_length;
+  };
+  typedef std::vector<Adjustment> Adjustments;
+
+  // Adjusts all offsets in |offsets_for_adjustment| to reflect the adjustments
+  // recorded in |adjustments|.
+  //
+  // Offsets represents insertion/selection points between characters: if |src|
+  // is "abcd", then 0 is before 'a', 2 is between 'b' and 'c', and 4 is at the
+  // end of the string.  Valid input offsets range from 0 to |src_len|.  On
+  // exit, each offset will have been modified to point at the same logical
+  // position in the output string.  If an offset cannot be successfully
+  // adjusted (e.g., because it points into the middle of a multibyte sequence),
+  // it will be set to string16::npos.
+  static void AdjustOffsets(const Adjustments& adjustments,
+                            std::vector<size_t>* offsets_for_adjustment);
+
+  // Adjusts the single |offset| to reflect the adjustments recorded in
+  // |adjustments|.
+  static void AdjustOffset(const Adjustments& adjustments,
+                           size_t* offset);
+
+  // Combines two sequential sets of adjustments, storing the combined revised
+  // adjustments in |adjustments_on_adjusted_string|.  That is, suppose a
+  // string was altered in some way, with the alterations recorded as
+  // adjustments in |first_adjustments|.  Then suppose the resulting string is
+  // further altered, with the alterations recorded as adjustments scored in
+  // |adjustments_on_adjusted_string|, with the offsets recorded in these
+  // adjustments being with respect to the intermediate string.  This function
+  // combines the two sets of adjustments into one, storing the result in
+  // |adjustments_on_adjusted_string|, whose offsets are correct with respect
+  // to the original string.
+  //
+  // Assumes both parameters are sorted by increasing offset.
+  //
+  // WARNING: Only supports |first_adjustments| that involve collapsing ranges
+  // of text, not expanding ranges.
+  static void MergeSequentialAdjustments(
+      const Adjustments& first_adjustments,
+      Adjustments* adjustments_on_adjusted_string);
+};
+
+// Like the conversions in utf_string_conversions.h, but also fills in an
+// |adjustments| parameter that reflects the alterations done to the string.
+// It may be NULL.
+BASE_EXPORT bool UTF8ToUTF16WithAdjustments(
     const char* src,
     size_t src_len,
     string16* output,
-    std::vector<size_t>* offsets_for_adjustment);
-
-BASE_EXPORT string16 UTF8ToUTF16AndAdjustOffset(const base::StringPiece& utf8,
-                                                size_t* offset_for_adjustment);
+    base::OffsetAdjuster::Adjustments* adjustments);
+BASE_EXPORT string16 UTF8ToUTF16WithAdjustments(
+    const base::StringPiece& utf8,
+    base::OffsetAdjuster::Adjustments* adjustments);
+// As above, but instead internally examines the adjustments and applies them
+// to |offsets_for_adjustment|.  See comments by AdjustOffsets().
 BASE_EXPORT string16 UTF8ToUTF16AndAdjustOffsets(
     const base::StringPiece& utf8,
     std::vector<size_t>* offsets_for_adjustment);
 
-BASE_EXPORT std::string UTF16ToUTF8AndAdjustOffset(
-    const base::StringPiece16& utf16,
-    size_t* offset_for_adjustment);
 BASE_EXPORT std::string UTF16ToUTF8AndAdjustOffsets(
     const base::StringPiece16& utf16,
     std::vector<size_t>* offsets_for_adjustment);
@@ -64,36 +107,6 @@
   size_t limit_;
 };
 
-// Stack object which, on destruction, will update a vector of offsets based on
-// any supplied adjustments.  To use, declare one of these, providing the
-// address of the offset vector to adjust.  Then Add() any number of Adjustments
-// (each Adjustment gives the |original_offset| of a substring and the lengths
-// of the substring before and after transforming).  When the OffsetAdjuster
-// goes out of scope, all the offsets in the provided vector will be updated.
-class BASE_EXPORT OffsetAdjuster {
- public:
-  struct BASE_EXPORT Adjustment {
-    Adjustment(size_t original_offset,
-               size_t original_length,
-               size_t output_length);
-
-    size_t original_offset;
-    size_t original_length;
-    size_t output_length;
-  };
-
-  explicit OffsetAdjuster(std::vector<size_t>* offsets_for_adjustment);
-  ~OffsetAdjuster();
-
-  void Add(const Adjustment& adjustment);
-
- private:
-  void AdjustOffset(std::vector<size_t>::iterator offset);
-
-  std::vector<size_t>* offsets_for_adjustment_;
-  std::vector<Adjustment> adjustments_;
-};
-
 }  // namespace base
 
 #endif  // BASE_STRINGS_UTF_OFFSET_STRING_CONVERSIONS_H_
diff --git a/base/strings/utf_offset_string_conversions_unittest.cc b/base/strings/utf_offset_string_conversions_unittest.cc
index 7626e4c..5786bdf 100644
--- a/base/strings/utf_offset_string_conversions_unittest.cc
+++ b/base/strings/utf_offset_string_conversions_unittest.cc
@@ -35,9 +35,11 @@
     {"A\xF0\x90\x8C\x80z", kNpos, kNpos},
   };
   for (size_t i = 0; i < ARRAYSIZE_UNSAFE(utf8_to_utf16_cases); ++i) {
-    size_t offset = utf8_to_utf16_cases[i].input_offset;
-    UTF8ToUTF16AndAdjustOffset(utf8_to_utf16_cases[i].utf8, &offset);
-    EXPECT_EQ(utf8_to_utf16_cases[i].output_offset, offset);
+    const size_t offset = utf8_to_utf16_cases[i].input_offset;
+    std::vector<size_t> offsets;
+    offsets.push_back(offset);
+    UTF8ToUTF16AndAdjustOffsets(utf8_to_utf16_cases[i].utf8, &offsets);
+    EXPECT_EQ(utf8_to_utf16_cases[i].output_offset, offsets[0]);
   }
 
   struct UTF16ToUTF8Case {
@@ -64,8 +66,10 @@
   };
   for (size_t i = 0; i < ARRAYSIZE_UNSAFE(utf16_to_utf8_cases); ++i) {
     size_t offset = utf16_to_utf8_cases[i].input_offset;
-    UTF16ToUTF8AndAdjustOffset(utf16_to_utf8_cases[i].utf16, &offset);
-    EXPECT_EQ(utf16_to_utf8_cases[i].output_offset, offset);
+    std::vector<size_t> offsets;
+    offsets.push_back(offset);
+    UTF16ToUTF8AndAdjustOffsets(utf16_to_utf8_cases[i].utf16, &offsets);
+    EXPECT_EQ(utf16_to_utf8_cases[i].output_offset, offsets[0]) << i;
   }
 }
 
@@ -108,10 +112,9 @@
     std::vector<size_t> offsets;
     for (size_t t = 0; t <= 9; ++t)
       offsets.push_back(t);
-    {
-      OffsetAdjuster offset_adjuster(&offsets);
-      offset_adjuster.Add(OffsetAdjuster::Adjustment(3, 3, 1));
-    }
+    OffsetAdjuster::Adjustments adjustments;
+    adjustments.push_back(OffsetAdjuster::Adjustment(3, 3, 1));
+    OffsetAdjuster::AdjustOffsets(adjustments, &offsets);
     size_t expected_1[] = {0, 1, 2, 3, kNpos, kNpos, 4, 5, 6, 7};
     EXPECT_EQ(offsets.size(), arraysize(expected_1));
     for (size_t i = 0; i < arraysize(expected_1); ++i)
@@ -123,13 +126,12 @@
     std::vector<size_t> offsets;
     for (size_t t = 0; t <= 23; ++t)
       offsets.push_back(t);
-    {
-      OffsetAdjuster offset_adjuster(&offsets);
-      offset_adjuster.Add(OffsetAdjuster::Adjustment(0, 3, 1));
-      offset_adjuster.Add(OffsetAdjuster::Adjustment(4, 4, 2));
-      offset_adjuster.Add(OffsetAdjuster::Adjustment(10, 7, 4));
-      offset_adjuster.Add(OffsetAdjuster::Adjustment(20, 3, 1));
-    }
+    OffsetAdjuster::Adjustments adjustments;
+    adjustments.push_back(OffsetAdjuster::Adjustment(0, 3, 1));
+    adjustments.push_back(OffsetAdjuster::Adjustment(4, 4, 2));
+    adjustments.push_back(OffsetAdjuster::Adjustment(10, 7, 4));
+    adjustments.push_back(OffsetAdjuster::Adjustment(20, 3, 1));
+    OffsetAdjuster::AdjustOffsets(adjustments, &offsets);
     size_t expected_2[] = {
       0, kNpos, kNpos, 1, 2, kNpos, kNpos, kNpos, 4, 5, 6, kNpos, kNpos, kNpos,
       kNpos, kNpos, kNpos, 10, 11, 12, 13, kNpos, kNpos, 14
@@ -144,13 +146,12 @@
     std::vector<size_t> offsets;
     for (size_t t = 0; t <= 17; ++t)
       offsets.push_back(t);
-    {
-      OffsetAdjuster offset_adjuster(&offsets);
-      offset_adjuster.Add(OffsetAdjuster::Adjustment(0, 3, 0));
-      offset_adjuster.Add(OffsetAdjuster::Adjustment(4, 4, 4));
-      offset_adjuster.Add(OffsetAdjuster::Adjustment(11, 3, 3));
-      offset_adjuster.Add(OffsetAdjuster::Adjustment(15, 2, 0));
-    }
+    OffsetAdjuster::Adjustments adjustments;
+    adjustments.push_back(OffsetAdjuster::Adjustment(0, 3, 0));
+    adjustments.push_back(OffsetAdjuster::Adjustment(4, 4, 4));
+    adjustments.push_back(OffsetAdjuster::Adjustment(11, 3, 3));
+    adjustments.push_back(OffsetAdjuster::Adjustment(15, 2, 0));
+    OffsetAdjuster::AdjustOffsets(adjustments, &offsets);
     size_t expected_3[] = {
       0, kNpos, kNpos, 0, 1, kNpos, kNpos, kNpos, 5, 6, 7, 8, kNpos, kNpos, 11,
       12, kNpos, 12
@@ -161,4 +162,77 @@
   }
 }
 
+// MergeSequentialAdjustments is used by net/base/escape.{h,cc} and
+// net/base/net_util.{h,cc}.  The two tests EscapeTest.AdjustOffset and
+// NetUtilTest.FormatUrlWithOffsets test its behavior extensively.  This
+// is simply a short, additional test.
+TEST(UTFOffsetStringConversionsTest, MergeSequentialAdjustments) {
+  // Pretend the input string is "abcdefghijklmnopqrstuvwxyz".
+
+  // Set up |first_adjustments| to
+  // - remove the leading "a"
+  // - combine the "bc" into one character (call it ".")
+  // - remove the "f"
+  // - remove the "tuv"
+  // The resulting string should be ".deghijklmnopqrswxyz".
+  OffsetAdjuster::Adjustments first_adjustments;
+  first_adjustments.push_back(OffsetAdjuster::Adjustment(0, 1, 0));
+  first_adjustments.push_back(OffsetAdjuster::Adjustment(1, 2, 1));
+  first_adjustments.push_back(OffsetAdjuster::Adjustment(5, 1, 0));
+  first_adjustments.push_back(OffsetAdjuster::Adjustment(19, 3, 0));
+
+  // Set up |adjustments_on_adjusted_string| to
+  // - combine the "." character that replaced "bc" with "d" into one character
+  //   (call it "?")
+  // - remove the "egh"
+  // - expand the "i" into two characters (call them "12")
+  // - combine the "jkl" into one character (call it "@")
+  // - expand the "z" into two characters (call it "34")
+  // The resulting string should be "?12@mnopqrswxy34".
+  OffsetAdjuster::Adjustments adjustments_on_adjusted_string;
+  adjustments_on_adjusted_string.push_back(OffsetAdjuster::Adjustment(
+      0, 2, 1));
+  adjustments_on_adjusted_string.push_back(OffsetAdjuster::Adjustment(
+      2, 3, 0));
+  adjustments_on_adjusted_string.push_back(OffsetAdjuster::Adjustment(
+      5, 1, 2));
+  adjustments_on_adjusted_string.push_back(OffsetAdjuster::Adjustment(
+      6, 3, 1));
+  adjustments_on_adjusted_string.push_back(OffsetAdjuster::Adjustment(
+      19, 1, 2));
+
+  // Now merge the adjustments and check the results.
+  OffsetAdjuster::MergeSequentialAdjustments(first_adjustments,
+                                             &adjustments_on_adjusted_string);
+  // The merged adjustments should look like
+  // - combine abcd into "?"
+  //   - note: it's also reasonable for the Merge function to instead produce
+  //     two adjustments instead of this, one to remove a and another to
+  //     combine bcd into "?".  This test verifies the current behavior.
+  // - remove efgh
+  // - expand i into "12"
+  // - combine jkl into "@"
+  // - remove tuv
+  // - expand z into "34"
+  ASSERT_EQ(6u, adjustments_on_adjusted_string.size());
+  EXPECT_EQ(0u, adjustments_on_adjusted_string[0].original_offset);
+  EXPECT_EQ(4u, adjustments_on_adjusted_string[0].original_length);
+  EXPECT_EQ(1u, adjustments_on_adjusted_string[0].output_length);
+  EXPECT_EQ(4u, adjustments_on_adjusted_string[1].original_offset);
+  EXPECT_EQ(4u, adjustments_on_adjusted_string[1].original_length);
+  EXPECT_EQ(0u, adjustments_on_adjusted_string[1].output_length);
+  EXPECT_EQ(8u, adjustments_on_adjusted_string[2].original_offset);
+  EXPECT_EQ(1u, adjustments_on_adjusted_string[2].original_length);
+  EXPECT_EQ(2u, adjustments_on_adjusted_string[2].output_length);
+  EXPECT_EQ(9u, adjustments_on_adjusted_string[3].original_offset);
+  EXPECT_EQ(3u, adjustments_on_adjusted_string[3].original_length);
+  EXPECT_EQ(1u, adjustments_on_adjusted_string[3].output_length);
+  EXPECT_EQ(19u, adjustments_on_adjusted_string[4].original_offset);
+  EXPECT_EQ(3u, adjustments_on_adjusted_string[4].original_length);
+  EXPECT_EQ(0u, adjustments_on_adjusted_string[4].output_length);
+  EXPECT_EQ(25u, adjustments_on_adjusted_string[5].original_offset);
+  EXPECT_EQ(1u, adjustments_on_adjusted_string[5].original_length);
+  EXPECT_EQ(2u, adjustments_on_adjusted_string[5].output_length);
+}
+
 }  // namaspace base
diff --git a/base/strings/utf_string_conversions.h b/base/strings/utf_string_conversions.h
index 242cd66..e12e8a7 100644
--- a/base/strings/utf_string_conversions.h
+++ b/base/strings/utf_string_conversions.h
@@ -56,6 +56,5 @@
 // whatever module uses wstring and the conversion is being used as a stopgap.
 // This makes it easy to grep for the ones that should be removed.
 #define WideToUTF16Hack WideToUTF16
-#define UTF16ToWideHack UTF16ToWide
 
 #endif  // BASE_STRINGS_UTF_STRING_CONVERSIONS_H_
diff --git a/base/test/test_suite.cc b/base/test/test_suite.cc
index 40d81a6..ad5d924 100644
--- a/base/test/test_suite.cc
+++ b/base/test/test_suite.cc
@@ -9,7 +9,6 @@
 #include "base/base_switches.h"
 #include "base/bind.h"
 #include "base/command_line.h"
-#include "base/debug/debug_on_start_win.h"
 #include "base/debug/debugger.h"
 #include "base/debug/stack_trace.h"
 #include "base/file_util.h"
@@ -46,10 +45,6 @@
 #include "base/test/test_support_ios.h"
 #endif
 
-#if defined(TOOLKIT_GTK)
-#include <gtk/gtk.h>
-#endif
-
 namespace {
 
 class MaybeTestDisabler : public testing::EmptyTestEventListener {
@@ -123,9 +118,7 @@
   // have the locale set. In the absence of such a call the "C" locale is the
   // default. In the gtk code (below) gtk_init() implicitly sets a locale.
   setlocale(LC_ALL, "");
-#elif defined(TOOLKIT_GTK)
-  gtk_init_check(&argc, &argv);
-#endif  // defined(TOOLKIT_GTK)
+#endif  // defined(OS_LINUX) && defined(USE_AURA)
 
   // On Android, AtExitManager is created in
   // testing/android/native_test_wrapper.cc before main() is called.
diff --git a/base/third_party/dynamic_annotations/dynamic_annotations.target.darwin-arm.mk b/base/third_party/dynamic_annotations/dynamic_annotations.target.darwin-arm.mk
index fa74164..56ff854 100644
--- a/base/third_party/dynamic_annotations/dynamic_annotations.target.darwin-arm.mk
+++ b/base/third_party/dynamic_annotations/dynamic_annotations.target.darwin-arm.mk
@@ -219,7 +219,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/third_party/dynamic_annotations/dynamic_annotations.target.darwin-mips.mk b/base/third_party/dynamic_annotations/dynamic_annotations.target.darwin-mips.mk
index 79958e0..3c3ed0a 100644
--- a/base/third_party/dynamic_annotations/dynamic_annotations.target.darwin-mips.mk
+++ b/base/third_party/dynamic_annotations/dynamic_annotations.target.darwin-mips.mk
@@ -217,7 +217,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/third_party/dynamic_annotations/dynamic_annotations.target.darwin-x86.mk b/base/third_party/dynamic_annotations/dynamic_annotations.target.darwin-x86.mk
index d24d87c..2923266 100644
--- a/base/third_party/dynamic_annotations/dynamic_annotations.target.darwin-x86.mk
+++ b/base/third_party/dynamic_annotations/dynamic_annotations.target.darwin-x86.mk
@@ -217,7 +217,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/third_party/dynamic_annotations/dynamic_annotations.target.darwin-x86_64.mk b/base/third_party/dynamic_annotations/dynamic_annotations.target.darwin-x86_64.mk
index 75c6167..151f9ec 100644
--- a/base/third_party/dynamic_annotations/dynamic_annotations.target.darwin-x86_64.mk
+++ b/base/third_party/dynamic_annotations/dynamic_annotations.target.darwin-x86_64.mk
@@ -217,7 +217,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/third_party/dynamic_annotations/dynamic_annotations.target.linux-arm.mk b/base/third_party/dynamic_annotations/dynamic_annotations.target.linux-arm.mk
index fa74164..56ff854 100644
--- a/base/third_party/dynamic_annotations/dynamic_annotations.target.linux-arm.mk
+++ b/base/third_party/dynamic_annotations/dynamic_annotations.target.linux-arm.mk
@@ -219,7 +219,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/third_party/dynamic_annotations/dynamic_annotations.target.linux-mips.mk b/base/third_party/dynamic_annotations/dynamic_annotations.target.linux-mips.mk
index 79958e0..3c3ed0a 100644
--- a/base/third_party/dynamic_annotations/dynamic_annotations.target.linux-mips.mk
+++ b/base/third_party/dynamic_annotations/dynamic_annotations.target.linux-mips.mk
@@ -217,7 +217,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/third_party/dynamic_annotations/dynamic_annotations.target.linux-x86.mk b/base/third_party/dynamic_annotations/dynamic_annotations.target.linux-x86.mk
index d24d87c..2923266 100644
--- a/base/third_party/dynamic_annotations/dynamic_annotations.target.linux-x86.mk
+++ b/base/third_party/dynamic_annotations/dynamic_annotations.target.linux-x86.mk
@@ -217,7 +217,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/third_party/dynamic_annotations/dynamic_annotations.target.linux-x86_64.mk b/base/third_party/dynamic_annotations/dynamic_annotations.target.linux-x86_64.mk
index 75c6167..151f9ec 100644
--- a/base/third_party/dynamic_annotations/dynamic_annotations.target.linux-x86_64.mk
+++ b/base/third_party/dynamic_annotations/dynamic_annotations.target.linux-x86_64.mk
@@ -217,7 +217,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/base/threading/sequenced_worker_pool.cc b/base/threading/sequenced_worker_pool.cc
index 813005c..532f26e 100644
--- a/base/threading/sequenced_worker_pool.cc
+++ b/base/threading/sequenced_worker_pool.cc
@@ -32,6 +32,8 @@
 
 #if defined(OS_MACOSX)
 #include "base/mac/scoped_nsautorelease_pool.h"
+#elif defined(OS_WIN)
+#include "base/win/scoped_com_initializer.h"
 #endif
 
 #if !defined(OS_NACL)
@@ -480,8 +482,7 @@
     const scoped_refptr<SequencedWorkerPool>& worker_pool,
     int thread_number,
     const std::string& prefix)
-    : SimpleThread(
-          prefix + StringPrintf("Worker%d", thread_number).c_str()),
+    : SimpleThread(prefix + StringPrintf("Worker%d", thread_number)),
       worker_pool_(worker_pool),
       running_shutdown_behavior_(CONTINUE_ON_SHUTDOWN) {
   Start();
@@ -491,6 +492,10 @@
 }
 
 void SequencedWorkerPool::Worker::Run() {
+#if defined(OS_WIN)
+  win::ScopedCOMInitializer com_initializer;
+#endif
+
   // Store a pointer to the running sequence in thread local storage for
   // static function access.
   g_lazy_tls_ptr.Get().Set(&running_sequence_);
diff --git a/base/threading/thread.cc b/base/threading/thread.cc
index ae4d373..7877b19 100644
--- a/base/threading/thread.cc
+++ b/base/threading/thread.cc
@@ -63,7 +63,7 @@
 Thread::Options::~Options() {
 }
 
-Thread::Thread(const char* name)
+Thread::Thread(const std::string& name)
     :
 #if defined(OS_WIN)
       com_status_(NONE),
diff --git a/base/threading/thread.h b/base/threading/thread.h
index 99f9dd4..09a6fa5 100644
--- a/base/threading/thread.h
+++ b/base/threading/thread.h
@@ -58,7 +58,7 @@
 
   // Constructor.
   // name is a display string to identify the thread.
-  explicit Thread(const char* name);
+  explicit Thread(const std::string& name);
 
   // Destroys the thread, stopping it if necessary.
   //
diff --git a/base/time/time.h b/base/time/time.h
index 69a1324..546920b 100644
--- a/base/time/time.h
+++ b/base/time/time.h
@@ -66,6 +66,8 @@
   static TimeDelta FromMinutes(int minutes);
   static TimeDelta FromSeconds(int64 secs);
   static TimeDelta FromMilliseconds(int64 ms);
+  static TimeDelta FromSecondsD(double secs);
+  static TimeDelta FromMillisecondsD(double ms);
   static TimeDelta FromMicroseconds(int64 us);
 #if defined(OS_WIN)
   static TimeDelta FromQPCValue(LONGLONG qpc_value);
@@ -543,6 +545,22 @@
 }
 
 // static
+inline TimeDelta TimeDelta::FromSecondsD(double secs) {
+  // Preserve max to prevent overflow.
+  if (secs == std::numeric_limits<double>::infinity())
+    return Max();
+  return TimeDelta(secs * Time::kMicrosecondsPerSecond);
+}
+
+// static
+inline TimeDelta TimeDelta::FromMillisecondsD(double ms) {
+  // Preserve max to prevent overflow.
+  if (ms == std::numeric_limits<double>::infinity())
+    return Max();
+  return TimeDelta(ms * Time::kMicrosecondsPerMillisecond);
+}
+
+// static
 inline TimeDelta TimeDelta::FromMicroseconds(int64 us) {
   // Preserve max to prevent overflow.
   if (us == std::numeric_limits<int64>::max())
diff --git a/base/time/time_posix.cc b/base/time/time_posix.cc
index 3378038..d83e9e6 100644
--- a/base/time/time_posix.cc
+++ b/base/time/time_posix.cc
@@ -7,7 +7,7 @@
 #include <stdint.h>
 #include <sys/time.h>
 #include <time.h>
-#if defined(OS_ANDROID)
+#if defined(OS_ANDROID) && !defined(__LP64__)
 #include <time64.h>
 #endif
 #include <unistd.h>
@@ -32,7 +32,7 @@
 // Define a system-specific SysTime that wraps either to a time_t or
 // a time64_t depending on the host system, and associated convertion.
 // See crbug.com/162007
-#if defined(OS_ANDROID)
+#if defined(OS_ANDROID) && !defined(__LP64__)
 typedef time64_t SysTime;
 
 SysTime SysTimeFromTimeStruct(struct tm* timestruct, bool is_local) {
@@ -49,7 +49,7 @@
     gmtime64_r(&t, timestruct);
 }
 
-#else  // OS_ANDROID
+#else  // OS_ANDROID && !__LP64__
 typedef time_t SysTime;
 
 SysTime SysTimeFromTimeStruct(struct tm* timestruct, bool is_local) {
diff --git a/base/time/time_unittest.cc b/base/time/time_unittest.cc
index 7402316..63c3a1a 100644
--- a/base/time/time_unittest.cc
+++ b/base/time/time_unittest.cc
@@ -517,6 +517,12 @@
   t = TimeDelta::FromMilliseconds(std::numeric_limits<int64>::max());
   EXPECT_TRUE(t.is_max());
 
+  t = TimeDelta::FromSecondsD(std::numeric_limits<double>::infinity());
+  EXPECT_TRUE(t.is_max());
+
+  t = TimeDelta::FromMillisecondsD(std::numeric_limits<double>::infinity());
+  EXPECT_TRUE(t.is_max());
+
   t = TimeDelta::FromMicroseconds(std::numeric_limits<int64>::max());
   EXPECT_TRUE(t.is_max());
 }
@@ -715,6 +721,10 @@
   EXPECT_TRUE(TimeDelta::FromSeconds(2) == TimeDelta::FromMilliseconds(2000));
   EXPECT_TRUE(TimeDelta::FromMilliseconds(2) ==
               TimeDelta::FromMicroseconds(2000));
+  EXPECT_TRUE(TimeDelta::FromSecondsD(2.3) ==
+              TimeDelta::FromMilliseconds(2300));
+  EXPECT_TRUE(TimeDelta::FromMillisecondsD(2.5) ==
+              TimeDelta::FromMicroseconds(2500));
   EXPECT_EQ(13, TimeDelta::FromDays(13).InDays());
   EXPECT_EQ(13, TimeDelta::FromHours(13).InHours());
   EXPECT_EQ(13, TimeDelta::FromMinutes(13).InMinutes());
@@ -722,6 +732,10 @@
   EXPECT_EQ(13.0, TimeDelta::FromSeconds(13).InSecondsF());
   EXPECT_EQ(13, TimeDelta::FromMilliseconds(13).InMilliseconds());
   EXPECT_EQ(13.0, TimeDelta::FromMilliseconds(13).InMillisecondsF());
+  EXPECT_EQ(13, TimeDelta::FromSecondsD(13.1).InSeconds());
+  EXPECT_EQ(13.1, TimeDelta::FromSecondsD(13.1).InSecondsF());
+  EXPECT_EQ(13, TimeDelta::FromMillisecondsD(13.3).InMilliseconds());
+  EXPECT_EQ(13.3, TimeDelta::FromMillisecondsD(13.3).InMillisecondsF());
   EXPECT_EQ(13, TimeDelta::FromMicroseconds(13).InMicroseconds());
 }
 
diff --git a/base/win/scoped_com_initializer.h b/base/win/scoped_com_initializer.h
index 392c351..92228ba 100644
--- a/base/win/scoped_com_initializer.h
+++ b/base/win/scoped_com_initializer.h
@@ -16,6 +16,11 @@
 
 // Initializes COM in the constructor (STA or MTA), and uninitializes COM in the
 // destructor.
+//
+// WARNING: This should only be used once per thread, ideally scoped to a
+// similar lifetime as the thread itself.  You should not be using this in
+// random utility functions that make COM calls -- instead ensure these
+// functions are running on a COM-supporting thread!
 class ScopedCOMInitializer {
  public:
   // Enum value provided to initialize the thread as an MTA instead of STA.
diff --git a/build/all.gyp b/build/all.gyp
index 651982f..c4c1ce1 100644
--- a/build/all.gyp
+++ b/build/all.gyp
@@ -152,11 +152,6 @@
             '../tools/xdisplaycheck/xdisplaycheck.gyp:*',
           ],
         }],
-        ['toolkit_uses_gtk==1', {
-          'dependencies': [
-            '../tools/gtk_clipboard_dump/gtk_clipboard_dump.gyp:*',
-          ],
-        }],
         ['OS=="win"', {
           'conditions': [
             ['win_use_allocator_shim==1', {
@@ -1060,6 +1055,8 @@
             '../components/components_tests.gyp:components_unittests',
             '../content/content_shell_and_tests.gyp:content_browsertests',
             '../content/content_shell_and_tests.gyp:content_shell',
+            '../content/content_shell_and_tests.gyp:content_shell_crash_service',
+            '../content/content_shell_and_tests.gyp:layout_test_helper',
             '../content/content_shell_and_tests.gyp:content_unittests',
             '../crypto/crypto.gyp:crypto_unittests',
             '../device/device_tests.gyp:device_unittests',
diff --git a/build/android/adb_run_mojo_shell b/build/android/adb_run_mojo_shell
index c6082d2..6f55fb2 100755
--- a/build/android/adb_run_mojo_shell
+++ b/build/android/adb_run_mojo_shell
@@ -8,7 +8,8 @@
    INTENT_ARGS="-d \"$1\""  # e.g. a URL
 fi
 
-adb shell am start \
+adb logcat -c
+adb shell am start -S \
   -a android.intent.action.VIEW \
   -n org.chromium.mojo_shell_apk/.MojoShellActivity \
   $INTENT_ARGS
diff --git a/build/android/buildbot/bb_device_steps.py b/build/android/buildbot/bb_device_steps.py
index 2c220f3..10dfa15 100755
--- a/build/android/buildbot/bb_device_steps.py
+++ b/build/android/buildbot/bb_device_steps.py
@@ -78,8 +78,9 @@
       'webview:android_webview/test/data/device_files'),
     ])
 
-VALID_TESTS = set(['chromedriver', 'gpu', 'ui', 'unit', 'webkit',
-                   'webkit_layout', 'webrtc_chromium', 'webrtc_native'])
+VALID_TESTS = set(['chromedriver', 'gpu', 'telemetry_perf_unittests',
+                   'ui', 'unit', 'webkit', 'webkit_layout', 'webrtc_chromium',
+                   'webrtc_native'])
 
 RunCmd = bb_utils.RunCmd
 
@@ -165,6 +166,21 @@
           '--update-log'])
 
 
+def RunTelemetryPerfUnitTests(options):
+  """Runs the telemetry perf unit tests.
+
+  Args:
+    options: options object.
+  """
+  InstallApk(options, INSTRUMENTATION_TESTS['ChromeShell'], False)
+  args = ['--browser', 'android-chromium-testshell']
+  devices = android_commands.GetAttachedDevices()
+  if devices:
+    args = args + ['--device', devices[0]]
+  bb_annotations.PrintNamedStep('telemetry_perf_unittests')
+  RunCmd(['tools/perf/run_tests'] + args)
+
+
 def InstallApk(options, test, print_step=False):
   """Install an apk to all phones.
 
@@ -481,6 +497,7 @@
   return [
       ('chromedriver', RunChromeDriverTests),
       ('gpu', RunGPUTests),
+      ('telemetry_perf_unittests', RunTelemetryPerfUnitTests),
       ('unit', RunUnitTests),
       ('ui', RunInstrumentationTests),
       ('webkit', RunWebkitTests),
@@ -490,6 +507,13 @@
   ]
 
 
+def MakeGSPath(options, gs_base_dir):
+  revision = _GetRevision(options)
+  bot_id = options.build_properties.get('buildername', 'testing')
+  randhash = hashlib.sha1(str(random.random())).hexdigest()
+  gs_path = '%s/%s/%s/%s' % (gs_base_dir, bot_id, revision, randhash)
+  return gs_path
+
 def UploadHTML(options, gs_base_dir, dir_to_upload, link_text,
                link_rel_path='index.html', gs_url=GS_URL):
   """Uploads directory at |dir_to_upload| to Google Storage and output a link.
@@ -503,10 +527,7 @@
     link_rel_path: Link path relative to |dir_to_upload|.
     gs_url: Google storage URL.
   """
-  revision = _GetRevision(options)
-  bot_id = options.build_properties.get('buildername', 'testing')
-  randhash = hashlib.sha1(str(random.random())).hexdigest()
-  gs_path = '%s/%s/%s/%s' % (gs_base_dir, bot_id, revision, randhash)
+  gs_path = MakeGSPath(options, gs_base_dir)
   RunCmd([bb_utils.GSUTIL_PATH, 'cp', '-R', dir_to_upload, 'gs://%s' % gs_path])
   bb_annotations.PrintLink(link_text,
                            '%s/%s/%s' % (gs_url, gs_path, link_rel_path))
@@ -531,7 +552,9 @@
   logcat_file = os.path.join(CHROME_OUT_DIR, options.target, 'full_log')
   RunCmd([SrcPath('build' , 'android', 'adb_logcat_printer.py'),
           '--output-path', logcat_file, LOGCAT_DIR])
-  RunCmd(['cat', logcat_file])
+  gs_path = MakeGSPath(options, 'chromium-android/logcat_dumps')
+  RunCmd([bb_utils.GSUTIL_PATH, 'cp', logcat_file, 'gs://%s' % gs_path])
+  bb_annotations.PrintLink('logcat dump', '%s/%s' % (GS_URL, gs_path))
 
 
 def RunStackToolSteps(options):
diff --git a/build/android/buildbot/bb_run_bot.py b/build/android/buildbot/bb_run_bot.py
index aee7f0f..f41ae64 100755
--- a/build/android/buildbot/bb_run_bot.py
+++ b/build/android/buildbot/bb_run_bot.py
@@ -119,6 +119,7 @@
   std_build_steps = ['compile', 'zip_build']
   std_test_steps = ['extract_build']
   std_tests = ['ui', 'unit']
+  telemetry_tests = ['telemetry_perf_unittests']
   flakiness_server = (
       '--flakiness-server=%s' % constants.UPSTREAM_FLAKINESS_SERVER)
   experimental = ['--experimental']
@@ -138,7 +139,8 @@
       B('main-clang-builder',
         H(compile_step, extra_gyp='clang=1 component=shared_library')),
       B('main-clobber', H(compile_step)),
-      B('main-tests', H(std_test_steps), T(std_tests, [flakiness_server])),
+      B('main-tests', H(std_test_steps), T(std_tests + telemetry_tests,
+                                           [flakiness_server])),
 
       # Other waterfalls
       B('asan-builder-tests', H(compile_step,
diff --git a/build/android/enable_asserts.py b/build/android/enable_asserts.py
index 1823899..9ed402e 100755
--- a/build/android/enable_asserts.py
+++ b/build/android/enable_asserts.py
@@ -6,6 +6,7 @@
 
 """Enables dalvik vm asserts in the android device."""
 
+from pylib import android_commands
 from pylib.device import device_utils
 import optparse
 import sys
@@ -21,10 +22,13 @@
       help='Removes the dalvik.vm.enableassertions property')
   options, _ = option_parser.parse_args(argv)
 
-  device = device_utils.DeviceUtils()
-  if options.set_asserts != None:
-    if device.old_interface.SetJavaAssertsEnabled(options.set_asserts):
-      device.old_interface.Reboot(full_reboot=False)
+  # TODO(jbudorick): Accept optional serial number and run only for the
+  # specified device when present.
+  devices = android_commands.GetAttachedDevices()
+  for device in [device_utils.DeviceUtils(serial) for serial in devices]:
+    if options.set_asserts != None:
+      if device.old_interface.SetJavaAssertsEnabled(options.set_asserts):
+        device.old_interface.Reboot(full_reboot=False)
 
 
 if __name__ == '__main__':
diff --git a/build/android/envsetup.sh b/build/android/envsetup.sh
index 375ef67..4e91992 100755
--- a/build/android/envsetup.sh
+++ b/build/android/envsetup.sh
@@ -40,7 +40,6 @@
   fi
 
   # Add Android SDK tools to system path.
-  export PATH=$PATH:${ANDROID_SDK_ROOT}/tools
   export PATH=$PATH:${ANDROID_SDK_ROOT}/platform-tools
 
   # Add Chromium Android development scripts to system path.
diff --git a/build/android/finalize_apk_action.gypi b/build/android/finalize_apk_action.gypi
index afe9f1b..bfb7ccd 100644
--- a/build/android/finalize_apk_action.gypi
+++ b/build/android/finalize_apk_action.gypi
@@ -22,6 +22,14 @@
     'keystore_path%': '<(DEPTH)/build/android/ant/chromium-debug.keystore',
     'keystore_name%': 'chromiumdebugkey',
     'keystore_password%': 'chromium',
+    'conditions': [
+        # Webview doesn't use zipalign.
+        ['android_webview_build==0', {
+          'zipalign_path%': ['<!@(find <(android_sdk_root) -name zipalign)'],
+        }, {
+          'zipalign_path%': "",
+        }],
+    ],
   },
   'inputs': [
     '<(DEPTH)/build/android/gyp/util/build_utils.py',
@@ -34,7 +42,7 @@
   ],
   'action': [
     'python', '<(DEPTH)/build/android/gyp/finalize_apk.py',
-    '--android-sdk-root=<(android_sdk_root)',
+    '--zipalign-path=<(zipalign_path)',
     '--unsigned-apk-path=<(input_apk_path)',
     '--final-apk-path=<(output_apk_path)',
     '--key-path=<(keystore_path)',
diff --git a/build/android/gyp/finalize_apk.py b/build/android/gyp/finalize_apk.py
index 9759097..d64e10d 100755
--- a/build/android/gyp/finalize_apk.py
+++ b/build/android/gyp/finalize_apk.py
@@ -8,7 +8,6 @@
 """
 
 import optparse
-import os
 import shutil
 import sys
 import tempfile
@@ -29,9 +28,9 @@
   build_utils.CheckOutput(sign_cmd)
 
 
-def AlignApk(android_sdk_root, unaligned_path, final_path):
+def AlignApk(zipalign_path, unaligned_path, final_path):
   align_cmd = [
-      os.path.join(android_sdk_root, 'tools', 'zipalign'),
+      zipalign_path,
       '-f', '4',  # 4 bytes
       unaligned_path,
       final_path,
@@ -42,7 +41,7 @@
 def main():
   parser = optparse.OptionParser()
 
-  parser.add_option('--android-sdk-root', help='Android sdk root directory.')
+  parser.add_option('--zipalign-path', help='Path to the zipalign tool.')
   parser.add_option('--unsigned-apk-path', help='Path to input unsigned APK.')
   parser.add_option('--final-apk-path',
       help='Path to output signed and aligned APK.')
@@ -57,7 +56,7 @@
     signed_apk_path = intermediate_file.name
     SignApk(options.key_path, options.key_name, options.key_passwd,
             options.unsigned_apk_path, signed_apk_path)
-    AlignApk(options.android_sdk_root, signed_apk_path, options.final_apk_path)
+    AlignApk(options.zipalign_path, signed_apk_path, options.final_apk_path)
 
   if options.stamp:
     build_utils.Touch(options.stamp)
diff --git a/build/android/gyp/process_resources.py b/build/android/gyp/process_resources.py
index e48e39d..9bad5c1 100755
--- a/build/android/gyp/process_resources.py
+++ b/build/android/gyp/process_resources.py
@@ -74,6 +74,22 @@
       shutil.move(src_file, dst_file)
 
 
+def DidCrunchFail(returncode, stderr):
+  """Determines whether aapt crunch failed from its return code and output.
+
+  Because aapt's return code cannot be trusted, any output to stderr is
+  an indication that aapt has failed (http://crbug.com/314885), except
+  lines that contain "libpng warning", which is a known non-error condition
+  (http://crbug.com/364355).
+  """
+  if returncode != 0:
+    return True
+  for line in stderr.splitlines():
+    if line and not 'libpng warning' in line:
+      return True
+  return False
+
+
 def main():
   options = ParseArgs()
   android_jar = os.path.join(options.android_sdk, 'android.jar')
@@ -110,7 +126,7 @@
               'crunch',
               '-S', options.crunch_input_dir,
               '-C', options.crunch_output_dir]
-  build_utils.CheckOutput(aapt_cmd, fail_if_stderr=True)
+  build_utils.CheckOutput(aapt_cmd, fail_func=DidCrunchFail)
 
   MoveImagesToNonMdpiFolders(options.crunch_output_dir)
 
diff --git a/build/android/gyp/util/build_utils.py b/build/android/gyp/util/build_utils.py
index 165fa24..607f9be 100644
--- a/build/android/gyp/util/build_utils.py
+++ b/build/android/gyp/util/build_utils.py
@@ -101,7 +101,7 @@
 # particularly when the command fails, better highlights the command's failure.
 # If the command fails, raises a build_utils.CalledProcessError.
 def CheckOutput(args, cwd=None, print_stdout=False, print_stderr=True,
-                fail_if_stderr=False):
+                fail_func=lambda returncode, stderr: returncode != 0):
   if not cwd:
     cwd = os.getcwd()
 
@@ -109,7 +109,7 @@
       stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=cwd)
   stdout, stderr = child.communicate()
 
-  if child.returncode or (stderr and fail_if_stderr):
+  if fail_func(child.returncode, stderr):
     raise CalledProcessError(cwd, args, stdout + stderr)
 
   if print_stdout:
diff --git a/build/android/pylib/android_commands.py b/build/android/pylib/android_commands.py
index db87172..b734d17 100644
--- a/build/android/pylib/android_commands.py
+++ b/build/android/pylib/android_commands.py
@@ -24,10 +24,8 @@
 
 import cmd_helper
 import constants
-import screenshot
 import system_properties
 from utils import host_utils
-from device import device_utils
 
 try:
   from pylib import pexpect
@@ -1712,7 +1710,17 @@
 
       return False
 
-  def TakeScreenshot(self, host_file):
+  @staticmethod
+  def GetTimestamp():
+    return time.strftime('%Y-%m-%d-%H%M%S', time.localtime())
+
+  @staticmethod
+  def EnsureHostDirectory(host_file):
+    host_dir = os.path.dirname(os.path.abspath(host_file))
+    if not os.path.exists(host_dir):
+      os.makedirs(host_dir)
+
+  def TakeScreenshot(self, host_file=None):
     """Saves a screenshot image to |host_file| on the host.
 
     Args:
@@ -1722,7 +1730,15 @@
     Returns:
       Resulting host file name of the screenshot.
     """
-    return screenshot.TakeScreenshot(device_utils.DeviceUtils(self), host_file)
+    host_file = os.path.abspath(host_file or
+                                'screenshot-%s.png' % self.GetTimestamp())
+    self.EnsureHostDirectory(host_file)
+    device_file = '%s/screenshot.png' % self.GetExternalStorage()
+    self.RunShellCommand(
+        '/system/bin/screencap -p %s' % device_file)
+    self.PullFileFromDevice(device_file, host_file)
+    self.RunShellCommand('rm -f "%s"' % device_file)
+    return host_file
 
   def PullFileFromDevice(self, device_file, host_file):
     """Download |device_file| on the device from to |host_file| on the host.
diff --git a/build/android/pylib/chrome_test_server_spawner.py b/build/android/pylib/chrome_test_server_spawner.py
index 08bfb45..1726230 100644
--- a/build/android/pylib/chrome_test_server_spawner.py
+++ b/build/android/pylib/chrome_test_server_spawner.py
@@ -179,47 +179,34 @@
     """
     if self.command_line:
       return
-    # The following arguments must exist.
-    type_cmd = _GetServerTypeCommandLine(self.arguments['server-type'])
+
+    args_copy = dict(self.arguments)
+
+    # Translate the server type.
+    type_cmd = _GetServerTypeCommandLine(args_copy.pop('server-type'))
     if type_cmd:
       self.command_line.append(type_cmd)
-    self.command_line.append('--port=%d' % self.host_port)
+
     # Use a pipe to get the port given by the instance of Python test server
     # if the test does not specify the port.
+    assert self.host_port == args_copy['port']
     if self.host_port == 0:
       (self.pipe_in, self.pipe_out) = os.pipe()
       self.command_line.append('--startup-pipe=%d' % self.pipe_out)
-    self.command_line.append('--host=%s' % self.arguments['host'])
-    data_dir = self.arguments['data-dir'] or 'chrome/test/data'
-    if not os.path.isabs(data_dir):
-      data_dir = os.path.join(constants.DIR_SOURCE_ROOT, data_dir)
-    self.command_line.append('--data-dir=%s' % data_dir)
-    # The following arguments are optional depending on the individual test.
-    if self.arguments.has_key('log-to-console'):
-      self.command_line.append('--log-to-console')
-    if self.arguments.has_key('auth-token'):
-      self.command_line.append('--auth-token=%s' % self.arguments['auth-token'])
-    if self.arguments.has_key('https'):
-      self.command_line.append('--https')
-      if self.arguments.has_key('cert-and-key-file'):
-        self.command_line.append('--cert-and-key-file=%s' % os.path.join(
-            constants.DIR_SOURCE_ROOT, self.arguments['cert-and-key-file']))
-      if self.arguments.has_key('ocsp'):
-        self.command_line.append('--ocsp=%s' % self.arguments['ocsp'])
-      if self.arguments.has_key('https-record-resume'):
-        self.command_line.append('--https-record-resume')
-      if self.arguments.has_key('ssl-client-auth'):
-        self.command_line.append('--ssl-client-auth')
-      if self.arguments.has_key('tls-intolerant'):
-        self.command_line.append('--tls-intolerant=%s' %
-                                 self.arguments['tls-intolerant'])
-      if self.arguments.has_key('ssl-client-ca'):
-        for ca in self.arguments['ssl-client-ca']:
-          self.command_line.append('--ssl-client-ca=%s' %
-                                   os.path.join(constants.DIR_SOURCE_ROOT, ca))
-      if self.arguments.has_key('ssl-bulk-cipher'):
-        for bulk_cipher in self.arguments['ssl-bulk-cipher']:
-          self.command_line.append('--ssl-bulk-cipher=%s' % bulk_cipher)
+
+    # Pass the remaining arguments as-is.
+    for key, values in args_copy.iteritems():
+      is_path = key in ['data-dir', 'cert-and-key-file', 'ssl-client-ca']
+      if not isinstance(values, list):
+        values = [values]
+      for value in values:
+        if value is None:
+          self.command_line.append('--%s' % key)
+        else:
+          # Arguments with file paths get mangled.
+          if is_path and not os.path.isabs(value):
+            value = os.path.join(constants.DIR_SOURCE_ROOT, value)
+          self.command_line.append('--%s=%s' % (key, value))
 
   def _CloseUnnecessaryFDsForTestServerProcess(self):
     # This is required to avoid subtle deadlocks that could be caused by the
diff --git a/build/android/pylib/gtest/filter/content_browsertests_disabled b/build/android/pylib/gtest/filter/content_browsertests_disabled
index c96ce6c..2978ce0 100644
--- a/build/android/pylib/gtest/filter/content_browsertests_disabled
+++ b/build/android/pylib/gtest/filter/content_browsertests_disabled
@@ -120,3 +120,6 @@
 
 # http://crbug.com/343604
 MSE_ClearKey/EncryptedMediaTest.ConfigChangeVideo/0
+
+# http://crbug.com/362852
+WebRtcBrowserTests/WebRtcBrowserTest.*
diff --git a/build/android/pylib/gtest/gtest_config.py b/build/android/pylib/gtest/gtest_config.py
index acd0e1e..7b27a43 100644
--- a/build/android/pylib/gtest/gtest_config.py
+++ b/build/android/pylib/gtest/gtest_config.py
@@ -52,7 +52,6 @@
     'common_video_unittests',
     'modules_tests',
     'modules_unittests',
-    'neteq_unittests',
     'system_wrappers_unittests',
     'test_support_unittests',
     'tools_unittests',
diff --git a/build/android/pylib/gtest/setup.py b/build/android/pylib/gtest/setup.py
index fda9147..097e283 100644
--- a/build/android/pylib/gtest/setup.py
+++ b/build/android/pylib/gtest/setup.py
@@ -53,7 +53,6 @@
     'common_video_unittests': 'common_video/common_video_unittests.isolate',
     'modules_tests': 'modules/modules_tests.isolate',
     'modules_unittests': 'modules/modules_unittests.isolate',
-    'neteq_unittests': 'modules/audio_coding/neteq/neteq_unittests.isolate',
     'system_wrappers_unittests':
       'system_wrappers/source/system_wrappers_unittests.isolate',
     'test_support_unittests': 'test/test_support_unittests.isolate',
diff --git a/build/android/pylib/screenshot.py b/build/android/pylib/screenshot.py
index 228af88..edf149c 100644
--- a/build/android/pylib/screenshot.py
+++ b/build/android/pylib/screenshot.py
@@ -4,7 +4,6 @@
 
 import os
 import tempfile
-import time
 
 from pylib import cmd_helper
 
@@ -13,34 +12,6 @@
 import pylib.device.device_utils
 
 
-def _GetTimestamp():
-  return time.strftime('%Y-%m-%d-%H%M%S', time.localtime())
-
-
-def _EnsureHostDirectory(host_file):
-  host_dir = os.path.dirname(os.path.abspath(host_file))
-  if not os.path.exists(host_dir):
-    os.makedirs(host_dir)
-
-
-def TakeScreenshot(device, host_file):
-  """Saves a screenshot image to |host_file| on the host.
-
-  Args:
-    device: DeviceUtils instance.
-    host_file: Path to the image file to store on the host.
-  """
-  host_file = os.path.abspath(host_file or
-                              'screenshot-%s.png' % _GetTimestamp())
-  _EnsureHostDirectory(host_file)
-  device_file = '%s/screenshot.png' % device.old_interface.GetExternalStorage()
-  device.old_interface.RunShellCommand(
-      '/system/bin/screencap -p %s' % device_file)
-  device.old_interface.PullFileFromDevice(device_file, host_file)
-  device.old_interface.RunShellCommand('rm -f "%s"' % device_file)
-  return host_file
-
-
 class VideoRecorder(object):
   """Records a screen capture video from an Android Device (KitKat or newer).
 
@@ -61,7 +32,8 @@
     self._device = device
     self._device_file = (
         '%s/screen-recording.mp4' % device.old_interface.GetExternalStorage())
-    self._host_file = host_file or 'screen-recording-%s.mp4' % _GetTimestamp()
+    self._host_file = host_file or ('screen-recording-%s.mp4' %
+                                    device.old_interface.GetTimestamp())
     self._host_file = os.path.abspath(self._host_file)
     self._recorder = None
     self._recorder_pids = None
@@ -81,7 +53,7 @@
 
   def Start(self):
     """Start recording video."""
-    _EnsureHostDirectory(self._host_file)
+    self._device.old_interface.EnsureHostDirectory(self._host_file)
     self._recorder_stdout = tempfile.mkstemp()[1]
     self._recorder = cmd_helper.Popen(
         self._args, stdout=open(self._recorder_stdout, 'w'))
diff --git a/build/apk_test.gypi b/build/apk_test.gypi
index 8ec23a2..0cb22b8 100644
--- a/build/apk_test.gypi
+++ b/build/apk_test.gypi
@@ -11,7 +11,6 @@
 #   'type': 'none',
 #   'variables': {
 #     'test_suite_name': 'test_suite_name',  # string
-#     'input_shlib_path' : '/path/to/test_suite.so',  # string
 #     'input_jars_paths': ['/path/to/test_suite.jar', ... ],  # list
 #   },
 #   'includes': ['path/to/this/gypi/file'],
diff --git a/build/build_config.h b/build/build_config.h
index e26d75e..57eb9a8 100644
--- a/build/build_config.h
+++ b/build/build_config.h
@@ -30,6 +30,8 @@
 #define OS_NACL 1
 #elif defined(__linux__)
 #define OS_LINUX 1
+// include a system header to pull in features.h for glibc/uclibc macros.
+#include <unistd.h>
 #if defined(__GLIBC__) && !defined(__UCLIBC__)
 // we really are using glibc, not uClibc pretending to be glibc
 #define LIBC_GLIBC 1
@@ -49,12 +51,6 @@
 #error Please add support for your platform in build/build_config.h
 #endif
 
-// Use TOOLKIT_GTK on X11 if TOOLKIT_VIEWS and USE_AURA aren't defined.
-#if defined(USE_X11) && !defined(TOOLKIT_VIEWS) && !defined(USE_AURA) && \
-    !defined(OS_NACL)
-#define TOOLKIT_GTK
-#endif
-
 #if defined(USE_OPENSSL) && defined(USE_NSS)
 #error Cannot use both OpenSSL and NSS
 #endif
diff --git a/build/common.gypi b/build/common.gypi
index 1546500..99d4100 100644
--- a/build/common.gypi
+++ b/build/common.gypi
@@ -194,13 +194,6 @@
             'toolkit_views%': 0,
           }],
 
-          # Set toolkit_uses_gtk for the Chromium browser on Linux.
-          ['desktop_linux==1 and use_aura==0 and use_ozone==0', {
-            'toolkit_uses_gtk%': 1,
-          }, {
-            'toolkit_uses_gtk%': 0,
-          }],
-
           # Enable HiDPI on Mac OS, Chrome OS and Windows.
           ['OS=="mac" or chromeos==1 or OS=="win"', {
             'enable_hidpi%': 1,
@@ -253,7 +246,6 @@
       'target_arch%': '<(target_arch)',
       'target_subarch%': '<(target_subarch)',
       'toolkit_views%': '<(toolkit_views)',
-      'toolkit_uses_gtk%': '<(toolkit_uses_gtk)',
       'desktop_linux%': '<(desktop_linux)',
       'use_aura%': '<(use_aura)',
       'use_ash%': '<(use_ash)',
@@ -283,6 +275,11 @@
       # on compile-only bots).
       'fastbuild%': 0,
 
+      # Set to 1 to force Visual C++ to use legacy debug information format /Z7.
+      # This is useful for parallel compilation tools which can't support /Zi.
+      # Only used on Windows.
+      'win_z7%' : 0,
+
       # Set to 1 to enable dcheck in release.
       'dcheck_always_on%': 0,
 
@@ -293,9 +290,6 @@
       # Disable image loader component extension by default.
       'image_loader_extension%': 0,
 
-      # Python version.
-      'python_ver%': '2.6',
-
       # Set NEON compilation flags.
       'arm_neon%': 1,
 
@@ -501,11 +495,6 @@
       # Enable plug-in installation by default.
       'enable_plugin_installation%': 1,
 
-      # Enable PPAPI and NPAPI by default.
-      # TODO(nileshagrawal): Make this flag enable/disable NPAPI as well
-      # as PPAPI; see crbug.com/162667.
-      'enable_plugins%': 1,
-
       # Specifies whether to use canvas_skia.cc in place of platform
       # specific implementations of gfx::Canvas. Affects text drawing in the
       # Chrome UI.
@@ -593,7 +582,7 @@
         }],
 
         # Flags to use glib.
-        ['OS=="win" or OS=="mac" or OS=="ios" or OS=="android" or embedded==1', {
+        ['OS=="win" or OS=="mac" or OS=="ios" or OS=="android" or use_ozone==1', {
           'use_glib%': 0,
         }, {
           'use_glib%': 1,
@@ -632,8 +621,8 @@
           'use_gnome_keyring%': 1,
         }],
 
-        ['toolkit_uses_gtk==1 or OS=="mac" or OS=="ios"', {
-          # GTK+, Mac and iOS want Title Case strings
+        ['OS=="mac" or OS=="ios"', {
+          # Mac and iOS want Title Case strings
           'use_titlecase_in_grd_files%': 1,
         }],
 
@@ -726,19 +715,33 @@
           'enable_plugin_installation%': 1,
         }],
 
+        # Whether PPAPI is enabled.
         ['OS=="android" or OS=="ios" or embedded==1', {
           'enable_plugins%': 0,
         }, {
           'enable_plugins%': 1,
         }],
 
-        # linux_use_gold_binary: whether to use the binary checked into
-        # third_party/binutils.  Gold is not used for 32-bit linux builds
-        # as it runs out of address space.
+        # linux_use_bundled_gold: whether to use the gold linker binary checked
+        # into third_party/binutils.  Force this off via GYP_DEFINES when you
+        # are using a custom toolchain and need to control -B in ldflags.
+        # Gold is not used for 32-bit linux builds as it runs out of address
+        # space.
         ['OS=="linux" and (target_arch=="x64" or target_arch=="arm")', {
-          'linux_use_gold_binary%': 1,
+          'linux_use_bundled_gold%': 1,
         }, {
-          'linux_use_gold_binary%': 0,
+          'linux_use_bundled_gold%': 0,
+        }],
+
+        # linux_use_bundled_binutils: whether to use the binary binutils
+        # checked into third_party/binutils.  These are not multi-arch so cannot
+        # be used except on x86 and x86-64 (the only two architectures which
+        # are currently checke in).  Force this off via GYP_DEFINES when you
+        # are using a custom toolchain and need to control -B in cflags.
+        ['OS=="linux" and (target_arch=="x64")', {
+          'linux_use_bundled_binutils%': 1,
+        }, {
+          'linux_use_bundled_binutils%': 0,
         }],
 
         # linux_use_gold_flags: whether to use build flags that rely on gold.
@@ -941,7 +944,6 @@
     'use_ozone_evdev%': '<(use_ozone_evdev)',
     'use_clipboard_aurax11%': '<(use_clipboard_aurax11)',
     'use_system_fontconfig%': '<(use_system_fontconfig)',
-    'toolkit_uses_gtk%': '<(toolkit_uses_gtk)',
     'desktop_linux%': '<(desktop_linux)',
     'use_x11%': '<(use_x11)',
     'use_gnome_keyring%': '<(use_gnome_keyring)',
@@ -952,9 +954,9 @@
     'use_xi2_mt%':'<(use_xi2_mt)',
     'image_loader_extension%': '<(image_loader_extension)',
     'fastbuild%': '<(fastbuild)',
+    'win_z7%': '<(win_z7)',
     'dcheck_always_on%': '<(dcheck_always_on)',
     'tracing_like_official_build%': '<(tracing_like_official_build)',
-    'python_ver%': '<(python_ver)',
     'arm_version%': '<(arm_version)',
     'arm_neon%': '<(arm_neon)',
     'arm_neon_optional%': '<(arm_neon_optional)',
@@ -996,7 +998,8 @@
     'enable_themes%': '<(enable_themes)',
     'enable_autofill_dialog%': '<(enable_autofill_dialog)',
     'enable_background%': '<(enable_background)',
-    'linux_use_gold_binary%': '<(linux_use_gold_binary)',
+    'linux_use_bundled_gold%': '<(linux_use_bundled_gold)',
+    'linux_use_bundled_binutils%': '<(linux_use_bundled_binutils)',
     'linux_use_gold_flags%': '<(linux_use_gold_flags)',
     'use_canvas_skia%': '<(use_canvas_skia)',
     'test_isolation_mode%': '<(test_isolation_mode)',
@@ -1086,11 +1089,6 @@
     # Set to 1 to enable running Android lint on java/class files.
     'android_lint%': 0,
 
-    # Set to 1 to force Visual C++ to use legacy debug information format /Z7.
-    # This is useful for parallel compilation tools which can't support /Zi.
-    # Only used on Windows.
-    'win_z7%' : 0,
-
     # Although base/allocator lets you select a heap library via an
     # environment variable, the libcmt shim it uses sometimes gets in
     # the way.  To disable it entirely, and switch to normal msvcrt, do e.g.
@@ -1301,8 +1299,8 @@
     # Contains data about the attached devices for gyp_managed_install.
     'build_device_config_path': '<(PRODUCT_DIR)/build_devices.cfg',
 
-    'sas_dll_exists': '<!(python <(DEPTH)/build/dir_exists.py "<(sas_dll_path)")',
-    'wix_exists': '<!(python <(DEPTH)/build/dir_exists.py "<(wix_path)")',
+    'sas_dll_exists': '<!pymod_do_main(dir_exists "<(sas_dll_path)")',
+    'wix_exists': '<!pymod_do_main(dir_exists "<(wix_path)")',
 
     'windows_sdk_default_path': '<(DEPTH)/third_party/platformsdk_win8/files',
     'directx_sdk_default_path': '<(DEPTH)/third_party/directxsdk/files',
@@ -1342,6 +1340,9 @@
     # Set to 1 to compile with MSE support for MPEG2 TS
     'enable_mpeg2ts_stream_parser%': 0,
 
+    # Support ChromeOS touchpad gestures with ozone.
+    'use_evdev_gestures%': 0,
+
     'conditions': [
       # Enable the Syzygy optimization step for the official builds.
       ['OS=="win" and buildtype=="Official" and syzyasan!=1', {
@@ -1358,23 +1359,21 @@
           # TODO(glider): set clang to 1 earlier for ASan and TSan builds so
           # that it takes effect here.
           ['clang==0 and asan==0 and lsan==0 and tsan==0 and msan==0', {
-            'binutils_version%': '<!(python <(DEPTH)/build/compiler_version.py assembler)',
+            'binutils_version%': '<!pymod_do_main(compiler_version target assembler)',
           }],
           # On Android we know the binutils version in the toolchain.
           ['OS=="android"', {
             'binutils_version%': 222,
           }],
+          ['host_arch=="x64"', {
+            'binutils_dir%': 'third_party/binutils/Linux_x64/Release/bin',
+          }],
+          ['host_arch=="ia32"', {
+            'binutils_dir%': 'third_party/binutils/Linux_ia32/Release/bin',
+          }],
           # Our version of binutils in third_party/binutils
-          ['linux_use_gold_binary==1', {
+          ['linux_use_bundled_binutils==1', {
             'binutils_version%': 224,
-            'conditions': [
-              ['host_arch=="x64"', {
-                'binutils_dir%': 'third_party/binutils/Linux_x64/Release/bin',
-              }],
-              ['host_arch=="ia32"', {
-                'binutils_dir%': 'third_party/binutils/Linux_ia32/Release/bin',
-              }],
-            ],
           }],
         ],
       }, {
@@ -1386,9 +1385,10 @@
       # TODO(glider): set clang to 1 earlier for ASan and TSan builds so that
       # it takes effect here.
       ['os_posix==1 and OS!="mac" and OS!="ios" and clang==0 and asan==0 and lsan==0 and tsan==0 and msan==0', {
+        'host_gcc_version%': '<!pymod_do_main(compiler_version host compiler)',
         'conditions': [
           ['OS=="android"', {
-            # We directly set the gcc_version since we know what we use.
+            # We directly set the gcc versions since we know what we use.
             'conditions': [
               ['target_arch=="x64" or target_arch=="arm64"', {
                 'gcc_version%': 48,
@@ -1397,18 +1397,19 @@
               }],
             ],
           }, {
-            'gcc_version%': '<!(python <(DEPTH)/build/compiler_version.py)',
+            'gcc_version%': '<!pymod_do_main(compiler_version target compiler)',
           }],
         ],
       }, {
+        'host_gcc_version%': 0,
         'gcc_version%': 0,
       }],
-      ['OS=="win" and "<!(python <(DEPTH)/build/dir_exists.py <(windows_sdk_default_path))"=="True"', {
+      ['OS=="win" and "<!pymod_do_main(dir_exists <(windows_sdk_default_path))"=="True"', {
         'windows_sdk_path%': '<(windows_sdk_default_path)',
       }, {
         'windows_sdk_path%': 'C:/Program Files (x86)/Windows Kits/8.0',
       }],
-      ['OS=="win" and "<!(python <(DEPTH)/build/dir_exists.py <(directx_sdk_default_path))"=="True"', {
+      ['OS=="win" and "<!pymod_do_main(dir_exists <(directx_sdk_default_path))"=="True"', {
         'directx_sdk_path%': '<(directx_sdk_default_path)',
       }, {
         'directx_sdk_path%': '$(DXSDK_DIR)',
@@ -1814,9 +1815,6 @@
       ['toolkit_views==1', {
         'grit_defines': ['-D', 'toolkit_views'],
       }],
-      ['toolkit_uses_gtk==1', {
-        'grit_defines': ['-D', 'toolkit_uses_gtk'],
-      }],
       ['use_aura==1', {
         'grit_defines': ['-D', 'use_aura'],
       }],
@@ -2082,8 +2080,8 @@
         'chromium_win_pch': 0,
         # goma doesn't support PDB yet, so win_z7=1 or fastbuild=1.
         'conditions': [
-          ['fastbuild==0', {
-            'win_z7': 1,
+          ['win_z7==0', {
+            'fastbuild': 1,
           }],
         ],
       }],
@@ -2320,11 +2318,6 @@
       ['enable_one_click_signin==1', {
         'defines': ['ENABLE_ONE_CLICK_SIGNIN'],
       }],
-      ['toolkit_uses_gtk==1 and toolkit_views==0', {
-        # TODO(erg): We are progressively sealing up use of deprecated features
-        # in gtk in preparation for an eventual porting to gtk3.
-        'defines': ['GTK_DISABLE_SINGLE_INCLUDES=1'],
-      }],
       ['chromeos==1', {
         'defines': ['OS_CHROMEOS=1'],
       }],
@@ -3172,10 +3165,6 @@
             'conditions' : [
               ['OS=="android"', {
                 'ldflags': [
-                  # Only link with needed input sections. This is to avoid
-                  # getting undefined reference to __cxa_bad_typeid in the CDU
-                  # library.
-                  '-Wl,--gc-sections',
                   # Warn in case of text relocations.
                   '-Wl,--warn-shared-textrel',
                 ],
@@ -3772,40 +3761,6 @@
             'dependencies': [
               '<(DEPTH)/third_party/instrumented_libraries/instrumented_libraries.gyp:instrumented_libraries',
             ],
-            'conditions': [
-              ['asan==1', {
-                'target_conditions': [
-                  ['_toolset=="target"', {
-                    'ldflags': [
-                      # Add RPATH to result binary to make it linking instrumented libraries ($ORIGIN means relative RPATH)
-                      '-Wl,-R,\$$ORIGIN/instrumented_libraries/asan/lib/:\$$ORIGIN/instrumented_libraries/asan/usr/lib/x86_64-linux-gnu/',
-                      '-Wl,-z,origin',
-                    ],
-                  }],
-                ],
-              }],
-              ['msan==1', {
-                'target_conditions': [
-                  ['_toolset=="target"', {
-                    'ldflags': [
-                      '-Wl,-R,\$$ORIGIN/instrumented_libraries/msan/lib/:\$$ORIGIN/instrumented_libraries/msan/usr/lib/x86_64-linux-gnu/',
-                      '-Wl,-z,origin',
-                    ],
-                  }],
-                ],
-              }],
-              ['tsan==1', {
-                'target_conditions': [
-                  ['_toolset=="target"', {
-                    'ldflags': [
-                      # Add RPATH to result binary to make it linking instrumented libraries ($ORIGIN means relative RPATH)
-                      '-Wl,-R,\$$ORIGIN/instrumented_libraries/tsan/lib/:\$$ORIGIN/instrumented_libraries/tsan/usr/lib/x86_64-linux-gnu/',
-                      '-Wl,-z,origin',
-                    ],
-                  }],
-                ],
-              }],
-            ],
           }],
           ['use_custom_libcxx==1', {
             'dependencies': [
@@ -3836,9 +3791,9 @@
             'cflags': [ '-g' ],
             'conditions': [
               # TODO(thestig) We should not need to specify chromeos==0 here,
-              # but somehow ChromeOS uses gold despite linux_use_gold_binary==0.
+              # but somehow ChromeOS uses gold despite linux_use_bundled_gold==0.
               # http://crbug.com./360082
-              ['linux_use_gold_binary==0 and chromeos==0 and OS!="android"', {
+              ['linux_use_bundled_gold==0 and chromeos==0 and OS!="android"', {
                 'target_conditions': [
                   ['_toolset=="target"', {
                     'ldflags': [
@@ -3892,33 +3847,51 @@
               # TODO(mithro): Watch for clang support at following thread:
               # http://clang-developers.42468.n3.nabble.com/Adding-fuse-ld-support-to-clang-td4032180.html
               ['gcc_version>=48', {
-                'cflags': [
-                  '-fuse-ld=gold',
+                'target_conditions': [
+                  ['_toolset=="target"', {
+                    'cflags': [
+                      '-fuse-ld=gold',
+                    ],
+                    'ldflags': [
+                      '-fuse-ld=gold',
+                    ],
+                  }],
                 ],
-                'ldflags': [
-                  '-fuse-ld=gold',
+              }],
+              ['host_gcc_version>=48', {
+                'target_conditions': [
+                  ['_toolset=="host"', {
+                    'cflags': [
+                      '-fuse-ld=gold',
+                    ],
+                    'ldflags': [
+                      '-fuse-ld=gold',
+                    ],
+                  }],
                 ],
-              }]
+              }],
             ],
           }],
-          ['linux_use_gold_binary==1', {
-	    # Put our binutils, which contains gold in the search path. We pass
-	    # the path to gold to the compiler. gyp leaves unspecified what the
-	    # cwd is when running the compiler, so the normal gyp path-munging
-	    # fails us. This hack gets the right path.
+          ['linux_use_bundled_binutils==1', {
             'cflags': [
               '-B<!(cd <(DEPTH) && pwd -P)/<(binutils_dir)',
             ],
+          }],
+          ['linux_use_bundled_gold==1', {
+            # Put our binutils, which contains gold in the search path. We pass
+            # the path to gold to the compiler. gyp leaves unspecified what the
+            # cwd is when running the compiler, so the normal gyp path-munging
+            # fails us. This hack gets the right path.
             'ldflags': [
               '-B<!(cd <(DEPTH) && pwd -P)/<(binutils_dir)',
             ],
           }],
           ['binutils_version>=224', {
-	    # Newer binutils don't set DT_RPATH unless you disable "new" dtags
-	    # and the new DT_RUNPATH doesn't work without --no-as-needed flag.
-	    # FIXME(mithro): Figure out the --as-needed/--no-as-needed flags
-	    # inside this file to allow usage of --no-as-needed and removal of
-	    # this flag.
+            # Newer binutils don't set DT_RPATH unless you disable "new" dtags
+            # and the new DT_RUNPATH doesn't work without --no-as-needed flag.
+            # FIXME(mithro): Figure out the --as-needed/--no-as-needed flags
+            # inside this file to allow usage of --no-as-needed and removal of
+            # this flag.
             'ldflags': [
               '-Wl,--disable-new-dtags',
             ],
diff --git a/build/compiler_version.py b/build/compiler_version.py
index fd23d89..05faf54 100755
--- a/build/compiler_version.py
+++ b/build/compiler_version.py
@@ -15,8 +15,42 @@
 import sys
 
 
+compiler_version_cache = {}  # Map from (compiler, tool) -> version.
+
+
+def Usage(program_name):
+  print '%s MODE TOOL' % os.path.basename(program_name)
+  print 'MODE: host or target.'
+  print 'TOOL: assembler or compiler or linker.'
+  return 1
+
+
+def ParseArgs(args):
+  if len(args) != 2:
+    raise Exception('Invalid number of arguments')
+  mode = args[0]
+  tool = args[1]
+  if mode not in ('host', 'target'):
+    raise Exception('Invalid mode: %s' % mode)
+  if tool not in ('assembler', 'compiler', 'linker'):
+    raise Exception('Invalid tool: %s' % tool)
+  return mode, tool
+
+
+def GetEnvironFallback(var_list, default):
+  """Look up an environment variable from a possible list of variable names."""
+  for var in var_list:
+    if var in os.environ:
+      return os.environ[var]
+  return default
+
+
 def GetVersion(compiler, tool):
   tool_output = tool_error = None
+  cache_key = (compiler, tool)
+  cached_version = compiler_version_cache.get(cache_key)
+  if cached_version:
+    return cached_version
   try:
     # Note that compiler could be something tricky like "distcc g++".
     if tool == "compiler":
@@ -43,14 +77,20 @@
     else:
       raise Exception("Unknown tool %s" % tool)
 
-    pipe = subprocess.Popen(compiler, shell=True,
+    # Force the locale to C otherwise the version string could be localized
+    # making regex matching fail.
+    env = os.environ.copy()
+    env["LC_ALL"] = "C"
+    pipe = subprocess.Popen(compiler, shell=True, env=env,
                             stdout=subprocess.PIPE, stderr=subprocess.PIPE)
     tool_output, tool_error = pipe.communicate()
     if pipe.returncode:
       raise subprocess.CalledProcessError(pipe.returncode, compiler)
 
-    result = version_re.match(tool_output)
-    return result.group(1) + result.group(2)
+    parsed_output = version_re.match(tool_output)
+    result = parsed_output.group(1) + parsed_output.group(2)
+    compiler_version_cache[cache_key] = result
+    return result
   except Exception, e:
     if tool_error:
       sys.stderr.write(tool_error)
@@ -60,33 +100,44 @@
 
 
 def main(args):
-  # Force the locale to C otherwise the version string could be localized
-  # making regex matching fail.
-  os.environ["LC_ALL"] = "C"
+  try:
+    (mode, tool) = ParseArgs(args[1:])
+  except Exception, e:
+    sys.stderr.write(e.message + '\n\n')
+    return Usage(args[0])
 
-  tool = "compiler"
-  if len(args) == 1:
-    tool = args[0]
-  elif len(args) > 1:
-    print "Unknown arguments!"
+  ret_code, result = ExtractVersion(mode, tool)
+  if ret_code == 0:
+    print result
+  return ret_code
 
-  # Check if CXX environment variable exists and
-  # if it does use that compiler.
-  cxx = os.getenv("CXX", None)
-  if cxx:
-    cxxversion = GetVersion(cxx, tool)
-    if cxxversion != "":
-      print cxxversion
-      return 0
-  else:
-    # Otherwise we check the g++ version.
-    gccversion = GetVersion("g++", tool)
-    if gccversion != "":
-      print gccversion
-      return 0
 
-  return 1
+def DoMain(args):
+  """Hook to be called from gyp without starting a separate python
+  interpreter."""
+  (mode, tool) = ParseArgs(args)
+  ret_code, result = ExtractVersion(mode, tool)
+  if ret_code == 0:
+    return result
+  raise Exception("Failed to extract compiler version for args: %s" % args)
+
+
+def ExtractVersion(mode, tool):
+  # Check if various CXX environment variables exist and use them if they
+  # exist. The preferences and fallback order is a close approximation of
+  # GenerateOutputForConfig() in GYP's ninja generator.
+  # The main difference being not supporting GYP's make_global_settings.
+  environments = ['CXX_target', 'CXX']
+  if mode == 'host':
+    environments = ['CXX_host'] + environments;
+  compiler = GetEnvironFallback(environments, 'c++')
+
+  if compiler:
+    compiler_version = GetVersion(compiler, tool)
+    if compiler_version != "":
+      return (0, compiler_version)
+  return (1, None)
 
 
 if __name__ == "__main__":
-  sys.exit(main(sys.argv[1:]))
+  sys.exit(main(sys.argv))
diff --git a/build/config/BUILD.gn b/build/config/BUILD.gn
index 1d58f86..866c9a8 100644
--- a/build/config/BUILD.gn
+++ b/build/config/BUILD.gn
@@ -102,11 +102,16 @@
   if (use_glib) {
     defines += [ "USE_GLIB=1" ]
   }
-  if (use_nss) {
-    defines += [ "USE_NSS=1" ]
-  }
   if (use_openssl) {
     defines += [ "USE_OPENSSL=1" ]
+    if (use_openssl_certs) {
+      defines += [ "USE_OPENSSL_CERTS=1" ]
+    }
+  } else if (use_nss_certs) {
+    # USE_NSS really means "use nss for certificate validation and storage"
+    # (like USE_OPENSSL_CERTS) and not "we're linking to NSS." It might be nice
+    # to rename this but we're hoping to transition away from NSS.
+    defines += [ "USE_NSS=1" ]
   }
   if (use_ozone) {
     defines += [ "USE_OZONE=1" ]
diff --git a/build/config/BUILDCONFIG.gn b/build/config/BUILDCONFIG.gn
index 2172df9..7f80595 100644
--- a/build/config/BUILDCONFIG.gn
+++ b/build/config/BUILDCONFIG.gn
@@ -42,10 +42,6 @@
   # the default toolchain to 64-bit.
   force_win64 = false
 
-  # Set to true on the command line when invoked by GYP. Build files can key
-  # off of this to make any GYP-output-specific changes to the build.
-  is_gyp = false
-
   # Selects the desired build flavor. Official builds get additional
   # processing to prepare for release. Normally you will want to develop and
   # test with this flag off.
@@ -67,13 +63,6 @@
 
   # Compile for Thread Sanitizer to find threading bugs.
   is_tsan = false
-
-  # When running in gyp-generating mode, this is the root of the build tree.
-  gyp_output_dir = "out"
-
-  # When running in gyp-generating mode, this flag indicates if the current GYP
-  # generator is xcode. Can only be true when building for iOS).
-  is_gyp_xcode_generator = false
 }
 
 # =============================================================================
@@ -207,6 +196,7 @@
   "*_win.h",
   "*_win_unittest.cc",
   "*\bwin/*",
+  "*.rc",
 ]
 mac_sources_filters = [
   "*_mac.h",
@@ -257,6 +247,13 @@
   "*_posix_unittest.cc",
   "*\bposix/*",
 ]
+chromeos_sources_filters = [
+  "*_chromeos.h",
+  "*_chromeos.cc",
+  "*_chromeos_unittest.h",
+  "*_chromeos_unittest.cc",
+  "*\bchromeos/*",
+]
 # DO NOT ADD MORE PATTERNS TO THIS LIST, see set_sources_assignment_filter call
 # below.
 
@@ -282,6 +279,9 @@
 if (!is_android) {
   sources_assignment_filter += android_sources_filters
 }
+if (!is_chromeos) {
+  sources_assignment_filter += chromeos_sources_filters
+}
 
 # Actually save this list.
 #
@@ -336,7 +336,11 @@
   "//build/config/compiler:runtime_library",
 ]
 if (is_win) {
-  native_compiler_configs += [ "//build/config/win:sdk", ]
+  native_compiler_configs += [
+    "//build/config/win:lean_and_mean",
+    "//build/config/win:sdk",
+    "//build/config/win:unicode",
+  ]
 } else if (is_linux) {
   native_compiler_configs += [ "//build/config/linux:sdk", ]
 } else if (is_mac) {
@@ -346,8 +350,14 @@
 } else if (is_android) {
   native_compiler_configs += [ "//build/config/android:sdk", ]
 }
+if (!is_win) {
+  native_compiler_configs += [ "//build/config/gcc:symbol_visibility_hidden" ]
+}
 if (is_clang) {
-  native_compiler_configs += [ "//build/config/clang:find_bad_constructs" ]
+  native_compiler_configs += [
+    "//build/config/clang:find_bad_constructs",
+    "//build/config/clang:extra_warnings",
+  ]
 }
 
 # Optimizations and debug checking.
diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni
new file mode 100644
index 0000000..6820ba3
--- /dev/null
+++ b/build/config/android/rules.gni
@@ -0,0 +1,61 @@
+# 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.
+
+# Declare a jni target
+#
+# This target generates the native jni bindings for a set of .java files.
+#
+# See base/android/jni_generator/jni_generator.py for more info about the
+# format of generating JNI bindings.
+#
+# Variables
+#   sources: list of .java files to generate jni for
+#   jni_package: subdirectory path for generated bindings
+#
+# Example
+#   generate_jni("foo_jni") {
+#     sources = [
+#       "android/java/src/org/chromium/foo/Foo.java",
+#       "android/java/src/org/chromium/foo/FooUtil.java",
+#     ]
+#     jni_package = "foo"
+#   }
+template("generate_jni") {
+  assert(defined(invoker.sources))
+  assert(defined(invoker.jni_package))
+  jni_package = invoker.jni_package
+  base_output_dir = "${root_gen_dir}/${target_name}/${jni_package}"
+  jni_output_dir = "${base_output_dir}/jni"
+
+  jni_generator_includes =
+      rebase_path("//base/android/jni_generator/jni_generator_helper.h")
+
+  config("jni_includes_${target_name}") {
+    include_dirs = [ base_output_dir ]
+  }
+
+  action_foreach(target_name) {
+    script = "//base/android/jni_generator/jni_generator.py"
+    direct_dependent_configs = [ ":jni_includes_${target_name}" ]
+    sources = invoker.sources
+    outputs = [
+      "${jni_output_dir}/{{source_name_part}}_jni.h"
+    ]
+
+    args = [
+      "--input_file={{source}}",
+      "--optimize_generation=1",
+      "--ptr_type=long",
+      "--output_dir", rebase_path(jni_output_dir),
+      "--includes=${jni_generator_includes}",
+    ]
+    if (defined(invoker.jni_generator_jarjar_file)) {
+      args += [
+        "--jarjar", rebase_path(jni_generator_jarjar_file)
+      ]
+    }
+
+    hard_dep = true
+  }
+}
diff --git a/build/config/clang/BUILD.gn b/build/config/clang/BUILD.gn
index a0392d2..f10fde7 100644
--- a/build/config/clang/BUILD.gn
+++ b/build/config/clang/BUILD.gn
@@ -31,3 +31,14 @@
     ]
   }
 }
+
+# Enables some extra Clang-specific warnings. Some third-party code won't
+# compile with these so may want to remove this config.
+config("extra_warnings") {
+  cflags = [
+    "-Wheader-hygiene"
+
+    # Warns when a const char[] is converted to bool.
+    "-Wstring-conversion",
+  ]
+}
diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
index db49b4b..c492356 100644
--- a/build/config/compiler/BUILD.gn
+++ b/build/config/compiler/BUILD.gn
@@ -43,11 +43,13 @@
     # --------------------------------
     cflags += [
       "-fno-strict-aliasing",  # See http://crbug.com/32204
-      "-fvisibility=hidden",
     ]
     cflags_cc += [
       "-fno-exceptions",
       "-fno-threadsafe-statics",
+      # Not exporting C++ inline functions can generally be applied anywhere
+      # so we do so here. Normal function visibility is controlled by
+      # //build/config/gcc:symbol_visibility_hidden.
       "-fvisibility-inlines-hidden",
     ]
 
@@ -300,8 +302,6 @@
       "_CRT_RAND_S",
       "_CRT_SECURE_NO_DEPRECATE",
       "_SCL_SECURE_NO_DEPRECATE",
-      "_UNICODE",
-      "UNICODE",
     ]
   }
 
@@ -517,12 +517,8 @@
       ]
     }
 
-    # TODO(brettw) Ones below here should be clang-only when we have a flag
-    # for it.
     if (is_clang) {
       cflags += [
-        "-Wheader-hygiene",
-
         # This warns on using ints as initializers for floats in
         # initializer lists (e.g. |int a = f(); CGSize s = { a, a };|),
         # which happens in several places in chrome code. Not sure if
@@ -545,9 +541,6 @@
 
         # Clang spots more unused functions.
         "-Wno-unused-function",
-
-        # Warns when a const char[] is converted to bool.
-        "-Wstring-conversion",
       ]
     }
 
diff --git a/build/config/crypto.gni b/build/config/crypto.gni
index f3d8590..fc4cbb4 100644
--- a/build/config/crypto.gni
+++ b/build/config/crypto.gni
@@ -13,8 +13,10 @@
   use_openssl = is_android || is_nacl
 }
 
-if (is_linux && !use_openssl) {
-  use_nss = true
-} else {
-  use_nss = false
-}
+# True when we're using OpenSSL for certificate verification and storage. We
+# only do this when we're using OpenSSL on desktop Linux systems. For other
+# systems (Mac/Win/Android) we use the system certificate features.
+use_openssl_certs = use_openssl && is_linux
+
+# Same meaning as use_openssl_certs but for NSS.
+use_nss_certs = !use_openssl && is_linux
diff --git a/build/config/gcc/BUILD.gn b/build/config/gcc/BUILD.gn
new file mode 100644
index 0000000..b88ba83
--- /dev/null
+++ b/build/config/gcc/BUILD.gn
@@ -0,0 +1,19 @@
+# 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.
+
+# This config causes functions not to be automatically exported from shared
+# libraries. By default, all symbols are exported but this means there are
+# lots of exports that slow everything down. In general we explicitly mark
+# which functiosn we want to export from components.
+#
+# Some third_party code assumes all functions are exported so this is separated
+# into its own config so such libraries can remove this config to make symbols
+# public again.
+#
+# See http://gcc.gnu.org/wiki/Visibility
+config("symbol_visibility_hidden") {
+  # Note that -fvisibility-inlines-hidden is set globally in the compiler
+  # config since that can almost always be applied.
+  cflags = [ "-fvisibility=hidden" ]
+}
diff --git a/build/config/ios/ios_sdk.gni b/build/config/ios/ios_sdk.gni
index e6c3e12..6b81a03 100644
--- a/build/config/ios/ios_sdk.gni
+++ b/build/config/ios/ios_sdk.gni
@@ -11,19 +11,12 @@
   # target is for running on the device. The default value is to use the
   # Simulator except when targeting GYP's Xcode builds (for compat with the
   # existing GYP build).
-  use_ios_simulator = !is_gyp_xcode_generator
+  use_ios_simulator = true
 
   # Version of iOS that we're targeting.
   ios_deployment_target = "6.0"
 }
 
-# Simulator flag explicitly passed in.
-if (!is_gyp_xcode_generator) {
-  # The Ninja build currently only targets the simulator.
-  assert(use_ios_simulator,
-         "You can't do an iOS device build using Ninja yet.")
-}
-
 if (ios_sdk_path == "") {
   # Compute default target.
   if (use_ios_simulator) {
diff --git a/build/config/linux/BUILD.gn b/build/config/linux/BUILD.gn
index 51616c0..e611b7c 100644
--- a/build/config/linux/BUILD.gn
+++ b/build/config/linux/BUILD.gn
@@ -75,3 +75,53 @@
     "Xtst",
   ]
 }
+
+config("libresolv") {
+  libs = [ "resolv" ]
+}
+
+pkg_config("gconf") {
+  packages = [ "gconf-2.0" ]
+  defines = [ "USE_GCONF" ]
+}
+
+pkg_config("gio_config") {
+  packages = [ "gio-2.0" ]
+  defines = [ "USE_GIO" ]
+}
+
+gio_output_h = "$root_gen_dir/library_loaders/libgio.h"
+gio_output_cc = "$root_gen_dir/library_loaders/libgio_loader.cc"
+
+action("make_gio_headers") {
+  visibility = ":gio"
+
+  script = "//tools/generate_library_loader/generate_library_loader.py"
+
+  outputs = [ gio_output_h, gio_output_cc ]
+
+  args = [
+    "--name", "LibGioLoader",
+    "--output-h", rebase_path(gio_output_h),
+    "--output-cc", rebase_path(gio_output_cc),
+    # TODO(brettw) convert ti "<gio/gio.h>" once GN doesn't mangle <>.
+    "--header", "\"gio/gio.h\"",
+    # Note GYP build exposes a variable linux_link_gsettings to control this,
+    # which, if manually set to true, will disable dlopen() for this. Its not
+    # clear this is needed, so here we just leave off.
+    "--link-directly=0",
+    "g_settings_new",
+    "g_settings_get_child",
+    "g_settings_get_string",
+    "g_settings_get_boolean",
+    "g_settings_get_int",
+    "g_settings_get_strv",
+    "g_settings_list_schemas",
+  ]
+}
+
+source_set("gio") {
+  direct_dependent_configs = [ ":gio_config" ]
+  sources = [ gio_output_h, gio_output_cc ]
+  deps = [ ":make_gio_headers" ]
+}
diff --git a/build/config/win/BUILD.gn b/build/config/win/BUILD.gn
index 3175b16..9738fff 100644
--- a/build/config/win/BUILD.gn
+++ b/build/config/win/BUILD.gn
@@ -19,7 +19,6 @@
     "NTDDI_VERSION=0x06020000",
     "PSAPI_VERSION=1",
     "WIN32",
-    "WIN32_LEAN_AND_MEAN",
     "WINVER=0x0602",
   ]
 
@@ -109,3 +108,24 @@
 config("no_incremental_linking") {
   ldflags = [ "/INCREMENTAL:NO" ]
 }
+
+# Character set ----------------------------------------------------------------
+
+# Not including this config means "ansi" (8-bit system codepage).
+config("unicode") {
+  defines = [
+    "_UNICODE",
+    "UNICODE",
+  ]
+}
+
+# Lean and mean ----------------------------------------------------------------
+
+# Some third party code might not compile with WIN32_LEAN_AND_MEAN so we have
+# to have a separate config for it. Remove this config from your target to
+# get the "bloaty and accomodating" version of windows.h.
+config("lean_and_mean") {
+  defines = [
+    "WIN32_LEAN_AND_MEAN",
+  ]
+}
diff --git a/build/dir_exists.py b/build/dir_exists.py
index 0a89bc8..70d367e 100755
--- a/build/dir_exists.py
+++ b/build/dir_exists.py
@@ -8,8 +8,16 @@
 import sys
 
 def main():
-  sys.stdout.write(str(os.path.isdir(sys.argv[1])))
+  sys.stdout.write(_is_dir(sys.argv[1]))
   return 0
 
+def _is_dir(dir_name):
+  return str(os.path.isdir(dir_name))
+
+def DoMain(args):
+  """Hook to be called from gyp without starting a separate python
+  interpreter."""
+  return _is_dir(args[0])
+
 if __name__ == '__main__':
   sys.exit(main())
diff --git a/build/filename_rules.gypi b/build/filename_rules.gypi
index 9bb76c5..001b975 100644
--- a/build/filename_rules.gypi
+++ b/build/filename_rules.gypi
@@ -71,13 +71,6 @@
         ['exclude', '(^|/)x/'],
       ],
     }],
-    ['<(toolkit_uses_gtk)!=1 or >(nacl_untrusted_build)==1', {
-      'sources/': [
-        ['exclude', '_gtk(_browsertest|_unittest)?\\.(h|cc)$'],
-        ['exclude', '(^|/)gtk/'],
-        ['exclude', '(^|/)gtk_[^/]*\\.(h|cc)$'],
-      ],
-    }],
     ['<(toolkit_views)==0 or >(nacl_untrusted_build)==1', {
       'sources/': [ ['exclude', '_views\\.(h|cc)$'] ]
     }],
diff --git a/build/gyp_chromium b/build/gyp_chromium
index 3ac81c0..201e5a0 100755
--- a/build/gyp_chromium
+++ b/build/gyp_chromium
@@ -10,6 +10,7 @@
 import glob
 import gyp_helper
 import os
+import re
 import shlex
 import subprocess
 import string
@@ -248,7 +249,7 @@
 
   # We explicitly don't support the make gyp generator (crbug.com/348686). Be
   # nice and fail here, rather than choking in gyp.
-  if 'make' in os.environ.get('GYP_GENERATORS', ''):
+  if re.search(r'(^|,|\s)make($|,|\s)', os.environ.get('GYP_GENERATORS', '')):
     print 'Error: make gyp generator not supported (check GYP_GENERATORS).'
     sys.exit(1)
 
diff --git a/build/ios/grit_whitelist.txt b/build/ios/grit_whitelist.txt
index 4d7f6d2..9aa3106 100644
--- a/build/ios/grit_whitelist.txt
+++ b/build/ios/grit_whitelist.txt
@@ -232,6 +232,7 @@
 IDS_DEFAULT_AVATAR_NAME_23
 IDS_DEFAULT_AVATAR_NAME_24
 IDS_DEFAULT_AVATAR_NAME_25
+IDS_DEFAULT_AVATAR_NAME_26
 IDS_DEFAULT_AVATAR_NAME_8
 IDS_DEFAULT_AVATAR_NAME_9
 IDS_DEFAULT_ENCODING
@@ -259,6 +260,8 @@
 IDS_ENABLE_BACKLOADER_DESCRIPTION
 IDS_ENABLE_BACKLOADER_NAME
 IDS_ERRORPAGES_BUTTON_LESS
+IDS_ERRORPAGES_BUTTON_LOAD_STALE
+IDS_ERRORPAGES_BUTTON_LOAD_STALE_HELP
 IDS_ERRORPAGES_BUTTON_MORE
 IDS_ERRORPAGES_BUTTON_RELOAD
 IDS_ERRORPAGES_DETAILS_ADDRESS_UNREACHABLE
@@ -450,8 +453,6 @@
 IDS_FLAGS_ENABLE_ASH_OAK_NAME
 IDS_FLAGS_ENABLE_ASYNC_DNS_DESCRIPTION
 IDS_FLAGS_ENABLE_ASYNC_DNS_NAME
-IDS_FLAGS_ENABLE_AUTOLOGIN_DESCRIPTION
-IDS_FLAGS_ENABLE_AUTOLOGIN_NAME
 IDS_FLAGS_ENABLE_CARRIER_SWITCHING
 IDS_FLAGS_ENABLE_CARRIER_SWITCHING_DESCRIPTION
 IDS_FLAGS_ENABLE_DEFERRED_IMAGE_DECODING_DESCRIPTION
@@ -905,135 +906,135 @@
 IDS_TIME_DAYS_1ST_DEFAULT
 IDS_TIME_DAYS_1ST_FEW
 IDS_TIME_DAYS_1ST_MANY
+IDS_TIME_DAYS_1ST_SINGULAR
 IDS_TIME_DAYS_1ST_TWO
 IDS_TIME_DAYS_1ST_ZERO
 IDS_TIME_DAYS_DEFAULT
 IDS_TIME_DAYS_FEW
 IDS_TIME_DAYS_MANY
+IDS_TIME_DAYS_SINGULAR
 IDS_TIME_DAYS_TWO
 IDS_TIME_DAYS_ZERO
-IDS_TIME_DAY_1ST_SINGULAR
-IDS_TIME_DAY_SINGULAR
 IDS_TIME_ELAPSED_DAYS_DEFAULT
 IDS_TIME_ELAPSED_DAYS_FEW
 IDS_TIME_ELAPSED_DAYS_MANY
+IDS_TIME_ELAPSED_DAYS_SINGULAR
 IDS_TIME_ELAPSED_DAYS_TWO
 IDS_TIME_ELAPSED_DAYS_ZERO
-IDS_TIME_ELAPSED_DAY_SINGULAR
 IDS_TIME_ELAPSED_HOURS_DEFAULT
 IDS_TIME_ELAPSED_HOURS_FEW
 IDS_TIME_ELAPSED_HOURS_MANY
+IDS_TIME_ELAPSED_HOURS_SINGULAR
 IDS_TIME_ELAPSED_HOURS_TWO
 IDS_TIME_ELAPSED_HOURS_ZERO
-IDS_TIME_ELAPSED_HOUR_SINGULAR
 IDS_TIME_ELAPSED_MINS_DEFAULT
 IDS_TIME_ELAPSED_MINS_FEW
 IDS_TIME_ELAPSED_MINS_MANY
+IDS_TIME_ELAPSED_MINS_SINGULAR
 IDS_TIME_ELAPSED_MINS_TWO
 IDS_TIME_ELAPSED_MINS_ZERO
-IDS_TIME_ELAPSED_MIN_SINGULAR
 IDS_TIME_ELAPSED_SECS_DEFAULT
 IDS_TIME_ELAPSED_SECS_FEW
 IDS_TIME_ELAPSED_SECS_MANY
+IDS_TIME_ELAPSED_SECS_SINGULAR
 IDS_TIME_ELAPSED_SECS_TWO
 IDS_TIME_ELAPSED_SECS_ZERO
-IDS_TIME_ELAPSED_SEC_SINGULAR
 IDS_TIME_HOURS_1ST_DEFAULT
 IDS_TIME_HOURS_1ST_FEW
 IDS_TIME_HOURS_1ST_MANY
+IDS_TIME_HOURS_1ST_SINGULAR
 IDS_TIME_HOURS_1ST_TWO
 IDS_TIME_HOURS_1ST_ZERO
 IDS_TIME_HOURS_2ND_DEFAULT
 IDS_TIME_HOURS_2ND_FEW
 IDS_TIME_HOURS_2ND_MANY
+IDS_TIME_HOURS_2ND_SINGULAR
 IDS_TIME_HOURS_2ND_TWO
 IDS_TIME_HOURS_2ND_ZERO
 IDS_TIME_HOURS_DEFAULT
 IDS_TIME_HOURS_FEW
 IDS_TIME_HOURS_MANY
+IDS_TIME_HOURS_SINGULAR
 IDS_TIME_HOURS_TWO
 IDS_TIME_HOURS_ZERO
-IDS_TIME_HOUR_1ST_SINGULAR
-IDS_TIME_HOUR_2ND_SINGULAR
-IDS_TIME_HOUR_SINGULAR
 IDS_TIME_LONG_MINS_1ST_DEFAULT
 IDS_TIME_LONG_MINS_1ST_FEW
 IDS_TIME_LONG_MINS_1ST_MANY
+IDS_TIME_LONG_MINS_1ST_SINGULAR
 IDS_TIME_LONG_MINS_1ST_TWO
 IDS_TIME_LONG_MINS_1ST_ZERO
 IDS_TIME_LONG_MINS_2ND_DEFAULT
 IDS_TIME_LONG_MINS_2ND_FEW
 IDS_TIME_LONG_MINS_2ND_MANY
+IDS_TIME_LONG_MINS_2ND_SINGULAR
 IDS_TIME_LONG_MINS_2ND_TWO
 IDS_TIME_LONG_MINS_2ND_ZERO
 IDS_TIME_LONG_MINS_DEFAULT
 IDS_TIME_LONG_MINS_FEW
 IDS_TIME_LONG_MINS_MANY
+IDS_TIME_LONG_MINS_SINGULAR
 IDS_TIME_LONG_MINS_TWO
 IDS_TIME_LONG_MINS_ZERO
-IDS_TIME_LONG_MIN_1ST_SINGULAR
-IDS_TIME_LONG_MIN_2ND_SINGULAR
-IDS_TIME_LONG_MIN_SINGULAR
 IDS_TIME_LONG_SECS_2ND_DEFAULT
 IDS_TIME_LONG_SECS_2ND_FEW
 IDS_TIME_LONG_SECS_2ND_MANY
+IDS_TIME_LONG_SECS_2ND_SINGULAR
 IDS_TIME_LONG_SECS_2ND_TWO
 IDS_TIME_LONG_SECS_2ND_ZERO
 IDS_TIME_LONG_SECS_DEFAULT
 IDS_TIME_LONG_SECS_FEW
 IDS_TIME_LONG_SECS_MANY
+IDS_TIME_LONG_SECS_SINGULAR
 IDS_TIME_LONG_SECS_TWO
 IDS_TIME_LONG_SECS_ZERO
-IDS_TIME_LONG_SEC_2ND_SINGULAR
-IDS_TIME_LONG_SEC_SINGULAR
 IDS_TIME_MINS_DEFAULT
 IDS_TIME_MINS_FEW
 IDS_TIME_MINS_MANY
+IDS_TIME_MINS_SINGULAR
 IDS_TIME_MINS_TWO
 IDS_TIME_MINS_ZERO
-IDS_TIME_MIN_SINGULAR
 IDS_TIME_REMAINING_DAYS_DEFAULT
 IDS_TIME_REMAINING_DAYS_FEW
 IDS_TIME_REMAINING_DAYS_MANY
+IDS_TIME_REMAINING_DAYS_SINGULAR
 IDS_TIME_REMAINING_DAYS_TWO
 IDS_TIME_REMAINING_DAYS_ZERO
-IDS_TIME_REMAINING_DAY_SINGULAR
 IDS_TIME_REMAINING_HOURS_DEFAULT
 IDS_TIME_REMAINING_HOURS_FEW
 IDS_TIME_REMAINING_HOURS_MANY
+IDS_TIME_REMAINING_HOURS_SINGULAR
 IDS_TIME_REMAINING_HOURS_TWO
 IDS_TIME_REMAINING_HOURS_ZERO
-IDS_TIME_REMAINING_HOUR_SINGULAR
 IDS_TIME_REMAINING_LONG_MINS_DEFAULT
 IDS_TIME_REMAINING_LONG_MINS_FEW
 IDS_TIME_REMAINING_LONG_MINS_MANY
+IDS_TIME_REMAINING_LONG_MINS_SINGULAR
 IDS_TIME_REMAINING_LONG_MINS_TWO
 IDS_TIME_REMAINING_LONG_MINS_ZERO
-IDS_TIME_REMAINING_LONG_MIN_SINGULAR
 IDS_TIME_REMAINING_LONG_SECS_DEFAULT
 IDS_TIME_REMAINING_LONG_SECS_FEW
 IDS_TIME_REMAINING_LONG_SECS_MANY
+IDS_TIME_REMAINING_LONG_SECS_SINGULAR
 IDS_TIME_REMAINING_LONG_SECS_TWO
 IDS_TIME_REMAINING_LONG_SECS_ZERO
-IDS_TIME_REMAINING_LONG_SEC_SINGULAR
 IDS_TIME_REMAINING_MINS_DEFAULT
 IDS_TIME_REMAINING_MINS_FEW
 IDS_TIME_REMAINING_MINS_MANY
+IDS_TIME_REMAINING_MINS_SINGULAR
 IDS_TIME_REMAINING_MINS_TWO
 IDS_TIME_REMAINING_MINS_ZERO
-IDS_TIME_REMAINING_MIN_SINGULAR
 IDS_TIME_REMAINING_SECS_DEFAULT
 IDS_TIME_REMAINING_SECS_FEW
 IDS_TIME_REMAINING_SECS_MANY
+IDS_TIME_REMAINING_SECS_SINGULAR
 IDS_TIME_REMAINING_SECS_TWO
 IDS_TIME_REMAINING_SECS_ZERO
-IDS_TIME_REMAINING_SEC_SINGULAR
 IDS_TIME_SECS_DEFAULT
 IDS_TIME_SECS_FEW
 IDS_TIME_SECS_MANY
+IDS_TIME_SECS_SINGULAR
 IDS_TIME_SECS_TWO
 IDS_TIME_SECS_ZERO
-IDS_TIME_SEC_SINGULAR
 IDS_TOOLTIP_STAR
 IDS_TOUCH_EVENTS_DESCRIPTION
 IDS_TOUCH_EVENTS_NAME
diff --git a/build/landmines.py b/build/landmines.py
index 70e5a4c..db5e54d 100755
--- a/build/landmines.py
+++ b/build/landmines.py
@@ -15,6 +15,7 @@
 """
 
 import difflib
+import errno
 import logging
 import optparse
 import os
@@ -57,8 +58,11 @@
                                  landmine_utils.platform() == 'ios')
 
   landmines_path = os.path.join(out_dir, '.landmines')
-  if not os.path.exists(out_dir):
+  try:
     os.makedirs(out_dir)
+  except OSError as e:
+    if e.errno == errno.EEXIST:
+      pass
 
   if not os.path.exists(landmines_path):
     with open(landmines_path, 'w') as f:
diff --git a/build/linux/system.gyp b/build/linux/system.gyp
index 569ab63..dddf86a 100644
--- a/build/linux/system.gyp
+++ b/build/linux/system.gyp
@@ -360,6 +360,44 @@
         }
       ],  # targets
     }],
+    ['use_evdev_gestures==1', {
+      'targets': [
+        {
+          'target_name': 'libevdev-cros',
+          'type': 'none',
+          'direct_dependent_settings': {
+            'cflags': [
+              '<!@(<(pkg-config) --cflags libevdev-cros)'
+            ],
+          },
+          'link_settings': {
+            'ldflags': [
+              '<!@(<(pkg-config) --libs-only-L --libs-only-other libevdev-cros)',
+            ],
+            'libraries': [
+              '<!@(<(pkg-config) --libs-only-l libevdev-cros)',
+            ],
+          },
+        },
+        {
+          'target_name': 'libgestures',
+          'type': 'none',
+          'direct_dependent_settings': {
+            'cflags': [
+              '<!@(<(pkg-config) --cflags libgestures)'
+            ],
+          },
+          'link_settings': {
+            'ldflags': [
+              '<!@(<(pkg-config) --libs-only-L --libs-only-other libgestures)',
+            ],
+            'libraries': [
+              '<!@(<(pkg-config) --libs-only-l libgestures)',
+            ],
+          },
+        },
+      ],
+    }],
   ],  # conditions
   'targets': [
     {
diff --git a/build/toolchain/android/BUILD.gn b/build/toolchain/android/BUILD.gn
index 8f84f69..bdf2632 100644
--- a/build/toolchain/android/BUILD.gn
+++ b/build/toolchain/android/BUILD.gn
@@ -16,64 +16,6 @@
   assert(false, "Need Android toolchain support for your build OS.")
 }
 
-if (is_gyp) {
-  # Set the compilers for GYP to use. This logic is only relevant to GYP where
-  # there is "a" target compiler. In native GN builds, we have separate
-  # compilers for the toolchains below, any or all of which could be active in
-  # any given build.
-  if (is_clang) {
-    # Set the GYP header for all toolchains when running under Clang.
-    make_global_settings = make_clang_global_settings
-  } else {
-    # Find the compiler for GYP for non-Clang Android.
-    if (cpu_arch == "x86") {
-      android_toolchain_arch = "x86-4.6"
-    } else if (cpu_arch == "arm") {
-      android_toolchain_arch = "arm-linux-androideabi-4.6"
-    } else if (cpu_arch == "mipsel") {
-      android_toolchain_arch = "mipsel-linux-android-4.6"
-    } else {
-      assert(false, "Need Android toolchain support for your platform.")
-    }
-
-    # The extra slash before "toolchains" is because GYP generates this and we
-    # have to match the make_global_settings character-for-character,
-    # TODO(brettw) remove extra slash before toolchains when GYP compat is no
-    # longer necessary.
-    android_toolchain =
-      "$android_ndk_root//toolchains/$android_toolchain_arch/prebuilt/$build_os-$android_host_arch/bin"
-
-    # This script will find the compilers for the given Android toolchain
-    # directory.
-    android_compilers = exec_script("find_android_compiler.py",
-                                    [android_toolchain], "value")
-    make_global_settings =
-      "['CC', '" + android_compilers[0] + "']," +
-      "['CXX', '" + android_compilers[1] + "']," +
-      "['CC.host', '" + android_compilers[2] + "']," +
-      "['CXX.host', '" + android_compilers[3] + "'],"
-  }
-
-  if (use_goma) {
-    # There is a TODO(yyanagisawa) in common.gypi about the make generator not
-    # supporting CC_wrapper without CC. As a result, we must add a condition
-    # when on the generator when we're not explicitly setting the variables
-    # above (which happens when gyp_header is empty at this point).
-    #
-    # GYP will interpret the file once for each generator, so we have to write
-    # this condition into the GYP file since the user could have more than one
-    # generator set.
-    gyp_header =
-      "'conditions': [" +
-      "['\"<(GENERATOR)\"==\"ninja\"', { 'make_global_settings': [" +
-      make_global_settings +
-      make_goma_global_settings +
-      "]}]],"
-  } else {
-    gyp_header = "'make_global_settings': [" + make_global_settings + "],"
-  }
-}
-
 gcc_toolchain("x86") {
   prefix = "$android_ndk_root/toolchains/x86-4.6/prebuilt/$build_os-$android_host_arch/bin/i686-linux-android-"
   cc  = prefix + "gcc"
diff --git a/build/toolchain/clang.gni b/build/toolchain/clang.gni
index 861a681..c680384 100644
--- a/build/toolchain/clang.gni
+++ b/build/toolchain/clang.gni
@@ -7,30 +7,3 @@
   # with the allocation type.
   use_clang_type_profiler = false
 }
-
-if (is_clang) {
-  # Define "make_clang_dir" which is the directory relative to the source root
-  # of the clang directory we're using. This is used for defining the header
-  # for GYP so it must match the directory format of GYP (rather than using
-  # GN-style "//..." paths).
-  if (is_linux && use_clang_type_profiler) {
-    if (cpu_arch == "x64") {
-      make_clang_dir = "third_party/llvm-allocated-type/Linux_x64"
-    } else {
-      # 32-bit Clang is unsupported. It may not build. Put your 32-bit Clang in
-      # this directory at your own risk if needed for some purpose (e.g. to
-      # compare 32-bit and 64-bit behavior like memory usage). Any failure by
-      # this compiler should not close the tree.
-      make_clang_dir = "third_party/llvm-allocated-type/Linux_ia32"
-    }
-  } else {
-    make_clang_dir = "third_party/llvm-build/Release+Asserts"
-  }
-
-  # This includes the array values but not the 'make_global_settings' name.
-  make_clang_global_settings =
-    "['CC', '$make_clang_dir/bin/clang']," +
-    "['CXX', '$make_clang_dir/bin/clang++']," +
-    "['CC.host', '\$(CC)']," +
-    "['CXX.host', '\$(CXX)'],"
-}
diff --git a/build/toolchain/linux/BUILD.gn b/build/toolchain/linux/BUILD.gn
index 62e7278..dd98cb4 100644
--- a/build/toolchain/linux/BUILD.gn
+++ b/build/toolchain/linux/BUILD.gn
@@ -7,46 +7,6 @@
 import("//build/toolchain/gcc_toolchain.gni")
 import("//build/toolchain/goma.gni")
 
-if (is_gyp) {
-  # Set the compilers for GYP to use. This logic is only relevant to GYP where
-  # there is "a" target compiler. In native GN builds, we have separate
-  # compilers for the toolchains below, any or all of which could be active in
-  # any given build.
-  if (is_clang) {
-    # Set the GYP header for all toolchains when running under Clang.
-    make_global_settings = make_clang_global_settings
-  } else {
-    if (cpu_arch == "mipsel") {
-      make_global_settings =
-        "['CC', '$sysroot/../bin/mipsel-linux-gnu-gcc']," +
-        "['CXX', '$sysroot/../bin/mipsel-linux-gnu-g++']," +
-        "['CC.host', '/usr/bin/gcc']," +
-        "['CXX.host', '/usr/bin/g++'],"
-    } else {
-      make_global_settings = ""
-    }
-  }
-
-  if (use_goma) {
-    # There is a TODO(yyanagisawa) in common.gypi about the make generator not
-    # supporting CC_wrapper without CC. As a result, we must add a condition
-    # when on the generator when we're not explicitly setting the variables
-    # above (which happens when gyp_header is empty at this point).
-    #
-    # GYP will interpret the file once for each generator, so we have to write
-    # this condition into the GYP file since the user could have more than one
-    # generator set.
-    gyp_header =
-      "'conditions':" +
-      "[['\"<(GENERATOR)\"==\"ninja\"', { 'make_global_settings': [" +
-      make_global_settings +
-      make_goma_global_settings +
-      "]}]],"
-  } else {
-    gyp_header = "'make_global_settings': [" + make_global_settings + "],"
-  }
-}
-
 gcc_toolchain("arm") {
   cc = "arm-linux-gnueabi-gcc"
   cxx = "arm-linux-gnueabi-g++"
diff --git a/build/toolchain/mac/BUILD.gn b/build/toolchain/mac/BUILD.gn
index 8613d1f..c9a58b4 100644
--- a/build/toolchain/mac/BUILD.gn
+++ b/build/toolchain/mac/BUILD.gn
@@ -19,30 +19,6 @@
                    root_build_dir)
   cxx = rebase_path("//third_party/llvm-build/Release+Asserts/bin/clang++",
                     root_build_dir)
-
-  # Set the GYP header for all toolchains when running under Clang.
-  if (is_gyp) {
-    make_global_settings = make_clang_global_settings
-
-    if (use_goma) {
-      # There is a TODO(yyanagisawa) in common.gypi about the make generator not
-      # supporting CC_wrapper without CC. As a result, we must add a condition
-      # when on the generator when we're not explicitly setting the variables
-      # above (which happens when gyp_header is empty at this point).
-      #
-      # GYP will interpret the file once for each generator, so we have to write
-      # this condition into the GYP file since the user could have more than one
-      # generator set.
-      gyp_header =
-        "'conditions':" +
-        "[['\"<(GENERATOR)\"==\"ninja\"', { 'make_global_settings': [" +
-        make_global_settings +
-        make_goma_global_settings +
-        "]}]],"
-    } else {
-      gyp_header = "'make_global_settings': [" + make_global_settings + "],"
-    }
-  }
 } else {
   cc = "gcc"
   cxx = "g++"
diff --git a/build/toolchain/win/BUILD.gn b/build/toolchain/win/BUILD.gn
index 5b9ae48..04b36cf 100644
--- a/build/toolchain/win/BUILD.gn
+++ b/build/toolchain/win/BUILD.gn
@@ -22,11 +22,6 @@
 stamp_command = "$python_path gyp-win-tool stamp \$out"
 copy_command = "$python_path gyp-win-tool recursive-mirror \$in \$out"
 
-if (use_goma) {
-  # Add the Goma compiler prefixes to the GYP file.
-  gyp_header = "'make_global_settings': [ $make_goma_global_settings ],"
-}
-
 # 32-bit toolchain -------------------------------------------------------------
 
 toolchain("32") {
diff --git a/build/util/LASTCHANGE b/build/util/LASTCHANGE
index 9f53d8b..9892404 100644
--- a/build/util/LASTCHANGE
+++ b/build/util/LASTCHANGE
@@ -1 +1 @@
-LASTCHANGE=263965
+LASTCHANGE=265802
diff --git a/build/util/LASTCHANGE.blink b/build/util/LASTCHANGE.blink
index 95f2267..7a0adc5 100644
--- a/build/util/LASTCHANGE.blink
+++ b/build/util/LASTCHANGE.blink
@@ -1 +1 @@
-LASTCHANGE=171541
+LASTCHANGE=172351
diff --git a/build/whitespace_file.txt b/build/whitespace_file.txt
index 1533472..d04a4a0 100644
--- a/build/whitespace_file.txt
+++ b/build/whitespace_file.txt
@@ -84,3 +84,7 @@
 WHAT GOES UP MUST HAVE A NON-ZERO VELOCITY
 
 I can feel the heat closing in, feel them out there making their moves...
+What could possibly go wrong?
+
+
+Hello from tutorial!
diff --git a/cc/base/tiling_data.cc b/cc/base/tiling_data.cc
index 7573ec3..a52c940 100644
--- a/cc/base/tiling_data.cc
+++ b/cc/base/tiling_data.cc
@@ -28,28 +28,26 @@
   RecomputeNumTiles();
 }
 
-TilingData::TilingData(
-    const gfx::Size& max_texture_size,
-    const gfx::Size& total_size,
-    bool has_border_texels)
+TilingData::TilingData(const gfx::Size& max_texture_size,
+                       const gfx::Rect& tiling_rect,
+                       bool has_border_texels)
     : max_texture_size_(max_texture_size),
-      total_size_(total_size),
+      tiling_rect_(tiling_rect),
       border_texels_(has_border_texels ? 1 : 0) {
   RecomputeNumTiles();
 }
 
-TilingData::TilingData(
-    const gfx::Size& max_texture_size,
-    const gfx::Size& total_size,
-    int border_texels)
+TilingData::TilingData(const gfx::Size& max_texture_size,
+                       const gfx::Rect& tiling_rect,
+                       int border_texels)
     : max_texture_size_(max_texture_size),
-      total_size_(total_size),
+      tiling_rect_(tiling_rect),
       border_texels_(border_texels) {
   RecomputeNumTiles();
 }
 
-void TilingData::SetTotalSize(const gfx::Size& total_size) {
-  total_size_ = total_size;
+void TilingData::SetTilingRect(const gfx::Rect& tiling_rect) {
+  tiling_rect_ = tiling_rect;
   RecomputeNumTiles();
 }
 
@@ -72,6 +70,8 @@
   if (num_tiles_x_ <= 1)
     return 0;
 
+  src_position -= tiling_rect_.x();
+
   DCHECK_GT(max_texture_size_.width() - 2 * border_texels_, 0);
   int x = (src_position - border_texels_) /
       (max_texture_size_.width() - 2 * border_texels_);
@@ -82,6 +82,8 @@
   if (num_tiles_y_ <= 1)
     return 0;
 
+  src_position -= tiling_rect_.y();
+
   DCHECK_GT(max_texture_size_.height() - 2 * border_texels_, 0);
   int y = (src_position - border_texels_) /
       (max_texture_size_.height() - 2 * border_texels_);
@@ -92,6 +94,8 @@
   if (num_tiles_x_ <= 1)
     return 0;
 
+  src_position -= tiling_rect_.x();
+
   DCHECK_GT(max_texture_size_.width() - 2 * border_texels_, 0);
   int inner_tile_size = max_texture_size_.width() - 2 * border_texels_;
   int x = (src_position - 2 * border_texels_) / inner_tile_size;
@@ -102,6 +106,8 @@
   if (num_tiles_y_ <= 1)
     return 0;
 
+  src_position -= tiling_rect_.y();
+
   DCHECK_GT(max_texture_size_.height() - 2 * border_texels_, 0);
   int inner_tile_size = max_texture_size_.height() - 2 * border_texels_;
   int y = (src_position - 2 * border_texels_) / inner_tile_size;
@@ -112,6 +118,8 @@
   if (num_tiles_x_ <= 1)
     return 0;
 
+  src_position -= tiling_rect_.x();
+
   DCHECK_GT(max_texture_size_.width() - 2 * border_texels_, 0);
   int inner_tile_size = max_texture_size_.width() - 2 * border_texels_;
   int x = src_position / inner_tile_size;
@@ -122,48 +130,65 @@
   if (num_tiles_y_ <= 1)
     return 0;
 
+  src_position -= tiling_rect_.y();
+
   DCHECK_GT(max_texture_size_.height() - 2 * border_texels_, 0);
   int inner_tile_size = max_texture_size_.height() - 2 * border_texels_;
   int y = src_position / inner_tile_size;
   return std::min(std::max(y, 0), num_tiles_y_ - 1);
 }
 
+gfx::Rect TilingData::ExpandRectToTileBoundsWithBorders(
+    const gfx::Rect rect) const {
+  if (!rect.Intersects(tiling_rect_) || has_empty_bounds())
+    return gfx::Rect();
+  int index_x = FirstBorderTileXIndexFromSrcCoord(rect.x());
+  int index_y = FirstBorderTileYIndexFromSrcCoord(rect.y());
+  int index_right = LastBorderTileXIndexFromSrcCoord(rect.right());
+  int index_bottom = LastBorderTileYIndexFromSrcCoord(rect.bottom());
+
+  gfx::Rect rect_top_left(TileBoundsWithBorder(index_x, index_y));
+  gfx::Rect rect_bottom_right(TileBoundsWithBorder(index_right, index_bottom));
+
+  gfx::Rect expanded(rect_top_left);
+  expanded.Union(rect_bottom_right);
+  return expanded;
+}
+
 gfx::Rect TilingData::TileBounds(int i, int j) const {
   AssertTile(i, j);
   int max_texture_size_x = max_texture_size_.width() - 2 * border_texels_;
   int max_texture_size_y = max_texture_size_.height() - 2 * border_texels_;
-  int total_size_x = total_size_.width();
-  int total_size_y = total_size_.height();
 
-  int lo_x = max_texture_size_x * i;
+  int lo_x = tiling_rect_.x() + max_texture_size_x * i;
   if (i != 0)
     lo_x += border_texels_;
 
-  int lo_y = max_texture_size_y * j;
+  int lo_y = tiling_rect_.y() + max_texture_size_y * j;
   if (j != 0)
     lo_y += border_texels_;
 
-  int hi_x = max_texture_size_x * (i + 1) + border_texels_;
+  int hi_x = tiling_rect_.x() + max_texture_size_x * (i + 1) + border_texels_;
   if (i + 1 == num_tiles_x_)
     hi_x += border_texels_;
 
-  int hi_y = max_texture_size_y * (j + 1) + border_texels_;
+  int hi_y = tiling_rect_.y() + max_texture_size_y * (j + 1) + border_texels_;
   if (j + 1 == num_tiles_y_)
     hi_y += border_texels_;
 
-  hi_x = std::min(hi_x, total_size_x);
-  hi_y = std::min(hi_y, total_size_y);
+  hi_x = std::min(hi_x, tiling_rect_.right());
+  hi_y = std::min(hi_y, tiling_rect_.bottom());
 
   int x = lo_x;
   int y = lo_y;
   int width = hi_x - lo_x;
   int height = hi_y - lo_y;
-  DCHECK_GE(x, 0);
-  DCHECK_GE(y, 0);
+  DCHECK_GE(x, tiling_rect_.x());
+  DCHECK_GE(y, tiling_rect_.y());
   DCHECK_GE(width, 0);
   DCHECK_GE(height, 0);
-  DCHECK_LE(x, total_size_.width());
-  DCHECK_LE(y, total_size_.height());
+  DCHECK_LE(x, tiling_rect_.right());
+  DCHECK_LE(y, tiling_rect_.bottom());
   return gfx::Rect(x, y, width, height);
 }
 
@@ -171,28 +196,26 @@
   AssertTile(i, j);
   int max_texture_size_x = max_texture_size_.width() - 2 * border_texels_;
   int max_texture_size_y = max_texture_size_.height() - 2 * border_texels_;
-  int total_size_x = total_size_.width();
-  int total_size_y = total_size_.height();
 
-  int lo_x = max_texture_size_x * i;
-  int lo_y = max_texture_size_y * j;
+  int lo_x = tiling_rect_.x() + max_texture_size_x * i;
+  int lo_y = tiling_rect_.y() + max_texture_size_y * j;
 
   int hi_x = lo_x + max_texture_size_x + 2 * border_texels_;
   int hi_y = lo_y + max_texture_size_y + 2 * border_texels_;
 
-  hi_x = std::min(hi_x, total_size_x);
-  hi_y = std::min(hi_y, total_size_y);
+  hi_x = std::min(hi_x, tiling_rect_.right());
+  hi_y = std::min(hi_y, tiling_rect_.bottom());
 
   int x = lo_x;
   int y = lo_y;
   int width = hi_x - lo_x;
   int height = hi_y - lo_y;
-  DCHECK_GE(x, 0);
-  DCHECK_GE(y, 0);
+  DCHECK_GE(x, tiling_rect_.x());
+  DCHECK_GE(y, tiling_rect_.y());
   DCHECK_GE(width, 0);
   DCHECK_GE(height, 0);
-  DCHECK_LE(x, total_size_.width());
-  DCHECK_LE(y, total_size_.height());
+  DCHECK_LE(x, tiling_rect_.right());
+  DCHECK_LE(y, tiling_rect_.bottom());
   return gfx::Rect(x, y, width, height);
 }
 
@@ -204,6 +227,8 @@
   if (x_index != 0)
     pos += border_texels_;
 
+  pos += tiling_rect_.x();
+
   return pos;
 }
 
@@ -215,6 +240,8 @@
   if (y_index != 0)
     pos += border_texels_;
 
+  pos += tiling_rect_.y();
+
   return pos;
 }
 
@@ -223,13 +250,13 @@
   DCHECK_LT(x_index, num_tiles_x_);
 
   if (!x_index && num_tiles_x_ == 1)
-    return total_size_.width();
+    return tiling_rect_.width();
   if (!x_index && num_tiles_x_ > 1)
     return max_texture_size_.width() - border_texels_;
   if (x_index < num_tiles_x_ - 1)
     return max_texture_size_.width() - 2 * border_texels_;
   if (x_index == num_tiles_x_ - 1)
-    return total_size_.width() - TilePositionX(x_index);
+    return tiling_rect_.right() - TilePositionX(x_index);
 
   NOTREACHED();
   return 0;
@@ -240,13 +267,13 @@
   DCHECK_LT(y_index, num_tiles_y_);
 
   if (!y_index && num_tiles_y_ == 1)
-    return total_size_.height();
+    return tiling_rect_.height();
   if (!y_index && num_tiles_y_ > 1)
     return max_texture_size_.height() - border_texels_;
   if (y_index < num_tiles_y_ - 1)
     return max_texture_size_.height() - 2 * border_texels_;
   if (y_index == num_tiles_y_ - 1)
-    return total_size_.height() - TilePositionY(y_index);
+    return tiling_rect_.bottom() - TilePositionY(y_index);
 
   NOTREACHED();
   return 0;
@@ -261,9 +288,9 @@
 
 void TilingData::RecomputeNumTiles() {
   num_tiles_x_ = ComputeNumTiles(
-      max_texture_size_.width(), total_size_.width(), border_texels_);
+      max_texture_size_.width(), tiling_rect_.width(), border_texels_);
   num_tiles_y_ = ComputeNumTiles(
-      max_texture_size_.height(), total_size_.height(), border_texels_);
+      max_texture_size_.height(), tiling_rect_.height(), border_texels_);
 }
 
 TilingData::BaseIterator::BaseIterator(const TilingData* tiling_data)
@@ -284,7 +311,7 @@
   }
 
   gfx::Rect rect(tiling_rect);
-  rect.Intersect(gfx::Rect(tiling_data_->total_size()));
+  rect.Intersect(tiling_data_->tiling_rect());
 
   gfx::Rect top_left_tile;
   if (include_borders) {
@@ -341,11 +368,10 @@
     return;
   }
 
-  gfx::Rect bounds(tiling_data_->total_size());
   gfx::Rect consider(consider_rect);
   gfx::Rect ignore(ignore_rect);
-  consider.Intersect(bounds);
-  ignore.Intersect(bounds);
+  consider.Intersect(tiling_data_->tiling_rect());
+  ignore.Intersect(tiling_data_->tiling_rect());
   if (consider.IsEmpty()) {
     done();
     return;
@@ -449,12 +475,11 @@
     return;
   }
 
-  gfx::Rect bounds(tiling_data_->total_size());
   gfx::Rect consider(consider_rect);
   gfx::Rect ignore(ignore_rect);
   gfx::Rect center(center_rect);
-  consider.Intersect(bounds);
-  ignore.Intersect(bounds);
+  consider.Intersect(tiling_data_->tiling_rect());
+  ignore.Intersect(tiling_data_->tiling_rect());
   if (consider.IsEmpty()) {
     done();
     return;
@@ -491,18 +516,18 @@
 
   // Determine around left, such that it is between -1 and num_tiles_x.
   int around_left = 0;
-  if (center.x() < 0 || center.IsEmpty())
+  if (center.x() < tiling_data->tiling_rect().x() || center.IsEmpty())
     around_left = -1;
-  else if (center.x() > tiling_data->total_size().width())
+  else if (center.x() > tiling_data->tiling_rect().right())
     around_left = tiling_data->num_tiles_x();
   else
     around_left = tiling_data->FirstBorderTileXIndexFromSrcCoord(center.x());
 
   // Determine around top, such that it is between -1 and num_tiles_y.
   int around_top = 0;
-  if (center.y() < 0 || center.IsEmpty())
+  if (center.y() < tiling_data->tiling_rect().y() || center.IsEmpty())
     around_top = -1;
-  else if (center.y() > tiling_data->total_size().height())
+  else if (center.y() > tiling_data->tiling_rect().bottom())
     around_top = tiling_data->num_tiles_y();
   else
     around_top = tiling_data->FirstBorderTileYIndexFromSrcCoord(center.y());
@@ -510,9 +535,9 @@
   // Determine around right, such that it is between -1 and num_tiles_x.
   int right_src_coord = center.right() - 1;
   int around_right = 0;
-  if (right_src_coord < 0 || center.IsEmpty()) {
+  if (right_src_coord < tiling_data->tiling_rect().x() || center.IsEmpty()) {
     around_right = -1;
-  } else if (right_src_coord > tiling_data->total_size().width()) {
+  } else if (right_src_coord > tiling_data->tiling_rect().right()) {
     around_right = tiling_data->num_tiles_x();
   } else {
     around_right =
@@ -522,9 +547,9 @@
   // Determine around bottom, such that it is between -1 and num_tiles_y.
   int bottom_src_coord = center.bottom() - 1;
   int around_bottom = 0;
-  if (bottom_src_coord < 0 || center.IsEmpty()) {
+  if (bottom_src_coord < tiling_data->tiling_rect().y() || center.IsEmpty()) {
     around_bottom = -1;
-  } else if (bottom_src_coord > tiling_data->total_size().height()) {
+  } else if (bottom_src_coord > tiling_data->tiling_rect().bottom()) {
     around_bottom = tiling_data->num_tiles_y();
   } else {
     around_bottom =
diff --git a/cc/base/tiling_data.h b/cc/base/tiling_data.h
index d885c9b..3059c21 100644
--- a/cc/base/tiling_data.h
+++ b/cc/base/tiling_data.h
@@ -22,17 +22,15 @@
 class CC_EXPORT TilingData {
  public:
   TilingData();
-  TilingData(
-      const gfx::Size& max_texture_size,
-      const gfx::Size& total_size,
-      bool has_border_texels);
-  TilingData(
-      const gfx::Size& max_texture_size,
-      const gfx::Size& total_size,
-      int border_texels);
+  TilingData(const gfx::Size& max_texture_size,
+             const gfx::Rect& tiling_rect,
+             bool has_border_texels);
+  TilingData(const gfx::Size& max_texture_size,
+             const gfx::Rect& tiling_rect,
+             int border_texels);
 
-  gfx::Size total_size() const { return total_size_; }
-  void SetTotalSize(const gfx::Size& total_size);
+  gfx::Rect tiling_rect() const { return tiling_rect_; }
+  void SetTilingRect(const gfx::Rect& tiling_rect);
 
   gfx::Size max_texture_size() const { return max_texture_size_; }
   void SetMaxTextureSize(const gfx::Size& max_texture_size);
@@ -54,6 +52,8 @@
   int LastBorderTileXIndexFromSrcCoord(int src_position) const;
   int LastBorderTileYIndexFromSrcCoord(int src_position) const;
 
+  gfx::Rect ExpandRectToTileBoundsWithBorders(const gfx::Rect rect) const;
+
   gfx::Rect TileBounds(int i, int j) const;
   gfx::Rect TileBoundsWithBorder(int i, int j) const;
   int TilePositionX(int x_index) const;
@@ -193,7 +193,7 @@
   void RecomputeNumTiles();
 
   gfx::Size max_texture_size_;
-  gfx::Size total_size_;
+  gfx::Rect tiling_rect_;
   int border_texels_;
 
   // These are computed values.
diff --git a/cc/base/tiling_data_unittest.cc b/cc/base/tiling_data_unittest.cc
index 8fb6442..fd0809d 100644
--- a/cc/base/tiling_data_unittest.cc
+++ b/cc/base/tiling_data_unittest.cc
@@ -13,11 +13,10 @@
 namespace cc {
 namespace {
 
-int NumTiles(
-    const gfx::Size& max_texture_size,
-    const gfx::Size& total_size,
-    bool has_border_texels) {
-  TilingData tiling(max_texture_size, total_size, has_border_texels);
+int NumTiles(const gfx::Size& max_texture_size,
+             const gfx::Rect& tiling_rect,
+             bool has_border_texels) {
+  TilingData tiling(max_texture_size, tiling_rect, has_border_texels);
   int num_tiles = tiling.num_tiles_x() * tiling.num_tiles_y();
 
   // Assert no overflow.
@@ -28,700 +27,2048 @@
   return num_tiles;
 }
 
-int XIndex(
-    const gfx::Size& max_texture_size,
-    const gfx::Size& total_size,
-    bool has_border_texels,
-    int x_coord) {
-  TilingData tiling(max_texture_size, total_size, has_border_texels);
+int XIndex(const gfx::Size& max_texture_size,
+           const gfx::Rect& tiling_rect,
+           bool has_border_texels,
+           int x_coord) {
+  TilingData tiling(max_texture_size, tiling_rect, has_border_texels);
   return tiling.TileXIndexFromSrcCoord(x_coord);
 }
 
-int YIndex(
-    const gfx::Size& max_texture_size,
-    const gfx::Size& total_size,
-    bool has_border_texels,
-    int y_coord) {
-  TilingData tiling(max_texture_size, total_size, has_border_texels);
+int YIndex(const gfx::Size& max_texture_size,
+           const gfx::Rect& tiling_rect,
+           bool has_border_texels,
+           int y_coord) {
+  TilingData tiling(max_texture_size, tiling_rect, has_border_texels);
   return tiling.TileYIndexFromSrcCoord(y_coord);
 }
 
-int MinBorderXIndex(
-    const gfx::Size& max_texture_size,
-    const gfx::Size& total_size,
-    bool has_border_texels,
-    int x_coord) {
-  TilingData tiling(max_texture_size, total_size, has_border_texels);
+int MinBorderXIndex(const gfx::Size& max_texture_size,
+                    const gfx::Rect& tiling_rect,
+                    bool has_border_texels,
+                    int x_coord) {
+  TilingData tiling(max_texture_size, tiling_rect, has_border_texels);
   return tiling.FirstBorderTileXIndexFromSrcCoord(x_coord);
 }
 
-int MinBorderYIndex(
-    const gfx::Size& max_texture_size,
-    const gfx::Size& total_size,
-    bool has_border_texels,
-    int y_coord) {
-  TilingData tiling(max_texture_size, total_size, has_border_texels);
+int MinBorderYIndex(const gfx::Size& max_texture_size,
+                    const gfx::Rect& tiling_rect,
+                    bool has_border_texels,
+                    int y_coord) {
+  TilingData tiling(max_texture_size, tiling_rect, has_border_texels);
   return tiling.FirstBorderTileYIndexFromSrcCoord(y_coord);
 }
 
-int MaxBorderXIndex(
-    const gfx::Size& max_texture_size,
-    const gfx::Size& total_size,
-    bool has_border_texels,
-    int x_coord) {
-  TilingData tiling(max_texture_size, total_size, has_border_texels);
+int MaxBorderXIndex(const gfx::Size& max_texture_size,
+                    const gfx::Rect& tiling_rect,
+                    bool has_border_texels,
+                    int x_coord) {
+  TilingData tiling(max_texture_size, tiling_rect, has_border_texels);
   return tiling.LastBorderTileXIndexFromSrcCoord(x_coord);
 }
 
-int MaxBorderYIndex(
-    const gfx::Size& max_texture_size,
-    const gfx::Size& total_size,
-    bool has_border_texels,
-    int y_coord) {
-  TilingData tiling(max_texture_size, total_size, has_border_texels);
+int MaxBorderYIndex(const gfx::Size& max_texture_size,
+                    const gfx::Rect& tiling_rect,
+                    bool has_border_texels,
+                    int y_coord) {
+  TilingData tiling(max_texture_size, tiling_rect, has_border_texels);
   return tiling.LastBorderTileYIndexFromSrcCoord(y_coord);
 }
 
-int PosX(
-    const gfx::Size& max_texture_size,
-    const gfx::Size& total_size,
-    bool has_border_texels,
-    int x_index) {
-  TilingData tiling(max_texture_size, total_size, has_border_texels);
+int PosX(const gfx::Size& max_texture_size,
+         const gfx::Rect& tiling_rect,
+         bool has_border_texels,
+         int x_index) {
+  TilingData tiling(max_texture_size, tiling_rect, has_border_texels);
   return tiling.TilePositionX(x_index);
 }
 
-int PosY(
-    const gfx::Size& max_texture_size,
-    const gfx::Size& total_size,
-    bool has_border_texels,
-    int y_index) {
-  TilingData tiling(max_texture_size, total_size, has_border_texels);
+int PosY(const gfx::Size& max_texture_size,
+         const gfx::Rect& tiling_rect,
+         bool has_border_texels,
+         int y_index) {
+  TilingData tiling(max_texture_size, tiling_rect, has_border_texels);
   return tiling.TilePositionY(y_index);
 }
 
-int SizeX(
-    const gfx::Size& max_texture_size,
-    const gfx::Size& total_size,
-    bool has_border_texels,
-    int x_index) {
-  TilingData tiling(max_texture_size, total_size, has_border_texels);
+int SizeX(const gfx::Size& max_texture_size,
+          const gfx::Rect& tiling_rect,
+          bool has_border_texels,
+          int x_index) {
+  TilingData tiling(max_texture_size, tiling_rect, has_border_texels);
   return tiling.TileSizeX(x_index);
 }
 
-int SizeY(
-    const gfx::Size& max_texture_size,
-    const gfx::Size& total_size,
-    bool has_border_texels,
-    int y_index) {
-  TilingData tiling(max_texture_size, total_size, has_border_texels);
+int SizeY(const gfx::Size& max_texture_size,
+          const gfx::Rect& tiling_rect,
+          bool has_border_texels,
+          int y_index) {
+  TilingData tiling(max_texture_size, tiling_rect, has_border_texels);
   return tiling.TileSizeY(y_index);
 }
 
-TEST(TilingDataTest, NumTiles_NoTiling) {
-  EXPECT_EQ(1, NumTiles(gfx::Size(16, 16), gfx::Size(16, 16), false));
-  EXPECT_EQ(1, NumTiles(gfx::Size(16, 16), gfx::Size(15, 15), true));
-  EXPECT_EQ(1, NumTiles(gfx::Size(16, 16), gfx::Size(16, 16), true));
-  EXPECT_EQ(1, NumTiles(gfx::Size(16, 16), gfx::Size(1, 16), false));
-  EXPECT_EQ(1, NumTiles(gfx::Size(15, 15), gfx::Size(15, 15), true));
-  EXPECT_EQ(1, NumTiles(gfx::Size(32, 16), gfx::Size(32, 16), false));
-  EXPECT_EQ(1, NumTiles(gfx::Size(32, 16), gfx::Size(32, 16), true));
+class TilingDataTest : public ::testing::TestWithParam<gfx::Point> {};
+
+TEST_P(TilingDataTest, NumTiles_NoTiling) {
+  gfx::Point origin = GetParam();
+
+  EXPECT_EQ(
+      1,
+      NumTiles(gfx::Size(16, 16), gfx::Rect(origin, gfx::Size(16, 16)), false));
+  EXPECT_EQ(
+      1,
+      NumTiles(gfx::Size(16, 16), gfx::Rect(origin, gfx::Size(15, 15)), true));
+  EXPECT_EQ(
+      1,
+      NumTiles(gfx::Size(16, 16), gfx::Rect(origin, gfx::Size(16, 16)), true));
+  EXPECT_EQ(
+      1,
+      NumTiles(gfx::Size(16, 16), gfx::Rect(origin, gfx::Size(1, 16)), false));
+  EXPECT_EQ(
+      1,
+      NumTiles(gfx::Size(15, 15), gfx::Rect(origin, gfx::Size(15, 15)), true));
+  EXPECT_EQ(
+      1,
+      NumTiles(gfx::Size(32, 16), gfx::Rect(origin, gfx::Size(32, 16)), false));
+  EXPECT_EQ(
+      1,
+      NumTiles(gfx::Size(32, 16), gfx::Rect(origin, gfx::Size(32, 16)), true));
 }
 
-TEST(TilingDataTest, NumTiles_TilingNoBorders) {
-  EXPECT_EQ(0, NumTiles(gfx::Size(0, 0), gfx::Size(0, 0), false));
-  EXPECT_EQ(0, NumTiles(gfx::Size(0, 0), gfx::Size(4, 0), false));
-  EXPECT_EQ(0, NumTiles(gfx::Size(0, 0), gfx::Size(0, 4), false));
-  EXPECT_EQ(0, NumTiles(gfx::Size(4, 4), gfx::Size(4, 0), false));
-  EXPECT_EQ(0, NumTiles(gfx::Size(4, 4), gfx::Size(0, 4), false));
-  EXPECT_EQ(0, NumTiles(gfx::Size(0, 0), gfx::Size(1, 1), false));
+TEST_P(TilingDataTest, NumTiles_TilingNoBorders) {
+  gfx::Point origin = GetParam();
 
-  EXPECT_EQ(1, NumTiles(gfx::Size(1, 1), gfx::Size(1, 1), false));
-  EXPECT_EQ(2, NumTiles(gfx::Size(1, 1), gfx::Size(1, 2), false));
-  EXPECT_EQ(2, NumTiles(gfx::Size(1, 1), gfx::Size(2, 1), false));
-  EXPECT_EQ(1, NumTiles(gfx::Size(2, 2), gfx::Size(1, 1), false));
-  EXPECT_EQ(1, NumTiles(gfx::Size(2, 2), gfx::Size(1, 2), false));
-  EXPECT_EQ(1, NumTiles(gfx::Size(2, 2), gfx::Size(2, 1), false));
-  EXPECT_EQ(1, NumTiles(gfx::Size(2, 2), gfx::Size(2, 2), false));
-  EXPECT_EQ(1, NumTiles(gfx::Size(3, 3), gfx::Size(3, 3), false));
+  EXPECT_EQ(
+      0, NumTiles(gfx::Size(0, 0), gfx::Rect(origin, gfx::Size(0, 0)), false));
+  EXPECT_EQ(
+      0, NumTiles(gfx::Size(0, 0), gfx::Rect(origin, gfx::Size(4, 0)), false));
+  EXPECT_EQ(
+      0, NumTiles(gfx::Size(0, 0), gfx::Rect(origin, gfx::Size(0, 4)), false));
+  EXPECT_EQ(
+      0, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(4, 0)), false));
+  EXPECT_EQ(
+      0, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(0, 4)), false));
+  EXPECT_EQ(
+      0, NumTiles(gfx::Size(0, 0), gfx::Rect(origin, gfx::Size(1, 1)), false));
 
-  EXPECT_EQ(1, NumTiles(gfx::Size(4, 4), gfx::Size(1, 4), false));
-  EXPECT_EQ(1, NumTiles(gfx::Size(4, 4), gfx::Size(2, 4), false));
-  EXPECT_EQ(1, NumTiles(gfx::Size(4, 4), gfx::Size(3, 4), false));
-  EXPECT_EQ(1, NumTiles(gfx::Size(4, 4), gfx::Size(4, 4), false));
-  EXPECT_EQ(2, NumTiles(gfx::Size(4, 4), gfx::Size(5, 4), false));
-  EXPECT_EQ(2, NumTiles(gfx::Size(4, 4), gfx::Size(6, 4), false));
-  EXPECT_EQ(2, NumTiles(gfx::Size(4, 4), gfx::Size(7, 4), false));
-  EXPECT_EQ(2, NumTiles(gfx::Size(4, 4), gfx::Size(8, 4), false));
-  EXPECT_EQ(3, NumTiles(gfx::Size(4, 4), gfx::Size(9, 4), false));
-  EXPECT_EQ(3, NumTiles(gfx::Size(4, 4), gfx::Size(10, 4), false));
-  EXPECT_EQ(3, NumTiles(gfx::Size(4, 4), gfx::Size(11, 4), false));
+  EXPECT_EQ(
+      1, NumTiles(gfx::Size(1, 1), gfx::Rect(origin, gfx::Size(1, 1)), false));
+  EXPECT_EQ(
+      2, NumTiles(gfx::Size(1, 1), gfx::Rect(origin, gfx::Size(1, 2)), false));
+  EXPECT_EQ(
+      2, NumTiles(gfx::Size(1, 1), gfx::Rect(origin, gfx::Size(2, 1)), false));
+  EXPECT_EQ(
+      1, NumTiles(gfx::Size(2, 2), gfx::Rect(origin, gfx::Size(1, 1)), false));
+  EXPECT_EQ(
+      1, NumTiles(gfx::Size(2, 2), gfx::Rect(origin, gfx::Size(1, 2)), false));
+  EXPECT_EQ(
+      1, NumTiles(gfx::Size(2, 2), gfx::Rect(origin, gfx::Size(2, 1)), false));
+  EXPECT_EQ(
+      1, NumTiles(gfx::Size(2, 2), gfx::Rect(origin, gfx::Size(2, 2)), false));
+  EXPECT_EQ(
+      1, NumTiles(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(3, 3)), false));
 
-  EXPECT_EQ(1, NumTiles(gfx::Size(5, 5), gfx::Size(1, 5), false));
-  EXPECT_EQ(1, NumTiles(gfx::Size(5, 5), gfx::Size(2, 5), false));
-  EXPECT_EQ(1, NumTiles(gfx::Size(5, 5), gfx::Size(3, 5), false));
-  EXPECT_EQ(1, NumTiles(gfx::Size(5, 5), gfx::Size(4, 5), false));
-  EXPECT_EQ(1, NumTiles(gfx::Size(5, 5), gfx::Size(5, 5), false));
-  EXPECT_EQ(2, NumTiles(gfx::Size(5, 5), gfx::Size(6, 5), false));
-  EXPECT_EQ(2, NumTiles(gfx::Size(5, 5), gfx::Size(7, 5), false));
-  EXPECT_EQ(2, NumTiles(gfx::Size(5, 5), gfx::Size(8, 5), false));
-  EXPECT_EQ(2, NumTiles(gfx::Size(5, 5), gfx::Size(9, 5), false));
-  EXPECT_EQ(2, NumTiles(gfx::Size(5, 5), gfx::Size(10, 5), false));
-  EXPECT_EQ(3, NumTiles(gfx::Size(5, 5), gfx::Size(11, 5), false));
+  EXPECT_EQ(
+      1, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(1, 4)), false));
+  EXPECT_EQ(
+      1, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(2, 4)), false));
+  EXPECT_EQ(
+      1, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(3, 4)), false));
+  EXPECT_EQ(
+      1, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(4, 4)), false));
+  EXPECT_EQ(
+      2, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(5, 4)), false));
+  EXPECT_EQ(
+      2, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(6, 4)), false));
+  EXPECT_EQ(
+      2, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(7, 4)), false));
+  EXPECT_EQ(
+      2, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(8, 4)), false));
+  EXPECT_EQ(
+      3, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(9, 4)), false));
+  EXPECT_EQ(
+      3, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(10, 4)), false));
+  EXPECT_EQ(
+      3, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(11, 4)), false));
 
-  EXPECT_EQ(1, NumTiles(gfx::Size(16, 16), gfx::Size(16, 16), false));
-  EXPECT_EQ(1, NumTiles(gfx::Size(17, 17), gfx::Size(16, 16), false));
-  EXPECT_EQ(4, NumTiles(gfx::Size(15, 15), gfx::Size(16, 16), false));
-  EXPECT_EQ(4, NumTiles(gfx::Size(8, 8), gfx::Size(16, 16), false));
-  EXPECT_EQ(6, NumTiles(gfx::Size(8, 8), gfx::Size(17, 16), false));
+  EXPECT_EQ(
+      1, NumTiles(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(1, 5)), false));
+  EXPECT_EQ(
+      1, NumTiles(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(2, 5)), false));
+  EXPECT_EQ(
+      1, NumTiles(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(3, 5)), false));
+  EXPECT_EQ(
+      1, NumTiles(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(4, 5)), false));
+  EXPECT_EQ(
+      1, NumTiles(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(5, 5)), false));
+  EXPECT_EQ(
+      2, NumTiles(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(6, 5)), false));
+  EXPECT_EQ(
+      2, NumTiles(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(7, 5)), false));
+  EXPECT_EQ(
+      2, NumTiles(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(8, 5)), false));
+  EXPECT_EQ(
+      2, NumTiles(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(9, 5)), false));
+  EXPECT_EQ(
+      2, NumTiles(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(10, 5)), false));
+  EXPECT_EQ(
+      3, NumTiles(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(11, 5)), false));
 
-  EXPECT_EQ(8, NumTiles(gfx::Size(5, 8), gfx::Size(17, 16), false));
+  EXPECT_EQ(
+      1,
+      NumTiles(gfx::Size(16, 16), gfx::Rect(origin, gfx::Size(16, 16)), false));
+  EXPECT_EQ(
+      1,
+      NumTiles(gfx::Size(17, 17), gfx::Rect(origin, gfx::Size(16, 16)), false));
+  EXPECT_EQ(
+      4,
+      NumTiles(gfx::Size(15, 15), gfx::Rect(origin, gfx::Size(16, 16)), false));
+  EXPECT_EQ(
+      4,
+      NumTiles(gfx::Size(8, 8), gfx::Rect(origin, gfx::Size(16, 16)), false));
+  EXPECT_EQ(
+      6,
+      NumTiles(gfx::Size(8, 8), gfx::Rect(origin, gfx::Size(17, 16)), false));
+
+  EXPECT_EQ(
+      8,
+      NumTiles(gfx::Size(5, 8), gfx::Rect(origin, gfx::Size(17, 16)), false));
 }
 
-TEST(TilingDataTest, NumTiles_TilingWithBorders) {
-  EXPECT_EQ(0, NumTiles(gfx::Size(0, 0), gfx::Size(0, 0), true));
-  EXPECT_EQ(0, NumTiles(gfx::Size(0, 0), gfx::Size(4, 0), true));
-  EXPECT_EQ(0, NumTiles(gfx::Size(0, 0), gfx::Size(0, 4), true));
-  EXPECT_EQ(0, NumTiles(gfx::Size(4, 4), gfx::Size(4, 0), true));
-  EXPECT_EQ(0, NumTiles(gfx::Size(4, 4), gfx::Size(0, 4), true));
-  EXPECT_EQ(0, NumTiles(gfx::Size(0, 0), gfx::Size(1, 1), true));
+TEST_P(TilingDataTest, NumTiles_TilingWithBorders) {
+  gfx::Point origin = GetParam();
 
-  EXPECT_EQ(1, NumTiles(gfx::Size(1, 1), gfx::Size(1, 1), true));
-  EXPECT_EQ(0, NumTiles(gfx::Size(1, 1), gfx::Size(1, 2), true));
-  EXPECT_EQ(0, NumTiles(gfx::Size(1, 1), gfx::Size(2, 1), true));
-  EXPECT_EQ(1, NumTiles(gfx::Size(2, 2), gfx::Size(1, 1), true));
-  EXPECT_EQ(1, NumTiles(gfx::Size(2, 2), gfx::Size(1, 2), true));
-  EXPECT_EQ(1, NumTiles(gfx::Size(2, 2), gfx::Size(2, 1), true));
-  EXPECT_EQ(1, NumTiles(gfx::Size(2, 2), gfx::Size(2, 2), true));
+  EXPECT_EQ(
+      0, NumTiles(gfx::Size(0, 0), gfx::Rect(origin, gfx::Size(0, 0)), true));
+  EXPECT_EQ(
+      0, NumTiles(gfx::Size(0, 0), gfx::Rect(origin, gfx::Size(4, 0)), true));
+  EXPECT_EQ(
+      0, NumTiles(gfx::Size(0, 0), gfx::Rect(origin, gfx::Size(0, 4)), true));
+  EXPECT_EQ(
+      0, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(4, 0)), true));
+  EXPECT_EQ(
+      0, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(0, 4)), true));
+  EXPECT_EQ(
+      0, NumTiles(gfx::Size(0, 0), gfx::Rect(origin, gfx::Size(1, 1)), true));
 
-  EXPECT_EQ(1, NumTiles(gfx::Size(3, 3), gfx::Size(1, 3), true));
-  EXPECT_EQ(1, NumTiles(gfx::Size(3, 3), gfx::Size(2, 3), true));
-  EXPECT_EQ(1, NumTiles(gfx::Size(3, 3), gfx::Size(3, 3), true));
-  EXPECT_EQ(2, NumTiles(gfx::Size(3, 3), gfx::Size(4, 3), true));
-  EXPECT_EQ(3, NumTiles(gfx::Size(3, 3), gfx::Size(5, 3), true));
-  EXPECT_EQ(4, NumTiles(gfx::Size(3, 3), gfx::Size(6, 3), true));
-  EXPECT_EQ(5, NumTiles(gfx::Size(3, 3), gfx::Size(7, 3), true));
+  EXPECT_EQ(
+      1, NumTiles(gfx::Size(1, 1), gfx::Rect(origin, gfx::Size(1, 1)), true));
+  EXPECT_EQ(
+      0, NumTiles(gfx::Size(1, 1), gfx::Rect(origin, gfx::Size(1, 2)), true));
+  EXPECT_EQ(
+      0, NumTiles(gfx::Size(1, 1), gfx::Rect(origin, gfx::Size(2, 1)), true));
+  EXPECT_EQ(
+      1, NumTiles(gfx::Size(2, 2), gfx::Rect(origin, gfx::Size(1, 1)), true));
+  EXPECT_EQ(
+      1, NumTiles(gfx::Size(2, 2), gfx::Rect(origin, gfx::Size(1, 2)), true));
+  EXPECT_EQ(
+      1, NumTiles(gfx::Size(2, 2), gfx::Rect(origin, gfx::Size(2, 1)), true));
+  EXPECT_EQ(
+      1, NumTiles(gfx::Size(2, 2), gfx::Rect(origin, gfx::Size(2, 2)), true));
 
-  EXPECT_EQ(1, NumTiles(gfx::Size(4, 4), gfx::Size(1, 4), true));
-  EXPECT_EQ(1, NumTiles(gfx::Size(4, 4), gfx::Size(2, 4), true));
-  EXPECT_EQ(1, NumTiles(gfx::Size(4, 4), gfx::Size(3, 4), true));
-  EXPECT_EQ(1, NumTiles(gfx::Size(4, 4), gfx::Size(4, 4), true));
-  EXPECT_EQ(2, NumTiles(gfx::Size(4, 4), gfx::Size(5, 4), true));
-  EXPECT_EQ(2, NumTiles(gfx::Size(4, 4), gfx::Size(6, 4), true));
-  EXPECT_EQ(3, NumTiles(gfx::Size(4, 4), gfx::Size(7, 4), true));
-  EXPECT_EQ(3, NumTiles(gfx::Size(4, 4), gfx::Size(8, 4), true));
-  EXPECT_EQ(4, NumTiles(gfx::Size(4, 4), gfx::Size(9, 4), true));
-  EXPECT_EQ(4, NumTiles(gfx::Size(4, 4), gfx::Size(10, 4), true));
-  EXPECT_EQ(5, NumTiles(gfx::Size(4, 4), gfx::Size(11, 4), true));
+  EXPECT_EQ(
+      1, NumTiles(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 3)), true));
+  EXPECT_EQ(
+      1, NumTiles(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(2, 3)), true));
+  EXPECT_EQ(
+      1, NumTiles(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(3, 3)), true));
+  EXPECT_EQ(
+      2, NumTiles(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(4, 3)), true));
+  EXPECT_EQ(
+      3, NumTiles(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(5, 3)), true));
+  EXPECT_EQ(
+      4, NumTiles(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(6, 3)), true));
+  EXPECT_EQ(
+      5, NumTiles(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(7, 3)), true));
 
-  EXPECT_EQ(1, NumTiles(gfx::Size(5, 5), gfx::Size(1, 5), true));
-  EXPECT_EQ(1, NumTiles(gfx::Size(5, 5), gfx::Size(2, 5), true));
-  EXPECT_EQ(1, NumTiles(gfx::Size(5, 5), gfx::Size(3, 5), true));
-  EXPECT_EQ(1, NumTiles(gfx::Size(5, 5), gfx::Size(4, 5), true));
-  EXPECT_EQ(1, NumTiles(gfx::Size(5, 5), gfx::Size(5, 5), true));
-  EXPECT_EQ(2, NumTiles(gfx::Size(5, 5), gfx::Size(6, 5), true));
-  EXPECT_EQ(2, NumTiles(gfx::Size(5, 5), gfx::Size(7, 5), true));
-  EXPECT_EQ(2, NumTiles(gfx::Size(5, 5), gfx::Size(8, 5), true));
-  EXPECT_EQ(3, NumTiles(gfx::Size(5, 5), gfx::Size(9, 5), true));
-  EXPECT_EQ(3, NumTiles(gfx::Size(5, 5), gfx::Size(10, 5), true));
-  EXPECT_EQ(3, NumTiles(gfx::Size(5, 5), gfx::Size(11, 5), true));
+  EXPECT_EQ(
+      1, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(1, 4)), true));
+  EXPECT_EQ(
+      1, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(2, 4)), true));
+  EXPECT_EQ(
+      1, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(3, 4)), true));
+  EXPECT_EQ(
+      1, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(4, 4)), true));
+  EXPECT_EQ(
+      2, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(5, 4)), true));
+  EXPECT_EQ(
+      2, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(6, 4)), true));
+  EXPECT_EQ(
+      3, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(7, 4)), true));
+  EXPECT_EQ(
+      3, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(8, 4)), true));
+  EXPECT_EQ(
+      4, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(9, 4)), true));
+  EXPECT_EQ(
+      4, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(10, 4)), true));
+  EXPECT_EQ(
+      5, NumTiles(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(11, 4)), true));
 
-  EXPECT_EQ(30, NumTiles(gfx::Size(8, 5), gfx::Size(16, 32), true));
+  EXPECT_EQ(
+      1, NumTiles(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(1, 5)), true));
+  EXPECT_EQ(
+      1, NumTiles(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(2, 5)), true));
+  EXPECT_EQ(
+      1, NumTiles(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(3, 5)), true));
+  EXPECT_EQ(
+      1, NumTiles(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(4, 5)), true));
+  EXPECT_EQ(
+      1, NumTiles(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(5, 5)), true));
+  EXPECT_EQ(
+      2, NumTiles(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(6, 5)), true));
+  EXPECT_EQ(
+      2, NumTiles(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(7, 5)), true));
+  EXPECT_EQ(
+      2, NumTiles(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(8, 5)), true));
+  EXPECT_EQ(
+      3, NumTiles(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(9, 5)), true));
+  EXPECT_EQ(
+      3, NumTiles(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(10, 5)), true));
+  EXPECT_EQ(
+      3, NumTiles(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(11, 5)), true));
+
+  EXPECT_EQ(
+      30,
+      NumTiles(gfx::Size(8, 5), gfx::Rect(origin, gfx::Size(16, 32)), true));
 }
 
-TEST(TilingDataTest, TileXIndexFromSrcCoord) {
-  EXPECT_EQ(0, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 0));
-  EXPECT_EQ(0, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 1));
-  EXPECT_EQ(0, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 2));
-  EXPECT_EQ(1, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 3));
-  EXPECT_EQ(1, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 4));
-  EXPECT_EQ(1, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 5));
-  EXPECT_EQ(2, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 6));
-  EXPECT_EQ(2, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 7));
-  EXPECT_EQ(2, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 8));
-  EXPECT_EQ(3, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 9));
-  EXPECT_EQ(3, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 10));
-  EXPECT_EQ(3, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 11));
+TEST_P(TilingDataTest, TileXIndexFromSrcCoord) {
+  gfx::Point origin = GetParam();
 
-  EXPECT_EQ(0, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 0));
-  EXPECT_EQ(0, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 1));
-  EXPECT_EQ(1, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 2));
-  EXPECT_EQ(2, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 3));
-  EXPECT_EQ(3, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 4));
-  EXPECT_EQ(4, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 5));
-  EXPECT_EQ(5, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 6));
-  EXPECT_EQ(6, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 7));
-  EXPECT_EQ(7, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 8));
-  EXPECT_EQ(7, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 9));
-  EXPECT_EQ(7, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 10));
-  EXPECT_EQ(7, XIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 11));
+  EXPECT_EQ(0,
+            XIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   false,
+                   origin.x() + 0));
+  EXPECT_EQ(0,
+            XIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   false,
+                   origin.x() + 1));
+  EXPECT_EQ(0,
+            XIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   false,
+                   origin.x() + 2));
+  EXPECT_EQ(1,
+            XIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   false,
+                   origin.x() + 3));
+  EXPECT_EQ(1,
+            XIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   false,
+                   origin.x() + 4));
+  EXPECT_EQ(1,
+            XIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   false,
+                   origin.x() + 5));
+  EXPECT_EQ(2,
+            XIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   false,
+                   origin.x() + 6));
+  EXPECT_EQ(2,
+            XIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   false,
+                   origin.x() + 7));
+  EXPECT_EQ(2,
+            XIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   false,
+                   origin.x() + 8));
+  EXPECT_EQ(3,
+            XIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   false,
+                   origin.x() + 9));
+  EXPECT_EQ(3,
+            XIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   false,
+                   origin.x() + 10));
+  EXPECT_EQ(3,
+            XIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   false,
+                   origin.x() + 11));
 
-  EXPECT_EQ(0, XIndex(gfx::Size(1, 1), gfx::Size(1, 1), false, 0));
-  EXPECT_EQ(0, XIndex(gfx::Size(2, 2), gfx::Size(2, 2), false, 0));
-  EXPECT_EQ(0, XIndex(gfx::Size(2, 2), gfx::Size(2, 2), false, 1));
-  EXPECT_EQ(0, XIndex(gfx::Size(3, 3), gfx::Size(3, 3), false, 0));
-  EXPECT_EQ(0, XIndex(gfx::Size(3, 3), gfx::Size(3, 3), false, 1));
-  EXPECT_EQ(0, XIndex(gfx::Size(3, 3), gfx::Size(3, 3), false, 2));
+  EXPECT_EQ(0,
+            XIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   true,
+                   origin.x()));
+  EXPECT_EQ(0,
+            XIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   true,
+                   origin.x() + 1));
+  EXPECT_EQ(1,
+            XIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   true,
+                   origin.x() + 2));
+  EXPECT_EQ(2,
+            XIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   true,
+                   origin.x() + 3));
+  EXPECT_EQ(3,
+            XIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   true,
+                   origin.x() + 4));
+  EXPECT_EQ(4,
+            XIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   true,
+                   origin.x() + 5));
+  EXPECT_EQ(5,
+            XIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   true,
+                   origin.x() + 6));
+  EXPECT_EQ(6,
+            XIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   true,
+                   origin.x() + 7));
+  EXPECT_EQ(7,
+            XIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   true,
+                   origin.x() + 8));
+  EXPECT_EQ(7,
+            XIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   true,
+                   origin.x() + 9));
+  EXPECT_EQ(7,
+            XIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   true,
+                   origin.x() + 10));
+  EXPECT_EQ(7,
+            XIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   true,
+                   origin.x() + 11));
 
-  EXPECT_EQ(0, XIndex(gfx::Size(3, 3), gfx::Size(4, 3), false, 0));
-  EXPECT_EQ(0, XIndex(gfx::Size(3, 3), gfx::Size(4, 3), false, 1));
-  EXPECT_EQ(0, XIndex(gfx::Size(3, 3), gfx::Size(4, 3), false, 2));
-  EXPECT_EQ(1, XIndex(gfx::Size(3, 3), gfx::Size(4, 3), false, 3));
+  EXPECT_EQ(0,
+            XIndex(gfx::Size(1, 1),
+                   gfx::Rect(origin, gfx::Size(1, 1)),
+                   false,
+                   origin.x() + 0));
+  EXPECT_EQ(0,
+            XIndex(gfx::Size(2, 2),
+                   gfx::Rect(origin, gfx::Size(2, 2)),
+                   false,
+                   origin.x() + 0));
+  EXPECT_EQ(0,
+            XIndex(gfx::Size(2, 2),
+                   gfx::Rect(origin, gfx::Size(2, 2)),
+                   false,
+                   origin.x() + 1));
+  EXPECT_EQ(0,
+            XIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(3, 3)),
+                   false,
+                   origin.x() + 0));
+  EXPECT_EQ(0,
+            XIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(3, 3)),
+                   false,
+                   origin.x() + 1));
+  EXPECT_EQ(0,
+            XIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(3, 3)),
+                   false,
+                   origin.x() + 2));
 
-  EXPECT_EQ(0, XIndex(gfx::Size(1, 1), gfx::Size(1, 1), true, 0));
-  EXPECT_EQ(0, XIndex(gfx::Size(2, 2), gfx::Size(2, 2), true, 0));
-  EXPECT_EQ(0, XIndex(gfx::Size(2, 2), gfx::Size(2, 2), true, 1));
-  EXPECT_EQ(0, XIndex(gfx::Size(3, 3), gfx::Size(3, 3), true, 0));
-  EXPECT_EQ(0, XIndex(gfx::Size(3, 3), gfx::Size(3, 3), true, 1));
-  EXPECT_EQ(0, XIndex(gfx::Size(3, 3), gfx::Size(3, 3), true, 2));
+  EXPECT_EQ(0,
+            XIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(4, 3)),
+                   false,
+                   origin.x() + 0));
+  EXPECT_EQ(0,
+            XIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(4, 3)),
+                   false,
+                   origin.x() + 1));
+  EXPECT_EQ(0,
+            XIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(4, 3)),
+                   false,
+                   origin.x() + 2));
+  EXPECT_EQ(1,
+            XIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(4, 3)),
+                   false,
+                   origin.x() + 3));
 
-  EXPECT_EQ(0, XIndex(gfx::Size(3, 3), gfx::Size(4, 3), true, 0));
-  EXPECT_EQ(0, XIndex(gfx::Size(3, 3), gfx::Size(4, 3), true, 1));
-  EXPECT_EQ(1, XIndex(gfx::Size(3, 3), gfx::Size(4, 3), true, 2));
-  EXPECT_EQ(1, XIndex(gfx::Size(3, 3), gfx::Size(4, 3), true, 3));
+  EXPECT_EQ(0,
+            XIndex(gfx::Size(1, 1),
+                   gfx::Rect(origin, gfx::Size(1, 1)),
+                   true,
+                   origin.x() + 0));
+  EXPECT_EQ(0,
+            XIndex(gfx::Size(2, 2),
+                   gfx::Rect(origin, gfx::Size(2, 2)),
+                   true,
+                   origin.x() + 0));
+  EXPECT_EQ(0,
+            XIndex(gfx::Size(2, 2),
+                   gfx::Rect(origin, gfx::Size(2, 2)),
+                   true,
+                   origin.x() + 1));
+  EXPECT_EQ(0,
+            XIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(3, 3)),
+                   true,
+                   origin.x() + 0));
+  EXPECT_EQ(0,
+            XIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(3, 3)),
+                   true,
+                   origin.x() + 1));
+  EXPECT_EQ(0,
+            XIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(3, 3)),
+                   true,
+                   origin.x() + 2));
+
+  EXPECT_EQ(0,
+            XIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(4, 3)),
+                   true,
+                   origin.x() + 0));
+  EXPECT_EQ(0,
+            XIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(4, 3)),
+                   true,
+                   origin.x() + 1));
+  EXPECT_EQ(1,
+            XIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(4, 3)),
+                   true,
+                   origin.x() + 2));
+  EXPECT_EQ(1,
+            XIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(4, 3)),
+                   true,
+                   origin.x() + 3));
 }
 
-TEST(TilingDataTest, FirstBorderTileXIndexFromSrcCoord) {
-  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 0));
-  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 1));
-  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 2));
-  EXPECT_EQ(1, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 3));
-  EXPECT_EQ(1, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 4));
-  EXPECT_EQ(1, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 5));
-  EXPECT_EQ(2, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 6));
-  EXPECT_EQ(2, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 7));
-  EXPECT_EQ(2, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 8));
-  EXPECT_EQ(3, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 9));
-  EXPECT_EQ(3, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 10));
-  EXPECT_EQ(3, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 11));
+TEST_P(TilingDataTest, FirstBorderTileXIndexFromSrcCoord) {
+  gfx::Point origin = GetParam();
 
-  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 0));
-  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 1));
-  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 2));
-  EXPECT_EQ(1, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 3));
-  EXPECT_EQ(2, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 4));
-  EXPECT_EQ(3, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 5));
-  EXPECT_EQ(4, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 6));
-  EXPECT_EQ(5, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 7));
-  EXPECT_EQ(6, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 8));
-  EXPECT_EQ(7, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 9));
-  EXPECT_EQ(7, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 10));
-  EXPECT_EQ(7, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 11));
+  EXPECT_EQ(0,
+            MinBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.x() + 0));
+  EXPECT_EQ(0,
+            MinBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.x() + 1));
+  EXPECT_EQ(0,
+            MinBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.x() + 2));
+  EXPECT_EQ(1,
+            MinBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.x() + 3));
+  EXPECT_EQ(1,
+            MinBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.x() + 4));
+  EXPECT_EQ(1,
+            MinBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.x() + 5));
+  EXPECT_EQ(2,
+            MinBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.x() + 6));
+  EXPECT_EQ(2,
+            MinBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.x() + 7));
+  EXPECT_EQ(2,
+            MinBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.x() + 8));
+  EXPECT_EQ(3,
+            MinBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.x() + 9));
+  EXPECT_EQ(3,
+            MinBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.x() + 10));
+  EXPECT_EQ(3,
+            MinBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.x() + 11));
 
-  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(1, 1), gfx::Size(1, 1), false, 0));
-  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(2, 2), gfx::Size(2, 2), false, 0));
-  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(2, 2), gfx::Size(2, 2), false, 1));
-  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(3, 3), false, 0));
-  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(3, 3), false, 1));
-  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(3, 3), false, 2));
+  EXPECT_EQ(0,
+            MinBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.x() + 0));
+  EXPECT_EQ(0,
+            MinBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.x() + 1));
+  EXPECT_EQ(0,
+            MinBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.x() + 2));
+  EXPECT_EQ(1,
+            MinBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.x() + 3));
+  EXPECT_EQ(2,
+            MinBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.x() + 4));
+  EXPECT_EQ(3,
+            MinBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.x() + 5));
+  EXPECT_EQ(4,
+            MinBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.x() + 6));
+  EXPECT_EQ(5,
+            MinBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.x() + 7));
+  EXPECT_EQ(6,
+            MinBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.x() + 8));
+  EXPECT_EQ(7,
+            MinBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.x() + 9));
+  EXPECT_EQ(7,
+            MinBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.x() + 10));
+  EXPECT_EQ(7,
+            MinBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.x() + 11));
 
-  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(4, 3), false, 0));
-  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(4, 3), false, 1));
-  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(4, 3), false, 2));
-  EXPECT_EQ(1, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(4, 3), false, 3));
+  EXPECT_EQ(0,
+            MinBorderXIndex(gfx::Size(1, 1),
+                            gfx::Rect(origin, gfx::Size(1, 1)),
+                            false,
+                            origin.x() + 0));
+  EXPECT_EQ(0,
+            MinBorderXIndex(gfx::Size(2, 2),
+                            gfx::Rect(origin, gfx::Size(2, 2)),
+                            false,
+                            origin.x() + 0));
+  EXPECT_EQ(0,
+            MinBorderXIndex(gfx::Size(2, 2),
+                            gfx::Rect(origin, gfx::Size(2, 2)),
+                            false,
+                            origin.x() + 1));
+  EXPECT_EQ(0,
+            MinBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(3, 3)),
+                            false,
+                            origin.x() + 0));
+  EXPECT_EQ(0,
+            MinBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(3, 3)),
+                            false,
+                            origin.x() + 1));
+  EXPECT_EQ(0,
+            MinBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(3, 3)),
+                            false,
+                            origin.x() + 2));
 
-  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(1, 1), gfx::Size(1, 1), true, 0));
-  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(2, 2), gfx::Size(2, 2), true, 0));
-  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(2, 2), gfx::Size(2, 2), true, 1));
-  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(3, 3), true, 0));
-  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(3, 3), true, 1));
-  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(3, 3), true, 2));
+  EXPECT_EQ(0,
+            MinBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(4, 3)),
+                            false,
+                            origin.x() + 0));
+  EXPECT_EQ(0,
+            MinBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(4, 3)),
+                            false,
+                            origin.x() + 1));
+  EXPECT_EQ(0,
+            MinBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(4, 3)),
+                            false,
+                            origin.x() + 2));
+  EXPECT_EQ(1,
+            MinBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(4, 3)),
+                            false,
+                            origin.x() + 3));
 
-  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(4, 3), true, 0));
-  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(4, 3), true, 1));
-  EXPECT_EQ(0, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(4, 3), true, 2));
-  EXPECT_EQ(1, MinBorderXIndex(gfx::Size(3, 3), gfx::Size(4, 3), true, 3));
+  EXPECT_EQ(0,
+            MinBorderXIndex(gfx::Size(1, 1),
+                            gfx::Rect(origin, gfx::Size(1, 1)),
+                            true,
+                            origin.x() + 0));
+  EXPECT_EQ(0,
+            MinBorderXIndex(gfx::Size(2, 2),
+                            gfx::Rect(origin, gfx::Size(2, 2)),
+                            true,
+                            origin.x() + 0));
+  EXPECT_EQ(0,
+            MinBorderXIndex(gfx::Size(2, 2),
+                            gfx::Rect(origin, gfx::Size(2, 2)),
+                            true,
+                            origin.x() + 1));
+  EXPECT_EQ(0,
+            MinBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(3, 3)),
+                            true,
+                            origin.x() + 0));
+  EXPECT_EQ(0,
+            MinBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(3, 3)),
+                            true,
+                            origin.x() + 1));
+  EXPECT_EQ(0,
+            MinBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(3, 3)),
+                            true,
+                            origin.x() + 2));
+
+  EXPECT_EQ(0,
+            MinBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(4, 3)),
+                            true,
+                            origin.x() + 0));
+  EXPECT_EQ(0,
+            MinBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(4, 3)),
+                            true,
+                            origin.x() + 1));
+  EXPECT_EQ(0,
+            MinBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(4, 3)),
+                            true,
+                            origin.x() + 2));
+  EXPECT_EQ(1,
+            MinBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(4, 3)),
+                            true,
+                            origin.x() + 3));
 }
 
-TEST(TilingDataTest, LastBorderTileXIndexFromSrcCoord) {
-  EXPECT_EQ(0, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 0));
-  EXPECT_EQ(0, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 1));
-  EXPECT_EQ(0, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 2));
-  EXPECT_EQ(1, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 3));
-  EXPECT_EQ(1, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 4));
-  EXPECT_EQ(1, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 5));
-  EXPECT_EQ(2, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 6));
-  EXPECT_EQ(2, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 7));
-  EXPECT_EQ(2, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 8));
-  EXPECT_EQ(3, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 9));
-  EXPECT_EQ(3, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 10));
-  EXPECT_EQ(3, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 11));
+TEST_P(TilingDataTest, LastBorderTileXIndexFromSrcCoord) {
+  gfx::Point origin = GetParam();
 
-  EXPECT_EQ(0, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 0));
-  EXPECT_EQ(1, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 1));
-  EXPECT_EQ(2, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 2));
-  EXPECT_EQ(3, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 3));
-  EXPECT_EQ(4, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 4));
-  EXPECT_EQ(5, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 5));
-  EXPECT_EQ(6, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 6));
-  EXPECT_EQ(7, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 7));
-  EXPECT_EQ(7, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 8));
-  EXPECT_EQ(7, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 9));
-  EXPECT_EQ(7, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 10));
-  EXPECT_EQ(7, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 11));
+  EXPECT_EQ(0,
+            MaxBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.x() + 0));
+  EXPECT_EQ(0,
+            MaxBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.x() + 1));
+  EXPECT_EQ(0,
+            MaxBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.x() + 2));
+  EXPECT_EQ(1,
+            MaxBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.x() + 3));
+  EXPECT_EQ(1,
+            MaxBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.x() + 4));
+  EXPECT_EQ(1,
+            MaxBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.x() + 5));
+  EXPECT_EQ(2,
+            MaxBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.x() + 6));
+  EXPECT_EQ(2,
+            MaxBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.x() + 7));
+  EXPECT_EQ(2,
+            MaxBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.x() + 8));
+  EXPECT_EQ(3,
+            MaxBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.x() + 9));
+  EXPECT_EQ(3,
+            MaxBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.x() + 10));
+  EXPECT_EQ(3,
+            MaxBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.x() + 11));
 
-  EXPECT_EQ(0, MaxBorderXIndex(gfx::Size(1, 1), gfx::Size(1, 1), false, 0));
-  EXPECT_EQ(0, MaxBorderXIndex(gfx::Size(2, 2), gfx::Size(2, 2), false, 0));
-  EXPECT_EQ(0, MaxBorderXIndex(gfx::Size(2, 2), gfx::Size(2, 2), false, 1));
-  EXPECT_EQ(0, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(3, 3), false, 0));
-  EXPECT_EQ(0, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(3, 3), false, 1));
-  EXPECT_EQ(0, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(3, 3), false, 2));
+  EXPECT_EQ(0,
+            MaxBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.x() + 0));
+  EXPECT_EQ(1,
+            MaxBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.x() + 1));
+  EXPECT_EQ(2,
+            MaxBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.x() + 2));
+  EXPECT_EQ(3,
+            MaxBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.x() + 3));
+  EXPECT_EQ(4,
+            MaxBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.x() + 4));
+  EXPECT_EQ(5,
+            MaxBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.x() + 5));
+  EXPECT_EQ(6,
+            MaxBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.x() + 6));
+  EXPECT_EQ(7,
+            MaxBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.x() + 7));
+  EXPECT_EQ(7,
+            MaxBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.x() + 8));
+  EXPECT_EQ(7,
+            MaxBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.x() + 9));
+  EXPECT_EQ(7,
+            MaxBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.x() + 10));
+  EXPECT_EQ(7,
+            MaxBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.x() + 11));
 
-  EXPECT_EQ(0, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(4, 3), false, 0));
-  EXPECT_EQ(0, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(4, 3), false, 1));
-  EXPECT_EQ(0, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(4, 3), false, 2));
-  EXPECT_EQ(1, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(4, 3), false, 3));
+  EXPECT_EQ(0,
+            MaxBorderXIndex(gfx::Size(1, 1),
+                            gfx::Rect(origin, gfx::Size(1, 1)),
+                            false,
+                            origin.x() + 0));
+  EXPECT_EQ(0,
+            MaxBorderXIndex(gfx::Size(2, 2),
+                            gfx::Rect(origin, gfx::Size(2, 2)),
+                            false,
+                            origin.x() + 0));
+  EXPECT_EQ(0,
+            MaxBorderXIndex(gfx::Size(2, 2),
+                            gfx::Rect(origin, gfx::Size(2, 2)),
+                            false,
+                            origin.x() + 1));
+  EXPECT_EQ(0,
+            MaxBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(3, 3)),
+                            false,
+                            origin.x() + 0));
+  EXPECT_EQ(0,
+            MaxBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(3, 3)),
+                            false,
+                            origin.x() + 1));
+  EXPECT_EQ(0,
+            MaxBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(3, 3)),
+                            false,
+                            origin.x() + 2));
 
-  EXPECT_EQ(0, MaxBorderXIndex(gfx::Size(1, 1), gfx::Size(1, 1), true, 0));
-  EXPECT_EQ(0, MaxBorderXIndex(gfx::Size(2, 2), gfx::Size(2, 2), true, 0));
-  EXPECT_EQ(0, MaxBorderXIndex(gfx::Size(2, 2), gfx::Size(2, 2), true, 1));
-  EXPECT_EQ(0, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(3, 3), true, 0));
-  EXPECT_EQ(0, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(3, 3), true, 1));
-  EXPECT_EQ(0, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(3, 3), true, 2));
+  EXPECT_EQ(0,
+            MaxBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(4, 3)),
+                            false,
+                            origin.x() + 0));
+  EXPECT_EQ(0,
+            MaxBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(4, 3)),
+                            false,
+                            origin.x() + 1));
+  EXPECT_EQ(0,
+            MaxBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(4, 3)),
+                            false,
+                            origin.x() + 2));
+  EXPECT_EQ(1,
+            MaxBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(4, 3)),
+                            false,
+                            origin.x() + 3));
 
-  EXPECT_EQ(0, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(4, 3), true, 0));
-  EXPECT_EQ(1, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(4, 3), true, 1));
-  EXPECT_EQ(1, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(4, 3), true, 2));
-  EXPECT_EQ(1, MaxBorderXIndex(gfx::Size(3, 3), gfx::Size(4, 3), true, 3));
+  EXPECT_EQ(0,
+            MaxBorderXIndex(gfx::Size(1, 1),
+                            gfx::Rect(origin, gfx::Size(1, 1)),
+                            true,
+                            origin.x() + 0));
+  EXPECT_EQ(0,
+            MaxBorderXIndex(gfx::Size(2, 2),
+                            gfx::Rect(origin, gfx::Size(2, 2)),
+                            true,
+                            origin.x() + 0));
+  EXPECT_EQ(0,
+            MaxBorderXIndex(gfx::Size(2, 2),
+                            gfx::Rect(origin, gfx::Size(2, 2)),
+                            true,
+                            origin.x() + 1));
+  EXPECT_EQ(0,
+            MaxBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(3, 3)),
+                            true,
+                            origin.x() + 0));
+  EXPECT_EQ(0,
+            MaxBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(3, 3)),
+                            true,
+                            origin.x() + 1));
+  EXPECT_EQ(0,
+            MaxBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(3, 3)),
+                            true,
+                            origin.x() + 2));
+
+  EXPECT_EQ(0,
+            MaxBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(4, 3)),
+                            true,
+                            origin.x() + 0));
+  EXPECT_EQ(1,
+            MaxBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(4, 3)),
+                            true,
+                            origin.x() + 1));
+  EXPECT_EQ(1,
+            MaxBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(4, 3)),
+                            true,
+                            origin.x() + 2));
+  EXPECT_EQ(1,
+            MaxBorderXIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(4, 3)),
+                            true,
+                            origin.x() + 3));
 }
 
-TEST(TilingDataTest, TileYIndexFromSrcCoord) {
-  EXPECT_EQ(0, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 0));
-  EXPECT_EQ(0, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 1));
-  EXPECT_EQ(0, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 2));
-  EXPECT_EQ(1, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 3));
-  EXPECT_EQ(1, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 4));
-  EXPECT_EQ(1, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 5));
-  EXPECT_EQ(2, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 6));
-  EXPECT_EQ(2, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 7));
-  EXPECT_EQ(2, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 8));
-  EXPECT_EQ(3, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 9));
-  EXPECT_EQ(3, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 10));
-  EXPECT_EQ(3, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 11));
+TEST_P(TilingDataTest, TileYIndexFromSrcCoord) {
+  gfx::Point origin = GetParam();
 
-  EXPECT_EQ(0, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 0));
-  EXPECT_EQ(0, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 1));
-  EXPECT_EQ(1, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 2));
-  EXPECT_EQ(2, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 3));
-  EXPECT_EQ(3, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 4));
-  EXPECT_EQ(4, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 5));
-  EXPECT_EQ(5, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 6));
-  EXPECT_EQ(6, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 7));
-  EXPECT_EQ(7, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 8));
-  EXPECT_EQ(7, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 9));
-  EXPECT_EQ(7, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 10));
-  EXPECT_EQ(7, YIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 11));
+  EXPECT_EQ(0,
+            YIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   false,
+                   origin.y() + 0));
+  EXPECT_EQ(0,
+            YIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   false,
+                   origin.y() + 1));
+  EXPECT_EQ(0,
+            YIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   false,
+                   origin.y() + 2));
+  EXPECT_EQ(1,
+            YIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   false,
+                   origin.y() + 3));
+  EXPECT_EQ(1,
+            YIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   false,
+                   origin.y() + 4));
+  EXPECT_EQ(1,
+            YIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   false,
+                   origin.y() + 5));
+  EXPECT_EQ(2,
+            YIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   false,
+                   origin.y() + 6));
+  EXPECT_EQ(2,
+            YIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   false,
+                   origin.y() + 7));
+  EXPECT_EQ(2,
+            YIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   false,
+                   origin.y() + 8));
+  EXPECT_EQ(3,
+            YIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   false,
+                   origin.y() + 9));
+  EXPECT_EQ(3,
+            YIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   false,
+                   origin.y() + 10));
+  EXPECT_EQ(3,
+            YIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   false,
+                   origin.y() + 11));
 
-  EXPECT_EQ(0, YIndex(gfx::Size(1, 1), gfx::Size(1, 1), false, 0));
-  EXPECT_EQ(0, YIndex(gfx::Size(2, 2), gfx::Size(2, 2), false, 0));
-  EXPECT_EQ(0, YIndex(gfx::Size(2, 2), gfx::Size(2, 2), false, 1));
-  EXPECT_EQ(0, YIndex(gfx::Size(3, 3), gfx::Size(3, 3), false, 0));
-  EXPECT_EQ(0, YIndex(gfx::Size(3, 3), gfx::Size(3, 3), false, 1));
-  EXPECT_EQ(0, YIndex(gfx::Size(3, 3), gfx::Size(3, 3), false, 2));
+  EXPECT_EQ(0,
+            YIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   true,
+                   origin.y() + 0));
+  EXPECT_EQ(0,
+            YIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   true,
+                   origin.y() + 1));
+  EXPECT_EQ(1,
+            YIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   true,
+                   origin.y() + 2));
+  EXPECT_EQ(2,
+            YIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   true,
+                   origin.y() + 3));
+  EXPECT_EQ(3,
+            YIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   true,
+                   origin.y() + 4));
+  EXPECT_EQ(4,
+            YIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   true,
+                   origin.y() + 5));
+  EXPECT_EQ(5,
+            YIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   true,
+                   origin.y() + 6));
+  EXPECT_EQ(6,
+            YIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   true,
+                   origin.y() + 7));
+  EXPECT_EQ(7,
+            YIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   true,
+                   origin.y() + 8));
+  EXPECT_EQ(7,
+            YIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   true,
+                   origin.y() + 9));
+  EXPECT_EQ(7,
+            YIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   true,
+                   origin.y() + 10));
+  EXPECT_EQ(7,
+            YIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(10, 10)),
+                   true,
+                   origin.y() + 11));
 
-  EXPECT_EQ(0, YIndex(gfx::Size(3, 3), gfx::Size(3, 4), false, 0));
-  EXPECT_EQ(0, YIndex(gfx::Size(3, 3), gfx::Size(3, 4), false, 1));
-  EXPECT_EQ(0, YIndex(gfx::Size(3, 3), gfx::Size(3, 4), false, 2));
-  EXPECT_EQ(1, YIndex(gfx::Size(3, 3), gfx::Size(3, 4), false, 3));
+  EXPECT_EQ(0,
+            YIndex(gfx::Size(1, 1),
+                   gfx::Rect(origin, gfx::Size(1, 1)),
+                   false,
+                   origin.y() + 0));
+  EXPECT_EQ(0,
+            YIndex(gfx::Size(2, 2),
+                   gfx::Rect(origin, gfx::Size(2, 2)),
+                   false,
+                   origin.y() + 0));
+  EXPECT_EQ(0,
+            YIndex(gfx::Size(2, 2),
+                   gfx::Rect(origin, gfx::Size(2, 2)),
+                   false,
+                   origin.y() + 1));
+  EXPECT_EQ(0,
+            YIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(3, 3)),
+                   false,
+                   origin.y() + 0));
+  EXPECT_EQ(0,
+            YIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(3, 3)),
+                   false,
+                   origin.y() + 1));
+  EXPECT_EQ(0,
+            YIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(3, 3)),
+                   false,
+                   origin.y() + 2));
 
-  EXPECT_EQ(0, YIndex(gfx::Size(1, 1), gfx::Size(1, 1), true, 0));
-  EXPECT_EQ(0, YIndex(gfx::Size(2, 2), gfx::Size(2, 2), true, 0));
-  EXPECT_EQ(0, YIndex(gfx::Size(2, 2), gfx::Size(2, 2), true, 1));
-  EXPECT_EQ(0, YIndex(gfx::Size(3, 3), gfx::Size(3, 3), true, 0));
-  EXPECT_EQ(0, YIndex(gfx::Size(3, 3), gfx::Size(3, 3), true, 1));
-  EXPECT_EQ(0, YIndex(gfx::Size(3, 3), gfx::Size(3, 3), true, 2));
+  EXPECT_EQ(0,
+            YIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(3, 4)),
+                   false,
+                   origin.y() + 0));
+  EXPECT_EQ(0,
+            YIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(3, 4)),
+                   false,
+                   origin.y() + 1));
+  EXPECT_EQ(0,
+            YIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(3, 4)),
+                   false,
+                   origin.y() + 2));
+  EXPECT_EQ(1,
+            YIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(3, 4)),
+                   false,
+                   origin.y() + 3));
 
-  EXPECT_EQ(0, YIndex(gfx::Size(3, 3), gfx::Size(3, 4), true, 0));
-  EXPECT_EQ(0, YIndex(gfx::Size(3, 3), gfx::Size(3, 4), true, 1));
-  EXPECT_EQ(1, YIndex(gfx::Size(3, 3), gfx::Size(3, 4), true, 2));
-  EXPECT_EQ(1, YIndex(gfx::Size(3, 3), gfx::Size(3, 4), true, 3));
+  EXPECT_EQ(0,
+            YIndex(gfx::Size(1, 1),
+                   gfx::Rect(origin, gfx::Size(1, 1)),
+                   true,
+                   origin.y() + 0));
+  EXPECT_EQ(0,
+            YIndex(gfx::Size(2, 2),
+                   gfx::Rect(origin, gfx::Size(2, 2)),
+                   true,
+                   origin.y() + 0));
+  EXPECT_EQ(0,
+            YIndex(gfx::Size(2, 2),
+                   gfx::Rect(origin, gfx::Size(2, 2)),
+                   true,
+                   origin.y() + 1));
+  EXPECT_EQ(0,
+            YIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(3, 3)),
+                   true,
+                   origin.y() + 0));
+  EXPECT_EQ(0,
+            YIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(3, 3)),
+                   true,
+                   origin.y() + 1));
+  EXPECT_EQ(0,
+            YIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(3, 3)),
+                   true,
+                   origin.y() + 2));
+
+  EXPECT_EQ(0,
+            YIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(3, 4)),
+                   true,
+                   origin.y() + 0));
+  EXPECT_EQ(0,
+            YIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(3, 4)),
+                   true,
+                   origin.y() + 1));
+  EXPECT_EQ(1,
+            YIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(3, 4)),
+                   true,
+                   origin.y() + 2));
+  EXPECT_EQ(1,
+            YIndex(gfx::Size(3, 3),
+                   gfx::Rect(origin, gfx::Size(3, 4)),
+                   true,
+                   origin.y() + 3));
 }
 
-TEST(TilingDataTest, FirstBorderTileYIndexFromSrcCoord) {
-  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 0));
-  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 1));
-  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 2));
-  EXPECT_EQ(1, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 3));
-  EXPECT_EQ(1, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 4));
-  EXPECT_EQ(1, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 5));
-  EXPECT_EQ(2, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 6));
-  EXPECT_EQ(2, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 7));
-  EXPECT_EQ(2, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 8));
-  EXPECT_EQ(3, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 9));
-  EXPECT_EQ(3, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 10));
-  EXPECT_EQ(3, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 11));
+TEST_P(TilingDataTest, FirstBorderTileYIndexFromSrcCoord) {
+  gfx::Point origin = GetParam();
 
-  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 0));
-  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 1));
-  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 2));
-  EXPECT_EQ(1, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 3));
-  EXPECT_EQ(2, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 4));
-  EXPECT_EQ(3, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 5));
-  EXPECT_EQ(4, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 6));
-  EXPECT_EQ(5, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 7));
-  EXPECT_EQ(6, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 8));
-  EXPECT_EQ(7, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 9));
-  EXPECT_EQ(7, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 10));
-  EXPECT_EQ(7, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 11));
+  EXPECT_EQ(0,
+            MinBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.y() + 0));
+  EXPECT_EQ(0,
+            MinBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.y() + 1));
+  EXPECT_EQ(0,
+            MinBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.y() + 2));
+  EXPECT_EQ(1,
+            MinBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.y() + 3));
+  EXPECT_EQ(1,
+            MinBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.y() + 4));
+  EXPECT_EQ(1,
+            MinBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.y() + 5));
+  EXPECT_EQ(2,
+            MinBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.y() + 6));
+  EXPECT_EQ(2,
+            MinBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.y() + 7));
+  EXPECT_EQ(2,
+            MinBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.y() + 8));
+  EXPECT_EQ(3,
+            MinBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.y() + 9));
+  EXPECT_EQ(3,
+            MinBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.y() + 10));
+  EXPECT_EQ(3,
+            MinBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.y() + 11));
 
-  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(1, 1), gfx::Size(1, 1), false, 0));
-  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(2, 2), gfx::Size(2, 2), false, 0));
-  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(2, 2), gfx::Size(2, 2), false, 1));
-  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 3), false, 0));
-  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 3), false, 1));
-  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 3), false, 2));
+  EXPECT_EQ(0,
+            MinBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.y() + 0));
+  EXPECT_EQ(0,
+            MinBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.y() + 1));
+  EXPECT_EQ(0,
+            MinBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.y() + 2));
+  EXPECT_EQ(1,
+            MinBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.y() + 3));
+  EXPECT_EQ(2,
+            MinBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.y() + 4));
+  EXPECT_EQ(3,
+            MinBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.y() + 5));
+  EXPECT_EQ(4,
+            MinBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.y() + 6));
+  EXPECT_EQ(5,
+            MinBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.y() + 7));
+  EXPECT_EQ(6,
+            MinBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.y() + 8));
+  EXPECT_EQ(7,
+            MinBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.y() + 9));
+  EXPECT_EQ(7,
+            MinBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.y() + 10));
+  EXPECT_EQ(7,
+            MinBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.y() + 11));
 
-  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 4), false, 0));
-  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 4), false, 1));
-  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 4), false, 2));
-  EXPECT_EQ(1, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 4), false, 3));
+  EXPECT_EQ(0,
+            MinBorderYIndex(gfx::Size(1, 1),
+                            gfx::Rect(origin, gfx::Size(1, 1)),
+                            false,
+                            origin.y() + 0));
+  EXPECT_EQ(0,
+            MinBorderYIndex(gfx::Size(2, 2),
+                            gfx::Rect(origin, gfx::Size(2, 2)),
+                            false,
+                            origin.y() + 0));
+  EXPECT_EQ(0,
+            MinBorderYIndex(gfx::Size(2, 2),
+                            gfx::Rect(origin, gfx::Size(2, 2)),
+                            false,
+                            origin.y() + 1));
+  EXPECT_EQ(0,
+            MinBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(3, 3)),
+                            false,
+                            origin.y() + 0));
+  EXPECT_EQ(0,
+            MinBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(3, 3)),
+                            false,
+                            origin.y() + 1));
+  EXPECT_EQ(0,
+            MinBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(3, 3)),
+                            false,
+                            origin.y() + 2));
 
-  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(1, 1), gfx::Size(1, 1), true, 0));
-  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(2, 2), gfx::Size(2, 2), true, 0));
-  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(2, 2), gfx::Size(2, 2), true, 1));
-  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 3), true, 0));
-  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 3), true, 1));
-  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 3), true, 2));
+  EXPECT_EQ(0,
+            MinBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(3, 4)),
+                            false,
+                            origin.y() + 0));
+  EXPECT_EQ(0,
+            MinBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(3, 4)),
+                            false,
+                            origin.y() + 1));
+  EXPECT_EQ(0,
+            MinBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(3, 4)),
+                            false,
+                            origin.y() + 2));
+  EXPECT_EQ(1,
+            MinBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(3, 4)),
+                            false,
+                            origin.y() + 3));
 
-  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 4), true, 0));
-  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 4), true, 1));
-  EXPECT_EQ(0, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 4), true, 2));
-  EXPECT_EQ(1, MinBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 4), true, 3));
+  EXPECT_EQ(0,
+            MinBorderYIndex(gfx::Size(1, 1),
+                            gfx::Rect(origin, gfx::Size(1, 1)),
+                            true,
+                            origin.y() + 0));
+  EXPECT_EQ(0,
+            MinBorderYIndex(gfx::Size(2, 2),
+                            gfx::Rect(origin, gfx::Size(2, 2)),
+                            true,
+                            origin.y() + 0));
+  EXPECT_EQ(0,
+            MinBorderYIndex(gfx::Size(2, 2),
+                            gfx::Rect(origin, gfx::Size(2, 2)),
+                            true,
+                            origin.y() + 1));
+  EXPECT_EQ(0,
+            MinBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(3, 3)),
+                            true,
+                            origin.y() + 0));
+  EXPECT_EQ(0,
+            MinBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(3, 3)),
+                            true,
+                            origin.y() + 1));
+  EXPECT_EQ(0,
+            MinBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(3, 3)),
+                            true,
+                            origin.y() + 2));
+
+  EXPECT_EQ(0,
+            MinBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(3, 4)),
+                            true,
+                            origin.y() + 0));
+  EXPECT_EQ(0,
+            MinBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(3, 4)),
+                            true,
+                            origin.y() + 1));
+  EXPECT_EQ(0,
+            MinBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(3, 4)),
+                            true,
+                            origin.y() + 2));
+  EXPECT_EQ(1,
+            MinBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(3, 4)),
+                            true,
+                            origin.y() + 3));
 }
 
-TEST(TilingDataTest, LastBorderTileYIndexFromSrcCoord) {
-  EXPECT_EQ(0, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 0));
-  EXPECT_EQ(0, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 1));
-  EXPECT_EQ(0, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 2));
-  EXPECT_EQ(1, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 3));
-  EXPECT_EQ(1, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 4));
-  EXPECT_EQ(1, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 5));
-  EXPECT_EQ(2, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 6));
-  EXPECT_EQ(2, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 7));
-  EXPECT_EQ(2, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 8));
-  EXPECT_EQ(3, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 9));
-  EXPECT_EQ(3, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 10));
-  EXPECT_EQ(3, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), false, 11));
+TEST_P(TilingDataTest, LastBorderTileYIndexFromSrcCoord) {
+  gfx::Point origin = GetParam();
 
-  EXPECT_EQ(0, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 0));
-  EXPECT_EQ(1, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 1));
-  EXPECT_EQ(2, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 2));
-  EXPECT_EQ(3, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 3));
-  EXPECT_EQ(4, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 4));
-  EXPECT_EQ(5, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 5));
-  EXPECT_EQ(6, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 6));
-  EXPECT_EQ(7, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 7));
-  EXPECT_EQ(7, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 8));
-  EXPECT_EQ(7, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 9));
-  EXPECT_EQ(7, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 10));
-  EXPECT_EQ(7, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(10, 10), true, 11));
+  EXPECT_EQ(0,
+            MaxBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.y() + 0));
+  EXPECT_EQ(0,
+            MaxBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.y() + 1));
+  EXPECT_EQ(0,
+            MaxBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.y() + 2));
+  EXPECT_EQ(1,
+            MaxBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.y() + 3));
+  EXPECT_EQ(1,
+            MaxBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.y() + 4));
+  EXPECT_EQ(1,
+            MaxBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.y() + 5));
+  EXPECT_EQ(2,
+            MaxBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.y() + 6));
+  EXPECT_EQ(2,
+            MaxBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.y() + 7));
+  EXPECT_EQ(2,
+            MaxBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.y() + 8));
+  EXPECT_EQ(3,
+            MaxBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.y() + 9));
+  EXPECT_EQ(3,
+            MaxBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.y() + 10));
+  EXPECT_EQ(3,
+            MaxBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            false,
+                            origin.y() + 11));
 
-  EXPECT_EQ(0, MaxBorderYIndex(gfx::Size(1, 1), gfx::Size(1, 1), false, 0));
-  EXPECT_EQ(0, MaxBorderYIndex(gfx::Size(2, 2), gfx::Size(2, 2), false, 0));
-  EXPECT_EQ(0, MaxBorderYIndex(gfx::Size(2, 2), gfx::Size(2, 2), false, 1));
-  EXPECT_EQ(0, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 3), false, 0));
-  EXPECT_EQ(0, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 3), false, 1));
-  EXPECT_EQ(0, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 3), false, 2));
+  EXPECT_EQ(0,
+            MaxBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.y() + 0));
+  EXPECT_EQ(1,
+            MaxBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.y() + 1));
+  EXPECT_EQ(2,
+            MaxBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.y() + 2));
+  EXPECT_EQ(3,
+            MaxBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.y() + 3));
+  EXPECT_EQ(4,
+            MaxBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.y() + 4));
+  EXPECT_EQ(5,
+            MaxBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.y() + 5));
+  EXPECT_EQ(6,
+            MaxBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.y() + 6));
+  EXPECT_EQ(7,
+            MaxBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.y() + 7));
+  EXPECT_EQ(7,
+            MaxBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.y() + 8));
+  EXPECT_EQ(7,
+            MaxBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.y() + 9));
+  EXPECT_EQ(7,
+            MaxBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.y() + 10));
+  EXPECT_EQ(7,
+            MaxBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(10, 10)),
+                            true,
+                            origin.y() + 11));
 
-  EXPECT_EQ(0, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 4), false, 0));
-  EXPECT_EQ(0, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 4), false, 1));
-  EXPECT_EQ(0, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 4), false, 2));
-  EXPECT_EQ(1, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 4), false, 3));
+  EXPECT_EQ(0,
+            MaxBorderYIndex(gfx::Size(1, 1),
+                            gfx::Rect(origin, gfx::Size(1, 1)),
+                            false,
+                            origin.y() + 0));
+  EXPECT_EQ(0,
+            MaxBorderYIndex(gfx::Size(2, 2),
+                            gfx::Rect(origin, gfx::Size(2, 2)),
+                            false,
+                            origin.y() + 0));
+  EXPECT_EQ(0,
+            MaxBorderYIndex(gfx::Size(2, 2),
+                            gfx::Rect(origin, gfx::Size(2, 2)),
+                            false,
+                            origin.y() + 1));
+  EXPECT_EQ(0,
+            MaxBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(3, 3)),
+                            false,
+                            origin.y() + 0));
+  EXPECT_EQ(0,
+            MaxBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(3, 3)),
+                            false,
+                            origin.y() + 1));
+  EXPECT_EQ(0,
+            MaxBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(3, 3)),
+                            false,
+                            origin.y() + 2));
 
-  EXPECT_EQ(0, MaxBorderYIndex(gfx::Size(1, 1), gfx::Size(1, 1), true, 0));
-  EXPECT_EQ(0, MaxBorderYIndex(gfx::Size(2, 2), gfx::Size(2, 2), true, 0));
-  EXPECT_EQ(0, MaxBorderYIndex(gfx::Size(2, 2), gfx::Size(2, 2), true, 1));
-  EXPECT_EQ(0, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 3), true, 0));
-  EXPECT_EQ(0, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 3), true, 1));
-  EXPECT_EQ(0, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 3), true, 2));
+  EXPECT_EQ(0,
+            MaxBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(3, 4)),
+                            false,
+                            origin.y() + 0));
+  EXPECT_EQ(0,
+            MaxBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(3, 4)),
+                            false,
+                            origin.y() + 1));
+  EXPECT_EQ(0,
+            MaxBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(3, 4)),
+                            false,
+                            origin.y() + 2));
+  EXPECT_EQ(1,
+            MaxBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(3, 4)),
+                            false,
+                            origin.y() + 3));
 
-  EXPECT_EQ(0, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 4), true, 0));
-  EXPECT_EQ(1, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 4), true, 1));
-  EXPECT_EQ(1, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 4), true, 2));
-  EXPECT_EQ(1, MaxBorderYIndex(gfx::Size(3, 3), gfx::Size(3, 4), true, 3));
+  EXPECT_EQ(0,
+            MaxBorderYIndex(gfx::Size(1, 1),
+                            gfx::Rect(origin, gfx::Size(1, 1)),
+                            true,
+                            origin.y() + 0));
+  EXPECT_EQ(0,
+            MaxBorderYIndex(gfx::Size(2, 2),
+                            gfx::Rect(origin, gfx::Size(2, 2)),
+                            true,
+                            origin.y() + 0));
+  EXPECT_EQ(0,
+            MaxBorderYIndex(gfx::Size(2, 2),
+                            gfx::Rect(origin, gfx::Size(2, 2)),
+                            true,
+                            origin.y() + 1));
+  EXPECT_EQ(0,
+            MaxBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(3, 3)),
+                            true,
+                            origin.y() + 0));
+  EXPECT_EQ(0,
+            MaxBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(3, 3)),
+                            true,
+                            origin.y() + 1));
+  EXPECT_EQ(0,
+            MaxBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(3, 3)),
+                            true,
+                            origin.y() + 2));
+
+  EXPECT_EQ(0,
+            MaxBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(3, 4)),
+                            true,
+                            origin.y() + 0));
+  EXPECT_EQ(1,
+            MaxBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(3, 4)),
+                            true,
+                            origin.y() + 1));
+  EXPECT_EQ(1,
+            MaxBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(3, 4)),
+                            true,
+                            origin.y() + 2));
+  EXPECT_EQ(1,
+            MaxBorderYIndex(gfx::Size(3, 3),
+                            gfx::Rect(origin, gfx::Size(3, 4)),
+                            true,
+                            origin.y() + 3));
 }
 
-TEST(TilingDataTest, TileSizeX) {
-  EXPECT_EQ(5, SizeX(gfx::Size(5, 5), gfx::Size(5, 5), false, 0));
-  EXPECT_EQ(5, SizeX(gfx::Size(5, 5), gfx::Size(5, 5), true, 0));
+TEST_P(TilingDataTest, TileSizeX) {
+  gfx::Point origin = GetParam();
 
-  EXPECT_EQ(5, SizeX(gfx::Size(5, 5), gfx::Size(6, 6), false, 0));
-  EXPECT_EQ(1, SizeX(gfx::Size(5, 5), gfx::Size(6, 6), false, 1));
-  EXPECT_EQ(4, SizeX(gfx::Size(5, 5), gfx::Size(6, 6), true, 0));
-  EXPECT_EQ(2, SizeX(gfx::Size(5, 5), gfx::Size(6, 6), true, 1));
+  EXPECT_EQ(
+      5, SizeX(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(5, 5)), false, 0));
+  EXPECT_EQ(
+      5, SizeX(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(5, 5)), true, 0));
 
-  EXPECT_EQ(5, SizeX(gfx::Size(5, 5), gfx::Size(8, 8), false, 0));
-  EXPECT_EQ(3, SizeX(gfx::Size(5, 5), gfx::Size(8, 8), false, 1));
-  EXPECT_EQ(4, SizeX(gfx::Size(5, 5), gfx::Size(8, 8), true, 0));
-  EXPECT_EQ(4, SizeX(gfx::Size(5, 5), gfx::Size(8, 8), true, 1));
+  EXPECT_EQ(
+      5, SizeX(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(6, 6)), false, 0));
+  EXPECT_EQ(
+      1, SizeX(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(6, 6)), false, 1));
+  EXPECT_EQ(
+      4, SizeX(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(6, 6)), true, 0));
+  EXPECT_EQ(
+      2, SizeX(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(6, 6)), true, 1));
 
-  EXPECT_EQ(5, SizeX(gfx::Size(5, 5), gfx::Size(10, 10), false, 0));
-  EXPECT_EQ(5, SizeX(gfx::Size(5, 5), gfx::Size(10, 10), false, 1));
-  EXPECT_EQ(4, SizeX(gfx::Size(5, 5), gfx::Size(10, 10), true, 0));
-  EXPECT_EQ(3, SizeX(gfx::Size(5, 5), gfx::Size(10, 10), true, 1));
-  EXPECT_EQ(3, SizeX(gfx::Size(5, 5), gfx::Size(10, 10), true, 2));
+  EXPECT_EQ(
+      5, SizeX(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(8, 8)), false, 0));
+  EXPECT_EQ(
+      3, SizeX(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(8, 8)), false, 1));
+  EXPECT_EQ(
+      4, SizeX(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(8, 8)), true, 0));
+  EXPECT_EQ(
+      4, SizeX(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(8, 8)), true, 1));
 
-  EXPECT_EQ(4, SizeX(gfx::Size(5, 5), gfx::Size(11, 11), true, 2));
-  EXPECT_EQ(3, SizeX(gfx::Size(5, 5), gfx::Size(12, 12), true, 2));
+  EXPECT_EQ(
+      5,
+      SizeX(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(10, 10)), false, 0));
+  EXPECT_EQ(
+      5,
+      SizeX(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(10, 10)), false, 1));
+  EXPECT_EQ(
+      4, SizeX(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(10, 10)), true, 0));
+  EXPECT_EQ(
+      3, SizeX(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(10, 10)), true, 1));
+  EXPECT_EQ(
+      3, SizeX(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(10, 10)), true, 2));
 
-  EXPECT_EQ(3, SizeX(gfx::Size(5, 9), gfx::Size(12, 17), true, 2));
+  EXPECT_EQ(
+      4, SizeX(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(11, 11)), true, 2));
+  EXPECT_EQ(
+      3, SizeX(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(12, 12)), true, 2));
+
+  EXPECT_EQ(
+      3, SizeX(gfx::Size(5, 9), gfx::Rect(origin, gfx::Size(12, 17)), true, 2));
 }
 
-TEST(TilingDataTest, TileSizeY) {
-  EXPECT_EQ(5, SizeY(gfx::Size(5, 5), gfx::Size(5, 5), false, 0));
-  EXPECT_EQ(5, SizeY(gfx::Size(5, 5), gfx::Size(5, 5), true, 0));
+TEST_P(TilingDataTest, TileSizeY) {
+  gfx::Point origin = GetParam();
 
-  EXPECT_EQ(5, SizeY(gfx::Size(5, 5), gfx::Size(6, 6), false, 0));
-  EXPECT_EQ(1, SizeY(gfx::Size(5, 5), gfx::Size(6, 6), false, 1));
-  EXPECT_EQ(4, SizeY(gfx::Size(5, 5), gfx::Size(6, 6), true, 0));
-  EXPECT_EQ(2, SizeY(gfx::Size(5, 5), gfx::Size(6, 6), true, 1));
+  EXPECT_EQ(
+      5, SizeY(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(5, 5)), false, 0));
+  EXPECT_EQ(
+      5, SizeY(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(5, 5)), true, 0));
 
-  EXPECT_EQ(5, SizeY(gfx::Size(5, 5), gfx::Size(8, 8), false, 0));
-  EXPECT_EQ(3, SizeY(gfx::Size(5, 5), gfx::Size(8, 8), false, 1));
-  EXPECT_EQ(4, SizeY(gfx::Size(5, 5), gfx::Size(8, 8), true, 0));
-  EXPECT_EQ(4, SizeY(gfx::Size(5, 5), gfx::Size(8, 8), true, 1));
+  EXPECT_EQ(
+      5, SizeY(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(6, 6)), false, 0));
+  EXPECT_EQ(
+      1, SizeY(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(6, 6)), false, 1));
+  EXPECT_EQ(
+      4, SizeY(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(6, 6)), true, 0));
+  EXPECT_EQ(
+      2, SizeY(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(6, 6)), true, 1));
 
-  EXPECT_EQ(5, SizeY(gfx::Size(5, 5), gfx::Size(10, 10), false, 0));
-  EXPECT_EQ(5, SizeY(gfx::Size(5, 5), gfx::Size(10, 10), false, 1));
-  EXPECT_EQ(4, SizeY(gfx::Size(5, 5), gfx::Size(10, 10), true, 0));
-  EXPECT_EQ(3, SizeY(gfx::Size(5, 5), gfx::Size(10, 10), true, 1));
-  EXPECT_EQ(3, SizeY(gfx::Size(5, 5), gfx::Size(10, 10), true, 2));
+  EXPECT_EQ(
+      5, SizeY(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(8, 8)), false, 0));
+  EXPECT_EQ(
+      3, SizeY(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(8, 8)), false, 1));
+  EXPECT_EQ(
+      4, SizeY(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(8, 8)), true, 0));
+  EXPECT_EQ(
+      4, SizeY(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(8, 8)), true, 1));
 
-  EXPECT_EQ(4, SizeY(gfx::Size(5, 5), gfx::Size(11, 11), true, 2));
-  EXPECT_EQ(3, SizeY(gfx::Size(5, 5), gfx::Size(12, 12), true, 2));
+  EXPECT_EQ(
+      5,
+      SizeY(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(10, 10)), false, 0));
+  EXPECT_EQ(
+      5,
+      SizeY(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(10, 10)), false, 1));
+  EXPECT_EQ(
+      4, SizeY(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(10, 10)), true, 0));
+  EXPECT_EQ(
+      3, SizeY(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(10, 10)), true, 1));
+  EXPECT_EQ(
+      3, SizeY(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(10, 10)), true, 2));
 
-  EXPECT_EQ(3, SizeY(gfx::Size(9, 5), gfx::Size(17, 12), true, 2));
+  EXPECT_EQ(
+      4, SizeY(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(11, 11)), true, 2));
+  EXPECT_EQ(
+      3, SizeY(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(12, 12)), true, 2));
+
+  EXPECT_EQ(
+      3, SizeY(gfx::Size(9, 5), gfx::Rect(origin, gfx::Size(17, 12)), true, 2));
 }
 
-TEST(TilingDataTest, TileSizeX_and_TilePositionX) {
+TEST_P(TilingDataTest, TileSizeX_and_TilePositionX) {
+  gfx::Point origin = GetParam();
+
   // Single tile cases:
-  EXPECT_EQ(1, SizeX(gfx::Size(3, 3), gfx::Size(1, 1), false, 0));
-  EXPECT_EQ(0, PosX(gfx::Size(3, 3), gfx::Size(1, 1), false, 0));
-  EXPECT_EQ(1, SizeX(gfx::Size(3, 3), gfx::Size(1, 100), false, 0));
-  EXPECT_EQ(0, PosX(gfx::Size(3, 3), gfx::Size(1, 100), false, 0));
-  EXPECT_EQ(3, SizeX(gfx::Size(3, 3), gfx::Size(3, 1), false, 0));
-  EXPECT_EQ(0, PosX(gfx::Size(3, 3), gfx::Size(3, 1), false, 0));
-  EXPECT_EQ(3, SizeX(gfx::Size(3, 3), gfx::Size(3, 100), false, 0));
-  EXPECT_EQ(0, PosX(gfx::Size(3, 3), gfx::Size(3, 100), false, 0));
-  EXPECT_EQ(1, SizeX(gfx::Size(3, 3), gfx::Size(1, 1), true, 0));
-  EXPECT_EQ(0, PosX(gfx::Size(3, 3), gfx::Size(1, 1), true, 0));
-  EXPECT_EQ(1, SizeX(gfx::Size(3, 3), gfx::Size(1, 100), true, 0));
-  EXPECT_EQ(0, PosX(gfx::Size(3, 3), gfx::Size(1, 100), true, 0));
-  EXPECT_EQ(3, SizeX(gfx::Size(3, 3), gfx::Size(3, 1), true, 0));
-  EXPECT_EQ(0, PosX(gfx::Size(3, 3), gfx::Size(3, 1), true, 0));
-  EXPECT_EQ(3, SizeX(gfx::Size(3, 3), gfx::Size(3, 100), true, 0));
-  EXPECT_EQ(0, PosX(gfx::Size(3, 3), gfx::Size(3, 100), true, 0));
+  EXPECT_EQ(
+      1, SizeX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 1)), false, 0));
+  EXPECT_EQ(
+      origin.x(),
+      PosX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 1)), false, 0));
+  EXPECT_EQ(
+      1,
+      SizeX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 100)), false, 0));
+  EXPECT_EQ(
+      origin.x(),
+      PosX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 100)), false, 0));
+  EXPECT_EQ(
+      3, SizeX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(3, 1)), false, 0));
+  EXPECT_EQ(
+      origin.x(),
+      PosX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(3, 1)), false, 0));
+  EXPECT_EQ(
+      3,
+      SizeX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(3, 100)), false, 0));
+  EXPECT_EQ(
+      origin.x(),
+      PosX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(3, 100)), false, 0));
+  EXPECT_EQ(
+      1, SizeX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 1)), true, 0));
+  EXPECT_EQ(origin.x(),
+            PosX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 1)), true, 0));
+  EXPECT_EQ(
+      1, SizeX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 100)), true, 0));
+  EXPECT_EQ(
+      origin.x(),
+      PosX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 100)), true, 0));
+  EXPECT_EQ(
+      3, SizeX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(3, 1)), true, 0));
+  EXPECT_EQ(origin.x(),
+            PosX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(3, 1)), true, 0));
+  EXPECT_EQ(
+      3, SizeX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(3, 100)), true, 0));
+  EXPECT_EQ(
+      origin.x(),
+      PosX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(3, 100)), true, 0));
 
   // Multiple tiles:
   // no border
   // positions 0, 3
-  EXPECT_EQ(2, NumTiles(gfx::Size(3, 3), gfx::Size(6, 1), false));
-  EXPECT_EQ(3, SizeX(gfx::Size(3, 3), gfx::Size(6, 1), false, 0));
-  EXPECT_EQ(3, SizeX(gfx::Size(3, 3), gfx::Size(6, 1), false, 1));
-  EXPECT_EQ(0, PosX(gfx::Size(3, 3), gfx::Size(6, 1), false, 0));
-  EXPECT_EQ(3, PosX(gfx::Size(3, 3), gfx::Size(6, 1), false, 1));
-  EXPECT_EQ(3, SizeX(gfx::Size(3, 3), gfx::Size(6, 100), false, 0));
-  EXPECT_EQ(3, SizeX(gfx::Size(3, 3), gfx::Size(6, 100), false, 1));
-  EXPECT_EQ(0, PosX(gfx::Size(3, 3), gfx::Size(6, 100), false, 0));
-  EXPECT_EQ(3, PosX(gfx::Size(3, 3), gfx::Size(6, 100), false, 1));
+  EXPECT_EQ(
+      2, NumTiles(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(6, 1)), false));
+  EXPECT_EQ(
+      3, SizeX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(6, 1)), false, 0));
+  EXPECT_EQ(
+      3, SizeX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(6, 1)), false, 1));
+  EXPECT_EQ(
+      origin.x() + 0,
+      PosX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(6, 1)), false, 0));
+  EXPECT_EQ(
+      origin.x() + 3,
+      PosX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(6, 1)), false, 1));
+  EXPECT_EQ(
+      3,
+      SizeX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(6, 100)), false, 0));
+  EXPECT_EQ(
+      3,
+      SizeX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(6, 100)), false, 1));
+  EXPECT_EQ(
+      origin.x() + 0,
+      PosX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(6, 100)), false, 0));
+  EXPECT_EQ(
+      origin.x() + 3,
+      PosX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(6, 100)), false, 1));
 
   // Multiple tiles:
   // with border
   // positions 0, 2, 3, 4
-  EXPECT_EQ(4, NumTiles(gfx::Size(3, 3), gfx::Size(6, 1), true));
-  EXPECT_EQ(2, SizeX(gfx::Size(3, 3), gfx::Size(6, 1), true, 0));
-  EXPECT_EQ(1, SizeX(gfx::Size(3, 3), gfx::Size(6, 1), true, 1));
-  EXPECT_EQ(1, SizeX(gfx::Size(3, 3), gfx::Size(6, 1), true, 2));
-  EXPECT_EQ(2, SizeX(gfx::Size(3, 3), gfx::Size(6, 1), true, 3));
-  EXPECT_EQ(0, PosX(gfx::Size(3, 3), gfx::Size(6, 1), true, 0));
-  EXPECT_EQ(2, PosX(gfx::Size(3, 3), gfx::Size(6, 1), true, 1));
-  EXPECT_EQ(3, PosX(gfx::Size(3, 3), gfx::Size(6, 1), true, 2));
-  EXPECT_EQ(4, PosX(gfx::Size(3, 3), gfx::Size(6, 1), true, 3));
-  EXPECT_EQ(2, SizeX(gfx::Size(3, 7), gfx::Size(6, 100), true, 0));
-  EXPECT_EQ(1, SizeX(gfx::Size(3, 7), gfx::Size(6, 100), true, 1));
-  EXPECT_EQ(1, SizeX(gfx::Size(3, 7), gfx::Size(6, 100), true, 2));
-  EXPECT_EQ(2, SizeX(gfx::Size(3, 7), gfx::Size(6, 100), true, 3));
-  EXPECT_EQ(0, PosX(gfx::Size(3, 7), gfx::Size(6, 100), true, 0));
-  EXPECT_EQ(2, PosX(gfx::Size(3, 7), gfx::Size(6, 100), true, 1));
-  EXPECT_EQ(3, PosX(gfx::Size(3, 7), gfx::Size(6, 100), true, 2));
-  EXPECT_EQ(4, PosX(gfx::Size(3, 7), gfx::Size(6, 100), true, 3));
+  EXPECT_EQ(
+      4, NumTiles(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(6, 1)), true));
+  EXPECT_EQ(
+      2, SizeX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(6, 1)), true, 0));
+  EXPECT_EQ(
+      1, SizeX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(6, 1)), true, 1));
+  EXPECT_EQ(
+      1, SizeX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(6, 1)), true, 2));
+  EXPECT_EQ(
+      2, SizeX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(6, 1)), true, 3));
+  EXPECT_EQ(origin.x() + 0,
+            PosX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(6, 1)), true, 0));
+  EXPECT_EQ(origin.x() + 2,
+            PosX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(6, 1)), true, 1));
+  EXPECT_EQ(origin.x() + 3,
+            PosX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(6, 1)), true, 2));
+  EXPECT_EQ(origin.x() + 4,
+            PosX(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(6, 1)), true, 3));
+  EXPECT_EQ(
+      2, SizeX(gfx::Size(3, 7), gfx::Rect(origin, gfx::Size(6, 100)), true, 0));
+  EXPECT_EQ(
+      1, SizeX(gfx::Size(3, 7), gfx::Rect(origin, gfx::Size(6, 100)), true, 1));
+  EXPECT_EQ(
+      1, SizeX(gfx::Size(3, 7), gfx::Rect(origin, gfx::Size(6, 100)), true, 2));
+  EXPECT_EQ(
+      2, SizeX(gfx::Size(3, 7), gfx::Rect(origin, gfx::Size(6, 100)), true, 3));
+  EXPECT_EQ(
+      origin.x() + 0,
+      PosX(gfx::Size(3, 7), gfx::Rect(origin, gfx::Size(6, 100)), true, 0));
+  EXPECT_EQ(
+      origin.x() + 2,
+      PosX(gfx::Size(3, 7), gfx::Rect(origin, gfx::Size(6, 100)), true, 1));
+  EXPECT_EQ(
+      origin.x() + 3,
+      PosX(gfx::Size(3, 7), gfx::Rect(origin, gfx::Size(6, 100)), true, 2));
+  EXPECT_EQ(
+      origin.x() + 4,
+      PosX(gfx::Size(3, 7), gfx::Rect(origin, gfx::Size(6, 100)), true, 3));
 }
 
-TEST(TilingDataTest, TileSizeY_and_TilePositionY) {
+TEST_P(TilingDataTest, TileSizeY_and_TilePositionY) {
+  gfx::Point origin = GetParam();
+
   // Single tile cases:
-  EXPECT_EQ(1, SizeY(gfx::Size(3, 3), gfx::Size(1, 1), false, 0));
-  EXPECT_EQ(0, PosY(gfx::Size(3, 3), gfx::Size(1, 1), false, 0));
-  EXPECT_EQ(1, SizeY(gfx::Size(3, 3), gfx::Size(100, 1), false, 0));
-  EXPECT_EQ(0, PosY(gfx::Size(3, 3), gfx::Size(100, 1), false, 0));
-  EXPECT_EQ(3, SizeY(gfx::Size(3, 3), gfx::Size(1, 3), false, 0));
-  EXPECT_EQ(0, PosY(gfx::Size(3, 3), gfx::Size(1, 3), false, 0));
-  EXPECT_EQ(3, SizeY(gfx::Size(3, 3), gfx::Size(100, 3), false, 0));
-  EXPECT_EQ(0, PosY(gfx::Size(3, 3), gfx::Size(100, 3), false, 0));
-  EXPECT_EQ(1, SizeY(gfx::Size(3, 3), gfx::Size(1, 1), true, 0));
-  EXPECT_EQ(0, PosY(gfx::Size(3, 3), gfx::Size(1, 1), true, 0));
-  EXPECT_EQ(1, SizeY(gfx::Size(3, 3), gfx::Size(100, 1), true, 0));
-  EXPECT_EQ(0, PosY(gfx::Size(3, 3), gfx::Size(100, 1), true, 0));
-  EXPECT_EQ(3, SizeY(gfx::Size(3, 3), gfx::Size(1, 3), true, 0));
-  EXPECT_EQ(0, PosY(gfx::Size(3, 3), gfx::Size(1, 3), true, 0));
-  EXPECT_EQ(3, SizeY(gfx::Size(3, 3), gfx::Size(100, 3), true, 0));
-  EXPECT_EQ(0, PosY(gfx::Size(3, 3), gfx::Size(100, 3), true, 0));
+  EXPECT_EQ(
+      1, SizeY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 1)), false, 0));
+  EXPECT_EQ(
+      origin.y(),
+      PosY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 1)), false, 0));
+  EXPECT_EQ(
+      1,
+      SizeY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(100, 1)), false, 0));
+  EXPECT_EQ(
+      origin.y(),
+      PosY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(100, 1)), false, 0));
+  EXPECT_EQ(
+      3, SizeY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 3)), false, 0));
+  EXPECT_EQ(
+      origin.y(),
+      PosY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 3)), false, 0));
+  EXPECT_EQ(
+      3,
+      SizeY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(100, 3)), false, 0));
+  EXPECT_EQ(
+      origin.y(),
+      PosY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(100, 3)), false, 0));
+  EXPECT_EQ(
+      1, SizeY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 1)), true, 0));
+  EXPECT_EQ(origin.y(),
+            PosY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 1)), true, 0));
+  EXPECT_EQ(
+      1, SizeY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(100, 1)), true, 0));
+  EXPECT_EQ(
+      origin.y(),
+      PosY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(100, 1)), true, 0));
+  EXPECT_EQ(
+      3, SizeY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 3)), true, 0));
+  EXPECT_EQ(origin.y(),
+            PosY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 3)), true, 0));
+  EXPECT_EQ(
+      3, SizeY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(100, 3)), true, 0));
+  EXPECT_EQ(
+      origin.y(),
+      PosY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(100, 3)), true, 0));
 
   // Multiple tiles:
   // no border
   // positions 0, 3
-  EXPECT_EQ(2, NumTiles(gfx::Size(3, 3), gfx::Size(1, 6), false));
-  EXPECT_EQ(3, SizeY(gfx::Size(3, 3), gfx::Size(1, 6), false, 0));
-  EXPECT_EQ(3, SizeY(gfx::Size(3, 3), gfx::Size(1, 6), false, 1));
-  EXPECT_EQ(0, PosY(gfx::Size(3, 3), gfx::Size(1, 6), false, 0));
-  EXPECT_EQ(3, PosY(gfx::Size(3, 3), gfx::Size(1, 6), false, 1));
-  EXPECT_EQ(3, SizeY(gfx::Size(3, 3), gfx::Size(100, 6), false, 0));
-  EXPECT_EQ(3, SizeY(gfx::Size(3, 3), gfx::Size(100, 6), false, 1));
-  EXPECT_EQ(0, PosY(gfx::Size(3, 3), gfx::Size(100, 6), false, 0));
-  EXPECT_EQ(3, PosY(gfx::Size(3, 3), gfx::Size(100, 6), false, 1));
+  EXPECT_EQ(
+      2, NumTiles(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 6)), false));
+  EXPECT_EQ(
+      3, SizeY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 6)), false, 0));
+  EXPECT_EQ(
+      3, SizeY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 6)), false, 1));
+  EXPECT_EQ(
+      origin.y() + 0,
+      PosY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 6)), false, 0));
+  EXPECT_EQ(
+      origin.y() + 3,
+      PosY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 6)), false, 1));
+  EXPECT_EQ(
+      3,
+      SizeY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(100, 6)), false, 0));
+  EXPECT_EQ(
+      3,
+      SizeY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(100, 6)), false, 1));
+  EXPECT_EQ(
+      origin.y() + 0,
+      PosY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(100, 6)), false, 0));
+  EXPECT_EQ(
+      origin.y() + 3,
+      PosY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(100, 6)), false, 1));
 
   // Multiple tiles:
   // with border
   // positions 0, 2, 3, 4
-  EXPECT_EQ(4, NumTiles(gfx::Size(3, 3), gfx::Size(1, 6), true));
-  EXPECT_EQ(2, SizeY(gfx::Size(3, 3), gfx::Size(1, 6), true, 0));
-  EXPECT_EQ(1, SizeY(gfx::Size(3, 3), gfx::Size(1, 6), true, 1));
-  EXPECT_EQ(1, SizeY(gfx::Size(3, 3), gfx::Size(1, 6), true, 2));
-  EXPECT_EQ(2, SizeY(gfx::Size(3, 3), gfx::Size(1, 6), true, 3));
-  EXPECT_EQ(0, PosY(gfx::Size(3, 3), gfx::Size(1, 6), true, 0));
-  EXPECT_EQ(2, PosY(gfx::Size(3, 3), gfx::Size(1, 6), true, 1));
-  EXPECT_EQ(3, PosY(gfx::Size(3, 3), gfx::Size(1, 6), true, 2));
-  EXPECT_EQ(4, PosY(gfx::Size(3, 3), gfx::Size(1, 6), true, 3));
-  EXPECT_EQ(2, SizeY(gfx::Size(7, 3), gfx::Size(100, 6), true, 0));
-  EXPECT_EQ(1, SizeY(gfx::Size(7, 3), gfx::Size(100, 6), true, 1));
-  EXPECT_EQ(1, SizeY(gfx::Size(7, 3), gfx::Size(100, 6), true, 2));
-  EXPECT_EQ(2, SizeY(gfx::Size(7, 3), gfx::Size(100, 6), true, 3));
-  EXPECT_EQ(0, PosY(gfx::Size(7, 3), gfx::Size(100, 6), true, 0));
-  EXPECT_EQ(2, PosY(gfx::Size(7, 3), gfx::Size(100, 6), true, 1));
-  EXPECT_EQ(3, PosY(gfx::Size(7, 3), gfx::Size(100, 6), true, 2));
-  EXPECT_EQ(4, PosY(gfx::Size(7, 3), gfx::Size(100, 6), true, 3));
+  EXPECT_EQ(
+      4, NumTiles(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 6)), true));
+  EXPECT_EQ(
+      2, SizeY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 6)), true, 0));
+  EXPECT_EQ(
+      1, SizeY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 6)), true, 1));
+  EXPECT_EQ(
+      1, SizeY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 6)), true, 2));
+  EXPECT_EQ(
+      2, SizeY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 6)), true, 3));
+  EXPECT_EQ(origin.y() + 0,
+            PosY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 6)), true, 0));
+  EXPECT_EQ(origin.y() + 2,
+            PosY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 6)), true, 1));
+  EXPECT_EQ(origin.y() + 3,
+            PosY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 6)), true, 2));
+  EXPECT_EQ(origin.y() + 4,
+            PosY(gfx::Size(3, 3), gfx::Rect(origin, gfx::Size(1, 6)), true, 3));
+  EXPECT_EQ(
+      2, SizeY(gfx::Size(7, 3), gfx::Rect(origin, gfx::Size(100, 6)), true, 0));
+  EXPECT_EQ(
+      1, SizeY(gfx::Size(7, 3), gfx::Rect(origin, gfx::Size(100, 6)), true, 1));
+  EXPECT_EQ(
+      1, SizeY(gfx::Size(7, 3), gfx::Rect(origin, gfx::Size(100, 6)), true, 2));
+  EXPECT_EQ(
+      2, SizeY(gfx::Size(7, 3), gfx::Rect(origin, gfx::Size(100, 6)), true, 3));
+  EXPECT_EQ(
+      origin.y() + 0,
+      PosY(gfx::Size(7, 3), gfx::Rect(origin, gfx::Size(100, 6)), true, 0));
+  EXPECT_EQ(
+      origin.y() + 2,
+      PosY(gfx::Size(7, 3), gfx::Rect(origin, gfx::Size(100, 6)), true, 1));
+  EXPECT_EQ(
+      origin.y() + 3,
+      PosY(gfx::Size(7, 3), gfx::Rect(origin, gfx::Size(100, 6)), true, 2));
+  EXPECT_EQ(
+      origin.y() + 4,
+      PosY(gfx::Size(7, 3), gfx::Rect(origin, gfx::Size(100, 6)), true, 3));
 }
 
-TEST(TilingDataTest, SetTotalSize) {
-  TilingData data(gfx::Size(5, 5), gfx::Size(5, 5), false);
-  EXPECT_EQ(5, data.total_size().width());
-  EXPECT_EQ(5, data.total_size().height());
+TEST_P(TilingDataTest, SetTotalSize) {
+  gfx::Point origin = GetParam();
+
+  TilingData data(gfx::Size(5, 5), gfx::Rect(origin, gfx::Size(5, 5)), false);
+  EXPECT_EQ(origin.x(), data.tiling_rect().x());
+  EXPECT_EQ(origin.y(), data.tiling_rect().y());
+  EXPECT_EQ(5, data.tiling_rect().width());
+  EXPECT_EQ(5, data.tiling_rect().height());
   EXPECT_EQ(1, data.num_tiles_x());
   EXPECT_EQ(5, data.TileSizeX(0));
   EXPECT_EQ(1, data.num_tiles_y());
   EXPECT_EQ(5, data.TileSizeY(0));
 
-  data.SetTotalSize(gfx::Size(6, 5));
-  EXPECT_EQ(6, data.total_size().width());
-  EXPECT_EQ(5, data.total_size().height());
+  data.SetTilingRect(gfx::Rect(36, 82, 6, 5));
+  EXPECT_EQ(36, data.tiling_rect().x());
+  EXPECT_EQ(82, data.tiling_rect().y());
+  EXPECT_EQ(6, data.tiling_rect().width());
+  EXPECT_EQ(5, data.tiling_rect().height());
   EXPECT_EQ(2, data.num_tiles_x());
   EXPECT_EQ(5, data.TileSizeX(0));
   EXPECT_EQ(1, data.TileSizeX(1));
   EXPECT_EQ(1, data.num_tiles_y());
   EXPECT_EQ(5, data.TileSizeY(0));
 
-  data.SetTotalSize(gfx::Size(5, 12));
-  EXPECT_EQ(5, data.total_size().width());
-  EXPECT_EQ(12, data.total_size().height());
+  data.SetTilingRect(gfx::Rect(4, 22, 5, 12));
+  EXPECT_EQ(4, data.tiling_rect().x());
+  EXPECT_EQ(22, data.tiling_rect().y());
+  EXPECT_EQ(5, data.tiling_rect().width());
+  EXPECT_EQ(12, data.tiling_rect().height());
   EXPECT_EQ(1, data.num_tiles_x());
   EXPECT_EQ(5, data.TileSizeX(0));
   EXPECT_EQ(3, data.num_tiles_y());
@@ -730,8 +2077,10 @@
   EXPECT_EQ(2, data.TileSizeY(2));
 }
 
-TEST(TilingDataTest, SetMaxTextureSizeNoBorders) {
-  TilingData data(gfx::Size(8, 8), gfx::Size(16, 32), false);
+TEST_P(TilingDataTest, SetMaxTextureSizeNoBorders) {
+  gfx::Point origin = GetParam();
+
+  TilingData data(gfx::Size(8, 8), gfx::Rect(origin, gfx::Size(16, 32)), false);
   EXPECT_EQ(2, data.num_tiles_x());
   EXPECT_EQ(4, data.num_tiles_y());
 
@@ -756,8 +2105,10 @@
   EXPECT_EQ(7, data.num_tiles_y());
 }
 
-TEST(TilingDataTest, SetMaxTextureSizeBorders) {
-  TilingData data(gfx::Size(8, 8), gfx::Size(16, 32), true);
+TEST_P(TilingDataTest, SetMaxTextureSizeBorders) {
+  gfx::Point origin = GetParam();
+
+  TilingData data(gfx::Size(8, 8), gfx::Rect(origin, gfx::Size(16, 32)), true);
   EXPECT_EQ(3, data.num_tiles_x());
   EXPECT_EQ(5, data.num_tiles_y());
 
@@ -782,31 +2133,112 @@
   EXPECT_EQ(10, data.num_tiles_y());
 }
 
-TEST(TilingDataTest, Assignment) {
+TEST_P(TilingDataTest, ExpandRectToTileBoundsWithBordersEmpty) {
+  gfx::Point origin = GetParam();
+  TilingData empty_total_size(
+      gfx::Size(0, 0), gfx::Rect(origin, gfx::Size(8, 8)), true);
+  EXPECT_RECT_EQ(
+      gfx::Rect(),
+      empty_total_size.ExpandRectToTileBoundsWithBorders(gfx::Rect()));
+  EXPECT_RECT_EQ(gfx::Rect(),
+                 empty_total_size.ExpandRectToTileBoundsWithBorders(
+                     gfx::Rect(100, 100, 100, 100)));
+  EXPECT_RECT_EQ(gfx::Rect(),
+                 empty_total_size.ExpandRectToTileBoundsWithBorders(
+                     gfx::Rect(0, 0, 100, 100)));
+
+  TilingData empty_max_texture_size(
+      gfx::Size(8, 8), gfx::Rect(origin, gfx::Size(0, 0)), true);
+  EXPECT_RECT_EQ(
+      gfx::Rect(),
+      empty_max_texture_size.ExpandRectToTileBoundsWithBorders(gfx::Rect()));
+  EXPECT_RECT_EQ(gfx::Rect(),
+                 empty_max_texture_size.ExpandRectToTileBoundsWithBorders(
+                     gfx::Rect(100, 100, 100, 100)));
+  EXPECT_RECT_EQ(gfx::Rect(),
+                 empty_max_texture_size.ExpandRectToTileBoundsWithBorders(
+                     gfx::Rect(0, 0, 100, 100)));
+}
+
+TEST_P(TilingDataTest, ExpandRectToTileBoundsWithBorders) {
+  gfx::Point origin = GetParam();
+  TilingData data(gfx::Size(4, 4), gfx::Rect(origin, gfx::Size(16, 32)), true);
+
+  // Small rect at origin rounds up to tile 0, 0.
+  gfx::Rect at_origin_src(origin, gfx::Size(1, 1));
+  gfx::Rect at_origin_result(data.TileBoundsWithBorder(0, 0));
+  EXPECT_NE(at_origin_src, at_origin_result);
+  EXPECT_RECT_EQ(at_origin_result,
+                 data.ExpandRectToTileBoundsWithBorders(at_origin_src));
+
+  // Arbitrary internal rect.
+  gfx::Rect rect_src(origin.x() + 6, origin.y() + 6, 1, 3);
+  // Tile 2, 2 => gfx::Rect(4, 4, 4, 4)
+  // Tile 3, 4 => gfx::Rect(6, 8, 4, 4)
+  gfx::Rect rect_result(gfx::UnionRects(data.TileBoundsWithBorder(2, 2),
+                                        data.TileBoundsWithBorder(3, 4)));
+  EXPECT_NE(rect_src, rect_result);
+  EXPECT_RECT_EQ(rect_result, data.ExpandRectToTileBoundsWithBorders(rect_src));
+
+  // On tile bounds rounds up to next tile (since border overlaps).
+  gfx::Rect border_rect_src(
+      gfx::UnionRects(data.TileBounds(1, 2), data.TileBounds(3, 4)));
+  gfx::Rect border_rect_result(gfx::UnionRects(
+      data.TileBoundsWithBorder(0, 1), data.TileBoundsWithBorder(4, 5)));
+  EXPECT_RECT_EQ(border_rect_result,
+                 data.ExpandRectToTileBoundsWithBorders(border_rect_src));
+
+  // Equal to tiling rect.
+  EXPECT_RECT_EQ(data.tiling_rect(),
+                 data.ExpandRectToTileBoundsWithBorders(data.tiling_rect()));
+
+  // Containing, but larger than tiling rect.
+  EXPECT_RECT_EQ(data.tiling_rect(),
+                 data.ExpandRectToTileBoundsWithBorders(
+                     gfx::Rect(origin, gfx::Size(100, 100))));
+
+  // Non-intersecting with tiling rect.
+  gfx::Rect non_intersect(origin.x() + 200, origin.y() + 200, 100, 100);
+  EXPECT_FALSE(non_intersect.Intersects(data.tiling_rect()));
+  EXPECT_RECT_EQ(gfx::Rect(),
+                 data.ExpandRectToTileBoundsWithBorders(non_intersect));
+}
+
+TEST_P(TilingDataTest, Assignment) {
+  gfx::Point origin = GetParam();
+
   {
-    TilingData source(gfx::Size(8, 8), gfx::Size(16, 32), true);
+    TilingData source(
+        gfx::Size(8, 8), gfx::Rect(origin, gfx::Size(16, 32)), true);
     TilingData dest = source;
     EXPECT_EQ(source.border_texels(), dest.border_texels());
     EXPECT_EQ(source.max_texture_size(), dest.max_texture_size());
     EXPECT_EQ(source.num_tiles_x(), dest.num_tiles_x());
     EXPECT_EQ(source.num_tiles_y(), dest.num_tiles_y());
-    EXPECT_EQ(source.total_size().width(), dest.total_size().width());
-    EXPECT_EQ(source.total_size().height(), dest.total_size().height());
+    EXPECT_EQ(source.tiling_rect().x(), dest.tiling_rect().x());
+    EXPECT_EQ(source.tiling_rect().y(), dest.tiling_rect().y());
+    EXPECT_EQ(source.tiling_rect().width(), dest.tiling_rect().width());
+    EXPECT_EQ(source.tiling_rect().height(), dest.tiling_rect().height());
   }
   {
-    TilingData source(gfx::Size(7, 3), gfx::Size(6, 100), false);
+    TilingData source(
+        gfx::Size(7, 3), gfx::Rect(origin, gfx::Size(6, 100)), false);
     TilingData dest(source);
     EXPECT_EQ(source.border_texels(), dest.border_texels());
     EXPECT_EQ(source.max_texture_size(), dest.max_texture_size());
     EXPECT_EQ(source.num_tiles_x(), dest.num_tiles_x());
     EXPECT_EQ(source.num_tiles_y(), dest.num_tiles_y());
-    EXPECT_EQ(source.total_size().width(), dest.total_size().width());
-    EXPECT_EQ(source.total_size().height(), dest.total_size().height());
+    EXPECT_EQ(source.tiling_rect().x(), dest.tiling_rect().x());
+    EXPECT_EQ(source.tiling_rect().y(), dest.tiling_rect().y());
+    EXPECT_EQ(source.tiling_rect().width(), dest.tiling_rect().width());
+    EXPECT_EQ(source.tiling_rect().height(), dest.tiling_rect().height());
   }
 }
 
-TEST(TilingDataTest, SetBorderTexels) {
-  TilingData data(gfx::Size(8, 8), gfx::Size(16, 32), false);
+TEST_P(TilingDataTest, SetBorderTexels) {
+  gfx::Point origin = GetParam();
+
+  TilingData data(gfx::Size(8, 8), gfx::Rect(origin, gfx::Size(16, 32)), false);
   EXPECT_EQ(2, data.num_tiles_x());
   EXPECT_EQ(4, data.num_tiles_y());
 
@@ -814,17 +2246,16 @@
   EXPECT_EQ(3, data.num_tiles_x());
   EXPECT_EQ(5, data.num_tiles_y());
 
-  data.SetHasBorderTexels(true);
-  EXPECT_EQ(3, data.num_tiles_x());
-  EXPECT_EQ(5, data.num_tiles_y());
-
   data.SetHasBorderTexels(false);
   EXPECT_EQ(2, data.num_tiles_x());
   EXPECT_EQ(4, data.num_tiles_y());
 }
 
-TEST(TilingDataTest, LargeBorders) {
-  TilingData data(gfx::Size(100, 80), gfx::Size(200, 145), 30);
+TEST_P(TilingDataTest, LargeBorders) {
+  gfx::Point origin = GetParam();
+
+  TilingData data(
+      gfx::Size(100, 80), gfx::Rect(origin, gfx::Size(200, 145)), 30);
   EXPECT_EQ(30, data.border_texels());
 
   EXPECT_EQ(70, data.TileSizeX(0));
@@ -840,77 +2271,87 @@
   EXPECT_EQ(35, data.TileSizeY(4));
   EXPECT_EQ(5, data.num_tiles_y());
 
-  EXPECT_RECT_EQ(gfx::Rect(0, 0, 70, 50), data.TileBounds(0, 0));
-  EXPECT_RECT_EQ(gfx::Rect(70, 50, 40, 20), data.TileBounds(1, 1));
-  EXPECT_RECT_EQ(gfx::Rect(110, 110, 40, 35), data.TileBounds(2, 4));
-  EXPECT_RECT_EQ(gfx::Rect(150, 70, 50, 20), data.TileBounds(3, 2));
-  EXPECT_RECT_EQ(gfx::Rect(150, 110, 50, 35), data.TileBounds(3, 4));
+  EXPECT_RECT_EQ(gfx::Rect(origin.x() + 0, origin.y() + 0, 70, 50),
+                 data.TileBounds(0, 0));
+  EXPECT_RECT_EQ(gfx::Rect(origin.x() + 70, origin.y() + 50, 40, 20),
+                 data.TileBounds(1, 1));
+  EXPECT_RECT_EQ(gfx::Rect(origin.x() + 110, origin.y() + 110, 40, 35),
+                 data.TileBounds(2, 4));
+  EXPECT_RECT_EQ(gfx::Rect(origin.x() + 150, origin.y() + 70, 50, 20),
+                 data.TileBounds(3, 2));
+  EXPECT_RECT_EQ(gfx::Rect(origin.x() + 150, origin.y() + 110, 50, 35),
+                 data.TileBounds(3, 4));
 
-  EXPECT_RECT_EQ(gfx::Rect(0, 0, 100, 80), data.TileBoundsWithBorder(0, 0));
-  EXPECT_RECT_EQ(gfx::Rect(40, 20, 100, 80), data.TileBoundsWithBorder(1, 1));
-  EXPECT_RECT_EQ(gfx::Rect(80, 80, 100, 65), data.TileBoundsWithBorder(2, 4));
-  EXPECT_RECT_EQ(gfx::Rect(120, 40, 80, 80), data.TileBoundsWithBorder(3, 2));
-  EXPECT_RECT_EQ(gfx::Rect(120, 80, 80, 65), data.TileBoundsWithBorder(3, 4));
+  EXPECT_RECT_EQ(gfx::Rect(origin.x() + 0, origin.y() + 0, 100, 80),
+                 data.TileBoundsWithBorder(0, 0));
+  EXPECT_RECT_EQ(gfx::Rect(origin.x() + 40, origin.y() + 20, 100, 80),
+                 data.TileBoundsWithBorder(1, 1));
+  EXPECT_RECT_EQ(gfx::Rect(origin.x() + 80, origin.y() + 80, 100, 65),
+                 data.TileBoundsWithBorder(2, 4));
+  EXPECT_RECT_EQ(gfx::Rect(origin.x() + 120, origin.y() + 40, 80, 80),
+                 data.TileBoundsWithBorder(3, 2));
+  EXPECT_RECT_EQ(gfx::Rect(origin.x() + 120, origin.y() + 80, 80, 65),
+                 data.TileBoundsWithBorder(3, 4));
 
-  EXPECT_EQ(0, data.TileXIndexFromSrcCoord(0));
-  EXPECT_EQ(0, data.TileXIndexFromSrcCoord(69));
-  EXPECT_EQ(1, data.TileXIndexFromSrcCoord(70));
-  EXPECT_EQ(1, data.TileXIndexFromSrcCoord(109));
-  EXPECT_EQ(2, data.TileXIndexFromSrcCoord(110));
-  EXPECT_EQ(2, data.TileXIndexFromSrcCoord(149));
-  EXPECT_EQ(3, data.TileXIndexFromSrcCoord(150));
-  EXPECT_EQ(3, data.TileXIndexFromSrcCoord(199));
+  EXPECT_EQ(0, data.TileXIndexFromSrcCoord(origin.x() + 0));
+  EXPECT_EQ(0, data.TileXIndexFromSrcCoord(origin.x() + 69));
+  EXPECT_EQ(1, data.TileXIndexFromSrcCoord(origin.x() + 70));
+  EXPECT_EQ(1, data.TileXIndexFromSrcCoord(origin.x() + 109));
+  EXPECT_EQ(2, data.TileXIndexFromSrcCoord(origin.x() + 110));
+  EXPECT_EQ(2, data.TileXIndexFromSrcCoord(origin.x() + 149));
+  EXPECT_EQ(3, data.TileXIndexFromSrcCoord(origin.x() + 150));
+  EXPECT_EQ(3, data.TileXIndexFromSrcCoord(origin.x() + 199));
 
-  EXPECT_EQ(0, data.TileYIndexFromSrcCoord(0));
-  EXPECT_EQ(0, data.TileYIndexFromSrcCoord(49));
-  EXPECT_EQ(1, data.TileYIndexFromSrcCoord(50));
-  EXPECT_EQ(1, data.TileYIndexFromSrcCoord(69));
-  EXPECT_EQ(2, data.TileYIndexFromSrcCoord(70));
-  EXPECT_EQ(2, data.TileYIndexFromSrcCoord(89));
-  EXPECT_EQ(3, data.TileYIndexFromSrcCoord(90));
-  EXPECT_EQ(3, data.TileYIndexFromSrcCoord(109));
-  EXPECT_EQ(4, data.TileYIndexFromSrcCoord(110));
-  EXPECT_EQ(4, data.TileYIndexFromSrcCoord(144));
+  EXPECT_EQ(0, data.TileYIndexFromSrcCoord(origin.y() + 0));
+  EXPECT_EQ(0, data.TileYIndexFromSrcCoord(origin.y() + 49));
+  EXPECT_EQ(1, data.TileYIndexFromSrcCoord(origin.y() + 50));
+  EXPECT_EQ(1, data.TileYIndexFromSrcCoord(origin.y() + 69));
+  EXPECT_EQ(2, data.TileYIndexFromSrcCoord(origin.y() + 70));
+  EXPECT_EQ(2, data.TileYIndexFromSrcCoord(origin.y() + 89));
+  EXPECT_EQ(3, data.TileYIndexFromSrcCoord(origin.y() + 90));
+  EXPECT_EQ(3, data.TileYIndexFromSrcCoord(origin.y() + 109));
+  EXPECT_EQ(4, data.TileYIndexFromSrcCoord(origin.y() + 110));
+  EXPECT_EQ(4, data.TileYIndexFromSrcCoord(origin.y() + 144));
 
-  EXPECT_EQ(0, data.FirstBorderTileXIndexFromSrcCoord(0));
-  EXPECT_EQ(0, data.FirstBorderTileXIndexFromSrcCoord(99));
-  EXPECT_EQ(1, data.FirstBorderTileXIndexFromSrcCoord(100));
-  EXPECT_EQ(1, data.FirstBorderTileXIndexFromSrcCoord(139));
-  EXPECT_EQ(2, data.FirstBorderTileXIndexFromSrcCoord(140));
-  EXPECT_EQ(2, data.FirstBorderTileXIndexFromSrcCoord(179));
-  EXPECT_EQ(3, data.FirstBorderTileXIndexFromSrcCoord(180));
-  EXPECT_EQ(3, data.FirstBorderTileXIndexFromSrcCoord(199));
+  EXPECT_EQ(0, data.FirstBorderTileXIndexFromSrcCoord(origin.x() + 0));
+  EXPECT_EQ(0, data.FirstBorderTileXIndexFromSrcCoord(origin.x() + 99));
+  EXPECT_EQ(1, data.FirstBorderTileXIndexFromSrcCoord(origin.x() + 100));
+  EXPECT_EQ(1, data.FirstBorderTileXIndexFromSrcCoord(origin.x() + 139));
+  EXPECT_EQ(2, data.FirstBorderTileXIndexFromSrcCoord(origin.x() + 140));
+  EXPECT_EQ(2, data.FirstBorderTileXIndexFromSrcCoord(origin.x() + 179));
+  EXPECT_EQ(3, data.FirstBorderTileXIndexFromSrcCoord(origin.x() + 180));
+  EXPECT_EQ(3, data.FirstBorderTileXIndexFromSrcCoord(origin.x() + 199));
 
-  EXPECT_EQ(0, data.FirstBorderTileYIndexFromSrcCoord(0));
-  EXPECT_EQ(0, data.FirstBorderTileYIndexFromSrcCoord(79));
-  EXPECT_EQ(1, data.FirstBorderTileYIndexFromSrcCoord(80));
-  EXPECT_EQ(1, data.FirstBorderTileYIndexFromSrcCoord(99));
-  EXPECT_EQ(2, data.FirstBorderTileYIndexFromSrcCoord(100));
-  EXPECT_EQ(2, data.FirstBorderTileYIndexFromSrcCoord(119));
-  EXPECT_EQ(3, data.FirstBorderTileYIndexFromSrcCoord(120));
-  EXPECT_EQ(3, data.FirstBorderTileYIndexFromSrcCoord(139));
-  EXPECT_EQ(4, data.FirstBorderTileYIndexFromSrcCoord(140));
-  EXPECT_EQ(4, data.FirstBorderTileYIndexFromSrcCoord(144));
+  EXPECT_EQ(0, data.FirstBorderTileYIndexFromSrcCoord(origin.y() + 0));
+  EXPECT_EQ(0, data.FirstBorderTileYIndexFromSrcCoord(origin.y() + 79));
+  EXPECT_EQ(1, data.FirstBorderTileYIndexFromSrcCoord(origin.y() + 80));
+  EXPECT_EQ(1, data.FirstBorderTileYIndexFromSrcCoord(origin.y() + 99));
+  EXPECT_EQ(2, data.FirstBorderTileYIndexFromSrcCoord(origin.y() + 100));
+  EXPECT_EQ(2, data.FirstBorderTileYIndexFromSrcCoord(origin.y() + 119));
+  EXPECT_EQ(3, data.FirstBorderTileYIndexFromSrcCoord(origin.y() + 120));
+  EXPECT_EQ(3, data.FirstBorderTileYIndexFromSrcCoord(origin.y() + 139));
+  EXPECT_EQ(4, data.FirstBorderTileYIndexFromSrcCoord(origin.y() + 140));
+  EXPECT_EQ(4, data.FirstBorderTileYIndexFromSrcCoord(origin.y() + 144));
 
-  EXPECT_EQ(0, data.LastBorderTileXIndexFromSrcCoord(0));
-  EXPECT_EQ(0, data.LastBorderTileXIndexFromSrcCoord(39));
-  EXPECT_EQ(1, data.LastBorderTileXIndexFromSrcCoord(40));
-  EXPECT_EQ(1, data.LastBorderTileXIndexFromSrcCoord(79));
-  EXPECT_EQ(2, data.LastBorderTileXIndexFromSrcCoord(80));
-  EXPECT_EQ(2, data.LastBorderTileXIndexFromSrcCoord(119));
-  EXPECT_EQ(3, data.LastBorderTileXIndexFromSrcCoord(120));
-  EXPECT_EQ(3, data.LastBorderTileXIndexFromSrcCoord(199));
+  EXPECT_EQ(0, data.LastBorderTileXIndexFromSrcCoord(origin.x() + 0));
+  EXPECT_EQ(0, data.LastBorderTileXIndexFromSrcCoord(origin.x() + 39));
+  EXPECT_EQ(1, data.LastBorderTileXIndexFromSrcCoord(origin.x() + 40));
+  EXPECT_EQ(1, data.LastBorderTileXIndexFromSrcCoord(origin.x() + 79));
+  EXPECT_EQ(2, data.LastBorderTileXIndexFromSrcCoord(origin.x() + 80));
+  EXPECT_EQ(2, data.LastBorderTileXIndexFromSrcCoord(origin.x() + 119));
+  EXPECT_EQ(3, data.LastBorderTileXIndexFromSrcCoord(origin.x() + 120));
+  EXPECT_EQ(3, data.LastBorderTileXIndexFromSrcCoord(origin.x() + 199));
 
-  EXPECT_EQ(0, data.LastBorderTileYIndexFromSrcCoord(0));
-  EXPECT_EQ(0, data.LastBorderTileYIndexFromSrcCoord(19));
-  EXPECT_EQ(1, data.LastBorderTileYIndexFromSrcCoord(20));
-  EXPECT_EQ(1, data.LastBorderTileYIndexFromSrcCoord(39));
-  EXPECT_EQ(2, data.LastBorderTileYIndexFromSrcCoord(40));
-  EXPECT_EQ(2, data.LastBorderTileYIndexFromSrcCoord(59));
-  EXPECT_EQ(3, data.LastBorderTileYIndexFromSrcCoord(60));
-  EXPECT_EQ(3, data.LastBorderTileYIndexFromSrcCoord(79));
-  EXPECT_EQ(4, data.LastBorderTileYIndexFromSrcCoord(80));
-  EXPECT_EQ(4, data.LastBorderTileYIndexFromSrcCoord(144));
+  EXPECT_EQ(0, data.LastBorderTileYIndexFromSrcCoord(origin.y() + 0));
+  EXPECT_EQ(0, data.LastBorderTileYIndexFromSrcCoord(origin.y() + 19));
+  EXPECT_EQ(1, data.LastBorderTileYIndexFromSrcCoord(origin.y() + 20));
+  EXPECT_EQ(1, data.LastBorderTileYIndexFromSrcCoord(origin.y() + 39));
+  EXPECT_EQ(2, data.LastBorderTileYIndexFromSrcCoord(origin.y() + 40));
+  EXPECT_EQ(2, data.LastBorderTileYIndexFromSrcCoord(origin.y() + 59));
+  EXPECT_EQ(3, data.LastBorderTileYIndexFromSrcCoord(origin.y() + 60));
+  EXPECT_EQ(3, data.LastBorderTileYIndexFromSrcCoord(origin.y() + 79));
+  EXPECT_EQ(4, data.LastBorderTileYIndexFromSrcCoord(origin.y() + 80));
+  EXPECT_EQ(4, data.LastBorderTileYIndexFromSrcCoord(origin.y() + 144));
 }
 
 void TestIterate(const TilingData& data,
@@ -1027,103 +2468,237 @@
       data, rect, expect_left, expect_top, expect_right, expect_bottom);
 }
 
-TEST(TilingDataTest, IteratorNoBorderTexels) {
-  TilingData data(gfx::Size(10, 10), gfx::Size(40, 25), false);
+TEST_P(TilingDataTest, IteratorNoBorderTexels) {
+  gfx::Point origin = GetParam();
+
+  TilingData data(
+      gfx::Size(10, 10), gfx::Rect(origin, gfx::Size(40, 25)), false);
+  // The following Coordinates are relative to the origin.
   // X border index by src coord: [0-10), [10-20), [20, 30), [30, 40)
   // Y border index by src coord: [0-10), [10-20), [20, 25)
-  TestIterateAll(data, gfx::Rect(0, 0, 40, 25), 0, 0, 3, 2);
-  TestIterateAll(data, gfx::Rect(15, 15, 8, 8), 1, 1, 2, 2);
+  TestIterateAll(data, gfx::Rect(origin.x(), origin.y(), 40, 25), 0, 0, 3, 2);
+  TestIterateAll(
+      data, gfx::Rect(origin.x() + 15, origin.y() + 15, 8, 8), 1, 1, 2, 2);
 
   // Oversized.
-  TestIterateAll(data, gfx::Rect(-100, -100, 1000, 1000), 0, 0, 3, 2);
-  TestIterateAll(data, gfx::Rect(-100, 20, 1000, 1), 0, 2, 3, 2);
-  TestIterateAll(data, gfx::Rect(29, -100, 31, 1000), 2, 0, 3, 2);
+  TestIterateAll(data,
+                 gfx::Rect(origin.x() - 100, origin.y() - 100, 1000, 1000),
+                 0,
+                 0,
+                 3,
+                 2);
+  TestIterateAll(
+      data, gfx::Rect(origin.x() - 100, origin.y() + 20, 1000, 1), 0, 2, 3, 2);
+  TestIterateAll(
+      data, gfx::Rect(origin.x() + 29, origin.y() - 100, 31, 1000), 2, 0, 3, 2);
   // Nonintersecting.
-  TestIterateAll(data, gfx::Rect(60, 80, 100, 100), 0, 0, -1, -1);
+  TestIterateAll(data,
+                 gfx::Rect(origin.x() + 60, origin.y() + 80, 100, 100),
+                 0,
+                 0,
+                 -1,
+                 -1);
 }
 
-TEST(TilingDataTest, BordersIteratorOneBorderTexel) {
-  TilingData data(gfx::Size(10, 20), gfx::Size(25, 45), true);
+TEST_P(TilingDataTest, BordersIteratorOneBorderTexel) {
+  gfx::Point origin = GetParam();
+
+  TilingData data(
+      gfx::Size(10, 20), gfx::Rect(origin, gfx::Size(25, 45)), true);
+  // The following Coordinates are relative to the origin.
   // X border index by src coord: [0-10), [8-18), [16-25)
   // Y border index by src coord: [0-20), [18-38), [36-45)
-  TestIterateBorders(data, gfx::Rect(0, 0, 25, 45), 0, 0, 2, 2);
-  TestIterateBorders(data, gfx::Rect(18, 19, 3, 17), 2, 0, 2, 1);
-  TestIterateBorders(data, gfx::Rect(10, 20, 6, 16), 1, 1, 1, 1);
-  TestIterateBorders(data, gfx::Rect(9, 19, 8, 18), 0, 0, 2, 2);
+  TestIterateBorders(
+      data, gfx::Rect(origin.x(), origin.y(), 25, 45), 0, 0, 2, 2);
+  TestIterateBorders(
+      data, gfx::Rect(origin.x() + 18, origin.y() + 19, 3, 17), 2, 0, 2, 1);
+  TestIterateBorders(
+      data, gfx::Rect(origin.x() + 10, origin.y() + 20, 6, 16), 1, 1, 1, 1);
+  TestIterateBorders(
+      data, gfx::Rect(origin.x() + 9, origin.y() + 19, 8, 18), 0, 0, 2, 2);
   // Oversized.
-  TestIterateBorders(data, gfx::Rect(-100, -100, 1000, 1000), 0, 0, 2, 2);
-  TestIterateBorders(data, gfx::Rect(-100, 20, 1000, 1), 0, 1, 2, 1);
-  TestIterateBorders(data, gfx::Rect(18, -100, 6, 1000), 2, 0, 2, 2);
+  TestIterateBorders(data,
+                     gfx::Rect(origin.x() - 100, origin.y() - 100, 1000, 1000),
+                     0,
+                     0,
+                     2,
+                     2);
+  TestIterateBorders(
+      data, gfx::Rect(origin.x() - 100, origin.y() + 20, 1000, 1), 0, 1, 2, 1);
+  TestIterateBorders(
+      data, gfx::Rect(origin.x() + 18, origin.y() - 100, 6, 1000), 2, 0, 2, 2);
   // Nonintersecting.
-  TestIterateBorders(data, gfx::Rect(60, 80, 100, 100), 0, 0, -1, -1);
+  TestIterateBorders(data,
+                     gfx::Rect(origin.x() + 60, origin.y() + 80, 100, 100),
+                     0,
+                     0,
+                     -1,
+                     -1);
 }
 
-TEST(TilingDataTest, NoBordersIteratorOneBorderTexel) {
-  TilingData data(gfx::Size(10, 20), gfx::Size(25, 45), true);
+TEST_P(TilingDataTest, NoBordersIteratorOneBorderTexel) {
+  gfx::Point origin = GetParam();
+
+  TilingData data(
+      gfx::Size(10, 20), gfx::Rect(origin, gfx::Size(25, 45)), true);
+  // The following Coordinates are relative to the origin.
   // X index by src coord: [0-9), [9-17), [17-25)
   // Y index by src coord: [0-19), [19-37), [37-45)
-  TestIterateNoBorders(data, gfx::Rect(0, 0, 25, 45), 0, 0, 2, 2);
-  TestIterateNoBorders(data, gfx::Rect(17, 19, 3, 18), 2, 1, 2, 1);
-  TestIterateNoBorders(data, gfx::Rect(17, 19, 3, 19), 2, 1, 2, 2);
-  TestIterateNoBorders(data, gfx::Rect(8, 18, 9, 19), 0, 0, 1, 1);
-  TestIterateNoBorders(data, gfx::Rect(9, 19, 9, 19), 1, 1, 2, 2);
+  TestIterateNoBorders(
+      data, gfx::Rect(origin.x(), origin.y(), 25, 45), 0, 0, 2, 2);
+  TestIterateNoBorders(
+      data, gfx::Rect(origin.x() + 17, origin.y() + 19, 3, 18), 2, 1, 2, 1);
+  TestIterateNoBorders(
+      data, gfx::Rect(origin.x() + 17, origin.y() + 19, 3, 19), 2, 1, 2, 2);
+  TestIterateNoBorders(
+      data, gfx::Rect(origin.x() + 8, origin.y() + 18, 9, 19), 0, 0, 1, 1);
+  TestIterateNoBorders(
+      data, gfx::Rect(origin.x() + 9, origin.y() + 19, 9, 19), 1, 1, 2, 2);
   // Oversized.
-  TestIterateNoBorders(data, gfx::Rect(-100, -100, 1000, 1000), 0, 0, 2, 2);
-  TestIterateNoBorders(data, gfx::Rect(-100, 20, 1000, 1), 0, 1, 2, 1);
-  TestIterateNoBorders(data, gfx::Rect(18, -100, 6, 1000), 2, 0, 2, 2);
+  TestIterateNoBorders(
+      data,
+      gfx::Rect(origin.x() - 100, origin.y() - 100, 1000, 1000),
+      0,
+      0,
+      2,
+      2);
+  TestIterateNoBorders(
+      data, gfx::Rect(origin.x() - 100, origin.y() + 20, 1000, 1), 0, 1, 2, 1);
+  TestIterateNoBorders(
+      data, gfx::Rect(origin.x() + 18, origin.y() - 100, 6, 1000), 2, 0, 2, 2);
   // Nonintersecting.
-  TestIterateNoBorders(data, gfx::Rect(60, 80, 100, 100), 0, 0, -1, -1);
+  TestIterateNoBorders(data,
+                       gfx::Rect(origin.x() + 60, origin.y() + 80, 100, 100),
+                       0,
+                       0,
+                       -1,
+                       -1);
 }
 
-TEST(TilingDataTest, BordersIteratorManyBorderTexels) {
-  TilingData data(gfx::Size(50, 60), gfx::Size(65, 110), 20);
+TEST_P(TilingDataTest, BordersIteratorManyBorderTexels) {
+  gfx::Point origin = GetParam();
+
+  TilingData data(gfx::Size(50, 60), gfx::Rect(origin, gfx::Size(65, 110)), 20);
+  // The following Coordinates are relative to the origin.
   // X border index by src coord: [0-50), [10-60), [20-65)
   // Y border index by src coord: [0-60), [20-80), [40-100), [60-110)
-  TestIterateBorders(data, gfx::Rect(0, 0, 65, 110), 0, 0, 2, 3);
-  TestIterateBorders(data, gfx::Rect(50, 60, 15, 65), 1, 1, 2, 3);
-  TestIterateBorders(data, gfx::Rect(60, 30, 2, 10), 2, 0, 2, 1);
+  TestIterateBorders(
+      data, gfx::Rect(origin.x(), origin.y(), 65, 110), 0, 0, 2, 3);
+  TestIterateBorders(
+      data, gfx::Rect(origin.x() + 50, origin.y() + 60, 15, 65), 1, 1, 2, 3);
+  TestIterateBorders(
+      data, gfx::Rect(origin.x() + 60, origin.y() + 30, 2, 10), 2, 0, 2, 1);
   // Oversized.
-  TestIterateBorders(data, gfx::Rect(-100, -100, 1000, 1000), 0, 0, 2, 3);
-  TestIterateBorders(data, gfx::Rect(-100, 10, 1000, 10), 0, 0, 2, 0);
-  TestIterateBorders(data, gfx::Rect(10, -100, 10, 1000), 0, 0, 1, 3);
+  TestIterateBorders(data,
+                     gfx::Rect(origin.x() - 100, origin.y() - 100, 1000, 1000),
+                     0,
+                     0,
+                     2,
+                     3);
+  TestIterateBorders(
+      data, gfx::Rect(origin.x() - 100, origin.y() + 10, 1000, 10), 0, 0, 2, 0);
+  TestIterateBorders(
+      data, gfx::Rect(origin.x() + 10, origin.y() - 100, 10, 1000), 0, 0, 1, 3);
   // Nonintersecting.
-  TestIterateBorders(data, gfx::Rect(65, 110, 100, 100), 0, 0, -1, -1);
+  TestIterateBorders(data,
+                     gfx::Rect(origin.x() + 65, origin.y() + 110, 100, 100),
+                     0,
+                     0,
+                     -1,
+                     -1);
 }
 
-TEST(TilingDataTest, NoBordersIteratorManyBorderTexels) {
-  TilingData data(gfx::Size(50, 60), gfx::Size(65, 110), 20);
+TEST_P(TilingDataTest, NoBordersIteratorManyBorderTexels) {
+  gfx::Point origin = GetParam();
+
+  TilingData data(gfx::Size(50, 60), gfx::Rect(origin, gfx::Size(65, 110)), 20);
+  // The following Coordinates are relative to the origin.
   // X index by src coord: [0-30), [30-40), [40, 65)
   // Y index by src coord: [0-40), [40-60), [60, 80), [80-110)
-  TestIterateNoBorders(data, gfx::Rect(0, 0, 65, 110), 0, 0, 2, 3);
-  TestIterateNoBorders(data, gfx::Rect(30, 40, 15, 65), 1, 1, 2, 3);
-  TestIterateNoBorders(data, gfx::Rect(60, 20, 2, 21), 2, 0, 2, 1);
+  TestIterateNoBorders(
+      data, gfx::Rect(origin.x(), origin.y(), 65, 110), 0, 0, 2, 3);
+  TestIterateNoBorders(
+      data, gfx::Rect(origin.x() + 30, origin.y() + 40, 15, 65), 1, 1, 2, 3);
+  TestIterateNoBorders(
+      data, gfx::Rect(origin.x() + 60, origin.y() + 20, 2, 21), 2, 0, 2, 1);
   // Oversized.
-  TestIterateNoBorders(data, gfx::Rect(-100, -100, 1000, 1000), 0, 0, 2, 3);
-  TestIterateNoBorders(data, gfx::Rect(-100, 10, 1000, 10), 0, 0, 2, 0);
-  TestIterateNoBorders(data, gfx::Rect(10, -100, 10, 1000), 0, 0, 0, 3);
+  TestIterateNoBorders(
+      data,
+      gfx::Rect(origin.x() - 100, origin.y() - 100, 1000, 1000),
+      0,
+      0,
+      2,
+      3);
+  TestIterateNoBorders(
+      data, gfx::Rect(origin.x() - 100, origin.y() + 10, 1000, 10), 0, 0, 2, 0);
+  TestIterateNoBorders(
+      data, gfx::Rect(origin.x() + 10, origin.y() - 100, 10, 1000), 0, 0, 0, 3);
   // Nonintersecting.
-  TestIterateNoBorders(data, gfx::Rect(65, 110, 100, 100), 0, 0, -1, -1);
+  TestIterateNoBorders(data,
+                       gfx::Rect(origin.x() + 65, origin.y() + 110, 100, 100),
+                       0,
+                       0,
+                       -1,
+                       -1);
 }
 
-TEST(TilingDataTest, IteratorOneTile) {
-  TilingData no_border(gfx::Size(1000, 1000), gfx::Size(30, 40), false);
-  TestIterateAll(no_border, gfx::Rect(0, 0, 30, 40), 0, 0, 0, 0);
-  TestIterateAll(no_border, gfx::Rect(10, 10, 20, 20), 0, 0, 0, 0);
-  TestIterateAll(no_border, gfx::Rect(30, 40, 100, 100), 0, 0, -1, -1);
+TEST_P(TilingDataTest, IteratorOneTile) {
+  gfx::Point origin = GetParam();
 
-  TilingData one_border(gfx::Size(1000, 1000), gfx::Size(30, 40), true);
-  TestIterateAll(one_border, gfx::Rect(0, 0, 30, 40), 0, 0, 0, 0);
-  TestIterateAll(one_border, gfx::Rect(10, 10, 20, 20), 0, 0, 0, 0);
-  TestIterateAll(one_border, gfx::Rect(30, 40, 100, 100), 0, 0, -1, -1);
+  TilingData no_border(
+      gfx::Size(1000, 1000), gfx::Rect(origin, gfx::Size(30, 40)), false);
+  TestIterateAll(
+      no_border, gfx::Rect(origin.x(), origin.y(), 30, 40), 0, 0, 0, 0);
+  TestIterateAll(no_border,
+                 gfx::Rect(origin.x() + 10, origin.y() + 10, 20, 20),
+                 0,
+                 0,
+                 0,
+                 0);
+  TestIterateAll(no_border,
+                 gfx::Rect(origin.x() + 30, origin.y() + 40, 100, 100),
+                 0,
+                 0,
+                 -1,
+                 -1);
 
-  TilingData big_border(gfx::Size(1000, 1000), gfx::Size(30, 40), 50);
-  TestIterateAll(big_border, gfx::Rect(0, 0, 30, 40), 0, 0, 0, 0);
-  TestIterateAll(big_border, gfx::Rect(10, 10, 20, 20), 0, 0, 0, 0);
-  TestIterateAll(big_border, gfx::Rect(30, 40, 100, 100), 0, 0, -1, -1);
+  TilingData one_border(
+      gfx::Size(1000, 1000), gfx::Rect(origin, gfx::Size(30, 40)), true);
+  TestIterateAll(
+      one_border, gfx::Rect(origin.x(), origin.y(), 30, 40), 0, 0, 0, 0);
+  TestIterateAll(one_border,
+                 gfx::Rect(origin.x() + 10, origin.y() + 10, 20, 20),
+                 0,
+                 0,
+                 0,
+                 0);
+  TestIterateAll(one_border,
+                 gfx::Rect(origin.x() + 30, origin.y() + 40, 100, 100),
+                 0,
+                 0,
+                 -1,
+                 -1);
+
+  TilingData big_border(
+      gfx::Size(1000, 1000), gfx::Rect(origin, gfx::Size(30, 40)), 50);
+  TestIterateAll(
+      big_border, gfx::Rect(origin.x(), origin.y(), 30, 40), 0, 0, 0, 0);
+  TestIterateAll(big_border,
+                 gfx::Rect(origin.x() + 10, origin.y() + 10, 20, 20),
+                 0,
+                 0,
+                 0,
+                 0);
+  TestIterateAll(big_border,
+                 gfx::Rect(origin.x() + 30, origin.y() + 40, 100, 100),
+                 0,
+                 0,
+                 -1,
+                 -1);
 }
 
 TEST(TilingDataTest, IteratorNoTiles) {
-  TilingData data(gfx::Size(100, 100), gfx::Size(), false);
+  TilingData data(gfx::Size(100, 100), gfx::Rect(), false);
   TestIterateAll(data, gfx::Rect(0, 0, 100, 100), 0, 0, -1, -1);
 }
 
@@ -1161,89 +2736,176 @@
   EXPECT_EQ(0u, expected.size());
 }
 
-TEST(TilingDataTest, DifferenceIteratorIgnoreGeometry) {
+TEST_P(TilingDataTest, DifferenceIteratorIgnoreGeometry) {
   // This test is checking that the iterator can handle different geometries of
   // ignore rects relative to the consider rect.  The consider rect indices
   // themselves are mostly tested by the non-difference iterator tests, so the
   // full rect is mostly used here for simplicity.
 
+  gfx::Point origin = GetParam();
+
+  // The following Coordinates are relative to the origin.
   // X border index by src coord: [0-10), [10-20), [20, 30), [30, 40)
   // Y border index by src coord: [0-10), [10-20), [20, 25)
-  TilingData data(gfx::Size(10, 10), gfx::Size(40, 25), false);
+  TilingData data(
+      gfx::Size(10, 10), gfx::Rect(origin, gfx::Size(40, 25)), false);
 
   // Fully ignored
-  TestDiff(data, gfx::Rect(0, 0, 40, 25), gfx::Rect(0, 0, 40, 25), 0);
-  TestDiff(data, gfx::Rect(0, 0, 40, 25), gfx::Rect(-100, -100, 200, 200), 0);
-  TestDiff(data, gfx::Rect(0, 0, 40, 25), gfx::Rect(9, 9, 30, 15), 0);
-  TestDiff(data, gfx::Rect(15, 15, 8, 8), gfx::Rect(15, 15, 8, 8), 0);
+  TestDiff(data,
+           gfx::Rect(origin.x(), origin.y(), 40, 25),
+           gfx::Rect(origin.x(), origin.y(), 40, 25),
+           0);
+  TestDiff(data,
+           gfx::Rect(origin.x(), origin.y(), 40, 25),
+           gfx::Rect(origin.x() - 100, origin.y() - 100, 200, 200),
+           0);
+  TestDiff(data,
+           gfx::Rect(origin.x(), origin.y(), 40, 25),
+           gfx::Rect(origin.x() + 9, origin.y() + 9, 30, 15),
+           0);
+  TestDiff(data,
+           gfx::Rect(origin.x() + 15, origin.y() + 15, 8, 8),
+           gfx::Rect(origin.x() + 15, origin.y() + 15, 8, 8),
+           0);
 
   // Fully un-ignored
-  TestDiff(data, gfx::Rect(0, 0, 40, 25), gfx::Rect(-30, -20, 8, 8), 12);
-  TestDiff(data, gfx::Rect(0, 0, 40, 25), gfx::Rect(), 12);
+  TestDiff(data,
+           gfx::Rect(origin.x(), origin.y(), 40, 25),
+           gfx::Rect(origin.x() - 30, origin.y() - 20, 8, 8),
+           12);
+  TestDiff(data, gfx::Rect(origin.x(), origin.y(), 40, 25), gfx::Rect(), 12);
 
   // Top left, remove 2x2 tiles
-  TestDiff(data, gfx::Rect(0, 0, 40, 25), gfx::Rect(0, 0, 20, 19), 8);
+  TestDiff(data,
+           gfx::Rect(origin.x(), origin.y(), 40, 25),
+           gfx::Rect(origin.x(), origin.y(), 20, 19),
+           8);
   // Bottom right, remove 2x2 tiles
-  TestDiff(data, gfx::Rect(0, 0, 40, 25), gfx::Rect(20, 15, 20, 6), 8);
+  TestDiff(data,
+           gfx::Rect(origin.x(), origin.y(), 40, 25),
+           gfx::Rect(origin.x() + 20, origin.y() + 15, 20, 6),
+           8);
   // Bottom left, remove 2x2 tiles
-  TestDiff(data, gfx::Rect(0, 0, 40, 25), gfx::Rect(0, 15, 20, 6), 8);
+  TestDiff(data,
+           gfx::Rect(origin.x(), origin.y(), 40, 25),
+           gfx::Rect(origin.x(), origin.y() + 15, 20, 6),
+           8);
   // Top right, remove 2x2 tiles
-  TestDiff(data, gfx::Rect(0, 0, 40, 25), gfx::Rect(20, 0, 20, 19), 8);
+  TestDiff(data,
+           gfx::Rect(origin.x(), origin.y(), 40, 25),
+           gfx::Rect(origin.x() + 20, origin.y(), 20, 19),
+           8);
   // Center, remove only one tile
-  TestDiff(data, gfx::Rect(0, 0, 40, 25), gfx::Rect(10, 10, 5, 5), 11);
+  TestDiff(data,
+           gfx::Rect(origin.x(), origin.y(), 40, 25),
+           gfx::Rect(origin.x() + 10, origin.y() + 10, 5, 5),
+           11);
 
   // Left column, flush left, removing two columns
-  TestDiff(data, gfx::Rect(0, 0, 40, 25), gfx::Rect(0, 0, 11, 25), 6);
+  TestDiff(data,
+           gfx::Rect(origin.x(), origin.y(), 40, 25),
+           gfx::Rect(origin.x(), origin.y(), 11, 25),
+           6);
   // Middle column, removing two columns
-  TestDiff(data, gfx::Rect(0, 0, 40, 25), gfx::Rect(11, 0, 11, 25), 6);
+  TestDiff(data,
+           gfx::Rect(origin.x(), origin.y(), 40, 25),
+           gfx::Rect(origin.x() + 11, origin.y(), 11, 25),
+           6);
   // Right column, flush right, removing one column
-  TestDiff(data, gfx::Rect(0, 0, 40, 25), gfx::Rect(30, 0, 2, 25), 9);
+  TestDiff(data,
+           gfx::Rect(origin.x(), origin.y(), 40, 25),
+           gfx::Rect(origin.x() + 30, origin.y(), 2, 25),
+           9);
 
   // Top row, flush top, removing one row
-  TestDiff(data, gfx::Rect(0, 0, 40, 25), gfx::Rect(0, 5, 40, 5), 8);
+  TestDiff(data,
+           gfx::Rect(origin.x(), origin.y(), 40, 25),
+           gfx::Rect(origin.x(), origin.y() + 5, 40, 5),
+           8);
   // Middle row, removing one row
-  TestDiff(data, gfx::Rect(0, 0, 40, 25), gfx::Rect(0, 13, 40, 5), 8);
+  TestDiff(data,
+           gfx::Rect(origin.x(), origin.y(), 40, 25),
+           gfx::Rect(origin.x(), origin.y() + 13, 40, 5),
+           8);
   // Bottom row, flush bottom, removing two rows
-  TestDiff(data, gfx::Rect(0, 0, 40, 25), gfx::Rect(0, 13, 40, 12), 4);
+  TestDiff(data,
+           gfx::Rect(origin.x(), origin.y(), 40, 25),
+           gfx::Rect(origin.x(), origin.y() + 13, 40, 12),
+           4);
 
   // Non-intersecting, but still touching two of the same tiles.
-  TestDiff(data, gfx::Rect(8, 0, 32, 25), gfx::Rect(0, 12, 5, 12), 10);
+  TestDiff(data,
+           gfx::Rect(origin.x() + 8, origin.y(), 32, 25),
+           gfx::Rect(origin.x(), origin.y() + 12, 5, 12),
+           10);
 
   // Intersecting, but neither contains the other. 2x3 with one overlap.
-  TestDiff(data, gfx::Rect(5, 2, 20, 10), gfx::Rect(25, 15, 5, 10), 5);
+  TestDiff(data,
+           gfx::Rect(origin.x() + 5, origin.y() + 2, 20, 10),
+           gfx::Rect(origin.x() + 25, origin.y() + 15, 5, 10),
+           5);
 }
 
-TEST(TilingDataTest, DifferenceIteratorManyBorderTexels) {
+TEST_P(TilingDataTest, DifferenceIteratorManyBorderTexels) {
+  gfx::Point origin = GetParam();
+
+  // The following Coordinates are relative to the origin.
   // X border index by src coord: [0-50), [10-60), [20-65)
   // Y border index by src coord: [0-60), [20-80), [40-100), [60-110)
-  TilingData data(gfx::Size(50, 60), gfx::Size(65, 110), 20);
+  TilingData data(gfx::Size(50, 60), gfx::Rect(origin, gfx::Size(65, 110)), 20);
 
   // Ignore one column, three rows
-  TestDiff(data, gfx::Rect(0, 30, 55, 80), gfx::Rect(5, 30, 5, 15), 9);
+  TestDiff(data,
+           gfx::Rect(origin.x(), origin.y() + 30, 55, 80),
+           gfx::Rect(origin.x() + 5, origin.y() + 30, 5, 15),
+           9);
 
   // Knock out three columns, leaving only one.
-  TestDiff(data, gfx::Rect(10, 30, 55, 80), gfx::Rect(30, 59, 20, 1), 3);
+  TestDiff(data,
+           gfx::Rect(origin.x() + 10, origin.y() + 30, 55, 80),
+           gfx::Rect(origin.x() + 30, origin.y() + 59, 20, 1),
+           3);
 
   // Overlap all tiles with ignore rect.
-  TestDiff(data, gfx::Rect(0, 0, 65, 110), gfx::Rect(30, 59, 1, 2), 0);
+  TestDiff(data,
+           gfx::Rect(origin.x(), origin.y(), 65, 110),
+           gfx::Rect(origin.x() + 30, origin.y() + 59, 1, 2),
+           0);
 }
 
-TEST(TilingDataTest, DifferenceIteratorOneTile) {
-  TilingData no_border(gfx::Size(1000, 1000), gfx::Size(30, 40), false);
-  TestDiff(no_border, gfx::Rect(0, 0, 30, 40), gfx::Rect(), 1);
-  TestDiff(no_border, gfx::Rect(5, 5, 100, 100), gfx::Rect(5, 5, 1, 1), 0);
+TEST_P(TilingDataTest, DifferenceIteratorOneTile) {
+  gfx::Point origin = GetParam();
 
-  TilingData one_border(gfx::Size(1000, 1000), gfx::Size(30, 40), true);
-  TestDiff(one_border, gfx::Rect(0, 0, 30, 40), gfx::Rect(), 1);
-  TestDiff(one_border, gfx::Rect(5, 5, 100, 100), gfx::Rect(5, 5, 1, 1), 0);
+  TilingData no_border(
+      gfx::Size(1000, 1000), gfx::Rect(origin, gfx::Size(30, 40)), false);
+  TestDiff(
+      no_border, gfx::Rect(origin.x(), origin.y(), 30, 40), gfx::Rect(), 1);
+  TestDiff(no_border,
+           gfx::Rect(origin.x() + 5, origin.y() + 5, 100, 100),
+           gfx::Rect(origin.x() + 5, origin.y() + 5, 1, 1),
+           0);
 
-  TilingData big_border(gfx::Size(1000, 1000), gfx::Size(30, 40), 50);
-  TestDiff(big_border, gfx::Rect(0, 0, 30, 40), gfx::Rect(), 1);
-  TestDiff(big_border, gfx::Rect(5, 5, 100, 100), gfx::Rect(5, 5, 1, 1), 0);
+  TilingData one_border(
+      gfx::Size(1000, 1000), gfx::Rect(origin, gfx::Size(30, 40)), true);
+  TestDiff(
+      one_border, gfx::Rect(origin.x(), origin.y(), 30, 40), gfx::Rect(), 1);
+  TestDiff(one_border,
+           gfx::Rect(origin.x() + 5, origin.y() + 5, 100, 100),
+           gfx::Rect(origin.x() + 5, origin.y() + 5, 1, 1),
+           0);
+
+  TilingData big_border(
+      gfx::Size(1000, 1000), gfx::Rect(origin, gfx::Size(30, 40)), 50);
+  TestDiff(
+      big_border, gfx::Rect(origin.x(), origin.y(), 30, 40), gfx::Rect(), 1);
+  TestDiff(big_border,
+           gfx::Rect(origin.x() + 5, origin.y() + 5, 100, 100),
+           gfx::Rect(origin.x() + 5, origin.y() + 5, 1, 1),
+           0);
 }
 
 TEST(TilingDataTest, DifferenceIteratorNoTiles) {
-  TilingData data(gfx::Size(100, 100), gfx::Size(), false);
+  TilingData data(gfx::Size(100, 100), gfx::Rect(), false);
   TestDiff(data, gfx::Rect(0, 0, 100, 100), gfx::Rect(0, 0, 5, 5), 0);
 }
 
@@ -1271,14 +2933,16 @@
   }
 }
 
-TEST(TilingDataTest, SpiralDifferenceIteratorNoIgnoreFullConsider) {
-  TilingData tiling_data(gfx::Size(10, 10), gfx::Size(30, 30), false);
-  gfx::Rect consider(0, 0, 30, 30);
+TEST_P(TilingDataTest, SpiralDifferenceIteratorNoIgnoreFullConsider) {
+  gfx::Point origin = GetParam();
+  TilingData tiling_data(
+      gfx::Size(10, 10), gfx::Rect(origin, gfx::Size(30, 30)), false);
+  gfx::Rect consider(origin.x(), origin.y(), 30, 30);
   gfx::Rect ignore;
   std::vector<std::pair<int, int> > expected;
 
   // Center is in the center of the tiling.
-  gfx::Rect center(15, 15, 1, 1);
+  gfx::Rect center(origin.x() + 15, origin.y() + 15, 1, 1);
 
   // Layout of the tiling data, and expected return order:
   //   x 0 1 2
@@ -1298,7 +2962,7 @@
   TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
 
   // Center is off to the right side of the tiling (and far away).
-  center = gfx::Rect(100, 15, 1, 1);
+  center = gfx::Rect(origin.x() + 100, origin.y() + 15, 1, 1);
 
   // Layout of the tiling data, and expected return order:
   //   x 0 1 2
@@ -1320,7 +2984,7 @@
   TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
 
   // Center is the bottom right corner of the tiling.
-  center = gfx::Rect(25, 25, 1, 1);
+  center = gfx::Rect(origin.x() + 25, origin.y() + 25, 1, 1);
 
   // Layout of the tiling data, and expected return order:
   //   x 0 1 2
@@ -1341,7 +3005,7 @@
   TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
 
   // Center is off the top left side of the tiling.
-  center = gfx::Rect(-60, -50, 1, 1);
+  center = gfx::Rect(origin.x() - 60, origin.y() - 50, 1, 1);
 
   // Layout of the tiling data, and expected return order:
   // * x 0 1 2
@@ -1363,7 +3027,7 @@
   TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
 
   // Two tile center.
-  center = gfx::Rect(15, 15, 1, 10);
+  center = gfx::Rect(origin.x() + 15, origin.y() + 15, 1, 10);
 
   // Layout of the tiling data, and expected return order:
   //   x 0 1 2
@@ -1383,14 +3047,16 @@
   TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
 }
 
-TEST(TilingDataTest, SpiralDifferenceIteratorSmallConsider) {
-  TilingData tiling_data(gfx::Size(10, 10), gfx::Size(50, 50), false);
+TEST_P(TilingDataTest, SpiralDifferenceIteratorSmallConsider) {
+  gfx::Point origin = GetParam();
+  TilingData tiling_data(
+      gfx::Size(10, 10), gfx::Rect(origin, gfx::Size(50, 50)), false);
   gfx::Rect ignore;
   std::vector<std::pair<int, int> > expected;
-  gfx::Rect center(15, 15, 1, 1);
+  gfx::Rect center(origin.x() + 15, origin.y() + 15, 1, 1);
 
   // Consider is one cell.
-  gfx::Rect consider(0, 0, 1, 1);
+  gfx::Rect consider(origin.x(), origin.y(), 1, 1);
 
   // Layout of the tiling data, and expected return order:
   //   x 0 1 2 3 4
@@ -1405,7 +3071,7 @@
   TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
 
   // Consider is bottom right corner.
-  consider = gfx::Rect(25, 25, 10, 10);
+  consider = gfx::Rect(origin.x() + 25, origin.y() + 25, 10, 10);
 
   // Layout of the tiling data, and expected return order:
   //   x 0 1 2 3 4
@@ -1424,7 +3090,7 @@
   TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
 
   // Consider is one column.
-  consider = gfx::Rect(11, 0, 1, 100);
+  consider = gfx::Rect(origin.x() + 11, origin.y(), 1, 100);
 
   // Layout of the tiling data, and expected return order:
   //   x 0 1 2 3 4
@@ -1443,14 +3109,16 @@
   TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
 }
 
-TEST(TilingDataTest, SpiralDifferenceIteratorHasIgnore) {
-  TilingData tiling_data(gfx::Size(10, 10), gfx::Size(50, 50), false);
-  gfx::Rect consider(0, 0, 50, 50);
+TEST_P(TilingDataTest, SpiralDifferenceIteratorHasIgnore) {
+  gfx::Point origin = GetParam();
+  TilingData tiling_data(
+      gfx::Size(10, 10), gfx::Rect(origin, gfx::Size(50, 50)), false);
+  gfx::Rect consider(origin.x(), origin.y(), 50, 50);
   std::vector<std::pair<int, int> > expected;
-  gfx::Rect center(15, 15, 1, 1);
+  gfx::Rect center(origin.x() + 15, origin.y() + 15, 1, 1);
 
   // Full ignore.
-  gfx::Rect ignore(0, 0, 50, 50);
+  gfx::Rect ignore(origin.x(), origin.y(), 50, 50);
 
   // Layout of the tiling data, and expected return order:
   //   x 0 1 2 3 4
@@ -1465,7 +3133,7 @@
   TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
 
   // 3 column ignore.
-  ignore = gfx::Rect(15, 0, 20, 100);
+  ignore = gfx::Rect(origin.x() + 15, origin.y(), 20, 100);
 
   // Layout of the tiling data, and expected return order:
   //   x 0 1 2 3 4
@@ -1491,7 +3159,7 @@
   TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
 
   // Ignore covers the top half.
-  ignore = gfx::Rect(0, 0, 50, 25);
+  ignore = gfx::Rect(origin.x(), origin.y(), 50, 25);
 
   // Layout of the tiling data, and expected return order:
   //   x 0 1 2 3 4
@@ -1517,14 +3185,16 @@
   TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
 }
 
-TEST(TilingDataTest, SpiralDifferenceIteratorRectangleCenter) {
-  TilingData tiling_data(gfx::Size(10, 10), gfx::Size(50, 50), false);
-  gfx::Rect consider(0, 0, 50, 50);
+TEST_P(TilingDataTest, SpiralDifferenceIteratorRectangleCenter) {
+  gfx::Point origin = GetParam();
+  TilingData tiling_data(
+      gfx::Size(10, 10), gfx::Rect(origin, gfx::Size(50, 50)), false);
+  gfx::Rect consider(origin.x(), origin.y(), 50, 50);
   std::vector<std::pair<int, int> > expected;
   gfx::Rect ignore;
 
   // Two cell center
-  gfx::Rect center(25, 25, 1, 10);
+  gfx::Rect center(origin.x() + 25, origin.y() + 25, 1, 10);
 
   // Layout of the tiling data, and expected return order:
   //   x 0 1 2 3 4
@@ -1563,7 +3233,7 @@
   TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
 
   // Three by two center.
-  center = gfx::Rect(15, 25, 20, 10);
+  center = gfx::Rect(origin.x() + 15, origin.y() + 25, 20, 10);
 
   // Layout of the tiling data, and expected return order:
   //   x 0 1 2 3 4
@@ -1598,7 +3268,7 @@
   TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
 
   // Column center off the left side.
-  center = gfx::Rect(-50, 0, 30, 50);
+  center = gfx::Rect(origin.x() - 50, origin.y(), 30, 50);
 
   // Layout of the tiling data, and expected return order:
   //    x 0 1 2 3 4
@@ -1639,17 +3309,19 @@
   TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
 }
 
-TEST(TilingDataTest, SpiralDifferenceIteratorEdgeCases) {
-  TilingData tiling_data(gfx::Size(10, 10), gfx::Size(30, 30), false);
+TEST_P(TilingDataTest, SpiralDifferenceIteratorEdgeCases) {
+  gfx::Point origin = GetParam();
+  TilingData tiling_data(
+      gfx::Size(10, 10), gfx::Rect(origin, gfx::Size(30, 30)), false);
   std::vector<std::pair<int, int> > expected;
   gfx::Rect center;
   gfx::Rect consider;
   gfx::Rect ignore;
 
   // Ignore contains, but is not equal to, consider and center.
-  ignore = gfx::Rect(15, 0, 20, 30);
-  consider = gfx::Rect(20, 10, 10, 20);
-  center = gfx::Rect(25, 0, 5, 5);
+  ignore = gfx::Rect(origin.x() + 15, origin.y(), 20, 30);
+  consider = gfx::Rect(origin.x() + 20, origin.y() + 10, 10, 20);
+  center = gfx::Rect(origin.x() + 25, origin.y(), 5, 5);
 
   // Layout of the tiling data, and expected return order:
   //   x 0 1 2
@@ -1663,8 +3335,8 @@
 
   // Center intersects with consider.
   ignore = gfx::Rect();
-  center = gfx::Rect(0, 15, 30, 15);
-  consider = gfx::Rect(0, 0, 15, 30);
+  center = gfx::Rect(origin.x(), origin.y() + 15, 30, 15);
+  consider = gfx::Rect(origin.x(), origin.y(), 15, 30);
 
   // Layout of the tiling data, and expected return order:
   //   x 0 1 2
@@ -1680,9 +3352,9 @@
   TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
 
   // Consider and ignore are non-intersecting.
-  ignore = gfx::Rect(0, 0, 5, 30);
-  consider = gfx::Rect(25, 0, 5, 30);
-  center = gfx::Rect(15, 0, 1, 1);
+  ignore = gfx::Rect(origin.x(), origin.y(), 5, 30);
+  consider = gfx::Rect(origin.x() + 25, origin.y(), 5, 30);
+  center = gfx::Rect(origin.x() + 15, origin.y(), 1, 1);
 
   // Layout of the tiling data, and expected return order:
   //   x 0 1 2
@@ -1699,9 +3371,9 @@
   TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
 
   // Center intersects with ignore.
-  consider = gfx::Rect(0, 0, 30, 30);
-  center = gfx::Rect(15, 0, 1, 30);
-  ignore = gfx::Rect(0, 15, 30, 1);
+  consider = gfx::Rect(origin.x(), origin.y(), 30, 30);
+  center = gfx::Rect(origin.x() + 15, origin.y(), 1, 30);
+  ignore = gfx::Rect(origin.x(), origin.y() + 15, 30, 1);
 
   // Layout of the tiling data, and expected return order:
   //   x 0 1 2
@@ -1719,8 +3391,8 @@
   TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
 
   // Center and ignore are the same.
-  consider = gfx::Rect(0, 0, 30, 30);
-  center = gfx::Rect(15, 0, 1, 30);
+  consider = gfx::Rect(origin.x(), origin.y(), 30, 30);
+  center = gfx::Rect(origin.x() + 15, origin.y(), 1, 30);
   ignore = center;
 
   // Layout of the tiling data, and expected return order:
@@ -1741,7 +3413,7 @@
   TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
 
   // Empty tiling data.
-  TilingData empty_data(gfx::Size(0, 0), gfx::Size(0, 0), false);
+  TilingData empty_data(gfx::Size(0, 0), gfx::Rect(0, 0, 0, 0), false);
 
   expected.clear();
   TestSpiralIterate(__LINE__, empty_data, consider, ignore, center, expected);
@@ -1756,7 +3428,7 @@
 
   // Empty center. Note: This arbitrarily puts the center to be off the top-left
   // corner.
-  consider = gfx::Rect(0, 0, 30, 30);
+  consider = gfx::Rect(origin.x(), origin.y(), 30, 30);
   ignore = gfx::Rect();
   center = gfx::Rect();
 
@@ -1789,9 +3461,9 @@
   TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
 
   // Center is just to the left of cover, and off of the tiling's left side.
-  consider = gfx::Rect(0, 0, 30, 30);
+  consider = gfx::Rect(origin.x(), origin.y(), 30, 30);
   ignore = gfx::Rect();
-  center = gfx::Rect(-20, 0, 19, 30);
+  center = gfx::Rect(origin.x() - 20, origin.y(), 19, 30);
 
   // Layout of the tiling data, and expected return order:
   //   x 0 1 2
@@ -1813,6 +3485,15 @@
 
   TestSpiralIterate(__LINE__, tiling_data, consider, ignore, center, expected);
 }
+
+INSTANTIATE_TEST_CASE_P(TilingData,
+                        TilingDataTest,
+                        ::testing::Values(gfx::Point(42, 17),
+                                          gfx::Point(0, 0),
+                                          gfx::Point(-8, 15),
+                                          gfx::Point(-12, 4),
+                                          gfx::Point(-16, -35),
+                                          gfx::Point(-10000, -15000)));
 }  // namespace
 
 }  // namespace cc
diff --git a/cc/cc.gyp b/cc/cc.gyp
index c1fad05..7ce4ef1 100644
--- a/cc/cc.gyp
+++ b/cc/cc.gyp
@@ -96,6 +96,7 @@
         'debug/devtools_instrumentation.h',
         'debug/frame_rate_counter.cc',
         'debug/frame_rate_counter.h',
+        'debug/frame_viewer_instrumentation.h',
         'debug/layer_tree_debug_state.cc',
         'debug/layer_tree_debug_state.h',
         'debug/micro_benchmark.cc',
diff --git a/cc/cc.target.darwin-arm.mk b/cc/cc.target.darwin-arm.mk
index 01669bc..4bbf3d2 100644
--- a/cc/cc.target.darwin-arm.mk
+++ b/cc/cc.target.darwin-arm.mk
@@ -240,7 +240,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-fno-tree-sra \
 	-fuse-ld=gold \
 	-Wno-psabi \
@@ -292,12 +291,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
@@ -367,7 +369,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-fno-tree-sra \
 	-fuse-ld=gold \
 	-Wno-psabi \
@@ -419,12 +420,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
@@ -501,7 +505,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/cc/cc.target.darwin-mips.mk b/cc/cc.target.darwin-mips.mk
index 4a9a849..1e950ea 100644
--- a/cc/cc.target.darwin-mips.mk
+++ b/cc/cc.target.darwin-mips.mk
@@ -240,7 +240,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-EL \
 	-mhard-float \
 	-ffunction-sections \
@@ -291,12 +290,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
@@ -366,7 +368,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-EL \
 	-mhard-float \
 	-ffunction-sections \
@@ -417,12 +418,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
@@ -497,7 +501,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/cc/cc.target.darwin-x86.mk b/cc/cc.target.darwin-x86.mk
index d36c6c4..3acb838 100644
--- a/cc/cc.target.darwin-x86.mk
+++ b/cc/cc.target.darwin-x86.mk
@@ -239,7 +239,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-msse2 \
 	-mfpmath=sse \
 	-mmmx \
@@ -293,12 +292,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
@@ -366,7 +368,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-msse2 \
 	-mfpmath=sse \
 	-mmmx \
@@ -420,12 +421,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
@@ -499,7 +503,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/cc/cc.target.darwin-x86_64.mk b/cc/cc.target.darwin-x86_64.mk
index 3a05f9f..f2295a6 100644
--- a/cc/cc.target.darwin-x86_64.mk
+++ b/cc/cc.target.darwin-x86_64.mk
@@ -241,7 +241,6 @@
 	-pipe \
 	-fPIC \
 	-Wno-unused-local-typedefs \
-	-Wno-unknown-pragmas \
 	-m64 \
 	-march=x86-64 \
 	-fuse-ld=gold \
@@ -293,12 +292,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
@@ -368,7 +370,6 @@
 	-pipe \
 	-fPIC \
 	-Wno-unused-local-typedefs \
-	-Wno-unknown-pragmas \
 	-m64 \
 	-march=x86-64 \
 	-fuse-ld=gold \
@@ -420,12 +421,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
@@ -499,7 +503,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/cc/cc.target.linux-arm.mk b/cc/cc.target.linux-arm.mk
index 01669bc..4bbf3d2 100644
--- a/cc/cc.target.linux-arm.mk
+++ b/cc/cc.target.linux-arm.mk
@@ -240,7 +240,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-fno-tree-sra \
 	-fuse-ld=gold \
 	-Wno-psabi \
@@ -292,12 +291,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
@@ -367,7 +369,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-fno-tree-sra \
 	-fuse-ld=gold \
 	-Wno-psabi \
@@ -419,12 +420,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
@@ -501,7 +505,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/cc/cc.target.linux-mips.mk b/cc/cc.target.linux-mips.mk
index 4a9a849..1e950ea 100644
--- a/cc/cc.target.linux-mips.mk
+++ b/cc/cc.target.linux-mips.mk
@@ -240,7 +240,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-EL \
 	-mhard-float \
 	-ffunction-sections \
@@ -291,12 +290,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
@@ -366,7 +368,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-EL \
 	-mhard-float \
 	-ffunction-sections \
@@ -417,12 +418,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
@@ -497,7 +501,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/cc/cc.target.linux-x86.mk b/cc/cc.target.linux-x86.mk
index d36c6c4..3acb838 100644
--- a/cc/cc.target.linux-x86.mk
+++ b/cc/cc.target.linux-x86.mk
@@ -239,7 +239,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-msse2 \
 	-mfpmath=sse \
 	-mmmx \
@@ -293,12 +292,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
@@ -366,7 +368,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-msse2 \
 	-mfpmath=sse \
 	-mmmx \
@@ -420,12 +421,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
@@ -499,7 +503,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/cc/cc.target.linux-x86_64.mk b/cc/cc.target.linux-x86_64.mk
index 3a05f9f..f2295a6 100644
--- a/cc/cc.target.linux-x86_64.mk
+++ b/cc/cc.target.linux-x86_64.mk
@@ -241,7 +241,6 @@
 	-pipe \
 	-fPIC \
 	-Wno-unused-local-typedefs \
-	-Wno-unknown-pragmas \
 	-m64 \
 	-march=x86-64 \
 	-fuse-ld=gold \
@@ -293,12 +292,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
@@ -368,7 +370,6 @@
 	-pipe \
 	-fPIC \
 	-Wno-unused-local-typedefs \
-	-Wno-unknown-pragmas \
 	-m64 \
 	-march=x86-64 \
 	-fuse-ld=gold \
@@ -420,12 +421,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
@@ -499,7 +503,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/cc/cc_tests.gyp b/cc/cc_tests.gyp
index e5a533b..83233cc 100644
--- a/cc/cc_tests.gyp
+++ b/cc/cc_tests.gyp
@@ -37,6 +37,7 @@
       'layers/layer_utils_unittest.cc',
       'layers/nine_patch_layer_impl_unittest.cc',
       'layers/nine_patch_layer_unittest.cc',
+      'layers/painted_scrollbar_layer_impl_unittest.cc',
       'layers/picture_image_layer_impl_unittest.cc',
       'layers/picture_layer_impl_unittest.cc',
       'layers/picture_layer_unittest.cc',
@@ -107,7 +108,6 @@
       'trees/layer_tree_host_unittest_scroll.cc',
       'trees/layer_tree_host_unittest_video.cc',
       'trees/occlusion_tracker_unittest.cc',
-      'trees/quad_culler_unittest.cc',
       'trees/tree_synchronizer_unittest.cc',
     ],
     'cc_surfaces_unit_tests_source_files': [
@@ -353,6 +353,7 @@
         '../base/third_party/dynamic_annotations/dynamic_annotations.gyp:dynamic_annotations',
         '../gpu/gpu.gyp:gles2_c_lib',
         '../gpu/gpu.gyp:gles2_implementation',
+        '../gpu/gpu.gyp:gl_in_process_context',
         '../gpu/gpu.gyp:gpu_unittest_utils',
         '../gpu/skia_bindings/skia_bindings.gyp:gpu_skia_bindings',
         '../skia/skia.gyp:skia',
@@ -385,7 +386,6 @@
             ],
             'variables': {
               'test_suite_name': 'cc_unittests',
-              'input_shlib_path': '<(SHARED_LIB_DIR)/<(SHARED_LIB_PREFIX)cc_unittests<(SHARED_LIB_SUFFIX)',
             },
             'includes': [ '../build/apk_test.gypi' ],
           },
@@ -397,7 +397,6 @@
             ],
             'variables': {
               'test_suite_name': 'cc_perftests',
-              'input_shlib_path': '<(SHARED_LIB_DIR)/<(SHARED_LIB_PREFIX)cc_perftests<(SHARED_LIB_SUFFIX)',
             },
             'includes': [ '../build/apk_test.gypi' ],
           },
diff --git a/cc/debug/debug_colors.cc b/cc/debug/debug_colors.cc
index b54b336..6cbbfe9 100644
--- a/cc/debug/debug_colors.cc
+++ b/cc/debug/debug_colors.cc
@@ -285,6 +285,11 @@
 // Missing picture rects in magenta.
 SkColor DebugColors::MissingPictureFillColor() { return SK_ColorMAGENTA; }
 
+// Missing resize invalidations are in salmon pink.
+SkColor DebugColors::MissingResizeInvalidations() {
+  return SkColorSetARGB(255, 255, 155, 170);
+}
+
 // Picture borders in transparent blue.
 SkColor DebugColors::PictureBorderColor() {
   return SkColorSetARGB(100, 0, 0, 200);
diff --git a/cc/debug/debug_colors.h b/cc/debug/debug_colors.h
index 1447c80..3b00d84 100644
--- a/cc/debug/debug_colors.h
+++ b/cc/debug/debug_colors.h
@@ -117,6 +117,7 @@
 
   static SkColor NonPaintedFillColor();
   static SkColor MissingPictureFillColor();
+  static SkColor MissingResizeInvalidations();
   static SkColor PictureBorderColor();
 
   static SkColor HUDBackgroundColor();
diff --git a/cc/debug/frame_viewer_instrumentation.h b/cc/debug/frame_viewer_instrumentation.h
new file mode 100644
index 0000000..16cf433
--- /dev/null
+++ b/cc/debug/frame_viewer_instrumentation.h
@@ -0,0 +1,93 @@
+// 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.
+
+#ifndef CC_DEBUG_FRAME_VIEWER_INSTRUMENTATION_H_
+#define CC_DEBUG_FRAME_VIEWER_INSTRUMENTATION_H_
+
+#include "base/debug/trace_event.h"
+#include "cc/resources/tile.h"
+
+namespace cc {
+namespace frame_viewer_instrumentation {
+namespace internal {
+
+const char kCategory[] = "cc";
+const char kTileData[] = "tileData";
+const char kLayerId[] = "layerId";
+const char kTileId[] = "tileId";
+const char kTileResolution[] = "tileResolution";
+const char kSourceFrameNumber[] = "sourceFrameNumber";
+const char kRasterMode[] = "rasterMode";
+
+const char kAnalyzeTask[] = "AnalyzeTask";
+const char kRasterTask[] = "RasterTask";
+
+scoped_ptr<base::Value> TileDataAsValue(const void* tile_id,
+                                        TileResolution tile_resolution,
+                                        int source_frame_number,
+                                        int layer_id) {
+  scoped_ptr<base::DictionaryValue> res(new base::DictionaryValue);
+  res->Set(internal::kTileId, TracedValue::CreateIDRef(tile_id).release());
+  res->Set(internal::kTileResolution,
+           TileResolutionAsValue(tile_resolution).release());
+  res->SetInteger(internal::kSourceFrameNumber, source_frame_number);
+  res->SetInteger(internal::kLayerId, layer_id);
+  return res.PassAs<base::Value>();
+}
+
+}  // namespace internal
+
+class ScopedAnalyzeTask {
+ public:
+  ScopedAnalyzeTask(const void* tile_id,
+                    TileResolution tile_resolution,
+                    int source_frame_number,
+                    int layer_id) {
+    TRACE_EVENT_BEGIN1(
+        internal::kCategory,
+        internal::kAnalyzeTask,
+        internal::kTileData,
+        TracedValue::FromValue(internal::TileDataAsValue(tile_id,
+                                                         tile_resolution,
+                                                         source_frame_number,
+                                                         layer_id).release()));
+  }
+  ~ScopedAnalyzeTask() {
+    TRACE_EVENT_END0(internal::kCategory, internal::kAnalyzeTask);
+  }
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(ScopedAnalyzeTask);
+};
+
+class ScopedRasterTask {
+ public:
+  ScopedRasterTask(const void* tile_id,
+                   TileResolution tile_resolution,
+                   int source_frame_number,
+                   int layer_id,
+                   RasterMode raster_mode) {
+    TRACE_EVENT_BEGIN2(
+        internal::kCategory,
+        internal::kRasterTask,
+        internal::kTileData,
+        TracedValue::FromValue(internal::TileDataAsValue(tile_id,
+                                                         tile_resolution,
+                                                         source_frame_number,
+                                                         layer_id).release()),
+        internal::kRasterMode,
+        TracedValue::FromValue(RasterModeAsValue(raster_mode).release()));
+  }
+  ~ScopedRasterTask() {
+    TRACE_EVENT_END0(internal::kCategory, internal::kRasterTask);
+  }
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(ScopedRasterTask);
+};
+
+}  // namespace frame_viewer_instrumentation
+}  // namespace cc
+
+#endif  // CC_DEBUG_FRAME_VIEWER_INSTRUMENTATION_H_
diff --git a/cc/input/input_handler.h b/cc/input/input_handler.h
index b269345..774e011 100644
--- a/cc/input/input_handler.h
+++ b/cc/input/input_handler.h
@@ -51,7 +51,16 @@
 // interface and bind it to the handler on the compositor thread.
 class CC_EXPORT InputHandler {
  public:
-  enum ScrollStatus { ScrollOnMainThread, ScrollStarted, ScrollIgnored };
+  // Note these are used in a histogram. Do not reorder or delete existing
+  // entries.
+  enum ScrollStatus {
+    ScrollOnMainThread = 0,
+    ScrollStarted,
+    ScrollIgnored,
+    ScrollUnknown,
+    // This must be the last entry.
+    ScrollStatusCount
+  };
   enum ScrollInputType { Gesture, Wheel, NonBubblingGesture };
 
   // Binds a client to this handler to receive notifications. Only one client
diff --git a/cc/layers/content_layer.cc b/cc/layers/content_layer.cc
index 178211f..bdec8f7 100644
--- a/cc/layers/content_layer.cc
+++ b/cc/layers/content_layer.cc
@@ -160,10 +160,10 @@
   int height = bounds().height();
   gfx::RectF opaque;
 
-  skia::RefPtr<SkPicture> picture = skia::AdoptRef(new SkPicture);
-  SkCanvas* canvas = picture->beginRecording(width, height);
+  SkPictureRecorder recorder;
+  SkCanvas* canvas = recorder.beginRecording(width, height);
   client_->PaintContents(canvas, gfx::Rect(width, height), &opaque);
-  picture->endRecording();
+  skia::RefPtr<SkPicture> picture = skia::AdoptRef(recorder.endRecording());
   return picture;
 }
 
diff --git a/cc/layers/heads_up_display_layer_impl.cc b/cc/layers/heads_up_display_layer_impl.cc
index 4bfb27c..957ad9a 100644
--- a/cc/layers/heads_up_display_layer_impl.cc
+++ b/cc/layers/heads_up_display_layer_impl.cc
@@ -149,7 +149,7 @@
     canvas_size.set(0, 0);
 
   if (canvas_size.width() != content_bounds().width() ||
-      canvas_size.width() != content_bounds().height() || !hud_canvas_) {
+      canvas_size.height() != content_bounds().height() || !hud_canvas_) {
     TRACE_EVENT0("cc", "ResizeHudCanvas");
     bool opaque = false;
     hud_canvas_ = make_scoped_ptr(skia::CreateBitmapCanvas(
diff --git a/cc/layers/layer.cc b/cc/layers/layer.cc
index a9e59d3..733ecd2d 100644
--- a/cc/layers/layer.cc
+++ b/cc/layers/layer.cc
@@ -59,6 +59,7 @@
       draw_checkerboard_for_missing_tiles_(false),
       force_render_surface_(false),
       is_3d_sorted_(false),
+      transform_is_invertible_(true),
       anchor_point_(0.5f, 0.5f),
       background_color_(0),
       opacity_(1.f),
@@ -605,6 +606,7 @@
   if (transform_ == transform)
     return;
   transform_ = transform;
+  transform_is_invertible_ = transform.IsInvertible();
   SetNeedsCommit();
 }
 
@@ -920,7 +922,7 @@
   layer->SetIs3dSorted(is_3d_sorted_);
   layer->SetUseParentBackfaceVisibility(use_parent_backface_visibility_);
   if (!layer->TransformIsAnimatingOnImplOnly() && !TransformIsAnimating())
-    layer->SetTransform(transform_);
+    layer->SetTransformAndInvertibility(transform_, transform_is_invertible_);
   DCHECK(!(TransformIsAnimating() && layer->TransformIsAnimatingOnImplOnly()));
 
   layer->SetScrollClipLayer(scroll_clip_layer_id_);
diff --git a/cc/layers/layer.h b/cc/layers/layer.h
index bb2b6d5..f847b5e 100644
--- a/cc/layers/layer.h
+++ b/cc/layers/layer.h
@@ -180,6 +180,7 @@
   void SetTransform(const gfx::Transform& transform);
   const gfx::Transform& transform() const { return transform_; }
   bool TransformIsAnimating() const;
+  bool transform_is_invertible() const { return transform_is_invertible_; }
 
   void SetScrollParent(Layer* parent);
 
@@ -591,6 +592,7 @@
   bool draw_checkerboard_for_missing_tiles_ : 1;
   bool force_render_surface_ : 1;
   bool is_3d_sorted_ : 1;
+  bool transform_is_invertible_ : 1;
   Region non_fast_scrollable_region_;
   Region touch_event_handler_region_;
   gfx::PointF position_;
diff --git a/cc/layers/layer_impl.cc b/cc/layers/layer_impl.cc
index 0e305b3..c427611 100644
--- a/cc/layers/layer_impl.cc
+++ b/cc/layers/layer_impl.cc
@@ -63,6 +63,7 @@
       draws_content_(false),
       hide_layer_and_subtree_(false),
       force_render_surface_(false),
+      transform_is_invertible_(true),
       is_container_for_fixed_position_layers_(false),
       is_3d_sorted_(false),
       background_color_(0),
@@ -519,7 +520,7 @@
   layer->SetShouldFlattenTransform(should_flatten_transform_);
   layer->SetIs3dSorted(is_3d_sorted_);
   layer->SetUseParentBackfaceVisibility(use_parent_backface_visibility_);
-  layer->SetTransform(transform_);
+  layer->SetTransformAndInvertibility(transform_, transform_is_invertible_);
 
   layer->SetScrollClipLayer(scroll_clip_layer_ ? scroll_clip_layer_->id()
                                                : Layer::INVALID_ID);
@@ -999,6 +1000,19 @@
     return;
 
   transform_ = transform;
+  transform_is_invertible_ = transform_.IsInvertible();
+  NoteLayerPropertyChangedForSubtree();
+}
+
+void LayerImpl::SetTransformAndInvertibility(const gfx::Transform& transform,
+                                             bool transform_is_invertible) {
+  if (transform_ == transform) {
+    DCHECK(transform_is_invertible_ == transform_is_invertible)
+        << "Can't change invertibility if transform is unchanged";
+    return;
+  }
+  transform_ = transform;
+  transform_is_invertible_ = transform_is_invertible;
   NoteLayerPropertyChangedForSubtree();
 }
 
@@ -1193,6 +1207,7 @@
 
   scaled_scroll_bounds.SetSize(scale_factor * scaled_scroll_bounds.width(),
                                scale_factor * scaled_scroll_bounds.height());
+  scaled_scroll_bounds = gfx::ToFlooredSize(scaled_scroll_bounds);
 
   gfx::Vector2dF max_offset(
       scaled_scroll_bounds.width() - scroll_clip_layer_->bounds().width(),
diff --git a/cc/layers/layer_impl.h b/cc/layers/layer_impl.h
index 9af9eb5..d6d20a6 100644
--- a/cc/layers/layer_impl.h
+++ b/cc/layers/layer_impl.h
@@ -448,6 +448,9 @@
   const gfx::Transform& transform() const { return transform_; }
   bool TransformIsAnimating() const;
   bool TransformIsAnimatingOnImplOnly() const;
+  void SetTransformAndInvertibility(const gfx::Transform& transform,
+                                    bool transform_is_invertible);
+  bool transform_is_invertible() const { return transform_is_invertible_; }
 
   // Note this rect is in layer space (not content space).
   void SetUpdateRect(const gfx::RectF& update_rect);
@@ -607,6 +610,9 @@
   bool hide_layer_and_subtree_ : 1;
   bool force_render_surface_ : 1;
 
+  // Cache transform_'s invertibility.
+  bool transform_is_invertible_ : 1;
+
   // Set for the layer that other layers are fixed to.
   bool is_container_for_fixed_position_layers_ : 1;
   bool is_3d_sorted_ : 1;
diff --git a/cc/layers/layer_impl_unittest.cc b/cc/layers/layer_impl_unittest.cc
index 9fb61d0..7aea7c7 100644
--- a/cc/layers/layer_impl_unittest.cc
+++ b/cc/layers/layer_impl_unittest.cc
@@ -386,6 +386,36 @@
   }
 }
 
+TEST(LayerImplTest, TransformInvertibility) {
+  FakeImplProxy proxy;
+  TestSharedBitmapManager shared_bitmap_manager;
+  FakeLayerTreeHostImpl host_impl(&proxy, &shared_bitmap_manager);
+
+  scoped_ptr<LayerImpl> layer = LayerImpl::Create(host_impl.active_tree(), 1);
+  EXPECT_TRUE(layer->transform().IsInvertible());
+  EXPECT_TRUE(layer->transform_is_invertible());
+
+  gfx::Transform transform;
+  transform.Scale3d(
+      SkDoubleToMScalar(1.0), SkDoubleToMScalar(1.0), SkDoubleToMScalar(0.0));
+  layer->SetTransform(transform);
+  EXPECT_FALSE(layer->transform().IsInvertible());
+  EXPECT_FALSE(layer->transform_is_invertible());
+
+  transform.MakeIdentity();
+  transform.ApplyPerspectiveDepth(SkDoubleToMScalar(100.0));
+  transform.RotateAboutZAxis(75.0);
+  transform.RotateAboutXAxis(32.2);
+  transform.RotateAboutZAxis(-75.0);
+  transform.Translate3d(SkDoubleToMScalar(50.5),
+                        SkDoubleToMScalar(42.42),
+                        SkDoubleToMScalar(-100.25));
+
+  layer->SetTransform(transform);
+  EXPECT_TRUE(layer->transform().IsInvertible());
+  EXPECT_TRUE(layer->transform_is_invertible());
+}
+
 class LayerImplScrollTest : public testing::Test {
  public:
   LayerImplScrollTest()
diff --git a/cc/layers/layer_unittest.cc b/cc/layers/layer_unittest.cc
index f249dfe..21cf4d2 100644
--- a/cc/layers/layer_unittest.cc
+++ b/cc/layers/layer_unittest.cc
@@ -804,6 +804,37 @@
   EXPECT_EQ(replica, replica->mask_layer()->parent());
 }
 
+TEST_F(LayerTest, CheckTranformIsInvertible) {
+  scoped_refptr<Layer> layer = Layer::Create();
+  scoped_ptr<LayerImpl> impl_layer =
+      LayerImpl::Create(host_impl_.active_tree(), 1);
+  EXPECT_CALL(*layer_tree_host_, SetNeedsFullTreeSync()).Times(1);
+  EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AnyNumber());
+  layer_tree_host_->SetRootLayer(layer);
+
+  EXPECT_TRUE(layer->transform_is_invertible());
+
+  gfx::Transform singular_transform;
+  singular_transform.Scale3d(
+      SkDoubleToMScalar(1.0), SkDoubleToMScalar(1.0), SkDoubleToMScalar(0.0));
+
+  layer->SetTransform(singular_transform);
+  layer->PushPropertiesTo(impl_layer.get());
+
+  EXPECT_FALSE(layer->transform_is_invertible());
+  EXPECT_FALSE(impl_layer->transform_is_invertible());
+
+  gfx::Transform rotation_transform;
+  rotation_transform.RotateAboutZAxis(-45.0);
+
+  layer->SetTransform(rotation_transform);
+  layer->PushPropertiesTo(impl_layer.get());
+  EXPECT_TRUE(layer->transform_is_invertible());
+  EXPECT_TRUE(impl_layer->transform_is_invertible());
+
+  Mock::VerifyAndClearExpectations(layer_tree_host_.get());
+}
+
 class LayerTreeHostFactory {
  public:
   LayerTreeHostFactory()
diff --git a/cc/layers/nine_patch_layer_impl.cc b/cc/layers/nine_patch_layer_impl.cc
index e90de16..95c286f 100644
--- a/cc/layers/nine_patch_layer_impl.cc
+++ b/cc/layers/nine_patch_layer_impl.cc
@@ -81,8 +81,9 @@
 
   // |aperture| is in image space.  It cannot exceed the bounds of the bitmap.
   DCHECK(!image_aperture_.size().IsEmpty());
-  DCHECK(gfx::Rect(image_bounds_.width(), image_bounds_.height())
-             .Contains(image_aperture_));
+  DCHECK(gfx::Rect(image_bounds_).Contains(image_aperture_))
+      << "image_bounds_ " << gfx::Rect(image_bounds_).ToString()
+      << " image_aperture_ " << image_aperture_.ToString();
 
   // Avoid the degenerate cases where the aperture touches the edge of the
   // image.
@@ -217,135 +218,170 @@
   // Nothing is opaque here.
   // TODO(danakj): Should we look at the SkBitmaps to determine opaqueness?
   gfx::Rect opaque_rect;
+  gfx::Rect visible_rect;
   const float vertex_opacity[] = {1.0f, 1.0f, 1.0f, 1.0f};
   scoped_ptr<TextureDrawQuad> quad;
 
-  quad = TextureDrawQuad::Create();
-  quad->SetNew(shared_quad_state,
-               layer_top_left,
-               opaque_rect,
-               layer_top_left,
-               resource,
-               premultiplied_alpha,
-               uv_top_left.origin(),
-               uv_top_left.bottom_right(),
-               SK_ColorTRANSPARENT,
-               vertex_opacity,
-               flipped);
-  quad_sink->MaybeAppend(quad.PassAs<DrawQuad>());
-
-  quad = TextureDrawQuad::Create();
-  quad->SetNew(shared_quad_state,
-               layer_top_right,
-               opaque_rect,
-               layer_top_right,
-               resource,
-               premultiplied_alpha,
-               uv_top_right.origin(),
-               uv_top_right.bottom_right(),
-               SK_ColorTRANSPARENT,
-               vertex_opacity,
-               flipped);
-  quad_sink->MaybeAppend(quad.PassAs<DrawQuad>());
-
-  quad = TextureDrawQuad::Create();
-  quad->SetNew(shared_quad_state,
-               layer_bottom_left,
-               opaque_rect,
-               layer_bottom_left,
-               resource,
-               premultiplied_alpha,
-               uv_bottom_left.origin(),
-               uv_bottom_left.bottom_right(),
-               SK_ColorTRANSPARENT,
-               vertex_opacity,
-               flipped);
-  quad_sink->MaybeAppend(quad.PassAs<DrawQuad>());
-
-  quad = TextureDrawQuad::Create();
-  quad->SetNew(shared_quad_state,
-               layer_bottom_right,
-               opaque_rect,
-               layer_bottom_right,
-               resource,
-               premultiplied_alpha,
-               uv_bottom_right.origin(),
-               uv_bottom_right.bottom_right(),
-               SK_ColorTRANSPARENT,
-               vertex_opacity,
-               flipped);
-  quad_sink->MaybeAppend(quad.PassAs<DrawQuad>());
-
-  quad = TextureDrawQuad::Create();
-  quad->SetNew(shared_quad_state,
-               layer_top,
-               opaque_rect,
-               layer_top,
-               resource,
-               premultiplied_alpha,
-               uv_top.origin(),
-               uv_top.bottom_right(),
-               SK_ColorTRANSPARENT,
-               vertex_opacity,
-               flipped);
-  quad_sink->MaybeAppend(quad.PassAs<DrawQuad>());
-
-  quad = TextureDrawQuad::Create();
-  quad->SetNew(shared_quad_state,
-               layer_left,
-               opaque_rect,
-               layer_left,
-               resource,
-               premultiplied_alpha,
-               uv_left.origin(),
-               uv_left.bottom_right(),
-               SK_ColorTRANSPARENT,
-               vertex_opacity,
-               flipped);
-  quad_sink->MaybeAppend(quad.PassAs<DrawQuad>());
-
-  quad = TextureDrawQuad::Create();
-  quad->SetNew(shared_quad_state,
-               layer_right,
-               opaque_rect,
-               layer_right,
-               resource,
-               premultiplied_alpha,
-               uv_right.origin(),
-               uv_right.bottom_right(),
-               SK_ColorTRANSPARENT,
-               vertex_opacity,
-               flipped);
-  quad_sink->MaybeAppend(quad.PassAs<DrawQuad>());
-
-  quad = TextureDrawQuad::Create();
-  quad->SetNew(shared_quad_state,
-               layer_bottom,
-               opaque_rect,
-               layer_bottom,
-               resource,
-               premultiplied_alpha,
-               uv_bottom.origin(),
-               uv_bottom.bottom_right(),
-               SK_ColorTRANSPARENT,
-               vertex_opacity,
-               flipped);
-  quad_sink->MaybeAppend(quad.PassAs<DrawQuad>());
-
-  if (fill_center_) {
+  visible_rect =
+      quad_sink->UnoccludedContentRect(layer_top_left, draw_transform());
+  if (!visible_rect.IsEmpty()) {
     quad = TextureDrawQuad::Create();
     quad->SetNew(shared_quad_state,
-                 layer_center,
+                 layer_top_left,
                  opaque_rect,
-                 layer_center,
+                 visible_rect,
                  resource,
                  premultiplied_alpha,
-                 uv_center.origin(),
-                 uv_center.bottom_right(),
+                 uv_top_left.origin(),
+                 uv_top_left.bottom_right(),
                  SK_ColorTRANSPARENT,
                  vertex_opacity,
                  flipped);
-    quad_sink->MaybeAppend(quad.PassAs<DrawQuad>());
+    quad_sink->Append(quad.PassAs<DrawQuad>());
+  }
+
+  visible_rect =
+      quad_sink->UnoccludedContentRect(layer_top_right, draw_transform());
+  if (!visible_rect.IsEmpty()) {
+    quad = TextureDrawQuad::Create();
+    quad->SetNew(shared_quad_state,
+                 layer_top_right,
+                 opaque_rect,
+                 visible_rect,
+                 resource,
+                 premultiplied_alpha,
+                 uv_top_right.origin(),
+                 uv_top_right.bottom_right(),
+                 SK_ColorTRANSPARENT,
+                 vertex_opacity,
+                 flipped);
+    quad_sink->Append(quad.PassAs<DrawQuad>());
+  }
+
+  visible_rect =
+      quad_sink->UnoccludedContentRect(layer_bottom_left, draw_transform());
+  if (!visible_rect.IsEmpty()) {
+    quad = TextureDrawQuad::Create();
+    quad->SetNew(shared_quad_state,
+                 layer_bottom_left,
+                 opaque_rect,
+                 visible_rect,
+                 resource,
+                 premultiplied_alpha,
+                 uv_bottom_left.origin(),
+                 uv_bottom_left.bottom_right(),
+                 SK_ColorTRANSPARENT,
+                 vertex_opacity,
+                 flipped);
+    quad_sink->Append(quad.PassAs<DrawQuad>());
+  }
+
+  visible_rect =
+      quad_sink->UnoccludedContentRect(layer_bottom_right, draw_transform());
+  if (!visible_rect.IsEmpty()) {
+    quad = TextureDrawQuad::Create();
+    quad->SetNew(shared_quad_state,
+                 layer_bottom_right,
+                 opaque_rect,
+                 visible_rect,
+                 resource,
+                 premultiplied_alpha,
+                 uv_bottom_right.origin(),
+                 uv_bottom_right.bottom_right(),
+                 SK_ColorTRANSPARENT,
+                 vertex_opacity,
+                 flipped);
+    quad_sink->Append(quad.PassAs<DrawQuad>());
+  }
+
+  visible_rect = quad_sink->UnoccludedContentRect(layer_top, draw_transform());
+  if (!visible_rect.IsEmpty()) {
+    quad = TextureDrawQuad::Create();
+    quad->SetNew(shared_quad_state,
+                 layer_top,
+                 opaque_rect,
+                 visible_rect,
+                 resource,
+                 premultiplied_alpha,
+                 uv_top.origin(),
+                 uv_top.bottom_right(),
+                 SK_ColorTRANSPARENT,
+                 vertex_opacity,
+                 flipped);
+    quad_sink->Append(quad.PassAs<DrawQuad>());
+  }
+
+  visible_rect = quad_sink->UnoccludedContentRect(layer_left, draw_transform());
+  if (!visible_rect.IsEmpty()) {
+    quad = TextureDrawQuad::Create();
+    quad->SetNew(shared_quad_state,
+                 layer_left,
+                 opaque_rect,
+                 visible_rect,
+                 resource,
+                 premultiplied_alpha,
+                 uv_left.origin(),
+                 uv_left.bottom_right(),
+                 SK_ColorTRANSPARENT,
+                 vertex_opacity,
+                 flipped);
+    quad_sink->Append(quad.PassAs<DrawQuad>());
+  }
+
+  visible_rect =
+      quad_sink->UnoccludedContentRect(layer_right, draw_transform());
+  if (!visible_rect.IsEmpty()) {
+    quad = TextureDrawQuad::Create();
+    quad->SetNew(shared_quad_state,
+                 layer_right,
+                 opaque_rect,
+                 layer_right,
+                 resource,
+                 premultiplied_alpha,
+                 uv_right.origin(),
+                 uv_right.bottom_right(),
+                 SK_ColorTRANSPARENT,
+                 vertex_opacity,
+                 flipped);
+    quad_sink->Append(quad.PassAs<DrawQuad>());
+  }
+
+  visible_rect =
+      quad_sink->UnoccludedContentRect(layer_bottom, draw_transform());
+  if (!visible_rect.IsEmpty()) {
+    quad = TextureDrawQuad::Create();
+    quad->SetNew(shared_quad_state,
+                 layer_bottom,
+                 opaque_rect,
+                 visible_rect,
+                 resource,
+                 premultiplied_alpha,
+                 uv_bottom.origin(),
+                 uv_bottom.bottom_right(),
+                 SK_ColorTRANSPARENT,
+                 vertex_opacity,
+                 flipped);
+    quad_sink->Append(quad.PassAs<DrawQuad>());
+  }
+
+  if (fill_center_) {
+    visible_rect =
+        quad_sink->UnoccludedContentRect(layer_center, draw_transform());
+    if (!visible_rect.IsEmpty()) {
+      quad = TextureDrawQuad::Create();
+      quad->SetNew(shared_quad_state,
+                   layer_center,
+                   opaque_rect,
+                   visible_rect,
+                   resource,
+                   premultiplied_alpha,
+                   uv_center.origin(),
+                   uv_center.bottom_right(),
+                   SK_ColorTRANSPARENT,
+                   vertex_opacity,
+                   flipped);
+      quad_sink->Append(quad.PassAs<DrawQuad>());
+    }
   }
 }
 
diff --git a/cc/layers/nine_patch_layer_impl_unittest.cc b/cc/layers/nine_patch_layer_impl_unittest.cc
index 2a7cf9c..c40d915 100644
--- a/cc/layers/nine_patch_layer_impl_unittest.cc
+++ b/cc/layers/nine_patch_layer_impl_unittest.cc
@@ -153,5 +153,70 @@
                            expected_quad_size);
 }
 
+TEST(NinePatchLayerImplTest, Occlusion) {
+  gfx::Size layer_size(1000, 1000);
+  gfx::Size viewport_size(1000, 1000);
+
+  LayerTestCommon::LayerImplTest impl;
+
+  SkBitmap sk_bitmap;
+  sk_bitmap.allocN32Pixels(10, 10);
+  sk_bitmap.setImmutable();
+  UIResourceId uid = 5;
+  UIResourceBitmap bitmap(sk_bitmap);
+  impl.host_impl()->CreateUIResource(uid, bitmap);
+
+  NinePatchLayerImpl* nine_patch_layer_impl =
+      impl.AddChildToRoot<NinePatchLayerImpl>();
+  nine_patch_layer_impl->SetAnchorPoint(gfx::PointF());
+  nine_patch_layer_impl->SetBounds(layer_size);
+  nine_patch_layer_impl->SetContentBounds(layer_size);
+  nine_patch_layer_impl->SetDrawsContent(true);
+  nine_patch_layer_impl->SetUIResourceId(uid);
+  nine_patch_layer_impl->SetImageBounds(gfx::Size(10, 10));
+
+  gfx::Rect aperture = gfx::Rect(3, 3, 4, 4);
+  gfx::Rect border = gfx::Rect(300, 300, 400, 400);
+  nine_patch_layer_impl->SetLayout(aperture, border, true);
+
+  impl.CalcDrawProps(viewport_size);
+
+  {
+    SCOPED_TRACE("No occlusion");
+    gfx::Rect occluded;
+    impl.AppendQuadsWithOcclusion(nine_patch_layer_impl, occluded);
+
+    LayerTestCommon::VerifyQuadsExactlyCoverRect(impl.quad_list(),
+                                                 gfx::Rect(layer_size));
+    EXPECT_EQ(9u, impl.quad_list().size());
+  }
+
+  {
+    SCOPED_TRACE("Full occlusion");
+    gfx::Rect occluded(nine_patch_layer_impl->visible_content_rect());
+    impl.AppendQuadsWithOcclusion(nine_patch_layer_impl, occluded);
+
+    LayerTestCommon::VerifyQuadsExactlyCoverRect(impl.quad_list(), gfx::Rect());
+    EXPECT_EQ(impl.quad_list().size(), 0u);
+  }
+
+  {
+    SCOPED_TRACE("Partial occlusion");
+    gfx::Rect occluded(0, 0, 500, 1000);
+    impl.AppendQuadsWithOcclusion(nine_patch_layer_impl, occluded);
+
+    size_t partially_occluded_count = 0;
+    LayerTestCommon::VerifyQuadsCoverRectWithOcclusion(
+        impl.quad_list(),
+        gfx::Rect(layer_size),
+        occluded,
+        &partially_occluded_count);
+    // The layer outputs nine quads, three of which are partially occluded, and
+    // three fully occluded.
+    EXPECT_EQ(6u, impl.quad_list().size());
+    EXPECT_EQ(3u, partially_occluded_count);
+  }
+}
+
 }  // namespace
 }  // namespace cc
diff --git a/cc/layers/painted_scrollbar_layer_impl.cc b/cc/layers/painted_scrollbar_layer_impl.cc
index 25138ca..e4677f7 100644
--- a/cc/layers/painted_scrollbar_layer_impl.cc
+++ b/cc/layers/painted_scrollbar_layer_impl.cc
@@ -83,14 +83,15 @@
   AppendDebugBorderQuad(quad_sink, shared_quad_state, append_quads_data);
 
   gfx::Rect thumb_quad_rect = ComputeThumbQuadRect();
-  gfx::Rect visible_thumb_quad_rect = thumb_quad_rect;
+  gfx::Rect visible_thumb_quad_rect =
+      quad_sink->UnoccludedContentRect(thumb_quad_rect, draw_transform());
 
   ResourceProvider::ResourceId thumb_resource_id =
       layer_tree_impl()->ResourceIdForUIResource(thumb_ui_resource_id_);
   ResourceProvider::ResourceId track_resource_id =
       layer_tree_impl()->ResourceIdForUIResource(track_ui_resource_id_);
 
-  if (thumb_resource_id && !thumb_quad_rect.IsEmpty()) {
+  if (thumb_resource_id && !visible_thumb_quad_rect.IsEmpty()) {
     gfx::Rect opaque_rect;
     const float opacity[] = {1.0f, 1.0f, 1.0f, 1.0f};
     scoped_ptr<TextureDrawQuad> quad = TextureDrawQuad::Create();
@@ -105,12 +106,13 @@
                  SK_ColorTRANSPARENT,
                  opacity,
                  flipped);
-    quad_sink->MaybeAppend(quad.PassAs<DrawQuad>());
+    quad_sink->Append(quad.PassAs<DrawQuad>());
   }
 
   gfx::Rect track_quad_rect = content_bounds_rect;
-  gfx::Rect visible_track_quad_rect = track_quad_rect;
-  if (track_resource_id && !track_quad_rect.IsEmpty()) {
+  gfx::Rect visible_track_quad_rect =
+      quad_sink->UnoccludedContentRect(track_quad_rect, draw_transform());
+  if (track_resource_id && !visible_track_quad_rect.IsEmpty()) {
     gfx::Rect opaque_rect(contents_opaque() ? track_quad_rect : gfx::Rect());
     const float opacity[] = {1.0f, 1.0f, 1.0f, 1.0f};
     scoped_ptr<TextureDrawQuad> quad = TextureDrawQuad::Create();
@@ -125,7 +127,7 @@
                  SK_ColorTRANSPARENT,
                  opacity,
                  flipped);
-    quad_sink->MaybeAppend(quad.PassAs<DrawQuad>());
+    quad_sink->Append(quad.PassAs<DrawQuad>());
   }
 }
 
diff --git a/cc/layers/painted_scrollbar_layer_impl_unittest.cc b/cc/layers/painted_scrollbar_layer_impl_unittest.cc
new file mode 100644
index 0000000..f6d3ded
--- /dev/null
+++ b/cc/layers/painted_scrollbar_layer_impl_unittest.cc
@@ -0,0 +1,95 @@
+// 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.
+
+#include "cc/layers/painted_scrollbar_layer_impl.h"
+
+#include "cc/test/layer_test_common.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace cc {
+namespace {
+
+TEST(PaintedScrollbarLayerImplTest, Occlusion) {
+  gfx::Size layer_size(10, 1000);
+  gfx::Size viewport_size(1000, 1000);
+
+  LayerTestCommon::LayerImplTest impl;
+
+  SkBitmap thumb_sk_bitmap;
+  thumb_sk_bitmap.allocN32Pixels(10, 10);
+  thumb_sk_bitmap.setImmutable();
+  UIResourceId thumb_uid = 5;
+  UIResourceBitmap thumb_bitmap(thumb_sk_bitmap);
+  impl.host_impl()->CreateUIResource(thumb_uid, thumb_bitmap);
+
+  SkBitmap track_sk_bitmap;
+  track_sk_bitmap.allocN32Pixels(10, 10);
+  track_sk_bitmap.setImmutable();
+  UIResourceId track_uid = 6;
+  UIResourceBitmap track_bitmap(track_sk_bitmap);
+  impl.host_impl()->CreateUIResource(track_uid, track_bitmap);
+
+  ScrollbarOrientation orientation = VERTICAL;
+
+  PaintedScrollbarLayerImpl* scrollbar_layer_impl =
+      impl.AddChildToRoot<PaintedScrollbarLayerImpl>(orientation);
+  scrollbar_layer_impl->SetAnchorPoint(gfx::PointF());
+  scrollbar_layer_impl->SetBounds(layer_size);
+  scrollbar_layer_impl->SetContentBounds(layer_size);
+  scrollbar_layer_impl->SetDrawsContent(true);
+  scrollbar_layer_impl->SetThumbThickness(layer_size.width());
+  scrollbar_layer_impl->SetThumbLength(500);
+  scrollbar_layer_impl->SetTrackLength(layer_size.height());
+  scrollbar_layer_impl->SetCurrentPos(100.f / 4);
+  scrollbar_layer_impl->SetMaximum(100);
+  scrollbar_layer_impl->SetVisibleToTotalLengthRatio(1.f / 2);
+  scrollbar_layer_impl->set_track_ui_resource_id(track_uid);
+  scrollbar_layer_impl->set_thumb_ui_resource_id(thumb_uid);
+
+  impl.CalcDrawProps(viewport_size);
+
+  gfx::Rect thumb_rect = scrollbar_layer_impl->ComputeThumbQuadRect();
+  EXPECT_EQ(gfx::Rect(0, 500 / 4, 10, layer_size.height() / 2).ToString(),
+            thumb_rect.ToString());
+
+  {
+    SCOPED_TRACE("No occlusion");
+    gfx::Rect occluded;
+    impl.AppendQuadsWithOcclusion(scrollbar_layer_impl, occluded);
+
+    size_t partially_occluded_count = 0;
+    LayerTestCommon::VerifyQuadsCoverRectWithOcclusion(
+        impl.quad_list(),
+        gfx::Rect(layer_size),
+        occluded,
+        &partially_occluded_count);
+    EXPECT_EQ(2u, impl.quad_list().size());
+    EXPECT_EQ(0u, partially_occluded_count);
+  }
+
+  {
+    SCOPED_TRACE("Full occlusion");
+    gfx::Rect occluded(scrollbar_layer_impl->visible_content_rect());
+    impl.AppendQuadsWithOcclusion(scrollbar_layer_impl, occluded);
+
+    LayerTestCommon::VerifyQuadsExactlyCoverRect(impl.quad_list(), gfx::Rect());
+    EXPECT_EQ(impl.quad_list().size(), 0u);
+  }
+
+  {
+    SCOPED_TRACE("Partial occlusion");
+    gfx::Rect occluded(0, 0, 5, 1000);
+    impl.AppendQuadsWithOcclusion(scrollbar_layer_impl, occluded);
+
+    size_t partially_occluded_count = 0;
+    LayerTestCommon::VerifyQuadsCoverRectWithOcclusion(
+        impl.quad_list(), thumb_rect, occluded, &partially_occluded_count);
+    // The layer outputs two quads, which is partially occluded.
+    EXPECT_EQ(2u, impl.quad_list().size());
+    EXPECT_EQ(2u, partially_occluded_count);
+  }
+}
+
+}  // namespace
+}  // namespace cc
diff --git a/cc/layers/picture_layer.cc b/cc/layers/picture_layer.cc
index e47f4b8..d047df6 100644
--- a/cc/layers/picture_layer.cc
+++ b/cc/layers/picture_layer.cc
@@ -42,11 +42,14 @@
     // Update may not get called for an empty layer, so resize here instead.
     // Using layer_impl because either bounds() or paint_properties().bounds
     // may disagree and either one could have been pushed to layer_impl.
-    pile_->Resize(gfx::Size());
+    pile_->SetTilingRect(gfx::Rect());
   } else if (update_source_frame_number_ ==
              layer_tree_host()->source_frame_number()) {
+    // TODO(ernstm): This DCHECK is only valid as long as the pile's tiling_rect
+    // is identical to the layer_rect.
     // If update called, then pile size must match bounds pushed to impl layer.
-    DCHECK_EQ(layer_impl->bounds().ToString(), pile_->size().ToString());
+    DCHECK_EQ(layer_impl->bounds().ToString(),
+              pile_->tiling_rect().size().ToString());
   }
 
   layer_impl->SetIsMask(is_mask_);
@@ -86,9 +89,13 @@
   update_source_frame_number_ = layer_tree_host()->source_frame_number();
   bool updated = Layer::Update(queue, occlusion);
 
+  gfx::Rect visible_layer_rect = gfx::ScaleToEnclosingRect(
+      visible_content_rect(), 1.f / contents_scale_x());
+
+  gfx::Rect layer_rect = gfx::Rect(paint_properties().bounds);
+
   if (last_updated_visible_content_rect_ == visible_content_rect() &&
-      pile_->size() == paint_properties().bounds &&
-      pending_invalidation_.IsEmpty()) {
+      pile_->tiling_rect() == layer_rect && pending_invalidation_.IsEmpty()) {
     // Only early out if the visible content rect of this layer hasn't changed.
     return updated;
   }
@@ -97,15 +104,13 @@
                "source_frame_number",
                layer_tree_host()->source_frame_number());
 
-  pile_->Resize(paint_properties().bounds);
+  pile_->SetTilingRect(layer_rect);
 
   // Calling paint in WebKit can sometimes cause invalidations, so save
   // off the invalidation prior to calling update.
   pending_invalidation_.Swap(&pile_invalidation_);
   pending_invalidation_.Clear();
 
-  gfx::Rect visible_layer_rect = gfx::ScaleToEnclosingRect(
-      visible_content_rect(), 1.f / contents_scale_x());
   if (layer_tree_host()->settings().using_synchronous_renderer_compositor) {
     // Workaround for http://crbug.com/235910 - to retain backwards compat
     // the full page content must always be provided in the picture layer.
@@ -186,10 +191,10 @@
   int height = bounds().height();
   gfx::RectF opaque;
 
-  skia::RefPtr<SkPicture> picture = skia::AdoptRef(new SkPicture);
-  SkCanvas* canvas = picture->beginRecording(width, height);
+  SkPictureRecorder recorder;
+  SkCanvas* canvas = recorder.beginRecording(width, height);
   client_->PaintContents(canvas, gfx::Rect(width, height), &opaque);
-  picture->endRecording();
+  skia::RefPtr<SkPicture> picture = skia::AdoptRef(recorder.endRecording());
   return picture;
 }
 
diff --git a/cc/layers/picture_layer_impl.cc b/cc/layers/picture_layer_impl.cc
index 558ef91..8524981 100644
--- a/cc/layers/picture_layer_impl.cc
+++ b/cc/layers/picture_layer_impl.cc
@@ -149,7 +149,11 @@
 
     gfx::Rect geometry_rect = rect;
     gfx::Rect opaque_rect = contents_opaque() ? geometry_rect : gfx::Rect();
-    gfx::Rect visible_geometry_rect = geometry_rect;
+    gfx::Rect visible_geometry_rect =
+        quad_sink->UnoccludedContentRect(geometry_rect, draw_transform());
+    if (visible_geometry_rect.IsEmpty())
+      return;
+
     gfx::Size texture_size = rect.size();
     gfx::RectF texture_rect = gfx::RectF(texture_size);
     gfx::Rect quad_content_rect = rect;
@@ -166,8 +170,8 @@
                  quad_content_rect,
                  contents_scale,
                  pile_);
-    if (quad_sink->MaybeAppend(quad.PassAs<DrawQuad>()))
-      append_quads_data->num_missing_tiles++;
+    quad_sink->Append(quad.PassAs<DrawQuad>());
+    append_quads_data->num_missing_tiles++;
     return;
   }
 
@@ -216,7 +220,7 @@
                                 visible_geometry_rect,
                                 color,
                                 width);
-      quad_sink->MaybeAppend(debug_border_quad.PassAs<DrawQuad>());
+      quad_sink->Append(debug_border_quad.PassAs<DrawQuad>());
     }
   }
 
@@ -229,16 +233,18 @@
        iter;
        ++iter) {
     gfx::Rect geometry_rect = iter.geometry_rect();
-    gfx::Rect visible_geometry_rect = geometry_rect;
+    gfx::Rect visible_geometry_rect =
+        quad_sink->UnoccludedContentRect(geometry_rect, draw_transform());
+    if (visible_geometry_rect.IsEmpty())
+      continue;
+
     if (!*iter || !iter->IsReadyToDraw()) {
       if (draw_checkerboard_for_missing_tiles()) {
-        // TODO(enne): Figure out how to show debug "invalidated checker" color
         scoped_ptr<CheckerboardDrawQuad> quad = CheckerboardDrawQuad::Create();
         SkColor color = DebugColors::DefaultCheckerboardColor();
         quad->SetNew(
             shared_quad_state, geometry_rect, visible_geometry_rect, color);
-        if (quad_sink->MaybeAppend(quad.PassAs<DrawQuad>()))
-          append_quads_data->num_missing_tiles++;
+        quad_sink->Append(quad.PassAs<DrawQuad>());
       } else {
         SkColor color = SafeOpaqueBackgroundColor();
         scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create();
@@ -247,10 +253,10 @@
                      visible_geometry_rect,
                      color,
                      false);
-        if (quad_sink->MaybeAppend(quad.PassAs<DrawQuad>()))
-          append_quads_data->num_missing_tiles++;
+        quad_sink->Append(quad.PassAs<DrawQuad>());
       }
 
+      append_quads_data->num_missing_tiles++;
       append_quads_data->had_incomplete_tile = true;
       continue;
     }
@@ -315,7 +321,7 @@
     }
 
     DCHECK(draw_quad);
-    quad_sink->MaybeAppend(draw_quad.Pass());
+    quad_sink->Append(draw_quad.Pass());
 
     if (seen_tilings.empty() || seen_tilings.back() != iter.CurrentTiling())
       seen_tilings.push_back(iter.CurrentTiling());
@@ -341,10 +347,10 @@
     layer_needs_to_register_itself_ = false;
   }
 
-  if (!layer_tree_impl()->device_viewport_valid_for_tile_management()) {
-    for (size_t i = 0; i < tilings_->num_tilings(); ++i)
-      DCHECK(tilings_->tiling_at(i)->has_ever_been_updated());
-    return;
+  if (layer_tree_impl()->device_viewport_valid_for_tile_management()) {
+    visible_rect_for_tile_priority_ = visible_content_rect();
+    viewport_size_for_tile_priority_ = layer_tree_impl()->DrawViewportSize();
+    screen_space_transform_for_tile_priority_ = screen_space_transform();
   }
 
   if (!tilings_->num_tilings())
@@ -369,14 +375,14 @@
 
   // Use visible_content_rect, unless it's empty. If it's empty, then
   // try to inverse project the viewport into layer space and use that.
-  gfx::Rect visible_rect_in_content_space = visible_content_rect();
+  gfx::Rect visible_rect_in_content_space = visible_rect_for_tile_priority_;
   if (visible_rect_in_content_space.IsEmpty()) {
     gfx::Transform screen_to_layer(gfx::Transform::kSkipInitialization);
-    if (screen_space_transform().GetInverse(&screen_to_layer)) {
-      gfx::Size viewport_size = layer_tree_impl()->DrawViewportSize();
+    if (screen_space_transform_for_tile_priority_.GetInverse(
+            &screen_to_layer)) {
       visible_rect_in_content_space =
           gfx::ToEnclosingRect(MathUtil::ProjectClippedRect(
-              screen_to_layer, gfx::Rect(viewport_size)));
+              screen_to_layer, gfx::Rect(viewport_size_for_tile_priority_)));
       visible_rect_in_content_space.Intersect(gfx::Rect(content_bounds()));
     }
   }
@@ -947,9 +953,6 @@
   if (!change_target_tiling)
     return;
 
-  if (!layer_tree_impl()->device_viewport_valid_for_tile_management())
-    return;
-
   RecalculateRasterScales(animating_transform_to_screen,
                           maximum_animation_contents_scale);
 
diff --git a/cc/layers/picture_layer_impl.h b/cc/layers/picture_layer_impl.h
index dcaee12..cd7c68b 100644
--- a/cc/layers/picture_layer_impl.h
+++ b/cc/layers/picture_layer_impl.h
@@ -214,6 +214,12 @@
 
   bool layer_needs_to_register_itself_;
 
+  // Save a copy of the visible rect and viewport size of the last frame that
+  // has a valid viewport for prioritizing tiles.
+  gfx::Rect visible_rect_for_tile_priority_;
+  gfx::Size viewport_size_for_tile_priority_;
+  gfx::Transform screen_space_transform_for_tile_priority_;
+
   friend class PictureLayer;
   DISALLOW_COPY_AND_ASSIGN(PictureLayerImpl);
 };
diff --git a/cc/layers/picture_layer_impl_unittest.cc b/cc/layers/picture_layer_impl_unittest.cc
index 15ade9b..c7a5900 100644
--- a/cc/layers/picture_layer_impl_unittest.cc
+++ b/cc/layers/picture_layer_impl_unittest.cc
@@ -19,6 +19,7 @@
 #include "cc/test/fake_picture_pile_impl.h"
 #include "cc/test/geometry_test_utils.h"
 #include "cc/test/impl_side_painting_settings.h"
+#include "cc/test/layer_test_common.h"
 #include "cc/test/mock_quad_culler.h"
 #include "cc/test/test_shared_bitmap_manager.h"
 #include "cc/test/test_web_graphics_context_3d.h"
@@ -120,8 +121,7 @@
       pending_layer_->tilings()->tiling_at(i)->CreateAllTilesForTesting();
   }
 
-  void SetupPendingTree(
-      scoped_refptr<PicturePileImpl> pile) {
+  void SetupPendingTree(scoped_refptr<PicturePileImpl> pile) {
     host_impl_.CreatePendingTree();
     LayerTreeImpl* pending_tree = host_impl_.pending_tree();
     // Clear recycled tree.
@@ -130,6 +130,7 @@
     scoped_ptr<FakePictureLayerImpl> pending_layer =
         FakePictureLayerImpl::CreateWithPile(pending_tree, id_, pile);
     pending_layer->SetDrawsContent(true);
+    pending_layer->SetAnchorPoint(gfx::PointF());
     pending_tree->SetRootLayer(pending_layer.PassAs<LayerImpl>());
 
     pending_layer_ = static_cast<FakePictureLayerImpl*>(
@@ -140,8 +141,8 @@
   static void VerifyAllTilesExistAndHavePile(
       const PictureLayerTiling* tiling,
       PicturePileImpl* pile) {
-    for (PictureLayerTiling::CoverageIterator
-             iter(tiling, tiling->contents_scale(), tiling->ContentRect());
+    for (PictureLayerTiling::CoverageIterator iter(
+             tiling, tiling->contents_scale(), tiling->TilingRect());
          iter;
          ++iter) {
       EXPECT_TRUE(*iter);
@@ -376,7 +377,7 @@
   EXPECT_EQ(pending_layer_, paired_layers[0].pending_layer);
 }
 
-TEST_F(PictureLayerImplTest, SuppressUpdateTilePriorities) {
+TEST_F(PictureLayerImplTest, InvalidViewportForPrioritizingTiles) {
   base::TimeTicks time_ticks;
   host_impl_.SetCurrentFrameTimeTicks(time_ticks);
 
@@ -404,33 +405,92 @@
                                         &dummy_contents_scale_y,
                                         &dummy_content_bounds);
 
-  EXPECT_TRUE(host_impl_.manage_tiles_needed());
+  // UpdateTilePriorities with valid viewport. Should update tile viewport.
+  bool valid_for_tile_management = true;
+  gfx::Rect viewport = gfx::Rect(layer_bounds);
+  gfx::Transform transform;
+  host_impl_.SetExternalDrawConstraints(
+      transform, viewport, viewport, valid_for_tile_management);
+  active_layer_->draw_properties().visible_content_rect = viewport;
+  active_layer_->draw_properties().screen_space_transform = transform;
   active_layer_->UpdateTilePriorities();
-  host_impl_.ManageTiles();
-  EXPECT_FALSE(host_impl_.manage_tiles_needed());
 
+  gfx::Rect visible_rect_for_tile_priority =
+      active_layer_->visible_rect_for_tile_priority();
+  EXPECT_FALSE(visible_rect_for_tile_priority.IsEmpty());
+  gfx::Size viewport_size_for_tile_priority =
+      active_layer_->viewport_size_for_tile_priority();
+  EXPECT_FALSE(viewport_size_for_tile_priority.IsEmpty());
+  gfx::Transform screen_space_transform_for_tile_priority =
+      active_layer_->screen_space_transform_for_tile_priority();
+
+  // Expand viewport and set it as invalid for prioritizing tiles.
+  // Should not update tile viewport.
   time_ticks += base::TimeDelta::FromMilliseconds(200);
   host_impl_.SetCurrentFrameTimeTicks(time_ticks);
-
-  // Setting this boolean should cause an early out in UpdateTilePriorities.
-  bool valid_for_tile_management = false;
-  host_impl_.SetExternalDrawConstraints(gfx::Transform(),
-                                        gfx::Rect(layer_bounds),
-                                        gfx::Rect(layer_bounds),
-                                        valid_for_tile_management);
+  valid_for_tile_management = false;
+  viewport = gfx::ScaleToEnclosingRect(viewport, 2);
+  transform.Translate(1.f, 1.f);
+  active_layer_->draw_properties().visible_content_rect = viewport;
+  active_layer_->draw_properties().screen_space_transform = transform;
+  host_impl_.SetExternalDrawConstraints(
+      transform, viewport, viewport, valid_for_tile_management);
   active_layer_->UpdateTilePriorities();
-  EXPECT_FALSE(host_impl_.manage_tiles_needed());
 
+  EXPECT_RECT_EQ(visible_rect_for_tile_priority,
+                 active_layer_->visible_rect_for_tile_priority());
+  EXPECT_SIZE_EQ(viewport_size_for_tile_priority,
+                 active_layer_->viewport_size_for_tile_priority());
+  EXPECT_TRANSFORMATION_MATRIX_EQ(
+      screen_space_transform_for_tile_priority,
+      active_layer_->screen_space_transform_for_tile_priority());
+
+  // Keep expanded viewport but mark it valid. Should update tile viewport.
   time_ticks += base::TimeDelta::FromMilliseconds(200);
   host_impl_.SetCurrentFrameTimeTicks(time_ticks);
-
   valid_for_tile_management = true;
-  host_impl_.SetExternalDrawConstraints(gfx::Transform(),
-                                        gfx::Rect(layer_bounds),
-                                        gfx::Rect(layer_bounds),
-                                        valid_for_tile_management);
+  host_impl_.SetExternalDrawConstraints(
+      transform, viewport, viewport, valid_for_tile_management);
   active_layer_->UpdateTilePriorities();
-  EXPECT_TRUE(host_impl_.manage_tiles_needed());
+
+  EXPECT_FALSE(visible_rect_for_tile_priority ==
+               active_layer_->visible_rect_for_tile_priority());
+  EXPECT_FALSE(viewport_size_for_tile_priority ==
+               active_layer_->viewport_size_for_tile_priority());
+  EXPECT_FALSE(screen_space_transform_for_tile_priority ==
+               active_layer_->screen_space_transform_for_tile_priority());
+}
+
+TEST_F(PictureLayerImplTest, InvalidViewportAfterReleaseResources) {
+  base::TimeTicks time_ticks;
+  host_impl_.SetCurrentFrameTimeTicks(time_ticks);
+
+  gfx::Size tile_size(100, 100);
+  gfx::Size layer_bounds(400, 400);
+
+  scoped_refptr<FakePicturePileImpl> pending_pile =
+      FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds);
+  scoped_refptr<FakePicturePileImpl> active_pile =
+      FakePicturePileImpl::CreateFilledPile(tile_size, layer_bounds);
+
+  SetupTrees(pending_pile, active_pile);
+
+  Region invalidation;
+  AddDefaultTilingsWithInvalidation(invalidation);
+
+  bool valid_for_tile_management = false;
+  gfx::Rect viewport = gfx::Rect(layer_bounds);
+  host_impl_.SetExternalDrawConstraints(
+      gfx::Transform(), viewport, viewport, valid_for_tile_management);
+  ResetTilingsAndRasterScales();
+  host_impl_.pending_tree()->UpdateDrawProperties();
+  host_impl_.active_tree()->UpdateDrawProperties();
+  EXPECT_TRUE(active_layer_->HighResTiling());
+
+  size_t num_tilings = active_layer_->num_tilings();
+  active_layer_->UpdateTilePriorities();
+  pending_layer_->AddTiling(0.5f);
+  EXPECT_EQ(num_tilings + 1, active_layer_->num_tilings());
 }
 
 TEST_F(PictureLayerImplTest, ClonePartialInvalidation) {
@@ -455,10 +515,8 @@
     gfx::Rect content_invalidation = gfx::ScaleToEnclosingRect(
         layer_invalidation,
         tiling->contents_scale());
-    for (PictureLayerTiling::CoverageIterator
-             iter(tiling,
-                  tiling->contents_scale(),
-                  tiling->ContentRect());
+    for (PictureLayerTiling::CoverageIterator iter(
+             tiling, tiling->contents_scale(), tiling->TilingRect());
          iter;
          ++iter) {
       EXPECT_TRUE(*iter);
@@ -518,10 +576,8 @@
     gfx::Rect active_content_bounds = gfx::ScaleToEnclosingRect(
         gfx::Rect(active_layer_bounds),
         tiling->contents_scale());
-    for (PictureLayerTiling::CoverageIterator
-             iter(tiling,
-                  tiling->contents_scale(),
-                  tiling->ContentRect());
+    for (PictureLayerTiling::CoverageIterator iter(
+             tiling, tiling->contents_scale(), tiling->TilingRect());
          iter;
          ++iter) {
       EXPECT_TRUE(*iter);
@@ -574,10 +630,8 @@
   for (size_t i = 0; i < tilings->num_tilings(); ++i) {
     const PictureLayerTiling* tiling = tilings->tiling_at(i);
 
-    for (PictureLayerTiling::CoverageIterator
-             iter(tiling,
-                  tiling->contents_scale(),
-                  tiling->ContentRect());
+    for (PictureLayerTiling::CoverageIterator iter(
+             tiling, tiling->contents_scale(), tiling->TilingRect());
          iter;
          ++iter) {
       EXPECT_FALSE(iter.full_tile_geometry_rect().IsEmpty());
@@ -2168,5 +2222,62 @@
   EXPECT_EQ(all_tiles_set.size(), unique_tiles.size());
 }
 
+TEST_F(PictureLayerImplTest, Occlusion) {
+  gfx::Size tile_size(102, 102);
+  gfx::Size layer_bounds(1000, 1000);
+  gfx::Size viewport_size(1000, 1000);
+
+  LayerTestCommon::LayerImplTest impl;
+
+  scoped_refptr<FakePicturePileImpl> pending_pile =
+      FakePicturePileImpl::CreateFilledPile(layer_bounds, layer_bounds);
+  SetupPendingTree(pending_pile);
+  pending_layer_->SetBounds(layer_bounds);
+  ActivateTree();
+  active_layer_->set_fixed_tile_size(tile_size);
+
+  host_impl_.SetViewportSize(viewport_size);
+  host_impl_.active_tree()->UpdateDrawProperties();
+
+  std::vector<Tile*> tiles =
+      active_layer_->HighResTiling()->AllTilesForTesting();
+  host_impl_.tile_manager()->InitializeTilesWithResourcesForTesting(tiles);
+
+  {
+    SCOPED_TRACE("No occlusion");
+    gfx::Rect occluded;
+    impl.AppendQuadsWithOcclusion(active_layer_, occluded);
+
+    LayerTestCommon::VerifyQuadsExactlyCoverRect(impl.quad_list(),
+                                                 gfx::Rect(layer_bounds));
+    EXPECT_EQ(100u, impl.quad_list().size());
+  }
+
+  {
+    SCOPED_TRACE("Full occlusion");
+    gfx::Rect occluded(active_layer_->visible_content_rect());
+    impl.AppendQuadsWithOcclusion(active_layer_, occluded);
+
+    LayerTestCommon::VerifyQuadsExactlyCoverRect(impl.quad_list(), gfx::Rect());
+    EXPECT_EQ(impl.quad_list().size(), 0u);
+  }
+
+  {
+    SCOPED_TRACE("Partial occlusion");
+    gfx::Rect occluded(150, 0, 200, 1000);
+    impl.AppendQuadsWithOcclusion(active_layer_, occluded);
+
+    size_t partially_occluded_count = 0;
+    LayerTestCommon::VerifyQuadsCoverRectWithOcclusion(
+        impl.quad_list(),
+        gfx::Rect(layer_bounds),
+        occluded,
+        &partially_occluded_count);
+    // The layer outputs one quad, which is partially occluded.
+    EXPECT_EQ(100u - 10u, impl.quad_list().size());
+    EXPECT_EQ(10u + 10u, partially_occluded_count);
+  }
+}
+
 }  // namespace
 }  // namespace cc
diff --git a/cc/layers/picture_layer_unittest.cc b/cc/layers/picture_layer_unittest.cc
index 5df3449..7342c1a 100644
--- a/cc/layers/picture_layer_unittest.cc
+++ b/cc/layers/picture_layer_unittest.cc
@@ -64,7 +64,7 @@
     layer->PushPropertiesTo(layer_impl.get());
     EXPECT_FALSE(layer_impl->CanHaveTilings());
     EXPECT_TRUE(layer_impl->bounds() == gfx::Size(0, 0));
-    EXPECT_TRUE(layer_impl->pile()->size() == gfx::Size(0, 0));
+    EXPECT_TRUE(layer_impl->pile()->tiling_rect() == gfx::Rect());
     EXPECT_FALSE(layer_impl->pile()->HasRecordings());
   }
 }
diff --git a/cc/layers/quad_sink.h b/cc/layers/quad_sink.h
index add4e99..7312781 100644
--- a/cc/layers/quad_sink.h
+++ b/cc/layers/quad_sink.h
@@ -37,10 +37,6 @@
       const gfx::Rect& content_rect,
       const gfx::Transform& draw_transform) = 0;
 
-  // Returns true if the quad is added to the list, and false if the quad is
-  // entirely culled.
-  virtual bool MaybeAppend(scoped_ptr<DrawQuad> draw_quad) = 0;
-
   virtual void Append(scoped_ptr<DrawQuad> draw_quad) = 0;
 };
 
diff --git a/cc/layers/texture_layer_unittest.cc b/cc/layers/texture_layer_unittest.cc
index dd67086..97b52f4 100644
--- a/cc/layers/texture_layer_unittest.cc
+++ b/cc/layers/texture_layer_unittest.cc
@@ -1183,7 +1183,6 @@
     for (size_t i = 0; i < resources_to_return.size(); ++i)
       output_surface()->ReturnResource(resources_to_return[i].id, &ack);
     host_impl->ReclaimResources(&ack);
-    host_impl->OnSwapBuffersComplete();
   }
 
   virtual void AfterTest() OVERRIDE {}
@@ -1323,7 +1322,6 @@
     for (size_t i = 0; i < resources_to_return.size(); ++i)
       output_surface()->ReturnResource(resources_to_return[i].id, &ack);
     host_impl->ReclaimResources(&ack);
-    host_impl->OnSwapBuffersComplete();
   }
 
   virtual void AfterTest() OVERRIDE {}
diff --git a/cc/layers/tiled_layer.cc b/cc/layers/tiled_layer.cc
index 5607496..56df6f7 100644
--- a/cc/layers/tiled_layer.cc
+++ b/cc/layers/tiled_layer.cc
@@ -142,18 +142,17 @@
 }
 
 void TiledLayer::UpdateBounds() {
-  gfx::Size old_bounds = tiler_->bounds();
-  gfx::Size new_bounds = content_bounds();
-  if (old_bounds == new_bounds)
+  gfx::Rect old_tiling_rect = tiler_->tiling_rect();
+  gfx::Rect new_tiling_rect = gfx::Rect(content_bounds());
+  if (old_tiling_rect == new_tiling_rect)
     return;
-  tiler_->SetBounds(new_bounds);
+  tiler_->SetTilingRect(new_tiling_rect);
 
   // Invalidate any areas that the new bounds exposes.
-  Region old_region = gfx::Rect(old_bounds);
-  Region new_region = gfx::Rect(new_bounds);
-  new_region.Subtract(old_region);
-  for (Region::Iterator new_rects(new_region);
-       new_rects.has_rect();
+  Region old_region = old_tiling_rect;
+  Region new_region = new_tiling_rect;
+  new_tiling_rect.Subtract(old_tiling_rect);
+  for (Region::Iterator new_rects(new_tiling_rect); new_rects.has_rect();
        new_rects.next())
     InvalidateContentRect(new_rects.rect());
 }
diff --git a/cc/layers/tiled_layer_impl.cc b/cc/layers/tiled_layer_impl.cc
index 3b84a5c..cc95a04 100644
--- a/cc/layers/tiled_layer_impl.cc
+++ b/cc/layers/tiled_layer_impl.cc
@@ -188,7 +188,7 @@
                                   visible_tile_rect,
                                   border_color,
                                   border_width);
-        quad_sink->MaybeAppend(debug_border_quad.PassAs<DrawQuad>());
+        quad_sink->Append(debug_border_quad.PassAs<DrawQuad>());
       }
     }
   }
@@ -202,12 +202,16 @@
       gfx::Rect tile_rect = tiler_->tile_bounds(i, j);
       gfx::Rect display_rect = tile_rect;
       tile_rect.Intersect(content_rect);
-      gfx::Rect visible_tile_rect = tile_rect;
 
       // Skip empty tiles.
       if (tile_rect.IsEmpty())
         continue;
 
+      gfx::Rect visible_tile_rect =
+          quad_sink->UnoccludedContentRect(tile_rect, draw_transform());
+      if (visible_tile_rect.IsEmpty())
+        continue;
+
       if (!tile || !tile->resource_id()) {
         SkColor checker_color;
         if (ShowDebugBorders()) {
@@ -222,9 +226,8 @@
             CheckerboardDrawQuad::Create();
         checkerboard_quad->SetNew(
             shared_quad_state, tile_rect, visible_tile_rect, checker_color);
-        if (quad_sink->MaybeAppend(checkerboard_quad.PassAs<DrawQuad>()))
-          append_quads_data->num_missing_tiles++;
-
+        quad_sink->Append(checkerboard_quad.PassAs<DrawQuad>());
+        append_quads_data->num_missing_tiles++;
         continue;
       }
 
@@ -252,7 +255,7 @@
                    tex_coord_rect,
                    texture_size,
                    tile->contents_swizzled());
-      quad_sink->MaybeAppend(quad.PassAs<DrawQuad>());
+      quad_sink->Append(quad.PassAs<DrawQuad>());
     }
   }
 }
diff --git a/cc/layers/tiled_layer_impl_unittest.cc b/cc/layers/tiled_layer_impl_unittest.cc
index ff9d35e..a92d024 100644
--- a/cc/layers/tiled_layer_impl_unittest.cc
+++ b/cc/layers/tiled_layer_impl_unittest.cc
@@ -30,7 +30,7 @@
         TiledLayerImpl::Create(host_impl_.active_tree(), 1);
     scoped_ptr<LayerTilingData> tiler =
         LayerTilingData::Create(tile_size, border_texels);
-    tiler->SetBounds(layer_size);
+    tiler->SetTilingRect(gfx::Rect(layer_size));
     layer->SetTilingData(*tiler);
     layer->set_skips_draw(false);
     layer->draw_properties().visible_content_rect =
@@ -316,5 +316,68 @@
   EXPECT_EQ(0, layer->TilingForTesting()->num_tiles_y());
 }
 
+TEST_F(TiledLayerImplTest, Occlusion) {
+  gfx::Size tile_size(100, 100);
+  gfx::Size layer_bounds(1000, 1000);
+  gfx::Size viewport_size(1000, 1000);
+
+  LayerTestCommon::LayerImplTest impl;
+
+  TiledLayerImpl* tiled_layer = impl.AddChildToRoot<TiledLayerImpl>();
+  tiled_layer->SetAnchorPoint(gfx::PointF());
+  tiled_layer->SetBounds(layer_bounds);
+  tiled_layer->SetContentBounds(layer_bounds);
+  tiled_layer->SetDrawsContent(true);
+  tiled_layer->set_skips_draw(false);
+
+  scoped_ptr<LayerTilingData> tiler =
+      LayerTilingData::Create(tile_size, LayerTilingData::NO_BORDER_TEXELS);
+  tiler->SetTilingRect(gfx::Rect(layer_bounds));
+  tiled_layer->SetTilingData(*tiler);
+
+  ResourceProvider::ResourceId resource_id = 1;
+  for (int i = 0; i < tiled_layer->TilingForTesting()->num_tiles_x(); ++i) {
+    for (int j = 0; j < tiled_layer->TilingForTesting()->num_tiles_y(); ++j)
+      tiled_layer->PushTileProperties(i, j, resource_id++, gfx::Rect(), false);
+  }
+
+  impl.CalcDrawProps(viewport_size);
+
+  {
+    SCOPED_TRACE("No occlusion");
+    gfx::Rect occluded;
+    impl.AppendQuadsWithOcclusion(tiled_layer, occluded);
+
+    LayerTestCommon::VerifyQuadsExactlyCoverRect(impl.quad_list(),
+                                                 gfx::Rect(layer_bounds));
+    EXPECT_EQ(100u, impl.quad_list().size());
+  }
+
+  {
+    SCOPED_TRACE("Full occlusion");
+    gfx::Rect occluded(tiled_layer->visible_content_rect());
+    impl.AppendQuadsWithOcclusion(tiled_layer, occluded);
+
+    LayerTestCommon::VerifyQuadsExactlyCoverRect(impl.quad_list(), gfx::Rect());
+    EXPECT_EQ(impl.quad_list().size(), 0u);
+  }
+
+  {
+    SCOPED_TRACE("Partial occlusion");
+    gfx::Rect occluded(150, 0, 200, 1000);
+    impl.AppendQuadsWithOcclusion(tiled_layer, occluded);
+
+    size_t partially_occluded_count = 0;
+    LayerTestCommon::VerifyQuadsCoverRectWithOcclusion(
+        impl.quad_list(),
+        gfx::Rect(layer_bounds),
+        occluded,
+        &partially_occluded_count);
+    // The layer outputs one quad, which is partially occluded.
+    EXPECT_EQ(100u - 10u, impl.quad_list().size());
+    EXPECT_EQ(10u + 10u, partially_occluded_count);
+  }
+}
+
 }  // namespace
 }  // namespace cc
diff --git a/cc/layers/video_frame_provider_client_impl.cc b/cc/layers/video_frame_provider_client_impl.cc
index 9071fdc..cf78413 100644
--- a/cc/layers/video_frame_provider_client_impl.cc
+++ b/cc/layers/video_frame_provider_client_impl.cc
@@ -4,6 +4,7 @@
 
 #include "cc/layers/video_frame_provider_client_impl.h"
 
+#include "base/debug/trace_event.h"
 #include "cc/base/math_util.h"
 #include "cc/layers/video_layer_impl.h"
 #include "media/base/video_frame.h"
@@ -73,6 +74,10 @@
 }
 
 void VideoFrameProviderClientImpl::DidReceiveFrame() {
+  TRACE_EVENT1("cc",
+               "VideoFrameProviderClientImpl::DidReceiveFrame",
+               "active_video_layer",
+               !!active_video_layer_);
   if (active_video_layer_)
     active_video_layer_->SetNeedsRedraw();
 }
diff --git a/cc/output/delegating_renderer.cc b/cc/output/delegating_renderer.cc
index 8770187..2b35955 100644
--- a/cc/output/delegating_renderer.cc
+++ b/cc/output/delegating_renderer.cc
@@ -35,11 +35,8 @@
     const LayerTreeSettings* settings,
     OutputSurface* output_surface,
     ResourceProvider* resource_provider) {
-  scoped_ptr<DelegatingRenderer> renderer(new DelegatingRenderer(
+  return make_scoped_ptr(new DelegatingRenderer(
       client, settings, output_surface, resource_provider));
-  if (!renderer->Initialize())
-    return scoped_ptr<DelegatingRenderer>();
-  return renderer.Pass();
 }
 
 DelegatingRenderer::DelegatingRenderer(RendererClient* client,
@@ -51,9 +48,7 @@
       resource_provider_(resource_provider),
       visible_(true) {
   DCHECK(resource_provider_);
-}
 
-bool DelegatingRenderer::Initialize() {
   capabilities_.using_partial_swap = false;
   capabilities_.max_texture_size = resource_provider_->max_texture_size();
   capabilities_.best_texture_format = resource_provider_->best_texture_format();
@@ -63,21 +58,18 @@
   if (!output_surface_->context_provider()) {
     capabilities_.using_shared_memory_resources = true;
     capabilities_.using_map_image = true;
-    return true;
+  } else {
+    const ContextProvider::Capabilities& caps =
+        output_surface_->context_provider()->ContextCapabilities();
+
+    DCHECK(!caps.gpu.iosurface || caps.gpu.texture_rectangle);
+
+    capabilities_.using_egl_image = caps.gpu.egl_image_external;
+    capabilities_.using_map_image =
+        settings_->use_map_image && caps.gpu.map_image;
+
+    capabilities_.allow_rasterize_on_demand = false;
   }
-
-  const ContextProvider::Capabilities& caps =
-      output_surface_->context_provider()->ContextCapabilities();
-
-  DCHECK(!caps.gpu.iosurface || caps.gpu.texture_rectangle);
-
-  capabilities_.using_egl_image = caps.gpu.egl_image_external;
-  capabilities_.using_map_image =
-      settings_->use_map_image && caps.gpu.map_image;
-
-  capabilities_.allow_rasterize_on_demand = false;
-
-  return true;
 }
 
 DelegatingRenderer::~DelegatingRenderer() {}
diff --git a/cc/output/delegating_renderer.h b/cc/output/delegating_renderer.h
index 456d1ef..a4f8c26 100644
--- a/cc/output/delegating_renderer.h
+++ b/cc/output/delegating_renderer.h
@@ -56,7 +56,6 @@
                      const LayerTreeSettings* settings,
                      OutputSurface* output_surface,
                      ResourceProvider* resource_provider);
-  bool Initialize();
 
   OutputSurface* output_surface_;
   ResourceProvider* resource_provider_;
diff --git a/cc/output/filter_operation.cc b/cc/output/filter_operation.cc
index 14a8bd8..7682853 100644
--- a/cc/output/filter_operation.cc
+++ b/cc/output/filter_operation.cc
@@ -24,12 +24,18 @@
   }
   if (type_ == REFERENCE)
     return image_filter_.get() == other.image_filter_.get();
+  if (type_ == ALPHA_THRESHOLD) {
+    return region_ == other.region_ &&
+        amount_ == other.amount_ &&
+        outer_threshold_ == other.outer_threshold_;
+  }
   return amount_ == other.amount_;
 }
 
 FilterOperation::FilterOperation(FilterType type, float amount)
     : type_(type),
       amount_(amount),
+      outer_threshold_(0),
       drop_shadow_offset_(0, 0),
       drop_shadow_color_(0),
       zoom_inset_(0) {
@@ -45,6 +51,7 @@
                                  SkColor color)
     : type_(type),
       amount_(stdDeviation),
+      outer_threshold_(0),
       drop_shadow_offset_(offset),
       drop_shadow_color_(color),
       zoom_inset_(0) {
@@ -55,6 +62,7 @@
 FilterOperation::FilterOperation(FilterType type, SkScalar matrix[20])
     : type_(type),
       amount_(0),
+      outer_threshold_(0),
       drop_shadow_offset_(0, 0),
       drop_shadow_color_(0),
       zoom_inset_(0) {
@@ -65,6 +73,7 @@
 FilterOperation::FilterOperation(FilterType type, float amount, int inset)
     : type_(type),
       amount_(amount),
+      outer_threshold_(0),
       drop_shadow_offset_(0, 0),
       drop_shadow_color_(0),
       zoom_inset_(inset) {
@@ -77,6 +86,7 @@
     const skia::RefPtr<SkImageFilter>& image_filter)
     : type_(type),
       amount_(0),
+      outer_threshold_(0),
       drop_shadow_offset_(0, 0),
       drop_shadow_color_(0),
       image_filter_(image_filter),
@@ -85,13 +95,30 @@
   memset(matrix_, 0, sizeof(matrix_));
 }
 
+FilterOperation::FilterOperation(FilterType type,
+                                 const SkRegion& region,
+                                 float inner_threshold,
+                                 float outer_threshold)
+    : type_(type),
+      amount_(inner_threshold),
+      outer_threshold_(outer_threshold),
+      drop_shadow_offset_(0, 0),
+      drop_shadow_color_(0),
+      zoom_inset_(0),
+      region_(region) {
+  DCHECK_EQ(type_, ALPHA_THRESHOLD);
+  memset(matrix_, 0, sizeof(matrix_));
+}
+
 FilterOperation::FilterOperation(const FilterOperation& other)
     : type_(other.type_),
       amount_(other.amount_),
+      outer_threshold_(other.outer_threshold_),
       drop_shadow_offset_(other.drop_shadow_offset_),
       drop_shadow_color_(other.drop_shadow_color_),
       image_filter_(other.image_filter_),
-      zoom_inset_(other.zoom_inset_) {
+      zoom_inset_(other.zoom_inset_),
+      region_(other.region_) {
   memcpy(matrix_, other.matrix_, sizeof(matrix_));
 }
 
@@ -134,6 +161,8 @@
     case FilterOperation::REFERENCE:
       return FilterOperation::CreateReferenceFilter(
           skia::RefPtr<SkImageFilter>());
+    case FilterOperation::ALPHA_THRESHOLD:
+      return FilterOperation::CreateAlphaThresholdFilter(SkRegion(), 1.f, 0.f);
   }
   NOTREACHED();
   return FilterOperation::CreateEmptyFilter();
@@ -146,6 +175,7 @@
     case FilterOperation::SEPIA:
     case FilterOperation::INVERT:
     case FilterOperation::OPACITY:
+    case FilterOperation::ALPHA_THRESHOLD:
       return MathUtil::ClampToRange(amount, 0.f, 1.f);
     case FilterOperation::SATURATE:
     case FilterOperation::BRIGHTNESS:
@@ -213,6 +243,13 @@
         std::max(gfx::Tween::LinearIntValueBetween(
                      from_op.zoom_inset(), to_op.zoom_inset(), progress),
                  0));
+  } else if (to_op.type() == FilterOperation::ALPHA_THRESHOLD) {
+    blended_filter.set_outer_threshold(ClampAmountForFilterType(
+            gfx::Tween::FloatValueBetween(progress,
+                                          from_op.outer_threshold(),
+                                          to_op.outer_threshold()),
+            to_op.type()));
+    blended_filter.set_region(to_op.region());
   }
 
   return blended_filter;
@@ -262,6 +299,19 @@
       value->SetBoolean("can_filter_image_gpu", can_filter_image_gpu);
       break;
     }
+    case FilterOperation::ALPHA_THRESHOLD: {
+        value->SetDouble("inner_threshold", amount_);
+        value->SetDouble("outer_threshold", outer_threshold_);
+        scoped_ptr<base::ListValue> region_value(new base::ListValue());
+        for (SkRegion::Iterator it(region_); !it.done(); it.next()) {
+          region_value->AppendInteger(it.rect().x());
+          region_value->AppendInteger(it.rect().y());
+          region_value->AppendInteger(it.rect().width());
+          region_value->AppendInteger(it.rect().height());
+        }
+        value->Set("region", region_value.release());
+      }
+      break;
   }
   return value.PassAs<base::Value>();
 }
diff --git a/cc/output/filter_operation.h b/cc/output/filter_operation.h
index 4e51f3c..626d2e7 100644
--- a/cc/output/filter_operation.h
+++ b/cc/output/filter_operation.h
@@ -11,6 +11,7 @@
 #include "skia/ext/refptr.h"
 #include "third_party/skia/include/core/SkColor.h"
 #include "third_party/skia/include/core/SkImageFilter.h"
+#include "third_party/skia/include/core/SkRegion.h"
 #include "third_party/skia/include/core/SkScalar.h"
 #include "ui/gfx/point.h"
 
@@ -37,7 +38,8 @@
     ZOOM,
     REFERENCE,
     SATURATING_BRIGHTNESS,  // Not used in CSS/SVG.
-    FILTER_TYPE_LAST = SATURATING_BRIGHTNESS
+    ALPHA_THRESHOLD,  // Not used in CSS/SVG.
+    FILTER_TYPE_LAST = ALPHA_THRESHOLD
   };
 
   FilterOperation(const FilterOperation& other);
@@ -52,6 +54,11 @@
     return amount_;
   }
 
+  float outer_threshold() const {
+    DCHECK_EQ(type_, ALPHA_THRESHOLD);
+    return outer_threshold_;
+  }
+
   gfx::Point drop_shadow_offset() const {
     DCHECK_EQ(type_, DROP_SHADOW);
     return drop_shadow_offset_;
@@ -77,6 +84,11 @@
     return zoom_inset_;
   }
 
+  const SkRegion& region() const {
+    DCHECK_EQ(type_, ALPHA_THRESHOLD);
+    return region_;
+  }
+
   static FilterOperation CreateGrayscaleFilter(float amount) {
     return FilterOperation(GRAYSCALE, amount);
   }
@@ -136,6 +148,13 @@
     return FilterOperation(SATURATING_BRIGHTNESS, amount);
   }
 
+  static FilterOperation CreateAlphaThresholdFilter(const SkRegion& region,
+                                                    float inner_threshold,
+                                                    float outer_threshold) {
+    return FilterOperation(ALPHA_THRESHOLD, region,
+                           inner_threshold, outer_threshold);
+  }
+
   bool operator==(const FilterOperation& other) const;
 
   bool operator!=(const FilterOperation& other) const {
@@ -155,6 +174,11 @@
     amount_ = amount;
   }
 
+  void set_outer_threshold(float outer_threshold) {
+    DCHECK_EQ(type_, ALPHA_THRESHOLD);
+    outer_threshold_ = outer_threshold;
+  }
+
   void set_drop_shadow_offset(const gfx::Point& offset) {
     DCHECK_EQ(type_, DROP_SHADOW);
     drop_shadow_offset_ = offset;
@@ -181,6 +205,11 @@
     zoom_inset_ = inset;
   }
 
+  void set_region(const SkRegion& region) {
+    DCHECK_EQ(type_, ALPHA_THRESHOLD);
+    region_ = region;
+  }
+
   // Given two filters of the same type, returns a filter operation created by
   // linearly interpolating a |progress| fraction from |from| to |to|. If either
   // |from| or |to| (but not both) is null, it is treated as a no-op filter of
@@ -208,13 +237,20 @@
   FilterOperation(FilterType type,
                   const skia::RefPtr<SkImageFilter>& image_filter);
 
+  FilterOperation(FilterType type,
+                  const SkRegion& region,
+                  float inner_threshold,
+                  float outer_threshold);
+
   FilterType type_;
   float amount_;
+  float outer_threshold_;
   gfx::Point drop_shadow_offset_;
   SkColor drop_shadow_color_;
   skia::RefPtr<SkImageFilter> image_filter_;
   SkScalar matrix_[20];
   int zoom_inset_;
+  SkRegion region_;
 };
 
 }  // namespace cc
diff --git a/cc/output/filter_operations.cc b/cc/output/filter_operations.cc
index 16a0040..443d7ec 100644
--- a/cc/output/filter_operations.cc
+++ b/cc/output/filter_operations.cc
@@ -102,6 +102,7 @@
       case FilterOperation::BRIGHTNESS:
       case FilterOperation::CONTRAST:
       case FilterOperation::SATURATING_BRIGHTNESS:
+      case FilterOperation::ALPHA_THRESHOLD:
         break;
     }
   }
@@ -119,6 +120,7 @@
       case FilterOperation::DROP_SHADOW:
       case FilterOperation::ZOOM:
       case FilterOperation::REFERENCE:
+      case FilterOperation::ALPHA_THRESHOLD:
         return true;
       case FilterOperation::COLOR_MATRIX: {
         const SkScalar* matrix = op.matrix();
diff --git a/cc/output/gl_renderer.cc b/cc/output/gl_renderer.cc
index 51c83dd..8719574 100644
--- a/cc/output/gl_renderer.cc
+++ b/cc/output/gl_renderer.cc
@@ -58,25 +58,34 @@
 using gpu::gles2::GLES2Interface;
 
 namespace cc {
-
 namespace {
 
-// TODO(epenner): This should probably be moved to output surface.
-//
-// This implements a simple fence based on client side swaps.
-// This is to isolate the ResourceProvider from 'frames' which
-// it shouldn't need to care about, while still allowing us to
-// enforce good texture recycling behavior strictly throughout
-// the compositor (don't recycle a texture while it's in use).
-class SimpleSwapFence : public ResourceProvider::Fence {
+class FallbackFence : public ResourceProvider::Fence {
  public:
-  SimpleSwapFence() : has_passed_(false) {}
-  virtual bool HasPassed() OVERRIDE { return has_passed_; }
-  void SetHasPassed() { has_passed_ = true; }
+  explicit FallbackFence(gpu::gles2::GLES2Interface* gl)
+      : gl_(gl), has_passed_(false) {}
+
+  // Overridden from ResourceProvider::Fence:
+  virtual bool HasPassed() OVERRIDE {
+    if (!has_passed_) {
+      has_passed_ = true;
+      Synchronize();
+    }
+    return true;
+  }
 
  private:
-  virtual ~SimpleSwapFence() {}
+  virtual ~FallbackFence() {}
+
+  void Synchronize() {
+    TRACE_EVENT0("cc", "FallbackFence::Synchronize");
+    gl_->Finish();
+  }
+
+  gpu::gles2::GLES2Interface* gl_;
   bool has_passed_;
+
+  DISALLOW_COPY_AND_ASSIGN(FallbackFence);
 };
 
 class OnDemandRasterTaskImpl : public Task {
@@ -179,6 +188,58 @@
   DISALLOW_COPY_AND_ASSIGN(PendingAsyncReadPixels);
 };
 
+class GLRenderer::SyncQuery {
+ public:
+  explicit SyncQuery(gpu::gles2::GLES2Interface* gl)
+      : gl_(gl), query_id_(0u), weak_ptr_factory_(this) {
+    gl_->GenQueriesEXT(1, &query_id_);
+  }
+  virtual ~SyncQuery() { gl_->DeleteQueriesEXT(1, &query_id_); }
+
+  scoped_refptr<ResourceProvider::Fence> Begin() {
+    DCHECK(!weak_ptr_factory_.HasWeakPtrs() || !IsPending());
+    // Invalidate weak pointer held by old fence.
+    weak_ptr_factory_.InvalidateWeakPtrs();
+    gl_->BeginQueryEXT(GL_COMMANDS_COMPLETED_CHROMIUM, query_id_);
+    return make_scoped_refptr<ResourceProvider::Fence>(
+        new Fence(weak_ptr_factory_.GetWeakPtr()));
+  }
+
+  void End() { gl_->EndQueryEXT(GL_COMMANDS_COMPLETED_CHROMIUM); }
+
+  bool IsPending() {
+    unsigned available = 1;
+    gl_->GetQueryObjectuivEXT(
+        query_id_, GL_QUERY_RESULT_AVAILABLE_EXT, &available);
+    return !available;
+  }
+
+ private:
+  class Fence : public ResourceProvider::Fence {
+   public:
+    explicit Fence(base::WeakPtr<GLRenderer::SyncQuery> query)
+        : query_(query) {}
+
+    // Overridden from ResourceProvider::Fence:
+    virtual bool HasPassed() OVERRIDE {
+      return !query_ || !query_->IsPending();
+    }
+
+   private:
+    virtual ~Fence() {}
+
+    base::WeakPtr<SyncQuery> query_;
+
+    DISALLOW_COPY_AND_ASSIGN(Fence);
+  };
+
+  gpu::gles2::GLES2Interface* gl_;
+  unsigned query_id_;
+  base::WeakPtrFactory<SyncQuery> weak_ptr_factory_;
+
+  DISALLOW_COPY_AND_ASSIGN(SyncQuery);
+};
+
 scoped_ptr<GLRenderer> GLRenderer::Create(
     RendererClient* client,
     const LayerTreeSettings* settings,
@@ -202,7 +263,7 @@
                        int highp_threshold_min)
     : DirectRenderer(client, settings, output_surface, resource_provider),
       offscreen_framebuffer_id_(0),
-      shared_geometry_quad_(gfx::RectF(-0.5f, -0.5f, 1.0f, 1.0f)),
+      shared_geometry_quad_(QuadVertexRect()),
       gl_(output_surface->context_provider()->ContextGL()),
       context_support_(output_surface->context_provider()->ContextSupport()),
       texture_mailbox_deleter_(texture_mailbox_deleter),
@@ -214,6 +275,7 @@
       blend_shadow_(false),
       highp_threshold_min_(highp_threshold_min),
       highp_threshold_cache_(0),
+      use_sync_query_(false),
       on_demand_tile_raster_resource_id_(0) {
   DCHECK(gl_);
   DCHECK(context_support_);
@@ -248,6 +310,8 @@
 
   capabilities_.allow_rasterize_on_demand = true;
 
+  use_sync_query_ = context_caps.gpu.sync_query;
+
   InitializeSharedObjects();
 }
 
@@ -349,6 +413,25 @@
 
   TRACE_EVENT0("cc", "GLRenderer::BeginDrawingFrame");
 
+  scoped_refptr<ResourceProvider::Fence> read_lock_fence;
+  if (use_sync_query_) {
+    while (!pending_sync_queries_.empty()) {
+      if (pending_sync_queries_.front()->IsPending())
+        break;
+
+      available_sync_queries_.push_back(pending_sync_queries_.take_front());
+    }
+
+    current_sync_query_ = available_sync_queries_.empty()
+                              ? make_scoped_ptr(new SyncQuery(gl_))
+                              : available_sync_queries_.take_front();
+
+    read_lock_fence = current_sync_query_->Begin();
+  } else {
+    read_lock_fence = make_scoped_refptr(new FallbackFence(gl_));
+  }
+  resource_provider_->SetReadLockFence(read_lock_fence.get());
+
   // TODO(enne): Do we need to reinitialize all of this state per frame?
   ReinitializeGLState();
 }
@@ -461,10 +544,8 @@
   // Use the full quad_rect for debug quads to not move the edges based on
   // partial swaps.
   gfx::Rect layer_rect = quad->rect;
-  gfx::Transform render_matrix = quad->quadTransform();
-  render_matrix.Translate(0.5f * layer_rect.width() + layer_rect.x(),
-                          0.5f * layer_rect.height() + layer_rect.y());
-  render_matrix.Scale(layer_rect.width(), layer_rect.height());
+  gfx::Transform render_matrix;
+  QuadRectTransform(&render_matrix, quad->quadTransform(), layer_rect);
   GLRenderer::ToGLMatrix(&gl_matrix[0],
                          frame->projection_matrix * render_matrix);
   GLC(gl_,
@@ -799,11 +880,8 @@
     // Copy the readback pixels from device to the background texture for the
     // surface.
     gfx::Transform device_to_framebuffer_transform;
-    device_to_framebuffer_transform.Translate(
-        quad->rect.width() * 0.5f + quad->rect.x(),
-        quad->rect.height() * 0.5f + quad->rect.y());
-    device_to_framebuffer_transform.Scale(quad->rect.width(),
-                                          quad->rect.height());
+    QuadRectTransform(
+        &device_to_framebuffer_transform, gfx::Transform(), quad->rect);
     device_to_framebuffer_transform.PreconcatTransform(
         contents_device_transform_inverse);
 
@@ -2002,6 +2080,12 @@
 }
 
 void GLRenderer::FinishDrawingFrame(DrawingFrame* frame) {
+  if (use_sync_query_) {
+    DCHECK(current_sync_query_);
+    current_sync_query_->End();
+    pending_sync_queries_.push_back(current_sync_query_.Pass());
+  }
+
   current_framebuffer_lock_.reset();
   swap_buffer_rect_.Union(gfx::ToEnclosingRect(frame->root_damage_rect));
 
@@ -2186,14 +2270,6 @@
   in_use_overlay_resources_.swap(pending_overlay_resources_);
 
   swap_buffer_rect_ = gfx::Rect();
-
-  // We don't have real fences, so we mark read fences as passed
-  // assuming a double-buffered GPU pipeline. A texture can be
-  // written to after one full frame has past since it was last read.
-  if (last_swap_fence_.get())
-    static_cast<SimpleSwapFence*>(last_swap_fence_.get())->SetHasPassed();
-  last_swap_fence_ = resource_provider_->GetReadLockFence();
-  resource_provider_->SetReadLockFence(new SimpleSwapFence());
 }
 
 void GLRenderer::EnforceMemoryPolicy() {
diff --git a/cc/output/gl_renderer.h b/cc/output/gl_renderer.h
index 13a9060..e776082 100644
--- a/cc/output/gl_renderer.h
+++ b/cc/output/gl_renderer.h
@@ -7,6 +7,7 @@
 
 #include "base/cancelable_callback.h"
 #include "cc/base/cc_export.h"
+#include "cc/base/scoped_ptr_deque.h"
 #include "cc/base/scoped_ptr_vector.h"
 #include "cc/output/direct_renderer.h"
 #include "cc/output/gl_renderer_draw_cache.h"
@@ -431,7 +432,11 @@
 
   scoped_ptr<ResourceProvider::ScopedWriteLockGL> current_framebuffer_lock_;
 
-  scoped_refptr<ResourceProvider::Fence> last_swap_fence_;
+  class SyncQuery;
+  ScopedPtrDeque<SyncQuery> pending_sync_queries_;
+  ScopedPtrDeque<SyncQuery> available_sync_queries_;
+  scoped_ptr<SyncQuery> current_sync_query_;
+  bool use_sync_query_;
 
   SkBitmap on_demand_tile_raster_bitmap_;
   ResourceProvider::ResourceId on_demand_tile_raster_resource_id_;
diff --git a/cc/output/output_surface.cc b/cc/output/output_surface.cc
index 3aaa1a1..7818849 100644
--- a/cc/output/output_surface.cc
+++ b/cc/output/output_surface.cc
@@ -46,8 +46,8 @@
 OutputSurface::OutputSurface(scoped_refptr<ContextProvider> context_provider)
     : context_provider_(context_provider),
       device_scale_factor_(-1),
-      max_frames_pending_(0),
-      pending_swap_buffers_(0),
+      begin_frame_interval_(BeginFrameArgs::DefaultInterval()),
+      throttle_frame_production_(true),
       needs_begin_frame_(false),
       client_ready_for_begin_frame_(true),
       client_(NULL),
@@ -59,8 +59,8 @@
 OutputSurface::OutputSurface(scoped_ptr<SoftwareOutputDevice> software_device)
     : software_device_(software_device.Pass()),
       device_scale_factor_(-1),
-      max_frames_pending_(0),
-      pending_swap_buffers_(0),
+      begin_frame_interval_(BeginFrameArgs::DefaultInterval()),
+      throttle_frame_production_(true),
       needs_begin_frame_(false),
       client_ready_for_begin_frame_(true),
       client_(NULL),
@@ -74,8 +74,8 @@
     : context_provider_(context_provider),
       software_device_(software_device.Pass()),
       device_scale_factor_(-1),
-      max_frames_pending_(0),
-      pending_swap_buffers_(0),
+      begin_frame_interval_(BeginFrameArgs::DefaultInterval()),
+      throttle_frame_production_(true),
       needs_begin_frame_(false),
       client_ready_for_begin_frame_(true),
       client_(NULL),
@@ -84,37 +84,26 @@
       weak_ptr_factory_(this),
       gpu_latency_history_(kGpuLatencyHistorySize) {}
 
+void OutputSurface::SetThrottleFrameProduction(bool enable) {
+  DCHECK(!frame_rate_controller_);
+  throttle_frame_production_ = enable;
+}
+
 void OutputSurface::InitializeBeginFrameEmulation(
     base::SingleThreadTaskRunner* task_runner,
-    bool throttle_frame_production,
     base::TimeDelta interval) {
-  if (throttle_frame_production) {
-    scoped_refptr<DelayBasedTimeSource> time_source;
-    if (gfx::FrameTime::TimestampsAreHighRes())
-      time_source = DelayBasedTimeSourceHighRes::Create(interval, task_runner);
-    else
-      time_source = DelayBasedTimeSource::Create(interval, task_runner);
-    frame_rate_controller_.reset(new FrameRateController(time_source));
-  } else {
-    frame_rate_controller_.reset(new FrameRateController(task_runner));
-  }
+  DCHECK(throttle_frame_production_);
+  scoped_refptr<DelayBasedTimeSource> time_source;
+  if (gfx::FrameTime::TimestampsAreHighRes())
+    time_source = DelayBasedTimeSourceHighRes::Create(interval, task_runner);
+  else
+    time_source = DelayBasedTimeSource::Create(interval, task_runner);
+  frame_rate_controller_.reset(new FrameRateController(time_source));
 
   frame_rate_controller_->SetClient(this);
-  frame_rate_controller_->SetMaxSwapsPending(max_frames_pending_);
   frame_rate_controller_->SetDeadlineAdjustment(
       capabilities_.adjust_deadline_for_parent ?
           BeginFrameArgs::DefaultDeadlineAdjustment() : base::TimeDelta());
-
-  // The new frame rate controller will consume the swap acks of the old
-  // frame rate controller, so we set that expectation up here.
-  for (int i = 0; i < pending_swap_buffers_; i++)
-    frame_rate_controller_->DidSwapBuffers();
-}
-
-void OutputSurface::SetMaxFramesPending(int max_frames_pending) {
-  if (frame_rate_controller_)
-    frame_rate_controller_->SetMaxSwapsPending(max_frames_pending);
-  max_frames_pending_ = max_frames_pending;
 }
 
 void OutputSurface::CommitVSyncParameters(base::TimeTicks timebase,
@@ -125,17 +114,14 @@
                (timebase - base::TimeTicks()).InSecondsF(),
                "interval",
                interval.InSecondsF());
+  begin_frame_interval_ = interval;
   if (frame_rate_controller_)
     frame_rate_controller_->SetTimebaseAndInterval(timebase, interval);
 }
 
-void OutputSurface::FrameRateControllerTick(bool throttled,
-                                            const BeginFrameArgs& args) {
+void OutputSurface::FrameRateControllerTick(const BeginFrameArgs& args) {
   DCHECK(frame_rate_controller_);
-  if (throttled)
-    skipped_begin_frame_args_ = args;
-  else
-    BeginFrame(args);
+  BeginFrame(args);
 }
 
 // Forwarded to OutputSurfaceClient
@@ -148,25 +134,29 @@
   TRACE_EVENT1("cc", "OutputSurface::SetNeedsBeginFrame", "enable", enable);
   needs_begin_frame_ = enable;
   client_ready_for_begin_frame_ = true;
-  if (frame_rate_controller_) {
+  if (!throttle_frame_production_) {
+    if (enable) {
+      base::TimeTicks frame_time = gfx::FrameTime::Now();
+      base::TimeTicks deadline = frame_time + begin_frame_interval_;
+      skipped_begin_frame_args_ =
+          BeginFrameArgs::Create(frame_time, deadline, begin_frame_interval_);
+    }
+  } else if (frame_rate_controller_) {
     BeginFrameArgs skipped = frame_rate_controller_->SetActive(enable);
     if (skipped.IsValid())
       skipped_begin_frame_args_ = skipped;
   }
+
   if (needs_begin_frame_)
     PostCheckForRetroactiveBeginFrame();
 }
 
 void OutputSurface::BeginFrame(const BeginFrameArgs& args) {
-  TRACE_EVENT2("cc",
+  TRACE_EVENT1("cc",
                "OutputSurface::BeginFrame",
                "client_ready_for_begin_frame_",
-               client_ready_for_begin_frame_,
-               "pending_swap_buffers_",
-               pending_swap_buffers_);
-  if (!needs_begin_frame_ || !client_ready_for_begin_frame_ ||
-      (pending_swap_buffers_ >= max_frames_pending_ &&
-       max_frames_pending_ > 0)) {
+               client_ready_for_begin_frame_);
+  if (!needs_begin_frame_ || !client_ready_for_begin_frame_) {
     skipped_begin_frame_args_ = args;
   } else {
     client_ready_for_begin_frame_ = false;
@@ -201,28 +191,19 @@
 void OutputSurface::CheckForRetroactiveBeginFrame() {
   TRACE_EVENT0("cc", "OutputSurface::CheckForRetroactiveBeginFrame");
   check_for_retroactive_begin_frame_pending_ = false;
-  if (gfx::FrameTime::Now() < RetroactiveBeginFrameDeadline())
+  if (!throttle_frame_production_ ||
+      gfx::FrameTime::Now() < RetroactiveBeginFrameDeadline())
     BeginFrame(skipped_begin_frame_args_);
 }
 
 void OutputSurface::DidSwapBuffers() {
-  pending_swap_buffers_++;
-  TRACE_EVENT1("cc", "OutputSurface::DidSwapBuffers",
-               "pending_swap_buffers_", pending_swap_buffers_);
+  TRACE_EVENT0("cc", "OutputSurface::DidSwapBuffers");
   client_->DidSwapBuffers();
-  if (frame_rate_controller_)
-    frame_rate_controller_->DidSwapBuffers();
-  PostCheckForRetroactiveBeginFrame();
 }
 
 void OutputSurface::OnSwapBuffersComplete() {
-  pending_swap_buffers_--;
-  TRACE_EVENT1("cc", "OutputSurface::OnSwapBuffersComplete",
-               "pending_swap_buffers_", pending_swap_buffers_);
-  client_->OnSwapBuffersComplete();
-  if (frame_rate_controller_)
-    frame_rate_controller_->DidSwapBuffersComplete();
-  PostCheckForRetroactiveBeginFrame();
+  TRACE_EVENT0("cc", "OutputSurface::OnSwapBuffersComplete");
+  client_->DidSwapBuffersComplete();
 }
 
 void OutputSurface::ReclaimResources(const CompositorFrameAck* ack) {
@@ -232,7 +213,6 @@
 void OutputSurface::DidLoseOutputSurface() {
   TRACE_EVENT0("cc", "OutputSurface::DidLoseOutputSurface");
   client_ready_for_begin_frame_ = true;
-  pending_swap_buffers_ = 0;
   skipped_begin_frame_args_ = BeginFrameArgs();
   if (frame_rate_controller_)
     frame_rate_controller_->SetActive(false);
diff --git a/cc/output/output_surface.h b/cc/output/output_surface.h
index a5d4d7b..471170a 100644
--- a/cc/output/output_surface.h
+++ b/cc/output/output_surface.h
@@ -105,11 +105,11 @@
   // thread.
   virtual bool BindToClient(OutputSurfaceClient* client);
 
-  void InitializeBeginFrameEmulation(base::SingleThreadTaskRunner* task_runner,
-                                     bool throttle_frame_production,
-                                     base::TimeDelta interval);
+  // Enable or disable vsync.
+  void SetThrottleFrameProduction(bool enable);
 
-  void SetMaxFramesPending(int max_frames_pending);
+  void InitializeBeginFrameEmulation(base::SingleThreadTaskRunner* task_runner,
+                                     base::TimeDelta interval);
 
   virtual void EnsureBackbuffer();
   virtual void DiscardBackbuffer();
@@ -162,16 +162,16 @@
   scoped_ptr<OverlayCandidateValidator> overlay_candidate_validator_;
   gfx::Size surface_size_;
   float device_scale_factor_;
+  base::TimeDelta begin_frame_interval_;
 
   // The FrameRateController is deprecated.
   // Platforms should move to native BeginFrames instead.
   void CommitVSyncParameters(base::TimeTicks timebase,
                              base::TimeDelta interval);
-  virtual void FrameRateControllerTick(bool throttled,
-                                       const BeginFrameArgs& args) OVERRIDE;
+  virtual void FrameRateControllerTick(const BeginFrameArgs& args) OVERRIDE;
   scoped_ptr<FrameRateController> frame_rate_controller_;
-  int max_frames_pending_;
-  int pending_swap_buffers_;
+
+  bool throttle_frame_production_;
   bool needs_begin_frame_;
   bool client_ready_for_begin_frame_;
 
diff --git a/cc/output/output_surface_client.h b/cc/output/output_surface_client.h
index 08d9b62..141e01a 100644
--- a/cc/output/output_surface_client.h
+++ b/cc/output/output_surface_client.h
@@ -33,7 +33,7 @@
   virtual void SetNeedsRedrawRect(const gfx::Rect& damage_rect) = 0;
   virtual void BeginFrame(const BeginFrameArgs& args) = 0;
   virtual void DidSwapBuffers() = 0;
-  virtual void OnSwapBuffersComplete() = 0;
+  virtual void DidSwapBuffersComplete() = 0;
   virtual void ReclaimResources(const CompositorFrameAck* ack) = 0;
   virtual void DidLoseOutputSurface() = 0;
   virtual void SetExternalDrawConstraints(const gfx::Transform& transform,
diff --git a/cc/output/output_surface_unittest.cc b/cc/output/output_surface_unittest.cc
index d40feb1..637ba05 100644
--- a/cc/output/output_surface_unittest.cc
+++ b/cc/output/output_surface_unittest.cc
@@ -59,10 +59,6 @@
     DidSwapBuffers();
   }
 
-  int pending_swap_buffers() {
-    return pending_swap_buffers_;
-  }
-
   void OnSwapBuffersCompleteForTesting() {
     OnSwapBuffersComplete();
   }
@@ -232,20 +228,17 @@
   // Initialize BeginFrame emulation
   scoped_refptr<base::TestSimpleTaskRunner> task_runner =
       new base::TestSimpleTaskRunner;
-  bool throttle_frame_production = true;
   const base::TimeDelta display_refresh_interval =
       BeginFrameArgs::DefaultInterval();
 
-  output_surface.InitializeBeginFrameEmulation(
-      task_runner.get(), throttle_frame_production, display_refresh_interval);
+  output_surface.InitializeBeginFrameEmulation(task_runner.get(),
+                                               display_refresh_interval);
 
-  output_surface.SetMaxFramesPending(2);
   output_surface.EnableRetroactiveBeginFrameDeadline(
       false, false, base::TimeDelta());
 
   // We should start off with 0 BeginFrames
   EXPECT_EQ(client.begin_frame_count(), 0);
-  EXPECT_EQ(output_surface.pending_swap_buffers(), 0);
 
   // We should not have a pending task until a BeginFrame has been
   // requested.
@@ -256,54 +249,29 @@
   // BeginFrame should be called on the first tick.
   task_runner->RunPendingTasks();
   EXPECT_EQ(client.begin_frame_count(), 1);
-  EXPECT_EQ(output_surface.pending_swap_buffers(), 0);
 
   // BeginFrame should not be called when there is a pending BeginFrame.
   task_runner->RunPendingTasks();
   EXPECT_EQ(client.begin_frame_count(), 1);
-  EXPECT_EQ(output_surface.pending_swap_buffers(), 0);
-
   // SetNeedsBeginFrame should clear the pending BeginFrame after
   // a SwapBuffers.
   output_surface.DidSwapBuffersForTesting();
   output_surface.SetNeedsBeginFrame(true);
   EXPECT_EQ(client.begin_frame_count(), 1);
-  EXPECT_EQ(output_surface.pending_swap_buffers(), 1);
   task_runner->RunPendingTasks();
   EXPECT_EQ(client.begin_frame_count(), 2);
-  EXPECT_EQ(output_surface.pending_swap_buffers(), 1);
-
-  // BeginFrame should be throttled by pending swap buffers.
-  output_surface.DidSwapBuffersForTesting();
-  output_surface.SetNeedsBeginFrame(true);
-  EXPECT_EQ(client.begin_frame_count(), 2);
-  EXPECT_EQ(output_surface.pending_swap_buffers(), 2);
-  task_runner->RunPendingTasks();
-  EXPECT_EQ(client.begin_frame_count(), 2);
-  EXPECT_EQ(output_surface.pending_swap_buffers(), 2);
-
-  // SwapAck should decrement pending swap buffers and unblock BeginFrame
-  // again.
-  output_surface.OnSwapBuffersCompleteForTesting();
-  EXPECT_EQ(client.begin_frame_count(), 2);
-  EXPECT_EQ(output_surface.pending_swap_buffers(), 1);
-  task_runner->RunPendingTasks();
-  EXPECT_EQ(client.begin_frame_count(), 3);
-  EXPECT_EQ(output_surface.pending_swap_buffers(), 1);
 
   // Calling SetNeedsBeginFrame again indicates a swap did not occur but
   // the client still wants another BeginFrame.
   output_surface.SetNeedsBeginFrame(true);
   task_runner->RunPendingTasks();
-  EXPECT_EQ(client.begin_frame_count(), 4);
-  EXPECT_EQ(output_surface.pending_swap_buffers(), 1);
+  EXPECT_EQ(client.begin_frame_count(), 3);
 
   // Disabling SetNeedsBeginFrame should prevent further BeginFrames.
   output_surface.SetNeedsBeginFrame(false);
   task_runner->RunPendingTasks();
   EXPECT_FALSE(task_runner->HasPendingTask());
-  EXPECT_EQ(client.begin_frame_count(), 4);
-  EXPECT_EQ(output_surface.pending_swap_buffers(), 1);
+  EXPECT_EQ(client.begin_frame_count(), 3);
 }
 
 TEST(OutputSurfaceTest, OptimisticAndRetroactiveBeginFrames) {
@@ -315,7 +283,6 @@
   EXPECT_TRUE(output_surface.HasClient());
   EXPECT_FALSE(client.deferred_initialize_called());
 
-  output_surface.SetMaxFramesPending(2);
   output_surface.EnableRetroactiveBeginFrameDeadline(
       true, false, base::TimeDelta());
 
@@ -341,19 +308,6 @@
   output_surface.DidSwapBuffersForTesting();
   output_surface.SetNeedsBeginFrame(true);
   EXPECT_EQ(client.begin_frame_count(), 3);
-  EXPECT_EQ(output_surface.pending_swap_buffers(), 1);
-
-  // Optimistically injected BeginFrames should be by throttled by pending
-  // swap buffers...
-  output_surface.DidSwapBuffersForTesting();
-  output_surface.SetNeedsBeginFrame(true);
-  EXPECT_EQ(client.begin_frame_count(), 3);
-  EXPECT_EQ(output_surface.pending_swap_buffers(), 2);
-  output_surface.BeginFrameForTesting();
-  EXPECT_EQ(client.begin_frame_count(), 3);
-  // ...and retroactively triggered by OnSwapBuffersComplete
-  output_surface.OnSwapBuffersCompleteForTesting();
-  EXPECT_EQ(client.begin_frame_count(), 4);
 }
 
 TEST(OutputSurfaceTest, RetroactiveBeginFrameDoesNotDoubleTickWhenEmulating) {
@@ -373,23 +327,20 @@
   // Initialize BeginFrame emulation
   scoped_refptr<base::TestSimpleTaskRunner> task_runner =
       new base::TestSimpleTaskRunner;
-  bool throttle_frame_production = true;
   const base::TimeDelta display_refresh_interval = big_interval;
 
-  output_surface.InitializeBeginFrameEmulation(
-      task_runner.get(), throttle_frame_production, display_refresh_interval);
+  output_surface.InitializeBeginFrameEmulation(task_runner.get(),
+                                               display_refresh_interval);
 
   // We need to subtract an epsilon from Now() because some platforms have
   // a slow clock.
   output_surface.CommitVSyncParametersForTesting(
       gfx::FrameTime::Now() - base::TimeDelta::FromSeconds(1), big_interval);
 
-  output_surface.SetMaxFramesPending(2);
   output_surface.EnableRetroactiveBeginFrameDeadline(true, true, big_interval);
 
   // We should start off with 0 BeginFrames
   EXPECT_EQ(client.begin_frame_count(), 0);
-  EXPECT_EQ(output_surface.pending_swap_buffers(), 0);
 
   // The first SetNeedsBeginFrame(true) should start a retroactive
   // BeginFrame.
diff --git a/cc/output/render_surface_filters.cc b/cc/output/render_surface_filters.cc
index ca97e13..6160a93 100644
--- a/cc/output/render_surface_filters.cc
+++ b/cc/output/render_surface_filters.cc
@@ -13,12 +13,14 @@
 #include "third_party/skia/include/core/SkCanvas.h"
 #include "third_party/skia/include/core/SkFlattenableBuffers.h"
 #include "third_party/skia/include/core/SkImageFilter.h"
+#include "third_party/skia/include/effects/SkAlphaThresholdFilter.h"
 #include "third_party/skia/include/effects/SkBlurImageFilter.h"
 #include "third_party/skia/include/effects/SkColorFilterImageFilter.h"
 #include "third_party/skia/include/effects/SkColorMatrixFilter.h"
 #include "third_party/skia/include/effects/SkComposeImageFilter.h"
 #include "third_party/skia/include/effects/SkDropShadowImageFilter.h"
 #include "third_party/skia/include/effects/SkMagnifierImageFilter.h"
+#include "third_party/skia/include/effects/SkRectShaderImageFilter.h"
 #include "third_party/skia/include/gpu/SkGpuDevice.h"
 #include "third_party/skia/include/gpu/SkGrPixelRef.h"
 #include "ui/gfx/size_f.h"
@@ -260,6 +262,18 @@
         }
         break;
       }
+      case FilterOperation::ALPHA_THRESHOLD: {
+        skia::RefPtr<SkImageFilter> alpha_filter = skia::AdoptRef(
+            SkAlphaThresholdFilter::Create(
+                op.region(), op.amount(), op.outer_threshold()));
+        if (image_filter.get()) {
+          image_filter = skia::AdoptRef(new SkComposeImageFilter(
+              alpha_filter.get(), image_filter.get()));
+        } else {
+          image_filter = alpha_filter;
+        }
+        break;
+      }
     }
   }
   return image_filter;
diff --git a/cc/resources/direct_raster_worker_pool.cc b/cc/resources/direct_raster_worker_pool.cc
index bf7d7a2..4bd0c55 100644
--- a/cc/resources/direct_raster_worker_pool.cc
+++ b/cc/resources/direct_raster_worker_pool.cc
@@ -27,6 +27,8 @@
     ResourceProvider* resource_provider,
     ContextProvider* context_provider)
     : task_runner_(task_runner),
+      task_graph_runner_(new TaskGraphRunner),
+      namespace_token_(task_graph_runner_->GetNamespaceToken()),
       resource_provider_(resource_provider),
       context_provider_(context_provider),
       run_tasks_on_origin_thread_pending_(false),
@@ -45,6 +47,14 @@
   client_ = client;
 }
 
+void DirectRasterWorkerPool::Shutdown() {
+  TRACE_EVENT0("cc", "DirectRasterWorkerPool::Shutdown");
+
+  TaskGraph empty;
+  task_graph_runner_->ScheduleTasks(namespace_token_, &empty);
+  task_graph_runner_->WaitForTasksToFinishRunning(namespace_token_);
+}
+
 void DirectRasterWorkerPool::ScheduleTasks(RasterTaskQueue* queue) {
   TRACE_EVENT0("cc", "DirectRasterWorkerPool::ScheduleTasks");
 
@@ -57,6 +67,10 @@
   raster_tasks_pending_ = true;
   raster_tasks_required_for_activation_pending_ = true;
 
+  unsigned priority = kRasterTaskPriorityBase;
+
+  graph_.Reset();
+
   // Cancel existing OnRasterFinished callbacks.
   raster_finished_weak_ptr_factory_.InvalidateWeakPtrs();
 
@@ -74,28 +88,37 @@
           base::Bind(&DirectRasterWorkerPool::OnRasterFinished,
                      raster_finished_weak_ptr_factory_.GetWeakPtr())));
 
-  // Need to cancel tasks not present in new queue if we haven't had a
-  // chance to run the previous set of tasks yet.
-  // TODO(reveman): Remove this once only tasks for which
-  // ::ScheduleOnOriginThread has been called need to be canceled.
-  if (run_tasks_on_origin_thread_pending_) {
-    for (RasterTaskQueue::Item::Vector::const_iterator it =
-             raster_tasks_.items.begin();
-         it != raster_tasks_.items.end();
-         ++it) {
-      RasterTask* task = it->task;
+  for (RasterTaskQueue::Item::Vector::const_iterator it = queue->items.begin();
+       it != queue->items.end();
+       ++it) {
+    const RasterTaskQueue::Item& item = *it;
+    RasterTask* task = item.task;
+    DCHECK(!task->HasCompleted());
 
-      if (std::find_if(queue->items.begin(),
-                       queue->items.end(),
-                       RasterTaskQueue::Item::TaskComparator(task)) ==
-          queue->items.end())
-        completed_tasks_.push_back(task);
+    if (item.required_for_activation) {
+      graph_.edges.push_back(TaskGraph::Edge(
+          task, new_raster_required_for_activation_finished_task.get()));
     }
+
+    InsertNodesForRasterTask(&graph_, task, task->dependencies(), priority++);
+
+    graph_.edges.push_back(
+        TaskGraph::Edge(task, new_raster_finished_task.get()));
   }
 
-  ScheduleRunTasksOnOriginThread();
+  InsertNodeForTask(&graph_,
+                    new_raster_required_for_activation_finished_task.get(),
+                    kRasterRequiredForActivationFinishedTaskPriority,
+                    queue->required_for_activation_count);
+  InsertNodeForTask(&graph_,
+                    new_raster_finished_task.get(),
+                    kRasterFinishedTaskPriority,
+                    queue->items.size());
 
-  raster_tasks_.Swap(queue);
+  ScheduleTasksOnOriginThread(this, &graph_);
+  task_graph_runner_->ScheduleTasks(namespace_token_, &graph_);
+
+  ScheduleRunTasksOnOriginThread();
 
   raster_finished_task_ = new_raster_finished_task;
   raster_required_for_activation_finished_task_ =
@@ -105,10 +128,16 @@
 void DirectRasterWorkerPool::CheckForCompletedTasks() {
   TRACE_EVENT0("cc", "DirectRasterWorkerPool::CheckForCompletedTasks");
 
-  for (RasterizerTask::Vector::const_iterator it = completed_tasks_.begin();
+  task_graph_runner_->CollectCompletedTasks(namespace_token_,
+                                            &completed_tasks_);
+  for (Task::Vector::const_iterator it = completed_tasks_.begin();
        it != completed_tasks_.end();
        ++it) {
-    RasterizerTask* task = it->get();
+    RasterizerTask* task = static_cast<RasterizerTask*>(it->get());
+
+    task->WillComplete();
+    task->CompleteOnOriginThread(this);
+    task->DidComplete();
 
     task->RunReplyOnOriginThread();
   }
@@ -157,8 +186,7 @@
   DCHECK(run_tasks_on_origin_thread_pending_);
   run_tasks_on_origin_thread_pending_ = false;
 
-  if (!raster_tasks_.items.empty()) {
-    DCHECK(context_provider_);
+  if (context_provider_) {
     DCHECK(context_provider_->ContextGL());
     // TODO(alokp): Use a trace macro to push/pop markers.
     // Using push/pop functions directly incurs cost to evaluate function
@@ -170,54 +198,18 @@
     // TODO(alokp): Implement TestContextProvider::GrContext().
     if (gr_context)
       gr_context->resetContext();
+  }
 
-    for (RasterTaskQueue::Item::Vector::const_iterator it =
-             raster_tasks_.items.begin();
-         it != raster_tasks_.items.end();
-         ++it) {
-      RasterTask* task = it->task;
-      DCHECK(!task->HasCompleted());
+  task_graph_runner_->RunUntilIdle();
 
-      // First need to run all dependencies.
-      for (ImageDecodeTask::Vector::const_iterator it =
-               task->dependencies().begin();
-           it != task->dependencies().end();
-           ++it) {
-        ImageDecodeTask* dependency = it->get();
-        if (dependency->HasCompleted())
-          continue;
-
-        RunTaskOnOriginThread(dependency);
-        completed_tasks_.push_back(dependency);
-      }
-
-      RunTaskOnOriginThread(task);
-      completed_tasks_.push_back(task);
-    }
-
+  if (context_provider_) {
+    GrContext* gr_context = context_provider_->GrContext();
     // TODO(alokp): Implement TestContextProvider::GrContext().
     if (gr_context)
       gr_context->flush();
 
     context_provider_->ContextGL()->PopGroupMarkerEXT();
   }
-
-  RunTaskOnOriginThread(raster_required_for_activation_finished_task_.get());
-  RunTaskOnOriginThread(raster_finished_task_.get());
-}
-
-void DirectRasterWorkerPool::RunTaskOnOriginThread(RasterizerTask* task) {
-  task->WillSchedule();
-  task->ScheduleOnOriginThread(this);
-  task->DidSchedule();
-
-  task->WillRun();
-  task->RunOnOriginThread();
-  task->DidRun();
-
-  task->WillComplete();
-  task->CompleteOnOriginThread(this);
-  task->DidComplete();
 }
 
 }  // namespace cc
diff --git a/cc/resources/direct_raster_worker_pool.h b/cc/resources/direct_raster_worker_pool.h
index f2c927b..8194b4f 100644
--- a/cc/resources/direct_raster_worker_pool.h
+++ b/cc/resources/direct_raster_worker_pool.h
@@ -29,7 +29,7 @@
 
   // Overridden from Rasterizer:
   virtual void SetClient(RasterizerClient* client) OVERRIDE;
-  virtual void Shutdown() OVERRIDE {}
+  virtual void Shutdown() OVERRIDE;
   virtual void ScheduleTasks(RasterTaskQueue* queue) OVERRIDE;
   virtual void CheckForCompletedTasks() OVERRIDE;
 
@@ -49,14 +49,14 @@
   void RunTaskOnOriginThread(RasterizerTask* task);
 
   scoped_refptr<base::SequencedTaskRunner> task_runner_;
+  scoped_ptr<TaskGraphRunner> task_graph_runner_;
+  const NamespaceToken namespace_token_;
   RasterizerClient* client_;
   ResourceProvider* resource_provider_;
   ContextProvider* context_provider_;
 
   bool run_tasks_on_origin_thread_pending_;
 
-  RasterTaskQueue raster_tasks_;
-
   bool raster_tasks_pending_;
   bool raster_tasks_required_for_activation_pending_;
 
@@ -66,7 +66,10 @@
   scoped_refptr<RasterizerTask> raster_finished_task_;
   scoped_refptr<RasterizerTask> raster_required_for_activation_finished_task_;
 
-  RasterizerTask::Vector completed_tasks_;
+  // Task graph used when scheduling tasks and vector used to gather
+  // completed tasks.
+  TaskGraph graph_;
+  Task::Vector completed_tasks_;
 
   base::WeakPtrFactory<DirectRasterWorkerPool> weak_ptr_factory_;
 
diff --git a/cc/resources/layer_tiling_data.cc b/cc/resources/layer_tiling_data.cc
index ccbb6d0..b8d80bc 100644
--- a/cc/resources/layer_tiling_data.cc
+++ b/cc/resources/layer_tiling_data.cc
@@ -17,7 +17,7 @@
 
 LayerTilingData::LayerTilingData(const gfx::Size& tile_size,
                                  BorderTexelOption border)
-    : tiling_data_(tile_size, gfx::Size(), border == HAS_BORDER_TEXELS) {
+    : tiling_data_(tile_size, gfx::Rect(), border == HAS_BORDER_TEXELS) {
   SetTileSize(tile_size);
 }
 
@@ -112,9 +112,9 @@
   return opaque_region;
 }
 
-void LayerTilingData::SetBounds(const gfx::Size& size) {
-  tiling_data_.SetTotalSize(size);
-  if (size.IsEmpty()) {
+void LayerTilingData::SetTilingRect(const gfx::Rect& tiling_rect) {
+  tiling_data_.SetTilingRect(tiling_rect);
+  if (tiling_rect.IsEmpty()) {
     tiles_.clear();
     return;
   }
@@ -122,8 +122,7 @@
   // Any tiles completely outside our new bounds are invalid and should be
   // dropped.
   int left, top, right, bottom;
-  ContentRectToTileIndices(
-      gfx::Rect(size), &left, &top, &right, &bottom);
+  ContentRectToTileIndices(tiling_rect, &left, &top, &right, &bottom);
   std::vector<TileMapKey> invalid_tile_keys;
   for (TileMap::const_iterator it = tiles_.begin(); it != tiles_.end(); ++it) {
     if (it->first.first > right || it->first.second > bottom)
diff --git a/cc/resources/layer_tiling_data.h b/cc/resources/layer_tiling_data.h
index 94644d0..b145e38 100644
--- a/cc/resources/layer_tiling_data.h
+++ b/cc/resources/layer_tiling_data.h
@@ -81,8 +81,8 @@
   Tile* TileAt(int i, int j) const;
   const TileMap& tiles() const { return tiles_; }
 
-  void SetBounds(const gfx::Size& size);
-  gfx::Size bounds() const { return tiling_data_.total_size(); }
+  void SetTilingRect(const gfx::Rect& tiling_rect);
+  gfx::Rect tiling_rect() const { return tiling_data_.tiling_rect(); }
 
   void ContentRectToTileIndices(const gfx::Rect& rect,
                                 int* left,
diff --git a/cc/resources/picture.cc b/cc/resources/picture.cc
index 93b59ae..8c2ba8a 100644
--- a/cc/resources/picture.cc
+++ b/cc/resources/picture.cc
@@ -249,17 +249,20 @@
 
   DCHECK(!picture_);
   DCHECK(!tile_grid_info.fTileInterval.isEmpty());
-  picture_ = skia::AdoptRef(new SkTileGridPicture(
-      layer_rect_.width(), layer_rect_.height(), tile_grid_info));
+
+  skia::RefPtr<SkPictureFactory> factory =
+      skia::AdoptRef(new SkTileGridPictureFactory(tile_grid_info));
+  SkPictureRecorder recorder(factory.get());
 
   skia::RefPtr<SkCanvas> canvas;
+  canvas = skia::SharePtr(
+      recorder.beginRecording(layer_rect_.width(),
+                              layer_rect_.height(),
+                              SkPicture::kUsePathBoundsForClip_RecordingFlag));
+
   switch (recording_mode) {
     case RECORD_NORMALLY:
-      canvas = skia::SharePtr(picture_->beginRecording(
-          layer_rect_.width(),
-          layer_rect_.height(),
-          SkPicture::kUsePathBoundsForClip_RecordingFlag |
-              SkPicture::kOptimizeForClippedPlayback_RecordingFlag));
+      // Already setup for normal recording
       break;
     case RECORD_WITH_SK_NULL_CANVAS:
       canvas = skia::AdoptRef(SkCreateNullCanvas());
@@ -267,6 +270,7 @@
     case RECORD_WITH_PAINTING_DISABLED:
       // Blink's GraphicsContext will disable painting when given a NULL
       // canvas.
+      canvas.clear();
       break;
     default:
       NOTREACHED();
@@ -289,8 +293,8 @@
 
   if (canvas)
     canvas->restore();
-  if (picture_->getRecordingCanvas())
-    picture_->endRecording();
+  picture_ = skia::AdoptRef(recorder.endRecording());
+  DCHECK(picture_);
 
   opaque_rect_ = gfx::ToEnclosedRect(opaque_layer_rect);
 
diff --git a/cc/resources/picture_layer_tiling.cc b/cc/resources/picture_layer_tiling.cc
index 26e27da..a3664e7 100644
--- a/cc/resources/picture_layer_tiling.cc
+++ b/cc/resources/picture_layer_tiling.cc
@@ -60,7 +60,7 @@
       layer_bounds_(layer_bounds),
       resolution_(NON_IDEAL_RESOLUTION),
       client_(client),
-      tiling_data_(gfx::Size(), gfx::Size(), true),
+      tiling_data_(gfx::Size(), gfx::Rect(), true),
       last_impl_frame_time_in_seconds_(0.0),
       eviction_tiles_cache_valid_(false),
       eviction_cache_tree_priority_(SAME_PRIORITY_FOR_BOTH_TREES) {
@@ -74,7 +74,7 @@
       " Layer bounds: " << layer_bounds.ToString() <<
       " Contents scale: " << contents_scale;
 
-  tiling_data_.SetTotalSize(content_bounds);
+  tiling_data_.SetTilingRect(gfx::Rect(content_bounds));
   tiling_data_.SetMaxTextureSize(tile_size);
 }
 
@@ -85,12 +85,8 @@
   client_ = client;
 }
 
-gfx::Rect PictureLayerTiling::ContentRect() const {
-  return gfx::Rect(tiling_data_.total_size());
-}
-
-gfx::SizeF PictureLayerTiling::ContentSizeF() const {
-  return gfx::ScaleSize(layer_bounds_, contents_scale_);
+gfx::Rect PictureLayerTiling::TilingRect() const {
+  return tiling_data_.tiling_rect();
 }
 
 Tile* PictureLayerTiling::CreateTile(int i,
@@ -159,13 +155,12 @@
 
   gfx::Size old_layer_bounds = layer_bounds_;
   layer_bounds_ = layer_bounds;
-  gfx::Size old_content_bounds = tiling_data_.total_size();
   gfx::Size content_bounds =
       gfx::ToCeiledSize(gfx::ScaleSize(layer_bounds_, contents_scale_));
 
   gfx::Size tile_size = client_->CalculateTileSize(content_bounds);
   if (tile_size != tiling_data_.max_texture_size()) {
-    tiling_data_.SetTotalSize(content_bounds);
+    tiling_data_.SetTilingRect(gfx::Rect(content_bounds));
     tiling_data_.SetMaxTextureSize(tile_size);
     Reset();
     return;
@@ -175,7 +170,7 @@
   gfx::Rect bounded_live_tiles_rect(live_tiles_rect_);
   bounded_live_tiles_rect.Intersect(gfx::Rect(content_bounds));
   SetLiveTilesRect(bounded_live_tiles_rect);
-  tiling_data_.SetTotalSize(content_bounds);
+  tiling_data_.SetTilingRect(gfx::Rect(content_bounds));
 
   // Create tiles for newly exposed areas.
   Region layer_region((gfx::Rect(layer_bounds_)));
@@ -194,11 +189,15 @@
 void PictureLayerTiling::DoInvalidate(const Region& layer_region,
                                       bool recreate_tiles) {
   std::vector<TileMapKey> new_tile_keys;
+  gfx::Rect expanded_live_tiles_rect(
+      tiling_data_.ExpandRectToTileBoundsWithBorders(live_tiles_rect_));
   for (Region::Iterator iter(layer_region); iter.has_rect(); iter.next()) {
     gfx::Rect layer_rect = iter.rect();
     gfx::Rect content_rect =
         gfx::ScaleToEnclosingRect(layer_rect, contents_scale_);
-    content_rect.Intersect(live_tiles_rect_);
+    // Avoid needless work by not bothering to invalidate where there aren't
+    // tiles.
+    content_rect.Intersect(expanded_live_tiles_rect);
     if (content_rect.IsEmpty())
       continue;
     bool include_borders = true;
@@ -253,11 +252,6 @@
     return;
 
   dest_to_content_scale_ = tiling_->contents_scale_ / dest_scale;
-  // This is the maximum size that the dest rect can be, given the content size.
-  gfx::Size dest_content_size = gfx::ToCeiledSize(gfx::ScaleSize(
-      tiling_->ContentRect().size(),
-      1 / dest_to_content_scale_,
-      1 / dest_to_content_scale_));
 
   gfx::Rect content_rect =
       gfx::ScaleToEnclosingRect(dest_rect_,
@@ -265,7 +259,7 @@
                                 dest_to_content_scale_);
   // IndexFromSrcCoord clamps to valid tile ranges, so it's necessary to
   // check for non-intersection first.
-  content_rect.Intersect(gfx::Rect(tiling_->tiling_data_.total_size()));
+  content_rect.Intersect(tiling_->TilingRect());
   if (content_rect.IsEmpty())
     return;
 
@@ -366,8 +360,10 @@
   gfx::RectF texture_rect(current_geometry_rect_);
   texture_rect.Scale(dest_to_content_scale_,
                      dest_to_content_scale_);
+  texture_rect.Intersect(tiling_->TilingRect());
+  if (texture_rect.IsEmpty())
+    return texture_rect;
   texture_rect.Offset(-tex_origin.OffsetFromOrigin());
-  texture_rect.Intersect(tiling_->ContentRect());
 
   return texture_rect;
 }
@@ -443,7 +439,7 @@
   gfx::Rect visible_rect_in_content_space =
       gfx::ScaleToEnclosingRect(visible_layer_rect, contents_scale_);
 
-  if (ContentRect().IsEmpty()) {
+  if (TilingRect().IsEmpty()) {
     last_impl_frame_time_in_seconds_ = current_frame_time_in_seconds;
     last_visible_rect_in_content_space_ = visible_rect_in_content_space;
     return;
@@ -462,10 +458,10 @@
   gfx::Rect eventually_rect =
       ExpandRectEquallyToAreaBoundedBy(visible_rect_in_content_space,
                                        eventually_rect_area,
-                                       ContentRect(),
+                                       TilingRect(),
                                        &expansion_cache_);
 
-  DCHECK(eventually_rect.IsEmpty() || ContentRect().Contains(eventually_rect));
+  DCHECK(eventually_rect.IsEmpty() || TilingRect().Contains(eventually_rect));
 
   SetLiveTilesRect(eventually_rect);
 
@@ -541,7 +537,7 @@
 void PictureLayerTiling::SetLiveTilesRect(
     const gfx::Rect& new_live_tiles_rect) {
   DCHECK(new_live_tiles_rect.IsEmpty() ||
-         ContentRect().Contains(new_live_tiles_rect));
+         TilingRect().Contains(new_live_tiles_rect));
   if (live_tiles_rect_ == new_live_tiles_rect)
     return;
 
@@ -609,8 +605,7 @@
   scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue());
   state->SetInteger("num_tiles", tiles_.size());
   state->SetDouble("content_scale", contents_scale_);
-  state->Set("content_bounds",
-             MathUtil::AsValue(ContentRect().size()).release());
+  state->Set("tiling_rect", MathUtil::AsValue(TilingRect()).release());
   return state.PassAs<base::Value>();
 }
 
diff --git a/cc/resources/picture_layer_tiling.h b/cc/resources/picture_layer_tiling.h
index bd442de..92c2879 100644
--- a/cc/resources/picture_layer_tiling.h
+++ b/cc/resources/picture_layer_tiling.h
@@ -135,8 +135,7 @@
   void set_resolution(TileResolution resolution) { resolution_ = resolution; }
   TileResolution resolution() const { return resolution_; }
 
-  gfx::Rect ContentRect() const;
-  gfx::SizeF ContentSizeF() const;
+  gfx::Rect TilingRect() const;
   gfx::Rect live_tiles_rect() const { return live_tiles_rect_; }
   gfx::Size tile_size() const { return tiling_data_.max_texture_size(); }
   float contents_scale() const { return contents_scale_; }
@@ -147,7 +146,7 @@
   }
 
   void CreateAllTilesForTesting() {
-    SetLiveTilesRect(gfx::Rect(tiling_data_.total_size()));
+    SetLiveTilesRect(tiling_data_.tiling_rect());
   }
 
   std::vector<Tile*> AllTilesForTesting() const {
diff --git a/cc/resources/picture_layer_tiling_set.cc b/cc/resources/picture_layer_tiling_set.cc
index a3610c6..47d393f 100644
--- a/cc/resources/picture_layer_tiling_set.cc
+++ b/cc/resources/picture_layer_tiling_set.cc
@@ -77,7 +77,7 @@
       this_tiling->CreateMissingTilesInLiveTilesRect();
 
       DCHECK(this_tiling->tile_size() ==
-             client_->CalculateTileSize(this_tiling->ContentRect().size()));
+             client_->CalculateTileSize(this_tiling->TilingRect().size()));
       continue;
     }
     scoped_ptr<PictureLayerTiling> new_tiling = PictureLayerTiling::Create(
diff --git a/cc/resources/picture_layer_tiling_set_unittest.cc b/cc/resources/picture_layer_tiling_set_unittest.cc
index 4263357..32a64eb 100644
--- a/cc/resources/picture_layer_tiling_set_unittest.cc
+++ b/cc/resources/picture_layer_tiling_set_unittest.cc
@@ -219,10 +219,10 @@
 
   void ValidateTiling(const PictureLayerTiling* tiling,
                       const PicturePileImpl* pile) const {
-    if (tiling->ContentRect().IsEmpty())
+    if (tiling->TilingRect().IsEmpty())
       EXPECT_TRUE(tiling->live_tiles_rect().IsEmpty());
     else if (!tiling->live_tiles_rect().IsEmpty())
-      EXPECT_TRUE(tiling->ContentRect().Contains(tiling->live_tiles_rect()));
+      EXPECT_TRUE(tiling->TilingRect().Contains(tiling->live_tiles_rect()));
 
     std::vector<Tile*> tiles = tiling->AllTilesForTesting();
     for (size_t i = 0; i < tiles.size(); ++i) {
diff --git a/cc/resources/picture_layer_tiling_unittest.cc b/cc/resources/picture_layer_tiling_unittest.cc
index 16b68c1..e1eddd7 100644
--- a/cc/resources/picture_layer_tiling_unittest.cc
+++ b/cc/resources/picture_layer_tiling_unittest.cc
@@ -156,7 +156,7 @@
                                         const gfx::Rect& dest_rect) {
     float dest_to_contents_scale = tiling_->contents_scale() / rect_scale;
     gfx::Rect clamped_rect = gfx::ScaleToEnclosingRect(
-        tiling_->ContentRect(), 1.f / dest_to_contents_scale);
+        tiling_->TilingRect(), 1.f / dest_to_contents_scale);
     clamped_rect.Intersect(dest_rect);
     VerifyTilesExactlyCoverRect(rect_scale, dest_rect, clamped_rect);
   }
@@ -173,6 +173,23 @@
   DISALLOW_COPY_AND_ASSIGN(PictureLayerTilingIteratorTest);
 };
 
+TEST_F(PictureLayerTilingIteratorTest, ResizeDeletesTiles) {
+  // Verifies that a resize deletes tiles that used to be on the edge.
+  gfx::Size tile_size(100, 100);
+  gfx::Size original_layer_size(10, 10);
+  Initialize(tile_size, 1.f, original_layer_size);
+  SetLiveRectAndVerifyTiles(gfx::Rect(original_layer_size));
+
+  // Tiling only has one tile, since its total size is less than one.
+  EXPECT_TRUE(tiling_->TileAt(0, 0));
+
+  // Stop creating tiles so that any invalidations are left as holes.
+  client_.set_allow_create_tile(false);
+
+  tiling_->SetLayerBounds(gfx::Size(200, 200));
+  EXPECT_FALSE(tiling_->TileAt(0, 0));
+}
+
 TEST_F(PictureLayerTilingIteratorTest, LiveTilesExactlyCoverLiveTileRect) {
   Initialize(gfx::Size(100, 100), 1, gfx::Size(1099, 801));
   SetLiveRectAndVerifyTiles(gfx::Rect(100, 100));
diff --git a/cc/resources/picture_pile.cc b/cc/resources/picture_pile.cc
index 8a15ea6..6637e4d 100644
--- a/cc/resources/picture_pile.cc
+++ b/cc/resources/picture_pile.cc
@@ -165,7 +165,7 @@
       -kPixelDistanceToRecord,
       -kPixelDistanceToRecord);
   recorded_viewport_ = interest_rect;
-  recorded_viewport_.Intersect(gfx::Rect(size()));
+  recorded_viewport_.Intersect(tiling_rect());
 
   bool invalidated = false;
   for (Region::Iterator i(invalidation); i.has_rect(); i.next()) {
diff --git a/cc/resources/picture_pile_base.cc b/cc/resources/picture_pile_base.cc
index 2fb6ef5..aa00876 100644
--- a/cc/resources/picture_pile_base.cc
+++ b/cc/resources/picture_pile_base.cc
@@ -92,21 +92,29 @@
 PicturePileBase::~PicturePileBase() {
 }
 
-void PicturePileBase::Resize(const gfx::Size& new_size) {
-  if (size() == new_size)
+void PicturePileBase::SetTilingRect(const gfx::Rect& new_tiling_rect) {
+  if (tiling_rect() == new_tiling_rect)
     return;
 
-  gfx::Size old_size = size();
-  tiling_.SetTotalSize(new_size);
+  gfx::Rect old_tiling_rect = tiling_rect();
+  tiling_.SetTilingRect(new_tiling_rect);
 
   has_any_recordings_ = false;
 
-  // Find all tiles that contain any pixels outside the new size.
+  // Don't waste time in Resize figuring out what these hints should be.
+  recorded_viewport_ = gfx::Rect();
+
+  if (new_tiling_rect.origin() != old_tiling_rect.origin()) {
+    picture_map_.clear();
+    return;
+  }
+
+  // Find all tiles that contain any pixels outside the new rect.
   std::vector<PictureMapKey> to_erase;
   int min_toss_x = tiling_.FirstBorderTileXIndexFromSrcCoord(
-      std::min(old_size.width(), new_size.width()));
+      std::min(old_tiling_rect.right(), new_tiling_rect.right()));
   int min_toss_y = tiling_.FirstBorderTileYIndexFromSrcCoord(
-      std::min(old_size.height(), new_size.height()));
+      std::min(old_tiling_rect.bottom(), new_tiling_rect.bottom()));
   for (PictureMap::const_iterator it = picture_map_.begin();
        it != picture_map_.end();
        ++it) {
@@ -120,9 +128,6 @@
 
   for (size_t i = 0; i < to_erase.size(); ++i)
     picture_map_.erase(to_erase[i]);
-
-  // Don't waste time in Resize figuring out what these hints should be.
-  recorded_viewport_ = gfx::Rect();
 }
 
 void PicturePileBase::SetMinContentsScale(float min_contents_scale) {
@@ -188,11 +193,11 @@
 
 bool PicturePileBase::CanRaster(float contents_scale,
                                 const gfx::Rect& content_rect) {
-  if (tiling_.total_size().IsEmpty())
+  if (tiling_.tiling_rect().IsEmpty())
     return false;
   gfx::Rect layer_rect = gfx::ScaleToEnclosingRect(
       content_rect, 1.f / contents_scale);
-  layer_rect.Intersect(gfx::Rect(tiling_.total_size()));
+  layer_rect.Intersect(tiling_.tiling_rect());
 
   // Common case inside of viewport to avoid the slower map lookups.
   if (recorded_viewport_.Contains(layer_rect)) {
@@ -233,10 +238,10 @@
 
 scoped_ptr<base::Value> PicturePileBase::AsValue() const {
   scoped_ptr<base::ListValue> pictures(new base::ListValue());
-  gfx::Rect layer_rect(tiling_.total_size());
+  gfx::Rect tiling_rect(tiling_.tiling_rect());
   std::set<void*> appended_pictures;
   bool include_borders = true;
-  for (TilingData::Iterator tile_iter(&tiling_, layer_rect, include_borders);
+  for (TilingData::Iterator tile_iter(&tiling_, tiling_rect, include_borders);
        tile_iter;
        ++tile_iter) {
     PictureMap::const_iterator map_iter = picture_map_.find(tile_iter.index());
diff --git a/cc/resources/picture_pile_base.h b/cc/resources/picture_pile_base.h
index be9955e..eff7887 100644
--- a/cc/resources/picture_pile_base.h
+++ b/cc/resources/picture_pile_base.h
@@ -29,8 +29,8 @@
   explicit PicturePileBase(const PicturePileBase* other);
   PicturePileBase(const PicturePileBase* other, unsigned thread_index);
 
-  void Resize(const gfx::Size& size);
-  gfx::Size size() const { return tiling_.total_size(); }
+  void SetTilingRect(const gfx::Rect& tiling_rect);
+  gfx::Rect tiling_rect() const { return tiling_.tiling_rect(); }
   void SetMinContentsScale(float min_contents_scale);
 
   int num_tiles_x() const { return tiling_.num_tiles_x(); }
diff --git a/cc/resources/picture_pile_impl.cc b/cc/resources/picture_pile_impl.cc
index 3f8e167..947dea8 100644
--- a/cc/resources/picture_pile_impl.cc
+++ b/cc/resources/picture_pile_impl.cc
@@ -98,7 +98,7 @@
     float contents_scale,
     RenderingStatsInstrumentation* rendering_stats_instrumentation) {
   if (clear_canvas_with_debug_color_) {
-    // Any non-painted areas will be left in this color.
+    // Any non-painted areas in the content bounds will be left in this color.
     canvas->clear(DebugColors::NonPaintedFillColor());
   }
 
@@ -110,25 +110,38 @@
     // layer, we also need to raster the background color underneath the last
     // texel (since the recording won't cover it) and outside the last texel
     // (due to linear filtering when using this texture).
-    gfx::SizeF total_content_size =
-        gfx::ScaleSize(tiling_.total_size(), contents_scale);
-    gfx::Rect content_rect(gfx::ToCeiledSize(total_content_size));
+    gfx::Rect content_tiling_rect = gfx::ToEnclosingRect(
+        gfx::ScaleRect(tiling_.tiling_rect(), contents_scale));
 
     // The final texel of content may only be partially covered by a
     // rasterization; this rect represents the content rect that is fully
     // covered by content.
-    gfx::Rect deflated_content_rect = content_rect;
-    deflated_content_rect.Inset(0, 0, 1, 1);
-    if (!deflated_content_rect.Contains(canvas_rect)) {
+    gfx::Rect deflated_content_tiling_rect = content_tiling_rect;
+    deflated_content_tiling_rect.Inset(0, 0, 1, 1);
+    if (!deflated_content_tiling_rect.Contains(canvas_rect)) {
+      if (clear_canvas_with_debug_color_) {
+        // Any non-painted areas outside of the content bounds are left in
+        // this color.  If this is seen then it means that cc neglected to
+        // rerasterize a tile that used to intersect with the content rect
+        // after the content bounds grew.
+        canvas->save();
+        canvas->translate(-canvas_rect.x(), -canvas_rect.y());
+        canvas->clipRect(gfx::RectToSkRect(content_tiling_rect),
+                         SkRegion::kDifference_Op);
+        canvas->drawColor(DebugColors::MissingResizeInvalidations(),
+                          SkXfermode::kSrc_Mode);
+        canvas->restore();
+      }
+
       // Drawing at most 2 x 2 x (canvas width + canvas height) texels is 2-3X
       // faster than clearing, so special case this.
       canvas->save();
       canvas->translate(-canvas_rect.x(), -canvas_rect.y());
-      gfx::Rect inflated_content_rect = content_rect;
-      inflated_content_rect.Inset(0, 0, -1, -1);
-      canvas->clipRect(gfx::RectToSkRect(inflated_content_rect),
+      gfx::Rect inflated_content_tiling_rect = content_tiling_rect;
+      inflated_content_tiling_rect.Inset(0, 0, -1, -1);
+      canvas->clipRect(gfx::RectToSkRect(inflated_content_tiling_rect),
                        SkRegion::kReplace_Op);
-      canvas->clipRect(gfx::RectToSkRect(deflated_content_rect),
+      canvas->clipRect(gfx::RectToSkRect(deflated_content_tiling_rect),
                        SkRegion::kDifference_Op);
       canvas->drawColor(background_color_, SkXfermode::kSrc_Mode);
       canvas->restore();
@@ -253,18 +266,16 @@
   DCHECK(contents_scale >= min_contents_scale_);
 
   canvas->translate(-canvas_rect.x(), -canvas_rect.y());
-  gfx::SizeF total_content_size = gfx::ScaleSize(tiling_.total_size(),
-                                                 contents_scale);
-  gfx::Rect total_content_rect(gfx::ToCeiledSize(total_content_size));
-  gfx::Rect content_rect = total_content_rect;
-  content_rect.Intersect(canvas_rect);
+  gfx::Rect content_tiling_rect = gfx::ToEnclosingRect(
+      gfx::ScaleRect(tiling_.tiling_rect(), contents_scale));
+  content_tiling_rect.Intersect(canvas_rect);
 
-  canvas->clipRect(gfx::RectToSkRect(content_rect),
+  canvas->clipRect(gfx::RectToSkRect(content_tiling_rect),
                    SkRegion::kIntersect_Op);
 
   PictureRegionMap picture_region_map;
   CoalesceRasters(
-      canvas_rect, content_rect, contents_scale, &picture_region_map);
+      canvas_rect, content_tiling_rect, contents_scale, &picture_region_map);
 
 #ifndef NDEBUG
   Region total_clip;
@@ -279,7 +290,7 @@
     Region negated_clip_region = it->second;
 
 #ifndef NDEBUG
-    Region positive_clip = content_rect;
+    Region positive_clip = content_tiling_rect;
     positive_clip.Subtract(negated_clip_region);
     // Make sure we never rasterize the same region twice.
     DCHECK(!total_clip.Intersects(positive_clip));
@@ -332,18 +343,15 @@
 skia::RefPtr<SkPicture> PicturePileImpl::GetFlattenedPicture() {
   TRACE_EVENT0("cc", "PicturePileImpl::GetFlattenedPicture");
 
-  gfx::Rect layer_rect(tiling_.total_size());
-  skia::RefPtr<SkPicture> picture = skia::AdoptRef(new SkPicture);
-  if (layer_rect.IsEmpty())
-    return picture;
-
-  SkCanvas* canvas = picture->beginRecording(
-      layer_rect.width(),
-      layer_rect.height(),
-      SkPicture::kUsePathBoundsForClip_RecordingFlag);
-
-  RasterToBitmap(canvas, layer_rect, 1.0, NULL);
-  picture->endRecording();
+  gfx::Rect tiling_rect(tiling_.tiling_rect());
+  SkPictureRecorder recorder;
+  SkCanvas* canvas =
+      recorder.beginRecording(tiling_rect.width(),
+                              tiling_rect.height(),
+                              SkPicture::kUsePathBoundsForClip_RecordingFlag);
+  if (!tiling_rect.IsEmpty())
+    RasterToBitmap(canvas, tiling_rect, 1.0, NULL);
+  skia::RefPtr<SkPicture> picture = skia::AdoptRef(recorder.endRecording());
 
   return picture;
 }
@@ -366,7 +374,7 @@
   gfx::Rect layer_rect = gfx::ScaleToEnclosingRect(
       content_rect, 1.0f / contents_scale);
 
-  layer_rect.Intersect(gfx::Rect(tiling_.total_size()));
+  layer_rect.Intersect(tiling_.tiling_rect());
 
   skia::AnalysisCanvas canvas(layer_rect.width(), layer_rect.height());
 
@@ -436,7 +444,6 @@
 }
 
 void PicturePileImpl::DidBeginTracing() {
-  gfx::Rect layer_rect(tiling_.total_size());
   std::set<void*> processed_pictures;
   for (PictureMap::iterator it = picture_map_.begin();
        it != picture_map_.end();
diff --git a/cc/resources/picture_pile_unittest.cc b/cc/resources/picture_pile_unittest.cc
index c64d420..04b4c33 100644
--- a/cc/resources/picture_pile_unittest.cc
+++ b/cc/resources/picture_pile_unittest.cc
@@ -44,12 +44,12 @@
         min_scale_(0.125),
         frame_number_(0),
         contents_opaque_(false) {
-    pile_->Resize(pile_->tiling().max_texture_size());
+    pile_->SetTilingRect(gfx::Rect(pile_->tiling().max_texture_size()));
     pile_->SetTileGridSize(gfx::Size(1000, 1000));
     pile_->SetMinContentsScale(min_scale_);
   }
 
-  gfx::Rect layer_rect() const { return gfx::Rect(pile_->size()); }
+  gfx::Rect tiling_rect() const { return pile_->tiling_rect(); }
 
   bool Update(const Region& invalidation, const gfx::Rect& visible_layer_rect) {
     frame_number_++;
@@ -63,7 +63,7 @@
                          &stats_instrumentation_);
   }
 
-  bool UpdateWholeLayer() { return Update(layer_rect(), layer_rect()); }
+  bool UpdateWholePile() { return Update(tiling_rect(), tiling_rect()); }
 
   FakeContentLayerClient client_;
   FakeRenderingStatsInstrumentation stats_instrumentation_;
@@ -75,11 +75,11 @@
 };
 
 TEST_F(PicturePileTest, SmallInvalidateInflated) {
-  UpdateWholeLayer();
+  UpdateWholePile();
 
   // Invalidate something inside a tile.
   gfx::Rect invalidate_rect(50, 50, 1, 1);
-  Update(invalidate_rect, layer_rect());
+  Update(invalidate_rect, tiling_rect());
 
   EXPECT_EQ(1, pile_->tiling().num_tiles_x());
   EXPECT_EQ(1, pile_->tiling().num_tiles_y());
@@ -98,11 +98,11 @@
 }
 
 TEST_F(PicturePileTest, LargeInvalidateInflated) {
-  UpdateWholeLayer();
+  UpdateWholePile();
 
   // Invalidate something inside a tile.
   gfx::Rect invalidate_rect(50, 50, 100, 100);
-  Update(invalidate_rect, layer_rect());
+  Update(invalidate_rect, tiling_rect());
 
   EXPECT_EQ(1, pile_->tiling().num_tiles_x());
   EXPECT_EQ(1, pile_->tiling().num_tiles_y());
@@ -114,15 +114,16 @@
   int expected_inflation = pile_->buffer_pixels();
 
   Picture* base_picture = picture_info.GetPicture();
-  gfx::Rect base_picture_rect(pile_->size());
+  gfx::Rect base_picture_rect = pile_->tiling_rect();
   base_picture_rect.Inset(-expected_inflation, -expected_inflation);
   EXPECT_EQ(base_picture_rect.ToString(),
             base_picture->LayerRect().ToString());
 }
 
 TEST_F(PicturePileTest, InvalidateOnTileBoundaryInflated) {
-  gfx::Size layer_size = gfx::ToFlooredSize(gfx::ScaleSize(pile_->size(), 2.f));
-  pile_->Resize(layer_size);
+  gfx::Rect new_tiling_rect =
+      gfx::ToEnclosedRect(gfx::ScaleRect(pile_->tiling_rect(), 2.f));
+  pile_->SetTilingRect(new_tiling_rect);
 
   // Due to border pixels, we should have 3 tiles.
   EXPECT_EQ(3, pile_->tiling().num_tiles_x());
@@ -133,11 +134,11 @@
   EXPECT_EQ(7, pile_->tiling().border_texels());
 
   // Update the whole layer to create initial pictures.
-  UpdateWholeLayer();
+  UpdateWholePile();
 
   // Invalidate everything again to have a non zero invalidation
   // frequency.
-  UpdateWholeLayer();
+  UpdateWholePile();
 
   // Invalidate something just over a tile boundary by a single pixel.
   // This will invalidate the tile (1, 1), as well as 1 row of pixels in (1, 0).
@@ -146,7 +147,7 @@
       pile_->tiling().TileBoundsWithBorder(0, 0).bottom() - 1,
       50,
       50);
-  Update(invalidate_rect, layer_rect());
+  Update(invalidate_rect, tiling_rect());
 
   for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) {
     for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) {
@@ -171,14 +172,16 @@
 }
 
 TEST_F(PicturePileTest, StopRecordingOffscreenInvalidations) {
-  gfx::Size layer_size = gfx::ToFlooredSize(gfx::ScaleSize(pile_->size(), 4.f));
-  pile_->Resize(layer_size);
+  gfx::Rect new_tiling_rect =
+      gfx::ToEnclosedRect(gfx::ScaleRect(pile_->tiling_rect(), 4.f));
+  pile_->SetTilingRect(new_tiling_rect);
 
-  gfx::Rect viewport(0, 0, layer_size.width(), 1);
+  gfx::Rect viewport(
+      tiling_rect().x(), tiling_rect().y(), tiling_rect().width(), 1);
 
-  // Update the whole layer until the invalidation frequency is high.
+  // Update the whole pile until the invalidation frequency is high.
   for (int frame = 0; frame < 33; ++frame) {
-    UpdateWholeLayer();
+    UpdateWholePile();
   }
 
   // Make sure we have a high invalidation frequency.
@@ -193,8 +196,9 @@
     }
   }
 
-  // Update once more with a small viewport 0,0 layer_width by 1
-  Update(layer_rect(), viewport);
+  // Update once more with a small viewport tiilng_rect.x(), tiilng_rect.y(),
+  // tiling_rect.width() by 1
+  Update(tiling_rect(), viewport);
 
   for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) {
     for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) {
@@ -214,7 +218,7 @@
   }
 
   // Now update with no invalidation and full viewport
-  Update(gfx::Rect(), layer_rect());
+  Update(gfx::Rect(), tiling_rect());
 
   for (int i = 0; i < pile_->tiling().num_tiles_x(); ++i) {
     for (int j = 0; j < pile_->tiling().num_tiles_y(); ++j) {
@@ -238,7 +242,7 @@
 }
 
 TEST_F(PicturePileTest, ClearingInvalidatesRecordedRect) {
-  UpdateWholeLayer();
+  UpdateWholePile();
 
   gfx::Rect rect(0, 0, 5, 5);
   EXPECT_TRUE(pile_->CanRasterLayerRect(rect));
@@ -257,8 +261,9 @@
   // and doesn't get re-recorded, then CanRaster is not true for any
   // tiles touching it, but is true for adjacent tiles, even if it
   // overlaps on borders (edge case).
-  gfx::Size layer_size = gfx::ToFlooredSize(gfx::ScaleSize(pile_->size(), 4.f));
-  pile_->Resize(layer_size);
+  gfx::Rect new_tiling_rect =
+      gfx::ToEnclosedRect(gfx::ScaleRect(pile_->tiling_rect(), 4.f));
+  pile_->SetTilingRect(new_tiling_rect);
 
   gfx::Rect tile01_borders = pile_->tiling().TileBoundsWithBorder(0, 1);
   gfx::Rect tile02_borders = pile_->tiling().TileBoundsWithBorder(0, 2);
@@ -269,7 +274,7 @@
   // what the test is trying to repro.
   EXPECT_TRUE(tile01_borders.Intersects(tile02_borders));
   EXPECT_FALSE(tile01_noborders.Intersects(tile02_noborders));
-  UpdateWholeLayer();
+  UpdateWholePile();
   EXPECT_TRUE(pile_->CanRasterLayerRect(tile01_noborders));
   EXPECT_TRUE(pile_->CanRasterSlowTileCheck(tile01_noborders));
   EXPECT_TRUE(pile_->CanRasterLayerRect(tile02_noborders));
@@ -280,12 +285,12 @@
 
   // Update the whole layer until the invalidation frequency is high.
   for (int frame = 0; frame < 33; ++frame) {
-    UpdateWholeLayer();
+    UpdateWholePile();
   }
 
   // Update once more with a small viewport.
-  gfx::Rect viewport(0, 0, layer_size.width(), 1);
-  Update(layer_rect(), viewport);
+  gfx::Rect viewport(0, 0, tiling_rect().width(), 1);
+  Update(tiling_rect(), viewport);
 
   // Sanity check some pictures exist and others don't.
   EXPECT_TRUE(pile_->picture_map()
@@ -305,15 +310,15 @@
   // This test validates that the recorded_viewport cache of full tiles
   // is still valid for some use cases.  If it's not, it's a performance
   // issue because CanRaster checks will go down the slow path.
-  UpdateWholeLayer();
+  UpdateWholePile();
   EXPECT_TRUE(!pile_->recorded_viewport().IsEmpty());
 
   // No invalidation, same viewport.
-  Update(gfx::Rect(), layer_rect());
+  Update(gfx::Rect(), tiling_rect());
   EXPECT_TRUE(!pile_->recorded_viewport().IsEmpty());
 
   // Partial invalidation, same viewport.
-  Update(gfx::Rect(gfx::Rect(0, 0, 1, 1)), layer_rect());
+  Update(gfx::Rect(gfx::Rect(0, 0, 1, 1)), tiling_rect());
   EXPECT_TRUE(!pile_->recorded_viewport().IsEmpty());
 
   // No invalidation, changing viewport.
diff --git a/cc/resources/raster_worker_pool.cc b/cc/resources/raster_worker_pool.cc
index e7b3f13..8f71b2e 100644
--- a/cc/resources/raster_worker_pool.cc
+++ b/cc/resources/raster_worker_pool.cc
@@ -46,6 +46,9 @@
 #endif
       workers_.push_back(worker.Pass());
     }
+
+    // Use index 0 for origin thread.
+    current_tls_.Set(new ThreadLocalState(0));
   }
 
   virtual ~RasterTaskGraphRunner() { NOTREACHED(); }
@@ -101,10 +104,6 @@
 
   // Overridden from RasterizerTask:
   virtual void ScheduleOnOriginThread(RasterizerTaskClient* client) OVERRIDE {}
-  virtual void RunOnOriginThread() OVERRIDE {
-    TRACE_EVENT0("cc", "RasterFinishedTaskImpl::RunOnOriginThread");
-    RasterFinished();
-  }
   virtual void CompleteOnOriginThread(RasterizerTaskClient* client) OVERRIDE {}
   virtual void RunReplyOnOriginThread() OVERRIDE {}
 
@@ -142,20 +141,7 @@
   virtual void RunOnWorkerThread() OVERRIDE {
     TRACE_EVENT0(
         "cc", "RasterRequiredForActivationFinishedTaskImpl::RunOnWorkerThread");
-    RunRasterFinished();
-  }
 
-  // Overridden from RasterizerTask:
-  virtual void RunOnOriginThread() OVERRIDE {
-    TRACE_EVENT0(
-        "cc", "RasterRequiredForActivationFinishedTaskImpl::RunOnOriginThread");
-    RunRasterFinished();
-  }
-
- private:
-  virtual ~RasterRequiredForActivationFinishedTaskImpl() {}
-
-  void RunRasterFinished() {
     if (tasks_required_for_activation_count_) {
       g_raster_required_for_activation_delay.Get().delay->EndParallel(
           activation_delay_end_time_);
@@ -163,6 +149,9 @@
     RasterFinished();
   }
 
+ private:
+  virtual ~RasterRequiredForActivationFinishedTaskImpl() {}
+
   base::TimeTicks activation_delay_end_time_;
   const size_t tasks_required_for_activation_count_;
 
diff --git a/cc/resources/raster_worker_pool_perftest.cc b/cc/resources/raster_worker_pool_perftest.cc
index f99c293..8c33d17 100644
--- a/cc/resources/raster_worker_pool_perftest.cc
+++ b/cc/resources/raster_worker_pool_perftest.cc
@@ -90,7 +90,6 @@
 
   // Overridden from RasterizerTask:
   virtual void ScheduleOnOriginThread(RasterizerTaskClient* client) OVERRIDE {}
-  virtual void RunOnOriginThread() OVERRIDE {}
   virtual void CompleteOnOriginThread(RasterizerTaskClient* client) OVERRIDE {}
   virtual void RunReplyOnOriginThread() OVERRIDE { Reset(); }
 
@@ -119,7 +118,6 @@
   virtual void ScheduleOnOriginThread(RasterizerTaskClient* client) OVERRIDE {
     client->AcquireCanvasForRaster(this);
   }
-  virtual void RunOnOriginThread() OVERRIDE {}
   virtual void CompleteOnOriginThread(RasterizerTaskClient* client) OVERRIDE {
     client->ReleaseCanvasForRaster(this);
   }
diff --git a/cc/resources/raster_worker_pool_unittest.cc b/cc/resources/raster_worker_pool_unittest.cc
index aff7461..31b9243 100644
--- a/cc/resources/raster_worker_pool_unittest.cc
+++ b/cc/resources/raster_worker_pool_unittest.cc
@@ -25,12 +25,6 @@
 namespace cc {
 namespace {
 
-enum RasterThread {
-  RASTER_THREAD_NONE,
-  RASTER_THREAD_ORIGIN,
-  RASTER_THREAD_WORKER
-};
-
 enum RasterWorkerPoolType {
   RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER,
   RASTER_WORKER_POOL_TYPE_IMAGE,
@@ -39,35 +33,26 @@
 
 class TestRasterTaskImpl : public RasterTask {
  public:
-  typedef base::Callback<void(const PicturePileImpl::Analysis& analysis,
-                              bool was_canceled,
-                              RasterThread raster_thread)> Reply;
+  typedef base::Callback<
+      void(const PicturePileImpl::Analysis& analysis, bool was_canceled)> Reply;
 
   TestRasterTaskImpl(const Resource* resource,
                      const Reply& reply,
                      ImageDecodeTask::Vector* dependencies)
-      : RasterTask(resource, dependencies),
-        reply_(reply),
-        raster_thread_(RASTER_THREAD_NONE) {}
+      : RasterTask(resource, dependencies), reply_(reply) {}
 
   // Overridden from Task:
-  virtual void RunOnWorkerThread() OVERRIDE {
-    raster_thread_ = RASTER_THREAD_WORKER;
-  }
+  virtual void RunOnWorkerThread() OVERRIDE {}
 
   // Overridden from RasterizerTask:
   virtual void ScheduleOnOriginThread(RasterizerTaskClient* client) OVERRIDE {
     client->AcquireCanvasForRaster(this);
   }
-  virtual void RunOnOriginThread() OVERRIDE {
-    raster_thread_ = RASTER_THREAD_ORIGIN;
-  }
   virtual void CompleteOnOriginThread(RasterizerTaskClient* client) OVERRIDE {
     client->ReleaseCanvasForRaster(this);
   }
   virtual void RunReplyOnOriginThread() OVERRIDE {
-    reply_.Run(
-        PicturePileImpl::Analysis(), !HasFinishedRunning(), raster_thread_);
+    reply_.Run(PicturePileImpl::Analysis(), !HasFinishedRunning());
   }
 
  protected:
@@ -75,7 +60,6 @@
 
  private:
   const Reply reply_;
-  RasterThread raster_thread_;
 
   DISALLOW_COPY_AND_ASSIGN(TestRasterTaskImpl);
 };
@@ -113,7 +97,6 @@
   struct RasterTaskResult {
     unsigned id;
     bool canceled;
-    RasterThread raster_thread;
   };
 
   typedef std::vector<scoped_refptr<RasterTask> > RasterTaskVector;
@@ -248,12 +231,10 @@
   void OnTaskCompleted(scoped_ptr<ScopedResource> resource,
                        unsigned id,
                        const PicturePileImpl::Analysis& analysis,
-                       bool was_canceled,
-                       RasterThread raster_thread) {
+                       bool was_canceled) {
     RasterTaskResult result;
     result.id = id;
     result.canceled = was_canceled;
-    result.raster_thread = raster_thread;
     completed_tasks_.push_back(result);
   }
 
@@ -286,8 +267,6 @@
   ASSERT_EQ(2u, completed_tasks().size());
   EXPECT_FALSE(completed_tasks()[0].canceled);
   EXPECT_FALSE(completed_tasks()[1].canceled);
-  EXPECT_NE(RASTER_THREAD_NONE, completed_tasks()[0].raster_thread);
-  EXPECT_NE(RASTER_THREAD_NONE, completed_tasks()[1].raster_thread);
 }
 
 TEST_P(RasterWorkerPoolTest, FailedMapResource) {
@@ -301,7 +280,6 @@
 
   ASSERT_EQ(1u, completed_tasks().size());
   EXPECT_FALSE(completed_tasks()[0].canceled);
-  EXPECT_NE(RASTER_THREAD_NONE, completed_tasks()[0].raster_thread);
 }
 
 // This test checks that replacing a pending raster task with another does
diff --git a/cc/resources/rasterizer.cc b/cc/resources/rasterizer.cc
index 563690d..df7e27e 100644
--- a/cc/resources/rasterizer.cc
+++ b/cc/resources/rasterizer.cc
@@ -11,8 +11,9 @@
 RasterizerTask::RasterizerTask() : did_schedule_(false), did_complete_(false) {}
 
 RasterizerTask::~RasterizerTask() {
-  DCHECK(!did_schedule_);
-  DCHECK(!did_run_ || did_complete_);
+  // Debugging CHECKs to help track down a use-after-free.
+  CHECK(!did_schedule_);
+  CHECK(!did_run_ || did_complete_);
 }
 
 ImageDecodeTask* RasterizerTask::AsImageDecodeTask() { return NULL; }
diff --git a/cc/resources/rasterizer.h b/cc/resources/rasterizer.h
index 5467d90..17cc94e 100644
--- a/cc/resources/rasterizer.h
+++ b/cc/resources/rasterizer.h
@@ -32,7 +32,6 @@
   typedef std::vector<scoped_refptr<RasterizerTask> > Vector;
 
   virtual void ScheduleOnOriginThread(RasterizerTaskClient* client) = 0;
-  virtual void RunOnOriginThread() = 0;
   virtual void CompleteOnOriginThread(RasterizerTaskClient* client) = 0;
   virtual void RunReplyOnOriginThread() = 0;
 
diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc
index f208341..3ce8d63 100644
--- a/cc/resources/resource_provider.cc
+++ b/cc/resources/resource_provider.cc
@@ -600,16 +600,10 @@
                            use_rgba_4444_texture_format,
                            id_allocation_chunk_size));
 
-  bool success = false;
-  if (resource_provider->ContextGL()) {
-    success = resource_provider->InitializeGL();
-  } else {
+  if (resource_provider->ContextGL())
+    resource_provider->InitializeGL();
+  else
     resource_provider->InitializeSoftware();
-    success = true;
-  }
-
-  if (!success)
-    return scoped_ptr<ResourceProvider>();
 
   DCHECK_NE(InvalidType, resource_provider->default_resource_type());
   return resource_provider.Pass();
@@ -1267,7 +1261,8 @@
       max_texture_size_(0),
       best_texture_format_(RGBA_8888),
       use_rgba_4444_texture_format_(use_rgba_4444_texture_format),
-      id_allocation_chunk_size_(id_allocation_chunk_size) {
+      id_allocation_chunk_size_(id_allocation_chunk_size),
+      use_sync_query_(false) {
   DCHECK(output_surface_->HasClient());
   DCHECK(id_allocation_chunk_size_);
 }
@@ -1284,7 +1279,7 @@
   best_texture_format_ = RGBA_8888;
 }
 
-bool ResourceProvider::InitializeGL() {
+void ResourceProvider::InitializeGL() {
   DCHECK(thread_checker_.CalledOnValidThread());
   DCHECK(!texture_uploader_);
   DCHECK_NE(GLTexture, default_resource_type_);
@@ -1300,6 +1295,7 @@
   use_texture_storage_ext_ = caps.gpu.texture_storage;
   use_texture_usage_hint_ = caps.gpu.texture_usage;
   use_compressed_texture_etc1_ = caps.gpu.texture_format_etc1;
+  use_sync_query_ = caps.gpu.sync_query;
 
   GLES2Interface* gl = ContextGL();
   DCHECK(gl);
@@ -1313,8 +1309,6 @@
       new TextureIdAllocator(gl, id_allocation_chunk_size_));
   buffer_id_allocator_.reset(
       new BufferIdAllocator(gl, id_allocation_chunk_size_));
-
-  return true;
 }
 
 void ResourceProvider::CleanUpGLIfNeeded() {
@@ -2243,13 +2237,10 @@
       gl->BindTexture(source_resource->target, source_resource->gl_id);
       BindImageForSampling(source_resource);
     }
+    DCHECK(use_sync_query_) << "CHROMIUM_sync_query extension missing";
     if (!source_resource->gl_read_lock_query_id)
       gl->GenQueriesEXT(1, &source_resource->gl_read_lock_query_id);
-    // Note: Use of COMMANDS_ISSUED target assumes that it's safe to access the
-    // source resource once the command has been processed on the service side.
-    // TODO(reveman): Implement COMMANDS_COMPLETED query that can be used to
-    // accurately determine when it's safe to access the source resource again.
-    gl->BeginQueryEXT(GL_COMMANDS_ISSUED_CHROMIUM,
+    gl->BeginQueryEXT(GL_COMMANDS_COMPLETED_CHROMIUM,
                       source_resource->gl_read_lock_query_id);
     DCHECK(!dest_resource->image_id);
     dest_resource->allocated = true;
@@ -2261,7 +2252,7 @@
                             GLDataType(dest_resource->format));
     // End query and create a read lock fence that will prevent access to
     // source resource until CopyTextureCHROMIUM command has completed.
-    gl->EndQueryEXT(GL_COMMANDS_ISSUED_CHROMIUM);
+    gl->EndQueryEXT(GL_COMMANDS_COMPLETED_CHROMIUM);
     source_resource->read_lock_fence = make_scoped_refptr(
         new QueryFence(gl, source_resource->gl_read_lock_query_id));
   } else {
diff --git a/cc/resources/resource_provider.h b/cc/resources/resource_provider.h
index 9853cb4..addc05f 100644
--- a/cc/resources/resource_provider.h
+++ b/cc/resources/resource_provider.h
@@ -79,7 +79,7 @@
   virtual ~ResourceProvider();
 
   void InitializeSoftware();
-  bool InitializeGL();
+  void InitializeGL();
 
   void DidLoseOutputSurface() { lost_output_surface_ = true; }
 
@@ -360,10 +360,7 @@
   // Sets the current read fence. If a resource is locked for read
   // and has read fences enabled, the resource will not allow writes
   // until this fence has passed.
-  void SetReadLockFence(scoped_refptr<Fence> fence) {
-    current_read_lock_fence_ = fence;
-  }
-  Fence* GetReadLockFence() { return current_read_lock_fence_.get(); }
+  void SetReadLockFence(Fence* fence) { current_read_lock_fence_ = fence; }
 
   // Enable read lock fences for a specific resource.
   void EnableReadLockFences(ResourceProvider::ResourceId id, bool enable);
@@ -652,6 +649,8 @@
   scoped_ptr<IdAllocator> texture_id_allocator_;
   scoped_ptr<IdAllocator> buffer_id_allocator_;
 
+  bool use_sync_query_;
+
   DISALLOW_COPY_AND_ASSIGN(ResourceProvider);
 };
 
diff --git a/cc/resources/resource_provider_unittest.cc b/cc/resources/resource_provider_unittest.cc
index f3e2e30..509fc50 100644
--- a/cc/resources/resource_provider_unittest.cc
+++ b/cc/resources/resource_provider_unittest.cc
@@ -3033,6 +3033,7 @@
   scoped_ptr<AllocationTrackingContext3D> context_owned(
       new StrictMock<AllocationTrackingContext3D>);
   AllocationTrackingContext3D* context = context_owned.get();
+  context_owned->set_support_sync_query(true);
 
   FakeOutputSurfaceClient output_surface_client;
   scoped_ptr<OutputSurface> output_surface(FakeOutputSurface::Create3d(
@@ -3168,7 +3169,7 @@
       TestContextProvider::Create(
           context_owned.PassAs<TestWebGraphicsContext3D>());
   output_surface->InitializeAndSetContext3d(context_provider, NULL);
-  EXPECT_TRUE(resource_provider->InitializeGL());
+  resource_provider->InitializeGL();
 
   CheckCreateResource(ResourceProvider::GLTexture, resource_provider, context);
 }
diff --git a/cc/resources/skpicture_content_layer_updater.cc b/cc/resources/skpicture_content_layer_updater.cc
index b100778..645258a 100644
--- a/cc/resources/skpicture_content_layer_updater.cc
+++ b/cc/resources/skpicture_content_layer_updater.cc
@@ -27,8 +27,9 @@
     float contents_width_scale,
     float contents_height_scale,
     gfx::Rect* resulting_opaque_rect) {
+  SkPictureRecorder recorder;
   SkCanvas* canvas =
-      picture_.beginRecording(content_rect.width(), content_rect.height());
+      recorder.beginRecording(content_rect.width(), content_rect.height());
   DCHECK_EQ(content_rect.width(), canvas->getBaseLayerSize().width());
   DCHECK_EQ(content_rect.height(), canvas->getBaseLayerSize().height());
   base::TimeTicks start_time =
@@ -42,12 +43,13 @@
       rendering_stats_instrumentation_->EndRecording(start_time);
   rendering_stats_instrumentation_->AddRecord(
       duration, content_rect.width() * content_rect.height());
-  picture_.endRecording();
+  picture_ = skia::AdoptRef(recorder.endRecording());
 }
 
 void SkPictureContentLayerUpdater::DrawPicture(SkCanvas* canvas) {
   TRACE_EVENT0("cc", "SkPictureContentLayerUpdater::DrawPicture");
-  canvas->drawPicture(picture_);
+  if (picture_)
+    canvas->drawPicture(*picture_);
 }
 
 }  // namespace cc
diff --git a/cc/resources/skpicture_content_layer_updater.h b/cc/resources/skpicture_content_layer_updater.h
index e589184..a567976 100644
--- a/cc/resources/skpicture_content_layer_updater.h
+++ b/cc/resources/skpicture_content_layer_updater.h
@@ -6,6 +6,7 @@
 #define CC_RESOURCES_SKPICTURE_CONTENT_LAYER_UPDATER_H_
 
 #include "cc/resources/content_layer_updater.h"
+#include "skia/ext/refptr.h"
 #include "third_party/skia/include/core/SkPicture.h"
 
 class SkCanvas;
@@ -32,8 +33,7 @@
   void DrawPicture(SkCanvas* canvas);
 
  private:
-  // Recording canvas.
-  SkPicture picture_;
+  skia::RefPtr<SkPicture> picture_;
 
   DISALLOW_COPY_AND_ASSIGN(SkPictureContentLayerUpdater);
 };
diff --git a/cc/resources/task_graph_runner.cc b/cc/resources/task_graph_runner.cc
index 18cc012..913c06d 100644
--- a/cc/resources/task_graph_runner.cc
+++ b/cc/resources/task_graph_runner.cc
@@ -96,15 +96,24 @@
 
 }  // namespace
 
-Task::Task() : did_run_(false) {}
-
-Task::~Task() {}
-
-void Task::WillRun() {
-  DCHECK(!did_run_);
+Task::Task() : will_run_(false), did_run_(false) {
 }
 
-void Task::DidRun() { did_run_ = true; }
+Task::~Task() {
+  DCHECK(!will_run_);
+}
+
+void Task::WillRun() {
+  DCHECK(!will_run_);
+  DCHECK(!did_run_);
+  will_run_ = true;
+}
+
+void Task::DidRun() {
+  DCHECK(will_run_);
+  will_run_ = false;
+  did_run_ = true;
+}
 
 bool Task::HasFinishedRunning() const { return did_run_; }
 
diff --git a/cc/resources/task_graph_runner.h b/cc/resources/task_graph_runner.h
index 9dc17f5..0ed7140 100644
--- a/cc/resources/task_graph_runner.h
+++ b/cc/resources/task_graph_runner.h
@@ -31,6 +31,7 @@
   Task();
   virtual ~Task();
 
+  bool will_run_;
   bool did_run_;
 };
 
diff --git a/cc/resources/tile_manager.cc b/cc/resources/tile_manager.cc
index 963808e..f9fafbb 100644
--- a/cc/resources/tile_manager.cc
+++ b/cc/resources/tile_manager.cc
@@ -13,6 +13,7 @@
 #include "base/logging.h"
 #include "base/metrics/histogram.h"
 #include "cc/debug/devtools_instrumentation.h"
+#include "cc/debug/frame_viewer_instrumentation.h"
 #include "cc/debug/traced_value.h"
 #include "cc/layers/picture_layer_impl.h"
 #include "cc/resources/raster_worker_pool.h"
@@ -91,11 +92,6 @@
     DCHECK(!canvas_);
     canvas_ = client->AcquireCanvasForRaster(this);
   }
-  virtual void RunOnOriginThread() OVERRIDE {
-    TRACE_EVENT0("cc", "RasterTaskImpl::RunOnOriginThread");
-    if (canvas_)
-      AnalyzeAndRaster(picture_pile_);
-  }
   virtual void CompleteOnOriginThread(RasterizerTaskClient* client) OVERRIDE {
     canvas_ = NULL;
     client->ReleaseCanvasForRaster(this);
@@ -109,15 +105,6 @@
   virtual ~RasterTaskImpl() { DCHECK(!canvas_); }
 
  private:
-  scoped_ptr<base::Value> DataAsValue() const {
-    scoped_ptr<base::DictionaryValue> res(new base::DictionaryValue());
-    res->Set("tile_id", TracedValue::CreateIDRef(tile_id_).release());
-    res->Set("resolution", TileResolutionAsValue(tile_resolution_).release());
-    res->SetInteger("source_frame_number", source_frame_number_);
-    res->SetInteger("layer_id", layer_id_);
-    return res.PassAs<base::Value>();
-  }
-
   void AnalyzeAndRaster(PicturePileImpl* picture_pile) {
     DCHECK(picture_pile);
     DCHECK(canvas_);
@@ -132,10 +119,8 @@
   }
 
   void Analyze(PicturePileImpl* picture_pile) {
-    TRACE_EVENT1("cc",
-                 "RasterTaskImpl::Analyze",
-                 "data",
-                 TracedValue::FromValue(DataAsValue().release()));
+    frame_viewer_instrumentation::ScopedAnalyzeTask analyze_task(
+        tile_id_, tile_resolution_, source_frame_number_, layer_id_);
 
     DCHECK(picture_pile);
 
@@ -151,15 +136,13 @@
   }
 
   void Raster(PicturePileImpl* picture_pile) {
-    TRACE_EVENT2(
-        "cc",
-        "RasterTaskImpl::Raster",
-        "data",
-        TracedValue::FromValue(DataAsValue().release()),
-        "raster_mode",
-        TracedValue::FromValue(RasterModeAsValue(raster_mode_).release()));
-
-    devtools_instrumentation::ScopedLayerTask raster_task(
+    frame_viewer_instrumentation::ScopedRasterTask raster_task(
+        tile_id_,
+        tile_resolution_,
+        source_frame_number_,
+        layer_id_,
+        raster_mode_);
+    devtools_instrumentation::ScopedLayerTask layer_task(
         devtools_instrumentation::kRasterTask, layer_id_);
 
     skia::RefPtr<SkDrawFilter> draw_filter;
@@ -234,15 +217,16 @@
   // Overridden from Task:
   virtual void RunOnWorkerThread() OVERRIDE {
     TRACE_EVENT0("cc", "ImageDecodeTaskImpl::RunOnWorkerThread");
-    Decode();
+
+    devtools_instrumentation::ScopedImageDecodeTask image_decode_task(
+        pixel_ref_.get());
+    // This will cause the image referred to by pixel ref to be decoded.
+    pixel_ref_->lockPixels();
+    pixel_ref_->unlockPixels();
   }
 
   // Overridden from RasterizerTask:
   virtual void ScheduleOnOriginThread(RasterizerTaskClient* client) OVERRIDE {}
-  virtual void RunOnOriginThread() OVERRIDE {
-    TRACE_EVENT0("cc", "ImageDecodeTaskImpl::RunOnOriginThread");
-    Decode();
-  }
   virtual void CompleteOnOriginThread(RasterizerTaskClient* client) OVERRIDE {}
   virtual void RunReplyOnOriginThread() OVERRIDE {
     reply_.Run(!HasFinishedRunning());
@@ -252,14 +236,6 @@
   virtual ~ImageDecodeTaskImpl() {}
 
  private:
-  void Decode() {
-    devtools_instrumentation::ScopedImageDecodeTask image_decode_task(
-        pixel_ref_.get());
-    // This will cause the image referred to by pixel ref to be decoded.
-    pixel_ref_->lockPixels();
-    pixel_ref_->unlockPixels();
-  }
-
   skia::RefPtr<SkPixelRef> pixel_ref_;
   int layer_id_;
   RenderingStatsInstrumentation* rendering_stats_;
@@ -1138,7 +1114,7 @@
   // Note that this last optimization is a heuristic that ensures that we don't
   // spend too much time analyzing tiles on a multitude of small layers, as it
   // is likely that these layers have some non-solid content.
-  gfx::Size pile_size = tile->picture_pile()->size();
+  gfx::Size pile_size = tile->picture_pile()->tiling_rect().size();
   bool analyze_picture = !tile->use_gpu_rasterization() &&
                          std::min(pile_size.width(), pile_size.height()) >=
                              kMinDimensionsForAnalysis;
diff --git a/cc/scheduler/draw_swap_readback_result.h b/cc/scheduler/draw_swap_readback_result.h
index a87a08b..852b897 100644
--- a/cc/scheduler/draw_swap_readback_result.h
+++ b/cc/scheduler/draw_swap_readback_result.h
@@ -19,15 +19,17 @@
   };
 
   DrawSwapReadbackResult()
-      : draw_result(INVALID_RESULT), did_swap(false), did_readback(false) {}
+      : draw_result(INVALID_RESULT),
+        did_request_swap(false),
+        did_readback(false) {}
   DrawSwapReadbackResult(DrawResult draw_result,
-                         bool did_swap,
+                         bool did_request_swap,
                          bool did_readback)
       : draw_result(draw_result),
-        did_swap(did_swap),
+        did_request_swap(did_request_swap),
         did_readback(did_readback) {}
   DrawResult draw_result;
-  bool did_swap;
+  bool did_request_swap;
   bool did_readback;
 };
 
diff --git a/cc/scheduler/frame_rate_controller.cc b/cc/scheduler/frame_rate_controller.cc
index 243ef6b..beaa1e1 100644
--- a/cc/scheduler/frame_rate_controller.cc
+++ b/cc/scheduler/frame_rate_controller.cc
@@ -15,59 +15,15 @@
 
 namespace cc {
 
-class FrameRateControllerTimeSourceAdapter : public TimeSourceClient {
- public:
-  static scoped_ptr<FrameRateControllerTimeSourceAdapter> Create(
-      FrameRateController* frame_rate_controller) {
-    return make_scoped_ptr(
-        new FrameRateControllerTimeSourceAdapter(frame_rate_controller));
-  }
-  virtual ~FrameRateControllerTimeSourceAdapter() {}
-
-  virtual void OnTimerTick() OVERRIDE {
-    frame_rate_controller_->OnTimerTick();
-  }
-
- private:
-  explicit FrameRateControllerTimeSourceAdapter(
-      FrameRateController* frame_rate_controller)
-      : frame_rate_controller_(frame_rate_controller) {}
-
-  FrameRateController* frame_rate_controller_;
-};
-
 FrameRateController::FrameRateController(scoped_refptr<TimeSource> timer)
     : client_(NULL),
-      num_frames_pending_(0),
-      max_swaps_pending_(0),
       interval_(BeginFrameArgs::DefaultInterval()),
       time_source_(timer),
-      active_(false),
-      is_time_source_throttling_(true),
-      manual_tick_pending_(false),
-      task_runner_(NULL),
-      weak_factory_(this) {
-  time_source_client_adapter_ =
-      FrameRateControllerTimeSourceAdapter::Create(this);
-  time_source_->SetClient(time_source_client_adapter_.get());
+      active_(false) {
+  time_source_->SetClient(this);
 }
 
-FrameRateController::FrameRateController(
-    base::SingleThreadTaskRunner* task_runner)
-    : client_(NULL),
-      num_frames_pending_(0),
-      max_swaps_pending_(0),
-      interval_(BeginFrameArgs::DefaultInterval()),
-      active_(false),
-      is_time_source_throttling_(false),
-      manual_tick_pending_(false),
-      task_runner_(task_runner),
-      weak_factory_(this) {}
-
-FrameRateController::~FrameRateController() {
-  if (is_time_source_throttling_)
-    time_source_->SetActive(false);
-}
+FrameRateController::~FrameRateController() { time_source_->SetActive(false); }
 
 BeginFrameArgs FrameRateController::SetActive(bool active) {
   if (active_ == active)
@@ -75,35 +31,20 @@
   TRACE_EVENT1("cc", "FrameRateController::SetActive", "active", active);
   active_ = active;
 
-  if (is_time_source_throttling_) {
-    base::TimeTicks missed_tick_time = time_source_->SetActive(active);
-    if (!missed_tick_time.is_null()) {
-      base::TimeTicks deadline = NextTickTime();
-      return  BeginFrameArgs::Create(
-          missed_tick_time, deadline + deadline_adjustment_, interval_);
-    }
-  } else {
-    if (active) {
-      PostManualTick();
-    } else {
-      weak_factory_.InvalidateWeakPtrs();
-      manual_tick_pending_ = false;
-    }
+  base::TimeTicks missed_tick_time = time_source_->SetActive(active);
+  if (!missed_tick_time.is_null()) {
+    base::TimeTicks deadline = NextTickTime();
+    return BeginFrameArgs::Create(
+        missed_tick_time, deadline + deadline_adjustment_, interval_);
   }
 
   return BeginFrameArgs();
 }
 
-void FrameRateController::SetMaxSwapsPending(int max_swaps_pending) {
-  DCHECK_GE(max_swaps_pending, 0);
-  max_swaps_pending_ = max_swaps_pending;
-}
-
 void FrameRateController::SetTimebaseAndInterval(base::TimeTicks timebase,
                                                  base::TimeDelta interval) {
   interval_ = interval;
-  if (is_time_source_throttling_)
-    time_source_->SetTimebaseAndInterval(timebase, interval);
+  time_source_->SetTimebaseAndInterval(timebase, interval);
 }
 
 void FrameRateController::SetDeadlineAdjustment(base::TimeDelta delta) {
@@ -114,65 +55,22 @@
   TRACE_EVENT0("cc", "FrameRateController::OnTimerTick");
   DCHECK(active_);
 
-  // Check if we have too many frames in flight.
-  bool throttled =
-      max_swaps_pending_ && num_frames_pending_ >= max_swaps_pending_;
-  TRACE_COUNTER_ID1("cc", "ThrottledCompositor", task_runner_, throttled);
-
   if (client_) {
     // TODO(brianderson): Use an adaptive parent compositor deadline.
     base::TimeTicks frame_time = LastTickTime();
     base::TimeTicks deadline = NextTickTime();
     BeginFrameArgs args = BeginFrameArgs::Create(
         frame_time, deadline + deadline_adjustment_, interval_);
-    client_->FrameRateControllerTick(throttled, args);
+    client_->FrameRateControllerTick(args);
   }
-
-  if (!is_time_source_throttling_ && !throttled)
-    PostManualTick();
-}
-
-void FrameRateController::PostManualTick() {
-  if (active_ && !manual_tick_pending_) {
-    manual_tick_pending_ = true;
-    task_runner_->PostTask(FROM_HERE,
-                           base::Bind(&FrameRateController::ManualTick,
-                                      weak_factory_.GetWeakPtr()));
-  }
-}
-
-void FrameRateController::ManualTick() {
-  manual_tick_pending_ = false;
-  OnTimerTick();
-}
-
-void FrameRateController::DidSwapBuffers() {
-  num_frames_pending_++;
-}
-
-void FrameRateController::DidSwapBuffersComplete() {
-  DCHECK_GT(num_frames_pending_, 0);
-  num_frames_pending_--;
-  if (!is_time_source_throttling_)
-    PostManualTick();
-}
-
-void FrameRateController::DidAbortAllPendingFrames() {
-  num_frames_pending_ = 0;
 }
 
 base::TimeTicks FrameRateController::NextTickTime() {
-  if (is_time_source_throttling_)
-    return time_source_->NextTickTime();
-
-  return base::TimeTicks();
+  return time_source_->NextTickTime();
 }
 
 base::TimeTicks FrameRateController::LastTickTime() {
-  if (is_time_source_throttling_)
-    return time_source_->LastTickTime();
-
-  return gfx::FrameTime::Now();
+  return time_source_->LastTickTime();
 }
 
 }  // namespace cc
diff --git a/cc/scheduler/frame_rate_controller.h b/cc/scheduler/frame_rate_controller.h
index 6d86d97..2ec62ac 100644
--- a/cc/scheduler/frame_rate_controller.h
+++ b/cc/scheduler/frame_rate_controller.h
@@ -11,6 +11,7 @@
 #include "base/time/time.h"
 #include "cc/base/cc_export.h"
 #include "cc/output/begin_frame_args.h"
+#include "cc/scheduler/time_source.h"
 
 namespace base { class SingleThreadTaskRunner; }
 
@@ -24,20 +25,14 @@
   virtual ~FrameRateControllerClient() {}
 
  public:
-  // Throttled is true when we have a maximum number of frames pending.
-  virtual void FrameRateControllerTick(bool throttled,
-                                       const BeginFrameArgs& args) = 0;
+  virtual void FrameRateControllerTick(const BeginFrameArgs& args) = 0;
 };
 
-class FrameRateControllerTimeSourceAdapter;
-
 // The FrameRateController is used in cases where we self-tick (i.e. BeginFrame
 // is not sent by a parent compositor.
-class CC_EXPORT FrameRateController {
+class CC_EXPORT FrameRateController : TimeSourceClient {
  public:
   explicit FrameRateController(scoped_refptr<TimeSource> timer);
-  // Alternate form of FrameRateController with unthrottled frame-rate.
-  explicit FrameRateController(base::SingleThreadTaskRunner* task_runner);
   virtual ~FrameRateController();
 
   void SetClient(FrameRateControllerClient* client) { client_ = client; }
@@ -48,50 +43,24 @@
 
   bool IsActive() { return active_; }
 
-  // Use the following methods to adjust target frame rate.
-  //
-  // Multiple frames can be in-progress, but for every DidSwapBuffers, a
-  // DidFinishFrame should be posted.
-  //
-  // If the rendering pipeline crashes, call DidAbortAllPendingFrames.
-  void DidSwapBuffers();
-  void DidSwapBuffersComplete();
-  void DidAbortAllPendingFrames();
-  void SetMaxSwapsPending(int max_swaps_pending);  // 0 for unlimited.
-  int MaxSwapsPending() const { return max_swaps_pending_; }
-  int NumSwapsPendingForTesting() const { return num_frames_pending_; }
-
   void SetTimebaseAndInterval(base::TimeTicks timebase,
                               base::TimeDelta interval);
   void SetDeadlineAdjustment(base::TimeDelta delta);
 
+  virtual void OnTimerTick() OVERRIDE;
+
  protected:
-  friend class FrameRateControllerTimeSourceAdapter;
-  void OnTimerTick();
-
-  void PostManualTick();
-  void ManualTick();
-
     // This returns null for unthrottled frame-rate.
   base::TimeTicks NextTickTime();
   // This returns now for unthrottled frame-rate.
   base::TimeTicks LastTickTime();
 
   FrameRateControllerClient* client_;
-  int num_frames_pending_;
-  int max_swaps_pending_;
   base::TimeDelta interval_;
   base::TimeDelta deadline_adjustment_;
   scoped_refptr<TimeSource> time_source_;
-  scoped_ptr<FrameRateControllerTimeSourceAdapter> time_source_client_adapter_;
   bool active_;
 
-  // Members for unthrottled frame-rate.
-  bool is_time_source_throttling_;
-  bool manual_tick_pending_;
-  base::SingleThreadTaskRunner* task_runner_;
-  base::WeakPtrFactory<FrameRateController> weak_factory_;
-
  private:
   DISALLOW_COPY_AND_ASSIGN(FrameRateController);
 };
diff --git a/cc/scheduler/frame_rate_controller_unittest.cc b/cc/scheduler/frame_rate_controller_unittest.cc
index e7d7580..ed7de67 100644
--- a/cc/scheduler/frame_rate_controller_unittest.cc
+++ b/cc/scheduler/frame_rate_controller_unittest.cc
@@ -19,9 +19,8 @@
   bool BeganFrame() const { return frame_count_ > 0; }
   int frame_count() const { return frame_count_; }
 
-  virtual void FrameRateControllerTick(
-      bool throttled, const BeginFrameArgs& args) OVERRIDE {
-    frame_count_ += throttled ? 0 : 1;
+  virtual void FrameRateControllerTick(const BeginFrameArgs& args) OVERRIDE {
+    frame_count_ += 1;
   }
 
  protected:
@@ -50,14 +49,6 @@
   EXPECT_TRUE(client.BeganFrame());
   client.Reset();
 
-  // Tell the controller we drew
-  controller.DidSwapBuffers();
-
-  // Tell the controller the frame ended 5ms later
-  time_source->SetNow(time_source->Now() +
-                      base::TimeDelta::FromMilliseconds(5));
-  controller.DidSwapBuffersComplete();
-
   // Trigger another frame, make sure BeginFrame runs again
   elapsed += task_runner->NextPendingTaskDelay();
   // Sanity check that previous code didn't move time backward.
@@ -67,145 +58,5 @@
   EXPECT_TRUE(client.BeganFrame());
 }
 
-TEST(FrameRateControllerTest, TestFrameThrottling_TwoFramesInFlight) {
-  scoped_refptr<base::TestSimpleTaskRunner> task_runner =
-      new base::TestSimpleTaskRunner;
-  FakeFrameRateControllerClient client;
-  base::TimeDelta interval = base::TimeDelta::FromMicroseconds(
-      base::Time::kMicrosecondsPerSecond / 60);
-  scoped_refptr<FakeDelayBasedTimeSource> time_source =
-      FakeDelayBasedTimeSource::Create(interval, task_runner.get());
-  FrameRateController controller(time_source);
-
-  controller.SetClient(&client);
-  controller.SetActive(true);
-  controller.SetMaxSwapsPending(2);
-
-  base::TimeTicks elapsed;  // Muck around with time a bit
-
-  // Trigger one frame, make sure the BeginFrame callback is called
-  elapsed += task_runner->NextPendingTaskDelay();
-  time_source->SetNow(elapsed);
-  task_runner->RunPendingTasks();
-  EXPECT_TRUE(client.BeganFrame());
-  client.Reset();
-
-  // Tell the controller we drew
-  controller.DidSwapBuffers();
-
-  // Trigger another frame, make sure BeginFrame callback runs again
-  elapsed += task_runner->NextPendingTaskDelay();
-  // Sanity check that previous code didn't move time backward.
-  EXPECT_GE(elapsed, time_source->Now());
-  time_source->SetNow(elapsed);
-  task_runner->RunPendingTasks();
-  EXPECT_TRUE(client.BeganFrame());
-  client.Reset();
-
-  // Tell the controller we drew, again.
-  controller.DidSwapBuffers();
-
-  // Trigger another frame. Since two frames are pending, we should not draw.
-  elapsed += task_runner->NextPendingTaskDelay();
-  // Sanity check that previous code didn't move time backward.
-  EXPECT_GE(elapsed, time_source->Now());
-  time_source->SetNow(elapsed);
-  task_runner->RunPendingTasks();
-  EXPECT_FALSE(client.BeganFrame());
-
-  // Tell the controller the first frame ended 5ms later
-  time_source->SetNow(time_source->Now() +
-                      base::TimeDelta::FromMilliseconds(5));
-  controller.DidSwapBuffersComplete();
-
-  // Tick should not have been called
-  EXPECT_FALSE(client.BeganFrame());
-
-  // Trigger yet another frame. Since one frames is pending, another
-  // BeginFrame callback should run.
-  elapsed += task_runner->NextPendingTaskDelay();
-  // Sanity check that previous code didn't move time backward.
-  EXPECT_GE(elapsed, time_source->Now());
-  time_source->SetNow(elapsed);
-  task_runner->RunPendingTasks();
-  EXPECT_TRUE(client.BeganFrame());
-}
-
-TEST(FrameRateControllerTest, TestFrameThrottling_Unthrottled) {
-  scoped_refptr<base::TestSimpleTaskRunner> task_runner =
-      new base::TestSimpleTaskRunner;
-  FakeFrameRateControllerClient client;
-  FrameRateController controller(task_runner.get());
-
-  controller.SetClient(&client);
-  controller.SetMaxSwapsPending(2);
-
-  // SetActive triggers 1st frame, make sure the BeginFrame callback
-  // is called
-  controller.SetActive(true);
-  task_runner->RunPendingTasks();
-  EXPECT_TRUE(client.BeganFrame());
-  client.Reset();
-
-  // Even if we don't call DidSwapBuffers, FrameRateController should
-  // still attempt to tick multiple times until it does result in
-  // a DidSwapBuffers.
-  task_runner->RunPendingTasks();
-  EXPECT_TRUE(client.BeganFrame());
-  client.Reset();
-
-  task_runner->RunPendingTasks();
-  EXPECT_TRUE(client.BeganFrame());
-  client.Reset();
-
-  // DidSwapBuffers triggers 2nd frame, make sure the BeginFrame callback is
-  // called
-  controller.DidSwapBuffers();
-  task_runner->RunPendingTasks();
-  EXPECT_TRUE(client.BeganFrame());
-  client.Reset();
-
-  // DidSwapBuffers triggers 3rd frame (> max_frames_pending),
-  // make sure the BeginFrame callback is NOT called
-  controller.DidSwapBuffers();
-  task_runner->RunPendingTasks();
-  EXPECT_FALSE(client.BeganFrame());
-  client.Reset();
-
-  // Make sure there is no pending task since we can't do anything until we
-  // receive a DidSwapBuffersComplete anyway.
-  EXPECT_FALSE(task_runner->HasPendingTask());
-
-  // DidSwapBuffersComplete triggers a frame, make sure the BeginFrame
-  // callback is called
-  controller.DidSwapBuffersComplete();
-  task_runner->RunPendingTasks();
-  EXPECT_TRUE(client.BeganFrame());
-}
-
-TEST(FrameRateControllerTest, TestFrameThrottling_NoDoubleTicking) {
-  scoped_refptr<base::TestSimpleTaskRunner> task_runner =
-      new base::TestSimpleTaskRunner;
-  FakeFrameRateControllerClient client;
-  FrameRateController controller(task_runner.get());
-  controller.SetClient(&client);
-
-  // SetActive triggers 1st frame and queues another tick task since the time
-  // source isn't throttling.
-  controller.SetActive(true);
-  task_runner->RunPendingTasks();
-  EXPECT_TRUE(client.BeganFrame());
-  client.Reset();
-  EXPECT_TRUE(task_runner->HasPendingTask());
-
-  // Simulate a frame swap. This shouldn't queue a second tick task.
-  controller.DidSwapBuffers();
-  controller.DidSwapBuffersComplete();
-
-  // The client should only be ticked once.
-  task_runner->RunPendingTasks();
-  EXPECT_EQ(1, client.frame_count());
-}
-
 }  // namespace
 }  // namespace cc
diff --git a/cc/scheduler/scheduler.cc b/cc/scheduler/scheduler.cc
index 5d70010..592cbf1 100644
--- a/cc/scheduler/scheduler.cc
+++ b/cc/scheduler/scheduler.cc
@@ -92,11 +92,29 @@
   ProcessScheduledActions();
 }
 
+void Scheduler::SetMaxSwapsPending(int max) {
+  state_machine_.SetMaxSwapsPending(max);
+}
+
+void Scheduler::DidSwapBuffers() {
+  state_machine_.DidSwapBuffers();
+  // There is no need to call ProcessScheduledActions here because
+  // swapping should not trigger any new actions.
+  if (!inside_process_scheduled_actions_) {
+    DCHECK_EQ(state_machine_.NextAction(), SchedulerStateMachine::ACTION_NONE);
+  }
+}
+
 void Scheduler::SetSwapUsedIncompleteTile(bool used_incomplete_tile) {
   state_machine_.SetSwapUsedIncompleteTile(used_incomplete_tile);
   ProcessScheduledActions();
 }
 
+void Scheduler::DidSwapBuffersComplete() {
+  state_machine_.DidSwapBuffersComplete();
+  ProcessScheduledActions();
+}
+
 void Scheduler::SetSmoothnessTakesPriority(bool smoothness_takes_priority) {
   state_machine_.SetSmoothnessTakesPriority(smoothness_takes_priority);
   ProcessScheduledActions();
@@ -433,7 +451,7 @@
 
 void Scheduler::DrawAndReadback() {
   DrawSwapReadbackResult result = client_->ScheduledActionDrawAndReadback();
-  DCHECK(!result.did_swap);
+  DCHECK(!result.did_request_swap);
 }
 
 void Scheduler::ProcessScheduledActions() {
diff --git a/cc/scheduler/scheduler.h b/cc/scheduler/scheduler.h
index 18ecb50..7dd531b 100644
--- a/cc/scheduler/scheduler.h
+++ b/cc/scheduler/scheduler.h
@@ -75,7 +75,10 @@
 
   void SetNeedsManageTiles();
 
+  void SetMaxSwapsPending(int max);
+  void DidSwapBuffers();
   void SetSwapUsedIncompleteTile(bool used_incomplete_tile);
+  void DidSwapBuffersComplete();
 
   void SetSmoothnessTakesPriority(bool smoothness_takes_priority);
 
diff --git a/cc/scheduler/scheduler_state_machine.cc b/cc/scheduler/scheduler_state_machine.cc
index 9a08819..7b2bb43 100644
--- a/cc/scheduler/scheduler_state_machine.cc
+++ b/cc/scheduler/scheduler_state_machine.cc
@@ -27,6 +27,8 @@
       last_frame_number_update_visible_tiles_was_called_(-1),
       manage_tiles_funnel_(0),
       consecutive_checkerboard_animations_(0),
+      max_pending_swaps_(1),
+      pending_swaps_(0),
       needs_redraw_(false),
       needs_manage_tiles_(false),
       swap_used_incomplete_tile_(false),
@@ -226,6 +228,8 @@
   minor_state->SetInteger("manage_tiles_funnel", manage_tiles_funnel_);
   minor_state->SetInteger("consecutive_checkerboard_animations",
                           consecutive_checkerboard_animations_);
+  minor_state->SetInteger("max_pending_swaps_", max_pending_swaps_);
+  minor_state->SetInteger("pending_swaps_", pending_swaps_);
   minor_state->SetBoolean("needs_redraw", needs_redraw_);
   minor_state->SetBoolean("needs_manage_tiles", needs_manage_tiles_);
   minor_state->SetBoolean("swap_used_incomplete_tile",
@@ -364,6 +368,10 @@
   if (HasSwappedThisFrame())
     return false;
 
+  // Do not queue too many swaps.
+  if (pending_swaps_ >= max_pending_swaps_)
+    return false;
+
   // Except for the cases above, do not draw outside of the BeginImplFrame
   // deadline.
   if (begin_impl_frame_state_ != BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE)
@@ -472,6 +480,11 @@
   if (!HasInitializedOutputSurface())
     return false;
 
+  // SwapAck throttle the BeginMainFrames
+  // TODO(brianderson): Remove this restriction to improve throughput.
+  if (pending_swaps_ >= max_pending_swaps_)
+    return false;
+
   if (skip_begin_main_frame_to_reduce_latency_)
     return false;
 
@@ -581,15 +594,15 @@
 
     case ACTION_DRAW_AND_SWAP_FORCED:
     case ACTION_DRAW_AND_SWAP_IF_POSSIBLE: {
-      bool did_swap = true;
-      UpdateStateOnDraw(did_swap);
+      bool did_request_swap = true;
+      UpdateStateOnDraw(did_request_swap);
       return;
     }
 
     case ACTION_DRAW_AND_SWAP_ABORT:
     case ACTION_DRAW_AND_READBACK: {
-      bool did_swap = false;
-      UpdateStateOnDraw(did_swap);
+      bool did_request_swap = false;
+      UpdateStateOnDraw(did_request_swap);
       return;
     }
 
@@ -726,7 +739,7 @@
   needs_redraw_ = true;
 }
 
-void SchedulerStateMachine::UpdateStateOnDraw(bool did_swap) {
+void SchedulerStateMachine::UpdateStateOnDraw(bool did_request_swap) {
   DCHECK(readback_state_ != READBACK_STATE_WAITING_FOR_REPLACEMENT_COMMIT &&
          readback_state_ != READBACK_STATE_WAITING_FOR_REPLACEMENT_ACTIVATION)
       << *AsValue();
@@ -751,7 +764,7 @@
   draw_if_possible_failed_ = false;
   active_tree_needs_first_draw_ = false;
 
-  if (did_swap)
+  if (did_request_swap)
     last_frame_number_swap_performed_ = current_frame_number_;
 }
 
@@ -792,8 +805,7 @@
   // Both the synchronous compositor and disabled vsync settings
   // make it undesirable to proactively request BeginImplFrames.
   // If this is true, the scheduler should poll.
-  return !settings_.using_synchronous_renderer_compositor &&
-         settings_.throttle_frame_production;
+  return !settings_.using_synchronous_renderer_compositor;
 }
 
 // These are the cases where we definitely (or almost definitely) have a
@@ -908,6 +920,10 @@
   if (output_surface_state_ == OUTPUT_SURFACE_LOST)
     return true;
 
+  // SwapAck throttle the deadline since we wont draw and swap anyway.
+  if (pending_swaps_ >= max_pending_swaps_)
+    return false;
+
   if (active_tree_needs_first_draw_)
     return true;
 
@@ -996,11 +1012,25 @@
   }
 }
 
+void SchedulerStateMachine::SetMaxSwapsPending(int max) {
+  max_pending_swaps_ = max;
+}
+
+void SchedulerStateMachine::DidSwapBuffers() {
+  pending_swaps_++;
+  DCHECK_LE(pending_swaps_, max_pending_swaps_);
+}
+
 void SchedulerStateMachine::SetSwapUsedIncompleteTile(
     bool used_incomplete_tile) {
   swap_used_incomplete_tile_ = used_incomplete_tile;
 }
 
+void SchedulerStateMachine::DidSwapBuffersComplete() {
+  DCHECK_GT(pending_swaps_, 0);
+  pending_swaps_--;
+}
+
 void SchedulerStateMachine::SetSmoothnessTakesPriority(
     bool smoothness_takes_priority) {
   smoothness_takes_priority_ = smoothness_takes_priority;
@@ -1132,6 +1162,7 @@
     needs_commit_ = true;
   }
   did_create_and_initialize_first_output_surface_ = true;
+  pending_swaps_ = 0;
 }
 
 void SchedulerStateMachine::NotifyBeginMainFrameStarted() {
diff --git a/cc/scheduler/scheduler_state_machine.h b/cc/scheduler/scheduler_state_machine.h
index c8d68fc..2779264 100644
--- a/cc/scheduler/scheduler_state_machine.h
+++ b/cc/scheduler/scheduler_state_machine.h
@@ -168,10 +168,21 @@
   // ManageTiles will occur shortly (even if no redraw is required).
   void SetNeedsManageTiles();
 
+  // Sets how many swaps can be pending to the OutputSurface.
+  void SetMaxSwapsPending(int max);
+
+  // If the scheduler attempted to draw and swap, this provides feedback
+  // regarding whether or not the swap actually occured. We might skip the
+  // swap when there is not damage, for example.
+  void DidSwapBuffers();
+
   // Indicates whether a redraw is required because we are currently rendering
   // with a low resolution or checkerboarded tile.
   void SetSwapUsedIncompleteTile(bool used_incomplete_tile);
 
+  // Notification from the OutputSurface that a swap has been consumed.
+  void DidSwapBuffersComplete();
+
   // Indicates whether to prioritize animation smoothness over new content
   // activation.
   void SetSmoothnessTakesPriority(bool smoothness_takes_priority);
@@ -260,7 +271,7 @@
 
   void UpdateStateOnCommit(bool commit_was_aborted);
   void UpdateStateOnActivation();
-  void UpdateStateOnDraw(bool did_swap);
+  void UpdateStateOnDraw(bool did_request_swap);
   void UpdateStateOnManageTiles();
 
   const SchedulerSettings settings_;
@@ -285,6 +296,8 @@
   // ManageTile per BeginImplFrame.
   int manage_tiles_funnel_;
   int consecutive_checkerboard_animations_;
+  int max_pending_swaps_;
+  int pending_swaps_;
   bool needs_redraw_;
   bool needs_manage_tiles_;
   bool swap_used_incomplete_tile_;
diff --git a/cc/scheduler/scheduler_unittest.cc b/cc/scheduler/scheduler_unittest.cc
index 68dc0d1..21e20ea 100644
--- a/cc/scheduler/scheduler_unittest.cc
+++ b/cc/scheduler/scheduler_unittest.cc
@@ -40,7 +40,7 @@
 class FakeSchedulerClient : public SchedulerClient {
  public:
   FakeSchedulerClient()
-  : needs_begin_impl_frame_(false) {
+      : needs_begin_impl_frame_(false), automatic_swap_ack_(true) {
     Reset();
   }
 
@@ -92,6 +92,9 @@
   void SetSwapWillHappenIfDrawHappens(bool swap_will_happen_if_draw_happens) {
     swap_will_happen_if_draw_happens_ = swap_will_happen_if_draw_happens;
   }
+  void SetAutomaticSwapAck(bool automatic_swap_ack) {
+    automatic_swap_ack_ = automatic_swap_ack;
+  }
 
   // SchedulerClient implementation.
   virtual void SetNeedsBeginFrame(bool enable) OVERRIDE {
@@ -117,6 +120,13 @@
         draw_will_happen_
             ? DrawSwapReadbackResult::DRAW_SUCCESS
             : DrawSwapReadbackResult::DRAW_ABORTED_CHECKERBOARD_ANIMATIONS;
+    bool swap_will_happen =
+        draw_will_happen_ && swap_will_happen_if_draw_happens_;
+    if (swap_will_happen) {
+      scheduler_->DidSwapBuffers();
+      if (automatic_swap_ack_)
+        scheduler_->DidSwapBuffersComplete();
+    }
     return DrawSwapReadbackResult(
         result,
         draw_will_happen_ && swap_will_happen_if_draw_happens_,
@@ -125,18 +135,18 @@
   virtual DrawSwapReadbackResult ScheduledActionDrawAndSwapForced() OVERRIDE {
     actions_.push_back("ScheduledActionDrawAndSwapForced");
     states_.push_back(scheduler_->StateAsValue().release());
-    bool did_swap = swap_will_happen_if_draw_happens_;
+    bool did_request_swap = swap_will_happen_if_draw_happens_;
     bool did_readback = false;
     return DrawSwapReadbackResult(
-        DrawSwapReadbackResult::DRAW_SUCCESS, did_swap, did_readback);
+        DrawSwapReadbackResult::DRAW_SUCCESS, did_request_swap, did_readback);
   }
   virtual DrawSwapReadbackResult ScheduledActionDrawAndReadback() OVERRIDE {
     actions_.push_back("ScheduledActionDrawAndReadback");
     states_.push_back(scheduler_->StateAsValue().release());
-    bool did_swap = false;
+    bool did_request_swap = false;
     bool did_readback = true;
     return DrawSwapReadbackResult(
-        DrawSwapReadbackResult::DRAW_SUCCESS, did_swap, did_readback);
+        DrawSwapReadbackResult::DRAW_SUCCESS, did_request_swap, did_readback);
   }
   virtual void ScheduledActionCommit() OVERRIDE {
     actions_.push_back("ScheduledActionCommit");
@@ -178,6 +188,7 @@
   bool needs_begin_impl_frame_;
   bool draw_will_happen_;
   bool swap_will_happen_if_draw_happens_;
+  bool automatic_swap_ack_;
   int num_draws_;
   bool log_anticipated_draw_time_change_;
   base::TimeTicks posted_begin_impl_frame_deadline_;
@@ -381,10 +392,10 @@
 
   virtual DrawSwapReadbackResult ScheduledActionDrawAndSwapForced() OVERRIDE {
     NOTREACHED();
-    bool did_swap = true;
+    bool did_request_swap = true;
     bool did_readback = false;
     return DrawSwapReadbackResult(
-        DrawSwapReadbackResult::DRAW_SUCCESS, did_swap, did_readback);
+        DrawSwapReadbackResult::DRAW_SUCCESS, did_request_swap, did_readback);
   }
 
   virtual void ScheduledActionCommit() OVERRIDE {}
@@ -497,10 +508,10 @@
 
   virtual DrawSwapReadbackResult ScheduledActionDrawAndSwapForced() OVERRIDE {
     NOTREACHED();
-    bool did_swap = false;
+    bool did_request_swap = false;
     bool did_readback = false;
     return DrawSwapReadbackResult(
-        DrawSwapReadbackResult::DRAW_SUCCESS, did_swap, did_readback);
+        DrawSwapReadbackResult::DRAW_SUCCESS, did_request_swap, did_readback);
   }
 
   virtual void ScheduledActionCommit() OVERRIDE {}
@@ -1058,6 +1069,9 @@
   client.task_runner().RunPendingTasks();  // Run posted deadline.
   EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
 
+  scheduler->DidSwapBuffers();
+  scheduler->DidSwapBuffersComplete();
+
   // At this point, we've drawn a frame. Start another commit, but hold off on
   // the NotifyReadyToCommit for now.
   EXPECT_FALSE(scheduler->CommitPending());
@@ -1065,6 +1079,13 @@
   scheduler->BeginFrame(frame_args);
   EXPECT_TRUE(scheduler->CommitPending());
 
+  // Draw and swap the frame, but don't ack the swap to simulate the Browser
+  // blocking on the renderer.
+  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
+  client.task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
+  scheduler->DidSwapBuffers();
+
   // Spin the event loop a few times and make sure we get more
   // DidAnticipateDrawTimeChange calls every time.
   int actions_so_far = client.num_actions_();
@@ -1095,7 +1116,7 @@
   }
 }
 
-TEST(SchedulerTest, BeginRetroFrame) {
+TEST(SchedulerTest, BeginRetroFrameBasic) {
   FakeSchedulerClient client;
   SchedulerSettings scheduler_settings;
   Scheduler* scheduler = client.CreateScheduler(scheduler_settings);
@@ -1116,7 +1137,6 @@
   BeginFrameArgs args = BeginFrameArgs::CreateForTesting();
   args.deadline += base::TimeDelta::FromHours(1);
   scheduler->BeginFrame(args);
-
   EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
   EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
   EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
@@ -1172,5 +1192,93 @@
   client.Reset();
 }
 
+TEST(SchedulerTest, BeginRetroFrame_SwapThrottled) {
+  FakeSchedulerClient client;
+  SchedulerSettings scheduler_settings;
+  Scheduler* scheduler = client.CreateScheduler(scheduler_settings);
+  scheduler->SetCanStart();
+  scheduler->SetVisible(true);
+  scheduler->SetCanDraw(true);
+  InitializeOutputSurfaceAndFirstCommit(scheduler, &client);
+
+  // To test swap ack throttling, this test disables automatic swap acks.
+  scheduler->SetMaxSwapsPending(1);
+  client.SetAutomaticSwapAck(false);
+
+  // SetNeedsCommit should begin the frame on the next BeginImplFrame.
+  client.Reset();
+  scheduler->SetNeedsCommit();
+  EXPECT_TRUE(client.needs_begin_impl_frame());
+  EXPECT_SINGLE_ACTION("SetNeedsBeginFrame", client);
+  client.Reset();
+
+  // Create a BeginFrame with a long deadline to avoid race conditions.
+  // This is the first BeginFrame, which will be handled immediately.
+  BeginFrameArgs args = BeginFrameArgs::CreateForTesting();
+  args.deadline += base::TimeDelta::FromHours(1);
+  scheduler->BeginFrame(args);
+  EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
+  EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
+  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
+  EXPECT_TRUE(client.needs_begin_impl_frame());
+  client.Reset();
+
+  // Queue BeginFrame while we are still handling the previous BeginFrame.
+  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
+  args.frame_time += base::TimeDelta::FromSeconds(1);
+  scheduler->BeginFrame(args);
+  EXPECT_EQ(0, client.num_actions_());
+  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
+  client.Reset();
+
+  // NotifyReadyToCommit should trigger the pending commit and draw.
+  scheduler->NotifyBeginMainFrameStarted();
+  scheduler->NotifyReadyToCommit();
+  EXPECT_SINGLE_ACTION("ScheduledActionCommit", client);
+  EXPECT_TRUE(client.needs_begin_impl_frame());
+  client.Reset();
+
+  // Swapping will put us into a swap throttled state.
+  client.task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 0, 2);
+  EXPECT_ACTION("SetNeedsBeginFrame", client, 1, 2);
+  EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
+  EXPECT_TRUE(client.needs_begin_impl_frame());
+  client.Reset();
+
+  // While swap throttled, BeginRetroFrames should trigger BeginImplFrames
+  // but not a BeginMainFrame or draw.
+  scheduler->SetNeedsCommit();
+  client.task_runner().RunPendingTasks();  // Run posted BeginRetroFrame.
+  EXPECT_ACTION("WillBeginImplFrame", client, 0, 1);
+  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
+  EXPECT_TRUE(client.needs_begin_impl_frame());
+  client.Reset();
+
+  // Queue BeginFrame while we are still handling the previous BeginFrame.
+  args.frame_time += base::TimeDelta::FromSeconds(1);
+  scheduler->BeginFrame(args);
+  EXPECT_EQ(0, client.num_actions_());
+  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
+  EXPECT_TRUE(client.needs_begin_impl_frame());
+  client.Reset();
+
+  // Take us out of a swap throttled state.
+  scheduler->DidSwapBuffersComplete();
+  EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 0, 1);
+  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
+  EXPECT_TRUE(client.needs_begin_impl_frame());
+  client.Reset();
+
+  // BeginImplFrame deadline should draw.
+  scheduler->SetNeedsRedraw();
+  client.task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 0, 2);
+  EXPECT_ACTION("SetNeedsBeginFrame", client, 1, 2);
+  EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
+  EXPECT_TRUE(client.needs_begin_impl_frame());
+  client.Reset();
+}
+
 }  // namespace
 }  // namespace cc
diff --git a/cc/scheduler/time_source.h b/cc/scheduler/time_source.h
index e45ffbb..3b8d048 100644
--- a/cc/scheduler/time_source.h
+++ b/cc/scheduler/time_source.h
@@ -11,7 +11,7 @@
 
 namespace cc {
 
-class TimeSourceClient {
+class CC_EXPORT TimeSourceClient {
  public:
   virtual void OnTimerTick() = 0;
 
diff --git a/cc/surfaces/surface_aggregator_test_helpers.cc b/cc/surfaces/surface_aggregator_test_helpers.cc
index cc14dde..2ac3289 100644
--- a/cc/surfaces/surface_aggregator_test_helpers.cc
+++ b/cc/surfaces/surface_aggregator_test_helpers.cc
@@ -76,7 +76,7 @@
                gfx::RectF(),
                FilterOperations(),
                FilterOperations());
-  quad_sink.MaybeAppend(quad.PassAs<DrawQuad>());
+  quad_sink.Append(quad.PassAs<DrawQuad>());
 }
 
 void AddQuadInPass(TestRenderPass* pass, Quad desc) {
diff --git a/cc/test/fake_layer_tree_host_impl_client.h b/cc/test/fake_layer_tree_host_impl_client.h
index 975992d..bdbea22 100644
--- a/cc/test/fake_layer_tree_host_impl_client.h
+++ b/cc/test/fake_layer_tree_host_impl_client.h
@@ -15,8 +15,9 @@
   // LayerTreeHostImplClient implementation.
   virtual void UpdateRendererCapabilitiesOnImplThread() OVERRIDE {}
   virtual void DidLoseOutputSurfaceOnImplThread() OVERRIDE {}
+  virtual void SetMaxSwapsPendingOnImplThread(int max) OVERRIDE {}
   virtual void DidSwapBuffersOnImplThread() OVERRIDE {}
-  virtual void OnSwapBuffersCompleteOnImplThread() OVERRIDE {}
+  virtual void DidSwapBuffersCompleteOnImplThread() OVERRIDE {}
   virtual void BeginFrame(const BeginFrameArgs& args) OVERRIDE {}
   virtual void OnCanDrawStateChanged(bool can_draw) OVERRIDE {}
   virtual void NotifyReadyToActivate() OVERRIDE {}
diff --git a/cc/test/fake_output_surface_client.h b/cc/test/fake_output_surface_client.h
index d64e063..b572c5e 100644
--- a/cc/test/fake_output_surface_client.h
+++ b/cc/test/fake_output_surface_client.h
@@ -25,7 +25,7 @@
   virtual void SetNeedsRedrawRect(const gfx::Rect& damage_rect) OVERRIDE {}
   virtual void BeginFrame(const BeginFrameArgs& args) OVERRIDE;
   virtual void DidSwapBuffers() OVERRIDE {}
-  virtual void OnSwapBuffersComplete() OVERRIDE {}
+  virtual void DidSwapBuffersComplete() OVERRIDE {}
   virtual void ReclaimResources(const CompositorFrameAck* ack) OVERRIDE {}
   virtual void DidLoseOutputSurface() OVERRIDE;
   virtual void SetExternalDrawConstraints(
diff --git a/cc/test/fake_picture_layer_impl.cc b/cc/test/fake_picture_layer_impl.cc
index 5615cb1..88dde4d 100644
--- a/cc/test/fake_picture_layer_impl.cc
+++ b/cc/test/fake_picture_layer_impl.cc
@@ -17,7 +17,17 @@
     : PictureLayerImpl(tree_impl, id),
       append_quads_count_(0) {
   pile_ = pile;
-  SetBounds(pile_->size());
+  CHECK(pile->tiling_rect().origin() == gfx::Point());
+  SetBounds(pile_->tiling_rect().size());
+}
+
+FakePictureLayerImpl::FakePictureLayerImpl(LayerTreeImpl* tree_impl,
+                                           int id,
+                                           scoped_refptr<PicturePileImpl> pile,
+                                           const gfx::Size& layer_bounds)
+    : PictureLayerImpl(tree_impl, id), append_quads_count_(0) {
+  pile_ = pile;
+  SetBounds(layer_bounds);
 }
 
 FakePictureLayerImpl::FakePictureLayerImpl(LayerTreeImpl* tree_impl, int id)
diff --git a/cc/test/fake_picture_layer_impl.h b/cc/test/fake_picture_layer_impl.h
index 3d8f93f..97cbe24 100644
--- a/cc/test/fake_picture_layer_impl.h
+++ b/cc/test/fake_picture_layer_impl.h
@@ -17,11 +17,22 @@
     return make_scoped_ptr(new FakePictureLayerImpl(tree_impl, id));
   }
 
+  // Create layer from a pile that covers the entire layer.
   static scoped_ptr<FakePictureLayerImpl> CreateWithPile(
       LayerTreeImpl* tree_impl, int id, scoped_refptr<PicturePileImpl> pile) {
     return make_scoped_ptr(new FakePictureLayerImpl(tree_impl, id, pile));
   }
 
+  // Create layer from a pile that only covers part of the layer.
+  static scoped_ptr<FakePictureLayerImpl> CreateWithPartialPile(
+      LayerTreeImpl* tree_impl,
+      int id,
+      scoped_refptr<PicturePileImpl> pile,
+      const gfx::Size& layer_bounds) {
+    return make_scoped_ptr(
+        new FakePictureLayerImpl(tree_impl, id, pile, layer_bounds));
+  }
+
   virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl)
       OVERRIDE;
   virtual void AppendQuads(QuadSink* quad_sink,
@@ -35,6 +46,7 @@
   using PictureLayerImpl::MarkVisibleResourcesAsRequired;
   using PictureLayerImpl::DoPostCommitInitializationIfNeeded;
   using PictureLayerImpl::MinimumContentsScale;
+  using PictureLayerImpl::SanityCheckTilingState;
 
   bool needs_post_commit_initialization() const {
     return needs_post_commit_initialization_;
@@ -56,6 +68,16 @@
   const Region& invalidation() const { return invalidation_; }
   void set_invalidation(const Region& region) { invalidation_ = region; }
 
+  gfx::Rect visible_rect_for_tile_priority() {
+    return visible_rect_for_tile_priority_;
+  }
+  gfx::Size viewport_size_for_tile_priority() {
+    return viewport_size_for_tile_priority_;
+  }
+  gfx::Transform screen_space_transform_for_tile_priority() {
+    return screen_space_transform_for_tile_priority_;
+  }
+
   void set_fixed_tile_size(const gfx::Size& size) { fixed_tile_size_ = size; }
 
   void CreateDefaultTilingsAndTiles();
@@ -69,6 +91,10 @@
       LayerTreeImpl* tree_impl,
       int id,
       scoped_refptr<PicturePileImpl> pile);
+  FakePictureLayerImpl(LayerTreeImpl* tree_impl,
+                       int id,
+                       scoped_refptr<PicturePileImpl> pile,
+                       const gfx::Size& layer_bounds);
   FakePictureLayerImpl(LayerTreeImpl* tree_impl, int id);
 
  private:
diff --git a/cc/test/fake_picture_pile_impl.cc b/cc/test/fake_picture_pile_impl.cc
index f2af98b..57a5074 100644
--- a/cc/test/fake_picture_pile_impl.cc
+++ b/cc/test/fake_picture_pile_impl.cc
@@ -20,7 +20,7 @@
     const gfx::Size& tile_size,
     const gfx::Size& layer_bounds) {
   scoped_refptr<FakePicturePileImpl> pile(new FakePicturePileImpl());
-  pile->tiling().SetTotalSize(layer_bounds);
+  pile->tiling().SetTilingRect(gfx::Rect(layer_bounds));
   pile->tiling().SetMaxTextureSize(tile_size);
   pile->SetTileGridSize(ImplSidePaintingSettings().default_tile_size);
   pile->recorded_viewport_ = gfx::Rect(layer_bounds);
@@ -36,7 +36,7 @@
     const gfx::Size& tile_size,
     const gfx::Size& layer_bounds) {
   scoped_refptr<FakePicturePileImpl> pile(new FakePicturePileImpl());
-  pile->tiling().SetTotalSize(layer_bounds);
+  pile->tiling().SetTilingRect(gfx::Rect(layer_bounds));
   pile->tiling().SetMaxTextureSize(tile_size);
   pile->SetTileGridSize(ImplSidePaintingSettings().default_tile_size);
   pile->recorded_viewport_ = gfx::Rect();
@@ -49,7 +49,7 @@
     const gfx::Size& tile_size,
     const gfx::Size& layer_bounds) {
   scoped_refptr<FakePicturePileImpl> pile(new FakePicturePileImpl());
-  pile->tiling().SetTotalSize(layer_bounds);
+  pile->tiling().SetTilingRect(gfx::Rect(layer_bounds));
   pile->tiling().SetMaxTextureSize(tile_size);
   pile->SetTileGridSize(ImplSidePaintingSettings().default_tile_size);
   // This simulates a false positive for this flag.
@@ -63,8 +63,8 @@
   scoped_refptr<FakePicturePileImpl> pile(new FakePicturePileImpl());
   gfx::Size size(std::numeric_limits<int>::max(),
                  std::numeric_limits<int>::max());
-  pile->Resize(size);
-  pile->tiling().SetTotalSize(size);
+  pile->SetTilingRect(gfx::Rect(size));
+  pile->tiling().SetTilingRect(gfx::Rect(size));
   pile->tiling().SetMaxTextureSize(size);
   pile->SetTileGridSize(size);
   pile->recorded_viewport_ = gfx::Rect(size);
diff --git a/cc/test/layer_test_common.cc b/cc/test/layer_test_common.cc
index a3ab907..6661644 100644
--- a/cc/test/layer_test_common.cc
+++ b/cc/test/layer_test_common.cc
@@ -50,8 +50,12 @@
 
     gfx::Rect quad_rect = gfx::ToEnclosingRect(quad_rectf);
 
-    EXPECT_TRUE(rect.Contains(quad_rect)) << quad_string << i;
-    EXPECT_TRUE(remaining.Contains(quad_rect)) << quad_string << i;
+    EXPECT_TRUE(rect.Contains(quad_rect)) << quad_string << i
+                                          << " rect: " << rect.ToString()
+                                          << " quad: " << quad_rect.ToString();
+    EXPECT_TRUE(remaining.Contains(quad_rect))
+        << quad_string << i << " remaining: " << remaining.ToString()
+        << " quad: " << quad_rect.ToString();
     remaining.Subtract(quad_rect);
   }
 
diff --git a/cc/test/layer_tree_test.cc b/cc/test/layer_tree_test.cc
index ed8de34..5c85d16 100644
--- a/cc/test/layer_tree_test.cc
+++ b/cc/test/layer_tree_test.cc
@@ -128,8 +128,8 @@
     return result;
   }
 
-  virtual void OnSwapBuffersComplete() OVERRIDE {
-    LayerTreeHostImpl::OnSwapBuffersComplete();
+  virtual void DidSwapBuffersComplete() OVERRIDE {
+    LayerTreeHostImpl::DidSwapBuffersComplete();
     test_hooks_->SwapBuffersCompleteOnThread(this);
   }
 
diff --git a/cc/test/mock_quad_culler.cc b/cc/test/mock_quad_culler.cc
index 781647d..773430f 100644
--- a/cc/test/mock_quad_culler.cc
+++ b/cc/test/mock_quad_culler.cc
@@ -60,14 +60,6 @@
   return result;
 }
 
-bool MockQuadCuller::MaybeAppend(scoped_ptr<DrawQuad> draw_quad) {
-  if (!draw_quad->rect.IsEmpty()) {
-    active_quad_list_->push_back(draw_quad.Pass());
-    return true;
-  }
-  return false;
-}
-
 void MockQuadCuller::Append(scoped_ptr<DrawQuad> draw_quad) {
   DCHECK(!draw_quad->rect.IsEmpty());
   DCHECK(!draw_quad->visible_rect.IsEmpty());
diff --git a/cc/test/mock_quad_culler.h b/cc/test/mock_quad_culler.h
index 541f66b..6e3436a 100644
--- a/cc/test/mock_quad_culler.h
+++ b/cc/test/mock_quad_culler.h
@@ -29,7 +29,6 @@
   virtual gfx::Rect UnoccludedContributingSurfaceContentRect(
       const gfx::Rect& content_rect,
       const gfx::Transform& draw_transform) OVERRIDE;
-  virtual bool MaybeAppend(scoped_ptr<DrawQuad> draw_quad) OVERRIDE;
   virtual void Append(scoped_ptr<DrawQuad> draw_quad) OVERRIDE;
 
   const QuadList& quad_list() const { return *active_quad_list_; }
diff --git a/cc/test/render_pass_test_utils.cc b/cc/test/render_pass_test_utils.cc
index 679ce19..8d0d955 100644
--- a/cc/test/render_pass_test_utils.cc
+++ b/cc/test/render_pass_test_utils.cc
@@ -44,7 +44,7 @@
   scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create();
   quad->SetNew(shared_state, rect, rect, color, false);
   SolidColorDrawQuad* quad_ptr = quad.get();
-  quad_sink.MaybeAppend(quad.PassAs<DrawQuad>());
+  quad_sink.Append(quad.PassAs<DrawQuad>());
   return quad_ptr;
 }
 
@@ -64,7 +64,7 @@
   scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create();
   quad->SetNew(shared_state, rect, rect, color, false);
   SolidColorDrawQuad* quad_ptr = quad.get();
-  quad_sink.MaybeAppend(quad.PassAs<DrawQuad>());
+  quad_sink.Append(quad.PassAs<DrawQuad>());
   return quad_ptr;
 }
 
@@ -80,7 +80,7 @@
   scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create();
   quad->SetNew(shared_state, rect, rect, color, false);
   SolidColorDrawQuad* quad_ptr = quad.get();
-  quad_sink.MaybeAppend(quad.PassAs<DrawQuad>());
+  quad_sink.Append(quad.PassAs<DrawQuad>());
   return quad_ptr;
 }
 
@@ -109,7 +109,7 @@
                gfx::RectF(),
                FilterOperations(),
                FilterOperations());
-  quad_sink.MaybeAppend(quad.PassAs<DrawQuad>());
+  quad_sink.Append(quad.PassAs<DrawQuad>());
 }
 
 void AddRenderPassQuad(TestRenderPass* to_pass,
@@ -140,7 +140,7 @@
                gfx::RectF(),
                filters,
                FilterOperations());
-  quad_sink.MaybeAppend(quad.PassAs<DrawQuad>());
+  quad_sink.Append(quad.PassAs<DrawQuad>());
 }
 
 }  // namespace cc
diff --git a/cc/test/scheduler_test_common.h b/cc/test/scheduler_test_common.h
index 46e6012..071332d 100644
--- a/cc/test/scheduler_test_common.h
+++ b/cc/test/scheduler_test_common.h
@@ -51,8 +51,6 @@
  public:
   explicit FakeFrameRateController(scoped_refptr<TimeSource> timer)
       : FrameRateController(timer) {}
-
-  int NumFramesPending() const { return num_frames_pending_; }
 };
 
 }  // namespace cc
diff --git a/cc/test/test_web_graphics_context_3d.h b/cc/test/test_web_graphics_context_3d.h
index 39f8767..56ffc85 100644
--- a/cc/test/test_web_graphics_context_3d.h
+++ b/cc/test/test_web_graphics_context_3d.h
@@ -301,6 +301,9 @@
   void set_support_texture_storage(bool support) {
     test_capabilities_.gpu.texture_storage = support;
   }
+  void set_support_sync_query(bool support) {
+    test_capabilities_.gpu.sync_query = support;
+  }
 
   // When this context is lost, all contexts in its share group are also lost.
   void add_share_group_context(TestWebGraphicsContext3D* context3d) {
diff --git a/cc/trees/layer_tree_host_common.cc b/cc/trees/layer_tree_host_common.cc
index 4dc3552..99923d0 100644
--- a/cc/trees/layer_tree_host_common.cc
+++ b/cc/trees/layer_tree_host_common.cc
@@ -478,6 +478,13 @@
 
 static inline bool SubtreeShouldBeSkipped(LayerImpl* layer,
                                           bool layer_is_drawn) {
+  // If the layer transform is not invertible, it should not be drawn.
+  // TODO(ajuma): Correctly process subtrees with singular transform for the
+  // case where we may animate to a non-singular transform and wish to
+  // pre-raster.
+  if (!layer->transform_is_invertible() && !layer->TransformIsAnimating())
+    return true;
+
   // When we need to do a readback/copy of a layer's output, we can not skip
   // it or any of its ancestors.
   if (layer->draw_properties().layer_or_descendant_has_copy_request)
@@ -501,6 +508,10 @@
 }
 
 static inline bool SubtreeShouldBeSkipped(Layer* layer, bool layer_is_drawn) {
+  // If the layer transform is not invertible, it should not be drawn.
+  if (!layer->transform_is_invertible() && !layer->TransformIsAnimating())
+    return true;
+
   // When we need to do a readback/copy of a layer's output, we can not skip
   // it or any of its ancestors.
   if (layer->draw_properties().layer_or_descendant_has_copy_request)
@@ -1165,6 +1176,12 @@
   bool has_delegated_content = layer->HasDelegatedContent();
   int num_descendants_that_draw_content = 0;
 
+  if (!layer->transform_is_invertible()) {
+    // Layers with singular transforms should not be drawn, the whole subtree
+    // can be skipped.
+    return;
+  }
+
   if (has_delegated_content) {
     // Layers with delegated content need to be treated as if they have as
     // many children as the number of layers they own delegated quads for.
@@ -2437,6 +2454,50 @@
   return false;
 }
 
+static bool PointHitsLayer(LayerImpl* layer,
+                           const gfx::PointF& screen_space_point) {
+  gfx::RectF content_rect(layer->content_bounds());
+  if (!PointHitsRect(
+          screen_space_point, layer->screen_space_transform(), content_rect))
+    return false;
+
+  // At this point, we think the point does hit the layer, but we need to walk
+  // up the parents to ensure that the layer was not clipped in such a way
+  // that the hit point actually should not hit the layer.
+  if (PointIsClippedBySurfaceOrClipRect(screen_space_point, layer))
+    return false;
+
+  // Skip the HUD layer.
+  if (layer == layer->layer_tree_impl()->hud_layer())
+    return false;
+
+  return true;
+}
+
+LayerImpl* LayerTreeHostCommon::FindFirstScrollingLayerThatIsHitByPoint(
+    const gfx::PointF& screen_space_point,
+    const LayerImplList& render_surface_layer_list) {
+  typedef LayerIterator<LayerImpl> LayerIteratorType;
+  LayerIteratorType end = LayerIteratorType::End(&render_surface_layer_list);
+  for (LayerIteratorType it =
+           LayerIteratorType::Begin(&render_surface_layer_list);
+       it != end;
+       ++it) {
+    // We don't want to consider render_surfaces for hit testing.
+    if (!it.represents_itself())
+      continue;
+
+    LayerImpl* current_layer = (*it);
+    if (!PointHitsLayer(current_layer, screen_space_point))
+      continue;
+
+    if (current_layer->scrollable())
+      return current_layer;
+  }
+
+  return NULL;
+}
+
 LayerImpl* LayerTreeHostCommon::FindLayerThatIsHitByPoint(
     const gfx::PointF& screen_space_point,
     const LayerImplList& render_surface_layer_list) {
@@ -2453,21 +2514,7 @@
       continue;
 
     LayerImpl* current_layer = (*it);
-
-    gfx::RectF content_rect(current_layer->content_bounds());
-    if (!PointHitsRect(screen_space_point,
-                       current_layer->screen_space_transform(),
-                       content_rect))
-      continue;
-
-    // At this point, we think the point does hit the layer, but we need to walk
-    // up the parents to ensure that the layer was not clipped in such a way
-    // that the hit point actually should not hit the layer.
-    if (PointIsClippedBySurfaceOrClipRect(screen_space_point, current_layer))
-      continue;
-
-    // Skip the HUD layer.
-    if (current_layer == current_layer->layer_tree_impl()->hud_layer())
+    if (!PointHitsLayer(current_layer, screen_space_point))
       continue;
 
     found_layer = current_layer;
@@ -2479,24 +2526,37 @@
   return found_layer;
 }
 
+// This may be generalized in the future, but we know at the very least that
+// hits cannot pass through scrolling nor opaque layers.
+static bool OpaqueToHitTesting(const LayerImpl* layer) {
+  return layer->scrollable() || layer->contents_opaque();
+}
+
 LayerImpl* LayerTreeHostCommon::FindLayerThatIsHitByPointInTouchHandlerRegion(
     const gfx::PointF& screen_space_point,
     const LayerImplList& render_surface_layer_list) {
-  // First find out which layer was hit from the saved list of visible layers
-  // in the most recent frame.
-  LayerImpl* layer_impl = LayerTreeHostCommon::FindLayerThatIsHitByPoint(
-      screen_space_point,
-      render_surface_layer_list);
+  typedef LayerIterator<LayerImpl> LayerIteratorType;
+  LayerIteratorType end = LayerIteratorType::End(&render_surface_layer_list);
+  for (LayerIteratorType it =
+           LayerIteratorType::Begin(&render_surface_layer_list);
+       it != end;
+       ++it) {
+    // We don't want to consider render_surfaces for hit testing.
+    if (!it.represents_itself())
+      continue;
 
-  // Walk up the hierarchy and look for a layer with a touch event handler
-  // region that the given point hits.
-  // This walk may not be necessary anymore: http://crbug.com/310817
-  for (; layer_impl; layer_impl = layer_impl->parent()) {
+    LayerImpl* current_layer = (*it);
+    if (!PointHitsLayer(current_layer, screen_space_point))
+      continue;
+
     if (LayerTreeHostCommon::LayerHasTouchEventHandlersAt(screen_space_point,
-                                                          layer_impl))
+                                                          current_layer))
+      return current_layer;
+
+    if (OpaqueToHitTesting(current_layer))
       break;
   }
-  return layer_impl;
+  return NULL;
 }
 
 bool LayerTreeHostCommon::LayerHasTouchEventHandlersAt(
diff --git a/cc/trees/layer_tree_host_common.h b/cc/trees/layer_tree_host_common.h
index 29a3c66..20b2163 100644
--- a/cc/trees/layer_tree_host_common.h
+++ b/cc/trees/layer_tree_host_common.h
@@ -96,6 +96,11 @@
   static void CalculateDrawProperties(CalcDrawPropsImplInputs* inputs);
 
   // Performs hit testing for a given render_surface_layer_list.
+  static LayerImpl* FindFirstScrollingLayerThatIsHitByPoint(
+      const gfx::PointF& screen_space_point,
+      const LayerImplList& render_surface_layer_list);
+
+  // Performs hit testing for a given render_surface_layer_list.
   static LayerImpl* FindLayerThatIsHitByPoint(
       const gfx::PointF& screen_space_point,
       const LayerImplList& render_surface_layer_list);
diff --git a/cc/trees/layer_tree_host_common_unittest.cc b/cc/trees/layer_tree_host_common_unittest.cc
index 8d48cd6..920279e 100644
--- a/cc/trees/layer_tree_host_common_unittest.cc
+++ b/cc/trees/layer_tree_host_common_unittest.cc
@@ -2942,10 +2942,8 @@
   EXPECT_TRUE(child->visible_content_rect().IsEmpty());
   EXPECT_TRUE(child->drawable_content_rect().IsEmpty());
 
-  // Case 2: a matrix with flattened z, technically uninvertible but still
-  // drawable and visible. In this case, we must assume that the entire layer
-  // bounds are visible since there is no way to inverse-project the surface
-  // bounds to intersect.
+  // Case 2: a matrix with flattened z, uninvertible and not visible according
+  // to the CSS spec.
   uninvertible_matrix.MakeIdentity();
   uninvertible_matrix.matrix().set(2, 2, 0.0);
   ASSERT_FALSE(uninvertible_matrix.IsInvertible());
@@ -2960,12 +2958,10 @@
 
   ExecuteCalculateDrawProperties(root.get());
 
-  EXPECT_RECT_EQ(gfx::Rect(0, 0, 50, 50), child->visible_content_rect());
-  EXPECT_RECT_EQ(gfx::Rect(5, 5, 50, 50), child->drawable_content_rect());
+  EXPECT_TRUE(child->visible_content_rect().IsEmpty());
+  EXPECT_TRUE(child->drawable_content_rect().IsEmpty());
 
-  // Case 3: a matrix with flattened z, technically uninvertible but still
-  // drawable, but not visible. In this case, we don't need to conservatively
-  // assume that the whole layer is visible.
+  // Case 3: a matrix with flattened z, also uninvertible and not visible.
   uninvertible_matrix.MakeIdentity();
   uninvertible_matrix.Translate(500.0, 0.0);
   uninvertible_matrix.matrix().set(2, 2, 0.0);
@@ -2982,7 +2978,7 @@
   ExecuteCalculateDrawProperties(root.get());
 
   EXPECT_TRUE(child->visible_content_rect().IsEmpty());
-  EXPECT_RECT_EQ(gfx::Rect(505, 5, 50, 50), child->drawable_content_rect());
+  EXPECT_TRUE(child->drawable_content_rect().IsEmpty());
 }
 
 TEST_F(LayerTreeHostCommonTest,
@@ -6020,6 +6016,29 @@
   LayerImpl* result_layer =
       LayerTreeHostCommon::FindLayerThatIsHitByPointInTouchHandlerRegion(
           test_point, render_surface_layer_list);
+
+  // We should have passed through the no-touch layer and found the layer
+  // behind it.
+  EXPECT_TRUE(result_layer);
+
+  host_impl.active_tree()->LayerById(1234)->SetContentsOpaque(true);
+  result_layer =
+      LayerTreeHostCommon::FindLayerThatIsHitByPointInTouchHandlerRegion(
+          test_point, render_surface_layer_list);
+
+  // In this case we should abort searching for touch handlers at the opaque
+  // occluder and not find the region behind it.
+  EXPECT_FALSE(result_layer);
+
+  host_impl.active_tree()->LayerById(1234)->SetContentsOpaque(true);
+  host_impl.active_tree()->LayerById(1234)->SetScrollClipLayer(1);
+
+  result_layer =
+      LayerTreeHostCommon::FindLayerThatIsHitByPointInTouchHandlerRegion(
+          test_point, render_surface_layer_list);
+
+  // In this case we should abort searching for touch handlers at the scroller
+  // (which is opaque to hit testing) and not find the region behind it.
   EXPECT_FALSE(result_layer);
 
   test_point = gfx::Point(35, 15);
@@ -9138,6 +9157,70 @@
   EXPECT_TRUE(scroll_child->is_clipped());
 }
 
+TEST_F(LayerTreeHostCommonTest, SingularTransformSubtreesDoNotDraw) {
+  scoped_refptr<LayerWithForcedDrawsContent> root =
+      make_scoped_refptr(new LayerWithForcedDrawsContent);
+  scoped_refptr<LayerWithForcedDrawsContent> parent =
+      make_scoped_refptr(new LayerWithForcedDrawsContent);
+  scoped_refptr<LayerWithForcedDrawsContent> child =
+      make_scoped_refptr(new LayerWithForcedDrawsContent);
+
+  root->AddChild(parent);
+  parent->AddChild(child);
+
+  gfx::Transform identity_transform;
+  SetLayerPropertiesForTesting(root.get(),
+                               identity_transform,
+                               gfx::PointF(),
+                               gfx::PointF(),
+                               gfx::Size(50, 50),
+                               true,
+                               true);
+  root->SetForceRenderSurface(true);
+  SetLayerPropertiesForTesting(parent.get(),
+                               identity_transform,
+                               gfx::PointF(),
+                               gfx::PointF(),
+                               gfx::Size(30, 30),
+                               true,
+                               true);
+  parent->SetForceRenderSurface(true);
+  SetLayerPropertiesForTesting(child.get(),
+                               identity_transform,
+                               gfx::PointF(),
+                               gfx::PointF(),
+                               gfx::Size(20, 20),
+                               true,
+                               true);
+  child->SetForceRenderSurface(true);
+
+  scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create();
+  host->SetRootLayer(root);
+
+  ExecuteCalculateDrawProperties(root.get());
+
+  EXPECT_EQ(3u, render_surface_layer_list()->size());
+
+  gfx::Transform singular_transform;
+  singular_transform.Scale3d(
+      SkDoubleToMScalar(1.0), SkDoubleToMScalar(1.0), SkDoubleToMScalar(0.0));
+
+  child->SetTransform(singular_transform);
+
+  ExecuteCalculateDrawProperties(root.get());
+
+  EXPECT_EQ(2u, render_surface_layer_list()->size());
+
+  // Ensure that the entire subtree under a layer with singular transform does
+  // not get rendered.
+  parent->SetTransform(singular_transform);
+  child->SetTransform(identity_transform);
+
+  ExecuteCalculateDrawProperties(root.get());
+
+  EXPECT_EQ(1u, render_surface_layer_list()->size());
+}
+
 TEST_F(LayerTreeHostCommonTest, ClippedByOutOfOrderScrollParent) {
   // Checks that clipping by a scroll parent that follows you in paint order
   // still results in correct clipping.
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc
index 4a945a2..447bfc0 100644
--- a/cc/trees/layer_tree_host_impl.cc
+++ b/cc/trees/layer_tree_host_impl.cc
@@ -254,7 +254,6 @@
       overhang_ui_resource_id_(0),
       overdraw_bottom_height_(0.f),
       device_viewport_valid_for_tile_management_(true),
-      external_stencil_test_enabled_(false),
       animation_registrar_(AnimationRegistrar::Create()),
       rendering_stats_instrumentation_(rendering_stats_instrumentation),
       micro_benchmark_controller_(this),
@@ -570,12 +569,10 @@
     LayerImpl* layer,
     const OcclusionTracker<LayerImpl>& occlusion_tracker,
     AppendQuadsData* append_quads_data) {
-  bool for_surface = false;
   QuadCuller quad_culler(&target_render_pass->quad_list,
                          &target_render_pass->shared_quad_state_list,
                          layer,
-                         occlusion_tracker,
-                         for_surface);
+                         occlusion_tracker);
   layer->AppendQuads(&quad_culler, append_quads_data);
 }
 
@@ -585,12 +582,10 @@
     const RenderPass* contributing_render_pass,
     const OcclusionTracker<LayerImpl>& occlusion_tracker,
     AppendQuadsData* append_quads_data) {
-  bool for_surface = true;
   QuadCuller quad_culler(&target_render_pass->quad_list,
                          &target_render_pass->shared_quad_state_list,
                          layer,
-                         occlusion_tracker,
-                         for_surface);
+                         occlusion_tracker);
 
   bool is_replica = false;
   layer->render_surface()->AppendQuads(&quad_culler,
@@ -633,12 +628,10 @@
     screen_background_color_region.Intersect(root_scroll_layer_rect);
   }
 
-  bool for_surface = false;
   QuadCuller quad_culler(&target_render_pass->quad_list,
                          &target_render_pass->shared_quad_state_list,
                          root_layer,
-                         occlusion_tracker,
-                         for_surface);
+                         occlusion_tracker);
 
   // Manually create the quad state for the gutter quads, as the root layer
   // doesn't have any bounds and so can't generate this itself.
@@ -670,7 +663,7 @@
                  visible_screen_space_rect,
                  screen_background_color,
                  false);
-    quad_culler.MaybeAppend(quad.PassAs<DrawQuad>());
+    quad_culler.Append(quad.PassAs<DrawQuad>());
   }
   for (Region::Iterator fill_rects(overhang_region);
        fill_rects.has_rect();
@@ -698,7 +691,7 @@
         screen_background_color,
         vertex_opacity,
         false);
-    quad_culler.MaybeAppend(tex_quad.PassAs<DrawQuad>());
+    quad_culler.Append(tex_quad.PassAs<DrawQuad>());
   }
 }
 
@@ -1301,8 +1294,8 @@
   client_->DidSwapBuffersOnImplThread();
 }
 
-void LayerTreeHostImpl::OnSwapBuffersComplete() {
-  client_->OnSwapBuffersCompleteOnImplThread();
+void LayerTreeHostImpl::DidSwapBuffersComplete() {
+  client_->DidSwapBuffersCompleteOnImplThread();
 }
 
 void LayerTreeHostImpl::ReclaimResources(const CompositorFrameAck* ack) {
@@ -1788,19 +1781,18 @@
     renderer_ = SoftwareRenderer::Create(
         this, &settings_, output_surface, resource_provider);
   }
+  DCHECK(renderer_);
 
-  if (renderer_) {
-    renderer_->SetVisible(visible_);
-    SetFullRootLayerDamage();
+  renderer_->SetVisible(visible_);
+  SetFullRootLayerDamage();
 
-    // See note in LayerTreeImpl::UpdateDrawProperties.  Renderer needs to be
-    // initialized to get max texture size.  Also, after releasing resources,
-    // trees need another update to generate new ones.
-    active_tree_->set_needs_update_draw_properties();
-    if (pending_tree_)
-      pending_tree_->set_needs_update_draw_properties();
-    client_->UpdateRendererCapabilitiesOnImplThread();
-  }
+  // See note in LayerTreeImpl::UpdateDrawProperties.  Renderer needs to be
+  // initialized to get max texture size.  Also, after releasing resources,
+  // trees need another update to generate new ones.
+  active_tree_->set_needs_update_draw_properties();
+  if (pending_tree_)
+    pending_tree_->set_needs_update_draw_properties();
+  client_->UpdateRendererCapabilitiesOnImplThread();
 }
 
 void LayerTreeHostImpl::CreateAndSetTileManager(
@@ -1880,8 +1872,6 @@
                                settings_.highp_threshold_min,
                                settings_.use_rgba_4444_textures,
                                settings_.texture_id_allocation_chunk_size);
-  if (!resource_provider)
-    return false;
 
   if (output_surface->capabilities().deferred_gl_initialization)
     EnforceZeroBudget(true);
@@ -1890,9 +1880,6 @@
   CreateAndSetRenderer(
       output_surface.get(), resource_provider.get(), skip_gl_renderer);
 
-  if (!renderer_)
-    return false;
-
   if (settings_.impl_side_painting) {
     CreateAndSetTileManager(
         resource_provider.get(),
@@ -1901,8 +1888,11 @@
         GetRendererCapabilities().allow_rasterize_on_demand);
   }
 
-  // Setup BeginFrameEmulation if it's not supported natively
-  if (!settings_.begin_impl_frame_scheduling_enabled) {
+  if (!settings_.throttle_frame_production) {
+    // Disable VSync
+    output_surface->SetThrottleFrameProduction(false);
+  } else if (!settings_.begin_impl_frame_scheduling_enabled) {
+    // Setup BeginFrameEmulation if it's not supported natively
     const base::TimeDelta display_refresh_interval =
       base::TimeDelta::FromMicroseconds(
           base::Time::kMicrosecondsPerSecond /
@@ -1910,7 +1900,6 @@
 
     output_surface->InitializeBeginFrameEmulation(
         proxy_->ImplThreadTaskRunner(),
-        settings_.throttle_frame_production,
         display_refresh_interval);
   }
 
@@ -1918,7 +1907,7 @@
       output_surface->capabilities().max_frames_pending;
   if (max_frames_pending <= 0)
     max_frames_pending = OutputSurface::DEFAULT_MAX_FRAMES_PENDING;
-  output_surface->SetMaxFramesPending(max_frames_pending);
+  client_->SetMaxSwapsPendingOnImplThread(max_frames_pending);
 
   resource_provider_ = resource_provider.Pass();
   output_surface_ = output_surface.Pass();
@@ -1937,22 +1926,16 @@
   ReleaseTreeResources();
   renderer_.reset();
 
-  bool resource_provider_success = resource_provider_->InitializeGL();
+  resource_provider_->InitializeGL();
 
-  bool success = resource_provider_success;
-  if (success) {
-    bool skip_gl_renderer = false;
-    CreateAndSetRenderer(
-        output_surface_.get(), resource_provider_.get(), skip_gl_renderer);
-    if (!renderer_)
-      success = false;
-  }
+  bool skip_gl_renderer = false;
+  CreateAndSetRenderer(
+      output_surface_.get(), resource_provider_.get(), skip_gl_renderer);
 
-  if (success) {
-    if (offscreen_context_provider.get() &&
-        !offscreen_context_provider->BindToCurrentThread())
-      success = false;
-  }
+  bool success = true;
+  if (offscreen_context_provider.get() &&
+      !offscreen_context_provider->BindToCurrentThread())
+    success = false;
 
   if (success) {
     EnforceZeroBudget(false);
@@ -1966,19 +1949,18 @@
 
     client_->DidLoseOutputSurfaceOnImplThread();
 
-    if (resource_provider_success) {
-      // If this fails the context provider will be dropped from the output
-      // surface and destroyed. But the GLRenderer expects the output surface
-      // to stick around - and hold onto the context3d - as long as it is alive.
-      // TODO(danakj): Remove the need for this code path: crbug.com/276411
-      renderer_.reset();
+    // If this method fails, the context provider will be dropped from the
+    // output surface and destroyed. But the GLRenderer expects the output
+    // surface to stick around - and hold onto the context3d - as long as it is
+    // alive.
+    // TODO(danakj): Remove the need for this code path: crbug.com/276411
+    renderer_.reset();
 
-      // The resource provider can't stay in GL mode or it tries to clean up GL
-      // stuff, but the context provider is going away on the output surface
-      // which contradicts being in GL mode.
-      // TODO(danakj): Remove the need for this code path: crbug.com/276411
-      resource_provider_->InitializeSoftware();
-    }
+    // The resource provider can't stay in GL mode or it tries to clean up GL
+    // stuff, but the context provider is going away on the output surface
+    // which contradicts being in GL mode.
+    // TODO(danakj): Remove the need for this code path: crbug.com/276411
+    resource_provider_->InitializeSoftware();
   }
 
   SetOffscreenContextProvider(offscreen_context_provider);
@@ -2001,7 +1983,6 @@
   bool skip_gl_renderer = true;
   CreateAndSetRenderer(
       output_surface_.get(), resource_provider_.get(), skip_gl_renderer);
-  DCHECK(renderer_);
 
   EnforceZeroBudget(true);
   CreateAndSetTileManager(resource_provider_.get(),
@@ -2140,6 +2121,17 @@
   return potentially_scrolling_layer_impl;
 }
 
+// Similar to LayerImpl::HasAncestor, but takes into account scroll parents.
+static bool HasScrollAncestor(LayerImpl* child, LayerImpl* scroll_ancestor) {
+  DCHECK(scroll_ancestor);
+  for (LayerImpl* ancestor = child; ancestor;
+       ancestor = NextScrollLayer(ancestor)) {
+    if (ancestor->scrollable())
+      return ancestor == scroll_ancestor;
+  }
+  return false;
+}
+
 InputHandler::ScrollStatus LayerTreeHostImpl::ScrollBegin(
     const gfx::Point& viewport_point,
     InputHandler::ScrollInputType type) {
@@ -2159,6 +2151,15 @@
   LayerImpl* layer_impl = LayerTreeHostCommon::FindLayerThatIsHitByPoint(
       device_viewport_point,
       active_tree_->RenderSurfaceLayerList());
+
+  if (layer_impl) {
+    LayerImpl* scroll_layer_impl =
+        LayerTreeHostCommon::FindFirstScrollingLayerThatIsHitByPoint(
+            device_viewport_point, active_tree_->RenderSurfaceLayerList());
+    if (scroll_layer_impl && !HasScrollAncestor(layer_impl, scroll_layer_impl))
+      return ScrollUnknown;
+  }
+
   bool scroll_on_main_thread = false;
   LayerImpl* potentially_scrolling_layer_impl =
       FindScrollLayerForDeviceViewportPoint(device_viewport_point,
diff --git a/cc/trees/layer_tree_host_impl.h b/cc/trees/layer_tree_host_impl.h
index 9b51b6b..a1f4fae 100644
--- a/cc/trees/layer_tree_host_impl.h
+++ b/cc/trees/layer_tree_host_impl.h
@@ -63,8 +63,9 @@
  public:
   virtual void UpdateRendererCapabilitiesOnImplThread() = 0;
   virtual void DidLoseOutputSurfaceOnImplThread() = 0;
+  virtual void SetMaxSwapsPendingOnImplThread(int max) = 0;
   virtual void DidSwapBuffersOnImplThread() = 0;
-  virtual void OnSwapBuffersCompleteOnImplThread() = 0;
+  virtual void DidSwapBuffersCompleteOnImplThread() = 0;
   virtual void BeginFrame(const BeginFrameArgs& args) = 0;
   virtual void OnCanDrawStateChanged(bool can_draw) = 0;
   virtual void NotifyReadyToActivate() = 0;
@@ -233,7 +234,7 @@
       bool valid_for_tile_management) OVERRIDE;
   virtual void DidLoseOutputSurface() OVERRIDE;
   virtual void DidSwapBuffers() OVERRIDE;
-  virtual void OnSwapBuffersComplete() OVERRIDE;
+  virtual void DidSwapBuffersComplete() OVERRIDE;
   virtual void ReclaimResources(const CompositorFrameAck* ack) OVERRIDE;
   virtual void SetMemoryPolicy(const ManagedMemoryPolicy& policy) OVERRIDE;
   virtual void SetTreeActivationCallback(const base::Closure& callback)
@@ -628,14 +629,10 @@
   // - external_viewport_ is used DrawProperties, tile management and
   // glViewport/window projection matrix.
   // - external_clip_ specifies a top-level clip rect
-  // - external_stencil_test_enabled_ tells CC to respect existing stencil bits
-  // (When these are specified, device_viewport_size_ remains used only for
-  // scrollable size.)
   gfx::Transform external_transform_;
   gfx::Rect external_viewport_;
   gfx::Rect external_clip_;
   bool device_viewport_valid_for_tile_management_;
-  bool external_stencil_test_enabled_;
 
   gfx::Rect viewport_damage_rect_;
 
diff --git a/cc/trees/layer_tree_host_impl_unittest.cc b/cc/trees/layer_tree_host_impl_unittest.cc
index 0fff5ff..dfea47b 100644
--- a/cc/trees/layer_tree_host_impl_unittest.cc
+++ b/cc/trees/layer_tree_host_impl_unittest.cc
@@ -97,6 +97,7 @@
     settings.minimum_occlusion_tracking_size = gfx::Size();
     settings.impl_side_painting = true;
     settings.texture_id_allocation_chunk_size = 1;
+    settings.report_overscroll_only_for_scrollable_axes = true;
     return settings;
   }
 
@@ -108,8 +109,9 @@
 
   virtual void UpdateRendererCapabilitiesOnImplThread() OVERRIDE {}
   virtual void DidLoseOutputSurfaceOnImplThread() OVERRIDE {}
+  virtual void SetMaxSwapsPendingOnImplThread(int max) OVERRIDE {}
   virtual void DidSwapBuffersOnImplThread() OVERRIDE {}
-  virtual void OnSwapBuffersCompleteOnImplThread() OVERRIDE {}
+  virtual void DidSwapBuffersCompleteOnImplThread() OVERRIDE {}
   virtual void BeginFrame(const BeginFrameArgs& args) OVERRIDE {}
   virtual void OnCanDrawStateChanged(bool can_draw) OVERRIDE {
     on_can_draw_state_changed_called_ = true;
@@ -1538,7 +1540,7 @@
     scoped_ptr<LayerTilingData> tiler =
         LayerTilingData::Create(gfx::Size(100, 100),
                                 LayerTilingData::HAS_BORDER_TEXELS);
-    tiler->SetBounds(content_bounds());
+    tiler->SetTilingRect(gfx::Rect(content_bounds()));
     SetTilingData(*tiler.get());
   }
 
@@ -1749,7 +1751,7 @@
     scoped_ptr<LayerTilingData> tiling_data =
         LayerTilingData::Create(gfx::Size(10, 10),
                                 LayerTilingData::NO_BORDER_TEXELS);
-    tiling_data->SetBounds(bounds());
+    tiling_data->SetTilingRect(gfx::Rect(bounds()));
     SetTilingData(*tiling_data.get());
     set_skips_draw(skips_draw);
     if (!tile_missing) {
@@ -3171,6 +3173,45 @@
   EXPECT_EQ(gfx::Vector2dF(0, 10), host_impl_->accumulated_root_overscroll());
 }
 
+TEST_F(LayerTreeHostImplTest, NoOverscrollOnFractionalDeviceScale) {
+  gfx::Size surface_size(980, 1439);
+  gfx::Size content_size(980, 1438);
+  float device_scale_factor = 1.5f;
+  scoped_ptr<LayerImpl> root_clip =
+      LayerImpl::Create(host_impl_->active_tree(), 3);
+  scoped_ptr<LayerImpl> root =
+      CreateScrollableLayer(1, content_size, root_clip.get());
+  root->SetIsContainerForFixedPositionLayers(true);
+  scoped_ptr<LayerImpl> child =
+      CreateScrollableLayer(2, content_size, root_clip.get());
+  root->scroll_clip_layer()->SetBounds(gfx::Size(320, 469));
+  host_impl_->active_tree()->SetPageScaleFactorAndLimits(
+      0.326531f, 0.326531f, 5.f);
+  host_impl_->active_tree()->SetPageScaleDelta(1.f);
+  child->SetScrollClipLayer(Layer::INVALID_ID);
+  root->AddChild(child.Pass());
+  root_clip->AddChild(root.Pass());
+
+  host_impl_->SetViewportSize(surface_size);
+  host_impl_->SetDeviceScaleFactor(device_scale_factor);
+  host_impl_->active_tree()->SetRootLayer(root_clip.Pass());
+  host_impl_->active_tree()->SetViewportLayersFromIds(3, 1, Layer::INVALID_ID);
+  host_impl_->active_tree()->DidBecomeActive();
+  DrawFrame();
+  {
+    // Horizontal & Vertical GlowEffect should not be applied when
+    // content size is less then view port size. For Example Horizontal &
+    // vertical GlowEffect should not be applied in about:blank page.
+    EXPECT_EQ(InputHandler::ScrollStarted,
+              host_impl_->ScrollBegin(gfx::Point(0, 0), InputHandler::Wheel));
+    host_impl_->ScrollBy(gfx::Point(), gfx::Vector2dF(0, -1));
+    EXPECT_EQ(gfx::Vector2dF().ToString(),
+              host_impl_->accumulated_root_overscroll().ToString());
+
+    host_impl_->ScrollEnd();
+  }
+}
+
 TEST_F(LayerTreeHostImplTest, NoOverscrollWhenNotAtEdge) {
   gfx::Size surface_size(100, 100);
   gfx::Size content_size(200, 200);
@@ -3264,7 +3305,7 @@
     test_blending_draw_quad->visible_rect = quad_visible_rect_;
     EXPECT_EQ(blend_, test_blending_draw_quad->ShouldDrawWithBlending());
     EXPECT_EQ(has_render_surface_, !!render_surface());
-    quad_sink->MaybeAppend(test_blending_draw_quad.PassAs<DrawQuad>());
+    quad_sink->Append(test_blending_draw_quad.PassAs<DrawQuad>());
   }
 
   void SetExpectation(bool blend, bool has_render_surface) {
@@ -4040,7 +4081,7 @@
     scoped_ptr<SolidColorDrawQuad> my_quad = SolidColorDrawQuad::Create();
     my_quad->SetNew(
         shared_quad_state, quad_rect, visible_quad_rect, gray, false);
-    quad_sink->MaybeAppend(my_quad.PassAs<DrawQuad>());
+    quad_sink->Append(my_quad.PassAs<DrawQuad>());
   }
 
  private:
@@ -5354,7 +5395,7 @@
   CompositorFrameMetadataTest()
       : swap_buffers_complete_(0) {}
 
-  virtual void OnSwapBuffersCompleteOnImplThread() OVERRIDE {
+  virtual void DidSwapBuffersCompleteOnImplThread() OVERRIDE {
     swap_buffers_complete_++;
   }
 
@@ -5372,7 +5413,7 @@
   }
   CompositorFrameAck ack;
   host_impl_->ReclaimResources(&ack);
-  host_impl_->OnSwapBuffersComplete();
+  host_impl_->DidSwapBuffersComplete();
   EXPECT_EQ(swap_buffers_complete_, 1);
 }
 
@@ -5951,6 +5992,79 @@
   }
 }
 
+TEST_F(LayerTreeHostImplTest, ScrollUnknownNotOnAncestorChain) {
+  // If we ray cast a scroller that is not on the first layer's ancestor chain,
+  // we should return ScrollUnknown.
+  gfx::Size content_size(100, 100);
+  SetupScrollAndContentsLayers(content_size);
+
+  int scroll_layer_id = 2;
+  LayerImpl* scroll_layer =
+      host_impl_->active_tree()->LayerById(scroll_layer_id);
+  scroll_layer->SetDrawsContent(true);
+
+  int page_scale_layer_id = 5;
+  LayerImpl* page_scale_layer =
+      host_impl_->active_tree()->LayerById(page_scale_layer_id);
+
+  int occluder_layer_id = 6;
+  scoped_ptr<LayerImpl> occluder_layer =
+      LayerImpl::Create(host_impl_->active_tree(), occluder_layer_id);
+  occluder_layer->SetDrawsContent(true);
+  occluder_layer->SetBounds(content_size);
+  occluder_layer->SetContentBounds(content_size);
+  occluder_layer->SetPosition(gfx::PointF());
+  occluder_layer->SetAnchorPoint(gfx::PointF());
+
+  // The parent of the occluder is *above* the scroller.
+  page_scale_layer->AddChild(occluder_layer.Pass());
+
+  DrawFrame();
+
+  EXPECT_EQ(InputHandler::ScrollUnknown,
+            host_impl_->ScrollBegin(gfx::Point(), InputHandler::Wheel));
+}
+
+TEST_F(LayerTreeHostImplTest, ScrollUnknownScrollAncestorMismatch) {
+  // If we ray cast a scroller this is on the first layer's ancestor chain, but
+  // is not the first scroller we encounter when walking up from the layer, we
+  // should also return ScrollUnknown.
+  gfx::Size content_size(100, 100);
+  SetupScrollAndContentsLayers(content_size);
+
+  int scroll_layer_id = 2;
+  LayerImpl* scroll_layer =
+      host_impl_->active_tree()->LayerById(scroll_layer_id);
+  scroll_layer->SetDrawsContent(true);
+
+  int occluder_layer_id = 6;
+  scoped_ptr<LayerImpl> occluder_layer =
+      LayerImpl::Create(host_impl_->active_tree(), occluder_layer_id);
+  occluder_layer->SetDrawsContent(true);
+  occluder_layer->SetBounds(content_size);
+  occluder_layer->SetContentBounds(content_size);
+  occluder_layer->SetPosition(gfx::PointF());
+  occluder_layer->SetAnchorPoint(gfx::PointF());
+
+  int child_scroll_clip_layer_id = 7;
+  scoped_ptr<LayerImpl> child_scroll_clip =
+      LayerImpl::Create(host_impl_->active_tree(), child_scroll_clip_layer_id);
+
+  int child_scroll_layer_id = 8;
+  scoped_ptr<LayerImpl> child_scroll = CreateScrollableLayer(
+      child_scroll_layer_id, content_size, child_scroll_clip.get());
+
+  child_scroll->SetDrawsContent(false);
+
+  child_scroll->AddChild(occluder_layer.Pass());
+  scroll_layer->AddChild(child_scroll.Pass());
+
+  DrawFrame();
+
+  EXPECT_EQ(InputHandler::ScrollUnknown,
+            host_impl_->ScrollBegin(gfx::Point(), InputHandler::Wheel));
+}
+
 // Make sure LatencyInfo carried by LatencyInfoSwapPromise are passed
 // to CompositorFrameMetadata after SwapBuffers();
 TEST_F(LayerTreeHostImplTest, LatencyInfoPassedToCompositorFrameMetadata) {
diff --git a/cc/trees/layer_tree_host_unittest_delegated.cc b/cc/trees/layer_tree_host_unittest_delegated.cc
index 7cf8e69..ab5e4c2 100644
--- a/cc/trees/layer_tree_host_unittest_delegated.cc
+++ b/cc/trees/layer_tree_host_unittest_delegated.cc
@@ -240,7 +240,6 @@
     for (size_t i = 0; i < resources_to_return.size(); ++i)
       output_surface()->ReturnResource(resources_to_return[i], &ack);
     host_impl->ReclaimResources(&ack);
-    host_impl->OnSwapBuffersComplete();
   }
 };
 
@@ -1648,7 +1647,6 @@
     CompositorFrameAck ack;
     output_surface()->ReturnResource(map.find(999)->second, &ack);
     host_impl->ReclaimResources(&ack);
-    host_impl->OnSwapBuffersComplete();
   }
 
   virtual void UnusedResourcesAreAvailable() OVERRIDE {
diff --git a/cc/trees/quad_culler.cc b/cc/trees/quad_culler.cc
index 68ef157..d828675 100644
--- a/cc/trees/quad_culler.cc
+++ b/cc/trees/quad_culler.cc
@@ -19,14 +19,13 @@
 QuadCuller::QuadCuller(QuadList* quad_list,
                        SharedQuadStateList* shared_quad_state_list,
                        const LayerImpl* layer,
-                       const OcclusionTracker<LayerImpl>& occlusion_tracker,
-                       bool for_surface)
+                       const OcclusionTracker<LayerImpl>& occlusion_tracker)
     : quad_list_(quad_list),
       shared_quad_state_list_(shared_quad_state_list),
       layer_(layer),
       occlusion_tracker_(occlusion_tracker),
-      current_shared_quad_state_(NULL),
-      for_surface_(for_surface) {}
+      current_shared_quad_state_(NULL) {
+}
 
 SharedQuadState* QuadCuller::UseSharedQuadState(
     scoped_ptr<SharedQuadState> shared_quad_state) {
@@ -51,46 +50,6 @@
       layer_, content_rect, draw_transform);
 }
 
-static inline bool AppendQuadInternal(
-    scoped_ptr<DrawQuad> draw_quad,
-    const gfx::Rect& culled_rect,
-    QuadList* quad_list,
-    const OcclusionTracker<LayerImpl>& occlusion_tracker,
-    const LayerImpl* layer) {
-  bool keep_quad = !culled_rect.IsEmpty();
-  if (keep_quad) {
-    draw_quad->visible_rect = culled_rect;
-    quad_list->push_back(draw_quad.Pass());
-  }
-  return keep_quad;
-}
-
-bool QuadCuller::MaybeAppend(scoped_ptr<DrawQuad> draw_quad) {
-  DCHECK(draw_quad->shared_quad_state == current_shared_quad_state_);
-  DCHECK(!shared_quad_state_list_->empty());
-  DCHECK(shared_quad_state_list_->back() == current_shared_quad_state_);
-
-  gfx::Rect culled_rect;
-  if (for_surface_) {
-    RenderSurfaceImpl* surface = layer_->render_surface();
-    const RenderPassDrawQuad* rpdq =
-        RenderPassDrawQuad::MaterialCast(draw_quad.get());
-    gfx::Transform draw_transform = rpdq->is_replica
-                                        ? surface->replica_draw_transform()
-                                        : surface->draw_transform();
-    culled_rect = occlusion_tracker_.UnoccludedContributingSurfaceContentRect(
-        layer_, draw_quad->visible_rect, draw_transform);
-  } else {
-    culled_rect =
-        occlusion_tracker_.UnoccludedContentRect(layer_->render_target(),
-                                                 draw_quad->visible_rect,
-                                                 draw_quad->quadTransform());
-  }
-
-  return AppendQuadInternal(
-      draw_quad.Pass(), culled_rect, quad_list_, occlusion_tracker_, layer_);
-}
-
 void QuadCuller::Append(scoped_ptr<DrawQuad> draw_quad) {
   DCHECK(draw_quad->shared_quad_state == current_shared_quad_state_);
   DCHECK(!shared_quad_state_list_->empty());
diff --git a/cc/trees/quad_culler.h b/cc/trees/quad_culler.h
index de2aa3e..6377b13 100644
--- a/cc/trees/quad_culler.h
+++ b/cc/trees/quad_culler.h
@@ -20,8 +20,7 @@
   QuadCuller(QuadList* quad_list,
              SharedQuadStateList* shared_quad_state_list,
              const LayerImpl* layer,
-             const OcclusionTracker<LayerImpl>& occlusion_tracker,
-             bool for_surface);
+             const OcclusionTracker<LayerImpl>& occlusion_tracker);
   virtual ~QuadCuller() {}
 
   // QuadSink implementation.
@@ -33,7 +32,6 @@
   virtual gfx::Rect UnoccludedContributingSurfaceContentRect(
       const gfx::Rect& content_rect,
       const gfx::Transform& draw_transform) OVERRIDE;
-  virtual bool MaybeAppend(scoped_ptr<DrawQuad> draw_quad) OVERRIDE;
   virtual void Append(scoped_ptr<DrawQuad> draw_quad) OVERRIDE;
 
  private:
@@ -43,7 +41,6 @@
   const OcclusionTracker<LayerImpl>& occlusion_tracker_;
 
   SharedQuadState* current_shared_quad_state_;
-  bool for_surface_;
 
   DISALLOW_COPY_AND_ASSIGN(QuadCuller);
 };
diff --git a/cc/trees/quad_culler_unittest.cc b/cc/trees/quad_culler_unittest.cc
deleted file mode 100644
index a3cc443..0000000
--- a/cc/trees/quad_culler_unittest.cc
+++ /dev/null
@@ -1,785 +0,0 @@
-// Copyright 2012 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 "cc/trees/quad_culler.h"
-
-#include <vector>
-
-#include "cc/base/math_util.h"
-#include "cc/layers/append_quads_data.h"
-#include "cc/layers/render_surface_impl.h"
-#include "cc/layers/tiled_layer_impl.h"
-#include "cc/quads/render_pass_draw_quad.h"
-#include "cc/quads/solid_color_draw_quad.h"
-#include "cc/quads/tile_draw_quad.h"
-#include "cc/resources/layer_tiling_data.h"
-#include "cc/test/fake_impl_proxy.h"
-#include "cc/test/fake_layer_tree_host_impl.h"
-#include "cc/test/test_occlusion_tracker.h"
-#include "cc/test/test_shared_bitmap_manager.h"
-#include "cc/trees/occlusion_tracker.h"
-#include "cc/trees/single_thread_proxy.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "ui/gfx/transform.h"
-
-namespace cc {
-namespace {
-
-typedef LayerIterator<LayerImpl> LayerIteratorType;
-
-class QuadCullerTest : public testing::Test {
- public:
-  QuadCullerTest()
-      : host_impl_(&proxy_, &shared_bitmap_manager_), layer_id_(1) {}
-
-  scoped_ptr<TiledLayerImpl> MakeLayer(TiledLayerImpl* parent,
-                                       const gfx::Transform& draw_transform,
-                                       const gfx::Rect& layer_rect,
-                                       float opacity,
-                                       bool opaque,
-                                       const gfx::Rect& layer_opaque_rect,
-                                       LayerImplList& surface_layer_list) {
-    scoped_ptr<TiledLayerImpl> layer =
-        TiledLayerImpl::Create(host_impl_.active_tree(), layer_id_++);
-    scoped_ptr<LayerTilingData> tiler = LayerTilingData::Create(
-        gfx::Size(100, 100), LayerTilingData::NO_BORDER_TEXELS);
-    tiler->SetBounds(layer_rect.size());
-    layer->SetTilingData(*tiler);
-    layer->set_skips_draw(false);
-    layer->SetDrawsContent(true);
-    layer->draw_properties().target_space_transform = draw_transform;
-    layer->draw_properties().screen_space_transform = draw_transform;
-    layer->draw_properties().visible_content_rect = layer_rect;
-    layer->draw_properties().opacity = opacity;
-    layer->SetContentsOpaque(opaque);
-    layer->SetBounds(layer_rect.size());
-    layer->SetContentBounds(layer_rect.size());
-
-    ResourceProvider::ResourceId resource_id = 1;
-    for (int i = 0; i < tiler->num_tiles_x(); ++i) {
-      for (int j = 0; j < tiler->num_tiles_y(); ++j) {
-        gfx::Rect tile_opaque_rect =
-            opaque
-            ? tiler->tile_bounds(i, j)
-            : gfx::IntersectRects(tiler->tile_bounds(i, j), layer_opaque_rect);
-        layer->PushTileProperties(i, j, resource_id++, tile_opaque_rect, false);
-      }
-    }
-
-    gfx::Rect rect_in_target = MathUtil::MapEnclosingClippedRect(
-        layer->draw_transform(), layer->visible_content_rect());
-    if (!parent) {
-      layer->CreateRenderSurface();
-      layer->render_surface()->SetContentRect(rect_in_target);
-      surface_layer_list.push_back(layer.get());
-      layer->render_surface()->layer_list().push_back(layer.get());
-    } else {
-      layer->draw_properties().render_target = parent->render_target();
-      parent->render_surface()->layer_list().push_back(layer.get());
-      rect_in_target.Union(MathUtil::MapEnclosingClippedRect(
-          parent->draw_transform(), parent->visible_content_rect()));
-      parent->render_surface()->SetContentRect(rect_in_target);
-    }
-    layer->draw_properties().drawable_content_rect = rect_in_target;
-
-    return layer.Pass();
-  }
-
-  void AppendQuads(QuadList* quad_list,
-                   SharedQuadStateList* shared_state_list,
-                   TiledLayerImpl* layer,
-                   LayerIteratorType* it,
-                   OcclusionTracker<LayerImpl>* occlusion_tracker) {
-    occlusion_tracker->EnterLayer(*it);
-    QuadCuller quad_culler(
-        quad_list, shared_state_list, layer, *occlusion_tracker, false);
-    AppendQuadsData data;
-    layer->AppendQuads(&quad_culler, &data);
-    occlusion_tracker->LeaveLayer(*it);
-    ++it;
-  }
-
- protected:
-  FakeImplProxy proxy_;
-  TestSharedBitmapManager shared_bitmap_manager_;
-  FakeLayerTreeHostImpl host_impl_;
-  int layer_id_;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(QuadCullerTest);
-};
-
-#define DECLARE_AND_INITIALIZE_TEST_QUADS()                                    \
-  QuadList quad_list;                                                          \
-  SharedQuadStateList shared_state_list;                                       \
-  LayerImplList render_surface_layer_list;                                     \
-  gfx::Transform child_transform;                                              \
-  gfx::Size root_size = gfx::Size(300, 300);                                   \
-  gfx::Rect root_rect = gfx::Rect(root_size);                                  \
-  gfx::Size child_size = gfx::Size(200, 200);                                  \
-  gfx::Rect child_rect = gfx::Rect(child_size);
-
-TEST_F(QuadCullerTest, NoCulling) {
-  DECLARE_AND_INITIALIZE_TEST_QUADS();
-
-  scoped_ptr<TiledLayerImpl> root_layer = MakeLayer(NULL,
-                                                    gfx::Transform(),
-                                                    root_rect,
-                                                    1.f,
-                                                    true,
-                                                    gfx::Rect(),
-                                                    render_surface_layer_list);
-  scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(),
-                                                     gfx::Transform(),
-                                                     child_rect,
-                                                     1.f,
-                                                     false,
-                                                     gfx::Rect(),
-                                                     render_surface_layer_list);
-  TestOcclusionTracker<LayerImpl> occlusion_tracker(
-      gfx::Rect(-100, -100, 1000, 1000));
-  LayerIteratorType it = LayerIteratorType::Begin(&render_surface_layer_list);
-
-  AppendQuads(&quad_list,
-              &shared_state_list,
-              child_layer.get(),
-              &it,
-              &occlusion_tracker);
-  AppendQuads(&quad_list,
-              &shared_state_list,
-              root_layer.get(),
-              &it,
-              &occlusion_tracker);
-  EXPECT_EQ(13u, quad_list.size());
-}
-
-TEST_F(QuadCullerTest, CullChildLinesUpTopLeft) {
-  DECLARE_AND_INITIALIZE_TEST_QUADS();
-
-  scoped_ptr<TiledLayerImpl> root_layer = MakeLayer(NULL,
-                                                    gfx::Transform(),
-                                                    root_rect,
-                                                    1.f,
-                                                    true,
-                                                    gfx::Rect(),
-                                                    render_surface_layer_list);
-  scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(),
-                                                     gfx::Transform(),
-                                                     child_rect,
-                                                     1.f,
-                                                     true,
-                                                     gfx::Rect(),
-                                                     render_surface_layer_list);
-  TestOcclusionTracker<LayerImpl> occlusion_tracker(
-      gfx::Rect(-100, -100, 1000, 1000));
-  LayerIteratorType it = LayerIteratorType::Begin(&render_surface_layer_list);
-
-  AppendQuads(&quad_list,
-              &shared_state_list,
-              child_layer.get(),
-              &it,
-              &occlusion_tracker);
-  AppendQuads(&quad_list,
-              &shared_state_list,
-              root_layer.get(),
-              &it,
-              &occlusion_tracker);
-  EXPECT_EQ(9u, quad_list.size());
-}
-
-TEST_F(QuadCullerTest, CullWhenChildOpacityNotOne) {
-  DECLARE_AND_INITIALIZE_TEST_QUADS();
-
-  scoped_ptr<TiledLayerImpl> root_layer = MakeLayer(NULL,
-                                                    gfx::Transform(),
-                                                    root_rect,
-                                                    1.f,
-                                                    true,
-                                                    gfx::Rect(),
-                                                    render_surface_layer_list);
-  scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(),
-                                                     child_transform,
-                                                     child_rect,
-                                                     0.9f,
-                                                     true,
-                                                     gfx::Rect(),
-                                                     render_surface_layer_list);
-  TestOcclusionTracker<LayerImpl> occlusion_tracker(
-      gfx::Rect(-100, -100, 1000, 1000));
-  LayerIteratorType it = LayerIteratorType::Begin(&render_surface_layer_list);
-
-  AppendQuads(&quad_list,
-              &shared_state_list,
-              child_layer.get(),
-              &it,
-              &occlusion_tracker);
-  AppendQuads(&quad_list,
-              &shared_state_list,
-              root_layer.get(),
-              &it,
-              &occlusion_tracker);
-  EXPECT_EQ(13u, quad_list.size());
-}
-
-TEST_F(QuadCullerTest, CullWhenChildOpaqueFlagFalse) {
-  DECLARE_AND_INITIALIZE_TEST_QUADS();
-
-  scoped_ptr<TiledLayerImpl> root_layer = MakeLayer(NULL,
-                                                    gfx::Transform(),
-                                                    root_rect,
-                                                    1.f,
-                                                    true,
-                                                    gfx::Rect(),
-                                                    render_surface_layer_list);
-  scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(),
-                                                     child_transform,
-                                                     child_rect,
-                                                     1.f,
-                                                     false,
-                                                     gfx::Rect(),
-                                                     render_surface_layer_list);
-  TestOcclusionTracker<LayerImpl> occlusion_tracker(
-      gfx::Rect(-100, -100, 1000, 1000));
-  LayerIteratorType it = LayerIteratorType::Begin(&render_surface_layer_list);
-
-  AppendQuads(&quad_list,
-              &shared_state_list,
-              child_layer.get(),
-              &it,
-              &occlusion_tracker);
-  AppendQuads(&quad_list,
-              &shared_state_list,
-              root_layer.get(),
-              &it,
-              &occlusion_tracker);
-  EXPECT_EQ(13u, quad_list.size());
-}
-
-TEST_F(QuadCullerTest, CullCenterTileOnly) {
-  DECLARE_AND_INITIALIZE_TEST_QUADS();
-
-  child_transform.Translate(50, 50);
-  scoped_ptr<TiledLayerImpl> root_layer = MakeLayer(NULL,
-                                                    gfx::Transform(),
-                                                    root_rect,
-                                                    1.f,
-                                                    true,
-                                                    gfx::Rect(),
-                                                    render_surface_layer_list);
-  scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(),
-                                                     child_transform,
-                                                     child_rect,
-                                                     1.f,
-                                                     true,
-                                                     gfx::Rect(),
-                                                     render_surface_layer_list);
-  TestOcclusionTracker<LayerImpl> occlusion_tracker(
-      gfx::Rect(-100, -100, 1000, 1000));
-  LayerIteratorType it = LayerIteratorType::Begin(&render_surface_layer_list);
-
-  AppendQuads(&quad_list,
-              &shared_state_list,
-              child_layer.get(),
-              &it,
-              &occlusion_tracker);
-  AppendQuads(&quad_list,
-              &shared_state_list,
-              root_layer.get(),
-              &it,
-              &occlusion_tracker);
-  ASSERT_EQ(quad_list.size(), 12u);
-
-  gfx::Rect quad_visible_rect1 = quad_list[5]->visible_rect;
-  EXPECT_EQ(50, quad_visible_rect1.height());
-
-  gfx::Rect quad_visible_rect3 = quad_list[7]->visible_rect;
-  EXPECT_EQ(50, quad_visible_rect3.width());
-
-  // Next index is 8, not 9, since centre quad culled.
-  gfx::Rect quad_visible_rect4 = quad_list[8]->visible_rect;
-  EXPECT_EQ(50, quad_visible_rect4.width());
-  EXPECT_EQ(250, quad_visible_rect4.x());
-
-  gfx::Rect quad_visible_rect6 = quad_list[10]->visible_rect;
-  EXPECT_EQ(50, quad_visible_rect6.height());
-  EXPECT_EQ(250, quad_visible_rect6.y());
-}
-
-TEST_F(QuadCullerTest, CullCenterTileNonIntegralSize1) {
-  DECLARE_AND_INITIALIZE_TEST_QUADS();
-
-  child_transform.Translate(100, 100);
-
-  // Make the root layer's quad have extent (99.1, 99.1) -> (200.9, 200.9) to
-  // make sure it doesn't get culled due to transform rounding.
-  gfx::Transform root_transform;
-  root_transform.Translate(99.1f, 99.1f);
-  root_transform.Scale(1.018f, 1.018f);
-
-  root_rect = child_rect = gfx::Rect(0, 0, 100, 100);
-
-  scoped_ptr<TiledLayerImpl> root_layer = MakeLayer(NULL,
-                                                    root_transform,
-                                                    root_rect,
-                                                    1.f,
-                                                    true,
-                                                    gfx::Rect(),
-                                                    render_surface_layer_list);
-  scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(),
-                                                     child_transform,
-                                                     child_rect,
-                                                     1.f,
-                                                     true,
-                                                     gfx::Rect(),
-                                                     render_surface_layer_list);
-  TestOcclusionTracker<LayerImpl> occlusion_tracker(
-      gfx::Rect(-100, -100, 1000, 1000));
-  LayerIteratorType it = LayerIteratorType::Begin(&render_surface_layer_list);
-
-  AppendQuads(&quad_list,
-              &shared_state_list,
-              child_layer.get(),
-              &it,
-              &occlusion_tracker);
-  AppendQuads(&quad_list,
-              &shared_state_list,
-              root_layer.get(),
-              &it,
-              &occlusion_tracker);
-  EXPECT_EQ(2u, quad_list.size());
-}
-
-TEST_F(QuadCullerTest, CullCenterTileNonIntegralSize2) {
-  DECLARE_AND_INITIALIZE_TEST_QUADS();
-
-  // Make the child's quad slightly smaller than, and centred over, the root
-  // layer tile.  Verify the child does not cause the quad below to be culled
-  // due to rounding.
-  child_transform.Translate(100.1f, 100.1f);
-  child_transform.Scale(0.982f, 0.982f);
-
-  gfx::Transform root_transform;
-  root_transform.Translate(100, 100);
-
-  root_rect = child_rect = gfx::Rect(0, 0, 100, 100);
-
-  scoped_ptr<TiledLayerImpl> root_layer = MakeLayer(NULL,
-                                                    root_transform,
-                                                    root_rect,
-                                                    1.f,
-                                                    true,
-                                                    gfx::Rect(),
-                                                    render_surface_layer_list);
-  scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(),
-                                                     child_transform,
-                                                     child_rect,
-                                                     1.f,
-                                                     true,
-                                                     gfx::Rect(),
-                                                     render_surface_layer_list);
-  TestOcclusionTracker<LayerImpl> occlusion_tracker(
-      gfx::Rect(-100, -100, 1000, 1000));
-  LayerIteratorType it = LayerIteratorType::Begin(&render_surface_layer_list);
-
-  AppendQuads(&quad_list,
-              &shared_state_list,
-              child_layer.get(),
-              &it,
-              &occlusion_tracker);
-  AppendQuads(&quad_list,
-              &shared_state_list,
-              root_layer.get(),
-              &it,
-              &occlusion_tracker);
-  EXPECT_EQ(2u, quad_list.size());
-}
-
-TEST_F(QuadCullerTest, CullChildLinesUpBottomRight) {
-  DECLARE_AND_INITIALIZE_TEST_QUADS();
-
-  child_transform.Translate(100, 100);
-  scoped_ptr<TiledLayerImpl> root_layer = MakeLayer(NULL,
-                                                    gfx::Transform(),
-                                                    root_rect,
-                                                    1.f,
-                                                    true,
-                                                    gfx::Rect(),
-                                                    render_surface_layer_list);
-  scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(),
-                                                     child_transform,
-                                                     child_rect,
-                                                     1.f,
-                                                     true,
-                                                     gfx::Rect(),
-                                                     render_surface_layer_list);
-  TestOcclusionTracker<LayerImpl> occlusion_tracker(
-      gfx::Rect(-100, -100, 1000, 1000));
-  LayerIteratorType it = LayerIteratorType::Begin(&render_surface_layer_list);
-
-  AppendQuads(&quad_list,
-              &shared_state_list,
-              child_layer.get(),
-              &it,
-              &occlusion_tracker);
-  AppendQuads(&quad_list,
-              &shared_state_list,
-              root_layer.get(),
-              &it,
-              &occlusion_tracker);
-  EXPECT_EQ(9u, quad_list.size());
-}
-
-TEST_F(QuadCullerTest, CullSubRegion) {
-  DECLARE_AND_INITIALIZE_TEST_QUADS();
-
-  child_transform.Translate(50, 50);
-  scoped_ptr<TiledLayerImpl> root_layer = MakeLayer(NULL,
-                                                    gfx::Transform(),
-                                                    root_rect,
-                                                    1.f,
-                                                    true,
-                                                    gfx::Rect(),
-                                                    render_surface_layer_list);
-  gfx::Rect child_opaque_rect(child_rect.x() + child_rect.width() / 4,
-                              child_rect.y() + child_rect.height() / 4,
-                              child_rect.width() / 2,
-                              child_rect.height() / 2);
-  scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(),
-                                                     child_transform,
-                                                     child_rect,
-                                                     1.f,
-                                                     false,
-                                                     child_opaque_rect,
-                                                     render_surface_layer_list);
-  TestOcclusionTracker<LayerImpl> occlusion_tracker(
-      gfx::Rect(-100, -100, 1000, 1000));
-  LayerIteratorType it = LayerIteratorType::Begin(&render_surface_layer_list);
-
-  AppendQuads(&quad_list,
-              &shared_state_list,
-              child_layer.get(),
-              &it,
-              &occlusion_tracker);
-  AppendQuads(&quad_list,
-              &shared_state_list,
-              root_layer.get(),
-              &it,
-              &occlusion_tracker);
-  EXPECT_EQ(12u, quad_list.size());
-}
-
-TEST_F(QuadCullerTest, CullSubRegion2) {
-  DECLARE_AND_INITIALIZE_TEST_QUADS();
-
-  child_transform.Translate(50, 10);
-  scoped_ptr<TiledLayerImpl> root_layer = MakeLayer(NULL,
-                                                    gfx::Transform(),
-                                                    root_rect,
-                                                    1.f,
-                                                    true,
-                                                    gfx::Rect(),
-                                                    render_surface_layer_list);
-  gfx::Rect child_opaque_rect(child_rect.x() + child_rect.width() / 4,
-                              child_rect.y() + child_rect.height() / 4,
-                              child_rect.width() / 2,
-                              child_rect.height() * 3 / 4);
-  scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(),
-                                                     child_transform,
-                                                     child_rect,
-                                                     1.f,
-                                                     false,
-                                                     child_opaque_rect,
-                                                     render_surface_layer_list);
-  TestOcclusionTracker<LayerImpl> occlusion_tracker(
-      gfx::Rect(-100, -100, 1000, 1000));
-  LayerIteratorType it = LayerIteratorType::Begin(&render_surface_layer_list);
-
-  AppendQuads(&quad_list,
-              &shared_state_list,
-              child_layer.get(),
-              &it,
-              &occlusion_tracker);
-  AppendQuads(&quad_list,
-              &shared_state_list,
-              root_layer.get(),
-              &it,
-              &occlusion_tracker);
-  EXPECT_EQ(12u, quad_list.size());
-}
-
-TEST_F(QuadCullerTest, CullSubRegionCheckOvercull) {
-  DECLARE_AND_INITIALIZE_TEST_QUADS();
-
-  child_transform.Translate(50, 49);
-  scoped_ptr<TiledLayerImpl> root_layer = MakeLayer(NULL,
-                                                    gfx::Transform(),
-                                                    root_rect,
-                                                    1.f,
-                                                    true,
-                                                    gfx::Rect(),
-                                                    render_surface_layer_list);
-  gfx::Rect child_opaque_rect(child_rect.x() + child_rect.width() / 4,
-                              child_rect.y() + child_rect.height() / 4,
-                              child_rect.width() / 2,
-                              child_rect.height() / 2);
-  scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(),
-                                                     child_transform,
-                                                     child_rect,
-                                                     1.f,
-                                                     false,
-                                                     child_opaque_rect,
-                                                     render_surface_layer_list);
-  TestOcclusionTracker<LayerImpl> occlusion_tracker(
-      gfx::Rect(-100, -100, 1000, 1000));
-  LayerIteratorType it = LayerIteratorType::Begin(&render_surface_layer_list);
-
-  AppendQuads(&quad_list,
-              &shared_state_list,
-              child_layer.get(),
-              &it,
-              &occlusion_tracker);
-  AppendQuads(&quad_list,
-              &shared_state_list,
-              root_layer.get(),
-              &it,
-              &occlusion_tracker);
-  EXPECT_EQ(13u, quad_list.size());
-}
-
-TEST_F(QuadCullerTest, NonAxisAlignedQuadsDontOcclude) {
-  DECLARE_AND_INITIALIZE_TEST_QUADS();
-
-  // Use a small rotation so as to not disturb the geometry significantly.
-  child_transform.Rotate(1);
-
-  scoped_ptr<TiledLayerImpl> root_layer = MakeLayer(NULL,
-                                                    gfx::Transform(),
-                                                    root_rect,
-                                                    1.f,
-                                                    true,
-                                                    gfx::Rect(),
-                                                    render_surface_layer_list);
-  scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(),
-                                                     child_transform,
-                                                     child_rect,
-                                                     1.f,
-                                                     true,
-                                                     gfx::Rect(),
-                                                     render_surface_layer_list);
-  TestOcclusionTracker<LayerImpl> occlusion_tracker(
-      gfx::Rect(-100, -100, 1000, 1000));
-  LayerIteratorType it = LayerIteratorType::Begin(&render_surface_layer_list);
-
-  AppendQuads(&quad_list,
-              &shared_state_list,
-              child_layer.get(),
-              &it,
-              &occlusion_tracker);
-  AppendQuads(&quad_list,
-              &shared_state_list,
-              root_layer.get(),
-              &it,
-              &occlusion_tracker);
-  EXPECT_EQ(13u, quad_list.size());
-}
-
-// This test requires some explanation: here we are rotating the quads to be
-// culled.  The 2x2 tile child layer remains in the top-left corner, unrotated,
-// but the 3x3 tile parent layer is rotated by 1 degree. Of the four tiles the
-// child would normally occlude, three will move (slightly) out from under the
-// child layer, and one moves further under the child. Only this last tile
-// should be culled.
-TEST_F(QuadCullerTest, NonAxisAlignedQuadsSafelyCulled) {
-  DECLARE_AND_INITIALIZE_TEST_QUADS();
-
-  // Use a small rotation so as to not disturb the geometry significantly.
-  gfx::Transform parent_transform;
-  parent_transform.Rotate(1);
-
-  scoped_ptr<TiledLayerImpl> root_layer = MakeLayer(NULL,
-                                                    parent_transform,
-                                                    root_rect,
-                                                    1.f,
-                                                    true,
-                                                    gfx::Rect(),
-                                                    render_surface_layer_list);
-  scoped_ptr<TiledLayerImpl> child_layer = MakeLayer(root_layer.get(),
-                                                     gfx::Transform(),
-                                                     child_rect,
-                                                     1.f,
-                                                     true,
-                                                     gfx::Rect(),
-                                                     render_surface_layer_list);
-  TestOcclusionTracker<LayerImpl> occlusion_tracker(
-      gfx::Rect(-100, -100, 1000, 1000));
-  LayerIteratorType it = LayerIteratorType::Begin(&render_surface_layer_list);
-
-  AppendQuads(&quad_list,
-              &shared_state_list,
-              child_layer.get(),
-              &it,
-              &occlusion_tracker);
-  AppendQuads(&quad_list,
-              &shared_state_list,
-              root_layer.get(),
-              &it,
-              &occlusion_tracker);
-  EXPECT_EQ(12u, quad_list.size());
-}
-
-TEST_F(QuadCullerTest, PartialCullingNotDestroyed) {
-  DECLARE_AND_INITIALIZE_TEST_QUADS();
-
-  scoped_ptr<TiledLayerImpl> dummy_layer = MakeLayer(NULL,
-                                                     gfx::Transform(),
-                                                     gfx::Rect(),
-                                                     1.f,
-                                                     true,
-                                                     gfx::Rect(),
-                                                     render_surface_layer_list);
-
-  TestOcclusionTracker<LayerImpl> occlusion_tracker(gfx::Rect(1000, 1000));
-  LayerIteratorType it = LayerIteratorType::Begin(&render_surface_layer_list);
-
-  QuadCuller culler(&quad_list,
-                    &shared_state_list,
-                    dummy_layer.get(),
-                    occlusion_tracker,
-                    false);
-
-  SharedQuadState* sqs = culler.UseSharedQuadState(SharedQuadState::Create());
-
-  scoped_ptr<SolidColorDrawQuad> color_quad = SolidColorDrawQuad::Create();
-  color_quad->SetNew(
-      sqs, gfx::Rect(100, 100), gfx::Rect(100, 100), SK_ColorRED, false);
-
-  scoped_ptr<RenderPassDrawQuad> pass_quad = RenderPassDrawQuad::Create();
-  pass_quad->SetNew(sqs,
-                    gfx::Rect(100, 100),
-                    gfx::Rect(100, 100),
-                    RenderPass::Id(10, 10),
-                    false,
-                    0,
-                    gfx::Rect(),
-                    gfx::RectF(),
-                    FilterOperations(),
-                    FilterOperations());
-
-  scoped_ptr<RenderPassDrawQuad> replica_quad = RenderPassDrawQuad::Create();
-  replica_quad->SetNew(sqs,
-                       gfx::Rect(100, 100),
-                       gfx::Rect(100, 100),
-                       RenderPass::Id(10, 10),
-                       true,
-                       0,
-                       gfx::Rect(),
-                       gfx::RectF(),
-                       FilterOperations(),
-                       FilterOperations());
-
-  // Set a visible rect on the quads.
-  color_quad->visible_rect = gfx::Rect(20, 30, 10, 11);
-  pass_quad->visible_rect = gfx::Rect(50, 60, 13, 14);
-  replica_quad->visible_rect = gfx::Rect(30, 40, 15, 16);
-
-  // Nothing is occluding.
-  occlusion_tracker.EnterLayer(it);
-
-  EXPECT_EQ(0u, quad_list.size());
-
-  culler.MaybeAppend(color_quad.PassAs<DrawQuad>());
-  culler.MaybeAppend(pass_quad.PassAs<DrawQuad>());
-  culler.MaybeAppend(replica_quad.PassAs<DrawQuad>());
-
-  ASSERT_EQ(3u, quad_list.size());
-
-  // The partial culling is preserved.
-  EXPECT_EQ(gfx::Rect(20, 30, 10, 11).ToString(),
-            quad_list[0]->visible_rect.ToString());
-  EXPECT_EQ(gfx::Rect(50, 60, 13, 14).ToString(),
-            quad_list[1]->visible_rect.ToString());
-  EXPECT_EQ(gfx::Rect(30, 40, 15, 16).ToString(),
-            quad_list[2]->visible_rect.ToString());
-}
-
-TEST_F(QuadCullerTest, PartialCullingWithOcclusionNotDestroyed) {
-  DECLARE_AND_INITIALIZE_TEST_QUADS();
-
-  scoped_ptr<TiledLayerImpl> dummy_layer = MakeLayer(NULL,
-                                                     gfx::Transform(),
-                                                     gfx::Rect(),
-                                                     1.f,
-                                                     true,
-                                                     gfx::Rect(),
-                                                     render_surface_layer_list);
-
-  TestOcclusionTracker<LayerImpl> occlusion_tracker(gfx::Rect(1000, 1000));
-  LayerIteratorType it = LayerIteratorType::Begin(&render_surface_layer_list);
-
-  QuadCuller culler(&quad_list,
-                    &shared_state_list,
-                    dummy_layer.get(),
-                    occlusion_tracker,
-                    false);
-
-  SharedQuadState* sqs = culler.UseSharedQuadState(SharedQuadState::Create());
-
-  scoped_ptr<SolidColorDrawQuad> color_quad = SolidColorDrawQuad::Create();
-  color_quad->SetNew(
-      sqs, gfx::Rect(100, 100), gfx::Rect(100, 100), SK_ColorRED, false);
-
-  scoped_ptr<RenderPassDrawQuad> pass_quad = RenderPassDrawQuad::Create();
-  pass_quad->SetNew(sqs,
-                    gfx::Rect(100, 100),
-                    gfx::Rect(100, 100),
-                    RenderPass::Id(10, 10),
-                    false,
-                    0,
-                    gfx::Rect(),
-                    gfx::RectF(),
-                    FilterOperations(),
-                    FilterOperations());
-
-  scoped_ptr<RenderPassDrawQuad> replica_quad = RenderPassDrawQuad::Create();
-  replica_quad->SetNew(sqs,
-                       gfx::Rect(100, 100),
-                       gfx::Rect(100, 100),
-                       RenderPass::Id(10, 10),
-                       true,
-                       0,
-                       gfx::Rect(),
-                       gfx::RectF(),
-                       FilterOperations(),
-                       FilterOperations());
-
-  // Set a visible rect on the quads.
-  color_quad->visible_rect = gfx::Rect(10, 10, 10, 11);
-  pass_quad->visible_rect = gfx::Rect(10, 20, 13, 14);
-  replica_quad->visible_rect = gfx::Rect(10, 30, 15, 16);
-
-  // Occlude the left part of the visible rects.
-  occlusion_tracker.EnterLayer(it);
-  occlusion_tracker.set_occlusion_from_outside_target(gfx::Rect(0, 0, 15, 100));
-
-  EXPECT_EQ(0u, quad_list.size());
-
-  culler.MaybeAppend(color_quad.PassAs<DrawQuad>());
-  culler.MaybeAppend(pass_quad.PassAs<DrawQuad>());
-  culler.MaybeAppend(replica_quad.PassAs<DrawQuad>());
-
-  ASSERT_EQ(3u, quad_list.size());
-
-  // The partial culling is preserved, while the left side of the quads is newly
-  // occluded.
-  EXPECT_EQ(gfx::Rect(15, 10, 5, 11).ToString(),
-            quad_list[0]->visible_rect.ToString());
-  EXPECT_EQ(gfx::Rect(15, 20, 8, 14).ToString(),
-            quad_list[1]->visible_rect.ToString());
-  EXPECT_EQ(gfx::Rect(15, 30, 10, 16).ToString(),
-            quad_list[2]->visible_rect.ToString());
-}
-
-}  // namespace
-}  // namespace cc
diff --git a/cc/trees/single_thread_proxy.cc b/cc/trees/single_thread_proxy.cc
index 5ccef20..72f16dc 100644
--- a/cc/trees/single_thread_proxy.cc
+++ b/cc/trees/single_thread_proxy.cc
@@ -382,8 +382,8 @@
   client_->DidPostSwapBuffers();
 }
 
-void SingleThreadProxy::OnSwapBuffersCompleteOnImplThread() {
-  TRACE_EVENT0("cc", "SingleThreadProxy::OnSwapBuffersCompleteOnImplThread");
+void SingleThreadProxy::DidSwapBuffersCompleteOnImplThread() {
+  TRACE_EVENT0("cc", "SingleThreadProxy::DidSwapBuffersCompleteOnImplThread");
   client_->DidCompleteSwapBuffers();
 }
 
diff --git a/cc/trees/single_thread_proxy.h b/cc/trees/single_thread_proxy.h
index a52a6f5..0f86673 100644
--- a/cc/trees/single_thread_proxy.h
+++ b/cc/trees/single_thread_proxy.h
@@ -55,8 +55,9 @@
   // LayerTreeHostImplClient implementation
   virtual void UpdateRendererCapabilitiesOnImplThread() OVERRIDE;
   virtual void DidLoseOutputSurfaceOnImplThread() OVERRIDE;
+  virtual void SetMaxSwapsPendingOnImplThread(int max) OVERRIDE {}
   virtual void DidSwapBuffersOnImplThread() OVERRIDE;
-  virtual void OnSwapBuffersCompleteOnImplThread() OVERRIDE;
+  virtual void DidSwapBuffersCompleteOnImplThread() OVERRIDE;
   virtual void BeginFrame(const BeginFrameArgs& args) OVERRIDE {}
   virtual void OnCanDrawStateChanged(bool can_draw) OVERRIDE;
   virtual void NotifyReadyToActivate() OVERRIDE;
diff --git a/cc/trees/thread_proxy.cc b/cc/trees/thread_proxy.cc
index e84937b..cac9bc6 100644
--- a/cc/trees/thread_proxy.cc
+++ b/cc/trees/thread_proxy.cc
@@ -433,9 +433,18 @@
   impl().scheduler->DidLoseOutputSurface();
 }
 
-void ThreadProxy::OnSwapBuffersCompleteOnImplThread() {
-  TRACE_EVENT0("cc", "ThreadProxy::OnSwapBuffersCompleteOnImplThread");
+void ThreadProxy::SetMaxSwapsPendingOnImplThread(int max) {
+  impl().scheduler->SetMaxSwapsPending(max);
+}
+
+void ThreadProxy::DidSwapBuffersOnImplThread() {
+  impl().scheduler->DidSwapBuffers();
+}
+
+void ThreadProxy::DidSwapBuffersCompleteOnImplThread() {
+  TRACE_EVENT0("cc", "ThreadProxy::DidSwapBuffersCompleteOnImplThread");
   DCHECK(IsImplThread());
+  impl().scheduler->DidSwapBuffersComplete();
   Proxy::MainThreadTaskRunner()->PostTask(
       FROM_HERE,
       base::Bind(&ThreadProxy::DidCompleteSwapBuffers, main_thread_weak_ptr_));
@@ -1237,10 +1246,10 @@
     impl().readback_request = NULL;
   } else if (draw_frame) {
     DCHECK(swap_requested);
-    result.did_swap = impl().layer_tree_host_impl->SwapBuffers(frame);
+    result.did_request_swap = impl().layer_tree_host_impl->SwapBuffers(frame);
 
     // We don't know if we have incomplete tiles if we didn't actually swap.
-    if (result.did_swap) {
+    if (result.did_request_swap) {
       DCHECK(!frame.has_no_damage);
       SetSwapUsedIncompleteTileOnImplThread(frame.contains_incomplete_tile);
     }
diff --git a/cc/trees/thread_proxy.h b/cc/trees/thread_proxy.h
index b105c93..e2a8f21 100644
--- a/cc/trees/thread_proxy.h
+++ b/cc/trees/thread_proxy.h
@@ -73,8 +73,9 @@
   // LayerTreeHostImplClient implementation
   virtual void UpdateRendererCapabilitiesOnImplThread() OVERRIDE;
   virtual void DidLoseOutputSurfaceOnImplThread() OVERRIDE;
-  virtual void DidSwapBuffersOnImplThread() OVERRIDE {}
-  virtual void OnSwapBuffersCompleteOnImplThread() OVERRIDE;
+  virtual void SetMaxSwapsPendingOnImplThread(int max) OVERRIDE;
+  virtual void DidSwapBuffersOnImplThread() OVERRIDE;
+  virtual void DidSwapBuffersCompleteOnImplThread() OVERRIDE;
   virtual void BeginFrame(const BeginFrameArgs& args) OVERRIDE;
   virtual void OnCanDrawStateChanged(bool can_draw) OVERRIDE;
   virtual void NotifyReadyToActivate() OVERRIDE;
diff --git a/chrome/PRESUBMIT.py b/chrome/PRESUBMIT.py
index d2b0b8d..bf91a9c 100644
--- a/chrome/PRESUBMIT.py
+++ b/chrome/PRESUBMIT.py
@@ -24,8 +24,6 @@
   r'render_messages.h$',
   # Autogenerated window resources files are off limits
   r'.*resource.h$',
-  # GTK macros in C-ish header code cause false positives
-  r'gtk_.*\.h$',
   # Header trickery
   r'.*-inl\.h$',
   # Templates
diff --git a/chrome/VERSION b/chrome/VERSION
index 5cf8868..96afd48 100644
--- a/chrome/VERSION
+++ b/chrome/VERSION
@@ -1,4 +1,4 @@
 MAJOR=36
 MINOR=0
-BUILD=1942
+BUILD=1955
 PATCH=0
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/PKCS11AuthenticationManager.java b/chrome/android/java/src/org/chromium/chrome/browser/PKCS11AuthenticationManager.java
index 8e57a70..43643e8 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/PKCS11AuthenticationManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/PKCS11AuthenticationManager.java
@@ -35,8 +35,7 @@
     public X509Certificate[] getCertificateChain(String alias);
 
     /**
-     * Performs necessary initializing for using a PKCS11-based KeysStore. Note that this can
-     * perform expensive operations and cannot be done on the UI thread.
+     * Performs necessary initializing for using a PKCS11-based KeysStore.
      */
     public void initialize(Context context);
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/Tab.java b/chrome/android/java/src/org/chromium/chrome/browser/Tab.java
index 84078a6..7ba426f 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/Tab.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/Tab.java
@@ -511,7 +511,7 @@
     }
 
     /**
-     * Reloads the current page content if it is a {@link ContentView}.
+     * Reloads the current page content.
      */
     public void reload() {
         // TODO(dtrainor): Should we try to rebuild the ContentView if it's frozen?
@@ -519,7 +519,7 @@
     }
 
     /**
-     * Reloads the current page content if it is a {@link ContentView}.
+     * Reloads the current page content.
      * This version ignores the cache and reloads from the network.
      */
     public void reloadIgnoringCache() {
@@ -860,7 +860,7 @@
      */
     @CalledByNative
     public String getUrl() {
-        return mContentView != null ? mContentView.getUrl() : "";
+        return mContentViewCore != null ? mContentViewCore.getUrl() : "";
     }
 
     /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/TabObserver.java b/chrome/android/java/src/org/chromium/chrome/browser/TabObserver.java
index b154c30..9f116c4 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/TabObserver.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/TabObserver.java
@@ -6,7 +6,7 @@
 
 import android.view.ContextMenu;
 
-import org.chromium.content.browser.ContentView;
+import org.chromium.content.browser.ContentViewCore;
 
 /**
  * An observer that is notified of changes to a {@link Tab} object.
@@ -66,7 +66,7 @@
     void onWebContentsSwapped(Tab tab, boolean didStartLoad, boolean didFinishLoad);
 
     /**
-     * Called when a context menu is shown for a {@link ContentView} owned by a {@link Tab}.
+     * Called when a context menu is shown for a {@link ContentViewCore} owned by a {@link Tab}.
      * @param tab  The notifying {@link Tab}.
      * @param menu The {@link ContextMenu} that is being shown.
      */
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/TtsPlatformImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/TtsPlatformImpl.java
index e6242b7..916533b 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/TtsPlatformImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/TtsPlatformImpl.java
@@ -34,11 +34,37 @@
         private final String mLanguage;
     }
 
+    private static class PendingUtterance {
+        private PendingUtterance(TtsPlatformImpl impl, int utteranceId, String text,
+                String lang, float rate, float pitch, float volume) {
+            mImpl = impl;
+            mUtteranceId = utteranceId;
+            mText = text;
+            mLang = lang;
+            mRate = rate;
+            mPitch = pitch;
+            mVolume = volume;
+        }
+
+        private void speak() {
+            mImpl.speak(mUtteranceId, mText, mLang, mRate, mPitch, mVolume);
+        }
+
+        TtsPlatformImpl mImpl;
+        int mUtteranceId;
+        String mText;
+        String mLang;
+        float mRate;
+        float mPitch;
+        float mVolume;
+    }
+
     private long mNativeTtsPlatformImplAndroid;
     private final TextToSpeech mTextToSpeech;
     private boolean mInitialized;
     private ArrayList<TtsVoice> mVoices;
     private String mCurrentLanguage;
+    private PendingUtterance mPendingUtterance;
 
     private TtsPlatformImpl(long nativeTtsPlatformImplAndroid, Context context) {
         mInitialized = false;
@@ -172,7 +198,13 @@
     @CalledByNative
     private boolean speak(int utteranceId, String text, String lang,
                           float rate, float pitch, float volume) {
-        assert mInitialized == true;
+        if (!mInitialized) {
+            mPendingUtterance = new PendingUtterance(this, utteranceId, text, lang, rate,
+                    pitch, volume);
+            return true;
+        }
+        if (mPendingUtterance != null) mPendingUtterance = null;
+
         if (!lang.equals(mCurrentLanguage)) {
             mTextToSpeech.setLanguage(new Locale(lang));
             mCurrentLanguage = lang;
@@ -194,8 +226,8 @@
      */
     @CalledByNative
     private void stop() {
-        assert mInitialized == true;
-        mTextToSpeech.stop();
+        if (mInitialized) mTextToSpeech.stop();
+        if (mPendingUtterance != null) mPendingUtterance = null;
     }
 
     /**
@@ -230,6 +262,8 @@
 
         mInitialized = true;
         nativeVoicesChanged(mNativeTtsPlatformImplAndroid);
+
+        if (mPendingUtterance != null) mPendingUtterance.speak();
     }
 
     private native void nativeVoicesChanged(long nativeTtsPlatformImplAndroid);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenu.java b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenu.java
index 254795b..090beba 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenu.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenu.java
@@ -33,7 +33,6 @@
  */
 public class AppMenu implements OnItemClickListener {
     private static final float LAST_ITEM_SHOW_FRACTION = 0.5f;
-    private static final int DIVIDER_HEIGHT_DP = 1;
 
     private final Menu mMenu;
     private final int mItemRowHeight;
@@ -50,10 +49,12 @@
      * Creates and sets up the App Menu.
      * @param menu Original menu created by the framework.
      * @param itemRowHeight Desired height for each app menu row.
+     * @param itemDividerHeight Desired height for the divider between app menu items.
      * @param handler AppMenuHandler receives callbacks from AppMenu.
      * @param res Resources object used to get dimensions and style attributes.
      */
-    AppMenu(Menu menu, int itemRowHeight, AppMenuHandler handler, Resources res) {
+    AppMenu(Menu menu, int itemRowHeight, int itemDividerHeight, AppMenuHandler handler,
+            Resources res) {
         mMenu = menu;
 
         mItemRowHeight = itemRowHeight;
@@ -61,8 +62,8 @@
 
         mHandler = handler;
 
-        final float dpToPx = res.getDisplayMetrics().density;
-        mItemDividerHeight = Math.round(DIVIDER_HEIGHT_DP * dpToPx);
+        mItemDividerHeight = itemDividerHeight;
+        assert mItemDividerHeight > 0;
 
         mAdditionalVerticalOffset = res.getDimensionPixelSize(R.dimen.menu_vertical_offset);
         mVerticalFadeDistance = res.getDimensionPixelSize(R.dimen.menu_vertical_fade_distance);
@@ -118,7 +119,6 @@
         setPopupOffset(mPopup, mCurrentScreenRotation, visibleDisplayFrame);
         mPopup.setOnItemClickListener(this);
         mPopup.show();
-        mPopup.getListView().setDividerHeight(mItemDividerHeight);
         mPopup.getListView().setItemsCanFocus(true);
 
         mHandler.onMenuVisibilityChanged(true);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuHandler.java
index 8db23b7..0091e45 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuHandler.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuHandler.java
@@ -7,6 +7,7 @@
 import android.app.Activity;
 import android.content.res.TypedArray;
 import android.graphics.Rect;
+import android.graphics.drawable.Drawable;
 import android.view.ContextThemeWrapper;
 import android.view.Menu;
 import android.view.MenuItem;
@@ -74,11 +75,14 @@
         mDelegate.prepareMenu(mMenu);
 
         if (mAppMenu == null) {
-            TypedArray a = mActivity.obtainStyledAttributes(
-                    new int[] {android.R.attr.listPreferredItemHeightSmall});
+            TypedArray a = mActivity.obtainStyledAttributes(new int[]
+                    {android.R.attr.listPreferredItemHeightSmall, android.R.attr.listDivider});
             int itemRowHeight = a.getDimensionPixelSize(0, 0);
+            Drawable itemDivider = a.getDrawable(1);
+            int itemDividerHeight = itemDivider.getIntrinsicHeight();
             a.recycle();
-            mAppMenu = new AppMenu(mMenu, itemRowHeight, this, mActivity.getResources());
+            mAppMenu = new AppMenu(mMenu, itemRowHeight, itemDividerHeight, this,
+                    mActivity.getResources());
             mAppMenuDragHelper = new AppMenuDragHelper(mActivity, mAppMenu, itemRowHeight);
         }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/banners/AppBannerManager.java b/chrome/android/java/src/org/chromium/chrome/browser/banners/AppBannerManager.java
index bf49ed9..59a4a95 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/banners/AppBannerManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/banners/AppBannerManager.java
@@ -224,7 +224,8 @@
      * @return          True if the user is still on the same page.
      */
     private boolean isBannerForCurrentPage(String bannerUrl) {
-        return mContentView != null && TextUtils.equals(mContentView.getUrl(), bannerUrl);
+        return mContentView != null &&
+               TextUtils.equals(mContentView.getContentViewCore().getUrl(), bannerUrl);
     }
 
     private static native boolean nativeIsEnabled();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/banners/SwipableOverlayView.java b/chrome/android/java/src/org/chromium/chrome/browser/banners/SwipableOverlayView.java
index 9ecd0ed..90486f4 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/banners/SwipableOverlayView.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/banners/SwipableOverlayView.java
@@ -309,7 +309,7 @@
             @Override
             public void onFlingStartGesture(int vx, int vy, int scrollOffsetY, int scrollExtentY) {
                 if (!cancelCurrentAnimation()) return;
-                if (mGestureState == GESTURE_NONE) beginGesture(scrollOffsetY, scrollExtentY);
+                beginGesture(scrollOffsetY, scrollExtentY);
                 mGestureState = GESTURE_FLINGING;
             }
 
@@ -345,7 +345,7 @@
             @Override
             public void onScrollStarted(int scrollOffsetY, int scrollExtentY) {
                 if (!cancelCurrentAnimation()) return;
-                if (mGestureState == GESTURE_NONE) beginGesture(scrollOffsetY, scrollExtentY);
+                beginGesture(scrollOffsetY, scrollExtentY);
                 mGestureState = GESTURE_SCROLLING;
             }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuItemDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuItemDelegate.java
index 391a842..267c7c5 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuItemDelegate.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuItemDelegate.java
@@ -5,6 +5,7 @@
 package org.chromium.chrome.browser.contextmenu;
 
 import org.chromium.chrome.browser.Tab;
+import org.chromium.content.browser.ContentViewCore;
 import org.chromium.content_public.Referrer;
 
 /**
@@ -12,7 +13,8 @@
  */
 public interface ChromeContextMenuItemDelegate {
     /**
-     * @return Whether or not this context menu is being shown for an incognito {@link ContentView}.
+     * @return Whether or not this context menu is being shown for an incognito
+     *     {@link ContentViewCore}.
      */
     boolean isIncognito();
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ContextMenuHelper.java b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ContextMenuHelper.java
index d1bd2e2..4749c88 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ContextMenuHelper.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ContextMenuHelper.java
@@ -16,11 +16,10 @@
 import com.google.common.annotations.VisibleForTesting;
 
 import org.chromium.base.CalledByNative;
-import org.chromium.content.browser.ContentView;
 import org.chromium.content.browser.ContentViewCore;
 
 /**
- * A helper class that handles generating context menus for {@link ContentView}s.
+ * A helper class that handles generating context menus for {@link ContentViewCore}s.
  */
 public class ContextMenuHelper implements OnCreateContextMenuListener, OnMenuItemClickListener {
     private long mNativeContextMenuHelper;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/DomDistillerFeedbackReporter.java b/chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/DomDistillerFeedbackReporter.java
index 1b2e451..3577b5a 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/DomDistillerFeedbackReporter.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/DomDistillerFeedbackReporter.java
@@ -84,7 +84,8 @@
         nativeReportQuality(good);
         if (!good) {
             Activity activity = mTab.getWindowAndroid().getActivity().get();
-            String url = DomDistillerUrlUtils.getOriginalUrlFromDistillerUrl(mContentView.getUrl());
+            String url = DomDistillerUrlUtils.getOriginalUrlFromDistillerUrl(
+                   mContentView.getContentViewCore().getUrl());
             sExternalFeedbackReporter.reportFeedback(activity, url, good);
         }
     }
diff --git a/chrome/android/java/strings/android_chrome_strings.grd b/chrome/android/java/strings/android_chrome_strings.grd
index b2bec0d..e357aae 100644
--- a/chrome/android/java/strings/android_chrome_strings.grd
+++ b/chrome/android/java/strings/android_chrome_strings.grd
@@ -286,10 +286,10 @@
       </message>
 
       <!-- App banner strings -->
-      <message name="IDS_APP_BANNER_INSTALLING" desc="Button text indicating that an application is being installed.">
+      <message name="IDS_APP_BANNER_INSTALLING" desc="Button text indicating that an application is being installed. [CHAR-LIMIT=15]">
         Installing...
       </message>
-      <message name="IDS_APP_BANNER_OPEN" desc="Text that indicates that clicking on the button will launch an application.">
+      <message name="IDS_APP_BANNER_OPEN" desc="Text that indicates that clicking on the button will launch an application. [CHAR-LIMIT=15]">
         Open
       </message>
 
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_am.xtb b/chrome/android/java/strings/translations/android_chrome_strings_am.xtb
index 899e0eb..34ff7a4 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_am.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_am.xtb
@@ -6,6 +6,7 @@
 <translation id="5578795271662203820">ይህንን ምስል <ph name="SEARCH_ENGINE"/> ላይ ይፈልጉት</translation>
 <translation id="6831043979455480757">መተርጎም</translation>
 <translation id="7644305409888602715">ገጹን ወደ <ph name="SOURCE_LANGUAGE"/> በመተርጎም ላይ...</translation>
+<translation id="7015922086425404465">መተግበሪያ ከGoogle Play ሱቅ ያግኙ፦ <ph name="APP_ACTION"/></translation>
 <translation id="1491151370853475546">ይህን ገጽ ዳግም ይጫኑ</translation>
 <translation id="641643625718530986">አትም…</translation>
 <translation id="7658239707568436148">ይቅር</translation>
@@ -37,6 +38,7 @@
 <translation id="907015151729920253">ስማርት ካርድ</translation>
 <translation id="3063601790762993062">ቪዲዮ አስቀምጥ</translation>
 <translation id="6042308850641462728">ተጨማሪ</translation>
+<translation id="7267430310003164111">መተግበሪያ ከGoogle Play ሱቅ እንዲያገኙ የሚጠይቅ። የመተግበሪያ ስም፦ <ph name="APP_NAME"/>።  መተግበሪያ የተሰጠው አማካኝ ደረጃ፦ <ph name="APP_RATING"/>።</translation>
 <translation id="4148957013307229264">በመጫን ላይ...</translation>
 <translation id="3992315671621218278">አገናኝ አስቀምጥ</translation>
 <translation id="8034522405403831421">ይህ ገጽ በ<ph name="SOURCE_LANGUAGE"/> ነው። ወደ <ph name="TARGET_LANGUAGE"/> ይተርጎም?</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ar.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ar.xtb
index 6e74b13..d767984 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ar.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ar.xtb
@@ -6,6 +6,7 @@
 <translation id="5578795271662203820">البحث في <ph name="SEARCH_ENGINE"/> عن هذه الصورة</translation>
 <translation id="6831043979455480757">الترجمة</translation>
 <translation id="7644305409888602715">جارٍ ترجمة الصفحة إلى <ph name="SOURCE_LANGUAGE"/>...</translation>
+<translation id="7015922086425404465">‏الحصول على التطبيق من متجر Google Play: <ph name="APP_ACTION"/></translation>
 <translation id="1491151370853475546">إعادة تحميل هذه الصفحة</translation>
 <translation id="641643625718530986">طباعة…</translation>
 <translation id="7658239707568436148">إلغاء</translation>
@@ -35,6 +36,7 @@
 <translation id="907015151729920253">البطاقة الذكية</translation>
 <translation id="3063601790762993062">حفظ الفيديو</translation>
 <translation id="6042308850641462728">المزيد</translation>
+<translation id="7267430310003164111">‏طلب الحصول على تطبيق من متجر Google Play.  اسم التطبيق: <ph name="APP_NAME"/>.  معدل التطبيق المتوسط: <ph name="APP_RATING"/>.</translation>
 <translation id="4148957013307229264">جارٍ التثبيت...</translation>
 <translation id="3992315671621218278">حفظ الرابط</translation>
 <translation id="8034522405403831421">هذه الصفحة باللغة <ph name="SOURCE_LANGUAGE"/>. هل تريد ترجمتها إلى اللغة <ph name="TARGET_LANGUAGE"/>؟</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_bg.xtb b/chrome/android/java/strings/translations/android_chrome_strings_bg.xtb
index 225b98a..328ed09 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_bg.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_bg.xtb
@@ -6,6 +6,7 @@
 <translation id="5578795271662203820">Търсене на изображението със: <ph name="SEARCH_ENGINE"/></translation>
 <translation id="6831043979455480757">Превод</translation>
 <translation id="7644305409888602715">Страницата се превежда на <ph name="SOURCE_LANGUAGE"/>...</translation>
+<translation id="7015922086425404465">Изтеглете приложението от Google Play Магазин: <ph name="APP_ACTION"/></translation>
 <translation id="1491151370853475546">Презареждане на тази страница</translation>
 <translation id="641643625718530986">Печат…</translation>
 <translation id="7658239707568436148">Отказ</translation>
@@ -37,6 +38,7 @@
 <translation id="907015151729920253">Смарткарта</translation>
 <translation id="3063601790762993062">Запазване на видеоклипа</translation>
 <translation id="6042308850641462728">Още</translation>
+<translation id="7267430310003164111">Подкана за изтегляне на приложението от Google Play Магазин.  Име на приложението: <ph name="APP_NAME"/>.  Средна оценка на приложението: <ph name="APP_RATING"/>.</translation>
 <translation id="4148957013307229264">Инсталира се...</translation>
 <translation id="3992315671621218278">Запазване на връзката</translation>
 <translation id="8034522405403831421">Тази страница е на <ph name="SOURCE_LANGUAGE"/>. Да се преведе ли на <ph name="TARGET_LANGUAGE"/>?</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ca.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ca.xtb
index 749684c..5dde652 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ca.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ca.xtb
@@ -6,6 +6,7 @@
 <translation id="5578795271662203820">Cerca aquesta imatge a <ph name="SEARCH_ENGINE"/></translation>
 <translation id="6831043979455480757">Tradueix</translation>
 <translation id="7644305409888602715">La pàgina s'està traduint a <ph name="SOURCE_LANGUAGE"/>...</translation>
+<translation id="7015922086425404465">Baixeu aplicacions de Google Play Store: <ph name="APP_ACTION"/>.</translation>
 <translation id="1491151370853475546">Torna a carregar aquesta pàgina</translation>
 <translation id="641643625718530986">Imprimeix…</translation>
 <translation id="7658239707568436148">Cancel·la</translation>
@@ -37,6 +38,7 @@
 <translation id="907015151729920253">Targeta intel·ligent</translation>
 <translation id="3063601790762993062">Desa el vídeo</translation>
 <translation id="6042308850641462728">Més</translation>
+<translation id="7267430310003164111">Sol·licitud per baixar l'aplicació de Google Play Store. Nom de l'aplicació: <ph name="APP_NAME"/>. Puntuació mitjana de l'aplicació: <ph name="APP_RATING"/></translation>
 <translation id="4148957013307229264">S'està instal·lant...</translation>
 <translation id="3992315671621218278">Desa l'enllaç</translation>
 <translation id="8034522405403831421">Aquesta pàgina està escrita en <ph name="SOURCE_LANGUAGE"/>. Voleu traduir-la a <ph name="TARGET_LANGUAGE"/>?</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_cs.xtb b/chrome/android/java/strings/translations/android_chrome_strings_cs.xtb
index f8cf102..f35921d 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_cs.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_cs.xtb
@@ -6,6 +6,7 @@
 <translation id="5578795271662203820">Hledat obrázek pomocí <ph name="SEARCH_ENGINE"/></translation>
 <translation id="6831043979455480757">Přeložit</translation>
 <translation id="7644305409888602715">Překlad stránky do jazyka: <ph name="SOURCE_LANGUAGE"/>...</translation>
+<translation id="7015922086425404465">Nainstalovat aplikaci z Obchodu Google Play: <ph name="APP_ACTION"/></translation>
 <translation id="1491151370853475546">Načíst tuto stránku znovu</translation>
 <translation id="641643625718530986">Tisk…</translation>
 <translation id="7658239707568436148">Zrušit</translation>
@@ -37,6 +38,7 @@
 <translation id="907015151729920253">Čipová karta</translation>
 <translation id="3063601790762993062">Uložit video</translation>
 <translation id="6042308850641462728">Více</translation>
+<translation id="7267430310003164111">Výzva k instalaci aplikace z Obchodu Google Play. Název aplikace: <ph name="APP_NAME"/>. Průměrné hodnocení aplikace: <ph name="APP_RATING"/>.</translation>
 <translation id="4148957013307229264">Instalace...</translation>
 <translation id="3992315671621218278">Uložit odkaz</translation>
 <translation id="8034522405403831421">Stránka je v jazyce <ph name="SOURCE_LANGUAGE"/>. Chcete ji přeložit do jazyka <ph name="TARGET_LANGUAGE"/>?</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_da.xtb b/chrome/android/java/strings/translations/android_chrome_strings_da.xtb
index 667f8bc..37071c0 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_da.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_da.xtb
@@ -6,6 +6,7 @@
 <translation id="5578795271662203820">Søg efter billedet på <ph name="SEARCH_ENGINE"/></translation>
 <translation id="6831043979455480757">Oversæt</translation>
 <translation id="7644305409888602715">Oversætter siden til <ph name="SOURCE_LANGUAGE"/>...</translation>
+<translation id="7015922086425404465">Hent appen i Google Play Butik: <ph name="APP_ACTION"/></translation>
 <translation id="1491151370853475546">Genindlæs denne side</translation>
 <translation id="641643625718530986">Udskriv…</translation>
 <translation id="7658239707568436148">Annuller</translation>
@@ -37,6 +38,7 @@
 <translation id="907015151729920253">Smart card</translation>
 <translation id="3063601790762993062">Gem video</translation>
 <translation id="6042308850641462728">Mere</translation>
+<translation id="7267430310003164111">Meddelelse om at hente appen fra Google Play Butik. Appnavn: <ph name="APP_NAME"/>. Appens gennemsnitlige bedømmelse: <ph name="APP_RATING"/>.</translation>
 <translation id="4148957013307229264">Installerer...</translation>
 <translation id="3992315671621218278">Gem link</translation>
 <translation id="8034522405403831421">Denne side er på <ph name="SOURCE_LANGUAGE"/>. Vil du oversætte den til <ph name="TARGET_LANGUAGE"/>?</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_de.xtb b/chrome/android/java/strings/translations/android_chrome_strings_de.xtb
index ba0a946..47e422b 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_de.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_de.xtb
@@ -6,6 +6,7 @@
 <translation id="5578795271662203820">In <ph name="SEARCH_ENGINE"/> nach dem Bild suchen</translation>
 <translation id="6831043979455480757">Übersetzen</translation>
 <translation id="7644305409888602715">Seite wird in folgende Sprache übersetzt: <ph name="SOURCE_LANGUAGE"/>...</translation>
+<translation id="7015922086425404465">App aus dem Google Play Store herunterladen: <ph name="APP_ACTION"/></translation>
 <translation id="1491151370853475546">Diese Seite aktualisieren</translation>
 <translation id="641643625718530986">Drucken...</translation>
 <translation id="7658239707568436148">Abbrechen</translation>
@@ -37,6 +38,7 @@
 <translation id="907015151729920253">Smartcard</translation>
 <translation id="3063601790762993062">Video speichern</translation>
 <translation id="6042308850641462728">Mehr</translation>
+<translation id="7267430310003164111">Aufforderung zum Herunterladen der App aus dem Google Play Store. Name der App: <ph name="APP_NAME"/>. Durchschnittliche Bewertung der App: <ph name="APP_RATING"/>.</translation>
 <translation id="4148957013307229264">Installation wird ausgeführt...</translation>
 <translation id="3992315671621218278">Link speichern</translation>
 <translation id="8034522405403831421">Diese Seite ist auf <ph name="SOURCE_LANGUAGE"/>. In folgende Sprache übersetzen: <ph name="TARGET_LANGUAGE"/>?</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_el.xtb b/chrome/android/java/strings/translations/android_chrome_strings_el.xtb
index eac133e..8da27fb 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_el.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_el.xtb
@@ -6,6 +6,7 @@
 <translation id="5578795271662203820">Αναζήτηση <ph name="SEARCH_ENGINE"/> για την εικόνα</translation>
 <translation id="6831043979455480757">Μετάφραση</translation>
 <translation id="7644305409888602715">Μετάφραση σελίδας στα <ph name="SOURCE_LANGUAGE"/>…</translation>
+<translation id="7015922086425404465">Λήψη εφαρμογής από το Google Play Store: <ph name="APP_ACTION"/></translation>
 <translation id="1491151370853475546">Εκ νέου φόρτωση αυτής της σελίδας</translation>
 <translation id="641643625718530986">Εκτύπωση…</translation>
 <translation id="7658239707568436148">Ακύρωση</translation>
@@ -37,6 +38,7 @@
 <translation id="907015151729920253">Smart card</translation>
 <translation id="3063601790762993062">Αποθήκευση βίντεο</translation>
 <translation id="6042308850641462728">Περισσότερα</translation>
+<translation id="7267430310003164111">Ερώτηση για λήψη εφαρμογής από το Google Play Store.  Όνομα εφαρμογής: <ph name="APP_NAME"/>.  Μέση βαθμολογία εφαρμογής: <ph name="APP_RATING"/>.</translation>
 <translation id="4148957013307229264">Γίνεται εγκατάσταση...</translation>
 <translation id="3992315671621218278">Αποθήκευση συνδέσμου</translation>
 <translation id="8034522405403831421">Αυτή η σελίδα είναι στα <ph name="SOURCE_LANGUAGE"/>. Μετάφρασή της στα <ph name="TARGET_LANGUAGE"/>;</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_en-GB.xtb b/chrome/android/java/strings/translations/android_chrome_strings_en-GB.xtb
index a9b0f7b..2130226 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_en-GB.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_en-GB.xtb
@@ -6,6 +6,7 @@
 <translation id="5578795271662203820">Search <ph name="SEARCH_ENGINE"/> for this image</translation>
 <translation id="6831043979455480757">Translate</translation>
 <translation id="7644305409888602715">Translating page to <ph name="SOURCE_LANGUAGE"/>...</translation>
+<translation id="7015922086425404465">Get app from the Google Play Store: <ph name="APP_ACTION"/></translation>
 <translation id="1491151370853475546">Reload this Page</translation>
 <translation id="641643625718530986">Print…</translation>
 <translation id="7658239707568436148">Cancel</translation>
@@ -37,6 +38,7 @@
 <translation id="907015151729920253">Smart card</translation>
 <translation id="3063601790762993062">Save video</translation>
 <translation id="6042308850641462728">More</translation>
+<translation id="7267430310003164111">Prompt to get app from the Google Play Store.  App name: <ph name="APP_NAME"/>.  App average rating: <ph name="APP_RATING"/>.</translation>
 <translation id="4148957013307229264">Installing...</translation>
 <translation id="3992315671621218278">Save link</translation>
 <translation id="8034522405403831421">This page is in <ph name="SOURCE_LANGUAGE"/>. Translate it to <ph name="TARGET_LANGUAGE"/>?</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_es-419.xtb b/chrome/android/java/strings/translations/android_chrome_strings_es-419.xtb
index e8aae98..9b24427 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_es-419.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_es-419.xtb
@@ -6,6 +6,7 @@
 <translation id="5578795271662203820">Buscar esta imagen en <ph name="SEARCH_ENGINE"/></translation>
 <translation id="6831043979455480757">Traducir</translation>
 <translation id="7644305409888602715">Traduciendo página al <ph name="SOURCE_LANGUAGE"/>…</translation>
+<translation id="7015922086425404465">Descargar aplicación de Google Play Store: <ph name="APP_ACTION"/></translation>
 <translation id="1491151370853475546">Volver a cargar esta página</translation>
 <translation id="641643625718530986">Imprimir…</translation>
 <translation id="7658239707568436148">Cancelar</translation>
@@ -37,6 +38,7 @@
 <translation id="907015151729920253">Tarjeta inteligente</translation>
 <translation id="3063601790762993062">Guardar video</translation>
 <translation id="6042308850641462728">Más</translation>
+<translation id="7267430310003164111">Mensaje para descargar la aplicación desde Google Play Store  Nombre de la aplicación: <ph name="APP_NAME"/>  Clasificación promedio de la aplicación: <ph name="APP_RATING"/></translation>
 <translation id="4148957013307229264">Instalando...</translation>
 <translation id="3992315671621218278">Guardar vínculo</translation>
 <translation id="8034522405403831421">Esta página está en <ph name="SOURCE_LANGUAGE"/>. ¿Quieres traducirla al <ph name="TARGET_LANGUAGE"/>?</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_es.xtb b/chrome/android/java/strings/translations/android_chrome_strings_es.xtb
index 25c539d..5f7707c 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_es.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_es.xtb
@@ -6,6 +6,7 @@
 <translation id="5578795271662203820">Buscar esta imagen en <ph name="SEARCH_ENGINE"/></translation>
 <translation id="6831043979455480757">Traducir</translation>
 <translation id="7644305409888602715">Traduciendo página al <ph name="SOURCE_LANGUAGE"/>...</translation>
+<translation id="7015922086425404465">Descargar aplicación de Google Play Store: <ph name="APP_ACTION"/></translation>
 <translation id="1491151370853475546">Volver a cargar esta página</translation>
 <translation id="641643625718530986">Imprimir…</translation>
 <translation id="7658239707568436148">Cancelar</translation>
@@ -37,6 +38,7 @@
 <translation id="907015151729920253">Tarjeta inteligente</translation>
 <translation id="3063601790762993062">Guardar vídeo</translation>
 <translation id="6042308850641462728">Más</translation>
+<translation id="7267430310003164111">Mensaje para descargar la aplicación de Google Play Store. Nombre de la aplicación: <ph name="APP_NAME"/>. Valoración media de la aplicación: <ph name="APP_RATING"/>.</translation>
 <translation id="4148957013307229264">Instalando...</translation>
 <translation id="3992315671621218278">Guardar enlace</translation>
 <translation id="8034522405403831421">Esta página está escrita en <ph name="SOURCE_LANGUAGE"/>. ¿Quieres traducirla al <ph name="TARGET_LANGUAGE"/>?</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_fa.xtb b/chrome/android/java/strings/translations/android_chrome_strings_fa.xtb
index 36e11bf..0746931 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_fa.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_fa.xtb
@@ -6,6 +6,7 @@
 <translation id="5578795271662203820">جستجوی <ph name="SEARCH_ENGINE"/> برای این تصویر</translation>
 <translation id="6831043979455480757">ترجمه</translation>
 <translation id="7644305409888602715">در حال ترجمه صفحه به <ph name="SOURCE_LANGUAGE"/>…</translation>
+<translation id="7015922086425404465">‏دریافت برنامه از فروشگاه Google Play:‏ <ph name="APP_ACTION"/></translation>
 <translation id="1491151370853475546">بارگیری مجدد این صفحه</translation>
 <translation id="641643625718530986">چاپ...</translation>
 <translation id="7658239707568436148">لغو</translation>
@@ -35,6 +36,7 @@
 <translation id="907015151729920253">کارت هوشمند</translation>
 <translation id="3063601790762993062">ذخیره ویدیو</translation>
 <translation id="6042308850641462728">بیشتر</translation>
+<translation id="7267430310003164111">‏سؤال برای دریافت برنامه از فروشگاه Google Play. نام برنامه: <ph name="APP_NAME"/>. رتبه متوسط برنامه: <ph name="APP_RATING"/>.</translation>
 <translation id="4148957013307229264">در حال نصب...</translation>
 <translation id="3992315671621218278">ذخیره پیوند</translation>
 <translation id="8034522405403831421">این صفحه به زبان <ph name="SOURCE_LANGUAGE"/> است. مایلید آن را به <ph name="TARGET_LANGUAGE"/> ترجمه کنید؟</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_fi.xtb b/chrome/android/java/strings/translations/android_chrome_strings_fi.xtb
index 48c1084..23ebc5b 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_fi.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_fi.xtb
@@ -6,6 +6,7 @@
 <translation id="5578795271662203820">Etsi tätä kuvaa palvelusta <ph name="SEARCH_ENGINE"/></translation>
 <translation id="6831043979455480757">Käännä</translation>
 <translation id="7644305409888602715">Käännetään sivua kielelle <ph name="SOURCE_LANGUAGE"/>…</translation>
+<translation id="7015922086425404465">Hanki sovellus Google Play Kaupasta: <ph name="APP_ACTION"/></translation>
 <translation id="1491151370853475546">Päivitä tämä sivu</translation>
 <translation id="641643625718530986">Tulosta…</translation>
 <translation id="7658239707568436148">Peruuta</translation>
@@ -37,6 +38,7 @@
 <translation id="907015151729920253">Älykortti</translation>
 <translation id="3063601790762993062">Tallenna video</translation>
 <translation id="6042308850641462728">Lisää</translation>
+<translation id="7267430310003164111">Kehote hankkia sovellus Google Play Kaupasta. Sovelluksen nimi: <ph name="APP_NAME"/>. Sovelluksen keskimääräinen arvio: <ph name="APP_RATING"/>.</translation>
 <translation id="4148957013307229264">Asennetaan...</translation>
 <translation id="3992315671621218278">Tallenna linkki</translation>
 <translation id="8034522405403831421">Sivu on kirjoitettu kielellä <ph name="SOURCE_LANGUAGE"/>. Haluatko kääntää sen kielelle <ph name="TARGET_LANGUAGE"/>?</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_fil.xtb b/chrome/android/java/strings/translations/android_chrome_strings_fil.xtb
index 94c9513..94e3aa7 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_fil.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_fil.xtb
@@ -6,6 +6,7 @@
 <translation id="5578795271662203820">Hanapin sa <ph name="SEARCH_ENGINE"/> ang larawan</translation>
 <translation id="6831043979455480757">Isaling-wika</translation>
 <translation id="7644305409888602715">Isinasalin ang pahina sa <ph name="SOURCE_LANGUAGE"/>...</translation>
+<translation id="7015922086425404465">Kunin ang app mula sa Google Play Store: <ph name="APP_ACTION"/></translation>
 <translation id="1491151370853475546">I-reload ang Pahinang Ito</translation>
 <translation id="641643625718530986">I-print…</translation>
 <translation id="7658239707568436148">Kanselahin</translation>
@@ -37,6 +38,7 @@
 <translation id="907015151729920253">Smart card</translation>
 <translation id="3063601790762993062">I-save ang video</translation>
 <translation id="6042308850641462728">Higit pa</translation>
+<translation id="7267430310003164111">I-prompt na kunin ang app mula sa Google Play Store.  Pangalan ng app: <ph name="APP_NAME"/>.  Average na rating ng app: <ph name="APP_RATING"/>.</translation>
 <translation id="4148957013307229264">Ini-install...</translation>
 <translation id="3992315671621218278">I-save ang link</translation>
 <translation id="8034522405403831421">Nasa <ph name="SOURCE_LANGUAGE"/> ang pahinang ito. Isalin ito sa <ph name="TARGET_LANGUAGE"/>?</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_fr.xtb b/chrome/android/java/strings/translations/android_chrome_strings_fr.xtb
index e9cf85a..a33717b 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_fr.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_fr.xtb
@@ -6,6 +6,7 @@
 <translation id="5578795271662203820">Rechercher l'image sur <ph name="SEARCH_ENGINE"/></translation>
 <translation id="6831043979455480757">Traduire</translation>
 <translation id="7644305409888602715">Traduction de la page en <ph name="SOURCE_LANGUAGE"/> en cours…</translation>
+<translation id="7015922086425404465">Obtenir l'application sur le Google Play Store : <ph name="APP_ACTION"/></translation>
 <translation id="1491151370853475546">Actualiser cette page</translation>
 <translation id="641643625718530986">Imprimer…</translation>
 <translation id="7658239707568436148">Annuler</translation>
@@ -37,6 +38,7 @@
 <translation id="907015151729920253">Carte à puce</translation>
 <translation id="3063601790762993062">Enregistrer la vidéo</translation>
 <translation id="6042308850641462728">Plus</translation>
+<translation id="7267430310003164111">Invite pour obtenir l'application sur le Google Play Store. Nom de l'application : <ph name="APP_NAME"/>. Note moyenne de l'application : <ph name="APP_RATING"/>.</translation>
 <translation id="4148957013307229264">Installation...</translation>
 <translation id="3992315671621218278">Enregistrer le lien</translation>
 <translation id="8034522405403831421">Cette page est rédigée en <ph name="SOURCE_LANGUAGE"/>. Voulez-vous la traduire en <ph name="TARGET_LANGUAGE"/> ?</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_hi.xtb b/chrome/android/java/strings/translations/android_chrome_strings_hi.xtb
index feab00a..206d661 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_hi.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_hi.xtb
@@ -6,6 +6,7 @@
 <translation id="5578795271662203820">इस चित्र के लिए <ph name="SEARCH_ENGINE"/> खोजें</translation>
 <translation id="6831043979455480757">अनुवाद</translation>
 <translation id="7644305409888602715">पृष्ठ का अनुवाद <ph name="SOURCE_LANGUAGE"/> में किया जा रहा है...</translation>
+<translation id="7015922086425404465">Google Play स्टोर से ऐप्स प्राप्त करें: <ph name="APP_ACTION"/></translation>
 <translation id="1491151370853475546">यह पृष्ठ पुन: लोड करें</translation>
 <translation id="641643625718530986">प्रिंट करें…</translation>
 <translation id="7658239707568436148">रद्द करें</translation>
@@ -37,6 +38,7 @@
 <translation id="907015151729920253">स्मार्ट कार्ड</translation>
 <translation id="3063601790762993062">वीडियो सहेजें</translation>
 <translation id="6042308850641462728">अधिक</translation>
+<translation id="7267430310003164111">Google Play स्टोर से ऐप्स प्राप्त करने का संकेत.  ऐप्स नाम: <ph name="APP_NAME"/>.  ऐप्स औसत रेटिंग: <ph name="APP_RATING"/>.</translation>
 <translation id="4148957013307229264">इंस्‍टॉल हो रहा है...</translation>
 <translation id="3992315671621218278">लिंक सहेजें</translation>
 <translation id="8034522405403831421">यह पृष्ठ <ph name="SOURCE_LANGUAGE"/> में है. इसका <ph name="TARGET_LANGUAGE"/> में अनुवाद करें?</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_hr.xtb b/chrome/android/java/strings/translations/android_chrome_strings_hr.xtb
index 758ba97..581cd8d 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_hr.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_hr.xtb
@@ -6,6 +6,7 @@
 <translation id="5578795271662203820">Potraži sliku na usluzi <ph name="SEARCH_ENGINE"/></translation>
 <translation id="6831043979455480757">Prevedi</translation>
 <translation id="7644305409888602715">Prevođenje stranice na <ph name="SOURCE_LANGUAGE"/>...</translation>
+<translation id="7015922086425404465">Nabavite aplikaciju iz trgovine Google Play: <ph name="APP_ACTION"/></translation>
 <translation id="1491151370853475546">Ponovo učitaj ovu stranicu</translation>
 <translation id="641643625718530986">Ispis…</translation>
 <translation id="7658239707568436148">Odustani</translation>
@@ -37,6 +38,7 @@
 <translation id="907015151729920253">Pametna kartica</translation>
 <translation id="3063601790762993062">Spremi videozapis</translation>
 <translation id="6042308850641462728">Više</translation>
+<translation id="7267430310003164111">Odzivnik za nabavljanje aplikacije iz Trgovine Google Play. Naziv aplikacije: <ph name="APP_NAME"/>. Prosječna ocjena aplikacije: <ph name="APP_RATING"/>.</translation>
 <translation id="4148957013307229264">Instaliranje...</translation>
 <translation id="3992315671621218278">Spremi vezu</translation>
 <translation id="8034522405403831421">Jezik ove stranice jest <ph name="SOURCE_LANGUAGE"/>. Želite li je prevesti na <ph name="TARGET_LANGUAGE"/>?</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_hu.xtb b/chrome/android/java/strings/translations/android_chrome_strings_hu.xtb
index 8716414..e38e49f 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_hu.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_hu.xtb
@@ -6,6 +6,7 @@
 <translation id="5578795271662203820">A kép keresése a(z) <ph name="SEARCH_ENGINE"/> keresővel</translation>
 <translation id="6831043979455480757">Fordítás</translation>
 <translation id="7644305409888602715">Oldal fordítása <ph name="SOURCE_LANGUAGE"/> nyelvre...</translation>
+<translation id="7015922086425404465">Alkalmazás beszerzése a Google Play Áruházból: <ph name="APP_ACTION"/></translation>
 <translation id="1491151370853475546">Az oldal újratöltése</translation>
 <translation id="641643625718530986">Nyomtatás…</translation>
 <translation id="7658239707568436148">Mégse</translation>
@@ -37,6 +38,7 @@
 <translation id="907015151729920253">Intelligens kártya</translation>
 <translation id="3063601790762993062">Videó mentése</translation>
 <translation id="6042308850641462728">Hosszabban</translation>
+<translation id="7267430310003164111">Felszólítás az alkalmazás beszerzésére a Google Play Áruházból. Alkalmazás neve: <ph name="APP_NAME"/>. Alkalmazás átlagos értékelése: <ph name="APP_RATING"/>.</translation>
 <translation id="4148957013307229264">Telepítés...</translation>
 <translation id="3992315671621218278">Link mentése</translation>
 <translation id="8034522405403831421">Ez az oldal <ph name="SOURCE_LANGUAGE"/> nyelven van. Lefordítja <ph name="TARGET_LANGUAGE"/> nyelvre?</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_id.xtb b/chrome/android/java/strings/translations/android_chrome_strings_id.xtb
index 966bea8..04c6195 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_id.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_id.xtb
@@ -6,6 +6,7 @@
 <translation id="5578795271662203820">Telusuri <ph name="SEARCH_ENGINE"/> untuk gambar ini</translation>
 <translation id="6831043979455480757">Boleh</translation>
 <translation id="7644305409888602715">Menerjemahkan laman ke <ph name="SOURCE_LANGUAGE"/>...</translation>
+<translation id="7015922086425404465">Dapatkan aplikasi dari Google Play Store: <ph name="APP_ACTION"/></translation>
 <translation id="1491151370853475546">Muat Ulang Laman Ini</translation>
 <translation id="641643625718530986">Cetak...</translation>
 <translation id="7658239707568436148">Batal</translation>
@@ -37,6 +38,7 @@
 <translation id="907015151729920253">Kartu cerdas</translation>
 <translation id="3063601790762993062">Simpan video</translation>
 <translation id="6042308850641462728">Lainnya</translation>
+<translation id="7267430310003164111">Permintaan untuk mendapatkan aplikasi dari Google Play Store. Nama aplikasi: <ph name="APP_NAME"/>. Peringkat rata-rata aplikasi: <ph name="APP_RATING"/>.</translation>
 <translation id="4148957013307229264">Memasang...</translation>
 <translation id="3992315671621218278">Simpan tautan</translation>
 <translation id="8034522405403831421">Laman ini berbahasa <ph name="SOURCE_LANGUAGE"/>. Terjemahkan ke <ph name="TARGET_LANGUAGE"/>?</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_it.xtb b/chrome/android/java/strings/translations/android_chrome_strings_it.xtb
index 2012ea6..eb6192b 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_it.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_it.xtb
@@ -6,6 +6,7 @@
 <translation id="5578795271662203820">Cerca questa immagine su <ph name="SEARCH_ENGINE"/></translation>
 <translation id="6831043979455480757">Traduci</translation>
 <translation id="7644305409888602715">Traduzione della pagina in <ph name="SOURCE_LANGUAGE"/> in corso...</translation>
+<translation id="7015922086425404465">Scarica l'app dal Google Play Store: <ph name="APP_ACTION"/></translation>
 <translation id="1491151370853475546">Ricarica questa pagina</translation>
 <translation id="641643625718530986">Stampa…</translation>
 <translation id="7658239707568436148">Annulla</translation>
@@ -37,6 +38,7 @@
 <translation id="907015151729920253">Smart card</translation>
 <translation id="3063601790762993062">Salva video</translation>
 <translation id="6042308850641462728">Più</translation>
+<translation id="7267430310003164111">Viene chiesto di scaricare l'app dal Google Play Store. Nome dell'app: <ph name="APP_NAME"/>. Valutazione media dell'app: <ph name="APP_RATING"/>.</translation>
 <translation id="4148957013307229264">Installazione...</translation>
 <translation id="3992315671621218278">Salva link</translation>
 <translation id="8034522405403831421">Questa pagina è in <ph name="SOURCE_LANGUAGE"/>. Tradurla in <ph name="TARGET_LANGUAGE"/>?</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_iw.xtb b/chrome/android/java/strings/translations/android_chrome_strings_iw.xtb
index 7811b1f..2dd2f1a 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_iw.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_iw.xtb
@@ -6,6 +6,7 @@
 <translation id="5578795271662203820">חפש את התמונה הזו ב-<ph name="SEARCH_ENGINE"/></translation>
 <translation id="6831043979455480757">תרגם</translation>
 <translation id="7644305409888602715">מתרגם את הדף ל<ph name="SOURCE_LANGUAGE"/>...</translation>
+<translation id="7015922086425404465">‏קבל את האפליקציה מחנות Google Play‏: <ph name="APP_ACTION"/></translation>
 <translation id="1491151370853475546">טען מחדש דף זה</translation>
 <translation id="641643625718530986">הדפס…</translation>
 <translation id="7658239707568436148">ביטול</translation>
@@ -37,6 +38,7 @@
 <translation id="907015151729920253">כרטיס חכם</translation>
 <translation id="3063601790762993062">שמור סרטון</translation>
 <translation id="6042308850641462728">עוד</translation>
+<translation id="7267430310003164111">‏הצג בקשה להורדת האפליקציה מחנות Google Play.  שם אפליקציה: <ph name="APP_NAME"/>.  דירוג ממוצע של האפליקציה: <ph name="APP_RATING"/>.</translation>
 <translation id="4148957013307229264">מתקין...</translation>
 <translation id="3992315671621218278">שמור את הקישור</translation>
 <translation id="8034522405403831421">דף זה מוצג ב<ph name="SOURCE_LANGUAGE"/>. האם לתרגם אותו ל<ph name="TARGET_LANGUAGE"/>?</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ja.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ja.xtb
index 1a781d2..0154794 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ja.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ja.xtb
@@ -6,6 +6,7 @@
 <translation id="5578795271662203820">この画像を <ph name="SEARCH_ENGINE"/> で検索</translation>
 <translation id="6831043979455480757">翻訳</translation>
 <translation id="7644305409888602715">ページを<ph name="SOURCE_LANGUAGE"/>に翻訳しています...</translation>
+<translation id="7015922086425404465">Google Play ストアからアプリを<ph name="APP_ACTION"/></translation>
 <translation id="1491151370853475546">このページを再読み込み</translation>
 <translation id="641643625718530986">印刷...</translation>
 <translation id="7658239707568436148">キャンセル</translation>
@@ -37,6 +38,7 @@
 <translation id="907015151729920253">スマート カード</translation>
 <translation id="3063601790762993062">動画を保存</translation>
 <translation id="6042308850641462728">詳細表示</translation>
+<translation id="7267430310003164111">Google Play ストアからのアプリの入手を促すメッセージ。アプリ名: <ph name="APP_NAME"/>。アプリの平均評価: <ph name="APP_RATING"/>。</translation>
 <translation id="4148957013307229264">インストール中...</translation>
 <translation id="3992315671621218278">リンクを保存</translation>
 <translation id="8034522405403831421">このページの言語は<ph name="SOURCE_LANGUAGE"/>です。<ph name="TARGET_LANGUAGE"/>に翻訳しますか？</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ko.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ko.xtb
index 2e9890d..41e5789 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ko.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ko.xtb
@@ -6,6 +6,7 @@
 <translation id="5578795271662203820"><ph name="SEARCH_ENGINE"/>에서 이 이미지 검색</translation>
 <translation id="6831043979455480757">번역</translation>
 <translation id="7644305409888602715">페이지를 <ph name="SOURCE_LANGUAGE"/>로 번역 중...</translation>
+<translation id="7015922086425404465">Google Play 스토어에서 다음 앱 다운로드: <ph name="APP_ACTION"/></translation>
 <translation id="1491151370853475546">페이지 새로고침</translation>
 <translation id="641643625718530986">인쇄…</translation>
 <translation id="7658239707568436148">취소</translation>
@@ -37,6 +38,7 @@
 <translation id="907015151729920253">스마트 카드</translation>
 <translation id="3063601790762993062">동영상 저장</translation>
 <translation id="6042308850641462728">더보기</translation>
+<translation id="7267430310003164111">Google Play 스토어에서 앱을 다운로드할지 묻습니다. 앱 이름: <ph name="APP_NAME"/>, 앱 평점: <ph name="APP_RATING"/></translation>
 <translation id="4148957013307229264">설치 중...</translation>
 <translation id="3992315671621218278">링크 저장</translation>
 <translation id="8034522405403831421">이 페이지는 <ph name="SOURCE_LANGUAGE"/>로 되어 있습니다. <ph name="TARGET_LANGUAGE"/>로 번역하시겠습니까?</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_lt.xtb b/chrome/android/java/strings/translations/android_chrome_strings_lt.xtb
index 69a98ac..81a8efa 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_lt.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_lt.xtb
@@ -6,6 +6,7 @@
 <translation id="5578795271662203820">Ieškoti „<ph name="SEARCH_ENGINE"/>“ šio vaizdo</translation>
 <translation id="6831043979455480757">Vertėjas</translation>
 <translation id="7644305409888602715">Puslapis verčiamas į <ph name="SOURCE_LANGUAGE"/> k...</translation>
+<translation id="7015922086425404465">Gauti programą iš „Google Play“ parduotuvės: <ph name="APP_ACTION"/></translation>
 <translation id="1491151370853475546">Iš naujo įkelti šį puslapį</translation>
 <translation id="641643625718530986">Spausdinti…</translation>
 <translation id="7658239707568436148">Atšaukti</translation>
@@ -37,6 +38,7 @@
 <translation id="907015151729920253">Išmanioji kortelė</translation>
 <translation id="3063601790762993062">Išsaugoti vaizdo įrašą</translation>
 <translation id="6042308850641462728">Daugiau</translation>
+<translation id="7267430310003164111">Raginimas gauti programą iš „Google Play“ parduotuvės. Programos pavadinimas: „<ph name="APP_NAME"/>“. Vidutinis programos įvertinimas: <ph name="APP_RATING"/>.</translation>
 <translation id="4148957013307229264">Diegiama...</translation>
 <translation id="3992315671621218278">Išsaugoti nuorodą</translation>
 <translation id="8034522405403831421">Šis puslapis yra <ph name="SOURCE_LANGUAGE"/> k. Išversti į <ph name="TARGET_LANGUAGE"/> k.?</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_lv.xtb b/chrome/android/java/strings/translations/android_chrome_strings_lv.xtb
index f3e01b8..00a6ca8 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_lv.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_lv.xtb
@@ -6,6 +6,7 @@
 <translation id="5578795271662203820">Meklēt šo attēlu ar <ph name="SEARCH_ENGINE"/></translation>
 <translation id="6831043979455480757">Tulkot</translation>
 <translation id="7644305409888602715">Notiek lapas tulkošana <ph name="SOURCE_LANGUAGE"/> valodā...</translation>
+<translation id="7015922086425404465">Iegūstiet lietotni Google Play veikalā: <ph name="APP_ACTION"/></translation>
 <translation id="1491151370853475546">Atkārtoti ielādēt šo lapu</translation>
 <translation id="641643625718530986">Drukāt...</translation>
 <translation id="7658239707568436148">Atcelt</translation>
@@ -37,6 +38,7 @@
 <translation id="907015151729920253">Viedkarte</translation>
 <translation id="3063601790762993062">Saglabāt videoklipu</translation>
 <translation id="6042308850641462728">Vairāk</translation>
+<translation id="7267430310003164111">Aicinājums iegūt lietotni Google Play veikalā. Lietotnes nosaukums: <ph name="APP_NAME"/>. Lietotnes vidējais vērtējums: <ph name="APP_RATING"/>.</translation>
 <translation id="4148957013307229264">Notiek instalēšana...</translation>
 <translation id="3992315671621218278">Saglabāt saiti</translation>
 <translation id="8034522405403831421">Šī lapas saturs ir šādā valodā: <ph name="SOURCE_LANGUAGE"/>. Vai tulkot šādā valodā: <ph name="TARGET_LANGUAGE"/>?</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_nl.xtb b/chrome/android/java/strings/translations/android_chrome_strings_nl.xtb
index 182857a..ba0ad6d 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_nl.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_nl.xtb
@@ -6,6 +6,7 @@
 <translation id="5578795271662203820">Zoeken op <ph name="SEARCH_ENGINE"/> naar afbeelding</translation>
 <translation id="6831043979455480757">Vertalen</translation>
 <translation id="7644305409888602715">Pagina vertalen naar het <ph name="SOURCE_LANGUAGE"/>...</translation>
+<translation id="7015922086425404465">Download de app uit de Google Play Store: <ph name="APP_ACTION"/></translation>
 <translation id="1491151370853475546">Deze pagina opnieuw laden</translation>
 <translation id="641643625718530986">Afdrukken…</translation>
 <translation id="7658239707568436148">Annuleren</translation>
@@ -37,6 +38,7 @@
 <translation id="907015151729920253">Smartcard</translation>
 <translation id="3063601790762993062">Video opslaan</translation>
 <translation id="6042308850641462728">Meer</translation>
+<translation id="7267430310003164111">Melding om de app te downloaden via de Google Play Store. Appnaam: <ph name="APP_NAME"/>.  gemiddeld waarderingscijfer van app: <ph name="APP_RATING"/>.</translation>
 <translation id="4148957013307229264">Installeren...</translation>
 <translation id="3992315671621218278">Link opslaan</translation>
 <translation id="8034522405403831421">Deze pagina is in het <ph name="SOURCE_LANGUAGE"/>. Vertalen naar het <ph name="TARGET_LANGUAGE"/>?</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_no.xtb b/chrome/android/java/strings/translations/android_chrome_strings_no.xtb
index 8027486..5f06328 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_no.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_no.xtb
@@ -6,6 +6,7 @@
 <translation id="5578795271662203820">Søk etter dette bildet i <ph name="SEARCH_ENGINE"/></translation>
 <translation id="6831043979455480757">Oversett</translation>
 <translation id="7644305409888602715">Oversetter siden til <ph name="SOURCE_LANGUAGE"/> …</translation>
+<translation id="7015922086425404465">Få appen fra Google Play-butikken: <ph name="APP_ACTION"/></translation>
 <translation id="1491151370853475546">Last inn denne siden på nytt</translation>
 <translation id="641643625718530986">Skriv ut</translation>
 <translation id="7658239707568436148">Avbryt</translation>
@@ -37,6 +38,7 @@
 <translation id="907015151729920253">Smartkort</translation>
 <translation id="3063601790762993062">Lagre videoen</translation>
 <translation id="6042308850641462728">Mer</translation>
+<translation id="7267430310003164111">Forespørsel om nedlasting av en app fra Google Play-butikken. Appnavn: <ph name="APP_NAME"/>. Appens gjennomsnittlige vurdering: <ph name="APP_RATING"/>.</translation>
 <translation id="4148957013307229264">Installerer …</translation>
 <translation id="3992315671621218278">Lagre linken</translation>
 <translation id="8034522405403831421">Denne siden er på <ph name="SOURCE_LANGUAGE"/>. Vil du oversette den til <ph name="TARGET_LANGUAGE"/>?</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_pl.xtb b/chrome/android/java/strings/translations/android_chrome_strings_pl.xtb
index ed02550..9837ce2 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_pl.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_pl.xtb
@@ -6,6 +6,7 @@
 <translation id="5578795271662203820">Szukaj tej grafiki w <ph name="SEARCH_ENGINE"/></translation>
 <translation id="6831043979455480757">Tłumacz</translation>
 <translation id="7644305409888602715">Tłumaczę stronę na <ph name="SOURCE_LANGUAGE"/>...</translation>
+<translation id="7015922086425404465">Pobierz aplikację ze Sklepu Google Play: <ph name="APP_ACTION"/></translation>
 <translation id="1491151370853475546">Załaduj tę stronę ponownie</translation>
 <translation id="641643625718530986">Drukuj…</translation>
 <translation id="7658239707568436148">Anuluj</translation>
@@ -37,6 +38,7 @@
 <translation id="907015151729920253">Karta inteligentna</translation>
 <translation id="3063601790762993062">Zapisz film</translation>
 <translation id="6042308850641462728">Więcej</translation>
+<translation id="7267430310003164111">Monit o pobranie aplikacji ze Sklepu Google Play. Nazwa aplikacji: <ph name="APP_NAME"/>. Średnia ocena aplikacji: <ph name="APP_RATING"/>.</translation>
 <translation id="4148957013307229264">Trwa instalowanie...</translation>
 <translation id="3992315671621218278">Zapisz link</translation>
 <translation id="8034522405403831421">Język tej strony to <ph name="SOURCE_LANGUAGE"/>. Przetłumaczyć ją na <ph name="TARGET_LANGUAGE"/>?</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_pt-BR.xtb b/chrome/android/java/strings/translations/android_chrome_strings_pt-BR.xtb
index 0ee8dae..df97207 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_pt-BR.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_pt-BR.xtb
@@ -6,6 +6,7 @@
 <translation id="5578795271662203820">Pesquisar imagem no <ph name="SEARCH_ENGINE"/></translation>
 <translation id="6831043979455480757">Traduzir</translation>
 <translation id="7644305409888602715">Traduzindo página para <ph name="SOURCE_LANGUAGE"/>...</translation>
+<translation id="7015922086425404465">Comprar aplicativo na Google Play Store: <ph name="APP_ACTION"/></translation>
 <translation id="1491151370853475546">Atualizar esta página</translation>
 <translation id="641643625718530986">Imprimir...</translation>
 <translation id="7658239707568436148">Cancelar</translation>
@@ -37,6 +38,7 @@
 <translation id="907015151729920253">Cartão inteligente</translation>
 <translation id="3063601790762993062">Salvar vídeo</translation>
 <translation id="6042308850641462728">Mais</translation>
+<translation id="7267430310003164111">Prompt para comprar o aplicativo na Google Play Store. Nome do aplicativo: <ph name="APP_NAME"/>. Classificação média do aplicativo: <ph name="APP_RATING"/>.</translation>
 <translation id="4148957013307229264">Instalando...</translation>
 <translation id="3992315671621218278">Salvar link</translation>
 <translation id="8034522405403831421">Esta página está escrita em <ph name="SOURCE_LANGUAGE"/>. Traduzi-la para <ph name="TARGET_LANGUAGE"/>?</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_pt-PT.xtb b/chrome/android/java/strings/translations/android_chrome_strings_pt-PT.xtb
index 9c06744..6d798e1 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_pt-PT.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_pt-PT.xtb
@@ -6,6 +6,7 @@
 <translation id="5578795271662203820">Pesquisar a imagem no <ph name="SEARCH_ENGINE"/></translation>
 <translation id="6831043979455480757">Traduzir</translation>
 <translation id="7644305409888602715">A traduzir a página para <ph name="SOURCE_LANGUAGE"/>...</translation>
+<translation id="7015922086425404465">Obter aplicação da Google Play Store: <ph name="APP_ACTION"/></translation>
 <translation id="1491151370853475546">Atualizar esta Página</translation>
 <translation id="641643625718530986">Imprimir…</translation>
 <translation id="7658239707568436148">Cancelar</translation>
@@ -37,6 +38,7 @@
 <translation id="907015151729920253">Smart card</translation>
 <translation id="3063601790762993062">Guardar vídeo</translation>
 <translation id="6042308850641462728">Mais</translation>
+<translation id="7267430310003164111">Solicitação para obter aplicação da Google Play Store. Nome da aplicação: <ph name="APP_NAME"/>. Classificação média da aplicação: <ph name="APP_RATING"/>.</translation>
 <translation id="4148957013307229264">A instalar...</translation>
 <translation id="3992315671621218278">Guardar link</translation>
 <translation id="8034522405403831421">Esta página está em <ph name="SOURCE_LANGUAGE"/>. Pretende traduzi-la para <ph name="TARGET_LANGUAGE"/>?</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ro.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ro.xtb
index adfc840..f5f181b 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ro.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ro.xtb
@@ -6,6 +6,7 @@
 <translation id="5578795271662203820">Căutați imaginea cu <ph name="SEARCH_ENGINE"/></translation>
 <translation id="6831043979455480757">Traduceți</translation>
 <translation id="7644305409888602715">Se traduce pagina în <ph name="SOURCE_LANGUAGE"/>...</translation>
+<translation id="7015922086425404465">Descărcați aplicația din Magazin Google Play: <ph name="APP_ACTION"/></translation>
 <translation id="1491151370853475546">Reîncărcați această pagină</translation>
 <translation id="641643625718530986">Printați...</translation>
 <translation id="7658239707568436148">Anulaţi</translation>
@@ -37,6 +38,7 @@
 <translation id="907015151729920253">Card inteligent</translation>
 <translation id="3063601790762993062">Salvați videoclipul</translation>
 <translation id="6042308850641462728">Mai mult</translation>
+<translation id="7267430310003164111">Notificare pentru a descărca aplicația din Magazin Google Play.  Numele aplicației: <ph name="APP_NAME"/>.  Evaluarea medie a aplicației: <ph name="APP_RATING"/>.</translation>
 <translation id="4148957013307229264">Se instalează...</translation>
 <translation id="3992315671621218278">Salvați linkul</translation>
 <translation id="8034522405403831421">Această pagină este în <ph name="SOURCE_LANGUAGE"/>. Doriți traducere în <ph name="TARGET_LANGUAGE"/>?</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ru.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ru.xtb
index 8b9380f..7b61dbc 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ru.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ru.xtb
@@ -6,6 +6,7 @@
 <translation id="5578795271662203820">Найти это изображение в <ph name="SEARCH_ENGINE"/></translation>
 <translation id="6831043979455480757">Перевести</translation>
 <translation id="7644305409888602715">Выполняется перевод на <ph name="SOURCE_LANGUAGE"/>…</translation>
+<translation id="7015922086425404465">Приобрести приложение в Google Play Маркете: <ph name="APP_ACTION"/>.</translation>
 <translation id="1491151370853475546">Обновить страницу</translation>
 <translation id="641643625718530986">Печать</translation>
 <translation id="7658239707568436148">Отмена</translation>
@@ -37,6 +38,7 @@
 <translation id="907015151729920253">Смарт-карта</translation>
 <translation id="3063601790762993062">Сохранить видео</translation>
 <translation id="6042308850641462728">Подробнее...</translation>
+<translation id="7267430310003164111">Ссылка на приложение в Google Play Маркете. Название приложения: <ph name="APP_NAME"/>.  Средняя оценка: <ph name="APP_RATING"/>.</translation>
 <translation id="4148957013307229264">Установка...</translation>
 <translation id="3992315671621218278">Сохранить ссылку</translation>
 <translation id="8034522405403831421">Язык этой страницы: <ph name="SOURCE_LANGUAGE"/>. Перевести ее на <ph name="TARGET_LANGUAGE"/>?</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_sk.xtb b/chrome/android/java/strings/translations/android_chrome_strings_sk.xtb
index bb06b06..862257f 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_sk.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_sk.xtb
@@ -6,6 +6,7 @@
 <translation id="5578795271662203820">Hľadať obrázok v službe <ph name="SEARCH_ENGINE"/></translation>
 <translation id="6831043979455480757">Preložiť</translation>
 <translation id="7644305409888602715">Prebieha preklad stránky do jazyka <ph name="SOURCE_LANGUAGE"/>...</translation>
+<translation id="7015922086425404465">Získať aplikáciu z Obchodu Google Play: <ph name="APP_ACTION"/></translation>
 <translation id="1491151370853475546">Znova načítať stránku</translation>
 <translation id="641643625718530986">Tlačiť...</translation>
 <translation id="7658239707568436148">Zrušiť</translation>
@@ -37,6 +38,7 @@
 <translation id="907015151729920253">Karta Smart card</translation>
 <translation id="3063601790762993062">Uložiť video</translation>
 <translation id="6042308850641462728">Viac</translation>
+<translation id="7267430310003164111">Výzva na získanie aplikácie z Obchodu Google Play. Názov aplikácie: <ph name="APP_NAME"/>. Priemerné hodnotenie aplikácie: <ph name="APP_RATING"/>.</translation>
 <translation id="4148957013307229264">Inštaluje sa...</translation>
 <translation id="3992315671621218278">Uložiť odkaz</translation>
 <translation id="8034522405403831421">Táto stránka je v jazyku <ph name="SOURCE_LANGUAGE"/>. Chcete ju preložiť do jazyka <ph name="TARGET_LANGUAGE"/>?</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_sl.xtb b/chrome/android/java/strings/translations/android_chrome_strings_sl.xtb
index 87d5da1..e87ff04 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_sl.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_sl.xtb
@@ -6,6 +6,7 @@
 <translation id="5578795271662203820">Uporabi <ph name="SEARCH_ENGINE"/> za to sliko</translation>
 <translation id="6831043979455480757">Prevedi</translation>
 <translation id="7644305409888602715">Prevajanje strani v jezik <ph name="SOURCE_LANGUAGE"/> ...</translation>
+<translation id="7015922086425404465">Prenos aplikacije iz Trgovine Google Play: <ph name="APP_ACTION"/></translation>
 <translation id="1491151370853475546">Znova naloži stran</translation>
 <translation id="641643625718530986">Tiskanje …</translation>
 <translation id="7658239707568436148">Prekliči</translation>
@@ -37,6 +38,7 @@
 <translation id="907015151729920253">Pametna kartica</translation>
 <translation id="3063601790762993062">Shrani videoposnetek</translation>
 <translation id="6042308850641462728">Več</translation>
+<translation id="7267430310003164111">Poziv za prenos aplikacije iz Trgovine Google Play. Ime aplikacije: <ph name="APP_NAME"/>. Povprečna ocena aplikacije: <ph name="APP_RATING"/>.</translation>
 <translation id="4148957013307229264">Nameščanje ...</translation>
 <translation id="3992315671621218278">Shrani povezavo</translation>
 <translation id="8034522405403831421">Ta stran je v jeziku <ph name="SOURCE_LANGUAGE"/>. Jo želite prevesti v jezik <ph name="TARGET_LANGUAGE"/>?</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_sr.xtb b/chrome/android/java/strings/translations/android_chrome_strings_sr.xtb
index e9a2ddd..7596e58 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_sr.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_sr.xtb
@@ -6,6 +6,7 @@
 <translation id="5578795271662203820">Потражи ову слику на <ph name="SEARCH_ENGINE"/>-у</translation>
 <translation id="6831043979455480757">Преведи</translation>
 <translation id="7644305409888602715">Превођење странице на <ph name="SOURCE_LANGUAGE"/>...</translation>
+<translation id="7015922086425404465">Преузмите апликацију из Google Play продавнице: <ph name="APP_ACTION"/></translation>
 <translation id="1491151370853475546">Поново учитај ову страницу</translation>
 <translation id="641643625718530986">Штампај...</translation>
 <translation id="7658239707568436148">Откажи</translation>
@@ -37,6 +38,7 @@
 <translation id="907015151729920253">Паметна картица</translation>
 <translation id="3063601790762993062">Сачувај видео</translation>
 <translation id="6042308850641462728">Више</translation>
+<translation id="7267430310003164111">Упит за преузимање апликације из Google Play продавнице. Назив апликације: <ph name="APP_NAME"/>. Просечна оцена апликације: <ph name="APP_RATING"/>.</translation>
 <translation id="4148957013307229264">Инсталирање...</translation>
 <translation id="3992315671621218278">Сачувај линк</translation>
 <translation id="8034522405403831421">Језик ове странице је <ph name="SOURCE_LANGUAGE"/>. Желите ли да је преведете на <ph name="TARGET_LANGUAGE"/>?</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_sv.xtb b/chrome/android/java/strings/translations/android_chrome_strings_sv.xtb
index 98c5fdb..cc2f982 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_sv.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_sv.xtb
@@ -6,6 +6,7 @@
 <translation id="5578795271662203820">Sök på <ph name="SEARCH_ENGINE"/> efter denna bild</translation>
 <translation id="6831043979455480757">Översätt</translation>
 <translation id="7644305409888602715">Översätter sidan till <ph name="SOURCE_LANGUAGE"/> ...</translation>
+<translation id="7015922086425404465">Hämta appen från Google Play Butik: <ph name="APP_ACTION"/></translation>
 <translation id="1491151370853475546">Hämta sidan igen</translation>
 <translation id="641643625718530986">Skriv ut …</translation>
 <translation id="7658239707568436148">Avbryt</translation>
@@ -37,6 +38,7 @@
 <translation id="907015151729920253">Smartkort</translation>
 <translation id="3063601790762993062">Spara video</translation>
 <translation id="6042308850641462728">Mer</translation>
+<translation id="7267430310003164111">Uppmaning att hämta appen från Google Play Butik.  Appens namn: <ph name="APP_NAME"/>.  Appens medelbetyg: <ph name="APP_RATING"/>.</translation>
 <translation id="4148957013307229264">Installerar...</translation>
 <translation id="3992315671621218278">Spara länk</translation>
 <translation id="8034522405403831421">Den här sidan är skriven på <ph name="SOURCE_LANGUAGE"/>. Vill du översätta den till <ph name="TARGET_LANGUAGE"/>?</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_sw.xtb b/chrome/android/java/strings/translations/android_chrome_strings_sw.xtb
index bf9b0d0..ca898b1 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_sw.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_sw.xtb
@@ -6,6 +6,7 @@
 <translation id="5578795271662203820">Tafuta picha hii kwenye <ph name="SEARCH_ENGINE"/></translation>
 <translation id="6831043979455480757">Tafsiri</translation>
 <translation id="7644305409888602715">Inatafsiri ukurasa kwenda <ph name="SOURCE_LANGUAGE"/>...</translation>
+<translation id="7015922086425404465">Pata programu kutoka kwenye Duka la Google Play: <ph name="APP_ACTION"/></translation>
 <translation id="1491151370853475546">Pakia Ukurasa huu Upya</translation>
 <translation id="641643625718530986">Chapisha...</translation>
 <translation id="7658239707568436148">Ghairi</translation>
@@ -37,11 +38,12 @@
 <translation id="907015151729920253">Kadi mahiri</translation>
 <translation id="3063601790762993062">Hifadhi video</translation>
 <translation id="6042308850641462728">Zaidi</translation>
+<translation id="7267430310003164111">Itisha ili upate programu kutoka Duka la Play Google. Jina la Programu: <ph name="APP_NAME"/> . Ukadiriaji wastani wa programu: <ph name="APP_RATING"/> .</translation>
 <translation id="4148957013307229264">Inasakinisha...</translation>
 <translation id="3992315671621218278">Hifadhi kiungo</translation>
 <translation id="8034522405403831421">Ukurasa huu ni wa lugha ya <ph name="SOURCE_LANGUAGE"/>. Je, ungependa kuutasfiri kuwa <ph name="TARGET_LANGUAGE"/>?</translation>
 <translation id="4195643157523330669">Fungua katika kichupo kipya</translation>
-<translation id="3089395242580810162">Fungua kwenye kichupo cha chini kwa chini</translation>
+<translation id="3089395242580810162">Fungua kwenye kichupo fiche</translation>
 <translation id="8725066075913043281">Jaribu tena</translation>
 <translation id="8909135823018751308">Shiriki...</translation>
 <translation id="4269820728363426813">Nakili anwani ya kiungo</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_th.xtb b/chrome/android/java/strings/translations/android_chrome_strings_th.xtb
index 6432df9..7dd097d 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_th.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_th.xtb
@@ -6,6 +6,7 @@
 <translation id="5578795271662203820">ค้นหาภาพนี้ใน <ph name="SEARCH_ENGINE"/></translation>
 <translation id="6831043979455480757">แปล</translation>
 <translation id="7644305409888602715">กำลังแปลหน้านี้เป็น <ph name="SOURCE_LANGUAGE"/>...</translation>
+<translation id="7015922086425404465">รับแอปจาก Google Play สโตร์: <ph name="APP_ACTION"/></translation>
 <translation id="1491151370853475546">โหลดหน้าเว็บนี้ซ้ำ</translation>
 <translation id="641643625718530986">พิมพ์…</translation>
 <translation id="7658239707568436148">ยกเลิก</translation>
@@ -37,6 +38,7 @@
 <translation id="907015151729920253">สมาร์ทการ์ด</translation>
 <translation id="3063601790762993062">บันทึกวิดีโอ</translation>
 <translation id="6042308850641462728">เพิ่มเติม</translation>
+<translation id="7267430310003164111">ข้อความเตือนให้รับแอปจาก Google Play สโตร์  ชื่อแอป: <ph name="APP_NAME"/>  คะแนนเฉลี่ยของแอป: <ph name="APP_RATING"/></translation>
 <translation id="4148957013307229264">กำลังติดตั้ง...</translation>
 <translation id="3992315671621218278">บันทึกลิงก์</translation>
 <translation id="8034522405403831421">หน้าเว็บนี้อยู่ในภาษา<ph name="SOURCE_LANGUAGE"/> ต้องการแปลเป็นภาษา<ph name="TARGET_LANGUAGE"/>ไหม</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_tr.xtb b/chrome/android/java/strings/translations/android_chrome_strings_tr.xtb
index 61abc3a..7fb1c6c 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_tr.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_tr.xtb
@@ -6,6 +6,7 @@
 <translation id="5578795271662203820">Bu resmi, <ph name="SEARCH_ENGINE"/> üzerinde ara</translation>
 <translation id="6831043979455480757">Çevir</translation>
 <translation id="7644305409888602715">Sayfa <ph name="SOURCE_LANGUAGE"/> diline çevriliyor...</translation>
+<translation id="7015922086425404465">Uygulamayı Google Play Store'dan alın: <ph name="APP_ACTION"/></translation>
 <translation id="1491151370853475546">Bu Sayfayı Yeniden Yükle</translation>
 <translation id="641643625718530986">Yazdır…</translation>
 <translation id="7658239707568436148">İptal</translation>
@@ -37,6 +38,7 @@
 <translation id="907015151729920253">Akıllı kart</translation>
 <translation id="3063601790762993062">Videoyu kaydet</translation>
 <translation id="6042308850641462728">Daha fazla</translation>
+<translation id="7267430310003164111">Uygulamanın Google Play Store'dan alınması için istem. Uygulamanın adı: <ph name="APP_NAME"/>. Uygulamanın ortalama kullanıcı oyu: <ph name="APP_RATING"/>.</translation>
 <translation id="4148957013307229264">Yükleniyor...</translation>
 <translation id="3992315671621218278">Bağlantıyı kaydet</translation>
 <translation id="8034522405403831421">Bu sayfa <ph name="SOURCE_LANGUAGE"/> dilinde. <ph name="TARGET_LANGUAGE"/> diline çevrilsin mi?</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_uk.xtb b/chrome/android/java/strings/translations/android_chrome_strings_uk.xtb
index af57fd8..6b296f6 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_uk.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_uk.xtb
@@ -6,6 +6,7 @@
 <translation id="5578795271662203820">Шукати зображення в <ph name="SEARCH_ENGINE"/></translation>
 <translation id="6831043979455480757">Перекласти</translation>
 <translation id="7644305409888602715">Виконується переклад сторінки такою мовою: <ph name="SOURCE_LANGUAGE"/>…</translation>
+<translation id="7015922086425404465">Завантажити додаток із Google Play Маркету: <ph name="APP_ACTION"/></translation>
 <translation id="1491151370853475546">Перезавантажити цю сторінку</translation>
 <translation id="641643625718530986">Друк…</translation>
 <translation id="7658239707568436148">Скасувати</translation>
@@ -37,6 +38,7 @@
 <translation id="907015151729920253">Смарт-карта</translation>
 <translation id="3063601790762993062">Зберегти відео</translation>
 <translation id="6042308850641462728">Більше</translation>
+<translation id="7267430310003164111">Підказка щодо завантаження додатка з Google Play Маркету. Назва додатка: <ph name="APP_NAME"/>. Середній рейтинг додатка: <ph name="APP_RATING"/>.</translation>
 <translation id="4148957013307229264">Встановлення...</translation>
 <translation id="3992315671621218278">Зберегти посилання</translation>
 <translation id="8034522405403831421">Мова цієї сторінки: <ph name="SOURCE_LANGUAGE"/>. Перекласти її такою мовою: <ph name="TARGET_LANGUAGE"/>?</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb b/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb
index 3399c5e..5b5627a 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb
@@ -6,6 +6,7 @@
 <translation id="5578795271662203820">Tìm ảnh này trên <ph name="SEARCH_ENGINE"/></translation>
 <translation id="6831043979455480757">Dịch</translation>
 <translation id="7644305409888602715">Đang dịch trang từ <ph name="SOURCE_LANGUAGE"/>...</translation>
+<translation id="7015922086425404465">Tải ứng dụng từ Cửa hàng Google Play: <ph name="APP_ACTION"/></translation>
 <translation id="1491151370853475546">Tải lại trang này</translation>
 <translation id="641643625718530986">In…</translation>
 <translation id="7658239707568436148">Hủy</translation>
@@ -37,6 +38,7 @@
 <translation id="907015151729920253">Thẻ thông minh</translation>
 <translation id="3063601790762993062">Lưu video</translation>
 <translation id="6042308850641462728">Thêm</translation>
+<translation id="7267430310003164111">Nhắc tải ứng dụng từ Cửa hàng Google Play. Tên ứng dụng: <ph name="APP_NAME"/>. Xếp hạng trung bình của ứng dụng: <ph name="APP_RATING"/>.</translation>
 <translation id="4148957013307229264">Đang cài đặt...</translation>
 <translation id="3992315671621218278">Lưu liên kết</translation>
 <translation id="8034522405403831421">Trang này có ngôn ngữ là <ph name="SOURCE_LANGUAGE"/>. Dịch trang này sang <ph name="TARGET_LANGUAGE"/>?</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_zh-CN.xtb b/chrome/android/java/strings/translations/android_chrome_strings_zh-CN.xtb
index 62a33b6..0b3e8bf 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_zh-CN.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_zh-CN.xtb
@@ -6,6 +6,7 @@
 <translation id="5578795271662203820">在<ph name="SEARCH_ENGINE"/>中搜索此图片</translation>
 <translation id="6831043979455480757">翻译</translation>
 <translation id="7644305409888602715">正在将网页内容翻译成<ph name="SOURCE_LANGUAGE"/>…</translation>
+<translation id="7015922086425404465">从Google Play商店下载应用：<ph name="APP_ACTION"/></translation>
 <translation id="1491151370853475546">重新加载此页</translation>
 <translation id="641643625718530986">打印…</translation>
 <translation id="7658239707568436148">取消</translation>
@@ -37,6 +38,7 @@
 <translation id="907015151729920253">智能卡</translation>
 <translation id="3063601790762993062">保存视频</translation>
 <translation id="6042308850641462728">更多</translation>
+<translation id="7267430310003164111">提示您从Google Play商店下载应用。应用名称：<ph name="APP_NAME"/>。应用的平均评分：<ph name="APP_RATING"/>。</translation>
 <translation id="4148957013307229264">正在安装...</translation>
 <translation id="3992315671621218278">保存链接</translation>
 <translation id="8034522405403831421">此网页的源语言为<ph name="SOURCE_LANGUAGE"/>，要将其翻译成<ph name="TARGET_LANGUAGE"/>吗？</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_zh-TW.xtb b/chrome/android/java/strings/translations/android_chrome_strings_zh-TW.xtb
index 7c1bd34..2a87acc 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_zh-TW.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_zh-TW.xtb
@@ -6,6 +6,7 @@
 <translation id="5578795271662203820">透過 <ph name="SEARCH_ENGINE"/> 搜尋這張圖片</translation>
 <translation id="6831043979455480757">翻譯</translation>
 <translation id="7644305409888602715">正在將網頁內容翻譯成<ph name="SOURCE_LANGUAGE"/>...</translation>
+<translation id="7015922086425404465">從 Google Play 商店取得應用程式：<ph name="APP_ACTION"/></translation>
 <translation id="1491151370853475546">重新載入這個網頁</translation>
 <translation id="641643625718530986">列印…</translation>
 <translation id="7658239707568436148">取消</translation>
@@ -37,6 +38,7 @@
 <translation id="907015151729920253">智慧卡</translation>
 <translation id="3063601790762993062">儲存影片</translation>
 <translation id="6042308850641462728">詳細資訊</translation>
+<translation id="7267430310003164111">提示從 Google Play 商店取得應用程式。應用程式名稱：<ph name="APP_NAME"/>。應用程式平均評分：<ph name="APP_RATING"/>。</translation>
 <translation id="4148957013307229264">安裝中...</translation>
 <translation id="3992315671621218278">儲存連結</translation>
 <translation id="8034522405403831421">這個網頁的內容是<ph name="SOURCE_LANGUAGE"/>，需要翻譯成<ph name="TARGET_LANGUAGE"/>嗎？</translation>
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/AutofillDialogControllerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/AutofillDialogControllerTest.java
index 7b06eb7..817b945 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/AutofillDialogControllerTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/AutofillDialogControllerTest.java
@@ -574,7 +574,7 @@
         launchChromeShellWithUrl(url);
         assertTrue(waitForActiveShellToBeDoneLoading());
 
-        final ContentView view = getActivity().getActiveContentView();
+        final ContentViewCore viewCore = getActivity().getActiveContentViewCore();
 
         AutofillDialogResult.ResultWallet result = new AutofillDialogResult.ResultWallet(
                 TEST_EMAIL, "Google Transaction ID",
@@ -595,12 +595,11 @@
                 true, "", "", "", "",
                 requestFullBilling, requestShipping, requestPhoneNumbers);
 
-        DOMUtils.clickNode(this, view, "id-button");
-        waitForInputFieldFill(view.getContentViewCore());
+        DOMUtils.clickNode(this, viewCore, "id-button");
+        waitForInputFieldFill(viewCore);
 
         assertEquals("requestAutocomplete failed",
-                "succeeded", DOMUtils.getNodeContents(
-                        view.getContentViewCore(), "was-autocompleted"));
+                "succeeded", DOMUtils.getNodeContents(viewCore, "was-autocompleted"));
     }
 
     private void waitForInputFieldFill(final ContentViewCore viewCore) throws InterruptedException {
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/AutofillPopupTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/AutofillPopupTest.java
index 6f60737..136c107 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/AutofillPopupTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/AutofillPopupTest.java
@@ -7,6 +7,7 @@
 import android.test.suitebuilder.annotation.MediumTest;
 import android.text.TextUtils;
 import android.view.View;
+import android.view.ViewGroup;
 
 import org.chromium.base.ThreadUtils;
 import org.chromium.base.test.util.Feature;
@@ -14,7 +15,6 @@
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.autofill.PersonalDataManager.AutofillProfile;
 import org.chromium.chrome.shell.ChromeShellTestBase;
-import org.chromium.content.browser.ContentView;
 import org.chromium.content.browser.ContentViewCore;
 import org.chromium.content.browser.test.util.Criteria;
 import org.chromium.content.browser.test.util.CriteriaHelper;
@@ -135,8 +135,8 @@
 
         // The TestInputMethodManagerWrapper intercepts showSoftInput so that a keyboard is never
         // brought up.
-        ContentView view = getActivity().getActiveContentView();
-        final ContentViewCore viewCore = view.getContentViewCore();
+        final ContentViewCore viewCore = getActivity().getActiveContentViewCore();
+        final ViewGroup view = viewCore.getContainerView();
         final TestInputMethodManagerWrapper immw =
                 new TestInputMethodManagerWrapper(viewCore);
         viewCore.getImeAdapterForTest().setInputMethodManagerWrapper(immw);
@@ -150,7 +150,7 @@
 
         // Click the input field for the first name.
         assertTrue(DOMUtils.waitForNonZeroNodeBounds(viewCore, "fn"));
-        DOMUtils.clickNode(this, view, "fn");
+        DOMUtils.clickNode(this, viewCore, "fn");
 
         waitForKeyboardShowRequest(immw, 1);
 
@@ -290,7 +290,7 @@
                 }));
     }
 
-    private void waitForAnchorViewAdd(final ContentView view) throws InterruptedException {
+    private void waitForAnchorViewAdd(final ViewGroup view) throws InterruptedException {
         assertTrue("Autofill Popup anchor view was never added.",
                 CriteriaHelper.pollForCriteria(new Criteria() {
                     @Override
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/input/SelectFileDialogTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/input/SelectFileDialogTest.java
index 983d166..8219578 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/input/SelectFileDialogTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/input/SelectFileDialogTest.java
@@ -14,7 +14,7 @@
 import org.chromium.chrome.shell.ChromeShellActivity;
 import org.chromium.chrome.shell.ChromeShellActivity.ActivityWindowAndroidFactory;
 import org.chromium.chrome.shell.ChromeShellTestBase;
-import org.chromium.content.browser.ContentView;
+import org.chromium.content.browser.ContentViewCore;
 import org.chromium.content.browser.test.util.Criteria;
 import org.chromium.content.browser.test.util.CriteriaHelper;
 import org.chromium.content.browser.test.util.DOMUtils;
@@ -35,7 +35,7 @@
             "</form>" +
             "</body></html>");
 
-    private ContentView mContentView;
+    private ContentViewCore mContentViewCore;
     private ActivityWindowAndroidForTest mActivityWindowAndroidForTest;
 
     private static class ActivityWindowAndroidForTest extends ActivityWindowAndroid {
@@ -77,12 +77,11 @@
         launchChromeShellWithUrl(DATA_URL);
         assertTrue("Page failed to load", waitForActiveShellToBeDoneLoading());
 
-        mContentView = getActivity().getActiveContentView();
+        mContentViewCore = getActivity().getActiveContentViewCore();
         // TODO(aurimas) remove this wait once crbug.com/179511 is fixed.
         assertWaitForPageScaleFactorMatch(2);
         assertTrue(
-                DOMUtils.waitForNonZeroNodeBounds(mContentView.getContentViewCore(),
-                        "input_file"));
+                DOMUtils.waitForNonZeroNodeBounds(mContentViewCore, "input_file"));
     }
 
     /**
@@ -91,20 +90,20 @@
     @MediumTest
     @Feature({"TextInput", "Main"})
     public void testSelectFileAndCancelRequest() throws Throwable {
-        DOMUtils.clickNode(this, mContentView, "input_file");
+        DOMUtils.clickNode(this, mContentViewCore, "input_file");
         assertTrue("SelectFileDialog never sent an intent.",
                 CriteriaHelper.pollForCriteria(new IntentSentCriteria()));
         assertEquals(Intent.ACTION_CHOOSER, mActivityWindowAndroidForTest.lastIntent.getAction());
         resetActivityWindowAndroidForTest();
 
-        DOMUtils.clickNode(this, mContentView, "input_image");
+        DOMUtils.clickNode(this, mContentViewCore, "input_image");
         assertTrue("SelectFileDialog never sent an intent.",
                 CriteriaHelper.pollForCriteria(new IntentSentCriteria()));
         assertEquals(MediaStore.ACTION_IMAGE_CAPTURE,
                 mActivityWindowAndroidForTest.lastIntent.getAction());
         resetActivityWindowAndroidForTest();
 
-        DOMUtils.clickNode(this, mContentView, "input_audio");
+        DOMUtils.clickNode(this, mContentViewCore, "input_audio");
         assertTrue("SelectFileDialog never sent an intent.",
                 CriteriaHelper.pollForCriteria(new IntentSentCriteria()));
         assertEquals(MediaStore.Audio.Media.RECORD_SOUND_ACTION,
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/input/SelectPopupOtherContentViewTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/input/SelectPopupOtherContentViewTest.java
index 84cac9a..54d2233 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/input/SelectPopupOtherContentViewTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/input/SelectPopupOtherContentViewTest.java
@@ -9,6 +9,7 @@
 import org.chromium.chrome.browser.ContentViewUtil;
 import org.chromium.chrome.shell.ChromeShellTestBase;
 import org.chromium.content.browser.ContentView;
+import org.chromium.content.browser.ContentViewCore;
 import org.chromium.content.browser.test.util.Criteria;
 import org.chromium.content.browser.test.util.CriteriaHelper;
 import org.chromium.content.browser.test.util.DOMUtils;
@@ -34,8 +35,8 @@
     private class PopupShowingCriteria implements Criteria {
         @Override
         public boolean isSatisfied() {
-            ContentView view = getActivity().getActiveContentView();
-            return view.getContentViewCore().getSelectPopupForTest() != null;
+            ContentViewCore contentViewCore = getActivity().getActiveContentViewCore();
+            return contentViewCore.getSelectPopupForTest() != null;
         }
     }
 
@@ -57,10 +58,10 @@
         launchChromeShellWithUrl(SELECT_URL);
         assertTrue("Page failed to load", waitForActiveShellToBeDoneLoading());
 
-        final ContentView view = getActivity().getActiveContentView();
+        final ContentViewCore viewCore = getActivity().getActiveContentViewCore();
 
         // Once clicked, the popup should show up.
-        DOMUtils.clickNode(this, view, "select");
+        DOMUtils.clickNode(this, viewCore, "select");
         assertTrue("The select popup did not show up on click.",
                 CriteriaHelper.pollForCriteria(new PopupShowingCriteria()));
 
@@ -72,7 +73,7 @@
                 WindowAndroid windowAndroid = new ActivityWindowAndroid(getActivity());
                 ContentView contentView = ContentView.newInstance(
                         getActivity(), nativeWebContents, windowAndroid);
-                contentView.destroy();
+                contentView.getContentViewCore().destroy();
             }
         });
 
@@ -81,6 +82,6 @@
 
         // The popup should still be shown.
         assertNotNull("The select popup got hidden by destroying of unrelated ContentViewCore.",
-                view.getContentViewCore().getSelectPopupForTest());
+                viewCore.getSelectPopupForTest());
     }
 }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncTest.java
index 1a5c89f..768d33f 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncTest.java
@@ -17,7 +17,6 @@
 import org.chromium.chrome.shell.ChromeShellTestBase;
 import org.chromium.chrome.shell.sync.SyncController;
 import org.chromium.chrome.test.util.browser.sync.SyncTestUtil;
-import org.chromium.content.browser.ContentView;
 import org.chromium.content.browser.ContentViewCore;
 import org.chromium.content.browser.test.util.Criteria;
 import org.chromium.content.browser.test.util.CriteriaHelper;
@@ -178,8 +177,6 @@
     }
 
     private static ContentViewCore getContentViewCore(ChromeShellActivity activity) {
-        ContentView contentView = activity.getActiveContentView();
-        if (contentView == null) return null;
-        return contentView.getContentViewCore();
+        return activity.getActiveContentViewCore();
     }
 }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/test/ModalDialogTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/test/ModalDialogTest.java
index a33c99c..3eaaec2 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/test/ModalDialogTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/test/ModalDialogTest.java
@@ -187,7 +187,7 @@
                 "Stay on this page");
         clickCancel(jsDialog);
 
-        assertEquals(BEFORE_UNLOAD_URL, getActivity().getActiveContentView().getUrl());
+        assertEquals(BEFORE_UNLOAD_URL, getActivity().getActiveContentViewCore().getUrl());
         executeJavaScriptAndWaitForDialog("history.back();");
 
         jsDialog = getCurrentDialog();
@@ -201,7 +201,7 @@
         int callCount = onPageLoaded.getCallCount();
         clickOk(jsDialog);
         onPageLoaded.waitForCallback(callCount);
-        assertEquals(EMPTY_PAGE, getActivity().getActiveContentView().getUrl());
+        assertEquals(EMPTY_PAGE, getActivity().getActiveContentViewCore().getUrl());
     }
 
     /**
diff --git a/chrome/android/shell/java/src/org/chromium/chrome/shell/ChromeShellActivity.java b/chrome/android/shell/java/src/org/chromium/chrome/shell/ChromeShellActivity.java
index b55b63d..cf919db 100644
--- a/chrome/android/shell/java/src/org/chromium/chrome/shell/ChromeShellActivity.java
+++ b/chrome/android/shell/java/src/org/chromium/chrome/shell/ChromeShellActivity.java
@@ -33,6 +33,7 @@
 import org.chromium.content.browser.ActivityContentVideoViewClient;
 import org.chromium.content.browser.BrowserStartupController;
 import org.chromium.content.browser.ContentView;
+import org.chromium.content.browser.ContentViewCore;
 import org.chromium.content.browser.DeviceUtils;
 import org.chromium.content.common.ContentSwitches;
 import org.chromium.printing.PrintManagerDelegateImpl;
@@ -214,16 +215,16 @@
     protected void onStop() {
         super.onStop();
 
-        ContentView view = getActiveContentView();
-        if (view != null) view.onHide();
+        ContentViewCore viewCore = getActiveContentViewCore();
+        if (viewCore != null) viewCore.onHide();
     }
 
     @Override
     protected void onStart() {
         super.onStart();
 
-        ContentView view = getActiveContentView();
-        if (view != null) view.onShow();
+        ContentViewCore viewCore = getActiveContentViewCore();
+        if (viewCore != null) viewCore.onShow();
 
         if (mSyncController != null) {
             mSyncController.onStart();
@@ -258,6 +259,14 @@
     }
 
     /**
+     * @return The ContentViewCore of the active tab.
+     */
+    public ContentViewCore getActiveContentViewCore() {
+        ChromeShellTab tab = getActiveTab();
+        return tab != null ? tab.getContentViewCore() : null;
+    }
+
+    /**
      * Creates a {@link ChromeShellTab} with a URL specified by {@code url}.
      *
      * @param url The URL the new {@link ChromeShellTab} should start with.
diff --git a/chrome/android/shell/java/src/org/chromium/chrome/shell/ChromeShellTab.java b/chrome/android/shell/java/src/org/chromium/chrome/shell/ChromeShellTab.java
index 71aabe0..c3a88e4 100644
--- a/chrome/android/shell/java/src/org/chromium/chrome/shell/ChromeShellTab.java
+++ b/chrome/android/shell/java/src/org/chromium/chrome/shell/ChromeShellTab.java
@@ -12,8 +12,8 @@
 import org.chromium.chrome.browser.contextmenu.ChromeContextMenuPopulator;
 import org.chromium.chrome.browser.contextmenu.ContextMenuPopulator;
 import org.chromium.chrome.browser.infobar.AutoLoginProcessor;
-import org.chromium.content.browser.ContentView;
 import org.chromium.content.browser.ContentViewClient;
+import org.chromium.content.browser.ContentViewCore;
 import org.chromium.content.browser.LoadUrlParams;
 import org.chromium.content_public.Referrer;
 import org.chromium.ui.base.WindowAndroid;
@@ -30,7 +30,7 @@
      * @param context           The Context the view is running in.
      * @param url               The URL to start this tab with.
      * @param window            The WindowAndroid should represent this tab.
-     * @param contentViewClient The client for the {@link ContentView}s of this Tab.
+     * @param contentViewClient The client for the {@link ContentViewCore}s of this Tab.
      */
     public ChromeShellTab(Context context, String url, WindowAndroid window,
             ContentViewClient contentViewClient) {
@@ -49,7 +49,7 @@
     }
 
     /**
-     * Navigates this Tab's {@link ContentView} to a sanitized version of {@code url}.
+     * Navigates this Tab to a sanitized version of {@code url}.
      * @param url The potentially unsanitized URL to navigate to.
      * @param postData Optional data to be sent via POST.
      */
@@ -62,20 +62,20 @@
         // Invalid URLs will just return empty.
         if (TextUtils.isEmpty(url)) return;
 
-        ContentView contentView = getContentView();
-        if (TextUtils.equals(url, contentView.getUrl())) {
-            contentView.getContentViewCore().reload(true);
+        ContentViewCore contentViewCore = getContentViewCore();
+        if (TextUtils.equals(url, contentViewCore.getUrl())) {
+            contentViewCore.reload(true);
         } else {
             if (postData == null) {
-                contentView.loadUrl(new LoadUrlParams(url));
+                contentViewCore.loadUrl(new LoadUrlParams(url));
             } else {
-                contentView.loadUrl(LoadUrlParams.createLoadHttpPostParams(url, postData));
+                contentViewCore.loadUrl(LoadUrlParams.createLoadHttpPostParams(url, postData));
             }
         }
     }
 
     /**
-     * Navigates this Tab's {@link ContentView} to a sanitized version of {@code url}.
+     * Navigates this Tab to a sanitized version of {@code url}.
      * @param url The potentially unsanitized URL to navigate to.
      */
     public void loadUrlWithSanitization(String url) {
diff --git a/chrome/android/shell/java/src/org/chromium/chrome/shell/ChromeShellToolbar.java b/chrome/android/shell/java/src/org/chromium/chrome/shell/ChromeShellToolbar.java
index 48b91fd..fa3ad45 100644
--- a/chrome/android/shell/java/src/org/chromium/chrome/shell/ChromeShellToolbar.java
+++ b/chrome/android/shell/java/src/org/chromium/chrome/shell/ChromeShellToolbar.java
@@ -62,7 +62,7 @@
         if (mTab != null) mTab.removeObserver(mTabObserver);
         mTab = tab;
         mTab.addObserver(mTabObserver);
-        mUrlTextView.setText(mTab.getContentView().getUrl());
+        mUrlTextView.setText(mTab.getContentViewCore().getUrl());
     }
 
     private void onUpdateUrl(String url) {
@@ -71,7 +71,7 @@
 
     private void onLoadProgressChanged(int progress) {
         removeCallbacks(mClearProgressRunnable);
-        mProgressDrawable.setLevel((int) (100.0 * progress));
+        mProgressDrawable.setLevel(100 * progress);
         if (progress == 100) postDelayed(mClearProgressRunnable, COMPLETED_PROGRESS_TIMEOUT_MS);
     }
 
@@ -97,7 +97,7 @@
             public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                 if ((actionId != EditorInfo.IME_ACTION_GO) && (event == null ||
                         event.getKeyCode() != KeyEvent.KEYCODE_ENTER ||
-                        event.getKeyCode() != KeyEvent.ACTION_DOWN)) {
+                        event.getAction() != KeyEvent.ACTION_DOWN)) {
                     return false;
                 }
 
@@ -113,7 +113,7 @@
             public void onFocusChange(View v, boolean hasFocus) {
                 setKeyboardVisibilityForUrl(hasFocus);
                 if (!hasFocus) {
-                    mUrlTextView.setText(mTab.getContentView().getUrl());
+                    mUrlTextView.setText(mTab.getContentViewCore().getUrl());
                 }
             }
         });
diff --git a/chrome/android/shell/java/src/org/chromium/chrome/shell/TabManager.java b/chrome/android/shell/java/src/org/chromium/chrome/shell/TabManager.java
index c1faa22..0032af4 100644
--- a/chrome/android/shell/java/src/org/chromium/chrome/shell/TabManager.java
+++ b/chrome/android/shell/java/src/org/chromium/chrome/shell/TabManager.java
@@ -127,6 +127,6 @@
         mContentViewHolder.addView(mCurrentTab.getContentView());
         mContentViewRenderView.setCurrentContentViewCore(mCurrentTab.getContentViewCore());
         mCurrentTab.getContentView().requestFocus();
-        mCurrentTab.getContentView().onShow();
+        mCurrentTab.getContentViewCore().onShow();
     }
 }
diff --git a/chrome/android/shell/javatests/src/org/chromium/chrome/shell/ChromeShellTestBase.java b/chrome/android/shell/javatests/src/org/chromium/chrome/shell/ChromeShellTestBase.java
index 44f02a3..e3f8abc 100644
--- a/chrome/android/shell/javatests/src/org/chromium/chrome/shell/ChromeShellTestBase.java
+++ b/chrome/android/shell/javatests/src/org/chromium/chrome/shell/ChromeShellTestBase.java
@@ -4,6 +4,8 @@
 
 package org.chromium.chrome.shell;
 
+import static org.chromium.base.test.util.ScalableTimeout.scaleTimeout;
+
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
@@ -12,8 +14,6 @@
 import android.text.TextUtils;
 import android.util.Log;
 
-import static org.chromium.base.test.util.ScalableTimeout.scaleTimeout;
-
 import org.chromium.base.CommandLine;
 import org.chromium.base.ThreadUtils;
 import org.chromium.base.library_loader.ProcessInitException;
@@ -96,7 +96,7 @@
                             ChromeShellTab tab = activity.getActiveTab();
                             if (tab != null) {
                                 isLoaded.set(!tab.isLoading()
-                                        && !TextUtils.isEmpty(tab.getContentView().getUrl()));
+                                        && !TextUtils.isEmpty(tab.getContentViewCore().getUrl()));
                             } else {
                                 isLoaded.set(false);
                             }
diff --git a/chrome/app/bookmarks_strings.grdp b/chrome/app/bookmarks_strings.grdp
index e1f9223..f59e688 100644
--- a/chrome/app/bookmarks_strings.grdp
+++ b/chrome/app/bookmarks_strings.grdp
@@ -2,27 +2,6 @@
 <!-- Bookmarks specific strings (included from generated_resources.grd). -->
 <grit-part>
   <!-- Begin of Bookmarks Bar strings-->
-  <if expr="not is_android and not is_ios and not use_titlecase">
-    <message name="IDS_BOOKMARK_BAR_FOLDER_NAME" desc="Name shown in the tree for the Bookmarks Bar folder.">
-      Bookmarks bar
-    </message>
-  </if>
-  <if expr="not is_android and not is_ios and use_titlecase">
-    <message name="IDS_BOOKMARK_BAR_FOLDER_NAME" desc="In Title Case: Name shown in the tree for the Bookmarks Bar folder.">
-      Bookmarks Bar
-    </message>
-  </if>
-  <if expr="is_android">
-    <message name="IDS_BOOKMARK_BAR_FOLDER_NAME" desc="Mobile: Name shown in the tree for the desktop bookmarks folder">
-      Desktop bookmarks
-    </message>
-  </if>
-  <if expr="is_ios">
-    <message name="IDS_BOOKMARK_BAR_FOLDER_NAME" desc="Mobile: Name shown in the tree for the desktop bookmarks folder">
-      Desktop Bookmarks
-    </message>
-  </if>
-
   <if expr="not is_android">
     <!-- The following two strings are shown when the user has no bookmarks yet. -->
     <message name="IDS_BOOKMARKS_NO_ITEMS" desc="Text shown when the user has no bookmarks">
@@ -51,23 +30,11 @@
   </if>
 
   <if expr="not use_titlecase">
-    <message name="IDS_BOOKMARK_BAR_MOBILE_FOLDER_NAME" desc="Name shown in the tree for the mobile bookmarks folder">
-      Mobile bookmarks
-    </message>
-    <message name="IDS_BOOKMARK_BAR_OTHER_FOLDER_NAME" desc="Name shown in the tree for the other bookmarks folder">
-      Other bookmarks
-    </message>
     <message name="IDS_BOOKMARK_BAR_SHOW_APPS_SHORTCUT" desc="Name shown in the context menu to hide/show the apps shortcut in the bookmakr bar">
       Show apps shortcut
     </message>
   </if>
   <if expr="use_titlecase">
-    <message name="IDS_BOOKMARK_BAR_MOBILE_FOLDER_NAME" desc="In Title Case: Name shown in the tree for the mobile bookmarks folder">
-      Mobile Bookmarks
-    </message>
-    <message name="IDS_BOOKMARK_BAR_OTHER_FOLDER_NAME" desc="In Title Case: Name shown in the tree for the other bookmarks folder">
-      Other Bookmarks
-    </message>
     <message name="IDS_BOOKMARK_BAR_SHOW_APPS_SHORTCUT" desc="In Title Case: Name shown in the context menu to hide/show the apps shortcut in the bookmakr bar">
       Show Apps Shortcut
     </message>
diff --git a/chrome/app/chrome_breakpad_client_mac.mm b/chrome/app/chrome_breakpad_client_mac.mm
index da6bc44..c9766b1 100644
--- a/chrome/app/chrome_breakpad_client_mac.mm
+++ b/chrome/app/chrome_breakpad_client_mac.mm
@@ -6,14 +6,14 @@
 
 #include <CoreFoundation/CoreFoundation.h>
 
-#include "base/command_line.h"
 #include "base/mac/scoped_cftyperef.h"
 #include "base/strings/sys_string_conversions.h"
-#include "chrome/common/chrome_switches.h"
 #include "policy/policy_constants.h"
 
 #if !defined(DISABLE_NACL)
+#include "base/command_line.h"
 #import "breakpad/src/client/mac/Framework/Breakpad.h"
+#include "chrome/common/chrome_switches.h"
 #include "components/nacl/common/nacl_switches.h"
 #include "native_client/src/trusted/service_runtime/osx/crash_filter.h"
 #endif
diff --git a/chrome/app/chrome_main_delegate.cc b/chrome/app/chrome_main_delegate.cc
index ef955cf..4162af8 100644
--- a/chrome/app/chrome_main_delegate.cc
+++ b/chrome/app/chrome_main_delegate.cc
@@ -39,7 +39,6 @@
 #include "ui/base/ui_base_switches.h"
 
 #if defined(OS_WIN)
-#include <atlbase.h>
 #include <malloc.h>
 #include <algorithm>
 #include "base/strings/string_util.h"
diff --git a/chrome/app/chromeos_strings.grdp b/chrome/app/chromeos_strings.grdp
index b643a4c..0255cce 100644
--- a/chrome/app/chromeos_strings.grdp
+++ b/chrome/app/chromeos_strings.grdp
@@ -117,6 +117,12 @@
   </message>
 
   <!-- File Manager -->
+  <message name="IDS_FLAGS_ENABLE_FILE_MANAGER_MTP_NAME" desc="Name of the about:flag option to enable MTP support in file manager.">
+    Enable MTP support in File Manager.
+  </message>
+  <message name="IDS_FLAGS_ENABLE_FILE_MANAGER_MTP_DESCRIPTION" desc="Description of the about:flag option to the enable MTP support in file manager.">
+    Show MTP devices as a file storage in the file manager.
+  </message>
   <message name="IDS_FLAGS_FILE_MANAGER_ENABLE_NEW_AUDIO_PLAYER_NAME" desc="Name of the about:flag option to enable the new audio player app.">
     Enable the new audio player
   </message>
@@ -354,9 +360,6 @@
   <message name="IDS_FILE_BROWSER_GALLERY_OVERWRITE_BUBBLE" desc="In the Gallery, text in the bubble informing user about saving and overwriting original file.">
     Your edits are saved automatically.<ph name="BREAKS">&lt;br&gt;&lt;br&gt;<ex>&lt;br&gt;&lt;br&gt;</ex></ph>To keep a copy of the original image, uncheck "Overwrite original"
   </message>
-  <message name="IDS_FILE_BROWSER_GALLERY_UNSAVED_CHANGES" desc="In the Gallery, message informing about unsaved changes, when user tries to close the tab.">
-    Changes are not saved yet.
-  </message>
   <message name="IDS_FILE_BROWSER_GALLERY_READONLY_WARNING" desc="In the Gallery, message informing that directory is readonly, and edited files will be saved to Downloads directory.">
     Cannot save to $1. Edited images will be saved in the Downloads folder.
   </message>
@@ -1713,18 +1716,12 @@
   <message name="IDS_OPTIONS_SETTINGS_NETWORK_DISABLED" desc="Message displayed when a type of network connection is disabled">
     Disabled
   </message>
-  <message name="IDS_OPTIONS_SETTINGS_NETWORK_ONLINE" desc="Message displayed at the top of a network popup menu indiating that the user is online.">
-    You are online.
-  </message>
   <message name="IDS_OPTIONS_SETTINGS_NETWORK_OTHER" desc="Menu option for connecting to a network that is not listed in the menu.">
     Join other...
   </message>
   <message name="IDS_OPTIONS_SETTINGS_NETWORK_NOT_CONNECTED" desc="Displayed for a network control when not connected.">
     Not connected
   </message>
-  <message name="IDS_OPTIONS_SETTINGS_NETWORK_OPTIONS" desc="Menu option for configuring a network.">
-    Network options...
-  </message>
   <message name="IDS_OPTIONS_SETTINGS_NETWORK_DISABLE_WIFI" desc="Menu option in the Wi-Fi menu when there is a connected Wi-Fi network.">
     Disable Wi-Fi
   </message>
@@ -2244,9 +2241,6 @@
   <message name="IDS_IMAGE_SCREEN_SYNCING_PREFERENCES" desc="The message displayed on the image screen while user preferences are syncing.">
     Syncing your preferences
   </message>
-  <message name="IDS_OPTIONS_SETTINGS_INTERNET_TAB_WIFI" desc="In settings Internet options, the title for the wifi tab.">
-    Wi-Fi
-  </message>
   <message name="IDS_OPTIONS_SETTINGS_INTERNET_TAB_WIMAX" desc="In settings Internet options, the title for the WiMAX tab.">
     WiMAX
   </message>
@@ -2346,9 +2340,6 @@
   <message name="IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_CERT" desc="In settings Internet options, the x509 certificate to use.">
     User certificate:
   </message>
-  <message name="IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_CERT_BUTTON" desc="In settings Internet options, the prompt on the certificate-selection button.">
-    Select certificate file
-  </message>
   <message name="IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_SECURITY" desc="In settings Internet options, the label for the security.">
     Security:
   </message>
@@ -2370,15 +2361,9 @@
   <message name="IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_EAP_SUBJECT_MATCH" desc="In settings Internet options, the label for the EAP Subject Match field.">
     Subject Match:
   </message>
-  <message name="IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_BAD_PASSPHRASE" desc="In settings Internet options, the label for the bad passphrase.">
-    Incorrect password.
-  </message>
   <message name="IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_NET_PROTECTED" desc="In settings Internet options, the message in network details page for password protected networks.">
     Access to this network is protected.
   </message>
-  <message name="IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_BAD_WEPKEY" desc="In settings Internet options, the label for the bad WEP key.">
-    Password format is incorrect.
-  </message>
   <message name="IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_PREFER_NETWORK" desc="In settings Internet options, the label for prefer network checkbox.">
     Prefer this network
   </message>
@@ -2391,48 +2376,6 @@
   <message name="IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_NETWORK_SHARED" desc="In settings Internet options, text for when a network is shared.">
     This network is shared with other users.
   </message>
-  <message name="IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_PURCHASE_MORE" desc="In settings Internet options, the title for buy cellular data plan button.">
-    Buy data plan...
-  </message>
-  <message name="IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_UNKNOWN_ERROR" desc="In settings Internet options, the label for an unknown connection error.">
-    Failed to connect to network.
-  </message>
-  <message name="IDS_OPTIONS_SETTINGS_INTERNET_CELL_PLAN_NAME" desc="In settings Internet options, the label displayed next to cellular plan name.">
-    Plan name:
-  </message>
-  <message name="IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_LOADING_PLAN" desc="In settings Internet options, the message displayed while cellular data plan information is being loaded.">
-    Loading mobile data plan information, please wait...
-  </message>
-  <message name="IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_NO_PLANS_FOUND" desc="In settings Internet options, the message displayed while cellular data plans are missing or could not be found.">
-    Plan information not available.
-  </message>
-  <message name="IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_DATA_REMAINING" desc="In settings Internet options, the label for mobile plan remaining data info.">
-    Data remaining:
-  </message>
-  <message name="IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_UNLIMITED" desc="In settings Internet options, the label of data info for mobile unlimited data plan.">
-    Unlimited
-  </message>
-  <message name="IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_EXPIRES" desc="In settings Internet options, the label for mobile plan expiration time info.">
-    Expires:
-  </message>
-  <message name="IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_SHOW_MOBILE_NOTIFICATION" desc="In settings Internet options, the label for show mobile plan data notification checkbox.">
-    Show notifications when data is low or nearing expiration
-  </message>
-  <message name="IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_RECEIVED_FREE_DATA" desc="In settings Internet options, the label that tells user free data received.">
-    You received <ph name="DATA_AMOUNT">$1<ex>100MB</ex></ph> free usage on <ph name="DATE">$2<ex>January 1, 2011</ex></ph>
-  </message>
-  <message name="IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_PURCHASE_DATA" desc="In settings Internet options, the label that shows user has purchased a mobile data plan.">
-    You purchased <ph name="DATA_AMOUNT">$1<ex>3GB</ex></ph> of data on <ph name="DATE">$2<ex>January 1, 2011</ex></ph>
-  </message>
-  <message name="IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_PURCHASE_UNLIMITED_DATA" desc="In settings Internet options, the label that shows user has purchased an unliminted mobile data plan.">
-    You purchased unlimited data on <ph name="DATE">$1<ex>January 1, 2011</ex></ph>
-  </message>
-  <message name="IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_CUSTOMER_SUPPORT" desc="In settings Internet options, the text for customer support hyper link.">
-    Customer support
-  </message>
-  <message name="IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_LOGIN" desc="In settings Internet options, the label for the button to sign in.">
-    Sign in
-  </message>
   <message name="IDS_OPTIONS_SETTINGS_INTERNET_CONNECTION_STATE" desc="In settings Internet options, the label for connection status.">
     Connection status:
   </message>
@@ -2472,9 +2415,6 @@
   <message name="IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_DNSSERVER" desc="In settings Internet options, the label dns server.">
     DNS server:
   </message>
-  <message name="IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_CHANGE_PROXY_BUTTON" desc="In settings Internet options, the button to configure proxy settings.">
-    Change proxy settings...
-  </message>
   <message name="IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_PROXY_POLICY" desc="In settings Internet options, banner displayed when the proxy settings are enforced by a policy.">
     The proxy is enforced by your administrator.
   </message>
@@ -2499,21 +2439,6 @@
   <message name="IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_SECURITY_PSK" desc="In settings Internet options, a string specifying security PSK (either WPA-PSK or RSN-PSK).">
     PSK (WPA or RSN)
   </message>
-  <message name="IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_PASSWORD" desc="In settings Internet options, a string telling the user where the network certificate is installed to.">
-    Password
-  </message>
-  <message name="IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_SSID" desc="In settings Internet options, a string telling the user where the network certificate is installed to.">
-    SSID
-  </message>
-  <message name="IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_SHOWPASSWORD" desc="In settings Internet options, a string telling the user where the network certificate is installed to.">
-    Show password
-  </message>
-  <message name="IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_STATUS_TITLE" desc="In settings Internet options, Title of the overlay when the user is connected.">
-    Connection details
-  </message>
-  <message name="IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_CONNECT_TITLE" desc="In settings Internet options, Title of the overlay when the user is not connected and can.">
-    Connect to network
-  </message>
   <message name="IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_L2TP_IPSEC_PSK" desc="In settings Internet options, a string specifying L2TP/IPsec + PSK.">
     L2TP/IPsec + pre-shared key
   </message>
@@ -2568,15 +2493,6 @@
   <message name="IDS_OPTIONS_ENABLE_CONTENT_PROTECTION_ATTESTATION" desc="description label for verified access about premium contents">
     Enable Verified Access
   </message>
-  <message name="IDS_NETWORK_RECONNECT_TITLE" desc="In network menu, title of the reconnect button that allows user to retry connection on error.">
-    Reconnect
-  </message>
-  <message name="IDS_NETWORK_SSID_HINT" desc="In network menu, hint text for network name field.">
-    network name
-  </message>
-  <message name="IDS_NETWORK_PASSWORD_HINT" desc="In network menu, hint text for network password field.">
-    network password
-  </message>
 
   <message name="IDS_NETWORK_CHOOSE_MOBILE_NETWORK" desc="Title of the window for choosing mobile network.">
     Choose a mobile network
@@ -2609,9 +2525,6 @@
   <message name="IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_APN_SET" desc="Cellular device set APN settings button under network details in chrome:settings/internet.">
     Save
   </message>
-  <message name="IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_ACCESS_SECURITY_TAB" desc="In settings Internet options, the text of the link shown when SIM card is locked, to access security tab.">
-    To access Security settings enter the SIM card PIN
-  </message>
   <message name="IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_LOCK_SIM_CARD" desc="Cellular device enable SIM card PIN lock checkbox label in chrome:settings/internet.">
     Lock SIM card (require PIN to use mobile data)
   </message>
@@ -2624,9 +2537,6 @@
   <message name="IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_CHANGE_PIN_MESSAGE" desc="Cellular device change PIN dialog message in chrome:settings/internet.">
     Please enter old and new PIN.
   </message>
-  <message name="IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_CHANGE_PIN_INCORRECT_ERROR" desc="Cellular device change PIN dialog error message in chrome:settings/internet.">
-    Incorrect PIN, please try again.
-  </message>
   <message name="IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_CHANGE_PIN_OLD_PIN" desc="Cellular device change PIN dialog old PIN label text in chrome:settings/internet.">
     Old PIN:
   </message>
@@ -2639,20 +2549,10 @@
   <message name="IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_PINS_DONT_MATCH_ERROR" desc="Cellular device change PIN dialog message shown when entered new PINs don't match in chrome:settings/internet.">
     PINs don't match!
   </message>
-  <message name="IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_APN_CANCEL" desc="Cellular device cancel APN settings edit button under network details in chrome:settings/internet.">
-    Cancel
-  </message>
   <message name="IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_APN_OTHER" desc="Select user defined APN in the lost of predefined APNs under network details in chrome:settings/internet.">
     Other...
   </message>
 
-  <message name="IDS_OPTIONS_SETTINGS_INTERNET_CONTROL_TITLE" desc="In settings Internet options, Title of the section which houses the enable/disable buttons.">
-    General
-  </message>
-  <message name="IDS_OPTIONS_SETTINGS_LANGUAGES_MODIFIER_KEYS_CUSTOMIZE" desc="In settings system options, the label for the customize button for modifier keys">
-    Modifier keys...
-  </message>
-
   <message name="IDS_SIM_UNLOCK_ENTER_PIN_TITLE" desc="Title of the SIM card unlock dialog in chrome:sim-unlock.">
     Enter SIM card PIN
   </message>
@@ -2785,6 +2685,21 @@
   <message name="IDS_RESET_SCREEN_RESET" desc="Reset button text. Button launches powerwash.">
     Reset
   </message>
+  <message name="IDS_RESET_SCREEN_PREPARING_REVERT_PROMISE" desc="Message shown on reset screen after user initiates powerwash with version revert while revert is prepared until reboot.">
+    <ph name="IDS_SHORT_PRODUCT_NAME">$1<ex>Chrome</ex></ph> will restart and reset momentarily.
+  </message>
+  <message name="IDS_RESET_SCREEN_PREPARING_REVERT_SPINNER_MESSAGE" desc="Spinner message shown on reset screen after user initiates powerwash with version revert while revert is prepared until reboot.">
+    Reverting to previous <ph name="IDS_SHORT_PRODUCT_NAME">$1<ex>Chrome</ex></ph> update.
+  </message>
+  <message name="IDS_RESET_SCREEN_REVERT_ERROR" desc="Error message shown when revert was initiated but unavailable to be performed." meaning="Device reset screen revert option context.">
+    Oops, something went wrong.
+  </message>
+  <message name="IDS_RESET_SCREEN_REVERT_ERROR_EXPLANATION" desc="Error description shown when revert was initiated but unavailable to be performed.">
+    <ph name="IDS_SHORT_PRODUCT_NAME">$1<ex>Chrome</ex></ph> is unable to revert to the previous version. Please try again or Powerwash your device.
+  </message>
+  <message name="IDS_RESET_SCREEN_REVERT_ERROR_BUTTON" desc="Reset device dialog, error page, revert error while initiating it, button title.">
+    OK
+  </message>
 
   <message name="IDS_WRONG_HWID_SCREEN_HEADER" desc="Header of message shown on screen notifying about malformed hardware ID.">
     A factory error has been detected
@@ -3478,15 +3393,18 @@
   <message name="IDS_STATUSBAR_DISABLE_SPOKEN_FEEDBACK" desc="The menu option to disable spoken feedback accessibility feature.">
     Disable ChromeVox (spoken feedback)
   </message>
-  <message name="IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET" desc="The ethernet network device.">
+  <message name="IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET" desc="Label for an ethernet network device.">
     Ethernet
   </message>
-  <message name="IDS_STATUSBAR_NETWORK_DEVICE_WIFI" desc="The wifi network device.">
+  <message name="IDS_STATUSBAR_NETWORK_DEVICE_WIFI" desc="Label for a wifi network device.">
     Wi-Fi
   </message>
-  <message name="IDS_STATUSBAR_NETWORK_DEVICE_CELLULAR" desc="The cellular network device.">
+  <message name="IDS_STATUSBAR_NETWORK_DEVICE_CELLULAR" desc="Label for a cellular network device.">
     Mobile Data
   </message>
+  <message name="IDS_STATUSBAR_NETWORK_DEVICE_UNKNOWN" desc="Label for an unknown network device.">
+    Unknown
+  </message>
   <message name="IDS_NETWORK_TYPE_ETHERNET" desc="The ethernet network type.">
     Ethernet
   </message>
@@ -3520,12 +3438,6 @@
   <message name="IDS_STATUSBAR_NETWORK_DEVICE_DISABLED" desc="The network device status disabled.">
     Off
   </message>
-  <message name="IDS_STATUSBAR_NETWORK_DEVICE_ACTIVATING" desc="The network device is activating.">
-    Activating...
-  </message>
-  <message name="IDS_STATUSBAR_NETWORK_DEVICE_ACTIVATE" desc="Activate the network device.">
-    Activate <ph name="NETWORKSERVICE">$1<ex>YBH Cellular</ex></ph>
-  </message>
   <message name="IDS_STATUSBAR_NETWORK_DEVICE_ENABLE" desc="Enable the network device.">
     Enable <ph name="NETWORKDEVICE">$1<ex>Wifi</ex></ph>
   </message>
@@ -3538,27 +3450,15 @@
   <message name="IDS_STATUSBAR_NETWORK_MENU_ITEM_INDENT" desc="A menu item label with an indentation. For left-to-right languages, we use 3 spaces on the left.">
     '''   <ph name="LABEL">$1<ex>Wifi SSID</ex></ph>'''
   </message>
-  <message name="IDS_STATUSBAR_NETWORK_OFFLINE_MODE" desc="The offline mode.">
-    Offline mode
-  </message>
-  <message name="IDS_STATUSBAR_NETWORK_OPEN_OPTIONS_DIALOG" desc="The menu item in the network menu button for opening the options dialog">
-    Network settings...
-  </message>
   <message name="IDS_STATUSBAR_NETWORK_OPEN_PROXY_SETTINGS_DIALOG" desc="The menu item in the network menu button at login screen for opening the options dialog">
     Proxy settings...
   </message>
   <message name="IDS_STATUSBAR_NETWORK_MORE" desc="Message for last link in the network menu requesting more technical and less common stuff (proxy settings, IP and hardware addresses)">
     More...
   </message>
-  <message name="IDS_STATUSBAR_NETWORK_PRIVATE_NETWORKS" desc="In the network status menu, the text for submenu of private networks.">
-    Private networks
-  </message>
   <message name="IDS_STATUSBAR_NETWORK_ADD_VPN" desc="In the network status menu, the text in Private networks submenu to add a private network.">
     Add private network...
   </message>
-  <message name="IDS_STATUSBAR_NETWORK_DISCONNECT_VPN" desc="In the network status menu, the text in Private networks submenu to disconnect from a private network.">
-    Disconnect private network
-  </message>
   <message name="IDS_STATUSBAR_NETWORK_VIEW_ACCOUNT" desc="In the network status menu, the text of the top-up URL link.">
     View account
   </message>
@@ -3794,8 +3694,14 @@
   <message name="IDS_EXTERNAL_STORAGE_DISABLED_MESSAGE" desc="Text of notification message which is shown when user inserts removable device but external storage is disabled by policy">
    Sorry, your administrator has disabled external storage on your account.
   </message>
-  <message name="IDS_EXTERNAL_STORAGE_HARD_UNPLUG_MESSAGE" desc="Text of notification message which is shown when user manually removes external storage without clicking the eject icon">
-   Your data may have been lost or damaged. Next time, be sure to click the eject icon in the Files app before removing your device.
+  <message name="IDS_DEVICE_HARD_UNPLUGGED_TITLE" desc="Text of notification title which is shown when user manually removes external storage without clicking the eject icon">
+   Whoa, there. Be careful.
+  </message>
+  <message name="IDS_DEVICE_HARD_UNPLUGGED_MESSAGE" desc="Text of notification message which is shown when user manually removes external storage without clicking the eject icon">
+    In the future, be sure to eject your removable device in the Files app before unplugging it. Otherwise, you might lose data.
+  </message>
+  <message name="IDS_DEVICE_HARD_UNPLUGGED_BUTTON_LABEL" desc="Text of button label which is shown when user manually removes external storage without clicking the eject icon">
+    Got it
   </message>
 
   <!-- Formatting device notifications -->
@@ -5477,4 +5383,15 @@
     Failed to submit NDEF:
   </message>
 
+  <!-- About the security section in the settings page -->
+  <message name="IDS_OPTIONS_SECURITY_SECTION_TITLE" desc="The title of the security section in the settings page.">
+    Security
+  </message>
+  <message name="IDS_OPTIONS_CONSUMER_MANAGEMENT_ENROLL_DESCRIPTION" desc="Description of the consumer management enroll button in the settings page.">
+    Let Google help you remotely lock, erase, and locate your device.
+  </message>
+  <message name="IDS_OPTIONS_CONSUMER_MANAGEMENT_ENROLL_BUTTON" desc="The text of the consumer management enroll button in the settings page.">
+    Enroll
+  </message>
+
 </grit-part>
diff --git a/chrome/app/chromium_strings.grd b/chrome/app/chromium_strings.grd
index 733d9ae..3563861 100644
--- a/chrome/app/chromium_strings.grd
+++ b/chrome/app/chromium_strings.grd
@@ -378,12 +378,6 @@
       <message name="IDS_UNINSTALL_APP_LAUNCHER" desc="The text of the shortcut in the Start Menu for uninstalling App Launcher.">
         Uninstall Chromium App Launcher
       </message>
-      <message name="IDS_FIRSTRUN_DLG_TITLE" desc="Dialog title for first-run dialog">
-        Welcome to Chromium
-      </message>
-      <message name="IDS_FIRSTRUN_DLG_OK" desc="Text for OK button on first-run dialog">
-        Start Chromium
-      </message>
       <message name="IDS_FR_CUSTOMIZE_DEFAULT_BROWSER" desc="Default browser checkbox label">
         Make Chromium the default browser
       </message>
@@ -663,13 +657,6 @@
         Yes, exit Chromium
       </message>
 
-      <!-- "Create application shortcuts" dialog -->
-      <if expr="is_posix and not is_macosx and not is_ios">
-        <message name="IDS_CREATE_SHORTCUTS_ERROR_LABEL" desc="Contents of the main label in the error dialog box when creating an application shortcut failed for unknown reasons.">
-          Chromium could not create an application shortcut.
-        </message>
-      </if>
-
       <!-- Autolaunch infobar -->
       <message name="IDS_AUTO_LAUNCH_INFOBAR_TEXT" desc="The text to show in the infobar when Chromium was automatically launched on startup">
         Chromium is configured to automatically launch when you start your computer.
@@ -874,9 +861,6 @@
         <message name="IDS_ONE_CLICK_SIGNIN_DIALOG_MESSAGE_NEW" desc="The message of the one click sign-in dialog.">
           You're signed in as <ph name="USER_EMAIL_ADDRESS">$1<ex>foo@gmail.com</ex></ph>. Now you can access your bookmarks, history, and other settings on all your signed in devices.
         </message>
-        <message name="IDS_ONE_CLICK_SIGNIN_BUBBLE_MESSAGE_FULL" desc="The entire message of the one click sign-in bubble.">
-          You're now signed in to Chromium! Your bookmarks, history, and other settings will be synced to your Google Account.
-        </message>
         <message name="IDS_ONE_CLICK_SIGNIN_BUBBLE_MESSAGE_NEW" desc="The body of the sync promo NTP bubble.">
           Now that you're signed in, you can get your tabs, bookmarks and other Chromium stuff across your laptop, phone and tablet. You will also receive more relevant suggestions and features on Google services.
         </message>
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index b918d7f..e03a023 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -1452,20 +1452,6 @@
         </message>
       </if>
 
-      <!-- XPFrame buttons tooltips -->
-      <message name="IDS_XPFRAME_MINIMIZE_TOOLTIP" desc="The tooltip used for the minimize button">
-        Minimize
-      </message>
-      <message name="IDS_XPFRAME_RESTORE_TOOLTIP" desc="The tooltip used for the restore button">
-        Restore
-      </message>
-      <message name="IDS_XPFRAME_MAXIMIZE_TOOLTIP" desc="The tooltip used for the maximize button">
-        Maximize
-      </message>
-      <message name="IDS_XPFRAME_CLOSE_TOOLTIP" desc="The tooltip used for the close button">
-        Close
-      </message>
-
       <if expr="is_macosx">
         <message name="IDS_PREFERENCES" desc="The Mac menu item to open the preferences window in the app menu.">
           Preferences...
@@ -2220,6 +2206,9 @@
         <message name="IDS_APPLICATION_INFO_WEB_STORE_LINK" desc="Text for the link that opens the app in the Web Store.">
           View in Web Store
         </message>
+        <message name="IDS_APPLICATION_INFO_CREATE_SHORTCUTS_BUTTON_TEXT" desc="Text for the button that opens the dialog to create shortcuts for the app.">
+          Create shortcuts
+        </message>
         <message name="IDS_APPLICATION_INFO_UNINSTALL_BUTTON_TEXT" desc="Text for the button that uninstalls the app.">
           Uninstall
         </message>
@@ -2237,6 +2226,9 @@
         <message name="IDS_APPLICATION_INFO_WEB_STORE_LINK" desc="In Title Case: Text for the link that opens the app in the Web Store..">
           View in Web Store
         </message>
+        <message name="IDS_APPLICATION_INFO_CREATE_SHORTCUTS_BUTTON_TEXT" desc="In Title Case: Text for the button that opens the dialog to create shortcuts for the app.">
+          Create Shortcuts
+        </message>
         <message name="IDS_APPLICATION_INFO_UNINSTALL_BUTTON_TEXT" desc="In Title Case: Text for the button that uninstalls the app.">
           Uninstall
         </message>
@@ -2268,11 +2260,6 @@
       <message name="IDS_CREATE_SHORTCUTS_QUICK_LAUNCH_BAR_CHKBOX" desc="Label of the checkbox to create an application shortcut in quick launch bar.">
         Quick launch bar
       </message>
-      <if expr="is_posix and not is_macosx">
-        <message name="IDS_CREATE_SHORTCUTS_ERROR_TITLE" desc="Title of the error dialog box when creating an application shortcut failed.">
-          Failed to Create Application Shortcut
-        </message>
-      </if>
       <message name="IDS_PIN_TO_TASKBAR_CHKBOX" desc="Label of the checkbox to pin an application shortcut to taskbar.">
         Pin to Taskbar
       </message>
@@ -2684,47 +2671,7 @@
         PKCS #7, certificate chain
       </message>
 
-      <!-- Certificate selector dialog strings.  These are only used on platforms that don't have a native certificate selection dialog, such as GTK Linux. -->
-      <if expr="toolkit_uses_gtk">
-        <message name="IDS_CERT_SELECTOR_SITE_DESCRIPTION_LABEL" desc="Text in the certificate selection dialog before the site">
-          This site has requested that you identify yourself with a certificate:
-        </message>
-        <message name="IDS_CERT_SELECTOR_CHOOSE_DESCRIPTION_LABEL" desc="Text in the certificate selection dialog describing the certificate selector combobox and certificate details">
-          Choose a certificate to present as identification:
-        </message>
-        <message name="IDS_CERT_SELECTOR_DETAILS_DESCRIPTION_LABEL" desc="Text in the certificate selection dialog in the 'choose a certificate' section describing the certificate details">
-          Details of selected certificate:
-        </message>
-        <message name="IDS_CERT_SELECTOR_CERT_EXPIRED" desc="In the certificate selection dialog's combobox for choosing certificates, this text will be appended to any of the user's certs which are expired.">
-          (expired)
-        </message>
-        <message name="IDS_CERT_SELECTOR_CERT_NOT_YET_VALID" desc="In the certificate selection dialog's combobox for choosing certificates, this text will be appended to any of the user's certs which are not yet valid.">
-          (not yet valid)
-        </message>
-        <message name="IDS_CERT_SUBJECTNAME_FORMAT" desc="Format for detailed certificate subject in certificate details">
-          Issued to: <ph name="NAME">$1<ex>CN=VeriSign Browser Certificate,OU=Device Identifier - r1923847</ex></ph>
-        </message>
-        <message name="IDS_CERT_ISSUERNAME_FORMAT" desc="Format for detailed certificate issuer in certificate details">
-          Issued by: <ph name="NAME">$1<ex>CN=VeriSign Device CA,O="VeriSign, Inc.",C=US</ex></ph>
-        </message>
-        <message name="IDS_CERT_VALIDITY_RANGE_FORMAT" desc="Format for showing the range of dates a certificate is valid in the certificate details">
-          Valid from <ph name="START_DATE_TIME">$1<ex>7/2/09 7:18:34 PM</ex></ph> to <ph name="END_DATE_TIME">$2<ex>7/2/10 7:28:34 PM</ex></ph>
-        </message>
-        <message name="IDS_CERT_X509_EXTENDED_KEY_USAGE_FORMAT" desc="Format for showing the usages a certificate is valid for in the certificate details">
-          Purposes: <ph name="USAGES">$1<ex>SSL Client Certificate,Email Signer Certificate</ex></ph>
-        </message>
-        <message name="IDS_CERT_X509_KEY_USAGE_FORMAT" desc="Format for showing the key usages a certificate is valid for in the certificate details">
-          Certificate Key Usage: <ph name="USAGES">$1<ex>Signing,Key Encipherment</ex></ph>
-        </message>
-        <message name="IDS_CERT_EMAIL_ADDRESSES_FORMAT" desc="Format for showing the email address(es) a certificate is associated with in the certificate details">
-          Email: <ph name="EMAIL_ADDRESSES">$1<ex>foo@example.com</ex></ph>
-        </message>
-        <message name="IDS_CERT_TOKEN_FORMAT" desc="Format for showing the location a certificate is stored">
-          Stored in: <ph name="CERT_LOCATION">$1<ex>NSS Certificate Database</ex></ph>
-        </message>
-      </if>
-
-      <!-- Certificate viewer dialog strings.  These are used in WebUI and GTK certificate viewers. Android uses OS-level certificate manager -->
+      <!-- WebUI Certificate viewer dialog strings. Android uses an OS-level certificate manager. -->
       <if expr="not is_android">
         <message name="IDS_CERT_INFO_DIALOG_TITLE" desc="Title of dialog displaying info about a certificate">
           Certificate Viewer: <ph name="CERTIFICATE_NAME">$1<ex>www.google.com</ex></ph>
@@ -4347,84 +4294,11 @@
       <message name="IDS_EXTENSION_PROMPT_WARNING_ALL_HOSTS" desc="Permission string for access to data on all websites.">
         Access your data on all websites
       </message>
-      <message name="IDS_EXTENSION_PROMPT_WARNING_1_HOST" desc="Permission string for access to data on one website.">
-        Access your data on <ph name="WEBSITE_1">$1<ex>www.google.com</ex></ph>
-      </message>
-      <message name="IDS_EXTENSION_PROMPT_WARNING_2_HOSTS" desc="Permission string for access to data on two websites.">
-        Access your data on <ph name="WEBSITE_1">$1<ex>www.google.com</ex></ph> and <ph name="WEBSITE_2">$2<ex>www.reddit.com</ex></ph>
-      </message>
-      <message name="IDS_EXTENSION_PROMPT_WARNING_3_HOSTS" desc="Permission string for access to data on three websites.">
-        Access your data on <ph name="WEBSITE_1">$1<ex>www.google.com</ex></ph>, <ph name="WEBSITE_2">$2<ex>www.reddit.com</ex></ph>, and <ph name="WEBSITE_3">$3<ex>news.ycombinator.com</ex></ph>
-      </message>
-      <message name="IDS_EXTENSION_PROMPT_WARNING_HOSTS_DEFAULT" desc="Permission string for access to data on four or more websites. This is necessary for every language. This is the default for all the numbers NOT covered by special cases (singular, dual/two, few, many) some languages need. For CJK, Vietnamese, Turkish and Kannada, this is the only string necessary. For languages with singular-plural distinction, this is the generic plural. For Lithuanian, NUMBER_OF_WEBSITES is 11 .. 19.">
-        Access your data on <ph name="NUMBER_OF_WEBSITES">#<ex>5</ex></ph> websites
-      </message>
-
-      <if expr="lang not in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
-      <message name="IDS_EXTENSION_PROMPT_WARNING_HOST_SINGULAR" desc="Permission string for access to data on four or more websites. NUMBER_OF_WEBSITES is one or one-like numbers : 1 (many European and most Indian languages), 1 and 0 (French, Brazilian Portuguese and Hindi), 1,21,31, .. (Russian, Ukrainian, Croatian, Serbian, Latvian, Lithuanian), or 1, 101, 201, .. (Slovenian). Do NOT translate this for CJK, Vietnamese, Turkish and Kannada">
-        Access your data on <ph name="NUMBER_OF_WEBSITES">#<ex>1</ex></ph> websites
-      </message>
-      </if>
-      <if expr="lang in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
-      <message translateable="false" name="IDS_EXTENSION_PROMPT_WARNING_HOST_SINGULAR" desc="">
-        NA
-      </message>
-      </if>
-
-      <if expr="lang in ['ar', 'ro', 'lv']">
-      <message name="IDS_EXTENSION_PROMPT_WARNING_HOSTS_ZERO" desc="Permission string for access to data on four or more websites. NUMBER_OF_WEBSITES is 0 (Arabic, Latvian) or 0, 2..19, 101..119, ... (Romanian). For other languages, do NOT translate.">
-        Access your data on <ph name="NUMBER_OF_WEBSITES">#<ex>0</ex></ph> websites
-      </message>
-      </if>
-      <if expr="lang not in ['ar', 'ro', 'lv']">
-      <message translateable="false" name="IDS_EXTENSION_PROMPT_WARNING_HOSTS_ZERO" desc="">
-        NA
-      </message>
-      </if>
-
-      <if expr="lang in ['ga', 'sl', 'ar']">
-      <message name="IDS_EXTENSION_PROMPT_WARNING_HOSTS_TWO" desc="Permission string for access to data on four or more websites. NUMBER_OF_WEBSITES is two or two-like/dual numbers :  2 (Arabic and Irish) or  2, 102, 202 ... (Slovenian). For other languages, do NOT translated.">
-        Access your data on <ph name="NUMBER_OF_WEBSITES">#<ex>2</ex></ph> websites
-      </message>
-      </if>
-      <if expr="lang not in ['ga', 'sl', 'ar']">
-      <message translateable="false" name="IDS_EXTENSION_PROMPT_WARNING_HOSTS_TWO" desc="">
-        NA
-      </message>
-      </if>
-
-      <if expr="lang  in ['ru', 'lt', 'hr', 'uk', 'cs', 'sk', 'pl', 'sl', 'ar']">
-      <message name="IDS_EXTENSION_PROMPT_WARNING_HOSTS_FEW" desc="Permission string for access to data on four or more websites. NUMBER_OF_WEBSITES is few or few-like numbers in Arabic, Russian, Polish, Croatian, Serbian, Ukrainian, Czech, Slovak, Slovenian, Latvian. For other languages, do NOT translate.">
-        Access your data on <ph name="NUMBER_OF_WEBSITES">#<ex>3</ex></ph> websites
-      </message>
-      </if>
-      <if expr="lang not in ['ru', 'lt', 'hr', 'uk', 'cs', 'sk', 'pl', 'sl', 'ar']">
-      <message translateable="false" name="IDS_EXTENSION_PROMPT_WARNING_HOSTS_FEW" desc="">
-        NA
-      </message>
-      </if>
-
-      <if expr="lang == 'ar'">
-      <message name="IDS_EXTENSION_PROMPT_WARNING_HOSTS_MANY" meaning="many" desc="Permission string for access to data on four or more websites. NUMBER_OF_WEBSITES is 11 through 99 in Arabic. For all other languages, do NOT translate.">
-        Access your data on <ph name="NUMBER_OF_WEBSITES">#<ex>23</ex></ph> websites
-      </message>
-      </if>
-      <if expr="lang != 'ar'">
-      <message translateable="false" name="IDS_EXTENSION_PROMPT_WARNING_HOSTS_MANY" desc="">
-        NA
-      </message>
-      </if>
-      <message name="IDS_EXTENSION_PROMPT_WARNING_HOST_LIST" desc="Permission string (heading) for a list of websites.">
-        Access your data on the following websites:
-      </message>
-      <message name="IDS_EXTENSION_PROMPT_WARNING_HOST_LIST_ENTRY" desc="Single entry in a list of websites.">
-        - <ph name="WEBSITE_1">$1<ex>www.google.com</ex></ph>
-      </message>
       <message name="IDS_EXTENSION_PROMPT_WARNING_FAVICON" desc="Permission string for access to favicons.">
-        Access the icons of the websites you visit.
+        Access the icons of the websites you visit
       </message>
       <message name="IDS_EXTENSION_PROMPT_WARNING_INPUT" desc="Permission string for access to input.">
-        Access anything you type.
+        Access anything you type
       </message>
       <message name="IDS_EXTENSION_PROMPT_WARNING_BOOKMARKS" desc="Permission string for access to bookmarks.">
         Read and modify your bookmarks
@@ -4466,19 +4340,10 @@
         Access input devices over USB and Bluetooth
       </message>
       <message name="IDS_EXTENSION_PROMPT_WARNING_BLUETOOTH" desc="Permission string for general access to the Bluetooth API.">
-        Access information about Bluetooth devices paired with your system.
+        Access information about Bluetooth devices paired with your system
       </message>
       <message name="IDS_EXTENSION_PROMPT_WARNING_BLUETOOTH_DEVICES" desc="Permission string for implementing Bluetooth profiles.">
-        Access Bluetooth devices paired with your system.
-      </message>
-      <message name="IDS_EXTENSION_PROMPT_WARNING_USB_DEVICE" desc="Permission string for access to a specific USB device.">
-        Access the USB device <ph name="PRODUCT_NAME">$1<ex>SoundKnob</ex></ph> from <ph name="VENDOR_NAME">$2<ex>Griffin Technology</ex></ph>.
-      </message>
-      <message name="IDS_EXTENSION_PROMPT_WARNING_USB_DEVICE_MISSING_VENDOR" desc="Permission string for access to a specific USB device when a vendor name cannot be established for a USB device.">
-        Access the USB device.
-      </message>
-      <message name="IDS_EXTENSION_PROMPT_WARNING_USB_DEVICE_MISSING_PRODUCT" desc="Permission string for access to a specific USB device when a product name cannot be established for a USB device.">
-        Access the USB device from <ph name="VENDOR_NAME">$1<ex>Griffin Technology</ex></ph>.
+        Access Bluetooth devices paired with your system
       </message>
       <message name="IDS_EXTENSION_PROMPT_WARNING_AUDIO_CAPTURE" desc="Permission string for access to audio capture devices.">
         Use your microphone
@@ -4508,34 +4373,16 @@
         Write to files and folders that you open in the application
       </message>
       <message name="IDS_EXTENSION_PROMPT_WARNING_MEDIA_GALLERIES_READ_WRITE" desc="Permission string for access to read and write to all of the user's media galleries.">
-        Access and change photos, music, and other media from your computer.
+        Access and change photos, music, and other media from your computer
       </message>
       <message name="IDS_EXTENSION_PROMPT_WARNING_MEDIA_GALLERIES_READ_DELETE" desc="Permission string for access to read and delete all of the user's media galleries.">
-        Access and delete photos, music, and other media from your computer.
-      </message>
-      <message name="IDS_EXTENSION_PROMPT_WARNING_MEDIA_GALLERIES_READ" desc="Permission string for access to read all of the user's media galleries.">
-        Access photos, music, and other media from your computer.
+        Access and delete photos, music, and other media from your computer
       </message>
       <message name="IDS_EXTENSION_PROMPT_WARNING_SERIAL" desc="Permission string for access to serial devices.">
         Use serial devices attached to your computer
       </message>
-      <message name="IDS_EXTENSION_PROMPT_WARNING_SOCKET_ANY_HOST" desc="Permission string for access to any computer on the local network or internet.">
-        Exchange data with any computer on the local network or internet
-      </message>
-      <message name="IDS_EXTENSION_PROMPT_WARNING_SOCKET_HOSTS_IN_DOMAIN" desc="Permission string for access to any computer within a single domains on the local network or internet.">
-        Exchange data with any computer in the domain <ph name="DOMAIN">$1<ex>example.com</ex></ph>
-      </message>
-      <message name="IDS_EXTENSION_PROMPT_WARNING_SOCKET_HOSTS_IN_DOMAINS" desc="Permission string for access to any computer within multiple domains on the local network or internet.">
-        Exchange data with any computer in the domains: <ph name="DOMAINS">$1<ex>example.com example.org</ex></ph>
-      </message>
-      <message name="IDS_EXTENSION_PROMPT_WARNING_SOCKET_SPECIFIC_HOST" desc="Permission string for access to a single specific computers on the local network or internet.">
-        Exchange data with the computer named <ph name="HOSTNAME">$1<ex>foo.example.com</ex></ph>
-      </message>
-      <message name="IDS_EXTENSION_PROMPT_WARNING_SOCKET_SPECIFIC_HOSTS" desc="Permission string for access to multiple specific computers on the local network or internet.">
-        Exchange data with the computers named: <ph name="HOSTNAMES">$1<ex>foo.example.com bar.example.com</ex></ph>
-      </message>
       <message name="IDS_EXTENSION_PROMPT_WARNING_SYSTEM_INDICATOR" desc="Permission string for access to an icon in the system indicator area, such as the taskbar or system tray.">
-        Display and manage an icon in the system indicator area.
+        Display an icon in the system indicator area
       </message>
       <message name="IDS_EXTENSION_PROMPT_WARNING_SYNCFILESYSTEM" desc="Permission string for synchronizing files to the user's Google Drive">
         Store data in your Google Drive account
@@ -4568,10 +4415,7 @@
         Block parts of web pages
       </message>
       <message name="IDS_EXTENSION_PROMPT_WARNING_BLUETOOTH_PRIVATE" desc="Permission string for Bluetooth Private API.">
-        Control Bluetooth adapter state and pairing.
-      </message>
-      <message name="IDS_EXTENSION_PROMPT_WARNING_NETWORK_STATE" desc="Permission string for network list access.">
-        Access list of network connections
+        Control Bluetooth adapter state and pairing
       </message>
       <message name="IDS_EXTENSION_PROMPT_WARNING_ACCESSIBILITY_FEATURES_MODIFY" desc="Permission string for modifying acccessibility settings via extension API shown when an extension utilizing the API is installed.">
         Modify your accessibility settings
@@ -4579,17 +4423,8 @@
       <message name="IDS_EXTENSION_PROMPT_WARNING_ACCESSIBILITY_FEATURES_READ" desc="Permission string for modifying acccessibility settings via extension API shown when a extension utilizing the API is installed.">
         Read your accessibility settings
       </message>
-      <message name="IDS_EXTENSION_PROMPT_WARNING_SEARCH_SETTINGS_OVERRIDE" desc="Permission string for search settings override.">
-        Change your search settings to: <ph name="SEARCH_HOST">$1<ex>url.search.com</ex></ph>
-      </message>
-      <message name="IDS_EXTENSION_PROMPT_WARNING_HOME_PAGE_SETTING_OVERRIDE" desc="Permission string for home page override.">
-        Change your home page to: <ph name="HOME_PAGE">$1<ex>home.page.com/home.html</ex></ph>
-      </message>
-      <message name="IDS_EXTENSION_PROMPT_WARNING_START_PAGE_SETTING_OVERRIDE" desc="Permission string for start page override.">
-        Change your start page to: <ph name="START_PAGE">$1<ex>start.page.com/start.html</ex></ph>
-      </message>
       <message name="IDS_EXTENSION_PROMPT_WARNING_AUTOMATION" desc="Permission string for access to accessibility tree. TODO(aboxhall/dtseng): write more accurate description; write different versions for different permission levels">
-        Access and interact with all web pages.
+        Access and interact with all web pages
       </message>
 
       <!-- Extension/App error messages -->
@@ -4668,24 +4503,12 @@
       <message name="IDS_EXTENSION_WINDOW_SHAPE_NOT_SUPPORTED" desc="Error message when an extension has a requirement for shaped windows that the system does not support.">
         Shaped windows are not supported.
       </message>
-      <message name="IDS_EXTENSION_CANT_INSTALL_POLICY_BLOCKED" desc="Error message when a user tries to install an extension that is blocked by administrator policy.">
-        <ph name="EXTENSION_NAME">$1<ex>Google Talk</ex></ph> (extension ID "<ph name="EXTENSION_ID">$2<ex>nckgahadagoaajjgafhacjanaoiihapd</ex></ph>") is blocked by the administrator.
-      </message>
       <message name="IDS_EXTENSION_CANT_INSTALL_IN_DEVICE_LOCAL_ACCOUNT" desc="Error message when a user tries to install or the administrator tries to force-install through policy an extension that is not allowed in a device-local account.">
         <ph name="EXTENSION_NAME">$1<ex>Google Talk</ex></ph> (extension ID "<ph name="EXTENSION_ID">$2<ex>nckgahadagoaajjgafhacjanaoiihapd</ex></ph>") is not allowed in this type of session.
       </message>
-      <message name="IDS_EXTENSION_CANT_MODIFY_POLICY_REQUIRED" desc="Error message when a user tries to remove or change an extension that is required by administrator policy.">
-        The administrator of this machine requires <ph name="EXTENSION_NAME">$1<ex>Google Talk</ex></ph> to be installed. It cannot be removed or modified.
-      </message>
       <message name="IDS_EXTENSION_MOVE_DIRECTORY_TO_PROFILE_FAILED" desc="">
         Could not move extension directory into profile.
       </message>
-      <message name="IDS_EXTENSION_MANIFEST_UNREADABLE" desc="">
-        Manifest file is missing or unreadable.
-      </message>
-      <message name="IDS_EXTENSION_MANIFEST_INVALID" desc="">
-        Manifest file is invalid.
-      </message>
       <message name="IDS_EXTENSION_INSTALL_NOT_ENABLED" desc="Error displayed during installation of apps or extensions when installation is not enabled.">
         Installation is not enabled.
       </message>
@@ -4716,15 +4539,9 @@
       <message name="IDS_EXTENSION_OVERLAPPING_WEB_EXTENT" desc="Error message when a user tries to install an app with a web extent that overlaps another installed app.">
         Could not add application because it conflicts with "<ph name="APP_NAME">$1<ex>Google Mail</ex></ph>".
       </message>
-      <message name="IDS_EXTENSION_LOCALES_NO_DEFAULT_LOCALE_SPECIFIED" desc="">
-        Localization used, but default_locale wasn't specified in the manifest.
-      </message>
       <message name="IDS_EXTENSION_INVALID_IMAGE_PATH" desc="">
         Could not load '<ph name="IMAGE_PATH">$1<ex>/path/to/file</ex></ph>' for theme.
       </message>
-      <message name="IDS_EXTENSION_LOAD_ICON_FAILED" desc="">
-        Could not load extension icon '<ph name="ICON">$1<ex>icon.png</ex></ph>'.
-      </message>
       <message name="IDS_EXTENSION_LOAD_JAVASCRIPT_FAILED" desc="">
         Could not load javascript '<ph name="RELATIVE_PATH">$1<ex>javas.js</ex></ph>' for content script.
       </message>
@@ -4743,12 +4560,6 @@
       <message name="IDS_EXTENSION_LOAD_ICON_FOR_BROWSER_ACTION_FAILED" desc="">
         Could not load icon '<ph name="ICON">$1<ex>icon.png</ex></ph>' for browser action.
       </message>
-      <message name="IDS_EXTENSION_LOAD_BACKGROUND_SCRIPT_FAILED" desc="">
-        Could not load background script '<ph name="BACKGROUND_SCRIPT">$1<ex>script.js</ex></ph>'.
-      </message>
-      <message name="IDS_EXTENSION_LOAD_BACKGROUND_PAGE_FAILED" desc="">
-        Could not load background page '<ph name="BACKGROUND_PAGE">$1<ex>page.html</ex></ph>'.
-      </message>
       <message name="IDS_EXTENSION_LOAD_OPTIONS_PAGE_FAILED" desc="">
         Could not load options page '<ph name="OPTIONS_PAGE">$1<ex>page.html</ex></ph>'.
       </message>
@@ -4777,9 +4588,6 @@
       <message name="IDS_EXTENSION_INSTALL_PROCESS_CRASHED" desc="Error message in case package fails to install a utility process crashed.">
         Could not install package because a utility process crashed. Try restarting chrome and trying again.
       </message>
-      <message name="IDS_EXTENSION_CONTAINS_PRIVATE_KEY" desc="Error message when an extension includes a file containing a private key.">
-        This extension includes the key file '<ph name="KEY_PATH">$1<ex>relative/path/to/file.pem</ex></ph>'. You probably don't want to do that.
-      </message>
       <message name="IDS_EXTENSION_PACKAGE_DIRECTORY_ERROR" desc="Message for when an error occurs while trying to create the temporary directory needed to unzip a packaged extension or app.">
         Could not create directory for unzipping: '<ph name="DIRECTORY_PATH">$1<ex>profile/Extensions/CRX_INSTALL</ex></ph>'
       </message>
@@ -4868,6 +4676,12 @@
         <message name="IDS_EXTENSIONS_UPDATE_BUTTON" desc="Text for the 'Update extensions' button.">
           Update extensions now
         </message>
+        <message name="IDS_EXTENSIONS_APPS_DEV_TOOLS_PROMO_TEXT" desc="The text encouraging users to get the Apps Developer Tools.">
+          Chrome Apps &amp; Extensions Developer Tool is the new way to debug your apps and extensions.
+        </message>
+        <message name="IDS_EXTENSIONS_APPS_DEV_TOOLS_LINK_TEXT" desc="The text of the link to get the Apps Developer Tools.">
+          Visit website
+        </message>
         <message name="IDS_EXTENSIONS_NONE_INSTALLED" desc="Text that lets the user know that no extensions are installed.">
           Boo... You have no extensions :-(
         </message>
@@ -5012,6 +4826,9 @@
         <message name="IDS_EXTENSIONS_ENABLE_INCOGNITO" desc="The checkbox for enabling an extension in incognito.">
           Allow in incognito
         </message>
+        <message name="IDS_EXTENSIONS_ENABLE_ERROR_COLLECTION" desc="The checkbox for enabling error collection for an extension.">
+          Collect errors
+        </message>
         <message name="IDS_EXTENSIONS_ALLOW_FILE_ACCESS" desc="The checkbox for allowing an extension access to run scripts on file URLs.">
           Allow access to file URLs
         </message>
@@ -5224,9 +5041,6 @@
       <message name="IDS_EXTENSIONS_HIDE_DETAILS" desc="Tooltip for the button next to an extension that hides details">
         Hide Details
       </message>
-      <message name="IDS_EXTENSIONS_DETAILS" desc="Tooltip for the button next to an extension that toggles showing details">
-        Details
-      </message>
 
       <!-- Strings for the extensions permission dialog experiment -->
       <!-- TODO(meacer): Remove these once the experiments are completed. -->
@@ -5314,6 +5128,9 @@
       <message name="IDS_EXTENSION_WARNINGS_DOWNLOAD_FILENAME_CONFLICT" desc="Warning message which indicates that two or more extensions tried to determine the filename of a downloaded file in a conflicting way and the modification of this extension was ignored">
         This extension failed to name the download "<ph name="ATTEMPTED_FILENAME">$1<ex>apple.png</ex></ph>" because another extension (<ph name="EXTENSION_NAME">$2<ex>My Cool Extension</ex></ph>) determined a different filename "<ph name="ACTUAL_FILENAME">$3<ex>banana.png</ex></ph>".
       </message>
+      <message name="IDS_EXTENSION_WARNING_RELOAD_TOO_FREQUENT" desc="Warning message which indates that an extension got stuck in a reload loop.">
+        This extension reloaded itself too frequently.
+      </message>
 
       <!-- External extension install alerts -->
       <!-- TODO(mpcomplete): We may need to change Chrome to
@@ -5851,6 +5668,12 @@
       <message name="IDS_FLAGS_FORCE_UNIVERSAL_ACCELERATED_OVERFLOW_SCROLL_MODE_DESCRIPTION" desc="Description of the 'Universal accelerated overflow scroll mode' lab.">
         Puts scrolling content in composited layers, even in those cases where promoting the overflow scrolling element to a stacking context and a containing block would have broken stacking or clipping.
       </message>
+      <message name="IDS_FLAGS_DISABLE_LAYER_SQUASHING_NAME" desc="Name of the 'Disable layer squashing' lab.">
+        Disable layer squashing
+      </message>
+      <message name="IDS_FLAGS_DISABLE_LAYER_SQUASHING_DESCRIPTION" desc="Description of the 'Disable layer squashing' lab.">
+        Prevents the automatic combining of composited layers.
+      </message>
       <message name="IDS_FLAGS_ENABLE_DIRECT_WRITE_NAME" desc="Name of the 'Enable DirectWrite' lab.">
         Enable DirectWrite
       </message>
@@ -6002,16 +5825,9 @@
       <message name="IDS_FLAGS_ENABLE_OVERLAY_SCROLLBARS_DESCRIPTION" desc="Description for the flag to turn on overlay scrollbars">
         Enable the experimental overlay scrollbars implementation. You must also enable threaded compositing to have the scrollbars animate.
       </message>
-      <message name="IDS_FLAGS_ENABLE_AUTOLOGIN_NAME" desc="Title for the flag to auto-sign in the user">
-        Enable auto sign-in
-      </message>
       <message desc="Message to display when auto-login fails. [CHAR-LIMIT=64]" name="IDS_AUTO_LOGIN_FAILED">
         Automatic sign-in failed
       </message>
-      <message name="IDS_FLAGS_ENABLE_AUTOLOGIN_DESCRIPTION" desc="Description for the flag to pre-login the user">
-        When enabled, visiting a Google account sign-in page will trigger an infobar allowing easy sign-in with the Google account connected to the profile.
-        Auto sign-in is always disabled if the profile is not connected to an account, regardless of this flag.
-      </message>
       <message name="IDS_FLAGS_SHOW_AUTOFILL_TYPE_PREDICTIONS_NAME" desc="Title for the flag to show Autofill field type predictions for all forms">
         Show Autofill predictions
       </message>
@@ -6314,7 +6130,7 @@
         Enable TouchView maximizing UI for testing
       </message>
       <message name="IDS_FLAGS_ASH_ENABLE_TOUCH_VIEW_TESTING_DESCRIPTION" desc="Description for the flag to enable the TouchView testing mode.">
-        Enable Ctrl+Alt+Shift+D to toggle the TouchView maximizing mode.
+        Enable Ctrl+Alt+Shift+8 to toggle the TouchView maximizing mode.
       </message>
       <message name="IDS_FLAGS_ENABLE_FULL_MULTI_PROFILE_MODE" desc="Title for the full multi profile mode flag.">
         Enable side-by-side multi profile mode
@@ -6974,11 +6790,11 @@
       <message name="IDS_FLAGS_ENABLE_EASY_UNLOCK_DESCRIPTION" desc="Description for flag to Enable Easy Unlock.">
         Easy Unlock allows you to unlock your Chromebook when in proximity to your phone.
       </message>
-      <message name="IDS_FLAGS_ENABLE_EMBEDDED_SHARED_WORKER_NAME" desc="Name for In-renderer Shared Worker.">
-        In-renderer Shared Worker.
+      <message name="IDS_FLAGS_DISABLE_EMBEDDED_SHARED_WORKER_NAME" desc="Name of the flag to disable In-renderer Shared Worker.">
+        Disable In-renderer Shared Worker.
       </message>
-      <message name="IDS_FLAGS_ENABLE_EMBEDDED_SHARED_WORKER_DESCRIPTION" desc="Description for flag to In-renderer Shared Worker.">
-        Run Shared Worker in a renderer process.
+      <message name="IDS_FLAGS_DISABLE_EMBEDDED_SHARED_WORKER_DESCRIPTION" desc="Description of the flag to disable In-renderer Shared Worker.">
+        Disable In-Renderer Shared Worker to run Shared Worker in a legacy dedicated worker process.
       </message>
 
       <!-- Crashes -->
@@ -8087,18 +7903,6 @@
       <message name="IDS_MEDIA_PEPPER_FLASH_CHANGE_LINK" desc="The link to change Pepper Flash camera and microphone settings.">
         Change
       </message>
-      <message name="IDS_MEDIA_GALLERY_SECTION_LABEL" desc="The label for the section of content settings that relates to media galleries.">
-        Media galleries
-      </message>
-      <message name="IDS_MEDIA_GALLERY_MANAGE_TITLE" desc="The title of the media gallery manager overlay.">
-        Media galleries
-      </message>
-      <message name="IDS_MEDIA_GALLERY_MANAGE_BUTTON" desc="The text for the button that opens the media gallery manager overlay.">
-        Manage galleries
-      </message>
-      <message name="IDS_MEDIA_GALLERY_ADD_NEW_BUTTON" desc="The text for the button that opens a dialog to select a new media gallery.">
-        Add...
-      </message>
       <message name="IDS_MEDIA_AUDIO_EXCEPTION_HEADER" desc="A column header for the action column of the media audio exceptions dialog">
         Audio
       </message>
@@ -8907,6 +8711,12 @@
       <message name="IDS_ERRORPAGES_BUTTON_RELOAD" desc="Label for the button on an error page to reload the page">
         Reload
       </message>
+      <message name="IDS_ERRORPAGES_BUTTON_LOAD_STALE" desc="Label for the button on an error page to load a stale entry from the cache">
+        Load Stale Local Copy
+      </message>
+      <message name="IDS_ERRORPAGES_BUTTON_LOAD_STALE_HELP" desc="Explanation for the BUTTON_LOAD_STALE button">
+        Load a known-to-be-out-of-date saved copy of this page.
+      </message>
       <message name="IDS_ERRORPAGES_BUTTON_DIAGNOSE" desc="Label for the button that invokes the connection diagnostic tool on the error page">
         Diagnose errors...
       </message>
@@ -9468,12 +9278,19 @@
       <message name="IDS_ERRORPAGES_SUMMARY_BLOCKED_BY_ADMINISTRATOR" desc="Summary in the error page when an administrator policy blocks a request.">
         Your &lt;strong&gt;system administrator&lt;/strong&gt; has blocked access to this webpage.
       </message>
+       <message name="IDS_ERRORPAGES_SUMMARY_BLOCKED_ENROLLMENT_CHECK_PENDING" desc="Summary in the error page when the user tries to browse before the forced enrollment check has finished.">
+        This device has not finished its first run steps.
+      </message>
       <message name="IDS_ERRORPAGES_DETAILS_BLOCKED" desc="The error message displayed when an extension blocks a request.">
         Requests to the server have been blocked by an extension.
       </message>
       <message name="IDS_ERRORPAGES_DETAILS_BLOCKED_BY_ADMINISTRATOR" desc="The error message displayed when a policy blocks a request.">
         Requests to the server have been blocked by a policy.
       </message>
+      <message name="IDS_ERRORPAGES_DETAILS_BLOCKED_ENROLLMENT_CHECK_PENDING" desc="The error message displayed when the user tries to browse before the forced enrollment check has finished.">
+        Browsing the Internet is disabled until the enterprise enrollment verification check has finished.
+        You can still use the diagnostic tool presented here to troubleshoot issues with your connectivity.
+      </message>
 
       <message name="IDS_ERRORPAGES_HTTP_POST_WARNING" desc="The error message displayed when the user navigates back or forward to a page which would resubmit post data. They can hit reload to send POST data again and load the page.">
         This webpage requires data that you entered earlier in order to be properly displayed. You can send this data again, but by doing so you will repeat any action this page previously performed.
@@ -10029,6 +9846,9 @@
         <message name="IDS_OPTIONS_TAB_TITLE" desc="The format of the title on the browser tab for an options subpage, e.g. Settings - Basics">
           <ph name="OPTIONS_TITLE">$1<ex>Settings</ex></ph> - <ph name="SUBPAGE_TITLE">$2<ex>Under the Hood</ex></ph>
         </message>
+        <message name="IDS_OPTIONS_DELETABLE_ITEM_DELETE_BUTTON" desc="The label of the button to delete an item in a list">
+          Delete this item
+        </message>
         <message name="IDS_OPTIONS_STARTUP_GROUP_NAME" desc="The title of the startup group">
           On startup
         </message>
@@ -10122,8 +9942,8 @@
         <message name="IDS_OPTIONS_EASY_UNLOCK_SECTION_TITLE" desc="The title of the Easy Unlock section on the settings page.">
           Easy Unlock
         </message>
-        <message name="IDS_OPTIONS_EASY_UNLOCK_SETUP_BUTTON" desc="The label of the button to setup Easy Unlock section on the settings page.">
-          Setup Easy Unlock
+        <message name="IDS_OPTIONS_EASY_UNLOCK_SETUP_BUTTON" desc="The label of the button to set up Easy Unlock section on the settings page.">
+          Set up Easy Unlock
         </message>
         <message name="IDS_OPTIONS_EASY_UNLOCK_CHECKBOX_LABEL" desc="The label beside the checkbox to enable or disable easy unlock.">
           Enable Easy Unlock for this device.
@@ -11616,6 +11436,9 @@
         <message name="IDS_PROFILES_PROFILE_MANAGE_ACCOUNTS_BUTTON" desc="Button in the avatar menu bubble view used to manage accounts for a profile.">
           Your accounts
         </message>
+        <message name="IDS_PROFILES_PROFILE_HIDE_MANAGE_ACCOUNTS_BUTTON" desc="Button in the avatar menu bubble view used to hide the accounts for a profile.">
+          Hide accounts
+        </message>
         <message name="IDS_PROFILES_PROFILE_TUTORIAL_LEARN_MORE" desc="The Learn More link in the avatar tutorial bubble.">
           Learn more
         </message>
@@ -11627,8 +11450,11 @@
         <message name="IDS_PROFILES_PROFILE_MANAGE_ACCOUNTS_BUTTON" desc="Button in the avatar menu bubble view used to manage accounts for a profile.">
           Your Accounts
         </message>
+        <message name="IDS_PROFILES_PROFILE_HIDE_MANAGE_ACCOUNTS_BUTTON" desc="Button in the avatar menu bubble view used to hide the accounts for a profile.">
+          Hide Accounts
+        </message>
         <message name="IDS_PROFILES_PROFILE_TUTORIAL_LEARN_MORE" desc="The Learn More link in the avatar tutorial bubble.">
-            Learn More
+          Learn More
         </message>
       </if>
       <message name="IDS_PROFILES_PROFILE_CHANGE_PHOTO_BUTTON" desc="Button in the avatar menu bubble view used to change the photo for a profile.">
@@ -11711,6 +11537,9 @@
       <message name="IDS_DEFAULT_AVATAR_NAME_25" desc="The default name given to a newly created profile with the sun and cloud avatar.">
         Shady
       </message>
+      <message name="IDS_DEFAULT_AVATAR_NAME_26" desc="The default name given to a newly created profile with the default placeholder avatar.">
+        Shadow
+      </message>
 
       <if expr="not use_titlecase">
         <message name="IDS_PROFILES_CUSTOMIZE_PROFILE" desc="Customize profile menu item and button title.">
@@ -11762,11 +11591,6 @@
           This account is already being used on this computer.
         </message>
       </if>
-      <if expr="chromeos">
-        <message name="IDS_MULTI_PROFILES_WARNING" desc="A notification message when user signs into a multiprofile session for the first time.">
-          You have enabled multiprofiles, an unsupported experimental mode in Chrome OS. Features may change or break.
-        </message>
-      </if>
 
      <!-- SafeBrowsing -->
       <message name="IDS_SAFE_BROWSING_MALWARE_TITLE" desc="SafeBrowsing Malware HTML title">
@@ -12194,7 +12018,7 @@
       <message name="IDS_OPTIONS_ADVANCED_SECTION_TITLE_CONTENT">
         Web content
       </message>
-      <message name="IDS_OPTIONS_ADVANCED_SECTION_TITLE_SECURITY">
+      <message name="IDS_OPTIONS_ADVANCED_SECTION_TITLE_CERTIFICATES">
         HTTPS/SSL
       </message>
       <message name="IDS_OPTIONS_ADVANCED_SECTION_TITLE_NETWORK">
@@ -12835,12 +12659,6 @@
 
       <!-- Desktop notifications -->
       <if expr="enable_notifications">
-        <message name="IDS_NOTIFICATION_BALLOON_DISMISS_LABEL" desc="Text on the button which dismisses the balloon.">
-          Dismiss
-        </message>
-        <message name="IDS_NOTIFICATION_BALLOON_SOURCE_LABEL" desc="Text which labels the balloon with the source origin.">
-          <ph name="SOURCE_ORIGIN">$1</ph>
-        </message>
         <message name="IDS_NOTIFICATION_PERMISSIONS" desc="Text requesting permission for desktop notifications.">
           Allow <ph name="site">$1<ex>mail.google.com</ex></ph> to show desktop notifications?
         </message>
@@ -12853,9 +12671,6 @@
         <message name="IDS_NOTIFICATION_PERMISSION_NO" desc="The label of the 'deny' button on the notification permission infobar.">
           Deny
         </message>
-        <message name="IDS_NOTIFICATION_OPTIONS_MENU_LABEL" desc="Text for the menu option">
-          Options
-        </message>
         <message name="IDS_NOTIFICATION_BALLOON_ENABLE_MESSAGE" desc="Text for the menu option to enable notification permission.">
           Enable notifications from <ph name="site">$1<ex>mail.google.com</ex></ph>
         </message>
@@ -14333,9 +14148,6 @@
       <message name="IDS_MEDIA_GALLERIES_UNATTACHED_LOCATIONS" desc="Header for media gallery permissions to locations not currently attached, i.e. removable devices which aren't plugged in">
         Unattached locations
       </message>
-      <message name="IDS_MEDIA_GALLERIES_UNLABELED_DEVICE" desc="Default name used for a device for which we can't find a better label.">
-        Unlabeled device
-      </message>
       <message name="IDS_MEDIA_GALLERIES_LAST_ATTACHED" desc="Explanatory text indicating to the user when a particular location was last attached, i.e. a removable device that isn't plugged in. The date presented will be a day in a localized format providing year, month, and day.">
         last attached on <ph name="DATE">$1<ex>1/22/11</ex></ph>
       </message>
diff --git a/chrome/app/google_chrome_strings.grd b/chrome/app/google_chrome_strings.grd
index f8af54b..df23aac 100644
--- a/chrome/app/google_chrome_strings.grd
+++ b/chrome/app/google_chrome_strings.grd
@@ -301,12 +301,6 @@
       <message name="IDS_UNINSTALL_APP_LAUNCHER" desc="The text of the shortcut in the Start Menu for uninstalling App Launcher.">
         Uninstall Google Chrome App Launcher
       </message>
-      <message name="IDS_FIRSTRUN_DLG_TITLE" desc="Dialog title for first-run dialog">
-        Welcome to Google Chrome
-      </message>
-      <message name="IDS_FIRSTRUN_DLG_OK" desc="Text for OK button on first-run dialog">
-        Start Google Chrome
-      </message>
       <message name="IDS_FR_CUSTOMIZE_DEFAULT_BROWSER" desc="Default browser checkbox label">
         Make Google Chrome the default browser
       </message>
@@ -587,13 +581,6 @@
         Yes, exit Chrome
       </message>
 
-      <!-- "Create application shortcuts" dialog -->
-      <if expr="is_posix and not is_macosx and not is_ios">
-        <message name="IDS_CREATE_SHORTCUTS_ERROR_LABEL" desc="Contents of the main label in the error dialog box when creating an application shortcut failed for unknown reasons.">
-          Google Chrome could not create an application shortcut.
-        </message>
-      </if>
-
       <!-- Autolaunch infobar -->
       <message name="IDS_AUTO_LAUNCH_INFOBAR_TEXT" desc="The text to show in the infobar when Chrome was automatically launched on startup">
         Google Chrome is configured to automatically launch when you start your computer.
@@ -798,9 +785,6 @@
         <message name="IDS_ONE_CLICK_SIGNIN_DIALOG_MESSAGE_NEW" desc="The message of the one click sign-in dialog.">
           You're signed in as <ph name="USER_EMAIL_ADDRESS">$1<ex>foo@gmail.com</ex></ph>. Now you can access your bookmarks, history, and other settings on all your signed in devices.
         </message>
-        <message name="IDS_ONE_CLICK_SIGNIN_BUBBLE_MESSAGE_FULL" desc="The entire message of the one click sign-in bubble.">
-          You're now signed in to Chrome! Your bookmarks, history, and other settings will be synced to your Google Account.
-        </message>
         <message name="IDS_ONE_CLICK_SIGNIN_BUBBLE_MESSAGE_NEW" desc="The body of the sync promo NTP bubble.">
           Now that you're signed in, you can get your tabs, bookmarks and other Chrome stuff across your laptop, phone and tablet. You will also receive more relevant suggestions and features on Google services.
         </message>
diff --git a/chrome/app/resources/chromium_strings_sw.xtb b/chrome/app/resources/chromium_strings_sw.xtb
index cbfc042..bfdd58e 100644
--- a/chrome/app/resources/chromium_strings_sw.xtb
+++ b/chrome/app/resources/chromium_strings_sw.xtb
@@ -53,7 +53,7 @@
 <translation id="3032787606318309379">Inaongeza kwenye Chromium...</translation>
 <translation id="4831257561365056138">Sakinusha Kizinduzi cha Programu ya Chromium</translation>
 <translation id="4222580632002216401">Sasa umeingia kwenye Chromium! Usawazishaji umezimwa na msimamizi wako.</translation>
-<translation id="4207043877577553402"><ph name="BEGIN_BOLD"/>Ilani:<ph name="END_BOLD"/> Chromium haiwezi kuzuia viendelezi kurekodi historia yako ya kuvinjari. Ili kulemaza kiendelezi hiki katika modi ya chini kwa chini, ondoa tiki kwenye chaguo hili.</translation>
+<translation id="4207043877577553402"><ph name="BEGIN_BOLD"/>Ilani:<ph name="END_BOLD"/> Chromium haiwezi kuzuia viendelezi kurekodi historia yako ya kuvinjari. Ili kuzima kiendelezi hiki katika hali fiche, ondoa tiki kwenye chaguo hili.</translation>
 <translation id="4516868174453854611">Kwa kuwa sasa umeingia katika akaunti, unaweza kupata vichupo vyako, alamisho na vitu vingine vya Chromium vilivyo katika kompyuta yako ndogo, simu na kompyuta kibao. Pia utapokea mapendekezo na vipengele vinavyofaa zaidi kuhusu huduma za Google.</translation>
 <translation id="985602178874221306">Waandishi wa Chromium</translation>
 <translation id="8628626585870903697">Chromium haijumuishi kitazamaji cha PDF kinachohitajika ili Uhakiki wa Uchapishaji ufanye kazi.</translation>
diff --git a/chrome/app/resources/generated_resources_am.xtb b/chrome/app/resources/generated_resources_am.xtb
index 8b7b0c8..3303656 100644
--- a/chrome/app/resources/generated_resources_am.xtb
+++ b/chrome/app/resources/generated_resources_am.xtb
@@ -637,7 +637,7 @@
 <translation id="1363055550067308502">ሙሉ/ግማሽ ስፋት ስልትን ቀይር</translation>
 <translation id="5933265534405972182">የሙከራ አልተመሳሰል ዲ ኤን ኤስ ደንበኛን ያንቁ።</translation>
 <translation id="3108967419958202225">ይምረጡ...</translation>
-<translation id="6451650035642342749">ራስ-ከፋች ቅንብሮችን አስወግድ</translation>
+<translation id="6451650035642342749">ራስ-ከፋች ቅንብሮችን አጽዳ</translation>
 <translation id="5948544841277865110">የግል አውታረ መረብ ያክሉ</translation>
 <translation id="7088434364990739311">የዝማኔ ፍተሻ መጀመር አልተሳካም (የስህተት ኮድ <ph name="ERROR"/>)።</translation>
 <translation id="7113536735712968774">ያነሰ አሳይ...</translation>
@@ -849,7 +849,7 @@
 <translation id="8257950718085972371">የካሜራ መዳረሻ ማገዱን ቀጥል</translation>
 <translation id="5390284375844109566">በመረጃ ጠቋሚ የተሰናዳ የውሂብ ጎታ</translation>
 <translation id="411666854932687641">የግል ማህደረ ትውስታ</translation>
-<translation id="119944043368869598">ሁሉንም አስወግድ</translation>
+<translation id="119944043368869598">ሁሉንም አጽዳ</translation>
 <translation id="3467848195100883852">ፊደል ራስ-ማረምን ያንቁ</translation>
 <translation id="1336254985736398701">የገጽ &amp;መረጃ አሳይ</translation>
 <translation id="5039440886426314758">እነዚህ መተግበሪያዎች እና ቅጥያዎች ይጫኑ?</translation>
@@ -2766,7 +2766,7 @@
 <translation id="736515969993332243">አውታረ መረቦችን በመቃኘት ላይ።</translation>
 <translation id="7806513705704909664">በአንዲት ጠቅታ የድር ቅጾችን ለመሙላት ራስ-ሙላን ያንቁ።</translation>
 <translation id="8282504278393594142">ምንም የተጫኑ ቅጥያዎች የሉም።</translation>
-<translation id="8026334261755873520">የአሰሳ ውሂብ አስወግድ</translation>
+<translation id="8026334261755873520">የአሰሳ ውሂብ አጽዳ</translation>
 <translation id="605011065011551813">አንድ ተሰኪ (<ph name="PLUGIN_NAME"/>) መልስ እየሰጠ አይደለም።</translation>
 <translation id="1467432559032391204">ግራ</translation>
 <translation id="6395423953133416962"><ph name="BEGIN_LINK1"/>የስርዓት መረጃ<ph name="END_LINK1"/> እና <ph name="BEGIN_LINK2"/>ልኬቶች<ph name="END_LINK2"/> ይላኩ</translation>
@@ -3380,6 +3380,7 @@
 <translation id="580886651983547002"><ph name="PRODUCT_NAME"/>
         ድር ጣቢያውን ሊደርስበት አልቻለም። ይሄ በተለምዶ በአውታረ መረብ ችግሮች ምክንያት ነው
         የሚከሰተው፣ ግን በአግባቡ ያልተዋቀረ ኬላ ወይም ተኪ አገልጋይ ውጤት ሊሆንም ይችላል።</translation>
+<translation id="4387554346626014084">የመተግበሪያ ማስጀመሪያ አመሳሰልን ያንቁ። ይሄ እንዲሁም ሲገኙ አቃፊዎችንም ያነቃል (OSX ያልሆኑ)።</translation>
 <translation id="5445557969380904478">ስለድምጽ ማወቂያ</translation>
 <translation id="4104400246019119780">እናመሰግናለን!</translation>
 <translation id="3487007233252413104">ስም-አልባ ተግባር</translation>
@@ -4797,7 +4798,7 @@
 <translation id="741689768643916402">የአጋጣሚ ነገር ሆኖ የአሜሪካ አድራሻ ያላቸው ገዢዎች ብቻ ናቸው Google Walletን በዚህ ነጋዴ ላይ መጠቀም የሚችሉት። የአሜሪካ ነዋሪ ከሆኑ እባክዎ |Wallet ላይ ያለው የቤት አድራሻዎን ይቀይሩ| ወይም Google Walletን ሳይጠቀሙ ይክፈሉ።</translation>
 <translation id="5828633471261496623">በማተም ላይ...</translation>
 <translation id="2420698750843121542">የተመሰጠሩ የማህደረ መረጃ ቅጥያዎችን በቪዲዮ እና ድምጽ ክፍሎች ላይ ያንቁ። ይሄ የቅርብ ጊዜ የተመሰጠሩ የማህደረ መረጃ ቅጥያዎችን ያነቃል።</translation>
-<translation id="5421136146218899937">የአሰሳ ውሂብ አስወግድ…</translation>
+<translation id="5421136146218899937">የአሰሳ ውሂብ አጽዳ…</translation>
 <translation id="5783059781478674569">የድምጽ ማወቂያ አማራጮች</translation>
 <translation id="5441100684135434593">ባለገመድ አውታረ መረብ</translation>
 <translation id="3285322247471302225">አዲስ &amp;ትር</translation>
@@ -4845,6 +4846,7 @@
 <translation id="8775404590947523323">አርትዖትዎችዎ በራስ-ሰር ተቀምጠዋል።<ph name="BREAKS"/>የመጀመሪያው ምስል ቅጂ ለማስቀመጥ «የመጀመሪያውን ተካ» የሚለው ላይ ያለውን ምልክት ያንሱ</translation>
 <translation id="5208988882104884956">ግማሽ ወርድ</translation>
 <translation id="1507170440449692343">ይህ ገጽ ካሜራዎን እንዳይደርስበት ታግዷል።</translation>
+<translation id="4189406272289638749">አንድ ቅጥያ &lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt; ይህን ቅንብር እየተቆጣጠረ ነው።</translation>
 <translation id="803771048473350947">ፋይል</translation>
 <translation id="6206311232642889873">ምስል ቅ&amp;ዳ</translation>
 <translation id="5158983316805876233">ተመሳሳዩን ተኪ ለሁሉም ፕሮቶኮሎች ይጠቀሙ</translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb
index ea87c37..8df1302 100644
--- a/chrome/app/resources/generated_resources_ar.xtb
+++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -3322,6 +3322,7 @@
 <translation id="6003177993629630467">قد يكون <ph name="PRODUCT_NAME"/> غير قادر على تحديث نفسه.</translation>
 <translation id="8923542159871018393">يتم تشغيل <ph name="EXTENSION_NAME"/> على هذه الصفحة.</translation>
 <translation id="580886651983547002">لا يستطيع <ph name="PRODUCT_NAME"/> الوصول إلى موقع الويب. يكون هذا في الأغلب الأعم بسبب مشكلات في الشبكة، ولكن ربما ينتج أيضًا عن تهيئة جدار ناري أو خادم وكيل بطريقة غير صحيحة.</translation>
+<translation id="4387554346626014084">‏تمكين مزامنة تطبيقات Launcher. ويؤدي هذا أيضًا إلى تمكين المجلدات متى توفرت (بخلاف OSX).</translation>
 <translation id="5445557969380904478">حول التعرف على الصوت</translation>
 <translation id="4104400246019119780">شكرًا!</translation>
 <translation id="3487007233252413104">وظيفة مجهولة</translation>
@@ -4782,6 +4783,7 @@
 <translation id="8775404590947523323">يتم حفظ التعديلات تلقائيًا.<ph name="BREAKS"/>للاحتفاظ بنسخة من الصورة الأصلية، يجب إلغاء تحديد &quot;استبدال الملف الأصلي&quot;</translation>
 <translation id="5208988882104884956">نصف العرض</translation>
 <translation id="1507170440449692343">تم حظر دخول هذه الصفحة إلى الكاميرا التابعة لك.</translation>
+<translation id="4189406272289638749">‏هناك إضافة، &lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt;، تتحكم في هذا الإعداد.</translation>
 <translation id="803771048473350947">ملف</translation>
 <translation id="6206311232642889873">نس&amp;خ صورة</translation>
 <translation id="5158983316805876233">استخدام نفس الخادم الوكيل مع جميع البروتوكولات</translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb
index 0c1d99b..3de8299 100644
--- a/chrome/app/resources/generated_resources_bg.xtb
+++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -3323,6 +3323,7 @@
 <translation id="580886651983547002"><ph name="PRODUCT_NAME"/>
         не може да се свърже с уебсайта.  Причина за това обикновено са проблеми с мрежата,
         но може да бъде и в резултат от грешна конфигурация на защитна стена или прокси сървър.</translation>
+<translation id="4387554346626014084">Активирайте синхронизирането на стартовия панел за приложения. Така ще активирате и папките, където са налице (без OSX).</translation>
 <translation id="5445557969380904478">Всичко за разпознаването на глас</translation>
 <translation id="4104400246019119780">Благодаря!</translation>
 <translation id="3487007233252413104">анонимна функция</translation>
@@ -4777,6 +4778,7 @@
 <translation id="8775404590947523323">Редакциите ви се запазват автоматично.<ph name="BREAKS"/>За да съхраните копие на оригиналното изображение, премахнете отметката от „Презаписване на оригинала“</translation>
 <translation id="5208988882104884956">С половин ширина</translation>
 <translation id="1507170440449692343">Достъпът на тази страница до камерата ви е блокиран.</translation>
+<translation id="4189406272289638749">Разширението &lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt; контролира тази настройка.</translation>
 <translation id="803771048473350947">Файл</translation>
 <translation id="6206311232642889873">Копи&amp;ране на изображението</translation>
 <translation id="5158983316805876233">Да се използва един и същ прокси сървър за всички протоколи</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb
index 5af415f..5f999da 100644
--- a/chrome/app/resources/generated_resources_bn.xtb
+++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -3356,6 +3356,7 @@
 <translation id="8923542159871018393">এই পৃষ্ঠাতে <ph name="EXTENSION_NAME"/> চলমান আছে৷</translation>
 <translation id="580886651983547002"><ph name="PRODUCT_NAME"/>
         ওয়েবসাইটে পৌঁছাতে পারেনি৷ এটি বিশেষভাবে নেটওয়ার্ক সমস্যাগুলির কারণে,        তবে ত্রুটিপূর্ণভাবে গঠিত ফায়ারওয়াল বা প্রক্সি সার্ভারের ফলও হতে পারে৷</translation>
+<translation id="4387554346626014084">অ্যাপ্লিকেশান লঞ্চার সিঙ্ক সক্ষম করুন৷ এছাড়াও এটি যেখানে উপলব্ধ হয় সেখানে ফোল্ডারগুলি সক্ষম করে (অ OSX)৷</translation>
 <translation id="5445557969380904478">স্বর স্বীকৃতি সম্বন্ধে</translation>
 <translation id="4104400246019119780">ধন্যবাদ!</translation>
 <translation id="3487007233252413104">নামহীন ক্রিয়াকলাপ</translation>
@@ -4818,6 +4819,7 @@
 <translation id="8775404590947523323">আপনার সম্পাদনাগুলি স্বয়ংক্রিয়ভাবে সংরক্ষিত হয়৷ আসল চিত্রের একটি কপি রাখতে <ph name="BREAKS"/> করুন , &quot;মূল লেখা পুনর্লিখন করুন&quot; চিহ্ন মুছে দিন</translation>
 <translation id="5208988882104884956">অর্ধচওড়া</translation>
 <translation id="1507170440449692343">এই পৃষ্ঠাটিকে আপনার ক্যামেরা অ্যাক্সেস করা থেকে অবরুদ্ধ করা হয়েছে৷</translation>
+<translation id="4189406272289638749">একটি এক্সটেনশান, &lt;b&gt; <ph name="EXTENSION_NAME"/> &lt;/ b&gt;, এই সেটিংটিকে নিয়ন্ত্রণ করছে৷</translation>
 <translation id="803771048473350947">ফাইল</translation>
 <translation id="6206311232642889873">চিত্র অনুলি&amp;পি করুন</translation>
 <translation id="5158983316805876233">সকল প্রোটোকলের জন্য একই প্রক্সি ব্যবহার করুন</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb
index 3723e82..744e35e 100644
--- a/chrome/app/resources/generated_resources_ca.xtb
+++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -3335,6 +3335,7 @@
 <translation id="580886651983547002"><ph name="PRODUCT_NAME"/>
         no pot connectar amb el lloc web. Normalment la causa són problemes amb la xarxa,
         però també pot ser que el tallafoc o el servidor intermediari estigui mal configurat.</translation>
+<translation id="4387554346626014084">Activa la sincronització del Menú d'aplicacions. Aquesta acció també admet carpetes on la funció estigui disponible (no ho està a OS X).</translation>
 <translation id="5445557969380904478">Quant al reconeixement de veu</translation>
 <translation id="4104400246019119780">Gràcies!</translation>
 <translation id="3487007233252413104">funció anònima</translation>
@@ -4794,6 +4795,7 @@
 <translation id="8775404590947523323">Els canvis es desen automàticament.<ph name="BREAKS"/>Per conservar una còpia de la imatge original, desmarqueu &quot;Sobreescriu l'original&quot;</translation>
 <translation id="5208988882104884956">Amplada mitjana</translation>
 <translation id="1507170440449692343">Aquesta pàgina no té permís per accedir a la càmera.</translation>
+<translation id="4189406272289638749">Una extensió, &lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt;, està controlant aquest paràmetre.</translation>
 <translation id="803771048473350947">Fitxer</translation>
 <translation id="6206311232642889873">Cop&amp;ia la imatge</translation>
 <translation id="5158983316805876233">Utilitza el mateix servidor intermediari per a tots els protocols</translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb
index 235eac1..a896888 100644
--- a/chrome/app/resources/generated_resources_cs.xtb
+++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -3338,6 +3338,7 @@
         nemůže získat přístup k požadovaným webovým stránkám. To je většinou
         způsobeno potížemi se sítí, příčinou však může být také chybně 
         nakonfigurovaná brána firewall nebo server proxy.</translation>
+<translation id="4387554346626014084">Aktivuje synchronizaci Spouštěče aplikací. Pokud je k dispozici funkce složek, bude povolena také (v systémech OS X nebude povolena).</translation>
 <translation id="5445557969380904478">Informace o rozpoznávání hlasu</translation>
 <translation id="4104400246019119780">Děkujeme</translation>
 <translation id="3487007233252413104">anonymní funkce</translation>
@@ -4797,6 +4798,7 @@
 <translation id="8775404590947523323">Úpravy se ukládají automaticky.<ph name="BREAKS"/>Chcete-li zachovat kopii původního obrázku, zrušte zaškrtnutí políčka Přepsat originál.</translation>
 <translation id="5208988882104884956">Poloviční šířka</translation>
 <translation id="1507170440449692343">Přístup této stránky k vaší kameře je zablokován.</translation>
+<translation id="4189406272289638749">Toto nastavení je spravováno rozšířením &lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt;.</translation>
 <translation id="803771048473350947">Soubor</translation>
 <translation id="6206311232642889873">&amp;Kopírovat obrázek</translation>
 <translation id="5158983316805876233">Pro všechny protokoly použít stejný server proxy</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb
index 5940307..e2fc87c 100644
--- a/chrome/app/resources/generated_resources_da.xtb
+++ b/chrome/app/resources/generated_resources_da.xtb
@@ -3343,6 +3343,7 @@
 <translation id="580886651983547002"><ph name="PRODUCT_NAME"/>
         kan ikke oprette forbindelse til websitet. Dette sker typisk pga. netværksproblemer,
         men det kan også skyldes en forkert konfigureret firewall eller proxyserver.</translation>
+<translation id="4387554346626014084">Aktivér synkronisering af Appliste. Dermed aktiveres også Mapper, hvor muligt (ikke OSX).</translation>
 <translation id="5445557969380904478">Om talegenkendelse</translation>
 <translation id="4104400246019119780">Tak</translation>
 <translation id="3487007233252413104">anonym funktion</translation>
@@ -4799,6 +4800,7 @@
 <translation id="8775404590947523323">Din ændringer gemmes automatisk.<ph name="BREAKS"/>Hvis du gemmer en kopi af det oprindelige billede, skal du fjerne markeringen for &quot;Overskriv originalen&quot;</translation>
 <translation id="5208988882104884956">Halv bredde</translation>
 <translation id="1507170440449692343">Denne side er blokeret fra at få adgang til dit kamera.</translation>
+<translation id="4189406272289638749">Udvidelsen &lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt; kontrollerer denne indstilling.</translation>
 <translation id="803771048473350947">Fil</translation>
 <translation id="6206311232642889873">Ko&amp;pier billede</translation>
 <translation id="5158983316805876233">Brug samme proxy for alle protokoller</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb
index e54398a..a3766eb 100644
--- a/chrome/app/resources/generated_resources_de.xtb
+++ b/chrome/app/resources/generated_resources_de.xtb
@@ -3317,6 +3317,7 @@
 <translation id="8923542159871018393"><ph name="EXTENSION_NAME"/> wird auf dieser Seite ausgeführt.</translation>
 <translation id="580886651983547002"><ph name="PRODUCT_NAME"/>
         kann die Website nicht erreichen. Dies wird üblicherweise durch Netzwerkprobleme verursacht, kann jedoch auch das Ergebnis einer falsch konfigurierten Firewall bzw. eines falsch konfigurierten Proxyservers sein.</translation>
+<translation id="4387554346626014084">Synchronisierung der App-Übersicht aktivieren. Hierdurch werden gegebenenfalls auch Ordner aktiviert (nicht bei OSX).</translation>
 <translation id="5445557969380904478">Über Spracherkennung</translation>
 <translation id="4104400246019119780">Vielen Dank!</translation>
 <translation id="3487007233252413104">Anonyme Funktion</translation>
@@ -4771,6 +4772,7 @@
 <translation id="8775404590947523323">Ihre Änderungen werden automatisch gespeichert.<ph name="BREAKS"/>Um eine Kopie des Originalbilds beizubehalten, deaktivieren Sie die Funktion &quot;Original überschreiben&quot;.</translation>
 <translation id="5208988882104884956">Halbe Breite</translation>
 <translation id="1507170440449692343">Diese Seite darf nicht auf Ihre Kamera zugreifen.</translation>
+<translation id="4189406272289638749">Diese Einstellung wird von einer Erweiterung namens &lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt; gesteuert.</translation>
 <translation id="803771048473350947">Datei</translation>
 <translation id="6206311232642889873">Bild kop&amp;ieren</translation>
 <translation id="5158983316805876233">Denselben Proxy für alle Protokolle verwenden</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb
index d6c9d0a..a4769c2 100644
--- a/chrome/app/resources/generated_resources_el.xtb
+++ b/chrome/app/resources/generated_resources_el.xtb
@@ -3352,6 +3352,7 @@
 <translation id="580886651983547002">Το <ph name="PRODUCT_NAME"/>
         δεν είναι δυνατό να αποκτήσει πρόσβαση στον ιστότοπο.  Αυτό συνήθως προκαλείται από προβλήματα στο δίκτυο,
         αλλά μπορεί επίσης να οφείλεται σε τείχος προστασίας ή διακομιστή μεσολάβηση που δεν έχουν διαμορφωθεί σωστά.</translation>
+<translation id="4387554346626014084">Ενεργοποίηση συγχρονισμού Εφαρμογής εκκίνησης. Αυτό ενεργοποιεί επίσης τους φακέλους, όπου διατίθενται (εκτός OSX).</translation>
 <translation id="5445557969380904478">Σχετικά με τη φωνητική αναγνώριση</translation>
 <translation id="4104400246019119780">Ευχαριστούμε!</translation>
 <translation id="3487007233252413104">ανώνυμη λειτουργία</translation>
@@ -4815,6 +4816,7 @@
 <translation id="8775404590947523323">Οι αλλαγές σας αποθηκεύονται αυτόματα.<ph name="BREAKS"/>Για να διατηρήσετε ένα αντίγραφο της αρχικής εικόνας, καταργήστε την επιλογή &quot;Αντικατάσταση αρχικού&quot;</translation>
 <translation id="5208988882104884956">Μισού πλάτους</translation>
 <translation id="1507170440449692343">Αυτή η σελίδα δεν έχει πρόσβαση στην κάμερά σας.</translation>
+<translation id="4189406272289638749">Η επέκταση &lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt;, ελέγχει αυτήν τη ρύθμιση.</translation>
 <translation id="803771048473350947">Αρχείο</translation>
 <translation id="6206311232642889873">Αντι&amp;γραφή Εικόνας</translation>
 <translation id="5158983316805876233">Χρησιμοποιήστε τον ίδιο διακομιστή μεσολάβησης για όλα τα πρωτόκολλα</translation>
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb
index d7dd4d6..b89997e 100644
--- a/chrome/app/resources/generated_resources_en-GB.xtb
+++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -3355,6 +3355,7 @@
 <translation id="580886651983547002"><ph name="PRODUCT_NAME"/>
         cannot reach the website.  This is typically caused by network issues,
         but can also be the result of a misconfigured firewall or proxy server.</translation>
+<translation id="4387554346626014084">Enable App Launcher sync. This also enables Folders where available (non OSX).</translation>
 <translation id="5445557969380904478">About voice recognition</translation>
 <translation id="4104400246019119780">Thanks!</translation>
 <translation id="3487007233252413104">anonymous function</translation>
@@ -4817,6 +4818,7 @@
 <translation id="8775404590947523323">Your edits are saved automatically.<ph name="BREAKS"/>To keep a copy of the original image, untick &quot;Overwrite original&quot;</translation>
 <translation id="5208988882104884956">Halfwidth</translation>
 <translation id="1507170440449692343">This page has been blocked from accessing your camera.</translation>
+<translation id="4189406272289638749">An extension, &lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt;, is controlling this setting.</translation>
 <translation id="803771048473350947">File</translation>
 <translation id="6206311232642889873">Cop&amp;y Image</translation>
 <translation id="5158983316805876233">Use the same proxy for all protocols</translation>
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb
index e980820..6bd8cb2 100644
--- a/chrome/app/resources/generated_resources_es-419.xtb
+++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -3335,6 +3335,7 @@
 <translation id="580886651983547002"><ph name="PRODUCT_NAME"/>
         no puede alcanzar el sitio web. Esto se debe a los problemas de red,
         pero también puede ser el resultado de un firewall o servidor proxy mal configurado.</translation>
+<translation id="4387554346626014084">Habilita la sincronización del Selector de aplicaciones. También habilita las carpetas si están disponibles (no en OS X).</translation>
 <translation id="5445557969380904478">Acerca del reconocimiento de voz</translation>
 <translation id="4104400246019119780">Gracias</translation>
 <translation id="3487007233252413104">función anónima</translation>
@@ -4788,6 +4789,7 @@
 <translation id="8775404590947523323">Los cambios se guardan automáticamente.<ph name="BREAKS"/>Para mantener una copia de la imagen original, desactiva la opción Sobrescribir en el original.</translation>
 <translation id="5208988882104884956">Ancho medio</translation>
 <translation id="1507170440449692343">Esta página no tiene permiso para acceder a la cámara.</translation>
+<translation id="4189406272289638749">La extensión &lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt; controla esta configuración.</translation>
 <translation id="803771048473350947">Archivo</translation>
 <translation id="6206311232642889873">Cop&amp;iar imagen</translation>
 <translation id="5158983316805876233">Utilizar el mismo proxy para todos los protocolos</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb
index 4fb1b17..ee1654c 100644
--- a/chrome/app/resources/generated_resources_es.xtb
+++ b/chrome/app/resources/generated_resources_es.xtb
@@ -3345,6 +3345,7 @@
 <translation id="580886651983547002"><ph name="PRODUCT_NAME"/>
         no puede acceder al sitio web. Este problema se suele deber a incidencias
         de la red, pero también puede estar causado por la incorrecta configuración de un servidor proxy o de un cortafuegos.</translation>
+<translation id="4387554346626014084">Habilita la sincronización del menú de aplicaciones. También habilita las carpetas si están disponibles (no en OS X).</translation>
 <translation id="5445557969380904478">Información sobre el reconocimiento de voz</translation>
 <translation id="4104400246019119780">¡Gracias!</translation>
 <translation id="3487007233252413104">función anónima</translation>
@@ -4805,6 +4806,7 @@
 <translation id="8775404590947523323">Los cambios se guardan de forma automática.<ph name="BREAKS"/>Para guardar una copia de la imagen original, desactiva la opción &quot;Sobrescribir original&quot;.</translation>
 <translation id="5208988882104884956">Ancho medio</translation>
 <translation id="1507170440449692343">Esta página no tiene permiso para acceder a la cámara</translation>
+<translation id="4189406272289638749">La extensión &lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt; controla esta opción.</translation>
 <translation id="803771048473350947">Archivo</translation>
 <translation id="6206311232642889873">Copia&amp;r imagen</translation>
 <translation id="5158983316805876233">Utilizar el mismo proxy para todos los protocolos</translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb
index 1267b24..0d3690a 100644
--- a/chrome/app/resources/generated_resources_et.xtb
+++ b/chrome/app/resources/generated_resources_et.xtb
@@ -3347,6 +3347,7 @@
 <translation id="580886651983547002"><ph name="PRODUCT_NAME"/>
         ei saa veebisaidiga ühendust. Seda põhjustavad harilikult võrguprobleemid,
         kuid see võib olla ka valesti konfigureeritud tulemüüri või puhverserveri tagajärg.</translation>
+<translation id="4387554346626014084">Lubatakse rakenduste käivitaja sünkroonimine. See lubab võimaluse korral ka rakenduse Kaustad (mitte-OSX).</translation>
 <translation id="5445557969380904478">Teave hääle tuvastamise kohta</translation>
 <translation id="4104400246019119780">Täname!</translation>
 <translation id="3487007233252413104">anonüümne funktsioon</translation>
@@ -4808,6 +4809,7 @@
 <translation id="8775404590947523323">Teie muudatused salvestatakse automaatselt.<ph name="BREAKS"/>Algse kujutise koopia säilitamiseks tühjendage märkeruut „Kirjuta algne fail üle”</translation>
 <translation id="5208988882104884956">Poolaius</translation>
 <translation id="1507170440449692343">Sellel lehel on juurdepääs teie kaamerale blokeeritud.</translation>
+<translation id="4189406272289638749">Laiendus &lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt; juhib seda seadet.</translation>
 <translation id="803771048473350947">Fail</translation>
 <translation id="6206311232642889873">Kop&amp;eeri pilt</translation>
 <translation id="5158983316805876233">Kasuta kõikide protokollide jaoks sama puhverserverit</translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb
index e579b03..52d3add 100644
--- a/chrome/app/resources/generated_resources_fa.xtb
+++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -3335,6 +3335,7 @@
 <translation id="580886651983547002"><ph name="PRODUCT_NAME"/>
         نمی‌تواند به وب سایت دسترسی پیدا کند. این مشکل معمولاً به دلیل مشکلات شبکه روی می‌دهد،
         اما همچنین ممکن است در نتیجه وجود یک فایروال یا سرور پراکسی دارای پیکربندی نادرست نیز باشد.</translation>
+<translation id="4387554346626014084">‏فعال کردن همگام‌سازی راه‌انداز برنامه. این کار پوشه‌ها را نیز هنگام در دسترس بودن فعال می‌کند (غیر OSX).</translation>
 <translation id="5445557969380904478">درباره تشخیص صدا</translation>
 <translation id="4104400246019119780">متشکریم!</translation>
 <translation id="3487007233252413104">تابع ناشناس</translation>
@@ -4789,6 +4790,7 @@
 <translation id="8775404590947523323">ویرایش‌های شما بطور خودکار ذخیره می‌شوند.<ph name="BREAKS"/>برای داشتن یک نسخه از تصویر اصلی٬ علامت «رونویسی نسخهٔ اصلی» را بردارید.</translation>
 <translation id="5208988882104884956">نیم‌عرض</translation>
 <translation id="1507170440449692343">این صفحه از دسترسی به دوربین شما بازداشته شده است.</translation>
+<translation id="4189406272289638749">‏یک برنامه افزودنی، &lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt;، این تنظیم را کنترل می‌کند.</translation>
 <translation id="803771048473350947">فایل</translation>
 <translation id="6206311232642889873">&amp;کپی تصویر</translation>
 <translation id="5158983316805876233">استفاده از پراکسی یکسان برای همه پروتکل ها</translation>
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb
index f89ece1..1567f9c 100644
--- a/chrome/app/resources/generated_resources_fi.xtb
+++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -1276,7 +1276,7 @@
 <translation id="6285905808004014074">Poista käytöstä offline-tilan automaattinen sivun päivitys -tila</translation>
 <translation id="1195447618553298278">Tuntematon virhe.</translation>
 <translation id="2617653079636271958">Zoom: <ph name="VALUE"/> %</translation>
-<translation id="7427916543828159271">Wifi ja mobiilitiedonsiirto ovat pois käytöstä.
+<translation id="7427916543828159271">Wi-Fi ja mobiilitiedonsiirto ovat pois käytöstä.
           <ph name="LINE_BREAK"/>
           Sivu voidaan ladata, kun muodostat yhteyden verkkoon.</translation>
 <translation id="1718685839849651010">Tuntemattomasta lokista</translation>
@@ -1333,7 +1333,7 @@
 <translation id="3283971109253195306">Jos otat tämän asetuksen käyttöön, verkkosovellukset voivat ladata HTML-tuonteja.</translation>
 <translation id="2462724976360937186">Varmenteen myöntäjän avaimen tunnus</translation>
 <translation id="981121421437150478">Offline</translation>
-<translation id="2964193600955408481">Wifi pois käytöstä</translation>
+<translation id="2964193600955408481">Wi-Fi pois käytöstä</translation>
 <translation id="6786747875388722282">Laajennukset</translation>
 <translation id="2570648609346224037">Virhe ladattaessa palautusnäköistiedostoa.</translation>
 <translation id="5372384633701027870">Poista evästeet ja muut sivuston tiedot, kun suljet selaimen</translation>
@@ -2727,7 +2727,7 @@
 <translation id="2724841811573117416">WebRTC-lokit</translation>
 <translation id="8059417245945632445">Tark&amp;ista laitteet</translation>
 <translation id="3391392691301057522">Vanha PIN-koodi</translation>
-<translation id="96421021576709873">Wifi-verkko</translation>
+<translation id="96421021576709873">Wi-Fi-verkko</translation>
 <translation id="1344519653668879001">Poista hyperlinkkien tarkistus käytöstä</translation>
 <translation id="6463795194797719782">M&amp;uokkaa</translation>
 <translation id="8816881387529772083">Täysi MIDI-hallinta</translation>
@@ -2796,7 +2796,7 @@
 <translation id="1484387932110662517">Ottaa käyttöön uuden profiilinhallintajärjestelmän, joka sisältää profiileista uloskirjautumisen sekä uuden avatarvalikkokäyttöliittymän.</translation>
 <translation id="2471964272749426546">Tamilin syöttötapa (Tamil99)</translation>
 <translation id="9088917181875854783">Vahvista, että tämä salasana näkyy laitteella <ph name="DEVICE_NAME"/>:</translation>
-<translation id="8814190375133053267">Wifi</translation>
+<translation id="8814190375133053267">Wi-Fi</translation>
 <translation id="5236831943526452400">Poista evästeet ja muut sivuston tiedot, kun suljet selaimen</translation>
 <translation id="1558834950088298812">Esiintymät, kun laajennus päivitettiin</translation>
 <translation id="8410619858754994443">Vahvista salasana:</translation>
@@ -3314,6 +3314,7 @@
 <translation id="8923542159871018393"><ph name="EXTENSION_NAME"/> on käynnissä tällä sivulla.</translation>
 <translation id="580886651983547002"><ph name="PRODUCT_NAME"/> 
 ei saa yhteyttä sivustoon. Syynä on yleensä verkon ongelma, mutta ongelma saattaa johtua myös väärin määritetyistä palomuurin tai välityspalvelimen asetuksista.</translation>
+<translation id="4387554346626014084">Ota sovellusten käynnistysohjelman synkronointi käyttöön. Tämä ottaa käyttöön myös Kansiot, jos saatavilla (muissa kuin OSX-järjestelmissä).</translation>
 <translation id="5445557969380904478">Tietoja äänentunnistuksesta</translation>
 <translation id="4104400246019119780">Kiitos.</translation>
 <translation id="3487007233252413104">tuntematon toiminto</translation>
@@ -4768,6 +4769,7 @@
 <translation id="8775404590947523323">Tekemäsi muutokset tallentuvat automaattisesti.<ph name="BREAKS"/>Säilytä alkuperäisen kuvan kopio poistamalla valinta kohdasta Korvaa alkuperäinen.</translation>
 <translation id="5208988882104884956">Kapea</translation>
 <translation id="1507170440449692343">Tältä sivulta on estetty kameran käyttö.</translation>
+<translation id="4189406272289638749">Laajennus &lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt; hallinnoi tätä asetusta.</translation>
 <translation id="803771048473350947">Tiedosto</translation>
 <translation id="6206311232642889873">K&amp;opioi kuva</translation>
 <translation id="5158983316805876233">Käytä samaa välityspalvelinta kaikille protokollille</translation>
diff --git a/chrome/app/resources/generated_resources_fil.xtb b/chrome/app/resources/generated_resources_fil.xtb
index 9c5b283..7d06dd0 100644
--- a/chrome/app/resources/generated_resources_fil.xtb
+++ b/chrome/app/resources/generated_resources_fil.xtb
@@ -3362,6 +3362,7 @@
 <translation id="580886651983547002"><ph name="PRODUCT_NAME"/>
         hindi maabot ang website.  Ito ay karaniwang sanhi ng mga isyu ng network,
         ngunit maaari ring resulta ng maling na-configure na firewall o proxy server.</translation>
+<translation id="4387554346626014084">I-enable ang pag-sync ng App Launcher. Ine-enable din nito ang Mga Folder kung saan available (hindi OSX).</translation>
 <translation id="5445557969380904478">Tungkol sa pagkilala sa tinig</translation>
 <translation id="4104400246019119780">Salamat!</translation>
 <translation id="3487007233252413104">hindi kilalang function</translation>
@@ -4825,6 +4826,7 @@
 <translation id="8775404590947523323">Awtomatikong na-save ang iyong mga pag-edit.<ph name="BREAKS"/>Upang maitago ang kopya ng orihinal na larawan, tanggalan ng check ang &quot;Patungan ang orihinal&quot;</translation>
 <translation id="5208988882104884956">Halfwidth</translation>
 <translation id="1507170440449692343">Na-block ang pahinang ito sa pag-a-access sa iyong camera.</translation>
+<translation id="4189406272289638749">Kinokontrol ng isang extension na &lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt; ang setting na ito.</translation>
 <translation id="803771048473350947">File</translation>
 <translation id="6206311232642889873">Kop&amp;yahin ang Imahe</translation>
 <translation id="5158983316805876233">Gumamit ng parehong proxy para sa lahat ng mga protocol</translation>
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb
index 4d06694..1c4e5c3 100644
--- a/chrome/app/resources/generated_resources_fr.xtb
+++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -3363,6 +3363,7 @@
 <translation id="580886651983547002"><ph name="PRODUCT_NAME"/>
         ne parvient pas à atteindre le site Web. Cela vient probablement d'un problème de réseau,
         mais peut également être dû à un pare-feu ou à un serveur proxy mal configuré.</translation>
+<translation id="4387554346626014084">Activer la synchronisation du lanceur d'applications. Cette action active également la synchronisation des dossiers, lorsqu'ils sont disponibles (pas sur OS X).</translation>
 <translation id="5445557969380904478">À propos de la reconnaissance vocale</translation>
 <translation id="4104400246019119780">Merci !</translation>
 <translation id="3487007233252413104">fonction anonyme</translation>
@@ -4821,6 +4822,7 @@
 <translation id="8775404590947523323">Vos modifications sont enregistrées automatiquement.<ph name="BREAKS"/>Pour conserver une copie de l'image d'origine, décochez l'option &quot;Écraser l'original&quot;.</translation>
 <translation id="5208988882104884956">Demi-largeur</translation>
 <translation id="1507170440449692343">L'accès à votre caméra est bloqué pour cette page</translation>
+<translation id="4189406272289638749">L'extension &lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt; contrôle ce paramètre.</translation>
 <translation id="803771048473350947">Fichier</translation>
 <translation id="6206311232642889873">Cop&amp;ier l'image</translation>
 <translation id="5158983316805876233">Utiliser le même proxy pour tous les protocoles</translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb
index 0b9fee8..1588e19 100644
--- a/chrome/app/resources/generated_resources_gu.xtb
+++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -3365,6 +3365,7 @@
 <translation id="580886651983547002"><ph name="PRODUCT_NAME"/>
         વેબ સાઇટ સુધી પહોંચી શકતું નથી. આવું સામાન્ય રીતે નેટવર્ક સમસ્યાઓને લીધે થાય છે,
         પરંતુ ખોટી રીતે ગોઠવાયેલ ફાયરવૉલ અથવા પ્રોક્સી સર્વરને પરિણામે પણ થઈ શકે છે.</translation>
+<translation id="4387554346626014084">એપ લૉન્ચર સમન્વયન સક્ષમ કરો. આ જ્યાં ઉપલબ્ધ હોય ત્યાં ફોલ્ડર્સ પણ સક્ષમ કરે છે (બિન OSX).</translation>
 <translation id="5445557969380904478">અવાજ ઓળખ વિશે </translation>
 <translation id="4104400246019119780">આભાર!</translation>
 <translation id="3487007233252413104">અનામી કાર્ય</translation>
@@ -4822,6 +4823,7 @@
 <translation id="8775404590947523323">તમારા સંપાદનો આપમેળે સચવાયા છે.<ph name="BREAKS"/>મૂળ છબીની કૉપિ રાખવા માટે, &quot;મૂળ પર ઓવરરાઇટ કરો&quot; ને  અનચેક કરો</translation>
 <translation id="5208988882104884956">અર્ધપહોળાઈ</translation>
 <translation id="1507170440449692343">આ પૃષ્ઠને તમારા કૅમેરાને ઍક્સેસ કરવાથી અવરોધિત કરવામાં આવ્યું છે.</translation>
+<translation id="4189406272289638749">એક એક્સ્ટેન્શન, &lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt; આ સેટિંગનું નિયંત્રણ કરે છે.</translation>
 <translation id="803771048473350947">ફાઇલ</translation>
 <translation id="6206311232642889873">છબીની કૉ&amp;પિ બનાવો</translation>
 <translation id="5158983316805876233">બધા પ્રોટોકોલ્સ માટે સમાનો પ્રોક્સીનો ઉપયોગ કરો</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb
index 67cf6bd..64ca305 100644
--- a/chrome/app/resources/generated_resources_hi.xtb
+++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -3375,6 +3375,7 @@
 <translation id="580886651983547002"><ph name="PRODUCT_NAME"/>
         वेबसाइट तक नहीं पहुंच सकता.  ऐसा आमतौर पर नेटवर्क समस्याओं के कारण होता है,
         लेकिन यह ग़लत ढंग से कॉन्फ़िगर की गई फायरवॉल या प्रॉक्सी सर्वर के कारण भी हो सकता है.</translation>
+<translation id="4387554346626014084">एप्लिकेशन लॉन्चर समन्वयन सक्षम करें. यह उपलब्ध होने पर फ़ोल्डर भी सक्षम करता है (गैर OSX).</translation>
 <translation id="5445557969380904478">ध्‍वनि पहचान के बारे में</translation>
 <translation id="4104400246019119780">धन्यवाद!</translation>
 <translation id="3487007233252413104">अनाम फ़ंक्शन</translation>
@@ -4838,6 +4839,7 @@
 <translation id="8775404590947523323">आपके संपादन अपने आप सहेजे जाते हैं.<ph name="BREAKS"/>मूल चित्र की प्रति रखने के लिए, &quot;मूल को अधिलेखित करें&quot; अनचेक करें</translation>
 <translation id="5208988882104884956">आधी-चौड़ाई</translation>
 <translation id="1507170440449692343">इस पृष्ठ को आपका कैमरा एक्सेस करने से अवरोधित कर दिया गया है.</translation>
+<translation id="4189406272289638749">कोई एक्सटेंशन, &lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt;, इस सेटिंग को नियंत्रित कर रहा है.</translation>
 <translation id="803771048473350947">फ़ाइल</translation>
 <translation id="6206311232642889873">चित्र की प्र&amp;तिलिपि बनाएं</translation>
 <translation id="5158983316805876233">सभी प्रोटोकॉल के लिए एक ही प्रॉक्सी का उपयोग करें</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb
index bba227c..4a73f01 100644
--- a/chrome/app/resources/generated_resources_hr.xtb
+++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -3323,6 +3323,7 @@
 <translation id="6003177993629630467"><ph name="PRODUCT_NAME"/> možda se neće moći sam ažurirati.</translation>
 <translation id="8923542159871018393">Proširenje <ph name="EXTENSION_NAME"/> izvršava se na ovoj stranici.</translation>
 <translation id="580886651983547002"><ph name="PRODUCT_NAME"/> ne može dosegnuti web-lokaciju. Uzrok tomu obično su poteškoće s mrežom, ali može biti i loše konfiguriran vatrozid ili proxy poslužitelj.</translation>
+<translation id="4387554346626014084">Omogući sinkronizaciju pokretača aplikacija. Ovime se omogućuju i Mape ondje gdje su dostupne (sustav koji nije OSX).</translation>
 <translation id="5445557969380904478">O prepoznavanju glasa</translation>
 <translation id="4104400246019119780">Hvala!</translation>
 <translation id="3487007233252413104">anonimna funkcija</translation>
@@ -4780,6 +4781,7 @@
 <translation id="8775404590947523323">Vaša se uređivanja spremaju automatski.<ph name="BREAKS"/>Da biste zadržali kopiju izvorne slike, isključite oznaku opcije &quot;Prebriši izvornik&quot;</translation>
 <translation id="5208988882104884956">Usko</translation>
 <translation id="1507170440449692343">Stranici je zabranjen pristup vašoj kameri.</translation>
+<translation id="4189406272289638749">Proširenje &lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt; upravlja ovom postavkom.</translation>
 <translation id="803771048473350947">Datoteka</translation>
 <translation id="6206311232642889873">Kop&amp;iraj sliku</translation>
 <translation id="5158983316805876233">Koristi isti proxy za sve protokole</translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb
index a8f46dd..ff07509 100644
--- a/chrome/app/resources/generated_resources_hu.xtb
+++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -3327,6 +3327,7 @@
 <translation id="580886651983547002"><ph name="PRODUCT_NAME"/>
         nem tud kapcsolódni a webhelyhez.  Ezt általában hálózati problémák okozzák,
         ám lehet rosszul beállított tűzfal vagy proxyszerver eredménye is.</translation>
+<translation id="4387554346626014084">Az Alkalmazásindító szinkronizálásának bekapcsolása. Ezzel bekapcsolja a Mappák szolgáltatást is, ha elérhető (OSX esetében nem).</translation>
 <translation id="5445557969380904478">A hangfelismerés névjegye</translation>
 <translation id="4104400246019119780">Köszönjük!</translation>
 <translation id="3487007233252413104">névtelen funkció</translation>
@@ -4785,6 +4786,7 @@
 <translation id="8775404590947523323">A módosításokat automatikusan menti a rendszer.<ph name="BREAKS"/>Az eredeti kép egy másolatának megtartásához törölje az &quot;Eredeti felülírása&quot; jelölőnégyzetet</translation>
 <translation id="5208988882104884956">Fél szélesség</translation>
 <translation id="1507170440449692343">Az oldal nem férhet hozzá az Ön kamerájához.</translation>
+<translation id="4189406272289638749">Egy bővítmény (&lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt;) vezérli ezt a beállítást.</translation>
 <translation id="803771048473350947">Fájl</translation>
 <translation id="6206311232642889873">Ké&amp;p másolása</translation>
 <translation id="5158983316805876233">Azonos proxy használata minden protokollhoz</translation>
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb
index 4ed59d5..f980931 100644
--- a/chrome/app/resources/generated_resources_id.xtb
+++ b/chrome/app/resources/generated_resources_id.xtb
@@ -647,7 +647,7 @@
 <translation id="6380224340023442078">Setelan konten...</translation>
 <translation id="1612129875274679969">Simpan perangkat ini dalam mode kios secara permanen.</translation>
 <translation id="7214227951029819508">Kecerahan:</translation>
-<translation id="3704726585584668805">Aktifkan plug-in PDF dengan proses terpisah.</translation>
+<translation id="3704726585584668805">Aktifkan plugin PDF dengan proses terpisah.</translation>
 <translation id="5486326529110362464">Nilai masukan untuk kunci pribadi harus ada.</translation>
 <translation id="6824725898506587159">Kelola bahasa</translation>
 <translation id="8190907767443402387">Kirim masukan untuk membantu menyempurnakan Chrome</translation>
@@ -2729,7 +2729,7 @@
 <translation id="7806513705704909664">Aktifkan IsiOtomatis untuk mengisi formulir web dengan sekali klik.</translation>
 <translation id="8282504278393594142">Tidak ada ekstensi yang dipasang.</translation>
 <translation id="8026334261755873520">Hapus data penjelajahan</translation>
-<translation id="605011065011551813">Sebuah plug-in (<ph name="PLUGIN_NAME"/>) tidak menanggapi.</translation>
+<translation id="605011065011551813">Sebuah plugin (<ph name="PLUGIN_NAME"/>) tidak menanggapi.</translation>
 <translation id="1467432559032391204">Kiri</translation>
 <translation id="6395423953133416962">Kirim <ph name="BEGIN_LINK1"/>informasi sistem<ph name="END_LINK1"/> dan <ph name="BEGIN_LINK2"/>metrik<ph name="END_LINK2"/></translation>
 <translation id="1769104665586091481">Buka Tautan di &amp;Jendela Baru</translation>
@@ -3335,6 +3335,7 @@
 <translation id="580886651983547002"><ph name="PRODUCT_NAME"/>
         tidak dapat menjangkau situs web.  Ini biasanya terjadi karena masalah jaringan,
         tetapi juga bisa disebabkan oleh firewall atau server proxy yang salah dikonfigurasi.</translation>
+<translation id="4387554346626014084">Mengaktifkan sinkronisasi Peluncur Aplikasi. Tindakan ini juga mengaktifkan Folder apabila tersedia (bukan OSX).</translation>
 <translation id="5445557969380904478">Tentang pengenalan suara</translation>
 <translation id="4104400246019119780">Terima kasih!</translation>
 <translation id="3487007233252413104">fungsi anonim</translation>
@@ -4397,7 +4398,7 @@
 <translation id="2749881179542288782">Periksa Grammar Dengan Ejaaan</translation>
 <translation id="5105855035535475848">Sematkan tab</translation>
 <translation id="5707604204219538797">Kata berikutnya</translation>
-<translation id="5896465938181668686">Hentikan plug-in</translation>
+<translation id="5896465938181668686">Hentikan plugin</translation>
 <translation id="657869111306379099">Menonaktifkan indikator metode masukan yang ditunjukkan dekat tanda sisipan jika beralih di antara metode masukan keyboard.</translation>
 <translation id="6892450194319317066">Pilih menurut Pembuka</translation>
 <translation id="7904402721046740204">Mengautentikasi</translation>
@@ -4722,7 +4723,7 @@
 <translation id="978146274692397928">Lebar tanda baca awal Penuh</translation>
 <translation id="106701514854093668">Bookmark Desktop</translation>
 <translation id="4775266380558160821">Selalu izinkan plugin yang tidak dikotakpasirkan di <ph name="HOST"/></translation>
-<translation id="6921812972154549137">Cookie serta data plug-in dan situs lainnya</translation>
+<translation id="6921812972154549137">Cookie serta data plugin dan situs lainnya</translation>
 <translation id="6886871292305414135">Buka tautan di &amp;tab baru</translation>
 <translation id="1639192739400715787">Untuk mengakses setelan Keamanan, masukkan PIN kartu SIM</translation>
 <translation id="4499634737431431434">Minggu</translation>
@@ -4792,6 +4793,7 @@
 <translation id="8775404590947523323">Editan Anda disimpan secara otomatis.<ph name="BREAKS"/>Untuk menyimpan salinan dari gambar asli, hapus centang &quot;Timpa yang asli&quot;</translation>
 <translation id="5208988882104884956">Lebar separuh</translation>
 <translation id="1507170440449692343">Laman ini telah diblokir agar tidak dapat mengakses kamera Anda.</translation>
+<translation id="4189406272289638749">Ekstensi, &lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt;, mengontrol setelan ini.</translation>
 <translation id="803771048473350947">File</translation>
 <translation id="6206311232642889873">Sali&amp;n Gambar</translation>
 <translation id="5158983316805876233">Gunakan proxy yang sama untuk semua protokol</translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb
index a60d9b2..7be7377 100644
--- a/chrome/app/resources/generated_resources_it.xtb
+++ b/chrome/app/resources/generated_resources_it.xtb
@@ -3309,6 +3309,7 @@
 <translation id="580886651983547002"><ph name="PRODUCT_NAME"/>
         non riesce ad aprire il sito web.  Questo è generalmente dovuto a problemi di rete
         ma può anche essere il risultato di un firewall o server proxy non configurato correttamente.</translation>
+<translation id="4387554346626014084">Consente di attivare la sincronizzazione di Avvio applicazioni. Consente anche di attivare cartelle ove disponibili (non OS X).</translation>
 <translation id="5445557969380904478">Informazioni sul riconoscimento vocale</translation>
 <translation id="4104400246019119780">Grazie.</translation>
 <translation id="3487007233252413104">funzione anonima</translation>
@@ -4763,6 +4764,7 @@
 <translation id="8775404590947523323">Le modifiche vengono salvate automaticamente.<ph name="BREAKS"/>Per conservare una copia dell'immagine originale, deseleziona l'opzione &quot;Sovrascrivi originale&quot;.</translation>
 <translation id="5208988882104884956">Metà larghezza</translation>
 <translation id="1507170440449692343">A questa pagina è stato impedito l'accesso alla webcam.</translation>
+<translation id="4189406272289638749">Un'estensione, &lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt;, sta controllando questa impostazione.</translation>
 <translation id="803771048473350947">Archivio</translation>
 <translation id="6206311232642889873">Cop&amp;ia immagine</translation>
 <translation id="5158983316805876233">Usa lo stesso proxy per tutti i protocolli</translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb
index 72595e2..8a01494 100644
--- a/chrome/app/resources/generated_resources_iw.xtb
+++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -3324,6 +3324,7 @@
 <translation id="580886651983547002">‏<ph name="PRODUCT_NAME"/>
         לא יכול להתחבר לאתר. מצב זה נגרם בדרך כלל בשל בעיות ברשת,
         אך עלול להיות גם תוצאה של חומת אש או שרת proxy שלא הוגדרו כראוי.</translation>
+<translation id="4387554346626014084">‏הפעל סנכרון של מפעיל היישומים. פעולה זו מפעילה את 'תיקיות' היכן שזמין (לא ל-OSX).</translation>
 <translation id="5445557969380904478">מידע על זיהוי קולי</translation>
 <translation id="4104400246019119780">תודה!</translation>
 <translation id="3487007233252413104">פונקציה אנונימית</translation>
@@ -4785,6 +4786,7 @@
 <translation id="8775404590947523323">שינויי העריכה שלך נשמרים אוטומטית.<ph name="BREAKS"/>כדי לשמור עותק של התמונה המקורית, בטל את הסימון של &quot;החלף קובץ מקורי&quot;</translation>
 <translation id="5208988882104884956">חצי רוחב</translation>
 <translation id="1507170440449692343">דף זה נחסם לגישה למצלמה שלך.</translation>
+<translation id="4189406272289638749">‏ההגדרה הזו נמצאת בשליטה של תוסף - &lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt;.</translation>
 <translation id="803771048473350947">קובץ</translation>
 <translation id="6206311232642889873">העת&amp;ק תמונה</translation>
 <translation id="5158983316805876233">‏השתמש באותו שרת proxy עבור כל הפרוטוקולים</translation>
diff --git a/chrome/app/resources/generated_resources_ja.xtb b/chrome/app/resources/generated_resources_ja.xtb
index 976f6a8..2f2813f 100644
--- a/chrome/app/resources/generated_resources_ja.xtb
+++ b/chrome/app/resources/generated_resources_ja.xtb
@@ -3354,6 +3354,7 @@
 <translation id="580886651983547002"><ph name="PRODUCT_NAME"/>
         にウェブサイトを読み込むことができません。ネットワークに問題がある場合が一般的ですが、
         ファイアウォールまたはプロキシ サーバーの設定が間違っている可能性もあります。</translation>
+<translation id="4387554346626014084">アプリ ランチャーの同期を有効にします。使用できるフォルダがあれば有効になります（OSX 以外）。</translation>
 <translation id="5445557969380904478">音声認識について</translation>
 <translation id="4104400246019119780">ありがとうございました。</translation>
 <translation id="3487007233252413104">無名関数</translation>
@@ -4813,6 +4814,7 @@
 <translation id="8775404590947523323">編集内容は自動的に保存されます。<ph name="BREAKS"/>オリジナルの画像のコピーを残す場合、[オリジナルを上書き] チェックボックスをオフにしてください。</translation>
 <translation id="5208988882104884956">半角</translation>
 <translation id="1507170440449692343">このページはカメラへのアクセスを禁止されています。</translation>
+<translation id="4189406272289638749">拡張機能 &lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt; がこの設定を制御しています。</translation>
 <translation id="803771048473350947">ファイル</translation>
 <translation id="6206311232642889873">画像をコピー(&amp;Y)</translation>
 <translation id="5158983316805876233">すべてのプロトコルで同じプロキシを使用する</translation>
diff --git a/chrome/app/resources/generated_resources_kn.xtb b/chrome/app/resources/generated_resources_kn.xtb
index bcbd2fd..d35f51a 100644
--- a/chrome/app/resources/generated_resources_kn.xtb
+++ b/chrome/app/resources/generated_resources_kn.xtb
@@ -3339,6 +3339,7 @@
 <translation id="580886651983547002"><ph name="PRODUCT_NAME"/>
         ವೆಬ್‌ಸೈಟ್‌ಗೆ ತಲುಪಲಾಗುವುದಿಲ್ಲ.  ಇದು ಒಂದು ರೀತಿಯಲ್ಲಿ ನೆಟ್‌ವರ್ಕ್ ಸಮಸ್ಯೆ ಆಗಿರಬಹುದು,
         ಹಾಗೆಯೇ, ಇದು ಕಾನ್ಪಿಗರ್‌‌ ಅಲ್ಲದ ಫೈರ್‌ವಾಲ್ ಅಥವಾ ಪ್ರಾಕ್ಸಿ ಸರ್ವರ್‌ಗಳ ಫಲಿತಾಂಶವೂ ಆಗಿರಬಹುದು.</translation>
+<translation id="4387554346626014084">ಅಪ್ಲಿಕೇಶನ್ ಲಾಂಚರ್ ಸಿಂಕ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸು. ಲಭ್ಯವಿರುವಲ್ಲಿ ಫೋಲ್ಡರ್‌ಗಳನ್ನು ಸಹ ಇದು ಸಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ (OSX ಅಲ್ಲದ).</translation>
 <translation id="5445557969380904478">ಧ್ವನಿ ಗುರುತಿಸುವಿಕೆಯ ಕುರಿತು</translation>
 <translation id="4104400246019119780">ಧನ್ಯವಾದಗಳು!</translation>
 <translation id="3487007233252413104">ಅನಾಮಧೇಯ ಕಾರ್ಯ</translation>
@@ -4798,6 +4799,7 @@
 <translation id="8775404590947523323">ನಿಮ್ಮ ಸಂಪಾದನೆಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಉಳಿಸಲಾಗಿದೆ. <ph name="BREAKS"/> ಮೂಲ ಚಿತ್ರದ ನಕಲೊಂದನ್ನು ಇರಿಸಿಕೊಳ್ಳಲು, &quot;ಮೂಲವನ್ನು ಮೇಲ್ಬರಹಗೊಳಿಸು&quot; ಅನ್ನು ಅನ್‌ಚೆಕ್ ಮಾಡಿ.</translation>
 <translation id="5208988882104884956">ಅರೆಅಗಲ</translation>
 <translation id="1507170440449692343">ನಿಮ್ಮ ಕ್ಯಾಮೆರಾವನ್ನು ಪ್ರವೇಶಿಸುವುದರಿಂದ ಈ ಪುಟವನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ.</translation>
+<translation id="4189406272289638749">&lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt; ವಿಸ್ತರಣೆಯೊಂದು ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ನಿಯಂತ್ರಿಸುತ್ತಿದೆ.</translation>
 <translation id="803771048473350947">ಫೈಲ್</translation>
 <translation id="6206311232642889873">ಇಮೇಜ್ ಅನ್ನು ನಕ&amp;ಲಿಸಿ</translation>
 <translation id="5158983316805876233">ಎಲ್ಲಾ ಪ್ರೊಟೋಕಾಲ್‌ಗಳಿಗೆ ಒಂದೇ ರೀತಿಯ ಪ್ರಾಕ್ಸಿಯನ್ನು ಬಳಸಿ</translation>
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb
index 2b4d524..0e28eff 100644
--- a/chrome/app/resources/generated_resources_ko.xtb
+++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -3358,6 +3358,7 @@
 <translation id="580886651983547002"><ph name="PRODUCT_NAME"/>에서
         웹사이트에 연결할 수 없습니다. 이는 보통 네트워크 문제로 인해 발생하지만
         방화벽이나 프록시 서버 설정이 잘못되었기 때문일 수도 있습니다.</translation>
+<translation id="4387554346626014084">앱 런처 동기화를 사용 설정합니다. 가능한 경우(OSX 외) 폴더도 사용 설정합니다.</translation>
 <translation id="5445557969380904478">음성 인식 정보</translation>
 <translation id="4104400246019119780">감사합니다.</translation>
 <translation id="3487007233252413104">익명의 함수</translation>
@@ -4820,6 +4821,7 @@
 <translation id="8775404590947523323">수정 사항이 자동으로 저장됩니다.<ph name="BREAKS"/>원본 이미지의 사본을 보관하려면 '원본 덮어쓰기'를 선택 취소합니다.</translation>
 <translation id="5208988882104884956">반각</translation>
 <translation id="1507170440449692343">카메라 액세스가 차단된 페이지입니다.</translation>
+<translation id="4189406272289638749">&lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt; 확장 프로그램에서 설정을 제어하고 있습니다.</translation>
 <translation id="803771048473350947">파일</translation>
 <translation id="6206311232642889873">이미지 복사(&amp;Y)</translation>
 <translation id="5158983316805876233">모든 프로토콜에 같은 프록시 사용</translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb
index 9d0f5b0..ebfb9cf 100644
--- a/chrome/app/resources/generated_resources_lt.xtb
+++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -3369,6 +3369,7 @@
 <translation id="580886651983547002">„<ph name="PRODUCT_NAME"/>“
         negali pasiekti svetainės. Įprastai taip yra dėl tinklo problemų,
         tačiau gali būti ir dėl netinkamai sukonfigūruotos užkardos ar įgaliotojo serverio.</translation>
+<translation id="4387554346626014084">Įgalinti programų paleidimo priemonės sinchronizavimą. Tai tai pat įgalina aplankus, kur tai galima padaryti (ne OSX).</translation>
 <translation id="5445557969380904478">Apie balso atpažinimą</translation>
 <translation id="4104400246019119780">Dėkojame.</translation>
 <translation id="3487007233252413104">anoniminė funkcija</translation>
@@ -4831,6 +4832,7 @@
 <translation id="8775404590947523323">Keitimai saugomi automatiškai.<ph name="BREAKS"/>Jei norite išsaugoti originalaus vaizdo kopiją, panaikinkite parinkties „Perrašyti originalą“ žymėjimą</translation>
 <translation id="5208988882104884956">Vidutinio pločio</translation>
 <translation id="1507170440449692343">Šis puslapis užblokuotas, kad nepasiektų jūsų fotoaparato.</translation>
+<translation id="4189406272289638749">Plėtinys (&lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt;) valdo šį nustatymą.</translation>
 <translation id="803771048473350947">Failas</translation>
 <translation id="6206311232642889873">Kopijuo&amp;ti vaizdą</translation>
 <translation id="5158983316805876233">Naudoti tą patį visų protokolų tarpinį serverį</translation>
diff --git a/chrome/app/resources/generated_resources_lv.xtb b/chrome/app/resources/generated_resources_lv.xtb
index 5a43512..b0d587e 100644
--- a/chrome/app/resources/generated_resources_lv.xtb
+++ b/chrome/app/resources/generated_resources_lv.xtb
@@ -3347,6 +3347,7 @@
 <translation id="580886651983547002"><ph name="PRODUCT_NAME"/>
         nevar sasniegt vietni. Parasti tam par iemeslu ir problēmas ar
         tīklu, tomēr to var izraisīt arī nepareizi konfigurēts ugunsmūris vai starpniekserveris.</translation>
+<translation id="4387554346626014084">Iespējot lietotņu palaidēja sinhronizāciju. Ja iespējams, tiek iespējotas arī mapes (izņemot OSX).</translation>
 <translation id="5445557969380904478">Par balss atpazīšanu</translation>
 <translation id="4104400246019119780">Paldies!</translation>
 <translation id="3487007233252413104">anonīma funkcija</translation>
@@ -4808,6 +4809,7 @@
 <translation id="8775404590947523323">Izmaiņas tiek saglabātas automātiski.<ph name="BREAKS"/>Lai saglabātu sākotnējā attēla kopiju, noņemiet atzīmi no izvēles rūtiņas “Pārrakstīt sākotnējo”.</translation>
 <translation id="5208988882104884956">Pusplatuma</translation>
 <translation id="1507170440449692343">Šīs lapas piekļuve jūsu kamerai ir bloķēta.</translation>
+<translation id="4189406272289638749">Šo iestatījumu kontrolē paplašinājums &lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt;.</translation>
 <translation id="803771048473350947">Fails</translation>
 <translation id="6206311232642889873">Kopēt &amp;attēlu</translation>
 <translation id="5158983316805876233">Izmantojiet vienu starpniekserveri visiem protokoliem</translation>
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb
index f2ca097..b62aca5 100644
--- a/chrome/app/resources/generated_resources_ml.xtb
+++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -3366,6 +3366,7 @@
 <translation id="580886651983547002"><ph name="PRODUCT_NAME"/>
         എന്നതിന് വെബ്സൈറ്റില്‍ എത്താന്‍ കഴിയുന്നില്ല.  ഇത് സാധാരണ നെറ്റ്‍വര്‍ക്ക് പ്രശ്നങ്ങള്‍ മൂലമാണ്‌ സംഭവിക്കുന്നത്,
 തെറ്റായി ക്രമീകരിച്ച firewall അല്ലെങ്കില്‍ പ്രോക്സി സെര്‍വറിന്‍റെ ഫലവും ആകാം.</translation>
+<translation id="4387554346626014084">അപ്ലിക്കേഷൻ ലോഞ്ചർ സമന്വയം പ്രവർത്തനക്ഷമമാക്കുക. ഫോൾഡർ ലഭ്യമാകുന്നിടത്തും അത് പ്രവർത്തനക്ഷമമാകുന്നു (OSX ഇതരം).</translation>
 <translation id="5445557969380904478">ശബ്ദ തിരിച്ചറിവിനെക്കുറിച്ച്</translation>
 <translation id="4104400246019119780">നന്ദി!</translation>
 <translation id="3487007233252413104">അജ്ഞാത പ്രവർത്തനം</translation>
@@ -4828,6 +4829,7 @@
 <translation id="8775404590947523323">നിങ്ങളുടെ എഡിറ്റുകൾ യാന്ത്രികമായി സംരക്ഷിച്ചു.<ph name="BREAKS"/>യഥാർത്ഥ ചിത്രത്തിന്റെ ഒരു പകർപ്പ് സൂക്ഷിക്കുന്നതിന്, &quot;യഥാർത്ഥമായത് പുനരാലേഖനം ചെയ്യുക&quot; എന്നത് അൺചെക്ക് ചെയ്യുക</translation>
 <translation id="5208988882104884956">ഹാഫ്‍വിഡ്ത്ത്</translation>
 <translation id="1507170440449692343">നിങ്ങളുടെ ക്യാമറ ആക്‌സസ്സുചെയ്യുന്നതിൽ നിന്ന് ഈ പേജിനെ തടഞ്ഞു.</translation>
+<translation id="4189406272289638749">&lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt; എന്ന വിപുലികരണത്തെ ഈ ക്രമീകരണം നിയന്ത്രിക്കുന്നു.</translation>
 <translation id="803771048473350947">ഫയല്‍</translation>
 <translation id="6206311232642889873">ചിത്രം പകര്‍ത്തു&amp;ക</translation>
 <translation id="5158983316805876233">എല്ലാ പ്രോട്ടോക്കോളുകള്‍ക്കും ഒരേ പ്രോക്സി ഉപയോഗിക്കുക</translation>
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb
index d90418c..e4f8764 100644
--- a/chrome/app/resources/generated_resources_mr.xtb
+++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -3363,6 +3363,7 @@
 <translation id="580886651983547002"><ph name="PRODUCT_NAME"/>
         वेबसाइटवर पोहोचू शकत नाही.  हे विशेषतः नेटवर्कच्या समस्येमुळे झाले असावे,
         परंतु फायरवॉल किंवा प्रॉक्सी सर्व्हर चुकीचे कॉन्फिगर करण्याचा परिणाम देखील असू शकतो.</translation>
+<translation id="4387554346626014084">अ‍ॅप लाँचर संकालन सक्षम करा. हे उपलब्ध असते तिथे फोल्डर सक्षम देखील करते (OSX नसलेले).</translation>
 <translation id="5445557969380904478">आवाज ओळख बद्दल</translation>
 <translation id="4104400246019119780">धन्यवाद!</translation>
 <translation id="3487007233252413104">अनामित कार्य</translation>
@@ -4824,6 +4825,7 @@
 <translation id="8775404590947523323">आपली संपादने स्वयंचलितपणे जतन केली जातात.<ph name="BREAKS"/> मूळ प्रतिमेची प्रत ठेवण्यासाठी ''मूळवर खाडाखोड करा'' अनचेक करा</translation>
 <translation id="5208988882104884956">अर्धीरुंदी</translation>
 <translation id="1507170440449692343">हे पृष्ठ आपल्या कॅमेर्‍यावर प्रवेश करण्यापासून अवरोधित केले गेले आहे.</translation>
+<translation id="4189406272289638749">&lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt; विस्तार, हे सेटिंग नियंत्रित करत आहे.</translation>
 <translation id="803771048473350947">फाइल</translation>
 <translation id="6206311232642889873">प्रतिमा कॉ&amp;पी करा</translation>
 <translation id="5158983316805876233">सर्व प्रोटोकॉलसाठी एकच प्रॉक्सी वापरा</translation>
diff --git a/chrome/app/resources/generated_resources_ms.xtb b/chrome/app/resources/generated_resources_ms.xtb
index bb6757b..55ca807 100644
--- a/chrome/app/resources/generated_resources_ms.xtb
+++ b/chrome/app/resources/generated_resources_ms.xtb
@@ -3374,6 +3374,7 @@
 <translation id="580886651983547002"><ph name="PRODUCT_NAME"/>
         tidak dapat mencapai tapak web.  Ini biasanya disebabkan oleh isu rangkaian,
         tetapi juga boleh disebabkan oleh tembok api salah konfigurasi atau pelayan proksi.</translation>
+<translation id="4387554346626014084">Dayakan penyegerakan Pelancar Apl. Ini turut mendayakan Folder, jika ada (bukan OSX).</translation>
 <translation id="5445557969380904478">Mengenai pengecam suara</translation>
 <translation id="4104400246019119780">Terima kasih!</translation>
 <translation id="3487007233252413104">fungsi awanama</translation>
@@ -4836,6 +4837,7 @@
 <translation id="8775404590947523323">Suntingan anda disimpan secara automatik.<ph name="BREAKS"/>Untuk menyimpan salinan imej asal, nyahtandakan &quot;Tulis ganti yang asal&quot;</translation>
 <translation id="5208988882104884956">Kelebaran separa</translation>
 <translation id="1507170440449692343">Halaman ini telah disekat daripada mengakses kamera anda.</translation>
+<translation id="4189406272289638749">Pelanjutan, &lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt;, mengawal tetapan ini.</translation>
 <translation id="803771048473350947">Fail</translation>
 <translation id="6206311232642889873">Sal&amp;in Imej</translation>
 <translation id="5158983316805876233">Gunakan proksi yang sama untuk semua protokol</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb
index 301055a..c801c4e 100644
--- a/chrome/app/resources/generated_resources_nl.xtb
+++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -3368,6 +3368,7 @@
 <translation id="580886651983547002"><ph name="PRODUCT_NAME"/>
         kan de website niet bereiken. Dit wordt vaak veroorzaakt door netwerkproblemen,
         maar kan ook worden veroorzaakt door een onjuist geconfigureerde firewall of proxyserver.</translation>
+<translation id="4387554346626014084">Synchronisatie van App Launcher inschakelen. Dit schakelt indien beschikbaar ook 'Mappen' in (niet OSX).</translation>
 <translation id="5445557969380904478">Over spraakherkenning</translation>
 <translation id="4104400246019119780">Hartelijk dank!</translation>
 <translation id="3487007233252413104">anonieme functie</translation>
@@ -4831,6 +4832,7 @@
 <translation id="8775404590947523323">Je bewerkingen worden automatisch opgeslagen.<ph name="BREAKS"/>Als je een kopie van de oorspronkelijke afbeelding wilt behouden, verwijder je het vinkje uit het selectievakje 'Oorspronkelijk bestand overschrijven'.</translation>
 <translation id="5208988882104884956">Halve breedte</translation>
 <translation id="1507170440449692343">Deze pagina heeft geen toegang tot je camera.</translation>
+<translation id="4189406272289638749">Deze instelling wordt beheerd door de extensie &lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt;.</translation>
 <translation id="803771048473350947">Archief</translation>
 <translation id="6206311232642889873">A&amp;fbeelding kopiëren</translation>
 <translation id="5158983316805876233">Dezelfde proxy gebruiken voor alle protocollen</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb
index db0914a..04128af 100644
--- a/chrome/app/resources/generated_resources_no.xtb
+++ b/chrome/app/resources/generated_resources_no.xtb
@@ -1087,7 +1087,7 @@
 <translation id="3808873045540128170">Oisann, rusk i maskineriet …</translation>
 <translation id="744341768939279100">Opprett en ny profil</translation>
 <translation id="646727171725540434">HTTP-mellomtjener</translation>
-<translation id="7576690715254076113">Sammenligne</translation>
+<translation id="7576690715254076113">I rekkefølge</translation>
 <translation id="4594569381978438382">Vil du installere disse programmene?</translation>
 <translation id="602369534869631690">Slå av disse varslene</translation>
 <translation id="409504436206021213">Ikke last inn på nytt</translation>
@@ -3342,6 +3342,7 @@
 <translation id="580886651983547002"><ph name="PRODUCT_NAME"/>
         får ikke kontakt med nettstedet. Dette skyldes vanligvis nettverksproblemer,
         men kan også komme av en feilkonfigurert brannmur eller mellomtjener.</translation>
+<translation id="4387554346626014084">Aktiver synkronisering av appvelgeren. Mapper aktiveres også der de er tilgjengelige (ikke på OSX).</translation>
 <translation id="5445557969380904478">Om talegjenkjenning</translation>
 <translation id="4104400246019119780">Takk!</translation>
 <translation id="3487007233252413104">anonym funksjon</translation>
@@ -4798,6 +4799,7 @@
 <translation id="8775404590947523323">Endringene dine lagres automatisk.<ph name="BREAKS"/>For å beholde en kopi av originalbildet, må du fjerne avmerkingen for «Overskriv originalen»</translation>
 <translation id="5208988882104884956">Halv bredde</translation>
 <translation id="1507170440449692343">Kameraet er blokkert for denne siden.</translation>
+<translation id="4189406272289638749">Denne innstillingen kontrolleres av utvidelsen &lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt;.</translation>
 <translation id="803771048473350947">Fil</translation>
 <translation id="6206311232642889873">&amp;Kopier bilde</translation>
 <translation id="5158983316805876233">Bruk samme mellomtjener for alle protokoller</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb
index 8fb7c8d..9fc1b5a 100644
--- a/chrome/app/resources/generated_resources_pl.xtb
+++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -3329,6 +3329,7 @@
 <translation id="580886651983547002"><ph name="PRODUCT_NAME"/>
         nie może się połączyć z witryną. Najczęstszą przyczyną takiej sytuacji jest problem z siecią,
         ale może ją również powodować nieprawidłowa konfiguracja zapory sieciowej lub serwera proxy.</translation>
+<translation id="4387554346626014084">Włącz synchronizację Menu z aplikacjami. Włączy to też Foldery (nie w OS X).</translation>
 <translation id="5445557969380904478">Informacje o rozpoznawaniu mowy</translation>
 <translation id="4104400246019119780">Dziękujemy</translation>
 <translation id="3487007233252413104">funkcja anonimowa</translation>
@@ -4786,6 +4787,7 @@
 <translation id="8775404590947523323">Twoje zmiany są zapisywane automatycznie.<ph name="BREAKS"/>Aby zachować kopię oryginalnego obrazu, odznacz „Zastąp oryginalny”.</translation>
 <translation id="5208988882104884956">Połowa szerokości</translation>
 <translation id="1507170440449692343">Ta strona ma zablokowany dostęp do kamery.</translation>
+<translation id="4189406272289638749">Kontrolę nad tym ustawieniem ma rozszerzenie &lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt;.</translation>
 <translation id="803771048473350947">Plik</translation>
 <translation id="6206311232642889873">Kop&amp;iuj grafikę</translation>
 <translation id="5158983316805876233">Używaj tego samego serwera proxy dla wszystkich protokołów</translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb
index ac74936..2db025d 100644
--- a/chrome/app/resources/generated_resources_pt-BR.xtb
+++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -3336,6 +3336,7 @@
 <translation id="580886651983547002">O <ph name="PRODUCT_NAME"/>
         não consegue acessar este site. Normalmente, isso é causado por problemas na rede,
         mas também pode ser resultado de problemas na configuração de um firewall ou servidor proxy.</translation>
+<translation id="4387554346626014084">Ativar sincronização do Acesso rápido aos apps. Também ativa as pastas, quando disponíveis (não para OSX).</translation>
 <translation id="5445557969380904478">Sobre o reconhecimento de voz</translation>
 <translation id="4104400246019119780">Obrigado.</translation>
 <translation id="3487007233252413104">função anônima</translation>
@@ -4792,6 +4793,7 @@
 <translation id="8775404590947523323">Suas edições são salvas automaticamente. <ph name="BREAKS"/>Para manter uma cópia da imagem original, desmarque a opção &quot;Substituir original&quot;</translation>
 <translation id="5208988882104884956">Extensão parcial</translation>
 <translation id="1507170440449692343">Esta página foi impedida de acessar sua câmera.</translation>
+<translation id="4189406272289638749">Uma extensão, &lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt;, está controlando esta configuração.</translation>
 <translation id="803771048473350947">Arquivo</translation>
 <translation id="6206311232642889873">&amp;Copiar imagem</translation>
 <translation id="5158983316805876233">Use o mesmo proxy para todos os protocolos</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb
index 2adebe7..c653d9e 100644
--- a/chrome/app/resources/generated_resources_pt-PT.xtb
+++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -3346,6 +3346,7 @@
 <translation id="580886651983547002">O <ph name="PRODUCT_NAME"/>
         não consegue aceder ao Web site. Normalmente, isto acontece devido a problemas de rede,
         mas também pode ser resultado de uma firewall ou servidor proxy configurado incorrectamente.</translation>
+<translation id="4387554346626014084">Ativar sincronização do Iniciador de Aplicações. Isto também ativa Pastas quando disponíveis (não OSX).</translation>
 <translation id="5445557969380904478">Acerca do reconhecimento de voz</translation>
 <translation id="4104400246019119780">Obrigado!</translation>
 <translation id="3487007233252413104">função anónima</translation>
@@ -4802,6 +4803,7 @@
 <translation id="8775404590947523323">As suas edições são guardadas automaticamente.<ph name="BREAKS"/>Para manter uma cópia da imagem original, desmarque a opção &quot;Substituir original&quot;</translation>
 <translation id="5208988882104884956">Meia Largura</translation>
 <translation id="1507170440449692343">Esta página foi impedida de aceder à sua câmara.</translation>
+<translation id="4189406272289638749">Uma extensão, &lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt;, está a controlar esta definição.</translation>
 <translation id="803771048473350947">Ficheiro</translation>
 <translation id="6206311232642889873">Cop&amp;iar Imagem</translation>
 <translation id="5158983316805876233">Utilizar o mesmo proxy para todos os protocolos</translation>
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb
index e50f63d..727c822 100644
--- a/chrome/app/resources/generated_resources_ro.xtb
+++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -3361,6 +3361,7 @@
 <translation id="580886651983547002"><ph name="PRODUCT_NAME"/>
         nu poate accesa site-ul web. Acest fapt este cauzat în mod normal de probleme de rețea,
         dar poate fi rezultatul unei configurări greșite a unui program firewall sau a unui server proxy.</translation>
+<translation id="4387554346626014084">Activează sincronizarea Lansatorului de aplicații. Activează și Dosarele, după caz (non-OSX).</translation>
 <translation id="5445557969380904478">Despre recunoașterea vocală</translation>
 <translation id="4104400246019119780">Vă mulțumim!</translation>
 <translation id="3487007233252413104">funcție anonimă</translation>
@@ -4818,6 +4819,7 @@
 <translation id="8775404590947523323">Editările dvs. sunt salvate în mod automat.<ph name="BREAKS"/>Pentru a păstra o copie a imaginii originale, debifați „Suprascrieți fișierul original”</translation>
 <translation id="5208988882104884956">Cu jumătate de lățime</translation>
 <translation id="1507170440449692343">Accesul acestei pagini la camera dvs. a fost blocat.</translation>
+<translation id="4189406272289638749">O extensie, &lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt;, controlează această setare.</translation>
 <translation id="803771048473350947">Fișier</translation>
 <translation id="6206311232642889873">Cop&amp;iați imaginea</translation>
 <translation id="5158983316805876233">Utilizați același server proxy pentru toate protocoalele.</translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb
index 6affb91..7fd2eda 100644
--- a/chrome/app/resources/generated_resources_ru.xtb
+++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -3334,6 +3334,7 @@
 <translation id="580886651983547002"><ph name="PRODUCT_NAME"/>
         не может получить доступ к веб-сайту. Обычно это происходит из-за проблем в сети,
         но также может являться следствием неправильной настройки брандмауэра или прокси-сервера.</translation>
+<translation id="4387554346626014084">Включение синхронизации для Панели запуска приложений. Также, где это возможно, включаются папки (не в Mac OS X).</translation>
 <translation id="5445557969380904478">О распознавании голоса</translation>
 <translation id="4104400246019119780">Спасибо!</translation>
 <translation id="3487007233252413104">анонимные функции</translation>
@@ -4789,6 +4790,7 @@
 <translation id="8775404590947523323">Изменения сохраняются автоматически.<ph name="BREAKS"/>Чтобы оставить копию исходного изображения, снимите флажок &quot;Перезаписать оригинал&quot;.</translation>
 <translation id="5208988882104884956">Половинная ширина</translation>
 <translation id="1507170440449692343">Доступ к вашей камере для этой страницы заблокирован.</translation>
+<translation id="4189406272289638749">Этот параметр управляется расширением &lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt;.</translation>
 <translation id="803771048473350947">Файл</translation>
 <translation id="6206311232642889873">Копировать изображение</translation>
 <translation id="5158983316805876233">Использовать единый прокси-сервер для всех протоколов</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb
index 7dfdab5..70f6346 100644
--- a/chrome/app/resources/generated_resources_sk.xtb
+++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -3349,6 +3349,7 @@
 <translation id="580886651983547002">Aplikácii <ph name="PRODUCT_NAME"/>
         sa nepodarilo pripojiť k webovým stránkam.  Obyčajne to býva spôsobené problémami so sieťou,
         ale môže to byť aj výsledkom nesprávne nakonfigurovanej brány firewall alebo servera proxy.</translation>
+<translation id="4387554346626014084">Povoliť synchronizáciu Spúšťača aplikácií. Ak je k dispozícii funkcia zložiek, bude tiež povolená (platí pre všetky operačné systémy okrem OS X).</translation>
 <translation id="5445557969380904478">O rozpoznávaní hlasu</translation>
 <translation id="4104400246019119780">Ďakujeme!</translation>
 <translation id="3487007233252413104">anonymná funkcia</translation>
@@ -4811,6 +4812,7 @@
 <translation id="8775404590947523323">Úpravy sa ukladajú automaticky.<ph name="BREAKS"/>Ak chcete zachovať kópiu pôvodného obrázka, zrušte začiarknutie políčka Prepísať originál</translation>
 <translation id="5208988882104884956">Polovičná šírka</translation>
 <translation id="1507170440449692343">Táto stránka má zablokovaný prístup ku kamere.</translation>
+<translation id="4189406272289638749">Toto nastavenie spravuje rozšírenie &lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt;.</translation>
 <translation id="803771048473350947">Súbor</translation>
 <translation id="6206311232642889873">&amp;Kopírovať obrázok</translation>
 <translation id="5158983316805876233">Použiť rovnaký server proxy pre všetky protokoly</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb
index a547123..a769f95 100644
--- a/chrome/app/resources/generated_resources_sl.xtb
+++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -3361,6 +3361,7 @@
 <translation id="580886651983547002"><ph name="PRODUCT_NAME"/>
         ne more doseči spletnega mesta. To navadno povzročijo težave z omrežjem,
         lahko pa je tudi posledica napačno nastavljenega požarnega zidu ali proxyja.</translation>
+<translation id="4387554346626014084">Omogoči sinhronizacijo zaganjalnika aplikacij. S tem se omogočijo tudi Mape, kjer so na voljo (ne v sistemu OS X).</translation>
 <translation id="5445557969380904478">O prepoznavanju govora</translation>
 <translation id="4104400246019119780">Hvala!</translation>
 <translation id="3487007233252413104">anonimna funkcija</translation>
@@ -4822,6 +4823,7 @@
 <translation id="8775404590947523323">Vaši popravki se samodejno shranijo.<ph name="BREAKS"/>Če želite obdržati kopijo izvirne slike, počistite polje »Prepiši izvirno«</translation>
 <translation id="5208988882104884956">Polovična širina</translation>
 <translation id="1507170440449692343">Tej strani je onemogočen dostop do kamere.</translation>
+<translation id="4189406272289638749">Razširitev &lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt; nadzira to nastavitev.</translation>
 <translation id="803771048473350947">Datoteka</translation>
 <translation id="6206311232642889873">Kop&amp;iraj sliko</translation>
 <translation id="5158983316805876233">Uporabi isti proxy za vse protokole</translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb
index 92b6c17..d629c1e 100644
--- a/chrome/app/resources/generated_resources_sr.xtb
+++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -3360,6 +3360,7 @@
 <translation id="580886651983547002"><ph name="PRODUCT_NAME"/>
         не може да допре до веб сајта. Узрок томе су обично проблеми на мрежи,
         али то може да буде и последица погрешно конфигурисаног заштитног зида или прокси сервера.</translation>
+<translation id="4387554346626014084">Омогућите синхронизацију Покретача апликација. То омогућава и Директоријуме ако су доступни (не на оперативном систему OSX).</translation>
 <translation id="5445557969380904478">О препознавању говора</translation>
 <translation id="4104400246019119780">Хвала!</translation>
 <translation id="3487007233252413104">анонимна функција</translation>
@@ -4819,6 +4820,7 @@
 <translation id="8775404590947523323">Измене се аутоматски чувају.<ph name="BREAKS"/>Да бисте задржали копију оригиналне слике, опозовите избор у пољу за потврду „Замени оригинал“</translation>
 <translation id="5208988882104884956">Пола ширине</translation>
 <translation id="1507170440449692343">Овој страници је забрањен приступ камери.</translation>
+<translation id="4189406272289638749">Додатак, &lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt;, контролише ово подешавање.</translation>
 <translation id="803771048473350947">Датотека</translation>
 <translation id="6206311232642889873">Коп&amp;ирај слику</translation>
 <translation id="5158983316805876233">Користи исти прокси за све протоколе</translation>
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb
index c2d72b4..33d72c3 100644
--- a/chrome/app/resources/generated_resources_sv.xtb
+++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -3356,6 +3356,7 @@
 <translation id="580886651983547002"><ph name="PRODUCT_NAME"/>
         kan inte nå webbplatsen. Detta beror oftast på nätverksproblem,
         men det kan också bero på att brandväggen eller proxyservern är felaktigt konfigurerad.</translation>
+<translation id="4387554346626014084">Aktivera synkronisering av startprogrammet för appar. Detta aktiverar även Mappar där så är möjligt (ej OS X).</translation>
 <translation id="5445557969380904478">Om röstigenkänning</translation>
 <translation id="4104400246019119780">Tack!</translation>
 <translation id="3487007233252413104">anonym funktion</translation>
@@ -4819,6 +4820,7 @@
 <translation id="8775404590947523323">Dina redigeringar sparas automatiskt.<ph name="BREAKS"/>Om du vill spara en kopia av originalbilden avmarkerar du Ersätt original</translation>
 <translation id="5208988882104884956">Halvbreda</translation>
 <translation id="1507170440449692343">Den här sidan får inte använda din kamera.</translation>
+<translation id="4189406272289638749">Ett tillägg,  &lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt;, styr den här inställningen.</translation>
 <translation id="803771048473350947">Arkiv</translation>
 <translation id="6206311232642889873">Kopiera &amp;bild</translation>
 <translation id="5158983316805876233">Använd samma proxy för alla protokoll</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb
index 403b320..8370a66 100644
--- a/chrome/app/resources/generated_resources_sw.xtb
+++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -418,7 +418,7 @@
 <translation id="5516565854418269276">&amp;Onyesha upau wa alamisho kila wakati</translation>
 <translation id="6426222199977479699">Hitilafu ya SSL</translation>
 <translation id="2688196195245426394">Hitilafu wakati wa kusajili kifaa kwa seva: <ph name="CLIENT_ERROR"/>.</translation>
-<translation id="667115622929458276">Kuna vipakuliwa vinavyoendelea chinichini. Je, ungependa kutoka kwenye modi ya chinichini na kukatiza vipakuliwa?</translation>
+<translation id="667115622929458276">Kuna faili zinazopakuliwa chinichini. Je, ungependa kutoka katika hali fiche na ughairi upakuaji?</translation>
 <translation id="1528372117901087631">Muunganisho wa mtandao</translation>
 <translation id="1788636309517085411">Tumia chaguo-msingi</translation>
 <translation id="4159435316791146348">Kwa mwongozo na kibali kutoka CPSC na mashirika mengine ya udhibiti, Google na HP zinatangaza kurejeshwa kwa chaja za asili HP Chromebook 11 kwa muuzaji.</translation>
@@ -1050,7 +1050,7 @@
 <translation id="4037463823853863991">Washa kibadilishaji cha kichupo cha ufikiaji cha Android.</translation>
 <translation id="7394102162464064926">Je, una uhakika unataka kufuta kurasa hizi kutoka kwenye historia yako?
 
-Hebu! Modi ya chini kwa chini <ph name="SHORTCUT_KEY"/> huenda ikawa na umuhimu wakati ujao.</translation>
+Hebu! Huenda hali fiche <ph name="SHORTCUT_KEY"/> ikakufaa wakati ujao.</translation>
 <translation id="1125520545229165057">Dvorak (Hsu)</translation>
 <translation id="8940229512486821554">Endesha amri ya <ph name="EXTENSION_NAME"/>: <ph name="SEARCH_TERMS"/></translation>
 <translation id="7799329977874311193">Hati ya HTML</translation>
@@ -2281,7 +2281,7 @@
 <translation id="9111102763498581341">Fungua</translation>
 <translation id="5975792506968920132">Asilimia ya Kuchaji Betri</translation>
 <translation id="289695669188700754">Utambulisho wa Ufunguo: <ph name="KEY_ID"/></translation>
-<translation id="8183644773978894558">Upakuaji wa chini kwa chini unaendelea kwa sasa. Je, unataka kuondosha modi ya chini kwa chini na ughairi upakuaji?</translation>
+<translation id="8183644773978894558">Sasa hivi kuna faili inayopakuliwa chinichini. Je, ungependa kuondoka katika hali fiche na ughairi upakuaji?</translation>
 <translation id="8767072502252310690">Watumiaji</translation>
 <translation id="683526731807555621">Ongeza mtambo mpya</translation>
 <translation id="6871644448911473373">Kijibu OCSP: <ph name="LOCATION"/></translation>
@@ -3011,7 +3011,7 @@
 <translation id="6723839937902243910">Nishati</translation>
 <translation id="1031460590482534116">Kulikuwa na hitilafu wakati wa kujaribu kuhifadhi cheti cha mteja. Hitilafu <ph name="ERROR_NUMBER"/> (<ph name="ERROR_NAME"/>).</translation>
 <translation id="7296774163727375165"><ph name="DOMAIN"/> Masharti</translation>
-<translation id="25597840138324075">Upakuaji wa chini kwa chini unaendelea</translation>
+<translation id="25597840138324075">Kuna faili inayopakuliwa chinichini</translation>
 <translation id="7136984461011502314">Karibu kwenye <ph name="PRODUCT_NAME"/></translation>
 <translation id="204497730941176055">Jina la Kiolezo cha Cheti kutoka Microsoft</translation>
 <translation id="992032470292211616">Viendelezi, programu, na mandhari vinaweza kudhuru kifaa chako. Je, una uhakika unataka kuendelea?</translation>
@@ -3348,6 +3348,7 @@
 <translation id="8923542159871018393"><ph name="EXTENSION_NAME"/> inaendesha kwenye ukurasa huu.</translation>
 <translation id="580886651983547002"><ph name="PRODUCT_NAME"/>
         haiwezi kufikia tovuti. Hii kwa kawaida inasababishwa na masuala ya mtandao, lakini pia yanaweza kuwa matokeo ya ngome au seva ya proksi iliyosanidiwa kwa njia inayofaa.</translation>
+<translation id="4387554346626014084">Washa usawazisho wa Kizindua Programu. Hii pia huwasha Folda zinapopatikana (sio ya OSX).</translation>
 <translation id="5445557969380904478">Kuhusu utambuaji wa sauti</translation>
 <translation id="4104400246019119780">Asante!</translation>
 <translation id="3487007233252413104">chaguo za kukokotoa zisizo na jina</translation>
@@ -3519,7 +3520,7 @@
 <translation id="1704148620735921991">Mara kinaposakinishwa, kiendelezi hiki kinaweza kutumia idhini hizi kufanya mambo hasidi kwa hali yako ya kuvinjari wavuti. Je, una uhakika unataka kusakinisha kiendelezi hiki?</translation>
 <translation id="1470719357688513792">Mipangilio mipya ya kidakuzi itaanza kutumika baada ya kupakia upya ukurasa.</translation>
 <translation id="5578327870501192725">Muunganisho wako kwa <ph name="DOMAIN"/> umesimbwa kwa usimbaji wa biti-<ph name="BIT_COUNT"/></translation>
-<translation id="3089395242580810162">Fungua kwenye kichupo cha chini kwa chini</translation>
+<translation id="3089395242580810162">Fungua kwenye kichupo fiche</translation>
 <translation id="4964383828912709895">Usipange upya</translation>
 <translation id="4336032328163998280">Uendeshaji wa nakala haukufanikiwa. <ph name="ERROR_MESSAGE"/></translation>
 <translation id="351486934407749662">mrefu sana</translation>
@@ -3602,7 +3603,7 @@
 <translation id="3290704484208221223">Asilimia</translation>
 <translation id="5265562206369321422">Nje ya mtandao kwa zaidi ya wiki moja</translation>
 <translation id="6805647936811177813">Tafadhali ingia kwenye <ph name="TOKEN_NAME"/> ili kuleta cheti cha mteja kutoka kwenye <ph name="HOST_NAME"/>.</translation>
-<translation id="6412931879992742813">Dirisha jipya la chini kwa chini</translation>
+<translation id="6412931879992742813">Dirisha fiche jipya</translation>
 <translation id="1105117579475534983">Ukurasa Wavuti Umezuiwa</translation>
 <translation id="1673103856845176271">Faili isingeweza kufikiwa kwa sababu za usalama.</translation>
 <translation id="1199232041627643649">Shikilia <ph name="KEY_EQUIVALENT"/> ili Kuondoka.</translation>
@@ -4507,7 +4508,7 @@
 <translation id="4557136421275541763">Ilani</translation>
 <translation id="3872687746103784075">Utatuzi wa GDB kulingana na Mteja wa Asili</translation>
 <translation id="4467798014533545464">Onyesha URL</translation>
-<translation id="5923417893962158855">Upakuaji wa chini kwa chini unaendelea</translation>
+<translation id="5923417893962158855">Kuna faili zinazopakuliwa chinichini</translation>
 <translation id="5869403751110648478">Washa chipu asili</translation>
 <translation id="1227507814927581609">Uthibitishaji ulishindwa wakati wa kuunganishwa kwenye &quot;<ph name="DEVICE_NAME"/>&quot;.</translation>
 <translation id="7136694880210472378">Fanya iwe chaguo-msingi</translation>
@@ -4807,6 +4808,7 @@
 <translation id="8775404590947523323">Uhariri wako umehifadhiwa otomatiki.<ph name="BREAKS"/>Ili kuweka nakala ya picha halisi, ondoa tiki kwenye &quot;Futa halisi&quot;</translation>
 <translation id="5208988882104884956">Nusu upana</translation>
 <translation id="1507170440449692343">Ukurasa huu umezuiwa usifikie kamera yako.</translation>
+<translation id="4189406272289638749">Kiendelezi, &lt;b&gt; <ph name="EXTENSION_NAME"/> &lt;/ b&gt;, kinadhibiti mpangilio huu.</translation>
 <translation id="803771048473350947">Faili</translation>
 <translation id="6206311232642889873">&amp;Nakili Picha</translation>
 <translation id="5158983316805876233">Tumia proksi sawa kwa itifaki zote</translation>
@@ -5198,7 +5200,7 @@
 <translation id="249303669840926644">Haikuweza kukamilisha usajili</translation>
 <translation id="2784407158394623927">Huduma yako ya data ya simu ya mkononi inawashwa</translation>
 <translation id="3679848754951088761"><ph name="SOURCE_ORIGIN"/></translation>
-<translation id="4393744079468921084">Ndiyo, toka kwenye modi ya chini kwa chini</translation>
+<translation id="4393744079468921084">Ndiyo, ondoka katika hali fiche</translation>
 <translation id="6920989436227028121">Fungua kama kichupo cha kawaida</translation>
 <translation id="4057041477816018958"><ph name="SPEED"/> - <ph name="RECEIVED_AMOUNT"/></translation>
 <translation id="2050339315714019657">Wima</translation>
@@ -5309,7 +5311,7 @@
 <translation id="1691608011302982743">Uliondoa kifaaa chako haraka sana!</translation>
 <translation id="445923051607553918">Jiunge kwenye mtandao wa Wi-Fi</translation>
 <translation id="1898137169133852367">Powerwash huweka upya kifaa chako cha <ph name="IDS_SHORT_PRODUCT_NAME"/> ili kiwe kama kipya. Zaidi ya hayo, kifaa chako kitarejesha toleo la awali ya <ph name="IDS_SHORT_PRODUCT_NAME"/>.</translation>
-<translation id="4215898373199266584">Hebu! Modi ya chini kwa chini ya (<ph name="INCOGNITO_MODE_SHORTCUT"/>) inaweza kuwa muhimu wakati ujao.</translation>
+<translation id="4215898373199266584">Hebu! Huenda hali fiche (<ph name="INCOGNITO_MODE_SHORTCUT"/>) ikakufaa wakati ujao.</translation>
 <translation id="1048597748939794622">Nguvu imewashwa kwa safu zote</translation>
 <translation id="420676372321767680">Washa usimbaji usio wa kutunga.</translation>
 <translation id="2925966894897775835">Majedwali</translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb
index 5c002cc..051537b 100644
--- a/chrome/app/resources/generated_resources_ta.xtb
+++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -3334,6 +3334,7 @@
 <translation id="580886651983547002"><ph name="PRODUCT_NAME"/>
         வலைத்தளத்தை அடைய முடியவில்லை. இது பிணையச் சிக்கல்களால் ஏற்பட்டிருக்கக்கூடும்,
 	மேலும் தவறாக உள்ளமைக்கப்பட்ட ஃபயர்வால் அல்லது ப்ராக்ஸி சர்வராலும் இவ்வாறு நிகழக்கூடும்.</translation>
+<translation id="4387554346626014084">பயன்பாட்டுத் துவக்கியின் ஒத்திசைவை இயக்கவும். மேலும் இது கோப்புறைகள் இருக்கும் (OSX அல்லாத) இடங்களிலெல்லாம் அவற்றை இயக்குகிறது.</translation>
 <translation id="5445557969380904478">குரல் அறிதல் அறிமுகம்</translation>
 <translation id="4104400246019119780">நன்றி!</translation>
 <translation id="3487007233252413104">அநாமதேய செயல்பாடு</translation>
@@ -4791,6 +4792,7 @@
 <translation id="8775404590947523323">உங்கள் திருத்தங்கள் தானாகவே சேமிக்கப்படுகின்றன.<ph name="BREAKS"/>அசல் படத்தின் நகலை வைத்திருக்க, &quot;அசலில் மேலெழுது&quot; என்பதை நீக்கவும்</translation>
 <translation id="5208988882104884956">அரை அகலம்</translation>
 <translation id="1507170440449692343">இந்தப் பக்கம் உங்கள் கேமராவை அணுகுவதிலிருந்து தடுக்கப்பட்டுள்ளது.</translation>
+<translation id="4189406272289638749">&lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt; என்ற நீட்டிப்பு, இந்த அமைப்பைக் கட்டுப்படுத்துகிறது.</translation>
 <translation id="803771048473350947">கோப்பு</translation>
 <translation id="6206311232642889873">படத்தை நகலெ&amp;டு</translation>
 <translation id="5158983316805876233">எல்லா நெறிமுறைகளுக்கும் ஒரே ப்ராக்ஸியைப் பயன்படுத்து</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb
index 9f06474..f036a6a 100644
--- a/chrome/app/resources/generated_resources_te.xtb
+++ b/chrome/app/resources/generated_resources_te.xtb
@@ -3351,6 +3351,7 @@
 <translation id="580886651983547002"><ph name="PRODUCT_NAME"/>
         వెబ్‌సైట్‌ని చేరుకోలేదు.  ఇది నెట్‌వర్క్‌ సమస్యల వల్ల జరిగింది,
         కానీ తప్పుగా కాన్ఫిగర్ చెయ్యబడిన ఫైర్‌వాల్ లేదా ప్రాక్సీ సర్వర్ యొక్క ఫలితంగా కూడా ఉండవచ్చు.</translation>
+<translation id="4387554346626014084">అనువర్తన లాంచర్ సమకాలీకరణను ప్రారంభించండి. ఇది అందుబాటులో ఉన్నచోట ఫోల్డర్‌లను కూడా ప్రారంభిస్తుంది (OSX కానివి).</translation>
 <translation id="5445557969380904478">వాయిస్ గుర్తింపు గురించి</translation>
 <translation id="4104400246019119780">ధన్యవాదాలు!</translation>
 <translation id="3487007233252413104">అజ్ఞాత కార్యాచరణ</translation>
@@ -4811,6 +4812,7 @@
 <translation id="8775404590947523323">మీ సవరణలు స్వయంచాలకంగా సేవ్ చేయబడతాయి.<ph name="BREAKS"/>అసలు చిత్రం యొక్క నకలును ఉంచడానికి, &quot;అసలును భర్తీ చేయి&quot; ఎంపికను తీసివేయండి</translation>
 <translation id="5208988882104884956">సగం వెడల్పు</translation>
 <translation id="1507170440449692343">ఈ పేజీ మీ కెమెరాను ప్రాప్యత చేయకుండా బ్లాక్ చేయబడింది.</translation>
+<translation id="4189406272289638749">&lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt; అనే పొడిగింపు ఈ సెట్టింగ్‌ను నియంత్రిస్తోంది.</translation>
 <translation id="803771048473350947">ఫైల్</translation>
 <translation id="6206311232642889873">చిత్రాన్ని కా&amp;పీ చెయ్యి</translation>
 <translation id="5158983316805876233">అన్ని ప్రోటోకాల్‌ల కోసం అదే ప్రాక్సీని ఉపయోగించండి</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb
index 663aaac..5c85443 100644
--- a/chrome/app/resources/generated_resources_th.xtb
+++ b/chrome/app/resources/generated_resources_th.xtb
@@ -475,7 +475,7 @@
 <translation id="9050666287014529139">ข้อความรหัสผ่าน</translation>
 <translation id="4880320188904265650">เปิดลิงก์ <ph name="PROTOCOL"/> ทั้งหมดไหม</translation>
 <translation id="5197255632782567636">อินเทอร์เน็ต</translation>
-<translation id="8787254343425541995">อนุญาตให้ใช้พร็อกซีสำหรับเครือข่ายที่แบ่งปันไว้</translation>
+<translation id="8787254343425541995">อนุญาตให้ใช้พร็อกซีสำหรับเครือข่ายที่แชร์ไว้</translation>
 <translation id="4755860829306298968">จัดการการบล็อกปลั๊กอิน...</translation>
 <translation id="8879284080359814990">แ&amp;สดงเป็นแถบ</translation>
 <translation id="4314714876846249089"><ph name="PRODUCT_NAME"/>
@@ -1342,7 +1342,7 @@
 <translation id="2869742291459757746">อนุญาตให้ผู้ใช้ให้ Chrome สร้างรหัสผ่านเมื่อตรวจพบหน้าเว็บการสร้างบัญชี</translation>
 <translation id="833853299050699606">ไม่มีรายละเอียดแผนข้อมูล</translation>
 <translation id="7079038783243627996">&quot;<ph name="EXTENSION"/>&quot; จะสามารถอ่านและลบไฟล์รูปภาพ วิดีโอ และเสียงในโฟลเดอร์ที่เลือกไว้</translation>
-<translation id="1737968601308870607">บั๊กของไฟล์</translation>
+<translation id="1737968601308870607">ข้อบกพร่องของไฟล์</translation>
 <translation id="7326487563595667270">ลูกโป่งติดตั้งแอปพลิเคชันใหม่</translation>
 <translation id="8437238597147034694">&amp;เลิกทำการย้าย</translation>
 <translation id="8670734860857459042">&lt;p&gt;
@@ -1445,7 +1445,7 @@
 <translation id="3574210789297084292">ลงชื่อเข้าใช้</translation>
 <translation id="1146204723345436916">นำเข้าบุ๊กมาร์กจากไฟล์ HTML...</translation>
 <translation id="2113921862428609753">การเข้าถึงข้อมูลผู้ออกใบรับรอง</translation>
-<translation id="9190063653747922532">L2TP/IPsec + คีย์ที่แบ่งปันล่วงหน้า</translation>
+<translation id="9190063653747922532">L2TP/IPsec + คีย์ที่แชร์ล่วงหน้า</translation>
 <translation id="5227536357203429560">เพิ่มเครือข่ายส่วนบุคคล...</translation>
 <translation id="732677191631732447">คัด&amp;ลอก URL เสียง</translation>
 <translation id="7224023051066864079">ซับเน็ตมาสก์:</translation>
@@ -1943,8 +1943,8 @@
 <translation id="4112917766894695549">การตั้งค่าเหล่านี้ถูกบังคับใช้โดยผู้ดูแลระบบของคุณ</translation>
 <translation id="5669267381087807207">กำลังเปิดการใช้งาน</translation>
 <translation id="8825366169884721447">ส่วนขยายนี้ไม่สามารถแก้ไขส่วนหัวคำขอ &quot;<ph name="HEADER_NAME"/>&quot; ของคำขอเครือข่ายได้เนื่องจากการแก้ไขขัดแย้งกับส่วนขยายอื่น (<ph name="EXTENSION_NAME"/>)</translation>
-<translation id="5308845175611284862">การซิงค์ <ph name="PRODUCT_NAME"/> ทำให้คุณสามารถแบ่งปันข้อมูล (เช่น บุ๊กมาร์กและการตั้งค่า) ระหว่างเครื่องคอมพิวเตอร์ของคุณได้ง่ายขึ้น <ph name="PRODUCT_NAME"/> จะซิงค์ข้อมูลของคุณโดยจัดเก็บข้อมูลแบบออนไลน์ไว้กับ Google เมื่อคุณลงชื่อเข้าใช้บัญชี Google ของคุณ</translation>
-<translation id="1707463636381878959">แบ่งปันเครือข่ายนี้กับผู้ใช้อื่น</translation>
+<translation id="5308845175611284862">การซิงค์ <ph name="PRODUCT_NAME"/> ทำให้คุณสามารถแชร์ข้อมูล (เช่น บุ๊กมาร์กและการตั้งค่า) ระหว่างเครื่องคอมพิวเตอร์ของคุณได้ง่ายขึ้น <ph name="PRODUCT_NAME"/> จะซิงค์ข้อมูลของคุณโดยจัดเก็บข้อมูลแบบออนไลน์ไว้กับ Google เมื่อคุณลงชื่อเข้าใช้บัญชี Google ของคุณ</translation>
+<translation id="1707463636381878959">แชร์เครือข่ายนี้กับผู้ใช้อื่น</translation>
 <translation id="2084978867795361905">MS-IME</translation>
 <translation id="7701625482249298476">เปิดใช้ปุ่มค้นหาในแถบอเนกประสงค์</translation>
 <translation id="1818196664359151069">ความละเอียด:</translation>
@@ -2203,7 +2203,7 @@
 <translation id="5512030650494444738">ดอกไม้</translation>
 <translation id="6462080265650314920">แอปพลิเคชันต้องได้รับบริการจากประเภทเนื้อหา &quot;<ph name="CONTENT_TYPE"/>&quot;</translation>
 <translation id="1559235587769913376">ป้อนอักขระ Unicode</translation>
-<translation id="3297788108165652516">เครือข่ายนี้มีการแบ่งปันกับผู้ใช้อื่น</translation>
+<translation id="3297788108165652516">เครือข่ายนี้มีการแชร์กับผู้ใช้อื่น</translation>
 <translation id="4810984886082414856">แคชพื้นฐานสำหรับ HTTP</translation>
 <translation id="1548132948283577726">ไซต์ที่ไม่เคยบันทึกรหัสผ่านจะแสดงขึ้นที่นี่</translation>
 <translation id="583281660410589416">ไม่รู้จัก</translation>
@@ -2420,7 +2420,7 @@
 <translation id="6584878029876017575">การรับรองตลอดชีพของ Microsoft</translation>
 <translation id="562901740552630300">ไปที่
           <ph name="BEGIN_BOLD"/>
-          เริ่ม &gt; แผงควบคุม &gt; เครือข่ายและอินเทอร์เน็ต &gt; เครือข่ายและศูนย์การแบ่งปัน &gt; การแก้ไขปัญหา (ที่ด้านล่าง) &gt; การเชื่อมต่ออินเทอร์เน็ต
+          เริ่ม &gt; แผงควบคุม &gt; เครือข่ายและอินเทอร์เน็ต &gt; เครือข่ายและศูนย์การแชร์ &gt; การแก้ไขปัญหา (ที่ด้านล่าง) &gt; การเชื่อมต่ออินเทอร์เน็ต
           <ph name="END_BOLD"/></translation>
 <translation id="2773223079752808209">การสนับสนุนลูกค้า</translation>
 <translation id="2143915448548023856">การตั้งค่าการแสดงผล</translation>
@@ -2439,7 +2439,7 @@
 <translation id="59174027418879706">เปิดใช้งานแล้ว</translation>
 <translation id="4194415033234465088">Dachen 26</translation>
 <translation id="8725798467599003282">เปิดใช้ลูกโป่งรหัสผ่าน ลูกโป่งรหัสผ่านมอบวิธีง่ายๆ ในการเก็บและจัดการรหัสผ่านสำหรับเว็บไซต์ โดยจะแทนที่แถบข้อมูลสำหรับการบันทึกรหัสผ่าน</translation>
-<translation id="3554751249011484566">จะมีการแบ่งปันรายละเอียดต่อไปนี้กับ <ph name="SITE"/></translation>
+<translation id="3554751249011484566">จะมีการแชร์รายละเอียดต่อไปนี้กับ <ph name="SITE"/></translation>
 <translation id="872537912056138402">โครเอเชีย</translation>
 <translation id="6639554308659482635">หน่วยความจำ SQLite</translation>
 <translation id="7231224339346098802">ใช้ตัวเลขเพื่อระบุจำนวนสำเนาที่ต้องการพิมพ์ (1 หรือมากกว่า)</translation>
@@ -3010,7 +3010,7 @@
 <translation id="1358735829858566124">ไฟล์หรือไดเรกทอรีใช้งานไม่ได้</translation>
 <translation id="175772926354468439">เปิดใช้งานธีม</translation>
 <translation id="3144135466825225871">ไม่สามารถแทนที่ไฟล์ CRX ได้ โปรดตรวจสอบดูว่าไฟล์มีการใช้งานอยู่หรือไม่</translation>
-<translation id="2744221223678373668">ที่แบ่งปัน</translation>
+<translation id="2744221223678373668">ที่แชร์</translation>
 <translation id="9064142312330104323">รูปภาพ Google โปรไฟล์ (กำลังโหลด)</translation>
 <translation id="3930617119570072742">คุณไว้วางใจให้ส่วนขยายนี้ทำงานเหล่านี้ไหม</translation>
 <translation id="4708849949179781599">ออกจาก <ph name="PRODUCT_NAME"/></translation>
@@ -3312,6 +3312,7 @@
 <translation id="580886651983547002"><ph name="PRODUCT_NAME"/>
         ไม่สามารถเข้าถึงเว็บไซต์ โดยทั่วไปแล้ว จะมีสาเหตุมาจากปัญหาเครือข่าย
         แต่อาจเป็นผลมาจากไฟร์วอลล์หรือพร็อกซีเซิร์ฟเวอร์ที่ได้รับการกำหนดค่าไม่ถูกต้อง</translation>
+<translation id="4387554346626014084">เปิดการซิงค์เครื่องเรียกใช้งานแอป โดยจะเปิดใช้โฟลเดอร์ด้วยเมื่อพร้อมใช้งาน (ไม่ใช่ OSX)</translation>
 <translation id="5445557969380904478">เกี่ยวกับการจดจำเสียง</translation>
 <translation id="4104400246019119780">ขอขอบคุณ!</translation>
 <translation id="3487007233252413104">ฟังก์ชันที่ไม่ระบุชื่อ</translation>
@@ -4126,7 +4127,7 @@
 <translation id="6361850914223837199">รายละเอียดข้อผิดพลาด:</translation>
 <translation id="7187948801578913257">แอปพลิเคชันที่แพ็คและคีย์ส่วนตัวจะถูกเขียนในไดเรกทอรีระดับบนสุดของไดเรกทอรีรากของแอปพลิเคชันที่จะแพ็ค ในการอัปเดตแอปพลิเคชัน ให้เลือกไฟล์คีย์ส่วนตัวเพื่อนำมาใช้ใหม่อีกครั้ง</translation>
 <translation id="8948393169621400698">อนุญาตให้ใช้ปลั๊กอินบน <ph name="HOST"/> เสมอ</translation>
-<translation id="6527303717912515753">แบ่งปัน</translation>
+<translation id="6527303717912515753">แชร์</translation>
 <translation id="8731948433915954843">ย้าย URL ออกจากแถบอเนกประสงค์และแสดงชื่อโฮสต์ในชิปเดิมในแถบเครื่องมือ</translation>
 <translation id="8211154138148153396">การแจ้งเตือนการค้นพบอุปกรณ์ในเครือข่ายภายใน</translation>
 <translation id="5039512255859636053">$1 TB</translation>
@@ -4198,7 +4199,7 @@
 <translation id="7583419135027754249">ส่งกิจกรรมการคลิกทันทีเสมอเมื่อมีการแตะ แม้ในกรณีที่การแตะเป็นส่วนหนึ่งของท่าทางสัมผัสแตะสองครั้ง  การดำเนินการนี้ทำให้การนำทางและการทำงานการแตะอื่นๆ เร็วขึ้น 300 มิลลิวินาทีในหน้าเว็บส่วนใหญ่ แต่หมายความว่าต้องหลีกเลี่ยงลิงก์และปุ่มเมื่อแตะสองครั้งเพื่อซูม</translation>
 <translation id="2164561725439241890">เขียนไปยังไฟล์ที่คุณเปิดในแอปพลิเคชัน</translation>
 <translation id="1196944142850240972">เข้าถึงข้อมูลของคุณบนเว็บไซต์ทั้งหมด</translation>
-<translation id="4100843820583867709">คำขอแบ่งปันหน้าจอของ Google Talk</translation>
+<translation id="4100843820583867709">คำขอแชร์หน้าจอของ Google Talk</translation>
 <translation id="2406941037785138796">การปิดการใช้งาน</translation>
 <translation id="5030338702439866405">ออกโดย</translation>
 <translation id="7940103665344164219">การใช้หน่วยความจำที่ใช้ร่วมกัน</translation>
@@ -4768,6 +4769,7 @@
 <translation id="8775404590947523323">การแก้ไขของคุณจะถูกบันทึกไว้โดยอัตโนมัติ<ph name="BREAKS"/>หากต้องการเก็บสำเนาของภาพต้นฉบับ ให้ยกเลิกการทำเครื่องหมาย &quot;เขียนทับต้นฉบับ&quot;</translation>
 <translation id="5208988882104884956">ตัวย่อ</translation>
 <translation id="1507170440449692343">หน้านี้ถูกบล็อกไม่ให้เข้าถึงกล้องของคุณ</translation>
+<translation id="4189406272289638749">ส่วนขยาย &lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt; กำลังควบคุมการตั้งค่านี้</translation>
 <translation id="803771048473350947">ไฟล์</translation>
 <translation id="6206311232642889873">คัดลอ&amp;กรูปภาพ</translation>
 <translation id="5158983316805876233">ใช้พร็อกซีเดียวกันสำหรับโปรโตคอลทั้งหมด</translation>
@@ -5078,7 +5080,7 @@
 <translation id="2960316970329790041">หยุดการนำเข้า</translation>
 <translation id="8575286330460702756">ข้อมูลลายเซ็น</translation>
 <translation id="6812841287760418429">เก็บการเปลี่ยนแปลงไว้</translation>
-<translation id="3835522725882634757">แย่แล้ว! เซิร์ฟเวอร์นี้กำลังส่งข้อมูลที่ <ph name="PRODUCT_NAME"/> ไม่เข้าใจ โปรด<ph name="BEGIN_LINK"/>รายงานบั๊ก<ph name="END_LINK"/> และรวม<ph name="BEGIN2_LINK"/>รายการที่ยังไม่ผ่านกระบวนการ<ph name="END2_LINK"/>ไว้ด้วย</translation>
+<translation id="3835522725882634757">แย่แล้ว! เซิร์ฟเวอร์นี้กำลังส่งข้อมูลที่ <ph name="PRODUCT_NAME"/> ไม่เข้าใจ โปรด<ph name="BEGIN_LINK"/>รายงานข้อบกพร่อง<ph name="END_LINK"/> และรวม<ph name="BEGIN2_LINK"/>รายการที่ยังไม่ผ่านกระบวนการ<ph name="END2_LINK"/>ไว้ด้วย</translation>
 <translation id="2989474696604907455">ไม่ได้แนบ</translation>
 <translation id="825340570657769992">เปิดใช้งานการเข้ารหัสการซิงค์แหล่งเก็บคีย์</translation>
 <translation id="3566784263424350852">เข้าถึงอุปกรณ์ USB จาก <ph name="VENDOR_NAME"/></translation>
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb
index 9caae37..75f191b 100644
--- a/chrome/app/resources/generated_resources_tr.xtb
+++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -2855,7 +2855,7 @@
 <translation id="961805664415579088"><ph name="DOMAIN"/> alanındaki herhangi bir bilgisayarla veri değişimi</translation>
 <translation id="4521805507184738876">(süresi doldu)</translation>
 <translation id="111844081046043029">Bu sayfadan ayrılmak istediğinizden emin misiniz?</translation>
-<translation id="4195814663415092787">Bıraktığım yerden devam et</translation>
+<translation id="4195814663415092787">Kaldığım yerden devam et</translation>
 <translation id="7622994733745016847">Özel Bellek Kullanımı</translation>
 <translation id="1951615167417147110">Bir sayfa yukarı kaydır</translation>
 <translation id="6203231073485539293">İnternet bağlantınızı kontrol edin</translation>
@@ -3360,6 +3360,7 @@
 <translation id="580886651983547002"><ph name="PRODUCT_NAME"/>
         web sitesine erişemiyor. Bu, normalde ağdaki sorunlardan kaynaklanır,
         ama yanlış yapılandırılmış bir güvenlik duvarı veya proxy sunucusu da buna yol açabilir.</translation>
+<translation id="4387554346626014084">Uygulama Başlatıcı senkronizasyonunu etkinleştirin. Bu ayrıca, kullanılabildiğinde Klasörleri de etkinleştirir (OSX dışında)</translation>
 <translation id="5445557969380904478">Ses tanıma hakkında</translation>
 <translation id="4104400246019119780">Teşekkür ederiz!</translation>
 <translation id="3487007233252413104">anonim işlev</translation>
@@ -4822,6 +4823,7 @@
 <translation id="8775404590947523323">Yaptığınız düzenlemeler otomatik olarak kaydedilir. <ph name="BREAKS"/>Orijinal resmin kopyasını saklamak için &quot;Orijinalin üzerine yaz&quot; seçeneğinin işaretini kaldırın</translation>
 <translation id="5208988882104884956">Yarım genişlik</translation>
 <translation id="1507170440449692343">Bu sayfanın kameranıza erişimi engellenmiştir.</translation>
+<translation id="4189406272289638749">Bir uzantı (&lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt;) bu ayarı kontrol ediyor.</translation>
 <translation id="803771048473350947">Dosya</translation>
 <translation id="6206311232642889873">Resmi Kop&amp;yala</translation>
 <translation id="5158983316805876233">Tüm protokoller için aynı proxy'yi kullan</translation>
diff --git a/chrome/app/resources/generated_resources_uk.xtb b/chrome/app/resources/generated_resources_uk.xtb
index ea5d703..50255e7 100644
--- a/chrome/app/resources/generated_resources_uk.xtb
+++ b/chrome/app/resources/generated_resources_uk.xtb
@@ -2028,7 +2028,7 @@
 <translation id="1362165759943288856"><ph name="DATE"/> ви придбали необмежений пакет даних</translation>
 <translation id="2078019350989722914">Попереджати перед виходом (<ph name="KEY_EQUIVALENT"/>)</translation>
 <translation id="7965010376480416255">Спільна пам’ять</translation>
-<translation id="6248988683584659830">Налаштування пошуку</translation>
+<translation id="6248988683584659830">Пошук налаштувань</translation>
 <translation id="8323232699731382745">пароль мережі</translation>
 <translation id="7273110280511444812">останнє підключення: <ph name="DATE"/></translation>
 <translation id="6588399906604251380">Увімкнути перевірку орфографії</translation>
@@ -3303,6 +3303,7 @@
 <translation id="6003177993629630467">Можливо <ph name="PRODUCT_NAME"/> не зможе оновлюватись.</translation>
 <translation id="8923542159871018393">На цій сторінці запущено розширення <ph name="EXTENSION_NAME"/>.</translation>
 <translation id="580886651983547002"><ph name="PRODUCT_NAME"/> не може зв'язатися з веб-сайтом. Зазвичай причиною є проблеми мережі, але це також може бути наслідком неправильно налаштованого брандмауера чи проксі-сервера.</translation>
+<translation id="4387554346626014084">Увімкнути синхронізацію панелі запуску додатків. Також вмикає папки, де це можливо (крім OSX).</translation>
 <translation id="5445557969380904478">Про розпізнавання голосу</translation>
 <translation id="4104400246019119780">Дякуємо.</translation>
 <translation id="3487007233252413104">анонімна функція</translation>
@@ -4759,6 +4760,7 @@
 <translation id="8775404590947523323">Ваші зміни зберігаються автоматично.<ph name="BREAKS"/>Щоб зберегти копію оригінального зображення, зніміть прапорець поруч з опцією &quot;Замінити оригінал&quot;</translation>
 <translation id="5208988882104884956">Половинна ширина</translation>
 <translation id="1507170440449692343">Доступ цієї сторінки до вашої камери заблоковано.</translation>
+<translation id="4189406272289638749">Розширення &lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt; контролює це налаштування.</translation>
 <translation id="803771048473350947">Файл</translation>
 <translation id="6206311232642889873">Копіюват&amp;и зображення</translation>
 <translation id="5158983316805876233">Використовувати один проксі-сервер для всіх протоколів</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb
index 58daee1..39c1801 100644
--- a/chrome/app/resources/generated_resources_vi.xtb
+++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -2875,7 +2875,7 @@
 <translation id="1829129547161959350">Chim cánh cụt</translation>
 <translation id="8988255471271407508">Không tìm thấy trang web này trong bộ nhớ cache. Một số tài nguyên chỉ có thể được tải một cách an toàn từ bộ nhớ cache, chẳng hạn như các trang được tạo từ dữ liệu đã gửi. <ph name="LINE_BREAK"/> Lỗi này cũng có thể do hỏng bộ nhớ cache khi tắt không đúng cách. <ph name="LINE_BREAK"/> Nếu sự cố vẫn tiếp diễn, hãy thử xóa bộ nhớ cache.</translation>
 <translation id="1653828314016431939">OK - Khởi động lại ngay bây giờ</translation>
-<translation id="7364796246159120393">Chọn Tệp tin</translation>
+<translation id="7364796246159120393">Chọn tệp</translation>
 <translation id="6585283250473596934">Đăng nhập vào phiên công khai.</translation>
 <translation id="8915370057835397490">Đang tải đề xuất</translation>
 <translation id="264911923226702984">Mystery Hoa Kỳ</translation>
@@ -3365,6 +3365,7 @@
 <translation id="580886651983547002"><ph name="PRODUCT_NAME"/>
         không thể truy cập trang web.  Điều này thường do sự cố mạng,
         nhưng cũng có thể do việc định cấu hình sai tường lừa hoặc máy chủ proxy.</translation>
+<translation id="4387554346626014084">Bật Đồng bộ hóa trình khởi chạy ứng dụng. Thao tác này cũng bật Thư mục khi có thể (không phải OSX).</translation>
 <translation id="5445557969380904478">Giới thiệu về nhận dạng giọng nói</translation>
 <translation id="4104400246019119780">Cảm ơn bạn!</translation>
 <translation id="3487007233252413104">chức năng ẩn danh</translation>
@@ -4825,6 +4826,7 @@
 <translation id="8775404590947523323">Chỉnh sửa của bạn đã được lưu tự động.<ph name="BREAKS"/>Để giữ bản sao của ảnh gốc, hãy bỏ chọn &quot;Ghi đè tệp gốc&quot;</translation>
 <translation id="5208988882104884956">Nửa độ rộng</translation>
 <translation id="1507170440449692343">Trang này đã bị chặn truy cập máy ảnh của bạn.</translation>
+<translation id="4189406272289638749">Tiện ích mở rộng, &lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt;, đang kiểm soát cài đặt này.</translation>
 <translation id="803771048473350947">Tệp</translation>
 <translation id="6206311232642889873">Sao ché&amp;p Hình ảnh</translation>
 <translation id="5158983316805876233">Sử dụng cùng một proxy cho tất cả các giao thức</translation>
diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb
index b88d623..4c5f114 100644
--- a/chrome/app/resources/generated_resources_zh-CN.xtb
+++ b/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -281,7 +281,7 @@
 <translation id="8110513421455578152">指定默认图块高度。</translation>
 <translation id="7002454948392136538">选择此受监管用户的管理员</translation>
 <translation id="4640525840053037973">使用您的 Google 帐户登录</translation>
-<translation id="4923279099980110923">是的，我希望能够提供帮助</translation>
+<translation id="4923279099980110923">我愿意提供帮助</translation>
 <translation id="5255315797444241226">您输入的密码不正确。</translation>
 <translation id="521582610500777512">照片已被舍弃</translation>
 <translation id="762917759028004464">目前的默认浏览器是 <ph name="BROWSER_NAME"/>。</translation>
@@ -3318,6 +3318,7 @@
 <translation id="8923542159871018393"><ph name="EXTENSION_NAME"/> 正在此网页上运行。</translation>
 <translation id="580886651983547002"><ph name="PRODUCT_NAME"/>
         无法访问该网站。这通常是由于网络问题导致的，但也可能是由于防火墙或代理服务器配置不正确导致的。</translation>
+<translation id="4387554346626014084">启用应用启动器同步。如果有Folders的话，Folders也将一并启用（非OSX）。</translation>
 <translation id="5445557969380904478">关于语音识别</translation>
 <translation id="4104400246019119780">谢谢！</translation>
 <translation id="3487007233252413104">匿名函数</translation>
@@ -4770,6 +4771,7 @@
 <translation id="8775404590947523323">系统会自动保存您所做的修改。<ph name="BREAKS"/>要保留原始图像的副本，请取消选中“覆盖原始文件”。</translation>
 <translation id="5208988882104884956">半角</translation>
 <translation id="1507170440449692343">已阻止此网页使用您的摄像头。</translation>
+<translation id="4189406272289638749">此设置目前由扩展程序&lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt;控制。</translation>
 <translation id="803771048473350947">文件</translation>
 <translation id="6206311232642889873">复制图片(&amp;Y)</translation>
 <translation id="5158983316805876233">对所有协议使用同一代理</translation>
diff --git a/chrome/app/resources/generated_resources_zh-TW.xtb b/chrome/app/resources/generated_resources_zh-TW.xtb
index ae4b8ac..1f6f3cc 100644
--- a/chrome/app/resources/generated_resources_zh-TW.xtb
+++ b/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -3331,6 +3331,7 @@
 <translation id="8923542159871018393"><ph name="EXTENSION_NAME"/> 正在這個網頁上執行。</translation>
 <translation id="580886651983547002"><ph name="PRODUCT_NAME"/>
         無法瀏覽這個網站，這種狀況通常是網路連線問題所造成的，但也可能是因為防火牆或 Proxy 伺服器設定錯誤所致。</translation>
+<translation id="4387554346626014084">啟用「應用程式啟動器」同步功能。如有「資料夾」也會一併啟用 (非 OSX)。</translation>
 <translation id="5445557969380904478">關於語音辨識</translation>
 <translation id="4104400246019119780">感謝您！</translation>
 <translation id="3487007233252413104">匿名函式</translation>
@@ -4787,6 +4788,7 @@
 <translation id="8775404590947523323">您的編輯已自動儲存。<ph name="BREAKS"/>如要保留原始圖片複本，請取消勾選 [覆寫原始檔案]</translation>
 <translation id="5208988882104884956">半形</translation>
 <translation id="1507170440449692343">系統已封鎖這個網頁存取您的攝影機。</translation>
+<translation id="4189406272289638749">&lt;b&gt;<ph name="EXTENSION_NAME"/>&lt;/b&gt; 擴充功能正在控制這項設定。</translation>
 <translation id="803771048473350947">檔案</translation>
 <translation id="6206311232642889873">複製影像(&amp;Y)</translation>
 <translation id="5158983316805876233">對所有通訊協定使用相同的 Proxy</translation>
diff --git a/chrome/app/resources/google_chrome_strings_th.xtb b/chrome/app/resources/google_chrome_strings_th.xtb
index ff3fd63..baf1e94 100644
--- a/chrome/app/resources/google_chrome_strings_th.xtb
+++ b/chrome/app/resources/google_chrome_strings_th.xtb
@@ -28,7 +28,7 @@
 <translation id="110877069173485804">นี่คือ Chrome ของคุณ</translation>
 <translation id="2896252579017640304">เปิดแอปพลิเคชัน Chrome</translation>
 <translation id="2370289711218562573">Google Chrome กำลังนำเข้ารายการโปรด/บุ๊คมาร์ค</translation>
-<translation id="2721687379934343312">สำหรับ Mac รหัสผ่านจะถูกบันทึกไว้ใน Keychain และผู้ใช้ Chrome คนอื่นๆ ที่แบ่งปันบัญชี OS X นี้อาจสามารถเข้าถึงหรือซิงค์รหัสผ่านนี้ได้</translation>
+<translation id="2721687379934343312">สำหรับ Mac รหัสผ่านจะถูกบันทึกไว้ใน Keychain และผู้ใช้ Chrome คนอื่นๆ ที่แชร์บัญชี OS X นี้อาจสามารถเข้าถึงหรือซิงค์รหัสผ่านนี้ได้</translation>
 <translation id="4953650215774548573">ตั้ง Google Chrome เป็นเบราว์เซอร์เริ่มต้นของคุณ</translation>
 <translation id="6014844626092547096">ขณะนี้คุณลงชื่อเข้าใช้ Chrome แล้ว! การซิงค์ถูกปิดใช้งานโดยผู้ดูแลระบบของคุณ</translation>
 <translation id="7419046106786626209">Chrome OS ไม่สามารถซิงค์ข้อมูลของคุณเนื่องจากการซิงค์ไม่พร้อมให้บริการสำหรับโดเมนของคุณ</translation>
diff --git a/chrome/app/resources/locale_settings.grd b/chrome/app/resources/locale_settings.grd
index 7a1ec1c..240e9d3 100644
--- a/chrome/app/resources/locale_settings.grd
+++ b/chrome/app/resources/locale_settings.grd
@@ -165,7 +165,7 @@
   </translations>
   <release seq="1" allow_pseudo="false">
     <includes>
-      <!-- The HTML for the about:terms page -->     
+      <!-- The HTML for the about:terms page -->
       <if expr="chromeos and _google_chrome">
         <include name="IDS_TERMS_HTML" file="terms\chromeos\terms_en.html" type="BINDATA" />
       </if>
@@ -264,40 +264,38 @@
         55
       </message>
 
-      <!-- The width of the ash/ChromeOS system tray menu in pixels. -->
-      <message name="IDS_SYSTEM_TRAY_MENU_BUBBLE_WIDTH_PIXELS" use_name_for_id="true">
-        300
-      </message>
-       
-      <!-- The width of the Conflicting Module bubble in characters (See above). -->
-      <message name="IDS_CONFLICTING_MODULE_BUBBLE_WIDTH_CHARS" use_name_for_id="true">
-        46
-      </message>
+      <if expr="is_win or chromeos">
+        <!-- The width of the ash/ChromeOS system tray menu in pixels. -->
+        <message name="IDS_SYSTEM_TRAY_MENU_BUBBLE_WIDTH_PIXELS" use_name_for_id="true">
+          300
+        </message>
+      </if>
 
-      <!-- The width and height of the Join Wi-Fi network dialog box in -->
-      <!-- characters and lines (See above). -->
-      <message name="IDS_JOIN_WIFI_NETWORK_DIALOG_WIDTH_CHARS" use_name_for_id="true">
-        60
-      </message>
-      <message name="IDS_JOIN_WIFI_NETWORK_DIALOG_MINIMUM_HEIGHT_LINES" use_name_for_id="true">
-        4
-      </message>
+      <if expr="is_win">
+        <!-- The width of the Conflicting Module bubble in characters (See above). -->
+        <message name="IDS_CONFLICTING_MODULE_BUBBLE_WIDTH_CHARS" use_name_for_id="true">
+          46
+        </message>
+      </if>
 
-      <!-- The height of the advanced Join Wi-Fi network dialog box in lines. -->
-      <message name="IDS_JOIN_WIFI_NETWORK_DIALOG_ADVANCED_WIDTH_CHARS" use_name_for_id="true">
-        86
-      </message>
-      <message name="IDS_JOIN_WIFI_NETWORK_DIALOG_ADVANCED_MINIMUM_HEIGHT_LINES" use_name_for_id="true">
-        30
-      </message>
-      
-      <!-- The width and height of the Script Bubble in characters and lines -->
-      <message name="IDS_SCRIPTBUBBLE_WIDTH_CHARS" use_name_for_id="true">
-        50
-      </message>
-      <message name="IDS_SCRIPTBUBBLE_HEIGHT_LINES" use_name_for_id="true">
-        5
-      </message>
+      <if expr="chromeos">
+        <!-- The width and height of the Join Wi-Fi network dialog box in -->
+        <!-- characters and lines (See above). -->
+        <message name="IDS_JOIN_WIFI_NETWORK_DIALOG_WIDTH_CHARS" use_name_for_id="true">
+          60
+        </message>
+        <message name="IDS_JOIN_WIFI_NETWORK_DIALOG_MINIMUM_HEIGHT_LINES" use_name_for_id="true">
+          4
+        </message>
+
+        <!-- The height of the advanced Join Wi-Fi network dialog box in lines. -->
+        <message name="IDS_JOIN_WIFI_NETWORK_DIALOG_ADVANCED_WIDTH_CHARS" use_name_for_id="true">
+          86
+        </message>
+        <message name="IDS_JOIN_WIFI_NETWORK_DIALOG_ADVANCED_MINIMUM_HEIGHT_LINES" use_name_for_id="true">
+          30
+        </message>
+      </if>
 
       <!-- The width and height of the Edit Bookmark dialog box in characters and lines -->
       <!-- (See above). -->
@@ -308,15 +306,6 @@
         25
       </message>
 
-      <!-- The width and height of the Import Progress dialog box in characters and -->
-      <!-- lines (See above). -->
-      <message name="IDS_IMPORTPROGRESS_DIALOG_WIDTH_CHARS" use_name_for_id="true">
-        75
-      </message>
-      <message name="IDS_IMPORTPROGRESS_DIALOG_HEIGHT_LINES" use_name_for_id="true">
-        16
-      </message>
-
       <!-- The width and height of the "Mozilla Firefox is locked" dialog box in -->
       <!-- characters and lines (See above). -->
       <message name="IDS_IMPORTLOCK_DIALOG_WIDTH_CHARS" use_name_for_id="true">
@@ -326,11 +315,6 @@
         8
       </message>
 
-      <!-- The minimum width of javascript alert popups. -->
-      <message name="IDS_ALERT_DIALOG_WIDTH_CHARS" use_name_for_id="true">
-        30
-      </message>
-
       <!-- Locale-dependent static encodings string -->
       <message name="IDS_STATIC_ENCODING_LIST" use_name_for_id="true">
         ISO-8859-1,windows-1252
@@ -400,16 +384,6 @@
         65
       </message>
 
-      <!-- The width and height for the "create application shortcuts error" dialog. -->
-      <if expr="is_posix and not is_macosx and not is_ios">
-        <message name="IDS_CREATE_SHORTCUTS_ERROR_DIALOG_WIDTH_CHARS" use_name_for_id="true">
-         60
-        </message>
-        <message name="IDS_CREATE_SHORTCUTS_ERROR_DIALOG_HEIGHT_LINES" use_name_for_id="true">
-         6
-        </message>
-      </if>
-
       <!-- The width of the make-default-in-metro dialog in characters. -->
       <message name="IDS_METRO_FLOW_WIDTH_CHARS" use_name_for_id="true">
         78
@@ -425,20 +399,20 @@
         81
       </message>
 
-      <!-- The width of the help-app dialog in pixels. -->
-      <message name="IDS_HELP_APP_DIALOG_WIDTH_PIXELS" use_name_for_id="true">
-          710
-      </message>
+      <if expr="chromeos">
+        <!-- The width of the help-app dialog in pixels. -->
+        <message name="IDS_HELP_APP_DIALOG_WIDTH_PIXELS" use_name_for_id="true">
+            710
+        </message>
 
-      <!-- The height of the help-app dialog in pixels. -->
-      <message name="IDS_HELP_APP_DIALOG_HEIGHT_PIXELS" use_name_for_id="true">
-          400
-      </message>
+        <!-- The height of the help-app dialog in pixels. -->
+        <message name="IDS_HELP_APP_DIALOG_HEIGHT_PIXELS" use_name_for_id="true">
+            400
+        </message>
 
-        <if expr="chromeos">
-	<message name="IDS_FACTORY_RESET_HELP_URL" translateable="false">
-	  http://support.google.com/chromeos/bin/answer.py?answer=183084&amp;hl=[GRITLANGCODE]
-	</message>
+        <message name="IDS_FACTORY_RESET_HELP_URL" translateable="false">
+          http://support.google.com/chromeos/bin/answer.py?answer=183084&amp;hl=[GRITLANGCODE]
+        </message>
       </if>
     </messages>
   </release>
diff --git a/chrome/app/theme/chrome_unscaled_resources.grd b/chrome/app/theme/chrome_unscaled_resources.grd
index ee53f9e..db4e129 100644
--- a/chrome/app/theme/chrome_unscaled_resources.grd
+++ b/chrome/app/theme/chrome_unscaled_resources.grd
@@ -49,32 +49,33 @@
              files for Windows profile shortcuts. Included here because
              they do not depend on the UI scale factor.
              See: http://crbug.com/167277. -->
-        <include name="IDR_PROFILE_AVATAR_2X_0" file="default_200_percent/profile_avatar_generic.png" type="BINDATA" />
-        <include name="IDR_PROFILE_AVATAR_2X_1" file="default_200_percent/profile_avatar_generic_aqua.png" type="BINDATA" />
-        <include name="IDR_PROFILE_AVATAR_2X_2" file="default_200_percent/profile_avatar_generic_blue.png" type="BINDATA" />
-        <include name="IDR_PROFILE_AVATAR_2X_3" file="default_200_percent/profile_avatar_generic_green.png" type="BINDATA" />
-        <include name="IDR_PROFILE_AVATAR_2X_4" file="default_200_percent/profile_avatar_generic_orange.png" type="BINDATA" />
-        <include name="IDR_PROFILE_AVATAR_2X_5" file="default_200_percent/profile_avatar_generic_purple.png" type="BINDATA" />
-        <include name="IDR_PROFILE_AVATAR_2X_6" file="default_200_percent/profile_avatar_generic_red.png" type="BINDATA" />
-        <include name="IDR_PROFILE_AVATAR_2X_7" file="default_200_percent/profile_avatar_generic_yellow.png" type="BINDATA" />
-        <include name="IDR_PROFILE_AVATAR_2X_8" file="default_200_percent/profile_avatar_secret_agent.png" type="BINDATA" />
-        <include name="IDR_PROFILE_AVATAR_2X_9" file="default_200_percent/profile_avatar_superhero.png" type="BINDATA" />
-        <include name="IDR_PROFILE_AVATAR_2X_10" file="default_200_percent/profile_avatar_volley_ball.png" type="BINDATA" />
-        <include name="IDR_PROFILE_AVATAR_2X_11" file="default_200_percent/profile_avatar_businessman.png" type="BINDATA" />
-        <include name="IDR_PROFILE_AVATAR_2X_12" file="default_200_percent/profile_avatar_ninja.png" type="BINDATA" />
-        <include name="IDR_PROFILE_AVATAR_2X_13" file="default_200_percent/profile_avatar_alien.png" type="BINDATA" />
-        <include name="IDR_PROFILE_AVATAR_2X_14" file="default_200_percent/profile_avatar_awesome.png" type="BINDATA" />
-        <include name="IDR_PROFILE_AVATAR_2X_15" file="default_200_percent/profile_avatar_flower.png" type="BINDATA" />
-        <include name="IDR_PROFILE_AVATAR_2X_16" file="default_200_percent/profile_avatar_pizza.png" type="BINDATA" />
-        <include name="IDR_PROFILE_AVATAR_2X_17" file="default_200_percent/profile_avatar_soccer.png" type="BINDATA" />
-        <include name="IDR_PROFILE_AVATAR_2X_18" file="default_200_percent/profile_avatar_burger.png" type="BINDATA" />
-        <include name="IDR_PROFILE_AVATAR_2X_19" file="default_200_percent/profile_avatar_cat.png" type="BINDATA" />
-        <include name="IDR_PROFILE_AVATAR_2X_20" file="default_200_percent/profile_avatar_cupcake.png" type="BINDATA" />
-        <include name="IDR_PROFILE_AVATAR_2X_21" file="default_200_percent/profile_avatar_dog.png" type="BINDATA" />
-        <include name="IDR_PROFILE_AVATAR_2X_22" file="default_200_percent/profile_avatar_horse.png" type="BINDATA" />
-        <include name="IDR_PROFILE_AVATAR_2X_23" file="default_200_percent/profile_avatar_margarita.png" type="BINDATA" />
-        <include name="IDR_PROFILE_AVATAR_2X_24" file="default_200_percent/profile_avatar_note.png" type="BINDATA" />
-        <include name="IDR_PROFILE_AVATAR_2X_25" file="default_200_percent/profile_avatar_sun_cloud.png" type="BINDATA" />
+        <include name="IDR_PROFILE_AVATAR_2X_0" file="default_200_percent/common/profile_avatar_generic.png" type="BINDATA" />
+        <include name="IDR_PROFILE_AVATAR_2X_1" file="default_200_percent/common/profile_avatar_generic_aqua.png" type="BINDATA" />
+        <include name="IDR_PROFILE_AVATAR_2X_2" file="default_200_percent/common/profile_avatar_generic_blue.png" type="BINDATA" />
+        <include name="IDR_PROFILE_AVATAR_2X_3" file="default_200_percent/common/profile_avatar_generic_green.png" type="BINDATA" />
+        <include name="IDR_PROFILE_AVATAR_2X_4" file="default_200_percent/common/profile_avatar_generic_orange.png" type="BINDATA" />
+        <include name="IDR_PROFILE_AVATAR_2X_5" file="default_200_percent/common/profile_avatar_generic_purple.png" type="BINDATA" />
+        <include name="IDR_PROFILE_AVATAR_2X_6" file="default_200_percent/common/profile_avatar_generic_red.png" type="BINDATA" />
+        <include name="IDR_PROFILE_AVATAR_2X_7" file="default_200_percent/common/profile_avatar_generic_yellow.png" type="BINDATA" />
+        <include name="IDR_PROFILE_AVATAR_2X_8" file="default_200_percent/common/profile_avatar_secret_agent.png" type="BINDATA" />
+        <include name="IDR_PROFILE_AVATAR_2X_9" file="default_200_percent/common/profile_avatar_superhero.png" type="BINDATA" />
+        <include name="IDR_PROFILE_AVATAR_2X_10" file="default_200_percent/common/profile_avatar_volley_ball.png" type="BINDATA" />
+        <include name="IDR_PROFILE_AVATAR_2X_11" file="default_200_percent/common/profile_avatar_businessman.png" type="BINDATA" />
+        <include name="IDR_PROFILE_AVATAR_2X_12" file="default_200_percent/common/profile_avatar_ninja.png" type="BINDATA" />
+        <include name="IDR_PROFILE_AVATAR_2X_13" file="default_200_percent/common/profile_avatar_alien.png" type="BINDATA" />
+        <include name="IDR_PROFILE_AVATAR_2X_14" file="default_200_percent/common/profile_avatar_awesome.png" type="BINDATA" />
+        <include name="IDR_PROFILE_AVATAR_2X_15" file="default_200_percent/common/profile_avatar_flower.png" type="BINDATA" />
+        <include name="IDR_PROFILE_AVATAR_2X_16" file="default_200_percent/common/profile_avatar_pizza.png" type="BINDATA" />
+        <include name="IDR_PROFILE_AVATAR_2X_17" file="default_200_percent/common/profile_avatar_soccer.png" type="BINDATA" />
+        <include name="IDR_PROFILE_AVATAR_2X_18" file="default_200_percent/common/profile_avatar_burger.png" type="BINDATA" />
+        <include name="IDR_PROFILE_AVATAR_2X_19" file="default_200_percent/common/profile_avatar_cat.png" type="BINDATA" />
+        <include name="IDR_PROFILE_AVATAR_2X_20" file="default_200_percent/common/profile_avatar_cupcake.png" type="BINDATA" />
+        <include name="IDR_PROFILE_AVATAR_2X_21" file="default_200_percent/common/profile_avatar_dog.png" type="BINDATA" />
+        <include name="IDR_PROFILE_AVATAR_2X_22" file="default_200_percent/common/profile_avatar_horse.png" type="BINDATA" />
+        <include name="IDR_PROFILE_AVATAR_2X_23" file="default_200_percent/common/profile_avatar_margarita.png" type="BINDATA" />
+        <include name="IDR_PROFILE_AVATAR_2X_24" file="default_200_percent/common/profile_avatar_note.png" type="BINDATA" />
+        <include name="IDR_PROFILE_AVATAR_2X_25" file="default_200_percent/common/profile_avatar_sun_cloud.png" type="BINDATA" />
+        <include name="IDR_PROFILE_AVATAR_2X_26" file="default_200_percent/common/login_guest.png" type="BINDATA" />
       </if>
       <if expr="is_macosx and enable_app_list">
         <!-- App Launcher icons for .app shim, dock icon. Unscaled, because the
diff --git a/chrome/app/theme/default_100_percent/chromium/ic_gplus_color_16.png b/chrome/app/theme/default_100_percent/chromium/ic_gplus_color_16.png
deleted file mode 100644
index 00aa546..0000000
--- a/chrome/app/theme/default_100_percent/chromium/ic_gplus_color_16.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/ash/browser_window_control_background_maximized_hover.png b/chrome/app/theme/default_100_percent/common/ash/browser_window_control_background_maximized_hover.png
index 307e239..9aaa7d6 100644
--- a/chrome/app/theme/default_100_percent/common/ash/browser_window_control_background_maximized_hover.png
+++ b/chrome/app/theme/default_100_percent/common/ash/browser_window_control_background_maximized_hover.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/ash/browser_window_control_background_maximized_hover2.png b/chrome/app/theme/default_100_percent/common/ash/browser_window_control_background_maximized_hover2.png
deleted file mode 100644
index 9aaa7d6..0000000
--- a/chrome/app/theme/default_100_percent/common/ash/browser_window_control_background_maximized_hover2.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/ash/browser_window_control_background_maximized_pressed.png b/chrome/app/theme/default_100_percent/common/ash/browser_window_control_background_maximized_pressed.png
index e981d7f..b8b8e79 100644
--- a/chrome/app/theme/default_100_percent/common/ash/browser_window_control_background_maximized_pressed.png
+++ b/chrome/app/theme/default_100_percent/common/ash/browser_window_control_background_maximized_pressed.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/ash/browser_window_control_background_maximized_pressed2.png b/chrome/app/theme/default_100_percent/common/ash/browser_window_control_background_maximized_pressed2.png
deleted file mode 100644
index b8b8e79..0000000
--- a/chrome/app/theme/default_100_percent/common/ash/browser_window_control_background_maximized_pressed2.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/ash/browser_window_control_icon_restored_close.png b/chrome/app/theme/default_100_percent/common/ash/browser_window_control_icon_close.png
similarity index 100%
rename from chrome/app/theme/default_100_percent/common/ash/browser_window_control_icon_restored_close.png
rename to chrome/app/theme/default_100_percent/common/ash/browser_window_control_icon_close.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/ash/browser_window_control_icon_restored_left_snapped.png b/chrome/app/theme/default_100_percent/common/ash/browser_window_control_icon_left_snapped.png
similarity index 100%
rename from chrome/app/theme/default_100_percent/common/ash/browser_window_control_icon_restored_left_snapped.png
rename to chrome/app/theme/default_100_percent/common/ash/browser_window_control_icon_left_snapped.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/ash/browser_window_control_icon_maximized_close.png b/chrome/app/theme/default_100_percent/common/ash/browser_window_control_icon_maximized_close.png
deleted file mode 100644
index 293b69e..0000000
--- a/chrome/app/theme/default_100_percent/common/ash/browser_window_control_icon_maximized_close.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/ash/browser_window_control_icon_maximized_left_snapped.png b/chrome/app/theme/default_100_percent/common/ash/browser_window_control_icon_maximized_left_snapped.png
deleted file mode 100644
index b994ad2..0000000
--- a/chrome/app/theme/default_100_percent/common/ash/browser_window_control_icon_maximized_left_snapped.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/ash/browser_window_control_icon_maximized_minimize.png b/chrome/app/theme/default_100_percent/common/ash/browser_window_control_icon_maximized_minimize.png
deleted file mode 100644
index af167b8..0000000
--- a/chrome/app/theme/default_100_percent/common/ash/browser_window_control_icon_maximized_minimize.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/ash/browser_window_control_icon_maximized_right_snapped.png b/chrome/app/theme/default_100_percent/common/ash/browser_window_control_icon_maximized_right_snapped.png
deleted file mode 100644
index 3611c1e..0000000
--- a/chrome/app/theme/default_100_percent/common/ash/browser_window_control_icon_maximized_right_snapped.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/ash/browser_window_control_icon_maximized_size.png b/chrome/app/theme/default_100_percent/common/ash/browser_window_control_icon_maximized_size.png
deleted file mode 100644
index 308e928..0000000
--- a/chrome/app/theme/default_100_percent/common/ash/browser_window_control_icon_maximized_size.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/ash/browser_window_control_icon_restored_minimize.png b/chrome/app/theme/default_100_percent/common/ash/browser_window_control_icon_minimize.png
similarity index 100%
rename from chrome/app/theme/default_100_percent/common/ash/browser_window_control_icon_restored_minimize.png
rename to chrome/app/theme/default_100_percent/common/ash/browser_window_control_icon_minimize.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/ash/browser_window_control_icon_restored_right_snapped.png b/chrome/app/theme/default_100_percent/common/ash/browser_window_control_icon_right_snapped.png
similarity index 100%
rename from chrome/app/theme/default_100_percent/common/ash/browser_window_control_icon_restored_right_snapped.png
rename to chrome/app/theme/default_100_percent/common/ash/browser_window_control_icon_right_snapped.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/ash/browser_window_control_icon_restored_size.png b/chrome/app/theme/default_100_percent/common/ash/browser_window_control_icon_size.png
similarity index 100%
rename from chrome/app/theme/default_100_percent/common/ash/browser_window_control_icon_restored_size.png
rename to chrome/app/theme/default_100_percent/common/ash/browser_window_control_icon_size.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/ash/browser_window_header_base_active.png b/chrome/app/theme/default_100_percent/common/ash/browser_window_header_base_active.png
deleted file mode 100644
index 3881ec2..0000000
--- a/chrome/app/theme/default_100_percent/common/ash/browser_window_header_base_active.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/ash/browser_window_header_base_inactive.png b/chrome/app/theme/default_100_percent/common/ash/browser_window_header_base_inactive.png
deleted file mode 100644
index e5a8489..0000000
--- a/chrome/app/theme/default_100_percent/common/ash/browser_window_header_base_inactive.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/ash/browser_window_header_base_incognito_active.png b/chrome/app/theme/default_100_percent/common/ash/browser_window_header_base_incognito_active.png
deleted file mode 100644
index d6de625..0000000
--- a/chrome/app/theme/default_100_percent/common/ash/browser_window_header_base_incognito_active.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/ash/browser_window_header_base_incognito_inactive.png b/chrome/app/theme/default_100_percent/common/ash/browser_window_header_base_incognito_inactive.png
deleted file mode 100644
index 7850d9c..0000000
--- a/chrome/app/theme/default_100_percent/common/ash/browser_window_header_base_incognito_inactive.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/ash/browser_window_header_base_maximized.png b/chrome/app/theme/default_100_percent/common/ash/browser_window_header_base_maximized.png
deleted file mode 100644
index c480496..0000000
--- a/chrome/app/theme/default_100_percent/common/ash/browser_window_header_base_maximized.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/browser_tools_badge_aura.png b/chrome/app/theme/default_100_percent/common/browser_tools_badge_aura.png
deleted file mode 100644
index 42a7d5b..0000000
--- a/chrome/app/theme/default_100_percent/common/browser_tools_badge_aura.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/browser_tools_normal_aura.png b/chrome/app/theme/default_100_percent/common/browser_tools_normal_aura.png
deleted file mode 100644
index 75491bf..0000000
--- a/chrome/app/theme/default_100_percent/common/browser_tools_normal_aura.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/dock_tab_high.png b/chrome/app/theme/default_100_percent/common/dock_tab_high.png
deleted file mode 100644
index bc3bb4d..0000000
--- a/chrome/app/theme/default_100_percent/common/dock_tab_high.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/dock_tab_max.png b/chrome/app/theme/default_100_percent/common/dock_tab_max.png
deleted file mode 100644
index fbc8415..0000000
--- a/chrome/app/theme/default_100_percent/common/dock_tab_max.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/dock_tab_wide.png b/chrome/app/theme/default_100_percent/common/dock_tab_wide.png
deleted file mode 100644
index 0b601fe..0000000
--- a/chrome/app/theme/default_100_percent/common/dock_tab_wide.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/feedback.png b/chrome/app/theme/default_100_percent/common/feedback.png
deleted file mode 100644
index f76f85b..0000000
--- a/chrome/app/theme/default_100_percent/common/feedback.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/feedback_hover.png b/chrome/app/theme/default_100_percent/common/feedback_hover.png
deleted file mode 100644
index ea7e1ab..0000000
--- a/chrome/app/theme/default_100_percent/common/feedback_hover.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/feedback_pressed.png b/chrome/app/theme/default_100_percent/common/feedback_pressed.png
deleted file mode 100644
index 6d28bee..0000000
--- a/chrome/app/theme/default_100_percent/common/feedback_pressed.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/files_app_icon.png b/chrome/app/theme/default_100_percent/common/files_app_icon.png
deleted file mode 100644
index 80648d5..0000000
--- a/chrome/app/theme/default_100_percent/common/files_app_icon.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/ic_gplus_color_16.png b/chrome/app/theme/default_100_percent/common/ic_gplus_color_16.png
deleted file mode 100644
index 00aa546..0000000
--- a/chrome/app/theme/default_100_percent/common/ic_gplus_color_16.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/incognito_switch_off.png b/chrome/app/theme/default_100_percent/common/incognito_switch_off.png
deleted file mode 100644
index 0829acb..0000000
--- a/chrome/app/theme/default_100_percent/common/incognito_switch_off.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/incognito_switch_on.png b/chrome/app/theme/default_100_percent/common/incognito_switch_on.png
deleted file mode 100644
index 887293a..0000000
--- a/chrome/app/theme/default_100_percent/common/incognito_switch_on.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/ntp_google_logo.png b/chrome/app/theme/default_100_percent/common/ntp_google_logo.png
new file mode 100644
index 0000000..82c6e44
--- /dev/null
+++ b/chrome/app/theme/default_100_percent/common/ntp_google_logo.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/ntp_white_google_logo.png b/chrome/app/theme/default_100_percent/common/ntp_white_google_logo.png
new file mode 100644
index 0000000..1e0be45
--- /dev/null
+++ b/chrome/app/theme/default_100_percent/common/ntp_white_google_logo.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_alien.png b/chrome/app/theme/default_100_percent/common/profile_avatar_alien.png
index 53f630d..323cb55 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_alien.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_alien.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_alien_mac.png b/chrome/app/theme/default_100_percent/common/profile_avatar_alien_mac.png
index 1e38d1d..01436ed 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_alien_mac.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_alien_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_awesome.png b/chrome/app/theme/default_100_percent/common/profile_avatar_awesome.png
index cfd895b..b351060 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_awesome.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_awesome.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_awesome_mac.png b/chrome/app/theme/default_100_percent/common/profile_avatar_awesome_mac.png
index d9e989c..d1450cb 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_awesome_mac.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_awesome_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_burger.png b/chrome/app/theme/default_100_percent/common/profile_avatar_burger.png
index fdafa8a..8b0c076 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_burger.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_burger.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_burger_mac.png b/chrome/app/theme/default_100_percent/common/profile_avatar_burger_mac.png
index 36ec0be..2f8f485 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_burger_mac.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_burger_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_businessman.png b/chrome/app/theme/default_100_percent/common/profile_avatar_businessman.png
index c911580..8262f75 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_businessman.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_businessman.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_businessman_mac.png b/chrome/app/theme/default_100_percent/common/profile_avatar_businessman_mac.png
index f291ee7..5d57a69 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_businessman_mac.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_businessman_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_cat.png b/chrome/app/theme/default_100_percent/common/profile_avatar_cat.png
index 1598ec6..135fe06 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_cat.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_cat.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_cat_mac.png b/chrome/app/theme/default_100_percent/common/profile_avatar_cat_mac.png
index c4f471c..c823a7d 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_cat_mac.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_cat_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_cupcake.png b/chrome/app/theme/default_100_percent/common/profile_avatar_cupcake.png
index 7009f1b..aa03378 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_cupcake.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_cupcake.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_cupcake_mac.png b/chrome/app/theme/default_100_percent/common/profile_avatar_cupcake_mac.png
index 413efe0..f02a167 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_cupcake_mac.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_cupcake_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_dog.png b/chrome/app/theme/default_100_percent/common/profile_avatar_dog.png
index 36bce9c..735ae09 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_dog.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_dog.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_dog_mac.png b/chrome/app/theme/default_100_percent/common/profile_avatar_dog_mac.png
index dc68338..60cbbe2 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_dog_mac.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_dog_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_flower.png b/chrome/app/theme/default_100_percent/common/profile_avatar_flower.png
index 763bff4..a53e6b5 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_flower.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_flower.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_flower_mac.png b/chrome/app/theme/default_100_percent/common/profile_avatar_flower_mac.png
index cacced0..7221587 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_flower_mac.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_flower_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_generic.png b/chrome/app/theme/default_100_percent/common/profile_avatar_generic.png
index 490a160..0556fc2 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_generic.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_generic.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_generic_aqua.png b/chrome/app/theme/default_100_percent/common/profile_avatar_generic_aqua.png
index a3248c8..f65f12a 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_generic_aqua.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_generic_aqua.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_generic_aqua_mac.png b/chrome/app/theme/default_100_percent/common/profile_avatar_generic_aqua_mac.png
index be4653b..d68a5b3 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_generic_aqua_mac.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_generic_aqua_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_generic_blue.png b/chrome/app/theme/default_100_percent/common/profile_avatar_generic_blue.png
index 6a1f471..ba18aa1 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_generic_blue.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_generic_blue.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_generic_blue_mac.png b/chrome/app/theme/default_100_percent/common/profile_avatar_generic_blue_mac.png
index 3c20af3..98a8881 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_generic_blue_mac.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_generic_blue_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_generic_green.png b/chrome/app/theme/default_100_percent/common/profile_avatar_generic_green.png
index 5f97f4b..4a283ef 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_generic_green.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_generic_green.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_generic_green_mac.png b/chrome/app/theme/default_100_percent/common/profile_avatar_generic_green_mac.png
index 6c8038b..3faa47b 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_generic_green_mac.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_generic_green_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_generic_mac.png b/chrome/app/theme/default_100_percent/common/profile_avatar_generic_mac.png
index 8c44287..985f814 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_generic_mac.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_generic_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_generic_orange.png b/chrome/app/theme/default_100_percent/common/profile_avatar_generic_orange.png
index 83a5615..606c760 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_generic_orange.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_generic_orange.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_generic_orange_mac.png b/chrome/app/theme/default_100_percent/common/profile_avatar_generic_orange_mac.png
index 42a432b..4b408ae 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_generic_orange_mac.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_generic_orange_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_generic_purple.png b/chrome/app/theme/default_100_percent/common/profile_avatar_generic_purple.png
index 7f9ee7c..440be3b 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_generic_purple.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_generic_purple.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_generic_purple_mac.png b/chrome/app/theme/default_100_percent/common/profile_avatar_generic_purple_mac.png
index 68b593e..23de26e 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_generic_purple_mac.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_generic_purple_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_generic_red.png b/chrome/app/theme/default_100_percent/common/profile_avatar_generic_red.png
index d4363d9..e951519 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_generic_red.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_generic_red.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_generic_red_mac.png b/chrome/app/theme/default_100_percent/common/profile_avatar_generic_red_mac.png
index 7394b14..10e5d6a 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_generic_red_mac.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_generic_red_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_generic_yellow.png b/chrome/app/theme/default_100_percent/common/profile_avatar_generic_yellow.png
index b7f2673..eb66077 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_generic_yellow.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_generic_yellow.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_generic_yellow_mac.png b/chrome/app/theme/default_100_percent/common/profile_avatar_generic_yellow_mac.png
index 0880ed8..fc851be 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_generic_yellow_mac.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_generic_yellow_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_horse.png b/chrome/app/theme/default_100_percent/common/profile_avatar_horse.png
index 734eded..214b6f7 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_horse.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_horse.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_horse_mac.png b/chrome/app/theme/default_100_percent/common/profile_avatar_horse_mac.png
index bff06fe..71e844e 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_horse_mac.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_horse_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_margarita.png b/chrome/app/theme/default_100_percent/common/profile_avatar_margarita.png
index d62c12d..a869435 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_margarita.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_margarita.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_margarita_mac.png b/chrome/app/theme/default_100_percent/common/profile_avatar_margarita_mac.png
index ef401f6..b75e735 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_margarita_mac.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_margarita_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_ninja.png b/chrome/app/theme/default_100_percent/common/profile_avatar_ninja.png
index 0b27760..998255d 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_ninja.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_ninja.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_ninja_mac.png b/chrome/app/theme/default_100_percent/common/profile_avatar_ninja_mac.png
index 6325fc0..a66b606 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_ninja_mac.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_ninja_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_note.png b/chrome/app/theme/default_100_percent/common/profile_avatar_note.png
index 5924c8f..1344861 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_note.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_note.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_note_mac.png b/chrome/app/theme/default_100_percent/common/profile_avatar_note_mac.png
index 5924c8f..0af47a9 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_note_mac.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_note_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_pizza.png b/chrome/app/theme/default_100_percent/common/profile_avatar_pizza.png
index 68fbf6b..991f1f5 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_pizza.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_pizza.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_pizza_mac.png b/chrome/app/theme/default_100_percent/common/profile_avatar_pizza_mac.png
index 7e2ad53..4d90da9 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_pizza_mac.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_pizza_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_secret_agent.png b/chrome/app/theme/default_100_percent/common/profile_avatar_secret_agent.png
index f6fdfc3..428f137 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_secret_agent.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_secret_agent.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_secret_agent_mac.png b/chrome/app/theme/default_100_percent/common/profile_avatar_secret_agent_mac.png
index 2763ebc..98ddb8d 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_secret_agent_mac.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_secret_agent_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_soccer.png b/chrome/app/theme/default_100_percent/common/profile_avatar_soccer.png
index 5ee7d49..a15b0f2 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_soccer.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_soccer.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_soccer_mac.png b/chrome/app/theme/default_100_percent/common/profile_avatar_soccer_mac.png
index fd58e02..a84a917 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_soccer_mac.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_soccer_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_sun_cloud.png b/chrome/app/theme/default_100_percent/common/profile_avatar_sun_cloud.png
index e8d4613..c315d77 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_sun_cloud.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_sun_cloud.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_sun_cloud_mac.png b/chrome/app/theme/default_100_percent/common/profile_avatar_sun_cloud_mac.png
index 49fa6c4..90caaf9 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_sun_cloud_mac.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_sun_cloud_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_superhero.png b/chrome/app/theme/default_100_percent/common/profile_avatar_superhero.png
index bfe853c..44305c6 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_superhero.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_superhero.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_superhero_mac.png b/chrome/app/theme/default_100_percent/common/profile_avatar_superhero_mac.png
index 30111e0..feda81e 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_superhero_mac.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_superhero_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_volley_ball.png b/chrome/app/theme/default_100_percent/common/profile_avatar_volley_ball.png
index cfb5515..a0bf25e 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_volley_ball.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_volley_ball.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/profile_avatar_volley_ball_mac.png b/chrome/app/theme/default_100_percent/common/profile_avatar_volley_ball_mac.png
index 0004c6a..fba4c6b 100644
--- a/chrome/app/theme/default_100_percent/common/profile_avatar_volley_ball_mac.png
+++ b/chrome/app/theme/default_100_percent/common/profile_avatar_volley_ball_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/script_bubble.png b/chrome/app/theme/default_100_percent/common/script_bubble.png
deleted file mode 100644
index 1e51ddc..0000000
--- a/chrome/app/theme/default_100_percent/common/script_bubble.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/throbber_waiting_light.png b/chrome/app/theme/default_100_percent/common/throbber_waiting_light.png
deleted file mode 100644
index 2e0cfcc..0000000
--- a/chrome/app/theme/default_100_percent/common/throbber_waiting_light.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/common/update_badge4.png b/chrome/app/theme/default_100_percent/common/update_badge4.png
deleted file mode 100644
index 37321a9..0000000
--- a/chrome/app/theme/default_100_percent/common/update_badge4.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/cros/globe_icon.png b/chrome/app/theme/default_100_percent/cros/globe_icon.png
deleted file mode 100644
index 9870e0c..0000000
--- a/chrome/app/theme/default_100_percent/cros/globe_icon.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/dock_tab_high.png b/chrome/app/theme/default_100_percent/dock_tab_high.png
deleted file mode 100644
index bc3bb4d..0000000
--- a/chrome/app/theme/default_100_percent/dock_tab_high.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/dock_tab_max.png b/chrome/app/theme/default_100_percent/dock_tab_max.png
deleted file mode 100644
index fbc8415..0000000
--- a/chrome/app/theme/default_100_percent/dock_tab_max.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/dock_tab_wide.png b/chrome/app/theme/default_100_percent/dock_tab_wide.png
deleted file mode 100644
index 0b601fe..0000000
--- a/chrome/app/theme/default_100_percent/dock_tab_wide.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/feedback.png b/chrome/app/theme/default_100_percent/feedback.png
deleted file mode 100644
index f76f85b..0000000
--- a/chrome/app/theme/default_100_percent/feedback.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/feedback_hover.png b/chrome/app/theme/default_100_percent/feedback_hover.png
deleted file mode 100644
index ea7e1ab..0000000
--- a/chrome/app/theme/default_100_percent/feedback_hover.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/feedback_pressed.png b/chrome/app/theme/default_100_percent/feedback_pressed.png
deleted file mode 100644
index 6d28bee..0000000
--- a/chrome/app/theme/default_100_percent/feedback_pressed.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/incognito_switch_off.png b/chrome/app/theme/default_100_percent/incognito_switch_off.png
deleted file mode 100644
index 0829acb..0000000
--- a/chrome/app/theme/default_100_percent/incognito_switch_off.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/incognito_switch_on.png b/chrome/app/theme/default_100_percent/incognito_switch_on.png
deleted file mode 100644
index 887293a..0000000
--- a/chrome/app/theme/default_100_percent/incognito_switch_on.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_alien.png b/chrome/app/theme/default_100_percent/profile_avatar_alien.png
deleted file mode 100644
index 53f630d..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_alien.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_alien_mac.png b/chrome/app/theme/default_100_percent/profile_avatar_alien_mac.png
deleted file mode 100644
index ff85b46..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_alien_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_awesome.png b/chrome/app/theme/default_100_percent/profile_avatar_awesome.png
deleted file mode 100644
index cfd895b..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_awesome.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_awesome_mac.png b/chrome/app/theme/default_100_percent/profile_avatar_awesome_mac.png
deleted file mode 100644
index d9e989c..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_awesome_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_burger.png b/chrome/app/theme/default_100_percent/profile_avatar_burger.png
deleted file mode 100644
index fdafa8a..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_burger.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_burger_mac.png b/chrome/app/theme/default_100_percent/profile_avatar_burger_mac.png
deleted file mode 100644
index 36ec0be..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_burger_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_businessman.png b/chrome/app/theme/default_100_percent/profile_avatar_businessman.png
deleted file mode 100644
index e05ed04..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_businessman.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_businessman_mac.png b/chrome/app/theme/default_100_percent/profile_avatar_businessman_mac.png
deleted file mode 100644
index ad579a5..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_businessman_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_cat.png b/chrome/app/theme/default_100_percent/profile_avatar_cat.png
deleted file mode 100644
index e4b0250..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_cat.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_cat_mac.png b/chrome/app/theme/default_100_percent/profile_avatar_cat_mac.png
deleted file mode 100644
index e7e0de9..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_cat_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_cupcake.png b/chrome/app/theme/default_100_percent/profile_avatar_cupcake.png
deleted file mode 100644
index 7009f1b..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_cupcake.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_cupcake_mac.png b/chrome/app/theme/default_100_percent/profile_avatar_cupcake_mac.png
deleted file mode 100644
index d87ad44..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_cupcake_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_dog.png b/chrome/app/theme/default_100_percent/profile_avatar_dog.png
deleted file mode 100644
index 36bce9c..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_dog.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_dog_mac.png b/chrome/app/theme/default_100_percent/profile_avatar_dog_mac.png
deleted file mode 100644
index 1ef90a3..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_dog_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_flower.png b/chrome/app/theme/default_100_percent/profile_avatar_flower.png
deleted file mode 100644
index 45d6043..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_flower.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_flower_mac.png b/chrome/app/theme/default_100_percent/profile_avatar_flower_mac.png
deleted file mode 100644
index 139c736..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_flower_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_generic.png b/chrome/app/theme/default_100_percent/profile_avatar_generic.png
deleted file mode 100644
index 8c60871..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_generic.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_generic_aqua.png b/chrome/app/theme/default_100_percent/profile_avatar_generic_aqua.png
deleted file mode 100644
index a3248c8..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_generic_aqua.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_generic_aqua_mac.png b/chrome/app/theme/default_100_percent/profile_avatar_generic_aqua_mac.png
deleted file mode 100644
index be4653b..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_generic_aqua_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_generic_blue.png b/chrome/app/theme/default_100_percent/profile_avatar_generic_blue.png
deleted file mode 100644
index 6a1f471..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_generic_blue.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_generic_blue_mac.png b/chrome/app/theme/default_100_percent/profile_avatar_generic_blue_mac.png
deleted file mode 100644
index 3c20af3..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_generic_blue_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_generic_green.png b/chrome/app/theme/default_100_percent/profile_avatar_generic_green.png
deleted file mode 100644
index 5f97f4b..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_generic_green.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_generic_green_mac.png b/chrome/app/theme/default_100_percent/profile_avatar_generic_green_mac.png
deleted file mode 100644
index 6c8038b..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_generic_green_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_generic_mac.png b/chrome/app/theme/default_100_percent/profile_avatar_generic_mac.png
deleted file mode 100644
index 61d6044..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_generic_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_generic_orange.png b/chrome/app/theme/default_100_percent/profile_avatar_generic_orange.png
deleted file mode 100644
index 83a5615..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_generic_orange.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_generic_orange_mac.png b/chrome/app/theme/default_100_percent/profile_avatar_generic_orange_mac.png
deleted file mode 100644
index 42a432b..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_generic_orange_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_generic_purple.png b/chrome/app/theme/default_100_percent/profile_avatar_generic_purple.png
deleted file mode 100644
index 7f9ee7c..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_generic_purple.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_generic_purple_mac.png b/chrome/app/theme/default_100_percent/profile_avatar_generic_purple_mac.png
deleted file mode 100644
index 12d9be9..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_generic_purple_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_generic_red.png b/chrome/app/theme/default_100_percent/profile_avatar_generic_red.png
deleted file mode 100644
index d4363d9..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_generic_red.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_generic_red_mac.png b/chrome/app/theme/default_100_percent/profile_avatar_generic_red_mac.png
deleted file mode 100644
index 904d554..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_generic_red_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_generic_yellow.png b/chrome/app/theme/default_100_percent/profile_avatar_generic_yellow.png
deleted file mode 100644
index cbb7e0f..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_generic_yellow.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_generic_yellow_mac.png b/chrome/app/theme/default_100_percent/profile_avatar_generic_yellow_mac.png
deleted file mode 100644
index f8c811e..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_generic_yellow_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_horse.png b/chrome/app/theme/default_100_percent/profile_avatar_horse.png
deleted file mode 100644
index 734eded..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_horse.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_horse_mac.png b/chrome/app/theme/default_100_percent/profile_avatar_horse_mac.png
deleted file mode 100644
index 2afaf62..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_horse_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_margarita.png b/chrome/app/theme/default_100_percent/profile_avatar_margarita.png
deleted file mode 100644
index d62c12d..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_margarita.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_margarita_mac.png b/chrome/app/theme/default_100_percent/profile_avatar_margarita_mac.png
deleted file mode 100644
index 86c4855..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_margarita_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_ninja.png b/chrome/app/theme/default_100_percent/profile_avatar_ninja.png
deleted file mode 100644
index 0b27760..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_ninja.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_ninja_mac.png b/chrome/app/theme/default_100_percent/profile_avatar_ninja_mac.png
deleted file mode 100644
index 9d3c0ee..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_ninja_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_note.png b/chrome/app/theme/default_100_percent/profile_avatar_note.png
deleted file mode 100644
index 5924c8f..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_note.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_note_mac.png b/chrome/app/theme/default_100_percent/profile_avatar_note_mac.png
deleted file mode 100644
index 5924c8f..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_note_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_pizza.png b/chrome/app/theme/default_100_percent/profile_avatar_pizza.png
deleted file mode 100644
index 68fbf6b..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_pizza.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_pizza_mac.png b/chrome/app/theme/default_100_percent/profile_avatar_pizza_mac.png
deleted file mode 100644
index faf4649..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_pizza_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_secret_agent.png b/chrome/app/theme/default_100_percent/profile_avatar_secret_agent.png
deleted file mode 100644
index f6fdfc3..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_secret_agent.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_secret_agent_mac.png b/chrome/app/theme/default_100_percent/profile_avatar_secret_agent_mac.png
deleted file mode 100644
index 9595749..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_secret_agent_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_soccer.png b/chrome/app/theme/default_100_percent/profile_avatar_soccer.png
deleted file mode 100644
index 5ee7d49..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_soccer.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_soccer_mac.png b/chrome/app/theme/default_100_percent/profile_avatar_soccer_mac.png
deleted file mode 100644
index 1cdf044..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_soccer_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_sun_cloud.png b/chrome/app/theme/default_100_percent/profile_avatar_sun_cloud.png
deleted file mode 100644
index e8d4613..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_sun_cloud.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_sun_cloud_mac.png b/chrome/app/theme/default_100_percent/profile_avatar_sun_cloud_mac.png
deleted file mode 100644
index 4779fbe..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_sun_cloud_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_superhero.png b/chrome/app/theme/default_100_percent/profile_avatar_superhero.png
deleted file mode 100644
index 76076eb..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_superhero.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_superhero_mac.png b/chrome/app/theme/default_100_percent/profile_avatar_superhero_mac.png
deleted file mode 100644
index 8bcea21..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_superhero_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_volley_ball.png b/chrome/app/theme/default_100_percent/profile_avatar_volley_ball.png
deleted file mode 100644
index cfb5515..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_volley_ball.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/profile_avatar_volley_ball_mac.png b/chrome/app/theme/default_100_percent/profile_avatar_volley_ball_mac.png
deleted file mode 100644
index 769eda4..0000000
--- a/chrome/app/theme/default_100_percent/profile_avatar_volley_ball_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/throbber_waiting_light.png b/chrome/app/theme/default_100_percent/throbber_waiting_light.png
deleted file mode 100644
index 2e0cfcc..0000000
--- a/chrome/app/theme/default_100_percent/throbber_waiting_light.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_100_percent/update_badge4.png b/chrome/app/theme/default_100_percent/update_badge4.png
deleted file mode 100644
index 37321a9..0000000
--- a/chrome/app/theme/default_100_percent/update_badge4.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/chromium/ic_gplus_color_16.png b/chrome/app/theme/default_200_percent/chromium/ic_gplus_color_16.png
deleted file mode 100644
index f940834..0000000
--- a/chrome/app/theme/default_200_percent/chromium/ic_gplus_color_16.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/ash/browser_window_control_background_maximized_hover.png b/chrome/app/theme/default_200_percent/common/ash/browser_window_control_background_maximized_hover.png
index cfbc130..e2e1bff 100644
--- a/chrome/app/theme/default_200_percent/common/ash/browser_window_control_background_maximized_hover.png
+++ b/chrome/app/theme/default_200_percent/common/ash/browser_window_control_background_maximized_hover.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/ash/browser_window_control_background_maximized_hover2.png b/chrome/app/theme/default_200_percent/common/ash/browser_window_control_background_maximized_hover2.png
deleted file mode 100644
index e2e1bff..0000000
--- a/chrome/app/theme/default_200_percent/common/ash/browser_window_control_background_maximized_hover2.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/ash/browser_window_control_background_maximized_pressed.png b/chrome/app/theme/default_200_percent/common/ash/browser_window_control_background_maximized_pressed.png
index c7688a6..356f682 100644
--- a/chrome/app/theme/default_200_percent/common/ash/browser_window_control_background_maximized_pressed.png
+++ b/chrome/app/theme/default_200_percent/common/ash/browser_window_control_background_maximized_pressed.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/ash/browser_window_control_background_maximized_pressed2.png b/chrome/app/theme/default_200_percent/common/ash/browser_window_control_background_maximized_pressed2.png
deleted file mode 100644
index 356f682..0000000
--- a/chrome/app/theme/default_200_percent/common/ash/browser_window_control_background_maximized_pressed2.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/ash/browser_window_control_icon_restored_close.png b/chrome/app/theme/default_200_percent/common/ash/browser_window_control_icon_close.png
similarity index 100%
rename from chrome/app/theme/default_200_percent/common/ash/browser_window_control_icon_restored_close.png
rename to chrome/app/theme/default_200_percent/common/ash/browser_window_control_icon_close.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/ash/browser_window_control_icon_restored_left_snapped.png b/chrome/app/theme/default_200_percent/common/ash/browser_window_control_icon_left_snapped.png
similarity index 100%
rename from chrome/app/theme/default_200_percent/common/ash/browser_window_control_icon_restored_left_snapped.png
rename to chrome/app/theme/default_200_percent/common/ash/browser_window_control_icon_left_snapped.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/ash/browser_window_control_icon_maximized_close.png b/chrome/app/theme/default_200_percent/common/ash/browser_window_control_icon_maximized_close.png
deleted file mode 100644
index 192241c..0000000
--- a/chrome/app/theme/default_200_percent/common/ash/browser_window_control_icon_maximized_close.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/ash/browser_window_control_icon_maximized_left_snapped.png b/chrome/app/theme/default_200_percent/common/ash/browser_window_control_icon_maximized_left_snapped.png
deleted file mode 100644
index 610de42..0000000
--- a/chrome/app/theme/default_200_percent/common/ash/browser_window_control_icon_maximized_left_snapped.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/ash/browser_window_control_icon_maximized_minimize.png b/chrome/app/theme/default_200_percent/common/ash/browser_window_control_icon_maximized_minimize.png
deleted file mode 100644
index bf7b534..0000000
--- a/chrome/app/theme/default_200_percent/common/ash/browser_window_control_icon_maximized_minimize.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/ash/browser_window_control_icon_maximized_right_snapped.png b/chrome/app/theme/default_200_percent/common/ash/browser_window_control_icon_maximized_right_snapped.png
deleted file mode 100644
index fad5102..0000000
--- a/chrome/app/theme/default_200_percent/common/ash/browser_window_control_icon_maximized_right_snapped.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/ash/browser_window_control_icon_maximized_size.png b/chrome/app/theme/default_200_percent/common/ash/browser_window_control_icon_maximized_size.png
deleted file mode 100644
index 9056cfb..0000000
--- a/chrome/app/theme/default_200_percent/common/ash/browser_window_control_icon_maximized_size.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/ash/browser_window_control_icon_restored_minimize.png b/chrome/app/theme/default_200_percent/common/ash/browser_window_control_icon_minimize.png
similarity index 100%
rename from chrome/app/theme/default_200_percent/common/ash/browser_window_control_icon_restored_minimize.png
rename to chrome/app/theme/default_200_percent/common/ash/browser_window_control_icon_minimize.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/ash/browser_window_control_icon_restored_right_snapped.png b/chrome/app/theme/default_200_percent/common/ash/browser_window_control_icon_right_snapped.png
similarity index 100%
rename from chrome/app/theme/default_200_percent/common/ash/browser_window_control_icon_restored_right_snapped.png
rename to chrome/app/theme/default_200_percent/common/ash/browser_window_control_icon_right_snapped.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/ash/browser_window_control_icon_restored_size.png b/chrome/app/theme/default_200_percent/common/ash/browser_window_control_icon_size.png
similarity index 100%
rename from chrome/app/theme/default_200_percent/common/ash/browser_window_control_icon_restored_size.png
rename to chrome/app/theme/default_200_percent/common/ash/browser_window_control_icon_size.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/ash/browser_window_header_base_active.png b/chrome/app/theme/default_200_percent/common/ash/browser_window_header_base_active.png
deleted file mode 100644
index fe086b6..0000000
--- a/chrome/app/theme/default_200_percent/common/ash/browser_window_header_base_active.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/ash/browser_window_header_base_inactive.png b/chrome/app/theme/default_200_percent/common/ash/browser_window_header_base_inactive.png
deleted file mode 100644
index 9403b7e..0000000
--- a/chrome/app/theme/default_200_percent/common/ash/browser_window_header_base_inactive.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/ash/browser_window_header_base_incognito_active.png b/chrome/app/theme/default_200_percent/common/ash/browser_window_header_base_incognito_active.png
deleted file mode 100644
index 2ac535d..0000000
--- a/chrome/app/theme/default_200_percent/common/ash/browser_window_header_base_incognito_active.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/ash/browser_window_header_base_incognito_inactive.png b/chrome/app/theme/default_200_percent/common/ash/browser_window_header_base_incognito_inactive.png
deleted file mode 100644
index adac9ce..0000000
--- a/chrome/app/theme/default_200_percent/common/ash/browser_window_header_base_incognito_inactive.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/ash/browser_window_header_base_maximized.png b/chrome/app/theme/default_200_percent/common/ash/browser_window_header_base_maximized.png
deleted file mode 100644
index 32294b3..0000000
--- a/chrome/app/theme/default_200_percent/common/ash/browser_window_header_base_maximized.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/browser_tools_badge_aura.png b/chrome/app/theme/default_200_percent/common/browser_tools_badge_aura.png
deleted file mode 100644
index 78fd405..0000000
--- a/chrome/app/theme/default_200_percent/common/browser_tools_badge_aura.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/browser_tools_normal_aura.png b/chrome/app/theme/default_200_percent/common/browser_tools_normal_aura.png
deleted file mode 100644
index 136fc68..0000000
--- a/chrome/app/theme/default_200_percent/common/browser_tools_normal_aura.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/feedback.png b/chrome/app/theme/default_200_percent/common/feedback.png
deleted file mode 100644
index 37a7f1b..0000000
--- a/chrome/app/theme/default_200_percent/common/feedback.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/feedback_hover.png b/chrome/app/theme/default_200_percent/common/feedback_hover.png
deleted file mode 100644
index 3e60192..0000000
--- a/chrome/app/theme/default_200_percent/common/feedback_hover.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/feedback_pressed.png b/chrome/app/theme/default_200_percent/common/feedback_pressed.png
deleted file mode 100644
index a3769f9..0000000
--- a/chrome/app/theme/default_200_percent/common/feedback_pressed.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/files_app_icon.png b/chrome/app/theme/default_200_percent/common/files_app_icon.png
deleted file mode 100644
index 62c65e2..0000000
--- a/chrome/app/theme/default_200_percent/common/files_app_icon.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/ic_gplus_color_16.png b/chrome/app/theme/default_200_percent/common/ic_gplus_color_16.png
deleted file mode 100644
index f940834..0000000
--- a/chrome/app/theme/default_200_percent/common/ic_gplus_color_16.png
+++ /dev/null
Binary files differ
diff --git a/chrome/browser/resources/local_ntp/images/2x/ntp_google_logo.png b/chrome/app/theme/default_200_percent/common/ntp_google_logo.png
similarity index 100%
rename from chrome/browser/resources/local_ntp/images/2x/ntp_google_logo.png
rename to chrome/app/theme/default_200_percent/common/ntp_google_logo.png
Binary files differ
diff --git a/chrome/browser/resources/local_ntp/images/2x/ntp_white_google_logo.png b/chrome/app/theme/default_200_percent/common/ntp_white_google_logo.png
similarity index 100%
rename from chrome/browser/resources/local_ntp/images/2x/ntp_white_google_logo.png
rename to chrome/app/theme/default_200_percent/common/ntp_white_google_logo.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_alien.png b/chrome/app/theme/default_200_percent/common/profile_avatar_alien.png
index e84bf0b..ef4614a 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_alien.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_alien.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_alien_mac.png b/chrome/app/theme/default_200_percent/common/profile_avatar_alien_mac.png
index 5c30792..8e89f0c 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_alien_mac.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_alien_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_awesome.png b/chrome/app/theme/default_200_percent/common/profile_avatar_awesome.png
index 281d004..f1edefc 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_awesome.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_awesome.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_awesome_mac.png b/chrome/app/theme/default_200_percent/common/profile_avatar_awesome_mac.png
index c0dfd70..e389cf0 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_awesome_mac.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_awesome_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_burger.png b/chrome/app/theme/default_200_percent/common/profile_avatar_burger.png
index 0d49f66..c5bbff0 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_burger.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_burger.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_burger_mac.png b/chrome/app/theme/default_200_percent/common/profile_avatar_burger_mac.png
index 3e75b3d..ff80017 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_burger_mac.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_burger_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_businessman.png b/chrome/app/theme/default_200_percent/common/profile_avatar_businessman.png
index 4ef3197..c27ef6a 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_businessman.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_businessman.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_businessman_mac.png b/chrome/app/theme/default_200_percent/common/profile_avatar_businessman_mac.png
index d75e93b..8070fa4 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_businessman_mac.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_businessman_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_cat.png b/chrome/app/theme/default_200_percent/common/profile_avatar_cat.png
index c547eee..b6d2cab 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_cat.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_cat.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_cat_mac.png b/chrome/app/theme/default_200_percent/common/profile_avatar_cat_mac.png
index bbf08bd..19eb320 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_cat_mac.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_cat_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_cupcake.png b/chrome/app/theme/default_200_percent/common/profile_avatar_cupcake.png
index 85d47e0..6530507 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_cupcake.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_cupcake.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_cupcake_mac.png b/chrome/app/theme/default_200_percent/common/profile_avatar_cupcake_mac.png
index 5303564..3c1d0bb 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_cupcake_mac.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_cupcake_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_dog.png b/chrome/app/theme/default_200_percent/common/profile_avatar_dog.png
index 86a92b1..c7c1642 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_dog.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_dog.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_dog_mac.png b/chrome/app/theme/default_200_percent/common/profile_avatar_dog_mac.png
index 8281214..61696f3 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_dog_mac.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_dog_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_flower.png b/chrome/app/theme/default_200_percent/common/profile_avatar_flower.png
index e8f9b7e..20d50c6 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_flower.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_flower.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_flower_mac.png b/chrome/app/theme/default_200_percent/common/profile_avatar_flower_mac.png
index 0aaf2db..0474606 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_flower_mac.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_flower_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_generic.png b/chrome/app/theme/default_200_percent/common/profile_avatar_generic.png
index 4270df4..59e8609 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_generic.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_generic.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_generic_aqua.png b/chrome/app/theme/default_200_percent/common/profile_avatar_generic_aqua.png
index 2be4cdf..03e6511 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_generic_aqua.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_generic_aqua.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_generic_aqua_mac.png b/chrome/app/theme/default_200_percent/common/profile_avatar_generic_aqua_mac.png
index d1db87a..7e58f64 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_generic_aqua_mac.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_generic_aqua_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_generic_blue.png b/chrome/app/theme/default_200_percent/common/profile_avatar_generic_blue.png
index 0b4c8df..dd5ac05 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_generic_blue.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_generic_blue.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_generic_blue_mac.png b/chrome/app/theme/default_200_percent/common/profile_avatar_generic_blue_mac.png
index 836d0e6..95c30fe 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_generic_blue_mac.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_generic_blue_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_generic_green.png b/chrome/app/theme/default_200_percent/common/profile_avatar_generic_green.png
index 735d904..0df3bd0 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_generic_green.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_generic_green.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_generic_green_mac.png b/chrome/app/theme/default_200_percent/common/profile_avatar_generic_green_mac.png
index 1073e70..aa8836b 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_generic_green_mac.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_generic_green_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_generic_mac.png b/chrome/app/theme/default_200_percent/common/profile_avatar_generic_mac.png
index 33a2149..da2755b 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_generic_mac.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_generic_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_generic_orange.png b/chrome/app/theme/default_200_percent/common/profile_avatar_generic_orange.png
index d791bd4..03142be 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_generic_orange.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_generic_orange.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_generic_orange_mac.png b/chrome/app/theme/default_200_percent/common/profile_avatar_generic_orange_mac.png
index d4cf705..0e8242c 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_generic_orange_mac.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_generic_orange_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_generic_purple.png b/chrome/app/theme/default_200_percent/common/profile_avatar_generic_purple.png
index 448aa1e..d06996e 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_generic_purple.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_generic_purple.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_generic_purple_mac.png b/chrome/app/theme/default_200_percent/common/profile_avatar_generic_purple_mac.png
index 3b3efa1..215dbc6 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_generic_purple_mac.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_generic_purple_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_generic_red.png b/chrome/app/theme/default_200_percent/common/profile_avatar_generic_red.png
index b91010d..991439b 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_generic_red.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_generic_red.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_generic_red_mac.png b/chrome/app/theme/default_200_percent/common/profile_avatar_generic_red_mac.png
index b5ad6d1..468b7cd 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_generic_red_mac.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_generic_red_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_generic_yellow.png b/chrome/app/theme/default_200_percent/common/profile_avatar_generic_yellow.png
index b1ea87f..b6b35fc 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_generic_yellow.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_generic_yellow.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_generic_yellow_mac.png b/chrome/app/theme/default_200_percent/common/profile_avatar_generic_yellow_mac.png
index 0a7d2d8..23ba330 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_generic_yellow_mac.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_generic_yellow_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_horse.png b/chrome/app/theme/default_200_percent/common/profile_avatar_horse.png
index f971827..3762217 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_horse.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_horse.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_horse_mac.png b/chrome/app/theme/default_200_percent/common/profile_avatar_horse_mac.png
index c57f858..a99ef3f 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_horse_mac.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_horse_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_margarita.png b/chrome/app/theme/default_200_percent/common/profile_avatar_margarita.png
index f5ab84f..049a5c4 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_margarita.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_margarita.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_margarita_mac.png b/chrome/app/theme/default_200_percent/common/profile_avatar_margarita_mac.png
index b7602c5..b5d780b 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_margarita_mac.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_margarita_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_ninja.png b/chrome/app/theme/default_200_percent/common/profile_avatar_ninja.png
index fbb2baf..e3f0a31 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_ninja.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_ninja.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_ninja_mac.png b/chrome/app/theme/default_200_percent/common/profile_avatar_ninja_mac.png
index 62705d5..b7debbe 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_ninja_mac.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_ninja_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_note.png b/chrome/app/theme/default_200_percent/common/profile_avatar_note.png
index a03ab42..47dafd9 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_note.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_note.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_note_mac.png b/chrome/app/theme/default_200_percent/common/profile_avatar_note_mac.png
index f332c67..8c0c521 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_note_mac.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_note_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_pizza.png b/chrome/app/theme/default_200_percent/common/profile_avatar_pizza.png
index a99e282..a6da012 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_pizza.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_pizza.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_pizza_mac.png b/chrome/app/theme/default_200_percent/common/profile_avatar_pizza_mac.png
index 6dcf26b..e1c5334 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_pizza_mac.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_pizza_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_secret_agent.png b/chrome/app/theme/default_200_percent/common/profile_avatar_secret_agent.png
index d02edd3..d85a63a 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_secret_agent.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_secret_agent.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_secret_agent_mac.png b/chrome/app/theme/default_200_percent/common/profile_avatar_secret_agent_mac.png
index e1f135c..6f0307a 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_secret_agent_mac.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_secret_agent_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_soccer.png b/chrome/app/theme/default_200_percent/common/profile_avatar_soccer.png
index 04f06d5..f1937f2 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_soccer.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_soccer.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_soccer_mac.png b/chrome/app/theme/default_200_percent/common/profile_avatar_soccer_mac.png
index fe7052c..ae8b205 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_soccer_mac.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_soccer_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_sun_cloud.png b/chrome/app/theme/default_200_percent/common/profile_avatar_sun_cloud.png
index 75bcb95..0295e25 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_sun_cloud.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_sun_cloud.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_sun_cloud_mac.png b/chrome/app/theme/default_200_percent/common/profile_avatar_sun_cloud_mac.png
index 115e3fe..28e20d5 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_sun_cloud_mac.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_sun_cloud_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_superhero.png b/chrome/app/theme/default_200_percent/common/profile_avatar_superhero.png
index 2653e30..c54b5bc 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_superhero.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_superhero.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_superhero_mac.png b/chrome/app/theme/default_200_percent/common/profile_avatar_superhero_mac.png
index d6f64a8..fe36ce1 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_superhero_mac.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_superhero_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_volley_ball.png b/chrome/app/theme/default_200_percent/common/profile_avatar_volley_ball.png
index 9289aa6..ba83140 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_volley_ball.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_volley_ball.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/profile_avatar_volley_ball_mac.png b/chrome/app/theme/default_200_percent/common/profile_avatar_volley_ball_mac.png
index 82516bd..b215fd1 100644
--- a/chrome/app/theme/default_200_percent/common/profile_avatar_volley_ball_mac.png
+++ b/chrome/app/theme/default_200_percent/common/profile_avatar_volley_ball_mac.png
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/script_bubble.png b/chrome/app/theme/default_200_percent/common/script_bubble.png
deleted file mode 100644
index 4451c27..0000000
--- a/chrome/app/theme/default_200_percent/common/script_bubble.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/common/update_badge4.png b/chrome/app/theme/default_200_percent/common/update_badge4.png
deleted file mode 100644
index a321e5c..0000000
--- a/chrome/app/theme/default_200_percent/common/update_badge4.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/cros/globe_icon.png b/chrome/app/theme/default_200_percent/cros/globe_icon.png
deleted file mode 100644
index 2ec845c..0000000
--- a/chrome/app/theme/default_200_percent/cros/globe_icon.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/feedback.png b/chrome/app/theme/default_200_percent/feedback.png
deleted file mode 100644
index 37a7f1b..0000000
--- a/chrome/app/theme/default_200_percent/feedback.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/feedback_hover.png b/chrome/app/theme/default_200_percent/feedback_hover.png
deleted file mode 100644
index 3e60192..0000000
--- a/chrome/app/theme/default_200_percent/feedback_hover.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/feedback_pressed.png b/chrome/app/theme/default_200_percent/feedback_pressed.png
deleted file mode 100644
index a3769f9..0000000
--- a/chrome/app/theme/default_200_percent/feedback_pressed.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_alien.png b/chrome/app/theme/default_200_percent/profile_avatar_alien.png
deleted file mode 100644
index e84bf0b..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_alien.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_alien_mac.png b/chrome/app/theme/default_200_percent/profile_avatar_alien_mac.png
deleted file mode 100644
index 5c30792..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_alien_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_awesome.png b/chrome/app/theme/default_200_percent/profile_avatar_awesome.png
deleted file mode 100644
index 281d004..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_awesome.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_awesome_mac.png b/chrome/app/theme/default_200_percent/profile_avatar_awesome_mac.png
deleted file mode 100644
index c0dfd70..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_awesome_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_burger.png b/chrome/app/theme/default_200_percent/profile_avatar_burger.png
deleted file mode 100644
index 0d49f66..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_burger.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_burger_mac.png b/chrome/app/theme/default_200_percent/profile_avatar_burger_mac.png
deleted file mode 100644
index 3e75b3d..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_burger_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_businessman.png b/chrome/app/theme/default_200_percent/profile_avatar_businessman.png
deleted file mode 100644
index 4ef3197..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_businessman.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_businessman_mac.png b/chrome/app/theme/default_200_percent/profile_avatar_businessman_mac.png
deleted file mode 100644
index d75e93b..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_businessman_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_cat.png b/chrome/app/theme/default_200_percent/profile_avatar_cat.png
deleted file mode 100644
index c547eee..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_cat.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_cat_mac.png b/chrome/app/theme/default_200_percent/profile_avatar_cat_mac.png
deleted file mode 100644
index bbf08bd..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_cat_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_cupcake.png b/chrome/app/theme/default_200_percent/profile_avatar_cupcake.png
deleted file mode 100644
index 85d47e0..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_cupcake.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_cupcake_mac.png b/chrome/app/theme/default_200_percent/profile_avatar_cupcake_mac.png
deleted file mode 100644
index 5303564..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_cupcake_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_dog.png b/chrome/app/theme/default_200_percent/profile_avatar_dog.png
deleted file mode 100644
index 86a92b1..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_dog.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_dog_mac.png b/chrome/app/theme/default_200_percent/profile_avatar_dog_mac.png
deleted file mode 100644
index 8281214..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_dog_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_flower.png b/chrome/app/theme/default_200_percent/profile_avatar_flower.png
deleted file mode 100644
index e8f9b7e..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_flower.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_flower_mac.png b/chrome/app/theme/default_200_percent/profile_avatar_flower_mac.png
deleted file mode 100644
index 0aaf2db..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_flower_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_generic.png b/chrome/app/theme/default_200_percent/profile_avatar_generic.png
deleted file mode 100644
index 4270df4..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_generic.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_generic_aqua.png b/chrome/app/theme/default_200_percent/profile_avatar_generic_aqua.png
deleted file mode 100644
index 2be4cdf..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_generic_aqua.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_generic_aqua_mac.png b/chrome/app/theme/default_200_percent/profile_avatar_generic_aqua_mac.png
deleted file mode 100644
index d1db87a..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_generic_aqua_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_generic_blue.png b/chrome/app/theme/default_200_percent/profile_avatar_generic_blue.png
deleted file mode 100644
index 0b4c8df..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_generic_blue.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_generic_blue_mac.png b/chrome/app/theme/default_200_percent/profile_avatar_generic_blue_mac.png
deleted file mode 100644
index 836d0e6..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_generic_blue_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_generic_green.png b/chrome/app/theme/default_200_percent/profile_avatar_generic_green.png
deleted file mode 100644
index 735d904..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_generic_green.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_generic_green_mac.png b/chrome/app/theme/default_200_percent/profile_avatar_generic_green_mac.png
deleted file mode 100644
index 1073e70..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_generic_green_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_generic_mac.png b/chrome/app/theme/default_200_percent/profile_avatar_generic_mac.png
deleted file mode 100644
index 33a2149..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_generic_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_generic_orange.png b/chrome/app/theme/default_200_percent/profile_avatar_generic_orange.png
deleted file mode 100644
index d791bd4..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_generic_orange.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_generic_orange_mac.png b/chrome/app/theme/default_200_percent/profile_avatar_generic_orange_mac.png
deleted file mode 100644
index d4cf705..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_generic_orange_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_generic_purple.png b/chrome/app/theme/default_200_percent/profile_avatar_generic_purple.png
deleted file mode 100644
index 448aa1e..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_generic_purple.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_generic_purple_mac.png b/chrome/app/theme/default_200_percent/profile_avatar_generic_purple_mac.png
deleted file mode 100644
index 3b3efa1..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_generic_purple_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_generic_red.png b/chrome/app/theme/default_200_percent/profile_avatar_generic_red.png
deleted file mode 100644
index b91010d..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_generic_red.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_generic_red_mac.png b/chrome/app/theme/default_200_percent/profile_avatar_generic_red_mac.png
deleted file mode 100644
index b5ad6d1..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_generic_red_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_generic_yellow.png b/chrome/app/theme/default_200_percent/profile_avatar_generic_yellow.png
deleted file mode 100644
index b1ea87f..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_generic_yellow.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_generic_yellow_mac.png b/chrome/app/theme/default_200_percent/profile_avatar_generic_yellow_mac.png
deleted file mode 100644
index 0a7d2d8..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_generic_yellow_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_horse.png b/chrome/app/theme/default_200_percent/profile_avatar_horse.png
deleted file mode 100644
index f971827..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_horse.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_horse_mac.png b/chrome/app/theme/default_200_percent/profile_avatar_horse_mac.png
deleted file mode 100644
index c57f858..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_horse_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_margarita.png b/chrome/app/theme/default_200_percent/profile_avatar_margarita.png
deleted file mode 100644
index f5ab84f..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_margarita.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_margarita_mac.png b/chrome/app/theme/default_200_percent/profile_avatar_margarita_mac.png
deleted file mode 100644
index b7602c5..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_margarita_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_ninja.png b/chrome/app/theme/default_200_percent/profile_avatar_ninja.png
deleted file mode 100644
index fbb2baf..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_ninja.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_ninja_mac.png b/chrome/app/theme/default_200_percent/profile_avatar_ninja_mac.png
deleted file mode 100644
index 62705d5..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_ninja_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_note.png b/chrome/app/theme/default_200_percent/profile_avatar_note.png
deleted file mode 100644
index a03ab42..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_note.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_note_mac.png b/chrome/app/theme/default_200_percent/profile_avatar_note_mac.png
deleted file mode 100644
index a03ab42..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_note_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_pizza.png b/chrome/app/theme/default_200_percent/profile_avatar_pizza.png
deleted file mode 100644
index a99e282..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_pizza.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_pizza_mac.png b/chrome/app/theme/default_200_percent/profile_avatar_pizza_mac.png
deleted file mode 100644
index 6dcf26b..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_pizza_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_secret_agent.png b/chrome/app/theme/default_200_percent/profile_avatar_secret_agent.png
deleted file mode 100644
index d02edd3..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_secret_agent.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_secret_agent_mac.png b/chrome/app/theme/default_200_percent/profile_avatar_secret_agent_mac.png
deleted file mode 100644
index e1f135c..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_secret_agent_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_soccer.png b/chrome/app/theme/default_200_percent/profile_avatar_soccer.png
deleted file mode 100644
index 04f06d5..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_soccer.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_soccer_mac.png b/chrome/app/theme/default_200_percent/profile_avatar_soccer_mac.png
deleted file mode 100644
index fe7052c..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_soccer_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_sun_cloud.png b/chrome/app/theme/default_200_percent/profile_avatar_sun_cloud.png
deleted file mode 100644
index 75bcb95..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_sun_cloud.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_sun_cloud_mac.png b/chrome/app/theme/default_200_percent/profile_avatar_sun_cloud_mac.png
deleted file mode 100644
index 115e3fe..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_sun_cloud_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_superhero.png b/chrome/app/theme/default_200_percent/profile_avatar_superhero.png
deleted file mode 100644
index 2653e30..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_superhero.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_superhero_mac.png b/chrome/app/theme/default_200_percent/profile_avatar_superhero_mac.png
deleted file mode 100644
index d6f64a8..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_superhero_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_volley_ball.png b/chrome/app/theme/default_200_percent/profile_avatar_volley_ball.png
deleted file mode 100644
index 9289aa6..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_volley_ball.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/profile_avatar_volley_ball_mac.png b/chrome/app/theme/default_200_percent/profile_avatar_volley_ball_mac.png
deleted file mode 100644
index 82516bd..0000000
--- a/chrome/app/theme/default_200_percent/profile_avatar_volley_ball_mac.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/default_200_percent/update_badge4.png b/chrome/app/theme/default_200_percent/update_badge4.png
deleted file mode 100644
index a321e5c..0000000
--- a/chrome/app/theme/default_200_percent/update_badge4.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/theme_resources.grd b/chrome/app/theme/theme_resources.grd
index 4ccae94..e469050 100644
--- a/chrome/app/theme/theme_resources.grd
+++ b/chrome/app/theme/theme_resources.grd
@@ -73,21 +73,11 @@
         <structure type="chrome_scaled_image" name="IDR_ASH_BROWSER_WINDOW_CONTROL_BACKGROUND_MAXIMIZED_P" file="common/ash/browser_window_control_background_maximized_pressed.png" />
         <structure type="chrome_scaled_image" name="IDR_ASH_BROWSER_WINDOW_CONTROL_BACKGROUND_RESTORED_H" file="common/ash/browser_window_control_background_restored_hover.png" />
         <structure type="chrome_scaled_image" name="IDR_ASH_BROWSER_WINDOW_CONTROL_BACKGROUND_RESTORED_P" file="common/ash/browser_window_control_background_restored_pressed.png" />
-        <structure type="chrome_scaled_image" name="IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_MAXIMIZED_CLOSE" file="common/ash/browser_window_control_icon_maximized_close.png" />
-        <structure type="chrome_scaled_image" name="IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_MAXIMIZED_LEFT_SNAPPED" file="common/ash/browser_window_control_icon_maximized_left_snapped.png" />
-        <structure type="chrome_scaled_image" name="IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_MAXIMIZED_MINIMIZE" file="common/ash/browser_window_control_icon_maximized_minimize.png" />
-        <structure type="chrome_scaled_image" name="IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_MAXIMIZED_RIGHT_SNAPPED" file="common/ash/browser_window_control_icon_maximized_right_snapped.png" />
-        <structure type="chrome_scaled_image" name="IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_MAXIMIZED_SIZE" file="common/ash/browser_window_control_icon_maximized_size.png" />
-        <structure type="chrome_scaled_image" name="IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_RESTORED_CLOSE" file="common/ash/browser_window_control_icon_restored_close.png" />
-        <structure type="chrome_scaled_image" name="IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_RESTORED_LEFT_SNAPPED" file="common/ash/browser_window_control_icon_restored_left_snapped.png" />
-        <structure type="chrome_scaled_image" name="IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_RESTORED_MINIMIZE" file="common/ash/browser_window_control_icon_restored_minimize.png" />
-        <structure type="chrome_scaled_image" name="IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_RESTORED_RIGHT_SNAPPED" file="common/ash/browser_window_control_icon_restored_right_snapped.png" />
-        <structure type="chrome_scaled_image" name="IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_RESTORED_SIZE" file="common/ash/browser_window_control_icon_restored_size.png" />
-        <structure type="chrome_scaled_image" name="IDR_ASH_BROWSER_WINDOW_HEADER_BASE_MAXIMIZED" file="common/ash/browser_window_header_base_maximized.png" />
-        <structure type="chrome_scaled_image" name="IDR_ASH_BROWSER_WINDOW_HEADER_BASE_RESTORED_ACTIVE" file="common/ash/browser_window_header_base_active.png" />
-        <structure type="chrome_scaled_image" name="IDR_ASH_BROWSER_WINDOW_HEADER_BASE_RESTORED_INACTIVE" file="common/ash/browser_window_header_base_inactive.png" />
-        <structure type="chrome_scaled_image" name="IDR_ASH_BROWSER_WINDOW_HEADER_BASE_RESTORED_INCOGNITO_ACTIVE" file="common/ash/browser_window_header_base_incognito_active.png" />
-        <structure type="chrome_scaled_image" name="IDR_ASH_BROWSER_WINDOW_HEADER_BASE_RESTORED_INCOGNITO_INACTIVE" file="common/ash/browser_window_header_base_incognito_inactive.png" />
+        <structure type="chrome_scaled_image" name="IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_CLOSE" file="common/ash/browser_window_control_icon_close.png" />
+        <structure type="chrome_scaled_image" name="IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_LEFT_SNAPPED" file="common/ash/browser_window_control_icon_left_snapped.png" />
+        <structure type="chrome_scaled_image" name="IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_MINIMIZE" file="common/ash/browser_window_control_icon_minimize.png" />
+        <structure type="chrome_scaled_image" name="IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_RIGHT_SNAPPED" file="common/ash/browser_window_control_icon_right_snapped.png" />
+        <structure type="chrome_scaled_image" name="IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_SIZE" file="common/ash/browser_window_control_icon_size.png" />
         <structure type="chrome_scaled_image" name="IDR_ASH_BROWSER_WINDOW_HEADER_SHADE_LEFT" file="common/ash/browser_window_header_shade_left.png" />
         <structure type="chrome_scaled_image" name="IDR_ASH_BROWSER_WINDOW_HEADER_SHADE_RIGHT" file="common/ash/browser_window_header_shade_right.png" />
         <structure type="chrome_scaled_image" name="IDR_ASH_BROWSER_WINDOW_HEADER_SHADE_TOP" file="common/ash/browser_window_header_shade_top.png" />
@@ -196,9 +186,6 @@
       <structure type="chrome_scaled_image" name="IDR_DEVELOPER_MODE_HIGHLIGHT_TOP_LEFT" file="common/developer_mode_highlight_top_left.png" />
       <structure type="chrome_scaled_image" name="IDR_DEVELOPER_MODE_HIGHLIGHT_TOP" file="common/developer_mode_highlight_top.png" />
       <structure type="chrome_scaled_image" name="IDR_DEVELOPER_MODE_HIGHLIGHT_TOP_RIGHT" file="common/developer_mode_highlight_top_right.png" />
-      <structure type="chrome_scaled_image" name="IDR_DOCK_HIGH" file="dock_tab_high.png" />
-      <structure type="chrome_scaled_image" name="IDR_DOCK_MAX" file="dock_tab_max.png" />
-      <structure type="chrome_scaled_image" name="IDR_DOCK_WIDE" file="dock_tab_wide.png" />
       <structure type="chrome_scaled_image" name="IDR_DOWN_ARROW" file="common/down_arrow.png" />
       <structure type="chrome_scaled_image" name="IDR_DOWNLOADS_FAVICON" file="common/favicon_downloads.png" />
       <structure type="chrome_scaled_image" name="IDR_DOWNLOAD_ANIMATION_BEGIN" file="download_animation_begin.png" />
@@ -253,7 +240,6 @@
       <structure type="chrome_scaled_image" name="IDR_ERROR_NETWORK_OFFLINE" file="common/error_network_offline.png" />
       <if expr="enable_extensions">
         <structure type="chrome_scaled_image" name="IDR_EXTENSIONS_FAVICON" file="common/favicon_extensions.png" />
-        <structure type="chrome_scaled_image" name="IDR_EXTENSIONS_SCRIPT_BUBBLE" file="common/script_bubble.png" />
         <structure type="chrome_scaled_image" name="IDR_EXTENSIONS_RATING_STAR_HALF_LEFT" file="extensions_rating_star_half_left.png" />
         <structure type="chrome_scaled_image" name="IDR_EXTENSIONS_RATING_STAR_HALF_RIGHT" file="extensions_rating_star_half_right.png" />
         <structure type="chrome_scaled_image" name="IDR_EXTENSIONS_RATING_STAR_OFF" file="extensions_rating_star_off.png" />
@@ -265,10 +251,6 @@
       <if expr="chromeos">
         <structure type="chrome_scaled_image" name="IDR_FATAL_ERROR" file="cros/fatal_error.png" />
       </if>
-      <structure type="chrome_scaled_image" name="IDR_FEEDBACK" file="feedback.png" />
-      <structure type="chrome_scaled_image" name="IDR_FEEDBACK_H" file="feedback_hover.png" />
-      <structure type="chrome_scaled_image" name="IDR_FEEDBACK_P" file="feedback_pressed.png" />
-
       <structure type="chrome_scaled_image" name="IDR_FILE_FOLDER" file="common/folder.png" />
       <if expr="chromeos">
         <structure type="chrome_scaled_image" name="IDR_FILETYPE_ARCHIVE" file="cros/file_types/archive.png" />
@@ -318,7 +300,6 @@
       </if>
 
       <if expr="chromeos">
-        <structure type="chrome_scaled_image" name="IDR_FILES_APP_ICON" file="common/files_app_icon.png" />
         <if expr="_google_chrome">
           <structure type="chrome_scaled_image" name="IDR_FIRST_RUN_GREETING" file="google_chrome/cros/first_run_greeting.png" />
         </if>
@@ -380,9 +361,6 @@
         <structure type="chrome_scaled_image" name="IDR_ICON_PROFILES_MENU_CARET" file="common/carrot_blue.png" />
       </if>
       <if expr="not is_android and not is_ios and not chromeos">
-        <!-- TODO(noms): Remove this once local profile avatars are migrated -->
-        <structure type="chrome_scaled_image" name="IDR_USER_MANAGER_DEFAULT_AVATAR" file="common/login_guest.png" />
-
         <!-- User Manager tutorial -->
         <structure type="chrome_scaled_image" name="IDR_ICON_USER_MANAGER_TUTORIAL_WELCOME" file="common/user_manager_tutorial/welcome.png" />
         <structure type="chrome_scaled_image" name="IDR_ICON_USER_MANAGER_TUTORIAL_YOUR_CHROME" file="common/user_manager_tutorial/your_chrome.png" />
@@ -396,10 +374,6 @@
         <structure type="chrome_scaled_image" name="IDR_ICON_GUEST_WHITE" file="icon_guest_white.png" />
         <structure type="chrome_scaled_image" name="IDR_ICON_POWER_WHITE" file="icon_power_white.png" />
       </if>
-      <if expr="is_win">
-        <structure type="chrome_scaled_image" name="IDR_INCOGNITO_SWITCH_OFF" file="incognito_switch_off.png" />
-        <structure type="chrome_scaled_image" name="IDR_INCOGNITO_SWITCH_ON" file="incognito_switch_on.png" />
-      </if>
       <structure type="chrome_scaled_image" name="IDR_INFO" file="info_small.png" />
       <if expr="toolkit_views">
         <structure type="chrome_scaled_image" name="IDR_INFOBARBUTTON_HOVER_BOTTOM" file="common/infobarbutton_bottom_hover.png" />
@@ -465,6 +439,10 @@
       <if expr="enable_service_discovery">
         <structure type="chrome_scaled_image" name="IDR_LOCAL_DISCOVERY_CLOUDPRINT_ICON" file="common/cloudprint.png" />
       </if>
+      <!-- TODO(calamity): The 1x local ntp resources require a proper version.
+           See crbug.com/363519. -->
+      <structure type="chrome_scaled_image" name="IDR_LOCAL_NTP_IMAGES_LOGO_PNG" file="common/ntp_google_logo.png" />
+      <structure type="chrome_scaled_image" name="IDR_LOCAL_NTP_IMAGES_WHITE_LOGO_PNG" file="common/ntp_white_google_logo.png" />
       <structure type="chrome_scaled_image" name="IDR_LOCATION_BAR_HTTP" file="common/location_bar_http.png" />
       <if expr="chromeos">
         <!-- TODO(nkostylev): This resource needs to be removed when cros login code is moved to ash. -->
@@ -504,7 +482,6 @@
         <structure type="chrome_scaled_image" name="IDR_LOGIN_DEFAULT_USER_32" file="avatar_upsidedown.png" />
         <structure type="chrome_scaled_image" name="IDR_LOGIN_PASSWORD_CAPS_LOCK" file="login_password_capslock.png" />
       </if>
-      <structure type="chrome_scaled_image" name="IDR_LOGIN_GUEST" file="common/login_guest.png" />
       <if expr="chromeos">
         <structure type="chrome_scaled_image" name="IDR_MANAGED_MODE_ICON" file="cros/managed_mode_icon.png" />
         <structure type="chrome_scaled_image" name="IDR_KIOSK_APP_USER_POD_ICON" file="cros/kiosk_app_user_pod_icon.png" />
@@ -558,13 +535,8 @@
       </if>
       <if expr="chromeos">
         <structure type="chrome_scaled_image" name="IDR_NOTIFICATION_DRIVE" file="cros/notification_drive.png" />
-      </if>
-      <if expr="chromeos">
         <structure type="chrome_scaled_image" name="IDR_NOTIFICATION_PERIPHERAL_BATTERY_LOW" file="cros/notification_peripheral_battery_low.png" />
-      </if>
-      <if expr="chromeos">
         <structure type="chrome_scaled_image" name="IDR_PORTAL_DETECTION_ALERT" file="cros/captive_portal_icon.png" />
-        <structure type="chrome_scaled_image" name="IDR_PORTAL_DETECTION_GLOBE" file="cros/globe_icon.png" />
       </if>
       <if expr="is_win or desktop_linux">
         <structure type="chrome_scaled_image" name="IDR_NOTIFICATION_TRAY_DO_NOT_DISTURB_ATTENTION" file="common/notification_tray_do_not_disturb_attention.png" />
@@ -722,60 +694,62 @@
         <structure type="chrome_scaled_image" name="IDR_PRODUCT_LOGO_WHITE" file="google_chrome/product_logo_white.png" />
       </if>
       <if expr="is_macosx or is_ios">
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_0" file="profile_avatar_generic_mac.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_1" file="profile_avatar_generic_aqua_mac.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_2" file="profile_avatar_generic_blue_mac.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_3" file="profile_avatar_generic_green_mac.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_4" file="profile_avatar_generic_orange_mac.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_5" file="profile_avatar_generic_purple_mac.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_6" file="profile_avatar_generic_red_mac.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_7" file="profile_avatar_generic_yellow_mac.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_8" file="profile_avatar_secret_agent_mac.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_9" file="profile_avatar_superhero_mac.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_10" file="profile_avatar_volley_ball_mac.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_11" file="profile_avatar_businessman_mac.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_12" file="profile_avatar_ninja_mac.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_13" file="profile_avatar_alien_mac.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_14" file="profile_avatar_awesome_mac.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_15" file="profile_avatar_flower_mac.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_16" file="profile_avatar_pizza_mac.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_17" file="profile_avatar_soccer_mac.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_18" file="profile_avatar_burger_mac.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_19" file="profile_avatar_cat_mac.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_20" file="profile_avatar_cupcake_mac.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_21" file="profile_avatar_dog_mac.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_22" file="profile_avatar_horse_mac.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_23" file="profile_avatar_margarita_mac.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_24" file="profile_avatar_note_mac.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_25" file="profile_avatar_sun_cloud_mac.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_0" file="common/profile_avatar_generic_mac.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_1" file="common/profile_avatar_generic_aqua_mac.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_2" file="common/profile_avatar_generic_blue_mac.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_3" file="common/profile_avatar_generic_green_mac.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_4" file="common/profile_avatar_generic_orange_mac.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_5" file="common/profile_avatar_generic_purple_mac.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_6" file="common/profile_avatar_generic_red_mac.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_7" file="common/profile_avatar_generic_yellow_mac.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_8" file="common/profile_avatar_secret_agent_mac.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_9" file="common/profile_avatar_superhero_mac.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_10" file="common/profile_avatar_volley_ball_mac.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_11" file="common/profile_avatar_businessman_mac.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_12" file="common/profile_avatar_ninja_mac.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_13" file="common/profile_avatar_alien_mac.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_14" file="common/profile_avatar_awesome_mac.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_15" file="common/profile_avatar_flower_mac.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_16" file="common/profile_avatar_pizza_mac.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_17" file="common/profile_avatar_soccer_mac.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_18" file="common/profile_avatar_burger_mac.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_19" file="common/profile_avatar_cat_mac.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_20" file="common/profile_avatar_cupcake_mac.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_21" file="common/profile_avatar_dog_mac.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_22" file="common/profile_avatar_horse_mac.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_23" file="common/profile_avatar_margarita_mac.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_24" file="common/profile_avatar_note_mac.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_25" file="common/profile_avatar_sun_cloud_mac.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_26" file="common/login_guest.png" />
       </if>
       <if expr="not is_macosx and not is_ios">
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_0" file="profile_avatar_generic.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_1" file="profile_avatar_generic_aqua.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_2" file="profile_avatar_generic_blue.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_3" file="profile_avatar_generic_green.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_4" file="profile_avatar_generic_orange.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_5" file="profile_avatar_generic_purple.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_6" file="profile_avatar_generic_red.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_7" file="profile_avatar_generic_yellow.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_8" file="profile_avatar_secret_agent.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_9" file="profile_avatar_superhero.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_10" file="profile_avatar_volley_ball.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_11" file="profile_avatar_businessman.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_12" file="profile_avatar_ninja.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_13" file="profile_avatar_alien.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_14" file="profile_avatar_awesome.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_15" file="profile_avatar_flower.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_16" file="profile_avatar_pizza.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_17" file="profile_avatar_soccer.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_18" file="profile_avatar_burger.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_19" file="profile_avatar_cat.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_20" file="profile_avatar_cupcake.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_21" file="profile_avatar_dog.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_22" file="profile_avatar_horse.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_23" file="profile_avatar_margarita.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_24" file="profile_avatar_note.png" />
-        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_25" file="profile_avatar_sun_cloud.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_0" file="common/profile_avatar_generic.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_1" file="common/profile_avatar_generic_aqua.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_2" file="common/profile_avatar_generic_blue.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_3" file="common/profile_avatar_generic_green.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_4" file="common/profile_avatar_generic_orange.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_5" file="common/profile_avatar_generic_purple.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_6" file="common/profile_avatar_generic_red.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_7" file="common/profile_avatar_generic_yellow.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_8" file="common/profile_avatar_secret_agent.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_9" file="common/profile_avatar_superhero.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_10" file="common/profile_avatar_volley_ball.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_11" file="common/profile_avatar_businessman.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_12" file="common/profile_avatar_ninja.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_13" file="common/profile_avatar_alien.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_14" file="common/profile_avatar_awesome.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_15" file="common/profile_avatar_flower.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_16" file="common/profile_avatar_pizza.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_17" file="common/profile_avatar_soccer.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_18" file="common/profile_avatar_burger.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_19" file="common/profile_avatar_cat.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_20" file="common/profile_avatar_cupcake.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_21" file="common/profile_avatar_dog.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_22" file="common/profile_avatar_horse.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_23" file="common/profile_avatar_margarita.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_24" file="common/profile_avatar_note.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_25" file="common/profile_avatar_sun_cloud.png" />
+        <structure type="chrome_scaled_image" name="IDR_PROFILE_AVATAR_26" file="common/login_guest.png" />
       </if>
 
       <!-- New style avatar button -->
@@ -1186,13 +1160,6 @@
       <if expr="chromeos">
         <structure type="chrome_scaled_image" name="IDR_TECHNICAL_ERROR" file="cros/technical_error.png" />
       </if>
-      <if expr="not _google_chrome">
-        <structure type="chrome_scaled_image" name="IDR_TEMPORARY_GOOGLE_PLUS_ICON" file="chromium/ic_gplus_color_16.png" />
-      </if>
-      <if expr="_google_chrome">
-        <structure type="chrome_scaled_image" name="IDR_TEMPORARY_GOOGLE_PLUS_ICON" file="google_chrome/ic_gplus_color_16.png" />
-      </if>
-
       <structure type="chrome_scaled_image" name="IDR_TEXTFIELD_BOTTOM" file="common/textfield_bottom.png" />
       <structure type="chrome_scaled_image" name="IDR_TEXTFIELD_BOTTOM_LEFT" file="common/textfield_bottom_left.png" />
       <structure type="chrome_scaled_image" name="IDR_TEXTFIELD_BOTTOM_RIGHT" file="common/textfield_bottom_right.png" />
@@ -1262,7 +1229,6 @@
       <structure type="chrome_scaled_image" name="IDR_THEME_WINDOW_CONTROL_BACKGROUND" file="notused.png" />
       <structure type="chrome_scaled_image" name="IDR_THROBBER_LIGHT" file="throbber_light.png" />
       <structure type="chrome_scaled_image" name="IDR_THROBBER_WAITING" file="throbber_waiting.png" />
-      <structure type="chrome_scaled_image" name="IDR_THROBBER_WAITING_LIGHT" file="throbber_waiting_light.png" />
       <if expr="use_ash">
         <structure type="chrome_scaled_image" name="IDR_TOOLBAR_SHADE_BOTTOM" file="common/toolbar_shade_bottom.png" />
         <structure type="chrome_scaled_image" name="IDR_TOOLBAR_SHADE_LEFT" file="common/toolbar_shade_left.png" />
@@ -1278,14 +1244,8 @@
         <structure type="chrome_scaled_image" name="IDR_TOOLS_H" file="tools_hover.png" />
         <structure type="chrome_scaled_image" name="IDR_TOOLS_P" file="tools_pressed.png" />
       </if>
-      <if expr="toolkit_views or is_macosx or is_ios">
-        <if expr="desktop_linux">
-          <structure type="chrome_scaled_image" name="IDR_TOOLS_BADGE_AURA" file="common/browser_tools_badge_aura.png" />
-          <structure type="chrome_scaled_image" name="IDR_TOOLS" file="common/browser_tools_normal_aura.png" />
-        </if>
-        <if expr="not desktop_linux">
-          <structure type="chrome_scaled_image" name="IDR_TOOLS" file="common/browser_tools_normal.png" />
-        </if>
+      <if expr="pp_ifdef('toolkit_views') or is_macosx or is_ios">
+        <structure type="chrome_scaled_image" name="IDR_TOOLS" file="common/browser_tools_normal.png" />
         <structure type="chrome_scaled_image" name="IDR_TOOLS_H" file="common/browser_tools_hover.png" />
         <structure type="chrome_scaled_image" name="IDR_TOOLS_P" file="common/browser_tools_pressed.png" />
       </if>
@@ -1303,7 +1263,6 @@
         <structure type="chrome_scaled_image" name="IDR_UPDATE_BADGE" file="update_badge.png" />
         <structure type="chrome_scaled_image" name="IDR_UPDATE_BADGE2" file="update_badge2.png" />
         <structure type="chrome_scaled_image" name="IDR_UPDATE_BADGE3" file="update_badge3.png" />
-        <structure type="chrome_scaled_image" name="IDR_UPDATE_BADGE4" file="update_badge4.png" />
       </if>
       <structure type="chrome_scaled_image" name="IDR_UPDATE_FAILED" file="common/update_failed.png" />
       <structure type="chrome_scaled_image" name="IDR_UPDATE_MENU_SEVERITY_LOW" file="common/update_menu_severity_low.png" />
diff --git a/chrome/browser/DEPS b/chrome/browser/DEPS
index 8c9ada6..cacd634 100644
--- a/chrome/browser/DEPS
+++ b/chrome/browser/DEPS
@@ -15,9 +15,12 @@
   "+components/bookmarks/core/browser",
   "+components/bookmarks/core/common",
   "+components/breakpad",
+  "+components/cloud_devices/common",
   "+components/data_reduction_proxy",
   "+components/dom_distiller",
   "+components/domain_reliability",
+  "+components/favicon_base",
+  "+components/infobars",
   "+components/keyed_service",
   "+components/language_usage_metrics",
   "+components/nacl/browser",
@@ -28,6 +31,7 @@
   "+components/password_manager",
   "+components/policy",
   "+components/precache",
+  "+components/query_parser",
   "+components/rappor",
   "+components/sessions",
   "+components/signin",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 7163bb9..3ea9276 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -493,6 +493,13 @@
          switches::kEnableUniversalAcceleratedOverflowScroll,
          switches::kDisableUniversalAcceleratedOverflowScroll)
   },
+  {
+    "disable_layer_squashing",
+    IDS_FLAGS_DISABLE_LAYER_SQUASHING_NAME,
+    IDS_FLAGS_DISABLE_LAYER_SQUASHING_DESCRIPTION,
+    kOsAll,
+    SINGLE_VALUE_TYPE(switches::kDisableLayerSquashing)
+  },
 #if defined(OS_WIN)
   {
     "enable-direct-write",
@@ -756,13 +763,6 @@
     SINGLE_VALUE_TYPE(switches::kSavePageAsMHTML)
   },
   {
-    "enable-autologin",
-    IDS_FLAGS_ENABLE_AUTOLOGIN_NAME,
-    IDS_FLAGS_ENABLE_AUTOLOGIN_DESCRIPTION,
-    kOsMac | kOsWin | kOsLinux,
-    SINGLE_VALUE_TYPE(switches::kEnableAutologin)
-  },
-  {
     "enable-quic",
     IDS_FLAGS_ENABLE_QUIC_NAME,
     IDS_FLAGS_ENABLE_QUIC_DESCRIPTION,
@@ -1672,15 +1672,13 @@
     kOsAll,
     SINGLE_VALUE_TYPE(autofill::switches::kDisableIgnoreAutocompleteOff)
   },
-#if defined(USE_AURA)
   {
     "enable-permissions-bubbles",
     IDS_FLAGS_ENABLE_PERMISSIONS_BUBBLES_NAME,
     IDS_FLAGS_ENABLE_PERMISSIONS_BUBBLES_DESCRIPTION,
-    kOsCrOS | kOsWin,
+    kOsCrOS | kOsMac | kOsWin,
     SINGLE_VALUE_TYPE(switches::kEnablePermissionsBubbles)
   },
-#endif
   {
     "notification-center-tray-behavior",
     IDS_FLAGS_NOTIFICATION_TRAY_BEHAVIOR_NAME,
@@ -1783,12 +1781,21 @@
   },
 #endif
   {
-    "enable-embedded-shared-worker",
-    IDS_FLAGS_ENABLE_EMBEDDED_SHARED_WORKER_NAME,
-    IDS_FLAGS_ENABLE_EMBEDDED_SHARED_WORKER_DESCRIPTION,
+    "disable-embedded-shared-worker",
+    IDS_FLAGS_DISABLE_EMBEDDED_SHARED_WORKER_NAME,
+    IDS_FLAGS_DISABLE_EMBEDDED_SHARED_WORKER_DESCRIPTION,
     kOsDesktop,
-    SINGLE_VALUE_TYPE(switches::kEnableEmbeddedSharedWorker)
+    SINGLE_VALUE_TYPE(switches::kDisableEmbeddedSharedWorker)
   },
+#if defined(OS_CHROMEOS)
+  {
+    "enable-filemanager-mtp",
+    IDS_FLAGS_ENABLE_FILE_MANAGER_MTP_NAME,
+    IDS_FLAGS_ENABLE_FILE_MANAGER_MTP_DESCRIPTION,
+    kOsCrOS,
+    SINGLE_VALUE_TYPE(chromeos::switches::kEnableFileManagerMTP)
+  },
+#endif
 };
 
 const Experiment* experiments = kExperiments;
diff --git a/chrome/browser/accessibility/accessibility_events.cc b/chrome/browser/accessibility/accessibility_events.cc
index 005f71d..ab27879 100644
--- a/chrome/browser/accessibility/accessibility_events.cc
+++ b/chrome/browser/accessibility/accessibility_events.cc
@@ -18,7 +18,7 @@
 void SendControlAccessibilityNotification(
   ui::AXEvent event,
   AccessibilityControlInfo* info) {
-  Profile *profile = info->profile();
+  Profile* profile = info->profile();
   if (profile->ShouldSendAccessibilityEvents()) {
     ExtensionAccessibilityEventRouter::GetInstance()->HandleControlEvent(
         event,
@@ -29,7 +29,7 @@
 void SendMenuAccessibilityNotification(
   ui::AXEvent event,
   AccessibilityMenuInfo* info) {
-  Profile *profile = info->profile();
+  Profile* profile = info->profile();
   if (profile->ShouldSendAccessibilityEvents()) {
     ExtensionAccessibilityEventRouter::GetInstance()->HandleMenuEvent(
         event,
@@ -40,7 +40,7 @@
 void SendWindowAccessibilityNotification(
   ui::AXEvent event,
   AccessibilityWindowInfo* info) {
-  Profile *profile = info->profile();
+  Profile* profile = info->profile();
   if (profile->ShouldSendAccessibilityEvents()) {
     ExtensionAccessibilityEventRouter::GetInstance()->HandleWindowEvent(
         event,
diff --git a/chrome/browser/accessibility/accessibility_extension_api.cc b/chrome/browser/accessibility/accessibility_extension_api.cc
index e7fd6c0..2494bbb 100644
--- a/chrome/browser/accessibility/accessibility_extension_api.cc
+++ b/chrome/browser/accessibility/accessibility_extension_api.cc
@@ -12,10 +12,10 @@
 #include "chrome/browser/extensions/extension_service.h"
 #include "chrome/browser/extensions/extension_tab_util.h"
 #include "chrome/browser/infobars/confirm_infobar_delegate.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/common/extensions/api/accessibility_private.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/browser_accessibility_state.h"
 #include "extensions/browser/event_router.h"
 #include "extensions/browser/extension_host.h"
@@ -206,13 +206,15 @@
     Profile* profile,
     const char* event_name,
     scoped_ptr<base::ListValue> event_args) {
-  if (enabled_ && profile &&
-      extensions::ExtensionSystem::Get(profile)->event_router()) {
-    scoped_ptr<extensions::Event> event(new extensions::Event(
-        event_name, event_args.Pass()));
-    extensions::ExtensionSystem::Get(profile)->event_router()->
-        BroadcastEvent(event.Pass());
-  }
+  if (!enabled_ || !profile)
+    return;
+  extensions::EventRouter* event_router = extensions::EventRouter::Get(profile);
+  if (!event_router)
+    return;
+
+  scoped_ptr<extensions::Event> event(new extensions::Event(
+      event_name, event_args.Pass()));
+  event_router->BroadcastEvent(event.Pass());
 }
 
 bool AccessibilityPrivateSetAccessibilityEnabledFunction::RunImpl() {
diff --git a/chrome/browser/accessibility/accessibility_extension_apitest.cc b/chrome/browser/accessibility/accessibility_extension_apitest.cc
index 02a4a72..55a9aa0 100644
--- a/chrome/browser/accessibility/accessibility_extension_apitest.cc
+++ b/chrome/browser/accessibility/accessibility_extension_apitest.cc
@@ -34,7 +34,7 @@
 
   const char kAlertMessage[] = "Simple Alert Infobar.";
   SimpleAlertInfoBarDelegate::Create(infobar_service,
-                                     InfoBarDelegate::kNoIconID,
+                                     infobars::InfoBarDelegate::kNoIconID,
                                      base::ASCIIToUTF16(kAlertMessage), false);
   CommandLine::ForCurrentProcess()->AppendSwitch(
       extensions::switches::kEnableExperimentalExtensionApis);
diff --git a/chrome/browser/android/banners/app_banner_manager.cc b/chrome/browser/android/banners/app_banner_manager.cc
index 0348807..fdc45aa 100644
--- a/chrome/browser/android/banners/app_banner_manager.cc
+++ b/chrome/browser/android/banners/app_banner_manager.cc
@@ -6,14 +6,12 @@
 
 #include "base/android/jni_android.h"
 #include "base/android/jni_string.h"
-#include "base/command_line.h"
 #include "base/metrics/histogram.h"
 #include "chrome/browser/android/banners/app_banner_metrics_ids.h"
 #include "chrome/browser/android/banners/app_banner_settings_helper.h"
 #include "chrome/browser/android/banners/app_banner_utilities.h"
 #include "chrome/browser/bitmap_fetcher.h"
 #include "chrome/browser/profiles/profile.h"
-#include "chrome/common/chrome_switches.h"
 #include "content/public/browser/android/content_view_core.h"
 #include "content/public/browser/navigation_details.h"
 #include "content/public/browser/web_contents.h"
@@ -152,8 +150,7 @@
 }
 
 jboolean IsEnabled(JNIEnv* env, jclass clazz) {
-  return !CommandLine::ForCurrentProcess()->HasSwitch(
-      switches::kDisableAppBanners);
+  return false;
 }
 
 // Register native methods
diff --git a/chrome/browser/android/banners/app_banner_manager.h b/chrome/browser/android/banners/app_banner_manager.h
index 226f119..1a50c80 100644
--- a/chrome/browser/android/banners/app_banner_manager.h
+++ b/chrome/browser/android/banners/app_banner_manager.h
@@ -6,7 +6,7 @@
 #define CHROME_BROWSER_ANDROID_BANNERS_APP_BANNER_MANAGER_H_
 
 #include "base/android/jni_android.h"
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/memory/scoped_ptr.h"
 #include "chrome/browser/android/meta_tag_observer.h"
 #include "chrome/browser/bitmap_fetcher.h"
diff --git a/chrome/browser/android/bookmarks/bookmarks_bridge.cc b/chrome/browser/android/bookmarks/bookmarks_bridge.cc
index 3048fb5..73c5066 100644
--- a/chrome/browser/android/bookmarks/bookmarks_bridge.cc
+++ b/chrome/browser/android/bookmarks/bookmarks_bridge.cc
@@ -8,6 +8,7 @@
 #include "base/prefs/pref_service.h"
 #include "chrome/browser/bookmarks/bookmark_model.h"
 #include "chrome/browser/bookmarks/bookmark_model_factory.h"
+#include "chrome/browser/bookmarks/bookmark_utils.h"
 #include "chrome/browser/profiles/incognito_helpers.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_android.h"
@@ -233,20 +234,16 @@
       IsEditable(node));
 }
 
-void BookmarksBridge::ExtractBookmarkNodeInformation(
-    const BookmarkNode* node,
-    jobject j_result_obj) {
+void BookmarksBridge::ExtractBookmarkNodeInformation(const BookmarkNode* node,
+                                                     jobject j_result_obj) {
   JNIEnv* env = AttachCurrentThread();
   if (!IsReachable(node))
     return;
   Java_BookmarksBridge_addToList(
-      env,
-      j_result_obj,
-      CreateJavaBookmark(node).obj());
+      env, j_result_obj, CreateJavaBookmark(node).obj());
 }
 
-const BookmarkNode* BookmarksBridge::GetNodeByID(long node_id,
-                                                 int type) {
+const BookmarkNode* BookmarksBridge::GetNodeByID(long node_id, int type) {
   const BookmarkNode* node;
   if (type == kBookmarkTypeManaged) {
     node = managed_bookmarks_shim_->GetNodeByID(
@@ -255,13 +252,13 @@
     node = partner_bookmarks_shim_->GetNodeByID(
         static_cast<int64>(node_id));
   } else {
-    node = bookmark_model_->GetNodeByID(static_cast<int64>(node_id));
+    node = GetBookmarkNodeByID(bookmark_model_, static_cast<int64>(node_id));
   }
   return node;
 }
 
-const BookmarkNode* BookmarksBridge::GetFolderWithFallback(
-    long folder_id, int type) {
+const BookmarkNode* BookmarksBridge::GetFolderWithFallback(long folder_id,
+                                                           int type) {
   const BookmarkNode* folder = GetNodeByID(folder_id, type);
   if (!folder || folder->type() == BookmarkNode::URL ||
       !IsFolderAvailable(folder)) {
diff --git a/chrome/browser/android/bookmarks/bookmarks_bridge.h b/chrome/browser/android/bookmarks/bookmarks_bridge.h
index 58e6926..c09a45e 100644
--- a/chrome/browser/android/bookmarks/bookmarks_bridge.h
+++ b/chrome/browser/android/bookmarks/bookmarks_bridge.h
@@ -8,7 +8,7 @@
 #include <jni.h>
 
 #include "base/android/jni_android.h"
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/basictypes.h"
 #include "base/compiler_specific.h"
 #include "chrome/browser/android/bookmarks/managed_bookmarks_shim.h"
diff --git a/chrome/browser/android/bookmarks/partner_bookmarks_shim.cc b/chrome/browser/android/bookmarks/partner_bookmarks_shim.cc
index 78f8072..52bc38a 100644
--- a/chrome/browser/android/bookmarks/partner_bookmarks_shim.cc
+++ b/chrome/browser/android/bookmarks/partner_bookmarks_shim.cc
@@ -11,6 +11,7 @@
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/common/pref_names.h"
 #include "components/user_prefs/pref_registry_syncable.h"
+#include "content/public/browser/browser_context.h"
 #include "content/public/browser/browser_thread.h"
 
 using content::BrowserThread;
diff --git a/chrome/browser/android/bookmarks/partner_bookmarks_shim.h b/chrome/browser/android/bookmarks/partner_bookmarks_shim.h
index 9d6fa46..86c9208 100644
--- a/chrome/browser/android/bookmarks/partner_bookmarks_shim.h
+++ b/chrome/browser/android/bookmarks/partner_bookmarks_shim.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_BROWSER_ANDROID_BOOKMARKS_PARTNER_BOOKMARKS_SHIM_H_
 #define CHROME_BROWSER_ANDROID_BOOKMARKS_PARTNER_BOOKMARKS_SHIM_H_
 
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/strings/string16.h"
 #include "base/supports_user_data.h"
@@ -15,6 +15,7 @@
 class PrefService;
 
 namespace content {
+class BrowserContext;
 class WebContents;
 }
 
diff --git a/chrome/browser/android/chrome_startup_flags.cc b/chrome/browser/android/chrome_startup_flags.cc
index 8d1c18e..93ee6cc 100644
--- a/chrome/browser/android/chrome_startup_flags.cc
+++ b/chrome/browser/android/chrome_startup_flags.cc
@@ -35,9 +35,6 @@
 }  // namespace
 
 void SetChromeSpecificCommandLineFlags() {
-  // Turn on autologin.
-  SetCommandLineSwitch(switches::kEnableAutologin);
-
   // Enable prerender for the omnibox.
   SetCommandLineSwitchASCII(switches::kPrerenderMode,
                             switches::kPrerenderModeSwitchValueEnabled);
diff --git a/chrome/browser/android/dev_tools_server.cc b/chrome/browser/android/dev_tools_server.cc
index 0caa2dc..b89a0c1 100644
--- a/chrome/browser/android/dev_tools_server.cc
+++ b/chrome/browser/android/dev_tools_server.cc
@@ -19,7 +19,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/android/tab_android.h"
 #include "chrome/browser/browser_process.h"
-#include "chrome/browser/devtools/devtools_adb_bridge.h"
+#include "chrome/browser/devtools/device/devtools_android_bridge.h"
 #include "chrome/browser/history/top_sites.h"
 #include "chrome/browser/profiles/profile_manager.h"
 #include "chrome/browser/ui/android/tab_model/tab_model.h"
diff --git a/chrome/browser/android/dom_distiller/feedback_reporter_android.h b/chrome/browser/android/dom_distiller/feedback_reporter_android.h
index 026ffd8..4fe1679 100644
--- a/chrome/browser/android/dom_distiller/feedback_reporter_android.h
+++ b/chrome/browser/android/dom_distiller/feedback_reporter_android.h
@@ -7,7 +7,7 @@
 
 #include <jni.h>
 
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/browser/web_contents_observer.h"
 
diff --git a/chrome/browser/android/favicon_helper.cc b/chrome/browser/android/favicon_helper.cc
index 0fb4512..f6ae96c 100644
--- a/chrome/browser/android/favicon_helper.cc
+++ b/chrome/browser/android/favicon_helper.cc
@@ -37,7 +37,7 @@
 
 void OnLocalFaviconAvailable(
     ScopedJavaGlobalRef<jobject>* j_favicon_image_callback,
-    const chrome::FaviconImageResult& favicon_image_result) {
+    const favicon_base::FaviconImageResult& favicon_image_result) {
   JNIEnv* env = AttachCurrentThread();
 
   // Convert favicon_image_result to java objects.
diff --git a/chrome/browser/android/omnibox/omnibox_prerender.h b/chrome/browser/android/omnibox/omnibox_prerender.h
index adfe301..eb8e792 100644
--- a/chrome/browser/android/omnibox/omnibox_prerender.h
+++ b/chrome/browser/android/omnibox/omnibox_prerender.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_BROWSER_ANDROID_OMNIBOX_OMNIBOX_PRERENDER_H_
 #define CHROME_BROWSER_ANDROID_OMNIBOX_OMNIBOX_PRERENDER_H_
 
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/strings/string16.h"
 
diff --git a/chrome/browser/android/password_ui_view_android.cc b/chrome/browser/android/password_ui_view_android.cc
index 83f2d87..e26c552 100644
--- a/chrome/browser/android/password_ui_view_android.cc
+++ b/chrome/browser/android/password_ui_view_android.cc
@@ -4,8 +4,8 @@
 
 #include "chrome/browser/android/password_ui_view_android.h"
 
-#include "base/android/jni_helper.h"
 #include "base/android/jni_string.h"
+#include "base/android/jni_weak_ref.h"
 #include "chrome/browser/profiles/profile_manager.h"
 #include "components/autofill/core/common/password_form.h"
 #include "jni/PasswordUIView_jni.h"
diff --git a/chrome/browser/android/password_ui_view_android.h b/chrome/browser/android/password_ui_view_android.h
index 390d21a..68b71bf 100644
--- a/chrome/browser/android/password_ui_view_android.h
+++ b/chrome/browser/android/password_ui_view_android.h
@@ -7,7 +7,7 @@
 
 #include <vector>
 
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/android/scoped_java_ref.h"
 #include "chrome/browser/password_manager/password_store_factory.h"
 #include "chrome/browser/ui/passwords/password_manager_presenter.h"
diff --git a/chrome/browser/android/provider/chrome_browser_provider.cc b/chrome/browser/android/provider/chrome_browser_provider.cc
index f59de09..930f402 100644
--- a/chrome/browser/android/provider/chrome_browser_provider.cc
+++ b/chrome/browser/android/provider/chrome_browser_provider.cc
@@ -20,6 +20,7 @@
 #include "chrome/browser/android/provider/run_on_ui_thread_blocking.h"
 #include "chrome/browser/bookmarks/bookmark_model.h"
 #include "chrome/browser/bookmarks/bookmark_model_factory.h"
+#include "chrome/browser/bookmarks/bookmark_utils.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/favicon/favicon_service.h"
@@ -220,7 +221,7 @@
     if (!node) {
       const BookmarkNode* parent_node = NULL;
       if (parent_id >= 0)
-        parent_node = model->GetNodeByID(parent_id);
+        parent_node = GetBookmarkNodeByID(model, parent_id);
       if (!parent_node)
         parent_node = model->bookmark_bar_node();
 
@@ -255,7 +256,7 @@
 
   static void RunOnUIThread(BookmarkModel* model, const int64 id) {
     DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-    const BookmarkNode* node = model->GetNodeByID(id);
+    const BookmarkNode* node = GetBookmarkNodeByID(model, id);
     if (node && node->parent()) {
       const BookmarkNode* parent_node = node->parent();
       model->Remove(parent_node, parent_node->GetIndexOf(node));
@@ -326,7 +327,7 @@
                             const base::string16& url,
                             const int64 parent_id) {
     DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-    const BookmarkNode* node = model->GetNodeByID(id);
+    const BookmarkNode* node = GetBookmarkNodeByID(model, id);
     if (node) {
       if (node->GetTitle() != title)
         model->SetTitle(node, title);
@@ -339,7 +340,7 @@
 
       if (parent_id >= 0 &&
           (!node->parent() || parent_id != node->parent()->id())) {
-        const BookmarkNode* new_parent = model->GetNodeByID(parent_id);
+        const BookmarkNode* new_parent = GetBookmarkNodeByID(model, parent_id);
 
         if (new_parent)
           model->Move(node, new_parent, 0);
@@ -381,7 +382,7 @@
                             bool* result) {
     DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
     DCHECK(result);
-    *result = model->GetNodeByID(id) != NULL;
+    *result = GetBookmarkNodeByID(model, id) != NULL;
   }
 
  private:
@@ -407,7 +408,7 @@
                             bool *result) {
     DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
     DCHECK(result);
-    const BookmarkNode* node = model->GetNodeByID(id);
+    const BookmarkNode* node = GetBookmarkNodeByID(model, id);
     const BookmarkNode* mobile_node = model->mobile_node();
     while (node && node != mobile_node)
       node = node->parent();
@@ -444,7 +445,7 @@
 
     // Invalid ids are assumed to refer to the Mobile Bookmarks folder.
     const BookmarkNode* parent = parent_id >= 0 ?
-        model->GetNodeByID(parent_id) : model->mobile_node();
+        GetBookmarkNodeByID(model, parent_id) : model->mobile_node();
     DCHECK(parent);
 
     bool in_mobile_bookmarks;
@@ -548,7 +549,7 @@
                             bool get_children,
                             ScopedJavaGlobalRef<jobject>* jnode) {
     DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-    const BookmarkNode* node = model->GetNodeByID(id);
+    const BookmarkNode* node = GetBookmarkNodeByID(model, id);
     if (!node || !jnode)
       return;
 
@@ -670,29 +671,29 @@
                            cancelable_consumer,
                            cancelable_tracker) {}
 
-  chrome::FaviconBitmapResult Run(const GURL& url) {
+  favicon_base::FaviconBitmapResult Run(const GURL& url) {
     RunAsyncRequestOnUIThreadBlocking(
         base::Bind(&FaviconService::GetRawFaviconForURL,
                    base::Unretained(service()),
                    FaviconService::FaviconForURLParams(
                        url,
-                       chrome::FAVICON | chrome::TOUCH_ICON,
+                       favicon_base::FAVICON | favicon_base::TOUCH_ICON,
                        gfx::kFaviconSize),
                    ResourceBundle::GetSharedInstance().GetMaxScaleFactor(),
-                   base::Bind(
-                       &BookmarkIconFetchTask::OnFaviconRetrieved,
-                       base::Unretained(this)),
+                   base::Bind(&BookmarkIconFetchTask::OnFaviconRetrieved,
+                              base::Unretained(this)),
                    cancelable_tracker()));
     return result_;
   }
 
  private:
-  void OnFaviconRetrieved(const chrome::FaviconBitmapResult& bitmap_result) {
+  void OnFaviconRetrieved(
+      const favicon_base::FaviconBitmapResult& bitmap_result) {
     result_ = bitmap_result;
     RequestCompleted();
   }
 
-  chrome::FaviconBitmapResult result_;
+  favicon_base::FaviconBitmapResult result_;
 
   DISALLOW_COPY_AND_ASSIGN(BookmarkIconFetchTask);
 };
@@ -1548,7 +1549,7 @@
                                      profile_,
                                      &favicon_consumer_,
                                      &cancelable_task_tracker_);
-  chrome::FaviconBitmapResult bitmap_result = favicon_task.Run(url);
+  favicon_base::FaviconBitmapResult bitmap_result = favicon_task.Run(url);
 
   if (!bitmap_result.is_valid() || !bitmap_result.bitmap_data.get())
     return ScopedJavaLocalRef<jbyteArray>();
diff --git a/chrome/browser/android/provider/chrome_browser_provider.h b/chrome/browser/android/provider/chrome_browser_provider.h
index 4e6dea4..6510b9e 100644
--- a/chrome/browser/android/provider/chrome_browser_provider.h
+++ b/chrome/browser/android/provider/chrome_browser_provider.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_BROWSER_ANDROID_PROVIDER_CHROME_BROWSER_PROVIDER_H_
 #define CHROME_BROWSER_ANDROID_PROVIDER_CHROME_BROWSER_PROVIDER_H_
 
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/android/scoped_java_ref.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/synchronization/waitable_event.h"
diff --git a/chrome/browser/android/shortcut_helper.cc b/chrome/browser/android/shortcut_helper.cc
index e6189d8..4539402 100644
--- a/chrome/browser/android/shortcut_helper.cc
+++ b/chrome/browser/android/shortcut_helper.cc
@@ -75,8 +75,9 @@
   // TODO(dfalcantara): Try combining with the new BookmarksHandler once its
   //                    rewrite is further along.
   std::vector<int> icon_types;
-  icon_types.push_back(chrome::FAVICON);
-  icon_types.push_back(chrome::TOUCH_PRECOMPOSED_ICON | chrome::TOUCH_ICON);
+  icon_types.push_back(favicon_base::FAVICON);
+  icon_types.push_back(favicon_base::TOUCH_PRECOMPOSED_ICON |
+                       favicon_base::TOUCH_ICON);
   FaviconService* favicon_service = FaviconServiceFactory::GetForProfile(
       profile, Profile::EXPLICIT_ACCESS);
 
@@ -91,7 +92,7 @@
 }
 
 void ShortcutBuilder::FinishAddingShortcut(
-    const chrome::FaviconBitmapResult& bitmap_result) {
+    const favicon_base::FaviconBitmapResult& bitmap_result) {
   base::WorkerPool::PostTask(
       FROM_HERE,
       base::Bind(&ShortcutHelper::AddShortcutInBackground,
@@ -139,7 +140,7 @@
     const GURL& url,
     const base::string16& title,
     ShortcutBuilder::ShortcutType shortcut_type,
-    const chrome::FaviconBitmapResult& bitmap_result) {
+    const favicon_base::FaviconBitmapResult& bitmap_result) {
   DCHECK(base::WorkerPool::RunsTasksOnCurrentThread());
 
   // Grab the average color from the bitmap.
diff --git a/chrome/browser/android/shortcut_helper.h b/chrome/browser/android/shortcut_helper.h
index ad0183d..4be5c30 100644
--- a/chrome/browser/android/shortcut_helper.h
+++ b/chrome/browser/android/shortcut_helper.h
@@ -5,16 +5,16 @@
 #ifndef CHROME_BROWSER_ANDROID_SHORTCUT_HELPER_H_
 #define CHROME_BROWSER_ANDROID_SHORTCUT_HELPER_H_
 
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/basictypes.h"
 #include "base/strings/string16.h"
 #include "base/task/cancelable_task_tracker.h"
 #include "chrome/browser/android/tab_android.h"
 #include "content/public/browser/web_contents_observer.h"
 
-namespace chrome {
+namespace favicon_base {
 struct FaviconBitmapResult;
-}  // namespace chrome
+}  // namespace favicon_base
 
 namespace content {
 class WebContents;
@@ -52,7 +52,8 @@
                                       bool is_apple_mobile_webapp_capable,
                                       const GURL& expected_url);
 
-  void FinishAddingShortcut(const chrome::FaviconBitmapResult& bitmap_result);
+  void FinishAddingShortcut(
+      const favicon_base::FaviconBitmapResult& bitmap_result);
 
   // WebContentsObserver
   virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
@@ -84,7 +85,7 @@
       const GURL& url,
       const base::string16& title,
       ShortcutBuilder::ShortcutType shortcut_type,
-      const chrome::FaviconBitmapResult& bitmap_result);
+      const favicon_base::FaviconBitmapResult& bitmap_result);
 
   // Registers JNI hooks.
   static bool RegisterShortcutHelper(JNIEnv* env);
diff --git a/chrome/browser/android/signin/signin_manager_android.cc b/chrome/browser/android/signin/signin_manager_android.cc
index b2cb7bd..43af5fa 100644
--- a/chrome/browser/android/signin/signin_manager_android.cc
+++ b/chrome/browser/android/signin/signin_manager_android.cc
@@ -21,9 +21,9 @@
 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
 #include "chrome/browser/signin/signin_manager_factory.h"
 #include "chrome/common/pref_names.h"
-#include "chrome/common/profile_management_switches.h"
 #include "components/signin/core/browser/profile_oauth2_token_service.h"
 #include "components/signin/core/browser/signin_manager.h"
+#include "components/signin/core/common/profile_management_switches.h"
 #include "jni/SigninManager_jni.h"
 
 #if defined(ENABLE_CONFIGURATION_POLICY)
diff --git a/chrome/browser/android/tab_android.cc b/chrome/browser/android/tab_android.cc
index e797101..773d1f0 100644
--- a/chrome/browser/android/tab_android.cc
+++ b/chrome/browser/android/tab_android.cc
@@ -14,7 +14,6 @@
 #include "chrome/browser/content_settings/tab_specific_content_settings.h"
 #include "chrome/browser/google/google_url_tracker.h"
 #include "chrome/browser/google/google_util.h"
-#include "chrome/browser/infobars/infobar_container.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/prerender/prerender_contents.h"
 #include "chrome/browser/prerender/prerender_manager.h"
@@ -36,6 +35,7 @@
 #include "chrome/browser/ui/toolbar/toolbar_model_impl.h"
 #include "chrome/common/net/url_fixer_upper.h"
 #include "chrome/common/url_constants.h"
+#include "components/infobars/core/infobar_container.h"
 #include "content/public/browser/android/content_view_core.h"
 #include "content/public/browser/navigation_entry.h"
 #include "content/public/browser/notification_service.h"
diff --git a/chrome/browser/android/tab_android.h b/chrome/browser/android/tab_android.h
index e8ea581..1727afb 100644
--- a/chrome/browser/android/tab_android.h
+++ b/chrome/browser/android/tab_android.h
@@ -7,7 +7,7 @@
 
 #include <jni.h>
 
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/callback_forward.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/strings/string16.h"
diff --git a/chrome/browser/app_controller_mac.mm b/chrome/browser/app_controller_mac.mm
index 6e113ad..a4fa0f5 100644
--- a/chrome/browser/app_controller_mac.mm
+++ b/chrome/browser/app_controller_mac.mm
@@ -74,8 +74,8 @@
 #include "chrome/common/extensions/extension_constants.h"
 #include "chrome/common/mac/app_mode_common.h"
 #include "chrome/common/pref_names.h"
-#include "chrome/common/profile_management_switches.h"
 #include "chrome/common/url_constants.h"
+#include "components/signin/core/common/profile_management_switches.h"
 #include "components/signin/core/browser/signin_manager.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/download_manager.h"
diff --git a/chrome/browser/apps/app_browsertest.cc b/chrome/browser/apps/app_browsertest.cc
index 1fd3e70..34591b8 100644
--- a/chrome/browser/apps/app_browsertest.cc
+++ b/chrome/browser/apps/app_browsertest.cc
@@ -652,10 +652,18 @@
       << message_;
 }
 
+// Tests that launch data is sent through when the file has unknown extension
+// but the MIME type can be sniffed and the sniffed type matches.
+IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, LaunchWithSniffableType) {
+  SetCommandLineArg("platform_apps/launch_files/test.unknownextension");
+  ASSERT_TRUE(RunPlatformAppTest(
+      "platform_apps/launch_file_by_extension_and_type")) << message_;
+}
+
 // Tests that launch data is sent through with the MIME type set to
 // application/octet-stream if the file MIME type cannot be read.
 IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, LaunchNoType) {
-  SetCommandLineArg("platform_apps/launch_files/test.unknownextension");
+  SetCommandLineArg("platform_apps/launch_files/test_binary.unknownextension");
   ASSERT_TRUE(RunPlatformAppTest(
       "platform_apps/launch_application_octet_stream")) << message_;
 }
@@ -1017,8 +1025,8 @@
   ExtensionPrefs* extension_prefs = ExtensionPrefs::Get(browser()->profile());
 
   // Clear the registered events to ensure they are updated.
-  extensions::ExtensionSystem::Get(browser()->profile())->event_router()->
-      SetRegisteredEvents(extension->id(), std::set<std::string>());
+  extensions::EventRouter::Get(browser()->profile())
+      ->SetRegisteredEvents(extension->id(), std::set<std::string>());
 
   DictionaryPrefUpdate update(extension_prefs->pref_service(),
                               extensions::pref_names::kExtensions);
@@ -1196,7 +1204,7 @@
 
   // Wait until the file manager has had a chance to register its listener
   // for the launch event.
-  EventRouter* router = ExtensionSystem::Get(incognito_profile)->event_router();
+  EventRouter* router = EventRouter::Get(incognito_profile);
   ASSERT_TRUE(router != NULL);
   while (!router->ExtensionHasEventListener(
       file_manager->id(), app_runtime::OnLaunched::kEventName)) {
diff --git a/chrome/browser/apps/ephemeral_app_browsertest.cc b/chrome/browser/apps/ephemeral_app_browsertest.cc
index 67c52e5..1f895c6 100644
--- a/chrome/browser/apps/ephemeral_app_browsertest.cc
+++ b/chrome/browser/apps/ephemeral_app_browsertest.cc
@@ -204,8 +204,7 @@
 
   // Send a fake alarm event to the app and verify that a response is
   // received.
-  EventRouter* event_router =
-      ExtensionSystem::Get(browser()->profile())->event_router();
+  EventRouter* event_router = EventRouter::Get(browser()->profile());
   ASSERT_TRUE(event_router);
 
   ExtensionTestMessageListener alarm_received_listener("alarm_received", false);
@@ -278,7 +277,7 @@
       content::Source<extensions::CrxInstaller>(crx_installer));
   ExtensionService* service =
       ExtensionSystem::Get(browser()->profile())->extension_service();
-  EXPECT_TRUE(service->UpdateExtension(app_id, app_v2_path, true, GURL(),
+  EXPECT_TRUE(service->UpdateExtension(app_id, app_v2_path, true,
                                        &crx_installer));
   windowed_observer.Wait();
 
diff --git a/chrome/browser/apps/ephemeral_app_launcher.cc b/chrome/browser/apps/ephemeral_app_launcher.cc
index fa953d8..4f97074 100644
--- a/chrome/browser/apps/ephemeral_app_launcher.cc
+++ b/chrome/browser/apps/ephemeral_app_launcher.cc
@@ -137,7 +137,8 @@
 EphemeralAppLauncher::~EphemeralAppLauncher() {}
 
 void EphemeralAppLauncher::StartObserving() {
-  registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
+  registrar_.Add(this,
+                 chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
                  content::Source<Profile>(profile()->GetOriginalProfile()));
 }
 
@@ -254,7 +255,7 @@
   // chrome::NOTIFICATION_EXTENSION_INSTALLED, but this is broadcasted before
   // ExtensionService has added the extension to its list of installed
   // extensions and is too early to launch the app. Instead, we will launch at
-  // chrome::NOTIFICATION_EXTENSION_LOADED.
+  // chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED.
   // TODO(tmdiep): Refactor extensions/WebstoreInstaller or
   // WebstoreStandaloneInstaller to support this cleanly.
 }
@@ -269,7 +270,7 @@
     const content::NotificationSource& source,
     const content::NotificationDetails& details) {
   switch (type) {
-    case chrome::NOTIFICATION_EXTENSION_LOADED: {
+    case chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED: {
       const extensions::Extension* extension =
           content::Details<const extensions::Extension>(details).ptr();
       DCHECK(extension);
diff --git a/chrome/browser/apps/web_view_browsertest.cc b/chrome/browser/apps/web_view_browsertest.cc
index 615ac2f..ababfa9 100644
--- a/chrome/browser/apps/web_view_browsertest.cc
+++ b/chrome/browser/apps/web_view_browsertest.cc
@@ -725,6 +725,13 @@
              NO_TEST_SERVER);
 }
 
+IN_PROC_BROWSER_TEST_F(WebViewTest,
+                       Shim_TestInlineScriptFromAccessibleResources) {
+  TestHelper("testInlineScriptFromAccessibleResources",
+             "web_view/shim",
+             NO_TEST_SERVER);
+}
+
 IN_PROC_BROWSER_TEST_F(WebViewTest, Shim_TestInvalidChromeExtensionURL) {
   TestHelper("testInvalidChromeExtensionURL", "web_view/shim", NO_TEST_SERVER);
 }
diff --git a/chrome/browser/autocomplete/autocomplete_browsertest.cc b/chrome/browser/autocomplete/autocomplete_browsertest.cc
index 321a482..3246da5 100644
--- a/chrome/browser/autocomplete/autocomplete_browsertest.cc
+++ b/chrome/browser/autocomplete/autocomplete_browsertest.cc
@@ -142,8 +142,7 @@
     omnibox_view->model()->SetInputInProgress(true);
     autocomplete_controller->Start(AutocompleteInput(
         base::ASCIIToUTF16("chrome"), base::string16::npos, base::string16(),
-        GURL(), AutocompleteInput::NTP, true, false, true,
-        AutocompleteInput::SYNCHRONOUS_MATCHES));
+        GURL(), AutocompleteInput::NTP, true, false, true, false));
 
     EXPECT_TRUE(autocomplete_controller->done());
     EXPECT_FALSE(location_bar->GetDestinationURL().is_valid());
diff --git a/chrome/browser/autocomplete/autocomplete_classifier.cc b/chrome/browser/autocomplete/autocomplete_classifier.cc
index 99dafbf..4f49844 100644
--- a/chrome/browser/autocomplete/autocomplete_classifier.cc
+++ b/chrome/browser/autocomplete/autocomplete_classifier.cc
@@ -45,7 +45,7 @@
   controller_->Start(AutocompleteInput(
       text, base::string16::npos, base::string16(), GURL(),
       page_classification, true, prefer_keyword,
-      allow_exact_keyword_match, AutocompleteInput::BEST_MATCH));
+      allow_exact_keyword_match, false));
   DCHECK(controller_->done());
   const AutocompleteResult& result = controller_->result();
   if (result.empty()) {
diff --git a/chrome/browser/autocomplete/autocomplete_controller.cc b/chrome/browser/autocomplete/autocomplete_controller.cc
index 08d70ac..0f83d16 100644
--- a/chrome/browser/autocomplete/autocomplete_controller.cc
+++ b/chrome/browser/autocomplete/autocomplete_controller.cc
@@ -211,8 +211,7 @@
 
 void AutocompleteController::Start(const AutocompleteInput& input) {
   const base::string16 old_input_text(input_.text());
-  const AutocompleteInput::MatchesRequested old_matches_requested =
-      input_.matches_requested();
+  const bool old_want_asynchronous_matches = input_.want_asynchronous_matches();
   input_ = input;
 
   // See if we can avoid rerunning autocomplete when the query hasn't changed
@@ -225,7 +224,7 @@
   // NOTE: This comes after constructing |input_| above since that construction
   // can change the text string (e.g. by stripping off a leading '?').
   const bool minimal_changes = (input_.text() == old_input_text) &&
-      (input_.matches_requested() == old_matches_requested);
+      (input_.want_asynchronous_matches() == old_want_asynchronous_matches);
 
   expire_timer_.Stop();
   stop_timer_.Stop();
@@ -246,7 +245,7 @@
     else
       (*i)->Start(input_, minimal_changes);
 
-    if (input.matches_requested() != AutocompleteInput::ALL_MATCHES)
+    if (!input.want_asynchronous_matches())
       DCHECK((*i)->done());
     base::TimeTicks provider_end_time = base::TimeTicks::Now();
     std::string name = std::string("Omnibox.ProviderTime.") + (*i)->GetName();
@@ -255,8 +254,7 @@
     counter->Add(static_cast<int>(
         (provider_end_time - provider_start_time).InMilliseconds()));
   }
-  if (input.matches_requested() == AutocompleteInput::ALL_MATCHES &&
-      (input.text().length() < 6)) {
+  if (input.want_asynchronous_matches() && (input.text().length() < 6)) {
     base::TimeTicks end_time = base::TimeTicks::Now();
     std::string name = "Omnibox.QueryTime." + base::IntToString(
         input.text().length());
diff --git a/chrome/browser/autocomplete/autocomplete_input.cc b/chrome/browser/autocomplete/autocomplete_input.cc
index 4672f0c..e1c9d71 100644
--- a/chrome/browser/autocomplete/autocomplete_input.cc
+++ b/chrome/browser/autocomplete/autocomplete_input.cc
@@ -36,7 +36,7 @@
       prevent_inline_autocomplete_(false),
       prefer_keyword_(false),
       allow_exact_keyword_match_(true),
-      matches_requested_(ALL_MATCHES) {
+      want_asynchronous_matches_(true) {
 }
 
 AutocompleteInput::AutocompleteInput(
@@ -48,14 +48,14 @@
     bool prevent_inline_autocomplete,
     bool prefer_keyword,
     bool allow_exact_keyword_match,
-    MatchesRequested matches_requested)
+    bool want_asynchronous_matches)
     : cursor_position_(cursor_position),
       current_url_(current_url),
       current_page_classification_(current_page_classification),
       prevent_inline_autocomplete_(prevent_inline_autocomplete),
       prefer_keyword_(prefer_keyword),
       allow_exact_keyword_match_(allow_exact_keyword_match),
-      matches_requested_(matches_requested) {
+      want_asynchronous_matches_(want_asynchronous_matches) {
   DCHECK(cursor_position <= text.length() ||
          cursor_position == base::string16::npos)
       << "Text: '" << text << "', cp: " << cursor_position;
@@ -538,5 +538,5 @@
   prevent_inline_autocomplete_ = false;
   prefer_keyword_ = false;
   allow_exact_keyword_match_ = false;
-  matches_requested_ = ALL_MATCHES;
+  want_asynchronous_matches_ = true;
 }
diff --git a/chrome/browser/autocomplete/autocomplete_input.h b/chrome/browser/autocomplete/autocomplete_input.h
index 1b8b8c6..a742126 100644
--- a/chrome/browser/autocomplete/autocomplete_input.h
+++ b/chrome/browser/autocomplete/autocomplete_input.h
@@ -28,23 +28,6 @@
     FORCED_QUERY,   // Input forced to be a query by an initial '?'
   };
 
-  // Enumeration of the possible match query types. Callers who only need some
-  // of the matches for a particular input can get answers more quickly by
-  // specifying that upfront.
-  enum MatchesRequested {
-    // Only the best match in the whole result set matters.  Providers should at
-    // most return synchronously-available matches, and if possible do even less
-    // work, so that it's safe to ask for these repeatedly in the course of one
-    // higher-level "synchronous" query.
-    BEST_MATCH,
-
-    // Only synchronous matches should be returned.
-    SYNCHRONOUS_MATCHES,
-
-    // All matches should be fetched.
-    ALL_MATCHES,
-  };
-
   // The type of page currently displayed.
   // Note: when adding an element to this enum, please add it at the end
   // and update omnibox_event.proto::PageClassification and
@@ -141,7 +124,7 @@
                     bool prevent_inline_autocomplete,
                     bool prefer_keyword,
                     bool allow_exact_keyword_match,
-                    MatchesRequested matches_requested);
+                    bool want_asynchronous_matches);
   ~AutocompleteInput();
 
   // If type is |FORCED_QUERY| and |text| starts with '?', it is removed.
@@ -237,8 +220,9 @@
   // keyword search, even if the input is "<keyword> <search string>".
   bool allow_exact_keyword_match() const { return allow_exact_keyword_match_; }
 
-  // See description of enum for details.
-  MatchesRequested matches_requested() const { return matches_requested_; }
+  // Returns whether providers should be allowed to make asynchronous requests
+  // when processing this input.
+  bool want_asynchronous_matches() const { return want_asynchronous_matches_; }
 
   // Resets all internal variables to the null-constructed state.
   void Clear();
@@ -259,7 +243,7 @@
   bool prevent_inline_autocomplete_;
   bool prefer_keyword_;
   bool allow_exact_keyword_match_;
-  MatchesRequested matches_requested_;
+  bool want_asynchronous_matches_;
 };
 
 #endif  // CHROME_BROWSER_AUTOCOMPLETE_AUTOCOMPLETE_INPUT_H_
diff --git a/chrome/browser/autocomplete/autocomplete_input_unittest.cc b/chrome/browser/autocomplete/autocomplete_input_unittest.cc
index bec7df5..5de7e57 100644
--- a/chrome/browser/autocomplete/autocomplete_input_unittest.cc
+++ b/chrome/browser/autocomplete/autocomplete_input_unittest.cc
@@ -128,7 +128,7 @@
     AutocompleteInput input(input_cases[i].input, base::string16::npos,
                             base::string16(), GURL(),
                             AutocompleteInput::INVALID_SPEC, true, false, true,
-                            AutocompleteInput::ALL_MATCHES);
+                            true);
     EXPECT_EQ(input_cases[i].type, input.type());
   }
 }
@@ -157,7 +157,7 @@
     AutocompleteInput input(input_cases[i].input, base::string16::npos,
                             ASCIIToUTF16("com"), GURL(),
                             AutocompleteInput::INVALID_SPEC, true, false, true,
-                            AutocompleteInput::ALL_MATCHES);
+                            true);
     EXPECT_EQ(input_cases[i].type, input.type());
     if (input_cases[i].type == AutocompleteInput::URL)
       EXPECT_EQ(input_cases[i].spec, input.canonicalized_url().spec());
@@ -170,7 +170,7 @@
   AutocompleteInput input(base::WideToUTF16(L"\uff65@s"), base::string16::npos,
                           base::string16(), GURL(),
                           AutocompleteInput::INVALID_SPEC, true, false,
-                          true, AutocompleteInput::ALL_MATCHES);
+                          true, true);
 }
 
 TEST(AutocompleteInputTest, ParseForEmphasizeComponent) {
@@ -214,7 +214,7 @@
     AutocompleteInput input(input_cases[i].input, base::string16::npos,
                             base::string16(), GURL(),
                             AutocompleteInput::INVALID_SPEC, true,
-                            false, true, AutocompleteInput::ALL_MATCHES);
+                            false, true, true);
     EXPECT_EQ(input_cases[i].scheme.begin, scheme.begin);
     EXPECT_EQ(input_cases[i].scheme.len, scheme.len);
     EXPECT_EQ(input_cases[i].host.begin, host.begin);
@@ -253,7 +253,7 @@
                             input_cases[i].cursor_position,
                             base::string16(), GURL(),
                             AutocompleteInput::INVALID_SPEC,
-                            true, false, true, AutocompleteInput::ALL_MATCHES);
+                            true, false, true, true);
     EXPECT_EQ(input_cases[i].normalized_input, input.text());
     EXPECT_EQ(input_cases[i].normalized_cursor_position,
               input.cursor_position());
diff --git a/chrome/browser/autocomplete/autocomplete_provider_unittest.cc b/chrome/browser/autocomplete/autocomplete_provider_unittest.cc
index 96977f3..782ef92 100644
--- a/chrome/browser/autocomplete/autocomplete_provider_unittest.cc
+++ b/chrome/browser/autocomplete/autocomplete_provider_unittest.cc
@@ -96,7 +96,7 @@
       3, 1, AutocompleteMatchType::SEARCH_SUGGEST,
       TemplateURLRef::SearchTermsArgs(base::ASCIIToUTF16("query")));
 
-  if (input.matches_requested() == AutocompleteInput::ALL_MATCHES) {
+  if (input.want_asynchronous_matches()) {
     done_ = false;
     base::MessageLoop::current()->PostTask(
         FROM_HERE, base::Bind(&TestProvider::Run, this));
@@ -403,8 +403,7 @@
   result_.Reset();
   controller_->Start(AutocompleteInput(
       query, base::string16::npos, base::string16(), GURL(),
-      AutocompleteInput::INVALID_SPEC, true, false, true,
-      AutocompleteInput::ALL_MATCHES));
+      AutocompleteInput::INVALID_SPEC, true, false, true, true));
 
   if (!controller_->done())
     // The message loop will terminate when all autocomplete input has been
@@ -423,7 +422,7 @@
   controller_->Start(AutocompleteInput(
       base::ASCIIToUTF16("k test"), base::string16::npos, base::string16(),
       GURL(), AutocompleteInput::INVALID_SPEC, true, false,
-      allow_exact_keyword_match, AutocompleteInput::SYNCHRONOUS_MATCHES));
+      allow_exact_keyword_match, false));
   EXPECT_TRUE(controller_->done());
   EXPECT_EQ(AutocompleteProvider::TYPE_SEARCH,
       controller_->result().default_match()->provider->type());
diff --git a/chrome/browser/autocomplete/autocomplete_result.cc b/chrome/browser/autocomplete/autocomplete_result.cc
index 044b890..b4637f6 100644
--- a/chrome/browser/autocomplete/autocomplete_result.cc
+++ b/chrome/browser/autocomplete/autocomplete_result.cc
@@ -96,7 +96,6 @@
 
 // static
 const size_t AutocompleteResult::kMaxMatches = 6;
-const int AutocompleteResult::kLowestDefaultScore = 1200;
 
 void AutocompleteResult::Selection::Clear() {
   destination_url = GURL();
@@ -178,22 +177,10 @@
   DedupMatchesByDestination(input.current_page_classification(), true,
                             &matches_);
 
-  // Find the top match before possibly applying demotions.
-  if (!matches_.empty())
-    std::partial_sort(matches_.begin(), matches_.begin() +  1, matches_.end(),
-                      &AutocompleteMatch::MoreRelevant);
-  // Don't demote the top match if applicable.
-  OmniboxFieldTrial::UndemotableTopMatchTypes undemotable_top_types =
-      OmniboxFieldTrial::GetUndemotableTopTypes(
-          input.current_page_classification());
-  const bool preserve_top_match = !matches_.empty() &&
-      (undemotable_top_types.count(matches_.begin()->type) != 0);
-
   // Sort and trim to the most relevant kMaxMatches matches.
   size_t max_num_matches = std::min(kMaxMatches, matches_.size());
   CompareWithDemoteByType comparing_object(input.current_page_classification());
-  std::sort(matches_.begin() + (preserve_top_match ? 1 : 0), matches_.end(),
-            comparing_object);
+  std::sort(matches_.begin(), matches_.end(), comparing_object);
   if (!matches_.empty() && !matches_.begin()->allowed_to_be_default_match) {
     // Top match is not allowed to be the default match.  Find the most
     // relevant legal match and shift it to the front.
@@ -390,8 +377,6 @@
   DCHECK_EQ(AutocompleteMatch::SanitizeString(match.contents), match.contents);
   DCHECK_EQ(AutocompleteMatch::SanitizeString(match.description),
             match.description);
-  // GetUndemotableTopTypes() is not used here because it's done in
-  // SortAndCull(), and we depend on SortAndCull() to be called afterwards.
   CompareWithDemoteByType comparing_object(page_classification);
   ACMatches::iterator insertion_point =
       std::upper_bound(begin(), end(), match, comparing_object);
diff --git a/chrome/browser/autocomplete/autocomplete_result.h b/chrome/browser/autocomplete/autocomplete_result.h
index 4fe581c..f79b9ab 100644
--- a/chrome/browser/autocomplete/autocomplete_result.h
+++ b/chrome/browser/autocomplete/autocomplete_result.h
@@ -60,10 +60,6 @@
   // Max number of matches we'll show from the various providers.
   static const size_t kMaxMatches;
 
-  // The lowest score a match can have and still potentially become the default
-  // match for the result set.
-  static const int kLowestDefaultScore;
-
   AutocompleteResult();
   ~AutocompleteResult();
 
diff --git a/chrome/browser/autocomplete/autocomplete_result_unittest.cc b/chrome/browser/autocomplete/autocomplete_result_unittest.cc
index 24dd96e..cee2750 100644
--- a/chrome/browser/autocomplete/autocomplete_result_unittest.cc
+++ b/chrome/browser/autocomplete/autocomplete_result_unittest.cc
@@ -177,7 +177,7 @@
   AutocompleteInput input(base::ASCIIToUTF16("a"), base::string16::npos,
                           base::string16(), GURL(),
                           AutocompleteInput::INVALID_SPEC, false, false, false,
-                          AutocompleteInput::ALL_MATCHES);
+                          true);
 
   ACMatches last_matches;
   PopulateAutocompleteMatches(last, last_size, &last_matches);
@@ -213,7 +213,7 @@
   AutocompleteInput input(base::ASCIIToUTF16("a"), base::string16::npos,
                           base::string16(), GURL(),
                           AutocompleteInput::INVALID_SPEC, false, false, false,
-                          AutocompleteInput::ALL_MATCHES);
+                          true);
   matches.push_back(match);
   r1.AppendMatches(matches);
   r1.SortAndCull(input, test_util_.profile());
@@ -296,7 +296,7 @@
   AutocompleteInput input(base::string16(), base::string16::npos,
                           base::string16(), GURL(),
                           AutocompleteInput::INVALID_SPEC, false, false, false,
-                          AutocompleteInput::ALL_MATCHES);
+                          true);
   result.SortAndCull(input, test_util_.profile());
 
   // Of the two results with the same non-empty destination URL, the
@@ -342,7 +342,7 @@
   AutocompleteInput input(base::string16(), base::string16::npos,
                           base::string16(), GURL(),
                           AutocompleteInput::INVALID_SPEC, false, false, false,
-                          AutocompleteInput::ALL_MATCHES);
+                          true);
   result.SortAndCull(input, test_util_.profile());
 
   // We expect the 3rd and 4th results to be removed.
@@ -394,7 +394,7 @@
   AutocompleteInput input(base::string16(), base::string16::npos,
                           base::string16(), GURL(),
                           AutocompleteInput::INVALID_SPEC, false, false, false,
-                          AutocompleteInput::ALL_MATCHES);
+                          true);
   result.SortAndCull(input, test_util_.profile());
 
   // Expect 3 unique results after SortAndCull().
@@ -448,7 +448,7 @@
   AutocompleteInput input(base::string16(), base::string16::npos,
                           base::string16(), GURL(),
                           AutocompleteInput::HOME_PAGE, false, false, false,
-                          AutocompleteInput::ALL_MATCHES);
+                          true);
   result.SortAndCull(input, test_util_.profile());
 
   // Check the new ordering.  The history-title results should be omitted.
@@ -463,57 +463,6 @@
             result.match_at(2)->destination_url.spec());
 }
 
-TEST_F(AutocompleteResultTest, SortAndCullWithUndemotableTypes) {
-  // Add some matches.
-  ACMatches matches(3);
-  matches[0].destination_url = GURL("http://top-history-url/");
-  matches[0].relevance = 1400;
-  matches[0].allowed_to_be_default_match = true;
-  matches[0].type = AutocompleteMatchType::HISTORY_URL;
-  matches[1].destination_url = GURL("http://history-url2/");
-  matches[1].relevance = 1300;
-  matches[1].allowed_to_be_default_match = true;
-  matches[1].type = AutocompleteMatchType::HISTORY_URL;
-  matches[2].destination_url = GURL("http://search-what-you-typed/");
-  matches[2].relevance = 1200;
-  matches[2].allowed_to_be_default_match = true;
-  matches[2].type = AutocompleteMatchType::SEARCH_WHAT_YOU_TYPED;
-
-  // Add a rule demoting history-url, but don't demote the top match.
-  {
-    std::map<std::string, std::string> params;
-    // 3 == HOME_PAGE
-    params[std::string(OmniboxFieldTrial::kDemoteByTypeRule) + ":3:*"] =
-        "1:50";
-    params[std::string(OmniboxFieldTrial::kUndemotableTopTypeRule) + ":3:*"] =
-        "1,5";
-    ASSERT_TRUE(chrome_variations::AssociateVariationParams(
-        OmniboxFieldTrial::kBundledExperimentFieldTrialName, "B", params));
-  }
-  base::FieldTrialList::CreateFieldTrial(
-      OmniboxFieldTrial::kBundledExperimentFieldTrialName, "B");
-
-  AutocompleteResult result;
-  result.AppendMatches(matches);
-  AutocompleteInput input(base::string16(), base::string16::npos,
-                          base::string16(), GURL(),
-                          AutocompleteInput::HOME_PAGE, false, false, false,
-                          AutocompleteInput::ALL_MATCHES);
-  result.SortAndCull(input, test_util_.profile());
-
-  // Check the new ordering.  The first history-url result should not be
-  // demoted, but the second result should be.
-  // We cannot check relevance scores because the matches are sorted by
-  // demoted relevance but the actual relevance scores are not modified.
-  ASSERT_EQ(3u, result.size());
-  EXPECT_EQ("http://top-history-url/",
-            result.match_at(0)->destination_url.spec());
-  EXPECT_EQ("http://search-what-you-typed/",
-            result.match_at(1)->destination_url.spec());
-  EXPECT_EQ("http://history-url2/",
-            result.match_at(2)->destination_url.spec());
-}
-
 TEST_F(AutocompleteResultTest, SortAndCullWithMatchDupsAndDemotionsByType) {
   // Add some matches.
   ACMatches matches;
@@ -544,7 +493,7 @@
     AutocompleteInput input(
         base::string16(), base::string16::npos, base::string16(), GURL(),
         AutocompleteInput::INSTANT_NTP_WITH_FAKEBOX_AS_STARTING_FOCUS, false,
-        false, false, AutocompleteInput::ALL_MATCHES);
+        false, false, true);
     result.SortAndCull(input, test_util_.profile());
 
     // The NAVSUGGEST dup-url stay above search-url since the navsuggest
@@ -582,7 +531,7 @@
     AutocompleteInput input(base::string16(), base::string16::npos,
                             base::string16(), GURL(),
                             AutocompleteInput::HOME_PAGE, false, false, false,
-                            AutocompleteInput::ALL_MATCHES);
+                            true);
     result.SortAndCull(input, test_util_.profile());
     AssertResultMatches(result, data, 4);
   }
@@ -598,7 +547,7 @@
     AutocompleteInput input(base::string16(), base::string16::npos,
                             base::string16(), GURL(),
                             AutocompleteInput::HOME_PAGE, false, false, false,
-                            AutocompleteInput::ALL_MATCHES);
+                            true);
     result.SortAndCull(input, test_util_.profile());
     ASSERT_EQ(4U, result.size());
     EXPECT_EQ("http://c/", result.match_at(0)->destination_url.spec());
diff --git a/chrome/browser/autocomplete/bookmark_provider.cc b/chrome/browser/autocomplete/bookmark_provider.cc
index fb862fc..de8ea9d 100644
--- a/chrome/browser/autocomplete/bookmark_provider.cc
+++ b/chrome/browser/autocomplete/bookmark_provider.cc
@@ -15,12 +15,13 @@
 #include "chrome/browser/autocomplete/url_prefix.h"
 #include "chrome/browser/bookmarks/bookmark_model.h"
 #include "chrome/browser/bookmarks/bookmark_model_factory.h"
-#include "chrome/browser/bookmarks/bookmark_title_match.h"
+#include "chrome/browser/omnibox/omnibox_field_trial.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/common/pref_names.h"
+#include "components/bookmarks/core/browser/bookmark_match.h"
 #include "net/base/net_util.h"
 
-typedef std::vector<BookmarkTitleMatch> TitleMatches;
+typedef std::vector<BookmarkMatch> BookmarkMatches;
 
 // BookmarkProvider ------------------------------------------------------------
 
@@ -29,7 +30,8 @@
     Profile* profile)
     : AutocompleteProvider(listener, profile,
                            AutocompleteProvider::TYPE_BOOKMARK),
-      bookmark_model_(NULL) {
+      bookmark_model_(NULL),
+      score_using_url_matches_(OmniboxFieldTrial::BookmarksIndexURLsValue()) {
   if (profile) {
     bookmark_model_ = BookmarkModelFactory::GetForProfile(profile);
     languages_ = profile_->GetPrefs()->GetString(prefs::kAcceptLanguages);
@@ -43,28 +45,25 @@
   matches_.clear();
 
   if (input.text().empty() ||
-      ((input.type() != AutocompleteInput::UNKNOWN) &&
-       (input.type() != AutocompleteInput::QUERY)))
+      (input.type() == AutocompleteInput::FORCED_QUERY))
     return;
 
-  DoAutocomplete(input,
-                 input.matches_requested() == AutocompleteInput::BEST_MATCH);
+  DoAutocomplete(input);
 }
 
 BookmarkProvider::~BookmarkProvider() {}
 
-void BookmarkProvider::DoAutocomplete(const AutocompleteInput& input,
-                                      bool best_match) {
+void BookmarkProvider::DoAutocomplete(const AutocompleteInput& input) {
   // We may not have a bookmark model for some unit tests.
   if (!bookmark_model_)
     return;
 
-  TitleMatches matches;
+  BookmarkMatches matches;
   // Retrieve enough bookmarks so that we have a reasonable probability of
   // suggesting the one that the user desires.
   const size_t kMaxBookmarkMatches = 50;
 
-  // GetBookmarksWithTitlesMatching returns bookmarks matching the user's
+  // GetBookmarksMatching returns bookmarks matching the user's
   // search terms using the following rules:
   //  - The search text is broken up into search terms. Each term is searched
   //    for separately.
@@ -79,42 +78,31 @@
   //  - Multiple terms enclosed in quotes will require those exact words in that
   //    exact order to match.
   //
-  // Note: GetBookmarksWithTitlesMatching() will never return a match span
-  // greater than the length of the title against which it is being matched,
-  // nor can those spans ever overlap because the match spans are coalesced
-  // for all matched terms.
-  //
-  // Please refer to the code for BookmarkIndex::GetBookmarksWithTitlesMatching
-  // for complete details of how title searches are performed against the user's
+  // Please refer to the code for BookmarkIndex::GetBookmarksMatching for
+  // complete details of how searches are performed against the user's
   // bookmarks.
-  bookmark_model_->GetBookmarksWithTitlesMatching(input.text(),
-                                                  kMaxBookmarkMatches,
-                                                  &matches);
+  bookmark_model_->GetBookmarksMatching(input.text(),
+                                        kMaxBookmarkMatches,
+                                        &matches);
   if (matches.empty())
     return;  // There were no matches.
   AutocompleteInput fixed_up_input(input);
   FixupUserInput(&fixed_up_input);
-  for (TitleMatches::const_iterator i = matches.begin(); i != matches.end();
+  for (BookmarkMatches::const_iterator i = matches.begin(); i != matches.end();
        ++i) {
     // Create and score the AutocompleteMatch. If its score is 0 then the
     // match is discarded.
-    AutocompleteMatch match(TitleMatchToACMatch(input, fixed_up_input, *i));
+    AutocompleteMatch match(BookmarkMatchToACMatch(input, fixed_up_input, *i));
     if (match.relevance > 0)
       matches_.push_back(match);
   }
 
   // Sort and clip the resulting matches.
-  size_t max_matches = best_match ? 1 : AutocompleteProvider::kMaxMatches;
-  if (matches_.size() > max_matches) {
-    std::partial_sort(matches_.begin(),
-                      matches_.begin() + max_matches,
-                      matches_.end(),
-                      AutocompleteMatch::MoreRelevant);
-    matches_.resize(max_matches);
-  } else {
-    std::sort(matches_.begin(), matches_.end(),
-              AutocompleteMatch::MoreRelevant);
-  }
+  size_t num_matches =
+      std::min(matches_.size(), AutocompleteProvider::kMaxMatches);
+  std::partial_sort(matches_.begin(), matches_.begin() + num_matches,
+                    matches_.end(), AutocompleteMatch::MoreRelevant);
+  matches_.resize(num_matches);
 }
 
 namespace {
@@ -122,12 +110,8 @@
 // for_each helper functor that calculates a match factor for each query term
 // when calculating the final score.
 //
-// Calculate a 'factor' from 0.0 to 1.0 based on 1) how much of the bookmark's
-// title the term matches, and 2) where the match is positioned within the
-// bookmark's title. A full length match earns a 1.0. A half-length match earns
-// at most a 0.5 and at least a 0.25. A single character match against a title
-// that is 100 characters long where the match is at the first character will
-// earn a 0.01 and at the last character will earn a 0.0001.
+// Calculate a 'factor' from 0 to the bookmark's title length for a match
+// based on 1) how many characters match and 2) where the match is positioned.
 class ScoringFunctor {
  public:
   // |title_length| is the length of the bookmark title against which this
@@ -137,9 +121,9 @@
         scoring_factor_(0.0) {
   }
 
-  void operator()(const Snippet::MatchPosition& match) {
+  void operator()(const query_parser::Snippet::MatchPosition& match) {
     double term_length = static_cast<double>(match.second - match.first);
-    scoring_factor_ += term_length / title_length_ *
+    scoring_factor_ += term_length *
         (title_length_ - match.first) / title_length_;
   }
 
@@ -152,32 +136,44 @@
 
 }  // namespace
 
-AutocompleteMatch BookmarkProvider::TitleMatchToACMatch(
+AutocompleteMatch BookmarkProvider::BookmarkMatchToACMatch(
     const AutocompleteInput& input,
     const AutocompleteInput& fixed_up_input,
-    const BookmarkTitleMatch& title_match) {
+    const BookmarkMatch& bookmark_match) {
   // The AutocompleteMatch we construct is non-deletable because the only
   // way to support this would be to delete the underlying bookmark, which is
   // unlikely to be what the user intends.
   AutocompleteMatch match(this, 0, false,
                           AutocompleteMatchType::BOOKMARK_TITLE);
-  const base::string16& title(title_match.node->GetTitle());
-  DCHECK(!title.empty());
-
-  const GURL& url(title_match.node->url());
+  base::string16 title(bookmark_match.node->GetTitle());
+  const GURL& url(bookmark_match.node->url());
   const base::string16& url_utf16 = base::UTF8ToUTF16(url.spec());
-  size_t match_start, inline_autocomplete_offset;
-  URLPrefix::ComputeMatchStartAndInlineAutocompleteOffset(
-      input, fixed_up_input, false, url_utf16, &match_start,
-      &inline_autocomplete_offset);
+  size_t inline_autocomplete_offset = URLPrefix::GetInlineAutocompleteOffset(
+      input, fixed_up_input, false, url_utf16);
   match.destination_url = url;
+  const size_t match_start = bookmark_match.url_match_positions.empty() ?
+      0 : bookmark_match.url_match_positions[0].first;
   const bool trim_http = !AutocompleteInput::HasHTTPScheme(input.text()) &&
       ((match_start == base::string16::npos) || (match_start != 0));
-  match.contents = net::FormatUrl(url, languages_,
+  std::vector<size_t> offsets = BookmarkMatch::OffsetsFromMatchPositions(
+      bookmark_match.url_match_positions);
+  // In addition to knowing how |offsets| is transformed, we need to know how
+  // |inline_autocomplete_offset| is transformed.  We add it to the end of
+  // |offsets|, compute how everything is transformed, then remove it from the
+  // end.
+  offsets.push_back(inline_autocomplete_offset);
+  match.contents = net::FormatUrlWithOffsets(url, languages_,
       net::kFormatUrlOmitAll & ~(trim_http ? 0 : net::kFormatUrlOmitHTTP),
-      net::UnescapeRule::SPACES, NULL, NULL, &inline_autocomplete_offset);
-  match.contents_class.push_back(
-      ACMatchClassification(0, ACMatchClassification::URL));
+      net::UnescapeRule::SPACES, NULL, NULL, &offsets);
+  inline_autocomplete_offset = offsets.back();
+  offsets.pop_back();
+  BookmarkMatch::MatchPositions new_url_match_positions =
+      BookmarkMatch::ReplaceOffsetsInMatchPositions(
+          bookmark_match.url_match_positions, offsets);
+  match.contents_class =
+      ClassificationsFromMatch(new_url_match_positions,
+                               match.contents.size(),
+                               true);
   match.fill_into_edit =
       AutocompleteInput::FormattedStringWithEquivalentMeaning(url,
                                                               match.contents);
@@ -195,48 +191,56 @@
   }
   match.description = title;
   match.description_class =
-      ClassificationsFromMatch(title_match.match_positions,
-                               match.description.size());
+      ClassificationsFromMatch(bookmark_match.title_match_positions,
+                               match.description.size(),
+                               false);
   match.starred = true;
 
   // Summary on how a relevance score is determined for the match:
   //
-  // For each term matching within the bookmark's title (as given by the set of
-  // Snippet::MatchPositions) calculate a 'factor', sum up those factors, then
-  // use the sum to figure out a value between the base score and the maximum
-  // score.
+  // For each match within the bookmark's title or URL (or both), calculate a
+  // 'factor', sum up those factors, then use the sum to figure out a value
+  // between the base score and the maximum score.
   //
-  // The factor for each term is the product of:
+  // The factor for each match is the product of:
   //
-  //  1) how much of the bookmark's title has been matched by the term:
-  //       (term length / title length).
+  //  1) how many characters in the bookmark's title/URL are part of this match.
+  //     This is capped at the length of the bookmark's title
+  //     to prevent terms that match in both the title and the URL from
+  //     scoring too strongly.
   //
-  //  Example: Given a bookmark title 'abcde fghijklm', with a title length
-  //     of 14, and two different search terms, 'abcde' and 'fghijklm', with
-  //     term lengths of 5 and 8, respectively, 'fghijklm' will score higher
-  //     (with a partial factor of 8/14 = 0.571) than 'abcde' (5/14 = 0.357).
-  //
-  //  2) where the term match occurs within the bookmark's title, giving more
-  //     points for matches that appear earlier in the title:
-  //       ((title length - position of match start) / title_length).
+  //  2) where the match occurs within the bookmark's title or URL,
+  //     giving more points for matches that appear earlier in the string:
+  //       ((string_length - position of match start) / string_length).
   //
   //  Example: Given a bookmark title of 'abcde fghijklm', with a title length
   //     of 14, and two different search terms, 'abcde' and 'fghij', with
   //     start positions of 0 and 6, respectively, 'abcde' will score higher
   //     (with a a partial factor of (14-0)/14 = 1.000 ) than 'fghij' (with
-  //     a partial factor of (14-6)/14 = 0.571 ).
+  //     a partial factor of (14-6)/14 = 0.571 ).  (In this example neither
+  //     term matches in the URL.)
   //
-  // Once all term factors have been calculated they are summed. The resulting
-  // sum will never be greater than 1.0 because of the way the bookmark model
-  // matches and removes overlaps. (In particular, the bookmark model only
+  // Once all match factors have been calculated they are summed.  If URL
+  // matches are not considered, the resulting sum will never be greater than
+  // the length of the bookmark title because of the way the bookmark model
+  // matches and removes overlaps.  (In particular, the bookmark model only
   // matches terms to the beginning of words and it removes all overlapping
-  // matches, keeping only the longest. Together these mean that each
-  // character is included in at most one match. This property ensures the
-  // sum of factors is at most 1.) This sum is then multiplied against the
-  // scoring range available, which is 299. The 299 is calculated by
-  // subtracting the minimum possible score, 900, from the maximum possible
-  // score, 1199. This product, ranging from 0 to 299, is added to the minimum
-  // possible score, 900, giving the preliminary score.
+  // matches, keeping only the longest.  Together these mean that each
+  // character is included in at most one match.)  If URL matches are
+  // considered, the sum can be greater.
+  //
+  // This sum is then normalized by the length of the bookmark title (if URL
+  // matches are not considered) or by the length of the bookmark title + 10
+  // (if URL matches are considered) and capped at 1.0.  (If URL matches
+  // are considered, we want to expand the scoring range so fewer bookmarks
+  // will hit the 1.0 cap and hence lose all ability to distinguish between
+  // these high-quality bookmarks.)
+  //
+  // The normalized value is multiplied against the scoring range available,
+  // which is 299.  The 299 is calculated by subtracting the minimum possible
+  // score, 900, from the maximum possible score, 1199.  This product, ranging
+  // from 0 to 299, is added to the minimum possible score, 900, giving the
+  // preliminary score.
   //
   // If the preliminary score is less than the maximum possible score, 1199,
   // it can be boosted up to that maximum possible score if the URL referenced
@@ -246,18 +250,32 @@
   // scored up to a maximum of three, the score is boosted by a fixed amount
   // given by |kURLCountBoost|, below.
   //
-  ScoringFunctor position_functor =
-      for_each(title_match.match_positions.begin(),
-               title_match.match_positions.end(), ScoringFunctor(title.size()));
+  if (score_using_url_matches_) {
+    // Pretend empty titles are identical to the URL.
+    if (title.empty())
+      title = base::ASCIIToUTF16(url.spec());
+  } else {
+    DCHECK(!title.empty());
+  }
+  ScoringFunctor title_position_functor =
+      for_each(bookmark_match.title_match_positions.begin(),
+               bookmark_match.title_match_positions.end(),
+               ScoringFunctor(title.size()));
+  ScoringFunctor url_position_functor =
+      for_each(bookmark_match.url_match_positions.begin(),
+               bookmark_match.url_match_positions.end(),
+               ScoringFunctor(bookmark_match.node->url().spec().length()));
+  const double summed_factors = title_position_functor.ScoringFactor() +
+      (score_using_url_matches_ ? url_position_functor.ScoringFactor() : 0);
+  const double normalized_sum = std::min(
+      summed_factors / (title.size() + (score_using_url_matches_ ? 10 : 0)),
+      1.0);
   const int kBaseBookmarkScore = 900;
-  const int kMaxBookmarkScore = AutocompleteResult::kLowestDefaultScore - 1;
+  const int kMaxBookmarkScore = 1199;
   const double kBookmarkScoreRange =
       static_cast<double>(kMaxBookmarkScore - kBaseBookmarkScore);
-  // It's not likely that GetBookmarksWithTitlesMatching will return overlapping
-  // matches but let's play it safe.
-  match.relevance = std::min(kMaxBookmarkScore,
-      static_cast<int>(position_functor.ScoringFactor() * kBookmarkScoreRange) +
-      kBaseBookmarkScore);
+  match.relevance = static_cast<int>(normalized_sum * kBookmarkScoreRange) +
+      kBaseBookmarkScore;
   // Don't waste any time searching for additional referenced URLs if we
   // already have a perfect title match.
   if (match.relevance >= kMaxBookmarkScore)
@@ -275,20 +293,25 @@
 
 // static
 ACMatchClassifications BookmarkProvider::ClassificationsFromMatch(
-    const Snippet::MatchPositions& positions,
-    size_t text_length) {
+    const query_parser::Snippet::MatchPositions& positions,
+    size_t text_length,
+    bool is_url) {
+  ACMatchClassification::Style url_style =
+      is_url ? ACMatchClassification::URL : ACMatchClassification::NONE;
   ACMatchClassifications classifications;
   if (positions.empty()) {
     classifications.push_back(
-        ACMatchClassification(0, ACMatchClassification::NONE));
+        ACMatchClassification(0, url_style));
     return classifications;
   }
 
-  for (Snippet::MatchPositions::const_iterator i = positions.begin();
-       i != positions.end(); ++i) {
+  for (query_parser::Snippet::MatchPositions::const_iterator i =
+           positions.begin();
+       i != positions.end();
+       ++i) {
     AutocompleteMatch::ACMatchClassifications new_class;
     AutocompleteMatch::ClassifyLocationInString(i->first, i->second - i->first,
-        text_length, 0, &new_class);
+        text_length, url_style, &new_class);
     classifications = AutocompleteMatch::MergeClassifications(
         classifications, new_class);
   }
diff --git a/chrome/browser/autocomplete/bookmark_provider.h b/chrome/browser/autocomplete/bookmark_provider.h
index 5ddfaa3..be256e9 100644
--- a/chrome/browser/autocomplete/bookmark_provider.h
+++ b/chrome/browser/autocomplete/bookmark_provider.h
@@ -10,10 +10,10 @@
 #include "chrome/browser/autocomplete/autocomplete_input.h"
 #include "chrome/browser/autocomplete/autocomplete_match.h"
 #include "chrome/browser/autocomplete/autocomplete_provider.h"
-#include "chrome/browser/history/snippet.h"
+#include "components/query_parser/snippet.h"
 
 class BookmarkModel;
-struct BookmarkTitleMatch;
+struct BookmarkMatch;
 class Profile;
 
 // This class is an autocomplete provider which quickly (and synchronously)
@@ -45,30 +45,33 @@
   virtual ~BookmarkProvider();
 
   // Performs the actual matching of |input| over the bookmarks and fills in
-  // |matches_|. If |best_match| then only suggest the single best match,
-  // otherwise suggest the top |kMaxMatches| matches.
-  void DoAutocomplete(const AutocompleteInput& input, bool best_match);
+  // |matches_|.
+  void DoAutocomplete(const AutocompleteInput& input);
 
-  // Compose an AutocompleteMatch based on |title_match| that has 1) the URL of
-  // title_match's bookmark, and 2) the bookmark's title, not the URL's page
+  // Compose an AutocompleteMatch based on |match| that has 1) the URL of
+  // |match|'s bookmark, and 2) the bookmark's title, not the URL's page
   // title, as the description.  |input| is used to compute the match's
   // inline_autocompletion.  |fixed_up_input| is used in that way as well;
   // it's passed separately so this function doesn't have to compute it.
-  AutocompleteMatch TitleMatchToACMatch(
+  AutocompleteMatch BookmarkMatchToACMatch(
       const AutocompleteInput& input,
       const AutocompleteInput& fixed_up_input,
-      const BookmarkTitleMatch& title_match);
+      const BookmarkMatch& match);
 
   // Converts |positions| into ACMatchClassifications and returns the
   // classifications. |text_length| is used to determine the need to add an
   // 'unhighlighted' classification span so the tail of the source string
   // properly highlighted.
   static ACMatchClassifications ClassificationsFromMatch(
-      const Snippet::MatchPositions& positions,
-      size_t text_length);
+      const query_parser::Snippet::MatchPositions& positions,
+      size_t text_length,
+      bool is_url);
 
   BookmarkModel* bookmark_model_;
 
+  // True if we should use matches in the URL for scoring.
+  const bool score_using_url_matches_;
+
   // Languages used during the URL formatting.
   std::string languages_;
 
diff --git a/chrome/browser/autocomplete/bookmark_provider_unittest.cc b/chrome/browser/autocomplete/bookmark_provider_unittest.cc
index 100f0ee..1cca616 100644
--- a/chrome/browser/autocomplete/bookmark_provider_unittest.cc
+++ b/chrome/browser/autocomplete/bookmark_provider_unittest.cc
@@ -12,13 +12,14 @@
 #include "base/memory/scoped_ptr.h"
 #include "base/strings/string16.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/strings/string_split.h"
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/autocomplete/autocomplete_provider.h"
 #include "chrome/browser/autocomplete/autocomplete_provider_listener.h"
 #include "chrome/browser/bookmarks/bookmark_model.h"
 #include "chrome/browser/bookmarks/bookmark_model_factory.h"
-#include "chrome/browser/bookmarks/bookmark_title_match.h"
 #include "chrome/test/base/testing_profile.h"
+#include "components/bookmarks/core/browser/bookmark_match.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 // The bookmark corpus against which we will simulate searches.
@@ -35,6 +36,8 @@
   { "jkl ghi", "http://www.catsanddogs.com/g" },
   { "frankly frankly frank", "http://www.catsanddogs.com/h" },
   { "foobar foobar", "http://www.foobar.com/" },
+  { "domain", "http://www.domain.com/http/" },
+  { "repeat", "http://www.repeat.com/1/repeat/2/" },
   // For testing inline_autocompletion.
   { "http://blah.com/", "http://blah.com/" },
   { "http://fiddle.com/", "http://fiddle.com/" },
@@ -61,7 +64,7 @@
 class BookmarkProviderTest : public testing::Test,
                              public AutocompleteProviderListener {
  public:
-  BookmarkProviderTest() : model_(new BookmarkModel(NULL)) {}
+  BookmarkProviderTest();
 
   // AutocompleteProviderListener: Not called.
   virtual void OnProviderUpdate(bool updated_matches) OVERRIDE {}
@@ -77,6 +80,10 @@
   DISALLOW_COPY_AND_ASSIGN(BookmarkProviderTest);
 };
 
+BookmarkProviderTest::BookmarkProviderTest() {
+  model_.reset(new BookmarkModel(NULL, false));
+}
+
 void BookmarkProviderTest::SetUp() {
   profile_.reset(new TestingProfile());
   DCHECK(profile_.get());
@@ -252,7 +259,7 @@
     AutocompleteInput input(base::ASCIIToUTF16(query_data[i].query),
                             base::string16::npos, base::string16(), GURL(),
                             AutocompleteInput::INVALID_SPEC, false, false,
-                            false, AutocompleteInput::ALL_MATCHES);
+                            false, true);
     provider_->Start(input, false);
     const ACMatches& matches(provider_->matches());
     // Validate number of results is as expected.
@@ -326,7 +333,7 @@
     AutocompleteInput input(base::ASCIIToUTF16(query_data[i].query),
                             base::string16::npos, base::string16(), GURL(),
                             AutocompleteInput::INVALID_SPEC, false, false,
-                            false, AutocompleteInput::ALL_MATCHES);
+                            false, true);
     provider_->Start(input, false);
     const ACMatches& matches(provider_->matches());
     // Validate number and content of results is as expected.
@@ -382,18 +389,74 @@
     AutocompleteInput input(base::ASCIIToUTF16(query_data[i].query),
                             base::string16::npos, base::string16(), GURL(),
                             AutocompleteInput::INVALID_SPEC, false, false,
-                            false, AutocompleteInput::ALL_MATCHES);
+                            false, true);
     AutocompleteInput fixed_up_input(input);
     provider_->FixupUserInput(&fixed_up_input);
     BookmarkNode node(GURL(query_data[i].url));
     node.SetTitle(base::ASCIIToUTF16(query_data[i].url));
-    BookmarkTitleMatch bookmark_match;
+    BookmarkMatch bookmark_match;
     bookmark_match.node = &node;
-    const AutocompleteMatch& ac_match =
-        provider_->TitleMatchToACMatch(input, fixed_up_input, bookmark_match);
+    const AutocompleteMatch& ac_match = provider_->BookmarkMatchToACMatch(
+        input, fixed_up_input, bookmark_match);
     EXPECT_EQ(query_data[i].allowed_to_be_default_match,
               ac_match.allowed_to_be_default_match) << description;
     EXPECT_EQ(base::ASCIIToUTF16(query_data[i].inline_autocompletion),
               ac_match.inline_autocompletion) << description;
   }
 }
+
+TEST_F(BookmarkProviderTest, StripHttpAndAdjustOffsets) {
+  // Simulate searches.
+  struct QueryData {
+    const std::string query;
+    const std::string expected_contents;
+    // |expected_contents_class| is in format offset:style,offset:style,...
+    const std::string expected_contents_class;
+  } query_data[] = {
+    { "foo",       "www.foobar.com",             "0:1,4:3,7:1"           },
+    { "www foo",   "www.foobar.com",             "0:3,3:1,4:3,7:1"       },
+    { "foo www",   "www.foobar.com",             "0:3,3:1,4:3,7:1"       },
+    { "foo http",  "http://www.foobar.com",      "0:3,4:1,11:3,14:1"     },
+    { "blah",      "blah.com",                   "0:3,4:1"               },
+    { "http blah", "http://blah.com",            "0:3,4:1,7:3,11:1"      },
+    { "dom",       "www.domain.com/http/",       "0:1,4:3,7:1"           },
+    { "dom http",  "http://www.domain.com/http/",
+      "0:3,4:1,11:3,14:1,22:3,26:1"                                      },
+    { "rep",       "www.repeat.com/1/repeat/2/", "0:1,4:3,7:1,17:3,20:1" },
+    { "versi",     "chrome://version",           "0:1,9:3,14:1"          }
+  };
+
+  // Reload the bookmarks index with |index_urls| == true.
+  model_.reset(new BookmarkModel(NULL, true));
+  SetUp();
+
+  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(query_data); ++i) {
+    std::string description = "for query=" + query_data[i].query;
+    AutocompleteInput input(base::ASCIIToUTF16(query_data[i].query),
+                            base::string16::npos, base::string16(), GURL(),
+                            AutocompleteInput::INVALID_SPEC, false, false,
+                            false, true);
+    provider_->Start(input, false);
+    const ACMatches& matches(provider_->matches());
+    ASSERT_EQ(1U, matches.size()) << description;
+    const AutocompleteMatch& match = matches[0];
+    EXPECT_EQ(base::ASCIIToUTF16(query_data[i].expected_contents),
+              match.contents) << description;
+    std::vector<std::string> class_strings;
+    base::SplitString(
+        query_data[i].expected_contents_class, ',', &class_strings);
+    ASSERT_EQ(class_strings.size(), match.contents_class.size())
+        << description;
+    for (size_t i = 0; i < class_strings.size(); ++i) {
+      std::vector<std::string> chunks;
+      base::SplitString(class_strings[i], ':', &chunks);
+      ASSERT_EQ(2U, chunks.size()) << description;
+      size_t offset;
+      EXPECT_TRUE(base::StringToSizeT(chunks[0], &offset)) << description;
+      EXPECT_EQ(offset, match.contents_class[i].offset) << description;
+      int style;
+      EXPECT_TRUE(base::StringToInt(chunks[1], &style)) << description;
+      EXPECT_EQ(style, match.contents_class[i].style) << description;
+    }
+  }
+}
diff --git a/chrome/browser/autocomplete/builtin_provider_unittest.cc b/chrome/browser/autocomplete/builtin_provider_unittest.cc
index fd5ccc3..56ee8a7 100644
--- a/chrome/browser/autocomplete/builtin_provider_unittest.cc
+++ b/chrome/browser/autocomplete/builtin_provider_unittest.cc
@@ -57,7 +57,7 @@
     AutocompleteInput input(builtin_cases[i].input, base::string16::npos,
                             base::string16(), GURL(),
                             AutocompleteInput::INVALID_SPEC, true,
-                            false, true, AutocompleteInput::ALL_MATCHES);
+                            false, true, true);
     builtin_provider_->Start(input, false);
     EXPECT_TRUE(builtin_provider_->done());
     matches = builtin_provider_->matches();
diff --git a/chrome/browser/autocomplete/extension_app_provider.cc b/chrome/browser/autocomplete/extension_app_provider.cc
index 709789d..f29b991 100644
--- a/chrome/browser/autocomplete/extension_app_provider.cc
+++ b/chrome/browser/autocomplete/extension_app_provider.cc
@@ -34,7 +34,8 @@
   // Notifications of extensions loading and unloading always come from the
   // non-incognito profile, but we need to see them regardless, as the incognito
   // windows can be affected.
-  registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
+  registrar_.Add(this,
+                 chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
                  content::Source<Profile>(profile_->GetOriginalProfile()));
   registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNINSTALLED,
                  content::Source<Profile>(profile_->GetOriginalProfile()));
diff --git a/chrome/browser/autocomplete/extension_app_provider_unittest.cc b/chrome/browser/autocomplete/extension_app_provider_unittest.cc
index f40ef75..0ac201a 100644
--- a/chrome/browser/autocomplete/extension_app_provider_unittest.cc
+++ b/chrome/browser/autocomplete/extension_app_provider_unittest.cc
@@ -91,7 +91,7 @@
     AutocompleteInput input(keyword_cases[i].input, base::string16::npos,
                             base::string16(), GURL(),
                             AutocompleteInput::INVALID_SPEC, true,
-                            false, true, AutocompleteInput::ALL_MATCHES);
+                            false, true, true);
     app_provider_->Start(input, false);
     EXPECT_TRUE(app_provider_->done());
     matches = app_provider_->matches();
@@ -142,7 +142,7 @@
   AutocompleteInput input(ASCIIToUTF16("Test"), base::string16::npos,
                           base::string16(), GURL(),
                           AutocompleteInput::INVALID_SPEC, true, true,
-                          true, AutocompleteInput::BEST_MATCH);
+                          true, false);
   base::string16 url(ASCIIToUTF16("http://example.com"));
   for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) {
     ExtensionAppProvider::ExtensionApp extension_app =
diff --git a/chrome/browser/autocomplete/history_quick_provider.cc b/chrome/browser/autocomplete/history_quick_provider.cc
index 64a3d27..d94b7db 100644
--- a/chrome/browser/autocomplete/history_quick_provider.cc
+++ b/chrome/browser/autocomplete/history_quick_provider.cc
@@ -262,8 +262,18 @@
   match.contents_class =
       SpansFromTermMatch(new_matches, match.contents.length(), true);
 
-  if (history_match.can_inline()) {
-    DCHECK(!new_matches.empty());
+  // Set |inline_autocompletion| and |allowed_to_be_default_match| if possible.
+  // The second part of this test can happen if the only match(es) of the user's
+  // term occur in places FormatUrl() decides to omit in the formatted url.
+  // In these cases, it's impossible to set |inline_autocompletion| correctly
+  // and hence the match cannot be the default match.  I (mpearson@) believe
+  // this is likely caused by the mismatch that offsets are originally
+  // computed with respect to the cleaned-up URL yet then applied and
+  // updated by FormatUrl() as if they applied to the original string.
+  // See crbug.com/252630.
+  // TODO(mpearson): replacing the second clause with a DCHECK after fixing
+  // 252630.
+  if (history_match.can_inline() && !new_matches.empty()) {
     size_t inline_autocomplete_offset = new_matches[0].offset +
         new_matches[0].length;
     // |inline_autocomplete_offset| may be beyond the end of the
diff --git a/chrome/browser/autocomplete/history_quick_provider_unittest.cc b/chrome/browser/autocomplete/history_quick_provider_unittest.cc
index d5c414d..866b2b0 100644
--- a/chrome/browser/autocomplete/history_quick_provider_unittest.cc
+++ b/chrome/browser/autocomplete/history_quick_provider_unittest.cc
@@ -250,8 +250,7 @@
   base::MessageLoop::current()->RunUntilIdle();
   AutocompleteInput input(text, base::string16::npos, base::string16(),
                           GURL(), AutocompleteInput::INVALID_SPEC,
-                          prevent_inline_autocomplete, false, true,
-                          AutocompleteInput::ALL_MATCHES);
+                          prevent_inline_autocomplete, false, true, true);
   provider_->Start(input, false);
   EXPECT_TRUE(provider_->done());
 
diff --git a/chrome/browser/autocomplete/history_url_provider.cc b/chrome/browser/autocomplete/history_url_provider.cc
index 3bfcce9..afe6422 100644
--- a/chrome/browser/autocomplete/history_url_provider.cc
+++ b/chrome/browser/autocomplete/history_url_provider.cc
@@ -18,6 +18,7 @@
 #include "chrome/browser/autocomplete/autocomplete_match.h"
 #include "chrome/browser/autocomplete/autocomplete_provider_listener.h"
 #include "chrome/browser/autocomplete/autocomplete_result.h"
+#include "chrome/browser/bookmarks/bookmark_utils.h"
 #include "chrome/browser/history/history_backend.h"
 #include "chrome/browser/history/history_database.h"
 #include "chrome/browser/history/history_service.h"
@@ -768,8 +769,7 @@
 
   // Pass 2: Ask the history service to call us back on the history thread,
   // where we can read the full on-disk DB.
-  if (search_url_database_ &&
-      (input.matches_requested() == AutocompleteInput::ALL_MATCHES)) {
+  if (search_url_database_ && input.want_asynchronous_matches()) {
     done_ = false;
     params_ = params.release();  // This object will be destroyed in
                                  // QueryComplete() once we're done with it.
@@ -1150,7 +1150,7 @@
 ACMatchClassifications HistoryURLProvider::ClassifyDescription(
     const base::string16& input_text,
     const base::string16& description) {
-  base::string16 clean_description = history::CleanUpTitleForMatching(
+  base::string16 clean_description = bookmark_utils::CleanUpTitleForMatching(
       description);
   history::TermMatches description_matches(SortAndDeoverlapMatches(
       history::MatchTermInString(input_text, clean_description, 0)));
diff --git a/chrome/browser/autocomplete/history_url_provider_unittest.cc b/chrome/browser/autocomplete/history_url_provider_unittest.cc
index df39597..c0f43cd 100644
--- a/chrome/browser/autocomplete/history_url_provider_unittest.cc
+++ b/chrome/browser/autocomplete/history_url_provider_unittest.cc
@@ -281,8 +281,7 @@
     AutocompleteInput::Type* identified_input_type) {
   AutocompleteInput input(text, base::string16::npos, desired_tld, GURL(),
                           AutocompleteInput::INVALID_SPEC,
-                          prevent_inline_autocomplete, false, true,
-                          AutocompleteInput::ALL_MATCHES);
+                          prevent_inline_autocomplete, false, true, true);
   *identified_input_type = input.type();
   autocomplete_->Start(input, false);
   if (!autocomplete_->done())
@@ -561,7 +560,7 @@
   AutocompleteInput input(ASCIIToUTF16("p"), base::string16::npos,
                           base::string16(), GURL(),
                           AutocompleteInput::INVALID_SPEC, false, false, true,
-                          AutocompleteInput::ALL_MATCHES);
+                          true);
   autocomplete_->Start(input, false);
   // HistoryURLProvider shouldn't be done (waiting on async results).
   EXPECT_FALSE(autocomplete_->done());
@@ -603,7 +602,7 @@
   AutocompleteInput input(ASCIIToUTF16("slash "), base::string16::npos,
                           base::string16(), GURL(),
                           AutocompleteInput::INVALID_SPEC, false, false,
-                          true, AutocompleteInput::ALL_MATCHES);
+                          true, true);
   autocomplete_->Start(input, false);
   if (!autocomplete_->done())
     base::MessageLoop::current()->Run();
@@ -782,7 +781,7 @@
     AutocompleteInput input(ASCIIToUTF16(test_cases[i]), base::string16::npos,
                             base::string16(), GURL(),
                             AutocompleteInput::INVALID_SPEC,
-                            false, false, true, AutocompleteInput::ALL_MATCHES);
+                            false, false, true, true);
     autocomplete_->Start(input, false);
     if (!autocomplete_->done())
       base::MessageLoop::current()->Run();
@@ -900,7 +899,7 @@
                             base::string16::npos, base::string16(),
                             GURL("about:blank"),
                             AutocompleteInput::INVALID_SPEC, false, false, true,
-                            AutocompleteInput::ALL_MATCHES);
+                            true);
     AutocompleteMatch match(autocomplete_->SuggestExactInput(
         input.text(), input.canonicalized_url(), test_cases[i].trim_http));
     EXPECT_EQ(ASCIIToUTF16(test_cases[i].contents), match.contents);
diff --git a/chrome/browser/autocomplete/keyword_provider.cc b/chrome/browser/autocomplete/keyword_provider.cc
index 13c9920..6b280d5 100644
--- a/chrome/browser/autocomplete/keyword_provider.cc
+++ b/chrome/browser/autocomplete/keyword_provider.cc
@@ -328,7 +328,7 @@
         template_url, input, keyword.length(), remaining_input, true, -1));
 
     if (profile_ && is_extension_keyword) {
-      if (input.matches_requested() == AutocompleteInput::ALL_MATCHES) {
+      if (input.want_asynchronous_matches()) {
         if (template_url->GetExtensionId() != current_keyword_extension_id_)
           MaybeEndExtensionKeywordMode();
         if (current_keyword_extension_id_.empty())
@@ -341,8 +341,7 @@
           remaining_input,
           &matches_[0]);
 
-      if (minimal_changes &&
-          (input.matches_requested() != AutocompleteInput::BEST_MATCH)) {
+      if (minimal_changes) {
         // If the input hasn't significantly changed, we can just use the
         // suggestions from last time. We need to readjust the relevance to
         // ensure it is less than the main match's relevance.
@@ -350,7 +349,7 @@
           matches_.push_back(extension_suggest_matches_[i]);
           matches_.back().relevance = matches_[0].relevance - (i + 1);
         }
-      } else if (input.matches_requested() == AutocompleteInput::ALL_MATCHES) {
+      } else if (input.want_asynchronous_matches()) {
         extension_suggest_last_input_ = input;
         extension_suggest_matches_.clear();
 
diff --git a/chrome/browser/autocomplete/keyword_provider_unittest.cc b/chrome/browser/autocomplete/keyword_provider_unittest.cc
index e61fa3f..d172d46 100644
--- a/chrome/browser/autocomplete/keyword_provider_unittest.cc
+++ b/chrome/browser/autocomplete/keyword_provider_unittest.cc
@@ -82,7 +82,7 @@
     AutocompleteInput input(keyword_cases[i].input, base::string16::npos,
                             base::string16(), GURL(),
                             AutocompleteInput::INVALID_SPEC, true,
-                            false, true, AutocompleteInput::ALL_MATCHES);
+                            false, true, true);
     kw_provider_->Start(input, false);
     EXPECT_TRUE(kw_provider_->done());
     matches = kw_provider_->matches();
@@ -324,8 +324,7 @@
     AutocompleteInput input(ASCIIToUTF16(cases[i].text),
                             cases[i].cursor_position, base::string16(), GURL(),
                             AutocompleteInput::INVALID_SPEC, false, false,
-                            cases[i].allow_exact_keyword_match,
-                            AutocompleteInput::ALL_MATCHES);
+                            cases[i].allow_exact_keyword_match, true);
     const TemplateURL* url =
         KeywordProvider::GetSubstitutingTemplateURLForInput(model_.get(),
                                                             &input);
diff --git a/chrome/browser/autocomplete/search_provider.cc b/chrome/browser/autocomplete/search_provider.cc
index 4770bbb..9f934cb 100644
--- a/chrome/browser/autocomplete/search_provider.cc
+++ b/chrome/browser/autocomplete/search_provider.cc
@@ -499,8 +499,7 @@
        !default_results_.navigation_results.empty() ||
        !keyword_results_.suggest_results.empty() ||
        !keyword_results_.navigation_results.empty() ||
-       (!done_ &&
-        input_.matches_requested() == AutocompleteInput::ALL_MATCHES)))
+       (!done_ && input_.want_asynchronous_matches())))
     return;
 
   // We can't keep running any previous query, so halt it.
@@ -516,7 +515,7 @@
     UpdateMatchContentsClass(keyword_input_.text(), &keyword_results_);
 
   // We can't start a new query if we're only allowed synchronous results.
-  if (input_.matches_requested() != AutocompleteInput::ALL_MATCHES)
+  if (!input_.want_asynchronous_matches())
     return;
 
   // To avoid flooding the suggest server, don't send a query until at
@@ -842,15 +841,16 @@
   if (!prevent_inline_autocomplete && input_multiple_words) {
     // ScoreHistoryResults() allows autocompletion of multi-word, 1-visit
     // queries if the input also has multiple words.  But if we were already
-    // autocompleting a multi-word, multi-visit query, and the current input is
-    // still a prefix of it, then changing the autocompletion suddenly feels
-    // wrong.  To detect this case, first score as if only one word has been
-    // typed, then check for a best result that is an autocompleted, multi-word
-    // query.  If we find one, then just keep that score set.
+    // scoring a multi-word, multi-visit query aggressively, and the current
+    // input is still a prefix of it, then changing the suggestion suddenly
+    // feels wrong.  To detect this case, first score as if only one word has
+    // been typed, then check if the best result came from aggressive search
+    // history scoring.  If it did, then just keep that score set.  This
+    // 1200 the lowest possible score in CalculateRelevanceForHistory()'s
+    // aggressive-scoring curve.
     scored_results = ScoreHistoryResults(results, prevent_inline_autocomplete,
                                          false, input_text, is_keyword);
-    if ((scored_results.front().relevance() <
-             AutocompleteResult::kLowestDefaultScore) ||
+    if ((scored_results.front().relevance() < 1200) ||
         !HasMultipleWords(scored_results.front().suggestion()))
       scored_results.clear();  // Didn't detect the case above, score normally.
   }
diff --git a/chrome/browser/autocomplete/search_provider_unittest.cc b/chrome/browser/autocomplete/search_provider_unittest.cc
index 5187dd6..d6c679b 100644
--- a/chrome/browser/autocomplete/search_provider_unittest.cc
+++ b/chrome/browser/autocomplete/search_provider_unittest.cc
@@ -297,8 +297,7 @@
     AutocompleteInput input(cases[i].input, base::string16::npos,
                             base::string16(), GURL(),
                             AutocompleteInput::INVALID_SPEC, false,
-                            prefer_keyword, true,
-                            AutocompleteInput::ALL_MATCHES);
+                            prefer_keyword, true, true);
     provider_->Start(input, false);
     matches = provider_->matches();
     base::string16 diagnostic_details =
@@ -345,7 +344,7 @@
   AutocompleteInput input(text, base::string16::npos, base::string16(), GURL(),
                           AutocompleteInput::INVALID_SPEC,
                           prevent_inline_autocomplete, prefer_keyword, true,
-                          AutocompleteInput::ALL_MATCHES);
+                          true);
   provider_->Start(input, false);
 
   // RunUntilIdle so that the task scheduled by SearchProvider to create the
@@ -869,8 +868,7 @@
       AutocompleteProvider::TYPE_SEARCH);
   controller.Start(AutocompleteInput(
       ASCIIToUTF16("k t"), base::string16::npos, base::string16(), GURL(),
-      AutocompleteInput::INVALID_SPEC, false, false, true,
-      AutocompleteInput::ALL_MATCHES));
+      AutocompleteInput::INVALID_SPEC, false, false, true, true));
   const AutocompleteResult& result = controller.result();
 
   // There should be three matches, one for the keyword history, one for
diff --git a/chrome/browser/autocomplete/shortcuts_backend.cc b/chrome/browser/autocomplete/shortcuts_backend.cc
index ea5c9e7..312a765 100644
--- a/chrome/browser/autocomplete/shortcuts_backend.cc
+++ b/chrome/browser/autocomplete/shortcuts_backend.cc
@@ -180,11 +180,13 @@
   DCHECK_EQ(chrome::NOTIFICATION_HISTORY_URLS_DELETED, type);
   const history::URLsDeletedDetails* deleted_details =
       content::Details<const history::URLsDeletedDetails>(details).ptr();
-  if (deleted_details->all_history)
+  if (deleted_details->all_history) {
     DeleteAllShortcuts();
+    return;
+  }
+
   const history::URLRows& rows(deleted_details->rows);
   history::ShortcutsDatabase::ShortcutIDs shortcut_ids;
-
   for (GuidMap::const_iterator it(guid_map_.begin()); it != guid_map_.end();
         ++it) {
     if (std::find_if(
diff --git a/chrome/browser/autocomplete/shortcuts_provider.cc b/chrome/browser/autocomplete/shortcuts_provider.cc
index 6969b9b..7d46bb6 100644
--- a/chrome/browser/autocomplete/shortcuts_provider.cc
+++ b/chrome/browser/autocomplete/shortcuts_provider.cc
@@ -49,6 +49,8 @@
 
 }  // namespace
 
+const int ShortcutsProvider::kShortcutsProviderDefaultMaxRelevance = 1199;
+
 ShortcutsProvider::ShortcutsProvider(AutocompleteProviderListener* listener,
                                      Profile* profile)
     : AutocompleteProvider(listener, profile,
@@ -145,7 +147,7 @@
   int max_relevance;
   if (!OmniboxFieldTrial::ShortcutsScoringMaxRelevance(
       input.current_page_classification(), &max_relevance))
-    max_relevance = 1199;
+    max_relevance = kShortcutsProviderDefaultMaxRelevance;
 
   for (ShortcutsBackend::ShortcutMap::const_iterator it =
            FindFirstMatch(term_string, backend.get());
@@ -159,9 +161,9 @@
       matches_.back().ComputeStrippedDestinationURL(profile_);
     }
   }
-  // Remove duplicates.
-  // TODO(hfung): Check whether the false below, which does not store duplicates
-  // in the matches, is correct.
+  // Remove duplicates.  Duplicates don't need to be preserved in the matches
+  // because they are only used for deletions, and shortcuts deletes matches
+  // based on the URL.
   AutocompleteResult::DedupMatchesByDestination(
       input.current_page_classification(), false, &matches_);
   // Find best matches.
@@ -216,11 +218,11 @@
   // If the match is a search query this is easy: simply check whether the
   // user text is a prefix of the query.  If the match is a navigation, we
   // assume the fill_into_edit looks something like a URL, so we use
-  // URLPrefix::ComputeMatchStartAndInlineAutocompleteOffset() to try and strip
-  // off any prefixes that the user might not think would change the meaning,
-  // but would otherwise prevent inline autocompletion.  This allows, for
-  // example, the input of "foo.c" to autocomplete to "foo.com" for a
-  // fill_into_edit of "http://foo.com".
+  // URLPrefix::GetInlineAutocompleteOffset() to try and strip off any prefixes
+  // that the user might not think would change the meaning, but would
+  // otherwise prevent inline autocompletion.  This allows, for example, the
+  // input of "foo.c" to autocomplete to "foo.com" for a fill_into_edit of
+  // "http://foo.com".
   if (AutocompleteMatch::IsSearchType(match.type)) {
     if (StartsWith(match.fill_into_edit, input.text(), false)) {
       match.inline_autocompletion =
@@ -230,10 +232,9 @@
           match.inline_autocompletion.empty();
     }
   } else {
-    size_t match_start, inline_autocomplete_offset;
-    URLPrefix::ComputeMatchStartAndInlineAutocompleteOffset(
-        input, fixed_up_input, true, match.fill_into_edit,
-        &match_start, &inline_autocomplete_offset);
+    const size_t inline_autocomplete_offset =
+        URLPrefix::GetInlineAutocompleteOffset(
+            input, fixed_up_input, true, match.fill_into_edit);
     if (inline_autocomplete_offset != base::string16::npos) {
       match.inline_autocompletion =
           match.fill_into_edit.substr(inline_autocomplete_offset);
diff --git a/chrome/browser/autocomplete/shortcuts_provider.h b/chrome/browser/autocomplete/shortcuts_provider.h
index 93778ec..754e872 100644
--- a/chrome/browser/autocomplete/shortcuts_provider.h
+++ b/chrome/browser/autocomplete/shortcuts_provider.h
@@ -37,6 +37,7 @@
  private:
   friend class ClassifyTest;
   friend class ShortcutsProviderTest;
+  FRIEND_TEST_ALL_PREFIXES(ShortcutsProviderTest, CalculateScore);
 
   typedef std::multimap<base::char16, base::string16> WordMap;
 
@@ -102,6 +103,9 @@
                      const history::ShortcutsDatabase::Shortcut& shortcut,
                      int max_relevance);
 
+  // The default max relevance unless overridden by a field trial.
+  static const int kShortcutsProviderDefaultMaxRelevance;
+
   std::string languages_;
   bool initialized_;
 };
diff --git a/chrome/browser/autocomplete/shortcuts_provider_unittest.cc b/chrome/browser/autocomplete/shortcuts_provider_unittest.cc
index 511c95f..bb3ca8d 100644
--- a/chrome/browser/autocomplete/shortcuts_provider_unittest.cc
+++ b/chrome/browser/autocomplete/shortcuts_provider_unittest.cc
@@ -361,8 +361,7 @@
   base::MessageLoop::current()->RunUntilIdle();
   AutocompleteInput input(text, base::string16::npos, base::string16(), GURL(),
                           AutocompleteInput::INVALID_SPEC,
-                          prevent_inline_autocomplete, false, true,
-                          AutocompleteInput::ALL_MATCHES);
+                          prevent_inline_autocomplete, false, true, true);
   provider_->Start(input, false);
   EXPECT_TRUE(provider_->done());
 
@@ -724,7 +723,8 @@
       base::Time::Now(), 1);
 
   // Maximal score.
-  const int max_relevance = AutocompleteResult::kLowestDefaultScore - 1;
+  const int max_relevance =
+      ShortcutsProvider::kShortcutsProviderDefaultMaxRelevance;
   const int kMaxScore = CalculateScore("test", shortcut, max_relevance);
 
   // Score decreases as percent of the match is decreased.
diff --git a/chrome/browser/autocomplete/url_prefix.cc b/chrome/browser/autocomplete/url_prefix.cc
index 1d680db..8a49f2c 100644
--- a/chrome/browser/autocomplete/url_prefix.cc
+++ b/chrome/browser/autocomplete/url_prefix.cc
@@ -77,13 +77,11 @@
 }
 
 // static
-void URLPrefix::ComputeMatchStartAndInlineAutocompleteOffset(
+size_t URLPrefix::GetInlineAutocompleteOffset(
     const AutocompleteInput& input,
     const AutocompleteInput& fixed_up_input,
     const bool allow_www_prefix_without_scheme,
-    const base::string16& text,
-    size_t* match_start,
-    size_t* inline_autocomplete_offset) {
+    const base::string16& text) {
   const URLPrefix* best_prefix = allow_www_prefix_without_scheme ?
       BestURLPrefixWithWWWCase(text, input.text()) :
       BestURLPrefix(text, input.text());
@@ -99,12 +97,7 @@
         BestURLPrefix(text, fixed_up_input.text());
     matching_string = &fixed_up_input.text();
   }
-  if (best_prefix != NULL) {
-    *match_start = best_prefix->prefix.length();
-    *inline_autocomplete_offset =
-        best_prefix->prefix.length() + matching_string->length();
-  } else {
-    *match_start = base::string16::npos;
-    *inline_autocomplete_offset = base::string16::npos;
-  }
+  return (best_prefix != NULL) ?
+      (best_prefix->prefix.length() + matching_string->length()) :
+      base::string16::npos;
 }
diff --git a/chrome/browser/autocomplete/url_prefix.h b/chrome/browser/autocomplete/url_prefix.h
index f5494cb..b7728b0 100644
--- a/chrome/browser/autocomplete/url_prefix.h
+++ b/chrome/browser/autocomplete/url_prefix.h
@@ -39,20 +39,19 @@
                           const base::string16& prefix_suffix);
 
   // Sees if |text| is inlineable against either |input| or |fixed_up_input|,
-  // filling in |match_start| and |inline_autocomplete_offset| appropriately.
+  // returning the appropriate inline autocomplete offset or
+  // base::string16::npos if |text| is not inlineable.
   // |allow_www_prefix_without_scheme| says whether to consider an input such
   // as "foo" to be allowed to match against text "www.foo.com".  This is
   // needed because sometimes the string we're matching against here can come
   // from a match's fill_into_edit, which can start with "www." without having
   // a protocol at the beginning, and we want to allow these matches to be
   // inlineable.  ("www." is not otherwise on the default prefix list.)
-  static void ComputeMatchStartAndInlineAutocompleteOffset(
+  static size_t GetInlineAutocompleteOffset(
       const AutocompleteInput& input,
       const AutocompleteInput& fixed_up_input,
       const bool allow_www_prefix_without_scheme,
-      const base::string16& text,
-      size_t* match_start,
-      size_t* inline_autocomplete_offset);
+      const base::string16& text);
 
   base::string16 prefix;
 
diff --git a/chrome/browser/autocomplete/zero_suggest_provider.cc b/chrome/browser/autocomplete/zero_suggest_provider.cc
index 6fe499f..0a88882 100644
--- a/chrome/browser/autocomplete/zero_suggest_provider.cc
+++ b/chrome/browser/autocomplete/zero_suggest_provider.cc
@@ -155,7 +155,7 @@
   return AutocompleteInput(
       base::string16(), base::string16::npos, base::string16(),
       GURL(current_query_), current_page_classification_, true, false, false,
-      AutocompleteInput::ALL_MATCHES);
+      true);
 }
 
 BaseSearchProvider::Results* ZeroSuggestProvider::GetResultsToFill(
diff --git a/chrome/browser/autofill/android/personal_data_manager_android.h b/chrome/browser/autofill/android/personal_data_manager_android.h
index 6221f8a..69b4862 100644
--- a/chrome/browser/autofill/android/personal_data_manager_android.h
+++ b/chrome/browser/autofill/android/personal_data_manager_android.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_BROWSER_AUTOFILL_ANDROID_PERSONAL_DATA_MANAGER_ANDROID_H_
 #define CHROME_BROWSER_AUTOFILL_ANDROID_PERSONAL_DATA_MANAGER_ANDROID_H_
 
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/android/scoped_java_ref.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/autofill/core/browser/personal_data_manager_observer.h"
diff --git a/chrome/browser/autofill/autofill_browsertest.cc b/chrome/browser/autofill/autofill_browsertest.cc
index 53cac37..f79965e 100644
--- a/chrome/browser/autofill/autofill_browsertest.cc
+++ b/chrome/browser/autofill/autofill_browsertest.cc
@@ -16,9 +16,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/time/time.h"
 #include "chrome/browser/autofill/personal_data_manager_factory.h"
-#include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/infobars/confirm_infobar_delegate.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/browser.h"
@@ -35,10 +33,9 @@
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/autofill/core/browser/personal_data_manager_observer.h"
 #include "components/autofill/core/browser/validation.h"
+#include "components/infobars/core/infobar.h"
+#include "components/infobars/core/infobar_manager.h"
 #include "content/public/browser/navigation_controller.h"
-#include "content/public/browser/notification_observer.h"
-#include "content/public/browser/notification_registrar.h"
-#include "content/public/browser/notification_service.h"
 #include "content/public/browser/render_view_host.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/test/browser_test_utils.h"
@@ -56,21 +53,23 @@
 
 class WindowedPersonalDataManagerObserver
     : public PersonalDataManagerObserver,
-      public content::NotificationObserver {
+      public infobars::InfoBarManager::Observer {
  public:
   explicit WindowedPersonalDataManagerObserver(Browser* browser)
       : alerted_(false),
         has_run_message_loop_(false),
         browser_(browser),
-        infobar_service_(NULL) {
+        infobar_service_(InfoBarService::FromWebContents(
+            browser_->tab_strip_model()->GetActiveWebContents())) {
     PersonalDataManagerFactory::GetForProfile(browser_->profile())->
         AddObserver(this);
-    registrar_.Add(this, chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_ADDED,
-                   content::NotificationService::AllSources());
+    infobar_service_->AddObserver(this);
   }
 
   virtual ~WindowedPersonalDataManagerObserver() {
-    if (infobar_service_ && (infobar_service_->infobar_count() > 0)) {
+    infobar_service_->RemoveObserver(this);
+
+    if (infobar_service_->infobar_count() > 0) {
       infobar_service_->RemoveInfoBar(infobar_service_->infobar_at(0));
     }
   }
@@ -97,13 +96,8 @@
     OnPersonalDataChanged();
   }
 
-  // content::NotificationObserver:
-  virtual void Observe(int type,
-                       const content::NotificationSource& source,
-                       const content::NotificationDetails& details) OVERRIDE {
-    EXPECT_EQ(chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_ADDED, type);
-    infobar_service_ = InfoBarService::FromWebContents(
-        browser_->tab_strip_model()->GetActiveWebContents());
+  // infobars::InfoBarManager::Observer:
+  virtual void OnInfoBarAdded(infobars::InfoBar* infobar) OVERRIDE {
     ConfirmInfoBarDelegate* infobar_delegate =
         infobar_service_->infobar_at(0)->delegate()->AsConfirmInfoBarDelegate();
     ASSERT_TRUE(infobar_delegate);
@@ -114,7 +108,6 @@
   bool alerted_;
   bool has_run_message_loop_;
   Browser* browser_;
-  content::NotificationRegistrar registrar_;
   InfoBarService* infobar_service_;
 };
 
diff --git a/chrome/browser/autofill/autofill_cc_infobar_delegate.cc b/chrome/browser/autofill/autofill_cc_infobar_delegate.cc
index b7884fa..3bad774 100644
--- a/chrome/browser/autofill/autofill_cc_infobar_delegate.cc
+++ b/chrome/browser/autofill/autofill_cc_infobar_delegate.cc
@@ -5,11 +5,11 @@
 #include "chrome/browser/autofill/autofill_cc_infobar_delegate.h"
 
 #include "base/logging.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "components/autofill/core/browser/credit_card.h"
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/autofill/core/common/autofill_constants.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/page_navigator.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/browser/web_contents_delegate.h"
@@ -61,7 +61,8 @@
   return IDR_INFOBAR_AUTOFILL;
 }
 
-InfoBarDelegate::Type AutofillCCInfoBarDelegate::GetInfoBarType() const {
+infobars::InfoBarDelegate::Type AutofillCCInfoBarDelegate::GetInfoBarType()
+    const {
   return PAGE_ACTION_TYPE;
 }
 
diff --git a/chrome/browser/autofill/autofill_interactive_uitest.cc b/chrome/browser/autofill/autofill_interactive_uitest.cc
index 2886fb8..04e5fae 100644
--- a/chrome/browser/autofill/autofill_interactive_uitest.cc
+++ b/chrome/browser/autofill/autofill_interactive_uitest.cc
@@ -18,7 +18,6 @@
 #include "chrome/browser/autofill/personal_data_manager_factory.h"
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/infobars/confirm_infobar_delegate.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/translate/translate_infobar_delegate.h"
@@ -39,6 +38,7 @@
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/autofill/core/browser/personal_data_manager_observer.h"
 #include "components/autofill/core/browser/validation.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/navigation_controller.h"
 #include "content/public/browser/notification_observer.h"
 #include "content/public/browser/notification_registrar.h"
diff --git a/chrome/browser/background/background_application_list_model.cc b/chrome/browser/background/background_application_list_model.cc
index 7ffb220..9969a8f 100644
--- a/chrome/browser/background/background_application_list_model.cc
+++ b/chrome/browser/background/background_application_list_model.cc
@@ -176,7 +176,7 @@
     : profile_(profile) {
   DCHECK(profile_);
   registrar_.Add(this,
-                 chrome::NOTIFICATION_EXTENSION_LOADED,
+                 chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
                  content::Source<Profile>(profile));
   registrar_.Add(this,
                  chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
@@ -350,7 +350,7 @@
     return;
 
   switch (type) {
-    case chrome::NOTIFICATION_EXTENSION_LOADED:
+    case chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED:
       OnExtensionLoaded(content::Details<Extension>(details).ptr());
       break;
     case chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED:
diff --git a/chrome/browser/background/background_application_list_model.h b/chrome/browser/background/background_application_list_model.h
index a2ce3ed..dbfa18b 100644
--- a/chrome/browser/background/background_application_list_model.h
+++ b/chrome/browser/background/background_application_list_model.h
@@ -124,7 +124,7 @@
   // or removed.
   void SendApplicationListChangedNotifications();
 
-  // Invoked by Observe for NOTIFICATION_EXTENSION_LOADED.
+  // Invoked by Observe for NOTIFICATION_EXTENSION_LOADED_DEPRECATED.
   void OnExtensionLoaded(const extensions::Extension* extension);
 
   // Invoked by Observe for NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED.
diff --git a/chrome/browser/background/background_contents_service.cc b/chrome/browser/background/background_contents_service.cc
index b4b0cec..09b91d7 100644
--- a/chrome/browser/background/background_contents_service.cc
+++ b/chrome/browser/background/background_contents_service.cc
@@ -144,7 +144,7 @@
     return kNotificationPrefix + extension_id_;
   }
 
-  virtual content::RenderViewHost* GetRenderViewHost() const OVERRIDE {
+  virtual content::WebContents* GetWebContents() const OVERRIDE {
     return NULL;
   }
 
@@ -334,7 +334,8 @@
 
   // Listen for new extension installs so that we can load any associated
   // background page.
-  registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
+  registrar_.Add(this,
+                 chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
                  content::Source<Profile>(profile));
 
   // Track when the extensions crash so that the user can be notified
@@ -402,7 +403,7 @@
       RegisterBackgroundContents(bgcontents);
       break;
     }
-    case chrome::NOTIFICATION_EXTENSION_LOADED: {
+    case chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED: {
       const Extension* extension =
           content::Details<const Extension>(details).ptr();
       Profile* profile = content::Source<Profile>(source).ptr();
diff --git a/chrome/browser/background/background_mode_manager.cc b/chrome/browser/background/background_mode_manager.cc
index cc091f5..d2c79d2 100644
--- a/chrome/browser/background/background_mode_manager.cc
+++ b/chrome/browser/background/background_mode_manager.cc
@@ -276,7 +276,8 @@
   // Listen for when extensions are loaded or add the background permission so
   // we can display a "background app installed" notification and enter
   // "launch on login" mode on the Mac.
-  registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
+  registrar_.Add(this,
+                 chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
                  content::Source<Profile>(profile));
   registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_PERMISSIONS_UPDATED,
                  content::Source<Profile>(profile));
@@ -324,7 +325,7 @@
       DecrementKeepAliveCountForStartup();
       break;
 
-    case chrome::NOTIFICATION_EXTENSION_LOADED: {
+    case chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED: {
         Extension* extension = content::Details<Extension>(details).ptr();
         Profile* profile = content::Source<Profile>(source).ptr();
         if (BackgroundApplicationListModel::IsBackgroundApp(
diff --git a/chrome/browser/bookmarks/DEPS b/chrome/browser/bookmarks/DEPS
index a702b0e..e7b25b7 100644
--- a/chrome/browser/bookmarks/DEPS
+++ b/chrome/browser/bookmarks/DEPS
@@ -17,6 +17,7 @@
   "!chrome/browser/history/history_service_factory.h",
   "!chrome/browser/history/query_parser.h",
   "!chrome/browser/history/url_database.h",
+  "!chrome/browser/omnibox/omnibox_field_trial.h",
   "!chrome/browser/profiles/incognito_helpers.h",
   "!chrome/browser/profiles/profile.h",
   "!chrome/browser/profiles/startup_task_runner_service.h",
diff --git a/chrome/browser/bookmarks/bookmark_codec.cc b/chrome/browser/bookmarks/bookmark_codec.cc
index 05cd36a..3c9a93e 100644
--- a/chrome/browser/bookmarks/bookmark_codec.cc
+++ b/chrome/browser/bookmarks/bookmark_codec.cc
@@ -11,7 +11,7 @@
 #include "base/strings/string_util.h"
 #include "base/values.h"
 #include "chrome/browser/bookmarks/bookmark_model.h"
-#include "grit/generated_resources.h"
+#include "grit/component_strings.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "url/gurl.h"
 
diff --git a/chrome/browser/bookmarks/bookmark_codec.h b/chrome/browser/bookmarks/bookmark_codec.h
index d35c735..dd83d95 100644
--- a/chrome/browser/bookmarks/bookmark_codec.h
+++ b/chrome/browser/bookmarks/bookmark_codec.h
@@ -11,10 +11,9 @@
 #include "base/basictypes.h"
 #include "base/md5.h"
 #include "base/strings/string16.h"
-#include "chrome/browser/bookmarks/bookmark_model.h"
+#include "components/bookmarks/core/browser/bookmark_node.h"
 
 class BookmarkModel;
-class BookmarkNode;
 
 namespace base {
 class DictionaryValue;
diff --git a/chrome/browser/bookmarks/bookmark_codec_unittest.cc b/chrome/browser/bookmarks/bookmark_codec_unittest.cc
index 4735779..01da754 100644
--- a/chrome/browser/bookmarks/bookmark_codec_unittest.cc
+++ b/chrome/browser/bookmarks/bookmark_codec_unittest.cc
@@ -73,20 +73,20 @@
  protected:
   // Helpers to create bookmark models with different data.
   BookmarkModel* CreateTestModel1() {
-    scoped_ptr<BookmarkModel> model(new BookmarkModel(NULL));
+    scoped_ptr<BookmarkModel> model(new BookmarkModel(NULL, false));
     const BookmarkNode* bookmark_bar = model->bookmark_bar_node();
     model->AddURL(bookmark_bar, 0, ASCIIToUTF16(kUrl1Title), GURL(kUrl1Url));
     return model.release();
   }
   BookmarkModel* CreateTestModel2() {
-    scoped_ptr<BookmarkModel> model(new BookmarkModel(NULL));
+    scoped_ptr<BookmarkModel> model(new BookmarkModel(NULL, false));
     const BookmarkNode* bookmark_bar = model->bookmark_bar_node();
     model->AddURL(bookmark_bar, 0, ASCIIToUTF16(kUrl1Title), GURL(kUrl1Url));
     model->AddURL(bookmark_bar, 1, ASCIIToUTF16(kUrl2Title), GURL(kUrl2Url));
     return model.release();
   }
   BookmarkModel* CreateTestModel3() {
-    scoped_ptr<BookmarkModel> model(new BookmarkModel(NULL));
+    scoped_ptr<BookmarkModel> model(new BookmarkModel(NULL, false));
     const BookmarkNode* bookmark_bar = model->bookmark_bar_node();
     model->AddURL(bookmark_bar, 0, ASCIIToUTF16(kUrl1Title), GURL(kUrl1Url));
     const BookmarkNode* folder1 = model->AddFolder(bookmark_bar, 1,
@@ -173,7 +173,7 @@
     EXPECT_EQ("", decoder.computed_checksum());
     EXPECT_EQ("", decoder.stored_checksum());
 
-    scoped_ptr<BookmarkModel> model(new BookmarkModel(NULL));
+    scoped_ptr<BookmarkModel> model(new BookmarkModel(NULL, false));
     EXPECT_TRUE(Decode(&decoder, model.get(), value));
 
     *computed_checksum = decoder.computed_checksum();
@@ -311,7 +311,7 @@
   BookmarkCodec encoder;
   scoped_ptr<base::Value> model_value(encoder.Encode(model_to_encode.get()));
 
-  BookmarkModel decoded_model(NULL);
+  BookmarkModel decoded_model(NULL, false);
   BookmarkCodec decoder;
   ASSERT_TRUE(Decode(&decoder, &decoded_model, *model_value.get()));
   ASSERT_NO_FATAL_FAILURE(
@@ -331,7 +331,7 @@
   BookmarkCodec encoder2;
   scoped_ptr<base::Value> model_value2(encoder2.Encode(&decoded_model));
 
-  BookmarkModel decoded_model2(NULL);
+  BookmarkModel decoded_model2(NULL, false);
   BookmarkCodec decoder2;
   ASSERT_TRUE(Decode(&decoder2, &decoded_model2, *model_value2.get()));
   ASSERT_NO_FATAL_FAILURE(AssertModelsEqual(&decoded_model, &decoded_model2));
@@ -347,7 +347,7 @@
   JSONFileValueSerializer serializer(test_file);
   scoped_ptr<base::Value> root(serializer.Deserialize(NULL, NULL));
 
-  BookmarkModel decoded_model(NULL);
+  BookmarkModel decoded_model(NULL, false);
   BookmarkCodec decoder;
   ASSERT_TRUE(Decode(&decoder, &decoded_model, *root.get()));
   ExpectIDsUnique(&decoded_model);
@@ -435,7 +435,7 @@
   JSONFileValueSerializer serializer(test_file);
   scoped_ptr<base::Value> root(serializer.Deserialize(NULL, NULL));
 
-  BookmarkModel model(NULL);
+  BookmarkModel model(NULL, false);
   BookmarkCodec decoder;
   ASSERT_TRUE(Decode(&decoder, &model, *root.get()));
 
diff --git a/chrome/browser/bookmarks/bookmark_expanded_state_tracker.cc b/chrome/browser/bookmarks/bookmark_expanded_state_tracker.cc
index f64fd69..c8c26e0 100644
--- a/chrome/browser/bookmarks/bookmark_expanded_state_tracker.cc
+++ b/chrome/browser/bookmarks/bookmark_expanded_state_tracker.cc
@@ -8,8 +8,8 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/values.h"
 #include "chrome/browser/bookmarks/bookmark_model.h"
-#include "chrome/browser/bookmarks/bookmark_model_factory.h"
-#include "chrome/common/pref_names.h"
+#include "chrome/browser/bookmarks/bookmark_utils.h"
+#include "components/bookmarks/core/common/bookmark_pref_names.h"
 
 BookmarkExpandedStateTracker::BookmarkExpandedStateTracker(
     BookmarkModel* bookmark_model,
@@ -47,7 +47,7 @@
     int64 node_id;
     const BookmarkNode* node;
     if ((*i)->GetAsString(&value) && base::StringToInt64(value, &node_id) &&
-        (node = bookmark_model_->GetNodeByID(node_id)) != NULL &&
+        (node = GetBookmarkNodeByID(bookmark_model_, node_id)) != NULL &&
         node->is_folder()) {
       nodes.insert(node);
     } else {
diff --git a/chrome/browser/bookmarks/bookmark_html_writer.cc b/chrome/browser/bookmarks/bookmark_html_writer.cc
index 5e075af..ba1517d 100644
--- a/chrome/browser/bookmarks/bookmark_html_writer.cc
+++ b/chrome/browser/bookmarks/bookmark_html_writer.cc
@@ -21,10 +21,10 @@
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/favicon/favicon_service.h"
 #include "chrome/browser/favicon/favicon_service_factory.h"
-#include "chrome/common/favicon/favicon_types.h"
+#include "components/favicon_base/favicon_types.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/notification_source.h"
-#include "grit/generated_resources.h"
+#include "grit/component_strings.h"
 #include "net/base/escape.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/gfx/favicon_size.h"
@@ -460,7 +460,7 @@
           profile_, Profile::EXPLICIT_ACCESS);
       favicon_service->GetRawFaviconForURL(
           FaviconService::FaviconForURLParams(
-              GURL(url), chrome::FAVICON, gfx::kFaviconSize),
+              GURL(url), favicon_base::FAVICON, gfx::kFaviconSize),
           ui::SCALE_FACTOR_100P,
           base::Bind(&BookmarkFaviconFetcher::OnFaviconDataAvailable,
                      base::Unretained(this)),
@@ -474,7 +474,7 @@
 }
 
 void BookmarkFaviconFetcher::OnFaviconDataAvailable(
-    const chrome::FaviconBitmapResult& bitmap_result) {
+    const favicon_base::FaviconBitmapResult& bitmap_result) {
   GURL url;
   if (!bookmark_urls_.empty()) {
     url = GURL(bookmark_urls_.front());
diff --git a/chrome/browser/bookmarks/bookmark_html_writer.h b/chrome/browser/bookmarks/bookmark_html_writer.h
index a049551..bdb638c 100644
--- a/chrome/browser/bookmarks/bookmark_html_writer.h
+++ b/chrome/browser/bookmarks/bookmark_html_writer.h
@@ -13,6 +13,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/memory/ref_counted_memory.h"
 #include "base/task/cancelable_task_tracker.h"
+#include "components/favicon_base/favicon_types.h"
 #include "content/public/browser/notification_observer.h"
 #include "content/public/browser/notification_registrar.h"
 
@@ -69,7 +70,8 @@
 
   // Favicon fetch callback. After all favicons are fetched executes
   // html output on the file thread.
-  void OnFaviconDataAvailable(const chrome::FaviconBitmapResult& bitmap_result);
+  void OnFaviconDataAvailable(
+      const favicon_base::FaviconBitmapResult& bitmap_result);
 
   // The Profile object used for accessing FaviconService, bookmarks model.
   Profile* profile_;
diff --git a/chrome/browser/bookmarks/bookmark_html_writer_unittest.cc b/chrome/browser/bookmarks/bookmark_html_writer_unittest.cc
index c2331be..7266a1a 100644
--- a/chrome/browser/bookmarks/bookmark_html_writer_unittest.cc
+++ b/chrome/browser/bookmarks/bookmark_html_writer_unittest.cc
@@ -24,7 +24,7 @@
 #include "chrome/test/base/testing_profile.h"
 #include "chrome/utility/importer/bookmark_html_reader.h"
 #include "content/public/test/test_browser_thread_bundle.h"
-#include "grit/generated_resources.h"
+#include "grit/component_strings.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 #include "ui/base/l10n/l10n_util.h"
@@ -199,28 +199,36 @@
   base::Time t4(t1 + base::TimeDelta::FromHours(1));
   const BookmarkNode* f1 = model->AddFolder(
       model->bookmark_bar_node(), 0, f1_title);
-  model->AddURLWithCreationTime(f1, 0, url1_title, url1, t1);
+  model->AddURLWithCreationTimeAndMetaInfo(f1, 0, url1_title, url1, t1, NULL);
   HistoryServiceFactory::GetForProfile(&profile, Profile::EXPLICIT_ACCESS)->
       AddPage(url1, base::Time::Now(), history::SOURCE_BROWSED);
-  FaviconServiceFactory::GetForProfile(
-      &profile, Profile::EXPLICIT_ACCESS)->SetFavicons(
-          url1, url1_favicon, chrome::FAVICON,
-          gfx::Image::CreateFrom1xBitmap(bitmap));
+  FaviconServiceFactory::GetForProfile(&profile, Profile::EXPLICIT_ACCESS)
+      ->SetFavicons(url1,
+                    url1_favicon,
+                    favicon_base::FAVICON,
+                    gfx::Image::CreateFrom1xBitmap(bitmap));
   const BookmarkNode* f2 = model->AddFolder(f1, 1, f2_title);
-  model->AddURLWithCreationTime(f2, 0, url2_title, url2, t2);
-  model->AddURLWithCreationTime(model->bookmark_bar_node(),
-                                1, url3_title, url3, t3);
+  model->AddURLWithCreationTimeAndMetaInfo(f2, 0, url2_title, url2, t2, NULL);
+  model->AddURLWithCreationTimeAndMetaInfo(
+      model->bookmark_bar_node(), 1, url3_title, url3, t3, NULL);
 
-  model->AddURLWithCreationTime(model->other_node(), 0, url1_title, url1, t1);
-  model->AddURLWithCreationTime(model->other_node(), 1, url2_title, url2, t2);
+  model->AddURLWithCreationTimeAndMetaInfo(
+      model->other_node(), 0, url1_title, url1, t1, NULL);
+  model->AddURLWithCreationTimeAndMetaInfo(
+      model->other_node(), 1, url2_title, url2, t2, NULL);
   const BookmarkNode* f3 = model->AddFolder(model->other_node(), 2, f3_title);
   const BookmarkNode* f4 = model->AddFolder(f3, 0, f4_title);
-  model->AddURLWithCreationTime(f4, 0, url1_title, url1, t1);
-  model->AddURLWithCreationTime(model->bookmark_bar_node(), 2, url4_title,
-                                url4, t4);
-  model->AddURLWithCreationTime(model->mobile_node(), 0, url1_title, url1, t1);
-  model->AddURLWithCreationTime(model->mobile_node(), 1, unnamed_bookmark_title,
-                                unnamed_bookmark_url, t2);
+  model->AddURLWithCreationTimeAndMetaInfo(f4, 0, url1_title, url1, t1, NULL);
+  model->AddURLWithCreationTimeAndMetaInfo(
+      model->bookmark_bar_node(), 2, url4_title, url4, t4, NULL);
+  model->AddURLWithCreationTimeAndMetaInfo(
+      model->mobile_node(), 0, url1_title, url1, t1, NULL);
+  model->AddURLWithCreationTimeAndMetaInfo(model->mobile_node(),
+                                           1,
+                                           unnamed_bookmark_title,
+                                           unnamed_bookmark_url,
+                                           t2,
+                                           NULL);
 
   base::RunLoop run_loop;
 
@@ -230,9 +238,8 @@
   run_loop.Run();
 
   // Clear favicon so that it would be read from file.
-  FaviconServiceFactory::GetForProfile(
-      &profile, Profile::EXPLICIT_ACCESS)->SetFavicons(
-          url1, url1_favicon, chrome::FAVICON, gfx::Image());
+  FaviconServiceFactory::GetForProfile(&profile, Profile::EXPLICIT_ACCESS)
+      ->SetFavicons(url1, url1_favicon, favicon_base::FAVICON, gfx::Image());
 
   // Read the bookmarks back in.
   std::vector<ImportedBookmarkEntry> parsed_bookmarks;
diff --git a/chrome/browser/bookmarks/bookmark_index.cc b/chrome/browser/bookmarks/bookmark_index.cc
index 944437c..77c22d9 100644
--- a/chrome/browser/bookmarks/bookmark_index.cc
+++ b/chrome/browser/bookmarks/bookmark_index.cc
@@ -11,11 +11,13 @@
 #include "base/i18n/case_conversion.h"
 #include "base/strings/string16.h"
 #include "chrome/browser/bookmarks/bookmark_model.h"
-#include "chrome/browser/bookmarks/bookmark_title_match.h"
+#include "chrome/browser/bookmarks/bookmark_utils.h"
 #include "chrome/browser/history/history_service.h"
 #include "chrome/browser/history/history_service_factory.h"
-#include "chrome/browser/history/query_parser.h"
 #include "chrome/browser/history/url_database.h"
+#include "components/bookmarks/core/browser/bookmark_match.h"
+#include "components/query_parser/query_parser.h"
+#include "components/query_parser/snippet.h"
 #include "third_party/icu/source/common/unicode/normalizer2.h"
 
 namespace {
@@ -71,8 +73,12 @@
   return nodes.empty() ? terms.front()->second.end() : nodes.end();
 }
 
-BookmarkIndex::BookmarkIndex(content::BrowserContext* browser_context)
-    : browser_context_(browser_context) {
+BookmarkIndex::BookmarkIndex(content::BrowserContext* browser_context,
+                             bool index_urls,
+                             const std::string& languages)
+    : index_urls_(index_urls),
+      browser_context_(browser_context),
+      languages_(languages) {
 }
 
 BookmarkIndex::~BookmarkIndex() {
@@ -85,6 +91,12 @@
       ExtractQueryWords(Normalize(node->GetTitle()));
   for (size_t i = 0; i < terms.size(); ++i)
     RegisterNode(terms[i], node);
+  if (index_urls_) {
+    terms = ExtractQueryWords(
+        bookmark_utils::CleanUpUrlForMatching(node->url(), languages_));
+    for (size_t i = 0; i < terms.size(); ++i)
+      RegisterNode(terms[i], node);
+  }
 }
 
 void BookmarkIndex::Remove(const BookmarkNode* node) {
@@ -95,12 +107,17 @@
       ExtractQueryWords(Normalize(node->GetTitle()));
   for (size_t i = 0; i < terms.size(); ++i)
     UnregisterNode(terms[i], node);
+  if (index_urls_) {
+    terms = ExtractQueryWords(
+        bookmark_utils::CleanUpUrlForMatching(node->url(), languages_));
+    for (size_t i = 0; i < terms.size(); ++i)
+      UnregisterNode(terms[i], node);
+  }
 }
 
-void BookmarkIndex::GetBookmarksWithTitlesMatching(
-    const base::string16& input_query,
-    size_t max_count,
-    std::vector<BookmarkTitleMatch>* results) {
+void BookmarkIndex::GetBookmarksMatching(const base::string16& input_query,
+                                         size_t max_count,
+                                         std::vector<BookmarkMatch>* results) {
   const base::string16 query = Normalize(input_query);
   std::vector<base::string16> terms = ExtractQueryWords(query);
   if (terms.empty())
@@ -108,7 +125,7 @@
 
   Matches matches;
   for (size_t i = 0; i < terms.size(); ++i) {
-    if (!GetBookmarksWithTitleMatchingTerm(terms[i], i == 0, &matches))
+    if (!GetBookmarksMatchingTerm(terms[i], i == 0, &matches))
       return;
   }
 
@@ -118,8 +135,8 @@
   // We use a QueryParser to fill in match positions for us. It's not the most
   // efficient way to go about this, but by the time we get here we know what
   // matches and so this shouldn't be performance critical.
-  QueryParser parser;
-  ScopedVector<QueryNode> query_nodes;
+  query_parser::QueryParser parser;
+  ScopedVector<query_parser::QueryNode> query_nodes;
   parser.ParseQueryNodes(query, &query_nodes.get());
 
   // The highest typed counts should be at the beginning of the results vector
@@ -176,30 +193,56 @@
 
 void BookmarkIndex::AddMatchToResults(
     const BookmarkNode* node,
-    QueryParser* parser,
-    const std::vector<QueryNode*>& query_nodes,
-    std::vector<BookmarkTitleMatch>* results) {
-  BookmarkTitleMatch title_match;
+    query_parser::QueryParser* parser,
+    const query_parser::QueryNodeStarVector& query_nodes,
+    std::vector<BookmarkMatch>* results) {
   // Check that the result matches the query.  The previous search
   // was a simple per-word search, while the more complex matching
   // of QueryParser may filter it out.  For example, the query
   // ["thi"] will match the bookmark titled [Thinking], but since
   // ["thi"] is quoted we don't want to do a prefix match.
-  if (parser->DoesQueryMatch(Normalize(node->GetTitle()), query_nodes,
-                             &(title_match.match_positions))) {
-    title_match.node = node;
-    results->push_back(title_match);
+  query_parser::QueryWordVector title_words, url_words;
+  const base::string16 lower_title =
+      base::i18n::ToLower(Normalize(node->GetTitle()));
+  parser->ExtractQueryWords(lower_title, &title_words);
+  if (index_urls_) {
+    parser->ExtractQueryWords(
+        bookmark_utils::CleanUpUrlForMatching(node->url(), languages_),
+        &url_words);
   }
+  query_parser::Snippet::MatchPositions title_matches, url_matches;
+  for (size_t i = 0; i < query_nodes.size(); ++i) {
+    const bool has_title_matches =
+        query_nodes[i]->HasMatchIn(title_words, &title_matches);
+    const bool has_url_matches = index_urls_ &&
+        query_nodes[i]->HasMatchIn(url_words, &url_matches);
+    if (!has_title_matches && !has_url_matches)
+      return;
+    query_parser::QueryParser::SortAndCoalesceMatchPositions(&title_matches);
+    if (index_urls_)
+      query_parser::QueryParser::SortAndCoalesceMatchPositions(&url_matches);
+  }
+  BookmarkMatch match;
+  if (lower_title.length() == node->GetTitle().length()) {
+    // Only use title matches if the lowercase string is the same length
+    // as the original string, otherwise the matches are meaningless.
+    // TODO(mpearson): revise match positions appropriately.
+    match.title_match_positions.swap(title_matches);
+  }
+  if (index_urls_)
+    match.url_match_positions.swap(url_matches);
+  match.node = node;
+  results->push_back(match);
 }
 
-bool BookmarkIndex::GetBookmarksWithTitleMatchingTerm(const base::string16& term,
+bool BookmarkIndex::GetBookmarksMatchingTerm(const base::string16& term,
                                                       bool first_term,
                                                       Matches* matches) {
   Index::const_iterator i = index_.lower_bound(term);
   if (i == index_.end())
     return false;
 
-  if (!QueryParser::IsWordLongEnoughForPrefixSearch(term)) {
+  if (!query_parser::QueryParser::IsWordLongEnoughForPrefixSearch(term)) {
     // Term is too short for prefix match, compare using exact match.
     if (i->first != term)
       return false;  // No bookmarks with this term.
@@ -279,7 +322,7 @@
   std::vector<base::string16> terms;
   if (query.empty())
     return std::vector<base::string16>();
-  QueryParser parser;
+  query_parser::QueryParser parser;
   parser.ParseQueryWords(base::i18n::ToLower(query), &terms);
   return terms;
 }
diff --git a/chrome/browser/bookmarks/bookmark_index.h b/chrome/browser/bookmarks/bookmark_index.h
index f406268..93ce5f1 100644
--- a/chrome/browser/bookmarks/bookmark_index.h
+++ b/chrome/browser/bookmarks/bookmark_index.h
@@ -11,11 +11,10 @@
 
 #include "base/basictypes.h"
 #include "base/strings/string16.h"
+#include "components/query_parser/query_parser.h"
 
 class BookmarkNode;
-struct BookmarkTitleMatch;
-class QueryNode;
-class QueryParser;
+struct BookmarkMatch;
 
 namespace content {
 class BrowserContext;
@@ -25,16 +24,21 @@
 class URLDatabase;
 }
 
-// BookmarkIndex maintains an index of the titles of bookmarks for quick
-// look up. BookmarkIndex is owned and maintained by BookmarkModel, you
+// BookmarkIndex maintains an index of the titles and URLs of bookmarks for
+// quick look up. BookmarkIndex is owned and maintained by BookmarkModel, you
 // shouldn't need to interact directly with BookmarkIndex.
 //
 // BookmarkIndex maintains the index (index_) as a map of sets. The map (type
 // Index) maps from a lower case string to the set (type NodeSet) of
-// BookmarkNodes that contain that string in their title.
+// BookmarkNodes that contain that string in their title or URL.
 class BookmarkIndex {
  public:
-  explicit BookmarkIndex(content::BrowserContext* browser_context);
+  // |index_urls| says whether URLs should be stored in the index in addition
+  // to bookmark titles.  |languages| used to help parse IDNs in URLs for the
+  // bookmark index.
+  BookmarkIndex(content::BrowserContext* browser_context,
+                bool index_urls,
+                const std::string& languages);
   ~BookmarkIndex();
 
   // Invoked when a bookmark has been added to the model.
@@ -43,11 +47,12 @@
   // Invoked when a bookmark has been removed from the model.
   void Remove(const BookmarkNode* node);
 
-  // Returns up to |max_count| of bookmarks containing the text |query|.
-  void GetBookmarksWithTitlesMatching(
+  // Returns up to |max_count| of bookmarks containing each term from
+  // the text |query| in either the title or the URL.
+  void GetBookmarksMatching(
       const base::string16& query,
       size_t max_count,
-      std::vector<BookmarkTitleMatch>* results);
+      std::vector<BookmarkMatch>* results);
 
  private:
   typedef std::set<const BookmarkNode*> NodeSet;
@@ -82,23 +87,24 @@
   }
 
   // Add |node| to |results| if the node matches the query.
-  void AddMatchToResults(const BookmarkNode* node,
-                         QueryParser* parser,
-                         const std::vector<QueryNode*>& query_nodes,
-                         std::vector<BookmarkTitleMatch>* results);
+  void AddMatchToResults(
+      const BookmarkNode* node,
+      query_parser::QueryParser* parser,
+      const query_parser::QueryNodeStarVector& query_nodes,
+      std::vector<BookmarkMatch>* results);
 
   // Populates |matches| for the specified term. If |first_term| is true, this
   // is the first term in the query. Returns true if there is at least one node
   // matching the term.
-  bool GetBookmarksWithTitleMatchingTerm(const base::string16& term,
-                                         bool first_term,
-                                         Matches* matches);
+  bool GetBookmarksMatchingTerm(const base::string16& term,
+                                bool first_term,
+                                Matches* matches);
 
   // Iterates over |matches| updating each Match's nodes to contain the
   // intersection of the Match's current nodes and the nodes at |index_i|.
   // If the intersection is empty, the Match is removed.
   //
-  // This is invoked from GetBookmarksWithTitleMatchingTerm.
+  // This is invoked from GetBookmarksMatchingTerm.
   void CombineMatchesInPlace(const Index::const_iterator& index_i,
                              Matches* matches);
 
@@ -110,7 +116,7 @@
   // non-empty the result is added to result, not combined in place. This
   // variant is used for prefix matching.
   //
-  // This is invoked from GetBookmarksWithTitleMatchingTerm.
+  // This is invoked from GetBookmarksMatchingTerm.
   void CombineMatches(const Index::const_iterator& index_i,
                       const Matches& current_matches,
                       Matches* result);
@@ -126,8 +132,14 @@
 
   Index index_;
 
+  // True if URLs are stored in the index as well as bookmark titles.
+  const bool index_urls_;
+
   content::BrowserContext* browser_context_;
 
+  // Languages used to help parse IDNs in URLs for the bookmark index.
+  const std::string languages_;
+
   DISALLOW_COPY_AND_ASSIGN(BookmarkIndex);
 };
 
diff --git a/chrome/browser/bookmarks/bookmark_index_unittest.cc b/chrome/browser/bookmarks/bookmark_index_unittest.cc
index a0ec75f..557e1a2 100644
--- a/chrome/browser/bookmarks/bookmark_index_unittest.cc
+++ b/chrome/browser/bookmarks/bookmark_index_unittest.cc
@@ -15,11 +15,11 @@
 #include "chrome/browser/bookmarks/bookmark_model.h"
 #include "chrome/browser/bookmarks/bookmark_model_factory.h"
 #include "chrome/browser/bookmarks/bookmark_test_helpers.h"
-#include "chrome/browser/bookmarks/bookmark_title_match.h"
 #include "chrome/browser/history/history_service.h"
 #include "chrome/browser/history/history_service_factory.h"
 #include "chrome/browser/history/url_database.h"
 #include "chrome/test/base/testing_profile.h"
+#include "components/bookmarks/core/browser/bookmark_match.h"
 #include "content/public/test/test_browser_thread_bundle.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -27,20 +27,27 @@
 
 class BookmarkIndexTest : public testing::Test {
  public:
-  BookmarkIndexTest() : model_(new BookmarkModel(NULL)) {}
-
-  void AddBookmarksWithTitles(const char** titles, size_t count) {
-    std::vector<std::string> title_vector;
-    for (size_t i = 0; i < count; ++i)
-      title_vector.push_back(titles[i]);
-    AddBookmarksWithTitles(title_vector);
+  BookmarkIndexTest() : model_(new BookmarkModel(NULL, false)) {
   }
 
-  void AddBookmarksWithTitles(const std::vector<std::string>& titles) {
-    GURL url("about:blank");
-    for (size_t i = 0; i < titles.size(); ++i)
+  typedef std::pair<std::string, std::string> TitleAndURL;
+
+  void AddBookmarks(const char** titles, const char** urls, size_t count) {
+    // The pair is (title, url).
+    std::vector<TitleAndURL> bookmarks;
+    for (size_t i = 0; i < count; ++i) {
+      TitleAndURL bookmark(titles[i], urls[i]);
+      bookmarks.push_back(bookmark);
+    }
+    AddBookmarks(bookmarks);
+  }
+
+  void AddBookmarks(const std::vector<TitleAndURL> bookmarks) {
+    for (size_t i = 0; i < bookmarks.size(); ++i) {
       model_->AddURL(model_->other_node(), static_cast<int>(i),
-                     ASCIIToUTF16(titles[i]), url);
+                     ASCIIToUTF16(bookmarks[i].first),
+                     GURL(bookmarks[i].second));
+    }
   }
 
   void ExpectMatches(const std::string& query,
@@ -54,8 +61,8 @@
 
   void ExpectMatches(const std::string& query,
                      const std::vector<std::string>& expected_titles) {
-    std::vector<BookmarkTitleMatch> matches;
-    model_->GetBookmarksWithTitlesMatching(ASCIIToUTF16(query), 1000, &matches);
+    std::vector<BookmarkMatch> matches;
+    model_->GetBookmarksMatching(ASCIIToUTF16(query), 1000, &matches);
     ASSERT_EQ(expected_titles.size(), matches.size());
     for (size_t i = 0; i < expected_titles.size(); ++i) {
       bool found = false;
@@ -71,14 +78,14 @@
   }
 
   void ExtractMatchPositions(const std::string& string,
-                             BookmarkTitleMatch::MatchPositions* matches) {
+                             BookmarkMatch::MatchPositions* matches) {
     std::vector<std::string> match_strings;
     base::SplitString(string, ':', &match_strings);
     for (size_t i = 0; i < match_strings.size(); ++i) {
       std::vector<std::string> chunks;
       base::SplitString(match_strings[i], ',', &chunks);
       ASSERT_EQ(2U, chunks.size());
-      matches->push_back(BookmarkTitleMatch::MatchPosition());
+      matches->push_back(BookmarkMatch::MatchPosition());
       int chunks0, chunks1;
       base::StringToInt(chunks[0], &chunks0);
       base::StringToInt(chunks[1], &chunks1);
@@ -88,16 +95,12 @@
   }
 
   void ExpectMatchPositions(
-      const std::string& query,
-      const BookmarkTitleMatch::MatchPositions& expected_positions) {
-    std::vector<BookmarkTitleMatch> matches;
-    model_->GetBookmarksWithTitlesMatching(ASCIIToUTF16(query), 1000, &matches);
-    ASSERT_EQ(1U, matches.size());
-    const BookmarkTitleMatch& match = matches[0];
-    ASSERT_EQ(expected_positions.size(), match.match_positions.size());
+      const BookmarkMatch::MatchPositions& actual_positions,
+      const BookmarkMatch::MatchPositions& expected_positions) {
+    ASSERT_EQ(expected_positions.size(), actual_positions.size());
     for (size_t i = 0; i < expected_positions.size(); ++i) {
-      EXPECT_EQ(expected_positions[i].first, match.match_positions[i].first);
-      EXPECT_EQ(expected_positions[i].second, match.match_positions[i].second);
+      EXPECT_EQ(expected_positions[i].first, actual_positions[i].first);
+      EXPECT_EQ(expected_positions[i].second, actual_positions[i].second);
     }
   }
 
@@ -110,9 +113,9 @@
 
 // Various permutations with differing input, queries and output that exercises
 // all query paths.
-TEST_F(BookmarkIndexTest, Tests) {
+TEST_F(BookmarkIndexTest, GetBookmarksMatching) {
   struct TestData {
-    const std::string input;
+    const std::string titles;
     const std::string query;
     const std::string expected;
   } data[] = {
@@ -144,8 +147,13 @@
   };
   for (size_t i = 0; i < ARRAYSIZE_UNSAFE(data); ++i) {
     std::vector<std::string> titles;
-    base::SplitString(data[i].input, ';', &titles);
-    AddBookmarksWithTitles(titles);
+    base::SplitString(data[i].titles, ';', &titles);
+    std::vector<TitleAndURL> bookmarks;
+    for (size_t j = 0; j < titles.size(); ++j) {
+      TitleAndURL bookmark(titles[j], "about:blank");
+      bookmarks.push_back(bookmark);
+    }
+    AddBookmarks(bookmarks);
 
     std::vector<std::string> expected;
     if (!data[i].expected.empty())
@@ -153,11 +161,69 @@
 
     ExpectMatches(data[i].query, expected);
 
-    model_.reset(new BookmarkModel(NULL));
+    model_.reset(new BookmarkModel(NULL, false));
   }
 }
 
-TEST_F(BookmarkIndexTest, TestNormalization) {
+// Analogous to GetBookmarksMatching, this test tests various permutations
+// of title, URL, and input to see if the title/URL matches the input as
+// expected.
+TEST_F(BookmarkIndexTest, GetBookmarksMatchingWithURLs) {
+  struct TestData {
+    const std::string query;
+    const std::string title;
+    const std::string url;
+    const bool should_be_retrieved;
+  } data[] = {
+    // Test single-word inputs.  Include both exact matches and prefix matches.
+    { "foo", "Foo",    "http://www.bar.com/",    true  },
+    { "foo", "Foodie", "http://www.bar.com/",    true  },
+    { "foo", "Bar",    "http://www.foo.com/",    true  },
+    { "foo", "Bar",    "http://www.foodie.com/", true  },
+    { "foo", "Foo",    "http://www.foo.com/",    true  },
+    { "foo", "Bar",    "http://www.bar.com/",    false },
+    { "foo", "Bar",    "http://www.bar.com/blah/foo/blah-again/ ",    true  },
+    { "foo", "Bar",    "http://www.bar.com/blah/foodie/blah-again/ ", true  },
+    { "foo", "Bar",    "http://www.bar.com/blah-foo/blah-again/ ",    true  },
+    { "foo", "Bar",    "http://www.bar.com/blah-foodie/blah-again/ ", true  },
+    { "foo", "Bar",    "http://www.bar.com/blahafoo/blah-again/ ",    false },
+
+    // Test multi-word inputs.
+    { "foo bar", "Foo Bar",      "http://baz.com/",   true  },
+    { "foo bar", "Foodie Bar",   "http://baz.com/",   true  },
+    { "bar foo", "Foo Bar",      "http://baz.com/",   true  },
+    { "bar foo", "Foodie Barly", "http://baz.com/",   true  },
+    { "foo bar", "Foo Baz",      "http://baz.com/",   false },
+    { "foo bar", "Foo Baz",      "http://bar.com/",   true  },
+    { "foo bar", "Foo Baz",      "http://barly.com/", true  },
+    { "foo bar", "Foodie Baz",   "http://barly.com/", true  },
+    { "bar foo", "Foo Baz",      "http://bar.com/",   true  },
+    { "bar foo", "Foo Baz",      "http://barly.com/", true  },
+    { "foo bar", "Baz Bar",      "http://blah.com/foo",         true  },
+    { "foo bar", "Baz Barly",    "http://blah.com/foodie",      true  },
+    { "foo bar", "Baz Bur",      "http://blah.com/foo/bar",     true  },
+    { "foo bar", "Baz Bur",      "http://blah.com/food/barly",  true  },
+    { "foo bar", "Baz Bur",      "http://bar.com/blah/foo",     true  },
+    { "foo bar", "Baz Bur",      "http://barly.com/blah/food",  true  },
+    { "foo bar", "Baz Bur",      "http://bar.com/blah/flub",    false },
+    { "foo bar", "Baz Bur",      "http://foo.com/blah/flub",    false }
+  };
+
+  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(data); ++i) {
+    model_.reset(new BookmarkModel(NULL, true));
+    std::vector<TitleAndURL> bookmarks;
+    bookmarks.push_back(TitleAndURL(data[i].title, data[i].url));
+    AddBookmarks(bookmarks);
+
+    std::vector<std::string> expected;
+    if (data[i].should_be_retrieved)
+      expected.push_back(data[i].title);
+
+    ExpectMatches(data[i].query, expected);
+  }
+}
+
+TEST_F(BookmarkIndexTest, Normalization) {
   struct TestData {
     const char* title;
     const char* query;
@@ -179,25 +245,25 @@
   for (size_t i = 0; i < ARRAYSIZE_UNSAFE(data); ++i) {
     model_->AddURL(model_->other_node(), 0, base::UTF8ToUTF16(data[i].title),
                    url);
-    std::vector<BookmarkTitleMatch> matches;
-    model_->GetBookmarksWithTitlesMatching(
+    std::vector<BookmarkMatch> matches;
+    model_->GetBookmarksMatching(
         base::UTF8ToUTF16(data[i].query), 10, &matches);
     EXPECT_EQ(1u, matches.size());
-    model_.reset(new BookmarkModel(NULL));
+    model_.reset(new BookmarkModel(NULL, false));
   }
 }
 
-// Makes sure match positions are updated appropriately.
-TEST_F(BookmarkIndexTest, MatchPositions) {
+// Makes sure match positions are updated appropriately for title matches.
+TEST_F(BookmarkIndexTest, MatchPositionsTitles) {
   struct TestData {
     const std::string title;
     const std::string query;
-    const std::string expected;
+    const std::string expected_title_match_positions;
   } data[] = {
     // Trivial test case of only one term, exact match.
     { "a",                        "A",        "0,1" },
     { "foo bar",                  "bar",      "4,7" },
-    { "fooey bark",               "bar foo",  "0,3:6,9"},
+    { "fooey bark",               "bar foo",  "0,3:6,9" },
     // Non-trivial tests.
     { "foobar foo",               "foobar foo",   "0,6:7,10" },
     { "foobar foo",               "foo foobar",   "0,6:7,10" },
@@ -205,22 +271,70 @@
     { "foobar foobar",            "foo foobar",   "0,6:7,13" },
   };
   for (size_t i = 0; i < ARRAYSIZE_UNSAFE(data); ++i) {
-    std::vector<std::string> titles;
-    titles.push_back(data[i].title);
-    AddBookmarksWithTitles(titles);
+    std::vector<TitleAndURL> bookmarks;
+    TitleAndURL bookmark(data[i].title, "about:blank");
+    bookmarks.push_back(bookmark);
+    AddBookmarks(bookmarks);
 
-    BookmarkTitleMatch::MatchPositions expected_matches;
-    ExtractMatchPositions(data[i].expected, &expected_matches);
-    ExpectMatchPositions(data[i].query, expected_matches);
+    std::vector<BookmarkMatch> matches;
+    model_->GetBookmarksMatching(ASCIIToUTF16(data[i].query), 1000, &matches);
+    ASSERT_EQ(1U, matches.size());
 
-    model_.reset(new BookmarkModel(NULL));
+    BookmarkMatch::MatchPositions expected_title_matches;
+    ExtractMatchPositions(data[i].expected_title_match_positions,
+                          &expected_title_matches);
+    ExpectMatchPositions(matches[0].title_match_positions,
+                         expected_title_matches);
+
+    model_.reset(new BookmarkModel(NULL, false));
+  }
+}
+
+// Makes sure match positions are updated appropriately for URL matches.
+TEST_F(BookmarkIndexTest, MatchPositionsURLs) {
+  struct TestData {
+    const std::string query;
+    const std::string url;
+    const std::string expected_url_match_positions;
+  } data[] = {
+    { "foo",      "http://www.foo.com/",    "11,14" },
+    { "foo",      "http://www.foodie.com/", "11,14" },
+    { "foo",      "http://www.foofoo.com/", "11,14" },
+    { "www",      "http://www.foo.com/",    "7,10"  },
+    { "foo",      "http://www.foodie.com/blah/foo/fi", "11,14:27,30"      },
+    { "foo",      "http://www.blah.com/blah/foo/fi",   "25,28"            },
+    { "foo www",  "http://www.foodie.com/blah/foo/fi", "7,10:11,14:27,30" },
+    { "www foo",  "http://www.foodie.com/blah/foo/fi", "7,10:11,14:27,30" },
+    { "www bla",  "http://www.foodie.com/blah/foo/fi", "7,10:22,25"       },
+    { "http",     "http://www.foo.com/",               "0,4"              },
+    { "http www", "http://www.foo.com/",               "0,4:7,10"         },
+    { "http foo", "http://www.foo.com/",               "0,4:11,14"        },
+    { "http foo", "http://www.bar.com/baz/foodie/hi",  "0,4:23,26"        }
+  };
+
+  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(data); ++i) {
+    model_.reset(new BookmarkModel(NULL, true));
+    std::vector<TitleAndURL> bookmarks;
+    TitleAndURL bookmark("123456", data[i].url);
+    bookmarks.push_back(bookmark);
+    AddBookmarks(bookmarks);
+
+    std::vector<BookmarkMatch> matches;
+    model_->GetBookmarksMatching(ASCIIToUTF16(data[i].query), 1000, &matches);
+    ASSERT_EQ(1U, matches.size()) << data[i].url << data[i].query;
+
+    BookmarkMatch::MatchPositions expected_url_matches;
+    ExtractMatchPositions(data[i].expected_url_match_positions,
+                          &expected_url_matches);
+    ExpectMatchPositions(matches[0].url_match_positions, expected_url_matches);
   }
 }
 
 // Makes sure index is updated when a node is removed.
 TEST_F(BookmarkIndexTest, Remove) {
-  const char* input[] = { "a", "b" };
-  AddBookmarksWithTitles(input, ARRAYSIZE_UNSAFE(input));
+  const char* titles[] = { "a", "b" };
+  const char* urls[] = { "about:blank", "about:blank" };
+  AddBookmarks(titles, urls, ARRAYSIZE_UNSAFE(titles));
 
   // Remove the node and make sure we don't get back any results.
   model_->Remove(model_->other_node(), 0);
@@ -229,8 +343,9 @@
 
 // Makes sure index is updated when a node's title is changed.
 TEST_F(BookmarkIndexTest, ChangeTitle) {
-  const char* input[] = { "a", "b" };
-  AddBookmarksWithTitles(input, ARRAYSIZE_UNSAFE(input));
+  const char* titles[] = { "a", "b" };
+  const char* urls[] = { "about:blank", "about:blank" };
+  AddBookmarks(titles, urls, ARRAYSIZE_UNSAFE(titles));
 
   // Remove the node and make sure we don't get back any results.
   const char* expected[] = { "blah" };
@@ -240,11 +355,12 @@
 
 // Makes sure no more than max queries is returned.
 TEST_F(BookmarkIndexTest, HonorMax) {
-  const char* input[] = { "abcd", "abcde" };
-  AddBookmarksWithTitles(input, ARRAYSIZE_UNSAFE(input));
+  const char* titles[] = { "abcd", "abcde" };
+  const char* urls[] = { "about:blank", "about:blank" };
+  AddBookmarks(titles, urls, ARRAYSIZE_UNSAFE(titles));
 
-  std::vector<BookmarkTitleMatch> matches;
-  model_->GetBookmarksWithTitlesMatching(ASCIIToUTF16("ABc"), 1, &matches);
+  std::vector<BookmarkMatch> matches;
+  model_->GetBookmarksMatching(ASCIIToUTF16("ABc"), 1, &matches);
   EXPECT_EQ(1U, matches.size());
 }
 
@@ -255,11 +371,11 @@
                                           base::WideToUTF16(L"\u0130 i"),
                                           GURL("http://www.google.com"));
 
-  std::vector<BookmarkTitleMatch> matches;
-  model_->GetBookmarksWithTitlesMatching(ASCIIToUTF16("i"), 100, &matches);
+  std::vector<BookmarkMatch> matches;
+  model_->GetBookmarksMatching(ASCIIToUTF16("i"), 100, &matches);
   ASSERT_EQ(1U, matches.size());
   EXPECT_TRUE(matches[0].node == n1);
-  EXPECT_TRUE(matches[0].match_positions.empty());
+  EXPECT_TRUE(matches[0].title_match_positions.empty());
 }
 
 TEST_F(BookmarkIndexTest, GetResultsSortedByTypedCount) {
@@ -320,8 +436,8 @@
   EXPECT_EQ(data[3].title, base::UTF16ToUTF8(result4.title()));
 
   // Populate match nodes.
-  std::vector<BookmarkTitleMatch> matches;
-  model->GetBookmarksWithTitlesMatching(ASCIIToUTF16("google"), 4, &matches);
+  std::vector<BookmarkMatch> matches;
+  model->GetBookmarksMatching(ASCIIToUTF16("google"), 4, &matches);
 
   // The resulting order should be:
   // 1. Google (google.com) 100
@@ -336,7 +452,7 @@
 
   matches.clear();
   // Select top two matches.
-  model->GetBookmarksWithTitlesMatching(ASCIIToUTF16("google"), 2, &matches);
+  model->GetBookmarksMatching(ASCIIToUTF16("google"), 2, &matches);
 
   EXPECT_EQ(2, static_cast<int>(matches.size()));
   EXPECT_EQ(data[0].url, matches[0].node->url());
diff --git a/chrome/browser/bookmarks/bookmark_model.cc b/chrome/browser/bookmarks/bookmark_model.cc
index 2f28132..973c26e 100644
--- a/chrome/browser/bookmarks/bookmark_model.cc
+++ b/chrome/browser/bookmarks/bookmark_model.cc
@@ -10,12 +10,12 @@
 #include "base/bind.h"
 #include "base/bind_helpers.h"
 #include "base/i18n/string_compare.h"
+#include "base/prefs/pref_service.h"
 #include "base/sequenced_task_runner.h"
 #include "chrome/browser/bookmarks/bookmark_expanded_state_tracker.h"
 #include "chrome/browser/bookmarks/bookmark_index.h"
 #include "chrome/browser/bookmarks/bookmark_model_observer.h"
 #include "chrome/browser/bookmarks/bookmark_storage.h"
-#include "chrome/browser/bookmarks/bookmark_title_match.h"
 #include "chrome/browser/bookmarks/bookmark_utils.h"
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/favicon/favicon_changed_details.h"
@@ -24,10 +24,12 @@
 #include "chrome/browser/history/history_service.h"
 #include "chrome/browser/history/history_service_factory.h"
 #include "chrome/browser/profiles/profile.h"
-#include "chrome/common/favicon/favicon_types.h"
+#include "chrome/common/pref_names.h"
+#include "components/bookmarks/core/browser/bookmark_match.h"
+#include "components/favicon_base/favicon_types.h"
 #include "content/public/browser/notification_details.h"
 #include "content/public/browser/notification_source.h"
-#include "grit/generated_resources.h"
+#include "grit/component_strings.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/gfx/favicon_size.h"
 #include "ui/gfx/image/image_util.h"
@@ -70,7 +72,8 @@
 
 // BookmarkModel --------------------------------------------------------------
 
-BookmarkModel::BookmarkModel(Profile* profile)
+BookmarkModel::BookmarkModel(Profile* profile,
+                             bool index_urls)
     : profile_(profile),
       loaded_(false),
       root_(GURL()),
@@ -79,6 +82,7 @@
       mobile_node_(NULL),
       next_node_id_(1),
       observers_(ObserverList<BookmarkModelObserver>::NOTIFY_EXISTING_ONLY),
+      index_urls_(index_urls),
       loaded_signal_(true, false),
       extensive_changes_(0) {
   if (!profile_) {
@@ -493,14 +497,16 @@
   loaded_signal_.Wait();
 }
 
-const BookmarkNode* BookmarkModel::GetNodeByID(int64 id) const {
-  // TODO(sky): TreeNode needs a method that visits all nodes using a predicate.
-  return GetNodeByID(&root_, id);
-}
-
 const BookmarkNode* BookmarkModel::AddFolder(const BookmarkNode* parent,
                                              int index,
                                              const base::string16& title) {
+  return AddFolderWithMetaInfo(parent, index, title, NULL);
+}
+const BookmarkNode* BookmarkModel::AddFolderWithMetaInfo(
+    const BookmarkNode* parent,
+    int index,
+    const base::string16& title,
+    const BookmarkNode::MetaInfoMap* meta_info) {
   if (!loaded_ || is_root_node(parent) || !IsValidIndex(parent, index, true)) {
     // Can't add to the root.
     NOTREACHED();
@@ -512,6 +518,8 @@
   // Folders shouldn't have line breaks in their titles.
   new_node->SetTitle(title);
   new_node->set_type(BookmarkNode::FOLDER);
+  if (meta_info)
+    new_node->SetMetaInfoMap(*meta_info);
 
   return AddNode(AsMutable(parent), index, new_node);
 }
@@ -520,17 +528,22 @@
                                           int index,
                                           const base::string16& title,
                                           const GURL& url) {
-  return AddURLWithCreationTime(parent, index,
-                                base::CollapseWhitespace(title, false),
-                                url, Time::Now());
+  return AddURLWithCreationTimeAndMetaInfo(
+      parent,
+      index,
+      base::CollapseWhitespace(title, false),
+      url,
+      Time::Now(),
+      NULL);
 }
 
-const BookmarkNode* BookmarkModel::AddURLWithCreationTime(
+const BookmarkNode* BookmarkModel::AddURLWithCreationTimeAndMetaInfo(
     const BookmarkNode* parent,
     int index,
     const base::string16& title,
     const GURL& url,
-    const Time& creation_time) {
+    const Time& creation_time,
+    const BookmarkNode::MetaInfoMap* meta_info) {
   if (!loaded_ || !url.is_valid() || is_root_node(parent) ||
       !IsValidIndex(parent, index, true)) {
     NOTREACHED();
@@ -545,6 +558,8 @@
   new_node->SetTitle(title);
   new_node->set_date_added(creation_time);
   new_node->set_type(BookmarkNode::URL);
+  if (meta_info)
+    new_node->SetMetaInfoMap(*meta_info);
 
   {
     // Only hold the lock for the duration of the insert.
@@ -614,14 +629,14 @@
   SetDateFolderModified(node, Time());
 }
 
-void BookmarkModel::GetBookmarksWithTitlesMatching(
+void BookmarkModel::GetBookmarksMatching(
     const base::string16& text,
     size_t max_count,
-    std::vector<BookmarkTitleMatch>* matches) {
+    std::vector<BookmarkMatch>* matches) {
   if (!loaded_)
     return;
 
-  index_->GetBookmarksWithTitlesMatching(text, max_count, matches);
+  index_->GetBookmarksMatching(text, max_count, matches);
 }
 
 void BookmarkModel::ClearStore() {
@@ -817,19 +832,6 @@
   return node;
 }
 
-const BookmarkNode* BookmarkModel::GetNodeByID(const BookmarkNode* node,
-                                               int64 id) const {
-  if (node->id() == id)
-    return node;
-
-  for (int i = 0, child_count = node->child_count(); i < child_count; ++i) {
-    const BookmarkNode* result = GetNodeByID(node->GetChild(i), id);
-    if (result)
-      return result;
-  }
-  return NULL;
-}
-
 bool BookmarkModel::IsValidIndex(const BookmarkNode* parent,
                                  int index,
                                  bool allow_end) {
@@ -871,7 +873,7 @@
 
 void BookmarkModel::OnFaviconDataAvailable(
     BookmarkNode* node,
-    const chrome::FaviconImageResult& image_result) {
+    const favicon_base::FaviconImageResult& image_result) {
   DCHECK(node);
   node->set_favicon_load_task_id(base::CancelableTaskTracker::kBadTaskId);
   node->set_favicon_state(BookmarkNode::LOADED_FAVICON);
@@ -894,7 +896,7 @@
   base::CancelableTaskTracker::TaskId taskId =
       favicon_service->GetFaviconImageForURL(
           FaviconService::FaviconForURLParams(
-              node->url(), chrome::FAVICON, gfx::kFaviconSize),
+              node->url(), favicon_base::FAVICON, gfx::kFaviconSize),
           base::Bind(&BookmarkModel::OnFaviconDataAvailable,
                      base::Unretained(this),
                      node),
@@ -963,7 +965,13 @@
       CreatePermanentNode(BookmarkNode::OTHER_NODE);
   BookmarkPermanentNode* mobile_node =
       CreatePermanentNode(BookmarkNode::MOBILE);
-  return new BookmarkLoadDetails(bb_node, other_node, mobile_node,
-                                 new BookmarkIndex(profile_),
-                                 next_node_id_);
+  return new BookmarkLoadDetails(
+      bb_node, other_node, mobile_node,
+      new BookmarkIndex(
+          profile_,
+          index_urls_,
+          profile_ ?
+              profile_->GetPrefs()->GetString(prefs::kAcceptLanguages) :
+              std::string()),
+      next_node_id_);
 }
diff --git a/chrome/browser/bookmarks/bookmark_model.h b/chrome/browser/bookmarks/bookmark_model.h
index ba85815..9eaf240 100644
--- a/chrome/browser/bookmarks/bookmark_model.h
+++ b/chrome/browser/bookmarks/bookmark_model.h
@@ -18,8 +18,9 @@
 #include "base/synchronization/lock.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/task/cancelable_task_tracker.h"
-#include "chrome/browser/bookmarks/bookmark_service.h"
 #include "components/bookmarks/core/browser/bookmark_node.h"
+#include "components/bookmarks/core/browser/bookmark_service.h"
+#include "components/favicon_base/favicon_types.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "content/public/browser/notification_observer.h"
 #include "content/public/browser/notification_registrar.h"
@@ -31,7 +32,7 @@
 class BookmarkLoadDetails;
 class BookmarkModelObserver;
 class BookmarkStorage;
-struct BookmarkTitleMatch;
+struct BookmarkMatch;
 class Profile;
 class ScopedGroupBookmarkActions;
 
@@ -57,7 +58,9 @@
                       public BookmarkService,
                       public KeyedService {
  public:
-  explicit BookmarkModel(Profile* profile);
+  // |index_urls| says whether URLs should be stored in the BookmarkIndex
+  // in addition to bookmark titles.
+  BookmarkModel(Profile* profile, bool index_urls);
   virtual ~BookmarkModel();
 
   // Invoked prior to destruction to release any necessary resources.
@@ -73,16 +76,16 @@
 
   // Returns the root node. The 'bookmark bar' node and 'other' node are
   // children of the root node.
-  const BookmarkNode* root_node() { return &root_; }
+  const BookmarkNode* root_node() const { return &root_; }
 
   // Returns the 'bookmark bar' node. This is NULL until loaded.
-  const BookmarkNode* bookmark_bar_node() { return bookmark_bar_node_; }
+  const BookmarkNode* bookmark_bar_node() const { return bookmark_bar_node_; }
 
   // Returns the 'other' node. This is NULL until loaded.
-  const BookmarkNode* other_node() { return other_node_; }
+  const BookmarkNode* other_node() const { return other_node_; }
 
   // Returns the 'mobile' node. This is NULL until loaded.
-  const BookmarkNode* mobile_node() { return mobile_node_; }
+  const BookmarkNode* mobile_node() const { return mobile_node_; }
 
   bool is_root_node(const BookmarkNode* node) const { return node == &root_; }
 
@@ -172,26 +175,32 @@
   // See BookmarkService for more details on this.
   virtual void BlockTillLoaded() OVERRIDE;
 
-  // Returns the node with |id|, or NULL if there is no node with |id|.
-  const BookmarkNode* GetNodeByID(int64 id) const;
-
   // Adds a new folder node at the specified position.
   const BookmarkNode* AddFolder(const BookmarkNode* parent,
                                 int index,
                                 const base::string16& title);
 
+  // Adds a new folder with meta info.
+  const BookmarkNode* AddFolderWithMetaInfo(
+      const BookmarkNode* parent,
+      int index,
+      const base::string16& title,
+      const BookmarkNode::MetaInfoMap* meta_info);
+
   // Adds a url at the specified position.
   const BookmarkNode* AddURL(const BookmarkNode* parent,
                              int index,
                              const base::string16& title,
                              const GURL& url);
 
-  // Adds a url with a specific creation date.
-  const BookmarkNode* AddURLWithCreationTime(const BookmarkNode* parent,
-                                             int index,
-                                             const base::string16& title,
-                                             const GURL& url,
-                                             const base::Time& creation_time);
+  // Adds a url with a specific creation date and meta info.
+  const BookmarkNode* AddURLWithCreationTimeAndMetaInfo(
+      const BookmarkNode* parent,
+      int index,
+      const base::string16& title,
+      const GURL& url,
+      const base::Time& creation_time,
+      const BookmarkNode::MetaInfoMap* meta_info);
 
   // Sorts the children of |parent|, notifying observers by way of the
   // BookmarkNodeChildrenReordered method.
@@ -212,10 +221,12 @@
   // combobox of most recently modified folders.
   void ResetDateFolderModified(const BookmarkNode* node);
 
-  void GetBookmarksWithTitlesMatching(
+  // Returns up to |max_count| of bookmarks containing each term from |text|
+  // in either the title or the URL.
+  void GetBookmarksMatching(
       const base::string16& text,
       size_t max_count,
-      std::vector<BookmarkTitleMatch>* matches);
+      std::vector<BookmarkMatch>* matches);
 
   // Sets the store to NULL, making it so the BookmarkModel does not persist
   // any changes to disk. This is only useful during testing to speed up
@@ -305,9 +316,6 @@
                         int index,
                         BookmarkNode* node);
 
-  // Implementation of GetNodeByID.
-  const BookmarkNode* GetNodeByID(const BookmarkNode* node, int64 id) const;
-
   // Returns true if the parent and index are valid.
   bool IsValidIndex(const BookmarkNode* parent, int index, bool allow_end);
 
@@ -317,8 +325,9 @@
 
   // Notification that a favicon has finished loading. If we can decode the
   // favicon, FaviconLoaded is invoked.
-  void OnFaviconDataAvailable(BookmarkNode* node,
-                              const chrome::FaviconImageResult& image_result);
+  void OnFaviconDataAvailable(
+      BookmarkNode* node,
+      const favicon_base::FaviconImageResult& image_result);
 
   // Invoked from the node to load the favicon. Requests the favicon from the
   // favicon service.
@@ -389,6 +398,10 @@
 
   scoped_ptr<BookmarkIndex> index_;
 
+  // True if URLs are stored in the BookmarkIndex in addition to bookmark
+  // titles.
+  const bool index_urls_;
+
   base::WaitableEvent loaded_signal_;
 
   // See description of IsDoingExtensiveChanges above.
diff --git a/chrome/browser/bookmarks/bookmark_model_factory.cc b/chrome/browser/bookmarks/bookmark_model_factory.cc
index b4e8754..a03b909 100644
--- a/chrome/browser/bookmarks/bookmark_model_factory.cc
+++ b/chrome/browser/bookmarks/bookmark_model_factory.cc
@@ -9,6 +9,7 @@
 #include "base/memory/singleton.h"
 #include "base/values.h"
 #include "chrome/browser/bookmarks/bookmark_model.h"
+#include "chrome/browser/omnibox/omnibox_field_trial.h"
 #include "chrome/browser/profiles/incognito_helpers.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/startup_task_runner_service.h"
@@ -16,7 +17,7 @@
 #include "chrome/browser/undo/bookmark_undo_service.h"
 #include "chrome/browser/undo/bookmark_undo_service_factory.h"
 #include "chrome/common/chrome_switches.h"
-#include "chrome/common/pref_names.h"
+#include "components/bookmarks/core/common/bookmark_pref_names.h"
 #include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/user_prefs/pref_registry_syncable.h"
 
@@ -47,7 +48,8 @@
 KeyedService* BookmarkModelFactory::BuildServiceInstanceFor(
     content::BrowserContext* context) const {
   Profile* profile = static_cast<Profile*>(context);
-  BookmarkModel* bookmark_model = new BookmarkModel(profile);
+  BookmarkModel* bookmark_model =
+      new BookmarkModel(profile, OmniboxFieldTrial::BookmarksIndexURLsValue());
   bookmark_model->Load(StartupTaskRunnerServiceFactory::GetForProfile(profile)->
       GetBookmarkTaskRunner());
 #if !defined(OS_ANDROID)
diff --git a/chrome/browser/bookmarks/bookmark_model_unittest.cc b/chrome/browser/bookmarks/bookmark_model_unittest.cc
index 65139b3..2f9bb88 100644
--- a/chrome/browser/bookmarks/bookmark_model_unittest.cc
+++ b/chrome/browser/bookmarks/bookmark_model_unittest.cc
@@ -141,7 +141,7 @@
   };
 
   BookmarkModelTest()
-    : model_(NULL) {
+    : model_(NULL, false) {
     model_.AddObserver(this);
     ClearCounts();
   }
@@ -366,6 +366,33 @@
   }
 }
 
+TEST_F(BookmarkModelTest, AddURLWithCreationTimeAndMetaInfo) {
+  const BookmarkNode* root = model_.bookmark_bar_node();
+  const base::string16 title(ASCIIToUTF16("foo"));
+  const GURL url("http://foo.com");
+  const Time time = Time::Now() - TimeDelta::FromDays(1);
+  BookmarkNode::MetaInfoMap meta_info;
+  meta_info["foo"] = "bar";
+
+  const BookmarkNode* new_node = model_.AddURLWithCreationTimeAndMetaInfo(
+      root, 0, title, url, time, &meta_info);
+  AssertObserverCount(1, 0, 0, 0, 0, 0, 0, 0, 0);
+  observer_details_.ExpectEquals(root, NULL, 0, -1);
+
+  ASSERT_EQ(1, root->child_count());
+  ASSERT_EQ(title, new_node->GetTitle());
+  ASSERT_TRUE(url == new_node->url());
+  ASSERT_EQ(BookmarkNode::URL, new_node->type());
+  ASSERT_EQ(time, new_node->date_added());
+  ASSERT_TRUE(new_node->GetMetaInfoMap());
+  ASSERT_EQ(meta_info, *new_node->GetMetaInfoMap());
+  ASSERT_TRUE(new_node == model_.GetMostRecentlyAddedNodeForURL(url));
+
+  EXPECT_TRUE(new_node->id() != root->id() &&
+              new_node->id() != model_.other_node()->id() &&
+              new_node->id() != model_.mobile_node()->id());
+}
+
 TEST_F(BookmarkModelTest, AddURLToMobileBookmarks) {
   const BookmarkNode* root = model_.mobile_node();
   const base::string16 title(ASCIIToUTF16("foo"));
diff --git a/chrome/browser/bookmarks/bookmark_node_data.cc b/chrome/browser/bookmarks/bookmark_node_data.cc
index 6bfed46..8da095e 100644
--- a/chrome/browser/bookmarks/bookmark_node_data.cc
+++ b/chrome/browser/bookmarks/bookmark_node_data.cc
@@ -10,9 +10,7 @@
 #include "base/pickle.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
-#include "chrome/browser/bookmarks/bookmark_model.h"
-#include "chrome/browser/bookmarks/bookmark_model_factory.h"
-#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/bookmarks/bookmark_utils.h"
 #include "ui/base/clipboard/scoped_clipboard_writer.h"
 
 const char* BookmarkNodeData::kClipboardFormatString =
@@ -180,7 +178,7 @@
   }
 
   Pickle pickle;
-  WriteToPickle(NULL, &pickle);
+  WriteToPickle(base::FilePath(), &pickle);
   scw.WritePickledData(pickle,
                        ui::Clipboard::GetFormatType(kClipboardFormatString));
 }
@@ -216,9 +214,9 @@
 }
 #endif
 
-void BookmarkNodeData::WriteToPickle(Profile* profile, Pickle* pickle) const {
-  base::FilePath path = profile ? profile->GetPath() : base::FilePath();
-  path.WriteToPickle(pickle);
+void BookmarkNodeData::WriteToPickle(const base::FilePath& profile_path,
+                                     Pickle* pickle) const {
+  profile_path.WriteToPickle(pickle);
   pickle->WriteUInt64(elements.size());
 
   for (size_t i = 0; i < elements.size(); ++i)
@@ -244,15 +242,15 @@
 }
 
 std::vector<const BookmarkNode*> BookmarkNodeData::GetNodes(
-    Profile* profile) const {
+    BookmarkModel* model,
+    const base::FilePath& profile_path) const {
   std::vector<const BookmarkNode*> nodes;
 
-  if (!IsFromProfile(profile))
+  if (!IsFromProfilePath(profile_path))
     return nodes;
 
   for (size_t i = 0; i < elements.size(); ++i) {
-    const BookmarkNode* node = BookmarkModelFactory::GetForProfile(
-        profile)->GetNodeByID(elements[i].id_);
+    const BookmarkNode* node = GetBookmarkNodeByID(model, elements[i].id_);
     if (!node) {
       nodes.clear();
       return nodes;
@@ -262,8 +260,10 @@
   return nodes;
 }
 
-const BookmarkNode* BookmarkNodeData::GetFirstNode(Profile* profile) const {
-  std::vector<const BookmarkNode*> nodes = GetNodes(profile);
+const BookmarkNode* BookmarkNodeData::GetFirstNode(
+    BookmarkModel* model,
+    const base::FilePath& profile_path) const {
+  std::vector<const BookmarkNode*> nodes = GetNodes(model, profile_path);
   return nodes.size() == 1 ? nodes[0] : NULL;
 }
 
@@ -272,14 +272,14 @@
   elements.clear();
 }
 
-void BookmarkNodeData::SetOriginatingProfile(Profile* profile) {
+void BookmarkNodeData::SetOriginatingProfilePath(
+    const base::FilePath& profile_path) {
   DCHECK(profile_path_.empty());
-
-  if (profile)
-    profile_path_ = profile->GetPath();
+  profile_path_ = profile_path;
 }
 
-bool BookmarkNodeData::IsFromProfile(Profile* profile) const {
+bool BookmarkNodeData::IsFromProfilePath(
+    const base::FilePath& profile_path) const {
   // An empty path means the data is not associated with any profile.
-  return !profile_path_.empty() && profile_path_ == profile->GetPath();
+  return !profile_path_.empty() && profile_path_ == profile_path;
 }
diff --git a/chrome/browser/bookmarks/bookmark_node_data.h b/chrome/browser/bookmarks/bookmark_node_data.h
index fbb975e..cc6564a 100644
--- a/chrome/browser/bookmarks/bookmark_node_data.h
+++ b/chrome/browser/bookmarks/bookmark_node_data.h
@@ -10,7 +10,7 @@
 #include "base/files/file_path.h"
 #include "base/strings/string16.h"
 #include "base/time/time.h"
-#include "chrome/browser/bookmarks/bookmark_model.h"
+#include "components/bookmarks/core/browser/bookmark_node.h"
 #include "ui/base/clipboard/clipboard_types.h"
 
 #include "url/gurl.h"
@@ -18,9 +18,9 @@
 #include "ui/base/dragdrop/os_exchange_data.h"
 #endif
 
+class BookmarkModel;
 class Pickle;
 class PickleIterator;
-class Profile;
 
 // BookmarkNodeData is used to represent the following:
 //
@@ -115,16 +115,17 @@
   // Writes elements to data. If there is only one element and it is a URL
   // the URL and title are written to the clipboard in a format other apps can
   // use.
-  // |profile| is used to identify which profile the data came from. Use a
-  // value of null to indicate the data is not associated with any profile.
-  void Write(Profile* profile, ui::OSExchangeData* data) const;
+  // |profile_path| is used to identify which profile the data came from. Use an
+  // empty path to indicate that the data is not associated with any profile.
+  void Write(const base::FilePath& profile_path,
+             ui::OSExchangeData* data) const;
 
   // Restores this data from the clipboard, returning true on success.
   bool Read(const ui::OSExchangeData& data);
 #endif
 
   // Writes the data for a drag to |pickle|.
-  void WriteToPickle(Profile* profile, Pickle* pickle) const;
+  void WriteToPickle(const base::FilePath& profile_path, Pickle* pickle) const;
 
   // Reads the data for a drag from a |pickle|.
   bool ReadFromPickle(Pickle* pickle);
@@ -133,11 +134,14 @@
   // created from the same profile then the nodes from the model are returned.
   // If the nodes can't be found (may have been deleted), an empty vector is
   // returned.
-  std::vector<const BookmarkNode*> GetNodes(Profile* profile) const;
+  std::vector<const BookmarkNode*> GetNodes(
+      BookmarkModel* model,
+      const base::FilePath& profile_path) const;
 
   // Convenience for getting the first node. Returns NULL if the data doesn't
   // match any nodes or there is more than one node.
-  const BookmarkNode* GetFirstNode(Profile* profile) const;
+  const BookmarkNode* GetFirstNode(BookmarkModel* model,
+                                   const base::FilePath& profile_path) const;
 
   // Do we contain valid data?
   bool is_valid() const { return !elements.empty(); }
@@ -151,13 +155,13 @@
   // Clears the data.
   void Clear();
 
-  // Sets |profile_path_| to that of |profile|. This is useful for the
-  // constructors/readers that don't set it. This should only be called if the
-  // profile path is not already set.
-  void SetOriginatingProfile(Profile* profile);
+  // Sets |profile_path_|. This is useful for the constructors/readers that
+  // don't set it. This should only be called if the profile path is not
+  // already set.
+  void SetOriginatingProfilePath(const base::FilePath& profile_path);
 
-  // Returns true if this data is from the specified profile.
-  bool IsFromProfile(Profile* profile) const;
+  // Returns true if this data is from the specified profile path.
+  bool IsFromProfilePath(const base::FilePath& profile_path) const;
 
   // The actual elements written to the clipboard.
   std::vector<Element> elements;
diff --git a/chrome/browser/bookmarks/bookmark_node_data_unittest.cc b/chrome/browser/bookmarks/bookmark_node_data_unittest.cc
index 774fbd7..ee10c49 100644
--- a/chrome/browser/bookmarks/bookmark_node_data_unittest.cc
+++ b/chrome/browser/bookmarks/bookmark_node_data_unittest.cc
@@ -110,7 +110,7 @@
   EXPECT_EQ(node->date_folder_modified(),
             drag_data.elements[0].date_folder_modified);
   ui::OSExchangeData data;
-  drag_data.Write(profile(), &data);
+  drag_data.Write(profile()->GetPath(), &data);
 
   // Now read the data back in.
   ui::OSExchangeData data2(CloneProvider(data));
@@ -123,11 +123,11 @@
   EXPECT_EQ(title, read_data.elements[0].title);
   EXPECT_TRUE(read_data.elements[0].date_added.is_null());
   EXPECT_TRUE(read_data.elements[0].date_folder_modified.is_null());
-  EXPECT_TRUE(read_data.GetFirstNode(profile()) == node);
+  EXPECT_TRUE(read_data.GetFirstNode(model(), profile()->GetPath()) == node);
 
   // Make sure asking for the node with a different profile returns NULL.
   TestingProfile profile2;
-  EXPECT_TRUE(read_data.GetFirstNode(&profile2) == NULL);
+  EXPECT_TRUE(read_data.GetFirstNode(model(), profile2.GetPath()) == NULL);
 
   // Writing should also put the URL and title on the clipboard.
   GURL read_url;
@@ -155,7 +155,7 @@
             drag_data.elements[0].date_folder_modified);
 
   ui::OSExchangeData data;
-  drag_data.Write(profile(), &data);
+  drag_data.Write(profile()->GetPath(), &data);
 
   // Now read the data back in.
   ui::OSExchangeData data2(CloneProvider(data));
@@ -169,12 +169,13 @@
   EXPECT_TRUE(read_data.elements[0].date_folder_modified.is_null());
 
   // We should get back the same node when asking for the same profile.
-  const BookmarkNode* r_g12 = read_data.GetFirstNode(profile());
+  const BookmarkNode* r_g12 =
+      read_data.GetFirstNode(model(), profile()->GetPath());
   EXPECT_TRUE(g12 == r_g12);
 
   // A different profile should return NULL for the node.
   TestingProfile profile2;
-  EXPECT_TRUE(read_data.GetFirstNode(&profile2) == NULL);
+  EXPECT_TRUE(read_data.GetFirstNode(model(), profile2.GetPath()) == NULL);
 }
 
 // Tests reading/writing a folder with children.
@@ -190,7 +191,7 @@
   BookmarkNodeData drag_data(folder);
 
   ui::OSExchangeData data;
-  drag_data.Write(profile(), &data);
+  drag_data.Write(profile()->GetPath(), &data);
 
   // Now read the data back in.
   ui::OSExchangeData data2(CloneProvider(data));
@@ -209,7 +210,8 @@
   EXPECT_TRUE(read_child.is_url);
 
   // And make sure we get the node back.
-  const BookmarkNode* r_folder = read_data.GetFirstNode(profile());
+  const BookmarkNode* r_folder =
+      read_data.GetFirstNode(model(), profile()->GetPath());
   EXPECT_TRUE(folder == r_folder);
 }
 
@@ -229,7 +231,7 @@
   nodes.push_back(url_node);
   BookmarkNodeData drag_data(nodes);
   ui::OSExchangeData data;
-  drag_data.Write(profile(), &data);
+  drag_data.Write(profile()->GetPath(), &data);
 
   // Read the data back in.
   ui::OSExchangeData data2(CloneProvider(data));
@@ -252,14 +254,15 @@
   EXPECT_EQ(0u, read_url.children.size());
 
   // And make sure we get the node back.
-  std::vector<const BookmarkNode*> read_nodes = read_data.GetNodes(profile());
+  std::vector<const BookmarkNode*> read_nodes =
+      read_data.GetNodes(model(), profile()->GetPath());
   ASSERT_EQ(2u, read_nodes.size());
   EXPECT_TRUE(read_nodes[0] == folder);
   EXPECT_TRUE(read_nodes[1] == url_node);
 
   // Asking for the first node should return NULL with more than one element
   // present.
-  EXPECT_TRUE(read_data.GetFirstNode(profile()) == NULL);
+  EXPECT_TRUE(read_data.GetFirstNode(model(), profile()->GetPath()) == NULL);
 }
 
 // Tests reading/writing of meta info.
@@ -274,7 +277,7 @@
 
   BookmarkNodeData node_data(node);
   ui::OSExchangeData data;
-  node_data.Write(profile(), &data);
+  node_data.Write(profile()->GetPath(), &data);
 
   // Read the data back in.
   ui::OSExchangeData data2(CloneProvider(data));
diff --git a/chrome/browser/bookmarks/bookmark_node_data_views.cc b/chrome/browser/bookmarks/bookmark_node_data_views.cc
index 4eddada..3625105 100644
--- a/chrome/browser/bookmarks/bookmark_node_data_views.cc
+++ b/chrome/browser/bookmarks/bookmark_node_data_views.cc
@@ -26,7 +26,8 @@
   return format;
 }
 
-void BookmarkNodeData::Write(Profile* profile, ui::OSExchangeData* data) const {
+void BookmarkNodeData::Write(const base::FilePath& profile_path,
+                             ui::OSExchangeData* data) const {
   DCHECK(data);
 
   // If there is only one element and it is a URL, write the URL to the
@@ -40,7 +41,7 @@
   }
 
   Pickle data_pickle;
-  WriteToPickle(profile, &data_pickle);
+  WriteToPickle(profile_path, &data_pickle);
 
   data->SetPickledData(GetBookmarkCustomFormat(), data_pickle);
 }
diff --git a/chrome/browser/bookmarks/bookmark_pasteboard_helper_mac.mm b/chrome/browser/bookmarks/bookmark_pasteboard_helper_mac.mm
index 7ec2fb6..f58be9c 100644
--- a/chrome/browser/bookmarks/bookmark_pasteboard_helper_mac.mm
+++ b/chrome/browser/bookmarks/bookmark_pasteboard_helper_mac.mm
@@ -8,7 +8,7 @@
 
 #include "base/files/file_path.h"
 #include "base/strings/sys_string_conversions.h"
-#include "chrome/browser/bookmarks/bookmark_model.h"
+#include "components/bookmarks/core/browser/bookmark_node.h"
 #include "ui/base/clipboard/clipboard.h"
 
 NSString* const kBookmarkDictionaryListPboardType =
diff --git a/chrome/browser/bookmarks/bookmark_prompt_prefs.cc b/chrome/browser/bookmarks/bookmark_prompt_prefs.cc
deleted file mode 100644
index ffd1ae9..0000000
--- a/chrome/browser/bookmarks/bookmark_prompt_prefs.cc
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright (c) 2012 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 "chrome/browser/bookmarks/bookmark_prompt_prefs.h"
-
-#include "base/prefs/pref_service.h"
-#include "chrome/common/pref_names.h"
-#include "components/user_prefs/pref_registry_syncable.h"
-
-BookmarkPromptPrefs::BookmarkPromptPrefs(PrefService* user_prefs)
-    : prefs_(user_prefs) {
-}
-
-BookmarkPromptPrefs::~BookmarkPromptPrefs() {
-}
-
-void BookmarkPromptPrefs::DisableBookmarkPrompt() {
-  prefs_->SetBoolean(prefs::kBookmarkPromptEnabled, false);
-}
-
-int BookmarkPromptPrefs::GetPromptImpressionCount() const {
-  return prefs_->GetInteger(prefs::kBookmarkPromptImpressionCount);
-}
-
-void BookmarkPromptPrefs::IncrementPromptImpressionCount() {
-  prefs_->SetInteger(prefs::kBookmarkPromptImpressionCount,
-                     GetPromptImpressionCount() + 1);
-}
-
-bool BookmarkPromptPrefs::IsBookmarkPromptEnabled() const {
-  return prefs_->GetBoolean(prefs::kBookmarkPromptEnabled);
-}
-
-// static
-void BookmarkPromptPrefs::RegisterProfilePrefs(
-    user_prefs::PrefRegistrySyncable* registry) {
-  // We always register preferences without checking FieldTrial, because
-  // we may not receive field trial list from the server yet.
-  registry->RegisterBooleanPref(
-      prefs::kBookmarkPromptEnabled,
-      true,
-      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
-  registry->RegisterIntegerPref(
-      prefs::kBookmarkPromptImpressionCount,
-      0,
-      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
-}
diff --git a/chrome/browser/bookmarks/bookmark_prompt_prefs.h b/chrome/browser/bookmarks/bookmark_prompt_prefs.h
deleted file mode 100644
index 884894f..0000000
--- a/chrome/browser/bookmarks/bookmark_prompt_prefs.h
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright (c) 2012 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 CHROME_BROWSER_BOOKMARKS_BOOKMARK_PROMPT_PREFS_H_
-#define CHROME_BROWSER_BOOKMARKS_BOOKMARK_PROMPT_PREFS_H_
-
-#include "base/basictypes.h"
-
-class PrefService;
-
-namespace user_prefs {
-class PrefRegistrySyncable;
-}
-
-// Helper class for getting, changing bookmark prompt related preferences.
-class BookmarkPromptPrefs {
- public:
-  // Constructs and associates to |prefs|. Further operations occurred on
-  // associated |prefs|.
-  explicit BookmarkPromptPrefs(PrefService* prefs);
-  ~BookmarkPromptPrefs();
-
-  // Disables bookmark prompt feature.
-  void DisableBookmarkPrompt();
-
-  // Returns number of times bookmark prompt displayed so far.
-  int GetPromptImpressionCount() const;
-
-  // Increments bookmark prompt impression counter.
-  void IncrementPromptImpressionCount();
-
-  // Returns true if bookmark prompt feature enabled, otherwise false.
-  bool IsBookmarkPromptEnabled() const;
-
-  // Registers user preferences used by bookmark prompt feature.
-  static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
-
- private:
-  PrefService* prefs_;  // Weak.
-
-  DISALLOW_COPY_AND_ASSIGN(BookmarkPromptPrefs);
-};
-
-#endif  // CHROME_BROWSER_BOOKMARKS_BOOKMARK_PROMPT_PREFS_H_
diff --git a/chrome/browser/bookmarks/bookmark_service.cc b/chrome/browser/bookmarks/bookmark_service.cc
deleted file mode 100644
index b841f89..0000000
--- a/chrome/browser/bookmarks/bookmark_service.cc
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright 2013 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 "chrome/browser/bookmarks/bookmark_service.h"
-
-#include "chrome/browser/bookmarks/bookmark_model.h"
-#include "chrome/browser/bookmarks/bookmark_model_factory.h"
-#include "chrome/browser/profiles/profile.h"
-
-// static
-BookmarkService* BookmarkService::FromBrowserContext(
-    content::BrowserContext* browser_context) {
-  return BookmarkModelFactory::GetForProfile(
-      Profile::FromBrowserContext(browser_context));
-}
diff --git a/chrome/browser/bookmarks/bookmark_service.h b/chrome/browser/bookmarks/bookmark_service.h
deleted file mode 100644
index f3f5fe1..0000000
--- a/chrome/browser/bookmarks/bookmark_service.h
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright (c) 2012 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 CHROME_BROWSER_BOOKMARKS_BOOKMARK_SERVICE_H_
-#define CHROME_BROWSER_BOOKMARKS_BOOKMARK_SERVICE_H_
-
-#include <vector>
-
-#include "base/strings/string16.h"
-#include "url/gurl.h"
-
-namespace content {
-class BrowserContext;
-}
-
-// BookmarkService provides a thread safe view of bookmarks. It is used by
-// HistoryBackend when it needs to determine the set of bookmarked URLs
-// or if a URL is bookmarked.
-//
-// BookmarkService is owned by Profile and deleted when the Profile is deleted.
-class BookmarkService {
- public:
-  struct URLAndTitle {
-    GURL url;
-    base::string16 title;
-  };
-
-  static BookmarkService* FromBrowserContext(
-      content::BrowserContext* browser_context);
-
-  // Returns true if the specified URL is bookmarked.
-  //
-  // If not on the main thread you *must* invoke BlockTillLoaded first.
-  virtual bool IsBookmarked(const GURL& url) = 0;
-
-  // Returns, by reference in |bookmarks|, the set of bookmarked urls and their
-  // titles. This returns the unique set of URLs. For example, if two bookmarks
-  // reference the same URL only one entry is added not matter the titles are
-  // same or not.
-  //
-  // If not on the main thread you *must* invoke BlockTillLoaded first.
-  virtual void GetBookmarks(std::vector<URLAndTitle>* bookmarks) = 0;
-
-  // Blocks until loaded. This is intended for usage on a thread other than
-  // the main thread.
-  virtual void BlockTillLoaded() = 0;
-
- protected:
-  virtual ~BookmarkService() {}
-};
-
-#endif  // CHROME_BROWSER_BOOKMARKS_BOOKMARK_SERVICE_H_
diff --git a/chrome/browser/bookmarks/bookmark_storage.h b/chrome/browser/bookmarks/bookmark_storage.h
index ce6cc7c..45eaae9 100644
--- a/chrome/browser/bookmarks/bookmark_storage.h
+++ b/chrome/browser/bookmarks/bookmark_storage.h
@@ -8,11 +8,10 @@
 #include "base/files/important_file_writer.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_ptr.h"
-#include "chrome/browser/bookmarks/bookmark_model.h"
+#include "components/bookmarks/core/browser/bookmark_node.h"
 
 class BookmarkIndex;
 class BookmarkModel;
-class BookmarkPermanentNode;
 
 namespace base {
 class SequencedTaskRunner;
diff --git a/chrome/browser/bookmarks/bookmark_title_match.cc b/chrome/browser/bookmarks/bookmark_title_match.cc
deleted file mode 100644
index 92cd790..0000000
--- a/chrome/browser/bookmarks/bookmark_title_match.cc
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright 2013 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 "chrome/browser/bookmarks/bookmark_title_match.h"
-
-BookmarkTitleMatch::BookmarkTitleMatch() : node(NULL) {}
-
-BookmarkTitleMatch::~BookmarkTitleMatch() {}
diff --git a/chrome/browser/bookmarks/bookmark_title_match.h b/chrome/browser/bookmarks/bookmark_title_match.h
deleted file mode 100644
index 334c66e..0000000
--- a/chrome/browser/bookmarks/bookmark_title_match.h
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2013 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 CHROME_BROWSER_BOOKMARKS_BOOKMARK_TITLE_MATCH_H_
-#define CHROME_BROWSER_BOOKMARKS_BOOKMARK_TITLE_MATCH_H_
-
-#include <stddef.h>
-
-#include <utility>
-#include <vector>
-
-class BookmarkNode;
-
-struct BookmarkTitleMatch {
-  // Each MatchPosition is the [begin, end) positions of a match within a
-  // string.
-  typedef std::pair<size_t, size_t> MatchPosition;
-  typedef std::vector<MatchPosition> MatchPositions;
-
-  BookmarkTitleMatch();
-  ~BookmarkTitleMatch();
-
-  // The matching node of a query.
-  const BookmarkNode* node;
-
-  // Location of the matching words in the title of the node.
-  MatchPositions match_positions;
-};
-
-#endif  // CHROME_BROWSER_BOOKMARKS_BOOKMARK_TITLE_MATCH_H_
diff --git a/chrome/browser/bookmarks/bookmark_utils.cc b/chrome/browser/bookmarks/bookmark_utils.cc
index 094895f..255e25c 100644
--- a/chrome/browser/bookmarks/bookmark_utils.cc
+++ b/chrome/browser/bookmarks/bookmark_utils.cc
@@ -15,13 +15,13 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/time/time.h"
 #include "chrome/browser/bookmarks/bookmark_model.h"
-#include "chrome/browser/bookmarks/bookmark_model_factory.h"
-#include "chrome/browser/history/query_parser.h"
-#include "chrome/common/pref_names.h"
+#include "components/bookmarks/core/common/bookmark_pref_names.h"
+#include "components/query_parser/query_parser.h"
 #include "components/user_prefs/pref_registry_syncable.h"
 #include "content/public/browser/user_metrics.h"
 #include "net/base/net_util.h"
 #include "ui/base/models/tree_node_iterator.h"
+#include "url/gurl.h"
 
 #if !defined(OS_ANDROID)
 #include "chrome/browser/bookmarks/scoped_group_bookmark_actions.h"
@@ -31,24 +31,28 @@
 
 namespace {
 
+// The maximum length of URL or title returned by the Cleanup functions.
+const size_t kCleanedUpUrlMaxLength = 1024u;
+const size_t kCleanedUpTitleMaxLength = 1024u;
+
 void CloneBookmarkNodeImpl(BookmarkModel* model,
                            const BookmarkNodeData::Element& element,
                            const BookmarkNode* parent,
                            int index_to_add_at,
                            bool reset_node_times) {
-  const BookmarkNode* cloned_node = NULL;
   if (element.is_url) {
-    if (reset_node_times) {
-      cloned_node = model->AddURL(parent, index_to_add_at, element.title,
-                                  element.url);
-    } else {
-      DCHECK(!element.date_added.is_null());
-      cloned_node = model->AddURLWithCreationTime(parent, index_to_add_at,
-                                                  element.title, element.url,
-                                                  element.date_added);
-    }
+    base::Time date_added = reset_node_times ? Time::Now() : element.date_added;
+    DCHECK(!date_added.is_null());
+
+    model->AddURLWithCreationTimeAndMetaInfo(parent,
+                                             index_to_add_at,
+                                             element.title,
+                                             element.url,
+                                             date_added,
+                                             &element.meta_info_map);
   } else {
-    cloned_node = model->AddFolder(parent, index_to_add_at, element.title);
+    const BookmarkNode* cloned_node = model->AddFolderWithMetaInfo(
+        parent, index_to_add_at, element.title, &element.meta_info_map);
     if (!reset_node_times) {
       DCHECK(!element.date_folder_modified.is_null());
       model->SetDateFolderModified(cloned_node, element.date_folder_modified);
@@ -57,7 +61,6 @@
       CloneBookmarkNodeImpl(model, element.children[i], cloned_node, i,
                             reset_node_times);
   }
-  model->SetNodeMetaInfoMap(cloned_node, element.meta_info_map);
 }
 
 // Comparison function that compares based on date modified of the two nodes.
@@ -112,6 +115,34 @@
   return HasSelectedAncestor(model, selected_nodes, node->parent());
 }
 
+const BookmarkNode* GetNodeByID(const BookmarkNode* node, int64 id) {
+  if (node->id() == id)
+    return node;
+
+  for (int i = 0, child_count = node->child_count(); i < child_count; ++i) {
+    const BookmarkNode* result = GetNodeByID(node->GetChild(i), id);
+    if (result)
+      return result;
+  }
+  return NULL;
+}
+
+// Attempts to shorten a URL safely (i.e., by preventing the end of the URL
+// from being in the middle of an escape sequence) to no more than
+// kCleanedUpUrlMaxLength characters, returning the result.
+std::string TruncateUrl(const std::string& url) {
+  if (url.length() <= kCleanedUpUrlMaxLength)
+    return url;
+
+  // If we're in the middle of an escape sequence, truncate just before it.
+  if (url[kCleanedUpUrlMaxLength - 1] == '%')
+    return url.substr(0, kCleanedUpUrlMaxLength - 1);
+  if (url[kCleanedUpUrlMaxLength - 2] == '%')
+    return url.substr(0, kCleanedUpUrlMaxLength - 2);
+
+  return url.substr(0, kCleanedUpUrlMaxLength);
+}
+
 }  // namespace
 
 namespace bookmark_utils {
@@ -259,7 +290,7 @@
                                     const std::string& languages,
                                     std::vector<const BookmarkNode*>* nodes) {
   std::vector<base::string16> query_words;
-  QueryParser parser;
+  query_parser::QueryParser parser;
   if (query.word_phrase_query) {
     parser.ParseQueryWords(base::i18n::ToLower(*query.word_phrase_query),
                            &query_words);
@@ -341,7 +372,7 @@
   for (std::vector<int64>::const_iterator iter = ids.begin();
        iter != ids.end();
        ++iter) {
-    const BookmarkNode* node = model->GetNodeByID(*iter);
+    const BookmarkNode* node = GetBookmarkNodeByID(model, *iter);
     if (!node)
       continue;
     const BookmarkNode* parent = node->parent();
@@ -375,4 +406,22 @@
   }
 }
 
+base::string16 CleanUpUrlForMatching(const GURL& gurl,
+                                     const std::string& languages) {
+  return base::i18n::ToLower(net::FormatUrl(
+      GURL(TruncateUrl(gurl.spec())), languages,
+      net::kFormatUrlOmitUsernamePassword,
+      net::UnescapeRule::SPACES | net::UnescapeRule::URL_SPECIAL_CHARS,
+      NULL, NULL, NULL));
+}
+
+base::string16 CleanUpTitleForMatching(const base::string16& title) {
+  return base::i18n::ToLower(title.substr(0u, kCleanedUpTitleMaxLength));
+}
+
 }  // namespace bookmark_utils
+
+const BookmarkNode* GetBookmarkNodeByID(const BookmarkModel* model, int64 id) {
+  // TODO(sky): TreeNode needs a method that visits all nodes using a predicate.
+  return GetNodeByID(model->root_node(), id);
+}
diff --git a/chrome/browser/bookmarks/bookmark_utils.h b/chrome/browser/bookmarks/bookmark_utils.h
index c8566e7..9eecedb 100644
--- a/chrome/browser/bookmarks/bookmark_utils.h
+++ b/chrome/browser/bookmarks/bookmark_utils.h
@@ -14,13 +14,15 @@
 class BookmarkModel;
 class BookmarkNode;
 class Profile;
+class GURL;
 
 namespace user_prefs {
 class PrefRegistrySyncable;
 }
 
 // A collection of bookmark utility functions used by various parts of the UI
-// that show bookmarks: bookmark manager, bookmark bar view ...
+// that show bookmarks (bookmark manager, bookmark bar view, ...) and other
+// systems that involve indexing and searching bookmarks.
 namespace bookmark_utils {
 
 // Fields to use when finding matching bookmarks.
@@ -107,6 +109,24 @@
 // Removes all bookmarks for the given |url|.
 void RemoveAllBookmarks(BookmarkModel* model, const GURL& url);
 
+// Truncates an overly-long URL, unescapes it, and lower-cases it,
+// returning the result.  This unescaping makes it possible to match
+// substrings that were originally escaped for navigation; for
+// example, if the user searched for "a&p", the query would be escaped
+// as "a%26p", so without unescaping, an input string of "a&p" would
+// no longer match this URL.  Note that the resulting unescaped URL
+// may not be directly navigable (which is why we escaped it to begin
+// with).  |languages| is passed to net::FormatUrl().
+base::string16 CleanUpUrlForMatching(const GURL& gurl,
+                                     const std::string& languages);
+
+// Returns the lower-cased title, possibly truncated if the original title
+// is overly-long.
+base::string16 CleanUpTitleForMatching(const base::string16& title);
+
 }  // namespace bookmark_utils
 
+// Returns the node with |id|, or NULL if there is no node with |id|.
+const BookmarkNode* GetBookmarkNodeByID(const BookmarkModel* model, int64 id);
+
 #endif  // CHROME_BROWSER_BOOKMARKS_BOOKMARK_UTILS_H_
diff --git a/chrome/browser/bookmarks/bookmark_utils_unittest.cc b/chrome/browser/bookmarks/bookmark_utils_unittest.cc
index cfbf400..428fa1b 100644
--- a/chrome/browser/bookmarks/bookmark_utils_unittest.cc
+++ b/chrome/browser/bookmarks/bookmark_utils_unittest.cc
@@ -70,7 +70,7 @@
 };
 
 TEST_F(BookmarkUtilsTest, GetBookmarksMatchingPropertiesWordPhraseQuery) {
-  BookmarkModel model(NULL);
+  BookmarkModel model(NULL, false);
   const BookmarkNode* node1 = model.AddURL(model.other_node(),
                                            0,
                                            ASCIIToUTF16("foo bar"),
@@ -128,7 +128,7 @@
 
 // Check exact matching against a URL query.
 TEST_F(BookmarkUtilsTest, GetBookmarksMatchingPropertiesUrl) {
-  BookmarkModel model(NULL);
+  BookmarkModel model(NULL, false);
   const BookmarkNode* node1 = model.AddURL(model.other_node(),
                                            0,
                                            ASCIIToUTF16("Google"),
@@ -163,7 +163,7 @@
 
 // Check exact matching against a title query.
 TEST_F(BookmarkUtilsTest, GetBookmarksMatchingPropertiesTitle) {
-  BookmarkModel model(NULL);
+  BookmarkModel model(NULL, false);
   const BookmarkNode* node1 = model.AddURL(model.other_node(),
                                            0,
                                            ASCIIToUTF16("Google"),
@@ -200,7 +200,7 @@
 
 // Check matching against a query with multiple predicates.
 TEST_F(BookmarkUtilsTest, GetBookmarksMatchingPropertiesConjunction) {
-  BookmarkModel model(NULL);
+  BookmarkModel model(NULL, false);
   const BookmarkNode* node1 = model.AddURL(model.other_node(),
                                            0,
                                            ASCIIToUTF16("Google"),
@@ -249,7 +249,7 @@
 }
 
 TEST_F(BookmarkUtilsTest, CopyPaste) {
-  BookmarkModel model(NULL);
+  BookmarkModel model(NULL, false);
   const BookmarkNode* node = model.AddURL(model.other_node(),
                                           0,
                                           ASCIIToUTF16("foo bar"),
@@ -276,7 +276,7 @@
 }
 
 TEST_F(BookmarkUtilsTest, CutToClipboard) {
-  BookmarkModel model(NULL);
+  BookmarkModel model(NULL, false);
   model.AddObserver(this);
 
   base::string16 title(ASCIIToUTF16("foo"));
@@ -301,7 +301,7 @@
 }
 
 TEST_F(BookmarkUtilsTest, GetParentForNewNodes) {
-  BookmarkModel model(NULL);
+  BookmarkModel model(NULL, false);
   // This tests the case where selection contains one item and that item is a
   // folder.
   std::vector<const BookmarkNode*> nodes;
@@ -342,7 +342,7 @@
 
 // Verifies that meta info is copied when nodes are cloned.
 TEST_F(BookmarkUtilsTest, CloneMetaInfo) {
-  BookmarkModel model(NULL);
+  BookmarkModel model(NULL, false);
   // Add a node containing meta info.
   const BookmarkNode* node = model.AddURL(model.other_node(),
                                           0,
diff --git a/chrome/browser/bookmarks/scoped_group_bookmark_actions.cc b/chrome/browser/bookmarks/scoped_group_bookmark_actions.cc
index 2dd54ae..ca76864 100644
--- a/chrome/browser/bookmarks/scoped_group_bookmark_actions.cc
+++ b/chrome/browser/bookmarks/scoped_group_bookmark_actions.cc
@@ -5,15 +5,6 @@
 #include "chrome/browser/bookmarks/scoped_group_bookmark_actions.h"
 
 #include "chrome/browser/bookmarks/bookmark_model.h"
-#include "chrome/browser/bookmarks/bookmark_model_factory.h"
-
-ScopedGroupBookmarkActions::ScopedGroupBookmarkActions(Profile* profile)
-    : model_(NULL) {
-  if (profile)
-    model_ = BookmarkModelFactory::GetForProfile(profile);
-  if (model_)
-    model_->BeginGroupedChanges();
-}
 
 ScopedGroupBookmarkActions::ScopedGroupBookmarkActions(BookmarkModel* model)
     : model_(model) {
diff --git a/chrome/browser/bookmarks/scoped_group_bookmark_actions.h b/chrome/browser/bookmarks/scoped_group_bookmark_actions.h
index ca67161..c68a0e8 100644
--- a/chrome/browser/bookmarks/scoped_group_bookmark_actions.h
+++ b/chrome/browser/bookmarks/scoped_group_bookmark_actions.h
@@ -8,12 +8,10 @@
 #include "base/macros.h"
 
 class BookmarkModel;
-class Profile;
 
 // Scopes the grouping of a set of changes into one undoable action.
 class ScopedGroupBookmarkActions {
  public:
-  explicit ScopedGroupBookmarkActions(Profile* profile);
   explicit ScopedGroupBookmarkActions(BookmarkModel* model);
   ~ScopedGroupBookmarkActions();
 
diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_process_impl.cc
index fe650ca..dfbb509 100644
--- a/chrome/browser/browser_process_impl.cc
+++ b/chrome/browser/browser_process_impl.cc
@@ -72,12 +72,12 @@
 #include "chrome/common/chrome_switches.h"
 #include "chrome/common/extensions/chrome_extensions_client.h"
 #include "chrome/common/pref_names.h"
-#include "chrome/common/profile_management_switches.h"
 #include "chrome/common/switch_utils.h"
 #include "chrome/common/url_constants.h"
 #include "chrome/installer/util/google_update_constants.h"
 #include "components/policy/core/common/policy_service.h"
 #include "components/rappor/rappor_service.h"
+#include "components/signin/core/common/profile_management_switches.h"
 #include "components/translate/core/browser/translate_download_manager.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/child_process_security_policy.h"
diff --git a/chrome/browser/browser_process_platform_part_aurawin.cc b/chrome/browser/browser_process_platform_part_aurawin.cc
index f145439..65a08d9 100644
--- a/chrome/browser/browser_process_platform_part_aurawin.cc
+++ b/chrome/browser/browser_process_platform_part_aurawin.cc
@@ -41,21 +41,21 @@
   // Check for Windows 8 specific commandlines requesting that this process
   // either connect to an existing viewer or launch a new viewer and
   // synchronously wait for it to connect.
-  if (base::win::GetVersion() >= base::win::VERSION_WIN8) {
-    bool launch = command_line.HasSwitch(switches::kViewerLaunchViaAppId);
-    bool connect = (launch ||
-                    (command_line.HasSwitch(switches::kViewerConnect) &&
-                     !metro_viewer_process_host_.get()));
-    if (connect) {
-      // Create a host to connect to the Metro viewer process over IPC.
-      metro_viewer_process_host_.reset(new ChromeMetroViewerProcessHost());
-      if (launch) {
-        CHECK(metro_viewer_process_host_->LaunchViewerAndWaitForConnection(
-            command_line.GetSwitchValueNative(
-                switches::kViewerLaunchViaAppId)));
-      }
-    }
+
+  bool launch = command_line.HasSwitch(switches::kViewerLaunchViaAppId);
+  bool connect = (launch ||
+                  (command_line.HasSwitch(switches::kViewerConnect) &&
+                   !metro_viewer_process_host_.get()));
+  if (!connect)
+    return;
+  // Create a host to connect to the Metro viewer process over IPC.
+  metro_viewer_process_host_.reset(new ChromeMetroViewerProcessHost());
+  if (launch) {
+    CHECK(metro_viewer_process_host_->LaunchViewerAndWaitForConnection(
+        command_line.GetSwitchValueNative(
+            switches::kViewerLaunchViaAppId)));
   }
+
 }
 
 void BrowserProcessPlatformPart::Observe(
diff --git a/chrome/browser/browser_resources.grd b/chrome/browser/browser_resources.grd
index 70c0c9b..2e420a2 100644
--- a/chrome/browser/browser_resources.grd
+++ b/chrome/browser/browser_resources.grd
@@ -193,8 +193,6 @@
       <include name="IDR_LOCAL_NTP_HTML" file="resources\local_ntp\local_ntp.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" />
       <include name="IDR_LOCAL_NTP_CSS" file="resources\local_ntp\local_ntp.css" type="BINDATA" />
       <include name="IDR_LOCAL_NTP_JS" file="resources\local_ntp\local_ntp.js" flattenhtml="true" type="BINDATA" />
-      <include name="IDR_LOCAL_NTP_IMAGES_2X_LOGO_PNG" file="resources\local_ntp\images\2x\ntp_google_logo.png" type="BINDATA" />
-      <include name="IDR_LOCAL_NTP_IMAGES_2X_WHITE_LOGO_PNG" file="resources\local_ntp\images\2x\ntp_white_google_logo.png" type="BINDATA" />
       <include name="IDR_MOST_VISITED_IFRAME_CSS" file="resources\local_ntp\most_visited_iframe.css" type="BINDATA" />
       <include name="IDR_MOST_VISITED_TITLE_HTML" file="resources\local_ntp\most_visited_title.html" type="BINDATA" />
       <include name="IDR_MOST_VISITED_TITLE_CSS" file="resources\local_ntp\most_visited_title.css" type="BINDATA" />
@@ -338,10 +336,6 @@
       </if>
       <if expr="chromeos">
         <include name="IDR_FILEMANAGER_MANIFEST" file="resources\file_manager\manifest.json" type="BINDATA" />
-        <include name="IDR_VIDEOPLAYER_MANIFEST" file="resources\video_player\manifest.json" type="BINDATA" />
-      </if>
-      <if expr="image_loader_extension">
-        <include name="IDR_IMAGE_LOADER_MANIFEST" file="resources\image_loader\manifest.json" type="BINDATA" />
       </if>
       <if expr="chromeos">
         <include name="IDR_DEMO_APP_MANIFEST" file="resources\chromeos\demo_app\manifest.json" type="BINDATA" />
diff --git a/chrome/browser/browsing_data/browsing_data_quota_helper_unittest.cc b/chrome/browser/browsing_data/browsing_data_quota_helper_unittest.cc
index 8b652f2..585593a 100644
--- a/chrome/browser/browsing_data/browsing_data_quota_helper_unittest.cc
+++ b/chrome/browser/browsing_data/browsing_data_quota_helper_unittest.cc
@@ -10,13 +10,15 @@
 #include "base/message_loop/message_loop.h"
 #include "base/message_loop/message_loop_proxy.h"
 #include "chrome/browser/browsing_data/browsing_data_quota_helper_impl.h"
+#include "content/public/test/mock_storage_client.h"
 #include "content/public/test/test_browser_thread.h"
 #include "content/public/test/test_browser_thread_bundle.h"
-#include "webkit/browser/quota/mock_storage_client.h"
 #include "webkit/browser/quota/quota_manager.h"
 #include "webkit/browser/quota/quota_manager_proxy.h"
 
 using content::BrowserThread;
+using content::MockOriginData;
+using content::MockStorageClient;
 
 class BrowsingDataQuotaHelperTest : public testing::Test {
  public:
@@ -67,9 +69,9 @@
                    weak_factory_.GetWeakPtr()));
   }
 
-  void RegisterClient(const quota::MockOriginData* data, std::size_t data_len) {
-    quota::MockStorageClient* client =
-        new quota::MockStorageClient(
+  void RegisterClient(const MockOriginData* data, std::size_t data_len) {
+    MockStorageClient* client =
+        new MockStorageClient(
             quota_manager_->proxy(), data, quota::QuotaClient::kFileSystem,
             data_len);
     quota_manager_->proxy()->RegisterClient(client);
@@ -134,7 +136,7 @@
 }
 
 TEST_F(BrowsingDataQuotaHelperTest, FetchData) {
-  const quota::MockOriginData kOrigins[] = {
+  const MockOriginData kOrigins[] = {
     {"http://example.com/", quota::kStorageTypeTemporary, 1},
     {"https://example.com/", quota::kStorageTypeTemporary, 10},
     {"http://example.com/", quota::kStorageTypePersistent, 100},
@@ -155,7 +157,7 @@
 }
 
 TEST_F(BrowsingDataQuotaHelperTest, IgnoreExtensionsAndDevTools) {
-  const quota::MockOriginData kOrigins[] = {
+  const MockOriginData kOrigins[] = {
     {"http://example.com/", quota::kStorageTypeTemporary, 1},
     {"https://example.com/", quota::kStorageTypeTemporary, 10},
     {"http://example.com/", quota::kStorageTypePersistent, 100},
diff --git a/chrome/browser/browsing_data/browsing_data_remover.cc b/chrome/browser/browsing_data/browsing_data_remover.cc
index 55a7dc8..1e39f58 100644
--- a/chrome/browser/browsing_data/browsing_data_remover.cc
+++ b/chrome/browser/browsing_data/browsing_data_remover.cc
@@ -94,6 +94,9 @@
 
 bool BrowsingDataRemover::is_removing_ = false;
 
+BrowsingDataRemover::CompletionInhibitor*
+    BrowsingDataRemover::completion_inhibitor_ = NULL;
+
 // Helper to create callback for BrowsingDataRemover::DoesOriginMatchMask.
 // Static.
 bool DoesOriginMatchMask(int origin_set_mask,
@@ -745,14 +748,7 @@
   NotifyAndDeleteIfDone();
 }
 
-void BrowsingDataRemover::NotifyAndDeleteIfDone() {
-  // TODO(brettw) http://crbug.com/305259: This should also observe session
-  // clearing (what about other things such as passwords, etc.?) and wait for
-  // them to complete before continuing.
-
-  if (!AllDone())
-    return;
-
+void BrowsingDataRemover::NotifyAndDelete() {
   set_removing(false);
 
   // Send global notification, then notify any explicit observers.
@@ -770,6 +766,24 @@
   base::MessageLoop::current()->DeleteSoon(FROM_HERE, this);
 }
 
+void BrowsingDataRemover::NotifyAndDeleteIfDone() {
+  // TODO(brettw) http://crbug.com/305259: This should also observe session
+  // clearing (what about other things such as passwords, etc.?) and wait for
+  // them to complete before continuing.
+
+  if (!AllDone())
+    return;
+
+  if (completion_inhibitor_) {
+    completion_inhibitor_->OnBrowsingDataRemoverWouldComplete(
+        this,
+        base::Bind(&BrowsingDataRemover::NotifyAndDelete,
+                   base::Unretained(this)));
+  } else {
+    NotifyAndDelete();
+  }
+}
+
 void BrowsingDataRemover::OnClearedHostnameResolutionCache() {
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
   waiting_for_clear_hostname_resolution_cache_ = false;
@@ -888,9 +902,14 @@
         net::HttpTransactionFactory* factory =
             getter->GetURLRequestContext()->http_transaction_factory();
 
+        // Clear QUIC server information from memory.
+        net::HttpCache* http_cache = factory->GetCache();
+        http_cache->GetSession()->quic_stream_factory()->ClearCachedStates();
+
         next_cache_state_ = (next_cache_state_ == STATE_CREATE_MAIN) ?
                                 STATE_DELETE_MAIN : STATE_DELETE_MEDIA;
-        rv = factory->GetCache()->GetBackend(
+
+        rv = http_cache->GetBackend(
             &cache_, base::Bind(&BrowsingDataRemover::DoClearCache,
                                 base::Unretained(this)));
         break;
diff --git a/chrome/browser/browsing_data/browsing_data_remover.h b/chrome/browser/browsing_data/browsing_data_remover.h
index 4b4603d..a858be8 100644
--- a/chrome/browser/browsing_data/browsing_data_remover.h
+++ b/chrome/browser/browsing_data/browsing_data_remover.h
@@ -150,6 +150,22 @@
     virtual ~Observer() {}
   };
 
+  // The completion inhibitor can artificially delay completion of the browsing
+  // data removal process. It is used during testing to simulate scenarios in
+  // which the deletion stalls or takes a very long time.
+  class CompletionInhibitor {
+   public:
+    // Invoked when a |remover| is just about to complete clearing browser data,
+    // and will be prevented from completing until after the callback
+    // |continue_to_completion| is run.
+    virtual void OnBrowsingDataRemoverWouldComplete(
+        BrowsingDataRemover* remover,
+        const base::Closure& continue_to_completion) = 0;
+
+   protected:
+    virtual ~CompletionInhibitor() {}
+  };
+
   // Creates a BrowsingDataRemover object that removes data regardless of the
   // time it was last modified. Returns a raw pointer, as BrowsingDataRemover
   // retains ownership of itself, and deletes itself once finished.
@@ -174,6 +190,14 @@
   // Is the BrowsingDataRemover currently in the process of removing data?
   static bool is_removing() { return is_removing_; }
 
+  // Sets a CompletionInhibitor, which will be notified each time an instance is
+  // about to complete a browsing data removal process, and will be able to
+  // artificially delay the completion.
+  static void set_completion_inhibitor_for_testing(
+      CompletionInhibitor* inhibitor) {
+    completion_inhibitor_ = inhibitor;
+  }
+
   // Removes the specified items related to browsing for all origins that match
   // the provided |origin_set_mask| (see BrowsingDataHelper::OriginSetMask).
   void Remove(int remove_mask, int origin_set_mask);
@@ -252,8 +276,10 @@
                   const GURL& origin,
                   int origin_set_mask);
 
-  // If we're not waiting on anything, notifies observers and deletes this
-  // object.
+  // Notifies observers and deletes this object.
+  void NotifyAndDelete();
+
+  // Checks if we are all done, and if so, calls NotifyAndDelete().
   void NotifyAndDeleteIfDone();
 
   // Callback for when the hostname resolution cache has been cleared.
@@ -367,6 +393,11 @@
   // True if Remove has been invoked.
   static bool is_removing_;
 
+  // If non-NULL, the |completion_inhibitor_| is notified each time an instance
+  // is about to complete a browsing data removal process, and has the ability
+  // to artificially delay completion. Used for testing.
+  static CompletionInhibitor* completion_inhibitor_;
+
   CacheState next_cache_state_;
   disk_cache::Backend* cache_;
 
diff --git a/chrome/browser/browsing_data/browsing_data_remover_test_util.cc b/chrome/browser/browsing_data/browsing_data_remover_test_util.cc
index 2be540f..1790716 100644
--- a/chrome/browser/browsing_data/browsing_data_remover_test_util.cc
+++ b/chrome/browser/browsing_data/browsing_data_remover_test_util.cc
@@ -20,3 +20,32 @@
 void BrowsingDataRemoverCompletionObserver::OnBrowsingDataRemoverDone() {
   message_loop_runner_->Quit();
 }
+
+BrowsingDataRemoverCompletionInhibitor::BrowsingDataRemoverCompletionInhibitor()
+    : message_loop_runner_(new content::MessageLoopRunner) {
+  BrowsingDataRemover::set_completion_inhibitor_for_testing(this);
+}
+
+BrowsingDataRemoverCompletionInhibitor::
+    ~BrowsingDataRemoverCompletionInhibitor() {
+  BrowsingDataRemover::set_completion_inhibitor_for_testing(NULL);
+}
+
+void BrowsingDataRemoverCompletionInhibitor::BlockUntilNearCompletion() {
+  message_loop_runner_->Run();
+  message_loop_runner_ = new content::MessageLoopRunner;
+}
+
+void BrowsingDataRemoverCompletionInhibitor::ContinueToCompletion() {
+  DCHECK(!continue_to_completion_callback_.is_null());
+  continue_to_completion_callback_.Run();
+  continue_to_completion_callback_.Reset();
+}
+
+void BrowsingDataRemoverCompletionInhibitor::OnBrowsingDataRemoverWouldComplete(
+    BrowsingDataRemover* remover,
+    const base::Closure& continue_to_completion) {
+  DCHECK(continue_to_completion_callback_.is_null());
+  continue_to_completion_callback_ = continue_to_completion;
+  message_loop_runner_->Quit();
+}
diff --git a/chrome/browser/browsing_data/browsing_data_remover_test_util.h b/chrome/browser/browsing_data/browsing_data_remover_test_util.h
index 2f215a2..476b21a 100644
--- a/chrome/browser/browsing_data/browsing_data_remover_test_util.h
+++ b/chrome/browser/browsing_data/browsing_data_remover_test_util.h
@@ -28,4 +28,26 @@
   DISALLOW_COPY_AND_ASSIGN(BrowsingDataRemoverCompletionObserver);
 };
 
+class BrowsingDataRemoverCompletionInhibitor
+    : public BrowsingDataRemover::CompletionInhibitor {
+ public:
+  BrowsingDataRemoverCompletionInhibitor();
+  virtual ~BrowsingDataRemoverCompletionInhibitor();
+
+  void BlockUntilNearCompletion();
+  void ContinueToCompletion();
+
+ protected:
+  // BrowsingDataRemover::CompletionInhibitor:
+  virtual void OnBrowsingDataRemoverWouldComplete(
+      BrowsingDataRemover* remover,
+      const base::Closure& continue_to_completion) OVERRIDE;
+
+ private:
+  scoped_refptr<content::MessageLoopRunner> message_loop_runner_;
+  base::Closure continue_to_completion_callback_;
+
+  DISALLOW_COPY_AND_ASSIGN(BrowsingDataRemoverCompletionInhibitor);
+};
+
 #endif  // CHROME_BROWSER_BROWSING_DATA_BROWSING_DATA_REMOVER_TEST_UTIL_H_
diff --git a/chrome/browser/browsing_data/browsing_data_remover_unittest.cc b/chrome/browser/browsing_data/browsing_data_remover_unittest.cc
index f708634..35a61f0 100644
--- a/chrome/browser/browsing_data/browsing_data_remover_unittest.cc
+++ b/chrome/browser/browsing_data/browsing_data_remover_unittest.cc
@@ -679,8 +679,10 @@
     registrar_.RemoveAll();
   }
 
- private:
+ protected:
   scoped_ptr<BrowsingDataRemover::NotificationDetails> called_with_details_;
+
+ private:
   content::NotificationRegistrar registrar_;
 
   content::TestBrowserThreadBundle thread_bundle_;
@@ -1540,6 +1542,39 @@
   EXPECT_TRUE(tester.HasOrigin(kChromeOrigin));
 }
 
+TEST_F(BrowsingDataRemoverTest, CompletionInhibition) {
+  // The |completion_inhibitor| on the stack should prevent removal sessions
+  // from completing until after ContinueToCompletion() is called.
+  BrowsingDataRemoverCompletionInhibitor completion_inhibitor;
+
+  called_with_details_.reset(new BrowsingDataRemover::NotificationDetails());
+
+  // BrowsingDataRemover deletes itself when it completes.
+  BrowsingDataRemover* remover = BrowsingDataRemover::CreateForPeriod(
+      GetProfile(), BrowsingDataRemover::EVERYTHING);
+  remover->Remove(BrowsingDataRemover::REMOVE_HISTORY,
+                  BrowsingDataHelper::UNPROTECTED_WEB);
+
+  // Process messages until the inhibitor is notified, and then some, to make
+  // sure we do not complete asynchronously before ContinueToCompletion() is
+  // called.
+  completion_inhibitor.BlockUntilNearCompletion();
+  base::RunLoop().RunUntilIdle();
+
+  // Verify that the completion notification has not yet been broadcasted.
+  EXPECT_EQ(-1, GetRemovalMask());
+  EXPECT_EQ(-1, GetOriginSetMask());
+
+  // Now run the removal process until completion, and verify that observers are
+  // now notified, and the notifications is sent out.
+  BrowsingDataRemoverCompletionObserver completion_observer(remover);
+  completion_inhibitor.ContinueToCompletion();
+  completion_observer.BlockUntilCompletion();
+
+  EXPECT_EQ(BrowsingDataRemover::REMOVE_HISTORY, GetRemovalMask());
+  EXPECT_EQ(BrowsingDataHelper::UNPROTECTED_WEB, GetOriginSetMask());
+}
+
 #if defined(OS_CHROMEOS)
 TEST_F(BrowsingDataRemoverTest, ContentProtectionPlatformKeysRemoval) {
   chromeos::ScopedTestDeviceSettingsService test_device_settings_service;
diff --git a/chrome/browser/chrome_browser_main.cc b/chrome/browser/chrome_browser_main.cc
index 32c4ad2..f0a9b2a 100644
--- a/chrome/browser/chrome_browser_main.cc
+++ b/chrome/browser/chrome_browser_main.cc
@@ -105,13 +105,13 @@
 #include "chrome/common/logging_chrome.h"
 #include "chrome/common/net/net_resource_provider.h"
 #include "chrome/common/pref_names.h"
-#include "chrome/common/profile_management_switches.h"
 #include "chrome/common/profiling.h"
 #include "chrome/installer/util/google_update_settings.h"
 #include "components/language_usage_metrics/language_usage_metrics.h"
 #include "components/nacl/browser/nacl_browser.h"
 #include "components/nacl/browser/nacl_process_host.h"
 #include "components/rappor/rappor_service.h"
+#include "components/signin/core/common/profile_management_switches.h"
 #include "components/startup_metric_utils/startup_metric_utils.h"
 #include "components/translate/core/browser/translate_download_manager.h"
 #include "content/public/browser/browser_thread.h"
@@ -1153,9 +1153,8 @@
   }
 
 #if defined(USE_AURA)
-  // Env creates the compositor. Aura widgets need the compositor to be created
-  // before they can be initialized by the browser.
-  aura::Env::CreateInstance();
+  // Make sure aura::Env has been initialized.
+  CHECK(aura::Env::GetInstance());
 #endif
 
   // Android doesn't support extensions and doesn't implement ProcessSingleton.
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
index d0ed882..18dd4c3 100644
--- a/chrome/browser/chrome_content_browser_client.cc
+++ b/chrome/browser/chrome_content_browser_client.cc
@@ -45,7 +45,6 @@
 #include "chrome/browser/guestview/guestview.h"
 #include "chrome/browser/guestview/guestview_constants.h"
 #include "chrome/browser/guestview/webview/webview_guest.h"
-#include "chrome/browser/local_discovery/storage/privet_filesystem_backend.h"
 #include "chrome/browser/media/cast_transport_host_filter.h"
 #include "chrome/browser/media/media_capture_devices_dispatcher.h"
 #include "chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.h"
@@ -94,16 +93,17 @@
 #include "chrome/common/logging_chrome.h"
 #include "chrome/common/pepper_permission_util.h"
 #include "chrome/common/pref_names.h"
-#include "chrome/common/profile_management_switches.h"
 #include "chrome/common/render_messages.h"
 #include "chrome/common/url_constants.h"
 #include "chrome/installer/util/google_update_settings.h"
 #include "chromeos/chromeos_constants.h"
+#include "components/cloud_devices/common/cloud_devices_switches.h"
 #include "components/nacl/browser/nacl_browser.h"
 #include "components/nacl/browser/nacl_host_message_filter.h"
 #include "components/nacl/browser/nacl_process_host.h"
 #include "components/nacl/common/nacl_process_type.h"
 #include "components/nacl/common/nacl_switches.h"
+#include "components/signin/core/common/profile_management_switches.h"
 #include "components/translate/core/common/translate_switches.h"
 #include "components/user_prefs/pref_registry_syncable.h"
 #include "content/public/browser/browser_child_process_host.h"
@@ -165,6 +165,7 @@
 #elif defined(OS_CHROMEOS)
 #include "chrome/browser/chromeos/chrome_browser_main_chromeos.h"
 #include "chrome/browser/chromeos/drive/fileapi/file_system_backend_delegate.h"
+#include "chrome/browser/chromeos/file_system_provider/fileapi/backend_delegate.h"
 #include "chrome/browser/chromeos/fileapi/file_system_backend.h"
 #include "chrome/browser/chromeos/login/startup_utils.h"
 #include "chrome/browser/chromeos/login/user_manager.h"
@@ -254,6 +255,7 @@
 using content::BrowserURLHandler;
 using content::ChildProcessSecurityPolicy;
 using content::QuotaPermissionContext;
+using content::RenderFrameHost;
 using content::RenderViewHost;
 using content::SiteInstance;
 using content::WebContents;
@@ -1571,7 +1573,8 @@
       switches::kAllowNaClFileHandleAPI,
       switches::kAppsCheckoutURL,
       switches::kAppsGalleryURL,
-      switches::kCloudPrintServiceURL,
+      switches::kCloudPrintURL,
+      switches::kCloudPrintXmppEndpoint,
       switches::kDisableBundledPpapiFlash,
       switches::kDisableExtensionsResourceWhitelist,
       switches::kDisablePnacl,
@@ -1946,22 +1949,14 @@
 
 void ChromeContentBrowserClient::RequestDesktopNotificationPermission(
     const GURL& source_origin,
-    int callback_context,
-    int render_process_id,
-    int render_view_id) {
+    content::RenderFrameHost* render_frame_host,
+    base::Closure& callback) {
 #if defined(ENABLE_NOTIFICATIONS)
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  WebContents* contents =
-      tab_util::GetWebContentsByID(render_process_id, render_view_id);
-  if (!contents) {
-    NOTREACHED();
-    return;
-  }
-
   // Skip showing the infobar if the request comes from an extension, and that
   // extension has the 'notify' permission. (If the extension does not have the
   // permission, the user will still be prompted.)
-  Profile* profile = Profile::FromBrowserContext(contents->GetBrowserContext());
+  Profile* profile = Profile::FromBrowserContext(
+      render_frame_host->GetSiteInstance()->GetBrowserContext());
   InfoMap* extension_info_map =
       extensions::ExtensionSystem::Get(profile)->info_map();
   DesktopNotificationService* notification_service =
@@ -1970,7 +1965,7 @@
   if (extension_info_map) {
     extensions::ExtensionSet extensions;
     extension_info_map->GetExtensionsWithAPIPermissionForSecurityOrigin(
-        source_origin, render_process_id,
+        source_origin, render_frame_host->GetProcess()->GetID(),
         extensions::APIPermission::kNotification, &extensions);
     for (extensions::ExtensionSet::const_iterator iter = extensions.begin();
          iter != extensions.end(); ++iter) {
@@ -1981,17 +1976,15 @@
       }
     }
   }
-  RenderViewHost* rvh =
-      RenderViewHost::FromID(render_process_id, render_view_id);
   if (IsExtensionWithPermissionOrSuggestInConsole(
-      APIPermission::kNotification, extension, rvh)) {
-    if (rvh)
-      rvh->DesktopNotificationPermissionRequestDone(callback_context);
+          APIPermission::kNotification, extension,
+          render_frame_host->GetRenderViewHost())) {
+    callback.Run();
     return;
   }
 
-  notification_service->RequestPermission(source_origin, render_process_id,
-      render_view_id, callback_context, contents);
+  notification_service->RequestPermission(
+      source_origin, render_frame_host, callback);
 #else
   NOTIMPLEMENTED();
 #endif
@@ -2043,48 +2036,16 @@
 
 void ChromeContentBrowserClient::ShowDesktopNotification(
     const content::ShowDesktopNotificationHostMsgParams& params,
-    int render_process_id,
-    int render_view_id,
-    bool worker) {
+    RenderFrameHost* render_frame_host,
+    content::DesktopNotificationDelegate* delegate,
+    base::Closure* cancel_callback) {
 #if defined(ENABLE_NOTIFICATIONS)
-  RenderViewHost* rvh = RenderViewHost::FromID(
-      render_process_id, render_view_id);
-  if (!rvh) {
-    NOTREACHED();
-    return;
-  }
-
-  content::RenderProcessHost* process = rvh->GetProcess();
+  content::RenderProcessHost* process = render_frame_host->GetProcess();
   Profile* profile = Profile::FromBrowserContext(process->GetBrowserContext());
   DesktopNotificationService* service =
       DesktopNotificationServiceFactory::GetForProfile(profile);
   service->ShowDesktopNotification(
-    params, render_process_id, render_view_id,
-    worker ? DesktopNotificationService::WorkerNotification :
-        DesktopNotificationService::PageNotification);
-#else
-  NOTIMPLEMENTED();
-#endif
-}
-
-void ChromeContentBrowserClient::CancelDesktopNotification(
-    int render_process_id,
-    int render_view_id,
-    int notification_id) {
-#if defined(ENABLE_NOTIFICATIONS)
-  RenderViewHost* rvh = RenderViewHost::FromID(
-      render_process_id, render_view_id);
-  if (!rvh) {
-    NOTREACHED();
-    return;
-  }
-
-  content::RenderProcessHost* process = rvh->GetProcess();
-  Profile* profile = Profile::FromBrowserContext(process->GetBrowserContext());
-  DesktopNotificationService* service =
-      DesktopNotificationServiceFactory::GetForProfile(profile);
-  service->CancelDesktopNotification(
-      render_process_id, render_view_id, notification_id);
+      params, render_frame_host, delegate, cancel_callback);
 #else
   NOTIMPLEMENTED();
 #endif
@@ -2352,15 +2313,6 @@
     }
   }
 
-  if (view_type == extensions::VIEW_TYPE_NOTIFICATION) {
-    web_prefs->allow_scripts_to_close_windows = true;
-  } else if (view_type == extensions::VIEW_TYPE_BACKGROUND_CONTENTS) {
-    // Disable all kinds of acceleration for background pages.
-    // See http://crbug.com/96005 and http://crbug.com/96006
-    web_prefs->force_compositing_mode = false;
-    web_prefs->accelerated_compositing_enabled = false;
-  }
-
 #if defined(OS_CHROMEOS)
   // Override the default of suppressing HW compositing for WebUI pages for the
   // file manager, which is implemented using WebUI but wants HW acceleration
@@ -2555,12 +2507,12 @@
   fileapi::ExternalMountPoints* external_mount_points =
       content::BrowserContext::GetMountPoints(browser_context);
   DCHECK(external_mount_points);
-  chromeos::FileSystemBackend* backend =
-      new chromeos::FileSystemBackend(
-          new drive::FileSystemBackendDelegate,
-          browser_context->GetSpecialStoragePolicy(),
-          external_mount_points,
-          fileapi::ExternalMountPoints::GetSystemInstance());
+  chromeos::FileSystemBackend* backend = new chromeos::FileSystemBackend(
+      new drive::FileSystemBackendDelegate,
+      new chromeos::file_system_provider::BackendDelegate,
+      browser_context->GetSpecialStoragePolicy(),
+      external_mount_points,
+      fileapi::ExternalMountPoints::GetSystemInstance());
   backend->AddSystemMountPoints();
   DCHECK(backend->CanHandleType(fileapi::kFileSystemTypeExternal));
   additional_backends->push_back(backend);
diff --git a/chrome/browser/chrome_content_browser_client.h b/chrome/browser/chrome_content_browser_client.h
index 1a6b7de..9432b5e 100644
--- a/chrome/browser/chrome_content_browser_client.h
+++ b/chrome/browser/chrome_content_browser_client.h
@@ -193,9 +193,8 @@
   virtual content::MediaObserver* GetMediaObserver() OVERRIDE;
   virtual void RequestDesktopNotificationPermission(
       const GURL& source_origin,
-      int callback_context,
-      int render_process_id,
-      int render_view_id) OVERRIDE;
+      content::RenderFrameHost* render_frame_host,
+      base::Closure& callback) OVERRIDE;
   virtual blink::WebNotificationPresenter::Permission
       CheckDesktopNotificationPermission(
           const GURL& source_origin,
@@ -203,13 +202,9 @@
           int render_process_id) OVERRIDE;
   virtual void ShowDesktopNotification(
       const content::ShowDesktopNotificationHostMsgParams& params,
-      int render_process_id,
-      int render_view_id,
-      bool worker) OVERRIDE;
-  virtual void CancelDesktopNotification(
-      int render_process_id,
-      int render_view_id,
-      int notification_id) OVERRIDE;
+      content::RenderFrameHost* render_frame_host,
+      content::DesktopNotificationDelegate* delegate,
+      base::Closure* cancel_callback) OVERRIDE;
   virtual bool CanCreateWindow(const GURL& opener_url,
                                const GURL& opener_top_level_frame_url,
                                const GURL& source_origin,
diff --git a/chrome/browser/chrome_notification_types.h b/chrome/browser/chrome_notification_types.h
index 496cf21..03085a8 100644
--- a/chrome/browser/chrome_notification_types.h
+++ b/chrome/browser/chrome_notification_types.h
@@ -405,9 +405,11 @@
   // the tab.
   NOTIFICATION_EXTENSION_LOCATION_BAR_UPDATED,
 
+  // DEPRECATED: Use ExtensionRegistry::AddObserver instead.
+  //
   // Sent when a new extension is loaded. The details are an Extension, and
   // the source is a Profile.
-  NOTIFICATION_EXTENSION_LOADED,
+  NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
 
   // An error occured while attempting to load an extension. The details are a
   // string with details about why the load failed.
@@ -420,7 +422,8 @@
   NOTIFICATION_EXTENSION_LOAD_RETRY,
 
   // Sent when an extension is enabled. Under most circumstances, listeners
-  // will want to use NOTIFICATION_EXTENSION_LOADED. This notification is only
+  // will want to use NOTIFICATION_EXTENSION_LOADED_DEPRECATED. This
+  // notification is only
   // fired when the "Enable" button is hit in the extensions tab.  The details
   // are an Extension, and the source is a Profile.
   NOTIFICATION_EXTENSION_ENABLED,
diff --git a/chrome/browser/chrome_quota_permission_context.cc b/chrome/browser/chrome_quota_permission_context.cc
index ab0c902..ab1ccce 100644
--- a/chrome/browser/chrome_quota_permission_context.cc
+++ b/chrome/browser/chrome_quota_permission_context.cc
@@ -10,13 +10,13 @@
 #include "base/prefs/pref_service.h"
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/infobars/confirm_infobar_delegate.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/tab_contents/tab_util.h"
 #include "chrome/browser/ui/website_settings/permission_bubble_manager.h"
 #include "chrome/browser/ui/website_settings/permission_bubble_request.h"
 #include "chrome/common/pref_names.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/navigation_details.h"
 #include "content/public/browser/web_contents.h"
diff --git a/chrome/browser/chromeos/accessibility/accessibility_manager.cc b/chrome/browser/chromeos/accessibility/accessibility_manager.cc
index cc9d583..1193930 100644
--- a/chrome/browser/chromeos/accessibility/accessibility_manager.cc
+++ b/chrome/browser/chromeos/accessibility/accessibility_manager.cc
@@ -371,8 +371,17 @@
 }
 
 bool AccessibilityManager::ShouldEnableCursorCompositing() {
-  // TODO(hshi): re-enable this on trunk after fixing issues. See
-  // http://crbug.com/362693, http://crosbug.com/p/28034.
+#if defined(OS_CHROMEOS)
+  if (!profile_)
+    return false;
+  PrefService* pref_service = profile_->GetPrefs();
+  // Enable cursor compositing when one or more of the listed accessibility
+  // features are turned on.
+  if (pref_service->GetBoolean(prefs::kLargeCursorEnabled) ||
+      pref_service->GetBoolean(prefs::kHighContrastEnabled) ||
+      pref_service->GetBoolean(prefs::kScreenMagnifierEnabled))
+    return true;
+#endif
   return false;
 }
 
@@ -533,6 +542,9 @@
       if (web_ui_login_view)
         login_web_ui = web_ui_login_view->GetWebUI();
     }
+
+    // Lock screen uses the signin progile.
+    chrome_vox_loaded_on_lock_screen_ = true;
   }
 
   LoadChromeVoxExtension(profile_, login_web_ui ?
@@ -961,12 +973,7 @@
           // this as well.
           LoadChromeVoxToUserScreen();
         } else {
-          // Lock screen destroys its resources; no need for us to explicitly
-          // unload ChromeVox.
-          chrome_vox_loaded_on_lock_screen_ = false;
-
-          // However, if spoken feedback was enabled, also enable it on the user
-          // screen.
+          // If spoken feedback was enabled, also enable it on the user screen.
           LoadChromeVoxToUserScreen();
         }
       }
diff --git a/chrome/browser/chromeos/app_mode/kiosk_mode_idle_app_name_notification.cc b/chrome/browser/chromeos/app_mode/kiosk_mode_idle_app_name_notification.cc
index 8bbf815..089795e 100644
--- a/chrome/browser/chromeos/app_mode/kiosk_mode_idle_app_name_notification.cc
+++ b/chrome/browser/chromeos/app_mode/kiosk_mode_idle_app_name_notification.cc
@@ -89,7 +89,7 @@
   ResetTimer();
 }
 
-void KioskModeIdleAppNameNotification::SystemResumed(
+void KioskModeIdleAppNameNotification::SuspendDone(
     const base::TimeDelta& sleep_duration) {
   // When we come back from a system resume we stop the timer and show the
   // message.
diff --git a/chrome/browser/chromeos/app_mode/kiosk_mode_idle_app_name_notification.h b/chrome/browser/chromeos/app_mode/kiosk_mode_idle_app_name_notification.h
index 9006432..4bb327b 100644
--- a/chrome/browser/chromeos/app_mode/kiosk_mode_idle_app_name_notification.h
+++ b/chrome/browser/chromeos/app_mode/kiosk_mode_idle_app_name_notification.h
@@ -33,7 +33,7 @@
   virtual void OnUserActivity(const ui::Event* event) OVERRIDE;
 
   // PowerManagerClient::Observer overrides:
-  virtual void SystemResumed(const base::TimeDelta& sleep_duration) OVERRIDE;
+  virtual void SuspendDone(const base::TimeDelta& sleep_duration) OVERRIDE;
 
   // Begins listening for user activity and calls ResetTimer().
   void Start();
diff --git a/chrome/browser/chromeos/attestation/platform_verification_dialog.cc b/chrome/browser/chromeos/attestation/platform_verification_dialog.cc
index 097b050..6070d60 100644
--- a/chrome/browser/chromeos/attestation/platform_verification_dialog.cc
+++ b/chrome/browser/chromeos/attestation/platform_verification_dialog.cc
@@ -5,7 +5,9 @@
 #include "chrome/browser/chromeos/attestation/platform_verification_dialog.h"
 
 #include "base/strings/utf_string_conversions.h"
+#include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/browser_finder.h"
+#include "chrome/browser/ui/browser_navigator.h"
 #include "chrome/browser/ui/browser_window.h"
 #include "chrome/browser/ui/singleton_tabs.h"
 #include "chrome/common/url_constants.h"
@@ -13,6 +15,7 @@
 #include "components/web_modal/web_contents_modal_dialog_manager.h"
 #include "components/web_modal/web_contents_modal_dialog_manager_delegate.h"
 #include "content/public/browser/web_contents.h"
+#include "content/public/common/page_transition_types.h"
 #include "extensions/browser/extension_registry.h"
 #include "extensions/common/extension.h"
 #include "grit/generated_resources.h"
@@ -46,7 +49,7 @@
   std::string origin = extension ? extension->name() : url.GetOrigin().spec();
 
   PlatformVerificationDialog* dialog = new PlatformVerificationDialog(
-      chrome::FindBrowserWithWebContents(web_contents),
+      web_contents,
       base::UTF8ToUTF16(origin),
       callback);
 
@@ -66,10 +69,10 @@
 }
 
 PlatformVerificationDialog::PlatformVerificationDialog(
-    Browser* browser,
+    content::WebContents* web_contents,
     const base::string16& domain,
     const PlatformVerificationFlow::Delegate::ConsentCallback& callback)
-    : browser_(browser),
+    : web_contents_(web_contents),
       domain_(domain),
       callback_(callback) {
   SetLayoutManager(new views::FillLayout());
@@ -128,8 +131,21 @@
 
 void PlatformVerificationDialog::StyledLabelLinkClicked(const gfx::Range& range,
                                                         int event_flags) {
-  chrome::ShowSingletonTab(browser_, GURL(
-      chrome::kEnhancedPlaybackNotificationLearnMoreURL));
+  Browser* browser = chrome::FindBrowserWithWebContents(web_contents_);
+  const GURL learn_more_url(chrome::kEnhancedPlaybackNotificationLearnMoreURL);
+
+  // |web_contents_| might not be in a browser in case of v2 apps. In that case,
+  // open a new tab in the usual way.
+  if (!browser) {
+    Profile* profile = Profile::FromBrowserContext(
+        web_contents_->GetBrowserContext());
+    chrome::NavigateParams params(
+        profile, learn_more_url, content::PAGE_TRANSITION_LINK);
+    params.disposition = SINGLETON_TAB;
+    chrome::Navigate(&params);
+  } else {
+    chrome::ShowSingletonTab(browser, learn_more_url);
+  }
 }
 
 }  // namespace attestation
diff --git a/chrome/browser/chromeos/attestation/platform_verification_dialog.h b/chrome/browser/chromeos/attestation/platform_verification_dialog.h
index d283c73..8568784 100644
--- a/chrome/browser/chromeos/attestation/platform_verification_dialog.h
+++ b/chrome/browser/chromeos/attestation/platform_verification_dialog.h
@@ -12,8 +12,6 @@
 #include "ui/views/controls/styled_label_listener.h"
 #include "ui/views/window/dialog_delegate.h"
 
-class Browser;
-
 namespace content {
 class WebContents;
 }
@@ -35,7 +33,7 @@
 
  private:
   PlatformVerificationDialog(
-      Browser* browser,
+      content::WebContents* web_contents,
       const base::string16& domain,
       const PlatformVerificationFlow::Delegate::ConsentCallback& callback);
 
@@ -56,7 +54,7 @@
   virtual void StyledLabelLinkClicked(const gfx::Range& range,
                                       int event_flags) OVERRIDE;
 
-  Browser* browser_;
+  content::WebContents* web_contents_;
   base::string16 domain_;
   PlatformVerificationFlow::Delegate::ConsentCallback callback_;
 
diff --git a/chrome/browser/chromeos/choose_mobile_network_dialog.cc b/chrome/browser/chromeos/choose_mobile_network_dialog.cc
deleted file mode 100644
index 5229c01..0000000
--- a/chrome/browser/chromeos/choose_mobile_network_dialog.cc
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright (c) 2012 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 "chrome/browser/chromeos/choose_mobile_network_dialog.h"
-
-#include "chrome/browser/chromeos/login/user_manager.h"
-#include "chrome/browser/profiles/profile_manager.h"
-#include "chrome/browser/ui/browser_dialogs.h"
-#include "chrome/common/url_constants.h"
-#include "ui/gfx/size.h"
-
-using content::WebContents;
-using content::WebUIMessageHandler;
-
-namespace {
-
-// Default width/height of the dialog.
-const int kDefaultWidth = 350;
-const int kDefaultHeight = 225;
-
-}  // namespace
-
-namespace chromeos {
-
-// static
-void ChooseMobileNetworkDialog::ShowDialog(gfx::NativeWindow owning_window) {
-  chrome::ShowWebDialog(owning_window,
-                        ProfileManager::GetActiveUserProfile(),
-                        new ChooseMobileNetworkDialog);
-}
-
-ChooseMobileNetworkDialog::ChooseMobileNetworkDialog() {
-}
-
-ui::ModalType ChooseMobileNetworkDialog::GetDialogModalType() const {
-  return ui::MODAL_TYPE_SYSTEM;
-}
-
-base::string16 ChooseMobileNetworkDialog::GetDialogTitle() const {
-  return base::string16();
-}
-
-GURL ChooseMobileNetworkDialog::GetDialogContentURL() const {
-  return GURL(chrome::kChromeUIChooseMobileNetworkURL);
-}
-
-void ChooseMobileNetworkDialog::GetWebUIMessageHandlers(
-    std::vector<WebUIMessageHandler*>* handlers) const {
-}
-
-void ChooseMobileNetworkDialog::GetDialogSize(gfx::Size* size) const {
-  size->SetSize(kDefaultWidth, kDefaultHeight);
-}
-
-std::string ChooseMobileNetworkDialog::GetDialogArgs() const {
-  return "[]";
-}
-
-void ChooseMobileNetworkDialog::OnDialogClosed(const std::string& json_retval) {
-  delete this;
-}
-
-void ChooseMobileNetworkDialog::OnCloseContents(WebContents* source,
-                                                bool* out_close_dialog) {
-  if (out_close_dialog)
-    *out_close_dialog = true;
-}
-
-bool ChooseMobileNetworkDialog::ShouldShowDialogTitle() const {
-  return false;
-}
-
-bool ChooseMobileNetworkDialog::HandleContextMenu(
-    const content::ContextMenuParams& params) {
-  // Disable context menu.
-  return true;
-}
-
-}  // namespace chromeos
diff --git a/chrome/browser/chromeos/choose_mobile_network_dialog.h b/chrome/browser/chromeos/choose_mobile_network_dialog.h
deleted file mode 100644
index aef226b..0000000
--- a/chrome/browser/chromeos/choose_mobile_network_dialog.h
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright (c) 2012 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 CHROME_BROWSER_CHROMEOS_CHOOSE_MOBILE_NETWORK_DIALOG_H_
-#define CHROME_BROWSER_CHROMEOS_CHOOSE_MOBILE_NETWORK_DIALOG_H_
-
-#include "base/basictypes.h"
-#include "base/compiler_specific.h"
-#include "ui/gfx/native_widget_types.h"
-#include "ui/web_dialogs/web_dialog_delegate.h"
-
-namespace chromeos {
-
-// Dialog for manual selection of cellular network.
-class ChooseMobileNetworkDialog : public ui::WebDialogDelegate {
- public:
-  // Shows the dialog box.
-  static void ShowDialog(gfx::NativeWindow owning_window);
-
- private:
-  ChooseMobileNetworkDialog();
-
-  // Overridden from ui::WebDialogDelegate:
-  virtual ui::ModalType GetDialogModalType() const OVERRIDE;
-  virtual base::string16 GetDialogTitle() const OVERRIDE;
-  virtual GURL GetDialogContentURL() const OVERRIDE;
-  virtual void GetWebUIMessageHandlers(
-      std::vector<content::WebUIMessageHandler*>* handlers) const OVERRIDE;
-  virtual void GetDialogSize(gfx::Size* size) const OVERRIDE;
-  virtual std::string GetDialogArgs() const OVERRIDE;
-  virtual void OnDialogClosed(const std::string& json_retval) OVERRIDE;
-  virtual void OnCloseContents(
-      content::WebContents* source, bool* out_close_dialog) OVERRIDE;
-  virtual bool ShouldShowDialogTitle() const OVERRIDE;
-  virtual bool HandleContextMenu(
-      const content::ContextMenuParams& params) OVERRIDE;
-
-  DISALLOW_COPY_AND_ASSIGN(ChooseMobileNetworkDialog);
-};
-
-}  // namespace chromeos
-
-#endif  // CHROME_BROWSER_CHROMEOS_CHOOSE_MOBILE_NETWORK_DIALOG_H_
diff --git a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc
index adf3739..e5eed43 100644
--- a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc
+++ b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc
@@ -198,10 +198,7 @@
   if (ShouldAutoLaunchKioskApp(parsed_command_line)) {
     RunAutoLaunchKioskApp();
   } else if (parsed_command_line.HasSwitch(switches::kLoginManager)) {
-    const std::string first_screen =
-        parsed_command_line.HasSwitch(switches::kLoginScreen) ?
-            WizardController::kLoginScreenName : std::string();
-    ShowLoginWizard(first_screen);
+    ShowLoginWizard(std::string());
 
     if (KioskModeSettings::Get()->IsKioskModeEnabled())
       InitializeKioskModeScreensaver();
@@ -428,17 +425,6 @@
   imageburner::BurnManager::Initialize(
       downloads_directory, g_browser_process->system_request_context());
 
-#if defined(USE_X11)
-  // Listen for system key events so that the user will be able to adjust the
-  // volume on the login screen, if Chrome is running on Chrome OS
-  // (i.e. not Linux desktop), and in non-test mode.
-  // Note: SystemKeyEventListener depends on the DBus thread.
-  if (base::SysInfo::IsRunningOnChromeOS() &&
-      !parameters().ui_task) {  // ui_task is non-NULL when running tests.
-    SystemKeyEventListener::Initialize();
-  }
-#endif
-
   DeviceOAuth2TokenServiceFactory::Initialize();
 
   ChromeBrowserMainPartsLinux::PreMainMessageLoopRun();
@@ -697,6 +683,15 @@
   g_browser_process->metrics_service()->StartExternalMetrics();
 
 #if defined(USE_X11)
+  // Listen for system key events so that the user will be able to adjust the
+  // volume on the login screen, if Chrome is running on Chrome OS
+  // (i.e. not Linux desktop), and in non-test mode.
+  // Note: SystemKeyEventListener depends on the DBus thread.
+  if (base::SysInfo::IsRunningOnChromeOS() &&
+      !parameters().ui_task) {  // ui_task is non-NULL when running tests.
+    SystemKeyEventListener::Initialize();
+  }
+
   // Listen for XI_HierarchyChanged events. Note: if this is moved to
   // PreMainMessageLoopRun() then desktopui_PageCyclerTests fail for unknown
   // reasons, see http://crosbug.com/24833.
diff --git a/chrome/browser/chromeos/customization_document.cc b/chrome/browser/chromeos/customization_document.cc
index f6edd98..07304d5 100644
--- a/chrome/browser/chromeos/customization_document.cc
+++ b/chrome/browser/chromeos/customization_document.cc
@@ -14,6 +14,7 @@
 #include "base/logging.h"
 #include "base/memory/weak_ptr.h"
 #include "base/metrics/histogram.h"
+#include "base/path_service.h"
 #include "base/prefs/pref_registry_simple.h"
 #include "base/prefs/pref_service.h"
 #include "base/strings/string_split.h"
@@ -22,7 +23,9 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/time/time.h"
 #include "chrome/browser/browser_process.h"
+#include "chrome/browser/chromeos/customization_wallpaper_downloader.h"
 #include "chrome/browser/chromeos/extensions/default_app_order.h"
+#include "chrome/browser/chromeos/login/wallpaper_manager.h"
 #include "chrome/browser/chromeos/login/wizard_controller.h"
 #include "chrome/browser/chromeos/net/delay_network_call.h"
 #include "chrome/browser/extensions/external_loader.h"
@@ -30,7 +33,9 @@
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/app_list/app_list_syncable_service.h"
 #include "chrome/browser/ui/app_list/app_list_syncable_service_factory.h"
+#include "chrome/common/chrome_paths.h"
 #include "chrome/common/extensions/extension_constants.h"
+#include "chrome/common/pref_names.h"
 #include "chromeos/network/network_state.h"
 #include "chromeos/network/network_state_handler.h"
 #include "chromeos/system/statistics_provider.h"
@@ -68,6 +73,14 @@
 const char kStartupCustomizationManifestPath[] =
     "/opt/oem/etc/startup_manifest.json";
 
+// This is subdirectory relative to PathService(DIR_CHROMEOS_CUSTOM_WALLPAPERS),
+// where downloaded (and resized) wallpaper is stored.
+const char kCustomizationDefaultWallpaperDir[] = "customization";
+
+// The original downloaded image file is stored under this name.
+const char kCustomizationDefaultWallpaperDownloadedFile[] =
+    "default_downloaded_wallpaper.bin";
+
 // Name of local state option that tracks if services customization has been
 // applied.
 const char kServicesCustomizationAppliedPref[] = "ServicesCustomizationApplied";
@@ -130,6 +143,12 @@
   return std::string();
 }
 
+void CheckWallpaperCacheExists(const base::FilePath& path, bool* exists) {
+  DCHECK(content::BrowserThread::GetBlockingPool()->RunsTasksOnCurrentThread());
+  DCHECK(exists);
+  *exists = base::PathExists(path);
+}
+
 }  // anonymous namespace
 
 // Template URL where to fetch OEM services customization manifest from.
@@ -160,7 +179,7 @@
       ServicesCustomizationDocument::GetInstance()->StartFetching();
       // In case of missing customization ID, SetCurrentApps will be called
       // synchronously from StartFetching and this function will be called
-      // recursively so we need to return to don't call LoadFinished twice.
+      // recursively so we need to return to avoid calling LoadFinished twice.
       // In case of async load it is safe to return empty list because this
       // provider didn't install any app yet so no app can be removed due to
       // returning empty list.
@@ -341,20 +360,63 @@
 
 // ServicesCustomizationDocument implementation. -------------------------------
 
+class ServicesCustomizationDocument::ApplyingTask {
+ public:
+  // Registers in ServicesCustomizationDocument;
+  explicit ApplyingTask(ServicesCustomizationDocument* document);
+
+  // Do not automatically deregister as we might be called on invalid thread.
+  ~ApplyingTask();
+
+  // Mark task finished and check for customization applied.
+  void Finished(bool success);
+
+ private:
+  ServicesCustomizationDocument* document_;
+
+  // This is error-checking flag to prevent destroying unfinished task
+  // or double finish.
+  bool engaged_;
+};
+
+ServicesCustomizationDocument::ApplyingTask::ApplyingTask(
+    ServicesCustomizationDocument* document)
+    : document_(document), engaged_(true) {
+  document->ApplyingTaskStarted();
+}
+
+ServicesCustomizationDocument::ApplyingTask::~ApplyingTask() {
+  DCHECK(!engaged_);
+}
+
+void ServicesCustomizationDocument::ApplyingTask::Finished(bool success) {
+  DCHECK(engaged_);
+  if (engaged_) {
+    engaged_ = false;
+    document_->ApplyingTaskFinished(success);
+  }
+}
+
 ServicesCustomizationDocument::ServicesCustomizationDocument()
     : CustomizationDocument(kAcceptedManifestVersion),
       num_retries_(0),
       fetch_started_(false),
-      network_delay_(base::TimeDelta::FromMilliseconds(
-          kDefaultNetworkRetryDelayMS)),
+      network_delay_(
+          base::TimeDelta::FromMilliseconds(kDefaultNetworkRetryDelayMS)),
+      apply_tasks_started_(0),
+      apply_tasks_finished_(0),
+      apply_tasks_success_(0),
       weak_ptr_factory_(this) {
 }
 
 ServicesCustomizationDocument::ServicesCustomizationDocument(
     const std::string& manifest)
     : CustomizationDocument(kAcceptedManifestVersion),
-      network_delay_(base::TimeDelta::FromMilliseconds(
-          kDefaultNetworkRetryDelayMS)),
+      network_delay_(
+          base::TimeDelta::FromMilliseconds(kDefaultNetworkRetryDelayMS)),
+      apply_tasks_started_(0),
+      apply_tasks_finished_(0),
+      apply_tasks_success_(0),
       weak_ptr_factory_(this) {
   LoadManifestFromString(manifest);
 }
@@ -374,6 +436,8 @@
 void ServicesCustomizationDocument::RegisterPrefs(
     PrefRegistrySimple* registry) {
   registry->RegisterBooleanPref(kServicesCustomizationAppliedPref, false);
+  registry->RegisterStringPref(prefs::kCustomizationDefaultWallpaperURL,
+                               std::string());
 }
 
 // static
@@ -402,6 +466,45 @@
     prefs->SetBoolean(kServicesCustomizationAppliedPref, val);
 }
 
+// static
+base::FilePath ServicesCustomizationDocument::GetCustomizedWallpaperCacheDir() {
+  base::FilePath custom_wallpaper_dir;
+  if (!PathService::Get(chrome::DIR_CHROMEOS_CUSTOM_WALLPAPERS,
+                        &custom_wallpaper_dir)) {
+    LOG(DFATAL) << "Unable to get custom wallpaper dir.";
+    return base::FilePath();
+  }
+  return custom_wallpaper_dir.Append(kCustomizationDefaultWallpaperDir);
+}
+
+// static
+base::FilePath
+ServicesCustomizationDocument::GetCustomizedWallpaperDownloadedFileName() {
+  const base::FilePath dir = GetCustomizedWallpaperCacheDir();
+  if (dir.empty()) {
+    NOTREACHED();
+    return dir;
+  }
+  return dir.Append(kCustomizationDefaultWallpaperDownloadedFile);
+}
+
+void ServicesCustomizationDocument::EnsureCustomizationApplied() {
+  if (WasOOBECustomizationApplied())
+    return;
+
+  // When customization manifest is fetched, applying will start automatically.
+  if (IsReady())
+    return;
+
+  StartFetching();
+}
+
+base::Closure
+ServicesCustomizationDocument::EnsureCustomizationAppliedClosure() {
+  return base::Bind(&ServicesCustomizationDocument::EnsureCustomizationApplied,
+                    weak_ptr_factory_.GetWeakPtr());
+}
+
 void ServicesCustomizationDocument::StartFetching() {
   if (IsReady() || fetch_started_)
     return;
@@ -416,7 +519,7 @@
       url_ = GURL(base::StringPrintf(
           kManifestUrl, StringToLowerASCII(customization_id).c_str()));
     } else {
-      // There is no customization ID in VPD remember that.
+      // Remember that there is no customization ID in VPD.
       OnCustomizationNotFound();
       return;
     }
@@ -493,7 +596,7 @@
 }
 
 void ServicesCustomizationDocument::OnManifestLoaded() {
-  if (!ServicesCustomizationDocument::WasOOBECustomizationApplied())
+  if (!WasOOBECustomizationApplied())
     ApplyOOBECustomization();
 
   scoped_ptr<base::DictionaryValue> prefs =
@@ -545,18 +648,24 @@
 }
 
 bool ServicesCustomizationDocument::ApplyOOBECustomization() {
-  // TODO(dpolukhin): apply default wallpaper, crbug.com/348136.
-  SetApplied(true);
-  return true;
+  if (apply_tasks_started_)
+    return false;
+
+  CheckAndApplyWallpaper();
+  return false;
 }
 
-GURL ServicesCustomizationDocument::GetDefaultWallpaperUrl() const {
+bool ServicesCustomizationDocument::GetDefaultWallpaperUrl(
+    GURL* out_url) const {
   if (!IsReady())
-    return GURL();
+    return false;
 
   std::string url;
-  root_->GetString(kDefaultWallpaperAttr, &url);
-  return GURL(url);
+  if (!root_->GetString(kDefaultWallpaperAttr, &url))
+    return false;
+
+  *out_url = GURL(url);
+  return true;
 }
 
 bool ServicesCustomizationDocument::GetDefaultApps(
@@ -689,4 +798,172 @@
   g_test_services_customization_document = NULL;
 }
 
+void ServicesCustomizationDocument::StartOEMWallpaperDownload(
+    const GURL& wallpaper_url,
+    scoped_ptr<ServicesCustomizationDocument::ApplyingTask> applying) {
+  DCHECK(wallpaper_url.is_valid());
+
+  const base::FilePath dir = GetCustomizedWallpaperCacheDir();
+  const base::FilePath file = GetCustomizedWallpaperDownloadedFileName();
+  if (dir.empty() || file.empty()) {
+    NOTREACHED();
+    applying->Finished(false);
+    return;
+  }
+
+  wallpaper_downloader_.reset(new CustomizationWallpaperDownloader(
+      g_browser_process->system_request_context(),
+      wallpaper_url,
+      dir,
+      file,
+      base::Bind(&ServicesCustomizationDocument::OnOEMWallpaperDownloaded,
+                 weak_ptr_factory_.GetWeakPtr(),
+                 base::Passed(applying.Pass()))));
+
+  wallpaper_downloader_->Start();
+}
+
+void ServicesCustomizationDocument::CheckAndApplyWallpaper() {
+  if (wallpaper_downloader_.get()) {
+    VLOG(1) << "CheckAndApplyWallpaper(): download has already started.";
+    return;
+  }
+  scoped_ptr<ServicesCustomizationDocument::ApplyingTask> applying(
+      new ServicesCustomizationDocument::ApplyingTask(this));
+
+  GURL wallpaper_url;
+  if (!GetDefaultWallpaperUrl(&wallpaper_url)) {
+    PrefService* pref_service = g_browser_process->local_state();
+    std::string current_url =
+        pref_service->GetString(prefs::kCustomizationDefaultWallpaperURL);
+    if (!current_url.empty()) {
+      VLOG(1) << "ServicesCustomizationDocument::CheckAndApplyWallpaper() : "
+              << "No wallpaper URL attribute in customization document, "
+              << "but current value is non-empty: '" << current_url
+              << "'. Ignored.";
+    }
+    applying->Finished(true);
+    return;
+  }
+
+  // Should fail if this ever happens in tests.
+  DCHECK(wallpaper_url.is_valid());
+  if (!wallpaper_url.is_valid()) {
+    if (!wallpaper_url.is_empty()) {
+      LOG(WARNING) << "Invalid Customized Wallpaper URL '"
+                   << wallpaper_url.spec() << "'.";
+    }
+    applying->Finished(false);
+    return;
+  }
+
+  scoped_ptr<bool> exists(new bool(false));
+
+  base::Closure check_file_exists =
+      base::Bind(&CheckWallpaperCacheExists,
+                 GetCustomizedWallpaperDownloadedFileName(),
+                 base::Unretained(exists.get()));
+  base::Closure on_checked_closure =
+      base::Bind(&ServicesCustomizationDocument::OnCheckedWallpaperCacheExists,
+                 weak_ptr_factory_.GetWeakPtr(),
+                 base::Passed(exists.Pass()),
+                 base::Passed(applying.Pass()));
+  if (!content::BrowserThread::PostBlockingPoolTaskAndReply(
+          FROM_HERE, check_file_exists, on_checked_closure)) {
+    LOG(WARNING) << "Failed to start check Wallpaper cache exists.";
+  }
+}
+
+void ServicesCustomizationDocument::OnCheckedWallpaperCacheExists(
+    scoped_ptr<bool> exists,
+    scoped_ptr<ServicesCustomizationDocument::ApplyingTask> applying) {
+  DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+  DCHECK(exists);
+  DCHECK(applying);
+
+  ApplyWallpaper(*exists, applying.Pass());
+}
+
+void ServicesCustomizationDocument::ApplyWallpaper(
+    bool default_wallpaper_file_exists,
+    scoped_ptr<ServicesCustomizationDocument::ApplyingTask> applying) {
+  GURL wallpaper_url;
+  const bool wallpaper_url_present = GetDefaultWallpaperUrl(&wallpaper_url);
+
+  PrefService* pref_service = g_browser_process->local_state();
+
+  std::string current_url =
+      pref_service->GetString(prefs::kCustomizationDefaultWallpaperURL);
+  if (current_url != wallpaper_url.spec()) {
+    if (wallpaper_url_present) {
+      VLOG(1) << "ServicesCustomizationDocument::ApplyWallpaper() : "
+              << "Wallpaper URL in customization document '"
+              << wallpaper_url.spec() << "' differs from current '"
+              << current_url << "'."
+              << (GURL(current_url).is_valid() && default_wallpaper_file_exists
+                      ? " Ignored."
+                      : " Will refetch.");
+    } else {
+      VLOG(1) << "ServicesCustomizationDocument::ApplyWallpaper() : "
+              << "No wallpaper URL attribute in customization document, "
+              << "but current value is non-empty: '" << current_url
+              << "'. Ignored.";
+    }
+  }
+  if (!wallpaper_url_present) {
+    applying->Finished(true);
+    return;
+  }
+
+  DCHECK(wallpaper_url.is_valid());
+
+  // Never update system-wide wallpaper (i.e. do not check
+  // current_url == wallpaper_url.spec() )
+  if (GURL(current_url).is_valid() && default_wallpaper_file_exists) {
+    VLOG(1)
+        << "ServicesCustomizationDocument::ApplyWallpaper() : reuse existing";
+    OnOEMWallpaperDownloaded(applying.Pass(), true, GURL(current_url));
+  } else {
+    VLOG(1)
+        << "ServicesCustomizationDocument::ApplyWallpaper() : start download";
+    StartOEMWallpaperDownload(wallpaper_url, applying.Pass());
+  }
+}
+
+void ServicesCustomizationDocument::OnOEMWallpaperDownloaded(
+    scoped_ptr<ServicesCustomizationDocument::ApplyingTask> applying,
+    bool success,
+    const GURL& wallpaper_url) {
+  if (success) {
+    DCHECK(wallpaper_url.is_valid());
+
+    VLOG(1) << "Setting default wallpaper to '"
+            << GetCustomizedWallpaperDownloadedFileName().value() << "' ('"
+            << wallpaper_url.spec() << "')";
+    WallpaperManager::Get()->SetCustomizedDefaultWallpaper(
+        wallpaper_url,
+        GetCustomizedWallpaperDownloadedFileName(),
+        GetCustomizedWallpaperCacheDir());
+  }
+  wallpaper_downloader_.reset();
+  applying->Finished(success);
+}
+
+void ServicesCustomizationDocument::ApplyingTaskStarted() {
+  ++apply_tasks_started_;
+}
+
+void ServicesCustomizationDocument::ApplyingTaskFinished(bool success) {
+  DCHECK_GT(apply_tasks_started_, apply_tasks_finished_);
+  ++apply_tasks_finished_;
+
+  apply_tasks_success_ += success;
+
+  if (apply_tasks_started_ != apply_tasks_finished_)
+    return;
+
+  if (apply_tasks_success_ == apply_tasks_finished_)
+    SetApplied(true);
+}
+
 }  // namespace chromeos
diff --git a/chrome/browser/chromeos/customization_document.h b/chrome/browser/chromeos/customization_document.h
index 1c0ea8f..97e166d 100644
--- a/chrome/browser/chromeos/customization_document.h
+++ b/chrome/browser/chromeos/customization_document.h
@@ -42,6 +42,7 @@
 
 namespace chromeos {
 
+class CustomizationWallpaperDownloader;
 class ServicesCustomizationExternalLoader;
 
 namespace system {
@@ -135,7 +136,8 @@
 // OEM services customization document class.
 // ServicesCustomizationDocument is fetched from network therefore it is not
 // ready just after creation. Fetching of the manifest should be initiated
-// outside this class by calling StartFetching() method.
+// outside this class by calling StartFetching() or EnsureCustomizationApplied()
+// methods.
 // User of the file should check IsReady before use it.
 class ServicesCustomizationDocument : public CustomizationDocument,
                                       private net::URLFetcherDelegate {
@@ -152,6 +154,12 @@
   // once per machine.
   static bool WasOOBECustomizationApplied();
 
+  // If customization has not been applied, start fetching and applying.
+  void EnsureCustomizationApplied();
+
+  // Returns Closure with the EnsureCustomizationApplied() method.
+  base::Closure EnsureCustomizationAppliedClosure();
+
   // Start fetching customization document.
   void StartFetching();
 
@@ -159,8 +167,9 @@
   // applied successfully. Return true if customization was applied.
   bool ApplyOOBECustomization();
 
-  // Returns default wallpaper URL.
-  GURL GetDefaultWallpaperUrl() const;
+  // Returns true if default wallpaper URL attribute found in manifest.
+  // |out_url| is set to attribute value.
+  bool GetDefaultWallpaperUrl(GURL* out_url) const;
 
   // Returns list of default apps.
   bool GetDefaultApps(std::vector<std::string>* ids) const;
@@ -179,12 +188,21 @@
   // Remove instance of ServicesCustomizationDocument for tests.
   static void ShutdownForTesting();
 
+  // These methods are also called by WallpaperManager to get "global default"
+  // customized wallpaper path (and to init default wallpaper path from it)
+  // before first wallpaper is shown.
+  static base::FilePath GetCustomizedWallpaperCacheDir();
+  static base::FilePath GetCustomizedWallpaperDownloadedFileName();
+
  private:
   friend struct DefaultSingletonTraits<ServicesCustomizationDocument>;
 
   typedef std::vector<base::WeakPtr<ServicesCustomizationExternalLoader> >
       ExternalLoaders;
 
+  // Guard for a single application task (wallpaper downloading, for example).
+  class ApplyingTask;
+
   // C-tor for singleton construction.
   ServicesCustomizationDocument();
 
@@ -237,6 +255,36 @@
       const std::string& locale,
       const base::DictionaryValue& root) const;
 
+  // Start download of wallpaper image if needed.
+  void StartOEMWallpaperDownload(const GURL& wallpaper_url,
+                                 scoped_ptr<ApplyingTask> applying);
+
+  // Check that current customized wallpaper cache exists. Once wallpaper is
+  // downloaded, it's never updated (even if manifest is re-fetched).
+  // Start wallpaper download if needed.
+  void CheckAndApplyWallpaper();
+
+  // Intermediate function to pass the result of PathExists to ApplyWallpaper.
+  void OnCheckedWallpaperCacheExists(scoped_ptr<bool> exists,
+                                     scoped_ptr<ApplyingTask> applying);
+
+  // Called after downloaded wallpaper has been checked.
+  void ApplyWallpaper(bool default_wallpaper_file_exists,
+                      scoped_ptr<ApplyingTask> applying);
+
+  // Set Shell default wallpaper to customized.
+  // It's wrapped as a callback and passed as a parameter to
+  // CustomizationWallpaperDownloader.
+  void OnOEMWallpaperDownloaded(scoped_ptr<ApplyingTask> applying,
+                                bool success,
+                                const GURL& wallpaper_url);
+
+  // Register one of Customization applying tasks.
+  void ApplyingTaskStarted();
+
+  // Mark task finished and check for "all customization applied".
+  void ApplyingTaskFinished(bool success);
+
   // Services customization manifest URL.
   GURL url_;
 
@@ -255,6 +303,19 @@
   // Known external loaders.
   ExternalLoaders external_loaders_;
 
+  scoped_ptr<CustomizationWallpaperDownloader> wallpaper_downloader_;
+
+  // This is barrier until customization is applied.
+  // When number of finished tasks match number of started - customization is
+  // applied.
+  size_t apply_tasks_started_;
+  size_t apply_tasks_finished_;
+
+  // This is the number of successfully finished customization tasks.
+  // If it matches number of tasks finished - customization is applied
+  // successfully.
+  size_t apply_tasks_success_;
+
   // Weak factory for callbacks.
   base::WeakPtrFactory<ServicesCustomizationDocument> weak_ptr_factory_;
 
diff --git a/chrome/browser/chromeos/customization_document_unittest.cc b/chrome/browser/chromeos/customization_document_unittest.cc
index 4eae520..cb91510 100644
--- a/chrome/browser/chromeos/customization_document_unittest.cc
+++ b/chrome/browser/chromeos/customization_document_unittest.cc
@@ -76,7 +76,6 @@
 const char kGoodServicesManifest[] =
     "{"
     "  \"version\": \"1.0\","
-    "  \"default_wallpaper\": \"http://somedomain.com/image.png\",\n"
     "  \"default_apps\": [\n"
     "    \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\n"
     "    \"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\"\n"
@@ -323,19 +322,20 @@
   RunUntilIdle();
   EXPECT_TRUE(doc->IsReady());
 
-  EXPECT_EQ(doc->GetDefaultWallpaperUrl().spec(),
-            "http://somedomain.com/image.png");
+  GURL wallpaper_url;
+  EXPECT_FALSE(doc->GetDefaultWallpaperUrl(&wallpaper_url));
+  EXPECT_EQ("", wallpaper_url.spec());
 
   std::vector<std::string> default_apps;
   EXPECT_TRUE(doc->GetDefaultApps(&default_apps));
   ASSERT_EQ(default_apps.size(), 2u);
 
-  EXPECT_EQ(default_apps[0], "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
-  EXPECT_EQ(default_apps[1], "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
+  EXPECT_EQ("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", default_apps[0]);
+  EXPECT_EQ("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", default_apps[1]);
 
-  EXPECT_EQ(doc->GetOemAppsFolderName("en-US"), "EN-US OEM Name");
-  EXPECT_EQ(doc->GetOemAppsFolderName("en"), "EN OEM Name");
-  EXPECT_EQ(doc->GetOemAppsFolderName("ru"), "Default OEM Name");
+  EXPECT_EQ("EN-US OEM Name", doc->GetOemAppsFolderName("en-US"));
+  EXPECT_EQ("EN OEM Name", doc->GetOemAppsFolderName("en"));
+  EXPECT_EQ("Default OEM Name", doc->GetOemAppsFolderName("ru"));
 }
 
 TEST_F(ServicesCustomizationDocumentTest, NoCustomizationIdInVpd) {
@@ -427,7 +427,7 @@
   app_list::AppListSyncableService* service =
       app_list::AppListSyncableServiceFactory::GetForProfile(profile.get());
   ASSERT_TRUE(service);
-  EXPECT_EQ(service->GetOemFolderNameForTest(), "EN OEM Name");
+  EXPECT_EQ("EN OEM Name", service->GetOemFolderNameForTest());
 }
 
 TEST_F(ServicesCustomizationDocumentTest, CustomizationManifestNotFound) {
diff --git a/chrome/browser/chromeos/customization_wallpaper_downloader.cc b/chrome/browser/chromeos/customization_wallpaper_downloader.cc
new file mode 100644
index 0000000..d672945
--- /dev/null
+++ b/chrome/browser/chromeos/customization_wallpaper_downloader.cc
@@ -0,0 +1,194 @@
+// 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.
+
+#include "chrome/browser/chromeos/customization_wallpaper_downloader.h"
+
+#include <math.h>
+#include <algorithm>
+
+#include "base/file_util.h"
+#include "content/public/browser/browser_thread.h"
+#include "net/base/load_flags.h"
+#include "net/http/http_status_code.h"
+#include "net/url_request/url_fetcher.h"
+#include "net/url_request/url_request_context_getter.h"
+#include "url/gurl.h"
+
+namespace chromeos {
+namespace {
+// This is temporary file suffix (for downloading or resizing).
+const char kTemporarySuffix[] = ".tmp";
+
+// Sleep between wallpaper retries (used multiplied by squared retry number).
+const unsigned kRetrySleepSeconds = 10;
+
+// Retry is infinite with increasing intervals. When calculated delay becomes
+// longer than maximum (kMaxRetrySleepSeconds) it is set to the maximum.
+const double kMaxRetrySleepSeconds = 6 * 3600;  // 6 hours
+
+void CreateWallpaperDirectory(const base::FilePath& wallpaper_dir,
+                              bool* success) {
+  DCHECK(content::BrowserThread::GetBlockingPool()->RunsTasksOnCurrentThread());
+  DCHECK(success);
+
+  *success = CreateDirectoryAndGetError(wallpaper_dir, NULL);
+  if (!*success) {
+    NOTREACHED() << "Failed to create directory '" << wallpaper_dir.value()
+                 << "'";
+  }
+}
+
+void RenameTemporaryFile(const base::FilePath& from,
+                         const base::FilePath& to,
+                         bool* success) {
+  DCHECK(content::BrowserThread::GetBlockingPool()->RunsTasksOnCurrentThread());
+  DCHECK(success);
+
+  base::File::Error error;
+  if (base::ReplaceFile(from, to, &error)) {
+    *success = true;
+  } else {
+    LOG(WARNING)
+        << "Failed to rename temporary file of Customized Wallpaper. error="
+        << error;
+    *success = false;
+  }
+}
+
+}  // namespace
+
+CustomizationWallpaperDownloader::CustomizationWallpaperDownloader(
+    net::URLRequestContextGetter* url_context_getter,
+    const GURL& wallpaper_url,
+    const base::FilePath& wallpaper_dir,
+    const base::FilePath& wallpaper_downloaded_file,
+    base::Callback<void(bool success, const GURL&)>
+        on_wallpaper_fetch_completed)
+    : url_context_getter_(url_context_getter),
+      wallpaper_url_(wallpaper_url),
+      wallpaper_dir_(wallpaper_dir),
+      wallpaper_downloaded_file_(wallpaper_downloaded_file),
+      wallpaper_temporary_file_(wallpaper_downloaded_file.value() +
+                                kTemporarySuffix),
+      retries_(0),
+      on_wallpaper_fetch_completed_(on_wallpaper_fetch_completed),
+      weak_factory_(this) {
+  DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+}
+
+CustomizationWallpaperDownloader::~CustomizationWallpaperDownloader() {
+  DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+}
+
+void CustomizationWallpaperDownloader::StartRequest() {
+  DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+  DCHECK(wallpaper_url_.is_valid());
+
+  url_fetcher_.reset(
+      net::URLFetcher::Create(wallpaper_url_, net::URLFetcher::GET, this));
+  url_fetcher_->SetRequestContext(url_context_getter_);
+  url_fetcher_->SetLoadFlags(net::LOAD_BYPASS_CACHE |
+                             net::LOAD_DISABLE_CACHE |
+                             net::LOAD_DO_NOT_SAVE_COOKIES |
+                             net::LOAD_DO_NOT_SEND_COOKIES |
+                             net::LOAD_DO_NOT_SEND_AUTH_DATA);
+  base::SequencedWorkerPool* blocking_pool =
+      content::BrowserThread::GetBlockingPool();
+  url_fetcher_->SaveResponseToFileAtPath(
+      wallpaper_temporary_file_,
+      blocking_pool->GetSequencedTaskRunner(blocking_pool->GetSequenceToken()));
+  url_fetcher_->Start();
+}
+
+void CustomizationWallpaperDownloader::Retry() {
+  DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+  ++retries_;
+
+  const double delay_seconds =
+      std::min(kMaxRetrySleepSeconds,
+               static_cast<double>(retries_) * retries_ * kRetrySleepSeconds);
+  const base::TimeDelta delay =
+      base::TimeDelta::FromSeconds(lround(delay_seconds));
+
+  VLOG(1) << "Schedule Customized Wallpaper download in " << delay.InSecondsF()
+          << " seconds (retry = " << retries_ << ").";
+  request_scheduled_.Start(
+      FROM_HERE, delay, this, &CustomizationWallpaperDownloader::StartRequest);
+}
+
+void CustomizationWallpaperDownloader::Start() {
+  DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+  scoped_ptr<bool> success(new bool(false));
+
+  base::Closure mkdir_closure = base::Bind(&CreateWallpaperDirectory,
+                                           wallpaper_dir_,
+                                           base::Unretained(success.get()));
+  base::Closure on_created_closure =
+      base::Bind(&CustomizationWallpaperDownloader::OnWallpaperDirectoryCreated,
+                 weak_factory_.GetWeakPtr(),
+                 base::Passed(success.Pass()));
+  if (!content::BrowserThread::PostBlockingPoolTaskAndReply(
+          FROM_HERE, mkdir_closure, on_created_closure)) {
+    LOG(WARNING) << "Failed to start Customized Wallpaper download.";
+  }
+}
+
+void CustomizationWallpaperDownloader::OnWallpaperDirectoryCreated(
+    scoped_ptr<bool> success) {
+  DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+  if (*success)
+    StartRequest();
+}
+
+void CustomizationWallpaperDownloader::OnURLFetchComplete(
+    const net::URLFetcher* source) {
+  DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+  DCHECK_EQ(url_fetcher_.get(), source);
+
+  const net::URLRequestStatus status = source->GetStatus();
+  const int response_code = source->GetResponseCode();
+
+  const bool server_error =
+      !status.is_success() ||
+      (response_code >= net::HTTP_INTERNAL_SERVER_ERROR &&
+       response_code < (net::HTTP_INTERNAL_SERVER_ERROR + 100));
+
+  VLOG(1) << "CustomizationWallpaperDownloader::OnURLFetchComplete(): status="
+          << status.status();
+
+  if (server_error) {
+    url_fetcher_.reset();
+    Retry();
+    return;
+  }
+
+  base::FilePath response_path;
+  url_fetcher_->GetResponseAsFilePath(true, &response_path);
+  url_fetcher_.reset();
+
+  scoped_ptr<bool> success(new bool(false));
+
+  base::Closure rename_closure = base::Bind(&RenameTemporaryFile,
+                                            response_path,
+                                            wallpaper_downloaded_file_,
+                                            base::Unretained(success.get()));
+  base::Closure on_rename_closure =
+      base::Bind(&CustomizationWallpaperDownloader::OnTemporaryFileRenamed,
+                 weak_factory_.GetWeakPtr(),
+                 base::Passed(success.Pass()));
+  if (!content::BrowserThread::PostBlockingPoolTaskAndReply(
+          FROM_HERE, rename_closure, on_rename_closure)) {
+    LOG(WARNING)
+        << "Failed to start Customized Wallpaper Rename DownloadedFile.";
+    on_wallpaper_fetch_completed_.Run(false, wallpaper_url_);
+  }
+}
+
+void CustomizationWallpaperDownloader::OnTemporaryFileRenamed(
+    scoped_ptr<bool> success) {
+  DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+  on_wallpaper_fetch_completed_.Run(*success, wallpaper_url_);
+}
+
+}  //   namespace chromeos
diff --git a/chrome/browser/chromeos/customization_wallpaper_downloader.h b/chrome/browser/chromeos/customization_wallpaper_downloader.h
new file mode 100644
index 0000000..9922ffb
--- /dev/null
+++ b/chrome/browser/chromeos/customization_wallpaper_downloader.h
@@ -0,0 +1,102 @@
+// 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.
+
+#ifndef CHROME_BROWSER_CHROMEOS_CUSTOMIZATION_WALLPAPER_DOWNLOADER_H_
+#define CHROME_BROWSER_CHROMEOS_CUSTOMIZATION_WALLPAPER_DOWNLOADER_H_
+
+#include <string>
+
+#include "base/bind.h"
+#include "base/files/file_path.h"
+#include "base/macros.h"
+#include "base/memory/weak_ptr.h"
+#include "base/time/time.h"
+#include "base/timer/timer.h"
+#include "net/url_request/url_fetcher_delegate.h"
+#include "url/gurl.h"
+
+namespace net {
+class URLRequestContextGetter;
+}  // namespace net
+
+namespace chromeos {
+
+// Download customized wallpaper.
+// Owner of this class must provide callback, which will be called on
+// finished (either successful or failed) wallpaper download.
+class CustomizationWallpaperDownloader : public net::URLFetcherDelegate {
+ public:
+  // - |url_context_getter| - Context to initialize net::URLFetcher.
+  // - |wallpaper_url| - wallpaper URL to download.
+  // - |wallpaper_dir| - directory, where wallpaper will be downloaded
+  // (it will be created).
+  // - |wallpaper_downloaded_file| - full path to local file to store downloaded
+  // wallpaper file. File is downloaded to temporary location
+  // |wallpaper_downloaded_file| + ".tmp", so directory must be writable.
+  // After download is completed, temporary file will be renamed to
+  // |wallpaper_downloaded_file|.
+  CustomizationWallpaperDownloader(
+      net::URLRequestContextGetter* url_context_getter,
+      const GURL& wallpaper_url,
+      const base::FilePath& wallpaper_dir,
+      const base::FilePath& wallpaper_downloaded_file,
+      base::Callback<void(bool success, const GURL&)>
+          on_wallpaper_fetch_completed);
+
+  virtual ~CustomizationWallpaperDownloader();
+
+  // Start download.
+  void Start();
+
+  // net::URLFetcherDelegate
+  virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE;
+
+ private:
+  // Start new request.
+  void StartRequest();
+
+  // Schedules retry.
+  void Retry();
+
+  // Called on UI thread.
+  void OnWallpaperDirectoryCreated(scoped_ptr<bool> success);
+
+  // Called on UI thread.
+  void OnTemporaryFileRenamed(scoped_ptr<bool> success);
+
+  // This is used to initialize net::URLFetcher object.
+  scoped_refptr<net::URLRequestContextGetter> url_context_getter_;
+
+  // This fetcher is used to download wallpaper file.
+  scoped_ptr<net::URLFetcher> url_fetcher_;
+
+  // The wallpaper URL to fetch.
+  const GURL wallpaper_url_;
+
+  // Wallpaper directory (to be created).
+  const base::FilePath wallpaper_dir_;
+
+  // Full path to local file to save downloaded wallpaper.
+  const base::FilePath wallpaper_downloaded_file_;
+
+  // Full path to temporary file to fetch downloaded wallpper.
+  const base::FilePath wallpaper_temporary_file_;
+
+  // Pending retry.
+  base::OneShotTimer<CustomizationWallpaperDownloader> request_scheduled_;
+
+  // Number of download retries (first attempt is not counted as retry).
+  size_t retries_;
+
+  // Callback supplied by caller.
+  base::Callback<void(bool success, const GURL&)> on_wallpaper_fetch_completed_;
+
+  base::WeakPtrFactory<CustomizationWallpaperDownloader> weak_factory_;
+
+  DISALLOW_COPY_AND_ASSIGN(CustomizationWallpaperDownloader);
+};
+
+}  //   namespace chromeos
+
+#endif  // CHROME_BROWSER_CHROMEOS_CUSTOMIZATION_WALLPAPER_DOWNLOADER_H_
diff --git a/chrome/browser/chromeos/device/DEPS b/chrome/browser/chromeos/device/DEPS
new file mode 100644
index 0000000..2225efa
--- /dev/null
+++ b/chrome/browser/chromeos/device/DEPS
@@ -0,0 +1,3 @@
+include_rules = [
+  "+device/hid"
+]
diff --git a/chrome/browser/chromeos/device/input_service_proxy.cc b/chrome/browser/chromeos/device/input_service_proxy.cc
new file mode 100644
index 0000000..f065775
--- /dev/null
+++ b/chrome/browser/chromeos/device/input_service_proxy.cc
@@ -0,0 +1,148 @@
+// 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.
+
+#include "chrome/browser/chromeos/device/input_service_proxy.h"
+
+#include "base/task_runner_util.h"
+#include "content/public/browser/browser_thread.h"
+
+using content::BrowserThread;
+using device::InputServiceLinux;
+
+typedef device::InputServiceLinux::InputDeviceInfo InputDeviceInfo;
+
+namespace chromeos {
+
+class InputServiceProxy::ServiceObserver : public InputServiceLinux::Observer {
+ public:
+  ServiceObserver() { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); }
+  virtual ~ServiceObserver() { DCHECK(CalledOnValidThread()); }
+
+  void Initialize(const base::WeakPtr<InputServiceProxy>& proxy) {
+    DCHECK(CalledOnValidThread());
+    InputServiceLinux::GetInstance()->AddObserver(this);
+    proxy_ = proxy;
+  }
+
+  void Shutdown() {
+    DCHECK(CalledOnValidThread());
+    if (InputServiceLinux::HasInstance())
+      InputServiceLinux::GetInstance()->RemoveObserver(this);
+    delete this;
+  }
+
+  std::vector<InputDeviceInfo> GetDevices() {
+    DCHECK(CalledOnValidThread());
+    std::vector<InputDeviceInfo> devices;
+    if (InputServiceLinux::HasInstance())
+      InputServiceLinux::GetInstance()->GetDevices(&devices);
+    return devices;
+  }
+
+  void GetDeviceInfo(const std::string& id,
+                     const InputServiceProxy::GetDeviceInfoCallback& callback) {
+    DCHECK(CalledOnValidThread());
+    bool success = false;
+    InputDeviceInfo info;
+    info.id = id;
+    if (InputServiceLinux::HasInstance())
+      success = InputServiceLinux::GetInstance()->GetDeviceInfo(id, &info);
+    BrowserThread::PostTask(
+        BrowserThread::UI, FROM_HERE, base::Bind(callback, success, info));
+  }
+
+  // InputServiceLinux::Observer implementation:
+  virtual void OnInputDeviceAdded(
+      const InputServiceLinux::InputDeviceInfo& info) OVERRIDE {
+    DCHECK(CalledOnValidThread());
+    BrowserThread::PostTask(
+        BrowserThread::UI,
+        FROM_HERE,
+        base::Bind(&InputServiceProxy::OnDeviceAdded, proxy_, info));
+  }
+
+  virtual void OnInputDeviceRemoved(const std::string& id) OVERRIDE {
+    DCHECK(CalledOnValidThread());
+    BrowserThread::PostTask(
+        BrowserThread::UI,
+        FROM_HERE,
+        base::Bind(&InputServiceProxy::OnDeviceRemoved, proxy_, id));
+  }
+
+ private:
+  bool CalledOnValidThread() const {
+    return BrowserThread::CurrentlyOn(BrowserThread::FILE);
+  }
+
+  base::WeakPtr<InputServiceProxy> proxy_;
+
+  DISALLOW_COPY_AND_ASSIGN(ServiceObserver);
+};
+
+InputServiceProxy::InputServiceProxy()
+    : service_observer_(new ServiceObserver()), weak_factory_(this) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  BrowserThread::PostTask(
+      BrowserThread::FILE,
+      FROM_HERE,
+      base::Bind(&InputServiceProxy::ServiceObserver::Initialize,
+                 base::Unretained(service_observer_.get()),
+                 weak_factory_.GetWeakPtr()));
+}
+
+InputServiceProxy::~InputServiceProxy() {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  BrowserThread::PostTask(
+      BrowserThread::FILE,
+      FROM_HERE,
+      base::Bind(&InputServiceProxy::ServiceObserver::Shutdown,
+                 base::Unretained(service_observer_.release())));
+}
+
+void InputServiceProxy::AddObserver(Observer* observer) {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  if (observer)
+    observers_.AddObserver(observer);
+}
+
+void InputServiceProxy::RemoveObserver(Observer* observer) {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  if (observer)
+    observers_.RemoveObserver(observer);
+}
+
+void InputServiceProxy::GetDevices(const GetDevicesCallback& callback) {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  BrowserThread::PostTaskAndReplyWithResult(
+      BrowserThread::FILE,
+      FROM_HERE,
+      base::Bind(&InputServiceProxy::ServiceObserver::GetDevices,
+                 base::Unretained(service_observer_.get())),
+      callback);
+}
+
+void InputServiceProxy::GetDeviceInfo(const std::string& id,
+                                      const GetDeviceInfoCallback& callback) {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  BrowserThread::PostTask(
+      BrowserThread::FILE,
+      FROM_HERE,
+      base::Bind(&InputServiceProxy::ServiceObserver::GetDeviceInfo,
+                 base::Unretained(service_observer_.release()),
+                 id,
+                 callback));
+}
+
+void InputServiceProxy::OnDeviceAdded(
+    const InputServiceLinux::InputDeviceInfo& info) {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  FOR_EACH_OBSERVER(Observer, observers_, OnInputDeviceAdded(info));
+}
+
+void InputServiceProxy::OnDeviceRemoved(const std::string& id) {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  FOR_EACH_OBSERVER(Observer, observers_, OnInputDeviceRemoved(id));
+}
+
+}  // namespace chromeos
diff --git a/chrome/browser/chromeos/device/input_service_proxy.h b/chrome/browser/chromeos/device/input_service_proxy.h
new file mode 100644
index 0000000..11ba071
--- /dev/null
+++ b/chrome/browser/chromeos/device/input_service_proxy.h
@@ -0,0 +1,65 @@
+// 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.
+
+#ifndef CHROME_BROWSER_CHROMEOS_DEVICE_INPUT_SERVICE_PROXY_H_
+#define CHROME_BROWSER_CHROMEOS_DEVICE_INPUT_SERVICE_PROXY_H_
+
+#include <vector>
+
+#include "base/callback.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/memory/weak_ptr.h"
+#include "base/observer_list.h"
+#include "base/threading/thread_checker.h"
+#include "device/hid/input_service_linux.h"
+
+namespace chromeos {
+
+// Proxy to device::InputServiceLinux. Should be created and used on the UI
+// thread.
+class InputServiceProxy {
+ public:
+  typedef device::InputServiceLinux::InputDeviceInfo InputDeviceInfo;
+
+  class Observer {
+   public:
+    virtual ~Observer() {}
+    virtual void OnInputDeviceAdded(const InputDeviceInfo& info) = 0;
+    virtual void OnInputDeviceRemoved(const std::string& id) = 0;
+  };
+
+  typedef base::Callback<void(const std::vector<InputDeviceInfo>& devices)>
+      GetDevicesCallback;
+  typedef base::Callback<void(bool success, const InputDeviceInfo& info)>
+      GetDeviceInfoCallback;
+
+  InputServiceProxy();
+  ~InputServiceProxy();
+
+  void AddObserver(Observer* observer);
+  void RemoveObserver(Observer* observer);
+
+  void GetDevices(const GetDevicesCallback& callback);
+  void GetDeviceInfo(const std::string& id,
+                     const GetDeviceInfoCallback& callback);
+
+ private:
+  class ServiceObserver;
+
+  void OnDeviceAdded(const device::InputServiceLinux::InputDeviceInfo& info);
+  void OnDeviceRemoved(const std::string& id);
+
+  ObserverList<Observer> observers_;
+  scoped_ptr<ServiceObserver> service_observer_;
+
+  base::ThreadChecker thread_checker_;
+
+  base::WeakPtrFactory<InputServiceProxy> weak_factory_;
+
+  DISALLOW_COPY_AND_ASSIGN(InputServiceProxy);
+};
+
+}  // namespace chromeos
+
+#endif  // CHROME_BROWSER_CHROMEOS_DEVICE_INPUT_SERVICE_PROXY_H_
diff --git a/chrome/browser/chromeos/device/input_service_proxy_browsertest.cc b/chrome/browser/chromeos/device/input_service_proxy_browsertest.cc
new file mode 100644
index 0000000..d55451d
--- /dev/null
+++ b/chrome/browser/chromeos/device/input_service_proxy_browsertest.cc
@@ -0,0 +1,206 @@
+// 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.
+
+#include "base/bind.h"
+#include "base/compiler_specific.h"
+#include "base/macros.h"
+#include "base/run_loop.h"
+#include "chrome/browser/chromeos/device/input_service_proxy.h"
+#include "chrome/test/base/in_process_browser_test.h"
+#include "content/public/browser/browser_thread.h"
+#include "device/hid/input_service_linux.h"
+
+using content::BrowserThread;
+using device::InputServiceLinux;
+
+typedef InputServiceLinux::InputDeviceInfo InputDeviceInfo;
+
+namespace chromeos {
+
+namespace {
+
+const char kKeyboardId[] = "keyboard";
+const char kMouseId[] = "mouse";
+
+class InputServiceLinuxTestImpl : public InputServiceLinux {
+ public:
+  InputServiceLinuxTestImpl() {}
+  virtual ~InputServiceLinuxTestImpl() {}
+
+  void AddDeviceForTesting(const InputDeviceInfo& info) { AddDevice(info); }
+  void RemoveDeviceForTesting(const std::string& id) { RemoveDevice(id); }
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(InputServiceLinuxTestImpl);
+};
+
+class TestObserver : public InputServiceProxy::Observer {
+ public:
+  TestObserver()
+      : wait_for_device_addition_(false), wait_for_device_removal_(false) {}
+  virtual ~TestObserver() {}
+
+  virtual void OnInputDeviceAdded(const InputDeviceInfo& info) OVERRIDE {
+    if (!wait_for_device_addition_)
+      return;
+    EXPECT_TRUE(Equals(expected_info_, info));
+    done_.Run();
+  }
+
+  virtual void OnInputDeviceRemoved(const std::string& id) OVERRIDE {
+    if (!wait_for_device_removal_)
+      return;
+    EXPECT_EQ(expected_id_, id);
+    done_.Run();
+  }
+
+  void WaitForDeviceAddition(const InputDeviceInfo& info) {
+    base::RunLoop run;
+    expected_info_ = info;
+    wait_for_device_addition_ = true;
+    done_ = run.QuitClosure();
+
+    run.Run();
+
+    done_.Reset();
+    wait_for_device_addition_ = false;
+  }
+
+  void WaitForDeviceRemoval(const std::string& id) {
+    base::RunLoop run;
+    expected_id_ = id;
+    wait_for_device_removal_ = true;
+    done_ = run.QuitClosure();
+
+    run.Run();
+
+    done_.Reset();
+    wait_for_device_removal_ = false;
+  }
+
+ private:
+  static bool Equals(const InputDeviceInfo& lhs, const InputDeviceInfo& rhs) {
+    return lhs.id == rhs.id && lhs.name == rhs.name &&
+           lhs.subsystem == rhs.subsystem &&
+           lhs.type == rhs.type &&
+           lhs.is_accelerometer == rhs.is_accelerometer &&
+           lhs.is_joystick == rhs.is_joystick && lhs.is_key == rhs.is_key &&
+           lhs.is_keyboard == rhs.is_keyboard && lhs.is_mouse == rhs.is_mouse &&
+           lhs.is_tablet == rhs.is_tablet &&
+           lhs.is_touchpad == rhs.is_touchpad &&
+           lhs.is_touchscreen == rhs.is_touchscreen;
+  }
+
+  InputDeviceInfo expected_info_;
+  std::string expected_id_;
+
+  bool wait_for_device_addition_;
+  bool wait_for_device_removal_;
+
+  base::Closure done_;
+
+  DISALLOW_COPY_AND_ASSIGN(TestObserver);
+};
+
+void InitInputService() {
+  InputServiceLinux::SetForTesting(new InputServiceLinuxTestImpl());
+}
+
+void AddDevice(const InputDeviceInfo& device) {
+  InputServiceLinuxTestImpl* service =
+      static_cast<InputServiceLinuxTestImpl*>(InputServiceLinux::GetInstance());
+  service->AddDeviceForTesting(device);
+}
+
+void RemoveDevice(const std::string& id) {
+  InputServiceLinuxTestImpl* service =
+      static_cast<InputServiceLinuxTestImpl*>(InputServiceLinux::GetInstance());
+  service->RemoveDeviceForTesting(id);
+}
+
+void OnGetDevices(const base::Closure& done,
+                  const std::vector<InputDeviceInfo>& devices) {
+  EXPECT_EQ(2, static_cast<int>(devices.size()));
+  done.Run();
+}
+
+void OnGetKeyboard(const base::Closure& done,
+                   bool success,
+                   const InputDeviceInfo& info) {
+  EXPECT_TRUE(success);
+  EXPECT_EQ("keyboard", info.id);
+  EXPECT_TRUE(info.is_keyboard);
+  done.Run();
+}
+
+void OnGetMouse(const base::Closure& done,
+                bool success,
+                const InputDeviceInfo& /* info */) {
+  EXPECT_FALSE(success);
+  done.Run();
+}
+
+}  // namespace
+
+class InputServiceProxyTest : public InProcessBrowserTest {
+ public:
+  InputServiceProxyTest() {}
+  virtual ~InputServiceProxyTest() {}
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(InputServiceProxyTest);
+};
+
+IN_PROC_BROWSER_TEST_F(InputServiceProxyTest, Simple) {
+  BrowserThread::PostTask(
+      BrowserThread::FILE, FROM_HERE, base::Bind(&InitInputService));
+  InputServiceProxy proxy;
+  TestObserver observer;
+  proxy.AddObserver(&observer);
+
+  InputDeviceInfo keyboard;
+  keyboard.id = kKeyboardId;
+  keyboard.subsystem = InputServiceLinux::InputDeviceInfo::SUBSYSTEM_INPUT;
+  keyboard.type = InputServiceLinux::InputDeviceInfo::TYPE_USB;
+  keyboard.is_keyboard = true;
+  BrowserThread::PostTask(
+      BrowserThread::FILE, FROM_HERE, base::Bind(&AddDevice, keyboard));
+  observer.WaitForDeviceAddition(keyboard);
+
+  InputDeviceInfo mouse;
+  mouse.id = kMouseId;
+  mouse.subsystem = InputServiceLinux::InputDeviceInfo::SUBSYSTEM_INPUT;
+  mouse.type = InputServiceLinux::InputDeviceInfo::TYPE_BLUETOOTH;
+  mouse.is_mouse = true;
+  BrowserThread::PostTask(
+      BrowserThread::FILE, FROM_HERE, base::Bind(&AddDevice, mouse));
+  observer.WaitForDeviceAddition(mouse);
+
+  {
+    base::RunLoop run;
+    proxy.GetDevices(base::Bind(&OnGetDevices, run.QuitClosure()));
+    run.Run();
+  }
+
+  BrowserThread::PostTask(
+      BrowserThread::FILE, FROM_HERE, base::Bind(&RemoveDevice, kMouseId));
+  observer.WaitForDeviceRemoval(kMouseId);
+
+  {
+    base::RunLoop run;
+    proxy.GetDeviceInfo(kKeyboardId,
+                        base::Bind(&OnGetKeyboard, run.QuitClosure()));
+    run.Run();
+  }
+
+  {
+    base::RunLoop run;
+    proxy.GetDeviceInfo(kMouseId, base::Bind(&OnGetMouse, run.QuitClosure()));
+    run.Run();
+  }
+
+  proxy.RemoveObserver(&observer);
+}
+
+}  // namespace chromeos
diff --git a/chrome/browser/chromeos/drive/change_list_processor.cc b/chrome/browser/chromeos/drive/change_list_processor.cc
index 5ef384d..ac01e49 100644
--- a/chrome/browser/chromeos/drive/change_list_processor.cc
+++ b/chrome/browser/chromeos/drive/change_list_processor.cc
@@ -54,19 +54,12 @@
 };
 
 // Returns true if it's OK to overwrite the local entry with the remote one.
-// |modification_date| is the time of the modification whose result is
-// |remote_entry|.
 bool ShouldApplyChange(const ResourceEntry& local_entry,
-                       const ResourceEntry& remote_entry,
-                       const base::Time& modification_date) {
-  // TODO(hashimoto): Implement more sophisticated conflict resolution.
-
-  // If the entry is locally available and is newly created in this change,
-  // No need to overwrite the local entry.
-  base::Time creation_time =
-      base::Time::FromInternalValue(remote_entry.file_info().creation_time());
-  const bool entry_is_new = creation_time == modification_date;
-  return !entry_is_new;
+                       const ResourceEntry& remote_entry) {
+  if (local_entry.metadata_edit_state() == ResourceEntry::CLEAN)
+    return true;
+  return base::Time::FromInternalValue(remote_entry.modification_date()) >
+      base::Time::FromInternalValue(local_entry.modification_date());
 }
 
 }  // namespace
@@ -85,20 +78,16 @@
 
   entries_.resize(resource_list.entries().size());
   parent_resource_ids_.resize(resource_list.entries().size());
-  modification_dates_.resize(resource_list.entries().size());
   size_t entries_index = 0;
   for (size_t i = 0; i < resource_list.entries().size(); ++i) {
     if (ConvertToResourceEntry(*resource_list.entries()[i],
                                &entries_[entries_index],
                                &parent_resource_ids_[entries_index])) {
-      modification_dates_[entries_index] =
-          resource_list.entries()[i]->modification_date();
       ++entries_index;
     }
   }
   entries_.resize(entries_index);
   parent_resource_ids_.resize(entries_index);
-  modification_dates_.resize(entries_index);
 }
 
 ChangeList::~ChangeList() {}
@@ -147,8 +136,6 @@
         if (entry->shared_with_me())
           uma_stats.IncrementNumSharedWithMeEntries();
       }
-      modification_date_map_[entry->resource_id()] =
-          change_list->modification_dates()[i];
       parent_resource_id_map_[entry->resource_id()] =
           change_list->parent_resource_ids()[i];
       entry_map_[entry->resource_id()].Swap(entry);
@@ -326,11 +313,8 @@
 FileError ChangeListProcessor::ApplyEntry(const ResourceEntry& entry) {
   DCHECK(!entry.deleted());
   DCHECK(parent_resource_id_map_.count(entry.resource_id()));
-  DCHECK(modification_date_map_.count(entry.resource_id()));
   const std::string& parent_resource_id =
       parent_resource_id_map_[entry.resource_id()];
-  const base::Time& modification_date =
-      modification_date_map_[entry.resource_id()];
 
   ResourceEntry new_entry(entry);
   FileError error = SetParentLocalIdOfEntry(resource_metadata_, &new_entry,
@@ -348,7 +332,7 @@
 
   switch (error) {
     case FILE_ERROR_OK:
-      if (ShouldApplyChange(existing_entry, new_entry, modification_date)) {
+      if (ShouldApplyChange(existing_entry, new_entry)) {
         // Entry exists and needs to be refreshed.
         new_entry.set_local_id(local_id);
         error = resource_metadata_->RefreshEntry(new_entry);
diff --git a/chrome/browser/chromeos/drive/change_list_processor.h b/chrome/browser/chromeos/drive/change_list_processor.h
index 56a8fb3..dfaabc3 100644
--- a/chrome/browser/chromeos/drive/change_list_processor.h
+++ b/chrome/browser/chromeos/drive/change_list_processor.h
@@ -78,12 +78,6 @@
   std::vector<std::string>* mutable_parent_resource_ids() {
     return &parent_resource_ids_;
   }
-  const std::vector<base::Time>& modification_dates() const {
-    return modification_dates_;
-  }
-  std::vector<base::Time>* mutable_modification_dates() {
-    return &modification_dates_;
-  }
   const GURL& next_url() const { return next_url_; }
   int64 largest_changestamp() const { return largest_changestamp_; }
 
@@ -94,7 +88,6 @@
  private:
   std::vector<ResourceEntry> entries_;
   std::vector<std::string> parent_resource_ids_;
-  std::vector<base::Time> modification_dates_;
   GURL next_url_;
   int64 largest_changestamp_;
 
@@ -140,8 +133,6 @@
       ResourceEntryMap;
   typedef std::map<std::string /* resource_id */,
                    std::string /* parent_resource_id*/> ParentResourceIdMap;
-  typedef std::map<std::string /* resource_id */,
-                   base::Time /* modification_date */> ModificationDateMap;
 
   // Applies the pre-processed metadata from entry_map_ onto the resource
   // metadata. |about_resource| must not be null.
@@ -159,7 +150,6 @@
 
   ResourceEntryMap entry_map_;
   ParentResourceIdMap parent_resource_id_map_;
-  ModificationDateMap modification_date_map_;
   std::set<base::FilePath> changed_dirs_;
 
   DISALLOW_COPY_AND_ASSIGN(ChangeListProcessor);
diff --git a/chrome/browser/chromeos/drive/change_list_processor_unittest.cc b/chrome/browser/chromeos/drive/change_list_processor_unittest.cc
index c5bbc87..daaabc8 100644
--- a/chrome/browser/chromeos/drive/change_list_processor_unittest.cc
+++ b/chrome/browser/chromeos/drive/change_list_processor_unittest.cc
@@ -594,7 +594,6 @@
   new_file.set_resource_id("new_file_id");
   change_lists[0]->mutable_entries()->push_back(new_file);
   change_lists[0]->mutable_parent_resource_ids()->push_back("nonexisting");
-  change_lists[0]->mutable_modification_dates()->push_back(base::Time());
   change_lists[0]->set_largest_changestamp(kBaseResourceListChangestamp + 1);
 
   std::set<base::FilePath> changed_dirs;
@@ -606,5 +605,50 @@
       util::GetDriveGrandRootPath().AppendASCII("other/new_file"), &entry));
 }
 
+TEST_F(ChangeListProcessorTest, ModificationDate) {
+  // Prepare metadata.
+  EXPECT_EQ(FILE_ERROR_OK,
+            ApplyFullResourceList(ParseChangeList(kBaseResourceListFile)));
+
+  // Create change lists with a new file.
+  ScopedVector<ChangeList> change_lists;
+  change_lists.push_back(new ChangeList);
+
+  const base::Time now = base::Time::Now();
+  ResourceEntry new_file_remote;
+  new_file_remote.set_title("new_file_remote");
+  new_file_remote.set_resource_id("new_file_id");
+  new_file_remote.set_modification_date(now.ToInternalValue());
+
+  change_lists[0]->mutable_entries()->push_back(new_file_remote);
+  change_lists[0]->mutable_parent_resource_ids()->push_back(kRootId);
+  change_lists[0]->set_largest_changestamp(kBaseResourceListChangestamp + 1);
+
+  // Add the same file locally, but with a different name, a dirty metadata
+  // state, and a newer modification date.
+  ResourceEntry root;
+  EXPECT_EQ(FILE_ERROR_OK, metadata_->GetResourceEntryByPath(
+      util::GetDriveMyDriveRootPath(), &root));
+
+  ResourceEntry new_file_local;
+  new_file_local.set_resource_id(new_file_remote.resource_id());
+  new_file_local.set_parent_local_id(root.local_id());
+  new_file_local.set_title("new_file_local");
+  new_file_local.set_metadata_edit_state(ResourceEntry::DIRTY);
+  new_file_local.set_modification_date(
+      (now + base::TimeDelta::FromSeconds(1)).ToInternalValue());
+  std::string local_id;
+  EXPECT_EQ(FILE_ERROR_OK, metadata_->AddEntry(new_file_local, &local_id));
+
+  // Apply the change.
+  std::set<base::FilePath> changed_dirs;
+  EXPECT_EQ(FILE_ERROR_OK, ApplyChangeList(change_lists.Pass(), &changed_dirs));
+
+  // The change is rejected due to the old modification date.
+  ResourceEntry entry;
+  EXPECT_EQ(FILE_ERROR_OK, metadata_->GetResourceEntryById(local_id, &entry));
+  EXPECT_EQ(new_file_local.title(), entry.title());
+}
+
 }  // namespace internal
 }  // namespace drive
diff --git a/chrome/browser/chromeos/drive/drive.proto b/chrome/browser/chromeos/drive/drive.proto
index 7495077..9d12674 100644
--- a/chrome/browser/chromeos/drive/drive.proto
+++ b/chrome/browser/chromeos/drive/drive.proto
@@ -114,6 +114,9 @@
 
   // Indicates whether this entry's metadata is edited locally or not.
   optional EditState metadata_edit_state = 16;
+
+  // The time of the last modification.
+  optional int64 modification_date = 18;
 }
 
 // Container for the header part of ResourceMetadata.
diff --git a/chrome/browser/chromeos/drive/file_system/copy_operation.cc b/chrome/browser/chromeos/drive/file_system/copy_operation.cc
index efa9109..3479c1f 100644
--- a/chrome/browser/chromeos/drive/file_system/copy_operation.cc
+++ b/chrome/browser/chromeos/drive/file_system/copy_operation.cc
@@ -132,6 +132,7 @@
   entry.mutable_file_specific_info()->set_content_mime_type(
       params->src_entry.file_specific_info().content_mime_type());
   entry.set_metadata_edit_state(ResourceEntry::DIRTY);
+  entry.set_modification_date(base::Time::Now().ToInternalValue());
   entry.mutable_file_info()->set_last_modified(
       params->preserve_last_modified ?
       params->src_entry.file_info().last_modified() : now);
@@ -260,6 +261,7 @@
     entry.set_title(params->new_title);
     entry.set_parent_local_id(params->parent_local_id);
     entry.set_metadata_edit_state(ResourceEntry::DIRTY);
+    entry.set_modification_date(base::Time::Now().ToInternalValue());
     error = metadata->RefreshEntry(entry);
     if (error == FILE_ERROR_OK)
       params->changed_path = metadata->GetFilePath(local_id);
diff --git a/chrome/browser/chromeos/drive/file_system/create_directory_operation.cc b/chrome/browser/chromeos/drive/file_system/create_directory_operation.cc
index 0452c5f..39f5742 100644
--- a/chrome/browser/chromeos/drive/file_system/create_directory_operation.cc
+++ b/chrome/browser/chromeos/drive/file_system/create_directory_operation.cc
@@ -39,6 +39,7 @@
   entry.mutable_file_info()->set_last_accessed(now.ToInternalValue());
   entry.set_parent_local_id(parent_local_id);
   entry.set_metadata_edit_state(ResourceEntry::DIRTY);
+  entry.set_modification_date(base::Time::Now().ToInternalValue());
 
   std::string local_id;
   FileError error = metadata->AddEntry(entry, &local_id);
diff --git a/chrome/browser/chromeos/drive/file_system/create_file_operation.cc b/chrome/browser/chromeos/drive/file_system/create_file_operation.cc
index 7fe7068..e9efe6b 100644
--- a/chrome/browser/chromeos/drive/file_system/create_file_operation.cc
+++ b/chrome/browser/chromeos/drive/file_system/create_file_operation.cc
@@ -57,6 +57,7 @@
   entry->set_title(file_path.BaseName().AsUTF8Unsafe());
   entry->set_parent_local_id(parent.local_id());
   entry->set_metadata_edit_state(ResourceEntry::DIRTY);
+  entry->set_modification_date(base::Time::Now().ToInternalValue());
   entry->mutable_file_specific_info()->set_content_mime_type(mime_type);
 
   std::string local_id;
diff --git a/chrome/browser/chromeos/drive/file_system/move_operation.cc b/chrome/browser/chromeos/drive/file_system/move_operation.cc
index 1d6dd32..2210c6e 100644
--- a/chrome/browser/chromeos/drive/file_system/move_operation.cc
+++ b/chrome/browser/chromeos/drive/file_system/move_operation.cc
@@ -52,6 +52,7 @@
   entry.set_title(new_title);
   entry.set_parent_local_id(parent_entry.local_id());
   entry.set_metadata_edit_state(ResourceEntry::DIRTY);
+  entry.set_modification_date(base::Time::Now().ToInternalValue());
   error = metadata->RefreshEntry(entry);
   if (error != FILE_ERROR_OK)
     return error;
diff --git a/chrome/browser/chromeos/drive/file_system/touch_operation.cc b/chrome/browser/chromeos/drive/file_system/touch_operation.cc
index 914312c..bb1b23d 100644
--- a/chrome/browser/chromeos/drive/file_system/touch_operation.cc
+++ b/chrome/browser/chromeos/drive/file_system/touch_operation.cc
@@ -38,6 +38,7 @@
   if (!last_modified_time.is_null())
     file_info->set_last_modified(last_modified_time.ToInternalValue());
   entry.set_metadata_edit_state(ResourceEntry::DIRTY);
+  entry.set_modification_date(base::Time::Now().ToInternalValue());
   return metadata->RefreshEntry(entry);
 }
 
diff --git a/chrome/browser/chromeos/drive/local_file_reader.cc b/chrome/browser/chromeos/drive/local_file_reader.cc
index 062bbb8..e6bacc1 100644
--- a/chrome/browser/chromeos/drive/local_file_reader.cc
+++ b/chrome/browser/chromeos/drive/local_file_reader.cc
@@ -16,7 +16,7 @@
 
 LocalFileReader::LocalFileReader(
     base::SequencedTaskRunner* sequenced_task_runner)
-    : file_stream_(NULL, sequenced_task_runner),
+    : file_stream_(sequenced_task_runner),
       weak_ptr_factory_(this) {
 }
 
diff --git a/chrome/browser/chromeos/drive/resource_entry_conversion.cc b/chrome/browser/chromeos/drive/resource_entry_conversion.cc
index 1f479b6..1e13e6c 100644
--- a/chrome/browser/chromeos/drive/resource_entry_conversion.cc
+++ b/chrome/browser/chromeos/drive/resource_entry_conversion.cc
@@ -47,6 +47,7 @@
   converted.set_title(input.title());
   converted.set_base_name(util::NormalizeFileName(converted.title()));
   converted.set_resource_id(input.resource_id());
+  converted.set_modification_date(input.modification_date().ToInternalValue());
 
   // Gets parent Resource ID. On drive.google.com, a file can have multiple
   // parents or no parent, but we are forcing a tree-shaped structure (i.e. no
diff --git a/chrome/browser/chromeos/events/event_rewriter_unittest.cc b/chrome/browser/chromeos/events/event_rewriter_unittest.cc
index 180bc49..6692cb1 100644
--- a/chrome/browser/chromeos/events/event_rewriter_unittest.cc
+++ b/chrome/browser/chromeos/events/event_rewriter_unittest.cc
@@ -562,7 +562,7 @@
 
   // XK_KP_Insert (= NumPad 0 without Num Lock), no modifier.
   EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD0,
-                                      0,
+                                      ui::EF_NUMPAD_KEY,
                                       ui::ET_KEY_PRESSED,
                                       keycode_num_pad_0_,
                                       Mod2Mask,  // Num Lock
@@ -576,7 +576,7 @@
 
   // XK_KP_Insert (= NumPad 0 without Num Lock), Alt modifier.
   EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD0,
-                                      ui::EF_ALT_DOWN,
+                                      ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY,
                                       ui::ET_KEY_PRESSED,
                                       keycode_num_pad_0_,
                                       Mod1Mask | Mod2Mask,
@@ -590,7 +590,7 @@
 
   // XK_KP_Delete (= NumPad . without Num Lock), Alt modifier.
   EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_DECIMAL,
-                                      ui::EF_ALT_DOWN,
+                                      ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY,
                                       ui::ET_KEY_PRESSED,
                                       keycode_num_pad_decimal_,
                                       Mod1Mask | Mod2Mask,
@@ -604,7 +604,7 @@
 
   // XK_KP_End (= NumPad 1 without Num Lock), Alt modifier.
   EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD1,
-                                      ui::EF_ALT_DOWN,
+                                      ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY,
                                       ui::ET_KEY_PRESSED,
                                       keycode_num_pad_1_,
                                       Mod1Mask | Mod2Mask,
@@ -618,7 +618,7 @@
 
   // XK_KP_Down (= NumPad 2 without Num Lock), Alt modifier.
   EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD2,
-                                      ui::EF_ALT_DOWN,
+                                      ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY,
                                       ui::ET_KEY_PRESSED,
                                       keycode_num_pad_2_,
                                       Mod1Mask | Mod2Mask,
@@ -632,7 +632,7 @@
 
   // XK_KP_Next (= NumPad 3 without Num Lock), Alt modifier.
   EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD3,
-                                      ui::EF_ALT_DOWN,
+                                      ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY,
                                       ui::ET_KEY_PRESSED,
                                       keycode_num_pad_3_,
                                       Mod1Mask | Mod2Mask,
@@ -646,7 +646,7 @@
 
   // XK_KP_Left (= NumPad 4 without Num Lock), Alt modifier.
   EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD4,
-                                      ui::EF_ALT_DOWN,
+                                      ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY,
                                       ui::ET_KEY_PRESSED,
                                       keycode_num_pad_4_,
                                       Mod1Mask | Mod2Mask,
@@ -660,7 +660,7 @@
 
   // XK_KP_Begin (= NumPad 5 without Num Lock), Alt modifier.
   EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD5,
-                                      ui::EF_ALT_DOWN,
+                                      ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY,
                                       ui::ET_KEY_PRESSED,
                                       keycode_num_pad_5_,
                                       Mod1Mask | Mod2Mask,
@@ -674,7 +674,7 @@
 
   // XK_KP_Right (= NumPad 6 without Num Lock), Alt modifier.
   EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD6,
-                                      ui::EF_ALT_DOWN,
+                                      ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY,
                                       ui::ET_KEY_PRESSED,
                                       keycode_num_pad_6_,
                                       Mod1Mask | Mod2Mask,
@@ -688,7 +688,7 @@
 
   // XK_KP_Home (= NumPad 7 without Num Lock), Alt modifier.
   EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD7,
-                                      ui::EF_ALT_DOWN,
+                                      ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY,
                                       ui::ET_KEY_PRESSED,
                                       keycode_num_pad_7_,
                                       Mod1Mask | Mod2Mask,
@@ -702,7 +702,7 @@
 
   // XK_KP_Up (= NumPad 8 without Num Lock), Alt modifier.
   EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD8,
-                                      ui::EF_ALT_DOWN,
+                                      ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY,
                                       ui::ET_KEY_PRESSED,
                                       keycode_num_pad_8_,
                                       Mod1Mask | Mod2Mask,
@@ -716,7 +716,7 @@
 
   // XK_KP_Prior (= NumPad 9 without Num Lock), Alt modifier.
   EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD9,
-                                      ui::EF_ALT_DOWN,
+                                      ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY,
                                       ui::ET_KEY_PRESSED,
                                       keycode_num_pad_9_,
                                       Mod1Mask | Mod2Mask,
@@ -730,7 +730,7 @@
 
   // XK_KP_0 (= NumPad 0 with Num Lock), Num Lock modifier.
   EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD0,
-                                      0,
+                                      ui::EF_NUMPAD_KEY,
                                       ui::ET_KEY_PRESSED,
                                       keycode_num_pad_0_,
                                       Mod2Mask,
@@ -744,7 +744,7 @@
 
   // XK_KP_DECIMAL (= NumPad . with Num Lock), Num Lock modifier.
   EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_DECIMAL,
-                                      0,
+                                      ui::EF_NUMPAD_KEY,
                                       ui::ET_KEY_PRESSED,
                                       keycode_num_pad_decimal_,
                                       Mod2Mask,
@@ -758,7 +758,7 @@
 
   // XK_KP_1 (= NumPad 1 with Num Lock), Num Lock modifier.
   EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD1,
-                                      0,
+                                      ui::EF_NUMPAD_KEY,
                                       ui::ET_KEY_PRESSED,
                                       keycode_num_pad_1_,
                                       Mod2Mask,
@@ -772,7 +772,7 @@
 
   // XK_KP_2 (= NumPad 2 with Num Lock), Num Lock modifier.
   EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD2,
-                                      0,
+                                      ui::EF_NUMPAD_KEY,
                                       ui::ET_KEY_PRESSED,
                                       keycode_num_pad_2_,
                                       Mod2Mask,
@@ -786,7 +786,7 @@
 
   // XK_KP_3 (= NumPad 3 with Num Lock), Num Lock modifier.
   EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD3,
-                                      0,
+                                      ui::EF_NUMPAD_KEY,
                                       ui::ET_KEY_PRESSED,
                                       keycode_num_pad_3_,
                                       Mod2Mask,
@@ -800,7 +800,7 @@
 
   // XK_KP_4 (= NumPad 4 with Num Lock), Num Lock modifier.
   EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD4,
-                                      0,
+                                      ui::EF_NUMPAD_KEY,
                                       ui::ET_KEY_PRESSED,
                                       keycode_num_pad_4_,
                                       Mod2Mask,
@@ -814,7 +814,7 @@
 
   // XK_KP_5 (= NumPad 5 with Num Lock), Num Lock modifier.
   EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD5,
-                                      0,
+                                      ui::EF_NUMPAD_KEY,
                                       ui::ET_KEY_PRESSED,
                                       keycode_num_pad_5_,
                                       Mod2Mask,
@@ -828,7 +828,7 @@
 
   // XK_KP_6 (= NumPad 6 with Num Lock), Num Lock modifier.
   EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD6,
-                                      0,
+                                      ui::EF_NUMPAD_KEY,
                                       ui::ET_KEY_PRESSED,
                                       keycode_num_pad_6_,
                                       Mod2Mask,
@@ -842,7 +842,7 @@
 
   // XK_KP_7 (= NumPad 7 with Num Lock), Num Lock modifier.
   EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD7,
-                                      0,
+                                      ui::EF_NUMPAD_KEY,
                                       ui::ET_KEY_PRESSED,
                                       keycode_num_pad_7_,
                                       Mod2Mask,
@@ -856,7 +856,7 @@
 
   // XK_KP_8 (= NumPad 8 with Num Lock), Num Lock modifier.
   EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD8,
-                                      0,
+                                      ui::EF_NUMPAD_KEY,
                                       ui::ET_KEY_PRESSED,
                                       keycode_num_pad_8_,
                                       Mod2Mask,
@@ -870,7 +870,7 @@
 
   // XK_KP_9 (= NumPad 9 with Num Lock), Num Lock modifier.
   EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD9,
-                                      0,
+                                      ui::EF_NUMPAD_KEY,
                                       ui::ET_KEY_PRESSED,
                                       keycode_num_pad_9_,
                                       Mod2Mask,
@@ -908,7 +908,7 @@
   // XK_KP_End (= NumPad 1 without Num Lock), Win modifier.
   // The result should be "Num Pad 1 with Control + Num Lock modifiers".
   EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD1,
-                                      ui::EF_CONTROL_DOWN,
+                                      ui::EF_CONTROL_DOWN | ui::EF_NUMPAD_KEY,
                                       ui::ET_KEY_PRESSED,
                                       keycode_num_pad_1_,
                                       ControlMask | Mod2Mask,
@@ -923,7 +923,7 @@
   // XK_KP_1 (= NumPad 1 without Num Lock), Win modifier.
   // The result should also be "Num Pad 1 with Control + Num Lock modifiers".
   EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD1,
-                                      ui::EF_CONTROL_DOWN,
+                                      ui::EF_CONTROL_DOWN | ui::EF_NUMPAD_KEY,
                                       ui::ET_KEY_PRESSED,
                                       keycode_num_pad_1_,
                                       ControlMask | Mod2Mask,
diff --git a/chrome/browser/chromeos/events/keyboard_driven_event_rewriter.cc b/chrome/browser/chromeos/events/keyboard_driven_event_rewriter.cc
index 2441e41..1934477 100644
--- a/chrome/browser/chromeos/events/keyboard_driven_event_rewriter.cc
+++ b/chrome/browser/chromeos/events/keyboard_driven_event_rewriter.cc
@@ -20,7 +20,7 @@
 // in) and the keyboard driven flag in the OEM manifest is on.
 bool ShouldStripModifiersForArrowKeysAndEnter() {
   if (UserManager::IsInitialized() &&
-      !UserManager::Get()->IsUserLoggedIn()) {
+      !UserManager::Get()->IsSessionStarted()) {
     return system::InputDeviceSettings::Get()
         ->ForceKeyboardDrivenUINavigation();
   }
diff --git a/chrome/browser/chromeos/extensions/extension_system_event_observer.cc b/chrome/browser/chromeos/extensions/extension_system_event_observer.cc
index cf948ad..3938d9c 100644
--- a/chrome/browser/chromeos/extensions/extension_system_event_observer.cc
+++ b/chrome/browser/chromeos/extensions/extension_system_event_observer.cc
@@ -24,7 +24,7 @@
   extensions::DispatchBrightnessChangedEvent(level, user_initiated);
 }
 
-void ExtensionSystemEventObserver::SystemResumed(
+void ExtensionSystemEventObserver::SuspendDone(
     const base::TimeDelta& sleep_duration) {
   extensions::DispatchWokeUpEvent();
 }
diff --git a/chrome/browser/chromeos/extensions/extension_system_event_observer.h b/chrome/browser/chromeos/extensions/extension_system_event_observer.h
index 8b914cf..d51dce0 100644
--- a/chrome/browser/chromeos/extensions/extension_system_event_observer.h
+++ b/chrome/browser/chromeos/extensions/extension_system_event_observer.h
@@ -22,7 +22,7 @@
 
   // PowerManagerClient::Observer overrides:
   virtual void BrightnessChanged(int level, bool user_initiated) OVERRIDE;
-  virtual void SystemResumed(const base::TimeDelta& sleep_duration) OVERRIDE;
+  virtual void SuspendDone(const base::TimeDelta& sleep_duration) OVERRIDE;
 
   // SessionManagerClient::Observer override.
   virtual void ScreenIsUnlocked() OVERRIDE;
diff --git a/chrome/browser/chromeos/extensions/file_manager/event_router.cc b/chrome/browser/chromeos/extensions/file_manager/event_router.cc
index 5179248..83cbe97 100644
--- a/chrome/browser/chromeos/extensions/file_manager/event_router.cc
+++ b/chrome/browser/chromeos/extensions/file_manager/event_router.cc
@@ -172,9 +172,8 @@
 void BroadcastEvent(Profile* profile,
                     const std::string& event_name,
                     scoped_ptr<base::ListValue> event_args) {
-  extensions::ExtensionSystem::Get(profile)->event_router()->
-      BroadcastEvent(make_scoped_ptr(
-          new extensions::Event(event_name, event_args.Pass())));
+  extensions::EventRouter::Get(profile)->BroadcastEvent(
+      make_scoped_ptr(new extensions::Event(event_name, event_args.Pass())));
 }
 
 file_browser_private::MountCompletedStatus
@@ -559,8 +558,7 @@
 }
 
 void EventRouter::DefaultNetworkChanged(const chromeos::NetworkState* network) {
-  if (!profile_ ||
-      !extensions::ExtensionSystem::Get(profile_)->event_router()) {
+  if (!profile_ || !extensions::EventRouter::Get(profile_)) {
     NOTREACHED();
     return;
   }
@@ -572,8 +570,7 @@
 }
 
 void EventRouter::OnFileManagerPrefsChanged() {
-  if (!profile_ ||
-      !extensions::ExtensionSystem::Get(profile_)->event_router()) {
+  if (!profile_ || !extensions::EventRouter::Get(profile_)) {
     NOTREACHED();
     return;
   }
@@ -837,12 +834,18 @@
       device_path);
 }
 
-void EventRouter::OnDeviceRemoved(const std::string& device_path) {
+void EventRouter::OnDeviceRemoved(const std::string& device_path,
+                                  bool hard_unplugged) {
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
 
   DispatchDeviceEvent(
       file_browser_private::DEVICE_EVENT_TYPE_REMOVED,
       device_path);
+
+  if (hard_unplugged) {
+    DispatchDeviceEvent(file_browser_private::DEVICE_EVENT_TYPE_HARD_UNPLUGGED,
+                        device_path);
+  }
 }
 
 void EventRouter::OnVolumeMounted(chromeos::MountError error_code,
diff --git a/chrome/browser/chromeos/extensions/file_manager/event_router.h b/chrome/browser/chromeos/extensions/file_manager/event_router.h
index dc36ee5..5c08063 100644
--- a/chrome/browser/chromeos/extensions/file_manager/event_router.h
+++ b/chrome/browser/chromeos/extensions/file_manager/event_router.h
@@ -118,7 +118,8 @@
   virtual void OnDiskRemoved(
       const chromeos::disks::DiskMountManager::Disk& disk) OVERRIDE;
   virtual void OnDeviceAdded(const std::string& device_path) OVERRIDE;
-  virtual void OnDeviceRemoved(const std::string& device_path) OVERRIDE;
+  virtual void OnDeviceRemoved(const std::string& device_path,
+                               bool hard_unplugged) OVERRIDE;
   virtual void OnVolumeMounted(chromeos::MountError error_code,
                                const VolumeInfo& volume_info,
                                bool is_remounting) OVERRIDE;
diff --git a/chrome/browser/chromeos/extensions/file_manager/file_browser_handler_api.cc b/chrome/browser/chromeos/extensions/file_manager/file_browser_handler_api.cc
index b36285e..f80e275 100644
--- a/chrome/browser/chromeos/extensions/file_manager/file_browser_handler_api.cc
+++ b/chrome/browser/chromeos/extensions/file_manager/file_browser_handler_api.cc
@@ -326,26 +326,6 @@
   external_backend->GetVirtualPath(full_path, &file_definition.virtual_path);
   DCHECK(!file_definition.virtual_path.empty());
 
-  file_manager::util::ConvertFileDefinitionToEntryDefinition(
-      GetProfile(),
-      extension_id(),
-      file_definition,
-      base::Bind(
-          &FileBrowserHandlerInternalSelectFileFunction::GrantPermissions,
-          this,
-          full_path,
-          file_definition));
-}
-
-void FileBrowserHandlerInternalSelectFileFunction::GrantPermissions(
-    const base::FilePath& full_path,
-    const FileDefinition& file_definition,
-    const EntryDefinition& entry_definition) {
-  fileapi::ExternalFileSystemBackend* external_backend =
-      file_manager::util::GetFileSystemContextForRenderViewHost(
-          GetProfile(), render_view_host())->external_backend();
-  DCHECK(external_backend);
-
   // Grant access to this particular file to target extension. This will
   // ensure that the target extension can access only this FS entry and
   // prevent from traversing FS hierarchy upward.
@@ -356,6 +336,17 @@
   content::ChildProcessSecurityPolicy::GetInstance()->GrantCreateReadWriteFile(
       render_view_host()->GetProcess()->GetID(), full_path);
 
+  file_manager::util::ConvertFileDefinitionToEntryDefinition(
+      GetProfile(),
+      extension_id(),
+      file_definition,
+      base::Bind(
+          &FileBrowserHandlerInternalSelectFileFunction::RespondEntryDefinition,
+          this));
+}
+
+void FileBrowserHandlerInternalSelectFileFunction::RespondEntryDefinition(
+    const EntryDefinition& entry_definition) {
   Respond(entry_definition, true);
 }
 
diff --git a/chrome/browser/chromeos/extensions/file_manager/file_browser_handler_api.h b/chrome/browser/chromeos/extensions/file_manager/file_browser_handler_api.h
index 5b78194..472782f 100644
--- a/chrome/browser/chromeos/extensions/file_manager/file_browser_handler_api.h
+++ b/chrome/browser/chromeos/extensions/file_manager/file_browser_handler_api.h
@@ -113,11 +113,8 @@
   virtual bool RunImpl() OVERRIDE;
 
  private:
-  // Grants file access permissions for the created file to the caller.
-  // Inside this method,
-  void GrantPermissions(
-      const base::FilePath& full_path,
-      const file_manager::util::FileDefinition& file_definition,
+  // Respond to the API with selected entry definition.
+  void RespondEntryDefinition(
       const file_manager::util::EntryDefinition& entry_definition);
 
   // Creates dictionary value that will be used to as the extension function's
diff --git a/chrome/browser/chromeos/extensions/file_manager/private_api_drive.cc b/chrome/browser/chromeos/extensions/file_manager/private_api_drive.cc
index 869387c..1965bf5 100644
--- a/chrome/browser/chromeos/extensions/file_manager/private_api_drive.cc
+++ b/chrome/browser/chromeos/extensions/file_manager/private_api_drive.cc
@@ -29,6 +29,7 @@
 using file_manager::util::EntryDefinitionListCallback;
 using file_manager::util::FileDefinition;
 using file_manager::util::FileDefinitionList;
+using extensions::api::file_browser_private::DriveEntryProperties;
 
 namespace extensions {
 namespace {
@@ -47,10 +48,9 @@
 
 // Copies properties from |entry_proto| to |properties|. |shared_with_me| is
 // given from the running profile.
-void FillDriveEntryPropertiesValue(
-    const drive::ResourceEntry& entry_proto,
-    bool shared_with_me,
-    api::file_browser_private::DriveEntryProperties* properties) {
+void FillDriveEntryPropertiesValue(const drive::ResourceEntry& entry_proto,
+                                   bool shared_with_me,
+                                   DriveEntryProperties* properties) {
   properties->shared_with_me.reset(new bool(shared_with_me));
   properties->shared.reset(new bool(entry_proto.shared()));
 
@@ -60,9 +60,11 @@
   const drive::FileSpecificInfo& file_specific_info =
       entry_proto.file_specific_info();
 
-  properties->thumbnail_url.reset(
-      new std::string("https://www.googledrive.com/thumb/" +
-          entry_proto.resource_id() + "?width=500&height=500"));
+  if (!entry_proto.resource_id().empty()) {
+    properties->thumbnail_url.reset(
+        new std::string("https://www.googledrive.com/thumb/" +
+                        entry_proto.resource_id() + "?width=500&height=500"));
+  }
   if (file_specific_info.has_image_width()) {
     properties->image_width.reset(
         new int(file_specific_info.image_width()));
@@ -106,196 +108,280 @@
       callback);
 }
 
+class SingleDriveEntryPropertiesGetter {
+ public:
+  typedef base::Callback<void(drive::FileError error)> ResultCallback;
+
+  // Creates an instance and starts the process.
+  static void Start(const base::FilePath local_path,
+                    linked_ptr<DriveEntryProperties> properties,
+                    Profile* const profile,
+                    const ResultCallback& callback) {
+
+    SingleDriveEntryPropertiesGetter* instance =
+        new SingleDriveEntryPropertiesGetter(
+            local_path, properties, profile, callback);
+    instance->StartProcess();
+
+    // The instance will be destroyed by itself.
+  }
+
+  virtual ~SingleDriveEntryPropertiesGetter() {}
+
+ private:
+  // Given parameters.
+  const ResultCallback callback_;
+  const base::FilePath local_path_;
+  const linked_ptr<DriveEntryProperties> properties_;
+  Profile* const running_profile_;
+
+  // Values used in the process.
+  Profile* file_owner_profile_;
+  base::FilePath file_path_;
+  scoped_ptr<drive::ResourceEntry> owner_resource_entry_;
+
+  base::WeakPtrFactory<SingleDriveEntryPropertiesGetter> weak_ptr_factory_;
+
+  SingleDriveEntryPropertiesGetter(const base::FilePath local_path,
+                                   linked_ptr<DriveEntryProperties> properties,
+                                   Profile* const profile,
+                                   const ResultCallback& callback)
+      : callback_(callback),
+        local_path_(local_path),
+        properties_(properties),
+        running_profile_(profile),
+        file_owner_profile_(NULL),
+        weak_ptr_factory_(this) {
+    DCHECK(!callback_.is_null());
+    DCHECK(profile);
+  }
+
+  base::WeakPtr<SingleDriveEntryPropertiesGetter> GetWeakPtr() {
+    return weak_ptr_factory_.GetWeakPtr();
+  }
+
+  void StartProcess() {
+    DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+
+    file_path_ = drive::util::ExtractDrivePath(local_path_);
+    file_owner_profile_ = drive::util::ExtractProfileFromPath(local_path_);
+
+    if (!file_owner_profile_ ||
+        !g_browser_process->profile_manager()->IsValidProfile(
+            file_owner_profile_)) {
+      CompleteGetFileProperties(drive::FILE_ERROR_FAILED);
+      return;
+    }
+
+    // Start getting the file info.
+    drive::FileSystemInterface* const file_system =
+        drive::util::GetFileSystemByProfile(file_owner_profile_);
+    if (!file_system) {
+      // |file_system| is NULL if Drive is disabled or not mounted.
+      CompleteGetFileProperties(drive::FILE_ERROR_FAILED);
+      return;
+    }
+
+    file_system->GetResourceEntry(
+        file_path_,
+        base::Bind(&SingleDriveEntryPropertiesGetter::OnGetFileInfo,
+                   GetWeakPtr()));
+  }
+
+  void OnGetFileInfo(drive::FileError error,
+                     scoped_ptr<drive::ResourceEntry> entry) {
+    DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+
+    if (error != drive::FILE_ERROR_OK) {
+      CompleteGetFileProperties(error);
+      return;
+    }
+
+    DCHECK(entry);
+    owner_resource_entry_.swap(entry);
+
+    if (running_profile_->IsSameProfile(file_owner_profile_)) {
+      StartParseFileInfo(owner_resource_entry_->shared_with_me());
+      return;
+    }
+
+    // If the running profile does not own the file, obtain the shared_with_me
+    // flag from the running profile's value.
+    drive::FileSystemInterface* const file_system =
+        drive::util::GetFileSystemByProfile(running_profile_);
+    if (!file_system) {
+      CompleteGetFileProperties(drive::FILE_ERROR_FAILED);
+      return;
+    }
+    file_system->GetPathFromResourceId(
+        owner_resource_entry_->resource_id(),
+        base::Bind(&SingleDriveEntryPropertiesGetter::OnGetRunningPath,
+                   GetWeakPtr()));
+  }
+
+  void OnGetRunningPath(drive::FileError error,
+                        const base::FilePath& file_path) {
+    DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+
+    if (error != drive::FILE_ERROR_OK) {
+      // The running profile does not know the file.
+      StartParseFileInfo(false);
+      return;
+    }
+
+    drive::FileSystemInterface* const file_system =
+        drive::util::GetFileSystemByProfile(running_profile_);
+    if (!file_system) {
+      // The drive is disable for the running profile.
+      StartParseFileInfo(false);
+      return;
+    }
+
+    file_system->GetResourceEntry(
+        file_path,
+        base::Bind(&SingleDriveEntryPropertiesGetter::OnGetShareInfo,
+                   GetWeakPtr()));
+  }
+
+  void OnGetShareInfo(drive::FileError error,
+                      scoped_ptr<drive::ResourceEntry> entry) {
+    DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+
+    if (error != drive::FILE_ERROR_OK) {
+      CompleteGetFileProperties(error);
+      return;
+    }
+
+    DCHECK(entry);
+    StartParseFileInfo(entry->shared_with_me());
+  }
+
+  void StartParseFileInfo(bool shared_with_me) {
+    DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+
+    FillDriveEntryPropertiesValue(
+        *owner_resource_entry_, shared_with_me, properties_.get());
+
+    drive::FileSystemInterface* const file_system =
+        drive::util::GetFileSystemByProfile(file_owner_profile_);
+    drive::DriveAppRegistry* const app_registry =
+        drive::util::GetDriveAppRegistryByProfile(file_owner_profile_);
+    if (!file_system || !app_registry) {
+      // |file_system| or |app_registry| is NULL if Drive is disabled.
+      CompleteGetFileProperties(drive::FILE_ERROR_FAILED);
+      return;
+    }
+
+    // The properties meaningful for directories are already filled in
+    // FillDriveEntryPropertiesValue().
+    if (!owner_resource_entry_->has_file_specific_info()) {
+      CompleteGetFileProperties(drive::FILE_ERROR_OK);
+      return;
+    }
+
+    const drive::FileSpecificInfo& file_specific_info =
+        owner_resource_entry_->file_specific_info();
+
+    // Get drive WebApps that can accept this file. We just need to extract the
+    // doc icon for the drive app, which is set as default.
+    std::vector<drive::DriveAppInfo> drive_apps;
+    app_registry->GetAppsForFile(file_path_.Extension(),
+                                 file_specific_info.content_mime_type(),
+                                 &drive_apps);
+    if (!drive_apps.empty()) {
+      std::string default_task_id =
+          file_manager::file_tasks::GetDefaultTaskIdFromPrefs(
+              *file_owner_profile_->GetPrefs(),
+              file_specific_info.content_mime_type(),
+              file_path_.Extension());
+      file_manager::file_tasks::TaskDescriptor default_task;
+      file_manager::file_tasks::ParseTaskID(default_task_id, &default_task);
+      DCHECK(default_task_id.empty() || !default_task.app_id.empty());
+      for (size_t i = 0; i < drive_apps.size(); ++i) {
+        const drive::DriveAppInfo& app_info = drive_apps[i];
+        if (default_task.app_id == app_info.app_id) {
+          // The drive app is set as default. Files.app should use the doc icon.
+          const GURL doc_icon = drive::util::FindPreferredIcon(
+              app_info.document_icons, drive::util::kPreferredIconSize);
+          properties_->custom_icon_url.reset(new std::string(doc_icon.spec()));
+        }
+      }
+    }
+
+    file_system->GetCacheEntry(
+        file_path_,
+        base::Bind(&SingleDriveEntryPropertiesGetter::CacheStateReceived,
+                   GetWeakPtr()));
+  }
+
+  void CacheStateReceived(bool /* success */,
+                          const drive::FileCacheEntry& cache_entry) {
+    DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+
+    // In case of an error (i.e. success is false), cache_entry.is_*() all
+    // returns false.
+    properties_->is_pinned.reset(new bool(cache_entry.is_pinned()));
+    properties_->is_present.reset(new bool(cache_entry.is_present()));
+
+    CompleteGetFileProperties(drive::FILE_ERROR_OK);
+  }
+
+  void CompleteGetFileProperties(drive::FileError error) {
+    DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+    DCHECK(!callback_.is_null());
+    callback_.Run(error);
+
+    delete this;
+  }
+};  // class SingleDriveEntryPropertiesGetter
+
 }  // namespace
 
 FileBrowserPrivateGetDriveEntryPropertiesFunction::
     FileBrowserPrivateGetDriveEntryPropertiesFunction()
-    : properties_(
-          new extensions::api::file_browser_private::DriveEntryProperties) {}
+    : processed_count_(0) {}
 
 FileBrowserPrivateGetDriveEntryPropertiesFunction::
-    ~FileBrowserPrivateGetDriveEntryPropertiesFunction() {
-}
+    ~FileBrowserPrivateGetDriveEntryPropertiesFunction() {}
 
 bool FileBrowserPrivateGetDriveEntryPropertiesFunction::RunImpl() {
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
 
-  using extensions::api::file_browser_private::GetDriveEntryProperties::Params;
+  using api::file_browser_private::GetDriveEntryProperties::Params;
   const scoped_ptr<Params> params(Params::Create(*args_));
   EXTENSION_FUNCTION_VALIDATE(params);
 
-  const GURL file_url = GURL(params->file_url);
-  const base::FilePath local_path = file_manager::util::GetLocalPathFromURL(
-      render_view_host(), GetProfile(), file_url);
-  file_path_ = drive::util::ExtractDrivePath(local_path);
-  file_owner_profile_ = drive::util::ExtractProfileFromPath(local_path);
+  properties_list_.resize(params->file_urls.size());
 
-  // Owner not found.
-  if (!file_owner_profile_) {
-    CompleteGetFileProperties(drive::FILE_ERROR_FAILED);
-    return true;
+  for (size_t i = 0; i < params->file_urls.size(); i++) {
+    const GURL url = GURL(params->file_urls[i]);
+    const base::FilePath local_path = file_manager::util::GetLocalPathFromURL(
+        render_view_host(), GetProfile(), url);
+    properties_list_[i] = make_linked_ptr(new DriveEntryProperties);
+
+    SingleDriveEntryPropertiesGetter::Start(
+        local_path,
+        properties_list_[i],
+        GetProfile(),
+        base::Bind(&FileBrowserPrivateGetDriveEntryPropertiesFunction::
+                       CompleteGetFileProperties,
+                   this));
   }
 
-  // Start getting the file info.
-  drive::FileSystemInterface* const file_system =
-      drive::util::GetFileSystemByProfile(file_owner_profile_);
-  if (!file_system) {
-    // |file_system| is NULL if Drive is disabled or not mounted.
-    CompleteGetFileProperties(drive::FILE_ERROR_FAILED);
-    return true;
-  }
-
-  file_system->GetResourceEntry(
-      file_path_,
-      base::Bind(
-          &FileBrowserPrivateGetDriveEntryPropertiesFunction::OnGetFileInfo,
-          this));
   return true;
 }
 
-void FileBrowserPrivateGetDriveEntryPropertiesFunction::OnGetFileInfo(
-    drive::FileError error,
-    scoped_ptr<drive::ResourceEntry> entry) {
-  if (error != drive::FILE_ERROR_OK) {
-    CompleteGetFileProperties(error);
-    return;
-  }
-  DCHECK(entry);
-  owner_resource_entry_.swap(entry);
-
-  if (GetProfile()->IsSameProfile(file_owner_profile_)) {
-    StartParseFileInfo(owner_resource_entry_->shared_with_me());
-    return;
-  }
-
-  // If the running profile does not own the file, obtain the shared_with_me
-  // flag from the running profile's value.
-  drive::FileSystemInterface* const file_system =
-      drive::util::GetFileSystemByProfile(GetProfile());
-  if (!file_system) {
-    CompleteGetFileProperties(drive::FILE_ERROR_FAILED);
-    return;
-  }
-  file_system->GetPathFromResourceId(
-      owner_resource_entry_->resource_id(),
-      base::Bind(
-          &FileBrowserPrivateGetDriveEntryPropertiesFunction::OnGetRunningPath,
-          this));
-}
-
-void FileBrowserPrivateGetDriveEntryPropertiesFunction::OnGetRunningPath(
-    drive::FileError error,
-    const base::FilePath& file_path) {
-  if (error != drive::FILE_ERROR_OK) {
-    // The running profile does not know the file.
-    StartParseFileInfo(false);
-    return;
-  }
-
-  drive::FileSystemInterface* const file_system =
-      drive::util::GetFileSystemByProfile(GetProfile());
-  if (!file_system) {
-    // The drive is disable for the running profile.
-    StartParseFileInfo(false);
-    return;
-  }
-  file_system->GetResourceEntry(
-      file_path,
-      base::Bind(
-          &FileBrowserPrivateGetDriveEntryPropertiesFunction::OnGetShareInfo,
-          this));
-}
-
-void FileBrowserPrivateGetDriveEntryPropertiesFunction::OnGetShareInfo(
-    drive::FileError error,
-    scoped_ptr<drive::ResourceEntry> entry) {
-  if (error != drive::FILE_ERROR_OK) {
-    CompleteGetFileProperties(error);
-    return;
-  }
-  DCHECK(entry);
-  StartParseFileInfo(entry->shared_with_me());
-}
-
-void FileBrowserPrivateGetDriveEntryPropertiesFunction::StartParseFileInfo(
-    bool shared_with_me) {
-  if (!g_browser_process->profile_manager()->IsValidProfile(
-          file_owner_profile_)) {
-    CompleteGetFileProperties(drive::FILE_ERROR_FAILED);
-    return;
-  }
-
-  FillDriveEntryPropertiesValue(
-      *owner_resource_entry_, shared_with_me, properties_.get());
-
-  drive::FileSystemInterface* const file_system =
-      drive::util::GetFileSystemByProfile(file_owner_profile_);
-  drive::DriveAppRegistry* const app_registry =
-      drive::util::GetDriveAppRegistryByProfile(file_owner_profile_);
-  if (!file_system || !app_registry) {
-    // |file_system| or |app_registry| is NULL if Drive is disabled.
-    CompleteGetFileProperties(drive::FILE_ERROR_FAILED);
-    return;
-  }
-
-  // The properties meaningful for directories are already filled in
-  // FillDriveEntryPropertiesValue().
-  if (!owner_resource_entry_->has_file_specific_info()) {
-    CompleteGetFileProperties(drive::FILE_ERROR_OK);
-    return;
-  }
-
-  const drive::FileSpecificInfo& file_specific_info =
-      owner_resource_entry_->file_specific_info();
-
-  // Get drive WebApps that can accept this file. We just need to extract the
-  // doc icon for the drive app, which is set as default.
-  std::vector<drive::DriveAppInfo> drive_apps;
-  app_registry->GetAppsForFile(file_path_.Extension(),
-                               file_specific_info.content_mime_type(),
-                               &drive_apps);
-  if (!drive_apps.empty()) {
-    std::string default_task_id =
-        file_manager::file_tasks::GetDefaultTaskIdFromPrefs(
-            *file_owner_profile_->GetPrefs(),
-            file_specific_info.content_mime_type(),
-            file_path_.Extension());
-    file_manager::file_tasks::TaskDescriptor default_task;
-    file_manager::file_tasks::ParseTaskID(default_task_id, &default_task);
-    DCHECK(default_task_id.empty() || !default_task.app_id.empty());
-    for (size_t i = 0; i < drive_apps.size(); ++i) {
-      const drive::DriveAppInfo& app_info = drive_apps[i];
-      if (default_task.app_id == app_info.app_id) {
-        // The drive app is set as default. Files.app should use the doc icon.
-        const GURL doc_icon =
-            drive::util::FindPreferredIcon(app_info.document_icons,
-                                           drive::util::kPreferredIconSize);
-        properties_->custom_icon_url.reset(new std::string(doc_icon.spec()));
-      }
-    }
-  }
-
-  file_system->GetCacheEntry(
-      file_path_,
-      base::Bind(&FileBrowserPrivateGetDriveEntryPropertiesFunction::
-                     CacheStateReceived, this));
-}
-
-void FileBrowserPrivateGetDriveEntryPropertiesFunction::CacheStateReceived(
-    bool /* success */,
-    const drive::FileCacheEntry& cache_entry) {
-  // In case of an error (i.e. success is false), cache_entry.is_*() all
-  // returns false.
-  properties_->is_pinned.reset(new bool(cache_entry.is_pinned()));
-  properties_->is_present.reset(new bool(cache_entry.is_present()));
-
-  CompleteGetFileProperties(drive::FILE_ERROR_OK);
-}
-
 void FileBrowserPrivateGetDriveEntryPropertiesFunction::
     CompleteGetFileProperties(drive::FileError error) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  DCHECK(0 <= processed_count_ && processed_count_ < properties_list_.size());
+
+  processed_count_++;
+  if (processed_count_ < properties_list_.size())
+    return;
+
   results_ = extensions::api::file_browser_private::GetDriveEntryProperties::
-      Results::Create(*properties_);
+      Results::Create(properties_list_);
   SendResponse(true);
 }
 
diff --git a/chrome/browser/chromeos/extensions/file_manager/private_api_drive.h b/chrome/browser/chromeos/extensions/file_manager/private_api_drive.h
index 20c33ba..73518ee 100644
--- a/chrome/browser/chromeos/extensions/file_manager/private_api_drive.h
+++ b/chrome/browser/chromeos/extensions/file_manager/private_api_drive.h
@@ -44,27 +44,11 @@
   virtual bool RunImpl() OVERRIDE;
 
  private:
-  void OnGetFileInfo(drive::FileError error,
-                     scoped_ptr<drive::ResourceEntry> entry);
-
-  void OnGetRunningPath(drive::FileError error,
-                        const base::FilePath& file_path);
-
-  void OnGetShareInfo(drive::FileError error,
-                      scoped_ptr<drive::ResourceEntry> entry);
-
-  void StartParseFileInfo(bool shared_with_me);
-
-  void CacheStateReceived(bool success,
-                          const drive::FileCacheEntry& cache_entry);
-
   void CompleteGetFileProperties(drive::FileError error);
 
-  base::FilePath file_path_;
-  Profile* file_owner_profile_;
-  const scoped_ptr<extensions::api::file_browser_private::DriveEntryProperties>
-      properties_;
-  scoped_ptr<drive::ResourceEntry> owner_resource_entry_;
+  size_t processed_count_;
+  std::vector<linked_ptr<api::file_browser_private::DriveEntryProperties> >
+      properties_list_;
 };
 
 // Implements the chrome.fileBrowserPrivate.pinDriveFile method.
diff --git a/chrome/browser/chromeos/extensions/file_manager/private_api_strings.cc b/chrome/browser/chromeos/extensions/file_manager/private_api_strings.cc
index d264104..c1f0fe4 100644
--- a/chrome/browser/chromeos/extensions/file_manager/private_api_strings.cc
+++ b/chrome/browser/chromeos/extensions/file_manager/private_api_strings.cc
@@ -175,8 +175,6 @@
              IDS_FILE_BROWSER_GALLERY_OVERWRITE_ORIGINAL);
   SET_STRING("GALLERY_OVERWRITE_BUBBLE",
              IDS_FILE_BROWSER_GALLERY_OVERWRITE_BUBBLE);
-  SET_STRING("GALLERY_UNSAVED_CHANGES",
-             IDS_FILE_BROWSER_GALLERY_UNSAVED_CHANGES);
   SET_STRING("GALLERY_READONLY_WARNING",
              IDS_FILE_BROWSER_GALLERY_READONLY_WARNING);
   SET_STRING("GALLERY_IMAGE_ERROR", IDS_FILE_BROWSER_GALLERY_IMAGE_ERROR);
@@ -493,7 +491,11 @@
   SET_STRING("DEVICE_UNKNOWN_MESSAGE", IDS_DEVICE_UNKNOWN_MESSAGE);
   SET_STRING("DEVICE_UNKNOWN_DEFAULT_MESSAGE",
              IDS_DEVICE_UNKNOWN_DEFAULT_MESSAGE);
-
+  SET_STRING("DEVICE_HARD_UNPLUGGED_TITLE", IDS_DEVICE_HARD_UNPLUGGED_TITLE);
+  SET_STRING("DEVICE_HARD_UNPLUGGED_MESSAGE",
+             IDS_DEVICE_HARD_UNPLUGGED_MESSAGE);
+  SET_STRING("DEVICE_HARD_UNPLUGGED_BUTTON_LABEL",
+             IDS_DEVICE_HARD_UNPLUGGED_BUTTON_LABEL);
 #undef SET_STRING
 
   dict->SetBoolean("PDF_VIEW_ENABLED",
diff --git a/chrome/browser/chromeos/extensions/file_manager/private_api_tasks.cc b/chrome/browser/chromeos/extensions/file_manager/private_api_tasks.cc
index b725c66..4a9befd 100644
--- a/chrome/browser/chromeos/extensions/file_manager/private_api_tasks.cc
+++ b/chrome/browser/chromeos/extensions/file_manager/private_api_tasks.cc
@@ -9,14 +9,18 @@
 #include <vector>
 
 #include "chrome/browser/chromeos/drive/file_system_util.h"
-#include "chrome/browser/chromeos/file_manager/file_tasks.h"
 #include "chrome/browser/chromeos/file_manager/fileapi_util.h"
 #include "chrome/browser/chromeos/file_manager/mime_util.h"
 #include "chrome/browser/chromeos/fileapi/file_system_backend.h"
 #include "chrome/browser/profiles/profile.h"
+#include "content/public/browser/browser_thread.h"
+#include "net/base/filename_util.h"
+#include "net/base/mime_sniffer.h"
 #include "webkit/browser/fileapi/file_system_context.h"
 #include "webkit/browser/fileapi/file_system_url.h"
 
+using content::BrowserThread;
+using extensions::app_file_handler_util::PathAndMimeTypeSet;
 using fileapi::FileSystemURL;
 
 namespace extensions {
@@ -54,6 +58,33 @@
   return mime_types;
 }
 
+void SniffMimeType(PathAndMimeTypeSet* path_mime_set,
+                   std::vector<GURL>* file_urls) {
+  PathAndMimeTypeSet sniffed_path_mime_set;
+  std::vector<char> content(net::kMaxBytesToSniff);
+
+  // For each files, sniff its MIME type if it is empty
+  for (PathAndMimeTypeSet::iterator it = path_mime_set->begin();
+       it != path_mime_set->end();
+       ++it) {
+    const base::FilePath& file_path = it->first;
+    std::string mime_type = it->second;
+    // Note: sniff MIME type only for local files.
+    if (mime_type.empty() && !drive::util::IsUnderDriveMountPoint(file_path)) {
+      int bytes_read = base::ReadFile(file_path, &content[0], content.size());
+      if (bytes_read >= 0) {
+        net::SniffMimeType(&content[0],
+                           bytes_read,
+                           net::FilePathToFileURL(file_path),
+                           std::string(),  // type_hint (passes no hint)
+                           &mime_type);
+      }
+    }
+    sniffed_path_mime_set.insert(std::make_pair(file_path, mime_type));
+  }
+  path_mime_set->swap(sniffed_path_mime_set);
+}
+
 }  // namespace
 
 bool FileBrowserPrivateExecuteTaskFunction::RunImpl() {
@@ -134,8 +165,8 @@
 
   // Collect all the URLs, convert them to GURLs, and crack all the urls into
   // file paths.
-  extensions::app_file_handler_util::PathAndMimeTypeSet path_mime_set;
-  std::vector<GURL> file_urls;
+  scoped_ptr<PathAndMimeTypeSet> path_mime_set(new PathAndMimeTypeSet);
+  scoped_ptr<std::vector<GURL> > file_urls(new std::vector<GURL>);
   for (size_t i = 0; i < params->file_urls.size(); ++i) {
     std::string mime_type;
     if (params->mime_types.size() != 0)
@@ -148,21 +179,40 @@
       continue;
     const base::FilePath file_path = file_system_url.path();
 
-    file_urls.push_back(file_url);
+    file_urls->push_back(file_url);
 
     // If MIME type is not provided, guess it from the file path.
     if (mime_type.empty())
       mime_type = file_manager::util::GetMimeTypeForPath(file_path);
 
-    path_mime_set.insert(std::make_pair(file_path, mime_type));
+    path_mime_set->insert(std::make_pair(file_path, mime_type));
   }
 
+  // In case the MIME type of some files are empty,
+  // try to sniff their MIME type by their content.
+  PathAndMimeTypeSet* path_mime_set_ptr = path_mime_set.get();
+  std::vector<GURL>* file_urls_ptr = file_urls.get();
+
+  BrowserThread::PostBlockingPoolTaskAndReply(
+      FROM_HERE,
+      base::Bind(&SniffMimeType, path_mime_set_ptr, file_urls_ptr),
+      base::Bind(
+          &FileBrowserPrivateGetFileTasksFunction::OnSniffingMimeTypeCompleted,
+          this,
+          base::Passed(&path_mime_set),
+          base::Passed(&file_urls)));
+  return true;
+}
+
+void FileBrowserPrivateGetFileTasksFunction::OnSniffingMimeTypeCompleted(
+    scoped_ptr<PathAndMimeTypeSet> path_mime_set,
+    scoped_ptr<std::vector<GURL> > file_urls) {
   std::vector<file_manager::file_tasks::FullTaskDescriptor> tasks;
   file_manager::file_tasks::FindAllTypesOfTasks(
       GetProfile(),
       drive::util::GetDriveAppRegistryByProfile(GetProfile()),
-      path_mime_set,
-      file_urls,
+      *path_mime_set,
+      *file_urls,
       &tasks);
 
   // Convert the tasks into JSON compatible objects.
@@ -182,7 +232,6 @@
   results_ = extensions::api::file_browser_private::GetFileTasks::Results::
       Create(results);
   SendResponse(true);
-  return true;
 }
 
 bool FileBrowserPrivateSetDefaultTaskFunction::RunImpl() {
diff --git a/chrome/browser/chromeos/extensions/file_manager/private_api_tasks.h b/chrome/browser/chromeos/extensions/file_manager/private_api_tasks.h
index ac9c755..84c39fb 100644
--- a/chrome/browser/chromeos/extensions/file_manager/private_api_tasks.h
+++ b/chrome/browser/chromeos/extensions/file_manager/private_api_tasks.h
@@ -7,7 +7,10 @@
 #ifndef CHROME_BROWSER_CHROMEOS_EXTENSIONS_FILE_MANAGER_PRIVATE_API_TASKS_H_
 #define CHROME_BROWSER_CHROMEOS_EXTENSIONS_FILE_MANAGER_PRIVATE_API_TASKS_H_
 
+#include <vector>
+
 #include "chrome/browser/chromeos/extensions/file_manager/private_api_base.h"
+#include "chrome/browser/chromeos/file_manager/file_tasks.h"
 #include "chrome/common/extensions/api/file_browser_private.h"
 
 namespace extensions {
@@ -42,6 +45,11 @@
 
   // AsyncExtensionFunction overrides.
   virtual bool RunImpl() OVERRIDE;
+
+ private:
+  void OnSniffingMimeTypeCompleted(
+      scoped_ptr<app_file_handler_util::PathAndMimeTypeSet> path_mime_set,
+      scoped_ptr<std::vector<GURL> > file_urls);
 };
 
 // Implements the chrome.fileBrowserPrivate.setDefaultTask method.
diff --git a/chrome/browser/chromeos/extensions/file_system_provider/file_system_provider_api.cc b/chrome/browser/chromeos/extensions/file_system_provider/file_system_provider_api.cc
index 471f7c3..52ebdd8 100644
--- a/chrome/browser/chromeos/extensions/file_system_provider/file_system_provider_api.cc
+++ b/chrome/browser/chromeos/extensions/file_system_provider/file_system_provider_api.cc
@@ -7,15 +7,22 @@
 #include <string>
 
 #include "base/values.h"
+#include "chrome/browser/chromeos/file_system_provider/provided_file_system_interface.h"
+#include "chrome/browser/chromeos/file_system_provider/request_manager.h"
 #include "chrome/browser/chromeos/file_system_provider/service.h"
 #include "chrome/common/extensions/api/file_system_provider.h"
 #include "chrome/common/extensions/api/file_system_provider_internal.h"
 
+using chromeos::file_system_provider::ProvidedFileSystemInterface;
+using chromeos::file_system_provider::RequestManager;
+using chromeos::file_system_provider::Service;
+
 namespace extensions {
 namespace {
 
 // Error names from
 // http://www.w3.org/TR/file-system-api/#errors-and-exceptions
+const char kNotFoundErrorName[] = "NotFoundError";
 const char kSecurityErrorName[] = "SecurityError";
 
 // Error messages.
@@ -96,8 +103,7 @@
     return false;
   }
 
-  chromeos::file_system_provider::Service* service =
-      chromeos::file_system_provider::Service::Get(GetProfile());
+  Service* service = Service::Get(GetProfile());
   DCHECK(service);
 
   int file_system_id =
@@ -119,7 +125,6 @@
   // Don't append an error on success.
 
   SetResult(result);
-  SendResponse(true);
   return true;
 }
 
@@ -128,8 +133,7 @@
   const scoped_ptr<Params> params(Params::Create(*args_));
   EXTENSION_FUNCTION_VALIDATE(params);
 
-  chromeos::file_system_provider::Service* service =
-      chromeos::file_system_provider::Service::Get(GetProfile());
+  Service* service = Service::Get(GetProfile());
   DCHECK(service);
 
   if (!service->UnmountFileSystem(extension_id(), params->file_system_id)) {
@@ -142,7 +146,6 @@
 
   base::ListValue* result = new base::ListValue();
   SetResult(result);
-  SendResponse(true);
   return true;
 }
 
@@ -151,15 +154,25 @@
   const scoped_ptr<Params> params(Params::Create(*args_));
   EXTENSION_FUNCTION_VALIDATE(params);
 
-  chromeos::file_system_provider::Service* service =
-      chromeos::file_system_provider::Service::Get(GetProfile());
+  Service* service = Service::Get(GetProfile());
   DCHECK(service);
 
-  if (!service->FulfillRequest(extension_id(),
-                               params->file_system_id,
-                               params->request_id,
-                               scoped_ptr<base::DictionaryValue>(),
-                               false /* has_more */)) {
+  ProvidedFileSystemInterface* file_system =
+      service->GetProvidedFileSystem(extension_id(), params->file_system_id);
+  if (!file_system) {
+    base::ListValue* result = new base::ListValue();
+    result->Append(
+        CreateError(kNotFoundErrorName, kResponseFailedErrorMessage));
+    SetResult(result);
+    return false;
+  }
+
+  RequestManager* request_manager = file_system->GetRequestManager();
+  DCHECK(request_manager);
+
+  if (!request_manager->FulfillRequest(params->request_id,
+                                       scoped_ptr<base::DictionaryValue>(),
+                                       false /* has_more */)) {
     // TODO(mtomasz): Pass more detailed errors, rather than just a bool.
     base::ListValue* result = new base::ListValue();
     result->Append(
@@ -170,7 +183,6 @@
 
   base::ListValue* result = new base::ListValue();
   SetResult(result);
-  SendResponse(true);
   return true;
 }
 
@@ -179,14 +191,24 @@
   const scoped_ptr<Params> params(Params::Create(*args_));
   EXTENSION_FUNCTION_VALIDATE(params);
 
-  chromeos::file_system_provider::Service* service =
-      chromeos::file_system_provider::Service::Get(GetProfile());
+  Service* service = Service::Get(GetProfile());
   DCHECK(service);
 
-  if (!service->RejectRequest(extension_id(),
-                              params->file_system_id,
-                              params->request_id,
-                              ProviderErrorToFileError(params->error))) {
+  ProvidedFileSystemInterface* file_system =
+      service->GetProvidedFileSystem(extension_id(), params->file_system_id);
+  if (!file_system) {
+    base::ListValue* result = new base::ListValue();
+    result->Append(
+        CreateError(kNotFoundErrorName, kResponseFailedErrorMessage));
+    SetResult(result);
+    return false;
+  }
+
+  RequestManager* request_manager = file_system->GetRequestManager();
+  DCHECK(request_manager);
+
+  if (!request_manager->RejectRequest(
+          params->request_id, ProviderErrorToFileError(params->error))) {
     // TODO(mtomasz): Pass more detailed errors, rather than just a bool.
     base::ListValue* result = new base::ListValue();
     result->Append(
@@ -197,7 +219,6 @@
 
   base::ListValue* result = new base::ListValue();
   SetResult(result);
-  SendResponse(true);
   return true;
 }
 
diff --git a/chrome/browser/chromeos/extensions/file_system_provider/file_system_provider_api.h b/chrome/browser/chromeos/extensions/file_system_provider/file_system_provider_api.h
index 48b32bd..e6ed33b 100644
--- a/chrome/browser/chromeos/extensions/file_system_provider/file_system_provider_api.h
+++ b/chrome/browser/chromeos/extensions/file_system_provider/file_system_provider_api.h
@@ -10,7 +10,7 @@
 
 namespace extensions {
 
-class FileSystemProviderMountFunction : public ChromeAsyncExtensionFunction {
+class FileSystemProviderMountFunction : public ChromeSyncExtensionFunction {
  public:
   DECLARE_EXTENSION_FUNCTION("fileSystemProvider.mount",
                              FILESYSTEMPROVIDER_MOUNT)
@@ -20,7 +20,7 @@
   virtual bool RunImpl() OVERRIDE;
 };
 
-class FileSystemProviderUnmountFunction : public ChromeAsyncExtensionFunction {
+class FileSystemProviderUnmountFunction : public ChromeSyncExtensionFunction {
  public:
   DECLARE_EXTENSION_FUNCTION("fileSystemProvider.unmount",
                              FILESYSTEMPROVIDER_UNMOUNT)
@@ -31,7 +31,7 @@
 };
 
 class FileSystemProviderInternalUnmountRequestedSuccessFunction
-    : public ChromeAsyncExtensionFunction {
+    : public ChromeSyncExtensionFunction {
  public:
   DECLARE_EXTENSION_FUNCTION(
       "fileSystemProviderInternal.unmountRequestedSuccess",
@@ -43,7 +43,7 @@
 };
 
 class FileSystemProviderInternalUnmountRequestedErrorFunction
-    : public ChromeAsyncExtensionFunction {
+    : public ChromeSyncExtensionFunction {
  public:
   DECLARE_EXTENSION_FUNCTION("fileSystemProviderInternal.unmountRequestedError",
                              FILESYSTEMPROVIDERINTERNAL_UNMOUNTREQUESTEDERROR)
diff --git a/chrome/browser/chromeos/extensions/input_method_api.cc b/chrome/browser/chromeos/extensions/input_method_api.cc
index bb46b31..0476253 100644
--- a/chrome/browser/chromeos/extensions/input_method_api.cc
+++ b/chrome/browser/chromeos/extensions/input_method_api.cc
@@ -67,8 +67,7 @@
 
 InputMethodAPI::InputMethodAPI(content::BrowserContext* context)
     : context_(context) {
-  ExtensionSystem::Get(context_)->event_router()->RegisterObserver(
-      this, kOnInputMethodChanged);
+  EventRouter::Get(context_)->RegisterObserver(this, kOnInputMethodChanged);
   ExtensionFunctionRegistry* registry =
       ExtensionFunctionRegistry::GetInstance();
   registry->RegisterFunction<GetInputMethodFunction>();
@@ -91,7 +90,7 @@
 void InputMethodAPI::Shutdown() {
   // UnregisterObserver may have already been called in OnListenerAdded,
   // but it is safe to call it more than once.
-  ExtensionSystem::Get(context_)->event_router()->UnregisterObserver(this);
+  EventRouter::Get(context_)->UnregisterObserver(this);
 }
 
 void InputMethodAPI::OnListenerAdded(
@@ -99,7 +98,7 @@
   DCHECK(!input_method_event_router_.get());
   input_method_event_router_.reset(
       new chromeos::ExtensionInputMethodEventRouter(context_));
-  ExtensionSystem::Get(context_)->event_router()->UnregisterObserver(this);
+  EventRouter::Get(context_)->UnregisterObserver(this);
 }
 
 static base::LazyInstance<BrowserContextKeyedAPIFactory<InputMethodAPI> >
diff --git a/chrome/browser/chromeos/extensions/input_method_event_router.cc b/chrome/browser/chromeos/extensions/input_method_event_router.cc
index 39ca79a..c56ec80 100644
--- a/chrome/browser/chromeos/extensions/input_method_event_router.cc
+++ b/chrome/browser/chromeos/extensions/input_method_event_router.cc
@@ -28,8 +28,7 @@
 void ExtensionInputMethodEventRouter::InputMethodChanged(
     input_method::InputMethodManager *manager,
     bool show_message) {
-  extensions::EventRouter *router =
-      extensions::ExtensionSystem::Get(context_)->event_router();
+  extensions::EventRouter* router = extensions::EventRouter::Get(context_);
 
   if (!router->HasEventListener(
           extensions::InputMethodAPI::kOnInputMethodChanged)) {
diff --git a/chrome/browser/chromeos/extensions/media_player_event_router.cc b/chrome/browser/chromeos/extensions/media_player_event_router.cc
index fab7361..e58764b 100644
--- a/chrome/browser/chromeos/extensions/media_player_event_router.cc
+++ b/chrome/browser/chromeos/extensions/media_player_event_router.cc
@@ -13,12 +13,11 @@
 
 static void BroadcastEvent(content::BrowserContext* context,
                            const std::string& event_name) {
-  if (context && extensions::ExtensionSystem::Get(context)->event_router()) {
+  if (context && EventRouter::Get(context)) {
     scoped_ptr<base::ListValue> args(new base::ListValue());
     scoped_ptr<extensions::Event> event(new extensions::Event(
         event_name, args.Pass()));
-    extensions::ExtensionSystem::Get(context)->event_router()->BroadcastEvent(
-        event.Pass());
+    EventRouter::Get(context)->BroadcastEvent(event.Pass());
   }
 }
 
diff --git a/chrome/browser/chromeos/extensions/screenlock_private_api.cc b/chrome/browser/chromeos/extensions/screenlock_private_api.cc
index 91a375e..c22fb4d 100644
--- a/chrome/browser/chromeos/extensions/screenlock_private_api.cc
+++ b/chrome/browser/chromeos/extensions/screenlock_private_api.cc
@@ -273,9 +273,7 @@
     args->Append(arg);
   scoped_ptr<extensions::Event> event(new extensions::Event(
       event_name, args.Pass()));
-  extensions::ExtensionSystem::Get(browser_context_)
-      ->event_router()
-      ->BroadcastEvent(event.Pass());
+  extensions::EventRouter::Get(browser_context_)->BroadcastEvent(event.Pass());
 }
 
 static base::LazyInstance<extensions::BrowserContextKeyedAPIFactory<
@@ -308,9 +306,7 @@
 
   scoped_ptr<extensions::Event> event(new extensions::Event(
       screenlock::OnAuthAttempted::kEventName, args.Pass()));
-  extensions::ExtensionSystem::Get(browser_context_)
-      ->event_router()
-      ->BroadcastEvent(event.Pass());
+  extensions::EventRouter::Get(browser_context_)->BroadcastEvent(event.Pass());
 }
 
 }  // namespace extensions
diff --git a/chrome/browser/chromeos/extensions/wallpaper_manager_util.cc b/chrome/browser/chromeos/extensions/wallpaper_manager_util.cc
index b3a3703..da40b7a 100644
--- a/chrome/browser/chromeos/extensions/wallpaper_manager_util.cc
+++ b/chrome/browser/chromeos/extensions/wallpaper_manager_util.cc
@@ -4,19 +4,15 @@
 
 #include "chrome/browser/chromeos/extensions/wallpaper_manager_util.h"
 
-#include "ash/shell.h"
-#include "base/command_line.h"
+#include "base/logging.h"
 #include "chrome/browser/extensions/extension_service.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_manager.h"
-#include "chrome/browser/ui/browser.h"
-#include "chrome/browser/ui/browser_finder.h"
-#include "chrome/browser/ui/chrome_pages.h"
 #include "chrome/browser/ui/extensions/application_launch.h"
-#include "chrome/browser/ui/host_desktop.h"
-#include "chrome/common/chrome_switches.h"
+#include "chrome/common/extensions/extension_constants.h"
 #include "extensions/browser/extension_system.h"
-#include "extensions/common/constants.h"
+#include "extensions/common/extension.h"
+#include "ui/base/window_open_disposition.h"
 
 namespace wallpaper_manager_util {
 
diff --git a/chrome/browser/chromeos/extensions/wallpaper_manager_util.h b/chrome/browser/chromeos/extensions/wallpaper_manager_util.h
index 9104cf8..42a9334 100644
--- a/chrome/browser/chromeos/extensions/wallpaper_manager_util.h
+++ b/chrome/browser/chromeos/extensions/wallpaper_manager_util.h
@@ -5,8 +5,6 @@
 #ifndef CHROME_BROWSER_CHROMEOS_EXTENSIONS_WALLPAPER_MANAGER_UTIL_H_
 #define CHROME_BROWSER_CHROMEOS_EXTENSIONS_WALLPAPER_MANAGER_UTIL_H_
 
-extern const char kWallpaperManagerDomain[];
-
 namespace wallpaper_manager_util {
 
 // Opens wallpaper manager application.
diff --git a/chrome/browser/chromeos/file_manager/external_filesystem_apitest.cc b/chrome/browser/chromeos/file_manager/external_filesystem_apitest.cc
index f9ce991..e72e76f 100644
--- a/chrome/browser/chromeos/file_manager/external_filesystem_apitest.cc
+++ b/chrome/browser/chromeos/file_manager/external_filesystem_apitest.cc
@@ -22,6 +22,7 @@
 #include "content/public/browser/notification_service.h"
 #include "content/public/test/test_utils.h"
 #include "google_apis/drive/test_util.h"
+#include "google_apis/drive/time_util.h"
 #include "webkit/browser/fileapi/external_mount_points.h"
 
 // Tests for access to external file systems (as defined in
@@ -64,27 +65,6 @@
 // Default file content for the test files.
 const char kTestFileContent[] = "This is some test content.";
 
-// Contains feed for drive file system. The file system hierarchy is the same
-// for local and restricted file systems:
-//   test_dir/ - - subdir/
-//              |
-//               - empty_test_dir/
-//              |
-//               - empty_test_file.foo
-//              |
-//               - test_file.xul
-//              |
-//               - test_file.xul.foo
-//              |
-//               - test_file.tiff
-//              |
-//               - test_file.tiff.foo
-//
-// All files except test_dir/empty_file.foo, which is empty, initially contain
-// kTestFileContent.
-const char kTestRootFeed[] =
-    "gdata/remote_file_system_apitest_root_feed.json";
-
 // Sets up the initial file system state for native local and restricted native
 // local file systems. The hierarchy is the same as for the drive file system.
 // The directory is created at unique_temp_dir/|mount_point_name| path.
@@ -134,6 +114,172 @@
   return true;
 }
 
+scoped_ptr<google_apis::ResourceEntry> UpdateDriveEntryTime(
+    drive::FakeDriveService* fake_drive_service,
+    const std::string& resource_id,
+    const std::string& last_modified,
+    const std::string& last_viewed_by_me) {
+  base::Time last_modified_time, last_viewed_by_me_time;
+  if (!google_apis::util::GetTimeFromString(last_modified,
+                                            &last_modified_time) ||
+      !google_apis::util::GetTimeFromString(last_viewed_by_me,
+                                            &last_viewed_by_me_time))
+    return scoped_ptr<google_apis::ResourceEntry>();
+
+  google_apis::GDataErrorCode error = google_apis::GDATA_OTHER_ERROR;
+  scoped_ptr<google_apis::ResourceEntry> entry;
+  fake_drive_service->UpdateResource(
+      resource_id,
+      std::string(),  // parent_resource_id
+      std::string(),  // title
+      last_modified_time,
+      last_viewed_by_me_time,
+      google_apis::test_util::CreateCopyResultCallback(&error, &entry));
+  base::RunLoop().RunUntilIdle();
+  if (error != google_apis::HTTP_SUCCESS)
+    return scoped_ptr<google_apis::ResourceEntry>();
+
+  return entry.Pass();
+}
+
+scoped_ptr<google_apis::ResourceEntry> AddFileToDriveService(
+    drive::FakeDriveService* fake_drive_service,
+    const std::string& mime_type,
+    const std::string& content,
+    const std::string& parent_resource_id,
+    const std::string& title,
+    const std::string& last_modified,
+    const std::string& last_viewed_by_me) {
+  google_apis::GDataErrorCode error = google_apis::GDATA_OTHER_ERROR;
+  scoped_ptr<google_apis::ResourceEntry> entry;
+  fake_drive_service->AddNewFile(
+      mime_type,
+      content,
+      parent_resource_id,
+      title,
+      false,  // shared_with_me
+      google_apis::test_util::CreateCopyResultCallback(&error, &entry));
+  base::RunLoop().RunUntilIdle();
+  if (error != google_apis::HTTP_CREATED)
+    return scoped_ptr<google_apis::ResourceEntry>();
+
+  return UpdateDriveEntryTime(fake_drive_service, entry->resource_id(),
+                              last_modified, last_viewed_by_me);
+}
+
+scoped_ptr<google_apis::ResourceEntry> AddDirectoryToDriveService(
+    drive::FakeDriveService* fake_drive_service,
+    const std::string& parent_resource_id,
+    const std::string& title,
+    const std::string& last_modified,
+    const std::string& last_viewed_by_me) {
+  google_apis::GDataErrorCode error = google_apis::GDATA_OTHER_ERROR;
+  scoped_ptr<google_apis::ResourceEntry> entry;
+  fake_drive_service->AddNewDirectory(
+      parent_resource_id,
+      title,
+      drive::DriveServiceInterface::AddNewDirectoryOptions(),
+      google_apis::test_util::CreateCopyResultCallback(&error, &entry));
+  base::RunLoop().RunUntilIdle();
+  if (error != google_apis::HTTP_CREATED)
+    return scoped_ptr<google_apis::ResourceEntry>();
+
+  return UpdateDriveEntryTime(fake_drive_service, entry->resource_id(),
+                              last_modified, last_viewed_by_me);
+}
+
+// Sets up the drive service state.
+// The hierarchy is the same as for the local file system.
+bool InitializeDriveService(
+    drive::FakeDriveService* fake_drive_service,
+    std::map<std::string, std::string>* out_resource_ids) {
+  scoped_ptr<google_apis::ResourceEntry> entry;
+
+  entry = AddDirectoryToDriveService(fake_drive_service,
+                                     fake_drive_service->GetRootResourceId(),
+                                     "test_dir",
+                                     "2012-01-02T00:00:00.000Z",
+                                     "2012-01-02T00:00:01.000Z");
+  if (!entry)
+    return false;
+  (*out_resource_ids)[entry->title()] = entry->resource_id();
+
+  entry = AddDirectoryToDriveService(fake_drive_service,
+                                     (*out_resource_ids)["test_dir"],
+                                     "empty_test_dir",
+                                     "2011-11-02T04:00:00.000Z",
+                                     "2011-11-02T04:00:00.000Z");
+  if (!entry)
+    return false;
+  (*out_resource_ids)[entry->title()] = entry->resource_id();
+
+  entry = AddDirectoryToDriveService(fake_drive_service,
+                                     (*out_resource_ids)["test_dir"],
+                                     "subdir",
+                                     "2011-04-01T18:34:08.234Z",
+                                     "2012-01-02T00:00:01.000Z");
+  if (!entry)
+    return false;
+  (*out_resource_ids)[entry->title()] = entry->resource_id();
+
+  entry = AddFileToDriveService(fake_drive_service,
+                                "application/vnd.mozilla.xul+xml",
+                                kTestFileContent,
+                                (*out_resource_ids)["test_dir"],
+                                "test_file.xul",
+                                "2011-12-14T00:40:47.330Z",
+                                "2012-01-02T00:00:00.000Z");
+  if (!entry)
+    return false;
+  (*out_resource_ids)[entry->title()] = entry->resource_id();
+
+  entry = AddFileToDriveService(fake_drive_service,
+                                "test/ro",
+                                kTestFileContent,
+                                (*out_resource_ids)["test_dir"],
+                                "test_file.xul.foo",
+                                "2012-01-01T10:00:30.000Z",
+                                "2012-01-01T00:00:00.000Z");
+  if (!entry)
+    return false;
+  (*out_resource_ids)[entry->title()] = entry->resource_id();
+
+  entry = AddFileToDriveService(fake_drive_service,
+                                "image/tiff",
+                                kTestFileContent,
+                                (*out_resource_ids)["test_dir"],
+                                "test_file.tiff",
+                                "2011-04-03T11:11:10.000Z",
+                                "2012-01-02T00:00:00.000Z");
+  if (!entry)
+    return false;
+  (*out_resource_ids)[entry->title()] = entry->resource_id();
+
+  entry = AddFileToDriveService(fake_drive_service,
+                                "test/rw",
+                                kTestFileContent,
+                                (*out_resource_ids)["test_dir"],
+                                "test_file.tiff.foo",
+                                "2011-12-14T00:40:47.330Z",
+                                "2010-01-02T00:00:00.000Z");
+  if (!entry)
+    return false;
+  (*out_resource_ids)[entry->title()] = entry->resource_id();
+
+  entry = AddFileToDriveService(fake_drive_service,
+                                "test/rw",
+                                "",
+                                (*out_resource_ids)["test_dir"],
+                                "empty_test_file.foo",
+                                "2011-12-14T00:40:47.330Z",
+                                "2011-12-14T00:40:47.330Z");
+  if (!entry)
+    return false;
+  (*out_resource_ids)[entry->title()] = entry->resource_id();
+
+  return true;
+}
+
 // Helper class to wait for a background page to load or close again.
 class BackgroundObserver {
  public:
@@ -233,8 +379,7 @@
   }
 
  protected:
-  // Sets up initial test file system hierarchy. See comment for kTestRootFeed
-  // for the actual hierarchy.
+  // Sets up initial test file system hierarchy.
   virtual void InitTestFileSystem() = 0;
   // Registers mount point used in the test.
   virtual void AddTestMountPoint() = 0;
@@ -331,9 +476,11 @@
   drive::DriveIntegrationService* CreateDriveIntegrationService(
       Profile* profile) {
     fake_drive_service_ = new drive::FakeDriveService;
-    fake_drive_service_->LoadResourceListForWapi(kTestRootFeed);
     fake_drive_service_->LoadAppListForDriveApi("drive/applist.json");
 
+    std::map<std::string, std::string> resource_ids;
+    EXPECT_TRUE(InitializeDriveService(fake_drive_service_, &resource_ids));
+
     return new drive::DriveIntegrationService(
         profile, NULL,
         fake_drive_service_, "drive", test_cache_root_.path(), NULL);
@@ -390,15 +537,15 @@
 
     drive::FakeDriveService* const fake_drive_service =
         new drive::FakeDriveService;
-    fake_drive_service->LoadResourceListForWapi(kTestRootFeed);
     fake_drive_service->LoadAppListForDriveApi("drive/applist.json");
+    EXPECT_TRUE(InitializeDriveService(fake_drive_service, &resource_ids_));
 
     return new drive::DriveIntegrationService(
         profile, NULL, fake_drive_service, std::string(), cache_dir, NULL);
   }
 
   bool AddTestHostedDocuments() {
-    const char kResourceId[] = "document:unique-id-for-multiprofile-copy-test";
+    const char kResourceId[] = "unique-id-for-multiprofile-copy-test";
     drive::FakeDriveService* const main_service =
         static_cast<drive::FakeDriveService*>(
             drive::util::GetDriveServiceByProfile(browser()->profile()));
@@ -413,7 +560,7 @@
     sub_service->AddNewFileWithResourceId(
         kResourceId,
         "application/vnd.google-apps.document", "",
-        "folder:1_folder_resource_id", "hosted_doc", true,
+        resource_ids_["test_dir"], "hosted_doc", true,
         google_apis::test_util::CreateCopyResultCallback(&error, &entry));
     drive::test_util::RunBlockingPoolTask();
     if (error != google_apis::HTTP_CREATED)
@@ -435,6 +582,7 @@
   scoped_ptr<DriveIntegrationServiceFactory::ScopedFactoryForTest>
       service_factory_for_test_;
   Profile* second_profile;
+  std::map<std::string, std::string> resource_ids_;
 };
 
 //
diff --git a/chrome/browser/chromeos/file_manager/fake_disk_mount_manager.cc b/chrome/browser/chromeos/file_manager/fake_disk_mount_manager.cc
index da872d0..0573a43 100644
--- a/chrome/browser/chromeos/file_manager/fake_disk_mount_manager.cc
+++ b/chrome/browser/chromeos/file_manager/fake_disk_mount_manager.cc
@@ -119,4 +119,12 @@
   return false;
 }
 
+void FakeDiskMountManager::InvokeDiskEventForTest(
+    chromeos::disks::DiskMountManager::DiskEvent event,
+    const chromeos::disks::DiskMountManager::Disk* disk) {
+  FOR_EACH_OBSERVER(chromeos::disks::DiskMountManager::Observer,
+                    observers_,
+                    OnDiskEvent(event, disk));
+}
+
 }  // namespace file_manager
diff --git a/chrome/browser/chromeos/file_manager/fake_disk_mount_manager.h b/chrome/browser/chromeos/file_manager/fake_disk_mount_manager.h
index ea84118..33bdd10 100644
--- a/chrome/browser/chromeos/file_manager/fake_disk_mount_manager.h
+++ b/chrome/browser/chromeos/file_manager/fake_disk_mount_manager.h
@@ -71,6 +71,7 @@
   virtual bool AddDiskForTest(Disk* disk) OVERRIDE;
   virtual bool AddMountPointForTest(
       const MountPointInfo& mount_point) OVERRIDE;
+  void InvokeDiskEventForTest(DiskEvent event, const Disk* disk);
 
  private:
   ObserverList<Observer> observers_;
diff --git a/chrome/browser/chromeos/file_manager/file_browser_handlers.cc b/chrome/browser/chromeos/file_manager/file_browser_handlers.cc
index 96728e8..e5935e4 100644
--- a/chrome/browser/chromeos/file_manager/file_browser_handlers.cc
+++ b/chrome/browser/chromeos/file_manager/file_browser_handlers.cc
@@ -359,9 +359,8 @@
     return;
   }
 
-  extensions::EventRouter* event_router =
-      extensions::ExtensionSystem::Get(profile_)->event_router();
-  if (!event_router) {
+  extensions::EventRouter* router = extensions::EventRouter::Get(profile_);
+  if (!router) {
     ExecuteDoneOnUIThread(false);
     return;
   }
@@ -394,7 +393,7 @@
   scoped_ptr<extensions::Event> event(new extensions::Event(
       "fileBrowserHandler.onExecute", event_args.Pass()));
   event->restrict_to_browser_context = profile_;
-  event_router->DispatchEventToExtension(extension_->id(), event.Pass());
+  router->DispatchEventToExtension(extension_->id(), event.Pass());
 
   ExecuteDoneOnUIThread(true);
 }
diff --git a/chrome/browser/chromeos/file_manager/file_tasks.cc b/chrome/browser/chromeos/file_manager/file_tasks.cc
index 720c401..91eed80 100644
--- a/chrome/browser/chromeos/file_manager/file_tasks.cc
+++ b/chrome/browser/chromeos/file_manager/file_tasks.cc
@@ -27,6 +27,7 @@
 #include "extensions/browser/extension_host.h"
 #include "extensions/browser/extension_system.h"
 #include "extensions/common/extension_set.h"
+#include "google_apis/drive/gdata_wapi_parser.h"
 #include "webkit/browser/fileapi/file_system_context.h"
 #include "webkit/browser/fileapi/file_system_url.h"
 
diff --git a/chrome/browser/chromeos/file_manager/fileapi_util.cc b/chrome/browser/chromeos/file_manager/fileapi_util.cc
index 4f7860a..31340de 100644
--- a/chrome/browser/chromeos/file_manager/fileapi_util.cc
+++ b/chrome/browser/chromeos/file_manager/fileapi_util.cc
@@ -71,9 +71,10 @@
   // Then, calls OnIteratorConverted with the created entry definition.
   void OnResolvedURL(scoped_ptr<FileDefinitionListConverter> self_deleter,
                      FileDefinitionList::const_iterator iterator,
-                     const GURL& root_url,
-                     const std::string& name,
-                     base::File::Error error);
+                     base::File::Error error,
+                     const fileapi::FileSystemInfo& info,
+                     const base::FilePath& file_path,
+                     fileapi::FileSystemContext::ResolvedEntryType type);
 
   // Called when the iterator is converted. Adds the |entry_definition| to
   // |results_| and calls ConvertNextIterator() for the next element.
@@ -132,16 +133,6 @@
     return;
   }
 
-  fileapi::ExternalFileSystemBackend* backend =
-      file_system_context_->external_backend();
-  if (!backend) {
-    OnIteratorConverted(self_deleter.Pass(),
-                        iterator,
-                        CreateEntryDefinitionWithError(
-                            base::File::FILE_ERROR_INVALID_OPERATION));
-    return;
-  }
-
   fileapi::FileSystemURL url = file_system_context_->CreateCrackedFileSystemURL(
       extensions::Extension::GetBaseURLFromExtensionId(extension_id_),
       fileapi::kFileSystemTypeExternal,
@@ -150,13 +141,8 @@
 
   // The converter object will be deleted if the callback is not called because
   // of shutdown during ResolveURL().
-  //
-  // TODO(mtomasz, nhiroki): Call FileSystemContext::ResolveURL() directly,
-  // after removing redundant thread restrictions in there.
-  backend->ResolveURL(
+  file_system_context_->ResolveURL(
       url,
-      // Not sandboxed file systems are not creatable via ResolveURL().
-      fileapi::OPEN_FILE_SYSTEM_FAIL_IF_NONEXISTENT,
       base::Bind(&FileDefinitionListConverter::OnResolvedURL,
                  base::Unretained(this),
                  base::Passed(&self_deleter),
@@ -166,21 +152,32 @@
 void FileDefinitionListConverter::OnResolvedURL(
     scoped_ptr<FileDefinitionListConverter> self_deleter,
     FileDefinitionList::const_iterator iterator,
-    const GURL& root_url,
-    const std::string& name,
-    base::File::Error error) {
+    base::File::Error error,
+    const fileapi::FileSystemInfo& info,
+    const base::FilePath& file_path,
+    fileapi::FileSystemContext::ResolvedEntryType type) {
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
 
+  if (error != base::File::FILE_OK) {
+    OnIteratorConverted(self_deleter.Pass(),
+                        iterator,
+                        CreateEntryDefinitionWithError(error));
+    return;
+  }
+
   EntryDefinition entry_definition;
-  entry_definition.file_system_root_url = root_url.spec();
-  entry_definition.file_system_name = name;
+  entry_definition.file_system_root_url = info.root_url.spec();
+  entry_definition.file_system_name = info.name;
+  DCHECK(type == fileapi::FileSystemContext::RESOLVED_ENTRY_NOT_FOUND ||
+         iterator->is_directory ==
+             (type == fileapi::FileSystemContext::RESOLVED_ENTRY_DIRECTORY));
   entry_definition.is_directory = iterator->is_directory;
-  entry_definition.error = error;
+  entry_definition.error = base::File::FILE_OK;
 
   // Construct a target Entry.fullPath value from the virtual path and the
   // root URL. Eg. Downloads/A/b.txt -> A/b.txt.
   const base::FilePath root_virtual_path =
-      file_system_context_->CrackURL(root_url).virtual_path();
+      file_system_context_->CrackURL(info.root_url).virtual_path();
   DCHECK(root_virtual_path == iterator->virtual_path ||
          root_virtual_path.IsParent(iterator->virtual_path));
   base::FilePath full_path;
diff --git a/chrome/browser/chromeos/file_manager/mounted_disk_monitor.cc b/chrome/browser/chromeos/file_manager/mounted_disk_monitor.cc
index 47b6051..d5e406e 100644
--- a/chrome/browser/chromeos/file_manager/mounted_disk_monitor.cc
+++ b/chrome/browser/chromeos/file_manager/mounted_disk_monitor.cc
@@ -44,12 +44,12 @@
 void MountedDiskMonitor::SuspendImminent() {
   // Flip the resuming flag while suspending, so it is possible to detect
   // resuming as soon as possible after the lid is open. Note, that mount
-  // events may occur before the SystemResumed method is called.
+  // events may occur before the SuspendDone method is called.
   is_resuming_ = true;
   weak_factory_.InvalidateWeakPtrs();
 }
 
-void MountedDiskMonitor::SystemResumed(
+void MountedDiskMonitor::SuspendDone(
     const base::TimeDelta& sleep_duration) {
   // Undo any previous resets. Release the resuming flag after a fixed timeout.
   weak_factory_.InvalidateWeakPtrs();
@@ -65,6 +65,18 @@
   return unmounted_while_resuming_.count(disk.fs_uuid()) > 0;
 }
 
+bool MountedDiskMonitor::DeviceIsHardUnplugged(
+    const std::string& device_path) const {
+  return hard_unplugged_.count(device_path) > 0;
+}
+
+void MountedDiskMonitor::ClearHardUnpluggedFlag(
+    const std::string& device_path) {
+  std::set<std::string>::iterator it = hard_unplugged_.find(device_path);
+  if (it != hard_unplugged_.end())
+    hard_unplugged_.erase(it);
+}
+
 void MountedDiskMonitor::OnMountEvent(
     chromeos::disks::DiskMountManager::MountEvent event,
     chromeos::MountError error_code,
@@ -98,6 +110,11 @@
 void MountedDiskMonitor::OnDiskEvent(
     chromeos::disks::DiskMountManager::DiskEvent event,
     const chromeos::disks::DiskMountManager::Disk* disk) {
+  if (event == chromeos::disks::DiskMountManager::DISK_REMOVED) {
+    // If the mount path is not empty, the disk is hard unplugged.
+    if (!is_resuming_ && !disk->mount_path().empty())
+      hard_unplugged_.insert(disk->system_path_prefix());
+  }
 }
 
 void MountedDiskMonitor::OnDeviceEvent(
diff --git a/chrome/browser/chromeos/file_manager/mounted_disk_monitor.h b/chrome/browser/chromeos/file_manager/mounted_disk_monitor.h
index bb0c540..b9b839f 100644
--- a/chrome/browser/chromeos/file_manager/mounted_disk_monitor.h
+++ b/chrome/browser/chromeos/file_manager/mounted_disk_monitor.h
@@ -32,7 +32,7 @@
 
   // PowerManagerClient::Observer overrides:
   virtual void SuspendImminent() OVERRIDE;
-  virtual void SystemResumed(const base::TimeDelta& sleep_duration) OVERRIDE;
+  virtual void SuspendDone(const base::TimeDelta& sleep_duration) OVERRIDE;
 
   // DiskMountManager::Observer overrides.
   virtual void OnDiskEvent(
@@ -55,6 +55,8 @@
   // been unmounted during the resuming time span.
   bool DiskIsRemounting(
       const chromeos::disks::DiskMountManager::Disk& disk) const;
+  bool DeviceIsHardUnplugged(const std::string& device_path) const;
+  void ClearHardUnpluggedFlag(const std::string& device_path);
 
   // In order to avoid consuming time a lot for testing, this allows to set the
   // resuming time span.
@@ -78,6 +80,11 @@
   bool is_resuming_;
   DiskMap mounted_disks_;
   DiskSet unmounted_while_resuming_;
+  // Map of mount paths and device paths that are mount but are not unmount
+  // requested.
+  std::map<std::string, std::string> not_unmount_requested_;
+  // Set of device path that is hard unplugged.
+  std::set<std::string> hard_unplugged_;
   base::TimeDelta resuming_time_span_;
   base::WeakPtrFactory<MountedDiskMonitor> weak_factory_;
 
diff --git a/chrome/browser/chromeos/file_manager/mounted_disk_monitor_unittest.cc b/chrome/browser/chromeos/file_manager/mounted_disk_monitor_unittest.cc
index 502c254..463f6f1 100644
--- a/chrome/browser/chromeos/file_manager/mounted_disk_monitor_unittest.cc
+++ b/chrome/browser/chromeos/file_manager/mounted_disk_monitor_unittest.cc
@@ -119,7 +119,7 @@
 
   // Pseudo system suspend and resume.
   mounted_disk_monitor_->SuspendImminent();
-  mounted_disk_monitor_->SystemResumed(base::TimeDelta::FromSeconds(0));
+  mounted_disk_monitor_->SuspendDone(base::TimeDelta::FromSeconds(0));
 
   // On system resume, we expect unmount and then mount immediately.
   // During the phase, we expect the disk is remounting.
diff --git a/chrome/browser/chromeos/file_manager/volume_manager.cc b/chrome/browser/chromeos/file_manager/volume_manager.cc
index a8a4f33..0f8ff5f 100644
--- a/chrome/browser/chromeos/file_manager/volume_manager.cc
+++ b/chrome/browser/chromeos/file_manager/volume_manager.cc
@@ -20,7 +20,7 @@
 #include "chrome/browser/chromeos/file_manager/path_util.h"
 #include "chrome/browser/chromeos/file_manager/volume_manager_factory.h"
 #include "chrome/browser/chromeos/file_manager/volume_manager_observer.h"
-#include "chrome/browser/chromeos/file_system_provider/provided_file_system.h"
+#include "chrome/browser/chromeos/file_system_provider/provided_file_system_info.h"
 #include "chrome/browser/chromeos/profiles/profile_helper.h"
 #include "chrome/browser/local_discovery/storage/privet_filesystem_constants.h"
 #include "chrome/browser/profiles/profile.h"
@@ -35,6 +35,9 @@
 namespace file_manager {
 namespace {
 
+// A named constant to be passed to the |is_remounting| parameter.
+const bool kNotRemounting = false;
+
 // Registers |path| as the "Downloads" folder to the FileSystem API backend.
 // If another folder is already mounted. It revokes and overrides the old one.
 bool RegisterDownloadsMountPoint(Profile* profile, const base::FilePath& path) {
@@ -96,12 +99,12 @@
       return "archive";
     case VOLUME_TYPE_CLOUD_DEVICE:
       return "cloud_device";
-    case VOLUME_TYPE_TESTING:
-      return "testing";
     case VOLUME_TYPE_PROVIDED:
       return "provided";
     case VOLUME_TYPE_MTP:
       return "mtp";
+    case VOLUME_TYPE_TESTING:
+      return "testing";
   }
   NOTREACHED();
   return "";
@@ -199,15 +202,16 @@
 }
 
 VolumeInfo CreateProvidedFileSystemVolumeInfo(
-    const chromeos::file_system_provider::ProvidedFileSystem& file_system) {
+    const chromeos::file_system_provider::ProvidedFileSystemInfo&
+        file_system_info) {
   VolumeInfo volume_info;
   volume_info.type = VOLUME_TYPE_PROVIDED;
-  volume_info.mount_path = file_system.mount_path();
+  volume_info.mount_path = file_system_info.mount_path();
   volume_info.mount_condition = chromeos::disks::MOUNT_CONDITION_NONE;
   volume_info.is_parent = true;
   volume_info.is_read_only = true;
   volume_info.volume_id = GenerateVolumeId(volume_info);
-  volume_info.file_system_id = file_system.file_system_id();
+  volume_info.file_system_id = file_system_info.file_system_id();
   return volume_info;
 }
 
@@ -234,7 +238,8 @@
       disk_mount_manager_(disk_mount_manager),
       mounted_disk_monitor_(
           new MountedDiskMonitor(power_manager_client, disk_mount_manager)),
-      file_system_provider_service_(file_system_provider_service) {
+      file_system_provider_service_(file_system_provider_service),
+      weak_ptr_factory_(this) {
   DCHECK(disk_mount_manager);
 }
 
@@ -246,7 +251,9 @@
 }
 
 void VolumeManager::Initialize() {
-  const bool kNotRemounting = false;
+  // If in Sign in profile, then skip mounting and listening for mount events.
+  if (chromeos::ProfileHelper::IsSigninProfile(profile_))
+    return;
 
   // Path to mount user folders have changed several times. We need to migrate
   // the old preferences on paths to the new format when needed. For the detail,
@@ -263,10 +270,6 @@
                                       new_path);
   }
 
-  // If in Sign in profile, then skip mounting and listening for mount events.
-  if (chromeos::ProfileHelper::IsSigninProfile(profile_))
-    return;
-
   // Register 'Downloads' folder for the profile to the file system.
   const base::FilePath downloads =
       file_manager::util::GetDownloadsFolderForProfile(profile_);
@@ -293,14 +296,14 @@
   // Subscribe to FileSystemProviderService and register currently mounted
   // volumes for the profile.
   if (file_system_provider_service_) {
-    using chromeos::file_system_provider::ProvidedFileSystem;
+    using chromeos::file_system_provider::ProvidedFileSystemInfo;
     file_system_provider_service_->AddObserver(this);
 
-    std::vector<ProvidedFileSystem> provided_file_systems =
-        file_system_provider_service_->GetMountedFileSystems();
-    for (size_t i = 0; i < provided_file_systems.size(); ++i) {
+    std::vector<ProvidedFileSystemInfo> file_system_info_list =
+        file_system_provider_service_->GetProvidedFileSystemInfoList();
+    for (size_t i = 0; i < file_system_info_list.size(); ++i) {
       VolumeInfo volume_info =
-          CreateProvidedFileSystemVolumeInfo(provided_file_systems[i]);
+          CreateProvidedFileSystemVolumeInfo(file_system_info_list[i]);
       DoMountEvent(chromeos::MOUNT_ERROR_NONE, volume_info, kNotRemounting);
     }
   }
@@ -358,18 +361,21 @@
   pref_change_registrar_.Add(
       prefs::kExternalStorageDisabled,
       base::Bind(&VolumeManager::OnExternalStorageDisabledChanged,
-                 base::Unretained(this)));
+                 weak_ptr_factory_.GetWeakPtr()));
 
+  // Subscribe to Privet volume lister.
   if (CommandLine::ForCurrentProcess()->HasSwitch(
           switches::kEnablePrivetStorage)) {
     privet_volume_lister_.reset(new local_discovery::PrivetVolumeLister(
         base::Bind(&VolumeManager::OnPrivetVolumesAvailable,
-                   base::Unretained(this))));
+                   weak_ptr_factory_.GetWeakPtr())));
     privet_volume_lister_->Start();
   }
 }
 
 void VolumeManager::Shutdown() {
+  weak_ptr_factory_.InvalidateWeakPtrs();
+
   pref_change_registrar_.RemoveAll();
   disk_mount_manager_->RemoveObserver(this);
 
@@ -432,7 +438,7 @@
   DoMountEvent(
       success ? chromeos::MOUNT_ERROR_NONE : chromeos::MOUNT_ERROR_INVALID_PATH,
       CreateDownloadsVolumeInfo(path),
-      false /* is_remounting */);
+      kNotRemounting);
   return success;
 }
 
@@ -442,7 +448,7 @@
   DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
   DoMountEvent(chromeos::MOUNT_ERROR_NONE,
                CreateTestingVolumeInfo(path, volume_type, device_type),
-               false /* is_remounting */);
+               kNotRemounting);
 }
 
 void VolumeManager::OnFileSystemMounted() {
@@ -452,8 +458,7 @@
   // We can pass chromeos::MOUNT_ERROR_NONE even when authentication is failed
   // or network is unreachable. These two errors will be handled later.
   VolumeInfo volume_info = CreateDriveVolumeInfo(profile_);
-  DoMountEvent(chromeos::MOUNT_ERROR_NONE, volume_info,
-               false /* is_remounting */);
+  DoMountEvent(chromeos::MOUNT_ERROR_NONE, volume_info, kNotRemounting);
 }
 
 void VolumeManager::OnFileSystemBeingUnmounted() {
@@ -528,10 +533,15 @@
       FOR_EACH_OBSERVER(VolumeManagerObserver, observers_,
                         OnDeviceAdded(device_path));
       return;
-    case chromeos::disks::DiskMountManager::DEVICE_REMOVED:
-      FOR_EACH_OBSERVER(VolumeManagerObserver, observers_,
-                        OnDeviceRemoved(device_path));
+    case chromeos::disks::DiskMountManager::DEVICE_REMOVED: {
+      const bool hard_unplugged =
+          mounted_disk_monitor_->DeviceIsHardUnplugged(device_path);
+      FOR_EACH_OBSERVER(VolumeManagerObserver,
+                        observers_,
+                        OnDeviceRemoved(device_path, hard_unplugged));
+      mounted_disk_monitor_->ClearHardUnpluggedFlag(device_path);
       return;
+    }
     case chromeos::disks::DiskMountManager::DEVICE_SCANNED:
       DVLOG(1) << "Ignore SCANNED event: " << device_path;
       return;
@@ -621,26 +631,28 @@
 }
 
 void VolumeManager::OnProvidedFileSystemMount(
-    const chromeos::file_system_provider::ProvidedFileSystem& file_system,
+    const chromeos::file_system_provider::ProvidedFileSystemInfo&
+        file_system_info,
     base::File::Error error) {
-  VolumeInfo volume_info = CreateProvidedFileSystemVolumeInfo(file_system);
+  VolumeInfo volume_info = CreateProvidedFileSystemVolumeInfo(file_system_info);
   // TODO(mtomasz): Introduce own type, and avoid using MountError internally,
   // since it is related to cros disks only.
   const chromeos::MountError mount_error = error == base::File::FILE_OK
                                                ? chromeos::MOUNT_ERROR_NONE
                                                : chromeos::MOUNT_ERROR_UNKNOWN;
-  DoMountEvent(mount_error, volume_info, false /* remounting */);
+  DoMountEvent(mount_error, volume_info, kNotRemounting);
 }
 
 void VolumeManager::OnProvidedFileSystemUnmount(
-    const chromeos::file_system_provider::ProvidedFileSystem& file_system,
+    const chromeos::file_system_provider::ProvidedFileSystemInfo&
+        file_system_info,
     base::File::Error error) {
   // TODO(mtomasz): Introduce own type, and avoid using MountError internally,
   // since it is related to cros disks only.
   const chromeos::MountError mount_error = error == base::File::FILE_OK
                                                ? chromeos::MOUNT_ERROR_NONE
                                                : chromeos::MOUNT_ERROR_UNKNOWN;
-  VolumeInfo volume_info = CreateProvidedFileSystemVolumeInfo(file_system);
+  VolumeInfo volume_info = CreateProvidedFileSystemVolumeInfo(file_system_info);
   DoUnmountEvent(mount_error, volume_info);
 }
 
diff --git a/chrome/browser/chromeos/file_manager/volume_manager.h b/chrome/browser/chromeos/file_manager/volume_manager.h
index bd3b11e..17be56f 100644
--- a/chrome/browser/chromeos/file_manager/volume_manager.h
+++ b/chrome/browser/chromeos/file_manager/volume_manager.h
@@ -13,6 +13,7 @@
 #include "base/files/file.h"
 #include "base/files/file_path.h"
 #include "base/memory/scoped_ptr.h"
+#include "base/memory/weak_ptr.h"
 #include "base/observer_list.h"
 #include "base/prefs/pref_change_registrar.h"
 #include "chrome/browser/chromeos/drive/drive_integration_service.h"
@@ -33,10 +34,6 @@
 class BrowserContext;
 }  // namespace content
 
-namespace drive {
-class DriveIntegrationService;
-}  // namespace drive
-
 namespace file_manager {
 
 class MountedDiskMonitor;
@@ -123,7 +120,7 @@
   // Returns the instance corresponding to the |context|.
   static VolumeManager* Get(content::BrowserContext* context);
 
-  // Intializes this instance.
+  // Initializes this instance.
   void Initialize();
 
   // Disposes this instance.
@@ -176,10 +173,12 @@
 
   // chromeos::file_system_provider::Observer overrides.
   virtual void OnProvidedFileSystemMount(
-      const chromeos::file_system_provider::ProvidedFileSystem& file_system,
+      const chromeos::file_system_provider::ProvidedFileSystemInfo&
+          file_system_info,
       base::File::Error error) OVERRIDE;
   virtual void OnProvidedFileSystemUnmount(
-      const chromeos::file_system_provider::ProvidedFileSystem& file_system,
+      const chromeos::file_system_provider::ProvidedFileSystemInfo&
+          file_system_info,
       base::File::Error error) OVERRIDE;
 
   // Called on change to kExternalStorageDisabled pref.
@@ -205,6 +204,9 @@
       file_system_provider_service_;  // Not owned by this class.
   std::map<std::string, VolumeInfo> mounted_volumes_;
 
+  // Note: This should remain the last member so it'll be destroyed and
+  // invalidate its weak pointers before any other members are destroyed.
+  base::WeakPtrFactory<VolumeManager> weak_ptr_factory_;
   DISALLOW_COPY_AND_ASSIGN(VolumeManager);
 };
 
diff --git a/chrome/browser/chromeos/file_manager/volume_manager_observer.h b/chrome/browser/chromeos/file_manager/volume_manager_observer.h
index 12952f2..b920214 100644
--- a/chrome/browser/chromeos/file_manager/volume_manager_observer.h
+++ b/chrome/browser/chromeos/file_manager/volume_manager_observer.h
@@ -31,7 +31,8 @@
   virtual void OnDeviceAdded(const std::string& device_path) = 0;
 
   // Fired when a device is removed.
-  virtual void OnDeviceRemoved(const std::string& device_path) = 0;
+  virtual void OnDeviceRemoved(const std::string& device_path,
+                               bool hard_unplugged) = 0;
 
   // Fired when a volume is mounted.
   virtual void OnVolumeMounted(chromeos::MountError error_code,
diff --git a/chrome/browser/chromeos/file_manager/volume_manager_unittest.cc b/chrome/browser/chromeos/file_manager/volume_manager_unittest.cc
index 828befa..0ad3161 100644
--- a/chrome/browser/chromeos/file_manager/volume_manager_unittest.cc
+++ b/chrome/browser/chromeos/file_manager/volume_manager_unittest.cc
@@ -11,12 +11,14 @@
 #include "base/prefs/pref_service.h"
 #include "chrome/browser/chromeos/file_manager/fake_disk_mount_manager.h"
 #include "chrome/browser/chromeos/file_manager/volume_manager_observer.h"
+#include "chrome/browser/chromeos/file_system_provider/fake_provided_file_system.h"
 #include "chrome/browser/chromeos/file_system_provider/service.h"
 #include "chrome/common/pref_names.h"
 #include "chrome/test/base/testing_profile.h"
 #include "chromeos/dbus/fake_power_manager_client.h"
 #include "chromeos/disks/disk_mount_manager.h"
 #include "content/public/test/test_browser_thread_bundle.h"
+#include "extensions/browser/extension_registry.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace file_manager {
@@ -43,6 +45,9 @@
     // Available on DISK_ADDED.
     bool mounting;
 
+    // Available on DEVICE_REMOVED;
+    bool hard_unplugged;
+
     // Available on VOLUME_MOUNTED and VOLUME_UNMOUNTED.
     chromeos::MountError mount_error;
 
@@ -83,10 +88,12 @@
     events_.push_back(event);
   }
 
-  virtual void OnDeviceRemoved(const std::string& device_path) OVERRIDE {
+  virtual void OnDeviceRemoved(const std::string& device_path,
+                               bool hard_unplugged) OVERRIDE {
     Event event;
     event.type = Event::DEVICE_REMOVED;
     event.device_path = device_path;
+    event.hard_unplugged = hard_unplugged;
     events_.push_back(event);
   }
 
@@ -144,14 +151,20 @@
     ProfileEnvironment(chromeos::PowerManagerClient* power_manager_client,
                        chromeos::disks::DiskMountManager* disk_manager)
         : profile_(new TestingProfile),
+          extension_registry_(
+              new extensions::ExtensionRegistry(profile_.get())),
           file_system_provider_service_(
-              new chromeos::file_system_provider::Service(profile_.get())),
-          volume_manager_(new VolumeManager(
-              profile_.get(),
-              NULL,  // DriveIntegrationService
-              power_manager_client,
-              disk_manager,
-              file_system_provider_service_.get())) {
+              new chromeos::file_system_provider::Service(
+                  profile_.get(),
+                  extension_registry_.get())),
+          volume_manager_(
+              new VolumeManager(profile_.get(),
+                                NULL,  // DriveIntegrationService
+                                power_manager_client,
+                                disk_manager,
+                                file_system_provider_service_.get())) {
+      file_system_provider_service_->SetFileSystemFactoryForTests(base::Bind(
+          &chromeos::file_system_provider::FakeProvidedFileSystem::Create));
     }
 
     Profile* profile() const { return profile_.get(); }
@@ -159,6 +172,7 @@
 
    private:
     scoped_ptr<TestingProfile> profile_;
+    scoped_ptr<extensions::ExtensionRegistry> extension_registry_;
     scoped_ptr<chromeos::file_system_provider::Service>
         file_system_provider_service_;
     scoped_ptr<VolumeManager> volume_manager_;
@@ -508,12 +522,7 @@
   // Emulate system suspend and then resume.
   {
     power_manager_client_->SendSuspendImminent();
-    power_manager::SuspendState state;
-    state.set_type(power_manager::SuspendState_Type_SUSPEND_TO_MEMORY);
-    state.set_wall_time(0);
-    power_manager_client_->SendSuspendStateChanged(state);
-    state.set_type(power_manager::SuspendState_Type_RESUME);
-    power_manager_client_->SendSuspendStateChanged(state);
+    power_manager_client_->SendSuspendDone();
 
     // After resume, the device is unmounted and then mounted.
     disk_mount_manager_->UnmountPath(
@@ -806,4 +815,43 @@
   EXPECT_EQ(3u, observer.events().size());
 }
 
+TEST_F(VolumeManagerTest, HardUnplugged) {
+  LoggingObserver observer;
+  volume_manager()->AddObserver(&observer);
+  volume_manager()->OnDeviceEvent(
+      chromeos::disks::DiskMountManager::DEVICE_REMOVED, "device1");
+
+  // Disk that has a mount path is removed.
+  chromeos::disks::DiskMountManager::Disk disk("device1",
+                                               "/mount/path",
+                                               "",
+                                               "",
+                                               "",
+                                               "",
+                                               "",
+                                               "",
+                                               "",
+                                               "",
+                                               "uuid1",
+                                               "device1",
+                                               chromeos::DEVICE_TYPE_UNKNOWN,
+                                               0,
+                                               false,
+                                               false,
+                                               false,
+                                               false,
+                                               false);
+  disk_mount_manager_->InvokeDiskEventForTest(
+      chromeos::disks::DiskMountManager::DISK_REMOVED, &disk);
+
+  volume_manager()->OnDeviceEvent(
+      chromeos::disks::DiskMountManager::DEVICE_REMOVED, "device1");
+
+  EXPECT_EQ(2u, observer.events().size());
+  EXPECT_EQ(LoggingObserver::Event::DEVICE_REMOVED, observer.events()[0].type);
+  EXPECT_EQ(LoggingObserver::Event::DEVICE_REMOVED, observer.events()[1].type);
+  EXPECT_FALSE(observer.events()[0].hard_unplugged);
+  EXPECT_TRUE(observer.events()[1].hard_unplugged);
+}
+
 }  // namespace file_manager
diff --git a/chrome/browser/chromeos/file_system_provider/fake_provided_file_system.cc b/chrome/browser/chromeos/file_system_provider/fake_provided_file_system.cc
new file mode 100644
index 0000000..b80c3dc
--- /dev/null
+++ b/chrome/browser/chromeos/file_system_provider/fake_provided_file_system.cc
@@ -0,0 +1,44 @@
+// 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.
+
+#include "chrome/browser/chromeos/file_system_provider/fake_provided_file_system.h"
+
+#include "base/files/file.h"
+#include "base/message_loop/message_loop_proxy.h"
+#include "extensions/browser/event_router.h"
+
+namespace chromeos {
+namespace file_system_provider {
+
+FakeProvidedFileSystem::FakeProvidedFileSystem(
+    const ProvidedFileSystemInfo& file_system_info)
+    : file_system_info_(file_system_info) {}
+
+FakeProvidedFileSystem::~FakeProvidedFileSystem() {}
+
+bool FakeProvidedFileSystem::RequestUnmount(
+    const fileapi::AsyncFileUtil::StatusCallback& callback) {
+  base::MessageLoopProxy::current()->PostTask(
+      FROM_HERE, base::Bind(callback, base::File::FILE_OK));
+  return true;
+}
+
+const ProvidedFileSystemInfo& FakeProvidedFileSystem::GetFileSystemInfo()
+    const {
+  return file_system_info_;
+}
+
+RequestManager* FakeProvidedFileSystem::GetRequestManager() {
+  NOTREACHED();
+  return NULL;
+}
+
+ProvidedFileSystemInterface* FakeProvidedFileSystem::Create(
+    extensions::EventRouter* event_router,
+    const ProvidedFileSystemInfo& file_system_info) {
+  return new FakeProvidedFileSystem(file_system_info);
+}
+
+}  // namespace file_system_provider
+}  // namespace chromeos
diff --git a/chrome/browser/chromeos/file_system_provider/fake_provided_file_system.h b/chrome/browser/chromeos/file_system_provider/fake_provided_file_system.h
new file mode 100644
index 0000000..a77c7fc
--- /dev/null
+++ b/chrome/browser/chromeos/file_system_provider/fake_provided_file_system.h
@@ -0,0 +1,50 @@
+// 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.
+
+#ifndef CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_FAKE_PROVIDED_FILE_SYSTEM_H_
+#define CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_FAKE_PROVIDED_FILE_SYSTEM_H_
+
+#include <string>
+
+#include "chrome/browser/chromeos/file_system_provider/provided_file_system_info.h"
+#include "chrome/browser/chromeos/file_system_provider/provided_file_system_interface.h"
+
+namespace extensions {
+class EventRouter;
+}  // namespace extensions
+
+namespace chromeos {
+namespace file_system_provider {
+
+class RequestManager;
+
+// Fake provided file system implementation. Does not communicate with target
+// extensions. Used for unit tests.
+class FakeProvidedFileSystem : public ProvidedFileSystemInterface {
+ public:
+  explicit FakeProvidedFileSystem(
+      const ProvidedFileSystemInfo& file_system_info);
+  virtual ~FakeProvidedFileSystem();
+
+  // ProvidedFileSystemInterface overrides.
+  virtual bool RequestUnmount(
+      const fileapi::AsyncFileUtil::StatusCallback& callback) OVERRIDE;
+  virtual const ProvidedFileSystemInfo& GetFileSystemInfo() const OVERRIDE;
+  virtual RequestManager* GetRequestManager() OVERRIDE;
+
+  // Factory callback, to be used in Service::SetFileSystemFactory(). The
+  // |event_router| argument can be NULL.
+  static ProvidedFileSystemInterface* Create(
+      extensions::EventRouter* event_router,
+      const ProvidedFileSystemInfo& file_system_info);
+
+ private:
+  ProvidedFileSystemInfo file_system_info_;
+  DISALLOW_COPY_AND_ASSIGN(FakeProvidedFileSystem);
+};
+
+}  // namespace file_system_provider
+}  // namespace chromeos
+
+#endif  // CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_FAKE_PROVIDED_FILE_SYSTEM_H_
diff --git a/chrome/browser/chromeos/file_system_provider/fileapi/backend_delegate.cc b/chrome/browser/chromeos/file_system_provider/fileapi/backend_delegate.cc
new file mode 100644
index 0000000..bf3f8b4
--- /dev/null
+++ b/chrome/browser/chromeos/file_system_provider/fileapi/backend_delegate.cc
@@ -0,0 +1,54 @@
+// 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.
+
+#include "chrome/browser/chromeos/file_system_provider/fileapi/backend_delegate.h"
+
+#include "base/memory/scoped_ptr.h"
+#include "chrome/browser/chromeos/file_system_provider/fileapi/provider_async_file_util.h"
+#include "content/public/browser/browser_thread.h"
+#include "webkit/browser/blob/file_stream_reader.h"
+#include "webkit/browser/fileapi/file_stream_writer.h"
+#include "webkit/browser/fileapi/file_system_url.h"
+
+using content::BrowserThread;
+
+namespace chromeos {
+namespace file_system_provider {
+
+BackendDelegate::BackendDelegate()
+    : async_file_util_(new internal::ProviderAsyncFileUtil) {}
+
+BackendDelegate::~BackendDelegate() {}
+
+fileapi::AsyncFileUtil* BackendDelegate::GetAsyncFileUtil(
+    fileapi::FileSystemType type) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+  DCHECK_EQ(fileapi::kFileSystemTypeProvided, type);
+  return async_file_util_.get();
+}
+
+scoped_ptr<webkit_blob::FileStreamReader>
+BackendDelegate::CreateFileStreamReader(
+    const fileapi::FileSystemURL& url,
+    int64 offset,
+    const base::Time& expected_modification_time,
+    fileapi::FileSystemContext* context) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+  DCHECK_EQ(fileapi::kFileSystemTypeProvided, url.type());
+  NOTIMPLEMENTED();
+  return scoped_ptr<webkit_blob::FileStreamReader>();
+}
+
+scoped_ptr<fileapi::FileStreamWriter> BackendDelegate::CreateFileStreamWriter(
+    const fileapi::FileSystemURL& url,
+    int64 offset,
+    fileapi::FileSystemContext* context) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+  DCHECK_EQ(fileapi::kFileSystemTypeProvided, url.type());
+  NOTIMPLEMENTED();
+  return scoped_ptr<fileapi::FileStreamWriter>();
+}
+
+}  // namespace file_system_provider
+}  // namespace chromeos
diff --git a/chrome/browser/chromeos/file_system_provider/fileapi/backend_delegate.h b/chrome/browser/chromeos/file_system_provider/fileapi/backend_delegate.h
new file mode 100644
index 0000000..c479448
--- /dev/null
+++ b/chrome/browser/chromeos/file_system_provider/fileapi/backend_delegate.h
@@ -0,0 +1,48 @@
+// 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.
+
+#ifndef CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_FILEAPI_BACKEND_DELEGATE_H_
+#define CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_FILEAPI_BACKEND_DELEGATE_H_
+
+#include "base/basictypes.h"
+#include "base/memory/scoped_ptr.h"
+#include "chrome/browser/chromeos/fileapi/file_system_backend_delegate.h"
+
+namespace fileapi {
+class AsyncFileUtil;
+}  // namespace fileapi
+
+namespace chromeos {
+namespace file_system_provider {
+
+// Delegate implementation of the some methods in chromeos::FileSystemBackend
+// for provided file systems.
+class BackendDelegate : public chromeos::FileSystemBackendDelegate {
+ public:
+  BackendDelegate();
+  virtual ~BackendDelegate();
+
+  // FileSystemBackend::Delegate overrides.
+  virtual fileapi::AsyncFileUtil* GetAsyncFileUtil(fileapi::FileSystemType type)
+      OVERRIDE;
+  virtual scoped_ptr<webkit_blob::FileStreamReader> CreateFileStreamReader(
+      const fileapi::FileSystemURL& url,
+      int64 offset,
+      const base::Time& expected_modification_time,
+      fileapi::FileSystemContext* context) OVERRIDE;
+  virtual scoped_ptr<fileapi::FileStreamWriter> CreateFileStreamWriter(
+      const fileapi::FileSystemURL& url,
+      int64 offset,
+      fileapi::FileSystemContext* context) OVERRIDE;
+
+ private:
+  scoped_ptr<fileapi::AsyncFileUtil> async_file_util_;
+
+  DISALLOW_COPY_AND_ASSIGN(BackendDelegate);
+};
+
+}  // namespace file_system_provider
+}  // namespace chromeos
+
+#endif  // CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_FILEAPI_BACKEND_DELEGATE_H_
diff --git a/chrome/browser/chromeos/file_system_provider/fileapi/provider_async_file_util.cc b/chrome/browser/chromeos/file_system_provider/fileapi/provider_async_file_util.cc
new file mode 100644
index 0000000..b4a5cce
--- /dev/null
+++ b/chrome/browser/chromeos/file_system_provider/fileapi/provider_async_file_util.cc
@@ -0,0 +1,172 @@
+// 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.
+
+#include "chrome/browser/chromeos/file_system_provider/fileapi/provider_async_file_util.h"
+
+#include "base/callback.h"
+#include "base/files/file_path.h"
+#include "base/logging.h"
+#include "base/platform_file.h"
+#include "content/public/browser/browser_thread.h"
+#include "webkit/browser/fileapi/file_system_operation_context.h"
+#include "webkit/browser/fileapi/file_system_url.h"
+#include "webkit/common/blob/shareable_file_reference.h"
+
+using content::BrowserThread;
+
+namespace chromeos {
+namespace file_system_provider {
+namespace internal {
+
+ProviderAsyncFileUtil::ProviderAsyncFileUtil() {}
+
+ProviderAsyncFileUtil::~ProviderAsyncFileUtil() {}
+
+void ProviderAsyncFileUtil::CreateOrOpen(
+    scoped_ptr<fileapi::FileSystemOperationContext> context,
+    const fileapi::FileSystemURL& url,
+    int file_flags,
+    const CreateOrOpenCallback& callback) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+  base::PlatformFile platform_file = base::kInvalidPlatformFileValue;
+  if ((file_flags & base::PLATFORM_FILE_CREATE) ||
+      (file_flags & base::PLATFORM_FILE_OPEN_ALWAYS) ||
+      (file_flags & base::PLATFORM_FILE_CREATE_ALWAYS) ||
+      (file_flags & base::PLATFORM_FILE_OPEN_TRUNCATED)) {
+    callback.Run(base::File::FILE_ERROR_SECURITY,
+                 base::PassPlatformFile(&platform_file),
+                 base::Closure());
+    return;
+  }
+
+  NOTIMPLEMENTED();
+  callback.Run(base::File::FILE_ERROR_NOT_FOUND,
+               base::PassPlatformFile(&platform_file),
+               base::Closure());
+}
+
+void ProviderAsyncFileUtil::EnsureFileExists(
+    scoped_ptr<fileapi::FileSystemOperationContext> context,
+    const fileapi::FileSystemURL& url,
+    const EnsureFileExistsCallback& callback) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+  callback.Run(base::File::FILE_ERROR_SECURITY, false /* created */);
+}
+
+void ProviderAsyncFileUtil::CreateDirectory(
+    scoped_ptr<fileapi::FileSystemOperationContext> context,
+    const fileapi::FileSystemURL& url,
+    bool exclusive,
+    bool recursive,
+    const StatusCallback& callback) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+  callback.Run(base::File::FILE_ERROR_SECURITY);
+}
+
+void ProviderAsyncFileUtil::GetFileInfo(
+    scoped_ptr<fileapi::FileSystemOperationContext> context,
+    const fileapi::FileSystemURL& url,
+    const GetFileInfoCallback& callback) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+  NOTIMPLEMENTED();
+  callback.Run(base::File::FILE_ERROR_NOT_FOUND, base::File::Info());
+}
+
+void ProviderAsyncFileUtil::ReadDirectory(
+    scoped_ptr<fileapi::FileSystemOperationContext> context,
+    const fileapi::FileSystemURL& url,
+    const ReadDirectoryCallback& callback) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+  NOTIMPLEMENTED();
+  callback.Run(base::File::FILE_ERROR_NOT_FOUND, EntryList(), false);
+}
+
+void ProviderAsyncFileUtil::Touch(
+    scoped_ptr<fileapi::FileSystemOperationContext> context,
+    const fileapi::FileSystemURL& url,
+    const base::Time& last_access_time,
+    const base::Time& last_modified_time,
+    const StatusCallback& callback) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+  callback.Run(base::File::FILE_ERROR_SECURITY);
+}
+
+void ProviderAsyncFileUtil::Truncate(
+    scoped_ptr<fileapi::FileSystemOperationContext> context,
+    const fileapi::FileSystemURL& url,
+    int64 length,
+    const StatusCallback& callback) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+  callback.Run(base::File::FILE_ERROR_SECURITY);
+}
+
+void ProviderAsyncFileUtil::CopyFileLocal(
+    scoped_ptr<fileapi::FileSystemOperationContext> context,
+    const fileapi::FileSystemURL& src_url,
+    const fileapi::FileSystemURL& dest_url,
+    CopyOrMoveOption option,
+    const CopyFileProgressCallback& progress_callback,
+    const StatusCallback& callback) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+  callback.Run(base::File::FILE_ERROR_SECURITY);
+}
+
+void ProviderAsyncFileUtil::MoveFileLocal(
+    scoped_ptr<fileapi::FileSystemOperationContext> context,
+    const fileapi::FileSystemURL& src_url,
+    const fileapi::FileSystemURL& dest_url,
+    CopyOrMoveOption option,
+    const StatusCallback& callback) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+  callback.Run(base::File::FILE_ERROR_SECURITY);
+}
+
+void ProviderAsyncFileUtil::CopyInForeignFile(
+    scoped_ptr<fileapi::FileSystemOperationContext> context,
+    const base::FilePath& src_file_path,
+    const fileapi::FileSystemURL& dest_url,
+    const StatusCallback& callback) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+  callback.Run(base::File::FILE_ERROR_SECURITY);
+}
+
+void ProviderAsyncFileUtil::DeleteFile(
+    scoped_ptr<fileapi::FileSystemOperationContext> context,
+    const fileapi::FileSystemURL& url,
+    const StatusCallback& callback) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+  callback.Run(base::File::FILE_ERROR_SECURITY);
+}
+
+void ProviderAsyncFileUtil::DeleteDirectory(
+    scoped_ptr<fileapi::FileSystemOperationContext> context,
+    const fileapi::FileSystemURL& url,
+    const StatusCallback& callback) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+  callback.Run(base::File::FILE_ERROR_SECURITY);
+}
+
+void ProviderAsyncFileUtil::DeleteRecursively(
+    scoped_ptr<fileapi::FileSystemOperationContext> context,
+    const fileapi::FileSystemURL& url,
+    const StatusCallback& callback) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+  callback.Run(base::File::FILE_ERROR_SECURITY);
+}
+
+void ProviderAsyncFileUtil::CreateSnapshotFile(
+    scoped_ptr<fileapi::FileSystemOperationContext> context,
+    const fileapi::FileSystemURL& url,
+    const CreateSnapshotFileCallback& callback) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+  NOTIMPLEMENTED();
+  callback.Run(base::File::FILE_ERROR_NOT_FOUND,
+               base::File::Info(),
+               base::FilePath(),
+               scoped_refptr<webkit_blob::ShareableFileReference>());
+}
+
+}  // namespace internal
+}  // namespace file_system_provider
+}  // namespace chromeos
diff --git a/chrome/browser/chromeos/file_system_provider/fileapi/provider_async_file_util.h b/chrome/browser/chromeos/file_system_provider/fileapi/provider_async_file_util.h
new file mode 100644
index 0000000..a60df56
--- /dev/null
+++ b/chrome/browser/chromeos/file_system_provider/fileapi/provider_async_file_util.h
@@ -0,0 +1,110 @@
+// 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.
+
+#ifndef CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_FILEAPI_PROVIDER_ASYNC_FILE_UTIL_H_
+#define CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_FILEAPI_PROVIDER_ASYNC_FILE_UTIL_H_
+
+#include "base/basictypes.h"
+#include "base/callback.h"
+#include "webkit/browser/fileapi/async_file_util.h"
+
+namespace chromeos {
+namespace file_system_provider {
+
+class FileSystemInterface;
+
+namespace internal {
+
+// The implementation of fileapi::AsyncFileUtil for provided file systems. It is
+// created one per Chrome process. It is responsible for routing calls to the
+// correct profile, and then to the correct profided file system.
+//
+// This class should be called AsyncFileUtil, without the Provided prefix. This
+// is impossible, though because of GYP limitations. There must not be two files
+// with the same name in a Chromium tree.
+// See: https://code.google.com/p/gyp/issues/detail?id=384
+//
+// All of the methods should be called on the IO thread.
+class ProviderAsyncFileUtil : public fileapi::AsyncFileUtil {
+ public:
+  ProviderAsyncFileUtil();
+  virtual ~ProviderAsyncFileUtil();
+
+  // fileapi::AsyncFileUtil overrides.
+  virtual void CreateOrOpen(
+      scoped_ptr<fileapi::FileSystemOperationContext> context,
+      const fileapi::FileSystemURL& url,
+      int file_flags,
+      const CreateOrOpenCallback& callback) OVERRIDE;
+  virtual void EnsureFileExists(
+      scoped_ptr<fileapi::FileSystemOperationContext> context,
+      const fileapi::FileSystemURL& url,
+      const EnsureFileExistsCallback& callback) OVERRIDE;
+  virtual void CreateDirectory(
+      scoped_ptr<fileapi::FileSystemOperationContext> context,
+      const fileapi::FileSystemURL& url,
+      bool exclusive,
+      bool recursive,
+      const StatusCallback& callback) OVERRIDE;
+  virtual void GetFileInfo(
+      scoped_ptr<fileapi::FileSystemOperationContext> context,
+      const fileapi::FileSystemURL& url,
+      const GetFileInfoCallback& callback) OVERRIDE;
+  virtual void ReadDirectory(
+      scoped_ptr<fileapi::FileSystemOperationContext> context,
+      const fileapi::FileSystemURL& url,
+      const ReadDirectoryCallback& callback) OVERRIDE;
+  virtual void Touch(scoped_ptr<fileapi::FileSystemOperationContext> context,
+                     const fileapi::FileSystemURL& url,
+                     const base::Time& last_access_time,
+                     const base::Time& last_modified_time,
+                     const StatusCallback& callback) OVERRIDE;
+  virtual void Truncate(scoped_ptr<fileapi::FileSystemOperationContext> context,
+                        const fileapi::FileSystemURL& url,
+                        int64 length,
+                        const StatusCallback& callback) OVERRIDE;
+  virtual void CopyFileLocal(
+      scoped_ptr<fileapi::FileSystemOperationContext> context,
+      const fileapi::FileSystemURL& src_url,
+      const fileapi::FileSystemURL& dest_url,
+      CopyOrMoveOption option,
+      const CopyFileProgressCallback& progress_callback,
+      const StatusCallback& callback) OVERRIDE;
+  virtual void MoveFileLocal(
+      scoped_ptr<fileapi::FileSystemOperationContext> context,
+      const fileapi::FileSystemURL& src_url,
+      const fileapi::FileSystemURL& dest_url,
+      CopyOrMoveOption option,
+      const StatusCallback& callback) OVERRIDE;
+  virtual void CopyInForeignFile(
+      scoped_ptr<fileapi::FileSystemOperationContext> context,
+      const base::FilePath& src_file_path,
+      const fileapi::FileSystemURL& dest_url,
+      const StatusCallback& callback) OVERRIDE;
+  virtual void DeleteFile(
+      scoped_ptr<fileapi::FileSystemOperationContext> context,
+      const fileapi::FileSystemURL& url,
+      const StatusCallback& callback) OVERRIDE;
+  virtual void DeleteDirectory(
+      scoped_ptr<fileapi::FileSystemOperationContext> context,
+      const fileapi::FileSystemURL& url,
+      const StatusCallback& callback) OVERRIDE;
+  virtual void DeleteRecursively(
+      scoped_ptr<fileapi::FileSystemOperationContext> context,
+      const fileapi::FileSystemURL& url,
+      const StatusCallback& callback) OVERRIDE;
+  virtual void CreateSnapshotFile(
+      scoped_ptr<fileapi::FileSystemOperationContext> context,
+      const fileapi::FileSystemURL& url,
+      const CreateSnapshotFileCallback& callback) OVERRIDE;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(ProviderAsyncFileUtil);
+};
+
+}  // namespace internal
+}  // namespace file_system_provider
+}  // namespace chromeos
+
+#endif  // CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_FILEAPI_PROVIDER_ASYNC_FILE_UTIL_H_
diff --git a/chrome/browser/chromeos/file_system_provider/fileapi/provider_async_file_util_unittest.cc b/chrome/browser/chromeos/file_system_provider/fileapi/provider_async_file_util_unittest.cc
new file mode 100644
index 0000000..8b18bb8
--- /dev/null
+++ b/chrome/browser/chromeos/file_system_provider/fileapi/provider_async_file_util_unittest.cc
@@ -0,0 +1,423 @@
+// 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.
+
+#include <string>
+#include <vector>
+
+#include "base/files/file.h"
+#include "base/files/file_path.h"
+#include "base/files/scoped_temp_dir.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/memory/weak_ptr.h"
+#include "base/platform_file.h"
+#include "chrome/browser/chromeos/file_system_provider/fileapi/provider_async_file_util.h"
+#include "chrome/browser/chromeos/file_system_provider/mount_path_util.h"
+#include "chrome/test/base/testing_profile.h"
+#include "content/public/test/test_browser_thread_bundle.h"
+#include "content/public/test/test_file_system_context.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "webkit/browser/fileapi/async_file_util.h"
+#include "webkit/browser/fileapi/external_mount_points.h"
+#include "webkit/browser/fileapi/file_system_context.h"
+#include "webkit/browser/fileapi/file_system_url.h"
+#include "webkit/common/blob/shareable_file_reference.h"
+
+namespace chromeos {
+namespace file_system_provider {
+namespace {
+
+const char kExtensionId[] = "mbflcebpggnecokmikipoihdbecnjfoj";
+const int kFileSystemId = 1;
+
+// Logs callbacks invocations on the tested operations.
+// TODO(mtomasz): Store and verify more arguments, once the operations return
+// anything else than just an error.
+class EventLogger {
+ public:
+  EventLogger() : weak_ptr_factory_(this) {}
+  virtual ~EventLogger() {}
+
+  void OnStatus(base::File::Error error) {
+    error_.reset(new base::File::Error(error));
+  }
+
+  void OnCreateOrOpen(base::File::Error error,
+                      base::PassPlatformFile platform_file,
+                      const base::Closure& on_close_callback) {
+    error_.reset(new base::File::Error(error));
+  }
+
+  void OnEnsureFileExists(base::File::Error error, bool created) {
+    error_.reset(new base::File::Error(error));
+  }
+
+  void OnGetFileInfo(base::File::Error error,
+                     const base::File::Info& file_info) {
+    error_.reset(new base::File::Error(error));
+  }
+
+  void OnReadDirectory(base::File::Error error,
+                       const fileapi::AsyncFileUtil::EntryList& file_list,
+                       bool has_more) {
+    error_.reset(new base::File::Error(error));
+  }
+
+  void OnCreateSnapshotFile(
+      base::File::Error error,
+      const base::File::Info& file_info,
+      const base::FilePath& platform_path,
+      const scoped_refptr<webkit_blob::ShareableFileReference>& file_ref) {
+    error_.reset(new base::File::Error(error));
+  }
+
+  void OnCopyFileProgress(int64 size) {}
+
+  base::WeakPtr<EventLogger> GetWeakPtr() {
+    return weak_ptr_factory_.GetWeakPtr();
+  }
+
+  base::File::Error* error() { return error_.get(); }
+
+ private:
+  scoped_ptr<base::File::Error> error_;
+  base::WeakPtrFactory<EventLogger> weak_ptr_factory_;
+
+  DISALLOW_COPY_AND_ASSIGN(EventLogger);
+};
+
+// Registers an external mount point, and removes it once the object gets out
+// of scope. To ensure that creating the mount point succeeded, call is_valid().
+class ScopedExternalMountPoint {
+ public:
+  ScopedExternalMountPoint(const std::string& mount_point_name,
+                           const base::FilePath& mount_path,
+                           fileapi::FileSystemType type)
+      : mount_point_name_(mount_point_name) {
+    fileapi::ExternalMountPoints* const mount_points =
+        fileapi::ExternalMountPoints::GetSystemInstance();
+    DCHECK(mount_points);
+    is_valid_ =
+        mount_points->RegisterFileSystem(mount_point_name,
+                                         fileapi::kFileSystemTypeProvided,
+                                         fileapi::FileSystemMountOption(),
+                                         mount_path);
+  }
+
+  virtual ~ScopedExternalMountPoint() {
+    if (!is_valid_)
+      return;
+
+    // If successfully registered in the constructor, then unregister.
+    fileapi::ExternalMountPoints* const mount_points =
+        fileapi::ExternalMountPoints::GetSystemInstance();
+    DCHECK(mount_points);
+    mount_points->RevokeFileSystem(mount_point_name_);
+  }
+
+  bool is_valid() { return is_valid_; }
+
+ private:
+  const std::string mount_point_name_;
+  bool is_valid_;
+};
+
+// Creates a cracked FileSystemURL for tests.
+fileapi::FileSystemURL CreateFileSystemURL(const std::string& mount_point_name,
+                                           const base::FilePath& file_path) {
+  const std::string origin = std::string("chrome-extension://") + kExtensionId;
+  const fileapi::ExternalMountPoints* const mount_points =
+      fileapi::ExternalMountPoints::GetSystemInstance();
+  return mount_points->CreateCrackedFileSystemURL(
+      GURL(origin),
+      fileapi::kFileSystemTypeExternal,
+      base::FilePath::FromUTF8Unsafe(mount_point_name).Append(file_path));
+}
+
+}  // namespace
+
+// Tests in this file are very lightweight and just test integration between
+// AsyncFileUtil and ProvideFileSystemInterface. Currently it tests if not
+// implemented operations return a correct error code. For not allowed
+// operations it is FILE_ERROR_SECURITY, and for not implemented the error is
+// FILE_ERROR_NOT_FOUND.
+class FileSystemProviderProviderAsyncFileUtilTest : public testing::Test {
+ protected:
+  FileSystemProviderProviderAsyncFileUtilTest() {}
+  virtual ~FileSystemProviderProviderAsyncFileUtilTest() {}
+
+  virtual void SetUp() OVERRIDE {
+    ASSERT_TRUE(data_dir_.CreateUniqueTempDir());
+    profile_.reset(new TestingProfile);
+    async_file_util_.reset(new internal::ProviderAsyncFileUtil);
+    const base::FilePath mount_path =
+        util::GetMountPath(profile_.get(), kExtensionId, kFileSystemId);
+    file_system_context_ =
+        content::CreateFileSystemContextForTesting(NULL, data_dir_.path());
+
+    const std::string mount_point_name = mount_path.BaseName().AsUTF8Unsafe();
+    mount_point_.reset(new ScopedExternalMountPoint(
+        mount_point_name, mount_path, fileapi::kFileSystemTypeProvided));
+    ASSERT_TRUE(mount_point_->is_valid());
+
+    file_url_ = CreateFileSystemURL(
+        mount_point_name, base::FilePath::FromUTF8Unsafe("hello/world.txt"));
+    ASSERT_TRUE(file_url_.is_valid());
+    directory_url_ = CreateFileSystemURL(
+        mount_point_name, base::FilePath::FromUTF8Unsafe("hello"));
+    ASSERT_TRUE(directory_url_.is_valid());
+    root_url_ = CreateFileSystemURL(mount_point_name, base::FilePath());
+    ASSERT_TRUE(root_url_.is_valid());
+  }
+
+  scoped_ptr<fileapi::FileSystemOperationContext> CreateOperationContext() {
+    return make_scoped_ptr(
+        new fileapi::FileSystemOperationContext(file_system_context_.get()));
+  }
+
+  content::TestBrowserThreadBundle thread_bundle_;
+  base::ScopedTempDir data_dir_;
+  scoped_ptr<TestingProfile> profile_;
+  scoped_ptr<fileapi::AsyncFileUtil> async_file_util_;
+  scoped_refptr<fileapi::FileSystemContext> file_system_context_;
+  scoped_ptr<ScopedExternalMountPoint> mount_point_;
+  fileapi::FileSystemURL file_url_;
+  fileapi::FileSystemURL directory_url_;
+  fileapi::FileSystemURL root_url_;
+};
+
+TEST_F(FileSystemProviderProviderAsyncFileUtilTest, CreateOrOpen_Create) {
+  EventLogger logger;
+
+  async_file_util_->CreateOrOpen(
+      CreateOperationContext(),
+      file_url_,
+      base::PLATFORM_FILE_CREATE,
+      base::Bind(&EventLogger::OnCreateOrOpen, logger.GetWeakPtr()));
+
+  ASSERT_TRUE(logger.error());
+  EXPECT_EQ(base::File::FILE_ERROR_SECURITY, *logger.error());
+}
+
+TEST_F(FileSystemProviderProviderAsyncFileUtilTest, CreateOrOpen_CreateAlways) {
+  EventLogger logger;
+
+  async_file_util_->CreateOrOpen(
+      CreateOperationContext(),
+      file_url_,
+      base::PLATFORM_FILE_CREATE_ALWAYS,
+      base::Bind(&EventLogger::OnCreateOrOpen, logger.GetWeakPtr()));
+
+  ASSERT_TRUE(logger.error());
+  EXPECT_EQ(base::File::FILE_ERROR_SECURITY, *logger.error());
+}
+
+TEST_F(FileSystemProviderProviderAsyncFileUtilTest, CreateOrOpen_OpenAlways) {
+  EventLogger logger;
+
+  async_file_util_->CreateOrOpen(
+      CreateOperationContext(),
+      file_url_,
+      base::PLATFORM_FILE_OPEN_ALWAYS,
+      base::Bind(&EventLogger::OnCreateOrOpen, logger.GetWeakPtr()));
+
+  ASSERT_TRUE(logger.error());
+  EXPECT_EQ(base::File::FILE_ERROR_SECURITY, *logger.error());
+}
+
+TEST_F(FileSystemProviderProviderAsyncFileUtilTest,
+       CreateOrOpen_OpenTruncated) {
+  EventLogger logger;
+
+  async_file_util_->CreateOrOpen(
+      CreateOperationContext(),
+      file_url_,
+      base::PLATFORM_FILE_OPEN_TRUNCATED,
+      base::Bind(&EventLogger::OnCreateOrOpen, logger.GetWeakPtr()));
+
+  ASSERT_TRUE(logger.error());
+  EXPECT_EQ(base::File::FILE_ERROR_SECURITY, *logger.error());
+}
+
+TEST_F(FileSystemProviderProviderAsyncFileUtilTest, CreateOrOpen_Open) {
+  EventLogger logger;
+
+  async_file_util_->CreateOrOpen(
+      CreateOperationContext(),
+      file_url_,
+      base::PLATFORM_FILE_OPEN,
+      base::Bind(&EventLogger::OnCreateOrOpen, logger.GetWeakPtr()));
+
+  ASSERT_TRUE(logger.error());
+  EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, *logger.error());
+}
+
+TEST_F(FileSystemProviderProviderAsyncFileUtilTest, EnsureFileExists) {
+  EventLogger logger;
+
+  async_file_util_->EnsureFileExists(
+      CreateOperationContext(),
+      file_url_,
+      base::Bind(&EventLogger::OnEnsureFileExists, logger.GetWeakPtr()));
+
+  ASSERT_TRUE(logger.error());
+  EXPECT_EQ(base::File::FILE_ERROR_SECURITY, *logger.error());
+}
+
+TEST_F(FileSystemProviderProviderAsyncFileUtilTest, CreateDirectory) {
+  EventLogger logger;
+
+  async_file_util_->CreateDirectory(
+      CreateOperationContext(),
+      directory_url_,
+      false,  // exclusive
+      false,  // recursive
+      base::Bind(&EventLogger::OnStatus, logger.GetWeakPtr()));
+
+  ASSERT_TRUE(logger.error());
+  EXPECT_EQ(base::File::FILE_ERROR_SECURITY, *logger.error());
+}
+
+TEST_F(FileSystemProviderProviderAsyncFileUtilTest, GetFileInfo) {
+  EventLogger logger;
+
+  async_file_util_->GetFileInfo(
+      CreateOperationContext(),
+      file_url_,
+      base::Bind(&EventLogger::OnGetFileInfo, logger.GetWeakPtr()));
+
+  ASSERT_TRUE(logger.error());
+  EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, *logger.error());
+}
+
+TEST_F(FileSystemProviderProviderAsyncFileUtilTest, ReadDirectory) {
+  EventLogger logger;
+
+  async_file_util_->ReadDirectory(
+      CreateOperationContext(),
+      root_url_,
+      base::Bind(&EventLogger::OnReadDirectory, logger.GetWeakPtr()));
+
+  ASSERT_TRUE(logger.error());
+  EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, *logger.error());
+}
+
+TEST_F(FileSystemProviderProviderAsyncFileUtilTest, Touch) {
+  EventLogger logger;
+
+  async_file_util_->CreateDirectory(
+      CreateOperationContext(),
+      file_url_,
+      false,  // exclusive
+      false,  // recursive
+      base::Bind(&EventLogger::OnStatus, logger.GetWeakPtr()));
+
+  ASSERT_TRUE(logger.error());
+  EXPECT_EQ(base::File::FILE_ERROR_SECURITY, *logger.error());
+}
+
+TEST_F(FileSystemProviderProviderAsyncFileUtilTest, Truncate) {
+  EventLogger logger;
+
+  async_file_util_->Truncate(
+      CreateOperationContext(),
+      file_url_,
+      0,  // length
+      base::Bind(&EventLogger::OnStatus, logger.GetWeakPtr()));
+
+  ASSERT_TRUE(logger.error());
+  EXPECT_EQ(base::File::FILE_ERROR_SECURITY, *logger.error());
+}
+
+TEST_F(FileSystemProviderProviderAsyncFileUtilTest, CopyFileLocal) {
+  EventLogger logger;
+
+  async_file_util_->CopyFileLocal(
+      CreateOperationContext(),
+      file_url_,  // src_url
+      file_url_,  // dst_url
+      fileapi::FileSystemOperation::OPTION_NONE,
+      base::Bind(&EventLogger::OnCopyFileProgress, logger.GetWeakPtr()),
+      base::Bind(&EventLogger::OnStatus, logger.GetWeakPtr()));
+
+  ASSERT_TRUE(logger.error());
+  EXPECT_EQ(base::File::FILE_ERROR_SECURITY, *logger.error());
+}
+
+TEST_F(FileSystemProviderProviderAsyncFileUtilTest, MoveFileLocal) {
+  EventLogger logger;
+
+  async_file_util_->MoveFileLocal(
+      CreateOperationContext(),
+      file_url_,  // src_url
+      file_url_,  // dst_url
+      fileapi::FileSystemOperation::OPTION_NONE,
+      base::Bind(&EventLogger::OnStatus, logger.GetWeakPtr()));
+
+  ASSERT_TRUE(logger.error());
+  EXPECT_EQ(base::File::FILE_ERROR_SECURITY, *logger.error());
+}
+
+TEST_F(FileSystemProviderProviderAsyncFileUtilTest, CopyInForeignFile) {
+  EventLogger logger;
+
+  async_file_util_->CopyInForeignFile(
+      CreateOperationContext(),
+      base::FilePath(),  // src_file_path
+      file_url_,         // dst_url
+      base::Bind(&EventLogger::OnStatus, logger.GetWeakPtr()));
+
+  ASSERT_TRUE(logger.error());
+  EXPECT_EQ(base::File::FILE_ERROR_SECURITY, *logger.error());
+}
+
+TEST_F(FileSystemProviderProviderAsyncFileUtilTest, DeleteFile) {
+  EventLogger logger;
+
+  async_file_util_->DeleteFile(
+      CreateOperationContext(),
+      file_url_,
+      base::Bind(&EventLogger::OnStatus, logger.GetWeakPtr()));
+
+  ASSERT_TRUE(logger.error());
+  EXPECT_EQ(base::File::FILE_ERROR_SECURITY, *logger.error());
+}
+
+TEST_F(FileSystemProviderProviderAsyncFileUtilTest, DeleteDirectory) {
+  EventLogger logger;
+
+  async_file_util_->DeleteDirectory(
+      CreateOperationContext(),
+      directory_url_,
+      base::Bind(&EventLogger::OnStatus, logger.GetWeakPtr()));
+
+  ASSERT_TRUE(logger.error());
+  EXPECT_EQ(base::File::FILE_ERROR_SECURITY, *logger.error());
+}
+
+TEST_F(FileSystemProviderProviderAsyncFileUtilTest, DeleteRecursively) {
+  EventLogger logger;
+
+  async_file_util_->DeleteRecursively(
+      CreateOperationContext(),
+      directory_url_,
+      base::Bind(&EventLogger::OnStatus, logger.GetWeakPtr()));
+
+  ASSERT_TRUE(logger.error());
+  EXPECT_EQ(base::File::FILE_ERROR_SECURITY, *logger.error());
+}
+
+TEST_F(FileSystemProviderProviderAsyncFileUtilTest, CreateSnapshotFile) {
+  EventLogger logger;
+
+  async_file_util_->CreateSnapshotFile(
+      CreateOperationContext(),
+      file_url_,
+      base::Bind(&EventLogger::OnCreateSnapshotFile, logger.GetWeakPtr()));
+
+  ASSERT_TRUE(logger.error());
+  EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, *logger.error());
+}
+
+}  // namespace file_system_provider
+}  // namespace chromeos
diff --git a/chrome/browser/chromeos/file_system_provider/mount_path_util.cc b/chrome/browser/chromeos/file_system_provider/mount_path_util.cc
new file mode 100644
index 0000000..ed7016d
--- /dev/null
+++ b/chrome/browser/chromeos/file_system_provider/mount_path_util.cc
@@ -0,0 +1,98 @@
+// 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.
+
+#include "chrome/browser/chromeos/file_system_provider/mount_path_util.h"
+
+#include <vector>
+
+#include "base/stl_util.h"
+#include "base/strings/string_number_conversions.h"
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/chromeos/file_system_provider/provided_file_system.h"
+#include "chrome/browser/chromeos/file_system_provider/service.h"
+#include "chrome/browser/chromeos/login/user.h"
+#include "chrome/browser/chromeos/login/user_manager.h"
+#include "chrome/browser/chromeos/profiles/profile_helper.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/profiles/profile_manager.h"
+
+namespace chromeos {
+namespace file_system_provider {
+namespace util {
+
+namespace {
+
+// Root mount path for all of the provided file systems.
+const base::FilePath::CharType kProvidedMountPointRoot[] =
+    FILE_PATH_LITERAL("/provided");
+
+}  // namespace
+
+base::FilePath GetMountPath(Profile* profile,
+                            std::string extension_id,
+                            int file_system_id) {
+  chromeos::User* const user =
+      chromeos::UserManager::IsInitialized()
+          ? chromeos::UserManager::Get()->GetUserByProfile(
+                profile->GetOriginalProfile())
+          : NULL;
+  const std::string user_suffix = user ? "-" + user->username_hash() : "";
+  return base::FilePath(kProvidedMountPointRoot).AppendASCII(
+      extension_id + "-" + base::IntToString(file_system_id) + user_suffix);
+}
+
+FileSystemURLParser::FileSystemURLParser(const fileapi::FileSystemURL& url)
+    : url_(url), file_system_(NULL) {
+}
+
+FileSystemURLParser::~FileSystemURLParser() {
+}
+
+bool FileSystemURLParser::Parse() {
+  if (url_.type() != fileapi::kFileSystemTypeProvided)
+    return false;
+
+  // First, find the service handling the mount point of the URL.
+  const std::vector<Profile*>& profiles =
+      g_browser_process->profile_manager()->GetLoadedProfiles();
+
+  for (size_t i = 0; i < profiles.size(); ++i) {
+    Profile* original_profile = profiles[i]->GetOriginalProfile();
+
+    if (original_profile != profiles[i] ||
+        chromeos::ProfileHelper::IsSigninProfile(original_profile)) {
+      continue;
+    }
+
+    Service* service = Service::Get(original_profile);
+    if (!service)
+      continue;
+
+    ProvidedFileSystemInterface* file_system =
+        service->GetProvidedFileSystem(url_.filesystem_id());
+    if (!file_system)
+      continue;
+
+    // Strip the mount point name from the virtual path, to extract the file
+    // path within the provided file system.
+    file_system_ = file_system;
+    std::vector<base::FilePath::StringType> components;
+    url_.virtual_path().GetComponents(&components);
+    DCHECK_LT(0u, components.size());
+    file_path_ = base::FilePath();
+    for (size_t i = 1; i < components.size(); ++i) {
+      // TODO(mtomasz): This could be optimized, to avoid unnecessary copies.
+      file_path_ = file_path_.Append(components[i]);
+    }
+
+    return true;
+  }
+
+  // Nothing has been found.
+  return false;
+}
+
+}  // namespace util
+}  // namespace file_system_provider
+}  // namespace chromeos
diff --git a/chrome/browser/chromeos/file_system_provider/mount_path_util.h b/chrome/browser/chromeos/file_system_provider/mount_path_util.h
new file mode 100644
index 0000000..25f6129
--- /dev/null
+++ b/chrome/browser/chromeos/file_system_provider/mount_path_util.h
@@ -0,0 +1,55 @@
+// 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.
+
+#ifndef CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_MOUNT_PATH_UTIL_H_
+#define CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_MOUNT_PATH_UTIL_H_
+
+#include <string>
+
+#include "base/files/file_path.h"
+#include "webkit/browser/fileapi/file_system_url.h"
+
+class Profile;
+
+namespace chromeos {
+namespace file_system_provider {
+
+class ProvidedFileSystemInterface;
+
+namespace util {
+
+// Constructs a safe mount point path for the provided file system.
+base::FilePath GetMountPath(Profile* profile,
+                            std::string extension_id,
+                            int file_system_id);
+
+// Finds file system, which is responsible for handling the specified |url| by
+// analysing the mount path.
+// Also, extract the file path from the virtual path to be used by the file
+// system operations.
+class FileSystemURLParser {
+ public:
+  explicit FileSystemURLParser(const fileapi::FileSystemURL& url);
+  virtual ~FileSystemURLParser();
+
+  // Parses the |url| passed to the constructor. If parsing succeeds, then
+  // returns true. Otherwise, false.
+  bool Parse();
+
+  ProvidedFileSystemInterface* file_system() const { return file_system_; }
+  const base::FilePath& file_path() const { return file_path_; }
+
+ private:
+  fileapi::FileSystemURL url_;
+  ProvidedFileSystemInterface* file_system_;
+  base::FilePath file_path_;
+
+  DISALLOW_COPY_AND_ASSIGN(FileSystemURLParser);
+};
+
+}  // namespace util
+}  // namespace file_system_provider
+}  // namespace chromeos
+
+#endif  // CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_MOUNT_PATH_UTIL_H_
diff --git a/chrome/browser/chromeos/file_system_provider/mount_path_util_unittest.cc b/chrome/browser/chromeos/file_system_provider/mount_path_util_unittest.cc
new file mode 100644
index 0000000..f4f843b
--- /dev/null
+++ b/chrome/browser/chromeos/file_system_provider/mount_path_util_unittest.cc
@@ -0,0 +1,159 @@
+// 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.
+
+#include <string>
+
+#include "base/files/file.h"
+#include "base/memory/scoped_ptr.h"
+#include "chrome/browser/chromeos/file_system_provider/fake_provided_file_system.h"
+#include "chrome/browser/chromeos/file_system_provider/mount_path_util.h"
+#include "chrome/browser/chromeos/file_system_provider/provided_file_system_interface.h"
+#include "chrome/browser/chromeos/file_system_provider/service.h"
+#include "chrome/browser/chromeos/file_system_provider/service_factory.h"
+#include "chrome/browser/chromeos/login/fake_user_manager.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/test/base/testing_browser_process.h"
+#include "chrome/test/base/testing_profile.h"
+#include "chrome/test/base/testing_profile_manager.h"
+#include "components/keyed_service/core/keyed_service.h"
+#include "content/public/browser/browser_context.h"
+#include "content/public/test/test_browser_thread_bundle.h"
+#include "extensions/browser/extension_registry.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "webkit/browser/fileapi/external_mount_points.h"
+
+namespace chromeos {
+namespace file_system_provider {
+namespace util {
+
+namespace {
+
+const char kExtensionId[] = "mbflcebpggnecokmikipoihdbecnjfoj";
+const char kFileSystemName[] = "Camera Pictures";
+
+// Creates a FileSystemURL for tests.
+fileapi::FileSystemURL CreateFileSystemURL(Profile* profile,
+                                           const std::string& extension_id,
+                                           int file_system_id,
+                                           const base::FilePath& file_path) {
+  const std::string origin = std::string("chrome-extension://") + kExtensionId;
+  const base::FilePath mount_path =
+      util::GetMountPath(profile, extension_id, file_system_id);
+  const fileapi::ExternalMountPoints* const mount_points =
+      fileapi::ExternalMountPoints::GetSystemInstance();
+  DCHECK(mount_points);
+  return mount_points->CreateCrackedFileSystemURL(
+      GURL(origin),
+      fileapi::kFileSystemTypeExternal,
+      base::FilePath(mount_path.BaseName().Append(file_path)));
+}
+
+// Creates a Service instance. Used to be able to destroy the service in
+// TearDown().
+KeyedService* CreateService(content::BrowserContext* context) {
+  return new Service(Profile::FromBrowserContext(context),
+                     extensions::ExtensionRegistry::Get(context));
+}
+
+}  // namespace
+
+class FileSystemProviderMountPathUtilTest : public testing::Test {
+ protected:
+  FileSystemProviderMountPathUtilTest() {}
+  virtual ~FileSystemProviderMountPathUtilTest() {}
+
+  virtual void SetUp() OVERRIDE {
+    profile_manager_.reset(
+        new TestingProfileManager(TestingBrowserProcess::GetGlobal()));
+    ASSERT_TRUE(profile_manager_->SetUp());
+    profile_ = profile_manager_->CreateTestingProfile("testing-profile");
+    user_manager_ = new FakeUserManager();
+    user_manager_enabler_.reset(new ScopedUserManagerEnabler(user_manager_));
+    user_manager_->AddUser(profile_->GetProfileName());
+    ServiceFactory::GetInstance()->SetTestingFactory(profile_, &CreateService);
+    file_system_provider_service_ = Service::Get(profile_);
+    file_system_provider_service_->SetFileSystemFactoryForTests(
+        base::Bind(&FakeProvidedFileSystem::Create));
+  }
+
+  virtual void TearDown() OVERRIDE {
+    // Setting the testing factory to NULL will destroy the created service
+    // associated with the testing profile.
+    ServiceFactory::GetInstance()->SetTestingFactory(profile_, NULL);
+  }
+
+  content::TestBrowserThreadBundle thread_bundle_;
+  scoped_ptr<TestingProfileManager> profile_manager_;
+  TestingProfile* profile_;  // Owned by TestingProfileManager.
+  scoped_ptr<ScopedUserManagerEnabler> user_manager_enabler_;
+  FakeUserManager* user_manager_;
+  Service* file_system_provider_service_;  // Owned by its factory.
+};
+
+TEST_F(FileSystemProviderMountPathUtilTest, GetMountPath) {
+  const std::string kExtensionId = "mbflcebpggnecokmikipoihdbecnjfoj";
+  const int kFileSystemId = 1;
+
+  base::FilePath result = GetMountPath(profile_, kExtensionId, kFileSystemId);
+  EXPECT_EQ("/provided/mbflcebpggnecokmikipoihdbecnjfoj-1-testing-profile-hash",
+            result.AsUTF8Unsafe());
+}
+
+TEST_F(FileSystemProviderMountPathUtilTest, Parser) {
+  const int file_system_id = file_system_provider_service_->MountFileSystem(
+      kExtensionId, kFileSystemName);
+  EXPECT_LT(0, file_system_id);
+
+  const base::FilePath kFilePath = base::FilePath("hello/world.txt");
+  const fileapi::FileSystemURL url =
+      CreateFileSystemURL(profile_, kExtensionId, file_system_id, kFilePath);
+  EXPECT_TRUE(url.is_valid());
+
+  FileSystemURLParser parser(url);
+  EXPECT_TRUE(parser.Parse());
+
+  ProvidedFileSystemInterface* file_system = parser.file_system();
+  ASSERT_TRUE(file_system);
+  EXPECT_EQ(file_system_id, file_system->GetFileSystemInfo().file_system_id());
+  EXPECT_EQ(kFilePath.AsUTF8Unsafe(), parser.file_path().AsUTF8Unsafe());
+}
+
+TEST_F(FileSystemProviderMountPathUtilTest, Parser_RootPath) {
+  const int file_system_id = file_system_provider_service_->MountFileSystem(
+      kExtensionId, kFileSystemName);
+  EXPECT_LT(0, file_system_id);
+
+  const base::FilePath kFilePath = base::FilePath();
+  const fileapi::FileSystemURL url =
+      CreateFileSystemURL(profile_, kExtensionId, file_system_id, kFilePath);
+  EXPECT_TRUE(url.is_valid());
+
+  FileSystemURLParser parser(url);
+  EXPECT_TRUE(parser.Parse());
+
+  ProvidedFileSystemInterface* file_system = parser.file_system();
+  ASSERT_TRUE(file_system);
+  EXPECT_EQ(file_system_id, file_system->GetFileSystemInfo().file_system_id());
+  EXPECT_EQ(kFilePath.AsUTF8Unsafe(), parser.file_path().AsUTF8Unsafe());
+}
+
+TEST_F(FileSystemProviderMountPathUtilTest, Parser_WrongUrl) {
+  const int file_system_id = file_system_provider_service_->MountFileSystem(
+      kExtensionId, kFileSystemName);
+  EXPECT_LT(0, file_system_id);
+
+  const base::FilePath kFilePath = base::FilePath("hello");
+  const fileapi::FileSystemURL url = CreateFileSystemURL(
+      profile_, kExtensionId, file_system_id + 1, kFilePath);
+  // It is impossible to create a cracked URL for a mount point which doesn't
+  // exist, therefore is will always be invalid, and empty.
+  EXPECT_FALSE(url.is_valid());
+
+  FileSystemURLParser parser(url);
+  EXPECT_FALSE(parser.Parse());
+}
+
+}  // namespace util
+}  // namespace file_system_provider
+}  // namespace chromeos
diff --git a/chrome/browser/chromeos/file_system_provider/observer.h b/chrome/browser/chromeos/file_system_provider/observer.h
index be4dc66..3f6347b 100644
--- a/chrome/browser/chromeos/file_system_provider/observer.h
+++ b/chrome/browser/chromeos/file_system_provider/observer.h
@@ -12,7 +12,7 @@
 namespace chromeos {
 namespace file_system_provider {
 
-class ProvidedFileSystem;
+class ProvidedFileSystemInfo;
 
 // Observes file_system_provider::Service for mounting and unmounting events.
 class Observer {
@@ -20,14 +20,15 @@
   // Called when a file system mounting has been invoked. For success, the
   // |error| argument is set to FILE_OK. Otherwise, |error| contains a specific
   // error code.
-  virtual void OnProvidedFileSystemMount(const ProvidedFileSystem& file_system,
-                                         base::File::Error error) = 0;
+  virtual void OnProvidedFileSystemMount(
+      const ProvidedFileSystemInfo& file_system_info,
+      base::File::Error error) = 0;
 
   // Called when a file system unmounting has been invoked. For success, the
   // |error| argument is set to FILE_OK. Otherwise, |error| contains a specific
   // error code.
   virtual void OnProvidedFileSystemUnmount(
-      const ProvidedFileSystem& file_system,
+      const ProvidedFileSystemInfo& file_system_info,
       base::File::Error error) = 0;
 };
 
diff --git a/chrome/browser/chromeos/file_system_provider/provided_file_system.cc b/chrome/browser/chromeos/file_system_provider/provided_file_system.cc
index 8d669af..93a9bd2 100644
--- a/chrome/browser/chromeos/file_system_provider/provided_file_system.cc
+++ b/chrome/browser/chromeos/file_system_provider/provided_file_system.cc
@@ -4,21 +4,71 @@
 
 #include "chrome/browser/chromeos/file_system_provider/provided_file_system.h"
 
+#include "base/files/file.h"
+#include "base/values.h"
+#include "chrome/browser/chromeos/file_system_provider/request_manager.h"
+#include "chrome/common/extensions/api/file_system_provider.h"
+#include "extensions/browser/event_router.h"
+
 namespace chromeos {
 namespace file_system_provider {
+namespace {
 
-ProvidedFileSystem::ProvidedFileSystem() {}
+// Creates values to be passed to request events. These values can be extended
+// by additional fields.
+scoped_ptr<base::ListValue> CreateRequestValues(int file_system_id,
+                                                int request_id) {
+  scoped_ptr<base::ListValue> values(new base::ListValue());
+  values->AppendInteger(file_system_id);
+  values->AppendInteger(request_id);
+  return values.Pass();
+}
 
-ProvidedFileSystem::ProvidedFileSystem(const std::string& extension_id,
-                                       int file_system_id,
-                                       const std::string& file_system_name,
-                                       const base::FilePath& mount_path)
-    : extension_id_(extension_id),
-      file_system_id_(file_system_id),
-      file_system_name_(file_system_name),
-      mount_path_(mount_path) {}
+// Forwards the success callback to the status callback. Ignores arguments,
+// since unmount request does not provide arguments.
+void OnRequestUnmountSuccess(
+    const fileapi::AsyncFileUtil::StatusCallback& callback,
+    scoped_ptr<base::DictionaryValue> /* result */,
+    bool /* has_next */) {
+  callback.Run(base::File::FILE_OK);
+}
+
+}  // namespace
+
+ProvidedFileSystem::ProvidedFileSystem(
+    extensions::EventRouter* event_router,
+    const ProvidedFileSystemInfo& file_system_info)
+    : event_router_(event_router), file_system_info_(file_system_info) {}
 
 ProvidedFileSystem::~ProvidedFileSystem() {}
 
+bool ProvidedFileSystem::RequestUnmount(
+    const fileapi::AsyncFileUtil::StatusCallback& callback) {
+  int request_id = request_manager_.CreateRequest(
+      base::Bind(&OnRequestUnmountSuccess, callback), callback);
+
+  if (!request_id)
+    return false;
+
+  scoped_ptr<base::ListValue> values(
+      CreateRequestValues(file_system_info_.file_system_id(), request_id));
+
+  event_router_->DispatchEventToExtension(
+      file_system_info_.extension_id(),
+      make_scoped_ptr(new extensions::Event(
+          extensions::api::file_system_provider::OnUnmountRequested::kEventName,
+          values.Pass())));
+
+  return true;
+}
+
+const ProvidedFileSystemInfo& ProvidedFileSystem::GetFileSystemInfo() const {
+  return file_system_info_;
+}
+
+RequestManager* ProvidedFileSystem::GetRequestManager() {
+  return &request_manager_;
+}
+
 }  // namespace file_system_provider
 }  // namespace chromeos
diff --git a/chrome/browser/chromeos/file_system_provider/provided_file_system.h b/chrome/browser/chromeos/file_system_provider/provided_file_system.h
index 10aa0a9..7110478 100644
--- a/chrome/browser/chromeos/file_system_provider/provided_file_system.h
+++ b/chrome/browser/chromeos/file_system_provider/provided_file_system.h
@@ -5,41 +5,37 @@
 #ifndef CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_PROVIDED_FILE_SYSTEM_H_
 #define CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_PROVIDED_FILE_SYSTEM_H_
 
-#include <string>
+#include "chrome/browser/chromeos/file_system_provider/provided_file_system_info.h"
+#include "chrome/browser/chromeos/file_system_provider/provided_file_system_interface.h"
+#include "chrome/browser/chromeos/file_system_provider/request_manager.h"
 
-#include "base/files/file_path.h"
+namespace extensions {
+class EventRouter;
+}  // namespace extensions
 
 namespace chromeos {
 namespace file_system_provider {
 
-// Contains information about the provided file system instance.
-class ProvidedFileSystem {
+// Provided file system implementation. Forwards requests between providers and
+// clients.
+class ProvidedFileSystem : public ProvidedFileSystemInterface {
  public:
-  ProvidedFileSystem();
-  ProvidedFileSystem(const std::string& extension_id,
-                     int file_system_id,
-                     const std::string& file_system_name,
-                     const base::FilePath& mount_path);
+  ProvidedFileSystem(extensions::EventRouter* event_router,
+                     const ProvidedFileSystemInfo& file_system_info);
+  virtual ~ProvidedFileSystem();
 
-  ~ProvidedFileSystem();
-
-  const std::string& extension_id() const { return extension_id_; }
-  int file_system_id() const { return file_system_id_; }
-  const std::string& file_system_name() const { return file_system_name_; }
-  const base::FilePath& mount_path() const { return mount_path_; }
+  // ProvidedFileSystemInterface overrides.
+  virtual bool RequestUnmount(
+      const fileapi::AsyncFileUtil::StatusCallback& callback) OVERRIDE;
+  virtual const ProvidedFileSystemInfo& GetFileSystemInfo() const OVERRIDE;
+  virtual RequestManager* GetRequestManager() OVERRIDE;
 
  private:
-  // ID of the extension providing this file system.
-  std::string extension_id_;
+  extensions::EventRouter* event_router_;
+  RequestManager request_manager_;
+  ProvidedFileSystemInfo file_system_info_;
 
-  // ID of the file system, used internally.
-  int file_system_id_;
-
-  // Name of the file system, can be rendered in the UI.
-  std::string file_system_name_;
-
-  // Mount path of the underlying file system.
-  base::FilePath mount_path_;
+  DISALLOW_COPY_AND_ASSIGN(ProvidedFileSystem);
 };
 
 }  // namespace file_system_provider
diff --git a/chrome/browser/chromeos/file_system_provider/provided_file_system_info.cc b/chrome/browser/chromeos/file_system_provider/provided_file_system_info.cc
new file mode 100644
index 0000000..b552436
--- /dev/null
+++ b/chrome/browser/chromeos/file_system_provider/provided_file_system_info.cc
@@ -0,0 +1,25 @@
+// 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.
+
+#include "chrome/browser/chromeos/file_system_provider/provided_file_system.h"
+
+namespace chromeos {
+namespace file_system_provider {
+
+ProvidedFileSystemInfo::ProvidedFileSystemInfo() {}
+
+ProvidedFileSystemInfo::ProvidedFileSystemInfo(
+    const std::string& extension_id,
+    int file_system_id,
+    const std::string& file_system_name,
+    const base::FilePath& mount_path)
+    : extension_id_(extension_id),
+      file_system_id_(file_system_id),
+      file_system_name_(file_system_name),
+      mount_path_(mount_path) {}
+
+ProvidedFileSystemInfo::~ProvidedFileSystemInfo() {}
+
+}  // namespace file_system_provider
+}  // namespace chromeos
diff --git a/chrome/browser/chromeos/file_system_provider/provided_file_system_info.h b/chrome/browser/chromeos/file_system_provider/provided_file_system_info.h
new file mode 100644
index 0000000..3b88aec
--- /dev/null
+++ b/chrome/browser/chromeos/file_system_provider/provided_file_system_info.h
@@ -0,0 +1,48 @@
+// 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.
+
+#ifndef CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_PROVIDED_FILE_SYSTEM_INFO_H_
+#define CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_PROVIDED_FILE_SYSTEM_INFO_H_
+
+#include <string>
+
+#include "base/files/file_path.h"
+
+namespace chromeos {
+namespace file_system_provider {
+
+// Contains information about the provided file system instance.
+class ProvidedFileSystemInfo {
+ public:
+  ProvidedFileSystemInfo();
+  ProvidedFileSystemInfo(const std::string& extension_id,
+                         int file_system_id,
+                         const std::string& file_system_name,
+                         const base::FilePath& mount_path);
+
+  ~ProvidedFileSystemInfo();
+
+  const std::string& extension_id() const { return extension_id_; }
+  int file_system_id() const { return file_system_id_; }
+  const std::string& file_system_name() const { return file_system_name_; }
+  const base::FilePath& mount_path() const { return mount_path_; }
+
+ private:
+  // ID of the extension providing this file system.
+  std::string extension_id_;
+
+  // ID of the file system, used internally.
+  int file_system_id_;
+
+  // Name of the file system, can be rendered in the UI.
+  std::string file_system_name_;
+
+  // Mount path of the underlying file system.
+  base::FilePath mount_path_;
+};
+
+}  // namespace file_system_provider
+}  // namespace chromeos
+
+#endif  // CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_PROVIDED_FILE_SYSTEM_INFO_H_
diff --git a/chrome/browser/chromeos/file_system_provider/provided_file_system_interface.h b/chrome/browser/chromeos/file_system_provider/provided_file_system_interface.h
new file mode 100644
index 0000000..3a552d8
--- /dev/null
+++ b/chrome/browser/chromeos/file_system_provider/provided_file_system_interface.h
@@ -0,0 +1,41 @@
+// 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.
+
+#ifndef CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_PROVIDED_FILE_SYSTEM_INTERFACE_H_
+#define CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_PROVIDED_FILE_SYSTEM_INTERFACE_H_
+
+#include "webkit/browser/fileapi/async_file_util.h"
+
+class EventRouter;
+
+namespace chromeos {
+namespace file_system_provider {
+
+class ProvidedFileSystemInfo;
+class RequestManager;
+
+// Interface for a provided file system. Acts as a proxy between providers
+// and clients.
+// TODO(mtomasz): Add more methods once implemented.
+class ProvidedFileSystemInterface {
+ public:
+  virtual ~ProvidedFileSystemInterface() {}
+
+  // Requests unmounting of the file system. The callback is called when the
+  // request is accepted or rejected, with an error code. Returns false if the
+  // request could not been created, true otherwise.
+  virtual bool RequestUnmount(
+      const fileapi::AsyncFileUtil::StatusCallback& callback) = 0;
+
+  // Returns a provided file system info for this file system.
+  virtual const ProvidedFileSystemInfo& GetFileSystemInfo() const = 0;
+
+  // Returns a request manager for the file system.
+  virtual RequestManager* GetRequestManager() = 0;
+};
+
+}  // namespace file_system_provider
+}  // namespace chromeos
+
+#endif  // CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_PROVIDED_FILE_SYSTEM_INTERFACE_H_
diff --git a/chrome/browser/chromeos/file_system_provider/provided_file_system_unittest.cc b/chrome/browser/chromeos/file_system_provider/provided_file_system_unittest.cc
new file mode 100644
index 0000000..8503b68
--- /dev/null
+++ b/chrome/browser/chromeos/file_system_provider/provided_file_system_unittest.cc
@@ -0,0 +1,179 @@
+// 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.
+
+#include <string>
+#include <vector>
+
+#include "base/files/file.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/run_loop.h"
+#include "base/values.h"
+#include "chrome/browser/chromeos/file_system_provider/mount_path_util.h"
+#include "chrome/browser/chromeos/file_system_provider/provided_file_system.h"
+#include "chrome/browser/chromeos/file_system_provider/provided_file_system_info.h"
+#include "chrome/browser/chromeos/file_system_provider/provided_file_system_interface.h"
+#include "chrome/browser/chromeos/file_system_provider/request_manager.h"
+#include "chrome/test/base/testing_profile.h"
+#include "content/public/test/test_browser_thread_bundle.h"
+#include "extensions/browser/event_router.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace chromeos {
+namespace file_system_provider {
+
+namespace {
+
+const char kExtensionId[] = "mbflcebpggnecokmikipoihdbecnjfoj";
+const int kExpectedRequestId = 1;
+const int kFileSystemId = 2;
+const char kFileSystemName[] = "Camera Pictures";
+
+class FakeEventRouter : public extensions::EventRouter {
+ public:
+  explicit FakeEventRouter(Profile* profile) : EventRouter(profile, NULL) {}
+  virtual ~FakeEventRouter() {}
+
+  virtual void DispatchEventToExtension(const std::string& extension_id,
+                                        scoped_ptr<extensions::Event> event)
+      OVERRIDE {
+    extension_id_ = extension_id;
+    event_ = event.Pass();
+  }
+
+  const std::string& extension_id() const { return extension_id_; }
+
+  const extensions::Event* event() const { return event_.get(); }
+
+ private:
+  std::string extension_id_;
+  scoped_ptr<extensions::Event> event_;
+
+  DISALLOW_COPY_AND_ASSIGN(FakeEventRouter);
+};
+
+class EventLogger {
+ public:
+  EventLogger() : weak_ptr_factory_(this) {}
+  virtual ~EventLogger() {}
+
+  void OnStatusCallback(base::File::Error error) {
+    error_.reset(new base::File::Error(error));
+  }
+
+  base::File::Error* error() { return error_.get(); }
+
+  base::WeakPtr<EventLogger> GetWeakPtr() {
+    return weak_ptr_factory_.GetWeakPtr();
+  }
+
+ private:
+  scoped_ptr<base::File::Error> error_;
+
+  base::WeakPtrFactory<EventLogger> weak_ptr_factory_;
+  DISALLOW_COPY_AND_ASSIGN(EventLogger);
+};
+
+}  // namespace
+
+class FileSystemProviderProvidedFileSystemTest : public testing::Test {
+ protected:
+  FileSystemProviderProvidedFileSystemTest() {}
+  virtual ~FileSystemProviderProvidedFileSystemTest() {}
+
+  virtual void SetUp() OVERRIDE {
+    profile_.reset(new TestingProfile);
+    event_router_.reset(new FakeEventRouter(profile_.get()));
+    base::FilePath mount_path =
+        util::GetMountPath(profile_.get(), kExtensionId, kFileSystemId);
+    file_system_info_.reset(new ProvidedFileSystemInfo(
+        kExtensionId, kFileSystemId, kFileSystemName, mount_path));
+    provided_file_system_.reset(
+        new ProvidedFileSystem(event_router_.get(), *file_system_info_.get()));
+  }
+
+  content::TestBrowserThreadBundle thread_bundle_;
+  scoped_ptr<TestingProfile> profile_;
+  scoped_ptr<FakeEventRouter> event_router_;
+  scoped_ptr<ProvidedFileSystemInfo> file_system_info_;
+  scoped_ptr<ProvidedFileSystemInterface> provided_file_system_;
+};
+
+TEST_F(FileSystemProviderProvidedFileSystemTest, RequestUnmount_Success) {
+  EventLogger logger;
+
+  bool result = provided_file_system_->RequestUnmount(
+      base::Bind(&EventLogger::OnStatusCallback, logger.GetWeakPtr()));
+  ASSERT_TRUE(result);
+  base::RunLoop().RunUntilIdle();
+
+  // Verify that the event has been sent to the providing extension.
+  EXPECT_EQ(kExtensionId, event_router_->extension_id());
+  const extensions::Event* event = event_router_->event();
+  ASSERT_TRUE(event);
+  ASSERT_TRUE(event->event_args);
+  base::ListValue* event_args = event->event_args.get();
+  EXPECT_EQ(2u, event_args->GetSize());
+  int file_system_id = 0;
+  EXPECT_TRUE(event_args->GetInteger(0, &file_system_id));
+  EXPECT_EQ(kFileSystemId, file_system_id);
+
+  // Remember the request id, and verify it is valid.
+  int request_id = 0;
+  EXPECT_TRUE(event_args->GetInteger(1, &request_id));
+  EXPECT_EQ(kExpectedRequestId, request_id);
+
+  // Callback should not be called, yet.
+  EXPECT_FALSE(logger.error());
+
+  // Simulate sending a success response from the providing extension.
+  RequestManager* request_manager = provided_file_system_->GetRequestManager();
+  ASSERT_TRUE(request_manager);
+  scoped_ptr<base::DictionaryValue> response(new base::DictionaryValue());
+  bool reply_result = request_manager->FulfillRequest(
+      request_id, response.Pass(), false /* has_next */);
+  EXPECT_TRUE(reply_result);
+
+  // Callback should be called. Verify the error code.
+  ASSERT_TRUE(logger.error());
+  EXPECT_EQ(base::File::FILE_OK, *logger.error());
+}
+
+TEST_F(FileSystemProviderProvidedFileSystemTest, RequestUnmount_Error) {
+  EventLogger logger;
+
+  bool result = provided_file_system_->RequestUnmount(
+      base::Bind(&EventLogger::OnStatusCallback, logger.GetWeakPtr()));
+  ASSERT_TRUE(result);
+  base::RunLoop().RunUntilIdle();
+
+  // Verify that the event has been sent to the providing extension.
+  EXPECT_EQ(kExtensionId, event_router_->extension_id());
+  const extensions::Event* event = event_router_->event();
+  ASSERT_TRUE(event);
+  ASSERT_TRUE(event->event_args);
+  base::ListValue* event_args = event->event_args.get();
+  EXPECT_EQ(2u, event_args->GetSize());
+  int file_system_id = 0;
+  EXPECT_TRUE(event_args->GetInteger(0, &file_system_id));
+  EXPECT_EQ(kFileSystemId, file_system_id);
+
+  // Remember the request id, and verify it is valid.
+  int request_id = 0;
+  EXPECT_TRUE(event_args->GetInteger(1, &request_id));
+  EXPECT_EQ(kExpectedRequestId, request_id);
+
+  // Simulate sending an error response from the providing extension.
+  RequestManager* request_manager = provided_file_system_->GetRequestManager();
+  ASSERT_TRUE(request_manager);
+  bool reply_result = request_manager->RejectRequest(
+      request_id, base::File::FILE_ERROR_NOT_FOUND);
+  EXPECT_TRUE(reply_result);
+
+  // Callback should be called. Verify the error code.
+  ASSERT_TRUE(logger.error());
+  EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, *logger.error());
+}
+
+}  // namespace file_system_provider
+}  // namespace chromeos
diff --git a/chrome/browser/chromeos/file_system_provider/request_manager.cc b/chrome/browser/chromeos/file_system_provider/request_manager.cc
index 4083f57..ae2c4a4 100644
--- a/chrome/browser/chromeos/file_system_provider/request_manager.cc
+++ b/chrome/browser/chromeos/file_system_provider/request_manager.cc
@@ -4,17 +4,40 @@
 
 #include "chrome/browser/chromeos/file_system_provider/request_manager.h"
 
+#include "base/files/file.h"
+#include "base/stl_util.h"
 #include "base/values.h"
 
 namespace chromeos {
 namespace file_system_provider {
 
-RequestManager::RequestManager() : next_id_(1) {}
+namespace {
 
-RequestManager::~RequestManager() {}
+// Timeout in seconds, before a request is considered as stale and hence
+// aborted.
+const int kDefaultTimeout = 10;
 
-int RequestManager::CreateRequest(const ProvidedFileSystem& file_system,
-                                  const SuccessCallback& success_callback,
+}  // namespace
+
+RequestManager::RequestManager()
+    : next_id_(1),
+      timeout_(base::TimeDelta::FromSeconds(kDefaultTimeout)),
+      weak_ptr_factory_(this) {}
+
+RequestManager::~RequestManager() {
+  // Abort all of the active requests.
+  RequestMap::iterator it = requests_.begin();
+  while (it != requests_.end()) {
+    const int request_id = it->first;
+    ++it;
+    RejectRequest(request_id, base::File::FILE_ERROR_ABORT);
+  }
+
+  DCHECK_EQ(0u, requests_.size());
+  STLDeleteValues(&requests_);
+}
+
+int RequestManager::CreateRequest(const SuccessCallback& success_callback,
                                   const ErrorCallback& error_callback) {
   // The request id is unique per request manager, so per service, thereof
   // per profile.
@@ -24,17 +47,20 @@
   if (requests_.find(request_id) != requests_.end())
     return 0;
 
-  Request request;
-  request.file_system = file_system;
-  request.success_callback = success_callback;
-  request.error_callback = error_callback;
+  Request* request = new Request;
+  request->success_callback = success_callback;
+  request->error_callback = error_callback;
+  request->timeout_timer.Start(FROM_HERE,
+                               timeout_,
+                               base::Bind(&RequestManager::OnRequestTimeout,
+                                          weak_ptr_factory_.GetWeakPtr(),
+                                          request_id));
   requests_[request_id] = request;
 
   return request_id;
 }
 
-bool RequestManager::FulfillRequest(const ProvidedFileSystem& file_system,
-                                    int request_id,
+bool RequestManager::FulfillRequest(int request_id,
                                     scoped_ptr<base::DictionaryValue> response,
                                     bool has_next) {
   RequestMap::iterator request_it = requests_.find(request_id);
@@ -42,64 +68,38 @@
   if (request_it == requests_.end())
     return false;
 
-  // Check if the request belongs to the same provided file system.
-  if (request_it->second.file_system.file_system_id() !=
-      file_system.file_system_id()) {
-    return false;
-  }
-
-  if (!request_it->second.success_callback.is_null())
-    request_it->second.success_callback.Run(response.Pass(), has_next);
-  if (!has_next)
+  if (!request_it->second->success_callback.is_null())
+    request_it->second->success_callback.Run(response.Pass(), has_next);
+  if (!has_next) {
+    delete request_it->second;
     requests_.erase(request_it);
+  } else {
+    request_it->second->timeout_timer.Reset();
+  }
 
   return true;
 }
 
-bool RequestManager::RejectRequest(const ProvidedFileSystem& file_system,
-                                   int request_id,
-                                   base::File::Error error) {
+bool RequestManager::RejectRequest(int request_id, base::File::Error error) {
   RequestMap::iterator request_it = requests_.find(request_id);
 
   if (request_it == requests_.end())
     return false;
 
-  // Check if the request belongs to the same provided file system.
-  if (request_it->second.file_system.file_system_id() !=
-      file_system.file_system_id()) {
-    return false;
-  }
-
-  if (!request_it->second.error_callback.is_null())
-    request_it->second.error_callback.Run(error);
+  if (!request_it->second->error_callback.is_null())
+    request_it->second->error_callback.Run(error);
+  delete request_it->second;
   requests_.erase(request_it);
 
   return true;
 }
 
-void RequestManager::OnProvidedFileSystemMount(
-    const ProvidedFileSystem& file_system,
-    base::File::Error error) {}
+void RequestManager::SetTimeoutForTests(const base::TimeDelta& timeout) {
+  timeout_ = timeout;
+}
 
-void RequestManager::OnProvidedFileSystemUnmount(
-    const ProvidedFileSystem& file_system,
-    base::File::Error error) {
-  // Do not continue on error, since the volume may be still mounted.
-  if (error != base::File::FILE_OK)
-    return;
-
-  // Remove all requests for this provided file system.
-  RequestMap::iterator it = requests_.begin();
-  while (it != requests_.begin()) {
-    if (it->second.file_system.file_system_id() ==
-        file_system.file_system_id()) {
-      RejectRequest(
-          it->second.file_system, it->first, base::File::FILE_ERROR_ABORT);
-      requests_.erase(it++);
-    } else {
-      it++;
-    }
-  }
+void RequestManager::OnRequestTimeout(int request_id) {
+  RejectRequest(request_id, base::File::FILE_ERROR_ABORT);
 }
 
 RequestManager::Request::Request() {}
diff --git a/chrome/browser/chromeos/file_system_provider/request_manager.h b/chrome/browser/chromeos/file_system_provider/request_manager.h
index 6eb2f45..b54cd43 100644
--- a/chrome/browser/chromeos/file_system_provider/request_manager.h
+++ b/chrome/browser/chromeos/file_system_provider/request_manager.h
@@ -11,8 +11,10 @@
 #include "base/callback.h"
 #include "base/files/file.h"
 #include "base/memory/scoped_ptr.h"
-#include "chrome/browser/chromeos/file_system_provider/observer.h"
-#include "chrome/browser/chromeos/file_system_provider/provided_file_system.h"
+#include "base/memory/weak_ptr.h"
+#include "base/time/time.h"
+#include "base/timer/timer.h"
+#include "chrome/browser/chromeos/file_system_provider/provided_file_system_info.h"
 
 namespace base {
 class DictionaryValue;
@@ -21,63 +23,64 @@
 namespace chromeos {
 namespace file_system_provider {
 
-typedef base::Callback<void(scoped_ptr<base::DictionaryValue>, bool has_next)>
-    SuccessCallback;
+typedef base::Callback<void(scoped_ptr<base::DictionaryValue> result,
+                            bool has_next)> SuccessCallback;
 typedef base::Callback<void(base::File::Error)> ErrorCallback;
 
 // Manages requests between the service, async utils and the providing
 // extensions.
-class RequestManager : public Observer {
+class RequestManager {
  public:
   RequestManager();
   virtual ~RequestManager();
 
   // Creates a request and returns its request id (greater than 0). Returns 0 in
   // case of an error (eg. too many requests). The passed callbacks can be NULL.
-  int CreateRequest(const ProvidedFileSystem& file_system,
-                    const SuccessCallback& success_callback,
+  int CreateRequest(const SuccessCallback& success_callback,
                     const ErrorCallback& error_callback);
 
   // Handles successful response for the |request_id|. If |has_next| is false,
   // then the request is disposed, after handling the |response|. On error,
   // returns false, and the request is disposed.
-  bool FulfillRequest(const ProvidedFileSystem& file_system,
-                      int request_id,
+  bool FulfillRequest(int request_id,
                       scoped_ptr<base::DictionaryValue> response,
                       bool has_next);
 
   // Handles error response for the |request_id|. If handling the error fails,
   // returns false. Always disposes the request.
-  bool RejectRequest(const ProvidedFileSystem& file_system,
-                     int request_id,
-                     base::File::Error error);
+  bool RejectRequest(int request_id, base::File::Error error);
 
-  // file_system_provider::Observer overrides.
-  virtual void OnProvidedFileSystemMount(const ProvidedFileSystem& file_system,
-                                         base::File::Error error) OVERRIDE;
-  virtual void OnProvidedFileSystemUnmount(
-      const ProvidedFileSystem& file_system,
-      base::File::Error error) OVERRIDE;
+  // Sets a custom timeout for tests. The new timeout value will be applied to
+  // new requests
+  void SetTimeoutForTests(const base::TimeDelta& timeout);
 
  private:
   struct Request {
     Request();
     ~Request();
 
-    // Provided file system handling the request.
-    ProvidedFileSystem file_system;
+    // Timer for discarding the request during a timeout.
+    base::OneShotTimer<RequestManager> timeout_timer;
 
     // Callback to be called on success.
     SuccessCallback success_callback;
 
     // Callback to be called on error.
     ErrorCallback error_callback;
+
+   private:
+    DISALLOW_COPY_AND_ASSIGN(Request);
   };
 
-  typedef std::map<int, Request> RequestMap;
+  typedef std::map<int, Request*> RequestMap;
+
+  // Called when a request with |request_id| timeouts.
+  void OnRequestTimeout(int request_id);
 
   RequestMap requests_;
   int next_id_;
+  base::TimeDelta timeout_;
+  base::WeakPtrFactory<RequestManager> weak_ptr_factory_;
 
   DISALLOW_COPY_AND_ASSIGN(RequestManager);
 };
diff --git a/chrome/browser/chromeos/file_system_provider/request_manager_unittest.cc b/chrome/browser/chromeos/file_system_provider/request_manager_unittest.cc
index 2ca0113..413826a 100644
--- a/chrome/browser/chromeos/file_system_provider/request_manager_unittest.cc
+++ b/chrome/browser/chromeos/file_system_provider/request_manager_unittest.cc
@@ -5,25 +5,22 @@
 #include <string>
 
 #include "base/bind.h"
+#include "base/callback.h"
 #include "base/files/file.h"
 #include "base/files/file_path.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/memory/scoped_vector.h"
 #include "base/memory/weak_ptr.h"
+#include "base/run_loop.h"
 #include "base/values.h"
 #include "chrome/browser/chromeos/file_system_provider/request_manager.h"
+#include "content/public/test/test_browser_thread_bundle.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace chromeos {
 namespace file_system_provider {
 namespace {
 
-const char kExtensionId[] = "mbflcebpggnecokmikipoihdbecnjfoj";
-const int kFileSystemId = 1;
-const char kFileSystemName[] = "Camera Pictures";
-const base::FilePath::CharType kMountPath[] = FILE_PATH_LITERAL(
-    "/provided/mbflcebpggnecokmikipoihdbecnjfoj-1-testing_profile-hash");
-
 // Logs calls of the success and error callbacks on requests.
 class EventLogger {
  public:
@@ -85,23 +82,16 @@
 
   virtual void SetUp() OVERRIDE {
     request_manager_.reset(new RequestManager());
-
-    // Configure the testing file system.
-    file_system = ProvidedFileSystem(kExtensionId,
-                                     kFileSystemId,
-                                     kFileSystemName,
-                                     base::FilePath(kMountPath));
   }
 
+  content::TestBrowserThreadBundle thread_bundle_;
   scoped_ptr<RequestManager> request_manager_;
-  ProvidedFileSystem file_system;
 };
 
 TEST_F(FileSystemProviderRequestManagerTest, CreateAndFulFill) {
   EventLogger logger;
 
   int request_id = request_manager_->CreateRequest(
-      file_system,
       base::Bind(&EventLogger::OnSuccess, logger.GetWeakPtr()),
       base::Bind(&EventLogger::OnError, logger.GetWeakPtr()));
 
@@ -113,8 +103,8 @@
   const bool has_next = false;
   response->SetString("path", "i-like-vanilla");
 
-  bool result = request_manager_->FulfillRequest(
-      file_system, request_id, response.Pass(), has_next);
+  bool result =
+      request_manager_->FulfillRequest(request_id, response.Pass(), has_next);
   EXPECT_TRUE(result);
 
   // Validate if the callback has correct arguments.
@@ -125,20 +115,21 @@
   std::string response_test_string;
   EXPECT_TRUE(event->result()->GetString("path", &response_test_string));
   EXPECT_EQ("i-like-vanilla", response_test_string);
-  EXPECT_EQ(has_next, event->has_next());
+  EXPECT_FALSE(event->has_next());
 
   // Confirm, that the request is removed. Basically, fulfilling again for the
   // same request, should fail.
   {
-    bool retry = request_manager_->FulfillRequest(
-        file_system, request_id, response.Pass(), has_next);
+    scoped_ptr<base::DictionaryValue> response;
+    bool retry =
+        request_manager_->FulfillRequest(request_id, response.Pass(), has_next);
     EXPECT_FALSE(retry);
   }
 
   // Rejecting should also fail.
   {
-    bool retry = request_manager_->RejectRequest(
-        file_system, request_id, base::File::FILE_ERROR_FAILED);
+    bool retry = request_manager_->RejectRequest(request_id,
+                                                 base::File::FILE_ERROR_FAILED);
     EXPECT_FALSE(retry);
   }
 }
@@ -147,7 +138,6 @@
   EventLogger logger;
 
   int request_id = request_manager_->CreateRequest(
-      file_system,
       base::Bind(&EventLogger::OnSuccess, logger.GetWeakPtr()),
       base::Bind(&EventLogger::OnError, logger.GetWeakPtr()));
 
@@ -158,8 +148,8 @@
   scoped_ptr<base::DictionaryValue> response;
   const bool has_next = true;
 
-  bool result = request_manager_->FulfillRequest(
-      file_system, request_id, response.Pass(), has_next);
+  bool result =
+      request_manager_->FulfillRequest(request_id, response.Pass(), has_next);
   EXPECT_TRUE(result);
 
   // Validate if the callback has correct arguments.
@@ -167,14 +157,14 @@
   EXPECT_EQ(0u, logger.error_events().size());
   EventLogger::SuccessEvent* event = logger.success_events()[0];
   EXPECT_FALSE(event->result());
-  EXPECT_EQ(has_next, event->has_next());
+  EXPECT_TRUE(event->has_next());
 
   // Confirm, that the request is not removed (since it has has_next == true).
   // Basically, fulfilling again for the same request, should not fail.
   {
     bool new_has_next = false;
     bool retry = request_manager_->FulfillRequest(
-        file_system, request_id, response.Pass(), new_has_next);
+        request_id, response.Pass(), new_has_next);
     EXPECT_TRUE(retry);
   }
 
@@ -183,7 +173,7 @@
   {
     bool new_has_next = false;
     bool retry = request_manager_->FulfillRequest(
-        file_system, request_id, response.Pass(), new_has_next);
+        request_id, response.Pass(), new_has_next);
     EXPECT_FALSE(retry);
   }
 }
@@ -192,7 +182,6 @@
   EventLogger logger;
 
   int request_id = request_manager_->CreateRequest(
-      file_system,
       base::Bind(&EventLogger::OnSuccess, logger.GetWeakPtr()),
       base::Bind(&EventLogger::OnError, logger.GetWeakPtr()));
 
@@ -201,7 +190,7 @@
   EXPECT_EQ(0u, logger.error_events().size());
 
   base::File::Error error = base::File::FILE_ERROR_NO_MEMORY;
-  bool result = request_manager_->RejectRequest(file_system, request_id, error);
+  bool result = request_manager_->RejectRequest(request_id, error);
   EXPECT_TRUE(result);
 
   // Validate if the callback has correct arguments.
@@ -215,15 +204,14 @@
   {
     scoped_ptr<base::DictionaryValue> response;
     bool has_next = false;
-    bool retry = request_manager_->FulfillRequest(
-        file_system, request_id, response.Pass(), has_next);
+    bool retry =
+        request_manager_->FulfillRequest(request_id, response.Pass(), has_next);
     EXPECT_FALSE(retry);
   }
 
   // Rejecting should also fail.
   {
-    bool retry =
-        request_manager_->RejectRequest(file_system, request_id, error);
+    bool retry = request_manager_->RejectRequest(request_id, error);
     EXPECT_FALSE(retry);
   }
 }
@@ -233,7 +221,6 @@
   EventLogger logger;
 
   int request_id = request_manager_->CreateRequest(
-      file_system,
       base::Bind(&EventLogger::OnSuccess, logger.GetWeakPtr()),
       base::Bind(&EventLogger::OnError, logger.GetWeakPtr()));
 
@@ -242,8 +229,7 @@
   EXPECT_EQ(0u, logger.error_events().size());
 
   base::File::Error error = base::File::FILE_ERROR_NO_MEMORY;
-  bool result =
-      request_manager_->RejectRequest(file_system, request_id + 1, error);
+  bool result = request_manager_->RejectRequest(request_id + 1, error);
   EXPECT_FALSE(result);
 
   // Callbacks should not be called.
@@ -252,8 +238,7 @@
 
   // Confirm, that the request hasn't been removed, by rejecting it correctly.
   {
-    bool retry =
-        request_manager_->RejectRequest(file_system, request_id, error);
+    bool retry = request_manager_->RejectRequest(request_id, error);
     EXPECT_TRUE(retry);
   }
 }
@@ -263,7 +248,6 @@
   EventLogger logger;
 
   int request_id = request_manager_->CreateRequest(
-      file_system,
       base::Bind(&EventLogger::OnSuccess, logger.GetWeakPtr()),
       base::Bind(&EventLogger::OnError, logger.GetWeakPtr()));
 
@@ -272,8 +256,7 @@
   EXPECT_EQ(0u, logger.error_events().size());
 
   base::File::Error error = base::File::FILE_ERROR_NO_MEMORY;
-  bool result =
-      request_manager_->RejectRequest(file_system, request_id + 1, error);
+  bool result = request_manager_->RejectRequest(request_id + 1, error);
   EXPECT_FALSE(result);
 
   // Callbacks should not be called.
@@ -282,47 +265,7 @@
 
   // Confirm, that the request hasn't been removed, by rejecting it correctly.
   {
-    bool retry =
-        request_manager_->RejectRequest(file_system, request_id, error);
-    EXPECT_TRUE(retry);
-  }
-}
-
-TEST_F(FileSystemProviderRequestManagerTest,
-       CreateAndFulfillWithUnownedRequestId) {
-  EventLogger logger;
-
-  int request_id = request_manager_->CreateRequest(
-      file_system,
-      base::Bind(&EventLogger::OnSuccess, logger.GetWeakPtr()),
-      base::Bind(&EventLogger::OnError, logger.GetWeakPtr()));
-  EXPECT_EQ(1, request_id);
-
-  // Create another file system, which has just a different fiel system id
-  // (1 -> 2).
-  ProvidedFileSystem another_file_system(
-      kExtensionId,
-      2,  // file_system_id
-      "Music",
-      base::FilePath::FromUTF8Unsafe(
-          "/provided/mbflcebpggnecokmikipoihdbecnjfoj-2-testing_profile-hash"));
-
-  scoped_ptr<base::DictionaryValue> response;
-  const bool has_next = false;
-
-  bool result = request_manager_->FulfillRequest(
-      another_file_system, request_id, response.Pass(), has_next);
-  EXPECT_FALSE(result);
-
-  // Callbacks should not be called.
-  EXPECT_EQ(0u, logger.error_events().size());
-  EXPECT_EQ(0u, logger.success_events().size());
-
-  // Confirm, that the request hasn't been removed, by fulfilling it again, but
-  // with a correct file system.
-  {
-    bool retry = request_manager_->FulfillRequest(
-        file_system, request_id, response.Pass(), has_next);
+    bool retry = request_manager_->RejectRequest(request_id, error);
     EXPECT_TRUE(retry);
   }
 }
@@ -331,12 +274,10 @@
   EventLogger logger;
 
   int first_request_id = request_manager_->CreateRequest(
-      file_system,
       base::Bind(&EventLogger::OnSuccess, logger.GetWeakPtr()),
       base::Bind(&EventLogger::OnError, logger.GetWeakPtr()));
 
   int second_request_id = request_manager_->CreateRequest(
-      file_system,
       base::Bind(&EventLogger::OnSuccess, logger.GetWeakPtr()),
       base::Bind(&EventLogger::OnError, logger.GetWeakPtr()));
 
@@ -344,5 +285,45 @@
   EXPECT_EQ(2, second_request_id);
 }
 
+TEST_F(FileSystemProviderRequestManagerTest, AbortOnDestroy) {
+  EventLogger logger;
+
+  {
+    RequestManager request_manager;
+    int request_id = request_manager.CreateRequest(
+        base::Bind(&EventLogger::OnSuccess, logger.GetWeakPtr()),
+        base::Bind(&EventLogger::OnError, logger.GetWeakPtr()));
+
+    EXPECT_EQ(1, request_id);
+    EXPECT_EQ(0u, logger.success_events().size());
+    EXPECT_EQ(0u, logger.error_events().size());
+  }
+
+  // All active requests should be aborted in the destructor of RequestManager.
+  EventLogger::ErrorEvent* event = logger.error_events()[0];
+  ASSERT_EQ(1u, logger.error_events().size());
+  EXPECT_EQ(base::File::FILE_ERROR_ABORT, event->error());
+
+  EXPECT_EQ(0u, logger.success_events().size());
+}
+
+TEST_F(FileSystemProviderRequestManagerTest, AbortOnTimeout) {
+  EventLogger logger;
+  base::RunLoop run_loop;
+
+  request_manager_->SetTimeoutForTests(base::TimeDelta::FromSeconds(0));
+  int request_id = request_manager_->CreateRequest(
+      base::Bind(&EventLogger::OnSuccess, logger.GetWeakPtr()),
+      base::Bind(&EventLogger::OnError, logger.GetWeakPtr()));
+  EXPECT_LT(0, request_id);
+
+  // Wait until the request is timeouted.
+  run_loop.RunUntilIdle();
+
+  ASSERT_EQ(1u, logger.error_events().size());
+  EventLogger::ErrorEvent* event = logger.error_events()[0];
+  EXPECT_EQ(base::File::FILE_ERROR_ABORT, event->error());
+}
+
 }  // namespace file_system_provider
 }  // namespace chromeos
diff --git a/chrome/browser/chromeos/file_system_provider/service.cc b/chrome/browser/chromeos/file_system_provider/service.cc
index f8e7136..36bdda0 100644
--- a/chrome/browser/chromeos/file_system_provider/service.cc
+++ b/chrome/browser/chromeos/file_system_provider/service.cc
@@ -5,16 +5,16 @@
 #include "chrome/browser/chromeos/file_system_provider/service.h"
 
 #include "base/files/file_path.h"
-#include "base/strings/string_number_conversions.h"
-#include "base/values.h"
+#include "base/stl_util.h"
+#include "chrome/browser/chromeos/file_system_provider/mount_path_util.h"
 #include "chrome/browser/chromeos/file_system_provider/observer.h"
 #include "chrome/browser/chromeos/file_system_provider/provided_file_system.h"
+#include "chrome/browser/chromeos/file_system_provider/provided_file_system_info.h"
+#include "chrome/browser/chromeos/file_system_provider/provided_file_system_interface.h"
 #include "chrome/browser/chromeos/file_system_provider/service_factory.h"
-#include "chrome/browser/chromeos/login/user.h"
-#include "chrome/browser/chromeos/login/user_manager.h"
-#include "chrome/common/extensions/api/file_system_provider.h"
 #include "content/public/browser/browser_thread.h"
 #include "extensions/browser/event_router.h"
+#include "extensions/browser/extension_registry.h"
 #include "extensions/browser/extension_system.h"
 #include "webkit/browser/fileapi/external_mount_points.h"
 
@@ -22,46 +22,43 @@
 namespace file_system_provider {
 namespace {
 
-// Root mount path for all of the provided file systems.
-const base::FilePath::CharType kProvidedMountPointRoot[] =
-    FILE_PATH_LITERAL("/provided");
-
 // Maximum number of file systems to be mounted in the same time, per profile.
 const size_t kMaxFileSystems = 16;
 
-// Constructs a safe mount point path for the provided file system represented
-// by |file_system_handle|. The handle is a numeric part of the file system id.
-base::FilePath GetMountPointPath(Profile* profile,
-                                 std::string extension_id,
-                                 int file_system_id) {
-  chromeos::User* const user =
-      chromeos::UserManager::IsInitialized()
-          ? chromeos::UserManager::Get()->GetUserByProfile(
-                profile->GetOriginalProfile())
-          : NULL;
-  const std::string user_suffix = user ? "-" + user->username_hash() : "";
-  return base::FilePath(kProvidedMountPointRoot).AppendASCII(
-      extension_id + "-" + base::IntToString(file_system_id) + user_suffix);
-}
-
-// Creates values to be passed to request events. These values can be extended
-// by additional fields.
-scoped_ptr<base::ListValue> CreateRequestValues(int file_system_id,
-                                                int request_id) {
-  scoped_ptr<base::ListValue> values(new base::ListValue());
-  values->AppendInteger(file_system_id);
-  values->AppendInteger(request_id);
-  return values.Pass();
+// Default factory for provided file systems. The |event_router| must not be
+// NULL.
+ProvidedFileSystemInterface* CreateProvidedFileSystem(
+    extensions::EventRouter* event_router,
+    const ProvidedFileSystemInfo& file_system_info) {
+  DCHECK(event_router);
+  return new ProvidedFileSystem(event_router, file_system_info);
 }
 
 }  // namespace
 
-Service::Service(Profile* profile)
-    : profile_(profile), next_id_(1), weak_ptr_factory_(this) {
-  AddObserver(&request_manager_);
+Service::Service(Profile* profile,
+                 extensions::ExtensionRegistry* extension_registry)
+    : profile_(profile),
+      extension_registry_(extension_registry),
+      file_system_factory_(base::Bind(CreateProvidedFileSystem)),
+      next_id_(1),
+      weak_ptr_factory_(this) {
+  extension_registry_->AddObserver(this);
 }
 
-Service::~Service() {}
+Service::~Service() {
+  ProvidedFileSystemMap::iterator it = file_system_map_.begin();
+  while (it != file_system_map_.end()) {
+    const int file_system_id = it->first;
+    const std::string extension_id =
+        it->second->GetFileSystemInfo().extension_id();
+    ++it;
+    UnmountFileSystem(extension_id, file_system_id);
+  }
+
+  DCHECK_EQ(0u, file_system_map_.size());
+  STLDeleteValues(&file_system_map_);
+}
 
 // static
 Service* Service::Get(content::BrowserContext* context) {
@@ -78,21 +75,27 @@
   observers_.RemoveObserver(observer);
 }
 
+void Service::SetFileSystemFactoryForTests(
+    const FileSystemFactoryCallback& factory_callback) {
+  DCHECK(!factory_callback.is_null());
+  file_system_factory_ = factory_callback;
+}
+
 int Service::MountFileSystem(const std::string& extension_id,
                              const std::string& file_system_name) {
   DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
 
   // Restrict number of file systems to prevent system abusing.
-  if (file_systems_.size() + 1 > kMaxFileSystems) {
+  if (file_system_map_.size() + 1 > kMaxFileSystems) {
     FOR_EACH_OBSERVER(
         Observer,
         observers_,
-        OnProvidedFileSystemMount(ProvidedFileSystem(),
+        OnProvidedFileSystemMount(ProvidedFileSystemInfo(),
                                   base::File::FILE_ERROR_TOO_MANY_OPENED));
     return 0;
   }
 
-  // The file system id is unique per service, so per profile.
+  // The provided file system id is unique per service, so per profile.
   int file_system_id = next_id_;
 
   fileapi::ExternalMountPoints* const mount_points =
@@ -101,19 +104,18 @@
 
   // The mount point path and name are unique per system, since they are system
   // wide. This is necessary for copying between profiles.
-  const base::FilePath& mount_point_path =
-      GetMountPointPath(profile_, extension_id, file_system_id);
-  const std::string mount_point_name =
-      mount_point_path.BaseName().AsUTF8Unsafe();
+  const base::FilePath& mount_path =
+      util::GetMountPath(profile_, extension_id, file_system_id);
+  const std::string mount_point_name = mount_path.BaseName().AsUTF8Unsafe();
 
   if (!mount_points->RegisterFileSystem(mount_point_name,
                                         fileapi::kFileSystemTypeProvided,
                                         fileapi::FileSystemMountOption(),
-                                        mount_point_path)) {
+                                        mount_path)) {
     FOR_EACH_OBSERVER(
         Observer,
         observers_,
-        OnProvidedFileSystemMount(ProvidedFileSystem(),
+        OnProvidedFileSystemMount(ProvidedFileSystemInfo(),
                                   base::File::FILE_ERROR_INVALID_OPERATION));
     return 0;
   }
@@ -122,16 +124,24 @@
   // system provider file system id.
   // Examples:
   //   file_system_id = 41
-  //   mount_point_name = file_system_id = b33f1337-41-5aa5
-  //   mount_point_path = /provided/b33f1337-41-5aa5
-  ProvidedFileSystem file_system(
-      extension_id, file_system_id, file_system_name, mount_point_path);
-  file_systems_[file_system_id] = file_system;
+  //   mount_point_name =  b33f1337-41-5aa5
+  //   mount_path = /provided/b33f1337-41-5aa5
+  ProvidedFileSystemInfo file_system_info(
+      extension_id, file_system_id, file_system_name, mount_path);
+
+  // The event router may be NULL for unit tests.
+  extensions::EventRouter* router = extensions::EventRouter::Get(profile_);
+
+  ProvidedFileSystemInterface* file_system =
+      file_system_factory_.Run(router, file_system_info);
+  DCHECK(file_system);
+  file_system_map_[file_system_id] = file_system;
+  mount_point_name_to_id_map_[mount_point_name] = file_system_id;
 
   FOR_EACH_OBSERVER(
       Observer,
       observers_,
-      OnProvidedFileSystemMount(file_system, base::File::FILE_OK));
+      OnProvidedFileSystemMount(file_system_info, base::File::FILE_OK));
 
   next_id_++;
   return file_system_id;
@@ -141,14 +151,17 @@
                                 int file_system_id) {
   DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
 
-  FileSystemMap::iterator file_system_it = file_systems_.find(file_system_id);
-  if (file_system_it == file_systems_.end() ||
-      file_system_it->second.extension_id() != extension_id) {
-    const ProvidedFileSystem empty_file_system;
-    FOR_EACH_OBSERVER(Observer,
-                      observers_,
-                      OnProvidedFileSystemUnmount(
-                          empty_file_system, base::File::FILE_ERROR_NOT_FOUND));
+  const ProvidedFileSystemMap::iterator file_system_it =
+      file_system_map_.find(file_system_id);
+  if (file_system_it == file_system_map_.end() ||
+      file_system_it->second->GetFileSystemInfo().extension_id() !=
+          extension_id) {
+    const ProvidedFileSystemInfo empty_file_system_info;
+    FOR_EACH_OBSERVER(
+        Observer,
+        observers_,
+        OnProvidedFileSystemUnmount(empty_file_system_info,
+                                    base::File::FILE_ERROR_NOT_FOUND));
     return false;
   }
 
@@ -156,13 +169,16 @@
       fileapi::ExternalMountPoints::GetSystemInstance();
   DCHECK(mount_points);
 
+  const ProvidedFileSystemInfo& file_system_info =
+      file_system_it->second->GetFileSystemInfo();
+
   const std::string mount_point_name =
-      file_system_it->second.mount_path().BaseName().value();
+      file_system_info.mount_path().BaseName().value();
   if (!mount_points->RevokeFileSystem(mount_point_name)) {
     FOR_EACH_OBSERVER(
         Observer,
         observers_,
-        OnProvidedFileSystemUnmount(file_system_it->second,
+        OnProvidedFileSystemUnmount(file_system_info,
                                     base::File::FILE_ERROR_INVALID_OPERATION));
     return false;
   }
@@ -170,96 +186,106 @@
   FOR_EACH_OBSERVER(
       Observer,
       observers_,
-      OnProvidedFileSystemUnmount(file_system_it->second, base::File::FILE_OK));
+      OnProvidedFileSystemUnmount(file_system_info, base::File::FILE_OK));
 
-  file_systems_.erase(file_system_it);
+  mount_point_name_to_id_map_.erase(mount_point_name);
+
+  delete file_system_it->second;
+  file_system_map_.erase(file_system_it);
+
   return true;
 }
 
-std::vector<ProvidedFileSystem> Service::GetMountedFileSystems() {
-  DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
-
-  std::vector<ProvidedFileSystem> result;
-  for (FileSystemMap::const_iterator it = file_systems_.begin();
-       it != file_systems_.end();
-       ++it) {
-    result.push_back(it->second);
-  }
-  return result;
-}
-
-bool Service::FulfillRequest(const std::string& extension_id,
-                             int file_system_id,
-                             int request_id,
-                             scoped_ptr<base::DictionaryValue> result,
-                             bool has_next) {
-  DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
-
-  FileSystemMap::iterator file_system_it = file_systems_.find(file_system_id);
-  if (file_system_it == file_systems_.end() ||
-      file_system_it->second.extension_id() != extension_id) {
-    return false;
-  }
-
-  return request_manager_.FulfillRequest(
-      file_system_it->second, request_id, result.Pass(), has_next);
-}
-
-bool Service::RejectRequest(const std::string& extension_id,
-                            int file_system_id,
-                            int request_id,
-                            base::File::Error error) {
-  DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
-
-  FileSystemMap::iterator file_system_it = file_systems_.find(file_system_id);
-  if (file_system_it == file_systems_.end() ||
-      file_system_it->second.extension_id() != extension_id) {
-    return false;
-  }
-
-  return request_manager_.RejectRequest(
-      file_system_it->second, request_id, error);
-}
-
 bool Service::RequestUnmount(int file_system_id) {
   DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
 
-  FileSystemMap::iterator file_system_it = file_systems_.find(file_system_id);
-  if (file_system_it == file_systems_.end())
+  ProvidedFileSystemMap::iterator file_system_it =
+      file_system_map_.find(file_system_id);
+  if (file_system_it == file_system_map_.end())
     return false;
 
-  int request_id =
-      request_manager_.CreateRequest(file_system_it->second,
-                                     SuccessCallback(),
-                                     base::Bind(&Service::OnRequestUnmountError,
-                                                weak_ptr_factory_.GetWeakPtr(),
-                                                file_system_it->second));
-
-  if (!request_id)
-    return false;
-
-  scoped_ptr<base::ListValue> values(
-      CreateRequestValues(file_system_id, request_id));
-
-  extensions::EventRouter* event_router =
-      extensions::ExtensionSystem::Get(profile_)->event_router();
-  DCHECK(event_router);
-
-  event_router->DispatchEventToExtension(
-      file_system_it->second.extension_id(),
-      make_scoped_ptr(new extensions::Event(
-          extensions::api::file_system_provider::OnUnmountRequested::kEventName,
-          values.Pass())));
-
-  return true;
+  return file_system_it->second->RequestUnmount(
+      base::Bind(&Service::OnRequestUnmountStatus,
+                 weak_ptr_factory_.GetWeakPtr(),
+                 file_system_it->second->GetFileSystemInfo()));
 }
 
-void Service::Shutdown() { RemoveObserver(&request_manager_); }
+std::vector<ProvidedFileSystemInfo> Service::GetProvidedFileSystemInfoList() {
+  DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
 
-void Service::OnRequestUnmountError(const ProvidedFileSystem& file_system,
-                                    base::File::Error error) {
-  FOR_EACH_OBSERVER(
-      Observer, observers_, OnProvidedFileSystemUnmount(file_system, error));
+  std::vector<ProvidedFileSystemInfo> result;
+  for (ProvidedFileSystemMap::const_iterator it = file_system_map_.begin();
+       it != file_system_map_.end();
+       ++it) {
+    result.push_back(it->second->GetFileSystemInfo());
+  }
+  return result;
+}
+
+ProvidedFileSystemInterface* Service::GetProvidedFileSystem(
+    const std::string& extension_id,
+    int file_system_id) {
+  DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+
+  const ProvidedFileSystemMap::const_iterator file_system_it =
+      file_system_map_.find(file_system_id);
+  if (file_system_it == file_system_map_.end() ||
+      file_system_it->second->GetFileSystemInfo().extension_id() !=
+          extension_id) {
+    return NULL;
+  }
+
+  return file_system_it->second;
+}
+
+void Service::OnExtensionUnloaded(
+    content::BrowserContext* browser_context,
+    const extensions::Extension* extension,
+    extensions::UnloadedExtensionInfo::Reason reason) {
+  // Unmount all of the provided file systems associated with this extension.
+  ProvidedFileSystemMap::iterator it = file_system_map_.begin();
+  while (it != file_system_map_.end()) {
+    const ProvidedFileSystemInfo& file_system_info =
+        it->second->GetFileSystemInfo();
+    // Advance the iterator beforehand, otherwise it will become invalidated
+    // by the UnmountFileSystem() call.
+    ++it;
+    if (file_system_info.extension_id() == extension->id()) {
+      bool result = UnmountFileSystem(file_system_info.extension_id(),
+                                      file_system_info.file_system_id());
+      DCHECK(result);
+    }
+  }
+}
+
+ProvidedFileSystemInterface* Service::GetProvidedFileSystem(
+    const std::string& mount_point_name) {
+  DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+
+  const MountPointNameToIdMap::const_iterator mapping_it =
+      mount_point_name_to_id_map_.find(mount_point_name);
+  if (mapping_it == mount_point_name_to_id_map_.end())
+    return NULL;
+
+  const ProvidedFileSystemMap::const_iterator file_system_it =
+      file_system_map_.find(mapping_it->second);
+  if (file_system_it == file_system_map_.end())
+    return NULL;
+
+  return file_system_it->second;
+}
+
+void Service::OnRequestUnmountStatus(
+    const ProvidedFileSystemInfo& file_system_info,
+    base::File::Error error) {
+  // Notify observers about failure in unmounting, since mount() will not be
+  // called by the provided file system. In case of success mount() will be
+  // invoked, and observers notified, so there is no need to call them now.
+  if (error != base::File::FILE_OK) {
+    FOR_EACH_OBSERVER(Observer,
+                      observers_,
+                      OnProvidedFileSystemUnmount(file_system_info, error));
+  }
 }
 
 }  // namespace file_system_provider
diff --git a/chrome/browser/chromeos/file_system_provider/service.h b/chrome/browser/chromeos/file_system_provider/service.h
index 735e05f..f5554bd 100644
--- a/chrome/browser/chromeos/file_system_provider/service.h
+++ b/chrome/browser/chromeos/file_system_provider/service.h
@@ -10,28 +10,50 @@
 #include <vector>
 
 #include "base/files/file.h"
+#include "base/files/file_path.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/observer_list.h"
 #include "base/values.h"
 #include "chrome/browser/chromeos/file_system_provider/observer.h"
-#include "chrome/browser/chromeos/file_system_provider/request_manager.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/common/extensions/api/file_system_provider.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "content/public/browser/browser_context.h"
+#include "extensions/browser/extension_registry_observer.h"
+#include "extensions/common/extension.h"
+
+namespace extensions {
+class EventRouter;
+class ExtensionRegistry;
+}  // namespace extensions
 
 namespace chromeos {
 namespace file_system_provider {
 
+class ProvidedFileSystemFactoryInterface;
+class ProvidedFileSystemInfo;
+class ProvidedFileSystemInterface;
 class ServiceFactory;
 
-// Manages and registers the fileSystemProvider service.
-class Service : public KeyedService {
+// Manages and registers the file system provider service. Maintains provided
+// file systems.
+class Service : public KeyedService,
+                public extensions::ExtensionRegistryObserver {
  public:
-  explicit Service(Profile* profile);
+  typedef base::Callback<ProvidedFileSystemInterface*(
+      extensions::EventRouter* event_router,
+      const ProvidedFileSystemInfo& file_system_info)>
+      FileSystemFactoryCallback;
+
+  Service(Profile* profile, extensions::ExtensionRegistry* extension_registry);
   virtual ~Service();
 
+  // Sets a custom ProvidedFileSystemInterface factory. Used by unit tests,
+  // where an event router is not available.
+  void SetFileSystemFactoryForTests(
+      const FileSystemFactoryCallback& factory_callback);
+
   // Mounts a file system provided by an extension with the |extension_id|.
   // For success, it returns a numeric file system id, which is an
   // auto-incremented non-zero value. For failures, it returns zero.
@@ -42,30 +64,26 @@
   // |extension_id|. For success returns true, otherwise false.
   bool UnmountFileSystem(const std::string& extension_id, int file_system_id);
 
-  // Returns a list of currently mounted file systems. All items are copied.
-  std::vector<ProvidedFileSystem> GetMountedFileSystems();
-
-  // Handles successful response for the |request_id|. If |has_next| is false,
-  // then the request is disposed, after handling the |response|. On error,
-  // returns false, and the request is disposed.
-  bool FulfillRequest(const std::string& extension_id,
-                      int file_system_id,
-                      int request_id,
-                      scoped_ptr<base::DictionaryValue> result,
-                      bool has_next);
-
-  // Handles error response for the |request_id|. If handling the error fails,
-  // returns false. Always disposes the request.
-  bool RejectRequest(const std::string& extension_id,
-                     int file_system_id,
-                     int request_id,
-                     base::File::Error error);
-
-  // Requests unmounting of a file system with the passed |file_system_id|.
-  // Returns true is unmounting has been requested. False, if the request is
-  // invalid (eg. already unmounted).
+  // Requests unmounting of the file system. The callback is called when the
+  // request is accepted or rejected, with an error code. Returns false if the
+  // request could not been created, true otherwise.
   bool RequestUnmount(int file_system_id);
 
+  // Returns a list of information of all currently provided file systems. All
+  // items are copied.
+  std::vector<ProvidedFileSystemInfo> GetProvidedFileSystemInfoList();
+
+  // Returns a provided file system with |file_system_id|, handled by
+  // the extension with |extension_id|. If not found, then returns NULL.
+  ProvidedFileSystemInterface* GetProvidedFileSystem(
+      const std::string& extension_id,
+      int file_system_id);
+
+  // Returns a provided file system attached to the the passed
+  // |mount_point_name|. If not found, then returns NULL.
+  ProvidedFileSystemInterface* GetProvidedFileSystem(
+      const std::string& mount_point_name);
+
   // Adds and removes observers.
   void AddObserver(Observer* observer);
   void RemoveObserver(Observer* observer);
@@ -73,21 +91,27 @@
   // Gets the singleton instance for the |context|.
   static Service* Get(content::BrowserContext* context);
 
-  // BrowserContextKeyedService overrides.
-  virtual void Shutdown() OVERRIDE;
+  // extensions::ExtensionRegistryObserver overrides.
+  virtual void OnExtensionUnloaded(
+      content::BrowserContext* browser_context,
+      const extensions::Extension* extension,
+      extensions::UnloadedExtensionInfo::Reason reason) OVERRIDE;
 
  private:
-  typedef std::map<int, ProvidedFileSystem> FileSystemMap;
+  typedef std::map<int, ProvidedFileSystemInterface*> ProvidedFileSystemMap;
+  typedef std::map<std::string, int> MountPointNameToIdMap;
 
-  // Called when the providing extension calls the success callback for the
-  // onUnmountRequested event.
-  void OnRequestUnmountError(const ProvidedFileSystem& file_system,
-                             base::File::Error error);
+  // Called when the providing extension accepts or refuses a unmount request.
+  // If |error| is equal to FILE_OK, then the request is accepted.
+  void OnRequestUnmountStatus(const ProvidedFileSystemInfo& file_system_info,
+                              base::File::Error error);
 
-  RequestManager request_manager_;
   Profile* profile_;
+  extensions::ExtensionRegistry* extension_registry_;  // Not owned.
+  FileSystemFactoryCallback file_system_factory_;
   ObserverList<Observer> observers_;
-  FileSystemMap file_systems_;
+  ProvidedFileSystemMap file_system_map_;  // Owns pointers.
+  MountPointNameToIdMap mount_point_name_to_id_map_;
   int next_id_;
   base::WeakPtrFactory<Service> weak_ptr_factory_;
 
diff --git a/chrome/browser/chromeos/file_system_provider/service_factory.cc b/chrome/browser/chromeos/file_system_provider/service_factory.cc
index 6fc9e99..4c618c1 100644
--- a/chrome/browser/chromeos/file_system_provider/service_factory.cc
+++ b/chrome/browser/chromeos/file_system_provider/service_factory.cc
@@ -6,6 +6,8 @@
 
 #include "chrome/browser/chromeos/file_system_provider/service.h"
 #include "components/keyed_service/content/browser_context_dependency_manager.h"
+#include "extensions/browser/extension_registry.h"
+#include "extensions/browser/extension_registry_factory.h"
 
 namespace chromeos {
 namespace file_system_provider {
@@ -23,13 +25,17 @@
 ServiceFactory::ServiceFactory()
     : BrowserContextKeyedServiceFactory(
           "Service",
-          BrowserContextDependencyManager::GetInstance()) {}
+          BrowserContextDependencyManager::GetInstance()) {
+  DependsOn(extensions::ExtensionRegistryFactory::GetInstance());
+}
 
 ServiceFactory::~ServiceFactory() {}
 
 KeyedService* ServiceFactory::BuildServiceInstanceFor(
     content::BrowserContext* profile) const {
-  return new Service(static_cast<Profile*>(profile));
+  return new Service(
+      Profile::FromBrowserContext(profile),
+      extensions::ExtensionRegistry::Get(Profile::FromBrowserContext(profile)));
 }
 
 bool ServiceFactory::ServiceIsCreatedWithBrowserContext() const { return true; }
diff --git a/chrome/browser/chromeos/file_system_provider/service_unittest.cc b/chrome/browser/chromeos/file_system_provider/service_unittest.cc
index d72dd01..65d972c 100644
--- a/chrome/browser/chromeos/file_system_provider/service_unittest.cc
+++ b/chrome/browser/chromeos/file_system_provider/service_unittest.cc
@@ -6,13 +6,19 @@
 #include <vector>
 
 #include "base/files/file.h"
+#include "base/memory/ref_counted.h"
 #include "base/memory/scoped_ptr.h"
+#include "chrome/browser/chromeos/file_system_provider/fake_provided_file_system.h"
+#include "chrome/browser/chromeos/file_system_provider/mount_path_util.h"
 #include "chrome/browser/chromeos/file_system_provider/observer.h"
-#include "chrome/browser/chromeos/file_system_provider/provided_file_system.h"
+#include "chrome/browser/chromeos/file_system_provider/provided_file_system_info.h"
 #include "chrome/browser/chromeos/file_system_provider/service.h"
 #include "chrome/browser/chromeos/login/fake_user_manager.h"
 #include "chrome/test/base/testing_profile.h"
 #include "content/public/test/test_browser_thread_bundle.h"
+#include "extensions/browser/extension_registry.h"
+#include "extensions/common/extension.h"
+#include "extensions/common/manifest_constants.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "webkit/browser/fileapi/external_mount_points.h"
 
@@ -28,15 +34,18 @@
  public:
   class Event {
    public:
-    Event(const ProvidedFileSystem& file_system, base::File::Error error)
-        : file_system_(file_system), error_(error) {}
+    Event(const ProvidedFileSystemInfo& file_system_info,
+          base::File::Error error)
+        : file_system_info_(file_system_info), error_(error) {}
     ~Event() {}
 
-    const ProvidedFileSystem& file_system() { return file_system_; }
+    const ProvidedFileSystemInfo& file_system_info() {
+      return file_system_info_;
+    }
     base::File::Error error() { return error_; }
 
    private:
-    ProvidedFileSystem file_system_;
+    ProvidedFileSystemInfo file_system_info_;
     base::File::Error error_;
   };
 
@@ -44,21 +53,37 @@
   virtual ~LoggingObserver() {}
 
   // file_system_provider::Observer overrides.
-  virtual void OnProvidedFileSystemMount(const ProvidedFileSystem& file_system,
-                                         base::File::Error error) OVERRIDE {
-    mounts.push_back(Event(file_system, error));
+  virtual void OnProvidedFileSystemMount(
+      const ProvidedFileSystemInfo& file_system_info,
+      base::File::Error error) OVERRIDE {
+    mounts.push_back(Event(file_system_info, error));
   }
 
   virtual void OnProvidedFileSystemUnmount(
-      const ProvidedFileSystem& file_system,
+      const ProvidedFileSystemInfo& file_system_info,
       base::File::Error error) OVERRIDE {
-    unmounts.push_back(Event(file_system, error));
+    unmounts.push_back(Event(file_system_info, error));
   }
 
   std::vector<Event> mounts;
   std::vector<Event> unmounts;
 };
 
+// Creates a fake extension with the specified |extension_id|.
+scoped_refptr<extensions::Extension> createFakeExtension(
+    const std::string& extension_id) {
+  base::DictionaryValue manifest;
+  std::string error;
+  manifest.SetString(extensions::manifest_keys::kVersion, "1.0.0.0");
+  manifest.SetString(extensions::manifest_keys::kName, "unused");
+  return extensions::Extension::Create(base::FilePath(),
+                                       extensions::Manifest::UNPACKED,
+                                       manifest,
+                                       extensions::Extension::NO_FLAGS,
+                                       extension_id,
+                                       &error);
+}
+
 }  // namespace
 
 class FileSystemProviderServiceTest : public testing::Test {
@@ -67,22 +92,26 @@
   virtual ~FileSystemProviderServiceTest() {}
 
   virtual void SetUp() OVERRIDE {
-    user_manager_ = new FakeUserManager();
-    user_manager_enabler_.reset(new ScopedUserManagerEnabler(user_manager_));
     profile_.reset(new TestingProfile);
+    user_manager_ = new FakeUserManager();
     user_manager_->AddUser(profile_->GetProfileName());
-    file_system_provider_service_.reset(new Service(profile_.get()));
-  }
-
-  virtual void TearDown() {
-    fileapi::ExternalMountPoints::GetSystemInstance()->RevokeAllFileSystems();
+    user_manager_enabler_.reset(new ScopedUserManagerEnabler(user_manager_));
+    extension_registry_.reset(
+        new extensions::ExtensionRegistry(profile_.get()));
+    file_system_provider_service_.reset(
+        new Service(profile_.get(), extension_registry_.get()));
+    file_system_provider_service_->SetFileSystemFactoryForTests(
+        base::Bind(&FakeProvidedFileSystem::Create));
+    extension_ = createFakeExtension(kExtensionId);
   }
 
   content::TestBrowserThreadBundle thread_bundle_;
   scoped_ptr<TestingProfile> profile_;
-  scoped_ptr<ScopedUserManagerEnabler> user_manager_enabler_;
   FakeUserManager* user_manager_;
+  scoped_ptr<ScopedUserManagerEnabler> user_manager_enabler_;
+  scoped_ptr<extensions::ExtensionRegistry> extension_registry_;
   scoped_ptr<Service> file_system_provider_service_;
+  scoped_refptr<extensions::Extension> extension_;
 };
 
 TEST_F(FileSystemProviderServiceTest, MountFileSystem) {
@@ -94,18 +123,20 @@
 
   EXPECT_LT(0, file_system_id);
   ASSERT_EQ(1u, observer.mounts.size());
-  EXPECT_EQ(kExtensionId, observer.mounts[0].file_system().extension_id());
-  EXPECT_EQ(1, observer.mounts[0].file_system().file_system_id());
-  EXPECT_EQ("/provided/mbflcebpggnecokmikipoihdbecnjfoj-1-testing_profile-hash",
-            observer.mounts[0].file_system().mount_path().AsUTF8Unsafe());
+  EXPECT_EQ(kExtensionId, observer.mounts[0].file_system_info().extension_id());
+  EXPECT_EQ(1, observer.mounts[0].file_system_info().file_system_id());
+  base::FilePath expected_mount_path =
+      util::GetMountPath(profile_.get(), kExtensionId, file_system_id);
+  EXPECT_EQ(expected_mount_path.AsUTF8Unsafe(),
+            observer.mounts[0].file_system_info().mount_path().AsUTF8Unsafe());
   EXPECT_EQ(kFileSystemName,
-            observer.mounts[0].file_system().file_system_name());
+            observer.mounts[0].file_system_info().file_system_name());
   EXPECT_EQ(base::File::FILE_OK, observer.mounts[0].error());
   ASSERT_EQ(0u, observer.unmounts.size());
 
-  std::vector<ProvidedFileSystem> provided_file_systems =
-      file_system_provider_service_->GetMountedFileSystems();
-  ASSERT_EQ(1u, provided_file_systems.size());
+  std::vector<ProvidedFileSystemInfo> file_system_info_list =
+      file_system_provider_service_->GetProvidedFileSystemInfoList();
+  ASSERT_EQ(1u, file_system_info_list.size());
 
   file_system_provider_service_->RemoveObserver(&observer);
 }
@@ -127,9 +158,9 @@
   EXPECT_EQ(base::File::FILE_OK, observer.mounts[0].error());
   EXPECT_EQ(base::File::FILE_OK, observer.mounts[1].error());
 
-  std::vector<ProvidedFileSystem> provided_file_systems =
-      file_system_provider_service_->GetMountedFileSystems();
-  ASSERT_EQ(2u, provided_file_systems.size());
+  std::vector<ProvidedFileSystemInfo> file_system_info_list =
+      file_system_provider_service_->GetProvidedFileSystemInfoList();
+  ASSERT_EQ(2u, file_system_info_list.size());
 
   file_system_provider_service_->RemoveObserver(&observer);
 }
@@ -154,12 +185,10 @@
   ASSERT_EQ(kMaxFileSystems + 1, observer.mounts.size());
   EXPECT_EQ(base::File::FILE_ERROR_TOO_MANY_OPENED,
             observer.mounts[kMaxFileSystems].error());
-  ASSERT_EQ(kMaxFileSystems,
-            file_system_provider_service_->GetMountedFileSystems().size());
 
-  std::vector<ProvidedFileSystem> provided_file_systems =
-      file_system_provider_service_->GetMountedFileSystems();
-  ASSERT_EQ(kMaxFileSystems, provided_file_systems.size());
+  std::vector<ProvidedFileSystemInfo> file_system_info_list =
+      file_system_provider_service_->GetProvidedFileSystemInfoList();
+  ASSERT_EQ(kMaxFileSystems, file_system_info_list.size());
 
   file_system_provider_service_->RemoveObserver(&observer);
 }
@@ -179,16 +208,56 @@
   ASSERT_EQ(1u, observer.unmounts.size());
   EXPECT_EQ(base::File::FILE_OK, observer.unmounts[0].error());
 
-  EXPECT_EQ(kExtensionId, observer.unmounts[0].file_system().extension_id());
-  EXPECT_EQ(1, observer.unmounts[0].file_system().file_system_id());
-  EXPECT_EQ("/provided/mbflcebpggnecokmikipoihdbecnjfoj-1-testing_profile-hash",
-            observer.unmounts[0].file_system().mount_path().AsUTF8Unsafe());
+  EXPECT_EQ(kExtensionId,
+            observer.unmounts[0].file_system_info().extension_id());
+  EXPECT_EQ(1, observer.unmounts[0].file_system_info().file_system_id());
+  base::FilePath expected_mount_path =
+      util::GetMountPath(profile_.get(), kExtensionId, file_system_id);
+  EXPECT_EQ(
+      expected_mount_path.AsUTF8Unsafe(),
+      observer.unmounts[0].file_system_info().mount_path().AsUTF8Unsafe());
   EXPECT_EQ(kFileSystemName,
-            observer.unmounts[0].file_system().file_system_name());
+            observer.unmounts[0].file_system_info().file_system_name());
 
-  std::vector<ProvidedFileSystem> provided_file_systems =
-      file_system_provider_service_->GetMountedFileSystems();
-  ASSERT_EQ(0u, provided_file_systems.size());
+  std::vector<ProvidedFileSystemInfo> file_system_info_list =
+      file_system_provider_service_->GetProvidedFileSystemInfoList();
+  ASSERT_EQ(0u, file_system_info_list.size());
+
+  file_system_provider_service_->RemoveObserver(&observer);
+}
+
+TEST_F(FileSystemProviderServiceTest, UnmountFileSystem_OnExtensionUnload) {
+  LoggingObserver observer;
+  file_system_provider_service_->AddObserver(&observer);
+
+  int file_system_id = file_system_provider_service_->MountFileSystem(
+      kExtensionId, kFileSystemName);
+  EXPECT_LT(0, file_system_id);
+  ASSERT_EQ(1u, observer.mounts.size());
+
+  // Directly call the observer's method.
+  file_system_provider_service_->OnExtensionUnloaded(
+      profile_.get(),
+      extension_.get(),
+      extensions::UnloadedExtensionInfo::REASON_DISABLE);
+
+  ASSERT_EQ(1u, observer.unmounts.size());
+  EXPECT_EQ(base::File::FILE_OK, observer.unmounts[0].error());
+
+  EXPECT_EQ(kExtensionId,
+            observer.unmounts[0].file_system_info().extension_id());
+  EXPECT_EQ(1, observer.unmounts[0].file_system_info().file_system_id());
+  base::FilePath expected_mount_path =
+      util::GetMountPath(profile_.get(), kExtensionId, file_system_id);
+  EXPECT_EQ(
+      expected_mount_path.AsUTF8Unsafe(),
+      observer.unmounts[0].file_system_info().mount_path().AsUTF8Unsafe());
+  EXPECT_EQ(kFileSystemName,
+            observer.unmounts[0].file_system_info().file_system_name());
+
+  std::vector<ProvidedFileSystemInfo> file_system_info_list =
+      file_system_provider_service_->GetProvidedFileSystemInfoList();
+  ASSERT_EQ(0u, file_system_info_list.size());
 
   file_system_provider_service_->RemoveObserver(&observer);
 }
@@ -203,18 +272,22 @@
       kExtensionId, kFileSystemName);
   EXPECT_LT(0, file_system_id);
   ASSERT_EQ(1u, observer.mounts.size());
-  ASSERT_EQ(1u, file_system_provider_service_->GetMountedFileSystems().size());
+  ASSERT_EQ(
+      1u,
+      file_system_provider_service_->GetProvidedFileSystemInfoList().size());
 
   const bool result = file_system_provider_service_->UnmountFileSystem(
       kWrongExtensionId, file_system_id);
   EXPECT_FALSE(result);
   ASSERT_EQ(1u, observer.unmounts.size());
   EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, observer.unmounts[0].error());
-  ASSERT_EQ(1u, file_system_provider_service_->GetMountedFileSystems().size());
+  ASSERT_EQ(
+      1u,
+      file_system_provider_service_->GetProvidedFileSystemInfoList().size());
 
-  std::vector<ProvidedFileSystem> provided_file_systems =
-      file_system_provider_service_->GetMountedFileSystems();
-  ASSERT_EQ(1u, provided_file_systems.size());
+  std::vector<ProvidedFileSystemInfo> file_system_info_list =
+      file_system_provider_service_->GetProvidedFileSystemInfoList();
+  ASSERT_EQ(1u, file_system_info_list.size());
 
   file_system_provider_service_->RemoveObserver(&observer);
 }
diff --git a/chrome/browser/chromeos/fileapi/file_system_backend.cc b/chrome/browser/chromeos/fileapi/file_system_backend.cc
index d2ad6fa..62ced14 100644
--- a/chrome/browser/chromeos/fileapi/file_system_backend.cc
+++ b/chrome/browser/chromeos/fileapi/file_system_backend.cc
@@ -6,10 +6,7 @@
 
 #include "base/logging.h"
 #include "base/memory/scoped_ptr.h"
-#include "base/message_loop/message_loop.h"
 #include "base/strings/stringprintf.h"
-#include "base/strings/utf_string_conversions.h"
-#include "base/synchronization/lock.h"
 #include "chrome/browser/chromeos/fileapi/file_access_permissions.h"
 #include "chrome/browser/chromeos/fileapi/file_system_backend_delegate.h"
 #include "chromeos/dbus/cros_disks_client.h"
@@ -21,13 +18,6 @@
 #include "webkit/browser/fileapi/file_system_operation.h"
 #include "webkit/browser/fileapi/file_system_operation_context.h"
 #include "webkit/browser/fileapi/file_system_url.h"
-#include "webkit/browser/fileapi/isolated_context.h"
-
-namespace {
-
-const char kChromeUIScheme[] = "chrome";
-
-}  // namespace
 
 namespace chromeos {
 
@@ -37,11 +27,13 @@
     return false;
   return url.type() == fileapi::kFileSystemTypeNativeLocal ||
          url.type() == fileapi::kFileSystemTypeRestrictedNativeLocal ||
-         url.type() == fileapi::kFileSystemTypeDrive;
+         url.type() == fileapi::kFileSystemTypeDrive ||
+         url.type() == fileapi::kFileSystemTypeProvided;
 }
 
 FileSystemBackend::FileSystemBackend(
     FileSystemBackendDelegate* drive_delegate,
+    FileSystemBackendDelegate* file_system_provider_delegate,
     scoped_refptr<quota::SpecialStoragePolicy> special_storage_policy,
     scoped_refptr<fileapi::ExternalMountPoints> mount_points,
     fileapi::ExternalMountPoints* system_mount_points)
@@ -49,9 +41,9 @@
       file_access_permissions_(new FileAccessPermissions()),
       local_file_util_(fileapi::AsyncFileUtil::CreateForLocalFileSystem()),
       drive_delegate_(drive_delegate),
+      file_system_provider_delegate_(file_system_provider_delegate),
       mount_points_(mount_points),
-      system_mount_points_(system_mount_points) {
-}
+      system_mount_points_(system_mount_points) {}
 
 FileSystemBackend::~FileSystemBackend() {
 }
@@ -150,11 +142,6 @@
   if (!url.is_valid())
     return false;
 
-  // Permit access to mount points from internal WebUI.
-  const GURL& origin_url = url.origin();
-  if (origin_url.SchemeIs(kChromeUIScheme))
-    return true;
-
   // No extra check is needed for isolated file systems.
   if (url.mount_type() == fileapi::kFileSystemTypeIsolated)
     return true;
@@ -162,7 +149,7 @@
   if (!CanHandleURL(url))
     return false;
 
-  std::string extension_id = origin_url.host();
+  std::string extension_id = url.origin().host();
   // TODO(mtomasz): Temporarily whitelist TimeScapes. Remove this in M-31.
   // See: crbug.com/271946
   if (extension_id == "mlbmkoenclnokonejhlfakkeabdlmpek" &&
@@ -230,12 +217,18 @@
 
 fileapi::AsyncFileUtil* FileSystemBackend::GetAsyncFileUtil(
     fileapi::FileSystemType type) {
-  if (type == fileapi::kFileSystemTypeDrive)
-    return drive_delegate_->GetAsyncFileUtil(type);
-
-  DCHECK(type == fileapi::kFileSystemTypeNativeLocal ||
-         type == fileapi::kFileSystemTypeRestrictedNativeLocal);
-  return local_file_util_.get();
+  switch (type) {
+    case fileapi::kFileSystemTypeDrive:
+      return drive_delegate_->GetAsyncFileUtil(type);
+    case fileapi::kFileSystemTypeProvided:
+      return file_system_provider_delegate_->GetAsyncFileUtil(type);
+    case fileapi::kFileSystemTypeNativeLocal:
+    case fileapi::kFileSystemTypeRestrictedNativeLocal:
+      return local_file_util_.get();
+    default:
+      NOTREACHED();
+  }
+  return NULL;
 }
 
 fileapi::CopyOrMoveFileValidatorFactory*
@@ -281,14 +274,22 @@
   if (!IsAccessAllowed(url))
     return scoped_ptr<webkit_blob::FileStreamReader>();
 
-  if (url.type() == fileapi::kFileSystemTypeDrive) {
-    return drive_delegate_->CreateFileStreamReader(
-        url, offset, expected_modification_time, context);
+  switch (url.type()) {
+    case fileapi::kFileSystemTypeDrive:
+      return drive_delegate_->CreateFileStreamReader(
+          url, offset, expected_modification_time, context);
+    case fileapi::kFileSystemTypeProvided:
+      return file_system_provider_delegate_->CreateFileStreamReader(
+          url, offset, expected_modification_time, context);
+    case fileapi::kFileSystemTypeNativeLocal:
+    case fileapi::kFileSystemTypeRestrictedNativeLocal:
+      return scoped_ptr<webkit_blob::FileStreamReader>(
+          webkit_blob::FileStreamReader::CreateForFileSystemFile(
+              context, url, offset, expected_modification_time));
+    default:
+      NOTREACHED();
   }
-
-  return scoped_ptr<webkit_blob::FileStreamReader>(
-      webkit_blob::FileStreamReader::CreateForFileSystemFile(
-          context, url, offset, expected_modification_time));
+  return scoped_ptr<webkit_blob::FileStreamReader>();
 }
 
 scoped_ptr<fileapi::FileStreamWriter>
@@ -301,17 +302,24 @@
   if (!IsAccessAllowed(url))
     return scoped_ptr<fileapi::FileStreamWriter>();
 
-  if (url.type() == fileapi::kFileSystemTypeDrive)
-    return drive_delegate_->CreateFileStreamWriter(url, offset, context);
-
-  if (url.type() == fileapi::kFileSystemTypeRestrictedNativeLocal)
-    return scoped_ptr<fileapi::FileStreamWriter>();
-
-  DCHECK(url.type() == fileapi::kFileSystemTypeNativeLocal);
-  return scoped_ptr<fileapi::FileStreamWriter>(
-      fileapi::FileStreamWriter::CreateForLocalFile(
-          context->default_file_task_runner(), url.path(), offset,
-          fileapi::FileStreamWriter::OPEN_EXISTING_FILE));
+  switch (url.type()) {
+    case fileapi::kFileSystemTypeDrive:
+      return drive_delegate_->CreateFileStreamWriter(url, offset, context);
+    case fileapi::kFileSystemTypeProvided:
+      return file_system_provider_delegate_->CreateFileStreamWriter(
+          url, offset, context);
+    case fileapi::kFileSystemTypeNativeLocal:
+      return scoped_ptr<fileapi::FileStreamWriter>(
+          fileapi::FileStreamWriter::CreateForLocalFile(
+              context->default_file_task_runner(), url.path(), offset,
+              fileapi::FileStreamWriter::OPEN_EXISTING_FILE));
+    case fileapi::kFileSystemTypeRestrictedNativeLocal:
+      // Restricted native local file system is read only.
+      return scoped_ptr<fileapi::FileStreamWriter>();
+    default:
+      NOTREACHED();
+  }
+  return scoped_ptr<fileapi::FileStreamWriter>();
 }
 
 bool FileSystemBackend::GetVirtualPath(
diff --git a/chrome/browser/chromeos/fileapi/file_system_backend.h b/chrome/browser/chromeos/fileapi/file_system_backend.h
index df7bff1..9578126 100644
--- a/chrome/browser/chromeos/fileapi/file_system_backend.h
+++ b/chrome/browser/chromeos/fileapi/file_system_backend.h
@@ -5,26 +5,21 @@
 #ifndef CHROME_BROWSER_CHROMEOS_FILEAPI_FILE_SYSTEM_BACKEND_H_
 #define CHROME_BROWSER_CHROMEOS_FILEAPI_FILE_SYSTEM_BACKEND_H_
 
-#include <map>
 #include <string>
 #include <vector>
 
 #include "base/compiler_specific.h"
 #include "base/files/file_path.h"
 #include "base/memory/scoped_ptr.h"
-#include "base/synchronization/lock.h"
 #include "webkit/browser/fileapi/file_system_backend.h"
 #include "webkit/browser/quota/special_storage_policy.h"
-#include "webkit/browser/webkit_storage_browser_export.h"
 #include "webkit/common/fileapi/file_system_types.h"
 
 namespace fileapi {
 class CopyOrMoveFileValidatorFactory;
 class ExternalMountPoints;
-class FileSystemFileUtil;
 class FileSystemURL;
-class IsolatedContext;
-}
+}  // namespace fileapi
 
 namespace chromeos {
 
@@ -70,9 +65,11 @@
   // FileSystemBackend will take an ownership of a |mount_points|
   // reference. On the other hand, |system_mount_points| will be kept as a raw
   // pointer and it should outlive FileSystemBackend instance.
-  // The ownership of |drive_delegate| is also taken.
+  // The ownerships of |drive_delegate| and |file_system_provider_delegate| are
+  // also taken.
   FileSystemBackend(
       FileSystemBackendDelegate* drive_delegate,
+      FileSystemBackendDelegate* file_system_provider_delegate,
       scoped_refptr<quota::SpecialStoragePolicy> special_storage_policy,
       scoped_refptr<fileapi::ExternalMountPoints> mount_points,
       fileapi::ExternalMountPoints* system_mount_points);
@@ -135,9 +132,12 @@
   scoped_ptr<FileAccessPermissions> file_access_permissions_;
   scoped_ptr<fileapi::AsyncFileUtil> local_file_util_;
 
-  // The Delegate instance for the drive file system related operation.
+  // The delegate instance for the drive file system related operations.
   scoped_ptr<FileSystemBackendDelegate> drive_delegate_;
 
+  // The delegate instance for the provided file system related operations.
+  scoped_ptr<FileSystemBackendDelegate> file_system_provider_delegate_;
+
   // Mount points specific to the owning context (i.e. per-profile mount
   // points).
   //
diff --git a/chrome/browser/chromeos/fileapi/file_system_backend_delegate.h b/chrome/browser/chromeos/fileapi/file_system_backend_delegate.h
index fbf048d..5fcda49 100644
--- a/chrome/browser/chromeos/fileapi/file_system_backend_delegate.h
+++ b/chrome/browser/chromeos/fileapi/file_system_backend_delegate.h
@@ -7,7 +7,6 @@
 
 #include "base/basictypes.h"
 #include "base/memory/scoped_ptr.h"
-#include "base/platform_file.h"
 #include "webkit/common/fileapi/file_system_types.h"
 
 namespace base {
@@ -17,7 +16,6 @@
 namespace fileapi {
 class AsyncFileUtil;
 class FileSystemContext;
-class FileSystemOperation;
 class FileSystemURL;
 class FileStreamWriter;
 }  // namespace fileapi
diff --git a/chrome/browser/chromeos/fileapi/file_system_backend_unittest.cc b/chrome/browser/chromeos/fileapi/file_system_backend_unittest.cc
index 2b6b0d8..2687ace 100644
--- a/chrome/browser/chromeos/fileapi/file_system_backend_unittest.cc
+++ b/chrome/browser/chromeos/fileapi/file_system_backend_unittest.cc
@@ -42,6 +42,7 @@
       fileapi::ExternalMountPoints::CreateRefCounted());
   chromeos::FileSystemBackend backend(
       NULL,  // drive_delegate
+      NULL,  // file_system_provider_delegate
       storage_policy,
       mount_points.get(),
       fileapi::ExternalMountPoints::GetSystemInstance());
@@ -68,11 +69,11 @@
   scoped_refptr<fileapi::ExternalMountPoints> system_mount_points(
       fileapi::ExternalMountPoints::CreateRefCounted());
 
-  chromeos::FileSystemBackend backend(
-      NULL,  // drive_delegate
-      storage_policy,
-      mount_points.get(),
-      system_mount_points.get());
+  chromeos::FileSystemBackend backend(NULL,  // drive_delegate
+                                      NULL,  // file_system_provider_delegate
+                                      storage_policy,
+                                      mount_points.get(),
+                                      system_mount_points.get());
 
   const size_t initial_root_dirs_size = backend.GetRootDirectories().size();
 
@@ -114,11 +115,11 @@
       fileapi::ExternalMountPoints::CreateRefCounted());
   scoped_refptr<fileapi::ExternalMountPoints> system_mount_points(
       fileapi::ExternalMountPoints::CreateRefCounted());
-  chromeos::FileSystemBackend backend(
-      NULL,  // drive_delegate
-      storage_policy,
-      mount_points.get(),
-      system_mount_points.get());
+  chromeos::FileSystemBackend backend(NULL,  // drive_delegate
+                                      NULL,  // file_system_provider_delegate
+                                      storage_policy,
+                                      mount_points.get(),
+                                      system_mount_points.get());
 
   std::string extension("ddammdhioacbehjngdmkjcjbnfginlla");
 
@@ -198,13 +199,6 @@
   backend.RevokeAccessForExtension(extension);
   EXPECT_FALSE(backend.IsAccessAllowed(
       CreateFileSystemURL(extension, "removable/foo", mount_points.get())));
-
-  fileapi::FileSystemURL internal_url = FileSystemURL::CreateForTest(
-      GURL("chrome://foo"),
-      fileapi::kFileSystemTypeExternal,
-      base::FilePath(FPL("removable/")));
-  // Internal WebUI should have full access.
-  EXPECT_TRUE(backend.IsAccessAllowed(internal_url));
 }
 
 TEST(ChromeOSFileSystemBackendTest, GetVirtualPathConflictWithSystemPoints) {
@@ -214,11 +208,11 @@
       fileapi::ExternalMountPoints::CreateRefCounted());
   scoped_refptr<fileapi::ExternalMountPoints> system_mount_points(
       fileapi::ExternalMountPoints::CreateRefCounted());
-  chromeos::FileSystemBackend backend(
-      NULL,  // drive_delegate
-      storage_policy,
-      mount_points.get(),
-      system_mount_points.get());
+  chromeos::FileSystemBackend backend(NULL,  // drive_delegate
+                                      NULL,  // file_system_provider_delegate
+                                      storage_policy,
+                                      mount_points.get(),
+                                      system_mount_points.get());
 
   const fileapi::FileSystemType type = fileapi::kFileSystemTypeNativeLocal;
   const fileapi::FileSystemMountOption option =
diff --git a/chrome/browser/chromeos/geolocation/OWNERS b/chrome/browser/chromeos/geolocation/OWNERS
new file mode 100644
index 0000000..2dcc458
--- /dev/null
+++ b/chrome/browser/chromeos/geolocation/OWNERS
@@ -0,0 +1 @@
+alemate@chromium.org
diff --git a/chrome/browser/chromeos/geolocation/geoposition.cc b/chrome/browser/chromeos/geolocation/geoposition.cc
new file mode 100644
index 0000000..6266be2
--- /dev/null
+++ b/chrome/browser/chromeos/geolocation/geoposition.cc
@@ -0,0 +1,54 @@
+// 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.
+
+#include "chrome/browser/chromeos/geolocation/geoposition.h"
+
+#include "base/strings/stringprintf.h"
+
+namespace {
+
+// Sentinel values to mark invalid data.
+const double kBadLatitudeLongitude = 200;
+const int kBadAccuracy = -1;  // Accuracy must be non-negative.
+
+}  // namespace
+
+namespace chromeos {
+
+Geoposition::Geoposition()
+    : latitude(kBadLatitudeLongitude),
+      longitude(kBadLatitudeLongitude),
+      accuracy(kBadAccuracy),
+      error_code(0),
+      status(STATUS_NONE) {
+}
+
+bool Geoposition::Valid() const {
+  return latitude >= -90. && latitude <= 90. && longitude >= -180. &&
+         longitude <= 180. && accuracy >= 0. && !timestamp.is_null() &&
+         status == STATUS_OK;
+}
+
+std::string Geoposition::ToString() const {
+  static const char* const status2string[] = {
+      "NONE",
+      "OK",
+      "SERVER_ERROR",
+      "NETWORK_ERROR",
+      "TIMEOUT"
+  };
+
+  return base::StringPrintf(
+      "latitude=%f, longitude=%f, accuracy=%f, error_code=%u, "
+      "error_message='%s', status=%u (%s)",
+      latitude,
+      longitude,
+      accuracy,
+      error_code,
+      error_message.c_str(),
+      (unsigned)status,
+      (status < arraysize(status2string) ? status2string[status] : "unknown"));
+};
+
+}  // namespace chromeos
diff --git a/chrome/browser/chromeos/geolocation/geoposition.h b/chrome/browser/chromeos/geolocation/geoposition.h
new file mode 100644
index 0000000..64723f7
--- /dev/null
+++ b/chrome/browser/chromeos/geolocation/geoposition.h
@@ -0,0 +1,65 @@
+// 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.
+
+#ifndef CHROME_BROWSER_CHROMEOS_GEOLOCATION_GEOPOSITION_H_
+#define CHROME_BROWSER_CHROMEOS_GEOLOCATION_GEOPOSITION_H_
+
+#include <string>
+
+#include "base/time/time.h"
+
+namespace chromeos {
+
+// This structure represents Google Maps Geolocation response.
+// Based on content/public/common/geoposition.h .
+struct Geoposition {
+  // Geolocation API client status.
+  // (Server status is reported in "error_code" field.)
+  enum Status {
+    STATUS_NONE,
+    STATUS_OK,             // Response successful.
+    STATUS_SERVER_ERROR,   // Received error object.
+    STATUS_NETWORK_ERROR,  // Received bad or no response.
+    STATUS_TIMEOUT,        // Request stopped because of timeout.
+    STATUS_LAST = STATUS_TIMEOUT
+  };
+
+  // All fields are initialized to sentinel values marking them as invalid. The
+  // status is set to STATUS_NONE.
+  Geoposition();
+
+  // A valid fix has a valid latitude, longitude, accuracy and timestamp.
+  bool Valid() const;
+
+  // Serialize to string.
+  std::string ToString() const;
+
+  // Latitude in decimal degrees north.
+  double latitude;
+
+  // Longitude in decimal degrees west.
+  double longitude;
+
+  // Accuracy of horizontal position in meters.
+  double accuracy;
+
+  // Error object data:
+  // Value of "error.code".
+  int error_code;
+
+  // Human-readable error message.
+  std::string error_message;
+
+  // Absolute time, when this position was acquired. This is
+  // taken from the host computer's system clock (i.e. from Time::Now(), not the
+  // source device's clock).
+  base::Time timestamp;
+
+  // See enum above.
+  Status status;
+};
+
+}  // namespace chromeos
+
+#endif  // CHROME_BROWSER_CHROMEOS_GEOLOCATION_GEOPOSITION_H_
diff --git a/chrome/browser/chromeos/geolocation/simple_geolocation_provider.cc b/chrome/browser/chromeos/geolocation/simple_geolocation_provider.cc
new file mode 100644
index 0000000..f0c8ad5
--- /dev/null
+++ b/chrome/browser/chromeos/geolocation/simple_geolocation_provider.cc
@@ -0,0 +1,73 @@
+// 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.
+
+#include "chrome/browser/chromeos/geolocation/simple_geolocation_provider.h"
+
+#include <algorithm>
+#include <iterator>
+
+#include "base/bind.h"
+#include "base/time/time.h"
+#include "chrome/browser/chromeos/geolocation/geoposition.h"
+#include "net/url_request/url_request_context_getter.h"
+#include "url/gurl.h"
+
+namespace chromeos {
+
+namespace {
+const char kDefaultGeolocationProviderUrl[] =
+    "https://www.googleapis.com/geolocation/v1/geolocate?";
+}  // namespace
+
+SimpleGeolocationProvider::SimpleGeolocationProvider(
+    net::URLRequestContextGetter* url_context_getter,
+    const GURL& url)
+    : url_context_getter_(url_context_getter), url_(url) {
+}
+
+SimpleGeolocationProvider::~SimpleGeolocationProvider() {
+  DCHECK(thread_checker_.CalledOnValidThread());
+}
+
+void SimpleGeolocationProvider::RequestGeolocation(
+    base::TimeDelta timeout,
+    SimpleGeolocationRequest::ResponseCallback callback) {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  SimpleGeolocationRequest* request(
+      new SimpleGeolocationRequest(url_context_getter_, url_, timeout));
+  requests_.push_back(request);
+
+  // SimpleGeolocationProvider owns all requests. It is safe to pass unretained
+  // "this" because destruction of SimpleGeolocationProvider cancels all
+  // requests.
+  SimpleGeolocationRequest::ResponseCallback callback_tmp(
+      base::Bind(&SimpleGeolocationProvider::OnGeolocationResponse,
+                 base::Unretained(this),
+                 request,
+                 callback));
+  request->MakeRequest(callback_tmp);
+}
+
+// static
+GURL SimpleGeolocationProvider::DefaultGeolocationProviderURL() {
+  return GURL(kDefaultGeolocationProviderUrl);
+}
+
+void SimpleGeolocationProvider::OnGeolocationResponse(
+    SimpleGeolocationRequest* request,
+    SimpleGeolocationRequest::ResponseCallback callback,
+    const Geoposition& geoposition,
+    bool server_error,
+    const base::TimeDelta elapsed) {
+  DCHECK(thread_checker_.CalledOnValidThread());
+
+  callback.Run(geoposition, server_error, elapsed);
+
+  ScopedVector<SimpleGeolocationRequest>::iterator new_end =
+      std::remove(requests_.begin(), requests_.end(), request);
+  DCHECK_EQ(std::distance(new_end, requests_.end()), 1);
+  requests_.erase(new_end, requests_.end());
+}
+
+}  // namespace chromeos
diff --git a/chrome/browser/chromeos/geolocation/simple_geolocation_provider.h b/chrome/browser/chromeos/geolocation/simple_geolocation_provider.h
new file mode 100644
index 0000000..a3e3d04
--- /dev/null
+++ b/chrome/browser/chromeos/geolocation/simple_geolocation_provider.h
@@ -0,0 +1,70 @@
+// 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.
+
+#ifndef CHROME_BROWSER_CHROMEOS_GEOLOCATION_SIMPLE_GEOLOCATION_PROVIDER_H_
+#define CHROME_BROWSER_CHROMEOS_GEOLOCATION_SIMPLE_GEOLOCATION_PROVIDER_H_
+
+#include "base/macros.h"
+#include "base/memory/ref_counted.h"
+#include "base/memory/scoped_vector.h"
+#include "base/threading/thread_checker.h"
+#include "base/time/time.h"
+#include "chrome/browser/chromeos/geolocation/simple_geolocation_request.h"
+#include "url/gurl.h"
+
+namespace net {
+class URLRequestContextGetter;
+}
+
+namespace chromeos {
+
+// This class implements Google Maps Geolocation API.
+//
+// SimpleGeolocationProvider must be created and used on the same thread.
+//
+// Note: this should probably be a singleton to monitor requests rate.
+// But as it is used only diring ChromeOS Out-of-Box, it can be owned by
+// WizardController for now.
+class SimpleGeolocationProvider {
+ public:
+  SimpleGeolocationProvider(net::URLRequestContextGetter* url_context_getter,
+                            const GURL& url);
+  virtual ~SimpleGeolocationProvider();
+
+  // Initiates new request (See SimpleGeolocationRequest for parameters
+  // description.)
+  void RequestGeolocation(base::TimeDelta timeout,
+                          SimpleGeolocationRequest::ResponseCallback callback);
+
+  // Returns default geolocation service URL.
+  static GURL DefaultGeolocationProviderURL();
+
+ private:
+  // Geolocation response callback. Deletes request from requests_.
+  void OnGeolocationResponse(
+      SimpleGeolocationRequest* request,
+      SimpleGeolocationRequest::ResponseCallback callback,
+      const Geoposition& geoposition,
+      bool server_error,
+      const base::TimeDelta elapsed);
+
+  scoped_refptr<net::URLRequestContextGetter> url_context_getter_;
+
+  // URL of the Google Maps Geolocation API.
+  const GURL url_;
+
+  // Requests in progress.
+  // SimpleGeolocationProvider owns all requests, so this vector is deleted on
+  // destroy.
+  ScopedVector<SimpleGeolocationRequest> requests_;
+
+  // Creation and destruction should happen on the same thread.
+  base::ThreadChecker thread_checker_;
+
+  DISALLOW_COPY_AND_ASSIGN(SimpleGeolocationProvider);
+};
+
+}  // namespace chromeos
+
+#endif  // CHROME_BROWSER_CHROMEOS_GEOLOCATION_SIMPLE_GEOLOCATION_PROVIDER_H_
diff --git a/chrome/browser/chromeos/geolocation/simple_geolocation_request.cc b/chrome/browser/chromeos/geolocation/simple_geolocation_request.cc
new file mode 100644
index 0000000..b3b8134
--- /dev/null
+++ b/chrome/browser/chromeos/geolocation/simple_geolocation_request.cc
@@ -0,0 +1,387 @@
+// 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.
+
+#include "chrome/browser/chromeos/geolocation/simple_geolocation_request.h"
+
+#include <algorithm>
+#include <string>
+
+#include "base/json/json_reader.h"
+#include "base/metrics/histogram.h"
+#include "base/metrics/sparse_histogram.h"
+#include "base/strings/string_number_conversions.h"
+#include "base/strings/stringprintf.h"
+#include "base/time/time.h"
+#include "base/values.h"
+#include "chrome/browser/chromeos/geolocation/geoposition.h"
+#include "chrome/browser/chromeos/geolocation/simple_geolocation_provider.h"
+#include "google_apis/google_api_keys.h"
+#include "net/base/escape.h"
+#include "net/base/load_flags.h"
+#include "net/http/http_status_code.h"
+#include "net/url_request/url_fetcher.h"
+#include "net/url_request/url_request_context_getter.h"
+#include "net/url_request/url_request_status.h"
+
+// Location resolve timeout is usually 1 minute, so 2 minutes with 50 buckets
+// should be enough.
+#define UMA_HISTOGRAM_LOCATION_RESPONSE_TIMES(name, sample)         \
+  UMA_HISTOGRAM_CUSTOM_TIMES(name,                                  \
+                             sample,                                \
+                             base::TimeDelta::FromMilliseconds(10), \
+                             base::TimeDelta::FromMinutes(2),       \
+                             50)
+
+namespace chromeos {
+
+namespace {
+
+// The full request text. (no parameters are supported by now)
+const char kSimpleGeolocationRequestBody[] = "{\"considerIP\": \"true\"}";
+
+// Response data.
+const char kLocationString[] = "location";
+const char kLatString[] = "lat";
+const char kLngString[] = "lng";
+const char kAccuracyString[] = "accuracy";
+// Error object and its contents.
+const char kErrorString[] = "error";
+// "errors" array in "erorr" object is ignored.
+const char kCodeString[] = "code";
+const char kMessageString[] = "message";
+
+// We are using "sparse" histograms for the number of retry attempts,
+// so we need to explicitly limit maximum value (in case something goes wrong).
+const size_t kMaxRetriesValueInHistograms = 20;
+
+// Sleep between geolocation request retry on HTTP error.
+const unsigned int kResolveGeolocationRetrySleepOnServerErrorSeconds = 5;
+
+// Sleep between geolocation request retry on bad server response.
+const unsigned int kResolveGeolocationRetrySleepBadResponseSeconds = 10;
+
+enum SimpleGeolocationRequestEvent {
+  // NOTE: Do not renumber these as that would confuse interpretation of
+  // previously logged data. When making changes, also update the enum list
+  // in tools/metrics/histograms/histograms.xml to keep it in sync.
+  SIMPLE_GEOLOCATION_REQUEST_EVENT_REQUEST_START = 0,
+  SIMPLE_GEOLOCATION_REQUEST_EVENT_RESPONSE_SUCCESS = 1,
+  SIMPLE_GEOLOCATION_REQUEST_EVENT_RESPONSE_NOT_OK = 2,
+  SIMPLE_GEOLOCATION_REQUEST_EVENT_RESPONSE_EMPTY = 3,
+  SIMPLE_GEOLOCATION_REQUEST_EVENT_RESPONSE_MALFORMED = 4,
+
+  // NOTE: Add entries only immediately above this line.
+  SIMPLE_GEOLOCATION_REQUEST_EVENT_COUNT = 5
+};
+
+enum SimpleGeolocationRequestResult {
+  // NOTE: Do not renumber these as that would confuse interpretation of
+  // previously logged data. When making changes, also update the enum list
+  // in tools/metrics/histograms/histograms.xml to keep it in sync.
+  SIMPLE_GEOLOCATION_REQUEST_RESULT_SUCCESS = 0,
+  SIMPLE_GEOLOCATION_REQUEST_RESULT_FAILURE = 1,
+  SIMPLE_GEOLOCATION_REQUEST_RESULT_SERVER_ERROR = 2,
+  SIMPLE_GEOLOCATION_REQUEST_RESULT_CANCELLED = 3,
+
+  // NOTE: Add entries only immediately above this line.
+  SIMPLE_GEOLOCATION_REQUEST_RESULT_COUNT = 4
+};
+
+// Too many requests (more than 1) mean there is a problem in implementation.
+void RecordUmaEvent(SimpleGeolocationRequestEvent event) {
+  UMA_HISTOGRAM_ENUMERATION("SimpleGeolocation.Request.Event",
+                            event,
+                            SIMPLE_GEOLOCATION_REQUEST_EVENT_COUNT);
+}
+
+void RecordUmaResponseCode(int code) {
+  UMA_HISTOGRAM_SPARSE_SLOWLY("SimpleGeolocation.Request.ResponseCode", code);
+}
+
+// Slow geolocation resolve leads to bad user experience.
+void RecordUmaResponseTime(base::TimeDelta elapsed, bool success) {
+  if (success) {
+    UMA_HISTOGRAM_LOCATION_RESPONSE_TIMES(
+        "SimpleGeolocation.Request.ResponseSuccessTime", elapsed);
+  } else {
+    UMA_HISTOGRAM_LOCATION_RESPONSE_TIMES(
+        "SimpleGeolocation.Request.ResponseFailureTime", elapsed);
+  }
+}
+
+void RecordUmaResult(SimpleGeolocationRequestResult result, size_t retries) {
+  UMA_HISTOGRAM_ENUMERATION("SimpleGeolocation.Request.Result",
+                            result,
+                            SIMPLE_GEOLOCATION_REQUEST_RESULT_COUNT);
+  UMA_HISTOGRAM_SPARSE_SLOWLY("SimpleGeolocation.Request.Retries",
+                              std::min(retries, kMaxRetriesValueInHistograms));
+}
+
+// Creates the request url to send to the server.
+GURL GeolocationRequestURL(const GURL& url) {
+  if (url != SimpleGeolocationProvider::DefaultGeolocationProviderURL())
+    return url;
+
+  std::string api_key = google_apis::GetAPIKey();
+  if (api_key.empty())
+    return url;
+
+  std::string query(url.query());
+  if (!query.empty())
+    query += "&";
+  query += "key=" + net::EscapeQueryParamValue(api_key, true);
+  GURL::Replacements replacements;
+  replacements.SetQueryStr(query);
+  return url.ReplaceComponents(replacements);
+}
+
+void PrintGeolocationError(const GURL& server_url,
+                           const std::string& message,
+                           Geoposition* position) {
+  position->status = Geoposition::STATUS_SERVER_ERROR;
+  position->error_message =
+      base::StringPrintf("SimpleGeolocation provider at '%s' : %s.",
+                         server_url.GetOrigin().spec().c_str(),
+                         message.c_str());
+  VLOG(1) << "SimpleGeolocationRequest::GetGeolocationFromResponse() : "
+          << position->error_message;
+}
+
+// Parses the server response body. Returns true if parsing was successful.
+// Sets |*position| to the parsed Geolocation if a valid position was received,
+// otherwise leaves it unchanged.
+bool ParseServerResponse(const GURL& server_url,
+                         const std::string& response_body,
+                         Geoposition* position) {
+  DCHECK(position);
+
+  if (response_body.empty()) {
+    PrintGeolocationError(
+        server_url, "Server returned empty response", position);
+    RecordUmaEvent(SIMPLE_GEOLOCATION_REQUEST_EVENT_RESPONSE_EMPTY);
+    return false;
+  }
+  VLOG(1) << "SimpleGeolocationRequest::ParseServerResponse() : "
+             "Parsing response '" << response_body << "'";
+
+  // Parse the response, ignoring comments.
+  std::string error_msg;
+  scoped_ptr<base::Value> response_value(base::JSONReader::ReadAndReturnError(
+      response_body, base::JSON_PARSE_RFC, NULL, &error_msg));
+  if (response_value == NULL) {
+    PrintGeolocationError(
+        server_url, "JSONReader failed: " + error_msg, position);
+    RecordUmaEvent(SIMPLE_GEOLOCATION_REQUEST_EVENT_RESPONSE_MALFORMED);
+    return false;
+  }
+
+  base::DictionaryValue* response_object = NULL;
+  if (!response_value->GetAsDictionary(&response_object)) {
+    PrintGeolocationError(
+        server_url,
+        "Unexpected response type : " +
+            base::StringPrintf("%u", response_value->GetType()),
+        position);
+    RecordUmaEvent(SIMPLE_GEOLOCATION_REQUEST_EVENT_RESPONSE_MALFORMED);
+    return false;
+  }
+
+  base::DictionaryValue* error_object = NULL;
+  base::DictionaryValue* location_object = NULL;
+  response_object->GetDictionaryWithoutPathExpansion(kLocationString,
+                                                     &location_object);
+  response_object->GetDictionaryWithoutPathExpansion(kErrorString,
+                                                     &error_object);
+
+  position->timestamp = base::Time::Now();
+
+  if (error_object) {
+    if (!error_object->GetStringWithoutPathExpansion(
+            kMessageString, &(position->error_message))) {
+      position->error_message = "Server returned error without message.";
+    }
+
+    // Ignore result (code defaults to zero).
+    error_object->GetIntegerWithoutPathExpansion(kCodeString,
+                                                 &(position->error_code));
+  }
+
+  if (location_object) {
+    if (!location_object->GetDoubleWithoutPathExpansion(
+            kLatString, &(position->latitude))) {
+      PrintGeolocationError(server_url, "Missing 'lat' attribute.", position);
+      RecordUmaEvent(SIMPLE_GEOLOCATION_REQUEST_EVENT_RESPONSE_MALFORMED);
+      return false;
+    }
+    if (!location_object->GetDoubleWithoutPathExpansion(
+            kLngString, &(position->longitude))) {
+      PrintGeolocationError(server_url, "Missing 'lon' attribute.", position);
+      RecordUmaEvent(SIMPLE_GEOLOCATION_REQUEST_EVENT_RESPONSE_MALFORMED);
+      return false;
+    }
+    if (!response_object->GetDoubleWithoutPathExpansion(
+            kAccuracyString, &(position->accuracy))) {
+      PrintGeolocationError(
+          server_url, "Missing 'accuracy' attribute.", position);
+      RecordUmaEvent(SIMPLE_GEOLOCATION_REQUEST_EVENT_RESPONSE_MALFORMED);
+      return false;
+    }
+  }
+
+  if (error_object) {
+    position->status = Geoposition::STATUS_SERVER_ERROR;
+    return false;
+  }
+  // Empty response is STATUS_OK but not Valid().
+  position->status = Geoposition::STATUS_OK;
+  return true;
+}
+
+// Attempts to extract a position from the response. Detects and indicates
+// various failure cases.
+bool GetGeolocationFromResponse(bool http_success,
+                                int status_code,
+                                const std::string& response_body,
+                                const GURL& server_url,
+                                Geoposition* position) {
+
+  // HttpPost can fail for a number of reasons. Most likely this is because
+  // we're offline, or there was no response.
+  if (!http_success) {
+    PrintGeolocationError(server_url, "No response received", position);
+    RecordUmaEvent(SIMPLE_GEOLOCATION_REQUEST_EVENT_RESPONSE_EMPTY);
+    return false;
+  }
+  if (status_code != net::HTTP_OK) {
+    std::string message = "Returned error code ";
+    message += base::IntToString(status_code);
+    PrintGeolocationError(server_url, message, position);
+    RecordUmaEvent(SIMPLE_GEOLOCATION_REQUEST_EVENT_RESPONSE_NOT_OK);
+    return false;
+  }
+
+  return ParseServerResponse(server_url, response_body, position);
+}
+
+}  // namespace
+
+SimpleGeolocationRequest::SimpleGeolocationRequest(
+    net::URLRequestContextGetter* url_context_getter,
+    const GURL& service_url,
+    base::TimeDelta timeout)
+    : url_context_getter_(url_context_getter),
+      service_url_(service_url),
+      timeout_(timeout),
+      retries_(0) {
+}
+
+SimpleGeolocationRequest::~SimpleGeolocationRequest() {
+  DCHECK(thread_checker_.CalledOnValidThread());
+
+  // If callback is not empty, request is cancelled.
+  if (!callback_.is_null()) {
+    RecordUmaResponseTime(base::Time::Now() - request_started_at_, false);
+    RecordUmaResult(SIMPLE_GEOLOCATION_REQUEST_RESULT_CANCELLED, retries_);
+  }
+}
+
+void SimpleGeolocationRequest::StartRequest() {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  RecordUmaEvent(SIMPLE_GEOLOCATION_REQUEST_EVENT_REQUEST_START);
+  ++retries_;
+
+  url_fetcher_.reset(
+      net::URLFetcher::Create(request_url_, net::URLFetcher::POST, this));
+  url_fetcher_->SetRequestContext(url_context_getter_);
+  url_fetcher_->SetUploadData("application/json",
+                              std::string(kSimpleGeolocationRequestBody));
+  url_fetcher_->SetLoadFlags(net::LOAD_BYPASS_CACHE |
+                             net::LOAD_DISABLE_CACHE |
+                             net::LOAD_DO_NOT_SAVE_COOKIES |
+                             net::LOAD_DO_NOT_SEND_COOKIES |
+                             net::LOAD_DO_NOT_SEND_AUTH_DATA);
+  url_fetcher_->Start();
+}
+
+void SimpleGeolocationRequest::MakeRequest(const ResponseCallback& callback) {
+  callback_ = callback;
+  request_url_ = GeolocationRequestURL(service_url_);
+  timeout_timer_.Start(
+      FROM_HERE, timeout_, this, &SimpleGeolocationRequest::OnTimeout);
+  request_started_at_ = base::Time::Now();
+  StartRequest();
+}
+
+void SimpleGeolocationRequest::Retry(bool server_error) {
+  const base::TimeDelta delay = base::TimeDelta::FromSeconds(
+      server_error ? kResolveGeolocationRetrySleepOnServerErrorSeconds
+                   : kResolveGeolocationRetrySleepBadResponseSeconds);
+  request_scheduled_.Start(
+      FROM_HERE, delay, this, &SimpleGeolocationRequest::StartRequest);
+}
+
+void SimpleGeolocationRequest::OnURLFetchComplete(
+    const net::URLFetcher* source) {
+  DCHECK_EQ(url_fetcher_.get(), source);
+
+  net::URLRequestStatus status = source->GetStatus();
+  int response_code = source->GetResponseCode();
+  RecordUmaResponseCode(response_code);
+
+  std::string data;
+  source->GetResponseAsString(&data);
+  const bool parse_success = GetGeolocationFromResponse(
+      status.is_success(), response_code, data, source->GetURL(), &position_);
+  const bool server_error =
+      !status.is_success() || (response_code >= 500 && response_code < 600);
+  const bool success = parse_success && position_.Valid();
+  url_fetcher_.reset();
+
+  DVLOG(1) << "SimpleGeolocationRequest::OnURLFetchComplete(): position={"
+           << position_.ToString() << "}";
+
+  if (!success) {
+    Retry(server_error);
+    return;
+  }
+  const base::TimeDelta elapsed = base::Time::Now() - request_started_at_;
+  RecordUmaResponseTime(elapsed, success);
+
+  RecordUmaResult(SIMPLE_GEOLOCATION_REQUEST_RESULT_SUCCESS, retries_);
+
+  ReplyAndDestroySelf(elapsed, server_error);
+  // "this" is already destroyed here.
+}
+
+void SimpleGeolocationRequest::ReplyAndDestroySelf(
+    const base::TimeDelta elapsed,
+    bool server_error) {
+  url_fetcher_.reset();
+  timeout_timer_.Stop();
+  request_scheduled_.Stop();
+
+  ResponseCallback callback = callback_;
+
+  // Empty callback is used to identify "completed or not yet started request".
+  callback_.Reset();
+
+  // callback.Run() usually destroys SimpleGeolocationRequest, because this is
+  // the way callback is implemented in GeolocationProvider.
+  callback.Run(position_, server_error, elapsed);
+  // "this" is already destroyed here.
+}
+
+void SimpleGeolocationRequest::OnTimeout() {
+  const SimpleGeolocationRequestResult result =
+      (position_.status == Geoposition::STATUS_SERVER_ERROR
+           ? SIMPLE_GEOLOCATION_REQUEST_RESULT_SERVER_ERROR
+           : SIMPLE_GEOLOCATION_REQUEST_RESULT_FAILURE);
+  RecordUmaResult(result, retries_);
+  position_.status = Geoposition::STATUS_TIMEOUT;
+  const base::TimeDelta elapsed = base::Time::Now() - request_started_at_;
+  ReplyAndDestroySelf(elapsed, true /* server_error */);
+  // "this" is already destroyed here.
+}
+
+}  // namespace chromeos
diff --git a/chrome/browser/chromeos/geolocation/simple_geolocation_request.h b/chrome/browser/chromeos/geolocation/simple_geolocation_request.h
new file mode 100644
index 0000000..3cc47e3
--- /dev/null
+++ b/chrome/browser/chromeos/geolocation/simple_geolocation_request.h
@@ -0,0 +1,111 @@
+// 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.
+
+#ifndef CHROME_BROWSER_CHROMEOS_GEOLOCATION_SIMPLE_GEOLOCATION_REQUEST_H_
+#define CHROME_BROWSER_CHROMEOS_GEOLOCATION_SIMPLE_GEOLOCATION_REQUEST_H_
+
+#include "base/basictypes.h"
+#include "base/callback.h"
+#include "base/compiler_specific.h"
+#include "base/memory/ref_counted.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/threading/thread_checker.h"
+#include "base/timer/timer.h"
+#include "chrome/browser/chromeos/geolocation/geoposition.h"
+#include "net/url_request/url_fetcher.h"
+#include "net/url_request/url_fetcher_delegate.h"
+#include "url/gurl.h"
+
+namespace net {
+class URLRequestContextGetter;
+}
+
+namespace chromeos {
+
+// Sends request to a server to get local geolocation information.
+// It performs formatting of the request and interpretation of the response.
+// Request is owned and destroyed by caller (usually SimpleGeolocationProvider).
+// - If error occurs, request is retried until timeout.
+// - On successul response, callback is called.
+// - On timeout, callback with last (failed) position is called.
+// (position.status is set to STATUS_TIMEOUT.)
+// - If request is destroyed while callback has not beed called yet, request
+// is silently cancelled.
+class SimpleGeolocationRequest : private net::URLFetcherDelegate {
+ public:
+  // Called when a new geo geolocation information is available.
+  // The second argument indicates whether there was a server error or not.
+  // It is true when there was a server or network error - either no response
+  // or a 500 error code.
+  typedef base::Callback<void(const Geoposition& /* position*/,
+                              bool /* server_error */,
+                              const base::TimeDelta elapsed)> ResponseCallback;
+
+  // |url| is the server address to which the request wil be sent.
+  // |timeout| retry request on error until timeout.
+  SimpleGeolocationRequest(net::URLRequestContextGetter* url_context_getter,
+                           const GURL& service_url,
+                           base::TimeDelta timeout);
+
+  virtual ~SimpleGeolocationRequest();
+
+  // Initiates request.
+  // Note: if request object is destroyed before callback is called,
+  // request will be silently cancelled.
+  void MakeRequest(const ResponseCallback& callback);
+
+ private:
+  // net::URLFetcherDelegate
+  virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE;
+
+  // Start new request.
+  void StartRequest();
+
+  // Schedules retry.
+  void Retry(bool server_error);
+
+  // Run callback and destroy "this".
+  void ReplyAndDestroySelf(const base::TimeDelta elapsed, bool server_error);
+
+  // Called by timeout_timer_ .
+  void OnTimeout();
+
+  scoped_refptr<net::URLRequestContextGetter> url_context_getter_;
+
+  // Service URL from constructor arguments.
+  const GURL service_url_;
+
+  ResponseCallback callback_;
+
+  // Actual URL with parameters.
+  GURL request_url_;
+
+  scoped_ptr<net::URLFetcher> url_fetcher_;
+
+  // When request was actually started.
+  base::Time request_started_at_;
+
+  const base::TimeDelta timeout_;
+
+  // Pending retry.
+  base::OneShotTimer<SimpleGeolocationRequest> request_scheduled_;
+
+  // Stop request on timeout.
+  base::OneShotTimer<SimpleGeolocationRequest> timeout_timer_;
+
+  // Number of retry attempts.
+  unsigned retries_;
+
+  // This is updated on each retry.
+  Geoposition position_;
+
+  // Creation and destruction should happen on the same thread.
+  base::ThreadChecker thread_checker_;
+
+  DISALLOW_COPY_AND_ASSIGN(SimpleGeolocationRequest);
+};
+
+}  // namespace chromeos
+
+#endif  // CHROME_BROWSER_CHROMEOS_GEOLOCATION_SIMPLE_GEOLOCATION_REQUEST_H_
diff --git a/chrome/browser/chromeos/input_method/candidate_window_controller_impl.cc b/chrome/browser/chromeos/input_method/candidate_window_controller_impl.cc
index 5cdb9b2..8f9154d 100644
--- a/chrome/browser/chromeos/input_method/candidate_window_controller_impl.cc
+++ b/chrome/browser/chromeos/input_method/candidate_window_controller_impl.cc
@@ -49,7 +49,7 @@
       new ash::ime::CandidateWindowView(ash::Shell::GetContainer(
           active_window ? active_window->GetRootWindow()
                         : ash::Shell::GetTargetRootWindow(),
-          ash::kShellWindowId_InputMethodContainer));
+          ash::kShellWindowId_SettingBubbleContainer));
   candidate_window_view_->AddObserver(this);
   candidate_window_view_->SetCursorBounds(cursor_bounds_, composition_head_);
   views::Widget* widget = candidate_window_view_->InitWidget();
diff --git a/chrome/browser/chromeos/input_method/input_method_engine.cc b/chrome/browser/chromeos/input_method/input_method_engine.cc
index df220ef..aaa9539 100644
--- a/chrome/browser/chromeos/input_method/input_method_engine.cc
+++ b/chrome/browser/chromeos/input_method/input_method_engine.cc
@@ -521,8 +521,7 @@
 void InputMethodEngine::Enable() {
   active_ = true;
   observer_->OnActivate(engine_id_);
-  if (current_input_type_ == ui::TEXT_INPUT_TYPE_NONE)
-    current_input_type_ = ui::TEXT_INPUT_TYPE_TEXT;
+  current_input_type_ = IMEBridge::Get()->GetCurrentTextInputType();
   FocusIn(IMEEngineHandlerInterface::InputContext(
       current_input_type_, ui::TEXT_INPUT_MODE_DEFAULT));
   EnableInputView(true);
diff --git a/chrome/browser/chromeos/input_method/input_method_engine_unittest.cc b/chrome/browser/chromeos/input_method/input_method_engine_unittest.cc
index 0e3c931..7a8434b 100644
--- a/chrome/browser/chromeos/input_method/input_method_engine_unittest.cc
+++ b/chrome/browser/chromeos/input_method/input_method_engine_unittest.cc
@@ -111,6 +111,7 @@
     languages_.push_back("en-US");
     layouts_.push_back("us");
     InitInputMethod();
+    IMEBridge::Initialize();
   }
   virtual ~InputMethodEngineTest() {
     engine_.reset();
@@ -136,6 +137,7 @@
     IMEEngineHandlerInterface::InputContext input_context(
         input_type, ui::TEXT_INPUT_MODE_DEFAULT);
     engine_->FocusIn(input_context);
+    IMEBridge::Get()->SetCurrentTextInputType(input_type);
   }
 
   scoped_ptr<InputMethodEngine> engine_;
diff --git a/chrome/browser/chromeos/input_method/mode_indicator_controller.cc b/chrome/browser/chromeos/input_method/mode_indicator_controller.cc
index 8cdb7f5..716cb08 100644
--- a/chrome/browser/chromeos/input_method/mode_indicator_controller.cc
+++ b/chrome/browser/chromeos/input_method/mode_indicator_controller.cc
@@ -106,7 +106,7 @@
 
   aura::Window* parent =
       ash::Shell::GetContainer(ash::wm::GetActiveWindow()->GetRootWindow(),
-                               ash::kShellWindowId_InputMethodContainer);
+                               ash::kShellWindowId_SettingBubbleContainer);
   ash::ime::ModeIndicatorView* mi_view = new ash::ime::ModeIndicatorView(
       parent, cursor_bounds_, short_name);
   views::BubbleDelegateView::CreateBubble(mi_view);
diff --git a/chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver.cc b/chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver.cc
index 309be17..aac70ab 100644
--- a/chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver.cc
+++ b/chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver.cc
@@ -32,6 +32,7 @@
 #include "ui/wm/core/user_activity_detector.h"
 
 using extensions::Extension;
+using extensions::ExtensionGarbageCollector;
 using extensions::SandboxedUnpacker;
 
 namespace chromeos {
@@ -46,6 +47,13 @@
       default_profile)->extension_service();
 }
 
+ExtensionGarbageCollector* GetDefaultExtensionGarbageCollector() {
+  Profile* default_profile = ProfileHelper::GetSigninProfile();
+  if (!default_profile)
+    return NULL;
+  return ExtensionGarbageCollector::Get(default_profile);
+}
+
 typedef base::Callback<void(
     scoped_refptr<Extension>,
     const base::FilePath&)> UnpackCallback;
@@ -106,11 +114,11 @@
     const base::FilePath& screensaver_extension_path) {
   DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::FILE));
 
-  ExtensionService* service = GetDefaultExtensionService();
   // TODO(rkc): This is a HACK, please remove this method from extension
   // service once this code is deprecated. See crbug.com/280363
-  if (service)
-    service->garbage_collector()->disable_garbage_collection();
+  ExtensionGarbageCollector* gc = GetDefaultExtensionGarbageCollector();
+  if (gc)
+    gc->disable_garbage_collection();
 
   std::string error;
   scoped_refptr<Extension> screensaver_extension =
@@ -174,11 +182,11 @@
 
   // If the extension was unpacked.
   if (!extension_base_path_.empty()) {
-    ExtensionService* service = GetDefaultExtensionService();
     // TODO(rkc): This is a HACK, please remove this method from extension
     // service once this code is deprecated. See crbug.com/280363
-    if (service)
-      service->garbage_collector()->enable_garbage_collection();
+    ExtensionGarbageCollector* gc = GetDefaultExtensionGarbageCollector();
+    if (gc)
+      gc->enable_garbage_collection();
 
     // Delete it.
     content::BrowserThread::PostTask(
diff --git a/chrome/browser/chromeos/login/app_launch_signin_screen.cc b/chrome/browser/chromeos/login/app_launch_signin_screen.cc
index 53c1314..d2a91f0 100644
--- a/chrome/browser/chromeos/login/app_launch_signin_screen.cc
+++ b/chrome/browser/chromeos/login/app_launch_signin_screen.cc
@@ -132,10 +132,6 @@
   NOTREACHED();
 }
 
-void AppLaunchSigninScreen::ShowResetScreen() {
-  NOTREACHED();
-}
-
 void AppLaunchSigninScreen::ShowKioskAutolaunchScreen() {
   NOTREACHED();
 }
diff --git a/chrome/browser/chromeos/login/app_launch_signin_screen.h b/chrome/browser/chromeos/login/app_launch_signin_screen.h
index fa1f5f8..7279da0 100644
--- a/chrome/browser/chromeos/login/app_launch_signin_screen.h
+++ b/chrome/browser/chromeos/login/app_launch_signin_screen.h
@@ -65,7 +65,6 @@
   virtual void ResyncUserData() OVERRIDE;
   virtual void ShowEnterpriseEnrollmentScreen() OVERRIDE;
   virtual void ShowKioskEnableScreen() OVERRIDE;
-  virtual void ShowResetScreen() OVERRIDE;
   virtual void ShowKioskAutolaunchScreen() OVERRIDE;
   virtual void ShowWrongHWIDScreen() OVERRIDE;
   virtual void SetWebUIHandler(
diff --git a/chrome/browser/chromeos/login/chrome_restart_request.cc b/chrome/browser/chromeos/login/chrome_restart_request.cc
index b1fc38e..317615d 100644
--- a/chrome/browser/chromeos/login/chrome_restart_request.cc
+++ b/chrome/browser/chromeos/login/chrome_restart_request.cc
@@ -200,6 +200,7 @@
     cc::switches::kUIDisablePartialSwap,
     chromeos::switches::kDbusStub,
     chromeos::switches::kDisableLoginAnimations,
+    chromeos::switches::kEnableConsumerManagement,
     chromeos::switches::kHasChromeOSDiamondKey,
     chromeos::switches::kHasChromeOSKeyboard,
     chromeos::switches::kLoginProfile,
diff --git a/chrome/browser/chromeos/login/existing_user_controller.cc b/chrome/browser/chromeos/login/existing_user_controller.cc
index 08eb483..2332158 100644
--- a/chrome/browser/chromeos/login/existing_user_controller.cc
+++ b/chrome/browser/chromeos/login/existing_user_controller.cc
@@ -591,10 +591,6 @@
           weak_factory_.GetWeakPtr()));
 }
 
-void ExistingUserController::OnStartDeviceReset() {
-  ShowResetScreen();
-}
-
 void ExistingUserController::OnStartKioskAutolaunchScreen() {
   ShowKioskAutolaunchScreen();
 }
diff --git a/chrome/browser/chromeos/login/existing_user_controller.h b/chrome/browser/chromeos/login/existing_user_controller.h
index c7f543c..b854603 100644
--- a/chrome/browser/chromeos/login/existing_user_controller.h
+++ b/chrome/browser/chromeos/login/existing_user_controller.h
@@ -91,7 +91,6 @@
   virtual void OnUserSelected(const std::string& username) OVERRIDE;
   virtual void OnStartEnterpriseEnrollment() OVERRIDE;
   virtual void OnStartKioskEnableScreen() OVERRIDE;
-  virtual void OnStartDeviceReset() OVERRIDE;
   virtual void OnStartKioskAutolaunchScreen() OVERRIDE;
   virtual void ResetPublicSessionAutoLoginTimer() OVERRIDE;
   virtual void ResyncUserData() OVERRIDE;
diff --git a/chrome/browser/chromeos/login/fake_login_utils.cc b/chrome/browser/chromeos/login/fake_login_utils.cc
index 678ba11..908823d 100644
--- a/chrome/browser/chromeos/login/fake_login_utils.cc
+++ b/chrome/browser/chromeos/login/fake_login_utils.cc
@@ -5,18 +5,17 @@
 #include "chrome/browser/chromeos/login/fake_login_utils.h"
 
 #include "base/command_line.h"
-#include "base/path_service.h"
 #include "base/prefs/pref_service.h"
-#include "chrome/browser/browser_process.h"
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/chromeos/login/login_display_host.h"
 #include "chrome/browser/chromeos/login/mock_authenticator.h"
 #include "chrome/browser/chromeos/login/supervised_user_manager.h"
+#include "chrome/browser/chromeos/login/user.h"
+#include "chrome/browser/chromeos/login/user_flow.h"
+#include "chrome/browser/chromeos/login/user_manager.h"
 #include "chrome/browser/first_run/first_run.h"
-#include "chrome/browser/profiles/profile_manager.h"
+#include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/startup/startup_browser_creator.h"
-#include "chrome/common/chrome_constants.h"
-#include "chrome/common/chrome_paths.h"
 #include "chrome/common/pref_names.h"
 #include "chrome/test/base/testing_profile.h"
 #include "content/public/browser/notification_service.h"
@@ -61,7 +60,12 @@
                                     LoginUtils::Delegate* delegate) {
   UserManager::Get()->UserLoggedIn(
       user_context.username, user_context.username_hash, false);
-  Profile* profile = CreateProfile(user_context.username_hash);
+  User* user = UserManager::Get()->FindUserAndModify(user_context.username);
+  DCHECK(user);
+
+  // Make sure that we get the real Profile instead of the login Profile.
+  user->set_profile_is_created();
+  Profile* profile = UserManager::Get()->GetProfileByUser(user);
 
   if (UserManager::Get()->IsLoggedInAsLocallyManagedUser()) {
     User* active_user = UserManager::Get()->GetActiveUser();
@@ -109,14 +113,6 @@
   NOTREACHED() << "Method not implemented.";
 }
 
-Profile* FakeLoginUtils::CreateProfile(const std::string& username_hash) {
-  base::FilePath path;
-  PathService::Get(chrome::DIR_USER_DATA, &path);
-  path = path.AppendASCII(chrome::kProfileDirPrefix + username_hash);
-  Profile* profile = g_browser_process->profile_manager()->GetProfile(path);
-  return profile;
-}
-
 void FakeLoginUtils::SetExpectedCredentials(const std::string& username,
                                             const std::string& password) {
   expected_username_ = username;
diff --git a/chrome/browser/chromeos/login/fake_login_utils.h b/chrome/browser/chromeos/login/fake_login_utils.h
index 23a834e..478d382 100644
--- a/chrome/browser/chromeos/login/fake_login_utils.h
+++ b/chrome/browser/chromeos/login/fake_login_utils.h
@@ -42,8 +42,6 @@
   }
 
  private:
-  Profile* CreateProfile(const std::string& username_hash);
-
   scoped_refptr<Authenticator> authenticator_;
   std::string expected_username_;
   std::string expected_password_;
diff --git a/chrome/browser/chromeos/login/kiosk_browsertest.cc b/chrome/browser/chromeos/login/kiosk_browsertest.cc
index 9b81e07..2b62db7 100644
--- a/chrome/browser/chromeos/login/kiosk_browsertest.cc
+++ b/chrome/browser/chromeos/login/kiosk_browsertest.cc
@@ -602,7 +602,8 @@
   WaitForAppLaunchSuccess();
 }
 
-IN_PROC_BROWSER_TEST_F(KioskTest, LaunchAppNetworkPortal) {
+// Flaky on bots. http://crbug.com/365507
+IN_PROC_BROWSER_TEST_F(KioskTest, DISABLED_LaunchAppNetworkPortal) {
   // Mock network could be configured without the owner password.
   ScopedCanConfigureNetwork can_configure_network(true, false);
 
diff --git a/chrome/browser/chromeos/login/login_display.h b/chrome/browser/chromeos/login/login_display.h
index dea9efb..ebc9174 100644
--- a/chrome/browser/chromeos/login/login_display.h
+++ b/chrome/browser/chromeos/login/login_display.h
@@ -97,9 +97,6 @@
     // Called when the user requests kiosk enable screen.
     virtual void OnStartKioskEnableScreen() = 0;
 
-    // Called when the user requests device reset.
-    virtual void OnStartDeviceReset() = 0;
-
     // Called when the owner permission for kiosk app auto launch is requested.
     virtual void OnStartKioskAutolaunchScreen() = 0;
 
diff --git a/chrome/browser/chromeos/login/login_display_host_impl.cc b/chrome/browser/chromeos/login/login_display_host_impl.cc
index 76d675d..4692b4e 100644
--- a/chrome/browser/chromeos/login/login_display_host_impl.cc
+++ b/chrome/browser/chromeos/login/login_display_host_impl.cc
@@ -48,6 +48,7 @@
 #include "chrome/browser/chromeos/login/webui_login_view.h"
 #include "chrome/browser/chromeos/login/wizard_controller.h"
 #include "chrome/browser/chromeos/mobile_config.h"
+#include "chrome/browser/chromeos/net/delay_network_call.h"
 #include "chrome/browser/chromeos/policy/auto_enrollment_client.h"
 #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
 #include "chrome/browser/chromeos/system/input_device_settings.h"
@@ -1186,6 +1187,13 @@
     return;
   }
 
+  if (StartupUtils::IsEulaAccepted()) {
+    DelayNetworkCall(
+        ServicesCustomizationDocument::GetInstance()
+            ->EnsureCustomizationAppliedClosure(),
+        base::TimeDelta::FromMilliseconds(kDefaultNetworkRetryDelayMS));
+  }
+
   bool show_login_screen =
       (first_screen_name.empty() && oobe_complete) ||
       first_screen_name == chromeos::WizardController::kLoginScreenName;
diff --git a/chrome/browser/chromeos/login/login_location_monitor.cc b/chrome/browser/chromeos/login/login_location_monitor.cc
deleted file mode 100644
index c1c528a..0000000
--- a/chrome/browser/chromeos/login/login_location_monitor.cc
+++ /dev/null
@@ -1,143 +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.
-
-#include "chrome/browser/chromeos/login/login_location_monitor.h"
-
-#include "base/bind.h"
-#include "base/logging.h"
-#include "base/strings/stringprintf.h"
-#include "chrome/browser/chromeos/login/wizard_controller.h"
-#include "content/public/browser/browser_thread.h"
-#include "content/public/browser/geolocation_provider.h"
-
-namespace chromeos {
-
-namespace {
-
-std::string GeopositionToStringForDebug(const content::Geoposition& pos) {
-  return base::StringPrintf(
-      "latitude=%f, longitude=%f, altitude=%f, accuracy=%f, "
-      "altitude_accuracy=%f, heading=%f, speed=%f",
-      pos.latitude,
-      pos.longitude,
-      pos.altitude,
-      pos.accuracy,
-      pos.altitude_accuracy,
-      pos.heading,
-      pos.speed);
-}
-
-}  // namespace
-
-LoginLocationMonitor::~LoginLocationMonitor() {
-}
-
-// static
-LoginLocationMonitor* LoginLocationMonitor::GetInstance() {
-  DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
-  return Singleton<LoginLocationMonitor>::get();
-}
-
-// static
-void LoginLocationMonitor::InstallLocationCallback(
-    const base::TimeDelta timeout) {
-  DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
-
-  LoginLocationMonitor* self = GetInstance();
-
-  self->started_ = base::Time::Now();
-  self->request_timeout_.Start(
-      FROM_HERE,
-      timeout,
-      base::Bind(&LoginLocationMonitor::DoRemoveLocationCallback,
-                 self->on_location_update_));
-
-  content::BrowserThread::PostTask(
-      content::BrowserThread::IO,
-      FROM_HERE,
-      base::Bind(&DoInstallLocationCallback, self->on_location_update_));
-}
-
-// static
-void LoginLocationMonitor::RemoveLocationCallback() {
-  DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
-
-  LoginLocationMonitor* self = GetInstance();
-  self->request_timeout_.Stop();
-  content::BrowserThread::PostTask(
-      content::BrowserThread::IO,
-      FROM_HERE,
-      base::Bind(&DoRemoveLocationCallback, self->on_location_update_));
-}
-
-LoginLocationMonitor::LoginLocationMonitor()
-    : weak_factory_(this),
-      on_location_update_(
-          base::Bind(&LoginLocationMonitor::OnLocationUpdatedIO)) {
-  DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
-}
-
-// static
-void LoginLocationMonitor::DoInstallLocationCallback(
-    content::GeolocationProvider::LocationUpdateCallback callback) {
-  DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
-  content::GeolocationProvider* provider =
-      content::GeolocationProvider::GetInstance();
-
-  provider->AddLocationUpdateCallback(callback, false);
-  provider->UserDidOptIntoLocationServices();
-}
-
-// static
-void LoginLocationMonitor::DoRemoveLocationCallback(
-    content::GeolocationProvider::LocationUpdateCallback callback) {
-  DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
-  content::GeolocationProvider* provider =
-      content::GeolocationProvider::GetInstance();
-  provider->RemoveLocationUpdateCallback(callback);
-}
-
-void LoginLocationMonitor::OnLocationUpdatedIO(
-    const content::Geoposition& position) {
-  DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
-  if (!position.Validate()) {
-    VLOG(1)
-        << "LoginLocationMonitor::OnLocationUpdatedIO(): invalid position: {"
-        << GeopositionToStringForDebug(position) << "}";
-    return;
-  }
-  VLOG(1) << "LoginLocationMonitor::OnLocationUpdatedIO(): valid position: {"
-          << GeopositionToStringForDebug(position) << "}";
-
-  content::BrowserThread::PostTask(
-      content::BrowserThread::UI,
-      FROM_HERE,
-      base::Bind(&LoginLocationMonitor::OnLocationUpdatedUI, position));
-}
-
-void LoginLocationMonitor::OnLocationUpdatedUI(
-    const content::Geoposition& position) {
-  DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
-  DCHECK(position.Validate());
-
-  LoginLocationMonitor* self = GetInstance();
-
-  if (!self->request_timeout_.IsRunning()) {
-    VLOG(1)
-        << "LoginLocationMonitor::OnLocationUpdatedUI(): Service is stopped: {"
-        << GeopositionToStringForDebug(position) << "}";
-    return;
-  }
-
-  RemoveLocationCallback();
-
-  // We need a cumulative timeout for timezone resolve, that is
-  // (location resolve + timezone resolve). This is used to measure
-  // timeout for the following timezone resolve.
-  const base::TimeDelta elapsed = base::Time::Now() - self->started_;
-
-  WizardController::OnLocationUpdated(position, elapsed);
-}
-
-}  // namespace chromeos
diff --git a/chrome/browser/chromeos/login/login_location_monitor.h b/chrome/browser/chromeos/login/login_location_monitor.h
deleted file mode 100644
index 40c8754..0000000
--- a/chrome/browser/chromeos/login/login_location_monitor.h
+++ /dev/null
@@ -1,58 +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.
-
-#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_LOGIN_LOCATION_MONITOR_H_
-#define CHROME_BROWSER_CHROMEOS_LOGIN_LOGIN_LOCATION_MONITOR_H_
-
-#include "base/macros.h"
-#include "base/memory/singleton.h"
-#include "base/memory/weak_ptr.h"
-#include "base/time/time.h"
-#include "base/timer/timer.h"
-#include "content/public/browser/geolocation_provider.h"
-
-namespace chromeos {
-
-// This class does one-time Geoposition resolve for OOBE.
-// It stops after first valid position received or when timeout occurs.
-// Valid position is sent to WizardController to resolve timezone.
-class LoginLocationMonitor {
- public:
-  ~LoginLocationMonitor();
-
-  // Called on UI thread.
-  static void InstallLocationCallback(const base::TimeDelta timeout);
-  static void RemoveLocationCallback();
-
- private:
-  friend struct DefaultSingletonTraits<LoginLocationMonitor>;
-  friend class Singleton<chromeos::LoginLocationMonitor>;
-
-  LoginLocationMonitor();
-
-  // Called on UI thread.
-  static LoginLocationMonitor* GetInstance();
-
-  // Called on IO thread.
-  static void DoInstallLocationCallback(
-      content::GeolocationProvider::LocationUpdateCallback callback);
-  static void DoRemoveLocationCallback(
-      content::GeolocationProvider::LocationUpdateCallback callback);
-
-  // OnLocationUpdated comes on IO thread and should be passed to UI thread.
-  static void OnLocationUpdatedIO(const content::Geoposition& position);
-  static void OnLocationUpdatedUI(const content::Geoposition& position);
-
-  base::WeakPtrFactory<LoginLocationMonitor> weak_factory_;
-  content::GeolocationProvider::LocationUpdateCallback on_location_update_;
-  base::OneShotTimer<LoginLocationMonitor> request_timeout_;
-
-  base::Time started_;
-
-  DISALLOW_COPY_AND_ASSIGN(LoginLocationMonitor);
-};
-
-}  // namespace chromeos
-
-#endif  // CHROME_BROWSER_CHROMEOS_LOGIN_LOGIN_LOCATION_MONITOR_H_
diff --git a/chrome/browser/chromeos/login/managed/supervised_user_authentication.cc b/chrome/browser/chromeos/login/managed/supervised_user_authentication.cc
index 87478c6..db514a9 100644
--- a/chrome/browser/chromeos/login/managed/supervised_user_authentication.cc
+++ b/chrome/browser/chromeos/login/managed/supervised_user_authentication.cc
@@ -48,20 +48,6 @@
         sizeof(result)));
 }
 
-std::string BuildPasswordForHashWithSaltSchema(
-  const std::string& salt,
-  const std::string& plain_password) {
-  scoped_ptr<crypto::SymmetricKey> key(
-      crypto::SymmetricKey::DeriveKeyFromPassword(
-          crypto::SymmetricKey::AES,
-          plain_password, salt,
-          kNumIterations, kKeySizeInBits));
-  std::string raw_result, result;
-  key->GetRawKey(&raw_result);
-  base::Base64Encode(raw_result, &result);
-  return result;
-}
-
 std::string BuildRawHMACKey() {
   scoped_ptr<crypto::SymmetricKey> key(crypto::SymmetricKey::GenerateRandomKey(
       crypto::SymmetricKey::AES, kHMACKeySizeInBits));
@@ -71,33 +57,6 @@
   return result;
 }
 
-std::string BuildPasswordSignature(const std::string& password,
-                                   int revision,
-                                   const std::string& base64_signature_key) {
-  ac::chrome::managedaccounts::account::Secret secret;
-  secret.set_revision(revision);
-  secret.set_secret(password);
-  std::string buffer;
-  if (!secret.SerializeToString(&buffer))
-    LOG(FATAL) << "Protobuf::SerializeToString failed";
-  std::string signature_key;
-  base::Base64Decode(base64_signature_key, &signature_key);
-
-  crypto::HMAC hmac(crypto::HMAC::SHA256);
-  if (!hmac.Init(signature_key))
-    LOG(FATAL) << "HMAC::Init failed";
-
-  unsigned char out_bytes[kSignatureLength];
-  if (!hmac.Sign(buffer, out_bytes, sizeof(out_bytes)))
-    LOG(FATAL) << "HMAC::Sign failed";
-
-  std::string raw_result(out_bytes, out_bytes + sizeof(out_bytes));
-
-  std::string result;
-  base::Base64Encode(raw_result, &result);
-  return result;
-}
-
 base::DictionaryValue* LoadPasswordData(base::FilePath profile_dir) {
   JSONFileValueSerializer serializer(profile_dir.Append(kPasswordUpdateFile));
   std::string error_message;
@@ -354,4 +313,48 @@
       base::Bind(&OnPasswordDataLoaded, success_callback, failure_callback));
 }
 
+// static
+std::string SupervisedUserAuthentication::BuildPasswordForHashWithSaltSchema(
+    const std::string& salt,
+    const std::string& plain_password) {
+  scoped_ptr<crypto::SymmetricKey> key(
+      crypto::SymmetricKey::DeriveKeyFromPassword(crypto::SymmetricKey::AES,
+                                                  plain_password,
+                                                  salt,
+                                                  kNumIterations,
+                                                  kKeySizeInBits));
+  std::string raw_result, result;
+  key->GetRawKey(&raw_result);
+  base::Base64Encode(raw_result, &result);
+  return result;
+}
+
+std::string SupervisedUserAuthentication::BuildPasswordSignature(
+    const std::string& password,
+    int revision,
+    const std::string& base64_signature_key) {
+  ac::chrome::managedaccounts::account::Secret secret;
+  secret.set_revision(revision);
+  secret.set_secret(password);
+  std::string buffer;
+  if (!secret.SerializeToString(&buffer))
+    LOG(FATAL) << "Protobuf::SerializeToString failed";
+  std::string signature_key;
+  base::Base64Decode(base64_signature_key, &signature_key);
+
+  crypto::HMAC hmac(crypto::HMAC::SHA256);
+  if (!hmac.Init(signature_key))
+    LOG(FATAL) << "HMAC::Init failed";
+
+  unsigned char out_bytes[kSignatureLength];
+  if (!hmac.Sign(buffer, out_bytes, sizeof(out_bytes)))
+    LOG(FATAL) << "HMAC::Sign failed";
+
+  std::string raw_result(out_bytes, out_bytes + sizeof(out_bytes));
+
+  std::string result;
+  base::Base64Encode(raw_result, &result);
+  return result;
+}
+
 }  // namespace chromeos
diff --git a/chrome/browser/chromeos/login/managed/supervised_user_authentication.h b/chrome/browser/chromeos/login/managed/supervised_user_authentication.h
index 0762866..d443e30 100644
--- a/chrome/browser/chromeos/login/managed/supervised_user_authentication.h
+++ b/chrome/browser/chromeos/login/managed/supervised_user_authentication.h
@@ -105,6 +105,15 @@
   // Utility method that gets schema version for |user_id| from Local State.
   Schema GetPasswordSchema(const std::string& user_id);
 
+  static std::string BuildPasswordForHashWithSaltSchema(
+      const std::string& salt,
+      const std::string& plain_password);
+
+  static std::string BuildPasswordSignature(
+      const std::string& password,
+      int revision,
+      const std::string& base64_signature_key);
+
  private:
   SupervisedUserManager* owner_;
 
diff --git a/chrome/browser/chromeos/login/managed/supervised_user_authentication_unittest.cc b/chrome/browser/chromeos/login/managed/supervised_user_authentication_unittest.cc
new file mode 100644
index 0000000..01579a1
--- /dev/null
+++ b/chrome/browser/chromeos/login/managed/supervised_user_authentication_unittest.cc
@@ -0,0 +1,52 @@
+// 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.
+#include "chrome/browser/chromeos/login/managed/supervised_user_authentication.h"
+
+#include "base/values.h"
+#include "chrome/browser/chromeos/login/supervised_user_manager.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace chromeos {
+
+class SupervisedUserAuthenticationTest : public testing::Test {
+ protected:
+  SupervisedUserAuthenticationTest();
+  virtual ~SupervisedUserAuthenticationTest();
+
+  // testing::Test:
+  virtual void SetUp() OVERRIDE;
+  virtual void TearDown() OVERRIDE;
+
+  DISALLOW_COPY_AND_ASSIGN(SupervisedUserAuthenticationTest);
+};
+
+SupervisedUserAuthenticationTest::SupervisedUserAuthenticationTest() {}
+
+SupervisedUserAuthenticationTest::~SupervisedUserAuthenticationTest() {}
+
+void SupervisedUserAuthenticationTest::SetUp() {}
+
+void SupervisedUserAuthenticationTest::TearDown() {}
+
+TEST_F(SupervisedUserAuthenticationTest, SignatureGeneration) {
+  std::string password = "password";
+  int revision = 1;
+  std::string salt =
+      "204cc733ebe526ea9a84885de904eb7a578d86a4c385d252dce275d9d9675c37";
+  std::string expected_salted_password =
+      "OSL3HZZSfK+mDQTYUh3lXhgAzJNWhYz52ax0Bleny7Q=";
+  std::string signature_key = "p5TR/34XX0R7IMuffH14BiL1vcdSD8EajPzdIg09z9M=";
+  std::string expected_signature =
+      "KOPQmmJcMr9iMkr36N1cX+G9gDdBBu7zutAxNayPMN4=";
+
+  std::string salted_password =
+      SupervisedUserAuthentication::BuildPasswordForHashWithSaltSchema(
+          salt, password);
+  ASSERT_EQ(expected_salted_password, salted_password);
+  std::string signature = SupervisedUserAuthentication::BuildPasswordSignature(
+      salted_password, revision, signature_key);
+  ASSERT_EQ(expected_signature, signature);
+}
+
+}  //  namespace chromeos
diff --git a/chrome/browser/chromeos/login/managed/supervised_user_login_flow.cc b/chrome/browser/chromeos/login/managed/supervised_user_login_flow.cc
index 18c5180..6860f71 100644
--- a/chrome/browser/chromeos/login/managed/supervised_user_login_flow.cc
+++ b/chrome/browser/chromeos/login/managed/supervised_user_login_flow.cc
@@ -153,14 +153,14 @@
                            base::Bind(&SupervisedUserLoginFlow::OnNewKeyAdded,
                                       weak_factory_.GetWeakPtr(),
                                       Passed(&data_copy)));
-  } else if (SupervisedUserAuthentication::SCHEMA_PLAIN == current_schema) {
+  } else if (SupervisedUserAuthentication::SCHEMA_SALT_HASHED ==
+             current_schema) {
     VLOG(1) << "Updating the key";
 
     if (auth->HasIncompleteKey(user_id())) {
       // We need to use Migrate instead of Authorized Update privilege.
       key.privileges = kCryptohomeManagedUserIncompleteKeyPrivileges;
     }
-
     // Just update the key.
     DCHECK_EQ(context_.key_label, kCryptohomeManagedUserKeyLabel);
     authenticator_->UpdateKeyAuthorized(
diff --git a/chrome/browser/chromeos/login/multi_profile_first_run_notification.cc b/chrome/browser/chromeos/login/multi_profile_first_run_notification.cc
deleted file mode 100644
index acbe4b2..0000000
--- a/chrome/browser/chromeos/login/multi_profile_first_run_notification.cc
+++ /dev/null
@@ -1,115 +0,0 @@
-// Copyright 2013 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 "chrome/browser/chromeos/login/multi_profile_first_run_notification.h"
-
-#include "ash/system/system_notifier.h"
-#include "base/prefs/pref_service.h"
-#include "base/strings/string16.h"
-#include "chrome/browser/chromeos/login/user_manager.h"
-#include "chrome/browser/prefs/pref_service_syncable.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/common/pref_names.h"
-#include "grit/generated_resources.h"
-#include "grit/theme_resources.h"
-#include "ui/base/l10n/l10n_util.h"
-#include "ui/base/resource/resource_bundle.h"
-#include "ui/message_center/message_center.h"
-#include "ui/message_center/notification.h"
-#include "ui/message_center/notification_delegate.h"
-
-using message_center::Notification;
-
-namespace chromeos {
-
-namespace {
-
-const char kNotificationId[] = "chrome:://login/multiprofile";
-
-class MultiProfileFirstRunNotificationDelegate
-    : public message_center::NotificationDelegate {
- public:
-  explicit MultiProfileFirstRunNotificationDelegate(
-      const base::Closure& user_close_callback)
-      : user_close_callback_(user_close_callback) {}
-
-  // Overridden from message_center::NotificationDelegate:
-  virtual void Display() OVERRIDE {}
-  virtual void Error() OVERRIDE {}
-  virtual void Close(bool by_user) OVERRIDE {
-    if (by_user)
-      user_close_callback_.Run();
-  }
-  virtual void Click() OVERRIDE {}
-
- protected:
-  virtual ~MultiProfileFirstRunNotificationDelegate() {}
-
- private:
-  base::Closure user_close_callback_;
-
-  DISALLOW_COPY_AND_ASSIGN(MultiProfileFirstRunNotificationDelegate);
-};
-
-}  // namespace
-
-MultiProfileFirstRunNotification::MultiProfileFirstRunNotification()
-    : weak_ptr_factory_(this) {}
-
-MultiProfileFirstRunNotification::~MultiProfileFirstRunNotification() {}
-
-// static
-void MultiProfileFirstRunNotification::RegisterProfilePrefs(
-    user_prefs::PrefRegistrySyncable* registry) {
-  registry->RegisterBooleanPref(
-      prefs::kMultiProfileNotificationDismissed,
-      false,
-      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
-  registry->RegisterBooleanPref(
-      prefs::kMultiProfileNeverShowIntro,
-      false,
-      user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
-  registry->RegisterBooleanPref(
-      prefs::kMultiProfileWarningShowDismissed,
-      false,
-      user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
-}
-
-void MultiProfileFirstRunNotification::UserProfilePrepared(
-    Profile* user_profile) {
-  if (!UserManager::IsMultipleProfilesAllowed() ||
-      UserManager::Get()->GetLoggedInUsers().size() > 1 ||
-      user_profile->GetPrefs()->GetBoolean(
-          prefs::kMultiProfileNotificationDismissed)) {
-    return;
-  }
-
-  const base::string16 title;
-  const base::string16 display_source;
-  scoped_ptr<Notification> notification(new Notification(
-      message_center::NOTIFICATION_TYPE_SIMPLE,
-      kNotificationId,
-      title,
-      l10n_util::GetStringUTF16(IDS_MULTI_PROFILES_WARNING),
-      ui::ResourceBundle::GetSharedInstance().GetImageNamed(
-          IDR_NOTIFICATION_ALERT),
-      display_source,
-      message_center::NotifierId(
-          message_center::NotifierId::SYSTEM_COMPONENT,
-          ash::system_notifier::kNotifierMultiProfileFirstRun),
-      message_center::RichNotificationData(),
-      new MultiProfileFirstRunNotificationDelegate(
-          base::Bind(&MultiProfileFirstRunNotification::OnDismissed,
-                     weak_ptr_factory_.GetWeakPtr(),
-                     user_profile))));
-  notification->SetSystemPriority();
-  message_center::MessageCenter::Get()->AddNotification(notification.Pass());
-}
-
-void MultiProfileFirstRunNotification::OnDismissed(Profile* user_profile) {
-  user_profile->GetPrefs()->SetBoolean(
-      prefs::kMultiProfileNotificationDismissed, true);
-}
-
-}  // namespace chromeos
diff --git a/chrome/browser/chromeos/login/multi_profile_first_run_notification.h b/chrome/browser/chromeos/login/multi_profile_first_run_notification.h
deleted file mode 100644
index 0a0d98c..0000000
--- a/chrome/browser/chromeos/login/multi_profile_first_run_notification.h
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2013 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 CHROME_BROWSER_CHROMEOS_LOGIN_MULTI_PROFILE_FIRST_RUN_NOTIFICATION_H_
-#define CHROME_BROWSER_CHROMEOS_LOGIN_MULTI_PROFILE_FIRST_RUN_NOTIFICATION_H_
-
-#include "base/basictypes.h"
-#include "base/memory/weak_ptr.h"
-
-namespace user_prefs {
-class PrefRegistrySyncable;
-}
-
-class Profile;
-
-namespace chromeos {
-
-class MultiProfileFirstRunNotification {
- public:
-  MultiProfileFirstRunNotification();
-  ~MultiProfileFirstRunNotification();
-
-  static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
-
-  // Invoked when the user profile is prepared. Show the notification for
-  // the primary user when multiprofile is enabled and user has not dismissed
-  // it yet.
-  void UserProfilePrepared(Profile* user_profile);
-
- private:
-  // Invoked when user dismisses the notification.
-  void OnDismissed(Profile* user_profile);
-
-  base::WeakPtrFactory<MultiProfileFirstRunNotification> weak_ptr_factory_;
-
-  DISALLOW_COPY_AND_ASSIGN(MultiProfileFirstRunNotification);
-};
-
-}  // namespace chromeos
-
-#endif  // CHROME_BROWSER_CHROMEOS_LOGIN_MULTI_PROFILE_FIRST_RUN_NOTIFICATION_H_
diff --git a/chrome/browser/chromeos/login/oobe_browsertest.cc b/chrome/browser/chromeos/login/oobe_browsertest.cc
index 2e0a4d6..4fcf641 100644
--- a/chrome/browser/chromeos/login/oobe_browsertest.cc
+++ b/chrome/browser/chromeos/login/oobe_browsertest.cc
@@ -79,8 +79,12 @@
   DISALLOW_COPY_AND_ASSIGN(OobeTest);
 };
 
-// crbug.com/342478
-IN_PROC_BROWSER_TEST_F(OobeTest, DISABLED_NewUser) {
+#if defined(OS_CHROMEOS)
+#define MAYBE_NewUser DISABLED_NewUser
+#else
+#define MAYBE_NewUser NewUser
+#endif
+IN_PROC_BROWSER_TEST_F(OobeTest, MAYBE_NewUser) {
   chromeos::WizardController::SkipPostLoginScreensForTesting();
   chromeos::WizardController* wizard_controller =
       chromeos::WizardController::default_controller();
@@ -100,7 +104,12 @@
     content::NotificationService::AllSources()).Wait();
 }
 
-IN_PROC_BROWSER_TEST_F(OobeTest, Accelerator) {
+#if defined(OS_CHROMEOS)
+#define MAYBE_Accelerator DISABLED_Accelerator
+#else
+#define MAYBE_Accelerator Accelerator
+#endif
+IN_PROC_BROWSER_TEST_F(OobeTest, MAYBE_Accelerator) {
   chromeos::WizardController::SkipPostLoginScreensForTesting();
   chromeos::WizardController* wizard_controller =
       chromeos::WizardController::default_controller();
diff --git a/chrome/browser/chromeos/login/screens/core_oobe_actor.h b/chrome/browser/chromeos/login/screens/core_oobe_actor.h
index d818f7a..7dbc691 100644
--- a/chrome/browser/chromeos/login/screens/core_oobe_actor.h
+++ b/chrome/browser/chromeos/login/screens/core_oobe_actor.h
@@ -36,6 +36,7 @@
   virtual void ClearErrors() = 0;
   virtual void ReloadContent(const base::DictionaryValue& dictionary) = 0;
   virtual void ShowControlBar(bool show) = 0;
+  virtual void ShowDeviceResetScreen() = 0;
 };
 
 }  // namespace chromeos
diff --git a/chrome/browser/chromeos/login/simple_web_view_dialog.cc b/chrome/browser/chromeos/login/simple_web_view_dialog.cc
index 607481b..1e92bc1 100644
--- a/chrome/browser/chromeos/login/simple_web_view_dialog.cc
+++ b/chrome/browser/chromeos/login/simple_web_view_dialog.cc
@@ -185,7 +185,7 @@
                                       this, true);
 
   // Reload button.
-  reload_ = new ReloadButton(location_bar_, command_updater_.get());
+  reload_ = new ReloadButton(command_updater_.get());
   reload_->set_triggerable_event_flags(ui::EF_LEFT_MOUSE_BUTTON |
                                        ui::EF_MIDDLE_MOUSE_BUTTON);
   reload_->set_tag(IDC_RELOAD);
diff --git a/chrome/browser/chromeos/login/user.h b/chrome/browser/chromeos/login/user.h
index a553651..2d2399b 100644
--- a/chrome/browser/chromeos/login/user.h
+++ b/chrome/browser/chromeos/login/user.h
@@ -204,6 +204,7 @@
   friend class UserImageManagerImpl;
   // For testing:
   friend class MockUserManager;
+  friend class FakeLoginUtils;
   friend class FakeUserManager;
   friend class UserAddingScreenTest;
 
diff --git a/chrome/browser/chromeos/login/user_image.h b/chrome/browser/chromeos/login/user_image.h
index b1e3933..a228c90 100644
--- a/chrome/browser/chromeos/login/user_image.h
+++ b/chrome/browser/chromeos/login/user_image.h
@@ -5,6 +5,7 @@
 #ifndef CHROME_BROWSER_CHROMEOS_LOGIN_USER_IMAGE_H_
 #define CHROME_BROWSER_CHROMEOS_LOGIN_USER_IMAGE_H_
 
+#include <string>
 #include <vector>
 
 #include "ui/gfx/image/image_skia.h"
@@ -61,6 +62,9 @@
   bool is_safe_format() const { return is_safe_format_; }
   void MarkAsSafe();
 
+  const std::string& file_path() const { return file_path_; }
+  void set_file_path(const std::string& file_path) { file_path_ = file_path; }
+
  private:
   gfx::ImageSkia image_;
   bool has_raw_image_;
@@ -68,6 +72,9 @@
   bool has_animated_image_;
   RawImage animated_image_;
   GURL url_;
+
+  // If image was loaded from the local file, file path is stored here.
+  std::string file_path_;
   bool is_safe_format_;
 };
 
diff --git a/chrome/browser/chromeos/login/user_image_loader.cc b/chrome/browser/chromeos/login/user_image_loader.cc
index bbb7c6b..3087fd7 100644
--- a/chrome/browser/chromeos/login/user_image_loader.cc
+++ b/chrome/browser/chromeos/login/user_image_loader.cc
@@ -20,9 +20,11 @@
 
 namespace chromeos {
 
-UserImageLoader::ImageInfo::ImageInfo(int size,
+UserImageLoader::ImageInfo::ImageInfo(const std::string& file_path,
+                                      int pixels_per_side,
                                       const LoadedCallback& loaded_cb)
-    : size(size),
+    : file_path(file_path),
+      pixels_per_side(pixels_per_side),
       loaded_cb(loaded_cb) {
 }
 
@@ -41,33 +43,32 @@
 }
 
 void UserImageLoader::Start(const std::string& filepath,
-                            int size,
+                            int pixels_per_side,
                             const LoadedCallback& loaded_cb) {
   background_task_runner_->PostTask(
       FROM_HERE,
       base::Bind(&UserImageLoader::ReadAndDecodeImage,
                  this,
-                 filepath,
-                 ImageInfo(size, loaded_cb)));
+                 ImageInfo(filepath, pixels_per_side, loaded_cb)));
 }
 
 void UserImageLoader::Start(scoped_ptr<std::string> data,
-                            int size,
+                            int pixels_per_side,
                             const LoadedCallback& loaded_cb) {
-  background_task_runner_->PostTask(FROM_HERE,
-                                    base::Bind(&UserImageLoader::DecodeImage,
-                                        this,
-                                        base::Passed(&data),
-                                        ImageInfo(size, loaded_cb)));
+  background_task_runner_->PostTask(
+      FROM_HERE,
+      base::Bind(&UserImageLoader::DecodeImage,
+                 this,
+                 base::Passed(&data),
+                 ImageInfo(std::string(), pixels_per_side, loaded_cb)));
 }
 
-void UserImageLoader::ReadAndDecodeImage(const std::string& filepath,
-                                         const ImageInfo& image_info) {
+void UserImageLoader::ReadAndDecodeImage(const ImageInfo& image_info) {
   DCHECK(background_task_runner_->RunsTasksOnCurrentThread());
 
   scoped_ptr<std::string> data(new std::string);
   const bool success =
-      base::ReadFileToString(base::FilePath(filepath), data.get());
+      base::ReadFileToString(base::FilePath(image_info.file_path), data.get());
   DCHECK(success);
 
   DecodeImage(data.Pass(), image_info);
@@ -92,7 +93,8 @@
     NOTREACHED();
     return;
   }
-  const int target_size = it->second.size;
+  const std::string file_path = it->second.file_path;
+  const int target_size = it->second.pixels_per_side;
   const LoadedCallback loaded_cb = it->second.loaded_cb;
   image_info_map_.erase(it);
 
@@ -100,12 +102,13 @@
 
   if (target_size > 0) {
     // Auto crop the image, taking the largest square in the center.
-    int size = std::min(decoded_image.width(), decoded_image.height());
-    int x = (decoded_image.width() - size) / 2;
-    int y = (decoded_image.height() - size) / 2;
-    SkBitmap cropped_image =
-        SkBitmapOperations::CreateTiledBitmap(decoded_image, x, y, size, size);
-    if (size > target_size) {
+    int pixels_per_side =
+        std::min(decoded_image.width(), decoded_image.height());
+    int x = (decoded_image.width() - pixels_per_side) / 2;
+    int y = (decoded_image.height() - pixels_per_side) / 2;
+    SkBitmap cropped_image = SkBitmapOperations::CreateTiledBitmap(
+        decoded_image, x, y, pixels_per_side, pixels_per_side);
+    if (pixels_per_side > target_size) {
       // Also downsize the image to save space and memory.
       final_image =
           skia::ImageOperations::Resize(cropped_image,
@@ -123,6 +126,7 @@
       gfx::ImageSkia::CreateFrom1xBitmap(final_image);
   final_image_skia.MakeThreadSafe();
   UserImage user_image(final_image_skia, decoder->get_image_data());
+  user_image.set_file_path(file_path);
   if (image_codec_ == ImageDecoder::ROBUST_JPEG_CODEC)
     user_image.MarkAsSafe();
   foreground_task_runner_->PostTask(FROM_HERE,
diff --git a/chrome/browser/chromeos/login/user_image_loader.h b/chrome/browser/chromeos/login/user_image_loader.h
index 2b16726..af43f58 100644
--- a/chrome/browser/chromeos/login/user_image_loader.h
+++ b/chrome/browser/chromeos/login/user_image_loader.h
@@ -42,10 +42,10 @@
   // image from |filepath| on disk, the second processes |data| read into memory
   // already.
   void Start(const std::string& filepath,
-             int size,
+             int pixels_per_side,
              const LoadedCallback& loaded_cb);
   void Start(scoped_ptr<std::string> data,
-             int size,
+             int pixels_per_side,
              const LoadedCallback& loaded_cb);
 
  private:
@@ -53,10 +53,13 @@
 
   // Contains attributes we need to know about each image we decode.
   struct ImageInfo {
-    ImageInfo(int size, const LoadedCallback& loaded_cb);
+    ImageInfo(const std::string& file_path,
+              int pixels_per_side,
+              const LoadedCallback& loaded_cb);
     ~ImageInfo();
 
-    const int size;
+    const std::string file_path;
+    const int pixels_per_side;
     const LoadedCallback loaded_cb;
   };
 
@@ -64,10 +67,9 @@
 
   virtual ~UserImageLoader();
 
-  // Reads the image from |filepath| and starts the decoding process. This
-  // method may only be invoked via the |background_task_runner_|.
-  void ReadAndDecodeImage(const std::string& filepath,
-                          const ImageInfo& image_info);
+  // Reads the image from |image_info.file_path| and starts the decoding
+  // process. This method may only be invoked via the |background_task_runner_|.
+  void ReadAndDecodeImage(const ImageInfo& image_info);
 
   // Decodes the image |data|. This method may only be invoked via the
   // |background_task_runner_|.
diff --git a/chrome/browser/chromeos/login/user_manager_impl.cc b/chrome/browser/chromeos/login/user_manager_impl.cc
index 0d5f14b..e2c31b1 100644
--- a/chrome/browser/chromeos/login/user_manager_impl.cc
+++ b/chrome/browser/chromeos/login/user_manager_impl.cc
@@ -35,7 +35,6 @@
 #include "chrome/browser/chromeos/login/demo_mode/demo_app_launcher.h"
 #include "chrome/browser/chromeos/login/login_display.h"
 #include "chrome/browser/chromeos/login/login_utils.h"
-#include "chrome/browser/chromeos/login/multi_profile_first_run_notification.h"
 #include "chrome/browser/chromeos/login/multi_profile_user_controller.h"
 #include "chrome/browser/chromeos/login/remove_user_delegate.h"
 #include "chrome/browser/chromeos/login/supervised_user_manager_impl.h"
@@ -212,9 +211,7 @@
       is_current_user_ephemeral_regular_user_(false),
       ephemeral_users_enabled_(false),
       supervised_user_manager_(new SupervisedUserManagerImpl(this)),
-      manager_creation_time_(base::TimeTicks::Now()),
-      multi_profile_first_run_notification_(
-          new MultiProfileFirstRunNotification) {
+      manager_creation_time_(base::TimeTicks::Now()) {
   UpdateNumberOfUsers();
   // UserManager instance should be used only on UI thread.
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
@@ -953,7 +950,6 @@
               AuthSyncObserverFactory::GetInstance()->GetForProfile(profile);
           sync_observer->StartObserving();
           multi_profile_user_controller_->StartObserving(profile);
-          multi_profile_first_run_notification_->UserProfilePrepared(profile);
         }
       }
 
diff --git a/chrome/browser/chromeos/login/user_manager_impl.h b/chrome/browser/chromeos/login/user_manager_impl.h
index 9154ba4..1fca7d5 100644
--- a/chrome/browser/chromeos/login/user_manager_impl.h
+++ b/chrome/browser/chromeos/login/user_manager_impl.h
@@ -39,7 +39,6 @@
 
 namespace chromeos {
 
-class MultiProfileFirstRunNotification;
 class MultiProfileUserController;
 class RemoveUserDelegate;
 class SupervisedUserManagerImpl;
@@ -476,8 +475,6 @@
       supervised_users_subscription_;
 
   scoped_ptr<MultiProfileUserController> multi_profile_user_controller_;
-  scoped_ptr<MultiProfileFirstRunNotification>
-      multi_profile_first_run_notification_;
 
   // Observer for the policy that can be used to manage user images.
   scoped_ptr<policy::CloudExternalDataPolicyObserver> avatar_policy_observer_;
diff --git a/chrome/browser/chromeos/login/wallpaper_manager.cc b/chrome/browser/chromeos/login/wallpaper_manager.cc
index a0017cb..ae98e2f 100644
--- a/chrome/browser/chromeos/login/wallpaper_manager.cc
+++ b/chrome/browser/chromeos/login/wallpaper_manager.cc
@@ -29,6 +29,7 @@
 #include "base/values.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/chrome_notification_types.h"
+#include "chrome/browser/chromeos/customization_document.h"
 #include "chrome/browser/chromeos/extensions/wallpaper_manager_util.h"
 #include "chrome/browser/chromeos/extensions/wallpaper_private_api.h"
 #include "chrome/browser/chromeos/login/login_display_host_impl.h"
@@ -123,6 +124,30 @@
   return false;
 }
 
+// These global default values are used to set customized default
+// wallpaper path in WallpaperManager::InitializeWallpaper().
+base::FilePath GetCustomizedWallpaperDefaultRescaledFileName(
+    const std::string& suffix) {
+  const base::FilePath default_downloaded_file_name =
+      ServicesCustomizationDocument::GetCustomizedWallpaperDownloadedFileName();
+  const base::FilePath default_cache_dir =
+      ServicesCustomizationDocument::GetCustomizedWallpaperCacheDir();
+  if (default_downloaded_file_name.empty() || default_cache_dir.empty())
+    return base::FilePath();
+  return default_cache_dir.Append(
+      default_downloaded_file_name.BaseName().value() + suffix);
+}
+
+// Whether DesktopBackgroundController should start with customized default
+// wallpaper in WallpaperManager::InitializeWallpaper() or not.
+bool ShouldUseCustomizedDefaultWallpaper() {
+  PrefService* pref_service = g_browser_process->local_state();
+
+  return !(pref_service->FindPreference(
+                             prefs::kCustomizationDefaultWallpaperURL)
+               ->IsDefaultValue());
+}
+
 }  // namespace
 
 const char kWallpaperSequenceTokenName[] = "wallpaper-sequence";
@@ -144,6 +169,77 @@
 
 static WallpaperManager* g_wallpaper_manager = NULL;
 
+class WallpaperManager::CustomizedWallpaperRescaledFiles {
+ public:
+  CustomizedWallpaperRescaledFiles(const base::FilePath& path_downloaded,
+                                   const base::FilePath& path_rescaled_small,
+                                   const base::FilePath& path_rescaled_large);
+
+  bool AllSizesExist() const;
+
+  // Closure will hold unretained pointer to this object. So caller must
+  // make sure that the closure will be destoyed before this object.
+  // Closure must be called on BlockingPool.
+  base::Closure CreateCheckerClosure();
+
+  const base::FilePath& path_downloaded() const { return path_downloaded_; }
+  const base::FilePath& path_rescaled_small() const {
+    return path_rescaled_small_;
+  }
+  const base::FilePath& path_rescaled_large() const {
+    return path_rescaled_large_;
+  }
+
+  const bool downloaded_exists() const { return downloaded_exists_; }
+  const bool rescaled_small_exists() const { return rescaled_small_exists_; }
+  const bool rescaled_large_exists() const { return rescaled_large_exists_; }
+
+ private:
+  // Must be called on BlockingPool.
+  void CheckCustomizedWallpaperFilesExist();
+
+  const base::FilePath path_downloaded_;
+  const base::FilePath path_rescaled_small_;
+  const base::FilePath path_rescaled_large_;
+
+  bool downloaded_exists_;
+  bool rescaled_small_exists_;
+  bool rescaled_large_exists_;
+
+  DISALLOW_COPY_AND_ASSIGN(CustomizedWallpaperRescaledFiles);
+};
+
+WallpaperManager::CustomizedWallpaperRescaledFiles::
+    CustomizedWallpaperRescaledFiles(const base::FilePath& path_downloaded,
+                                     const base::FilePath& path_rescaled_small,
+                                     const base::FilePath& path_rescaled_large)
+    : path_downloaded_(path_downloaded),
+      path_rescaled_small_(path_rescaled_small),
+      path_rescaled_large_(path_rescaled_large),
+      downloaded_exists_(false),
+      rescaled_small_exists_(false),
+      rescaled_large_exists_(false) {
+}
+
+base::Closure
+WallpaperManager::CustomizedWallpaperRescaledFiles::CreateCheckerClosure() {
+  return base::Bind(&WallpaperManager::CustomizedWallpaperRescaledFiles::
+                        CheckCustomizedWallpaperFilesExist,
+                    base::Unretained(this));
+}
+
+void WallpaperManager::CustomizedWallpaperRescaledFiles::
+    CheckCustomizedWallpaperFilesExist() {
+  DCHECK(BrowserThread::GetBlockingPool()->RunsTasksOnCurrentThread());
+  downloaded_exists_ = base::PathExists(path_downloaded_);
+  rescaled_small_exists_ = base::PathExists(path_rescaled_small_);
+  rescaled_large_exists_ = base::PathExists(path_rescaled_large_);
+}
+
+bool WallpaperManager::CustomizedWallpaperRescaledFiles::AllSizesExist() const {
+  return rescaled_small_exists_ && rescaled_large_exists_;
+}
+
 // This object is passed between several threads while wallpaper is being
 // loaded. It will notify callback when last reference to it is removed
 // (thus indicating that the last load action has finished).
@@ -450,6 +546,15 @@
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
   UserManager* user_manager = UserManager::Get();
 
+  // Apply device customization.
+  if (ShouldUseCustomizedDefaultWallpaper()) {
+    SetDefaultWallpaperPath(
+        GetCustomizedWallpaperDefaultRescaledFileName(kSmallWallpaperSuffix),
+        scoped_ptr<gfx::ImageSkia>().Pass(),
+        GetCustomizedWallpaperDefaultRescaledFileName(kLargeWallpaperSuffix),
+        scoped_ptr<gfx::ImageSkia>().Pass());
+  }
+
   CommandLine* command_line = GetCommandLine();
   if (command_line->HasSwitch(chromeos::switches::kGuestSession)) {
     // Guest wallpaper should be initialized when guest login.
@@ -803,7 +908,7 @@
                 : ash::WALLPAPER_LAYOUT_CENTER_CROPPED;
   DCHECK(file);
   if (!default_wallpaper_image_.get() ||
-      default_wallpaper_image_->url().spec() != file->value()) {
+      default_wallpaper_image_->file_path() != file->value()) {
     default_wallpaper_image_.reset();
     if (!file->empty()) {
       loaded_wallpapers_++;
@@ -984,15 +1089,15 @@
 void WallpaperManager::EnableSurpriseMe() {
   Profile* profile = ProfileManager::GetActiveUserProfile();
   DCHECK(profile);
-  DCHECK(extensions::ExtensionSystem::Get(profile)->event_router());
-  scoped_ptr<extensions::Event> event(
-      new extensions::Event(
-    extensions::api::wallpaper_private::OnRequestEnableSurpriseMe::kEventName,
-    extensions::api::wallpaper_private::OnRequestEnableSurpriseMe::Create()));
+  DCHECK(extensions::EventRouter::Get(profile));
 
-  extensions::ExtensionSystem::Get(profile)->event_router()
-      ->DispatchEventToExtension(extension_misc::kWallpaperManagerId,
-                                 event.Pass());
+  using namespace extensions::api::wallpaper_private;
+  scoped_ptr<extensions::Event> event(
+      new extensions::Event(OnRequestEnableSurpriseMe::kEventName,
+                            OnRequestEnableSurpriseMe::Create()));
+
+  extensions::EventRouter::Get(profile)->DispatchEventToExtension(
+      extension_misc::kWallpaperManagerId, event.Pass());
 }
 
 void WallpaperManager::NotifyAnimationFinished() {
@@ -1540,6 +1645,129 @@
   return delay;
 }
 
+void WallpaperManager::SetCustomizedDefaultWallpaperAfterCheck(
+    const GURL& wallpaper_url,
+    const base::FilePath& downloaded_file,
+    scoped_ptr<CustomizedWallpaperRescaledFiles> rescaled_files) {
+  PrefService* pref_service = g_browser_process->local_state();
+
+  std::string current_url =
+      pref_service->GetString(prefs::kCustomizationDefaultWallpaperURL);
+  if (current_url != wallpaper_url.spec() || !rescaled_files->AllSizesExist()) {
+    DCHECK(rescaled_files->downloaded_exists());
+
+    // Either resized images do not exist or cached version is incorrect.
+    // Need to start resize again.
+    wallpaper_loader_->Start(
+        downloaded_file.value(),
+        0,  // Do not crop.
+        base::Bind(&WallpaperManager::OnCustomizedDefaultWallpaperDecoded,
+                   weak_factory_.GetWeakPtr(),
+                   wallpaper_url,
+                   base::Passed(rescaled_files.Pass())));
+  } else {
+    SetDefaultWallpaperPath(rescaled_files->path_rescaled_small(),
+                            scoped_ptr<gfx::ImageSkia>().Pass(),
+                            rescaled_files->path_rescaled_large(),
+                            scoped_ptr<gfx::ImageSkia>().Pass());
+  }
+}
+
+void WallpaperManager::OnCustomizedDefaultWallpaperDecoded(
+    const GURL& wallpaper_url,
+    scoped_ptr<CustomizedWallpaperRescaledFiles> rescaled_files,
+    const UserImage& wallpaper) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+
+  // If decoded wallpaper is empty, we have probably failed to decode the file.
+  if (wallpaper.image().isNull()) {
+    LOG(WARNING) << "Failed to decode customized wallpaper.";
+    return;
+  }
+
+  wallpaper.image().EnsureRepsForSupportedScales();
+  scoped_ptr<gfx::ImageSkia> deep_copy(wallpaper.image().DeepCopy());
+
+  scoped_ptr<bool> success(new bool(false));
+  scoped_ptr<gfx::ImageSkia> small_wallpaper_image(new gfx::ImageSkia);
+  scoped_ptr<gfx::ImageSkia> large_wallpaper_image(new gfx::ImageSkia);
+
+  // TODO(bshe): This may break if RawImage becomes RefCountedMemory.
+  base::Closure resize_closure =
+      base::Bind(&WallpaperManager::ResizeCustomizedDefaultWallpaper,
+                 base::Unretained(this),
+                 base::Passed(&deep_copy),
+                 wallpaper.raw_image(),
+                 base::Unretained(rescaled_files.get()),
+                 base::Unretained(success.get()),
+                 base::Unretained(small_wallpaper_image.get()),
+                 base::Unretained(large_wallpaper_image.get()));
+  base::Closure on_resized_closure =
+      base::Bind(&WallpaperManager::OnCustomizedDefaultWallpaperResized,
+                 weak_factory_.GetWeakPtr(),
+                 wallpaper_url,
+                 base::Passed(rescaled_files.Pass()),
+                 base::Passed(success.Pass()),
+                 base::Passed(small_wallpaper_image.Pass()),
+                 base::Passed(large_wallpaper_image.Pass()));
+
+  if (!task_runner_->PostTaskAndReply(
+          FROM_HERE, resize_closure, on_resized_closure)) {
+    LOG(WARNING) << "Failed to start Customized Wallpaper resize.";
+  }
+}
+
+void WallpaperManager::ResizeCustomizedDefaultWallpaper(
+    scoped_ptr<gfx::ImageSkia> image,
+    const UserImage::RawImage& raw_image,
+    const CustomizedWallpaperRescaledFiles* rescaled_files,
+    bool* success,
+    gfx::ImageSkia* small_wallpaper_image,
+    gfx::ImageSkia* large_wallpaper_image) {
+  DCHECK(BrowserThread::GetBlockingPool()->IsRunningSequenceOnCurrentThread(
+      sequence_token_));
+  UserImage wallpaper(*image.get(), raw_image);
+
+  *success = true;
+
+  *success &= ResizeAndSaveWallpaper(wallpaper,
+                                     rescaled_files->path_rescaled_small(),
+                                     ash::WALLPAPER_LAYOUT_STRETCH,
+                                     kSmallWallpaperMaxWidth,
+                                     kSmallWallpaperMaxHeight,
+                                     small_wallpaper_image);
+
+  *success &= ResizeAndSaveWallpaper(wallpaper,
+                                     rescaled_files->path_rescaled_large(),
+                                     ash::WALLPAPER_LAYOUT_STRETCH,
+                                     kLargeWallpaperMaxWidth,
+                                     kLargeWallpaperMaxHeight,
+                                     large_wallpaper_image);
+}
+
+void WallpaperManager::OnCustomizedDefaultWallpaperResized(
+    const GURL& wallpaper_url,
+    scoped_ptr<CustomizedWallpaperRescaledFiles> rescaled_files,
+    scoped_ptr<bool> success,
+    scoped_ptr<gfx::ImageSkia> small_wallpaper_image,
+    scoped_ptr<gfx::ImageSkia> large_wallpaper_image) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  DCHECK(rescaled_files);
+  DCHECK(success.get());
+  if (!*success) {
+    LOG(WARNING) << "Failed to save resized customized default wallpaper";
+    return;
+  }
+  PrefService* pref_service = g_browser_process->local_state();
+  pref_service->SetString(prefs::kCustomizationDefaultWallpaperURL,
+                          wallpaper_url.spec());
+  SetDefaultWallpaperPath(rescaled_files->path_rescaled_small(),
+                          small_wallpaper_image.Pass(),
+                          rescaled_files->path_rescaled_large(),
+                          large_wallpaper_image.Pass());
+  VLOG(1) << "Customized default wallpaper applied.";
+}
+
 WallpaperManager::PendingWallpaper* WallpaperManager::GetPendingWallpaper(
     const std::string& user_id,
     bool delayed) {
@@ -1553,6 +1781,41 @@
   return pending_inactive_;
 }
 
+void WallpaperManager::SetCustomizedDefaultWallpaper(
+    const GURL& wallpaper_url,
+    const base::FilePath& downloaded_file,
+    const base::FilePath& resized_directory) {
+  // Should fail if this ever happens in tests.
+  DCHECK(wallpaper_url.is_valid());
+  if (!wallpaper_url.is_valid()) {
+    if (!wallpaper_url.is_empty()) {
+      LOG(WARNING) << "Invalid Customized Wallpaper URL '"
+                   << wallpaper_url.spec() << "'";
+    }
+    return;
+  }
+  std::string downloaded_file_name = downloaded_file.BaseName().value();
+  scoped_ptr<CustomizedWallpaperRescaledFiles> rescaled_files(
+      new CustomizedWallpaperRescaledFiles(
+          downloaded_file,
+          resized_directory.Append(downloaded_file_name +
+                                   kSmallWallpaperSuffix),
+          resized_directory.Append(downloaded_file_name +
+                                   kLargeWallpaperSuffix)));
+
+  base::Closure check_file_exists = rescaled_files->CreateCheckerClosure();
+  base::Closure on_checked_closure =
+      base::Bind(&WallpaperManager::SetCustomizedDefaultWallpaperAfterCheck,
+                 weak_factory_.GetWeakPtr(),
+                 wallpaper_url,
+                 downloaded_file,
+                 base::Passed(rescaled_files.Pass()));
+  if (!BrowserThread::PostBlockingPoolTaskAndReply(
+          FROM_HERE, check_file_exists, on_checked_closure)) {
+    LOG(WARNING) << "Failed to start check CheckCustomizedWallpaperFilesExist.";
+  }
+}
+
 void WallpaperManager::SetDefaultWallpaperPathsFromCommandLine(
     base::CommandLine* command_line) {
   default_small_wallpaper_file_ = command_line->GetSwitchValuePath(
@@ -1572,8 +1835,7 @@
     scoped_ptr<chromeos::UserImage>* result_out,
     MovableOnDestroyCallbackHolder on_finish,
     const UserImage& wallpaper) {
-  result_out->reset(new UserImage(wallpaper.image()));
-  (*result_out)->set_url(GURL(path.value()));
+  result_out->reset(new UserImage(wallpaper));
   ash::Shell::GetInstance()->desktop_background_controller()->SetWallpaperImage(
       wallpaper.image(), layout);
 }
@@ -1600,4 +1862,49 @@
                                                   : kLargeWallpaperSubDir;
 }
 
+void WallpaperManager::SetDefaultWallpaperPath(
+    const base::FilePath& default_small_wallpaper_file,
+    scoped_ptr<gfx::ImageSkia> small_wallpaper_image,
+    const base::FilePath& default_large_wallpaper_file,
+    scoped_ptr<gfx::ImageSkia> large_wallpaper_image) {
+  default_small_wallpaper_file_ = default_small_wallpaper_file;
+  default_large_wallpaper_file_ = default_large_wallpaper_file;
+
+  ash::DesktopBackgroundController* dbc =
+      ash::Shell::GetInstance()->desktop_background_controller();
+
+  // |need_update_screen| is true if the previous default wallpaper is visible
+  // now, so we need to update wallpaper on the screen.
+  //
+  // Layout is ignored here, so ash::WALLPAPER_LAYOUT_CENTER is used
+  // as a placeholder only.
+  const bool need_update_screen =
+      default_wallpaper_image_.get() &&
+      dbc->WallpaperIsAlreadyLoaded(
+          &(default_wallpaper_image_->image()),
+          ash::DesktopBackgroundController::kInvalidResourceID,
+          false /* compare_layouts */,
+          ash::WALLPAPER_LAYOUT_CENTER);
+
+  default_wallpaper_image_.reset();
+  if (GetAppropriateResolution() == WALLPAPER_RESOLUTION_SMALL) {
+    if (small_wallpaper_image) {
+      default_wallpaper_image_.reset(new UserImage(*small_wallpaper_image));
+      default_wallpaper_image_->set_file_path(
+          default_small_wallpaper_file.value());
+    }
+  } else {
+    if (large_wallpaper_image) {
+      default_wallpaper_image_.reset(new UserImage(*large_wallpaper_image));
+      default_wallpaper_image_->set_file_path(
+          default_large_wallpaper_file.value());
+    }
+  }
+
+  if (need_update_screen) {
+    DoSetDefaultWallpaper(std::string(),
+                          MovableOnDestroyCallbackHolder().Pass());
+  }
+}
+
 }  // namespace chromeos
diff --git a/chrome/browser/chromeos/login/wallpaper_manager.h b/chrome/browser/chromeos/login/wallpaper_manager.h
index cb3c95a..1a76f78 100644
--- a/chrome/browser/chromeos/login/wallpaper_manager.h
+++ b/chrome/browser/chromeos/login/wallpaper_manager.h
@@ -112,6 +112,10 @@
     DISALLOW_COPY_AND_ASSIGN(TestApi);
   };
 
+  // This should be public to allow access from functions in anonymous
+  // namespace.
+  class CustomizedWallpaperRescaledFiles;
+
   class Observer {
    public:
     virtual ~Observer() {}
@@ -266,6 +270,17 @@
                           const UserImage& wallpaper,
                           bool update_wallpaper);
 
+  // Use given files as new default wallpaper.
+  // Reloads current wallpaper, if old default was loaded.
+  // Current value of default_wallpaper_image_ is destroyed.
+  // Sets default_wallpaper_image_ either to |small_wallpaper_image| or
+  // |large_wallpaper_image| depending on GetAppropriateResolution().
+  void SetDefaultWallpaperPath(
+      const base::FilePath& customized_default_wallpaper_file_small,
+      scoped_ptr<gfx::ImageSkia> small_wallpaper_image,
+      const base::FilePath& customized_default_wallpaper_file_large,
+      scoped_ptr<gfx::ImageSkia> large_wallpaper_image);
+
   // Sets wallpaper to default wallpaper (asynchronously with zero delay).
   void SetDefaultWallpaperNow(const std::string& user_id);
 
@@ -331,6 +346,13 @@
   // Enable surprise me wallpaper mode.
   void EnableSurpriseMe();
 
+  // This is called from CustomizationDocument.
+  // |resized_directory| is the directory where resized versions are stored and
+  // must be writable.
+  void SetCustomizedDefaultWallpaper(const GURL& wallpaper_url,
+                                     const base::FilePath& downloaded_file,
+                                     const base::FilePath& resized_directory);
+
  private:
   friend class TestApi;
   friend class WallpaperManagerBrowserTest;
@@ -493,6 +515,36 @@
   // in zero delay.
   base::TimeDelta GetWallpaperLoadDelay() const;
 
+  // This is called after we check that supplied default wallpaper files exist.
+  void SetCustomizedDefaultWallpaperAfterCheck(
+      const GURL& wallpaper_url,
+      const base::FilePath& downloaded_file,
+      scoped_ptr<CustomizedWallpaperRescaledFiles> rescaled_files);
+
+  // Starts rescaling of customized wallpaper.
+  void OnCustomizedDefaultWallpaperDecoded(
+      const GURL& wallpaper_url,
+      scoped_ptr<CustomizedWallpaperRescaledFiles> rescaled_files,
+      const UserImage& user_image);
+
+  // Resize and save customized default wallpaper.
+  void ResizeCustomizedDefaultWallpaper(
+      scoped_ptr<gfx::ImageSkia> image,
+      const UserImage::RawImage& raw_image,
+      const CustomizedWallpaperRescaledFiles* rescaled_files,
+      bool* success,
+      gfx::ImageSkia* small_wallpaper_image,
+      gfx::ImageSkia* large_wallpaper_image);
+
+  // Check the result of ResizeCustomizedDefaultWallpaper and finally
+  // apply Customized Default Wallpaper.
+  void OnCustomizedDefaultWallpaperResized(
+      const GURL& wallpaper_url,
+      scoped_ptr<CustomizedWallpaperRescaledFiles> rescaled_files,
+      scoped_ptr<bool> success,
+      scoped_ptr<gfx::ImageSkia> small_wallpaper_image,
+      scoped_ptr<gfx::ImageSkia> large_wallpaper_image);
+
   // Init |*default_*_wallpaper_file_| from given command line and
   // clear |default_wallpaper_image_|.
   void SetDefaultWallpaperPathsFromCommandLine(base::CommandLine* command_line);
diff --git a/chrome/browser/chromeos/login/wallpaper_manager_browsertest.cc b/chrome/browser/chromeos/login/wallpaper_manager_browsertest.cc
index ccce769..3eb84dc 100644
--- a/chrome/browser/chromeos/login/wallpaper_manager_browsertest.cc
+++ b/chrome/browser/chromeos/login/wallpaper_manager_browsertest.cc
@@ -33,7 +33,6 @@
 #include "chrome/test/base/in_process_browser_test.h"
 #include "chrome/test/base/testing_browser_process.h"
 #include "chromeos/chromeos_switches.h"
-#include "chromeos/dbus/cryptohome_client.h"
 #include "content/public/test/test_utils.h"
 #include "ui/aura/env.h"
 #include "ui/base/resource/resource_bundle.h"
@@ -578,8 +577,7 @@
     command_line->AppendSwitch(chromeos::switches::kDisableBootAnimation);
     command_line->AppendSwitch(::switches::kMultiProfiles);
     command_line->AppendSwitchASCII(switches::kLoginUser, kTestUser1);
-    command_line->AppendSwitchASCII(switches::kLoginProfile,
-        CryptohomeClient::GetStubSanitizedUsername(kTestUser1));
+    command_line->AppendSwitchASCII(switches::kLoginProfile, "user");
   }
 };
 
@@ -602,8 +600,7 @@
   virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
     command_line->AppendSwitch(::switches::kMultiProfiles);
     command_line->AppendSwitchASCII(switches::kLoginUser, kTestUser1);
-    command_line->AppendSwitchASCII(switches::kLoginProfile,
-        CryptohomeClient::GetStubSanitizedUsername(kTestUser1));
+    command_line->AppendSwitchASCII(switches::kLoginProfile, "user");
   }
  protected:
   // Creates a test image of size 1x1.
@@ -766,7 +763,8 @@
   DISALLOW_COPY_AND_ASSIGN(TestObserver);
 };
 
-IN_PROC_BROWSER_TEST_P(WallpaperManagerBrowserTest, DisplayChange) {
+// Disabled due to flaky failures. crbug.com/362847
+IN_PROC_BROWSER_TEST_P(WallpaperManagerBrowserTest, DISABLED_DisplayChange) {
   // TODO(derat|oshima|bshe): Host windows can't be resized on Win8.
   if (!ash::test::AshTestHelper::SupportsHostWindowResize())
     return;
diff --git a/chrome/browser/chromeos/login/wallpaper_manager_policy_browsertest.cc b/chrome/browser/chromeos/login/wallpaper_manager_policy_browsertest.cc
index 4708839..69159fd 100644
--- a/chrome/browser/chromeos/login/wallpaper_manager_policy_browsertest.cc
+++ b/chrome/browser/chromeos/login/wallpaper_manager_policy_browsertest.cc
@@ -183,7 +183,7 @@
     if (GetParam())
       command_line->AppendSwitch(::switches::kMultiProfiles);
     else
-      command_line->AppendSwitchASCII(switches::kLoginProfile, kTestUsers[0]);
+      command_line->AppendSwitchASCII(switches::kLoginProfile, "user");
   }
 
   virtual void SetUpOnMainThread() OVERRIDE {
diff --git a/chrome/browser/chromeos/login/webui_login_display.cc b/chrome/browser/chromeos/login/webui_login_display.cc
index bf0300e..18b9609 100644
--- a/chrome/browser/chromeos/login/webui_login_display.cc
+++ b/chrome/browser/chromeos/login/webui_login_display.cc
@@ -346,11 +346,6 @@
     delegate_->OnStartKioskEnableScreen();
 }
 
-void WebUILoginDisplay::ShowResetScreen() {
-  if (delegate_)
-    delegate_->OnStartDeviceReset();
-}
-
 void WebUILoginDisplay::ShowKioskAutolaunchScreen() {
   if (delegate_)
     delegate_->OnStartKioskAutolaunchScreen();
diff --git a/chrome/browser/chromeos/login/webui_login_display.h b/chrome/browser/chromeos/login/webui_login_display.h
index 0fbaba2..88715dd 100644
--- a/chrome/browser/chromeos/login/webui_login_display.h
+++ b/chrome/browser/chromeos/login/webui_login_display.h
@@ -79,7 +79,6 @@
   virtual void ResyncUserData() OVERRIDE;
   virtual void ShowEnterpriseEnrollmentScreen() OVERRIDE;
   virtual void ShowKioskEnableScreen() OVERRIDE;
-  virtual void ShowResetScreen() OVERRIDE;
   virtual void ShowKioskAutolaunchScreen() OVERRIDE;
   virtual void ShowWrongHWIDScreen() OVERRIDE;
   virtual void SetWebUIHandler(
diff --git a/chrome/browser/chromeos/login/webui_screen_locker.cc b/chrome/browser/chromeos/login/webui_screen_locker.cc
index 8c2cf2d..b653e3f 100644
--- a/chrome/browser/chromeos/login/webui_screen_locker.cc
+++ b/chrome/browser/chromeos/login/webui_screen_locker.cc
@@ -273,10 +273,6 @@
   NOTREACHED();
 }
 
-void WebUIScreenLocker::OnStartDeviceReset() {
-  NOTREACHED();
-}
-
 void WebUIScreenLocker::OnStartKioskAutolaunchScreen() {
   NOTREACHED();
 }
@@ -347,7 +343,7 @@
       base::Bind(&WebUIScreenLocker::FocusUserPod, weak_factory_.GetWeakPtr()));
 }
 
-void WebUIScreenLocker::SystemResumed(const base::TimeDelta& sleep_duration) {
+void WebUIScreenLocker::SuspendDone(const base::TimeDelta& sleep_duration) {
   content::BrowserThread::PostTask(
       content::BrowserThread::UI,
       FROM_HERE,
diff --git a/chrome/browser/chromeos/login/webui_screen_locker.h b/chrome/browser/chromeos/login/webui_screen_locker.h
index 155e542..0c188d2 100644
--- a/chrome/browser/chromeos/login/webui_screen_locker.h
+++ b/chrome/browser/chromeos/login/webui_screen_locker.h
@@ -92,7 +92,6 @@
   virtual void OnUserSelected(const std::string& username) OVERRIDE;
   virtual void OnStartEnterpriseEnrollment() OVERRIDE;
   virtual void OnStartKioskEnableScreen() OVERRIDE;
-  virtual void OnStartDeviceReset() OVERRIDE;
   virtual void OnStartKioskAutolaunchScreen() OVERRIDE;
   virtual void ShowWrongHWIDScreen() OVERRIDE;
   virtual void ResetPublicSessionAutoLoginTimer() OVERRIDE;
@@ -118,7 +117,7 @@
   virtual void OnWidgetDestroying(views::Widget* widget) OVERRIDE;
 
   // PowerManagerClient::Observer overrides:
-  virtual void SystemResumed(const base::TimeDelta& sleep_duration) OVERRIDE;
+  virtual void SuspendDone(const base::TimeDelta& sleep_duration) OVERRIDE;
   virtual void LidEventReceived(bool open,
                                 const base::TimeTicks& time) OVERRIDE;
 
diff --git a/chrome/browser/chromeos/login/wizard_controller.cc b/chrome/browser/chromeos/login/wizard_controller.cc
index d339dce..e3113bc 100644
--- a/chrome/browser/chromeos/login/wizard_controller.cc
+++ b/chrome/browser/chromeos/login/wizard_controller.cc
@@ -24,13 +24,13 @@
 #include "chrome/browser/chromeos/accessibility/accessibility_manager.h"
 #include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h"
 #include "chrome/browser/chromeos/customization_document.h"
+#include "chrome/browser/chromeos/geolocation/simple_geolocation_provider.h"
 #include "chrome/browser/chromeos/login/enrollment/auto_enrollment_check_step.h"
 #include "chrome/browser/chromeos/login/enrollment/enrollment_screen.h"
 #include "chrome/browser/chromeos/login/existing_user_controller.h"
 #include "chrome/browser/chromeos/login/helper.h"
 #include "chrome/browser/chromeos/login/hwid_checker.h"
 #include "chrome/browser/chromeos/login/login_display_host.h"
-#include "chrome/browser/chromeos/login/login_location_monitor.h"
 #include "chrome/browser/chromeos/login/login_utils.h"
 #include "chrome/browser/chromeos/login/managed/locally_managed_user_creation_screen.h"
 #include "chrome/browser/chromeos/login/oobe_display.h"
@@ -70,7 +70,6 @@
 #include "components/breakpad/app/breakpad_linux.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/notification_types.h"
-#include "content/public/common/geoposition.h"
 #include "ui/base/accelerators/accelerator.h"
 #include "ui/base/l10n/l10n_util.h"
 
@@ -160,7 +159,6 @@
 WizardController::~WizardController() {
   if (default_controller_ == this) {
     default_controller_ = NULL;
-    LoginLocationMonitor::RemoveLocationCallback();
   } else {
     NOTREACHED() << "More than one controller are alive.";
   }
@@ -316,7 +314,9 @@
 
 void WizardController::ShowNetworkScreen() {
   VLOG(1) << "Showing network screen.";
-  SetStatusAreaVisible(false);
+  // Hide the status area initially; it only appears after OOBE first animates
+  // in. Keep it visible if the user goes back to the existing network screen.
+  SetStatusAreaVisible(network_screen_.get());
   SetCurrentScreen(GetNetworkScreen());
 }
 
@@ -380,7 +380,7 @@
 
 void WizardController::ShowEulaScreen() {
   VLOG(1) << "Showing EULA screen.";
-  SetStatusAreaVisible(false);
+  SetStatusAreaVisible(true);
   SetCurrentScreen(GetEulaScreen());
 }
 
@@ -605,10 +605,11 @@
 }
 
 void WizardController::OnResetCanceled() {
-  if (previous_screen_)
+  if (previous_screen_) {
     SetCurrentScreen(previous_screen_);
-  else
+  } else {
     ShowLoginScreen(LoginScreenContext());
+  }
 }
 
 void WizardController::OnKioskAutolaunchCanceled() {
@@ -663,9 +664,14 @@
   GetUpdateScreen()->StartNetworkCheck();
 }
 
-void WizardController::StartTimezoneResolve() const {
-  LoginLocationMonitor::InstallLocationCallback(
-      base::TimeDelta::FromSeconds(kResolveTimeZoneTimeoutSeconds));
+void WizardController::StartTimezoneResolve() {
+  geolocation_provider_.reset(new SimpleGeolocationProvider(
+      g_browser_process->system_request_context(),
+      SimpleGeolocationProvider::DefaultGeolocationProviderURL()));
+  geolocation_provider_->RequestGeolocation(
+      base::TimeDelta::FromSeconds(kResolveTimeZoneTimeoutSeconds),
+      base::Bind(&WizardController::OnLocationResolved,
+                 weak_factory_.GetWeakPtr()));
 }
 
 void WizardController::PerformPostEulaActions() {
@@ -673,6 +679,10 @@
       base::Bind(&WizardController::StartTimezoneResolve,
                  weak_factory_.GetWeakPtr()),
       base::TimeDelta::FromMilliseconds(kDefaultNetworkRetryDelayMS));
+  DelayNetworkCall(
+      ServicesCustomizationDocument::GetInstance()
+          ->EnsureCustomizationAppliedClosure(),
+      base::TimeDelta::FromMilliseconds(kDefaultNetworkRetryDelayMS));
 
   // Now that EULA has been accepted (for official builds), enable portal check.
   // ChromiumOS builds would go though this code path too.
@@ -963,38 +973,6 @@
   return g_browser_process->local_state();
 }
 
-// static
-void WizardController::OnLocationUpdated(const content::Geoposition& position,
-                                         const base::TimeDelta elapsed) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-
-  const base::TimeDelta timeout =
-      base::TimeDelta::FromSeconds(kResolveTimeZoneTimeoutSeconds);
-  if (elapsed >= timeout) {
-    LOG(WARNING) << "Resolve TimeZone: got location after timeout ("
-                 << elapsed.InSecondsF() << " seconds elapsed). Ignored.";
-    return;
-  }
-
-  WizardController* self = default_controller();
-
-  if (self == NULL) {
-    LOG(WARNING) << "Resolve TimeZone: got location after WizardController "
-                 << "has finished. (" << elapsed.InSecondsF() << " seconds "
-                 << "elapsed). Ignored.";
-    return;
-  }
-
-  // WizardController owns TimezoneProvider, so timezone request is silently
-  // cancelled on destruction.
-  self->GetTimezoneProvider()->RequestTimezone(
-      position,
-      false,  // sensor
-      timeout - elapsed,
-      base::Bind(&WizardController::OnTimezoneResolved,
-                 base::Unretained(self)));
-}
-
 void WizardController::OnTimezoneResolved(
     scoped_ptr<TimeZoneResponseData> timezone,
     bool server_error) {
@@ -1043,4 +1021,31 @@
   return timezone_provider_.get();
 }
 
+void WizardController::OnLocationResolved(const Geoposition& position,
+                                          bool server_error,
+                                          const base::TimeDelta elapsed) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+
+  const base::TimeDelta timeout =
+      base::TimeDelta::FromSeconds(kResolveTimeZoneTimeoutSeconds);
+  // Ignore invalid position.
+  if (!position.Valid())
+    return;
+
+  if (elapsed >= timeout) {
+    LOG(WARNING) << "Resolve TimeZone: got location after timeout ("
+                 << elapsed.InSecondsF() << " seconds elapsed). Ignored.";
+    return;
+  }
+
+  // WizardController owns TimezoneProvider, so timezone request is silently
+  // cancelled on destruction.
+  GetTimezoneProvider()->RequestTimezone(
+      position,
+      false,  // sensor
+      timeout - elapsed,
+      base::Bind(&WizardController::OnTimezoneResolved,
+                 base::Unretained(this)));
+}
+
 }  // namespace chromeos
diff --git a/chrome/browser/chromeos/login/wizard_controller.h b/chrome/browser/chromeos/login/wizard_controller.h
index 5daf94f..cdd3c89 100644
--- a/chrome/browser/chromeos/login/wizard_controller.h
+++ b/chrome/browser/chromeos/login/wizard_controller.h
@@ -18,7 +18,6 @@
 #include "chrome/browser/chromeos/login/screens/screen_observer.h"
 #include "chrome/browser/chromeos/login/screens/wizard_screen.h"
 #include "chrome/browser/chromeos/policy/auto_enrollment_client.h"
-#include "content/public/common/geoposition.h"
 #include "ui/gfx/rect.h"
 #include "url/gurl.h"
 
@@ -29,10 +28,6 @@
 class DictionaryValue;
 }
 
-namespace content {
-struct Geoposition;
-}
-
 namespace chromeos {
 
 class AutoEnrollmentCheckStep;
@@ -40,6 +35,7 @@
 class ErrorScreen;
 class EulaScreen;
 class HIDDetectionScreen;
+struct Geoposition;
 class KioskAutolaunchScreen;
 class KioskEnableScreen;
 class LocallyManagedUserCreationScreen;
@@ -48,6 +44,7 @@
 class NetworkScreen;
 class OobeDisplay;
 class ResetScreen;
+class SimpleGeolocationProvider;
 class TermsOfServiceScreen;
 class TimeZoneProvider;
 struct TimeZoneResponseData;
@@ -164,10 +161,6 @@
   // Volume percent at which spoken feedback is still audible.
   static const int kMinAudibleOutputVolumePercent;
 
-  // Called from LoginLocationMonitor when location is resolved.
-  static void OnLocationUpdated(const content::Geoposition& position,
-                                base::TimeDelta elapsed);
-
  private:
   // Show specific screen.
   void ShowNetworkScreen();
@@ -279,7 +272,7 @@
   }
 
   // Called when network is UP.
-  void StartTimezoneResolve() const;
+  void StartTimezoneResolve();
 
   // Creates provider on demand.
   TimeZoneProvider* GetTimezoneProvider();
@@ -288,6 +281,11 @@
   void OnTimezoneResolved(scoped_ptr<TimeZoneResponseData> timezone,
                           bool server_error);
 
+  // Called from SimpleGeolocationProvider when location is resolved.
+  void OnLocationResolved(const Geoposition& position,
+                          bool server_error,
+                          const base::TimeDelta elapsed);
+
   // Whether to skip any screens that may normally be shown after login
   // (registration, Terms of Service, user image selection).
   static bool skip_post_login_screens_;
@@ -377,6 +375,7 @@
 
   base::WeakPtrFactory<WizardController> weak_factory_;
 
+  scoped_ptr<SimpleGeolocationProvider> geolocation_provider_;
   scoped_ptr<TimeZoneProvider> timezone_provider_;
 
   DISALLOW_COPY_AND_ASSIGN(WizardController);
diff --git a/chrome/browser/chromeos/login/wizard_controller_browsertest.cc b/chrome/browser/chromeos/login/wizard_controller_browsertest.cc
index 6b392ca..19c4617 100644
--- a/chrome/browser/chromeos/login/wizard_controller_browsertest.cc
+++ b/chrome/browser/chromeos/login/wizard_controller_browsertest.cc
@@ -206,6 +206,40 @@
         ->GetErrorScreen();
   }
 
+  content::WebContents* GetWebContents() {
+    LoginDisplayHostImpl* host = static_cast<LoginDisplayHostImpl*>(
+        LoginDisplayHostImpl::default_host());
+    if (!host)
+      return NULL;
+    WebUILoginView* webui_login_view = host->GetWebUILoginView();
+    if (!webui_login_view)
+      return NULL;
+    return webui_login_view->GetWebContents();
+  }
+
+  void WaitUntilJSIsReady() {
+    LoginDisplayHostImpl* host = static_cast<LoginDisplayHostImpl*>(
+        LoginDisplayHostImpl::default_host());
+    if (!host)
+      return;
+    chromeos::OobeUI* oobe_ui = host->GetOobeUI();
+    if (!oobe_ui)
+      return;
+    base::RunLoop run_loop;
+    const bool oobe_ui_ready = oobe_ui->IsJSReady(run_loop.QuitClosure());
+    if (!oobe_ui_ready)
+      run_loop.Run();
+  }
+
+  bool JSExecuteBooleanExpression(const std::string& expression) {
+    bool result;
+    EXPECT_TRUE(content::ExecuteScriptAndExtractBool(
+        GetWebContents(),
+        "window.domAutomationController.send(!!(" + expression + "));",
+        &result));
+    return result;
+  }
+
  private:
   DISALLOW_COPY_AND_ASSIGN(WizardControllerTest);
 };
@@ -318,12 +352,22 @@
   EXPECT_TRUE(ExistingUserController::current_controller() == NULL);
   EXPECT_EQ(WizardController::default_controller()->GetNetworkScreen(),
             WizardController::default_controller()->current_screen());
+
+  WaitUntilJSIsReady();
+
+  // Check visibility of the header bar.
+  ASSERT_FALSE(JSExecuteBooleanExpression("$('login-header-bar').hidden"));
+
   EXPECT_CALL(*mock_network_screen_, Hide()).Times(1);
   EXPECT_CALL(*mock_eula_screen_, Show()).Times(1);
   OnExit(ScreenObserver::NETWORK_CONNECTED);
 
   EXPECT_EQ(WizardController::default_controller()->GetEulaScreen(),
             WizardController::default_controller()->current_screen());
+
+  // Header bar should still be visible.
+  ASSERT_FALSE(JSExecuteBooleanExpression("$('login-header-bar').hidden"));
+
   EXPECT_CALL(*mock_eula_screen_, Hide()).Times(1);
   EXPECT_CALL(*mock_update_screen_, StartNetworkCheck()).Times(1);
   EXPECT_CALL(*mock_update_screen_, Show()).Times(1);
@@ -481,24 +525,6 @@
   base::MessageLoop::current()->RunUntilIdle();
 }
 
-IN_PROC_BROWSER_TEST_F(WizardControllerFlowTest, ControlFlowResetScreen) {
-  EXPECT_EQ(WizardController::default_controller()->GetNetworkScreen(),
-            WizardController::default_controller()->current_screen());
-
-  LoginDisplayHostImpl::default_host()->StartSignInScreen(LoginScreenContext());
-  EXPECT_FALSE(ExistingUserController::current_controller() == NULL);
-  ExistingUserController::current_controller()->OnStartDeviceReset();
-
-  ResetScreen* screen =
-      WizardController::default_controller()->GetResetScreen();
-  EXPECT_EQ(screen, WizardController::default_controller()->current_screen());
-
-  // After reset screen is canceled, it returns to sign-in screen.
-  // And this destroys WizardController.
-  OnExit(ScreenObserver::RESET_CANCELED);
-  EXPECT_FALSE(ExistingUserController::current_controller() == NULL);
-}
-
 IN_PROC_BROWSER_TEST_F(WizardControllerFlowTest,
                        ControlFlowWrongHWIDScreenFromLogin) {
   EXPECT_EQ(WizardController::default_controller()->GetNetworkScreen(),
@@ -653,39 +679,6 @@
     WizardControllerTest::TearDownInProcessBrowserTestFixture();
   }
 
-  content::WebContents* GetWebContents() {
-    LoginDisplayHostImpl* host = static_cast<LoginDisplayHostImpl*>(
-        LoginDisplayHostImpl::default_host());
-    if (!host)
-      return NULL;
-    WebUILoginView* webui_login_view = host->GetWebUILoginView();
-    if (!webui_login_view)
-      return NULL;
-    return webui_login_view->GetWebContents();
-  }
-
-  void WaitUntilJSIsReady() {
-    LoginDisplayHostImpl* host = static_cast<LoginDisplayHostImpl*>(
-        LoginDisplayHostImpl::default_host());
-    if (!host)
-      return;
-    chromeos::OobeUI* oobe_ui = host->GetOobeUI();
-    if (!oobe_ui)
-      return;
-    base::RunLoop run_loop;
-    const bool oobe_ui_ready = oobe_ui->IsJSReady(run_loop.QuitClosure());
-    if (!oobe_ui_ready)
-      run_loop.Run();
-  }
-
-  bool JSExecuteBooleanExpression(const std::string& expression) {
-    bool result;
-    EXPECT_TRUE(content::ExecuteScriptAndExtractBool(
-        GetWebContents(),
-        "window.domAutomationController.send(!!(" + expression + "));",
-        &result));
-    return result;
-  }
 
   FakeSessionManagerClient* fake_session_manager_client() const {
     return fake_session_manager_client_;
diff --git a/chrome/browser/chromeos/policy/device_local_account_browsertest.cc b/chrome/browser/chromeos/policy/device_local_account_browsertest.cc
index 6c51c18..88afef7 100644
--- a/chrome/browser/chromeos/policy/device_local_account_browsertest.cc
+++ b/chrome/browser/chromeos/policy/device_local_account_browsertest.cc
@@ -1305,9 +1305,9 @@
   ASSERT_TRUE(contents);
   std::string json;
   ASSERT_TRUE(content::ExecuteScriptAndExtractString(contents,
-      "var screen = document.getElementById('terms-of-service');"
+      "var screenElement = document.getElementById('terms-of-service');"
       "function SendReplyIfDownloadDone() {"
-      "  if (screen.classList.contains('tos-loading'))"
+      "  if (screenElement.classList.contains('tos-loading'))"
       "    return false;"
       "  var status = {};"
       "  status.heading = document.getElementById('tos-heading').textContent;"
@@ -1317,7 +1317,7 @@
       "      document.getElementById('tos-content-heading').textContent;"
       "  status.content ="
       "      document.getElementById('tos-content-main').textContent;"
-      "  status.error = screen.classList.contains('error');"
+      "  status.error = screenElement.classList.contains('error');"
       "  status.acceptEnabled ="
       "      !document.getElementById('tos-accept-button').disabled;"
       "  domAutomationController.send(JSON.stringify(status));"
@@ -1327,7 +1327,7 @@
       "var observer = new MutationObserver(SendReplyIfDownloadDone);"
       "if (!SendReplyIfDownloadDone()) {"
       "  var options = { attributes: true, attributeFilter: [ 'class' ] };"
-      "  observer.observe(screen, options);"
+      "  observer.observe(screenElement, options);"
       "}",
       &json));
   scoped_ptr<base::Value> value_ptr(base::JSONReader::Read(json));
diff --git a/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.cc b/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.cc
index 2483a07..3642465 100644
--- a/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.cc
+++ b/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.cc
@@ -10,6 +10,7 @@
 #include "base/metrics/histogram.h"
 #include "base/metrics/sparse_histogram.h"
 #include "base/sequenced_task_runner.h"
+#include "base/values.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/chromeos/policy/policy_oauth2_token_fetcher.h"
 #include "chrome/browser/chromeos/policy/user_cloud_policy_manager_factory_chromeos.h"
@@ -21,8 +22,11 @@
 #include "components/policy/core/common/cloud/cloud_policy_refresh_scheduler.h"
 #include "components/policy/core/common/cloud/device_management_service.h"
 #include "components/policy/core/common/cloud/system_policy_request_context.h"
+#include "components/policy/core/common/policy_map.h"
 #include "components/policy/core/common/policy_pref_names.h"
+#include "components/policy/core/common/policy_types.h"
 #include "net/url_request/url_request_context_getter.h"
+#include "policy/policy_constants.h"
 #include "url/gurl.h"
 
 namespace em = enterprise_management;
@@ -272,6 +276,20 @@
   StartRefreshSchedulerIfReady();
 }
 
+void UserCloudPolicyManagerChromeOS::GetChromePolicy(PolicyMap* policy_map) {
+  CloudPolicyManager::GetChromePolicy(policy_map);
+
+  // Default multi-profile behavior for managed accounts to primary-only.
+  if (store()->has_policy() &&
+      !policy_map->Get(key::kChromeOsMultiProfileUserBehavior)) {
+    policy_map->Set(key::kChromeOsMultiProfileUserBehavior,
+                    POLICY_LEVEL_MANDATORY,
+                    POLICY_SCOPE_USER,
+                    new base::StringValue("primary-only"),
+                    NULL);
+  }
+}
+
 void UserCloudPolicyManagerChromeOS::FetchPolicyOAuthTokenUsingSigninProfile() {
   scoped_refptr<net::URLRequestContextGetter> signin_context;
   Profile* signin_profile = chromeos::ProfileHelper::GetSigninProfile();
diff --git a/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.h b/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.h
index 285aea9..0f3837e 100644
--- a/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.h
+++ b/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.h
@@ -104,6 +104,10 @@
   // ComponentCloudPolicyService::Delegate:
   virtual void OnComponentCloudPolicyUpdated() OVERRIDE;
 
+ protected:
+  // CloudPolicyManager:
+  virtual void GetChromePolicy(PolicyMap* policy_map) OVERRIDE;
+
  private:
   // Fetches a policy token using the authentication context of the signin
   // Profile, and calls back to OnOAuth2PolicyTokenFetched when done.
diff --git a/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos_unittest.cc b/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos_unittest.cc
index 17f7844..2040d0a 100644
--- a/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos_unittest.cc
+++ b/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos_unittest.cc
@@ -111,10 +111,14 @@
     chrome::RegisterLocalState(prefs_.registry());
 
     // Set up a policy map for testing.
-    policy_map_.Set("HomepageLocation",
+    policy_map_.Set(key::kHomepageLocation,
                     POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
                     new base::StringValue("http://chromium.org"),
                     NULL);
+    policy_map_.Set(key::kChromeOsMultiProfileUserBehavior,
+                    POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
+                    new base::StringValue("primary-only"),
+                    NULL);
     expected_bundle_.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()))
         .CopyFrom(policy_map_);
 
diff --git a/chrome/browser/chromeos/power/idle_action_warning_observer.cc b/chrome/browser/chromeos/power/idle_action_warning_observer.cc
index d452cba..cc526ae 100644
--- a/chrome/browser/chromeos/power/idle_action_warning_observer.cc
+++ b/chrome/browser/chromeos/power/idle_action_warning_observer.cc
@@ -19,7 +19,8 @@
     warning_dialog_->CloseDialog();
 }
 
-void IdleActionWarningObserver::IdleActionImminent() {
+void IdleActionWarningObserver::IdleActionImminent(
+    const base::TimeDelta& time_until_idle_action) {
   if (!warning_dialog_)
     warning_dialog_ = new IdleActionWarningDialogView;
 }
diff --git a/chrome/browser/chromeos/power/idle_action_warning_observer.h b/chrome/browser/chromeos/power/idle_action_warning_observer.h
index 8cd0617..81deecf 100644
--- a/chrome/browser/chromeos/power/idle_action_warning_observer.h
+++ b/chrome/browser/chromeos/power/idle_action_warning_observer.h
@@ -21,7 +21,8 @@
   virtual ~IdleActionWarningObserver();
 
   // PowerManagerClient::Observer:
-  virtual void IdleActionImminent() OVERRIDE;
+  virtual void IdleActionImminent(
+      const base::TimeDelta& time_until_idle_action) OVERRIDE;
   virtual void IdleActionDeferred() OVERRIDE;
 
  private:
diff --git a/chrome/browser/chromeos/power/peripheral_battery_observer.cc b/chrome/browser/chromeos/power/peripheral_battery_observer.cc
index aed7048..b7ebea0 100644
--- a/chrome/browser/chromeos/power/peripheral_battery_observer.cc
+++ b/chrome/browser/chromeos/power/peripheral_battery_observer.cc
@@ -80,7 +80,7 @@
   virtual std::string id() const OVERRIDE { return id_; }
   // A NULL return value prevents loading image from URL. It is OK since our
   // implementation loads image from system resource bundle.
-  virtual content::RenderViewHost* GetRenderViewHost() const OVERRIDE {
+  virtual content::WebContents* GetWebContents() const OVERRIDE {
     return NULL;
   }
 
diff --git a/chrome/browser/chromeos/power/power_data_collector.cc b/chrome/browser/chromeos/power/power_data_collector.cc
index a6ffe8f..bc8ebcd 100644
--- a/chrome/browser/chromeos/power/power_data_collector.cc
+++ b/chrome/browser/chromeos/power/power_data_collector.cc
@@ -59,7 +59,7 @@
   AddSample(&power_supply_data_, sample);
 }
 
-void PowerDataCollector::SystemResumed(const base::TimeDelta& sleep_duration) {
+void PowerDataCollector::SuspendDone(const base::TimeDelta& sleep_duration) {
   SystemResumedSample sample;
   sample.time = base::Time::Now();
   sample.sleep_duration = sleep_duration;
diff --git a/chrome/browser/chromeos/power/power_data_collector.h b/chrome/browser/chromeos/power/power_data_collector.h
index 16ee5f7..436361d 100644
--- a/chrome/browser/chromeos/power/power_data_collector.h
+++ b/chrome/browser/chromeos/power/power_data_collector.h
@@ -84,7 +84,7 @@
   // PowerManagerClient::Observer implementation:
   virtual void PowerChanged(
       const power_manager::PowerSupplyProperties& prop) OVERRIDE;
-  virtual void SystemResumed(const base::TimeDelta& sleep_duration) OVERRIDE;
+  virtual void SuspendDone(const base::TimeDelta& sleep_duration) OVERRIDE;
 
   // Only those power data samples which fall within the last
   // |kSampleTimeLimitSec| are stored in memory.
diff --git a/chrome/browser/chromeos/power/power_data_collector_unittest.cc b/chrome/browser/chromeos/power/power_data_collector_unittest.cc
index b45e43d..821d1d4 100644
--- a/chrome/browser/chromeos/power/power_data_collector_unittest.cc
+++ b/chrome/browser/chromeos/power/power_data_collector_unittest.cc
@@ -55,14 +55,14 @@
   EXPECT_TRUE(data2[1].external_power);
 }
 
-TEST_F(PowerDataCollectorTest, SystemResumed) {
-  power_data_collector_->SystemResumed(base::TimeDelta::FromSeconds(10));
+TEST_F(PowerDataCollectorTest, SuspendDone) {
+  power_data_collector_->SuspendDone(base::TimeDelta::FromSeconds(10));
   const std::deque<PowerDataCollector::SystemResumedSample>& data1 =
       power_data_collector_->system_resumed_data();
   ASSERT_EQ(static_cast<size_t>(1), data1.size());
   ASSERT_EQ(static_cast<int64>(10), data1[0].sleep_duration.InSeconds());
 
-  power_data_collector_->SystemResumed(base::TimeDelta::FromSeconds(20));
+  power_data_collector_->SuspendDone(base::TimeDelta::FromSeconds(20));
   const std::deque<PowerDataCollector::SystemResumedSample>& data2 =
       power_data_collector_->system_resumed_data();
   ASSERT_EQ(static_cast<size_t>(2), data2.size());
diff --git a/chrome/browser/chromeos/settings/device_identity_provider.cc b/chrome/browser/chromeos/settings/device_identity_provider.cc
new file mode 100644
index 0000000..22d3150
--- /dev/null
+++ b/chrome/browser/chromeos/settings/device_identity_provider.cc
@@ -0,0 +1,33 @@
+// 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.
+
+#include "chrome/browser/chromeos/settings/device_identity_provider.h"
+
+#include "chrome/browser/chromeos/settings/device_oauth2_token_service.h"
+
+namespace chromeos {
+
+DeviceIdentityProvider::DeviceIdentityProvider(
+    chromeos::DeviceOAuth2TokenService* token_service)
+    : token_service_(token_service) {}
+
+DeviceIdentityProvider::~DeviceIdentityProvider() {}
+
+std::string DeviceIdentityProvider::GetActiveUsername() {
+  return token_service_->GetRobotAccountId();
+}
+
+std::string DeviceIdentityProvider::GetActiveAccountId() {
+  return token_service_->GetRobotAccountId();
+}
+
+OAuth2TokenService* DeviceIdentityProvider::GetTokenService() {
+  return token_service_;
+}
+
+bool DeviceIdentityProvider::RequestLogin() {
+  return false;
+}
+
+}  // namespace chromeos
diff --git a/chrome/browser/chromeos/settings/device_identity_provider.h b/chrome/browser/chromeos/settings/device_identity_provider.h
new file mode 100644
index 0000000..8007574
--- /dev/null
+++ b/chrome/browser/chromeos/settings/device_identity_provider.h
@@ -0,0 +1,36 @@
+// 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.
+
+#ifndef CHROME_BROWSER_CHROMEOS_SETTINGS_DEVICE_IDENTITY_PROVIDER_H_
+#define CHROME_BROWSER_CHROMEOS_SETTINGS_DEVICE_IDENTITY_PROVIDER_H_
+
+#include "base/macros.h"
+#include "google_apis/gaia/identity_provider.h"
+
+namespace chromeos {
+
+class DeviceOAuth2TokenService;
+
+// Identity provider implementation backed by DeviceOAuth2TokenService.
+class DeviceIdentityProvider : public IdentityProvider {
+ public:
+  explicit DeviceIdentityProvider(
+      chromeos::DeviceOAuth2TokenService* token_service);
+  virtual ~DeviceIdentityProvider();
+
+  // IdentityProvider:
+  virtual std::string GetActiveUsername() OVERRIDE;
+  virtual std::string GetActiveAccountId() OVERRIDE;
+  virtual OAuth2TokenService* GetTokenService() OVERRIDE;
+  virtual bool RequestLogin() OVERRIDE;
+
+ private:
+  chromeos::DeviceOAuth2TokenService* token_service_;
+
+  DISALLOW_COPY_AND_ASSIGN(DeviceIdentityProvider);
+};
+
+}  // namespace chromeos
+
+#endif  // CHROME_BROWSER_CHROMEOS_SETTINGS_DEVICE_IDENTITY_PROVIDER_H_
diff --git a/chrome/browser/chromeos/settings/device_settings_service.cc b/chrome/browser/chromeos/settings/device_settings_service.cc
index f591948..20d8256 100644
--- a/chrome/browser/chromeos/settings/device_settings_service.cc
+++ b/chrome/browser/chromeos/settings/device_settings_service.cc
@@ -8,15 +8,16 @@
 #include "base/logging.h"
 #include "base/message_loop/message_loop.h"
 #include "base/stl_util.h"
+#include "base/time/time.h"
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/chromeos/policy/proto/chrome_device_policy.pb.h"
 #include "chrome/browser/chromeos/settings/owner_key_util.h"
 #include "chrome/browser/chromeos/settings/session_manager_operation.h"
+#include "components/policy/core/common/cloud/cloud_policy_constants.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/notification_service.h"
 #include "content/public/browser/notification_source.h"
 #include "crypto/rsa_private_key.h"
-#include "policy/proto/device_management_backend.pb.h"
 
 namespace em = enterprise_management;
 
@@ -127,13 +128,33 @@
 void DeviceSettingsService::SignAndStore(
     scoped_ptr<em::ChromeDeviceSettingsProto> new_settings,
     const base::Closure& callback) {
+  scoped_ptr<em::PolicyData> new_policy = AssemblePolicy(*new_settings);
   Enqueue(
       new SignAndStoreSettingsOperation(
           base::Bind(&DeviceSettingsService::HandleCompletedOperation,
                      weak_factory_.GetWeakPtr(),
                      callback),
-          new_settings.Pass(),
-          username_));
+          new_policy.Pass()));
+}
+
+void DeviceSettingsService::SetManagementSettings(
+    em::PolicyData::ManagementMode management_mode,
+    const std::string& request_token,
+    const std::string& device_id,
+    const base::Closure& callback) {
+  // TODO(davidyu): Check for invalid management mode transition.
+  scoped_ptr<em::PolicyData> policy = AssemblePolicy(*device_settings_);
+  if (policy) {
+    policy->set_management_mode(management_mode);
+    policy->set_request_token(request_token);
+    policy->set_device_id(device_id);
+  }
+  Enqueue(
+      new SignAndStoreSettingsOperation(
+          base::Bind(&DeviceSettingsService::HandleCompletedOperation,
+                     weak_factory_.GetWeakPtr(),
+                     callback),
+          policy.Pass()));
 }
 
 void DeviceSettingsService::Store(scoped_ptr<em::PolicyFetchResponse> policy,
@@ -361,6 +382,32 @@
   StartNextOperation();
 }
 
+scoped_ptr<em::PolicyData> DeviceSettingsService::AssemblePolicy(
+    const em::ChromeDeviceSettingsProto& settings) {
+  scoped_ptr<em::PolicyData> policy(new em::PolicyData());
+  if (policy_data_) {
+    // Preserve management settings.
+    if (policy_data_->has_management_mode())
+      policy->set_management_mode(policy_data_->management_mode());
+    if (policy_data_->has_request_token())
+      policy->set_request_token(policy_data_->request_token());
+    if (policy_data_->has_device_id())
+      policy->set_device_id(policy_data_->device_id());
+  } else {
+    // If there's no previous policy data, this is the first time the device
+    // setting is set. We set the management mode to NOT_MANAGED initially.
+    policy->set_management_mode(em::PolicyData::NOT_MANAGED);
+  }
+  policy->set_policy_type(policy::dm_protocol::kChromeDevicePolicyType);
+  policy->set_timestamp((base::Time::Now() - base::Time::UnixEpoch()).
+                        InMilliseconds());
+  policy->set_username(username_);
+  if (!settings.SerializeToString(policy->mutable_policy_value()))
+    return scoped_ptr<em::PolicyData>();
+
+  return policy.Pass();
+}
+
 ScopedTestDeviceSettingsService::ScopedTestDeviceSettingsService() {
   DeviceSettingsService::Initialize();
 }
diff --git a/chrome/browser/chromeos/settings/device_settings_service.h b/chrome/browser/chromeos/settings/device_settings_service.h
index 7e77c3e..9facc45 100644
--- a/chrome/browser/chromeos/settings/device_settings_service.h
+++ b/chrome/browser/chromeos/settings/device_settings_service.h
@@ -19,6 +19,7 @@
 #include "chromeos/dbus/session_manager_client.h"
 #include "chromeos/tpm_token_loader.h"
 #include "components/policy/core/common/cloud/cloud_policy_validator.h"
+#include "policy/proto/device_management_backend.pb.h"
 
 namespace crypto {
 class RSAPrivateKey;
@@ -26,8 +27,6 @@
 
 namespace enterprise_management {
 class ChromeDeviceSettingsProto;
-class PolicyData;
-class PolicyFetchResponse;
 }
 
 namespace chromeos {
@@ -167,6 +166,15 @@
       scoped_ptr<enterprise_management::ChromeDeviceSettingsProto> new_settings,
       const base::Closure& callback);
 
+  // Sets the management related settings in PolicyData. Note that if
+  // |management_mode| is NOT_MANAGED, |request_token| and |device_id| should be
+  // empty strings.
+  void SetManagementSettings(
+      enterprise_management::PolicyData::ManagementMode management_mode,
+      const std::string& request_token,
+      const std::string& device_id,
+      const base::Closure& callback);
+
   // Stores a policy blob to session_manager. The result of the operation is
   // reported through |callback|. If successful, the updated device settings are
   // present in policy_data() and device_settings() when the callback runs.
@@ -227,6 +235,11 @@
                                 SessionManagerOperation* operation,
                                 Status status);
 
+  // Assembles PolicyData based on |settings| and the current |policy_data_|
+  // and |username_|.
+  scoped_ptr<enterprise_management::PolicyData> AssemblePolicy(
+      const enterprise_management::ChromeDeviceSettingsProto& settings);
+
   SessionManagerClient* session_manager_client_;
   scoped_refptr<OwnerKeyUtil> owner_key_util_;
 
diff --git a/chrome/browser/chromeos/settings/device_settings_service_unittest.cc b/chrome/browser/chromeos/settings/device_settings_service_unittest.cc
index 746287c..0f0037b 100644
--- a/chrome/browser/chromeos/settings/device_settings_service_unittest.cc
+++ b/chrome/browser/chromeos/settings/device_settings_service_unittest.cc
@@ -8,8 +8,10 @@
 #include "base/bind.h"
 #include "base/bind_helpers.h"
 #include "base/compiler_specific.h"
+#include "base/time/time.h"
 #include "chrome/browser/chromeos/policy/proto/chrome_device_policy.pb.h"
 #include "chrome/browser/chromeos/settings/device_settings_test_helper.h"
+#include "components/policy/core/common/cloud/cloud_policy_constants.h"
 #include "policy/proto/device_management_backend.pb.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -182,6 +184,7 @@
 }
 
 TEST_F(DeviceSettingsServiceTest, SignAndStoreSuccess) {
+  const base::Time before(base::Time::Now());
   ReloadDeviceSettings();
   EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS,
             device_settings_service_.status());
@@ -199,12 +202,58 @@
       base::Bind(&DeviceSettingsServiceTest::SetOperationCompleted,
                  base::Unretained(this)));
   FlushDeviceSettings();
+  const base::Time after(base::Time::Now());
+
   EXPECT_TRUE(operation_completed_);
   EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS,
             device_settings_service_.status());
   ASSERT_TRUE(device_settings_service_.device_settings());
   EXPECT_EQ(device_policy_.payload().SerializeAsString(),
             device_settings_service_.device_settings()->SerializeAsString());
+
+   // Check that the loaded policy_data contains the expected values.
+  const em::PolicyData* policy_data = device_settings_service_.policy_data();
+  EXPECT_EQ(policy::dm_protocol::kChromeDevicePolicyType,
+            policy_data->policy_type());
+  EXPECT_LE((before - base::Time::UnixEpoch()).InMilliseconds(),
+            policy_data->timestamp());
+  EXPECT_GE((after - base::Time::UnixEpoch()).InMilliseconds(),
+            policy_data->timestamp());
+  EXPECT_EQ(device_settings_service_.GetUsername(),
+            policy_data->username());
+}
+
+TEST_F(DeviceSettingsServiceTest, SetManagementSettingsSuccess) {
+  ReloadDeviceSettings();
+  EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS,
+            device_settings_service_.status());
+
+  owner_key_util_->SetPrivateKey(device_policy_.GetSigningKey());
+  device_settings_service_.SetUsername(device_policy_.policy_data().username());
+  FlushDeviceSettings();
+
+  device_settings_service_.SetManagementSettings(
+      em::PolicyData::CONSUMER_MANAGED,
+      "fake_request_token",
+      "fake_device_id",
+      base::Bind(&DeviceSettingsServiceTest::SetOperationCompleted,
+                 base::Unretained(this)));
+  FlushDeviceSettings();
+
+  EXPECT_TRUE(operation_completed_);
+  EXPECT_EQ(DeviceSettingsService::STORE_SUCCESS,
+            device_settings_service_.status());
+  ASSERT_TRUE(device_settings_service_.device_settings());
+
+  // Check that the loaded policy_data contains the expected values.
+  const em::PolicyData* policy_data = device_settings_service_.policy_data();
+  EXPECT_EQ(policy::dm_protocol::kChromeDevicePolicyType,
+            policy_data->policy_type());
+  EXPECT_EQ(device_settings_service_.GetUsername(),
+            policy_data->username());
+  EXPECT_EQ(em::PolicyData::CONSUMER_MANAGED, policy_data->management_mode());
+  EXPECT_EQ("fake_request_token", policy_data->request_token());
+  EXPECT_EQ("fake_device_id", policy_data->device_id());
 }
 
 TEST_F(DeviceSettingsServiceTest, StoreFailure) {
diff --git a/chrome/browser/chromeos/settings/session_manager_operation.cc b/chrome/browser/chromeos/settings/session_manager_operation.cc
index 74efda9..9cab08e 100644
--- a/chrome/browser/chromeos/settings/session_manager_operation.cc
+++ b/chrome/browser/chromeos/settings/session_manager_operation.cc
@@ -11,7 +11,6 @@
 #include "base/stl_util.h"
 #include "base/task_runner_util.h"
 #include "base/threading/sequenced_worker_pool.h"
-#include "base/time/time.h"
 #include "chrome/browser/chromeos/policy/proto/chrome_device_policy.pb.h"
 #include "chrome/browser/chromeos/settings/owner_key_util.h"
 #include "components/policy/core/common/cloud/cloud_policy_constants.h"
@@ -248,24 +247,29 @@
 
 SignAndStoreSettingsOperation::SignAndStoreSettingsOperation(
     const Callback& callback,
-    scoped_ptr<em::ChromeDeviceSettingsProto> new_settings,
-    const std::string& username)
+    scoped_ptr<em::PolicyData> new_policy)
     : SessionManagerOperation(callback),
-      new_settings_(new_settings.Pass()),
-      username_(username),
+      new_policy_(new_policy.Pass()),
       weak_factory_(this) {
-  DCHECK(new_settings_.get());
+  DCHECK(new_policy_);
 }
 
 SignAndStoreSettingsOperation::~SignAndStoreSettingsOperation() {}
 
 void SignAndStoreSettingsOperation::Run() {
+  if (!new_policy_) {
+    ReportResult(DeviceSettingsService::STORE_POLICY_ERROR);
+    return;
+  }
+
   EnsureOwnerKey(base::Bind(&SignAndStoreSettingsOperation::StartSigning,
                             weak_factory_.GetWeakPtr()));
 }
 
 void SignAndStoreSettingsOperation::StartSigning() {
-  if (!owner_key().get() || !owner_key()->private_key() || username_.empty()) {
+  if (!owner_key().get() ||
+      !owner_key()->private_key() ||
+      new_policy_->username().empty()) {
     ReportResult(DeviceSettingsService::STORE_KEY_UNAVAILABLE);
     return;
   }
@@ -274,25 +278,18 @@
       content::BrowserThread::GetBlockingPool(),
       FROM_HERE,
       base::Bind(&SignAndStoreSettingsOperation::AssembleAndSignPolicy,
-                 base::Passed(&new_settings_), username_, owner_key()),
+                 base::Passed(&new_policy_), owner_key()),
       base::Bind(&SignAndStoreSettingsOperation::StoreDeviceSettingsBlob,
                  weak_factory_.GetWeakPtr()));
 }
 
 // static
 std::string SignAndStoreSettingsOperation::AssembleAndSignPolicy(
-    scoped_ptr<em::ChromeDeviceSettingsProto> device_settings,
-    const std::string& username,
+    scoped_ptr<em::PolicyData> policy,
     scoped_refptr<OwnerKey> owner_key) {
   // Assemble the policy.
   em::PolicyFetchResponse policy_response;
-  em::PolicyData policy;
-  policy.set_policy_type(policy::dm_protocol::kChromeDevicePolicyType);
-  policy.set_timestamp((base::Time::NowFromSystemTime() -
-                        base::Time::UnixEpoch()).InMilliseconds());
-  policy.set_username(username);
-  if (!device_settings->SerializeToString(policy.mutable_policy_value()) ||
-      !policy.SerializeToString(policy_response.mutable_policy_data())) {
+  if (!policy->SerializeToString(policy_response.mutable_policy_data())) {
     LOG(ERROR) << "Failed to encode policy payload.";
     return std::string();
   }
diff --git a/chrome/browser/chromeos/settings/session_manager_operation.h b/chrome/browser/chromeos/settings/session_manager_operation.h
index 65e2a19..f15e0eb 100644
--- a/chrome/browser/chromeos/settings/session_manager_operation.h
+++ b/chrome/browser/chromeos/settings/session_manager_operation.h
@@ -167,8 +167,7 @@
   // Creates a new sign-and-store operation.
   SignAndStoreSettingsOperation(
       const Callback& callback,
-      scoped_ptr<enterprise_management::ChromeDeviceSettingsProto> new_settings,
-      const std::string& username);
+      scoped_ptr<enterprise_management::PolicyData> new_policy);
   virtual ~SignAndStoreSettingsOperation();
 
   // SessionManagerOperation:
@@ -180,8 +179,7 @@
 
   // Builds the policy blob and signs it using the owner key.
   static std::string AssembleAndSignPolicy(
-      scoped_ptr<enterprise_management::ChromeDeviceSettingsProto> settings,
-      const std::string& username,
+      scoped_ptr<enterprise_management::PolicyData> policy,
       scoped_refptr<OwnerKey> owner_key);
 
   // Stores the signed device settings blob.
@@ -190,14 +188,13 @@
   // Handles the result of the store operation and triggers the load.
   void HandleStoreResult(bool success);
 
-  scoped_ptr<enterprise_management::ChromeDeviceSettingsProto> new_settings_;
-  std::string username_;
+  scoped_ptr<enterprise_management::PolicyData> new_policy_;
 
   base::WeakPtrFactory<SignAndStoreSettingsOperation> weak_factory_;
 
   DISALLOW_COPY_AND_ASSIGN(SignAndStoreSettingsOperation);
 };
 
-}  // namespace
+}  // namespace chromeos
 
 #endif  // CHROME_BROWSER_CHROMEOS_SETTINGS_SESSION_MANAGER_OPERATION_H_
diff --git a/chrome/browser/chromeos/settings/session_manager_operation_unittest.cc b/chrome/browser/chromeos/settings/session_manager_operation_unittest.cc
index 7ae35bc..f55beeb 100644
--- a/chrome/browser/chromeos/settings/session_manager_operation_unittest.cc
+++ b/chrome/browser/chromeos/settings/session_manager_operation_unittest.cc
@@ -10,6 +10,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/message_loop/message_loop.h"
+#include "base/time/time.h"
 #include "chrome/browser/chromeos/policy/proto/chrome_device_policy.pb.h"
 #include "chrome/browser/chromeos/settings/device_settings_test_helper.h"
 #include "chrome/browser/chromeos/settings/mock_owner_key_util.h"
@@ -228,14 +229,12 @@
 }
 
 TEST_F(SessionManagerOperationTest, SignAndStoreSettings) {
-  base::Time before(base::Time::NowFromSystemTime());
   owner_key_util_->SetPrivateKey(policy_.GetSigningKey());
+  scoped_ptr<em::PolicyData> policy(new em::PolicyData(policy_.policy_data()));
   SignAndStoreSettingsOperation op(
       base::Bind(&SessionManagerOperationTest::OnOperationCompleted,
                  base::Unretained(this)),
-      scoped_ptr<em::ChromeDeviceSettingsProto>(
-          new em::ChromeDeviceSettingsProto(policy_.payload())),
-      policy_.policy_data().username());
+      policy.Pass());
 
   EXPECT_CALL(*this,
               OnOperationCompleted(
@@ -243,7 +242,6 @@
   op.Start(&device_settings_test_helper_, owner_key_util_, NULL);
   device_settings_test_helper_.Flush();
   Mock::VerifyAndClearExpectations(this);
-  base::Time after(base::Time::NowFromSystemTime());
 
   // The blob should validate.
   scoped_ptr<em::PolicyFetchResponse> policy_response(
@@ -255,9 +253,11 @@
       policy::DeviceCloudPolicyValidator::Create(
           policy_response.Pass(), message_loop_.message_loop_proxy());
   validator->ValidateUsername(policy_.policy_data().username(), true);
+  const base::Time expected_time = base::Time::UnixEpoch() +
+      base::TimeDelta::FromMilliseconds(policy::PolicyBuilder::kFakeTimestamp);
   validator->ValidateTimestamp(
-      before,
-      after,
+      expected_time,
+      expected_time,
       policy::CloudPolicyValidatorBase::TIMESTAMP_REQUIRED);
   validator->ValidatePolicyType(policy::dm_protocol::kChromeDevicePolicyType);
   validator->ValidatePayload();
@@ -280,16 +280,6 @@
   message_loop_.RunUntilIdle();
   EXPECT_TRUE(validated_);
 
-  // Check that the loaded policy_data contains the expected values.
-  EXPECT_EQ(policy::dm_protocol::kChromeDevicePolicyType,
-            op.policy_data()->policy_type());
-  EXPECT_LE((before - base::Time::UnixEpoch()).InMilliseconds(),
-            op.policy_data()->timestamp());
-  EXPECT_GE((after - base::Time::UnixEpoch()).InMilliseconds(),
-            op.policy_data()->timestamp());
-  EXPECT_FALSE(op.policy_data()->has_request_token());
-  EXPECT_EQ(policy_.policy_data().username(), op.policy_data()->username());
-
   // Loaded device settings should match what the operation received.
   ASSERT_TRUE(op.device_settings().get());
   EXPECT_EQ(policy_.payload().SerializeAsString(),
diff --git a/chrome/browser/chromeos/status/network_menu.cc b/chrome/browser/chromeos/status/network_menu.cc
index b6f2583..6575cbe 100644
--- a/chrome/browser/chromeos/status/network_menu.cc
+++ b/chrome/browser/chromeos/status/network_menu.cc
@@ -14,11 +14,11 @@
 #include "base/logging.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
-#include "chrome/browser/chromeos/choose_mobile_network_dialog.h"
 #include "chrome/browser/chromeos/login/user_manager.h"
 #include "chrome/browser/chromeos/mobile_config.h"
 #include "chrome/browser/chromeos/options/network_config_view.h"
 #include "chrome/browser/chromeos/sim_dialog_delegate.h"
+#include "chrome/browser/chromeos/ui/choose_mobile_network_dialog.h"
 #include "chrome/browser/defaults.h"
 #include "chrome/browser/profiles/profile_manager.h"
 #include "chrome/common/url_constants.h"
diff --git a/chrome/browser/chromeos/system/automatic_reboot_manager.cc b/chrome/browser/chromeos/system/automatic_reboot_manager.cc
index a6b95e8..0a1be87 100644
--- a/chrome/browser/chromeos/system/automatic_reboot_manager.cc
+++ b/chrome/browser/chromeos/system/automatic_reboot_manager.cc
@@ -216,7 +216,7 @@
   observers_.RemoveObserver(observer);
 }
 
-void AutomaticRebootManager::SystemResumed(
+void AutomaticRebootManager::SuspendDone(
     const base::TimeDelta& sleep_duration) {
   MaybeReboot(true);
 }
diff --git a/chrome/browser/chromeos/system/automatic_reboot_manager.h b/chrome/browser/chromeos/system/automatic_reboot_manager.h
index 6e1adb5..1be4e2d 100644
--- a/chrome/browser/chromeos/system/automatic_reboot_manager.h
+++ b/chrome/browser/chromeos/system/automatic_reboot_manager.h
@@ -97,7 +97,7 @@
   void RemoveObserver(AutomaticRebootManagerObserver* observer);
 
   // PowerManagerClient::Observer:
-  virtual void SystemResumed(const base::TimeDelta& sleep_duration) OVERRIDE;
+  virtual void SuspendDone(const base::TimeDelta& sleep_duration) OVERRIDE;
 
   // UpdateEngineClient::Observer:
   virtual void UpdateStatusChanged(
diff --git a/chrome/browser/chromeos/system/automatic_reboot_manager_unittest.cc b/chrome/browser/chromeos/system/automatic_reboot_manager_unittest.cc
index f3204b6..409d36d 100644
--- a/chrome/browser/chromeos/system/automatic_reboot_manager_unittest.cc
+++ b/chrome/browser/chromeos/system/automatic_reboot_manager_unittest.cc
@@ -426,7 +426,7 @@
 }
 
 void AutomaticRebootManagerBasicTest::NotifyResumed(bool expect_reboot) {
-  automatic_reboot_manager_->SystemResumed(base::TimeDelta::FromHours(1));
+  automatic_reboot_manager_->SuspendDone(base::TimeDelta::FromHours(1));
   task_runner_->RunUntilIdle();
   EXPECT_EQ(expect_reboot ? 1 : 0,
             power_manager_client_->num_request_restart_calls());
diff --git a/chrome/browser/chromeos/timezone/timezone_provider.cc b/chrome/browser/chromeos/timezone/timezone_provider.cc
index bc697b5..6474acf 100644
--- a/chrome/browser/chromeos/timezone/timezone_provider.cc
+++ b/chrome/browser/chromeos/timezone/timezone_provider.cc
@@ -10,7 +10,7 @@
 #include "base/bind.h"
 #include "base/logging.h"
 #include "base/time/time.h"
-#include "content/public/common/geoposition.h"
+#include "chrome/browser/chromeos/geolocation/geoposition.h"
 #include "net/url_request/url_request_context_getter.h"
 #include "url/gurl.h"
 
@@ -27,7 +27,7 @@
 }
 
 void TimeZoneProvider::RequestTimezone(
-    const content::Geoposition& position,
+    const Geoposition& position,
     bool sensor,
     base::TimeDelta timeout,
     TimeZoneRequest::TimeZoneResponseCallback callback) {
diff --git a/chrome/browser/chromeos/timezone/timezone_provider.h b/chrome/browser/chromeos/timezone/timezone_provider.h
index d6a9ee9..0b5741b 100644
--- a/chrome/browser/chromeos/timezone/timezone_provider.h
+++ b/chrome/browser/chromeos/timezone/timezone_provider.h
@@ -19,12 +19,10 @@
 class URLRequestContextGetter;
 }
 
-namespace content {
-struct Geoposition;
-}
-
 namespace chromeos {
 
+struct Geoposition;
+
 // This class implements Google TimeZone API.
 //
 // Note: this should probably be a singleton to monitor requests rate.
@@ -36,7 +34,7 @@
   virtual ~TimeZoneProvider();
 
   // Initiates new request (See TimeZoneRequest for parameters description.)
-  void RequestTimezone(const content::Geoposition& position,
+  void RequestTimezone(const Geoposition& position,
                        bool sensor,
                        base::TimeDelta timeout,
                        TimeZoneRequest::TimeZoneResponseCallback callback);
diff --git a/chrome/browser/chromeos/timezone/timezone_request.cc b/chrome/browser/chromeos/timezone/timezone_request.cc
index ee2ea42..c9d442e 100644
--- a/chrome/browser/chromeos/timezone/timezone_request.cc
+++ b/chrome/browser/chromeos/timezone/timezone_request.cc
@@ -13,7 +13,7 @@
 #include "base/strings/stringprintf.h"
 #include "base/time/time.h"
 #include "base/values.h"
-#include "content/public/common/geoposition.h"
+#include "chrome/browser/chromeos/geolocation/geoposition.h"
 #include "google_apis/google_api_keys.h"
 #include "net/base/escape.h"
 #include "net/base/load_flags.h"
@@ -118,7 +118,7 @@
 
 // Creates the request url to send to the server.
 GURL TimeZoneRequestURL(const GURL& url,
-                        const content::Geoposition& geoposition,
+                        const Geoposition& geoposition,
                         bool sensor) {
   std::string query(url.query());
   query += base::StringPrintf(
@@ -304,7 +304,7 @@
 TimeZoneRequest::TimeZoneRequest(
     net::URLRequestContextGetter* url_context_getter,
     const GURL& service_url,
-    const content::Geoposition& geoposition,
+    const Geoposition& geoposition,
     bool sensor,
     base::TimeDelta retry_timeout)
     : url_context_getter_(url_context_getter),
diff --git a/chrome/browser/chromeos/timezone/timezone_request.h b/chrome/browser/chromeos/timezone/timezone_request.h
index ee46930..77deb4f 100644
--- a/chrome/browser/chromeos/timezone/timezone_request.h
+++ b/chrome/browser/chromeos/timezone/timezone_request.h
@@ -12,7 +12,7 @@
 #include "base/memory/scoped_ptr.h"
 #include "base/threading/thread_checker.h"
 #include "base/timer/timer.h"
-#include "content/public/common/geoposition.h"
+#include "chrome/browser/chromeos/geolocation/geoposition.h"
 #include "net/url_request/url_fetcher.h"
 #include "net/url_request/url_fetcher_delegate.h"
 #include "url/gurl.h"
@@ -72,7 +72,7 @@
   // |retry_timeout| retry request on error until timeout.
   TimeZoneRequest(net::URLRequestContextGetter* url_context_getter,
                   const GURL& service_url,
-                  const content::Geoposition& geoposition,
+                  const Geoposition& geoposition,
                   bool sensor,
                   base::TimeDelta retry_timeout);
 
@@ -95,7 +95,7 @@
 
   scoped_refptr<net::URLRequestContextGetter> url_context_getter_;
   const GURL service_url_;
-  content::Geoposition geoposition_;
+  Geoposition geoposition_;
   const bool sensor_;
 
   TimeZoneResponseCallback callback_;
diff --git a/chrome/browser/chromeos/ui/choose_mobile_network_dialog.cc b/chrome/browser/chromeos/ui/choose_mobile_network_dialog.cc
new file mode 100644
index 0000000..5abb03d
--- /dev/null
+++ b/chrome/browser/chromeos/ui/choose_mobile_network_dialog.cc
@@ -0,0 +1,80 @@
+// 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.
+
+#include "chrome/browser/chromeos/ui/choose_mobile_network_dialog.h"
+
+#include "chrome/browser/chromeos/login/user_manager.h"
+#include "chrome/browser/profiles/profile_manager.h"
+#include "chrome/browser/ui/browser_dialogs.h"
+#include "chrome/common/url_constants.h"
+#include "ui/gfx/size.h"
+
+using content::WebContents;
+using content::WebUIMessageHandler;
+
+namespace {
+
+// Default width/height of the dialog.
+const int kDefaultWidth = 350;
+const int kDefaultHeight = 225;
+
+}  // namespace
+
+namespace chromeos {
+
+// static
+void ChooseMobileNetworkDialog::ShowDialog(gfx::NativeWindow owning_window) {
+  chrome::ShowWebDialog(owning_window,
+                        ProfileManager::GetActiveUserProfile(),
+                        new ChooseMobileNetworkDialog);
+}
+
+ChooseMobileNetworkDialog::ChooseMobileNetworkDialog() {
+}
+
+ui::ModalType ChooseMobileNetworkDialog::GetDialogModalType() const {
+  return ui::MODAL_TYPE_SYSTEM;
+}
+
+base::string16 ChooseMobileNetworkDialog::GetDialogTitle() const {
+  return base::string16();
+}
+
+GURL ChooseMobileNetworkDialog::GetDialogContentURL() const {
+  return GURL(chrome::kChromeUIChooseMobileNetworkURL);
+}
+
+void ChooseMobileNetworkDialog::GetWebUIMessageHandlers(
+    std::vector<WebUIMessageHandler*>* handlers) const {
+}
+
+void ChooseMobileNetworkDialog::GetDialogSize(gfx::Size* size) const {
+  size->SetSize(kDefaultWidth, kDefaultHeight);
+}
+
+std::string ChooseMobileNetworkDialog::GetDialogArgs() const {
+  return "[]";
+}
+
+void ChooseMobileNetworkDialog::OnDialogClosed(const std::string& json_retval) {
+  delete this;
+}
+
+void ChooseMobileNetworkDialog::OnCloseContents(WebContents* source,
+                                                bool* out_close_dialog) {
+  if (out_close_dialog)
+    *out_close_dialog = true;
+}
+
+bool ChooseMobileNetworkDialog::ShouldShowDialogTitle() const {
+  return false;
+}
+
+bool ChooseMobileNetworkDialog::HandleContextMenu(
+    const content::ContextMenuParams& params) {
+  // Disable context menu.
+  return true;
+}
+
+}  // namespace chromeos
diff --git a/chrome/browser/chromeos/ui/choose_mobile_network_dialog.h b/chrome/browser/chromeos/ui/choose_mobile_network_dialog.h
new file mode 100644
index 0000000..99b4e4e
--- /dev/null
+++ b/chrome/browser/chromeos/ui/choose_mobile_network_dialog.h
@@ -0,0 +1,44 @@
+// 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.
+
+#ifndef CHROME_BROWSER_CHROMEOS_UI_CHOOSE_MOBILE_NETWORK_DIALOG_H_
+#define CHROME_BROWSER_CHROMEOS_UI_CHOOSE_MOBILE_NETWORK_DIALOG_H_
+
+#include "base/basictypes.h"
+#include "base/compiler_specific.h"
+#include "ui/gfx/native_widget_types.h"
+#include "ui/web_dialogs/web_dialog_delegate.h"
+
+namespace chromeos {
+
+// Dialog for manual selection of cellular network.
+class ChooseMobileNetworkDialog : public ui::WebDialogDelegate {
+ public:
+  // Shows the dialog box.
+  static void ShowDialog(gfx::NativeWindow owning_window);
+
+ private:
+  ChooseMobileNetworkDialog();
+
+  // Overridden from ui::WebDialogDelegate:
+  virtual ui::ModalType GetDialogModalType() const OVERRIDE;
+  virtual base::string16 GetDialogTitle() const OVERRIDE;
+  virtual GURL GetDialogContentURL() const OVERRIDE;
+  virtual void GetWebUIMessageHandlers(
+      std::vector<content::WebUIMessageHandler*>* handlers) const OVERRIDE;
+  virtual void GetDialogSize(gfx::Size* size) const OVERRIDE;
+  virtual std::string GetDialogArgs() const OVERRIDE;
+  virtual void OnDialogClosed(const std::string& json_retval) OVERRIDE;
+  virtual void OnCloseContents(
+      content::WebContents* source, bool* out_close_dialog) OVERRIDE;
+  virtual bool ShouldShowDialogTitle() const OVERRIDE;
+  virtual bool HandleContextMenu(
+      const content::ContextMenuParams& params) OVERRIDE;
+
+  DISALLOW_COPY_AND_ASSIGN(ChooseMobileNetworkDialog);
+};
+
+}  // namespace chromeos
+
+#endif  // CHROME_BROWSER_CHROMEOS_UI_CHOOSE_MOBILE_NETWORK_DIALOG_H_
diff --git a/chrome/browser/chromeos/ui/mobile_config_ui.cc b/chrome/browser/chromeos/ui/mobile_config_ui.cc
new file mode 100644
index 0000000..0d27362
--- /dev/null
+++ b/chrome/browser/chromeos/ui/mobile_config_ui.cc
@@ -0,0 +1,44 @@
+// 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.
+
+#include "chrome/browser/chromeos/ui/mobile_config_ui.h"
+
+#include <string>
+
+#include "base/logging.h"
+#include "chrome/browser/chromeos/mobile_config.h"
+#include "chrome/browser/profiles/profile_manager.h"
+#include "chrome/browser/ui/host_desktop.h"
+#include "chrome/browser/ui/scoped_tabbed_browser_displayer.h"
+#include "chrome/browser/ui/singleton_tabs.h"
+
+namespace chromeos {
+namespace mobile_config_ui {
+
+bool DisplayConfigDialog() {
+  MobileConfig* config = MobileConfig::GetInstance();
+  if (!config->IsReady()) {
+    LOG(ERROR) << "MobileConfig not ready";
+    return false;
+  }
+  const MobileConfig::LocaleConfig* locale_config = config->GetLocaleConfig();
+  if (!locale_config) {
+    LOG(ERROR) << "MobileConfig::LocaleConfig not available";
+    return false;
+  }
+  std::string setup_url = locale_config->setup_url();
+  if (setup_url.empty()) {
+    LOG(ERROR) << "MobileConfig setup url is empty";
+    return false;
+  }
+  // The mobile device will be managed by the primary user.
+  chrome::ScopedTabbedBrowserDisplayer displayer(
+      ProfileManager::GetPrimaryUserProfile(),
+      chrome::HOST_DESKTOP_TYPE_ASH);
+  chrome::ShowSingletonTab(displayer.browser(), GURL(setup_url));
+  return true;
+}
+
+}  // namespace mobile_config_ui
+}  // namespace chromeos
diff --git a/chrome/browser/chromeos/ui/mobile_config_ui.h b/chrome/browser/chromeos/ui/mobile_config_ui.h
new file mode 100644
index 0000000..121edc5
--- /dev/null
+++ b/chrome/browser/chromeos/ui/mobile_config_ui.h
@@ -0,0 +1,20 @@
+// 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.
+
+#ifndef CHROME_BROWSER_CHROMEOS_UI_MOBILE_CONFIG_UI_H_
+#define CHROME_BROWSER_CHROMEOS_UI_MOBILE_CONFIG_UI_H_
+
+#include "base/basictypes.h"
+
+namespace chromeos {
+namespace mobile_config_ui {
+
+// Helper function for showing the mobile config UI.
+// Returns true if the dialog was displayed successfully.
+bool DisplayConfigDialog();
+
+}  // namespace mobile_config_ui
+}  // namespace chromeos
+
+#endif  // CHROME_BROWSER_CHROMEOS_UI_MOBILE_CONFIG_UI_H_
diff --git a/chrome/browser/component_updater/component_updater_configurator.cc b/chrome/browser/component_updater/component_updater_configurator.cc
index 65b1f85..4770b7a 100644
--- a/chrome/browser/component_updater/component_updater_configurator.cc
+++ b/chrome/browser/component_updater/component_updater_configurator.cc
@@ -47,7 +47,7 @@
 const char kDefaultUrlSource[] = "https:" COMPONENT_UPDATER_SERVICE_ENDPOINT;
 
 // The url to send the pings to.
-const char kPingUrl[] = "http:" COMPONENT_UPDATER_SERVICE_ENDPOINT;
+const char kPingUrl[] = "https:" COMPONENT_UPDATER_SERVICE_ENDPOINT;
 
 // Disables differential updates.
 const char kSwitchDisableDeltaUpdates[] = "disable-delta-updates";
diff --git a/chrome/browser/component_updater/test/component_updater_service_unittest.cc b/chrome/browser/component_updater/test/component_updater_service_unittest.cc
index 4fa28f7..e0c8220 100644
--- a/chrome/browser/component_updater/test/component_updater_service_unittest.cc
+++ b/chrome/browser/component_updater/test/component_updater_service_unittest.cc
@@ -31,7 +31,7 @@
 
 namespace component_updater {
 
-#define POST_INTERCEPT_SCHEME    "http"
+#define POST_INTERCEPT_SCHEME    "https"
 #define POST_INTERCEPT_HOSTNAME  "localhost2"
 #define POST_INTERCEPT_PATH      "/update2"
 
@@ -1007,7 +1007,13 @@
 // 3- download full crx
 // 4- update check (loop 2 - no update available)
 // There should be one ping for the first attempted update.
-TEST_F(ComponentUpdaterTest, DifferentialUpdateFails) {
+// This test is flaky on Android. crbug.com/329883
+#if defined(OS_ANDROID)
+#define MAYBE_DifferentialUpdateFails DISABLED_DifferentialUpdateFails
+#else
+#define MAYBE_DifferentialUpdateFails DifferentialUpdateFails
+#endif
+TEST_F(ComponentUpdaterTest, MAYBE_DifferentialUpdateFails) {
   EXPECT_TRUE(post_interceptor_->ExpectRequest(new PartialMatch(
       "updatecheck"), test_file("updatecheck_diff_reply_2.xml")));
   EXPECT_TRUE(post_interceptor_->ExpectRequest(new PartialMatch("event")));
diff --git a/chrome/browser/component_updater/test/crx_downloader_unittest.cc b/chrome/browser/component_updater/test/crx_downloader_unittest.cc
index 42a5d2e..c06339c 100644
--- a/chrome/browser/component_updater/test/crx_downloader_unittest.cc
+++ b/chrome/browser/component_updater/test/crx_downloader_unittest.cc
@@ -168,7 +168,13 @@
 
 // Tests that specifying from two urls has no side effects. Expect a successful
 // download, and only one download request be made.
-TEST_F(CrxDownloaderTest, TwoUrls) {
+// This test is flaky on Android. crbug.com/329883
+#if defined(OS_ANDROID)
+#define MAYBE_TwoUrls DISABLED_TwoUrls
+#else
+#define MAYBE_TwoUrls TwoUrls
+#endif
+TEST_F(CrxDownloaderTest, MAYBE_TwoUrls) {
   const GURL expected_crx_url =
     GURL("http://localhost/download/jebgalgnebhfojomionfpkfelancnnkf.crx");
 
@@ -234,7 +240,13 @@
 }
 
 // Tests that the fallback to a valid url is successful.
-TEST_F(CrxDownloaderTest, TwoUrls_FirstInvalid) {
+// This test is flaky on Android. crbug.com/329883
+#if defined(OS_ANDROID)
+#define MAYBE_TwoUrls_FirstInvalid DISABLED_TwoUrls_FirstInvalid
+#else
+#define MAYBE_TwoUrls_FirstInvalid TwoUrls_FirstInvalid
+#endif
+TEST_F(CrxDownloaderTest, MAYBE_TwoUrls_FirstInvalid) {
   const GURL expected_crx_url =
     GURL("http://localhost/download/jebgalgnebhfojomionfpkfelancnnkf.crx");
 
diff --git a/chrome/browser/component_updater/test/update_checker_unittest.cc b/chrome/browser/component_updater/test/update_checker_unittest.cc
index c031488..117caf3 100644
--- a/chrome/browser/component_updater/test/update_checker_unittest.cc
+++ b/chrome/browser/component_updater/test/update_checker_unittest.cc
@@ -166,7 +166,7 @@
       "updatecheck"), test_file("updatecheck_reply_1.xml")));
 
   update_checker_ = UpdateChecker::Create(
-      GURL("http://localhost2/update2"),
+      GURL("https://localhost2/update2"),
       context(),
       base::Bind(&UpdateCheckerTest::UpdateCheckComplete,
                  base::Unretained(this))).Pass();
@@ -209,7 +209,7 @@
                                                 test_file("no such file")));
 
   update_checker_ = UpdateChecker::Create(
-      GURL("http://localhost2/update2"),
+      GURL("https://localhost2/update2"),
       context(),
       base::Bind(&UpdateCheckerTest::UpdateCheckComplete,
                  base::Unretained(this))).Pass();
diff --git a/chrome/browser/content_settings/content_settings_internal_extension_provider.cc b/chrome/browser/content_settings/content_settings_internal_extension_provider.cc
index 1d2769a..46644f5 100644
--- a/chrome/browser/content_settings/content_settings_internal_extension_provider.cc
+++ b/chrome/browser/content_settings/content_settings_internal_extension_provider.cc
@@ -37,7 +37,8 @@
   Profile* profile = extension_service->profile();
   registrar_->Add(this, chrome::NOTIFICATION_EXTENSION_HOST_CREATED,
                   content::Source<Profile>(profile));
-  registrar_->Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
+  registrar_->Add(this,
+                  chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
                   content::Source<Profile>(profile));
   registrar_->Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
                   content::Source<Profile>(profile));
@@ -120,7 +121,7 @@
 
       break;
     }
-    case chrome::NOTIFICATION_EXTENSION_LOADED: {
+    case chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED: {
       const extensions::Extension* extension =
           content::Details<extensions::Extension>(details).ptr();
       if (extensions::PluginInfo::HasPlugins(extension))
diff --git a/chrome/browser/content_settings/permission_queue_controller.cc b/chrome/browser/content_settings/permission_queue_controller.cc
index 3b30691..2a7e075 100644
--- a/chrome/browser/content_settings/permission_queue_controller.cc
+++ b/chrome/browser/content_settings/permission_queue_controller.cc
@@ -8,13 +8,13 @@
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/content_settings/host_content_settings_map.h"
 #include "chrome/browser/geolocation/geolocation_infobar_delegate.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/media/midi_permission_infobar_delegate.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/tab_contents/tab_util.h"
 #include "chrome/common/content_settings.h"
 #include "chrome/common/pref_names.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/notification_details.h"
 #include "content/public/browser/notification_source.h"
@@ -52,7 +52,7 @@
   const PermissionRequestID& id() const { return id_; }
   const GURL& requesting_frame() const { return requesting_frame_; }
   bool has_infobar() const { return !!infobar_; }
-  InfoBar* infobar() { return infobar_; }
+  infobars::InfoBar* infobar() { return infobar_; }
 
   void RunCallback(bool allowed);
   void CreateInfoBar(PermissionQueueController* controller,
@@ -65,7 +65,7 @@
   GURL embedder_;
   std::string accept_button_label_;
   PermissionDecidedCallback callback_;
-  InfoBar* infobar_;
+  infobars::InfoBar* infobar_;
 
   // Purposefully do not disable copying, as this is stored in STL containers.
 };
@@ -276,7 +276,8 @@
   // pending_infobar_requests_ will not have received any new entries between
   // the NotificationService's call to InfoBarContainer::Observe and this
   // method.
-  InfoBar* infobar = content::Details<InfoBar::RemovedDetails>(details)->first;
+  infobars::InfoBar* infobar =
+      content::Details<infobars::InfoBar::RemovedDetails>(details)->first;
   for (PendingInfobarRequests::iterator i = pending_infobar_requests_.begin();
        i != pending_infobar_requests_.end(); ++i) {
     if (i->infobar() == infobar) {
diff --git a/chrome/browser/custom_handlers/protocol_handler_registry_unittest.cc b/chrome/browser/custom_handlers/protocol_handler_registry_unittest.cc
index 89632d9..a3783da 100644
--- a/chrome/browser/custom_handlers/protocol_handler_registry_unittest.cc
+++ b/chrome/browser/custom_handlers/protocol_handler_registry_unittest.cc
@@ -378,7 +378,7 @@
 
 // ProtocolHandlerRegistryTest tests are flaky on Linux & ChromeOS.
 // http://crbug.com/133023
-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
+#if defined(OS_LINUX)
 #define MAYBE_AcceptProtocolHandlerHandlesProtocol \
     DISABLED_AcceptProtocolHandlerHandlesProtocol
 #define MAYBE_DeniedProtocolIsntHandledUntilAccepted \
@@ -404,7 +404,7 @@
 #define MAYBE_TestIsHandledProtocolWorksOnIOThread \
     TestIsHandledProtocolWorksOnIOThread
 #define MAYBE_TestInstallDefaultHandler TestInstallDefaultHandler
-#endif  // defined(OS_CHROMEOS)
+#endif  // defined(OS_LINUX)
 
 TEST_F(ProtocolHandlerRegistryTest,
        MAYBE_AcceptProtocolHandlerHandlesProtocol) {
diff --git a/chrome/browser/custom_handlers/register_protocol_handler_infobar_delegate.cc b/chrome/browser/custom_handlers/register_protocol_handler_infobar_delegate.cc
index bd949e5..e3027cc 100644
--- a/chrome/browser/custom_handlers/register_protocol_handler_infobar_delegate.cc
+++ b/chrome/browser/custom_handlers/register_protocol_handler_infobar_delegate.cc
@@ -6,9 +6,9 @@
 
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/custom_handlers/protocol_handler_registry.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/common/url_constants.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/user_metrics.h"
 #include "content/public/browser/web_contents.h"
 #include "grit/generated_resources.h"
@@ -22,12 +22,12 @@
   content::RecordAction(
       base::UserMetricsAction("RegisterProtocolHandler.InfoBar_Shown"));
 
-  scoped_ptr<InfoBar> infobar(ConfirmInfoBarDelegate::CreateInfoBar(
-      scoped_ptr<ConfirmInfoBarDelegate>(
+  scoped_ptr<infobars::InfoBar> infobar(
+      ConfirmInfoBarDelegate::CreateInfoBar(scoped_ptr<ConfirmInfoBarDelegate>(
           new RegisterProtocolHandlerInfoBarDelegate(registry, handler))));
 
   for (size_t i = 0; i < infobar_service->infobar_count(); ++i) {
-    InfoBar* existing_infobar = infobar_service->infobar_at(i);
+    infobars::InfoBar* existing_infobar = infobar_service->infobar_at(i);
     RegisterProtocolHandlerInfoBarDelegate* existing_delegate =
         existing_infobar->delegate()->
             AsRegisterProtocolHandlerInfoBarDelegate();
@@ -53,13 +53,13 @@
     ~RegisterProtocolHandlerInfoBarDelegate() {
 }
 
-InfoBarDelegate::InfoBarAutomationType
-    RegisterProtocolHandlerInfoBarDelegate::GetInfoBarAutomationType() const {
+infobars::InfoBarDelegate::InfoBarAutomationType
+RegisterProtocolHandlerInfoBarDelegate::GetInfoBarAutomationType() const {
   return RPH_INFOBAR;
 }
 
-InfoBarDelegate::Type
-    RegisterProtocolHandlerInfoBarDelegate::GetInfoBarType() const {
+infobars::InfoBarDelegate::Type
+RegisterProtocolHandlerInfoBarDelegate::GetInfoBarType() const {
   return PAGE_ACTION_TYPE;
 }
 
diff --git a/chrome/browser/devtools/adb/android_rsa.cc b/chrome/browser/devtools/adb/android_rsa.cc
deleted file mode 100644
index c88d9b8..0000000
--- a/chrome/browser/devtools/adb/android_rsa.cc
+++ /dev/null
@@ -1,270 +0,0 @@
-// Copyright (c) 2013 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 "chrome/browser/devtools/adb/android_rsa.h"
-
-#include "base/base64.h"
-#include "base/memory/scoped_ptr.h"
-#include "chrome/browser/prefs/pref_service_syncable.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/common/pref_names.h"
-#include "crypto/rsa_private_key.h"
-#include "crypto/signature_creator.h"
-#include "net/cert/asn1_util.h"
-
-namespace {
-
-const size_t kRSANumWords = 64;
-const size_t kBigIntSize = 1024;
-
-static const char kDummyRSAPublicKey[] =
-    "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6OSJ64q+ZLg7VV2ojEPh5TRbYjwbT"
-    "TifSPeFIV45CHnbTWYiiIn41wrozpYizNsMWZUBjdah1N78WVhbyDrnr0bDgFp+gXjfVppa3I"
-    "gjiohEcemK3omXi3GDMK8ERhriLUKfQS842SXtQ8I+KoZtpCkGM//0h7+P+Rhm0WwdipIRMhR"
-    "8haNAeyDiiCvqJcvevv2T52vqKtS3aWz+GjaTJJLVWydEpz9WdvWeLfFVhe2ZnqwwZNa30Qoj"
-    "fsnvjaMwK2MU7uYfRBPuvLyK5QESWBpArNDd6ULl8Y+NU6kwNOVDc87OASCVEM1gw2IMi2mo2"
-    "WO5ywp0UWRiGZCkK+wOFQIDAQAB";
-
-typedef struct RSAPublicKey {
-    int len;                // Length of n[] in number of uint32
-    uint32 n0inv;           // -1 / n[0] mod 2^32
-    uint32 n[kRSANumWords];  // modulus as little endian array
-    uint32 rr[kRSANumWords]; // R^2 as little endian array
-    int exponent;           // 3 or 65537
-} RSAPublicKey;
-
-// http://en.wikipedia.org/wiki/Extended_Euclidean_algorithm
-// a * x + b * y = gcd(a, b) = d
-void ExtendedEuclid(uint64 a, uint64 b, uint64 *x, uint64 *y, uint64 *d) {
-  uint64 x1 = 0, x2 = 1, y1 = 1, y2 = 0;
-
-  while (b > 0) {
-    uint64 q = a / b;
-    uint64 r = a % b;
-    *x = x2 - q * x1;
-    *y = y2 - q * y1;
-    a = b;
-    b = r;
-    x2 = x1;
-    x1 = *x;
-    y2 = y1;
-    y1 = *y;
-  }
-
-  *d = a;
-  *x = x2;
-  *y = y2;
-}
-
-uint32 ModInverse(uint64 a, uint64 m)
-{
-  uint64 d, x, y;
-  ExtendedEuclid(a, m, &x, &y, &d);
-  if (d == 1)
-    return static_cast<uint32>(x);
-  return 0;
-}
-
-uint32* BnNew() {
-  uint32* result = new uint32[kBigIntSize];
-  memset(result, 0, kBigIntSize * sizeof(uint32));
-  return result;
-}
-
-void BnFree(uint32* a) {
-  delete[] a;
-}
-
-uint32* BnCopy(uint32* a) {
-  uint32* result = new uint32[kBigIntSize];
-  memcpy(result, a, kBigIntSize * sizeof(uint32));
-  return result;
-}
-
-uint32* BnMul(uint32* a, uint32 b) {
-  uint32* result = BnNew();
-  uint64 carry_over = 0;
-  for (size_t i = 0; i < kBigIntSize; ++i) {
-    carry_over += static_cast<uint64>(a[i]) * b;
-    result[i] = carry_over & kuint32max;
-    carry_over >>= 32;
-  }
-  return result;
-}
-
-void BnSub(uint32* a, uint32* b) {
-  int carry_over = 0;
-  for (size_t i = 0; i < kBigIntSize; ++i) {
-    int64 sub = static_cast<int64>(a[i]) - b[i] - carry_over;
-    carry_over = 0;
-    if (sub < 0) {
-      carry_over = 1;
-      sub += 0x100000000LL;
-    }
-    a[i] = static_cast<uint32>(sub);
-  }
-}
-
-void BnLeftShift(uint32* a, int offset) {
-  for (int i = kBigIntSize - offset - 1; i >= 0; --i)
-    a[i + offset] = a[i];
-  for (int i = 0; i < offset; ++i)
-    a[i] = 0;
-}
-
-int BnCompare(uint32* a, uint32* b) {
-  for (int i = kBigIntSize - 1; i >= 0; --i) {
-    if (a[i] > b[i])
-      return 1;
-    if (a[i] < b[i])
-      return -1;
-  }
-  return 0;
-}
-
-uint64 BnGuess(uint32* a, uint32* b, uint64 from, uint64 to) {
-  if (from + 1 >= to)
-    return from;
-
-  uint64 guess = (from + to) / 2;
-  uint32* t = BnMul(b, static_cast<uint32>(guess));
-  int result = BnCompare(a, t);
-  BnFree(t);
-  if (result > 0)
-    return BnGuess(a, b, guess, to);
-  if (result < 0)
-    return BnGuess(a, b, from, guess);
-  return guess;
-}
-
-void BnDiv(uint32* a, uint32* b, uint32** pq, uint32** pr) {
-  if (BnCompare(a, b) < 0) {
-    if (pq)
-      *pq = BnNew();
-    if (pr)
-      *pr = BnCopy(a);
-    return;
-  }
-
-  int oa = kBigIntSize - 1;
-  int ob = kBigIntSize - 1;
-  for (; oa > 0 && !a[oa]; --oa) {}
-  for (; ob > 0 && !b[ob]; --ob) {}
-  uint32* q = BnNew();
-  uint32* ca = BnCopy(a);
-
-  int digit = a[oa] < b[ob] ? oa - ob - 1 : oa - ob;
-
-  for (; digit >= 0; --digit) {
-    uint32* shifted_b = BnCopy(b);
-    BnLeftShift(shifted_b, digit);
-    uint32 value = static_cast<uint32>(
-        BnGuess(ca, shifted_b, 0, static_cast<uint64>(kuint32max) + 1));
-    q[digit] = value;
-    uint32* t = BnMul(shifted_b, value);
-    BnSub(ca, t);
-    BnFree(t);
-    BnFree(shifted_b);
-  }
-
-  if (pq)
-    *pq = q;
-  else
-    BnFree(q);
-  if (pr)
-    *pr = ca;
-  else
-    BnFree(ca);
-}
-
-}  // namespace
-
-crypto::RSAPrivateKey* AndroidRSAPrivateKey(Profile* profile) {
-  std::string encoded_key =
-      profile->GetPrefs()->GetString(prefs::kDevToolsAdbKey);
-  std::string decoded_key;
-  scoped_ptr<crypto::RSAPrivateKey> key;
-  if (!encoded_key.empty() && base::Base64Decode(encoded_key, &decoded_key)) {
-    std::vector<uint8> key_info(decoded_key.begin(), decoded_key.end());
-    key.reset(crypto::RSAPrivateKey::CreateFromPrivateKeyInfo(key_info));
-  }
-  if (!key) {
-    key.reset(crypto::RSAPrivateKey::Create(2048));
-    std::vector<uint8> key_info;
-    if (!key || !key->ExportPrivateKey(&key_info))
-      return NULL;
-
-    std::string key_string(key_info.begin(), key_info.end());
-    base::Base64Encode(key_string, &encoded_key);
-    profile->GetPrefs()->SetString(prefs::kDevToolsAdbKey,
-                                   encoded_key);
-  }
-  return key.release();
-}
-
-std::string AndroidRSAPublicKey(crypto::RSAPrivateKey* key) {
-  std::vector<uint8> public_key;
-  if (!key)
-    return kDummyRSAPublicKey;
-
-  key->ExportPublicKey(&public_key);
-  std::string asn1(public_key.begin(), public_key.end());
-
-  base::StringPiece pk;
-  if (!net::asn1::ExtractSubjectPublicKeyFromSPKI(asn1, &pk))
-    return kDummyRSAPublicKey;
-
-  // Skip 10 byte asn1 prefix to the modulus.
-  std::vector<uint8> pk_data(pk.data() + 10, pk.data() + pk.length());
-  uint32* n = BnNew();
-  for (size_t i = 0; i < kRSANumWords; ++i) {
-    uint32 t = pk_data[4 * i];
-    t = t << 8;
-    t += pk_data[4 * i + 1];
-    t = t << 8;
-    t += pk_data[4 * i + 2];
-    t = t << 8;
-    t += pk_data[4 * i + 3];
-    n[kRSANumWords - i - 1] = t;
-  }
-  uint64 n0 = n[0];
-
-  RSAPublicKey pkey;
-  pkey.len = kRSANumWords;
-  pkey.exponent = 65537; // Fixed public exponent
-  pkey.n0inv = 0 - ModInverse(n0, 0x100000000LL);
-  if (pkey.n0inv == 0)
-    return kDummyRSAPublicKey;
-
-  uint32* r = BnNew();
-  r[kRSANumWords * 2] = 1;
-
-  uint32* rr;
-  BnDiv(r, n, NULL, &rr);
-
-  for (size_t i = 0; i < kRSANumWords; ++i) {
-    pkey.n[i] = n[i];
-    pkey.rr[i] = rr[i];
-  }
-
-  BnFree(n);
-  BnFree(r);
-  BnFree(rr);
-
-  std::string output;
-  std::string input(reinterpret_cast<char*>(&pkey), sizeof(pkey));
-  base::Base64Encode(input, &output);
-  return output;
-}
-
-std::string AndroidRSASign(crypto::RSAPrivateKey* key,
-                           const std::string& body) {
-  std::vector<uint8> digest(body.begin(), body.end());
-  std::vector<uint8> result;
-  if (!crypto::SignatureCreator::Sign(key, vector_as_array(&digest),
-                                      digest.size(), &result)) {
-    return std::string();
-  }
-  return std::string(result.begin(), result.end());
-}
diff --git a/chrome/browser/devtools/adb/android_rsa.h b/chrome/browser/devtools/adb/android_rsa.h
deleted file mode 100644
index d413228..0000000
--- a/chrome/browser/devtools/adb/android_rsa.h
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright (c) 2013 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 CHROME_BROWSER_DEVTOOLS_ADB_ANDROID_RSA_H_
-#define CHROME_BROWSER_DEVTOOLS_ADB_ANDROID_RSA_H_
-
-#include <string>
-
-namespace crypto {
-class RSAPrivateKey;
-}
-
-class Profile;
-
-crypto::RSAPrivateKey* AndroidRSAPrivateKey(Profile* profile);
-
-std::string AndroidRSAPublicKey(crypto::RSAPrivateKey* key);
-
-std::string AndroidRSASign(crypto::RSAPrivateKey* key,
-                           const std::string& body);
-
-#endif  // CHROME_BROWSER_DEVTOOLS_ADB_ANDROID_RSA_H_
diff --git a/chrome/browser/devtools/adb/android_usb_device.cc b/chrome/browser/devtools/adb/android_usb_device.cc
deleted file mode 100644
index 2488518..0000000
--- a/chrome/browser/devtools/adb/android_usb_device.cc
+++ /dev/null
@@ -1,640 +0,0 @@
-// Copyright (c) 2013 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 "chrome/browser/devtools/adb/android_usb_device.h"
-
-#include <set>
-
-#include "base/barrier_closure.h"
-#include "base/base64.h"
-#include "base/lazy_instance.h"
-#include "base/message_loop/message_loop.h"
-#include "base/stl_util.h"
-#include "base/strings/string_util.h"
-#include "base/strings/stringprintf.h"
-#include "base/strings/utf_string_conversions.h"
-#include "chrome/browser/devtools/adb/android_rsa.h"
-#include "chrome/browser/devtools/adb/android_usb_socket.h"
-#include "chrome/browser/usb/usb_device.h"
-#include "chrome/browser/usb/usb_interface.h"
-#include "chrome/browser/usb/usb_service.h"
-#include "content/public/browser/browser_thread.h"
-#include "crypto/rsa_private_key.h"
-#include "net/base/ip_endpoint.h"
-#include "net/base/net_errors.h"
-#include "net/socket/stream_socket.h"
-
-namespace {
-
-const size_t kHeaderSize = 24;
-
-const int kAdbClass = 0xff;
-const int kAdbSubclass = 0x42;
-const int kAdbProtocol = 0x1;
-
-const int kUsbTimeout = 0;
-
-const uint32 kMaxPayload = 4096;
-const uint32 kVersion = 0x01000000;
-
-static const char kHostConnectMessage[] = "host::";
-
-using content::BrowserThread;
-
-typedef std::vector<scoped_refptr<UsbDevice> > UsbDevices;
-typedef std::set<scoped_refptr<UsbDevice> > UsbDeviceSet;
-
-// Stores android wrappers around claimed usb devices on caller thread.
-base::LazyInstance<std::vector<AndroidUsbDevice*> >::Leaky g_devices =
-    LAZY_INSTANCE_INITIALIZER;
-
-bool IsAndroidInterface(
-    scoped_refptr<const UsbInterfaceDescriptor> interface) {
-  if (interface->GetNumAltSettings() == 0)
-    return false;
-
-  scoped_refptr<const UsbInterfaceAltSettingDescriptor> idesc =
-      interface->GetAltSetting(0);
-
-  if (idesc->GetInterfaceClass() != kAdbClass ||
-      idesc->GetInterfaceSubclass() != kAdbSubclass ||
-      idesc->GetInterfaceProtocol() != kAdbProtocol ||
-      idesc->GetNumEndpoints() != 2) {
-    return false;
-  }
-  return true;
-}
-
-scoped_refptr<AndroidUsbDevice> ClaimInterface(
-    crypto::RSAPrivateKey* rsa_key,
-    scoped_refptr<UsbDeviceHandle> usb_handle,
-    scoped_refptr<const UsbInterfaceDescriptor> interface,
-    int interface_id) {
-  scoped_refptr<const UsbInterfaceAltSettingDescriptor> idesc =
-      interface->GetAltSetting(0);
-
-  int inbound_address = 0;
-  int outbound_address = 0;
-  int zero_mask = 0;
-
-  for (size_t i = 0; i < idesc->GetNumEndpoints(); ++i) {
-    scoped_refptr<const UsbEndpointDescriptor> edesc =
-        idesc->GetEndpoint(i);
-    if (edesc->GetTransferType() != USB_TRANSFER_BULK)
-      continue;
-    if (edesc->GetDirection() == USB_DIRECTION_INBOUND)
-      inbound_address = edesc->GetAddress();
-    else
-      outbound_address = edesc->GetAddress();
-    zero_mask = edesc->GetMaximumPacketSize() - 1;
-  }
-
-  if (inbound_address == 0 || outbound_address == 0)
-    return NULL;
-
-  if (!usb_handle->ClaimInterface(interface_id))
-    return NULL;
-
-  base::string16 serial;
-  if (!usb_handle->GetSerial(&serial) || serial.empty())
-    return NULL;
-
-  return new AndroidUsbDevice(rsa_key, usb_handle, base::UTF16ToASCII(serial),
-                              inbound_address, outbound_address, zero_mask,
-                              interface_id);
-}
-
-uint32 Checksum(const std::string& data) {
-  unsigned char* x = (unsigned char*)data.data();
-  int count = data.length();
-  uint32 sum = 0;
-  while (count-- > 0)
-    sum += *x++;
-  return sum;
-}
-
-void DumpMessage(bool outgoing, const char* data, size_t length) {
-#if 0
-  std::string result = "";
-  if (length == kHeaderSize) {
-    for (size_t i = 0; i < 24; ++i) {
-      result += base::StringPrintf("%02x",
-          data[i] > 0 ? data[i] : (data[i] + 0x100) & 0xFF);
-      if ((i + 1) % 4 == 0)
-        result += " ";
-    }
-    for (size_t i = 0; i < 24; ++i) {
-      if (data[i] >= 0x20 && data[i] <= 0x7E)
-        result += data[i];
-      else
-        result += ".";
-    }
-  } else {
-    result = base::StringPrintf("%d: ", (int)length);
-    for (size_t i = 0; i < length; ++i) {
-      if (data[i] >= 0x20 && data[i] <= 0x7E)
-        result += data[i];
-      else
-        result += ".";
-    }
-  }
-  LOG(ERROR) << (outgoing ? "[out] " : "[ in] ") << result;
-#endif  // 0
-}
-
-void ReleaseInterface(scoped_refptr<UsbDeviceHandle> usb_device,
-                      int interface_id) {
-  usb_device->ReleaseInterface(interface_id);
-  usb_device->Close();
-}
-
-}  // namespace
-
-AdbMessage::AdbMessage(uint32 command,
-                       uint32 arg0,
-                       uint32 arg1,
-                       const std::string& body)
-    : command(command),
-      arg0(arg0),
-      arg1(arg1),
-      body(body) {
-}
-
-AdbMessage::~AdbMessage() {
-}
-
-static void RespondOnCallerThread(const AndroidUsbDevicesCallback& callback,
-                                  AndroidUsbDevices* new_devices) {
-  scoped_ptr<AndroidUsbDevices> devices(new_devices);
-
-  // Add raw pointers to the newly claimed devices.
-  for (AndroidUsbDevices::iterator it = devices->begin(); it != devices->end();
-       ++it) {
-    g_devices.Get().push_back(*it);
-  }
-
-  // Return all claimed devices.
-  AndroidUsbDevices result(g_devices.Get().begin(), g_devices.Get().end());
-  callback.Run(result);
-}
-
-static void RespondOnFileThread(
-    const AndroidUsbDevicesCallback& callback,
-    AndroidUsbDevices* devices,
-    scoped_refptr<base::MessageLoopProxy> caller_message_loop_proxy) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
-  caller_message_loop_proxy->PostTask(
-      FROM_HERE,
-      base::Bind(&RespondOnCallerThread, callback, devices));
-}
-
-static void OpenAndroidDeviceOnFileThread(
-    AndroidUsbDevices* devices,
-    crypto::RSAPrivateKey* rsa_key,
-    const base::Closure& barrier,
-    scoped_refptr<UsbDevice> device,
-    int interface_id,
-    bool success) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
-  if (success) {
-    scoped_refptr<UsbConfigDescriptor> config = device->ListInterfaces();
-    scoped_refptr<UsbDeviceHandle> usb_handle = device->Open();
-    if (usb_handle) {
-      scoped_refptr<AndroidUsbDevice> android_device =
-        ClaimInterface(rsa_key, usb_handle, config->GetInterface(interface_id),
-                       interface_id);
-      if (android_device.get())
-        devices->push_back(android_device.get());
-      else
-        usb_handle->Close();
-    }
-  }
-  barrier.Run();
-}
-
-static int CountOnFileThread() {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
-  UsbService* service = UsbService::GetInstance();
-  UsbDevices usb_devices;
-  if (service != NULL)
-    service->GetDevices(&usb_devices);
-  int device_count = 0;
-  for (UsbDevices::iterator it = usb_devices.begin(); it != usb_devices.end();
-       ++it) {
-    scoped_refptr<UsbConfigDescriptor> config = (*it)->ListInterfaces();
-    if (!config)
-      continue;
-
-    for (size_t j = 0; j < config->GetNumInterfaces(); ++j) {
-      if (IsAndroidInterface(config->GetInterface(j)))
-        ++device_count;
-    }
-  }
-  return device_count;
-}
-
-static void EnumerateOnFileThread(
-    crypto::RSAPrivateKey* rsa_key,
-    const AndroidUsbDevicesCallback& callback,
-    scoped_refptr<base::MessageLoopProxy> caller_message_loop_proxy) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
-
-  UsbService* service = UsbService::GetInstance();
-  UsbDevices usb_devices;
-  if (service != NULL)
-    service->GetDevices(&usb_devices);
-
-  // Add new devices.
-  AndroidUsbDevices* devices = new AndroidUsbDevices();
-  base::Closure barrier = base::BarrierClosure(
-      usb_devices.size(), base::Bind(&RespondOnFileThread,
-                                     callback,
-                                     devices,
-                                     caller_message_loop_proxy));
-
-  for (UsbDevices::iterator it = usb_devices.begin(); it != usb_devices.end();
-       ++it) {
-    scoped_refptr<UsbConfigDescriptor> config = (*it)->ListInterfaces();
-    if (!config) {
-      barrier.Run();
-      continue;
-    }
-
-    bool has_android_interface = false;
-    for (size_t j = 0; j < config->GetNumInterfaces(); ++j) {
-      if (!IsAndroidInterface(config->GetInterface(j)))
-        continue;
-
-      // Request permission on Chrome OS.
-#if defined(OS_CHROMEOS)
-      (*it)->RequestUsbAcess(j, base::Bind(&OpenAndroidDeviceOnFileThread,
-                                           devices, rsa_key, barrier, *it, j));
-#else
-      OpenAndroidDeviceOnFileThread(devices, rsa_key, barrier, *it, j, true);
-#endif  // defined(OS_CHROMEOS)
-
-      has_android_interface = true;
-      break;
-    }
-    if (!has_android_interface)
-      barrier.Run();
-  }
-}
-
-// static
-void AndroidUsbDevice::CountDevices(
-    const base::Callback<void(int)>& callback) {
-  BrowserThread::PostTaskAndReplyWithResult(
-      BrowserThread::FILE,
-      FROM_HERE,
-      base::Bind(&CountOnFileThread),
-      callback);
-}
-
-// static
-void AndroidUsbDevice::Enumerate(crypto::RSAPrivateKey* rsa_key,
-                                 const AndroidUsbDevicesCallback& callback) {
-
-  // Collect devices with closed handles.
-  for (std::vector<AndroidUsbDevice*>::iterator it = g_devices.Get().begin();
-       it != g_devices.Get().end(); ++it) {
-    if ((*it)->usb_handle_) {
-      BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE,
-          base::Bind(&AndroidUsbDevice::TerminateIfReleased, *it,
-                     (*it)->usb_handle_));
-    }
-  }
-
-  // Then look for the new devices.
-  BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE,
-                          base::Bind(&EnumerateOnFileThread, rsa_key, callback,
-                                     base::MessageLoopProxy::current()));
-}
-
-AndroidUsbDevice::AndroidUsbDevice(crypto::RSAPrivateKey* rsa_key,
-                                   scoped_refptr<UsbDeviceHandle> usb_device,
-                                   const std::string& serial,
-                                   int inbound_address,
-                                   int outbound_address,
-                                   int zero_mask,
-                                   int interface_id)
-    : message_loop_(NULL),
-      rsa_key_(rsa_key->Copy()),
-      usb_handle_(usb_device),
-      serial_(serial),
-      inbound_address_(inbound_address),
-      outbound_address_(outbound_address),
-      zero_mask_(zero_mask),
-      interface_id_(interface_id),
-      is_connected_(false),
-      signature_sent_(false),
-      last_socket_id_(256),
-      weak_factory_(this) {
-}
-
-void AndroidUsbDevice::InitOnCallerThread() {
-  if (message_loop_)
-    return;
-  message_loop_ = base::MessageLoop::current();
-  Queue(new AdbMessage(AdbMessage::kCommandCNXN, kVersion, kMaxPayload,
-                       kHostConnectMessage));
-  ReadHeader();
-}
-
-net::StreamSocket* AndroidUsbDevice::CreateSocket(const std::string& command) {
-  if (!usb_handle_)
-    return NULL;
-
-  uint32 socket_id = ++last_socket_id_;
-  sockets_[socket_id] = new AndroidUsbSocket(this, socket_id, command,
-      base::Bind(&AndroidUsbDevice::SocketDeleted, this));
-  return sockets_[socket_id];
-}
-
-void AndroidUsbDevice::Send(uint32 command,
-                            uint32 arg0,
-                            uint32 arg1,
-                            const std::string& body) {
-  scoped_refptr<AdbMessage> m = new AdbMessage(command, arg0, arg1, body);
-  // Delay open request if not yet connected.
-  if (!is_connected_) {
-    pending_messages_.push_back(m);
-    return;
-  }
-  Queue(m);
-}
-
-AndroidUsbDevice::~AndroidUsbDevice() {
-  DCHECK(message_loop_ == base::MessageLoop::current());
-  Terminate();
-}
-
-void AndroidUsbDevice::Queue(scoped_refptr<AdbMessage> message) {
-  DCHECK(message_loop_ == base::MessageLoop::current());
-
-  // Queue header.
-  std::vector<uint32> header;
-  header.push_back(message->command);
-  header.push_back(message->arg0);
-  header.push_back(message->arg1);
-  bool append_zero = true;
-  if (message->body.empty())
-    append_zero = false;
-  if (message->command == AdbMessage::kCommandAUTH &&
-      message->arg0 == AdbMessage::kAuthSignature)
-    append_zero = false;
-  if (message->command == AdbMessage::kCommandWRTE)
-    append_zero = false;
-
-  size_t body_length = message->body.length() + (append_zero ? 1 : 0);
-  header.push_back(body_length);
-  header.push_back(Checksum(message->body));
-  header.push_back(message->command ^ 0xffffffff);
-  scoped_refptr<net::IOBuffer> header_buffer = new net::IOBuffer(kHeaderSize);
-  memcpy(header_buffer.get()->data(), &header[0], kHeaderSize);
-  outgoing_queue_.push(std::make_pair(header_buffer, kHeaderSize));
-
-  // Queue body.
-  if (!message->body.empty()) {
-    scoped_refptr<net::IOBuffer> body_buffer = new net::IOBuffer(body_length);
-    memcpy(body_buffer->data(), message->body.data(), message->body.length());
-    if (append_zero)
-      body_buffer->data()[body_length - 1] = 0;
-    outgoing_queue_.push(std::make_pair(body_buffer, body_length));
-    if (zero_mask_ && (body_length & zero_mask_) == 0) {
-      // Send a zero length packet.
-      outgoing_queue_.push(std::make_pair(body_buffer, 0));
-    }
-  }
-  ProcessOutgoing();
-}
-
-void AndroidUsbDevice::ProcessOutgoing() {
-  DCHECK(message_loop_ == base::MessageLoop::current());
-
-  if (outgoing_queue_.empty() || !usb_handle_)
-    return;
-
-  BulkMessage message = outgoing_queue_.front();
-  outgoing_queue_.pop();
-  DumpMessage(true, message.first->data(), message.second);
-  usb_handle_->BulkTransfer(USB_DIRECTION_OUTBOUND, outbound_address_,
-      message.first, message.second, kUsbTimeout,
-      base::Bind(&AndroidUsbDevice::OutgoingMessageSent,
-                 weak_factory_.GetWeakPtr()));
-}
-
-void AndroidUsbDevice::OutgoingMessageSent(UsbTransferStatus status,
-                                           scoped_refptr<net::IOBuffer> buffer,
-                                           size_t result) {
-  DCHECK(message_loop_ == base::MessageLoop::current());
-
-  if (status != USB_TRANSFER_COMPLETED)
-    return;
-  message_loop_->PostTask(FROM_HERE,
-                          base::Bind(&AndroidUsbDevice::ProcessOutgoing, this));
-}
-
-void AndroidUsbDevice::ReadHeader() {
-  DCHECK(message_loop_ == base::MessageLoop::current());
-
-  if (!usb_handle_)
-    return;
-  scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer(kHeaderSize);
-  usb_handle_->BulkTransfer(USB_DIRECTION_INBOUND, inbound_address_,
-      buffer, kHeaderSize, kUsbTimeout,
-      base::Bind(&AndroidUsbDevice::ParseHeader,
-                 weak_factory_.GetWeakPtr()));
-}
-
-void AndroidUsbDevice::ParseHeader(UsbTransferStatus status,
-                                   scoped_refptr<net::IOBuffer> buffer,
-                                   size_t result) {
-  DCHECK(message_loop_ == base::MessageLoop::current());
-
-  if (status == USB_TRANSFER_TIMEOUT) {
-    message_loop_->PostTask(FROM_HERE,
-                            base::Bind(&AndroidUsbDevice::ReadHeader, this));
-    return;
-  }
-
-  if (status != USB_TRANSFER_COMPLETED || result != kHeaderSize) {
-    TransferError(status);
-    return;
-  }
-
-  DumpMessage(false, buffer->data(), result);
-  std::vector<uint32> header(6);
-  memcpy(&header[0], buffer->data(), result);
-  scoped_refptr<AdbMessage> message =
-      new AdbMessage(header[0], header[1], header[2], "");
-  uint32 data_length = header[3];
-  uint32 data_check = header[4];
-  uint32 magic = header[5];
-  if ((message->command ^ 0xffffffff) != magic) {
-    TransferError(USB_TRANSFER_ERROR);
-    return;
-  }
-
-  if (data_length == 0) {
-    message_loop_->PostTask(FROM_HERE,
-                            base::Bind(&AndroidUsbDevice::HandleIncoming, this,
-                                       message));
-    return;
-  }
-
-  message_loop_->PostTask(FROM_HERE,
-                          base::Bind(&AndroidUsbDevice::ReadBody, this,
-                                     message, data_length, data_check));
-}
-
-void AndroidUsbDevice::ReadBody(scoped_refptr<AdbMessage> message,
-                                uint32 data_length,
-                                uint32 data_check) {
-  DCHECK(message_loop_ == base::MessageLoop::current());
-
-  if (!usb_handle_)
-    return;
-  scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer(data_length);
-  usb_handle_->BulkTransfer(USB_DIRECTION_INBOUND, inbound_address_,
-      buffer, data_length, kUsbTimeout,
-      base::Bind(&AndroidUsbDevice::ParseBody, weak_factory_.GetWeakPtr(),
-                 message, data_length, data_check));
-}
-
-void AndroidUsbDevice::ParseBody(scoped_refptr<AdbMessage> message,
-                                 uint32 data_length,
-                                 uint32 data_check,
-                                 UsbTransferStatus status,
-                                 scoped_refptr<net::IOBuffer> buffer,
-                                 size_t result) {
-  DCHECK(message_loop_ == base::MessageLoop::current());
-
-  if (status == USB_TRANSFER_TIMEOUT) {
-    message_loop_->PostTask(FROM_HERE,
-                            base::Bind(&AndroidUsbDevice::ReadBody, this,
-                            message, data_length, data_check));
-    return;
-  }
-
-  if (status != USB_TRANSFER_COMPLETED ||
-      static_cast<uint32>(result) != data_length) {
-    TransferError(status);
-    return;
-  }
-
-  DumpMessage(false, buffer->data(), data_length);
-  message->body = std::string(buffer->data(), result);
-  if (Checksum(message->body) != data_check) {
-    TransferError(USB_TRANSFER_ERROR);
-    return;
-  }
-
-  message_loop_->PostTask(FROM_HERE,
-                          base::Bind(&AndroidUsbDevice::HandleIncoming, this,
-                                     message));
-}
-
-void AndroidUsbDevice::HandleIncoming(scoped_refptr<AdbMessage> message) {
-  DCHECK(message_loop_ == base::MessageLoop::current());
-
-  switch (message->command) {
-    case AdbMessage::kCommandAUTH:
-      {
-        DCHECK_EQ(message->arg0, static_cast<uint32>(AdbMessage::kAuthToken));
-        if (signature_sent_) {
-          Queue(new AdbMessage(AdbMessage::kCommandAUTH,
-                               AdbMessage::kAuthRSAPublicKey, 0,
-                               AndroidRSAPublicKey(rsa_key_.get())));
-        } else {
-          signature_sent_ = true;
-          std::string signature = AndroidRSASign(rsa_key_.get(), message->body);
-          if (!signature.empty()) {
-            Queue(new AdbMessage(AdbMessage::kCommandAUTH,
-                                 AdbMessage::kAuthSignature, 0,
-                                 signature));
-          } else {
-            Queue(new AdbMessage(AdbMessage::kCommandAUTH,
-                                 AdbMessage::kAuthRSAPublicKey, 0,
-                                 AndroidRSAPublicKey(rsa_key_.get())));
-          }
-        }
-      }
-      break;
-    case AdbMessage::kCommandCNXN:
-      {
-        is_connected_ = true;
-        PendingMessages pending;
-        pending.swap(pending_messages_);
-        for (PendingMessages::iterator it = pending.begin();
-             it != pending.end(); ++it) {
-          Queue(*it);
-        }
-      }
-      break;
-    case AdbMessage::kCommandOKAY:
-    case AdbMessage::kCommandWRTE:
-    case AdbMessage::kCommandCLSE:
-      {
-        AndroidUsbSockets::iterator it = sockets_.find(message->arg1);
-        if (it != sockets_.end())
-          it->second->HandleIncoming(message);
-      }
-      break;
-    default:
-      break;
-  }
-  ReadHeader();
-}
-
-void AndroidUsbDevice::TransferError(UsbTransferStatus status) {
-  DCHECK(message_loop_ == base::MessageLoop::current());
-
-  message_loop_->PostTask(FROM_HERE,
-                          base::Bind(&AndroidUsbDevice::Terminate, this));
-}
-
-void AndroidUsbDevice::TerminateIfReleased(
-    scoped_refptr<UsbDeviceHandle> usb_handle) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
-  if (usb_handle->device())
-    return;
-  message_loop_->PostTask(FROM_HERE,
-                          base::Bind(&AndroidUsbDevice::Terminate, this));
-}
-
-void AndroidUsbDevice::Terminate() {
-  DCHECK(message_loop_ == base::MessageLoop::current());
-
-  std::vector<AndroidUsbDevice*>::iterator it =
-      std::find(g_devices.Get().begin(), g_devices.Get().end(), this);
-  if (it != g_devices.Get().end())
-    g_devices.Get().erase(it);
-
-  if (!usb_handle_)
-    return;
-
-  // Make sure we zero-out handle so that closing connections did not open
-  // new connections.
-  scoped_refptr<UsbDeviceHandle> usb_handle = usb_handle_;
-  usb_handle_ = NULL;
-
-  // Iterate over copy.
-  AndroidUsbSockets sockets(sockets_);
-  for (AndroidUsbSockets::iterator it = sockets.begin();
-       it != sockets.end(); ++it) {
-    it->second->Terminated();
-  }
-  DCHECK(sockets_.empty());
-
-  BrowserThread::PostTask(
-      BrowserThread::FILE, FROM_HERE,
-      base::Bind(&ReleaseInterface, usb_handle, interface_id_));
-}
-
-void AndroidUsbDevice::SocketDeleted(uint32 socket_id) {
-  DCHECK(message_loop_ == base::MessageLoop::current());
-
-  sockets_.erase(socket_id);
-}
diff --git a/chrome/browser/devtools/adb/android_usb_device.h b/chrome/browser/devtools/adb/android_usb_device.h
deleted file mode 100644
index cc31896..0000000
--- a/chrome/browser/devtools/adb/android_usb_device.h
+++ /dev/null
@@ -1,165 +0,0 @@
-// Copyright (c) 2013 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 CHROME_BROWSER_DEVTOOLS_ADB_ANDROID_USB_DEVICE_H_
-#define CHROME_BROWSER_DEVTOOLS_ADB_ANDROID_USB_DEVICE_H_
-
-#include <map>
-#include <queue>
-#include <vector>
-#include "base/memory/ref_counted.h"
-#include "base/memory/weak_ptr.h"
-#include "chrome/browser/usb/usb_device_handle.h"
-
-namespace base {
-class MessageLoop;
-}
-
-namespace crypto {
-class RSAPrivateKey;
-}
-
-namespace net {
-class StreamSocket;
-}
-
-class AndroidUsbSocket;
-
-class AdbMessage : public base::RefCounted<AdbMessage> {
- public:
-  enum Command {
-    kCommandSYNC = 0x434e5953,
-    kCommandCNXN = 0x4e584e43,
-    kCommandOPEN = 0x4e45504f,
-    kCommandOKAY = 0x59414b4f,
-    kCommandCLSE = 0x45534c43,
-    kCommandWRTE = 0x45545257,
-    kCommandAUTH = 0x48545541
-  };
-
-  enum Auth {
-    kAuthToken = 1,
-    kAuthSignature = 2,
-    kAuthRSAPublicKey = 3
-  };
-
-  AdbMessage(uint32 command,
-             uint32 arg0,
-             uint32 arg1,
-             const std::string& body);
-
-  uint32 command;
-  uint32 arg0;
-  uint32 arg1;
-  std::string body;
- private:
-  friend class base::RefCounted<AdbMessage>;
-  ~AdbMessage();
-
-  DISALLOW_COPY_AND_ASSIGN(AdbMessage);
-};
-
-class AndroidUsbDevice;
-typedef std::vector<scoped_refptr<AndroidUsbDevice> > AndroidUsbDevices;
-typedef base::Callback<void(const AndroidUsbDevices&)>
-    AndroidUsbDevicesCallback;
-
-class AndroidUsbDevice : public base::RefCountedThreadSafe<AndroidUsbDevice> {
- public:
-  static void Enumerate(crypto::RSAPrivateKey* rsa_key,
-                        const AndroidUsbDevicesCallback& callback);
-
-  static void CountDevices(const base::Callback<void(int)>& callback);
-
-  AndroidUsbDevice(crypto::RSAPrivateKey* rsa_key,
-                   scoped_refptr<UsbDeviceHandle> device,
-                   const std::string& serial,
-                   int inbound_address,
-                   int outbound_address,
-                   int zero_mask,
-                   int interface_id);
-
-  void InitOnCallerThread();
-
-  net::StreamSocket* CreateSocket(const std::string& command);
-
-  void Send(uint32 command,
-            uint32 arg0,
-            uint32 arg1,
-            const std::string& body);
-
-  scoped_refptr<UsbDeviceHandle> usb_device() { return usb_handle_; }
-
-  std::string serial() { return serial_; }
-
-  bool is_connected() { return is_connected_; }
-
- private:
-  friend class base::RefCountedThreadSafe<AndroidUsbDevice>;
-  virtual ~AndroidUsbDevice();
-
-  void Queue(scoped_refptr<AdbMessage> message);
-  void ProcessOutgoing();
-  void OutgoingMessageSent(UsbTransferStatus status,
-                           scoped_refptr<net::IOBuffer> buffer,
-                           size_t result);
-
-  void ReadHeader();
-  void ParseHeader(UsbTransferStatus status,
-                   scoped_refptr<net::IOBuffer> buffer,
-                   size_t result);
-
-  void ReadBody(scoped_refptr<AdbMessage> message,
-                uint32 data_length,
-                uint32 data_check);
-  void ParseBody(scoped_refptr<AdbMessage> message,
-                 uint32 data_length,
-                 uint32 data_check,
-                 UsbTransferStatus status,
-                 scoped_refptr<net::IOBuffer> buffer,
-                 size_t result);
-
-  void HandleIncoming(scoped_refptr<AdbMessage> message);
-
-  void TransferError(UsbTransferStatus status);
-
-  void TerminateIfReleased(scoped_refptr<UsbDeviceHandle> usb_handle);
-  void Terminate();
-
-  void SocketDeleted(uint32 socket_id);
-
-  base::MessageLoop* message_loop_;
-
-  scoped_ptr<crypto::RSAPrivateKey> rsa_key_;
-
-  // Device info
-  scoped_refptr<UsbDeviceHandle> usb_handle_;
-  std::string serial_;
-  int inbound_address_;
-  int outbound_address_;
-  int zero_mask_;
-  int interface_id_;
-
-  bool is_connected_;
-  bool signature_sent_;
-
-  // Created sockets info
-  uint32 last_socket_id_;
-  typedef std::map<uint32, AndroidUsbSocket*> AndroidUsbSockets;
-  AndroidUsbSockets sockets_;
-
-  // Outgoing bulk queue
-  typedef std::pair<scoped_refptr<net::IOBuffer>, size_t> BulkMessage;
-  std::queue<BulkMessage> outgoing_queue_;
-
-  // Outgoing messages pending connect
-  typedef std::vector<scoped_refptr<AdbMessage> > PendingMessages;
-  PendingMessages pending_messages_;
-
-  base::WeakPtrFactory<AndroidUsbDevice> weak_factory_;
-
-  DISALLOW_COPY_AND_ASSIGN(AndroidUsbDevice);
-};
-
-#endif  // CHROME_BROWSER_DEVTOOLS_ADB_ANDROID_USB_DEVICE_H_
diff --git a/chrome/browser/devtools/adb/android_usb_socket.cc b/chrome/browser/devtools/adb/android_usb_socket.cc
deleted file mode 100644
index 77d24c9..0000000
--- a/chrome/browser/devtools/adb/android_usb_socket.cc
+++ /dev/null
@@ -1,254 +0,0 @@
-// Copyright (c) 2013 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 "chrome/browser/devtools/adb/android_usb_socket.h"
-
-#include "base/message_loop/message_loop.h"
-
-namespace {
-
-const int kMaxPayload = 4096;
-
-}  // namespace
-
-AndroidUsbSocket::IORequest::IORequest(
-    net::IOBuffer* buffer,
-    int length,
-    const net::CompletionCallback& callback)
-    : buffer(buffer),
-      length(length),
-      callback(callback) {
-}
-
-AndroidUsbSocket::IORequest::~IORequest() {
-}
-
-AndroidUsbSocket::AndroidUsbSocket(scoped_refptr<AndroidUsbDevice> device,
-                                   uint32 socket_id,
-                                   const std::string& command,
-                                   base::Callback<void(uint32)> delete_callback)
-    : device_(device),
-      command_(command),
-      delete_callback_(delete_callback),
-      local_id_(socket_id),
-      remote_id_(0),
-      is_connected_(false) {
-}
-
-AndroidUsbSocket::~AndroidUsbSocket() {
-  DCHECK(CalledOnValidThread());
-  if (is_connected_)
-    Disconnect();
-  if (!delete_callback_.is_null())
-    delete_callback_.Run(local_id_);
-}
-
-void AndroidUsbSocket::HandleIncoming(scoped_refptr<AdbMessage> message) {
-  if (!device_)
-    return;
-
-  CHECK_EQ(message->arg1, local_id_);
-  switch (message->command) {
-    case AdbMessage::kCommandOKAY:
-      if (!is_connected_) {
-        remote_id_ = message->arg0;
-        is_connected_ = true;
-        net::CompletionCallback callback = connect_callback_;
-        connect_callback_.Reset();
-        callback.Run(net::OK);
-        // "this" can be NULL.
-      } else {
-        RespondToWriters();
-        // "this" can be NULL.
-      }
-      break;
-    case AdbMessage::kCommandWRTE:
-      device_->Send(AdbMessage::kCommandOKAY, local_id_, message->arg0, "");
-      read_buffer_ += message->body;
-      // Allow WRTE over new connection even though OKAY ack was not received.
-      if (!is_connected_) {
-        remote_id_ = message->arg0;
-        is_connected_ = true;
-        net::CompletionCallback callback = connect_callback_;
-        connect_callback_.Reset();
-        callback.Run(net::OK);
-        // "this" can be NULL.
-      } else {
-        RespondToReaders(false);
-        // "this" can be NULL.
-      }
-      break;
-    case AdbMessage::kCommandCLSE:
-      if (is_connected_)
-        device_->Send(AdbMessage::kCommandCLSE, local_id_, 0, "");
-      Terminated();
-      // "this" can be NULL.
-      break;
-    default:
-      break;
-  }
-}
-
-void AndroidUsbSocket::Terminated() {
-  is_connected_ = false;
-
-  // Break the socket -> device connection, release the device.
-  delete_callback_.Run(local_id_);
-  delete_callback_.Reset();
-  device_ = NULL;
-
-  // Respond to pending callbacks.
-  if (!connect_callback_.is_null()) {
-    net::CompletionCallback callback = connect_callback_;
-    connect_callback_.Reset();
-    callback.Run(net::ERR_FAILED);
-    // "this" can be NULL.
-    return;
-  }
-  RespondToReaders(true);
-}
-
-int AndroidUsbSocket::Read(net::IOBuffer* buffer,
-                           int length,
-                           const net::CompletionCallback& callback) {
-  if (!is_connected_)
-    return device_ ? net::ERR_SOCKET_NOT_CONNECTED : 0;
-
-  if (read_buffer_.empty()) {
-    read_requests_.push_back(IORequest(buffer, length, callback));
-    return net::ERR_IO_PENDING;
-  }
-
-  size_t bytes_to_copy = static_cast<size_t>(length) > read_buffer_.length() ?
-      read_buffer_.length() : static_cast<size_t>(length);
-  memcpy(buffer->data(), read_buffer_.data(), bytes_to_copy);
-  if (read_buffer_.length() > bytes_to_copy)
-    read_buffer_ = read_buffer_.substr(bytes_to_copy);
-  else
-    read_buffer_ = "";
-  return bytes_to_copy;
-}
-
-int AndroidUsbSocket::Write(net::IOBuffer* buffer,
-                            int length,
-                            const net::CompletionCallback& callback) {
-  if (!is_connected_)
-    return net::ERR_SOCKET_NOT_CONNECTED;
-
-  if (length > kMaxPayload)
-    length = kMaxPayload;
-  write_requests_.push_back(IORequest(NULL, length, callback));
-  device_->Send(AdbMessage::kCommandWRTE, local_id_, remote_id_,
-                 std::string(buffer->data(), length));
-  return net::ERR_IO_PENDING;
-}
-
-int AndroidUsbSocket::SetReceiveBufferSize(int32 size) {
-  NOTIMPLEMENTED();
-  return net::ERR_NOT_IMPLEMENTED;
-}
-
-int AndroidUsbSocket::SetSendBufferSize(int32 size) {
-  NOTIMPLEMENTED();
-  return net::ERR_NOT_IMPLEMENTED;
-}
-
-int AndroidUsbSocket::Connect(const net::CompletionCallback& callback) {
-  DCHECK(CalledOnValidThread());
-  if (!device_)
-    return net::ERR_FAILED;
-  connect_callback_ = callback;
-  device_->Send(AdbMessage::kCommandOPEN, local_id_, 0, command_);
-  return net::ERR_IO_PENDING;
-}
-
-void AndroidUsbSocket::Disconnect() {
-  if (!device_)
-    return;
-  device_->Send(AdbMessage::kCommandCLSE, local_id_, remote_id_, "");
-  Terminated();
-}
-
-bool AndroidUsbSocket::IsConnected() const {
-  DCHECK(CalledOnValidThread());
-  return is_connected_;
-}
-
-bool AndroidUsbSocket::IsConnectedAndIdle() const {
-  NOTIMPLEMENTED();
-  return false;
-}
-
-int AndroidUsbSocket::GetPeerAddress(net::IPEndPoint* address) const {
-  net::IPAddressNumber ip(net::kIPv4AddressSize);
-  *address = net::IPEndPoint(ip, 0);
-  return net::OK;
-}
-
-int AndroidUsbSocket::GetLocalAddress(net::IPEndPoint* address) const {
-  NOTIMPLEMENTED();
-  return net::ERR_NOT_IMPLEMENTED;
-}
-
-const net::BoundNetLog& AndroidUsbSocket::NetLog() const {
-  return net_log_;
-}
-
-void AndroidUsbSocket::SetSubresourceSpeculation() {
-  NOTIMPLEMENTED();
-}
-
-void AndroidUsbSocket::SetOmniboxSpeculation() {
-  NOTIMPLEMENTED();
-}
-
-bool AndroidUsbSocket::WasEverUsed() const {
-  NOTIMPLEMENTED();
-  return true;
-}
-
-bool AndroidUsbSocket::UsingTCPFastOpen() const {
-  NOTIMPLEMENTED();
-  return true;
-}
-
-bool AndroidUsbSocket::WasNpnNegotiated() const {
-  NOTIMPLEMENTED();
-  return true;
-}
-
-net::NextProto AndroidUsbSocket::GetNegotiatedProtocol() const {
-  NOTIMPLEMENTED();
-  return net::kProtoUnknown;
-}
-
-bool AndroidUsbSocket::GetSSLInfo(net::SSLInfo* ssl_info) {
-  return false;
-}
-
-void AndroidUsbSocket::RespondToReaders(bool disconnect) {
-  std::deque<IORequest> read_requests;
-  read_requests.swap(read_requests_);
-  while (!read_requests.empty() && (!read_buffer_.empty() || disconnect)) {
-    IORequest read_request = read_requests.front();
-    read_requests.pop_front();
-    size_t bytes_to_copy =
-        static_cast<size_t>(read_request.length) > read_buffer_.length() ?
-            read_buffer_.length() : static_cast<size_t>(read_request.length);
-    memcpy(read_request.buffer->data(), read_buffer_.data(), bytes_to_copy);
-    if (read_buffer_.length() > bytes_to_copy)
-      read_buffer_ = read_buffer_.substr(bytes_to_copy);
-    else
-      read_buffer_ = "";
-    read_request.callback.Run(bytes_to_copy);
-  }
-}
-
-void AndroidUsbSocket::RespondToWriters() {
-  if (!write_requests_.empty()) {
-    IORequest write_request = write_requests_.front();
-    write_requests_.pop_front();
-    write_request.callback.Run(write_request.length);
-  }
-}
diff --git a/chrome/browser/devtools/adb/android_usb_socket.h b/chrome/browser/devtools/adb/android_usb_socket.h
deleted file mode 100644
index 8df8d1c..0000000
--- a/chrome/browser/devtools/adb/android_usb_socket.h
+++ /dev/null
@@ -1,89 +0,0 @@
-// Copyright (c) 2013 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 CHROME_BROWSER_DEVTOOLS_ADB_ANDROID_USB_SOCKET_H_
-#define CHROME_BROWSER_DEVTOOLS_ADB_ANDROID_USB_SOCKET_H_
-
-#include <deque>
-
-#include "base/memory/ref_counted.h"
-#include "base/threading/non_thread_safe.h"
-#include "chrome/browser/devtools/adb/android_usb_device.h"
-#include "net/base/ip_endpoint.h"
-#include "net/base/net_errors.h"
-#include "net/socket/stream_socket.h"
-
-namespace base {
-class MessageLoop;
-}
-
-class AdbMessage;
-
-class AndroidUsbSocket : public net::StreamSocket,
-                         public base::NonThreadSafe {
- public:
-  AndroidUsbSocket(scoped_refptr<AndroidUsbDevice> device,
-                   uint32 socket_id,
-                   const std::string& command,
-                   base::Callback<void(uint32)> delete_callback);
-  virtual ~AndroidUsbSocket();
-
-  void HandleIncoming(scoped_refptr<AdbMessage> message);
-
-  void Terminated();
-
-  // net::StreamSocket implementation.
-  virtual int Read(net::IOBuffer* buf, int buf_len,
-                   const net::CompletionCallback& callback) OVERRIDE;
-  virtual int Write(net::IOBuffer* buf, int buf_len,
-                    const net::CompletionCallback& callback) OVERRIDE;
-  virtual int SetReceiveBufferSize(int32 size) OVERRIDE;
-  virtual int SetSendBufferSize(int32 size) OVERRIDE;
-  virtual int Connect(const net::CompletionCallback& callback) OVERRIDE;
-  virtual void Disconnect() OVERRIDE;
-  virtual bool IsConnected() const OVERRIDE;
-  virtual bool IsConnectedAndIdle() const OVERRIDE;
-  virtual int GetPeerAddress(net::IPEndPoint* address) const OVERRIDE;
-  virtual int GetLocalAddress(net::IPEndPoint* address) const OVERRIDE;
-  virtual const net::BoundNetLog& NetLog() const OVERRIDE;
-  virtual void SetSubresourceSpeculation() OVERRIDE;
-  virtual void SetOmniboxSpeculation() OVERRIDE;
-  virtual bool WasEverUsed() const OVERRIDE;
-  virtual bool UsingTCPFastOpen() const OVERRIDE;
-  virtual bool WasNpnNegotiated() const OVERRIDE;
-  virtual net::NextProto GetNegotiatedProtocol() const OVERRIDE;
-  virtual bool GetSSLInfo(net::SSLInfo* ssl_info) OVERRIDE;
-
- private:
-  class IORequest {
-   public:
-    IORequest(net::IOBuffer* buffer,
-              int length,
-              const net::CompletionCallback& callback);
-    ~IORequest();
-
-    scoped_refptr<net::IOBuffer> buffer;
-    int length;
-    net::CompletionCallback callback;
-  };
-
-  void RespondToReaders(bool diconnect);
-  void RespondToWriters();
-
-  scoped_refptr<AndroidUsbDevice> device_;
-  std::string command_;
-  base::Callback<void(uint32)> delete_callback_;
-  uint32 local_id_;
-  uint32 remote_id_;
-  net::BoundNetLog net_log_;
-  bool is_connected_;
-  std::string read_buffer_;
-  net::CompletionCallback connect_callback_;
-  std::deque<IORequest> read_requests_;
-  std::deque<IORequest> write_requests_;
-
-  DISALLOW_COPY_AND_ASSIGN(AndroidUsbSocket);
-};
-
-#endif  // CHROME_BROWSER_DEVTOOLS_ADB_ANDROID_USB_SOCKET_H_
diff --git a/chrome/browser/devtools/adb_client_socket.cc b/chrome/browser/devtools/adb_client_socket.cc
deleted file mode 100644
index 47af74c..0000000
--- a/chrome/browser/devtools/adb_client_socket.cc
+++ /dev/null
@@ -1,436 +0,0 @@
-// Copyright (c) 2013 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 "chrome/browser/devtools/adb_client_socket.h"
-
-#include "base/bind.h"
-#include "base/compiler_specific.h"
-#include "base/strings/string_number_conversions.h"
-#include "base/strings/string_util.h"
-#include "base/strings/stringprintf.h"
-#include "net/base/address_list.h"
-#include "net/base/completion_callback.h"
-#include "net/base/net_errors.h"
-#include "net/base/net_util.h"
-#include "net/socket/tcp_client_socket.h"
-
-namespace {
-
-const int kBufferSize = 16 * 1024;
-const char kOkayResponse[] = "OKAY";
-const char kHostTransportCommand[] = "host:transport:%s";
-const char kLocalhost[] = "127.0.0.1";
-
-typedef base::Callback<void(int, const std::string&)> CommandCallback;
-typedef base::Callback<void(int, net::StreamSocket*)> SocketCallback;
-
-std::string EncodeMessage(const std::string& message) {
-  static const char kHexChars[] = "0123456789ABCDEF";
-
-  size_t length = message.length();
-  std::string result(4, '\0');
-  char b = reinterpret_cast<const char*>(&length)[1];
-  result[0] = kHexChars[(b >> 4) & 0xf];
-  result[1] = kHexChars[b & 0xf];
-  b = reinterpret_cast<const char*>(&length)[0];
-  result[2] = kHexChars[(b >> 4) & 0xf];
-  result[3] = kHexChars[b & 0xf];
-  return result + message;
-}
-
-class AdbTransportSocket : public AdbClientSocket {
- public:
-  AdbTransportSocket(int port,
-                     const std::string& serial,
-                     const std::string& socket_name,
-                     const SocketCallback& callback)
-    : AdbClientSocket(port),
-      serial_(serial),
-      socket_name_(socket_name),
-      callback_(callback) {
-    Connect(base::Bind(&AdbTransportSocket::OnConnected,
-                       base::Unretained(this)));
-  }
-
- private:
-  ~AdbTransportSocket() {}
-
-  void OnConnected(int result) {
-    if (!CheckNetResultOrDie(result))
-      return;
-    SendCommand(base::StringPrintf(kHostTransportCommand, serial_.c_str()),
-        true, base::Bind(&AdbTransportSocket::SendLocalAbstract,
-                         base::Unretained(this)));
-  }
-
-  void SendLocalAbstract(int result, const std::string& response) {
-    if (!CheckNetResultOrDie(result))
-      return;
-    SendCommand(socket_name_, true,
-                base::Bind(&AdbTransportSocket::OnSocketAvailable,
-                           base::Unretained(this)));
-  }
-
-  void OnSocketAvailable(int result, const std::string& response) {
-    if (!CheckNetResultOrDie(result))
-      return;
-    callback_.Run(net::OK, socket_.release());
-    delete this;
-  }
-
-  bool CheckNetResultOrDie(int result) {
-    if (result >= 0)
-      return true;
-    callback_.Run(result, NULL);
-    delete this;
-    return false;
-  }
-
-  std::string serial_;
-  std::string socket_name_;
-  SocketCallback callback_;
-};
-
-class HttpOverAdbSocket {
- public:
-  HttpOverAdbSocket(net::StreamSocket* socket,
-                    const std::string& request,
-                    const CommandCallback& callback)
-    : socket_(socket),
-      command_callback_(callback),
-      body_pos_(0) {
-    SendRequest(request);
-  }
-
-  HttpOverAdbSocket(net::StreamSocket* socket,
-                    const std::string& request,
-                    const SocketCallback& callback)
-    : socket_(socket),
-      socket_callback_(callback),
-      body_pos_(0) {
-    SendRequest(request);
-  }
-
- private:
-  ~HttpOverAdbSocket() {
-  }
-
-  void SendRequest(const std::string& request) {
-    scoped_refptr<net::StringIOBuffer> request_buffer =
-        new net::StringIOBuffer(request);
-
-    int result = socket_->Write(
-        request_buffer.get(),
-        request_buffer->size(),
-        base::Bind(&HttpOverAdbSocket::ReadResponse, base::Unretained(this)));
-    if (result != net::ERR_IO_PENDING)
-      ReadResponse(result);
-  }
-
-  void ReadResponse(int result) {
-    if (!CheckNetResultOrDie(result))
-      return;
-    scoped_refptr<net::IOBuffer> response_buffer =
-        new net::IOBuffer(kBufferSize);
-
-    result = socket_->Read(response_buffer.get(),
-                           kBufferSize,
-                           base::Bind(&HttpOverAdbSocket::OnResponseData,
-                                      base::Unretained(this),
-                                      response_buffer,
-                                      -1));
-    if (result != net::ERR_IO_PENDING)
-      OnResponseData(response_buffer, -1, result);
-  }
-
-  void OnResponseData(scoped_refptr<net::IOBuffer> response_buffer,
-                      int bytes_total,
-                      int result) {
-    if (!CheckNetResultOrDie(result))
-      return;
-    if (result == 0) {
-      CheckNetResultOrDie(net::ERR_CONNECTION_CLOSED);
-      return;
-    }
-
-    response_ += std::string(response_buffer->data(), result);
-    int expected_length = 0;
-    if (bytes_total < 0) {
-      // TODO(kaznacheev): Use net::HttpResponseHeader to parse the header.
-      size_t content_pos = response_.find("Content-Length:");
-      if (content_pos != std::string::npos) {
-        size_t endline_pos = response_.find("\n", content_pos);
-        if (endline_pos != std::string::npos) {
-          std::string len = response_.substr(content_pos + 15,
-                                             endline_pos - content_pos - 15);
-          base::TrimWhitespace(len, base::TRIM_ALL, &len);
-          if (!base::StringToInt(len, &expected_length)) {
-            CheckNetResultOrDie(net::ERR_FAILED);
-            return;
-          }
-        }
-      }
-
-      body_pos_ = response_.find("\r\n\r\n");
-      if (body_pos_ != std::string::npos) {
-        body_pos_ += 4;
-        bytes_total = body_pos_ + expected_length;
-      }
-    }
-
-    if (bytes_total == static_cast<int>(response_.length())) {
-      if (!command_callback_.is_null())
-        command_callback_.Run(net::OK, response_.substr(body_pos_));
-      else
-        socket_callback_.Run(net::OK, socket_.release());
-      delete this;
-      return;
-    }
-
-    result = socket_->Read(response_buffer.get(),
-                           kBufferSize,
-                           base::Bind(&HttpOverAdbSocket::OnResponseData,
-                                      base::Unretained(this),
-                                      response_buffer,
-                                      bytes_total));
-    if (result != net::ERR_IO_PENDING)
-      OnResponseData(response_buffer, bytes_total, result);
-  }
-
-  bool CheckNetResultOrDie(int result) {
-    if (result >= 0)
-      return true;
-    if (!command_callback_.is_null())
-      command_callback_.Run(result, std::string());
-    else
-      socket_callback_.Run(result, NULL);
-    delete this;
-    return false;
-  }
-
-  scoped_ptr<net::StreamSocket> socket_;
-  std::string response_;
-  CommandCallback command_callback_;
-  SocketCallback socket_callback_;
-  size_t body_pos_;
-};
-
-class AdbQuerySocket : AdbClientSocket {
- public:
-  AdbQuerySocket(int port,
-                 const std::string& query,
-                 const CommandCallback& callback)
-      : AdbClientSocket(port),
-        current_query_(0),
-        callback_(callback) {
-    if (Tokenize(query, "|", &queries_) == 0) {
-      CheckNetResultOrDie(net::ERR_INVALID_ARGUMENT);
-      return;
-    }
-    Connect(base::Bind(&AdbQuerySocket::SendNextQuery,
-                       base::Unretained(this)));
-  }
-
- private:
-  ~AdbQuerySocket() {
-  }
-
-  void SendNextQuery(int result) {
-    if (!CheckNetResultOrDie(result))
-      return;
-    std::string query = queries_[current_query_];
-    if (query.length() > 0xFFFF) {
-      CheckNetResultOrDie(net::ERR_MSG_TOO_BIG);
-      return;
-    }
-    bool is_void = current_query_ < queries_.size() - 1;
-    SendCommand(query, is_void,
-        base::Bind(&AdbQuerySocket::OnResponse, base::Unretained(this)));
-  }
-
-  void OnResponse(int result, const std::string& response) {
-    if (++current_query_ < queries_.size()) {
-      SendNextQuery(net::OK);
-    } else {
-      callback_.Run(result, response);
-      delete this;
-    }
-  }
-
-  bool CheckNetResultOrDie(int result) {
-    if (result >= 0)
-      return true;
-    callback_.Run(result, std::string());
-    delete this;
-    return false;
-  }
-
-  std::vector<std::string> queries_;
-  size_t current_query_;
-  CommandCallback callback_;
-};
-
-}  // namespace
-
-// static
-void AdbClientSocket::AdbQuery(int port,
-                               const std::string& query,
-                               const CommandCallback& callback) {
-  new AdbQuerySocket(port, query, callback);
-}
-
-// static
-void AdbClientSocket::TransportQuery(int port,
-                                     const std::string& serial,
-                                     const std::string& socket_name,
-                                     const SocketCallback& callback) {
-  new AdbTransportSocket(port, serial, socket_name, callback);
-}
-
-// static
-void AdbClientSocket::HttpQuery(net::StreamSocket* socket,
-                                const std::string& request_path,
-                                const CommandCallback& callback) {
-  new HttpOverAdbSocket(socket, request_path, callback);
-}
-
-// static
-void AdbClientSocket::HttpQuery(net::StreamSocket* socket,
-                                const std::string& request_path,
-                                const SocketCallback& callback) {
-  new HttpOverAdbSocket(socket, request_path, callback);
-}
-
-AdbClientSocket::AdbClientSocket(int port)
-    : host_(kLocalhost), port_(port) {
-}
-
-AdbClientSocket::~AdbClientSocket() {
-}
-
-void AdbClientSocket::Connect(const net::CompletionCallback& callback) {
-  net::IPAddressNumber ip_number;
-  if (!net::ParseIPLiteralToNumber(host_, &ip_number)) {
-    callback.Run(net::ERR_FAILED);
-    return;
-  }
-
-  net::AddressList address_list =
-      net::AddressList::CreateFromIPAddress(ip_number, port_);
-  socket_.reset(new net::TCPClientSocket(address_list, NULL,
-                                         net::NetLog::Source()));
-  int result = socket_->Connect(callback);
-  if (result != net::ERR_IO_PENDING)
-    callback.Run(result);
-}
-
-void AdbClientSocket::SendCommand(const std::string& command,
-                                  bool is_void,
-                                  const CommandCallback& callback) {
-  scoped_refptr<net::StringIOBuffer> request_buffer =
-      new net::StringIOBuffer(EncodeMessage(command));
-  int result = socket_->Write(request_buffer.get(),
-                              request_buffer->size(),
-                              base::Bind(&AdbClientSocket::ReadResponse,
-                                         base::Unretained(this),
-                                         callback,
-                                         is_void));
-  if (result != net::ERR_IO_PENDING)
-    ReadResponse(callback, is_void, result);
-}
-
-void AdbClientSocket::ReadResponse(const CommandCallback& callback,
-                                   bool is_void,
-                                   int result) {
-  if (result < 0) {
-    callback.Run(result, "IO error");
-    return;
-  }
-  scoped_refptr<net::IOBuffer> response_buffer =
-      new net::IOBuffer(kBufferSize);
-  result = socket_->Read(response_buffer.get(),
-                         kBufferSize,
-                         base::Bind(&AdbClientSocket::OnResponseHeader,
-                                    base::Unretained(this),
-                                    callback,
-                                    is_void,
-                                    response_buffer));
-  if (result != net::ERR_IO_PENDING)
-    OnResponseHeader(callback, is_void, response_buffer, result);
-}
-
-void AdbClientSocket::OnResponseHeader(
-    const CommandCallback& callback,
-    bool is_void,
-    scoped_refptr<net::IOBuffer> response_buffer,
-    int result) {
-  if (result <= 0) {
-    callback.Run(result == 0 ? net::ERR_CONNECTION_CLOSED : result,
-                 "IO error");
-    return;
-  }
-
-  std::string data = std::string(response_buffer->data(), result);
-  if (result < 4) {
-    callback.Run(net::ERR_FAILED, "Response is too short: " + data);
-    return;
-  }
-
-  std::string status = data.substr(0, 4);
-  if (status != kOkayResponse) {
-    callback.Run(net::ERR_FAILED, data);
-    return;
-  }
-
-  data = data.substr(4);
-
-  if (!is_void) {
-    int payload_length = 0;
-    int bytes_left = -1;
-    if (data.length() >= 4 &&
-        base::HexStringToInt(data.substr(0, 4), &payload_length)) {
-      data = data.substr(4);
-      bytes_left = payload_length - result + 8;
-    } else {
-      bytes_left = -1;
-    }
-    OnResponseData(callback, data, response_buffer, bytes_left, 0);
-  } else {
-    callback.Run(net::OK, data);
-  }
-}
-
-void AdbClientSocket::OnResponseData(
-    const CommandCallback& callback,
-    const std::string& response,
-    scoped_refptr<net::IOBuffer> response_buffer,
-    int bytes_left,
-    int result) {
-  if (result < 0) {
-    callback.Run(result, "IO error");
-    return;
-  }
-
-  bytes_left -= result;
-  std::string new_response =
-      response + std::string(response_buffer->data(), result);
-  if (bytes_left == 0) {
-    callback.Run(net::OK, new_response);
-    return;
-  }
-
-  // Read tail
-  result = socket_->Read(response_buffer.get(),
-                         kBufferSize,
-                         base::Bind(&AdbClientSocket::OnResponseData,
-                                    base::Unretained(this),
-                                    callback,
-                                    new_response,
-                                    response_buffer,
-                                    bytes_left));
-  if (result > 0)
-    OnResponseData(callback, new_response, response_buffer, bytes_left, result);
-  else if (result != net::ERR_IO_PENDING)
-    callback.Run(net::OK, new_response);
-}
diff --git a/chrome/browser/devtools/adb_client_socket.h b/chrome/browser/devtools/adb_client_socket.h
deleted file mode 100644
index 6382cdb..0000000
--- a/chrome/browser/devtools/adb_client_socket.h
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright (c) 2013 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 CHROME_BROWSER_DEVTOOLS_ADB_CLIENT_SOCKET_H_
-#define CHROME_BROWSER_DEVTOOLS_ADB_CLIENT_SOCKET_H_
-
-#include "base/callback.h"
-#include "net/base/io_buffer.h"
-#include "net/socket/stream_socket.h"
-
-class AdbClientSocket {
- public:
-  typedef base::Callback<void(int, const std::string&)> CommandCallback;
-  typedef base::Callback<void(int result,
-                              net::StreamSocket*)> SocketCallback;
-
-  static void AdbQuery(int port,
-                       const std::string& query,
-                       const CommandCallback& callback);
-
-
-  static void HttpQuery(net::StreamSocket* socket,
-                        const std::string& request,
-                        const CommandCallback& callback);
-
-  static void HttpQuery(net::StreamSocket* socket,
-                        const std::string& request,
-                        const SocketCallback& callback);
-
-  static void TransportQuery(int port,
-                             const std::string& serial,
-                             const std::string& socket_name,
-                             const SocketCallback& callback);
-
-  explicit AdbClientSocket(int port);
-  ~AdbClientSocket();
-
- protected:
-  void Connect(const net::CompletionCallback& callback);
-
-  void SendCommand(const std::string& command,
-                   bool is_void,
-                   const CommandCallback& callback);
-
-  scoped_ptr<net::StreamSocket> socket_;
-
- private:
-  void ReadResponse(const CommandCallback& callback, bool is_void, int result);
-
-  void OnResponseHeader(const CommandCallback& callback,
-                        bool is_void,
-                        scoped_refptr<net::IOBuffer> response_buffer,
-                        int result);
-
-  void OnResponseData(const CommandCallback& callback,
-                      const std::string& response,
-                      scoped_refptr<net::IOBuffer> response_buffer,
-                      int bytes_left,
-                      int result);
-
-  std::string host_;
-  int port_;
-
-  DISALLOW_COPY_AND_ASSIGN(AdbClientSocket);
-};
-
-#endif  // CHROME_BROWSER_DEVTOOLS_ADB_CLIENT_SOCKET_H_
diff --git a/chrome/browser/devtools/adb_client_socket_browsertest.cc b/chrome/browser/devtools/adb_client_socket_browsertest.cc
deleted file mode 100644
index 83727c8..0000000
--- a/chrome/browser/devtools/adb_client_socket_browsertest.cc
+++ /dev/null
@@ -1,422 +0,0 @@
-// Copyright 2013 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 "base/strings/string_number_conversions.h"
-#include "chrome/browser/devtools/devtools_adb_bridge.h"
-#include "chrome/browser/ui/browser.h"
-#include "chrome/test/base/in_process_browser_test.h"
-#include "content/public/browser/browser_thread.h"
-#include "content/public/test/browser_test.h"
-#include "content/public/test/test_utils.h"
-#include "net/base/host_port_pair.h"
-#include "net/base/io_buffer.h"
-#include "net/base/ip_endpoint.h"
-#include "net/base/net_errors.h"
-#include "net/base/net_log.h"
-#include "net/socket/stream_socket.h"
-#include "net/socket/tcp_server_socket.h"
-
-const char kOpenedUnixSocketsCommand[] = "shell:cat /proc/net/unix";
-const char kDeviceModelCommand[] = "shell:getprop ro.product.model";
-const char kDumpsysCommand[] = "shell:dumpsys window policy";
-const char kListProcessesCommand[] = "shell:ps";
-const char kInstalledChromePackagesCommand[] = "shell:pm list packages";
-const char kDeviceModel[] = "Nexus 8";
-
-const char kSampleOpenedUnixSocketsWithoutBrowsers[] =
-    "Num       RefCount Protocol Flags    Type St Inode Path\n"
-    "00000000: 00000004 00000000"
-    " 00000000 0002 01  3328 /dev/socket/wpa_wlan0\n"
-    "00000000: 00000002 00000000"
-    " 00010000 0001 01  5394 /dev/socket/vold\n";
-
-const char kSampleDumpsys[] =
-    "WINDOW MANAGER POLICY STATE (dumpsys window policy)\r\n"
-    "    mStable=(0,50)-(720,1184)\r\n";
-
-const char kSampleListProcesses[] =
-    "USER     PID   PPID  VSIZE  RSS     WCHAN    PC         NAME\n"
-    "root      1     0     688    508   ffffffff 00000000 S /init\n";
-
-const char kSampleListPackages[] = "package:com.example.app";
-
-static const int kBufferSize = 16*1024;
-static const int kAdbPort = 5037;
-
-static const int kAdbMessageHeaderSize = 4;
-
-// This is single connection server which listens on specified port and
-// simplifies asynchronous IO.
-// To write custom server, extend this class and implement TryProcessData
-// method which is invoked everytime data arrives. In case of successful data
-// processing(e.g. enough data collected already to parse client reply/request)
-// return amount of bytes processed to throw them away from buffer
-// To send data, SendData method should be used. This method is non-blocking
-// and appends data to be sent to internal buffer.
-// Since all calls are non-blocking and no callbacks are given, internal
-// overflows may occur in case too heavy traffic.
-// In case of heavy traffic performance may suffer because of memcpy calls.
-class SingleConnectionServer {
- public:
-  SingleConnectionServer(net::IPEndPoint endpoint, int buffer_size);
-  virtual ~SingleConnectionServer();
-
- protected:
-  virtual int TryProcessData(const char* data, int size) = 0;
-  void SendData(const char* data, int size);
-
-private:
-  void AcceptConnection();
-  void OnAccepted(int result);
-
-  void ReadData();
-  void OnDataRead(int count);
-
-  void WriteData();
-  void OnDataWritten(int count);
-
-private:
-  int bytes_to_write_;
-  scoped_ptr<net::TCPServerSocket> server_socket_;
-  scoped_ptr<net::StreamSocket> client_socket_;
-  scoped_refptr<net::GrowableIOBuffer> input_buffer_;
-  scoped_refptr<net::GrowableIOBuffer> output_buffer_;
-
-  DISALLOW_COPY_AND_ASSIGN(SingleConnectionServer);
-};
-
-SingleConnectionServer::SingleConnectionServer(net::IPEndPoint endpoint,
-                                               int buffer_size)
-    : bytes_to_write_(0) {
-  CHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
-
-  input_buffer_ = new net::GrowableIOBuffer();
-  input_buffer_->SetCapacity(buffer_size);
-
-  output_buffer_ = new net::GrowableIOBuffer();
-
-  server_socket_.reset(new net::TCPServerSocket(NULL, net::NetLog::Source()));
-  server_socket_->Listen(endpoint, 1);
-
-  AcceptConnection();
-}
-
-SingleConnectionServer::~SingleConnectionServer() {
-  CHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
-
-  server_socket_.reset();
-
-  if (client_socket_) {
-    client_socket_->Disconnect();
-    client_socket_.reset();
-  }
-}
-
-void SingleConnectionServer::SendData(const char* data, int size) {
-  CHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
-
-  if ((output_buffer_->offset() + bytes_to_write_ + size) >
-      output_buffer_->capacity()) {
-    // If not enough space without relocation
-    if (output_buffer_->capacity() < (bytes_to_write_ + size)) {
-      // If even buffer is not enough
-      int new_size = std::max(output_buffer_->capacity() * 2, size * 2);
-      output_buffer_->SetCapacity(new_size);
-    }
-    memmove(output_buffer_->StartOfBuffer(),
-            output_buffer_->data(),
-            bytes_to_write_);
-    output_buffer_->set_offset(0);
-  }
-
-  memcpy(output_buffer_->data() + bytes_to_write_, data, size);
-  bytes_to_write_ += size;
-
-  if (bytes_to_write_ == size)
-    // If write loop wasn't yet started, then start it
-    WriteData();
-}
-
-void SingleConnectionServer::AcceptConnection() {
-  if (client_socket_) {
-    client_socket_->Disconnect();
-    client_socket_.reset();
-  }
-
-  int accept_result = server_socket_->Accept(&client_socket_,
-      base::Bind(&SingleConnectionServer::OnAccepted, base::Unretained(this)));
-
-  if (accept_result != net::ERR_IO_PENDING)
-    content::BrowserThread::PostTask(
-        content::BrowserThread::IO,
-        FROM_HERE,
-        base::Bind(&SingleConnectionServer::OnAccepted,
-                   base::Unretained(this),
-                   accept_result));
-}
-
-void SingleConnectionServer::OnAccepted(int result) {
-  ASSERT_EQ(result, 0);  // Fails if the socket is already in use.
-  ReadData();
-}
-
-void SingleConnectionServer::ReadData() {
-  CHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
-
-  if (input_buffer_->RemainingCapacity() == 0)
-    input_buffer_->SetCapacity(input_buffer_->capacity() * 2);
-
-  int read_result = client_socket_->Read(
-      input_buffer_.get(),
-      input_buffer_->RemainingCapacity(),
-      base::Bind(&SingleConnectionServer::OnDataRead, base::Unretained(this)));
-
-  if (read_result != net::ERR_IO_PENDING)
-    OnDataRead(read_result);
-}
-
-void SingleConnectionServer::OnDataRead(int count) {
-  if (count <= 0) {
-    AcceptConnection();
-    return;
-  }
-
-  input_buffer_->set_offset(input_buffer_->offset() + count);
-
-  int bytes_processed;
-
-  do {
-    char* data = input_buffer_->StartOfBuffer();
-    int data_size = input_buffer_->offset();
-
-    bytes_processed = TryProcessData(data, data_size);
-
-    if (bytes_processed) {
-      memmove(data, data + bytes_processed, data_size - bytes_processed);
-      input_buffer_->set_offset( data_size - bytes_processed);
-    }
-  } while (bytes_processed);
-
-  // Posting is needed not to enter deep recursion in case too synchronous IO
-  content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE,
-      base::Bind(&SingleConnectionServer::ReadData, base::Unretained(this)));
-}
-
-void SingleConnectionServer::WriteData() {
-  CHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
-  CHECK_GE(output_buffer_->capacity(),
-           output_buffer_->offset() + bytes_to_write_) << "Overflow";
-
-  int write_result = client_socket_->Write(
-      output_buffer_,
-      bytes_to_write_,
-      base::Bind(&SingleConnectionServer::OnDataWritten,
-                 base::Unretained(this)));
-  if (write_result != net::ERR_IO_PENDING)
-    OnDataWritten(write_result);
-}
-
-void SingleConnectionServer::OnDataWritten(int count) {
-  CHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
-  if (count < 0) {
-    AcceptConnection();
-    return;
-  }
-
-  CHECK_GT(count, 0);
-  CHECK_GE(output_buffer_->capacity(),
-           output_buffer_->offset() + bytes_to_write_) << "Overflow";
-
-  bytes_to_write_ -= count;
-  output_buffer_->set_offset(output_buffer_->offset() + count);
-
-  if (bytes_to_write_ != 0)
-    // Posting is needed not to enter deep recursion in case too synchronous IO
-    content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE,
-        base::Bind(&SingleConnectionServer::WriteData, base::Unretained(this)));
-}
-
-
-class MockAdbServer: public SingleConnectionServer {
- public:
-  MockAdbServer(net::IPEndPoint endpoint, int buffer_size)
-      : SingleConnectionServer(endpoint, buffer_size)
-  {}
-
-  virtual ~MockAdbServer() {}
-
- private:
-  virtual int TryProcessData(const char* data, int size) OVERRIDE {
-    CHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
-
-    if (size >= kAdbMessageHeaderSize) {
-      std::string message_header(data, kAdbMessageHeaderSize);
-      int message_size;
-
-      EXPECT_TRUE(base::HexStringToInt(message_header, &message_size));
-
-      if (size >= message_size + kAdbMessageHeaderSize) {
-        std::string message_body(data + kAdbMessageHeaderSize, message_size );
-
-        ProcessCommand(message_body);
-
-        return kAdbMessageHeaderSize + message_size;
-      }
-    }
-
-    return 0;
-  }
-
-  void ProcessCommand(const std::string& command) {
-    CHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
-
-    if (command == "host:devices") {
-      SendResponse("01498B321301A00A\tdevice\n01498B2B0D01300E\toffline");
-    } else if (command == "host:transport:01498B321301A00A") {
-      SendResponse("");
-    } else if (command == kDeviceModelCommand) {
-      SendResponse(kDeviceModel);
-    } else if (command == kOpenedUnixSocketsCommand) {
-      SendResponse(kSampleOpenedUnixSocketsWithoutBrowsers);
-    } else if (command == kDumpsysCommand) {
-      SendResponse(kSampleDumpsys);
-    } else if (command == kListProcessesCommand) {
-      SendResponse(kSampleListProcesses);
-    } else if (command == kInstalledChromePackagesCommand) {
-      SendResponse(kSampleListPackages);
-    } else {
-      NOTREACHED() << "Unknown command - " << command;
-    }
-  }
-
-  void SendResponse(const std::string& response) {
-    DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
-
-    std::stringstream response_stream;
-    response_stream << "OKAY";
-
-    int size = response.size();
-    if (size > 0) {
-      static const char kHexChars[] = "0123456789ABCDEF";
-      for (int i = 3; i >= 0; i--)
-        response_stream << kHexChars[ (size >> 4*i) & 0x0f ];
-      response_stream << response;
-    }
-
-    std::string response_data = response_stream.str();
-    SendData(response_data.c_str(), response_data.size());
-  }
-};
-
-class AdbClientSocketTest : public InProcessBrowserTest,
-                            public DevToolsAdbBridge::DeviceListListener {
-
-public:
-  void StartTest() {
-    DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
-
-    content::BrowserThread::PostTaskAndReply(
-        content::BrowserThread::IO,
-        FROM_HERE,
-        base::Bind(&AdbClientSocketTest::StartMockAdbServer,
-                   base::Unretained(this)),
-        base::Bind(&AdbClientSocketTest::AddListener,
-                   base::Unretained(this)));
-  }
-
-  virtual void DeviceListChanged(
-      const DevToolsAdbBridge::RemoteDevices& devices) OVERRIDE {
-    DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
-    adb_bridge_->RemoveDeviceListListener(this);
-    devices_ = devices;
-    EndTest();
-  }
-
-  void CheckDevices() {
-    ASSERT_EQ(2U, devices_.size());
-
-    scoped_refptr<DevToolsAdbBridge::RemoteDevice> online_device_;
-    scoped_refptr<DevToolsAdbBridge::RemoteDevice> offline_device_;
-
-    for (DevToolsAdbBridge::RemoteDevices::const_iterator it =
-        devices_.begin(); it != devices_.end(); ++it) {
-      if ((*it)->serial() == "01498B321301A00A")
-        online_device_ = *it;
-      else if ((*it)->serial() == "01498B2B0D01300E")
-        offline_device_ = *it;
-    }
-
-    ASSERT_EQ(online_device_->serial(), "01498B321301A00A");
-    ASSERT_TRUE(online_device_->is_connected());
-    ASSERT_FALSE(offline_device_->is_connected());
-
-    ASSERT_EQ(online_device_->model(), kDeviceModel);
-    ASSERT_EQ(online_device_->browsers().size(), 0U);
-    ASSERT_EQ(online_device_->screen_size(), gfx::Size(720, 1184));
-  }
-
-private:
-  void EndTest() {
-    DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
-    adb_bridge_ = NULL;
-
-    content::BrowserThread::PostTaskAndReply(
-        content::BrowserThread::IO,
-        FROM_HERE,
-        base::Bind(&AdbClientSocketTest::StopMockAdbServer,
-                   base::Unretained(this)),
-        base::Bind(&AdbClientSocketTest::StopMessageLoop,
-                   base::Unretained(this)));
-  }
-
-  void StartMockAdbServer() {
-    DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
-    net::IPAddressNumber address;
-    net::ParseIPLiteralToNumber("127.0.0.1", &address);
-    net::IPEndPoint endpoint(address, kAdbPort);
-
-    adb_server_.reset(new MockAdbServer(endpoint, kBufferSize));
-  }
-
-  void StopMockAdbServer() {
-    DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
-    adb_server_.reset();
-  }
-
-  void StopMessageLoop() {
-    DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
-    runner->Quit();
-  }
-
-  void AddListener() {
-    DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
-    adb_bridge_ = DevToolsAdbBridge::Factory::GetForProfile(
-        browser()->profile());
-
-    AndroidDeviceManager::DeviceProviders device_providers;
-    device_providers.push_back(AndroidDeviceManager::GetAdbDeviceProvider());
-
-    adb_bridge_->set_device_providers_for_test(device_providers);
-    adb_bridge_->AddDeviceListListener(this);
-  }
-
-public:
-  scoped_refptr<content::MessageLoopRunner> runner;
-
-private:
-  scoped_ptr<MockAdbServer> adb_server_;
-  scoped_refptr<DevToolsAdbBridge> adb_bridge_;
-  DevToolsAdbBridge::RemoteDevices devices_;
-};
-
-IN_PROC_BROWSER_TEST_F(AdbClientSocketTest, TestAdbClientSocket) {
-  CHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
-  runner = new content::MessageLoopRunner;
-
-  StartTest();
-
-  runner->Run();
-
-  CheckDevices();
-}
diff --git a/chrome/browser/devtools/adb_web_socket.cc b/chrome/browser/devtools/adb_web_socket.cc
deleted file mode 100644
index 06e99f5..0000000
--- a/chrome/browser/devtools/adb_web_socket.cc
+++ /dev/null
@@ -1,238 +0,0 @@
-// Copyright (c) 2013 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 "base/message_loop/message_loop.h"
-#include "base/rand_util.h"
-#include "base/strings/stringprintf.h"
-#include "chrome/browser/devtools/devtools_adb_bridge.h"
-#include "content/public/browser/browser_thread.h"
-#include "net/base/net_errors.h"
-#include "net/server/web_socket.h"
-
-using content::BrowserThread;
-using net::WebSocket;
-
-namespace {
-
-const int kBufferSize = 16 * 1024;
-
-static const char kWebSocketUpgradeRequest[] = "GET %s HTTP/1.1\r\n"
-    "Upgrade: WebSocket\r\n"
-    "Connection: Upgrade\r\n"
-    "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\n"
-    "Sec-WebSocket-Version: 13\r\n"
-    "\r\n";
-
-class AdbWebSocketImpl : public DevToolsAdbBridge::AdbWebSocket {
- public:
-  AdbWebSocketImpl(scoped_refptr<DevToolsAdbBridge> adb_bridge,
-                   AndroidDeviceManager* device_manager,
-                   base::MessageLoop* device_message_loop,
-                   const std::string& serial,
-                   const std::string& socket_name,
-                   const std::string& url,
-                   Delegate* delegate);
-
-  virtual void Disconnect() OVERRIDE;
-
-  virtual void SendFrame(const std::string& message) OVERRIDE;
-
- private:
-  friend class base::RefCountedThreadSafe<AdbWebSocket>;
-
-  virtual ~AdbWebSocketImpl();
-
-  void ConnectOnHandlerThread();
-  void ConnectedOnHandlerThread(int result, net::StreamSocket* socket);
-  void StartListeningOnHandlerThread();
-  void OnBytesRead(scoped_refptr<net::IOBuffer> response_buffer, int result);
-  void SendFrameOnHandlerThread(const std::string& message);
-  void SendPendingRequests(int result);
-  void DisconnectOnHandlerThread(bool closed_by_device);
-
-  void OnSocketOpened();
-  void OnFrameRead(const std::string& message);
-  void OnSocketClosed(bool closed_by_device);
-
-  scoped_refptr<DevToolsAdbBridge> adb_bridge_;
-  AndroidDeviceManager* device_manager_;
-  base::MessageLoop* device_message_loop_;
-  std::string serial_;
-  std::string socket_name_;
-  std::string url_;
-  scoped_ptr<net::StreamSocket> socket_;
-  Delegate* delegate_;
-  std::string response_buffer_;
-  std::string request_buffer_;
-};
-
-AdbWebSocketImpl::AdbWebSocketImpl(
-    scoped_refptr<DevToolsAdbBridge> adb_bridge,
-    AndroidDeviceManager* device_manager,
-    base::MessageLoop* device_message_loop,
-    const std::string& serial,
-    const std::string& socket_name,
-    const std::string& url,
-    Delegate* delegate)
-    : adb_bridge_(adb_bridge),
-      device_manager_(device_manager),
-      device_message_loop_(device_message_loop),
-      serial_(serial),
-      socket_name_(socket_name),
-      url_(url),
-      delegate_(delegate) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  device_message_loop_->PostTask(
-      FROM_HERE, base::Bind(&AdbWebSocketImpl::ConnectOnHandlerThread, this));
-}
-
-void AdbWebSocketImpl::Disconnect() {
-  device_message_loop_->PostTask(
-      FROM_HERE,
-      base::Bind(&AdbWebSocketImpl::DisconnectOnHandlerThread, this, false));
-}
-
-void AdbWebSocketImpl::SendFrame(const std::string& message) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  device_message_loop_->PostTask(
-      FROM_HERE,
-      base::Bind(&AdbWebSocketImpl::SendFrameOnHandlerThread, this, message));
-}
-
-void AdbWebSocketImpl::SendFrameOnHandlerThread(const std::string& message) {
-  int mask = base::RandInt(0, 0x7FFFFFFF);
-  std::string encoded_frame = WebSocket::EncodeFrameHybi17(message, mask);
-  request_buffer_ += encoded_frame;
-  if (request_buffer_.length() == encoded_frame.length())
-    SendPendingRequests(0);
-}
-
-AdbWebSocketImpl::~AdbWebSocketImpl() {}
-
-void AdbWebSocketImpl::ConnectOnHandlerThread() {
-  device_manager_->HttpUpgrade(
-      serial_,
-      socket_name_,
-      base::StringPrintf(kWebSocketUpgradeRequest, url_.c_str()),
-      base::Bind(&AdbWebSocketImpl::ConnectedOnHandlerThread, this));
-}
-
-void AdbWebSocketImpl::ConnectedOnHandlerThread(
-  int result, net::StreamSocket* socket) {
-  if (result != net::OK || socket == NULL) {
-    BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
-        base::Bind(&AdbWebSocketImpl::OnSocketClosed, this, true));
-    return;
-  }
-  socket_.reset(socket);
-  BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
-      base::Bind(&AdbWebSocketImpl::OnSocketOpened, this));
-  StartListeningOnHandlerThread();
-}
-
-void AdbWebSocketImpl::StartListeningOnHandlerThread() {
-  scoped_refptr<net::IOBuffer> response_buffer =
-      new net::IOBuffer(kBufferSize);
-  int result = socket_->Read(
-      response_buffer.get(),
-      kBufferSize,
-      base::Bind(&AdbWebSocketImpl::OnBytesRead, this, response_buffer));
-  if (result != net::ERR_IO_PENDING)
-    OnBytesRead(response_buffer, result);
-}
-
-void AdbWebSocketImpl::OnBytesRead(
-    scoped_refptr<net::IOBuffer> response_buffer, int result) {
-  if (!socket_)
-    return;
-
-  if (result <= 0) {
-    DisconnectOnHandlerThread(true);
-    return;
-  }
-
-  std::string data = std::string(response_buffer->data(), result);
-  response_buffer_ += data;
-
-  int bytes_consumed;
-  std::string output;
-  WebSocket::ParseResult parse_result = WebSocket::DecodeFrameHybi17(
-      response_buffer_, false, &bytes_consumed, &output);
-
-  while (parse_result == WebSocket::FRAME_OK) {
-    response_buffer_ = response_buffer_.substr(bytes_consumed);
-    BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
-        base::Bind(&AdbWebSocketImpl::OnFrameRead, this, output));
-    parse_result = WebSocket::DecodeFrameHybi17(
-        response_buffer_, false, &bytes_consumed, &output);
-  }
-
-  if (parse_result == WebSocket::FRAME_ERROR ||
-      parse_result == WebSocket::FRAME_CLOSE) {
-    DisconnectOnHandlerThread(true);
-    return;
-  }
-
-  result = socket_->Read(
-      response_buffer.get(),
-      kBufferSize,
-      base::Bind(&AdbWebSocketImpl::OnBytesRead, this, response_buffer));
-  if (result != net::ERR_IO_PENDING)
-    OnBytesRead(response_buffer, result);
-}
-
-void AdbWebSocketImpl::SendPendingRequests(int result) {
-  if (!socket_)
-    return;
-  if (result < 0) {
-    DisconnectOnHandlerThread(true);
-    return;
-  }
-  request_buffer_ = request_buffer_.substr(result);
-  if (request_buffer_.empty())
-    return;
-
-  scoped_refptr<net::StringIOBuffer> buffer =
-      new net::StringIOBuffer(request_buffer_);
-  result = socket_->Write(buffer.get(), buffer->size(),
-                          base::Bind(&AdbWebSocketImpl::SendPendingRequests,
-                                     this));
-  if (result != net::ERR_IO_PENDING)
-    SendPendingRequests(result);
-}
-
-void AdbWebSocketImpl::DisconnectOnHandlerThread(bool closed_by_device) {
-  if (!socket_)
-    return;
-  // Wipe out socket_ first since Disconnect can re-enter this method.
-  scoped_ptr<net::StreamSocket> socket(socket_.release());
-  socket->Disconnect();
-  BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
-      base::Bind(&AdbWebSocketImpl::OnSocketClosed, this, closed_by_device));
-}
-
-void AdbWebSocketImpl::OnSocketOpened() {
-  delegate_->OnSocketOpened();
-}
-
-void AdbWebSocketImpl::OnFrameRead(const std::string& message) {
-  delegate_->OnFrameRead(message);
-}
-
-void AdbWebSocketImpl::OnSocketClosed(bool closed_by_device) {
-  delegate_->OnSocketClosed(closed_by_device);
-}
-
-}  // namespace
-
-scoped_refptr<DevToolsAdbBridge::AdbWebSocket>
-DevToolsAdbBridge::RemoteBrowser::CreateWebSocket(
-    const std::string& url,
-    DevToolsAdbBridge::AdbWebSocket::Delegate* delegate) {
-  return new AdbWebSocketImpl(
-      adb_bridge_,
-      adb_bridge_->device_manager(),
-      adb_bridge_->device_message_loop(),
-      serial_, socket_, url, delegate);
-}
diff --git a/chrome/browser/devtools/android_device.cc b/chrome/browser/devtools/android_device.cc
deleted file mode 100644
index 945c15c..0000000
--- a/chrome/browser/devtools/android_device.cc
+++ /dev/null
@@ -1,538 +0,0 @@
-// Copyright 2013 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 "chrome/browser/devtools/android_device.h"
-
-#include "base/strings/string_number_conversions.h"
-#include "base/strings/string_util.h"
-#include "base/strings/stringprintf.h"
-#include "base/threading/thread.h"
-#include "chrome/browser/devtools/adb/android_rsa.h"
-#include "chrome/browser/devtools/adb/android_usb_device.h"
-#include "chrome/browser/devtools/adb_client_socket.h"
-#include "net/base/net_errors.h"
-#include "net/base/net_util.h"
-#include "net/socket/tcp_client_socket.h"
-
-using content::BrowserThread;
-
-namespace {
-
-const char kHostTransportCommand[] = "host:transport:%s|%s";
-const char kHostDevicesCommand[] = "host:devices";
-const char kLocalAbstractCommand[] = "localabstract:%s";
-
-const int kAdbPort = 5037;
-const int kBufferSize = 16 * 1024;
-
-#if defined(DEBUG_DEVTOOLS)
-const char kDeviceModelCommand[] = "shell:getprop ro.product.model";
-const char kOpenedUnixSocketsCommand[] = "shell:cat /proc/net/unix";
-const char kOpenedUnixSocketsResponse[] =
-    "Num       RefCount Protocol Flags    Type St Inode Path\n"
-    "00000000: 00000002 00000000 00010000 0001 01 20894 @%s\n";
-const char kRemoteDebuggingSocket[] = "chrome_devtools_remote";
-const char kLocalChrome[] = "Local Chrome";
-const char kLocalhost[] = "127.0.0.1";
-const int kLocalDebuggingPort = 9222;
-#endif
-
-// AdbDeviceImpl --------------------------------------------------------------
-
-class AdbDeviceImpl : public AndroidDeviceManager::Device {
- public:
-  AdbDeviceImpl(const std::string& serial, bool is_connected);
-  virtual void RunCommand(const std::string& command,
-                          const CommandCallback& callback) OVERRIDE;
-  virtual void OpenSocket(const std::string& name,
-                          const SocketCallback& callback) OVERRIDE;
- private:
-  virtual ~AdbDeviceImpl() {}
-};
-
-AdbDeviceImpl::AdbDeviceImpl(const std::string& serial, bool is_connected)
-    : Device(serial, is_connected) {
-}
-
-void AdbDeviceImpl::RunCommand(const std::string& command,
-                               const CommandCallback& callback) {
-  DCHECK(CalledOnValidThread());
-  std::string query = base::StringPrintf(kHostTransportCommand,
-                                         serial().c_str(), command.c_str());
-  AdbClientSocket::AdbQuery(kAdbPort, query, callback);
-}
-
-void AdbDeviceImpl::OpenSocket(const std::string& name,
-                               const SocketCallback& callback) {
-  DCHECK(CalledOnValidThread());
-  std::string socket_name =
-      base::StringPrintf(kLocalAbstractCommand, name.c_str());
-  AdbClientSocket::TransportQuery(kAdbPort, serial(), socket_name, callback);
-}
-
-// UsbDeviceImpl --------------------------------------------------------------
-
-class UsbDeviceImpl : public AndroidDeviceManager::Device {
- public:
-  explicit UsbDeviceImpl(AndroidUsbDevice* device);
-  virtual void RunCommand(const std::string& command,
-                          const CommandCallback& callback) OVERRIDE;
-  virtual void OpenSocket(const std::string& name,
-                          const SocketCallback& callback) OVERRIDE;
- private:
-  void OnOpenSocket(const SocketCallback& callback,
-                    net::StreamSocket* socket,
-                    int result);
-  void OpenedForCommand(const CommandCallback& callback,
-                        net::StreamSocket* socket,
-                        int result);
-  void OnRead(net::StreamSocket* socket,
-              scoped_refptr<net::IOBuffer> buffer,
-              const std::string& data,
-              const CommandCallback& callback,
-              int result);
-
-  virtual ~UsbDeviceImpl() {}
-  scoped_refptr<AndroidUsbDevice> device_;
-};
-
-
-UsbDeviceImpl::UsbDeviceImpl(AndroidUsbDevice* device)
-    : Device(device->serial(), device->is_connected()),
-      device_(device) {
-  device_->InitOnCallerThread();
-}
-
-void UsbDeviceImpl::RunCommand(const std::string& command,
-                               const CommandCallback& callback) {
-  DCHECK(CalledOnValidThread());
-  net::StreamSocket* socket = device_->CreateSocket(command);
-  if (!socket) {
-    callback.Run(net::ERR_CONNECTION_FAILED, std::string());
-    return;
-  }
-  int result = socket->Connect(base::Bind(&UsbDeviceImpl::OpenedForCommand,
-                                          this, callback, socket));
-  if (result != net::ERR_IO_PENDING)
-    callback.Run(result, std::string());
-}
-
-void UsbDeviceImpl::OpenSocket(const std::string& name,
-                               const SocketCallback& callback) {
-  DCHECK(CalledOnValidThread());
-  std::string socket_name =
-      base::StringPrintf(kLocalAbstractCommand, name.c_str());
-  net::StreamSocket* socket = device_->CreateSocket(socket_name);
-  if (!socket) {
-    callback.Run(net::ERR_CONNECTION_FAILED, NULL);
-    return;
-  }
-  int result = socket->Connect(base::Bind(&UsbDeviceImpl::OnOpenSocket, this,
-                                          callback, socket));
-  if (result != net::ERR_IO_PENDING)
-    callback.Run(result, NULL);
-}
-
-void UsbDeviceImpl::OnOpenSocket(const SocketCallback& callback,
-                  net::StreamSocket* socket,
-                  int result) {
-  callback.Run(result, result == net::OK ? socket : NULL);
-}
-
-void UsbDeviceImpl::OpenedForCommand(const CommandCallback& callback,
-                                     net::StreamSocket* socket,
-                                     int result) {
-  if (result != net::OK) {
-    callback.Run(result, std::string());
-    return;
-  }
-  scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer(kBufferSize);
-  result = socket->Read(buffer, kBufferSize,
-                        base::Bind(&UsbDeviceImpl::OnRead, this,
-                                   socket, buffer, std::string(), callback));
-  if (result != net::ERR_IO_PENDING)
-    OnRead(socket, buffer, std::string(), callback, result);
-}
-
-void UsbDeviceImpl::OnRead(net::StreamSocket* socket,
-                           scoped_refptr<net::IOBuffer> buffer,
-                           const std::string& data,
-                           const CommandCallback& callback,
-                           int result) {
-  if (result <= 0) {
-    callback.Run(result, result == 0 ? data : std::string());
-    delete socket;
-    return;
-  }
-
-  std::string new_data = data + std::string(buffer->data(), result);
-  result = socket->Read(buffer, kBufferSize,
-                        base::Bind(&UsbDeviceImpl::OnRead, this,
-                                   socket, buffer, new_data, callback));
-  if (result != net::ERR_IO_PENDING)
-    OnRead(socket, buffer, new_data, callback, result);
-}
-
-// AdbDeviceProvider -------------------------------------------
-
-class AdbDeviceProvider : public AndroidDeviceManager::DeviceProvider {
- public:
-  virtual void QueryDevices(const QueryDevicesCallback& callback) OVERRIDE;
- private:
-  void ReceivedAdbDevices(const QueryDevicesCallback& callback, int result,
-                          const std::string& response);
-
-  virtual ~AdbDeviceProvider();
-};
-
-AdbDeviceProvider::~AdbDeviceProvider() {
-}
-
-void AdbDeviceProvider::QueryDevices(const QueryDevicesCallback& callback) {
-  AdbClientSocket::AdbQuery(
-      kAdbPort, kHostDevicesCommand,
-      base::Bind(&AdbDeviceProvider::ReceivedAdbDevices, this, callback));
-}
-
-void AdbDeviceProvider::ReceivedAdbDevices(const QueryDevicesCallback& callback,
-                                           int result_code,
-                                           const std::string& response) {
-  AndroidDeviceManager::Devices result;
-  std::vector<std::string> serials;
-  Tokenize(response, "\n", &serials);
-  for (size_t i = 0; i < serials.size(); ++i) {
-    std::vector<std::string> tokens;
-    Tokenize(serials[i], "\t ", &tokens);
-    bool offline = tokens.size() > 1 && tokens[1] == "offline";
-    result.push_back(new AdbDeviceImpl(tokens[0], !offline));
-  }
-  callback.Run(result);
-}
-
-// UsbDeviceProvider -------------------------------------------
-
-class UsbDeviceProvider : public AndroidDeviceManager::DeviceProvider {
- public:
-  explicit UsbDeviceProvider(Profile* profile);
-
-  virtual void QueryDevices(const QueryDevicesCallback& callback) OVERRIDE;
- private:
-  virtual ~UsbDeviceProvider();
-  void EnumeratedDevices(const QueryDevicesCallback& callback,
-                         const AndroidUsbDevices& devices);
-
-  scoped_ptr<crypto::RSAPrivateKey>  rsa_key_;
-};
-
-UsbDeviceProvider::UsbDeviceProvider(Profile* profile){
-  rsa_key_.reset(AndroidRSAPrivateKey(profile));
-}
-
-UsbDeviceProvider::~UsbDeviceProvider() {
-}
-
-void UsbDeviceProvider::QueryDevices(const QueryDevicesCallback& callback) {
-  AndroidUsbDevice::Enumerate(rsa_key_.get(),
-      base::Bind(&UsbDeviceProvider::EnumeratedDevices, this, callback));
-}
-
-void UsbDeviceProvider::EnumeratedDevices(const QueryDevicesCallback& callback,
-                                          const AndroidUsbDevices& devices) {
-  AndroidDeviceManager::Devices result;
-  for (AndroidUsbDevices::const_iterator it = devices.begin();
-      it != devices.end(); ++it)
-    result.push_back(new UsbDeviceImpl(*it));
-  callback.Run(result);
-}
-
-} // namespace
-
-AndroidDeviceManager::Device::Device(const std::string& serial,
-                                     bool is_connected)
-    : serial_(serial),
-      is_connected_(is_connected) {
-}
-
-void AndroidDeviceManager::Device::HttpQuery(
-    const std::string& la_name,
-    const std::string& request,
-    const CommandCallback& callback) {
-  DCHECK(CalledOnValidThread());
-  OpenSocket(la_name, base::Bind(
-      &Device::OnHttpSocketOpened, this, request, callback));
-}
-
-void AndroidDeviceManager::Device::HttpUpgrade(
-    const std::string& la_name,
-    const std::string& request,
-    const SocketCallback& callback) {
-  DCHECK(CalledOnValidThread());
-  OpenSocket(la_name, base::Bind(
-      &Device::OnHttpSocketOpened2, this, request, callback));
-}
-
-AndroidDeviceManager::Device::~Device() {
-}
-
-void AndroidDeviceManager::Device::OnHttpSocketOpened(
-    const std::string& request,
-    const CommandCallback& callback,
-    int result,
-    net::StreamSocket* socket) {
-  if (result != net::OK) {
-    callback.Run(result, std::string());
-    return;
-  }
-  AdbClientSocket::HttpQuery(socket, request, callback);
-}
-
-void AndroidDeviceManager::Device::OnHttpSocketOpened2(
-    const std::string& request,
-    const SocketCallback& callback,
-    int result,
-    net::StreamSocket* socket) {
-  if (result != net::OK) {
-    callback.Run(result, NULL);
-    return;
-  }
-  AdbClientSocket::HttpQuery(socket, request, callback);
-}
-
-AndroidDeviceManager::DeviceProvider::DeviceProvider() {
-}
-
-AndroidDeviceManager::DeviceProvider::~DeviceProvider() {
-}
-
-// static
-scoped_refptr<AndroidDeviceManager::DeviceProvider>
-    AndroidDeviceManager::GetUsbDeviceProvider(Profile* profile) {
-  return new UsbDeviceProvider(profile);
-}
-
-// static
-scoped_refptr<AndroidDeviceManager::DeviceProvider>
-    AndroidDeviceManager::GetAdbDeviceProvider() {
-  return new AdbDeviceProvider();
-}
-
-
-#if defined(DEBUG_DEVTOOLS)
-class SelfAsDevice : public AndroidDeviceManager::Device {
- public:
-  SelfAsDevice();
-  virtual void RunCommand(const std::string& command,
-                          const CommandCallback& callback) OVERRIDE;
-  virtual void OpenSocket(const std::string& socket_name,
-                          const SocketCallback& callback) OVERRIDE;
- private:
-  void RunCommandCallback(const CommandCallback& callback,
-                          const std::string& response,
-                          int result);
-
-  void RunSocketCallback(const SocketCallback& callback,
-                         net::StreamSocket* socket,
-                         int result);
-  virtual ~SelfAsDevice() {}
-};
-
-SelfAsDevice::SelfAsDevice()
-    : Device("local", true)
-{}
-
-void SelfAsDevice::RunCommandCallback(const CommandCallback& callback,
-                                      const std::string& response,
-                                      int result) {
-  callback.Run(result, response);
-}
-
-void SelfAsDevice::RunSocketCallback(const SocketCallback& callback,
-                                     net::StreamSocket* socket,
-                                     int result) {
-  callback.Run(result, socket);
-}
-
-void SelfAsDevice::RunCommand(const std::string& command,
-                              const CommandCallback& callback) {
-  DCHECK(CalledOnValidThread());
-  std::string response;
-  if (command == kDeviceModelCommand) {
-    response = kLocalChrome;
-  } else if (command == kOpenedUnixSocketsCommand) {
-    response = base::StringPrintf(kOpenedUnixSocketsResponse,
-                                  kRemoteDebuggingSocket);
-  }
-
-  base::MessageLoop::current()->PostTask(FROM_HERE,
-                base::Bind(&SelfAsDevice::RunCommandCallback, this, callback,
-                           response, 0));
-}
-
-void SelfAsDevice::OpenSocket(const std::string& socket_name,
-                              const SocketCallback& callback) {
-  DCHECK(CalledOnValidThread());
-  // Use plain socket for remote debugging and port forwarding on Desktop
-  // (debugging purposes).
-  net::IPAddressNumber ip_number;
-  net::ParseIPLiteralToNumber(kLocalhost, &ip_number);
-
-  int port = 0;
-  if (socket_name == kRemoteDebuggingSocket)
-    port = kLocalDebuggingPort;
-  else
-    base::StringToInt(socket_name, &port);
-
-  net::AddressList address_list =
-      net::AddressList::CreateFromIPAddress(ip_number, port);
-  net::TCPClientSocket* socket = new net::TCPClientSocket(
-      address_list, NULL, net::NetLog::Source());
-  socket->Connect(base::Bind(&SelfAsDevice::RunSocketCallback, this, callback,
-                             socket));
-}
-
-class SelfAsDeviceProvider : public AndroidDeviceManager::DeviceProvider {
- public:
-  virtual void QueryDevices(const QueryDevicesCallback& callback) OVERRIDE;
- private:
-  virtual ~SelfAsDeviceProvider(){}
-};
-
-void SelfAsDeviceProvider::QueryDevices(const QueryDevicesCallback& callback) {
-  AndroidDeviceManager::Devices result;
-  result.push_back(new SelfAsDevice());
-  callback.Run(result);
-}
-
-// static
-scoped_refptr<AndroidDeviceManager::DeviceProvider>
-AndroidDeviceManager::GetSelfAsDeviceProvider() {
-  return new SelfAsDeviceProvider();
-}
-#endif
-
-// static
-scoped_refptr<AndroidDeviceManager> AndroidDeviceManager::Create() {
-  return new AndroidDeviceManager();
-}
-
-void AndroidDeviceManager::QueryDevices(
-    const DeviceProviders& providers,
-    const QueryDevicesCallback& callback) {
-  DCHECK(CalledOnValidThread());
-  stopped_ = false;
-  Devices empty;
-  QueryNextProvider(callback, providers, empty, empty);
-}
-
-void AndroidDeviceManager::Stop() {
-  DCHECK(CalledOnValidThread());
-  stopped_ = true;
-  devices_.clear();
-}
-
-bool AndroidDeviceManager::IsConnected(const std::string& serial) {
-  DCHECK(CalledOnValidThread());
-  Device* device = FindDevice(serial);
-  return device && device->is_connected();
-}
-
-void AndroidDeviceManager::RunCommand(
-    const std::string& serial,
-    const std::string& command,
-    const CommandCallback& callback) {
-  DCHECK(CalledOnValidThread());
-  Device* device = FindDevice(serial);
-  if (device)
-    device->RunCommand(command, callback);
-  else
-    callback.Run(net::ERR_CONNECTION_FAILED, std::string());
-}
-
-void AndroidDeviceManager::OpenSocket(
-    const std::string& serial,
-    const std::string& socket_name,
-    const SocketCallback& callback) {
-  DCHECK(CalledOnValidThread());
-  Device* device = FindDevice(serial);
-  if (device)
-    device->OpenSocket(socket_name, callback);
-  else
-    callback.Run(net::ERR_CONNECTION_FAILED, NULL);
-}
-
-void AndroidDeviceManager::HttpQuery(
-    const std::string& serial,
-    const std::string& la_name,
-    const std::string& request,
-    const CommandCallback& callback) {
-  DCHECK(CalledOnValidThread());
-  Device* device = FindDevice(serial);
-  if (device)
-    device->HttpQuery(la_name, request, callback);
-  else
-    callback.Run(net::ERR_CONNECTION_FAILED, std::string());
-}
-
-void AndroidDeviceManager::HttpUpgrade(
-    const std::string& serial,
-    const std::string& la_name,
-    const std::string& request,
-    const SocketCallback& callback) {
-  DCHECK(CalledOnValidThread());
-  Device* device = FindDevice(serial);
-  if (device)
-    device->HttpUpgrade(la_name, request, callback);
-  else
-    callback.Run(net::ERR_CONNECTION_FAILED, NULL);
-}
-
-AndroidDeviceManager::AndroidDeviceManager()
-    : stopped_(false) {
-}
-
-AndroidDeviceManager::~AndroidDeviceManager() {
-}
-
-void AndroidDeviceManager::QueryNextProvider(
-    const QueryDevicesCallback& callback,
-    const DeviceProviders& providers,
-    const Devices& total_devices,
-    const Devices& new_devices) {
-  DCHECK(CalledOnValidThread());
-
-  if (stopped_)
-    return;
-
-  Devices more_devices(total_devices);
-  more_devices.insert(
-      more_devices.end(), new_devices.begin(), new_devices.end());
-
-  if (providers.empty()) {
-    std::vector<std::string> serials;
-    devices_.clear();
-    for (Devices::const_iterator it = more_devices.begin();
-        it != more_devices.end(); ++it) {
-      devices_[(*it)->serial()] = *it;
-      serials.push_back((*it)->serial());
-    }
-    callback.Run(serials);
-    return;
-  }
-
-  scoped_refptr<DeviceProvider> current_provider = providers.back();
-  DeviceProviders less_providers = providers;
-  less_providers.pop_back();
-  current_provider->QueryDevices(
-      base::Bind(&AndroidDeviceManager::QueryNextProvider,
-                 this, callback, less_providers, more_devices));
-}
-
-AndroidDeviceManager::Device*
-AndroidDeviceManager::FindDevice(const std::string& serial) {
-  DCHECK(CalledOnValidThread());
-  DeviceMap::const_iterator it = devices_.find(serial);
-  if (it == devices_.end())
-    return NULL;
-  return (*it).second.get();
-}
diff --git a/chrome/browser/devtools/android_device.h b/chrome/browser/devtools/android_device.h
deleted file mode 100644
index 6e642d4..0000000
--- a/chrome/browser/devtools/android_device.h
+++ /dev/null
@@ -1,150 +0,0 @@
-// Copyright 2013 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 CHROME_BROWSER_DEVTOOLS_ANDROID_DEVICE_H_
-#define CHROME_BROWSER_DEVTOOLS_ANDROID_DEVICE_H_
-
-#include <vector>
-
-#include "base/memory/ref_counted.h"
-#include "base/threading/non_thread_safe.h"
-#include "chrome/browser/devtools/adb/android_usb_device.h"
-#include "chrome/browser/profiles/profile.h"
-#include "content/public/browser/browser_thread.h"
-#include "crypto/rsa_private_key.h"
-#include "net/socket/stream_socket.h"
-
-class AndroidDeviceManager : public base::RefCounted<AndroidDeviceManager>,
-                             public base::NonThreadSafe {
- public:
-  typedef base::Callback<void(int, const std::string&)> CommandCallback;
-  typedef base::Callback<void(int result, net::StreamSocket*)> SocketCallback;
-
-  class Device : public base::RefCounted<Device>,
-                 public base::NonThreadSafe {
-   protected:
-    friend class AndroidDeviceManager;
-
-    typedef AndroidDeviceManager::CommandCallback CommandCallback;
-    typedef AndroidDeviceManager::SocketCallback SocketCallback;
-
-    Device(const std::string& serial, bool is_connected);
-
-    virtual void RunCommand(const std::string& command,
-                            const CommandCallback& callback) = 0;
-    virtual void OpenSocket(const std::string& socket_name,
-                            const SocketCallback& callback) = 0;
-    virtual void HttpQuery(const std::string& la_name,
-                           const std::string& request,
-                           const CommandCallback& callback);
-    void HttpUpgrade(const std::string& la_name,
-                     const std::string& request,
-                     const SocketCallback& callback);
-
-    std::string serial() { return serial_; }
-    bool is_connected() { return is_connected_; }
-
-    friend class base::RefCounted<Device>;
-    virtual ~Device();
-
-   private:
-    void OnHttpSocketOpened(const std::string& request,
-                            const CommandCallback& callback,
-                            int result,
-                            net::StreamSocket* socket);
-    void OnHttpSocketOpened2(const std::string& request,
-                             const SocketCallback& callback,
-                             int result,
-                             net::StreamSocket* socket);
-
-    const std::string serial_;
-    const bool is_connected_;
-
-    DISALLOW_COPY_AND_ASSIGN(Device);
-  };
-
-  typedef std::vector<scoped_refptr<Device> > Devices;
-
-  class DeviceProvider
-      : public base::RefCountedThreadSafe<
-            DeviceProvider,
-            content::BrowserThread::DeleteOnUIThread> {
-   protected:
-    friend class AndroidDeviceManager;
-
-    typedef base::Callback<void(const Devices&)> QueryDevicesCallback;
-
-    virtual void QueryDevices(const QueryDevicesCallback& callback) = 0;
-
-   protected:
-    friend struct
-        content::BrowserThread::DeleteOnThread<content::BrowserThread::UI>;
-    friend class base::DeleteHelper<DeviceProvider>;
-
-    DeviceProvider();
-    virtual ~DeviceProvider();
-  };
-
- public:
-  static scoped_refptr<DeviceProvider> GetAdbDeviceProvider();
-  static scoped_refptr<DeviceProvider> GetUsbDeviceProvider(Profile* profile);
-#if defined(DEBUG_DEVTOOLS)
-  static scoped_refptr<DeviceProvider> GetSelfAsDeviceProvider();
-#endif
-  // Implemented in browser_tests.
-  static scoped_refptr<DeviceProvider> GetMockDeviceProviderForTest();
-
-  static scoped_refptr<AndroidDeviceManager> Create();
-
-  typedef std::vector<scoped_refptr<DeviceProvider> > DeviceProviders;
-  typedef base::Callback<void (const std::vector<std::string>&)>
-      QueryDevicesCallback;
-
-  void QueryDevices(const DeviceProviders& providers,
-                    const QueryDevicesCallback& callback);
-
-  void Stop();
-
-  bool IsConnected(const std::string& serial);
-
-  void RunCommand(const std::string& serial,
-                  const std::string& command,
-                  const CommandCallback& callback);
-
-  void OpenSocket(const std::string& serial,
-                  const std::string& socket_name,
-                  const SocketCallback& callback);
-
-  void HttpQuery(const std::string& serial,
-                 const std::string& la_name,
-                 const std::string& request,
-                 const CommandCallback& callback);
-
-  void HttpUpgrade(const std::string& serial,
-                   const std::string& la_name,
-                   const std::string& request,
-                   const SocketCallback& callback);
-
- private:
-  AndroidDeviceManager();
-
-  friend class base::RefCounted<AndroidDeviceManager>;
-
-  virtual ~AndroidDeviceManager();
-
-  void QueryNextProvider(
-      const QueryDevicesCallback& callback,
-      const DeviceProviders& providers,
-      const Devices& total_devices,
-      const Devices& new_devices);
-
-  Device* FindDevice(const std::string& serial);
-
-  typedef std::map<std::string, scoped_refptr<Device> > DeviceMap;
-  DeviceMap devices_;
-
-  bool stopped_;
-};
-
-#endif  // CHROME_BROWSER_DEVTOOLS_ANDROID_DEVICE_H_
diff --git a/chrome/browser/devtools/browser_list_tabcontents_provider.cc b/chrome/browser/devtools/browser_list_tabcontents_provider.cc
index 30ea6ab..5d98f6c 100644
--- a/chrome/browser/devtools/browser_list_tabcontents_provider.cc
+++ b/chrome/browser/devtools/browser_list_tabcontents_provider.cc
@@ -28,9 +28,25 @@
 using content::RenderViewHost;
 using content::WebContents;
 
+namespace {
+
+const int kMinTetheringPort = 9333;
+const int kMaxTetheringPort = 9444;
+
+base::LazyInstance<bool>::Leaky g_tethering_enabled = LAZY_INSTANCE_INITIALIZER;
+
+}
+
+// static
+void BrowserListTabContentsProvider::EnableTethering() {
+  g_tethering_enabled.Get() = true;
+}
+
 BrowserListTabContentsProvider::BrowserListTabContentsProvider(
     chrome::HostDesktopType host_desktop_type)
-    : host_desktop_type_(host_desktop_type) {
+    : host_desktop_type_(host_desktop_type),
+      last_tethering_port_(kMinTetheringPort) {
+  g_tethering_enabled.Get() = false;
 }
 
 BrowserListTabContentsProvider::~BrowserListTabContentsProvider() {
@@ -115,25 +131,17 @@
       *reinterpret_cast<DevToolsTargetImpl::Callback*>(&callback));
 }
 
-#if defined(DEBUG_DEVTOOLS)
-static int g_last_tethering_port_ = 9333;
-
 scoped_ptr<net::StreamListenSocket>
 BrowserListTabContentsProvider::CreateSocketForTethering(
     net::StreamListenSocket::Delegate* delegate,
     std::string* name) {
-  if (g_last_tethering_port_ == 9444)
-    g_last_tethering_port_ = 9333;
-  int port = ++g_last_tethering_port_;
+  if (!g_tethering_enabled.Get())
+    return scoped_ptr<net::StreamListenSocket>();
+
+  if (last_tethering_port_ == kMaxTetheringPort)
+    last_tethering_port_ = kMinTetheringPort;
+  int port = ++last_tethering_port_;
   *name = base::IntToString(port);
   return net::TCPListenSocket::CreateAndListen("127.0.0.1", port, delegate)
       .PassAs<net::StreamListenSocket>();
 }
-#else
-scoped_ptr<net::StreamListenSocket>
-BrowserListTabContentsProvider::CreateSocketForTethering(
-    net::StreamListenSocket::Delegate* delegate,
-    std::string* name) {
-  return scoped_ptr<net::StreamListenSocket>();
-}
-#endif  // defined(DEBUG_DEVTOOLS)
diff --git a/chrome/browser/devtools/browser_list_tabcontents_provider.h b/chrome/browser/devtools/browser_list_tabcontents_provider.h
index 3f557dd..3296385 100644
--- a/chrome/browser/devtools/browser_list_tabcontents_provider.h
+++ b/chrome/browser/devtools/browser_list_tabcontents_provider.h
@@ -16,6 +16,8 @@
 class BrowserListTabContentsProvider
     : public content::DevToolsHttpHandlerDelegate {
  public:
+  static void EnableTethering();
+
   explicit BrowserListTabContentsProvider(
       chrome::HostDesktopType host_desktop_type);
   virtual ~BrowserListTabContentsProvider();
@@ -34,6 +36,7 @@
 
  private:
   chrome::HostDesktopType host_desktop_type_;
+  int last_tethering_port_;
   DISALLOW_COPY_AND_ASSIGN(BrowserListTabContentsProvider);
 };
 
diff --git a/chrome/browser/devtools/device/adb/adb_client_socket.cc b/chrome/browser/devtools/device/adb/adb_client_socket.cc
new file mode 100644
index 0000000..70b19bd
--- /dev/null
+++ b/chrome/browser/devtools/device/adb/adb_client_socket.cc
@@ -0,0 +1,436 @@
+// 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.
+
+#include "chrome/browser/devtools/device/adb/adb_client_socket.h"
+
+#include "base/bind.h"
+#include "base/compiler_specific.h"
+#include "base/strings/string_number_conversions.h"
+#include "base/strings/string_util.h"
+#include "base/strings/stringprintf.h"
+#include "net/base/address_list.h"
+#include "net/base/completion_callback.h"
+#include "net/base/net_errors.h"
+#include "net/base/net_util.h"
+#include "net/socket/tcp_client_socket.h"
+
+namespace {
+
+const int kBufferSize = 16 * 1024;
+const char kOkayResponse[] = "OKAY";
+const char kHostTransportCommand[] = "host:transport:%s";
+const char kLocalhost[] = "127.0.0.1";
+
+typedef base::Callback<void(int, const std::string&)> CommandCallback;
+typedef base::Callback<void(int, net::StreamSocket*)> SocketCallback;
+
+std::string EncodeMessage(const std::string& message) {
+  static const char kHexChars[] = "0123456789ABCDEF";
+
+  size_t length = message.length();
+  std::string result(4, '\0');
+  char b = reinterpret_cast<const char*>(&length)[1];
+  result[0] = kHexChars[(b >> 4) & 0xf];
+  result[1] = kHexChars[b & 0xf];
+  b = reinterpret_cast<const char*>(&length)[0];
+  result[2] = kHexChars[(b >> 4) & 0xf];
+  result[3] = kHexChars[b & 0xf];
+  return result + message;
+}
+
+class AdbTransportSocket : public AdbClientSocket {
+ public:
+  AdbTransportSocket(int port,
+                     const std::string& serial,
+                     const std::string& socket_name,
+                     const SocketCallback& callback)
+    : AdbClientSocket(port),
+      serial_(serial),
+      socket_name_(socket_name),
+      callback_(callback) {
+    Connect(base::Bind(&AdbTransportSocket::OnConnected,
+                       base::Unretained(this)));
+  }
+
+ private:
+  ~AdbTransportSocket() {}
+
+  void OnConnected(int result) {
+    if (!CheckNetResultOrDie(result))
+      return;
+    SendCommand(base::StringPrintf(kHostTransportCommand, serial_.c_str()),
+        true, base::Bind(&AdbTransportSocket::SendLocalAbstract,
+                         base::Unretained(this)));
+  }
+
+  void SendLocalAbstract(int result, const std::string& response) {
+    if (!CheckNetResultOrDie(result))
+      return;
+    SendCommand(socket_name_, true,
+                base::Bind(&AdbTransportSocket::OnSocketAvailable,
+                           base::Unretained(this)));
+  }
+
+  void OnSocketAvailable(int result, const std::string& response) {
+    if (!CheckNetResultOrDie(result))
+      return;
+    callback_.Run(net::OK, socket_.release());
+    delete this;
+  }
+
+  bool CheckNetResultOrDie(int result) {
+    if (result >= 0)
+      return true;
+    callback_.Run(result, NULL);
+    delete this;
+    return false;
+  }
+
+  std::string serial_;
+  std::string socket_name_;
+  SocketCallback callback_;
+};
+
+class HttpOverAdbSocket {
+ public:
+  HttpOverAdbSocket(net::StreamSocket* socket,
+                    const std::string& request,
+                    const CommandCallback& callback)
+    : socket_(socket),
+      command_callback_(callback),
+      body_pos_(0) {
+    SendRequest(request);
+  }
+
+  HttpOverAdbSocket(net::StreamSocket* socket,
+                    const std::string& request,
+                    const SocketCallback& callback)
+    : socket_(socket),
+      socket_callback_(callback),
+      body_pos_(0) {
+    SendRequest(request);
+  }
+
+ private:
+  ~HttpOverAdbSocket() {
+  }
+
+  void SendRequest(const std::string& request) {
+    scoped_refptr<net::StringIOBuffer> request_buffer =
+        new net::StringIOBuffer(request);
+
+    int result = socket_->Write(
+        request_buffer.get(),
+        request_buffer->size(),
+        base::Bind(&HttpOverAdbSocket::ReadResponse, base::Unretained(this)));
+    if (result != net::ERR_IO_PENDING)
+      ReadResponse(result);
+  }
+
+  void ReadResponse(int result) {
+    if (!CheckNetResultOrDie(result))
+      return;
+    scoped_refptr<net::IOBuffer> response_buffer =
+        new net::IOBuffer(kBufferSize);
+
+    result = socket_->Read(response_buffer.get(),
+                           kBufferSize,
+                           base::Bind(&HttpOverAdbSocket::OnResponseData,
+                                      base::Unretained(this),
+                                      response_buffer,
+                                      -1));
+    if (result != net::ERR_IO_PENDING)
+      OnResponseData(response_buffer, -1, result);
+  }
+
+  void OnResponseData(scoped_refptr<net::IOBuffer> response_buffer,
+                      int bytes_total,
+                      int result) {
+    if (!CheckNetResultOrDie(result))
+      return;
+    if (result == 0) {
+      CheckNetResultOrDie(net::ERR_CONNECTION_CLOSED);
+      return;
+    }
+
+    response_ += std::string(response_buffer->data(), result);
+    int expected_length = 0;
+    if (bytes_total < 0) {
+      // TODO(kaznacheev): Use net::HttpResponseHeader to parse the header.
+      size_t content_pos = response_.find("Content-Length:");
+      if (content_pos != std::string::npos) {
+        size_t endline_pos = response_.find("\n", content_pos);
+        if (endline_pos != std::string::npos) {
+          std::string len = response_.substr(content_pos + 15,
+                                             endline_pos - content_pos - 15);
+          base::TrimWhitespace(len, base::TRIM_ALL, &len);
+          if (!base::StringToInt(len, &expected_length)) {
+            CheckNetResultOrDie(net::ERR_FAILED);
+            return;
+          }
+        }
+      }
+
+      body_pos_ = response_.find("\r\n\r\n");
+      if (body_pos_ != std::string::npos) {
+        body_pos_ += 4;
+        bytes_total = body_pos_ + expected_length;
+      }
+    }
+
+    if (bytes_total == static_cast<int>(response_.length())) {
+      if (!command_callback_.is_null())
+        command_callback_.Run(net::OK, response_.substr(body_pos_));
+      else
+        socket_callback_.Run(net::OK, socket_.release());
+      delete this;
+      return;
+    }
+
+    result = socket_->Read(response_buffer.get(),
+                           kBufferSize,
+                           base::Bind(&HttpOverAdbSocket::OnResponseData,
+                                      base::Unretained(this),
+                                      response_buffer,
+                                      bytes_total));
+    if (result != net::ERR_IO_PENDING)
+      OnResponseData(response_buffer, bytes_total, result);
+  }
+
+  bool CheckNetResultOrDie(int result) {
+    if (result >= 0)
+      return true;
+    if (!command_callback_.is_null())
+      command_callback_.Run(result, std::string());
+    else
+      socket_callback_.Run(result, NULL);
+    delete this;
+    return false;
+  }
+
+  scoped_ptr<net::StreamSocket> socket_;
+  std::string response_;
+  CommandCallback command_callback_;
+  SocketCallback socket_callback_;
+  size_t body_pos_;
+};
+
+class AdbQuerySocket : AdbClientSocket {
+ public:
+  AdbQuerySocket(int port,
+                 const std::string& query,
+                 const CommandCallback& callback)
+      : AdbClientSocket(port),
+        current_query_(0),
+        callback_(callback) {
+    if (Tokenize(query, "|", &queries_) == 0) {
+      CheckNetResultOrDie(net::ERR_INVALID_ARGUMENT);
+      return;
+    }
+    Connect(base::Bind(&AdbQuerySocket::SendNextQuery,
+                       base::Unretained(this)));
+  }
+
+ private:
+  ~AdbQuerySocket() {
+  }
+
+  void SendNextQuery(int result) {
+    if (!CheckNetResultOrDie(result))
+      return;
+    std::string query = queries_[current_query_];
+    if (query.length() > 0xFFFF) {
+      CheckNetResultOrDie(net::ERR_MSG_TOO_BIG);
+      return;
+    }
+    bool is_void = current_query_ < queries_.size() - 1;
+    SendCommand(query, is_void,
+        base::Bind(&AdbQuerySocket::OnResponse, base::Unretained(this)));
+  }
+
+  void OnResponse(int result, const std::string& response) {
+    if (++current_query_ < queries_.size()) {
+      SendNextQuery(net::OK);
+    } else {
+      callback_.Run(result, response);
+      delete this;
+    }
+  }
+
+  bool CheckNetResultOrDie(int result) {
+    if (result >= 0)
+      return true;
+    callback_.Run(result, std::string());
+    delete this;
+    return false;
+  }
+
+  std::vector<std::string> queries_;
+  size_t current_query_;
+  CommandCallback callback_;
+};
+
+}  // namespace
+
+// static
+void AdbClientSocket::AdbQuery(int port,
+                               const std::string& query,
+                               const CommandCallback& callback) {
+  new AdbQuerySocket(port, query, callback);
+}
+
+// static
+void AdbClientSocket::TransportQuery(int port,
+                                     const std::string& serial,
+                                     const std::string& socket_name,
+                                     const SocketCallback& callback) {
+  new AdbTransportSocket(port, serial, socket_name, callback);
+}
+
+// static
+void AdbClientSocket::HttpQuery(net::StreamSocket* socket,
+                                const std::string& request_path,
+                                const CommandCallback& callback) {
+  new HttpOverAdbSocket(socket, request_path, callback);
+}
+
+// static
+void AdbClientSocket::HttpQuery(net::StreamSocket* socket,
+                                const std::string& request_path,
+                                const SocketCallback& callback) {
+  new HttpOverAdbSocket(socket, request_path, callback);
+}
+
+AdbClientSocket::AdbClientSocket(int port)
+    : host_(kLocalhost), port_(port) {
+}
+
+AdbClientSocket::~AdbClientSocket() {
+}
+
+void AdbClientSocket::Connect(const net::CompletionCallback& callback) {
+  net::IPAddressNumber ip_number;
+  if (!net::ParseIPLiteralToNumber(host_, &ip_number)) {
+    callback.Run(net::ERR_FAILED);
+    return;
+  }
+
+  net::AddressList address_list =
+      net::AddressList::CreateFromIPAddress(ip_number, port_);
+  socket_.reset(new net::TCPClientSocket(address_list, NULL,
+                                         net::NetLog::Source()));
+  int result = socket_->Connect(callback);
+  if (result != net::ERR_IO_PENDING)
+    callback.Run(result);
+}
+
+void AdbClientSocket::SendCommand(const std::string& command,
+                                  bool is_void,
+                                  const CommandCallback& callback) {
+  scoped_refptr<net::StringIOBuffer> request_buffer =
+      new net::StringIOBuffer(EncodeMessage(command));
+  int result = socket_->Write(request_buffer.get(),
+                              request_buffer->size(),
+                              base::Bind(&AdbClientSocket::ReadResponse,
+                                         base::Unretained(this),
+                                         callback,
+                                         is_void));
+  if (result != net::ERR_IO_PENDING)
+    ReadResponse(callback, is_void, result);
+}
+
+void AdbClientSocket::ReadResponse(const CommandCallback& callback,
+                                   bool is_void,
+                                   int result) {
+  if (result < 0) {
+    callback.Run(result, "IO error");
+    return;
+  }
+  scoped_refptr<net::IOBuffer> response_buffer =
+      new net::IOBuffer(kBufferSize);
+  result = socket_->Read(response_buffer.get(),
+                         kBufferSize,
+                         base::Bind(&AdbClientSocket::OnResponseHeader,
+                                    base::Unretained(this),
+                                    callback,
+                                    is_void,
+                                    response_buffer));
+  if (result != net::ERR_IO_PENDING)
+    OnResponseHeader(callback, is_void, response_buffer, result);
+}
+
+void AdbClientSocket::OnResponseHeader(
+    const CommandCallback& callback,
+    bool is_void,
+    scoped_refptr<net::IOBuffer> response_buffer,
+    int result) {
+  if (result <= 0) {
+    callback.Run(result == 0 ? net::ERR_CONNECTION_CLOSED : result,
+                 "IO error");
+    return;
+  }
+
+  std::string data = std::string(response_buffer->data(), result);
+  if (result < 4) {
+    callback.Run(net::ERR_FAILED, "Response is too short: " + data);
+    return;
+  }
+
+  std::string status = data.substr(0, 4);
+  if (status != kOkayResponse) {
+    callback.Run(net::ERR_FAILED, data);
+    return;
+  }
+
+  data = data.substr(4);
+
+  if (!is_void) {
+    int payload_length = 0;
+    int bytes_left = -1;
+    if (data.length() >= 4 &&
+        base::HexStringToInt(data.substr(0, 4), &payload_length)) {
+      data = data.substr(4);
+      bytes_left = payload_length - result + 8;
+    } else {
+      bytes_left = -1;
+    }
+    OnResponseData(callback, data, response_buffer, bytes_left, 0);
+  } else {
+    callback.Run(net::OK, data);
+  }
+}
+
+void AdbClientSocket::OnResponseData(
+    const CommandCallback& callback,
+    const std::string& response,
+    scoped_refptr<net::IOBuffer> response_buffer,
+    int bytes_left,
+    int result) {
+  if (result < 0) {
+    callback.Run(result, "IO error");
+    return;
+  }
+
+  bytes_left -= result;
+  std::string new_response =
+      response + std::string(response_buffer->data(), result);
+  if (bytes_left == 0) {
+    callback.Run(net::OK, new_response);
+    return;
+  }
+
+  // Read tail
+  result = socket_->Read(response_buffer.get(),
+                         kBufferSize,
+                         base::Bind(&AdbClientSocket::OnResponseData,
+                                    base::Unretained(this),
+                                    callback,
+                                    new_response,
+                                    response_buffer,
+                                    bytes_left));
+  if (result > 0)
+    OnResponseData(callback, new_response, response_buffer, bytes_left, result);
+  else if (result != net::ERR_IO_PENDING)
+    callback.Run(net::OK, new_response);
+}
diff --git a/chrome/browser/devtools/device/adb/adb_client_socket.h b/chrome/browser/devtools/device/adb/adb_client_socket.h
new file mode 100644
index 0000000..d8207e5
--- /dev/null
+++ b/chrome/browser/devtools/device/adb/adb_client_socket.h
@@ -0,0 +1,68 @@
+// 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.
+
+#ifndef CHROME_BROWSER_DEVTOOLS_DEVICE_ADB_ADB_CLIENT_SOCKET_H_
+#define CHROME_BROWSER_DEVTOOLS_DEVICE_ADB_ADB_CLIENT_SOCKET_H_
+
+#include "base/callback.h"
+#include "net/base/io_buffer.h"
+#include "net/socket/stream_socket.h"
+
+class AdbClientSocket {
+ public:
+  typedef base::Callback<void(int, const std::string&)> CommandCallback;
+  typedef base::Callback<void(int result,
+                              net::StreamSocket*)> SocketCallback;
+
+  static void AdbQuery(int port,
+                       const std::string& query,
+                       const CommandCallback& callback);
+
+
+  static void HttpQuery(net::StreamSocket* socket,
+                        const std::string& request,
+                        const CommandCallback& callback);
+
+  static void HttpQuery(net::StreamSocket* socket,
+                        const std::string& request,
+                        const SocketCallback& callback);
+
+  static void TransportQuery(int port,
+                             const std::string& serial,
+                             const std::string& socket_name,
+                             const SocketCallback& callback);
+
+  explicit AdbClientSocket(int port);
+  ~AdbClientSocket();
+
+ protected:
+  void Connect(const net::CompletionCallback& callback);
+
+  void SendCommand(const std::string& command,
+                   bool is_void,
+                   const CommandCallback& callback);
+
+  scoped_ptr<net::StreamSocket> socket_;
+
+ private:
+  void ReadResponse(const CommandCallback& callback, bool is_void, int result);
+
+  void OnResponseHeader(const CommandCallback& callback,
+                        bool is_void,
+                        scoped_refptr<net::IOBuffer> response_buffer,
+                        int result);
+
+  void OnResponseData(const CommandCallback& callback,
+                      const std::string& response,
+                      scoped_refptr<net::IOBuffer> response_buffer,
+                      int bytes_left,
+                      int result);
+
+  std::string host_;
+  int port_;
+
+  DISALLOW_COPY_AND_ASSIGN(AdbClientSocket);
+};
+
+#endif  // CHROME_BROWSER_DEVTOOLS_DEVICE_ADB_ADB_CLIENT_SOCKET_H_
diff --git a/chrome/browser/devtools/device/adb/adb_client_socket_browsertest.cc b/chrome/browser/devtools/device/adb/adb_client_socket_browsertest.cc
new file mode 100644
index 0000000..219219d
--- /dev/null
+++ b/chrome/browser/devtools/device/adb/adb_client_socket_browsertest.cc
@@ -0,0 +1,422 @@
+// 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.
+
+#include "base/strings/string_number_conversions.h"
+#include "chrome/browser/devtools/device/devtools_android_bridge.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/test/base/in_process_browser_test.h"
+#include "content/public/browser/browser_thread.h"
+#include "content/public/test/browser_test.h"
+#include "content/public/test/test_utils.h"
+#include "net/base/host_port_pair.h"
+#include "net/base/io_buffer.h"
+#include "net/base/ip_endpoint.h"
+#include "net/base/net_errors.h"
+#include "net/base/net_log.h"
+#include "net/socket/stream_socket.h"
+#include "net/socket/tcp_server_socket.h"
+
+const char kOpenedUnixSocketsCommand[] = "shell:cat /proc/net/unix";
+const char kDeviceModelCommand[] = "shell:getprop ro.product.model";
+const char kDumpsysCommand[] = "shell:dumpsys window policy";
+const char kListProcessesCommand[] = "shell:ps";
+const char kInstalledChromePackagesCommand[] = "shell:pm list packages";
+const char kDeviceModel[] = "Nexus 8";
+
+const char kSampleOpenedUnixSocketsWithoutBrowsers[] =
+    "Num       RefCount Protocol Flags    Type St Inode Path\n"
+    "00000000: 00000004 00000000"
+    " 00000000 0002 01  3328 /dev/socket/wpa_wlan0\n"
+    "00000000: 00000002 00000000"
+    " 00010000 0001 01  5394 /dev/socket/vold\n";
+
+const char kSampleDumpsys[] =
+    "WINDOW MANAGER POLICY STATE (dumpsys window policy)\r\n"
+    "    mStable=(0,50)-(720,1184)\r\n";
+
+const char kSampleListProcesses[] =
+    "USER     PID   PPID  VSIZE  RSS     WCHAN    PC         NAME\n"
+    "root      1     0     688    508   ffffffff 00000000 S /init\n";
+
+const char kSampleListPackages[] = "package:com.example.app";
+
+static const int kBufferSize = 16*1024;
+static const int kAdbPort = 5037;
+
+static const int kAdbMessageHeaderSize = 4;
+
+// This is single connection server which listens on specified port and
+// simplifies asynchronous IO.
+// To write custom server, extend this class and implement TryProcessData
+// method which is invoked everytime data arrives. In case of successful data
+// processing(e.g. enough data collected already to parse client reply/request)
+// return amount of bytes processed to throw them away from buffer
+// To send data, SendData method should be used. This method is non-blocking
+// and appends data to be sent to internal buffer.
+// Since all calls are non-blocking and no callbacks are given, internal
+// overflows may occur in case too heavy traffic.
+// In case of heavy traffic performance may suffer because of memcpy calls.
+class SingleConnectionServer {
+ public:
+  SingleConnectionServer(net::IPEndPoint endpoint, int buffer_size);
+  virtual ~SingleConnectionServer();
+
+ protected:
+  virtual int TryProcessData(const char* data, int size) = 0;
+  void SendData(const char* data, int size);
+
+private:
+  void AcceptConnection();
+  void OnAccepted(int result);
+
+  void ReadData();
+  void OnDataRead(int count);
+
+  void WriteData();
+  void OnDataWritten(int count);
+
+private:
+  int bytes_to_write_;
+  scoped_ptr<net::TCPServerSocket> server_socket_;
+  scoped_ptr<net::StreamSocket> client_socket_;
+  scoped_refptr<net::GrowableIOBuffer> input_buffer_;
+  scoped_refptr<net::GrowableIOBuffer> output_buffer_;
+
+  DISALLOW_COPY_AND_ASSIGN(SingleConnectionServer);
+};
+
+SingleConnectionServer::SingleConnectionServer(net::IPEndPoint endpoint,
+                                               int buffer_size)
+    : bytes_to_write_(0) {
+  CHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
+
+  input_buffer_ = new net::GrowableIOBuffer();
+  input_buffer_->SetCapacity(buffer_size);
+
+  output_buffer_ = new net::GrowableIOBuffer();
+
+  server_socket_.reset(new net::TCPServerSocket(NULL, net::NetLog::Source()));
+  server_socket_->Listen(endpoint, 1);
+
+  AcceptConnection();
+}
+
+SingleConnectionServer::~SingleConnectionServer() {
+  CHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
+
+  server_socket_.reset();
+
+  if (client_socket_) {
+    client_socket_->Disconnect();
+    client_socket_.reset();
+  }
+}
+
+void SingleConnectionServer::SendData(const char* data, int size) {
+  CHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
+
+  if ((output_buffer_->offset() + bytes_to_write_ + size) >
+      output_buffer_->capacity()) {
+    // If not enough space without relocation
+    if (output_buffer_->capacity() < (bytes_to_write_ + size)) {
+      // If even buffer is not enough
+      int new_size = std::max(output_buffer_->capacity() * 2, size * 2);
+      output_buffer_->SetCapacity(new_size);
+    }
+    memmove(output_buffer_->StartOfBuffer(),
+            output_buffer_->data(),
+            bytes_to_write_);
+    output_buffer_->set_offset(0);
+  }
+
+  memcpy(output_buffer_->data() + bytes_to_write_, data, size);
+  bytes_to_write_ += size;
+
+  if (bytes_to_write_ == size)
+    // If write loop wasn't yet started, then start it
+    WriteData();
+}
+
+void SingleConnectionServer::AcceptConnection() {
+  if (client_socket_) {
+    client_socket_->Disconnect();
+    client_socket_.reset();
+  }
+
+  int accept_result = server_socket_->Accept(&client_socket_,
+      base::Bind(&SingleConnectionServer::OnAccepted, base::Unretained(this)));
+
+  if (accept_result != net::ERR_IO_PENDING)
+    content::BrowserThread::PostTask(
+        content::BrowserThread::IO,
+        FROM_HERE,
+        base::Bind(&SingleConnectionServer::OnAccepted,
+                   base::Unretained(this),
+                   accept_result));
+}
+
+void SingleConnectionServer::OnAccepted(int result) {
+  ASSERT_EQ(result, 0);  // Fails if the socket is already in use.
+  ReadData();
+}
+
+void SingleConnectionServer::ReadData() {
+  CHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
+
+  if (input_buffer_->RemainingCapacity() == 0)
+    input_buffer_->SetCapacity(input_buffer_->capacity() * 2);
+
+  int read_result = client_socket_->Read(
+      input_buffer_.get(),
+      input_buffer_->RemainingCapacity(),
+      base::Bind(&SingleConnectionServer::OnDataRead, base::Unretained(this)));
+
+  if (read_result != net::ERR_IO_PENDING)
+    OnDataRead(read_result);
+}
+
+void SingleConnectionServer::OnDataRead(int count) {
+  if (count <= 0) {
+    AcceptConnection();
+    return;
+  }
+
+  input_buffer_->set_offset(input_buffer_->offset() + count);
+
+  int bytes_processed;
+
+  do {
+    char* data = input_buffer_->StartOfBuffer();
+    int data_size = input_buffer_->offset();
+
+    bytes_processed = TryProcessData(data, data_size);
+
+    if (bytes_processed) {
+      memmove(data, data + bytes_processed, data_size - bytes_processed);
+      input_buffer_->set_offset( data_size - bytes_processed);
+    }
+  } while (bytes_processed);
+
+  // Posting is needed not to enter deep recursion in case too synchronous IO
+  content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE,
+      base::Bind(&SingleConnectionServer::ReadData, base::Unretained(this)));
+}
+
+void SingleConnectionServer::WriteData() {
+  CHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
+  CHECK_GE(output_buffer_->capacity(),
+           output_buffer_->offset() + bytes_to_write_) << "Overflow";
+
+  int write_result = client_socket_->Write(
+      output_buffer_,
+      bytes_to_write_,
+      base::Bind(&SingleConnectionServer::OnDataWritten,
+                 base::Unretained(this)));
+  if (write_result != net::ERR_IO_PENDING)
+    OnDataWritten(write_result);
+}
+
+void SingleConnectionServer::OnDataWritten(int count) {
+  CHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
+  if (count < 0) {
+    AcceptConnection();
+    return;
+  }
+
+  CHECK_GT(count, 0);
+  CHECK_GE(output_buffer_->capacity(),
+           output_buffer_->offset() + bytes_to_write_) << "Overflow";
+
+  bytes_to_write_ -= count;
+  output_buffer_->set_offset(output_buffer_->offset() + count);
+
+  if (bytes_to_write_ != 0)
+    // Posting is needed not to enter deep recursion in case too synchronous IO
+    content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE,
+        base::Bind(&SingleConnectionServer::WriteData, base::Unretained(this)));
+}
+
+
+class MockAdbServer: public SingleConnectionServer {
+ public:
+  MockAdbServer(net::IPEndPoint endpoint, int buffer_size)
+      : SingleConnectionServer(endpoint, buffer_size)
+  {}
+
+  virtual ~MockAdbServer() {}
+
+ private:
+  virtual int TryProcessData(const char* data, int size) OVERRIDE {
+    CHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
+
+    if (size >= kAdbMessageHeaderSize) {
+      std::string message_header(data, kAdbMessageHeaderSize);
+      int message_size;
+
+      EXPECT_TRUE(base::HexStringToInt(message_header, &message_size));
+
+      if (size >= message_size + kAdbMessageHeaderSize) {
+        std::string message_body(data + kAdbMessageHeaderSize, message_size );
+
+        ProcessCommand(message_body);
+
+        return kAdbMessageHeaderSize + message_size;
+      }
+    }
+
+    return 0;
+  }
+
+  void ProcessCommand(const std::string& command) {
+    CHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
+
+    if (command == "host:devices") {
+      SendResponse("01498B321301A00A\tdevice\n01498B2B0D01300E\toffline");
+    } else if (command == "host:transport:01498B321301A00A") {
+      SendResponse("");
+    } else if (command == kDeviceModelCommand) {
+      SendResponse(kDeviceModel);
+    } else if (command == kOpenedUnixSocketsCommand) {
+      SendResponse(kSampleOpenedUnixSocketsWithoutBrowsers);
+    } else if (command == kDumpsysCommand) {
+      SendResponse(kSampleDumpsys);
+    } else if (command == kListProcessesCommand) {
+      SendResponse(kSampleListProcesses);
+    } else if (command == kInstalledChromePackagesCommand) {
+      SendResponse(kSampleListPackages);
+    } else {
+      NOTREACHED() << "Unknown command - " << command;
+    }
+  }
+
+  void SendResponse(const std::string& response) {
+    DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
+
+    std::stringstream response_stream;
+    response_stream << "OKAY";
+
+    int size = response.size();
+    if (size > 0) {
+      static const char kHexChars[] = "0123456789ABCDEF";
+      for (int i = 3; i >= 0; i--)
+        response_stream << kHexChars[ (size >> 4*i) & 0x0f ];
+      response_stream << response;
+    }
+
+    std::string response_data = response_stream.str();
+    SendData(response_data.c_str(), response_data.size());
+  }
+};
+
+class AdbClientSocketTest : public InProcessBrowserTest,
+                            public DevToolsAndroidBridge::DeviceListListener {
+
+public:
+  void StartTest() {
+    DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+
+    content::BrowserThread::PostTaskAndReply(
+        content::BrowserThread::IO,
+        FROM_HERE,
+        base::Bind(&AdbClientSocketTest::StartMockAdbServer,
+                   base::Unretained(this)),
+        base::Bind(&AdbClientSocketTest::AddListener,
+                   base::Unretained(this)));
+  }
+
+  virtual void DeviceListChanged(
+      const DevToolsAndroidBridge::RemoteDevices& devices) OVERRIDE {
+    DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+    android_bridge_->RemoveDeviceListListener(this);
+    devices_ = devices;
+    EndTest();
+  }
+
+  void CheckDevices() {
+    ASSERT_EQ(2U, devices_.size());
+
+    scoped_refptr<DevToolsAndroidBridge::RemoteDevice> online_device_;
+    scoped_refptr<DevToolsAndroidBridge::RemoteDevice> offline_device_;
+
+    for (DevToolsAndroidBridge::RemoteDevices::const_iterator it =
+        devices_.begin(); it != devices_.end(); ++it) {
+      if ((*it)->serial() == "01498B321301A00A")
+        online_device_ = *it;
+      else if ((*it)->serial() == "01498B2B0D01300E")
+        offline_device_ = *it;
+    }
+
+    ASSERT_EQ(online_device_->serial(), "01498B321301A00A");
+    ASSERT_TRUE(online_device_->is_connected());
+    ASSERT_FALSE(offline_device_->is_connected());
+
+    ASSERT_EQ(online_device_->model(), kDeviceModel);
+    ASSERT_EQ(online_device_->browsers().size(), 0U);
+    ASSERT_EQ(online_device_->screen_size(), gfx::Size(720, 1184));
+  }
+
+private:
+  void EndTest() {
+    DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+    android_bridge_ = NULL;
+
+    content::BrowserThread::PostTaskAndReply(
+        content::BrowserThread::IO,
+        FROM_HERE,
+        base::Bind(&AdbClientSocketTest::StopMockAdbServer,
+                   base::Unretained(this)),
+        base::Bind(&AdbClientSocketTest::StopMessageLoop,
+                   base::Unretained(this)));
+  }
+
+  void StartMockAdbServer() {
+    DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
+    net::IPAddressNumber address;
+    net::ParseIPLiteralToNumber("127.0.0.1", &address);
+    net::IPEndPoint endpoint(address, kAdbPort);
+
+    adb_server_.reset(new MockAdbServer(endpoint, kBufferSize));
+  }
+
+  void StopMockAdbServer() {
+    DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
+    adb_server_.reset();
+  }
+
+  void StopMessageLoop() {
+    DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+    runner->Quit();
+  }
+
+  void AddListener() {
+    DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+    android_bridge_ = DevToolsAndroidBridge::Factory::GetForProfile(
+        browser()->profile());
+
+    AndroidDeviceManager::DeviceProviders device_providers;
+    device_providers.push_back(AndroidDeviceManager::GetAdbDeviceProvider());
+
+    android_bridge_->set_device_providers_for_test(device_providers);
+    android_bridge_->AddDeviceListListener(this);
+  }
+
+public:
+  scoped_refptr<content::MessageLoopRunner> runner;
+
+private:
+  scoped_ptr<MockAdbServer> adb_server_;
+  scoped_refptr<DevToolsAndroidBridge> android_bridge_;
+  DevToolsAndroidBridge::RemoteDevices devices_;
+};
+
+IN_PROC_BROWSER_TEST_F(AdbClientSocketTest, TestAdbClientSocket) {
+  CHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+  runner = new content::MessageLoopRunner;
+
+  StartTest();
+
+  runner->Run();
+
+  CheckDevices();
+}
diff --git a/chrome/browser/devtools/device/android_device_manager.cc b/chrome/browser/devtools/device/android_device_manager.cc
new file mode 100644
index 0000000..32a4f5b
--- /dev/null
+++ b/chrome/browser/devtools/device/android_device_manager.cc
@@ -0,0 +1,545 @@
+// 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.
+
+#include "chrome/browser/devtools/device/android_device_manager.h"
+
+#include "base/strings/string_number_conversions.h"
+#include "base/strings/string_util.h"
+#include "base/strings/stringprintf.h"
+#include "base/threading/thread.h"
+#include "chrome/browser/devtools/device/adb/adb_client_socket.h"
+#include "chrome/browser/devtools/device/usb/android_rsa.h"
+#include "chrome/browser/devtools/device/usb/android_usb_device.h"
+#include "net/base/net_errors.h"
+#include "net/base/net_util.h"
+#include "net/socket/tcp_client_socket.h"
+
+using content::BrowserThread;
+
+namespace {
+
+const char kHostTransportCommand[] = "host:transport:%s|%s";
+const char kHostDevicesCommand[] = "host:devices";
+const char kLocalAbstractCommand[] = "localabstract:%s";
+
+const int kAdbPort = 5037;
+const int kBufferSize = 16 * 1024;
+
+const char kDeviceModelCommand[] = "shell:getprop ro.product.model";
+const char kOpenedUnixSocketsCommand[] = "shell:cat /proc/net/unix";
+const char kOpenedUnixSocketsResponse[] =
+    "Num       RefCount Protocol Flags    Type St Inode Path\n"
+    "00000000: 00000002 00000000 00010000 0001 01 20894 @%s\n";
+const char kRemoteDebuggingSocket[] = "chrome_devtools_remote";
+const char kLocalChrome[] = "Local Chrome";
+const char kLocalhost[] = "127.0.0.1";
+
+// AdbDeviceImpl --------------------------------------------------------------
+
+class AdbDeviceImpl : public AndroidDeviceManager::Device {
+ public:
+  AdbDeviceImpl(const std::string& serial, bool is_connected);
+  virtual void RunCommand(const std::string& command,
+                          const CommandCallback& callback) OVERRIDE;
+  virtual void OpenSocket(const std::string& name,
+                          const SocketCallback& callback) OVERRIDE;
+ private:
+  virtual ~AdbDeviceImpl() {}
+};
+
+AdbDeviceImpl::AdbDeviceImpl(const std::string& serial, bool is_connected)
+    : Device(serial, is_connected) {
+}
+
+void AdbDeviceImpl::RunCommand(const std::string& command,
+                               const CommandCallback& callback) {
+  DCHECK(CalledOnValidThread());
+  std::string query = base::StringPrintf(kHostTransportCommand,
+                                         serial().c_str(), command.c_str());
+  AdbClientSocket::AdbQuery(kAdbPort, query, callback);
+}
+
+void AdbDeviceImpl::OpenSocket(const std::string& name,
+                               const SocketCallback& callback) {
+  DCHECK(CalledOnValidThread());
+  std::string socket_name =
+      base::StringPrintf(kLocalAbstractCommand, name.c_str());
+  AdbClientSocket::TransportQuery(kAdbPort, serial(), socket_name, callback);
+}
+
+// UsbDeviceImpl --------------------------------------------------------------
+
+class UsbDeviceImpl : public AndroidDeviceManager::Device {
+ public:
+  explicit UsbDeviceImpl(AndroidUsbDevice* device);
+  virtual void RunCommand(const std::string& command,
+                          const CommandCallback& callback) OVERRIDE;
+  virtual void OpenSocket(const std::string& name,
+                          const SocketCallback& callback) OVERRIDE;
+ private:
+  void OnOpenSocket(const SocketCallback& callback,
+                    net::StreamSocket* socket,
+                    int result);
+  void OpenedForCommand(const CommandCallback& callback,
+                        net::StreamSocket* socket,
+                        int result);
+  void OnRead(net::StreamSocket* socket,
+              scoped_refptr<net::IOBuffer> buffer,
+              const std::string& data,
+              const CommandCallback& callback,
+              int result);
+
+  virtual ~UsbDeviceImpl() {}
+  scoped_refptr<AndroidUsbDevice> device_;
+};
+
+
+UsbDeviceImpl::UsbDeviceImpl(AndroidUsbDevice* device)
+    : Device(device->serial(), device->is_connected()),
+      device_(device) {
+  device_->InitOnCallerThread();
+}
+
+void UsbDeviceImpl::RunCommand(const std::string& command,
+                               const CommandCallback& callback) {
+  DCHECK(CalledOnValidThread());
+  net::StreamSocket* socket = device_->CreateSocket(command);
+  if (!socket) {
+    callback.Run(net::ERR_CONNECTION_FAILED, std::string());
+    return;
+  }
+  int result = socket->Connect(base::Bind(&UsbDeviceImpl::OpenedForCommand,
+                                          this, callback, socket));
+  if (result != net::ERR_IO_PENDING)
+    callback.Run(result, std::string());
+}
+
+void UsbDeviceImpl::OpenSocket(const std::string& name,
+                               const SocketCallback& callback) {
+  DCHECK(CalledOnValidThread());
+  std::string socket_name =
+      base::StringPrintf(kLocalAbstractCommand, name.c_str());
+  net::StreamSocket* socket = device_->CreateSocket(socket_name);
+  if (!socket) {
+    callback.Run(net::ERR_CONNECTION_FAILED, NULL);
+    return;
+  }
+  int result = socket->Connect(base::Bind(&UsbDeviceImpl::OnOpenSocket, this,
+                                          callback, socket));
+  if (result != net::ERR_IO_PENDING)
+    callback.Run(result, NULL);
+}
+
+void UsbDeviceImpl::OnOpenSocket(const SocketCallback& callback,
+                  net::StreamSocket* socket,
+                  int result) {
+  callback.Run(result, result == net::OK ? socket : NULL);
+}
+
+void UsbDeviceImpl::OpenedForCommand(const CommandCallback& callback,
+                                     net::StreamSocket* socket,
+                                     int result) {
+  if (result != net::OK) {
+    callback.Run(result, std::string());
+    return;
+  }
+  scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer(kBufferSize);
+  result = socket->Read(buffer, kBufferSize,
+                        base::Bind(&UsbDeviceImpl::OnRead, this,
+                                   socket, buffer, std::string(), callback));
+  if (result != net::ERR_IO_PENDING)
+    OnRead(socket, buffer, std::string(), callback, result);
+}
+
+void UsbDeviceImpl::OnRead(net::StreamSocket* socket,
+                           scoped_refptr<net::IOBuffer> buffer,
+                           const std::string& data,
+                           const CommandCallback& callback,
+                           int result) {
+  if (result <= 0) {
+    callback.Run(result, result == 0 ? data : std::string());
+    delete socket;
+    return;
+  }
+
+  std::string new_data = data + std::string(buffer->data(), result);
+  result = socket->Read(buffer, kBufferSize,
+                        base::Bind(&UsbDeviceImpl::OnRead, this,
+                                   socket, buffer, new_data, callback));
+  if (result != net::ERR_IO_PENDING)
+    OnRead(socket, buffer, new_data, callback, result);
+}
+
+// AdbDeviceProvider -------------------------------------------
+
+class AdbDeviceProvider : public AndroidDeviceManager::DeviceProvider {
+ public:
+  virtual void QueryDevices(const QueryDevicesCallback& callback) OVERRIDE;
+ private:
+  void ReceivedAdbDevices(const QueryDevicesCallback& callback, int result,
+                          const std::string& response);
+
+  virtual ~AdbDeviceProvider();
+};
+
+AdbDeviceProvider::~AdbDeviceProvider() {
+}
+
+void AdbDeviceProvider::QueryDevices(const QueryDevicesCallback& callback) {
+  AdbClientSocket::AdbQuery(
+      kAdbPort, kHostDevicesCommand,
+      base::Bind(&AdbDeviceProvider::ReceivedAdbDevices, this, callback));
+}
+
+void AdbDeviceProvider::ReceivedAdbDevices(const QueryDevicesCallback& callback,
+                                           int result_code,
+                                           const std::string& response) {
+  AndroidDeviceManager::Devices result;
+  std::vector<std::string> serials;
+  Tokenize(response, "\n", &serials);
+  for (size_t i = 0; i < serials.size(); ++i) {
+    std::vector<std::string> tokens;
+    Tokenize(serials[i], "\t ", &tokens);
+    bool offline = tokens.size() > 1 && tokens[1] == "offline";
+    result.push_back(new AdbDeviceImpl(tokens[0], !offline));
+  }
+  callback.Run(result);
+}
+
+// UsbDeviceProvider -------------------------------------------
+
+class UsbDeviceProvider : public AndroidDeviceManager::DeviceProvider {
+ public:
+  explicit UsbDeviceProvider(Profile* profile);
+
+  virtual void QueryDevices(const QueryDevicesCallback& callback) OVERRIDE;
+ private:
+  virtual ~UsbDeviceProvider();
+  void EnumeratedDevices(const QueryDevicesCallback& callback,
+                         const AndroidUsbDevices& devices);
+
+  scoped_ptr<crypto::RSAPrivateKey>  rsa_key_;
+};
+
+UsbDeviceProvider::UsbDeviceProvider(Profile* profile){
+  rsa_key_.reset(AndroidRSAPrivateKey(profile));
+}
+
+UsbDeviceProvider::~UsbDeviceProvider() {
+}
+
+void UsbDeviceProvider::QueryDevices(const QueryDevicesCallback& callback) {
+  AndroidUsbDevice::Enumerate(rsa_key_.get(),
+      base::Bind(&UsbDeviceProvider::EnumeratedDevices, this, callback));
+}
+
+void UsbDeviceProvider::EnumeratedDevices(const QueryDevicesCallback& callback,
+                                          const AndroidUsbDevices& devices) {
+  AndroidDeviceManager::Devices result;
+  for (AndroidUsbDevices::const_iterator it = devices.begin();
+      it != devices.end(); ++it)
+    result.push_back(new UsbDeviceImpl(*it));
+  callback.Run(result);
+}
+
+} // namespace
+
+AndroidDeviceManager::Device::Device(const std::string& serial,
+                                     bool is_connected)
+    : serial_(serial),
+      is_connected_(is_connected) {
+}
+
+void AndroidDeviceManager::Device::HttpQuery(
+    const std::string& la_name,
+    const std::string& request,
+    const CommandCallback& callback) {
+  DCHECK(CalledOnValidThread());
+  OpenSocket(la_name, base::Bind(
+      &Device::OnHttpSocketOpened, this, request, callback));
+}
+
+void AndroidDeviceManager::Device::HttpUpgrade(
+    const std::string& la_name,
+    const std::string& request,
+    const SocketCallback& callback) {
+  DCHECK(CalledOnValidThread());
+  OpenSocket(la_name, base::Bind(
+      &Device::OnHttpSocketOpened2, this, request, callback));
+}
+
+AndroidDeviceManager::Device::~Device() {
+}
+
+void AndroidDeviceManager::Device::OnHttpSocketOpened(
+    const std::string& request,
+    const CommandCallback& callback,
+    int result,
+    net::StreamSocket* socket) {
+  if (result != net::OK) {
+    callback.Run(result, std::string());
+    return;
+  }
+  AdbClientSocket::HttpQuery(socket, request, callback);
+}
+
+void AndroidDeviceManager::Device::OnHttpSocketOpened2(
+    const std::string& request,
+    const SocketCallback& callback,
+    int result,
+    net::StreamSocket* socket) {
+  if (result != net::OK) {
+    callback.Run(result, NULL);
+    return;
+  }
+  AdbClientSocket::HttpQuery(socket, request, callback);
+}
+
+AndroidDeviceManager::DeviceProvider::DeviceProvider() {
+}
+
+AndroidDeviceManager::DeviceProvider::~DeviceProvider() {
+}
+
+// static
+scoped_refptr<AndroidDeviceManager::DeviceProvider>
+    AndroidDeviceManager::GetUsbDeviceProvider(Profile* profile) {
+  return new UsbDeviceProvider(profile);
+}
+
+// static
+scoped_refptr<AndroidDeviceManager::DeviceProvider>
+    AndroidDeviceManager::GetAdbDeviceProvider() {
+  return new AdbDeviceProvider();
+}
+
+
+class SelfAsDevice : public AndroidDeviceManager::Device {
+ public:
+  explicit SelfAsDevice(int port);
+
+  virtual void RunCommand(const std::string& command,
+                          const CommandCallback& callback) OVERRIDE;
+  virtual void OpenSocket(const std::string& socket_name,
+                          const SocketCallback& callback) OVERRIDE;
+ private:
+  void RunCommandCallback(const CommandCallback& callback,
+                          const std::string& response,
+                          int result);
+
+  void RunSocketCallback(const SocketCallback& callback,
+                         net::StreamSocket* socket,
+                         int result);
+  virtual ~SelfAsDevice() {}
+
+  int port_;
+};
+
+SelfAsDevice::SelfAsDevice(int port)
+    : Device("local", true),
+      port_(port)
+{}
+
+void SelfAsDevice::RunCommandCallback(const CommandCallback& callback,
+                                      const std::string& response,
+                                      int result) {
+  callback.Run(result, response);
+}
+
+void SelfAsDevice::RunSocketCallback(const SocketCallback& callback,
+                                     net::StreamSocket* socket,
+                                     int result) {
+  callback.Run(result, socket);
+}
+
+void SelfAsDevice::RunCommand(const std::string& command,
+                              const CommandCallback& callback) {
+  DCHECK(CalledOnValidThread());
+  std::string response;
+  if (command == kDeviceModelCommand) {
+    response = kLocalChrome;
+  } else if (command == kOpenedUnixSocketsCommand) {
+    response = base::StringPrintf(kOpenedUnixSocketsResponse,
+                                  kRemoteDebuggingSocket);
+  }
+
+  base::MessageLoop::current()->PostTask(FROM_HERE,
+                base::Bind(&SelfAsDevice::RunCommandCallback, this, callback,
+                           response, 0));
+}
+
+void SelfAsDevice::OpenSocket(const std::string& socket_name,
+                              const SocketCallback& callback) {
+  DCHECK(CalledOnValidThread());
+  // Use plain socket for remote debugging and port forwarding on Desktop
+  // (debugging purposes).
+  net::IPAddressNumber ip_number;
+  net::ParseIPLiteralToNumber(kLocalhost, &ip_number);
+
+  int port = 0;
+  if (socket_name == kRemoteDebuggingSocket)
+    port = port_;
+  else
+    base::StringToInt(socket_name, &port);
+
+  net::AddressList address_list =
+      net::AddressList::CreateFromIPAddress(ip_number, port);
+  net::TCPClientSocket* socket = new net::TCPClientSocket(
+      address_list, NULL, net::NetLog::Source());
+  socket->Connect(base::Bind(&SelfAsDevice::RunSocketCallback, this, callback,
+                             socket));
+}
+
+class SelfAsDeviceProvider : public AndroidDeviceManager::DeviceProvider {
+ public:
+  explicit SelfAsDeviceProvider(int port);
+
+  virtual void QueryDevices(const QueryDevicesCallback& callback) OVERRIDE;
+ private:
+  virtual ~SelfAsDeviceProvider(){}
+
+  int port_;
+};
+
+SelfAsDeviceProvider::SelfAsDeviceProvider(int port)
+    : port_(port) {
+}
+
+void SelfAsDeviceProvider::QueryDevices(const QueryDevicesCallback& callback) {
+  AndroidDeviceManager::Devices result;
+  result.push_back(new SelfAsDevice(port_));
+  callback.Run(result);
+}
+
+// static
+scoped_refptr<AndroidDeviceManager::DeviceProvider>
+AndroidDeviceManager::GetSelfAsDeviceProvider(int port) {
+  return new SelfAsDeviceProvider(port);
+}
+
+// static
+scoped_refptr<AndroidDeviceManager> AndroidDeviceManager::Create() {
+  return new AndroidDeviceManager();
+}
+
+void AndroidDeviceManager::QueryDevices(
+    const DeviceProviders& providers,
+    const QueryDevicesCallback& callback) {
+  DCHECK(CalledOnValidThread());
+  stopped_ = false;
+  Devices empty;
+  QueryNextProvider(callback, providers, empty, empty);
+}
+
+void AndroidDeviceManager::Stop() {
+  DCHECK(CalledOnValidThread());
+  stopped_ = true;
+  devices_.clear();
+}
+
+bool AndroidDeviceManager::IsConnected(const std::string& serial) {
+  DCHECK(CalledOnValidThread());
+  Device* device = FindDevice(serial);
+  return device && device->is_connected();
+}
+
+void AndroidDeviceManager::RunCommand(
+    const std::string& serial,
+    const std::string& command,
+    const CommandCallback& callback) {
+  DCHECK(CalledOnValidThread());
+  Device* device = FindDevice(serial);
+  if (device)
+    device->RunCommand(command, callback);
+  else
+    callback.Run(net::ERR_CONNECTION_FAILED, std::string());
+}
+
+void AndroidDeviceManager::OpenSocket(
+    const std::string& serial,
+    const std::string& socket_name,
+    const SocketCallback& callback) {
+  DCHECK(CalledOnValidThread());
+  Device* device = FindDevice(serial);
+  if (device)
+    device->OpenSocket(socket_name, callback);
+  else
+    callback.Run(net::ERR_CONNECTION_FAILED, NULL);
+}
+
+void AndroidDeviceManager::HttpQuery(
+    const std::string& serial,
+    const std::string& la_name,
+    const std::string& request,
+    const CommandCallback& callback) {
+  DCHECK(CalledOnValidThread());
+  Device* device = FindDevice(serial);
+  if (device)
+    device->HttpQuery(la_name, request, callback);
+  else
+    callback.Run(net::ERR_CONNECTION_FAILED, std::string());
+}
+
+void AndroidDeviceManager::HttpUpgrade(
+    const std::string& serial,
+    const std::string& la_name,
+    const std::string& request,
+    const SocketCallback& callback) {
+  DCHECK(CalledOnValidThread());
+  Device* device = FindDevice(serial);
+  if (device)
+    device->HttpUpgrade(la_name, request, callback);
+  else
+    callback.Run(net::ERR_CONNECTION_FAILED, NULL);
+}
+
+AndroidDeviceManager::AndroidDeviceManager()
+    : stopped_(false) {
+}
+
+AndroidDeviceManager::~AndroidDeviceManager() {
+}
+
+void AndroidDeviceManager::QueryNextProvider(
+    const QueryDevicesCallback& callback,
+    const DeviceProviders& providers,
+    const Devices& total_devices,
+    const Devices& new_devices) {
+  DCHECK(CalledOnValidThread());
+
+  if (stopped_)
+    return;
+
+  Devices more_devices(total_devices);
+  more_devices.insert(
+      more_devices.end(), new_devices.begin(), new_devices.end());
+
+  if (providers.empty()) {
+    std::vector<std::string> serials;
+    devices_.clear();
+    for (Devices::const_iterator it = more_devices.begin();
+        it != more_devices.end(); ++it) {
+      devices_[(*it)->serial()] = *it;
+      serials.push_back((*it)->serial());
+    }
+    callback.Run(serials);
+    return;
+  }
+
+  scoped_refptr<DeviceProvider> current_provider = providers.back();
+  DeviceProviders less_providers = providers;
+  less_providers.pop_back();
+  current_provider->QueryDevices(
+      base::Bind(&AndroidDeviceManager::QueryNextProvider,
+                 this, callback, less_providers, more_devices));
+}
+
+AndroidDeviceManager::Device*
+AndroidDeviceManager::FindDevice(const std::string& serial) {
+  DCHECK(CalledOnValidThread());
+  DeviceMap::const_iterator it = devices_.find(serial);
+  if (it == devices_.end())
+    return NULL;
+  return (*it).second.get();
+}
diff --git a/chrome/browser/devtools/device/android_device_manager.h b/chrome/browser/devtools/device/android_device_manager.h
new file mode 100644
index 0000000..ec25aa1
--- /dev/null
+++ b/chrome/browser/devtools/device/android_device_manager.h
@@ -0,0 +1,149 @@
+// 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.
+
+#ifndef CHROME_BROWSER_DEVTOOLS_DEVICE_ANDROID_DEVICE_MANAGER_H_
+#define CHROME_BROWSER_DEVTOOLS_DEVICE_ANDROID_DEVICE_MANAGER_H_
+
+#include <vector>
+
+#include "base/memory/ref_counted.h"
+#include "base/threading/non_thread_safe.h"
+#include "chrome/browser/profiles/profile.h"
+#include "content/public/browser/browser_thread.h"
+#include "crypto/rsa_private_key.h"
+#include "net/socket/stream_socket.h"
+
+class AndroidDeviceManager
+    : public base::RefCountedThreadSafe<AndroidDeviceManager>,
+      public base::NonThreadSafe {
+ public:
+  typedef base::Callback<void(int, const std::string&)> CommandCallback;
+  typedef base::Callback<void(int result, net::StreamSocket*)> SocketCallback;
+
+  class Device : public base::RefCounted<Device>,
+                 public base::NonThreadSafe {
+   protected:
+    friend class AndroidDeviceManager;
+
+    typedef AndroidDeviceManager::CommandCallback CommandCallback;
+    typedef AndroidDeviceManager::SocketCallback SocketCallback;
+
+    Device(const std::string& serial, bool is_connected);
+
+    virtual void RunCommand(const std::string& command,
+                            const CommandCallback& callback) = 0;
+    virtual void OpenSocket(const std::string& socket_name,
+                            const SocketCallback& callback) = 0;
+    virtual void HttpQuery(const std::string& la_name,
+                           const std::string& request,
+                           const CommandCallback& callback);
+    void HttpUpgrade(const std::string& la_name,
+                     const std::string& request,
+                     const SocketCallback& callback);
+
+    std::string serial() { return serial_; }
+    bool is_connected() { return is_connected_; }
+
+    friend class base::RefCounted<Device>;
+    virtual ~Device();
+
+   private:
+    void OnHttpSocketOpened(const std::string& request,
+                            const CommandCallback& callback,
+                            int result,
+                            net::StreamSocket* socket);
+    void OnHttpSocketOpened2(const std::string& request,
+                             const SocketCallback& callback,
+                             int result,
+                             net::StreamSocket* socket);
+
+    const std::string serial_;
+    const bool is_connected_;
+
+    DISALLOW_COPY_AND_ASSIGN(Device);
+  };
+
+  typedef std::vector<scoped_refptr<Device> > Devices;
+
+  class DeviceProvider
+      : public base::RefCountedThreadSafe<
+            DeviceProvider,
+            content::BrowserThread::DeleteOnUIThread> {
+   protected:
+    friend class AndroidDeviceManager;
+
+    typedef base::Callback<void(const Devices&)> QueryDevicesCallback;
+
+    virtual void QueryDevices(const QueryDevicesCallback& callback) = 0;
+
+   protected:
+    friend struct
+        content::BrowserThread::DeleteOnThread<content::BrowserThread::UI>;
+    friend class base::DeleteHelper<DeviceProvider>;
+
+    DeviceProvider();
+    virtual ~DeviceProvider();
+  };
+
+ public:
+  static scoped_refptr<DeviceProvider> GetAdbDeviceProvider();
+  static scoped_refptr<DeviceProvider> GetUsbDeviceProvider(Profile* profile);
+  // Use only in a test and/or when DEBUG_DEVTOOLS is defined.
+  static scoped_refptr<DeviceProvider> GetSelfAsDeviceProvider(int port);
+  // Implemented in browser_tests.
+  static scoped_refptr<DeviceProvider> GetMockDeviceProviderForTest();
+
+  static scoped_refptr<AndroidDeviceManager> Create();
+
+  typedef std::vector<scoped_refptr<DeviceProvider> > DeviceProviders;
+  typedef base::Callback<void (const std::vector<std::string>&)>
+      QueryDevicesCallback;
+
+  void QueryDevices(const DeviceProviders& providers,
+                    const QueryDevicesCallback& callback);
+
+  void Stop();
+
+  bool IsConnected(const std::string& serial);
+
+  void RunCommand(const std::string& serial,
+                  const std::string& command,
+                  const CommandCallback& callback);
+
+  void OpenSocket(const std::string& serial,
+                  const std::string& socket_name,
+                  const SocketCallback& callback);
+
+  void HttpQuery(const std::string& serial,
+                 const std::string& la_name,
+                 const std::string& request,
+                 const CommandCallback& callback);
+
+  void HttpUpgrade(const std::string& serial,
+                   const std::string& la_name,
+                   const std::string& request,
+                   const SocketCallback& callback);
+
+ private:
+  AndroidDeviceManager();
+
+  friend class base::RefCountedThreadSafe<AndroidDeviceManager>;
+
+  virtual ~AndroidDeviceManager();
+
+  void QueryNextProvider(
+      const QueryDevicesCallback& callback,
+      const DeviceProviders& providers,
+      const Devices& total_devices,
+      const Devices& new_devices);
+
+  Device* FindDevice(const std::string& serial);
+
+  typedef std::map<std::string, scoped_refptr<Device> > DeviceMap;
+  DeviceMap devices_;
+
+  bool stopped_;
+};
+
+#endif  // CHROME_BROWSER_DEVTOOLS_DEVICE_ANDROID_DEVICE_MANAGER_H_
diff --git a/chrome/browser/devtools/device/android_web_socket.cc b/chrome/browser/devtools/device/android_web_socket.cc
new file mode 100644
index 0000000..6c7bf01
--- /dev/null
+++ b/chrome/browser/devtools/device/android_web_socket.cc
@@ -0,0 +1,239 @@
+// 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.
+
+#include "base/message_loop/message_loop.h"
+#include "base/rand_util.h"
+#include "base/strings/stringprintf.h"
+#include "chrome/browser/devtools/device/devtools_android_bridge.h"
+#include "content/public/browser/browser_thread.h"
+#include "net/base/io_buffer.h"
+#include "net/base/net_errors.h"
+#include "net/server/web_socket.h"
+
+using content::BrowserThread;
+using net::WebSocket;
+
+namespace {
+
+const int kBufferSize = 16 * 1024;
+
+static const char kWebSocketUpgradeRequest[] = "GET %s HTTP/1.1\r\n"
+    "Upgrade: WebSocket\r\n"
+    "Connection: Upgrade\r\n"
+    "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\n"
+    "Sec-WebSocket-Version: 13\r\n"
+    "\r\n";
+
+class WebSocketImpl : public DevToolsAndroidBridge::AndroidWebSocket {
+ public:
+  WebSocketImpl(scoped_refptr<DevToolsAndroidBridge> android_bridge,
+                   AndroidDeviceManager* device_manager,
+                   base::MessageLoop* device_message_loop,
+                   const std::string& serial,
+                   const std::string& socket_name,
+                   const std::string& url,
+                   Delegate* delegate);
+
+  virtual void Disconnect() OVERRIDE;
+
+  virtual void SendFrame(const std::string& message) OVERRIDE;
+
+ private:
+  friend class base::RefCountedThreadSafe<AndroidWebSocket>;
+
+  virtual ~WebSocketImpl();
+
+  void ConnectOnHandlerThread();
+  void ConnectedOnHandlerThread(int result, net::StreamSocket* socket);
+  void StartListeningOnHandlerThread();
+  void OnBytesRead(scoped_refptr<net::IOBuffer> response_buffer, int result);
+  void SendFrameOnHandlerThread(const std::string& message);
+  void SendPendingRequests(int result);
+  void DisconnectOnHandlerThread(bool closed_by_device);
+
+  void OnSocketOpened();
+  void OnFrameRead(const std::string& message);
+  void OnSocketClosed(bool closed_by_device);
+
+  scoped_refptr<DevToolsAndroidBridge> android_bridge_;
+  AndroidDeviceManager* device_manager_;
+  base::MessageLoop* device_message_loop_;
+  std::string serial_;
+  std::string socket_name_;
+  std::string url_;
+  scoped_ptr<net::StreamSocket> socket_;
+  Delegate* delegate_;
+  std::string response_buffer_;
+  std::string request_buffer_;
+};
+
+WebSocketImpl::WebSocketImpl(
+    scoped_refptr<DevToolsAndroidBridge> android_bridge,
+    AndroidDeviceManager* device_manager,
+    base::MessageLoop* device_message_loop,
+    const std::string& serial,
+    const std::string& socket_name,
+    const std::string& url,
+    Delegate* delegate)
+    : android_bridge_(android_bridge),
+      device_manager_(device_manager),
+      device_message_loop_(device_message_loop),
+      serial_(serial),
+      socket_name_(socket_name),
+      url_(url),
+      delegate_(delegate) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  device_message_loop_->PostTask(
+      FROM_HERE, base::Bind(&WebSocketImpl::ConnectOnHandlerThread, this));
+}
+
+void WebSocketImpl::Disconnect() {
+  device_message_loop_->PostTask(
+      FROM_HERE,
+      base::Bind(&WebSocketImpl::DisconnectOnHandlerThread, this, false));
+}
+
+void WebSocketImpl::SendFrame(const std::string& message) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  device_message_loop_->PostTask(
+      FROM_HERE,
+      base::Bind(&WebSocketImpl::SendFrameOnHandlerThread, this, message));
+}
+
+void WebSocketImpl::SendFrameOnHandlerThread(const std::string& message) {
+  int mask = base::RandInt(0, 0x7FFFFFFF);
+  std::string encoded_frame = WebSocket::EncodeFrameHybi17(message, mask);
+  request_buffer_ += encoded_frame;
+  if (request_buffer_.length() == encoded_frame.length())
+    SendPendingRequests(0);
+}
+
+WebSocketImpl::~WebSocketImpl() {}
+
+void WebSocketImpl::ConnectOnHandlerThread() {
+  device_manager_->HttpUpgrade(
+      serial_,
+      socket_name_,
+      base::StringPrintf(kWebSocketUpgradeRequest, url_.c_str()),
+      base::Bind(&WebSocketImpl::ConnectedOnHandlerThread, this));
+}
+
+void WebSocketImpl::ConnectedOnHandlerThread(
+  int result, net::StreamSocket* socket) {
+  if (result != net::OK || socket == NULL) {
+    BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
+        base::Bind(&WebSocketImpl::OnSocketClosed, this, true));
+    return;
+  }
+  socket_.reset(socket);
+  BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
+      base::Bind(&WebSocketImpl::OnSocketOpened, this));
+  StartListeningOnHandlerThread();
+}
+
+void WebSocketImpl::StartListeningOnHandlerThread() {
+  scoped_refptr<net::IOBuffer> response_buffer =
+      new net::IOBuffer(kBufferSize);
+  int result = socket_->Read(
+      response_buffer.get(),
+      kBufferSize,
+      base::Bind(&WebSocketImpl::OnBytesRead, this, response_buffer));
+  if (result != net::ERR_IO_PENDING)
+    OnBytesRead(response_buffer, result);
+}
+
+void WebSocketImpl::OnBytesRead(
+    scoped_refptr<net::IOBuffer> response_buffer, int result) {
+  if (!socket_)
+    return;
+
+  if (result <= 0) {
+    DisconnectOnHandlerThread(true);
+    return;
+  }
+
+  std::string data = std::string(response_buffer->data(), result);
+  response_buffer_ += data;
+
+  int bytes_consumed;
+  std::string output;
+  WebSocket::ParseResult parse_result = WebSocket::DecodeFrameHybi17(
+      response_buffer_, false, &bytes_consumed, &output);
+
+  while (parse_result == WebSocket::FRAME_OK) {
+    response_buffer_ = response_buffer_.substr(bytes_consumed);
+    BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
+        base::Bind(&WebSocketImpl::OnFrameRead, this, output));
+    parse_result = WebSocket::DecodeFrameHybi17(
+        response_buffer_, false, &bytes_consumed, &output);
+  }
+
+  if (parse_result == WebSocket::FRAME_ERROR ||
+      parse_result == WebSocket::FRAME_CLOSE) {
+    DisconnectOnHandlerThread(true);
+    return;
+  }
+
+  result = socket_->Read(
+      response_buffer.get(),
+      kBufferSize,
+      base::Bind(&WebSocketImpl::OnBytesRead, this, response_buffer));
+  if (result != net::ERR_IO_PENDING)
+    OnBytesRead(response_buffer, result);
+}
+
+void WebSocketImpl::SendPendingRequests(int result) {
+  if (!socket_)
+    return;
+  if (result < 0) {
+    DisconnectOnHandlerThread(true);
+    return;
+  }
+  request_buffer_ = request_buffer_.substr(result);
+  if (request_buffer_.empty())
+    return;
+
+  scoped_refptr<net::StringIOBuffer> buffer =
+      new net::StringIOBuffer(request_buffer_);
+  result = socket_->Write(buffer.get(), buffer->size(),
+                          base::Bind(&WebSocketImpl::SendPendingRequests,
+                                     this));
+  if (result != net::ERR_IO_PENDING)
+    SendPendingRequests(result);
+}
+
+void WebSocketImpl::DisconnectOnHandlerThread(bool closed_by_device) {
+  if (!socket_)
+    return;
+  // Wipe out socket_ first since Disconnect can re-enter this method.
+  scoped_ptr<net::StreamSocket> socket(socket_.release());
+  socket->Disconnect();
+  BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
+      base::Bind(&WebSocketImpl::OnSocketClosed, this, closed_by_device));
+}
+
+void WebSocketImpl::OnSocketOpened() {
+  delegate_->OnSocketOpened();
+}
+
+void WebSocketImpl::OnFrameRead(const std::string& message) {
+  delegate_->OnFrameRead(message);
+}
+
+void WebSocketImpl::OnSocketClosed(bool closed_by_device) {
+  delegate_->OnSocketClosed(closed_by_device);
+}
+
+}  // namespace
+
+scoped_refptr<DevToolsAndroidBridge::AndroidWebSocket>
+DevToolsAndroidBridge::RemoteBrowser::CreateWebSocket(
+    const std::string& url,
+    DevToolsAndroidBridge::AndroidWebSocket::Delegate* delegate) {
+  return new WebSocketImpl(
+      android_bridge_,
+      android_bridge_->device_manager(),
+      android_bridge_->device_message_loop(),
+      serial_, socket_, url, delegate);
+}
diff --git a/chrome/browser/devtools/device/devtools_android_bridge.cc b/chrome/browser/devtools/device/devtools_android_bridge.cc
new file mode 100644
index 0000000..217fb24
--- /dev/null
+++ b/chrome/browser/devtools/device/devtools_android_bridge.cc
@@ -0,0 +1,1329 @@
+// 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.
+
+#include "chrome/browser/devtools/device/devtools_android_bridge.h"
+
+#include <map>
+#include <vector>
+
+#include "base/base64.h"
+#include "base/bind.h"
+#include "base/compiler_specific.h"
+#include "base/json/json_reader.h"
+#include "base/lazy_instance.h"
+#include "base/message_loop/message_loop.h"
+#include "base/prefs/pref_service.h"
+#include "base/strings/string_number_conversions.h"
+#include "base/strings/string_util.h"
+#include "base/strings/stringprintf.h"
+#include "base/strings/utf_string_conversions.h"
+#include "base/threading/thread.h"
+#include "base/values.h"
+#include "chrome/browser/devtools/browser_list_tabcontents_provider.h"
+#include "chrome/browser/devtools/device/usb/android_usb_device.h"
+#include "chrome/browser/devtools/devtools_protocol.h"
+#include "chrome/browser/devtools/devtools_target_impl.h"
+#include "chrome/browser/devtools/devtools_window.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/common/pref_names.h"
+#include "components/keyed_service/content/browser_context_dependency_manager.h"
+#include "content/public/browser/devtools_agent_host.h"
+#include "content/public/browser/devtools_external_agent_proxy.h"
+#include "content/public/browser/devtools_external_agent_proxy_delegate.h"
+#include "content/public/browser/user_metrics.h"
+#include "net/base/escape.h"
+
+using content::BrowserThread;
+
+namespace {
+
+const char kDeviceModelCommand[] = "shell:getprop ro.product.model";
+const char kInstalledChromePackagesCommand[] = "shell:pm list packages";
+const char kOpenedUnixSocketsCommand[] = "shell:cat /proc/net/unix";
+const char kListProcessesCommand[] = "shell:ps";
+const char kDumpsysCommand[] = "shell:dumpsys window policy";
+const char kDumpsysScreenSizePrefix[] = "mStable=";
+
+const char kUnknownModel[] = "Offline";
+
+const char kPageListRequest[] = "GET /json HTTP/1.1\r\n\r\n";
+const char kVersionRequest[] = "GET /json/version HTTP/1.1\r\n\r\n";
+const char kClosePageRequest[] = "GET /json/close/%s HTTP/1.1\r\n\r\n";
+const char kNewPageRequest[] = "GET /json/new HTTP/1.1\r\n\r\n";
+const char kNewPageRequestWithURL[] = "GET /json/new?%s HTTP/1.1\r\n\r\n";
+const char kActivatePageRequest[] =
+    "GET /json/activate/%s HTTP/1.1\r\n\r\n";
+const int kAdbPollingIntervalMs = 1000;
+
+const char kUrlParam[] = "url";
+const char kPageReloadCommand[] = "Page.reload";
+const char kPageNavigateCommand[] = "Page.navigate";
+
+const char kChromeDefaultName[] = "Chrome";
+const char kChromeDefaultSocket[] = "chrome_devtools_remote";
+const int kMinVersionNewWithURL = 32;
+const int kNewPageNavigateDelayMs = 500;
+
+const char kWebViewSocketPrefix[] = "webview_devtools_remote";
+const char kWebViewNameTemplate[] = "WebView in %s";
+
+struct BrowserDescriptor {
+  const char* package;
+  const char* socket;
+  const char* display_name;
+};
+
+const BrowserDescriptor kBrowserDescriptors[] = {
+  {
+    "com.android.chrome",
+    kChromeDefaultSocket,
+    kChromeDefaultName
+  },
+  {
+    "com.chrome.beta",
+    kChromeDefaultSocket,
+    "Chrome Beta"
+  },
+  {
+    "com.google.android.apps.chrome_dev",
+    kChromeDefaultSocket,
+    "Chrome Dev"
+  },
+  {
+    "com.chrome.canary",
+    kChromeDefaultSocket,
+    "Chrome Canary"
+  },
+  {
+    "com.google.android.apps.chrome",
+    kChromeDefaultSocket,
+    "Chromium"
+  },
+  {
+    "org.chromium.content_shell_apk",
+    "content_shell_devtools_remote",
+    "Content Shell"
+  },
+  {
+    "org.chromium.chrome.shell",
+    "chrome_shell_devtools_remote",
+    "Chrome Shell"
+  },
+  {
+    "org.chromium.android_webview.shell",
+    "webview_devtools_remote",
+    "WebView Test Shell"
+  }
+};
+
+const BrowserDescriptor* FindBrowserDescriptor(const std::string& package) {
+  int count = sizeof(kBrowserDescriptors) / sizeof(kBrowserDescriptors[0]);
+  for (int i = 0; i < count; i++)
+    if (kBrowserDescriptors[i].package == package)
+      return &kBrowserDescriptors[i];
+  return NULL;
+}
+
+typedef std::map<std::string, const BrowserDescriptor*> DescriptorMap;
+
+static DescriptorMap FindInstalledBrowserPackages(
+    const std::string& response) {
+  // Parse 'pm list packages' output which on Android looks like this:
+  //
+  // package:com.android.chrome
+  // package:com.chrome.beta
+  // package:com.example.app
+  //
+  DescriptorMap package_to_descriptor;
+  const std::string package_prefix = "package:";
+  std::vector<std::string> entries;
+  Tokenize(response, "'\r\n", &entries);
+  for (size_t i = 0; i < entries.size(); ++i) {
+    if (entries[i].find(package_prefix) != 0)
+      continue;
+    std::string package = entries[i].substr(package_prefix.size());
+    const BrowserDescriptor* descriptor = FindBrowserDescriptor(package);
+    if (!descriptor)
+      continue;
+    package_to_descriptor[descriptor->package] = descriptor;
+  }
+  return package_to_descriptor;
+}
+
+typedef std::map<std::string, std::string> StringMap;
+
+static void MapProcessesToPackages(const std::string& response,
+                                   StringMap& pid_to_package,
+                                   StringMap& package_to_pid) {
+  // Parse 'ps' output which on Android looks like this:
+  //
+  // USER PID PPID VSIZE RSS WCHAN PC ? NAME
+  //
+  std::vector<std::string> entries;
+  Tokenize(response, "\n", &entries);
+  for (size_t i = 1; i < entries.size(); ++i) {
+    std::vector<std::string> fields;
+    Tokenize(entries[i], " \r", &fields);
+    if (fields.size() < 9)
+      continue;
+    std::string pid = fields[1];
+    std::string package = fields[8];
+    pid_to_package[pid] = package;
+    package_to_pid[package] = pid;
+  }
+}
+
+typedef std::map<std::string,
+                 scoped_refptr<DevToolsAndroidBridge::RemoteBrowser> >
+    BrowserMap;
+
+static StringMap MapSocketsToProcesses(const std::string& response,
+                                       const std::string& channel_pattern) {
+  // Parse 'cat /proc/net/unix' output which on Android looks like this:
+  //
+  // Num       RefCount Protocol Flags    Type St Inode Path
+  // 00000000: 00000002 00000000 00010000 0001 01 331813 /dev/socket/zygote
+  // 00000000: 00000002 00000000 00010000 0001 01 358606 @xxx_devtools_remote
+  // 00000000: 00000002 00000000 00010000 0001 01 347300 @yyy_devtools_remote
+  //
+  // We need to find records with paths starting from '@' (abstract socket)
+  // and containing the channel pattern ("_devtools_remote").
+  StringMap socket_to_pid;
+  std::vector<std::string> entries;
+  Tokenize(response, "\n", &entries);
+  for (size_t i = 1; i < entries.size(); ++i) {
+    std::vector<std::string> fields;
+    Tokenize(entries[i], " \r", &fields);
+    if (fields.size() < 8)
+      continue;
+    if (fields[3] != "00010000" || fields[5] != "01")
+      continue;
+    std::string path_field = fields[7];
+    if (path_field.size() < 1 || path_field[0] != '@')
+      continue;
+    size_t socket_name_pos = path_field.find(channel_pattern);
+    if (socket_name_pos == std::string::npos)
+      continue;
+
+    std::string socket = path_field.substr(1);
+
+    std::string pid;
+    size_t socket_name_end = socket_name_pos + channel_pattern.size();
+    if (socket_name_end < path_field.size() &&
+        path_field[socket_name_end] == '_') {
+      pid = path_field.substr(socket_name_end + 1);
+    }
+    socket_to_pid[socket] = pid;
+  }
+  return socket_to_pid;
+}
+
+// DiscoveryRequest -----------------------------------------------------
+
+class DiscoveryRequest : public base::RefCountedThreadSafe<
+    DiscoveryRequest,
+    BrowserThread::DeleteOnUIThread> {
+ public:
+  typedef base::Callback<void(DevToolsAndroidBridge::RemoteDevices*)> Callback;
+
+  DiscoveryRequest(
+      scoped_refptr<DevToolsAndroidBridge> android_bridge,
+      AndroidDeviceManager* device_manager,
+      base::MessageLoop* device_message_loop,
+      const AndroidDeviceManager::DeviceProviders& device_providers,
+      const Callback& callback);
+
+ private:
+  friend struct BrowserThread::DeleteOnThread<BrowserThread::UI>;
+  friend class base::DeleteHelper<DiscoveryRequest>;
+
+  virtual ~DiscoveryRequest();
+
+  void ReceivedSerials(const std::vector<std::string>& serials);
+  void ProcessSerials();
+  void ReceivedModel(int result, const std::string& response);
+  void ReceivedDumpsys(int result, const std::string& response);
+  void ReceivedPackages(int result, const std::string& response);
+  void ReceivedProcesses(
+      const std::string& packages_response,
+      int result,
+      const std::string& processes_response);
+  void ReceivedSockets(
+      const std::string& packages_response,
+      const std::string& processes_response,
+      int result,
+      const std::string& sockets_response);
+  void ProcessSockets();
+  void ReceivedVersion(int result, const std::string& response);
+  void ReceivedPages(int result, const std::string& response);
+
+  std::string current_serial() const { return serials_.back(); }
+
+  scoped_refptr<DevToolsAndroidBridge::RemoteBrowser> current_browser() const {
+    return browsers_.back();
+  }
+
+  void NextBrowser();
+  void NextDevice();
+
+  void Respond();
+
+  void CreateBrowsers(const std::string& packages_response,
+                      const std::string& processes_response,
+                      const std::string& sockets_response);
+
+  void ParseDumpsysResponse(const std::string& response);
+  void ParseScreenSize(const std::string& str);
+
+  scoped_refptr<DevToolsAndroidBridge> android_bridge_;
+  AndroidDeviceManager* device_manager_;
+  base::MessageLoop* device_message_loop_;
+  Callback callback_;
+  std::vector<std::string> serials_;
+  DevToolsAndroidBridge::RemoteBrowsers browsers_;
+  scoped_ptr<DevToolsAndroidBridge::RemoteDevices> remote_devices_;
+};
+
+DiscoveryRequest::DiscoveryRequest(
+    scoped_refptr<DevToolsAndroidBridge> android_bridge,
+    AndroidDeviceManager* device_manager,
+    base::MessageLoop* device_message_loop,
+    const AndroidDeviceManager::DeviceProviders& device_providers,
+    const Callback& callback)
+    : android_bridge_(android_bridge),
+      device_manager_(device_manager),
+      device_message_loop_(device_message_loop),
+      callback_(callback) {
+  remote_devices_.reset(new DevToolsAndroidBridge::RemoteDevices());
+
+  device_message_loop_->PostTask(
+      FROM_HERE, base::Bind(
+          &AndroidDeviceManager::QueryDevices,
+          device_manager_,
+          device_providers,
+          base::Bind(&DiscoveryRequest::ReceivedSerials, this)));
+}
+
+DiscoveryRequest::~DiscoveryRequest() {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+}
+
+void DiscoveryRequest::ReceivedSerials(
+    const std::vector<std::string>& serials) {
+  DCHECK_EQ(device_message_loop_, base::MessageLoop::current());
+  serials_ = serials;
+  ProcessSerials();
+}
+
+void DiscoveryRequest::ProcessSerials() {
+  DCHECK_EQ(device_message_loop_, base::MessageLoop::current());
+  if (serials_.size() == 0) {
+    BrowserThread::PostTask(
+        BrowserThread::UI, FROM_HERE,
+        base::Bind(&DiscoveryRequest::Respond, this));
+    return;
+  }
+
+  if (device_manager_->IsConnected(current_serial())) {
+    device_manager_->RunCommand(current_serial(), kDeviceModelCommand,
+        base::Bind(&DiscoveryRequest::ReceivedModel, this));
+  } else {
+    remote_devices_->push_back(new DevToolsAndroidBridge::RemoteDevice(
+        android_bridge_, current_serial(), kUnknownModel, false));
+    NextDevice();
+  }
+}
+
+void DiscoveryRequest::ReceivedModel(int result, const std::string& response) {
+  DCHECK_EQ(device_message_loop_, base::MessageLoop::current());
+  if (result < 0) {
+    NextDevice();
+    return;
+  }
+  remote_devices_->push_back(new DevToolsAndroidBridge::RemoteDevice(
+      android_bridge_, current_serial(), response, true));
+  device_manager_->RunCommand(current_serial(), kDumpsysCommand,
+      base::Bind(&DiscoveryRequest::ReceivedDumpsys, this));
+}
+
+void DiscoveryRequest::ReceivedDumpsys(int result,
+                                      const std::string& response) {
+  DCHECK_EQ(device_message_loop_, base::MessageLoop::current());
+  if (result >= 0)
+    ParseDumpsysResponse(response);
+
+  device_manager_->RunCommand(
+      current_serial(),
+      kInstalledChromePackagesCommand,
+      base::Bind(&DiscoveryRequest::ReceivedPackages, this));
+}
+
+void DiscoveryRequest::ReceivedPackages(int result,
+                                       const std::string& packages_response) {
+  DCHECK_EQ(device_message_loop_, base::MessageLoop::current());
+  if (result < 0) {
+    NextDevice();
+    return;
+  }
+  device_manager_->RunCommand(
+      current_serial(),
+      kListProcessesCommand,
+      base::Bind(
+          &DiscoveryRequest::ReceivedProcesses, this, packages_response));
+}
+
+void DiscoveryRequest::ReceivedProcesses(
+    const std::string& packages_response,
+    int result,
+    const std::string& processes_response) {
+  DCHECK_EQ(device_message_loop_, base::MessageLoop::current());
+  if (result < 0) {
+    NextDevice();
+    return;
+  }
+  device_manager_->RunCommand(
+      current_serial(),
+      kOpenedUnixSocketsCommand,
+      base::Bind(&DiscoveryRequest::ReceivedSockets,
+                 this,
+                 packages_response,
+                 processes_response));
+}
+
+void DiscoveryRequest::ReceivedSockets(
+    const std::string& packages_response,
+    const std::string& processes_response,
+    int result,
+    const std::string& sockets_response) {
+  DCHECK_EQ(device_message_loop_, base::MessageLoop::current());
+  if (result >= 0)
+    CreateBrowsers(packages_response, processes_response, sockets_response);
+  ProcessSockets();
+}
+
+void DiscoveryRequest::ProcessSockets() {
+  DCHECK_EQ(device_message_loop_, base::MessageLoop::current());
+  if (browsers_.size() == 0) {
+    NextDevice();
+    return;
+  }
+
+  device_manager_->HttpQuery(
+      current_serial(),
+      current_browser()->socket(),
+      kVersionRequest,
+      base::Bind(&DiscoveryRequest::ReceivedVersion, this));
+}
+
+void DiscoveryRequest::ReceivedVersion(int result,
+                                       const std::string& response) {
+  DCHECK_EQ(device_message_loop_, base::MessageLoop::current());
+  if (result < 0) {
+    NextBrowser();
+    return;
+  }
+
+  // Parse version, append to package name if available,
+  scoped_ptr<base::Value> value(base::JSONReader::Read(response));
+  base::DictionaryValue* dict;
+  if (value && value->GetAsDictionary(&dict)) {
+    std::string browser;
+    if (dict->GetString("Browser", &browser)) {
+      std::vector<std::string> parts;
+      Tokenize(browser, "/", &parts);
+      if (parts.size() == 2)
+        current_browser()->set_version(parts[1]);
+      else
+        current_browser()->set_version(browser);
+    }
+    std::string package;
+    if (dict->GetString("Android-Package", &package)) {
+      const BrowserDescriptor* descriptor = FindBrowserDescriptor(package);
+      if (descriptor)
+        current_browser()->set_display_name(descriptor->display_name);
+    }
+  }
+
+  device_manager_->HttpQuery(
+      current_serial(),
+      current_browser()->socket(),
+      kPageListRequest,
+      base::Bind(&DiscoveryRequest::ReceivedPages, this));
+}
+
+void DiscoveryRequest::ReceivedPages(int result,
+                                     const std::string& response) {
+  DCHECK_EQ(device_message_loop_, base::MessageLoop::current());
+  if (result >= 0) {
+    scoped_ptr<base::Value> value(base::JSONReader::Read(response));
+    base::ListValue* list_value;
+    if (value && value->GetAsList(&list_value))
+      current_browser()->SetPageDescriptors(*list_value);
+  }
+  NextBrowser();
+}
+
+void DiscoveryRequest::NextBrowser() {
+  browsers_.pop_back();
+  ProcessSockets();
+}
+
+void DiscoveryRequest::NextDevice() {
+  serials_.pop_back();
+  ProcessSerials();
+}
+
+void DiscoveryRequest::Respond() {
+  callback_.Run(remote_devices_.release());
+}
+
+void DiscoveryRequest::CreateBrowsers(
+    const std::string& packages_response,
+    const std::string& processes_response,
+    const std::string& sockets_response) {
+  DescriptorMap package_to_descriptor =
+      FindInstalledBrowserPackages(packages_response);
+
+  StringMap pid_to_package;
+  StringMap package_to_pid;
+  MapProcessesToPackages(processes_response, pid_to_package, package_to_pid);
+
+  const std::string channel_pattern =
+      base::StringPrintf(kDevToolsChannelNameFormat, "");
+
+  StringMap socket_to_pid = MapSocketsToProcesses(sockets_response,
+                                                  channel_pattern);
+
+  scoped_refptr<DevToolsAndroidBridge::RemoteDevice> remote_device =
+      remote_devices_->back();
+
+  // Create RemoteBrowser instances.
+  BrowserMap package_to_running_browser;
+  BrowserMap socket_to_unnamed_browser;
+  for (StringMap::iterator it = socket_to_pid.begin();
+      it != socket_to_pid.end(); ++it) {
+    std::string socket = it->first;
+    std::string pid = it->second;
+
+    scoped_refptr<DevToolsAndroidBridge::RemoteBrowser> browser =
+        new DevToolsAndroidBridge::RemoteBrowser(
+            android_bridge_, current_serial(), socket);
+
+    StringMap::iterator pit = pid_to_package.find(pid);
+    if (pit != pid_to_package.end()) {
+      std::string package = pit->second;
+      package_to_running_browser[package] = browser;
+      const BrowserDescriptor* descriptor = FindBrowserDescriptor(package);
+      if (descriptor) {
+        browser->set_display_name(descriptor->display_name);
+      } else if (socket.find(kWebViewSocketPrefix) == 0) {
+        browser->set_display_name(
+            base::StringPrintf(kWebViewNameTemplate, package.c_str()));
+      } else {
+        browser->set_display_name(package);
+      }
+    } else {
+      // Set fallback display name.
+      std::string name = socket.substr(0, socket.find(channel_pattern));
+      name[0] = base::ToUpperASCII(name[0]);
+      browser->set_display_name(name);
+
+      socket_to_unnamed_browser[socket] = browser;
+    }
+    remote_device->AddBrowser(browser);
+  }
+
+  browsers_ = remote_device->browsers();
+
+  // Find installed packages not mapped to browsers.
+  typedef std::multimap<std::string, const BrowserDescriptor*>
+      DescriptorMultimap;
+  DescriptorMultimap socket_to_descriptor;
+  for (DescriptorMap::iterator it = package_to_descriptor.begin();
+      it != package_to_descriptor.end(); ++it) {
+    std::string package = it->first;
+    const BrowserDescriptor* descriptor = it->second;
+
+    if (package_to_running_browser.find(package) !=
+        package_to_running_browser.end())
+      continue;  // This package is already mapped to a browser.
+
+    if (package_to_pid.find(package) != package_to_pid.end()) {
+      // This package is running but not mapped to a browser.
+      socket_to_descriptor.insert(
+          DescriptorMultimap::value_type(descriptor->socket, descriptor));
+      continue;
+    }
+  }
+
+  // Try naming remaining unnamed browsers.
+  for (DescriptorMultimap::iterator it = socket_to_descriptor.begin();
+      it != socket_to_descriptor.end(); ++it) {
+    std::string socket = it->first;
+    const BrowserDescriptor* descriptor = it->second;
+
+    if (socket_to_descriptor.count(socket) != 1)
+      continue;  // No definitive match.
+
+    BrowserMap::iterator bit = socket_to_unnamed_browser.find(socket);
+    if (bit != socket_to_unnamed_browser.end())
+      bit->second->set_display_name(descriptor->display_name);
+  }
+}
+
+void DiscoveryRequest::ParseDumpsysResponse(const std::string& response) {
+  std::vector<std::string> lines;
+  Tokenize(response, "\r", &lines);
+  for (size_t i = 0; i < lines.size(); ++i) {
+    std::string line = lines[i];
+    size_t pos = line.find(kDumpsysScreenSizePrefix);
+    if (pos != std::string::npos) {
+      ParseScreenSize(
+          line.substr(pos + std::string(kDumpsysScreenSizePrefix).size()));
+      break;
+    }
+  }
+}
+
+void DiscoveryRequest::ParseScreenSize(const std::string& str) {
+  std::vector<std::string> pairs;
+  Tokenize(str, "-", &pairs);
+  if (pairs.size() != 2)
+    return;
+
+  int width;
+  int height;
+  std::vector<std::string> numbers;
+  Tokenize(pairs[1].substr(1, pairs[1].size() - 2), ",", &numbers);
+  if (numbers.size() != 2 ||
+      !base::StringToInt(numbers[0], &width) ||
+      !base::StringToInt(numbers[1], &height))
+    return;
+
+  remote_devices_->back()->set_screen_size(gfx::Size(width, height));
+}
+
+
+// ProtocolCommand ------------------------------------------------------------
+
+class ProtocolCommand
+    : public DevToolsAndroidBridge::AndroidWebSocket::Delegate {
+ public:
+  ProtocolCommand(
+      scoped_refptr<DevToolsAndroidBridge::RemoteBrowser> browser,
+      const std::string& debug_url,
+      const std::string& command,
+      const base::Closure callback);
+
+ private:
+  virtual void OnSocketOpened() OVERRIDE;
+  virtual void OnFrameRead(const std::string& message) OVERRIDE;
+  virtual void OnSocketClosed(bool closed_by_device) OVERRIDE;
+
+  const std::string command_;
+  const base::Closure callback_;
+  scoped_refptr<DevToolsAndroidBridge::AndroidWebSocket> web_socket_;
+
+  DISALLOW_COPY_AND_ASSIGN(ProtocolCommand);
+};
+
+ProtocolCommand::ProtocolCommand(
+    scoped_refptr<DevToolsAndroidBridge::RemoteBrowser> browser,
+    const std::string& debug_url,
+    const std::string& command,
+    const base::Closure callback)
+    : command_(command),
+      callback_(callback){
+  web_socket_ = browser->CreateWebSocket(debug_url, this);
+}
+
+void ProtocolCommand::OnSocketOpened() {
+  web_socket_->SendFrame(command_);
+}
+
+void ProtocolCommand::OnFrameRead(const std::string& message) {
+  web_socket_->Disconnect();
+}
+
+void ProtocolCommand::OnSocketClosed(bool closed_by_device) {
+  if (!callback_.is_null()) {
+    callback_.Run();
+  }
+  delete this;
+}
+
+}  // namespace
+
+const char kDevToolsChannelNameFormat[] = "%s_devtools_remote";
+
+class AgentHostDelegate;
+
+typedef std::map<std::string, AgentHostDelegate*> AgentHostDelegates;
+
+base::LazyInstance<AgentHostDelegates>::Leaky g_host_delegates =
+    LAZY_INSTANCE_INITIALIZER;
+
+DevToolsAndroidBridge::Wrapper::Wrapper(content::BrowserContext* context) {
+  bridge_ = new DevToolsAndroidBridge(Profile::FromBrowserContext(context));
+}
+
+DevToolsAndroidBridge::Wrapper::~Wrapper() {
+}
+
+DevToolsAndroidBridge* DevToolsAndroidBridge::Wrapper::Get() {
+  return bridge_.get();
+}
+
+// static
+DevToolsAndroidBridge::Factory* DevToolsAndroidBridge::Factory::GetInstance() {
+  return Singleton<DevToolsAndroidBridge::Factory>::get();
+}
+
+// static
+DevToolsAndroidBridge* DevToolsAndroidBridge::Factory::GetForProfile(
+    Profile* profile) {
+  DevToolsAndroidBridge::Wrapper* wrapper =
+      static_cast<DevToolsAndroidBridge::Wrapper*>(GetInstance()->
+          GetServiceForBrowserContext(profile, true));
+  return wrapper ? wrapper->Get() : NULL;
+}
+
+DevToolsAndroidBridge::Factory::Factory()
+    : BrowserContextKeyedServiceFactory(
+          "DevToolsAndroidBridge",
+          BrowserContextDependencyManager::GetInstance()) {}
+
+DevToolsAndroidBridge::Factory::~Factory() {}
+
+KeyedService* DevToolsAndroidBridge::Factory::BuildServiceInstanceFor(
+    content::BrowserContext* context) const {
+  return new DevToolsAndroidBridge::Wrapper(context);
+}
+
+
+// AgentHostDelegate ----------------------------------------------------------
+
+class AgentHostDelegate
+    : public content::DevToolsExternalAgentProxyDelegate,
+      public DevToolsAndroidBridge::AndroidWebSocket::Delegate {
+ public:
+  static void Create(
+      const std::string& id,
+      scoped_refptr<DevToolsAndroidBridge::RemoteBrowser> browser,
+      const std::string& debug_url,
+      const std::string& frontend_url,
+      Profile* profile) {
+    DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+    AgentHostDelegates::iterator it =
+        g_host_delegates.Get().find(id);
+    if (it != g_host_delegates.Get().end()) {
+      it->second->OpenFrontend();
+    } else if (!frontend_url.empty()) {
+      new AgentHostDelegate(
+          id, browser, debug_url, frontend_url, profile);
+    }
+  }
+
+ private:
+  AgentHostDelegate(
+      const std::string& id,
+      scoped_refptr<DevToolsAndroidBridge::RemoteBrowser> browser,
+      const std::string& debug_url,
+      const std::string& frontend_url,
+      Profile* profile)
+      : id_(id),
+        frontend_url_(frontend_url),
+        profile_(profile) {
+    web_socket_ = browser->CreateWebSocket(debug_url, this);
+    g_host_delegates.Get()[id] = this;
+
+    if (browser->socket().find(kWebViewSocketPrefix) == 0) {
+      content::RecordAction(
+          base::UserMetricsAction("DevTools_InspectAndroidWebView"));
+    } else {
+      content::RecordAction(
+          base::UserMetricsAction("DevTools_InspectAndroidPage"));
+    }
+  }
+
+  void OpenFrontend() {
+    if (!proxy_)
+      return;
+    DevToolsWindow::OpenExternalFrontend(
+        profile_, frontend_url_, proxy_->GetAgentHost().get());
+  }
+
+  virtual ~AgentHostDelegate() {
+    g_host_delegates.Get().erase(id_);
+  }
+
+  virtual void Attach() OVERRIDE {}
+
+  virtual void Detach() OVERRIDE {
+    web_socket_->Disconnect();
+  }
+
+  virtual void SendMessageToBackend(const std::string& message) OVERRIDE {
+    web_socket_->SendFrame(message);
+  }
+
+  virtual void OnSocketOpened() OVERRIDE {
+    proxy_.reset(content::DevToolsExternalAgentProxy::Create(this));
+    OpenFrontend();
+  }
+
+  virtual void OnFrameRead(const std::string& message) OVERRIDE {
+    proxy_->DispatchOnClientHost(message);
+  }
+
+  virtual void OnSocketClosed(bool closed_by_device) OVERRIDE {
+    if (proxy_ && closed_by_device)
+      proxy_->ConnectionClosed();
+    delete this;
+  }
+
+  const std::string id_;
+  const std::string frontend_url_;
+  Profile* profile_;
+
+  scoped_ptr<content::DevToolsExternalAgentProxy> proxy_;
+  scoped_refptr<DevToolsAndroidBridge::AndroidWebSocket> web_socket_;
+  DISALLOW_COPY_AND_ASSIGN(AgentHostDelegate);
+};
+
+//// RemotePageTarget ----------------------------------------------
+
+class RemotePageTarget : public DevToolsTargetImpl {
+ public:
+  RemotePageTarget(scoped_refptr<DevToolsAndroidBridge::RemoteBrowser> browser,
+                   const base::DictionaryValue& value);
+  virtual ~RemotePageTarget();
+
+  // content::DevToolsTarget overrides:
+  virtual bool IsAttached() const OVERRIDE;
+  virtual bool Activate() const OVERRIDE;
+  virtual bool Close() const OVERRIDE;
+
+  // DevToolsTargetImpl overrides:
+  virtual void Inspect(Profile* profile) const OVERRIDE;
+  virtual void Reload() const OVERRIDE;
+
+  void Navigate(const std::string& url, base::Closure callback) const;
+
+ private:
+  scoped_refptr<DevToolsAndroidBridge::RemoteBrowser> browser_;
+  std::string debug_url_;
+  std::string frontend_url_;
+  std::string remote_id_;
+  DISALLOW_COPY_AND_ASSIGN(RemotePageTarget);
+};
+
+RemotePageTarget::RemotePageTarget(
+    scoped_refptr<DevToolsAndroidBridge::RemoteBrowser> browser,
+    const base::DictionaryValue& value)
+    : browser_(browser) {
+  type_ = "adb_page";
+  value.GetString("id", &remote_id_);
+  std::string url;
+  value.GetString("url", &url);
+  url_ = GURL(url);
+  value.GetString("title", &title_);
+  title_ = base::UTF16ToUTF8(net::UnescapeForHTML(base::UTF8ToUTF16(title_)));
+  value.GetString("description", &description_);
+  std::string favicon_url;
+  value.GetString("faviconUrl", &favicon_url);
+  favicon_url_ = GURL(favicon_url);
+  value.GetString("webSocketDebuggerUrl", &debug_url_);
+  value.GetString("devtoolsFrontendUrl", &frontend_url_);
+
+  if (remote_id_.empty() && !debug_url_.empty())  {
+    // Target id is not available until Chrome 26. Use page id at the end of
+    // debug_url_ instead. For attached targets the id will remain empty.
+    std::vector<std::string> parts;
+    Tokenize(debug_url_, "/", &parts);
+    remote_id_ = parts[parts.size()-1];
+  }
+
+  if (debug_url_.find("ws://") == 0)
+    debug_url_ = debug_url_.substr(5);
+  else
+    debug_url_ = "";
+
+  size_t ws_param = frontend_url_.find("?ws");
+  if (ws_param != std::string::npos)
+    frontend_url_ = frontend_url_.substr(0, ws_param);
+  if (frontend_url_.find("http:") == 0)
+    frontend_url_ = "https:" + frontend_url_.substr(5);
+
+  id_ = base::StringPrintf("%s:%s:%s",
+      browser_->serial().c_str(),
+      browser_->socket().c_str(),
+      remote_id_.c_str());
+}
+
+RemotePageTarget::~RemotePageTarget() {
+}
+
+bool RemotePageTarget::IsAttached() const {
+  return debug_url_.empty();
+}
+
+static void NoOp(int, const std::string&) {}
+
+static void CallClosure(base::Closure closure, int, const std::string&) {
+  closure.Run();
+}
+
+void RemotePageTarget::Inspect(Profile* profile) const {
+  std::string request = base::StringPrintf(kActivatePageRequest,
+                                           remote_id_.c_str());
+  base::Closure inspect_callback = base::Bind(&AgentHostDelegate::Create,
+      id_, browser_, debug_url_, frontend_url_, profile);
+  browser_->SendJsonRequest(
+      request, base::Bind(&CallClosure, inspect_callback));
+}
+
+bool RemotePageTarget::Activate() const {
+  std::string request = base::StringPrintf(kActivatePageRequest,
+                                           remote_id_.c_str());
+  browser_->SendJsonRequest(request, base::Bind(&NoOp));
+  return true;
+}
+
+bool RemotePageTarget::Close() const {
+  if (IsAttached())
+    return false;
+  std::string request = base::StringPrintf(kClosePageRequest,
+                                           remote_id_.c_str());
+  browser_->SendJsonRequest(request, base::Bind(&NoOp));
+  return true;
+}
+
+void RemotePageTarget::Reload() const {
+  browser_->SendProtocolCommand(debug_url_, kPageReloadCommand, NULL,
+                                base::Closure());
+}
+
+void RemotePageTarget::Navigate(const std::string& url,
+                                base::Closure callback) const {
+  base::DictionaryValue params;
+  params.SetString(kUrlParam, url);
+  browser_->SendProtocolCommand(debug_url_, kPageNavigateCommand, &params,
+                                callback);
+}
+
+// DevToolsAndroidBridge::RemoteBrowser ---------------------------------------
+
+DevToolsAndroidBridge::RemoteBrowser::RemoteBrowser(
+    scoped_refptr<DevToolsAndroidBridge> android_bridge,
+    const std::string& serial,
+    const std::string& socket)
+    : android_bridge_(android_bridge),
+      serial_(serial),
+      socket_(socket),
+      page_descriptors_(new base::ListValue()) {
+}
+
+bool DevToolsAndroidBridge::RemoteBrowser::IsChrome() const {
+  return socket_.find(kChromeDefaultSocket) == 0;
+}
+
+DevToolsAndroidBridge::RemoteBrowser::ParsedVersion
+DevToolsAndroidBridge::RemoteBrowser::GetParsedVersion() const {
+  ParsedVersion result;
+  std::vector<std::string> parts;
+  Tokenize(version_, ".", &parts);
+  for (size_t i = 0; i != parts.size(); ++i) {
+    int value = 0;
+    base::StringToInt(parts[i], &value);
+    result.push_back(value);
+  }
+  return result;
+}
+
+std::vector<DevToolsTargetImpl*>
+DevToolsAndroidBridge::RemoteBrowser::CreatePageTargets() {
+  std::vector<DevToolsTargetImpl*> result;
+  for (size_t i = 0; i < page_descriptors_->GetSize(); ++i) {
+    base::Value* item;
+    page_descriptors_->Get(i, &item);
+    if (!item)
+      continue;
+    base::DictionaryValue* dict;
+    if (!item->GetAsDictionary(&dict))
+      continue;
+    result.push_back(new RemotePageTarget(this, *dict));
+  }
+  return result;
+}
+
+void DevToolsAndroidBridge::RemoteBrowser::SetPageDescriptors(
+    const base::ListValue& list) {
+  page_descriptors_.reset(list.DeepCopy());
+}
+
+static void RespondOnUIThread(
+    const DevToolsAndroidBridge::RemoteBrowser::JsonRequestCallback& callback,
+    int result,
+    const std::string& response) {
+  if (callback.is_null())
+    return;
+  BrowserThread::PostTask(
+      BrowserThread::UI, FROM_HERE, base::Bind(callback, result, response));
+}
+
+void DevToolsAndroidBridge::RemoteBrowser::SendJsonRequest(
+    const std::string& request, const JsonRequestCallback& callback) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  android_bridge_->device_message_loop()->PostTask(
+      FROM_HERE,
+      base::Bind(&AndroidDeviceManager::HttpQuery,
+                 android_bridge_->device_manager(), serial_, socket_, request,
+                 base::Bind(&RespondOnUIThread, callback)));
+}
+
+void DevToolsAndroidBridge::RemoteBrowser::SendProtocolCommand(
+    const std::string& debug_url,
+    const std::string& method,
+    base::DictionaryValue* params,
+    const base::Closure callback) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  if (debug_url.empty())
+    return;
+  DevToolsProtocol::Command command(1, method, params);
+  new ProtocolCommand(this, debug_url, command.Serialize(), callback);
+}
+
+void DevToolsAndroidBridge::RemoteBrowser::Open(const std::string& url) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  Open(url, JsonRequestCallback());
+}
+
+void DevToolsAndroidBridge::RemoteBrowser::OpenAndInspect(
+    const std::string& url,
+    Profile* profile) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  Open(url,
+       base::Bind(&RemoteBrowser::InspectAfterOpenOnUIThread, this, profile));
+}
+
+void DevToolsAndroidBridge::RemoteBrowser::Open(
+    const std::string& input_url,
+    const JsonRequestCallback& callback) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  GURL gurl(input_url);
+  if (!gurl.is_valid()) {
+    gurl = GURL("http://" + input_url);
+    if (!gurl.is_valid())
+     return;
+  }
+  std::string url = gurl.spec();
+
+  ParsedVersion parsed_version = GetParsedVersion();
+  if (IsChrome() &&
+      !parsed_version.empty() &&
+      parsed_version[0] >= kMinVersionNewWithURL) {
+    std::string query = net::EscapeQueryParamValue(url, false /* use_plus */);
+    std::string request =
+        base::StringPrintf(kNewPageRequestWithURL, query.c_str());
+    SendJsonRequest(request, callback);
+  } else {
+    SendJsonRequest(kNewPageRequest,
+        base::Bind(&RemoteBrowser::PageCreatedOnUIThread, this,
+                   callback, url));
+  }
+}
+
+void DevToolsAndroidBridge::RemoteBrowser::InspectAfterOpenOnUIThread(
+    Profile* profile, int result, const std::string& response) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  if (result < 0)
+    return;
+  scoped_ptr<base::Value> value(base::JSONReader::Read(response));
+  base::DictionaryValue* dict;
+  if (value && value->GetAsDictionary(&dict)) {
+    RemotePageTarget new_page(this, *dict);
+    new_page.Inspect(profile);
+  }
+}
+
+void DevToolsAndroidBridge::RemoteBrowser::PageCreatedOnUIThread(
+    const JsonRequestCallback& callback,
+    const std::string& url, int result, const std::string& response) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+
+  if (result < 0)
+    return;
+  // Navigating too soon after the page creation breaks navigation history
+  // (crbug.com/311014). This can be avoided by adding a moderate delay.
+  BrowserThread::PostDelayedTask(
+      BrowserThread::UI, FROM_HERE,
+      base::Bind(&RemoteBrowser::NavigatePageOnUIThread,
+                 this, callback, result, response, url),
+      base::TimeDelta::FromMilliseconds(kNewPageNavigateDelayMs));
+}
+
+void DevToolsAndroidBridge::RemoteBrowser::NavigatePageOnUIThread(
+    const JsonRequestCallback& callback,
+    int result, const std::string& response, const std::string& url) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  scoped_ptr<base::Value> value(base::JSONReader::Read(response));
+  base::DictionaryValue* dict;
+
+  if (value && value->GetAsDictionary(&dict)) {
+    RemotePageTarget new_page(this, *dict);
+    new_page.Navigate(url,
+        base::Bind(&RespondOnUIThread, callback, result, response));
+  }
+}
+
+DevToolsAndroidBridge::RemoteBrowser::~RemoteBrowser() {
+}
+
+
+// DevToolsAndroidBridge::RemoteDevice ----------------------------------------
+
+DevToolsAndroidBridge::RemoteDevice::RemoteDevice(
+    scoped_refptr<DevToolsAndroidBridge> android_bridge,
+    const std::string& serial,
+    const std::string& model,
+    bool connected)
+    : android_bridge_(android_bridge),
+      serial_(serial),
+      model_(model),
+      connected_(connected) {
+}
+
+void DevToolsAndroidBridge::RemoteDevice::AddBrowser(
+    scoped_refptr<RemoteBrowser> browser) {
+  browsers_.push_back(browser);
+}
+
+void DevToolsAndroidBridge::RemoteDevice::OpenSocket(
+    const std::string& socket_name,
+    const AndroidDeviceManager::SocketCallback& callback) {
+  android_bridge_->device_message_loop()->PostTask(FROM_HERE,
+      base::Bind(&AndroidDeviceManager::OpenSocket,
+                 android_bridge_->device_manager(),
+                 serial_,
+                 socket_name,
+                 callback));
+}
+
+DevToolsAndroidBridge::RemoteDevice::~RemoteDevice() {
+}
+
+// DevToolsAndroidBridge::HandlerThread ---------------------------------
+
+const char kDevToolsAdbBridgeThreadName[] = "Chrome_DevToolsADBThread";
+
+DevToolsAndroidBridge::HandlerThread*
+DevToolsAndroidBridge::HandlerThread::instance_ = NULL;
+
+// static
+scoped_refptr<DevToolsAndroidBridge::HandlerThread>
+DevToolsAndroidBridge::HandlerThread::GetInstance() {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  if (!instance_)
+    new HandlerThread();
+  return instance_;
+}
+
+DevToolsAndroidBridge::HandlerThread::HandlerThread() {
+  instance_ = this;
+  thread_ = new base::Thread(kDevToolsAdbBridgeThreadName);
+  base::Thread::Options options;
+  options.message_loop_type = base::MessageLoop::TYPE_IO;
+  if (!thread_->StartWithOptions(options)) {
+    delete thread_;
+    thread_ = NULL;
+  }
+}
+
+base::MessageLoop* DevToolsAndroidBridge::HandlerThread::message_loop() {
+  return thread_ ? thread_->message_loop() : NULL;
+}
+
+// static
+void DevToolsAndroidBridge::HandlerThread::StopThread(
+    base::Thread* thread) {
+  thread->Stop();
+}
+
+DevToolsAndroidBridge::HandlerThread::~HandlerThread() {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  instance_ = NULL;
+  if (!thread_)
+    return;
+  // Shut down thread on FILE thread to join into IO.
+  BrowserThread::PostTask(
+      BrowserThread::FILE, FROM_HERE,
+      base::Bind(&HandlerThread::StopThread, thread_));
+}
+
+// DevToolsAndroidBridge ------------------------------------------------------
+
+DevToolsAndroidBridge::DevToolsAndroidBridge(Profile* profile)
+    : profile_(profile),
+      handler_thread_(HandlerThread::GetInstance()) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  pref_change_registrar_.Init(profile_->GetPrefs());
+  pref_change_registrar_.Add(prefs::kDevToolsDiscoverUsbDevicesEnabled,
+      base::Bind(&DevToolsAndroidBridge::CreateDeviceProviders,
+                 base::Unretained(this)));
+  CreateDeviceProviders();
+  base::PostTaskAndReplyWithResult(
+      device_message_loop()->message_loop_proxy(),
+      FROM_HERE,
+      base::Bind(&AndroidDeviceManager::Create),
+      base::Bind(&DevToolsAndroidBridge::CreatedDeviceManager, this));
+}
+
+void DevToolsAndroidBridge::AddDeviceListListener(
+    DeviceListListener* listener) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  device_list_listeners_.push_back(listener);
+  if (device_list_listeners_.size() == 1 && device_manager_)
+    RequestDeviceList();
+}
+
+void DevToolsAndroidBridge::RemoveDeviceListListener(
+    DeviceListListener* listener) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  DeviceListListeners::iterator it = std::find(
+      device_list_listeners_.begin(), device_list_listeners_.end(), listener);
+  DCHECK(it != device_list_listeners_.end());
+  device_list_listeners_.erase(it);
+  if (device_list_listeners_.empty() && device_manager_) {
+    device_message_loop()->PostTask(FROM_HERE,
+        base::Bind(&AndroidDeviceManager::Stop, device_manager_));
+  }
+}
+
+void DevToolsAndroidBridge::AddDeviceCountListener(
+    DeviceCountListener* listener) {
+  device_count_listeners_.push_back(listener);
+  if (device_count_listeners_.size() == 1 && device_manager_)
+    RequestDeviceCount();
+}
+
+void DevToolsAndroidBridge::RemoveDeviceCountListener(
+    DeviceCountListener* listener) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  DeviceCountListeners::iterator it = std::find(
+      device_count_listeners_.begin(), device_count_listeners_.end(), listener);
+  DCHECK(it != device_count_listeners_.end());
+  device_count_listeners_.erase(it);
+}
+
+// static
+bool DevToolsAndroidBridge::HasDevToolsWindow(const std::string& agent_id) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  return g_host_delegates.Get().find(agent_id) != g_host_delegates.Get().end();
+}
+
+DevToolsAndroidBridge::~DevToolsAndroidBridge() {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  DCHECK(device_list_listeners_.empty());
+  DCHECK(device_count_listeners_.empty());
+  if (device_manager_)
+    device_message_loop()->PostTask(FROM_HERE,
+        base::Bind(&AndroidDeviceManager::Stop, device_manager_));
+}
+
+void DevToolsAndroidBridge::RequestDeviceList() {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  DCHECK(device_manager_);
+
+  if (device_list_listeners_.empty())
+    return;
+
+  new DiscoveryRequest(
+      this,
+      device_manager(),
+      device_message_loop(),
+      device_providers_,
+      base::Bind(&DevToolsAndroidBridge::ReceivedDeviceList, this));
+}
+
+void DevToolsAndroidBridge::CreatedDeviceManager(
+    scoped_refptr<AndroidDeviceManager> device_manager) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  device_manager_ = device_manager;
+  if (!device_list_listeners_.empty())
+    RequestDeviceList();
+  if (!device_count_listeners_.empty())
+    RequestDeviceCount();
+}
+
+void DevToolsAndroidBridge::ReceivedDeviceList(RemoteDevices* devices_ptr) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+
+  scoped_ptr<RemoteDevices> devices(devices_ptr);
+
+  if (device_list_listeners_.empty())
+    return;
+
+  DeviceListListeners copy(device_list_listeners_);
+  for (DeviceListListeners::iterator it = copy.begin(); it != copy.end(); ++it)
+    (*it)->DeviceListChanged(*devices.get());
+
+  BrowserThread::PostDelayedTask(
+      BrowserThread::UI,
+      FROM_HERE,
+      base::Bind(&DevToolsAndroidBridge::RequestDeviceList, this),
+      base::TimeDelta::FromMilliseconds(kAdbPollingIntervalMs));
+}
+
+void DevToolsAndroidBridge::RequestDeviceCount() {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  DCHECK(device_manager_);
+
+  if (device_count_listeners_.empty())
+    return;
+
+  AndroidUsbDevice::CountDevices(
+      base::Bind(&DevToolsAndroidBridge::ReceivedDeviceCount, this));
+}
+
+void DevToolsAndroidBridge::ReceivedDeviceCount(int count) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+
+  if (device_count_listeners_.empty())
+     return;
+
+  DeviceCountListeners copy(device_count_listeners_);
+  for (DeviceCountListeners::iterator it = copy.begin(); it != copy.end(); ++it)
+    (*it)->DeviceCountChanged(count);
+
+  BrowserThread::PostDelayedTask(
+      BrowserThread::UI,
+      FROM_HERE,
+      base::Bind(&DevToolsAndroidBridge::RequestDeviceCount, this),
+      base::TimeDelta::FromMilliseconds(kAdbPollingIntervalMs));
+}
+
+void DevToolsAndroidBridge::CreateDeviceProviders() {
+  device_providers_.clear();
+#if defined(DEBUG_DEVTOOLS)
+  BrowserListTabContentsProvider::EnableTethering();
+  // We cannot rely on command line switch here as we might want to connect
+  // to another instance of Chrome. Using hard-coded port number instead.
+  const int kDefaultDebuggingPort = 9222;
+  device_providers_.push_back(
+      AndroidDeviceManager::GetSelfAsDeviceProvider(kDefaultDebuggingPort));
+#endif
+  device_providers_.push_back(AndroidDeviceManager::GetAdbDeviceProvider());
+
+  PrefService* service = profile_->GetPrefs();
+  const PrefService::Preference* pref =
+      service->FindPreference(prefs::kDevToolsDiscoverUsbDevicesEnabled);
+  const base::Value* pref_value = pref->GetValue();
+
+  bool enabled;
+  if (pref_value->GetAsBoolean(&enabled) && enabled) {
+    device_providers_.push_back(
+        AndroidDeviceManager::GetUsbDeviceProvider(profile_));
+  }
+}
diff --git a/chrome/browser/devtools/device/devtools_android_bridge.h b/chrome/browser/devtools/device/devtools_android_bridge.h
new file mode 100644
index 0000000..93b1f61
--- /dev/null
+++ b/chrome/browser/devtools/device/devtools_android_bridge.h
@@ -0,0 +1,293 @@
+// 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.
+
+#ifndef CHROME_BROWSER_DEVTOOLS_DEVICE_DEVTOOLS_ANDROID_BRIDGE_H_
+#define CHROME_BROWSER_DEVTOOLS_DEVICE_DEVTOOLS_ANDROID_BRIDGE_H_
+
+#include <string>
+#include <vector>
+
+#include "base/callback.h"
+#include "base/memory/ref_counted.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/prefs/pref_change_registrar.h"
+#include "chrome/browser/devtools/device/android_device_manager.h"
+#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "components/keyed_service/core/keyed_service.h"
+#include "ui/gfx/size.h"
+
+template<typename T> struct DefaultSingletonTraits;
+
+namespace base {
+class MessageLoop;
+class DictionaryValue;
+class ListValue;
+class Thread;
+}
+
+namespace content {
+class BrowserContext;
+}
+
+namespace crypto {
+class RSAPrivateKey;
+}
+
+class DevToolsTargetImpl;
+class Profile;
+
+// The format used for constructing DevTools server socket names.
+extern const char kDevToolsChannelNameFormat[];
+
+class DevToolsAndroidBridge
+    : public base::RefCountedThreadSafe<
+          DevToolsAndroidBridge,
+          content::BrowserThread::DeleteOnUIThread> {
+ public:
+  typedef base::Callback<void(int result,
+                              const std::string& response)> Callback;
+
+  class Wrapper : public KeyedService {
+   public:
+    explicit Wrapper(content::BrowserContext* context);
+    virtual ~Wrapper();
+
+    DevToolsAndroidBridge* Get();
+   private:
+    scoped_refptr<DevToolsAndroidBridge> bridge_;
+  };
+
+  class Factory : public BrowserContextKeyedServiceFactory {
+   public:
+    // Returns singleton instance of DevToolsAndroidBridge.
+    static Factory* GetInstance();
+
+    // Returns DevToolsAndroidBridge associated with |profile|.
+    static DevToolsAndroidBridge* GetForProfile(Profile* profile);
+
+   private:
+    friend struct DefaultSingletonTraits<Factory>;
+
+    Factory();
+    virtual ~Factory();
+
+    // BrowserContextKeyedServiceFactory overrides:
+    virtual KeyedService* BuildServiceInstanceFor(
+        content::BrowserContext* context) const OVERRIDE;
+    DISALLOW_COPY_AND_ASSIGN(Factory);
+  };
+
+  class AndroidWebSocket : public base::RefCountedThreadSafe<AndroidWebSocket> {
+   public:
+    class Delegate {
+     public:
+      virtual void OnSocketOpened() = 0;
+      virtual void OnFrameRead(const std::string& message) = 0;
+      virtual void OnSocketClosed(bool closed_by_device) = 0;
+
+     protected:
+      virtual ~Delegate() {}
+    };
+
+    AndroidWebSocket() {}
+
+    virtual void Disconnect() = 0;
+
+    virtual void SendFrame(const std::string& message) = 0;
+
+   protected:
+    virtual ~AndroidWebSocket() {}
+
+   private:
+    friend class base::RefCountedThreadSafe<AndroidWebSocket>;
+
+    DISALLOW_COPY_AND_ASSIGN(AndroidWebSocket);
+  };
+
+  class RemoteBrowser : public base::RefCounted<RemoteBrowser> {
+   public:
+    RemoteBrowser(
+        scoped_refptr<DevToolsAndroidBridge> android_bridge,
+        const std::string& serial,
+        const std::string& socket);
+
+    std::string serial() { return serial_; }
+    std::string socket() { return socket_; }
+
+    std::string display_name() { return display_name_; }
+    void set_display_name(const std::string& name) { display_name_ = name; }
+
+    std::string version() { return version_; }
+    void set_version(const std::string& version) { version_ = version; }
+
+    bool IsChrome() const;
+
+    typedef std::vector<int> ParsedVersion;
+    ParsedVersion GetParsedVersion() const;
+
+    std::vector<DevToolsTargetImpl*> CreatePageTargets();
+    void SetPageDescriptors(const base::ListValue&);
+
+    typedef base::Callback<void(int, const std::string&)> JsonRequestCallback;
+    void SendJsonRequest(const std::string& request,
+                         const JsonRequestCallback& callback);
+    void SendProtocolCommand(const std::string& debug_url,
+                             const std::string& method,
+                             base::DictionaryValue* params,
+                             const base::Closure callback);
+
+    void Open(const std::string& url);
+    void OpenAndInspect(const std::string& url, Profile* profile);
+
+    scoped_refptr<AndroidWebSocket> CreateWebSocket(
+        const std::string& url,
+        DevToolsAndroidBridge::AndroidWebSocket::Delegate* delegate);
+
+   private:
+    friend class base::RefCounted<RemoteBrowser>;
+    virtual ~RemoteBrowser();
+
+    void Open(const std::string& url,
+              const JsonRequestCallback& callback);
+
+    void PageCreatedOnUIThread(
+        const JsonRequestCallback& callback,
+        const std::string& url, int result, const std::string& response);
+
+    void NavigatePageOnUIThread(const JsonRequestCallback& callback,
+        int result, const std::string& response, const std::string& url);
+
+    void InspectAfterOpenOnUIThread(Profile* profile, int result,
+                                    const std::string& response);
+
+    scoped_refptr<DevToolsAndroidBridge> android_bridge_;
+    const std::string serial_;
+    const std::string socket_;
+    std::string display_name_;
+    std::string version_;
+    scoped_ptr<base::ListValue> page_descriptors_;
+
+    DISALLOW_COPY_AND_ASSIGN(RemoteBrowser);
+  };
+
+  typedef std::vector<scoped_refptr<RemoteBrowser> > RemoteBrowsers;
+
+  class RemoteDevice : public base::RefCounted<RemoteDevice> {
+   public:
+    RemoteDevice(scoped_refptr<DevToolsAndroidBridge> android_bridge,
+                 const std::string& serial,
+                 const std::string& model,
+                 bool connected);
+
+    std::string serial() { return serial_; }
+    std::string model() { return model_; }
+    bool is_connected() { return connected_; }
+    void AddBrowser(scoped_refptr<RemoteBrowser> browser);
+
+    RemoteBrowsers& browsers() { return browsers_; }
+    gfx::Size screen_size() { return screen_size_; }
+    void set_screen_size(const gfx::Size& size) { screen_size_ = size; }
+
+    void OpenSocket(const std::string& socket_name,
+                    const AndroidDeviceManager::SocketCallback& callback);
+
+   private:
+    friend class base::RefCounted<RemoteDevice>;
+    virtual ~RemoteDevice();
+
+    scoped_refptr<DevToolsAndroidBridge> android_bridge_;
+    std::string serial_;
+    std::string model_;
+    bool connected_;
+    RemoteBrowsers browsers_;
+    gfx::Size screen_size_;
+
+    DISALLOW_COPY_AND_ASSIGN(RemoteDevice);
+  };
+
+  typedef std::vector<scoped_refptr<RemoteDevice> > RemoteDevices;
+
+  class DeviceListListener {
+   public:
+    virtual void DeviceListChanged(const RemoteDevices& devices) = 0;
+   protected:
+    virtual ~DeviceListListener() {}
+  };
+
+  explicit DevToolsAndroidBridge(Profile* profile);
+  void AddDeviceListListener(DeviceListListener* listener);
+  void RemoveDeviceListListener(DeviceListListener* listener);
+
+  class DeviceCountListener {
+   public:
+    virtual void DeviceCountChanged(int count) = 0;
+   protected:
+    virtual ~DeviceCountListener() {}
+  };
+
+  void AddDeviceCountListener(DeviceCountListener* listener);
+  void RemoveDeviceCountListener(DeviceCountListener* listener);
+
+  void set_device_providers_for_test(
+      const AndroidDeviceManager::DeviceProviders& device_providers) {
+    device_providers_ = device_providers;
+  }
+
+  static bool HasDevToolsWindow(const std::string& agent_id);
+
+ private:
+  friend struct content::BrowserThread::DeleteOnThread<
+      content::BrowserThread::UI>;
+  friend class base::DeleteHelper<DevToolsAndroidBridge>;
+
+  class HandlerThread : public base::RefCountedThreadSafe<HandlerThread> {
+   public:
+    static scoped_refptr<HandlerThread> GetInstance();
+    base::MessageLoop* message_loop();
+
+   private:
+    friend class base::RefCountedThreadSafe<HandlerThread>;
+    static HandlerThread* instance_;
+    static void StopThread(base::Thread* thread);
+
+    HandlerThread();
+    virtual ~HandlerThread();
+    base::Thread* thread_;
+  };
+
+  virtual ~DevToolsAndroidBridge();
+
+  base::MessageLoop* device_message_loop() {
+    return handler_thread_->message_loop();
+  }
+
+  AndroidDeviceManager* device_manager() {
+    return device_manager_.get();
+  }
+
+  void CreatedDeviceManager(scoped_refptr<AndroidDeviceManager> device_manager);
+  void RequestDeviceList();
+  void ReceivedDeviceList(RemoteDevices* devices);
+
+  void RequestDeviceCount();
+  void ReceivedDeviceCount(int count);
+
+  void CreateDeviceProviders();
+
+  Profile* profile_;
+  scoped_refptr<HandlerThread> handler_thread_;
+  scoped_refptr<AndroidDeviceManager> device_manager_;
+
+  typedef std::vector<DeviceListListener*> DeviceListListeners;
+  DeviceListListeners device_list_listeners_;
+
+  typedef std::vector<DeviceCountListener*> DeviceCountListeners;
+  DeviceCountListeners device_count_listeners_;
+
+  AndroidDeviceManager::DeviceProviders device_providers_;
+  PrefChangeRegistrar pref_change_registrar_;
+  DISALLOW_COPY_AND_ASSIGN(DevToolsAndroidBridge);
+};
+
+#endif  // CHROME_BROWSER_DEVTOOLS_DEVICE_DEVTOOLS_ANDROID_BRIDGE_H_
diff --git a/chrome/browser/devtools/device/devtools_android_bridge_browsertest.cc b/chrome/browser/devtools/device/devtools_android_bridge_browsertest.cc
new file mode 100644
index 0000000..ebc823f
--- /dev/null
+++ b/chrome/browser/devtools/device/devtools_android_bridge_browsertest.cc
@@ -0,0 +1,378 @@
+// 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.
+
+#include "chrome/browser/devtools/device/android_device_manager.h"
+#include "chrome/browser/devtools/device/devtools_android_bridge.h"
+#include "chrome/browser/devtools/devtools_target_impl.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/test/base/in_process_browser_test.h"
+#include "content/public/test/test_utils.h"
+
+const char kDeviceModelCommand[] = "shell:getprop ro.product.model";
+const char kOpenedUnixSocketsCommand[] = "shell:cat /proc/net/unix";
+const char kListProcessesCommand[] = "shell:ps";
+const char kListPackagesCommand[] = "shell:pm list packages";
+const char kDumpsysCommand[] = "shell:dumpsys window policy";
+
+const char kPageListRequest[] = "GET /json HTTP/1.1\r\n\r\n";
+const char kVersionRequest[] = "GET /json/version HTTP/1.1\r\n\r\n";
+
+const char kSampleOpenedUnixSockets[] =
+    "Num       RefCount Protocol Flags    Type St Inode Path\n"
+    "00000000: 00000004 00000000"
+    " 00000000 0002 01  3328 /dev/socket/wpa_wlan0\n"
+    "00000000: 00000002 00000000"
+    " 00010000 0001 01  5394 /dev/socket/vold\n"
+    "00000000: 00000002 00000000"
+    " 00010000 0001 01 11810 @webview_devtools_remote_2425\n"
+    "00000000: 00000002 00000000"
+    " 00010000 0001 01 20893 @chrome_devtools_remote\n"
+    "00000000: 00000002 00000000"
+    " 00010000 0001 01 20894 @chrome_devtools_remote_1002\n"
+    "00000000: 00000002 00000000"
+    " 00010000 0001 01 20895 @noprocess_devtools_remote\n";
+
+const char kSampleListProcesses[] =
+    "USER   PID  PPID VSIZE  RSS    WCHAN    PC         NAME\n"
+    "root   1    0    688    508    ffffffff 00000000 S /init\r\n"
+    "u0_a75 2425 123  933736 193024 ffffffff 00000000 S com.sample.feed\r\n"
+    "nfc    741  123  706448 26316  ffffffff 00000000 S com.android.nfc\r\n"
+    "u0_a76 1001 124  111111 222222 ffffffff 00000000 S com.android.chrome\r\n"
+    "u0_a77 1002 125  111111 222222 ffffffff 00000000 S com.chrome.beta\r\n"
+    "u0_a78 1003 126  111111 222222 ffffffff 00000000 S com.noprocess.app\r\n";
+
+const char kSampleListPackages[] =
+    "package:com.sample.feed\r\n"
+    "package:com.android.nfc\r\n"
+    "package:com.android.chrome\r\n"
+    "package:com.chrome.beta\r\n"
+    "package:com.google.android.apps.chrome\r\n";
+
+const char kSampleDumpsysCommand[] =
+    "WINDOW MANAGER POLICY STATE (dumpsys window policy)\r\n"
+    "    mSafeMode=false mSystemReady=true mSystemBooted=true\r\n"
+    "    mStable=(0,50)-(720,1184)\r\n" // Only mStable parameter is parsed
+    "    mForceStatusBar=false mForceStatusBarFromKeyguard=false\r\n";
+
+char kSampleChromeVersion[] = "{\n"
+    "   \"Browser\": \"Chrome/32.0.1679.0\",\n"
+    "   \"Protocol-Version\": \"1.0\",\n"
+    "   \"User-Agent\": \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 "
+    "(KHTML, like Gecko) Chrome/32.0.1679.0 Safari/537.36\",\n"
+    "   \"WebKit-Version\": \"537.36 (@160162)\"\n"
+    "}";
+
+char kSampleChromeBetaVersion[] = "{\n"
+    "   \"Browser\": \"Chrome/31.0.1599.0\",\n"
+    "   \"Protocol-Version\": \"1.0\",\n"
+    "   \"User-Agent\": \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 "
+    "(KHTML, like Gecko) Chrome/32.0.1679.0 Safari/537.36\",\n"
+    "   \"WebKit-Version\": \"537.36 (@160162)\"\n"
+    "}";
+
+char kSampleWebViewVersion[] = "{\n"
+    "   \"Browser\": \"Version/4.0\",\n"
+    "   \"Protocol-Version\": \"1.0\",\n"
+    "   \"User-Agent\": \"Mozilla/5.0 (Linux; Android 4.3; Build/KRS74B) "
+    "AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Safari/537.36\",\n"
+    "   \"WebKit-Version\": \"537.36 (@157588)\"\n"
+    "}";
+
+char kSampleChromePages[] = "[ {\n"
+    "   \"description\": \"\",\n"
+    "   \"devtoolsFrontendUrl\": \"/devtools/devtools.html?"
+    "ws=/devtools/page/755DE5C9-D49F-811D-0693-51B8E15C80D2\",\n"
+    "   \"id\": \"755DE5C9-D49F-811D-0693-51B8E15C80D2\",\n"
+    "   \"title\": \"The Chromium Projects\",\n"
+    "   \"type\": \"page\",\n"
+    "   \"url\": \"http://www.chromium.org/\",\n"
+    "   \"webSocketDebuggerUrl\": \""
+    "ws:///devtools/page/755DE5C9-D49F-811D-0693-51B8E15C80D2\"\n"
+    "} ]";
+
+char kSampleChromeBetaPages[] = "[]";
+
+char kSampleWebViewPages[] = "[ {\n"
+    "   \"description\": \"{\\\"attached\\\":false,\\\"empty\\\":false,"
+    "\\\"height\\\":1173,\\\"screenX\\\":0,\\\"screenY\\\":0,"
+    "\\\"visible\\\":true,\\\"width\\\":800}\",\n"
+    "   \"devtoolsFrontendUrl\": \"http://chrome-devtools-frontend.appspot.com/"
+    "serve_rev/@157588/devtools.html?ws="
+    "/devtools/page/3E962D4D-B676-182D-3BE8-FAE7CE224DE7\",\n"
+    "   \"faviconUrl\": \"http://chromium.org/favicon.ico\",\n"
+    "   \"id\": \"3E962D4D-B676-182D-3BE8-FAE7CE224DE7\",\n"
+    "   \"thumbnailUrl\": \"/thumb/3E962D4D-B676-182D-3BE8-FAE7CE224DE7\",\n"
+    "   \"title\": \"Blink - The Chromium Projects\",\n"
+    "   \"type\": \"page\",\n"
+    "   \"url\": \"http://www.chromium.org/blink\",\n"
+    "   \"webSocketDebuggerUrl\": \"ws:///devtools/"
+    "page/3E962D4D-B676-182D-3BE8-FAE7CE224DE7\"\n"
+    "}, {\n"
+    "   \"description\": \"{\\\"attached\\\":true,\\\"empty\\\":true,"
+    "\\\"screenX\\\":0,\\\"screenY\\\":33,\\\"visible\\\":false}\",\n"
+    "   \"devtoolsFrontendUrl\": \"http://chrome-devtools-frontend.appspot.com/"
+    "serve_rev/@157588/devtools.html?ws="
+    "/devtools/page/44681551-ADFD-2411-076B-3AB14C1C60E2\",\n"
+    "   \"faviconUrl\": \"\",\n"
+    "   \"id\": \"44681551-ADFD-2411-076B-3AB14C1C60E2\",\n"
+    "   \"thumbnailUrl\": \"/thumb/44681551-ADFD-2411-076B-3AB14C1C60E2\",\n"
+    "   \"title\": \"More Activity\",\n"
+    "   \"type\": \"page\",\n"
+    "   \"url\": \"about:blank\",\n"
+    "   \"webSocketDebuggerUrl\": \"ws:///devtools/page/"
+    "44681551-ADFD-2411-076B-3AB14C1C60E2\"\n"
+    "}]";
+
+class MockDeviceImpl : public AndroidDeviceManager::Device {
+ public:
+  MockDeviceImpl(const std::string& serial, int index,
+                 bool connected, const char* device_model)
+      : Device(serial, connected),
+        device_model_(device_model)
+  {}
+
+  virtual void RunCommand(const std::string& command,
+                            const CommandCallback& callback) OVERRIDE {
+    const char* response;
+
+    if (command == kDeviceModelCommand) {
+      response = device_model_;
+    } else if (command == kOpenedUnixSocketsCommand) {
+      response = kSampleOpenedUnixSockets;
+    } else if (command == kListProcessesCommand) {
+      response = kSampleListProcesses;
+    } else if (command == kListPackagesCommand) {
+      response = kSampleListPackages;
+    } else if (command == kDumpsysCommand) {
+      response = kSampleDumpsysCommand;
+    } else {
+      NOTREACHED();
+      return;
+    }
+
+    base::MessageLoop::current()->PostTask( FROM_HERE,
+              base::Bind(&MockDeviceImpl::RunCommandCallback,
+                         this, callback, 0, response));
+  }
+
+  void RunCommandCallback(const CommandCallback& callback, int result,
+                          const std::string& response) {
+    callback.Run(result, response);
+  }
+
+  virtual void OpenSocket(const std::string& name,
+                          const SocketCallback& callback) OVERRIDE {
+    NOTREACHED();
+  }
+
+  virtual void HttpQuery(const std::string& la_name,
+                     const std::string& request,
+                     const CommandCallback& callback) OVERRIDE {
+    const char* response;
+
+    if (la_name == "chrome_devtools_remote") {
+      if (request == kVersionRequest) {
+        response = kSampleChromeVersion;
+      } else if (request == kPageListRequest) {
+        response = kSampleChromePages;
+      } else {
+        NOTREACHED();
+        return;
+      }
+    } else if (la_name == "chrome_devtools_remote_1002") {
+      if (request == kVersionRequest) {
+        response = kSampleChromeBetaVersion;
+      } else if (request == kPageListRequest) {
+        response = kSampleChromeBetaPages;
+      } else {
+        NOTREACHED();
+        return;
+      }
+    } else if (la_name.find("noprocess_devtools_remote") == 0) {
+      if (request == kVersionRequest) {
+        response = "{}";
+      } else if (request == kPageListRequest) {
+        response = "[]";
+      } else {
+        NOTREACHED();
+        return;
+      }
+    } else if (la_name == "webview_devtools_remote_2425") {
+      if (request == kVersionRequest) {
+        response = kSampleWebViewVersion;
+      } else if (request == kPageListRequest) {
+        response = kSampleWebViewPages;
+      } else {
+        NOTREACHED();
+        return;
+      }
+    } else {
+      NOTREACHED();
+      return;
+    }
+
+    base::MessageLoop::current()->PostTask( FROM_HERE,
+              base::Bind(&MockDeviceImpl::RunCommandCallback,
+                         this, callback, 0, response));
+  }
+
+  virtual void HttpUpgrade(const std::string& la_name,
+                       const std::string& request,
+                       const SocketCallback& callback) {
+    NOTREACHED();
+  }
+
+  virtual void HttpQueryCallback(const CommandCallback& next, int code,
+                                 const std::string& result) {
+    NOTREACHED();
+  }
+
+ private:
+  virtual ~MockDeviceImpl()
+  {}
+
+  const char* device_model_;
+};
+
+class MockDeviceProvider : public AndroidDeviceManager::DeviceProvider {
+  virtual ~MockDeviceProvider()
+  {}
+
+  virtual void QueryDevices(const QueryDevicesCallback& callback) OVERRIDE {
+    AndroidDeviceManager::Devices devices;
+    devices.push_back(new MockDeviceImpl("FirstDevice", 0, true, "Nexus 6"));
+    devices.push_back(new MockDeviceImpl("SecondDevice", 1, false, "Nexus 8"));
+    callback.Run(devices);
+  }
+};
+
+// static
+scoped_refptr<AndroidDeviceManager::DeviceProvider>
+AndroidDeviceManager::GetMockDeviceProviderForTest() {
+  return new MockDeviceProvider();
+}
+
+static scoped_refptr<DevToolsAndroidBridge::RemoteBrowser>
+FindBrowserByDisplayName(DevToolsAndroidBridge::RemoteBrowsers browsers,
+                         const std::string& name) {
+  for (DevToolsAndroidBridge::RemoteBrowsers::iterator it = browsers.begin();
+      it != browsers.end(); ++it)
+    if ((*it)->display_name() == name)
+      return *it;
+  return NULL;
+}
+
+class DevToolsAdbBridgeTest : public InProcessBrowserTest,
+                              public DevToolsAndroidBridge::DeviceListListener {
+  typedef DevToolsAndroidBridge::RemoteDevices::const_iterator rdci;
+  typedef DevToolsAndroidBridge::RemoteBrowsers::const_iterator rbci;
+public:
+  virtual void DeviceListChanged(
+      const DevToolsAndroidBridge::RemoteDevices& devices) OVERRIDE {
+    devices_ = devices;
+    runner_->Quit();
+  }
+
+  void CheckDevices() {
+    ASSERT_EQ(2U, devices_.size());
+
+    scoped_refptr<DevToolsAndroidBridge::RemoteDevice> connected =
+        devices_[0]->is_connected() ? devices_[0] : devices_[1];
+
+    scoped_refptr<DevToolsAndroidBridge::RemoteDevice> not_connected =
+        devices_[0]->is_connected() ? devices_[1] : devices_[0];
+
+    ASSERT_TRUE(connected->is_connected());
+    ASSERT_FALSE(not_connected->is_connected());
+
+    ASSERT_EQ(720, connected->screen_size().width());
+    ASSERT_EQ(1184, connected->screen_size().height());
+
+    ASSERT_EQ("FirstDevice", connected->serial());
+    ASSERT_EQ("Nexus 6", connected->model());
+
+    ASSERT_EQ("SecondDevice", not_connected->serial());
+    ASSERT_EQ("Offline", not_connected->model());
+
+    const DevToolsAndroidBridge::RemoteBrowsers& browsers =
+        connected->browsers();
+    ASSERT_EQ(4U, browsers.size());
+
+    scoped_refptr<DevToolsAndroidBridge::RemoteBrowser> chrome =
+        FindBrowserByDisplayName(browsers, "Chrome");
+    ASSERT_TRUE(chrome);
+
+    scoped_refptr<DevToolsAndroidBridge::RemoteBrowser> chrome_beta =
+        FindBrowserByDisplayName(browsers, "Chrome Beta");
+    ASSERT_TRUE(chrome_beta);
+
+    scoped_refptr<DevToolsAndroidBridge::RemoteBrowser> chromium =
+        FindBrowserByDisplayName(browsers, "Chromium");
+    ASSERT_FALSE(chromium);
+
+    scoped_refptr<DevToolsAndroidBridge::RemoteBrowser> webview =
+        FindBrowserByDisplayName(browsers, "WebView in com.sample.feed");
+    ASSERT_TRUE(webview);
+
+    scoped_refptr<DevToolsAndroidBridge::RemoteBrowser> noprocess =
+        FindBrowserByDisplayName(browsers, "Noprocess");
+    ASSERT_TRUE(noprocess);
+
+    ASSERT_EQ("32.0.1679.0", chrome->version());
+    ASSERT_EQ("31.0.1599.0", chrome_beta->version());
+    ASSERT_EQ("4.0", webview->version());
+
+    std::vector<DevToolsTargetImpl*> chrome_pages =
+        chrome->CreatePageTargets();
+    std::vector<DevToolsTargetImpl*> chrome_beta_pages =
+        chrome_beta->CreatePageTargets();
+    std::vector<DevToolsTargetImpl*> webview_pages =
+        webview->CreatePageTargets();
+
+    ASSERT_EQ(1U, chrome_pages.size());
+    ASSERT_EQ(0U, chrome_beta_pages.size());
+    ASSERT_EQ(2U, webview_pages.size());
+
+    // Check that we have non-empty description for webview pages.
+    ASSERT_EQ(0U, chrome_pages[0]->GetDescription().size());
+    ASSERT_NE(0U, webview_pages[0]->GetDescription().size());
+    ASSERT_NE(0U, webview_pages[1]->GetDescription().size());
+
+    ASSERT_EQ(GURL("http://www.chromium.org/"), chrome_pages[0]->GetUrl());
+    ASSERT_EQ("The Chromium Projects", chrome_pages[0]->GetTitle());
+
+    STLDeleteElements(&chrome_pages);
+    STLDeleteElements(&webview_pages);
+  }
+
+  void init() {
+    runner_ = new content::MessageLoopRunner;
+  }
+
+protected:
+  scoped_refptr<content::MessageLoopRunner> runner_;
+  DevToolsAndroidBridge::RemoteDevices devices_;
+};
+
+IN_PROC_BROWSER_TEST_F(DevToolsAdbBridgeTest, DiscoverAndroidBrowsers) {
+  init();
+
+  scoped_refptr<DevToolsAndroidBridge> android_bridge =
+      DevToolsAndroidBridge::Factory::GetForProfile(browser()->profile());
+
+  AndroidDeviceManager::DeviceProviders providers;
+  providers.push_back(AndroidDeviceManager::GetMockDeviceProviderForTest());
+
+  android_bridge->set_device_providers_for_test(providers);
+
+  if (!android_bridge) {
+    FAIL() << "Failed to get DevToolsAndroidBridge.";
+  }
+
+  android_bridge->AddDeviceListListener(this);
+
+  runner_->Run();
+
+  CheckDevices();
+}
diff --git a/chrome/browser/devtools/device/port_forwarding_browsertest.cc b/chrome/browser/devtools/device/port_forwarding_browsertest.cc
new file mode 100644
index 0000000..f4f03b8
--- /dev/null
+++ b/chrome/browser/devtools/device/port_forwarding_browsertest.cc
@@ -0,0 +1,118 @@
+// 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.
+
+#include "base/command_line.h"
+#include "base/compiler_specific.h"
+#include "base/prefs/pref_service.h"
+#include "base/strings/string_number_conversions.h"
+#include "chrome/browser/devtools/browser_list_tabcontents_provider.h"
+#include "chrome/browser/devtools/device/port_forwarding_controller.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/tabs/tab_strip_model.h"
+#include "chrome/common/chrome_switches.h"
+#include "chrome/common/pref_names.h"
+#include "chrome/test/base/in_process_browser_test.h"
+#include "chrome/test/base/ui_test_utils.h"
+#include "content/public/browser/web_contents.h"
+#include "content/public/test/browser_test_utils.h"
+#include "content/public/test/test_utils.h"
+
+namespace {
+const char kPortForwardingTestPage[] =
+    "files/devtools/port_forwarding/main.html";
+
+const int kDefaultDebuggingPort = 9223;
+}
+
+class PortForwardingTest: public InProcessBrowserTest {
+  virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
+    InProcessBrowserTest::SetUpCommandLine(command_line);
+    command_line->AppendSwitchASCII(switches::kRemoteDebuggingPort,
+        base::IntToString(kDefaultDebuggingPort));
+  }
+
+ protected:
+  class Listener : public PortForwardingController::Listener {
+   public:
+    explicit Listener(Profile* profile)
+        : profile_(profile) {
+      PortForwardingController::Factory::GetForProfile(profile_)->
+          AddListener(this);
+    }
+
+    virtual ~Listener() {
+      PortForwardingController::Factory::GetForProfile(profile_)->
+          RemoveListener(this);
+    }
+
+    virtual void PortStatusChanged(const DevicesStatus& status) OVERRIDE {
+      if (status.empty())
+        return;
+      base::MessageLoop::current()->PostTask(
+          FROM_HERE, base::MessageLoop::QuitClosure());
+    }
+
+   private:
+    Profile* profile_;
+  };
+};
+
+IN_PROC_BROWSER_TEST_F(PortForwardingTest,
+                       DISABLED_LoadPageWithStyleAnsScript) {
+  Profile* profile = browser()->profile();
+
+  AndroidDeviceManager::DeviceProviders device_providers;
+  device_providers.push_back(
+      AndroidDeviceManager::GetSelfAsDeviceProvider(kDefaultDebuggingPort));
+  DevToolsAndroidBridge::Factory::GetForProfile(profile)->
+      set_device_providers_for_test(device_providers);
+
+  ASSERT_TRUE(test_server()->Start());
+  GURL original_url = test_server()->GetURL(kPortForwardingTestPage);
+
+  std::string forwarding_port("8000");
+  GURL forwarding_url(original_url.scheme() + "://" +
+      original_url.host() + ":" + forwarding_port + original_url.path());
+
+  PrefService* prefs = profile->GetPrefs();
+  prefs->SetBoolean(prefs::kDevToolsPortForwardingEnabled, true);
+
+  base::DictionaryValue config;
+  config.SetString(
+      forwarding_port, original_url.host() + ":" + original_url.port());
+  prefs->Set(prefs::kDevToolsPortForwardingConfig, config);
+
+  Listener wait_for_port_forwarding(profile);
+  content::RunMessageLoop();
+
+  BrowserListTabContentsProvider::EnableTethering();
+
+  ui_test_utils::NavigateToURL(browser(), forwarding_url);
+
+  content::RenderViewHost* rvh = browser()->tab_strip_model()->
+      GetWebContentsAt(0)->GetRenderViewHost();
+
+  std::string result;
+  ASSERT_TRUE(
+      content::ExecuteScriptAndExtractString(
+          rvh,
+          "window.domAutomationController.send(document.title)",
+          &result));
+  ASSERT_EQ("Port forwarding test", result) << "Document has not loaded.";
+
+  ASSERT_TRUE(
+      content::ExecuteScriptAndExtractString(
+          rvh,
+          "window.domAutomationController.send(getBodyTextContent())",
+          &result));
+  ASSERT_EQ("content", result) << "Javascript has not loaded.";
+
+  ASSERT_TRUE(
+      content::ExecuteScriptAndExtractString(
+          rvh,
+          "window.domAutomationController.send(getBodyMarginLeft())",
+          &result));
+  ASSERT_EQ("100px", result) << "CSS has not loaded.";
+}
diff --git a/chrome/browser/devtools/device/port_forwarding_controller.cc b/chrome/browser/devtools/device/port_forwarding_controller.cc
new file mode 100644
index 0000000..b6338e2
--- /dev/null
+++ b/chrome/browser/devtools/device/port_forwarding_controller.cc
@@ -0,0 +1,668 @@
+// 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.
+
+#include "chrome/browser/devtools/device/port_forwarding_controller.h"
+
+#include <algorithm>
+#include <map>
+
+#include "base/bind.h"
+#include "base/compiler_specific.h"
+#include "base/memory/singleton.h"
+#include "base/message_loop/message_loop.h"
+#include "base/prefs/pref_service.h"
+#include "base/strings/string_number_conversions.h"
+#include "base/strings/string_util.h"
+#include "base/strings/stringprintf.h"
+#include "base/threading/non_thread_safe.h"
+#include "chrome/browser/devtools/devtools_protocol.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/common/pref_names.h"
+#include "components/keyed_service/content/browser_context_dependency_manager.h"
+#include "content/public/browser/browser_thread.h"
+#include "net/base/address_list.h"
+#include "net/base/io_buffer.h"
+#include "net/base/net_errors.h"
+#include "net/base/net_util.h"
+#include "net/dns/host_resolver.h"
+#include "net/socket/tcp_client_socket.h"
+
+using content::BrowserThread;
+
+namespace {
+
+const int kBufferSize = 16 * 1024;
+
+enum {
+  kStatusError = -3,
+  kStatusDisconnecting = -2,
+  kStatusConnecting = -1,
+  kStatusOK = 0,
+  // Positive values are used to count open connections.
+};
+
+static const char kPortAttribute[] = "port";
+static const char kConnectionIdAttribute[] = "connectionId";
+static const char kTetheringAccepted[] = "Tethering.accepted";
+static const char kTetheringBind[] = "Tethering.bind";
+static const char kTetheringUnbind[] = "Tethering.unbind";
+
+static const char kDevToolsRemoteBrowserTarget[] = "/devtools/browser";
+const int kMinVersionPortForwarding = 28;
+
+class SocketTunnel : public base::NonThreadSafe {
+ public:
+  typedef base::Callback<void(int)> CounterCallback;
+
+  static void StartTunnel(const std::string& host,
+                          int port,
+                          const CounterCallback& callback,
+                          int result,
+                          net::StreamSocket* socket) {
+    if (result < 0)
+      return;
+    SocketTunnel* tunnel = new SocketTunnel(callback);
+    tunnel->Start(socket, host, port);
+  }
+
+ private:
+  explicit SocketTunnel(const CounterCallback& callback)
+      : pending_writes_(0),
+        pending_destruction_(false),
+        callback_(callback),
+        about_to_destroy_(false) {
+    callback_.Run(1);
+  }
+
+  void Start(net::StreamSocket* socket, const std::string& host, int port) {
+    remote_socket_.reset(socket);
+
+    host_resolver_ = net::HostResolver::CreateDefaultResolver(NULL);
+    net::HostResolver::RequestInfo request_info(net::HostPortPair(host, port));
+    int result = host_resolver_->Resolve(
+        request_info,
+        net::DEFAULT_PRIORITY,
+        &address_list_,
+        base::Bind(&SocketTunnel::OnResolved, base::Unretained(this)),
+        NULL,
+        net::BoundNetLog());
+    if (result != net::ERR_IO_PENDING)
+      OnResolved(result);
+  }
+
+  void OnResolved(int result) {
+    if (result < 0) {
+      SelfDestruct();
+      return;
+    }
+
+    host_socket_.reset(new net::TCPClientSocket(address_list_, NULL,
+                                                net::NetLog::Source()));
+    result = host_socket_->Connect(base::Bind(&SocketTunnel::OnConnected,
+                                              base::Unretained(this)));
+    if (result != net::ERR_IO_PENDING)
+      OnConnected(result);
+  }
+
+  ~SocketTunnel() {
+    about_to_destroy_ = true;
+    if (host_socket_)
+      host_socket_->Disconnect();
+    if (remote_socket_)
+      remote_socket_->Disconnect();
+    callback_.Run(-1);
+  }
+
+  void OnConnected(int result) {
+    if (result < 0) {
+      SelfDestruct();
+      return;
+    }
+
+    Pump(host_socket_.get(), remote_socket_.get());
+    Pump(remote_socket_.get(), host_socket_.get());
+  }
+
+  void Pump(net::StreamSocket* from, net::StreamSocket* to) {
+    scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer(kBufferSize);
+    int result = from->Read(
+        buffer.get(),
+        kBufferSize,
+        base::Bind(
+            &SocketTunnel::OnRead, base::Unretained(this), from, to, buffer));
+    if (result != net::ERR_IO_PENDING)
+      OnRead(from, to, buffer, result);
+  }
+
+  void OnRead(net::StreamSocket* from,
+              net::StreamSocket* to,
+              scoped_refptr<net::IOBuffer> buffer,
+              int result) {
+    if (result <= 0) {
+      SelfDestruct();
+      return;
+    }
+
+    int total = result;
+    scoped_refptr<net::DrainableIOBuffer> drainable =
+        new net::DrainableIOBuffer(buffer.get(), total);
+
+    ++pending_writes_;
+    result = to->Write(drainable.get(),
+                       total,
+                       base::Bind(&SocketTunnel::OnWritten,
+                                  base::Unretained(this),
+                                  drainable,
+                                  from,
+                                  to));
+    if (result != net::ERR_IO_PENDING)
+      OnWritten(drainable, from, to, result);
+  }
+
+  void OnWritten(scoped_refptr<net::DrainableIOBuffer> drainable,
+                 net::StreamSocket* from,
+                 net::StreamSocket* to,
+                 int result) {
+    --pending_writes_;
+    if (result < 0) {
+      SelfDestruct();
+      return;
+    }
+
+    drainable->DidConsume(result);
+    if (drainable->BytesRemaining() > 0) {
+      ++pending_writes_;
+      result = to->Write(drainable.get(),
+                         drainable->BytesRemaining(),
+                         base::Bind(&SocketTunnel::OnWritten,
+                                    base::Unretained(this),
+                                    drainable,
+                                    from,
+                                    to));
+      if (result != net::ERR_IO_PENDING)
+        OnWritten(drainable, from, to, result);
+      return;
+    }
+
+    if (pending_destruction_) {
+      SelfDestruct();
+      return;
+    }
+    Pump(from, to);
+  }
+
+  void SelfDestruct() {
+    // In case one of the connections closes, we could get here
+    // from another one due to Disconnect firing back on all
+    // read callbacks.
+    if (about_to_destroy_)
+      return;
+    if (pending_writes_ > 0) {
+      pending_destruction_ = true;
+      return;
+    }
+    delete this;
+  }
+
+  scoped_ptr<net::StreamSocket> remote_socket_;
+  scoped_ptr<net::StreamSocket> host_socket_;
+  scoped_ptr<net::HostResolver> host_resolver_;
+  net::AddressList address_list_;
+  int pending_writes_;
+  bool pending_destruction_;
+  CounterCallback callback_;
+  bool about_to_destroy_;
+};
+
+typedef DevToolsAndroidBridge::RemoteBrowser::ParsedVersion ParsedVersion;
+
+static bool IsVersionLower(const ParsedVersion& left,
+                           const ParsedVersion& right) {
+  return std::lexicographical_compare(
+    left.begin(), left.end(), right.begin(), right.end());
+}
+
+static bool IsPortForwardingSupported(const ParsedVersion& version) {
+  return !version.empty() && version[0] >= kMinVersionPortForwarding;
+}
+
+static scoped_refptr<DevToolsAndroidBridge::RemoteBrowser>
+FindBestBrowserForTethering(
+    const DevToolsAndroidBridge::RemoteBrowsers browsers) {
+  scoped_refptr<DevToolsAndroidBridge::RemoteBrowser> best_browser;
+  ParsedVersion newest_version;
+  for (DevToolsAndroidBridge::RemoteBrowsers::const_iterator it =
+      browsers.begin(); it != browsers.end(); ++it) {
+    scoped_refptr<DevToolsAndroidBridge::RemoteBrowser> browser = *it;
+    ParsedVersion current_version = browser->GetParsedVersion();
+    if (browser->IsChrome() &&
+        IsPortForwardingSupported(current_version) &&
+        IsVersionLower(newest_version, current_version)) {
+      best_browser = browser;
+      newest_version = current_version;
+    }
+  }
+  return best_browser;
+}
+
+}  // namespace
+
+class PortForwardingController::Connection
+    : public DevToolsAndroidBridge::AndroidWebSocket::Delegate,
+      public base::RefCountedThreadSafe<
+          Connection,
+          content::BrowserThread::DeleteOnUIThread> {
+ public:
+  Connection(Registry* registry,
+             scoped_refptr<DevToolsAndroidBridge::RemoteDevice> device,
+             scoped_refptr<DevToolsAndroidBridge::RemoteBrowser> browser,
+             const ForwardingMap& forwarding_map);
+
+  const PortStatusMap& GetPortStatusMap();
+
+  void UpdateForwardingMap(const ForwardingMap& new_forwarding_map);
+
+  void Shutdown();
+
+ private:
+  friend struct content::BrowserThread::DeleteOnThread<
+      content::BrowserThread::UI>;
+  friend class base::DeleteHelper<Connection>;
+
+  virtual ~Connection();
+
+  typedef std::map<int, std::string> ForwardingMap;
+
+  typedef base::Callback<void(PortStatus)> CommandCallback;
+  typedef std::map<int, CommandCallback> CommandCallbackMap;
+
+  void SerializeChanges(const std::string& method,
+                        const ForwardingMap& old_map,
+                        const ForwardingMap& new_map);
+
+  void SendCommand(const std::string& method, int port);
+  bool ProcessResponse(const std::string& json);
+
+  void ProcessBindResponse(int port, PortStatus status);
+  void ProcessUnbindResponse(int port, PortStatus status);
+
+  void UpdateSocketCountOnHandlerThread(int port, int increment);
+  void UpdateSocketCount(int port, int increment);
+
+  // DevToolsAndroidBridge::AndroidWebSocket::Delegate implementation:
+  virtual void OnSocketOpened() OVERRIDE;
+  virtual void OnFrameRead(const std::string& message) OVERRIDE;
+  virtual void OnSocketClosed(bool closed_by_device) OVERRIDE;
+
+  PortForwardingController::Registry* registry_;
+  scoped_refptr<DevToolsAndroidBridge::RemoteDevice> device_;
+  scoped_refptr<DevToolsAndroidBridge::RemoteBrowser> browser_;
+  scoped_refptr<DevToolsAndroidBridge::AndroidWebSocket> web_socket_;
+  int command_id_;
+  bool connected_;
+  ForwardingMap forwarding_map_;
+  CommandCallbackMap pending_responses_;
+  PortStatusMap port_status_;
+
+  DISALLOW_COPY_AND_ASSIGN(Connection);
+};
+
+PortForwardingController::Connection::Connection(
+    Registry* registry,
+    scoped_refptr<DevToolsAndroidBridge::RemoteDevice> device,
+    scoped_refptr<DevToolsAndroidBridge::RemoteBrowser> browser,
+    const ForwardingMap& forwarding_map)
+    : registry_(registry),
+      device_(device),
+      browser_(browser),
+      command_id_(0),
+      connected_(false),
+      forwarding_map_(forwarding_map) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  (*registry_)[device_->serial()] = this;
+  web_socket_ = browser->CreateWebSocket(kDevToolsRemoteBrowserTarget, this);
+  AddRef();  // Balanced in OnSocketClosed();
+}
+
+void PortForwardingController::Connection::Shutdown() {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  registry_ = NULL;
+  // This will have no effect if the socket is not connected yet.
+  web_socket_->Disconnect();
+}
+
+PortForwardingController::Connection::~Connection() {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  if (registry_) {
+    DCHECK(registry_->find(device_->serial()) != registry_->end());
+    registry_->erase(device_->serial());
+  }
+}
+
+void PortForwardingController::Connection::UpdateForwardingMap(
+    const ForwardingMap& new_forwarding_map) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  if (connected_) {
+    SerializeChanges(kTetheringUnbind, new_forwarding_map, forwarding_map_);
+    SerializeChanges(kTetheringBind, forwarding_map_, new_forwarding_map);
+  }
+  forwarding_map_ = new_forwarding_map;
+}
+
+void PortForwardingController::Connection::SerializeChanges(
+    const std::string& method,
+    const ForwardingMap& old_map,
+    const ForwardingMap& new_map) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  for (ForwardingMap::const_iterator new_it(new_map.begin());
+      new_it != new_map.end(); ++new_it) {
+    int port = new_it->first;
+    const std::string& location = new_it->second;
+    ForwardingMap::const_iterator old_it = old_map.find(port);
+    if (old_it != old_map.end() && old_it->second == location)
+      continue;  // The port points to the same location in both configs, skip.
+
+    SendCommand(method, port);
+  }
+}
+
+void PortForwardingController::Connection::SendCommand(
+    const std::string& method, int port) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  base::DictionaryValue params;
+  params.SetInteger(kPortAttribute, port);
+  DevToolsProtocol::Command command(++command_id_, method, &params);
+
+  if (method == kTetheringBind) {
+    pending_responses_[command.id()] =
+        base::Bind(&Connection::ProcessBindResponse,
+                   base::Unretained(this), port);
+#if defined(DEBUG_DEVTOOLS)
+    port_status_[port] = kStatusConnecting;
+#endif  // defined(DEBUG_DEVTOOLS)
+  } else {
+    DCHECK_EQ(kTetheringUnbind, method);
+
+    PortStatusMap::iterator it = port_status_.find(port);
+    if (it != port_status_.end() && it->second == kStatusError) {
+      // The bind command failed on this port, do not attempt unbind.
+      port_status_.erase(it);
+      return;
+    }
+
+    pending_responses_[command.id()] =
+        base::Bind(&Connection::ProcessUnbindResponse,
+                   base::Unretained(this), port);
+#if defined(DEBUG_DEVTOOLS)
+    port_status_[port] = kStatusDisconnecting;
+#endif  // defined(DEBUG_DEVTOOLS)
+  }
+
+  web_socket_->SendFrame(command.Serialize());
+}
+
+bool PortForwardingController::Connection::ProcessResponse(
+    const std::string& message) {
+  scoped_ptr<DevToolsProtocol::Response> response(
+      DevToolsProtocol::ParseResponse(message));
+  if (!response)
+    return false;
+
+  CommandCallbackMap::iterator it = pending_responses_.find(response->id());
+  if (it == pending_responses_.end())
+    return false;
+
+  it->second.Run(response->error_code() ? kStatusError : kStatusOK);
+  pending_responses_.erase(it);
+  return true;
+}
+
+void PortForwardingController::Connection::ProcessBindResponse(
+    int port, PortStatus status) {
+  port_status_[port] = status;
+}
+
+void PortForwardingController::Connection::ProcessUnbindResponse(
+    int port, PortStatus status) {
+  PortStatusMap::iterator it = port_status_.find(port);
+  if (it == port_status_.end())
+    return;
+  if (status == kStatusError)
+    it->second = status;
+  else
+    port_status_.erase(it);
+}
+
+void PortForwardingController::Connection::UpdateSocketCountOnHandlerThread(
+    int port, int increment) {
+  BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
+     base::Bind(&Connection::UpdateSocketCount, this, port, increment));
+}
+
+void PortForwardingController::Connection::UpdateSocketCount(
+    int port, int increment) {
+#if defined(DEBUG_DEVTOOLS)
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  PortStatusMap::iterator it = port_status_.find(port);
+  if (it == port_status_.end())
+    return;
+  if (it->second < 0 || (it->second == 0 && increment < 0))
+    return;
+  it->second += increment;
+#endif  // defined(DEBUG_DEVTOOLS)
+}
+
+const PortForwardingController::PortStatusMap&
+PortForwardingController::Connection::GetPortStatusMap() {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  return port_status_;
+}
+
+void PortForwardingController::Connection::OnSocketOpened() {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  if (!registry_) {
+    // Socket was created after Shutdown was called. Disconnect immediately.
+    web_socket_->Disconnect();
+    return;
+  }
+  connected_ = true;
+  SerializeChanges(kTetheringBind, ForwardingMap(), forwarding_map_);
+}
+
+void PortForwardingController::Connection::OnSocketClosed(
+    bool closed_by_device) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  Release();  // Balanced in the constructor.
+}
+
+void PortForwardingController::Connection::OnFrameRead(
+    const std::string& message) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  if (ProcessResponse(message))
+    return;
+
+  scoped_ptr<DevToolsProtocol::Notification> notification(
+      DevToolsProtocol::ParseNotification(message));
+  if (!notification)
+    return;
+
+  if (notification->method() != kTetheringAccepted)
+    return;
+
+  base::DictionaryValue* params = notification->params();
+  if (!params)
+    return;
+
+  int port;
+  std::string connection_id;
+  if (!params->GetInteger(kPortAttribute, &port) ||
+      !params->GetString(kConnectionIdAttribute, &connection_id))
+    return;
+
+  std::map<int, std::string>::iterator it = forwarding_map_.find(port);
+  if (it == forwarding_map_.end())
+    return;
+
+  std::string location = it->second;
+  std::vector<std::string> tokens;
+  Tokenize(location, ":", &tokens);
+  int destination_port = 0;
+  if (tokens.size() != 2 || !base::StringToInt(tokens[1], &destination_port))
+    return;
+  std::string destination_host = tokens[0];
+
+  SocketTunnel::CounterCallback callback =
+      base::Bind(&Connection::UpdateSocketCountOnHandlerThread, this, port);
+
+  device_->OpenSocket(
+      connection_id.c_str(),
+      base::Bind(&SocketTunnel::StartTunnel,
+                 destination_host,
+                 destination_port,
+                 callback));
+}
+
+PortForwardingController::PortForwardingController(Profile* profile)
+    : profile_(profile),
+      pref_service_(profile->GetPrefs()),
+      listening_(false) {
+  pref_change_registrar_.Init(pref_service_);
+  base::Closure callback = base::Bind(
+      &PortForwardingController::OnPrefsChange, base::Unretained(this));
+  pref_change_registrar_.Add(prefs::kDevToolsPortForwardingEnabled, callback);
+  pref_change_registrar_.Add(prefs::kDevToolsPortForwardingConfig, callback);
+  OnPrefsChange();
+}
+
+PortForwardingController::~PortForwardingController() {
+  // Existing connection will not be shut down. This might be confusing for
+  // some users, but the opposite is more confusing.
+  StopListening();
+}
+
+void PortForwardingController::AddListener(Listener* listener) {
+  listeners_.push_back(listener);
+}
+
+void PortForwardingController::RemoveListener(Listener* listener) {
+  Listeners::iterator it =
+      std::find(listeners_.begin(), listeners_.end(), listener);
+  DCHECK(it != listeners_.end());
+  listeners_.erase(it);
+}
+
+void PortForwardingController::DeviceListChanged(
+    const DevToolsAndroidBridge::RemoteDevices& devices) {
+  DevicesStatus status;
+
+  for (DevToolsAndroidBridge::RemoteDevices::const_iterator it =
+      devices.begin(); it != devices.end(); ++it) {
+    scoped_refptr<DevToolsAndroidBridge::RemoteDevice> device = *it;
+    if (!device->is_connected())
+      continue;
+    Registry::iterator rit = registry_.find(device->serial());
+    if (rit == registry_.end()) {
+      scoped_refptr<DevToolsAndroidBridge::RemoteBrowser> browser =
+          FindBestBrowserForTethering(device->browsers());
+      if (browser) {
+        new Connection(&registry_, device, browser, forwarding_map_);
+      }
+    } else {
+      status[device->serial()] = (*rit).second->GetPortStatusMap();
+    }
+  }
+
+  NotifyListeners(status);
+}
+
+void PortForwardingController::OnPrefsChange() {
+  forwarding_map_.clear();
+
+  if (pref_service_->GetBoolean(prefs::kDevToolsPortForwardingEnabled)) {
+    const base::DictionaryValue* dict =
+        pref_service_->GetDictionary(prefs::kDevToolsPortForwardingConfig);
+    for (base::DictionaryValue::Iterator it(*dict);
+         !it.IsAtEnd(); it.Advance()) {
+      int port_num;
+      std::string location;
+      if (base::StringToInt(it.key(), &port_num) &&
+          dict->GetString(it.key(), &location))
+        forwarding_map_[port_num] = location;
+    }
+  }
+
+  if (!forwarding_map_.empty()) {
+    StartListening();
+    UpdateConnections();
+  } else {
+    StopListening();
+    ShutdownConnections();
+    NotifyListeners(DevicesStatus());
+  }
+}
+
+void PortForwardingController::StartListening() {
+  if (listening_)
+    return;
+  listening_ = true;
+  DevToolsAndroidBridge* android_bridge =
+      DevToolsAndroidBridge::Factory::GetForProfile(profile_);
+  if (android_bridge)
+    android_bridge->AddDeviceListListener(this);
+
+}
+
+void PortForwardingController::StopListening() {
+  if (!listening_)
+    return;
+  listening_ = false;
+  DevToolsAndroidBridge* android_bridge =
+      DevToolsAndroidBridge::Factory::GetForProfile(profile_);
+  if (android_bridge)
+    android_bridge->RemoveDeviceListListener(this);
+}
+
+void PortForwardingController::UpdateConnections() {
+  for (Registry::iterator it = registry_.begin(); it != registry_.end(); ++it)
+    it->second->UpdateForwardingMap(forwarding_map_);
+}
+
+void PortForwardingController::ShutdownConnections() {
+  for (Registry::iterator it = registry_.begin(); it != registry_.end(); ++it)
+    it->second->Shutdown();
+  registry_.clear();
+}
+
+void PortForwardingController::NotifyListeners(
+    const DevicesStatus& status) const {
+  Listeners copy(listeners_);  // Iterate over copy.
+  for (Listeners::const_iterator it = copy.begin(); it != copy.end(); ++it)
+    (*it)->PortStatusChanged(status);
+}
+
+// static
+PortForwardingController::Factory*
+PortForwardingController::Factory::GetInstance() {
+  return Singleton<PortForwardingController::Factory>::get();
+}
+
+// static
+PortForwardingController* PortForwardingController::Factory::GetForProfile(
+    Profile* profile) {
+  return static_cast<PortForwardingController*>(GetInstance()->
+          GetServiceForBrowserContext(profile, true));
+}
+
+PortForwardingController::Factory::Factory()
+    : BrowserContextKeyedServiceFactory(
+          "PortForwardingController",
+          BrowserContextDependencyManager::GetInstance()) {}
+
+PortForwardingController::Factory::~Factory() {}
+
+KeyedService* PortForwardingController::Factory::BuildServiceInstanceFor(
+    content::BrowserContext* context) const {
+  Profile* profile = Profile::FromBrowserContext(context);
+  return new PortForwardingController(profile);
+}
diff --git a/chrome/browser/devtools/device/port_forwarding_controller.h b/chrome/browser/devtools/device/port_forwarding_controller.h
new file mode 100644
index 0000000..debf022
--- /dev/null
+++ b/chrome/browser/devtools/device/port_forwarding_controller.h
@@ -0,0 +1,96 @@
+// 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.
+
+#ifndef CHROME_BROWSER_DEVTOOLS_DEVICE_PORT_FORWARDING_CONTROLLER_H_
+#define CHROME_BROWSER_DEVTOOLS_DEVICE_PORT_FORWARDING_CONTROLLER_H_
+
+#include <map>
+
+#include "base/prefs/pref_change_registrar.h"
+#include "chrome/browser/devtools/device/devtools_android_bridge.h"
+#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+#include "components/keyed_service/core/keyed_service.h"
+
+class PrefService;
+class Profile;
+
+class PortForwardingController
+    : private KeyedService,
+      private DevToolsAndroidBridge::DeviceListListener {
+ public:
+  explicit PortForwardingController(Profile* profile);
+
+  virtual ~PortForwardingController();
+
+  class Factory : public BrowserContextKeyedServiceFactory {
+   public:
+    // Returns singleton instance of Factory.
+    static Factory* GetInstance();
+
+    // Returns PortForwardingController associated with |profile|.
+    static PortForwardingController* GetForProfile(Profile* profile);
+
+   private:
+    friend struct DefaultSingletonTraits<Factory>;
+
+    Factory();
+    virtual ~Factory();
+
+    // BrowserContextKeyedServiceFactory overrides:
+    virtual KeyedService* BuildServiceInstanceFor(
+        content::BrowserContext* context) const OVERRIDE;
+    DISALLOW_COPY_AND_ASSIGN(Factory);
+  };
+
+  typedef int PortStatus;
+  typedef std::map<int, PortStatus> PortStatusMap;
+  typedef std::map<std::string, PortStatusMap> DevicesStatus;
+
+  class Listener {
+   public:
+    typedef PortForwardingController::PortStatusMap PortStatusMap;
+    typedef PortForwardingController::DevicesStatus DevicesStatus;
+
+    virtual void PortStatusChanged(const DevicesStatus&) = 0;
+   protected:
+    virtual ~Listener() {}
+  };
+
+  void AddListener(Listener* listener);
+  void RemoveListener(Listener* listener);
+
+ private:
+  class Connection;
+  typedef std::map<std::string, Connection*> Registry;
+
+  // DevToolsAndroidBridge::Listener implementation.
+  virtual void DeviceListChanged(
+      const DevToolsAndroidBridge::RemoteDevices& devices) OVERRIDE;
+
+  void OnPrefsChange();
+
+  void StartListening();
+  void StopListening();
+
+  void UpdateConnections();
+  void ShutdownConnections();
+
+  void NotifyListeners(const DevicesStatus& status) const;
+
+  Profile* profile_;
+  PrefService* pref_service_;
+  PrefChangeRegistrar pref_change_registrar_;
+  Registry registry_;
+
+  typedef std::vector<Listener*> Listeners;
+  Listeners listeners_;
+  bool listening_;
+
+  typedef std::map<int, std::string> ForwardingMap;
+  ForwardingMap forwarding_map_;
+
+  DISALLOW_COPY_AND_ASSIGN(PortForwardingController);
+};
+
+#endif  // CHROME_BROWSER_DEVTOOLS_DEVICE_PORT_FORWARDING_CONTROLLER_H_
diff --git a/chrome/browser/devtools/device/usb/DEPS b/chrome/browser/devtools/device/usb/DEPS
new file mode 100644
index 0000000..fc9564a
--- /dev/null
+++ b/chrome/browser/devtools/device/usb/DEPS
@@ -0,0 +1,3 @@
+include_rules = [
+  "+components/usb_service"
+]
diff --git a/chrome/browser/devtools/device/usb/android_rsa.cc b/chrome/browser/devtools/device/usb/android_rsa.cc
new file mode 100644
index 0000000..a701845
--- /dev/null
+++ b/chrome/browser/devtools/device/usb/android_rsa.cc
@@ -0,0 +1,270 @@
+// 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.
+
+#include "chrome/browser/devtools/device/usb/android_rsa.h"
+
+#include "base/base64.h"
+#include "base/memory/scoped_ptr.h"
+#include "chrome/browser/prefs/pref_service_syncable.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/common/pref_names.h"
+#include "crypto/rsa_private_key.h"
+#include "crypto/signature_creator.h"
+#include "net/cert/asn1_util.h"
+
+namespace {
+
+const size_t kRSANumWords = 64;
+const size_t kBigIntSize = 1024;
+
+static const char kDummyRSAPublicKey[] =
+    "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6OSJ64q+ZLg7VV2ojEPh5TRbYjwbT"
+    "TifSPeFIV45CHnbTWYiiIn41wrozpYizNsMWZUBjdah1N78WVhbyDrnr0bDgFp+gXjfVppa3I"
+    "gjiohEcemK3omXi3GDMK8ERhriLUKfQS842SXtQ8I+KoZtpCkGM//0h7+P+Rhm0WwdipIRMhR"
+    "8haNAeyDiiCvqJcvevv2T52vqKtS3aWz+GjaTJJLVWydEpz9WdvWeLfFVhe2ZnqwwZNa30Qoj"
+    "fsnvjaMwK2MU7uYfRBPuvLyK5QESWBpArNDd6ULl8Y+NU6kwNOVDc87OASCVEM1gw2IMi2mo2"
+    "WO5ywp0UWRiGZCkK+wOFQIDAQAB";
+
+typedef struct RSAPublicKey {
+    int len;                // Length of n[] in number of uint32
+    uint32 n0inv;           // -1 / n[0] mod 2^32
+    uint32 n[kRSANumWords];  // modulus as little endian array
+    uint32 rr[kRSANumWords]; // R^2 as little endian array
+    int exponent;           // 3 or 65537
+} RSAPublicKey;
+
+// http://en.wikipedia.org/wiki/Extended_Euclidean_algorithm
+// a * x + b * y = gcd(a, b) = d
+void ExtendedEuclid(uint64 a, uint64 b, uint64 *x, uint64 *y, uint64 *d) {
+  uint64 x1 = 0, x2 = 1, y1 = 1, y2 = 0;
+
+  while (b > 0) {
+    uint64 q = a / b;
+    uint64 r = a % b;
+    *x = x2 - q * x1;
+    *y = y2 - q * y1;
+    a = b;
+    b = r;
+    x2 = x1;
+    x1 = *x;
+    y2 = y1;
+    y1 = *y;
+  }
+
+  *d = a;
+  *x = x2;
+  *y = y2;
+}
+
+uint32 ModInverse(uint64 a, uint64 m)
+{
+  uint64 d, x, y;
+  ExtendedEuclid(a, m, &x, &y, &d);
+  if (d == 1)
+    return static_cast<uint32>(x);
+  return 0;
+}
+
+uint32* BnNew() {
+  uint32* result = new uint32[kBigIntSize];
+  memset(result, 0, kBigIntSize * sizeof(uint32));
+  return result;
+}
+
+void BnFree(uint32* a) {
+  delete[] a;
+}
+
+uint32* BnCopy(uint32* a) {
+  uint32* result = new uint32[kBigIntSize];
+  memcpy(result, a, kBigIntSize * sizeof(uint32));
+  return result;
+}
+
+uint32* BnMul(uint32* a, uint32 b) {
+  uint32* result = BnNew();
+  uint64 carry_over = 0;
+  for (size_t i = 0; i < kBigIntSize; ++i) {
+    carry_over += static_cast<uint64>(a[i]) * b;
+    result[i] = carry_over & kuint32max;
+    carry_over >>= 32;
+  }
+  return result;
+}
+
+void BnSub(uint32* a, uint32* b) {
+  int carry_over = 0;
+  for (size_t i = 0; i < kBigIntSize; ++i) {
+    int64 sub = static_cast<int64>(a[i]) - b[i] - carry_over;
+    carry_over = 0;
+    if (sub < 0) {
+      carry_over = 1;
+      sub += 0x100000000LL;
+    }
+    a[i] = static_cast<uint32>(sub);
+  }
+}
+
+void BnLeftShift(uint32* a, int offset) {
+  for (int i = kBigIntSize - offset - 1; i >= 0; --i)
+    a[i + offset] = a[i];
+  for (int i = 0; i < offset; ++i)
+    a[i] = 0;
+}
+
+int BnCompare(uint32* a, uint32* b) {
+  for (int i = kBigIntSize - 1; i >= 0; --i) {
+    if (a[i] > b[i])
+      return 1;
+    if (a[i] < b[i])
+      return -1;
+  }
+  return 0;
+}
+
+uint64 BnGuess(uint32* a, uint32* b, uint64 from, uint64 to) {
+  if (from + 1 >= to)
+    return from;
+
+  uint64 guess = (from + to) / 2;
+  uint32* t = BnMul(b, static_cast<uint32>(guess));
+  int result = BnCompare(a, t);
+  BnFree(t);
+  if (result > 0)
+    return BnGuess(a, b, guess, to);
+  if (result < 0)
+    return BnGuess(a, b, from, guess);
+  return guess;
+}
+
+void BnDiv(uint32* a, uint32* b, uint32** pq, uint32** pr) {
+  if (BnCompare(a, b) < 0) {
+    if (pq)
+      *pq = BnNew();
+    if (pr)
+      *pr = BnCopy(a);
+    return;
+  }
+
+  int oa = kBigIntSize - 1;
+  int ob = kBigIntSize - 1;
+  for (; oa > 0 && !a[oa]; --oa) {}
+  for (; ob > 0 && !b[ob]; --ob) {}
+  uint32* q = BnNew();
+  uint32* ca = BnCopy(a);
+
+  int digit = a[oa] < b[ob] ? oa - ob - 1 : oa - ob;
+
+  for (; digit >= 0; --digit) {
+    uint32* shifted_b = BnCopy(b);
+    BnLeftShift(shifted_b, digit);
+    uint32 value = static_cast<uint32>(
+        BnGuess(ca, shifted_b, 0, static_cast<uint64>(kuint32max) + 1));
+    q[digit] = value;
+    uint32* t = BnMul(shifted_b, value);
+    BnSub(ca, t);
+    BnFree(t);
+    BnFree(shifted_b);
+  }
+
+  if (pq)
+    *pq = q;
+  else
+    BnFree(q);
+  if (pr)
+    *pr = ca;
+  else
+    BnFree(ca);
+}
+
+}  // namespace
+
+crypto::RSAPrivateKey* AndroidRSAPrivateKey(Profile* profile) {
+  std::string encoded_key =
+      profile->GetPrefs()->GetString(prefs::kDevToolsAdbKey);
+  std::string decoded_key;
+  scoped_ptr<crypto::RSAPrivateKey> key;
+  if (!encoded_key.empty() && base::Base64Decode(encoded_key, &decoded_key)) {
+    std::vector<uint8> key_info(decoded_key.begin(), decoded_key.end());
+    key.reset(crypto::RSAPrivateKey::CreateFromPrivateKeyInfo(key_info));
+  }
+  if (!key) {
+    key.reset(crypto::RSAPrivateKey::Create(2048));
+    std::vector<uint8> key_info;
+    if (!key || !key->ExportPrivateKey(&key_info))
+      return NULL;
+
+    std::string key_string(key_info.begin(), key_info.end());
+    base::Base64Encode(key_string, &encoded_key);
+    profile->GetPrefs()->SetString(prefs::kDevToolsAdbKey,
+                                   encoded_key);
+  }
+  return key.release();
+}
+
+std::string AndroidRSAPublicKey(crypto::RSAPrivateKey* key) {
+  std::vector<uint8> public_key;
+  if (!key)
+    return kDummyRSAPublicKey;
+
+  key->ExportPublicKey(&public_key);
+  std::string asn1(public_key.begin(), public_key.end());
+
+  base::StringPiece pk;
+  if (!net::asn1::ExtractSubjectPublicKeyFromSPKI(asn1, &pk))
+    return kDummyRSAPublicKey;
+
+  // Skip 10 byte asn1 prefix to the modulus.
+  std::vector<uint8> pk_data(pk.data() + 10, pk.data() + pk.length());
+  uint32* n = BnNew();
+  for (size_t i = 0; i < kRSANumWords; ++i) {
+    uint32 t = pk_data[4 * i];
+    t = t << 8;
+    t += pk_data[4 * i + 1];
+    t = t << 8;
+    t += pk_data[4 * i + 2];
+    t = t << 8;
+    t += pk_data[4 * i + 3];
+    n[kRSANumWords - i - 1] = t;
+  }
+  uint64 n0 = n[0];
+
+  RSAPublicKey pkey;
+  pkey.len = kRSANumWords;
+  pkey.exponent = 65537; // Fixed public exponent
+  pkey.n0inv = 0 - ModInverse(n0, 0x100000000LL);
+  if (pkey.n0inv == 0)
+    return kDummyRSAPublicKey;
+
+  uint32* r = BnNew();
+  r[kRSANumWords * 2] = 1;
+
+  uint32* rr;
+  BnDiv(r, n, NULL, &rr);
+
+  for (size_t i = 0; i < kRSANumWords; ++i) {
+    pkey.n[i] = n[i];
+    pkey.rr[i] = rr[i];
+  }
+
+  BnFree(n);
+  BnFree(r);
+  BnFree(rr);
+
+  std::string output;
+  std::string input(reinterpret_cast<char*>(&pkey), sizeof(pkey));
+  base::Base64Encode(input, &output);
+  return output;
+}
+
+std::string AndroidRSASign(crypto::RSAPrivateKey* key,
+                           const std::string& body) {
+  std::vector<uint8> digest(body.begin(), body.end());
+  std::vector<uint8> result;
+  if (!crypto::SignatureCreator::Sign(key, vector_as_array(&digest),
+                                      digest.size(), &result)) {
+    return std::string();
+  }
+  return std::string(result.begin(), result.end());
+}
diff --git a/chrome/browser/devtools/device/usb/android_rsa.h b/chrome/browser/devtools/device/usb/android_rsa.h
new file mode 100644
index 0000000..2ee1584
--- /dev/null
+++ b/chrome/browser/devtools/device/usb/android_rsa.h
@@ -0,0 +1,23 @@
+// 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.
+
+#ifndef CHROME_BROWSER_DEVTOOLS_DEVICE_USB_ANDROID_RSA_H_
+#define CHROME_BROWSER_DEVTOOLS_DEVICE_USB_ANDROID_RSA_H_
+
+#include <string>
+
+namespace crypto {
+class RSAPrivateKey;
+}
+
+class Profile;
+
+crypto::RSAPrivateKey* AndroidRSAPrivateKey(Profile* profile);
+
+std::string AndroidRSAPublicKey(crypto::RSAPrivateKey* key);
+
+std::string AndroidRSASign(crypto::RSAPrivateKey* key,
+                           const std::string& body);
+
+#endif  // CHROME_BROWSER_DEVTOOLS_DEVICE_USB_ANDROID_RSA_H_
diff --git a/chrome/browser/devtools/device/usb/android_usb_device.cc b/chrome/browser/devtools/device/usb/android_usb_device.cc
new file mode 100644
index 0000000..debde2e
--- /dev/null
+++ b/chrome/browser/devtools/device/usb/android_usb_device.cc
@@ -0,0 +1,652 @@
+// 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.
+
+#include "chrome/browser/devtools/device/usb/android_usb_device.h"
+
+#include <set>
+
+#include "base/barrier_closure.h"
+#include "base/base64.h"
+#include "base/lazy_instance.h"
+#include "base/message_loop/message_loop.h"
+#include "base/stl_util.h"
+#include "base/strings/string_util.h"
+#include "base/strings/stringprintf.h"
+#include "base/strings/utf_string_conversions.h"
+#include "chrome/browser/devtools/device/usb/android_rsa.h"
+#include "chrome/browser/devtools/device/usb/android_usb_socket.h"
+#include "components/usb_service/usb_device.h"
+#include "components/usb_service/usb_interface.h"
+#include "components/usb_service/usb_service.h"
+#include "content/public/browser/browser_thread.h"
+#include "crypto/rsa_private_key.h"
+#include "net/base/ip_endpoint.h"
+#include "net/base/net_errors.h"
+#include "net/socket/stream_socket.h"
+
+using usb_service::UsbConfigDescriptor;
+using usb_service::UsbDevice;
+using usb_service::UsbDeviceHandle;
+using usb_service::UsbInterfaceAltSettingDescriptor;
+using usb_service::UsbInterfaceDescriptor;
+using usb_service::UsbEndpointDescriptor;
+using usb_service::UsbService;
+using usb_service::UsbTransferStatus;
+
+namespace {
+
+const size_t kHeaderSize = 24;
+
+const int kAdbClass = 0xff;
+const int kAdbSubclass = 0x42;
+const int kAdbProtocol = 0x1;
+
+const int kUsbTimeout = 0;
+
+const uint32 kMaxPayload = 4096;
+const uint32 kVersion = 0x01000000;
+
+static const char kHostConnectMessage[] = "host::";
+
+using content::BrowserThread;
+
+typedef std::vector<scoped_refptr<UsbDevice> > UsbDevices;
+typedef std::set<scoped_refptr<UsbDevice> > UsbDeviceSet;
+
+// Stores android wrappers around claimed usb devices on caller thread.
+base::LazyInstance<std::vector<AndroidUsbDevice*> >::Leaky g_devices =
+    LAZY_INSTANCE_INITIALIZER;
+
+bool IsAndroidInterface(
+    scoped_refptr<const usb_service::UsbInterfaceDescriptor> interface) {
+  if (interface->GetNumAltSettings() == 0)
+    return false;
+
+  scoped_refptr<const UsbInterfaceAltSettingDescriptor> idesc =
+      interface->GetAltSetting(0);
+
+  if (idesc->GetInterfaceClass() != kAdbClass ||
+      idesc->GetInterfaceSubclass() != kAdbSubclass ||
+      idesc->GetInterfaceProtocol() != kAdbProtocol ||
+      idesc->GetNumEndpoints() != 2) {
+    return false;
+  }
+  return true;
+}
+
+scoped_refptr<AndroidUsbDevice> ClaimInterface(
+    crypto::RSAPrivateKey* rsa_key,
+    scoped_refptr<UsbDeviceHandle> usb_handle,
+    scoped_refptr<const UsbInterfaceDescriptor> interface,
+    int interface_id) {
+  scoped_refptr<const UsbInterfaceAltSettingDescriptor> idesc =
+      interface->GetAltSetting(0);
+
+  int inbound_address = 0;
+  int outbound_address = 0;
+  int zero_mask = 0;
+
+  for (size_t i = 0; i < idesc->GetNumEndpoints(); ++i) {
+    scoped_refptr<const UsbEndpointDescriptor> edesc =
+        idesc->GetEndpoint(i);
+    if (edesc->GetTransferType() != usb_service::USB_TRANSFER_BULK)
+      continue;
+    if (edesc->GetDirection() == usb_service::USB_DIRECTION_INBOUND)
+      inbound_address = edesc->GetAddress();
+    else
+      outbound_address = edesc->GetAddress();
+    zero_mask = edesc->GetMaximumPacketSize() - 1;
+  }
+
+  if (inbound_address == 0 || outbound_address == 0)
+    return NULL;
+
+  if (!usb_handle->ClaimInterface(interface_id))
+    return NULL;
+
+  base::string16 serial;
+  if (!usb_handle->GetSerial(&serial) || serial.empty())
+    return NULL;
+
+  return new AndroidUsbDevice(rsa_key, usb_handle, base::UTF16ToASCII(serial),
+                              inbound_address, outbound_address, zero_mask,
+                              interface_id);
+}
+
+uint32 Checksum(const std::string& data) {
+  unsigned char* x = (unsigned char*)data.data();
+  int count = data.length();
+  uint32 sum = 0;
+  while (count-- > 0)
+    sum += *x++;
+  return sum;
+}
+
+void DumpMessage(bool outgoing, const char* data, size_t length) {
+#if 0
+  std::string result = "";
+  if (length == kHeaderSize) {
+    for (size_t i = 0; i < 24; ++i) {
+      result += base::StringPrintf("%02x",
+          data[i] > 0 ? data[i] : (data[i] + 0x100) & 0xFF);
+      if ((i + 1) % 4 == 0)
+        result += " ";
+    }
+    for (size_t i = 0; i < 24; ++i) {
+      if (data[i] >= 0x20 && data[i] <= 0x7E)
+        result += data[i];
+      else
+        result += ".";
+    }
+  } else {
+    result = base::StringPrintf("%d: ", (int)length);
+    for (size_t i = 0; i < length; ++i) {
+      if (data[i] >= 0x20 && data[i] <= 0x7E)
+        result += data[i];
+      else
+        result += ".";
+    }
+  }
+  LOG(ERROR) << (outgoing ? "[out] " : "[ in] ") << result;
+#endif  // 0
+}
+
+void ReleaseInterface(scoped_refptr<UsbDeviceHandle> usb_device,
+                      int interface_id) {
+  usb_device->ReleaseInterface(interface_id);
+  usb_device->Close();
+}
+
+}  // namespace
+
+AdbMessage::AdbMessage(uint32 command,
+                       uint32 arg0,
+                       uint32 arg1,
+                       const std::string& body)
+    : command(command),
+      arg0(arg0),
+      arg1(arg1),
+      body(body) {
+}
+
+AdbMessage::~AdbMessage() {
+}
+
+static void RespondOnCallerThread(const AndroidUsbDevicesCallback& callback,
+                                  AndroidUsbDevices* new_devices) {
+  scoped_ptr<AndroidUsbDevices> devices(new_devices);
+
+  // Add raw pointers to the newly claimed devices.
+  for (AndroidUsbDevices::iterator it = devices->begin(); it != devices->end();
+       ++it) {
+    g_devices.Get().push_back(*it);
+  }
+
+  // Return all claimed devices.
+  AndroidUsbDevices result(g_devices.Get().begin(), g_devices.Get().end());
+  callback.Run(result);
+}
+
+static void RespondOnFileThread(
+    const AndroidUsbDevicesCallback& callback,
+    AndroidUsbDevices* devices,
+    scoped_refptr<base::MessageLoopProxy> caller_message_loop_proxy) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
+  caller_message_loop_proxy->PostTask(
+      FROM_HERE,
+      base::Bind(&RespondOnCallerThread, callback, devices));
+}
+
+static void OpenAndroidDeviceOnFileThread(
+    AndroidUsbDevices* devices,
+    crypto::RSAPrivateKey* rsa_key,
+    const base::Closure& barrier,
+    scoped_refptr<UsbDevice> device,
+    int interface_id,
+    bool success) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
+  if (success) {
+    scoped_refptr<UsbConfigDescriptor> config = device->ListInterfaces();
+    scoped_refptr<UsbDeviceHandle> usb_handle = device->Open();
+    if (usb_handle) {
+      scoped_refptr<AndroidUsbDevice> android_device =
+        ClaimInterface(rsa_key, usb_handle, config->GetInterface(interface_id),
+                       interface_id);
+      if (android_device.get())
+        devices->push_back(android_device.get());
+      else
+        usb_handle->Close();
+    }
+  }
+  barrier.Run();
+}
+
+static int CountOnFileThread() {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
+  UsbService* service = UsbService::GetInstance();
+  UsbDevices usb_devices;
+  if (service != NULL)
+    service->GetDevices(&usb_devices);
+  int device_count = 0;
+  for (UsbDevices::iterator it = usb_devices.begin(); it != usb_devices.end();
+       ++it) {
+    scoped_refptr<UsbConfigDescriptor> config = (*it)->ListInterfaces();
+    if (!config)
+      continue;
+
+    for (size_t j = 0; j < config->GetNumInterfaces(); ++j) {
+      if (IsAndroidInterface(config->GetInterface(j)))
+        ++device_count;
+    }
+  }
+  return device_count;
+}
+
+static void EnumerateOnFileThread(
+    crypto::RSAPrivateKey* rsa_key,
+    const AndroidUsbDevicesCallback& callback,
+    scoped_refptr<base::MessageLoopProxy> caller_message_loop_proxy) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
+
+  UsbService* service = UsbService::GetInstance();
+  UsbDevices usb_devices;
+  if (service != NULL)
+    service->GetDevices(&usb_devices);
+
+  // Add new devices.
+  AndroidUsbDevices* devices = new AndroidUsbDevices();
+  base::Closure barrier = base::BarrierClosure(
+      usb_devices.size(), base::Bind(&RespondOnFileThread,
+                                     callback,
+                                     devices,
+                                     caller_message_loop_proxy));
+
+  for (UsbDevices::iterator it = usb_devices.begin(); it != usb_devices.end();
+       ++it) {
+    scoped_refptr<UsbConfigDescriptor> config = (*it)->ListInterfaces();
+    if (!config) {
+      barrier.Run();
+      continue;
+    }
+
+    bool has_android_interface = false;
+    for (size_t j = 0; j < config->GetNumInterfaces(); ++j) {
+      if (!IsAndroidInterface(config->GetInterface(j)))
+        continue;
+
+      // Request permission on Chrome OS.
+#if defined(OS_CHROMEOS)
+      (*it)->RequestUsbAcess(j, base::Bind(&OpenAndroidDeviceOnFileThread,
+                                           devices, rsa_key, barrier, *it, j));
+#else
+      OpenAndroidDeviceOnFileThread(devices, rsa_key, barrier, *it, j, true);
+#endif  // defined(OS_CHROMEOS)
+
+      has_android_interface = true;
+      break;
+    }
+    if (!has_android_interface)
+      barrier.Run();
+  }
+}
+
+// static
+void AndroidUsbDevice::CountDevices(
+    const base::Callback<void(int)>& callback) {
+  BrowserThread::PostTaskAndReplyWithResult(
+      BrowserThread::FILE,
+      FROM_HERE,
+      base::Bind(&CountOnFileThread),
+      callback);
+}
+
+// static
+void AndroidUsbDevice::Enumerate(crypto::RSAPrivateKey* rsa_key,
+                                 const AndroidUsbDevicesCallback& callback) {
+
+  // Collect devices with closed handles.
+  for (std::vector<AndroidUsbDevice*>::iterator it = g_devices.Get().begin();
+       it != g_devices.Get().end(); ++it) {
+    if ((*it)->usb_handle_) {
+      BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE,
+          base::Bind(&AndroidUsbDevice::TerminateIfReleased, *it,
+                     (*it)->usb_handle_));
+    }
+  }
+
+  // Then look for the new devices.
+  BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE,
+                          base::Bind(&EnumerateOnFileThread, rsa_key, callback,
+                                     base::MessageLoopProxy::current()));
+}
+
+AndroidUsbDevice::AndroidUsbDevice(crypto::RSAPrivateKey* rsa_key,
+                                   scoped_refptr<UsbDeviceHandle> usb_device,
+                                   const std::string& serial,
+                                   int inbound_address,
+                                   int outbound_address,
+                                   int zero_mask,
+                                   int interface_id)
+    : message_loop_(NULL),
+      rsa_key_(rsa_key->Copy()),
+      usb_handle_(usb_device),
+      serial_(serial),
+      inbound_address_(inbound_address),
+      outbound_address_(outbound_address),
+      zero_mask_(zero_mask),
+      interface_id_(interface_id),
+      is_connected_(false),
+      signature_sent_(false),
+      last_socket_id_(256),
+      weak_factory_(this) {
+}
+
+void AndroidUsbDevice::InitOnCallerThread() {
+  if (message_loop_)
+    return;
+  message_loop_ = base::MessageLoop::current();
+  Queue(new AdbMessage(AdbMessage::kCommandCNXN, kVersion, kMaxPayload,
+                       kHostConnectMessage));
+  ReadHeader();
+}
+
+net::StreamSocket* AndroidUsbDevice::CreateSocket(const std::string& command) {
+  if (!usb_handle_)
+    return NULL;
+
+  uint32 socket_id = ++last_socket_id_;
+  sockets_[socket_id] = new AndroidUsbSocket(this, socket_id, command,
+      base::Bind(&AndroidUsbDevice::SocketDeleted, this));
+  return sockets_[socket_id];
+}
+
+void AndroidUsbDevice::Send(uint32 command,
+                            uint32 arg0,
+                            uint32 arg1,
+                            const std::string& body) {
+  scoped_refptr<AdbMessage> m = new AdbMessage(command, arg0, arg1, body);
+  // Delay open request if not yet connected.
+  if (!is_connected_) {
+    pending_messages_.push_back(m);
+    return;
+  }
+  Queue(m);
+}
+
+AndroidUsbDevice::~AndroidUsbDevice() {
+  DCHECK(message_loop_ == base::MessageLoop::current());
+  Terminate();
+}
+
+void AndroidUsbDevice::Queue(scoped_refptr<AdbMessage> message) {
+  DCHECK(message_loop_ == base::MessageLoop::current());
+
+  // Queue header.
+  std::vector<uint32> header;
+  header.push_back(message->command);
+  header.push_back(message->arg0);
+  header.push_back(message->arg1);
+  bool append_zero = true;
+  if (message->body.empty())
+    append_zero = false;
+  if (message->command == AdbMessage::kCommandAUTH &&
+      message->arg0 == AdbMessage::kAuthSignature)
+    append_zero = false;
+  if (message->command == AdbMessage::kCommandWRTE)
+    append_zero = false;
+
+  size_t body_length = message->body.length() + (append_zero ? 1 : 0);
+  header.push_back(body_length);
+  header.push_back(Checksum(message->body));
+  header.push_back(message->command ^ 0xffffffff);
+  scoped_refptr<net::IOBuffer> header_buffer = new net::IOBuffer(kHeaderSize);
+  memcpy(header_buffer.get()->data(), &header[0], kHeaderSize);
+  outgoing_queue_.push(std::make_pair(header_buffer, kHeaderSize));
+
+  // Queue body.
+  if (!message->body.empty()) {
+    scoped_refptr<net::IOBuffer> body_buffer = new net::IOBuffer(body_length);
+    memcpy(body_buffer->data(), message->body.data(), message->body.length());
+    if (append_zero)
+      body_buffer->data()[body_length - 1] = 0;
+    outgoing_queue_.push(std::make_pair(body_buffer, body_length));
+    if (zero_mask_ && (body_length & zero_mask_) == 0) {
+      // Send a zero length packet.
+      outgoing_queue_.push(std::make_pair(body_buffer, 0));
+    }
+  }
+  ProcessOutgoing();
+}
+
+void AndroidUsbDevice::ProcessOutgoing() {
+  DCHECK(message_loop_ == base::MessageLoop::current());
+
+  if (outgoing_queue_.empty() || !usb_handle_)
+    return;
+
+  BulkMessage message = outgoing_queue_.front();
+  outgoing_queue_.pop();
+  DumpMessage(true, message.first->data(), message.second);
+  usb_handle_->BulkTransfer(
+      usb_service::USB_DIRECTION_OUTBOUND, outbound_address_,
+      message.first, message.second, kUsbTimeout,
+      base::Bind(&AndroidUsbDevice::OutgoingMessageSent,
+                 weak_factory_.GetWeakPtr()));
+}
+
+void AndroidUsbDevice::OutgoingMessageSent(UsbTransferStatus status,
+                                           scoped_refptr<net::IOBuffer> buffer,
+                                           size_t result) {
+  DCHECK(message_loop_ == base::MessageLoop::current());
+
+  if (status != usb_service::USB_TRANSFER_COMPLETED)
+    return;
+  message_loop_->PostTask(FROM_HERE,
+                          base::Bind(&AndroidUsbDevice::ProcessOutgoing, this));
+}
+
+void AndroidUsbDevice::ReadHeader() {
+  DCHECK(message_loop_ == base::MessageLoop::current());
+
+  if (!usb_handle_)
+    return;
+  scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer(kHeaderSize);
+  usb_handle_->BulkTransfer(
+      usb_service::USB_DIRECTION_INBOUND, inbound_address_,
+      buffer, kHeaderSize, kUsbTimeout,
+      base::Bind(&AndroidUsbDevice::ParseHeader,
+                 weak_factory_.GetWeakPtr()));
+}
+
+void AndroidUsbDevice::ParseHeader(UsbTransferStatus status,
+                                   scoped_refptr<net::IOBuffer> buffer,
+                                   size_t result) {
+  DCHECK(message_loop_ == base::MessageLoop::current());
+
+  if (status == usb_service::USB_TRANSFER_TIMEOUT) {
+    message_loop_->PostTask(FROM_HERE,
+                            base::Bind(&AndroidUsbDevice::ReadHeader, this));
+    return;
+  }
+
+  if (status != usb_service::USB_TRANSFER_COMPLETED || result != kHeaderSize) {
+    TransferError(status);
+    return;
+  }
+
+  DumpMessage(false, buffer->data(), result);
+  std::vector<uint32> header(6);
+  memcpy(&header[0], buffer->data(), result);
+  scoped_refptr<AdbMessage> message =
+      new AdbMessage(header[0], header[1], header[2], "");
+  uint32 data_length = header[3];
+  uint32 data_check = header[4];
+  uint32 magic = header[5];
+  if ((message->command ^ 0xffffffff) != magic) {
+    TransferError(usb_service::USB_TRANSFER_ERROR);
+    return;
+  }
+
+  if (data_length == 0) {
+    message_loop_->PostTask(FROM_HERE,
+                            base::Bind(&AndroidUsbDevice::HandleIncoming, this,
+                                       message));
+    return;
+  }
+
+  message_loop_->PostTask(FROM_HERE,
+                          base::Bind(&AndroidUsbDevice::ReadBody, this,
+                                     message, data_length, data_check));
+}
+
+void AndroidUsbDevice::ReadBody(scoped_refptr<AdbMessage> message,
+                                uint32 data_length,
+                                uint32 data_check) {
+  DCHECK(message_loop_ == base::MessageLoop::current());
+
+  if (!usb_handle_)
+    return;
+  scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer(data_length);
+  usb_handle_->BulkTransfer(
+      usb_service::USB_DIRECTION_INBOUND, inbound_address_,
+      buffer, data_length, kUsbTimeout,
+      base::Bind(&AndroidUsbDevice::ParseBody, weak_factory_.GetWeakPtr(),
+                 message, data_length, data_check));
+}
+
+void AndroidUsbDevice::ParseBody(scoped_refptr<AdbMessage> message,
+                                 uint32 data_length,
+                                 uint32 data_check,
+                                 UsbTransferStatus status,
+                                 scoped_refptr<net::IOBuffer> buffer,
+                                 size_t result) {
+  DCHECK(message_loop_ == base::MessageLoop::current());
+
+  if (status == usb_service::USB_TRANSFER_TIMEOUT) {
+    message_loop_->PostTask(FROM_HERE,
+                            base::Bind(&AndroidUsbDevice::ReadBody, this,
+                            message, data_length, data_check));
+    return;
+  }
+
+  if (status != usb_service::USB_TRANSFER_COMPLETED ||
+      static_cast<uint32>(result) != data_length) {
+    TransferError(status);
+    return;
+  }
+
+  DumpMessage(false, buffer->data(), data_length);
+  message->body = std::string(buffer->data(), result);
+  if (Checksum(message->body) != data_check) {
+    TransferError(usb_service::USB_TRANSFER_ERROR);
+    return;
+  }
+
+  message_loop_->PostTask(FROM_HERE,
+                          base::Bind(&AndroidUsbDevice::HandleIncoming, this,
+                                     message));
+}
+
+void AndroidUsbDevice::HandleIncoming(scoped_refptr<AdbMessage> message) {
+  DCHECK(message_loop_ == base::MessageLoop::current());
+
+  switch (message->command) {
+    case AdbMessage::kCommandAUTH:
+      {
+        DCHECK_EQ(message->arg0, static_cast<uint32>(AdbMessage::kAuthToken));
+        if (signature_sent_) {
+          Queue(new AdbMessage(AdbMessage::kCommandAUTH,
+                               AdbMessage::kAuthRSAPublicKey, 0,
+                               AndroidRSAPublicKey(rsa_key_.get())));
+        } else {
+          signature_sent_ = true;
+          std::string signature = AndroidRSASign(rsa_key_.get(), message->body);
+          if (!signature.empty()) {
+            Queue(new AdbMessage(AdbMessage::kCommandAUTH,
+                                 AdbMessage::kAuthSignature, 0,
+                                 signature));
+          } else {
+            Queue(new AdbMessage(AdbMessage::kCommandAUTH,
+                                 AdbMessage::kAuthRSAPublicKey, 0,
+                                 AndroidRSAPublicKey(rsa_key_.get())));
+          }
+        }
+      }
+      break;
+    case AdbMessage::kCommandCNXN:
+      {
+        is_connected_ = true;
+        PendingMessages pending;
+        pending.swap(pending_messages_);
+        for (PendingMessages::iterator it = pending.begin();
+             it != pending.end(); ++it) {
+          Queue(*it);
+        }
+      }
+      break;
+    case AdbMessage::kCommandOKAY:
+    case AdbMessage::kCommandWRTE:
+    case AdbMessage::kCommandCLSE:
+      {
+        AndroidUsbSockets::iterator it = sockets_.find(message->arg1);
+        if (it != sockets_.end())
+          it->second->HandleIncoming(message);
+      }
+      break;
+    default:
+      break;
+  }
+  ReadHeader();
+}
+
+void AndroidUsbDevice::TransferError(UsbTransferStatus status) {
+  DCHECK(message_loop_ == base::MessageLoop::current());
+
+  message_loop_->PostTask(FROM_HERE,
+                          base::Bind(&AndroidUsbDevice::Terminate, this));
+}
+
+void AndroidUsbDevice::TerminateIfReleased(
+    scoped_refptr<UsbDeviceHandle> usb_handle) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
+  if (usb_handle->device())
+    return;
+  message_loop_->PostTask(FROM_HERE,
+                          base::Bind(&AndroidUsbDevice::Terminate, this));
+}
+
+void AndroidUsbDevice::Terminate() {
+  DCHECK(message_loop_ == base::MessageLoop::current());
+
+  std::vector<AndroidUsbDevice*>::iterator it =
+      std::find(g_devices.Get().begin(), g_devices.Get().end(), this);
+  if (it != g_devices.Get().end())
+    g_devices.Get().erase(it);
+
+  if (!usb_handle_)
+    return;
+
+  // Make sure we zero-out handle so that closing connections did not open
+  // new connections.
+  scoped_refptr<UsbDeviceHandle> usb_handle = usb_handle_;
+  usb_handle_ = NULL;
+
+  // Iterate over copy.
+  AndroidUsbSockets sockets(sockets_);
+  for (AndroidUsbSockets::iterator it = sockets.begin();
+       it != sockets.end(); ++it) {
+    it->second->Terminated();
+  }
+  DCHECK(sockets_.empty());
+
+  BrowserThread::PostTask(
+      BrowserThread::FILE, FROM_HERE,
+      base::Bind(&ReleaseInterface, usb_handle, interface_id_));
+}
+
+void AndroidUsbDevice::SocketDeleted(uint32 socket_id) {
+  DCHECK(message_loop_ == base::MessageLoop::current());
+
+  sockets_.erase(socket_id);
+}
diff --git a/chrome/browser/devtools/device/usb/android_usb_device.h b/chrome/browser/devtools/device/usb/android_usb_device.h
new file mode 100644
index 0000000..f27df16
--- /dev/null
+++ b/chrome/browser/devtools/device/usb/android_usb_device.h
@@ -0,0 +1,168 @@
+// 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.
+
+#ifndef CHROME_BROWSER_DEVTOOLS_DEVICE_USB_ANDROID_USB_DEVICE_H_
+#define CHROME_BROWSER_DEVTOOLS_DEVICE_USB_ANDROID_USB_DEVICE_H_
+
+#include <map>
+#include <queue>
+#include <vector>
+#include "base/memory/ref_counted.h"
+#include "base/memory/weak_ptr.h"
+#include "components/usb_service/usb_device_handle.h"
+
+namespace base {
+class MessageLoop;
+}
+
+namespace crypto {
+class RSAPrivateKey;
+}
+
+namespace net {
+class StreamSocket;
+}
+
+class AndroidUsbSocket;
+
+class AdbMessage : public base::RefCounted<AdbMessage> {
+ public:
+  enum Command {
+    kCommandSYNC = 0x434e5953,
+    kCommandCNXN = 0x4e584e43,
+    kCommandOPEN = 0x4e45504f,
+    kCommandOKAY = 0x59414b4f,
+    kCommandCLSE = 0x45534c43,
+    kCommandWRTE = 0x45545257,
+    kCommandAUTH = 0x48545541
+  };
+
+  enum Auth {
+    kAuthToken = 1,
+    kAuthSignature = 2,
+    kAuthRSAPublicKey = 3
+  };
+
+  AdbMessage(uint32 command,
+             uint32 arg0,
+             uint32 arg1,
+             const std::string& body);
+
+  uint32 command;
+  uint32 arg0;
+  uint32 arg1;
+  std::string body;
+ private:
+  friend class base::RefCounted<AdbMessage>;
+  ~AdbMessage();
+
+  DISALLOW_COPY_AND_ASSIGN(AdbMessage);
+};
+
+class AndroidUsbDevice;
+typedef std::vector<scoped_refptr<AndroidUsbDevice> > AndroidUsbDevices;
+typedef base::Callback<void(const AndroidUsbDevices&)>
+    AndroidUsbDevicesCallback;
+
+class AndroidUsbDevice : public base::RefCountedThreadSafe<AndroidUsbDevice> {
+ public:
+  static void Enumerate(crypto::RSAPrivateKey* rsa_key,
+                        const AndroidUsbDevicesCallback& callback);
+
+  static void CountDevices(const base::Callback<void(int)>& callback);
+
+  AndroidUsbDevice(crypto::RSAPrivateKey* rsa_key,
+                   scoped_refptr<usb_service::UsbDeviceHandle> device,
+                   const std::string& serial,
+                   int inbound_address,
+                   int outbound_address,
+                   int zero_mask,
+                   int interface_id);
+
+  void InitOnCallerThread();
+
+  net::StreamSocket* CreateSocket(const std::string& command);
+
+  void Send(uint32 command,
+            uint32 arg0,
+            uint32 arg1,
+            const std::string& body);
+
+  scoped_refptr<usb_service::UsbDeviceHandle> usb_device() {
+    return usb_handle_;
+  }
+
+  std::string serial() { return serial_; }
+
+  bool is_connected() { return is_connected_; }
+
+ private:
+  friend class base::RefCountedThreadSafe<AndroidUsbDevice>;
+  virtual ~AndroidUsbDevice();
+
+  void Queue(scoped_refptr<AdbMessage> message);
+  void ProcessOutgoing();
+  void OutgoingMessageSent(usb_service::UsbTransferStatus status,
+                           scoped_refptr<net::IOBuffer> buffer,
+                           size_t result);
+
+  void ReadHeader();
+  void ParseHeader(usb_service::UsbTransferStatus status,
+                   scoped_refptr<net::IOBuffer> buffer,
+                   size_t result);
+
+  void ReadBody(scoped_refptr<AdbMessage> message,
+                uint32 data_length,
+                uint32 data_check);
+  void ParseBody(scoped_refptr<AdbMessage> message,
+                 uint32 data_length,
+                 uint32 data_check,
+                 usb_service::UsbTransferStatus status,
+                 scoped_refptr<net::IOBuffer> buffer,
+                 size_t result);
+
+  void HandleIncoming(scoped_refptr<AdbMessage> message);
+
+  void TransferError(usb_service::UsbTransferStatus status);
+
+  void TerminateIfReleased(
+      scoped_refptr<usb_service::UsbDeviceHandle> usb_handle);
+  void Terminate();
+
+  void SocketDeleted(uint32 socket_id);
+
+  base::MessageLoop* message_loop_;
+
+  scoped_ptr<crypto::RSAPrivateKey> rsa_key_;
+
+  // Device info
+  scoped_refptr<usb_service::UsbDeviceHandle> usb_handle_;
+  std::string serial_;
+  int inbound_address_;
+  int outbound_address_;
+  int zero_mask_;
+  int interface_id_;
+
+  bool is_connected_;
+  bool signature_sent_;
+
+  // Created sockets info
+  uint32 last_socket_id_;
+  typedef std::map<uint32, AndroidUsbSocket*> AndroidUsbSockets;
+  AndroidUsbSockets sockets_;
+
+  // Outgoing bulk queue
+  typedef std::pair<scoped_refptr<net::IOBuffer>, size_t> BulkMessage;
+  std::queue<BulkMessage> outgoing_queue_;
+
+  // Outgoing messages pending connect
+  typedef std::vector<scoped_refptr<AdbMessage> > PendingMessages;
+  PendingMessages pending_messages_;
+
+  base::WeakPtrFactory<AndroidUsbDevice> weak_factory_;
+
+  DISALLOW_COPY_AND_ASSIGN(AndroidUsbDevice);
+};
+
+#endif  // CHROME_BROWSER_DEVTOOLS_DEVICE_USB_ANDROID_USB_DEVICE_H_
diff --git a/chrome/browser/devtools/device/usb/android_usb_socket.cc b/chrome/browser/devtools/device/usb/android_usb_socket.cc
new file mode 100644
index 0000000..415518e
--- /dev/null
+++ b/chrome/browser/devtools/device/usb/android_usb_socket.cc
@@ -0,0 +1,254 @@
+// 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.
+
+#include "chrome/browser/devtools/device/usb/android_usb_socket.h"
+
+#include "base/message_loop/message_loop.h"
+
+namespace {
+
+const int kMaxPayload = 4096;
+
+}  // namespace
+
+AndroidUsbSocket::IORequest::IORequest(
+    net::IOBuffer* buffer,
+    int length,
+    const net::CompletionCallback& callback)
+    : buffer(buffer),
+      length(length),
+      callback(callback) {
+}
+
+AndroidUsbSocket::IORequest::~IORequest() {
+}
+
+AndroidUsbSocket::AndroidUsbSocket(scoped_refptr<AndroidUsbDevice> device,
+                                   uint32 socket_id,
+                                   const std::string& command,
+                                   base::Callback<void(uint32)> delete_callback)
+    : device_(device),
+      command_(command),
+      delete_callback_(delete_callback),
+      local_id_(socket_id),
+      remote_id_(0),
+      is_connected_(false) {
+}
+
+AndroidUsbSocket::~AndroidUsbSocket() {
+  DCHECK(CalledOnValidThread());
+  if (is_connected_)
+    Disconnect();
+  if (!delete_callback_.is_null())
+    delete_callback_.Run(local_id_);
+}
+
+void AndroidUsbSocket::HandleIncoming(scoped_refptr<AdbMessage> message) {
+  if (!device_)
+    return;
+
+  CHECK_EQ(message->arg1, local_id_);
+  switch (message->command) {
+    case AdbMessage::kCommandOKAY:
+      if (!is_connected_) {
+        remote_id_ = message->arg0;
+        is_connected_ = true;
+        net::CompletionCallback callback = connect_callback_;
+        connect_callback_.Reset();
+        callback.Run(net::OK);
+        // "this" can be NULL.
+      } else {
+        RespondToWriters();
+        // "this" can be NULL.
+      }
+      break;
+    case AdbMessage::kCommandWRTE:
+      device_->Send(AdbMessage::kCommandOKAY, local_id_, message->arg0, "");
+      read_buffer_ += message->body;
+      // Allow WRTE over new connection even though OKAY ack was not received.
+      if (!is_connected_) {
+        remote_id_ = message->arg0;
+        is_connected_ = true;
+        net::CompletionCallback callback = connect_callback_;
+        connect_callback_.Reset();
+        callback.Run(net::OK);
+        // "this" can be NULL.
+      } else {
+        RespondToReaders(false);
+        // "this" can be NULL.
+      }
+      break;
+    case AdbMessage::kCommandCLSE:
+      if (is_connected_)
+        device_->Send(AdbMessage::kCommandCLSE, local_id_, 0, "");
+      Terminated();
+      // "this" can be NULL.
+      break;
+    default:
+      break;
+  }
+}
+
+void AndroidUsbSocket::Terminated() {
+  is_connected_ = false;
+
+  // Break the socket -> device connection, release the device.
+  delete_callback_.Run(local_id_);
+  delete_callback_.Reset();
+  device_ = NULL;
+
+  // Respond to pending callbacks.
+  if (!connect_callback_.is_null()) {
+    net::CompletionCallback callback = connect_callback_;
+    connect_callback_.Reset();
+    callback.Run(net::ERR_FAILED);
+    // "this" can be NULL.
+    return;
+  }
+  RespondToReaders(true);
+}
+
+int AndroidUsbSocket::Read(net::IOBuffer* buffer,
+                           int length,
+                           const net::CompletionCallback& callback) {
+  if (!is_connected_)
+    return device_ ? net::ERR_SOCKET_NOT_CONNECTED : 0;
+
+  if (read_buffer_.empty()) {
+    read_requests_.push_back(IORequest(buffer, length, callback));
+    return net::ERR_IO_PENDING;
+  }
+
+  size_t bytes_to_copy = static_cast<size_t>(length) > read_buffer_.length() ?
+      read_buffer_.length() : static_cast<size_t>(length);
+  memcpy(buffer->data(), read_buffer_.data(), bytes_to_copy);
+  if (read_buffer_.length() > bytes_to_copy)
+    read_buffer_ = read_buffer_.substr(bytes_to_copy);
+  else
+    read_buffer_ = "";
+  return bytes_to_copy;
+}
+
+int AndroidUsbSocket::Write(net::IOBuffer* buffer,
+                            int length,
+                            const net::CompletionCallback& callback) {
+  if (!is_connected_)
+    return net::ERR_SOCKET_NOT_CONNECTED;
+
+  if (length > kMaxPayload)
+    length = kMaxPayload;
+  write_requests_.push_back(IORequest(NULL, length, callback));
+  device_->Send(AdbMessage::kCommandWRTE, local_id_, remote_id_,
+                 std::string(buffer->data(), length));
+  return net::ERR_IO_PENDING;
+}
+
+int AndroidUsbSocket::SetReceiveBufferSize(int32 size) {
+  NOTIMPLEMENTED();
+  return net::ERR_NOT_IMPLEMENTED;
+}
+
+int AndroidUsbSocket::SetSendBufferSize(int32 size) {
+  NOTIMPLEMENTED();
+  return net::ERR_NOT_IMPLEMENTED;
+}
+
+int AndroidUsbSocket::Connect(const net::CompletionCallback& callback) {
+  DCHECK(CalledOnValidThread());
+  if (!device_)
+    return net::ERR_FAILED;
+  connect_callback_ = callback;
+  device_->Send(AdbMessage::kCommandOPEN, local_id_, 0, command_);
+  return net::ERR_IO_PENDING;
+}
+
+void AndroidUsbSocket::Disconnect() {
+  if (!device_)
+    return;
+  device_->Send(AdbMessage::kCommandCLSE, local_id_, remote_id_, "");
+  Terminated();
+}
+
+bool AndroidUsbSocket::IsConnected() const {
+  DCHECK(CalledOnValidThread());
+  return is_connected_;
+}
+
+bool AndroidUsbSocket::IsConnectedAndIdle() const {
+  NOTIMPLEMENTED();
+  return false;
+}
+
+int AndroidUsbSocket::GetPeerAddress(net::IPEndPoint* address) const {
+  net::IPAddressNumber ip(net::kIPv4AddressSize);
+  *address = net::IPEndPoint(ip, 0);
+  return net::OK;
+}
+
+int AndroidUsbSocket::GetLocalAddress(net::IPEndPoint* address) const {
+  NOTIMPLEMENTED();
+  return net::ERR_NOT_IMPLEMENTED;
+}
+
+const net::BoundNetLog& AndroidUsbSocket::NetLog() const {
+  return net_log_;
+}
+
+void AndroidUsbSocket::SetSubresourceSpeculation() {
+  NOTIMPLEMENTED();
+}
+
+void AndroidUsbSocket::SetOmniboxSpeculation() {
+  NOTIMPLEMENTED();
+}
+
+bool AndroidUsbSocket::WasEverUsed() const {
+  NOTIMPLEMENTED();
+  return true;
+}
+
+bool AndroidUsbSocket::UsingTCPFastOpen() const {
+  NOTIMPLEMENTED();
+  return true;
+}
+
+bool AndroidUsbSocket::WasNpnNegotiated() const {
+  NOTIMPLEMENTED();
+  return true;
+}
+
+net::NextProto AndroidUsbSocket::GetNegotiatedProtocol() const {
+  NOTIMPLEMENTED();
+  return net::kProtoUnknown;
+}
+
+bool AndroidUsbSocket::GetSSLInfo(net::SSLInfo* ssl_info) {
+  return false;
+}
+
+void AndroidUsbSocket::RespondToReaders(bool disconnect) {
+  std::deque<IORequest> read_requests;
+  read_requests.swap(read_requests_);
+  while (!read_requests.empty() && (!read_buffer_.empty() || disconnect)) {
+    IORequest read_request = read_requests.front();
+    read_requests.pop_front();
+    size_t bytes_to_copy =
+        static_cast<size_t>(read_request.length) > read_buffer_.length() ?
+            read_buffer_.length() : static_cast<size_t>(read_request.length);
+    memcpy(read_request.buffer->data(), read_buffer_.data(), bytes_to_copy);
+    if (read_buffer_.length() > bytes_to_copy)
+      read_buffer_ = read_buffer_.substr(bytes_to_copy);
+    else
+      read_buffer_ = "";
+    read_request.callback.Run(bytes_to_copy);
+  }
+}
+
+void AndroidUsbSocket::RespondToWriters() {
+  if (!write_requests_.empty()) {
+    IORequest write_request = write_requests_.front();
+    write_requests_.pop_front();
+    write_request.callback.Run(write_request.length);
+  }
+}
diff --git a/chrome/browser/devtools/device/usb/android_usb_socket.h b/chrome/browser/devtools/device/usb/android_usb_socket.h
new file mode 100644
index 0000000..8a207f1
--- /dev/null
+++ b/chrome/browser/devtools/device/usb/android_usb_socket.h
@@ -0,0 +1,89 @@
+// 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.
+
+#ifndef CHROME_BROWSER_DEVTOOLS_DEVICE_USB_ANDROID_USB_SOCKET_H_
+#define CHROME_BROWSER_DEVTOOLS_DEVICE_USB_ANDROID_USB_SOCKET_H_
+
+#include <deque>
+
+#include "base/memory/ref_counted.h"
+#include "base/threading/non_thread_safe.h"
+#include "chrome/browser/devtools/device/usb/android_usb_device.h"
+#include "net/base/ip_endpoint.h"
+#include "net/base/net_errors.h"
+#include "net/socket/stream_socket.h"
+
+namespace base {
+class MessageLoop;
+}
+
+class AdbMessage;
+
+class AndroidUsbSocket : public net::StreamSocket,
+                         public base::NonThreadSafe {
+ public:
+  AndroidUsbSocket(scoped_refptr<AndroidUsbDevice> device,
+                   uint32 socket_id,
+                   const std::string& command,
+                   base::Callback<void(uint32)> delete_callback);
+  virtual ~AndroidUsbSocket();
+
+  void HandleIncoming(scoped_refptr<AdbMessage> message);
+
+  void Terminated();
+
+  // net::StreamSocket implementation.
+  virtual int Read(net::IOBuffer* buf, int buf_len,
+                   const net::CompletionCallback& callback) OVERRIDE;
+  virtual int Write(net::IOBuffer* buf, int buf_len,
+                    const net::CompletionCallback& callback) OVERRIDE;
+  virtual int SetReceiveBufferSize(int32 size) OVERRIDE;
+  virtual int SetSendBufferSize(int32 size) OVERRIDE;
+  virtual int Connect(const net::CompletionCallback& callback) OVERRIDE;
+  virtual void Disconnect() OVERRIDE;
+  virtual bool IsConnected() const OVERRIDE;
+  virtual bool IsConnectedAndIdle() const OVERRIDE;
+  virtual int GetPeerAddress(net::IPEndPoint* address) const OVERRIDE;
+  virtual int GetLocalAddress(net::IPEndPoint* address) const OVERRIDE;
+  virtual const net::BoundNetLog& NetLog() const OVERRIDE;
+  virtual void SetSubresourceSpeculation() OVERRIDE;
+  virtual void SetOmniboxSpeculation() OVERRIDE;
+  virtual bool WasEverUsed() const OVERRIDE;
+  virtual bool UsingTCPFastOpen() const OVERRIDE;
+  virtual bool WasNpnNegotiated() const OVERRIDE;
+  virtual net::NextProto GetNegotiatedProtocol() const OVERRIDE;
+  virtual bool GetSSLInfo(net::SSLInfo* ssl_info) OVERRIDE;
+
+ private:
+  class IORequest {
+   public:
+    IORequest(net::IOBuffer* buffer,
+              int length,
+              const net::CompletionCallback& callback);
+    ~IORequest();
+
+    scoped_refptr<net::IOBuffer> buffer;
+    int length;
+    net::CompletionCallback callback;
+  };
+
+  void RespondToReaders(bool diconnect);
+  void RespondToWriters();
+
+  scoped_refptr<AndroidUsbDevice> device_;
+  std::string command_;
+  base::Callback<void(uint32)> delete_callback_;
+  uint32 local_id_;
+  uint32 remote_id_;
+  net::BoundNetLog net_log_;
+  bool is_connected_;
+  std::string read_buffer_;
+  net::CompletionCallback connect_callback_;
+  std::deque<IORequest> read_requests_;
+  std::deque<IORequest> write_requests_;
+
+  DISALLOW_COPY_AND_ASSIGN(AndroidUsbSocket);
+};
+
+#endif  // CHROME_BROWSER_DEVTOOLS_DEVICE_USB_ANDROID_USB_SOCKET_H_
diff --git a/chrome/browser/devtools/devtools_adb_bridge.cc b/chrome/browser/devtools/devtools_adb_bridge.cc
deleted file mode 100644
index 5cadea4..0000000
--- a/chrome/browser/devtools/devtools_adb_bridge.cc
+++ /dev/null
@@ -1,1320 +0,0 @@
-// Copyright (c) 2013 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 "chrome/browser/devtools/devtools_adb_bridge.h"
-
-#include <map>
-#include <vector>
-
-#include "base/base64.h"
-#include "base/bind.h"
-#include "base/command_line.h"
-#include "base/compiler_specific.h"
-#include "base/json/json_reader.h"
-#include "base/lazy_instance.h"
-#include "base/logging.h"
-#include "base/memory/singleton.h"
-#include "base/message_loop/message_loop.h"
-#include "base/prefs/pref_service.h"
-#include "base/strings/string_number_conversions.h"
-#include "base/strings/string_util.h"
-#include "base/strings/stringprintf.h"
-#include "base/strings/utf_string_conversions.h"
-#include "base/threading/thread.h"
-#include "base/values.h"
-#include "chrome/browser/devtools/adb/android_rsa.h"
-#include "chrome/browser/devtools/adb_client_socket.h"
-#include "chrome/browser/devtools/devtools_protocol.h"
-#include "chrome/browser/devtools/devtools_target_impl.h"
-#include "chrome/browser/devtools/devtools_window.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/common/pref_names.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
-#include "content/public/browser/devtools_agent_host.h"
-#include "content/public/browser/devtools_client_host.h"
-#include "content/public/browser/devtools_external_agent_proxy.h"
-#include "content/public/browser/devtools_external_agent_proxy_delegate.h"
-#include "content/public/browser/devtools_manager.h"
-#include "content/public/browser/user_metrics.h"
-#include "crypto/rsa_private_key.h"
-#include "net/base/escape.h"
-#include "net/base/net_errors.h"
-
-using content::BrowserThread;
-
-namespace {
-
-const char kDeviceModelCommand[] = "shell:getprop ro.product.model";
-const char kInstalledChromePackagesCommand[] = "shell:pm list packages";
-const char kOpenedUnixSocketsCommand[] = "shell:cat /proc/net/unix";
-const char kListProcessesCommand[] = "shell:ps";
-const char kDumpsysCommand[] = "shell:dumpsys window policy";
-const char kDumpsysScreenSizePrefix[] = "mStable=";
-
-const char kUnknownModel[] = "Offline";
-
-const char kPageListRequest[] = "GET /json HTTP/1.1\r\n\r\n";
-const char kVersionRequest[] = "GET /json/version HTTP/1.1\r\n\r\n";
-const char kClosePageRequest[] = "GET /json/close/%s HTTP/1.1\r\n\r\n";
-const char kNewPageRequest[] = "GET /json/new HTTP/1.1\r\n\r\n";
-const char kNewPageRequestWithURL[] = "GET /json/new?%s HTTP/1.1\r\n\r\n";
-const char kActivatePageRequest[] =
-    "GET /json/activate/%s HTTP/1.1\r\n\r\n";
-const int kAdbPollingIntervalMs = 1000;
-
-const char kUrlParam[] = "url";
-const char kPageReloadCommand[] = "Page.reload";
-const char kPageNavigateCommand[] = "Page.navigate";
-
-const char kChromeDefaultName[] = "Chrome";
-const char kChromeDefaultSocket[] = "chrome_devtools_remote";
-const int kMinVersionNewWithURL = 32;
-const int kNewPageNavigateDelayMs = 500;
-
-const char kWebViewSocketPrefix[] = "webview_devtools_remote";
-const char kWebViewNameTemplate[] = "WebView in %s";
-
-struct BrowserDescriptor {
-  const char* package;
-  const char* socket;
-  const char* display_name;
-};
-
-const BrowserDescriptor kBrowserDescriptors[] = {
-  {
-    "com.android.chrome",
-    kChromeDefaultSocket,
-    kChromeDefaultName
-  },
-  {
-    "com.chrome.beta",
-    kChromeDefaultSocket,
-    "Chrome Beta"
-  },
-  {
-    "com.google.android.apps.chrome_dev",
-    kChromeDefaultSocket,
-    "Chrome Dev"
-  },
-  {
-    "com.chrome.canary",
-    kChromeDefaultSocket,
-    "Chrome Canary"
-  },
-  {
-    "com.google.android.apps.chrome",
-    kChromeDefaultSocket,
-    "Chromium"
-  },
-  {
-    "org.chromium.content_shell_apk",
-    "content_shell_devtools_remote",
-    "Content Shell"
-  },
-  {
-    "org.chromium.chrome.shell",
-    "chrome_shell_devtools_remote",
-    "Chrome Shell"
-  },
-  {
-    "org.chromium.android_webview.shell",
-    "webview_devtools_remote",
-    "WebView Test Shell"
-  }
-};
-
-const BrowserDescriptor* FindBrowserDescriptor(const std::string& package) {
-  int count = sizeof(kBrowserDescriptors) / sizeof(kBrowserDescriptors[0]);
-  for (int i = 0; i < count; i++)
-    if (kBrowserDescriptors[i].package == package)
-      return &kBrowserDescriptors[i];
-  return NULL;
-}
-
-typedef std::map<std::string, const BrowserDescriptor*> DescriptorMap;
-
-static DescriptorMap FindInstalledBrowserPackages(
-    const std::string& response) {
-  // Parse 'pm list packages' output which on Android looks like this:
-  //
-  // package:com.android.chrome
-  // package:com.chrome.beta
-  // package:com.example.app
-  //
-  DescriptorMap package_to_descriptor;
-  const std::string package_prefix = "package:";
-  std::vector<std::string> entries;
-  Tokenize(response, "'\r\n", &entries);
-  for (size_t i = 0; i < entries.size(); ++i) {
-    if (entries[i].find(package_prefix) != 0)
-      continue;
-    std::string package = entries[i].substr(package_prefix.size());
-    const BrowserDescriptor* descriptor = FindBrowserDescriptor(package);
-    if (!descriptor)
-      continue;
-    package_to_descriptor[descriptor->package] = descriptor;
-  }
-  return package_to_descriptor;
-}
-
-typedef std::map<std::string, std::string> StringMap;
-
-static void MapProcessesToPackages(const std::string& response,
-                                   StringMap& pid_to_package,
-                                   StringMap& package_to_pid) {
-  // Parse 'ps' output which on Android looks like this:
-  //
-  // USER PID PPID VSIZE RSS WCHAN PC ? NAME
-  //
-  std::vector<std::string> entries;
-  Tokenize(response, "\n", &entries);
-  for (size_t i = 1; i < entries.size(); ++i) {
-    std::vector<std::string> fields;
-    Tokenize(entries[i], " \r", &fields);
-    if (fields.size() < 9)
-      continue;
-    std::string pid = fields[1];
-    std::string package = fields[8];
-    pid_to_package[pid] = package;
-    package_to_pid[package] = pid;
-  }
-}
-
-typedef std::map<std::string,
-                 scoped_refptr<DevToolsAdbBridge::RemoteBrowser> > BrowserMap;
-
-static StringMap MapSocketsToProcesses(const std::string& response,
-                                       const std::string& channel_pattern) {
-  // Parse 'cat /proc/net/unix' output which on Android looks like this:
-  //
-  // Num       RefCount Protocol Flags    Type St Inode Path
-  // 00000000: 00000002 00000000 00010000 0001 01 331813 /dev/socket/zygote
-  // 00000000: 00000002 00000000 00010000 0001 01 358606 @xxx_devtools_remote
-  // 00000000: 00000002 00000000 00010000 0001 01 347300 @yyy_devtools_remote
-  //
-  // We need to find records with paths starting from '@' (abstract socket)
-  // and containing the channel pattern ("_devtools_remote").
-  StringMap socket_to_pid;
-  std::vector<std::string> entries;
-  Tokenize(response, "\n", &entries);
-  for (size_t i = 1; i < entries.size(); ++i) {
-    std::vector<std::string> fields;
-    Tokenize(entries[i], " \r", &fields);
-    if (fields.size() < 8)
-      continue;
-    if (fields[3] != "00010000" || fields[5] != "01")
-      continue;
-    std::string path_field = fields[7];
-    if (path_field.size() < 1 || path_field[0] != '@')
-      continue;
-    size_t socket_name_pos = path_field.find(channel_pattern);
-    if (socket_name_pos == std::string::npos)
-      continue;
-
-    std::string socket = path_field.substr(1);
-
-    std::string pid;
-    size_t socket_name_end = socket_name_pos + channel_pattern.size();
-    if (socket_name_end < path_field.size() &&
-        path_field[socket_name_end] == '_') {
-      pid = path_field.substr(socket_name_end + 1);
-    }
-    socket_to_pid[socket] = pid;
-  }
-  return socket_to_pid;
-}
-
-// AdbPagesCommand ------------------------------------------------------------
-
-class AdbPagesCommand : public base::RefCountedThreadSafe<
-    AdbPagesCommand,
-    BrowserThread::DeleteOnUIThread> {
- public:
-  typedef base::Callback<void(DevToolsAdbBridge::RemoteDevices*)> Callback;
-
-  AdbPagesCommand(
-      scoped_refptr<DevToolsAdbBridge> adb_bridge,
-      AndroidDeviceManager* device_manager,
-      base::MessageLoop* device_message_loop,
-      const AndroidDeviceManager::DeviceProviders& device_providers,
-      const Callback& callback);
-
- private:
-  friend struct BrowserThread::DeleteOnThread<BrowserThread::UI>;
-  friend class base::DeleteHelper<AdbPagesCommand>;
-
-  virtual ~AdbPagesCommand();
-
-  void ReceivedSerials(const std::vector<std::string>& serials);
-  void ProcessSerials();
-  void ReceivedModel(int result, const std::string& response);
-  void ReceivedDumpsys(int result, const std::string& response);
-  void ReceivedPackages(int result, const std::string& response);
-  void ReceivedProcesses(
-      const std::string& packages_response,
-      int result,
-      const std::string& processes_response);
-  void ReceivedSockets(
-      const std::string& packages_response,
-      const std::string& processes_response,
-      int result,
-      const std::string& sockets_response);
-  void ProcessSockets();
-  void ReceivedVersion(int result, const std::string& response);
-  void ReceivedPages(int result, const std::string& response);
-
-  std::string current_serial() const { return serials_.back(); }
-
-  scoped_refptr<DevToolsAdbBridge::RemoteBrowser> current_browser() const {
-    return browsers_.back();
-  }
-
-  void NextBrowser();
-  void NextDevice();
-
-  void Respond();
-
-  void CreateBrowsers(const std::string& packages_response,
-                      const std::string& processes_response,
-                      const std::string& sockets_response);
-
-  void ParseDumpsysResponse(const std::string& response);
-  void ParseScreenSize(const std::string& str);
-
-  scoped_refptr<DevToolsAdbBridge> adb_bridge_;
-  AndroidDeviceManager* device_manager_;
-  base::MessageLoop* device_message_loop_;
-  Callback callback_;
-  std::vector<std::string> serials_;
-  DevToolsAdbBridge::RemoteBrowsers browsers_;
-  scoped_ptr<DevToolsAdbBridge::RemoteDevices> remote_devices_;
-};
-
-AdbPagesCommand::AdbPagesCommand(
-    scoped_refptr<DevToolsAdbBridge> adb_bridge,
-    AndroidDeviceManager* device_manager,
-    base::MessageLoop* device_message_loop,
-    const AndroidDeviceManager::DeviceProviders& device_providers,
-    const Callback& callback)
-    : adb_bridge_(adb_bridge),
-      device_manager_(device_manager),
-      device_message_loop_(device_message_loop),
-      callback_(callback) {
-  remote_devices_.reset(new DevToolsAdbBridge::RemoteDevices());
-
-  device_message_loop_->PostTask(
-      FROM_HERE, base::Bind(
-          &AndroidDeviceManager::QueryDevices,
-          device_manager_,
-          device_providers,
-          base::Bind(&AdbPagesCommand::ReceivedSerials, this)));
-}
-
-AdbPagesCommand::~AdbPagesCommand() {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-}
-
-void AdbPagesCommand::ReceivedSerials(const std::vector<std::string>& serials) {
-  DCHECK_EQ(device_message_loop_, base::MessageLoop::current());
-  serials_ = serials;
-  ProcessSerials();
-}
-
-void AdbPagesCommand::ProcessSerials() {
-  DCHECK_EQ(device_message_loop_, base::MessageLoop::current());
-  if (serials_.size() == 0) {
-    BrowserThread::PostTask(
-        BrowserThread::UI, FROM_HERE,
-        base::Bind(&AdbPagesCommand::Respond, this));
-    return;
-  }
-
-  if (device_manager_->IsConnected(current_serial())) {
-    device_manager_->RunCommand(current_serial(), kDeviceModelCommand,
-                       base::Bind(&AdbPagesCommand::ReceivedModel, this));
-  } else {
-    remote_devices_->push_back(new DevToolsAdbBridge::RemoteDevice(
-        adb_bridge_, current_serial(), kUnknownModel, false));
-    NextDevice();
-  }
-}
-
-void AdbPagesCommand::ReceivedModel(int result, const std::string& response) {
-  DCHECK_EQ(device_message_loop_, base::MessageLoop::current());
-  if (result < 0) {
-    NextDevice();
-    return;
-  }
-  remote_devices_->push_back(new DevToolsAdbBridge::RemoteDevice(
-      adb_bridge_, current_serial(), response, true));
-  device_manager_->RunCommand(current_serial(), kDumpsysCommand,
-      base::Bind(&AdbPagesCommand::ReceivedDumpsys, this));
-}
-
-void AdbPagesCommand::ReceivedDumpsys(int result,
-                                      const std::string& response) {
-  DCHECK_EQ(device_message_loop_, base::MessageLoop::current());
-  if (result >= 0)
-    ParseDumpsysResponse(response);
-
-  device_manager_->RunCommand(
-      current_serial(),
-      kInstalledChromePackagesCommand,
-      base::Bind(&AdbPagesCommand::ReceivedPackages, this));
-}
-
-void AdbPagesCommand::ReceivedPackages(int result,
-                                       const std::string& packages_response) {
-  DCHECK_EQ(device_message_loop_, base::MessageLoop::current());
-  if (result < 0) {
-    NextDevice();
-    return;
-  }
-  device_manager_->RunCommand(
-      current_serial(),
-      kListProcessesCommand,
-      base::Bind(&AdbPagesCommand::ReceivedProcesses, this, packages_response));
-}
-
-void AdbPagesCommand::ReceivedProcesses(
-    const std::string& packages_response,
-    int result,
-    const std::string& processes_response) {
-  DCHECK_EQ(device_message_loop_, base::MessageLoop::current());
-  if (result < 0) {
-    NextDevice();
-    return;
-  }
-  device_manager_->RunCommand(
-      current_serial(),
-      kOpenedUnixSocketsCommand,
-      base::Bind(&AdbPagesCommand::ReceivedSockets,
-                 this,
-                 packages_response,
-                 processes_response));
-}
-
-void AdbPagesCommand::ReceivedSockets(
-    const std::string& packages_response,
-    const std::string& processes_response,
-    int result,
-    const std::string& sockets_response) {
-  DCHECK_EQ(device_message_loop_, base::MessageLoop::current());
-  if (result >= 0)
-    CreateBrowsers(packages_response, processes_response, sockets_response);
-  ProcessSockets();
-}
-
-void AdbPagesCommand::ProcessSockets() {
-  DCHECK_EQ(device_message_loop_, base::MessageLoop::current());
-  if (browsers_.size() == 0) {
-    NextDevice();
-    return;
-  }
-
-  device_manager_->HttpQuery(
-      current_serial(),
-      current_browser()->socket(),
-      kVersionRequest,
-      base::Bind(&AdbPagesCommand::ReceivedVersion, this));
-}
-
-void AdbPagesCommand::ReceivedVersion(int result,
-                                      const std::string& response) {
-  DCHECK_EQ(device_message_loop_, base::MessageLoop::current());
-  if (result < 0) {
-    NextBrowser();
-    return;
-  }
-
-  // Parse version, append to package name if available,
-  scoped_ptr<base::Value> value(base::JSONReader::Read(response));
-  base::DictionaryValue* dict;
-  if (value && value->GetAsDictionary(&dict)) {
-    std::string browser;
-    if (dict->GetString("Browser", &browser)) {
-      std::vector<std::string> parts;
-      Tokenize(browser, "/", &parts);
-      if (parts.size() == 2)
-        current_browser()->set_version(parts[1]);
-      else
-        current_browser()->set_version(browser);
-    }
-    std::string package;
-    if (dict->GetString("Android-Package", &package)) {
-      const BrowserDescriptor* descriptor = FindBrowserDescriptor(package);
-      if (descriptor)
-        current_browser()->set_display_name(descriptor->display_name);
-    }
-  }
-
-  device_manager_->HttpQuery(
-      current_serial(),
-      current_browser()->socket(),
-      kPageListRequest,
-      base::Bind(&AdbPagesCommand::ReceivedPages, this));
-}
-
-void AdbPagesCommand::ReceivedPages(int result,
-                                    const std::string& response) {
-  DCHECK_EQ(device_message_loop_, base::MessageLoop::current());
-  if (result >= 0) {
-    scoped_ptr<base::Value> value(base::JSONReader::Read(response));
-    base::ListValue* list_value;
-    if (value && value->GetAsList(&list_value))
-      current_browser()->SetPageDescriptors(*list_value);
-  }
-  NextBrowser();
-}
-
-void AdbPagesCommand::NextBrowser() {
-  browsers_.pop_back();
-  ProcessSockets();
-}
-
-void AdbPagesCommand::NextDevice() {
-  serials_.pop_back();
-  ProcessSerials();
-}
-
-void AdbPagesCommand::Respond() {
-  callback_.Run(remote_devices_.release());
-}
-
-void AdbPagesCommand::CreateBrowsers(
-    const std::string& packages_response,
-    const std::string& processes_response,
-    const std::string& sockets_response) {
-  DescriptorMap package_to_descriptor =
-      FindInstalledBrowserPackages(packages_response);
-
-  StringMap pid_to_package;
-  StringMap package_to_pid;
-  MapProcessesToPackages(processes_response, pid_to_package, package_to_pid);
-
-  const std::string channel_pattern =
-      base::StringPrintf(kDevToolsChannelNameFormat, "");
-
-  StringMap socket_to_pid = MapSocketsToProcesses(sockets_response,
-                                                  channel_pattern);
-
-  scoped_refptr<DevToolsAdbBridge::RemoteDevice> remote_device =
-      remote_devices_->back();
-
-  // Create RemoteBrowser instances.
-  BrowserMap package_to_running_browser;
-  BrowserMap socket_to_unnamed_browser;
-  for (StringMap::iterator it = socket_to_pid.begin();
-      it != socket_to_pid.end(); ++it) {
-    std::string socket = it->first;
-    std::string pid = it->second;
-
-    scoped_refptr<DevToolsAdbBridge::RemoteBrowser> browser =
-        new DevToolsAdbBridge::RemoteBrowser(
-            adb_bridge_, current_serial(), socket);
-
-    StringMap::iterator pit = pid_to_package.find(pid);
-    if (pit != pid_to_package.end()) {
-      std::string package = pit->second;
-      package_to_running_browser[package] = browser;
-      const BrowserDescriptor* descriptor = FindBrowserDescriptor(package);
-      if (descriptor) {
-        browser->set_display_name(descriptor->display_name);
-      } else if (socket.find(kWebViewSocketPrefix) == 0) {
-        browser->set_display_name(
-            base::StringPrintf(kWebViewNameTemplate, package.c_str()));
-      } else {
-        browser->set_display_name(package);
-      }
-    } else {
-      // Set fallback display name.
-      std::string name = socket.substr(0, socket.find(channel_pattern));
-      name[0] = base::ToUpperASCII(name[0]);
-      browser->set_display_name(name);
-
-      socket_to_unnamed_browser[socket] = browser;
-    }
-    remote_device->AddBrowser(browser);
-  }
-
-  browsers_ = remote_device->browsers();
-
-  // Find installed packages not mapped to browsers.
-  typedef std::multimap<std::string, const BrowserDescriptor*>
-      DescriptorMultimap;
-  DescriptorMultimap socket_to_descriptor;
-  for (DescriptorMap::iterator it = package_to_descriptor.begin();
-      it != package_to_descriptor.end(); ++it) {
-    std::string package = it->first;
-    const BrowserDescriptor* descriptor = it->second;
-
-    if (package_to_running_browser.find(package) !=
-        package_to_running_browser.end())
-      continue;  // This package is already mapped to a browser.
-
-    if (package_to_pid.find(package) != package_to_pid.end()) {
-      // This package is running but not mapped to a browser.
-      socket_to_descriptor.insert(
-          DescriptorMultimap::value_type(descriptor->socket, descriptor));
-      continue;
-    }
-  }
-
-  // Try naming remaining unnamed browsers.
-  for (DescriptorMultimap::iterator it = socket_to_descriptor.begin();
-      it != socket_to_descriptor.end(); ++it) {
-    std::string socket = it->first;
-    const BrowserDescriptor* descriptor = it->second;
-
-    if (socket_to_descriptor.count(socket) != 1)
-      continue;  // No definitive match.
-
-    BrowserMap::iterator bit = socket_to_unnamed_browser.find(socket);
-    if (bit != socket_to_unnamed_browser.end())
-      bit->second->set_display_name(descriptor->display_name);
-  }
-}
-
-void AdbPagesCommand::ParseDumpsysResponse(const std::string& response) {
-  std::vector<std::string> lines;
-  Tokenize(response, "\r", &lines);
-  for (size_t i = 0; i < lines.size(); ++i) {
-    std::string line = lines[i];
-    size_t pos = line.find(kDumpsysScreenSizePrefix);
-    if (pos != std::string::npos) {
-      ParseScreenSize(
-          line.substr(pos + std::string(kDumpsysScreenSizePrefix).size()));
-      break;
-    }
-  }
-}
-
-void AdbPagesCommand::ParseScreenSize(const std::string& str) {
-  std::vector<std::string> pairs;
-  Tokenize(str, "-", &pairs);
-  if (pairs.size() != 2)
-    return;
-
-  int width;
-  int height;
-  std::vector<std::string> numbers;
-  Tokenize(pairs[1].substr(1, pairs[1].size() - 2), ",", &numbers);
-  if (numbers.size() != 2 ||
-      !base::StringToInt(numbers[0], &width) ||
-      !base::StringToInt(numbers[1], &height))
-    return;
-
-  remote_devices_->back()->set_screen_size(gfx::Size(width, height));
-}
-
-
-// AdbProtocolCommand ---------------------------------------------------------
-
-class AdbProtocolCommand : public DevToolsAdbBridge::AdbWebSocket::Delegate {
- public:
-  AdbProtocolCommand(
-      scoped_refptr<DevToolsAdbBridge::RemoteBrowser> browser,
-      const std::string& debug_url,
-      const std::string& command,
-      const base::Closure callback);
-
- private:
-  virtual void OnSocketOpened() OVERRIDE;
-  virtual void OnFrameRead(const std::string& message) OVERRIDE;
-  virtual void OnSocketClosed(bool closed_by_device) OVERRIDE;
-
-  const std::string command_;
-  const base::Closure callback_;
-  scoped_refptr<DevToolsAdbBridge::AdbWebSocket> web_socket_;
-
-  DISALLOW_COPY_AND_ASSIGN(AdbProtocolCommand);
-};
-
-AdbProtocolCommand::AdbProtocolCommand(
-    scoped_refptr<DevToolsAdbBridge::RemoteBrowser> browser,
-    const std::string& debug_url,
-    const std::string& command,
-    const base::Closure callback)
-    : command_(command),
-      callback_(callback){
-  web_socket_ = browser->CreateWebSocket(debug_url, this);
-}
-
-void AdbProtocolCommand::OnSocketOpened() {
-  web_socket_->SendFrame(command_);
-}
-
-void AdbProtocolCommand::OnFrameRead(const std::string& message) {
-  web_socket_->Disconnect();
-}
-
-void AdbProtocolCommand::OnSocketClosed(bool closed_by_device) {
-  if (!callback_.is_null()) {
-    callback_.Run();
-  }
-  delete this;
-}
-
-}  // namespace
-
-const char kDevToolsChannelNameFormat[] = "%s_devtools_remote";
-
-class AgentHostDelegate;
-
-typedef std::map<std::string, AgentHostDelegate*> AgentHostDelegates;
-
-base::LazyInstance<AgentHostDelegates>::Leaky g_host_delegates =
-    LAZY_INSTANCE_INITIALIZER;
-
-DevToolsAdbBridge::Wrapper::Wrapper(content::BrowserContext* context) {
-  bridge_ = new DevToolsAdbBridge(Profile::FromBrowserContext(context));
-}
-
-DevToolsAdbBridge::Wrapper::~Wrapper() {
-}
-
-DevToolsAdbBridge* DevToolsAdbBridge::Wrapper::Get() {
-  return bridge_.get();
-}
-
-// static
-DevToolsAdbBridge::Factory* DevToolsAdbBridge::Factory::GetInstance() {
-  return Singleton<DevToolsAdbBridge::Factory>::get();
-}
-
-// static
-DevToolsAdbBridge* DevToolsAdbBridge::Factory::GetForProfile(
-    Profile* profile) {
-  DevToolsAdbBridge::Wrapper* wrapper =
-      static_cast<DevToolsAdbBridge::Wrapper*>(GetInstance()->
-          GetServiceForBrowserContext(profile, true));
-  return wrapper ? wrapper->Get() : NULL;
-}
-
-DevToolsAdbBridge::Factory::Factory()
-    : BrowserContextKeyedServiceFactory(
-          "DevToolsAdbBridge",
-          BrowserContextDependencyManager::GetInstance()) {}
-
-DevToolsAdbBridge::Factory::~Factory() {}
-
-KeyedService* DevToolsAdbBridge::Factory::BuildServiceInstanceFor(
-    content::BrowserContext* context) const {
-  return new DevToolsAdbBridge::Wrapper(context);
-}
-
-
-// AgentHostDelegate ----------------------------------------------------------
-
-class AgentHostDelegate : public content::DevToolsExternalAgentProxyDelegate,
-                          public DevToolsAdbBridge::AdbWebSocket::Delegate {
- public:
-  static void Create(const std::string& id,
-                     scoped_refptr<DevToolsAdbBridge::RemoteBrowser> browser,
-                     const std::string& debug_url,
-                     const std::string& frontend_url,
-                     Profile* profile) {
-    DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-    AgentHostDelegates::iterator it =
-        g_host_delegates.Get().find(id);
-    if (it != g_host_delegates.Get().end()) {
-      it->second->OpenFrontend();
-    } else if (!frontend_url.empty()) {
-      new AgentHostDelegate(
-          id, browser, debug_url, frontend_url, profile);
-    }
-  }
-
- private:
-  AgentHostDelegate(
-      const std::string& id,
-      scoped_refptr<DevToolsAdbBridge::RemoteBrowser> browser,
-      const std::string& debug_url,
-      const std::string& frontend_url,
-      Profile* profile)
-      : id_(id),
-        frontend_url_(frontend_url),
-        profile_(profile) {
-    web_socket_ = browser->CreateWebSocket(debug_url, this);
-    g_host_delegates.Get()[id] = this;
-
-    if (browser->socket().find(kWebViewSocketPrefix) == 0) {
-      content::RecordAction(
-          base::UserMetricsAction("DevTools_InspectAndroidWebView"));
-    } else {
-      content::RecordAction(
-          base::UserMetricsAction("DevTools_InspectAndroidPage"));
-    }
-  }
-
-  void OpenFrontend() {
-    if (!proxy_)
-      return;
-    DevToolsWindow::OpenExternalFrontend(
-        profile_, frontend_url_, proxy_->GetAgentHost().get());
-  }
-
-  virtual ~AgentHostDelegate() {
-    g_host_delegates.Get().erase(id_);
-  }
-
-  virtual void Attach() OVERRIDE {}
-
-  virtual void Detach() OVERRIDE {
-    web_socket_->Disconnect();
-  }
-
-  virtual void SendMessageToBackend(const std::string& message) OVERRIDE {
-    web_socket_->SendFrame(message);
-  }
-
-  virtual void OnSocketOpened() OVERRIDE {
-    proxy_.reset(content::DevToolsExternalAgentProxy::Create(this));
-    OpenFrontend();
-  }
-
-  virtual void OnFrameRead(const std::string& message) OVERRIDE {
-    proxy_->DispatchOnClientHost(message);
-  }
-
-  virtual void OnSocketClosed(bool closed_by_device) OVERRIDE {
-    if (proxy_ && closed_by_device)
-      proxy_->ConnectionClosed();
-    delete this;
-  }
-
-  const std::string id_;
-  const std::string frontend_url_;
-  Profile* profile_;
-
-  scoped_ptr<content::DevToolsExternalAgentProxy> proxy_;
-  scoped_refptr<DevToolsAdbBridge::AdbWebSocket> web_socket_;
-  DISALLOW_COPY_AND_ASSIGN(AgentHostDelegate);
-};
-
-//// RemotePageTarget ----------------------------------------------
-
-class RemotePageTarget : public DevToolsTargetImpl {
- public:
-  RemotePageTarget(scoped_refptr<DevToolsAdbBridge::RemoteBrowser> browser,
-                   const base::DictionaryValue& value);
-  virtual ~RemotePageTarget();
-
-  // content::DevToolsTarget overrides:
-  virtual bool IsAttached() const OVERRIDE;
-  virtual bool Activate() const OVERRIDE;
-  virtual bool Close() const OVERRIDE;
-
-  // DevToolsTargetImpl overrides:
-  virtual void Inspect(Profile* profile) const OVERRIDE;
-  virtual void Reload() const OVERRIDE;
-
-  void Navigate(const std::string& url, base::Closure callback) const;
-
- private:
-  scoped_refptr<DevToolsAdbBridge::RemoteBrowser> browser_;
-  std::string debug_url_;
-  std::string frontend_url_;
-  std::string remote_id_;
-  DISALLOW_COPY_AND_ASSIGN(RemotePageTarget);
-};
-
-RemotePageTarget::RemotePageTarget(
-    scoped_refptr<DevToolsAdbBridge::RemoteBrowser> browser,
-    const base::DictionaryValue& value)
-    : browser_(browser) {
-  type_ = "adb_page";
-  value.GetString("id", &remote_id_);
-  std::string url;
-  value.GetString("url", &url);
-  url_ = GURL(url);
-  value.GetString("title", &title_);
-  title_ = base::UTF16ToUTF8(net::UnescapeForHTML(base::UTF8ToUTF16(title_)));
-  value.GetString("description", &description_);
-  std::string favicon_url;
-  value.GetString("faviconUrl", &favicon_url);
-  favicon_url_ = GURL(favicon_url);
-  value.GetString("webSocketDebuggerUrl", &debug_url_);
-  value.GetString("devtoolsFrontendUrl", &frontend_url_);
-
-  if (remote_id_.empty() && !debug_url_.empty())  {
-    // Target id is not available until Chrome 26. Use page id at the end of
-    // debug_url_ instead. For attached targets the id will remain empty.
-    std::vector<std::string> parts;
-    Tokenize(debug_url_, "/", &parts);
-    remote_id_ = parts[parts.size()-1];
-  }
-
-  if (debug_url_.find("ws://") == 0)
-    debug_url_ = debug_url_.substr(5);
-  else
-    debug_url_ = "";
-
-  size_t ws_param = frontend_url_.find("?ws");
-  if (ws_param != std::string::npos)
-    frontend_url_ = frontend_url_.substr(0, ws_param);
-  if (frontend_url_.find("http:") == 0)
-    frontend_url_ = "https:" + frontend_url_.substr(5);
-
-  id_ = base::StringPrintf("%s:%s:%s",
-      browser_->serial().c_str(),
-      browser_->socket().c_str(),
-      remote_id_.c_str());
-}
-
-RemotePageTarget::~RemotePageTarget() {
-}
-
-bool RemotePageTarget::IsAttached() const {
-  return debug_url_.empty();
-}
-
-static void NoOp(int, const std::string&) {}
-
-static void CallClosure(base::Closure closure, int, const std::string&) {
-  closure.Run();
-}
-
-void RemotePageTarget::Inspect(Profile* profile) const {
-  std::string request = base::StringPrintf(kActivatePageRequest,
-                                           remote_id_.c_str());
-  base::Closure inspect_callback = base::Bind(&AgentHostDelegate::Create,
-      id_, browser_, debug_url_, frontend_url_, profile);
-  browser_->SendJsonRequest(
-      request, base::Bind(&CallClosure, inspect_callback));
-}
-
-bool RemotePageTarget::Activate() const {
-  std::string request = base::StringPrintf(kActivatePageRequest,
-                                           remote_id_.c_str());
-  browser_->SendJsonRequest(request, base::Bind(&NoOp));
-  return true;
-}
-
-bool RemotePageTarget::Close() const {
-  if (IsAttached())
-    return false;
-  std::string request = base::StringPrintf(kClosePageRequest,
-                                           remote_id_.c_str());
-  browser_->SendJsonRequest(request, base::Bind(&NoOp));
-  return true;
-}
-
-void RemotePageTarget::Reload() const {
-  browser_->SendProtocolCommand(debug_url_, kPageReloadCommand, NULL,
-                                base::Closure());
-}
-
-void RemotePageTarget::Navigate(const std::string& url,
-                                base::Closure callback) const {
-  base::DictionaryValue params;
-  params.SetString(kUrlParam, url);
-  browser_->SendProtocolCommand(debug_url_, kPageNavigateCommand, &params,
-                                callback);
-}
-
-// DevToolsAdbBridge::RemoteBrowser -------------------------------------------
-
-DevToolsAdbBridge::RemoteBrowser::RemoteBrowser(
-    scoped_refptr<DevToolsAdbBridge> adb_bridge,
-    const std::string& serial,
-    const std::string& socket)
-    : adb_bridge_(adb_bridge),
-      serial_(serial),
-      socket_(socket),
-      page_descriptors_(new base::ListValue()) {
-}
-
-bool DevToolsAdbBridge::RemoteBrowser::IsChrome() const {
-  return socket_.find(kChromeDefaultSocket) == 0;
-}
-
-DevToolsAdbBridge::RemoteBrowser::ParsedVersion
-DevToolsAdbBridge::RemoteBrowser::GetParsedVersion() const {
-  ParsedVersion result;
-  std::vector<std::string> parts;
-  Tokenize(version_, ".", &parts);
-  for (size_t i = 0; i != parts.size(); ++i) {
-    int value = 0;
-    base::StringToInt(parts[i], &value);
-    result.push_back(value);
-  }
-  return result;
-}
-
-std::vector<DevToolsTargetImpl*>
-DevToolsAdbBridge::RemoteBrowser::CreatePageTargets() {
-  std::vector<DevToolsTargetImpl*> result;
-  for (size_t i = 0; i < page_descriptors_->GetSize(); ++i) {
-    base::Value* item;
-    page_descriptors_->Get(i, &item);
-    if (!item)
-      continue;
-    base::DictionaryValue* dict;
-    if (!item->GetAsDictionary(&dict))
-      continue;
-    result.push_back(new RemotePageTarget(this, *dict));
-  }
-  return result;
-}
-
-void DevToolsAdbBridge::RemoteBrowser::SetPageDescriptors(
-    const base::ListValue& list) {
-  page_descriptors_.reset(list.DeepCopy());
-}
-
-static void RespondOnUIThread(
-    const DevToolsAdbBridge::RemoteBrowser::JsonRequestCallback& callback,
-    int result,
-    const std::string& response) {
-  if (callback.is_null())
-    return;
-  BrowserThread::PostTask(
-      BrowserThread::UI, FROM_HERE, base::Bind(callback, result, response));
-}
-
-void DevToolsAdbBridge::RemoteBrowser::SendJsonRequest(
-    const std::string& request, const JsonRequestCallback& callback) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  adb_bridge_->device_message_loop()->PostTask(
-      FROM_HERE,
-      base::Bind(&AndroidDeviceManager::HttpQuery,
-                 adb_bridge_->device_manager(), serial_, socket_, request,
-                 base::Bind(&RespondOnUIThread, callback)));
-}
-
-void DevToolsAdbBridge::RemoteBrowser::SendProtocolCommand(
-    const std::string& debug_url,
-    const std::string& method,
-    base::DictionaryValue* params,
-    const base::Closure callback) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  if (debug_url.empty())
-    return;
-  DevToolsProtocol::Command command(1, method, params);
-  new AdbProtocolCommand(this, debug_url, command.Serialize(), callback);
-}
-
-void DevToolsAdbBridge::RemoteBrowser::Open(const std::string& url) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  Open(url, JsonRequestCallback());
-}
-
-void DevToolsAdbBridge::RemoteBrowser::OpenAndInspect(const std::string& url,
-                                                      Profile* profile) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  Open(url,
-       base::Bind(&RemoteBrowser::InspectAfterOpenOnUIThread, this, profile));
-}
-
-void DevToolsAdbBridge::RemoteBrowser::Open(
-    const std::string& input_url,
-    const JsonRequestCallback& callback) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  GURL gurl(input_url);
-  if (!gurl.is_valid()) {
-    gurl = GURL("http://" + input_url);
-    if (!gurl.is_valid())
-     return;
-  }
-  std::string url = gurl.spec();
-
-  ParsedVersion parsed_version = GetParsedVersion();
-  if (IsChrome() &&
-      !parsed_version.empty() &&
-      parsed_version[0] >= kMinVersionNewWithURL) {
-    std::string query = net::EscapeQueryParamValue(url, false /* use_plus */);
-    std::string request =
-        base::StringPrintf(kNewPageRequestWithURL, query.c_str());
-    SendJsonRequest(request, callback);
-  } else {
-    SendJsonRequest(kNewPageRequest,
-        base::Bind(&RemoteBrowser::PageCreatedOnUIThread, this,
-                   callback, url));
-  }
-}
-
-void DevToolsAdbBridge::RemoteBrowser::InspectAfterOpenOnUIThread(
-    Profile* profile, int result, const std::string& response) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  if (result < 0)
-    return;
-  scoped_ptr<base::Value> value(base::JSONReader::Read(response));
-  base::DictionaryValue* dict;
-  if (value && value->GetAsDictionary(&dict)) {
-    RemotePageTarget new_page(this, *dict);
-    new_page.Inspect(profile);
-  }
-}
-
-void DevToolsAdbBridge::RemoteBrowser::PageCreatedOnUIThread(
-    const JsonRequestCallback& callback,
-    const std::string& url, int result, const std::string& response) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-
-  if (result < 0)
-    return;
-  // Navigating too soon after the page creation breaks navigation history
-  // (crbug.com/311014). This can be avoided by adding a moderate delay.
-  BrowserThread::PostDelayedTask(
-      BrowserThread::UI, FROM_HERE,
-      base::Bind(&RemoteBrowser::NavigatePageOnUIThread,
-                 this, callback, result, response, url),
-      base::TimeDelta::FromMilliseconds(kNewPageNavigateDelayMs));
-}
-
-void DevToolsAdbBridge::RemoteBrowser::NavigatePageOnUIThread(
-    const JsonRequestCallback& callback,
-    int result, const std::string& response, const std::string& url) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  scoped_ptr<base::Value> value(base::JSONReader::Read(response));
-  base::DictionaryValue* dict;
-
-  if (value && value->GetAsDictionary(&dict)) {
-    RemotePageTarget new_page(this, *dict);
-    new_page.Navigate(url,
-        base::Bind(&RespondOnUIThread, callback, result, response));
-  }
-}
-
-DevToolsAdbBridge::RemoteBrowser::~RemoteBrowser() {
-}
-
-
-// DevToolsAdbBridge::RemoteDevice --------------------------------------------
-
-DevToolsAdbBridge::RemoteDevice::RemoteDevice(
-    scoped_refptr<DevToolsAdbBridge> adb_bridge,
-    const std::string& serial,
-    const std::string& model,
-    bool connected)
-    : adb_bridge_(adb_bridge),
-      serial_(serial),
-      model_(model),
-      connected_(connected) {
-}
-
-void DevToolsAdbBridge::RemoteDevice::AddBrowser(
-    scoped_refptr<RemoteBrowser> browser) {
-  browsers_.push_back(browser);
-}
-
-void DevToolsAdbBridge::RemoteDevice::OpenSocket(
-    const std::string& socket_name,
-    const AndroidDeviceManager::SocketCallback& callback) {
-  adb_bridge_->device_message_loop()->PostTask(FROM_HERE,
-      base::Bind(&AndroidDeviceManager::OpenSocket,
-                 adb_bridge_->device_manager(),
-                 serial_,
-                 socket_name,
-                 callback));
-}
-
-DevToolsAdbBridge::RemoteDevice::~RemoteDevice() {
-}
-
-// DevToolsAdbBridge::RefCountedAdbThread -------------------------------------
-
-const char kDevToolsAdbBridgeThreadName[] = "Chrome_DevToolsADBThread";
-
-DevToolsAdbBridge::RefCountedAdbThread*
-DevToolsAdbBridge::RefCountedAdbThread::instance_ = NULL;
-
-// static
-scoped_refptr<DevToolsAdbBridge::RefCountedAdbThread>
-DevToolsAdbBridge::RefCountedAdbThread::GetInstance() {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  if (!instance_)
-    new RefCountedAdbThread();
-  return instance_;
-}
-
-DevToolsAdbBridge::RefCountedAdbThread::RefCountedAdbThread() {
-  instance_ = this;
-  thread_ = new base::Thread(kDevToolsAdbBridgeThreadName);
-  base::Thread::Options options;
-  options.message_loop_type = base::MessageLoop::TYPE_IO;
-  if (!thread_->StartWithOptions(options)) {
-    delete thread_;
-    thread_ = NULL;
-  }
-}
-
-base::MessageLoop* DevToolsAdbBridge::RefCountedAdbThread::message_loop() {
-  return thread_ ? thread_->message_loop() : NULL;
-}
-
-// static
-void DevToolsAdbBridge::RefCountedAdbThread::StopThread(base::Thread* thread) {
-  thread->Stop();
-}
-
-DevToolsAdbBridge::RefCountedAdbThread::~RefCountedAdbThread() {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  instance_ = NULL;
-  if (!thread_)
-    return;
-  // Shut down thread on FILE thread to join into IO.
-  BrowserThread::PostTask(
-      BrowserThread::FILE, FROM_HERE,
-      base::Bind(&RefCountedAdbThread::StopThread, thread_));
-}
-
-// DevToolsAdbBridge ----------------------------------------------------------
-
-DevToolsAdbBridge::DevToolsAdbBridge(Profile* profile)
-    : profile_(profile),
-      adb_thread_(RefCountedAdbThread::GetInstance()) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  pref_change_registrar_.Init(profile_->GetPrefs());
-  pref_change_registrar_.Add(prefs::kDevToolsDiscoverUsbDevicesEnabled,
-      base::Bind(&DevToolsAdbBridge::CreateDeviceProviders,
-                 base::Unretained(this)));
-  CreateDeviceProviders();
-  base::PostTaskAndReplyWithResult(
-      device_message_loop()->message_loop_proxy(),
-      FROM_HERE,
-      base::Bind(&AndroidDeviceManager::Create),
-      base::Bind(&DevToolsAdbBridge::CreatedDeviceManager, this));
-}
-
-void DevToolsAdbBridge::AddDeviceListListener(DeviceListListener* listener) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  device_list_listeners_.push_back(listener);
-  if (device_list_listeners_.size() == 1 && device_manager_)
-    RequestDeviceList();
-}
-
-void DevToolsAdbBridge::RemoveDeviceListListener(DeviceListListener* listener) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  DeviceListListeners::iterator it = std::find(
-      device_list_listeners_.begin(), device_list_listeners_.end(), listener);
-  DCHECK(it != device_list_listeners_.end());
-  device_list_listeners_.erase(it);
-  if (device_list_listeners_.empty() && device_manager_) {
-    device_message_loop()->PostTask(FROM_HERE,
-        base::Bind(&AndroidDeviceManager::Stop, device_manager_));
-  }
-}
-
-void DevToolsAdbBridge::AddDeviceCountListener(DeviceCountListener* listener) {
-  device_count_listeners_.push_back(listener);
-  if (device_count_listeners_.size() == 1 && device_manager_)
-    RequestDeviceCount();
-}
-
-void DevToolsAdbBridge::RemoveDeviceCountListener(
-    DeviceCountListener* listener) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  DeviceCountListeners::iterator it = std::find(
-      device_count_listeners_.begin(), device_count_listeners_.end(), listener);
-  DCHECK(it != device_count_listeners_.end());
-  device_count_listeners_.erase(it);
-}
-
-// static
-bool DevToolsAdbBridge::HasDevToolsWindow(const std::string& agent_id) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  return g_host_delegates.Get().find(agent_id) != g_host_delegates.Get().end();
-}
-
-DevToolsAdbBridge::~DevToolsAdbBridge() {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  DCHECK(device_list_listeners_.empty());
-  DCHECK(device_count_listeners_.empty());
-  if (device_manager_)
-    device_message_loop()->PostTask(FROM_HERE,
-        base::Bind(&AndroidDeviceManager::Stop, device_manager_));
-}
-
-void DevToolsAdbBridge::RequestDeviceList() {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  DCHECK(device_manager_);
-
-  if (device_list_listeners_.empty())
-    return;
-
-  new AdbPagesCommand(
-      this,
-      device_manager(),
-      device_message_loop(),
-      device_providers_,
-      base::Bind(&DevToolsAdbBridge::ReceivedDeviceList, this));
-}
-
-void DevToolsAdbBridge::CreatedDeviceManager(
-    scoped_refptr<AndroidDeviceManager> device_manager) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  device_manager_ = device_manager;
-  if (!device_list_listeners_.empty())
-    RequestDeviceList();
-  if (!device_count_listeners_.empty())
-    RequestDeviceCount();
-}
-
-void DevToolsAdbBridge::ReceivedDeviceList(RemoteDevices* devices_ptr) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-
-  scoped_ptr<RemoteDevices> devices(devices_ptr);
-
-  if (device_list_listeners_.empty())
-    return;
-
-  DeviceListListeners copy(device_list_listeners_);
-  for (DeviceListListeners::iterator it = copy.begin(); it != copy.end(); ++it)
-    (*it)->DeviceListChanged(*devices.get());
-
-  BrowserThread::PostDelayedTask(
-      BrowserThread::UI,
-      FROM_HERE,
-      base::Bind(&DevToolsAdbBridge::RequestDeviceList, this),
-      base::TimeDelta::FromMilliseconds(kAdbPollingIntervalMs));
-}
-
-void DevToolsAdbBridge::RequestDeviceCount() {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  DCHECK(device_manager_);
-
-  if (device_count_listeners_.empty())
-    return;
-
-  AndroidUsbDevice::CountDevices(
-      base::Bind(&DevToolsAdbBridge::ReceivedDeviceCount, this));
-}
-
-void DevToolsAdbBridge::ReceivedDeviceCount(int count) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-
-  if (device_count_listeners_.empty())
-     return;
-
-  DeviceCountListeners copy(device_count_listeners_);
-  for (DeviceCountListeners::iterator it = copy.begin(); it != copy.end(); ++it)
-    (*it)->DeviceCountChanged(count);
-
-  BrowserThread::PostDelayedTask(
-      BrowserThread::UI,
-      FROM_HERE,
-      base::Bind(&DevToolsAdbBridge::RequestDeviceCount, this),
-      base::TimeDelta::FromMilliseconds(kAdbPollingIntervalMs));
-}
-
-void DevToolsAdbBridge::CreateDeviceProviders() {
-  device_providers_.clear();
-#if defined(DEBUG_DEVTOOLS)
-  device_providers_.push_back(AndroidDeviceManager::GetSelfAsDeviceProvider());
-#endif
-  device_providers_.push_back(AndroidDeviceManager::GetAdbDeviceProvider());
-
-  PrefService* service = profile_->GetPrefs();
-  const PrefService::Preference* pref =
-      service->FindPreference(prefs::kDevToolsDiscoverUsbDevicesEnabled);
-  const base::Value* pref_value = pref->GetValue();
-
-  bool enabled;
-  if (pref_value->GetAsBoolean(&enabled) && enabled) {
-    device_providers_.push_back(
-        AndroidDeviceManager::GetUsbDeviceProvider(profile_));
-  }
-}
diff --git a/chrome/browser/devtools/devtools_adb_bridge.h b/chrome/browser/devtools/devtools_adb_bridge.h
deleted file mode 100644
index 8c32ffc..0000000
--- a/chrome/browser/devtools/devtools_adb_bridge.h
+++ /dev/null
@@ -1,294 +0,0 @@
-// Copyright (c) 2013 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 CHROME_BROWSER_DEVTOOLS_DEVTOOLS_ADB_BRIDGE_H_
-#define CHROME_BROWSER_DEVTOOLS_DEVTOOLS_ADB_BRIDGE_H_
-
-#include <string>
-#include <vector>
-
-#include "base/callback.h"
-#include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/prefs/pref_change_registrar.h"
-#include "chrome/browser/devtools/android_device.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
-#include "components/keyed_service/core/keyed_service.h"
-#include "ui/gfx/size.h"
-
-template<typename T> struct DefaultSingletonTraits;
-
-namespace base {
-class MessageLoop;
-class DictionaryValue;
-class ListValue;
-class Thread;
-}
-
-namespace content {
-class BrowserContext;
-}
-
-namespace crypto {
-class RSAPrivateKey;
-}
-
-class DevToolsTargetImpl;
-class Profile;
-
-// The format used for constructing DevTools server socket names.
-extern const char kDevToolsChannelNameFormat[];
-
-class DevToolsAdbBridge
-    : public base::RefCountedThreadSafe<
-          DevToolsAdbBridge,
-          content::BrowserThread::DeleteOnUIThread> {
- public:
-  typedef base::Callback<void(int result,
-                              const std::string& response)> Callback;
-
-  class Wrapper : public KeyedService {
-   public:
-    explicit Wrapper(content::BrowserContext* context);
-    virtual ~Wrapper();
-
-    DevToolsAdbBridge* Get();
-   private:
-    scoped_refptr<DevToolsAdbBridge> bridge_;
-  };
-
-  class Factory : public BrowserContextKeyedServiceFactory {
-   public:
-    // Returns singleton instance of DevToolsAdbBridge.
-    static Factory* GetInstance();
-
-    // Returns DevToolsAdbBridge associated with |profile|.
-    static DevToolsAdbBridge* GetForProfile(Profile* profile);
-
-   private:
-    friend struct DefaultSingletonTraits<Factory>;
-
-    Factory();
-    virtual ~Factory();
-
-    // BrowserContextKeyedServiceFactory overrides:
-    virtual KeyedService* BuildServiceInstanceFor(
-        content::BrowserContext* context) const OVERRIDE;
-    DISALLOW_COPY_AND_ASSIGN(Factory);
-  };
-
-  class AdbWebSocket : public base::RefCountedThreadSafe<AdbWebSocket> {
-   public:
-    class Delegate {
-     public:
-      virtual void OnSocketOpened() = 0;
-      virtual void OnFrameRead(const std::string& message) = 0;
-      virtual void OnSocketClosed(bool closed_by_device) = 0;
-
-     protected:
-      virtual ~Delegate() {}
-    };
-
-    AdbWebSocket() {}
-
-    virtual void Disconnect() = 0;
-
-    virtual void SendFrame(const std::string& message) = 0;
-
-   protected:
-    virtual ~AdbWebSocket() {}
-
-   private:
-    friend class base::RefCountedThreadSafe<AdbWebSocket>;
-
-    DISALLOW_COPY_AND_ASSIGN(AdbWebSocket);
-  };
-
-  class RemoteBrowser : public base::RefCounted<RemoteBrowser> {
-   public:
-    RemoteBrowser(
-        scoped_refptr<DevToolsAdbBridge> adb_bridge,
-        const std::string& serial,
-        const std::string& socket);
-
-    std::string serial() { return serial_; }
-    std::string socket() { return socket_; }
-
-    std::string display_name() { return display_name_; }
-    void set_display_name(const std::string& name) { display_name_ = name; }
-
-    std::string version() { return version_; }
-    void set_version(const std::string& version) { version_ = version; }
-
-    bool IsChrome() const;
-
-    typedef std::vector<int> ParsedVersion;
-    ParsedVersion GetParsedVersion() const;
-
-    std::vector<DevToolsTargetImpl*> CreatePageTargets();
-    void SetPageDescriptors(const base::ListValue&);
-
-    typedef base::Callback<void(int, const std::string&)> JsonRequestCallback;
-    void SendJsonRequest(const std::string& request,
-                         const JsonRequestCallback& callback);
-    void SendProtocolCommand(const std::string& debug_url,
-                             const std::string& method,
-                             base::DictionaryValue* params,
-                             const base::Closure callback);
-
-    void Open(const std::string& url);
-    void OpenAndInspect(const std::string& url, Profile* profile);
-
-    scoped_refptr<AdbWebSocket> CreateWebSocket(
-        const std::string& url,
-        DevToolsAdbBridge::AdbWebSocket::Delegate* delegate);
-
-   private:
-    friend class base::RefCounted<RemoteBrowser>;
-    virtual ~RemoteBrowser();
-
-    void Open(const std::string& url,
-              const JsonRequestCallback& callback);
-
-    void PageCreatedOnUIThread(
-        const JsonRequestCallback& callback,
-        const std::string& url, int result, const std::string& response);
-
-    void NavigatePageOnUIThread(const JsonRequestCallback& callback,
-        int result, const std::string& response, const std::string& url);
-
-    void InspectAfterOpenOnUIThread(Profile* profile, int result,
-                                    const std::string& response);
-
-    scoped_refptr<DevToolsAdbBridge> adb_bridge_;
-    const std::string serial_;
-    const std::string socket_;
-    std::string display_name_;
-    std::string version_;
-    scoped_ptr<base::ListValue> page_descriptors_;
-
-    DISALLOW_COPY_AND_ASSIGN(RemoteBrowser);
-  };
-
-  typedef std::vector<scoped_refptr<RemoteBrowser> > RemoteBrowsers;
-
-  class RemoteDevice : public base::RefCounted<RemoteDevice> {
-   public:
-    RemoteDevice(scoped_refptr<DevToolsAdbBridge> adb_bridge,
-                 const std::string& serial,
-                 const std::string& model,
-                 bool connected);
-
-    std::string serial() { return serial_; }
-    std::string model() { return model_; }
-    bool is_connected() { return connected_; }
-    void AddBrowser(scoped_refptr<RemoteBrowser> browser);
-
-    RemoteBrowsers& browsers() { return browsers_; }
-    gfx::Size screen_size() { return screen_size_; }
-    void set_screen_size(const gfx::Size& size) { screen_size_ = size; }
-
-    void OpenSocket(const std::string& socket_name,
-                    const AndroidDeviceManager::SocketCallback& callback);
-
-   private:
-    friend class base::RefCounted<RemoteDevice>;
-    virtual ~RemoteDevice();
-
-    scoped_refptr<DevToolsAdbBridge> adb_bridge_;
-    std::string serial_;
-    std::string model_;
-    bool connected_;
-    RemoteBrowsers browsers_;
-    gfx::Size screen_size_;
-
-    DISALLOW_COPY_AND_ASSIGN(RemoteDevice);
-  };
-
-  typedef std::vector<scoped_refptr<RemoteDevice> > RemoteDevices;
-
-  class DeviceListListener {
-   public:
-    virtual void DeviceListChanged(const RemoteDevices& devices) = 0;
-   protected:
-    virtual ~DeviceListListener() {}
-  };
-
-  explicit DevToolsAdbBridge(Profile* profile);
-  void AddDeviceListListener(DeviceListListener* listener);
-  void RemoveDeviceListListener(DeviceListListener* listener);
-
-  class DeviceCountListener {
-   public:
-    virtual void DeviceCountChanged(int count) = 0;
-   protected:
-    virtual ~DeviceCountListener() {}
-  };
-
-  void AddDeviceCountListener(DeviceCountListener* listener);
-  void RemoveDeviceCountListener(DeviceCountListener* listener);
-
-  void set_device_providers_for_test(
-      const AndroidDeviceManager::DeviceProviders& device_providers) {
-    device_providers_ = device_providers;
-  }
-
-  static bool HasDevToolsWindow(const std::string& agent_id);
-
- private:
-  friend struct content::BrowserThread::DeleteOnThread<
-      content::BrowserThread::UI>;
-  friend class base::DeleteHelper<DevToolsAdbBridge>;
-
-  class RefCountedAdbThread
-      : public base::RefCountedThreadSafe<RefCountedAdbThread> {
-   public:
-    static scoped_refptr<RefCountedAdbThread> GetInstance();
-    base::MessageLoop* message_loop();
-
-   private:
-    friend class base::RefCountedThreadSafe<RefCountedAdbThread>;
-    static RefCountedAdbThread* instance_;
-    static void StopThread(base::Thread* thread);
-
-    RefCountedAdbThread();
-    virtual ~RefCountedAdbThread();
-    base::Thread* thread_;
-  };
-
-  virtual ~DevToolsAdbBridge();
-
-  base::MessageLoop* device_message_loop() {
-    return adb_thread_->message_loop();
-  }
-
-  AndroidDeviceManager* device_manager() {
-    return device_manager_.get();
-  }
-
-  void CreatedDeviceManager(scoped_refptr<AndroidDeviceManager> device_manager);
-  void RequestDeviceList();
-  void ReceivedDeviceList(RemoteDevices* devices);
-
-  void RequestDeviceCount();
-  void ReceivedDeviceCount(int count);
-
-  void CreateDeviceProviders();
-
-  Profile* profile_;
-  scoped_refptr<RefCountedAdbThread> adb_thread_;
-  scoped_refptr<AndroidDeviceManager> device_manager_;
-
-  typedef std::vector<DeviceListListener*> DeviceListListeners;
-  DeviceListListeners device_list_listeners_;
-
-  typedef std::vector<DeviceCountListener*> DeviceCountListeners;
-  DeviceCountListeners device_count_listeners_;
-
-  AndroidDeviceManager::DeviceProviders device_providers_;
-  PrefChangeRegistrar pref_change_registrar_;
-  DISALLOW_COPY_AND_ASSIGN(DevToolsAdbBridge);
-};
-
-#endif  // CHROME_BROWSER_DEVTOOLS_DEVTOOLS_ADB_BRIDGE_H_
diff --git a/chrome/browser/devtools/devtools_adb_bridge_browsertest.cc b/chrome/browser/devtools/devtools_adb_bridge_browsertest.cc
deleted file mode 100644
index ef3ed65..0000000
--- a/chrome/browser/devtools/devtools_adb_bridge_browsertest.cc
+++ /dev/null
@@ -1,377 +0,0 @@
-// Copyright 2013 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 "chrome/browser/devtools/android_device.h"
-#include "chrome/browser/devtools/devtools_adb_bridge.h"
-#include "chrome/browser/devtools/devtools_target_impl.h"
-#include "chrome/browser/ui/browser.h"
-#include "chrome/test/base/in_process_browser_test.h"
-#include "content/public/test/test_utils.h"
-
-const char kDeviceModelCommand[] = "shell:getprop ro.product.model";
-const char kOpenedUnixSocketsCommand[] = "shell:cat /proc/net/unix";
-const char kListProcessesCommand[] = "shell:ps";
-const char kListPackagesCommand[] = "shell:pm list packages";
-const char kDumpsysCommand[] = "shell:dumpsys window policy";
-
-const char kPageListRequest[] = "GET /json HTTP/1.1\r\n\r\n";
-const char kVersionRequest[] = "GET /json/version HTTP/1.1\r\n\r\n";
-
-const char kSampleOpenedUnixSockets[] =
-    "Num       RefCount Protocol Flags    Type St Inode Path\n"
-    "00000000: 00000004 00000000"
-    " 00000000 0002 01  3328 /dev/socket/wpa_wlan0\n"
-    "00000000: 00000002 00000000"
-    " 00010000 0001 01  5394 /dev/socket/vold\n"
-    "00000000: 00000002 00000000"
-    " 00010000 0001 01 11810 @webview_devtools_remote_2425\n"
-    "00000000: 00000002 00000000"
-    " 00010000 0001 01 20893 @chrome_devtools_remote\n"
-    "00000000: 00000002 00000000"
-    " 00010000 0001 01 20894 @chrome_devtools_remote_1002\n"
-    "00000000: 00000002 00000000"
-    " 00010000 0001 01 20895 @noprocess_devtools_remote\n";
-
-const char kSampleListProcesses[] =
-    "USER   PID  PPID VSIZE  RSS    WCHAN    PC         NAME\n"
-    "root   1    0    688    508    ffffffff 00000000 S /init\r\n"
-    "u0_a75 2425 123  933736 193024 ffffffff 00000000 S com.sample.feed\r\n"
-    "nfc    741  123  706448 26316  ffffffff 00000000 S com.android.nfc\r\n"
-    "u0_a76 1001 124  111111 222222 ffffffff 00000000 S com.android.chrome\r\n"
-    "u0_a77 1002 125  111111 222222 ffffffff 00000000 S com.chrome.beta\r\n"
-    "u0_a78 1003 126  111111 222222 ffffffff 00000000 S com.noprocess.app\r\n";
-
-const char kSampleListPackages[] =
-    "package:com.sample.feed\r\n"
-    "package:com.android.nfc\r\n"
-    "package:com.android.chrome\r\n"
-    "package:com.chrome.beta\r\n"
-    "package:com.google.android.apps.chrome\r\n";
-
-const char kSampleDumpsysCommand[] =
-    "WINDOW MANAGER POLICY STATE (dumpsys window policy)\r\n"
-    "    mSafeMode=false mSystemReady=true mSystemBooted=true\r\n"
-    "    mStable=(0,50)-(720,1184)\r\n" // Only mStable parameter is parsed
-    "    mForceStatusBar=false mForceStatusBarFromKeyguard=false\r\n";
-
-char kSampleChromeVersion[] = "{\n"
-    "   \"Browser\": \"Chrome/32.0.1679.0\",\n"
-    "   \"Protocol-Version\": \"1.0\",\n"
-    "   \"User-Agent\": \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 "
-    "(KHTML, like Gecko) Chrome/32.0.1679.0 Safari/537.36\",\n"
-    "   \"WebKit-Version\": \"537.36 (@160162)\"\n"
-    "}";
-
-char kSampleChromeBetaVersion[] = "{\n"
-    "   \"Browser\": \"Chrome/31.0.1599.0\",\n"
-    "   \"Protocol-Version\": \"1.0\",\n"
-    "   \"User-Agent\": \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 "
-    "(KHTML, like Gecko) Chrome/32.0.1679.0 Safari/537.36\",\n"
-    "   \"WebKit-Version\": \"537.36 (@160162)\"\n"
-    "}";
-
-char kSampleWebViewVersion[] = "{\n"
-    "   \"Browser\": \"Version/4.0\",\n"
-    "   \"Protocol-Version\": \"1.0\",\n"
-    "   \"User-Agent\": \"Mozilla/5.0 (Linux; Android 4.3; Build/KRS74B) "
-    "AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Safari/537.36\",\n"
-    "   \"WebKit-Version\": \"537.36 (@157588)\"\n"
-    "}";
-
-char kSampleChromePages[] = "[ {\n"
-    "   \"description\": \"\",\n"
-    "   \"devtoolsFrontendUrl\": \"/devtools/devtools.html?"
-    "ws=/devtools/page/755DE5C9-D49F-811D-0693-51B8E15C80D2\",\n"
-    "   \"id\": \"755DE5C9-D49F-811D-0693-51B8E15C80D2\",\n"
-    "   \"title\": \"The Chromium Projects\",\n"
-    "   \"type\": \"page\",\n"
-    "   \"url\": \"http://www.chromium.org/\",\n"
-    "   \"webSocketDebuggerUrl\": \""
-    "ws:///devtools/page/755DE5C9-D49F-811D-0693-51B8E15C80D2\"\n"
-    "} ]";
-
-char kSampleChromeBetaPages[] = "[]";
-
-char kSampleWebViewPages[] = "[ {\n"
-    "   \"description\": \"{\\\"attached\\\":false,\\\"empty\\\":false,"
-    "\\\"height\\\":1173,\\\"screenX\\\":0,\\\"screenY\\\":0,"
-    "\\\"visible\\\":true,\\\"width\\\":800}\",\n"
-    "   \"devtoolsFrontendUrl\": \"http://chrome-devtools-frontend.appspot.com/"
-    "serve_rev/@157588/devtools.html?ws="
-    "/devtools/page/3E962D4D-B676-182D-3BE8-FAE7CE224DE7\",\n"
-    "   \"faviconUrl\": \"http://chromium.org/favicon.ico\",\n"
-    "   \"id\": \"3E962D4D-B676-182D-3BE8-FAE7CE224DE7\",\n"
-    "   \"thumbnailUrl\": \"/thumb/3E962D4D-B676-182D-3BE8-FAE7CE224DE7\",\n"
-    "   \"title\": \"Blink - The Chromium Projects\",\n"
-    "   \"type\": \"page\",\n"
-    "   \"url\": \"http://www.chromium.org/blink\",\n"
-    "   \"webSocketDebuggerUrl\": \"ws:///devtools/"
-    "page/3E962D4D-B676-182D-3BE8-FAE7CE224DE7\"\n"
-    "}, {\n"
-    "   \"description\": \"{\\\"attached\\\":true,\\\"empty\\\":true,"
-    "\\\"screenX\\\":0,\\\"screenY\\\":33,\\\"visible\\\":false}\",\n"
-    "   \"devtoolsFrontendUrl\": \"http://chrome-devtools-frontend.appspot.com/"
-    "serve_rev/@157588/devtools.html?ws="
-    "/devtools/page/44681551-ADFD-2411-076B-3AB14C1C60E2\",\n"
-    "   \"faviconUrl\": \"\",\n"
-    "   \"id\": \"44681551-ADFD-2411-076B-3AB14C1C60E2\",\n"
-    "   \"thumbnailUrl\": \"/thumb/44681551-ADFD-2411-076B-3AB14C1C60E2\",\n"
-    "   \"title\": \"More Activity\",\n"
-    "   \"type\": \"page\",\n"
-    "   \"url\": \"about:blank\",\n"
-    "   \"webSocketDebuggerUrl\": \"ws:///devtools/page/"
-    "44681551-ADFD-2411-076B-3AB14C1C60E2\"\n"
-    "}]";
-
-class MockDeviceImpl : public AndroidDeviceManager::Device {
- public:
-  MockDeviceImpl(const std::string& serial, int index,
-                 bool connected, const char* device_model)
-      : Device(serial, connected),
-        device_model_(device_model)
-  {}
-
-  virtual void RunCommand(const std::string& command,
-                            const CommandCallback& callback) OVERRIDE {
-    const char* response;
-
-    if (command == kDeviceModelCommand) {
-      response = device_model_;
-    } else if (command == kOpenedUnixSocketsCommand) {
-      response = kSampleOpenedUnixSockets;
-    } else if (command == kListProcessesCommand) {
-      response = kSampleListProcesses;
-    } else if (command == kListPackagesCommand) {
-      response = kSampleListPackages;
-    } else if (command == kDumpsysCommand) {
-      response = kSampleDumpsysCommand;
-    } else {
-      NOTREACHED();
-      return;
-    }
-
-    base::MessageLoop::current()->PostTask( FROM_HERE,
-              base::Bind(&MockDeviceImpl::RunCommandCallback,
-                         this, callback, 0, response));
-  }
-
-  void RunCommandCallback(const CommandCallback& callback, int result,
-                          const std::string& response) {
-    callback.Run(result, response);
-  }
-
-  virtual void OpenSocket(const std::string& name,
-                          const SocketCallback& callback) OVERRIDE {
-    NOTREACHED();
-  }
-
-  virtual void HttpQuery(const std::string& la_name,
-                     const std::string& request,
-                     const CommandCallback& callback) OVERRIDE {
-    const char* response;
-
-    if (la_name == "chrome_devtools_remote") {
-      if (request == kVersionRequest) {
-        response = kSampleChromeVersion;
-      } else if (request == kPageListRequest) {
-        response = kSampleChromePages;
-      } else {
-        NOTREACHED();
-        return;
-      }
-    } else if (la_name == "chrome_devtools_remote_1002") {
-      if (request == kVersionRequest) {
-        response = kSampleChromeBetaVersion;
-      } else if (request == kPageListRequest) {
-        response = kSampleChromeBetaPages;
-      } else {
-        NOTREACHED();
-        return;
-      }
-    } else if (la_name.find("noprocess_devtools_remote") == 0) {
-      if (request == kVersionRequest) {
-        response = "{}";
-      } else if (request == kPageListRequest) {
-        response = "[]";
-      } else {
-        NOTREACHED();
-        return;
-      }
-    } else if (la_name == "webview_devtools_remote_2425") {
-      if (request == kVersionRequest) {
-        response = kSampleWebViewVersion;
-      } else if (request == kPageListRequest) {
-        response = kSampleWebViewPages;
-      } else {
-        NOTREACHED();
-        return;
-      }
-    } else {
-      NOTREACHED();
-      return;
-    }
-
-    base::MessageLoop::current()->PostTask( FROM_HERE,
-              base::Bind(&MockDeviceImpl::RunCommandCallback,
-                         this, callback, 0, response));
-  }
-
-  virtual void HttpUpgrade(const std::string& la_name,
-                       const std::string& request,
-                       const SocketCallback& callback) {
-    NOTREACHED();
-  }
-
-  virtual void HttpQueryCallback(const CommandCallback& next, int code,
-                                 const std::string& result) {
-    NOTREACHED();
-  }
-
- private:
-  virtual ~MockDeviceImpl()
-  {}
-
-  const char* device_model_;
-};
-
-class MockDeviceProvider : public AndroidDeviceManager::DeviceProvider {
-  virtual ~MockDeviceProvider()
-  {}
-
-  virtual void QueryDevices(const QueryDevicesCallback& callback) OVERRIDE {
-    AndroidDeviceManager::Devices devices;
-    devices.push_back(new MockDeviceImpl("FirstDevice", 0, true, "Nexus 6"));
-    devices.push_back(new MockDeviceImpl("SecondDevice", 1, false, "Nexus 8"));
-    callback.Run(devices);
-  }
-};
-
-// static
-scoped_refptr<AndroidDeviceManager::DeviceProvider>
-AndroidDeviceManager::GetMockDeviceProviderForTest() {
-  return new MockDeviceProvider();
-}
-
-static scoped_refptr<DevToolsAdbBridge::RemoteBrowser>
-FindBrowserByDisplayName(DevToolsAdbBridge::RemoteBrowsers browsers,
-                         const std::string& name) {
-  for (DevToolsAdbBridge::RemoteBrowsers::iterator it = browsers.begin();
-      it != browsers.end(); ++it)
-    if ((*it)->display_name() == name)
-      return *it;
-  return NULL;
-}
-
-class DevToolsAdbBridgeTest : public InProcessBrowserTest,
-                              public DevToolsAdbBridge::DeviceListListener {
-  typedef DevToolsAdbBridge::RemoteDevices::const_iterator rdci;
-  typedef DevToolsAdbBridge::RemoteBrowsers::const_iterator rbci;
-public:
-  virtual void DeviceListChanged(
-      const DevToolsAdbBridge::RemoteDevices& devices) OVERRIDE {
-    devices_ = devices;
-    runner_->Quit();
-  }
-
-  void CheckDevices() {
-    ASSERT_EQ(2U, devices_.size());
-
-    scoped_refptr<DevToolsAdbBridge::RemoteDevice> connected =
-        devices_[0]->is_connected() ? devices_[0] : devices_[1];
-
-    scoped_refptr<DevToolsAdbBridge::RemoteDevice> not_connected =
-        devices_[0]->is_connected() ? devices_[1] : devices_[0];
-
-    ASSERT_TRUE(connected->is_connected());
-    ASSERT_FALSE(not_connected->is_connected());
-
-    ASSERT_EQ(720, connected->screen_size().width());
-    ASSERT_EQ(1184, connected->screen_size().height());
-
-    ASSERT_EQ("FirstDevice", connected->serial());
-    ASSERT_EQ("Nexus 6", connected->model());
-
-    ASSERT_EQ("SecondDevice", not_connected->serial());
-    ASSERT_EQ("Offline", not_connected->model());
-
-    const DevToolsAdbBridge::RemoteBrowsers& browsers = connected->browsers();
-    ASSERT_EQ(4U, browsers.size());
-
-    scoped_refptr<DevToolsAdbBridge::RemoteBrowser> chrome =
-        FindBrowserByDisplayName(browsers, "Chrome");
-    ASSERT_TRUE(chrome);
-
-    scoped_refptr<DevToolsAdbBridge::RemoteBrowser> chrome_beta =
-        FindBrowserByDisplayName(browsers, "Chrome Beta");
-    ASSERT_TRUE(chrome_beta);
-
-    scoped_refptr<DevToolsAdbBridge::RemoteBrowser> chromium =
-        FindBrowserByDisplayName(browsers, "Chromium");
-    ASSERT_FALSE(chromium);
-
-    scoped_refptr<DevToolsAdbBridge::RemoteBrowser> webview =
-        FindBrowserByDisplayName(browsers, "WebView in com.sample.feed");
-    ASSERT_TRUE(webview);
-
-    scoped_refptr<DevToolsAdbBridge::RemoteBrowser> noprocess =
-        FindBrowserByDisplayName(browsers, "Noprocess");
-    ASSERT_TRUE(noprocess);
-
-    ASSERT_EQ("32.0.1679.0", chrome->version());
-    ASSERT_EQ("31.0.1599.0", chrome_beta->version());
-    ASSERT_EQ("4.0", webview->version());
-
-    std::vector<DevToolsTargetImpl*> chrome_pages =
-        chrome->CreatePageTargets();
-    std::vector<DevToolsTargetImpl*> chrome_beta_pages =
-        chrome_beta->CreatePageTargets();
-    std::vector<DevToolsTargetImpl*> webview_pages =
-        webview->CreatePageTargets();
-
-    ASSERT_EQ(1U, chrome_pages.size());
-    ASSERT_EQ(0U, chrome_beta_pages.size());
-    ASSERT_EQ(2U, webview_pages.size());
-
-    // Check that we have non-empty description for webview pages.
-    ASSERT_EQ(0U, chrome_pages[0]->GetDescription().size());
-    ASSERT_NE(0U, webview_pages[0]->GetDescription().size());
-    ASSERT_NE(0U, webview_pages[1]->GetDescription().size());
-
-    ASSERT_EQ(GURL("http://www.chromium.org/"), chrome_pages[0]->GetUrl());
-    ASSERT_EQ("The Chromium Projects", chrome_pages[0]->GetTitle());
-
-    STLDeleteElements(&chrome_pages);
-    STLDeleteElements(&webview_pages);
-  }
-
-  void init() {
-    runner_ = new content::MessageLoopRunner;
-  }
-
-protected:
-  scoped_refptr<content::MessageLoopRunner> runner_;
-  DevToolsAdbBridge::RemoteDevices devices_;
-};
-
-IN_PROC_BROWSER_TEST_F(DevToolsAdbBridgeTest, DiscoverAndroidBrowsers) {
-  init();
-
-  scoped_refptr<DevToolsAdbBridge> adb_bridge =
-      DevToolsAdbBridge::Factory::GetForProfile(browser()->profile());
-
-  AndroidDeviceManager::DeviceProviders providers;
-  providers.push_back(AndroidDeviceManager::GetMockDeviceProviderForTest());
-
-  adb_bridge->set_device_providers_for_test(providers);
-
-  if (!adb_bridge) {
-    FAIL() << "Failed to get DevToolsAdbBridge.";
-  }
-
-  adb_bridge->AddDeviceListListener(this);
-
-  runner_->Run();
-
-  CheckDevices();
-}
diff --git a/chrome/browser/devtools/devtools_embedder_message_dispatcher.cc b/chrome/browser/devtools/devtools_embedder_message_dispatcher.cc
index 6e106d7..2fae4a9 100644
--- a/chrome/browser/devtools/devtools_embedder_message_dispatcher.cc
+++ b/chrome/browser/devtools/devtools_embedder_message_dispatcher.cc
@@ -270,5 +270,7 @@
                      &Delegate::StartRemoteDevicesListener, delegate);
   d->RegisterHandler("stopRemoteDevicesListener",
                      &Delegate::StopRemoteDevicesListener, delegate);
+  d->RegisterHandler("enableRemoteDeviceCounter",
+                     &Delegate::EnableRemoteDeviceCounter, delegate);
   return d;
 }
diff --git a/chrome/browser/devtools/devtools_embedder_message_dispatcher.h b/chrome/browser/devtools/devtools_embedder_message_dispatcher.h
index 19b50ad..397eb6b 100644
--- a/chrome/browser/devtools/devtools_embedder_message_dispatcher.h
+++ b/chrome/browser/devtools/devtools_embedder_message_dispatcher.h
@@ -62,6 +62,7 @@
                                                  const std::string& url) = 0;
     virtual void StartRemoteDevicesListener() = 0;
     virtual void StopRemoteDevicesListener() = 0;
+    virtual void EnableRemoteDeviceCounter(bool enable) = 0;
   };
 
   virtual ~DevToolsEmbedderMessageDispatcher() {}
diff --git a/chrome/browser/devtools/devtools_sanity_browsertest.cc b/chrome/browser/devtools/devtools_sanity_browsertest.cc
index b2a4778..e3fab99 100644
--- a/chrome/browser/devtools/devtools_sanity_browsertest.cc
+++ b/chrome/browser/devtools/devtools_sanity_browsertest.cc
@@ -348,7 +348,8 @@
     size_t num_before = service->extensions()->size();
     {
       content::NotificationRegistrar registrar;
-      registrar.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
+      registrar.Add(this,
+                    chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
                     content::NotificationService::AllSources());
       base::CancelableClosure timeout(
           base::Bind(&TimeoutCallback, "Extension load timed out."));
@@ -399,7 +400,7 @@
                        const content::NotificationSource& source,
                        const content::NotificationDetails& details) OVERRIDE {
     switch (type) {
-      case chrome::NOTIFICATION_EXTENSION_LOADED:
+      case chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED:
       case chrome::NOTIFICATION_EXTENSION_HOST_DID_STOP_LOADING:
         base::MessageLoopForUI::current()->Quit();
         break;
@@ -859,28 +860,10 @@
   CloseDevToolsWindow();
 }
 
-#if defined(OS_WIN) || defined(OS_MACOSX)
-// Flakily times out: http://crbug.com/163411
-#define MAYBE_TestReattachAfterCrash DISABLED_TestReattachAfterCrash
-#else
-#define MAYBE_TestReattachAfterCrash TestReattachAfterCrash
-#endif
 // Tests that inspector will reattach to inspected page when it is reloaded
 // after a crash. See http://crbug.com/101952
-IN_PROC_BROWSER_TEST_F(DevToolsSanityTest, MAYBE_TestReattachAfterCrash) {
-  OpenDevToolsWindow(kDebuggerTestPage, false);
-
-  content::CrashTab(GetInspectedTab());
-  content::WindowedNotificationObserver observer(
-      content::NOTIFICATION_LOAD_STOP,
-      content::Source<NavigationController>(
-          &browser()->tab_strip_model()->GetActiveWebContents()->
-              GetController()));
-  chrome::Reload(browser(), CURRENT_TAB);
-  observer.Wait();
-
-  RunTestFunction(window_, "testReattachAfterCrash");
-  CloseDevToolsWindow();
+IN_PROC_BROWSER_TEST_F(DevToolsSanityTest, TestReattachAfterCrash) {
+  RunTest("testReattachAfterCrash", std::string());
 }
 
 IN_PROC_BROWSER_TEST_F(DevToolsSanityTest, TestPageWithNoJavaScript) {
diff --git a/chrome/browser/devtools/devtools_targets_ui.cc b/chrome/browser/devtools/devtools_targets_ui.cc
index ec7c5fe..38e62c5 100644
--- a/chrome/browser/devtools/devtools_targets_ui.cc
+++ b/chrome/browser/devtools/devtools_targets_ui.cc
@@ -9,7 +9,7 @@
 #include "base/strings/stringprintf.h"
 #include "base/values.h"
 #include "base/version.h"
-#include "chrome/browser/devtools/devtools_adb_bridge.h"
+#include "chrome/browser/devtools/device/devtools_android_bridge.h"
 #include "chrome/browser/devtools/devtools_target_impl.h"
 #include "chrome/common/chrome_version_info.h"
 #include "content/public/browser/browser_child_process_observer.h"
@@ -335,7 +335,7 @@
 
 class AdbTargetsUIHandler
     : public DevToolsRemoteTargetsUIHandler,
-      public DevToolsAdbBridge::DeviceListListener {
+      public DevToolsAndroidBridge::DeviceListListener {
  public:
   AdbTargetsUIHandler(Callback callback, Profile* profile);
   virtual ~AdbTargetsUIHandler();
@@ -347,31 +347,31 @@
                               Profile* profile) OVERRIDE;
 
  private:
-  // DevToolsAdbBridge::Listener overrides.
+  // DevToolsAndroidBridge::Listener overrides.
   virtual void DeviceListChanged(
-      const DevToolsAdbBridge::RemoteDevices& devices) OVERRIDE;
+      const DevToolsAndroidBridge::RemoteDevices& devices) OVERRIDE;
 
   Profile* profile_;
 
   typedef std::map<std::string,
-      scoped_refptr<DevToolsAdbBridge::RemoteBrowser> > RemoteBrowsers;
+      scoped_refptr<DevToolsAndroidBridge::RemoteBrowser> > RemoteBrowsers;
   RemoteBrowsers remote_browsers_;
 };
 
 AdbTargetsUIHandler::AdbTargetsUIHandler(Callback callback, Profile* profile)
     : DevToolsRemoteTargetsUIHandler(kTargetSourceAdb, callback),
       profile_(profile) {
-  DevToolsAdbBridge* adb_bridge =
-      DevToolsAdbBridge::Factory::GetForProfile(profile_);
-  if (adb_bridge)
-    adb_bridge->AddDeviceListListener(this);
+  DevToolsAndroidBridge* android_bridge =
+      DevToolsAndroidBridge::Factory::GetForProfile(profile_);
+  if (android_bridge)
+    android_bridge->AddDeviceListListener(this);
 }
 
 AdbTargetsUIHandler::~AdbTargetsUIHandler() {
-  DevToolsAdbBridge* adb_bridge =
-      DevToolsAdbBridge::Factory::GetForProfile(profile_);
-  if (adb_bridge)
-    adb_bridge->RemoveDeviceListListener(this);
+  DevToolsAndroidBridge* android_bridge =
+      DevToolsAndroidBridge::Factory::GetForProfile(profile_);
+  if (android_bridge)
+    android_bridge->RemoveDeviceListListener(this);
 }
 
 void AdbTargetsUIHandler::Open(const std::string& browser_id,
@@ -390,14 +390,14 @@
 }
 
 void AdbTargetsUIHandler::DeviceListChanged(
-    const DevToolsAdbBridge::RemoteDevices& devices) {
+    const DevToolsAndroidBridge::RemoteDevices& devices) {
   remote_browsers_.clear();
   STLDeleteValues(&targets_);
 
   scoped_ptr<base::ListValue> device_list(new base::ListValue());
-  for (DevToolsAdbBridge::RemoteDevices::const_iterator dit = devices.begin();
-       dit != devices.end(); ++dit) {
-    DevToolsAdbBridge::RemoteDevice* device = dit->get();
+  for (DevToolsAndroidBridge::RemoteDevices::const_iterator dit =
+      devices.begin(); dit != devices.end(); ++dit) {
+    DevToolsAndroidBridge::RemoteDevice* device = dit->get();
     base::DictionaryValue* device_data = new base::DictionaryValue();
     device_data->SetString(kAdbModelField, device->model());
     device_data->SetString(kAdbSerialField, device->serial());
@@ -409,14 +409,14 @@
     base::ListValue* browser_list = new base::ListValue();
     device_data->Set(kAdbBrowsersList, browser_list);
 
-    DevToolsAdbBridge::RemoteBrowsers& browsers = device->browsers();
-    for (DevToolsAdbBridge::RemoteBrowsers::iterator bit =
+    DevToolsAndroidBridge::RemoteBrowsers& browsers = device->browsers();
+    for (DevToolsAndroidBridge::RemoteBrowsers::iterator bit =
         browsers.begin(); bit != browsers.end(); ++bit) {
-      DevToolsAdbBridge::RemoteBrowser* browser = bit->get();
+      DevToolsAndroidBridge::RemoteBrowser* browser = bit->get();
       base::DictionaryValue* browser_data = new base::DictionaryValue();
       browser_data->SetString(kAdbBrowserNameField, browser->display_name());
       browser_data->SetString(kAdbBrowserVersionField, browser->version());
-      DevToolsAdbBridge::RemoteBrowser::ParsedVersion parsed =
+      DevToolsAndroidBridge::RemoteBrowser::ParsedVersion parsed =
           browser->GetParsedVersion();
       browser_data->SetInteger(
           kAdbBrowserChromeVersionField,
@@ -459,7 +459,7 @@
         target_data->SetBoolean(
             kAdbAttachedForeignField,
             target->IsAttached() &&
-                !DevToolsAdbBridge::HasDevToolsWindow(target->GetId()));
+                !DevToolsAndroidBridge::HasDevToolsWindow(target->GetId()));
         // Pass the screen size in the target object to make sure that
         // the caching logic does not prevent the target item from updating
         // when the screen size changes.
diff --git a/chrome/browser/devtools/devtools_targets_ui.h b/chrome/browser/devtools/devtools_targets_ui.h
index add7f955..539c37d 100644
--- a/chrome/browser/devtools/devtools_targets_ui.h
+++ b/chrome/browser/devtools/devtools_targets_ui.h
@@ -10,7 +10,7 @@
 
 #include "base/callback.h"
 #include "base/memory/scoped_ptr.h"
-#include "chrome/browser/devtools/port_forwarding_controller.h"
+#include "chrome/browser/devtools/device/port_forwarding_controller.h"
 
 namespace base {
 class ListValue;
diff --git a/chrome/browser/devtools/devtools_window.cc b/chrome/browser/devtools/devtools_window.cc
index 2a6549b..8b12c80 100644
--- a/chrome/browser/devtools/devtools_window.cc
+++ b/chrome/browser/devtools/devtools_window.cc
@@ -20,13 +20,11 @@
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/chrome_page_zoom.h"
-#include "chrome/browser/devtools/devtools_adb_bridge.h"
 #include "chrome/browser/extensions/api/debugger/debugger_api.h"
 #include "chrome/browser/extensions/chrome_extension_web_contents_observer.h"
 #include "chrome/browser/extensions/extension_service.h"
 #include "chrome/browser/file_select_helper.h"
 #include "chrome/browser/infobars/confirm_infobar_delegate.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/prefs/pref_service_syncable.h"
 #include "chrome/browser/profiles/profile.h"
@@ -48,6 +46,7 @@
 #include "chrome/common/pref_names.h"
 #include "chrome/common/render_messages.h"
 #include "chrome/common/url_constants.h"
+#include "components/infobars/core/infobar.h"
 #include "components/user_prefs/pref_registry_syncable.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/child_process_security_policy.h"
@@ -399,6 +398,8 @@
     jobs_it->second->Stop();
   }
   indexing_jobs_.clear();
+  if (device_listener_enabled_)
+    EnableRemoteDeviceCounter(false);
 }
 
 // static
@@ -426,7 +427,7 @@
 
   registry->RegisterBooleanPref(
       prefs::kDevToolsDiscoverUsbDevicesEnabled,
-      false,
+      true,
       user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
   registry->RegisterBooleanPref(
       prefs::kDevToolsPortForwardingEnabled,
@@ -786,6 +787,7 @@
       browser_(NULL),
       is_docked_(true),
       can_dock_(can_dock),
+      device_listener_enabled_(false),
       // This initialization allows external front-end to work without changes.
       // We don't wait for docking call, but instead immediately show undocked.
       // Passing "dockSide=undocked" parameter ensures proper UI.
@@ -1393,6 +1395,26 @@
   remote_targets_handler_.reset();
 }
 
+void DevToolsWindow::EnableRemoteDeviceCounter(bool enable) {
+  DevToolsAndroidBridge* adb_bridge =
+      DevToolsAndroidBridge::Factory::GetForProfile(profile_);
+  if (!adb_bridge)
+    return;
+
+  DCHECK(device_listener_enabled_ != enable);
+  device_listener_enabled_ = enable;
+  if (enable)
+    adb_bridge->AddDeviceCountListener(this);
+  else
+    adb_bridge->RemoveDeviceCountListener(this);
+}
+
+void DevToolsWindow::DeviceCountChanged(int count) {
+  base::FundamentalValue value(count);
+  CallClientFunction(
+      "InspectorFrontendAPI.setRemoteDeviceCount", &value, NULL, NULL);
+}
+
 void DevToolsWindow::PopulateRemoteDevices(
     const std::string& source,
     scoped_ptr<base::ListValue> targets) {
diff --git a/chrome/browser/devtools/devtools_window.h b/chrome/browser/devtools/devtools_window.h
index 22224a8..a7c7153 100644
--- a/chrome/browser/devtools/devtools_window.h
+++ b/chrome/browser/devtools/devtools_window.h
@@ -12,6 +12,7 @@
 #include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/strings/string16.h"
+#include "chrome/browser/devtools/device/devtools_android_bridge.h"
 #include "chrome/browser/devtools/devtools_contents_resizing_strategy.h"
 #include "chrome/browser/devtools/devtools_embedder_message_dispatcher.h"
 #include "chrome/browser/devtools/devtools_file_helper.h"
@@ -55,7 +56,8 @@
 class DevToolsWindow : private content::NotificationObserver,
                        private content::WebContentsDelegate,
                        private content::DevToolsFrontendHostDelegate,
-                       private DevToolsEmbedderMessageDispatcher::Delegate {
+                       private DevToolsEmbedderMessageDispatcher::Delegate,
+                       private DevToolsAndroidBridge::DeviceCountListener {
  public:
   typedef base::Callback<void(bool)> InfoBarCallback;
 
@@ -345,6 +347,10 @@
                                                const std::string& url) OVERRIDE;
   virtual void StartRemoteDevicesListener() OVERRIDE;
   virtual void StopRemoteDevicesListener() OVERRIDE;
+  virtual void EnableRemoteDeviceCounter(bool enable) OVERRIDE;
+
+  // DevToolsAndroidBridge::DeviceCountListener override:
+  virtual void DeviceCountChanged(int count) OVERRIDE;
 
   // Forwards discovered devices to frontend.
   virtual void PopulateRemoteDevices(const std::string& source,
@@ -397,7 +403,8 @@
   content::WebContents* web_contents_;
   Browser* browser_;
   bool is_docked_;
-  bool can_dock_;
+  const bool can_dock_;
+  bool device_listener_enabled_;
   LoadState load_state_;
   DevToolsToggleAction action_on_load_;
   bool ignore_set_is_docked_;
diff --git a/chrome/browser/devtools/port_forwarding_controller.cc b/chrome/browser/devtools/port_forwarding_controller.cc
deleted file mode 100644
index 8961154..0000000
--- a/chrome/browser/devtools/port_forwarding_controller.cc
+++ /dev/null
@@ -1,668 +0,0 @@
-// Copyright 2013 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 "chrome/browser/devtools/port_forwarding_controller.h"
-
-#include <algorithm>
-#include <map>
-
-#include "base/bind.h"
-#include "base/compiler_specific.h"
-#include "base/memory/singleton.h"
-#include "base/message_loop/message_loop.h"
-#include "base/prefs/pref_service.h"
-#include "base/strings/string_number_conversions.h"
-#include "base/strings/string_util.h"
-#include "base/strings/stringprintf.h"
-#include "base/threading/non_thread_safe.h"
-#include "chrome/browser/devtools/adb_client_socket.h"
-#include "chrome/browser/devtools/devtools_protocol.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/common/pref_names.h"
-#include "components/keyed_service/content/browser_context_dependency_manager.h"
-#include "content/public/browser/browser_thread.h"
-#include "net/base/address_list.h"
-#include "net/base/net_errors.h"
-#include "net/base/net_util.h"
-#include "net/dns/host_resolver.h"
-#include "net/socket/tcp_client_socket.h"
-
-using content::BrowserThread;
-
-namespace {
-
-const int kBufferSize = 16 * 1024;
-
-enum {
-  kStatusError = -3,
-  kStatusDisconnecting = -2,
-  kStatusConnecting = -1,
-  kStatusOK = 0,
-  // Positive values are used to count open connections.
-};
-
-static const char kPortAttribute[] = "port";
-static const char kConnectionIdAttribute[] = "connectionId";
-static const char kTetheringAccepted[] = "Tethering.accepted";
-static const char kTetheringBind[] = "Tethering.bind";
-static const char kTetheringUnbind[] = "Tethering.unbind";
-
-static const char kDevToolsRemoteBrowserTarget[] = "/devtools/browser";
-const int kMinVersionPortForwarding = 28;
-
-class SocketTunnel : public base::NonThreadSafe {
- public:
-  typedef base::Callback<void(int)> CounterCallback;
-
-  static void StartTunnel(const std::string& host,
-                          int port,
-                          const CounterCallback& callback,
-                          int result,
-                          net::StreamSocket* socket) {
-    if (result < 0)
-      return;
-    SocketTunnel* tunnel = new SocketTunnel(callback);
-    tunnel->Start(socket, host, port);
-  }
-
- private:
-  explicit SocketTunnel(const CounterCallback& callback)
-      : pending_writes_(0),
-        pending_destruction_(false),
-        callback_(callback),
-        about_to_destroy_(false) {
-    callback_.Run(1);
-  }
-
-  void Start(net::StreamSocket* socket, const std::string& host, int port) {
-    remote_socket_.reset(socket);
-
-    host_resolver_ = net::HostResolver::CreateDefaultResolver(NULL);
-    net::HostResolver::RequestInfo request_info(net::HostPortPair(host, port));
-    int result = host_resolver_->Resolve(
-        request_info,
-        net::DEFAULT_PRIORITY,
-        &address_list_,
-        base::Bind(&SocketTunnel::OnResolved, base::Unretained(this)),
-        NULL,
-        net::BoundNetLog());
-    if (result != net::ERR_IO_PENDING)
-      OnResolved(result);
-  }
-
-  void OnResolved(int result) {
-    if (result < 0) {
-      SelfDestruct();
-      return;
-    }
-
-    host_socket_.reset(new net::TCPClientSocket(address_list_, NULL,
-                                                net::NetLog::Source()));
-    result = host_socket_->Connect(base::Bind(&SocketTunnel::OnConnected,
-                                              base::Unretained(this)));
-    if (result != net::ERR_IO_PENDING)
-      OnConnected(result);
-  }
-
-  ~SocketTunnel() {
-    about_to_destroy_ = true;
-    if (host_socket_)
-      host_socket_->Disconnect();
-    if (remote_socket_)
-      remote_socket_->Disconnect();
-    callback_.Run(-1);
-  }
-
-  void OnConnected(int result) {
-    if (result < 0) {
-      SelfDestruct();
-      return;
-    }
-
-    Pump(host_socket_.get(), remote_socket_.get());
-    Pump(remote_socket_.get(), host_socket_.get());
-  }
-
-  void Pump(net::StreamSocket* from, net::StreamSocket* to) {
-    scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer(kBufferSize);
-    int result = from->Read(
-        buffer.get(),
-        kBufferSize,
-        base::Bind(
-            &SocketTunnel::OnRead, base::Unretained(this), from, to, buffer));
-    if (result != net::ERR_IO_PENDING)
-      OnRead(from, to, buffer, result);
-  }
-
-  void OnRead(net::StreamSocket* from,
-              net::StreamSocket* to,
-              scoped_refptr<net::IOBuffer> buffer,
-              int result) {
-    if (result <= 0) {
-      SelfDestruct();
-      return;
-    }
-
-    int total = result;
-    scoped_refptr<net::DrainableIOBuffer> drainable =
-        new net::DrainableIOBuffer(buffer.get(), total);
-
-    ++pending_writes_;
-    result = to->Write(drainable.get(),
-                       total,
-                       base::Bind(&SocketTunnel::OnWritten,
-                                  base::Unretained(this),
-                                  drainable,
-                                  from,
-                                  to));
-    if (result != net::ERR_IO_PENDING)
-      OnWritten(drainable, from, to, result);
-  }
-
-  void OnWritten(scoped_refptr<net::DrainableIOBuffer> drainable,
-                 net::StreamSocket* from,
-                 net::StreamSocket* to,
-                 int result) {
-    --pending_writes_;
-    if (result < 0) {
-      SelfDestruct();
-      return;
-    }
-
-    drainable->DidConsume(result);
-    if (drainable->BytesRemaining() > 0) {
-      ++pending_writes_;
-      result = to->Write(drainable.get(),
-                         drainable->BytesRemaining(),
-                         base::Bind(&SocketTunnel::OnWritten,
-                                    base::Unretained(this),
-                                    drainable,
-                                    from,
-                                    to));
-      if (result != net::ERR_IO_PENDING)
-        OnWritten(drainable, from, to, result);
-      return;
-    }
-
-    if (pending_destruction_) {
-      SelfDestruct();
-      return;
-    }
-    Pump(from, to);
-  }
-
-  void SelfDestruct() {
-    // In case one of the connections closes, we could get here
-    // from another one due to Disconnect firing back on all
-    // read callbacks.
-    if (about_to_destroy_)
-      return;
-    if (pending_writes_ > 0) {
-      pending_destruction_ = true;
-      return;
-    }
-    delete this;
-  }
-
-  scoped_ptr<net::StreamSocket> remote_socket_;
-  scoped_ptr<net::StreamSocket> host_socket_;
-  scoped_ptr<net::HostResolver> host_resolver_;
-  net::AddressList address_list_;
-  int pending_writes_;
-  bool pending_destruction_;
-  CounterCallback callback_;
-  bool about_to_destroy_;
-};
-
-typedef DevToolsAdbBridge::RemoteBrowser::ParsedVersion ParsedVersion;
-
-static bool IsVersionLower(const ParsedVersion& left,
-                           const ParsedVersion& right) {
-  return std::lexicographical_compare(
-    left.begin(), left.end(), right.begin(), right.end());
-}
-
-static bool IsPortForwardingSupported(const ParsedVersion& version) {
-  return !version.empty() && version[0] >= kMinVersionPortForwarding;
-}
-
-static scoped_refptr<DevToolsAdbBridge::RemoteBrowser>
-FindBestBrowserForTethering(
-    const DevToolsAdbBridge::RemoteBrowsers browsers) {
-  scoped_refptr<DevToolsAdbBridge::RemoteBrowser> best_browser;
-  ParsedVersion newest_version;
-  for (DevToolsAdbBridge::RemoteBrowsers::const_iterator it = browsers.begin();
-       it != browsers.end(); ++it) {
-    scoped_refptr<DevToolsAdbBridge::RemoteBrowser> browser = *it;
-    ParsedVersion current_version = browser->GetParsedVersion();
-    if (browser->IsChrome() &&
-        IsPortForwardingSupported(current_version) &&
-        IsVersionLower(newest_version, current_version)) {
-      best_browser = browser;
-      newest_version = current_version;
-    }
-  }
-  return best_browser;
-}
-
-}  // namespace
-
-class PortForwardingController::Connection
-    : public DevToolsAdbBridge::AdbWebSocket::Delegate,
-      public base::RefCountedThreadSafe<
-          Connection,
-          content::BrowserThread::DeleteOnUIThread> {
- public:
-  Connection(Registry* registry,
-             scoped_refptr<DevToolsAdbBridge::RemoteDevice> device,
-             scoped_refptr<DevToolsAdbBridge::RemoteBrowser> browser,
-             const ForwardingMap& forwarding_map);
-
-  const PortStatusMap& GetPortStatusMap();
-
-  void UpdateForwardingMap(const ForwardingMap& new_forwarding_map);
-
-  void Shutdown();
-
- private:
-  friend struct content::BrowserThread::DeleteOnThread<
-      content::BrowserThread::UI>;
-  friend class base::DeleteHelper<Connection>;
-
-  virtual ~Connection();
-
-  typedef std::map<int, std::string> ForwardingMap;
-
-  typedef base::Callback<void(PortStatus)> CommandCallback;
-  typedef std::map<int, CommandCallback> CommandCallbackMap;
-
-  void SerializeChanges(const std::string& method,
-                        const ForwardingMap& old_map,
-                        const ForwardingMap& new_map);
-
-  void SendCommand(const std::string& method, int port);
-  bool ProcessResponse(const std::string& json);
-
-  void ProcessBindResponse(int port, PortStatus status);
-  void ProcessUnbindResponse(int port, PortStatus status);
-
-  void UpdateSocketCountOnHandlerThread(int port, int increment);
-  void UpdateSocketCount(int port, int increment);
-
-  // DevToolsAdbBridge::AdbWebSocket::Delegate implementation:
-  virtual void OnSocketOpened() OVERRIDE;
-  virtual void OnFrameRead(const std::string& message) OVERRIDE;
-  virtual void OnSocketClosed(bool closed_by_device) OVERRIDE;
-
-  PortForwardingController::Registry* registry_;
-  scoped_refptr<DevToolsAdbBridge::RemoteDevice> device_;
-  scoped_refptr<DevToolsAdbBridge::RemoteBrowser> browser_;
-  scoped_refptr<DevToolsAdbBridge::AdbWebSocket> web_socket_;
-  int command_id_;
-  bool connected_;
-  ForwardingMap forwarding_map_;
-  CommandCallbackMap pending_responses_;
-  PortStatusMap port_status_;
-
-  DISALLOW_COPY_AND_ASSIGN(Connection);
-};
-
-PortForwardingController::Connection::Connection(
-    Registry* registry,
-    scoped_refptr<DevToolsAdbBridge::RemoteDevice> device,
-    scoped_refptr<DevToolsAdbBridge::RemoteBrowser> browser,
-    const ForwardingMap& forwarding_map)
-    : registry_(registry),
-      device_(device),
-      browser_(browser),
-      command_id_(0),
-      connected_(false),
-      forwarding_map_(forwarding_map) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  (*registry_)[device_->serial()] = this;
-  web_socket_ = browser->CreateWebSocket(kDevToolsRemoteBrowserTarget, this);
-  AddRef();  // Balanced in OnSocketClosed();
-}
-
-void PortForwardingController::Connection::Shutdown() {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  registry_ = NULL;
-  // This will have no effect if the socket is not connected yet.
-  web_socket_->Disconnect();
-}
-
-PortForwardingController::Connection::~Connection() {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  if (registry_) {
-    DCHECK(registry_->find(device_->serial()) != registry_->end());
-    registry_->erase(device_->serial());
-  }
-}
-
-void PortForwardingController::Connection::UpdateForwardingMap(
-    const ForwardingMap& new_forwarding_map) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  if (connected_) {
-    SerializeChanges(kTetheringUnbind, new_forwarding_map, forwarding_map_);
-    SerializeChanges(kTetheringBind, forwarding_map_, new_forwarding_map);
-  }
-  forwarding_map_ = new_forwarding_map;
-}
-
-void PortForwardingController::Connection::SerializeChanges(
-    const std::string& method,
-    const ForwardingMap& old_map,
-    const ForwardingMap& new_map) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  for (ForwardingMap::const_iterator new_it(new_map.begin());
-      new_it != new_map.end(); ++new_it) {
-    int port = new_it->first;
-    const std::string& location = new_it->second;
-    ForwardingMap::const_iterator old_it = old_map.find(port);
-    if (old_it != old_map.end() && old_it->second == location)
-      continue;  // The port points to the same location in both configs, skip.
-
-    SendCommand(method, port);
-  }
-}
-
-void PortForwardingController::Connection::SendCommand(
-    const std::string& method, int port) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  base::DictionaryValue params;
-  params.SetInteger(kPortAttribute, port);
-  DevToolsProtocol::Command command(++command_id_, method, &params);
-
-  if (method == kTetheringBind) {
-    pending_responses_[command.id()] =
-        base::Bind(&Connection::ProcessBindResponse,
-                   base::Unretained(this), port);
-#if defined(DEBUG_DEVTOOLS)
-    port_status_[port] = kStatusConnecting;
-#endif  // defined(DEBUG_DEVTOOLS)
-  } else {
-    DCHECK_EQ(kTetheringUnbind, method);
-
-    PortStatusMap::iterator it = port_status_.find(port);
-    if (it != port_status_.end() && it->second == kStatusError) {
-      // The bind command failed on this port, do not attempt unbind.
-      port_status_.erase(it);
-      return;
-    }
-
-    pending_responses_[command.id()] =
-        base::Bind(&Connection::ProcessUnbindResponse,
-                   base::Unretained(this), port);
-#if defined(DEBUG_DEVTOOLS)
-    port_status_[port] = kStatusDisconnecting;
-#endif  // defined(DEBUG_DEVTOOLS)
-  }
-
-  web_socket_->SendFrame(command.Serialize());
-}
-
-bool PortForwardingController::Connection::ProcessResponse(
-    const std::string& message) {
-  scoped_ptr<DevToolsProtocol::Response> response(
-      DevToolsProtocol::ParseResponse(message));
-  if (!response)
-    return false;
-
-  CommandCallbackMap::iterator it = pending_responses_.find(response->id());
-  if (it == pending_responses_.end())
-    return false;
-
-  it->second.Run(response->error_code() ? kStatusError : kStatusOK);
-  pending_responses_.erase(it);
-  return true;
-}
-
-void PortForwardingController::Connection::ProcessBindResponse(
-    int port, PortStatus status) {
-  port_status_[port] = status;
-}
-
-void PortForwardingController::Connection::ProcessUnbindResponse(
-    int port, PortStatus status) {
-  PortStatusMap::iterator it = port_status_.find(port);
-  if (it == port_status_.end())
-    return;
-  if (status == kStatusError)
-    it->second = status;
-  else
-    port_status_.erase(it);
-}
-
-void PortForwardingController::Connection::UpdateSocketCountOnHandlerThread(
-    int port, int increment) {
-  BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
-     base::Bind(&Connection::UpdateSocketCount, this, port, increment));
-}
-
-void PortForwardingController::Connection::UpdateSocketCount(
-    int port, int increment) {
-#if defined(DEBUG_DEVTOOLS)
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  PortStatusMap::iterator it = port_status_.find(port);
-  if (it == port_status_.end())
-    return;
-  if (it->second < 0 || (it->second == 0 && increment < 0))
-    return;
-  it->second += increment;
-#endif  // defined(DEBUG_DEVTOOLS)
-}
-
-const PortForwardingController::PortStatusMap&
-PortForwardingController::Connection::GetPortStatusMap() {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  return port_status_;
-}
-
-void PortForwardingController::Connection::OnSocketOpened() {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  if (!registry_) {
-    // Socket was created after Shutdown was called. Disconnect immediately.
-    web_socket_->Disconnect();
-    return;
-  }
-  connected_ = true;
-  SerializeChanges(kTetheringBind, ForwardingMap(), forwarding_map_);
-}
-
-void PortForwardingController::Connection::OnSocketClosed(
-    bool closed_by_device) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  Release();  // Balanced in the constructor.
-}
-
-void PortForwardingController::Connection::OnFrameRead(
-    const std::string& message) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  if (ProcessResponse(message))
-    return;
-
-  scoped_ptr<DevToolsProtocol::Notification> notification(
-      DevToolsProtocol::ParseNotification(message));
-  if (!notification)
-    return;
-
-  if (notification->method() != kTetheringAccepted)
-    return;
-
-  base::DictionaryValue* params = notification->params();
-  if (!params)
-    return;
-
-  int port;
-  std::string connection_id;
-  if (!params->GetInteger(kPortAttribute, &port) ||
-      !params->GetString(kConnectionIdAttribute, &connection_id))
-    return;
-
-  std::map<int, std::string>::iterator it = forwarding_map_.find(port);
-  if (it == forwarding_map_.end())
-    return;
-
-  std::string location = it->second;
-  std::vector<std::string> tokens;
-  Tokenize(location, ":", &tokens);
-  int destination_port = 0;
-  if (tokens.size() != 2 || !base::StringToInt(tokens[1], &destination_port))
-    return;
-  std::string destination_host = tokens[0];
-
-  SocketTunnel::CounterCallback callback =
-      base::Bind(&Connection::UpdateSocketCountOnHandlerThread, this, port);
-
-  device_->OpenSocket(
-      connection_id.c_str(),
-      base::Bind(&SocketTunnel::StartTunnel,
-                 destination_host,
-                 destination_port,
-                 callback));
-}
-
-PortForwardingController::PortForwardingController(Profile* profile)
-    : profile_(profile),
-      pref_service_(profile->GetPrefs()),
-      listening_(false) {
-  pref_change_registrar_.Init(pref_service_);
-  base::Closure callback = base::Bind(
-      &PortForwardingController::OnPrefsChange, base::Unretained(this));
-  pref_change_registrar_.Add(prefs::kDevToolsPortForwardingEnabled, callback);
-  pref_change_registrar_.Add(prefs::kDevToolsPortForwardingConfig, callback);
-  OnPrefsChange();
-}
-
-PortForwardingController::~PortForwardingController() {
-  // Existing connection will not be shut down. This might be confusing for
-  // some users, but the opposite is more confusing.
-  StopListening();
-}
-
-void PortForwardingController::AddListener(Listener* listener) {
-  listeners_.push_back(listener);
-}
-
-void PortForwardingController::RemoveListener(Listener* listener) {
-  Listeners::iterator it =
-      std::find(listeners_.begin(), listeners_.end(), listener);
-  DCHECK(it != listeners_.end());
-  listeners_.erase(it);
-}
-
-void PortForwardingController::DeviceListChanged(
-    const DevToolsAdbBridge::RemoteDevices& devices) {
-  DevicesStatus status;
-
-  for (DevToolsAdbBridge::RemoteDevices::const_iterator it = devices.begin();
-       it != devices.end(); ++it) {
-    scoped_refptr<DevToolsAdbBridge::RemoteDevice> device = *it;
-    if (!device->is_connected())
-      continue;
-    Registry::iterator rit = registry_.find(device->serial());
-    if (rit == registry_.end()) {
-      scoped_refptr<DevToolsAdbBridge::RemoteBrowser> browser =
-          FindBestBrowserForTethering(device->browsers());
-      if (browser) {
-        new Connection(&registry_, device, browser, forwarding_map_);
-      }
-    } else {
-      status[device->serial()] = (*rit).second->GetPortStatusMap();
-    }
-  }
-
-  NotifyListeners(status);
-}
-
-void PortForwardingController::OnPrefsChange() {
-  forwarding_map_.clear();
-
-  if (pref_service_->GetBoolean(prefs::kDevToolsPortForwardingEnabled)) {
-    const base::DictionaryValue* dict =
-        pref_service_->GetDictionary(prefs::kDevToolsPortForwardingConfig);
-    for (base::DictionaryValue::Iterator it(*dict);
-         !it.IsAtEnd(); it.Advance()) {
-      int port_num;
-      std::string location;
-      if (base::StringToInt(it.key(), &port_num) &&
-          dict->GetString(it.key(), &location))
-        forwarding_map_[port_num] = location;
-    }
-  }
-
-  if (!forwarding_map_.empty()) {
-    StartListening();
-    UpdateConnections();
-  } else {
-    StopListening();
-    ShutdownConnections();
-    NotifyListeners(DevicesStatus());
-  }
-}
-
-void PortForwardingController::StartListening() {
-  if (listening_)
-    return;
-  listening_ = true;
-  DevToolsAdbBridge* adb_bridge =
-      DevToolsAdbBridge::Factory::GetForProfile(profile_);
-  if (adb_bridge)
-    adb_bridge->AddDeviceListListener(this);
-
-}
-
-void PortForwardingController::StopListening() {
-  if (!listening_)
-    return;
-  listening_ = false;
-  DevToolsAdbBridge* adb_bridge =
-      DevToolsAdbBridge::Factory::GetForProfile(profile_);
-  if (adb_bridge)
-    adb_bridge->RemoveDeviceListListener(this);
-}
-
-void PortForwardingController::UpdateConnections() {
-  for (Registry::iterator it = registry_.begin(); it != registry_.end(); ++it)
-    it->second->UpdateForwardingMap(forwarding_map_);
-}
-
-void PortForwardingController::ShutdownConnections() {
-  for (Registry::iterator it = registry_.begin(); it != registry_.end(); ++it)
-    it->second->Shutdown();
-  registry_.clear();
-}
-
-void PortForwardingController::NotifyListeners(
-    const DevicesStatus& status) const {
-  Listeners copy(listeners_);  // Iterate over copy.
-  for (Listeners::const_iterator it = copy.begin(); it != copy.end(); ++it)
-    (*it)->PortStatusChanged(status);
-}
-
-// static
-PortForwardingController::Factory*
-PortForwardingController::Factory::GetInstance() {
-  return Singleton<PortForwardingController::Factory>::get();
-}
-
-// static
-PortForwardingController* PortForwardingController::Factory::GetForProfile(
-    Profile* profile) {
-  return static_cast<PortForwardingController*>(GetInstance()->
-          GetServiceForBrowserContext(profile, true));
-}
-
-PortForwardingController::Factory::Factory()
-    : BrowserContextKeyedServiceFactory(
-          "PortForwardingController",
-          BrowserContextDependencyManager::GetInstance()) {}
-
-PortForwardingController::Factory::~Factory() {}
-
-KeyedService* PortForwardingController::Factory::BuildServiceInstanceFor(
-    content::BrowserContext* context) const {
-  Profile* profile = Profile::FromBrowserContext(context);
-  return new PortForwardingController(profile);
-}
diff --git a/chrome/browser/devtools/port_forwarding_controller.h b/chrome/browser/devtools/port_forwarding_controller.h
deleted file mode 100644
index fb51d0c..0000000
--- a/chrome/browser/devtools/port_forwarding_controller.h
+++ /dev/null
@@ -1,95 +0,0 @@
-// Copyright 2013 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 CHROME_BROWSER_DEVTOOLS_PORT_FORWARDING_CONTROLLER_H_
-#define CHROME_BROWSER_DEVTOOLS_PORT_FORWARDING_CONTROLLER_H_
-
-#include <map>
-
-#include "base/prefs/pref_change_registrar.h"
-#include "chrome/browser/devtools/devtools_adb_bridge.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
-#include "components/keyed_service/core/keyed_service.h"
-
-class PrefService;
-class Profile;
-
-class PortForwardingController : private KeyedService,
-                                 private DevToolsAdbBridge::DeviceListListener {
- public:
-  explicit PortForwardingController(Profile* profile);
-
-  virtual ~PortForwardingController();
-
-  class Factory : public BrowserContextKeyedServiceFactory {
-   public:
-    // Returns singleton instance of Factory.
-    static Factory* GetInstance();
-
-    // Returns PortForwardingController associated with |profile|.
-    static PortForwardingController* GetForProfile(Profile* profile);
-
-   private:
-    friend struct DefaultSingletonTraits<Factory>;
-
-    Factory();
-    virtual ~Factory();
-
-    // BrowserContextKeyedServiceFactory overrides:
-    virtual KeyedService* BuildServiceInstanceFor(
-        content::BrowserContext* context) const OVERRIDE;
-    DISALLOW_COPY_AND_ASSIGN(Factory);
-  };
-
-  typedef int PortStatus;
-  typedef std::map<int, PortStatus> PortStatusMap;
-  typedef std::map<std::string, PortStatusMap> DevicesStatus;
-
-  class Listener {
-   public:
-    typedef PortForwardingController::PortStatusMap PortStatusMap;
-    typedef PortForwardingController::DevicesStatus DevicesStatus;
-
-    virtual void PortStatusChanged(const DevicesStatus&) = 0;
-   protected:
-    virtual ~Listener() {}
-  };
-
-  void AddListener(Listener* listener);
-  void RemoveListener(Listener* listener);
-
- private:
-  class Connection;
-  typedef std::map<std::string, Connection*> Registry;
-
-  // DevToolsAdbBridge::Listener implementation.
-  virtual void DeviceListChanged(
-      const DevToolsAdbBridge::RemoteDevices& devices) OVERRIDE;
-
-  void OnPrefsChange();
-
-  void StartListening();
-  void StopListening();
-
-  void UpdateConnections();
-  void ShutdownConnections();
-
-  void NotifyListeners(const DevicesStatus& status) const;
-
-  Profile* profile_;
-  PrefService* pref_service_;
-  PrefChangeRegistrar pref_change_registrar_;
-  Registry registry_;
-
-  typedef std::vector<Listener*> Listeners;
-  Listeners listeners_;
-  bool listening_;
-
-  typedef std::map<int, std::string> ForwardingMap;
-  ForwardingMap forwarding_map_;
-
-  DISALLOW_COPY_AND_ASSIGN(PortForwardingController);
-};
-
-#endif  // CHROME_BROWSER_DEVTOOLS_PORT_FORWARDING_CONTROLLER_H_
diff --git a/chrome/browser/dom_distiller/dom_distiller_viewer_source_browsertest.cc b/chrome/browser/dom_distiller/dom_distiller_viewer_source_browsertest.cc
index 3489f66..c6444d8 100644
--- a/chrome/browser/dom_distiller/dom_distiller_viewer_source_browsertest.cc
+++ b/chrome/browser/dom_distiller/dom_distiller_viewer_source_browsertest.cc
@@ -154,7 +154,7 @@
 // are enabled when the article exists in the database.
 // Flakiness: crbug.com/356866
 IN_PROC_BROWSER_TEST_F(DomDistillerViewerSourceBrowserTest,
-                       FLAKY_NoWebUIBindingsArticleExists) {
+                       DISABLED_NoWebUIBindingsArticleExists) {
   // Ensure there is one item in the database, which will trigger distillation.
   const ArticleEntry entry = CreateEntry("DISTILLED", "http://example.com/1");
   AddEntry(entry, database_model_);
@@ -166,8 +166,9 @@
 
 // The DomDistillerViewerSource renders untrusted content, so ensure no bindings
 // are enabled when the article is not found.
+// Flakiness: crbug.com/356866
 IN_PROC_BROWSER_TEST_F(DomDistillerViewerSourceBrowserTest,
-                       NoWebUIBindingsArticleNotFound) {
+                       DISABLED_NoWebUIBindingsArticleNotFound) {
   // The article does not exist, so assume no distillation will happen.
   expect_distillation_ = false;
   const GURL url(std::string(chrome::kDomDistillerScheme) + "://" +
@@ -179,7 +180,7 @@
 // are enabled when requesting to view an arbitrary URL.
 // Flakiness: crbug.com/356866
 IN_PROC_BROWSER_TEST_F(DomDistillerViewerSourceBrowserTest,
-                       FLAKY_NoWebUIBindingsViewUrl) {
+                       DISABLED_NoWebUIBindingsViewUrl) {
   // We should expect distillation for any valid URL.
   expect_distillation_ = true;
   GURL view_url("http://www.example.com/1");
diff --git a/chrome/browser/download/chrome_download_manager_delegate.cc b/chrome/browser/download/chrome_download_manager_delegate.cc
index dd3b42a..64c93d3 100644
--- a/chrome/browser/download/chrome_download_manager_delegate.cc
+++ b/chrome/browser/download/chrome_download_manager_delegate.cc
@@ -35,6 +35,7 @@
 #include "chrome/browser/download/save_package_file_picker.h"
 #include "chrome/browser/extensions/api/downloads/downloads_api.h"
 #include "chrome/browser/extensions/crx_installer.h"
+#include "chrome/browser/extensions/webstore_installer.h"
 #include "chrome/browser/platform_util.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/safe_browsing/safe_browsing_service.h"
@@ -369,7 +370,8 @@
 
 bool ChromeDownloadManagerDelegate::ShouldOpenDownload(
     DownloadItem* item, const content::DownloadOpenDelayedCallback& callback) {
-  if (download_crx_util::IsExtensionDownload(*item)) {
+  if (download_crx_util::IsExtensionDownload(*item) &&
+      !extensions::WebstoreInstaller::GetAssociatedApproval(*item)) {
     scoped_refptr<extensions::CrxInstaller> crx_installer =
         download_crx_util::OpenChromeExtension(profile_, *item);
 
diff --git a/chrome/browser/download/download_browsertest.cc b/chrome/browser/download/download_browsertest.cc
index 8eb596f..17bcd36 100644
--- a/chrome/browser/download/download_browsertest.cc
+++ b/chrome/browser/download/download_browsertest.cc
@@ -43,7 +43,6 @@
 #include "chrome/browser/history/history_service.h"
 #include "chrome/browser/history/history_service_factory.h"
 #include "chrome/browser/infobars/confirm_infobar_delegate.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/net/url_request_mock_util.h"
 #include "chrome/browser/profiles/profile.h"
@@ -63,6 +62,7 @@
 #include "chrome/test/base/in_process_browser_test.h"
 #include "chrome/test/base/test_switches.h"
 #include "chrome/test/base/ui_test_utils.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/download_interrupt_reasons.h"
 #include "content/public/browser/download_item.h"
 #include "content/public/browser/download_manager.h"
@@ -2796,7 +2796,7 @@
   ASSERT_EQ(1u, infobar_service->infobar_count());
 
   // Get the infobar at index 0.
-  InfoBar* infobar = infobar_service->infobar_at(0);
+  infobars::InfoBar* infobar = infobar_service->infobar_at(0);
   ConfirmInfoBarDelegate* confirm_infobar =
       infobar->delegate()->AsConfirmInfoBarDelegate();
   ASSERT_TRUE(confirm_infobar != NULL);
diff --git a/chrome/browser/download/download_crx_util.cc b/chrome/browser/download/download_crx_util.cc
index bea0aaa..441c82b 100644
--- a/chrome/browser/download/download_crx_util.cc
+++ b/chrome/browser/download/download_crx_util.cc
@@ -69,11 +69,9 @@
   mock_install_prompt_for_testing = mock_prompt.release();
 }
 
-scoped_refptr<extensions::CrxInstaller> OpenChromeExtension(
+scoped_refptr<extensions::CrxInstaller> CreateCrxInstaller(
     Profile* profile,
-    const DownloadItem& download_item) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-
+    const content::DownloadItem& download_item) {
   ExtensionService* service = extensions::ExtensionSystem::Get(profile)->
       extension_service();
   CHECK(service);
@@ -87,6 +85,19 @@
   installer->set_error_on_unsupported_requirements(true);
   installer->set_delete_source(true);
   installer->set_install_cause(extension_misc::INSTALL_CAUSE_USER_DOWNLOAD);
+  installer->set_original_mime_type(download_item.GetOriginalMimeType());
+  installer->set_apps_require_extension_mime_type(true);
+
+  return installer;
+}
+
+scoped_refptr<extensions::CrxInstaller> OpenChromeExtension(
+    Profile* profile,
+    const DownloadItem& download_item) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+
+  scoped_refptr<extensions::CrxInstaller> installer(
+      CreateCrxInstaller(profile, download_item));
 
   if (OffStoreInstallAllowedByPrefs(profile, download_item)) {
     installer->set_off_store_install_allow_reason(
@@ -98,15 +109,7 @@
     installer->InstallUserScript(download_item.GetFullPath(),
                                  download_item.GetURL());
   } else {
-    bool is_gallery_download =
-        WebstoreInstaller::GetAssociatedApproval(download_item) != NULL;
-    installer->set_original_mime_type(download_item.GetOriginalMimeType());
-    installer->set_apps_require_extension_mime_type(true);
-    installer->set_download_url(download_item.GetURL());
-    installer->set_is_gallery_install(is_gallery_download);
-    if (is_gallery_download)
-      installer->set_original_download_url(download_item.GetOriginalUrl());
-    installer->set_allow_silent_install(is_gallery_download);
+    DCHECK(!WebstoreInstaller::GetAssociatedApproval(download_item));
     installer->InstallCrx(download_item.GetFullPath());
   }
 
diff --git a/chrome/browser/download/download_crx_util.h b/chrome/browser/download/download_crx_util.h
index 1807a59..cc99c19 100644
--- a/chrome/browser/download/download_crx_util.h
+++ b/chrome/browser/download/download_crx_util.h
@@ -30,6 +30,11 @@
 void SetMockInstallPromptForTesting(
     scoped_ptr<ExtensionInstallPrompt> mock_prompt);
 
+// Create and pre-configure a CrxInstaller for a given |download_item|.
+scoped_refptr<extensions::CrxInstaller> CreateCrxInstaller(
+    Profile* profile,
+    const content::DownloadItem& download_item);
+
 // Start installing a downloaded item item as a CRX (extension, theme, app,
 // ...).  The installer does work on the file thread, so the installation
 // is not complete when this function returns.  Returns the object managing
diff --git a/chrome/browser/download/download_crx_util_android.cc b/chrome/browser/download/download_crx_util_android.cc
index 4b068a8..76c9d81 100644
--- a/chrome/browser/download/download_crx_util_android.cc
+++ b/chrome/browser/download/download_crx_util_android.cc
@@ -14,6 +14,15 @@
 
 namespace download_crx_util {
 
+scoped_refptr<extensions::CrxInstaller> CreateCrxInstaller(
+    Profile* profile,
+    const content::DownloadItem& download_item) {
+  NOTIMPLEMENTED() << "CrxInstaller not implemented on Android";
+  scoped_refptr<extensions::CrxInstaller> installer(
+      extensions::CrxInstaller::CreateSilent(NULL));
+  return installer;
+}
+
 void SetMockInstallPromptForTesting(ExtensionInstallPrompt* mock_prompt) {
   NOTIMPLEMENTED();
 }
diff --git a/chrome/browser/download/download_request_infobar_delegate.cc b/chrome/browser/download/download_request_infobar_delegate.cc
index 7fdf95e..ced71ad 100644
--- a/chrome/browser/download/download_request_infobar_delegate.cc
+++ b/chrome/browser/download/download_request_infobar_delegate.cc
@@ -4,8 +4,8 @@
 
 #include "chrome/browser/download/download_request_infobar_delegate.h"
 
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
+#include "components/infobars/core/infobar.h"
 #include "grit/generated_resources.h"
 #include "grit/theme_resources.h"
 #include "ui/base/l10n/l10n_util.h"
diff --git a/chrome/browser/download/download_status_updater_win.cc b/chrome/browser/download/download_status_updater_win.cc
index f63808a..35d82b2 100644
--- a/chrome/browser/download/download_status_updater_win.cc
+++ b/chrome/browser/download/download_status_updater_win.cc
@@ -7,30 +7,18 @@
 #include <shobjidl.h>
 #include <string>
 
-#include "base/files/file_path.h"
 #include "base/logging.h"
-#include "base/stl_util.h"
-#include "base/strings/string_number_conversions.h"
-#include "base/win/metro.h"
 #include "base/win/scoped_comptr.h"
 #include "base/win/windows_version.h"
-#include "chrome/browser/platform_util.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_iterator.h"
 #include "chrome/browser/ui/browser_window.h"
-#include "content/public/browser/browser_context.h"
-#include "content/public/browser/browser_thread.h"
 #include "grit/generated_resources.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/views/win/hwnd_util.h"
-#include "url/gurl.h"
-#include "win8/util/win8_util.h"
 
 namespace {
 
-const char kDownloadNotificationPrefix[] = "DownloadNotification";
-int g_next_notification_id = 0;
-
 void UpdateTaskbarProgressBar(int download_count,
                               bool progress_known,
                               float progress) {
@@ -68,18 +56,6 @@
   }
 }
 
-void MetroDownloadNotificationClickedHandler(const wchar_t* download_path) {
-  // Metro chrome will invoke these handlers on the metro thread.
-  DCHECK(!content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
-
-  // Ensure that we invoke the function to display the downloaded item on the
-  // UI thread.
-  content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE,
-                                   base::Bind(platform_util::ShowItemInFolder,
-                                              static_cast<Profile*>(NULL),
-                                              base::FilePath(download_path)));
-}
-
 }  // namespace
 
 void DownloadStatusUpdater::UpdateAppIconDownloadProgress(
@@ -90,60 +66,4 @@
   int download_count = 0;
   bool progress_known = GetProgress(&progress, &download_count);
   UpdateTaskbarProgressBar(download_count, progress_known, progress);
-
-  // Fire notifications when downloads complete.
-  if (!win8::IsSingleWindowMetroMode())
-    return;
-
-  if (download->GetState() != content::DownloadItem::COMPLETE)
-    return;
-
-  if (download->GetOpenWhenComplete() ||
-      download->ShouldOpenFileBasedOnExtension() ||
-      download->IsTemporary() ||
-      download->GetAutoOpened())
-    return;
-
-  // Don't display the Windows8 metro notifications for an incognito download.
-  if (download->GetBrowserContext() &&
-      download->GetBrowserContext()->IsOffTheRecord())
-    return;
-
-  // Don't display the Windows 8 metro notifications if we are in the
-  // foreground.
-  HWND foreground_window = ::GetForegroundWindow();
-  if (::IsWindow(foreground_window)) {
-    DWORD process_id = 0;
-    ::GetWindowThreadProcessId(foreground_window, &process_id);
-    if (process_id == ::GetCurrentProcessId())
-      return;
-  }
-
-  // In Windows 8 metro mode display a metro style notification which
-  // informs the user that the download is complete.
-  HMODULE metro = base::win::GetMetroModule();
-  base::win::MetroNotification display_notification =
-      reinterpret_cast<base::win::MetroNotification>(
-          ::GetProcAddress(metro, "DisplayNotification"));
-  DCHECK(display_notification);
-  if (display_notification) {
-    base::string16 title = l10n_util::GetStringUTF16(
-        IDS_METRO_DOWNLOAD_COMPLETE_NOTIFICATION_TITLE);
-    base::string16 body = l10n_util::GetStringUTF16(
-        IDS_METRO_DOWNLOAD_COMPLETE_NOTIFICATION);
-
-    // Dummy notification id. Every metro style notification needs a
-    // unique notification id.
-    std::string notification_id = kDownloadNotificationPrefix;
-    notification_id += base::IntToString(g_next_notification_id++);
-
-    display_notification(download->GetURL().spec().c_str(),
-                         "",
-                         title.c_str(),
-                         body.c_str(),
-                         L"",
-                         notification_id.c_str(),
-                         MetroDownloadNotificationClickedHandler,
-                         download->GetTargetFilePath().value().c_str());
-  }
 }
diff --git a/chrome/browser/download/download_target_determiner.cc b/chrome/browser/download/download_target_determiner.cc
index 7d2f2c5..bc86f14 100644
--- a/chrome/browser/download/download_target_determiner.cc
+++ b/chrome/browser/download/download_target_determiner.cc
@@ -257,8 +257,10 @@
     net::GenerateSafeFileName(std::string(), false, &new_path);
     virtual_path_ = new_path;
     create_target_directory_ = true;
-    conflict_action_ = conflict_action;
   }
+  // An extension may set conflictAction without setting filename.
+  if (conflict_action != DownloadPathReservationTracker::UNIQUIFY)
+    conflict_action_ = conflict_action;
 
   DoLoop();
 }
diff --git a/chrome/browser/drive/drive_api_service.cc b/chrome/browser/drive/drive_api_service.cc
index dd464d5..017dc1a 100644
--- a/chrome/browser/drive/drive_api_service.cc
+++ b/chrome/browser/drive/drive_api_service.cc
@@ -292,7 +292,7 @@
       url_request_context_getter_(url_request_context_getter),
       blocking_task_runner_(blocking_task_runner),
       url_generator_(base_url, base_download_url),
-      wapi_url_generator_(wapi_base_url, base_download_url),
+      wapi_url_generator_(wapi_base_url),
       custom_user_agent_(custom_user_agent) {
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
 }
diff --git a/chrome/browser/drive/drive_api_util.cc b/chrome/browser/drive/drive_api_util.cc
index 485c4f6..b7b350a 100644
--- a/chrome/browser/drive/drive_api_util.cc
+++ b/chrome/browser/drive/drive_api_util.cc
@@ -25,17 +25,6 @@
 namespace util {
 namespace {
 
-// Google Apps MIME types:
-const char kGoogleDocumentMimeType[] = "application/vnd.google-apps.document";
-const char kGoogleDrawingMimeType[] = "application/vnd.google-apps.drawing";
-const char kGooglePresentationMimeType[] =
-    "application/vnd.google-apps.presentation";
-const char kGoogleSpreadsheetMimeType[] =
-    "application/vnd.google-apps.spreadsheet";
-const char kGoogleTableMimeType[] = "application/vnd.google-apps.table";
-const char kGoogleFormMimeType[] = "application/vnd.google-apps.form";
-const char kDriveFolderMimeType[] = "application/vnd.google-apps.folder";
-
 std::string GetMimeTypeFromEntryKind(google_apis::DriveEntryKind kind) {
   switch (kind) {
     case google_apis::ENTRY_KIND_DOCUMENT:
@@ -55,91 +44,6 @@
   }
 }
 
-ScopedVector<std::string> CopyScopedVectorString(
-    const ScopedVector<std::string>& source) {
-  ScopedVector<std::string> result;
-  result.reserve(source.size());
-  for (size_t i = 0; i < source.size(); ++i)
-    result.push_back(new std::string(*source[i]));
-
-  return result.Pass();
-}
-
-// Converts AppIcon (of GData WAPI) to DriveAppIcon.
-scoped_ptr<google_apis::DriveAppIcon>
-ConvertAppIconToDriveAppIcon(const google_apis::AppIcon& app_icon) {
-  scoped_ptr<google_apis::DriveAppIcon> resource(
-      new google_apis::DriveAppIcon);
-  switch (app_icon.category()) {
-    case google_apis::AppIcon::ICON_UNKNOWN:
-      resource->set_category(google_apis::DriveAppIcon::UNKNOWN);
-      break;
-    case google_apis::AppIcon::ICON_DOCUMENT:
-      resource->set_category(google_apis::DriveAppIcon::DOCUMENT);
-      break;
-    case google_apis::AppIcon::ICON_APPLICATION:
-      resource->set_category(google_apis::DriveAppIcon::APPLICATION);
-      break;
-    case google_apis::AppIcon::ICON_SHARED_DOCUMENT:
-      resource->set_category(google_apis::DriveAppIcon::SHARED_DOCUMENT);
-      break;
-    default:
-      NOTREACHED();
-  }
-
-  resource->set_icon_side_length(app_icon.icon_side_length());
-  resource->set_icon_url(app_icon.GetIconURL());
-  return resource.Pass();
-}
-
-// Converts InstalledApp to AppResource.
-scoped_ptr<google_apis::AppResource>
-ConvertInstalledAppToAppResource(
-    const google_apis::InstalledApp& installed_app) {
-  scoped_ptr<google_apis::AppResource> resource(new google_apis::AppResource);
-  resource->set_application_id(installed_app.app_id());
-  resource->set_name(installed_app.app_name());
-  resource->set_object_type(installed_app.object_type());
-  resource->set_supports_create(installed_app.supports_create());
-
-  {
-    ScopedVector<std::string> primary_mimetypes(
-        CopyScopedVectorString(installed_app.primary_mimetypes()));
-    resource->set_primary_mimetypes(primary_mimetypes.Pass());
-  }
-  {
-    ScopedVector<std::string> secondary_mimetypes(
-        CopyScopedVectorString(installed_app.secondary_mimetypes()));
-    resource->set_secondary_mimetypes(secondary_mimetypes.Pass());
-  }
-  {
-    ScopedVector<std::string> primary_file_extensions(
-        CopyScopedVectorString(installed_app.primary_extensions()));
-    resource->set_primary_file_extensions(primary_file_extensions.Pass());
-  }
-  {
-    ScopedVector<std::string> secondary_file_extensions(
-        CopyScopedVectorString(installed_app.secondary_extensions()));
-    resource->set_secondary_file_extensions(secondary_file_extensions.Pass());
-  }
-
-  {
-    const ScopedVector<google_apis::AppIcon>& app_icons =
-        installed_app.app_icons();
-    ScopedVector<google_apis::DriveAppIcon> icons;
-    icons.reserve(app_icons.size());
-    for (size_t i = 0; i < app_icons.size(); ++i) {
-      icons.push_back(ConvertAppIconToDriveAppIcon(*app_icons[i]).release());
-    }
-    resource->set_icons(icons.Pass());
-  }
-
-  // supports_import, installed and authorized are not supported in
-  // InstalledApp.
-
-  return resource.Pass();
-}
-
 // Returns the argument string.
 std::string Identity(const std::string& resource_id) { return resource_id; }
 
@@ -270,40 +174,6 @@
   callback.Run(error, share_link ? share_link->href() : GURL());
 }
 
-scoped_ptr<google_apis::AboutResource>
-ConvertAccountMetadataToAboutResource(
-    const google_apis::AccountMetadata& account_metadata,
-    const std::string& root_resource_id) {
-  scoped_ptr<google_apis::AboutResource> resource(
-      new google_apis::AboutResource);
-  resource->set_largest_change_id(account_metadata.largest_changestamp());
-  resource->set_quota_bytes_total(account_metadata.quota_bytes_total());
-  resource->set_quota_bytes_used(account_metadata.quota_bytes_used());
-  resource->set_root_folder_id(root_resource_id);
-  return resource.Pass();
-}
-
-scoped_ptr<google_apis::AppList>
-ConvertAccountMetadataToAppList(
-    const google_apis::AccountMetadata& account_metadata) {
-  scoped_ptr<google_apis::AppList> resource(new google_apis::AppList);
-
-  const ScopedVector<google_apis::InstalledApp>& installed_apps =
-      account_metadata.installed_apps();
-  ScopedVector<google_apis::AppResource> app_resources;
-  app_resources.reserve(installed_apps.size());
-  for (size_t i = 0; i < installed_apps.size(); ++i) {
-    app_resources.push_back(
-        ConvertInstalledAppToAppResource(*installed_apps[i]).release());
-  }
-  resource->set_items(app_resources.Pass());
-
-  // etag is not supported in AccountMetadata.
-
-  return resource.Pass();
-}
-
-
 scoped_ptr<google_apis::FileResource> ConvertResourceEntryToFileResource(
     const google_apis::ResourceEntry& entry) {
   scoped_ptr<google_apis::FileResource> file(new google_apis::FileResource);
diff --git a/chrome/browser/drive/drive_api_util.h b/chrome/browser/drive/drive_api_util.h
index 324a46c..a574320 100644
--- a/chrome/browser/drive/drive_api_util.h
+++ b/chrome/browser/drive/drive_api_util.h
@@ -21,8 +21,6 @@
 }  // namespace base
 
 namespace google_apis {
-class AccountMetadata;
-class AppIcon;
 class AppList;
 class AppResource;
 class ChangeList;
@@ -30,7 +28,6 @@
 class DriveAppIcon;
 class FileList;
 class FileResource;
-class InstalledApp;
 class ResourceEntry;
 class ResourceList;
 }  // namespace google_apis
@@ -38,6 +35,17 @@
 namespace drive {
 namespace util {
 
+// Google Apps MIME types:
+const char kGoogleDocumentMimeType[] = "application/vnd.google-apps.document";
+const char kGoogleDrawingMimeType[] = "application/vnd.google-apps.drawing";
+const char kGooglePresentationMimeType[] =
+    "application/vnd.google-apps.presentation";
+const char kGoogleSpreadsheetMimeType[] =
+    "application/vnd.google-apps.spreadsheet";
+const char kGoogleTableMimeType[] = "application/vnd.google-apps.table";
+const char kGoogleFormMimeType[] = "application/vnd.google-apps.form";
+const char kDriveFolderMimeType[] = "application/vnd.google-apps.folder";
+
 // Escapes ' to \' in the |str|. This is designed to use for string value of
 // search parameter on Drive API v2.
 // See also: https://developers.google.com/drive/search-parameters
@@ -80,19 +88,6 @@
                          google_apis::GDataErrorCode error,
                          scoped_ptr<base::Value> value);
 
-// Converts AccountMetadata to AboutResource.
-// Here, |root_resource_id| is also needed, as it is contained by AboutResource
-// but not by AccountMetadata.
-scoped_ptr<google_apis::AboutResource>
-ConvertAccountMetadataToAboutResource(
-    const google_apis::AccountMetadata& account_metadata,
-    const std::string& root_resource_id);
-
-// Converts AccountMetadata to AppList.
-scoped_ptr<google_apis::AppList>
-ConvertAccountMetadataToAppList(
-    const google_apis::AccountMetadata& account_metadata);
-
 // Converts ResourceEntry to FileResource.
 scoped_ptr<google_apis::FileResource>
 ConvertResourceEntryToFileResource(const google_apis::ResourceEntry& entry);
diff --git a/chrome/browser/drive/drive_api_util_unittest.cc b/chrome/browser/drive/drive_api_util_unittest.cc
index af405f3..7a72db7 100644
--- a/chrome/browser/drive/drive_api_util_unittest.cc
+++ b/chrome/browser/drive/drive_api_util_unittest.cc
@@ -79,121 +79,6 @@
   EXPECT_EQ(resource_id, CanonicalizeResourceId("externalapp:" + resource_id));
 }
 
-TEST(FileSystemUtilTest, ConvertAccountMetadataToAboutResource) {
-  google_apis::AccountMetadata account_metadata;
-  // Set up AccountMetadata instance.
-  {
-    account_metadata.set_quota_bytes_total(10000);
-    account_metadata.set_quota_bytes_used(1000);
-    account_metadata.set_largest_changestamp(100);
-  }
-
-  scoped_ptr<google_apis::AboutResource> about_resource(
-      ConvertAccountMetadataToAboutResource(
-          account_metadata, "dummy_root_id"));
-
-  EXPECT_EQ(10000, about_resource->quota_bytes_total());
-  EXPECT_EQ(1000, about_resource->quota_bytes_used());
-  EXPECT_EQ(100, about_resource->largest_change_id());
-  EXPECT_EQ("dummy_root_id", about_resource->root_folder_id());
-}
-
-TEST(FileSystemUtilTest, ConvertAccountMetadataToAppList) {
-  google_apis::AccountMetadata account_metadata;
-  // Set up AccountMetadata instance.
-  {
-    ScopedVector<google_apis::InstalledApp> installed_apps;
-    scoped_ptr<google_apis::InstalledApp> installed_app(
-        new google_apis::InstalledApp);
-    installed_app->set_app_id("app_id");
-    installed_app->set_app_name("name");
-    installed_app->set_object_type("object_type");
-    installed_app->set_supports_create(true);
-
-    {
-      ScopedVector<google_apis::Link> links;
-      scoped_ptr<google_apis::Link> link(new google_apis::Link);
-      link->set_type(google_apis::Link::LINK_PRODUCT);
-      link->set_href(GURL("http://product/url"));
-      links.push_back(link.release());
-      installed_app->set_links(links.Pass());
-    }
-    {
-      ScopedVector<std::string> primary_mimetypes;
-      primary_mimetypes.push_back(new std::string("primary_mimetype"));
-      installed_app->set_primary_mimetypes(primary_mimetypes.Pass());
-    }
-    {
-      ScopedVector<std::string> secondary_mimetypes;
-      secondary_mimetypes.push_back(new std::string("secondary_mimetype"));
-      installed_app->set_secondary_mimetypes(secondary_mimetypes.Pass());
-    }
-    {
-      ScopedVector<std::string> primary_extensions;
-      primary_extensions.push_back(new std::string("primary_extension"));
-      installed_app->set_primary_extensions(primary_extensions.Pass());
-    }
-    {
-      ScopedVector<std::string> secondary_extensions;
-      secondary_extensions.push_back(new std::string("secondary_extension"));
-      installed_app->set_secondary_extensions(secondary_extensions.Pass());
-    }
-    {
-      ScopedVector<google_apis::AppIcon> app_icons;
-      scoped_ptr<google_apis::AppIcon> app_icon(new google_apis::AppIcon);
-      app_icon->set_category(google_apis::AppIcon::ICON_DOCUMENT);
-      app_icon->set_icon_side_length(10);
-      {
-        ScopedVector<google_apis::Link> links;
-        scoped_ptr<google_apis::Link> link(new google_apis::Link);
-        link->set_type(google_apis::Link::LINK_ICON);
-        link->set_href(GURL("http://icon/url"));
-        links.push_back(link.release());
-        app_icon->set_links(links.Pass());
-      }
-      app_icons.push_back(app_icon.release());
-      installed_app->set_app_icons(app_icons.Pass());
-    }
-
-    installed_apps.push_back(installed_app.release());
-    account_metadata.set_installed_apps(installed_apps.Pass());
-  }
-
-  scoped_ptr<google_apis::AppList> app_list(
-      ConvertAccountMetadataToAppList(account_metadata));
-  const ScopedVector<google_apis::AppResource>& items = app_list->items();
-  ASSERT_EQ(1U, items.size());
-
-  const google_apis::AppResource& app_resource = *items[0];
-  EXPECT_EQ("app_id", app_resource.application_id());
-  EXPECT_EQ("name", app_resource.name());
-  EXPECT_EQ("object_type", app_resource.object_type());
-  EXPECT_TRUE(app_resource.supports_create());
-  const ScopedVector<std::string>& primary_mimetypes =
-      app_resource.primary_mimetypes();
-  ASSERT_EQ(1U, primary_mimetypes.size());
-  EXPECT_EQ("primary_mimetype", *primary_mimetypes[0]);
-  const ScopedVector<std::string>& secondary_mimetypes =
-      app_resource.secondary_mimetypes();
-  ASSERT_EQ(1U, secondary_mimetypes.size());
-  EXPECT_EQ("secondary_mimetype", *secondary_mimetypes[0]);
-  const ScopedVector<std::string>& primary_file_extensions =
-      app_resource.primary_file_extensions();
-  ASSERT_EQ(1U, primary_file_extensions.size());
-  EXPECT_EQ("primary_extension", *primary_file_extensions[0]);
-  const ScopedVector<std::string>& secondary_file_extensions =
-      app_resource.secondary_file_extensions();
-  ASSERT_EQ(1U, secondary_file_extensions.size());
-  EXPECT_EQ("secondary_extension", *secondary_file_extensions[0]);
-
-  const ScopedVector<google_apis::DriveAppIcon>& icons = app_resource.icons();
-  ASSERT_EQ(1U, icons.size());
-  const google_apis::DriveAppIcon& icon = *icons[0];
-  EXPECT_EQ(google_apis::DriveAppIcon::DOCUMENT, icon.category());
-  EXPECT_EQ(10, icon.icon_side_length());
-  EXPECT_EQ("http://icon/url", icon.icon_url().spec());
-}
-
 TEST(FileSystemUtilTest, ConvertFileResourceToResource_Parents) {
   google_apis::FileResource file_resource;
 
diff --git a/chrome/browser/drive/drive_app_registry.cc b/chrome/browser/drive/drive_app_registry.cc
index 43072bb..1fc08b2 100644
--- a/chrome/browser/drive/drive_app_registry.cc
+++ b/chrome/browser/drive/drive_app_registry.cc
@@ -58,8 +58,8 @@
 DriveAppInfo::DriveAppInfo(
     const std::string& app_id,
     const std::string& product_id,
-    const google_apis::InstalledApp::IconList& app_icons,
-    const google_apis::InstalledApp::IconList& document_icons,
+    const IconList& app_icons,
+    const IconList& document_icons,
     const std::string& app_name,
     const GURL& create_url,
     bool is_removable)
@@ -159,8 +159,8 @@
     const google_apis::AppResource& app = *app_list.items()[i];
     const std::string id = app.application_id();
 
-    google_apis::InstalledApp::IconList app_icons;
-    google_apis::InstalledApp::IconList document_icons;
+    DriveAppInfo::IconList app_icons;
+    DriveAppInfo::IconList document_icons;
     for (size_t j = 0; j < app.icons().size(); ++j) {
       const google_apis::DriveAppIcon& icon = *app.icons()[j];
       if (icon.icon_url().is_empty())
@@ -230,12 +230,12 @@
 
 namespace util {
 
-GURL FindPreferredIcon(const google_apis::InstalledApp::IconList& icons,
+GURL FindPreferredIcon(const DriveAppInfo::IconList& icons,
                        int preferred_size) {
   if (icons.empty())
     return GURL();
 
-  google_apis::InstalledApp::IconList sorted_icons = icons;
+  DriveAppInfo::IconList sorted_icons = icons;
   std::sort(sorted_icons.rbegin(), sorted_icons.rend());
 
   // Go forward while the size is larger or equal to preferred_size.
diff --git a/chrome/browser/drive/drive_app_registry.h b/chrome/browser/drive/drive_app_registry.h
index 7f8ee0c..0c5d7aa 100644
--- a/chrome/browser/drive/drive_app_registry.h
+++ b/chrome/browser/drive/drive_app_registry.h
@@ -15,7 +15,6 @@
 #include "base/memory/weak_ptr.h"
 #include "base/observer_list.h"
 #include "google_apis/drive/gdata_errorcode.h"
-#include "google_apis/drive/gdata_wapi_parser.h"
 #include "url/gurl.h"
 
 namespace google_apis {
@@ -31,11 +30,13 @@
 // https://chrome.google.com/webstore/category/collection/drive_apps for
 // Drive apps available on the webstore.
 struct DriveAppInfo {
+  typedef std::vector<std::pair<int, GURL> > IconList;
+
   DriveAppInfo();
   DriveAppInfo(const std::string& app_id,
                const std::string& product_id,
-               const google_apis::InstalledApp::IconList& app_icons,
-               const google_apis::InstalledApp::IconList& document_icons,
+               const IconList& app_icons,
+               const IconList& document_icons,
                const std::string& app_name,
                const GURL& create_url,
                bool is_removable);
@@ -50,10 +51,10 @@
   std::string product_id;
   // Drive application icon URLs for this app, paired with their size (length of
   // a side in pixels).
-  google_apis::InstalledApp::IconList app_icons;
+  IconList app_icons;
   // Drive document icon URLs for this app, paired with their size (length of
   // a side in pixels).
-  google_apis::InstalledApp::IconList document_icons;
+  IconList document_icons;
   // App name.
   std::string app_name;
   // URL for opening a new file in the app. Empty if the app does not support
@@ -145,7 +146,7 @@
 // smaller than the preferred size, we'll return the largest one available.
 // Icons do not have to be sorted by the icon size. If there are no icons in
 // the list, returns an empty URL.
-GURL FindPreferredIcon(const google_apis::InstalledApp::IconList& icons,
+GURL FindPreferredIcon(const DriveAppInfo::IconList& icons,
                        int preferred_size);
 
 }  // namespace util
diff --git a/chrome/browser/drive/drive_app_registry_unittest.cc b/chrome/browser/drive/drive_app_registry_unittest.cc
index 8e5262c..64ee58c 100644
--- a/chrome/browser/drive/drive_app_registry_unittest.cc
+++ b/chrome/browser/drive/drive_app_registry_unittest.cc
@@ -7,6 +7,7 @@
 #include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/run_loop.h"
+#include "base/values.h"
 #include "chrome/browser/drive/drive_app_registry_observer.h"
 #include "chrome/browser/drive/fake_drive_service.h"
 #include "content/public/test/test_browser_thread_bundle.h"
@@ -153,7 +154,7 @@
 }
 
 TEST(DriveAppRegistryUtilTest, FindPreferredIcon_Empty) {
-  google_apis::InstalledApp::IconList icons;
+  DriveAppInfo::IconList icons;
   EXPECT_EQ("",
             util::FindPreferredIcon(icons, util::kPreferredIconSize).spec());
 }
@@ -164,7 +165,7 @@
   const char kBiggerIconUrl[] = "http://example.com/bigger.png";
   const int kMediumSize = 16;
 
-  google_apis::InstalledApp::IconList icons;
+  DriveAppInfo::IconList icons;
   // The icons are not sorted by the size.
   icons.push_back(std::make_pair(kMediumSize,
                                  GURL(kMediumIconUrl)));
diff --git a/chrome/browser/drive/fake_drive_service.cc b/chrome/browser/drive/fake_drive_service.cc
index c2b9946..f365451 100644
--- a/chrome/browser/drive/fake_drive_service.cc
+++ b/chrome/browser/drive/fake_drive_service.cc
@@ -16,6 +16,7 @@
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/values.h"
 #include "chrome/browser/drive/drive_api_util.h"
 #include "content/public/browser/browser_thread.h"
 #include "google_apis/drive/drive_api_parser.h"
@@ -28,7 +29,6 @@
 using content::BrowserThread;
 using google_apis::AboutResource;
 using google_apis::AboutResourceCallback;
-using google_apis::AccountMetadata;
 using google_apis::AppList;
 using google_apis::AppListCallback;
 using google_apis::AuthStatusCallback;
@@ -66,9 +66,6 @@
 namespace drive {
 namespace {
 
-// Mime type of directories.
-const char kDriveFolderMimeType[] = "application/vnd.google-apps.folder";
-
 // Returns true if a resource entry matches with the search query.
 // Supports queries consist of following format.
 // - Phrases quoted by double/single quotes
@@ -808,7 +805,9 @@
   if (entry) {
     ChangeResource* change = &entry->change_resource;
     FileResource* file = change->mutable_file();
-    file->set_title(new_title);
+
+    if (!new_title.empty())
+      file->set_title(new_title);
 
     // Set parent if necessary.
     if (!parent_resource_id.empty()) {
@@ -932,39 +931,12 @@
     const std::string& directory_title,
     const AddNewDirectoryOptions& options,
     const GetResourceEntryCallback& callback) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  DCHECK(!callback.is_null());
-
-  if (offline_) {
-    scoped_ptr<ResourceEntry> null;
-    base::MessageLoop::current()->PostTask(
-        FROM_HERE,
-        base::Bind(callback,
-                   GDATA_NO_CONNECTION,
-                   base::Passed(&null)));
-    return CancelCallback();
-  }
-
-  const EntryInfo* new_entry = AddNewEntry("",  // resource_id,
-                                           kDriveFolderMimeType,
-                                           "",  // content_data
-                                           parent_resource_id,
-                                           directory_title,
-                                           false);  // shared_with_me
-  if (!new_entry) {
-    scoped_ptr<ResourceEntry> null;
-    base::MessageLoop::current()->PostTask(
-        FROM_HERE,
-        base::Bind(callback, HTTP_NOT_FOUND, base::Passed(&null)));
-    return CancelCallback();
-  }
-
-  scoped_ptr<ResourceEntry> parsed_entry(
-      util::ConvertChangeResourceToResourceEntry(new_entry->change_resource));
-  base::MessageLoop::current()->PostTask(
-      FROM_HERE,
-      base::Bind(callback, HTTP_CREATED, base::Passed(&parsed_entry)));
-  return CancelCallback();
+  return AddNewDirectoryWithResourceId(
+      "",
+      parent_resource_id.empty() ? GetRootResourceId() : parent_resource_id,
+      directory_title,
+      options,
+      callback);
 }
 
 CancelCallback FakeDriveService::InitiateUploadNewFile(
@@ -1264,6 +1236,47 @@
       base::Bind(callback, HTTP_CREATED, base::Passed(&parsed_entry)));
 }
 
+CancelCallback FakeDriveService::AddNewDirectoryWithResourceId(
+    const std::string& resource_id,
+    const std::string& parent_resource_id,
+    const std::string& directory_title,
+    const AddNewDirectoryOptions& options,
+    const GetResourceEntryCallback& callback) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  DCHECK(!callback.is_null());
+
+  if (offline_) {
+    scoped_ptr<ResourceEntry> null;
+    base::MessageLoop::current()->PostTask(
+        FROM_HERE,
+        base::Bind(callback,
+                   GDATA_NO_CONNECTION,
+                   base::Passed(&null)));
+    return CancelCallback();
+  }
+
+  const EntryInfo* new_entry = AddNewEntry(resource_id,
+                                           util::kDriveFolderMimeType,
+                                           "",  // content_data
+                                           parent_resource_id,
+                                           directory_title,
+                                           false);  // shared_with_me
+  if (!new_entry) {
+    scoped_ptr<ResourceEntry> null;
+    base::MessageLoop::current()->PostTask(
+        FROM_HERE,
+        base::Bind(callback, HTTP_NOT_FOUND, base::Passed(&null)));
+    return CancelCallback();
+  }
+
+  scoped_ptr<ResourceEntry> parsed_entry(
+      util::ConvertChangeResourceToResourceEntry(new_entry->change_resource));
+  base::MessageLoop::current()->PostTask(
+      FROM_HERE,
+      base::Bind(callback, HTTP_CREATED, base::Passed(&parsed_entry)));
+  return CancelCallback();
+}
+
 void FakeDriveService::SetLastModifiedTime(
     const std::string& resource_id,
     const base::Time& last_modified_time,
@@ -1360,7 +1373,7 @@
   new_file->set_file_id(resource_id);
   new_file->set_title(title);
   // Set the contents, size and MD5 for a file.
-  if (content_type != kDriveFolderMimeType) {
+  if (content_type != util::kDriveFolderMimeType) {
     new_entry->content_data = content_data;
     new_file->set_file_size(content_data.size());
     new_file->set_md5_checksum(base::MD5String(content_data));
@@ -1377,15 +1390,14 @@
   new_file->set_mime_type(content_type);
 
   // Set parents.
-  ParentReference parent;
-  if (parent_resource_id.empty())
-    parent.set_file_id(GetRootResourceId());
-  else
+  if (!parent_resource_id.empty()) {
+    ParentReference parent;
     parent.set_file_id(parent_resource_id);
-  parent.set_parent_link(GetFakeLinkUrl(parent.file_id()));
-  std::vector<ParentReference> parents;
-  parents.push_back(parent);
-  *new_file->mutable_parents() = parents;
+    parent.set_parent_link(GetFakeLinkUrl(parent.file_id()));
+    std::vector<ParentReference> parents;
+    parents.push_back(parent);
+    *new_file->mutable_parents() = parents;
+  }
 
   new_entry->share_url = net::AppendOrReplaceQueryParameter(
       share_url_base_, "name", title);
diff --git a/chrome/browser/drive/fake_drive_service.h b/chrome/browser/drive/fake_drive_service.h
index 41efc95..8c92799 100644
--- a/chrome/browser/drive/fake_drive_service.h
+++ b/chrome/browser/drive/fake_drive_service.h
@@ -6,9 +6,11 @@
 #define CHROME_BROWSER_DRIVE_FAKE_DRIVE_SERVICE_H_
 
 #include "base/files/file_path.h"
-#include "base/values.h"
 #include "chrome/browser/drive/drive_service_interface.h"
-#include "google_apis/drive/auth_service_interface.h"
+
+namespace base {
+class DictionaryValue;
+}
 
 namespace google_apis {
 class AboutResource;
@@ -254,6 +256,15 @@
       bool shared_with_me,
       const google_apis::GetResourceEntryCallback& callback);
 
+  // Adds a new directory with the given |resource_id|.
+  // |callback| must not be null.
+  google_apis::CancelCallback AddNewDirectoryWithResourceId(
+      const std::string& resource_id,
+      const std::string& parent_resource_id,
+      const std::string& directory_title,
+      const AddNewDirectoryOptions& options,
+      const google_apis::GetResourceEntryCallback& callback);
+
   // Sets the last modified time for an entry specified by |resource_id|.
   // On success, returns HTTP_SUCCESS with the parsed entry.
   // |callback| must not be null.
diff --git a/chrome/browser/drive/test_util.cc b/chrome/browser/drive/test_util.cc
new file mode 100644
index 0000000..105627f
--- /dev/null
+++ b/chrome/browser/drive/test_util.cc
@@ -0,0 +1,201 @@
+// 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.
+
+#include "chrome/browser/drive/test_util.h"
+
+#include "base/run_loop.h"
+#include "chrome/browser/drive/drive_api_util.h"
+#include "chrome/browser/drive/fake_drive_service.h"
+#include "google_apis/drive/gdata_wapi_parser.h"
+#include "google_apis/drive/test_util.h"
+
+using google_apis::GDATA_OTHER_ERROR;
+using google_apis::GDataErrorCode;
+using google_apis::HTTP_CREATED;
+using google_apis::ResourceEntry;
+
+namespace drive {
+namespace test_util {
+
+bool SetUpTestEntries(FakeDriveService* drive_service) {
+  GDataErrorCode error = GDATA_OTHER_ERROR;
+  scoped_ptr<ResourceEntry> entry;
+
+  drive_service->AddNewFileWithResourceId(
+      "file:2_file_resource_id",
+      "audio/mpeg",
+      "This is some test content.",
+      drive_service->GetRootResourceId(),
+      "File 1.txt",
+      false,  // shared_with_me
+      google_apis::test_util::CreateCopyResultCallback(&error, &entry));
+  base::RunLoop().RunUntilIdle();
+  if (error != HTTP_CREATED)
+    return false;
+
+  drive_service->AddNewFileWithResourceId(
+      "file:slash_file_resource_id",
+      "audio/mpeg",
+      "This is some test content.",
+      drive_service->GetRootResourceId(),
+      "Slash / in file 1.txt",
+      false,  // shared_with_me
+      google_apis::test_util::CreateCopyResultCallback(&error, &entry));
+  base::RunLoop().RunUntilIdle();
+  if (error != HTTP_CREATED)
+    return false;
+
+  drive_service->AddNewFileWithResourceId(
+      "file:3_file_resource_id",
+      "audio/mpeg",
+      "This is some test content.",
+      drive_service->GetRootResourceId(),
+      "Duplicate Name.txt",
+      false,  // shared_with_me
+      google_apis::test_util::CreateCopyResultCallback(&error, &entry));
+  base::RunLoop().RunUntilIdle();
+  if (error != HTTP_CREATED)
+    return false;
+
+  drive_service->AddNewFileWithResourceId(
+      "file:4_file_resource_id",
+      "audio/mpeg",
+      "This is some test content.",
+      drive_service->GetRootResourceId(),
+      "Duplicate Name.txt",
+      false,  // shared_with_me
+      google_apis::test_util::CreateCopyResultCallback(&error, &entry));
+  base::RunLoop().RunUntilIdle();
+  if (error != HTTP_CREATED)
+    return false;
+
+  drive_service->AddNewFileWithResourceId(
+      "document:5_document_resource_id",
+      util::kGoogleDocumentMimeType,
+      std::string(),
+      drive_service->GetRootResourceId(),
+      "Document 1 excludeDir-test",
+      false,  // shared_with_me
+      google_apis::test_util::CreateCopyResultCallback(&error, &entry));
+  base::RunLoop().RunUntilIdle();
+  if (error != HTTP_CREATED)
+    return false;
+
+  drive_service->AddNewFileWithResourceId(
+      "folder:1_folder_resource_id",
+      util::kDriveFolderMimeType,
+      std::string(),
+      drive_service->GetRootResourceId(),
+      "Directory 1",
+      false,  // shared_with_me
+      google_apis::test_util::CreateCopyResultCallback(&error, &entry));
+  base::RunLoop().RunUntilIdle();
+  if (error != HTTP_CREATED)
+    return false;
+
+  drive_service->AddNewFileWithResourceId(
+      "file:subdirectory_file_1_id",
+      "audio/mpeg",
+      "This is some test content.",
+      "folder:1_folder_resource_id",
+      "SubDirectory File 1.txt",
+      false,  // shared_with_me
+      google_apis::test_util::CreateCopyResultCallback(&error, &entry));
+  base::RunLoop().RunUntilIdle();
+  if (error != HTTP_CREATED)
+    return false;
+
+  drive_service->AddNewFileWithResourceId(
+      "file:subdirectory_unowned_file_1_id",
+      "audio/mpeg",
+      "This is some test content.",
+      "folder:1_folder_resource_id",
+      "Shared to The Account Owner.txt",
+      true,  // shared_with_me
+      google_apis::test_util::CreateCopyResultCallback(&error, &entry));
+  base::RunLoop().RunUntilIdle();
+  if (error != HTTP_CREATED)
+    return false;
+
+  drive_service->AddNewDirectoryWithResourceId(
+      "folder:sub_dir_folder_resource_id",
+      "folder:1_folder_resource_id",
+      "Sub Directory Folder",
+      DriveServiceInterface::AddNewDirectoryOptions(),
+      google_apis::test_util::CreateCopyResultCallback(&error, &entry));
+  base::RunLoop().RunUntilIdle();
+  if (error != HTTP_CREATED)
+    return false;
+
+  drive_service->AddNewDirectoryWithResourceId(
+      "folder:sub_sub_directory_folder_id",
+      "folder:sub_dir_folder_resource_id",
+      "Sub Sub Directory Folder",
+      DriveServiceInterface::AddNewDirectoryOptions(),
+      google_apis::test_util::CreateCopyResultCallback(&error, &entry));
+  base::RunLoop().RunUntilIdle();
+  if (error != HTTP_CREATED)
+    return false;
+
+  drive_service->AddNewDirectoryWithResourceId(
+      "folder:slash_dir_folder_resource_id",
+      drive_service->GetRootResourceId(),
+      "Slash / in directory",
+      DriveServiceInterface::AddNewDirectoryOptions(),
+      google_apis::test_util::CreateCopyResultCallback(&error, &entry));
+  base::RunLoop().RunUntilIdle();
+  if (error != HTTP_CREATED)
+    return false;
+
+  drive_service->AddNewFileWithResourceId(
+      "file:slash_subdir_file",
+      "audio/mpeg",
+      "This is some test content.",
+      "folder:slash_dir_folder_resource_id",
+      "Slash SubDir File.txt",
+      false,  // shared_with_me
+      google_apis::test_util::CreateCopyResultCallback(&error, &entry));
+  base::RunLoop().RunUntilIdle();
+  if (error != HTTP_CREATED)
+    return false;
+
+  drive_service->AddNewDirectoryWithResourceId(
+      "folder:sub_dir_folder_2_self_link",
+      drive_service->GetRootResourceId(),
+      "Directory 2 excludeDir-test",
+      DriveServiceInterface::AddNewDirectoryOptions(),
+      google_apis::test_util::CreateCopyResultCallback(&error, &entry));
+  base::RunLoop().RunUntilIdle();
+  if (error != HTTP_CREATED)
+    return false;
+
+  drive_service->AddNewFileWithResourceId(
+      "file:1_orphanfile_resource_id",
+      "text/plain",
+      "This is some test content.",
+      std::string(),
+      "Orphan File 1.txt",
+      true,  // shared_with_me
+      google_apis::test_util::CreateCopyResultCallback(&error, &entry));
+  base::RunLoop().RunUntilIdle();
+  if (error != HTTP_CREATED)
+    return false;
+
+  drive_service->AddNewFileWithResourceId(
+      "document:orphan_doc_1",
+      util::kGoogleDocumentMimeType,
+      std::string(),
+      std::string(),
+      "Orphan Document",
+      true,  // shared_with_me
+      google_apis::test_util::CreateCopyResultCallback(&error, &entry));
+  base::RunLoop().RunUntilIdle();
+  if (error != HTTP_CREATED)
+    return false;
+
+  return true;
+}
+
+}  // namespace test_util
+}  // namespace drive
diff --git a/chrome/browser/drive/test_util.h b/chrome/browser/drive/test_util.h
new file mode 100644
index 0000000..32a71a1
--- /dev/null
+++ b/chrome/browser/drive/test_util.h
@@ -0,0 +1,19 @@
+// 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.
+
+#ifndef CHROME_BROWSER_DRIVE_TEST_UTIL_H_
+#define CHROME_BROWSER_DRIVE_TEST_UTIL_H_
+
+namespace drive {
+
+class FakeDriveService;
+
+namespace test_util {
+
+bool SetUpTestEntries(FakeDriveService* drive_service);
+
+}  // namespace test_util
+}  // namespace drive
+
+#endif  // CHROME_BROWSER_DRIVE_TEST_UTIL_H_
diff --git a/chrome/browser/errorpage_browsertest.cc b/chrome/browser/errorpage_browsertest.cc
index fb1595f..b34c1a5 100644
--- a/chrome/browser/errorpage_browsertest.cc
+++ b/chrome/browser/errorpage_browsertest.cc
@@ -34,6 +34,7 @@
 #include "content/public/test/test_navigation_observer.h"
 #include "content/test/net/url_request_failed_job.h"
 #include "content/test/net/url_request_mock_http_job.h"
+#include "grit/generated_resources.h"
 #include "net/base/net_errors.h"
 #include "net/base/net_util.h"
 #include "net/http/failing_http_transaction_factory.h"
@@ -46,6 +47,7 @@
 #include "net/url_request/url_request_job_factory.h"
 #include "net/url_request/url_request_test_job.h"
 #include "net/url_request/url_request_test_util.h"
+#include "ui/base/l10n/l10n_util.h"
 
 using content::BrowserThread;
 using content::NavigationController;
@@ -136,6 +138,10 @@
   EXPECT_TRUE(search_box_populated);
 }
 
+std::string GetLoadStaleButtonLabel() {
+  return l10n_util::GetStringUTF8(IDS_ERRORPAGES_BUTTON_LOAD_STALE);
+}
+
 // A protocol handler that fails a configurable number of requests, then
 // succeeds all requests after that, keeping count of failures and successes.
 class FailFirstNRequestsProtocolHandler
@@ -249,12 +255,13 @@
   }
 
   // Confirms that the javascript variable indicating whether or not we have
-  // a stale copy in the cache has been set to |expected|.
-  bool ProbeStaleCopyValue(bool expected) {
+  // a stale copy in the cache has been set to |expected|, and that the
+  // stale load button is or isn't there based on the same expectation.
+  testing::AssertionResult ProbeStaleCopyValue(bool expected) {
     const char* js_cache_probe =
         "try {\n"
         "    domAutomationController.send(\n"
-        "        templateData.staleCopyInCache ? 'yes' : 'no');\n"
+        "        'staleLoadButton' in templateData ? 'yes' : 'no');\n"
         "} catch (e) {\n"
         "    domAutomationController.send(e.message);\n"
         "}\n";
@@ -265,17 +272,21 @@
             browser()->tab_strip_model()->GetActiveWebContents(),
             js_cache_probe,
             &result);
-    EXPECT_TRUE(ret);
-    if (!ret)
-      return false;
-    EXPECT_EQ(expected ? "yes" : "no", result);
-    return ((expected ? "yes" : "no") == result);
+    if (!ret) {
+      return testing::AssertionFailure()
+          << "Failing return from ExecuteScriptAndExtractString.";
+    }
+
+    if ((expected && "yes" == result) || (!expected && "no" == result))
+      return testing::AssertionSuccess();
+
+    return testing::AssertionFailure() << "Cache probe result is " << result;
   }
 
   testing::AssertionResult ReloadStaleCopyFromCache() {
     const char* js_reload_script =
         "try {\n"
-        "    errorCacheLoad.reloadStaleInstance();\n"
+        "    document.getElementById('stale-load-button').click();\n"
         "    domAutomationController.send('success');\n"
         "} catch (e) {\n"
         "    domAutomationController.send(e.message);\n"
@@ -681,6 +692,7 @@
       // With no navigation corrections to load, there's only one navigation.
       browser(), test_url, 1);
   EXPECT_TRUE(ProbeStaleCopyValue(true));
+  EXPECT_TRUE(IsDisplayingText(browser(), GetLoadStaleButtonLabel()));
   EXPECT_NE(base::ASCIIToUTF16("Nocache Test Page"),
             browser()->tab_strip_model()->GetActiveWebContents()->GetTitle());
 
@@ -701,6 +713,7 @@
   ui_test_utils::NavigateToURLBlockUntilNavigationsComplete(
       browser(), test_url, 1);
   EXPECT_TRUE(ProbeStaleCopyValue(false));
+  EXPECT_FALSE(IsDisplayingText(browser(), GetLoadStaleButtonLabel()));
 }
 
 class ErrorPageAutoReloadTest : public InProcessBrowserTest {
@@ -862,7 +875,8 @@
 
   ui_test_utils::NavigateToURLBlockUntilNavigationsComplete(
       browser(), test_url, 2);
-  ProbeStaleCopyValue(true);
+  EXPECT_TRUE(IsDisplayingText(browser(), GetLoadStaleButtonLabel()));
+  EXPECT_TRUE(ProbeStaleCopyValue(true));
 
   // Confirm that loading the stale copy from the cache works.
   content::TestNavigationObserver same_tab_observer(
@@ -880,7 +894,8 @@
                   BrowsingDataHelper::UNPROTECTED_WEB);
   ui_test_utils::NavigateToURLBlockUntilNavigationsComplete(
       browser(), test_url, 2);
-  ProbeStaleCopyValue(false);
+  EXPECT_TRUE(ProbeStaleCopyValue(false));
+  EXPECT_FALSE(IsDisplayingText(browser(), GetLoadStaleButtonLabel()));
 }
 
 // A test fixture that simulates failing requests for an IDN domain name.
diff --git a/chrome/browser/extensions/active_tab_permission_granter.cc b/chrome/browser/extensions/active_tab_permission_granter.cc
index 87b3ce2..ef87525 100644
--- a/chrome/browser/extensions/active_tab_permission_granter.cc
+++ b/chrome/browser/extensions/active_tab_permission_granter.cc
@@ -4,19 +4,11 @@
 
 #include "chrome/browser/extensions/active_tab_permission_granter.h"
 
-#include "chrome/browser/chrome_notification_types.h"
-#include "chrome/browser/extensions/extension_service.h"
 #include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/sessions/session_id.h"
 #include "content/public/browser/navigation_details.h"
 #include "content/public/browser/navigation_entry.h"
-#include "content/public/browser/notification_service.h"
-#include "content/public/browser/notification_source.h"
-#include "content/public/browser/render_process_host.h"
 #include "content/public/browser/web_contents.h"
 #include "extensions/browser/extension_registry.h"
-#include "extensions/browser/extension_system.h"
-#include "extensions/common/extension.h"
 #include "extensions/common/extension_messages.h"
 #include "extensions/common/permissions/permission_set.h"
 #include "extensions/common/permissions/permissions_data.h"
@@ -28,10 +20,13 @@
 namespace extensions {
 
 ActiveTabPermissionGranter::ActiveTabPermissionGranter(
-    content::WebContents* web_contents, int tab_id, Profile* profile)
-    : WebContentsObserver(web_contents), tab_id_(tab_id),
-      scoped_extension_registry_observer_(this) {
-  scoped_extension_registry_observer_.Add(ExtensionRegistry::Get(profile));
+    content::WebContents* web_contents,
+    int tab_id,
+    Profile* profile)
+    : WebContentsObserver(web_contents),
+      tab_id_(tab_id),
+      extension_registry_observer_(this) {
+  extension_registry_observer_.Add(ExtensionRegistry::Get(profile));
 }
 
 ActiveTabPermissionGranter::~ActiveTabPermissionGranter() {}
@@ -94,7 +89,9 @@
 }
 
 void ActiveTabPermissionGranter::OnExtensionUnloaded(
-    content::BrowserContext* browser_context, const Extension* extension) {
+    content::BrowserContext* browser_context,
+    const Extension* extension,
+    UnloadedExtensionInfo::Reason reason) {
   // Note: don't need to clear the permissions (nor tell the renderer about it)
   // because it's being unloaded anyway.
   granted_extensions_.Remove(extension->id());
diff --git a/chrome/browser/extensions/active_tab_permission_granter.h b/chrome/browser/extensions/active_tab_permission_granter.h
index 24bb4ad..bf51ed0 100644
--- a/chrome/browser/extensions/active_tab_permission_granter.h
+++ b/chrome/browser/extensions/active_tab_permission_granter.h
@@ -50,7 +50,9 @@
 
   // extensions::ExtensionRegistryObserver implementation.
   virtual void OnExtensionUnloaded(content::BrowserContext* browser_context,
-                                   const Extension* extension) OVERRIDE;
+                                   const Extension* extension,
+                                   UnloadedExtensionInfo::Reason reason)
+      OVERRIDE;
 
   // Clears any tab-specific permissions for all extensions on |tab_id_| and
   // notifies renderers.
@@ -64,8 +66,8 @@
   ExtensionSet granted_extensions_;
 
   // Listen to extension unloaded notifications.
-  ScopedObserver<ExtensionRegistry,
-                 ExtensionRegistryObserver> scoped_extension_registry_observer_;
+  ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver>
+      extension_registry_observer_;
 
   DISALLOW_COPY_AND_ASSIGN(ActiveTabPermissionGranter);
 };
diff --git a/chrome/browser/extensions/activity_log/activity_actions.cc b/chrome/browser/extensions/activity_log/activity_actions.cc
index 841fe74..b084579 100644
--- a/chrome/browser/extensions/activity_log/activity_actions.cc
+++ b/chrome/browser/extensions/activity_log/activity_actions.cc
@@ -4,28 +4,70 @@
 
 #include "chrome/browser/extensions/activity_log/activity_actions.h"
 
+#include <algorithm>  // for std::find.
 #include <string>
 
 #include "base/command_line.h"
 #include "base/format_macros.h"
 #include "base/json/json_string_value_serializer.h"
 #include "base/logging.h"
+#include "base/macros.h"
 #include "base/memory/singleton.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
+#include "base/values.h"
 #include "chrome/browser/extensions/activity_log/activity_action_constants.h"
+#include "chrome/browser/extensions/activity_log/ad_network_database.h"
 #include "chrome/browser/extensions/activity_log/fullstream_ui_policy.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/common/chrome_switches.h"
+#include "chrome/common/extensions/ad_injection_constants.h"
 #include "chrome/common/extensions/dom_action_types.h"
+#include "components/rappor/rappor_service.h"
 #include "content/public/browser/web_contents.h"
 #include "sql/statement.h"
+#include "url/gurl.h"
 
 namespace constants = activity_log_constants;
 
+namespace extensions {
+
 namespace {
 
+namespace keys = ad_injection_constants::keys;
+
+// The list of APIs for which we upload the URL to RAPPOR.
+const char* kApisForRapporMetric[] = {
+  "HTMLIFrameElement.src",
+  "HTMLEmbedElement.src",
+  "HTMLAnchorElement.href",
+};
+
+const char* kExtensionAdInjectionRapporMetricName =
+    "Extensions.PossibleAdInjection";
+
+// The elements for which we check the 'src' attribute to look for ads.
+const char* kSrcElements[] = {
+  "HTMLIFrameElement",
+  "HTMLEmbedElement"
+};
+
+// The elements for which we check the 'href' attribute to look for ads.
+const char* kHrefElements[] = {
+  "HTMLAnchorElement",
+};
+
+bool IsSrcElement(const std::string& str) {
+  static const char** end = kSrcElements + arraysize(kSrcElements);
+  return std::find(kSrcElements, end, str) != end;
+}
+
+bool IsHrefElement(const std::string& str) {
+  static const char** end = kHrefElements + arraysize(kHrefElements);
+  return std::find(kHrefElements, end, str) != end;
+}
+
 std::string Serialize(const base::Value* value) {
   std::string value_as_text;
   if (!value) {
@@ -37,9 +79,40 @@
   return value_as_text;
 }
 
-}  // namespace
+Action::InjectionType CheckDomObject(const base::DictionaryValue* object) {
+  std::string type;
+  object->GetString(keys::kType, &type);
 
-namespace extensions {
+  std::string url_key;
+  if (IsSrcElement(type))
+    url_key = keys::kSrc;
+  else if (IsHrefElement(type))
+    url_key = keys::kHref;
+
+  if (!url_key.empty()) {
+    std::string url;
+    if (object->GetString(url_key, &url) &&
+        AdNetworkDatabase::Get()->IsAdNetwork(GURL(url))) {
+      return Action::INJECTION_NEW_AD;
+    }
+  }
+
+  const base::ListValue* children = NULL;
+  if (object->GetList(keys::kChildren, &children)) {
+    const base::DictionaryValue* child = NULL;
+    for (size_t i = 0;
+         i < children->GetSize() &&
+             i < ad_injection_constants::kMaximumChildrenToCheck;
+         ++i) {
+      if (children->GetDictionary(i, &child) && CheckDomObject(child))
+        return Action::INJECTION_NEW_AD;
+    }
+  }
+
+  return Action::NO_AD_INJECTION;
+}
+
+}  // namespace
 
 using api::activity_log_private::ExtensionActivity;
 
@@ -78,6 +151,27 @@
   return clone;
 }
 
+Action::InjectionType Action::DidInjectAd(
+    rappor::RapporService* rappor_service) const {
+  MaybeUploadUrl(rappor_service);
+
+  // Currently, we do not have the list of ad networks, so we exit immediately
+  // with NO_AD_INJECTION (unless the database has been set by a test).
+  if (!AdNetworkDatabase::Get())
+    return NO_AD_INJECTION;
+
+  if (api_name_ == ad_injection_constants::kHtmlIframeSrcApiName ||
+      api_name_ == ad_injection_constants::kHtmlEmbedSrcApiName) {
+    return CheckSrcModification();
+  } else if (EndsWith(api_name_,
+                      ad_injection_constants::kAppendChildApiSuffix,
+                      true /* case senstive */)) {
+    return CheckAppendChild();
+  }
+
+  return NO_AD_INJECTION;
+}
+
 void Action::set_args(scoped_ptr<base::ListValue> args) {
   args_.reset(args.release());
 }
@@ -294,6 +388,50 @@
   return result;
 }
 
+void Action::MaybeUploadUrl(rappor::RapporService* rappor_service) const {
+  // If there's no given |rappor_service|, abort immediately.
+  if (!rappor_service)
+    return;
+
+  // If the action has no url, or the url is empty, then return.
+  if (!arg_url_.is_valid() || arg_url_.is_empty())
+    return;
+  std::string host = arg_url_.host();
+  if (host.empty())
+    return;
+
+  bool can_inject_ads = false;
+  for (size_t i = 0; i < arraysize(kApisForRapporMetric); ++i) {
+    if (api_name_ == kApisForRapporMetric[i]) {
+      can_inject_ads = true;
+      break;
+    }
+  }
+
+  if (!can_inject_ads)
+    return;
+
+  // Record the URL - an ad *may* have been injected.
+  rappor_service->RecordSample(kExtensionAdInjectionRapporMetricName,
+                               rappor::ETLD_PLUS_ONE_RAPPOR_TYPE,
+                               host);
+}
+
+Action::InjectionType Action::CheckSrcModification() const {
+  bool injected_ad = arg_url_.is_valid() &&
+                     !arg_url_.is_empty() &&
+                     AdNetworkDatabase::Get()->IsAdNetwork(arg_url_);
+  return injected_ad ? INJECTION_NEW_AD : NO_AD_INJECTION;
+}
+
+Action::InjectionType Action::CheckAppendChild() const {
+  const base::DictionaryValue* child = NULL;
+  if (!args_->GetDictionary(0u, &child))
+    return NO_AD_INJECTION;
+
+  return CheckDomObject(child);
+}
+
 bool ActionComparator::operator()(
     const scoped_refptr<Action>& lhs,
     const scoped_refptr<Action>& rhs) const {
diff --git a/chrome/browser/extensions/activity_log/activity_actions.h b/chrome/browser/extensions/activity_log/activity_actions.h
index 6854786..626d050 100644
--- a/chrome/browser/extensions/activity_log/activity_actions.h
+++ b/chrome/browser/extensions/activity_log/activity_actions.h
@@ -10,7 +10,6 @@
 
 #include "base/memory/ref_counted_memory.h"
 #include "base/time/time.h"
-#include "base/values.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/common/extensions/api/activity_log_private.h"
 #include "sql/connection.h"
@@ -18,6 +17,15 @@
 #include "sql/transaction.h"
 #include "url/gurl.h"
 
+namespace base {
+class ListValue;
+class DictionaryValue;
+}
+
+namespace rappor {
+class RapporService;
+}
+
 namespace extensions {
 
 // This is the interface for extension actions that are to be recorded in
@@ -37,6 +45,15 @@
     ACTION_ANY = 1001,              // Used for lookups of unspecified type.
   };
 
+  // The type of ad injection an action performed.
+  enum InjectionType {
+    NO_AD_INJECTION = 0,    // No ad injection occurred.
+    INJECTION_NEW_AD,       // A new ad was injected.
+    INJECTION_REMOVED_AD,   // An ad was removed.
+    INJECTION_REPLACED_AD,  // An ad was replaced.
+    NUM_INJECTION_TYPES     // Place any new injection types above this entry.
+  };
+
   // A useful shorthand for methods that take or return collections of Action
   // objects.
   typedef std::vector<scoped_refptr<Action> > ActionVector;
@@ -53,6 +70,12 @@
   // Creates and returns a mutable copy of an Action.
   scoped_refptr<Action> Clone() const;
 
+  // Return the type of ad-injection performed in the |action|, or
+  // NO_AD_INJECTION if none was present.
+  // TODO(rdevlin.cronin): This isn't done.
+  // See crbug.com/357204.
+  InjectionType DidInjectAd(rappor::RapporService* rappor_service) const;
+
   // The extension which caused this record to be generated.
   const std::string& extension_id() const { return extension_id_; }
 
@@ -131,6 +154,15 @@
  private:
   friend class base::RefCountedThreadSafe<Action>;
 
+  // Uploads the URL to RAPPOR (preserving privacy) if this might have been an
+  // ad injection.
+  void MaybeUploadUrl(rappor::RapporService* rappor_service) const;
+
+  // Checks an action with the appendChild API for ad injection.
+  InjectionType CheckAppendChild() const;
+  // Checks an action that modified the src of an element for ad injection.
+  InjectionType CheckSrcModification() const;
+
   std::string extension_id_;
   base::Time time_;
   ActionType action_type_;
diff --git a/chrome/browser/extensions/activity_log/activity_log.cc b/chrome/browser/extensions/activity_log/activity_log.cc
index 700d44f..09c209b 100644
--- a/chrome/browser/extensions/activity_log/activity_log.cc
+++ b/chrome/browser/extensions/activity_log/activity_log.cc
@@ -14,9 +14,7 @@
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/threading/thread_checker.h"
-#include "chrome/browser/browser_process.h"
 #include "chrome/browser/extensions/activity_log/activity_action_constants.h"
-#include "chrome/browser/extensions/activity_log/ad_injection_util.h"
 #include "chrome/browser/extensions/activity_log/counting_policy.h"
 #include "chrome/browser/extensions/activity_log/fullstream_ui_policy.h"
 #include "chrome/browser/extensions/api/activity_log_private/activity_log_private_api.h"
@@ -477,7 +475,7 @@
   return (watchdog_apps_active_ > 0);
 }
 
-void ActivityLog::SetWatchdogAppActive(bool active) {
+void ActivityLog::SetWatchdogAppActiveForTesting(bool active) {
   watchdog_apps_active_ = active ? 1 : 0;
 }
 
@@ -559,11 +557,6 @@
     }
   }
 
-  if (g_browser_process->rappor_service()) {
-    ad_injection_util::CheckActionForAdInjection(
-        action, g_browser_process->rappor_service());
-  }
-
   if (uma_policy_)
     uma_policy_->ProcessAction(action);
   if (IsDatabaseEnabled() && database_policy_)
diff --git a/chrome/browser/extensions/activity_log/activity_log.h b/chrome/browser/extensions/activity_log/activity_log.h
index a959d2b..9866fc4 100644
--- a/chrome/browser/extensions/activity_log/activity_log.h
+++ b/chrome/browser/extensions/activity_log/activity_log.h
@@ -117,10 +117,13 @@
   // Deletes the database associated with the policy that's currently in use.
   void DeleteDatabase();
 
+  // If we're in a browser test, we need to pretend that the watchdog app is
+  // active.
+  void SetWatchdogAppActiveForTesting(bool active);
+
  private:
   friend class ActivityLogTest;
   friend class BrowserContextKeyedAPIFactory<ActivityLog>;
-  friend class RenderViewActivityLogTest;
 
   explicit ActivityLog(content::BrowserContext* context);
   virtual ~ActivityLog();
@@ -128,9 +131,6 @@
   // Specifies if the Watchdog app is active (installed & enabled).
   // If so, we need to log to the database and stream to the API.
   bool IsWatchdogAppActive();
-  // If we're in a browser test, we need to pretend that the watchdog app is
-  // active.
-  void SetWatchdogAppActive(bool active);
 
   // Specifies if we need to record actions to the db. If so, we need to log to
   // the database. This is true if the Watchdog app is active *or* the
diff --git a/chrome/browser/extensions/activity_log/ad_injection_browsertest.cc b/chrome/browser/extensions/activity_log/ad_injection_browsertest.cc
new file mode 100644
index 0000000..2df700d
--- /dev/null
+++ b/chrome/browser/extensions/activity_log/ad_injection_browsertest.cc
@@ -0,0 +1,345 @@
+// 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.
+
+#include "base/files/file_path.h"
+#include "base/scoped_observer.h"
+#include "base/strings/string_number_conversions.h"
+#include "base/strings/stringprintf.h"
+#include "chrome/browser/extensions/activity_log/activity_actions.h"
+#include "chrome/browser/extensions/activity_log/activity_log.h"
+#include "chrome/browser/extensions/activity_log/ad_network_database.h"
+#include "chrome/browser/extensions/extension_browsertest.h"
+#include "chrome/browser/extensions/extension_test_message_listener.h"
+#include "chrome/test/base/ui_test_utils.h"
+#include "extensions/common/extension.h"
+#include "net/test/embedded_test_server/embedded_test_server.h"
+#include "net/test/embedded_test_server/http_response.h"
+#include "url/gurl.h"
+
+namespace net {
+namespace test_server {
+struct HttpRequest;
+}
+}
+
+namespace extensions {
+
+namespace {
+
+// The "ad network" that we are using. Any src or href equal to this should be
+// considered an ad network.
+const char kAdNetwork[] = "http://www.known-ads.adnetwork";
+
+// The current stage of the test.
+enum Stage {
+  BEFORE_RESET,  // We are about to reset the page.
+  RESETTING,     // We are resetting the page.
+  TESTING        // The reset is complete, and we are testing.
+};
+
+// The string sent by the test to indicate that the page reset will begin.
+const char kResetBeginString[] = "Page Reset Begin";
+// The string sent by the test to indicate that page reset is complete.
+const char kResetEndString[] = "Page Reset End";
+// The string sent by the test to indicate a JS error was caught in the test.
+const char kJavascriptErrorString[] = "Testing Error";
+// The string sent by the test to indicate that we have concluded the full test.
+const char kTestCompleteString[] = "Test Complete";
+
+// An implementation of ActivityLog::Observer that, for every action, sends it
+// through Action::DidInjectAd(). This will keep track of the observed
+// injections, and can be enabled or disabled as needed (for instance, this
+// should be disabled while we are resetting the page).
+class ActivityLogObserver : public ActivityLog::Observer {
+ public:
+  explicit ActivityLogObserver(content::BrowserContext* context);
+  virtual ~ActivityLogObserver();
+
+  void set_enabled(bool enabled) { enabled_ = enabled; }
+  size_t injection_count() const { return injection_count_; }
+
+ private:
+  virtual void OnExtensionActivity(scoped_refptr<Action> action) OVERRIDE;
+
+  ScopedObserver<ActivityLog, ActivityLog::Observer> scoped_observer_;
+  content::BrowserContext* context_;
+  size_t injection_count_;
+  bool enabled_;
+};
+
+ActivityLogObserver::ActivityLogObserver(content::BrowserContext* context)
+    : scoped_observer_(this),
+      context_(context),
+      injection_count_(0u),
+      enabled_(false) {
+  ActivityLog::GetInstance(context_)->AddObserver(this);
+}
+
+ActivityLogObserver::~ActivityLogObserver() {}
+
+void ActivityLogObserver::OnExtensionActivity(scoped_refptr<Action> action) {
+  if (enabled_ && action->DidInjectAd(NULL /* no rappor service */) !=
+          Action::NO_AD_INJECTION) {
+    ++injection_count_;
+  }
+}
+
+// A mock for the AdNetworkDatabase. This simply says that the URL
+// http://www.known-ads.adnetwork is an ad network, and nothing else is.
+class TestAdNetworkDatabase : public AdNetworkDatabase {
+ public:
+  TestAdNetworkDatabase();
+  virtual ~TestAdNetworkDatabase();
+  virtual bool IsAdNetwork(const GURL& url) const OVERRIDE;
+
+ private:
+  GURL ad_network_url_;
+};
+
+TestAdNetworkDatabase::TestAdNetworkDatabase() : ad_network_url_(kAdNetwork) {}
+TestAdNetworkDatabase::~TestAdNetworkDatabase() {}
+
+bool TestAdNetworkDatabase::IsAdNetwork(const GURL& url) const {
+  return url == ad_network_url_;
+}
+
+scoped_ptr<net::test_server::HttpResponse> HandleRequest(
+    const net::test_server::HttpRequest& request) {
+  scoped_ptr<net::test_server::BasicHttpResponse> response(
+      new net::test_server::BasicHttpResponse());
+  response->set_code(net::HTTP_OK);
+  return response.PassAs<net::test_server::HttpResponse>();
+}
+
+}  // namespace
+
+class AdInjectionBrowserTest : public ExtensionBrowserTest {
+ protected:
+  AdInjectionBrowserTest();
+  virtual ~AdInjectionBrowserTest();
+
+  virtual void SetUpOnMainThread() OVERRIDE;
+  virtual void TearDownOnMainThread() OVERRIDE;
+
+  // Handle the "Reset Begin" stage of the test.
+  testing::AssertionResult HandleResetBeginStage();
+
+  // Handle the "Reset End" stage of the test.
+  testing::AssertionResult HandleResetEndStage();
+
+  // Handle the "Testing" stage of the test.
+  testing::AssertionResult HandleTestingStage(const std::string& message);
+
+  // Handle a JS error encountered in a test.
+  testing::AssertionResult HandleJSError(const std::string& message);
+
+  const base::FilePath& test_data_dir() { return test_data_dir_; }
+
+  ExtensionTestMessageListener* listener() { return listener_.get(); }
+
+  ActivityLogObserver* observer() { return observer_.get(); }
+
+  void set_expected_injections(size_t expected_injections) {
+    expected_injections_ = expected_injections;
+  }
+
+ private:
+  // The name of the last completed test; used in case of unexpected failure for
+  // debugging.
+  std::string last_test_;
+
+  // The number of expected injections.
+  size_t expected_injections_;
+
+  // A listener for any messages from our ad-injecting extension.
+  scoped_ptr<ExtensionTestMessageListener> listener_;
+
+  // An observer to be alerted when we detect ad injection.
+  scoped_ptr<ActivityLogObserver> observer_;
+
+  // The current stage of the test.
+  Stage stage_;
+};
+
+AdInjectionBrowserTest::AdInjectionBrowserTest()
+    : expected_injections_(0u), stage_(BEFORE_RESET) {}
+
+AdInjectionBrowserTest::~AdInjectionBrowserTest() {}
+
+void AdInjectionBrowserTest::SetUpOnMainThread() {
+  ExtensionBrowserTest::SetUpOnMainThread();
+
+  ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
+  embedded_test_server()->RegisterRequestHandler(base::Bind(&HandleRequest));
+
+  test_data_dir_ =
+      test_data_dir_.AppendASCII("activity_log").AppendASCII("ad_injection");
+  observer_.reset(new ActivityLogObserver(profile()));
+
+  // We use a listener in order to keep the actions in the Javascript test
+  // synchronous. At the end of each stage, the test will send us a message
+  // with the stage and status, and will not advance until we reply with
+  // a message.
+  listener_.reset(new ExtensionTestMessageListener(true /* will reply */));
+
+  // Enable the activity log for this test.
+  ActivityLog::GetInstance(profile())->SetWatchdogAppActiveForTesting(true);
+
+  // Set the ad network database.
+  AdNetworkDatabase::SetForTesting(
+      scoped_ptr<AdNetworkDatabase>(new TestAdNetworkDatabase));
+}
+
+void AdInjectionBrowserTest::TearDownOnMainThread() {
+  observer_.reset(NULL);
+  listener_.reset(NULL);
+  ActivityLog::GetInstance(profile())->SetWatchdogAppActiveForTesting(false);
+
+  ExtensionBrowserTest::TearDownOnMainThread();
+}
+
+testing::AssertionResult AdInjectionBrowserTest::HandleResetBeginStage() {
+  if (stage_ != BEFORE_RESET) {
+    return testing::AssertionFailure()
+           << "In incorrect stage. Last Test: " << last_test_;
+  }
+
+  // Stop looking for ad injection, since some of the reset could be considered
+  // ad injection.
+  observer()->set_enabled(false);
+  stage_ = RESETTING;
+  return testing::AssertionSuccess();
+}
+
+testing::AssertionResult AdInjectionBrowserTest::HandleResetEndStage() {
+  if (stage_ != RESETTING) {
+    return testing::AssertionFailure()
+           << "In incorrect stage. Last test: " << last_test_;
+  }
+
+  // Look for ad injection again, now that the reset is over.
+  observer()->set_enabled(true);
+  stage_ = TESTING;
+  return testing::AssertionSuccess();
+}
+
+testing::AssertionResult AdInjectionBrowserTest::HandleTestingStage(
+    const std::string& message) {
+  if (stage_ != TESTING) {
+    return testing::AssertionFailure()
+           << "In incorrect stage. Last test: " << last_test_;
+  }
+
+  // The format for a testing message is:
+  // "<test_name>:<expected_change>"
+  // where <test_name> is the name of the test and <expected_change> is
+  // either -1 for no ad injection (to test against false positives) or the
+  // number corresponding to ad_detection::InjectionType.
+  size_t sep = message.find(':');
+  int expected_change = -1;
+  if (sep == std::string::npos ||
+      !base::StringToInt(message.substr(sep + 1), &expected_change) ||
+      (expected_change < Action::NO_AD_INJECTION ||
+       expected_change >= Action::NUM_INJECTION_TYPES)) {
+    return testing::AssertionFailure()
+           << "Invalid message received for testing stage: " << message;
+  }
+
+  last_test_ = message.substr(0, sep);
+
+  // TODO(rdevlin.cronin): Currently, we lump all kinds of ad injection into
+  // one counter, because we can't differentiate (or catch all of them). Change
+  // this when we can.
+  // Increment the expected change, and compare.
+  if (expected_change != Action::NO_AD_INJECTION)
+    ++expected_injections_;
+  std::string error;
+  if (expected_injections_ != observer()->injection_count()) {
+    // We need these static casts, because size_t is different on different
+    // architectures, and printf becomes unhappy.
+    error =
+        base::StringPrintf("Injection Count Mismatch: Expected %u, Actual %u",
+                           static_cast<unsigned int>(expected_injections_),
+                           static_cast<unsigned int>(
+                               observer()->injection_count()));
+  }
+
+  stage_ = BEFORE_RESET;
+
+  if (!error.empty())
+    return testing::AssertionFailure() << error;
+
+  return testing::AssertionSuccess();
+}
+
+testing::AssertionResult AdInjectionBrowserTest::HandleJSError(
+    const std::string& message) {
+  // The format for a testing message is:
+  // "Testing Error:<test_name>:<error>"
+  // where <test_name> is the name of the test and <error> is the error which
+  // was encountered.
+  size_t first_sep = message.find(':');
+  size_t second_sep = message.find(':', first_sep + 1);
+  if (first_sep == std::string::npos || second_sep == std::string::npos) {
+    return testing::AssertionFailure()
+           << "Invalid message received: " << message;
+  }
+
+  std::string test_name =
+      message.substr(first_sep + 1, second_sep - first_sep - 1);
+  std::string test_err = message.substr(second_sep + 1);
+
+  // We set the stage here, so that subsequent tests don't fail.
+  stage_ = BEFORE_RESET;
+
+  return testing::AssertionFailure() << "Javascript Error in test '"
+                                     << test_name << "': " << test_err;
+}
+
+// This is the primary Ad-Injection browser test. It loads an extension that
+// has a content script that, in turn, injects ads left, right, and center.
+// The content script waits after each injection for a response from this
+// browsertest, in order to ensure synchronicity. After each injection, the
+// content script cleans up after itself. For significantly more detailed
+// comments, see
+// chrome/test/data/extensions/activity_log/ad_injection/content_script.js.
+IN_PROC_BROWSER_TEST_F(AdInjectionBrowserTest, DetectAdInjections) {
+  const Extension* extension = LoadExtension(test_data_dir_);
+  ASSERT_TRUE(extension);
+
+  ui_test_utils::NavigateToURL(browser(), embedded_test_server()->GetURL("/"));
+
+  std::string message;
+  while (message != "TestComplete") {
+    listener()->WaitUntilSatisfied();
+    message = listener()->message();
+    if (message == kResetBeginString) {
+      ASSERT_TRUE(HandleResetBeginStage());
+    } else if (message == kResetEndString) {
+      ASSERT_TRUE(HandleResetEndStage());
+    } else if (!message.compare(
+                   0, strlen(kJavascriptErrorString), kJavascriptErrorString)) {
+      EXPECT_TRUE(HandleJSError(message));
+    } else if (message == kTestCompleteString) {
+      break;  // We're done!
+    } else {  // We're in some kind of test.
+      EXPECT_TRUE(HandleTestingStage(message));
+    }
+
+    // We set the expected injections to be whatever they actually are so that
+    // we only fail one test, instead of all subsequent tests.
+    set_expected_injections(observer()->injection_count());
+
+    // In all cases (except for "Test Complete", in which case we already
+    // break'ed), we reply with a continue message.
+    listener()->Reply("Continue");
+    listener()->Reset();
+  }
+}
+
+// TODO(rdevlin.cronin): We test a good amount of ways of injecting ads with
+// the above test, but more is better in testing.
+// See crbug.com/357204.
+
+}  // namespace extensions
diff --git a/chrome/browser/extensions/activity_log/ad_injection_unittest.cc b/chrome/browser/extensions/activity_log/ad_injection_unittest.cc
new file mode 100644
index 0000000..94dad2a
--- /dev/null
+++ b/chrome/browser/extensions/activity_log/ad_injection_unittest.cc
@@ -0,0 +1,84 @@
+// 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.
+
+#include "base/time/time.h"
+#include "chrome/browser/extensions/activity_log/activity_actions.h"
+#include "components/rappor/byte_vector_utils.h"
+#include "components/rappor/proto/rappor_metric.pb.h"
+#include "components/rappor/rappor_service.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace extensions {
+
+namespace {
+
+scoped_refptr<Action> CreateAction(const std::string& api_name) {
+  scoped_refptr<Action> action = new Action("id",
+                                            base::Time::Now(),
+                                            Action::ACTION_DOM_ACCESS,
+                                            api_name);
+  action->set_arg_url(GURL("http://www.notarealhost.notarealtld"));
+  return action;
+}
+
+}  // namespace
+
+class TestRapporService : public rappor::RapporService {
+ public:
+  TestRapporService();
+  virtual ~TestRapporService();
+
+  // Returns the active reports. This also clears the internal map of metrics
+  // as a biproduct, so if comparing numbers of reports, the comparison should
+  // be from the last time GetReports() was called (not from the beginning of
+  // the test).
+  rappor::RapporReports GetReports();
+};
+
+TestRapporService::TestRapporService() {
+  // Initialize the RapporService for testing.
+  SetCohortForTesting(0);
+  SetSecretForTesting(rappor::HmacByteVectorGenerator::GenerateEntropyInput());
+}
+
+TestRapporService::~TestRapporService() {}
+
+rappor::RapporReports TestRapporService::GetReports() {
+  rappor::RapporReports result;
+  rappor::RapporService::ExportMetrics(&result);
+  return result;
+}
+
+// Test that the actions properly upload the URLs to the RAPPOR service if
+// the action may have injected the ad.
+TEST(AdInjectionUnittest, CheckActionForAdInjectionTest) {
+  TestRapporService rappor_service;
+  rappor::RapporReports reports = rappor_service.GetReports();
+  EXPECT_EQ(0, reports.report_size());
+
+  scoped_refptr<Action> modify_iframe_src =
+      CreateAction("HTMLIFrameElement.src");
+  modify_iframe_src->DidInjectAd(&rappor_service);
+  reports = rappor_service.GetReports();
+  EXPECT_EQ(1, reports.report_size());
+
+  scoped_refptr<Action> modify_embed_src =
+      CreateAction("HTMLEmbedElement.src");
+  modify_embed_src->DidInjectAd(&rappor_service);
+  reports = rappor_service.GetReports();
+  EXPECT_EQ(1, reports.report_size());
+
+  scoped_refptr<Action> modify_anchor_href =
+      CreateAction("HTMLAnchorElement.href");
+  modify_anchor_href->DidInjectAd(&rappor_service);
+  reports = rappor_service.GetReports();
+  EXPECT_EQ(1, reports.report_size());
+
+  scoped_refptr<Action> harmless_action = CreateAction("Location.replace");
+  harmless_action->DidInjectAd(&rappor_service);
+  reports = rappor_service.GetReports();
+  EXPECT_EQ(0, reports.report_size());
+}
+
+}  // namespace extensions
diff --git a/chrome/browser/extensions/activity_log/ad_injection_util.cc b/chrome/browser/extensions/activity_log/ad_injection_util.cc
deleted file mode 100644
index 789c0dc..0000000
--- a/chrome/browser/extensions/activity_log/ad_injection_util.cc
+++ /dev/null
@@ -1,54 +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.
-
-#include "chrome/browser/extensions/activity_log/ad_injection_util.h"
-
-#include <string>
-
-#include "base/macros.h"
-#include "chrome/browser/extensions/activity_log/activity_actions.h"
-#include "components/rappor/rappor_service.h"
-
-namespace extensions {
-namespace ad_injection_util {
-
-const char* kAdInjectingApis[] = {
-  "HTMLIFrameElement.src",
-  "HTMLEmbedElement.src",
-  "HTMLAnchorElement.href",
-};
-
-const char* kExtensionAdInjectionMetricName = "Extensions.PossibleAdInjection";
-
-void CheckActionForAdInjection(const Action* action,
-                               rappor::RapporService* rappor_service) {
-  DCHECK(action);
-  DCHECK(rappor_service);
-  // If the action has no url, or the url is empty, then return.
-  if (!action->arg_url().is_valid() || action->arg_url().is_empty())
-    return;
-  std::string host = action->arg_url().host();
-  if (host.empty())
-    return;
-
-  bool can_inject_ads = false;
-  const std::string& api_name = action->api_name();
-  for (size_t i = 0; i < arraysize(kAdInjectingApis); ++i) {
-    if (api_name == kAdInjectingApis[i]) {
-      can_inject_ads = true;
-      break;
-    }
-  }
-
-  if (!can_inject_ads)
-    return;
-
-  // Record the URL - an ad *may* have been injected.
-  rappor_service->RecordSample(kExtensionAdInjectionMetricName,
-                               rappor::ETLD_PLUS_ONE_RAPPOR_TYPE,
-                               host);
-}
-
-}  // namespace ad_injection_util
-}  // namespace extensions
diff --git a/chrome/browser/extensions/activity_log/ad_injection_util.h b/chrome/browser/extensions/activity_log/ad_injection_util.h
deleted file mode 100644
index 14a27e6..0000000
--- a/chrome/browser/extensions/activity_log/ad_injection_util.h
+++ /dev/null
@@ -1,26 +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.
-
-#ifndef CHROME_BROWSER_EXTENSIONS_ACTIVITY_LOG_AD_INJECTION_UTIL_H_
-#define CHROME_BROWSER_EXTENSIONS_ACTIVITY_LOG_AD_INJECTION_UTIL_H_
-
-namespace rappor {
-class RapporService;
-}
-
-namespace extensions {
-
-class Action;
-
-namespace ad_injection_util {
-
-// Check for whether or not the action may have injected ads, and if it may
-// have, report it with the given |rappor_service|.
-void CheckActionForAdInjection(const Action* action,
-                               rappor::RapporService* rappor_service);
-
-}  // namespace ad_injection_util
-}  // namespace extensions
-
-#endif  // CHROME_BROWSER_EXTENSIONS_ACTIVITY_LOG_AD_INJECTION_UTIL_H_
diff --git a/chrome/browser/extensions/activity_log/ad_injection_util_unittest.cc b/chrome/browser/extensions/activity_log/ad_injection_util_unittest.cc
deleted file mode 100644
index 22b1f73..0000000
--- a/chrome/browser/extensions/activity_log/ad_injection_util_unittest.cc
+++ /dev/null
@@ -1,87 +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.
-
-#include "base/time/time.h"
-#include "chrome/browser/extensions/activity_log/activity_actions.h"
-#include "chrome/browser/extensions/activity_log/ad_injection_util.h"
-#include "components/rappor/byte_vector_utils.h"
-#include "components/rappor/proto/rappor_metric.pb.h"
-#include "components/rappor/rappor_service.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace extensions {
-
-namespace {
-
-scoped_refptr<Action> CreateAction(const std::string& api_name) {
-  scoped_refptr<Action> action = new Action("id",
-                                            base::Time::Now(),
-                                            Action::ACTION_DOM_ACCESS,
-                                            api_name);
-  action->set_arg_url(GURL("http://www.notarealhost.notarealtld"));
-  return action;
-}
-
-}  // namespace
-
-class TestRapporService : public rappor::RapporService {
- public:
-  TestRapporService();
-  virtual ~TestRapporService();
-
-  // Returns the active reports. This also clears the internal map of metrics
-  // as a biproduct, so if comparing numbers of reports, the comparison should
-  // be from the last time GetReports() was called (not from the beginning of
-  // the test).
-  rappor::RapporReports GetReports();
-};
-
-TestRapporService::TestRapporService() {
-  // Initialize the RapporService for testing.
-  SetCohortForTesting(0);
-  SetSecretForTesting(rappor::HmacByteVectorGenerator::GenerateEntropyInput());
-}
-
-TestRapporService::~TestRapporService() {}
-
-rappor::RapporReports TestRapporService::GetReports() {
-  rappor::RapporReports result;
-  rappor::RapporService::ExportMetrics(&result);
-  return result;
-}
-
-TEST(AdInjectionUtilUnittest, CheckActionForAdInjectionTest) {
-  TestRapporService rappor_service;
-  rappor::RapporReports reports = rappor_service.GetReports();
-  EXPECT_EQ(0, reports.report_size());
-
-  scoped_refptr<Action> modify_iframe_src =
-      CreateAction("HTMLIFrameElement.src");
-  ad_injection_util::CheckActionForAdInjection(modify_iframe_src,
-                                               &rappor_service);
-  reports = rappor_service.GetReports();
-  EXPECT_EQ(1, reports.report_size());
-
-  scoped_refptr<Action> modify_embed_src =
-      CreateAction("HTMLEmbedElement.src");
-  ad_injection_util::CheckActionForAdInjection(modify_embed_src,
-                                               &rappor_service);
-  reports = rappor_service.GetReports();
-  EXPECT_EQ(1, reports.report_size());
-
-  scoped_refptr<Action> modify_anchor_href =
-      CreateAction("HTMLAnchorElement.href");
-  ad_injection_util::CheckActionForAdInjection(modify_anchor_href,
-                                               &rappor_service);
-  reports = rappor_service.GetReports();
-  EXPECT_EQ(1, reports.report_size());
-
-  scoped_refptr<Action> harmless_action = CreateAction("Location.replace");
-  ad_injection_util::CheckActionForAdInjection(harmless_action,
-                                               &rappor_service);
-  reports = rappor_service.GetReports();
-  EXPECT_EQ(0, reports.report_size());
-}
-
-}  // namespace extensions
diff --git a/chrome/browser/extensions/activity_log/ad_network_database.cc b/chrome/browser/extensions/activity_log/ad_network_database.cc
new file mode 100644
index 0000000..4b4b45b
--- /dev/null
+++ b/chrome/browser/extensions/activity_log/ad_network_database.cc
@@ -0,0 +1,51 @@
+// 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.
+
+#include "chrome/browser/extensions/activity_log/ad_network_database.h"
+
+#include "base/lazy_instance.h"
+
+namespace extensions {
+
+namespace {
+
+class AdNetworkDatabaseFactory {
+ public:
+  AdNetworkDatabaseFactory();
+  ~AdNetworkDatabaseFactory();
+
+  void SetDatabase(scoped_ptr<AdNetworkDatabase> database);
+
+  const AdNetworkDatabase* database() const { return database_.get(); }
+
+ private:
+  scoped_ptr<AdNetworkDatabase> database_;
+};
+
+AdNetworkDatabaseFactory::AdNetworkDatabaseFactory() {}
+AdNetworkDatabaseFactory::~AdNetworkDatabaseFactory() {}
+
+void AdNetworkDatabaseFactory::SetDatabase(
+    scoped_ptr<AdNetworkDatabase> database) {
+  database_.reset(database.release());
+}
+
+base::LazyInstance<AdNetworkDatabaseFactory> g_factory =
+    LAZY_INSTANCE_INITIALIZER;
+
+}  // namespace
+
+AdNetworkDatabase::~AdNetworkDatabase() {}
+
+// static
+const AdNetworkDatabase* AdNetworkDatabase::Get() {
+  return g_factory.Get().database();
+}
+
+// static
+void AdNetworkDatabase::SetForTesting(scoped_ptr<AdNetworkDatabase> database) {
+  g_factory.Get().SetDatabase(database.Pass());
+}
+
+}  // namespace extensions
diff --git a/chrome/browser/extensions/activity_log/ad_network_database.h b/chrome/browser/extensions/activity_log/ad_network_database.h
new file mode 100644
index 0000000..a2e349b
--- /dev/null
+++ b/chrome/browser/extensions/activity_log/ad_network_database.h
@@ -0,0 +1,28 @@
+// 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.
+
+#ifndef CHROME_BROWSER_EXTENSIONS_ACTIVITY_LOG_AD_NETWORK_DATABASE_H_
+#define CHROME_BROWSER_EXTENSIONS_ACTIVITY_LOG_AD_NETWORK_DATABASE_H_
+
+#include "base/memory/scoped_ptr.h"
+
+class GURL;
+
+namespace extensions {
+class Action;
+
+// A database of ad networks.
+class AdNetworkDatabase {
+ public:
+  virtual ~AdNetworkDatabase();
+
+  static const AdNetworkDatabase* Get();
+  static void SetForTesting(scoped_ptr<AdNetworkDatabase> database);
+
+  virtual bool IsAdNetwork(const GURL& url) const = 0;
+};
+
+}  // namespace extensions
+
+#endif  // CHROME_BROWSER_EXTENSIONS_ACTIVITY_LOG_AD_NETWORK_DATABASE_H_
diff --git a/chrome/browser/extensions/activity_log/uma_policy.cc b/chrome/browser/extensions/activity_log/uma_policy.cc
index 3b21f66..229a1d8 100644
--- a/chrome/browser/extensions/activity_log/uma_policy.cc
+++ b/chrome/browser/extensions/activity_log/uma_policy.cc
@@ -6,36 +6,43 @@
 
 #include "base/metrics/histogram.h"
 #include "base/strings/stringprintf.h"
+#include "chrome/browser/browser_process.h"
 #include "chrome/browser/extensions/activity_log/activity_action_constants.h"
+#include "chrome/browser/extensions/activity_log/ad_network_database.h"
 #include "chrome/browser/sessions/session_id.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_list.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/common/extensions/dom_action_types.h"
+#include "chrome/common/url_constants.h"
 #include "content/public/browser/web_contents.h"
+#include "content/public/common/url_constants.h"
+
+namespace extensions {
 
 namespace {
 
 // For convenience.
-const int kNoStatus           = extensions::UmaPolicy::NONE;
-const int kContentScript      = 1 << extensions::UmaPolicy::CONTENT_SCRIPT;
-const int kReadDom            = 1 << extensions::UmaPolicy::READ_DOM;
-const int kModifiedDom        = 1 << extensions::UmaPolicy::MODIFIED_DOM;
-const int kDomMethod          = 1 << extensions::UmaPolicy::DOM_METHOD;
-const int kDocumentWrite      = 1 << extensions::UmaPolicy::DOCUMENT_WRITE;
-const int kInnerHtml          = 1 << extensions::UmaPolicy::INNER_HTML;
-const int kCreatedScript      = 1 << extensions::UmaPolicy::CREATED_SCRIPT;
-const int kCreatedIframe      = 1 << extensions::UmaPolicy::CREATED_IFRAME;
-const int kCreatedDiv         = 1 << extensions::UmaPolicy::CREATED_DIV;
-const int kCreatedLink        = 1 << extensions::UmaPolicy::CREATED_LINK;
-const int kCreatedInput       = 1 << extensions::UmaPolicy::CREATED_INPUT;
-const int kCreatedEmbed       = 1 << extensions::UmaPolicy::CREATED_EMBED;
-const int kCreatedObject      = 1 << extensions::UmaPolicy::CREATED_OBJECT;
+const int kNoStatus           = UmaPolicy::NONE;
+const int kContentScript      = 1 << UmaPolicy::CONTENT_SCRIPT;
+const int kReadDom            = 1 << UmaPolicy::READ_DOM;
+const int kModifiedDom        = 1 << UmaPolicy::MODIFIED_DOM;
+const int kDomMethod          = 1 << UmaPolicy::DOM_METHOD;
+const int kDocumentWrite      = 1 << UmaPolicy::DOCUMENT_WRITE;
+const int kInnerHtml          = 1 << UmaPolicy::INNER_HTML;
+const int kCreatedScript      = 1 << UmaPolicy::CREATED_SCRIPT;
+const int kCreatedIframe      = 1 << UmaPolicy::CREATED_IFRAME;
+const int kCreatedDiv         = 1 << UmaPolicy::CREATED_DIV;
+const int kCreatedLink        = 1 << UmaPolicy::CREATED_LINK;
+const int kCreatedInput       = 1 << UmaPolicy::CREATED_INPUT;
+const int kCreatedEmbed       = 1 << UmaPolicy::CREATED_EMBED;
+const int kCreatedObject      = 1 << UmaPolicy::CREATED_OBJECT;
+const int kAdInjected         = 1 << UmaPolicy::AD_INJECTED;
+const int kAdRemoved          = 1 << UmaPolicy::AD_REMOVED;
+const int kAdReplaced         = 1 << UmaPolicy::AD_REPLACED;
 
 }  // namespace
 
-namespace extensions {
-
 // Class constants, also used in testing. --------------------------------------
 
 const char UmaPolicy::kNumberOfTabs[]       = "num_tabs";
@@ -135,15 +142,35 @@
       ret_bit |= kCreatedObject;
     }
   }
+
+  const Action::InjectionType ad_injection =
+      action->DidInjectAd(g_browser_process->rappor_service());
+  switch (ad_injection) {
+    case Action::INJECTION_NEW_AD:
+      ret_bit |= kAdInjected;
+      break;
+    case Action::INJECTION_REMOVED_AD:
+      ret_bit |= kAdRemoved;
+      break;
+    case Action::INJECTION_REPLACED_AD:
+      ret_bit |= kAdReplaced;
+      break;
+    case Action::NO_AD_INJECTION:
+      break;
+    case Action::NUM_INJECTION_TYPES:
+      NOTREACHED();
+  };
+
   return ret_bit;
 }
 
 void UmaPolicy::HistogramOnClose(const std::string& url) {
   // Let's try to avoid histogramming useless URLs.
-  if (url == "about:blank" || url.empty() || url == "chrome://newtab/")
+  if (url.empty() || url == content::kAboutBlankURL ||
+      url == chrome::kChromeUINewTabURL)
     return;
 
-    int statuses[MAX_STATUS-1];
+  int statuses[MAX_STATUS - 1];
   std::memset(statuses, 0, sizeof(statuses));
 
   SiteMap::iterator site_lookup = url_status_.find(url);
@@ -186,6 +213,12 @@
                              statuses[CREATED_EMBED - 1]);
     UMA_HISTOGRAM_COUNTS_100(prefix + GetHistogramName(CREATED_OBJECT),
                              statuses[CREATED_OBJECT - 1]);
+    UMA_HISTOGRAM_COUNTS_100(prefix + GetHistogramName(AD_INJECTED),
+                             statuses[AD_INJECTED - 1]);
+    UMA_HISTOGRAM_COUNTS_100(prefix + GetHistogramName(AD_REMOVED),
+                             statuses[AD_REMOVED - 1]);
+    UMA_HISTOGRAM_COUNTS_100(prefix + GetHistogramName(AD_REPLACED),
+                             statuses[AD_REPLACED - 1]);
   } else {
     prefix += "Google.";
     UMA_HISTOGRAM_COUNTS_100(prefix + GetHistogramName(CONTENT_SCRIPT),
@@ -214,6 +247,12 @@
                              statuses[CREATED_EMBED - 1]);
     UMA_HISTOGRAM_COUNTS_100(prefix + GetHistogramName(CREATED_OBJECT),
                              statuses[CREATED_OBJECT - 1]);
+    UMA_HISTOGRAM_COUNTS_100(prefix + GetHistogramName(AD_INJECTED),
+                             statuses[AD_INJECTED - 1]);
+    UMA_HISTOGRAM_COUNTS_100(prefix + GetHistogramName(AD_REMOVED),
+                             statuses[AD_REMOVED - 1]);
+    UMA_HISTOGRAM_COUNTS_100(prefix + GetHistogramName(AD_REPLACED),
+                             statuses[AD_REPLACED - 1]);
   }
 }
 
@@ -278,7 +317,7 @@
   int32 tab_id = SessionID::IdForTab(contents);
   std::map<int, std::string>::iterator tab_it = tab_list_.find(tab_id);
   if (tab_it != tab_list_.end())
-   tab_list_.erase(tab_id);
+    tab_list_.erase(tab_id);
 
   CleanupClosedPage(url);
 }
@@ -305,7 +344,7 @@
 // We convert to a string in the hopes that this is faster than Replacements.
 std::string UmaPolicy::CleanURL(const GURL& gurl) {
   if (gurl.spec().empty())
-    return GURL("about:blank").spec();
+    return GURL(content::kAboutBlankURL).spec();
   if (!gurl.is_valid())
     return gurl.spec();
   if (!gurl.has_ref())
@@ -352,6 +391,12 @@
       return "CreatedEmbed";
     case CREATED_OBJECT:
       return "CreatedObject";
+    case AD_INJECTED:
+      return "AdInjected";
+    case AD_REMOVED:
+      return "AdRemoved";
+    case AD_REPLACED:
+      return "AdReplaced";
     case NONE:
     case MAX_STATUS:
     default:
diff --git a/chrome/browser/extensions/activity_log/uma_policy.h b/chrome/browser/extensions/activity_log/uma_policy.h
index 71794f2..e5ea34b 100644
--- a/chrome/browser/extensions/activity_log/uma_policy.h
+++ b/chrome/browser/extensions/activity_log/uma_policy.h
@@ -9,7 +9,6 @@
 #include <string>
 
 #include "chrome/browser/extensions/activity_log/activity_log_policy.h"
-
 #include "chrome/browser/ui/browser_list_observer.h"
 #include "chrome/browser/ui/tabs/tab_strip_model_observer.h"
 #include "url/gurl.h"
@@ -46,11 +45,15 @@
     CREATED_INPUT,
     CREATED_EMBED,
     CREATED_OBJECT,
+    AD_INJECTED,
+    AD_REMOVED,
+    AD_REPLACED,
     MAX_STATUS  // Insert new page statuses right before this one.
   };
 
   explicit UmaPolicy(Profile* profile);
 
+  // ActivityLogPolicy implementation.
   virtual void ProcessAction(scoped_refptr<Action> action) OVERRIDE;
   virtual void Close() OVERRIDE;
 
diff --git a/chrome/browser/extensions/api/activity_log_private/activity_log_private_api.cc b/chrome/browser/extensions/api/activity_log_private/activity_log_private_api.cc
index c6c748c..bb99213 100644
--- a/chrome/browser/extensions/api/activity_log_private/activity_log_private_api.cc
+++ b/chrome/browser/extensions/api/activity_log_private/activity_log_private_api.cc
@@ -14,7 +14,6 @@
 #include "chrome/common/extensions/api/activity_log_private.h"
 #include "chrome/common/pref_names.h"
 #include "content/public/browser/browser_context.h"
-#include "extensions/browser/extension_system.h"
 #include "extensions/browser/extension_system_provider.h"
 #include "extensions/browser/extensions_browser_client.h"
 #include "extensions/common/features/feature.h"
@@ -46,14 +45,13 @@
 
 ActivityLogAPI::ActivityLogAPI(content::BrowserContext* context)
     : browser_context_(context), initialized_(false) {
-  if (!ExtensionSystem::Get(browser_context_)
-           ->event_router()) {  // Check for testing.
+  if (!EventRouter::Get(browser_context_)) {  // Check for testing.
     DVLOG(1) << "ExtensionSystem event_router does not exist.";
     return;
   }
   activity_log_ = extensions::ActivityLog::GetInstance(browser_context_);
   DCHECK(activity_log_);
-  ExtensionSystem::Get(browser_context_)->event_router()->RegisterObserver(
+  EventRouter::Get(browser_context_)->RegisterObserver(
       this, activity_log_private::OnExtensionActivity::kEventName);
   activity_log_->AddObserver(this);
   initialized_ = true;
@@ -67,8 +65,7 @@
     DVLOG(1) << "ExtensionSystem event_router does not exist.";
     return;
   }
-  ExtensionSystem::Get(browser_context_)->event_router()->UnregisterObserver(
-      this);
+  EventRouter::Get(browser_context_)->UnregisterObserver(this);
   activity_log_->RemoveObserver(this);
 }
 
@@ -95,8 +92,7 @@
       new Event(activity_log_private::OnExtensionActivity::kEventName,
           value.Pass()));
   event->restrict_to_browser_context = browser_context_;
-  ExtensionSystem::Get(browser_context_)->event_router()->BroadcastEvent(
-      event.Pass());
+  EventRouter::Get(browser_context_)->BroadcastEvent(event.Pass());
 }
 
 bool ActivityLogPrivateGetExtensionActivitiesFunction::RunImpl() {
diff --git a/chrome/browser/extensions/api/activity_log_private/activity_log_private_apitest.cc b/chrome/browser/extensions/api/activity_log_private/activity_log_private_apitest.cc
index acfff92..77c030f 100644
--- a/chrome/browser/extensions/api/activity_log_private/activity_log_private_apitest.cc
+++ b/chrome/browser/extensions/api/activity_log_private/activity_log_private_apitest.cc
@@ -56,7 +56,7 @@
 // The test extension sends a message to its 'friend'. The test completes
 // if it successfully sees the 'friend' receive the message.
 IN_PROC_BROWSER_TEST_F(ActivityLogApiTest, MAYBE_TriggerEvent) {
-  ActivityLog::GetInstance(profile())->SetWatchdogAppActive(true);
+  ActivityLog::GetInstance(profile())->SetWatchdogAppActiveForTesting(true);
 
   host_resolver()->AddRule("*", "127.0.0.1");
   ASSERT_TRUE(StartEmbeddedTestServer());
@@ -67,7 +67,7 @@
       test_data_dir_.AppendASCII("activity_log_private/friend"));
   ASSERT_TRUE(friend_extension);
   ASSERT_TRUE(RunExtensionTest("activity_log_private/test"));
-  ActivityLog::GetInstance(profile())->SetWatchdogAppActive(false);
+  ActivityLog::GetInstance(profile())->SetWatchdogAppActiveForTesting(false);
 }
 
 }  // namespace extensions
diff --git a/chrome/browser/extensions/api/alarms/alarm_manager.cc b/chrome/browser/extensions/api/alarms/alarm_manager.cc
index c3d8ac5..cc3267d 100644
--- a/chrome/browser/extensions/api/alarms/alarm_manager.cc
+++ b/chrome/browser/extensions/api/alarms/alarm_manager.cc
@@ -49,8 +49,7 @@
     args->Append(alarm.js_alarm->ToValue().release());
     scoped_ptr<Event> event(new Event(alarms::OnAlarm::kEventName,
                                       args.Pass()));
-    ExtensionSystem::Get(browser_context_)
-        ->event_router()
+    EventRouter::Get(browser_context_)
         ->DispatchEventToExtension(extension_id, event.Pass());
   }
 
@@ -101,7 +100,8 @@
     : profile_(Profile::FromBrowserContext(context)),
       clock_(new base::DefaultClock()),
       delegate_(new DefaultAlarmDelegate(context)) {
-  registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
+  registrar_.Add(this,
+                 chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
                  content::Source<Profile>(profile_));
   registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNINSTALLED,
                  content::Source<Profile>(profile_));
@@ -415,7 +415,7 @@
     const content::NotificationSource& source,
     const content::NotificationDetails& details) {
   switch (type) {
-    case chrome::NOTIFICATION_EXTENSION_LOADED: {
+    case chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED: {
       const Extension* extension =
           content::Details<const Extension>(details).ptr();
       StateStore* storage = ExtensionSystem::Get(profile_)->state_store();
diff --git a/chrome/browser/extensions/api/app_window/app_window_apitest.cc b/chrome/browser/extensions/api/app_window/app_window_apitest.cc
index 4182090..9f0f546 100644
--- a/chrome/browser/extensions/api/app_window/app_window_apitest.cc
+++ b/chrome/browser/extensions/api/app_window/app_window_apitest.cc
@@ -15,10 +15,6 @@
 #include "ui/base/base_window.h"
 #include "ui/gfx/rect.h"
 
-#ifdef TOOLKIT_GTK
-#include "content/public/test/test_utils.h"
-#endif
-
 using apps::AppWindow;
 
 namespace {
diff --git a/chrome/browser/extensions/api/audio/audio_api.cc b/chrome/browser/extensions/api/audio/audio_api.cc
index ce252e6..70e849f 100644
--- a/chrome/browser/extensions/api/audio/audio_api.cc
+++ b/chrome/browser/extensions/api/audio/audio_api.cc
@@ -9,7 +9,6 @@
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/common/extensions/api/audio.h"
 #include "extensions/browser/event_router.h"
-#include "extensions/browser/extension_system.h"
 
 namespace extensions {
 
@@ -39,13 +38,11 @@
 }
 
 void AudioAPI::OnDeviceChanged() {
-  if (browser_context_ &&
-      ExtensionSystem::Get(browser_context_)->event_router()) {
+  if (browser_context_ && EventRouter::Get(browser_context_)) {
     scoped_ptr<Event> event(new Event(
         audio::OnDeviceChanged::kEventName,
         scoped_ptr<base::ListValue>(new base::ListValue())));
-    ExtensionSystem::Get(browser_context_)->event_router()->BroadcastEvent(
-        event.Pass());
+    EventRouter::Get(browser_context_)->BroadcastEvent(event.Pass());
   }
 }
 
diff --git a/chrome/browser/extensions/api/automation/automation_apitest.cc b/chrome/browser/extensions/api/automation/automation_apitest.cc
index 355e7f9..5e38d0b 100644
--- a/chrome/browser/extensions/api/automation/automation_apitest.cc
+++ b/chrome/browser/extensions/api/automation/automation_apitest.cc
@@ -2,17 +2,58 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "base/files/file_path.h"
+#include "base/path_service.h"
+#include "base/strings/string_number_conversions.h"
 #include "chrome/browser/extensions/extension_apitest.h"
+#include "chrome/browser/extensions/extension_test_message_listener.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
+#include "chrome/common/chrome_paths.h"
 #include "chrome/common/chrome_switches.h"
+#include "chrome/test/base/ui_test_utils.h"
 #include "content/public/browser/render_widget_host.h"
 #include "content/public/browser/render_widget_host_view.h"
 #include "content/public/browser/web_contents.h"
+#include "net/dns/mock_host_resolver.h"
+#include "net/test/embedded_test_server/embedded_test_server.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace extensions {
 
+namespace {
+static const char kDomain[] = "a.com";
+static const char kSitesDir[] = "automation/sites";
+static const char kGotTree[] = "got_tree";
+}  // anonymous namespace
+
 class AutomationApiTest : public ExtensionApiTest {
+ protected:
+  GURL GetURLForPath(const std::string& host, const std::string& path) {
+    std::string port = base::IntToString(embedded_test_server()->port());
+    GURL::Replacements replacements;
+    replacements.SetHostStr(host);
+    replacements.SetPortStr(port);
+    GURL url =
+        embedded_test_server()->GetURL(path).ReplaceComponents(replacements);
+    return url;
+  }
+
+  void StartEmbeddedTestServer() {
+    base::FilePath test_data;
+    ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_data));
+    embedded_test_server()->ServeFilesFromDirectory(
+        test_data.AppendASCII("extensions/api_test")
+        .AppendASCII(kSitesDir));
+    ASSERT_TRUE(ExtensionApiTest::StartEmbeddedTestServer());
+    host_resolver()->AddRule("*", embedded_test_server()->base_url().host());
+  }
+
+  void LoadPage() {
+    StartEmbeddedTestServer();
+    const GURL url = GetURLForPath(kDomain, "/index.html");
+    ui_test_utils::NavigateToURL(browser(), url);
+  }
+
  public:
   virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
     ExtensionApiTest::SetUpCommandLine(command_line);
@@ -24,13 +65,9 @@
   }
 };
 
-// TODO(dtseng): See crbug.com/360297.
-#if defined(OS_MACOSX)
-#define MAYBE_SanityCheck DISABLED_SanityCheck
-#else
-#define MAYBE_SanityCheck SanityCheck
-#endif  // defined(OS_MACOSX)
-IN_PROC_BROWSER_TEST_F(AutomationApiTest, MAYBE_SanityCheck) {
+IN_PROC_BROWSER_TEST_F(AutomationApiTest, TestRendererAccessibilityEnabled) {
+  LoadPage();
+
   ASSERT_EQ(1, browser()->tab_strip_model()->count());
   content::WebContents* const tab =
       browser()->tab_strip_model()->GetWebContentsAt(0);
@@ -41,7 +78,11 @@
   ASSERT_FALSE(rwh->IsFullAccessibilityModeForTesting());
   ASSERT_FALSE(rwh->IsTreeOnlyAccessibilityModeForTesting());
 
-  ASSERT_TRUE(RunComponentExtensionTest("automation/sanity_check")) << message_;
+  base::FilePath extension_path =
+      test_data_dir_.AppendASCII("automation/basic");
+  ExtensionTestMessageListener got_tree(kGotTree, false /* no reply */);
+  LoadExtension(extension_path);
+  ASSERT_TRUE(got_tree.WaitUntilSatisfied());
 
   rwh = tab->GetRenderWidgetHostView()->GetRenderWidgetHost();
   ASSERT_NE((content::RenderWidgetHost*)NULL, rwh)
@@ -50,4 +91,34 @@
   ASSERT_TRUE(rwh->IsTreeOnlyAccessibilityModeForTesting());
 }
 
+// TODO(dtseng): See crbug.com/360297.
+#if defined(OS_MACOSX)
+#define MAYBE_SanityCheck DISABLED_SanityCheck
+#else
+#define MAYBE_SanityCheck SanityCheck
+#endif  // defined(OS_MACOSX)
+IN_PROC_BROWSER_TEST_F(AutomationApiTest, MAYBE_SanityCheck) {
+  StartEmbeddedTestServer();
+  ASSERT_TRUE(RunExtensionSubtest("automation/tests", "sanity_check.html"))
+      << message_;
+}
+
+IN_PROC_BROWSER_TEST_F(AutomationApiTest, Events) {
+  LoadPage();
+  ASSERT_TRUE(RunExtensionSubtest("automation/tests", "events.html"))
+      << message_;
+}
+
+IN_PROC_BROWSER_TEST_F(AutomationApiTest, Actions) {
+  LoadPage();
+  ASSERT_TRUE(RunExtensionSubtest("automation/tests", "actions.html"))
+      << message_;
+}
+
+IN_PROC_BROWSER_TEST_F(AutomationApiTest, Location) {
+  LoadPage();
+  ASSERT_TRUE(RunExtensionSubtest("automation/tests", "location.html"))
+      << message_;
+}
+
 }  // namespace extensions
diff --git a/chrome/browser/extensions/api/automation_internal/automation_internal_api.cc b/chrome/browser/extensions/api/automation_internal/automation_internal_api.cc
index 5e24a8b..9c77eda 100644
--- a/chrome/browser/extensions/api/automation_internal/automation_internal_api.cc
+++ b/chrome/browser/extensions/api/automation_internal/automation_internal_api.cc
@@ -4,56 +4,29 @@
 
 #include "chrome/browser/extensions/api/automation_internal/automation_internal_api.h"
 
+#include <vector>
+
 #include "base/command_line.h"
-#include "base/lazy_instance.h"
-#include "base/strings/string_number_conversions.h"
-#include "base/values.h"
+#include "chrome/browser/extensions/api/automation_internal/automation_util.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/common/chrome_switches.h"
 #include "chrome/common/extensions/api/automation_internal.h"
 #include "content/public/browser/ax_event_notification_details.h"
-#include "content/public/browser/browser_accessibility_state.h"
-#include "content/public/browser/browser_thread.h"
-#include "content/public/browser/notification_service.h"
-#include "content/public/browser/notification_source.h"
-#include "content/public/browser/notification_types.h"
 #include "content/public/browser/render_process_host.h"
 #include "content/public/browser/render_view_host.h"
 #include "content/public/browser/render_widget_host.h"
-#include "content/public/browser/render_widget_host.h"
 #include "content/public/browser/render_widget_host_view.h"
 #include "content/public/browser/web_contents.h"
-#include "extensions/browser/event_router.h"
-#include "extensions/browser/extension_system.h"
-#include "ui/accessibility/ax_enums.h"
-#include "ui/accessibility/ax_node_data.h"
 
 namespace extensions {
 class AutomationWebContentsObserver;
-} // namespace extensions
+}  // namespace extensions
 
 DEFINE_WEB_CONTENTS_USER_DATA_KEY(extensions::AutomationWebContentsObserver);
 
 namespace extensions {
 
-using ui::AXNodeData;
-
-namespace {
-
-// Dispatches events to the extension message service.
-void DispatchEvent(content::BrowserContext* context,
-                   const std::string& event_name,
-                   scoped_ptr<base::ListValue> args) {
-  if (context && extensions::ExtensionSystem::Get(context)->event_router()) {
-    scoped_ptr<Event> event(new Event(event_name, args.Pass()));
-    event->restrict_to_browser_context = context;
-    ExtensionSystem::Get(context)->event_router()->BroadcastEvent(event.Pass());
-  }
-}
-
-}  // namespace
-
 // Helper class that receives accessibility data from |WebContents|.
 class AutomationWebContentsObserver
     : public content::WebContentsObserver,
@@ -65,39 +38,8 @@
   virtual void AccessibilityEventReceived(
       const std::vector<content::AXEventNotificationDetails>& details)
       OVERRIDE {
-    if (!CommandLine::ForCurrentProcess()->HasSwitch(
-            switches::kEnableAutomationAPI)) {
-      return;
-    }
-
-    using api::automation_internal::AXEventParams;
-
-    std::vector<content::AXEventNotificationDetails>::const_iterator iter =
-        details.begin();
-    for (; iter != details.end(); ++iter) {
-      const content::AXEventNotificationDetails& event = *iter;
-
-      AXEventParams ax_tree_update;
-      ax_tree_update.process_id = event.process_id;
-      ax_tree_update.routing_id = event.routing_id;
-      ax_tree_update.event_type = ToString(iter->event_type);
-
-      for (size_t i = 0; i < event.nodes.size(); ++i) {
-        linked_ptr<api::automation_internal::AXNodeData> out_node(
-            new api::automation_internal::AXNodeData());
-        PopulateNodeData(event.nodes[i], out_node);
-        ax_tree_update.nodes.push_back(out_node);
-      }
-
-      // TODO(dtseng/aboxhall): Why are we sending only one update at a time? We
-      // should match the behavior from renderer -> browser and send a
-      // collection of tree updates over (to the extension); see
-      // |AccessibilityHostMsg_EventParams| and |AccessibilityHostMsg_Events|.
-      DispatchEvent(browser_context_,
-          api::automation_internal::OnAccessibilityEvent::kEventName,
-          api::automation_internal::OnAccessibilityEvent::Create(
-              ax_tree_update));
-    }
+    automation_util::DispatchAccessibilityEventsToAutomation(
+        details, browser_context_);
   }
 
  private:
@@ -108,93 +50,6 @@
       : content::WebContentsObserver(web_contents),
         browser_context_(web_contents->GetBrowserContext()) {}
 
-  void PopulateNodeData(const ui::AXNodeData& node_data,
-      linked_ptr<api::automation_internal::AXNodeData>& out_node_data) {
-    out_node_data->id = node_data.id;
-    out_node_data->role = ToString(node_data.role);
-
-    uint32 state_pos = 0, state_shifter = node_data.state;
-    while (state_shifter) {
-      if (state_shifter & 1) {
-        out_node_data->state.additional_properties.SetBoolean(
-            ToString(static_cast<ui::AXState>(state_pos)), true);
-      }
-      state_shifter = state_shifter >> 1;
-      state_pos++;
-    }
-
-    if (!node_data.bool_attributes.empty()) {
-      out_node_data->bool_attributes.reset(
-          new api::automation_internal::AXNodeData::BoolAttributes());
-      for (size_t i = 0; i < node_data.bool_attributes.size(); ++i) {
-        std::pair<ui::AXBoolAttribute, bool> attr =
-            node_data.bool_attributes[i];
-        out_node_data->bool_attributes->additional_properties.SetBoolean(
-            ToString(attr.first), attr.second);
-      }
-    }
-
-    if (!node_data.float_attributes.empty()) {
-      out_node_data->float_attributes.reset(
-          new api::automation_internal::AXNodeData::FloatAttributes());
-      for (size_t i = 0; i < node_data.float_attributes.size(); ++i) {
-        std::pair<ui::AXFloatAttribute, float> attr =
-            node_data.float_attributes[i];
-        out_node_data->float_attributes->additional_properties.SetDouble(
-            ToString(attr.first), attr.second);
-      }
-    }
-
-    if (!node_data.html_attributes.empty()) {
-      out_node_data->html_attributes.reset(
-          new api::automation_internal::AXNodeData::HtmlAttributes());
-      for (size_t i = 0; i < node_data.html_attributes.size(); ++i) {
-        std::pair<std::string, std::string> attr = node_data.html_attributes[i];
-        out_node_data->html_attributes->additional_properties.SetString(
-            attr.first, attr.second);
-      }
-    }
-
-    if (!node_data.int_attributes.empty()) {
-      out_node_data->int_attributes.reset(
-          new api::automation_internal::AXNodeData::IntAttributes());
-      for (size_t i = 0; i < node_data.int_attributes.size(); ++i) {
-        std::pair<ui::AXIntAttribute, int> attr = node_data.int_attributes[i];
-        out_node_data->int_attributes->additional_properties.SetInteger(
-            ToString(attr.first), attr.second);
-      }
-    }
-
-    if (!node_data.intlist_attributes.empty()) {
-      out_node_data->intlist_attributes.reset(
-          new api::automation_internal::AXNodeData::IntlistAttributes());
-      for (size_t i = 0; i < node_data.intlist_attributes.size(); ++i) {
-        std::pair<ui::AXIntListAttribute, std::vector<int32> > attr =
-            node_data.intlist_attributes[i];
-        base::ListValue* intlist = new base::ListValue();
-        for (size_t j = 0; j < attr.second.size(); ++j)
-          intlist->AppendInteger(attr.second[j]);
-        out_node_data->intlist_attributes->additional_properties.Set(
-            ToString(attr.first), intlist);
-      }
-    }
-
-    if (!node_data.string_attributes.empty()) {
-      out_node_data->string_attributes.reset(
-          new api::automation_internal::AXNodeData::StringAttributes());
-      for (size_t i = 0; i < node_data.string_attributes.size(); ++i) {
-        std::pair<ui::AXStringAttribute, std::string> attr =
-            node_data.string_attributes[i];
-        out_node_data->string_attributes->additional_properties.SetString(
-            ToString(attr.first), attr.second);
-      }
-    }
-
-    for (size_t i = 0; i < node_data.child_ids.size(); ++i) {
-      out_node_data->child_ids.push_back(node_data.child_ids[i]);
-    }
-  }
-
   content::BrowserContext* browser_context_;
 
   DISALLOW_COPY_AND_ASSIGN(AutomationWebContentsObserver);
@@ -221,14 +76,15 @@
   if (!rwh)
     return false;
 
-  AutomationWebContentsObserver::CreateForWebContents(contents);
-
-  rwh->EnableTreeOnlyAccessibilityMode();
-
   results_ = api::automation_internal::EnableCurrentTab::Results::Create(
       rwh->GetProcess()->GetID(), rwh->GetRoutingID());
 
   SendResponse(true);
+
+  AutomationWebContentsObserver::CreateForWebContents(contents);
+
+  rwh->EnableTreeOnlyAccessibilityMode();
+
   return true;
 }
 
diff --git a/chrome/browser/extensions/api/automation_internal/automation_internal_api.h b/chrome/browser/extensions/api/automation_internal/automation_internal_api.h
index 141ea18..f82867b 100644
--- a/chrome/browser/extensions/api/automation_internal/automation_internal_api.h
+++ b/chrome/browser/extensions/api/automation_internal/automation_internal_api.h
@@ -8,7 +8,6 @@
 #include "chrome/browser/extensions/chrome_extension_function.h"
 #include "content/public/browser/web_contents_observer.h"
 #include "content/public/browser/web_contents_user_data.h"
-#include "extensions/browser/event_router.h"
 
 namespace content {
 struct AXEventNotificationDetails;
diff --git a/chrome/browser/extensions/api/automation_internal/automation_util.cc b/chrome/browser/extensions/api/automation_internal/automation_util.cc
new file mode 100644
index 0000000..233bc28
--- /dev/null
+++ b/chrome/browser/extensions/api/automation_internal/automation_util.cc
@@ -0,0 +1,169 @@
+// 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.
+
+#include "chrome/browser/extensions/api/automation_internal/automation_util.h"
+
+#include <string>
+#include <utility>
+
+#include "base/command_line.h"
+#include "base/values.h"
+#include "chrome/common/chrome_switches.h"
+#include "chrome/common/extensions/api/automation_internal.h"
+#include "extensions/browser/event_router.h"
+#include "extensions/browser/extension_system.h"
+#include "ui/accessibility/ax_enums.h"
+#include "ui/accessibility/ax_node_data.h"
+
+namespace extensions {
+
+namespace {
+
+void PopulateNodeData(const ui::AXNodeData& node_data,
+    linked_ptr< api::automation_internal::AXNodeData>& out_node_data) {
+  out_node_data->id = node_data.id;
+  out_node_data->role = ToString(node_data.role);
+
+  uint32 state_pos = 0, state_shifter = node_data.state;
+  while (state_shifter) {
+    if (state_shifter & 1) {
+      out_node_data->state.additional_properties.SetBoolean(
+          ToString(static_cast<ui::AXState>(state_pos)), true);
+    }
+    state_shifter = state_shifter >> 1;
+    state_pos++;
+  }
+
+  out_node_data->location.left = node_data.location.x();
+  out_node_data->location.top = node_data.location.y();
+  out_node_data->location.width = node_data.location.width();
+  out_node_data->location.height = node_data.location.height();
+
+  if (!node_data.bool_attributes.empty()) {
+    out_node_data->bool_attributes.reset(
+        new api::automation_internal::AXNodeData::BoolAttributes());
+    for (size_t i = 0; i < node_data.bool_attributes.size(); ++i) {
+      std::pair<ui::AXBoolAttribute, bool> attr =
+          node_data.bool_attributes[i];
+      out_node_data->bool_attributes->additional_properties.SetBoolean(
+          ToString(attr.first), attr.second);
+    }
+  }
+
+  if (!node_data.float_attributes.empty()) {
+    out_node_data->float_attributes.reset(
+        new api::automation_internal::AXNodeData::FloatAttributes());
+    for (size_t i = 0; i < node_data.float_attributes.size(); ++i) {
+      std::pair<ui::AXFloatAttribute, float> attr =
+          node_data.float_attributes[i];
+      out_node_data->float_attributes->additional_properties.SetDouble(
+          ToString(attr.first), attr.second);
+    }
+  }
+
+  if (!node_data.html_attributes.empty()) {
+    out_node_data->html_attributes.reset(
+        new api::automation_internal::AXNodeData::HtmlAttributes());
+    for (size_t i = 0; i < node_data.html_attributes.size(); ++i) {
+      std::pair<std::string, std::string> attr = node_data.html_attributes[i];
+      out_node_data->html_attributes->additional_properties.SetString(
+          attr.first, attr.second);
+    }
+  }
+
+  if (!node_data.int_attributes.empty()) {
+    out_node_data->int_attributes.reset(
+        new api::automation_internal::AXNodeData::IntAttributes());
+    for (size_t i = 0; i < node_data.int_attributes.size(); ++i) {
+      std::pair<ui::AXIntAttribute, int> attr = node_data.int_attributes[i];
+      out_node_data->int_attributes->additional_properties.SetInteger(
+          ToString(attr.first), attr.second);
+    }
+  }
+
+  if (!node_data.intlist_attributes.empty()) {
+    out_node_data->intlist_attributes.reset(
+        new api::automation_internal::AXNodeData::IntlistAttributes());
+    for (size_t i = 0; i < node_data.intlist_attributes.size(); ++i) {
+      std::pair<ui::AXIntListAttribute, std::vector<int32> > attr =
+          node_data.intlist_attributes[i];
+      base::ListValue* intlist = new base::ListValue();
+      for (size_t j = 0; j < attr.second.size(); ++j)
+        intlist->AppendInteger(attr.second[j]);
+      out_node_data->intlist_attributes->additional_properties.Set(
+          ToString(attr.first), intlist);
+    }
+  }
+
+  if (!node_data.string_attributes.empty()) {
+    out_node_data->string_attributes.reset(
+        new api::automation_internal::AXNodeData::StringAttributes());
+    for (size_t i = 0; i < node_data.string_attributes.size(); ++i) {
+      std::pair<ui::AXStringAttribute, std::string> attr =
+          node_data.string_attributes[i];
+      out_node_data->string_attributes->additional_properties.SetString(
+          ToString(attr.first), attr.second);
+    }
+  }
+
+  for (size_t i = 0; i < node_data.child_ids.size(); ++i) {
+    out_node_data->child_ids.push_back(node_data.child_ids[i]);
+  }
+}
+
+void DispatchEventInternal(content::BrowserContext* context,
+                           const std::string& event_name,
+                           scoped_ptr<base::ListValue> args) {
+  if (context && ExtensionSystem::Get(context)->event_router()) {
+    scoped_ptr<Event> event(new Event(event_name, args.Pass()));
+    event->restrict_to_browser_context = context;
+    ExtensionSystem::Get(context)->event_router()->BroadcastEvent(event.Pass());
+  }
+}
+
+}  //namespace
+
+namespace automation_util {
+
+void DispatchAccessibilityEventsToAutomation(
+    const std::vector<content::AXEventNotificationDetails>& details,
+    content::BrowserContext* browser_context) {
+  if (!CommandLine::ForCurrentProcess()->HasSwitch(
+          switches::kEnableAutomationAPI)) {
+    return;
+  }
+
+  using api::automation_internal::AXEventParams;
+
+  std::vector<content::AXEventNotificationDetails>::const_iterator iter =
+      details.begin();
+  for (; iter != details.end(); ++iter) {
+    const content::AXEventNotificationDetails& event = *iter;
+
+    AXEventParams ax_tree_update;
+    ax_tree_update.process_id = event.process_id;
+    ax_tree_update.routing_id = event.routing_id;
+    ax_tree_update.event_type = ToString(iter->event_type);
+    ax_tree_update.target_id = event.id;
+
+    for (size_t i = 0; i < event.nodes.size(); ++i) {
+      linked_ptr<api::automation_internal::AXNodeData> out_node(
+          new api::automation_internal::AXNodeData());
+      PopulateNodeData(event.nodes[i], out_node);
+      ax_tree_update.nodes.push_back(out_node);
+    }
+
+    // TODO(dtseng/aboxhall): Why are we sending only one update at a time? We
+    // should match the behavior from renderer -> browser and send a
+    // collection of tree updates over (to the extension); see
+    // |AccessibilityHostMsg_EventParams| and |AccessibilityHostMsg_Events|.
+    DispatchEventInternal(browser_context,
+        api::automation_internal::OnAccessibilityEvent::kEventName,
+        api::automation_internal::OnAccessibilityEvent::Create(ax_tree_update));
+  }
+}
+
+}  // namespace automation_util
+
+}  // namespace extensions
diff --git a/chrome/browser/extensions/api/automation_internal/automation_util.h b/chrome/browser/extensions/api/automation_internal/automation_util.h
new file mode 100644
index 0000000..8b51add
--- /dev/null
+++ b/chrome/browser/extensions/api/automation_internal/automation_util.h
@@ -0,0 +1,36 @@
+// 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.
+
+#ifndef CHROME_BROWSER_EXTENSIONS_API_AUTOMATION_INTERNAL_AUTOMATION_UTIL_H_
+#define CHROME_BROWSER_EXTENSIONS_API_AUTOMATION_INTERNAL_AUTOMATION_UTIL_H_
+
+#include <vector>
+
+#include "chrome/common/extensions/api/automation_internal.h"
+#include "content/public/browser/ax_event_notification_details.h"
+
+namespace content {
+class BrowserContext;
+}  // namespace content
+
+namespace ui {
+struct AXNodeData;
+}  // namespace ui
+
+namespace extensions {
+
+// Shared utility functions for the Automation API.
+namespace automation_util {
+
+// Dispatch events through the Automation API making any necessary conversions
+// from accessibility to Automation types.
+void DispatchAccessibilityEventsToAutomation(
+    const std::vector<content::AXEventNotificationDetails>& details,
+    content::BrowserContext* browser_context);
+
+}  // namespace automation_util
+
+}  // namespace extensions
+
+#endif  // CHROME_BROWSER_EXTENSIONS_API_AUTOMATION_INTERNAL_AUTOMATION_UTIL_H_
diff --git a/chrome/browser/extensions/api/bluetooth/bluetooth_api.cc b/chrome/browser/extensions/api/bluetooth/bluetooth_api.cc
index ce04129..0a67615 100644
--- a/chrome/browser/extensions/api/bluetooth/bluetooth_api.cc
+++ b/chrome/browser/extensions/api/bluetooth/bluetooth_api.cc
@@ -22,7 +22,6 @@
 #include "device/bluetooth/bluetooth_service_record.h"
 #include "device/bluetooth/bluetooth_socket.h"
 #include "extensions/browser/event_router.h"
-#include "extensions/browser/extension_system.h"
 #include "extensions/common/permissions/permissions_data.h"
 #include "net/base/io_buffer.h"
 
@@ -155,14 +154,12 @@
 BluetoothAPI::BluetoothAPI(content::BrowserContext* context)
     : browser_context_(context) {
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  ExtensionSystem::Get(browser_context_)->event_router()->RegisterObserver(
-      this, bluetooth::OnAdapterStateChanged::kEventName);
-  ExtensionSystem::Get(browser_context_)->event_router()->RegisterObserver(
-      this, bluetooth::OnDeviceAdded::kEventName);
-  ExtensionSystem::Get(browser_context_)->event_router()->RegisterObserver(
-      this, bluetooth::OnDeviceChanged::kEventName);
-  ExtensionSystem::Get(browser_context_)->event_router()->RegisterObserver(
-      this, bluetooth::OnDeviceRemoved::kEventName);
+  EventRouter* event_router = EventRouter::Get(browser_context_);
+  event_router->RegisterObserver(this,
+                                 bluetooth::OnAdapterStateChanged::kEventName);
+  event_router->RegisterObserver(this, bluetooth::OnDeviceAdded::kEventName);
+  event_router->RegisterObserver(this, bluetooth::OnDeviceChanged::kEventName);
+  event_router->RegisterObserver(this, bluetooth::OnDeviceRemoved::kEventName);
 }
 
 BluetoothAPI::~BluetoothAPI() {}
@@ -202,8 +199,7 @@
 
 void BluetoothAPI::Shutdown() {
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  ExtensionSystem::Get(browser_context_)->event_router()->UnregisterObserver(
-      this);
+  EventRouter::Get(browser_context_)->UnregisterObserver(this);
 }
 
 void BluetoothAPI::OnListenerAdded(const EventListenerInfo& details) {
@@ -293,7 +289,7 @@
   scoped_ptr<Event> event(
       new Event(bluetooth::OnConnection::kEventName, args.Pass()));
 
-  EventRouter* router = ExtensionSystem::Get(context)->event_router();
+  EventRouter* router = EventRouter::Get(context);
   if (router)
     router->DispatchEventToExtension(params.extension_id, event.Pass());
 }
diff --git a/chrome/browser/extensions/api/bluetooth/bluetooth_api_pairing_delegate.cc b/chrome/browser/extensions/api/bluetooth/bluetooth_api_pairing_delegate.cc
index 7591444..615f79a 100644
--- a/chrome/browser/extensions/api/bluetooth/bluetooth_api_pairing_delegate.cc
+++ b/chrome/browser/extensions/api/bluetooth/bluetooth_api_pairing_delegate.cc
@@ -104,8 +104,7 @@
       bt_private::OnPairing::Create(pairing_event);
   scoped_ptr<Event> event(
       new Event(bt_private::OnPairing::kEventName, args.Pass()));
-  ExtensionSystem::Get(browser_context_)
-      ->event_router()
+  EventRouter::Get(browser_context_)
       ->DispatchEventToExtension(extension_id_, event.Pass());
 }
 
diff --git a/chrome/browser/extensions/api/bluetooth/bluetooth_api_unittest.cc b/chrome/browser/extensions/api/bluetooth/bluetooth_api_unittest.cc
index b13909f..45da930 100644
--- a/chrome/browser/extensions/api/bluetooth/bluetooth_api_unittest.cc
+++ b/chrome/browser/extensions/api/bluetooth/bluetooth_api_unittest.cc
@@ -157,8 +157,8 @@
   // receiver(s).
   base::RunLoop().RunUntilIdle();
 
-  FakeEventRouter* fake_event_router = static_cast<FakeEventRouter*>(
-      ExtensionSystem::Get(test_profile_)->event_router());
+  FakeEventRouter* fake_event_router =
+      static_cast<FakeEventRouter*>(EventRouter::Get(test_profile_));
 
   ASSERT_TRUE(fake_event_router->event());
   EXPECT_STREQ(kTestExtensionId, fake_event_router->extension_id().c_str());
@@ -197,8 +197,8 @@
   // receiver(s).
   base::RunLoop().RunUntilIdle();
 
-  FakeEventRouter* fake_event_router = static_cast<FakeEventRouter*>(
-      ExtensionSystem::Get(test_profile_)->event_router());
+  FakeEventRouter* fake_event_router =
+      static_cast<FakeEventRouter*>(EventRouter::Get(test_profile_));
   EXPECT_TRUE(fake_event_router->event() == NULL);
 
   EXPECT_CALL(*mock_adapter_, RemoveObserver(testing::_)).Times(1);
diff --git a/chrome/browser/extensions/api/bluetooth/bluetooth_event_router.cc b/chrome/browser/extensions/api/bluetooth/bluetooth_event_router.cc
index a440c49..31a26c1 100644
--- a/chrome/browser/extensions/api/bluetooth/bluetooth_event_router.cc
+++ b/chrome/browser/extensions/api/bluetooth/bluetooth_event_router.cc
@@ -31,7 +31,6 @@
 #include "device/bluetooth/bluetooth_socket.h"
 #include "extensions/browser/event_router.h"
 #include "extensions/browser/extension_host.h"
-#include "extensions/browser/extension_system.h"
 
 namespace extensions {
 
@@ -336,8 +335,7 @@
   scoped_ptr<Event> event(new Event(
       bluetooth::OnAdapterStateChanged::kEventName,
       args.Pass()));
-  ExtensionSystem::Get(browser_context_)->event_router()->BroadcastEvent(
-      event.Pass());
+  EventRouter::Get(browser_context_)->BroadcastEvent(event.Pass());
 }
 
 void BluetoothEventRouter::DispatchDeviceEvent(
@@ -349,8 +347,7 @@
   scoped_ptr<base::ListValue> args =
       bluetooth::OnDeviceAdded::Create(extension_device);
   scoped_ptr<Event> event(new Event(event_name, args.Pass()));
-  ExtensionSystem::Get(browser_context_)->event_router()->BroadcastEvent(
-      event.Pass());
+  EventRouter::Get(browser_context_)->BroadcastEvent(event.Pass());
 }
 
 void BluetoothEventRouter::CleanUpForExtension(
diff --git a/chrome/browser/extensions/api/bluetooth/bluetooth_private_api.cc b/chrome/browser/extensions/api/bluetooth/bluetooth_private_api.cc
index 6340d48..1ac35eb 100644
--- a/chrome/browser/extensions/api/bluetooth/bluetooth_private_api.cc
+++ b/chrome/browser/extensions/api/bluetooth/bluetooth_private_api.cc
@@ -12,7 +12,6 @@
 #include "chrome/common/extensions/api/bluetooth_private.h"
 #include "device/bluetooth/bluetooth_adapter.h"
 #include "device/bluetooth/bluetooth_adapter_factory.h"
-#include "extensions/browser/extension_system.h"
 
 namespace bt_private = extensions::api::bluetooth_private;
 
@@ -29,15 +28,14 @@
 
 BluetoothPrivateAPI::BluetoothPrivateAPI(content::BrowserContext* context)
     : browser_context_(context) {
-  ExtensionSystem::Get(browser_context_)->event_router()->RegisterObserver(
-      this, bt_private::OnPairing::kEventName);
+  EventRouter::Get(browser_context_)
+      ->RegisterObserver(this, bt_private::OnPairing::kEventName);
 }
 
 BluetoothPrivateAPI::~BluetoothPrivateAPI() {}
 
 void BluetoothPrivateAPI::Shutdown() {
-  ExtensionSystem::Get(browser_context_)->event_router()->UnregisterObserver(
-      this);
+  EventRouter::Get(browser_context_)->UnregisterObserver(this);
 }
 
 void BluetoothPrivateAPI::OnListenerAdded(const EventListenerInfo& details) {
diff --git a/chrome/browser/extensions/api/bluetooth/bluetooth_private_apitest.cc b/chrome/browser/extensions/api/bluetooth/bluetooth_private_apitest.cc
index 4de5668..bec0687 100644
--- a/chrome/browser/extensions/api/bluetooth/bluetooth_private_apitest.cc
+++ b/chrome/browser/extensions/api/bluetooth/bluetooth_private_apitest.cc
@@ -12,7 +12,6 @@
 #include "device/bluetooth/test/mock_bluetooth_adapter.h"
 #include "device/bluetooth/test/mock_bluetooth_device.h"
 #include "extensions/browser/event_router.h"
-#include "extensions/browser/extension_system.h"
 #include "extensions/common/switches.h"
 #include "testing/gmock/include/gmock/gmock.h"
 
@@ -94,8 +93,7 @@
         bt_private::OnPairing::Create(pairing_event);
     scoped_ptr<extensions::Event> event(
         new extensions::Event(bt_private::OnPairing::kEventName, args.Pass()));
-    extensions::ExtensionSystem::Get(browser()->profile())
-        ->event_router()
+    extensions::EventRouter::Get(browser()->profile())
         ->DispatchEventToExtension(kTestExtensionId, event.Pass());
   }
 
diff --git a/chrome/browser/extensions/api/bluetooth/bluetooth_socket_event_dispatcher.cc b/chrome/browser/extensions/api/bluetooth/bluetooth_socket_event_dispatcher.cc
index ddd413c..6429ed4 100644
--- a/chrome/browser/extensions/api/bluetooth/bluetooth_socket_event_dispatcher.cc
+++ b/chrome/browser/extensions/api/bluetooth/bluetooth_socket_event_dispatcher.cc
@@ -8,7 +8,6 @@
 #include "chrome/browser/extensions/api/bluetooth/bluetooth_api_socket.h"
 #include "chrome/common/extensions/api/bluetooth.h"
 #include "extensions/browser/event_router.h"
-#include "extensions/browser/extension_system.h"
 #include "net/base/io_buffer.h"
 #include "net/base/net_errors.h"
 
@@ -170,7 +169,7 @@
   if (!extensions::ExtensionsBrowserClient::Get()->IsValidContext(context))
     return;
 
-  EventRouter* router = ExtensionSystem::Get(context)->event_router();
+  EventRouter* router = EventRouter::Get(context);
   if (router)
     router->DispatchEventToExtension(extension_id, event.Pass());
 }
diff --git a/chrome/browser/extensions/api/bluetooth_low_energy/OWNERS b/chrome/browser/extensions/api/bluetooth_low_energy/OWNERS
new file mode 100644
index 0000000..7bf8537
--- /dev/null
+++ b/chrome/browser/extensions/api/bluetooth_low_energy/OWNERS
@@ -0,0 +1,2 @@
+keybuk@chromium.org
+armansito@chromium.org
diff --git a/chrome/browser/extensions/api/bluetooth_low_energy/bluetooth_low_energy_api.cc b/chrome/browser/extensions/api/bluetooth_low_energy/bluetooth_low_energy_api.cc
new file mode 100644
index 0000000..d1a6cdd
--- /dev/null
+++ b/chrome/browser/extensions/api/bluetooth_low_energy/bluetooth_low_energy_api.cc
@@ -0,0 +1,77 @@
+// 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.
+
+#include "chrome/browser/extensions/api/bluetooth_low_energy/bluetooth_low_energy_api.h"
+
+namespace extensions {
+namespace api {
+
+bool BluetoothLowEnergyGetServiceFunction::RunImpl() {
+  // TODO(armansito): Implement.
+  SetError("Call not supported.");
+  return false;
+}
+
+bool BluetoothLowEnergyGetServicesFunction::RunImpl() {
+  // TODO(armansito): Implement.
+  SetError("Call not supported.");
+  return false;
+}
+
+bool BluetoothLowEnergyGetCharacteristicFunction::RunImpl() {
+  // TODO(armansito): Implement.
+  SetError("Call not supported.");
+  return false;
+}
+
+bool BluetoothLowEnergyGetCharacteristicsFunction::RunImpl() {
+  // TODO(armansito): Implement.
+  SetError("Call not supported.");
+  return false;
+}
+
+bool BluetoothLowEnergyGetIncludedServicesFunction::RunImpl() {
+  // TODO(armansito): Implement.
+  SetError("Call not supported.");
+  return false;
+}
+
+bool BluetoothLowEnergyGetDescriptorFunction::RunImpl() {
+  // TODO(armansito): Implement.
+  SetError("Call not supported.");
+  return false;
+}
+
+bool BluetoothLowEnergyGetDescriptorsFunction::RunImpl() {
+  // TODO(armansito): Implement.
+  SetError("Call not supported.");
+  return false;
+}
+
+bool BluetoothLowEnergyReadCharacteristicValueFunction::RunImpl() {
+  // TODO(armansito): Implement.
+  SetError("Call not supported.");
+  return false;
+}
+
+bool BluetoothLowEnergyWriteCharacteristicValueFunction::RunImpl() {
+  // TODO(armansito): Implement.
+  SetError("Call not supported.");
+  return false;
+}
+
+bool BluetoothLowEnergyReadDescriptorValueFunction::RunImpl() {
+  // TODO(armansito): Implement.
+  SetError("Call not supported.");
+  return false;
+}
+
+bool BluetoothLowEnergyWriteDescriptorValueFunction::RunImpl() {
+  // TODO(armansito): Implement.
+  SetError("Call not supported.");
+  return false;
+}
+
+}  // namespace api
+}  // namespace extensions
diff --git a/chrome/browser/extensions/api/bluetooth_low_energy/bluetooth_low_energy_api.h b/chrome/browser/extensions/api/bluetooth_low_energy/bluetooth_low_energy_api.h
new file mode 100644
index 0000000..4f302ad
--- /dev/null
+++ b/chrome/browser/extensions/api/bluetooth_low_energy/bluetooth_low_energy_api.h
@@ -0,0 +1,158 @@
+// 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.
+
+#ifndef CHROME_BROWSER_EXTENSIONS_API_BLUETOOTH_LOW_ENERGY_BLUETOOTH_LOW_ENERGY_API_H_
+#define CHROME_BROWSER_EXTENSIONS_API_BLUETOOTH_LOW_ENERGY_BLUETOOTH_LOW_ENERGY_API_H_
+
+#include "extensions/browser/extension_function.h"
+#include "extensions/browser/extension_function_histogram_value.h"
+
+namespace extensions {
+namespace api {
+
+class BluetoothLowEnergyGetServiceFunction : public UIThreadExtensionFunction {
+ public:
+  DECLARE_EXTENSION_FUNCTION("bluetoothLowEnergy.getService",
+                             BLUETOOTHLOWENERGY_GETSERVICE);
+
+ protected:
+  virtual ~BluetoothLowEnergyGetServiceFunction() {}
+
+  // UIThreadExtensionFunction override.
+  virtual bool RunImpl() OVERRIDE;
+};
+
+class BluetoothLowEnergyGetServicesFunction : public UIThreadExtensionFunction {
+ public:
+  DECLARE_EXTENSION_FUNCTION("bluetoothLowEnergy.getServices",
+                             BLUETOOTHLOWENERGY_GETSERVICES);
+
+ protected:
+  virtual ~BluetoothLowEnergyGetServicesFunction() {}
+
+  // UIThreadExtensionFunction override.
+  virtual bool RunImpl() OVERRIDE;
+};
+
+class BluetoothLowEnergyGetCharacteristicFunction
+    : public UIThreadExtensionFunction {
+ public:
+  DECLARE_EXTENSION_FUNCTION("bluetoothLowEnergy.getCharacteristic",
+                             BLUETOOTHLOWENERGY_GETCHARACTERISTIC);
+
+ protected:
+  virtual ~BluetoothLowEnergyGetCharacteristicFunction() {}
+
+  // UIThreadExtensionFunction override.
+  virtual bool RunImpl() OVERRIDE;
+};
+
+class BluetoothLowEnergyGetCharacteristicsFunction
+    : public UIThreadExtensionFunction {
+ public:
+  DECLARE_EXTENSION_FUNCTION("bluetoothLowEnergy.getCharacteristics",
+                             BLUETOOTHLOWENERGY_GETCHARACTERISTICS);
+
+ protected:
+  virtual ~BluetoothLowEnergyGetCharacteristicsFunction() {}
+
+  // UIThreadExtensionFunction override.
+  virtual bool RunImpl() OVERRIDE;
+};
+
+class BluetoothLowEnergyGetIncludedServicesFunction
+    : public UIThreadExtensionFunction {
+ public:
+  DECLARE_EXTENSION_FUNCTION("bluetoothLowEnergy.getIncludedServices",
+                             BLUETOOTHLOWENERGY_GETINCLUDEDSERVICES);
+
+ protected:
+  virtual ~BluetoothLowEnergyGetIncludedServicesFunction() {}
+
+  // UIThreadExtensionFunction override.
+  virtual bool RunImpl() OVERRIDE;
+};
+
+class BluetoothLowEnergyGetDescriptorFunction
+    : public UIThreadExtensionFunction {
+ public:
+  DECLARE_EXTENSION_FUNCTION("bluetoothLowEnergy.getDescriptor",
+                             BLUETOOTHLOWENERGY_GETDESCRIPTOR);
+
+ protected:
+  virtual ~BluetoothLowEnergyGetDescriptorFunction() {}
+
+  // UIThreadExtensionFunction override.
+  virtual bool RunImpl() OVERRIDE;
+};
+
+class BluetoothLowEnergyGetDescriptorsFunction
+    : public UIThreadExtensionFunction {
+ public:
+  DECLARE_EXTENSION_FUNCTION("bluetoothLowEnergy.getDescriptors",
+                             BLUETOOTHLOWENERGY_GETDESCRIPTORS);
+
+ protected:
+  virtual ~BluetoothLowEnergyGetDescriptorsFunction() {}
+
+  // UIThreadExtensionFunction override.
+  virtual bool RunImpl() OVERRIDE;
+};
+
+class BluetoothLowEnergyReadCharacteristicValueFunction
+    : public UIThreadExtensionFunction {
+ public:
+  DECLARE_EXTENSION_FUNCTION("bluetoothLowEnergy.readCharacteristicValue",
+                             BLUETOOTHLOWENERGY_READCHARACTERISTICVALUE);
+
+ protected:
+  virtual ~BluetoothLowEnergyReadCharacteristicValueFunction() {}
+
+  // UIThreadExtensionFunction override.
+  virtual bool RunImpl() OVERRIDE;
+};
+
+class BluetoothLowEnergyWriteCharacteristicValueFunction
+    : public UIThreadExtensionFunction {
+ public:
+  DECLARE_EXTENSION_FUNCTION("bluetoothLowEnergy.writeCharacteristicValue",
+                             BLUETOOTHLOWENERGY_WRITECHARACTERISTICVALUE);
+
+ protected:
+  virtual ~BluetoothLowEnergyWriteCharacteristicValueFunction() {}
+
+  // UIThreadExtensionFunction override.
+  virtual bool RunImpl() OVERRIDE;
+};
+
+class BluetoothLowEnergyReadDescriptorValueFunction
+    : public UIThreadExtensionFunction {
+ public:
+  DECLARE_EXTENSION_FUNCTION("bluetoothLowEnergy.readDescriptorValue",
+                             BLUETOOTHLOWENERGY_READDESCRIPTORVALUE);
+
+ protected:
+  virtual ~BluetoothLowEnergyReadDescriptorValueFunction() {}
+
+  // UIThreadExtensionFunction override.
+  virtual bool RunImpl() OVERRIDE;
+};
+
+class BluetoothLowEnergyWriteDescriptorValueFunction
+    : public UIThreadExtensionFunction {
+ public:
+  DECLARE_EXTENSION_FUNCTION("bluetoothLowEnergy.writeDescriptorValue",
+                             BLUETOOTHLOWENERGY_WRITEDESCRIPTORVALUE);
+
+ protected:
+  virtual ~BluetoothLowEnergyWriteDescriptorValueFunction() {}
+
+  // UIThreadExtensionFunction override.
+  virtual bool RunImpl() OVERRIDE;
+};
+
+}  // namespace api
+}  // namespace extensions
+
+#endif  // CHROME_BROWSER_EXTENSIONS_API_BLUETOOTH_LOW_ENERGY_BLUETOOTH_LOW_ENERGY_API_H_
diff --git a/chrome/browser/extensions/api/bookmark_manager_private/bookmark_manager_private_api.cc b/chrome/browser/extensions/api/bookmark_manager_private/bookmark_manager_private_api.cc
index 7f72b9c..51d2ae5 100644
--- a/chrome/browser/extensions/api/bookmark_manager_private/bookmark_manager_private_api.cc
+++ b/chrome/browser/extensions/api/bookmark_manager_private/bookmark_manager_private_api.cc
@@ -33,23 +33,20 @@
 #include "content/public/browser/web_contents_view.h"
 #include "content/public/browser/web_ui.h"
 #include "extensions/browser/extension_function_dispatcher.h"
-#include "extensions/browser/extension_system.h"
 #include "extensions/browser/view_type_utils.h"
 #include "grit/generated_resources.h"
 #include "ui/base/dragdrop/drag_drop_types.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/webui/web_ui_util.h"
 
-#if defined(OS_WIN)
-#include "win8/util/win8_util.h"
-#endif  // OS_WIN
-
 namespace extensions {
 
 namespace bookmark_keys = bookmark_api_constants;
 namespace bookmark_manager_private = api::bookmark_manager_private;
 namespace CanPaste = api::bookmark_manager_private::CanPaste;
 namespace Copy = api::bookmark_manager_private::Copy;
+namespace CreateWithMetaInfo =
+    api::bookmark_manager_private::CreateWithMetaInfo;
 namespace Cut = api::bookmark_manager_private::Cut;
 namespace Drop = api::bookmark_manager_private::Drop;
 namespace GetSubtree = api::bookmark_manager_private::GetSubtree;
@@ -61,6 +58,7 @@
 namespace SortChildren = api::bookmark_manager_private::SortChildren;
 namespace StartDrag = api::bookmark_manager_private::StartDrag;
 namespace UndoInfo = api::bookmark_manager_private::GetUndoInfo;
+namespace UpdateMetaInfo = api::bookmark_manager_private::UpdateMetaInfo;
 
 using content::WebContents;
 
@@ -68,12 +66,12 @@
 
 // Returns a single bookmark node from the argument ID.
 // This returns NULL in case of failure.
-const BookmarkNode* GetNodeFromString(
-    BookmarkModel* model, const std::string& id_string) {
+const BookmarkNode* GetNodeFromString(BookmarkModel* model,
+                                      const std::string& id_string) {
   int64 id;
   if (!base::StringToInt64(id_string, &id))
     return NULL;
-  return model->GetNodeByID(id);
+  return GetBookmarkNodeByID(model, id);
 }
 
 // Gets a vector of bookmark nodes from the argument list of IDs.
@@ -144,12 +142,15 @@
 // Creates a bookmark_manager_private::BookmarkNodeData from a BookmarkNodeData.
 scoped_ptr<bookmark_manager_private::BookmarkNodeData>
 CreateApiBookmarkNodeData(Profile* profile, const BookmarkNodeData& data) {
+  const base::FilePath& profile_path = profile->GetPath();
+
   scoped_ptr<bookmark_manager_private::BookmarkNodeData> node_data(
       new bookmark_manager_private::BookmarkNodeData);
-  node_data->same_profile = data.IsFromProfile(profile);
+  node_data->same_profile = data.IsFromProfilePath(profile_path);
 
   if (node_data->same_profile) {
-    std::vector<const BookmarkNode*> nodes = data.GetNodes(profile);
+    std::vector<const BookmarkNode*> nodes = data.GetNodes(
+        BookmarkModelFactory::GetForProfile(profile), profile_path);
     for (size_t i = 0; i < nodes.size(); ++i) {
       node_data->elements.push_back(
           CreateNodeDataElementFromBookmarkNode(*nodes[i]));
@@ -180,10 +181,8 @@
 void BookmarkManagerPrivateEventRouter::DispatchEvent(
     const std::string& event_name,
     scoped_ptr<base::ListValue> event_args) {
-  extensions::ExtensionSystem::Get(browser_context_)
-      ->event_router()
-      ->BroadcastEvent(make_scoped_ptr(
-          new extensions::Event(event_name, event_args.Pass())));
+  extensions::EventRouter::Get(browser_context_)->BroadcastEvent(
+      make_scoped_ptr(new extensions::Event(event_name, event_args.Pass())));
 }
 
 void BookmarkManagerPrivateEventRouter::BookmarkModelChanged() {}
@@ -193,19 +192,57 @@
   bookmark_model_ = NULL;
 }
 
+void BookmarkManagerPrivateEventRouter::OnWillChangeBookmarkMetaInfo(
+    BookmarkModel* model,
+    const BookmarkNode* node) {
+  DCHECK(prev_meta_info_.empty());
+  if (node->GetMetaInfoMap())
+    prev_meta_info_ = *node->GetMetaInfoMap();
+}
+
 void BookmarkManagerPrivateEventRouter::BookmarkMetaInfoChanged(
     BookmarkModel* model,
     const BookmarkNode* node) {
+  const BookmarkNode::MetaInfoMap* new_meta_info = node->GetMetaInfoMap();
+  bookmark_manager_private::MetaInfoFields changes;
+
+  // Identify changed/removed fields:
+  for (BookmarkNode::MetaInfoMap::const_iterator it = prev_meta_info_.begin();
+       it != prev_meta_info_.end();
+       ++it) {
+    if (!new_meta_info) {
+      changes.additional_properties[it->first] = "";
+    } else {
+      BookmarkNode::MetaInfoMap::const_iterator new_meta_field =
+          new_meta_info->find(it->first);
+      if (new_meta_field == new_meta_info->end()) {
+        changes.additional_properties[it->first] = "";
+      } else if (it->second != new_meta_field->second) {
+        changes.additional_properties[it->first] = new_meta_field->second;
+      }
+    }
+  }
+
+  // Identify added fields:
+  for (BookmarkNode::MetaInfoMap::const_iterator it = new_meta_info->begin();
+       it != new_meta_info->end();
+       ++it) {
+    BookmarkNode::MetaInfoMap::const_iterator prev_meta_field =
+        prev_meta_info_.find(it->first);
+    if (prev_meta_field == prev_meta_info_.end())
+      changes.additional_properties[it->first] = it->second;
+  }
+
+  prev_meta_info_.clear();
   DispatchEvent(bookmark_manager_private::OnMetaInfoChanged::kEventName,
                 bookmark_manager_private::OnMetaInfoChanged::Create(
-                    base::Int64ToString(node->id())));
+                    base::Int64ToString(node->id()), changes));
 }
 
 BookmarkManagerPrivateAPI::BookmarkManagerPrivateAPI(
     content::BrowserContext* browser_context)
     : browser_context_(browser_context) {
-  EventRouter* event_router =
-      ExtensionSystem::Get(browser_context)->event_router();
+  EventRouter* event_router = EventRouter::Get(browser_context);
   event_router->RegisterObserver(
       this, bookmark_manager_private::OnMetaInfoChanged::kEventName);
 }
@@ -213,8 +250,7 @@
 BookmarkManagerPrivateAPI::~BookmarkManagerPrivateAPI() {}
 
 void BookmarkManagerPrivateAPI::Shutdown() {
-  ExtensionSystem::Get(browser_context_)->event_router()->UnregisterObserver(
-      this);
+  EventRouter::Get(browser_context_)->UnregisterObserver(this);
 }
 
 static base::LazyInstance<
@@ -229,8 +265,7 @@
 
 void BookmarkManagerPrivateAPI::OnListenerAdded(
     const EventListenerInfo& details) {
-  ExtensionSystem::Get(browser_context_)->event_router()->UnregisterObserver(
-      this);
+  EventRouter::Get(browser_context_)->UnregisterObserver(this);
   event_router_.reset(new BookmarkManagerPrivateEventRouter(
       browser_context_,
       BookmarkModelFactory::GetForProfile(
@@ -257,11 +292,12 @@
 void BookmarkManagerPrivateDragEventRouter::DispatchEvent(
     const std::string& event_name,
     scoped_ptr<base::ListValue> args) {
-  if (!ExtensionSystem::Get(profile_)->event_router())
+  EventRouter* event_router = EventRouter::Get(profile_);
+  if (!event_router)
     return;
 
   scoped_ptr<Event> event(new Event(event_name, args.Pass()));
-  ExtensionSystem::Get(profile_)->event_router()->BroadcastEvent(event.Pass());
+  event_router->BroadcastEvent(event.Pass());
 }
 
 void BookmarkManagerPrivateDragEventRouter::OnDragEnter(
@@ -602,6 +638,24 @@
   return true;
 }
 
+bool BookmarkManagerPrivateCreateWithMetaInfoFunction::RunImpl() {
+  scoped_ptr<CreateWithMetaInfo::Params> params(
+      CreateWithMetaInfo::Params::Create(*args_));
+  EXTENSION_FUNCTION_VALIDATE(params);
+
+  BookmarkModel* model = BookmarkModelFactory::GetForProfile(GetProfile());
+  const BookmarkNode* node = CreateBookmarkNode(
+      model, params->bookmark, &params->meta_info.additional_properties);
+  if (!node)
+    return false;
+
+  scoped_ptr<api::bookmarks::BookmarkTreeNode> result_node(
+      bookmark_api_helpers::GetBookmarkTreeNode(node, false, false));
+  results_ = CreateWithMetaInfo::Results::Create(*result_node);
+
+  return true;
+}
+
 bool BookmarkManagerPrivateGetMetaInfoFunction::RunImpl() {
   scoped_ptr<GetMetaInfo::Params> params(GetMetaInfo::Params::Create(*args_));
   EXTENSION_FUNCTION_VALIDATE(params);
@@ -610,9 +664,24 @@
   if (!node)
     return false;
 
-  std::string value;
-  if (node->GetMetaInfo(params->key, &value))
-    results_ = GetMetaInfo::Results::Create(value);
+  if (params->key) {
+    std::string value;
+    if (node->GetMetaInfo(*params->key, &value)) {
+      GetMetaInfo::Results::Value result;
+      result.as_string.reset(new std::string(value));
+      results_ = GetMetaInfo::Results::Create(result);
+    }
+  } else {
+    GetMetaInfo::Results::Value result;
+    result.as_meta_info_fields.reset(
+        new bookmark_manager_private::MetaInfoFields);
+
+    const BookmarkNode::MetaInfoMap* meta_info = node->GetMetaInfoMap();
+    if (meta_info)
+      result.as_meta_info_fields->additional_properties = *meta_info;
+    results_ = GetMetaInfo::Results::Create(result);
+  }
+
   return true;
 }
 
@@ -629,14 +698,29 @@
   return true;
 }
 
+bool BookmarkManagerPrivateUpdateMetaInfoFunction::RunImpl() {
+  scoped_ptr<UpdateMetaInfo::Params> params(
+      UpdateMetaInfo::Params::Create(*args_));
+  EXTENSION_FUNCTION_VALIDATE(params);
+
+  const BookmarkNode* node = GetBookmarkNodeFromId(params->id);
+  if (!node)
+    return false;
+
+  BookmarkModel* model = BookmarkModelFactory::GetForProfile(GetProfile());
+  BookmarkNode::MetaInfoMap new_meta_info(
+      params->meta_info_changes.additional_properties);
+  if (node->GetMetaInfoMap()) {
+    new_meta_info.insert(node->GetMetaInfoMap()->begin(),
+                         node->GetMetaInfoMap()->end());
+  }
+  model->SetNodeMetaInfoMap(node, new_meta_info);
+
+  return true;
+}
+
 bool BookmarkManagerPrivateCanOpenNewWindowsFunction::RunImpl() {
   bool can_open_new_windows = true;
-
-#if defined(OS_WIN)
-  if (win8::IsSingleWindowMetroMode())
-    can_open_new_windows = false;
-#endif  // OS_WIN
-
   SetResult(new base::FundamentalValue(can_open_new_windows));
   return true;
 }
@@ -645,10 +729,10 @@
   scoped_ptr<RemoveTrees::Params> params(RemoveTrees::Params::Create(*args_));
   EXTENSION_FUNCTION_VALIDATE(params);
 
-#if !defined(OS_ANDROID)
-  ScopedGroupBookmarkActions group_deletes(GetProfile());
-#endif
   BookmarkModel* model = BookmarkModelFactory::GetForProfile(GetProfile());
+#if !defined(OS_ANDROID)
+  ScopedGroupBookmarkActions group_deletes(model);
+#endif
   int64 id;
   for (size_t i = 0; i < params->id_list.size(); ++i) {
     if (!GetBookmarkIdAsInt64(params->id_list[i], &id))
diff --git a/chrome/browser/extensions/api/bookmark_manager_private/bookmark_manager_private_api.h b/chrome/browser/extensions/api/bookmark_manager_private/bookmark_manager_private_api.h
index ded793b..ac8149c 100644
--- a/chrome/browser/extensions/api/bookmark_manager_private/bookmark_manager_private_api.h
+++ b/chrome/browser/extensions/api/bookmark_manager_private/bookmark_manager_private_api.h
@@ -36,6 +36,8 @@
   // BaseBookmarkModelObserver:
   virtual void BookmarkModelChanged() OVERRIDE;
   virtual void BookmarkModelBeingDeleted(BookmarkModel* model) OVERRIDE;
+  virtual void OnWillChangeBookmarkMetaInfo(BookmarkModel* model,
+                                            const BookmarkNode* node) OVERRIDE;
   virtual void BookmarkMetaInfoChanged(BookmarkModel* model,
                                        const BookmarkNode* node) OVERRIDE;
 
@@ -44,6 +46,9 @@
   void DispatchEvent(const std::string& event_name,
                      scoped_ptr<base::ListValue> event_args);
 
+  // Remembers the previous meta info of a node before it was changed.
+  BookmarkNode::MetaInfoMap prev_meta_info_;
+
   content::BrowserContext* browser_context_;
   BookmarkModel* bookmark_model_;
 };
@@ -260,6 +265,19 @@
   virtual bool RunImpl() OVERRIDE;
 };
 
+class BookmarkManagerPrivateCreateWithMetaInfoFunction
+    : public extensions::BookmarksFunction {
+ public:
+  DECLARE_EXTENSION_FUNCTION("bookmarkManagerPrivate.createWithMetaInfo",
+                             BOOKMARKMANAGERPRIVATE_CREATEWITHMETAINFO)
+
+ protected:
+  virtual ~BookmarkManagerPrivateCreateWithMetaInfoFunction() {}
+
+  // ExtensionFunction:
+  virtual bool RunImpl() OVERRIDE;
+};
+
 class BookmarkManagerPrivateGetMetaInfoFunction
     : public extensions::BookmarksFunction {
  public:
@@ -286,6 +304,19 @@
   virtual bool RunImpl() OVERRIDE;
 };
 
+class BookmarkManagerPrivateUpdateMetaInfoFunction
+    : public extensions::BookmarksFunction {
+ public:
+  DECLARE_EXTENSION_FUNCTION("bookmarkManagerPrivate.updateMetaInfo",
+                             BOOKMARKMANAGERPRIVATE_UPDATEMETAINFO)
+
+ protected:
+  virtual ~BookmarkManagerPrivateUpdateMetaInfoFunction() {}
+
+  // ExtensionFunction:
+  virtual bool RunImpl() OVERRIDE;
+};
+
 class BookmarkManagerPrivateCanOpenNewWindowsFunction
     : public extensions::BookmarksFunction {
  public:
diff --git a/chrome/browser/extensions/api/bookmarks/bookmark_api_helpers.cc b/chrome/browser/extensions/api/bookmarks/bookmark_api_helpers.cc
index 47920e5..58ff587 100644
--- a/chrome/browser/extensions/api/bookmarks/bookmark_api_helpers.cc
+++ b/chrome/browser/extensions/api/bookmarks/bookmark_api_helpers.cc
@@ -10,6 +10,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/bookmarks/bookmark_model.h"
+#include "chrome/browser/bookmarks/bookmark_utils.h"
 #include "chrome/browser/extensions/api/bookmarks/bookmark_api_constants.h"
 #include "chrome/common/extensions/api/bookmarks.h"
 
@@ -100,7 +101,7 @@
                 int64 id,
                 bool recursive,
                 std::string* error) {
-  const BookmarkNode* node = model->GetNodeByID(id);
+  const BookmarkNode* node = GetBookmarkNodeByID(model, id);
   if (!node) {
     *error = keys::kNoNodeError;
     return false;
diff --git a/chrome/browser/extensions/api/bookmarks/bookmark_api_helpers_unittest.cc b/chrome/browser/extensions/api/bookmarks/bookmark_api_helpers_unittest.cc
index ee0eaaf..072f841 100644
--- a/chrome/browser/extensions/api/bookmarks/bookmark_api_helpers_unittest.cc
+++ b/chrome/browser/extensions/api/bookmarks/bookmark_api_helpers_unittest.cc
@@ -22,7 +22,7 @@
 class ExtensionBookmarksTest : public testing::Test {
  public:
   virtual void SetUp() OVERRIDE {
-    model_.reset(new BookmarkModel(NULL));
+    model_.reset(new BookmarkModel(NULL, false));
     model_->AddURL(model_->other_node(), 0, base::ASCIIToUTF16("Digg"),
                      GURL("http://www.reddit.com"));
     model_->AddURL(model_->other_node(), 0, base::ASCIIToUTF16("News"),
diff --git a/chrome/browser/extensions/api/bookmarks/bookmarks_api.cc b/chrome/browser/extensions/api/bookmarks/bookmarks_api.cc
index 9fd2857..2fd1758 100644
--- a/chrome/browser/extensions/api/bookmarks/bookmarks_api.cc
+++ b/chrome/browser/extensions/api/bookmarks/bookmarks_api.cc
@@ -44,7 +44,6 @@
 #include "content/public/browser/web_contents_view.h"
 #include "extensions/browser/event_router.h"
 #include "extensions/browser/extension_function_dispatcher.h"
-#include "extensions/browser/extension_system.h"
 #include "extensions/browser/quota_service.h"
 #include "grit/generated_resources.h"
 #include "ui/base/l10n/l10n_util.h"
@@ -60,6 +59,7 @@
 
 using base::TimeDelta;
 using bookmarks::BookmarkTreeNode;
+using bookmarks::CreateDetails;
 using content::BrowserContext;
 using content::BrowserThread;
 using content::WebContents;
@@ -132,14 +132,77 @@
   if (!GetBookmarkIdAsInt64(id_string, &id))
     return NULL;
 
-  BookmarkModel* model = BookmarkModelFactory::GetForProfile(GetProfile());
-  const BookmarkNode* node = model->GetNodeByID(id);
+  const BookmarkNode* node = GetBookmarkNodeByID(
+      BookmarkModelFactory::GetForProfile(GetProfile()), id);
   if (!node)
     error_ = keys::kNoNodeError;
 
   return node;
 }
 
+const BookmarkNode* BookmarksFunction::CreateBookmarkNode(
+    BookmarkModel* model,
+    const CreateDetails& details,
+    const BookmarkNode::MetaInfoMap* meta_info) {
+  int64 parentId;
+
+  if (!details.parent_id.get()) {
+    // Optional, default to "other bookmarks".
+    parentId = model->other_node()->id();
+  } else {
+    if (!GetBookmarkIdAsInt64(*details.parent_id, &parentId))
+      return NULL;
+  }
+  const BookmarkNode* parent = GetBookmarkNodeByID(model, parentId);
+  if (!parent) {
+    error_ = keys::kNoParentError;
+    return NULL;
+  }
+  if (parent->is_root()) {  // Can't create children of the root.
+    error_ = keys::kModifySpecialError;
+    return NULL;
+  }
+
+  int index;
+  if (!details.index.get()) {  // Optional (defaults to end).
+    index = parent->child_count();
+  } else {
+    index = *details.index;
+    if (index > parent->child_count() || index < 0) {
+      error_ = keys::kInvalidIndexError;
+      return NULL;
+    }
+  }
+
+  base::string16 title;  // Optional.
+  if (details.title.get())
+    title = base::UTF8ToUTF16(*details.title.get());
+
+  std::string url_string;  // Optional.
+  if (details.url.get())
+    url_string = *details.url.get();
+
+  GURL url(url_string);
+  if (!url_string.empty() && !url.is_valid()) {
+    error_ = keys::kInvalidUrlError;
+    return NULL;
+  }
+
+  const BookmarkNode* node;
+  if (url_string.length())
+    node = model->AddURLWithCreationTimeAndMetaInfo(
+        parent, index, title, url, base::Time::Now(), meta_info);
+  else
+    node = model->AddFolderWithMetaInfo(parent, index, title, meta_info);
+  DCHECK(node);
+  if (!node) {
+    error_ = keys::kNoNodeError;
+    return NULL;
+  }
+
+  return node;
+}
+
 bool BookmarksFunction::EditBookmarksEnabled() {
   PrefService* prefs = user_prefs::UserPrefs::Get(GetProfile());
   if (prefs->GetBoolean(prefs::kEditBookmarksEnabled))
@@ -173,11 +236,10 @@
 void BookmarkEventRouter::DispatchEvent(
     const std::string& event_name,
     scoped_ptr<base::ListValue> event_args) {
-  if (extensions::ExtensionSystem::Get(browser_context_)->event_router()) {
-    extensions::ExtensionSystem::Get(browser_context_)
-        ->event_router()
-        ->BroadcastEvent(make_scoped_ptr(
-              new extensions::Event(event_name, event_args.Pass())));
+  EventRouter* event_router = EventRouter::Get(browser_context_);
+  if (event_router) {
+    event_router->BroadcastEvent(
+        make_scoped_ptr(new extensions::Event(event_name, event_args.Pass())));
   }
 }
 
@@ -289,8 +351,7 @@
 
 BookmarksAPI::BookmarksAPI(BrowserContext* context)
     : browser_context_(context) {
-  EventRouter* event_router =
-      ExtensionSystem::Get(browser_context_)->event_router();
+  EventRouter* event_router = EventRouter::Get(browser_context_);
   event_router->RegisterObserver(this, bookmarks::OnCreated::kEventName);
   event_router->RegisterObserver(this, bookmarks::OnRemoved::kEventName);
   event_router->RegisterObserver(this, bookmarks::OnChanged::kEventName);
@@ -305,8 +366,7 @@
 }
 
 void BookmarksAPI::Shutdown() {
-  ExtensionSystem::Get(browser_context_)->event_router()->UnregisterObserver(
-      this);
+  EventRouter::Get(browser_context_)->UnregisterObserver(this);
 }
 
 static base::LazyInstance<BrowserContextKeyedAPIFactory<BookmarksAPI> >
@@ -323,8 +383,7 @@
       browser_context_,
       BookmarkModelFactory::GetForProfile(
           Profile::FromBrowserContext(browser_context_))));
-  ExtensionSystem::Get(browser_context_)->event_router()->UnregisterObserver(
-      this);
+  EventRouter::Get(browser_context_)->UnregisterObserver(this);
 }
 
 bool BookmarksGetFunction::RunImpl() {
@@ -519,60 +578,9 @@
   EXTENSION_FUNCTION_VALIDATE(params.get());
 
   BookmarkModel* model = BookmarkModelFactory::GetForProfile(GetProfile());
-  int64 parentId;
-
-  if (!params->bookmark.parent_id.get()) {
-    // Optional, default to "other bookmarks".
-    parentId = model->other_node()->id();
-  } else {
-    if (!GetBookmarkIdAsInt64(*params->bookmark.parent_id, &parentId))
-      return false;
-  }
-  const BookmarkNode* parent = model->GetNodeByID(parentId);
-  if (!parent) {
-    error_ = keys::kNoParentError;
+  const BookmarkNode* node = CreateBookmarkNode(model, params->bookmark, NULL);
+  if (!node)
     return false;
-  }
-  if (parent->is_root()) {  // Can't create children of the root.
-    error_ = keys::kModifySpecialError;
-    return false;
-  }
-
-  int index;
-  if (!params->bookmark.index.get()) {  // Optional (defaults to end).
-    index = parent->child_count();
-  } else {
-    index = *params->bookmark.index;
-    if (index > parent->child_count() || index < 0) {
-      error_ = keys::kInvalidIndexError;
-      return false;
-    }
-  }
-
-  base::string16 title;  // Optional.
-  if (params->bookmark.title.get())
-    title = base::UTF8ToUTF16(*params->bookmark.title.get());
-
-  std::string url_string;  // Optional.
-  if (params->bookmark.url.get())
-    url_string = *params->bookmark.url.get();
-
-  GURL url(url_string);
-  if (!url_string.empty() && !url.is_valid()) {
-    error_ = keys::kInvalidUrlError;
-    return false;
-  }
-
-  const BookmarkNode* node;
-  if (url_string.length())
-    node = model->AddURL(parent, index, title, url);
-  else
-    node = model->AddFolder(parent, index, title);
-  DCHECK(node);
-  if (!node) {
-    error_ = keys::kNoNodeError;
-    return false;
-  }
 
   scoped_ptr<BookmarkTreeNode> ret(
       bookmark_api_helpers::GetBookmarkTreeNode(node, false, false));
@@ -616,7 +624,7 @@
     if (!GetBookmarkIdAsInt64(*params->destination.parent_id, &parentId))
       return false;
 
-    parent = model->GetNodeByID(parentId);
+    parent = GetBookmarkNodeByID(model, parentId);
   }
   if (!parent) {
     error_ = keys::kNoParentError;
@@ -744,7 +752,7 @@
 
     int64 parent_id_int64;
     base::StringToInt64(parent_id, &parent_id_int64);
-    const BookmarkNode* parent = model->GetNodeByID(parent_id_int64);
+    const BookmarkNode* parent = GetBookmarkNodeByID(model, parent_id_int64);
     if (!parent)
       return;
 
@@ -782,7 +790,7 @@
     for (IdList::iterator it = ids.begin(); it != ids.end(); ++it) {
       BookmarkModel* model = BookmarkModelFactory::GetForProfile(
           Profile::FromBrowserContext(browser_context_));
-      const BookmarkNode* node = model->GetNodeByID(*it);
+      const BookmarkNode* node = GetBookmarkNodeByID(model, *it);
       if (!node || node->is_root())
         return;
 
diff --git a/chrome/browser/extensions/api/bookmarks/bookmarks_api.h b/chrome/browser/extensions/api/bookmarks/bookmarks_api.h
index 8da38d8..9ac0686 100644
--- a/chrome/browser/extensions/api/bookmarks/bookmarks_api.h
+++ b/chrome/browser/extensions/api/bookmarks/bookmarks_api.h
@@ -13,6 +13,7 @@
 #include "base/memory/ref_counted.h"
 #include "chrome/browser/bookmarks/base_bookmark_model_observer.h"
 #include "chrome/browser/extensions/chrome_extension_function.h"
+#include "components/bookmarks/core/browser/bookmark_node.h"
 #include "extensions/browser/browser_context_keyed_api_factory.h"
 #include "extensions/browser/event_router.h"
 #include "ui/shell_dialogs/select_file_dialog.h"
@@ -28,6 +29,12 @@
 
 namespace extensions {
 
+namespace api {
+namespace bookmarks {
+struct CreateDetails;
+}
+}
+
 // Observes BookmarkModel and then routes the notifications as events to
 // the extension system.
 class BookmarkEventRouter : public BookmarkModelObserver {
@@ -122,6 +129,13 @@
   // error_ and returns NULL.
   const BookmarkNode* GetBookmarkNodeFromId(const std::string& id_string);
 
+  // Helper to create a bookmark node from a CreateDetails object. If a node
+  // can't be created based on the given details, sets error_ and returns NULL.
+  const BookmarkNode* CreateBookmarkNode(
+      BookmarkModel* model,
+      const api::bookmarks::CreateDetails& details,
+      const BookmarkNode::MetaInfoMap* meta_info);
+
   // Helper that checks if bookmark editing is enabled. If it's not, this sets
   // error_ to the appropriate error string.
   bool EditBookmarksEnabled();
diff --git a/chrome/browser/extensions/api/braille_display_private/braille_display_private_api.cc b/chrome/browser/extensions/api/braille_display_private/braille_display_private_api.cc
index 85a7af9..5cbcb34 100644
--- a/chrome/browser/extensions/api/braille_display_private/braille_display_private_api.cc
+++ b/chrome/browser/extensions/api/braille_display_private/braille_display_private_api.cc
@@ -8,7 +8,6 @@
 #include "chrome/browser/extensions/api/braille_display_private/braille_controller.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_manager.h"
-#include "extensions/browser/extension_system.h"
 
 #if defined(OS_CHROMEOS)
 #include "chrome/browser/chromeos/login/screen_locker.h"
@@ -122,22 +121,22 @@
 BrailleDisplayPrivateAPI::DefaultEventDelegate::DefaultEventDelegate(
     EventRouter::Observer* observer, Profile* profile)
     : observer_(observer), profile_(profile) {
-  EventRouter* event_router = ExtensionSystem::Get(profile_)->event_router();
+  EventRouter* event_router = EventRouter::Get(profile_);
   event_router->RegisterObserver(observer_, OnDisplayStateChanged::kEventName);
   event_router->RegisterObserver(observer_, OnKeyEvent::kEventName);
 }
 
 BrailleDisplayPrivateAPI::DefaultEventDelegate::~DefaultEventDelegate() {
-  ExtensionSystem::Get(profile_)->event_router()->UnregisterObserver(observer_);
+  EventRouter::Get(profile_)->UnregisterObserver(observer_);
 }
 
 void BrailleDisplayPrivateAPI::DefaultEventDelegate::BroadcastEvent(
     scoped_ptr<Event> event) {
-  ExtensionSystem::Get(profile_)->event_router()->BroadcastEvent(event.Pass());
+  EventRouter::Get(profile_)->BroadcastEvent(event.Pass());
 }
 
 bool BrailleDisplayPrivateAPI::DefaultEventDelegate::HasListener() {
-  EventRouter* event_router = ExtensionSystem::Get(profile_)->event_router();
+  EventRouter* event_router = EventRouter::Get(profile_);
   return (event_router->HasEventListener(OnDisplayStateChanged::kEventName) ||
           event_router->HasEventListener(OnKeyEvent::kEventName));
 }
diff --git a/chrome/browser/extensions/api/cast_channel/cast_channel_api.cc b/chrome/browser/extensions/api/cast_channel/cast_channel_api.cc
index cd9b8ba..d1a84e4 100644
--- a/chrome/browser/extensions/api/cast_channel/cast_channel_api.cc
+++ b/chrome/browser/extensions/api/cast_channel/cast_channel_api.cc
@@ -4,16 +4,20 @@
 
 #include "chrome/browser/extensions/api/cast_channel/cast_channel_api.h"
 
+#include <limits>
+
 #include "base/json/json_writer.h"
 #include "base/memory/scoped_ptr.h"
+#include "base/strings/string_number_conversions.h"
 #include "base/values.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/extensions/api/cast_channel/cast_socket.h"
 #include "chrome/browser/net/chrome_net_log.h"
 #include "content/public/browser/browser_thread.h"
 #include "extensions/browser/event_router.h"
-#include "extensions/browser/extension_system.h"
+#include "net/base/ip_endpoint.h"
 #include "net/base/net_errors.h"
+#include "net/base/net_util.h"
 #include "url/gurl.h"
 
 namespace extensions {
@@ -24,8 +28,10 @@
 namespace Open = cast_channel::Open;
 namespace Send = cast_channel::Send;
 using cast_channel::CastSocket;
+using cast_channel::ChannelAuthType;
 using cast_channel::ChannelError;
 using cast_channel::ChannelInfo;
+using cast_channel::ConnectInfo;
 using cast_channel::MessageInfo;
 using cast_channel::ReadyState;
 using content::BrowserThread;
@@ -41,6 +47,19 @@
   return out;
 }
 
+// Fills |channel_info| from the destination and state of |socket|.
+void FillChannelInfo(const CastSocket& socket, ChannelInfo* channel_info) {
+  DCHECK(channel_info);
+  channel_info->channel_id = socket.id();
+  channel_info->url = socket.CastUrl();
+  const net::IPEndPoint& ip_endpoint = socket.ip_endpoint();
+  channel_info->connect_info.ip_address = ip_endpoint.ToStringWithoutPort();
+  channel_info->connect_info.port = ip_endpoint.port();
+  channel_info->connect_info.auth = socket.channel_auth();
+  channel_info->ready_state = socket.ready_state();
+  channel_info->error_state = socket.error_state();
+}
+
 }  // namespace
 
 CastChannelAPI::CastChannelAPI(content::BrowserContext* context)
@@ -63,12 +82,13 @@
 }
 
 scoped_ptr<CastSocket> CastChannelAPI::CreateCastSocket(
-    const std::string& extension_id, const GURL& url) {
+    const std::string& extension_id, const net::IPEndPoint& ip_endpoint,
+    ChannelAuthType channel_auth) {
   if (socket_for_test_.get()) {
     return socket_for_test_.Pass();
   } else {
     return scoped_ptr<CastSocket>(
-        new CastSocket(extension_id, url, this,
+        new CastSocket(extension_id, ip_endpoint, channel_auth, this,
                        g_browser_process->net_log()));
   }
 }
@@ -81,12 +101,11 @@
                              cast_channel::ChannelError error) {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
   ChannelInfo channel_info;
-  socket->FillChannelInfo(&channel_info);
+  FillChannelInfo(*socket, &channel_info);
   channel_info.error_state = error;
   scoped_ptr<base::ListValue> results = OnError::Create(channel_info);
   scoped_ptr<Event> event(new Event(OnError::kEventName, results.Pass()));
-  extensions::ExtensionSystem::Get(browser_context_)
-      ->event_router()
+  extensions::EventRouter::Get(browser_context_)
       ->DispatchEventToExtension(socket->owner_extension_id(), event.Pass());
 }
 
@@ -94,14 +113,13 @@
                                const MessageInfo& message_info) {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
   ChannelInfo channel_info;
-  socket->FillChannelInfo(&channel_info);
+  FillChannelInfo(*socket, &channel_info);
   scoped_ptr<base::ListValue> results =
     OnMessage::Create(channel_info, message_info);
   VLOG(1) << "Sending message " << ParamToString(message_info)
           << " to channel " << ParamToString(channel_info);
   scoped_ptr<Event> event(new Event(OnMessage::kEventName, results.Pass()));
-  extensions::ExtensionSystem::Get(browser_context_)
-      ->event_router()
+  extensions::EventRouter::Get(browser_context_)
       ->DispatchEventToExtension(socket->owner_extension_id(), event.Pass());
 }
 
@@ -150,7 +168,7 @@
   CastSocket* socket = GetSocket(channel_id);
   DCHECK(socket);
   ChannelInfo channel_info;
-  socket->FillChannelInfo(&channel_info);
+  FillChannelInfo(*socket, &channel_info);
   error_ = socket->error_state();
   SetResultFromChannelInfo(channel_info);
 }
@@ -182,6 +200,69 @@
 
 CastChannelOpenFunction::~CastChannelOpenFunction() { }
 
+// TODO(mfoltz): Remove URL parsing when clients have converted to use
+// ConnectInfo.
+
+// Allowed schemes for Cast device URLs.
+const char kCastInsecureScheme[] = "cast";
+const char kCastSecureScheme[] = "casts";
+
+bool CastChannelOpenFunction::ParseChannelUrl(const GURL& url,
+                                              ConnectInfo* connect_info) {
+  DCHECK(connect_info);
+  VLOG(2) << "ParseChannelUrl";
+  bool auth_required = false;
+  if (url.SchemeIs(kCastSecureScheme)) {
+    auth_required = true;
+  } else if (!url.SchemeIs(kCastInsecureScheme)) {
+    return false;
+  }
+  // TODO(mfoltz): Test for IPv6 addresses.  Brackets or no brackets?
+  // TODO(mfoltz): Maybe enforce restriction to IPv4 private and IPv6
+  // link-local networks
+  const std::string& path = url.path();
+  // Shortest possible: //A:B
+  if (path.size() < 5) {
+    return false;
+  }
+  if (path.find("//") != 0) {
+    return false;
+  }
+  size_t colon = path.find_last_of(':');
+  if (colon == std::string::npos || colon < 3 || colon > path.size() - 2) {
+    return false;
+  }
+  const std::string& ip_address_str = path.substr(2, colon - 2);
+  const std::string& port_str = path.substr(colon + 1);
+  VLOG(2) << "IP: " << ip_address_str << " Port: " << port_str;
+  int port;
+  if (!base::StringToInt(port_str, &port))
+    return false;
+  connect_info->ip_address = ip_address_str;
+  connect_info->port = port;
+  connect_info->auth = auth_required ?
+    cast_channel::CHANNEL_AUTH_TYPE_SSL_VERIFIED :
+    cast_channel::CHANNEL_AUTH_TYPE_SSL;
+  return true;
+};
+
+net::IPEndPoint* CastChannelOpenFunction::ParseConnectInfo(
+    const ConnectInfo& connect_info) {
+  net::IPAddressNumber ip_address;
+  if (!net::ParseIPLiteralToNumber(connect_info.ip_address, &ip_address)) {
+    return NULL;
+  }
+  if (connect_info.port < 0 || connect_info.port >
+      std::numeric_limits<unsigned short>::max()) {
+    return NULL;
+  }
+  if (connect_info.auth != cast_channel::CHANNEL_AUTH_TYPE_SSL_VERIFIED &&
+      connect_info.auth != cast_channel::CHANNEL_AUTH_TYPE_SSL) {
+    return NULL;
+  }
+  return new net::IPEndPoint(ip_address, connect_info.port);
+}
+
 bool CastChannelOpenFunction::PrePrepare() {
   api_ = CastChannelAPI::Get(browser_context());
   return CastChannelAsyncApiFunction::PrePrepare();
@@ -190,13 +271,36 @@
 bool CastChannelOpenFunction::Prepare() {
   params_ = Open::Params::Create(*args_);
   EXTENSION_FUNCTION_VALIDATE(params_.get());
-  return true;
+  // The connect_info parameter may be a string URL like cast:// or casts:// or
+  // a ConnectInfo object.
+  std::string cast_url;
+  switch (params_->connect_info->GetType()) {
+    case base::Value::TYPE_STRING:
+      CHECK(params_->connect_info->GetAsString(&cast_url));
+      connect_info_.reset(new ConnectInfo);
+      if (!ParseChannelUrl(GURL(cast_url), connect_info_.get())) {
+        connect_info_.reset();
+      }
+      break;
+    case base::Value::TYPE_DICTIONARY:
+      connect_info_ = ConnectInfo::FromValue(*(params_->connect_info));
+      break;
+    default:
+      break;
+  }
+  if (connect_info_.get()) {
+    channel_auth_ = connect_info_->auth;
+    ip_endpoint_.reset(ParseConnectInfo(*connect_info_));
+    return ip_endpoint_.get() != NULL;
+  }
+  return false;
 }
 
 void CastChannelOpenFunction::AsyncWorkStart() {
   DCHECK(api_);
-  scoped_ptr<CastSocket> socket = api_->CreateCastSocket(extension_->id(),
-                                                         GURL(params_->url));
+  DCHECK(ip_endpoint_.get());
+  scoped_ptr<CastSocket> socket = api_->CreateCastSocket(
+      extension_->id(), *ip_endpoint_, channel_auth_);
   new_channel_id_ = AddSocket(socket.release());
   GetSocket(new_channel_id_)->Connect(
       base::Bind(&CastChannelOpenFunction::OnOpen, this));
diff --git a/chrome/browser/extensions/api/cast_channel/cast_channel_api.h b/chrome/browser/extensions/api/cast_channel/cast_channel_api.h
index 457d03f..6d60de2 100644
--- a/chrome/browser/extensions/api/cast_channel/cast_channel_api.h
+++ b/chrome/browser/extensions/api/cast_channel/cast_channel_api.h
@@ -21,6 +21,10 @@
 class BrowserContext;
 }
 
+namespace net {
+class IPEndPoint;
+}
+
 namespace extensions {
 
 namespace cast_channel = api::cast_channel;
@@ -36,11 +40,12 @@
   // BrowserContextKeyedAPI implementation.
   static BrowserContextKeyedAPIFactory<CastChannelAPI>* GetFactoryInstance();
 
-  // Returns a new CastSocket that connects to |url| and is to be owned by
-  // |extension_id|.
+  // Returns a new CastSocket that connects to |ip_endpoint| with authentication
+  // |channel_auth| and is to be owned by |extension_id|.
   scoped_ptr<cast_channel::CastSocket> CreateCastSocket(
       const std::string& extension_id,
-      const GURL& gurl);
+      const net::IPEndPoint& ip_endpoint,
+      cast_channel::ChannelAuthType channel_auth);
 
   // Sets the CastSocket instance to be returned by CreateCastSocket for
   // testing.
@@ -128,13 +133,29 @@
  private:
   DECLARE_EXTENSION_FUNCTION("cast.channel.open", CAST_CHANNEL_OPEN)
 
+  // Parses the cast:// or casts:// |url|, fills |connect_info| with the
+  // corresponding details, and returns true. Returns false if |url| is not a
+  // valid Cast URL.
+  static bool ParseChannelUrl(const GURL& url,
+                              api::cast_channel::ConnectInfo* connect_info);
+
+  // Validates that |connect_info| represents a valid IP end point and returns a
+  // new IPEndPoint if so.  Otherwise returns NULL.
+  static net::IPEndPoint* ParseConnectInfo(
+      const api::cast_channel::ConnectInfo& connect_info);
+
   void OnOpen(int result);
 
   scoped_ptr<cast_channel::Open::Params> params_;
   // The id of the newly opened socket.
   int new_channel_id_;
   CastChannelAPI* api_;
+  scoped_ptr<api::cast_channel::ConnectInfo> connect_info_;
+  scoped_ptr<net::IPEndPoint> ip_endpoint_;
+  api::cast_channel::ChannelAuthType channel_auth_;
 
+  FRIEND_TEST_ALL_PREFIXES(CastChannelOpenFunctionTest, TestParseChannelUrl);
+  FRIEND_TEST_ALL_PREFIXES(CastChannelOpenFunctionTest, TestParseConnectInfo);
   DISALLOW_COPY_AND_ASSIGN(CastChannelOpenFunction);
 };
 
diff --git a/chrome/browser/extensions/api/cast_channel/cast_channel_api_unittest.cc b/chrome/browser/extensions/api/cast_channel/cast_channel_api_unittest.cc
new file mode 100644
index 0000000..631e299
--- /dev/null
+++ b/chrome/browser/extensions/api/cast_channel/cast_channel_api_unittest.cc
@@ -0,0 +1,91 @@
+// 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.
+
+#include "chrome/browser/extensions/api/cast_channel/cast_channel_api.h"
+
+#include "base/memory/scoped_ptr.h"
+#include "net/base/ip_endpoint.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "url/gurl.h"
+
+namespace extensions {
+namespace api {
+namespace cast_channel {
+
+// Tests URL parsing and validation.
+TEST(CastChannelOpenFunctionTest, TestParseChannelUrl) {
+  typedef CastChannelOpenFunction ccof;
+  ConnectInfo connect_info;
+
+  EXPECT_TRUE(ccof::ParseChannelUrl(GURL("cast://192.0.0.1:8009"),
+                                    &connect_info));
+  EXPECT_EQ(connect_info.ip_address, "192.0.0.1");
+  EXPECT_EQ(connect_info.port, 8009);
+  EXPECT_EQ(connect_info.auth, CHANNEL_AUTH_TYPE_SSL);
+
+  EXPECT_TRUE(ccof::ParseChannelUrl(GURL("casts://192.0.0.1:12345"),
+                                    &connect_info));
+  EXPECT_EQ(connect_info.ip_address, "192.0.0.1");
+  EXPECT_EQ(connect_info.port, 12345);
+  EXPECT_EQ(connect_info.auth, CHANNEL_AUTH_TYPE_SSL_VERIFIED);
+
+  EXPECT_FALSE(ccof::ParseChannelUrl(GURL("http://192.0.0.1:12345"),
+                                     &connect_info));
+  EXPECT_FALSE(ccof::ParseChannelUrl(GURL("cast:192.0.0.1:12345"),
+                                     &connect_info));
+  EXPECT_FALSE(ccof::ParseChannelUrl(GURL("cast://:12345"), &connect_info));
+  EXPECT_FALSE(ccof::ParseChannelUrl(GURL("cast://192.0.0.1:abcd"),
+                                     &connect_info));
+  EXPECT_FALSE(ccof::ParseChannelUrl(GURL(""), &connect_info));
+  EXPECT_FALSE(ccof::ParseChannelUrl(GURL("foo"), &connect_info));
+  EXPECT_FALSE(ccof::ParseChannelUrl(GURL("cast:"), &connect_info));
+  EXPECT_FALSE(ccof::ParseChannelUrl(GURL("cast::"), &connect_info));
+  EXPECT_FALSE(ccof::ParseChannelUrl(GURL("cast://192.0.0.1"), &connect_info));
+  EXPECT_FALSE(ccof::ParseChannelUrl(GURL("cast://:"), &connect_info));
+  EXPECT_FALSE(ccof::ParseChannelUrl(GURL("cast://192.0.0.1:"), &connect_info));
+}
+
+// Tests validation of ConnectInfo.
+TEST(CastChannelOpenFunctionTest, TestParseConnectInfo) {
+  typedef CastChannelOpenFunction ccof;
+  scoped_ptr<net::IPEndPoint> ip_endpoint;
+
+  // Valid ConnectInfo
+  ConnectInfo connect_info;
+  connect_info.ip_address = "192.0.0.1";
+  connect_info.port = 8009;
+  connect_info.auth = CHANNEL_AUTH_TYPE_SSL;
+
+  ip_endpoint.reset(ccof::ParseConnectInfo(connect_info));
+  EXPECT_TRUE(ip_endpoint.get() != NULL);
+  EXPECT_EQ(ip_endpoint->ToString(), "192.0.0.1:8009");
+
+  // Invalid IP
+  ConnectInfo invalid_ip_connect_info;
+  invalid_ip_connect_info.ip_address = "blargh";
+  invalid_ip_connect_info.port = 8009;
+  invalid_ip_connect_info.auth = CHANNEL_AUTH_TYPE_SSL;
+  ip_endpoint.reset(ccof::ParseConnectInfo(invalid_ip_connect_info));
+  EXPECT_TRUE(ip_endpoint.get() == NULL);
+
+  // Invalid port
+  ConnectInfo invalid_port_connect_info;
+  invalid_port_connect_info.ip_address = "192.0.0.1";
+  invalid_port_connect_info.port = -1;
+  invalid_port_connect_info.auth = CHANNEL_AUTH_TYPE_SSL;
+  ip_endpoint.reset(ccof::ParseConnectInfo(invalid_port_connect_info));
+  EXPECT_TRUE(ip_endpoint.get() == NULL);
+
+  // Invalid auth
+  ConnectInfo invalid_auth_connect_info;
+  invalid_auth_connect_info.ip_address = "192.0.0.1";
+  invalid_auth_connect_info.port = 8009;
+  invalid_auth_connect_info.auth = CHANNEL_AUTH_TYPE_NONE;
+  ip_endpoint.reset(ccof::ParseConnectInfo(invalid_auth_connect_info));
+  EXPECT_TRUE(ip_endpoint.get() == NULL);
+}
+
+}  // namespace cast_channel
+}  // namespace api
+}  // namespace extensions
diff --git a/chrome/browser/extensions/api/cast_channel/cast_channel_apitest.cc b/chrome/browser/extensions/api/cast_channel/cast_channel_apitest.cc
index 893aafb..58485bf 100644
--- a/chrome/browser/extensions/api/cast_channel/cast_channel_apitest.cc
+++ b/chrome/browser/extensions/api/cast_channel/cast_channel_apitest.cc
@@ -19,18 +19,19 @@
 
 namespace cast_channel =  extensions::api::cast_channel;
 using cast_channel::CastSocket;
-using cast_channel::ChannelInfo;
+using cast_channel::ChannelError;
 using cast_channel::MessageInfo;
+using cast_channel::ReadyState;
 
 using ::testing::A;
 using ::testing::_;
 using ::testing::Invoke;
+using ::testing::InSequence;
 using ::testing::Return;
 
 namespace {
 
 const char kTestExtensionId[] = "ddchlicdkolnonkihahngkmmmjnjlkkf";
-const char kTestUrl[] = "cast://192.168.1.1:8009";
 
 static void FillMessageInfo(MessageInfo* message_info,
                             const std::string& message) {
@@ -49,8 +50,10 @@
 class MockCastSocket : public CastSocket {
  public:
   explicit MockCastSocket(CastSocket::Delegate* delegate,
+                          net::IPEndPoint ip_endpoint,
                           net::NetLog* net_log)
-      : CastSocket(kTestExtensionId, GURL(kTestUrl), delegate, net_log) {}
+    : CastSocket(kTestExtensionId, ip_endpoint,
+                 cast_channel::CHANNEL_AUTH_TYPE_SSL, delegate, net_log) {}
   virtual ~MockCastSocket() {}
 
   virtual bool CalledOnValidThread() const OVERRIDE {
@@ -58,11 +61,12 @@
     return true;
   }
 
-  MOCK_CONST_METHOD1(FillChannelInfo, void(ChannelInfo*));
   MOCK_METHOD1(Connect, void(const net::CompletionCallback& callback));
   MOCK_METHOD2(SendMessage, void(const MessageInfo& message,
                                  const net::CompletionCallback& callback));
   MOCK_METHOD1(Close, void(const net::CompletionCallback& callback));
+  MOCK_CONST_METHOD0(ready_state, cast_channel::ReadyState());
+  MOCK_CONST_METHOD0(error_state, cast_channel::ChannelError());
 };
 
 }  // namespace
@@ -80,30 +84,24 @@
 
   void SetUpMockCastSocket() {
     extensions::CastChannelAPI* api = GetApi();
-    mock_cast_socket_ = new MockCastSocket(api, &capturing_net_log_);
+    net::IPAddressNumber ip_number;
+    net::ParseIPLiteralToNumber("192.168.1.1", &ip_number);
+    net::IPEndPoint ip_endpoint(ip_number, 8009);
+    mock_cast_socket_ = new MockCastSocket(api, ip_endpoint,
+                                           &capturing_net_log_);
     // Transfers ownership of the socket.
     api->SetSocketForTest(
         make_scoped_ptr<CastSocket>(mock_cast_socket_).Pass());
+
+    // Set expectations on error_state().
+    EXPECT_CALL(*mock_cast_socket_, error_state())
+      .WillRepeatedly(Return(cast_channel::CHANNEL_ERROR_NONE));
   }
 
   extensions::CastChannelAPI* GetApi() {
     return extensions::CastChannelAPI::Get(profile());
   }
 
-  static void FillChannelInfoForOpenState(ChannelInfo* channel_info) {
-    channel_info->channel_id = 1;
-    channel_info->url = kTestUrl;
-    channel_info->ready_state = cast_channel::READY_STATE_OPEN;
-    channel_info->error_state = cast_channel::CHANNEL_ERROR_NONE;
-  }
-
-  static void FillChannelInfoForClosedState(ChannelInfo* channel_info) {
-    channel_info->channel_id = 1;
-    channel_info->url = kTestUrl;
-    channel_info->ready_state = cast_channel::READY_STATE_CLOSED;
-    channel_info->error_state = cast_channel::CHANNEL_ERROR_NONE;
-  }
-
  protected:
   void CallOnMessage(const std::string& message) {
     content::BrowserThread::PostTask(
@@ -122,7 +120,6 @@
   }
 
   MockCastSocket* mock_cast_socket_;
-  ChannelInfo channel_info;
   net::CapturingNetLog capturing_net_log_;
 };
 
@@ -133,21 +130,26 @@
 #else
 #define MAYBE_TestOpenSendClose TestOpenSendClose
 #endif
-// Test loading extension, opening a channel, adding a listener,
-// writing, reading, and closing.
+// Test loading extension, opening a channel with ConnectInfo, adding a
+// listener, writing, reading, and closing.
 IN_PROC_BROWSER_TEST_F(CastChannelAPITest, MAYBE_TestOpenSendClose) {
   SetUpMockCastSocket();
 
-  EXPECT_CALL(*mock_cast_socket_, Connect(_))
-      .WillOnce(InvokeCompletionCallback<0>(net::OK));
-  EXPECT_CALL(*mock_cast_socket_, FillChannelInfo(_))
-      .WillOnce(Invoke(FillChannelInfoForOpenState))
-      .WillOnce(Invoke(FillChannelInfoForOpenState))
-      .WillOnce(Invoke(FillChannelInfoForClosedState));
-  EXPECT_CALL(*mock_cast_socket_, SendMessage(A<const MessageInfo&>(), _)).
-      WillOnce(InvokeCompletionCallback<1>(net::OK));
-  EXPECT_CALL(*mock_cast_socket_, Close(_)).
-      WillOnce(InvokeCompletionCallback<0>(net::OK));
+  {
+    InSequence dummy;
+    EXPECT_CALL(*mock_cast_socket_, Connect(_))
+        .WillOnce(InvokeCompletionCallback<0>(net::OK));
+    EXPECT_CALL(*mock_cast_socket_, ready_state())
+        .WillOnce(Return(cast_channel::READY_STATE_OPEN));
+    EXPECT_CALL(*mock_cast_socket_, SendMessage(A<const MessageInfo&>(), _))
+        .WillOnce(InvokeCompletionCallback<1>(net::OK));
+    EXPECT_CALL(*mock_cast_socket_, ready_state())
+        .WillOnce(Return(cast_channel::READY_STATE_OPEN));
+    EXPECT_CALL(*mock_cast_socket_, Close(_))
+        .WillOnce(InvokeCompletionCallback<0>(net::OK));
+    EXPECT_CALL(*mock_cast_socket_, ready_state())
+        .WillOnce(Return(cast_channel::READY_STATE_CLOSED));
+  }
 
   EXPECT_TRUE(RunExtensionSubtest("cast_channel/api",
                                   "test_open_send_close.html"));
@@ -156,6 +158,38 @@
 // TODO(munjal): Win Dbg has a workaround that makes RunExtensionSubtest
 // always return true without actually running the test. Remove when fixed.
 #if defined(OS_WIN) && !defined(NDEBUG)
+#define MAYBE_TestOpenSendCloseWithUrl DISABLED_TestOpenSendCloseWithUrl
+#else
+#define MAYBE_TestOpenSendCloseWithUrl TestOpenSendCloseWithUrl
+#endif
+// Test loading extension, opening a channel with a URL, adding a listener,
+// writing, reading, and closing.
+IN_PROC_BROWSER_TEST_F(CastChannelAPITest, MAYBE_TestOpenSendCloseWithUrl) {
+  SetUpMockCastSocket();
+
+  {
+    InSequence dummy;
+    EXPECT_CALL(*mock_cast_socket_, Connect(_))
+        .WillOnce(InvokeCompletionCallback<0>(net::OK));
+    EXPECT_CALL(*mock_cast_socket_, ready_state())
+        .WillOnce(Return(cast_channel::READY_STATE_OPEN));
+    EXPECT_CALL(*mock_cast_socket_, SendMessage(A<const MessageInfo&>(), _))
+        .WillOnce(InvokeCompletionCallback<1>(net::OK));
+    EXPECT_CALL(*mock_cast_socket_, ready_state())
+        .WillOnce(Return(cast_channel::READY_STATE_OPEN));
+    EXPECT_CALL(*mock_cast_socket_, Close(_))
+        .WillOnce(InvokeCompletionCallback<0>(net::OK));
+    EXPECT_CALL(*mock_cast_socket_, ready_state())
+        .WillOnce(Return(cast_channel::READY_STATE_CLOSED));
+  }
+
+  EXPECT_TRUE(RunExtensionSubtest("cast_channel/api",
+                                  "test_open_send_close_url.html"));
+}
+
+// TODO(munjal): Win Dbg has a workaround that makes RunExtensionSubtest
+// always return true without actually running the test. Remove when fixed.
+#if defined(OS_WIN) && !defined(NDEBUG)
 #define MAYBE_TestOpenReceiveClose DISABLED_TestOpenReceiveClose
 #else
 #define MAYBE_TestOpenReceiveClose TestOpenReceiveClose
@@ -165,15 +199,18 @@
 IN_PROC_BROWSER_TEST_F(CastChannelAPITest, MAYBE_TestOpenReceiveClose) {
   SetUpMockCastSocket();
 
-  EXPECT_CALL(*mock_cast_socket_, Connect(_))
-      .WillOnce(InvokeCompletionCallback<0>(net::OK));
-  EXPECT_CALL(*mock_cast_socket_, FillChannelInfo(_))
-      .WillOnce(Invoke(FillChannelInfoForOpenState))
-      .WillOnce(Invoke(FillChannelInfoForOpenState))
-      .WillOnce(Invoke(FillChannelInfoForOpenState))
-      .WillOnce(Invoke(FillChannelInfoForClosedState));
-  EXPECT_CALL(*mock_cast_socket_, Close(_)).
-      WillOnce(InvokeCompletionCallback<0>(net::OK));
+  {
+    InSequence dummy;
+    EXPECT_CALL(*mock_cast_socket_, Connect(_))
+        .WillOnce(InvokeCompletionCallback<0>(net::OK));
+    EXPECT_CALL(*mock_cast_socket_, ready_state())
+        .Times(3)
+        .WillRepeatedly(Return(cast_channel::READY_STATE_OPEN));
+    EXPECT_CALL(*mock_cast_socket_, Close(_))
+        .WillOnce(InvokeCompletionCallback<0>(net::OK));
+    EXPECT_CALL(*mock_cast_socket_, ready_state())
+        .WillOnce(Return(cast_channel::READY_STATE_CLOSED));
+  }
 
   EXPECT_TRUE(RunExtensionSubtest("cast_channel/api",
                                   "test_open_receive_close.html"));
diff --git a/chrome/browser/extensions/api/cast_channel/cast_socket.cc b/chrome/browser/extensions/api/cast_channel/cast_socket.cc
index 3a7883a..6130d92 100644
--- a/chrome/browser/extensions/api/cast_channel/cast_socket.cc
+++ b/chrome/browser/extensions/api/cast_channel/cast_socket.cc
@@ -4,11 +4,13 @@
 
 #include "chrome/browser/extensions/api/cast_channel/cast_socket.h"
 
+#include <stdlib.h>
 #include <string.h>
 
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/lazy_instance.h"
+#include "base/numerics/safe_conversions.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/sys_byteorder.h"
 #include "chrome/browser/extensions/api/cast_channel/cast_auth_util.h"
@@ -29,15 +31,13 @@
 #include "net/ssl/ssl_config_service.h"
 #include "net/ssl/ssl_info.h"
 
-// Assumes |url_| of type GURL is available in the current scope.
-#define VLOG_WITH_URL(level) VLOG(level) << "[" + url_.spec() + "] "
+// Assumes |ip_endpoint_| of type net::IPEndPoint and |channel_auth_| of enum
+// type ChannelAuthType are available in the current scope.
+#define VLOG_WITH_CONNECTION(level) VLOG(level) << "[" << \
+    ip_endpoint_.ToString() << ", auth=" << channel_auth_ << "] "
 
 namespace {
 
-// Allowed schemes for Cast device URLs.
-const char kCastInsecureScheme[] = "cast";
-const char kCastSecureScheme[] = "casts";
-
 // The default keepalive delay.  On Linux, keepalives probes will be sent after
 // the socket is idle for this length of time, and the socket will be closed
 // after 9 failed probes.  So the total idle time before close is 10 *
@@ -63,20 +63,16 @@
 namespace api {
 namespace cast_channel {
 
-const uint32 kMaxMessageSize = 65536;
-// Don't use sizeof(MessageHeader) because of alignment; instead, sum the
-// sizeof() for the fields.
-const uint32 kMessageHeaderSize = sizeof(uint32);
-
 CastSocket::CastSocket(const std::string& owner_extension_id,
-                       const GURL& url,
+                       const net::IPEndPoint& ip_endpoint,
+                       ChannelAuthType channel_auth,
                        CastSocket::Delegate* delegate,
                        net::NetLog* net_log) :
     ApiResource(owner_extension_id),
     channel_id_(0),
-    url_(url),
+    ip_endpoint_(ip_endpoint),
+    channel_auth_(channel_auth),
     delegate_(delegate),
-    auth_required_(false),
     current_message_size_(0),
     current_message_(new CastMessage()),
     net_log_(net_log),
@@ -86,21 +82,27 @@
     error_state_(CHANNEL_ERROR_NONE),
     ready_state_(READY_STATE_NONE) {
   DCHECK(net_log_);
+  DCHECK(channel_auth_ == CHANNEL_AUTH_TYPE_SSL ||
+         channel_auth_ == CHANNEL_AUTH_TYPE_SSL_VERIFIED);
   net_log_source_.type = net::NetLog::SOURCE_SOCKET;
   net_log_source_.id = net_log_->NextID();
 
   // Reuse these buffers for each message.
   header_read_buffer_ = new net::GrowableIOBuffer();
-  header_read_buffer_->SetCapacity(kMessageHeaderSize);
+  header_read_buffer_->SetCapacity(MessageHeader::header_size());
   body_read_buffer_ = new net::GrowableIOBuffer();
-  body_read_buffer_->SetCapacity(kMaxMessageSize);
+  body_read_buffer_->SetCapacity(MessageHeader::max_message_size());
   current_read_buffer_ = header_read_buffer_;
 }
 
 CastSocket::~CastSocket() { }
 
-const GURL& CastSocket::url() const {
-  return url_;
+ReadyState CastSocket::ready_state() const {
+  return ready_state_;
+}
+
+ChannelError CastSocket::error_state() const {
+  return error_state_;
 }
 
 scoped_ptr<net::TCPClientSocket> CastSocket::CreateTcpSocket() {
@@ -150,7 +152,8 @@
   bool result = net::X509Certificate::GetDEREncoded(
      ssl_info.cert->os_cert_handle(), cert);
   if (result)
-    VLOG_WITH_URL(1) << "Successfully extracted peer certificate: " << *cert;
+    VLOG_WITH_CONNECTION(1) << "Successfully extracted peer certificate: "
+                            << *cert;
   return result;
 }
 
@@ -160,16 +163,11 @@
 
 void CastSocket::Connect(const net::CompletionCallback& callback) {
   DCHECK(CalledOnValidThread());
-  VLOG_WITH_URL(1) << "Connect readyState = " << ready_state_;
+  VLOG_WITH_CONNECTION(1) << "Connect readyState = " << ready_state_;
   if (ready_state_ != READY_STATE_NONE) {
     callback.Run(net::ERR_CONNECTION_FAILED);
     return;
   }
-  if (!ParseChannelUrl(url_)) {
-    callback.Run(net::ERR_CONNECTION_FAILED);
-    return;
-  }
-
   ready_state_ = READY_STATE_CONNECTING;
   connect_callback_ = callback;
   connect_state_ = CONN_STATE_TCP_CONNECT;
@@ -236,7 +234,7 @@
 }
 
 int CastSocket::DoTcpConnect() {
-  VLOG_WITH_URL(1) << "DoTcpConnect";
+  VLOG_WITH_CONNECTION(1) << "DoTcpConnect";
   connect_state_ = CONN_STATE_TCP_CONNECT_COMPLETE;
   tcp_socket_ = CreateTcpSocket();
   return tcp_socket_->Connect(
@@ -244,7 +242,7 @@
 }
 
 int CastSocket::DoTcpConnectComplete(int result) {
-  VLOG_WITH_URL(1) << "DoTcpConnectComplete: " << result;
+  VLOG_WITH_CONNECTION(1) << "DoTcpConnectComplete: " << result;
   if (result == net::OK) {
     // Enable TCP protocol-level keep-alive.
     bool result = tcp_socket_->SetKeepAlive(true, kTcpKeepAliveDelaySecs);
@@ -255,7 +253,7 @@
 }
 
 int CastSocket::DoSslConnect() {
-  VLOG_WITH_URL(1) << "DoSslConnect";
+  VLOG_WITH_CONNECTION(1) << "DoSslConnect";
   connect_state_ = CONN_STATE_SSL_CONNECT_COMPLETE;
   socket_ = CreateSslSocket(tcp_socket_.PassAs<net::StreamSocket>());
   return socket_->Connect(
@@ -263,24 +261,24 @@
 }
 
 int CastSocket::DoSslConnectComplete(int result) {
-  VLOG_WITH_URL(1) << "DoSslConnectComplete: " << result;
+  VLOG_WITH_CONNECTION(1) << "DoSslConnectComplete: " << result;
   if (result == net::ERR_CERT_AUTHORITY_INVALID &&
-             peer_cert_.empty() &&
-             ExtractPeerCert(&peer_cert_)) {
+      peer_cert_.empty() && ExtractPeerCert(&peer_cert_)) {
     connect_state_ = CONN_STATE_TCP_CONNECT;
-  } else if (result == net::OK && auth_required_) {
+  } else if (result == net::OK &&
+             channel_auth_ == CHANNEL_AUTH_TYPE_SSL_VERIFIED) {
     connect_state_ = CONN_STATE_AUTH_CHALLENGE_SEND;
   }
   return result;
 }
 
 int CastSocket::DoAuthChallengeSend() {
-  VLOG_WITH_URL(1) << "DoAuthChallengeSend";
+  VLOG_WITH_CONNECTION(1) << "DoAuthChallengeSend";
   connect_state_ = CONN_STATE_AUTH_CHALLENGE_SEND_COMPLETE;
   CastMessage challenge_message;
   CreateAuthChallengeMessage(&challenge_message);
-  VLOG_WITH_URL(1) << "Sending challenge: "
-                   << CastMessageToString(challenge_message);
+  VLOG_WITH_CONNECTION(1) << "Sending challenge: "
+                          << CastMessageToString(challenge_message);
   // Post a task to send auth challenge so that DoWriteLoop is not nested inside
   // DoConnectLoop. This is not strictly necessary but keeps the write loop
   // code decoupled from connect loop code.
@@ -294,7 +292,7 @@
 }
 
 int CastSocket::DoAuthChallengeSendComplete(int result) {
-  VLOG_WITH_URL(1) << "DoAuthChallengeSendComplete: " << result;
+  VLOG_WITH_CONNECTION(1) << "DoAuthChallengeSendComplete: " << result;
   if (result < 0)
     return result;
   connect_state_ = CONN_STATE_AUTH_CHALLENGE_REPLY_COMPLETE;
@@ -307,12 +305,12 @@
 }
 
 int CastSocket::DoAuthChallengeReplyComplete(int result) {
-  VLOG_WITH_URL(1) << "DoAuthChallengeReplyComplete: " << result;
+  VLOG_WITH_CONNECTION(1) << "DoAuthChallengeReplyComplete: " << result;
   if (result < 0)
     return result;
   if (!VerifyChallengeReply())
     return net::ERR_FAILED;
-  VLOG_WITH_URL(1) << "Auth challenge verification succeeded";
+  VLOG_WITH_CONNECTION(1) << "Auth challenge verification succeeded";
   return net::OK;
 }
 
@@ -327,7 +325,7 @@
 
 void CastSocket::Close(const net::CompletionCallback& callback) {
   DCHECK(CalledOnValidThread());
-  VLOG_WITH_URL(1) << "Close ReadyState = " << ready_state_;
+  VLOG_WITH_CONNECTION(1) << "Close ReadyState = " << ready_state_;
   tcp_socket_.reset();
   socket_.reset();
   cert_verifier_.reset();
@@ -371,7 +369,7 @@
 
 void CastSocket::DoWriteLoop(int result) {
   DCHECK(CalledOnValidThread());
-  VLOG_WITH_URL(1) << "DoWriteLoop queue size: " << write_queue_.size();
+  VLOG_WITH_CONNECTION(1) << "DoWriteLoop queue size: " << write_queue_.size();
 
   if (write_queue_.empty()) {
     write_state_ = WRITE_STATE_NONE;
@@ -421,8 +419,9 @@
   DCHECK(!write_queue_.empty());
   WriteRequest& request = write_queue_.front();
 
-  VLOG_WITH_URL(2) << "WriteData byte_count = " << request.io_buffer->size()
-                   << " bytes_written " << request.io_buffer->BytesConsumed();
+  VLOG_WITH_CONNECTION(2) << "WriteData byte_count = "
+                          << request.io_buffer->size() << " bytes_written "
+                          << request.io_buffer->BytesConsumed();
 
   write_state_ = WRITE_STATE_WRITE_COMPLETE;
 
@@ -552,12 +551,12 @@
   if (header_read_buffer_->RemainingCapacity() > 0) {
     current_read_buffer_ = header_read_buffer_;
     num_bytes_to_read = header_read_buffer_->RemainingCapacity();
-    DCHECK_LE(num_bytes_to_read, kMessageHeaderSize);
+    DCHECK_LE(num_bytes_to_read, MessageHeader::header_size());
   } else {
     DCHECK_GT(current_message_size_, 0U);
     num_bytes_to_read = current_message_size_ - body_read_buffer_->offset();
     current_read_buffer_ = body_read_buffer_;
-    DCHECK_LE(num_bytes_to_read, kMaxMessageSize);
+    DCHECK_LE(num_bytes_to_read, MessageHeader::max_message_size());
   }
   DCHECK_GT(num_bytes_to_read, 0U);
 
@@ -569,11 +568,12 @@
 }
 
 int CastSocket::DoReadComplete(int result) {
-  VLOG_WITH_URL(2) << "DoReadComplete result = " << result
-                   << " header offset = " << header_read_buffer_->offset()
-                   << " body offset = " << body_read_buffer_->offset();
+  VLOG_WITH_CONNECTION(2) << "DoReadComplete result = " << result
+                          << " header offset = "
+                          << header_read_buffer_->offset()
+                          << " body offset = " << body_read_buffer_->offset();
   if (result <= 0) {  // 0 means EOF: the peer closed the socket
-    VLOG_WITH_URL(1) << "Read error, peer closed the socket";
+    VLOG_WITH_CONNECTION(1) << "Read error, peer closed the socket";
     error_state_ = CHANNEL_ERROR_SOCKET_ERROR;
     read_state_ = READ_STATE_ERROR;
     return result == 0 ? net::ERR_FAILED : result;
@@ -642,14 +642,14 @@
 
 bool CastSocket::ProcessHeader() {
   DCHECK_EQ(static_cast<uint32>(header_read_buffer_->offset()),
-            kMessageHeaderSize);
+            MessageHeader::header_size());
   MessageHeader header;
   MessageHeader::ReadFromIOBuffer(header_read_buffer_.get(), &header);
-  if (header.message_size > kMaxMessageSize)
+  if (header.message_size > MessageHeader::max_message_size())
     return false;
 
-  VLOG_WITH_URL(2) << "Parsed header { message_size: "
-                   << header.message_size << " }";
+  VLOG_WITH_CONNECTION(2) << "Parsed header { message_size: "
+                          << header.message_size << " }";
   current_message_size_ = header.message_size;
   return true;
 }
@@ -674,7 +674,7 @@
   DCHECK(message_data);
   message_proto.SerializeToString(message_data);
   size_t message_size = message_data->size();
-  if (message_size > kMaxMessageSize) {
+  if (message_size > MessageHeader::max_message_size()) {
     message_data->clear();
     return false;
   }
@@ -693,49 +693,9 @@
     delegate_->OnError(this, error);
 }
 
-bool CastSocket::ParseChannelUrl(const GURL& url) {
-  VLOG_WITH_URL(2) << "ParseChannelUrl";
-  if (url.SchemeIs(kCastInsecureScheme)) {
-    auth_required_ = false;
-  } else if (url.SchemeIs(kCastSecureScheme)) {
-    auth_required_ = true;
-  } else {
-    return false;
-  }
-  // TODO(mfoltz): Manual parsing, yech. Register cast[s] as standard schemes?
-  // TODO(mfoltz): Test for IPv6 addresses.  Brackets or no brackets?
-  // TODO(mfoltz): Maybe enforce restriction to IPv4 private and IPv6
-  // link-local networks
-  const std::string& path = url.path();
-  // Shortest possible: //A:B
-  if (path.size() < 5) {
-    return false;
-  }
-  if (path.find("//") != 0) {
-    return false;
-  }
-  size_t colon = path.find_last_of(':');
-  if (colon == std::string::npos || colon < 3 || colon > path.size() - 2) {
-    return false;
-  }
-  const std::string& ip_address_str = path.substr(2, colon - 2);
-  const std::string& port_str = path.substr(colon + 1);
-  VLOG_WITH_URL(2) << "IP: " << ip_address_str << " Port: " << port_str;
-  int port;
-  if (!base::StringToInt(port_str, &port))
-    return false;
-  net::IPAddressNumber ip_address;
-  if (!net::ParseIPLiteralToNumber(ip_address_str, &ip_address))
-    return false;
-  ip_endpoint_ = net::IPEndPoint(ip_address, port);
-  return true;
-};
-
-void CastSocket::FillChannelInfo(ChannelInfo* channel_info) const {
-  channel_info->channel_id = channel_id_;
-  channel_info->url = url_.spec();
-  channel_info->ready_state = ready_state_;
-  channel_info->error_state = error_state_;
+std::string CastSocket::CastUrl() const {
+  return ((channel_auth_ == CHANNEL_AUTH_TYPE_SSL_VERIFIED) ?
+          "casts://" : "cast://") + ip_endpoint_.ToString();
 }
 
 bool CastSocket::CalledOnValidThread() const {
@@ -750,18 +710,27 @@
   message_size = static_cast<size_t>(size);
 }
 
+// TODO(mfoltz): Investigate replacing header serialization with base::Pickle,
+// if bit-for-bit compatible.
 void CastSocket::MessageHeader::PrependToString(std::string* str) {
   MessageHeader output = *this;
   output.message_size = base::HostToNet32(message_size);
-  char char_array[kMessageHeaderSize];
-  memcpy(&char_array, &output, arraysize(char_array));
-  str->insert(0, char_array, arraysize(char_array));
+  size_t header_size = base::checked_cast<size_t,uint32>(
+      MessageHeader::header_size());
+  scoped_ptr<char, base::FreeDeleter> char_array(
+      static_cast<char*>(malloc(header_size)));
+  memcpy(char_array.get(), &output, header_size);
+  str->insert(0, char_array.get(), header_size);
 }
 
+// TODO(mfoltz): Investigate replacing header deserialization with base::Pickle,
+// if bit-for-bit compatible.
 void CastSocket::MessageHeader::ReadFromIOBuffer(
     net::GrowableIOBuffer* buffer, MessageHeader* header) {
   uint32 message_size;
-  memcpy(&message_size, buffer->StartOfBuffer(), kMessageHeaderSize);
+  size_t header_size = base::checked_cast<size_t,uint32>(
+      MessageHeader::header_size());
+  memcpy(&message_size, buffer->StartOfBuffer(), header_size);
   header->message_size = base::NetToHost32(message_size);
 }
 
@@ -788,4 +757,4 @@
 }  // namespace api
 }  // namespace extensions
 
-#undef VLOG_WITH_URL
+#undef VLOG_WITH_CONNECTION
diff --git a/chrome/browser/extensions/api/cast_channel/cast_socket.h b/chrome/browser/extensions/api/cast_channel/cast_socket.h
index 1025cdd..dba56d7 100644
--- a/chrome/browser/extensions/api/cast_channel/cast_socket.h
+++ b/chrome/browser/extensions/api/cast_channel/cast_socket.h
@@ -21,7 +21,6 @@
 #include "net/base/io_buffer.h"
 #include "net/base/ip_endpoint.h"
 #include "net/base/net_log.h"
-#include "url/gurl.h"
 
 namespace net {
 class AddressList;
@@ -38,16 +37,9 @@
 
 class CastMessage;
 
-// Size (in bytes) of the largest allowed message payload on the wire (without
-// the header).
-extern const uint32 kMaxMessageSize;
-
-// Size (in bytes) of the message header.
-extern const uint32 kMessageHeaderSize;
-
 // This class implements a channel between Chrome and a Cast device using a TCP
-// socket. The channel may be unauthenticated (cast://) or authenticated
-// (casts://). All CastSocket objects must be used only on the IO thread.
+// socket with SSL.  The channel may authenticate that the receiver is a genuine
+// Cast device.  All CastSocket objects must be used only on the IO thread.
 //
 // NOTE: Not called "CastChannel" to reduce confusion with the generated API
 // code.
@@ -69,19 +61,25 @@
     virtual ~Delegate() {}
   };
 
-  // Creates a new CastSocket to |url|. |owner_extension_id| is the id of the
-  // extension that opened the socket.
+  // Creates a new CastSocket that connects to |ip_endpoint| with
+  // |channel_auth|. |owner_extension_id| is the id of the extension that opened
+  // the socket.  |channel_auth| must not be CHANNEL_AUTH_NONE.
   CastSocket(const std::string& owner_extension_id,
-             const GURL& url,
+             const net::IPEndPoint& ip_endpoint,
+             ChannelAuthType channel_auth,
              CastSocket::Delegate* delegate,
              net::NetLog* net_log);
   virtual ~CastSocket();
 
-  // The URL for the channel.
-  const GURL& url() const;
+  // The IP endpoint for the destination of the channel.
+  const net::IPEndPoint& ip_endpoint() const { return ip_endpoint_; }
 
-  // Whether to perform receiver authentication.
-  bool auth_required() const { return auth_required_; }
+  // The authentication level requested for the channel.
+  ChannelAuthType channel_auth() const { return channel_auth_; }
+
+  // Returns a cast:// or casts:// URL for the channel endpoint.
+  // For backwards compatibility.
+  std::string CastUrl() const;
 
   // Channel id for the ApiResourceManager.
   int id() const { return channel_id_; }
@@ -89,12 +87,12 @@
   // Sets the channel id.
   void set_id(int channel_id) { channel_id_ = channel_id; }
 
-  // Returns the state of the channel.
-  ReadyState ready_state() const { return ready_state_; }
+  // Returns the state of the channel.  Virtual for testing.
+  virtual ReadyState ready_state() const;
 
   // Returns the last error that occurred on this channel, or
-  // CHANNEL_ERROR_NONE if no error has occurred.
-  ChannelError error_state() const { return error_state_; }
+  // CHANNEL_ERROR_NONE if no error has occurred.  Virtual for testing.
+  virtual ChannelError error_state() const;
 
   // Connects the channel to the peer. If successful, the channel will be in
   // READY_STATE_OPEN.
@@ -119,8 +117,29 @@
   // It is fine to delete the CastSocket object in |callback|.
   virtual void Close(const net::CompletionCallback& callback);
 
-  // Fills |channel_info| with the status of this channel.
-  virtual void FillChannelInfo(ChannelInfo* channel_info) const;
+ protected:
+  // Message header struct. If fields are added, be sure to update
+  // header_size().  Protected to allow use of *_size() methods in unit tests.
+  struct MessageHeader {
+    MessageHeader();
+    // Sets the message size.
+    void SetMessageSize(size_t message_size);
+    // Prepends this header to |str|.
+    void PrependToString(std::string* str);
+    // Reads |header| from the beginning of |buffer|.
+    static void ReadFromIOBuffer(net::GrowableIOBuffer* buffer,
+                                 MessageHeader* header);
+    // Size (in bytes) of the message header.
+    static uint32 header_size() { return sizeof(uint32); }
+
+    // Maximum size (in bytes) of a message payload on the wire (does not
+    // include header).
+    static uint32 max_message_size() { return 65536; }
+
+    std::string ToString();
+    // The size of the following protocol message in bytes, in host byte order.
+    uint32 message_size;
+  };
 
  private:
   friend class ApiResourceManager<CastSocket>;
@@ -163,8 +182,6 @@
   // Creates an instance of SSLClientSocket with the given underlying |socket|.
   virtual scoped_ptr<net::SSLClientSocket> CreateSslSocket(
       scoped_ptr<net::StreamSocket> socket);
-  // Returns IPEndPoint for the URL to connect to.
-  const net::IPEndPoint& ip_endpoint() const { return ip_endpoint_; }
   // Extracts peer certificate from SSLClientSocket instance when the socket
   // is in cert error state.
   // Returns whether certificate is successfully extracted.
@@ -229,9 +246,6 @@
 
   // Runs the external connection callback and resets it.
   void DoConnectCallback(int result);
-  // Verifies that the URL is a valid cast:// or casts:// URL and sets url_ to
-  // the result.
-  bool ParseChannelUrl(const GURL& url);
   // Adds |message| to the write queue and starts the write loop if needed.
   void SendCastMessageInternal(const CastMessage& message,
                                const net::CompletionCallback& callback);
@@ -258,14 +272,12 @@
   // The id of the channel.
   int channel_id_;
 
-  // The URL of the peer (cast:// or casts://).
-  GURL url_;
+  // The IP endpoint that the the channel is connected to.
+  net::IPEndPoint ip_endpoint_;
+  // Receiver authentication requested for the channel.
+  ChannelAuthType channel_auth_;
   // Delegate to inform of incoming messages and errors.
   Delegate* delegate_;
-  // True if receiver authentication should be performed.
-  bool auth_required_;
-  // The IP endpoint of the peer.
-  net::IPEndPoint ip_endpoint_;
 
   // IOBuffer for reading the message header.
   scoped_refptr<net::GrowableIOBuffer> header_read_buffer_;
@@ -313,22 +325,6 @@
   // The current status of the channel.
   ReadyState ready_state_;
 
-  // Message header struct. If fields are added, be sure to update
-  // kMessageHeaderSize in the .cc.
-  struct MessageHeader {
-    MessageHeader();
-    // Sets the message size.
-    void SetMessageSize(size_t message_size);
-    // Prepends this header to |str|.
-    void PrependToString(std::string* str);
-    // Reads |header| from the beginning of |buffer|.
-    static void ReadFromIOBuffer(net::GrowableIOBuffer* buffer,
-                                 MessageHeader* header);
-    std::string ToString();
-    // The size of the following protocol message in bytes, in host byte order.
-    uint32 message_size;
-  };
-
   // Holds a message to be written to the socket. |callback| is invoked when the
   // message is fully written or an error occurrs.
   struct WriteRequest {
@@ -345,10 +341,11 @@
   // being written.
   std::queue<WriteRequest> write_queue_;
 
-  FRIEND_TEST_ALL_PREFIXES(CastSocketTest, TestCastURLs);
-  FRIEND_TEST_ALL_PREFIXES(CastSocketTest, TestRead);
-  FRIEND_TEST_ALL_PREFIXES(CastSocketTest, TestReadMany);
   FRIEND_TEST_ALL_PREFIXES(CastSocketTest, TestFullSecureConnectionFlowAsync);
+  FRIEND_TEST_ALL_PREFIXES(CastSocketTest, TestRead);
+  FRIEND_TEST_ALL_PREFIXES(CastSocketTest, TestReadHeaderParseError);
+  FRIEND_TEST_ALL_PREFIXES(CastSocketTest, TestReadMany);
+  FRIEND_TEST_ALL_PREFIXES(CastSocketTest, TestWriteErrorLargeMessage);
   DISALLOW_COPY_AND_ASSIGN(CastSocket);
 };
 
diff --git a/chrome/browser/extensions/api/cast_channel/cast_socket_unittest.cc b/chrome/browser/extensions/api/cast_channel/cast_socket_unittest.cc
index 923d60b..d9e4aee 100644
--- a/chrome/browser/extensions/api/cast_channel/cast_socket_unittest.cc
+++ b/chrome/browser/extensions/api/cast_channel/cast_socket_unittest.cc
@@ -12,9 +12,8 @@
 #include "chrome/browser/extensions/api/cast_channel/cast_message_util.h"
 #include "net/base/address_list.h"
 #include "net/base/capturing_net_log.h"
-#include "net/base/io_buffer.h"
 #include "net/base/net_errors.h"
-#include "net/base/net_log.h"
+#include "net/base/net_util.h"
 #include "net/socket/socket_test_util.h"
 #include "net/socket/ssl_client_socket.h"
 #include "net/socket/tcp_client_socket.h"
@@ -66,11 +65,6 @@
       data.c_str(), data.size()));
 }
 
-// Returns the size of the body (in bytes) of the given serialized message.
-static size_t ComputeBodySize(const std::string& msg) {
-  return msg.length() - kMessageHeaderSize;
-}
-
 class MockCastSocketDelegate : public CastSocket::Delegate {
  public:
   MOCK_METHOD2(OnError, void(const CastSocket* socket,
@@ -135,20 +129,23 @@
   static scoped_ptr<TestCastSocket> Create(
       MockCastSocketDelegate* delegate) {
     return scoped_ptr<TestCastSocket>(
-        new TestCastSocket(delegate, "cast://192.0.0.1:8009"));
+        new TestCastSocket(delegate, CreateIPEndPoint(),
+                           CHANNEL_AUTH_TYPE_SSL));
   }
 
   static scoped_ptr<TestCastSocket> CreateSecure(
       MockCastSocketDelegate* delegate) {
     return scoped_ptr<TestCastSocket>(
-        new TestCastSocket(delegate, "casts://192.0.0.1:8009"));
+        new TestCastSocket(delegate, CreateIPEndPoint(),
+                           CHANNEL_AUTH_TYPE_SSL_VERIFIED));
   }
 
   explicit TestCastSocket(MockCastSocketDelegate* delegate,
-                          const std::string& url) :
-      CastSocket("abcdefg", GURL(url), delegate,
-                 &capturing_net_log_),
-      ip_(CreateIPEndPoint()),
+                          const net::IPEndPoint& ip_endpoint,
+                          ChannelAuthType channel_auth) :
+        CastSocket("abcdefg", ip_endpoint, channel_auth, delegate,
+                   &capturing_net_log_),
+      ip_(ip_endpoint),
       connect_index_(0),
       extract_cert_result_(true),
       verify_challenge_result_(true) {
@@ -163,6 +160,11 @@
     return net::IPEndPoint(number, 8009);
   }
 
+  // Returns the size of the body (in bytes) of the given serialized message.
+  static size_t ComputeBodySize(const std::string& msg) {
+    return msg.length() - CastSocket::MessageHeader::header_size();
+  }
+
   virtual ~TestCastSocket() {
   }
 
@@ -211,8 +213,8 @@
   void AddReadResultForMessage(net::IoMode mode, const std::string& msg) {
     size_t body_size = ComputeBodySize(msg);
     const char* data = msg.c_str();
-    AddReadResult(mode, data, kMessageHeaderSize);
-    AddReadResult(mode, data + kMessageHeaderSize, body_size);
+    AddReadResult(mode, data, MessageHeader::header_size());
+    AddReadResult(mode, data + MessageHeader::header_size(), body_size);
   }
   void AddReadResultForMessage(net::IoMode mode,
                                const std::string& msg,
@@ -360,32 +362,6 @@
   std::string auth_reply_;
 };
 
-// Tests URL parsing and validation.
-TEST_F(CastSocketTest, TestCastURLs) {
-  CreateCastSocket();
-  EXPECT_TRUE(socket_->ParseChannelUrl(GURL("cast://192.0.0.1:8009")));
-  EXPECT_FALSE(socket_->auth_required());
-  EXPECT_EQ(socket_->ip_endpoint_.ToString(), "192.0.0.1:8009");
-
-  EXPECT_TRUE(socket_->ParseChannelUrl(GURL("casts://192.0.0.1:12345")));
-  EXPECT_TRUE(socket_->auth_required());
-  EXPECT_EQ(socket_->ip_endpoint_.ToString(), "192.0.0.1:12345");
-
-  EXPECT_FALSE(socket_->ParseChannelUrl(GURL("http://192.0.0.1:12345")));
-  EXPECT_FALSE(socket_->ParseChannelUrl(GURL("cast:192.0.0.1:12345")));
-  EXPECT_FALSE(socket_->ParseChannelUrl(GURL("cast:///192.0.0.1:12345")));
-  EXPECT_FALSE(socket_->ParseChannelUrl(GURL("cast://:12345")));
-  EXPECT_FALSE(socket_->ParseChannelUrl(GURL("cast://abcd:8009")));
-  EXPECT_FALSE(socket_->ParseChannelUrl(GURL("cast://192.0.0.1:abcd")));
-  EXPECT_FALSE(socket_->ParseChannelUrl(GURL("")));
-  EXPECT_FALSE(socket_->ParseChannelUrl(GURL("foo")));
-  EXPECT_FALSE(socket_->ParseChannelUrl(GURL("cast:")));
-  EXPECT_FALSE(socket_->ParseChannelUrl(GURL("cast::")));
-  EXPECT_FALSE(socket_->ParseChannelUrl(GURL("cast://192.0.0.1")));
-  EXPECT_FALSE(socket_->ParseChannelUrl(GURL("cast://:")));
-  EXPECT_FALSE(socket_->ParseChannelUrl(GURL("cast://192.0.0.1:")));
-}
-
 // Tests connecting and closing the socket.
 TEST_F(CastSocketTest, TestConnectAndClose) {
   CreateCastSocket();
@@ -790,7 +766,7 @@
   ConnectHelper();
 
   EXPECT_CALL(handler_, OnWriteComplete(net::ERR_FAILED));
-  size_t size = kMaxMessageSize + 1;
+  size_t size = CastSocket::MessageHeader::max_message_size() + 1;
   test_messages_[0].data.reset(
       new base::StringValue(std::string(size, 'a')));
   socket_->SendMessage(test_messages_[0],
@@ -986,7 +962,8 @@
 // Test read error - header parse error
 TEST_F(CastSocketTest, TestReadHeaderParseError) {
   CreateCastSocket();
-  uint32 body_size = base::HostToNet32(kMaxMessageSize + 1);
+  uint32 body_size = base::HostToNet32(
+      CastSocket::MessageHeader::max_message_size() + 1);
   // TODO(munjal): Add a method to cast_message_util.h to serialize messages
   char header[sizeof(body_size)];
   memcpy(&header, &body_size, arraysize(header));
diff --git a/chrome/browser/extensions/api/cast_streaming/performance_test.cc b/chrome/browser/extensions/api/cast_streaming/performance_test.cc
index 4c6d707..826d8d8 100644
--- a/chrome/browser/extensions/api/cast_streaming/performance_test.cc
+++ b/chrome/browser/extensions/api/cast_streaming/performance_test.cc
@@ -373,11 +373,8 @@
       command_line->AppendSwitchASCII(switches::kWindowSize, "2000,1500");
     }
 
-    if (!HasFlag(kUseGpu)) {
+    if (!HasFlag(kUseGpu))
       command_line->AppendSwitch(switches::kDisableGpu);
-    } else {
-      command_line->AppendSwitch(switches::kForceCompositingMode);
-    }
 
     if (HasFlag(kDisableVsync))
       command_line->AppendSwitch(switches::kDisableGpuVsync);
diff --git a/chrome/browser/extensions/api/cloud_print_private/cloud_print_private_apitest.cc b/chrome/browser/extensions/api/cloud_print_private/cloud_print_private_apitest.cc
index 7798bc6..42d9377 100644
--- a/chrome/browser/extensions/api/cloud_print_private/cloud_print_private_apitest.cc
+++ b/chrome/browser/extensions/api/cloud_print_private/cloud_print_private_apitest.cc
@@ -8,9 +8,9 @@
 #include "chrome/browser/extensions/extension_apitest.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/browser.h"
-#include "chrome/common/chrome_switches.h"
 #include "chrome/common/extensions/api/cloud_print_private.h"
 #include "chrome/test/base/ui_test_utils.h"
+#include "components/cloud_devices/common/cloud_devices_switches.h"
 #include "net/dns/mock_host_resolver.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -25,7 +25,8 @@
  public:
   virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
     ExtensionApiTest::SetUpCommandLine(command_line);
-    command_line->AppendSwitchASCII(switches::kCloudPrintServiceURL,
+    command_line->AppendSwitchASCII(
+        switches::kCloudPrintURL,
         "http://www.cloudprintapp.com/files/extensions/api_test/"
         "cloud_print_private");
   }
diff --git a/chrome/browser/extensions/api/cookies/cookies_api.cc b/chrome/browser/extensions/api/cookies/cookies_api.cc
index 78ff3d7..4df4ef0 100644
--- a/chrome/browser/extensions/api/cookies/cookies_api.cc
+++ b/chrome/browser/extensions/api/cookies/cookies_api.cc
@@ -25,7 +25,6 @@
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/notification_service.h"
 #include "extensions/browser/event_router.h"
-#include "extensions/browser/extension_system.h"
 #include "extensions/common/error_utils.h"
 #include "extensions/common/extension.h"
 #include "extensions/common/permissions/permissions_data.h"
@@ -134,9 +133,7 @@
                                        const std::string& event_name,
                                        scoped_ptr<base::ListValue> event_args,
                                        GURL& cookie_domain) {
-  EventRouter* router =
-      context ? extensions::ExtensionSystem::Get(context)->event_router()
-              : NULL;
+  EventRouter* router = context ? extensions::EventRouter::Get(context) : NULL;
   if (!router)
     return;
   scoped_ptr<Event> event(new Event(event_name, event_args.Pass()));
@@ -562,16 +559,15 @@
 
 CookiesAPI::CookiesAPI(content::BrowserContext* context)
     : browser_context_(context) {
-  ExtensionSystem::Get(browser_context_)->event_router()->RegisterObserver(
-      this, cookies::OnChanged::kEventName);
+  EventRouter::Get(browser_context_)
+      ->RegisterObserver(this, cookies::OnChanged::kEventName);
 }
 
 CookiesAPI::~CookiesAPI() {
 }
 
 void CookiesAPI::Shutdown() {
-  ExtensionSystem::Get(browser_context_)->event_router()->UnregisterObserver(
-      this);
+  EventRouter::Get(browser_context_)->UnregisterObserver(this);
 }
 
 static base::LazyInstance<BrowserContextKeyedAPIFactory<CookiesAPI> >
@@ -585,8 +581,7 @@
 void CookiesAPI::OnListenerAdded(
     const extensions::EventListenerInfo& details) {
   cookies_event_router_.reset(new CookiesEventRouter(browser_context_));
-  ExtensionSystem::Get(browser_context_)->event_router()->UnregisterObserver(
-      this);
+  EventRouter::Get(browser_context_)->UnregisterObserver(this);
 }
 
 }  // namespace extensions
diff --git a/chrome/browser/extensions/api/debugger/debugger_api.cc b/chrome/browser/extensions/api/debugger/debugger_api.cc
index 839f999..35c0215 100644
--- a/chrome/browser/extensions/api/debugger/debugger_api.cc
+++ b/chrome/browser/extensions/api/debugger/debugger_api.cc
@@ -24,11 +24,11 @@
 #include "chrome/browser/extensions/extension_service.h"
 #include "chrome/browser/extensions/extension_tab_util.h"
 #include "chrome/browser/infobars/confirm_infobar_delegate.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/webui/chrome_web_ui_controller_factory.h"
 #include "chrome/common/chrome_switches.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/devtools_agent_host.h"
 #include "content/public/browser/devtools_client_host.h"
 #include "content/public/browser/devtools_http_handler.h"
@@ -72,13 +72,12 @@
 class ExtensionDevToolsClientHost : public DevToolsClientHost,
                                     public content::NotificationObserver {
  public:
-  ExtensionDevToolsClientHost(
-      Profile* profile,
-      DevToolsAgentHost* agent_host,
-      const std::string& extension_id,
-      const std::string& extension_name,
-      const Debuggee& debuggee,
-      InfoBar* infobar);
+  ExtensionDevToolsClientHost(Profile* profile,
+                              DevToolsAgentHost* agent_host,
+                              const std::string& extension_id,
+                              const std::string& extension_name,
+                              const Debuggee& debuggee,
+                              infobars::InfoBar* infobar);
 
   virtual ~ExtensionDevToolsClientHost();
 
@@ -113,7 +112,7 @@
   typedef std::map<int, scoped_refptr<DebuggerSendCommandFunction> >
       PendingRequests;
   PendingRequests pending_requests_;
-  InfoBar* infobar_;
+  infobars::InfoBar* infobar_;
   OnDetach::Reason detach_reason_;
 
   DISALLOW_COPY_AND_ASSIGN(ExtensionDevToolsClientHost);
@@ -144,7 +143,8 @@
   // Creates an extension dev tools infobar and delegate and adds the infobar to
   // the InfoBarService associated with |rvh|.  Returns the infobar if it was
   // successfully added.
-  static InfoBar* Create(RenderViewHost* rvh, const std::string& client_name);
+  static infobars::InfoBar* Create(RenderViewHost* rvh,
+                                   const std::string& client_name);
 
   void set_client_host(ExtensionDevToolsClientHost* client_host) {
     client_host_ = client_host;
@@ -170,7 +170,7 @@
 };
 
 // static
-InfoBar* ExtensionDevToolsInfoBarDelegate::Create(
+infobars::InfoBar* ExtensionDevToolsInfoBarDelegate::Create(
     RenderViewHost* rvh,
     const std::string& client_name) {
   if (!rvh)
@@ -205,7 +205,8 @@
     client_host_->MarkAsDismissed();
 }
 
-InfoBarDelegate::Type ExtensionDevToolsInfoBarDelegate::GetInfoBarType() const {
+infobars::InfoBarDelegate::Type
+ExtensionDevToolsInfoBarDelegate::GetInfoBarType() const {
   return WARNING_TYPE;
 }
 
@@ -295,7 +296,7 @@
     const std::string& extension_id,
     const std::string& extension_name,
     const Debuggee& debuggee,
-    InfoBar* infobar)
+    infobars::InfoBar* infobar)
     : profile_(profile),
       agent_host_(agent_host),
       extension_id_(extension_id),
@@ -385,7 +386,7 @@
 }
 
 void ExtensionDevToolsClientHost::SendDetachedEvent() {
-  if (!extensions::ExtensionSystem::Get(profile_)->event_router())
+  if (!extensions::EventRouter::Get(profile_))
     return;
 
   scoped_ptr<base::ListValue> args(OnDetach::Create(debuggee_,
@@ -393,8 +394,8 @@
   scoped_ptr<extensions::Event> event(new extensions::Event(
       OnDetach::kEventName, args.Pass()));
   event->restrict_to_browser_context = profile_;
-  extensions::ExtensionSystem::Get(profile_)->event_router()->
-      DispatchEventToExtension(extension_id_, event.Pass());
+  extensions::EventRouter::Get(profile_)
+      ->DispatchEventToExtension(extension_id_, event.Pass());
 }
 
 void ExtensionDevToolsClientHost::Observe(
@@ -409,7 +410,8 @@
     Close();
   } else {
     DCHECK_EQ(chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED, type);
-    if (content::Details<InfoBar::RemovedDetails>(details)->first == infobar_) {
+    if (content::Details<infobars::InfoBar::RemovedDetails>(details)->first ==
+        infobar_) {
       infobar_ = NULL;
       SendDetachedEvent();
       Close();
@@ -419,7 +421,7 @@
 
 void ExtensionDevToolsClientHost::DispatchOnInspectorFrontend(
     const std::string& message) {
-  if (!extensions::ExtensionSystem::Get(profile_)->event_router())
+  if (!extensions::EventRouter::Get(profile_))
     return;
 
   scoped_ptr<base::Value> result(base::JSONReader::Read(message));
@@ -444,8 +446,8 @@
     scoped_ptr<extensions::Event> event(new extensions::Event(
         OnEvent::kEventName, args.Pass()));
     event->restrict_to_browser_context = profile_;
-    extensions::ExtensionSystem::Get(profile_)->event_router()->
-        DispatchEventToExtension(extension_id_, event.Pass());
+    extensions::EventRouter::Get(profile_)
+        ->DispatchEventToExtension(extension_id_, event.Pass());
   } else {
     DebuggerSendCommandFunction* function = pending_requests_[id].get();
     if (!function)
@@ -564,7 +566,7 @@
     return false;
   }
 
-  InfoBar* infobar = NULL;
+  infobars::InfoBar* infobar = NULL;
   if (!CommandLine::ForCurrentProcess()->
        HasSwitch(switches::kSilentDebuggerExtensionAPI)) {
     // Do not attach to the target if for any reason the infobar cannot be shown
diff --git a/chrome/browser/extensions/api/declarative/rules_registry_service.cc b/chrome/browser/extensions/api/declarative/rules_registry_service.cc
index 13bee5e..42d0ca4 100644
--- a/chrome/browser/extensions/api/declarative/rules_registry_service.cc
+++ b/chrome/browser/extensions/api/declarative/rules_registry_service.cc
@@ -52,7 +52,7 @@
                    chrome::NOTIFICATION_EXTENSION_UNINSTALLED,
                    content::Source<Profile>(profile_->GetOriginalProfile()));
     registrar_.Add(this,
-                   chrome::NOTIFICATION_EXTENSION_LOADED,
+                   chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
                    content::Source<Profile>(profile_->GetOriginalProfile()));
     registrar_.Add(
         this, content::NOTIFICATION_RENDERER_PROCESS_TERMINATED,
@@ -225,7 +225,7 @@
                              extension->id());
       break;
     }
-    case chrome::NOTIFICATION_EXTENSION_LOADED: {
+    case chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED: {
       const Extension* extension =
           content::Details<const Extension>(details).ptr();
       NotifyRegistriesHelper(&RulesRegistry::OnExtensionLoaded,
diff --git a/chrome/browser/extensions/api/developer_private/developer_private_api.cc b/chrome/browser/extensions/api/developer_private/developer_private_api.cc
index 22954c2..dec20db 100644
--- a/chrome/browser/extensions/api/developer_private/developer_private_api.cc
+++ b/chrome/browser/extensions/api/developer_private/developer_private_api.cc
@@ -173,14 +173,12 @@
 
 DeveloperPrivateEventRouter::DeveloperPrivateEventRouter(Profile* profile)
     : profile_(profile) {
-  int types[] = {
-    chrome::NOTIFICATION_EXTENSION_INSTALLED,
-    chrome::NOTIFICATION_EXTENSION_UNINSTALLED,
-    chrome::NOTIFICATION_EXTENSION_LOADED,
-    chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
-    chrome::NOTIFICATION_EXTENSION_VIEW_REGISTERED,
-    chrome::NOTIFICATION_EXTENSION_VIEW_UNREGISTERED
-  };
+  int types[] = {chrome::NOTIFICATION_EXTENSION_INSTALLED,
+                 chrome::NOTIFICATION_EXTENSION_UNINSTALLED,
+                 chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
+                 chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
+                 chrome::NOTIFICATION_EXTENSION_VIEW_REGISTERED,
+                 chrome::NOTIFICATION_EXTENSION_VIEW_UNREGISTERED};
 
   CHECK(registrar_.IsEmpty());
   for (size_t i = 0; i < arraysize(types); ++i) {
@@ -227,7 +225,7 @@
       event_data.event_type = developer::EVENT_TYPE_UNINSTALLED;
       extension = content::Details<const Extension>(details).ptr();
       break;
-    case chrome::NOTIFICATION_EXTENSION_LOADED:
+    case chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED:
       event_data.event_type = developer::EVENT_TYPE_LOADED;
       extension = content::Details<const Extension>(details).ptr();
       break;
@@ -259,7 +257,7 @@
 
   event_name = developer_private::OnItemStateChanged::kEventName;
   scoped_ptr<Event> event(new Event(event_name, args.Pass()));
-  ExtensionSystem::Get(profile)->event_router()->BroadcastEvent(event.Pass());
+  EventRouter::Get(profile)->BroadcastEvent(event.Pass());
 }
 
 void DeveloperPrivateEventRouter::OnErrorAdded(const ExtensionError* error) {
@@ -276,9 +274,8 @@
   scoped_ptr<base::ListValue> args(new base::ListValue);
   args->Append(event_data.ToValue().release());
 
-  ExtensionSystem::Get(profile_)->event_router()->BroadcastEvent(
-      scoped_ptr<Event>(new Event(
-          developer_private::OnItemStateChanged::kEventName, args.Pass())));
+  EventRouter::Get(profile_)->BroadcastEvent(scoped_ptr<Event>(new Event(
+      developer_private::OnItemStateChanged::kEventName, args.Pass())));
 }
 
 void DeveloperPrivateAPI::SetLastUnpackedDirectory(const base::FilePath& path) {
@@ -286,7 +283,7 @@
 }
 
 void DeveloperPrivateAPI::RegisterNotifications() {
-  ExtensionSystem::Get(profile_)->event_router()->RegisterObserver(
+  EventRouter::Get(profile_)->RegisterObserver(
       this, developer_private::OnItemStateChanged::kEventName);
 }
 
@@ -306,8 +303,8 @@
 
 void DeveloperPrivateAPI::OnListenerRemoved(
     const EventListenerInfo& details) {
-  if (!ExtensionSystem::Get(profile_)->event_router()->HasEventListener(
-           developer_private::OnItemStateChanged::kEventName)) {
+  if (!EventRouter::Get(profile_)->HasEventListener(
+          developer_private::OnItemStateChanged::kEventName)) {
     developer_private_event_router_.reset(NULL);
   } else {
     developer_private_event_router_->RemoveExtensionId(details.extension_id);
@@ -389,6 +386,9 @@
               info->runtime_errors.push_back(make_linked_ptr(value.release()));
               break;
             }
+            case ExtensionError::NUM_ERROR_TYPES:
+              NOTREACHED();
+              break;
           }
         }
       }
diff --git a/chrome/browser/extensions/api/dial/dial_api.cc b/chrome/browser/extensions/api/dial/dial_api.cc
index 36f9805..f9a9539 100644
--- a/chrome/browser/extensions/api/dial/dial_api.cc
+++ b/chrome/browser/extensions/api/dial/dial_api.cc
@@ -39,8 +39,8 @@
 DialAPI::DialAPI(Profile* profile)
     : RefcountedBrowserContextKeyedService(BrowserThread::IO),
       profile_(profile) {
-  ExtensionSystem::Get(profile)->event_router()->RegisterObserver(
-      this, dial::OnDeviceList::kEventName);
+  EventRouter::Get(profile)
+      ->RegisterObserver(this, dial::OnDeviceList::kEventName);
 }
 
 DialAPI::~DialAPI() {}
@@ -108,8 +108,7 @@
   scoped_ptr<base::ListValue> results = api::dial::OnDeviceList::Create(args);
   scoped_ptr<Event> event(
       new Event(dial::OnDeviceList::kEventName, results.Pass()));
-  extensions::ExtensionSystem::Get(profile_)->event_router()->
-      BroadcastEvent(event.Pass());
+  EventRouter::Get(profile_)->BroadcastEvent(event.Pass());
 }
 
 void DialAPI::SendErrorOnUIThread(const DialRegistry::DialErrorCode code) {
@@ -139,8 +138,7 @@
 
   scoped_ptr<base::ListValue> results = api::dial::OnError::Create(dial_error);
   scoped_ptr<Event> event(new Event(dial::OnError::kEventName, results.Pass()));
-  extensions::ExtensionSystem::Get(profile_)->event_router()->
-      BroadcastEvent(event.Pass());
+  EventRouter::Get(profile_)->BroadcastEvent(event.Pass());
 }
 
 void DialAPI::ShutdownOnUIThread() {}
diff --git a/chrome/browser/extensions/api/downloads/downloads_api.cc b/chrome/browser/extensions/api/downloads/downloads_api.cc
index 7342c69..91c66b3 100644
--- a/chrome/browser/extensions/api/downloads/downloads_api.cc
+++ b/chrome/browser/extensions/api/downloads/downloads_api.cc
@@ -439,6 +439,7 @@
   DOWNLOADS_FUNCTION_REMOVE_FILE = 12,
   DOWNLOADS_FUNCTION_SHOW_DEFAULT_FOLDER = 13,
   DOWNLOADS_FUNCTION_SET_SHELF_ENABLED = 14,
+  DOWNLOADS_FUNCTION_DETERMINE_FILENAME = 15,
   // Insert new values here, not at the beginning.
   DOWNLOADS_FUNCTION_LAST
 };
@@ -723,7 +724,8 @@
         // Do not use filename if another determiner has already overridden the
         // filename and they take precedence. Extensions that were installed
         // later take precedence over previous extensions.
-        if (!filename.empty()) {
+        if (!filename.empty() ||
+            (conflict_action != downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY)) {
           extensions::ExtensionWarningSet warnings;
           std::string winner_extension_id;
           ExtensionDownloadsEventRouter::DetermineFilenameInternal(
@@ -775,7 +777,9 @@
       if (!iter->reported)
         return;
     }
-    if (determined_filename_.empty()) {
+    if (determined_filename_.empty() &&
+        (determined_conflict_action_ ==
+         downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY)) {
       if (!filename_no_change_.is_null())
         filename_no_change_.Run();
     } else {
@@ -1048,7 +1052,9 @@
   if (item) {
     DCHECK_EQ(content::DOWNLOAD_INTERRUPT_REASON_NONE, interrupt_reason);
     SetResult(new base::FundamentalValue(static_cast<int>(item->GetId())));
-    if (!creator_suggested_filename.empty()) {
+    if (!creator_suggested_filename.empty() ||
+        (creator_conflict_action !=
+         downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY)) {
       ExtensionDownloadsEventRouterData* data =
           ExtensionDownloadsEventRouterData::Get(item);
       if (!data) {
@@ -1521,8 +1527,7 @@
   DCHECK(profile_);
   registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
                  content::Source<Profile>(profile_));
-  extensions::EventRouter* router = extensions::ExtensionSystem::Get(profile_)->
-      event_router();
+  extensions::EventRouter* router = extensions::EventRouter::Get(profile_);
   if (router)
     router->RegisterObserver(this,
                              downloads::OnDeterminingFilename::kEventName);
@@ -1530,8 +1535,7 @@
 
 ExtensionDownloadsEventRouter::~ExtensionDownloadsEventRouter() {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
-  extensions::EventRouter* router = extensions::ExtensionSystem::Get(profile_)->
-      event_router();
+  extensions::EventRouter* router = extensions::EventRouter::Get(profile_);
   if (router)
     router->UnregisterObserver(this);
 }
@@ -1603,7 +1607,9 @@
                 json);
   if (!any_determiners) {
     data->ClearPendingDeterminers();
-    if (!data->creator_suggested_filename().empty()) {
+    if (!data->creator_suggested_filename().empty() ||
+        (data->creator_conflict_action() !=
+         downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY)) {
       change.Run(data->creator_suggested_filename(),
                  ConvertConflictAction(data->creator_conflict_action()));
       // If all listeners are removed, don't keep |data| around.
@@ -1626,7 +1632,8 @@
     downloads::FilenameConflictAction*
       determined_conflict_action,
     extensions::ExtensionWarningSet* warnings) {
-  DCHECK(!filename.empty());
+  DCHECK(!filename.empty() ||
+         (conflict_action != downloads::FILENAME_CONFLICT_ACTION_UNIQUIFY));
   DCHECK(!suggesting_extension_id.empty());
 
   if (incumbent_extension_id.empty()) {
@@ -1667,6 +1674,7 @@
     downloads::FilenameConflictAction conflict_action,
     std::string* error) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
+  RecordApiFunctions(DOWNLOADS_FUNCTION_DETERMINE_FILENAME);
   DownloadItem* item = GetDownload(profile, include_incognito, download_id);
   ExtensionDownloadsEventRouterData* data =
       item ? ExtensionDownloadsEventRouterData::Get(item) : NULL;
@@ -1861,7 +1869,7 @@
     const extensions::Event::WillDispatchCallback& will_dispatch_callback,
     base::Value* arg) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
-  if (!extensions::ExtensionSystem::Get(profile_)->event_router())
+  if (!extensions::EventRouter::Get(profile_))
     return;
   scoped_ptr<base::ListValue> args(new base::ListValue());
   args->Append(arg);
@@ -1877,8 +1885,7 @@
   event->restrict_to_browser_context =
       (include_incognito && !profile_->IsOffTheRecord()) ? NULL : profile_;
   event->will_dispatch_callback = will_dispatch_callback;
-  extensions::ExtensionSystem::Get(profile_)->event_router()->
-      BroadcastEvent(event.Pass());
+  extensions::EventRouter::Get(profile_)->BroadcastEvent(event.Pass());
   DownloadsNotificationSource notification_source;
   notification_source.event_name = event_name;
   notification_source.profile = profile_;
diff --git a/chrome/browser/extensions/api/downloads/downloads_api_browsertest.cc b/chrome/browser/extensions/api/downloads/downloads_api_browsertest.cc
index 165289b..048d9b6 100644
--- a/chrome/browser/extensions/api/downloads/downloads_api_browsertest.cc
+++ b/chrome/browser/extensions/api/downloads/downloads_api_browsertest.cc
@@ -276,21 +276,18 @@
         current_browser(),
         extension_->GetResourceURL("empty.html"),
         content::PAGE_TRANSITION_LINK);
-    extensions::ExtensionSystem::Get(current_browser()->profile())->
-      event_router()->AddEventListener(
-          api::OnCreated::kEventName,
-          tab->GetRenderProcessHost(),
-          GetExtensionId());
-    extensions::ExtensionSystem::Get(current_browser()->profile())->
-      event_router()->AddEventListener(
-          api::OnChanged::kEventName,
-          tab->GetRenderProcessHost(),
-          GetExtensionId());
-    extensions::ExtensionSystem::Get(current_browser()->profile())->
-      event_router()->AddEventListener(
-          api::OnErased::kEventName,
-          tab->GetRenderProcessHost(),
-          GetExtensionId());
+    extensions::EventRouter::Get(current_browser()->profile())
+        ->AddEventListener(api::OnCreated::kEventName,
+                           tab->GetRenderProcessHost(),
+                           GetExtensionId());
+    extensions::EventRouter::Get(current_browser()->profile())
+        ->AddEventListener(api::OnChanged::kEventName,
+                           tab->GetRenderProcessHost(),
+                           GetExtensionId());
+    extensions::EventRouter::Get(current_browser()->profile())
+        ->AddEventListener(api::OnErased::kEventName,
+                           tab->GetRenderProcessHost(),
+                           GetExtensionId());
   }
 
   content::RenderProcessHost* AddFilenameDeterminer() {
@@ -1212,7 +1209,11 @@
   ASSERT_TRUE(item1_value->GetString("filename", &item1_name));
   ASSERT_GT(items[0]->GetTargetFilePath().value(),
             items[1]->GetTargetFilePath().value());
-  ASSERT_GT(item0_name, item1_name);
+  // The order of results when orderBy is empty is unspecified. When there are
+  // no sorters, DownloadQuery does not call sort(), so the order of the results
+  // depends on the order of the items in base::hash_map<uint32,...>
+  // DownloadManagerImpl::downloads_, which is unspecified and differs between
+  // libc++ and libstdc++. http://crbug.com/365334
 }
 
 // Test the |danger| option for search().
@@ -1750,6 +1751,80 @@
                          result_id)));
 }
 
+// conflictAction may be specified without filename.
+IN_PROC_BROWSER_TEST_F(DownloadExtensionTest,
+                       DownloadExtensionTest_Download_ConflictAction) {
+  static char kFilename[] = "download.txt";
+  LoadExtension("downloads_split");
+  std::string download_url = "data:text/plain,hello";
+  GoOnTheRecord();
+
+  scoped_ptr<base::Value> result(RunFunctionAndReturnResult(
+      new DownloadsDownloadFunction(), base::StringPrintf(
+      "[{\"url\": \"%s\"}]", download_url.c_str())));
+  ASSERT_TRUE(result.get());
+  int result_id = -1;
+  ASSERT_TRUE(result->GetAsInteger(&result_id));
+  DownloadItem* item = GetCurrentManager()->GetDownload(result_id);
+  ASSERT_TRUE(item);
+  ScopedCancellingItem canceller(item);
+  ASSERT_EQ(download_url, item->GetOriginalUrl().spec());
+
+  ASSERT_TRUE(WaitFor(api::OnCreated::kEventName,
+      base::StringPrintf("[{\"danger\": \"safe\","
+                         "  \"incognito\": false,"
+                         "  \"mime\": \"text/plain\","
+                         "  \"paused\": false,"
+                         "  \"url\": \"%s\"}]",
+                         download_url.c_str())));
+  ASSERT_TRUE(WaitFor(api::OnChanged::kEventName,
+      base::StringPrintf("[{\"id\": %d,"
+                         "  \"filename\": {"
+                         "    \"previous\": \"\","
+                         "    \"current\": \"%s\"}}]",
+                         result_id,
+                         GetFilename(kFilename).c_str())));
+  ASSERT_TRUE(WaitFor(api::OnChanged::kEventName,
+      base::StringPrintf("[{\"id\": %d,"
+                         "  \"state\": {"
+                         "    \"previous\": \"in_progress\","
+                         "    \"current\": \"complete\"}}]",
+                         result_id)));
+
+  result.reset(RunFunctionAndReturnResult(
+      new DownloadsDownloadFunction(), base::StringPrintf(
+          "[{\"url\": \"%s\",  \"conflictAction\": \"overwrite\"}]",
+          download_url.c_str())));
+  ASSERT_TRUE(result.get());
+  result_id = -1;
+  ASSERT_TRUE(result->GetAsInteger(&result_id));
+  item = GetCurrentManager()->GetDownload(result_id);
+  ASSERT_TRUE(item);
+  ScopedCancellingItem canceller2(item);
+  ASSERT_EQ(download_url, item->GetOriginalUrl().spec());
+
+  ASSERT_TRUE(WaitFor(api::OnCreated::kEventName,
+      base::StringPrintf("[{\"danger\": \"safe\","
+                         "  \"incognito\": false,"
+                         "  \"mime\": \"text/plain\","
+                         "  \"paused\": false,"
+                         "  \"url\": \"%s\"}]",
+                         download_url.c_str())));
+  ASSERT_TRUE(WaitFor(api::OnChanged::kEventName,
+      base::StringPrintf("[{\"id\": %d,"
+                         "  \"filename\": {"
+                         "    \"previous\": \"\","
+                         "    \"current\": \"%s\"}}]",
+                         result_id,
+                         GetFilename(kFilename).c_str())));
+  ASSERT_TRUE(WaitFor(api::OnChanged::kEventName,
+      base::StringPrintf("[{\"id\": %d,"
+                         "  \"state\": {"
+                         "    \"previous\": \"in_progress\","
+                         "    \"current\": \"complete\"}}]",
+                         result_id)));
+}
+
 // Valid data URLs are valid URLs.
 IN_PROC_BROWSER_TEST_F(DownloadExtensionTest,
                        DownloadExtensionTest_Download_DataURL) {
@@ -2909,6 +2984,130 @@
                          result_id)));
 }
 
+// conflictAction may be specified without filename.
+IN_PROC_BROWSER_TEST_F(
+    DownloadExtensionTest,
+    DownloadExtensionTest_OnDeterminingFilename_Overwrite) {
+  GoOnTheRecord();
+  LoadExtension("downloads_split");
+  AddFilenameDeterminer();
+  ASSERT_TRUE(StartEmbeddedTestServer());
+  ASSERT_TRUE(test_server()->Start());
+  std::string download_url = test_server()->GetURL("slow?0").spec();
+
+  // Start downloading a file.
+  scoped_ptr<base::Value> result(RunFunctionAndReturnResult(
+      new DownloadsDownloadFunction(), base::StringPrintf(
+          "[{\"url\": \"%s\"}]", download_url.c_str())));
+  ASSERT_TRUE(result.get());
+  int result_id = -1;
+  ASSERT_TRUE(result->GetAsInteger(&result_id));
+  DownloadItem* item = GetCurrentManager()->GetDownload(result_id);
+  ASSERT_TRUE(item);
+  ScopedCancellingItem canceller(item);
+  ASSERT_EQ(download_url, item->GetOriginalUrl().spec());
+  ASSERT_TRUE(WaitFor(api::OnCreated::kEventName,
+      base::StringPrintf("[{\"danger\": \"safe\","
+                         "  \"incognito\": false,"
+                         "  \"id\": %d,"
+                         "  \"mime\": \"text/plain\","
+                         "  \"paused\": false,"
+                         "  \"url\": \"%s\"}]",
+                         result_id,
+                         download_url.c_str())));
+  ASSERT_TRUE(WaitFor(
+      api::OnDeterminingFilename::kEventName,
+      base::StringPrintf("[{\"id\": %d,"
+                         "  \"filename\":\"slow.txt\"}]",
+                         result_id)));
+  ASSERT_TRUE(item->GetTargetFilePath().empty());
+  ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState());
+
+  // Respond to the onDeterminingFilename.
+  std::string error;
+  ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename(
+      browser()->profile(),
+      false,
+      GetExtensionId(),
+      result_id,
+      base::FilePath(),
+      api::FILENAME_CONFLICT_ACTION_UNIQUIFY,
+      &error));
+  EXPECT_EQ("", error);
+
+  ASSERT_TRUE(WaitFor(api::OnChanged::kEventName,
+      base::StringPrintf("[{\"id\": %d,"
+                         "  \"filename\": {"
+                         "    \"previous\": \"\","
+                         "    \"current\": \"%s\"}}]",
+                         result_id,
+                         GetFilename("slow.txt").c_str())));
+  ASSERT_TRUE(WaitFor(api::OnChanged::kEventName,
+      base::StringPrintf("[{\"id\": %d,"
+                         "  \"state\": {"
+                         "    \"previous\": \"in_progress\","
+                         "    \"current\": \"complete\"}}]",
+                         result_id)));
+
+  // Start downloading a file.
+  result.reset(RunFunctionAndReturnResult(
+      new DownloadsDownloadFunction(), base::StringPrintf(
+          "[{\"url\": \"%s\"}]", download_url.c_str())));
+  ASSERT_TRUE(result.get());
+  result_id = -1;
+  ASSERT_TRUE(result->GetAsInteger(&result_id));
+  item = GetCurrentManager()->GetDownload(result_id);
+  ASSERT_TRUE(item);
+  ScopedCancellingItem canceller2(item);
+  ASSERT_EQ(download_url, item->GetOriginalUrl().spec());
+
+  ASSERT_TRUE(WaitFor(api::OnCreated::kEventName,
+      base::StringPrintf("[{\"danger\": \"safe\","
+                         "  \"incognito\": false,"
+                         "  \"id\": %d,"
+                         "  \"mime\": \"text/plain\","
+                         "  \"paused\": false,"
+                         "  \"url\": \"%s\"}]",
+                         result_id,
+                         download_url.c_str())));
+  ASSERT_TRUE(WaitFor(
+      api::OnDeterminingFilename::kEventName,
+      base::StringPrintf("[{\"id\": %d,"
+                         "  \"filename\":\"slow.txt\"}]",
+                         result_id)));
+  ASSERT_TRUE(item->GetTargetFilePath().empty());
+  ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState());
+
+  // Respond to the onDeterminingFilename.
+  // Also test that DetermineFilename allows (chrome) extensions to set
+  // filenames without (filename) extensions. (Don't ask about v8 extensions or
+  // python extensions or kernel extensions or firefox extensions...)
+  error = "";
+  ASSERT_TRUE(ExtensionDownloadsEventRouter::DetermineFilename(
+      browser()->profile(),
+      false,
+      GetExtensionId(),
+      result_id,
+      base::FilePath(),
+      api::FILENAME_CONFLICT_ACTION_OVERWRITE,
+      &error));
+  EXPECT_EQ("", error);
+
+  ASSERT_TRUE(WaitFor(api::OnChanged::kEventName,
+      base::StringPrintf("[{\"id\": %d,"
+                         "  \"filename\": {"
+                         "    \"previous\": \"\","
+                         "    \"current\": \"%s\"}}]",
+                         result_id,
+                         GetFilename("slow.txt").c_str())));
+  ASSERT_TRUE(WaitFor(api::OnChanged::kEventName,
+      base::StringPrintf("[{\"id\": %d,"
+                         "  \"state\": {"
+                         "    \"previous\": \"in_progress\","
+                         "    \"current\": \"complete\"}}]",
+                         result_id)));
+}
+
 IN_PROC_BROWSER_TEST_F(
     DownloadExtensionTest,
     DownloadExtensionTest_OnDeterminingFilename_Override) {
diff --git a/chrome/browser/extensions/api/extension_action/extension_action_api.cc b/chrome/browser/extensions/api/extension_action/extension_action_api.cc
index d3f003e..02ef495 100644
--- a/chrome/browser/extensions/api/extension_action/extension_action_api.cc
+++ b/chrome/browser/extensions/api/extension_action/extension_action_api.cc
@@ -350,14 +350,14 @@
     const std::string& extension_id,
     const std::string& event_name,
     scoped_ptr<base::ListValue> event_args) {
-  if (!extensions::ExtensionSystem::Get(context)->event_router())
+  if (!extensions::EventRouter::Get(context))
     return;
 
   scoped_ptr<Event> event(new Event(event_name, event_args.Pass()));
   event->restrict_to_browser_context = context;
   event->user_gesture = EventRouter::USER_GESTURE_ENABLED;
-  ExtensionSystem::Get(context)->event_router()->DispatchEventToExtension(
-      extension_id, event.Pass());
+  EventRouter::Get(context)
+      ->DispatchEventToExtension(extension_id, event.Pass());
 }
 
 // static
@@ -416,7 +416,8 @@
 
 ExtensionActionStorageManager::ExtensionActionStorageManager(Profile* profile)
     : profile_(profile) {
-  registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
+  registrar_.Add(this,
+                 chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
                  content::Source<Profile>(profile_));
   registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_BROWSER_ACTION_UPDATED,
                  content::NotificationService::AllBrowserContextsAndSources());
@@ -434,7 +435,7 @@
     const content::NotificationSource& source,
     const content::NotificationDetails& details) {
   switch (type) {
-    case chrome::NOTIFICATION_EXTENSION_LOADED: {
+    case chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED: {
       const Extension* extension =
           content::Details<const Extension>(details).ptr();
       if (!ExtensionActionManager::Get(profile_)->
diff --git a/chrome/browser/extensions/api/feedback_private/feedback_browsertest.cc b/chrome/browser/extensions/api/feedback_private/feedback_browsertest.cc
index 99bde53..c6d2874 100644
--- a/chrome/browser/extensions/api/feedback_private/feedback_browsertest.cc
+++ b/chrome/browser/extensions/api/feedback_private/feedback_browsertest.cc
@@ -47,8 +47,8 @@
 
  protected:
   bool IsFeedbackAppAvailable() {
-    return extensions::ExtensionSystem::Get(
-        browser()->profile())->event_router()->ExtensionHasEventListener(
+    return extensions::EventRouter::Get(browser()->profile())
+        ->ExtensionHasEventListener(
             kFeedbackExtensionId,
             extensions::api::feedback_private::OnFeedbackRequested::kEventName);
   }
diff --git a/chrome/browser/extensions/api/feedback_private/feedback_private_api.cc b/chrome/browser/extensions/api/feedback_private/feedback_private_api.cc
index bbbb789..5cbc565 100644
--- a/chrome/browser/extensions/api/feedback_private/feedback_private_api.cc
+++ b/chrome/browser/extensions/api/feedback_private/feedback_private_api.cc
@@ -14,7 +14,6 @@
 #include "chrome/browser/feedback/tracing_manager.h"
 #include "chrome/browser/profiles/profile.h"
 #include "extensions/browser/event_router.h"
-#include "extensions/browser/extension_system.h"
 #include "grit/generated_resources.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/webui/web_ui_util.h"
@@ -69,8 +68,7 @@
     const GURL& page_url) {
   // TODO(rkc): Remove logging once crbug.com/284662 is closed.
   LOG(WARNING) << "FEEDBACK_DEBUG: Feedback requested.";
-  if (browser_context_ &&
-      ExtensionSystem::Get(browser_context_)->event_router()) {
+  if (browser_context_ && EventRouter::Get(browser_context_)) {
     FeedbackInfo info;
     info.description = description_template;
     info.category_tag = make_scoped_ptr(new std::string(category_tag));
@@ -90,8 +88,7 @@
 
     // TODO(rkc): Remove logging once crbug.com/284662 is closed.
     LOG(WARNING) << "FEEDBACK_DEBUG: Dispatching onFeedbackRequested event.";
-    ExtensionSystem::Get(browser_context_)
-        ->event_router()
+    EventRouter::Get(browser_context_)
         ->DispatchEventToExtension(kFeedbackExtensionId, event.Pass());
   }
 }
diff --git a/chrome/browser/extensions/api/file_system/file_system_apitest.cc b/chrome/browser/extensions/api/file_system/file_system_apitest.cc
index e8e1d71..fee48ef 100644
--- a/chrome/browser/extensions/api/file_system/file_system_apitest.cc
+++ b/chrome/browser/extensions/api/file_system/file_system_apitest.cc
@@ -25,14 +25,14 @@
       base::Callback<void(const Extension*)> callback)
       : callback_(callback) {
     registrar_.Add(this,
-                   chrome::NOTIFICATION_EXTENSION_LOADED,
+                   chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
                    content::NotificationService::AllSources());
   }
 
   virtual void Observe(int type,
                        const content::NotificationSource& source,
                        const content::NotificationDetails& details) OVERRIDE {
-    EXPECT_EQ(chrome::NOTIFICATION_EXTENSION_LOADED, type);
+    EXPECT_EQ(chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED, type);
     callback_.Run(content::Details<const Extension>(details).ptr());
   }
 
diff --git a/chrome/browser/extensions/api/gcm/gcm_api.cc b/chrome/browser/extensions/api/gcm/gcm_api.cc
index 65b1d49..7fe632a 100644
--- a/chrome/browser/extensions/api/gcm/gcm_api.cc
+++ b/chrome/browser/extensions/api/gcm/gcm_api.cc
@@ -15,7 +15,6 @@
 #include "chrome/browser/services/gcm/gcm_profile_service.h"
 #include "chrome/browser/services/gcm/gcm_profile_service_factory.h"
 #include "chrome/common/extensions/api/gcm.h"
-#include "extensions/browser/extension_system.h"
 #include "extensions/common/extension.h"
 
 namespace {
@@ -197,19 +196,19 @@
 }
 
 GcmJsEventRouter::GcmJsEventRouter(Profile* profile) : profile_(profile) {
-  if (ExtensionSystem::Get(profile_)->event_router()) {
-    ExtensionSystem::Get(profile_)->event_router()->RegisterObserver(
-        this, api::gcm::OnMessage::kEventName);
-    ExtensionSystem::Get(profile_)->event_router()->RegisterObserver(
-        this, api::gcm::OnMessagesDeleted::kEventName);
-    ExtensionSystem::Get(profile_)->event_router()->RegisterObserver(
-        this, api::gcm::OnSendError::kEventName);
-  }
+  EventRouter* event_router = EventRouter::Get(profile_);
+  if (!event_router)
+    return;
+
+  event_router->RegisterObserver(this, api::gcm::OnMessage::kEventName);
+  event_router->RegisterObserver(this, api::gcm::OnMessagesDeleted::kEventName);
+  event_router->RegisterObserver(this, api::gcm::OnSendError::kEventName);
 }
 
 GcmJsEventRouter::~GcmJsEventRouter() {
-  if (ExtensionSystem::Get(profile_)->event_router())
-    ExtensionSystem::Get(profile_)->event_router()->UnregisterObserver(this);
+  EventRouter* event_router = EventRouter::Get(profile_);
+  if (event_router)
+    event_router->UnregisterObserver(this);
 }
 
 void GcmJsEventRouter::OnMessage(
@@ -224,8 +223,7 @@
       api::gcm::OnMessage::kEventName,
       api::gcm::OnMessage::Create(message_arg).Pass(),
       profile_));
-  ExtensionSystem::Get(profile_)->event_router()->DispatchEventToExtension(
-      app_id, event.Pass());
+  EventRouter::Get(profile_)->DispatchEventToExtension(app_id, event.Pass());
 }
 
 void GcmJsEventRouter::OnMessagesDeleted(const std::string& app_id) {
@@ -233,8 +231,7 @@
       api::gcm::OnMessagesDeleted::kEventName,
       api::gcm::OnMessagesDeleted::Create().Pass(),
       profile_));
-  ExtensionSystem::Get(profile_)->event_router()->DispatchEventToExtension(
-      app_id, event.Pass());
+  EventRouter::Get(profile_)->DispatchEventToExtension(app_id, event.Pass());
 }
 
 void GcmJsEventRouter::OnSendError(
@@ -249,8 +246,7 @@
       api::gcm::OnSendError::kEventName,
       api::gcm::OnSendError::Create(error).Pass(),
       profile_));
-  ExtensionSystem::Get(profile_)->event_router()->DispatchEventToExtension(
-      app_id, event.Pass());
+  EventRouter::Get(profile_)->DispatchEventToExtension(app_id, event.Pass());
 }
 
 void GcmJsEventRouter::OnListenerAdded(const EventListenerInfo& details) {
diff --git a/chrome/browser/extensions/api/history/history_api.cc b/chrome/browser/extensions/api/history/history_api.cc
index 654e1d3..cd216a1 100644
--- a/chrome/browser/extensions/api/history/history_api.cc
+++ b/chrome/browser/extensions/api/history/history_api.cc
@@ -30,7 +30,6 @@
 #include "content/public/browser/notification_details.h"
 #include "content/public/browser/notification_source.h"
 #include "extensions/browser/event_router.h"
-#include "extensions/browser/extension_system.h"
 #include "extensions/browser/extension_system_provider.h"
 #include "extensions/browser/extensions_browser_client.h"
 
@@ -193,29 +192,27 @@
     Profile* profile,
     const std::string& event_name,
     scoped_ptr<base::ListValue> event_args) {
-  if (profile && extensions::ExtensionSystem::Get(profile)->event_router()) {
+  if (profile && extensions::EventRouter::Get(profile)) {
     scoped_ptr<extensions::Event> event(new extensions::Event(
         event_name, event_args.Pass()));
     event->restrict_to_browser_context = profile;
-    extensions::ExtensionSystem::Get(profile)->event_router()->
-        BroadcastEvent(event.Pass());
+    extensions::EventRouter::Get(profile)->BroadcastEvent(event.Pass());
   }
 }
 
 HistoryAPI::HistoryAPI(content::BrowserContext* context)
     : browser_context_(context) {
-  ExtensionSystem::Get(browser_context_)->event_router()->RegisterObserver(
-      this, api::history::OnVisited::kEventName);
-  ExtensionSystem::Get(browser_context_)->event_router()->RegisterObserver(
-      this, api::history::OnVisitRemoved::kEventName);
+  EventRouter* event_router = EventRouter::Get(browser_context_);
+  event_router->RegisterObserver(this, api::history::OnVisited::kEventName);
+  event_router->RegisterObserver(this,
+                                 api::history::OnVisitRemoved::kEventName);
 }
 
 HistoryAPI::~HistoryAPI() {
 }
 
 void HistoryAPI::Shutdown() {
-  ExtensionSystem::Get(browser_context_)->event_router()->UnregisterObserver(
-      this);
+  EventRouter::Get(browser_context_)->UnregisterObserver(this);
 }
 
 static base::LazyInstance<BrowserContextKeyedAPIFactory<HistoryAPI> >
@@ -235,8 +232,7 @@
 void HistoryAPI::OnListenerAdded(const EventListenerInfo& details) {
   history_event_router_.reset(
       new HistoryEventRouter(Profile::FromBrowserContext(browser_context_)));
-  ExtensionSystem::Get(browser_context_)->event_router()->UnregisterObserver(
-      this);
+  EventRouter::Get(browser_context_)->UnregisterObserver(this);
 }
 
 void HistoryFunction::Run() {
diff --git a/chrome/browser/extensions/api/hotword_private/hotword_private_api.cc b/chrome/browser/extensions/api/hotword_private/hotword_private_api.cc
index 1e1c7ef..dc86119 100644
--- a/chrome/browser/extensions/api/hotword_private/hotword_private_api.cc
+++ b/chrome/browser/extensions/api/hotword_private/hotword_private_api.cc
@@ -11,7 +11,6 @@
 #include "chrome/browser/search/hotword_service_factory.h"
 #include "chrome/common/pref_names.h"
 #include "extensions/browser/event_router.h"
-#include "extensions/browser/extension_system.h"
 
 namespace extensions {
 
@@ -58,7 +57,7 @@
 void HotwordPrivateEventService::SignalEvent() {
   using OnEnabledChanged::kEventName;
 
-  EventRouter* router = ExtensionSystem::Get(profile_)->event_router();
+  EventRouter* router = EventRouter::Get(profile_);
   if (!router || !router->HasEventListener(kEventName))
     return;
   scoped_ptr<base::ListValue> args(new base::ListValue());
diff --git a/chrome/browser/extensions/api/identity/identity_api.cc b/chrome/browser/extensions/api/identity/identity_api.cc
index 3b580e3..3a096e9 100644
--- a/chrome/browser/extensions/api/identity/identity_api.cc
+++ b/chrome/browser/extensions/api/identity/identity_api.cc
@@ -30,7 +30,6 @@
 #include "components/signin/core/browser/signin_manager.h"
 #include "extensions/browser/event_router.h"
 #include "extensions/browser/extension_function_dispatcher.h"
-#include "extensions/browser/extension_system.h"
 #include "extensions/common/extension.h"
 #include "google_apis/gaia/gaia_urls.h"
 #include "url/gurl.h"
@@ -207,8 +206,7 @@
                                     args.Pass(),
                                     browser_context_));
 
-  ExtensionSystem::Get(browser_context_)->event_router()->BroadcastEvent(
-      event.Pass());
+  EventRouter::Get(browser_context_)->BroadcastEvent(event.Pass());
 }
 
 void IdentityAPI::AddShutdownObserver(ShutdownObserver* observer) {
diff --git a/chrome/browser/extensions/api/idle/idle_manager.cc b/chrome/browser/extensions/api/idle/idle_manager.cc
index 450270d..e9fa969 100644
--- a/chrome/browser/extensions/api/idle/idle_manager.cc
+++ b/chrome/browser/extensions/api/idle/idle_manager.cc
@@ -15,7 +15,6 @@
 #include "content/public/browser/notification_details.h"
 #include "content/public/browser/notification_source.h"
 #include "extensions/browser/event_router.h"
-#include "extensions/browser/extension_system.h"
 #include "extensions/common/extension.h"
 
 namespace keys = extensions::idle_api_constants;
@@ -56,21 +55,20 @@
   scoped_ptr<Event> event(new Event(idle::OnStateChanged::kEventName,
                                     args.Pass()));
   event->restrict_to_browser_context = profile_;
-  ExtensionSystem::Get(profile_)->event_router()->DispatchEventToExtension(
-      extension_id, event.Pass());
+  EventRouter::Get(profile_)
+      ->DispatchEventToExtension(extension_id, event.Pass());
 }
 
 void DefaultEventDelegate::RegisterObserver(
     EventRouter::Observer* observer) {
-  ExtensionSystem::Get(profile_)->event_router()->RegisterObserver(
-      observer, idle::OnStateChanged::kEventName);
+  EventRouter::Get(profile_)
+      ->RegisterObserver(observer, idle::OnStateChanged::kEventName);
 }
 
 void DefaultEventDelegate::UnregisterObserver(EventRouter::Observer* observer) {
-  ExtensionSystem::Get(profile_)->event_router()->UnregisterObserver(observer);
+  EventRouter::Get(profile_)->UnregisterObserver(observer);
 }
 
-
 class DefaultIdleProvider : public IdleManager::IdleTimeProvider {
  public:
   DefaultIdleProvider();
diff --git a/chrome/browser/extensions/api/image_writer_private/operation_manager.cc b/chrome/browser/extensions/api/image_writer_private/operation_manager.cc
index 794858b..fa99aff 100644
--- a/chrome/browser/extensions/api/image_writer_private/operation_manager.cc
+++ b/chrome/browser/extensions/api/image_writer_private/operation_manager.cc
@@ -18,7 +18,6 @@
 #include "content/public/browser/notification_service.h"
 #include "extensions/browser/event_router.h"
 #include "extensions/browser/extension_host.h"
-#include "extensions/browser/extension_system.h"
 
 namespace image_writer_api = extensions::api::image_writer_private;
 
@@ -150,8 +149,8 @@
   scoped_ptr<Event> event(new Event(
       image_writer_api::OnWriteProgress::kEventName, args.Pass()));
 
-  ExtensionSystem::Get(profile_)->event_router()->
-      DispatchEventToExtension(extension_id, event.Pass());
+  EventRouter::Get(profile_)
+      ->DispatchEventToExtension(extension_id, event.Pass());
 }
 
 void OperationManager::OnComplete(const ExtensionId& extension_id) {
@@ -161,8 +160,8 @@
   scoped_ptr<Event> event(new Event(
       image_writer_api::OnWriteComplete::kEventName, args.Pass()));
 
-  ExtensionSystem::Get(profile_)->event_router()->
-      DispatchEventToExtension(extension_id, event.Pass());
+  EventRouter::Get(profile_)
+      ->DispatchEventToExtension(extension_id, event.Pass());
 
   DeleteOperation(extension_id);
 }
@@ -184,8 +183,8 @@
   scoped_ptr<Event> event(new Event(
       image_writer_api::OnWriteError::kEventName, args.Pass()));
 
-  ExtensionSystem::Get(profile_)->event_router()->
-      DispatchEventToExtension(extension_id, event.Pass());
+  EventRouter::Get(profile_)
+      ->DispatchEventToExtension(extension_id, event.Pass());
 
   DeleteOperation(extension_id);
 }
diff --git a/chrome/browser/extensions/api/input_ime/input_ime_api.cc b/chrome/browser/extensions/api/input_ime/input_ime_api.cc
index 31d5966..b961d14 100644
--- a/chrome/browser/extensions/api/input_ime/input_ime_api.cc
+++ b/chrome/browser/extensions/api/input_ime/input_ime_api.cc
@@ -15,7 +15,6 @@
 #include "content/public/browser/notification_source.h"
 #include "extensions/browser/event_router.h"
 #include "extensions/browser/extension_function_registry.h"
-#include "extensions/browser/extension_system.h"
 
 #if defined(USE_X11)
 #include "chrome/browser/chromeos/input_method/input_method_engine.h"
@@ -79,8 +78,8 @@
   scoped_ptr<extensions::Event> event(new extensions::Event(
       event_name, args.Pass()));
   event->restrict_to_browser_context = profile;
-  extensions::ExtensionSystem::Get(profile)->event_router()->
-      DispatchEventToExtension(extension_id, event.Pass());
+  extensions::EventRouter::Get(profile)
+      ->DispatchEventToExtension(extension_id, event.Pass());
 }
 
 }  // namespace
@@ -280,8 +279,7 @@
 
  private:
   bool HasKeyEventListener() const {
-    return extensions::ExtensionSystem::Get(profile_)
-        ->event_router()
+    return extensions::EventRouter::Get(profile_)
         ->ExtensionHasEventListener(extension_id_,
                                     input_ime::OnKeyEvent::kEventName);
   }
@@ -780,19 +778,19 @@
 InputImeAPI::InputImeAPI(content::BrowserContext* context)
     : profile_(Profile::FromBrowserContext(context)) {
   registrar_.Add(this,
-                 chrome::NOTIFICATION_EXTENSION_LOADED,
+                 chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
                  content::Source<Profile>(profile_));
   registrar_.Add(this,
                  chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
                  content::Source<Profile>(profile_));
 
-  EventRouter* event_router = ExtensionSystem::Get(profile_)->event_router();
+  EventRouter* event_router = EventRouter::Get(profile_);
   event_router->RegisterObserver(this, input_ime::OnActivate::kEventName);
   event_router->RegisterObserver(this, input_ime::OnFocus::kEventName);
 }
 
 InputImeAPI::~InputImeAPI() {
-  ExtensionSystem::Get(profile_)->event_router()->UnregisterObserver(this);
+  EventRouter::Get(profile_)->UnregisterObserver(this);
 }
 
 static base::LazyInstance<BrowserContextKeyedAPIFactory<InputImeAPI> >
@@ -806,7 +804,7 @@
 void InputImeAPI::Observe(int type,
                           const content::NotificationSource& source,
                           const content::NotificationDetails& details) {
-  if (type == chrome::NOTIFICATION_EXTENSION_LOADED) {
+  if (type == chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED) {
     const Extension* extension =
         content::Details<const Extension>(details).ptr();
     const std::vector<InputComponentInfo>* input_components =
diff --git a/chrome/browser/extensions/api/location/location_manager.cc b/chrome/browser/extensions/api/location/location_manager.cc
index 35ed634..38a7cf0 100644
--- a/chrome/browser/extensions/api/location/location_manager.cc
+++ b/chrome/browser/extensions/api/location/location_manager.cc
@@ -299,7 +299,8 @@
 
 LocationManager::LocationManager(content::BrowserContext* context)
     : profile_(Profile::FromBrowserContext(context)) {
-  registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
+  registrar_.Add(this,
+                 chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
                  content::Source<Profile>(profile_));
   registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
                  content::Source<Profile>(profile_));
@@ -393,8 +394,8 @@
 
   scoped_ptr<Event> event(new Event(event_name, args.Pass()));
 
-  ExtensionSystem::Get(profile_)->event_router()->
-      DispatchEventToExtension(extension_id, event.Pass());
+  EventRouter::Get(profile_)
+      ->DispatchEventToExtension(extension_id, event.Pass());
 }
 
 void LocationManager::Observe(int type,
@@ -403,7 +404,7 @@
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
 
   switch (type) {
-    case chrome::NOTIFICATION_EXTENSION_LOADED: {
+    case chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED: {
       // Grants permission to use geolocation once an extension with "location"
       // permission is loaded.
       const Extension* extension =
diff --git a/chrome/browser/extensions/api/log_private/log_private_api_chromeos.cc b/chrome/browser/extensions/api/log_private/log_private_api_chromeos.cc
index 2a595cc..bd3d2a1 100644
--- a/chrome/browser/extensions/api/log_private/log_private_api_chromeos.cc
+++ b/chrome/browser/extensions/api/log_private/log_private_api_chromeos.cc
@@ -26,7 +26,6 @@
 #include "content/public/browser/notification_source.h"
 #include "extensions/browser/event_router.h"
 #include "extensions/browser/extension_function.h"
-#include "extensions/browser/extension_system.h"
 
 using content::BrowserThread;
 
@@ -134,8 +133,7 @@
     event_args->Append(value->DeepCopy());
     scoped_ptr<Event> event(new Event(events::kOnAddNetInternalsEntries,
                                       event_args.Pass()));
-    ExtensionSystem::Get(profile_)->event_router()->DispatchEventToExtension(
-        *ix, event.Pass());
+    EventRouter::Get(profile_)->DispatchEventToExtension(*ix, event.Pass());
   }
 }
 
diff --git a/chrome/browser/extensions/api/management/management_api.cc b/chrome/browser/extensions/api/management/management_api.cc
index c4473fd..851844b 100644
--- a/chrome/browser/extensions/api/management/management_api.cc
+++ b/chrome/browser/extensions/api/management/management_api.cc
@@ -648,12 +648,10 @@
 
 ManagementEventRouter::ManagementEventRouter(Profile* profile)
     : profile_(profile) {
-  int types[] = {
-    chrome::NOTIFICATION_EXTENSION_INSTALLED,
-    chrome::NOTIFICATION_EXTENSION_UNINSTALLED,
-    chrome::NOTIFICATION_EXTENSION_LOADED,
-    chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED
-  };
+  int types[] = {chrome::NOTIFICATION_EXTENSION_INSTALLED,
+                 chrome::NOTIFICATION_EXTENSION_UNINSTALLED,
+                 chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
+                 chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED};
 
   CHECK(registrar_.IsEmpty());
   for (size_t i = 0; i < arraysize(types); i++) {
@@ -685,7 +683,7 @@
       event_name = management::OnUninstalled::kEventName;
       extension = content::Details<const Extension>(details).ptr();
       break;
-    case chrome::NOTIFICATION_EXTENSION_LOADED:
+    case chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED:
       event_name = management::OnEnabled::kEventName;
       extension = content::Details<const Extension>(details).ptr();
       break;
@@ -714,13 +712,12 @@
   }
 
   scoped_ptr<Event> event(new Event(event_name, args.Pass()));
-  ExtensionSystem::Get(profile)->event_router()->BroadcastEvent(event.Pass());
+  EventRouter::Get(profile)->BroadcastEvent(event.Pass());
 }
 
 ManagementAPI::ManagementAPI(content::BrowserContext* context)
     : browser_context_(context) {
-  EventRouter* event_router =
-      ExtensionSystem::Get(browser_context_)->event_router();
+  EventRouter* event_router = EventRouter::Get(browser_context_);
   event_router->RegisterObserver(this, management::OnInstalled::kEventName);
   event_router->RegisterObserver(this, management::OnUninstalled::kEventName);
   event_router->RegisterObserver(this, management::OnEnabled::kEventName);
@@ -731,8 +728,7 @@
 }
 
 void ManagementAPI::Shutdown() {
-  ExtensionSystem::Get(browser_context_)->event_router()->UnregisterObserver(
-      this);
+  EventRouter::Get(browser_context_)->UnregisterObserver(this);
 }
 
 static base::LazyInstance<BrowserContextKeyedAPIFactory<ManagementAPI> >
@@ -747,8 +743,7 @@
 void ManagementAPI::OnListenerAdded(const EventListenerInfo& details) {
   management_event_router_.reset(
       new ManagementEventRouter(Profile::FromBrowserContext(browser_context_)));
-  ExtensionSystem::Get(browser_context_)->event_router()->UnregisterObserver(
-      this);
+  EventRouter::Get(browser_context_)->UnregisterObserver(this);
 }
 
 }  // namespace extensions
diff --git a/chrome/browser/extensions/api/mdns/mdns_api.cc b/chrome/browser/extensions/api/mdns/mdns_api.cc
index b67e4a5..2e61ec9 100644
--- a/chrome/browser/extensions/api/mdns/mdns_api.cc
+++ b/chrome/browser/extensions/api/mdns/mdns_api.cc
@@ -9,7 +9,6 @@
 #include "base/lazy_instance.h"
 #include "chrome/browser/extensions/extension_service.h"
 #include "chrome/common/extensions/api/mdns.h"
-#include "extensions/browser/extension_system.h"
 
 namespace extensions {
 
@@ -32,8 +31,8 @@
 
 MDnsAPI::MDnsAPI(content::BrowserContext* context) : browser_context_(context) {
   DCHECK(browser_context_);
-  ExtensionSystem::Get(context)->event_router()->RegisterObserver(
-      this, mdns::OnServiceList::kEventName);
+  EventRouter::Get(context)
+      ->RegisterObserver(this, mdns::OnServiceList::kEventName);
 }
 
 MDnsAPI::~MDnsAPI() {
@@ -84,8 +83,7 @@
 
   // Check all listeners for service type filers.
   const EventListenerMap::ListenerList& listeners =
-      extensions::ExtensionSystem::Get(browser_context_)
-          ->event_router()
+      extensions::EventRouter::Get(browser_context_)
           ->listeners()
           .GetEventListenersByName(details.event_name);
   for (EventListenerMap::ListenerList::const_iterator it = listeners.begin();
@@ -149,9 +147,7 @@
 
   // TODO(justinlin): To avoid having listeners without filters getting all
   // events, modify API to have this event require filters.
-  extensions::ExtensionSystem::Get(browser_context_)
-      ->event_router()
-      ->BroadcastEvent(event.Pass());
+  extensions::EventRouter::Get(browser_context_)->BroadcastEvent(event.Pass());
 }
 
 }  // namespace extensions
diff --git a/chrome/browser/extensions/api/media_galleries/media_galleries_api.cc b/chrome/browser/extensions/api/media_galleries/media_galleries_api.cc
index 170f01a..171111b 100644
--- a/chrome/browser/extensions/api/media_galleries/media_galleries_api.cc
+++ b/chrome/browser/extensions/api/media_galleries/media_galleries_api.cc
@@ -302,10 +302,8 @@
 
 bool MediaGalleriesEventRouter::ExtensionHasScanProgressListener(
     const std::string& extension_id) const {
-  EventRouter* router = ExtensionSystem::Get(profile_)->event_router();
-  return router->ExtensionHasEventListener(
-      extension_id,
-      MediaGalleries::OnScanProgress::kEventName);
+  return EventRouter::Get(profile_)->ExtensionHasEventListener(
+      extension_id, MediaGalleries::OnScanProgress::kEventName);
 }
 
 void MediaGalleriesEventRouter::OnScanStarted(const std::string& extension_id) {
@@ -358,8 +356,7 @@
     const std::string& event_name,
     scoped_ptr<base::ListValue> event_args) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-  EventRouter* router =
-      extensions::ExtensionSystem::Get(profile_)->event_router();
+  EventRouter* router = EventRouter::Get(profile_);
   if (!router->ExtensionHasEventListener(extension_id, event_name))
     return;
 
diff --git a/chrome/browser/extensions/api/media_galleries_private/gallery_watch_manager.cc b/chrome/browser/extensions/api/media_galleries_private/gallery_watch_manager.cc
index 539ac30..9ae61a4 100644
--- a/chrome/browser/extensions/api/media_galleries_private/gallery_watch_manager.cc
+++ b/chrome/browser/extensions/api/media_galleries_private/gallery_watch_manager.cc
@@ -269,8 +269,10 @@
     return;
   delete it->second;
   g_gallery_watch_managers->erase(it);
-  if (g_gallery_watch_managers->empty())
+  if (g_gallery_watch_managers->empty()) {
     delete g_gallery_watch_managers;
+    g_gallery_watch_managers = NULL;
+  }
 }
 
 // static
diff --git a/chrome/browser/extensions/api/media_galleries_private/gallery_watch_state_tracker.cc b/chrome/browser/extensions/api/media_galleries_private/gallery_watch_state_tracker.cc
index 3629f38..61f6da2 100644
--- a/chrome/browser/extensions/api/media_galleries_private/gallery_watch_state_tracker.cc
+++ b/chrome/browser/extensions/api/media_galleries_private/gallery_watch_state_tracker.cc
@@ -72,11 +72,10 @@
 }  // namespace
 
 GalleryWatchStateTracker::GalleryWatchStateTracker(Profile* profile)
-    : profile_(profile),
-      scoped_extension_registry_observer_(this) {
+    : profile_(profile), extension_registry_observer_(this) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
   DCHECK(profile_);
-  scoped_extension_registry_observer_.Add(ExtensionRegistry::Get(profile_));
+  extension_registry_observer_.Add(ExtensionRegistry::Get(profile_));
   MediaGalleriesPreferences* preferences =
       g_browser_process->media_file_system_registry()->GetPreferences(profile);
   preferences->AddGalleryChangeObserver(this);
@@ -208,7 +207,8 @@
 
 void GalleryWatchStateTracker::OnExtensionUnloaded(
     content::BrowserContext* browser_context,
-    const Extension* extension) {
+    const Extension* extension,
+    UnloadedExtensionInfo::Reason reason) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
   if (!ContainsKey(watched_extensions_map_, extension->id()))
     return;
diff --git a/chrome/browser/extensions/api/media_galleries_private/gallery_watch_state_tracker.h b/chrome/browser/extensions/api/media_galleries_private/gallery_watch_state_tracker.h
index 985f63c..7443166 100644
--- a/chrome/browser/extensions/api/media_galleries_private/gallery_watch_state_tracker.h
+++ b/chrome/browser/extensions/api/media_galleries_private/gallery_watch_state_tracker.h
@@ -93,7 +93,9 @@
   virtual void OnExtensionLoaded(content::BrowserContext* browser_context,
                                  const Extension* extension) OVERRIDE;
   virtual void OnExtensionUnloaded(content::BrowserContext* browser_context,
-                                   const Extension* extension) OVERRIDE;
+                                   const Extension* extension,
+                                   UnloadedExtensionInfo::Reason reason)
+      OVERRIDE;
 
   // Syncs media gallery watch data for the given extension to/from the state
   // storage.
@@ -136,8 +138,8 @@
   // Current profile.
   Profile* profile_;
 
-  ScopedObserver<ExtensionRegistry,
-                 ExtensionRegistryObserver> scoped_extension_registry_observer_;
+  ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver>
+      extension_registry_observer_;
 
   // A map of watched gallery details, per extension.
   WatchedExtensionsMap watched_extensions_map_;
diff --git a/chrome/browser/extensions/api/media_galleries_private/media_galleries_private_api.cc b/chrome/browser/extensions/api/media_galleries_private/media_galleries_private_api.cc
index f5801f0..3bd212a 100644
--- a/chrome/browser/extensions/api/media_galleries_private/media_galleries_private_api.cc
+++ b/chrome/browser/extensions/api/media_galleries_private/media_galleries_private_api.cc
@@ -84,7 +84,7 @@
     content::BrowserContext* context)
     : profile_(Profile::FromBrowserContext(context)), weak_ptr_factory_(this) {
   DCHECK(profile_);
-  EventRouter* event_router = ExtensionSystem::Get(profile_)->event_router();
+  EventRouter* event_router = EventRouter::Get(profile_);
   event_router->RegisterObserver(
       this, media_galleries_private::OnGalleryChanged::kEventName);
 }
@@ -93,7 +93,7 @@
 }
 
 void MediaGalleriesPrivateAPI::Shutdown() {
-  ExtensionSystem::Get(profile_)->event_router()->UnregisterObserver(this);
+  EventRouter::Get(profile_)->UnregisterObserver(this);
   weak_ptr_factory_.InvalidateWeakPtrs();
   content::BrowserThread::PostTask(
       content::BrowserThread::FILE, FROM_HERE,
diff --git a/chrome/browser/extensions/api/media_galleries_private/media_galleries_private_event_router.cc b/chrome/browser/extensions/api/media_galleries_private/media_galleries_private_event_router.cc
index 51f8450..64598da 100644
--- a/chrome/browser/extensions/api/media_galleries_private/media_galleries_private_event_router.cc
+++ b/chrome/browser/extensions/api/media_galleries_private/media_galleries_private_event_router.cc
@@ -11,7 +11,6 @@
 #include "chrome/common/extensions/api/media_galleries_private.h"
 #include "content/public/browser/browser_thread.h"
 #include "extensions/browser/event_router.h"
-#include "extensions/browser/extension_system.h"
 
 namespace media_galleries_private = extensions::api::media_galleries_private;
 
@@ -34,8 +33,7 @@
     MediaGalleryPrefId gallery_id,
     const std::set<std::string>& extension_ids) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-  EventRouter* router =
-      extensions::ExtensionSystem::Get(profile_)->event_router();
+  EventRouter* router = EventRouter::Get(profile_);
   if (!router->HasEventListener(
           media_galleries_private::OnGalleryChanged::kEventName))
     return;
diff --git a/chrome/browser/extensions/api/messaging/native_message_process_host.cc b/chrome/browser/extensions/api/messaging/native_message_process_host.cc
index 8d3352a..73af519 100644
--- a/chrome/browser/extensions/api/messaging/native_message_process_host.cc
+++ b/chrome/browser/extensions/api/messaging/native_message_process_host.cc
@@ -200,11 +200,11 @@
 
   read_stream_.reset(new net::FileStream(
       read_file.TakePlatformFile(),
-      base::PLATFORM_FILE_READ | base::PLATFORM_FILE_ASYNC, NULL,
+      base::PLATFORM_FILE_READ | base::PLATFORM_FILE_ASYNC,
       task_runner));
   write_stream_.reset(new net::FileStream(
       write_file.TakePlatformFile(),
-      base::PLATFORM_FILE_WRITE | base::PLATFORM_FILE_ASYNC, NULL,
+      base::PLATFORM_FILE_WRITE | base::PLATFORM_FILE_ASYNC,
       task_runner));
 
   WaitRead();
diff --git a/chrome/browser/extensions/api/networking_private/networking_private_event_router_chromeos.cc b/chrome/browser/extensions/api/networking_private/networking_private_event_router_chromeos.cc
index 69ed66d..73f3a63 100644
--- a/chrome/browser/extensions/api/networking_private/networking_private_event_router_chromeos.cc
+++ b/chrome/browser/extensions/api/networking_private/networking_private_event_router_chromeos.cc
@@ -74,7 +74,7 @@
   // our events. We first check and see if there *is* an event router, because
   // some unit tests try to create all profile services, but don't initialize
   // the event router first.
-  EventRouter* event_router = ExtensionSystem::Get(profile_)->event_router();
+  EventRouter* event_router = EventRouter::Get(profile_);
   if (event_router) {
     event_router->RegisterObserver(
         this, api::networking_private::OnNetworksChanged::kEventName);
@@ -94,7 +94,7 @@
   // Unregister with the event router. We first check and see if there *is* an
   // event router, because some unit tests try to shutdown all profile services,
   // but didn't initialize the event router first.
-  EventRouter* event_router = ExtensionSystem::Get(profile_)->event_router();
+  EventRouter* event_router = EventRouter::Get(profile_);
   if (event_router)
     event_router->UnregisterObserver(this);
 
@@ -119,7 +119,7 @@
 }
 
 void NetworkingPrivateEventRouterImpl::StartOrStopListeningForNetworkChanges() {
-  EventRouter* event_router = ExtensionSystem::Get(profile_)->event_router();
+  EventRouter* event_router = EventRouter::Get(profile_);
   bool should_listen =
       event_router->HasEventListener(
           api::networking_private::OnNetworksChanged::kEventName) ||
@@ -141,7 +141,7 @@
 }
 
 void NetworkingPrivateEventRouterImpl::NetworkListChanged() {
-  EventRouter* event_router = ExtensionSystem::Get(profile_)->event_router();
+  EventRouter* event_router = EventRouter::Get(profile_);
   NetworkStateHandler::NetworkStateList networks;
   NetworkHandler::Get()->network_state_handler()->GetNetworkList(&networks);
   if (!event_router->HasEventListener(
@@ -174,7 +174,7 @@
 
 void NetworkingPrivateEventRouterImpl::NetworkPropertiesUpdated(
     const NetworkState* network) {
-  EventRouter* event_router = ExtensionSystem::Get(profile_)->event_router();
+  EventRouter* event_router = EventRouter::Get(profile_);
   if (!event_router->HasEventListener(
            api::networking_private::OnNetworksChanged::kEventName)) {
     NET_LOG_EVENT("NetworkingPrivate.NetworkPropertiesUpdated: No Listeners",
@@ -196,7 +196,7 @@
     const NetworkPortalDetector::CaptivePortalState& state) {
   const std::string path = network ? network->path() : std::string();
 
-  EventRouter* event_router = ExtensionSystem::Get(profile_)->event_router();
+  EventRouter* event_router = EventRouter::Get(profile_);
   if (!event_router->HasEventListener(
           api::networking_private::OnPortalDetectionCompleted::kEventName)) {
     NET_LOG_EVENT("NetworkingPrivate.OnPortalDetectionCompleted: No Listeners",
diff --git a/chrome/browser/extensions/api/networking_private/networking_private_event_router_nonchromeos.cc b/chrome/browser/extensions/api/networking_private/networking_private_event_router_nonchromeos.cc
index 71d74f6..d0e5319 100644
--- a/chrome/browser/extensions/api/networking_private/networking_private_event_router_nonchromeos.cc
+++ b/chrome/browser/extensions/api/networking_private/networking_private_event_router_nonchromeos.cc
@@ -9,7 +9,6 @@
 #include "chrome/browser/extensions/api/networking_private/networking_private_service_client_factory.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/common/extensions/api/networking_private.h"
-#include "extensions/browser/extension_system.h"
 
 namespace extensions {
 
@@ -56,7 +55,7 @@
   // our events. We first check and see if there *is* an event router, because
   // some unit tests try to create all profile services, but don't initialize
   // the event router first.
-  EventRouter* event_router = ExtensionSystem::Get(profile_)->event_router();
+  EventRouter* event_router = EventRouter::Get(profile_);
   if (!event_router)
     return;
   event_router->RegisterObserver(
@@ -74,7 +73,7 @@
   // Unregister with the event router. We first check and see if there *is* an
   // event router, because some unit tests try to shutdown all profile services,
   // but didn't initialize the event router first.
-  EventRouter* event_router = ExtensionSystem::Get(profile_)->event_router();
+  EventRouter* event_router = EventRouter::Get(profile_);
   if (event_router)
     event_router->UnregisterObserver(this);
 
@@ -100,7 +99,7 @@
 }
 
 void NetworkingPrivateEventRouterImpl::StartOrStopListeningForNetworkChanges() {
-  EventRouter* event_router = ExtensionSystem::Get(profile_)->event_router();
+  EventRouter* event_router = EventRouter::Get(profile_);
   if (!event_router)
     return;
   bool should_listen =
@@ -126,7 +125,7 @@
 
 void NetworkingPrivateEventRouterImpl::OnNetworksChangedEvent(
     const std::vector<std::string>& network_guids) {
-  EventRouter* event_router = ExtensionSystem::Get(profile_)->event_router();
+  EventRouter* event_router = EventRouter::Get(profile_);
   if (!event_router)
     return;
   scoped_ptr<base::ListValue> args(
@@ -138,7 +137,7 @@
 
 void NetworkingPrivateEventRouterImpl::OnNetworkListChangedEvent(
     const std::vector<std::string>& network_guids) {
-  EventRouter* event_router = ExtensionSystem::Get(profile_)->event_router();
+  EventRouter* event_router = EventRouter::Get(profile_);
   if (!event_router)
     return;
   scoped_ptr<base::ListValue> args(
diff --git a/chrome/browser/extensions/api/notifications/notifications_api.cc b/chrome/browser/extensions/api/notifications/notifications_api.cc
index 14bfc28..c8e68a4 100644
--- a/chrome/browser/extensions/api/notifications/notifications_api.cc
+++ b/chrome/browser/extensions/api/notifications/notifications_api.cc
@@ -19,8 +19,8 @@
 #include "chrome/common/chrome_version_info.h"
 #include "content/public/browser/render_process_host.h"
 #include "content/public/browser/render_view_host.h"
+#include "content/public/browser/web_contents.h"
 #include "extensions/browser/event_router.h"
-#include "extensions/browser/extension_system.h"
 #include "extensions/common/extension.h"
 #include "extensions/common/features/feature.h"
 #include "third_party/skia/include/core/SkBitmap.h"
@@ -157,7 +157,7 @@
   }
 
   virtual bool HasClickedListener() OVERRIDE {
-    return ExtensionSystem::Get(profile_)->event_router()->HasEventListener(
+    return EventRouter::Get(profile_)->HasEventListener(
         notifications::OnClicked::kEventName);
   }
 
@@ -175,14 +175,17 @@
     return process_id_;
   }
 
-  virtual content::RenderViewHost* GetRenderViewHost() const OVERRIDE {
+  virtual content::WebContents* GetWebContents() const OVERRIDE {
     // We're holding a reference to api_function_, so we know it'll be valid
     // until ReleaseRVH is called, and api_function_ (as a
     // UIThreadExtensionFunction) will zero out its copy of render_view_host
     // when the RVH goes away.
     if (!api_function_.get())
       return NULL;
-    return api_function_->render_view_host();
+    content::RenderViewHost* rvh = api_function_->render_view_host();
+    if (!rvh)
+      return NULL;
+    return content::WebContents::FromRenderViewHost(rvh);
   }
 
   virtual void ReleaseRenderViewHost() OVERRIDE {
@@ -194,8 +197,8 @@
 
   void SendEvent(const std::string& name, scoped_ptr<base::ListValue> args) {
     scoped_ptr<Event> event(new Event(name, args.Pass()));
-    ExtensionSystem::Get(profile_)->event_router()->DispatchEventToExtension(
-        extension_id_, event.Pass());
+    EventRouter::Get(profile_)->DispatchEventToExtension(extension_id_,
+                                                         event.Pass());
   }
 
   scoped_ptr<base::ListValue> CreateBaseEventArgs() {
diff --git a/chrome/browser/extensions/api/omnibox/omnibox_api.cc b/chrome/browser/extensions/api/omnibox/omnibox_api.cc
index 2e0a43d..5d23e5f 100644
--- a/chrome/browser/extensions/api/omnibox/omnibox_api.cc
+++ b/chrome/browser/extensions/api/omnibox/omnibox_api.cc
@@ -24,7 +24,6 @@
 #include "extensions/browser/extension_prefs.h"
 #include "extensions/browser/extension_prefs_factory.h"
 #include "extensions/browser/extension_registry.h"
-#include "extensions/browser/extension_system.h"
 #include "extensions/browser/extension_system_provider.h"
 #include "extensions/browser/extensions_browser_client.h"
 #include "extensions/common/extension.h"
@@ -103,16 +102,17 @@
       omnibox::OnInputStarted::kEventName,
       make_scoped_ptr(new base::ListValue())));
   event->restrict_to_browser_context = profile;
-  ExtensionSystem::Get(profile)->event_router()->
-      DispatchEventToExtension(extension_id, event.Pass());
+  EventRouter::Get(profile)
+      ->DispatchEventToExtension(extension_id, event.Pass());
 }
 
 // static
 bool ExtensionOmniboxEventRouter::OnInputChanged(
     Profile* profile, const std::string& extension_id,
     const std::string& input, int suggest_id) {
-  if (!ExtensionSystem::Get(profile)->event_router()->ExtensionHasEventListener(
-           extension_id, omnibox::OnInputChanged::kEventName))
+  EventRouter* event_router = EventRouter::Get(profile);
+  if (!event_router->ExtensionHasEventListener(
+          extension_id, omnibox::OnInputChanged::kEventName))
     return false;
 
   scoped_ptr<base::ListValue> args(new base::ListValue());
@@ -122,8 +122,7 @@
   scoped_ptr<Event> event(new Event(omnibox::OnInputChanged::kEventName,
                                     args.Pass()));
   event->restrict_to_browser_context = profile;
-  ExtensionSystem::Get(profile)->event_router()->
-      DispatchEventToExtension(extension_id, event.Pass());
+  event_router->DispatchEventToExtension(extension_id, event.Pass());
   return true;
 }
 
@@ -155,8 +154,8 @@
   scoped_ptr<Event> event(new Event(omnibox::OnInputEntered::kEventName,
                                     args.Pass()));
   event->restrict_to_browser_context = profile;
-  ExtensionSystem::Get(profile)->event_router()->
-      DispatchEventToExtension(extension_id, event.Pass());
+  EventRouter::Get(profile)
+      ->DispatchEventToExtension(extension_id, event.Pass());
 
   content::NotificationService::current()->Notify(
       chrome::NOTIFICATION_EXTENSION_OMNIBOX_INPUT_ENTERED,
@@ -171,15 +170,15 @@
       omnibox::OnInputCancelled::kEventName,
       make_scoped_ptr(new base::ListValue())));
   event->restrict_to_browser_context = profile;
-  ExtensionSystem::Get(profile)->event_router()->
-      DispatchEventToExtension(extension_id, event.Pass());
+  EventRouter::Get(profile)
+      ->DispatchEventToExtension(extension_id, event.Pass());
 }
 
 OmniboxAPI::OmniboxAPI(content::BrowserContext* context)
     : profile_(Profile::FromBrowserContext(context)),
       url_service_(TemplateURLServiceFactory::GetForProfile(profile_)) {
   registrar_.Add(this,
-                 chrome::NOTIFICATION_EXTENSION_LOADED,
+                 chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
                  content::Source<Profile>(profile_));
   registrar_.Add(this,
                  chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
@@ -220,7 +219,7 @@
 void OmniboxAPI::Observe(int type,
                          const content::NotificationSource& source,
                          const content::NotificationDetails& details) {
-  if (type == chrome::NOTIFICATION_EXTENSION_LOADED) {
+  if (type == chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED) {
     const Extension* extension =
         content::Details<const Extension>(details).ptr();
     const std::string& keyword = OmniboxInfo::GetKeyword(extension);
diff --git a/chrome/browser/extensions/api/omnibox/omnibox_api_browsertest.cc b/chrome/browser/extensions/api/omnibox/omnibox_api_browsertest.cc
index 6042557..d51d7a4 100644
--- a/chrome/browser/extensions/api/omnibox/omnibox_api_browsertest.cc
+++ b/chrome/browser/extensions/api/omnibox/omnibox_api_browsertest.cc
@@ -36,7 +36,7 @@
     autocomplete_controller->Start(
         AutocompleteInput(ASCIIToUTF16("keywor"), base::string16::npos,
                           base::string16(), GURL(), AutocompleteInput::NTP,
-                          true, false, true, AutocompleteInput::ALL_MATCHES));
+                          true, false, true, true));
     WaitForAutocompleteDone(autocomplete_controller);
     EXPECT_TRUE(autocomplete_controller->done());
 
@@ -58,8 +58,7 @@
     autocomplete_controller->Start(
         AutocompleteInput(ASCIIToUTF16("keyword suggestio"),
                           base::string16::npos, base::string16(), GURL(),
-                          AutocompleteInput::NTP, true, false, true,
-                          AutocompleteInput::ALL_MATCHES));
+                          AutocompleteInput::NTP, true, false, true, true));
     WaitForAutocompleteDone(autocomplete_controller);
     EXPECT_TRUE(autocomplete_controller->done());
 
@@ -169,7 +168,7 @@
   autocomplete_controller->Start(
       AutocompleteInput(ASCIIToUTF16("keyword command"), base::string16::npos,
                         base::string16(), GURL(), AutocompleteInput::NTP,
-                        true, false, true, AutocompleteInput::ALL_MATCHES));
+                        true, false, true, true));
   omnibox_view->model()->AcceptInput(CURRENT_TAB, false);
   WaitForAutocompleteDone(autocomplete_controller);
   EXPECT_TRUE(autocomplete_controller->done());
@@ -184,7 +183,7 @@
   autocomplete_controller->Start(
       AutocompleteInput(ASCIIToUTF16("keyword newtab"), base::string16::npos,
                         base::string16(), GURL(), AutocompleteInput::NTP,
-                        true, false, true, AutocompleteInput::ALL_MATCHES));
+                        true, false, true, true));
   omnibox_view->model()->AcceptInput(NEW_FOREGROUND_TAB, false);
   WaitForAutocompleteDone(autocomplete_controller);
   EXPECT_TRUE(autocomplete_controller->done());
@@ -221,8 +220,7 @@
     autocomplete_controller->Start(
         AutocompleteInput(ASCIIToUTF16("keyword suggestio"),
                           base::string16::npos, base::string16(), GURL(),
-                          AutocompleteInput::NTP, true, false, true,
-                          AutocompleteInput::ALL_MATCHES));
+                          AutocompleteInput::NTP, true, false, true, true));
     WaitForAutocompleteDone(autocomplete_controller);
     EXPECT_TRUE(autocomplete_controller->done());
 
@@ -244,8 +242,7 @@
     autocomplete_controller->Start(
         AutocompleteInput(ASCIIToUTF16("keyword command incognito"),
                           base::string16::npos, base::string16(), GURL(),
-                          AutocompleteInput::NTP, true, false, true,
-                          AutocompleteInput::ALL_MATCHES));
+                          AutocompleteInput::NTP, true, false, true, true));
     location_bar->AcceptInput();
     EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
   }
diff --git a/chrome/browser/extensions/api/omnibox/omnibox_api_interactive_test.cc b/chrome/browser/extensions/api/omnibox/omnibox_api_interactive_test.cc
index 164a2a9..853e1ef 100644
--- a/chrome/browser/extensions/api/omnibox/omnibox_api_interactive_test.cc
+++ b/chrome/browser/extensions/api/omnibox/omnibox_api_interactive_test.cc
@@ -43,8 +43,7 @@
   autocomplete_controller->Start(
       AutocompleteInput(base::ASCIIToUTF16("keyword command"),
                         base::string16::npos, base::string16(), GURL(),
-                        AutocompleteInput::NTP, true, false, true,
-                        AutocompleteInput::ALL_MATCHES));
+                        AutocompleteInput::NTP, true, false, true, true));
   location_bar->AcceptInput();
   WaitForAutocompleteDone(autocomplete_controller);
   EXPECT_TRUE(autocomplete_controller->done());
diff --git a/chrome/browser/extensions/api/preference/chrome_direct_setting_api.cc b/chrome/browser/extensions/api/preference/chrome_direct_setting_api.cc
index d122cfe..c83f80f 100644
--- a/chrome/browser/extensions/api/preference/chrome_direct_setting_api.cc
+++ b/chrome/browser/extensions/api/preference/chrome_direct_setting_api.cc
@@ -42,9 +42,7 @@
       std::string event_name = base::StringPrintf(
           kOnPrefChangeFormat,
           (*iter).c_str());
-      ExtensionSystem::Get(profile)->event_router()->RegisterObserver(
-          observer,
-          event_name);
+      EventRouter::Get(profile)->RegisterObserver(observer, event_name);
     }
   }
 
@@ -94,7 +92,7 @@
 
 // EventRouter::Observer implementation.
 void ChromeDirectSettingAPI::OnListenerAdded(const EventListenerInfo& details) {
-  ExtensionSystem::Get(profile_)->event_router()->UnregisterObserver(this);
+  EventRouter::Get(profile_)->UnregisterObserver(this);
   registrar_.Init(profile_->GetPrefs());
   preference_whitelist.Get().RegisterPropertyListeners(
       profile_,
@@ -123,7 +121,7 @@
     PrefService* pref_service, const std::string& pref_key) {
   std::string event_name = base::StringPrintf(kOnPrefChangeFormat,
                                               pref_key.c_str());
-  EventRouter* router = ExtensionSystem::Get(profile_)->event_router();
+  EventRouter* router = EventRouter::Get(profile_);
   if (router && router->HasEventListener(event_name)) {
     const PrefService::Preference* preference =
         profile_->GetPrefs()->FindPreference(pref_key.c_str());
diff --git a/chrome/browser/extensions/api/preference/preference_api.cc b/chrome/browser/extensions/api/preference/preference_api.cc
index a964595..26a088f 100644
--- a/chrome/browser/extensions/api/preference/preference_api.cc
+++ b/chrome/browser/extensions/api/preference/preference_api.cc
@@ -27,7 +27,6 @@
 #include "extensions/browser/extension_pref_value_map.h"
 #include "extensions/browser/extension_pref_value_map_factory.h"
 #include "extensions/browser/extension_prefs_factory.h"
-#include "extensions/browser/extension_system.h"
 #include "extensions/browser/extension_system_provider.h"
 #include "extensions/browser/extensions_browser_client.h"
 #include "extensions/browser/pref_names.h"
@@ -413,8 +412,7 @@
     bool rv = PrefMapping::GetInstance()->FindEventForBrowserPref(
         kPrefMapping[i].browser_pref, &event_name, &permission);
     DCHECK(rv);
-    ExtensionSystem::Get(profile_)->event_router()->RegisterObserver(
-        this, event_name);
+    EventRouter::Get(profile_)->RegisterObserver(this, event_name);
   }
   content_settings_store()->AddObserver(this);
 }
@@ -423,7 +421,7 @@
 }
 
 void PreferenceAPI::Shutdown() {
-  ExtensionSystem::Get(profile_)->event_router()->UnregisterObserver(this);
+  EventRouter::Get(profile_)->UnregisterObserver(this);
   if (!extension_prefs()->extensions_disabled())
     ClearIncognitoSessionOnlyContentSettings();
   content_settings_store()->RemoveObserver(this);
@@ -445,7 +443,7 @@
 
 void PreferenceAPI::OnListenerAdded(const EventListenerInfo& details) {
   preference_event_router_.reset(new PreferenceEventRouter(profile_));
-  ExtensionSystem::Get(profile_)->event_router()->UnregisterObserver(this);
+  EventRouter::Get(profile_)->UnregisterObserver(this);
 }
 
 void PreferenceAPI::OnContentSettingChanged(const std::string& extension_id,
diff --git a/chrome/browser/extensions/api/preference/preference_helpers.cc b/chrome/browser/extensions/api/preference/preference_helpers.cc
index fe55fd7..09b00f3 100644
--- a/chrome/browser/extensions/api/preference/preference_helpers.cc
+++ b/chrome/browser/extensions/api/preference/preference_helpers.cc
@@ -89,8 +89,7 @@
     APIPermission::ID permission,
     bool incognito,
     const std::string& browser_pref) {
-  EventRouter* router =
-      ExtensionSystem::Get(profile)->event_router();
+  EventRouter* router = EventRouter::Get(profile);
   if (!router || !router->HasEventListener(event_name))
     return;
   ExtensionService* extension_service =
diff --git a/chrome/browser/extensions/api/principals_private/principals_private_api.cc b/chrome/browser/extensions/api/principals_private/principals_private_api.cc
index 0b7b8b9..a6ff8b6 100644
--- a/chrome/browser/extensions/api/principals_private/principals_private_api.cc
+++ b/chrome/browser/extensions/api/principals_private/principals_private_api.cc
@@ -9,7 +9,7 @@
 #include "chrome/browser/profiles/profile_window.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_window.h"
-#include "chrome/common/profile_management_switches.h"
+#include "components/signin/core/common/profile_management_switches.h"
 
 namespace extensions {
 
diff --git a/chrome/browser/extensions/api/processes/processes_api.cc b/chrome/browser/extensions/api/processes/processes_api.cc
index 852a64c..70bc204 100644
--- a/chrome/browser/extensions/api/processes/processes_api.cc
+++ b/chrome/browser/extensions/api/processes/processes_api.cc
@@ -34,7 +34,6 @@
 #include "extensions/browser/event_router.h"
 #include "extensions/browser/extension_function_registry.h"
 #include "extensions/browser/extension_function_util.h"
-#include "extensions/browser/extension_system.h"
 #include "extensions/common/error_utils.h"
 
 namespace extensions {
@@ -470,29 +469,25 @@
 void ProcessesEventRouter::DispatchEvent(
     const std::string& event_name,
     scoped_ptr<base::ListValue> event_args) {
-  if (extensions::ExtensionSystem::Get(browser_context_)->event_router()) {
+  EventRouter* event_router = EventRouter::Get(browser_context_);
+  if (event_router) {
     scoped_ptr<extensions::Event> event(new extensions::Event(
         event_name, event_args.Pass()));
-    extensions::ExtensionSystem::Get(browser_context_)
-        ->event_router()
-        ->BroadcastEvent(event.Pass());
+    event_router->BroadcastEvent(event.Pass());
   }
 }
 
 bool ProcessesEventRouter::HasEventListeners(const std::string& event_name) {
-  extensions::EventRouter* router =
-      extensions::ExtensionSystem::Get(browser_context_)->event_router();
-  if (router && router->HasEventListener(event_name))
-    return true;
-  return false;
+  EventRouter* event_router = EventRouter::Get(browser_context_);
+  return event_router && event_router->HasEventListener(event_name);
 }
 
 ProcessesAPI::ProcessesAPI(content::BrowserContext* context)
     : browser_context_(context) {
-  ExtensionSystem::Get(browser_context_)->event_router()->RegisterObserver(
-      this, processes_api_constants::kOnUpdated);
-  ExtensionSystem::Get(browser_context_)->event_router()->RegisterObserver(
-      this, processes_api_constants::kOnUpdatedWithMemory);
+  EventRouter* event_router = EventRouter::Get(browser_context_);
+  event_router->RegisterObserver(this, processes_api_constants::kOnUpdated);
+  event_router->RegisterObserver(this,
+                                 processes_api_constants::kOnUpdatedWithMemory);
   ExtensionFunctionRegistry* registry =
       ExtensionFunctionRegistry::GetInstance();
   registry->RegisterFunction<extensions::GetProcessIdForTabFunction>();
@@ -504,8 +499,7 @@
 }
 
 void ProcessesAPI::Shutdown() {
-  ExtensionSystem::Get(browser_context_)->event_router()->UnregisterObserver(
-      this);
+  EventRouter::Get(browser_context_)->UnregisterObserver(this);
 }
 
 static base::LazyInstance<BrowserContextKeyedAPIFactory<ProcessesAPI> >
diff --git a/chrome/browser/extensions/api/push_messaging/push_messaging_api.cc b/chrome/browser/extensions/api/push_messaging/push_messaging_api.cc
index 1f87ac4..5ed1365 100644
--- a/chrome/browser/extensions/api/push_messaging/push_messaging_api.cc
+++ b/chrome/browser/extensions/api/push_messaging/push_messaging_api.cc
@@ -16,7 +16,6 @@
 #include "chrome/browser/extensions/extension_service.h"
 #include "chrome/browser/extensions/token_cache/token_cache_service.h"
 #include "chrome/browser/extensions/token_cache/token_cache_service_factory.h"
-#include "chrome/browser/invalidation/invalidation_auth_provider.h"
 #include "chrome/browser/invalidation/invalidation_service.h"
 #include "chrome/browser/invalidation/invalidation_service_factory.h"
 #include "chrome/browser/profiles/profile.h"
@@ -29,12 +28,12 @@
 #include "content/public/browser/notification_details.h"
 #include "content/public/browser/notification_source.h"
 #include "extensions/browser/event_router.h"
-#include "extensions/browser/extension_system.h"
 #include "extensions/browser/extension_system_provider.h"
 #include "extensions/browser/extensions_browser_client.h"
 #include "extensions/common/extension.h"
 #include "extensions/common/permissions/api_permission.h"
 #include "google_apis/gaia/gaia_constants.h"
+#include "google_apis/gaia/identity_provider.h"
 
 using content::BrowserThread;
 
@@ -76,10 +75,10 @@
            << "' extension = '" << extension_id << "'";
 
   scoped_ptr<base::ListValue> args(glue::OnMessage::Create(message));
-  scoped_ptr<extensions::Event> event(new extensions::Event(
-      glue::OnMessage::kEventName, args.Pass()));
+  scoped_ptr<extensions::Event> event(
+      new extensions::Event(glue::OnMessage::kEventName, args.Pass()));
   event->restrict_to_browser_context = profile_;
-  ExtensionSystem::Get(profile_)->event_router()->DispatchEventToExtension(
+  EventRouter::Get(profile_)->DispatchEventToExtension(
       extension_id, event.Pass());
 }
 
@@ -112,12 +111,12 @@
     return false;
   }
 
-  invalidation::InvalidationAuthProvider* auth_provider =
-      invalidation_service->GetInvalidationAuthProvider();
-  if (!auth_provider->GetTokenService()->RefreshTokenIsAvailable(
-          auth_provider->GetAccountId())) {
-    if (interactive_ && auth_provider->ShowLoginUI()) {
-      auth_provider->GetTokenService()->AddObserver(this);
+  IdentityProvider* identity_provider =
+      invalidation_service->GetIdentityProvider();
+  if (!identity_provider->GetTokenService()->RefreshTokenIsAvailable(
+          identity_provider->GetActiveAccountId())) {
+    if (interactive_ && identity_provider->RequestLogin()) {
+      identity_provider->AddActiveAccountRefreshTokenObserver(this);
       return true;
     } else {
       error_ = kUserNotSignedIn;
@@ -136,15 +135,15 @@
   invalidation::InvalidationService* invalidation_service =
       invalidation::InvalidationServiceFactory::GetForProfile(GetProfile());
   CHECK(invalidation_service);
-  invalidation::InvalidationAuthProvider* auth_provider =
-      invalidation_service->GetInvalidationAuthProvider();
+  IdentityProvider* identity_provider =
+      invalidation_service->GetIdentityProvider();
 
   std::vector<std::string> scope_vector =
       extensions::ObfuscatedGaiaIdFetcher::GetScopes();
   OAuth2TokenService::ScopeSet scopes(scope_vector.begin(), scope_vector.end());
   fetcher_access_token_request_ =
-      auth_provider->GetTokenService()->StartRequest(
-          auth_provider->GetAccountId(), scopes, this);
+      identity_provider->GetTokenService()->StartRequest(
+          identity_provider->GetActiveAccountId(), scopes, this);
 }
 
 void PushMessagingGetChannelIdFunction::OnRefreshTokenAvailable(
@@ -152,8 +151,8 @@
   invalidation::InvalidationService* invalidation_service =
       invalidation::InvalidationServiceFactory::GetForProfile(GetProfile());
   CHECK(invalidation_service);
-  invalidation_service->GetInvalidationAuthProvider()->GetTokenService()->
-      RemoveObserver(this);
+  invalidation_service->GetIdentityProvider()->
+      RemoveActiveAccountRefreshTokenObserver(this);
   DVLOG(2) << "Newly logged in: " << GetProfile()->GetProfileName();
   StartAccessTokenFetch();
 }
@@ -275,7 +274,7 @@
           invalidation::InvalidationServiceFactory::GetForProfile(GetProfile());
       CHECK(invalidation_service);
       if (!interactive_ ||
-          !invalidation_service->GetInvalidationAuthProvider()->ShowLoginUI()) {
+          !invalidation_service->GetIdentityProvider()->RequestLogin()) {
         ReportResult(std::string(), error_text);
       }
       return;
@@ -291,7 +290,8 @@
     : profile_(Profile::FromBrowserContext(context)) {
   registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_INSTALLED,
                  content::Source<Profile>(profile_->GetOriginalProfile()));
-  registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
+  registrar_.Add(this,
+                 chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
                  content::Source<Profile>(profile_->GetOriginalProfile()));
   registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
                  content::Source<Profile>(profile_->GetOriginalProfile()));
@@ -342,7 +342,7 @@
       }
       break;
     }
-    case chrome::NOTIFICATION_EXTENSION_LOADED: {
+    case chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED: {
       const Extension* extension = content::Details<Extension>(details).ptr();
       if (extension->HasAPIPermission(APIPermission::kPushMessaging)) {
         handler_->RegisterExtension(extension->id());
diff --git a/chrome/browser/extensions/api/push_messaging/push_messaging_invalidation_handler_unittest.cc b/chrome/browser/extensions/api/push_messaging/push_messaging_invalidation_handler_unittest.cc
index 018f2f6..e8ae2ae 100644
--- a/chrome/browser/extensions/api/push_messaging/push_messaging_invalidation_handler_unittest.cc
+++ b/chrome/browser/extensions/api/push_messaging/push_messaging_invalidation_handler_unittest.cc
@@ -38,8 +38,7 @@
   MOCK_METHOD0(GetInvalidationLogger, invalidation::InvalidationLogger*());
   MOCK_CONST_METHOD1(RequestDetailedStatus,
                      void(base::Callback<void(const base::DictionaryValue&)>));
-  MOCK_METHOD0(GetInvalidationAuthProvider,
-               invalidation::InvalidationAuthProvider*());
+  MOCK_METHOD0(GetIdentityProvider, IdentityProvider*());
 
  private:
   DISALLOW_COPY_AND_ASSIGN(MockInvalidationService);
diff --git a/chrome/browser/extensions/api/runtime/runtime_api.cc b/chrome/browser/extensions/api/runtime/runtime_api.cc
index 3b050d9..49028e4 100644
--- a/chrome/browser/extensions/api/runtime/runtime_api.cc
+++ b/chrome/browser/extensions/api/runtime/runtime_api.cc
@@ -9,10 +9,12 @@
 #include "base/lazy_instance.h"
 #include "base/logging.h"
 #include "base/memory/scoped_ptr.h"
+#include "base/metrics/histogram.h"
 #include "base/values.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/extensions/extension_service.h"
+#include "chrome/browser/extensions/extension_warning_service.h"
 #include "chrome/browser/extensions/updater/extension_updater.h"
 #include "chrome/browser/omaha_query_params/omaha_query_params.h"
 #include "chrome/browser/profiles/profile.h"
@@ -75,6 +77,14 @@
 // with the equivalent Pepper API.
 const char kPackageDirectoryPath[] = "crxfs";
 
+// If an extension reloads itself within this many miliseconds of reloading
+// itself, the reload is considered suspiciously fast.
+const int kFastReloadTime = 10000;
+
+// After this many suspiciously fast consecutive reloads, an extension will get
+// disabled.
+const int kFastReloadCount = 5;
+
 void DispatchOnStartupEventImpl(BrowserContext* browser_context,
                                 const std::string& extension_id,
                                 bool first_call,
@@ -153,7 +163,8 @@
       registered_for_updates_(false) {
   registrar_.Add(this, chrome::NOTIFICATION_EXTENSIONS_READY,
                  content::Source<BrowserContext>(context));
-  registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
+  registrar_.Add(this,
+                 chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
                  content::Source<BrowserContext>(context));
   registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_INSTALLED,
                  content::Source<BrowserContext>(context));
@@ -181,7 +192,7 @@
       OnExtensionsReady();
       break;
     }
-    case chrome::NOTIFICATION_EXTENSION_LOADED: {
+    case chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED: {
       const Extension* extension =
           content::Details<const Extension>(details).ptr();
       OnExtensionLoaded(extension);
@@ -297,6 +308,57 @@
   RuntimeEventRouter::DispatchOnStartupEvent(browser_context_, extension->id());
 }
 
+void RuntimeAPI::MaybeReloadExtension(const std::string& extension_id) {
+  std::pair<base::TimeTicks, int>& reload_info =
+      last_reload_time_[extension_id];
+  base::TimeTicks now = base::TimeTicks::Now();
+  if (reload_info.first.is_null() ||
+      (now - reload_info.first).InMilliseconds() > kFastReloadTime) {
+    reload_info.second = 0;
+  } else {
+    reload_info.second++;
+  }
+  if (!reload_info.first.is_null()) {
+    UMA_HISTOGRAM_LONG_TIMES("Extensions.RuntimeReloadTime",
+                             now - reload_info.first);
+  }
+  UMA_HISTOGRAM_COUNTS_100("Extensions.RuntimeReloadFastCount",
+                           reload_info.second);
+  reload_info.first = now;
+
+  ExtensionService* service =
+      ExtensionSystem::Get(browser_context_)->extension_service();
+  if (reload_info.second >= kFastReloadCount) {
+    // Unloading an extension clears all warnings, so first terminate the
+    // extension, and then add the warning. Since this is called from an
+    // extension function unloading the extension has to be done
+    // asynchronously. Fortunately PostTask guarentees FIFO order so just
+    // post both tasks.
+    base::MessageLoop::current()->PostTask(
+        FROM_HERE,
+        base::Bind(&ExtensionService::TerminateExtension,
+                   service->AsWeakPtr(),
+                   extension_id));
+    ExtensionWarningSet warnings;
+    warnings.insert(
+        ExtensionWarning::CreateReloadTooFrequentWarning(extension_id));
+    base::MessageLoop::current()->PostTask(
+        FROM_HERE,
+        base::Bind(&ExtensionWarningService::NotifyWarningsOnUI,
+                   browser_context_,
+                   warnings));
+  } else {
+    // We can't call ReloadExtension directly, since when this method finishes
+    // it tries to decrease the reference count for the extension, which fails
+    // if the extension has already been reloaded; so instead we post a task.
+    base::MessageLoop::current()->PostTask(
+        FROM_HERE,
+        base::Bind(&ExtensionService::ReloadExtension,
+                   service->AsWeakPtr(),
+                   extension_id));
+  }
+}
+
 ///////////////////////////////////////////////////////////////////////////////
 
 // static
@@ -453,14 +515,8 @@
 }
 
 bool RuntimeReloadFunction::RunImpl() {
-  // We can't call ReloadExtension directly, since when this method finishes
-  // it tries to decrease the reference count for the extension, which fails
-  // if the extension has already been reloaded; so instead we post a task.
-  base::MessageLoop::current()->PostTask(
-      FROM_HERE,
-      base::Bind(&ExtensionService::ReloadExtension,
-                 GetProfile()->GetExtensionService()->AsWeakPtr(),
-                 extension_id()));
+  RuntimeAPI::GetFactoryInstance()->Get(GetProfile())->MaybeReloadExtension(
+      extension_id());
   return true;
 }
 
diff --git a/chrome/browser/extensions/api/runtime/runtime_api.h b/chrome/browser/extensions/api/runtime/runtime_api.h
index 57ea8ac..b42ba9b 100644
--- a/chrome/browser/extensions/api/runtime/runtime_api.h
+++ b/chrome/browser/extensions/api/runtime/runtime_api.h
@@ -47,6 +47,8 @@
                        const content::NotificationSource& source,
                        const content::NotificationDetails& details) OVERRIDE;
 
+  void MaybeReloadExtension(const std::string& extension_id);
+
  private:
   friend class BrowserContextKeyedAPIFactory<RuntimeAPI>;
 
@@ -80,6 +82,11 @@
 
   content::NotificationRegistrar registrar_;
 
+  // Map to prevent extensions from getting stuck in reload loops. Maps
+  // extension id to the last time it was reloaded and the number of times
+  // it was reloaded with not enough time in between reloads.
+  std::map<std::string, std::pair<base::TimeTicks, int> > last_reload_time_;
+
   DISALLOW_COPY_AND_ASSIGN(RuntimeAPI);
 };
 
diff --git a/chrome/browser/extensions/api/runtime/runtime_apitest.cc b/chrome/browser/extensions/api/runtime/runtime_apitest.cc
index 398989e..ccb45ce 100644
--- a/chrome/browser/extensions/api/runtime/runtime_apitest.cc
+++ b/chrome/browser/extensions/api/runtime/runtime_apitest.cc
@@ -7,7 +7,10 @@
 #include "chrome/browser/extensions/api/runtime/runtime_api.h"
 #include "chrome/browser/extensions/extension_apitest.h"
 #include "chrome/browser/extensions/extension_function_test_utils.h"
+#include "chrome/browser/extensions/test_extension_dir.h"
 #include "chrome/test/base/ui_test_utils.h"
+#include "content/public/browser/notification_service.h"
+#include "extensions/browser/extension_registry.h"
 #include "net/test/embedded_test_server/embedded_test_server.h"
 
 // Tests the privileged components of chrome.runtime.
@@ -69,4 +72,58 @@
       << message_;
 }
 
+// Tests chrome.runtime.reload
+// This test is flaky on Linux: crbug.com/366181
+#if defined(OS_LINUX) || defined(OS_CHROMEOS)
+#define MAYBE_ChromeRuntimeReload DISABLED_ChromeRuntimeReload
+#else
+#define MAYBE_ChromeRuntimeReload ChromeRuntimeReload
+#endif
+IN_PROC_BROWSER_TEST_F(ExtensionApiTest, MAYBE_ChromeRuntimeReload) {
+  ExtensionRegistry* registry = ExtensionRegistry::Get(profile());
+  const char kManifest[] =
+      "{"
+      "  \"name\": \"reload\","
+      "  \"version\": \"1.0\","
+      "  \"background\": {"
+      "    \"scripts\": [\"background.js\"]"
+      "  },"
+      "  \"manifest_version\": 2"
+      "}";
+
+  TestExtensionDir dir;
+  dir.WriteManifest(kManifest);
+  dir.WriteFile(FILE_PATH_LITERAL("background.js"), "console.log('loaded');");
+
+  const Extension* extension = LoadExtension(dir.unpacked_path());
+  ASSERT_TRUE(extension);
+  const std::string extension_id = extension->id();
+
+  // Somewhat arbitrary upper limit of 30 iterations. If the extension manages
+  // to reload itself that often without being terminated, the test fails
+  // anyway.
+  for (int i = 0; i < 30; i++) {
+    content::WindowedNotificationObserver unload_observer(
+        chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
+        content::NotificationService::AllSources());
+    content::WindowedNotificationObserver load_observer(
+        chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
+        content::NotificationService::AllSources());
+
+    ASSERT_TRUE(ExecuteScriptInBackgroundPageNoWait(
+        extension_id, "chrome.runtime.reload();"));
+    unload_observer.Wait();
+
+    if (registry->GetExtensionById(extension_id,
+                                   ExtensionRegistry::TERMINATED)) {
+      break;
+    } else {
+      load_observer.Wait();
+      WaitForExtensionViewsToLoad();
+    }
+  }
+  ASSERT_TRUE(
+      registry->GetExtensionById(extension_id, ExtensionRegistry::TERMINATED));
+}
+
 }  // namespace extensions
diff --git a/chrome/browser/extensions/api/serial/serial_event_dispatcher.cc b/chrome/browser/extensions/api/serial/serial_event_dispatcher.cc
index dc93796..3945807 100644
--- a/chrome/browser/extensions/api/serial/serial_event_dispatcher.cc
+++ b/chrome/browser/extensions/api/serial/serial_event_dispatcher.cc
@@ -9,7 +9,6 @@
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_manager.h"
 #include "extensions/browser/event_router.h"
-#include "extensions/browser/extension_system.h"
 
 namespace extensions {
 
@@ -149,7 +148,7 @@
   if (!g_browser_process->profile_manager()->IsValidProfile(profile))
     return;
 
-  EventRouter* router = ExtensionSystem::Get(profile)->event_router();
+  EventRouter* router = EventRouter::Get(profile);
   if (router)
     router->DispatchEventToExtension(extension_id, event.Pass());
 }
diff --git a/chrome/browser/extensions/api/sessions/sessions_apitest.cc b/chrome/browser/extensions/api/sessions/sessions_apitest.cc
index 869114b..6d0a7f1 100644
--- a/chrome/browser/extensions/api/sessions/sessions_apitest.cc
+++ b/chrome/browser/extensions/api/sessions/sessions_apitest.cc
@@ -11,7 +11,6 @@
 #include "chrome/browser/extensions/extension_apitest.h"
 #include "chrome/browser/extensions/extension_function_test_utils.h"
 #include "chrome/browser/profiles/profile_manager.h"
-#include "chrome/browser/sync/glue/session_model_associator.h"
 #include "chrome/browser/sync/open_tabs_ui_delegate.h"
 #include "chrome/browser/sync/profile_sync_service.h"
 #include "chrome/browser/sync/profile_sync_service_factory.h"
@@ -94,7 +93,6 @@
   };
 
   Browser* browser_;
-  browser_sync::SessionModelAssociator* associator_;
   scoped_refptr<extensions::Extension> extension_;
 };
 
@@ -119,15 +117,6 @@
   browser_ = new Browser(Browser::CreateParams(
       profile, chrome::HOST_DESKTOP_TYPE_NATIVE));
 
-  if (CommandLine::ForCurrentProcess()->HasSwitch(
-          switches::kDisableSyncSessionsV2)) {
-    associator_ = new browser_sync::SessionModelAssociator(
-        static_cast<ProfileSyncService*>(service), true);
-    associator_->SetCurrentMachineTagForTesting(kSessionTags[0]);
-    ON_CALL(*service, GetSessionModelAssociatorDeprecated())
-        .WillByDefault(testing::Return(associator_));
-  }
-
   syncer::ModelTypeSet preferred_types;
   preferred_types.Put(syncer::SESSIONS);
   GoogleServiceAuthError no_error(GoogleServiceAuthError::NONE);
@@ -180,47 +169,33 @@
       BuildTabSpecifics(kSessionTags[index], 0, tab_list1[i], &tabs1[i]);
     }
 
-    if (!CommandLine::ForCurrentProcess()->HasSwitch(
-            switches::kDisableSyncSessionsV2)) {
+    sync_pb::EntitySpecifics entity;
+    entity.mutable_session()->CopyFrom(meta);
+    initial_data.push_back(syncer::SyncData::CreateRemoteData(
+        1,
+        entity,
+        base::Time(),
+        syncer::AttachmentIdList(),
+        syncer::AttachmentServiceProxyForTest::Create()));
+    for (size_t i = 0; i < tabs1.size(); i++) {
       sync_pb::EntitySpecifics entity;
-      entity.mutable_session()->CopyFrom(meta);
+      entity.mutable_session()->CopyFrom(tabs1[i]);
       initial_data.push_back(syncer::SyncData::CreateRemoteData(
-          1,
+          i + 2,
           entity,
           base::Time(),
           syncer::AttachmentIdList(),
           syncer::AttachmentServiceProxyForTest::Create()));
-      for (size_t i = 0; i < tabs1.size(); i++) {
-        sync_pb::EntitySpecifics entity;
-        entity.mutable_session()->CopyFrom(tabs1[i]);
-        initial_data.push_back(syncer::SyncData::CreateRemoteData(
-            i + 2,
-            entity,
-            base::Time(),
-            syncer::AttachmentIdList(),
-            syncer::AttachmentServiceProxyForTest::Create()));
-      }
-    } else {
-      // Update associator with the session's meta node containing one window.
-      associator_->AssociateForeignSpecifics(meta, base::Time());
-      // Add tabs for the window.
-      std::vector<sync_pb::SessionSpecifics>::iterator iter;
-      for (iter = tabs1.begin(); iter != tabs1.end(); ++iter) {
-        associator_->AssociateForeignSpecifics(*iter, base::Time());
-      }
     }
   }
 
-  if (!CommandLine::ForCurrentProcess()->HasSwitch(
-          switches::kDisableSyncSessionsV2)) {
-    ProfileSyncServiceFactory::GetForProfile(browser_->profile())->
-        GetSessionsSyncableService()->
-            MergeDataAndStartSyncing(syncer::SESSIONS, initial_data,
-        scoped_ptr<syncer::SyncChangeProcessor>(
-            new syncer::FakeSyncChangeProcessor()),
-        scoped_ptr<syncer::SyncErrorFactory>(
-            new syncer::SyncErrorFactoryMock()));
-  }
+  ProfileSyncServiceFactory::GetForProfile(browser_->profile())->
+      GetSessionsSyncableService()->
+          MergeDataAndStartSyncing(syncer::SESSIONS, initial_data,
+      scoped_ptr<syncer::SyncChangeProcessor>(
+          new syncer::FakeSyncChangeProcessor()),
+      scoped_ptr<syncer::SyncErrorFactory>(
+          new syncer::SyncErrorFactoryMock()));
 }
 
 IN_PROC_BROWSER_TEST_F(ExtensionSessionsTest, GetDevices) {
diff --git a/chrome/browser/extensions/api/settings_overrides/settings_overrides_api.cc b/chrome/browser/extensions/api/settings_overrides/settings_overrides_api.cc
index fe31090..f1b696e 100644
--- a/chrome/browser/extensions/api/settings_overrides/settings_overrides_api.cc
+++ b/chrome/browser/extensions/api/settings_overrides/settings_overrides_api.cc
@@ -70,7 +70,6 @@
     data.image_url_post_params = *search_provider.image_url_post_params;
   data.favicon_url = GURL(
       SubstituteInstallParam(search_provider.favicon_url, install_parameter));
-  data.show_in_default_list = true;
   data.safe_for_autoreplace = false;
   data.input_encodings.push_back(search_provider.encoding);
   data.date_created = base::Time();
@@ -93,7 +92,7 @@
       url_service_(TemplateURLServiceFactory::GetForProfile(profile_)) {
   DCHECK(profile_);
   registrar_.Add(this,
-                 chrome::NOTIFICATION_EXTENSION_LOADED,
+                 chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
                  content::Source<Profile>(profile_));
   registrar_.Add(this,
                  chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
@@ -136,7 +135,7 @@
     const content::NotificationSource& source,
     const content::NotificationDetails& details) {
   switch (type) {
-    case chrome::NOTIFICATION_EXTENSION_LOADED: {
+    case chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED: {
       const Extension* extension =
           content::Details<const Extension>(details).ptr();
       const SettingsOverrides* settings =
@@ -167,8 +166,15 @@
                   url_list.release());
         }
         if (settings->search_engine) {
-          SetPref(extension->id(), prefs::kDefaultSearchProviderEnabled,
-                  new base::FundamentalValue(true));
+          // Bring the preference to the correct state. Before this code set it
+          // to "true" for all search engines. Thus, we should overwrite it for
+          // all search engines.
+          if (settings->search_engine->is_default) {
+            SetPref(extension->id(), prefs::kDefaultSearchProviderEnabled,
+                    new base::FundamentalValue(true));
+          } else {
+            UnsetPref(extension->id(), prefs::kDefaultSearchProviderEnabled);
+          }
           DCHECK(url_service_);
           if (url_service_->loaded()) {
             RegisterSearchProvider(extension);
@@ -199,7 +205,6 @@
           UnsetPref(extension->id(), prefs::kURLsToRestoreOnStartup);
         }
         if (settings->search_engine) {
-          UnsetPref(extension->id(), prefs::kDefaultSearchProviderEnabled);
           DCHECK(url_service_);
           if (url_service_->loaded())
             url_service_->RemoveExtensionControlledTURL(extension->id());
@@ -245,6 +250,7 @@
   std::string install_parameter = prefs->GetInstallParam(extension->id());
   TemplateURLData data =
       ConvertSearchProvider(*settings->search_engine, install_parameter);
+  data.show_in_default_list = info->wants_to_be_default_engine;
   url_service_->AddExtensionControlledTURL(new TemplateURL(profile_, data),
                                            info.Pass());
 }
diff --git a/chrome/browser/extensions/api/signed_in_devices/signed_in_devices_manager.cc b/chrome/browser/extensions/api/signed_in_devices/signed_in_devices_manager.cc
index d6c857a..a7da638 100644
--- a/chrome/browser/extensions/api/signed_in_devices/signed_in_devices_manager.cc
+++ b/chrome/browser/extensions/api/signed_in_devices/signed_in_devices_manager.cc
@@ -26,7 +26,6 @@
 #include "content/public/browser/notification_service.h"
 #include "content/public/browser/notification_source.h"
 #include "extensions/browser/event_router.h"
-#include "extensions/browser/extension_system.h"
 #include "extensions/common/extension.h"
 
 using browser_sync::DeviceInfo;
@@ -88,7 +87,7 @@
 
   event->restrict_to_browser_context = profile_;
 
-  ExtensionSystem::Get(profile_)->event_router()->DispatchEventToExtension(
+  EventRouter::Get(profile_)->DispatchEventToExtension(
       extension_id_, event.Pass());
 }
 
@@ -107,9 +106,7 @@
 
 SignedInDevicesManager::SignedInDevicesManager(content::BrowserContext* context)
     : profile_(Profile::FromBrowserContext(context)) {
-  extensions::EventRouter* router = extensions::ExtensionSystem::Get(
-      profile_)->event_router();
-
+  extensions::EventRouter* router = extensions::EventRouter::Get(profile_);
   if (router) {
     router->RegisterObserver(
         this, api::signed_in_devices::OnDeviceInfoChange::kEventName);
diff --git a/chrome/browser/extensions/api/spellcheck/spellcheck_api.cc b/chrome/browser/extensions/api/spellcheck/spellcheck_api.cc
index f6fa6fd..a249b4a 100644
--- a/chrome/browser/extensions/api/spellcheck/spellcheck_api.cc
+++ b/chrome/browser/extensions/api/spellcheck/spellcheck_api.cc
@@ -42,7 +42,8 @@
 
 SpellcheckAPI::SpellcheckAPI(content::BrowserContext* context) {
   Profile* profile = Profile::FromBrowserContext(context);
-  registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
+  registrar_.Add(this,
+                 chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
                  content::Source<Profile>(profile));
   registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
                  content::Source<Profile>(profile));
@@ -66,7 +67,7 @@
   Profile* profile = content::Source<Profile>(source).ptr();
   SpellcheckService* spellcheck = NULL;
   switch (type) {
-    case chrome::NOTIFICATION_EXTENSION_LOADED: {
+    case chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED: {
       const Extension* extension = content::Details<Extension>(details).ptr();
       SpellcheckDictionaryInfo* spellcheck_info =
           GetSpellcheckDictionaryInfo(extension);
diff --git a/chrome/browser/extensions/api/streams_private/streams_private_api.cc b/chrome/browser/extensions/api/streams_private/streams_private_api.cc
index 9327399..7b8629a 100644
--- a/chrome/browser/extensions/api/streams_private/streams_private_api.cc
+++ b/chrome/browser/extensions/api/streams_private/streams_private_api.cc
@@ -18,7 +18,6 @@
 #include "content/public/browser/stream_handle.h"
 #include "extensions/browser/event_router.h"
 #include "extensions/browser/extension_function_registry.h"
-#include "extensions/browser/extension_system.h"
 #include "net/http/http_response_headers.h"
 
 namespace {
@@ -88,7 +87,7 @@
       new Event(streams_private::OnExecuteMimeTypeHandler::kEventName,
                 streams_private::OnExecuteMimeTypeHandler::Create(info)));
 
-  ExtensionSystem::Get(profile_)->event_router()->DispatchEventToExtension(
+  EventRouter::Get(profile_)->DispatchEventToExtension(
       extension_id, event.Pass());
 
   GURL url = stream->GetURL();
diff --git a/chrome/browser/extensions/api/streams_private/streams_private_apitest.cc b/chrome/browser/extensions/api/streams_private/streams_private_apitest.cc
index fd418c9..ddcbc0f 100644
--- a/chrome/browser/extensions/api/streams_private/streams_private_apitest.cc
+++ b/chrome/browser/extensions/api/streams_private/streams_private_apitest.cc
@@ -174,8 +174,8 @@
         new Event(streams_private::OnExecuteMimeTypeHandler::kEventName,
                   streams_private::OnExecuteMimeTypeHandler::Create(info)));
 
-    ExtensionSystem::Get(browser()->profile())->event_router()->
-        DispatchEventToExtension(test_extension_id_, event.Pass());
+    extensions::EventRouter::Get(browser()->profile())
+        ->DispatchEventToExtension(test_extension_id_, event.Pass());
   }
 
   // Loads the test extension and set's up its file_browser_handler to handle
diff --git a/chrome/browser/extensions/api/sync_file_system/extension_sync_event_observer.cc b/chrome/browser/extensions/api/sync_file_system/extension_sync_event_observer.cc
index 6f7693b..5cfb808 100644
--- a/chrome/browser/extensions/api/sync_file_system/extension_sync_event_observer.cc
+++ b/chrome/browser/extensions/api/sync_file_system/extension_sync_event_observer.cc
@@ -14,7 +14,6 @@
 #include "content/public/browser/browser_context.h"
 #include "extensions/browser/event_router.h"
 #include "extensions/browser/extension_registry.h"
-#include "extensions/browser/extension_system.h"
 #include "extensions/browser/extension_system_provider.h"
 #include "extensions/browser/extensions_browser_client.h"
 #include "extensions/common/extension_set.h"
@@ -120,8 +119,7 @@
   // Check to see whether the event should be broadcasted to all listening
   // extensions or sent to a specific extension ID.
   bool broadcast_mode = app_origin.is_empty();
-  EventRouter* event_router =
-      ExtensionSystem::Get(browser_context_)->event_router();
+  EventRouter* event_router = EventRouter::Get(browser_context_);
   DCHECK(event_router);
 
   scoped_ptr<Event> event(new Event(event_name, values.Pass()));
diff --git a/chrome/browser/extensions/api/system_indicator/system_indicator_manager.cc b/chrome/browser/extensions/api/system_indicator/system_indicator_manager.cc
index f0e8c35..71ddd8f 100644
--- a/chrome/browser/extensions/api/system_indicator/system_indicator_manager.cc
+++ b/chrome/browser/extensions/api/system_indicator/system_indicator_manager.cc
@@ -84,8 +84,7 @@
   scoped_ptr<base::ListValue> params(
       api::system_indicator::OnClicked::Create());
 
-  EventRouter* event_router =
-      ExtensionSystem::Get(profile_)->event_router();
+  EventRouter* event_router = EventRouter::Get(profile_);
   scoped_ptr<Event> event(new Event(
       system_indicator::OnClicked::kEventName,
       params.Pass(),
diff --git a/chrome/browser/extensions/api/system_info/system_info_api.cc b/chrome/browser/extensions/api/system_info/system_info_api.cc
index a73a368..7c76083 100644
--- a/chrome/browser/extensions/api/system_info/system_info_api.cc
+++ b/chrome/browser/extensions/api/system_info/system_info_api.cc
@@ -21,7 +21,6 @@
 #include "components/storage_monitor/storage_info.h"
 #include "components/storage_monitor/storage_monitor.h"
 #include "content/public/browser/browser_thread.h"
-#include "extensions/browser/extension_system.h"
 #include "ui/gfx/display_observer.h"
 
 #if defined(OS_CHROMEOS)
@@ -228,7 +227,7 @@
 
 SystemInfoAPI::SystemInfoAPI(content::BrowserContext* context)
     : browser_context_(context) {
-  EventRouter* router = ExtensionSystem::Get(browser_context_)->event_router();
+  EventRouter* router = EventRouter::Get(browser_context_);
   router->RegisterObserver(this, system_storage::OnAttached::kEventName);
   router->RegisterObserver(this, system_storage::OnDetached::kEventName);
   router->RegisterObserver(this, system_display::OnDisplayChanged::kEventName);
@@ -238,8 +237,7 @@
 }
 
 void SystemInfoAPI::Shutdown() {
-  ExtensionSystem::Get(browser_context_)->event_router()->UnregisterObserver(
-      this);
+  EventRouter::Get(browser_context_)->UnregisterObserver(this);
 }
 
 void SystemInfoAPI::OnListenerAdded(const EventListenerInfo& details) {
diff --git a/chrome/browser/extensions/api/tab_capture/tab_capture_performancetest.cc b/chrome/browser/extensions/api/tab_capture/tab_capture_performancetest.cc
index cb7ad7e..b70d7b6 100644
--- a/chrome/browser/extensions/api/tab_capture/tab_capture_performancetest.cc
+++ b/chrome/browser/extensions/api/tab_capture/tab_capture_performancetest.cc
@@ -125,11 +125,8 @@
       command_line->AppendSwitchASCII(switches::kWindowSize, "2000,1500");
     }
 
-    if (!HasFlag(kUseGpu)) {
+    if (!HasFlag(kUseGpu))
       command_line->AppendSwitch(switches::kDisableGpu);
-    } else {
-      command_line->AppendSwitch(switches::kForceCompositingMode);
-    }
 
     if (HasFlag(kDisableVsync))
       command_line->AppendSwitch(switches::kDisableGpuVsync);
diff --git a/chrome/browser/extensions/api/tab_capture/tab_capture_registry.cc b/chrome/browser/extensions/api/tab_capture/tab_capture_registry.cc
index 4f51f8e..09441ca 100644
--- a/chrome/browser/extensions/api/tab_capture/tab_capture_registry.cc
+++ b/chrome/browser/extensions/api/tab_capture/tab_capture_registry.cc
@@ -17,7 +17,6 @@
 #include "content/public/browser/web_contents.h"
 #include "content/public/browser/web_contents_observer.h"
 #include "extensions/browser/event_router.h"
-#include "extensions/browser/extension_system.h"
 #include "extensions/common/extension.h"
 
 using content::BrowserThread;
@@ -316,8 +315,7 @@
 
 void TabCaptureRegistry::DispatchStatusChangeEvent(
     const TabCaptureRequest* request) const {
-  EventRouter* router = profile_ ?
-      extensions::ExtensionSystem::Get(profile_)->event_router() : NULL;
+  EventRouter* router = profile_ ? EventRouter::Get(profile_) : NULL;
   if (!router)
     return;
 
diff --git a/chrome/browser/extensions/api/tabs/tabs_api.cc b/chrome/browser/extensions/api/tabs/tabs_api.cc
index 8f0fa27..32d114d 100644
--- a/chrome/browser/extensions/api/tabs/tabs_api.cc
+++ b/chrome/browser/extensions/api/tabs/tabs_api.cc
@@ -84,10 +84,6 @@
 #include "ui/base/models/list_selection_model.h"
 #include "ui/base/ui_base_types.h"
 
-#if defined(OS_WIN)
-#include "win8/util/win8_util.h"
-#endif  // OS_WIN
-
 #if defined(USE_ASH)
 #include "apps/app_window_registry.h"
 #include "ash/ash_switches.h"
@@ -189,29 +185,6 @@
   return !boolean || *boolean == value;
 }
 
-Browser* CreateBrowserWindow(const Browser::CreateParams& params,
-                             Profile* profile,
-                             const std::string& extension_id) {
-  bool use_existing_browser_window = false;
-
-#if defined(OS_WIN)
-  // In windows 8 metro mode we don't allow windows to be created.
-  if (win8::IsSingleWindowMetroMode())
-    use_existing_browser_window = true;
-#endif  // OS_WIN
-
-  Browser* new_window = NULL;
-  if (use_existing_browser_window)
-    // The false parameter passed below is to ensure that we find a browser
-    // object matching the profile passed in, instead of the original profile
-    new_window = chrome::FindTabbedBrowser(profile, false,
-                                           params.host_desktop_type);
-
-  if (!new_window)
-    new_window = new Browser(params);
-  return new_window;
-}
-
 }  // namespace
 
 // Windows ---------------------------------------------------------------------
@@ -572,8 +545,7 @@
   create_params.initial_show_state = ui::SHOW_STATE_NORMAL;
   create_params.host_desktop_type = chrome::GetActiveDesktop();
 
-  Browser* new_window = CreateBrowserWindow(create_params, window_profile,
-                                            extension_id);
+  Browser* new_window = new Browser(create_params);
 
   for (std::vector<GURL>::iterator i = urls.begin(); i != urls.end(); ++i) {
     WebContents* tab = chrome::AddSelectedTabWithURL(
@@ -636,14 +608,6 @@
                                             &controller))
     return false;
 
-#if defined(OS_WIN)
-  // Silently ignore changes on the window for metro mode.
-  if (win8::IsSingleWindowMetroMode()) {
-    SetResult(controller->CreateWindowValue());
-    return true;
-  }
-#endif
-
   ui::WindowShowState show_state = ui::SHOW_STATE_DEFAULT;  // No change.
   switch (params->update_info.state) {
     case windows::Update::Params::UpdateInfo::STATE_NORMAL:
@@ -764,13 +728,6 @@
                                            &controller))
     return false;
 
-#if defined(OS_WIN)
-  // In Windows 8 metro mode, an existing Browser instance is reused for
-  // hosting the extension tab. We should not be closing it as we don't own it.
-  if (win8::IsSingleWindowMetroMode())
-    return false;
-#endif
-
   WindowController::Reason reason;
   if (!controller->CanClose(&reason)) {
     if (reason == WindowController::REASON_NOT_EDITABLE)
diff --git a/chrome/browser/extensions/api/tabs/tabs_api.h b/chrome/browser/extensions/api/tabs/tabs_api.h
index 7490aa1..64743ac 100644
--- a/chrome/browser/extensions/api/tabs/tabs_api.h
+++ b/chrome/browser/extensions/api/tabs/tabs_api.h
@@ -19,7 +19,6 @@
 #include "extensions/common/user_script.h"
 #include "url/gurl.h"
 
-class BackingStore;
 class GURL;
 class SkBitmap;
 class TabStripModel;
diff --git a/chrome/browser/extensions/api/tabs/tabs_event_router.cc b/chrome/browser/extensions/api/tabs/tabs_event_router.cc
index edf2fb3..4957647 100644
--- a/chrome/browser/extensions/api/tabs/tabs_event_router.cc
+++ b/chrome/browser/extensions/api/tabs/tabs_event_router.cc
@@ -23,7 +23,6 @@
 #include "content/public/browser/notification_service.h"
 #include "content/public/browser/notification_types.h"
 #include "content/public/browser/web_contents.h"
-#include "extensions/browser/extension_system.h"
 
 using base::DictionaryValue;
 using base::ListValue;
@@ -198,7 +197,7 @@
   event->user_gesture = EventRouter::USER_GESTURE_NOT_ENABLED;
   event->will_dispatch_callback =
       base::Bind(&WillDispatchTabCreatedEvent, contents, active);
-  ExtensionSystem::Get(profile)->event_router()->BroadcastEvent(event.Pass());
+  EventRouter::Get(profile)->BroadcastEvent(event.Pass());
 
   RegisterForTabNotifications(contents);
 }
@@ -417,14 +416,14 @@
     const std::string& event_name,
     scoped_ptr<base::ListValue> args,
     EventRouter::UserGestureState user_gesture) {
-  if (!profile_->IsSameProfile(profile) ||
-      !ExtensionSystem::Get(profile)->event_router())
+  EventRouter* event_router = EventRouter::Get(profile);
+  if (!profile_->IsSameProfile(profile) || !event_router)
     return;
 
   scoped_ptr<Event> event(new Event(event_name, args.Pass()));
   event->restrict_to_browser_context = profile;
   event->user_gesture = user_gesture;
-  ExtensionSystem::Get(profile)->event_router()->BroadcastEvent(event.Pass());
+  event_router->BroadcastEvent(event.Pass());
 }
 
 void TabsEventRouter::DispatchSimpleBrowserEvent(
@@ -470,7 +469,7 @@
       base::Bind(&WillDispatchTabUpdatedEvent,
                  contents,
                  changed_properties.get());
-  ExtensionSystem::Get(profile)->event_router()->BroadcastEvent(event.Pass());
+  EventRouter::Get(profile)->BroadcastEvent(event.Pass());
 }
 
 TabsEventRouter::TabEntry* TabsEventRouter::GetTabEntry(
diff --git a/chrome/browser/extensions/api/tabs/tabs_windows_api.cc b/chrome/browser/extensions/api/tabs/tabs_windows_api.cc
index a955dd1..eda44c6 100644
--- a/chrome/browser/extensions/api/tabs/tabs_windows_api.cc
+++ b/chrome/browser/extensions/api/tabs/tabs_windows_api.cc
@@ -17,8 +17,7 @@
 
 TabsWindowsAPI::TabsWindowsAPI(content::BrowserContext* context)
     : browser_context_(context) {
-  EventRouter* event_router =
-      ExtensionSystem::Get(browser_context_)->event_router();
+  EventRouter* event_router = EventRouter::Get(browser_context_);
 
   // Tabs API Events.
   event_router->RegisterObserver(this, api::tabs::OnCreated::kEventName);
@@ -66,8 +65,7 @@
 }
 
 void TabsWindowsAPI::Shutdown() {
-  ExtensionSystem::Get(browser_context_)->event_router()->UnregisterObserver(
-      this);
+  EventRouter::Get(browser_context_)->UnregisterObserver(this);
 }
 
 static base::LazyInstance<BrowserContextKeyedAPIFactory<TabsWindowsAPI> >
@@ -82,8 +80,7 @@
   // Initialize the event routers.
   tabs_event_router();
   windows_event_router();
-  ExtensionSystem::Get(browser_context_)->event_router()->UnregisterObserver(
-      this);
+  EventRouter::Get(browser_context_)->UnregisterObserver(this);
 }
 
 }  // namespace extensions
diff --git a/chrome/browser/extensions/api/tabs/windows_event_router.cc b/chrome/browser/extensions/api/tabs/windows_event_router.cc
index aca68b0..a24d500 100644
--- a/chrome/browser/extensions/api/tabs/windows_event_router.cc
+++ b/chrome/browser/extensions/api/tabs/windows_event_router.cc
@@ -15,7 +15,6 @@
 #include "chrome/common/extensions/extension_constants.h"
 #include "content/public/browser/notification_service.h"
 #include "extensions/browser/event_router.h"
-#include "extensions/browser/extension_system.h"
 
 using content::BrowserContext;
 
@@ -138,7 +137,7 @@
       base::Bind(&WillDispatchWindowFocusedEvent,
                  static_cast<BrowserContext*>(window_profile),
                  window_id);
-  ExtensionSystem::Get(profile_)->event_router()->BroadcastEvent(event.Pass());
+  EventRouter::Get(profile_)->BroadcastEvent(event.Pass());
 }
 
 void WindowsEventRouter::DispatchEvent(const std::string& event_name,
@@ -146,7 +145,7 @@
                                       scoped_ptr<base::ListValue> args) {
   scoped_ptr<Event> event(new Event(event_name, args.Pass()));
   event->restrict_to_browser_context = profile;
-  ExtensionSystem::Get(profile)->event_router()->BroadcastEvent(event.Pass());
+  EventRouter::Get(profile)->BroadcastEvent(event.Pass());
 }
 
 }  // namespace extensions
diff --git a/chrome/browser/extensions/api/terminal/terminal_private_api.cc b/chrome/browser/extensions/api/terminal/terminal_private_api.cc
index 16f19b9..8cfbfdd 100644
--- a/chrome/browser/extensions/api/terminal/terminal_private_api.cc
+++ b/chrome/browser/extensions/api/terminal/terminal_private_api.cc
@@ -15,7 +15,6 @@
 #include "chromeos/process_proxy/process_proxy_registry.h"
 #include "content/public/browser/browser_thread.h"
 #include "extensions/browser/event_router.h"
-#include "extensions/browser/extension_system.h"
 
 namespace terminal_private = extensions::api::terminal_private;
 namespace OnTerminalResize =
@@ -62,12 +61,11 @@
   args->Append(new base::StringValue(output_type));
   args->Append(new base::StringValue(output));
 
-  if (profile &&
-      extensions::ExtensionSystem::Get(profile)->event_router()) {
+  extensions::EventRouter* event_router = extensions::EventRouter::Get(profile);
+  if (profile && event_router) {
     scoped_ptr<extensions::Event> event(new extensions::Event(
         terminal_private::OnProcessOutput::kEventName, args.Pass()));
-    extensions::ExtensionSystem::Get(profile)->event_router()->
-        DispatchEventToExtension(extension_id, event.Pass());
+        event_router->DispatchEventToExtension(extension_id, event.Pass());
   }
 }
 
diff --git a/chrome/browser/extensions/api/usb/DEPS b/chrome/browser/extensions/api/usb/DEPS
new file mode 100644
index 0000000..70ac41d
--- /dev/null
+++ b/chrome/browser/extensions/api/usb/DEPS
@@ -0,0 +1,3 @@
+include_rules = [
+  "+components/usb_service",
+]
diff --git a/chrome/browser/extensions/api/usb/usb_api.cc b/chrome/browser/extensions/api/usb/usb_api.cc
index 0d23ae9..2df4c20 100644
--- a/chrome/browser/extensions/api/usb/usb_api.cc
+++ b/chrome/browser/extensions/api/usb/usb_api.cc
@@ -10,9 +10,9 @@
 #include "base/memory/scoped_ptr.h"
 #include "base/message_loop/message_loop_proxy.h"
 #include "chrome/browser/extensions/api/usb/usb_device_resource.h"
-#include "chrome/browser/usb/usb_device_handle.h"
-#include "chrome/browser/usb/usb_service.h"
 #include "chrome/common/extensions/api/usb.h"
+#include "components/usb_service/usb_device_handle.h"
+#include "components/usb_service/usb_service.h"
 #include "extensions/browser/extension_system.h"
 #include "extensions/common/permissions/permissions_data.h"
 #include "extensions/common/permissions/usb_device_permission.h"
@@ -49,6 +49,18 @@
 using usb::SynchronizationType;
 using usb::TransferType;
 using usb::UsageType;
+using usb_service::UsbConfigDescriptor;
+using usb_service::UsbDevice;
+using usb_service::UsbDeviceHandle;
+using usb_service::UsbEndpointDescriptor;
+using usb_service::UsbEndpointDirection;
+using usb_service::UsbInterfaceAltSettingDescriptor;
+using usb_service::UsbInterfaceDescriptor;
+using usb_service::UsbService;
+using usb_service::UsbSynchronizationType;
+using usb_service::UsbTransferStatus;
+using usb_service::UsbTransferType;
+using usb_service::UsbUsageType;
 
 typedef std::vector<scoped_refptr<UsbDevice> > DeviceVector;
 typedef scoped_ptr<DeviceVector> ScopedDeviceVector;
@@ -105,10 +117,10 @@
 bool ConvertDirectionToApi(const UsbEndpointDirection& input,
                            Direction* output) {
   switch (input) {
-    case USB_DIRECTION_INBOUND:
+    case usb_service::USB_DIRECTION_INBOUND:
       *output = usb::DIRECTION_IN;
       return true;
-    case USB_DIRECTION_OUTBOUND:
+    case usb_service::USB_DIRECTION_OUTBOUND:
       *output = usb::DIRECTION_OUT;
       return true;
     default:
@@ -120,16 +132,16 @@
 bool ConvertSynchronizationTypeToApi(const UsbSynchronizationType& input,
                                      usb::SynchronizationType* output) {
   switch (input) {
-    case USB_SYNCHRONIZATION_NONE:
+    case usb_service::USB_SYNCHRONIZATION_NONE:
       *output = usb::SYNCHRONIZATION_TYPE_NONE;
       return true;
-    case USB_SYNCHRONIZATION_ASYNCHRONOUS:
+    case usb_service::USB_SYNCHRONIZATION_ASYNCHRONOUS:
       *output = usb::SYNCHRONIZATION_TYPE_ASYNCHRONOUS;
       return true;
-    case USB_SYNCHRONIZATION_ADAPTIVE:
+    case usb_service::USB_SYNCHRONIZATION_ADAPTIVE:
       *output = usb::SYNCHRONIZATION_TYPE_ADAPTIVE;
       return true;
-    case USB_SYNCHRONIZATION_SYNCHRONOUS:
+    case usb_service::USB_SYNCHRONIZATION_SYNCHRONOUS:
       *output = usb::SYNCHRONIZATION_TYPE_SYNCHRONOUS;
       return true;
     default:
@@ -142,16 +154,16 @@
     const UsbTransferType& input,
     usb::TransferType* output) {
   switch (input) {
-    case USB_TRANSFER_CONTROL:
+    case usb_service::USB_TRANSFER_CONTROL:
       *output = usb::TRANSFER_TYPE_CONTROL;
       return true;
-    case USB_TRANSFER_INTERRUPT:
+    case usb_service::USB_TRANSFER_INTERRUPT:
       *output = usb::TRANSFER_TYPE_INTERRUPT;
       return true;
-    case USB_TRANSFER_ISOCHRONOUS:
+    case usb_service::USB_TRANSFER_ISOCHRONOUS:
       *output = usb::TRANSFER_TYPE_ISOCHRONOUS;
       return true;
-    case USB_TRANSFER_BULK:
+    case usb_service::USB_TRANSFER_BULK:
       *output = usb::TRANSFER_TYPE_BULK;
       return true;
     default:
@@ -162,13 +174,13 @@
 
 bool ConvertUsageTypeToApi(const UsbUsageType& input, usb::UsageType* output) {
   switch (input) {
-    case USB_USAGE_DATA:
+    case usb_service::USB_USAGE_DATA:
       *output = usb::USAGE_TYPE_DATA;
       return true;
-    case USB_USAGE_FEEDBACK:
+    case usb_service::USB_USAGE_FEEDBACK:
       *output = usb::USAGE_TYPE_FEEDBACK;
       return true;
-    case USB_USAGE_EXPLICIT_FEEDBACK:
+    case usb_service::USB_USAGE_EXPLICIT_FEEDBACK:
       *output = usb::USAGE_TYPE_EXPLICITFEEDBACK;
       return true;
     default:
@@ -181,10 +193,10 @@
                       UsbEndpointDirection* output) {
   switch (input) {
     case usb::DIRECTION_IN:
-      *output = USB_DIRECTION_INBOUND;
+      *output = usb_service::USB_DIRECTION_INBOUND;
       return true;
     case usb::DIRECTION_OUT:
-      *output = USB_DIRECTION_OUTBOUND;
+      *output = usb_service::USB_DIRECTION_OUTBOUND;
       return true;
     default:
       NOTREACHED();
@@ -265,9 +277,9 @@
   scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer(std::max(
       static_cast<size_t>(1), size));
 
-  if (direction == USB_DIRECTION_INBOUND) {
+  if (direction == usb_service::USB_DIRECTION_INBOUND) {
     return buffer;
-  } else if (direction == USB_DIRECTION_OUTBOUND) {
+  } else if (direction == usb_service::USB_DIRECTION_OUTBOUND) {
     if (input.data.get() && size <= input.data->size()) {
       memcpy(buffer->data(), input.data->data(), size);
       return buffer;
@@ -279,21 +291,21 @@
 
 const char* ConvertTransferStatusToErrorString(const UsbTransferStatus status) {
   switch (status) {
-    case USB_TRANSFER_COMPLETED:
+    case usb_service::USB_TRANSFER_COMPLETED:
       return "";
-    case USB_TRANSFER_ERROR:
+    case usb_service::USB_TRANSFER_ERROR:
       return kErrorGeneric;
-    case USB_TRANSFER_TIMEOUT:
+    case usb_service::USB_TRANSFER_TIMEOUT:
       return kErrorTimeout;
-    case USB_TRANSFER_CANCELLED:
+    case usb_service::USB_TRANSFER_CANCELLED:
       return kErrorCancelled;
-    case USB_TRANSFER_STALLED:
+    case usb_service::USB_TRANSFER_STALLED:
       return kErrorStalled;
-    case USB_TRANSFER_DISCONNECT:
+    case usb_service::USB_TRANSFER_DISCONNECT:
       return kErrorDisconnect;
-    case USB_TRANSFER_OVERFLOW:
+    case usb_service::USB_TRANSFER_OVERFLOW:
       return kErrorOverflow;
-    case USB_TRANSFER_LENGTH_SHORT:
+    case usb_service::USB_TRANSFER_LENGTH_SHORT:
       return kErrorTransferLength;
     default:
       NOTREACHED();
@@ -489,7 +501,7 @@
 void UsbAsyncApiTransferFunction::OnCompleted(UsbTransferStatus status,
                                               scoped_refptr<net::IOBuffer> data,
                                               size_t length) {
-  if (status != USB_TRANSFER_COMPLETED)
+  if (status != usb_service::USB_TRANSFER_COMPLETED)
     SetError(ConvertTransferStatusToErrorString(status));
 
   SetResult(CreateTransferInfo(status, data, length));
diff --git a/chrome/browser/extensions/api/usb/usb_api.h b/chrome/browser/extensions/api/usb/usb_api.h
index 9262eca..12e572c 100644
--- a/chrome/browser/extensions/api/usb/usb_api.h
+++ b/chrome/browser/extensions/api/usb/usb_api.h
@@ -10,17 +10,13 @@
 
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_ptr.h"
-#include "chrome/browser/usb/usb_device.h"
-#include "chrome/browser/usb/usb_device_handle.h"
 #include "chrome/common/extensions/api/usb.h"
+#include "components/usb_service/usb_device.h"
+#include "components/usb_service/usb_device_handle.h"
 #include "extensions/browser/api/api_resource_manager.h"
 #include "extensions/browser/api/async_api_function.h"
 #include "net/base/io_buffer.h"
 
-class UsbDevice;
-class UsbDeviceHandle;
-class UsbService;
-
 namespace extensions {
 
 class UsbDeviceResource;
@@ -35,11 +31,12 @@
   virtual bool PrePrepare() OVERRIDE;
   virtual bool Respond() OVERRIDE;
 
-  scoped_refptr<UsbDevice> GetDeviceOrOrCompleteWithError(
+  scoped_refptr<usb_service::UsbDevice> GetDeviceOrOrCompleteWithError(
       const extensions::api::usb::Device& input_device);
 
-  scoped_refptr<UsbDeviceHandle> GetDeviceHandleOrCompleteWithError(
-      const extensions::api::usb::ConnectionHandle& input_device_handle);
+  scoped_refptr<usb_service::UsbDeviceHandle>
+      GetDeviceHandleOrCompleteWithError(
+          const extensions::api::usb::ConnectionHandle& input_device_handle);
 
   void RemoveUsbDeviceResource(int api_resource_id);
 
@@ -54,13 +51,15 @@
   virtual ~UsbAsyncApiTransferFunction();
 
   bool ConvertDirectionSafely(const extensions::api::usb::Direction& input,
-                              UsbEndpointDirection* output);
-  bool ConvertRequestTypeSafely(const extensions::api::usb::RequestType& input,
-                                UsbDeviceHandle::TransferRequestType* output);
-  bool ConvertRecipientSafely(const extensions::api::usb::Recipient& input,
-                              UsbDeviceHandle::TransferRecipient* output);
+                              usb_service::UsbEndpointDirection* output);
+  bool ConvertRequestTypeSafely(
+      const extensions::api::usb::RequestType& input,
+      usb_service::UsbDeviceHandle::TransferRequestType* output);
+  bool ConvertRecipientSafely(
+      const extensions::api::usb::Recipient& input,
+      usb_service::UsbDeviceHandle::TransferRecipient* output);
 
-  void OnCompleted(UsbTransferStatus status,
+  void OnCompleted(usb_service::UsbTransferStatus status,
                    scoped_refptr<net::IOBuffer> data,
                    size_t length);
 };
@@ -78,9 +77,10 @@
   virtual void AsyncWorkStart() OVERRIDE;
 
  private:
-  void OpenDevices(scoped_ptr<std::vector<scoped_refptr<UsbDevice> > > devices);
+  void OpenDevices(
+      scoped_ptr<std::vector<scoped_refptr<usb_service::UsbDevice> > > devices);
 
-  std::vector<scoped_refptr<UsbDeviceHandle> > device_handles_;
+  std::vector<scoped_refptr<usb_service::UsbDeviceHandle> > device_handles_;
   scoped_ptr<extensions::api::usb::FindDevices::Params> parameters_;
 };
 
@@ -90,7 +90,7 @@
 
   UsbGetDevicesFunction();
 
-  static void SetDeviceForTest(UsbDevice* device);
+  static void SetDeviceForTest(usb_service::UsbDevice* device);
 
   virtual bool Prepare() OVERRIDE;
   virtual void AsyncWorkStart() OVERRIDE;
@@ -100,7 +100,7 @@
 
  private:
   void EnumerationCompletedFileThread(
-      scoped_ptr<std::vector<scoped_refptr<UsbDevice> > > devices);
+      scoped_ptr<std::vector<scoped_refptr<usb_service::UsbDevice> > > devices);
 
   scoped_ptr<extensions::api::usb::GetDevices::Params> parameters_;
 };
@@ -136,7 +136,7 @@
   virtual ~UsbOpenDeviceFunction();
 
  private:
-  scoped_refptr<UsbDeviceHandle> handle_;
+  scoped_refptr<usb_service::UsbDeviceHandle> handle_;
   scoped_ptr<extensions::api::usb::OpenDevice::Params> parameters_;
 };
 
@@ -153,14 +153,14 @@
   virtual void AsyncWorkStart() OVERRIDE;
 
  private:
-  bool ConvertDirectionSafely(const UsbEndpointDirection& input,
+  bool ConvertDirectionSafely(const usb_service::UsbEndpointDirection& input,
                               extensions::api::usb::Direction* output);
   bool ConvertSynchronizationTypeSafely(
-      const UsbSynchronizationType& input,
+      const usb_service::UsbSynchronizationType& input,
       extensions::api::usb::SynchronizationType* output);
-  bool ConvertTransferTypeSafely(const UsbTransferType& input,
+  bool ConvertTransferTypeSafely(const usb_service::UsbTransferType& input,
                                  extensions::api::usb::TransferType* output);
-  bool ConvertUsageTypeSafely(const UsbUsageType& input,
+  bool ConvertUsageTypeSafely(const usb_service::UsbUsageType& input,
                               extensions::api::usb::UsageType* output);
 
   scoped_ptr<base::ListValue> result_;
diff --git a/chrome/browser/extensions/api/usb/usb_apitest.cc b/chrome/browser/extensions/api/usb/usb_apitest.cc
index d5dc252..4f2d72f 100644
--- a/chrome/browser/extensions/api/usb/usb_apitest.cc
+++ b/chrome/browser/extensions/api/usb/usb_apitest.cc
@@ -13,6 +13,11 @@
 using testing::_;
 using testing::Return;
 using content::BrowserThread;
+using usb_service::UsbConfigDescriptor;
+using usb_service::UsbDevice;
+using usb_service::UsbDeviceHandle;
+using usb_service::UsbEndpointDirection;
+using usb_service::UsbTransferCallback;
 
 namespace {
 
@@ -116,9 +121,11 @@
   EXPECT_CALL(*mock_device_handle_.get(), ResetDevice())
       .WillOnce(Return(true))
       .WillOnce(Return(false));
-  EXPECT_CALL(*mock_device_handle_.get(),
-              InterruptTransfer(USB_DIRECTION_OUTBOUND, 2, _, 1, _, _))
-      .WillOnce(InvokeUsbTransferCallback<5>(USB_TRANSFER_COMPLETED));
+  EXPECT_CALL(
+      *mock_device_handle_.get(),
+      InterruptTransfer(usb_service::USB_DIRECTION_OUTBOUND, 2, _, 1, _, _))
+      .WillOnce(
+          InvokeUsbTransferCallback<5>(usb_service::USB_TRANSFER_COMPLETED));
   ASSERT_TRUE(RunExtensionTest("usb/reset_device"));
 }
 
@@ -131,42 +138,45 @@
 
 IN_PROC_BROWSER_TEST_F(UsbApiTest, TransferEvent) {
   EXPECT_CALL(*mock_device_handle_.get(),
-              ControlTransfer(USB_DIRECTION_OUTBOUND,
+              ControlTransfer(usb_service::USB_DIRECTION_OUTBOUND,
                               UsbDeviceHandle::STANDARD,
                               UsbDeviceHandle::DEVICE,
-                              1,
-                              2,
-                              3,
-                              _,
-                              1,
-                              _,
-                              _))
-      .WillOnce(InvokeUsbTransferCallback<9>(USB_TRANSFER_COMPLETED));
+                              1, 2, 3, _, 1, _, _))
+      .WillOnce(
+          InvokeUsbTransferCallback<9>(usb_service::USB_TRANSFER_COMPLETED));
   EXPECT_CALL(*mock_device_handle_.get(),
-              BulkTransfer(USB_DIRECTION_OUTBOUND, 1, _, 1, _, _))
-      .WillOnce(InvokeUsbTransferCallback<5>(USB_TRANSFER_COMPLETED));
+              BulkTransfer(usb_service::USB_DIRECTION_OUTBOUND, 1, _, 1, _, _))
+      .WillOnce(
+          InvokeUsbTransferCallback<5>(usb_service::USB_TRANSFER_COMPLETED));
+  EXPECT_CALL(
+      *mock_device_handle_.get(),
+      InterruptTransfer(usb_service::USB_DIRECTION_OUTBOUND, 2, _, 1, _, _))
+      .WillOnce(
+          InvokeUsbTransferCallback<5>(usb_service::USB_TRANSFER_COMPLETED));
   EXPECT_CALL(*mock_device_handle_.get(),
-              InterruptTransfer(USB_DIRECTION_OUTBOUND, 2, _, 1, _, _))
-      .WillOnce(InvokeUsbTransferCallback<5>(USB_TRANSFER_COMPLETED));
-  EXPECT_CALL(*mock_device_handle_.get(),
-              IsochronousTransfer(USB_DIRECTION_OUTBOUND, 3, _, 1, 1, 1, _, _))
-      .WillOnce(InvokeUsbTransferCallback<7>(USB_TRANSFER_COMPLETED));
+              IsochronousTransfer(
+                  usb_service::USB_DIRECTION_OUTBOUND, 3, _, 1, 1, 1, _, _))
+      .WillOnce(
+          InvokeUsbTransferCallback<7>(usb_service::USB_TRANSFER_COMPLETED));
   EXPECT_CALL(*mock_device_handle_.get(), Close()).Times(AnyNumber());
   ASSERT_TRUE(RunExtensionTest("usb/transfer_event"));
 }
 
 IN_PROC_BROWSER_TEST_F(UsbApiTest, ZeroLengthTransfer) {
   EXPECT_CALL(*mock_device_handle_.get(), BulkTransfer(_, _, _, 0, _, _))
-      .WillOnce(InvokeUsbTransferCallback<5>(USB_TRANSFER_COMPLETED));
+      .WillOnce(
+          InvokeUsbTransferCallback<5>(usb_service::USB_TRANSFER_COMPLETED));
   EXPECT_CALL(*mock_device_handle_.get(), Close()).Times(AnyNumber());
   ASSERT_TRUE(RunExtensionTest("usb/zero_length_transfer"));
 }
 
 IN_PROC_BROWSER_TEST_F(UsbApiTest, TransferFailure) {
   EXPECT_CALL(*mock_device_handle_.get(), BulkTransfer(_, _, _, _, _, _))
-      .WillOnce(InvokeUsbTransferCallback<5>(USB_TRANSFER_COMPLETED))
-      .WillOnce(InvokeUsbTransferCallback<5>(USB_TRANSFER_ERROR))
-      .WillOnce(InvokeUsbTransferCallback<5>(USB_TRANSFER_TIMEOUT));
+      .WillOnce(
+           InvokeUsbTransferCallback<5>(usb_service::USB_TRANSFER_COMPLETED))
+      .WillOnce(InvokeUsbTransferCallback<5>(usb_service::USB_TRANSFER_ERROR))
+      .WillOnce(
+          InvokeUsbTransferCallback<5>(usb_service::USB_TRANSFER_TIMEOUT));
   EXPECT_CALL(*mock_device_handle_.get(), Close()).Times(AnyNumber());
   ASSERT_TRUE(RunExtensionTest("usb/transfer_failure"));
 }
diff --git a/chrome/browser/extensions/api/usb/usb_device_resource.cc b/chrome/browser/extensions/api/usb/usb_device_resource.cc
index c359a6b..633635d 100644
--- a/chrome/browser/extensions/api/usb/usb_device_resource.cc
+++ b/chrome/browser/extensions/api/usb/usb_device_resource.cc
@@ -10,12 +10,13 @@
 #include "base/bind.h"
 #include "base/bind_helpers.h"
 #include "base/synchronization/lock.h"
-#include "chrome/browser/usb/usb_device_handle.h"
 #include "chrome/common/extensions/api/usb.h"
+#include "components/usb_service/usb_device_handle.h"
 #include "content/public/browser/browser_thread.h"
 #include "extensions/browser/api/api_resource.h"
 
 using content::BrowserThread;
+using usb_service::UsbDeviceHandle;
 
 namespace extensions {
 
diff --git a/chrome/browser/extensions/api/usb/usb_device_resource.h b/chrome/browser/extensions/api/usb/usb_device_resource.h
index b959daf..f07f2dc 100644
--- a/chrome/browser/extensions/api/usb/usb_device_resource.h
+++ b/chrome/browser/extensions/api/usb/usb_device_resource.h
@@ -12,14 +12,12 @@
 #include "base/memory/linked_ptr.h"
 #include "base/memory/ref_counted.h"
 #include "base/synchronization/lock.h"
-#include "chrome/browser/usb/usb_device_handle.h"
 #include "chrome/common/extensions/api/usb.h"
+#include "components/usb_service/usb_device_handle.h"
 #include "content/public/browser/browser_thread.h"
 #include "extensions/browser/api/api_resource.h"
 #include "extensions/browser/api/api_resource_manager.h"
 
-class UsbDeviceHandle;
-
 namespace net {
 class IOBuffer;
 }  // namespace net
@@ -30,10 +28,10 @@
 class UsbDeviceResource : public ApiResource {
  public:
   UsbDeviceResource(const std::string& owner_extension_id,
-                    scoped_refptr<UsbDeviceHandle> device);
+                    scoped_refptr<usb_service::UsbDeviceHandle> device);
   virtual ~UsbDeviceResource();
 
-  scoped_refptr<UsbDeviceHandle> device() { return device_; }
+  scoped_refptr<usb_service::UsbDeviceHandle> device() { return device_; }
 
   static const content::BrowserThread::ID kThreadId =
       content::BrowserThread::FILE;
@@ -42,7 +40,7 @@
   friend class ApiResourceManager<UsbDeviceResource>;
   static const char* service_name() { return "UsbDeviceResourceManager"; }
 
-  scoped_refptr<UsbDeviceHandle> device_;
+  scoped_refptr<usb_service::UsbDeviceHandle> device_;
 
   DISALLOW_COPY_AND_ASSIGN(UsbDeviceResource);
 };
diff --git a/chrome/browser/extensions/api/web_navigation/web_navigation_api.cc b/chrome/browser/extensions/api/web_navigation/web_navigation_api.cc
index c64b630..f41c1b1 100644
--- a/chrome/browser/extensions/api/web_navigation/web_navigation_api.cc
+++ b/chrome/browser/extensions/api/web_navigation/web_navigation_api.cc
@@ -26,7 +26,6 @@
 #include "content/public/browser/web_contents.h"
 #include "content/public/common/url_constants.h"
 #include "extensions/browser/event_router.h"
-#include "extensions/browser/extension_system.h"
 #include "extensions/browser/view_type_utils.h"
 #include "net/base/net_errors.h"
 
@@ -801,8 +800,7 @@
 
 WebNavigationAPI::WebNavigationAPI(content::BrowserContext* context)
     : browser_context_(context) {
-  EventRouter* event_router =
-      ExtensionSystem::Get(browser_context_)->event_router();
+  EventRouter* event_router = EventRouter::Get(browser_context_);
   event_router->RegisterObserver(this,
                                  web_navigation::OnBeforeNavigate::kEventName);
   event_router->RegisterObserver(this, web_navigation::OnCommitted::kEventName);
@@ -825,8 +823,7 @@
 }
 
 void WebNavigationAPI::Shutdown() {
-  ExtensionSystem::Get(browser_context_)->event_router()->UnregisterObserver(
-      this);
+  EventRouter::Get(browser_context_)->UnregisterObserver(this);
 }
 
 static base::LazyInstance<BrowserContextKeyedAPIFactory<WebNavigationAPI> >
@@ -841,8 +838,7 @@
 void WebNavigationAPI::OnListenerAdded(const EventListenerInfo& details) {
   web_navigation_event_router_.reset(new WebNavigationEventRouter(
       Profile::FromBrowserContext(browser_context_)));
-  ExtensionSystem::Get(browser_context_)->event_router()->UnregisterObserver(
-      this);
+  EventRouter::Get(browser_context_)->UnregisterObserver(this);
 }
 
 #endif  // OS_ANDROID
diff --git a/chrome/browser/extensions/api/web_navigation/web_navigation_api_helpers.cc b/chrome/browser/extensions/api/web_navigation/web_navigation_api_helpers.cc
index fdbb0a7..d0c75b4 100644
--- a/chrome/browser/extensions/api/web_navigation/web_navigation_api_helpers.cc
+++ b/chrome/browser/extensions/api/web_navigation/web_navigation_api_helpers.cc
@@ -19,7 +19,6 @@
 #include "content/public/browser/web_contents.h"
 #include "content/public/common/page_transition_types.h"
 #include "extensions/browser/event_router.h"
-#include "extensions/browser/extension_system.h"
 #include "extensions/common/event_filtering_info.h"
 #include "net/base/net_errors.h"
 
@@ -46,11 +45,12 @@
   info.SetURL(url);
 
   Profile* profile = Profile::FromBrowserContext(browser_context);
-  if (profile && extensions::ExtensionSystem::Get(profile)->event_router()) {
+  EventRouter* event_router = EventRouter::Get(profile);
+  if (profile && event_router) {
     scoped_ptr<Event> event(new Event(event_name, args.Pass()));
     event->restrict_to_browser_context = profile;
     event->filter_info = info;
-    ExtensionSystem::Get(profile)->event_router()->BroadcastEvent(event.Pass());
+    event_router->BroadcastEvent(event.Pass());
   }
 }
 
diff --git a/chrome/browser/extensions/api/web_request/web_request_api.cc b/chrome/browser/extensions/api/web_request/web_request_api.cc
index 3e235a2..1f77903 100644
--- a/chrome/browser/extensions/api/web_request/web_request_api.cc
+++ b/chrome/browser/extensions/api/web_request/web_request_api.cc
@@ -351,8 +351,7 @@
   if (!g_browser_process->profile_manager()->IsValidProfile(profile))
     return;
 
-  extensions::EventRouter* event_router =
-      extensions::ExtensionSystem::Get(profile)->event_router();
+  extensions::EventRouter* event_router = extensions::EventRouter::Get(profile);
   if (!event_router)
     return;
 
@@ -380,8 +379,7 @@
   scoped_ptr<base::ListValue> event_args(new base::ListValue);
   event_args->Append(event_argument.release());
 
-  extensions::EventRouter* event_router =
-      extensions::ExtensionSystem::Get(profile)->event_router();
+  extensions::EventRouter* event_router = extensions::EventRouter::Get(profile);
 
   scoped_ptr<extensions::Event> event(new extensions::Event(
       declarative_keys::kOnMessage, event_args.Pass(), profile,
@@ -404,8 +402,7 @@
 
 WebRequestAPI::WebRequestAPI(content::BrowserContext* context)
     : browser_context_(context) {
-  EventRouter* event_router =
-      ExtensionSystem::Get(browser_context_)->event_router();
+  EventRouter* event_router = EventRouter::Get(browser_context_);
   for (size_t i = 0; i < arraysize(kWebRequestEvents); ++i) {
     // Observe the webRequest event.
     std::string event_name = kWebRequestEvents[i];
@@ -418,9 +415,7 @@
 }
 
 WebRequestAPI::~WebRequestAPI() {
-  ExtensionSystem::Get(browser_context_)
-      ->event_router()
-      ->UnregisterObserver(this);
+  EventRouter::Get(browser_context_)->UnregisterObserver(this);
 }
 
 static base::LazyInstance<BrowserContextKeyedAPIFactory<WebRequestAPI> >
diff --git a/chrome/browser/extensions/api/webrtc_audio_private/webrtc_audio_private_api.cc b/chrome/browser/extensions/api/webrtc_audio_private/webrtc_audio_private_api.cc
index 49bbf0c..6d4c178 100644
--- a/chrome/browser/extensions/api/webrtc_audio_private/webrtc_audio_private_api.cc
+++ b/chrome/browser/extensions/api/webrtc_audio_private/webrtc_audio_private_api.cc
@@ -80,7 +80,7 @@
 void WebrtcAudioPrivateEventService::SignalEvent() {
   using api::webrtc_audio_private::OnSinksChanged::kEventName;
 
-  EventRouter* router = ExtensionSystem::Get(browser_context_)->event_router();
+  EventRouter* router = EventRouter::Get(browser_context_);
   if (!router || !router->HasEventListener(kEventName))
     return;
   ExtensionService* extension_service =
diff --git a/chrome/browser/extensions/browser_context_keyed_service_factories.cc b/chrome/browser/extensions/browser_context_keyed_service_factories.cc
index dab1f6a..ef72634 100644
--- a/chrome/browser/extensions/browser_context_keyed_service_factories.cc
+++ b/chrome/browser/extensions/browser_context_keyed_service_factories.cc
@@ -50,6 +50,7 @@
 #include "chrome/browser/extensions/api/web_request/web_request_api.h"
 #include "chrome/browser/extensions/api/webrtc_audio_private/webrtc_audio_private_api.h"
 #include "chrome/browser/extensions/api/webstore/webstore_api.h"
+#include "chrome/browser/extensions/extension_garbage_collector_factory.h"
 #include "chrome/browser/extensions/extension_gcm_app_handler.h"
 #include "chrome/browser/extensions/extension_storage_monitor_factory.h"
 #include "chrome/browser/extensions/extension_system_factory.h"
@@ -98,6 +99,7 @@
   extensions::DeveloperPrivateAPI::GetFactoryInstance();
   extensions::DialAPIFactory::GetInstance();
   extensions::ExtensionActionAPI::GetFactoryInstance();
+  extensions::ExtensionGarbageCollectorFactory::GetInstance();
   extensions::ExtensionStorageMonitorFactory::GetInstance();
   extensions::ExtensionSystemFactory::GetInstance();
   extensions::ExtensionToolbarModelFactory::GetInstance();
diff --git a/chrome/browser/extensions/browsertest_util.cc b/chrome/browser/extensions/browsertest_util.cc
index 780233f..21185f8 100644
--- a/chrome/browser/extensions/browsertest_util.cc
+++ b/chrome/browser/extensions/browsertest_util.cc
@@ -34,5 +34,19 @@
   return result;
 }
 
+bool ExecuteScriptInBackgroundPageNoWait(Profile* profile,
+                                         const std::string& extension_id,
+                                         const std::string& script) {
+  extensions::ProcessManager* manager =
+      extensions::ExtensionSystem::Get(profile)->process_manager();
+  extensions::ExtensionHost* host =
+      manager->GetBackgroundHostForExtension(extension_id);
+  if (host == NULL) {
+    ADD_FAILURE() << "Extension " << extension_id << " has no background page.";
+    return false;
+  }
+  return content::ExecuteScript(host->host_contents(), script);
+}
+
 }  // namespace browsertest_util
 }  // namespace extensions
diff --git a/chrome/browser/extensions/browsertest_util.h b/chrome/browser/extensions/browsertest_util.h
index c9ffad3..435b2b6 100644
--- a/chrome/browser/extensions/browsertest_util.h
+++ b/chrome/browser/extensions/browsertest_util.h
@@ -20,6 +20,14 @@
                                           const std::string& extension_id,
                                           const std::string& script);
 
+// Same as ExecuteScriptInBackgroundPage, but doesn't wait for the script
+// to return a result. Fails the test and returns false if |extension_id|
+// isn't installed in |profile| or doesn't have a background page, or if
+// executing the script fails.
+bool ExecuteScriptInBackgroundPageNoWait(Profile* profile,
+                                         const std::string& extension_id,
+                                         const std::string& script);
+
 }  // namespace browsertest_util
 }  // namespace extensions
 
diff --git a/chrome/browser/extensions/chrome_extensions_browser_client.cc b/chrome/browser/extensions/chrome_extensions_browser_client.cc
index 2fe1e35..cb0868a 100644
--- a/chrome/browser/extensions/chrome_extensions_browser_client.cc
+++ b/chrome/browser/extensions/chrome_extensions_browser_client.cc
@@ -113,6 +113,11 @@
       || util::CanCrossIncognito(extension, context);
 }
 
+bool ChromeExtensionsBrowserClient::IsWebViewRequest(
+    net::URLRequest* request) const {
+  return url_request_util::IsWebViewRequest(request);
+}
+
 net::URLRequestJob*
 ChromeExtensionsBrowserClient::MaybeCreateResourceBundleRequestJob(
     net::URLRequest* request,
diff --git a/chrome/browser/extensions/chrome_extensions_browser_client.h b/chrome/browser/extensions/chrome_extensions_browser_client.h
index bc4f7e3..c47e851 100644
--- a/chrome/browser/extensions/chrome_extensions_browser_client.h
+++ b/chrome/browser/extensions/chrome_extensions_browser_client.h
@@ -56,6 +56,7 @@
   virtual bool CanExtensionCrossIncognito(
       const extensions::Extension* extension,
       content::BrowserContext* context) const OVERRIDE;
+  virtual bool IsWebViewRequest(net::URLRequest* request) const OVERRIDE;
   virtual net::URLRequestJob* MaybeCreateResourceBundleRequestJob(
       net::URLRequest* request,
       net::NetworkDelegate* network_delegate,
diff --git a/chrome/browser/extensions/component_loader.cc b/chrome/browser/extensions/component_loader.cc
index 4e9e4b3..105118e 100644
--- a/chrome/browser/extensions/component_loader.cc
+++ b/chrome/browser/extensions/component_loader.cc
@@ -34,6 +34,7 @@
 
 #if defined(OS_CHROMEOS)
 #include "grit/keyboard_resources.h"
+#include "ui/file_manager/grit/file_manager_resources.h"
 #include "ui/keyboard/keyboard_util.h"
 #endif
 
@@ -288,8 +289,18 @@
 }
 
 void ComponentLoader::AddVideoPlayerExtension() {
-  Add(IDR_VIDEOPLAYER_MANIFEST,
+#if defined(OS_CHROMEOS)
+  Add(IDR_VIDEO_PLAYER_MANIFEST,
       base::FilePath(FILE_PATH_LITERAL("video_player")));
+#endif  // defined(OS_CHROMEOS)
+}
+
+void ComponentLoader::AddGalleryExtension() {
+#if defined(OS_CHROMEOS)
+  const CommandLine* const command_line = CommandLine::ForCurrentProcess();
+  if (command_line->HasSwitch(chromeos::switches::kFileManagerEnableNewGallery))
+    Add(IDR_GALLERY_MANIFEST, base::FilePath(FILE_PATH_LITERAL("gallery")));
+#endif
 }
 
 void ComponentLoader::AddHangoutServicesExtension() {
@@ -308,15 +319,6 @@
 
 void ComponentLoader::AddImageLoaderExtension() {
 #if defined(IMAGE_LOADER_EXTENSION)
-#ifndef NDEBUG
-  const CommandLine* command_line = CommandLine::ForCurrentProcess();
-  if (command_line->HasSwitch(switches::kImageLoaderExtensionPath)) {
-    base::FilePath image_loader_extension_path(
-        command_line->GetSwitchValuePath(switches::kImageLoaderExtensionPath));
-    Add(IDR_IMAGE_LOADER_MANIFEST, image_loader_extension_path);
-    return;
-  }
-#endif  // NDEBUG
   Add(IDR_IMAGE_LOADER_MANIFEST,
       base::FilePath(FILE_PATH_LITERAL("image_loader")));
 #endif  // defined(IMAGE_LOADER_EXTENSION)
@@ -442,6 +444,7 @@
   // Component extensions needed for kiosk apps.
   AddVideoPlayerExtension();
   AddFileManagerExtension();
+  AddGalleryExtension();
 
   // Add virtual keyboard.
   AddKeyboardApp();
@@ -473,6 +476,7 @@
   if (!skip_session_components) {
     AddVideoPlayerExtension();
     AddFileManagerExtension();
+    AddGalleryExtension();
 
     AddHangoutServicesExtension();
     AddHotwordHelperExtension();
diff --git a/chrome/browser/extensions/component_loader.h b/chrome/browser/extensions/component_loader.h
index e60c824..735184f 100644
--- a/chrome/browser/extensions/component_loader.h
+++ b/chrome/browser/extensions/component_loader.h
@@ -127,6 +127,7 @@
       bool skip_session_components);
   void AddFileManagerExtension();
   void AddVideoPlayerExtension();
+  void AddGalleryExtension();
   void AddHangoutServicesExtension();
   void AddHotwordHelperExtension();
   void AddImageLoaderExtension();
diff --git a/chrome/browser/extensions/crx_installer.cc b/chrome/browser/extensions/crx_installer.cc
index 2466c63..57d2a36 100644
--- a/chrome/browser/extensions/crx_installer.cc
+++ b/chrome/browser/extensions/crx_installer.cc
@@ -53,6 +53,7 @@
 #include "extensions/common/permissions/permissions_data.h"
 #include "extensions/common/user_script.h"
 #include "grit/chromium_strings.h"
+#include "grit/extensions_strings.h"
 #include "grit/generated_resources.h"
 #include "grit/theme_resources.h"
 #include "third_party/skia/include/core/SkBitmap.h"
@@ -166,6 +167,7 @@
 }
 
 CrxInstaller::~CrxInstaller() {
+  LOG(WARNING) << "Destroying";
   // Make sure the UI is deleted on the ui thread.
   if (client_) {
     BrowserThread::DeleteSoon(BrowserThread::UI, FROM_HERE, client_);
@@ -178,8 +180,7 @@
   if (!service || service->browser_terminating())
     return;
 
-  InstallTrackerFactory::GetForProfile(profile())
-      ->OnBeginCrxInstall(expected_id_);
+  NotifyCrxInstallBegin();
 
   source_file_ = source_file;
 
@@ -201,6 +202,8 @@
                                      const GURL& download_url) {
   DCHECK(!download_url.is_empty());
 
+  NotifyCrxInstallBegin();
+
   source_file_ = source_file;
   download_url_ = download_url;
 
@@ -224,6 +227,8 @@
 }
 
 void CrxInstaller::InstallWebApp(const WebApplicationInfo& web_app) {
+  NotifyCrxInstallBegin();
+
   if (!installer_task_runner_->PostTask(
           FROM_HERE,
           base::Bind(&CrxInstaller::ConvertWebAppOnFileThread,
@@ -568,6 +573,7 @@
       ReportFailureFromUIThread(CrxInstallerError(
           l10n_util::GetStringUTF16(
               IDS_EXTENSION_INSTALL_KIOSK_MODE_ONLY)));
+      return;
     }
   }
 
@@ -733,6 +739,9 @@
 void CrxInstaller::ReportFailureFromUIThread(const CrxInstallerError& error) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
 
+  if (!service_weak_.get() || service_weak_->browser_terminating())
+    return;
+
   content::NotificationService* service =
       content::NotificationService::current();
   service->Notify(chrome::NOTIFICATION_EXTENSION_INSTALL_ERROR,
@@ -802,6 +811,11 @@
   NotifyCrxInstallComplete(true);
 }
 
+void CrxInstaller::NotifyCrxInstallBegin() {
+  InstallTrackerFactory::GetForProfile(profile())
+      ->OnBeginCrxInstall(expected_id_);
+}
+
 void CrxInstaller::NotifyCrxInstallComplete(bool success) {
   // Some users (such as the download shelf) need to know when a
   // CRXInstaller is done.  Listening for the EXTENSION_* events
@@ -814,12 +828,16 @@
       content::Details<const Extension>(
           success ? extension() : NULL));
 
+  InstallTrackerFactory::GetForProfile(profile())
+      ->OnFinishCrxInstall(success ? extension()->id() : expected_id_, success);
+
   if (success)
     ConfirmReEnable();
 }
 
 void CrxInstaller::CleanupTempFiles() {
   if (!installer_task_runner_->RunsTasksOnCurrentThread()) {
+    LOG(WARNING) << "Post CleanupTempFiles";
     if (!installer_task_runner_->PostTask(
             FROM_HERE,
             base::Bind(&CrxInstaller::CleanupTempFiles, this))) {
@@ -828,6 +846,7 @@
     return;
   }
 
+  LOG(WARNING) << "CleanupTempFiles";
   // Delete the temp directory and crx file as necessary.
   if (!temp_dir_.value().empty()) {
     file_util::DeleteFile(temp_dir_, true);
diff --git a/chrome/browser/extensions/crx_installer.h b/chrome/browser/extensions/crx_installer.h
index 7facb81..8e3575b 100644
--- a/chrome/browser/extensions/crx_installer.h
+++ b/chrome/browser/extensions/crx_installer.h
@@ -110,9 +110,6 @@
   int creation_flags() const { return creation_flags_; }
   void set_creation_flags(int val) { creation_flags_ = val; }
 
-  const GURL& download_url() const { return download_url_; }
-  void set_download_url(const GURL& val) { download_url_ = val; }
-
   const base::FilePath& source_file() const { return source_file_; }
 
   Manifest::Location install_source() const {
@@ -146,14 +143,6 @@
       creation_flags_ &= ~Extension::FROM_WEBSTORE;
   }
 
-  // The original download URL should be set when the WebstoreInstaller is
-  // tracking the installation. The WebstoreInstaller uses this URL to match
-  // failure notifications to the extension.
-  const GURL& original_download_url() const { return original_download_url_; }
-  void set_original_download_url(const GURL& url) {
-    original_download_url_ = url;
-  }
-
   // If |apps_require_extension_mime_type_| is set to true, be sure to set
   // |original_mime_type_| as well.
   void set_apps_require_extension_mime_type(
@@ -248,6 +237,7 @@
   void ReportFailureFromUIThread(const CrxInstallerError& error);
   void ReportSuccessFromFileThread();
   void ReportSuccessFromUIThread();
+  void NotifyCrxInstallBegin();
   void NotifyCrxInstallComplete(bool success);
 
   // Deletes temporary directory and crx file if needed.
@@ -313,9 +303,6 @@
   // to false.
   bool delete_source_;
 
-  // The download URL, before redirects, if this is a gallery install.
-  GURL original_download_url_;
-
   // Whether to create an app shortcut after successful installation. This is
   // set based on the user's selection in the UI and can only ever be true for
   // apps.
diff --git a/chrome/browser/extensions/dev_mode_bubble_controller.cc b/chrome/browser/extensions/dev_mode_bubble_controller.cc
index b1dec7e..cc4448b 100644
--- a/chrome/browser/extensions/dev_mode_bubble_controller.cc
+++ b/chrome/browser/extensions/dev_mode_bubble_controller.cc
@@ -146,12 +146,12 @@
 }
 
 bool DevModeBubbleController::ShouldShow() {
-  return !g_shown_for_profiles.Get().count(profile_) &&
+  return !g_shown_for_profiles.Get().count(profile_->GetOriginalProfile()) &&
       !GetExtensionList().empty();
 }
 
 void DevModeBubbleController::Show(ExtensionMessageBubble* bubble) {
-  g_shown_for_profiles.Get().insert(profile_);
+  g_shown_for_profiles.Get().insert(profile_->GetOriginalProfile());
   ExtensionMessageBubbleController::Show(bubble);
 }
 
diff --git a/chrome/browser/extensions/error_console/error_console.cc b/chrome/browser/extensions/error_console/error_console.cc
index 2429af6..73342d3 100644
--- a/chrome/browser/extensions/error_console/error_console.cc
+++ b/chrome/browser/extensions/error_console/error_console.cc
@@ -37,9 +37,9 @@
 // settings.
 const char kStoreExtensionErrorsPref[] = "store_extension_errors";
 
-// The default mask (for the time being) is to report everything.
-const int32 kDefaultMask = (1 << ExtensionError::MANIFEST_ERROR) |
-                           (1 << ExtensionError::RUNTIME_ERROR);
+// This is the default mask for which errors to report. That is, if an extension
+// does not have specific preference set, this will be used instead.
+const int kDefaultMask = 0;
 
 const char kAppsDeveloperToolsExtensionId[] =
     "ohmmkhmmmpcnpikjeljgnaoabkaalbgc";
@@ -53,6 +53,7 @@
      : enabled_(false),
        default_mask_(kDefaultMask),
        profile_(profile),
+       prefs_(NULL),
        registry_observer_(this) {
 // TODO(rdevlin.cronin): Remove once crbug.com/159265 is fixed.
 #if !defined(ENABLE_EXTENSIONS)
@@ -85,20 +86,43 @@
   if (!enabled_ || !Extension::IdIsValid(extension_id))
     return;
 
-  ErrorPreferenceMap::iterator pref = pref_map_.find(extension_id);
+  int mask = default_mask_;
+  // This call can fail if the preference isn't set, but we don't really care
+  // if it does, because we just use the default mask instead.
+  prefs_->ReadPrefAsInteger(extension_id, kStoreExtensionErrorsPref, &mask);
 
-  if (pref == pref_map_.end()) {
-    pref = pref_map_.insert(
-        std::pair<std::string, int32>(extension_id, default_mask_)).first;
-  }
+  if (enabled)
+    mask |= 1 << type;
+  else
+    mask &= ~(1 << type);
 
-  pref->second =
-      enabled ? pref->second | (1 << type) : pref->second &~(1 << type);
+  prefs_->UpdateExtensionPref(extension_id,
+                              kStoreExtensionErrorsPref,
+                              base::Value::CreateIntegerValue(mask));
+}
 
-  ExtensionPrefs::Get(profile_)->UpdateExtensionPref(
-      extension_id,
-      kStoreExtensionErrorsPref,
-      base::Value::CreateIntegerValue(pref->second));
+void ErrorConsole::SetReportingAllForExtension(
+    const std::string& extension_id, bool enabled) {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  if (!enabled_ || !Extension::IdIsValid(extension_id))
+    return;
+
+  int mask = 0;
+  if (enabled)
+    mask = (1 << ExtensionError::NUM_ERROR_TYPES) - 1;
+
+  prefs_->UpdateExtensionPref(extension_id,
+                              kStoreExtensionErrorsPref,
+                              base::Value::CreateIntegerValue(mask));
+}
+
+bool ErrorConsole::IsReportingEnabledForExtension(
+    const std::string& extension_id) const {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  if (!enabled_ || !Extension::IdIsValid(extension_id))
+    return false;
+
+  return GetMaskForExtension(extension_id) != 0;
 }
 
 void ErrorConsole::UseDefaultReportingForExtension(
@@ -107,11 +131,7 @@
   if (!enabled_ || !Extension::IdIsValid(extension_id))
     return;
 
-  pref_map_.erase(extension_id);
-  ExtensionPrefs::Get(profile_)->UpdateExtensionPref(
-      extension_id,
-      kStoreExtensionErrorsPref,
-      NULL);
+  prefs_->UpdateExtensionPref(extension_id, kStoreExtensionErrorsPref, NULL);
 }
 
 void ErrorConsole::ReportError(scoped_ptr<ExtensionError> error) {
@@ -119,15 +139,9 @@
   if (!enabled_ || !Extension::IdIsValid(error->extension_id()))
     return;
 
-  ErrorPreferenceMap::const_iterator pref =
-      pref_map_.find(error->extension_id());
-  // Check the mask to see if we report the error. If we don't have a specific
-  // entry, use the default mask.
-  if ((pref == pref_map_.end() &&
-          ((default_mask_ & (1 << error->type())) == 0)) ||
-      (pref != pref_map_.end() && (pref->second & (1 << error->type())) == 0)) {
+  int mask = GetMaskForExtension(error->extension_id());
+  if (!(mask & (1 << error->type())))
     return;
-  }
 
   const ExtensionError* weak_error = errors_.AddError(error.Pass());
   FOR_EACH_OBSERVER(Observer, observers_, OnErrorAdded(weak_error));
@@ -171,6 +185,11 @@
 void ErrorConsole::Enable() {
   enabled_ = true;
 
+  // We postpone the initialization of |prefs_| until now because they can be
+  // NULL in unit_tests. Any unit tests that enable the error console should
+  // also create an ExtensionPrefs object.
+  prefs_ = ExtensionPrefs::Get(profile_);
+
   notification_registrar_.Add(
       this,
       chrome::NOTIFICATION_PROFILE_DESTROYED,
@@ -184,18 +203,11 @@
       chrome::NOTIFICATION_EXTENSION_INSTALLED,
       content::Source<Profile>(profile_));
 
-  ExtensionPrefs* prefs = ExtensionPrefs::Get(profile_);
   const ExtensionSet& extensions =
       ExtensionRegistry::Get(profile_)->enabled_extensions();
   for (ExtensionSet::const_iterator iter = extensions.begin();
        iter != extensions.end();
        ++iter) {
-    int mask = 0;
-    if (prefs->ReadPrefAsInteger(iter->get()->id(),
-                                 kStoreExtensionErrorsPref,
-                                 &mask)) {
-      pref_map_[iter->get()->id()] = mask;
-    }
     AddManifestErrorsForExtension(iter->get());
   }
 }
@@ -211,7 +223,8 @@
 }
 
 void ErrorConsole::OnExtensionUnloaded(content::BrowserContext* browser_context,
-                                       const Extension* extension) {
+                                       const Extension* extension,
+                                       UnloadedExtensionInfo::Reason reason) {
   CheckEnabled();
 }
 
@@ -269,4 +282,21 @@
   }
 }
 
+int ErrorConsole::GetMaskForExtension(const std::string& extension_id) const {
+  // Registered preferences take priority over everything else.
+  int pref = 0;
+  if (prefs_->ReadPrefAsInteger(extension_id, kStoreExtensionErrorsPref, &pref))
+    return pref;
+
+  // If the extension is unpacked, we report all error types by default.
+  const Extension* extension =
+      ExtensionRegistry::Get(profile_)->GetExtensionById(
+          extension_id, ExtensionRegistry::EVERYTHING);
+  if (extension && extension->location() == Manifest::UNPACKED)
+    return (1 << ExtensionError::NUM_ERROR_TYPES) - 1;
+
+  // Otherwise, use the default mask.
+  return default_mask_;
+}
+
 }  // namespace extensions
diff --git a/chrome/browser/extensions/error_console/error_console.h b/chrome/browser/extensions/error_console/error_console.h
index f2d19eb..af2a865 100644
--- a/chrome/browser/extensions/error_console/error_console.h
+++ b/chrome/browser/extensions/error_console/error_console.h
@@ -30,8 +30,8 @@
 class Profile;
 
 namespace extensions {
-class ErrorConsoleUnitTest;
 class Extension;
+class ExtensionPrefs;
 
 // The ErrorConsole is a central object to which all extension errors are
 // reported. This includes errors detected in extensions core, as well as
@@ -65,6 +65,15 @@
                                 ExtensionError::Type type,
                                 bool enabled);
 
+  // Set whether or not errors of all types are stored for the extension with
+  // the given |extension_id|.
+  void SetReportingAllForExtension(const std::string& extension_id,
+                                           bool enabled);
+
+  // Returns true if reporting for either manifest or runtime errors is enabled
+  // for the extension with the given |extension_id|.
+  bool IsReportingEnabledForExtension(const std::string& extension_id) const;
+
   // Restore default reporting to the given extension.
   void UseDefaultReportingForExtension(const std::string& extension_id);
 
@@ -102,10 +111,6 @@
   }
 
  private:
-  // A map which stores the reporting preferences for each Extension. If there
-  // is no entry in the map, it signals that the |default_mask_| should be used.
-  typedef std::map<std::string, int32> ErrorPreferenceMap;
-
   // Checks whether or not the ErrorConsole should be enabled or disabled. If it
   // is in the wrong state, enables or disables it appropriately.
   void CheckEnabled();
@@ -126,7 +131,9 @@
   // ExtensionRegistry implementation. If the Apps Developer Tools app is
   // installed or uninstalled, we may need to turn the ErrorConsole on/off.
   virtual void OnExtensionUnloaded(content::BrowserContext* browser_context,
-                                   const Extension* extension) OVERRIDE;
+                                   const Extension* extension,
+                                   UnloadedExtensionInfo::Reason reason)
+      OVERRIDE;
   virtual void OnExtensionLoaded(content::BrowserContext* browser_context,
                                  const Extension* extension) OVERRIDE;
 
@@ -138,6 +145,9 @@
                        const content::NotificationSource& source,
                        const content::NotificationDetails& details) OVERRIDE;
 
+  // Returns the applicable bit mask of reporting preferences for the extension.
+  int GetMaskForExtension(const std::string& extension_id) const;
+
   // Whether or not the error console should record errors. This is true if
   // the user is in developer mode, and at least one of the following is true:
   // - The Chrome Apps Developer Tools are installed.
@@ -154,9 +164,6 @@
   // The errors which we have received so far.
   ErrorMap errors_;
 
-  // The mapping of Extension's error-reporting preferences.
-  ErrorPreferenceMap pref_map_;
-
   // The default mask to use if an Extension does not have specific settings.
   int32 default_mask_;
 
@@ -165,6 +172,11 @@
   // incognito fellow).
   Profile* profile_;
 
+  // The ExtensionPrefs with which the ErrorConsole is associated. This weak
+  // pointer is safe because ErrorConsole is owned by ExtensionSystem, which
+  // is dependent on ExtensionPrefs.
+  ExtensionPrefs* prefs_;
+
   content::NotificationRegistrar notification_registrar_;
   PrefChangeRegistrar pref_registrar_;
 
diff --git a/chrome/browser/extensions/error_console/error_console_browsertest.cc b/chrome/browser/extensions/error_console/error_console_browsertest.cc
index 04ef8fd..ec36d29 100644
--- a/chrome/browser/extensions/error_console/error_console_browsertest.cc
+++ b/chrome/browser/extensions/error_console/error_console_browsertest.cc
@@ -542,6 +542,8 @@
                   5u, 1u);
 }
 
+// Test that if there is an error in an HTML page loaded by an extension (most
+// common with apps), it is caught and reported by the ErrorConsole.
 IN_PROC_BROWSER_TEST_F(ErrorConsoleBrowserTest, BadExtensionPage) {
   const Extension* extension = NULL;
   LoadExtensionAndCheckErrors(
@@ -552,4 +554,41 @@
       &extension);
 }
 
+// Test that extension errors that go to chrome.runtime.lastError are caught
+// and reported by the ErrorConsole.
+IN_PROC_BROWSER_TEST_F(ErrorConsoleBrowserTest, CatchesLastError) {
+  const Extension* extension = NULL;
+  LoadExtensionAndCheckErrors(
+      "trigger_last_error",
+      kNoFlags,
+      1,  // One error, which is sent through last error when trying to remove
+          // a non-existent permisison.
+      ACTION_NONE,
+      &extension);
+
+  const ErrorList& errors =
+      error_console()->GetErrorsForExtension(extension->id());
+  ASSERT_EQ(1u, errors.size());
+
+  std::string script_url = extension->url().Resolve("background.js").spec();
+
+  CheckRuntimeError(
+      errors[0],
+      extension->id(),
+      script_url,
+      false,  // not incognito
+      "Unchecked runtime.lastError while running permissions.remove: "
+          "'foobar' is not a recognized permission.",
+      logging::LOG_ERROR,
+      extension->url().Resolve(kBackgroundPageName),
+      1u);
+
+  const StackTrace& stack_trace = GetStackTraceFromError(errors[0]);
+  ASSERT_EQ(1u, stack_trace.size());
+  CheckStackFrame(stack_trace[0],
+                  script_url,
+                  kAnonymousFunction,
+                  12u, 20u);
+}
+
 }  // namespace extensions
diff --git a/chrome/browser/extensions/error_console/error_console_unittest.cc b/chrome/browser/extensions/error_console/error_console_unittest.cc
index e8afc58..baf522b 100644
--- a/chrome/browser/extensions/error_console/error_console_unittest.cc
+++ b/chrome/browser/extensions/error_console/error_console_unittest.cc
@@ -5,6 +5,7 @@
 #include "chrome/browser/extensions/error_console/error_console.h"
 
 #include "base/logging.h"
+#include "base/memory/ref_counted.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/prefs/pref_service.h"
 #include "base/strings/string_number_conversions.h"
@@ -117,7 +118,7 @@
 
   // Unloading the Apps Developer Tools should disable error console.
   registry->RemoveEnabled(adt->id());
-  registry->TriggerOnUnloaded(adt);
+  registry->TriggerOnUnloaded(adt, UnloadedExtensionInfo::REASON_DISABLE);
   EXPECT_FALSE(error_console_->enabled());
   EXPECT_FALSE(error_console_->IsEnabledForChromeExtensionsPage());
   EXPECT_FALSE(error_console_->IsEnabledForAppsDeveloperTools());
@@ -128,6 +129,8 @@
 TEST_F(ErrorConsoleUnitTest, ReportErrors) {
   const size_t kNumTotalErrors = 6;
   const std::string kId = id_util::GenerateId("id");
+  error_console_->set_default_reporting_for_test(ExtensionError::MANIFEST_ERROR,
+                                                 true);
   ASSERT_EQ(0u, error_console_->GetErrorsForExtension(kId).size());
 
   for (size_t i = 0; i < kNumTotalErrors; ++i) {
@@ -139,9 +142,12 @@
 }
 
 TEST_F(ErrorConsoleUnitTest, DontStoreErrorsWithoutEnablingType) {
-  // Disable default runtime error reporting.
+  // Disable default runtime error reporting, and enable default manifest error
+  // reporting.
   error_console_->set_default_reporting_for_test(ExtensionError::RUNTIME_ERROR,
-                                                false);
+                                                 false);
+  error_console_->set_default_reporting_for_test(ExtensionError::MANIFEST_ERROR,
+                                                 true);
 
   const std::string kId = id_util::GenerateId("id");
 
@@ -185,4 +191,84 @@
   ASSERT_EQ(4u, error_console_->GetErrorsForExtension(kId).size());
 }
 
+// Test that we only store errors by default for unpacked extensions, and that
+// assigning a preference to any extension overrides the defaults.
+TEST_F(ErrorConsoleUnitTest, TestDefaultStoringPrefs) {
+  // For this, we need actual extensions.
+  scoped_refptr<const Extension> unpacked_extension =
+      ExtensionBuilder()
+          .SetManifest(DictionaryBuilder().Set("name", "unpacked")
+                                          .Set("version", "0.0.1")
+                                          .Set("manifest_version", 2)
+                                          .Build())
+          .SetLocation(Manifest::UNPACKED)
+          .SetID(id_util::GenerateId("unpacked"))
+          .Build();
+  scoped_refptr<const Extension> packed_extension =
+      ExtensionBuilder()
+          .SetManifest(DictionaryBuilder().Set("name", "packed")
+                                          .Set("version", "0.0.1")
+                                          .Set("manifest_version", 2)
+                                          .Build())
+          .SetLocation(Manifest::INTERNAL)
+          .SetID(id_util::GenerateId("packed"))
+          .Build();
+
+  ExtensionRegistry* registry = ExtensionRegistry::Get(profile_.get());
+  registry->AddEnabled(unpacked_extension);
+  registry->AddEnabled(packed_extension);
+
+  // We should start with a clean slate.
+  EXPECT_EQ(0u, error_console_->GetErrorsForExtension(
+      unpacked_extension->id()).size());
+  EXPECT_EQ(0u, error_console_->GetErrorsForExtension(
+      packed_extension->id()).size());
+
+  // Errors should be ignored by default for the packed extension.
+  error_console_->ReportError(
+      CreateNewManifestError(packed_extension->id(), "manifest error 1"));
+  error_console_->ReportError(
+      CreateNewRuntimeError(packed_extension->id(), "runtime error 1"));
+  EXPECT_EQ(0u, error_console_->GetErrorsForExtension(
+      packed_extension->id()).size());
+  // Also check that reporting settings are correctly returned.
+  EXPECT_FALSE(error_console_->IsReportingEnabledForExtension(
+      packed_extension->id()));
+
+  // Errors should be reported by default for the unpacked extension.
+  error_console_->ReportError(
+      CreateNewManifestError(unpacked_extension->id(), "manifest error 2"));
+  error_console_->ReportError(
+      CreateNewRuntimeError(unpacked_extension->id(), "runtime error 2"));
+  EXPECT_EQ(2u, error_console_->GetErrorsForExtension(
+      unpacked_extension->id()).size());
+  // Also check that reporting settings are correctly returned.
+  EXPECT_TRUE(error_console_->IsReportingEnabledForExtension(
+      unpacked_extension->id()));
+
+  // Registering a preference should override this for both types of extensions
+  // (should be able to enable errors for packed, or disable errors for
+  // unpacked).
+  error_console_->SetReportingForExtension(packed_extension->id(),
+                                           ExtensionError::RUNTIME_ERROR,
+                                           true);
+  error_console_->ReportError(
+      CreateNewRuntimeError(packed_extension->id(), "runtime error 3"));
+  EXPECT_EQ(1u, error_console_->GetErrorsForExtension(
+      packed_extension->id()).size());
+  EXPECT_TRUE(error_console_->IsReportingEnabledForExtension(
+      packed_extension->id()));
+
+  error_console_->SetReportingForExtension(unpacked_extension->id(),
+                                           ExtensionError::RUNTIME_ERROR,
+                                           false);
+  error_console_->ReportError(
+      CreateNewRuntimeError(packed_extension->id(), "runtime error 4"));
+  EXPECT_EQ(2u,  // We should still have the first two errors.
+            error_console_->GetErrorsForExtension(
+                unpacked_extension->id()).size());
+  EXPECT_FALSE(error_console_->IsReportingEnabledForExtension(
+      unpacked_extension->id()));
+}
+
 }  // namespace extensions
diff --git a/chrome/browser/extensions/event_router_forwarder.cc b/chrome/browser/extensions/event_router_forwarder.cc
index 92ff086..09cd54b 100644
--- a/chrome/browser/extensions/event_router_forwarder.cc
+++ b/chrome/browser/extensions/event_router_forwarder.cc
@@ -10,7 +10,6 @@
 #include "chrome/browser/profiles/profile_manager.h"
 #include "content/public/browser/browser_thread.h"
 #include "extensions/browser/event_router.h"
-#include "extensions/browser/extension_system.h"
 #include "url/gurl.h"
 
 using content::BrowserThread;
@@ -118,7 +117,7 @@
   // Extension does not exist for chromeos login.  This needs to be
   // removed once we have an extension service for login screen.
   // crosbug.com/12856.
-  if (!extensions::ExtensionSystem::Get(profile)->event_router())
+  if (!extensions::EventRouter::Get(profile))
     return;
 #endif
 
@@ -126,10 +125,10 @@
   event->restrict_to_browser_context = restrict_to_profile;
   event->event_url = event_url;
   if (extension_id.empty()) {
-    ExtensionSystem::Get(profile)->event_router()->BroadcastEvent(event.Pass());
+    extensions::EventRouter::Get(profile)->BroadcastEvent(event.Pass());
   } else {
-    ExtensionSystem::Get(profile)->event_router()->
-        DispatchEventToExtension(extension_id, event.Pass());
+    extensions::EventRouter::Get(profile)
+        ->DispatchEventToExtension(extension_id, event.Pass());
   }
 }
 
diff --git a/chrome/browser/extensions/extension_action_manager.cc b/chrome/browser/extensions/extension_action_manager.cc
index 781fd03..b479974 100644
--- a/chrome/browser/extensions/extension_action_manager.cc
+++ b/chrome/browser/extensions/extension_action_manager.cc
@@ -4,23 +4,14 @@
 
 #include "chrome/browser/extensions/extension_action_manager.h"
 
-#include "chrome/browser/chrome_notification_types.h"
-#include "chrome/browser/extensions/api/system_indicator/system_indicator_manager.h"
 #include "chrome/browser/extensions/api/system_indicator/system_indicator_manager_factory.h"
 #include "chrome/browser/extensions/extension_action.h"
 #include "chrome/browser/extensions/extension_service.h"
 #include "chrome/browser/profiles/profile.h"
-#include "chrome/common/extensions/api/extension_action/action_info.h"
-#include "chrome/common/extensions/api/extension_action/page_action_handler.h"
 #include "components/keyed_service/content/browser_context_dependency_manager.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
-#include "content/public/browser/notification_service.h"
-#include "content/public/browser/notification_source.h"
 #include "extensions/browser/extension_registry.h"
 #include "extensions/browser/extension_system.h"
 #include "extensions/browser/extensions_browser_client.h"
-#include "extensions/common/extension.h"
-#include "extensions/common/feature_switch.h"
 
 namespace extensions {
 
@@ -65,11 +56,10 @@
 }  // namespace
 
 ExtensionActionManager::ExtensionActionManager(Profile* profile)
-    : profile_(profile),
-      scoped_extension_registry_observer_(this) {
+    : profile_(profile), extension_registry_observer_(this) {
   CHECK_EQ(profile, profile->GetOriginalProfile())
       << "Don't instantiate this with an incognito profile.";
-  scoped_extension_registry_observer_.Add(ExtensionRegistry::Get(profile_));
+  extension_registry_observer_.Add(ExtensionRegistry::Get(profile_));
 }
 
 ExtensionActionManager::~ExtensionActionManager() {
@@ -82,7 +72,9 @@
 }
 
 void ExtensionActionManager::OnExtensionUnloaded(
-    content::BrowserContext* browser_context, const Extension* extension) {
+    content::BrowserContext* browser_context,
+    const Extension* extension,
+    UnloadedExtensionInfo::Reason reason) {
   page_actions_.erase(extension->id());
   browser_actions_.erase(extension->id());
   system_indicators_.erase(extension->id());
diff --git a/chrome/browser/extensions/extension_action_manager.h b/chrome/browser/extensions/extension_action_manager.h
index d8f5b91..b78e8a2 100644
--- a/chrome/browser/extensions/extension_action_manager.h
+++ b/chrome/browser/extensions/extension_action_manager.h
@@ -8,7 +8,6 @@
 #include <map>
 #include <string>
 
-#include "base/memory/linked_ptr.h"
 #include "base/scoped_observer.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "extensions/browser/extension_registry_observer.h"
@@ -45,13 +44,15 @@
  private:
   // Implement ExtensionRegistryObserver.
   virtual void OnExtensionUnloaded(content::BrowserContext* browser_context,
-                                   const Extension* extension) OVERRIDE;
+                                   const Extension* extension,
+                                   UnloadedExtensionInfo::Reason reason)
+      OVERRIDE;
 
   Profile* profile_;
 
   // Listen to extension unloaded notifications.
-  ScopedObserver<ExtensionRegistry,
-                 ExtensionRegistryObserver> scoped_extension_registry_observer_;
+  ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver>
+      extension_registry_observer_;
 
   // Keyed by Extension ID.  These maps are populated lazily when their
   // ExtensionAction is first requested, and the entries are removed when the
diff --git a/chrome/browser/extensions/extension_browsertest.cc b/chrome/browser/extensions/extension_browsertest.cc
index db16c88..aa62007 100644
--- a/chrome/browser/extensions/extension_browsertest.cc
+++ b/chrome/browser/extensions/extension_browsertest.cc
@@ -150,7 +150,7 @@
   ExtensionService* service = extensions::ExtensionSystem::Get(
       profile())->extension_service();
   {
-    observer_->Watch(chrome::NOTIFICATION_EXTENSION_LOADED,
+    observer_->Watch(chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
                      content::NotificationService::AllSources());
 
     scoped_refptr<extensions::UnpackedInstaller> installer(
@@ -196,9 +196,10 @@
     // Re-enable the extension if needed.
     if (service->extensions()->Contains(extension_id)) {
       content::WindowedNotificationObserver load_signal(
-          chrome::NOTIFICATION_EXTENSION_LOADED,
+          chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
           content::Source<Profile>(profile()));
-      // Reload the extension so that the NOTIFICATION_EXTENSION_LOADED
+      // Reload the extension so that the
+      // NOTIFICATION_EXTENSION_LOADED_DEPRECATED
       // observers may access |install_param|.
       service->ReloadExtension(extension_id);
       load_signal.Wait();
@@ -213,7 +214,7 @@
   // cases.
   {
     content::WindowedNotificationObserver load_signal(
-        chrome::NOTIFICATION_EXTENSION_LOADED,
+        chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
         content::Source<Profile>(profile()));
     CHECK(!extensions::util::IsIncognitoEnabled(extension_id, profile()));
 
@@ -227,7 +228,7 @@
 
   {
     content::WindowedNotificationObserver load_signal(
-        chrome::NOTIFICATION_EXTENSION_LOADED,
+        chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
         content::Source<Profile>(profile()));
     CHECK(extensions::util::AllowFileAccess(extension_id, profile()));
     if (!(flags & kFlagEnableFileAccess)) {
@@ -504,8 +505,8 @@
 }
 
 void ExtensionBrowserTest::ReloadExtension(const std::string extension_id) {
-  observer_->Watch(chrome::NOTIFICATION_EXTENSION_LOADED,
-                content::NotificationService::AllSources());
+  observer_->Watch(chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
+                   content::NotificationService::AllSources());
 
   ExtensionService* service =
       extensions::ExtensionSystem::Get(profile())->extension_service();
@@ -615,3 +616,10 @@
   return extensions::browsertest_util::ExecuteScriptInBackgroundPage(
       profile(), extension_id, script);
 }
+
+bool ExtensionBrowserTest::ExecuteScriptInBackgroundPageNoWait(
+    const std::string& extension_id,
+    const std::string& script) {
+  return extensions::browsertest_util::ExecuteScriptInBackgroundPageNoWait(
+      profile(), extension_id, script);
+}
diff --git a/chrome/browser/extensions/extension_browsertest.h b/chrome/browser/extensions/extension_browsertest.h
index d8f19e9..0302dce 100644
--- a/chrome/browser/extensions/extension_browsertest.h
+++ b/chrome/browser/extensions/extension_browsertest.h
@@ -288,6 +288,12 @@
   std::string ExecuteScriptInBackgroundPage(const std::string& extension_id,
                                             const std::string& script);
 
+  // Returns
+  // extensions::browsertest_util::ExecuteScriptInBackgroundPageNoWait(
+  // profile(), extension_id, script).
+  bool ExecuteScriptInBackgroundPageNoWait(const std::string& extension_id,
+                                           const std::string& script);
+
   bool loaded_;
   bool installed_;
 
diff --git a/chrome/browser/extensions/extension_disabled_ui.cc b/chrome/browser/extensions/extension_disabled_ui.cc
index b264adb..8626b11 100644
--- a/chrome/browser/extensions/extension_disabled_ui.cc
+++ b/chrome/browser/extensions/extension_disabled_ui.cc
@@ -209,7 +209,8 @@
             skia::ImageOperations::RESIZE_BEST,
             gfx::Size(kIconSize, kIconSize)));
   }
-  registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
+  registrar_.Add(this,
+                 chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
                  content::Source<Profile>(service->profile()));
   registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_REMOVED,
                  content::Source<Profile>(service->profile()));
@@ -316,7 +317,7 @@
     const content::NotificationSource& source,
     const content::NotificationDetails& details) {
   // The error is invalidated if the extension has been loaded or removed.
-  DCHECK(type == chrome::NOTIFICATION_EXTENSION_LOADED ||
+  DCHECK(type == chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED ||
          type == chrome::NOTIFICATION_EXTENSION_REMOVED);
   const Extension* extension = content::Details<const Extension>(details).ptr();
   if (extension != extension_)
@@ -324,7 +325,7 @@
   GlobalErrorServiceFactory::GetForProfile(service_->profile())->
       RemoveGlobalError(this);
 
-  if (type == chrome::NOTIFICATION_EXTENSION_LOADED)
+  if (type == chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED)
     user_response_ = REENABLE;
   else if (type == chrome::NOTIFICATION_EXTENSION_REMOVED)
     user_response_ = UNINSTALL;
diff --git a/chrome/browser/extensions/extension_error_controller.cc b/chrome/browser/extensions/extension_error_controller.cc
index 4c3d3a2..8ae3154 100644
--- a/chrome/browser/extensions/extension_error_controller.cc
+++ b/chrome/browser/extensions/extension_error_controller.cc
@@ -31,7 +31,9 @@
 void ExtensionErrorController::ShowErrorIfNeeded() {
   IdentifyAlertableExtensions();
 
-  if (!blacklisted_extensions_.is_empty()) {
+  // Make sure there's something to show, and that there isn't currently a
+  // bubble displaying.
+  if (!blacklisted_extensions_.is_empty() && !error_ui_.get()) {
     if (!is_first_run_) {
       error_ui_.reset(g_create_ui(this));
       if (!error_ui_->ShowErrorInBubbleView())  // Couldn't find a browser.
@@ -84,6 +86,7 @@
     prefs->AcknowledgeBlacklistedExtension((*iter)->id());
   }
 
+  blacklisted_extensions_.Clear();
   error_ui_.reset();
 }
 
@@ -91,6 +94,10 @@
   ExtensionRegistry* registry = ExtensionRegistry::Get(browser_context_);
   ExtensionPrefs* prefs = ExtensionPrefs::Get(browser_context_);
 
+  // This should be clear, but in case a bubble crashed somewhere along the
+  // line, let's make sure we start fresh.
+  blacklisted_extensions_.Clear();
+
   // Build up the lists of extensions that require acknowledgment. If this is
   // the first time, grandfather extensions that would have caused
   // notification.
diff --git a/chrome/browser/extensions/extension_functional_browsertest.cc b/chrome/browser/extensions/extension_functional_browsertest.cc
index cf54b50..21500d1 100644
--- a/chrome/browser/extensions/extension_functional_browsertest.cc
+++ b/chrome/browser/extensions/extension_functional_browsertest.cc
@@ -24,7 +24,7 @@
     base::FilePath path = test_data_dir_.AppendASCII(filename);
 
     content::WindowedNotificationObserver extension_loaded_observer(
-        chrome::NOTIFICATION_EXTENSION_LOADED,
+        chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
         content::NotificationService::AllSources());
 
     scoped_refptr<extensions::CrxInstaller> installer(
diff --git a/chrome/browser/extensions/extension_garbage_collector.cc b/chrome/browser/extensions/extension_garbage_collector.cc
index ab899c3..9ed6405 100644
--- a/chrome/browser/extensions/extension_garbage_collector.cc
+++ b/chrome/browser/extensions/extension_garbage_collector.cc
@@ -14,8 +14,10 @@
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/time/time.h"
+#include "chrome/browser/extensions/extension_garbage_collector_factory.h"
 #include "chrome/browser/extensions/extension_service.h"
 #include "chrome/browser/extensions/extension_util.h"
+#include "chrome/browser/extensions/install_tracker.h"
 #include "chrome/browser/extensions/pending_extension_manager.h"
 #include "chrome/common/extensions/manifest_handlers/app_isolation_info.h"
 #include "content/public/browser/browser_context.h"
@@ -41,14 +43,12 @@
 typedef std::multimap<std::string, base::FilePath> ExtensionPathsMultimap;
 
 void CheckExtensionDirectory(const base::FilePath& path,
-                             const ExtensionPathsMultimap& extension_paths,
-                             bool clean_temp_dir) {
+                             const ExtensionPathsMultimap& extension_paths) {
   base::FilePath basename = path.BaseName();
   // Clean up temporary files left if Chrome crashed or quit in the middle
   // of an extension install.
   if (basename.value() == file_util::kTempDirectoryName) {
-    if (clean_temp_dir)
-      base::DeleteFile(path, true);  // Recursive.
+    base::DeleteFile(path, true);  // Recursive.
     return;
   }
 
@@ -97,8 +97,7 @@
 
 void GarbageCollectExtensionsOnFileThread(
     const base::FilePath& install_directory,
-    const ExtensionPathsMultimap& extension_paths,
-    bool clean_temp_dir) {
+    const ExtensionPathsMultimap& extension_paths) {
   DCHECK(!content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
 
   // Nothing to clean up if it doesn't exist.
@@ -112,18 +111,15 @@
   for (base::FilePath extension_path = enumerator.Next();
        !extension_path.empty();
        extension_path = enumerator.Next()) {
-    CheckExtensionDirectory(extension_path, extension_paths, clean_temp_dir);
+    CheckExtensionDirectory(extension_path, extension_paths);
   }
 }
 
 }  // namespace
 
 ExtensionGarbageCollector::ExtensionGarbageCollector(
-    ExtensionService* extension_service)
-    : extension_service_(extension_service),
-      context_(extension_service->GetBrowserContext()),
-      install_directory_(extension_service->install_directory()),
-      weak_factory_(this) {
+    content::BrowserContext* context)
+    : context_(context), crx_installs_in_progress_(0), weak_factory_(this) {
 #if defined(OS_CHROMEOS)
   disable_garbage_collection_ = false;
 #endif
@@ -142,10 +138,22 @@
       base::Bind(
           &ExtensionGarbageCollector::GarbageCollectIsolatedStorageIfNeeded,
           weak_factory_.GetWeakPtr()));
+
+  InstallTracker::Get(context_)->AddObserver(this);
 }
 
 ExtensionGarbageCollector::~ExtensionGarbageCollector() {}
 
+// static
+ExtensionGarbageCollector* ExtensionGarbageCollector::Get(
+    content::BrowserContext* context) {
+  return ExtensionGarbageCollectorFactory::GetForBrowserContext(context);
+}
+
+void ExtensionGarbageCollector::Shutdown() {
+  InstallTracker::Get(context_)->RemoveObserver(this);
+}
+
 void ExtensionGarbageCollector::GarbageCollectExtensionsForTest() {
   GarbageCollectExtensions();
 }
@@ -164,18 +172,16 @@
   if (extension_prefs->pref_service()->ReadOnly())
     return;
 
-  bool clean_temp_dir = true;
-
-  if (extension_service_->pending_extension_manager()->HasPendingExtensions()) {
-    // Don't garbage collect temp dir while there are pending installations,
+  if (crx_installs_in_progress_ > 0) {
+    // Don't garbage collect while there are installations in progress,
     // which may be using the temporary installation directory. Try to garbage
     // collect again later.
-    clean_temp_dir = false;
     base::MessageLoop::current()->PostDelayedTask(
         FROM_HERE,
         base::Bind(&ExtensionGarbageCollector::GarbageCollectExtensions,
                    weak_factory_.GetWeakPtr()),
         base::TimeDelta::FromSeconds(kGarbageCollectRetryDelayInSeconds));
+    return;
   }
 
   scoped_ptr<ExtensionPrefs::ExtensionsInfo> info(
@@ -192,13 +198,13 @@
         std::make_pair(info->at(i)->extension_id, info->at(i)->extension_path));
   }
 
-  if (!extension_service_->GetFileTaskRunner()->PostTask(
+  ExtensionService* service =
+      ExtensionSystem::Get(context_)->extension_service();
+  if (!service->GetFileTaskRunner()->PostTask(
           FROM_HERE,
-          base::Bind(
-              &GarbageCollectExtensionsOnFileThread,
-              install_directory_,
-              extension_paths,
-              clean_temp_dir))) {
+          base::Bind(&GarbageCollectExtensionsOnFileThread,
+                     service->install_directory(),
+                     extension_paths))) {
     NOTREACHED();
   }
 }
@@ -241,12 +247,34 @@
     }
   }
 
-  extension_service_->OnGarbageCollectIsolatedStorageStart();
+  ExtensionService* service =
+      ExtensionSystem::Get(context_)->extension_service();
+  service->OnGarbageCollectIsolatedStorageStart();
   content::BrowserContext::GarbageCollectStoragePartitions(
       context_,
       active_paths.Pass(),
       base::Bind(&ExtensionService::OnGarbageCollectIsolatedStorageFinished,
-                 extension_service_->AsWeakPtr()));
+                 service->AsWeakPtr()));
+}
+
+void ExtensionGarbageCollector::OnBeginCrxInstall(
+    const std::string& extension_id) {
+  crx_installs_in_progress_++;
+}
+
+void ExtensionGarbageCollector::OnFinishCrxInstall(
+    const std::string& extension_id,
+    bool success) {
+  crx_installs_in_progress_--;
+  if (crx_installs_in_progress_ < 0) {
+    // This can only happen if there is a mismatch in our begin/finish
+    // accounting.
+    NOTREACHED();
+
+    // Don't let the count go negative to avoid garbage collecting when
+    // an install is actually in progress.
+    crx_installs_in_progress_ = 0;
+  }
 }
 
 }  // namespace extensions
diff --git a/chrome/browser/extensions/extension_garbage_collector.h b/chrome/browser/extensions/extension_garbage_collector.h
index d1e5225..a6a7699 100644
--- a/chrome/browser/extensions/extension_garbage_collector.h
+++ b/chrome/browser/extensions/extension_garbage_collector.h
@@ -10,6 +10,8 @@
 
 #include "base/files/file_path.h"
 #include "base/memory/weak_ptr.h"
+#include "chrome/browser/extensions/install_observer.h"
+#include "components/keyed_service/core/keyed_service.h"
 
 namespace content {
 class BrowserContext;
@@ -24,10 +26,12 @@
 // The class is owned by ExtensionService, but is mostly independent. Tasks to
 // garbage collect extensions and isolated storage are posted once the
 // ExtensionSystem signals ready.
-class ExtensionGarbageCollector {
+class ExtensionGarbageCollector : public KeyedService, public InstallObserver {
  public:
-  explicit ExtensionGarbageCollector(ExtensionService* extension_service);
-  ~ExtensionGarbageCollector();
+  explicit ExtensionGarbageCollector(content::BrowserContext* context);
+  virtual ~ExtensionGarbageCollector();
+
+  static ExtensionGarbageCollector* Get(content::BrowserContext* context);
 
 #if defined(OS_CHROMEOS)
   // Enable or disable garbage collection. See |disable_garbage_collection_|.
@@ -38,6 +42,14 @@
   // Manually trigger GarbageCollectExtensions() for testing.
   void GarbageCollectExtensionsForTest();
 
+  // Overriddes for KeyedService:
+  virtual void Shutdown() OVERRIDE;
+
+  // Overriddes for InstallObserver
+  virtual void OnBeginCrxInstall(const std::string& extension_id) OVERRIDE;
+  virtual void OnFinishCrxInstall(const std::string& extension_id,
+                                  bool success) OVERRIDE;
+
  private:
   // Cleans up the extension install directory. It can end up with garbage in it
   // if extensions can't initially be removed when they are uninstalled (eg if a
@@ -53,16 +65,9 @@
   // for ephemeral apps, because they can outlive their cache lifetimes.
   void GarbageCollectIsolatedStorageIfNeeded();
 
-  // The ExtensionService which owns this GarbageCollector.
-  ExtensionService* extension_service_;
-
-  // The BrowserContext associated with the GarbageCollector, for convenience.
-  // (This is equivalent to extension_service_->GetBrowserContext().)
+  // The BrowserContext associated with the GarbageCollector.
   content::BrowserContext* context_;
 
-  // The root extensions installation directory.
-  base::FilePath install_directory_;
-
 #if defined(OS_CHROMEOS)
   // TODO(rkc): HACK alert - this is only in place to allow the
   // kiosk_mode_screensaver to prevent its extension from getting garbage
@@ -71,6 +76,10 @@
   bool disable_garbage_collection_;
 #endif
 
+  // The number of currently ongoing CRX installations. This is used to prevent
+  // garbage collection from running while a CRX is being installed.
+  int crx_installs_in_progress_;
+
   // Generate weak pointers for safely posting to the file thread for garbage
   // collection.
   base::WeakPtrFactory<ExtensionGarbageCollector> weak_factory_;
diff --git a/chrome/browser/extensions/extension_garbage_collector_factory.cc b/chrome/browser/extensions/extension_garbage_collector_factory.cc
new file mode 100644
index 0000000..e75a961
--- /dev/null
+++ b/chrome/browser/extensions/extension_garbage_collector_factory.cc
@@ -0,0 +1,60 @@
+// 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.
+
+#include "chrome/browser/extensions/extension_garbage_collector_factory.h"
+
+#include "base/memory/singleton.h"
+#include "chrome/browser/extensions/extension_garbage_collector.h"
+#include "chrome/browser/extensions/extension_system_factory.h"
+#include "chrome/browser/extensions/install_tracker_factory.h"
+#include "components/keyed_service/content/browser_context_dependency_manager.h"
+#include "extensions/browser/extensions_browser_client.h"
+
+namespace extensions {
+
+// static
+ExtensionGarbageCollector*
+ExtensionGarbageCollectorFactory::GetForBrowserContext(
+    content::BrowserContext* context) {
+  return static_cast<ExtensionGarbageCollector*>(
+      GetInstance()->GetServiceForBrowserContext(context, true));
+}
+
+// static
+ExtensionGarbageCollectorFactory*
+ExtensionGarbageCollectorFactory::GetInstance() {
+  return Singleton<ExtensionGarbageCollectorFactory>::get();
+}
+
+ExtensionGarbageCollectorFactory::ExtensionGarbageCollectorFactory()
+    : BrowserContextKeyedServiceFactory(
+          "ExtensionGarbageCollector",
+          BrowserContextDependencyManager::GetInstance()) {
+  DependsOn(ExtensionsBrowserClient::Get()->GetExtensionSystemFactory());
+  DependsOn(InstallTrackerFactory::GetInstance());
+}
+
+ExtensionGarbageCollectorFactory::~ExtensionGarbageCollectorFactory() {}
+
+// static
+KeyedService* ExtensionGarbageCollectorFactory::BuildInstanceFor(
+    content::BrowserContext* context) {
+  return new ExtensionGarbageCollector(context);
+}
+
+KeyedService* ExtensionGarbageCollectorFactory::BuildServiceInstanceFor(
+    content::BrowserContext* context) const {
+  return BuildInstanceFor(context);
+}
+
+bool ExtensionGarbageCollectorFactory::ServiceIsCreatedWithBrowserContext()
+    const {
+  return true;
+}
+
+bool ExtensionGarbageCollectorFactory::ServiceIsNULLWhileTesting() const {
+  return true;
+}
+
+}  // namespace extensions
diff --git a/chrome/browser/extensions/extension_garbage_collector_factory.h b/chrome/browser/extensions/extension_garbage_collector_factory.h
new file mode 100644
index 0000000..f1ce77d
--- /dev/null
+++ b/chrome/browser/extensions/extension_garbage_collector_factory.h
@@ -0,0 +1,47 @@
+// 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.
+
+#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_GARBAGE_COLLECTOR_FACTORY_H_
+#define CHROME_BROWSER_EXTENSIONS_EXTENSION_GARBAGE_COLLECTOR_FACTORY_H_
+
+#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+
+template <typename T>
+struct DefaultSingletonTraits;
+
+class Profile;
+
+namespace extensions {
+
+class ExtensionGarbageCollector;
+
+class ExtensionGarbageCollectorFactory
+    : public BrowserContextKeyedServiceFactory {
+ public:
+  static ExtensionGarbageCollector* GetForBrowserContext(
+      content::BrowserContext* context);
+
+  static ExtensionGarbageCollectorFactory* GetInstance();
+
+  static KeyedService* BuildInstanceFor(content::BrowserContext* profile);
+
+ private:
+  friend struct DefaultSingletonTraits<ExtensionGarbageCollectorFactory>;
+
+  ExtensionGarbageCollectorFactory();
+  virtual ~ExtensionGarbageCollectorFactory();
+
+  // BrowserContextKeyedServiceFactory overrides:
+  virtual KeyedService* BuildServiceInstanceFor(
+      content::BrowserContext* context) const OVERRIDE;
+
+  virtual bool ServiceIsCreatedWithBrowserContext() const OVERRIDE;
+  virtual bool ServiceIsNULLWhileTesting() const OVERRIDE;
+
+  DISALLOW_COPY_AND_ASSIGN(ExtensionGarbageCollectorFactory);
+};
+
+}  // namespace extensions
+
+#endif  // CHROME_BROWSER_EXTENSIONS_EXTENSION_GARBAGE_COLLECTOR_FACTORY_H_
diff --git a/chrome/browser/extensions/extension_garbage_collector_unittest.cc b/chrome/browser/extensions/extension_garbage_collector_unittest.cc
index 0e305a1..25e9f16 100644
--- a/chrome/browser/extensions/extension_garbage_collector_unittest.cc
+++ b/chrome/browser/extensions/extension_garbage_collector_unittest.cc
@@ -10,6 +10,7 @@
 #include "base/values.h"
 #include "chrome/browser/extensions/extension_garbage_collector.h"
 #include "chrome/browser/extensions/extension_service_unittest.h"
+#include "chrome/browser/extensions/install_tracker.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/common/chrome_constants.h"
 #include "chrome/test/base/testing_profile.h"
@@ -47,14 +48,14 @@
   // ExtensionGarbageCollector's constructor. But, as the test won't wait for
   // the delayed task to be called, we have to call it manually instead.
   void GarbageCollectExtensions() {
-    service_->garbage_collector()->GarbageCollectExtensionsForTest();
+    ExtensionGarbageCollector::Get(profile_.get())
+        ->GarbageCollectExtensionsForTest();
     // Wait for GarbageCollectExtensions task to complete.
     content::BrowserThread::GetBlockingPool()->FlushForTesting();
   }
 };
 
-// Test that partially deleted extensions are cleaned up during startup
-// Test loading bad extensions from the profile directory.
+// Test that partially deleted extensions are cleaned up during startup.
 TEST_F(ExtensionGarbageCollectorUnitTest, CleanupOnStartup) {
   const std::string kExtensionId = "behllobkkfkfnphdnhnkndlbkcpglgmj";
 
@@ -89,6 +90,43 @@
   ASSERT_FALSE(base::PathExists(extension_dir));
 }
 
+// Test that garbage collection doesn't delete anything while a crx is being
+// installed.
+TEST_F(ExtensionGarbageCollectorUnitTest, NoCleanupDuringInstall) {
+  const std::string kExtensionId = "behllobkkfkfnphdnhnkndlbkcpglgmj";
+
+  InitPluginService();
+  InitializeGoodInstalledExtensionService();
+  InitFileTaskRunner();
+
+  // Simulate that one of them got partially deleted by clearing its pref.
+  {
+    DictionaryPrefUpdate update(profile_->GetPrefs(), "extensions.settings");
+    base::DictionaryValue* dict = update.Get();
+    ASSERT_TRUE(dict != NULL);
+    dict->Remove(kExtensionId, NULL);
+  }
+
+  service_->Init();
+
+  // Simulate a CRX installation.
+  InstallTracker::Get(profile_.get())->OnBeginCrxInstall(kExtensionId);
+
+  GarbageCollectExtensions();
+
+  // extension1 dir should still exist.
+  base::FilePath extension_dir =
+      extensions_install_dir_.AppendASCII(kExtensionId);
+  ASSERT_TRUE(base::PathExists(extension_dir));
+
+  // Finish CRX installation and re-run garbage collection.
+  InstallTracker::Get(profile_.get())->OnFinishCrxInstall(kExtensionId, false);
+  GarbageCollectExtensions();
+
+  // extension1 dir should be gone
+  ASSERT_FALSE(base::PathExists(extension_dir));
+}
+
 // Test that GarbageCollectExtensions deletes the right versions of an
 // extension.
 TEST_F(ExtensionGarbageCollectorUnitTest, GarbageCollectWithPendingUpdates) {
diff --git a/chrome/browser/extensions/extension_gcm_app_handler.cc b/chrome/browser/extensions/extension_gcm_app_handler.cc
index e0b2545..879a351 100644
--- a/chrome/browser/extensions/extension_gcm_app_handler.cc
+++ b/chrome/browser/extensions/extension_gcm_app_handler.cc
@@ -44,14 +44,9 @@
 
 ExtensionGCMAppHandler::ExtensionGCMAppHandler(content::BrowserContext* context)
     : profile_(Profile::FromBrowserContext(context)),
+      extension_registry_observer_(this),
       weak_factory_(this) {
-  // Listen to various extension related notifications.
-  registrar_.Add(this,
-                 chrome::NOTIFICATION_EXTENSION_LOADED,
-                 content::Source<Profile>(profile_));
-  registrar_.Add(this,
-                 chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
-                 content::Source<Profile>(profile_));
+  extension_registry_observer_.Add(ExtensionRegistry::Get(profile_));
   registrar_.Add(this,
                  chrome::NOTIFICATION_EXTENSION_UNINSTALLED,
                  content::Source<Profile>(profile_));
@@ -100,38 +95,34 @@
 #endif
 }
 
+void ExtensionGCMAppHandler::OnExtensionLoaded(
+    content::BrowserContext* browser_context,
+    const Extension* extension) {
+  if (IsGCMPermissionEnabled(extension))
+    GetGCMProfileService()->AddAppHandler(extension->id(), this);
+}
+
+void ExtensionGCMAppHandler::OnExtensionUnloaded(
+    content::BrowserContext* browser_context,
+    const Extension* extension,
+    UnloadedExtensionInfo::Reason reason) {
+  if (IsGCMPermissionEnabled(extension))
+    GetGCMProfileService()->RemoveAppHandler(extension->id());
+}
+
 void ExtensionGCMAppHandler::Observe(
     int type,
     const content::NotificationSource& source,
     const content::NotificationDetails& details) {
-  switch (type) {
-    case chrome:: NOTIFICATION_EXTENSION_LOADED: {
-      const Extension* extension = content::Details<Extension>(details).ptr();
-      if (IsGCMPermissionEnabled(extension))
-        GetGCMProfileService()->AddAppHandler(extension->id(), this);
-      break;
-    }
-    case chrome:: NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED: {
-      const Extension* extension =
-          content::Details<UnloadedExtensionInfo>(details)->extension;
-      if (IsGCMPermissionEnabled(extension))
-        GetGCMProfileService()->RemoveAppHandler(extension->id());
-      break;
-    }
-    case chrome:: NOTIFICATION_EXTENSION_UNINSTALLED: {
-      const Extension* extension = content::Details<Extension>(details).ptr();
-      if (IsGCMPermissionEnabled(extension)) {
-        GetGCMProfileService()->Unregister(
-            extension->id(),
-            base::Bind(&ExtensionGCMAppHandler::OnUnregisterCompleted,
-                       weak_factory_.GetWeakPtr(),
-                       extension->id()));
-        GetGCMProfileService()->RemoveAppHandler(extension->id());
-      }
-      break;
-    }
-    default:
-      NOTREACHED();
+  DCHECK_EQ(chrome::NOTIFICATION_EXTENSION_UNINSTALLED, type);
+  const Extension* extension = content::Details<Extension>(details).ptr();
+  if (IsGCMPermissionEnabled(extension)) {
+    GetGCMProfileService()->Unregister(
+        extension->id(),
+        base::Bind(&ExtensionGCMAppHandler::OnUnregisterCompleted,
+                   weak_factory_.GetWeakPtr(),
+                   extension->id()));
+    GetGCMProfileService()->RemoveAppHandler(extension->id());
   }
 }
 
diff --git a/chrome/browser/extensions/extension_gcm_app_handler.h b/chrome/browser/extensions/extension_gcm_app_handler.h
index c1fac2d..8e90ddf 100644
--- a/chrome/browser/extensions/extension_gcm_app_handler.h
+++ b/chrome/browser/extensions/extension_gcm_app_handler.h
@@ -7,10 +7,12 @@
 
 #include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/scoped_observer.h"
 #include "chrome/browser/services/gcm/gcm_app_handler.h"
 #include "content/public/browser/notification_observer.h"
 #include "content/public/browser/notification_registrar.h"
 #include "extensions/browser/browser_context_keyed_api_factory.h"
+#include "extensions/browser/extension_registry_observer.h"
 #include "google_apis/gcm/gcm_client.h"
 
 class Profile;
@@ -23,12 +25,14 @@
 
 namespace extensions {
 
+class ExtensionRegistry;
 class GcmJsEventRouter;
 
 // Defines the interface to provide handling logic for a given app.
 class ExtensionGCMAppHandler : public gcm::GCMAppHandler,
                                public BrowserContextKeyedAPI,
-                               public content::NotificationObserver {
+                               public content::NotificationObserver,
+                               public ExtensionRegistryObserver {
  public:
   explicit ExtensionGCMAppHandler(content::BrowserContext* context);
   virtual ~ExtensionGCMAppHandler();
@@ -59,6 +63,14 @@
                        const content::NotificationSource& source,
                        const content::NotificationDetails& details) OVERRIDE;
 
+  // ExtensionRegistryObserver implementation.
+  virtual void OnExtensionLoaded(content::BrowserContext* browser_context,
+                                 const Extension* extension) OVERRIDE;
+  virtual void OnExtensionUnloaded(
+      content::BrowserContext* browser_context,
+      const Extension* extension,
+      UnloadedExtensionInfo::Reason reason) OVERRIDE;
+
   gcm::GCMProfileService* GetGCMProfileService() const;
 
   // BrowserContextKeyedAPI implementation.
@@ -68,6 +80,10 @@
   Profile* profile_;
   content::NotificationRegistrar registrar_;
 
+  // Listen to extension load, unloaded notifications.
+  ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver>
+      extension_registry_observer_;
+
 #if !defined(OS_ANDROID)
   scoped_ptr<extensions::GcmJsEventRouter> js_event_router_;
 #endif
diff --git a/chrome/browser/extensions/extension_infobar_delegate.cc b/chrome/browser/extensions/extension_infobar_delegate.cc
index 44096ca..1411b0a 100644
--- a/chrome/browser/extensions/extension_infobar_delegate.cc
+++ b/chrome/browser/extensions/extension_infobar_delegate.cc
@@ -7,10 +7,10 @@
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/extensions/extension_view_host.h"
 #include "chrome/browser/extensions/extension_view_host_factory.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/browser.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/notification_details.h"
 #include "content/public/browser/notification_source.h"
 #include "extensions/common/extension.h"
@@ -36,7 +36,7 @@
     const GURL& url,
     content::WebContents* web_contents,
     int height)
-    : InfoBarDelegate(),
+    : infobars::InfoBarDelegate(),
 #if defined(TOOLKIT_VIEWS)
       browser_(browser),
 #endif
@@ -52,9 +52,9 @@
                  content::Source<Profile>(browser->profile()));
 
   height_ = std::max(0, height);
-  height_ = std::min(2 * InfoBar::kDefaultBarTargetHeight, height_);
+  height_ = std::min(2 * infobars::InfoBar::kDefaultBarTargetHeight, height_);
   if (height_ == 0)
-    height_ = InfoBar::kDefaultBarTargetHeight;
+    height_ = infobars::InfoBar::kDefaultBarTargetHeight;
 }
 
 content::WebContents* ExtensionInfoBarDelegate::GetWebContents() {
@@ -64,7 +64,8 @@
 // ExtensionInfoBarDelegate::CreateInfoBar() is implemented in platform-specific
 // files.
 
-bool ExtensionInfoBarDelegate::EqualsDelegate(InfoBarDelegate* delegate) const {
+bool ExtensionInfoBarDelegate::EqualsDelegate(
+    infobars::InfoBarDelegate* delegate) const {
   ExtensionInfoBarDelegate* extension_delegate =
       delegate->AsExtensionInfoBarDelegate();
   // When an extension crashes, an InfoBar is shown (for the crashed extension).
@@ -84,7 +85,8 @@
   closing_ = true;
 }
 
-InfoBarDelegate::Type ExtensionInfoBarDelegate::GetInfoBarType() const {
+infobars::InfoBarDelegate::Type ExtensionInfoBarDelegate::GetInfoBarType()
+    const {
   return PAGE_ACTION_TYPE;
 }
 
diff --git a/chrome/browser/extensions/extension_infobar_delegate.h b/chrome/browser/extensions/extension_infobar_delegate.h
index 5d8488c..81f92b8 100644
--- a/chrome/browser/extensions/extension_infobar_delegate.h
+++ b/chrome/browser/extensions/extension_infobar_delegate.h
@@ -24,7 +24,7 @@
 
 // The InfobarDelegate for creating and managing state for the ExtensionInfobar
 // plus monitor when the extension goes away.
-class ExtensionInfoBarDelegate : public InfoBarDelegate,
+class ExtensionInfoBarDelegate : public infobars::InfoBarDelegate,
                                  public content::NotificationObserver {
  public:
   virtual ~ExtensionInfoBarDelegate();
@@ -56,11 +56,12 @@
                            int height);
 
   // Returns an extension infobar that owns |delegate|.
-  static scoped_ptr<InfoBar> CreateInfoBar(
+  static scoped_ptr<infobars::InfoBar> CreateInfoBar(
       scoped_ptr<ExtensionInfoBarDelegate> delegate);
 
   // InfoBarDelegate:
-  virtual bool EqualsDelegate(InfoBarDelegate* delegate) const OVERRIDE;
+  virtual bool EqualsDelegate(
+      infobars::InfoBarDelegate* delegate) const OVERRIDE;
   virtual void InfoBarDismissed() OVERRIDE;
   virtual Type GetInfoBarType() const OVERRIDE;
   virtual ExtensionInfoBarDelegate* AsExtensionInfoBarDelegate() OVERRIDE;
diff --git a/chrome/browser/extensions/extension_install_prompt.h b/chrome/browser/extensions/extension_install_prompt.h
index 85ab0f6..4de8186 100644
--- a/chrome/browser/extensions/extension_install_prompt.h
+++ b/chrome/browser/extensions/extension_install_prompt.h
@@ -25,7 +25,6 @@
 
 class Browser;
 class ExtensionInstallUI;
-class InfoBarDelegate;
 class Profile;
 
 namespace base {
@@ -46,6 +45,10 @@
 class PermissionSet;
 }  // namespace extensions
 
+namespace infobars {
+class InfoBarDelegate;
+}
+
 // Displays all the UI around extension installation.
 class ExtensionInstallPrompt
     : public OAuth2MintTokenFlow::Delegate,
diff --git a/chrome/browser/extensions/extension_install_ui_browsertest.cc b/chrome/browser/extensions/extension_install_ui_browsertest.cc
index ca70ad8..a59254a 100644
--- a/chrome/browser/extensions/extension_install_ui_browsertest.cc
+++ b/chrome/browser/extensions/extension_install_ui_browsertest.cc
@@ -9,7 +9,6 @@
 #include "chrome/browser/extensions/extension_browsertest.h"
 #include "chrome/browser/extensions/extension_service.h"
 #include "chrome/browser/infobars/confirm_infobar_delegate.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/themes/theme_service.h"
@@ -22,6 +21,7 @@
 #include "chrome/common/url_constants.h"
 #include "chrome/test/base/test_switches.h"
 #include "chrome/test/base/ui_test_utils.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/test/browser_test_utils.h"
 #include "extensions/browser/app_sorting.h"
diff --git a/chrome/browser/extensions/extension_keybinding_registry.cc b/chrome/browser/extensions/extension_keybinding_registry.cc
index e4f08c3..d372e13 100644
--- a/chrome/browser/extensions/extension_keybinding_registry.cc
+++ b/chrome/browser/extensions/extension_keybinding_registry.cc
@@ -12,6 +12,7 @@
 #include "chrome/common/extensions/command.h"
 #include "content/public/browser/browser_context.h"
 #include "extensions/browser/event_router.h"
+#include "extensions/browser/extension_registry.h"
 #include "extensions/browser/extension_system.h"
 #include "extensions/common/extension_set.h"
 #include "extensions/common/manifest_constants.h"
@@ -22,21 +23,19 @@
     content::BrowserContext* context,
     ExtensionFilter extension_filter,
     Delegate* delegate)
-    : profile_(Profile::FromBrowserContext(context)),
+    : browser_context_(context),
       extension_filter_(extension_filter),
-      delegate_(delegate) {
-  registrar_.Add(this,
-                 chrome::NOTIFICATION_EXTENSION_LOADED,
-                 content::Source<Profile>(profile_->GetOriginalProfile()));
-  registrar_.Add(this,
-                 chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
-                 content::Source<Profile>(profile_->GetOriginalProfile()));
+      delegate_(delegate),
+      extension_registry_observer_(this) {
+  extension_registry_observer_.Add(ExtensionRegistry::Get(browser_context_));
+
+  Profile* profile = Profile::FromBrowserContext(browser_context_);
   registrar_.Add(this,
                  chrome::NOTIFICATION_EXTENSION_COMMAND_ADDED,
-                 content::Source<Profile>(profile_->GetOriginalProfile()));
+                 content::Source<Profile>(profile->GetOriginalProfile()));
   registrar_.Add(this,
                  chrome::NOTIFICATION_EXTENSION_COMMAND_REMOVED,
-                 content::Source<Profile>(profile_->GetOriginalProfile()));
+                 content::Source<Profile>(profile->GetOriginalProfile()));
 }
 
 ExtensionKeybindingRegistry::~ExtensionKeybindingRegistry() {
@@ -73,7 +72,7 @@
 
 void ExtensionKeybindingRegistry::Init() {
   ExtensionService* service =
-      extensions::ExtensionSystem::Get(profile_)->extension_service();
+      ExtensionSystem::Get(browser_context_)->extension_service();
   if (!service)
     return;  // ExtensionService can be null during testing.
 
@@ -98,7 +97,7 @@
 void ExtensionKeybindingRegistry::CommandExecuted(
     const std::string& extension_id, const std::string& command) {
   ExtensionService* service =
-      ExtensionSystem::Get(profile_)->extension_service();
+      ExtensionSystem::Get(browser_context_)->extension_service();
 
   const Extension* extension = service->extensions()->GetByID(extension_id);
   if (!extension)
@@ -117,10 +116,10 @@
   args->Append(new base::StringValue(command));
 
   scoped_ptr<Event> event(new Event("commands.onCommand", args.Pass()));
-  event->restrict_to_browser_context = profile_;
+  event->restrict_to_browser_context = browser_context_;
   event->user_gesture = EventRouter::USER_GESTURE_ENABLED;
-  ExtensionSystem::Get(profile_)->event_router()->
-      DispatchEventToExtension(extension_id, event.Pass());
+  EventRouter::Get(browser_context_)
+      ->DispatchEventToExtension(extension_id, event.Pass());
 }
 
 bool ExtensionKeybindingRegistry::IsAcceleratorRegistered(
@@ -165,34 +164,36 @@
   ExecuteCommands(accelerator, extension_id);
 }
 
+void ExtensionKeybindingRegistry::OnExtensionLoaded(
+    content::BrowserContext* browser_context,
+    const Extension* extension) {
+  if (ExtensionMatchesFilter(extension))
+    AddExtensionKeybinding(extension, std::string());
+}
+
+void ExtensionKeybindingRegistry::OnExtensionUnloaded(
+    content::BrowserContext* browser_context,
+    const Extension* extension,
+    UnloadedExtensionInfo::Reason reason) {
+  if (ExtensionMatchesFilter(extension))
+    RemoveExtensionKeybinding(extension, std::string());
+}
+
 void ExtensionKeybindingRegistry::Observe(
     int type,
     const content::NotificationSource& source,
     const content::NotificationDetails& details) {
   switch (type) {
-    case chrome::NOTIFICATION_EXTENSION_LOADED: {
-      const extensions::Extension* extension =
-          content::Details<const extensions::Extension>(details).ptr();
-      if (ExtensionMatchesFilter(extension))
-        AddExtensionKeybinding(extension, std::string());
-      break;
-    }
-    case chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED: {
-      const extensions::Extension* extension =
-          content::Details<UnloadedExtensionInfo>(details)->extension;
-      if (ExtensionMatchesFilter(extension))
-        RemoveExtensionKeybinding(extension, std::string());
-      break;
-    }
     case chrome::NOTIFICATION_EXTENSION_COMMAND_ADDED:
     case chrome::NOTIFICATION_EXTENSION_COMMAND_REMOVED: {
       std::pair<const std::string, const std::string>* payload =
           content::Details<std::pair<const std::string, const std::string> >(
               details).ptr();
 
-      const extensions::Extension* extension =
-          ExtensionSystem::Get(profile_)->extension_service()->
-              extensions()->GetByID(payload->first);
+      const Extension* extension = ExtensionSystem::Get(browser_context_)
+                                       ->extension_service()
+                                       ->extensions()
+                                       ->GetByID(payload->first);
       // During install and uninstall the extension won't be found. We'll catch
       // those events above, with the LOADED/UNLOADED, so we ignore this event.
       if (!extension)
diff --git a/chrome/browser/extensions/extension_keybinding_registry.h b/chrome/browser/extensions/extension_keybinding_registry.h
index 5c4cc50..1fb656c 100644
--- a/chrome/browser/extensions/extension_keybinding_registry.h
+++ b/chrome/browser/extensions/extension_keybinding_registry.h
@@ -10,12 +10,12 @@
 #include <string>
 
 #include "base/compiler_specific.h"
+#include "base/scoped_observer.h"
 #include "content/public/browser/notification_details.h"
 #include "content/public/browser/notification_observer.h"
 #include "content/public/browser/notification_registrar.h"
 #include "content/public/browser/notification_source.h"
-
-class Profile;
+#include "extensions/browser/extension_registry_observer.h"
 
 namespace content {
 class BrowserContext;
@@ -29,11 +29,13 @@
 
 class ActiveTabPermissionGranter;
 class Extension;
+class ExtensionRegistry;
 
 // The ExtensionKeybindingRegistry is a class that handles the cross-platform
 // logic for keyboard accelerators. See platform-specific implementations for
 // implementation details for each platform.
-class ExtensionKeybindingRegistry : public content::NotificationObserver {
+class ExtensionKeybindingRegistry : public content::NotificationObserver,
+                                    public ExtensionRegistryObserver {
  public:
   enum ExtensionFilter {
     ALL_EXTENSIONS,
@@ -64,11 +66,6 @@
   void ExecuteCommand(const std::string& extension_id,
                       const ui::Accelerator& accelerator);
 
-  // Overridden from content::NotificationObserver:
-  virtual void Observe(int type,
-                       const content::NotificationSource& source,
-                       const content::NotificationDetails& details) OVERRIDE;
-
  protected:
   // Add extension keybinding for the events defined by the |extension|.
   // |command_name| is optional, but if not blank then only the command
@@ -125,6 +122,19 @@
   bool IsEventTargetsEmpty() const;
 
  private:
+  // Overridden from content::NotificationObserver:
+  virtual void Observe(int type,
+                       const content::NotificationSource& source,
+                       const content::NotificationDetails& details) OVERRIDE;
+
+  // ExtensionRegistryObserver implementation.
+  virtual void OnExtensionLoaded(content::BrowserContext* browser_context,
+                                 const Extension* extension) OVERRIDE;
+  virtual void OnExtensionUnloaded(
+      content::BrowserContext* browser_context,
+      const Extension* extension,
+      UnloadedExtensionInfo::Reason reason) OVERRIDE;
+
   // Returns true if the |extension| matches our extension filter.
   bool ExtensionMatchesFilter(const extensions::Extension* extension);
 
@@ -138,8 +148,7 @@
   // The content notification registrar for listening to extension events.
   content::NotificationRegistrar registrar_;
 
-  // Weak pointer to our profile. Not owned by us.
-  Profile* profile_;
+  content::BrowserContext* browser_context_;
 
   // What extensions to register keybindings for.
   ExtensionFilter extension_filter_;
@@ -158,6 +167,10 @@
   typedef std::map<ui::Accelerator, TargetList> EventTargets;
   EventTargets event_targets_;
 
+  // Listen to extension load, unloaded notifications.
+  ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver>
+      extension_registry_observer_;
+
   DISALLOW_COPY_AND_ASSIGN(ExtensionKeybindingRegistry);
 };
 
diff --git a/chrome/browser/extensions/extension_messages_apitest.cc b/chrome/browser/extensions/extension_messages_apitest.cc
index 047e232..cc14174 100644
--- a/chrome/browser/extensions/extension_messages_apitest.cc
+++ b/chrome/browser/extensions/extension_messages_apitest.cc
@@ -72,8 +72,8 @@
   virtual void Observe(int type,
                        const content::NotificationSource& source,
                        const content::NotificationDetails& details) OVERRIDE {
-    EventRouter* event_router = ExtensionSystem::Get(
-        content::Source<Profile>(source).ptr())->event_router();
+    EventRouter* event_router =
+        EventRouter::Get(content::Source<Profile>(source).ptr());
 
     // Sends four messages to the extension. All but the third message sent
     // from the origin http://b.com/ are supposed to arrive.
diff --git a/chrome/browser/extensions/extension_notification_observer.cc b/chrome/browser/extensions/extension_notification_observer.cc
index b5ab0f3..11133c5 100644
--- a/chrome/browser/extensions/extension_notification_observer.cc
+++ b/chrome/browser/extensions/extension_notification_observer.cc
@@ -34,7 +34,8 @@
     content::NotificationSource source,
     const std::set<std::string>& extension_ids)
     : extension_ids_(extension_ids) {
-  registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED, source);
+  registrar_.Add(
+      this, chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED, source);
   registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_INSTALLED, source);
   registrar_.Add(
       this, chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED, source);
@@ -102,7 +103,7 @@
       break;
     }
 
-    case chrome::NOTIFICATION_EXTENSION_LOADED: {
+    case chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED: {
       const Extension* extension =
           content::Details<const Extension>(details).ptr();
       if (extension_ids_.count(extension->id()))
diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc
index 559c848..4ef8413 100644
--- a/chrome/browser/extensions/extension_service.cc
+++ b/chrome/browser/extensions/extension_service.cc
@@ -8,23 +8,14 @@
 #include <iterator>
 #include <set>
 
-#include "base/basictypes.h"
-#include "base/bind.h"
-#include "base/callback.h"
 #include "base/command_line.h"
-#include "base/file_util.h"
-#include "base/logging.h"
 #include "base/metrics/histogram.h"
-#include "base/prefs/pref_service.h"
-#include "base/stl_util.h"
 #include "base/strings/string_number_conversions.h"
-#include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/threading/sequenced_worker_pool.h"
 #include "base/threading/thread_restrictions.h"
 #include "base/time/time.h"
-#include "base/version.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/extensions/api/extension_action/extension_action_api.h"
@@ -34,7 +25,6 @@
 #include "chrome/browser/extensions/extension_disabled_ui.h"
 #include "chrome/browser/extensions/extension_error_controller.h"
 #include "chrome/browser/extensions/extension_error_reporter.h"
-#include "chrome/browser/extensions/extension_garbage_collector.h"
 #include "chrome/browser/extensions/extension_install_ui.h"
 #include "chrome/browser/extensions/extension_special_storage_policy.h"
 #include "chrome/browser/extensions/extension_sync_service.h"
@@ -62,46 +52,23 @@
 #include "chrome/common/pref_names.h"
 #include "chrome/common/url_constants.h"
 #include "components/startup_metric_utils/startup_metric_utils.h"
-#include "content/public/browser/browser_thread.h"
-#include "content/public/browser/devtools_agent_host.h"
 #include "content/public/browser/notification_service.h"
-#include "content/public/browser/notification_types.h"
 #include "content/public/browser/render_process_host.h"
 #include "content/public/browser/storage_partition.h"
-#include "content/public/browser/url_data_source.h"
-#include "extensions/browser/app_sorting.h"
 #include "extensions/browser/event_router.h"
 #include "extensions/browser/extension_host.h"
 #include "extensions/browser/extension_registry.h"
 #include "extensions/browser/extension_system.h"
-#include "extensions/browser/extensions_browser_client.h"
-#include "extensions/browser/external_provider_interface.h"
-#include "extensions/browser/management_policy.h"
 #include "extensions/browser/pref_names.h"
-#include "extensions/browser/process_manager.h"
-#include "extensions/browser/process_map.h"
 #include "extensions/browser/runtime_data.h"
 #include "extensions/browser/update_observer.h"
-#include "extensions/common/constants.h"
-#include "extensions/common/error_utils.h"
-#include "extensions/common/extension.h"
 #include "extensions/common/extension_messages.h"
-#include "extensions/common/extensions_client.h"
 #include "extensions/common/feature_switch.h"
 #include "extensions/common/file_util.h"
-#include "extensions/common/manifest.h"
 #include "extensions/common/manifest_constants.h"
 #include "extensions/common/manifest_handlers/background_info.h"
-#include "extensions/common/manifest_handlers/incognito_info.h"
-#include "extensions/common/manifest_handlers/shared_module_info.h"
 #include "extensions/common/permissions/permission_message_provider.h"
 #include "extensions/common/permissions/permissions_data.h"
-#include "grit/generated_resources.h"
-#include "net/base/registry_controlled_domains/registry_controlled_domain.h"
-#include "ui/base/webui/web_ui_util.h"
-#include "url/gurl.h"
-#include "webkit/browser/database/database_tracker.h"
-#include "webkit/browser/database/database_util.h"
 
 #if defined(OS_CHROMEOS)
 #include "chrome/browser/chromeos/extensions/install_limiter.h"
@@ -319,7 +286,6 @@
       browser_terminating_(false),
       installs_delayed_for_gc_(false),
       is_first_run_(false),
-      garbage_collector_(new extensions::ExtensionGarbageCollector(this)),
       shared_module_service_(new extensions::SharedModuleService(profile_)) {
   CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
 
@@ -537,7 +503,6 @@
 bool ExtensionService::UpdateExtension(const std::string& id,
                                        const base::FilePath& extension_path,
                                        bool file_ownership_passed,
-                                       const GURL& download_url,
                                        CrxInstaller** out_crx_installer) {
   CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
   if (browser_terminating_) {
@@ -617,7 +582,6 @@
   installer->set_creation_flags(creation_flags);
 
   installer->set_delete_source(file_ownership_passed);
-  installer->set_download_url(download_url);
   installer->set_install_cause(extension_misc::INSTALL_CAUSE_UPDATE);
   installer->InstallCrx(extension_path);
 
@@ -1020,12 +984,13 @@
   //
   // NOTE: It is important that this happen after notifying the renderers about
   // the new extensions so that if we navigate to an extension URL in
-  // ExtensionRegistryObserver::OnLoaded or NOTIFICATION_EXTENSION_LOADED, the
+  // ExtensionRegistryObserver::OnLoaded or
+  // NOTIFICATION_EXTENSION_LOADED_DEPRECATED, the
   // renderer is guaranteed to know about it.
   registry_->TriggerOnLoaded(extension);
 
   content::NotificationService::current()->Notify(
-      chrome::NOTIFICATION_EXTENSION_LOADED,
+      chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
       content::Source<Profile>(profile_),
       content::Details<const Extension>(extension));
 
@@ -1069,9 +1034,10 @@
 void ExtensionService::NotifyExtensionUnloaded(
     const Extension* extension,
     UnloadedExtensionInfo::Reason reason) {
-  registry_->TriggerOnUnloaded(extension);
-
   UnloadedExtensionInfo details(extension, reason);
+
+  registry_->TriggerOnUnloaded(extension, reason);
+
   content::NotificationService::current()->Notify(
       chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
       content::Source<Profile>(profile_),
@@ -2002,6 +1968,11 @@
   UnloadExtension(extension->id(), UnloadedExtensionInfo::REASON_TERMINATE);
 }
 
+void ExtensionService::TerminateExtension(const std::string& extension_id) {
+  const Extension* extension = GetInstalledExtension(extension_id);
+  TrackTerminatedExtension(extension);
+}
+
 void ExtensionService::UntrackTerminatedExtension(const std::string& id) {
   std::string lowercase_id = StringToLowerASCII(id);
   const Extension* extension =
diff --git a/chrome/browser/extensions/extension_service.h b/chrome/browser/extensions/extension_service.h
index e5319df..09a8795 100644
--- a/chrome/browser/extensions/extension_service.h
+++ b/chrome/browser/extensions/extension_service.h
@@ -49,7 +49,6 @@
 class CrxInstaller;
 class ExtensionActionStorageManager;
 class ExtensionErrorController;
-class ExtensionGarbageCollector;
 class ExtensionRegistry;
 class ExtensionSystem;
 class ExtensionToolbarModel;
@@ -85,7 +84,6 @@
       const std::string& id,
       const base::FilePath& path,
       bool file_ownership_passed,
-      const GURL& download_url,
       extensions::CrxInstaller** out_crx_installer) = 0;
   virtual const extensions::Extension* GetExtensionById(
       const std::string& id,
@@ -191,7 +189,6 @@
       const std::string& id,
       const base::FilePath& extension_path,
       bool file_ownership_passed,
-      const GURL& download_url,
       extensions::CrxInstaller** out_crx_installer) OVERRIDE;
 
   // Reloads the specified extension, sending the onLaunched() event to it if it
@@ -437,6 +434,11 @@
   static void RecordPermissionMessagesHistogram(
       const extensions::Extension* e, const char* histogram);
 
+  // Unloads the given extension and mark the extension as terminated. This
+  // doesn't notify the user that the extension was terminated, if such a
+  // notification is desired the calling code is responsible for doing that.
+  void TerminateExtension(const std::string& extension_id);
+
 #if defined(UNIT_TEST)
   void TrackTerminatedExtensionForTest(const extensions::Extension* extension) {
     TrackTerminatedExtension(extension);
@@ -449,10 +451,6 @@
 
   base::WeakPtr<ExtensionService> AsWeakPtr() { return base::AsWeakPtr(this); }
 
-  extensions::ExtensionGarbageCollector* garbage_collector() {
-    return garbage_collector_.get();
-  }
-
   bool browser_terminating() const { return browser_terminating_; }
 
   extensions::SharedModuleService* shared_module_service() {
@@ -693,10 +691,6 @@
   scoped_ptr<extensions::ManagementPolicy::Provider>
       shared_module_policy_provider_;
 
-  // The ExtensionGarbageCollector to clean up all the garbage that leaks into
-  // the extensions directory.
-  scoped_ptr<extensions::ExtensionGarbageCollector> garbage_collector_;
-
   // The SharedModuleService used to check for import dependencies.
   scoped_ptr<extensions::SharedModuleService> shared_module_service_;
 
diff --git a/chrome/browser/extensions/extension_service_unittest.cc b/chrome/browser/extensions/extension_service_unittest.cc
index 1a081a0..bbbff27 100644
--- a/chrome/browser/extensions/extension_service_unittest.cc
+++ b/chrome/browser/extensions/extension_service_unittest.cc
@@ -40,6 +40,7 @@
 #include "chrome/browser/extensions/extension_creator.h"
 #include "chrome/browser/extensions/extension_error_reporter.h"
 #include "chrome/browser/extensions/extension_error_ui.h"
+#include "chrome/browser/extensions/extension_garbage_collector_factory.h"
 #include "chrome/browser/extensions/extension_notification_observer.h"
 #include "chrome/browser/extensions/extension_service.h"
 #include "chrome/browser/extensions/extension_special_storage_policy.h"
@@ -493,6 +494,10 @@
   extensions_install_dir_ = params.extensions_install_dir;
   expected_extensions_count_ = 0;
   registry_ = extensions::ExtensionRegistry::Get(profile_.get());
+  extensions::ExtensionGarbageCollectorFactory::GetInstance()
+      ->SetTestingFactoryAndUse(
+          profile_.get(),
+          &extensions::ExtensionGarbageCollectorFactory::BuildInstanceFor);
 }
 
 // static
@@ -665,7 +670,8 @@
         was_update_(false),
         override_external_install_prompt_(
             FeatureSwitch::prompt_for_external_extensions(), false) {
-    registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
+    registrar_.Add(this,
+                   chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
                    content::NotificationService::AllSources());
     registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
                    content::NotificationService::AllSources());
@@ -677,7 +683,7 @@
                        const content::NotificationSource& source,
                        const content::NotificationDetails& details) OVERRIDE {
     switch (type) {
-      case chrome::NOTIFICATION_EXTENSION_LOADED: {
+      case chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED: {
         const Extension* extension =
             content::Details<const Extension>(details).ptr();
         loaded_.push_back(make_scoped_refptr(extension));
@@ -975,7 +981,7 @@
     content::WindowedNotificationObserver observer(
         chrome::NOTIFICATION_CRX_INSTALLER_DONE,
         base::Bind(&IsCrxInstallerDone, &installer));
-    service_->UpdateExtension(id, path, true, GURL(), &installer);
+    service_->UpdateExtension(id, path, true, &installer);
 
     if (installer)
       observer.Wait();
@@ -2783,7 +2789,7 @@
 
   // Update should fail and extension should not be updated.
   path = data_dir_.AppendASCII("good2.crx");
-  bool updated = service_->UpdateExtension(good_crx, path, true, GURL(), NULL);
+  bool updated = service_->UpdateExtension(good_crx, path, true, NULL);
   ASSERT_FALSE(updated);
   ASSERT_EQ("1.0.0.0",
             service_->GetExtensionById(good_crx, false)->
diff --git a/chrome/browser/extensions/extension_startup_browsertest.cc b/chrome/browser/extensions/extension_startup_browsertest.cc
index 16c949e..03ee7c3 100644
--- a/chrome/browser/extensions/extension_startup_browsertest.cc
+++ b/chrome/browser/extensions/extension_startup_browsertest.cc
@@ -61,8 +61,8 @@
               "%s/%s/",
               chrome_prefs::internals::kSettingsEnforcementTrialName,
               chrome_prefs::internals::kSettingsEnforcementGroupNoEnforcement));
-#if defined(OFFICIAL_BUILD)
-      // In official builds, it is not possible to disable settings
+#if defined(OFFICIAL_BUILD) && defined(OS_WIN)
+      // In Windows official builds, it is not possible to disable settings
       // authentication.
       unauthenticated_load_allowed_ = false;
 #endif
diff --git a/chrome/browser/extensions/extension_storage_monitor.cc b/chrome/browser/extensions/extension_storage_monitor.cc
index a5ddf47..ae42ee6 100644
--- a/chrome/browser/extensions/extension_storage_monitor.cc
+++ b/chrome/browser/extensions/extension_storage_monitor.cc
@@ -223,7 +223,8 @@
 
 void ExtensionStorageMonitor::OnExtensionUnloaded(
     content::BrowserContext* browser_context,
-    const Extension* extension) {
+    const Extension* extension,
+    UnloadedExtensionInfo::Reason reason) {
   DCHECK(extension);
   StopMonitoringStorage(extension->id());
 }
diff --git a/chrome/browser/extensions/extension_storage_monitor.h b/chrome/browser/extensions/extension_storage_monitor.h
index 42cb8ed..245f6ed 100644
--- a/chrome/browser/extensions/extension_storage_monitor.h
+++ b/chrome/browser/extensions/extension_storage_monitor.h
@@ -54,7 +54,9 @@
   virtual void OnExtensionLoaded(content::BrowserContext* browser_context,
                                  const Extension* extension) OVERRIDE;
   virtual void OnExtensionUnloaded(content::BrowserContext* browser_context,
-                                   const Extension* extension) OVERRIDE;
+                                   const Extension* extension,
+                                   UnloadedExtensionInfo::Reason reason)
+      OVERRIDE;
 
   std::string GetNotificationId(const std::string& extension_id);
 
diff --git a/chrome/browser/extensions/extension_test_notification_observer.cc b/chrome/browser/extensions/extension_test_notification_observer.cc
index c081e64..9844642 100644
--- a/chrome/browser/extensions/extension_test_notification_observer.cc
+++ b/chrome/browser/extensions/extension_test_notification_observer.cc
@@ -198,7 +198,7 @@
 }
 
 void ExtensionTestNotificationObserver::WaitForExtensionLoad() {
-  WaitForNotification(chrome::NOTIFICATION_EXTENSION_LOADED);
+  WaitForNotification(chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED);
 }
 
 void ExtensionTestNotificationObserver::WaitForExtensionAndViewLoad() {
@@ -253,37 +253,37 @@
     const content::NotificationSource& source,
     const content::NotificationDetails& details) {
   switch (type) {
-  case chrome::NOTIFICATION_EXTENSION_LOADED:
+    case chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED:
       last_loaded_extension_id_ =
         content::Details<const Extension>(details).ptr()->id();
       VLOG(1) << "Got EXTENSION_LOADED notification.";
       break;
 
-  case chrome::NOTIFICATION_CRX_INSTALLER_DONE:
-    VLOG(1) << "Got CRX_INSTALLER_DONE notification.";
-    {
-        const Extension* extension =
-          content::Details<const Extension>(details).ptr();
-        if (extension)
-          last_loaded_extension_id_ = extension->id();
-        else
-          last_loaded_extension_id_.clear();
-    }
-    ++crx_installers_done_observed_;
-    break;
+    case chrome::NOTIFICATION_CRX_INSTALLER_DONE:
+      VLOG(1) << "Got CRX_INSTALLER_DONE notification.";
+      {
+          const Extension* extension =
+            content::Details<const Extension>(details).ptr();
+          if (extension)
+            last_loaded_extension_id_ = extension->id();
+          else
+            last_loaded_extension_id_.clear();
+      }
+      ++crx_installers_done_observed_;
+      break;
 
-  case chrome::NOTIFICATION_EXTENSION_INSTALLED:
-    VLOG(1) << "Got EXTENSION_INSTALLED notification.";
-    ++extension_installs_observed_;
-    break;
+    case chrome::NOTIFICATION_EXTENSION_INSTALLED:
+      VLOG(1) << "Got EXTENSION_INSTALLED notification.";
+      ++extension_installs_observed_;
+      break;
 
-  case chrome::NOTIFICATION_EXTENSION_LOAD_ERROR:
-    VLOG(1) << "Got EXTENSION_LOAD_ERROR notification.";
-    ++extension_load_errors_observed_;
-    break;
+    case chrome::NOTIFICATION_EXTENSION_LOAD_ERROR:
+      VLOG(1) << "Got EXTENSION_LOAD_ERROR notification.";
+      ++extension_load_errors_observed_;
+      break;
 
-  default:
-    NOTREACHED();
-    break;
+    default:
+      NOTREACHED();
+      break;
   }
 }
diff --git a/chrome/browser/extensions/extension_toolbar_model.cc b/chrome/browser/extensions/extension_toolbar_model.cc
index 878a23d..74e8280 100644
--- a/chrome/browser/extensions/extension_toolbar_model.cc
+++ b/chrome/browser/extensions/extension_toolbar_model.cc
@@ -48,7 +48,8 @@
       extensions_initialized_(false),
       is_highlighting_(false),
       weak_ptr_factory_(this) {
-  registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
+  registrar_.Add(this,
+                 chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
                  content::Source<Profile>(profile_));
   registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
                  content::Source<Profile>(profile_));
@@ -204,7 +205,7 @@
   } else {
     extension = content::Details<const Extension>(details).ptr();
   }
-  if (type == chrome::NOTIFICATION_EXTENSION_LOADED) {
+  if (type == chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED) {
     // We don't want to add the same extension twice. It may have already been
     // added by EXTENSION_BROWSER_ACTION_VISIBILITY_CHANGED below, if the user
     // hides the browser action and then disables and enables the extension.
diff --git a/chrome/browser/extensions/extension_warning_service.cc b/chrome/browser/extensions/extension_warning_service.cc
index 17284e5..ab929a2 100644
--- a/chrome/browser/extensions/extension_warning_service.cc
+++ b/chrome/browser/extensions/extension_warning_service.cc
@@ -4,28 +4,23 @@
 
 #include "chrome/browser/extensions/extension_warning_service.h"
 
-#include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/browser_process.h"
-#include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/extensions/extension_service.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_manager.h"
 #include "content/public/browser/browser_thread.h"
-#include "content/public/browser/notification_service.h"
 #include "extensions/browser/extension_registry.h"
 #include "extensions/browser/extension_system.h"
-#include "extensions/common/extension.h"
 
 using content::BrowserThread;
 
 namespace extensions {
 
 ExtensionWarningService::ExtensionWarningService(Profile* profile)
-    : profile_(profile),
-      scoped_extension_registry_observer_(this) {
+    : profile_(profile), extension_registry_observer_(this) {
   DCHECK(CalledOnValidThread());
   if (profile_) {
-    scoped_extension_registry_observer_.Add(
+    extension_registry_observer_.Add(
         ExtensionRegistry::Get(profile_->GetOriginalProfile()));
   }
 }
@@ -122,7 +117,9 @@
 }
 
 void ExtensionWarningService::OnExtensionUnloaded(
-    content::BrowserContext* browser_context, const Extension* extension) {
+    content::BrowserContext* browser_context,
+    const Extension* extension,
+    UnloadedExtensionInfo::Reason reason) {
   // Unloading one extension might have solved the problems of others.
   // Therefore, we clear warnings of this type for all extensions.
   std::set<ExtensionWarning::WarningType> warning_types =
diff --git a/chrome/browser/extensions/extension_warning_service.h b/chrome/browser/extensions/extension_warning_service.h
index 99755ef..c311859 100644
--- a/chrome/browser/extensions/extension_warning_service.h
+++ b/chrome/browser/extensions/extension_warning_service.h
@@ -75,7 +75,9 @@
 
   // ExtensionRegistryObserver implementation.
   virtual void OnExtensionUnloaded(content::BrowserContext* browser_context,
-                                   const Extension* extension) OVERRIDE;
+                                   const Extension* extension,
+                                   UnloadedExtensionInfo::Reason reason)
+      OVERRIDE;
 
   // Currently existing warnings.
   ExtensionWarningSet warnings_;
@@ -83,8 +85,8 @@
   Profile* profile_;
 
   // Listen to extension unloaded notifications.
-  ScopedObserver<ExtensionRegistry,
-                 ExtensionRegistryObserver> scoped_extension_registry_observer_;
+  ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver>
+      extension_registry_observer_;
 
   ObserverList<Observer> observer_list_;
 };
diff --git a/chrome/browser/extensions/extension_warning_set.cc b/chrome/browser/extensions/extension_warning_set.cc
index a68f9cd..f57d230 100644
--- a/chrome/browser/extensions/extension_warning_set.cc
+++ b/chrome/browser/extensions/extension_warning_set.cc
@@ -177,6 +177,16 @@
       message_parameters);
 }
 
+// static
+ExtensionWarning ExtensionWarning::CreateReloadTooFrequentWarning(
+    const std::string& extension_id) {
+  std::vector<std::string> message_parameters;
+  return ExtensionWarning(kReloadTooFrequent,
+                          extension_id,
+                          IDS_EXTENSION_WARNING_RELOAD_TOO_FREQUENT,
+                          message_parameters);
+}
+
 std::string ExtensionWarning::GetLocalizedMessage(
     const ExtensionSet* extensions) const {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
diff --git a/chrome/browser/extensions/extension_warning_set.h b/chrome/browser/extensions/extension_warning_set.h
index c064664..2d7d034 100644
--- a/chrome/browser/extensions/extension_warning_set.h
+++ b/chrome/browser/extensions/extension_warning_set.h
@@ -44,6 +44,7 @@
     // The extension failed to determine the filename of a download because
     // another extension with higher precedence determined a different filename.
     kDownloadFilenameConflict,
+    kReloadTooFrequent,
     kMaxWarningType
   };
 
@@ -81,6 +82,8 @@
       const std::string& winning_extension_id,
       const base::FilePath& losing_filename,
       const base::FilePath& winning_filename);
+  static ExtensionWarning CreateReloadTooFrequentWarning(
+      const std::string& extension_id);
 
   // Returns the specific warning type.
   WarningType warning_type() const { return type_; }
diff --git a/chrome/browser/extensions/extension_web_ui.cc b/chrome/browser/extensions/extension_web_ui.cc
index 2510e45..9ee2e90 100644
--- a/chrome/browser/extensions/extension_web_ui.cc
+++ b/chrome/browser/extensions/extension_web_ui.cc
@@ -89,8 +89,8 @@
 void RunFaviconCallbackAsync(
     const FaviconService::FaviconResultsCallback& callback,
     const gfx::Image& image) {
-  std::vector<chrome::FaviconBitmapResult>* favicon_bitmap_results =
-      new std::vector<chrome::FaviconBitmapResult>();
+  std::vector<favicon_base::FaviconBitmapResult>* favicon_bitmap_results =
+      new std::vector<favicon_base::FaviconBitmapResult>();
 
   const std::vector<gfx::ImageSkiaRep>& image_reps =
       image.AsImageSkia().image_reps();
@@ -101,12 +101,12 @@
     if (gfx::PNGCodec::EncodeBGRASkBitmap(image_rep.sk_bitmap(),
                                           false,
                                           &bitmap_data->data())) {
-      chrome::FaviconBitmapResult bitmap_result;
+      favicon_base::FaviconBitmapResult bitmap_result;
       bitmap_result.bitmap_data = bitmap_data;
       bitmap_result.pixel_size = gfx::Size(image_rep.pixel_width(),
                                             image_rep.pixel_height());
       // Leave |bitmap_result|'s icon URL as the default of GURL().
-      bitmap_result.icon_type = chrome::FAVICON;
+      bitmap_result.icon_type = favicon_base::FAVICON;
 
       favicon_bitmap_results->push_back(bitmap_result);
     } else {
diff --git a/chrome/browser/extensions/extension_web_ui_override_registrar.cc b/chrome/browser/extensions/extension_web_ui_override_registrar.cc
index 97acdef..a0ffd99 100644
--- a/chrome/browser/extensions/extension_web_ui_override_registrar.cc
+++ b/chrome/browser/extensions/extension_web_ui_override_registrar.cc
@@ -5,44 +5,36 @@
 #include "chrome/browser/extensions/extension_web_ui_override_registrar.h"
 
 #include "base/lazy_instance.h"
-#include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/extensions/extension_web_ui.h"
 #include "chrome/browser/profiles/profile.h"
-#include "content/public/browser/notification_details.h"
-#include "content/public/browser/notification_service.h"
+#include "extensions/browser/extension_registry.h"
 
 namespace extensions {
 
 ExtensionWebUIOverrideRegistrar::ExtensionWebUIOverrideRegistrar(
     content::BrowserContext* context)
-    : profile_(Profile::FromBrowserContext(context)) {
-  registrar_.Add(this,
-                 chrome::NOTIFICATION_EXTENSION_LOADED,
-                 content::Source<Profile>(profile_));
-  registrar_.Add(this,
-                 chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
-                 content::Source<Profile>(profile_));
+    : extension_registry_observer_(this) {
+  extension_registry_observer_.Add(ExtensionRegistry::Get(context));
 }
 
 ExtensionWebUIOverrideRegistrar::~ExtensionWebUIOverrideRegistrar() {
 }
 
-void ExtensionWebUIOverrideRegistrar::Observe(
-    int type,
-    const content::NotificationSource& source,
-    const content::NotificationDetails& details) {
-  if (type == chrome::NOTIFICATION_EXTENSION_LOADED) {
-    const Extension* extension =
-        content::Details<const Extension>(details).ptr();
-    ExtensionWebUI::RegisterChromeURLOverrides(
-        profile_, URLOverrides::GetChromeURLOverrides(extension));
+void ExtensionWebUIOverrideRegistrar::OnExtensionLoaded(
+    content::BrowserContext* browser_context,
+    const Extension* extension) {
+  ExtensionWebUI::RegisterChromeURLOverrides(
+      Profile::FromBrowserContext(browser_context),
+      URLOverrides::GetChromeURLOverrides(extension));
+}
 
-  } else if (type == chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED) {
-    const Extension* extension =
-        content::Details<UnloadedExtensionInfo>(details)->extension;
-    ExtensionWebUI::UnregisterChromeURLOverrides(
-        profile_, URLOverrides::GetChromeURLOverrides(extension));
-  }
+void ExtensionWebUIOverrideRegistrar::OnExtensionUnloaded(
+    content::BrowserContext* browser_context,
+    const Extension* extension,
+    UnloadedExtensionInfo::Reason reason) {
+  ExtensionWebUI::UnregisterChromeURLOverrides(
+      Profile::FromBrowserContext(browser_context),
+      URLOverrides::GetChromeURLOverrides(extension));
 }
 
 static base::LazyInstance<
diff --git a/chrome/browser/extensions/extension_web_ui_override_registrar.h b/chrome/browser/extensions/extension_web_ui_override_registrar.h
index 6b02ac1..4c3344e 100644
--- a/chrome/browser/extensions/extension_web_ui_override_registrar.h
+++ b/chrome/browser/extensions/extension_web_ui_override_registrar.h
@@ -6,20 +6,19 @@
 #define CHROME_BROWSER_EXTENSIONS_EXTENSION_WEB_UI_OVERRIDE_REGISTRAR_H_
 
 #include "base/basictypes.h"
-#include "content/public/browser/notification_observer.h"
-#include "content/public/browser/notification_registrar.h"
+#include "base/scoped_observer.h"
 #include "extensions/browser/browser_context_keyed_api_factory.h"
-
-class Profile;
+#include "extensions/browser/extension_registry_observer.h"
 
 namespace content {
 class BrowserContext;
 }
 
 namespace extensions {
+class ExtensionRegistry;
 
 class ExtensionWebUIOverrideRegistrar : public BrowserContextKeyedAPI,
-                                        public content::NotificationObserver {
+                                        public ExtensionRegistryObserver {
  public:
   explicit ExtensionWebUIOverrideRegistrar(content::BrowserContext* context);
   virtual ~ExtensionWebUIOverrideRegistrar();
@@ -28,21 +27,25 @@
   static BrowserContextKeyedAPIFactory<ExtensionWebUIOverrideRegistrar>*
       GetFactoryInstance();
 
-  // content::NotificationObserver implementation.
-  virtual void Observe(int type,
-                       const content::NotificationSource& source,
-                       const content::NotificationDetails& details) OVERRIDE;
-
  private:
   friend class BrowserContextKeyedAPIFactory<ExtensionWebUIOverrideRegistrar>;
 
+  // ExtensionRegistryObserver implementation.
+  virtual void OnExtensionLoaded(content::BrowserContext* browser_context,
+                                 const Extension* extension) OVERRIDE;
+  virtual void OnExtensionUnloaded(
+      content::BrowserContext* browser_context,
+      const Extension* extension,
+      UnloadedExtensionInfo::Reason reason) OVERRIDE;
+
   // BrowserContextKeyedAPI implementation.
   static const char* service_name() {
     return "ExtensionWebUIOverrideRegistrar";
   }
 
-  Profile* const profile_;
-  content::NotificationRegistrar registrar_;
+  // Listen to extension load, unloaded notifications.
+  ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver>
+      extension_registry_observer_;
 
   DISALLOW_COPY_AND_ASSIGN(ExtensionWebUIOverrideRegistrar);
 };
diff --git a/chrome/browser/extensions/extension_webkit_preferences.cc b/chrome/browser/extensions/extension_webkit_preferences.cc
index 0455227..afcc86c 100644
--- a/chrome/browser/extensions/extension_webkit_preferences.cc
+++ b/chrome/browser/extensions/extension_webkit_preferences.cc
@@ -27,13 +27,6 @@
     // Tabs aren't typically allowed to close windows. But extensions shouldn't
     // be subject to that.
     webkit_prefs->allow_scripts_to_close_windows = true;
-
-    // Disable gpu acceleration for extension background pages to avoid
-    // unecessarily creating a compositor context for them.
-    if (render_view_type == extensions::VIEW_TYPE_EXTENSION_BACKGROUND_PAGE) {
-      webkit_prefs->accelerated_compositing_enabled = false;
-      webkit_prefs->force_compositing_mode = false;
-    }
   }
 
   if (extension->is_platform_app()) {
diff --git a/chrome/browser/extensions/external_install_ui.cc b/chrome/browser/extensions/external_install_ui.cc
index 665b1e1..82586fc 100644
--- a/chrome/browser/extensions/external_install_ui.cc
+++ b/chrome/browser/extensions/external_install_ui.cc
@@ -340,7 +340,8 @@
     const Extension* extension)
     : service_(service),
       extension_(extension) {
-  registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
+  registrar_.Add(this,
+                 chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
                  content::Source<Profile>(service->profile()));
   registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_REMOVED,
                  content::Source<Profile>(service->profile()));
@@ -414,7 +415,7 @@
     const content::NotificationSource& source,
     const content::NotificationDetails& details) {
   // The error is invalidated if the extension has been loaded or removed.
-  DCHECK(type == chrome::NOTIFICATION_EXTENSION_LOADED ||
+  DCHECK(type == chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED ||
          type == chrome::NOTIFICATION_EXTENSION_REMOVED);
   const Extension* extension = content::Details<const Extension>(details).ptr();
   if (extension != extension_)
diff --git a/chrome/browser/extensions/external_provider_impl_chromeos_unittest.cc b/chrome/browser/extensions/external_provider_impl_chromeos_unittest.cc
index 74117b3..f2b97ca 100644
--- a/chrome/browser/extensions/external_provider_impl_chromeos_unittest.cc
+++ b/chrome/browser/extensions/external_provider_impl_chromeos_unittest.cc
@@ -6,11 +6,14 @@
 
 #include "base/command_line.h"
 #include "base/memory/scoped_ptr.h"
+#include "base/prefs/testing_pref_service.h"
 #include "base/test/scoped_path_override.h"
 #include "chrome/browser/chrome_notification_types.h"
+#include "chrome/browser/chromeos/customization_document.h"
 #include "chrome/browser/extensions/extension_service_unittest.h"
 #include "chrome/common/chrome_paths.h"
 #include "chrome/common/chrome_switches.h"
+#include "chrome/test/base/testing_browser_process.h"
 #include "chrome/test/base/testing_profile.h"
 #include "chromeos/system/mock_statistics_provider.h"
 #include "chromeos/system/statistics_provider.h"
@@ -52,6 +55,10 @@
   virtual void SetUp() OVERRIDE {
     ExtensionServiceTestBase::SetUp();
 
+    TestingBrowserProcess::GetGlobal()->SetLocalState(&local_state_);
+    chromeos::ServicesCustomizationDocument::RegisterPrefs(
+        local_state_.registry());
+
     external_externsions_overrides_.reset(
         new base::ScopedPathOverride(chrome::DIR_EXTERNAL_EXTENSIONS,
                                      data_dir_.Append("external")));
@@ -64,9 +71,11 @@
 
   virtual void TearDown() OVERRIDE {
     chromeos::system::StatisticsProvider::SetTestProvider(NULL);
+    TestingBrowserProcess::GetGlobal()->SetLocalState(NULL);
   }
 
  private:
+  TestingPrefServiceSimple local_state_;
   scoped_ptr<base::ScopedPathOverride> external_externsions_overrides_;
   chromeos::system::MockStatisticsProvider mock_statistics_provider_;
 
diff --git a/chrome/browser/extensions/external_provider_impl_unittest.cc b/chrome/browser/extensions/external_provider_impl_unittest.cc
index 3b82b78..27e8c55 100644
--- a/chrome/browser/extensions/external_provider_impl_unittest.cc
+++ b/chrome/browser/extensions/external_provider_impl_unittest.cc
@@ -9,6 +9,7 @@
 #include "base/files/file_path.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/path_service.h"
+#include "base/prefs/testing_pref_service.h"
 #include "base/strings/stringprintf.h"
 #include "base/test/scoped_path_override.h"
 #include "chrome/browser/chrome_notification_types.h"
@@ -16,6 +17,7 @@
 #include "chrome/browser/extensions/updater/extension_cache_fake.h"
 #include "chrome/common/chrome_paths.h"
 #include "chrome/common/chrome_switches.h"
+#include "chrome/test/base/testing_browser_process.h"
 #include "chrome/test/base/testing_profile.h"
 #include "content/public/browser/notification_service.h"
 #include "content/public/test/test_utils.h"
@@ -25,6 +27,7 @@
 #include "testing/gmock/include/gmock/gmock.h"
 
 #if defined(OS_CHROMEOS)
+#include "chrome/browser/chromeos/customization_document.h"
 #include "chromeos/system/mock_statistics_provider.h"
 #include "chromeos/system/statistics_provider.h"
 #endif
@@ -65,6 +68,13 @@
   virtual void SetUp() OVERRIDE {
     ExtensionServiceTestBase::SetUp();
     test_server_.reset(new EmbeddedTestServer());
+
+#if defined(OS_CHROMEOS)
+    TestingBrowserProcess::GetGlobal()->SetLocalState(&local_state_);
+    chromeos::ServicesCustomizationDocument::RegisterPrefs(
+        local_state_.registry());
+#endif
+
     ASSERT_TRUE(test_server_->InitializeAndWaitUntilReady());
     test_server_->RegisterRequestHandler(
         base::Bind(&ExternalProviderImplTest::HandleRequest,
@@ -86,6 +96,7 @@
   virtual void TearDown() OVERRIDE {
 #if defined(OS_CHROMEOS)
     chromeos::system::StatisticsProvider::SetTestProvider(NULL);
+    TestingBrowserProcess::GetGlobal()->SetLocalState(NULL);
 #endif
   }
 
@@ -128,6 +139,7 @@
   scoped_ptr<ExtensionCacheFake> test_extension_cache_;
 #if defined(OS_CHROMEOS)
   chromeos::system::MockStatisticsProvider mock_statistics_provider_;
+  TestingPrefServiceSimple local_state_;
 #endif
 
   DISALLOW_COPY_AND_ASSIGN(ExternalProviderImplTest);
diff --git a/chrome/browser/extensions/gpu_browsertest.cc b/chrome/browser/extensions/gpu_browsertest.cc
index 718e5b1..9c31aae 100644
--- a/chrome/browser/extensions/gpu_browsertest.cc
+++ b/chrome/browser/extensions/gpu_browsertest.cc
@@ -2,10 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// Copyright (c) 2012 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 "chrome/browser/extensions/extension_browsertest.h"
 #include "chrome/browser/ui/browser.h"
 #include "content/public/browser/render_view_host.h"
@@ -14,9 +10,9 @@
 #include "extensions/browser/process_manager.h"
 #include "webkit/common/webpreferences.h"
 
-// Tests that GPU acceleration is disabled for extension background
-// pages. See crbug.com/163698 .
-IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest, WebKitPrefsBackgroundPage) {
+// Tests that background pages are marked as never visible to prevent GPU
+// resource allocation. See crbug.com/362165 and crbug.com/163698.
+IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest, BackgroundPageIsNeverVisible) {
   ASSERT_TRUE(LoadExtension(
       test_data_dir_.AppendASCII("good").AppendASCII("Extensions")
                     .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj")
@@ -26,7 +22,6 @@
       extensions::ExtensionSystem::Get(browser()->profile())->process_manager();
   extensions::ExtensionHost* host =
       FindHostWithPath(manager, "/backgroundpage.html", 1);
-  WebPreferences prefs =
-      host->render_view_host()->GetWebkitPreferences();
-  ASSERT_FALSE(prefs.accelerated_compositing_enabled);
+  ASSERT_TRUE(host->host_contents()->GetDelegate()->IsNeverVisible(
+      host->host_contents()));
 }
diff --git a/chrome/browser/extensions/image_loader.cc b/chrome/browser/extensions/image_loader.cc
index 8c39052..055775b 100644
--- a/chrome/browser/extensions/image_loader.cc
+++ b/chrome/browser/extensions/image_loader.cc
@@ -27,6 +27,10 @@
 #include "ui/gfx/image/image_family.h"
 #include "ui/gfx/image/image_skia.h"
 
+#if defined(OS_CHROMEOS)
+#include "ui/file_manager/file_manager_resource_util.h"
+#endif
+
 #if defined(USE_AURA)
 #include "ui/keyboard/keyboard_util.h"
 #endif
@@ -277,11 +281,21 @@
         kExtraComponentExtensionResources,
         arraysize(kExtraComponentExtensionResources));
 #if defined(OS_CHROMEOS)
-    size_t size;
-    const GritResourceMap* keyboard_resources =
-        keyboard::GetKeyboardExtensionResources(&size);
+    size_t file_manager_resource_size;
+    const GritResourceMap* file_manager_resources =
+        file_manager::GetFileManagerResources(&file_manager_resource_size);
     AddComponentResourceEntries(
-        path_to_resource_id.Pointer(), keyboard_resources, size);
+        path_to_resource_id.Pointer(),
+        file_manager_resources,
+        file_manager_resource_size);
+
+    size_t keyboard_resource_size;
+    const GritResourceMap* keyboard_resources =
+        keyboard::GetKeyboardExtensionResources(&keyboard_resource_size);
+    AddComponentResourceEntries(
+        path_to_resource_id.Pointer(),
+        keyboard_resources,
+        keyboard_resource_size);
 #endif
   }
 
diff --git a/chrome/browser/extensions/install_observer.h b/chrome/browser/extensions/install_observer.h
index 1823170..990a62e 100644
--- a/chrome/browser/extensions/install_observer.h
+++ b/chrome/browser/extensions/install_observer.h
@@ -51,6 +51,11 @@
   // installation is due to start.
   virtual void OnBeginCrxInstall(const std::string& extension_id) {}
 
+  // Called when installation of a crx has completed (either successfully or
+  // not).
+  virtual void OnFinishCrxInstall(const std::string& extension_id,
+                                  bool success) {}
+
   // Called if the extension fails to install.
   virtual void OnInstallFailure(const std::string& extension_id) {}
 
diff --git a/chrome/browser/extensions/install_tracker.cc b/chrome/browser/extensions/install_tracker.cc
index 784ae81..81e72fe 100644
--- a/chrome/browser/extensions/install_tracker.cc
+++ b/chrome/browser/extensions/install_tracker.cc
@@ -11,25 +11,24 @@
 #include "chrome/common/pref_names.h"
 #include "content/public/browser/notification_service.h"
 #include "extensions/browser/extension_prefs.h"
+#include "extensions/browser/extension_registry.h"
 #include "extensions/browser/pref_names.h"
 
 namespace extensions {
 
 InstallTracker::InstallTracker(Profile* profile,
-                               extensions::ExtensionPrefs* prefs) {
-  AppSorting* sorting = prefs->app_sorting();
+                               extensions::ExtensionPrefs* prefs)
+    : extension_registry_observer_(this) {
+  extension_registry_observer_.Add(ExtensionRegistry::Get(profile));
 
   registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_INSTALLED,
       content::Source<Profile>(profile));
-  registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
-      content::Source<Profile>(profile));
-  registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
-      content::Source<Profile>(profile));
   registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNINSTALLED,
       content::Source<Profile>(profile));
   registrar_.Add(this,
                  chrome::NOTIFICATION_EXTENSION_UPDATE_DISABLED,
                  content::Source<Profile>(profile));
+  AppSorting* sorting = prefs->app_sorting();
   registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LAUNCHER_REORDERED,
       content::Source<AppSorting>(sorting));
   registrar_.Add(this, chrome::NOTIFICATION_APP_INSTALLED_TO_APPLIST,
@@ -80,6 +79,12 @@
       InstallObserver, observers_, OnBeginCrxInstall(extension_id));
 }
 
+void InstallTracker::OnFinishCrxInstall(const std::string& extension_id,
+                                        bool success) {
+  FOR_EACH_OBSERVER(
+      InstallObserver, observers_, OnFinishCrxInstall(extension_id, success));
+}
+
 void InstallTracker::OnInstallFailure(
     const std::string& extension_id) {
   FOR_EACH_OBSERVER(InstallObserver, observers_,
@@ -90,6 +95,19 @@
   FOR_EACH_OBSERVER(InstallObserver, observers_, OnShutdown());
 }
 
+void InstallTracker::OnExtensionLoaded(content::BrowserContext* browser_context,
+                                       const Extension* extension) {
+  FOR_EACH_OBSERVER(InstallObserver, observers_, OnExtensionLoaded(extension));
+}
+
+void InstallTracker::OnExtensionUnloaded(
+    content::BrowserContext* browser_context,
+    const Extension* extension,
+    UnloadedExtensionInfo::Reason reason) {
+  FOR_EACH_OBSERVER(
+      InstallObserver, observers_, OnExtensionUnloaded(extension));
+}
+
 void InstallTracker::Observe(int type,
                              const content::NotificationSource& source,
                              const content::NotificationDetails& details) {
@@ -102,21 +120,6 @@
                         OnExtensionInstalled(extension));
       break;
     }
-    case chrome::NOTIFICATION_EXTENSION_LOADED: {
-      const Extension* extension =
-          content::Details<const Extension>(details).ptr();
-      FOR_EACH_OBSERVER(InstallObserver, observers_,
-                        OnExtensionLoaded(extension));
-      break;
-    }
-    case chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED: {
-      const content::Details<extensions::UnloadedExtensionInfo>& unload_info(
-          details);
-      const Extension* extension = unload_info->extension;
-      FOR_EACH_OBSERVER(InstallObserver, observers_,
-                        OnExtensionUnloaded(extension));
-      break;
-    }
     case chrome::NOTIFICATION_EXTENSION_UNINSTALLED: {
       const Extension* extension =
           content::Details<const Extension>(details).ptr();
diff --git a/chrome/browser/extensions/install_tracker.h b/chrome/browser/extensions/install_tracker.h
index 74ff28c..8342ec9 100644
--- a/chrome/browser/extensions/install_tracker.h
+++ b/chrome/browser/extensions/install_tracker.h
@@ -7,10 +7,12 @@
 
 #include "base/observer_list.h"
 #include "base/prefs/pref_change_registrar.h"
+#include "base/scoped_observer.h"
 #include "chrome/browser/extensions/install_observer.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "content/public/browser/notification_observer.h"
 #include "content/public/browser/notification_registrar.h"
+#include "extensions/browser/extension_registry_observer.h"
 
 class Profile;
 
@@ -21,9 +23,11 @@
 namespace extensions {
 
 class ExtensionPrefs;
+class ExtensionRegistry;
 
 class InstallTracker : public KeyedService,
-                       public content::NotificationObserver {
+                       public content::NotificationObserver,
+                       public ExtensionRegistryObserver {
  public:
   InstallTracker(Profile* profile,
                  extensions::ExtensionPrefs* prefs);
@@ -40,23 +44,36 @@
   void OnDownloadProgress(const std::string& extension_id,
                           int percent_downloaded);
   void OnBeginCrxInstall(const std::string& extension_id);
+  void OnFinishCrxInstall(const std::string& extension_id, bool success);
   void OnInstallFailure(const std::string& extension_id);
 
-  // Overriddes for KeyedService:
+  // Overriddes for KeyedService.
   virtual void Shutdown() OVERRIDE;
 
-  // content::NotificationObserver
-  virtual void Observe(int type,
-                       const content::NotificationSource& source,
-                       const content::NotificationDetails& details) OVERRIDE;
-
  private:
   void OnAppsReordered();
 
+  // content::NotificationObserver.
+  virtual void Observe(int type,
+                       const content::NotificationSource& source,
+                       const content::NotificationDetails& details) OVERRIDE;
+
+  // ExtensionRegistryObserver implementation.
+  virtual void OnExtensionLoaded(content::BrowserContext* browser_context,
+                                 const Extension* extension) OVERRIDE;
+  virtual void OnExtensionUnloaded(
+      content::BrowserContext* browser_context,
+      const Extension* extension,
+      UnloadedExtensionInfo::Reason reason) OVERRIDE;
+
   ObserverList<InstallObserver> observers_;
   content::NotificationRegistrar registrar_;
   PrefChangeRegistrar pref_change_registrar_;
 
+  // Listen to extension load, unloaded notifications.
+  ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver>
+      extension_registry_observer_;
+
   DISALLOW_COPY_AND_ASSIGN(InstallTracker);
 };
 
diff --git a/chrome/browser/extensions/launch_util.cc b/chrome/browser/extensions/launch_util.cc
index d24f40e..765e5fc 100644
--- a/chrome/browser/extensions/launch_util.cc
+++ b/chrome/browser/extensions/launch_util.cc
@@ -17,10 +17,6 @@
 #include "extensions/browser/pref_names.h"
 #include "extensions/common/extension.h"
 
-#if defined(OS_WIN)
-#include "win8/util/win8_util.h"
-#endif
-
 #if defined(USE_ASH)
 #include "ash/shell.h"
 #endif
@@ -69,12 +65,6 @@
       result = LAUNCH_TYPE_REGULAR;
 #endif
 
-#if defined(OS_WIN)
-    // We don't support app windows in Windows 8 single window Metro mode.
-    if (win8::IsSingleWindowMetroMode() && result == LAUNCH_TYPE_WINDOW)
-      result = LAUNCH_TYPE_REGULAR;
-#endif  // OS_WIN
-
   return result;
 }
 
diff --git a/chrome/browser/extensions/menu_manager.cc b/chrome/browser/extensions/menu_manager.cc
index 6002ef3..2bea17b 100644
--- a/chrome/browser/extensions/menu_manager.cc
+++ b/chrome/browser/extensions/menu_manager.cc
@@ -303,7 +303,8 @@
 
 MenuManager::MenuManager(Profile* profile, StateStore* store)
     : profile_(profile), store_(store) {
-  registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
+  registrar_.Add(this,
+                 chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
                  content::Source<Profile>(profile));
   registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
                  content::Source<Profile>(profile));
@@ -607,8 +608,7 @@
                                  WebContents* web_contents,
                                  const content::ContextMenuParams& params,
                                  const MenuItem::Id& menu_item_id) {
-  EventRouter* event_router = extensions::ExtensionSystem::Get(profile)->
-      event_router();
+  EventRouter* event_router = EventRouter::Get(profile);
   if (!event_router)
     return;
 
@@ -845,7 +845,7 @@
       }
       break;
     }
-    case chrome::NOTIFICATION_EXTENSION_LOADED: {
+    case chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED: {
       const Extension* extension =
           content::Details<const Extension>(details).ptr();
       if (store_ && BackgroundInfo::HasLazyBackgroundPage(extension)) {
diff --git a/chrome/browser/extensions/permissions_updater.cc b/chrome/browser/extensions/permissions_updater.cc
index 9dc8f82..b98bd0c 100644
--- a/chrome/browser/extensions/permissions_updater.cc
+++ b/chrome/browser/extensions/permissions_updater.cc
@@ -17,7 +17,6 @@
 #include "content/public/browser/render_process_host.h"
 #include "extensions/browser/event_router.h"
 #include "extensions/browser/extension_prefs.h"
-#include "extensions/browser/extension_system.h"
 #include "extensions/common/extension.h"
 #include "extensions/common/extension_messages.h"
 #include "extensions/common/permissions/permissions_data.h"
@@ -92,8 +91,7 @@
     const std::string& extension_id,
     const char* event_name,
     const PermissionSet* changed_permissions) {
-  if (!profile_ ||
-      !ExtensionSystem::Get(profile_)->event_router())
+  if (!profile_ || !EventRouter::Get(profile_))
     return;
 
   scoped_ptr<base::ListValue> value(new base::ListValue());
@@ -102,8 +100,8 @@
   value->Append(permissions->ToValue().release());
   scoped_ptr<Event> event(new Event(event_name, value.Pass()));
   event->restrict_to_browser_context = profile_;
-  ExtensionSystem::Get(profile_)->event_router()->
-      DispatchEventToExtension(extension_id, event.Pass());
+  EventRouter::Get(profile_)
+      ->DispatchEventToExtension(extension_id, event.Pass());
 }
 
 void PermissionsUpdater::NotifyPermissionsUpdated(
diff --git a/chrome/browser/extensions/plugin_manager.cc b/chrome/browser/extensions/plugin_manager.cc
index 62dfbe3..526aa0c 100644
--- a/chrome/browser/extensions/plugin_manager.cc
+++ b/chrome/browser/extensions/plugin_manager.cc
@@ -6,33 +6,27 @@
 #include "base/lazy_instance.h"
 #include "base/path_service.h"
 #include "base/strings/utf_string_conversions.h"
-#include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/extensions/plugin_manager.h"
 #include "chrome/browser/plugins/chrome_plugin_service_filter.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/common/chrome_paths.h"
 #include "chrome/common/extensions/api/plugins/plugins_handler.h"
-#include "content/public/browser/notification_details.h"
-#include "content/public/browser/notification_source.h"
 #include "content/public/browser/plugin_service.h"
 #include "content/public/common/pepper_plugin_info.h"
+#include "extensions/browser/extension_registry.h"
 #include "extensions/common/extension.h"
 #include "url/gurl.h"
 
 using content::PluginService;
 
-static const char* kNaClPluginMimeType = "application/x-nacl";
+static const char kNaClPluginMimeType[] = "application/x-nacl";
 
 namespace extensions {
 
 PluginManager::PluginManager(content::BrowserContext* context)
-    : profile_(Profile::FromBrowserContext(context)) {
-  registrar_.Add(this,
-                 chrome::NOTIFICATION_EXTENSION_LOADED,
-                 content::Source<Profile>(profile_));
-  registrar_.Add(this,
-                 chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
-                 content::Source<Profile>(profile_));
+    : profile_(Profile::FromBrowserContext(context)),
+      extension_registry_observer_(this) {
+  extension_registry_observer_.Add(ExtensionRegistry::Get(profile_));
 }
 
 PluginManager::~PluginManager() {
@@ -47,85 +41,78 @@
   return g_factory.Pointer();
 }
 
-void PluginManager::Observe(int type,
-                            const content::NotificationSource& source,
-                            const content::NotificationDetails& details) {
-  if (type == chrome::NOTIFICATION_EXTENSION_LOADED) {
-    const Extension* extension =
-        content::Details<const Extension>(details).ptr();
-
-    bool plugins_or_nacl_changed = false;
-    if (PluginInfo::HasPlugins(extension)) {
-      const PluginInfo::PluginVector* plugins =
-          PluginInfo::GetPlugins(extension);
-      CHECK(plugins);
-      plugins_or_nacl_changed = true;
-      for (PluginInfo::PluginVector::const_iterator plugin = plugins->begin();
-           plugin != plugins->end(); ++plugin) {
-        PluginService::GetInstance()->RefreshPlugins();
-        PluginService::GetInstance()->AddExtraPluginPath(plugin->path);
-        ChromePluginServiceFilter* filter =
-            ChromePluginServiceFilter::GetInstance();
-        if (plugin->is_public) {
-          filter->RestrictPluginToProfileAndOrigin(
-              plugin->path, profile_, GURL());
-        } else {
-          filter->RestrictPluginToProfileAndOrigin(
-              plugin->path, profile_, extension->url());
-        }
+void PluginManager::OnExtensionLoaded(content::BrowserContext* browser_context,
+                                      const Extension* extension) {
+  bool plugins_or_nacl_changed = false;
+  if (PluginInfo::HasPlugins(extension)) {
+    const PluginInfo::PluginVector* plugins = PluginInfo::GetPlugins(extension);
+    CHECK(plugins);
+    plugins_or_nacl_changed = true;
+    for (PluginInfo::PluginVector::const_iterator plugin = plugins->begin();
+         plugin != plugins->end();
+         ++plugin) {
+      PluginService::GetInstance()->RefreshPlugins();
+      PluginService::GetInstance()->AddExtraPluginPath(plugin->path);
+      ChromePluginServiceFilter* filter =
+          ChromePluginServiceFilter::GetInstance();
+      if (plugin->is_public) {
+        filter->RestrictPluginToProfileAndOrigin(
+            plugin->path, profile_, GURL());
+      } else {
+        filter->RestrictPluginToProfileAndOrigin(
+            plugin->path, profile_, extension->url());
       }
     }
-
-    const NaClModuleInfo::List* nacl_modules =
-        NaClModuleInfo::GetNaClModules(extension);
-    if (nacl_modules) {
-      plugins_or_nacl_changed = true;
-      for (NaClModuleInfo::List::const_iterator module = nacl_modules->begin();
-           module != nacl_modules->end(); ++module) {
-        RegisterNaClModule(*module);
-      }
-      UpdatePluginListWithNaClModules();
-    }
-
-    if (plugins_or_nacl_changed)
-      PluginService::GetInstance()->PurgePluginListCache(profile_, false);
-
-  } else if (type == chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED) {
-    const Extension* extension =
-        content::Details<UnloadedExtensionInfo>(details)->extension;
-
-    bool plugins_or_nacl_changed = false;
-    if (PluginInfo::HasPlugins(extension)) {
-      const PluginInfo::PluginVector* plugins =
-          PluginInfo::GetPlugins(extension);
-      plugins_or_nacl_changed = true;
-      for (PluginInfo::PluginVector::const_iterator plugin = plugins->begin();
-           plugin != plugins->end(); ++plugin) {
-        PluginService::GetInstance()->ForcePluginShutdown(plugin->path);
-        PluginService::GetInstance()->RefreshPlugins();
-        PluginService::GetInstance()->RemoveExtraPluginPath(plugin->path);
-        ChromePluginServiceFilter::GetInstance()->UnrestrictPlugin(
-            plugin->path);
-      }
-    }
-
-    const NaClModuleInfo::List* nacl_modules =
-        NaClModuleInfo::GetNaClModules(extension);
-    if (nacl_modules) {
-      plugins_or_nacl_changed = true;
-      for (NaClModuleInfo::List::const_iterator module = nacl_modules->begin();
-           module != nacl_modules->end(); ++module) {
-        UnregisterNaClModule(*module);
-      }
-      UpdatePluginListWithNaClModules();
-    }
-
-    if (plugins_or_nacl_changed)
-      PluginService::GetInstance()->PurgePluginListCache(profile_, false);
-
-  } else {
-    NOTREACHED();
   }
+
+  const NaClModuleInfo::List* nacl_modules =
+      NaClModuleInfo::GetNaClModules(extension);
+  if (nacl_modules) {
+    plugins_or_nacl_changed = true;
+    for (NaClModuleInfo::List::const_iterator module = nacl_modules->begin();
+         module != nacl_modules->end();
+         ++module) {
+      RegisterNaClModule(*module);
+    }
+    UpdatePluginListWithNaClModules();
+  }
+
+  if (plugins_or_nacl_changed)
+    PluginService::GetInstance()->PurgePluginListCache(profile_, false);
+}
+
+void PluginManager::OnExtensionUnloaded(
+    content::BrowserContext* browser_context,
+    const Extension* extension,
+    UnloadedExtensionInfo::Reason reason) {
+  bool plugins_or_nacl_changed = false;
+  if (PluginInfo::HasPlugins(extension)) {
+    const PluginInfo::PluginVector* plugins = PluginInfo::GetPlugins(extension);
+    plugins_or_nacl_changed = true;
+    for (PluginInfo::PluginVector::const_iterator plugin = plugins->begin();
+         plugin != plugins->end();
+         ++plugin) {
+      PluginService::GetInstance()->ForcePluginShutdown(plugin->path);
+      PluginService::GetInstance()->RefreshPlugins();
+      PluginService::GetInstance()->RemoveExtraPluginPath(plugin->path);
+      ChromePluginServiceFilter::GetInstance()->UnrestrictPlugin(plugin->path);
+    }
+  }
+
+  const NaClModuleInfo::List* nacl_modules =
+      NaClModuleInfo::GetNaClModules(extension);
+  if (nacl_modules) {
+    plugins_or_nacl_changed = true;
+    for (NaClModuleInfo::List::const_iterator module = nacl_modules->begin();
+         module != nacl_modules->end();
+         ++module) {
+      UnregisterNaClModule(*module);
+    }
+    UpdatePluginListWithNaClModules();
+  }
+
+  if (plugins_or_nacl_changed)
+    PluginService::GetInstance()->PurgePluginListCache(profile_, false);
 }
 
 void PluginManager::RegisterNaClModule(const NaClModuleInfo& info) {
diff --git a/chrome/browser/extensions/plugin_manager.h b/chrome/browser/extensions/plugin_manager.h
index c66ac5a..9c8d046 100644
--- a/chrome/browser/extensions/plugin_manager.h
+++ b/chrome/browser/extensions/plugin_manager.h
@@ -5,10 +5,10 @@
 #ifndef CHROME_BROWSER_EXTENSIONS_PLUGIN_MANAGER_H_
 #define CHROME_BROWSER_EXTENSIONS_PLUGIN_MANAGER_H_
 
+#include "base/scoped_observer.h"
 #include "chrome/common/extensions/manifest_handlers/nacl_modules_handler.h"
-#include "content/public/browser/notification_observer.h"
-#include "content/public/browser/notification_registrar.h"
 #include "extensions/browser/browser_context_keyed_api_factory.h"
+#include "extensions/browser/extension_registry_observer.h"
 
 class GURL;
 class Profile;
@@ -18,9 +18,10 @@
 }
 
 namespace extensions {
+class ExtensionRegistry;
 
 class PluginManager : public BrowserContextKeyedAPI,
-                      public content::NotificationObserver {
+                      public ExtensionRegistryObserver {
  public:
   explicit PluginManager(content::BrowserContext* context);
   virtual ~PluginManager();
@@ -28,11 +29,6 @@
   // BrowserContextKeyedAPI implementation.
   static BrowserContextKeyedAPIFactory<PluginManager>* GetFactoryInstance();
 
-  // content::NotificationObserver impelmentation.
-  virtual void Observe(int type,
-                       const content::NotificationSource& source,
-                       const content::NotificationDetails& details) OVERRIDE;
-
  private:
   friend class BrowserContextKeyedAPIFactory<PluginManager>;
 
@@ -51,15 +47,25 @@
 
   extensions::NaClModuleInfo::List::iterator FindNaClModule(const GURL& url);
 
+  // ExtensionRegistryObserver implementation.
+  virtual void OnExtensionLoaded(content::BrowserContext* browser_context,
+                                 const Extension* extension) OVERRIDE;
+  virtual void OnExtensionUnloaded(
+      content::BrowserContext* browser_context,
+      const Extension* extension,
+      UnloadedExtensionInfo::Reason reason) OVERRIDE;
+
   // BrowserContextKeyedAPI implementation.
   static const char* service_name() { return "PluginManager"; }
   static const bool kServiceIsNULLWhileTesting = true;
 
   extensions::NaClModuleInfo::List nacl_module_list_;
 
-  content::NotificationRegistrar registrar_;
-
   Profile* profile_;
+
+  // Listen to extension load, unloaded notifications.
+  ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver>
+      extension_registry_observer_;
 };
 
 }  // namespace extensions
diff --git a/chrome/browser/extensions/requirements_checker.cc b/chrome/browser/extensions/requirements_checker.cc
index c1bbadd..71eb8f1 100644
--- a/chrome/browser/extensions/requirements_checker.cc
+++ b/chrome/browser/extensions/requirements_checker.cc
@@ -64,14 +64,6 @@
                  AsWeakPtr()));
   }
 
-  if (requirements.css3d) {
-    ++pending_requirement_checks_;
-    css3d_checker_ = new GPUFeatureChecker(
-      gpu::GPU_FEATURE_TYPE_ACCELERATED_COMPOSITING,
-      base::Bind(&RequirementsChecker::SetCSS3DAvailability,
-                 AsWeakPtr()));
-  }
-
   if (pending_requirement_checks_ == 0) {
     content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE,
                                      base::Bind(callback_, errors_));
@@ -83,8 +75,6 @@
   // from the use of pending_requirement_checks_.
   if (webgl_checker_.get())
     webgl_checker_->CheckGPUFeatureAvailability();
-  if (css3d_checker_.get())
-    css3d_checker_->CheckGPUFeatureAvailability();
 }
 
 void RequirementsChecker::SetWebGLAvailability(bool available) {
@@ -95,14 +85,6 @@
   MaybeRunCallback();
 }
 
-void RequirementsChecker::SetCSS3DAvailability(bool available) {
-  if (!available) {
-    errors_.push_back(
-        l10n_util::GetStringUTF8(IDS_EXTENSION_CSS3D_NOT_SUPPORTED));
-  }
-  MaybeRunCallback();
-}
-
 void RequirementsChecker::MaybeRunCallback() {
   if (--pending_requirement_checks_ == 0) {
     content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE,
diff --git a/chrome/browser/extensions/requirements_checker.h b/chrome/browser/extensions/requirements_checker.h
index cca3503..1626789 100644
--- a/chrome/browser/extensions/requirements_checker.h
+++ b/chrome/browser/extensions/requirements_checker.h
@@ -37,7 +37,6 @@
  private:
   // Callbacks for the GPUFeatureChecker.
   void SetWebGLAvailability(bool available);
-  void SetCSS3DAvailability(bool available);
 
   void MaybeRunCallback();
 
@@ -48,7 +47,6 @@
   int pending_requirement_checks_;
 
   scoped_refptr<GPUFeatureChecker> webgl_checker_;
-  scoped_refptr<GPUFeatureChecker> css3d_checker_;
 
   base::Callback<void(std::vector<std::string> requirement_errorss)> callback_;
 };
diff --git a/chrome/browser/extensions/requirements_checker_browsertest.cc b/chrome/browser/extensions/requirements_checker_browsertest.cc
index 9115aec..590498f 100644
--- a/chrome/browser/extensions/requirements_checker_browsertest.cc
+++ b/chrome/browser/extensions/requirements_checker_browsertest.cc
@@ -118,27 +118,6 @@
   content::BrowserThread::GetBlockingPool()->FlushForTesting();
 }
 
-IN_PROC_BROWSER_TEST_F(RequirementsCheckerBrowserTest, DisallowCSS3D) {
-  scoped_refptr<const Extension> extension(
-      LoadExtensionFromDirName("require_3d"));
-  ASSERT_TRUE(extension.get());
-
-  // Blacklist css3d
-  std::vector<std::string> blacklisted_features;
-  blacklisted_features.push_back("accelerated_compositing");
-  BlackListGPUFeatures(blacklisted_features);
-  content::BrowserThread::GetBlockingPool()->FlushForTesting();
-
-  std::vector<std::string> expected_errors;
-  expected_errors.push_back(l10n_util::GetStringUTF8(
-      IDS_EXTENSION_CSS3D_NOT_SUPPORTED));
-
-  checker_.Check(extension, base::Bind(
-      &RequirementsCheckerBrowserTest::ValidateRequirementErrors,
-      base::Unretained(this), expected_errors));
-  content::BrowserThread::GetBlockingPool()->FlushForTesting();
-}
-
 IN_PROC_BROWSER_TEST_F(RequirementsCheckerBrowserTest, DisallowWebGL) {
   scoped_refptr<const Extension> extension(
       LoadExtensionFromDirName("require_3d"));
@@ -160,30 +139,6 @@
   content::BrowserThread::GetBlockingPool()->FlushForTesting();
 }
 
-IN_PROC_BROWSER_TEST_F(RequirementsCheckerBrowserTest, DisallowGPUFeatures) {
-  scoped_refptr<const Extension> extension(
-      LoadExtensionFromDirName("require_3d"));
-  ASSERT_TRUE(extension.get());
-
-  // Backlist both webgl and css3d
-  std::vector<std::string> blacklisted_features;
-  blacklisted_features.push_back("webgl");
-  blacklisted_features.push_back("accelerated_compositing");
-  BlackListGPUFeatures(blacklisted_features);
-  content::BrowserThread::GetBlockingPool()->FlushForTesting();
-
-  std::vector<std::string> expected_errors;
-  expected_errors.push_back(l10n_util::GetStringUTF8(
-      IDS_EXTENSION_WEBGL_NOT_SUPPORTED));
-  expected_errors.push_back(l10n_util::GetStringUTF8(
-      IDS_EXTENSION_CSS3D_NOT_SUPPORTED));
-
-  checker_.Check(extension, base::Bind(
-      &RequirementsCheckerBrowserTest::ValidateRequirementErrors,
-      base::Unretained(this), expected_errors));
-  content::BrowserThread::GetBlockingPool()->FlushForTesting();
-}
-
 IN_PROC_BROWSER_TEST_F(RequirementsCheckerBrowserTest, Check3DExtension) {
   scoped_refptr<const Extension> extension(
       LoadExtensionFromDirName("require_3d"));
@@ -194,8 +149,6 @@
   if (!content::GpuDataManager::GetInstance()->GpuAccessAllowed(NULL)) {
     expected_errors.push_back(l10n_util::GetStringUTF8(
         IDS_EXTENSION_WEBGL_NOT_SUPPORTED));
-    expected_errors.push_back(l10n_util::GetStringUTF8(
-        IDS_EXTENSION_CSS3D_NOT_SUPPORTED));
   }
 
   checker_.Check(extension, base::Bind(
diff --git a/chrome/browser/extensions/suggest_permission_util.cc b/chrome/browser/extensions/suggest_permission_util.cc
index ff9823a..4490762 100644
--- a/chrome/browser/extensions/suggest_permission_util.cc
+++ b/chrome/browser/extensions/suggest_permission_util.cc
@@ -45,22 +45,6 @@
       host->GetRoutingID(), CONSOLE_MESSAGE_LEVEL_WARNING, message));
 }
 
-void SuggestAPIPermissionInDevToolsConsole(APIPermission::ID permission,
-                                           const Extension* extension,
-                                           Profile* profile) {
-  extensions::ProcessManager* process_manager =
-      extensions::ExtensionSystem::Get(profile)->process_manager();
-
-  std::set<content::RenderViewHost*> views =
-      process_manager->GetRenderViewHostsForExtension(extension->id());
-
-  for (std::set<RenderViewHost*>::const_iterator iter = views.begin();
-       iter != views.end(); ++iter) {
-    RenderViewHost* host = *iter;
-    SuggestAPIPermissionInDevToolsConsole(permission, extension, host);
-  }
-}
-
 bool IsExtensionWithPermissionOrSuggestInConsole(
     APIPermission::ID permission,
     const Extension* extension,
@@ -74,17 +58,4 @@
   return false;
 }
 
-bool IsExtensionWithPermissionOrSuggestInConsole(
-    APIPermission::ID permission,
-    const Extension* extension,
-    Profile* profile) {
-  if (extension && extension->HasAPIPermission(permission))
-    return true;
-
-  if (extension)
-    SuggestAPIPermissionInDevToolsConsole(permission, extension, profile);
-
-  return false;
-}
-
 } // namespace extensions
diff --git a/chrome/browser/extensions/suggest_permission_util.h b/chrome/browser/extensions/suggest_permission_util.h
index ba55aec..6e00571 100644
--- a/chrome/browser/extensions/suggest_permission_util.h
+++ b/chrome/browser/extensions/suggest_permission_util.h
@@ -17,16 +17,6 @@
 
 class Extension;
 
-// Outputs a suggestion in the developer tools console to use |permission|.
-void SuggestAPIPermissionInDevToolsConsole(APIPermission::ID permission,
-                                           const Extension* extension,
-                                           content::RenderViewHost* host);
-
-// Outputs a suggestion in the developer tools console to use |permission|.
-void SuggestAPIPermissionInDevToolsConsole(APIPermission::ID permission,
-                                           const Extension* extension,
-                                           Profile* profile);
-
 // Checks that |extension| is not NULL and that it has |permission|. If not
 // and extension, just returns false. If an extension without |permission|
 // returns false and suggests |permision| in the developer tools console.
@@ -35,14 +25,6 @@
     const Extension* extension,
     content::RenderViewHost* host);
 
-// Checks that |extension| is not NULL and that it has |permission|. If not
-// and extension, just returns false. If an extension without |permission|
-// returns false and suggests |permision| in the developer tools console.
-bool IsExtensionWithPermissionOrSuggestInConsole(
-    APIPermission::ID permission,
-    const Extension* extension,
-    Profile* profile);
-
 }  // namespace extensions
 
 #endif  // CHROME_BROWSER_EXTENSIONS_SUGGEST_PERMISSION_UTIL_H_
diff --git a/chrome/browser/extensions/suspicious_extension_bubble_controller.cc b/chrome/browser/extensions/suspicious_extension_bubble_controller.cc
index 6f40d0f..873a3cc 100644
--- a/chrome/browser/extensions/suspicious_extension_bubble_controller.cc
+++ b/chrome/browser/extensions/suspicious_extension_bubble_controller.cc
@@ -152,12 +152,12 @@
 }
 
 bool SuspiciousExtensionBubbleController::ShouldShow() {
-  return !g_shown_for_profiles.Get().count(profile_) &&
+  return !g_shown_for_profiles.Get().count(profile_->GetOriginalProfile()) &&
       !GetExtensionList().empty();
 }
 
 void SuspiciousExtensionBubbleController::Show(ExtensionMessageBubble* bubble) {
-  g_shown_for_profiles.Get().insert(profile_);
+  g_shown_for_profiles.Get().insert(profile_->GetOriginalProfile());
   ExtensionMessageBubbleController::Show(bubble);
 }
 
diff --git a/chrome/browser/extensions/test_extension_service.cc b/chrome/browser/extensions/test_extension_service.cc
index af82db2..e8385e4 100644
--- a/chrome/browser/extensions/test_extension_service.cc
+++ b/chrome/browser/extensions/test_extension_service.cc
@@ -25,7 +25,6 @@
     const std::string& id,
     const base::FilePath& path,
     bool file_ownership_passed,
-    const GURL& download_url,
     extensions::CrxInstaller** out_crx_installer) {
   ADD_FAILURE();
   return false;
diff --git a/chrome/browser/extensions/test_extension_service.h b/chrome/browser/extensions/test_extension_service.h
index e92e034..a68fe85 100644
--- a/chrome/browser/extensions/test_extension_service.h
+++ b/chrome/browser/extensions/test_extension_service.h
@@ -31,7 +31,6 @@
       const std::string& id,
       const base::FilePath& path,
       bool file_ownership_passed,
-      const GURL& download_url,
       extensions::CrxInstaller** out_crx_installer) OVERRIDE;
   virtual const extensions::Extension* GetExtensionById(
       const std::string& id, bool include_disabled) const OVERRIDE;
diff --git a/chrome/browser/extensions/theme_installed_infobar_delegate.cc b/chrome/browser/extensions/theme_installed_infobar_delegate.cc
index 986250e..2b9b673 100644
--- a/chrome/browser/extensions/theme_installed_infobar_delegate.cc
+++ b/chrome/browser/extensions/theme_installed_infobar_delegate.cc
@@ -9,13 +9,13 @@
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/extensions/extension_service.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/themes/theme_service.h"
 #include "chrome/browser/themes/theme_service_factory.h"
 #include "chrome/browser/ui/browser_finder.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/notification_source.h"
 #include "extensions/common/extension.h"
 #include "grit/generated_resources.h"
@@ -48,15 +48,16 @@
   InfoBarService* infobar_service =
       InfoBarService::FromWebContents(web_contents);
   ThemeService* theme_service = ThemeServiceFactory::GetForProfile(profile);
-  scoped_ptr<InfoBar> new_infobar(ConfirmInfoBarDelegate::CreateInfoBar(
-      scoped_ptr<ConfirmInfoBarDelegate>(new ThemeInstalledInfoBarDelegate(
-          profile->GetExtensionService(), theme_service, new_theme,
-          previous_theme_id, previous_using_native_theme))));
+  scoped_ptr<infobars::InfoBar> new_infobar(
+      ConfirmInfoBarDelegate::CreateInfoBar(scoped_ptr<ConfirmInfoBarDelegate>(
+          new ThemeInstalledInfoBarDelegate(
+              profile->GetExtensionService(), theme_service, new_theme,
+              previous_theme_id, previous_using_native_theme))));
 
   // If there's a previous theme infobar, just replace that instead of adding a
   // new one.
   for (size_t i = 0; i < infobar_service->infobar_count(); ++i) {
-    InfoBar* old_infobar = infobar_service->infobar_at(i);
+    infobars::InfoBar* old_infobar = infobar_service->infobar_at(i);
     ThemeInstalledInfoBarDelegate* theme_infobar =
         old_infobar->delegate()->AsThemePreviewInfobarDelegate();
     if (theme_infobar) {
@@ -106,7 +107,8 @@
   return IDR_INFOBAR_THEME;
 }
 
-InfoBarDelegate::Type ThemeInstalledInfoBarDelegate::GetInfoBarType() const {
+infobars::InfoBarDelegate::Type ThemeInstalledInfoBarDelegate::GetInfoBarType()
+    const {
   return PAGE_ACTION_TYPE;
 }
 
diff --git a/chrome/browser/extensions/updater/extension_updater.cc b/chrome/browser/extensions/updater/extension_updater.cc
index 45f1ab8..14d9934 100644
--- a/chrome/browser/extensions/updater/extension_updater.cc
+++ b/chrome/browser/extensions/updater/extension_updater.cc
@@ -102,16 +102,14 @@
     const std::string& i,
     const base::FilePath& p,
     bool file_ownership_passed,
-    const GURL& u,
     const std::set<int>& request_ids)
     : extension_id(i),
       path(p),
       file_ownership_passed(file_ownership_passed),
-      download_url(u),
       request_ids(request_ids) {}
 
 ExtensionUpdater::FetchedCRXFile::FetchedCRXFile()
-    : path(), file_ownership_passed(true), download_url() {}
+    : path(), file_ownership_passed(true) {}
 
 ExtensionUpdater::FetchedCRXFile::~FetchedCRXFile() {}
 
@@ -193,12 +191,13 @@
                                           kStartupWaitSeconds * 8));
   }
 
-  // Read the persisted next check time, and use that if it isn't too soon.
-  // Otherwise pick something random.
+  // Read the persisted next check time, and use that if it isn't too soon
+  // or too late. Otherwise pick something random.
   Time saved_next = Time::FromInternalValue(prefs_->GetInt64(
       pref_names::kNextUpdateCheck));
   Time earliest = now + TimeDelta::FromSeconds(kStartupWaitSeconds);
-  if (saved_next >= earliest) {
+  Time latest = now + TimeDelta::FromSeconds(frequency_seconds_);
+  if (saved_next >= earliest && saved_next <= latest) {
     return saved_next - now;
   } else {
     return TimeDelta::FromSeconds(RandInt(kStartupWaitSeconds,
@@ -484,8 +483,7 @@
 
   VLOG(2) << download_url << " written to " << path.value();
 
-  FetchedCRXFile fetched(id, path, file_ownership_passed, download_url,
-                         request_ids);
+  FetchedCRXFile fetched(id, path, file_ownership_passed, request_ids);
   fetched_crx_files_.push(fetched);
 
   // MaybeInstallCRXFile() removes extensions from |in_progress_ids_| after
@@ -559,7 +557,6 @@
     if (service_->UpdateExtension(crx_file.extension_id,
                                   crx_file.path,
                                   crx_file.file_ownership_passed,
-                                  crx_file.download_url,
                                   &installer)) {
       crx_install_is_running_ = true;
       current_crx_file_ = crx_file;
diff --git a/chrome/browser/extensions/updater/extension_updater.h b/chrome/browser/extensions/updater/extension_updater.h
index b6be1e1..15319dd 100644
--- a/chrome/browser/extensions/updater/extension_updater.h
+++ b/chrome/browser/extensions/updater/extension_updater.h
@@ -126,14 +126,12 @@
     FetchedCRXFile(const std::string& id,
                    const base::FilePath& path,
                    bool file_ownership_passed,
-                   const GURL& download_url,
                    const std::set<int>& request_ids);
     ~FetchedCRXFile();
 
     std::string extension_id;
     base::FilePath path;
     bool file_ownership_passed;
-    GURL download_url;
     std::set<int> request_ids;
   };
 
diff --git a/chrome/browser/extensions/updater/extension_updater_unittest.cc b/chrome/browser/extensions/updater/extension_updater_unittest.cc
index 195616f..6c3721c 100644
--- a/chrome/browser/extensions/updater/extension_updater_unittest.cc
+++ b/chrome/browser/extensions/updater/extension_updater_unittest.cc
@@ -411,11 +411,9 @@
       const std::string& id,
       const base::FilePath& extension_path,
       bool file_ownership_passed,
-      const GURL& download_url,
       CrxInstaller** out_crx_installer) OVERRIDE {
     extension_id_ = id;
     install_path_ = extension_path;
-    download_url_ = download_url;
 
     if (ContainsKey(fake_crx_installers_, id)) {
       *out_crx_installer = fake_crx_installers_[id];
@@ -437,7 +435,6 @@
 
   const std::string& extension_id() const { return extension_id_; }
   const base::FilePath& install_path() const { return install_path_; }
-  const GURL& download_url() const { return download_url_; }
 
  private:
   // Hold the set of ids that UpdateExtension() should fake success on.
@@ -1078,7 +1075,6 @@
       EXPECT_EQ(id, service->extension_id());
       base::FilePath tmpfile_path = service->install_path();
       EXPECT_FALSE(tmpfile_path.empty());
-      EXPECT_EQ(test_url, service->download_url());
       EXPECT_EQ(extension_file_path, tmpfile_path);
     }
   }
@@ -1161,7 +1157,6 @@
       EXPECT_EQ(id, service->extension_id());
       base::FilePath tmpfile_path = service->install_path();
       EXPECT_FALSE(tmpfile_path.empty());
-      EXPECT_EQ(test_url, service->download_url());
       EXPECT_EQ(extension_file_path, tmpfile_path);
     }
   }
@@ -1259,7 +1254,6 @@
     base::FilePath tmpfile_path = service.install_path();
     EXPECT_FALSE(tmpfile_path.empty());
     EXPECT_EQ(id1, service.extension_id());
-    EXPECT_EQ(url1, service.download_url());
     RunUntilIdle();
 
     // Make sure the second fetch finished and asked the service to do an
@@ -1282,7 +1276,6 @@
       // The second install should not have run, because the first has not
       // sent a notification that it finished.
       EXPECT_EQ(id1, service.extension_id());
-      EXPECT_EQ(url1, service.download_url());
 
       // Fake install notice.  This should start the second installation,
       // which will be checked below.
@@ -1292,7 +1285,6 @@
     }
 
     EXPECT_EQ(id2, service.extension_id());
-    EXPECT_EQ(url2, service.download_url());
     EXPECT_FALSE(service.install_path().empty());
 
     // Make sure the correct crx contents were passed for the update call.
diff --git a/chrome/browser/extensions/url_request_util.cc b/chrome/browser/extensions/url_request_util.cc
index 661b033..82dd7f7 100644
--- a/chrome/browser/extensions/url_request_util.cc
+++ b/chrome/browser/extensions/url_request_util.cc
@@ -239,5 +239,15 @@
   return NULL;
 }
 
+bool IsWebViewRequest(net::URLRequest* request) {
+  const content::ResourceRequestInfo* info =
+      content::ResourceRequestInfo::ForRequest(request);
+  ExtensionRendererState* renderer_state =
+      ExtensionRendererState::GetInstance();
+  ExtensionRendererState::WebViewInfo webview_info;
+  return renderer_state->GetWebViewInfo(
+      info->GetChildID(), info->GetRouteID(), &webview_info);
+}
+
 }  // namespace url_request_util
 }  // namespace extensions
diff --git a/chrome/browser/extensions/url_request_util.h b/chrome/browser/extensions/url_request_util.h
index a6056f3..1be2589 100644
--- a/chrome/browser/extensions/url_request_util.h
+++ b/chrome/browser/extensions/url_request_util.h
@@ -41,6 +41,10 @@
     const std::string& content_security_policy,
     bool send_cors_header);
 
+// Returns true if |request| corresponds to a resource request from a
+// <webview>.
+bool IsWebViewRequest(net::URLRequest* request);
+
 }  // namespace url_request_util
 }  // namespace extensions
 
diff --git a/chrome/browser/extensions/user_script_listener.cc b/chrome/browser/extensions/user_script_listener.cc
index ff40738..96b94fc 100644
--- a/chrome/browser/extensions/user_script_listener.cc
+++ b/chrome/browser/extensions/user_script_listener.cc
@@ -70,7 +70,8 @@
     : user_scripts_ready_(false) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
 
-  registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
+  registrar_.Add(this,
+                 chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
                  content::NotificationService::AllSources());
   registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
                  content::NotificationService::AllSources());
@@ -206,7 +207,7 @@
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
 
   switch (type) {
-    case chrome::NOTIFICATION_EXTENSION_LOADED: {
+    case chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED: {
       Profile* profile = content::Source<Profile>(source).ptr();
       const Extension* extension =
           content::Details<const Extension>(details).ptr();
diff --git a/chrome/browser/extensions/user_script_listener_unittest.cc b/chrome/browser/extensions/user_script_listener_unittest.cc
index 9ba06a8..e14cb10 100644
--- a/chrome/browser/extensions/user_script_listener_unittest.cc
+++ b/chrome/browser/extensions/user_script_listener_unittest.cc
@@ -291,7 +291,7 @@
   extensions::ExtensionRegistry::Get(&profile2)->AddEnabled(extension);
 
   content::NotificationService::current()->Notify(
-      chrome::NOTIFICATION_EXTENSION_LOADED,
+      chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
       content::Source<Profile>(&profile2),
       content::Details<Extension>(extension.get()));
 
diff --git a/chrome/browser/extensions/user_script_master.cc b/chrome/browser/extensions/user_script_master.cc
index 75f386b..3058648 100644
--- a/chrome/browser/extensions/user_script_master.cc
+++ b/chrome/browser/extensions/user_script_master.cc
@@ -4,17 +4,11 @@
 
 #include "chrome/browser/extensions/user_script_master.h"
 
-#include <map>
 #include <string>
-#include <vector>
 
 #include "base/bind.h"
 #include "base/file_util.h"
 #include "base/files/file_path.h"
-#include "base/pickle.h"
-#include "base/stl_util.h"
-#include "base/strings/string_util.h"
-#include "base/threading/thread.h"
 #include "base/version.h"
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/extensions/extension_service.h"
@@ -25,10 +19,7 @@
 #include "chrome/common/extensions/manifest_handlers/content_scripts_handler.h"
 #include "content/public/browser/notification_service.h"
 #include "content/public/browser/render_process_host.h"
-#include "extensions/browser/extension_system.h"
-#include "extensions/common/extension.h"
-#include "extensions/common/extension_resource.h"
-#include "extensions/common/extension_set.h"
+#include "extensions/browser/extension_registry.h"
 #include "extensions/common/file_util.h"
 #include "extensions/common/message_bundle.h"
 #include "ui/base/resource/resource_bundle.h"
@@ -287,7 +278,13 @@
   // Create the shared memory object.
   base::SharedMemory shared_memory;
 
-  if (!shared_memory.CreateAndMapAnonymous(pickle.size()))
+  base::SharedMemoryCreateOptions options;
+  options.size = pickle.size();
+  options.share_read_only = true;
+  if (!shared_memory.Create(options))
+    return NULL;
+
+  if (!shared_memory.Map(pickle.size()))
     return NULL;
 
   // Copy the pickle to shared memory.
@@ -315,17 +312,14 @@
           &ScriptReloader::NotifyMaster, this, Serialize(user_scripts)));
 }
 
-
 UserScriptMaster::UserScriptMaster(Profile* profile)
     : extensions_service_ready_(false),
       pending_load_(false),
-      profile_(profile) {
+      profile_(profile),
+      extension_registry_observer_(this) {
+  extension_registry_observer_.Add(ExtensionRegistry::Get(profile_));
   registrar_.Add(this, chrome::NOTIFICATION_EXTENSIONS_READY,
                  content::Source<Profile>(profile_));
-  registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
-                 content::Source<Profile>(profile_));
-  registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
-                 content::Source<Profile>(profile_));
   registrar_.Add(this, content::NOTIFICATION_RENDERER_PROCESS_CREATED,
                  content::NotificationService::AllBrowserContextsAndSources());
 }
@@ -363,6 +357,52 @@
   }
 }
 
+void UserScriptMaster::OnExtensionLoaded(
+    content::BrowserContext* browser_context,
+    const Extension* extension) {
+  // Add any content scripts inside the extension.
+  extensions_info_[extension->id()] =
+      ExtensionSet::ExtensionPathAndDefaultLocale(
+          extension->path(), LocaleInfo::GetDefaultLocale(extension));
+  bool incognito_enabled = util::IsIncognitoEnabled(extension->id(), profile_);
+  const UserScriptList& scripts =
+      ContentScriptsInfo::GetContentScripts(extension);
+  for (UserScriptList::const_iterator iter = scripts.begin();
+       iter != scripts.end();
+       ++iter) {
+    user_scripts_.push_back(*iter);
+    user_scripts_.back().set_incognito_enabled(incognito_enabled);
+  }
+  if (extensions_service_ready_) {
+    if (script_reloader_.get()) {
+      pending_load_ = true;
+    } else {
+      StartLoad();
+    }
+  }
+}
+
+void UserScriptMaster::OnExtensionUnloaded(
+    content::BrowserContext* browser_context,
+    const Extension* extension,
+    UnloadedExtensionInfo::Reason reason) {
+  // Remove any content scripts.
+  extensions_info_.erase(extension->id());
+  UserScriptList new_user_scripts;
+  for (UserScriptList::iterator iter = user_scripts_.begin();
+       iter != user_scripts_.end();
+       ++iter) {
+    if (iter->extension_id() != extension->id())
+      new_user_scripts.push_back(*iter);
+  }
+  user_scripts_ = new_user_scripts;
+  if (script_reloader_.get()) {
+    pending_load_ = true;
+  } else {
+    StartLoad();
+  }
+}
+
 void UserScriptMaster::Observe(int type,
                                const content::NotificationSource& source,
                                const content::NotificationDetails& details) {
@@ -372,41 +412,6 @@
       extensions_service_ready_ = true;
       should_start_load = true;
       break;
-    case chrome::NOTIFICATION_EXTENSION_LOADED: {
-      // Add any content scripts inside the extension.
-      const Extension* extension =
-          content::Details<const Extension>(details).ptr();
-      extensions_info_[extension->id()] =
-          ExtensionSet::ExtensionPathAndDefaultLocale(
-              extension->path(), LocaleInfo::GetDefaultLocale(extension));
-      bool incognito_enabled =
-          util::IsIncognitoEnabled(extension->id(), profile_);
-      const UserScriptList& scripts =
-          ContentScriptsInfo::GetContentScripts(extension);
-      for (UserScriptList::const_iterator iter = scripts.begin();
-           iter != scripts.end(); ++iter) {
-        user_scripts_.push_back(*iter);
-        user_scripts_.back().set_incognito_enabled(incognito_enabled);
-      }
-      if (extensions_service_ready_)
-        should_start_load = true;
-      break;
-    }
-    case chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED: {
-      // Remove any content scripts.
-      const Extension* extension =
-          content::Details<UnloadedExtensionInfo>(details)->extension;
-      extensions_info_.erase(extension->id());
-      UserScriptList new_user_scripts;
-      for (UserScriptList::iterator iter = user_scripts_.begin();
-           iter != user_scripts_.end(); ++iter) {
-        if (iter->extension_id() != extension->id())
-          new_user_scripts.push_back(*iter);
-      }
-      user_scripts_ = new_user_scripts;
-      should_start_load = true;
-      break;
-    }
     case content::NOTIFICATION_RENDERER_PROCESS_CREATED: {
       content::RenderProcessHost* process =
           content::Source<content::RenderProcessHost>(source).ptr();
diff --git a/chrome/browser/extensions/user_script_master.h b/chrome/browser/extensions/user_script_master.h
index c764992..a7f9172 100644
--- a/chrome/browser/extensions/user_script_master.h
+++ b/chrome/browser/extensions/user_script_master.h
@@ -9,14 +9,12 @@
 #include <string>
 
 #include "base/compiler_specific.h"
-#include "base/files/file_path.h"
-#include "base/gtest_prod_util.h"
 #include "base/memory/scoped_ptr.h"
-#include "base/memory/shared_memory.h"
-#include "base/strings/string_piece.h"
+#include "base/scoped_observer.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/notification_observer.h"
 #include "content/public/browser/notification_registrar.h"
+#include "extensions/browser/extension_registry_observer.h"
 #include "extensions/common/extension_messages.h"
 #include "extensions/common/extension_set.h"
 #include "extensions/common/user_script.h"
@@ -29,13 +27,16 @@
 
 namespace extensions {
 
+class ExtensionRegistry;
+
 typedef std::map<std::string, ExtensionSet::ExtensionPathAndDefaultLocale>
     ExtensionsInfo;
 
 // Manages a segment of shared memory that contains the user scripts the user
 // has installed.  Lives on the UI thread.
 class UserScriptMaster : public base::RefCountedThreadSafe<UserScriptMaster>,
-                         public content::NotificationObserver {
+                         public content::NotificationObserver,
+                         public ExtensionRegistryObserver {
  public:
   explicit UserScriptMaster(Profile* profile);
 
@@ -134,6 +135,14 @@
                        const content::NotificationSource& source,
                        const content::NotificationDetails& details) OVERRIDE;
 
+  // ExtensionRegistryObserver implementation.
+  virtual void OnExtensionLoaded(content::BrowserContext* browser_context,
+                                 const Extension* extension) OVERRIDE;
+  virtual void OnExtensionUnloaded(
+      content::BrowserContext* browser_context,
+      const Extension* extension,
+      UnloadedExtensionInfo::Reason reason) OVERRIDE;
+
   // Sends the renderer process a new set of user scripts.
   void SendUpdate(content::RenderProcessHost* process,
                   base::SharedMemory* shared_memory);
@@ -165,6 +174,10 @@
   // The profile for which the scripts managed here are installed.
   Profile* profile_;
 
+  // Listen to extension load, unloaded notifications.
+  ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver>
+      extension_registry_observer_;
+
   DISALLOW_COPY_AND_ASSIGN(UserScriptMaster);
 };
 
diff --git a/chrome/browser/extensions/webstore_installer.cc b/chrome/browser/extensions/webstore_installer.cc
index 7cd835e..07e6e72 100644
--- a/chrome/browser/extensions/webstore_installer.cc
+++ b/chrome/browser/extensions/webstore_installer.cc
@@ -339,10 +339,12 @@
       const Extension* extension =
           content::Details<const Extension>(details).ptr();
       CrxInstaller* installer = content::Source<CrxInstaller>(source).ptr();
-      if (extension == NULL && download_item_ != NULL &&
-          installer->download_url() == download_item_->GetURL() &&
-          installer->profile()->IsSameProfile(profile_)) {
-        ReportFailure(kInstallCanceledError, FAILURE_REASON_CANCELLED);
+      if (crx_installer_.get() == installer) {
+        crx_installer_ = NULL;
+        // ReportFailure releases a reference to this object so it must be the
+        // last operation in this method.
+        if (extension == NULL)
+          ReportFailure(kInstallCanceledError, FAILURE_REASON_CANCELLED);
       }
       break;
     }
@@ -384,7 +386,7 @@
     case chrome::NOTIFICATION_EXTENSION_INSTALL_ERROR: {
       CrxInstaller* crx_installer = content::Source<CrxInstaller>(source).ptr();
       CHECK(crx_installer);
-      if (!profile_->IsSameProfile(crx_installer->profile()))
+      if (crx_installer != crx_installer_.get())
         return;
 
       // TODO(rdevlin.cronin): Continue removing std::string errors and
@@ -392,8 +394,10 @@
       const base::string16* error =
           content::Details<const base::string16>(details).ptr();
       const std::string utf8_error = base::UTF16ToUTF8(*error);
-      if (download_url_ == crx_installer->original_download_url())
-        ReportFailure(utf8_error, FAILURE_REASON_OTHER);
+      crx_installer_ = NULL;
+      // ReportFailure releases a reference to this object so it must be the
+      // last operation in this method.
+      ReportFailure(utf8_error, FAILURE_REASON_OTHER);
       break;
     }
 
@@ -473,13 +477,19 @@
       // Wait for other notifications if the download is really an extension.
       if (!download_crx_util::IsExtensionDownload(*download)) {
         ReportFailure(kInvalidDownloadError, FAILURE_REASON_OTHER);
-      } else if (pending_modules_.empty()) {
-        // The download is the last module - the extension main module.
-        if (delegate_)
-          delegate_->OnExtensionDownloadProgress(id_, download);
-        extensions::InstallTracker* tracker =
-            extensions::InstallTrackerFactory::GetForProfile(profile_);
-        tracker->OnDownloadProgress(id_, 100);
+      } else {
+        if (crx_installer_.get())
+          return;  // DownloadItemImpl calls the observer twice, ignore it.
+        StartCrxInstaller(*download);
+
+        if (pending_modules_.empty()) {
+          // The download is the last module - the extension main module.
+          if (delegate_)
+            delegate_->OnExtensionDownloadProgress(id_, download);
+          extensions::InstallTracker* tracker =
+              extensions::InstallTrackerFactory::GetForProfile(profile_);
+          tracker->OnDownloadProgress(id_, 100);
+        }
       }
       // Stop the progress timer if it's running.
       download_progress_timer_.Stop();
@@ -652,6 +662,26 @@
   }
 }
 
+void WebstoreInstaller::StartCrxInstaller(const DownloadItem& download) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  DCHECK(!crx_installer_.get());
+
+  ExtensionService* service = ExtensionSystem::Get(profile_)->
+      extension_service();
+  CHECK(service);
+
+  const Approval* approval = GetAssociatedApproval(download);
+  DCHECK(approval);
+
+  crx_installer_ = download_crx_util::CreateCrxInstaller(profile_, download);
+
+  crx_installer_->set_expected_id(approval->extension_id);
+  crx_installer_->set_is_gallery_install(true);
+  crx_installer_->set_allow_silent_install(true);
+
+  crx_installer_->InstallCrx(download.GetFullPath());
+}
+
 void WebstoreInstaller::ReportFailure(const std::string& error,
                                       FailureReason reason) {
   if (delegate_) {
diff --git a/chrome/browser/extensions/webstore_installer.h b/chrome/browser/extensions/webstore_installer.h
index 25b2181..bf1da97 100644
--- a/chrome/browser/extensions/webstore_installer.h
+++ b/chrome/browser/extensions/webstore_installer.h
@@ -38,6 +38,7 @@
 
 namespace extensions {
 
+class CrxInstaller;
 class Extension;
 class Manifest;
 
@@ -228,6 +229,9 @@
   // Updates the InstallTracker with the latest download progress.
   void UpdateDownloadProgress();
 
+  // Creates and starts CrxInstaller for the downloaded extension package.
+  void StartCrxInstaller(const content::DownloadItem& item);
+
   // Reports an install |error| to the delegate for the given extension if this
   // managed its installation. This also removes the associated PendingInstall.
   void ReportFailure(const std::string& error, FailureReason reason);
@@ -254,6 +258,7 @@
   base::OneShotTimer<WebstoreInstaller> download_progress_timer_;
   scoped_ptr<Approval> approval_;
   GURL download_url_;
+  scoped_refptr<CrxInstaller> crx_installer_;
 
   // Pending modules.
   std::list<SharedModuleInfo::ImportInfo> pending_modules_;
diff --git a/chrome/browser/favicon/DEPS b/chrome/browser/favicon/DEPS
index b2d7a82..f06119f 100644
--- a/chrome/browser/favicon/DEPS
+++ b/chrome/browser/favicon/DEPS
@@ -17,7 +17,8 @@
   #
   # Do not add to the list of temporarily-allowed dependencies below,
   # and please do not introduce more #includes of these files.
-  "!chrome/browser/bookmarks/bookmark_service.h",
+  "!chrome/browser/bookmarks/bookmark_model.h",
+  "!chrome/browser/bookmarks/bookmark_model_factory.h",
   "!chrome/browser/history/history_backend.h",
   "!chrome/browser/history/history_details.h",
   "!chrome/browser/history/history_service.h",
diff --git a/chrome/browser/favicon/favicon_handler.cc b/chrome/browser/favicon/favicon_handler.cc
index 19c68b1..08487e0 100644
--- a/chrome/browser/favicon/favicon_handler.cc
+++ b/chrome/browser/favicon/favicon_handler.cc
@@ -12,11 +12,9 @@
 #include "base/bind.h"
 #include "base/bind_helpers.h"
 #include "base/memory/ref_counted_memory.h"
-#include "chrome/browser/bookmarks/bookmark_service.h"
 #include "chrome/browser/favicon/favicon_service_factory.h"
 #include "chrome/browser/favicon/favicon_util.h"
 #include "chrome/browser/history/select_favicon_frames.h"
-#include "chrome/browser/profiles/profile.h"
 #include "content/public/browser/favicon_status.h"
 #include "content/public/browser/navigation_entry.h"
 #include "skia/ext/image_operations.h"
@@ -34,36 +32,36 @@
 // the apple touch icon for iPad.
 const int kTouchIconSize = 144;
 
-// Returns chrome::IconType the given icon_type corresponds to.
-chrome::IconType ToChromeIconType(FaviconURL::IconType icon_type) {
+// Returns favicon_base::IconType the given icon_type corresponds to.
+favicon_base::IconType ToChromeIconType(FaviconURL::IconType icon_type) {
   switch (icon_type) {
     case FaviconURL::FAVICON:
-      return chrome::FAVICON;
+      return favicon_base::FAVICON;
     case FaviconURL::TOUCH_ICON:
-      return chrome::TOUCH_ICON;
+      return favicon_base::TOUCH_ICON;
     case FaviconURL::TOUCH_PRECOMPOSED_ICON:
-      return chrome::TOUCH_PRECOMPOSED_ICON;
+      return favicon_base::TOUCH_PRECOMPOSED_ICON;
     case FaviconURL::INVALID_ICON:
-      return chrome::INVALID_ICON;
+      return favicon_base::INVALID_ICON;
   }
   NOTREACHED();
-  return chrome::INVALID_ICON;
+  return favicon_base::INVALID_ICON;
 }
 
 // Get the maximal icon size in pixels for a icon of type |icon_type| for the
 // current platform.
-int GetMaximalIconSize(chrome::IconType icon_type) {
+int GetMaximalIconSize(favicon_base::IconType icon_type) {
   switch (icon_type) {
-    case chrome::FAVICON:
+    case favicon_base::FAVICON:
 #if defined(OS_ANDROID)
       return 192;
 #else
       return gfx::ImageSkia::GetMaxSupportedScale() * gfx::kFaviconSize;
 #endif
-    case chrome::TOUCH_ICON:
-    case chrome::TOUCH_PRECOMPOSED_ICON:
+    case favicon_base::TOUCH_ICON:
+    case favicon_base::TOUCH_PRECOMPOSED_ICON:
       return kTouchIconSize;
-    case chrome::INVALID_ICON:
+    case favicon_base::INVALID_ICON:
       return 0;
   }
   NOTREACHED();
@@ -72,7 +70,7 @@
 
 bool DoUrlAndIconMatch(const FaviconURL& favicon_url,
                        const GURL& url,
-                       chrome::IconType icon_type) {
+                       favicon_base::IconType icon_type) {
   return favicon_url.icon_url == url &&
       ToChromeIconType(favicon_url.icon_type) == icon_type;
 }
@@ -82,11 +80,12 @@
 // Returns false if |bitmap_results| is empty.
 bool DoUrlsAndIconsMatch(
     const FaviconURL& favicon_url,
-    const std::vector<chrome::FaviconBitmapResult>& bitmap_results) {
+    const std::vector<favicon_base::FaviconBitmapResult>& bitmap_results) {
   if (bitmap_results.empty())
     return false;
 
-  const chrome::IconType icon_type = ToChromeIconType(favicon_url.icon_type);
+  const favicon_base::IconType icon_type =
+      ToChromeIconType(favicon_url.icon_type);
 
   for (size_t i = 0; i < bitmap_results.size(); ++i) {
     if (favicon_url.icon_url != bitmap_results[i].icon_url ||
@@ -108,12 +107,12 @@
 }
 
 // Return true if |bitmap_result| is expired.
-bool IsExpired(const chrome::FaviconBitmapResult& bitmap_result) {
+bool IsExpired(const favicon_base::FaviconBitmapResult& bitmap_result) {
   return bitmap_result.expired;
 }
 
 // Return true if |bitmap_result| is valid.
-bool IsValid(const chrome::FaviconBitmapResult& bitmap_result) {
+bool IsValid(const favicon_base::FaviconBitmapResult& bitmap_result) {
   return bitmap_result.is_valid();
 }
 
@@ -122,9 +121,9 @@
 // the scale factors in FaviconUtil::GetFaviconScaleFactors().
 bool HasExpiredOrIncompleteResult(
     int desired_size_in_dip,
-    const std::vector<chrome::FaviconBitmapResult>& bitmap_results) {
+    const std::vector<favicon_base::FaviconBitmapResult>& bitmap_results) {
   // Check if at least one of the bitmaps is expired.
-  std::vector<chrome::FaviconBitmapResult>::const_iterator it =
+  std::vector<favicon_base::FaviconBitmapResult>::const_iterator it =
       std::find_if(bitmap_results.begin(), bitmap_results.end(), IsExpired);
   if (it != bitmap_results.end())
     return true;
@@ -159,18 +158,56 @@
 
 // Returns true if at least one of |bitmap_results| is valid.
 bool HasValidResult(
-    const std::vector<chrome::FaviconBitmapResult>& bitmap_results) {
+    const std::vector<favicon_base::FaviconBitmapResult>& bitmap_results) {
   return std::find_if(bitmap_results.begin(), bitmap_results.end(), IsValid) !=
       bitmap_results.end();
 }
 
+// Returns the index of the entry with the largest area that is not larger than
+// |max_area|; -1 if there is no such match.
+int GetLargestSizeIndex(const std::vector<gfx::Size>& sizes, int max_area) {
+  DCHECK(!sizes.empty());
+  int ret = -1;
+  for (size_t i = 0; i < sizes.size(); ++i) {
+    int area = sizes[i].GetArea();
+    if ((ret == -1 || sizes[ret].GetArea() < area) && area <= max_area)
+      ret = i;
+  }
+  return ret;
+}
+
+// Return the index of a size which is same as the given |size|, -1 returned if
+// there is no such bitmap.
+int GetIndexBySize(const std::vector<gfx::Size>& sizes,
+                   const gfx::Size& size) {
+  DCHECK(!sizes.empty());
+  std::vector<gfx::Size>::const_iterator i =
+      std::find(sizes.begin(), sizes.end(), size);
+  if (i == sizes.end())
+    return -1;
+
+  return static_cast<int>(i - sizes.begin());
+}
+
+// Compare function used for std::stable_sort to sort as descend.
+bool CompareIconSize(const FaviconURL& b1, const FaviconURL& b2) {
+  int area1 = 0;
+  if (!b1.icon_sizes.empty())
+    area1 = b1.icon_sizes.front().GetArea();
+
+  int area2 = 0;
+  if (!b2.icon_sizes.empty())
+    area2 = b2.icon_sizes.front().GetArea();
+
+  return area1 > area2;
+}
+
 }  // namespace
 
 ////////////////////////////////////////////////////////////////////////////////
 
 FaviconHandler::DownloadRequest::DownloadRequest()
-    : icon_type(chrome::INVALID_ICON) {
-}
+    : icon_type(favicon_base::INVALID_ICON) {}
 
 FaviconHandler::DownloadRequest::~DownloadRequest() {
 }
@@ -178,18 +215,13 @@
 FaviconHandler::DownloadRequest::DownloadRequest(
     const GURL& url,
     const GURL& image_url,
-    chrome::IconType icon_type)
-    : url(url),
-      image_url(image_url),
-      icon_type(icon_type) {
-}
+    favicon_base::IconType icon_type)
+    : url(url), image_url(image_url), icon_type(icon_type) {}
 
 ////////////////////////////////////////////////////////////////////////////////
 
 FaviconHandler::FaviconCandidate::FaviconCandidate()
-    : score(0),
-      icon_type(chrome::INVALID_ICON) {
-}
+    : score(0), icon_type(favicon_base::INVALID_ICON) {}
 
 FaviconHandler::FaviconCandidate::~FaviconCandidate() {
 }
@@ -199,29 +231,28 @@
     const GURL& image_url,
     const gfx::Image& image,
     float score,
-    chrome::IconType icon_type)
+    favicon_base::IconType icon_type)
     : url(url),
       image_url(image_url),
       image(image),
       score(score),
-      icon_type(icon_type) {
-}
+      icon_type(icon_type) {}
 
 ////////////////////////////////////////////////////////////////////////////////
 
-FaviconHandler::FaviconHandler(Profile* profile,
-                               FaviconClient* client,
+FaviconHandler::FaviconHandler(FaviconClient* client,
                                FaviconHandlerDelegate* delegate,
-                               Type icon_type)
+                               Type icon_type,
+                               bool download_largest_icon)
     : got_favicon_from_history_(false),
       favicon_expired_or_incomplete_(false),
       icon_types_(icon_type == FAVICON
-                      ? chrome::FAVICON
-                      : chrome::TOUCH_ICON | chrome::TOUCH_PRECOMPOSED_ICON),
-      profile_(profile),
+                      ? favicon_base::FAVICON
+                      : favicon_base::TOUCH_ICON |
+                            favicon_base::TOUCH_PRECOMPOSED_ICON),
+      download_largest_icon_(download_largest_icon),
       client_(client),
       delegate_(delegate) {
-  DCHECK(profile_);
   DCHECK(delegate_);
 }
 
@@ -254,26 +285,49 @@
                                             const GURL& image_url,
                                             const gfx::Image& image,
                                             float score,
-                                            chrome::IconType icon_type) {
-  const bool exact_match = score == 1 || preferred_icon_size() == 0;
-  if (exact_match ||
-      best_favicon_candidate_.icon_type == chrome::INVALID_ICON ||
-      score > best_favicon_candidate_.score) {
+                                            favicon_base::IconType icon_type) {
+  bool replace_best_favicon_candidate = false;
+  bool exact_match = false;
+  if (download_largest_icon_) {
+    replace_best_favicon_candidate =
+        image.Size().GetArea() >
+        best_favicon_candidate_.image.Size().GetArea();
+
+    gfx::Size largest = best_favicon_candidate_.image.Size();
+    if (replace_best_favicon_candidate)
+      largest = image.Size();
+
+    // exact match (stop downloading next icon) only if
+    // - current candidate is only candidate.
+    // - next candidate doesn't have sizes attributes, in this case, the rest
+    //   candidates don't have sizes attribute either, stop downloading now,
+    //   otherwise, all favicon without sizes attribute are downloaded.
+    // - next candidate has sizes attribute and it is not larger than largest.
+    exact_match = image_urls_.size() == 1 ||
+        image_urls_[1].icon_sizes.empty() ||
+        image_urls_[1].icon_sizes[0].GetArea() < largest.GetArea();
+  } else {
+    exact_match = score == 1 || preferred_icon_size() == 0;
+    replace_best_favicon_candidate =
+        exact_match ||
+        best_favicon_candidate_.icon_type == favicon_base::INVALID_ICON ||
+        score > best_favicon_candidate_.score;
+  }
+  if (replace_best_favicon_candidate) {
     best_favicon_candidate_ = FaviconCandidate(
         url, image_url, image, score, icon_type);
   }
   return exact_match;
 }
 
-void FaviconHandler::SetFavicon(
-    const GURL& url,
-    const GURL& icon_url,
-    const gfx::Image& image,
-    chrome::IconType icon_type) {
+void FaviconHandler::SetFavicon(const GURL& url,
+                                const GURL& icon_url,
+                                const gfx::Image& image,
+                                favicon_base::IconType icon_type) {
   if (client_->GetFaviconService() && ShouldSaveFavicon(url))
     SetHistoryFavicons(url, icon_url, icon_type, image);
 
-  if (UrlMatches(url, url_) && icon_type == chrome::FAVICON) {
+  if (UrlMatches(url, url_) && icon_type == favicon_base::FAVICON) {
     NavigationEntry* entry = GetEntry();
     if (entry)
       SetFaviconOnNavigationEntry(entry, icon_url, image);
@@ -282,7 +336,8 @@
 
 void FaviconHandler::SetFaviconOnNavigationEntry(
     NavigationEntry* entry,
-    const std::vector<chrome::FaviconBitmapResult>& favicon_bitmap_results) {
+    const std::vector<favicon_base::FaviconBitmapResult>&
+        favicon_bitmap_results) {
   gfx::Image resized_image = FaviconUtil::SelectFaviconFramesFromPNGs(
       favicon_bitmap_results,
       FaviconUtil::GetFaviconScaleFactors(),
@@ -333,6 +388,9 @@
   if (!client_->GetFaviconService())
     return;
 
+  if (download_largest_icon_)
+    SortAndPruneImageUrls();
+
   ProcessCurrentUrl();
 }
 
@@ -340,13 +398,17 @@
   DCHECK(!image_urls_.empty());
 
   NavigationEntry* entry = GetEntry();
-  if (!entry)
+
+  // current_candidate() may return NULL if download_largest_icon_ is true and
+  // all the sizes are larger than the max.
+  if (!entry || !current_candidate())
     return;
 
   if (current_candidate()->icon_type == FaviconURL::FAVICON) {
     if (!favicon_expired_or_incomplete_ && entry->GetFavicon().valid &&
-        DoUrlAndIconMatch(*current_candidate(), entry->GetFavicon().url,
-                          chrome::FAVICON))
+        DoUrlAndIconMatch(*current_candidate(),
+                          entry->GetFavicon().url,
+                          favicon_base::FAVICON))
       return;
   } else if (!favicon_expired_or_incomplete_ && got_favicon_from_history_ &&
              HasValidResult(history_results_) &&
@@ -374,27 +436,51 @@
 
   if (current_candidate() &&
       DoUrlAndIconMatch(*current_candidate(), image_url, i->second.icon_type)) {
-    float score = 0.0f;
-    std::vector<ui::ScaleFactor> scale_factors =
-        FaviconUtil::GetFaviconScaleFactors();
-    gfx::Image image(SelectFaviconFrames(bitmaps,
-                                         original_bitmap_sizes,
-                                         scale_factors,
-                                         preferred_icon_size(),
-                                         &score));
-
-    // The downloaded icon is still valid when there is no FaviconURL update
-    // during the downloading.
     bool request_next_icon = true;
-    if (!bitmaps.empty()) {
-      request_next_icon = !UpdateFaviconCandidate(
-          i->second.url, image_url, image, score, i->second.icon_type);
+    float score = 0.0f;
+    gfx::ImageSkia image_skia;
+    if (download_largest_icon_ && !bitmaps.empty()) {
+      int index = -1;
+      int max_size = GetMaximalIconSize(i->second.icon_type);
+      // Use the largest bitmap if FaviconURL doesn't have sizes attribute.
+      if (current_candidate()->icon_sizes.empty()) {
+        index = GetLargestSizeIndex(original_bitmap_sizes, max_size * max_size);
+      } else {
+        index = GetIndexBySize(original_bitmap_sizes,
+                               current_candidate()->icon_sizes[0]);
+        // Find largest bitmap if there is no one exactly matched.
+        if (index == -1) {
+          index = GetLargestSizeIndex(original_bitmap_sizes,
+                                      max_size * max_size);
+        }
+      }
+      if (index != -1)
+        image_skia = gfx::ImageSkia(gfx::ImageSkiaRep(bitmaps[index], 1));
+    } else {
+      std::vector<ui::ScaleFactor> scale_factors =
+          FaviconUtil::GetFaviconScaleFactors();
+      image_skia = SelectFaviconFrames(bitmaps,
+                                       original_bitmap_sizes,
+                                       scale_factors,
+                                       preferred_icon_size(),
+                                       &score);
+    }
+
+    if (!image_skia.isNull()) {
+      gfx::Image image(image_skia);
+      // The downloaded icon is still valid when there is no FaviconURL update
+      // during the downloading.
+      if (!bitmaps.empty()) {
+        request_next_icon = !UpdateFaviconCandidate(
+            i->second.url, image_url, image, score, i->second.icon_type);
+      }
     }
     if (request_next_icon && GetEntry() && image_urls_.size() > 1) {
       // Remove the first member of image_urls_ and process the remaining.
-      image_urls_.pop_front();
+      image_urls_.erase(image_urls_.begin());
       ProcessCurrentUrl();
-    } else if (best_favicon_candidate_.icon_type != chrome::INVALID_ICON) {
+    } else if (best_favicon_candidate_.icon_type !=
+               favicon_base::INVALID_ICON) {
       // No more icons to request, set the favicon from the candidate.
       SetFavicon(best_favicon_candidate_.url,
                  best_favicon_candidate_.image_url,
@@ -430,7 +516,7 @@
 void FaviconHandler::UpdateFaviconMappingAndFetch(
     const GURL& page_url,
     const GURL& icon_url,
-    chrome::IconType icon_type,
+    favicon_base::IconType icon_type,
     const FaviconService::FaviconResultsCallback& callback,
     base::CancelableTaskTracker* tracker) {
   // TODO(pkotwicz): pass in all of |image_urls_| to
@@ -443,7 +529,7 @@
 
 void FaviconHandler::GetFaviconFromFaviconService(
     const GURL& icon_url,
-    chrome::IconType icon_type,
+    favicon_base::IconType icon_type,
     const FaviconService::FaviconResultsCallback& callback,
     base::CancelableTaskTracker* tracker) {
   client_->GetFaviconService()->GetFavicon(
@@ -464,7 +550,7 @@
 
 void FaviconHandler::SetHistoryFavicons(const GURL& page_url,
                                         const GURL& icon_url,
-                                        chrome::IconType icon_type,
+                                        favicon_base::IconType icon_type,
                                         const gfx::Image& image) {
   client_->GetFaviconService()->SetFavicons(
       page_url, icon_url, icon_type, image);
@@ -475,9 +561,7 @@
     return true;
 
   // Otherwise store the favicon if the page is bookmarked.
-  BookmarkService* bookmark_service =
-      BookmarkService::FromBrowserContext(profile_);
-  return bookmark_service && bookmark_service->IsBookmarked(url);
+  return client_->IsBookmarked(url);
 }
 
 void FaviconHandler::NotifyFaviconUpdated(bool icon_url_changed) {
@@ -485,7 +569,8 @@
 }
 
 void FaviconHandler::OnFaviconDataForInitialURLFromFaviconService(
-    const std::vector<chrome::FaviconBitmapResult>& favicon_bitmap_results) {
+    const std::vector<favicon_base::FaviconBitmapResult>&
+        favicon_bitmap_results) {
   NavigationEntry* entry = GetEntry();
   if (!entry)
     return;
@@ -497,7 +582,7 @@
   favicon_expired_or_incomplete_ = has_results && HasExpiredOrIncompleteResult(
       preferred_icon_size(), favicon_bitmap_results);
 
-  if (has_results && icon_types_ == chrome::FAVICON &&
+  if (has_results && icon_types_ == favicon_base::FAVICON &&
       !entry->GetFavicon().valid &&
       (!current_candidate() ||
        DoUrlsAndIconsMatch(*current_candidate(), favicon_bitmap_results))) {
@@ -540,7 +625,7 @@
 void FaviconHandler::DownloadFaviconOrAskFaviconService(
     const GURL& page_url,
     const GURL& icon_url,
-    chrome::IconType icon_type) {
+    favicon_base::IconType icon_type) {
   if (favicon_expired_or_incomplete_) {
     // We have the mapping, but the favicon is out of date. Download it now.
     ScheduleDownload(page_url, icon_url, icon_type);
@@ -567,8 +652,8 @@
   }
 }
 
-void FaviconHandler::OnFaviconData(
-    const std::vector<chrome::FaviconBitmapResult>& favicon_bitmap_results) {
+void FaviconHandler::OnFaviconData(const std::vector<
+    favicon_base::FaviconBitmapResult>& favicon_bitmap_results) {
   NavigationEntry* entry = GetEntry();
   if (!entry)
     return;
@@ -577,7 +662,7 @@
   bool has_expired_or_incomplete_result = HasExpiredOrIncompleteResult(
       preferred_icon_size(), favicon_bitmap_results);
 
-  if (has_results && icon_types_ == chrome::FAVICON) {
+  if (has_results && icon_types_ == favicon_base::FAVICON) {
     if (HasValidResult(favicon_bitmap_results)) {
       // There is a favicon, set it now. If expired we'll download the current
       // one again, but at least the user will get some icon instead of the
@@ -586,8 +671,8 @@
     }
     if (has_expired_or_incomplete_result) {
       // The favicon is out of date. Request the current one.
-      ScheduleDownload(entry->GetURL(), entry->GetFavicon().url,
-                       chrome::FAVICON);
+      ScheduleDownload(
+          entry->GetURL(), entry->GetFavicon().url, favicon_base::FAVICON);
     }
   } else if (current_candidate() &&
       (!has_results || has_expired_or_incomplete_result ||
@@ -600,10 +685,9 @@
   history_results_ = favicon_bitmap_results;
 }
 
-int FaviconHandler::ScheduleDownload(
-    const GURL& url,
-    const GURL& image_url,
-    chrome::IconType icon_type) {
+int FaviconHandler::ScheduleDownload(const GURL& url,
+                                     const GURL& image_url,
+                                     favicon_base::IconType icon_type) {
   // A max bitmap size is specified to avoid receiving huge bitmaps in
   // OnDidDownloadFavicon(). See FaviconHandlerDelegate::StartDownload()
   // for more details about the max bitmap size.
@@ -618,3 +702,25 @@
 
   return download_id;
 }
+
+void FaviconHandler::SortAndPruneImageUrls() {
+  for (std::vector<FaviconURL>::iterator i = image_urls_.begin();
+       i != image_urls_.end();) {
+    if (i->icon_sizes.empty()) {
+      ++i;
+      continue;
+    }
+    int max_size = GetMaximalIconSize(ToChromeIconType(i->icon_type));
+    int index = GetLargestSizeIndex(i->icon_sizes, max_size * max_size);
+    if (index == -1) {
+      i = image_urls_.erase(i);
+    } else {
+      gfx::Size largest = i->icon_sizes[index];
+      i->icon_sizes.clear();
+      i->icon_sizes.push_back(largest);
+      ++i;
+    }
+  }
+  std::stable_sort(image_urls_.begin(), image_urls_.end(),
+                   CompareIconSize);
+}
diff --git a/chrome/browser/favicon/favicon_handler.h b/chrome/browser/favicon/favicon_handler.h
index 94d3c5d..a9e1826 100644
--- a/chrome/browser/favicon/favicon_handler.h
+++ b/chrome/browser/favicon/favicon_handler.h
@@ -22,7 +22,6 @@
 
 class FaviconClient;
 class FaviconHandlerDelegate;
-class Profile;
 class SkBitmap;
 
 namespace base {
@@ -73,10 +72,12 @@
 // favicon.
 //
 // When the renderer downloads favicons, it considers the entire list of
-// favicon candidates and chooses the one that best matches the preferred size
-// (or the first one if there is no preferred size). Once the matching favicon
-// has been determined, SetFavicon is called which updates the favicon of the
-// NavigationEntry and notifies the database to save the favicon.
+// favicon candidates, if |download_largest_favicon_| is true, the largest
+// favicon will be used, otherwise the one that best matches the preferred size
+// is chosen (or the first one if there is no preferred  size). Once the
+// matching favicon has been determined, SetFavicon is called which updates
+// the favicon of the NavigationEntry and notifies the database to save the
+// favicon.
 
 class FaviconHandler {
  public:
@@ -85,10 +86,10 @@
     TOUCH,
   };
 
-  FaviconHandler(Profile* profile,
-                 FaviconClient* client,
+  FaviconHandler(FaviconClient* client,
                  FaviconHandlerDelegate* delegate,
-                 Type icon_type);
+                 Type icon_type,
+                 bool download_largest_icon);
   virtual ~FaviconHandler();
 
   // Initiates loading the favicon for the specified url.
@@ -115,7 +116,7 @@
       const std::vector<gfx::Size>& original_bitmap_sizes);
 
   // For testing.
-  const std::deque<content::FaviconURL>& image_urls() const {
+  const std::vector<content::FaviconURL>& image_urls() const {
     return image_urls_;
   }
 
@@ -134,13 +135,13 @@
   virtual void UpdateFaviconMappingAndFetch(
       const GURL& page_url,
       const GURL& icon_url,
-      chrome::IconType icon_type,
+      favicon_base::IconType icon_type,
       const FaviconService::FaviconResultsCallback& callback,
       base::CancelableTaskTracker* tracker);
 
   virtual void GetFaviconFromFaviconService(
       const GURL& icon_url,
-      chrome::IconType icon_type,
+      favicon_base::IconType icon_type,
       const FaviconService::FaviconResultsCallback& callback,
       base::CancelableTaskTracker* tracker);
 
@@ -152,7 +153,7 @@
 
   virtual void SetHistoryFavicons(const GURL& page_url,
                                   const GURL& icon_url,
-                                  chrome::IconType icon_type,
+                                  favicon_base::IconType icon_type,
                                   const gfx::Image& image);
 
   // Returns true if the favicon should be saved.
@@ -173,11 +174,11 @@
 
     DownloadRequest(const GURL& url,
                     const GURL& image_url,
-                    chrome::IconType icon_type);
+                    favicon_base::IconType icon_type);
 
     GURL url;
     GURL image_url;
-    chrome::IconType icon_type;
+    favicon_base::IconType icon_type;
   };
 
   // Used to track a candidate for the favicon.
@@ -189,54 +190,55 @@
                      const GURL& image_url,
                      const gfx::Image& image,
                      float score,
-                     chrome::IconType icon_type);
+                     favicon_base::IconType icon_type);
 
     GURL url;
     GURL image_url;
     gfx::Image image;
     float score;
-    chrome::IconType icon_type;
+    favicon_base::IconType icon_type;
   };
 
   // See description above class for details.
-  void OnFaviconDataForInitialURLFromFaviconService(
-      const std::vector<chrome::FaviconBitmapResult>& favicon_bitmap_results);
+  void OnFaviconDataForInitialURLFromFaviconService(const std::vector<
+      favicon_base::FaviconBitmapResult>& favicon_bitmap_results);
 
   // If the favicon has expired, asks the renderer to download the favicon.
   // Otherwise asks history to update the mapping between page url and icon
   // url with a callback to OnFaviconData when done.
   void DownloadFaviconOrAskFaviconService(const GURL& page_url,
                                           const GURL& icon_url,
-                                          chrome::IconType icon_type);
+                                          favicon_base::IconType icon_type);
 
   // See description above class for details.
-  void OnFaviconData(
-      const std::vector<chrome::FaviconBitmapResult>& favicon_bitmap_results);
+  void OnFaviconData(const std::vector<favicon_base::FaviconBitmapResult>&
+                         favicon_bitmap_results);
 
   // Schedules a download for the specified entry. This adds the request to
   // download_requests_.
   int ScheduleDownload(const GURL& url,
                        const GURL& image_url,
-                       chrome::IconType icon_type);
+                       favicon_base::IconType icon_type);
 
   // Updates |favicon_candidate_| and returns true if it is an exact match.
   bool UpdateFaviconCandidate(const GURL& url,
                               const GURL& image_url,
                               const gfx::Image& image,
                               float score,
-                              chrome::IconType icon_type);
+                              favicon_base::IconType icon_type);
 
   // Sets the image data for the favicon.
   void SetFavicon(const GURL& url,
                   const GURL& icon_url,
                   const gfx::Image& image,
-                  chrome::IconType icon_type);
+                  favicon_base::IconType icon_type);
 
   // Sets the favicon's data on the NavigationEntry.
   // If the WebContents has a delegate, it is invalidated (INVALIDATE_TYPE_TAB).
   void SetFaviconOnNavigationEntry(
       content::NavigationEntry* entry,
-      const std::vector<chrome::FaviconBitmapResult>& favicon_bitmap_results);
+      const std::vector<favicon_base::FaviconBitmapResult>&
+          favicon_bitmap_results);
   void SetFaviconOnNavigationEntry(content::NavigationEntry* entry,
                                    const GURL& icon_url,
                                    const gfx::Image& image);
@@ -248,14 +250,17 @@
 
   // Returns the preferred size of the image. 0 means no preference (any size
   // will do).
-  int preferred_icon_size() {
-#if defined(OS_ANDROID)
-    return 0;
-#else
-    return icon_types_ == chrome::FAVICON ? gfx::kFaviconSize : 0;
-#endif
+  int preferred_icon_size() const {
+    if (download_largest_icon_)
+      return 0;
+    return icon_types_ == favicon_base::FAVICON ? gfx::kFaviconSize : 0;
   }
 
+  // Sorts the entries in |image_urls_| by icon size in descending order.
+  // Additionally removes any entries whose sizes are all greater than the max
+  // allowed size.
+  void SortAndPruneImageUrls();
+
   // Used for FaviconService requests.
   base::CancelableTaskTracker cancelable_task_tracker_;
 
@@ -278,14 +283,14 @@
   // The combination of the supported icon types.
   const int icon_types_;
 
+  // Whether the largest icon should be downloaded.
+  const bool download_largest_icon_;
+
   // The prioritized favicon candidates from the page back from the renderer.
-  std::deque<content::FaviconURL> image_urls_;
+  std::vector<content::FaviconURL> image_urls_;
 
   // The FaviconBitmapResults from history.
-  std::vector<chrome::FaviconBitmapResult> history_results_;
-
-  // The Profile associated with this handler.
-  Profile* profile_;
+  std::vector<favicon_base::FaviconBitmapResult> history_results_;
 
   // The client which implements embedder-specific Favicon operations.
   FaviconClient* client_;  // weak
diff --git a/chrome/browser/favicon/favicon_handler_unittest.cc b/chrome/browser/favicon/favicon_handler_unittest.cc
index 840185c..a583065 100644
--- a/chrome/browser/favicon/favicon_handler_unittest.cc
+++ b/chrome/browser/favicon/favicon_handler_unittest.cc
@@ -49,12 +49,12 @@
 
 void SetFaviconBitmapResult(
     const GURL& icon_url,
-    chrome::IconType icon_type,
+    favicon_base::IconType icon_type,
     bool expired,
-    std::vector<chrome::FaviconBitmapResult>* favicon_bitmap_results) {
+    std::vector<favicon_base::FaviconBitmapResult>* favicon_bitmap_results) {
   scoped_refptr<base::RefCountedBytes> data(new base::RefCountedBytes());
   FillBitmap(gfx::kFaviconSize, gfx::kFaviconSize, &data->data());
-  chrome::FaviconBitmapResult bitmap_result;
+  favicon_base::FaviconBitmapResult bitmap_result;
   bitmap_result.expired = expired;
   bitmap_result.bitmap_data = data;
   // Use a pixel size other than (0,0) as (0,0) has a special meaning.
@@ -67,8 +67,10 @@
 
 void SetFaviconBitmapResult(
     const GURL& icon_url,
-    std::vector<chrome::FaviconBitmapResult>* favicon_bitmap_results) {
-  SetFaviconBitmapResult(icon_url, chrome::FAVICON, false /* expired */,
+    std::vector<favicon_base::FaviconBitmapResult>* favicon_bitmap_results) {
+  SetFaviconBitmapResult(icon_url,
+                         favicon_base::FAVICON,
+                         false /* expired */,
                          favicon_bitmap_results);
 }
 
@@ -92,10 +94,10 @@
   void AddDownload(
       int download_id,
       const GURL& image_url,
-      int image_size,
+      const std::vector<int>& image_sizes,
       int max_image_size) {
     download_.reset(new Download(
-        download_id, image_url, image_size, max_image_size, false));
+        download_id, image_url, image_sizes, max_image_size, false));
   }
 
   void InvokeCallback();
@@ -104,19 +106,24 @@
 
   bool HasDownload() const { return download_.get() != NULL; }
   const GURL& GetImageUrl() const { return download_->image_url; }
-  void SetImageSize(int size) { download_->image_size = size; }
+  void SetImageSizes(const std::vector<int>& sizes) {
+    download_->image_sizes = sizes; }
 
  private:
   struct Download {
-    Download(int id, GURL url, int size, int max_size, bool failed)
+    Download(int id,
+             GURL url,
+             const std::vector<int>& sizes,
+             int max_size,
+             bool failed)
         : download_id(id),
           image_url(url),
-          image_size(size),
+          image_sizes(sizes),
           max_image_size(max_size) {}
     ~Download() {}
     int download_id;
     GURL image_url;
-    int image_size;
+    std::vector<int> image_sizes;
     int max_image_size;
   };
 
@@ -144,11 +151,13 @@
   HistoryRequestHandler(const GURL& page_url,
                         const GURL& icon_url,
                         int icon_type,
-                        const std::vector<unsigned char>& bitmap_data)
+                        const std::vector<unsigned char>& bitmap_data,
+                        const gfx::Size& size)
       : page_url_(page_url),
         icon_url_(icon_url),
         icon_type_(icon_type),
-        bitmap_data_(bitmap_data) {
+        bitmap_data_(bitmap_data),
+        size_(size) {
   }
 
   virtual ~HistoryRequestHandler() {}
@@ -158,7 +167,8 @@
   const GURL icon_url_;
   const int icon_type_;
   const std::vector<unsigned char> bitmap_data_;
-  std::vector<chrome::FaviconBitmapResult> history_results_;
+  const gfx::Size size_;
+  std::vector<favicon_base::FaviconBitmapResult> history_results_;
   FaviconService::FaviconResultsCallback callback_;
 
  private:
@@ -169,10 +179,14 @@
 
 class TestFaviconClient : public FaviconClient {
  public:
+  virtual ~TestFaviconClient() {};
+
   virtual FaviconService* GetFaviconService() OVERRIDE {
     // Just give none NULL value, so overridden methods can be hit.
     return (FaviconService*)(1);
   }
+
+  virtual bool IsBookmarked(const GURL& url) OVERRIDE { return false; }
 };
 
 class TestFaviconHandlerDelegate : public FaviconHandlerDelegate {
@@ -213,11 +227,12 @@
 class TestFaviconHandler : public FaviconHandler {
  public:
   TestFaviconHandler(const GURL& page_url,
-                     Profile* profile,
                      FaviconClient* client,
                      FaviconHandlerDelegate* delegate,
-                     Type type)
-      : FaviconHandler(profile, client, delegate, type),
+                     Type type,
+                     bool download_largest_icon)
+                     : FaviconHandler(client, delegate, type,
+                                      download_largest_icon),
         entry_(NavigationEntry::Create()),
         download_id_(0),
         num_favicon_updates_(0) {
@@ -254,7 +269,7 @@
     return entry_.get();
   }
 
-  const std::deque<FaviconURL>& urls() {
+  const std::vector<FaviconURL>& urls() {
     return image_urls_;
   }
 
@@ -262,11 +277,15 @@
     return FaviconHandler::current_candidate();
   }
 
+  const FaviconCandidate& best_favicon_candidate() {
+    return best_favicon_candidate_;
+  }
+
  protected:
   virtual void UpdateFaviconMappingAndFetch(
       const GURL& page_url,
       const GURL& icon_url,
-      chrome::IconType icon_type,
+      favicon_base::IconType icon_type,
       const FaviconService::FaviconResultsCallback& callback,
       base::CancelableTaskTracker* tracker) OVERRIDE {
     history_handler_.reset(new HistoryRequestHandler(page_url, icon_url,
@@ -275,7 +294,7 @@
 
   virtual void GetFaviconFromFaviconService(
       const GURL& icon_url,
-      chrome::IconType icon_type,
+      favicon_base::IconType icon_type,
       const FaviconService::FaviconResultsCallback& callback,
       base::CancelableTaskTracker* tracker) OVERRIDE {
     history_handler_.reset(new HistoryRequestHandler(GURL(), icon_url,
@@ -294,20 +313,22 @@
   virtual int DownloadFavicon(const GURL& image_url,
                               int max_bitmap_size) OVERRIDE {
     download_id_++;
+    std::vector<int> sizes;
+    sizes.push_back(0);
     download_handler_->AddDownload(
-        download_id_, image_url, 0, max_bitmap_size);
+        download_id_, image_url, sizes, max_bitmap_size);
     return download_id_;
   }
 
   virtual void SetHistoryFavicons(const GURL& page_url,
                                   const GURL& icon_url,
-                                  chrome::IconType icon_type,
+                                  favicon_base::IconType icon_type,
                                   const gfx::Image& image) OVERRIDE {
     scoped_refptr<base::RefCountedMemory> bytes = image.As1xPNGBytes();
     std::vector<unsigned char> bitmap_data(bytes->front(),
                                            bytes->front() + bytes->size());
     history_handler_.reset(new HistoryRequestHandler(
-        page_url, icon_url, icon_type, bitmap_data));
+        page_url, icon_url, icon_type, bitmap_data, image.Size()));
   }
 
   virtual bool ShouldSaveFavicon(const GURL& url) OVERRIDE {
@@ -345,20 +366,22 @@
 }
 
 void DownloadHandler::InvokeCallback() {
-  int original_size = (download_->image_size > 0) ?
-      download_->image_size : gfx::kFaviconSize;
-  int downloaded_size = original_size;
-  if (download_->max_image_size != 0 &&
-      downloaded_size > download_->max_image_size) {
-    downloaded_size = download_->max_image_size;
-  }
-  std::vector<SkBitmap> bitmaps;
   std::vector<gfx::Size> original_bitmap_sizes;
+  std::vector<SkBitmap> bitmaps;
   if (!failed_) {
-    SkBitmap bitmap;
-    FillDataToBitmap(downloaded_size, downloaded_size, &bitmap);
-    bitmaps.push_back(bitmap);
-    original_bitmap_sizes.push_back(gfx::Size(original_size, original_size));
+    for (std::vector<int>::const_iterator i = download_->image_sizes.begin();
+         i != download_->image_sizes.end(); ++i) {
+      int original_size = (*i > 0) ? *i : gfx::kFaviconSize;
+      int downloaded_size = original_size;
+      if (download_->max_image_size != 0 &&
+          downloaded_size > download_->max_image_size) {
+        downloaded_size = download_->max_image_size;
+      }
+      SkBitmap bitmap;
+      FillDataToBitmap(downloaded_size, downloaded_size, &bitmap);
+      bitmaps.push_back(bitmap);
+      original_bitmap_sizes.push_back(gfx::Size(original_size, original_size));
+    }
   }
   favicon_helper_->OnDidDownloadFavicon(download_->download_id,
                                         download_->image_url,
@@ -385,12 +408,7 @@
       const GURL& page_url,
       const std::vector<FaviconURL>& candidate_icons,
       const int* candidate_icon_sizes) {
-    favicon_handler->ResetNumFaviconUpdateNotifications();
-
-    favicon_handler->FetchFavicon(page_url);
-    favicon_handler->history_handler()->InvokeCallback();
-
-    favicon_handler->OnUpdateFaviconURL(0, candidate_icons);
+    UpdateFaviconURL(favicon_handler, page_url, candidate_icons);
     EXPECT_EQ(candidate_icons.size(), favicon_handler->image_urls().size());
 
     DownloadHandler* download_handler = favicon_handler->download_handler();
@@ -400,7 +418,9 @@
       ASSERT_TRUE(download_handler->HasDownload());
       EXPECT_EQ(download_handler->GetImageUrl(),
                 candidate_icons[i].icon_url);
-      download_handler->SetImageSize(candidate_icon_sizes[i]);
+      std::vector<int> sizes;
+      sizes.push_back(candidate_icon_sizes[i]);
+      download_handler->SetImageSizes(sizes);
       download_handler->InvokeCallback();
 
       if (favicon_handler->num_favicon_update_notifications())
@@ -408,6 +428,18 @@
     }
   }
 
+  void UpdateFaviconURL(
+      TestFaviconHandler* favicon_handler,
+      const GURL& page_url,
+      const std::vector<FaviconURL>& candidate_icons) {
+    favicon_handler->ResetNumFaviconUpdateNotifications();
+
+    favicon_handler->FetchFavicon(page_url);
+    favicon_handler->history_handler()->InvokeCallback();
+
+    favicon_handler->OnUpdateFaviconURL(0, candidate_icons);
+  }
+
   virtual void SetUp() {
     // The score computed by SelectFaviconFrames() is dependent on the supported
     // scale factors of the platform. It is used for determining the goodness of
@@ -443,10 +475,8 @@
 
   TestFaviconHandlerDelegate delegate;
   TestFaviconClient client;
-  Profile* profile = Profile::FromBrowserContext(
-      web_contents()->GetBrowserContext());
   TestFaviconHandler helper(
-      page_url, profile, &client, &delegate, FaviconHandler::FAVICON);
+      page_url, &client, &delegate, FaviconHandler::FAVICON, false);
 
   helper.FetchFavicon(page_url);
   HistoryRequestHandler* history_handler = helper.history_handler();
@@ -454,7 +484,7 @@
   ASSERT_TRUE(history_handler);
   EXPECT_EQ(page_url, history_handler->page_url_);
   EXPECT_EQ(GURL(), history_handler->icon_url_);
-  EXPECT_EQ(chrome::FAVICON, history_handler->icon_type_);
+  EXPECT_EQ(favicon_base::FAVICON, history_handler->icon_type_);
 
   SetFaviconBitmapResult(icon_url, &history_handler->history_results_);
 
@@ -486,10 +516,8 @@
 
   TestFaviconHandlerDelegate delegate;
   TestFaviconClient client;
-  Profile* profile = Profile::FromBrowserContext(
-      web_contents()->GetBrowserContext());
   TestFaviconHandler helper(
-      page_url, profile, &client, &delegate, FaviconHandler::FAVICON);
+      page_url, &client, &delegate, FaviconHandler::FAVICON, false);
 
   helper.FetchFavicon(page_url);
   HistoryRequestHandler* history_handler = helper.history_handler();
@@ -497,10 +525,12 @@
   ASSERT_TRUE(history_handler);
   EXPECT_EQ(page_url, history_handler->page_url_);
   EXPECT_EQ(GURL(), history_handler->icon_url_);
-  EXPECT_EQ(chrome::FAVICON, history_handler->icon_type_);
+  EXPECT_EQ(favicon_base::FAVICON, history_handler->icon_type_);
 
   // Set icon data expired
-  SetFaviconBitmapResult(icon_url, chrome::FAVICON, true /* expired */,
+  SetFaviconBitmapResult(icon_url,
+                         favicon_base::FAVICON,
+                         true /* expired */,
                          &history_handler->history_results_);
   // Send history response.
   history_handler->InvokeCallback();
@@ -556,10 +586,8 @@
 
   TestFaviconHandlerDelegate delegate;
   TestFaviconClient client;
-  Profile* profile = Profile::FromBrowserContext(
-      web_contents()->GetBrowserContext());
   TestFaviconHandler helper(
-      page_url, profile, &client, &delegate, FaviconHandler::FAVICON);
+      page_url, &client, &delegate, FaviconHandler::FAVICON, false);
 
   helper.FetchFavicon(page_url);
   HistoryRequestHandler* history_handler = helper.history_handler();
@@ -567,7 +595,7 @@
   ASSERT_TRUE(history_handler);
   EXPECT_EQ(page_url, history_handler->page_url_);
   EXPECT_EQ(GURL(), history_handler->icon_url_);
-  EXPECT_EQ(chrome::FAVICON, history_handler->icon_type_);
+  EXPECT_EQ(favicon_base::FAVICON, history_handler->icon_type_);
 
   // Set valid icon data.
   SetFaviconBitmapResult(icon_url, &history_handler->history_results_);
@@ -640,10 +668,8 @@
 
   TestFaviconHandlerDelegate delegate;
   TestFaviconClient client;
-  Profile* profile = Profile::FromBrowserContext(
-      web_contents()->GetBrowserContext());
   TestFaviconHandler helper(
-      page_url, profile, &client, &delegate, FaviconHandler::FAVICON);
+      page_url, &client, &delegate, FaviconHandler::FAVICON, false);
 
   helper.FetchFavicon(page_url);
   HistoryRequestHandler* history_handler = helper.history_handler();
@@ -651,15 +677,15 @@
   ASSERT_TRUE(history_handler);
   EXPECT_EQ(page_url, history_handler->page_url_);
   EXPECT_EQ(GURL(), history_handler->icon_url_);
-  EXPECT_EQ(chrome::FAVICON, history_handler->icon_type_);
+  EXPECT_EQ(favicon_base::FAVICON, history_handler->icon_type_);
 
   // Set non empty but invalid data.
-  chrome::FaviconBitmapResult bitmap_result;
+  favicon_base::FaviconBitmapResult bitmap_result;
   bitmap_result.expired = false;
   // Empty bitmap data is invalid.
   bitmap_result.bitmap_data = new base::RefCountedBytes();
   bitmap_result.pixel_size = gfx::Size(gfx::kFaviconSize, gfx::kFaviconSize);
-  bitmap_result.icon_type = chrome::FAVICON;
+  bitmap_result.icon_type = favicon_base::FAVICON;
   bitmap_result.icon_url = icon_url;
   history_handler->history_results_.clear();
   history_handler->history_results_.push_back(bitmap_result);
@@ -715,10 +741,8 @@
 
   TestFaviconHandlerDelegate delegate;
   TestFaviconClient client;
-  Profile* profile = Profile::FromBrowserContext(
-      web_contents()->GetBrowserContext());
   TestFaviconHandler helper(
-      page_url, profile, &client, &delegate, FaviconHandler::FAVICON);
+      page_url, &client, &delegate, FaviconHandler::FAVICON, false);
 
   helper.FetchFavicon(page_url);
   HistoryRequestHandler* history_handler = helper.history_handler();
@@ -726,7 +750,7 @@
   ASSERT_TRUE(history_handler);
   EXPECT_EQ(page_url, history_handler->page_url_);
   EXPECT_EQ(GURL(), history_handler->icon_url_);
-  EXPECT_EQ(chrome::FAVICON, history_handler->icon_type_);
+  EXPECT_EQ(favicon_base::FAVICON, history_handler->icon_type_);
 
   SetFaviconBitmapResult(icon_url, &history_handler->history_results_);
 
@@ -779,10 +803,8 @@
 
   TestFaviconHandlerDelegate delegate;
   TestFaviconClient client;
-  Profile* profile = Profile::FromBrowserContext(
-      web_contents()->GetBrowserContext());
   TestFaviconHandler helper(
-      page_url, profile, &client, &delegate, FaviconHandler::TOUCH);
+      page_url, &client, &delegate, FaviconHandler::TOUCH, false);
 
   helper.FetchFavicon(page_url);
   HistoryRequestHandler* history_handler = helper.history_handler();
@@ -790,7 +812,7 @@
   ASSERT_TRUE(history_handler);
   EXPECT_EQ(page_url, history_handler->page_url_);
   EXPECT_EQ(GURL(), history_handler->icon_url_);
-  EXPECT_EQ(chrome::TOUCH_PRECOMPOSED_ICON | chrome::TOUCH_ICON,
+  EXPECT_EQ(favicon_base::TOUCH_PRECOMPOSED_ICON | favicon_base::TOUCH_ICON,
             history_handler->icon_type_);
 
   // Icon not found.
@@ -864,8 +886,10 @@
   download_handler->Reset();
 
   // Simulates getting a expired icon from history.
-  SetFaviconBitmapResult(new_icon_url, chrome::TOUCH_ICON,
-      true /* expired */, &history_handler->history_results_);
+  SetFaviconBitmapResult(new_icon_url,
+                         favicon_base::TOUCH_ICON,
+                         true /* expired */,
+                         &history_handler->history_results_);
   history_handler->InvokeCallback();
 
   // Verify the download request.
@@ -893,10 +917,8 @@
 
   TestFaviconHandlerDelegate delegate;
   TestFaviconClient client;
-  Profile* profile = Profile::FromBrowserContext(
-      web_contents()->GetBrowserContext());
   TestFaviconHandler helper(
-      page_url, profile, &client, &delegate, FaviconHandler::TOUCH);
+      page_url, &client, &delegate, FaviconHandler::TOUCH, false);
 
   helper.FetchFavicon(page_url);
   HistoryRequestHandler* history_handler = helper.history_handler();
@@ -904,7 +926,7 @@
   ASSERT_TRUE(history_handler);
   EXPECT_EQ(page_url, history_handler->page_url_);
   EXPECT_EQ(GURL(), history_handler->icon_url_);
-  EXPECT_EQ(chrome::TOUCH_PRECOMPOSED_ICON | chrome::TOUCH_ICON,
+  EXPECT_EQ(favicon_base::TOUCH_PRECOMPOSED_ICON | favicon_base::TOUCH_ICON,
             history_handler->icon_type_);
 
   // Icon not found.
@@ -989,10 +1011,12 @@
 
   // Simulates getting the icon from history.
   scoped_ptr<HistoryRequestHandler> handler;
-  handler.reset(new HistoryRequestHandler(page_url, latest_icon_url,
-                                          chrome::TOUCH_ICON, callback));
-  SetFaviconBitmapResult(latest_icon_url, chrome::TOUCH_ICON,
-      false /* expired */, &handler->history_results_);
+  handler.reset(new HistoryRequestHandler(
+      page_url, latest_icon_url, favicon_base::TOUCH_ICON, callback));
+  SetFaviconBitmapResult(latest_icon_url,
+                         favicon_base::TOUCH_ICON,
+                         false /* expired */,
+                         &handler->history_results_);
   handler->InvokeCallback();
 
   // No download request.
@@ -1031,15 +1055,13 @@
   scale_factors.push_back(ui::SCALE_FACTOR_200P);
   ui::test::ScopedSetSupportedScaleFactors scoped_supported(scale_factors);
 
-  Profile* profile = Profile::FromBrowserContext(
-      web_contents()->GetBrowserContext());
-
   // 1) Test that if there are several single resolution favicons to choose from
   // that the largest exact match is chosen.
   TestFaviconHandlerDelegate delegate1;
   TestFaviconClient client;
   TestFaviconHandler handler1(
-      kPageURL, profile, &client, &delegate1, FaviconHandler::FAVICON);
+      kPageURL, &client, &delegate1, FaviconHandler::FAVICON, false);
+
   const int kSizes1[] = { 16, 24, 32, 48, 256 };
   std::vector<FaviconURL> urls1(kSourceIconURLs,
                                 kSourceIconURLs + arraysize(kSizes1));
@@ -1060,7 +1082,8 @@
   // from, the exact match is preferred even if it results in upsampling.
   TestFaviconHandlerDelegate delegate2;
   TestFaviconHandler handler2(
-      kPageURL, profile, &client, &delegate2, FaviconHandler::FAVICON);
+      kPageURL, &client, &delegate2, FaviconHandler::FAVICON, false);
+
   const int kSizes2[] = { 16, 24, 48, 256 };
   std::vector<FaviconURL> urls2(kSourceIconURLs,
                                 kSourceIconURLs + arraysize(kSizes2));
@@ -1075,7 +1098,8 @@
   // a little are preferred over huge favicons.
   TestFaviconHandlerDelegate delegate3;
   TestFaviconHandler handler3(
-      kPageURL, profile, &client, &delegate3, FaviconHandler::FAVICON);
+      kPageURL, &client, &delegate3, FaviconHandler::FAVICON, false);
+
   const int kSizes3[] = { 256, 48 };
   std::vector<FaviconURL> urls3(kSourceIconURLs,
                                 kSourceIconURLs + arraysize(kSizes3));
@@ -1088,7 +1112,8 @@
 
   TestFaviconHandlerDelegate delegate4;
   TestFaviconHandler handler4(
-      kPageURL, profile, &client, &delegate4, FaviconHandler::FAVICON);
+      kPageURL, &client, &delegate4, FaviconHandler::FAVICON, false);
+
   const int kSizes4[] = { 17, 256 };
   std::vector<FaviconURL> urls4(kSourceIconURLs,
                                 kSourceIconURLs + arraysize(kSizes4));
@@ -1102,6 +1127,293 @@
 
 #endif
 
+TEST_F(FaviconHandlerTest, TestSortFavicon) {
+  const GURL kPageURL("http://www.google.com");
+  std::vector<gfx::Size> icon1;
+  icon1.push_back(gfx::Size(1024, 1024));
+  icon1.push_back(gfx::Size(512, 512));
+
+  std::vector<gfx::Size> icon2;
+  icon2.push_back(gfx::Size(15, 15));
+  icon2.push_back(gfx::Size(16, 16));
+
+  std::vector<gfx::Size> icon3;
+  icon3.push_back(gfx::Size(16, 16));
+  icon3.push_back(gfx::Size(14, 14));
+
+  const FaviconURL kSourceIconURLs[] = {
+      FaviconURL(GURL("http://www.google.com/a"),
+                 FaviconURL::FAVICON,
+                 icon1),
+      FaviconURL(GURL("http://www.google.com/b"),
+                 FaviconURL::FAVICON,
+                 icon2),
+      FaviconURL(GURL("http://www.google.com/c"),
+                 FaviconURL::FAVICON,
+                 icon3),
+      FaviconURL(GURL("http://www.google.com/d"),
+                 FaviconURL::FAVICON,
+                 std::vector<gfx::Size>()),
+      FaviconURL(GURL("http://www.google.com/e"),
+                 FaviconURL::FAVICON,
+                 std::vector<gfx::Size>())};
+
+  TestFaviconClient client;
+  TestFaviconHandlerDelegate delegate1;
+  TestFaviconHandler handler1(
+      kPageURL, &client, &delegate1, FaviconHandler::FAVICON, true);
+  std::vector<FaviconURL> urls1(kSourceIconURLs,
+                                kSourceIconURLs + arraysize(kSourceIconURLs));
+  UpdateFaviconURL(&handler1, kPageURL, urls1);
+
+  struct ExpectedResult {
+    // The favicon's index in kSourceIconURLs.
+    size_t favicon_index;
+    // Width of largest bitmap.
+    int width;
+  } results[] = {
+    // First is icon1
+    // The 16x16 is largest.
+    {1, 16},
+    // Second is iocn2 though it has same size as icon1.
+    // The 16x16 is largest.
+    {2, 16},
+    // The rest of bitmaps come in order, there is no sizes attribute.
+    {3, -1},
+    {4, -1},
+  };
+  const std::vector<FaviconURL>& icons = handler1.image_urls();
+  ASSERT_EQ(4u, icons.size());
+  for (size_t i = 0; i < 4; ++i) {
+    EXPECT_EQ(kSourceIconURLs[results[i].favicon_index].icon_url,
+              icons[i].icon_url);
+    if (results[i].width != -1)
+      EXPECT_EQ(results[i].width, icons[i].icon_sizes[0].width());
+  }
+}
+
+TEST_F(FaviconHandlerTest, TestDownloadLargestFavicon) {
+  const GURL kPageURL("http://www.google.com");
+  std::vector<gfx::Size> too_large;
+  too_large.push_back(gfx::Size(1024, 1024));
+  too_large.push_back(gfx::Size(512, 512));
+
+  std::vector<gfx::Size> one_icon;
+  one_icon.push_back(gfx::Size(15, 15));
+  one_icon.push_back(gfx::Size(512, 512));
+
+  std::vector<gfx::Size> two_icons;
+  two_icons.push_back(gfx::Size(16, 16));
+  two_icons.push_back(gfx::Size(14, 14));
+
+  const FaviconURL kSourceIconURLs[] = {
+      FaviconURL(GURL("http://www.google.com/a"),
+                 FaviconURL::FAVICON,
+                 too_large),
+      FaviconURL(GURL("http://www.google.com/b"),
+                 FaviconURL::FAVICON,
+                 one_icon),
+      FaviconURL(GURL("http://www.google.com/c"),
+                 FaviconURL::FAVICON,
+                 two_icons),
+      FaviconURL(GURL("http://www.google.com/d"),
+                 FaviconURL::FAVICON,
+                 std::vector<gfx::Size>()),
+      FaviconURL(GURL("http://www.google.com/e"),
+                 FaviconURL::FAVICON,
+                 std::vector<gfx::Size>())};
+
+  TestFaviconClient client;
+  TestFaviconHandlerDelegate delegate1;
+  TestFaviconHandler handler1(
+      kPageURL, &client, &delegate1, FaviconHandler::FAVICON, true);
+  std::vector<FaviconURL> urls1(kSourceIconURLs,
+                                kSourceIconURLs + arraysize(kSourceIconURLs));
+  UpdateFaviconURL(&handler1, kPageURL, urls1);
+
+  // Simulate the download failed, to check whether the icons were requested
+  // to download according their size.
+  struct ExpectedResult {
+    // The size of image_urls_.
+    size_t image_urls_size;
+    // The favicon's index in kSourceIconURLs.
+    size_t favicon_index;
+    // Width of largest bitmap.
+    int width;
+  } results[] = {
+    // The 1024x1024 and 512x512 icons were dropped as it excceeds maximal size,
+    // image_urls_ is 4 elements.
+    // The 16x16 is largest.
+    {4, 2, 16},
+    // The 16x16 was dropped.
+    // The 15x15 is largest.
+    {3, 1, 15},
+    // The rest of bitmaps come in order.
+    {2, 3, -1},
+    {1, 4, -1},
+  };
+
+  for (int i = 0; i < 4; ++i) {
+    ASSERT_EQ(results[i].image_urls_size, handler1.image_urls().size());
+    EXPECT_EQ(kSourceIconURLs[results[i].favicon_index].icon_url,
+              handler1.current_candidate()->icon_url);
+    if (results[i].width != -1) {
+      EXPECT_EQ(results[i].width, handler1.current_candidate()->
+                icon_sizes[0].width());
+    }
+
+    // Simulate no favicon from history.
+    handler1.history_handler()->history_results_.clear();
+    handler1.history_handler()->InvokeCallback();
+
+    // Verify download request
+    ASSERT_TRUE(handler1.download_handler()->HasDownload());
+    EXPECT_EQ(kSourceIconURLs[results[i].favicon_index].icon_url,
+              handler1.download_handler()->GetImageUrl());
+
+    // Simulate the download failed.
+    handler1.download_handler()->set_failed(true);
+    handler1.download_handler()->InvokeCallback();
+  }
+}
+
+TEST_F(FaviconHandlerTest, TestSelectLargestFavicon) {
+  const GURL kPageURL("http://www.google.com");
+
+  std::vector<gfx::Size> one_icon;
+  one_icon.push_back(gfx::Size(15, 15));
+
+  std::vector<gfx::Size> two_icons;
+  two_icons.push_back(gfx::Size(14, 14));
+  two_icons.push_back(gfx::Size(16, 16));
+
+  const FaviconURL kSourceIconURLs[] = {
+      FaviconURL(GURL("http://www.google.com/b"),
+                 FaviconURL::FAVICON,
+                 one_icon),
+      FaviconURL(GURL("http://www.google.com/c"),
+                 FaviconURL::FAVICON,
+                 two_icons)};
+
+  TestFaviconClient client;
+  TestFaviconHandlerDelegate delegate1;
+  TestFaviconHandler handler1(
+      kPageURL, &client, &delegate1, FaviconHandler::FAVICON, true);
+  std::vector<FaviconURL> urls1(kSourceIconURLs,
+                                kSourceIconURLs + arraysize(kSourceIconURLs));
+  UpdateFaviconURL(&handler1, kPageURL, urls1);
+
+  ASSERT_EQ(2u, handler1.urls().size());
+
+  // Index of largest favicon in kSourceIconURLs.
+  size_t i = 1;
+  // The largest bitmap's index in Favicon .
+  int b = 1;
+
+  // Verify the icon_bitmaps_ was initialized correctly.
+  EXPECT_EQ(kSourceIconURLs[i].icon_url,
+            handler1.current_candidate()->icon_url);
+  EXPECT_EQ(kSourceIconURLs[i].icon_sizes[b],
+            handler1.current_candidate()->icon_sizes[0]);
+
+  // Simulate no favicon from history.
+  handler1.history_handler()->history_results_.clear();
+  handler1.history_handler()->InvokeCallback();
+
+  // Verify download request
+  ASSERT_TRUE(handler1.download_handler()->HasDownload());
+  EXPECT_EQ(kSourceIconURLs[i].icon_url,
+            handler1.download_handler()->GetImageUrl());
+
+  // Give the correct download result.
+  std::vector<int> sizes;
+  for (std::vector<gfx::Size>::const_iterator j =
+           kSourceIconURLs[i].icon_sizes.begin();
+       j != kSourceIconURLs[i].icon_sizes.end(); ++j)
+    sizes.push_back(j->width());
+
+  handler1.download_handler()->SetImageSizes(sizes);
+  handler1.download_handler()->InvokeCallback();
+
+  // Verify the largest bitmap has been saved into history.
+  EXPECT_EQ(kSourceIconURLs[i].icon_url, handler1.history_handler()->icon_url_);
+  EXPECT_EQ(kSourceIconURLs[i].icon_sizes[b],
+            handler1.history_handler()->size_);
+}
+
+TEST_F(FaviconHandlerTest, TestKeepDownloadedLargestFavicon) {
+  const GURL kPageURL("http://www.google.com");
+
+  std::vector<gfx::Size> icon1;
+  icon1.push_back(gfx::Size(16, 16));
+  const int actual_size1 = 10;
+
+  std::vector<gfx::Size> icon2;
+  icon2.push_back(gfx::Size(15, 15));
+  const int actual_size2 = 12;
+
+  const FaviconURL kSourceIconURLs[] = {
+      FaviconURL(GURL("http://www.google.com/b"),
+                 FaviconURL::FAVICON,
+                 icon1),
+      FaviconURL(GURL("http://www.google.com/c"),
+                 FaviconURL::FAVICON,
+                 icon2),
+      FaviconURL(GURL("http://www.google.com/d"),
+                 FaviconURL::FAVICON,
+                 std::vector<gfx::Size>())};
+
+  TestFaviconClient client;
+  TestFaviconHandlerDelegate delegate1;
+  TestFaviconHandler handler1(
+      kPageURL, &client, &delegate1, FaviconHandler::FAVICON, true);
+  std::vector<FaviconURL> urls1(kSourceIconURLs,
+                                kSourceIconURLs + arraysize(kSourceIconURLs));
+  UpdateFaviconURL(&handler1, kPageURL, urls1);
+  ASSERT_EQ(3u, handler1.urls().size());
+
+  // Simulate no favicon from history.
+  handler1.history_handler()->history_results_.clear();
+  handler1.history_handler()->InvokeCallback();
+
+  // Verify the first icon was request to download
+  ASSERT_TRUE(handler1.download_handler()->HasDownload());
+  EXPECT_EQ(kSourceIconURLs[0].icon_url,
+            handler1.download_handler()->GetImageUrl());
+
+  // Give the incorrect size.
+  std::vector<int> sizes;
+  sizes.push_back(actual_size1);
+  handler1.download_handler()->SetImageSizes(sizes);
+  handler1.download_handler()->InvokeCallback();
+
+  // Simulate no favicon from history.
+  handler1.history_handler()->history_results_.clear();
+  handler1.history_handler()->InvokeCallback();
+
+  // Verify the 2nd icon was request to download
+  ASSERT_TRUE(handler1.download_handler()->HasDownload());
+  EXPECT_EQ(kSourceIconURLs[1].icon_url,
+            handler1.download_handler()->GetImageUrl());
+
+  // Very the best candidate is icon1
+  EXPECT_EQ(kSourceIconURLs[0].icon_url,
+            handler1.best_favicon_candidate().image_url);
+  EXPECT_EQ(gfx::Size(actual_size1, actual_size1),
+            handler1.best_favicon_candidate().image.Size());
+
+  // Give the incorrect size.
+  sizes.clear();
+  sizes.push_back(actual_size2);
+  handler1.download_handler()->SetImageSizes(sizes);
+  handler1.download_handler()->InvokeCallback();
+
+  // Verify icon2 has been saved into history.
+  EXPECT_EQ(kSourceIconURLs[1].icon_url, handler1.history_handler()->icon_url_);
+  EXPECT_EQ(gfx::Size(actual_size2, actual_size2),
+            handler1.history_handler()->size_);
+}
+
 static KeyedService* BuildFaviconService(content::BrowserContext* profile) {
   return new FaviconService(static_cast<Profile*>(profile));
 }
diff --git a/chrome/browser/favicon/favicon_service.cc b/chrome/browser/favicon/favicon_service.cc
index 9afc75f..8587a02 100644
--- a/chrome/browser/favicon/favicon_service.cc
+++ b/chrome/browser/favicon/favicon_service.cc
@@ -12,9 +12,9 @@
 #include "chrome/browser/history/history_service_factory.h"
 #include "chrome/browser/history/select_favicon_frames.h"
 #include "chrome/browser/ui/webui/chrome_web_ui_controller_factory.h"
-#include "chrome/common/favicon/favicon_types.h"
 #include "chrome/common/importer/imported_favicon_usage.h"
 #include "chrome/common/url_constants.h"
+#include "components/favicon_base/favicon_types.h"
 #include "extensions/common/constants.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 #include "ui/gfx/codec/png_codec.h"
@@ -28,7 +28,7 @@
 void CancelOrRunFaviconResultsCallback(
     const base::CancelableTaskTracker::IsCanceledCallback& is_canceled,
     const FaviconService::FaviconResultsCallback& callback,
-    const std::vector<chrome::FaviconBitmapResult>& results) {
+    const std::vector<favicon_base::FaviconBitmapResult>& results) {
   if (is_canceled.Run())
     return;
   callback.Run(results);
@@ -42,7 +42,7 @@
   return tracker->PostTask(
       base::MessageLoopProxy::current().get(),
       FROM_HERE,
-      Bind(callback, std::vector<chrome::FaviconBitmapResult>()));
+      Bind(callback, std::vector<favicon_base::FaviconBitmapResult>()));
 }
 
 // Return the TaskId to retreive the favicon from chrome specific URL.
@@ -73,13 +73,13 @@
 // static
 void FaviconService::FaviconResultsCallbackRunner(
     const FaviconResultsCallback& callback,
-    const std::vector<chrome::FaviconBitmapResult>* results) {
+    const std::vector<favicon_base::FaviconBitmapResult>* results) {
   callback.Run(*results);
 }
 
 base::CancelableTaskTracker::TaskId FaviconService::GetFaviconImage(
     const GURL& icon_url,
-    chrome::IconType icon_type,
+    favicon_base::IconType icon_type,
     int desired_size_in_dip,
     const FaviconImageCallback& callback,
     base::CancelableTaskTracker* tracker) {
@@ -99,7 +99,7 @@
 
 base::CancelableTaskTracker::TaskId FaviconService::GetRawFavicon(
     const GURL& icon_url,
-    chrome::IconType icon_type,
+    favicon_base::IconType icon_type,
     int desired_size_in_dip,
     ui::ScaleFactor desired_scale_factor,
     const FaviconRawCallback& callback,
@@ -125,7 +125,7 @@
 
 base::CancelableTaskTracker::TaskId FaviconService::GetFavicon(
     const GURL& icon_url,
-    chrome::IconType icon_type,
+    favicon_base::IconType icon_type,
     int desired_size_in_dip,
     const FaviconResultsCallback& callback,
     base::CancelableTaskTracker* tracker) {
@@ -223,7 +223,7 @@
 }
 
 base::CancelableTaskTracker::TaskId FaviconService::GetLargestRawFaviconForID(
-    chrome::FaviconID favicon_id,
+    favicon_base::FaviconID favicon_id,
     const FaviconRawCallback& callback,
     base::CancelableTaskTracker* tracker) {
   // Use 0 as |desired_size_in_dip| to get the largest bitmap for |favicon_id|
@@ -264,7 +264,7 @@
 void FaviconService::MergeFavicon(
     const GURL& page_url,
     const GURL& icon_url,
-    chrome::IconType icon_type,
+    favicon_base::IconType icon_type,
     scoped_refptr<base::RefCountedMemory> bitmap_data,
     const gfx::Size& pixel_size) {
   if (history_service_) {
@@ -275,7 +275,7 @@
 
 void FaviconService::SetFavicons(const GURL& page_url,
                                  const GURL& icon_url,
-                                 chrome::IconType icon_type,
+                                 favicon_base::IconType icon_type,
                                  const gfx::Image& image) {
   if (!history_service_)
     return;
@@ -283,7 +283,7 @@
   gfx::ImageSkia image_skia = image.AsImageSkia();
   image_skia.EnsureRepsForSupportedScales();
   const std::vector<gfx::ImageSkiaRep>& image_reps = image_skia.image_reps();
-  std::vector<chrome::FaviconBitmapData> favicon_bitmap_data;
+  std::vector<favicon_base::FaviconBitmapData> favicon_bitmap_data;
   for (size_t i = 0; i < image_reps.size(); ++i) {
     scoped_refptr<base::RefCountedBytes> bitmap_data(
         new base::RefCountedBytes());
@@ -292,7 +292,7 @@
                                           &bitmap_data->data())) {
       gfx::Size pixel_size(image_reps[i].pixel_width(),
                            image_reps[i].pixel_height());
-      chrome::FaviconBitmapData bitmap_data_element;
+      favicon_base::FaviconBitmapData bitmap_data_element;
       bitmap_data_element.bitmap_data = bitmap_data;
       bitmap_data_element.pixel_size = pixel_size;
       bitmap_data_element.icon_url = icon_url;
@@ -343,8 +343,9 @@
 void FaviconService::RunFaviconImageCallbackWithBitmapResults(
     const FaviconImageCallback& callback,
     int desired_size_in_dip,
-    const std::vector<chrome::FaviconBitmapResult>& favicon_bitmap_results) {
-  chrome::FaviconImageResult image_result;
+    const std::vector<favicon_base::FaviconBitmapResult>&
+        favicon_bitmap_results) {
+  favicon_base::FaviconImageResult image_result;
   image_result.image = FaviconUtil::SelectFaviconFramesFromPNGs(
       favicon_bitmap_results,
       FaviconUtil::GetFaviconScaleFactors(),
@@ -360,14 +361,15 @@
     const FaviconRawCallback& callback,
     int desired_size_in_dip,
     ui::ScaleFactor desired_scale_factor,
-    const std::vector<chrome::FaviconBitmapResult>& favicon_bitmap_results) {
+    const std::vector<favicon_base::FaviconBitmapResult>&
+        favicon_bitmap_results) {
   if (favicon_bitmap_results.empty() || !favicon_bitmap_results[0].is_valid()) {
-    callback.Run(chrome::FaviconBitmapResult());
+    callback.Run(favicon_base::FaviconBitmapResult());
     return;
   }
 
   DCHECK_EQ(1u, favicon_bitmap_results.size());
-  chrome::FaviconBitmapResult bitmap_result = favicon_bitmap_results[0];
+  favicon_base::FaviconBitmapResult bitmap_result = favicon_bitmap_results[0];
 
   // If the desired size is 0, SelectFaviconFrames() will return the largest
   // bitmap without doing any resizing. As |favicon_bitmap_results| has bitmap
@@ -398,7 +400,7 @@
   std::vector<unsigned char> resized_bitmap_data;
   if (!gfx::PNGCodec::EncodeBGRASkBitmap(resized_image.AsBitmap(), false,
                                          &resized_bitmap_data)) {
-    callback.Run(chrome::FaviconBitmapResult());
+    callback.Run(favicon_base::FaviconBitmapResult());
     return;
   }
 
diff --git a/chrome/browser/favicon/favicon_service.h b/chrome/browser/favicon/favicon_service.h
index 1df4879..665d36a 100644
--- a/chrome/browser/favicon/favicon_service.h
+++ b/chrome/browser/favicon/favicon_service.h
@@ -11,7 +11,7 @@
 #include "base/containers/hash_tables.h"
 #include "base/memory/ref_counted.h"
 #include "base/task/cancelable_task_tracker.h"
-#include "chrome/common/favicon/favicon_types.h"
+#include "components/favicon_base/favicon_types.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "ui/base/layout.h"
 
@@ -55,13 +55,13 @@
   // |image| originate from.
   // TODO(pkotwicz): Enable constructing |image| from bitmaps from several
   // icon URLs.
-  typedef base::Callback<void(const chrome::FaviconImageResult&)>
+  typedef base::Callback<void(const favicon_base::FaviconImageResult&)>
       FaviconImageCallback;
 
   // Callback for GetRawFavicon(), GetRawFaviconForURL() and
   // GetLargestRawFavicon().
   // See function for details on value.
-  typedef base::Callback<void(const chrome::FaviconBitmapResult&)>
+  typedef base::Callback<void(const favicon_base::FaviconBitmapResult&)>
       FaviconRawCallback;
 
   // Callback for GetFavicon() and GetFaviconForURL().
@@ -72,14 +72,14 @@
   // platform (eg MacOS) in addition to 1x. The vector has at most one result
   // for each of the scale factors. There are less entries if a single result
   // is the best bitmap to use for several scale factors.
-  typedef base::Callback<void(const std::vector<chrome::FaviconBitmapResult>&)>
-      FaviconResultsCallback;
+  typedef base::Callback<void(const std::vector<
+      favicon_base::FaviconBitmapResult>&)> FaviconResultsCallback;
 
   // We usually pass parameters with pointer to avoid copy. This function is a
   // helper to run FaviconResultsCallback with pointer parameters.
   static void FaviconResultsCallbackRunner(
       const FaviconResultsCallback& callback,
-      const std::vector<chrome::FaviconBitmapResult>* results);
+      const std::vector<favicon_base::FaviconBitmapResult>* results);
 
   // Requests the favicon at |icon_url| of |icon_type| whose size most closely
   // matches |desired_size_in_dip|. If |desired_size_in_dip| is 0, the largest
@@ -91,14 +91,14 @@
   // current platform (eg MacOS) are requested for GetFaviconImage().
   base::CancelableTaskTracker::TaskId GetFaviconImage(
       const GURL& icon_url,
-      chrome::IconType icon_type,
+      favicon_base::IconType icon_type,
       int desired_size_in_dip,
       const FaviconImageCallback& callback,
       base::CancelableTaskTracker* tracker);
 
   base::CancelableTaskTracker::TaskId GetRawFavicon(
       const GURL& icon_url,
-      chrome::IconType icon_type,
+      favicon_base::IconType icon_type,
       int desired_size_in_dip,
       ui::ScaleFactor desired_scale_factor,
       const FaviconRawCallback& callback,
@@ -106,7 +106,7 @@
 
   base::CancelableTaskTracker::TaskId GetFavicon(
       const GURL& icon_url,
-      chrome::IconType icon_type,
+      favicon_base::IconType icon_type,
       int desired_size_in_dip,
       const FaviconResultsCallback& callback,
       base::CancelableTaskTracker* tracker);
@@ -180,7 +180,7 @@
   // multiple favicon bitmaps for |favicon_id|, the largest favicon bitmap is
   // returned.
   base::CancelableTaskTracker::TaskId GetLargestRawFaviconForID(
-      chrome::FaviconID favicon_id,
+      favicon_base::FaviconID favicon_id,
       const FaviconRawCallback& callback,
       base::CancelableTaskTracker* tracker);
 
@@ -207,7 +207,7 @@
   // known.
   void MergeFavicon(const GURL& page_url,
                     const GURL& icon_url,
-                    chrome::IconType icon_type,
+                    favicon_base::IconType icon_type,
                     scoped_refptr<base::RefCountedMemory> bitmap_data,
                     const gfx::Size& pixel_size);
 
@@ -223,7 +223,7 @@
   // thumbnail database.
   void SetFavicons(const GURL& page_url,
                    const GURL& icon_url,
-                   chrome::IconType icon_type,
+                   favicon_base::IconType icon_type,
                    const gfx::Image& image);
 
   // Avoid repeated requests to download missing favicon.
@@ -247,21 +247,24 @@
 
   // Intermediate callback for GetFaviconImage() and GetFaviconImageForURL()
   // so that history service can deal solely with FaviconResultsCallback.
-  // Builds chrome::FaviconImageResult from |favicon_bitmap_results| and runs
+  // Builds favicon_base::FaviconImageResult from |favicon_bitmap_results| and
+  // runs
   // |callback|.
   void RunFaviconImageCallbackWithBitmapResults(
       const FaviconImageCallback& callback,
       int desired_size_in_dip,
-      const std::vector<chrome::FaviconBitmapResult>& favicon_bitmap_results);
+      const std::vector<favicon_base::FaviconBitmapResult>&
+          favicon_bitmap_results);
 
   // Intermediate callback for GetRawFavicon() and GetRawFaviconForURL()
   // so that history service can deal solely with FaviconResultsCallback.
-  // Resizes chrome::FaviconBitmapResult if necessary and runs |callback|.
+  // Resizes favicon_base::FaviconBitmapResult if necessary and runs |callback|.
   void RunFaviconRawCallbackWithBitmapResults(
       const FaviconRawCallback& callback,
       int desired_size_in_dip,
       ui::ScaleFactor desired_scale_factor,
-      const std::vector<chrome::FaviconBitmapResult>& favicon_bitmap_results);
+      const std::vector<favicon_base::FaviconBitmapResult>&
+          favicon_bitmap_results);
 
   DISALLOW_COPY_AND_ASSIGN(FaviconService);
 };
diff --git a/chrome/browser/favicon/favicon_tab_helper.cc b/chrome/browser/favicon/favicon_tab_helper.cc
index f46dfcb..a40ec08 100644
--- a/chrome/browser/favicon/favicon_tab_helper.cc
+++ b/chrome/browser/favicon/favicon_tab_helper.cc
@@ -4,6 +4,8 @@
 
 #include "chrome/browser/favicon/favicon_tab_helper.h"
 
+#include "chrome/browser/bookmarks/bookmark_model.h"
+#include "chrome/browser/bookmarks/bookmark_model_factory.h"
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/favicon/favicon_handler.h"
 #include "chrome/browser/favicon/favicon_service_factory.h"
@@ -38,11 +40,18 @@
 FaviconTabHelper::FaviconTabHelper(WebContents* web_contents)
     : content::WebContentsObserver(web_contents),
       profile_(Profile::FromBrowserContext(web_contents->GetBrowserContext())) {
+#if defined(OS_ANDROID)
+  bool download_largest_icon = true;
+#else
+  bool download_largest_icon = false;
+#endif
   favicon_handler_.reset(
-      new FaviconHandler(profile_, this, this, FaviconHandler::FAVICON));
+      new FaviconHandler(this, this, FaviconHandler::FAVICON,
+                         download_largest_icon));
   if (chrome::kEnableTouchIcon)
     touch_icon_handler_.reset(
-        new FaviconHandler(profile_, this, this, FaviconHandler::TOUCH));
+        new FaviconHandler(this, this, FaviconHandler::TOUCH,
+                           download_largest_icon));
 }
 
 FaviconTabHelper::~FaviconTabHelper() {
@@ -123,7 +132,7 @@
     return;
   }
   service->SetFavicons(
-      entry->GetURL(), favicon.url, chrome::FAVICON, favicon.image);
+      entry->GetURL(), favicon.url, favicon_base::FAVICON, favicon.image);
 }
 
 NavigationEntry* FaviconTabHelper::GetActiveEntry() {
@@ -197,6 +206,11 @@
                                               Profile::EXPLICIT_ACCESS);
 }
 
+bool FaviconTabHelper::IsBookmarked(const GURL& url) {
+  BookmarkModel* bookmark_model = BookmarkModelFactory::GetForProfile(profile_);
+  return bookmark_model && bookmark_model->IsBookmarked(url);
+}
+
 void FaviconTabHelper::DidDownloadFavicon(
     int id,
     int http_status_code,
diff --git a/chrome/browser/favicon/favicon_tab_helper.h b/chrome/browser/favicon/favicon_tab_helper.h
index 1778232..3d00c25 100644
--- a/chrome/browser/favicon/favicon_tab_helper.h
+++ b/chrome/browser/favicon/favicon_tab_helper.h
@@ -84,6 +84,7 @@
 
   // FaviconClient implementation:
   virtual FaviconService* GetFaviconService() OVERRIDE;
+  virtual bool IsBookmarked(const GURL& url) OVERRIDE;
 
  private:
   explicit FaviconTabHelper(content::WebContents* web_contents);
diff --git a/chrome/browser/favicon/favicon_util.cc b/chrome/browser/favicon/favicon_util.cc
index 8d73e78..9cd480e 100644
--- a/chrome/browser/favicon/favicon_util.cc
+++ b/chrome/browser/favicon/favicon_util.cc
@@ -5,7 +5,7 @@
 #include "chrome/browser/favicon/favicon_util.h"
 
 #include "chrome/browser/history/select_favicon_frames.h"
-#include "chrome/common/favicon/favicon_types.h"
+#include "components/favicon_base/favicon_types.h"
 #include "skia/ext/image_operations.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 #include "third_party/skia/include/core/SkCanvas.h"
@@ -25,7 +25,7 @@
 // |scale_factors| for which the image reps can be created without resizing
 // or decoding the bitmap data.
 std::vector<gfx::ImagePNGRep> SelectFaviconFramesFromPNGsWithoutResizing(
-    const std::vector<chrome::FaviconBitmapResult>& png_data,
+    const std::vector<favicon_base::FaviconBitmapResult>& png_data,
     const std::vector<ui::ScaleFactor>& scale_factors,
     int favicon_size) {
   std::vector<gfx::ImagePNGRep> png_reps;
@@ -173,9 +173,9 @@
 
 // static
 gfx::Image FaviconUtil::SelectFaviconFramesFromPNGs(
-      const std::vector<chrome::FaviconBitmapResult>& png_data,
-      const std::vector<ui::ScaleFactor>& scale_factors,
-      int favicon_size) {
+    const std::vector<favicon_base::FaviconBitmapResult>& png_data,
+    const std::vector<ui::ScaleFactor>& scale_factors,
+    int favicon_size) {
   // Create image reps for as many scale factors as possible without resizing
   // the bitmap data or decoding it. FaviconHandler stores already resized
   // favicons into history so no additional resizing should be needed in the
diff --git a/chrome/browser/favicon/favicon_util.h b/chrome/browser/favicon/favicon_util.h
index b8dc460..08c40ca 100644
--- a/chrome/browser/favicon/favicon_util.h
+++ b/chrome/browser/favicon/favicon_util.h
@@ -7,6 +7,7 @@
 
 #include <vector>
 
+#include "components/favicon_base/favicon_types.h"
 #include "ui/base/layout.h"
 
 namespace chrome {
@@ -36,7 +37,7 @@
   // Takes a vector of png-encoded frames, decodes them, and converts them to
   // a favicon of size favicon_size (in DIPs) at the desired ui scale factors.
   static gfx::Image SelectFaviconFramesFromPNGs(
-      const std::vector<chrome::FaviconBitmapResult>& png_data,
+      const std::vector<favicon_base::FaviconBitmapResult>& png_data,
       const std::vector<ui::ScaleFactor>& scale_factors,
       int favicon_size);
 };
diff --git a/chrome/browser/feedback/feedback_uploader_unittest.cc b/chrome/browser/feedback/feedback_uploader_unittest.cc
index c795c18..b504be0 100644
--- a/chrome/browser/feedback/feedback_uploader_unittest.cc
+++ b/chrome/browser/feedback/feedback_uploader_unittest.cc
@@ -106,7 +106,7 @@
   size_t expected_reports_;
 };
 
-#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_MACOSX)
+#if defined(OS_LINUX) || defined(OS_MACOSX)
 #define MAYBE_QueueMultiple QueueMultiple
 #else
 // crbug.com/330547
diff --git a/chrome/browser/first_run/first_run_internal_win.cc b/chrome/browser/first_run/first_run_internal_win.cc
index 494a01d..b28e839 100644
--- a/chrome/browser/first_run/first_run_internal_win.cc
+++ b/chrome/browser/first_run/first_run_internal_win.cc
@@ -78,12 +78,6 @@
   }
 }
 
-bool GetEULASentinelFilePath(base::FilePath* path) {
-  return InstallUtil::GetSentinelFilePath(
-      installer::kEULASentinelFile, BrowserDistribution::GetDistribution(),
-      path);
-}
-
 // Returns true if the EULA is required but has not been accepted by this user.
 // The EULA is considered having been accepted if the user has gotten past
 // first run in the "other" environment (desktop or metro).
@@ -94,7 +88,7 @@
     base::FilePath eula_sentinel;
     // Be conservative and show the EULA if the path to the sentinel can't be
     // determined.
-    if (!GetEULASentinelFilePath(&eula_sentinel) ||
+    if (!InstallUtil::GetEULASentinelFilePath(&eula_sentinel) ||
         !base::PathExists(eula_sentinel)) {
       return true;
     }
@@ -115,11 +109,9 @@
 // accepted.
 bool CreateEULASentinel() {
   base::FilePath eula_sentinel;
-  if (!GetEULASentinelFilePath(&eula_sentinel))
-    return false;
-
-  return (base::CreateDirectory(eula_sentinel.DirName()) &&
-          base::WriteFile(eula_sentinel, "", 0) != -1);
+  return InstallUtil::GetEULASentinelFilePath(&eula_sentinel) &&
+      base::CreateDirectory(eula_sentinel.DirName()) &&
+      base::WriteFile(eula_sentinel, "", 0) != -1;
 }
 
 }  // namespace
diff --git a/chrome/browser/geolocation/chrome_geolocation_permission_context.cc b/chrome/browser/geolocation/chrome_geolocation_permission_context.cc
index 84f85df..7364754 100644
--- a/chrome/browser/geolocation/chrome_geolocation_permission_context.cc
+++ b/chrome/browser/geolocation/chrome_geolocation_permission_context.cc
@@ -173,9 +173,9 @@
     const extensions::Extension* extension =
         extension_registry->enabled_extensions().GetExtensionOrAppByURL(
             requesting_frame_origin);
-    if (IsExtensionWithPermissionOrSuggestInConsole(APIPermission::kGeolocation,
-                                                    extension,
-                                                    profile_)) {
+    if (IsExtensionWithPermissionOrSuggestInConsole(
+            APIPermission::kGeolocation, extension,
+            web_contents->GetRenderViewHost())) {
       // Make sure the extension is in the calling process.
       if (extensions::ProcessMap::Get(profile_)
               ->Contains(extension->id(), id.render_process_id())) {
diff --git a/chrome/browser/geolocation/chrome_geolocation_permission_context_unittest.cc b/chrome/browser/geolocation/chrome_geolocation_permission_context_unittest.cc
index 903702b..5b796fd 100644
--- a/chrome/browser/geolocation/chrome_geolocation_permission_context_unittest.cc
+++ b/chrome/browser/geolocation/chrome_geolocation_permission_context_unittest.cc
@@ -19,11 +19,11 @@
 #include "chrome/browser/content_settings/tab_specific_content_settings.h"
 #include "chrome/browser/geolocation/chrome_geolocation_permission_context_factory.h"
 #include "chrome/browser/infobars/confirm_infobar_delegate.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
 #include "chrome/test/base/testing_profile.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/navigation_details.h"
 #include "content/public/browser/notification_registrar.h"
@@ -59,13 +59,13 @@
 
   size_t size() const { return removed_infobars_.size(); }
 
-  bool Contains(InfoBar* infobar) const;
+  bool Contains(infobars::InfoBar* infobar) const;
   void Clear();
 
  private:
   FRIEND_TEST_ALL_PREFIXES(GeolocationPermissionContextTests, TabDestroyed);
   content::NotificationRegistrar registrar_;
-  std::set<InfoBar*> removed_infobars_;
+  std::set<infobars::InfoBar*> removed_infobars_;
 };
 
 ClosedInfoBarTracker::ClosedInfoBarTracker() {
@@ -82,10 +82,10 @@
     const content::NotificationDetails& details) {
   DCHECK(type == chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED);
   removed_infobars_.insert(
-      content::Details<InfoBar::RemovedDetails>(details)->first);
+      content::Details<infobars::InfoBar::RemovedDetails>(details)->first);
 }
 
-bool ClosedInfoBarTracker::Contains(InfoBar* infobar) const {
+bool ClosedInfoBarTracker::Contains(infobars::InfoBar* infobar) const {
   return removed_infobars_.count(infobar) != 0;
 }
 
@@ -265,7 +265,7 @@
   EXPECT_EQ(0U, infobar_service()->infobar_count());
   RequestGeolocationPermission(RequestID(0), requesting_frame);
   ASSERT_EQ(1U, infobar_service()->infobar_count());
-  InfoBar* infobar = infobar_service()->infobar_at(0);
+  infobars::InfoBar* infobar = infobar_service()->infobar_at(0);
   ConfirmInfoBarDelegate* infobar_delegate =
       infobar->delegate()->AsConfirmInfoBarDelegate();
   ASSERT_TRUE(infobar_delegate);
@@ -358,7 +358,7 @@
   RequestGeolocationPermission(RequestID(1), requesting_frame_1);
   // Ensure only one infobar is created.
   ASSERT_EQ(1U, infobar_service()->infobar_count());
-  InfoBar* infobar_0 = infobar_service()->infobar_at(0);
+  infobars::InfoBar* infobar_0 = infobar_service()->infobar_at(0);
   ConfirmInfoBarDelegate* infobar_delegate_0 =
       infobar_0->delegate()->AsConfirmInfoBarDelegate();
   ASSERT_TRUE(infobar_delegate_0);
@@ -376,7 +376,7 @@
   // Now we should have a new infobar for the second frame.
   ASSERT_EQ(1U, infobar_service()->infobar_count());
 
-  InfoBar* infobar_1 = infobar_service()->infobar_at(0);
+  infobars::InfoBar* infobar_1 = infobar_service()->infobar_at(0);
   ConfirmInfoBarDelegate* infobar_delegate_1 =
       infobar_1->delegate()->AsConfirmInfoBarDelegate();
   ASSERT_TRUE(infobar_delegate_1);
@@ -412,7 +412,7 @@
   EXPECT_EQ(0U, infobar_service()->infobar_count());
   RequestGeolocationPermission(RequestID(0), url_a);
   ASSERT_EQ(1U, infobar_service()->infobar_count());
-  InfoBar* infobar = infobar_service()->infobar_at(0);
+  infobars::InfoBar* infobar = infobar_service()->infobar_at(0);
   ConfirmInfoBarDelegate* infobar_delegate =
       infobar->delegate()->AsConfirmInfoBarDelegate();
   ASSERT_TRUE(infobar_delegate);
@@ -438,7 +438,7 @@
   EXPECT_EQ(0U, infobar_service()->infobar_count());
   RequestGeolocationPermission(RequestID(0), requesting_frame);
   EXPECT_EQ(1U, infobar_service()->infobar_count());
-  InfoBar* infobar = infobar_service()->infobar_at(0);
+  infobars::InfoBar* infobar = infobar_service()->infobar_at(0);
   ConfirmInfoBarDelegate* infobar_delegate =
       infobar->delegate()->AsConfirmInfoBarDelegate();
   ASSERT_TRUE(infobar_delegate);
@@ -477,7 +477,7 @@
   RequestGeolocationPermission(RequestID(1), requesting_frame_1);
   ASSERT_EQ(1U, infobar_service()->infobar_count());
 
-  InfoBar* infobar_0 = infobar_service()->infobar_at(0);
+  infobars::InfoBar* infobar_0 = infobar_service()->infobar_at(0);
   ConfirmInfoBarDelegate* infobar_delegate_0 =
       infobar_0->delegate()->AsConfirmInfoBarDelegate();
   ASSERT_TRUE(infobar_delegate_0);
@@ -491,7 +491,7 @@
   closed_infobar_tracker_.Clear();
   ASSERT_EQ(1U, infobar_service()->infobar_count());
 
-  InfoBar* infobar_1 = infobar_service()->infobar_at(0);
+  infobars::InfoBar* infobar_1 = infobar_service()->infobar_at(0);
   ConfirmInfoBarDelegate* infobar_delegate_1 =
       infobar_1->delegate()->AsConfirmInfoBarDelegate();
   ASSERT_TRUE(infobar_delegate_1);
@@ -545,10 +545,11 @@
   RequestGeolocationPermission(RequestIDForTab(1, 0), url_a);
   ASSERT_EQ(1U, infobar_service_for_tab(1)->infobar_count());
 
-  InfoBar* removed_infobar = infobar_service_for_tab(1)->infobar_at(0);
+  infobars::InfoBar* removed_infobar =
+      infobar_service_for_tab(1)->infobar_at(0);
 
   // Accept the first tab.
-  InfoBar* infobar_0 = infobar_service()->infobar_at(0);
+  infobars::InfoBar* infobar_0 = infobar_service()->infobar_at(0);
   ConfirmInfoBarDelegate* infobar_delegate_0 =
       infobar_0->delegate()->AsConfirmInfoBarDelegate();
   ASSERT_TRUE(infobar_delegate_0);
@@ -565,7 +566,7 @@
 
   // But the other tab should still have the info bar...
   ASSERT_EQ(1U, infobar_service_for_tab(0)->infobar_count());
-  InfoBar* infobar_1 = infobar_service_for_tab(0)->infobar_at(0);
+  infobars::InfoBar* infobar_1 = infobar_service_for_tab(0)->infobar_at(0);
   ConfirmInfoBarDelegate* infobar_delegate_1 =
       infobar_1->delegate()->AsConfirmInfoBarDelegate();
   ASSERT_TRUE(infobar_delegate_1);
@@ -591,10 +592,10 @@
   RequestGeolocationPermission(RequestIDForTab(0, 1), url_b);
   ASSERT_EQ(1U, infobar_service_for_tab(0)->infobar_count());
 
-  InfoBar* removed_infobar = infobar_service()->infobar_at(0);
+  infobars::InfoBar* removed_infobar = infobar_service()->infobar_at(0);
 
   // Accept the second tab.
-  InfoBar* infobar_0 = infobar_service_for_tab(0)->infobar_at(0);
+  infobars::InfoBar* infobar_0 = infobar_service_for_tab(0)->infobar_at(0);
   ConfirmInfoBarDelegate* infobar_delegate_0 =
       infobar_0->delegate()->AsConfirmInfoBarDelegate();
   ASSERT_TRUE(infobar_delegate_0);
@@ -613,7 +614,7 @@
   ASSERT_EQ(1U, infobar_service_for_tab(0)->infobar_count());
 
   // Accept the second infobar.
-  InfoBar* infobar_1 = infobar_service_for_tab(0)->infobar_at(0);
+  infobars::InfoBar* infobar_1 = infobar_service_for_tab(0)->infobar_at(0);
   ConfirmInfoBarDelegate* infobar_delegate_1 =
       infobar_1->delegate()->AsConfirmInfoBarDelegate();
   ASSERT_TRUE(infobar_delegate_1);
@@ -624,14 +625,7 @@
   EXPECT_TRUE(closed_infobar_tracker_.Contains(infobar_1));
 }
 
-#if defined(THREAD_SANITIZER)
-// This test crashes under ThreadSanitizer v2, which builds with libc++.
-// See http://crbug.com/358707.
-#define MAYBE_TabDestroyed DISABLED_TabDestroyed
-#else
-#define MAYBE_TabDestroyed TabDestroyed
-#endif
-TEST_F(GeolocationPermissionContextTests, MAYBE_TabDestroyed) {
+TEST_F(GeolocationPermissionContextTests, TabDestroyed) {
   GURL requesting_frame_0("http://www.example.com/geolocation");
   GURL requesting_frame_1("http://www.example-2.com/geolocation");
   EXPECT_EQ(CONTENT_SETTING_ASK,
@@ -651,7 +645,7 @@
   RequestGeolocationPermission(RequestID(1), requesting_frame_1);
   // Ensure only one infobar is created.
   ASSERT_EQ(1U, infobar_service()->infobar_count());
-  InfoBar* infobar = infobar_service()->infobar_at(0);
+  infobars::InfoBar* infobar = infobar_service()->infobar_at(0);
 
   // Delete the tab contents.
   DeleteContents();
@@ -675,7 +669,7 @@
   RequestGeolocationPermission(RequestID(0), requesting_frame_1);
   // Ensure the infobar is created.
   ASSERT_EQ(1U, infobar_service()->infobar_count());
-  InfoBarDelegate* infobar_delegate =
+  infobars::InfoBarDelegate* infobar_delegate =
       infobar_service()->infobar_at(0)->delegate();
   ASSERT_TRUE(infobar_delegate);
   // Ensure the infobar wouldn't expire for a navigation to the committed entry.
diff --git a/chrome/browser/geolocation/geolocation_browsertest.cc b/chrome/browser/geolocation/geolocation_browsertest.cc
index dc1b936..180c91c 100644
--- a/chrome/browser/geolocation/geolocation_browsertest.cc
+++ b/chrome/browser/geolocation/geolocation_browsertest.cc
@@ -13,7 +13,6 @@
 #include "chrome/browser/content_settings/host_content_settings_map.h"
 #include "chrome/browser/content_settings/tab_specific_content_settings.h"
 #include "chrome/browser/infobars/confirm_infobar_delegate.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/browser.h"
@@ -23,6 +22,7 @@
 #include "chrome/common/content_settings_pattern.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "chrome/test/base/ui_test_utils.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/dom_operation_notification_details.h"
 #include "content/public/browser/navigation_controller.h"
 #include "content/public/browser/notification_details.h"
@@ -138,12 +138,12 @@
       content::RenderFrameHost* render_frame_host);
 
   bool has_infobar() const { return !!infobar_; }
-  InfoBar* infobar() { return infobar_; }
+  infobars::InfoBar* infobar() { return infobar_; }
 
  private:
   content::NotificationRegistrar registrar_;
   bool wait_for_infobar_;
-  InfoBar* infobar_;
+  infobars::InfoBar* infobar_;
   bool navigation_started_;
   bool navigation_completed_;
   std::string javascript_response_;
@@ -180,7 +180,7 @@
     const content::NotificationSource& source,
     const content::NotificationDetails& details) {
   if (type == chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_ADDED) {
-    infobar_ = content::Details<InfoBar::AddedDetails>(details).ptr();
+    infobar_ = content::Details<infobars::InfoBar::AddedDetails>(details).ptr();
     ASSERT_FALSE(infobar_->delegate()->GetIcon().IsEmpty());
     ASSERT_TRUE(infobar_->delegate()->AsConfirmInfoBarDelegate());
   } else if (type == content::NOTIFICATION_DOM_OPERATION_RESPONSE) {
@@ -294,7 +294,7 @@
   void NotifyGeoposition(double latitude, double longitude);
 
  private:
-  InfoBar* infobar_;
+  infobars::InfoBar* infobar_;
   Browser* current_browser_;
   // path element of a URL referencing the html content for this test.
   std::string html_for_tests_;
diff --git a/chrome/browser/geolocation/geolocation_infobar_delegate.cc b/chrome/browser/geolocation/geolocation_infobar_delegate.cc
index 95d6b25..98d8329 100644
--- a/chrome/browser/geolocation/geolocation_infobar_delegate.cc
+++ b/chrome/browser/geolocation/geolocation_infobar_delegate.cc
@@ -7,8 +7,8 @@
 #include "base/metrics/histogram.h"
 #include "chrome/browser/content_settings/permission_queue_controller.h"
 #include "chrome/browser/google/google_util.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/navigation_details.h"
 #include "content/public/browser/navigation_entry.h"
 #include "content/public/browser/web_contents.h"
@@ -62,7 +62,7 @@
 }  // namespace
 
 // static
-InfoBar* GeolocationInfoBarDelegate::Create(
+infobars::InfoBar* GeolocationInfoBarDelegate::Create(
     InfoBarService* infobar_service,
     PermissionQueueController* controller,
     const PermissionRequestID& id,
@@ -70,7 +70,6 @@
     const std::string& display_languages,
     const std::string& accept_button_label) {
   RecordUmaEvent(GEOLOCATION_INFO_BAR_DELEGATE_EVENT_CREATE);
-  CHECK(infobar_service->web_contents());
   const content::NavigationEntry* committed_entry =
       infobar_service->web_contents()->GetController().GetLastCommittedEntry();
   GeolocationInfoBarDelegate* const delegate = new DelegateType(
@@ -78,9 +77,9 @@
           committed_entry ? committed_entry->GetUniqueID() : 0,
           display_languages, accept_button_label);
 
-  InfoBar* infobar = ConfirmInfoBarDelegate::CreateInfoBar(
+  infobars::InfoBar* infobar = ConfirmInfoBarDelegate::CreateInfoBar(
       scoped_ptr<ConfirmInfoBarDelegate>(delegate)).release();
-  return infobar_service->AddInfoBar(scoped_ptr<InfoBar>(infobar));
+  return infobar_service->AddInfoBar(scoped_ptr<infobars::InfoBar>(infobar));
 }
 
 GeolocationInfoBarDelegate::GeolocationInfoBarDelegate(
@@ -131,7 +130,8 @@
   return IDR_INFOBAR_GEOLOCATION;
 }
 
-InfoBarDelegate::Type GeolocationInfoBarDelegate::GetInfoBarType() const {
+infobars::InfoBarDelegate::Type GeolocationInfoBarDelegate::GetInfoBarType()
+    const {
   return PAGE_ACTION_TYPE;
 }
 
diff --git a/chrome/browser/geolocation/geolocation_infobar_delegate.h b/chrome/browser/geolocation/geolocation_infobar_delegate.h
index 92f2dee..a14c9ed 100644
--- a/chrome/browser/geolocation/geolocation_infobar_delegate.h
+++ b/chrome/browser/geolocation/geolocation_infobar_delegate.h
@@ -21,12 +21,12 @@
  public:
   // Creates a geolocation infobar and delegate and adds the infobar to
   // |infobar_service|.  Returns the infobar if it was successfully added.
-  static InfoBar* Create(InfoBarService* infobar_service,
-                         PermissionQueueController* controller,
-                         const PermissionRequestID& id,
-                         const GURL& requesting_frame,
-                         const std::string& display_languages,
-                         const std::string& accept_button_label);
+  static infobars::InfoBar* Create(InfoBarService* infobar_service,
+                                   PermissionQueueController* controller,
+                                   const PermissionRequestID& id,
+                                   const GURL& requesting_frame,
+                                   const std::string& display_languages,
+                                   const std::string& accept_button_label);
 
  protected:
   GeolocationInfoBarDelegate(PermissionQueueController* controller,
diff --git a/chrome/browser/google/google_url_tracker.cc b/chrome/browser/google/google_url_tracker.cc
index a2dded3..535cbba 100644
--- a/chrome/browser/google/google_url_tracker.cc
+++ b/chrome/browser/google/google_url_tracker.cc
@@ -13,11 +13,11 @@
 #include "chrome/browser/google/google_url_tracker_infobar_delegate.h"
 #include "chrome/browser/google/google_url_tracker_navigation_helper.h"
 #include "chrome/browser/google/google_util.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/common/chrome_switches.h"
 #include "chrome/common/pref_names.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/navigation_controller.h"
 #include "content/public/browser/navigation_entry.h"
 #include "content/public/browser/notification_service.h"
@@ -344,7 +344,8 @@
   if (map_entry->has_infobar_delegate()) {
     map_entry->infobar_delegate()->Update(search_url);
   } else {
-    InfoBar* infobar = infobar_creator_.Run(infobar_service, this, search_url);
+    infobars::InfoBar* infobar =
+        infobar_creator_.Run(infobar_service, this, search_url);
     if (infobar) {
       map_entry->SetInfoBarDelegate(
           static_cast<GoogleURLTrackerInfoBarDelegate*>(infobar->delegate()));
diff --git a/chrome/browser/google/google_url_tracker.h b/chrome/browser/google/google_url_tracker.h
index e4b5e9f..ab93000 100644
--- a/chrome/browser/google/google_url_tracker.h
+++ b/chrome/browser/google/google_url_tracker.h
@@ -21,7 +21,6 @@
 #include "url/gurl.h"
 
 class GoogleURLTrackerNavigationHelper;
-class InfoBar;
 class PrefService;
 class Profile;
 
@@ -29,6 +28,10 @@
 class NavigationController;
 }
 
+namespace infobars {
+class InfoBar;
+}
+
 // This object is responsible for checking the Google URL once per network
 // change, and if necessary prompting the user to see if they want to change to
 // using it.  The current and last prompted values are saved to prefs.
@@ -179,7 +182,8 @@
   // Creates an infobar and adds it to the provided InfoBarService.  Returns the
   // infobar on success or NULL on failure.  The caller does not own the
   // returned object, the InfoBarService does.
-  base::Callback<InfoBar*(InfoBarService*, GoogleURLTracker*, const GURL&)>
+  base::Callback<
+      infobars::InfoBar*(InfoBarService*, GoogleURLTracker*, const GURL&)>
       infobar_creator_;
 
   GURL google_url_;
diff --git a/chrome/browser/google/google_url_tracker_infobar_delegate.cc b/chrome/browser/google/google_url_tracker_infobar_delegate.cc
index 0d31f1e..b88bfe5 100644
--- a/chrome/browser/google/google_url_tracker_infobar_delegate.cc
+++ b/chrome/browser/google/google_url_tracker_infobar_delegate.cc
@@ -6,8 +6,8 @@
 
 #include "chrome/browser/google/google_url_tracker.h"
 #include "chrome/browser/google/google_util.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/navigation_entry.h"
 #include "content/public/browser/page_navigator.h"
 #include "content/public/browser/web_contents.h"
@@ -17,7 +17,7 @@
 
 
 // static
-InfoBar* GoogleURLTrackerInfoBarDelegate::Create(
+infobars::InfoBar* GoogleURLTrackerInfoBarDelegate::Create(
     InfoBarService* infobar_service,
     GoogleURLTracker* google_url_tracker,
     const GURL& search_url) {
diff --git a/chrome/browser/google/google_url_tracker_infobar_delegate.h b/chrome/browser/google/google_url_tracker_infobar_delegate.h
index f30abc8..1b7fa2f 100644
--- a/chrome/browser/google/google_url_tracker_infobar_delegate.h
+++ b/chrome/browser/google/google_url_tracker_infobar_delegate.h
@@ -17,9 +17,9 @@
  public:
   // Creates a Google URL tracker infobar and delegate and adds the infobar to
   // |infobar_service|.  Returns the infobar if it was successfully added.
-  static InfoBar* Create(InfoBarService* infobar_service,
-                         GoogleURLTracker* google_url_tracker,
-                         const GURL& search_url);
+  static infobars::InfoBar* Create(InfoBarService* infobar_service,
+                                   GoogleURLTracker* google_url_tracker,
+                                   const GURL& search_url);
 
   // ConfirmInfoBarDelegate:
   virtual bool Accept() OVERRIDE;
diff --git a/chrome/browser/google/google_url_tracker_map_entry.cc b/chrome/browser/google/google_url_tracker_map_entry.cc
index 9e39363..e0798fd 100644
--- a/chrome/browser/google/google_url_tracker_map_entry.cc
+++ b/chrome/browser/google/google_url_tracker_map_entry.cc
@@ -7,7 +7,7 @@
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/google/google_url_tracker.h"
 #include "chrome/browser/google/google_url_tracker_infobar_delegate.h"
-#include "chrome/browser/infobars/infobar.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/notification_details.h"
 #include "content/public/browser/notification_source.h"
 
@@ -32,8 +32,8 @@
   DCHECK(infobar_delegate_);
   DCHECK_EQ(chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED, type);
   DCHECK_EQ(infobar_service_, content::Source<InfoBarService>(source).ptr());
-  if (content::Details<InfoBar::RemovedDetails>(details)->first->delegate() ==
-      infobar_delegate_) {
+  if (content::Details<infobars::InfoBar::RemovedDetails>(
+          details)->first->delegate() == infobar_delegate_) {
     google_url_tracker_->DeleteMapEntryForService(infobar_service_);
     // WARNING: At this point |this| has been deleted!
   }
diff --git a/chrome/browser/google/google_url_tracker_unittest.cc b/chrome/browser/google/google_url_tracker_unittest.cc
index 6f70c32..b49e4b8 100644
--- a/chrome/browser/google/google_url_tracker_unittest.cc
+++ b/chrome/browser/google/google_url_tracker_unittest.cc
@@ -13,10 +13,10 @@
 #include "chrome/browser/google/google_url_tracker_factory.h"
 #include "chrome/browser/google/google_url_tracker_infobar_delegate.h"
 #include "chrome/browser/google/google_url_tracker_navigation_helper.h"
-#include "chrome/browser/infobars/infobar.h"
-#include "chrome/browser/infobars/infobar_delegate.h"
 #include "chrome/common/pref_names.h"
 #include "chrome/test/base/testing_profile.h"
+#include "components/infobars/core/infobar.h"
+#include "components/infobars/core/infobar_delegate.h"
 #include "content/public/browser/notification_service.h"
 #include "content/public/test/test_browser_thread_bundle.h"
 #include "net/url_request/test_url_fetcher_factory.h"
@@ -37,10 +37,10 @@
   // InfoBarService ownership of the returned object; and since the caller
   // doesn't own the returned object, we rely on |test_harness| cleaning this up
   // eventually in GoogleURLTrackerTest::OnInfoBarClosed() to avoid leaks.
-  static InfoBar* Create(GoogleURLTrackerTest* test_harness,
-                         InfoBarService* infobar_service,
-                         GoogleURLTracker* google_url_tracker,
-                         const GURL& search_url);
+  static infobars::InfoBar* Create(GoogleURLTrackerTest* test_harness,
+                                   InfoBarService* infobar_service,
+                                   GoogleURLTracker* google_url_tracker,
+                                   const GURL& search_url);
 
  private:
   TestInfoBarDelegate(GoogleURLTrackerTest* test_harness,
@@ -199,7 +199,7 @@
 class GoogleURLTrackerTest : public testing::Test {
  public:
   // Called by TestInfoBarDelegate::Close().
-  void OnInfoBarClosed(scoped_ptr<InfoBar> infobar,
+  void OnInfoBarClosed(scoped_ptr<infobars::InfoBar> infobar,
                        InfoBarService* infobar_service);
 
  protected:
@@ -240,9 +240,9 @@
   // object, we don't add the created infobar to it.  Instead we will simulate
   // any helper<->infobar interaction necessary.  The returned object will be
   // cleaned up in OnInfoBarClosed().
-  InfoBar* CreateTestInfoBar(InfoBarService* infobar_service,
-                             GoogleURLTracker* google_url_tracker,
-                             const GURL& search_url);
+  infobars::InfoBar* CreateTestInfoBar(InfoBarService* infobar_service,
+                                       GoogleURLTracker* google_url_tracker,
+                                       const GURL& search_url);
 
   // These are required by the TestURLFetchers GoogleURLTracker will create (see
   // test_url_fetcher_factory.h).
@@ -261,10 +261,11 @@
   std::set<int> unique_ids_seen_;
 };
 
-void GoogleURLTrackerTest::OnInfoBarClosed(scoped_ptr<InfoBar> infobar,
-                                           InfoBarService* infobar_service) {
+void GoogleURLTrackerTest::OnInfoBarClosed(
+    scoped_ptr<infobars::InfoBar> infobar,
+    InfoBarService* infobar_service) {
   // First, simulate the InfoBarService firing INFOBAR_REMOVED.
-  InfoBar::RemovedDetails removed_details(infobar.get(), false);
+  infobars::InfoBar::RemovedDetails removed_details(infobar.get(), false);
   GoogleURLTracker::EntryMap::const_iterator i =
       google_url_tracker_->entry_map_.find(infobar_service);
   ASSERT_FALSE(i == google_url_tracker_->entry_map_.end());
@@ -273,7 +274,7 @@
   map_entry->Observe(
       chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED,
       content::Source<InfoBarService>(infobar_service),
-      content::Details<InfoBar::RemovedDetails>(&removed_details));
+      content::Details<infobars::InfoBar::RemovedDetails>(&removed_details));
 
   // Second, simulate the infobar container closing the infobar in response.
   // This happens automatically as |infobar| goes out of scope.
@@ -446,7 +447,7 @@
   }
 }
 
-InfoBar* GoogleURLTrackerTest::CreateTestInfoBar(
+infobars::InfoBar* GoogleURLTrackerTest::CreateTestInfoBar(
     InfoBarService* infobar_service,
     GoogleURLTracker* google_url_tracker,
     const GURL& search_url) {
@@ -460,10 +461,11 @@
 namespace {
 
 // static
-InfoBar* TestInfoBarDelegate::Create(GoogleURLTrackerTest* test_harness,
-                                     InfoBarService* infobar_service,
-                                     GoogleURLTracker* google_url_tracker,
-                                     const GURL& search_url) {
+infobars::InfoBar* TestInfoBarDelegate::Create(
+    GoogleURLTrackerTest* test_harness,
+    InfoBarService* infobar_service,
+    GoogleURLTracker* google_url_tracker,
+    const GURL& search_url) {
   return ConfirmInfoBarDelegate::CreateInfoBar(
       scoped_ptr<ConfirmInfoBarDelegate>(new TestInfoBarDelegate(
           test_harness, infobar_service, google_url_tracker,
@@ -488,7 +490,7 @@
 }
 
 void TestInfoBarDelegate::Close(bool redo_search) {
-  test_harness_->OnInfoBarClosed(scoped_ptr<InfoBar>(infobar()),
+  test_harness_->OnInfoBarClosed(scoped_ptr<infobars::InfoBar>(infobar()),
                                  infobar_service_);
   // WARNING: At this point |this| has been deleted!
 }
diff --git a/chrome/browser/guestview/guestview.cc b/chrome/browser/guestview/guestview.cc
index cb6444d..7cd6c59 100644
--- a/chrome/browser/guestview/guestview.cc
+++ b/chrome/browser/guestview/guestview.cc
@@ -182,18 +182,18 @@
 
   webcontents_guestview_map.Get().erase(guest_web_contents());
 
-  while (!pending_events_.empty()) {
-    delete pending_events_.front();
-    pending_events_.pop();
-  }
+  pending_events_.clear();
 }
 
 void GuestView::DispatchEvent(Event* event) {
-  if (!in_extension())
-      return;
+  scoped_ptr<Event> event_ptr(event);
+  if (!in_extension()) {
+    NOTREACHED();
+    return;
+  }
 
   if (!attached()) {
-    pending_events_.push(event);
+    pending_events_.push_back(linked_ptr<Event>(event_ptr.release()));
     return;
   }
 
@@ -209,8 +209,6 @@
       embedder_web_contents_, profile, embedder_extension_id_,
       event->name(), args.Pass(),
       extensions::EventRouter::USER_GESTURE_UNKNOWN, info);
-
-  delete event;
 }
 
 void GuestView::SendQueuedEvents() {
@@ -218,8 +216,8 @@
     return;
 
   while (!pending_events_.empty()) {
-    Event* event = pending_events_.front();
-    pending_events_.pop();
-    DispatchEvent(event);
+    linked_ptr<Event> event_ptr = pending_events_.front();
+    pending_events_.pop_front();
+    DispatchEvent(event_ptr.release());
   }
 }
diff --git a/chrome/browser/guestview/guestview.h b/chrome/browser/guestview/guestview.h
index 63b28bb..3ff23f4 100644
--- a/chrome/browser/guestview/guestview.h
+++ b/chrome/browser/guestview/guestview.h
@@ -138,7 +138,7 @@
 
   // This is a queue of Events that are destined to be sent to the embedder once
   // the guest is attached to a particular embedder.
-  std::queue<Event*> pending_events_;
+  std::deque<linked_ptr<Event> > pending_events_;
 
   // This is used to ensure pending tasks will not fire after this object is
   // destroyed.
diff --git a/chrome/browser/guestview/guestview_constants.cc b/chrome/browser/guestview/guestview_constants.cc
index 976f491..d1d9e82 100644
--- a/chrome/browser/guestview/guestview_constants.cc
+++ b/chrome/browser/guestview/guestview_constants.cc
@@ -7,10 +7,10 @@
 namespace guestview {
 
 // Parameters/properties on events.
-const char kUserGesture[] = "userGesture";
 const char kIsTopLevel[] = "isTopLevel";
 const char kReason[] = "reason";
 const char kUrl[] = "url";
+const char kUserGesture[] = "userGesture";
 
 // Initialization parameters.
 const char kParameterApi[] = "api";
diff --git a/chrome/browser/guestview/guestview_constants.h b/chrome/browser/guestview/guestview_constants.h
index fa87682..7f1e03e 100644
--- a/chrome/browser/guestview/guestview_constants.h
+++ b/chrome/browser/guestview/guestview_constants.h
@@ -10,10 +10,10 @@
 namespace guestview {
 
 // Parameters/properties on events.
-extern const char kUserGesture[];
 extern const char kIsTopLevel[];
 extern const char kReason[];
 extern const char kUrl[];
+extern const char kUserGesture[];
 
 // Initialization parameters.
 extern const char kParameterApi[];
diff --git a/chrome/browser/guestview/webview/javascript_dialog_helper.cc b/chrome/browser/guestview/webview/javascript_dialog_helper.cc
new file mode 100644
index 0000000..8173f06
--- /dev/null
+++ b/chrome/browser/guestview/webview/javascript_dialog_helper.cc
@@ -0,0 +1,104 @@
+// 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.
+
+#include "chrome/browser/guestview/webview/javascript_dialog_helper.h"
+
+#include "base/strings/utf_string_conversions.h"
+#include "base/values.h"
+#include "chrome/browser/guestview/guestview_constants.h"
+#include "chrome/browser/guestview/webview/webview_constants.h"
+#include "chrome/browser/guestview/webview/webview_guest.h"
+#include "chrome/browser/guestview/webview/webview_permission_types.h"
+
+namespace {
+
+std::string JavaScriptMessageTypeToString(
+    content::JavaScriptMessageType message_type) {
+  switch (message_type) {
+    case content::JAVASCRIPT_MESSAGE_TYPE_ALERT:
+      return "alert";
+    case content::JAVASCRIPT_MESSAGE_TYPE_CONFIRM:
+      return "confirm";
+    case content::JAVASCRIPT_MESSAGE_TYPE_PROMPT:
+      return "prompt";
+    default:
+      NOTREACHED() << "Unknown JavaScript Message Type.";
+      return "unknown";
+  }
+}
+
+}  // namespace
+
+JavaScriptDialogHelper::JavaScriptDialogHelper(WebViewGuest* guest)
+    : webview_guest_(guest) {
+}
+
+JavaScriptDialogHelper::~JavaScriptDialogHelper() {
+}
+
+void JavaScriptDialogHelper::RunJavaScriptDialog(
+    content::WebContents* web_contents,
+    const GURL& origin_url,
+    const std::string& accept_lang,
+    content::JavaScriptMessageType javascript_message_type,
+    const base::string16& message_text,
+    const base::string16& default_prompt_text,
+    const DialogClosedCallback& callback,
+    bool* did_suppress_message) {
+  base::DictionaryValue request_info;
+  request_info.Set(
+      webview::kDefaultPromptText,
+      base::Value::CreateStringValue(base::UTF16ToUTF8(default_prompt_text)));
+  request_info.Set(
+      webview::kMessageText,
+      base::Value::CreateStringValue(base::UTF16ToUTF8(message_text)));
+  request_info.Set(
+      webview::kMessageType,
+      base::Value::CreateStringValue(
+          JavaScriptMessageTypeToString(javascript_message_type)));
+  request_info.Set(
+      guestview::kUrl,
+      base::Value::CreateStringValue(origin_url.spec()));
+  webview_guest_->RequestPermission(
+      static_cast<BrowserPluginPermissionType>(
+          WEB_VIEW_PERMISSION_TYPE_JAVASCRIPT_DIALOG),
+      request_info,
+      base::Bind(&JavaScriptDialogHelper::OnPermissionResponse,
+                 base::Unretained(this),
+                 callback),
+      false /* allowed_by_default */);
+}
+
+void JavaScriptDialogHelper::RunBeforeUnloadDialog(
+    content::WebContents* web_contents,
+    const base::string16& message_text,
+    bool is_reload,
+    const DialogClosedCallback& callback) {
+  // This is called if the guest has a beforeunload event handler.
+  // This callback allows navigation to proceed.
+  callback.Run(true, base::string16());
+}
+
+bool JavaScriptDialogHelper::HandleJavaScriptDialog(
+    content::WebContents* web_contents,
+    bool accept,
+    const base::string16* prompt_override) {
+  return false;
+}
+
+void JavaScriptDialogHelper::CancelActiveAndPendingDialogs(
+    content::WebContents* web_contents) {
+}
+
+void JavaScriptDialogHelper::WebContentsDestroyed(
+    content::WebContents* web_contents) {
+}
+
+void JavaScriptDialogHelper::OnPermissionResponse(
+    const DialogClosedCallback& callback,
+    bool allow,
+    const std::string& user_input) {
+  callback.Run(allow && webview_guest_->attached(),
+               base::UTF8ToUTF16(user_input));
+}
diff --git a/chrome/browser/guestview/webview/javascript_dialog_helper.h b/chrome/browser/guestview/webview/javascript_dialog_helper.h
new file mode 100644
index 0000000..4f536bd
--- /dev/null
+++ b/chrome/browser/guestview/webview/javascript_dialog_helper.h
@@ -0,0 +1,53 @@
+// 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.
+
+#ifndef CHROME_BROWSER_GUESTVIEW_WEBVIEW_JAVASCRIPT_DIALOG_HELPER_H_
+#define CHROME_BROWSER_GUESTVIEW_WEBVIEW_JAVASCRIPT_DIALOG_HELPER_H_
+
+#include "content/public/browser/javascript_dialog_manager.h"
+
+class WebViewGuest;
+
+class JavaScriptDialogHelper : public content::JavaScriptDialogManager {
+ public:
+  explicit JavaScriptDialogHelper(WebViewGuest* guest);
+  virtual ~JavaScriptDialogHelper();
+
+  // JavaScriptDialogManager implementation.
+  virtual void RunJavaScriptDialog(
+      content::WebContents* web_contents,
+      const GURL& origin_url,
+      const std::string& accept_lang,
+      content::JavaScriptMessageType javascript_message_type,
+      const base::string16& message_text,
+      const base::string16& default_prompt_text,
+      const DialogClosedCallback& callback,
+      bool* did_suppress_message) OVERRIDE;
+  virtual void RunBeforeUnloadDialog(
+      content::WebContents* web_contents,
+      const base::string16& message_text,
+      bool is_reload,
+      const DialogClosedCallback& callback) OVERRIDE;
+  virtual bool HandleJavaScriptDialog(
+      content::WebContents* web_contents,
+      bool accept,
+      const base::string16* prompt_override) OVERRIDE;
+  virtual void CancelActiveAndPendingDialogs(
+      content::WebContents* web_contents) OVERRIDE;
+  virtual void WebContentsDestroyed(
+      content::WebContents* web_contents) OVERRIDE;
+
+ private:
+  void OnPermissionResponse(
+      const DialogClosedCallback& callback,
+      bool allow,
+      const std::string& user_input);
+
+  // Pointer to the webview that is being helped.
+  WebViewGuest* const webview_guest_;
+
+  DISALLOW_COPY_AND_ASSIGN(JavaScriptDialogHelper);
+};
+
+#endif  // CHROME_BROWSER_GUESTVIEW_WEBVIEW_JAVASCRIPT_DIALOG_HELPER_H_
diff --git a/chrome/browser/guestview/webview/webview_constants.cc b/chrome/browser/guestview/webview/webview_constants.cc
index 1a12408..2bd5e69 100644
--- a/chrome/browser/guestview/webview/webview_constants.cc
+++ b/chrome/browser/guestview/webview/webview_constants.cc
@@ -27,11 +27,15 @@
 const char kEventZoomChange[] = "webview.onZoomChange";
 
 // Parameters/properties on events.
+const char kDefaultPromptText[] = "defaultPromptText";
 const char kFindSearchText[] = "searchText";
 const char kFindFinalUpdate[] = "finalUpdate";
+const char kLastUnlockedBySelf[] = "lastUnlockedBySelf";
 const char kLevel[] = "level";
 const char kLine[] = "line";
 const char kMessage[] = "message";
+const char kMessageText[] = "messageText";
+const char kMessageType[] = "messageType";
 const char kNewHeight[] = "newHeight";
 const char kNewURL[] = "newUrl";
 const char kNewWidth[] = "newWidth";
diff --git a/chrome/browser/guestview/webview/webview_constants.h b/chrome/browser/guestview/webview/webview_constants.h
index 6804985..a05c9b9 100644
--- a/chrome/browser/guestview/webview/webview_constants.h
+++ b/chrome/browser/guestview/webview/webview_constants.h
@@ -30,11 +30,15 @@
 extern const char kEventZoomChange[];
 
 // Parameters/properties on events.
+extern const char kDefaultPromptText[];
 extern const char kFindSearchText[];
 extern const char kFindFinalUpdate[];
+extern const char kLastUnlockedBySelf[];
 extern const char kLevel[];
 extern const char kLine[];
 extern const char kMessage[];
+extern const char kMessageText[];
+extern const char kMessageType[];
 extern const char kNewHeight[];
 extern const char kNewURL[];
 extern const char kNewWidth[];
diff --git a/chrome/browser/guestview/webview/webview_guest.cc b/chrome/browser/guestview/webview/webview_guest.cc
index fc82fbb..9a14b4f 100644
--- a/chrome/browser/guestview/webview/webview_guest.cc
+++ b/chrome/browser/guestview/webview/webview_guest.cc
@@ -32,6 +32,8 @@
 #include "content/public/browser/storage_partition.h"
 #include "content/public/browser/user_metrics.h"
 #include "content/public/browser/web_contents.h"
+#include "content/public/browser/web_contents_delegate.h"
+#include "content/public/common/media_stream_request.h"
 #include "content/public/common/page_zoom.h"
 #include "content/public/common/result_codes.h"
 #include "content/public/common/stop_find_action.h"
@@ -75,26 +77,26 @@
 
 static std::string PermissionTypeToString(BrowserPluginPermissionType type) {
   switch (type) {
-    case BROWSER_PLUGIN_PERMISSION_TYPE_DOWNLOAD:
-      return webview::kPermissionTypeDownload;
-    case BROWSER_PLUGIN_PERMISSION_TYPE_MEDIA:
-      return webview::kPermissionTypeMedia;
     case BROWSER_PLUGIN_PERMISSION_TYPE_NEW_WINDOW:
       return webview::kPermissionTypeNewWindow;
-    case BROWSER_PLUGIN_PERMISSION_TYPE_POINTER_LOCK:
-      return webview::kPermissionTypePointerLock;
-    case BROWSER_PLUGIN_PERMISSION_TYPE_JAVASCRIPT_DIALOG:
-      return webview::kPermissionTypeDialog;
     case BROWSER_PLUGIN_PERMISSION_TYPE_UNKNOWN:
       NOTREACHED();
       break;
     default: {
       WebViewPermissionType webview = static_cast<WebViewPermissionType>(type);
       switch (webview) {
+        case WEB_VIEW_PERMISSION_TYPE_DOWNLOAD:
+          return webview::kPermissionTypeDownload;
         case WEB_VIEW_PERMISSION_TYPE_GEOLOCATION:
           return webview::kPermissionTypeGeolocation;
+        case WEB_VIEW_PERMISSION_TYPE_JAVASCRIPT_DIALOG:
+          return webview::kPermissionTypeDialog;
         case WEB_VIEW_PERMISSION_TYPE_LOAD_PLUGIN:
           return webview::kPermissionTypeLoadPlugin;
+        case WEB_VIEW_PERMISSION_TYPE_MEDIA:
+          return webview::kPermissionTypeMedia;
+        case WEB_VIEW_PERMISSION_TYPE_POINTER_LOCK:
+          return webview::kPermissionTypePointerLock;
       }
       NOTREACHED();
     }
@@ -137,7 +139,8 @@
       pending_reload_on_attachment_(false),
       main_frame_id_(0),
       chromevox_injected_(false),
-      find_helper_(this) {
+      find_helper_(this),
+      javascript_dialog_helper_(this) {
   notification_registrar_.Add(
       this, content::NOTIFICATION_LOAD_COMPLETED_MAIN_FRAME,
       content::Source<WebContents>(guest_web_contents));
@@ -191,39 +194,38 @@
     // scenario would be: an embedder allows geolocation request but doesn't
     // have geolocation access on its own.
     switch (info.permission_type) {
-      case BROWSER_PLUGIN_PERMISSION_TYPE_DOWNLOAD:
-        content::RecordAction(
-            UserMetricsAction("BrowserPlugin.PermissionAllow.Download"));
-        break;
-      case BROWSER_PLUGIN_PERMISSION_TYPE_MEDIA:
-        content::RecordAction(
-            UserMetricsAction("BrowserPlugin.PermissionAllow.Media"));
-        break;
-      case BROWSER_PLUGIN_PERMISSION_TYPE_POINTER_LOCK:
-        content::RecordAction(
-            UserMetricsAction("BrowserPlugin.PermissionAllow.PointerLock"));
-        break;
       case BROWSER_PLUGIN_PERMISSION_TYPE_NEW_WINDOW:
         content::RecordAction(
             UserMetricsAction("BrowserPlugin.PermissionAllow.NewWindow"));
         break;
-      case BROWSER_PLUGIN_PERMISSION_TYPE_JAVASCRIPT_DIALOG:
-        content::RecordAction(
-            UserMetricsAction("BrowserPlugin.PermissionAllow.JSDialog"));
-        break;
       case BROWSER_PLUGIN_PERMISSION_TYPE_UNKNOWN:
         break;
       default: {
         WebViewPermissionType webview_permission_type =
             static_cast<WebViewPermissionType>(info.permission_type);
         switch (webview_permission_type) {
+          case WEB_VIEW_PERMISSION_TYPE_DOWNLOAD:
+            content::RecordAction(
+                UserMetricsAction("WebView.PermissionAllow.Download"));
+            break;
           case WEB_VIEW_PERMISSION_TYPE_GEOLOCATION:
             content::RecordAction(
                 UserMetricsAction("WebView.PermissionAllow.Geolocation"));
             break;
+          case WEB_VIEW_PERMISSION_TYPE_JAVASCRIPT_DIALOG:
+            content::RecordAction(
+                UserMetricsAction("WebView.PermissionAllow.JSDialog"));
+            break;
           case WEB_VIEW_PERMISSION_TYPE_LOAD_PLUGIN:
             content::RecordAction(
                 UserMetricsAction("WebView.Guest.PermissionAllow.PluginLoad"));
+          case WEB_VIEW_PERMISSION_TYPE_MEDIA:
+            content::RecordAction(
+                UserMetricsAction("WebView.PermissionAllow.Media"));
+            break;
+          case WEB_VIEW_PERMISSION_TYPE_POINTER_LOCK:
+            content::RecordAction(
+                UserMetricsAction("WebView.PermissionAllow.PointerLock"));
             break;
           default:
             break;
@@ -232,39 +234,38 @@
     }
   } else {
     switch (info.permission_type) {
-      case BROWSER_PLUGIN_PERMISSION_TYPE_DOWNLOAD:
-        content::RecordAction(
-            UserMetricsAction("BrowserPlugin.PermissionDeny.Download"));
-        break;
-      case BROWSER_PLUGIN_PERMISSION_TYPE_MEDIA:
-        content::RecordAction(
-            UserMetricsAction("BrowserPlugin.PermissionDeny.Media"));
-        break;
-      case BROWSER_PLUGIN_PERMISSION_TYPE_POINTER_LOCK:
-        content::RecordAction(
-            UserMetricsAction("BrowserPlugin.PermissionDeny.PointerLock"));
-        break;
       case BROWSER_PLUGIN_PERMISSION_TYPE_NEW_WINDOW:
         content::RecordAction(
             UserMetricsAction("BrowserPlugin.PermissionDeny.NewWindow"));
         break;
-      case BROWSER_PLUGIN_PERMISSION_TYPE_JAVASCRIPT_DIALOG:
-        content::RecordAction(
-            UserMetricsAction("BrowserPlugin.PermissionDeny.JSDialog"));
-        break;
       case BROWSER_PLUGIN_PERMISSION_TYPE_UNKNOWN:
         break;
       default: {
         WebViewPermissionType webview_permission_type =
             static_cast<WebViewPermissionType>(info.permission_type);
         switch (webview_permission_type) {
+          case WEB_VIEW_PERMISSION_TYPE_DOWNLOAD:
+            content::RecordAction(
+                UserMetricsAction("WebView.PermissionDeny.Download"));
+            break;
           case WEB_VIEW_PERMISSION_TYPE_GEOLOCATION:
             content::RecordAction(
                 UserMetricsAction("WebView.PermissionDeny.Geolocation"));
             break;
+          case WEB_VIEW_PERMISSION_TYPE_JAVASCRIPT_DIALOG:
+            content::RecordAction(
+                UserMetricsAction("WebView.PermissionDeny.JSDialog"));
+            break;
           case WEB_VIEW_PERMISSION_TYPE_LOAD_PLUGIN:
             content::RecordAction(
                 UserMetricsAction("WebView.Guest.PermissionDeny.PluginLoad"));
+          case WEB_VIEW_PERMISSION_TYPE_MEDIA:
+            content::RecordAction(
+                UserMetricsAction("WebView.PermissionDeny.Media"));
+            break;
+          case WEB_VIEW_PERMISSION_TYPE_POINTER_LOCK:
+            content::RecordAction(
+                UserMetricsAction("WebView.PermissionDeny.PointerLock"));
             break;
           default:
             break;
@@ -590,6 +591,39 @@
   pending_permission_requests_.erase(request_itr);
 }
 
+void WebViewGuest::OnWebViewMediaPermissionResponse(
+    const content::MediaStreamRequest& request,
+    const content::MediaResponseCallback& callback,
+    bool allow,
+    const std::string& user_input) {
+  if (!allow || !attached()) {
+    // Deny the request.
+    callback.Run(content::MediaStreamDevices(),
+                 content::MEDIA_DEVICE_INVALID_STATE,
+                 scoped_ptr<content::MediaStreamUI>());
+    return;
+  }
+  if (!embedder_web_contents()->GetDelegate())
+    return;
+
+  embedder_web_contents()->GetDelegate()->
+      RequestMediaAccessPermission(embedder_web_contents(), request, callback);
+}
+
+void WebViewGuest::OnWebViewDownloadPermissionResponse(
+    const base::Callback<void(bool)>& callback,
+    bool allow,
+    const std::string& user_input) {
+  callback.Run(allow && attached());
+}
+
+void WebViewGuest::OnWebViewPointerLockPermissionResponse(
+    const base::Callback<void(bool)>& callback,
+    bool allow,
+    const std::string& user_input) {
+  callback.Run(allow && attached());
+}
+
 WebViewGuest::SetPermissionResult WebViewGuest::SetPermission(
     int request_id,
     PermissionResponseAction action,
@@ -835,6 +869,69 @@
   DispatchEvent(new GuestView::Event(webview::kEventSizeChanged, args.Pass()));
 }
 
+void WebViewGuest::RequestMediaAccessPermission(
+    const content::MediaStreamRequest& request,
+    const content::MediaResponseCallback& callback) {
+  base::DictionaryValue request_info;
+  request_info.Set(
+      guestview::kUrl,
+      base::Value::CreateStringValue(request.security_origin.spec()));
+  RequestPermission(static_cast<BrowserPluginPermissionType>(
+                        WEB_VIEW_PERMISSION_TYPE_MEDIA),
+                    request_info,
+                    base::Bind(&WebViewGuest::OnWebViewMediaPermissionResponse,
+                               base::Unretained(this),
+                               request,
+                               callback),
+                    false /* allowed_by_default */);
+}
+
+void WebViewGuest::CanDownload(
+    const std::string& request_method,
+    const GURL& url,
+    const base::Callback<void(bool)>& callback) {
+  base::DictionaryValue request_info;
+  request_info.Set(
+      guestview::kUrl,
+      base::Value::CreateStringValue(url.spec()));
+  RequestPermission(
+      static_cast<BrowserPluginPermissionType>(
+          WEB_VIEW_PERMISSION_TYPE_DOWNLOAD),
+      request_info,
+      base::Bind(&WebViewGuest::OnWebViewDownloadPermissionResponse,
+                 base::Unretained(this),
+                 callback),
+      false /* allowed_by_default */);
+}
+
+void WebViewGuest::RequestPointerLockPermission(
+    bool user_gesture,
+    bool last_unlocked_by_target,
+    const base::Callback<void(bool)>& callback) {
+  base::DictionaryValue request_info;
+  request_info.Set(guestview::kUserGesture,
+                   base::Value::CreateBooleanValue(user_gesture));
+  request_info.Set(webview::kLastUnlockedBySelf,
+                   base::Value::CreateBooleanValue(last_unlocked_by_target));
+  request_info.Set(guestview::kUrl,
+                   base::Value::CreateStringValue(
+                       guest_web_contents()->GetLastCommittedURL().spec()));
+
+  RequestPermission(
+      static_cast<BrowserPluginPermissionType>(
+          WEB_VIEW_PERMISSION_TYPE_POINTER_LOCK),
+      request_info,
+      base::Bind(&WebViewGuest::OnWebViewPointerLockPermissionResponse,
+                 base::Unretained(this),
+                 callback),
+      false /* allowed_by_default */);
+}
+
+content::JavaScriptDialogManager*
+    WebViewGuest::GetJavaScriptDialogManager() {
+  return &javascript_dialog_helper_;
+}
+
 #if defined(OS_CHROMEOS)
 void WebViewGuest::OnAccessibilityStatusChanged(
     const chromeos::AccessibilityStatusEventDetails& details) {
@@ -901,13 +998,13 @@
       PermissionResponseInfo(callback, permission_type, allowed_by_default);
   scoped_ptr<base::DictionaryValue> args(request_info.DeepCopy());
   args->SetInteger(webview::kRequestId, request_id);
-  switch (permission_type) {
+  switch (static_cast<int>(permission_type)) {
     case BROWSER_PLUGIN_PERMISSION_TYPE_NEW_WINDOW: {
       DispatchEvent(new GuestView::Event(webview::kEventNewWindow,
                                          args.Pass()));
       break;
     }
-    case BROWSER_PLUGIN_PERMISSION_TYPE_JAVASCRIPT_DIALOG: {
+    case WEB_VIEW_PERMISSION_TYPE_JAVASCRIPT_DIALOG: {
       DispatchEvent(new GuestView::Event(webview::kEventDialog,
                                          args.Pass()));
       break;
diff --git a/chrome/browser/guestview/webview/webview_guest.h b/chrome/browser/guestview/webview/webview_guest.h
index 0234550..53e2f5a 100644
--- a/chrome/browser/guestview/webview/webview_guest.h
+++ b/chrome/browser/guestview/webview/webview_guest.h
@@ -8,7 +8,9 @@
 #include "base/observer_list.h"
 #include "chrome/browser/extensions/tab_helper.h"
 #include "chrome/browser/guestview/guestview.h"
+#include "chrome/browser/guestview/webview/javascript_dialog_helper.h"
 #include "chrome/browser/guestview/webview/webview_find_helper.h"
+#include "content/public/browser/javascript_dialog_manager.h"
 #include "content/public/browser/notification_registrar.h"
 #include "content/public/browser/web_contents_observer.h"
 #include "third_party/WebKit/public/web/WebFindOptions.h"
@@ -81,6 +83,18 @@
   virtual GURL ResolveURL(const std::string& src) OVERRIDE;
   virtual void SizeChanged(const gfx::Size& old_size, const gfx::Size& new_size)
       OVERRIDE;
+  virtual void RequestMediaAccessPermission(
+      const content::MediaStreamRequest& request,
+      const content::MediaResponseCallback& callback) OVERRIDE;
+  virtual void CanDownload(const std::string& request_method,
+                           const GURL& url,
+                           const base::Callback<void(bool)>& callback) OVERRIDE;
+  virtual void RequestPointerLockPermission(
+      bool user_gesture,
+      bool last_unlocked_by_target,
+      const base::Callback<void(bool)>& callback) OVERRIDE;
+  virtual content::JavaScriptDialogManager*
+      GetJavaScriptDialogManager() OVERRIDE;
 
   // NotificationObserver implementation.
   virtual void Observe(int type,
@@ -123,6 +137,22 @@
 
   void CancelGeolocationPermissionRequest(int bridge_id);
 
+  void OnWebViewMediaPermissionResponse(
+      const content::MediaStreamRequest& request,
+      const content::MediaResponseCallback& callback,
+      bool allow,
+      const std::string& user_input);
+
+  void OnWebViewDownloadPermissionResponse(
+      const base::Callback<void(bool)>& callback,
+      bool allow,
+      const std::string& user_input);
+
+  void OnWebViewPointerLockPermissionResponse(
+      const base::Callback<void(bool)>& callback,
+      bool allow,
+      const std::string& user_input);
+
   enum PermissionResponseAction {
     DENY,
     ALLOW,
@@ -277,6 +307,9 @@
   // Handles find requests and replies for the webview find API.
   WebviewFindHelper find_helper_;
 
+  // Handles the JavaScript dialog requests.
+  JavaScriptDialogHelper javascript_dialog_helper_;
+
   friend void WebviewFindHelper::DispatchFindUpdateEvent(bool canceled,
                                                          bool final_update);
 
diff --git a/chrome/browser/guestview/webview/webview_permission_types.h b/chrome/browser/guestview/webview/webview_permission_types.h
index aa68333..a532036 100644
--- a/chrome/browser/guestview/webview/webview_permission_types.h
+++ b/chrome/browser/guestview/webview/webview_permission_types.h
@@ -8,10 +8,23 @@
 #include "content/public/common/browser_plugin_permission_type.h"
 
 enum WebViewPermissionType {
-  WEB_VIEW_PERMISSION_TYPE_GEOLOCATION =
+  WEB_VIEW_PERMISSION_TYPE_DOWNLOAD =
       BROWSER_PLUGIN_PERMISSION_TYPE_CONTENT_END + 1,
 
-  WEB_VIEW_PERMISSION_TYPE_LOAD_PLUGIN
+  WEB_VIEW_PERMISSION_TYPE_GEOLOCATION,
+
+  // JavaScript Dialogs: prompt, alert, confirm
+  // Note: Even through dialogs do not use the permission API, the dialog API
+  // is sufficiently similiar that it's convenient to consider it a permission
+  // type for code reuse.
+  WEB_VIEW_PERMISSION_TYPE_JAVASCRIPT_DIALOG,
+
+  WEB_VIEW_PERMISSION_TYPE_LOAD_PLUGIN,
+
+  // Media access (audio/video) permission request type.
+  WEB_VIEW_PERMISSION_TYPE_MEDIA,
+
+  WEB_VIEW_PERMISSION_TYPE_POINTER_LOCK
 };
 
 #endif  // CHROME_BROWSER_GUESTVIEW_WEBVIEW_WEBVIEW_PERMISSION_TYPES_H_
diff --git a/chrome/browser/history/DEPS b/chrome/browser/history/DEPS
index 6585583..627ee65 100644
--- a/chrome/browser/history/DEPS
+++ b/chrome/browser/history/DEPS
@@ -23,7 +23,7 @@
   "!chrome/browser/autocomplete/url_prefix.h",
   "!chrome/browser/bookmarks/bookmark_model.h",
   "!chrome/browser/bookmarks/bookmark_model_factory.h",
-  "!chrome/browser/bookmarks/bookmark_service.h",
+  "!chrome/browser/bookmarks/bookmark_utils.h",
   "!chrome/browser/browser_process.h",
   "!chrome/browser/chromeos/login/existing_user_controller.h",
   "!chrome/browser/content_settings/cookie_settings.h",
@@ -37,6 +37,7 @@
   "!chrome/browser/profiles/incognito_helpers.h",
   "!chrome/browser/profiles/profile.h",
   "!chrome/browser/profiles/profile_manager.h",
+  "!chrome/browser/search_engines/template_url_id.h",
   "!chrome/browser/signin/oauth2_token_service.h",
   "!chrome/browser/signin/profile_oauth2_token_service.h",
   "!chrome/browser/signin/profile_oauth2_token_service_factory.h",
@@ -47,10 +48,10 @@
   "!chrome/browser/sync/profile_sync_service_factory.h",
   "!chrome/browser/ui/browser.h",
   "!chrome/browser/ui/browser_finder.h",
-  "!chrome/browser/search_engines/template_url_id.h",
   "!chrome/browser/ui/profile_error_dialog.h",
   "!chrome/browser/ui/webui/ntp/most_visited_handler.h",
   "!chrome/browser/ui/webui/ntp/new_tab_ui.h",
+  "!components/bookmarks/core/browser/bookmark_service.h",
 ]
 
 specific_include_rules = {
diff --git a/chrome/browser/history/android/android_cache_database.cc b/chrome/browser/history/android/android_cache_database.cc
index 5df7951..ca10317 100644
--- a/chrome/browser/history/android/android_cache_database.cc
+++ b/chrome/browser/history/android/android_cache_database.cc
@@ -93,7 +93,7 @@
 }
 
 bool AndroidCacheDatabase::SetFaviconID(URLID url_id,
-                                        chrome::FaviconID favicon_id) {
+                                        favicon_base::FaviconID favicon_id) {
   sql::Statement update_statement(GetDB().GetCachedStatement(SQL_FROM_HERE,
       "UPDATE android_cache_db.bookmark_cache "
       "SET favicon_id = ? WHERE url_id = ? "));
diff --git a/chrome/browser/history/android/android_cache_database.h b/chrome/browser/history/android/android_cache_database.h
index 314e0d1..3fb977b 100644
--- a/chrome/browser/history/android/android_cache_database.h
+++ b/chrome/browser/history/android/android_cache_database.h
@@ -42,7 +42,7 @@
 
   // Set the given |url_id|'s favicon column to |favicon_id|. Returns true on
   // success.
-  bool SetFaviconID(URLID url_id, chrome::FaviconID favicon_id);
+  bool SetFaviconID(URLID url_id, favicon_base::FaviconID favicon_id);
 
   // The search_terms table -------------------------------------------------
   //
diff --git a/chrome/browser/history/android/android_provider_backend.cc b/chrome/browser/history/android/android_provider_backend.cc
index 62752c1..69db8f6 100644
--- a/chrome/browser/history/android/android_provider_backend.cc
+++ b/chrome/browser/history/android/android_provider_backend.cc
@@ -5,7 +5,6 @@
 #include "chrome/browser/history/android/android_provider_backend.h"
 
 #include "base/i18n/case_conversion.h"
-#include "chrome/browser/bookmarks/bookmark_service.h"
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/favicon/favicon_changed_details.h"
 #include "chrome/browser/history/android/android_time.h"
@@ -17,6 +16,7 @@
 #include "chrome/browser/history/history_backend.h"
 #include "chrome/browser/history/history_database.h"
 #include "chrome/browser/history/thumbnail_database.h"
+#include "components/bookmarks/core/browser/bookmark_service.h"
 #include "content/public/common/page_transition_types.h"
 #include "sql/connection.h"
 
@@ -840,7 +840,8 @@
   if (!thumbnail_db_)
     return true;
 
-  if (!thumbnail_db_->InitIconMappingEnumerator(chrome::FAVICON, &enumerator))
+  if (!thumbnail_db_->InitIconMappingEnumerator(favicon_base::FAVICON,
+                                                &enumerator))
     return false;
 
   IconMapping icon_mapping;
@@ -1016,7 +1017,7 @@
     return false;
   deleted_details->rows.push_back(old_url_row);
 
-  chrome::FaviconID favicon_id = statement->statement()->ColumnInt64(4);
+  favicon_base::FaviconID favicon_id = statement->statement()->ColumnInt64(4);
   if (favicon_id) {
     std::vector<FaviconBitmap> favicon_bitmaps;
     if (!thumbnail_db_ ||
diff --git a/chrome/browser/history/android/android_provider_backend_unittest.cc b/chrome/browser/history/android/android_provider_backend_unittest.cc
index b7c2ae5..6548152 100644
--- a/chrome/browser/history/android/android_provider_backend_unittest.cc
+++ b/chrome/browser/history/android/android_provider_backend_unittest.cc
@@ -14,7 +14,6 @@
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/bookmarks/bookmark_model.h"
 #include "chrome/browser/bookmarks/bookmark_model_factory.h"
-#include "chrome/browser/bookmarks/bookmark_service.h"
 #include "chrome/browser/bookmarks/bookmark_test_helpers.h"
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/favicon/favicon_changed_details.h"
@@ -50,7 +49,7 @@
   Time create_time_;
   Time last_visit_time_;
   bool bookmark_;
-  chrome::FaviconID favicon_id_;
+  favicon_base::FaviconID favicon_id_;
 };
 
 }  // namespace
@@ -253,14 +252,15 @@
   // Set favicon to url2.
   std::vector<unsigned char> data;
   data.push_back('1');
-  chrome::FaviconBitmapData bitmap_data_element;
+  favicon_base::FaviconBitmapData bitmap_data_element;
   bitmap_data_element.bitmap_data = new base::RefCountedBytes(data);
   bitmap_data_element.pixel_size = gfx::Size();
   bitmap_data_element.icon_url = GURL();
-  std::vector<chrome::FaviconBitmapData> favicon_bitmap_data;
+  std::vector<favicon_base::FaviconBitmapData> favicon_bitmap_data;
   favicon_bitmap_data.push_back(bitmap_data_element);
 
-  history_backend->SetFavicons(url2, chrome::FAVICON, favicon_bitmap_data);
+  history_backend->SetFavicons(
+      url2, favicon_base::FAVICON, favicon_bitmap_data);
   history_backend->Closing();
   }
 
@@ -402,14 +402,15 @@
   // Set favicon to url2.
   std::vector<unsigned char> data;
   data.push_back('1');
-  chrome::FaviconBitmapData bitmap_data_element;
+  favicon_base::FaviconBitmapData bitmap_data_element;
   bitmap_data_element.bitmap_data = new base::RefCountedBytes(data);
   bitmap_data_element.pixel_size = gfx::Size();
   bitmap_data_element.icon_url = GURL();
-  std::vector<chrome::FaviconBitmapData> favicon_bitmap_data;
+  std::vector<favicon_base::FaviconBitmapData> favicon_bitmap_data;
   favicon_bitmap_data.push_back(bitmap_data_element);
 
-  history_backend->SetFavicons(url2, chrome::FAVICON, favicon_bitmap_data);
+  history_backend->SetFavicons(
+      url2, favicon_base::FAVICON, favicon_bitmap_data);
   history_backend->Closing();
   }
 
@@ -1154,7 +1155,7 @@
 
   std::vector<IconMapping> icon_mappings;
   EXPECT_TRUE(thumbnail_db_.GetIconMappingsForPageURL(
-      row1.url(), chrome::FAVICON, &icon_mappings));
+      row1.url(), favicon_base::FAVICON, &icon_mappings));
   EXPECT_EQ(1u, icon_mappings.size());
   std::vector<FaviconBitmap> favicon_bitmaps;
   EXPECT_TRUE(thumbnail_db_.GetFaviconBitmaps(icon_mappings[0].icon_id,
@@ -1183,7 +1184,7 @@
               delegate_.favicon_details()->urls.find(row1.url()));
 
   EXPECT_FALSE(thumbnail_db_.GetIconMappingsForPageURL(
-      row1.url(), chrome::FAVICON, NULL));
+      row1.url(), favicon_base::FAVICON, NULL));
 }
 
 TEST_F(AndroidProviderBackendTest, UpdateSearchTermTable) {
@@ -1801,14 +1802,15 @@
   // Set favicon to url2.
   std::vector<unsigned char> data;
   data.push_back('1');
-  chrome::FaviconBitmapData bitmap_data_element;
+  favicon_base::FaviconBitmapData bitmap_data_element;
   bitmap_data_element.bitmap_data = new base::RefCountedBytes(data);
   bitmap_data_element.pixel_size = gfx::Size();
   bitmap_data_element.icon_url = GURL();
-  std::vector<chrome::FaviconBitmapData> favicon_bitmap_data;
+  std::vector<favicon_base::FaviconBitmapData> favicon_bitmap_data;
   favicon_bitmap_data.push_back(bitmap_data_element);
 
-  history_backend->SetFavicons(url2, chrome::FAVICON, favicon_bitmap_data);
+  history_backend->SetFavicons(
+      url2, favicon_base::FAVICON, favicon_bitmap_data);
   history_backend->Closing();
   }
 
diff --git a/chrome/browser/history/android/bookmark_model_sql_handler.cc b/chrome/browser/history/android/bookmark_model_sql_handler.cc
index 446d2af..d1d2132 100644
--- a/chrome/browser/history/android/bookmark_model_sql_handler.cc
+++ b/chrome/browser/history/android/bookmark_model_sql_handler.cc
@@ -7,7 +7,7 @@
 #include "base/logging.h"
 #include "chrome/browser/bookmarks/bookmark_model.h"
 #include "chrome/browser/bookmarks/bookmark_model_factory.h"
-#include "chrome/browser/bookmarks/bookmark_service.h"
+#include "chrome/browser/bookmarks/bookmark_utils.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/history/url_database.h"
 #include "chrome/browser/profiles/profile_manager.h"
@@ -46,7 +46,7 @@
   BookmarkModel* bookmark_model = GetBookmarkModel();
   if (!bookmark_model)
     return;
-  const BookmarkNode* parent = bookmark_model->GetNodeByID(parent_id);
+  const BookmarkNode* parent = GetBookmarkNodeByID(bookmark_model, parent_id);
   if (parent)
     bookmark_model->AddURL(parent, 0, title, url);
 }
diff --git a/chrome/browser/history/android/favicon_sql_handler.cc b/chrome/browser/history/android/favicon_sql_handler.cc
index 6c0c3d7..e56d71c 100644
--- a/chrome/browser/history/android/favicon_sql_handler.cc
+++ b/chrome/browser/history/android/favicon_sql_handler.cc
@@ -37,23 +37,19 @@
   // If the image_data will be updated, it is not reasonable to find if the
   // icon is already in database, just create a new favicon.
   // TODO(pkotwicz): Pass in real pixel size.
-  chrome::FaviconID favicon_id = thumbnail_db_->AddFavicon(
-      GURL(),
-      chrome::FAVICON,
-      row.favicon(),
-      Time::Now(),
-      gfx::Size());
+  favicon_base::FaviconID favicon_id = thumbnail_db_->AddFavicon(
+      GURL(), favicon_base::FAVICON, row.favicon(), Time::Now(), gfx::Size());
 
   if (!favicon_id)
     return false;
 
-  std::vector<chrome::FaviconID> favicon_ids;
+  std::vector<favicon_base::FaviconID> favicon_ids;
   for (TableIDRows::const_iterator i = ids_set.begin();
        i != ids_set.end(); ++i) {
     // Remove all icon mappings to favicons of type FAVICON.
     std::vector<IconMapping> icon_mappings;
     thumbnail_db_->GetIconMappingsForPageURL(
-        i->url, chrome::FAVICON, &icon_mappings);
+        i->url, favicon_base::FAVICON, &icon_mappings);
     for (std::vector<IconMapping>::const_iterator m = icon_mappings.begin();
          m != icon_mappings.end(); ++m) {
       if (!thumbnail_db_->DeleteIconMapping(m->mapping_id))
@@ -74,7 +70,7 @@
 }
 
 bool FaviconSQLHandler::Delete(const TableIDRows& ids_set) {
-  std::vector<chrome::FaviconID> favicon_ids;
+  std::vector<favicon_base::FaviconID> favicon_ids;
   for (TableIDRows::const_iterator i = ids_set.begin();
        i != ids_set.end(); ++i) {
     // Since the URL was deleted, we delete all types of icon mappings.
@@ -106,20 +102,16 @@
 
   // Is it a problem to give a empty URL?
   // TODO(pkotwicz): Pass in real pixel size.
-  chrome::FaviconID id = thumbnail_db_->AddFavicon(
-      GURL(),
-      chrome::FAVICON,
-      row->favicon(),
-      Time::Now(),
-      gfx::Size());
+  favicon_base::FaviconID id = thumbnail_db_->AddFavicon(
+      GURL(), favicon_base::FAVICON, row->favicon(), Time::Now(), gfx::Size());
   if (!id)
     return false;
   return thumbnail_db_->AddIconMapping(row->url(), id);
 }
 
 bool FaviconSQLHandler::DeleteUnusedFavicon(
-    const std::vector<chrome::FaviconID>& ids) {
-  for (std::vector<chrome::FaviconID>::const_iterator i = ids.begin();
+    const std::vector<favicon_base::FaviconID>& ids) {
+  for (std::vector<favicon_base::FaviconID>::const_iterator i = ids.begin();
        i != ids.end();
        ++i) {
     if (!thumbnail_db_->HasMappingFor(*i) && !thumbnail_db_->DeleteFavicon(*i))
diff --git a/chrome/browser/history/android/favicon_sql_handler.h b/chrome/browser/history/android/favicon_sql_handler.h
index f004cb6..d4b2d3f 100644
--- a/chrome/browser/history/android/favicon_sql_handler.h
+++ b/chrome/browser/history/android/favicon_sql_handler.h
@@ -26,7 +26,7 @@
  private:
   // Deletes the given favicons if they are not used by any pages. Returns
   // true if all unused favicons are deleted.
-  bool DeleteUnusedFavicon(const std::vector<chrome::FaviconID>& ids);
+  bool DeleteUnusedFavicon(const std::vector<favicon_base::FaviconID>& ids);
 
   ThumbnailDatabase* thumbnail_db_;
 
diff --git a/chrome/browser/history/android/sqlite_cursor.cc b/chrome/browser/history/android/sqlite_cursor.cc
index 9fd16ce..cde8674 100644
--- a/chrome/browser/history/android/sqlite_cursor.cc
+++ b/chrome/browser/history/android/sqlite_cursor.cc
@@ -172,7 +172,7 @@
   delete this;
 }
 
-bool SQLiteCursor::GetFavicon(chrome::FaviconID id,
+bool SQLiteCursor::GetFavicon(favicon_base::FaviconID id,
                               std::vector<unsigned char>* image_data) {
   if (id) {
     BrowserThread::PostTask(
@@ -201,7 +201,7 @@
 }
 
 void SQLiteCursor::GetFaviconForIDInUIThread(
-    chrome::FaviconID id,
+    favicon_base::FaviconID id,
     const FaviconService::FaviconRawCallback& callback) {
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
   if (!tracker_.get())
@@ -209,9 +209,8 @@
   favicon_service_->GetLargestRawFaviconForID(id, callback, tracker_.get());
 }
 
-
 void SQLiteCursor::OnFaviconData(
-    const chrome::FaviconBitmapResult& bitmap_result) {
+    const favicon_base::FaviconBitmapResult& bitmap_result) {
   favicon_bitmap_result_ = bitmap_result;
   event_.Signal();
   if (test_observer_)
diff --git a/chrome/browser/history/android/sqlite_cursor.h b/chrome/browser/history/android/sqlite_cursor.h
index 389a05c..0a4349b 100644
--- a/chrome/browser/history/android/sqlite_cursor.h
+++ b/chrome/browser/history/android/sqlite_cursor.h
@@ -146,15 +146,15 @@
   }
 
   // Get Favicon from history backend.
-  bool GetFavicon(chrome::FaviconID id,
+  bool GetFavicon(favicon_base::FaviconID id,
                   std::vector<unsigned char>* image_data);
 
   void GetFaviconForIDInUIThread(
-      chrome::FaviconID id,
+      favicon_base::FaviconID id,
       const FaviconService::FaviconRawCallback& callback);
 
   // The callback function of FaviconService::GetLargestRawFaviconForID().
-  void OnFaviconData(const chrome::FaviconBitmapResult& bitmap_result);
+  void OnFaviconData(const favicon_base::FaviconBitmapResult& bitmap_result);
 
   // The callback function of MoveTo().
   void OnMoved(AndroidHistoryProviderService::Handle handle, int pos);
@@ -187,7 +187,7 @@
   int count_;
 
   // The favicon image.
-  chrome::FaviconBitmapResult favicon_bitmap_result_;
+  favicon_base::FaviconBitmapResult favicon_bitmap_result_;
 
   TestObserver* test_observer_;
 
diff --git a/chrome/browser/history/expire_history_backend.cc b/chrome/browser/history/expire_history_backend.cc
index cf77fe4..fc45c02 100644
--- a/chrome/browser/history/expire_history_backend.cc
+++ b/chrome/browser/history/expire_history_backend.cc
@@ -14,18 +14,17 @@
 #include "base/files/file_enumerator.h"
 #include "base/logging.h"
 #include "base/message_loop/message_loop.h"
-#include "chrome/browser/bookmarks/bookmark_service.h"
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/history/archived_database.h"
 #include "chrome/browser/history/history_database.h"
 #include "chrome/browser/history/history_notifications.h"
 #include "chrome/browser/history/thumbnail_database.h"
-
-using base::Time;
-using base::TimeDelta;
+#include "components/bookmarks/core/browser/bookmark_service.h"
 
 namespace history {
 
+// Helpers --------------------------------------------------------------------
+
 namespace {
 
 // The number of days by which the expiration threshold is advanced for items
@@ -46,12 +45,14 @@
 // time. This is the most general reader.
 class AllVisitsReader : public ExpiringVisitsReader {
  public:
-  virtual bool Read(Time end_time, HistoryDatabase* db,
-                    VisitVector* visits, int max_visits) const OVERRIDE {
+  virtual bool Read(base::Time end_time,
+                    HistoryDatabase* db,
+                    VisitVector* visits,
+                    int max_visits) const OVERRIDE {
     DCHECK(db) << "must have a database to operate upon";
     DCHECK(visits) << "visit vector has to exist in order to populate it";
 
-    db->GetAllVisitsInRange(Time(), end_time, max_visits, visits);
+    db->GetAllVisitsInRange(base::Time(), end_time, max_visits, visits);
     // When we got the maximum number of visits we asked for, we say there could
     // be additional things to expire now.
     return static_cast<int>(visits->size()) == max_visits;
@@ -66,19 +67,21 @@
 //   but not past the current time.
 class AutoSubframeVisitsReader : public ExpiringVisitsReader {
  public:
-  virtual bool Read(Time end_time, HistoryDatabase* db,
-                    VisitVector* visits, int max_visits) const OVERRIDE {
+  virtual bool Read(base::Time end_time,
+                    HistoryDatabase* db,
+                    VisitVector* visits,
+                    int max_visits) const OVERRIDE {
     DCHECK(db) << "must have a database to operate upon";
     DCHECK(visits) << "visit vector has to exist in order to populate it";
 
-    Time begin_time = db->GetEarlyExpirationThreshold();
+    base::Time begin_time = db->GetEarlyExpirationThreshold();
     // Advance |end_time| to expire early.
-    Time early_end_time = end_time +
-        TimeDelta::FromDays(kEarlyExpirationAdvanceDays);
+    base::Time early_end_time = end_time +
+        base::TimeDelta::FromDays(kEarlyExpirationAdvanceDays);
 
     // We don't want to set the early expiration threshold to a time in the
     // future.
-    Time now = Time::Now();
+    base::Time now = base::Time::Now();
     if (early_end_time > now)
       early_end_time = now;
 
@@ -138,31 +141,17 @@
 
 }  // namespace
 
-struct ExpireHistoryBackend::DeleteDependencies {
-  // The time range affected. These can be is_null() to be unbounded in one
-  // or both directions.
-  base::Time begin_time, end_time;
 
-  // ----- Filled by DeleteVisitRelatedInfo or manually if a function doesn't
-  //       call that function. -----
+// ExpireHistoryBackend::DeleteEffects ----------------------------------------
 
-  // The unique URL rows affected by this delete.
-  std::map<URLID, URLRow> affected_urls;
+ExpireHistoryBackend::DeleteEffects::DeleteEffects() {
+}
 
-  // ----- Filled by DeleteOneURL -----
+ExpireHistoryBackend::DeleteEffects::~DeleteEffects() {
+}
 
-  // The URLs deleted during this operation.
-  URLRows deleted_urls;
 
-  // The list of all favicon IDs that the affected URLs had. Favicons will be
-  // shared between all URLs with the same favicon, so this is the set of IDs
-  // that we will need to check when the delete operations are complete.
-  std::set<chrome::FaviconID> affected_favicons;
-
-  // The list of all favicon urls that were actually deleted from the thumbnail
-  // db.
-  std::set<GURL> expired_favicons;
-};
+// ExpireHistoryBackend -------------------------------------------------------
 
 ExpireHistoryBackend::ExpireHistoryBackend(
     BroadcastNotificationDelegate* delegate,
@@ -194,7 +183,7 @@
   if (!main_db_)
     return;
 
-  DeleteDependencies dependencies;
+  DeleteEffects effects;
   for (std::vector<GURL>::const_iterator url = urls.begin(); url != urls.end();
        ++url) {
     URLRow url_row;
@@ -208,28 +197,27 @@
     VisitVector visits;
     main_db_->GetVisitsForURL(url_row.id(), &visits);
 
-    DeleteVisitRelatedInfo(visits, &dependencies);
+    DeleteVisitRelatedInfo(visits, &effects);
 
     // We skip ExpireURLsForVisits (since we are deleting from the
     // URL, and not starting with visits in a given time range). We
     // therefore need to call the deletion and favicon update
     // functions manually.
-
     BookmarkService* bookmark_service = GetBookmarkService();
-    bool is_bookmarked =
-        (bookmark_service && bookmark_service->IsBookmarked(*url));
-
-    DeleteOneURL(url_row, is_bookmarked, &dependencies);
+    DeleteOneURL(url_row,
+                 bookmark_service && bookmark_service->IsBookmarked(*url),
+                 &effects);
   }
 
-  DeleteFaviconsIfPossible(dependencies.affected_favicons,
-                           &dependencies.expired_favicons);
+  DeleteFaviconsIfPossible(&effects);
 
-  BroadcastDeleteNotifications(&dependencies, DELETION_USER_INITIATED);
+  BroadcastNotifications(&effects, DELETION_USER_INITIATED);
 }
 
 void ExpireHistoryBackend::ExpireHistoryBetween(
-    const std::set<GURL>& restrict_urls, Time begin_time, Time end_time) {
+    const std::set<GURL>& restrict_urls,
+    base::Time begin_time,
+    base::Time end_time) {
   if (!main_db_)
     return;
 
@@ -277,24 +265,21 @@
   if (visits.empty())
     return;
 
-  DeleteDependencies dependencies;
-  DeleteVisitRelatedInfo(visits, &dependencies);
+  DeleteEffects effects;
+  DeleteVisitRelatedInfo(visits, &effects);
 
   // Delete or update the URLs affected. We want to update the visit counts
   // since this is called by the user who wants to delete their recent history,
   // and we don't want to leave any evidence.
-  ExpireURLsForVisits(visits, &dependencies);
-  DeleteFaviconsIfPossible(dependencies.affected_favicons,
-                           &dependencies.expired_favicons);
-
-  // An is_null begin time means that all history should be deleted.
-  BroadcastDeleteNotifications(&dependencies, DELETION_USER_INITIATED);
+  ExpireURLsForVisits(visits, &effects);
+  DeleteFaviconsIfPossible(&effects);
+  BroadcastNotifications(&effects, DELETION_USER_INITIATED);
 
   // Pick up any bits possibly left over.
   ParanoidExpireHistory();
 }
 
-void ExpireHistoryBackend::ArchiveHistoryBefore(Time end_time) {
+void ExpireHistoryBackend::ArchiveHistoryBefore(base::Time end_time) {
   if (!main_db_)
     return;
 
@@ -325,7 +310,7 @@
 }
 
 void ExpireHistoryBackend::StartArchivingOldStuff(
-    TimeDelta expiration_threshold) {
+    base::TimeDelta expiration_threshold) {
   expiration_threshold_ = expiration_threshold;
 
   // Remove all readers, just in case this was method was called before.
@@ -342,72 +327,71 @@
   ScheduleArchive();
 }
 
-void ExpireHistoryBackend::DeleteFaviconsIfPossible(
-    const std::set<chrome::FaviconID>& favicon_set,
-    std::set<GURL>* expired_favicons) {
+void ExpireHistoryBackend::DeleteFaviconsIfPossible(DeleteEffects* effects) {
   if (!thumb_db_)
     return;
 
-  for (std::set<chrome::FaviconID>::const_iterator i = favicon_set.begin();
-       i != favicon_set.end(); ++i) {
+  for (std::set<favicon_base::FaviconID>::const_iterator i =
+           effects->affected_favicons.begin();
+       i != effects->affected_favicons.end(); ++i) {
     if (!thumb_db_->HasMappingFor(*i)) {
       GURL icon_url;
-      chrome::IconType icon_type;
+      favicon_base::IconType icon_type;
       if (thumb_db_->GetFaviconHeader(*i,
                                       &icon_url,
                                       &icon_type) &&
           thumb_db_->DeleteFavicon(*i)) {
-        expired_favicons->insert(icon_url);
+        effects->deleted_favicons.insert(icon_url);
       }
     }
   }
 }
 
-void ExpireHistoryBackend::BroadcastDeleteNotifications(
-    DeleteDependencies* dependencies, DeletionType type) {
-  if (!dependencies->deleted_urls.empty()) {
-    // Broadcast the URL deleted notification. Note that we also broadcast when
-    // we were requested to delete everything even if that was a NOP, since
-    // some components care to know when history is deleted (it's up to them to
-    // determine if they care whether anything was deleted).
+void ExpireHistoryBackend::BroadcastNotifications(DeleteEffects* effects,
+                                                  DeletionType type) {
+  if (!effects->modified_urls.empty()) {
+    scoped_ptr<URLsModifiedDetails> details(new URLsModifiedDetails);
+    details->changed_urls = effects->modified_urls;
+    delegate_->NotifySyncURLsModified(&details->changed_urls);
+    delegate_->BroadcastNotifications(
+        chrome::NOTIFICATION_HISTORY_URLS_MODIFIED,
+        details.PassAs<HistoryDetails>());
+  }
+  if (!effects->deleted_urls.empty()) {
     scoped_ptr<URLsDeletedDetails> details(new URLsDeletedDetails);
     details->all_history = false;
     details->archived = (type == DELETION_ARCHIVED);
-    details->rows = dependencies->deleted_urls;
-    details->favicon_urls = dependencies->expired_favicons;
-    delegate_->NotifySyncURLsDeleted(false, details->archived, &details->rows);
+    details->rows = effects->deleted_urls;
+    details->favicon_urls = effects->deleted_favicons;
+    delegate_->NotifySyncURLsDeleted(details->all_history, details->archived,
+                                     &details->rows);
     delegate_->BroadcastNotifications(chrome::NOTIFICATION_HISTORY_URLS_DELETED,
                                       details.PassAs<HistoryDetails>());
   }
 }
 
-void ExpireHistoryBackend::DeleteVisitRelatedInfo(
-    const VisitVector& visits,
-    DeleteDependencies* dependencies) {
+void ExpireHistoryBackend::DeleteVisitRelatedInfo(const VisitVector& visits,
+                                                  DeleteEffects* effects) {
   for (size_t i = 0; i < visits.size(); i++) {
     // Delete the visit itself.
     main_db_->DeleteVisit(visits[i]);
 
     // Add the URL row to the affected URL list.
-    std::map<URLID, URLRow>::const_iterator found =
-        dependencies->affected_urls.find(visits[i].url_id);
-    if (found == dependencies->affected_urls.end()) {
+    if (!effects->affected_urls.count(visits[i].url_id)) {
       URLRow row;
-      if (!main_db_->GetURLRow(visits[i].url_id, &row))
-        continue;
-      dependencies->affected_urls[visits[i].url_id] = row;
+      if (main_db_->GetURLRow(visits[i].url_id, &row))
+        effects->affected_urls[visits[i].url_id] = row;
     }
   }
 }
 
-void ExpireHistoryBackend::DeleteOneURL(
-    const URLRow& url_row,
-    bool is_bookmarked,
-    DeleteDependencies* dependencies) {
+void ExpireHistoryBackend::DeleteOneURL(const URLRow& url_row,
+                                        bool is_bookmarked,
+                                        DeleteEffects* effects) {
   main_db_->DeleteSegmentForURL(url_row.id());
 
   if (!is_bookmarked) {
-    dependencies->deleted_urls.push_back(url_row);
+    effects->deleted_urls.push_back(url_row);
 
     // Delete stuff that references this URL.
     if (thumb_db_) {
@@ -416,7 +400,7 @@
       if (thumb_db_->GetIconMappingsForPageURL(url_row.url(), &icon_mappings)) {
         for (std::vector<IconMapping>::iterator m = icon_mappings.begin();
              m != icon_mappings.end(); ++m) {
-          dependencies->affected_favicons.insert(m->icon_id);
+          effects->affected_favicons.insert(m->icon_id);
         }
         // Delete the mapping entries for the url.
         thumb_db_->DeleteIconMappings(url_row.url());
@@ -458,9 +442,8 @@
 
 }  // namespace
 
-void ExpireHistoryBackend::ExpireURLsForVisits(
-    const VisitVector& visits,
-    DeleteDependencies* dependencies) {
+void ExpireHistoryBackend::ExpireURLsForVisits(const VisitVector& visits,
+                                               DeleteEffects* effects) {
   // First find all unique URLs and the number of visits we're deleting for
   // each one.
   std::map<URLID, ChangedURL> changed_urls;
@@ -484,8 +467,8 @@
   BookmarkService* bookmark_service = GetBookmarkService();
   for (std::map<URLID, ChangedURL>::const_iterator i = changed_urls.begin();
        i != changed_urls.end(); ++i) {
-    // The unique URL rows should already be filled into the dependencies.
-    URLRow& url_row = dependencies->affected_urls[i->first];
+    // The unique URL rows should already be filled in.
+    URLRow& url_row = effects->affected_urls[i->first];
     if (!url_row.id())
       continue;  // URL row doesn't exist in the database.
 
@@ -496,14 +479,14 @@
     if (main_db_->GetMostRecentVisitForURL(url_row.id(), &last_visit))
       url_row.set_last_visit(last_visit.visit_time);
     else
-      url_row.set_last_visit(Time());
+      url_row.set_last_visit(base::Time());
 
     // Don't delete URLs with visits still in the DB, or bookmarked.
     bool is_bookmarked =
         (bookmark_service && bookmark_service->IsBookmarked(url_row.url()));
     if (!is_bookmarked && url_row.last_visit().is_null()) {
       // Not bookmarked and no more visits. Nuke the url.
-      DeleteOneURL(url_row, is_bookmarked, dependencies);
+      DeleteOneURL(url_row, is_bookmarked, effects);
     } else {
       // NOTE: The calls to std::max() below are a backstop, but they should
       // never actually be needed unless the database is corrupt (I think).
@@ -514,13 +497,13 @@
 
       // Update the db with the new details.
       main_db_->UpdateURLRow(url_row.id(), url_row);
+
+      effects->modified_urls.push_back(url_row);
     }
   }
 }
 
-void ExpireHistoryBackend::ArchiveURLsAndVisits(
-    const VisitVector& visits,
-    DeleteDependencies* dependencies) {
+void ExpireHistoryBackend::ArchiveURLsAndVisits(const VisitVector& visits) {
   if (!archived_db_ || !main_db_)
     return;
 
@@ -529,22 +512,16 @@
   // and the archived one.
   std::map<URLID, URLID> main_id_to_archived_id;
   for (size_t i = 0; i < visits.size(); i++) {
-    std::map<URLID, URLRow>::const_iterator found =
-      dependencies->affected_urls.find(visits[i].url_id);
-    if (found == dependencies->affected_urls.end()) {
+    if (!main_id_to_archived_id.count(visits[i].url_id)) {
       // Unique URL encountered, archive it.
-      URLRow row;  // Row in the main DB.
-      URLID archived_id;  // ID in the archived DB.
-      if (!main_db_->GetURLRow(visits[i].url_id, &row) ||
-          !(archived_id = ArchiveOneURL(row))) {
-        // Failure archiving, skip this one.
-        continue;
-      }
-
       // Only add URL to the dependency list once we know we successfully
       // archived it.
-      main_id_to_archived_id[row.id()] = archived_id;
-      dependencies->affected_urls[row.id()] = row;
+      URLRow row;
+      if (main_db_->GetURLRow(visits[i].url_id, &row)) {
+        URLID archived_id = ArchiveOneURL(row);
+        if (archived_id)
+          main_id_to_archived_id[row.id()] = archived_id;
+      }
     }
   }
 
@@ -574,14 +551,14 @@
 }
 
 void ExpireHistoryBackend::ScheduleArchive() {
-  TimeDelta delay;
+  base::TimeDelta delay;
   if (work_queue_.empty()) {
     // If work queue is empty, reset the work queue to contain all tasks and
     // schedule next iteration after a longer delay.
     InitWorkQueue();
-    delay = TimeDelta::FromMinutes(kExpirationEmptyDelayMin);
+    delay = base::TimeDelta::FromMinutes(kExpirationEmptyDelayMin);
   } else {
-    delay = TimeDelta::FromSeconds(kExpirationDelaySec);
+    delay = base::TimeDelta::FromSeconds(kExpirationDelaySec);
   }
 
   base::MessageLoop::current()->PostDelayedTask(
@@ -616,8 +593,8 @@
 
   // Add an extra time unit to given end time, because
   // GetAllVisitsInRange, et al. queries' end value is non-inclusive.
-  Time effective_end_time =
-      Time::FromInternalValue(end_time.ToInternalValue() + 1);
+  base::Time effective_end_time =
+      base::Time::FromInternalValue(end_time.ToInternalValue() + 1);
 
   VisitVector affected_visits;
   bool more_to_expire = reader->Read(effective_end_time, main_db_,
@@ -633,37 +610,16 @@
   }
 
   // Do the actual archiving.
-  DeleteDependencies archived_dependencies;
-  ArchiveURLsAndVisits(archived_visits, &archived_dependencies);
-  DeleteVisitRelatedInfo(archived_visits, &archived_dependencies);
+  ArchiveURLsAndVisits(archived_visits);
 
-  DeleteDependencies deleted_dependencies;
-  DeleteVisitRelatedInfo(deleted_visits, &deleted_dependencies);
-
-  // This will remove or archive all the affected URLs. Must do the deleting
-  // cleanup before archiving so the delete dependencies structure references
-  // only those URLs that were actually deleted instead of having some visits
-  // archived and then the rest deleted.
-  ExpireURLsForVisits(deleted_visits, &deleted_dependencies);
-  ExpireURLsForVisits(archived_visits, &archived_dependencies);
-
-  // Create a union of all affected favicons (we don't store favicons for
-  // archived URLs) and delete them.
-  std::set<chrome::FaviconID> affected_favicons(
-      archived_dependencies.affected_favicons);
-  for (std::set<chrome::FaviconID>::const_iterator i =
-           deleted_dependencies.affected_favicons.begin();
-       i != deleted_dependencies.affected_favicons.end(); ++i) {
-    affected_favicons.insert(*i);
-  }
-  DeleteFaviconsIfPossible(affected_favicons,
-                           &deleted_dependencies.expired_favicons);
-
-  // Send notifications for the stuff that was deleted. These won't normally be
-  // in history views since they were subframes, but they will be in the visited
-  // link system, which needs to be updated now. This function is smart enough
-  // to not do anything if nothing was deleted.
-  BroadcastDeleteNotifications(&deleted_dependencies, DELETION_ARCHIVED);
+  // Delete all the visits.
+  deleted_visits.insert(deleted_visits.end(), archived_visits.begin(),
+                        archived_visits.end());
+  DeleteEffects deleted_effects;
+  DeleteVisitRelatedInfo(deleted_visits, &deleted_effects);
+  ExpireURLsForVisits(deleted_visits, &deleted_effects);
+  DeleteFaviconsIfPossible(&deleted_effects);
+  BroadcastNotifications(&deleted_effects, DELETION_ARCHIVED);
 
   return more_to_expire;
 }
diff --git a/chrome/browser/history/expire_history_backend.h b/chrome/browser/history/expire_history_backend.h
index 471dd7b..e88da3e 100644
--- a/chrome/browser/history/expire_history_backend.h
+++ b/chrome/browser/history/expire_history_backend.h
@@ -35,7 +35,8 @@
   virtual void BroadcastNotifications(int type,
                                       scoped_ptr<HistoryDetails> details) = 0;
 
-  // Trigger handling of deleted urls in typed url sync code
+  // Tells typed url sync code to handle URL modifications or deletions.
+  virtual void NotifySyncURLsModified(URLRows* rows) = 0;
   virtual void NotifySyncURLsDeleted(bool all_history,
                                      bool archived,
                                      URLRows* rows) = 0;
@@ -121,13 +122,37 @@
   FRIEND_TEST_ALL_PREFIXES(ExpireHistoryTest, ArchiveSomeOldHistoryWithSource);
   friend class ::TestingProfile;
 
-  struct DeleteDependencies;
+  struct DeleteEffects {
+    DeleteEffects();
+    ~DeleteEffects();
+
+    // The time range affected. These can be is_null() to be unbounded in one
+    // or both directions.
+    base::Time begin_time, end_time;
+
+    // The unique URL rows affected by this delete.
+    std::map<URLID, URLRow> affected_urls;
+
+    // The URLs modified, but not deleted, during this operation.
+    URLRows modified_urls;
+
+    // The URLs deleted during this operation.
+    URLRows deleted_urls;
+
+    // All favicon IDs that the deleted URLs had. Favicons will be shared
+    // between all URLs with the same favicon, so this is the set of IDs that we
+    // will need to check when the delete operations are complete.
+    std::set<favicon_base::FaviconID> affected_favicons;
+
+    // All favicon urls that were actually deleted from the thumbnail db.
+    std::set<GURL> deleted_favicons;
+  };
 
   // Deletes the visit-related stuff for all the visits in the given list, and
   // adds the rows for unique URLs affected to the affected_urls list in
   // the dependencies structure.
   void DeleteVisitRelatedInfo(const VisitVector& visits,
-                              DeleteDependencies* dependencies);
+                              DeleteEffects* effects);
 
   // Moves the given visits from the main database to the archived one.
   void ArchiveVisits(const VisitVector& visits);
@@ -151,7 +176,7 @@
   // favicons and thumbnails.
   void DeleteOneURL(const URLRow& url_row,
                     bool is_bookmarked,
-                    DeleteDependencies* dependencies);
+                    DeleteEffects* effects);
 
   // Adds or merges the given URL row with the archived database, returning the
   // ID of the URL in the archived database, or 0 on failure. The main (source)
@@ -162,8 +187,7 @@
 
   // Deletes all the URLs in the given vector and handles their dependencies.
   // This will delete starred URLs
-  void DeleteURLs(const URLRows& urls,
-                  DeleteDependencies* dependencies);
+  void DeleteURLs(const URLRows& urls, DeleteEffects* effects);
 
   // Expiration involves removing visits, then propagating the visits out from
   // there and delete any orphaned URLs. These will be added to the deleted URLs
@@ -182,24 +206,18 @@
   // Starred URLs will not be deleted. The information in the dependencies that
   // DeleteOneURL fills in will be updated, and this function will also delete
   // any now-unused favicons.
-  void ExpireURLsForVisits(const VisitVector& visits,
-                           DeleteDependencies* dependencies);
+  void ExpireURLsForVisits(const VisitVector& visits, DeleteEffects* effects);
 
   // Creates entries in the archived database for the unique URLs referenced
   // by the given visits. It will then add versions of the visits to that
   // database. The source database WILL NOT BE MODIFIED. The source URLs and
   // visits will have to be deleted in another pass.
-  //
-  // The affected URLs will be filled into the given dependencies structure.
-  void ArchiveURLsAndVisits(const VisitVector& visits,
-                            DeleteDependencies* dependencies);
+  void ArchiveURLsAndVisits(const VisitVector& visits);
 
-  // Deletes the favicons listed in the set if unused. Fails silently (we don't
-  // care about favicons so much, so don't want to stop everything if it fails).
-  // Fills |expired_favicons| with the set of favicon urls that no longer
-  // have associated visits and were therefore expired.
-  void DeleteFaviconsIfPossible(const std::set<chrome::FaviconID>& favicon_id,
-                                std::set<GURL>* expired_favicons);
+  // Deletes the favicons listed in effects->affected_favicons if unused.
+  // Fills effects->deleted_favicons with the set of favicon urls that were
+  // actually deleted.
+  void DeleteFaviconsIfPossible(DeleteEffects* effects);
 
   // Enum representing what type of action resulted in the history DB deletion.
   enum DeletionType {
@@ -210,9 +228,8 @@
     DELETION_ARCHIVED
   };
 
-  // Broadcast the URL deleted notification.
-  void BroadcastDeleteNotifications(DeleteDependencies* dependencies,
-                                    DeletionType type);
+  // Broadcasts URL modified and deleted notifications.
+  void BroadcastNotifications(DeleteEffects* effects, DeletionType type);
 
   // Schedules a call to DoArchiveIteration.
   void ScheduleArchive();
diff --git a/chrome/browser/history/expire_history_backend_unittest.cc b/chrome/browser/history/expire_history_backend_unittest.cc
index 28be4e1..b80b25c 100644
--- a/chrome/browser/history/expire_history_backend_unittest.cc
+++ b/chrome/browser/history/expire_history_backend_unittest.cc
@@ -56,7 +56,7 @@
                           public BroadcastNotificationDelegate {
  public:
   ExpireHistoryTest()
-      : bookmark_model_(NULL),
+      : bookmark_model_(NULL, false),
         ui_thread_(BrowserThread::UI, &message_loop_),
         db_thread_(BrowserThread::DB, &message_loop_),
         expirer_(this, &bookmark_model_),
@@ -70,15 +70,19 @@
   void AddExampleSourceData(const GURL& url, URLID* id);
 
   // Returns true if the given favicon/thumanil has an entry in the DB.
-  bool HasFavicon(chrome::FaviconID favicon_id);
+  bool HasFavicon(favicon_base::FaviconID favicon_id);
   bool HasThumbnail(URLID url_id);
 
-  chrome::FaviconID GetFavicon(const GURL& page_url,
-                               chrome::IconType icon_type);
+  favicon_base::FaviconID GetFavicon(const GURL& page_url,
+                                     favicon_base::IconType icon_type);
 
   // EXPECTs that each URL-specific history thing (basically, everything but
-  // favicons) is gone.
-  void EnsureURLInfoGone(const URLRow& row);
+  // favicons) is gone, the reason being either that it was |archived|, or
+  // manually deleted.
+  void EnsureURLInfoGone(const URLRow& row, bool archived);
+
+  // Returns whether a NOTIFICATION_HISTORY_URLS_MODIFIED was sent for |url|.
+  bool ModifiedNotificationSent(const GURL& url);
 
   // Clears the list of notifications received.
   void ClearLastNotifications() {
@@ -159,7 +163,7 @@
     thumb_db_.reset();
   }
 
-  // BroadcastNotificationDelegate implementation.
+  // BroadcastNotificationDelegate:
   virtual void BroadcastNotifications(
       int type,
       scoped_ptr<HistoryDetails> details) OVERRIDE {
@@ -167,10 +171,10 @@
     // store them so we can tell that the correct notifications were sent.
     notifications_.push_back(std::make_pair(type, details.release()));
   }
-  virtual void NotifySyncURLsDeleted(
-      bool all_history,
-      bool archived,
-      URLRows* rows) OVERRIDE {}
+  virtual void NotifySyncURLsModified(URLRows* rows) OVERRIDE {}
+  virtual void NotifySyncURLsDeleted(bool all_history,
+                                     bool archived,
+                                     URLRows* rows) OVERRIDE {}
 };
 
 // The example data consists of 4 visits. The middle two visits are to the
@@ -197,10 +201,10 @@
 
   // Two favicons. The first two URLs will share the same one, while the last
   // one will have a unique favicon.
-  chrome::FaviconID favicon1 = thumb_db_->AddFavicon(
-      GURL("http://favicon/url1"), chrome::FAVICON);
-  chrome::FaviconID favicon2 = thumb_db_->AddFavicon(
-      GURL("http://favicon/url2"), chrome::FAVICON);
+  favicon_base::FaviconID favicon1 =
+      thumb_db_->AddFavicon(GURL("http://favicon/url1"), favicon_base::FAVICON);
+  favicon_base::FaviconID favicon2 =
+      thumb_db_->AddFavicon(GURL("http://favicon/url2"), favicon_base::FAVICON);
 
   // Three URLs.
   URLRow url_row1(GURL("http://www.google.com/1"));
@@ -287,14 +291,15 @@
   main_db_->AddVisit(&visit_row4, SOURCE_FIREFOX_IMPORTED);
 }
 
-bool ExpireHistoryTest::HasFavicon(chrome::FaviconID favicon_id) {
+bool ExpireHistoryTest::HasFavicon(favicon_base::FaviconID favicon_id) {
   if (!thumb_db_.get() || favicon_id == 0)
     return false;
   return thumb_db_->GetFaviconHeader(favicon_id, NULL, NULL);
 }
 
-chrome::FaviconID ExpireHistoryTest::GetFavicon(const GURL& page_url,
-                                                chrome::IconType icon_type) {
+favicon_base::FaviconID ExpireHistoryTest::GetFavicon(
+    const GURL& page_url,
+    favicon_base::IconType icon_type) {
   std::vector<IconMapping> icon_mappings;
   if (thumb_db_->GetIconMappingsForPageURL(page_url, icon_type,
                                            &icon_mappings)) {
@@ -314,7 +319,11 @@
   return top_sites_->GetPageThumbnail(url, false, &data);
 }
 
-void ExpireHistoryTest::EnsureURLInfoGone(const URLRow& row) {
+void ExpireHistoryTest::EnsureURLInfoGone(const URLRow& row, bool archived) {
+  // The passed in |row| must originate from |main_db_| so that its ID will be
+  // set to what had been in effect in |main_db_| before the deletion.
+  ASSERT_NE(0, row.id());
+
   // Verify the URL no longer exists.
   URLRow temp_row;
   EXPECT_FALSE(main_db_->GetURLRow(row.id(), &temp_row));
@@ -333,42 +342,65 @@
     if (notifications_[i].first == chrome::NOTIFICATION_HISTORY_URLS_DELETED) {
       URLsDeletedDetails* details = reinterpret_cast<URLsDeletedDetails*>(
           notifications_[i].second);
-      EXPECT_FALSE(details->archived);
+      EXPECT_EQ(archived, details->archived);
       const history::URLRows& rows(details->rows);
-      if (std::find_if(rows.begin(), rows.end(),
-          history::URLRow::URLRowHasURL(row.url())) != rows.end()) {
+      history::URLRows::const_iterator it_row = std::find_if(
+          rows.begin(), rows.end(), history::URLRow::URLRowHasURL(row.url()));
+      if (it_row != rows.end()) {
+        // Further verify that the ID is set to what had been in effect in the
+        // main database before the deletion. The InMemoryHistoryBackend relies
+        // on this to delete its cached copy of the row.
+        EXPECT_EQ(row.id(), it_row->id());
         found_delete_notification = true;
       }
-    } else {
-      EXPECT_NE(notifications_[i].first,
-                chrome::NOTIFICATION_HISTORY_URL_VISITED);
-      EXPECT_NE(notifications_[i].first,
-                chrome::NOTIFICATION_HISTORY_URLS_MODIFIED);
+    } else if (notifications_[i].first ==
+        chrome::NOTIFICATION_HISTORY_URLS_MODIFIED) {
+      const history::URLRows& rows =
+          static_cast<URLsModifiedDetails*>(notifications_[i].second)->
+              changed_urls;
+      EXPECT_TRUE(
+          std::find_if(rows.begin(), rows.end(),
+                        history::URLRow::URLRowHasURL(row.url())) ==
+              rows.end());
     }
   }
   EXPECT_TRUE(found_delete_notification);
 }
 
+bool ExpireHistoryTest::ModifiedNotificationSent(const GURL& url) {
+  for (size_t i = 0; i < notifications_.size(); i++) {
+    if (notifications_[i].first == chrome::NOTIFICATION_HISTORY_URLS_MODIFIED) {
+      const history::URLRows& rows =
+          static_cast<URLsModifiedDetails*>(notifications_[i].second)->
+              changed_urls;
+      if (std::find_if(rows.begin(), rows.end(),
+                       history::URLRow::URLRowHasURL(url)) != rows.end())
+        return true;
+    }
+  }
+  return false;
+}
+
 TEST_F(ExpireHistoryTest, DeleteFaviconsIfPossible) {
   // Add a favicon record.
   const GURL favicon_url("http://www.google.com/favicon.ico");
-  chrome::FaviconID icon_id = thumb_db_->AddFavicon(
-      favicon_url, chrome::FAVICON);
+  favicon_base::FaviconID icon_id =
+      thumb_db_->AddFavicon(favicon_url, favicon_base::FAVICON);
   EXPECT_TRUE(icon_id);
   EXPECT_TRUE(HasFavicon(icon_id));
 
   // The favicon should be deletable with no users.
-  std::set<chrome::FaviconID> favicon_set;
-  std::set<GURL> expired_favicons;
-  favicon_set.insert(icon_id);
-  expirer_.DeleteFaviconsIfPossible(favicon_set, &expired_favicons);
-  EXPECT_FALSE(HasFavicon(icon_id));
-  EXPECT_EQ(1U, expired_favicons.size());
-  EXPECT_EQ(1U, expired_favicons.count(favicon_url));
+  {
+    ExpireHistoryBackend::DeleteEffects effects;
+    effects.affected_favicons.insert(icon_id);
+    expirer_.DeleteFaviconsIfPossible(&effects);
+    EXPECT_FALSE(HasFavicon(icon_id));
+    EXPECT_EQ(1U, effects.deleted_favicons.size());
+    EXPECT_EQ(1U, effects.deleted_favicons.count(favicon_url));
+  }
 
   // Add back the favicon.
-  icon_id = thumb_db_->AddFavicon(
-      favicon_url, chrome::TOUCH_ICON);
+  icon_id = thumb_db_->AddFavicon(favicon_url, favicon_base::TOUCH_ICON);
   EXPECT_TRUE(icon_id);
   EXPECT_TRUE(HasFavicon(icon_id));
 
@@ -379,12 +411,13 @@
   thumb_db_->AddIconMapping(row.url(), icon_id);
 
   // Favicon should not be deletable.
-  favicon_set.clear();
-  favicon_set.insert(icon_id);
-  expired_favicons.clear();
-  expirer_.DeleteFaviconsIfPossible(favicon_set, &expired_favicons);
-  EXPECT_TRUE(HasFavicon(icon_id));
-  EXPECT_TRUE(expired_favicons.empty());
+  {
+    ExpireHistoryBackend::DeleteEffects effects;
+    effects.affected_favicons.insert(icon_id);
+    expirer_.DeleteFaviconsIfPossible(&effects);
+    EXPECT_TRUE(HasFavicon(icon_id));
+    EXPECT_TRUE(effects.deleted_favicons.empty());
+  }
 }
 
 // static
@@ -406,7 +439,8 @@
   // Verify things are the way we expect with a URL row, favicon, thumbnail.
   URLRow last_row;
   ASSERT_TRUE(main_db_->GetURLRow(url_ids[2], &last_row));
-  chrome::FaviconID favicon_id = GetFavicon(last_row.url(), chrome::FAVICON);
+  favicon_base::FaviconID favicon_id =
+      GetFavicon(last_row.url(), favicon_base::FAVICON);
   EXPECT_TRUE(HasFavicon(favicon_id));
   // TODO(sky): fix this, see comment in HasThumbnail.
   // EXPECT_TRUE(HasThumbnail(url_ids[2]));
@@ -419,8 +453,8 @@
   expirer_.DeleteURL(last_row.url());
 
   // All the normal data + the favicon should be gone.
-  EnsureURLInfoGone(last_row);
-  EXPECT_FALSE(GetFavicon(last_row.url(), chrome::FAVICON));
+  EnsureURLInfoGone(last_row, false);
+  EXPECT_FALSE(GetFavicon(last_row.url(), favicon_base::FAVICON));
   EXPECT_FALSE(HasFavicon(favicon_id));
 }
 
@@ -434,7 +468,8 @@
   // Verify things are the way we expect with a URL row, favicon, thumbnail.
   URLRow last_row;
   ASSERT_TRUE(main_db_->GetURLRow(url_ids[1], &last_row));
-  chrome::FaviconID favicon_id = GetFavicon(last_row.url(), chrome::FAVICON);
+  favicon_base::FaviconID favicon_id =
+      GetFavicon(last_row.url(), favicon_base::FAVICON);
   EXPECT_TRUE(HasFavicon(favicon_id));
   // TODO(sky): fix this, see comment in HasThumbnail.
   // EXPECT_TRUE(HasThumbnail(url_ids[1]));
@@ -447,7 +482,7 @@
   expirer_.DeleteURL(last_row.url());
 
   // All the normal data except the favicon should be gone.
-  EnsureURLInfoGone(last_row);
+  EnsureURLInfoGone(last_row, false);
   EXPECT_TRUE(HasFavicon(favicon_id));
 }
 
@@ -471,7 +506,8 @@
   ASSERT_TRUE(main_db_->GetRowForURL(url, &url_row));
 
   // And the favicon should exist.
-  chrome::FaviconID favicon_id = GetFavicon(url_row.url(), chrome::FAVICON);
+  favicon_base::FaviconID favicon_id =
+      GetFavicon(url_row.url(), favicon_base::FAVICON);
   EXPECT_TRUE(HasFavicon(favicon_id));
 
   // And no visits.
@@ -485,10 +521,11 @@
 
   // Unstar the URL and delete again.
   bookmark_utils::RemoveAllBookmarks(&bookmark_model_, url);
+  ClearLastNotifications();
   expirer_.DeleteURL(url);
 
   // Now it should be completely deleted.
-  EnsureURLInfoGone(url_row);
+  EnsureURLInfoGone(url_row, false);
 }
 
 // Deletes multiple URLs at once.  The favicon for the third one but
@@ -501,13 +538,13 @@
   // Verify things are the way we expect with URL rows, favicons,
   // thumbnails.
   URLRow rows[3];
-  chrome::FaviconID favicon_ids[3];
+  favicon_base::FaviconID favicon_ids[3];
   std::vector<GURL> urls;
   // Push back a bogus URL (which shouldn't change anything).
   urls.push_back(GURL());
   for (size_t i = 0; i < arraysize(rows); ++i) {
     ASSERT_TRUE(main_db_->GetURLRow(url_ids[i], &rows[i]));
-    favicon_ids[i] = GetFavicon(rows[i].url(), chrome::FAVICON);
+    favicon_ids[i] = GetFavicon(rows[i].url(), favicon_base::FAVICON);
     EXPECT_TRUE(HasFavicon(favicon_ids[i]));
     // TODO(sky): fix this, see comment in HasThumbnail.
     // EXPECT_TRUE(HasThumbnail(url_ids[i]));
@@ -521,8 +558,8 @@
 
   // First one should still be around (since it was starred).
   ASSERT_TRUE(main_db_->GetRowForURL(rows[0].url(), &rows[0]));
-  EnsureURLInfoGone(rows[1]);
-  EnsureURLInfoGone(rows[2]);
+  EnsureURLInfoGone(rows[1], false);
+  EnsureURLInfoGone(rows[2], false);
   EXPECT_TRUE(HasFavicon(favicon_ids[0]));
   EXPECT_TRUE(HasFavicon(favicon_ids[1]));
   EXPECT_FALSE(HasFavicon(favicon_ids[2]));
@@ -554,6 +591,7 @@
   EXPECT_EQ(1U, visits.size());
 
   // Verify that the middle URL visit time and visit counts were updated.
+  EXPECT_TRUE(ModifiedNotificationSent(url_row1.url()));
   URLRow temp_row;
   ASSERT_TRUE(main_db_->GetURLRow(url_ids[1], &temp_row));
   EXPECT_TRUE(visit_times[2] == url_row1.last_visit());  // Previous value.
@@ -564,14 +602,16 @@
   EXPECT_EQ(0, temp_row.typed_count());
 
   // Verify that the middle URL's favicon and thumbnail is still there.
-  chrome::FaviconID favicon_id = GetFavicon(url_row1.url(), chrome::FAVICON);
+  favicon_base::FaviconID favicon_id =
+      GetFavicon(url_row1.url(), favicon_base::FAVICON);
   EXPECT_TRUE(HasFavicon(favicon_id));
   // TODO(sky): fix this, see comment in HasThumbnail.
   // EXPECT_TRUE(HasThumbnail(url_row1.id()));
 
   // Verify that the last URL was deleted.
-  chrome::FaviconID favicon_id2 = GetFavicon(url_row2.url(), chrome::FAVICON);
-  EnsureURLInfoGone(url_row2);
+  favicon_base::FaviconID favicon_id2 =
+      GetFavicon(url_row2.url(), favicon_base::FAVICON);
+  EnsureURLInfoGone(url_row2, false);
   EXPECT_FALSE(HasFavicon(favicon_id2));
 }
 
@@ -601,6 +641,7 @@
   EXPECT_EQ(1U, visits.size());
 
   // Verify that the middle URL visit time and visit counts were updated.
+  EXPECT_TRUE(ModifiedNotificationSent(url_row1.url()));
   URLRow temp_row;
   ASSERT_TRUE(main_db_->GetURLRow(url_ids[1], &temp_row));
   EXPECT_TRUE(visit_times[2] == url_row1.last_visit());  // Previous value.
@@ -611,14 +652,16 @@
   EXPECT_EQ(0, temp_row.typed_count());
 
   // Verify that the middle URL's favicon and thumbnail is still there.
-  chrome::FaviconID favicon_id = GetFavicon(url_row1.url(), chrome::FAVICON);
+  favicon_base::FaviconID favicon_id =
+      GetFavicon(url_row1.url(), favicon_base::FAVICON);
   EXPECT_TRUE(HasFavicon(favicon_id));
   // TODO(sky): fix this, see comment in HasThumbnail.
   // EXPECT_TRUE(HasThumbnail(url_row1.id()));
 
   // Verify that the last URL was deleted.
-  chrome::FaviconID favicon_id2 = GetFavicon(url_row2.url(), chrome::FAVICON);
-  EnsureURLInfoGone(url_row2);
+  favicon_base::FaviconID favicon_id2 =
+      GetFavicon(url_row2.url(), favicon_base::FAVICON);
+  EnsureURLInfoGone(url_row2, false);
   EXPECT_FALSE(HasFavicon(favicon_id2));
 }
 
@@ -649,6 +692,7 @@
   EXPECT_EQ(1U, visits.size());
 
   // Verify that the middle URL visit time and visit counts were updated.
+  EXPECT_TRUE(ModifiedNotificationSent(url_row1.url()));
   URLRow temp_row;
   ASSERT_TRUE(main_db_->GetURLRow(url_ids[1], &temp_row));
   EXPECT_TRUE(visit_times[2] == url_row1.last_visit());  // Previous value.
@@ -659,7 +703,8 @@
   EXPECT_EQ(0, temp_row.typed_count());
 
   // Verify that the middle URL's favicon and thumbnail is still there.
-  chrome::FaviconID favicon_id = GetFavicon(url_row1.url(), chrome::FAVICON);
+  favicon_base::FaviconID favicon_id =
+      GetFavicon(url_row1.url(), favicon_base::FAVICON);
   EXPECT_TRUE(HasFavicon(favicon_id));
   // TODO(sky): fix this, see comment in HasThumbnail.
   // EXPECT_TRUE(HasThumbnail(url_row1.id()));
@@ -698,7 +743,9 @@
   EXPECT_TRUE(new_url_row1.last_visit() == visit_times[1]);
   EXPECT_TRUE(new_url_row2.last_visit().is_null());  // No last visit time.
 
-  // Visit/typed count should not be updated for bookmarks.
+  // Visit/typed count should be updated.
+  EXPECT_TRUE(ModifiedNotificationSent(url_row1.url()));
+  EXPECT_TRUE(ModifiedNotificationSent(url_row2.url()));
   EXPECT_EQ(0, new_url_row1.typed_count());
   EXPECT_EQ(1, new_url_row1.visit_count());
   EXPECT_EQ(0, new_url_row2.typed_count());
@@ -708,11 +755,12 @@
   // that may have been updated since the time threshold. Since the URL still
   // exists in history, this should not be a privacy problem, we only update
   // the visit counts in this case for consistency anyway.
-  chrome::FaviconID favicon_id = GetFavicon(url_row1.url(), chrome::FAVICON);
+  favicon_base::FaviconID favicon_id =
+      GetFavicon(url_row1.url(), favicon_base::FAVICON);
   EXPECT_TRUE(HasFavicon(favicon_id));
   // TODO(sky): fix this, see comment in HasThumbnail.
   // EXPECT_TRUE(HasThumbnail(new_url_row1.id()));
-  favicon_id = GetFavicon(url_row1.url(), chrome::FAVICON);
+  favicon_id = GetFavicon(url_row1.url(), favicon_base::FAVICON);
   EXPECT_TRUE(HasFavicon(favicon_id));
   // TODO(sky): fix this, see comment in HasThumbnail.
   // EXPECT_TRUE(HasThumbnail(new_url_row2.id()));
@@ -723,18 +771,20 @@
   Time visit_times[4];
   AddExampleData(url_ids, visit_times);
 
-  URLRow url_row1, url_row2;
+  URLRow url_row0, url_row1, url_row2;
+  ASSERT_TRUE(main_db_->GetURLRow(url_ids[0], &url_row0));
   ASSERT_TRUE(main_db_->GetURLRow(url_ids[1], &url_row1));
   ASSERT_TRUE(main_db_->GetURLRow(url_ids[2], &url_row2));
 
   // Archive the oldest two visits. This will actually result in deleting them
-  // since their transition types are empty (not important).
+  // since their transition types are empty.
   expirer_.ArchiveHistoryBefore(visit_times[1]);
 
-  // The first URL should be deleted, the second should not be affected.
+  // The first URL should be deleted, the second should not.
   URLRow temp_row;
-  EXPECT_FALSE(main_db_->GetURLRow(url_ids[0], &temp_row));
+  EnsureURLInfoGone(url_row0, true);
   EXPECT_TRUE(main_db_->GetURLRow(url_ids[1], &temp_row));
+  EXPECT_TRUE(ModifiedNotificationSent(url_row1.url()));
   EXPECT_TRUE(main_db_->GetURLRow(url_ids[2], &temp_row));
 
   // Make sure the archived database has nothing in it.
@@ -743,8 +793,9 @@
 
   // Now archive one more visit so that the middle URL should be removed. This
   // one will actually be archived instead of deleted.
+  ClearLastNotifications();
   expirer_.ArchiveHistoryBefore(visit_times[2]);
-  EXPECT_FALSE(main_db_->GetURLRow(url_ids[1], &temp_row));
+  EnsureURLInfoGone(url_row1, true);
   EXPECT_TRUE(main_db_->GetURLRow(url_ids[2], &temp_row));
 
   // Make sure the archived database has an entry for the second URL.
@@ -770,7 +821,7 @@
   StarURL(url_row1.url());
 
   // Now archive the first three visits (first two URLs). The first two visits
-  // should be, the third deleted, but the URL records should not.
+  // should be deleted, the third archived.
   expirer_.ArchiveHistoryBefore(visit_times[2]);
 
   // The first URL should have its visit deleted, but it should still be present
@@ -779,6 +830,7 @@
   ASSERT_TRUE(main_db_->GetURLRow(url_ids[0], &temp_row));
   // Note that the ID is different in the archived DB, so look up by URL.
   EXPECT_FALSE(archived_db_->GetRowForURL(temp_row.url(), NULL));
+  EXPECT_TRUE(ModifiedNotificationSent(url_row0.url()));
   VisitVector visits;
   main_db_->GetVisitsForURL(temp_row.id(), &visits);
   EXPECT_EQ(0U, visits.size());
@@ -787,6 +839,7 @@
   // archived. It should be present in both the main DB (because it's starred)
   // and the archived DB (for the archived visit).
   ASSERT_TRUE(main_db_->GetURLRow(url_ids[1], &temp_row));
+  EXPECT_TRUE(ModifiedNotificationSent(url_row1.url()));
   main_db_->GetVisitsForURL(temp_row.id(), &visits);
   EXPECT_EQ(0U, visits.size());
 
@@ -799,6 +852,7 @@
   // The third URL should be unchanged.
   EXPECT_TRUE(main_db_->GetURLRow(url_ids[2], &temp_row));
   EXPECT_FALSE(archived_db_->GetRowForURL(temp_row.url(), NULL));
+  EXPECT_FALSE(ModifiedNotificationSent(temp_row.url()));
 }
 
 // Tests the return values from ArchiveSomeOldHistory. The rest of the
diff --git a/chrome/browser/history/history_backend.cc b/chrome/browser/history/history_backend.cc
index 2e0a52e..6d3b98e 100644
--- a/chrome/browser/history/history_backend.cc
+++ b/chrome/browser/history/history_backend.cc
@@ -24,7 +24,6 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/time/time.h"
 #include "chrome/browser/autocomplete/history_url_provider.h"
-#include "chrome/browser/bookmarks/bookmark_service.h"
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/favicon/favicon_changed_details.h"
 #include "chrome/browser/history/download_row.h"
@@ -39,6 +38,7 @@
 #include "chrome/common/chrome_constants.h"
 #include "chrome/common/importer/imported_favicon_usage.h"
 #include "chrome/common/url_constants.h"
+#include "components/bookmarks/core/browser/bookmark_service.h"
 #include "grit/chromium_strings.h"
 #include "grit/generated_resources.h"
 #include "net/base/registry_controlled_domains/registry_controlled_domain.h"
@@ -801,13 +801,14 @@
     return;
 
   scoped_ptr<URLsModifiedDetails> modified(new URLsModifiedDetails);
+  scoped_ptr<URLsModifiedDetails> modified_in_archive(new URLsModifiedDetails);
   for (URLRows::const_iterator i = urls.begin(); i != urls.end(); ++i) {
     DCHECK(!i->last_visit().is_null());
 
     // We will add to either the archived database or the main one depending on
     // the date of the added visit.
-    URLDatabase* url_database;
-    VisitDatabase* visit_database;
+    URLDatabase* url_database = NULL;
+    VisitDatabase* visit_database = NULL;
     if (IsExpiredVisitTime(i->last_visit())) {
       if (!archived_db_)
         return;  // No archived database to save it to, just forget this.
@@ -829,8 +830,16 @@
       }
 
       if (i->typed_count() > 0) {
-        modified->changed_urls.push_back(*i);
-        modified->changed_urls.back().set_id(url_id);  // *i likely has |id_| 0.
+        // Collect expired URLs that belong to |archived_db_| separately; we
+        // want to fire NOTIFICATION_HISTORY_URLS_MODIFIED only for changes that
+        // take place in the main |db_|.
+        if (url_database == db_.get()) {
+          modified->changed_urls.push_back(*i);
+          modified->changed_urls.back().set_id(url_id);  // i->id_ is likely 0.
+        } else {
+          modified_in_archive->changed_urls.push_back(*i);
+          modified_in_archive->changed_urls.back().set_id(url_id);
+        }
       }
     }
 
@@ -853,8 +862,11 @@
     }
   }
 
-  if (typed_url_syncable_service_.get())
+  if (typed_url_syncable_service_.get()) {
+    typed_url_syncable_service_->OnUrlsModified(
+        &modified_in_archive->changed_urls);
     typed_url_syncable_service_->OnUrlsModified(&modified->changed_urls);
+  }
 
   // Broadcast a notification for typed URLs that have been modified. This
   // will be picked up by the in-memory URL database on the main thread.
@@ -1092,19 +1104,19 @@
     return;
 
   // Get the ID for this URL.
-  URLID url_id = db_->GetRowForURL(url, NULL);
-  if (!url_id) {
+  URLRow row;
+  if (!db_->GetRowForURL(url, &row)) {
     // There is a small possibility the url was deleted before the keyword
     // was added. Ignore the request.
     return;
   }
 
-  db_->SetKeywordSearchTermsForURL(url_id, keyword_id, term);
+  db_->SetKeywordSearchTermsForURL(row.id(), keyword_id, term);
 
   BroadcastNotifications(
       chrome::NOTIFICATION_HISTORY_KEYWORD_SEARCH_TERM_UPDATED,
       scoped_ptr<HistoryDetails>(
-          new KeywordSearchUpdatedDetails(url, keyword_id, term)));
+          new KeywordSearchUpdatedDetails(row, keyword_id, term)));
   ScheduleCommit();
 }
 
@@ -1144,7 +1156,7 @@
 
   BroadcastNotifications(
       chrome::NOTIFICATION_HISTORY_KEYWORD_SEARCH_TERM_DELETED,
-      scoped_ptr<HistoryDetails>(new KeywordSearchDeletedDetails(url)));
+      scoped_ptr<HistoryDetails>(new KeywordSearchDeletedDetails(url_id)));
   ScheduleCommit();
 }
 
@@ -1639,17 +1651,17 @@
     int icon_types,
     int desired_size_in_dip,
     const std::vector<ui::ScaleFactor>& desired_scale_factors,
-    std::vector<chrome::FaviconBitmapResult>* bitmap_results) {
+    std::vector<favicon_base::FaviconBitmapResult>* bitmap_results) {
   UpdateFaviconMappingsAndFetchImpl(NULL, icon_urls, icon_types,
                                     desired_size_in_dip, desired_scale_factors,
                                     bitmap_results);
 }
 
 void HistoryBackend::GetLargestFaviconForURL(
-      const GURL& page_url,
-      const std::vector<int>& icon_types,
-      int minimum_size_in_pixels,
-      chrome::FaviconBitmapResult* favicon_bitmap_result) {
+    const GURL& page_url,
+    const std::vector<int>& icon_types,
+    int minimum_size_in_pixels,
+    favicon_base::FaviconBitmapResult* favicon_bitmap_result) {
   DCHECK(favicon_bitmap_result);
 
   if (!db_ || !thumbnail_db_)
@@ -1670,7 +1682,7 @@
 
   // Find the largest bitmap for each IconType placing in
   // |largest_favicon_bitmaps|.
-  std::map<chrome::IconType, FaviconBitmap> largest_favicon_bitmaps;
+  std::map<favicon_base::IconType, FaviconBitmap> largest_favicon_bitmaps;
   for (std::vector<IconMapping>::const_iterator i = icon_mappings.begin();
        i != icon_mappings.end(); ++i) {
     if (!(i->icon_type & required_icon_types))
@@ -1697,9 +1709,10 @@
   FaviconBitmap largest_icon;
   for (std::vector<int>::const_iterator t = icon_types.begin();
        t != icon_types.end(); ++t) {
-    for (std::map<chrome::IconType, FaviconBitmap>::const_iterator f =
-            largest_favicon_bitmaps.begin(); f != largest_favicon_bitmaps.end();
-        ++f) {
+    for (std::map<favicon_base::IconType, FaviconBitmap>::const_iterator f =
+             largest_favicon_bitmaps.begin();
+         f != largest_favicon_bitmaps.end();
+         ++f) {
       if (f->first & *t &&
           (largest_icon.bitmap_id == 0 ||
            (largest_icon.pixel_size.height() < f->second.pixel_size.height() &&
@@ -1713,14 +1726,14 @@
   }
 
   GURL icon_url;
-  chrome::IconType icon_type;
+  favicon_base::IconType icon_type;
   if (!thumbnail_db_->GetFaviconHeader(largest_icon.icon_id, &icon_url,
                                        &icon_type)) {
     return;
   }
 
   base::Time last_updated;
-  chrome::FaviconBitmapResult bitmap_result;
+  favicon_base::FaviconBitmapResult bitmap_result;
   bitmap_result.icon_url = icon_url;
   bitmap_result.icon_type = icon_type;
   if (!thumbnail_db_->GetFaviconBitmap(largest_icon.bitmap_id,
@@ -1744,18 +1757,18 @@
     int icon_types,
     int desired_size_in_dip,
     const std::vector<ui::ScaleFactor>& desired_scale_factors,
-    std::vector<chrome::FaviconBitmapResult>* bitmap_results) {
+    std::vector<favicon_base::FaviconBitmapResult>* bitmap_results) {
   DCHECK(bitmap_results);
   GetFaviconsFromDB(page_url, icon_types, desired_size_in_dip,
                     desired_scale_factors, bitmap_results);
 }
 
 void HistoryBackend::GetFaviconForID(
-    chrome::FaviconID favicon_id,
+    favicon_base::FaviconID favicon_id,
     int desired_size_in_dip,
     ui::ScaleFactor desired_scale_factor,
-    std::vector<chrome::FaviconBitmapResult>* bitmap_results) {
-  std::vector<chrome::FaviconID> favicon_ids;
+    std::vector<favicon_base::FaviconBitmapResult>* bitmap_results) {
+  std::vector<favicon_base::FaviconID> favicon_ids;
   favicon_ids.push_back(favicon_id);
   std::vector<ui::ScaleFactor> desired_scale_factors;
   desired_scale_factors.push_back(desired_scale_factor);
@@ -1773,7 +1786,7 @@
     int icon_types,
     int desired_size_in_dip,
     const std::vector<ui::ScaleFactor>& desired_scale_factors,
-    std::vector<chrome::FaviconBitmapResult>* bitmap_results) {
+    std::vector<favicon_base::FaviconBitmapResult>* bitmap_results) {
   UpdateFaviconMappingsAndFetchImpl(&page_url, icon_urls, icon_types,
                                     desired_size_in_dip, desired_scale_factors,
                                     bitmap_results);
@@ -1782,13 +1795,13 @@
 void HistoryBackend::MergeFavicon(
     const GURL& page_url,
     const GURL& icon_url,
-    chrome::IconType icon_type,
+    favicon_base::IconType icon_type,
     scoped_refptr<base::RefCountedMemory> bitmap_data,
     const gfx::Size& pixel_size) {
   if (!thumbnail_db_ || !db_)
     return;
 
-  chrome::FaviconID favicon_id =
+  favicon_base::FaviconID favicon_id =
       thumbnail_db_->GetFaviconIDForFaviconURL(icon_url, icon_type, NULL);
 
   if (!favicon_id) {
@@ -1909,7 +1922,7 @@
   // |page_url|.
   bool mapping_changed = false;
   if (icon_mappings.size() != 1 || icon_mappings[0].icon_url != icon_url) {
-    std::vector<chrome::FaviconID> favicon_ids;
+    std::vector<favicon_base::FaviconID> favicon_ids;
     favicon_ids.push_back(favicon_id);
     SetFaviconMappingsForPageAndRedirects(page_url, icon_type, favicon_ids);
     mapping_changed = true;
@@ -1922,15 +1935,15 @@
 
 void HistoryBackend::SetFavicons(
     const GURL& page_url,
-    chrome::IconType icon_type,
-    const std::vector<chrome::FaviconBitmapData>& favicon_bitmap_data) {
+    favicon_base::IconType icon_type,
+    const std::vector<favicon_base::FaviconBitmapData>& favicon_bitmap_data) {
   if (!thumbnail_db_ || !db_)
     return;
 
   DCHECK(ValidateSetFaviconsParams(favicon_bitmap_data));
 
   // Build map of FaviconBitmapData for each icon url.
-  typedef std::map<GURL, std::vector<chrome::FaviconBitmapData> >
+  typedef std::map<GURL, std::vector<favicon_base::FaviconBitmapData> >
       BitmapDataByIconURL;
   BitmapDataByIconURL grouped_by_icon_url;
   for (size_t i = 0; i < favicon_bitmap_data.size(); ++i) {
@@ -1942,11 +1955,11 @@
   // or icon mappings.
   bool data_modified = false;
 
-  std::vector<chrome::FaviconID> icon_ids;
+  std::vector<favicon_base::FaviconID> icon_ids;
   for (BitmapDataByIconURL::const_iterator it = grouped_by_icon_url.begin();
        it != grouped_by_icon_url.end(); ++it) {
     const GURL& icon_url = it->first;
-    chrome::FaviconID icon_id =
+    favicon_base::FaviconID icon_id =
         thumbnail_db_->GetFaviconIDForFaviconURL(icon_url, icon_type, NULL);
 
     if (!icon_id) {
@@ -2013,14 +2026,15 @@
   std::set<GURL> favicons_changed;
 
   for (size_t i = 0; i < favicon_usage.size(); i++) {
-    chrome::FaviconID favicon_id = thumbnail_db_->GetFaviconIDForFaviconURL(
-        favicon_usage[i].favicon_url, chrome::FAVICON, NULL);
+    favicon_base::FaviconID favicon_id =
+        thumbnail_db_->GetFaviconIDForFaviconURL(
+            favicon_usage[i].favicon_url, favicon_base::FAVICON, NULL);
     if (!favicon_id) {
       // This favicon doesn't exist yet, so we create it using the given data.
       // TODO(pkotwicz): Pass in real pixel size.
       favicon_id = thumbnail_db_->AddFavicon(
           favicon_usage[i].favicon_url,
-          chrome::FAVICON,
+          favicon_base::FAVICON,
           new base::RefCountedBytes(favicon_usage[i].png_data),
           now,
           gfx::Size());
@@ -2049,7 +2063,7 @@
         }
       } else {
         if (!thumbnail_db_->GetIconMappingsForPageURL(
-                *url, chrome::FAVICON, NULL)) {
+                *url, favicon_base::FAVICON, NULL)) {
           // URL is present in history, update the favicon *only* if it is not
           // set already.
           thumbnail_db_->AddIconMapping(*url, favicon_id);
@@ -2075,30 +2089,30 @@
     int icon_types,
     int desired_size_in_dip,
     const std::vector<ui::ScaleFactor>& desired_scale_factors,
-    std::vector<chrome::FaviconBitmapResult>* bitmap_results) {
+    std::vector<favicon_base::FaviconBitmapResult>* bitmap_results) {
   // If |page_url| is specified, |icon_types| must be either a single icon
   // type or icon types which are equivalent.
-  DCHECK(!page_url ||
-         icon_types == chrome::FAVICON ||
-         icon_types == chrome::TOUCH_ICON ||
-         icon_types == chrome::TOUCH_PRECOMPOSED_ICON ||
-         icon_types == (chrome::TOUCH_ICON | chrome::TOUCH_PRECOMPOSED_ICON));
+  DCHECK(!page_url || icon_types == favicon_base::FAVICON ||
+         icon_types == favicon_base::TOUCH_ICON ||
+         icon_types == favicon_base::TOUCH_PRECOMPOSED_ICON ||
+         icon_types ==
+             (favicon_base::TOUCH_ICON | favicon_base::TOUCH_PRECOMPOSED_ICON));
   bitmap_results->clear();
 
   if (!thumbnail_db_) {
     return;
   }
 
-  std::vector<chrome::FaviconID> favicon_ids;
+  std::vector<favicon_base::FaviconID> favicon_ids;
 
   // The icon type for which the mappings will the updated and data will be
   // returned.
-  chrome::IconType selected_icon_type = chrome::INVALID_ICON;
+  favicon_base::IconType selected_icon_type = favicon_base::INVALID_ICON;
 
   for (size_t i = 0; i < icon_urls.size(); ++i) {
     const GURL& icon_url = icon_urls[i];
-    chrome::IconType icon_type_out;
-    const chrome::FaviconID favicon_id =
+    favicon_base::IconType icon_type_out;
+    const favicon_base::FaviconID favicon_id =
         thumbnail_db_->GetFaviconIDForFaviconURL(
             icon_url, icon_types, &icon_type_out);
 
@@ -2130,8 +2144,8 @@
 }
 
 void HistoryBackend::SetFaviconBitmaps(
-    chrome::FaviconID icon_id,
-    const std::vector<chrome::FaviconBitmapData>& favicon_bitmap_data,
+    favicon_base::FaviconID icon_id,
+    const std::vector<favicon_base::FaviconBitmapData>& favicon_bitmap_data,
     bool* favicon_bitmaps_changed) {
   if (favicon_bitmaps_changed)
     *favicon_bitmaps_changed = false;
@@ -2139,13 +2153,16 @@
   std::vector<FaviconBitmapIDSize> bitmap_id_sizes;
   thumbnail_db_->GetFaviconBitmapIDSizes(icon_id, &bitmap_id_sizes);
 
-  std::vector<chrome::FaviconBitmapData> to_add = favicon_bitmap_data;
+  std::vector<favicon_base::FaviconBitmapData> to_add = favicon_bitmap_data;
 
   for (size_t i = 0; i < bitmap_id_sizes.size(); ++i) {
     const gfx::Size& pixel_size = bitmap_id_sizes[i].pixel_size;
-    std::vector<chrome::FaviconBitmapData>::iterator match_it = to_add.end();
-    for (std::vector<chrome::FaviconBitmapData>::iterator it = to_add.begin();
-         it != to_add.end(); ++it) {
+    std::vector<favicon_base::FaviconBitmapData>::iterator match_it =
+        to_add.end();
+    for (std::vector<favicon_base::FaviconBitmapData>::iterator it =
+             to_add.begin();
+         it != to_add.end();
+         ++it) {
       if (it->pixel_size == pixel_size) {
         match_it = it;
         break;
@@ -2184,8 +2201,8 @@
   }
 }
 
-bool HistoryBackend::ValidateSetFaviconsParams(
-    const std::vector<chrome::FaviconBitmapData>& favicon_bitmap_data) const {
+bool HistoryBackend::ValidateSetFaviconsParams(const std::vector<
+    favicon_base::FaviconBitmapData>& favicon_bitmap_data) const {
   typedef std::map<GURL, size_t> BitmapsPerIconURL;
   BitmapsPerIconURL num_bitmaps_per_icon_url;
   for (size_t i = 0; i < favicon_bitmap_data.size(); ++i) {
@@ -2229,7 +2246,7 @@
     int icon_types,
     int desired_size_in_dip,
     const std::vector<ui::ScaleFactor>& desired_scale_factors,
-    std::vector<chrome::FaviconBitmapResult>* favicon_bitmap_results) {
+    std::vector<favicon_base::FaviconBitmapResult>* favicon_bitmap_results) {
   DCHECK(favicon_bitmap_results);
   favicon_bitmap_results->clear();
 
@@ -2243,7 +2260,7 @@
   std::vector<IconMapping> icon_mappings;
   thumbnail_db_->GetIconMappingsForPageURL(page_url, icon_types,
                                            &icon_mappings);
-  std::vector<chrome::FaviconID> favicon_ids;
+  std::vector<favicon_base::FaviconID> favicon_ids;
   for (size_t i = 0; i < icon_mappings.size(); ++i)
     favicon_ids.push_back(icon_mappings[i].icon_id);
 
@@ -2256,10 +2273,10 @@
 }
 
 bool HistoryBackend::GetFaviconBitmapResultsForBestMatch(
-    const std::vector<chrome::FaviconID>& candidate_favicon_ids,
+    const std::vector<favicon_base::FaviconID>& candidate_favicon_ids,
     int desired_size_in_dip,
     const std::vector<ui::ScaleFactor>& desired_scale_factors,
-    std::vector<chrome::FaviconBitmapResult>* favicon_bitmap_results) {
+    std::vector<favicon_base::FaviconBitmapResult>* favicon_bitmap_results) {
   favicon_bitmap_results->clear();
 
   if (candidate_favicon_ids.empty())
@@ -2269,7 +2286,7 @@
   // |desired_size_in_dip| and |desired_scale_factors|.
   // TODO(pkotwicz): Select bitmap results from multiple favicons once
   // content::FaviconStatus supports multiple icon URLs.
-  chrome::FaviconID best_favicon_id = 0;
+  favicon_base::FaviconID best_favicon_id = 0;
   std::vector<FaviconBitmapID> best_bitmap_ids;
   float highest_score = kSelectFaviconFramesInvalidScore;
   for (size_t i = 0; i < candidate_favicon_ids.size(); ++i) {
@@ -2304,7 +2321,7 @@
   // Construct FaviconBitmapResults from |best_favicon_id| and
   // |best_bitmap_ids|.
   GURL icon_url;
-  chrome::IconType icon_type;
+  favicon_base::IconType icon_type;
   if (!thumbnail_db_->GetFaviconHeader(best_favicon_id, &icon_url,
                                        &icon_type)) {
     return false;
@@ -2312,7 +2329,7 @@
 
   for (size_t i = 0; i < best_bitmap_ids.size(); ++i) {
     base::Time last_updated;
-    chrome::FaviconBitmapResult bitmap_result;
+    favicon_base::FaviconBitmapResult bitmap_result;
     bitmap_result.icon_url = icon_url;
     bitmap_result.icon_type = icon_type;
     if (!thumbnail_db_->GetFaviconBitmap(best_bitmap_ids[i],
@@ -2332,8 +2349,8 @@
 
 bool HistoryBackend::SetFaviconMappingsForPageAndRedirects(
     const GURL& page_url,
-    chrome::IconType icon_type,
-    const std::vector<chrome::FaviconID>& icon_ids) {
+    favicon_base::IconType icon_type,
+    const std::vector<favicon_base::FaviconID>& icon_ids) {
   if (!thumbnail_db_)
     return false;
 
@@ -2354,8 +2371,8 @@
 
 bool HistoryBackend::SetFaviconMappingsForPage(
     const GURL& page_url,
-    chrome::IconType icon_type,
-    const std::vector<chrome::FaviconID>& icon_ids) {
+    favicon_base::IconType icon_type,
+    const std::vector<favicon_base::FaviconID>& icon_ids) {
   DCHECK_LE(icon_ids.size(), kMaxFaviconsPerPage);
   bool mappings_changed = false;
 
@@ -2369,14 +2386,14 @@
   // Remove any favicons which are orphaned as a result of the removal of the
   // icon mappings.
 
-  std::vector<chrome::FaviconID> unmapped_icon_ids = icon_ids;
+  std::vector<favicon_base::FaviconID> unmapped_icon_ids = icon_ids;
 
   std::vector<IconMapping> icon_mappings;
   thumbnail_db_->GetIconMappingsForPageURL(page_url, &icon_mappings);
 
   for (std::vector<IconMapping>::iterator m = icon_mappings.begin();
        m != icon_mappings.end(); ++m) {
-    std::vector<chrome::FaviconID>::iterator icon_id_it = std::find(
+    std::vector<favicon_base::FaviconID>::iterator icon_id_it = std::find(
         unmapped_icon_ids.begin(), unmapped_icon_ids.end(), m->icon_id);
 
     // If the icon mapping already exists, avoid removing it and adding it back.
@@ -2385,10 +2402,11 @@
       continue;
     }
 
-    if ((icon_type == chrome::TOUCH_ICON &&
-         m->icon_type == chrome::TOUCH_PRECOMPOSED_ICON) ||
-        (icon_type == chrome::TOUCH_PRECOMPOSED_ICON &&
-         m->icon_type == chrome::TOUCH_ICON) || (icon_type == m->icon_type)) {
+    if ((icon_type == favicon_base::TOUCH_ICON &&
+         m->icon_type == favicon_base::TOUCH_PRECOMPOSED_ICON) ||
+        (icon_type == favicon_base::TOUCH_PRECOMPOSED_ICON &&
+         m->icon_type == favicon_base::TOUCH_ICON) ||
+        (icon_type == m->icon_type)) {
       thumbnail_db_->DeleteIconMapping(m->mapping_id);
 
       // Removing the icon mapping may have orphaned the associated favicon so
@@ -2728,6 +2746,11 @@
     delegate_->BroadcastNotifications(type, details.Pass());
 }
 
+void HistoryBackend::NotifySyncURLsModified(URLRows* rows) {
+  if (typed_url_syncable_service_.get())
+    typed_url_syncable_service_->OnUrlsModified(rows);
+}
+
 void HistoryBackend::NotifySyncURLsDeleted(bool all_history,
                                            bool archived,
                                            URLRows* rows) {
diff --git a/chrome/browser/history/history_backend.h b/chrome/browser/history/history_backend.h
index 0222f09..1d2e03c 100644
--- a/chrome/browser/history/history_backend.h
+++ b/chrome/browser/history/history_backend.h
@@ -220,30 +220,31 @@
 
   // Favicon -------------------------------------------------------------------
 
-  void GetFavicons(const std::vector<GURL>& icon_urls,
-                    int icon_types,
-                    int desired_size_in_dip,
-                    const std::vector<ui::ScaleFactor>& desired_scale_factors,
-                    std::vector<chrome::FaviconBitmapResult>* bitmap_results);
+  void GetFavicons(
+      const std::vector<GURL>& icon_urls,
+      int icon_types,
+      int desired_size_in_dip,
+      const std::vector<ui::ScaleFactor>& desired_scale_factors,
+      std::vector<favicon_base::FaviconBitmapResult>* bitmap_results);
 
   void GetLargestFaviconForURL(
       const GURL& page_url,
       const std::vector<int>& icon_types,
       int minimum_size_in_pixels,
-      chrome::FaviconBitmapResult* bitmap_result);
+      favicon_base::FaviconBitmapResult* bitmap_result);
 
   void GetFaviconsForURL(
       const GURL& page_url,
       int icon_types,
       int desired_size_in_dip,
       const std::vector<ui::ScaleFactor>& desired_scale_factors,
-      std::vector<chrome::FaviconBitmapResult>* bitmap_results);
+      std::vector<favicon_base::FaviconBitmapResult>* bitmap_results);
 
   void GetFaviconForID(
-      chrome::FaviconID favicon_id,
+      favicon_base::FaviconID favicon_id,
       int desired_size_in_dip,
       ui::ScaleFactor desired_scale_factor,
-      std::vector<chrome::FaviconBitmapResult>* bitmap_results);
+      std::vector<favicon_base::FaviconBitmapResult>* bitmap_results);
 
   void UpdateFaviconMappingsAndFetch(
       const GURL& page_url,
@@ -251,18 +252,18 @@
       int icon_types,
       int desired_size_in_dip,
       const std::vector<ui::ScaleFactor>& desired_scale_factors,
-      std::vector<chrome::FaviconBitmapResult>* bitmap_results);
+      std::vector<favicon_base::FaviconBitmapResult>* bitmap_results);
 
   void MergeFavicon(const GURL& page_url,
                     const GURL& icon_url,
-                    chrome::IconType icon_type,
+                    favicon_base::IconType icon_type,
                     scoped_refptr<base::RefCountedMemory> bitmap_data,
                     const gfx::Size& pixel_size);
 
   void SetFavicons(
       const GURL& page_url,
-      chrome::IconType icon_type,
-      const std::vector<chrome::FaviconBitmapData>& favicon_bitmap_data);
+      favicon_base::IconType icon_type,
+      const std::vector<favicon_base::FaviconBitmapData>& favicon_bitmap_data);
 
   void SetFaviconsOutOfDateForPage(const GURL& page_url);
 
@@ -480,12 +481,15 @@
   friend class HistoryBackendDBTest;  // So the unit tests can poke our innards.
   FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, DeleteAll);
   FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, DeleteAllThenAddData);
+  FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, AddPagesWithDetails);
   FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, ImportedFaviconsTest);
   FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, URLsNoLongerBookmarked);
   FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, StripUsernamePasswordTest);
   FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, DeleteThumbnailsDatabaseTest);
   FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, AddPageVisitSource);
   FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, AddPageVisitNotLastVisit);
+  FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest,
+                           AddPageVisitFiresNotificationWithCorrectDetails);
   FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, AddPageArgsSource);
   FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, AddVisitsSource);
   FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, GetMostRecentVisits);
@@ -660,7 +664,7 @@
       int icon_types,
       int desired_size_in_dip,
       const std::vector<ui::ScaleFactor>& desired_scale_factors,
-      std::vector<chrome::FaviconBitmapResult>* results);
+      std::vector<favicon_base::FaviconBitmapResult>* results);
 
   // Set the favicon bitmaps for |icon_id|.
   // For each entry in |favicon_bitmap_data|, if a favicon bitmap already
@@ -673,8 +677,8 @@
   // Computing |favicon_bitmaps_changed| requires additional database queries
   // so should be avoided if unnecessary.
   void SetFaviconBitmaps(
-      chrome::FaviconID icon_id,
-      const std::vector<chrome::FaviconBitmapData>& favicon_bitmap_data,
+      favicon_base::FaviconID icon_id,
+      const std::vector<favicon_base::FaviconBitmapData>& favicon_bitmap_data,
       bool* favicon_bitmaps_changed);
 
   // Returns true if |favicon_bitmap_data| passed to SetFavicons() is valid.
@@ -683,8 +687,8 @@
   //      kMaxFaviconsPerPage unique icon URLs.
   //      kMaxFaviconBitmapsPerIconURL favicon bitmaps for each icon URL.
   // 2) FaviconBitmapData::bitmap_data contains non NULL bitmap data.
-  bool ValidateSetFaviconsParams(
-      const std::vector<chrome::FaviconBitmapData>& favicon_bitmap_data) const;
+  bool ValidateSetFaviconsParams(const std::vector<
+      favicon_base::FaviconBitmapData>& favicon_bitmap_data) const;
 
   // Returns true if the bitmap data at |bitmap_id| equals |new_bitmap_data|.
   bool IsFaviconBitmapDataEqual(
@@ -707,7 +711,7 @@
       int icon_types,
       const int desired_size_in_dip,
       const std::vector<ui::ScaleFactor>& desired_scale_factors,
-      std::vector<chrome::FaviconBitmapResult>* favicon_bitmap_results);
+      std::vector<favicon_base::FaviconBitmapResult>* favicon_bitmap_results);
 
   // Returns the favicon bitmaps which most closely match |desired_size_in_dip|
   // and |desired_scale_factors| in |favicon_bitmap_results|. If
@@ -719,10 +723,10 @@
   // favicon bitmap is the best result for multiple scale factors.
   // Returns true if there were no errors.
   bool GetFaviconBitmapResultsForBestMatch(
-      const std::vector<chrome::FaviconID>& candidate_favicon_ids,
+      const std::vector<favicon_base::FaviconID>& candidate_favicon_ids,
       int desired_size_in_dip,
       const std::vector<ui::ScaleFactor>& desired_scale_factors,
-      std::vector<chrome::FaviconBitmapResult>* favicon_bitmap_results);
+      std::vector<favicon_base::FaviconBitmapResult>* favicon_bitmap_results);
 
   // Maps the favicon ids in |icon_ids| to |page_url| (and all redirects)
   // for |icon_type|.
@@ -730,15 +734,15 @@
   // changed.
   bool SetFaviconMappingsForPageAndRedirects(
       const GURL& page_url,
-      chrome::IconType icon_type,
-      const std::vector<chrome::FaviconID>& icon_ids);
+      favicon_base::IconType icon_type,
+      const std::vector<favicon_base::FaviconID>& icon_ids);
 
   // Maps the favicon ids in |icon_ids| to |page_url| for |icon_type|.
   // Returns true if the function changed some of |page_url|'s mappings.
   bool SetFaviconMappingsForPage(
       const GURL& page_url,
-      chrome::IconType icon_type,
-      const std::vector<chrome::FaviconID>& icon_ids);
+      favicon_base::IconType icon_type,
+      const std::vector<favicon_base::FaviconID>& icon_ids);
 
   // Returns all the page URLs in the redirect chain for |page_url|. If there
   // are no known redirects for |page_url|, returns a vector with |page_url|.
@@ -759,11 +763,10 @@
   // Release all tasks in history_db_tasks_ and clears it.
   void ReleaseDBTasks();
 
-  // Schedules a broadcast of the given notification on the main thread.
   virtual void BroadcastNotifications(
       int type,
       scoped_ptr<HistoryDetails> details) OVERRIDE;
-
+  virtual void NotifySyncURLsModified(URLRows* rows) OVERRIDE;
   virtual void NotifySyncURLsDeleted(bool all_history,
                                      bool archived,
                                      URLRows* rows) OVERRIDE;
diff --git a/chrome/browser/history/history_backend_unittest.cc b/chrome/browser/history/history_backend_unittest.cc
index c010b3e..4b7ef08 100644
--- a/chrome/browser/history/history_backend_unittest.cc
+++ b/chrome/browser/history/history_backend_unittest.cc
@@ -24,6 +24,7 @@
 #include "chrome/browser/bookmarks/bookmark_model_factory.h"
 #include "chrome/browser/bookmarks/bookmark_test_helpers.h"
 #include "chrome/browser/bookmarks/bookmark_utils.h"
+#include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/history/history_notifications.h"
 #include "chrome/browser/history/history_service.h"
 #include "chrome/browser/history/history_service_factory.h"
@@ -69,13 +70,14 @@
 
 namespace history {
 
-class HistoryBackendTest;
+class HistoryBackendTestBase;
 
 // This must be a separate object since HistoryBackend manages its lifetime.
 // This just forwards the messages we're interested in to the test object.
 class HistoryBackendTestDelegate : public HistoryBackend::Delegate {
  public:
-  explicit HistoryBackendTestDelegate(HistoryBackendTest* test) : test_(test) {}
+  explicit HistoryBackendTestDelegate(HistoryBackendTestBase* test)
+      : test_(test) {}
 
   virtual void NotifyProfileError(sql::InitStatus init_status) OVERRIDE {}
   virtual void SetInMemoryBackend(
@@ -89,7 +91,7 @@
 
  private:
   // Not owned by us.
-  HistoryBackendTest* test_;
+  HistoryBackendTestBase* test_;
 
   DISALLOW_COPY_AND_ASSIGN(HistoryBackendTestDelegate);
 };
@@ -108,18 +110,110 @@
   }
 };
 
-class HistoryBackendTest : public testing::Test {
+class HistoryBackendTestBase : public testing::Test {
  public:
-  HistoryBackendTest()
-      : bookmark_model_(NULL),
+  typedef std::vector<std::pair<int, HistoryDetails*> > NotificationList;
+
+  HistoryBackendTestBase()
+      : bookmark_model_(NULL, false),
         loaded_(false),
-        num_broadcasted_notifications_(0),
         ui_thread_(content::BrowserThread::UI, &message_loop_) {
   }
 
-  virtual ~HistoryBackendTest() {
+  virtual ~HistoryBackendTestBase() {
+    STLDeleteValues(&broadcasted_notifications_);
   }
 
+ protected:
+  int num_broadcasted_notifications() const {
+    return broadcasted_notifications_.size();
+  }
+
+  const NotificationList& broadcasted_notifications() const {
+    return broadcasted_notifications_;
+  }
+
+  void ClearBroadcastedNotifications() {
+    STLDeleteValues(&broadcasted_notifications_);
+  }
+
+  base::FilePath test_dir() {
+    return test_dir_;
+  }
+
+  void BroadcastNotifications(int type, scoped_ptr<HistoryDetails> details) {
+    // Send the notifications directly to the in-memory database.
+    content::Details<HistoryDetails> det(details.get());
+    mem_backend_->Observe(
+        type, content::Source<HistoryBackendTestBase>(NULL), det);
+
+    // The backend passes ownership of the details pointer to us.
+    broadcasted_notifications_.push_back(
+        std::make_pair(type, details.release()));
+  }
+
+  scoped_refptr<HistoryBackend> backend_;  // Will be NULL on init failure.
+  scoped_ptr<InMemoryHistoryBackend> mem_backend_;
+  BookmarkModel bookmark_model_;
+  bool loaded_;
+
+ private:
+  friend class HistoryBackendTestDelegate;
+
+  // testing::Test
+  virtual void SetUp() {
+    if (!base::CreateNewTempDirectory(FILE_PATH_LITERAL("BackendTest"),
+                                      &test_dir_))
+      return;
+    backend_ = new HistoryBackend(test_dir_,
+                                  new HistoryBackendTestDelegate(this),
+                                  &bookmark_model_);
+    backend_->Init(std::string(), false);
+  }
+
+  virtual void TearDown() {
+    if (backend_.get())
+      backend_->Closing();
+    backend_ = NULL;
+    mem_backend_.reset();
+    base::DeleteFile(test_dir_, true);
+    base::RunLoop().RunUntilIdle();
+  }
+
+  void SetInMemoryBackend(scoped_ptr<InMemoryHistoryBackend> backend) {
+    mem_backend_.swap(backend);
+  }
+
+  // The types and details of notifications which were broadcasted.
+  NotificationList broadcasted_notifications_;
+
+  base::MessageLoop message_loop_;
+  base::FilePath test_dir_;
+  content::TestBrowserThread ui_thread_;
+
+  DISALLOW_COPY_AND_ASSIGN(HistoryBackendTestBase);
+};
+
+void HistoryBackendTestDelegate::SetInMemoryBackend(
+    scoped_ptr<InMemoryHistoryBackend> backend) {
+  test_->SetInMemoryBackend(backend.Pass());
+}
+
+void HistoryBackendTestDelegate::BroadcastNotifications(
+    int type,
+    scoped_ptr<HistoryDetails> details) {
+  test_->BroadcastNotifications(type, details.Pass());
+}
+
+void HistoryBackendTestDelegate::DBLoaded() {
+  test_->loaded_ = true;
+}
+
+class HistoryBackendTest : public HistoryBackendTestBase {
+ public:
+  HistoryBackendTest() {}
+  virtual ~HistoryBackendTest() {}
+
   // Callback for QueryMostVisited.
   void OnQueryMostVisited(CancelableRequestProvider::Handle handle,
                           history::MostVisitedURLList data) {
@@ -132,6 +226,7 @@
     filtered_list_ = data;
   }
 
+ protected:
   const history::MostVisitedURLList& get_most_visited_list() const {
     return most_visited_list_;
   }
@@ -140,14 +235,6 @@
     return filtered_list_;
   }
 
-  int num_broadcasted_notifications() const {
-    return num_broadcasted_notifications_;
-  }
-
- protected:
-  scoped_refptr<HistoryBackend> backend_;  // Will be NULL on init failure.
-  scoped_ptr<InMemoryHistoryBackend> mem_backend_;
-
   void AddRedirectChain(const char* sequence[], int page_id) {
     AddRedirectChainWithTransitionAndTime(sequence, page_id,
                                           content::PAGE_TRANSITION_LINK,
@@ -195,11 +282,11 @@
         history::SOURCE_BROWSED, did_replace);
     backend_->AddPage(request);
 
-    *transition1 = getTransition(url1);
-    *transition2 = getTransition(url2);
+    *transition1 = GetTransition(url1);
+    *transition2 = GetTransition(url2);
   }
 
-  int getTransition(const GURL& url) {
+  int GetTransition(const GURL& url) {
     if (!url.is_valid())
       return 0;
     URLRow row;
@@ -209,10 +296,6 @@
     return visits[0].transition;
   }
 
-  base::FilePath getTestDir() {
-    return test_dir_;
-  }
-
   // Returns a gfx::Size vector with small size.
   const std::vector<gfx::Size> GetSizesSmall() {
     std::vector<gfx::Size> sizes_small;
@@ -254,7 +337,7 @@
 
   // Returns the number of icon mappings of |icon_type| to |page_url|.
   size_t NumIconMappingsForPageURL(const GURL& page_url,
-                                   chrome::IconType icon_type) {
+                                   favicon_base::IconType icon_type) {
     std::vector<IconMapping> icon_mappings;
     backend_->thumbnail_db_->GetIconMappingsForPageURL(page_url, icon_type,
                                                        &icon_mappings);
@@ -278,7 +361,7 @@
 
   // Returns the favicon bitmaps for |icon_id| sorted by pixel size in
   // ascending order. Returns true if there is at least one favicon bitmap.
-  bool GetSortedFaviconBitmaps(chrome::FaviconID icon_id,
+  bool GetSortedFaviconBitmaps(favicon_base::FaviconID icon_id,
                                std::vector<FaviconBitmap>* favicon_bitmaps) {
     if (!backend_->thumbnail_db_->GetFaviconBitmaps(icon_id, favicon_bitmaps))
       return false;
@@ -289,7 +372,7 @@
 
   // Returns true if there is exactly one favicon bitmap associated to
   // |favicon_id|. If true, returns favicon bitmap in output parameter.
-  bool GetOnlyFaviconBitmap(const chrome::FaviconID icon_id,
+  bool GetOnlyFaviconBitmap(const favicon_base::FaviconID icon_id,
                             FaviconBitmap* favicon_bitmap) {
     std::vector<FaviconBitmap> favicon_bitmaps;
     if (!backend_->thumbnail_db_->GetFaviconBitmaps(icon_id, &favicon_bitmaps))
@@ -306,7 +389,7 @@
   void GenerateFaviconBitmapData(
       const GURL& icon_url1,
       const std::vector<gfx::Size>& icon_url1_sizes,
-      std::vector<chrome::FaviconBitmapData>* favicon_bitmap_data) {
+      std::vector<favicon_base::FaviconBitmapData>* favicon_bitmap_data) {
     GenerateFaviconBitmapData(icon_url1, icon_url1_sizes, GURL(),
                               std::vector<gfx::Size>(), favicon_bitmap_data);
   }
@@ -316,14 +399,14 @@
       const std::vector<gfx::Size>& icon_url1_sizes,
       const GURL& icon_url2,
       const std::vector<gfx::Size>& icon_url2_sizes,
-      std::vector<chrome::FaviconBitmapData>* favicon_bitmap_data) {
+      std::vector<favicon_base::FaviconBitmapData>* favicon_bitmap_data) {
     favicon_bitmap_data->clear();
 
     char bitmap_char = 'a';
     for (size_t i = 0; i < icon_url1_sizes.size(); ++i) {
       std::vector<unsigned char> data;
       data.push_back(bitmap_char);
-      chrome::FaviconBitmapData bitmap_data_element;
+      favicon_base::FaviconBitmapData bitmap_data_element;
       bitmap_data_element.bitmap_data =
           base::RefCountedBytes::TakeVector(&data);
       bitmap_data_element.pixel_size = icon_url1_sizes[i];
@@ -336,7 +419,7 @@
     for (size_t i = 0; i < icon_url2_sizes.size(); ++i) {
       std::vector<unsigned char> data;
       data.push_back(bitmap_char);
-      chrome::FaviconBitmapData bitmap_data_element;
+      favicon_base::FaviconBitmapData bitmap_data_element;
       bitmap_data_element.bitmap_data =
           base::RefCountedBytes::TakeVector(&data);
       bitmap_data_element.pixel_size = icon_url2_sizes[i];
@@ -355,70 +438,102 @@
            *bitmap_data->front() == expected_data;
   }
 
-  BookmarkModel bookmark_model_;
-
- protected:
-  bool loaded_;
-
  private:
-  friend class HistoryBackendTestDelegate;
-
-  // testing::Test
-  virtual void SetUp() {
-    if (!base::CreateNewTempDirectory(FILE_PATH_LITERAL("BackendTest"),
-                                      &test_dir_))
-      return;
-    backend_ = new HistoryBackend(test_dir_,
-                                  new HistoryBackendTestDelegate(this),
-                                  &bookmark_model_);
-    backend_->Init(std::string(), false);
-  }
-
-  virtual void TearDown() {
-    if (backend_.get())
-      backend_->Closing();
-    backend_ = NULL;
-    mem_backend_.reset();
-    base::DeleteFile(test_dir_, true);
-    base::RunLoop().RunUntilIdle();
-  }
-
-  void SetInMemoryBackend(scoped_ptr<InMemoryHistoryBackend> backend) {
-    mem_backend_.swap(backend);
-  }
-
-  void BroadcastNotifications(int type, scoped_ptr<HistoryDetails> details) {
-    ++num_broadcasted_notifications_;
-
-    // Send the notifications directly to the in-memory database.
-    content::Details<HistoryDetails> det(details.get());
-    mem_backend_->Observe(type, content::Source<HistoryBackendTest>(NULL), det);
-  }
-
-  // The number of notifications which were broadcasted.
-  int num_broadcasted_notifications_;
-
-  base::MessageLoop message_loop_;
-  base::FilePath test_dir_;
   history::MostVisitedURLList most_visited_list_;
   history::FilteredURLList filtered_list_;
-  content::TestBrowserThread ui_thread_;
+
+  DISALLOW_COPY_AND_ASSIGN(HistoryBackendTest);
 };
 
-void HistoryBackendTestDelegate::SetInMemoryBackend(
-    scoped_ptr<InMemoryHistoryBackend> backend) {
-  test_->SetInMemoryBackend(backend.Pass());
-}
+class InMemoryHistoryBackendTest : public HistoryBackendTestBase {
+ public:
+  InMemoryHistoryBackendTest() {}
+  virtual ~InMemoryHistoryBackendTest() {}
 
-void HistoryBackendTestDelegate::BroadcastNotifications(
-    int type,
-    scoped_ptr<HistoryDetails> details) {
-  test_->BroadcastNotifications(type, details.Pass());
-}
+ protected:
+  void SimulateNotification(int type,
+                            const URLRow* row1,
+                            const URLRow* row2 = NULL,
+                            const URLRow* row3 = NULL) {
+    URLRows rows;
+    rows.push_back(*row1);
+    if (row2) rows.push_back(*row2);
+    if (row3) rows.push_back(*row3);
 
-void HistoryBackendTestDelegate::DBLoaded() {
-  test_->loaded_ = true;
-}
+    if (type == chrome::NOTIFICATION_HISTORY_URLS_MODIFIED) {
+      scoped_ptr<URLsModifiedDetails> details(new URLsModifiedDetails());
+      details->changed_urls.swap(rows);
+      BroadcastNotifications(type, details.PassAs<HistoryDetails>());
+    } else if (type == chrome::NOTIFICATION_HISTORY_URL_VISITED) {
+      for (URLRows::const_iterator it = rows.begin(); it != rows.end(); ++it) {
+        scoped_ptr<URLVisitedDetails> details(new URLVisitedDetails());
+        details->row = *it;
+        BroadcastNotifications(type, details.PassAs<HistoryDetails>());
+      }
+    } else if (type == chrome::NOTIFICATION_HISTORY_URLS_DELETED) {
+      scoped_ptr<URLsDeletedDetails> details(new URLsDeletedDetails());
+      details->rows = rows;
+      BroadcastNotifications(type, details.PassAs<HistoryDetails>());
+    } else {
+      NOTREACHED();
+    }
+  }
+
+  size_t GetNumberOfMatchingSearchTerms(const int keyword_id,
+                                        const base::string16& prefix) {
+    std::vector<KeywordSearchTermVisit> matching_terms;
+    mem_backend_->db()->GetMostRecentKeywordSearchTerms(
+        keyword_id, prefix, 1, &matching_terms);
+    return matching_terms.size();
+  }
+
+  static URLRow CreateTestTypedURL() {
+    URLRow url_row(GURL("https://www.google.com/"));
+    url_row.set_id(10);
+    url_row.set_title(base::UTF8ToUTF16("Google Search"));
+    url_row.set_typed_count(1);
+    url_row.set_visit_count(1);
+    url_row.set_last_visit(Time::Now() - base::TimeDelta::FromHours(1));
+    return url_row;
+  }
+
+  static URLRow CreateAnotherTestTypedURL() {
+    URLRow url_row(GURL("https://maps.google.com/"));
+    url_row.set_id(20);
+    url_row.set_title(base::UTF8ToUTF16("Google Maps"));
+    url_row.set_typed_count(2);
+    url_row.set_visit_count(3);
+    url_row.set_last_visit(Time::Now() - base::TimeDelta::FromHours(2));
+    return url_row;
+  }
+
+  static URLRow CreateTestNonTypedURL() {
+    URLRow url_row(GURL("https://news.google.com/"));
+    url_row.set_id(30);
+    url_row.set_title(base::UTF8ToUTF16("Google News"));
+    url_row.set_visit_count(5);
+    url_row.set_last_visit(Time::Now() - base::TimeDelta::FromHours(3));
+    return url_row;
+  }
+
+  void PopulateTestURLsAndSearchTerms(URLRow* row1,
+                                      URLRow* row2,
+                                      const base::string16& term1,
+                                      const base::string16& term2);
+
+  void TestAddingAndChangingURLRows(int notification_type);
+
+  static const TemplateURLID kTestKeywordId;
+  static const char kTestSearchTerm1[];
+  static const char kTestSearchTerm2[];
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(InMemoryHistoryBackendTest);
+};
+
+const TemplateURLID InMemoryHistoryBackendTest::kTestKeywordId = 42;
+const char InMemoryHistoryBackendTest::kTestSearchTerm1[] = "banana";
+const char InMemoryHistoryBackendTest::kTestSearchTerm2[] = "orange";
 
 // http://crbug.com/114287
 #if defined(OS_WIN)
@@ -440,10 +555,10 @@
   // we can test that updating works properly.
   GURL favicon_url1("http://www.google.com/favicon.ico");
   GURL favicon_url2("http://news.google.com/favicon.ico");
-  chrome::FaviconID favicon2 = backend_->thumbnail_db_->AddFavicon(favicon_url2,
-      chrome::FAVICON);
-  chrome::FaviconID favicon1 = backend_->thumbnail_db_->AddFavicon(favicon_url1,
-      chrome::FAVICON);
+  favicon_base::FaviconID favicon2 =
+      backend_->thumbnail_db_->AddFavicon(favicon_url2, favicon_base::FAVICON);
+  favicon_base::FaviconID favicon1 =
+      backend_->thumbnail_db_->AddFavicon(favicon_url1, favicon_base::FAVICON);
 
   std::vector<unsigned char> data;
   data.push_back('a');
@@ -500,6 +615,7 @@
       bookmark_model_.bookmark_bar_node(), 0, base::string16(), row1.url());
 
   // Now finally clear all history.
+  ClearBroadcastedNotifications();
   backend_->DeleteAllHistory();
 
   // The first URL should be preserved but the time should be cleared.
@@ -520,8 +636,9 @@
 
   // We should have a favicon and favicon bitmaps for the first URL only. We
   // look them up by favicon URL since the IDs may have changed.
-  chrome::FaviconID out_favicon1 = backend_->thumbnail_db_->
-      GetFaviconIDForFaviconURL(favicon_url1, chrome::FAVICON, NULL);
+  favicon_base::FaviconID out_favicon1 =
+      backend_->thumbnail_db_->GetFaviconIDForFaviconURL(
+          favicon_url1, favicon_base::FAVICON, NULL);
   EXPECT_TRUE(out_favicon1);
 
   std::vector<FaviconBitmap> favicon_bitmaps;
@@ -545,20 +662,30 @@
   EXPECT_TRUE(BitmapDataEqual('b', favicon_bitmap2.bitmap_data));
   EXPECT_EQ(kLargeSize, favicon_bitmap2.pixel_size);
 
-  chrome::FaviconID out_favicon2 = backend_->thumbnail_db_->
-      GetFaviconIDForFaviconURL(favicon_url2, chrome::FAVICON, NULL);
+  favicon_base::FaviconID out_favicon2 =
+      backend_->thumbnail_db_->GetFaviconIDForFaviconURL(
+          favicon_url2, favicon_base::FAVICON, NULL);
   EXPECT_FALSE(out_favicon2) << "Favicon not deleted";
 
   // The remaining URL should still reference the same favicon, even if its
   // ID has changed.
   std::vector<IconMapping> mappings;
   EXPECT_TRUE(backend_->thumbnail_db_->GetIconMappingsForPageURL(
-      outrow1.url(), chrome::FAVICON, &mappings));
+      outrow1.url(), favicon_base::FAVICON, &mappings));
   EXPECT_EQ(1u, mappings.size());
   EXPECT_EQ(out_favicon1, mappings[0].icon_id);
 
   // The first URL should still be bookmarked.
   EXPECT_TRUE(bookmark_model_.IsBookmarked(row1.url()));
+
+  // Check that we fire the notification about all history having been deleted.
+  ASSERT_EQ(1u, broadcasted_notifications().size());
+  ASSERT_EQ(chrome::NOTIFICATION_HISTORY_URLS_DELETED,
+            broadcasted_notifications()[0].first);
+  const URLsDeletedDetails* details = static_cast<const URLsDeletedDetails*>(
+      broadcasted_notifications()[0].second);
+  EXPECT_TRUE(details->all_history);
+  EXPECT_FALSE(details->archived);
 }
 
 // Checks that adding a visit, then calling DeleteAll, and then trying to add
@@ -611,20 +738,20 @@
 
   std::vector<unsigned char> data;
   data.push_back('1');
-  chrome::FaviconID favicon1 = backend_->thumbnail_db_->AddFavicon(
-      favicon_url1,
-      chrome::FAVICON,
-      new base::RefCountedBytes(data),
-      Time::Now(),
-      gfx::Size());
+  favicon_base::FaviconID favicon1 =
+      backend_->thumbnail_db_->AddFavicon(favicon_url1,
+                                          favicon_base::FAVICON,
+                                          new base::RefCountedBytes(data),
+                                          Time::Now(),
+                                          gfx::Size());
 
   data[0] = '2';
-  chrome::FaviconID favicon2 = backend_->thumbnail_db_->AddFavicon(
-      favicon_url2,
-      chrome::FAVICON,
-      new base::RefCountedBytes(data),
-      Time::Now(),
-      gfx::Size());
+  favicon_base::FaviconID favicon2 =
+      backend_->thumbnail_db_->AddFavicon(favicon_url2,
+                                          favicon_base::FAVICON,
+                                          new base::RefCountedBytes(data),
+                                          Time::Now(),
+                                          gfx::Size());
 
   // First visit two URLs.
   URLRow row1(GURL("http://www.google.com/"));
@@ -664,9 +791,8 @@
   EXPECT_EQ(0U, visits.size());
   // The favicon should still be valid.
   EXPECT_EQ(favicon2,
-      backend_->thumbnail_db_->GetFaviconIDForFaviconURL(favicon_url2,
-                                                         chrome::FAVICON,
-                                                         NULL));
+            backend_->thumbnail_db_->GetFaviconIDForFaviconURL(
+                favicon_url2, favicon_base::FAVICON, NULL));
 
   // Unstar row2.
   bookmark_utils::RemoveAllBookmarks(&bookmark_model_, row2.url());
@@ -681,9 +807,8 @@
   EXPECT_FALSE(backend_->db_->GetRowForURL(row2.url(), &tmp_url_row));
   // And the favicon should be deleted.
   EXPECT_EQ(0,
-      backend_->thumbnail_db_->GetFaviconIDForFaviconURL(favicon_url2,
-                                                         chrome::FAVICON,
-                                                         NULL));
+            backend_->thumbnail_db_->GetFaviconIDForFaviconURL(
+                favicon_url2, favicon_base::FAVICON, NULL));
 
   // Unstar row 1.
   bookmark_utils::RemoveAllBookmarks(&bookmark_model_, row1.url());
@@ -703,9 +828,8 @@
 
   // The favicon should still be valid.
   EXPECT_EQ(favicon1,
-      backend_->thumbnail_db_->GetFaviconIDForFaviconURL(favicon_url1,
-                                                         chrome::FAVICON,
-                                                         NULL));
+            backend_->thumbnail_db_->GetFaviconIDForFaviconURL(
+                favicon_url1, favicon_base::FAVICON, NULL));
 }
 
 // Tests a handful of assertions for a navigation with a type of
@@ -787,15 +911,117 @@
   EXPECT_TRUE(transition2 & content::PAGE_TRANSITION_CHAIN_END);
 }
 
+TEST_F(HistoryBackendTest, AddPagesWithDetails) {
+  ASSERT_TRUE(backend_.get());
+
+  // Import one non-typed URL, two non-archived and one archived typed URLs.
+  URLRow row1(GURL("https://news.google.com/"));
+  row1.set_visit_count(1);
+  row1.set_last_visit(Time::Now());
+  URLRow row2(GURL("https://www.google.com/"));
+  row2.set_typed_count(1);
+  row2.set_last_visit(Time::Now());
+  URLRow row3(GURL("https://mail.google.com/"));
+  row3.set_visit_count(1);
+  row3.set_typed_count(1);
+  row3.set_last_visit(Time::Now() - base::TimeDelta::FromDays(7 - 1));
+  URLRow row4(GURL("https://maps.google.com/"));
+  row4.set_visit_count(1);
+  row4.set_typed_count(1);
+  row4.set_last_visit(Time::Now() - base::TimeDelta::FromDays(365 + 2));
+
+  URLRows rows;
+  rows.push_back(row1);
+  rows.push_back(row2);
+  rows.push_back(row3);
+  rows.push_back(row4);
+  backend_->AddPagesWithDetails(rows, history::SOURCE_BROWSED);
+
+  // Verify that recent URLs have ended up in the main |db_|, while expired URLs
+  // have ended up in the |archived_db_|.
+  URLRow stored_row1, stored_row2, stored_row3, stored_row4;
+  EXPECT_NE(0, backend_->db_->GetRowForURL(row1.url(), &stored_row1));
+  EXPECT_NE(0, backend_->db_->GetRowForURL(row2.url(), &stored_row2));
+  EXPECT_NE(0, backend_->db_->GetRowForURL(row3.url(), &stored_row3));
+  EXPECT_EQ(0, backend_->db_->GetRowForURL(row4.url(), &stored_row4));
+
+  EXPECT_EQ(0, backend_->archived_db_->GetRowForURL(row1.url(), &stored_row1));
+  EXPECT_EQ(0, backend_->archived_db_->GetRowForURL(row2.url(), &stored_row2));
+  EXPECT_EQ(0, backend_->archived_db_->GetRowForURL(row3.url(), &stored_row3));
+  EXPECT_NE(0, backend_->archived_db_->GetRowForURL(row4.url(), &stored_row4));
+
+  // Ensure that a notification was fired, and further verify that the IDs in
+  // the notification are set to those that are in effect in the main database.
+  // The InMemoryHistoryBackend relies on this for caching.
+  ASSERT_EQ(1u, broadcasted_notifications().size());
+  ASSERT_EQ(chrome::NOTIFICATION_HISTORY_URLS_MODIFIED,
+            broadcasted_notifications()[0].first);
+  const URLsModifiedDetails* details = static_cast<const URLsModifiedDetails*>(
+      broadcasted_notifications()[0].second);
+  EXPECT_EQ(2u, details->changed_urls.size());
+
+  URLRows::const_iterator it_row2 = std::find_if(
+      details->changed_urls.begin(),
+      details->changed_urls.end(),
+      history::URLRow::URLRowHasURL(row2.url()));
+  ASSERT_NE(details->changed_urls.end(), it_row2);
+  EXPECT_EQ(stored_row2.id(), it_row2->id());
+
+  URLRows::const_iterator it_row3 = std::find_if(
+        details->changed_urls.begin(),
+        details->changed_urls.end(),
+        history::URLRow::URLRowHasURL(row3.url()));
+  ASSERT_NE(details->changed_urls.end(), it_row3);
+  EXPECT_EQ(stored_row3.id(), it_row3->id());
+}
+
+// This verifies that a notification is fired. In-depth testing of logic should
+// be done in HistoryTest.SetTitle.
+TEST_F(HistoryBackendTest, SetPageTitleFiresNotificationWithCorrectDetails) {
+  const char kTestUrlTitle[] = "Google Search";
+
+  ASSERT_TRUE(backend_.get());
+
+  // Add two pages, then change the title of the second one.
+  URLRow row1(GURL("https://news.google.com/"));
+  row1.set_typed_count(1);
+  row1.set_last_visit(Time::Now());
+  URLRow row2(GURL("https://www.google.com/"));
+  row2.set_visit_count(2);
+  row2.set_last_visit(Time::Now());
+
+  URLRows rows;
+  rows.push_back(row1);
+  rows.push_back(row2);
+  backend_->AddPagesWithDetails(rows, history::SOURCE_BROWSED);
+
+  ClearBroadcastedNotifications();
+  backend_->SetPageTitle(row2.url(), base::UTF8ToUTF16(kTestUrlTitle));
+
+  // Ensure that a notification was fired, and further verify that the IDs in
+  // the notification are set to those that are in effect in the main database.
+  // The InMemoryHistoryBackend relies on this for caching.
+  URLRow stored_row2;
+  EXPECT_TRUE(backend_->GetURL(row2.url(), &stored_row2));
+  ASSERT_EQ(1u, broadcasted_notifications().size());
+  ASSERT_EQ(chrome::NOTIFICATION_HISTORY_URLS_MODIFIED,
+            broadcasted_notifications()[0].first);
+  const URLsModifiedDetails* details = static_cast<const URLsModifiedDetails*>(
+      broadcasted_notifications()[0].second);
+  ASSERT_EQ(1u, details->changed_urls.size());
+  EXPECT_EQ(base::UTF8ToUTF16(kTestUrlTitle), details->changed_urls[0].title());
+  EXPECT_EQ(stored_row2.id(), details->changed_urls[0].id());
+}
+
 TEST_F(HistoryBackendTest, ImportedFaviconsTest) {
   // Setup test data - two Urls in the history, one with favicon assigned and
   // one without.
   GURL favicon_url1("http://www.google.com/favicon.ico");
   std::vector<unsigned char> data;
   data.push_back('1');
-  chrome::FaviconID favicon1 = backend_->thumbnail_db_->AddFavicon(
+  favicon_base::FaviconID favicon1 = backend_->thumbnail_db_->AddFavicon(
       favicon_url1,
-      chrome::FAVICON,
+      favicon_base::FAVICON,
       base::RefCountedBytes::TakeVector(&data),
       Time::Now(),
       gfx::Size());
@@ -814,8 +1040,8 @@
   URLRow url_row1, url_row2;
   EXPECT_FALSE(backend_->db_->GetRowForURL(row1.url(), &url_row1) == 0);
   EXPECT_FALSE(backend_->db_->GetRowForURL(row2.url(), &url_row2) == 0);
-  EXPECT_EQ(1u, NumIconMappingsForPageURL(row1.url(), chrome::FAVICON));
-  EXPECT_EQ(0u, NumIconMappingsForPageURL(row2.url(), chrome::FAVICON));
+  EXPECT_EQ(1u, NumIconMappingsForPageURL(row1.url(), favicon_base::FAVICON));
+  EXPECT_EQ(0u, NumIconMappingsForPageURL(row2.url(), favicon_base::FAVICON));
 
   // Now provide one imported favicon for both URLs already in the registry.
   // The new favicon should only be used with the URL that doesn't already have
@@ -833,14 +1059,14 @@
 
   std::vector<IconMapping> mappings;
   EXPECT_TRUE(backend_->thumbnail_db_->GetIconMappingsForPageURL(
-      row1.url(), chrome::FAVICON, &mappings));
+      row1.url(), favicon_base::FAVICON, &mappings));
   EXPECT_EQ(1u, mappings.size());
   EXPECT_EQ(favicon1, mappings[0].icon_id);
   EXPECT_EQ(favicon_url1, mappings[0].icon_url);
 
   mappings.clear();
   EXPECT_TRUE(backend_->thumbnail_db_->GetIconMappingsForPageURL(
-    row2.url(), chrome::FAVICON, &mappings));
+      row2.url(), favicon_base::FAVICON, &mappings));
   EXPECT_EQ(1u, mappings.size());
   EXPECT_EQ(favicon.favicon_url, mappings[0].icon_url);
 
@@ -975,6 +1201,56 @@
   ASSERT_EQ(recent_time, row.last_visit());
 }
 
+TEST_F(HistoryBackendTest, AddPageVisitFiresNotificationWithCorrectDetails) {
+  ASSERT_TRUE(backend_.get());
+
+  GURL url1("http://www.google.com");
+  GURL url2("http://maps.google.com");
+
+  // Clear all history.
+  backend_->DeleteAllHistory();
+  ClearBroadcastedNotifications();
+
+  // Visit two distinct URLs, the second one twice.
+  backend_->AddPageVisit(url1, base::Time::Now(), 0,
+                         content::PAGE_TRANSITION_LINK,
+                         history::SOURCE_BROWSED);
+  for (int i = 0; i < 2; ++i) {
+    backend_->AddPageVisit(url2, base::Time::Now(), 0,
+                           content::PAGE_TRANSITION_TYPED,
+                           history::SOURCE_BROWSED);
+  }
+
+  URLRow stored_row1, stored_row2;
+  EXPECT_NE(0, backend_->db_->GetRowForURL(url1, &stored_row1));
+  EXPECT_NE(0, backend_->db_->GetRowForURL(url2, &stored_row2));
+
+  // Expect that NOTIFICATION_HISTORY_URLS_VISITED has been fired 3x, and that
+  // each time, the URLRows have the correct URLs and IDs set.
+  ASSERT_EQ(3, num_broadcasted_notifications());
+  ASSERT_EQ(chrome::NOTIFICATION_HISTORY_URL_VISITED,
+            broadcasted_notifications()[0].first);
+  const URLVisitedDetails* details = static_cast<const URLVisitedDetails*>(
+      broadcasted_notifications()[0].second);
+  EXPECT_EQ(content::PAGE_TRANSITION_LINK,
+            content::PageTransitionStripQualifier(details->transition));
+  EXPECT_EQ(stored_row1.id(), details->row.id());
+  EXPECT_EQ(stored_row1.url(), details->row.url());
+
+  // No further checking, this case analogous to the first one.
+  ASSERT_EQ(chrome::NOTIFICATION_HISTORY_URL_VISITED,
+            broadcasted_notifications()[1].first);
+
+  ASSERT_EQ(chrome::NOTIFICATION_HISTORY_URL_VISITED,
+            broadcasted_notifications()[2].first);
+  details = static_cast<const URLVisitedDetails*>(
+      broadcasted_notifications()[2].second);
+  EXPECT_EQ(content::PAGE_TRANSITION_TYPED,
+            content::PageTransitionStripQualifier(details->transition));
+  EXPECT_EQ(stored_row2.id(), details->row.id());
+  EXPECT_EQ(stored_row2.url(), details->row.url());
+}
+
 TEST_F(HistoryBackendTest, AddPageArgsSource) {
   ASSERT_TRUE(backend_.get());
 
@@ -1201,7 +1477,7 @@
 
   // Copy history database file to current directory so that it will be deleted
   // in Teardown.
-  base::FilePath new_history_path(getTestDir());
+  base::FilePath new_history_path(test_dir());
   base::DeleteFile(new_history_path, true);
   base::CreateDirectory(new_history_path);
   base::FilePath new_history_file =
@@ -1263,55 +1539,60 @@
   const GURL icon_url2("http://www.google.com/icon2");
 
   // Generate bitmap data for a page with two favicons.
-  std::vector<chrome::FaviconBitmapData> two_favicon_bitmap_data;
+  std::vector<favicon_base::FaviconBitmapData> two_favicon_bitmap_data;
   GenerateFaviconBitmapData(icon_url1, GetSizesSmallAndLarge(),
       icon_url2, GetSizesSmallAndLarge(), &two_favicon_bitmap_data);
 
   // Generate bitmap data for a page with a single favicon.
-  std::vector<chrome::FaviconBitmapData> one_favicon_bitmap_data;
+  std::vector<favicon_base::FaviconBitmapData> one_favicon_bitmap_data;
   GenerateFaviconBitmapData(icon_url1, GetSizesSmallAndLarge(),
                             &one_favicon_bitmap_data);
 
   // Add two favicons
-  backend_->SetFavicons(url1, chrome::FAVICON, two_favicon_bitmap_data);
-  EXPECT_EQ(2u, NumIconMappingsForPageURL(url1, chrome::FAVICON));
-  EXPECT_EQ(2u, NumIconMappingsForPageURL(url2, chrome::FAVICON));
+  backend_->SetFavicons(url1, favicon_base::FAVICON, two_favicon_bitmap_data);
+  EXPECT_EQ(2u, NumIconMappingsForPageURL(url1, favicon_base::FAVICON));
+  EXPECT_EQ(2u, NumIconMappingsForPageURL(url2, favicon_base::FAVICON));
 
   // Add one touch_icon
-  backend_->SetFavicons(url1, chrome::TOUCH_ICON, one_favicon_bitmap_data);
-  EXPECT_EQ(1u, NumIconMappingsForPageURL(url1, chrome::TOUCH_ICON));
-  EXPECT_EQ(1u, NumIconMappingsForPageURL(url2, chrome::TOUCH_ICON));
-  EXPECT_EQ(2u, NumIconMappingsForPageURL(url1, chrome::FAVICON));
+  backend_->SetFavicons(
+      url1, favicon_base::TOUCH_ICON, one_favicon_bitmap_data);
+  EXPECT_EQ(1u, NumIconMappingsForPageURL(url1, favicon_base::TOUCH_ICON));
+  EXPECT_EQ(1u, NumIconMappingsForPageURL(url2, favicon_base::TOUCH_ICON));
+  EXPECT_EQ(2u, NumIconMappingsForPageURL(url1, favicon_base::FAVICON));
 
   // Add one TOUCH_PRECOMPOSED_ICON
   backend_->SetFavicons(
-      url1, chrome::TOUCH_PRECOMPOSED_ICON, one_favicon_bitmap_data);
+      url1, favicon_base::TOUCH_PRECOMPOSED_ICON, one_favicon_bitmap_data);
   // The touch_icon was replaced.
-  EXPECT_EQ(0u, NumIconMappingsForPageURL(url1, chrome::TOUCH_ICON));
-  EXPECT_EQ(2u, NumIconMappingsForPageURL(url1, chrome::FAVICON));
-  EXPECT_EQ(1u,
-            NumIconMappingsForPageURL(url1, chrome::TOUCH_PRECOMPOSED_ICON));
-  EXPECT_EQ(1u,
-            NumIconMappingsForPageURL(url2, chrome::TOUCH_PRECOMPOSED_ICON));
+  EXPECT_EQ(0u, NumIconMappingsForPageURL(url1, favicon_base::TOUCH_ICON));
+  EXPECT_EQ(2u, NumIconMappingsForPageURL(url1, favicon_base::FAVICON));
+  EXPECT_EQ(
+      1u,
+      NumIconMappingsForPageURL(url1, favicon_base::TOUCH_PRECOMPOSED_ICON));
+  EXPECT_EQ(
+      1u,
+      NumIconMappingsForPageURL(url2, favicon_base::TOUCH_PRECOMPOSED_ICON));
 
   // Add a touch_icon.
-  backend_->SetFavicons(url1, chrome::TOUCH_ICON, one_favicon_bitmap_data);
-  EXPECT_EQ(1u, NumIconMappingsForPageURL(url1, chrome::TOUCH_ICON));
-  EXPECT_EQ(2u, NumIconMappingsForPageURL(url1, chrome::FAVICON));
+  backend_->SetFavicons(
+      url1, favicon_base::TOUCH_ICON, one_favicon_bitmap_data);
+  EXPECT_EQ(1u, NumIconMappingsForPageURL(url1, favicon_base::TOUCH_ICON));
+  EXPECT_EQ(2u, NumIconMappingsForPageURL(url1, favicon_base::FAVICON));
   // The TOUCH_PRECOMPOSED_ICON was replaced.
-  EXPECT_EQ(0u,
-            NumIconMappingsForPageURL(url1, chrome::TOUCH_PRECOMPOSED_ICON));
+  EXPECT_EQ(
+      0u,
+      NumIconMappingsForPageURL(url1, favicon_base::TOUCH_PRECOMPOSED_ICON));
 
   // Add a single favicon.
-  backend_->SetFavicons(url1, chrome::FAVICON, one_favicon_bitmap_data);
-  EXPECT_EQ(1u, NumIconMappingsForPageURL(url1, chrome::TOUCH_ICON));
-  EXPECT_EQ(1u, NumIconMappingsForPageURL(url1, chrome::FAVICON));
-  EXPECT_EQ(1u, NumIconMappingsForPageURL(url2, chrome::FAVICON));
+  backend_->SetFavicons(url1, favicon_base::FAVICON, one_favicon_bitmap_data);
+  EXPECT_EQ(1u, NumIconMappingsForPageURL(url1, favicon_base::TOUCH_ICON));
+  EXPECT_EQ(1u, NumIconMappingsForPageURL(url1, favicon_base::FAVICON));
+  EXPECT_EQ(1u, NumIconMappingsForPageURL(url2, favicon_base::FAVICON));
 
   // Add two favicons.
-  backend_->SetFavicons(url1, chrome::FAVICON, two_favicon_bitmap_data);
-  EXPECT_EQ(1u, NumIconMappingsForPageURL(url1, chrome::TOUCH_ICON));
-  EXPECT_EQ(2u, NumIconMappingsForPageURL(url1, chrome::FAVICON));
+  backend_->SetFavicons(url1, favicon_base::FAVICON, two_favicon_bitmap_data);
+  EXPECT_EQ(1u, NumIconMappingsForPageURL(url1, favicon_base::TOUCH_ICON));
+  EXPECT_EQ(2u, NumIconMappingsForPageURL(url1, favicon_base::FAVICON));
 }
 
 // Test that there is no churn in icon mappings from calling
@@ -1320,23 +1601,23 @@
   const GURL url("http://www.google.com/");
   const GURL icon_url("http://www.google.com/icon");
 
-  std::vector<chrome::FaviconBitmapData> favicon_bitmap_data;
+  std::vector<favicon_base::FaviconBitmapData> favicon_bitmap_data;
   GenerateFaviconBitmapData(icon_url, GetSizesSmallAndLarge(),
                             &favicon_bitmap_data);
 
-  backend_->SetFavicons(url, chrome::FAVICON, favicon_bitmap_data);
+  backend_->SetFavicons(url, favicon_base::FAVICON, favicon_bitmap_data);
 
   std::vector<IconMapping> icon_mappings;
   EXPECT_TRUE(backend_->thumbnail_db_->GetIconMappingsForPageURL(
-      url, chrome::FAVICON, &icon_mappings));
+      url, favicon_base::FAVICON, &icon_mappings));
   EXPECT_EQ(1u, icon_mappings.size());
   IconMappingID mapping_id = icon_mappings[0].mapping_id;
 
-  backend_->SetFavicons(url, chrome::FAVICON, favicon_bitmap_data);
+  backend_->SetFavicons(url, favicon_base::FAVICON, favicon_bitmap_data);
 
   icon_mappings.clear();
   EXPECT_TRUE(backend_->thumbnail_db_->GetIconMappingsForPageURL(
-      url, chrome::FAVICON, &icon_mappings));
+      url, favicon_base::FAVICON, &icon_mappings));
   EXPECT_EQ(1u, icon_mappings.size());
 
   // The same row in the icon_mapping table should be used for the mapping as
@@ -1351,18 +1632,18 @@
   const GURL page_url("http://www.google.com/");
   const GURL icon_url("http://www.google.com/icon");
 
-  std::vector<chrome::FaviconBitmapData> favicon_bitmap_data;
+  std::vector<favicon_base::FaviconBitmapData> favicon_bitmap_data;
   GenerateFaviconBitmapData(icon_url, GetSizesSmallAndLarge(),
                             &favicon_bitmap_data);
-  backend_->SetFavicons(page_url, chrome::FAVICON, favicon_bitmap_data);
+  backend_->SetFavicons(page_url, favicon_base::FAVICON, favicon_bitmap_data);
 
   // Test initial state.
   std::vector<IconMapping> icon_mappings;
   EXPECT_TRUE(GetSortedIconMappingsForPageURL(page_url, &icon_mappings));
   EXPECT_EQ(1u, icon_mappings.size());
   EXPECT_EQ(icon_url, icon_mappings[0].icon_url);
-  EXPECT_EQ(chrome::FAVICON, icon_mappings[0].icon_type);
-  chrome::FaviconID favicon_id = icon_mappings[0].icon_id;
+  EXPECT_EQ(favicon_base::FAVICON, icon_mappings[0].icon_type);
+  favicon_base::FaviconID favicon_id = icon_mappings[0].icon_id;
 
   std::vector<FaviconBitmap> favicon_bitmaps;
   EXPECT_TRUE(GetSortedFaviconBitmaps(favicon_id, &favicon_bitmaps));
@@ -1379,7 +1660,7 @@
   // Call SetFavicons() with bitmap data for only the large bitmap. Check that
   // the small bitmap is in fact deleted.
   GenerateFaviconBitmapData(icon_url, GetSizesLarge(), &favicon_bitmap_data);
-  backend_->SetFavicons(page_url, chrome::FAVICON, favicon_bitmap_data);
+  backend_->SetFavicons(page_url, favicon_base::FAVICON, favicon_bitmap_data);
 
   scoped_refptr<base::RefCountedMemory> bitmap_data_out;
   gfx::Size pixel_size_out;
@@ -1399,7 +1680,7 @@
   // Call SetFavicons() with no bitmap data. Check that the bitmaps and icon
   // mappings are deleted.
   favicon_bitmap_data.clear();
-  backend_->SetFavicons(page_url, chrome::FAVICON, favicon_bitmap_data);
+  backend_->SetFavicons(page_url, favicon_base::FAVICON, favicon_bitmap_data);
 
   EXPECT_FALSE(backend_->thumbnail_db_->GetFaviconBitmap(large_bitmap_id, NULL,
       NULL, NULL));
@@ -1419,20 +1700,20 @@
   std::vector<unsigned char> data_initial;
   data_initial.push_back('a');
 
-  chrome::FaviconBitmapData bitmap_data_element;
+  favicon_base::FaviconBitmapData bitmap_data_element;
   bitmap_data_element.bitmap_data =
       base::RefCountedBytes::TakeVector(&data_initial);
   bitmap_data_element.pixel_size = kSmallSize;
   bitmap_data_element.icon_url = icon_url;
-  std::vector<chrome::FaviconBitmapData> favicon_bitmap_data;
+  std::vector<favicon_base::FaviconBitmapData> favicon_bitmap_data;
   favicon_bitmap_data.push_back(bitmap_data_element);
 
   // Add bitmap to the database.
-  backend_->SetFavicons(page_url, chrome::FAVICON, favicon_bitmap_data);
+  backend_->SetFavicons(page_url, favicon_base::FAVICON, favicon_bitmap_data);
 
-  chrome::FaviconID original_favicon_id =
+  favicon_base::FaviconID original_favicon_id =
       backend_->thumbnail_db_->GetFaviconIDForFaviconURL(
-          icon_url, chrome::FAVICON, NULL);
+          icon_url, favicon_base::FAVICON, NULL);
   EXPECT_NE(0, original_favicon_id);
   FaviconBitmap original_favicon_bitmap;
   EXPECT_TRUE(
@@ -1445,11 +1726,11 @@
   std::vector<unsigned char> updated_data;
   updated_data.push_back('a');
   favicon_bitmap_data[0].bitmap_data = new base::RefCountedBytes(updated_data);
-  backend_->SetFavicons(page_url, chrome::FAVICON, favicon_bitmap_data);
+  backend_->SetFavicons(page_url, favicon_base::FAVICON, favicon_bitmap_data);
 
-  chrome::FaviconID updated_favicon_id =
+  favicon_base::FaviconID updated_favicon_id =
       backend_->thumbnail_db_->GetFaviconIDForFaviconURL(
-          icon_url, chrome::FAVICON, NULL);
+          icon_url, favicon_base::FAVICON, NULL);
   EXPECT_NE(0, updated_favicon_id);
   FaviconBitmap updated_favicon_bitmap;
   EXPECT_TRUE(
@@ -1463,11 +1744,10 @@
   // Call SetFavicons() with identical data but a different bitmap.
   updated_data[0] = 'b';
   favicon_bitmap_data[0].bitmap_data = new base::RefCountedBytes(updated_data);
-  backend_->SetFavicons(page_url, chrome::FAVICON, favicon_bitmap_data);
+  backend_->SetFavicons(page_url, favicon_base::FAVICON, favicon_bitmap_data);
 
-  updated_favicon_id =
-      backend_->thumbnail_db_->GetFaviconIDForFaviconURL(
-          icon_url, chrome::FAVICON, NULL);
+  updated_favicon_id = backend_->thumbnail_db_->GetFaviconIDForFaviconURL(
+      icon_url, favicon_base::FAVICON, NULL);
   EXPECT_NE(0, updated_favicon_id);
   EXPECT_TRUE(
       GetOnlyFaviconBitmap(updated_favicon_id, &updated_favicon_bitmap));
@@ -1492,26 +1772,29 @@
   GURL page_url1("http://www.google.com");
   GURL page_url2("http://www.google.ca");
 
-  std::vector<chrome::FaviconBitmapData> favicon_bitmap_data;
+  std::vector<favicon_base::FaviconBitmapData> favicon_bitmap_data;
   GenerateFaviconBitmapData(icon_url, GetSizesSmallAndLarge(),
                             &favicon_bitmap_data);
 
-  backend_->SetFavicons(page_url1, chrome::FAVICON, favicon_bitmap_data);
+  backend_->SetFavicons(page_url1, favicon_base::FAVICON, favicon_bitmap_data);
 
   std::vector<GURL> icon_urls;
   icon_urls.push_back(icon_url);
 
-  std::vector<chrome::FaviconBitmapResult> bitmap_results;
-  backend_->UpdateFaviconMappingsAndFetch(
-      page_url2, icon_urls, chrome::FAVICON, kSmallSize.width(),
-      GetScaleFactors1x2x(), &bitmap_results);
+  std::vector<favicon_base::FaviconBitmapResult> bitmap_results;
+  backend_->UpdateFaviconMappingsAndFetch(page_url2,
+                                          icon_urls,
+                                          favicon_base::FAVICON,
+                                          kSmallSize.width(),
+                                          GetScaleFactors1x2x(),
+                                          &bitmap_results);
 
   // Check that the same FaviconID is mapped to both page URLs.
   std::vector<IconMapping> icon_mappings;
   EXPECT_TRUE(backend_->thumbnail_db_->GetIconMappingsForPageURL(
       page_url1, &icon_mappings));
   EXPECT_EQ(1u, icon_mappings.size());
-  chrome::FaviconID favicon_id = icon_mappings[0].icon_id;
+  favicon_base::FaviconID favicon_id = icon_mappings[0].icon_id;
   EXPECT_NE(0, favicon_id);
 
   icon_mappings.clear();
@@ -1523,7 +1806,7 @@
   // Change the icon URL that |page_url1| is mapped to.
   GenerateFaviconBitmapData(icon_url_new, GetSizesSmall(),
                             &favicon_bitmap_data);
-  backend_->SetFavicons(page_url1, chrome::FAVICON, favicon_bitmap_data);
+  backend_->SetFavicons(page_url1, favicon_base::FAVICON, favicon_bitmap_data);
 
   // |page_url1| should map to a new FaviconID and have valid bitmap data.
   icon_mappings.clear();
@@ -1562,27 +1845,31 @@
 TEST_F(HistoryBackendTest, UpdateFaviconMappingsAndFetchNoChange) {
   GURL page_url("http://www.google.com");
   GURL icon_url("http://www.google.com/favicon.ico");
-  std::vector<chrome::FaviconBitmapData> favicon_bitmap_data;
+  std::vector<favicon_base::FaviconBitmapData> favicon_bitmap_data;
   GenerateFaviconBitmapData(icon_url, GetSizesSmall(), &favicon_bitmap_data);
 
-  backend_->SetFavicons(page_url, chrome::FAVICON, favicon_bitmap_data);
+  backend_->SetFavicons(page_url, favicon_base::FAVICON, favicon_bitmap_data);
 
-  chrome::FaviconID icon_id =
-    backend_->thumbnail_db_->GetFaviconIDForFaviconURL(
-        icon_url, chrome::FAVICON, NULL);
+  favicon_base::FaviconID icon_id =
+      backend_->thumbnail_db_->GetFaviconIDForFaviconURL(
+          icon_url, favicon_base::FAVICON, NULL);
   EXPECT_NE(0, icon_id);
   EXPECT_EQ(1, num_broadcasted_notifications());
 
   std::vector<GURL> icon_urls;
   icon_urls.push_back(icon_url);
 
-  std::vector<chrome::FaviconBitmapResult> bitmap_results;
-  backend_->UpdateFaviconMappingsAndFetch(
-      page_url, icon_urls, chrome::FAVICON, kSmallSize.width(),
-      GetScaleFactors1x2x(), &bitmap_results);
+  std::vector<favicon_base::FaviconBitmapResult> bitmap_results;
+  backend_->UpdateFaviconMappingsAndFetch(page_url,
+                                          icon_urls,
+                                          favicon_base::FAVICON,
+                                          kSmallSize.width(),
+                                          GetScaleFactors1x2x(),
+                                          &bitmap_results);
 
-  EXPECT_EQ(icon_id, backend_->thumbnail_db_->GetFaviconIDForFaviconURL(
-      icon_url, chrome::FAVICON, NULL));
+  EXPECT_EQ(icon_id,
+            backend_->thumbnail_db_->GetFaviconIDForFaviconURL(
+                icon_url, favicon_base::FAVICON, NULL));
 
   // No notification should have been broadcast as no icon mapping, favicon,
   // or favicon bitmap was updated, added or removed.
@@ -1601,7 +1888,7 @@
       new base::RefCountedBytes(data));
 
   backend_->MergeFavicon(
-      page_url, icon_url, chrome::FAVICON, bitmap_data, kSmallSize);
+      page_url, icon_url, favicon_base::FAVICON, bitmap_data, kSmallSize);
 
   // |page_url| should now be mapped to |icon_url| and the favicon bitmap should
   // not be expired.
@@ -1620,7 +1907,7 @@
   data[0] = 'b';
   bitmap_data = new base::RefCountedBytes(data);
   backend_->MergeFavicon(
-      page_url, icon_url, chrome::FAVICON, bitmap_data, kSmallSize);
+      page_url, icon_url, favicon_base::FAVICON, bitmap_data, kSmallSize);
 
   // |page_url| should still have a single favicon bitmap. The bitmap data
   // should be updated.
@@ -1642,11 +1929,11 @@
   GURL icon_url1("http:/www.google.com/favicon.ico");
   GURL icon_url2("http://www.google.com/favicon2.ico");
 
-  std::vector<chrome::FaviconBitmapData> favicon_bitmap_data;
+  std::vector<favicon_base::FaviconBitmapData> favicon_bitmap_data;
   GenerateFaviconBitmapData(icon_url1, GetSizesSmall(),
                             &favicon_bitmap_data);
 
-  backend_->SetFavicons(page_url, chrome::FAVICON, favicon_bitmap_data);
+  backend_->SetFavicons(page_url, favicon_base::FAVICON, favicon_bitmap_data);
 
   // Test initial state.
   std::vector<IconMapping> icon_mappings;
@@ -1669,7 +1956,7 @@
   scoped_refptr<base::RefCountedBytes> bitmap_data(
       new base::RefCountedBytes(data));
   backend_->MergeFavicon(
-      page_url, icon_url1, chrome::FAVICON, bitmap_data, kSmallSize);
+      page_url, icon_url1, favicon_base::FAVICON, bitmap_data, kSmallSize);
 
   // All the data should stay the same and no notifications should have been
   // sent.
@@ -1690,7 +1977,7 @@
   data[0] = 'b';
   bitmap_data = new base::RefCountedBytes(data);
   backend_->MergeFavicon(
-      page_url, icon_url1, chrome::FAVICON, bitmap_data, kSmallSize);
+      page_url, icon_url1, favicon_base::FAVICON, bitmap_data, kSmallSize);
 
   // The small favicon bitmap at |icon_url1| should be overwritten.
   icon_mappings.clear();
@@ -1709,7 +1996,7 @@
   data[0] = 'c';
   bitmap_data = new base::RefCountedBytes(data);
   backend_->MergeFavicon(
-      page_url, icon_url1, chrome::FAVICON, bitmap_data, kTinySize);
+      page_url, icon_url1, favicon_base::FAVICON, bitmap_data, kTinySize);
 
   // A new favicon bitmap should be created and the preexisting favicon bitmap
   // ('b') should be expired.
@@ -1734,7 +2021,7 @@
   data[0] = 'd';
   bitmap_data = new base::RefCountedBytes(data);
   backend_->MergeFavicon(
-      page_url, icon_url2, chrome::FAVICON, bitmap_data, kSmallSize);
+      page_url, icon_url2, favicon_base::FAVICON, bitmap_data, kSmallSize);
 
   // The existing favicon bitmaps should be copied over to the newly created
   // favicon at |icon_url2|. |page_url| should solely be mapped to |icon_url2|.
@@ -1769,11 +2056,11 @@
   GURL page_url3("http://maps.google.com");
   GURL icon_url("http:/www.google.com/favicon.ico");
 
-  std::vector<chrome::FaviconBitmapData> favicon_bitmap_data;
+  std::vector<favicon_base::FaviconBitmapData> favicon_bitmap_data;
   GenerateFaviconBitmapData(icon_url, GetSizesSmall(),
                             &favicon_bitmap_data);
 
-  backend_->SetFavicons(page_url1, chrome::FAVICON, favicon_bitmap_data);
+  backend_->SetFavicons(page_url1, favicon_base::FAVICON, favicon_bitmap_data);
 
   // Test initial state.
   std::vector<IconMapping> icon_mappings;
@@ -1795,11 +2082,11 @@
       new base::RefCountedBytes(data));
 
   backend_->MergeFavicon(
-      page_url2, icon_url, chrome::FAVICON, bitmap_data, kSmallSize);
+      page_url2, icon_url, favicon_base::FAVICON, bitmap_data, kSmallSize);
 
-  chrome::FaviconID favicon_id =
-    backend_->thumbnail_db_->GetFaviconIDForFaviconURL(
-        icon_url, chrome::FAVICON, NULL);
+  favicon_base::FaviconID favicon_id =
+      backend_->thumbnail_db_->GetFaviconIDForFaviconURL(
+          icon_url, favicon_base::FAVICON, NULL);
   EXPECT_NE(0, favicon_id);
 
   EXPECT_TRUE(GetOnlyFaviconBitmap(favicon_id, &favicon_bitmap));
@@ -1811,10 +2098,10 @@
   // URL should overwrite the small favicon bitmap at |icon_url|.
   bitmap_data->data()[0] = 'b';
   backend_->MergeFavicon(
-      page_url3, icon_url, chrome::FAVICON, bitmap_data, kSmallSize);
+      page_url3, icon_url, favicon_base::FAVICON, bitmap_data, kSmallSize);
 
   favicon_id = backend_->thumbnail_db_->GetFaviconIDForFaviconURL(
-      icon_url, chrome::FAVICON, NULL);
+      icon_url, favicon_base::FAVICON, NULL);
   EXPECT_NE(0, favicon_id);
 
   EXPECT_TRUE(GetOnlyFaviconBitmap(favicon_id, &favicon_bitmap));
@@ -1863,7 +2150,10 @@
     icon_url_string[replace_index] = '0' + i;
     GURL icon_url(icon_url_string);
 
-    backend_->MergeFavicon(page_url, icon_url, chrome::FAVICON, bitmap_data,
+    backend_->MergeFavicon(page_url,
+                           icon_url,
+                           favicon_base::FAVICON,
+                           bitmap_data,
                            gfx::Size(pixel_size, pixel_size));
     ++pixel_size;
   }
@@ -1887,30 +2177,36 @@
   GURL icon_url("http://www.google.com/favicon.ico");
   GURL merged_icon_url("http://wwww.google.com/favicon2.ico");
 
-  std::vector<chrome::FaviconBitmapData> favicon_bitmap_data;
+  std::vector<favicon_base::FaviconBitmapData> favicon_bitmap_data;
   GenerateFaviconBitmapData(icon_url, GetSizesSmallAndLarge(),
                             &favicon_bitmap_data);
 
   // Set some preexisting favicons for |page_url|.
-  backend_->SetFavicons(page_url, chrome::FAVICON, favicon_bitmap_data);
+  backend_->SetFavicons(page_url, favicon_base::FAVICON, favicon_bitmap_data);
 
   // Merge small favicon.
   std::vector<unsigned char> data;
   data.push_back('c');
   scoped_refptr<base::RefCountedBytes> bitmap_data(
       new base::RefCountedBytes(data));
-  backend_->MergeFavicon(
-      page_url, merged_icon_url, chrome::FAVICON, bitmap_data, kSmallSize);
+  backend_->MergeFavicon(page_url,
+                         merged_icon_url,
+                         favicon_base::FAVICON,
+                         bitmap_data,
+                         kSmallSize);
 
   // Request favicon bitmaps for both 1x and 2x to simulate request done by
   // BookmarkModel::GetFavicon().
-  std::vector<chrome::FaviconBitmapResult> bitmap_results;
-  backend_->GetFaviconsForURL(page_url, chrome::FAVICON, kSmallSize.width(),
-                              GetScaleFactors1x2x(), &bitmap_results);
+  std::vector<favicon_base::FaviconBitmapResult> bitmap_results;
+  backend_->GetFaviconsForURL(page_url,
+                              favicon_base::FAVICON,
+                              kSmallSize.width(),
+                              GetScaleFactors1x2x(),
+                              &bitmap_results);
 
   EXPECT_EQ(2u, bitmap_results.size());
-  const chrome::FaviconBitmapResult& first_result = bitmap_results[0];
-  const chrome::FaviconBitmapResult& result =
+  const favicon_base::FaviconBitmapResult& first_result = bitmap_results[0];
+  const favicon_base::FaviconBitmapResult& result =
       (first_result.pixel_size == kSmallSize) ? first_result
                                               : bitmap_results[1];
   EXPECT_TRUE(BitmapDataEqual('c', result.bitmap_data));
@@ -1922,38 +2218,39 @@
   GURL icon_url("http://www.google.com/favicon.ico");
   GURL touch_icon_url("http://wwww.google.com/touch_icon.ico");
 
-  std::vector<chrome::FaviconBitmapData> favicon_bitmap_data;
+  std::vector<favicon_base::FaviconBitmapData> favicon_bitmap_data;
   std::vector<gfx::Size> favicon_size;
   favicon_size.push_back(gfx::Size(16, 16));
   favicon_size.push_back(gfx::Size(32, 32));
   GenerateFaviconBitmapData(icon_url, favicon_size, &favicon_bitmap_data);
   ASSERT_EQ(2u, favicon_bitmap_data.size());
 
-  std::vector<chrome::FaviconBitmapData> touch_icon_bitmap_data;
+  std::vector<favicon_base::FaviconBitmapData> touch_icon_bitmap_data;
   std::vector<gfx::Size> touch_icon_size;
   touch_icon_size.push_back(gfx::Size(64, 64));
   GenerateFaviconBitmapData(icon_url, touch_icon_size, &touch_icon_bitmap_data);
   ASSERT_EQ(1u, touch_icon_bitmap_data.size());
 
   // Set some preexisting favicons for |page_url|.
-  backend_->SetFavicons(page_url, chrome::FAVICON, favicon_bitmap_data);
-  backend_->SetFavicons(page_url, chrome::TOUCH_ICON, touch_icon_bitmap_data);
+  backend_->SetFavicons(page_url, favicon_base::FAVICON, favicon_bitmap_data);
+  backend_->SetFavicons(
+      page_url, favicon_base::TOUCH_ICON, touch_icon_bitmap_data);
 
-  chrome::FaviconBitmapResult result;
+  favicon_base::FaviconBitmapResult result;
   std::vector<int> icon_types;
-  icon_types.push_back(chrome::FAVICON);
-  icon_types.push_back(chrome::TOUCH_ICON);
+  icon_types.push_back(favicon_base::FAVICON);
+  icon_types.push_back(favicon_base::TOUCH_ICON);
 
   backend_->GetLargestFaviconForURL(page_url, icon_types, 16, &result);
 
   // Verify the result icon is 32x32 favicon.
   EXPECT_EQ(gfx::Size(32, 32), result.pixel_size);
-  EXPECT_EQ(chrome::FAVICON, result.icon_type);
+  EXPECT_EQ(favicon_base::FAVICON, result.icon_type);
 
   // Change Minimal size to 32x32 and verify the 64x64 touch icon returned.
   backend_->GetLargestFaviconForURL(page_url, icon_types, 32, &result);
   EXPECT_EQ(gfx::Size(64, 64), result.pixel_size);
-  EXPECT_EQ(chrome::TOUCH_ICON, result.icon_type);
+  EXPECT_EQ(favicon_base::TOUCH_ICON, result.icon_type);
 }
 
 // Test the the first types of icon is returned if its size equal to the
@@ -1963,39 +2260,40 @@
   GURL icon_url("http://www.google.com/favicon.ico");
   GURL touch_icon_url("http://wwww.google.com/touch_icon.ico");
 
-  std::vector<chrome::FaviconBitmapData> favicon_bitmap_data;
+  std::vector<favicon_base::FaviconBitmapData> favicon_bitmap_data;
   std::vector<gfx::Size> favicon_size;
   favicon_size.push_back(gfx::Size(16, 16));
   favicon_size.push_back(gfx::Size(32, 32));
   GenerateFaviconBitmapData(icon_url, favicon_size, &favicon_bitmap_data);
   ASSERT_EQ(2u, favicon_bitmap_data.size());
 
-  std::vector<chrome::FaviconBitmapData> touch_icon_bitmap_data;
+  std::vector<favicon_base::FaviconBitmapData> touch_icon_bitmap_data;
   std::vector<gfx::Size> touch_icon_size;
   touch_icon_size.push_back(gfx::Size(32, 32));
   GenerateFaviconBitmapData(icon_url, touch_icon_size, &touch_icon_bitmap_data);
   ASSERT_EQ(1u, touch_icon_bitmap_data.size());
 
   // Set some preexisting favicons for |page_url|.
-  backend_->SetFavicons(page_url, chrome::FAVICON, favicon_bitmap_data);
-  backend_->SetFavicons(page_url, chrome::TOUCH_ICON, touch_icon_bitmap_data);
+  backend_->SetFavicons(page_url, favicon_base::FAVICON, favicon_bitmap_data);
+  backend_->SetFavicons(
+      page_url, favicon_base::TOUCH_ICON, touch_icon_bitmap_data);
 
-  chrome::FaviconBitmapResult result;
+  favicon_base::FaviconBitmapResult result;
   std::vector<int> icon_types;
-  icon_types.push_back(chrome::FAVICON);
-  icon_types.push_back(chrome::TOUCH_ICON);
+  icon_types.push_back(favicon_base::FAVICON);
+  icon_types.push_back(favicon_base::TOUCH_ICON);
 
   backend_->GetLargestFaviconForURL(page_url, icon_types, 16, &result);
 
   // Verify the result icon is 32x32 favicon.
   EXPECT_EQ(gfx::Size(32, 32), result.pixel_size);
-  EXPECT_EQ(chrome::FAVICON, result.icon_type);
+  EXPECT_EQ(favicon_base::FAVICON, result.icon_type);
 
   // Change minimal size to 32x32 and verify the 32x32 favicon returned.
-  chrome::FaviconBitmapResult result1;
+  favicon_base::FaviconBitmapResult result1;
   backend_->GetLargestFaviconForURL(page_url, icon_types, 32, &result1);
   EXPECT_EQ(gfx::Size(32, 32), result1.pixel_size);
-  EXPECT_EQ(chrome::FAVICON, result1.icon_type);
+  EXPECT_EQ(favicon_base::FAVICON, result1.icon_type);
 }
 
 // Test the favicon is returned if its size is smaller than minimal size,
@@ -2004,25 +2302,25 @@
   GURL page_url("http://www.google.com");
   GURL icon_url("http://www.google.com/favicon.ico");
 
-  std::vector<chrome::FaviconBitmapData> favicon_bitmap_data;
+  std::vector<favicon_base::FaviconBitmapData> favicon_bitmap_data;
   std::vector<gfx::Size> favicon_size;
   favicon_size.push_back(gfx::Size(16, 16));
   GenerateFaviconBitmapData(icon_url, favicon_size, &favicon_bitmap_data);
   ASSERT_EQ(1u, favicon_bitmap_data.size());
 
   // Set preexisting favicons for |page_url|.
-  backend_->SetFavicons(page_url, chrome::FAVICON, favicon_bitmap_data);
+  backend_->SetFavicons(page_url, favicon_base::FAVICON, favicon_bitmap_data);
 
-  chrome::FaviconBitmapResult result;
+  favicon_base::FaviconBitmapResult result;
   std::vector<int> icon_types;
-  icon_types.push_back(chrome::FAVICON);
-  icon_types.push_back(chrome::TOUCH_ICON);
+  icon_types.push_back(favicon_base::FAVICON);
+  icon_types.push_back(favicon_base::TOUCH_ICON);
 
   backend_->GetLargestFaviconForURL(page_url, icon_types, 32, &result);
 
   // Verify 16x16 icon is returned, even it small than minimal_size.
   EXPECT_EQ(gfx::Size(16, 16), result.pixel_size);
-  EXPECT_EQ(chrome::FAVICON, result.icon_type);
+  EXPECT_EQ(favicon_base::FAVICON, result.icon_type);
 }
 
 // Test UpdateFaviconMapingsAndFetch() when multiple icon types are passed in.
@@ -2035,27 +2333,28 @@
   GURL icon_urlc("http://www.google.com/favicon3.ico");
 
   // |page_url1| is mapped to |icon_urla| which if of type TOUCH_ICON.
-  std::vector<chrome::FaviconBitmapData> favicon_bitmap_data;
+  std::vector<favicon_base::FaviconBitmapData> favicon_bitmap_data;
   GenerateFaviconBitmapData(icon_urla, GetSizesSmall(), &favicon_bitmap_data);
-  backend_->SetFavicons(page_url1, chrome::TOUCH_ICON, favicon_bitmap_data);
+  backend_->SetFavicons(
+      page_url1, favicon_base::TOUCH_ICON, favicon_bitmap_data);
 
   // |page_url2| is mapped to |icon_urlb| and |icon_urlc| which are of type
   // TOUCH_PRECOMPOSED_ICON.
   GenerateFaviconBitmapData(icon_urlb, GetSizesSmall(), icon_urlc,
                             GetSizesSmall(), &favicon_bitmap_data);
   backend_->SetFavicons(
-      page_url2, chrome::TOUCH_PRECOMPOSED_ICON, favicon_bitmap_data);
+      page_url2, favicon_base::TOUCH_PRECOMPOSED_ICON, favicon_bitmap_data);
 
   std::vector<GURL> icon_urls;
   icon_urls.push_back(icon_urla);
   icon_urls.push_back(icon_urlb);
   icon_urls.push_back(icon_urlc);
 
-  std::vector<chrome::FaviconBitmapResult> bitmap_results;
+  std::vector<favicon_base::FaviconBitmapResult> bitmap_results;
   backend_->UpdateFaviconMappingsAndFetch(
       page_url3,
       icon_urls,
-      (chrome::TOUCH_ICON | chrome::TOUCH_PRECOMPOSED_ICON),
+      (favicon_base::TOUCH_ICON | favicon_base::TOUCH_PRECOMPOSED_ICON),
       kSmallSize.width(),
       GetScaleFactors1x2x(),
       &bitmap_results);
@@ -2066,15 +2365,15 @@
       &icon_mappings));
   EXPECT_EQ(1u, icon_mappings.size());
   EXPECT_EQ(icon_urla, icon_mappings[0].icon_url);
-  EXPECT_EQ(chrome::TOUCH_ICON, icon_mappings[0].icon_type);
+  EXPECT_EQ(favicon_base::TOUCH_ICON, icon_mappings[0].icon_type);
 
   icon_mappings.clear();
   EXPECT_TRUE(GetSortedIconMappingsForPageURL(page_url2, &icon_mappings));
   EXPECT_EQ(2u, icon_mappings.size());
   EXPECT_EQ(icon_urlb, icon_mappings[0].icon_url);
-  EXPECT_EQ(chrome::TOUCH_PRECOMPOSED_ICON, icon_mappings[0].icon_type);
+  EXPECT_EQ(favicon_base::TOUCH_PRECOMPOSED_ICON, icon_mappings[0].icon_type);
   EXPECT_EQ(icon_urlc, icon_mappings[1].icon_url);
-  EXPECT_EQ(chrome::TOUCH_PRECOMPOSED_ICON, icon_mappings[1].icon_type);
+  EXPECT_EQ(favicon_base::TOUCH_PRECOMPOSED_ICON, icon_mappings[1].icon_type);
 
   // |page_url3| should be mapped only to |icon_urlb| and |icon_urlc| as
   // TOUCH_PRECOMPOSED_ICON is the largest IconType.
@@ -2082,9 +2381,9 @@
   EXPECT_TRUE(GetSortedIconMappingsForPageURL(page_url3, &icon_mappings));
   EXPECT_EQ(2u, icon_mappings.size());
   EXPECT_EQ(icon_urlb, icon_mappings[0].icon_url);
-  EXPECT_EQ(chrome::TOUCH_PRECOMPOSED_ICON, icon_mappings[0].icon_type);
+  EXPECT_EQ(favicon_base::TOUCH_PRECOMPOSED_ICON, icon_mappings[0].icon_type);
   EXPECT_EQ(icon_urlc, icon_mappings[1].icon_url);
-  EXPECT_EQ(chrome::TOUCH_PRECOMPOSED_ICON, icon_mappings[1].icon_type);
+  EXPECT_EQ(favicon_base::TOUCH_PRECOMPOSED_ICON, icon_mappings[1].icon_type);
 }
 
 // Test the results of GetFaviconsFromDB() when there are no found
@@ -2092,9 +2391,12 @@
 TEST_F(HistoryBackendTest, GetFaviconsFromDBEmpty) {
   const GURL page_url("http://www.google.com/");
 
-  std::vector<chrome::FaviconBitmapResult> bitmap_results;
-  EXPECT_FALSE(backend_->GetFaviconsFromDB(page_url, chrome::FAVICON,
-      kSmallSize.width(), GetScaleFactors1x2x(), &bitmap_results));
+  std::vector<favicon_base::FaviconBitmapResult> bitmap_results;
+  EXPECT_FALSE(backend_->GetFaviconsFromDB(page_url,
+                                           favicon_base::FAVICON,
+                                           kSmallSize.width(),
+                                           GetScaleFactors1x2x(),
+                                           &bitmap_results));
   EXPECT_TRUE(bitmap_results.empty());
 }
 
@@ -2104,14 +2406,17 @@
   const GURL page_url("http://www.google.com/");
   const GURL icon_url("http://www.google.com/icon1");
 
-  chrome::FaviconID icon_id = backend_->thumbnail_db_->AddFavicon(
-      icon_url, chrome::FAVICON);
+  favicon_base::FaviconID icon_id =
+      backend_->thumbnail_db_->AddFavicon(icon_url, favicon_base::FAVICON);
   EXPECT_NE(0, icon_id);
   EXPECT_NE(0, backend_->thumbnail_db_->AddIconMapping(page_url, icon_id));
 
-  std::vector<chrome::FaviconBitmapResult> bitmap_results_out;
-  EXPECT_FALSE(backend_->GetFaviconsFromDB(page_url, chrome::FAVICON,
-      kSmallSize.width(), GetScaleFactors1x2x(), &bitmap_results_out));
+  std::vector<favicon_base::FaviconBitmapResult> bitmap_results_out;
+  EXPECT_FALSE(backend_->GetFaviconsFromDB(page_url,
+                                           favicon_base::FAVICON,
+                                           kSmallSize.width(),
+                                           GetScaleFactors1x2x(),
+                                           &bitmap_results_out));
   EXPECT_TRUE(bitmap_results_out.empty());
 }
 
@@ -2121,15 +2426,15 @@
   const GURL page_url("http://www.google.com/");
   const GURL icon_url("http://www.google.com/icon1");
 
-  std::vector<chrome::FaviconBitmapData> favicon_bitmap_data;
+  std::vector<favicon_base::FaviconBitmapData> favicon_bitmap_data;
   GenerateFaviconBitmapData(icon_url, GetSizesTinySmallAndLarge(),
                             &favicon_bitmap_data);
 
-  backend_->SetFavicons(page_url, chrome::FAVICON, favicon_bitmap_data);
+  backend_->SetFavicons(page_url, favicon_base::FAVICON, favicon_bitmap_data);
 
-  std::vector<chrome::FaviconBitmapResult> bitmap_results_out;
+  std::vector<favicon_base::FaviconBitmapResult> bitmap_results_out;
   EXPECT_TRUE(backend_->GetFaviconsFromDB(page_url,
-                                          chrome::FAVICON,
+                                          favicon_base::FAVICON,
                                           kSmallSize.width(),
                                           GetScaleFactors1x2x(),
                                           &bitmap_results_out));
@@ -2139,7 +2444,7 @@
   EXPECT_EQ(2u, bitmap_results_out.size());
   // No required order for results.
   if (bitmap_results_out[0].pixel_size == kLargeSize) {
-    chrome::FaviconBitmapResult tmp_result = bitmap_results_out[0];
+    favicon_base::FaviconBitmapResult tmp_result = bitmap_results_out[0];
     bitmap_results_out[0] = bitmap_results_out[1];
     bitmap_results_out[1] = tmp_result;
   }
@@ -2148,13 +2453,13 @@
   EXPECT_TRUE(BitmapDataEqual('b', bitmap_results_out[0].bitmap_data));
   EXPECT_EQ(kSmallSize, bitmap_results_out[0].pixel_size);
   EXPECT_EQ(icon_url, bitmap_results_out[0].icon_url);
-  EXPECT_EQ(chrome::FAVICON, bitmap_results_out[0].icon_type);
+  EXPECT_EQ(favicon_base::FAVICON, bitmap_results_out[0].icon_type);
 
   EXPECT_FALSE(bitmap_results_out[1].expired);
   EXPECT_TRUE(BitmapDataEqual('c', bitmap_results_out[1].bitmap_data));
   EXPECT_EQ(kLargeSize, bitmap_results_out[1].pixel_size);
   EXPECT_EQ(icon_url, bitmap_results_out[1].icon_url);
-  EXPECT_EQ(chrome::FAVICON, bitmap_results_out[1].icon_type);
+  EXPECT_EQ(favicon_base::FAVICON, bitmap_results_out[1].icon_type);
 }
 
 // Test that GetFaviconsFromDB() returns results from the icon URL whose
@@ -2165,15 +2470,15 @@
   const GURL icon_url1("http://www.google.com/icon1");
   const GURL icon_url2("http://www.google.com/icon2");
 
-  std::vector<chrome::FaviconBitmapData> favicon_bitmap_data;
+  std::vector<favicon_base::FaviconBitmapData> favicon_bitmap_data;
   GenerateFaviconBitmapData(icon_url1, GetSizesSmall(), icon_url2,
                             GetSizesLarge(), &favicon_bitmap_data);
 
-  backend_->SetFavicons(page_url, chrome::FAVICON, favicon_bitmap_data);
+  backend_->SetFavicons(page_url, favicon_base::FAVICON, favicon_bitmap_data);
 
-  std::vector<chrome::FaviconBitmapResult> bitmap_results_out;
+  std::vector<favicon_base::FaviconBitmapResult> bitmap_results_out;
   EXPECT_TRUE(backend_->GetFaviconsFromDB(page_url,
-                                          chrome::FAVICON,
+                                          favicon_base::FAVICON,
                                           kSmallSize.width(),
                                           GetScaleFactors1x2x(),
                                           &bitmap_results_out));
@@ -2192,27 +2497,34 @@
   const GURL icon_url1("http://www.google.com/icon1.png");
   const GURL icon_url2("http://www.google.com/icon2.png");
 
-  std::vector<chrome::FaviconBitmapData> favicon_bitmap_data;
+  std::vector<favicon_base::FaviconBitmapData> favicon_bitmap_data;
   GenerateFaviconBitmapData(icon_url1, GetSizesSmall(),  &favicon_bitmap_data);
-  backend_->SetFavicons(page_url, chrome::FAVICON, favicon_bitmap_data);
+  backend_->SetFavicons(page_url, favicon_base::FAVICON, favicon_bitmap_data);
 
   GenerateFaviconBitmapData(icon_url2, GetSizesSmall(), &favicon_bitmap_data);
-  backend_->SetFavicons(page_url, chrome::TOUCH_ICON, favicon_bitmap_data);
+  backend_->SetFavicons(
+      page_url, favicon_base::TOUCH_ICON, favicon_bitmap_data);
 
-  std::vector<chrome::FaviconBitmapResult> bitmap_results_out;
-  EXPECT_TRUE(backend_->GetFaviconsFromDB(page_url, chrome::FAVICON,
-      kSmallSize.width(), GetScaleFactors1x2x(), &bitmap_results_out));
+  std::vector<favicon_base::FaviconBitmapResult> bitmap_results_out;
+  EXPECT_TRUE(backend_->GetFaviconsFromDB(page_url,
+                                          favicon_base::FAVICON,
+                                          kSmallSize.width(),
+                                          GetScaleFactors1x2x(),
+                                          &bitmap_results_out));
 
   EXPECT_EQ(1u, bitmap_results_out.size());
-  EXPECT_EQ(chrome::FAVICON, bitmap_results_out[0].icon_type);
+  EXPECT_EQ(favicon_base::FAVICON, bitmap_results_out[0].icon_type);
   EXPECT_EQ(icon_url1, bitmap_results_out[0].icon_url);
 
   bitmap_results_out.clear();
-  EXPECT_TRUE(backend_->GetFaviconsFromDB(page_url, chrome::TOUCH_ICON,
-      kSmallSize.width(), GetScaleFactors1x2x(), &bitmap_results_out));
+  EXPECT_TRUE(backend_->GetFaviconsFromDB(page_url,
+                                          favicon_base::TOUCH_ICON,
+                                          kSmallSize.width(),
+                                          GetScaleFactors1x2x(),
+                                          &bitmap_results_out));
 
   EXPECT_EQ(1u, bitmap_results_out.size());
-  EXPECT_EQ(chrome::TOUCH_ICON, bitmap_results_out[0].icon_type);
+  EXPECT_EQ(favicon_base::TOUCH_ICON, bitmap_results_out[0].icon_type);
   EXPECT_EQ(icon_url2, bitmap_results_out[0].icon_url);
 }
 
@@ -2227,18 +2539,17 @@
   scoped_refptr<base::RefCountedBytes> bitmap_data(
       base::RefCountedBytes::TakeVector(&data));
   base::Time last_updated = base::Time::FromTimeT(0);
-  chrome::FaviconID icon_id =
-      backend_->thumbnail_db_->AddFavicon(icon_url,
-                                          chrome::FAVICON,
-                                          bitmap_data,
-                                          last_updated,
-                                          kSmallSize);
+  favicon_base::FaviconID icon_id = backend_->thumbnail_db_->AddFavicon(
+      icon_url, favicon_base::FAVICON, bitmap_data, last_updated, kSmallSize);
   EXPECT_NE(0, icon_id);
   EXPECT_NE(0, backend_->thumbnail_db_->AddIconMapping(page_url, icon_id));
 
-  std::vector<chrome::FaviconBitmapResult> bitmap_results_out;
-  EXPECT_TRUE(backend_->GetFaviconsFromDB(page_url, chrome::FAVICON,
-      kSmallSize.width(), GetScaleFactors1x2x(), &bitmap_results_out));
+  std::vector<favicon_base::FaviconBitmapResult> bitmap_results_out;
+  EXPECT_TRUE(backend_->GetFaviconsFromDB(page_url,
+                                          favicon_base::FAVICON,
+                                          kSmallSize.width(),
+                                          GetScaleFactors1x2x(),
+                                          &bitmap_results_out));
 
   EXPECT_EQ(1u, bitmap_results_out.size());
   EXPECT_TRUE(bitmap_results_out[0].expired);
@@ -2250,11 +2561,14 @@
   // Make the thumbnail database invalid.
   backend_->thumbnail_db_.reset();
 
-  std::vector<chrome::FaviconBitmapResult> bitmap_results;
+  std::vector<favicon_base::FaviconBitmapResult> bitmap_results;
 
-  backend_->UpdateFaviconMappingsAndFetch(
-      GURL(), std::vector<GURL>(), chrome::FAVICON, kSmallSize.width(),
-      GetScaleFactors1x2x(), &bitmap_results);
+  backend_->UpdateFaviconMappingsAndFetch(GURL(),
+                                          std::vector<GURL>(),
+                                          favicon_base::FAVICON,
+                                          kSmallSize.width(),
+                                          GetScaleFactors1x2x(),
+                                          &bitmap_results);
 
   EXPECT_TRUE(bitmap_results.empty());
 }
@@ -2266,30 +2580,45 @@
   const GURL icon_url("http://www.google.com/icon.png");
 
   // Add a favicon
-  std::vector<chrome::FaviconBitmapData> favicon_bitmap_data;
+  std::vector<favicon_base::FaviconBitmapData> favicon_bitmap_data;
   GenerateFaviconBitmapData(icon_url, GetSizesSmall(),  &favicon_bitmap_data);
-  backend_->SetFavicons(url, chrome::FAVICON, favicon_bitmap_data);
+  backend_->SetFavicons(url, favicon_base::FAVICON, favicon_bitmap_data);
   EXPECT_TRUE(backend_->thumbnail_db_->GetIconMappingsForPageURL(
-      url, chrome::FAVICON, NULL));
+      url, favicon_base::FAVICON, NULL));
 
   // Validate starting state.
-  std::vector<chrome::FaviconBitmapResult> bitmap_results_out;
-  EXPECT_TRUE(backend_->GetFaviconsFromDB(url, chrome::FAVICON,
-      kSmallSize.width(), GetScaleFactors1x2x(), &bitmap_results_out));
-  EXPECT_FALSE(backend_->GetFaviconsFromDB(same_domain_url, chrome::FAVICON,
-      kSmallSize.width(), GetScaleFactors1x2x(), &bitmap_results_out));
-  EXPECT_FALSE(backend_->GetFaviconsFromDB(foreign_domain_url, chrome::FAVICON,
-      kSmallSize.width(), GetScaleFactors1x2x(), &bitmap_results_out));
+  std::vector<favicon_base::FaviconBitmapResult> bitmap_results_out;
+  EXPECT_TRUE(backend_->GetFaviconsFromDB(url,
+                                          favicon_base::FAVICON,
+                                          kSmallSize.width(),
+                                          GetScaleFactors1x2x(),
+                                          &bitmap_results_out));
+  EXPECT_FALSE(backend_->GetFaviconsFromDB(same_domain_url,
+                                           favicon_base::FAVICON,
+                                           kSmallSize.width(),
+                                           GetScaleFactors1x2x(),
+                                           &bitmap_results_out));
+  EXPECT_FALSE(backend_->GetFaviconsFromDB(foreign_domain_url,
+                                           favicon_base::FAVICON,
+                                           kSmallSize.width(),
+                                           GetScaleFactors1x2x(),
+                                           &bitmap_results_out));
 
   // Same-domain cloning should work.
   backend_->CloneFavicons(url, same_domain_url);
-  EXPECT_TRUE(backend_->GetFaviconsFromDB(same_domain_url, chrome::FAVICON,
-      kSmallSize.width(), GetScaleFactors1x2x(), &bitmap_results_out));
+  EXPECT_TRUE(backend_->GetFaviconsFromDB(same_domain_url,
+                                          favicon_base::FAVICON,
+                                          kSmallSize.width(),
+                                          GetScaleFactors1x2x(),
+                                          &bitmap_results_out));
 
   // Foreign-domain cloning is forbidden.
   backend_->CloneFavicons(url, foreign_domain_url);
-  EXPECT_FALSE(backend_->GetFaviconsFromDB(foreign_domain_url, chrome::FAVICON,
-      kSmallSize.width(), GetScaleFactors1x2x(), &bitmap_results_out));
+  EXPECT_FALSE(backend_->GetFaviconsFromDB(foreign_domain_url,
+                                           favicon_base::FAVICON,
+                                           kSmallSize.width(),
+                                           GetScaleFactors1x2x(),
+                                           &bitmap_results_out));
 }
 
 TEST_F(HistoryBackendTest, QueryFilteredURLs) {
@@ -2548,7 +2877,7 @@
 
   // Copy history database file to current directory so that it will be deleted
   // in Teardown.
-  base::FilePath new_history_path(getTestDir());
+  base::FilePath new_history_path(test_dir());
   base::DeleteFile(new_history_path, true);
   base::CreateDirectory(new_history_path);
   base::FilePath new_history_file =
@@ -2821,7 +3150,7 @@
 TEST_F(HistoryBackendTest, DeleteFTSIndexDatabases) {
   ASSERT_TRUE(backend_.get());
 
-  base::FilePath history_path(getTestDir());
+  base::FilePath history_path(test_dir());
   base::FilePath db1(history_path.AppendASCII("History Index 2013-05"));
   base::FilePath db1_journal(db1.InsertBeforeExtensionASCII("-journal"));
   base::FilePath db1_wal(db1.InsertBeforeExtensionASCII("-wal"));
@@ -2848,4 +3177,217 @@
   EXPECT_TRUE(base::PathExists(db2_actual));  // Symlinks shouldn't be followed.
 }
 
+// Common implementation for the two tests below, given that the only difference
+// between them is the type of the notification sent out.
+void InMemoryHistoryBackendTest::TestAddingAndChangingURLRows(
+    int notification_type) {
+  const char kTestTypedURLAlternativeTitle[] = "Google Search Again";
+  const char kTestNonTypedURLAlternativeTitle[] = "Google News Again";
+
+  // Notify the in-memory database that a typed and non-typed URLRow (which were
+  // never before seen by the cache) have been modified.
+  URLRow row1(CreateTestTypedURL());
+  URLRow row2(CreateTestNonTypedURL());
+  SimulateNotification(notification_type, &row1, &row2);
+
+  // The in-memory database should only pick up the typed URL, and should ignore
+  // the non-typed one. The typed URL should retain the ID that was present in
+  // the notification.
+  URLRow cached_row1, cached_row2;
+  EXPECT_NE(0, mem_backend_->db()->GetRowForURL(row1.url(), &cached_row1));
+  EXPECT_EQ(0, mem_backend_->db()->GetRowForURL(row2.url(), &cached_row2));
+  EXPECT_EQ(row1.id(), cached_row1.id());
+
+  // Try changing attributes (other than typed_count) for existing URLRows.
+  row1.set_title(base::UTF8ToUTF16(kTestTypedURLAlternativeTitle));
+  row2.set_title(base::UTF8ToUTF16(kTestNonTypedURLAlternativeTitle));
+  SimulateNotification(notification_type, &row1, &row2);
+
+  // URLRows that are cached by the in-memory database should be updated.
+  EXPECT_NE(0, mem_backend_->db()->GetRowForURL(row1.url(), &cached_row1));
+  EXPECT_EQ(0, mem_backend_->db()->GetRowForURL(row2.url(), &cached_row2));
+  EXPECT_EQ(base::UTF8ToUTF16(kTestTypedURLAlternativeTitle),
+            cached_row1.title());
+
+  // Now decrease the typed count for the typed URLRow, and increase it for the
+  // previously non-typed URLRow.
+  row1.set_typed_count(0);
+  row2.set_typed_count(2);
+  SimulateNotification(notification_type, &row1, &row2);
+
+  // The in-memory database should stop caching the first URLRow, and start
+  // caching the second URLRow.
+  EXPECT_EQ(0, mem_backend_->db()->GetRowForURL(row1.url(), &cached_row1));
+  EXPECT_NE(0, mem_backend_->db()->GetRowForURL(row2.url(), &cached_row2));
+  EXPECT_EQ(row2.id(), cached_row2.id());
+  EXPECT_EQ(base::UTF8ToUTF16(kTestNonTypedURLAlternativeTitle),
+            cached_row2.title());
+}
+
+TEST_F(InMemoryHistoryBackendTest, OnURLsModified) {
+  TestAddingAndChangingURLRows(chrome::NOTIFICATION_HISTORY_URLS_MODIFIED);
+}
+
+TEST_F(InMemoryHistoryBackendTest, OnURLsVisisted) {
+  TestAddingAndChangingURLRows(chrome::NOTIFICATION_HISTORY_URL_VISITED);
+}
+
+TEST_F(InMemoryHistoryBackendTest, OnURLsDeletedPiecewise) {
+  // Add two typed and one non-typed URLRow to the in-memory database.
+  URLRow row1(CreateTestTypedURL());
+  URLRow row2(CreateAnotherTestTypedURL());
+  URLRow row3(CreateTestNonTypedURL());
+  SimulateNotification(chrome::NOTIFICATION_HISTORY_URLS_MODIFIED,
+                       &row1, &row2, &row3);
+
+  // Notify the in-memory database that the second typed URL and the non-typed
+  // URL has been deleted.
+  SimulateNotification(chrome::NOTIFICATION_HISTORY_URLS_DELETED,
+                       &row2, &row3);
+
+  // Expect that the first typed URL remains intact, the second typed URL is
+  // correctly removed, and the non-typed URL does not magically appear.
+  URLRow cached_row1;
+  EXPECT_NE(0, mem_backend_->db()->GetRowForURL(row1.url(), &cached_row1));
+  EXPECT_EQ(0, mem_backend_->db()->GetRowForURL(row2.url(), NULL));
+  EXPECT_EQ(0, mem_backend_->db()->GetRowForURL(row3.url(), NULL));
+  EXPECT_EQ(row1.id(), cached_row1.id());
+}
+
+TEST_F(InMemoryHistoryBackendTest, OnURLsDeletedEnMasse) {
+  // Add two typed and one non-typed URLRow to the in-memory database.
+  URLRow row1(CreateTestTypedURL());
+  URLRow row2(CreateAnotherTestTypedURL());
+  URLRow row3(CreateTestNonTypedURL());
+  SimulateNotification(chrome::NOTIFICATION_HISTORY_URLS_MODIFIED,
+                       &row1, &row2, &row3);
+
+  // Now notify the in-memory database that all history has been deleted.
+  scoped_ptr<URLsDeletedDetails> details(new URLsDeletedDetails());
+  details->all_history = true;
+  BroadcastNotifications(chrome::NOTIFICATION_HISTORY_URLS_DELETED,
+                         details.PassAs<HistoryDetails>());
+
+  // Expect that everything goes away.
+  EXPECT_EQ(0, mem_backend_->db()->GetRowForURL(row1.url(), NULL));
+  EXPECT_EQ(0, mem_backend_->db()->GetRowForURL(row2.url(), NULL));
+  EXPECT_EQ(0, mem_backend_->db()->GetRowForURL(row3.url(), NULL));
+}
+
+void InMemoryHistoryBackendTest::PopulateTestURLsAndSearchTerms(
+    URLRow* row1,
+    URLRow* row2,
+    const base::string16& term1,
+    const base::string16& term2) {
+  // Add a typed and a non-typed URLRow to the in-memory database. This time,
+  // though, do it through the history backend...
+  URLRows rows;
+  rows.push_back(*row1);
+  rows.push_back(*row2);
+  backend_->AddPagesWithDetails(rows, history::SOURCE_BROWSED);
+  backend_->db()->GetRowForURL(row1->url(), row1);  // Get effective IDs from
+  backend_->db()->GetRowForURL(row2->url(), row2);  // the database.
+
+  // ... so that we can also use that for adding the search terms. This way, we
+  // not only test that the notifications involved are handled correctly, but
+  // also that they are fired correctly (in the history backend).
+  backend_->SetKeywordSearchTermsForURL(row1->url(), kTestKeywordId, term1);
+  backend_->SetKeywordSearchTermsForURL(row2->url(), kTestKeywordId, term2);
+}
+
+TEST_F(InMemoryHistoryBackendTest, SetKeywordSearchTerms) {
+  URLRow row1(CreateTestTypedURL());
+  URLRow row2(CreateTestNonTypedURL());
+  base::string16 term1(base::UTF8ToUTF16(kTestSearchTerm1));
+  base::string16 term2(base::UTF8ToUTF16(kTestSearchTerm2));
+  PopulateTestURLsAndSearchTerms(&row1, &row2, term1, term2);
+
+  // Both URLs now have associated search terms, so the in-memory database
+  // should cache both of them, regardless whether they have been typed or not.
+  URLRow cached_row1, cached_row2;
+  EXPECT_NE(0, mem_backend_->db()->GetRowForURL(row1.url(), &cached_row1));
+  EXPECT_NE(0, mem_backend_->db()->GetRowForURL(row2.url(), &cached_row2));
+  EXPECT_EQ(row1.id(), cached_row1.id());
+  EXPECT_EQ(row2.id(), cached_row2.id());
+
+  // Verify that lookups will actually return both search terms; and also check
+  // at the low level that the rows are there.
+  EXPECT_EQ(1u, GetNumberOfMatchingSearchTerms(kTestKeywordId, term1));
+  EXPECT_EQ(1u, GetNumberOfMatchingSearchTerms(kTestKeywordId, term2));
+  EXPECT_TRUE(mem_backend_->db()->GetKeywordSearchTermRow(row1.id(), NULL));
+  EXPECT_TRUE(mem_backend_->db()->GetKeywordSearchTermRow(row2.id(), NULL));
+}
+
+TEST_F(InMemoryHistoryBackendTest, DeleteKeywordSearchTerms) {
+  URLRow row1(CreateTestTypedURL());
+  URLRow row2(CreateTestNonTypedURL());
+  base::string16 term1(base::UTF8ToUTF16(kTestSearchTerm1));
+  base::string16 term2(base::UTF8ToUTF16(kTestSearchTerm2));
+  PopulateTestURLsAndSearchTerms(&row1, &row2, term1, term2);
+
+  // Delete both search terms. This should be reflected in the in-memory DB.
+  backend_->DeleteKeywordSearchTermForURL(row1.url());
+  backend_->DeleteKeywordSearchTermForURL(row2.url());
+
+  // The typed URL should remain intact.
+  // Note: we do not need to guarantee anything about the non-typed URL.
+  URLRow cached_row1;
+  EXPECT_NE(0, mem_backend_->db()->GetRowForURL(row1.url(), &cached_row1));
+  EXPECT_EQ(row1.id(), cached_row1.id());
+
+  // Verify that the search terms are no longer returned as results, and also
+  // check at the low level that they are gone for good.
+  EXPECT_EQ(0u, GetNumberOfMatchingSearchTerms(kTestKeywordId, term1));
+  EXPECT_EQ(0u, GetNumberOfMatchingSearchTerms(kTestKeywordId, term2));
+  EXPECT_FALSE(mem_backend_->db()->GetKeywordSearchTermRow(row1.id(), NULL));
+  EXPECT_FALSE(mem_backend_->db()->GetKeywordSearchTermRow(row2.id(), NULL));
+}
+
+TEST_F(InMemoryHistoryBackendTest, DeleteAllSearchTermsForKeyword) {
+  URLRow row1(CreateTestTypedURL());
+  URLRow row2(CreateTestNonTypedURL());
+  base::string16 term1(base::UTF8ToUTF16(kTestSearchTerm1));
+  base::string16 term2(base::UTF8ToUTF16(kTestSearchTerm2));
+  PopulateTestURLsAndSearchTerms(&row1, &row2, term1, term2);
+
+  // Removing a keyword should cause all corresponding search terms to be
+  // deleted from the in-memory database (and also the main database).
+  TemplateURLID id = kTestKeywordId;
+  mem_backend_->Observe(chrome::NOTIFICATION_TEMPLATE_URL_REMOVED,
+                        content::Source<HistoryBackendTestBase>(NULL),
+                        content::Details<TemplateURLID>(&id));
+
+  // The typed URL should remain intact.
+  // Note: we do not need to guarantee anything about the non-typed URL.
+  URLRow cached_row1;
+  EXPECT_NE(0, mem_backend_->db()->GetRowForURL(row1.url(), &cached_row1));
+  EXPECT_EQ(row1.id(), cached_row1.id());
+
+  // Verify that the search terms are no longer returned as results, and also
+  // check at the low level that they are gone for good.
+  EXPECT_EQ(0u, GetNumberOfMatchingSearchTerms(kTestKeywordId, term1));
+  EXPECT_EQ(0u, GetNumberOfMatchingSearchTerms(kTestKeywordId, term2));
+  EXPECT_FALSE(mem_backend_->db()->GetKeywordSearchTermRow(row1.id(), NULL));
+  EXPECT_FALSE(mem_backend_->db()->GetKeywordSearchTermRow(row2.id(), NULL));
+}
+
+TEST_F(InMemoryHistoryBackendTest, OnURLsDeletedWithSearchTerms) {
+  URLRow row1(CreateTestTypedURL());
+  URLRow row2(CreateTestNonTypedURL());
+  base::string16 term1(base::UTF8ToUTF16(kTestSearchTerm1));
+  base::string16 term2(base::UTF8ToUTF16(kTestSearchTerm2));
+  PopulateTestURLsAndSearchTerms(&row1, &row2, term1, term2);
+
+  // Notify the in-memory database that the second typed URL has been deleted.
+  SimulateNotification(chrome::NOTIFICATION_HISTORY_URLS_DELETED, &row2);
+
+  // Verify that the second term is no longer returned as result, and also check
+  // at the low level that it is gone for good. The term corresponding to the
+  // first URLRow should not be affected.
+  EXPECT_EQ(1u, GetNumberOfMatchingSearchTerms(kTestKeywordId, term1));
+  EXPECT_EQ(0u, GetNumberOfMatchingSearchTerms(kTestKeywordId, term2));
+  EXPECT_TRUE(mem_backend_->db()->GetKeywordSearchTermRow(row1.id(), NULL));
+  EXPECT_FALSE(mem_backend_->db()->GetKeywordSearchTermRow(row2.id(), NULL));
+}
+
 }  // namespace history
diff --git a/chrome/browser/history/history_notifications.cc b/chrome/browser/history/history_notifications.cc
index d0d9be6..e20bab2 100644
--- a/chrome/browser/history/history_notifications.cc
+++ b/chrome/browser/history/history_notifications.cc
@@ -23,18 +23,18 @@
 URLsDeletedDetails::~URLsDeletedDetails() {}
 
 KeywordSearchUpdatedDetails::KeywordSearchUpdatedDetails(
-    const GURL& url,
+    const URLRow& url_row,
     TemplateURLID keyword_id,
     const base::string16& term)
-    : url(url),
+    : url_row(url_row),
       keyword_id(keyword_id),
       term(term) {
 }
 
 KeywordSearchUpdatedDetails::~KeywordSearchUpdatedDetails() {}
 
-KeywordSearchDeletedDetails::KeywordSearchDeletedDetails(const GURL& url)
-    : url(url) {
+KeywordSearchDeletedDetails::KeywordSearchDeletedDetails(URLID url_row_id)
+    : url_row_id(url_row_id) {
 }
 
 KeywordSearchDeletedDetails::~KeywordSearchDeletedDetails() {}
diff --git a/chrome/browser/history/history_notifications.h b/chrome/browser/history/history_notifications.h
index 29de877..6f1aec0 100644
--- a/chrome/browser/history/history_notifications.h
+++ b/chrome/browser/history/history_notifications.h
@@ -22,6 +22,9 @@
   virtual ~URLVisitedDetails();
 
   content::PageTransition transition;
+
+  // The affected URLRow. The ID will be set to the value that is currently in
+  // effect in the main history database.
   URLRow row;
 
   // A list of redirects leading up to the URL represented by this struct. If
@@ -36,7 +39,8 @@
   URLsModifiedDetails();
   virtual ~URLsModifiedDetails();
 
-  // Lists the information for each of the URLs affected.
+  // Lists the information for each of the URLs affected. The rows will have the
+  // IDs that are currently in effect in the main history database.
   URLRows changed_urls;
 };
 
@@ -53,7 +57,9 @@
   bool archived;
 
   // The URLRows of URLs deleted. This is valid only when |all_history| is false
-  // indicating that a subset of history has been deleted.
+  // indicating that a subset of history has been deleted. The rows will have
+  // the IDs that had been in effect before the deletion in the main history
+  // database.
   URLRows rows;
 
   // The list of deleted favicon urls. This is valid only when |all_history| is
@@ -63,22 +69,25 @@
 
 // Details for HISTORY_KEYWORD_SEARCH_TERM_UPDATED.
 struct KeywordSearchUpdatedDetails : public HistoryDetails {
-  KeywordSearchUpdatedDetails(const GURL& url,
+  KeywordSearchUpdatedDetails(const URLRow& url_row,
                               TemplateURLID keyword_id,
                               const base::string16& term);
   virtual ~KeywordSearchUpdatedDetails();
 
-  GURL url;
+  // The affected URLRow. The ID will be set to the value that is currently in
+  // effect in the main history database.
+  URLRow url_row;
   TemplateURLID keyword_id;
   base::string16 term;
 };
 
 // Details for HISTORY_KEYWORD_SEARCH_TERM_DELETED.
 struct KeywordSearchDeletedDetails : public HistoryDetails {
-  explicit KeywordSearchDeletedDetails(const GURL& url);
+  explicit KeywordSearchDeletedDetails(URLID url_row_id);
   virtual ~KeywordSearchDeletedDetails();
 
-  GURL url;
+  // The ID of the corresponding URLRow in the main history database.
+  URLID url_row_id;
 };
 
 }  // namespace history
diff --git a/chrome/browser/history/history_service.cc b/chrome/browser/history/history_service.cc
index dc77627..53d3f82 100644
--- a/chrome/browser/history/history_service.cc
+++ b/chrome/browser/history/history_service.cc
@@ -75,13 +75,12 @@
 
 void RunWithFaviconResults(
     const FaviconService::FaviconResultsCallback& callback,
-    std::vector<chrome::FaviconBitmapResult>* bitmap_results) {
+    std::vector<favicon_base::FaviconBitmapResult>* bitmap_results) {
   callback.Run(*bitmap_results);
 }
 
-void RunWithFaviconResult(
-    const FaviconService::FaviconRawCallback& callback,
-    chrome::FaviconBitmapResult* bitmap_result) {
+void RunWithFaviconResult(const FaviconService::FaviconRawCallback& callback,
+                          favicon_base::FaviconBitmapResult* bitmap_result) {
   callback.Run(*bitmap_result);
 }
 
@@ -564,8 +563,8 @@
     base::CancelableTaskTracker* tracker) {
   DCHECK(thread_checker_.CalledOnValidThread());
 
-  std::vector<chrome::FaviconBitmapResult>* results =
-      new std::vector<chrome::FaviconBitmapResult>();
+  std::vector<favicon_base::FaviconBitmapResult>* results =
+      new std::vector<favicon_base::FaviconBitmapResult>();
   return tracker->PostTaskAndReply(
       thread_->message_loop_proxy().get(),
       FROM_HERE,
@@ -588,8 +587,8 @@
     base::CancelableTaskTracker* tracker) {
   DCHECK(thread_checker_.CalledOnValidThread());
 
-  std::vector<chrome::FaviconBitmapResult>* results =
-      new std::vector<chrome::FaviconBitmapResult>();
+  std::vector<favicon_base::FaviconBitmapResult>* results =
+      new std::vector<favicon_base::FaviconBitmapResult>();
   return tracker->PostTaskAndReply(
       thread_->message_loop_proxy().get(),
       FROM_HERE,
@@ -611,7 +610,8 @@
     base::CancelableTaskTracker* tracker) {
   DCHECK(thread_checker_.CalledOnValidThread());
 
-  chrome::FaviconBitmapResult* result = new chrome::FaviconBitmapResult();
+  favicon_base::FaviconBitmapResult* result =
+      new favicon_base::FaviconBitmapResult();
   return tracker->PostTaskAndReply(
       thread_->message_loop_proxy().get(),
       FROM_HERE,
@@ -625,15 +625,15 @@
 }
 
 base::CancelableTaskTracker::TaskId HistoryService::GetFaviconForID(
-    chrome::FaviconID favicon_id,
+    favicon_base::FaviconID favicon_id,
     int desired_size_in_dip,
     ui::ScaleFactor desired_scale_factor,
     const FaviconService::FaviconResultsCallback& callback,
     base::CancelableTaskTracker* tracker) {
   DCHECK(thread_checker_.CalledOnValidThread());
 
-  std::vector<chrome::FaviconBitmapResult>* results =
-      new std::vector<chrome::FaviconBitmapResult>();
+  std::vector<favicon_base::FaviconBitmapResult>* results =
+      new std::vector<favicon_base::FaviconBitmapResult>();
   return tracker->PostTaskAndReply(
       thread_->message_loop_proxy().get(),
       FROM_HERE,
@@ -657,8 +657,8 @@
     base::CancelableTaskTracker* tracker) {
   DCHECK(thread_checker_.CalledOnValidThread());
 
-  std::vector<chrome::FaviconBitmapResult>* results =
-      new std::vector<chrome::FaviconBitmapResult>();
+  std::vector<favicon_base::FaviconBitmapResult>* results =
+      new std::vector<favicon_base::FaviconBitmapResult>();
   return tracker->PostTaskAndReply(
       thread_->message_loop_proxy().get(),
       FROM_HERE,
@@ -676,7 +676,7 @@
 void HistoryService::MergeFavicon(
     const GURL& page_url,
     const GURL& icon_url,
-    chrome::IconType icon_type,
+    favicon_base::IconType icon_type,
     scoped_refptr<base::RefCountedMemory> bitmap_data,
     const gfx::Size& pixel_size) {
   DCHECK(thread_checker_.CalledOnValidThread());
@@ -689,8 +689,8 @@
 
 void HistoryService::SetFavicons(
     const GURL& page_url,
-    chrome::IconType icon_type,
-    const std::vector<chrome::FaviconBitmapData>& favicon_bitmap_data) {
+    favicon_base::IconType icon_type,
+    const std::vector<favicon_base::FaviconBitmapData>& favicon_bitmap_data) {
   DCHECK(thread_checker_.CalledOnValidThread());
   if (!CanAddURL(page_url))
     return;
diff --git a/chrome/browser/history/history_service.h b/chrome/browser/history/history_service.h
index fec0c64..aaedce4 100644
--- a/chrome/browser/history/history_service.h
+++ b/chrome/browser/history/history_service.h
@@ -706,7 +706,7 @@
   // with |favicon_id| from the history backend. If |desired_size_in_dip| is 0,
   // the largest favicon bitmap for |favicon_id| is returned.
   base::CancelableTaskTracker::TaskId GetFaviconForID(
-      chrome::FaviconID favicon_id,
+      favicon_base::FaviconID favicon_id,
       int desired_size_in_dip,
       ui::ScaleFactor desired_scale_factor,
       const FaviconService::FaviconResultsCallback& callback,
@@ -762,7 +762,7 @@
   // TODO(pkotwicz): Remove once no longer required by sync.
   void MergeFavicon(const GURL& page_url,
                     const GURL& icon_url,
-                    chrome::IconType icon_type,
+                    favicon_base::IconType icon_type,
                     scoped_refptr<base::RefCountedMemory> bitmap_data,
                     const gfx::Size& pixel_size);
 
@@ -779,8 +779,8 @@
   // criteria for |favicon_bitmap_data| to be valid.
   void SetFavicons(
       const GURL& page_url,
-      chrome::IconType icon_type,
-      const std::vector<chrome::FaviconBitmapData>& favicon_bitmap_data);
+      favicon_base::IconType icon_type,
+      const std::vector<favicon_base::FaviconBitmapData>& favicon_bitmap_data);
 
   // Used by the FaviconService to mark the favicon for the page as being out
   // of date.
diff --git a/chrome/browser/history/history_types.cc b/chrome/browser/history/history_types.cc
index 283c55b..7136720 100644
--- a/chrome/browser/history/history_types.cc
+++ b/chrome/browser/history/history_types.cc
@@ -101,7 +101,7 @@
 }
 
 URLResult::URLResult(const GURL& url,
-                     const Snippet::MatchPositions& title_matches)
+                     const query_parser::Snippet::MatchPositions& title_matches)
     : URLRow(url) {
   title_match_positions_ = title_matches;
 }
@@ -392,10 +392,7 @@
 // IconMapping ----------------------------------------------------------------
 
 IconMapping::IconMapping()
-    : mapping_id(0),
-      icon_id(0),
-      icon_type(chrome::INVALID_ICON) {
-}
+    : mapping_id(0), icon_id(0), icon_type(favicon_base::INVALID_ICON) {}
 
 IconMapping::~IconMapping() {}
 
diff --git a/chrome/browser/history/history_types.h b/chrome/browser/history/history_types.h
index b760c32..a7eb39e 100644
--- a/chrome/browser/history/history_types.h
+++ b/chrome/browser/history/history_types.h
@@ -17,11 +17,11 @@
 #include "base/memory/scoped_vector.h"
 #include "base/strings/string16.h"
 #include "base/time/time.h"
-#include "chrome/browser/history/snippet.h"
 #include "chrome/browser/search_engines/template_url_id.h"
-#include "chrome/common/favicon/favicon_types.h"
 #include "chrome/common/ref_counted_util.h"
 #include "chrome/common/thumbnail_score.h"
+#include "components/favicon_base/favicon_types.h"
+#include "components/query_parser/snippet.h"
 #include "content/public/common/page_transition_types.h"
 #include "ui/gfx/image/image.h"
 #include "ui/gfx/size.h"
@@ -284,14 +284,15 @@
   URLResult(const GURL& url, base::Time visit_time);
   // Constructor that create a URLResult from the specified URL and title match
   // positions from title_matches.
-  URLResult(const GURL& url, const Snippet::MatchPositions& title_matches);
+  URLResult(const GURL& url,
+            const query_parser::Snippet::MatchPositions& title_matches);
   explicit URLResult(const URLRow& url_row);
   virtual ~URLResult();
 
   base::Time visit_time() const { return visit_time_; }
   void set_visit_time(base::Time visit_time) { visit_time_ = visit_time; }
 
-  const Snippet& snippet() const { return snippet_; }
+  const query_parser::Snippet& snippet() const { return snippet_; }
 
   bool blocked_visit() const { return blocked_visit_; }
   void set_blocked_visit(bool blocked_visit) {
@@ -301,7 +302,7 @@
   // If this is a title match, title_match_positions contains an entry for
   // every word in the title that matched one of the query parameters. Each
   // entry contains the start and end of the match.
-  const Snippet::MatchPositions& title_match_positions() const {
+  const query_parser::Snippet::MatchPositions& title_match_positions() const {
     return title_match_positions_;
   }
 
@@ -316,8 +317,8 @@
   base::Time visit_time_;
 
   // These values are typically set by HistoryBackend.
-  Snippet snippet_;
-  Snippet::MatchPositions title_match_positions_;
+  query_parser::Snippet snippet_;
+  query_parser::Snippet::MatchPositions title_match_positions_;
 
   // Whether a managed user was blocked when attempting to visit this URL.
   bool blocked_visit_;
@@ -684,13 +685,13 @@
   GURL page_url;
 
   // The unique id of the icon.
-  chrome::FaviconID icon_id;
+  favicon_base::FaviconID icon_id;
 
   // The url of the icon.
   GURL icon_url;
 
   // The type of icon.
-  chrome::IconType icon_type;
+  favicon_base::IconType icon_type;
 };
 
 // Defines a favicon bitmap and its associated pixel size.
@@ -714,7 +715,7 @@
   FaviconBitmapID bitmap_id;
 
   // The id of the favicon to which the bitmap belongs to.
-  chrome::FaviconID icon_id;
+  favicon_base::FaviconID icon_id;
 
   // Time at which |bitmap_data| was last updated.
   base::Time last_updated;
diff --git a/chrome/browser/history/in_memory_history_backend.cc b/chrome/browser/history/in_memory_history_backend.cc
index 83a7982..97d27df 100644
--- a/chrome/browser/history/in_memory_history_backend.cc
+++ b/chrome/browser/history/in_memory_history_backend.cc
@@ -51,8 +51,7 @@
   // We only want notifications for the associated profile.
   content::Source<Profile> source(profile_);
   registrar_.Add(this, chrome::NOTIFICATION_HISTORY_URL_VISITED, source);
-  registrar_.Add(this, chrome::NOTIFICATION_HISTORY_URLS_MODIFIED,
-                 source);
+  registrar_.Add(this, chrome::NOTIFICATION_HISTORY_URLS_MODIFIED, source);
   registrar_.Add(this, chrome::NOTIFICATION_HISTORY_URLS_DELETED, source);
   registrar_.Add(
       this, chrome::NOTIFICATION_HISTORY_KEYWORD_SEARCH_TERM_UPDATED, source);
@@ -66,38 +65,33 @@
     const content::NotificationSource& source,
     const content::NotificationDetails& details) {
   switch (type) {
-    case chrome::NOTIFICATION_HISTORY_URL_VISITED: {
-      content::Details<history::URLVisitedDetails> visited_details(details);
-      content::PageTransition primary_type =
-          content::PageTransitionStripQualifier(visited_details->transition);
-      if (visited_details->row.typed_count() > 0 ||
-          primary_type == content::PAGE_TRANSITION_KEYWORD ||
-          HasKeyword(visited_details->row.url())) {
-        URLsModifiedDetails modified_details;
-        modified_details.changed_urls.push_back(visited_details->row);
-        OnTypedURLsModified(modified_details);
-      }
+    case chrome::NOTIFICATION_HISTORY_URL_VISITED:
+      OnURLVisitedOrModified(content::Details<URLVisitedDetails>(details)->row);
       break;
-    }
     case chrome::NOTIFICATION_HISTORY_KEYWORD_SEARCH_TERM_UPDATED:
       OnKeywordSearchTermUpdated(
-          *content::Details<history::KeywordSearchUpdatedDetails>(
-              details).ptr());
+          *content::Details<KeywordSearchUpdatedDetails>(details).ptr());
       break;
     case chrome::NOTIFICATION_HISTORY_KEYWORD_SEARCH_TERM_DELETED:
       OnKeywordSearchTermDeleted(
-          *content::Details<history::KeywordSearchDeletedDetails>(
-              details).ptr());
+          *content::Details<KeywordSearchDeletedDetails>(details).ptr());
       break;
-    case chrome::NOTIFICATION_HISTORY_URLS_MODIFIED:
-      OnTypedURLsModified(
-          *content::Details<history::URLsModifiedDetails>(details).ptr());
+    case chrome::NOTIFICATION_HISTORY_URLS_MODIFIED: {
+      const URLsModifiedDetails* modified_details =
+          content::Details<URLsModifiedDetails>(details).ptr();
+      URLRows::const_iterator it;
+      for (it = modified_details->changed_urls.begin();
+           it != modified_details->changed_urls.end(); ++it) {
+        OnURLVisitedOrModified(*it);
+      }
       break;
+    }
     case chrome::NOTIFICATION_HISTORY_URLS_DELETED:
-      OnURLsDeleted(
-          *content::Details<history::URLsDeletedDetails>(details).ptr());
+      OnURLsDeleted(*content::Details<URLsDeletedDetails>(details).ptr());
       break;
     case chrome::NOTIFICATION_TEMPLATE_URL_REMOVED:
+      // For simplicity, this will not remove the corresponding URLRows, but
+      // this is okay, as the main database does not do so either.
       db_->DeleteAllSearchTermsForKeyword(
           *(content::Details<TemplateURLID>(details).ptr()));
       break;
@@ -108,26 +102,13 @@
   }
 }
 
-void InMemoryHistoryBackend::OnTypedURLsModified(
-    const URLsModifiedDetails& details) {
+void InMemoryHistoryBackend::OnURLVisitedOrModified(const URLRow& url_row) {
   DCHECK(db_);
-
-  // Add or update the URLs.
-  //
-  // TODO(brettw) currently the rows in the in-memory database don't match the
-  // IDs in the main database. This sucks. Instead of Add and Remove, we should
-  // have Sync(), which would take the ID if it's given and add it.
-  URLRows::const_iterator i;
-  for (i = details.changed_urls.begin();
-       i != details.changed_urls.end(); ++i) {
-    if (i->typed_count() > 0) {
-      URLID id = db_->GetRowForURL(i->url(), NULL);
-      if (id)
-        db_->UpdateURLRow(id, *i);
-      else
-        db_->AddURL(*i);
-    }
-  }
+  DCHECK(url_row.id());
+  if (url_row.typed_count() || db_->GetKeywordSearchTermRow(url_row.id(), NULL))
+    db_->InsertOrUpdateURLRowByID(url_row);
+  else
+    db_->DeleteURLRow(url_row.id());
 }
 
 void InMemoryHistoryBackend::OnURLsDeleted(const URLsDeletedDetails& details) {
@@ -145,48 +126,25 @@
   // Delete all matching URLs in our database.
   for (URLRows::const_iterator row = details.rows.begin();
        row != details.rows.end(); ++row) {
-    // We typically won't have most of them since we only have a subset of
-    // history, so ignore errors.
+    // This will also delete the corresponding keyword search term.
+    // Ignore errors, as we typically only cache a subset of URLRows.
     db_->DeleteURLRow(row->id());
   }
 }
 
 void InMemoryHistoryBackend::OnKeywordSearchTermUpdated(
     const KeywordSearchUpdatedDetails& details) {
-  // The url won't exist for new search terms (as the user hasn't typed it), so
-  // we force it to be added. If we end up adding a URL it won't be
-  // autocompleted as the typed count is 0.
-  URLRow url_row;
-  URLID url_id;
-  if (!db_->GetRowForURL(details.url, &url_row)) {
-    // Because this row won't have a typed count the title and other stuff
-    // doesn't matter. If the user ends up typing the url we'll update the title
-    // in OnTypedURLsModified.
-    URLRow new_row(details.url);
-    new_row.set_last_visit(base::Time::Now());
-    url_id = db_->AddURL(new_row);
-    if (!url_id)
-      return;  // Error adding.
-  } else {
-    url_id = url_row.id();
-  }
-
-  db_->SetKeywordSearchTermsForURL(url_id, details.keyword_id, details.term);
+  DCHECK(details.url_row.id());
+  db_->InsertOrUpdateURLRowByID(details.url_row);
+  db_->SetKeywordSearchTermsForURL(
+      details.url_row.id(), details.keyword_id, details.term);
 }
 
 void InMemoryHistoryBackend::OnKeywordSearchTermDeleted(
     const KeywordSearchDeletedDetails& details) {
-  URLID url_id = db_->GetRowForURL(details.url, NULL);
-  if (url_id)
-    db_->DeleteKeywordSearchTermForURL(url_id);
-}
-
-bool InMemoryHistoryBackend::HasKeyword(const GURL& url) {
-  URLID id = db_->GetRowForURL(url, NULL);
-  if (!id)
-    return false;
-
-  return db_->GetKeywordSearchTermRow(id, NULL);
+  // For simplicity, this will not remove the corresponding URLRow, but this is
+  // okay, as the main database does not do so either.
+  db_->DeleteKeywordSearchTermForURL(details.url_row_id);
 }
 
 }  // namespace history
diff --git a/chrome/browser/history/in_memory_history_backend.h b/chrome/browser/history/in_memory_history_backend.h
index 6a19c6d..3706993 100644
--- a/chrome/browser/history/in_memory_history_backend.h
+++ b/chrome/browser/history/in_memory_history_backend.h
@@ -2,13 +2,20 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// Contains the history backend wrapper around the in-memory URL database. This
-// object maintains an in-memory cache of the subset of history required to do
-// in-line autocomplete.
+// The InMemoryHistoryBackend is a wrapper around the in-memory URL database.
+// It maintains an in-memory cache of a subset of history that is required for
+// low-latency operations, such as in-line autocomplete.
 //
-// It is created on the history thread and passed to the main thread where
-// operations can be completed synchronously. It listens for notifications
-// from the "regular" history backend and keeps itself in sync.
+// The in-memory cache provides the following guarantees:
+//  (1.) It will always contain URLRows that either have a |typed_count| > 0; or
+//       that have a corresponding search term, in which case information about
+//       the search term is also stored.
+//  (2.) It will be an actual subset, i.e., it will contain verbatim data, and
+//       will never contain more data that can be found in the main database.
+//
+// The InMemoryHistoryBackend is created on the history thread and passed to the
+// main thread where operations can be completed synchronously. It listens for
+// notifications from the "regular" history backend and keeps itself in sync.
 
 #ifndef CHROME_BROWSER_HISTORY_IN_MEMORY_HISTORY_BACKEND_H_
 #define CHROME_BROWSER_HISTORY_IN_MEMORY_HISTORY_BACKEND_H_
@@ -21,7 +28,6 @@
 #include "content/public/browser/notification_observer.h"
 #include "content/public/browser/notification_registrar.h"
 
-class GURL;
 class Profile;
 
 namespace base {
@@ -31,10 +37,10 @@
 namespace history {
 
 class InMemoryDatabase;
-class InMemoryURLIndex;
 struct KeywordSearchUpdatedDetails;
 struct KeywordSearchDeletedDetails;
 class URLDatabase;
+class URLRow;
 struct URLsDeletedDetails;
 struct URLsModifiedDetails;
 
@@ -68,10 +74,10 @@
  private:
   FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, DeleteAll);
 
-  // Handler for NOTIFY_HISTORY_TYPED_URLS_MODIFIED.
-  void OnTypedURLsModified(const URLsModifiedDetails& details);
+  // Handler for HISTORY_URL_VISITED and HISTORY_URLS_MODIFIED.
+  void OnURLVisitedOrModified(const URLRow& url_row);
 
-  // Handler for NOTIFY_HISTORY_URLS_DELETED.
+  // Handler for HISTORY_URLS_DELETED.
   void OnURLsDeleted(const URLsDeletedDetails& details);
 
   // Handler for HISTORY_KEYWORD_SEARCH_TERM_UPDATED.
@@ -80,9 +86,6 @@
   // Handler for HISTORY_KEYWORD_SEARCH_TERM_DELETED.
   void OnKeywordSearchTermDeleted(const KeywordSearchDeletedDetails& details);
 
-  // Returns true if there is a keyword associated with the specified url.
-  bool HasKeyword(const GURL& url);
-
   content::NotificationRegistrar registrar_;
 
   scoped_ptr<InMemoryDatabase> db_;
diff --git a/chrome/browser/history/in_memory_url_index.cc b/chrome/browser/history/in_memory_url_index.cc
index 54235bb..6173ac3 100644
--- a/chrome/browser/history/in_memory_url_index.cc
+++ b/chrome/browser/history/in_memory_url_index.cc
@@ -9,7 +9,6 @@
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/bookmarks/bookmark_model.h"
 #include "chrome/browser/bookmarks/bookmark_model_factory.h"
-#include "chrome/browser/bookmarks/bookmark_service.h"
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/history/history_notifications.h"
 #include "chrome/browser/history/history_service.h"
diff --git a/chrome/browser/history/in_memory_url_index_types.h b/chrome/browser/history/in_memory_url_index_types.h
index 91ef29f..d8a0243 100644
--- a/chrome/browser/history/in_memory_url_index_types.h
+++ b/chrome/browser/history/in_memory_url_index_types.h
@@ -38,21 +38,6 @@
 };
 typedef std::vector<TermMatch> TermMatches;
 
-// Truncates an overly-long URL, unescapes it, and lower-cases it,
-// returning the result.  This unescaping makes it possible to match
-// substrings that were originally escaped for navigation; for
-// example, if the user searched for "a&p", the query would be escaped
-// as "a%26p", so without unescaping, an input string of "a&p" would
-// no longer match this URL.  Note that the resulting unescaped URL
-// may not be directly navigable (which is why we escaped it to begin
-// with).  |languages| is passed to net::FormatUrl().
-base::string16 CleanUpUrlForMatching(const GURL& gurl,
-                                     const std::string& languages);
-
-// Returns the lower-cased title, possibly truncated if the original title
-// is overly-long.
-base::string16 CleanUpTitleForMatching(const base::string16& title);
-
 // Returns a TermMatches which has an entry for each occurrence of the
 // string |term| found in the string |cleaned_string|. Use
 // CleanUpUrlForMatching() or CleanUpUrlTitleMatching() before passing
diff --git a/chrome/browser/history/in_memory_url_index_unittest.cc b/chrome/browser/history/in_memory_url_index_unittest.cc
index 9dc79ef..29fed9b 100644
--- a/chrome/browser/history/in_memory_url_index_unittest.cc
+++ b/chrome/browser/history/in_memory_url_index_unittest.cc
@@ -442,13 +442,7 @@
   EXPECT_EQ(17U, private_data.word_map_.size());
 }
 
-#if defined(OS_WIN)
-// Flaky on windows trybots: http://crbug.com/351500
-#define MAYBE_Retrieval DISABLED_Retrieval
-#else
-#define MAYBE_Retrieval Retrieval
-#endif
-TEST_F(InMemoryURLIndexTest, MAYBE_Retrieval) {
+TEST_F(InMemoryURLIndexTest, Retrieval) {
   // See if a very specific term gives a single result.
   ScoredHistoryMatches matches = url_index_->HistoryItemsForTerms(
       ASCIIToUTF16("DrudgeReport"), base::string16::npos);
@@ -674,13 +668,7 @@
             private_data.post_scoring_item_count_);
 }
 
-#if defined(OS_WIN)
-// Flaky on windows trybots: http://crbug.com/351500
-#define MAYBE_TitleSearch DISABLED_TitleSearch
-#else
-#define MAYBE_TitleSearch TitleSearch
-#endif
-TEST_F(InMemoryURLIndexTest, MAYBE_TitleSearch) {
+TEST_F(InMemoryURLIndexTest, TitleSearch) {
   // Signal if someone has changed the test DB.
   EXPECT_EQ(29U, GetPrivateData()->history_info_map_.size());
 
@@ -1099,7 +1087,8 @@
   // Overwrite the build time so that we'll think the data is too old
   // and rebuild the cache from history.
   const base::Time fake_rebuild_time =
-      base::Time::Now() - base::TimeDelta::FromDays(30);
+      private_data.last_time_rebuilt_from_history_ -
+      base::TimeDelta::FromDays(30);
   private_data.last_time_rebuilt_from_history_ = fake_rebuild_time;
 
   // Capture the current private data for later comparison to restored data.
diff --git a/chrome/browser/history/query_parser.cc b/chrome/browser/history/query_parser.cc
deleted file mode 100644
index 457a6fb..0000000
--- a/chrome/browser/history/query_parser.cc
+++ /dev/null
@@ -1,473 +0,0 @@
-// Copyright (c) 2011 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 "chrome/browser/history/query_parser.h"
-
-#include <algorithm>
-
-#include "base/compiler_specific.h"
-#include "base/i18n/break_iterator.h"
-#include "base/i18n/case_conversion.h"
-#include "base/logging.h"
-#include "base/stl_util.h"
-#include "base/strings/utf_string_conversions.h"
-
-namespace {
-
-// Returns true if |mp1.first| is less than |mp2.first|. This is used to
-// sort match positions.
-int CompareMatchPosition(const Snippet::MatchPosition& mp1,
-                         const Snippet::MatchPosition& mp2) {
-  return mp1.first < mp2.first;
-}
-
-// Returns true if |mp2| intersects |mp1|. This is intended for use by
-// CoalesceMatchesFrom and isn't meant as a general intersection comparison
-// function.
-bool SnippetIntersects(const Snippet::MatchPosition& mp1,
-                       const Snippet::MatchPosition& mp2) {
-  return mp2.first >= mp1.first && mp2.first <= mp1.second;
-}
-
-// Coalesces match positions in |matches| after index that intersect the match
-// position at |index|.
-void CoalesceMatchesFrom(size_t index, Snippet::MatchPositions* matches) {
-  Snippet::MatchPosition& mp = (*matches)[index];
-  for (Snippet::MatchPositions::iterator i = matches->begin() + index + 1;
-       i != matches->end(); ) {
-    if (SnippetIntersects(mp, *i)) {
-      mp.second = std::max(mp.second, i->second);
-      i = matches->erase(i);
-    } else {
-      return;
-    }
-  }
-}
-
-// Sorts the match positions in |matches| by their first index, then coalesces
-// any match positions that intersect each other.
-void CoalseAndSortMatchPositions(Snippet::MatchPositions* matches) {
-  std::sort(matches->begin(), matches->end(), &CompareMatchPosition);
-  // WARNING: we don't use iterator here as CoalesceMatchesFrom may remove
-  // from matches.
-  for (size_t i = 0; i < matches->size(); ++i)
-    CoalesceMatchesFrom(i, matches);
-}
-
-// Returns true if the character is considered a quote.
-bool IsQueryQuote(wchar_t ch) {
-  return ch == '"' ||
-         ch == 0xab ||    // left pointing double angle bracket
-         ch == 0xbb ||    // right pointing double angle bracket
-         ch == 0x201c ||  // left double quotation mark
-         ch == 0x201d ||  // right double quotation mark
-         ch == 0x201e;    // double low-9 quotation mark
-}
-
-}  // namespace
-
-// Inheritance structure:
-// Queries are represented as trees of QueryNodes.
-// QueryNodes are either a collection of subnodes (a QueryNodeList)
-// or a single word (a QueryNodeWord).
-
-// A QueryNodeWord is a single word in the query.
-class QueryNodeWord : public QueryNode {
- public:
-  explicit QueryNodeWord(const base::string16& word);
-  virtual ~QueryNodeWord();
-
-  const base::string16& word() const { return word_; }
-
-  void set_literal(bool literal) { literal_ = literal; }
-
-  // QueryNode:
-  virtual int AppendToSQLiteQuery(base::string16* query) const OVERRIDE;
-  virtual bool IsWord() const OVERRIDE;
-  virtual bool Matches(const base::string16& word, bool exact) const OVERRIDE;
-  virtual bool HasMatchIn(
-      const std::vector<QueryWord>& words,
-      Snippet::MatchPositions* match_positions) const OVERRIDE;
-  virtual bool HasMatchIn(
-      const std::vector<QueryWord>& words) const OVERRIDE;
-  virtual void AppendWords(std::vector<base::string16>* words) const OVERRIDE;
-
- private:
-  base::string16 word_;
-  bool literal_;
-
-  DISALLOW_COPY_AND_ASSIGN(QueryNodeWord);
-};
-
-QueryNodeWord::QueryNodeWord(const base::string16& word)
-    : word_(word),
-      literal_(false) {}
-
-QueryNodeWord::~QueryNodeWord() {}
-
-int QueryNodeWord::AppendToSQLiteQuery(base::string16* query) const {
-  query->append(word_);
-
-  // Use prefix search if we're not literal and long enough.
-  if (!literal_ && QueryParser::IsWordLongEnoughForPrefixSearch(word_))
-    *query += L'*';
-  return 1;
-}
-
-bool QueryNodeWord::IsWord() const {
-  return true;
-}
-
-bool QueryNodeWord::Matches(const base::string16& word, bool exact) const {
-  if (exact || !QueryParser::IsWordLongEnoughForPrefixSearch(word_))
-    return word == word_;
-  return word.size() >= word_.size() &&
-         (word_.compare(0, word_.size(), word, 0, word_.size()) == 0);
-}
-
-bool QueryNodeWord::HasMatchIn(const std::vector<QueryWord>& words,
-                               Snippet::MatchPositions* match_positions) const {
-  bool matched = false;
-  for (size_t i = 0; i < words.size(); ++i) {
-    if (Matches(words[i].word, false)) {
-      size_t match_start = words[i].position;
-      match_positions->push_back(
-          Snippet::MatchPosition(match_start,
-                                 match_start + static_cast<int>(word_.size())));
-      matched = true;
-    }
-  }
-  return matched;
-}
-
-bool QueryNodeWord::HasMatchIn(const std::vector<QueryWord>& words) const {
-  for (size_t i = 0; i < words.size(); ++i) {
-    if (Matches(words[i].word, false))
-      return true;
-  }
-  return false;
-}
-
-void QueryNodeWord::AppendWords(std::vector<base::string16>* words) const {
-  words->push_back(word_);
-}
-
-// A QueryNodeList has a collection of QueryNodes which are deleted in the end.
-class QueryNodeList : public QueryNode {
- public:
-  typedef std::vector<QueryNode*> QueryNodeVector;
-
-  QueryNodeList();
-  virtual ~QueryNodeList();
-
-  QueryNodeVector* children() { return &children_; }
-
-  void AddChild(QueryNode* node);
-
-  // Remove empty subnodes left over from other parsing.
-  void RemoveEmptySubnodes();
-
-  // QueryNode:
-  virtual int AppendToSQLiteQuery(base::string16* query) const OVERRIDE;
-  virtual bool IsWord() const OVERRIDE;
-  virtual bool Matches(const base::string16& word, bool exact) const OVERRIDE;
-  virtual bool HasMatchIn(
-      const std::vector<QueryWord>& words,
-      Snippet::MatchPositions* match_positions) const OVERRIDE;
-  virtual bool HasMatchIn(
-      const std::vector<QueryWord>& words) const OVERRIDE;
-  virtual void AppendWords(std::vector<base::string16>* words) const OVERRIDE;
-
- protected:
-  int AppendChildrenToString(base::string16* query) const;
-
-  QueryNodeVector children_;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(QueryNodeList);
-};
-
-QueryNodeList::QueryNodeList() {}
-
-QueryNodeList::~QueryNodeList() {
-  STLDeleteElements(&children_);
-}
-
-void QueryNodeList::AddChild(QueryNode* node) {
-  children_.push_back(node);
-}
-
-void QueryNodeList::RemoveEmptySubnodes() {
-  for (size_t i = 0; i < children_.size(); ++i) {
-    if (children_[i]->IsWord())
-      continue;
-
-    QueryNodeList* list_node = static_cast<QueryNodeList*>(children_[i]);
-    list_node->RemoveEmptySubnodes();
-    if (list_node->children()->empty()) {
-      children_.erase(children_.begin() + i);
-      --i;
-      delete list_node;
-    }
-  }
-}
-
-int QueryNodeList::AppendToSQLiteQuery(base::string16* query) const {
-  return AppendChildrenToString(query);
-}
-
-bool QueryNodeList::IsWord() const {
-  return false;
-}
-
-bool QueryNodeList::Matches(const base::string16& word, bool exact) const {
-  NOTREACHED();
-  return false;
-}
-
-bool QueryNodeList::HasMatchIn(const std::vector<QueryWord>& words,
-                               Snippet::MatchPositions* match_positions) const {
-  NOTREACHED();
-  return false;
-}
-
-bool QueryNodeList::HasMatchIn(const std::vector<QueryWord>& words) const {
-  NOTREACHED();
-  return false;
-}
-
-void QueryNodeList::AppendWords(std::vector<base::string16>* words) const {
-  for (size_t i = 0; i < children_.size(); ++i)
-    children_[i]->AppendWords(words);
-}
-
-int QueryNodeList::AppendChildrenToString(base::string16* query) const {
-  int num_words = 0;
-  for (QueryNodeVector::const_iterator node = children_.begin();
-       node != children_.end(); ++node) {
-    if (node != children_.begin())
-      query->push_back(L' ');
-    num_words += (*node)->AppendToSQLiteQuery(query);
-  }
-  return num_words;
-}
-
-// A QueryNodePhrase is a phrase query ("quoted").
-class QueryNodePhrase : public QueryNodeList {
- public:
-  QueryNodePhrase();
-  virtual ~QueryNodePhrase();
-
-  // QueryNodeList:
-  virtual int AppendToSQLiteQuery(base::string16* query) const OVERRIDE;
-  virtual bool HasMatchIn(
-      const std::vector<QueryWord>& words,
-      Snippet::MatchPositions* match_positions) const OVERRIDE;
-  virtual bool HasMatchIn(
-      const std::vector<QueryWord>& words) const OVERRIDE;
-
- private:
-  bool MatchesAll(const std::vector<QueryWord>& words,
-                  const QueryWord** first_word,
-                  const QueryWord** last_word) const;
-  DISALLOW_COPY_AND_ASSIGN(QueryNodePhrase);
-};
-
-QueryNodePhrase::QueryNodePhrase() {}
-
-QueryNodePhrase::~QueryNodePhrase() {}
-
-int QueryNodePhrase::AppendToSQLiteQuery(base::string16* query) const {
-  query->push_back(L'"');
-  int num_words = AppendChildrenToString(query);
-  query->push_back(L'"');
-  return num_words;
-}
-
-bool QueryNodePhrase::MatchesAll(const std::vector<QueryWord>& words,
-                                 const QueryWord** first_word,
-                                 const QueryWord** last_word) const {
-  if (words.size() < children_.size())
-    return false;
-
-  for (size_t i = 0, max = words.size() - children_.size() + 1; i < max; ++i) {
-    bool matched_all = true;
-    for (size_t j = 0; j < children_.size(); ++j) {
-      if (!children_[j]->Matches(words[i + j].word, true)) {
-        matched_all = false;
-        break;
-      }
-    }
-    if (matched_all) {
-      *first_word = &words[i];
-      *last_word = &words[i + children_.size() - 1];
-      return true;
-    }
-  }
-  return false;
-}
-
-bool QueryNodePhrase::HasMatchIn(
-    const std::vector<QueryWord>& words,
-    Snippet::MatchPositions* match_positions) const {
-  const QueryWord* first_word;
-  const QueryWord* last_word;
-
-  if (MatchesAll(words, &first_word, &last_word)) {
-    match_positions->push_back(
-        Snippet::MatchPosition(first_word->position,
-                               last_word->position + last_word->word.length()));
-      return true;
-  }
-  return false;
-}
-
-bool QueryNodePhrase::HasMatchIn(const std::vector<QueryWord>& words) const {
-  const QueryWord* first_word;
-  const QueryWord* last_word;
-  return MatchesAll(words, &first_word, &last_word);
-}
-
-QueryParser::QueryParser() {}
-
-// static
-bool QueryParser::IsWordLongEnoughForPrefixSearch(const base::string16& word) {
-  DCHECK(!word.empty());
-  size_t minimum_length = 3;
-  // We intentionally exclude Hangul Jamos (both Conjoining and compatibility)
-  // because they 'behave like' Latin letters. Moreover, we should
-  // normalize the former before reaching here.
-  if (0xAC00 <= word[0] && word[0] <= 0xD7A3)
-    minimum_length = 2;
-  return word.size() >= minimum_length;
-}
-
-int QueryParser::ParseQuery(const base::string16& query,
-                            base::string16* sqlite_query) {
-  QueryNodeList root;
-  if (!ParseQueryImpl(query, &root))
-    return 0;
-  return root.AppendToSQLiteQuery(sqlite_query);
-}
-
-void QueryParser::ParseQueryWords(const base::string16& query,
-                                  std::vector<base::string16>* words) {
-  QueryNodeList root;
-  if (!ParseQueryImpl(query, &root))
-    return;
-  root.AppendWords(words);
-}
-
-void QueryParser::ParseQueryNodes(const base::string16& query,
-                                  std::vector<QueryNode*>* nodes) {
-  QueryNodeList root;
-  if (ParseQueryImpl(base::i18n::ToLower(query), &root))
-    nodes->swap(*root.children());
-}
-
-bool QueryParser::DoesQueryMatch(const base::string16& text,
-                                 const std::vector<QueryNode*>& query_nodes,
-                                 Snippet::MatchPositions* match_positions) {
-  if (query_nodes.empty())
-    return false;
-
-  std::vector<QueryWord> query_words;
-  base::string16 lower_text = base::i18n::ToLower(text);
-  ExtractQueryWords(lower_text, &query_words);
-
-  if (query_words.empty())
-    return false;
-
-  Snippet::MatchPositions matches;
-  for (size_t i = 0; i < query_nodes.size(); ++i) {
-    if (!query_nodes[i]->HasMatchIn(query_words, &matches))
-      return false;
-  }
-  if (lower_text.length() != text.length()) {
-    // The lower case string differs from the original string. The matches are
-    // meaningless.
-    // TODO(sky): we need a better way to align the positions so that we don't
-    // completely punt here.
-    match_positions->clear();
-  } else {
-    CoalseAndSortMatchPositions(&matches);
-    match_positions->swap(matches);
-  }
-  return true;
-}
-
-bool QueryParser::DoesQueryMatch(const std::vector<QueryWord>& query_words,
-                                 const std::vector<QueryNode*>& query_nodes) {
-  if (query_nodes.empty() || query_words.empty())
-    return false;
-
-  for (size_t i = 0; i < query_nodes.size(); ++i) {
-    if (!query_nodes[i]->HasMatchIn(query_words))
-      return false;
-  }
-  return true;
-}
-
-bool QueryParser::ParseQueryImpl(const base::string16& query,
-                                 QueryNodeList* root) {
-  base::i18n::BreakIterator iter(query, base::i18n::BreakIterator::BREAK_WORD);
-  // TODO(evanm): support a locale here
-  if (!iter.Init())
-    return false;
-
-  // To handle nesting, we maintain a stack of QueryNodeLists.
-  // The last element (back) of the stack contains the current, deepest node.
-  std::vector<QueryNodeList*> query_stack;
-  query_stack.push_back(root);
-
-  bool in_quotes = false;  // whether we're currently in a quoted phrase
-  while (iter.Advance()) {
-    // Just found a span between 'prev' (inclusive) and 'pos' (exclusive). It
-    // is not necessarily a word, but could also be a sequence of punctuation
-    // or whitespace.
-    if (iter.IsWord()) {
-      QueryNodeWord* word_node = new QueryNodeWord(iter.GetString());
-      if (in_quotes)
-        word_node->set_literal(true);
-      query_stack.back()->AddChild(word_node);
-    } else {  // Punctuation.
-      if (IsQueryQuote(query[iter.prev()])) {
-        if (!in_quotes) {
-          QueryNodeList* quotes_node = new QueryNodePhrase;
-          query_stack.back()->AddChild(quotes_node);
-          query_stack.push_back(quotes_node);
-          in_quotes = true;
-        } else {
-          query_stack.pop_back();  // Stop adding to the quoted phrase.
-          in_quotes = false;
-        }
-      }
-    }
-  }
-
-  root->RemoveEmptySubnodes();
-  return true;
-}
-
-void QueryParser::ExtractQueryWords(const base::string16& text,
-                                    std::vector<QueryWord>* words) {
-  base::i18n::BreakIterator iter(text, base::i18n::BreakIterator::BREAK_WORD);
-  // TODO(evanm): support a locale here
-  if (!iter.Init())
-    return;
-
-  while (iter.Advance()) {
-    // Just found a span between 'prev' (inclusive) and 'pos' (exclusive). It
-    // is not necessarily a word, but could also be a sequence of punctuation
-    // or whitespace.
-    if (iter.IsWord()) {
-      base::string16 word = iter.GetString();
-      if (!word.empty()) {
-        words->push_back(QueryWord());
-        words->back().word = word;
-        words->back().position = iter.prev();
-      }
-    }
-  }
-}
diff --git a/chrome/browser/history/query_parser.h b/chrome/browser/history/query_parser.h
deleted file mode 100644
index 69d31db..0000000
--- a/chrome/browser/history/query_parser.h
+++ /dev/null
@@ -1,112 +0,0 @@
-// Copyright (c) 2011 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 CHROME_BROWSER_HISTORY_QUERY_PARSER_H_
-#define CHROME_BROWSER_HISTORY_QUERY_PARSER_H_
-
-#include <vector>
-
-#include "base/basictypes.h"
-#include "base/strings/string16.h"
-#include "chrome/browser/history/snippet.h"
-
-class QueryNodeList;
-
-// Used by HasMatchIn.
-struct QueryWord {
-  // The work to match against.
-  base::string16 word;
-
-  // The starting position of the word in the original text.
-  size_t position;
-};
-
-// QueryNode is used by QueryParser to represent the elements that constitute a
-// query. While QueryNode is exposed by way of ParseQuery, it really isn't meant
-// for external usage.
-class QueryNode {
- public:
-  virtual ~QueryNode() {}
-
-  // Serialize ourselves out to a string that can be passed to SQLite. Returns
-  // the number of words in this node.
-  virtual int AppendToSQLiteQuery(base::string16* query) const = 0;
-
-  // Return true if this is a QueryNodeWord, false if it's a QueryNodeList.
-  virtual bool IsWord() const = 0;
-
-  // Returns true if this node matches |word|. If |exact| is true, the string
-  // must exactly match. Otherwise, this uses a starts with comparison.
-  virtual bool Matches(const base::string16& word, bool exact) const = 0;
-
-  // Returns true if this node matches at least one of the words in |words|. An
-  // entry is added to |match_positions| for all matching words giving the
-  // matching regions.
-  virtual bool HasMatchIn(const std::vector<QueryWord>& words,
-                          Snippet::MatchPositions* match_positions) const = 0;
-
-  // Returns true if this node matches at least one of the words in |words|.
-  virtual bool HasMatchIn(const std::vector<QueryWord>& words) const = 0;
-
-  // Appends the words that make up this node in |words|.
-  virtual void AppendWords(std::vector<base::string16>* words) const = 0;
-};
-
-// This class is used to parse queries entered into the history search into more
-// normalized queries that can be passed to the SQLite backend.
-class QueryParser {
- public:
-  QueryParser();
-
-  // For CJK ideographs and Korean Hangul, even a single character
-  // can be useful in prefix matching, but that may give us too many
-  // false positives. Moreover, the current ICU word breaker gives us
-  // back every single Chinese character as a word so that there's no
-  // point doing anything for them and we only adjust the minimum length
-  // to 2 for Korean Hangul while using 3 for others. This is a temporary
-  // hack until we have a segmentation support.
-  static bool IsWordLongEnoughForPrefixSearch(const base::string16& word);
-
-  // Parse a query into a SQLite query. The resulting query is placed in
-  // |sqlite_query| and the number of words is returned.
-  int ParseQuery(const base::string16& query, base::string16* sqlite_query);
-
-  // Parses |query|, returning the words that make up it. Any words in quotes
-  // are put in |words| without the quotes. For example, the query text
-  // "foo bar" results in two entries being added to words, one for foo and one
-  // for bar.
-  void ParseQueryWords(const base::string16& query,
-                       std::vector<base::string16>* words);
-
-  // Parses |query|, returning the nodes that constitute the valid words in the
-  // query. This is intended for later usage with DoesQueryMatch. Ownership of
-  // the nodes passes to the caller.
-  void ParseQueryNodes(const base::string16& query,
-                       std::vector<QueryNode*>* nodes);
-
-  // Returns true if the string text matches the query nodes created by a call
-  // to ParseQuery. If the query does match, each of the matching positions in
-  // the text is added to |match_positions|.
-  bool DoesQueryMatch(const base::string16& text,
-                      const std::vector<QueryNode*>& nodes,
-                      Snippet::MatchPositions* match_positions);
-
-  // Returns true if all of the |words| match the query |nodes| created by a
-  // call to ParseQuery.
-  bool DoesQueryMatch(const std::vector<QueryWord>& words,
-                      const std::vector<QueryNode*>& nodes);
-
-  // Extracts the words from |text|, placing each word into |words|.
-  void ExtractQueryWords(const base::string16& text,
-                         std::vector<QueryWord>* words);
-
- private:
-  // Does the work of parsing |query|; creates nodes in |root| as appropriate.
-  // This is invoked from both of the ParseQuery methods.
-  bool ParseQueryImpl(const base::string16& query, QueryNodeList* root);
-
-  DISALLOW_COPY_AND_ASSIGN(QueryParser);
-};
-
-#endif  // CHROME_BROWSER_HISTORY_QUERY_PARSER_H_
diff --git a/chrome/browser/history/query_parser_unittest.cc b/chrome/browser/history/query_parser_unittest.cc
deleted file mode 100644
index 969708d..0000000
--- a/chrome/browser/history/query_parser_unittest.cc
+++ /dev/null
@@ -1,166 +0,0 @@
-// Copyright (c) 2011 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 "base/basictypes.h"
-#include "base/memory/scoped_vector.h"
-#include "base/strings/utf_string_conversions.h"
-#include "chrome/browser/history/query_parser.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-class QueryParserTest : public testing::Test {
- public:
-  struct TestData {
-    const char* input;
-    const int expected_word_count;
-  };
-
-  std::string QueryToString(const std::string& query);
-
- protected:
-  QueryParser query_parser_;
-};
-
-// Test helper: Convert a user query string in 8-bit (for hardcoding
-// convenience) to a SQLite query string.
-std::string QueryParserTest::QueryToString(const std::string& query) {
-  base::string16 sqlite_query;
-  query_parser_.ParseQuery(base::UTF8ToUTF16(query), &sqlite_query);
-  return base::UTF16ToUTF8(sqlite_query);
-}
-
-// Basic multi-word queries, including prefix matching.
-TEST_F(QueryParserTest, SimpleQueries) {
-  EXPECT_EQ("", QueryToString(" "));
-  EXPECT_EQ("singleword*", QueryToString("singleword"));
-  EXPECT_EQ("spacedout*", QueryToString("  spacedout "));
-  EXPECT_EQ("foo* bar*", QueryToString("foo bar"));
-  // Short words aren't prefix matches. For Korean Hangul
-  // the minimum is 2 while for other scripts, it's 3.
-  EXPECT_EQ("f b", QueryToString(" f b"));
-  // KA JANG
-  EXPECT_EQ(base::WideToUTF8(L"\xAC00 \xC7A5"),
-            QueryToString(base::WideToUTF8(L" \xAC00 \xC7A5")));
-  EXPECT_EQ("foo* bar*", QueryToString(" foo   bar "));
-  // KA-JANG BICH-GO
-  EXPECT_EQ(base::WideToUTF8(L"\xAC00\xC7A5* \xBE5B\xACE0*"),
-            QueryToString(base::WideToUTF8(L"\xAC00\xC7A5 \xBE5B\xACE0")));
-}
-
-// Quoted substring parsing.
-TEST_F(QueryParserTest, Quoted) {
-  // ASCII quotes
-  EXPECT_EQ("\"Quoted\"", QueryToString("\"Quoted\""));
-  // Missing end quotes
-  EXPECT_EQ("\"miss end\"", QueryToString("\"miss end"));
-  // Missing begin quotes
-  EXPECT_EQ("miss* beg*", QueryToString("miss beg\""));
-  // Weird formatting
-  EXPECT_EQ("\"Many\" \"quotes\"", QueryToString("\"Many   \"\"quotes"));
-}
-
-// Apostrophes within words should be preserved, but otherwise stripped.
-TEST_F(QueryParserTest, Apostrophes) {
-  EXPECT_EQ("foo* bar's*", QueryToString("foo bar's"));
-  EXPECT_EQ("l'foo*", QueryToString("l'foo"));
-  EXPECT_EQ("foo*", QueryToString("'foo"));
-}
-
-// Special characters.
-TEST_F(QueryParserTest, SpecialChars) {
-  EXPECT_EQ("foo* the* bar*", QueryToString("!#:/*foo#$*;'* the!#:/*bar"));
-}
-
-TEST_F(QueryParserTest, NumWords) {
-  TestData data[] = {
-    { "blah",                  1 },
-    { "foo \"bar baz\"",       3 },
-    { "foo \"baz\"",           2 },
-    { "foo \"bar baz\"  blah", 4 },
-  };
-
-  for (size_t i = 0; i < arraysize(data); ++i) {
-    base::string16 query_string;
-    EXPECT_EQ(data[i].expected_word_count,
-              query_parser_.ParseQuery(base::UTF8ToUTF16(data[i].input),
-                                       &query_string));
-  }
-}
-
-TEST_F(QueryParserTest, ParseQueryNodesAndMatch) {
-  struct TestData2 {
-    const std::string query;
-    const std::string text;
-    const bool matches;
-    const size_t m1_start;
-    const size_t m1_end;
-    const size_t m2_start;
-    const size_t m2_end;
-  } data[] = {
-    { "foo",           "fooey foo",        true,  0, 3, 6, 9 },
-    { "foo foo",       "foo",              true,  0, 3, 0, 0 },
-    { "foo fooey",     "fooey",            true,  0, 5, 0, 0 },
-    { "fooey foo",     "fooey",            true,  0, 5, 0, 0 },
-    { "foo fooey bar", "bar fooey",        true,  0, 3, 4, 9 },
-    { "blah",          "blah",             true,  0, 4, 0, 0 },
-    { "blah",          "foo",              false, 0, 0, 0, 0 },
-    { "blah",          "blahblah",         true,  0, 4, 0, 0 },
-    { "blah",          "foo blah",         true,  4, 8, 0, 0 },
-    { "foo blah",      "blah",             false, 0, 0, 0, 0 },
-    { "foo blah",      "blahx foobar",     true,  0, 4, 6, 9 },
-    { "\"foo blah\"",  "foo blah",         true,  0, 8, 0, 0 },
-    { "\"foo blah\"",  "foox blahx",       false, 0, 0, 0, 0 },
-    { "\"foo blah\"",  "foo blah",         true,  0, 8, 0, 0 },
-    { "\"foo blah\"",  "\"foo blah\"",     true,  1, 9, 0, 0 },
-    { "foo blah",      "\"foo bar blah\"", true,  1, 4, 9, 13 },
-  };
-  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(data); ++i) {
-    QueryParser parser;
-    ScopedVector<QueryNode> query_nodes;
-    parser.ParseQueryNodes(base::UTF8ToUTF16(data[i].query),
-                           &query_nodes.get());
-    Snippet::MatchPositions match_positions;
-    ASSERT_EQ(data[i].matches,
-              parser.DoesQueryMatch(base::UTF8ToUTF16(data[i].text),
-                                    query_nodes.get(),
-                                    &match_positions));
-    size_t offset = 0;
-    if (data[i].m1_start != 0 || data[i].m1_end != 0) {
-      ASSERT_TRUE(match_positions.size() >= 1);
-      EXPECT_EQ(data[i].m1_start, match_positions[0].first);
-      EXPECT_EQ(data[i].m1_end, match_positions[0].second);
-      offset++;
-    }
-    if (data[i].m2_start != 0 || data[i].m2_end != 0) {
-      ASSERT_TRUE(match_positions.size() == 1 + offset);
-      EXPECT_EQ(data[i].m2_start, match_positions[offset].first);
-      EXPECT_EQ(data[i].m2_end, match_positions[offset].second);
-    }
-  }
-}
-
-TEST_F(QueryParserTest, ParseQueryWords) {
-  struct TestData2 {
-    const std::string text;
-    const std::string w1;
-    const std::string w2;
-    const std::string w3;
-    const size_t word_count;
-  } data[] = {
-    { "foo",           "foo", "",    "",  1 },
-    { "foo bar",       "foo", "bar", "",  2 },
-    { "\"foo bar\"",   "foo", "bar", "",  2 },
-    { "\"foo bar\" a", "foo", "bar", "a", 3 },
-  };
-  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(data); ++i) {
-    std::vector<base::string16> results;
-    QueryParser parser;
-    parser.ParseQueryWords(base::UTF8ToUTF16(data[i].text), &results);
-    ASSERT_EQ(data[i].word_count, results.size());
-    EXPECT_EQ(data[i].w1, base::UTF16ToUTF8(results[0]));
-    if (results.size() == 2)
-      EXPECT_EQ(data[i].w2, base::UTF16ToUTF8(results[1]));
-    if (results.size() == 3)
-      EXPECT_EQ(data[i].w3, base::UTF16ToUTF8(results[2]));
-  }
-}
diff --git a/chrome/browser/history/scored_history_match.cc b/chrome/browser/history/scored_history_match.cc
index 83bd786..d9cab36 100644
--- a/chrome/browser/history/scored_history_match.cc
+++ b/chrome/browser/history/scored_history_match.cc
@@ -18,9 +18,10 @@
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/autocomplete/history_url_provider.h"
 #include "chrome/browser/autocomplete/url_prefix.h"
-#include "chrome/browser/bookmarks/bookmark_service.h"
+#include "chrome/browser/bookmarks/bookmark_utils.h"
 #include "chrome/browser/omnibox/omnibox_field_trial.h"
 #include "chrome/common/chrome_switches.h"
+#include "components/bookmarks/core/browser/bookmark_service.h"
 #include "content/public/browser/browser_thread.h"
 
 namespace history {
@@ -67,8 +68,8 @@
 
   // Figure out where each search term appears in the URL and/or page title
   // so that we can score as well as provide autocomplete highlighting.
-  base::string16 url = CleanUpUrlForMatching(gurl, languages);
-  base::string16 title = CleanUpTitleForMatching(row.title());
+  base::string16 url = bookmark_utils::CleanUpUrlForMatching(gurl, languages);
+  base::string16 title = bookmark_utils::CleanUpTitleForMatching(row.title());
   int term_num = 0;
   for (String16Vector::const_iterator iter = terms.begin(); iter != terms.end();
        ++iter, ++term_num) {
diff --git a/chrome/browser/history/scored_history_match_unittest.cc b/chrome/browser/history/scored_history_match_unittest.cc
index d10cf0c..6e4f9a7 100644
--- a/chrome/browser/history/scored_history_match_unittest.cc
+++ b/chrome/browser/history/scored_history_match_unittest.cc
@@ -7,8 +7,8 @@
 #include "base/auto_reset.h"
 #include "base/strings/string16.h"
 #include "base/strings/utf_string_conversions.h"
-#include "chrome/browser/bookmarks/bookmark_service.h"
 #include "chrome/browser/history/scored_history_match.h"
+#include "components/bookmarks/core/browser/bookmark_service.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 using base::ASCIIToUTF16;
@@ -225,10 +225,10 @@
                             one_word_no_offset, word_starts, now, NULL);
   // Now bookmark that URL and make sure its score increases.
   base::AutoReset<int> reset(&ScoredHistoryMatch::bookmark_value_, 5);
-  BookmarkServiceMock bookmark_model_mock(url);
+  BookmarkServiceMock bookmark_service_mock(url);
   ScoredHistoryMatch scored_with_bookmark(
       row, visits, std::string(), ASCIIToUTF16("abc"), Make1Term("abc"),
-      one_word_no_offset, word_starts, now, &bookmark_model_mock);
+      one_word_no_offset, word_starts, now, &bookmark_service_mock);
   EXPECT_GT(scored_with_bookmark.raw_score(), scored.raw_score());
 }
 
diff --git a/chrome/browser/history/select_favicon_frames.cc b/chrome/browser/history/select_favicon_frames.cc
index 43a1fa4..ef7ac79 100644
--- a/chrome/browser/history/select_favicon_frames.cc
+++ b/chrome/browser/history/select_favicon_frames.cc
@@ -143,7 +143,8 @@
     float* match_score,
     std::vector<SelectionResult>* results) {
   if (candidate_sizes.empty()) {
-    *match_score = 0.0f;
+    if (match_score)
+      *match_score = 0.0f;
     return;
   }
 
diff --git a/chrome/browser/history/snippet.cc b/chrome/browser/history/snippet.cc
deleted file mode 100644
index ba56911..0000000
--- a/chrome/browser/history/snippet.cc
+++ /dev/null
@@ -1,297 +0,0 @@
-// Copyright (c) 2011 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 "chrome/browser/history/snippet.h"
-
-#include <algorithm>
-
-#include "base/logging.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/strings/string_split.h"
-#include "base/strings/string_util.h"
-#include "base/strings/utf_string_conversions.h"
-#include "third_party/icu/source/common/unicode/brkiter.h"
-#include "third_party/icu/source/common/unicode/utext.h"
-#include "third_party/icu/source/common/unicode/utf8.h"
-
-namespace {
-
-bool PairFirstLessThan(const Snippet::MatchPosition& a,
-                       const Snippet::MatchPosition& b) {
-  return a.first < b.first;
-}
-
-// Combines all pairs after offset in match_positions that are contained
-// or touch the pair at offset.
-void CoalescePositionsFrom(size_t offset,
-                           Snippet::MatchPositions* match_positions) {
-  DCHECK(offset < match_positions->size());
-  Snippet::MatchPosition& pair((*match_positions)[offset]);
-  ++offset;
-  while (offset < match_positions->size() &&
-         pair.second >= (*match_positions)[offset].first) {
-    pair.second = std::max(pair.second, (*match_positions)[offset].second);
-    match_positions->erase(match_positions->begin() + offset);
-  }
-}
-
-// Makes sure there is a pair in match_positions that contains the specified
-// range. This keeps the pairs ordered in match_positions by first, and makes
-// sure none of the pairs in match_positions touch each other.
-void AddMatch(size_t start,
-              size_t end,
-              Snippet::MatchPositions* match_positions) {
-  DCHECK(start < end);
-  DCHECK(match_positions);
-  Snippet::MatchPosition pair(start, end);
-  if (match_positions->empty()) {
-    match_positions->push_back(pair);
-    return;
-  }
-  // There's at least one match. Find the position of the new match,
-  // potentially extending pairs around it.
-  Snippet::MatchPositions::iterator i =
-      std::lower_bound(match_positions->begin(), match_positions->end(),
-                       pair, &PairFirstLessThan);
-  if (i != match_positions->end() && i->first == start) {
-    // Match not at the end and there is already a pair with the same
-    // start.
-    if (end > i->second) {
-      // New pair extends beyond existing pair. Extend existing pair and
-      // coalesce matches after it.
-      i->second = end;
-      CoalescePositionsFrom(i - match_positions->begin(), match_positions);
-    }  // else case, new pair completely contained in existing pair, nothing
-       // to do.
-  } else if (i == match_positions->begin()) {
-    // Match at the beginning and the first pair doesn't have the same
-    // start. Insert new pair and coalesce matches after it.
-    match_positions->insert(i, pair);
-    CoalescePositionsFrom(0, match_positions);
-  } else {
-    // Not at the beginning (but may be at the end).
-    --i;
-    if (start <= i->second && end > i->second) {
-      // Previous element contains match. Extend it and coalesce.
-      i->second = end;
-      CoalescePositionsFrom(i - match_positions->begin(), match_positions);
-    } else if (end > i->second) {
-      // Region doesn't touch previous element. See if region touches current
-      // element.
-      ++i;
-      if (i == match_positions->end() || end < i->first) {
-        match_positions->insert(i, pair);
-      } else {
-        i->first = start;
-        i->second = end;
-        CoalescePositionsFrom(i - match_positions->begin(), match_positions);
-      }
-    }
-  }
-}
-
-// Converts an index in a utf8 string into the index in the corresponding utf16
-// string and returns the utf16 index. This is intended to be called in a loop
-// iterating through a utf8 string.
-//
-// utf8_string: the utf8 string.
-// utf8_length: length of the utf8 string.
-// offset: the utf8 offset to convert.
-// utf8_pos: current offset in the utf8 string. This is modified and on return
-//           matches offset.
-// wide_pos: current index in the wide string. This is the same as the return
-//           value.
-size_t AdvanceAndReturnUTF16Pos(const char* utf8_string,
-                                int32_t utf8_length,
-                                int32_t offset,
-                                int32_t* utf8_pos,
-                                size_t* utf16_pos) {
-  DCHECK(offset >= *utf8_pos && offset <= utf8_length);
-
-  UChar32 wide_char;
-  while (*utf8_pos < offset) {
-    U8_NEXT(utf8_string, *utf8_pos, utf8_length, wide_char);
-    *utf16_pos += (wide_char <= 0xFFFF) ? 1 : 2;
-  }
-  return *utf16_pos;
-}
-
-// Given a character break iterator over a UTF-8 string, set the iterator
-// position to |*utf8_pos| and move by |count| characters. |count| can
-// be either positive or negative.
-void MoveByNGraphemes(icu::BreakIterator* bi, int count, size_t* utf8_pos) {
-  // Ignore the return value. A side effect of the current position
-  // being set at or following |*utf8_pos| is exploited here.
-  // It's simpler than calling following(n) and then previous().
-  // isBoundary() is not very fast, but should be good enough for the
-  // snippet generation. If not, revisit the way we scan in ComputeSnippet.
-  bi->isBoundary(*utf8_pos);
-  bi->next(count);
-  *utf8_pos = static_cast<size_t>(bi->current());
-}
-
-// The amount of context to include for a given hit. Note that it's counted
-// in terms of graphemes rather than bytes.
-const int kSnippetContext = 50;
-
-// Returns true if next match falls within a snippet window
-// from the previous match. The window size is counted in terms
-// of graphemes rather than bytes in UTF-8.
-bool IsNextMatchWithinSnippetWindow(icu::BreakIterator* bi,
-                                    size_t previous_match_end,
-                                    size_t next_match_start) {
-  // If it's within a window in terms of bytes, it's certain
-  // that it's within a window in terms of graphemes as well.
-  if (next_match_start < previous_match_end + kSnippetContext)
-    return true;
-  bi->isBoundary(previous_match_end);
-  // An alternative to this is to call |bi->next()| at most
-  // kSnippetContext times, compare |bi->current()| with |next_match_start|
-  // after each call and return early if possible. There are other
-  // heuristics to speed things up if necessary, but it's not likely that
-  // we need to bother.
-  bi->next(kSnippetContext);
-  int64 current = bi->current();
-  return (next_match_start < static_cast<uint64>(current) ||
-          current == icu::BreakIterator::DONE);
-}
-
-}  // namespace
-
-// static
-void Snippet::ExtractMatchPositions(const std::string& offsets_str,
-                                    const std::string& column_num,
-                                    MatchPositions* match_positions) {
-  DCHECK(match_positions);
-  if (offsets_str.empty())
-    return;
-  std::vector<std::string> offsets;
-  base::SplitString(offsets_str, ' ', &offsets);
-  // SQLite offsets are sets of four integers:
-  //   column, query term, match offset, match length
-  // Matches within a string are marked by (start, end) pairs.
-  for (size_t i = 0; i < offsets.size() - 3; i += 4) {
-    if (offsets[i] != column_num)
-      continue;
-    const size_t start = atoi(offsets[i + 2].c_str());
-    const size_t end = start + atoi(offsets[i + 3].c_str());
-    // Switch to DCHECK after debugging http://crbug.com/15261.
-    CHECK(end >= start);
-    AddMatch(start, end, match_positions);
-  }
-}
-
-// static
-void Snippet::ConvertMatchPositionsToWide(
-    const std::string& utf8_string,
-    Snippet::MatchPositions* match_positions) {
-  DCHECK(match_positions);
-  int32_t utf8_pos = 0;
-  size_t utf16_pos = 0;
-  const char* utf8_cstring = utf8_string.c_str();
-  const int32_t utf8_length = static_cast<int32_t>(utf8_string.size());
-  for (Snippet::MatchPositions::iterator i = match_positions->begin();
-       i != match_positions->end(); ++i) {
-    i->first = AdvanceAndReturnUTF16Pos(utf8_cstring, utf8_length,
-                                        i->first, &utf8_pos, &utf16_pos);
-    i->second = AdvanceAndReturnUTF16Pos(utf8_cstring, utf8_length,
-                                         i->second, &utf8_pos, &utf16_pos);
-  }
-}
-
-Snippet::Snippet() {
-}
-
-Snippet::~Snippet() {
-}
-
-void Snippet::ComputeSnippet(const MatchPositions& match_positions,
-                             const std::string& document) {
-  // The length of snippets we try to produce.
-  // We can generate longer snippets but stop once we cross kSnippetMaxLength.
-  const size_t kSnippetMaxLength = 200;
-  const base::string16 kEllipsis = base::ASCIIToUTF16(" ... ");
-
-  UText* document_utext = NULL;
-  UErrorCode status = U_ZERO_ERROR;
-  document_utext = utext_openUTF8(document_utext, document.data(),
-                                  document.size(), &status);
-  // Locale does not matter because there's no per-locale customization
-  // for character iterator.
-  scoped_ptr<icu::BreakIterator> bi(icu::BreakIterator::createCharacterInstance(
-      icu::Locale::getDefault(), status));
-  bi->setText(document_utext, status);
-  DCHECK(U_SUCCESS(status));
-
-  // We build the snippet by iterating through the matches and then grabbing
-  // context around each match.  If matches are near enough each other (within
-  // kSnippetContext), we skip the "..." between them.
-  base::string16 snippet;
-  size_t start = 0;
-  for (size_t i = 0; i < match_positions.size(); ++i) {
-    // Some shorter names for the current match.
-    const size_t match_start = match_positions[i].first;
-    const size_t match_end = match_positions[i].second;
-
-    // Switch to DCHECK after debugging http://crbug.com/15261.
-    CHECK(match_end > match_start);
-    CHECK(match_end <= document.size());
-
-    // Add the context, if any, to show before the match.
-    size_t context_start = match_start;
-    MoveByNGraphemes(bi.get(), -kSnippetContext, &context_start);
-    start = std::max(start, context_start);
-    if (start < match_start) {
-      if (start > 0)
-        snippet += kEllipsis;
-      // Switch to DCHECK after debugging http://crbug.com/15261.
-      CHECK(start < document.size());
-      snippet += base::UTF8ToUTF16(document.substr(start, match_start - start));
-    }
-
-    // Add the match.
-    const size_t first = snippet.size();
-    snippet += base::UTF8ToUTF16(document.substr(match_start,
-                                                 match_end - match_start));
-    matches_.push_back(std::make_pair(first, snippet.size()));
-
-    // Compute the context, if any, to show after the match.
-    size_t end;
-    // Check if the next match falls within our snippet window.
-    if (i + 1 < match_positions.size() &&
-        IsNextMatchWithinSnippetWindow(bi.get(), match_end,
-            match_positions[i + 1].first)) {
-      // Yes, it's within the window.  Make the end context extend just up
-      // to the next match.
-      end = match_positions[i + 1].first;
-      // Switch to DCHECK after debugging http://crbug.com/15261.
-      CHECK(end >= match_end);
-      CHECK(end <= document.size());
-      snippet += base::UTF8ToUTF16(document.substr(match_end, end - match_end));
-    } else {
-      // No, there's either no next match or the next match is too far away.
-      end = match_end;
-      MoveByNGraphemes(bi.get(), kSnippetContext, &end);
-      // Switch to DCHECK after debugging http://crbug.com/15261.
-      CHECK(end >= match_end);
-      CHECK(end <= document.size());
-      snippet += base::UTF8ToUTF16(document.substr(match_end, end - match_end));
-      if (end < document.size())
-        snippet += kEllipsis;
-    }
-    start = end;
-
-    // Stop here if we have enough snippet computed.
-    if (snippet.size() >= kSnippetMaxLength)
-      break;
-  }
-
-  utext_close(document_utext);
-  swap(text_, snippet);
-}
-
-void Snippet::Swap(Snippet* other) {
-  text_.swap(other->text_);
-  matches_.swap(other->matches_);
-}
diff --git a/chrome/browser/history/snippet.h b/chrome/browser/history/snippet.h
deleted file mode 100644
index 9e6fdb0..0000000
--- a/chrome/browser/history/snippet.h
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright (c) 2006-2008 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.
-
-// This module computes snippets of queries based on hits in the documents
-// for display in history search results.
-
-#ifndef CHROME_BROWSER_HISTORY_SNIPPET_H__
-#define CHROME_BROWSER_HISTORY_SNIPPET_H__
-
-#include <vector>
-
-#include "base/strings/string16.h"
-
-class Snippet {
- public:
-  // Each MatchPosition is the [begin, end) positions of a match within a
-  // string.
-  typedef std::pair<size_t, size_t> MatchPosition;
-  typedef std::vector<MatchPosition> MatchPositions;
-
-  // Parses an offsets string as returned from a sqlite full text index. An
-  // offsets string encodes information about why a row matched a text query.
-  // The information is encoded in the string as a set of matches, where each
-  // match consists of the column, term-number, location, and length of the
-  // match. Each element of the match is separated by a space, as is each match
-  // from other matches.
-  //
-  // This method adds the start and end of each match whose column is
-  // column_num to match_positions. The pairs are ordered based on first,
-  // with no overlapping elements.
-  //
-  // NOTE: the positions returned are in terms of UTF8 encoding. To convert the
-  // offsets to wide, use ConvertMatchPositionsToWide.
-  static void ExtractMatchPositions(const std::string& offsets_str,
-                                    const std::string& column_num,
-                                    MatchPositions* match_positions);
-
-  // Converts match positions as returned from ExtractMatchPositions to be in
-  // terms of a wide string.
-  static void ConvertMatchPositionsToWide(
-      const std::string& utf8_string,
-      Snippet::MatchPositions* match_positions);
-
-  Snippet();
-  ~Snippet();
-
-  // Given |matches|, the match positions within |document|, compute the snippet
-  // for the document.
-  // Note that |document| is UTF-8 and the offsets in |matches| are byte
-  // offsets.
-  void ComputeSnippet(const MatchPositions& matches,
-                      const std::string& document);
-
-  const base::string16& text() const { return text_; }
-  const MatchPositions& matches() const { return matches_; }
-
-  // Efficiently swaps the contents of this snippet with the other.
-  void Swap(Snippet* other);
-
- private:
-  // The text of the snippet.
-  base::string16 text_;
-
-  // The matches within text_.
-  MatchPositions matches_;
-};
-
-#endif  // CHROME_BROWSER_HISTORY_SNIPPET_H__
diff --git a/chrome/browser/history/snippet_unittest.cc b/chrome/browser/history/snippet_unittest.cc
deleted file mode 100644
index 3d98046..0000000
--- a/chrome/browser/history/snippet_unittest.cc
+++ /dev/null
@@ -1,252 +0,0 @@
-// Copyright (c) 2010 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 "chrome/browser/history/snippet.h"
-
-#include <algorithm>
-
-#include "base/strings/string_split.h"
-#include "base/strings/string_util.h"
-#include "base/strings/utf_string_conversions.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace {
-
-// A sample document to compute snippets of.
-// The \x bits after the first "Google" are UTF-8 of U+2122 TRADE MARK SIGN,
-// and are useful for verifying we don't screw up in UTF-8/UTF-16 conversion.
-const char* kSampleDocument = "Google\xe2\x84\xa2 Terms of Service "
-"Welcome to Google! "
-"1. Your relationship with Google "
-"1.1 Your use of Google's products, software, services and web sites "
-"(referred to collectively as the \"Services\" in this document and excluding "
-"any services provided to you by Google under a separate written agreement) "
-"is subject to the terms of a legal agreement between you and Google. "
-"\"Google\" means Google Inc., whose principal place of business is at 1600 "
-"Amphitheatre Parkway, Mountain View, CA 94043, United States. This document "
-"explains how the agreement is made up, and sets out some of the terms of "
-"that agreement.";
-};
-
-// Thai sample taken from http://www.google.co.th/intl/th/privacy.html
-// TODO(jungshik) : Add more samples (e.g. Hindi) after porting
-// ICU 4.0's character iterator changes to our copy of ICU 3.8 to get
-// grapheme clusters in Indic scripts handled more reasonably.
-const char* kThaiSample = "Google \xE0\xB9\x80\xE0\xB8\x81\xE0\xB9\x87"
-"\xE0\xB8\x9A\xE0\xB8\xA3\xE0\xB8\xA7\xE0\xB8\x9A\xE0\xB8\xA3\xE0\xB8\xA7"
-"\xE0\xB8\xA1 \xE0\xB8\x82\xE0\xB9\x89\xE0\xB8\xAD\xE0\xB8\xA1\xE0\xB8\xB9"
-"\xE0\xB8\xA5\xE0\xB8\xAA\xE0\xB9\x88\xE0\xB8\xA7\xE0\xB8\x99\xE0\xB8\x9A"
-"\xE0\xB8\xB8\xE0\xB8\x84\xE0\xB8\x84\xE0\xB8\xA5 \xE0\xB9\x80\xE0\xB8\xA1"
-"\xE0\xB8\xB7\xE0\xB9\x88\xE0\xB8\xAD\xE0\xB8\x84\xE0\xB8\xB8\xE0\xB8\x93"
-"\xE0\xB8\xA5\xE0\xB8\x87\xE0\xB8\x97\xE0\xB8\xB0\xE0\xB9\x80\xE0\xB8\x9A"
-"\xE0\xB8\xB5\xE0\xB8\xA2\xE0\xB8\x99\xE0\xB9\x80\xE0\xB8\x9E\xE0\xB8\xB7"
-"\xE0\xB9\x88\xE0\xB8\xAD\xE0\xB9\x83\xE0\xB8\x8A\xE0\xB9\x89\xE0\xB8\x9A"
-"\xE0\xB8\xA3\xE0\xB8\xB4\xE0\xB8\x81\xE0\xB8\xB2\xE0\xB8\xA3\xE0\xB8\x82"
-"\xE0\xB8\xAD\xE0\xB8\x87 Google \xE0\xB8\xAB\xE0\xB8\xA3\xE0\xB8\xB7"
-"\xE0\xB8\xAD\xE0\xB9\x83\xE0\xB8\xAB\xE0\xB9\x89\xE0\xB8\x82\xE0\xB9\x89"
-"\xE0\xB8\xAD\xE0\xB8\xA1\xE0\xB8\xB9\xE0\xB8\xA5\xE0\xB8\x94\xE0\xB8\xB1"
-"\xE0\xB8\x87\xE0\xB8\x81\xE0\xB8\xA5\xE0\xB9\x88\xE0\xB8\xB2\xE0\xB8\xA7"
-"\xE0\xB9\x82\xE0\xB8\x94\xE0\xB8\xA2\xE0\xB8\xAA\xE0\xB8\xA1\xE0\xB8\xB1"
-"\xE0\xB8\x84\xE0\xB8\xA3\xE0\xB9\x83\xE0\xB8\x88 \xE0\xB9\x80\xE0\xB8\xA3"
-"\xE0\xB8\xB2\xE0\xB8\xAD\xE0\xB8\xB2\xE0\xB8\x88\xE0\xB8\xA3\xE0\xB8\xA7"
-"\xE0\xB8\xA1\xE0\xB8\x82\xE0\xB9\x89\xE0\xB8\xAD\xE0\xB8\xA1\xE0\xB8\xB9"
-"\xE0\xB8\xA5\xE0\xB8\xAA\xE0\xB9\x88\xE0\xB8\xA7\xE0\xB8\x99\xE0\xB8\x9A"
-"\xE0\xB8\xB8\xE0\xB8\x84\xE0\xB8\x84\xE0\xB8\xA5\xE0\xB8\x97\xE0\xB8\xB5"
-"\xE0\xB9\x88\xE0\xB9\x80\xE0\xB8\x81\xE0\xB9\x87\xE0\xB8\x9A\xE0\xB8\xA3"
-"\xE0\xB8\xA7\xE0\xB8\x9A\xE0\xB8\xA3\xE0\xB8\xA7\xE0\xB8\xA1\xE0\xB8\x88"
-"\xE0\xB8\xB2\xE0\xB8\x81\xE0\xB8\x84\xE0\xB8\xB8\xE0\xB8\x93\xE0\xB9\x80"
-"\xE0\xB8\x82\xE0\xB9\x89\xE0\xB8\xB2\xE0\xB8\x81\xE0\xB8\xB1\xE0\xB8\x9A"
-"\xE0\xB8\x82\xE0\xB9\x89\xE0\xB8\xAD\xE0\xB8\xA1\xE0\xB8\xB9\xE0\xB8\xA5"
-"\xE0\xB8\x88\xE0\xB8\xB2\xE0\xB8\x81\xE0\xB8\x9A\xE0\xB8\xA3\xE0\xB8\xB4"
-"\xE0\xB8\x81\xE0\xB8\xB2\xE0\xB8\xA3\xE0\xB8\xAD\xE0\xB8\xB7\xE0\xB9\x88"
-"\xE0\xB8\x99\xE0\xB8\x82\xE0\xB8\xAD\xE0\xB8\x87 Google \xE0\xB8\xAB"
-"\xE0\xB8\xA3\xE0\xB8\xB7\xE0\xB8\xAD\xE0\xB8\x9A\xE0\xB8\xB8\xE0\xB8\x84"
-"\xE0\xB8\x84\xE0\xB8\xA5\xE0\xB8\x97\xE0\xB8\xB5\xE0\xB9\x88\xE0\xB8\xAA"
-"\xE0\xB8\xB2\xE0\xB8\xA1 \xE0\xB9\x80\xE0\xB8\x9E\xE0\xB8\xB7\xE0\xB9\x88"
-"\xE0\xB8\xAD\xE0\xB9\x83\xE0\xB8\xAB\xE0\xB9\x89\xE0\xB8\x9C\xE0\xB8\xB9"
-"\xE0\xB9\x89\xE0\xB9\x83\xE0\xB8\x8A\xE0\xB9\x89\xE0\xB9\x84\xE0\xB8\x94"
-"\xE0\xB9\x89\xE0\xB8\xA3\xE0\xB8\xB1\xE0\xB8\x9A\xE0\xB8\x9B\xE0\xB8\xA3"
-"\xE0\xB8\xB0\xE0\xB8\xAA\xE0\xB8\x9A\xE0\xB8\x81\xE0\xB8\xB2\xE0\xB8\xA3"
-"\xE0\xB8\x93\xE0\xB9\x8C\xE0\xB8\x97\xE0\xB8\xB5\xE0\xB9\x88\xE0\xB8\x94"
-"\xE0\xB8\xB5\xE0\xB8\x82\xE0\xB8\xB6\xE0\xB9\x89\xE0\xB8\x99 \xE0\xB8\xA3"
-"\xE0\xB8\xA7\xE0\xB8\xA1\xE0\xB8\x97\xE0\xB8\xB1\xE0\xB9\x89\xE0\xB8\x87"
-"\xE0\xB8\x9B\xE0\xB8\xA3\xE0\xB8\xB1\xE0\xB8\x9A\xE0\xB9\x81\xE0\xB8\x95"
-"\xE0\xB9\x88\xE0\xB8\x87\xE0\xB9\x80\xE0\xB8\x99\xE0\xB8\xB7\xE0\xB9\x89"
-"\xE0\xB8\xAD\xE0\xB8\xAB\xE0\xB8\xB2\xE0\xB9\x83\xE0\xB8\xAB\xE0\xB9\x89"
-"\xE0\xB9\x80\xE0\xB8\xAB\xE0\xB8\xA1\xE0\xB8\xB2\xE0\xB8\xB0\xE0\xB8\xAA"
-"\xE0\xB8\xB3\xE0\xB8\xAB\xE0\xB8\xA3\xE0\xB8\xB1\xE0\xB8\x9A\xE0\xB8\x84"
-"\xE0\xB8\xB8\xE0\xB8\x93";
-
-// Comparator for sorting by the first element in a pair.
-bool ComparePair1st(const Snippet::MatchPosition& a,
-                    const Snippet::MatchPosition& b) {
-  return a.first < b.first;
-}
-
-// For testing, we'll compute the match positions manually instead of using
-// sqlite's FTS matching.  BuildSnippet returns the snippet for matching
-// |query| against |document|.  Matches are surrounded by "**".
-base::string16 BuildSnippet(const std::string& document,
-                      const std::string& query) {
-  // This function assumes that |document| does not contain
-  // any character for which lowercasing changes its length. Further,
-  // it's assumed that lowercasing only the ASCII-portion works for
-  // |document|. We need to add more test cases and change this function
-  // to be more generic depending on how we deal with 'folding for match'
-  // in history.
-  const std::string document_folded = StringToLowerASCII(std::string(document));
-
-  std::vector<std::string> query_words;
-  base::SplitString(query, ' ', &query_words);
-
-  // Manually construct match_positions of the document.
-  Snippet::MatchPositions match_positions;
-  match_positions.clear();
-  for (std::vector<std::string>::iterator qw = query_words.begin();
-       qw != query_words.end(); ++qw) {
-    // Insert all instances of this word into match_pairs.
-    size_t ofs = 0;
-    while ((ofs = document_folded.find(*qw, ofs)) != std::string::npos) {
-      match_positions.push_back(std::make_pair(ofs, ofs + qw->size()));
-      ofs += qw->size();
-    }
-  }
-  // Sort match_positions in order of increasing offset.
-  std::sort(match_positions.begin(), match_positions.end(), ComparePair1st);
-
-  // Compute the snippet.
-  Snippet snippet;
-  snippet.ComputeSnippet(match_positions, document);
-
-  // Now "highlight" all matches in the snippet with **.
-  base::string16 star_snippet;
-  Snippet::MatchPositions::const_iterator match;
-  size_t pos = 0;
-  for (match = snippet.matches().begin();
-       match != snippet.matches().end(); ++match) {
-    star_snippet += snippet.text().substr(pos, match->first - pos);
-    star_snippet += base::UTF8ToUTF16("**");
-    star_snippet += snippet.text().substr(match->first,
-                                          match->second - match->first);
-    star_snippet += base::UTF8ToUTF16("**");
-    pos = match->second;
-  }
-  star_snippet += snippet.text().substr(pos);
-
-  return star_snippet;
-}
-
-TEST(Snippets, SimpleQuery) {
-  ASSERT_EQ(" ... eferred to collectively as the \"Services\" in this "
-            "**document** and excluding any services provided to you by "
-            "Goo ...  ... way, Mountain View, CA 94043, United States. This "
-            "**document** explains how the agreement is made up, and sets "
-            "o ... ",
-            base::UTF16ToUTF8(BuildSnippet(kSampleDocument, "document")));
-}
-
-// Test that two words that are near each other don't produce two elided bits.
-TEST(Snippets, NearbyWords) {
-  ASSERT_EQ(" ... lace of business is at 1600 Amphitheatre Parkway, "
-            "**Mountain** **View**, CA 94043, United States. This "
-            "document explains  ... ",
-            base::UTF16ToUTF8(BuildSnippet(kSampleDocument, "mountain view")));
-}
-
-// The above tests already test that we get byte offsets correct, but here's
-// one that gets the "TM" in its snippet.
-TEST(Snippets, UTF8) {
-  ASSERT_EQ(" ... ogle\xe2\x84\xa2 Terms of Service Welcome to Google! "
-            "1. Your **relationship** with Google 1.1 Your use of Google's "
-            "products, so ... ",
-            base::UTF16ToUTF8(BuildSnippet(kSampleDocument, "relationship")));
-}
-
-TEST(Snippets, ThaiUTF8) {
-  // There are 3 instances of '\u0E43\u0E2B\u0E49'
-  // (\xE0\xB9\x83\xE0\xB8\xAB\xE0\xB9\x89) in kThaiSample.
-  // The 1st is more than |kSniipetContext| graphemes away from the
-  // 2nd while the 2nd and 3rd are within that window. However, with
-  // the 2nd match added, the snippet goes over the size limit so that
-  // the snippet ends right before the 3rd match.
-  ASSERT_EQ(" ... "
-            "\xE0\xB8\xA3\xE0\xB8\xA7\xE0\xB8\x9A\xE0\xB8\xA3\xE0\xB8\xA7"
-            "\xE0\xB8\xA1 \xE0\xB8\x82\xE0\xB9\x89\xE0\xB8\xAD\xE0\xB8"
-            "\xA1\xE0\xB8\xB9\xE0\xB8\xA5\xE0\xB8\xAA\xE0\xB9\x88\xE0\xB8"
-            "\xA7\xE0\xB8\x99\xE0\xB8\x9A\xE0\xB8\xB8\xE0\xB8\x84\xE0\xB8"
-            "\x84\xE0\xB8\xA5 \xE0\xB9\x80\xE0\xB8\xA1\xE0\xB8\xB7\xE0"
-            "\xB9\x88\xE0\xB8\xAD\xE0\xB8\x84\xE0\xB8\xB8\xE0\xB8\x93\xE0"
-            "\xB8\xA5\xE0\xB8\x87\xE0\xB8\x97\xE0\xB8\xB0\xE0\xB9\x80\xE0"
-            "\xB8\x9A\xE0\xB8\xB5\xE0\xB8\xA2\xE0\xB8\x99\xE0\xB9\x80\xE0"
-            "\xB8\x9E\xE0\xB8\xB7\xE0\xB9\x88\xE0\xB8\xAD\xE0\xB9\x83\xE0"
-            "\xB8\x8A\xE0\xB9\x89\xE0\xB8\x9A\xE0\xB8\xA3\xE0\xB8\xB4\xE0"
-            "\xB8\x81\xE0\xB8\xB2\xE0\xB8\xA3\xE0\xB8\x82\xE0\xB8\xAD\xE0"
-            "\xB8\x87 Google \xE0\xB8\xAB\xE0\xB8\xA3\xE0\xB8\xB7\xE0\xB8"
-            "\xAD**\xE0\xB9\x83\xE0\xB8\xAB\xE0\xB9\x89**\xE0\xB8\x82\xE0"
-            "\xB9\x89\xE0\xB8\xAD\xE0\xB8\xA1\xE0\xB8\xB9\xE0\xB8\xA5\xE0"
-            "\xB8\x94\xE0\xB8\xB1\xE0\xB8\x87\xE0\xB8\x81\xE0\xB8\xA5\xE0"
-            "\xB9\x88\xE0\xB8\xB2\xE0\xB8\xA7\xE0\xB9\x82\xE0\xB8\x94\xE0"
-            "\xB8\xA2\xE0\xB8\xAA\xE0\xB8\xA1\xE0\xB8\xB1\xE0\xB8\x84\xE0"
-            "\xB8\xA3\xE0\xB9\x83\xE0\xB8\x88 \xE0\xB9\x80\xE0\xB8\xA3"
-            "\xE0\xB8\xB2\xE0\xB8\xAD\xE0\xB8\xB2\xE0\xB8\x88\xE0\xB8\xA3"
-            "\xE0\xB8\xA7\xE0\xB8\xA1\xE0\xB8\x82\xE0\xB9\x89\xE0\xB8\xAD"
-            "\xE0\xB8\xA1\xE0\xB8\xB9\xE0\xB8\xA5\xE0\xB8\xAA\xE0\xB9\x88"
-            "\xE0\xB8\xA7\xE0\xB8\x99\xE0\xB8\x9A\xE0\xB8\xB8\xE0\xB8\x84"
-            "\xE0\xB8\x84\xE0\xB8\xA5\xE0\xB8\x97\xE0\xB8\xB5\xE0\xB9\x88"
-            "\xE0\xB9\x80\xE0\xB8\x81\xE0\xB9\x87\xE0\xB8\x9A\xE0\xB8\xA3"
-            "\xE0\xB8\xA7\xE0\xB8\x9A\xE0\xB8\xA3\xE0\xB8\xA7\xE0\xB8\xA1"
-            "\xE0\xB8\x88\xE0\xB8\xB2\xE0\xB8\x81\xE0\xB8\x84\xE0\xB8\xB8"
-            "\xE0\xB8\x93\xE0\xB9\x80\xE0\xB8\x82\xE0\xB9\x89\xE0\xB8\xB2"
-            "\xE0\xB8\x81\xE0\xB8\xB1\xE0\xB8\x9A ...  ... \xE0\xB8\x82"
-            "\xE0\xB9\x89\xE0\xB8\xAD\xE0\xB8\xA1\xE0\xB8\xB9\xE0\xB8\xA5"
-            "\xE0\xB8\x88\xE0\xB8\xB2\xE0\xB8\x81\xE0\xB8\x9A\xE0\xB8\xA3"
-            "\xE0\xB8\xB4\xE0\xB8\x81\xE0\xB8\xB2\xE0\xB8\xA3\xE0\xB8\xAD"
-            "\xE0\xB8\xB7\xE0\xB9\x88\xE0\xB8\x99\xE0\xB8\x82\xE0\xB8\xAD"
-            "\xE0\xB8\x87 Google \xE0\xB8\xAB\xE0\xB8\xA3\xE0\xB8\xB7\xE0"
-            "\xB8\xAD\xE0\xB8\x9A\xE0\xB8\xB8\xE0\xB8\x84\xE0\xB8\x84\xE0"
-            "\xB8\xA5\xE0\xB8\x97\xE0\xB8\xB5\xE0\xB9\x88\xE0\xB8\xAA\xE0"
-            "\xB8\xB2\xE0\xB8\xA1 \xE0\xB9\x80\xE0\xB8\x9E\xE0\xB8\xB7"
-            "\xE0\xB9\x88\xE0\xB8\xAD**\xE0\xB9\x83\xE0\xB8\xAB\xE0\xB9"
-            "\x89**\xE0\xB8\x9C\xE0\xB8\xB9\xE0\xB9\x89\xE0\xB9\x83\xE0"
-            "\xB8\x8A\xE0\xB9\x89\xE0\xB9\x84\xE0\xB8\x94\xE0\xB9\x89\xE0"
-            "\xB8\xA3\xE0\xB8\xB1\xE0\xB8\x9A\xE0\xB8\x9B\xE0\xB8\xA3\xE0"
-            "\xB8\xB0\xE0\xB8\xAA\xE0\xB8\x9A\xE0\xB8\x81\xE0\xB8\xB2\xE0"
-            "\xB8\xA3\xE0\xB8\x93\xE0\xB9\x8C\xE0\xB8\x97\xE0\xB8\xB5\xE0"
-            "\xB9\x88\xE0\xB8\x94\xE0\xB8\xB5\xE0\xB8\x82\xE0\xB8\xB6\xE0"
-            "\xB9\x89\xE0\xB8\x99 \xE0\xB8\xA3\xE0\xB8\xA7\xE0\xB8\xA1"
-            "\xE0\xB8\x97\xE0\xB8\xB1\xE0\xB9\x89\xE0\xB8\x87\xE0\xB8\x9B"
-            "\xE0\xB8\xA3\xE0\xB8\xB1\xE0\xB8\x9A\xE0\xB9\x81\xE0\xB8\x95"
-            "\xE0\xB9\x88\xE0\xB8\x87\xE0\xB9\x80\xE0\xB8\x99\xE0\xB8\xB7"
-            "\xE0\xB9\x89\xE0\xB8\xAD\xE0\xB8\xAB\xE0\xB8\xB2",
-            base::UTF16ToUTF8(BuildSnippet(kThaiSample,
-                                     "\xE0\xB9\x83\xE0\xB8\xAB\xE0\xB9\x89")));
-}
-
-TEST(Snippets, ExtractMatchPositions) {
-  struct TestData {
-    const std::string offsets_string;
-    const size_t expected_match_count;
-    const size_t expected_matches[10];
-  } data[] = {
-    { "0 0 1 2 0 0 4 1 0 0 1 5",            1,     { 1, 6 } },
-    { "0 0 1 4 0 0 2 1",                    1,     { 1, 5 } },
-    { "0 0 4 1 0 0 2 1",                    2,     { 2, 3, 4, 5 } },
-    { "0 0 0 1",                            1,     { 0, 1 } },
-    { "0 0 0 1 0 0 0 2",                    1,     { 0, 2 } },
-    { "0 0 1 1 0 0 1 2",                    1,     { 1, 3 } },
-    { "0 0 1 2 0 0 4 3 0 0 3 1",            1,     { 1, 7 } },
-    { "0 0 1 4 0 0 2 5",                    1,     { 1, 7 } },
-    { "0 0 1 2 0 0 1 1",                    1,     { 1, 3 } },
-    { "0 0 1 1 0 0 5 2 0 0 10 1 0 0 3 10",  2,     { 1, 2, 3, 13 } },
-  };
-  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(data); ++i) {
-    Snippet::MatchPositions matches;
-    Snippet::ExtractMatchPositions(data[i].offsets_string, "0", &matches);
-    EXPECT_EQ(data[i].expected_match_count, matches.size());
-    for (size_t j = 0; j < data[i].expected_match_count; ++j) {
-      EXPECT_EQ(data[i].expected_matches[2 * j], matches[j].first);
-      EXPECT_EQ(data[i].expected_matches[2 * j + 1], matches[j].second);
-    }
-  }
-}
diff --git a/chrome/browser/history/thumbnail_database.cc b/chrome/browser/history/thumbnail_database.cc
index 11d9162..80f4559 100644
--- a/chrome/browser/history/thumbnail_database.cc
+++ b/chrome/browser/history/thumbnail_database.cc
@@ -94,7 +94,7 @@
   icon_mapping->mapping_id = statement.ColumnInt64(0);
   icon_mapping->icon_id = statement.ColumnInt64(1);
   icon_mapping->icon_type =
-      static_cast<chrome::IconType>(statement.ColumnInt(2));
+      static_cast<favicon_base::IconType>(statement.ColumnInt(2));
   icon_mapping->icon_url = GURL(statement.ColumnString(3));
   icon_mapping->page_url = page_url;
 }
@@ -646,7 +646,7 @@
 }
 
 bool ThumbnailDatabase::GetFaviconBitmapIDSizes(
-    chrome::FaviconID icon_id,
+    favicon_base::FaviconID icon_id,
     std::vector<FaviconBitmapIDSize>* bitmap_id_sizes) {
   DCHECK(icon_id);
   sql::Statement statement(db_.GetCachedStatement(SQL_FROM_HERE,
@@ -669,7 +669,7 @@
 }
 
 bool ThumbnailDatabase::GetFaviconBitmaps(
-    chrome::FaviconID icon_id,
+    favicon_base::FaviconID icon_id,
     std::vector<FaviconBitmap>* favicon_bitmaps) {
   DCHECK(icon_id);
   sql::Statement statement(db_.GetCachedStatement(SQL_FROM_HERE,
@@ -731,7 +731,7 @@
 }
 
 FaviconBitmapID ThumbnailDatabase::AddFaviconBitmap(
-    chrome::FaviconID icon_id,
+    favicon_base::FaviconID icon_id,
     const scoped_refptr<base::RefCountedMemory>& icon_data,
     base::Time time,
     const gfx::Size& pixel_size) {
@@ -792,7 +792,7 @@
   return statement.Run();
 }
 
-bool ThumbnailDatabase::SetFaviconOutOfDate(chrome::FaviconID icon_id) {
+bool ThumbnailDatabase::SetFaviconOutOfDate(favicon_base::FaviconID icon_id) {
   sql::Statement statement(db_.GetCachedStatement(SQL_FROM_HERE,
       "UPDATE favicon_bitmaps SET last_updated=? WHERE icon_id=?"));
   statement.BindInt64(0, 0);
@@ -801,10 +801,10 @@
   return statement.Run();
 }
 
-chrome::FaviconID ThumbnailDatabase::GetFaviconIDForFaviconURL(
+favicon_base::FaviconID ThumbnailDatabase::GetFaviconIDForFaviconURL(
     const GURL& icon_url,
     int required_icon_type,
-    chrome::IconType* icon_type) {
+    favicon_base::IconType* icon_type) {
   sql::Statement statement(db_.GetCachedStatement(SQL_FROM_HERE,
       "SELECT id, icon_type FROM favicons WHERE url=? AND (icon_type & ? > 0) "
       "ORDER BY icon_type DESC"));
@@ -815,13 +815,13 @@
     return 0;  // not cached
 
   if (icon_type)
-    *icon_type = static_cast<chrome::IconType>(statement.ColumnInt(1));
+    *icon_type = static_cast<favicon_base::IconType>(statement.ColumnInt(1));
   return statement.ColumnInt64(0);
 }
 
-bool ThumbnailDatabase::GetFaviconHeader(chrome::FaviconID icon_id,
+bool ThumbnailDatabase::GetFaviconHeader(favicon_base::FaviconID icon_id,
                                          GURL* icon_url,
-                                         chrome::IconType* icon_type) {
+                                         favicon_base::IconType* icon_type) {
   DCHECK(icon_id);
 
   sql::Statement statement(db_.GetCachedStatement(SQL_FROM_HERE,
@@ -834,14 +834,14 @@
   if (icon_url)
     *icon_url = GURL(statement.ColumnString(0));
   if (icon_type)
-    *icon_type = static_cast<chrome::IconType>(statement.ColumnInt(1));
+    *icon_type = static_cast<favicon_base::IconType>(statement.ColumnInt(1));
 
   return true;
 }
 
-chrome::FaviconID ThumbnailDatabase::AddFavicon(
+favicon_base::FaviconID ThumbnailDatabase::AddFavicon(
     const GURL& icon_url,
-    chrome::IconType icon_type) {
+    favicon_base::IconType icon_type) {
 
   sql::Statement statement(db_.GetCachedStatement(SQL_FROM_HERE,
       "INSERT INTO favicons (url, icon_type) VALUES (?, ?)"));
@@ -853,20 +853,20 @@
   return db_.GetLastInsertRowId();
 }
 
-chrome::FaviconID ThumbnailDatabase::AddFavicon(
+favicon_base::FaviconID ThumbnailDatabase::AddFavicon(
     const GURL& icon_url,
-    chrome::IconType icon_type,
+    favicon_base::IconType icon_type,
     const scoped_refptr<base::RefCountedMemory>& icon_data,
     base::Time time,
     const gfx::Size& pixel_size) {
-  chrome::FaviconID icon_id = AddFavicon(icon_url, icon_type);
+  favicon_base::FaviconID icon_id = AddFavicon(icon_url, icon_type);
   if (!icon_id || !AddFaviconBitmap(icon_id, icon_data, time, pixel_size))
     return 0;
 
   return icon_id;
 }
 
-bool ThumbnailDatabase::DeleteFavicon(chrome::FaviconID id) {
+bool ThumbnailDatabase::DeleteFavicon(favicon_base::FaviconID id) {
   sql::Statement statement;
   statement.Assign(db_.GetCachedStatement(SQL_FROM_HERE,
       "DELETE FROM favicons WHERE id = ?"));
@@ -933,8 +933,9 @@
   return result;
 }
 
-IconMappingID ThumbnailDatabase::AddIconMapping(const GURL& page_url,
-                                                chrome::FaviconID icon_id) {
+IconMappingID ThumbnailDatabase::AddIconMapping(
+    const GURL& page_url,
+    favicon_base::FaviconID icon_id) {
   const char kSql[] =
       "INSERT INTO icon_mapping (page_url, icon_id) VALUES (?, ?)";
   sql::Statement statement(db_.GetCachedStatement(SQL_FROM_HERE, kSql));
@@ -948,7 +949,7 @@
 }
 
 bool ThumbnailDatabase::UpdateIconMapping(IconMappingID mapping_id,
-                                          chrome::FaviconID icon_id) {
+                                          favicon_base::FaviconID icon_id) {
   sql::Statement statement(db_.GetCachedStatement(SQL_FROM_HERE,
       "UPDATE icon_mapping SET icon_id=? WHERE id=?"));
   statement.BindInt64(0, icon_id);
@@ -973,7 +974,7 @@
   return statement.Run();
 }
 
-bool ThumbnailDatabase::HasMappingFor(chrome::FaviconID id) {
+bool ThumbnailDatabase::HasMappingFor(favicon_base::FaviconID id) {
   sql::Statement statement(db_.GetCachedStatement(SQL_FROM_HERE,
       "SELECT id FROM icon_mapping "
       "WHERE icon_id=?"));
@@ -1006,7 +1007,7 @@
 }
 
 bool ThumbnailDatabase::InitIconMappingEnumerator(
-    chrome::IconType type,
+    favicon_base::IconType type,
     IconMappingEnumerator* enumerator) {
   DCHECK(!enumerator->statement_.is_valid());
   enumerator->statement_.Assign(db_.GetCachedStatement(
diff --git a/chrome/browser/history/thumbnail_database.h b/chrome/browser/history/thumbnail_database.h
index f5e9fd2..cc6324f 100644
--- a/chrome/browser/history/thumbnail_database.h
+++ b/chrome/browser/history/thumbnail_database.h
@@ -68,12 +68,12 @@
   // favicon_bitmaps table. The pixel sizes are a subset of the sizes in the
   // 'sizes' field of the favicons table for |icon_id|.
   bool GetFaviconBitmapIDSizes(
-      chrome::FaviconID icon_id,
+      favicon_base::FaviconID icon_id,
       std::vector<FaviconBitmapIDSize>* bitmap_id_sizes);
 
   // Returns true if there are any matched bitmaps for the given |icon_id|. All
   // matched results are returned if |favicon_bitmaps| is not NULL.
-  bool GetFaviconBitmaps(chrome::FaviconID icon_id,
+  bool GetFaviconBitmaps(favicon_base::FaviconID icon_id,
                          std::vector<FaviconBitmap>* favicon_bitmaps);
 
   // Gets the last updated time, bitmap data, and pixel size of the favicon
@@ -92,7 +92,7 @@
   // |pixel_size| is the pixel dimensions of |icon_data|.
   // Returns the id of the added bitmap or 0 if unsuccessful.
   FaviconBitmapID AddFaviconBitmap(
-      chrome::FaviconID icon_id,
+      favicon_base::FaviconID icon_id,
       const scoped_refptr<base::RefCountedMemory>& icon_data,
       base::Time time,
       const gfx::Size& pixel_size);
@@ -117,7 +117,7 @@
 
   // Sets the the favicon as out of date. This will set |last_updated| for all
   // of the bitmaps for |icon_id| to be out of date.
-  bool SetFaviconOutOfDate(chrome::FaviconID icon_id);
+  bool SetFaviconOutOfDate(favicon_base::FaviconID icon_id);
 
   // Returns the id of the entry in the favicon database with the specified url
   // and icon type. If |required_icon_type| contains multiple icon types and
@@ -126,31 +126,32 @@
   // FAVICON, and the icon type is returned in icon_type parameter if it is not
   // NULL.
   // Returns 0 if no entry exists for the specified url.
-  chrome::FaviconID GetFaviconIDForFaviconURL(const GURL& icon_url,
-                                              int required_icon_type,
-                                              chrome::IconType* icon_type);
+  favicon_base::FaviconID GetFaviconIDForFaviconURL(
+      const GURL& icon_url,
+      int required_icon_type,
+      favicon_base::IconType* icon_type);
 
   // Gets the icon_url, icon_type and sizes for the specified |icon_id|.
-  bool GetFaviconHeader(chrome::FaviconID icon_id,
+  bool GetFaviconHeader(favicon_base::FaviconID icon_id,
                         GURL* icon_url,
-                        chrome::IconType* icon_type);
+                        favicon_base::IconType* icon_type);
 
   // Adds favicon with |icon_url|, |icon_type| and |favicon_sizes| to the
   // favicon db, returning its id.
-  chrome::FaviconID AddFavicon(const GURL& icon_url,
-                               chrome::IconType icon_type);
+  favicon_base::FaviconID AddFavicon(const GURL& icon_url,
+                                     favicon_base::IconType icon_type);
 
   // Adds a favicon with a single bitmap. This call is equivalent to calling
   // AddFavicon and AddFaviconBitmap.
-  chrome::FaviconID AddFavicon(
+  favicon_base::FaviconID AddFavicon(
       const GURL& icon_url,
-      chrome::IconType icon_type,
+      favicon_base::IconType icon_type,
       const scoped_refptr<base::RefCountedMemory>& icon_data,
       base::Time time,
       const gfx::Size& pixel_size);
 
   // Delete the favicon with the provided id. Returns false on failure
-  bool DeleteFavicon(chrome::FaviconID id);
+  bool DeleteFavicon(favicon_base::FaviconID id);
 
   // Icon Mapping --------------------------------------------------------------
   //
@@ -178,12 +179,14 @@
 
   // Adds a mapping between the given page_url and icon_id.
   // Returns the new mapping id if the adding succeeds, otherwise 0 is returned.
-  IconMappingID AddIconMapping(const GURL& page_url, chrome::FaviconID icon_id);
+  IconMappingID AddIconMapping(const GURL& page_url,
+                               favicon_base::FaviconID icon_id);
 
   // Updates the page and icon mapping for the given mapping_id with the given
   // icon_id.
   // Returns true if the update succeeded.
-  bool UpdateIconMapping(IconMappingID mapping_id, chrome::FaviconID icon_id);
+  bool UpdateIconMapping(IconMappingID mapping_id,
+                         favicon_base::FaviconID icon_id);
 
   // Deletes the icon mapping entries for the given page url.
   // Returns true if the deletion succeeded.
@@ -194,7 +197,7 @@
   bool DeleteIconMapping(IconMappingID mapping_id);
 
   // Checks whether a favicon is used by any URLs in the database.
-  bool HasMappingFor(chrome::FaviconID id);
+  bool HasMappingFor(favicon_base::FaviconID id);
 
   // Clones the existing mappings from |old_page_url| if |new_page_url| has no
   // mappings. Otherwise, will leave mappings alone.
@@ -221,7 +224,7 @@
   };
 
   // Return all icon mappings of the given |icon_type|.
-  bool InitIconMappingEnumerator(chrome::IconType type,
+  bool InitIconMappingEnumerator(favicon_base::IconType type,
                                  IconMappingEnumerator* enumerator);
 
   // Remove all data except that associated with the passed page urls.
diff --git a/chrome/browser/history/thumbnail_database_unittest.cc b/chrome/browser/history/thumbnail_database_unittest.cc
index 9146110..99a3e53 100644
--- a/chrome/browser/history/thumbnail_database_unittest.cc
+++ b/chrome/browser/history/thumbnail_database_unittest.cc
@@ -99,7 +99,7 @@
 WARN_UNUSED_RESULT bool CheckPageHasIcon(
     ThumbnailDatabase* db,
     const GURL& page_url,
-    chrome::IconType expected_icon_type,
+    favicon_base::IconType expected_icon_type,
     const GURL& expected_icon_url,
     const gfx::Size& expected_icon_size,
     size_t expected_icon_contents_size,
@@ -202,11 +202,8 @@
 
   GURL url("http://google.com");
   base::Time time = base::Time::Now();
-  chrome::FaviconID id = db.AddFavicon(url,
-                                       chrome::TOUCH_ICON,
-                                       favicon,
-                                       time,
-                                       gfx::Size());
+  favicon_base::FaviconID id =
+      db.AddFavicon(url, favicon_base::TOUCH_ICON, favicon, time, gfx::Size());
   EXPECT_NE(0, id);
 
   EXPECT_NE(0, db.AddIconMapping(url, id));
@@ -223,8 +220,7 @@
   db.BeginTransaction();
 
   GURL url("http://google.com");
-  chrome::FaviconID id =
-      db.AddFavicon(url, chrome::TOUCH_ICON);
+  favicon_base::FaviconID id = db.AddFavicon(url, favicon_base::TOUCH_ICON);
 
   EXPECT_LT(0, db.AddIconMapping(url, id));
   std::vector<IconMapping> icon_mapping;
@@ -234,8 +230,8 @@
   EXPECT_EQ(id, icon_mapping.front().icon_id);
 
   GURL url1("http://www.google.com/");
-  chrome::FaviconID new_id =
-      db.AddFavicon(url1, chrome::TOUCH_ICON);
+  favicon_base::FaviconID new_id =
+      db.AddFavicon(url1, favicon_base::TOUCH_ICON);
   EXPECT_TRUE(db.UpdateIconMapping(icon_mapping.front().mapping_id, new_id));
 
   icon_mapping.clear();
@@ -255,27 +251,25 @@
   scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data));
 
   GURL url("http://google.com");
-  chrome::FaviconID id =
-      db.AddFavicon(url, chrome::TOUCH_ICON);
+  favicon_base::FaviconID id = db.AddFavicon(url, favicon_base::TOUCH_ICON);
   base::Time time = base::Time::Now();
   db.AddFaviconBitmap(id, favicon, time, gfx::Size());
   EXPECT_LT(0, db.AddIconMapping(url, id));
 
-  chrome::FaviconID id2 =
-      db.AddFavicon(url, chrome::FAVICON);
+  favicon_base::FaviconID id2 = db.AddFavicon(url, favicon_base::FAVICON);
   EXPECT_LT(0, db.AddIconMapping(url, id2));
   ASSERT_NE(id, id2);
 
   std::vector<IconMapping> icon_mapping;
   EXPECT_TRUE(db.GetIconMappingsForPageURL(url, &icon_mapping));
   ASSERT_EQ(2u, icon_mapping.size());
-  EXPECT_EQ(icon_mapping.front().icon_type, chrome::TOUCH_ICON);
-  EXPECT_TRUE(db.GetIconMappingsForPageURL(url, chrome::FAVICON, NULL));
+  EXPECT_EQ(icon_mapping.front().icon_type, favicon_base::TOUCH_ICON);
+  EXPECT_TRUE(db.GetIconMappingsForPageURL(url, favicon_base::FAVICON, NULL));
 
   db.DeleteIconMappings(url);
 
   EXPECT_FALSE(db.GetIconMappingsForPageURL(url, NULL));
-  EXPECT_FALSE(db.GetIconMappingsForPageURL(url, chrome::FAVICON, NULL));
+  EXPECT_FALSE(db.GetIconMappingsForPageURL(url, favicon_base::FAVICON, NULL));
 }
 
 TEST_F(ThumbnailDatabaseTest, GetIconMappingsForPageURL) {
@@ -288,13 +282,13 @@
 
   GURL url("http://google.com");
 
-  chrome::FaviconID id1 = db.AddFavicon(url, chrome::TOUCH_ICON);
+  favicon_base::FaviconID id1 = db.AddFavicon(url, favicon_base::TOUCH_ICON);
   base::Time time = base::Time::Now();
   db.AddFaviconBitmap(id1, favicon, time, kSmallSize);
   db.AddFaviconBitmap(id1, favicon, time, kLargeSize);
   EXPECT_LT(0, db.AddIconMapping(url, id1));
 
-  chrome::FaviconID id2 = db.AddFavicon(url, chrome::FAVICON);
+  favicon_base::FaviconID id2 = db.AddFavicon(url, favicon_base::FAVICON);
   EXPECT_NE(id1, id2);
   db.AddFaviconBitmap(id2, favicon, time, kSmallSize);
   EXPECT_LT(0, db.AddIconMapping(url, id2));
@@ -325,16 +319,19 @@
   scoped_refptr<base::RefCountedStaticMemory> favicon2(
       new base::RefCountedStaticMemory(kBlob2, sizeof(kBlob2)));
 
-  chrome::FaviconID kept_id1 = db.AddFavicon(kIconUrl1, chrome::FAVICON);
+  favicon_base::FaviconID kept_id1 =
+      db.AddFavicon(kIconUrl1, favicon_base::FAVICON);
   db.AddFaviconBitmap(kept_id1, favicon1, base::Time::Now(), kLargeSize);
   db.AddIconMapping(kPageUrl1, kept_id1);
   db.AddIconMapping(kPageUrl3, kept_id1);
 
-  chrome::FaviconID unkept_id = db.AddFavicon(kIconUrl2, chrome::FAVICON);
+  favicon_base::FaviconID unkept_id =
+      db.AddFavicon(kIconUrl2, favicon_base::FAVICON);
   db.AddFaviconBitmap(unkept_id, favicon1, base::Time::Now(), kLargeSize);
   db.AddIconMapping(kPageUrl2, unkept_id);
 
-  chrome::FaviconID kept_id2 = db.AddFavicon(kIconUrl5, chrome::FAVICON);
+  favicon_base::FaviconID kept_id2 =
+      db.AddFavicon(kIconUrl5, favicon_base::FAVICON);
   db.AddFaviconBitmap(kept_id2, favicon2, base::Time::Now(), kLargeSize);
   db.AddIconMapping(kPageUrl5, kept_id2);
 
@@ -349,12 +346,27 @@
   EXPECT_TRUE(db.RetainDataForPageUrls(pages_to_keep));
 
   // Mappings from the retained urls should be left.
-  EXPECT_TRUE(CheckPageHasIcon(&db, kPageUrl1, chrome::FAVICON,
-                               kIconUrl1, kLargeSize, sizeof(kBlob1), kBlob1));
-  EXPECT_TRUE(CheckPageHasIcon(&db, kPageUrl3, chrome::FAVICON,
-                               kIconUrl1, kLargeSize, sizeof(kBlob1), kBlob1));
-  EXPECT_TRUE(CheckPageHasIcon(&db, kPageUrl5, chrome::FAVICON,
-                               kIconUrl5, kLargeSize, sizeof(kBlob2), kBlob2));
+  EXPECT_TRUE(CheckPageHasIcon(&db,
+                               kPageUrl1,
+                               favicon_base::FAVICON,
+                               kIconUrl1,
+                               kLargeSize,
+                               sizeof(kBlob1),
+                               kBlob1));
+  EXPECT_TRUE(CheckPageHasIcon(&db,
+                               kPageUrl3,
+                               favicon_base::FAVICON,
+                               kIconUrl1,
+                               kLargeSize,
+                               sizeof(kBlob1),
+                               kBlob1));
+  EXPECT_TRUE(CheckPageHasIcon(&db,
+                               kPageUrl5,
+                               favicon_base::FAVICON,
+                               kIconUrl5,
+                               kLargeSize,
+                               sizeof(kBlob2),
+                               kBlob2));
 
   // The one not retained should be missing.
   EXPECT_FALSE(db.GetFaviconIDForFaviconURL(kPageUrl2, false, NULL));
@@ -378,7 +390,7 @@
       new base::RefCountedBytes(data2));
 
   GURL url("http://google.com");
-  chrome::FaviconID id = db.AddFavicon(url, chrome::FAVICON);
+  favicon_base::FaviconID id = db.AddFavicon(url, favicon_base::FAVICON);
   base::Time last_updated = base::Time::Now();
   db.AddFaviconBitmap(id, favicon1, last_updated, kSmallSize);
   db.AddFaviconBitmap(id, favicon2, last_updated, kLargeSize);
@@ -402,18 +414,15 @@
   GURL icon_url("http://google.com/favicon.ico");
   base::Time time = base::Time::Now();
 
-  chrome::FaviconID id = db.AddFavicon(icon_url,
-                                       chrome::FAVICON,
-                                       favicon,
-                                       time,
-                                       gfx::Size());
+  favicon_base::FaviconID id = db.AddFavicon(
+      icon_url, favicon_base::FAVICON, favicon, time, gfx::Size());
   EXPECT_NE(0, db.AddIconMapping(page_url, id));
   std::vector<IconMapping> icon_mappings;
   EXPECT_TRUE(db.GetIconMappingsForPageURL(page_url, &icon_mappings));
 
   EXPECT_EQ(page_url, icon_mappings.front().page_url);
   EXPECT_EQ(id, icon_mappings.front().icon_id);
-  EXPECT_EQ(chrome::FAVICON, icon_mappings.front().icon_type);
+  EXPECT_EQ(favicon_base::FAVICON, icon_mappings.front().icon_type);
   EXPECT_EQ(icon_url, icon_mappings.front().icon_url);
 
   // Add a touch icon
@@ -421,11 +430,8 @@
   scoped_refptr<base::RefCountedBytes> favicon2 =
       new base::RefCountedBytes(data);
 
-  chrome::FaviconID id2 = db.AddFavicon(icon_url,
-                                        chrome::TOUCH_ICON,
-                                        favicon2,
-                                        time,
-                                        gfx::Size());
+  favicon_base::FaviconID id2 = db.AddFavicon(
+      icon_url, favicon_base::TOUCH_ICON, favicon2, time, gfx::Size());
   EXPECT_NE(0, db.AddIconMapping(page_url, id2));
 
   icon_mappings.clear();
@@ -433,18 +439,19 @@
 
   EXPECT_EQ(page_url, icon_mappings.front().page_url);
   EXPECT_EQ(id2, icon_mappings.front().icon_id);
-  EXPECT_EQ(chrome::TOUCH_ICON, icon_mappings.front().icon_type);
+  EXPECT_EQ(favicon_base::TOUCH_ICON, icon_mappings.front().icon_type);
   EXPECT_EQ(icon_url, icon_mappings.front().icon_url);
 
   // Add a touch precomposed icon
   scoped_refptr<base::RefCountedBytes> favicon3 =
       new base::RefCountedBytes(data2);
 
-  chrome::FaviconID id3 = db.AddFavicon(icon_url,
-                                        chrome::TOUCH_PRECOMPOSED_ICON,
-                                        favicon3,
-                                        time,
-                                        gfx::Size());
+  favicon_base::FaviconID id3 =
+      db.AddFavicon(icon_url,
+                    favicon_base::TOUCH_PRECOMPOSED_ICON,
+                    favicon3,
+                    time,
+                    gfx::Size());
   EXPECT_NE(0, db.AddIconMapping(page_url, id3));
 
   icon_mappings.clear();
@@ -452,7 +459,8 @@
 
   EXPECT_EQ(page_url, icon_mappings.front().page_url);
   EXPECT_EQ(id3, icon_mappings.front().icon_id);
-  EXPECT_EQ(chrome::TOUCH_PRECOMPOSED_ICON, icon_mappings.front().icon_type);
+  EXPECT_EQ(favicon_base::TOUCH_PRECOMPOSED_ICON,
+            icon_mappings.front().icon_type);
   EXPECT_EQ(icon_url, icon_mappings.front().icon_url);
 }
 
@@ -467,25 +475,16 @@
   scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data));
   base::Time time = base::Time::Now();
 
-  chrome::FaviconID id1 = db.AddFavicon(url,
-                                        chrome::FAVICON,
-                                        favicon,
-                                        time,
-                                        gfx::Size());
+  favicon_base::FaviconID id1 =
+      db.AddFavicon(url, favicon_base::FAVICON, favicon, time, gfx::Size());
   EXPECT_NE(0, db.AddIconMapping(url, id1));
 
-  chrome::FaviconID id2 = db.AddFavicon(url,
-                                        chrome::TOUCH_ICON,
-                                        favicon,
-                                        time,
-                                        gfx::Size());
+  favicon_base::FaviconID id2 =
+      db.AddFavicon(url, favicon_base::TOUCH_ICON, favicon, time, gfx::Size());
   EXPECT_NE(0, db.AddIconMapping(url, id2));
 
-  chrome::FaviconID id3 = db.AddFavicon(url,
-                                        chrome::TOUCH_ICON,
-                                        favicon,
-                                        time,
-                                        gfx::Size());
+  favicon_base::FaviconID id3 =
+      db.AddFavicon(url, favicon_base::TOUCH_ICON, favicon, time, gfx::Size());
   EXPECT_NE(0, db.AddIconMapping(url, id3));
 
   // Only the mappings for favicons of type TOUCH_ICON should be returned as
@@ -493,7 +492,8 @@
   std::vector<IconMapping> icon_mappings;
   EXPECT_TRUE(db.GetIconMappingsForPageURL(
       url,
-      chrome::FAVICON | chrome::TOUCH_ICON | chrome::TOUCH_PRECOMPOSED_ICON,
+      favicon_base::FAVICON | favicon_base::TOUCH_ICON |
+          favicon_base::TOUCH_PRECOMPOSED_ICON,
       &icon_mappings));
 
   EXPECT_EQ(2u, icon_mappings.size());
@@ -505,8 +505,8 @@
   }
 
   icon_mappings.clear();
-  EXPECT_TRUE(
-      db.GetIconMappingsForPageURL(url, chrome::TOUCH_ICON, &icon_mappings));
+  EXPECT_TRUE(db.GetIconMappingsForPageURL(
+      url, favicon_base::TOUCH_ICON, &icon_mappings));
   if (id2 == icon_mappings[0].icon_id) {
     EXPECT_EQ(id3, icon_mappings[1].icon_id);
   } else {
@@ -516,7 +516,7 @@
 
   icon_mappings.clear();
   EXPECT_TRUE(
-      db.GetIconMappingsForPageURL(url, chrome::FAVICON, &icon_mappings));
+      db.GetIconMappingsForPageURL(url, favicon_base::FAVICON, &icon_mappings));
   EXPECT_EQ(1u, icon_mappings.size());
   EXPECT_EQ(id1, icon_mappings[0].icon_id);
 }
@@ -531,29 +531,31 @@
 
   // Add a favicon which will have icon_mappings
   base::Time time = base::Time::Now();
-  chrome::FaviconID id1 = db.AddFavicon(GURL("http://google.com"),
-                                        chrome::FAVICON,
-                                        favicon,
-                                        time,
-                                        gfx::Size());
+  favicon_base::FaviconID id1 = db.AddFavicon(GURL("http://google.com"),
+                                              favicon_base::FAVICON,
+                                              favicon,
+                                              time,
+                                              gfx::Size());
   EXPECT_NE(id1, 0);
 
   // Add another type of favicon
   time = base::Time::Now();
-  chrome::FaviconID id2 = db.AddFavicon(GURL("http://www.google.com/icon"),
-                                        chrome::TOUCH_ICON,
-                                        favicon,
-                                        time,
-                                        gfx::Size());
+  favicon_base::FaviconID id2 =
+      db.AddFavicon(GURL("http://www.google.com/icon"),
+                    favicon_base::TOUCH_ICON,
+                    favicon,
+                    time,
+                    gfx::Size());
   EXPECT_NE(id2, 0);
 
   // Add 3rd favicon
   time = base::Time::Now();
-  chrome::FaviconID id3 = db.AddFavicon(GURL("http://www.google.com/icon"),
-                                        chrome::TOUCH_ICON,
-                                        favicon,
-                                        time,
-                                        gfx::Size());
+  favicon_base::FaviconID id3 =
+      db.AddFavicon(GURL("http://www.google.com/icon"),
+                    favicon_base::TOUCH_ICON,
+                    favicon,
+                    time,
+                    gfx::Size());
   EXPECT_NE(id3, 0);
 
   // Add 2 icon mapping
@@ -581,22 +583,22 @@
   scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data));
 
   // Add a favicon which will have icon_mappings
-  chrome::FaviconID id1 = db.AddFavicon(
-      GURL("http://google.com"), chrome::FAVICON);
+  favicon_base::FaviconID id1 =
+      db.AddFavicon(GURL("http://google.com"), favicon_base::FAVICON);
   EXPECT_NE(0, id1);
   base::Time time = base::Time::Now();
   db.AddFaviconBitmap(id1, favicon, time, gfx::Size());
 
   // Add another type of favicon
-  chrome::FaviconID id2 = db.AddFavicon(GURL("http://www.google.com/icon"),
-                                        chrome::TOUCH_ICON);
+  favicon_base::FaviconID id2 = db.AddFavicon(
+      GURL("http://www.google.com/icon"), favicon_base::TOUCH_ICON);
   EXPECT_NE(0, id2);
   time = base::Time::Now();
   db.AddFaviconBitmap(id2, favicon, time, gfx::Size());
 
   // Add 3rd favicon
-  chrome::FaviconID id3 = db.AddFavicon(GURL("http://www.google.com/icon"),
-                                        chrome::TOUCH_ICON);
+  favicon_base::FaviconID id3 = db.AddFavicon(
+      GURL("http://www.google.com/icon"), favicon_base::TOUCH_ICON);
   EXPECT_NE(0, id3);
   time = base::Time::Now();
   db.AddFaviconBitmap(id3, favicon, time, gfx::Size());
@@ -663,14 +665,34 @@
   ASSERT_TRUE(db.get() != NULL);
   VerifyTablesAndColumns(&db->db_);
 
-  EXPECT_TRUE(CheckPageHasIcon(db.get(), kPageUrl1, chrome::FAVICON,
-                               kIconUrl1, gfx::Size(), sizeof(kBlob1), kBlob1));
-  EXPECT_TRUE(CheckPageHasIcon(db.get(), kPageUrl2, chrome::FAVICON,
-                               kIconUrl2, gfx::Size(), sizeof(kBlob2), kBlob2));
-  EXPECT_TRUE(CheckPageHasIcon(db.get(), kPageUrl3, chrome::FAVICON,
-                               kIconUrl1, gfx::Size(), sizeof(kBlob1), kBlob1));
-  EXPECT_TRUE(CheckPageHasIcon(db.get(), kPageUrl3, chrome::TOUCH_ICON,
-                               kIconUrl3, gfx::Size(), sizeof(kBlob2), kBlob2));
+  EXPECT_TRUE(CheckPageHasIcon(db.get(),
+                               kPageUrl1,
+                               favicon_base::FAVICON,
+                               kIconUrl1,
+                               gfx::Size(),
+                               sizeof(kBlob1),
+                               kBlob1));
+  EXPECT_TRUE(CheckPageHasIcon(db.get(),
+                               kPageUrl2,
+                               favicon_base::FAVICON,
+                               kIconUrl2,
+                               gfx::Size(),
+                               sizeof(kBlob2),
+                               kBlob2));
+  EXPECT_TRUE(CheckPageHasIcon(db.get(),
+                               kPageUrl3,
+                               favicon_base::FAVICON,
+                               kIconUrl1,
+                               gfx::Size(),
+                               sizeof(kBlob1),
+                               kBlob1));
+  EXPECT_TRUE(CheckPageHasIcon(db.get(),
+                               kPageUrl3,
+                               favicon_base::TOUCH_ICON,
+                               kIconUrl3,
+                               gfx::Size(),
+                               sizeof(kBlob2),
+                               kBlob2));
 }
 
 // Test loading version 6 database.
@@ -679,14 +701,34 @@
   ASSERT_TRUE(db.get() != NULL);
   VerifyTablesAndColumns(&db->db_);
 
-  EXPECT_TRUE(CheckPageHasIcon(db.get(), kPageUrl1, chrome::FAVICON,
-                               kIconUrl1, kLargeSize, sizeof(kBlob1), kBlob1));
-  EXPECT_TRUE(CheckPageHasIcon(db.get(), kPageUrl2, chrome::FAVICON,
-                               kIconUrl2, kLargeSize, sizeof(kBlob2), kBlob2));
-  EXPECT_TRUE(CheckPageHasIcon(db.get(), kPageUrl3, chrome::FAVICON,
-                               kIconUrl1, kLargeSize, sizeof(kBlob1), kBlob1));
-  EXPECT_TRUE(CheckPageHasIcon(db.get(), kPageUrl3, chrome::TOUCH_ICON,
-                               kIconUrl3, kLargeSize, sizeof(kBlob2), kBlob2));
+  EXPECT_TRUE(CheckPageHasIcon(db.get(),
+                               kPageUrl1,
+                               favicon_base::FAVICON,
+                               kIconUrl1,
+                               kLargeSize,
+                               sizeof(kBlob1),
+                               kBlob1));
+  EXPECT_TRUE(CheckPageHasIcon(db.get(),
+                               kPageUrl2,
+                               favicon_base::FAVICON,
+                               kIconUrl2,
+                               kLargeSize,
+                               sizeof(kBlob2),
+                               kBlob2));
+  EXPECT_TRUE(CheckPageHasIcon(db.get(),
+                               kPageUrl3,
+                               favicon_base::FAVICON,
+                               kIconUrl1,
+                               kLargeSize,
+                               sizeof(kBlob1),
+                               kBlob1));
+  EXPECT_TRUE(CheckPageHasIcon(db.get(),
+                               kPageUrl3,
+                               favicon_base::TOUCH_ICON,
+                               kIconUrl3,
+                               kLargeSize,
+                               sizeof(kBlob2),
+                               kBlob2));
 }
 
 // Test loading version 7 database.
@@ -695,14 +737,34 @@
   ASSERT_TRUE(db.get() != NULL);
   VerifyTablesAndColumns(&db->db_);
 
-  EXPECT_TRUE(CheckPageHasIcon(db.get(), kPageUrl1, chrome::FAVICON,
-                               kIconUrl1, kLargeSize, sizeof(kBlob1), kBlob1));
-  EXPECT_TRUE(CheckPageHasIcon(db.get(), kPageUrl2, chrome::FAVICON,
-                               kIconUrl2, kLargeSize, sizeof(kBlob2), kBlob2));
-  EXPECT_TRUE(CheckPageHasIcon(db.get(), kPageUrl3, chrome::FAVICON,
-                               kIconUrl1, kLargeSize, sizeof(kBlob1), kBlob1));
-  EXPECT_TRUE(CheckPageHasIcon(db.get(), kPageUrl3, chrome::TOUCH_ICON,
-                               kIconUrl3, kLargeSize, sizeof(kBlob2), kBlob2));
+  EXPECT_TRUE(CheckPageHasIcon(db.get(),
+                               kPageUrl1,
+                               favicon_base::FAVICON,
+                               kIconUrl1,
+                               kLargeSize,
+                               sizeof(kBlob1),
+                               kBlob1));
+  EXPECT_TRUE(CheckPageHasIcon(db.get(),
+                               kPageUrl2,
+                               favicon_base::FAVICON,
+                               kIconUrl2,
+                               kLargeSize,
+                               sizeof(kBlob2),
+                               kBlob2));
+  EXPECT_TRUE(CheckPageHasIcon(db.get(),
+                               kPageUrl3,
+                               favicon_base::FAVICON,
+                               kIconUrl1,
+                               kLargeSize,
+                               sizeof(kBlob1),
+                               kBlob1));
+  EXPECT_TRUE(CheckPageHasIcon(db.get(),
+                               kPageUrl3,
+                               favicon_base::TOUCH_ICON,
+                               kIconUrl3,
+                               kLargeSize,
+                               sizeof(kBlob2),
+                               kBlob2));
 }
 
 TEST_F(ThumbnailDatabaseTest, Recovery) {
@@ -729,12 +791,20 @@
     ThumbnailDatabase db;
     ASSERT_EQ(sql::INIT_OK, db.Init(file_name_));
 
-    EXPECT_TRUE(
-        CheckPageHasIcon(&db, kPageUrl1, chrome::FAVICON,
-                         kIconUrl1, kLargeSize, sizeof(kBlob1), kBlob1));
-    EXPECT_TRUE(
-        CheckPageHasIcon(&db, kPageUrl2, chrome::FAVICON,
-                         kIconUrl2, kLargeSize, sizeof(kBlob2), kBlob2));
+    EXPECT_TRUE(CheckPageHasIcon(&db,
+                                 kPageUrl1,
+                                 favicon_base::FAVICON,
+                                 kIconUrl1,
+                                 kLargeSize,
+                                 sizeof(kBlob1),
+                                 kBlob1));
+    EXPECT_TRUE(CheckPageHasIcon(&db,
+                                 kPageUrl2,
+                                 favicon_base::FAVICON,
+                                 kIconUrl2,
+                                 kLargeSize,
+                                 sizeof(kBlob2),
+                                 kBlob2));
   }
 
   // Corrupt the |icon_mapping.page_url| index by deleting an element
@@ -792,9 +862,13 @@
     EXPECT_FALSE(db.GetIconMappingsForPageURL(kPageUrl2, NULL));
 
     // Other data was retained by recovery.
-    EXPECT_TRUE(
-        CheckPageHasIcon(&db, kPageUrl1, chrome::FAVICON,
-                         kIconUrl1, kLargeSize, sizeof(kBlob1), kBlob1));
+    EXPECT_TRUE(CheckPageHasIcon(&db,
+                                 kPageUrl1,
+                                 favicon_base::FAVICON,
+                                 kIconUrl1,
+                                 kLargeSize,
+                                 sizeof(kBlob1),
+                                 kBlob1));
   }
 
   // Corrupt the database again by adjusting the header.
@@ -818,9 +892,13 @@
     ASSERT_EQ(sql::INIT_OK, db.Init(file_name_));
 
     EXPECT_FALSE(db.GetIconMappingsForPageURL(kPageUrl2, NULL));
-    EXPECT_TRUE(
-        CheckPageHasIcon(&db, kPageUrl1, chrome::FAVICON,
-                         kIconUrl1, kLargeSize, sizeof(kBlob1), kBlob1));
+    EXPECT_TRUE(CheckPageHasIcon(&db,
+                                 kPageUrl1,
+                                 favicon_base::FAVICON,
+                                 kIconUrl1,
+                                 kLargeSize,
+                                 sizeof(kBlob1),
+                                 kBlob1));
 
     ASSERT_TRUE(ignore_errors.CheckIgnoredErrors());
   }
diff --git a/chrome/browser/history/url_database.cc b/chrome/browser/history/url_database.cc
index 840a382..605213b 100644
--- a/chrome/browser/history/url_database.cc
+++ b/chrome/browser/history/url_database.cc
@@ -362,7 +362,7 @@
 
 bool URLDatabase::GetTextMatches(const base::string16& query,
                                  URLRows* results) {
-  ScopedVector<QueryNode> query_nodes;
+  ScopedVector<query_parser::QueryNode> query_nodes;
   query_parser_.ParseQueryNodes(query, &query_nodes.get());
 
   results->clear();
@@ -370,7 +370,7 @@
       "SELECT" HISTORY_URL_ROW_FIELDS "FROM urls WHERE hidden = 0"));
 
   while (statement.Step()) {
-    std::vector<QueryWord> query_words;
+    query_parser::QueryWordVector query_words;
     base::string16 url = base::i18n::ToLower(statement.ColumnString16(1));
     query_parser_.ExtractQueryWords(url, &query_words);
     GURL gurl(url);
diff --git a/chrome/browser/history/url_database.h b/chrome/browser/history/url_database.h
index be933aa..7c1a4b0 100644
--- a/chrome/browser/history/url_database.h
+++ b/chrome/browser/history/url_database.h
@@ -7,8 +7,8 @@
 
 #include "base/basictypes.h"
 #include "chrome/browser/history/history_types.h"
-#include "chrome/browser/history/query_parser.h"
 #include "chrome/browser/search_engines/template_url_id.h"
+#include "components/query_parser/query_parser.h"
 #include "sql/statement.h"
 
 class GURL;
@@ -290,7 +290,7 @@
   // have keyword search terms.
   bool has_keyword_search_terms_;
 
-  QueryParser query_parser_;
+  query_parser::QueryParser query_parser_;
 
   DISALLOW_COPY_AND_ASSIGN(URLDatabase);
 };
diff --git a/chrome/browser/history/url_index_private_data.cc b/chrome/browser/history/url_index_private_data.cc
index bcf94d5..d592f17 100644
--- a/chrome/browser/history/url_index_private_data.cc
+++ b/chrome/browser/history/url_index_private_data.cc
@@ -22,11 +22,12 @@
 #include "base/time/time.h"
 #include "chrome/browser/autocomplete/autocomplete_provider.h"
 #include "chrome/browser/autocomplete/url_prefix.h"
-#include "chrome/browser/bookmarks/bookmark_service.h"
+#include "chrome/browser/bookmarks/bookmark_utils.h"
 #include "chrome/browser/history/history_database.h"
 #include "chrome/browser/history/history_db_task.h"
 #include "chrome/browser/history/history_service.h"
 #include "chrome/browser/history/in_memory_url_index.h"
+#include "components/bookmarks/core/browser/bookmark_service.h"
 #include "content/public/browser/notification_details.h"
 #include "content/public/browser/notification_service.h"
 #include "content/public/browser/notification_source.h"
@@ -756,10 +757,12 @@
   HistoryID history_id = static_cast<HistoryID>(row.id());
   // Split URL into individual, unique words then add in the title words.
   const GURL& gurl(row.url());
-  const base::string16& url = CleanUpUrlForMatching(gurl, languages);
+  const base::string16& url =
+      bookmark_utils::CleanUpUrlForMatching(gurl, languages);
   String16Set url_words = String16SetFromString16(url,
       word_starts ? &word_starts->url_word_starts_ : NULL);
-  const base::string16& title = CleanUpTitleForMatching(row.title());
+  const base::string16& title =
+      bookmark_utils::CleanUpTitleForMatching(row.title());
   String16Set title_words = String16SetFromString16(title,
       word_starts ? &word_starts->title_word_starts_ : NULL);
   String16Set words;
@@ -1237,9 +1240,11 @@
          iter != history_info_map_.end(); ++iter) {
       RowWordStarts word_starts;
       const URLRow& row(iter->second.url_row);
-      const base::string16& url = CleanUpUrlForMatching(row.url(), languages);
+      const base::string16& url =
+          bookmark_utils::CleanUpUrlForMatching(row.url(), languages);
       String16VectorFromString16(url, false, &word_starts.url_word_starts_);
-      const base::string16& title = CleanUpTitleForMatching(row.title());
+      const base::string16& title =
+          bookmark_utils::CleanUpTitleForMatching(row.title());
       String16VectorFromString16(title, false, &word_starts.title_word_starts_);
       word_starts_map_[iter->first] = word_starts;
     }
diff --git a/chrome/browser/importer/external_process_importer_client.cc b/chrome/browser/importer/external_process_importer_client.cc
index d9e781a..b47fe22 100644
--- a/chrome/browser/importer/external_process_importer_client.cc
+++ b/chrome/browser/importer/external_process_importer_client.cc
@@ -14,6 +14,7 @@
 #include "chrome/common/importer/profile_import_process_messages.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/utility_process_host.h"
+#include "grit/component_strings.h"
 #include "grit/generated_resources.h"
 #include "ui/base/l10n/l10n_util.h"
 
diff --git a/chrome/browser/importer/ie_importer_browsertest_win.cc b/chrome/browser/importer/ie_importer_browsertest_win.cc
index b04533d..c616744 100644
--- a/chrome/browser/importer/ie_importer_browsertest_win.cc
+++ b/chrome/browser/importer/ie_importer_browsertest_win.cc
@@ -40,7 +40,6 @@
 #include "chrome/common/importer/imported_favicon_usage.h"
 #include "chrome/common/importer/importer_bridge.h"
 #include "chrome/common/importer/importer_data_types.h"
-#include "chrome/common/importer/pstore_declarations.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "chrome/test/base/testing_profile.h"
 #include "components/autofill/core/common/password_form.h"
@@ -212,46 +211,6 @@
   return CreateUrlFileWithFavicon(file, url, base::string16());
 }
 
-void ClearPStoreType(IPStore* pstore, const GUID* type, const GUID* subtype) {
-  base::win::ScopedComPtr<IEnumPStoreItems, NULL> item;
-  HRESULT result = pstore->EnumItems(0, type, subtype, 0, item.Receive());
-  if (result == PST_E_OK) {
-    base::char16* item_name;
-    while (SUCCEEDED(item->Next(1, &item_name, 0))) {
-      pstore->DeleteItem(0, type, subtype, item_name, NULL, 0);
-      CoTaskMemFree(item_name);
-    }
-  }
-  pstore->DeleteSubtype(0, type, subtype, 0);
-  pstore->DeleteType(0, type, 0);
-}
-
-void WritePStore(IPStore* pstore, const GUID* type, const GUID* subtype) {
-  struct PStoreItem {
-    base::char16* name;
-    int data_size;
-    char* data;
-  } items[] = {
-    {L"http://localhost:8080/security/index.htm#ref:StringData", 8,
-     "\x31\x00\x00\x00\x32\x00\x00\x00"},
-    {L"http://localhost:8080/security/index.htm#ref:StringIndex", 20,
-     "\x57\x49\x43\x4b\x18\x00\x00\x00\x02\x00"
-     "\x00\x00\x2f\x00\x74\x00\x01\x00\x00\x00"},
-    {L"user:StringData", 4,
-     "\x31\x00\x00\x00"},
-    {L"user:StringIndex", 20,
-     "\x57\x49\x43\x4b\x18\x00\x00\x00\x01\x00"
-     "\x00\x00\x2f\x00\x74\x00\x00\x00\x00\x00"},
-  };
-
-  for (int i = 0; i < arraysize(items); ++i) {
-    HRESULT res = pstore->WriteItem(0, type, subtype, items[i].name,
-        items[i].data_size, reinterpret_cast<BYTE*>(items[i].data),
-        NULL, 0, 0);
-    ASSERT_TRUE(res == PST_E_OK);
-  }
-}
-
 class TestObserver : public ProfileWriter,
                      public importer::ImporterProgressObserver {
  public:
diff --git a/chrome/browser/importer/profile_writer.cc b/chrome/browser/importer/profile_writer.cc
index 4bc9f70..c543a21 100644
--- a/chrome/browser/importer/profile_writer.cc
+++ b/chrome/browser/importer/profile_writer.cc
@@ -200,9 +200,12 @@
     if (bookmark->is_folder) {
       model->AddFolder(parent, parent->child_count(), bookmark->title);
     } else {
-      model->AddURLWithCreationTime(parent, parent->child_count(),
-                                    bookmark->title, bookmark->url,
-                                    bookmark->creation_time);
+      model->AddURLWithCreationTimeAndMetaInfo(parent,
+                                               parent->child_count(),
+                                               bookmark->title,
+                                               bookmark->url,
+                                               bookmark->creation_time,
+                                               NULL);
     }
   }
 
diff --git a/chrome/browser/importer/profile_writer_unittest.cc b/chrome/browser/importer/profile_writer_unittest.cc
index 8b447a7..51cef04 100644
--- a/chrome/browser/importer/profile_writer_unittest.cc
+++ b/chrome/browser/importer/profile_writer_unittest.cc
@@ -11,7 +11,6 @@
 #include "chrome/browser/bookmarks/bookmark_model.h"
 #include "chrome/browser/bookmarks/bookmark_model_factory.h"
 #include "chrome/browser/bookmarks/bookmark_test_helpers.h"
-#include "chrome/browser/bookmarks/bookmark_title_match.h"
 #include "chrome/browser/bookmarks/bookmark_utils.h"
 #include "chrome/browser/history/history_service.h"
 #include "chrome/browser/history/history_service_factory.h"
@@ -19,6 +18,7 @@
 #include "chrome/browser/importer/importer_unittest_utils.h"
 #include "chrome/common/importer/imported_bookmark_entry.h"
 #include "chrome/test/base/testing_profile.h"
+#include "components/bookmarks/core/browser/bookmark_match.h"
 #include "content/public/test/test_browser_thread.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -80,11 +80,10 @@
       const std::vector<BookmarkService::URLAndTitle>& bookmarks_record,
       BookmarkModel* bookmark_model,
       size_t expected) {
-    std::vector<BookmarkTitleMatch> matches;
+    std::vector<BookmarkMatch> matches;
     for (size_t i = 0; i < bookmarks_record.size(); ++i) {
-      bookmark_model->GetBookmarksWithTitlesMatching(bookmarks_record[i].title,
-                                                     10,
-                                                     &matches);
+      bookmark_model->GetBookmarksMatching(
+          bookmarks_record[i].title, 10, &matches);
       EXPECT_EQ(expected, matches.size());
       matches.clear();
     }
diff --git a/chrome/browser/infobars/confirm_infobar_delegate.cc b/chrome/browser/infobars/confirm_infobar_delegate.cc
index 713c9af..eeff192 100644
--- a/chrome/browser/infobars/confirm_infobar_delegate.cc
+++ b/chrome/browser/infobars/confirm_infobar_delegate.cc
@@ -7,6 +7,8 @@
 #include "grit/generated_resources.h"
 #include "ui/base/l10n/l10n_util.h"
 
+using infobars::InfoBarDelegate;
+
 ConfirmInfoBarDelegate::~ConfirmInfoBarDelegate() {
 }
 
diff --git a/chrome/browser/infobars/confirm_infobar_delegate.h b/chrome/browser/infobars/confirm_infobar_delegate.h
index be0c96f..fe30f27 100644
--- a/chrome/browser/infobars/confirm_infobar_delegate.h
+++ b/chrome/browser/infobars/confirm_infobar_delegate.h
@@ -7,13 +7,15 @@
 
 #include "base/memory/scoped_ptr.h"
 #include "base/strings/string16.h"
-#include "chrome/browser/infobars/infobar_delegate.h"
+#include "components/infobars/core/infobar_delegate.h"
 
+namespace infobars {
 class InfoBar;
+}
 
 // An interface derived from InfoBarDelegate implemented by objects wishing to
 // control a ConfirmInfoBar.
-class ConfirmInfoBarDelegate : public InfoBarDelegate {
+class ConfirmInfoBarDelegate : public infobars::InfoBarDelegate {
  public:
   enum InfoBarButton {
     BUTTON_NONE   = 0,
@@ -64,7 +66,7 @@
   ConfirmInfoBarDelegate();
 
   // Returns a confirm infobar that owns |delegate|.
-  static scoped_ptr<InfoBar> CreateInfoBar(
+  static scoped_ptr<infobars::InfoBar> CreateInfoBar(
       scoped_ptr<ConfirmInfoBarDelegate> delegate);
 
   virtual bool ShouldExpireInternal(
@@ -72,7 +74,8 @@
 
  private:
   // InfoBarDelegate:
-  virtual bool EqualsDelegate(InfoBarDelegate* delegate) const OVERRIDE;
+  virtual bool EqualsDelegate(
+      infobars::InfoBarDelegate* delegate) const OVERRIDE;
   virtual ConfirmInfoBarDelegate* AsConfirmInfoBarDelegate() OVERRIDE;
 
   DISALLOW_COPY_AND_ASSIGN(ConfirmInfoBarDelegate);
diff --git a/chrome/browser/infobars/infobar.cc b/chrome/browser/infobars/infobar.cc
deleted file mode 100644
index 15f04c8..0000000
--- a/chrome/browser/infobars/infobar.cc
+++ /dev/null
@@ -1,175 +0,0 @@
-// Copyright (c) 2011 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 "chrome/browser/infobars/infobar.h"
-
-#include <cmath>
-
-#include "base/logging.h"
-#include "build/build_config.h"
-#include "chrome/browser/infobars/infobar_container.h"
-#include "chrome/browser/infobars/infobar_manager.h"
-#include "ui/gfx/animation/slide_animation.h"
-
-InfoBar::InfoBar(scoped_ptr<InfoBarDelegate> delegate)
-    : owner_(NULL),
-      delegate_(delegate.Pass()),
-      container_(NULL),
-      animation_(this),
-      arrow_height_(0),
-      arrow_target_height_(kDefaultArrowTargetHeight),
-      arrow_half_width_(0),
-      bar_height_(0),
-      bar_target_height_(kDefaultBarTargetHeight) {
-  DCHECK(delegate_ != NULL);
-  animation_.SetTweenType(gfx::Tween::LINEAR);
-  delegate_->set_infobar(this);
-}
-
-InfoBar::~InfoBar() {
-  DCHECK(!owner_);
-}
-
-// static
-SkColor InfoBar::GetTopColor(InfoBarDelegate::Type infobar_type) {
-  static const SkColor kWarningBackgroundColorTop =
-      SkColorSetRGB(255, 242, 183);  // Yellow
-  static const SkColor kPageActionBackgroundColorTop =
-      SkColorSetRGB(237, 237, 237);  // Gray
-  return (infobar_type == InfoBarDelegate::WARNING_TYPE) ?
-      kWarningBackgroundColorTop : kPageActionBackgroundColorTop;
-}
-
-// static
-SkColor InfoBar::GetBottomColor(InfoBarDelegate::Type infobar_type) {
-  static const SkColor kWarningBackgroundColorBottom =
-      SkColorSetRGB(250, 230, 145);  // Yellow
-  static const SkColor kPageActionBackgroundColorBottom =
-      SkColorSetRGB(217, 217, 217);  // Gray
-  return (infobar_type == InfoBarDelegate::WARNING_TYPE) ?
-      kWarningBackgroundColorBottom : kPageActionBackgroundColorBottom;
-}
-
-void InfoBar::SetOwner(InfoBarManager* owner) {
-  DCHECK(!owner_);
-  owner_ = owner;
-  delegate_->StoreActiveEntryUniqueID();
-  PlatformSpecificSetOwner();
-}
-
-void InfoBar::Show(bool animate) {
-  PlatformSpecificShow(animate);
-  if (animate) {
-    animation_.Show();
-  } else {
-    animation_.Reset(1.0);
-    RecalculateHeights(true);
-  }
-}
-
-void InfoBar::Hide(bool animate) {
-  PlatformSpecificHide(animate);
-  if (animate) {
-    animation_.Hide();
-  } else {
-    animation_.Reset(0.0);
-    // We want to remove ourselves from the container immediately even if we
-    // still have an owner, which MaybeDelete() won't do.
-    DCHECK(container_);
-    container_->RemoveInfoBar(this);
-    MaybeDelete();  // Necessary if the infobar was already closing.
-  }
-}
-
-void InfoBar::SetArrowTargetHeight(int height) {
-  DCHECK_LE(height, kMaximumArrowTargetHeight);
-  // Once the closing animation starts, we ignore further requests to change the
-  // target height.
-  if ((arrow_target_height_ != height) && !animation_.IsClosing()) {
-    arrow_target_height_ = height;
-    RecalculateHeights(false);
-  }
-}
-
-void InfoBar::CloseSoon() {
-  owner_ = NULL;
-  PlatformSpecificOnCloseSoon();
-  MaybeDelete();
-}
-
-void InfoBar::RemoveSelf() {
-  if (owner_)
-    owner_->RemoveInfoBar(this);
-}
-
-void InfoBar::SetBarTargetHeight(int height) {
-  if (bar_target_height_ != height) {
-    bar_target_height_ = height;
-    RecalculateHeights(false);
-  }
-}
-
-void InfoBar::AnimationProgressed(const gfx::Animation* animation) {
-  RecalculateHeights(false);
-}
-
-void InfoBar::AnimationEnded(const gfx::Animation* animation) {
-  // When the animation ends, we must ensure the container is notified even if
-  // the heights haven't changed, lest it never get an "animation finished"
-  // notification.  (If the browser doesn't get this notification, it will not
-  // bother to re-layout the content area for the new infobar size.)
-  RecalculateHeights(true);
-  MaybeDelete();
-}
-
-void InfoBar::RecalculateHeights(bool force_notify) {
-  int old_arrow_height = arrow_height_;
-  int old_bar_height = bar_height_;
-
-  // Find the desired arrow height/half-width.  The arrow area is
-  // |arrow_height_| * |arrow_half_width_|.  When the bar is opening or closing,
-  // scaling each of these with the square root of the animation value causes a
-  // linear animation of the area, which matches the perception of the animation
-  // of the bar portion.
-  double scale_factor = sqrt(animation_.GetCurrentValue());
-  arrow_height_ = static_cast<int>(arrow_target_height_ * scale_factor);
-  if (animation_.is_animating()) {
-    arrow_half_width_ = static_cast<int>(std::min(arrow_target_height_,
-        kMaximumArrowTargetHalfWidth) * scale_factor);
-  } else {
-    // When the infobar is not animating (i.e. fully open), we set the
-    // half-width to be proportionally the same distance between its default and
-    // maximum values as the height is between its.
-    arrow_half_width_ = kDefaultArrowTargetHalfWidth +
-        ((kMaximumArrowTargetHalfWidth - kDefaultArrowTargetHalfWidth) *
-         ((arrow_height_ - kDefaultArrowTargetHeight) /
-          (kMaximumArrowTargetHeight - kDefaultArrowTargetHeight)));
-  }
-  // Add pixels for the stroke, if the arrow is to be visible at all.  Without
-  // this, changing the arrow height from 0 to kSeparatorLineHeight would
-  // produce no visible effect, because the stroke would paint atop the divider
-  // line above the infobar.
-  if (arrow_height_)
-    arrow_height_ += kSeparatorLineHeight;
-
-  bar_height_ = animation_.CurrentValueBetween(0, bar_target_height_);
-
-  // Don't re-layout if nothing has changed, e.g. because the animation step was
-  // not large enough to actually change the heights by at least a pixel.
-  bool heights_differ =
-      (old_arrow_height != arrow_height_) || (old_bar_height != bar_height_);
-  if (heights_differ)
-    PlatformSpecificOnHeightsRecalculated();
-
-  if (container_ && (heights_differ || force_notify))
-    container_->OnInfoBarStateChanged(animation_.is_animating());
-}
-
-void InfoBar::MaybeDelete() {
-  if (!owner_ && (animation_.GetCurrentValue() == 0.0)) {
-    if (container_)
-      container_->RemoveInfoBar(this);
-    delete this;
-  }
-}
diff --git a/chrome/browser/infobars/infobar.h b/chrome/browser/infobars/infobar.h
deleted file mode 100644
index 86d2b59..0000000
--- a/chrome/browser/infobars/infobar.h
+++ /dev/null
@@ -1,149 +0,0 @@
-// Copyright (c) 2012 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 CHROME_BROWSER_INFOBARS_INFOBAR_H_
-#define CHROME_BROWSER_INFOBARS_INFOBAR_H_
-
-#include <utility>
-
-#include "base/memory/scoped_ptr.h"
-#include "chrome/browser/infobars/infobar_delegate.h"
-#include "third_party/skia/include/core/SkColor.h"
-#include "ui/gfx/animation/animation_delegate.h"
-#include "ui/gfx/animation/slide_animation.h"
-#include "ui/gfx/size.h"
-
-class InfoBarContainer;
-class InfoBarManager;
-
-// InfoBar is a cross-platform base class for an infobar "view" (in the MVC
-// sense), which owns a corresponding InfoBarDelegate "model".  Typically,
-// a caller will call XYZInfoBarDelegate::Create() and pass in the
-// InfoBarManager for the relevant tab.  This will create an XYZInfoBarDelegate,
-// create a platform-specific subclass of InfoBar to own it, and then call
-// InfoBarManager::AddInfoBar() to give it ownership of the infobar.
-// During its life, the InfoBar may be shown and hidden as the owning tab is
-// switched between the foreground and background.  Eventually, InfoBarManager
-// will instruct the InfoBar to close itself.  At this point, the InfoBar will
-// optionally animate closed; once it's no longer visible, it deletes itself,
-// destroying the InfoBarDelegate in the process.
-//
-// Thus, InfoBarDelegate and InfoBar implementations can assume they share
-// lifetimes, and not NULL-check each other; but if one needs to reach back into
-// the owning InfoBarManager, it must check whether that's still possible.
-class InfoBar : public gfx::AnimationDelegate {
- public:
-  // These are the types passed as Details for infobar-related notifications.
-  typedef InfoBar AddedDetails;
-  typedef std::pair<InfoBar*, bool> RemovedDetails;
-  typedef std::pair<InfoBar*, InfoBar*> ReplacedDetails;
-
-  // Platforms must define these.
-  static const int kDefaultBarTargetHeight;
-  static const int kSeparatorLineHeight;
-  static const int kDefaultArrowTargetHeight;
-  static const int kMaximumArrowTargetHeight;
-  // The half-width (see comments on |arrow_half_width_| below) scales to its
-  // default and maximum values proportionally to how the height scales to its.
-  static const int kDefaultArrowTargetHalfWidth;
-  static const int kMaximumArrowTargetHalfWidth;
-
-  explicit InfoBar(scoped_ptr<InfoBarDelegate> delegate);
-  virtual ~InfoBar();
-
-  static SkColor GetTopColor(InfoBarDelegate::Type infobar_type);
-  static SkColor GetBottomColor(InfoBarDelegate::Type infobar_type);
-
-  InfoBarManager* owner() { return owner_; }
-  InfoBarDelegate* delegate() { return delegate_.get(); }
-  const InfoBarDelegate* delegate() const { return delegate_.get(); }
-  void set_container(InfoBarContainer* container) { container_ = container; }
-
-  // Sets |owner_|.  This also calls StoreActiveEntryUniqueID() on |delegate_|.
-  // This must only be called once as there's no way to extract an infobar from
-  // its owner without deleting it, for reparenting in another tab.
-  void SetOwner(InfoBarManager* owner);
-
-  // Makes the infobar visible.  If |animate| is true, the infobar is then
-  // animated to full size.
-  void Show(bool animate);
-
-  // Makes the infobar hidden.  If |animate| is false, the infobar is
-  // immediately removed from the container, and, if now unowned, deleted.  If
-  // |animate| is true, the infobar is animated to zero size, ultimately
-  // triggering a call to AnimationEnded().
-  void Hide(bool animate);
-
-  // Changes the target height of the arrow portion of the infobar.  This has no
-  // effect once the infobar is animating closed.
-  void SetArrowTargetHeight(int height);
-
-  // Notifies the infobar that it is no longer owned and should delete itself
-  // once it is invisible.
-  void CloseSoon();
-
-  // Forwards a close request to our owner.  This is a no-op if we're already
-  // unowned.
-  void RemoveSelf();
-
-  // Changes the target height of the main ("bar") portion of the infobar.
-  void SetBarTargetHeight(int height);
-
-  const gfx::SlideAnimation& animation() const { return animation_; }
-  int arrow_height() const { return arrow_height_; }
-  int arrow_target_height() const { return arrow_target_height_; }
-  int arrow_half_width() const { return arrow_half_width_; }
-  int total_height() const { return arrow_height_ + bar_height_; }
-
- protected:
-  // gfx::AnimationDelegate:
-  virtual void AnimationProgressed(const gfx::Animation* animation) OVERRIDE;
-
-  const InfoBarContainer* container() const { return container_; }
-  InfoBarContainer* container() { return container_; }
-  gfx::SlideAnimation* animation() { return &animation_; }
-  int bar_height() const { return bar_height_; }
-  int bar_target_height() const { return bar_target_height_; }
-
-  // Platforms may optionally override these if they need to do work during
-  // processing of the given calls.
-  virtual void PlatformSpecificSetOwner() {}
-  virtual void PlatformSpecificShow(bool animate) {}
-  virtual void PlatformSpecificHide(bool animate) {}
-  virtual void PlatformSpecificOnCloseSoon() {}
-  virtual void PlatformSpecificOnHeightsRecalculated() {}
-
- private:
-  // gfx::AnimationDelegate:
-  virtual void AnimationEnded(const gfx::Animation* animation) OVERRIDE;
-
-  // Finds the new desired arrow and bar heights, and if they differ from the
-  // current ones, calls PlatformSpecificOnHeightRecalculated().  Informs our
-  // container our state has changed if either the heights have changed or
-  // |force_notify| is set.
-  void RecalculateHeights(bool force_notify);
-
-  // Checks whether the infobar is unowned and done with all animations.  If so,
-  // notifies the container that it should remove this infobar, and deletes
-  // itself.
-  void MaybeDelete();
-
-  InfoBarManager* owner_;
-  scoped_ptr<InfoBarDelegate> delegate_;
-  InfoBarContainer* container_;
-  gfx::SlideAnimation animation_;
-
-  // The current and target heights of the arrow and bar portions, and half the
-  // current arrow width.  (It's easier to work in half-widths as we draw the
-  // arrow as two halves on either side of a center point.)
-  int arrow_height_;         // Includes both fill and top stroke.
-  int arrow_target_height_;
-  int arrow_half_width_;     // Includes only fill.
-  int bar_height_;           // Includes both fill and bottom separator.
-  int bar_target_height_;
-
-  DISALLOW_COPY_AND_ASSIGN(InfoBar);
-};
-
-#endif  // CHROME_BROWSER_INFOBARS_INFOBAR_H_
diff --git a/chrome/browser/infobars/infobar_container.cc b/chrome/browser/infobars/infobar_container.cc
deleted file mode 100644
index b9526ef..0000000
--- a/chrome/browser/infobars/infobar_container.cc
+++ /dev/null
@@ -1,175 +0,0 @@
-// Copyright (c) 2012 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 "build/build_config.h"
-
-#include "chrome/browser/infobars/infobar_container.h"
-
-#include <algorithm>
-
-#include "base/logging.h"
-#include "chrome/browser/infobars/infobar.h"
-#include "chrome/browser/infobars/infobar_delegate.h"
-#include "ui/gfx/animation/slide_animation.h"
-
-InfoBarContainer::Delegate::~Delegate() {
-}
-
-InfoBarContainer::InfoBarContainer(Delegate* delegate)
-    : delegate_(delegate),
-      infobar_manager_(NULL),
-      top_arrow_target_height_(InfoBar::kDefaultArrowTargetHeight) {
-}
-
-InfoBarContainer::~InfoBarContainer() {
-  // RemoveAllInfoBarsForDestruction() should have already cleared our infobars.
-  DCHECK(infobars_.empty());
-  if (infobar_manager_)
-    infobar_manager_->RemoveObserver(this);
-}
-
-void InfoBarContainer::ChangeInfoBarManager(InfoBarManager* infobar_manager) {
-  if (infobar_manager_)
-    infobar_manager_->RemoveObserver(this);
-
-  // Hides all infobars in this container without animation.
-  while (!infobars_.empty()) {
-    InfoBar* infobar = infobars_.front();
-    // Inform the infobar that it's hidden.  If it was already closing, this
-    // deletes it.  Otherwise, this ensures the infobar will be deleted if it's
-    // closed while it's not in an InfoBarContainer.
-    infobar->Hide(false);
-  }
-
-  infobar_manager_ = infobar_manager;
-  if (infobar_manager_) {
-    infobar_manager_->AddObserver(this);
-
-    for (size_t i = 0; i < infobar_manager_->infobar_count(); ++i) {
-      // As when we removed the infobars above, we prevent callbacks to
-      // OnInfoBarStateChanged() for each infobar.
-      AddInfoBar(infobar_manager_->infobar_at(i), i, false, NO_CALLBACK);
-    }
-  }
-
-  // Now that everything is up to date, signal the delegate to re-layout.
-  OnInfoBarStateChanged(false);
-}
-
-int InfoBarContainer::GetVerticalOverlap(int* total_height) {
-  // Our |total_height| is the sum of the preferred heights of the InfoBars
-  // contained within us plus the |vertical_overlap|.
-  int vertical_overlap = 0;
-  int next_infobar_y = 0;
-
-  for (InfoBars::iterator i(infobars_.begin()); i != infobars_.end(); ++i) {
-    InfoBar* infobar = *i;
-    next_infobar_y -= infobar->arrow_height();
-    vertical_overlap = std::max(vertical_overlap, -next_infobar_y);
-    next_infobar_y += infobar->total_height();
-  }
-
-  if (total_height)
-    *total_height = next_infobar_y + vertical_overlap;
-  return vertical_overlap;
-}
-
-void InfoBarContainer::SetMaxTopArrowHeight(int height) {
-  // Decrease the height by the arrow stroke thickness, which is the separator
-  // line height, because the infobar arrow target heights are without-stroke.
-  top_arrow_target_height_ = std::min(
-      std::max(height - InfoBar::kSeparatorLineHeight, 0),
-      InfoBar::kMaximumArrowTargetHeight);
-  UpdateInfoBarArrowTargetHeights();
-}
-
-void InfoBarContainer::OnInfoBarStateChanged(bool is_animating) {
-  if (delegate_)
-    delegate_->InfoBarContainerStateChanged(is_animating);
-  UpdateInfoBarArrowTargetHeights();
-  PlatformSpecificInfoBarStateChanged(is_animating);
-}
-
-void InfoBarContainer::RemoveInfoBar(InfoBar* infobar) {
-  infobar->set_container(NULL);
-  InfoBars::iterator i(std::find(infobars_.begin(), infobars_.end(), infobar));
-  DCHECK(i != infobars_.end());
-  PlatformSpecificRemoveInfoBar(infobar);
-  infobars_.erase(i);
-}
-
-void InfoBarContainer::RemoveAllInfoBarsForDestruction() {
-  // Before we remove any children, we reset |delegate_|, so that no removals
-  // will result in us trying to call
-  // delegate_->InfoBarContainerStateChanged().  This is important because at
-  // this point |delegate_| may be shutting down, and it's at best unimportant
-  // and at worst disastrous to call that.
-  delegate_ = NULL;
-  ChangeInfoBarManager(NULL);
-}
-
-void InfoBarContainer::OnInfoBarAdded(InfoBar* infobar) {
-  AddInfoBar(infobar, infobars_.size(), true, WANT_CALLBACK);
-}
-
-void InfoBarContainer::OnInfoBarRemoved(InfoBar* infobar, bool animate) {
-  infobar->Hide(animate);
-  UpdateInfoBarArrowTargetHeights();
-}
-
-void InfoBarContainer::OnInfoBarReplaced(InfoBar* old_infobar,
-                                         InfoBar* new_infobar) {
-  PlatformSpecificReplaceInfoBar(old_infobar, new_infobar);
-  InfoBars::const_iterator i(std::find(infobars_.begin(), infobars_.end(),
-                                       old_infobar));
-  DCHECK(i != infobars_.end());
-  size_t position = i - infobars_.begin();
-  old_infobar->Hide(false);
-  AddInfoBar(new_infobar, position, false, WANT_CALLBACK);
-}
-
-void InfoBarContainer::OnManagerShuttingDown(InfoBarManager* manager) {
-  DCHECK_EQ(infobar_manager_, manager);
-  infobar_manager_->RemoveObserver(this);
-  infobar_manager_ = NULL;
-}
-
-void InfoBarContainer::AddInfoBar(InfoBar* infobar,
-                                  size_t position,
-                                  bool animate,
-                                  CallbackStatus callback_status) {
-  DCHECK(std::find(infobars_.begin(), infobars_.end(), infobar) ==
-      infobars_.end());
-  DCHECK_LE(position, infobars_.size());
-  infobars_.insert(infobars_.begin() + position, infobar);
-  UpdateInfoBarArrowTargetHeights();
-  PlatformSpecificAddInfoBar(infobar, position);
-  if (callback_status == WANT_CALLBACK)
-    infobar->set_container(this);
-  infobar->Show(animate);
-  if (callback_status == NO_CALLBACK)
-    infobar->set_container(this);
-}
-
-void InfoBarContainer::UpdateInfoBarArrowTargetHeights() {
-  for (size_t i = 0; i < infobars_.size(); ++i)
-    infobars_[i]->SetArrowTargetHeight(ArrowTargetHeightForInfoBar(i));
-}
-
-int InfoBarContainer::ArrowTargetHeightForInfoBar(size_t infobar_index) const {
-  if (!delegate_ || !delegate_->DrawInfoBarArrows(NULL))
-    return 0;
-  if (infobar_index == 0)
-    return top_arrow_target_height_;
-  const gfx::SlideAnimation& first_infobar_animation =
-      const_cast<const InfoBar*>(infobars_.front())->animation();
-  if ((infobar_index > 1) || first_infobar_animation.IsShowing())
-    return InfoBar::kDefaultArrowTargetHeight;
-  // When the first infobar is animating closed, we animate the second infobar's
-  // arrow target height from the default to the top target height.  Note that
-  // the animation values here are going from 1.0 -> 0.0 as the top bar closes.
-  return top_arrow_target_height_ + static_cast<int>(
-      (InfoBar::kDefaultArrowTargetHeight - top_arrow_target_height_) *
-          first_infobar_animation.GetCurrentValue());
-}
diff --git a/chrome/browser/infobars/infobar_container.h b/chrome/browser/infobars/infobar_container.h
deleted file mode 100644
index 683888a..0000000
--- a/chrome/browser/infobars/infobar_container.h
+++ /dev/null
@@ -1,133 +0,0 @@
-// Copyright (c) 2011 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 CHROME_BROWSER_INFOBARS_INFOBAR_CONTAINER_H_
-#define CHROME_BROWSER_INFOBARS_INFOBAR_CONTAINER_H_
-
-#include <vector>
-
-#include "base/compiler_specific.h"
-#include "base/time/time.h"
-#include "chrome/browser/infobars/infobar_manager.h"
-#include "third_party/skia/include/core/SkColor.h"
-
-class InfoBar;
-
-// InfoBarContainer is a cross-platform base class to handle the visibility-
-// related aspects of InfoBars.  While InfoBarManager owns the InfoBars, the
-// InfoBarContainer is responsible for telling particular InfoBars that they
-// should be hidden or visible.
-//
-// Platforms need to subclass this to implement a few platform-specific
-// functions, which are pure virtual here.
-class InfoBarContainer : public InfoBarManager::Observer {
- public:
-  class Delegate {
-   public:
-    // The separator color may vary depending on where the container is hosted.
-    virtual SkColor GetInfoBarSeparatorColor() const = 0;
-
-    // The delegate is notified each time the infobar container changes height,
-    // as well as when it stops animating.
-    virtual void InfoBarContainerStateChanged(bool is_animating) = 0;
-
-    // The delegate needs to tell us whether "unspoofable" arrows should be
-    // drawn, and if so, at what |x| coordinate.  |x| may be NULL.
-    virtual bool DrawInfoBarArrows(int* x) const = 0;
-
-   protected:
-    virtual ~Delegate();
-  };
-
-  explicit InfoBarContainer(Delegate* delegate);
-  virtual ~InfoBarContainer();
-
-  // Changes the InfoBarManager for which this container is showing infobars.
-  // This will hide all current infobars, remove them from the container, add
-  // the infobars from |infobar_manager|, and show them all.  |infobar_manager|
-  // may be NULL.
-  void ChangeInfoBarManager(InfoBarManager* infobar_manager);
-
-  // Returns the amount by which to overlap the toolbar above, and, when
-  // |total_height| is non-NULL, set it to the height of the InfoBarContainer
-  // (including overlap).
-  int GetVerticalOverlap(int* total_height);
-
-  // Called by the delegate when the distance between what the top infobar's
-  // "unspoofable" arrow would point to and the top infobar itself changes.
-  // This enables the top infobar to show a longer arrow (e.g. because of a
-  // visible bookmark bar) or shorter (e.g. due to being in a popup window) if
-  // desired.
-  //
-  // IMPORTANT: This MUST NOT result in a call back to
-  // Delegate::InfoBarContainerStateChanged() unless it causes an actual
-  // change, lest we infinitely recurse.
-  void SetMaxTopArrowHeight(int height);
-
-  // Called when a contained infobar has animated or by some other means changed
-  // its height, or when it stops animating.  The container is expected to do
-  // anything necessary to respond, e.g. re-layout.
-  void OnInfoBarStateChanged(bool is_animating);
-
-  // Called by |infobar| to request that it be removed from the container.  At
-  // this point, |infobar| should already be hidden.
-  void RemoveInfoBar(InfoBar* infobar);
-
-  const Delegate* delegate() const { return delegate_; }
-
- protected:
-  // Subclasses must call this during destruction, so that we can remove
-  // infobars (which will call the pure virtual functions below) while the
-  // subclass portion of |this| has not yet been destroyed.
-  void RemoveAllInfoBarsForDestruction();
-
-  // These must be implemented on each platform to e.g. adjust the visible
-  // object hierarchy.  The first two functions should each be called exactly
-  // once during an infobar's life (see comments on RemoveInfoBar() and
-  // AddInfoBar()).
-  virtual void PlatformSpecificAddInfoBar(InfoBar* infobar,
-                                          size_t position) = 0;
-  // TODO(miguelg): Remove this; it is only necessary for Android, and only
-  // until the translate infobar is implemented as three different infobars like
-  // GTK does.
-  virtual void PlatformSpecificReplaceInfoBar(InfoBar* old_infobar,
-                                              InfoBar* new_infobar) {}
-  virtual void PlatformSpecificRemoveInfoBar(InfoBar* infobar) = 0;
-  virtual void PlatformSpecificInfoBarStateChanged(bool is_animating) {}
-
- private:
-  typedef std::vector<InfoBar*> InfoBars;
-
-  // InfoBarManager::Observer:
-  virtual void OnInfoBarAdded(InfoBar* infobar) OVERRIDE;
-  virtual void OnInfoBarRemoved(InfoBar* infobar, bool animate) OVERRIDE;
-  virtual void OnInfoBarReplaced(InfoBar* old_infobar,
-                                 InfoBar* new_infobar) OVERRIDE;
-  virtual void OnManagerShuttingDown(InfoBarManager* manager) OVERRIDE;
-
-  // Adds |infobar| to this container before the existing infobar at position
-  // |position| and calls Show() on it.  |animate| is passed along to
-  // infobar->Show().  Depending on the value of |callback_status|, this calls
-  // infobar->set_container(this) either before or after the call to Show() so
-  // that OnInfoBarStateChanged() either will or won't be called as a result.
-  enum CallbackStatus { NO_CALLBACK, WANT_CALLBACK };
-  void AddInfoBar(InfoBar* infobar,
-                  size_t position,
-                  bool animate,
-                  CallbackStatus callback_status);
-
-  void UpdateInfoBarArrowTargetHeights();
-  int ArrowTargetHeightForInfoBar(size_t infobar_index) const;
-
-  Delegate* delegate_;
-  InfoBarManager* infobar_manager_;
-  InfoBars infobars_;
-
-  // Calculated in SetMaxTopArrowHeight().
-  int top_arrow_target_height_;
-
-  DISALLOW_COPY_AND_ASSIGN(InfoBarContainer);
-};
-
-#endif  // CHROME_BROWSER_INFOBARS_INFOBAR_CONTAINER_H_
diff --git a/chrome/browser/infobars/infobar_delegate.cc b/chrome/browser/infobars/infobar_delegate.cc
deleted file mode 100644
index b4576d2..0000000
--- a/chrome/browser/infobars/infobar_delegate.cc
+++ /dev/null
@@ -1,107 +0,0 @@
-// Copyright (c) 2012 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 "chrome/browser/infobars/infobar_delegate.h"
-
-#include "base/logging.h"
-#include "build/build_config.h"
-#include "chrome/browser/infobars/infobar.h"
-#include "chrome/browser/infobars/infobar_manager.h"
-#include "ui/base/resource/resource_bundle.h"
-
-const int InfoBarDelegate::kNoIconID = 0;
-
-InfoBarDelegate::~InfoBarDelegate() {
-}
-
-InfoBarDelegate::InfoBarAutomationType
-    InfoBarDelegate::GetInfoBarAutomationType() const {
-  return UNKNOWN_INFOBAR;
-}
-
-bool InfoBarDelegate::EqualsDelegate(InfoBarDelegate* delegate) const {
-  return false;
-}
-
-bool InfoBarDelegate::ShouldExpire(const NavigationDetails& details) const {
-  if (!details.is_navigation_to_different_page)
-    return false;
-
-  return ShouldExpireInternal(details);
-}
-
-void InfoBarDelegate::InfoBarDismissed() {
-}
-
-int InfoBarDelegate::GetIconID() const {
-  return kNoIconID;
-}
-
-InfoBarDelegate::Type InfoBarDelegate::GetInfoBarType() const {
-  return WARNING_TYPE;
-}
-
-AutoLoginInfoBarDelegate* InfoBarDelegate::AsAutoLoginInfoBarDelegate() {
-  return NULL;
-}
-
-ConfirmInfoBarDelegate* InfoBarDelegate::AsConfirmInfoBarDelegate() {
-  return NULL;
-}
-
-ExtensionInfoBarDelegate* InfoBarDelegate::AsExtensionInfoBarDelegate() {
-  return NULL;
-}
-
-InsecureContentInfoBarDelegate*
-    InfoBarDelegate::AsInsecureContentInfoBarDelegate() {
-  return NULL;
-}
-
-MediaStreamInfoBarDelegate* InfoBarDelegate::AsMediaStreamInfoBarDelegate() {
-  return NULL;
-}
-
-PopupBlockedInfoBarDelegate* InfoBarDelegate::AsPopupBlockedInfoBarDelegate() {
-  return NULL;
-}
-
-RegisterProtocolHandlerInfoBarDelegate*
-    InfoBarDelegate::AsRegisterProtocolHandlerInfoBarDelegate() {
-  return NULL;
-}
-
-ScreenCaptureInfoBarDelegate*
-    InfoBarDelegate::AsScreenCaptureInfoBarDelegate() {
-  return NULL;
-}
-
-ThemeInstalledInfoBarDelegate*
-    InfoBarDelegate::AsThemePreviewInfobarDelegate() {
-  return NULL;
-}
-
-TranslateInfoBarDelegate* InfoBarDelegate::AsTranslateInfoBarDelegate() {
-  return NULL;
-}
-
-void InfoBarDelegate::StoreActiveEntryUniqueID() {
-  contents_unique_id_ = infobar()->owner()->GetActiveEntryID();
-}
-
-gfx::Image InfoBarDelegate::GetIcon() const {
-  int icon_id = GetIconID();
-  return (icon_id == kNoIconID) ? gfx::Image() :
-      ResourceBundle::GetSharedInstance().GetNativeImageNamed(icon_id);
-}
-
-InfoBarDelegate::InfoBarDelegate() : contents_unique_id_(0) {
-}
-
-bool InfoBarDelegate::ShouldExpireInternal(
-    const NavigationDetails& details) const {
-  // NOTE: If you change this, be sure to check and adjust the behavior of
-  // anyone who overrides this as necessary!
-  return (contents_unique_id_ != details.entry_id) || details.is_reload;
-}
diff --git a/chrome/browser/infobars/infobar_delegate.h b/chrome/browser/infobars/infobar_delegate.h
deleted file mode 100644
index 05126e1..0000000
--- a/chrome/browser/infobars/infobar_delegate.h
+++ /dev/null
@@ -1,143 +0,0 @@
-// Copyright (c) 2012 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 CHROME_BROWSER_INFOBARS_INFOBAR_DELEGATE_H_
-#define CHROME_BROWSER_INFOBARS_INFOBAR_DELEGATE_H_
-
-#include "base/basictypes.h"
-#include "base/strings/string16.h"
-#include "ui/base/window_open_disposition.h"
-
-class AutoLoginInfoBarDelegate;
-class ConfirmInfoBarDelegate;
-class ExtensionInfoBarDelegate;
-class InfoBar;
-class InsecureContentInfoBarDelegate;
-class MediaStreamInfoBarDelegate;
-class PopupBlockedInfoBarDelegate;
-class RegisterProtocolHandlerInfoBarDelegate;
-class ScreenCaptureInfoBarDelegate;
-class ThemeInstalledInfoBarDelegate;
-class ThreeDAPIInfoBarDelegate;
-class TranslateInfoBarDelegate;
-
-namespace gfx {
-class Image;
-}
-
-// An interface implemented by objects wishing to control an InfoBar.
-// Implementing this interface is not sufficient to use an InfoBar, since it
-// does not map to a specific InfoBar type. Instead, you must implement
-// ConfirmInfoBarDelegate, or override with your own delegate for your own
-// InfoBar variety.
-class InfoBarDelegate {
- public:
-  // The type of the infobar. It controls its appearance, such as its background
-  // color.
-  enum Type {
-    WARNING_TYPE,
-    PAGE_ACTION_TYPE,
-  };
-
-  enum InfoBarAutomationType {
-    CONFIRM_INFOBAR,
-    PASSWORD_INFOBAR,
-    RPH_INFOBAR,
-    UNKNOWN_INFOBAR,
-  };
-
-  // Describes navigation events, used to decide whether infobars should be
-  // dismissed.
-  struct NavigationDetails {
-    // Unique identifier for the entry.
-    int entry_id;
-    // True if it is a navigation to a different page (as opposed to in-page).
-    bool is_navigation_to_different_page;
-    // True if the entry replaced the existing one.
-    bool did_replace_entry;
-    // True for the main frame, false for a sub-frame.
-    bool is_main_frame;
-    bool is_reload;
-    bool is_redirect;
-  };
-
-  // Value to use when the InfoBar has no icon to show.
-  static const int kNoIconID;
-
-  // Called when the InfoBar that owns this delegate is being destroyed.  At
-  // this point nothing is visible onscreen.
-  virtual ~InfoBarDelegate();
-
-  virtual InfoBarAutomationType GetInfoBarAutomationType() const;
-
-  // Returns true if the supplied |delegate| is equal to this one. Equality is
-  // left to the implementation to define. This function is called by the
-  // InfoBarManager when determining whether or not a delegate should be
-  // added because a matching one already exists. If this function returns true,
-  // the InfoBarManager will not add the new delegate because it considers
-  // one to already be present.
-  virtual bool EqualsDelegate(InfoBarDelegate* delegate) const;
-
-  // Returns true if the InfoBar should be closed automatically after the page
-  // is navigated. By default this returns true if the navigation is to a new
-  // page (not including reloads).  Subclasses wishing to change this behavior
-  // can override either this function or ShouldExpireInternal(), depending on
-  // what level of control they need.
-  virtual bool ShouldExpire(const NavigationDetails& details) const;
-
-  // Called when the user clicks on the close button to dismiss the infobar.
-  virtual void InfoBarDismissed();
-
-  // Return the resource ID of the icon to be shown for this InfoBar.  If the
-  // value is equal to |kNoIconID|, no icon is shown.
-  virtual int GetIconID() const;
-
-  // Returns the type of the infobar.  The type determines the appearance (such
-  // as background color) of the infobar.
-  virtual Type GetInfoBarType() const;
-
-  // Type-checking downcast routines:
-  virtual AutoLoginInfoBarDelegate* AsAutoLoginInfoBarDelegate();
-  virtual ConfirmInfoBarDelegate* AsConfirmInfoBarDelegate();
-  virtual ExtensionInfoBarDelegate* AsExtensionInfoBarDelegate();
-  virtual InsecureContentInfoBarDelegate* AsInsecureContentInfoBarDelegate();
-  virtual MediaStreamInfoBarDelegate* AsMediaStreamInfoBarDelegate();
-  virtual PopupBlockedInfoBarDelegate* AsPopupBlockedInfoBarDelegate();
-  virtual RegisterProtocolHandlerInfoBarDelegate*
-      AsRegisterProtocolHandlerInfoBarDelegate();
-  virtual ScreenCaptureInfoBarDelegate* AsScreenCaptureInfoBarDelegate();
-  virtual ThemeInstalledInfoBarDelegate* AsThemePreviewInfobarDelegate();
-  virtual TranslateInfoBarDelegate* AsTranslateInfoBarDelegate();
-
-  void set_infobar(InfoBar* infobar) { infobar_ = infobar; }
-
-  // Store the unique id for the active entry, to be used later upon navigation
-  // to determine if this InfoBarDelegate should be expired.
-  void StoreActiveEntryUniqueID();
-
-  // Return the icon to be shown for this InfoBar. If the returned Image is
-  // empty, no icon is shown.
-  virtual gfx::Image GetIcon() const;
-
- protected:
-  InfoBarDelegate();
-
-  // Returns true if the navigation is to a new URL or a reload occured.
-  virtual bool ShouldExpireInternal(const NavigationDetails& details) const;
-
-  int contents_unique_id() const { return contents_unique_id_; }
-  InfoBar* infobar() { return infobar_; }
-
- private:
-  // The unique id of the active NavigationEntry of the WebContents that we were
-  // opened for. Used to help expire on navigations.
-  int contents_unique_id_;
-
-  // The InfoBar associated with us.
-  InfoBar* infobar_;
-
-  DISALLOW_COPY_AND_ASSIGN(InfoBarDelegate);
-};
-
-#endif  // CHROME_BROWSER_INFOBARS_INFOBAR_DELEGATE_H_
diff --git a/chrome/browser/infobars/infobar_manager.cc b/chrome/browser/infobars/infobar_manager.cc
deleted file mode 100644
index ce2cb6c..0000000
--- a/chrome/browser/infobars/infobar_manager.cc
+++ /dev/null
@@ -1,137 +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.
-
-#include "chrome/browser/infobars/infobar_manager.h"
-
-#include "base/command_line.h"
-#include "chrome/browser/infobars/infobar.h"
-#include "chrome/common/chrome_switches.h"
-
-InfoBar* InfoBarManager::AddInfoBar(scoped_ptr<InfoBar> infobar) {
-  DCHECK(infobar);
-  if (!infobars_enabled_)
-    return NULL;
-
-  for (InfoBars::const_iterator i(infobars_.begin()); i != infobars_.end();
-       ++i) {
-    if ((*i)->delegate()->EqualsDelegate(infobar->delegate())) {
-      DCHECK_NE((*i)->delegate(), infobar->delegate());
-      return NULL;
-    }
-  }
-
-  InfoBar* infobar_ptr = infobar.release();
-  infobars_.push_back(infobar_ptr);
-  infobar_ptr->SetOwner(this);
-
-  NotifyInfoBarAdded(infobar_ptr);
-
-  return infobar_ptr;
-}
-
-void InfoBarManager::RemoveInfoBar(InfoBar* infobar) {
-  RemoveInfoBarInternal(infobar, true);
-}
-
-void InfoBarManager::RemoveAllInfoBars(bool animate) {
-  while (!infobars_.empty())
-    RemoveInfoBarInternal(infobars_.back(), animate);
-}
-
-InfoBar* InfoBarManager::ReplaceInfoBar(InfoBar* old_infobar,
-                                        scoped_ptr<InfoBar> new_infobar) {
-  DCHECK(old_infobar);
-  if (!infobars_enabled_)
-    return AddInfoBar(new_infobar.Pass());  // Deletes the infobar.
-  DCHECK(new_infobar);
-
-  InfoBars::iterator i(std::find(infobars_.begin(), infobars_.end(),
-                                 old_infobar));
-  DCHECK(i != infobars_.end());
-
-  InfoBar* new_infobar_ptr = new_infobar.release();
-  i = infobars_.insert(i, new_infobar_ptr);
-  new_infobar_ptr->SetOwner(this);
-
-  // Remove the old infobar before notifying, so that if any observers call back
-  // to AddInfoBar() or similar, we don't dupe-check against this infobar.
-  infobars_.erase(++i);
-
-  NotifyInfoBarReplaced(old_infobar, new_infobar_ptr);
-
-  old_infobar->CloseSoon();
-  return new_infobar_ptr;
-}
-
-void InfoBarManager::AddObserver(Observer* obs) {
-  observer_list_.AddObserver(obs);
-}
-
-void InfoBarManager::RemoveObserver(Observer* obs) {
-  observer_list_.RemoveObserver(obs);
-}
-
-InfoBarManager::InfoBarManager()
-    : infobars_enabled_(true) {
-  if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kDisableInfoBars))
-    infobars_enabled_ = false;
-}
-
-InfoBarManager::~InfoBarManager() {}
-
-void InfoBarManager::ShutDown() {
-  // Destroy all remaining InfoBars.  It's important to not animate here so that
-  // we guarantee that we'll delete all delegates before we do anything else.
-  RemoveAllInfoBars(false);
-  FOR_EACH_OBSERVER(Observer, observer_list_, OnManagerShuttingDown(this));
-}
-
-void InfoBarManager::OnNavigation(
-    const InfoBarDelegate::NavigationDetails& details) {
-  // NOTE: It is not safe to change the following code to count upwards or
-  // use iterators, as the RemoveInfoBar() call synchronously modifies our
-  // delegate list.
-  for (size_t i = infobars_.size(); i > 0; --i) {
-    InfoBar* infobar = infobars_[i - 1];
-    if (infobar->delegate()->ShouldExpire(details))
-      RemoveInfoBar(infobar);
-  }
-}
-
-void InfoBarManager::NotifyInfoBarAdded(InfoBar* infobar) {
-  FOR_EACH_OBSERVER(Observer, observer_list_, OnInfoBarAdded(infobar));
-}
-
-void InfoBarManager::NotifyInfoBarRemoved(InfoBar* infobar, bool animate) {
-  FOR_EACH_OBSERVER(Observer, observer_list_,
-                    OnInfoBarRemoved(infobar, animate));
-}
-
-void InfoBarManager::NotifyInfoBarReplaced(InfoBar* old_infobar,
-                                           InfoBar* new_infobar) {
-  FOR_EACH_OBSERVER(Observer,
-                    observer_list_,
-                    OnInfoBarReplaced(old_infobar, new_infobar));
-}
-
-void InfoBarManager::RemoveInfoBarInternal(InfoBar* infobar, bool animate) {
-  DCHECK(infobar);
-  if (!infobars_enabled_) {
-    DCHECK(infobars_.empty());
-    return;
-  }
-
-  InfoBars::iterator i(std::find(infobars_.begin(), infobars_.end(), infobar));
-  DCHECK(i != infobars_.end());
-
-  // Remove the infobar before notifying, so that if any observers call back to
-  // AddInfoBar() or similar, we don't dupe-check against this infobar.
-  infobars_.erase(i);
-
-  // This notification must happen before the call to CloseSoon() below, since
-  // observers may want to access |infobar| and that call can delete it.
-  NotifyInfoBarRemoved(infobar, animate);
-
-  infobar->CloseSoon();
-}
diff --git a/chrome/browser/infobars/infobar_manager.h b/chrome/browser/infobars/infobar_manager.h
deleted file mode 100644
index f11768c..0000000
--- a/chrome/browser/infobars/infobar_manager.h
+++ /dev/null
@@ -1,120 +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.
-
-#ifndef CHROME_BROWSER_INFOBARS_INFOBAR_MANAGER_H_
-#define CHROME_BROWSER_INFOBARS_INFOBAR_MANAGER_H_
-
-#include <vector>
-
-#include "base/memory/scoped_ptr.h"
-#include "base/observer_list.h"
-#include "chrome/browser/infobars/infobar_delegate.h"
-
-namespace content {
-class WebContents;
-}
-
-class InfoBar;
-
-// Provides access to creating, removing and enumerating info bars
-// attached to a tab.
-class InfoBarManager {
- public:
-  // Observer class for infobar events.
-  class Observer {
-   public:
-    virtual void OnInfoBarAdded(InfoBar* infobar) = 0;
-    virtual void OnInfoBarRemoved(InfoBar* infobar, bool animate) = 0;
-    virtual void OnInfoBarReplaced(InfoBar* old_infobar,
-                                   InfoBar* new_infobar) = 0;
-    virtual void OnManagerShuttingDown(InfoBarManager* manager) = 0;
-  };
-
-  InfoBarManager();
-  virtual ~InfoBarManager();
-
-  // Must be called before destruction.
-  // TODO(droger): Merge this method with the destructor once the virtual calls
-  // for notifications are removed (see http://crbug.com/354380).
-  void ShutDown();
-
-  // Adds the specified |infobar|, which already owns a delegate.
-  //
-  // If infobars are disabled for this tab or the tab already has an infobar
-  // whose delegate returns true for
-  // InfoBarDelegate::EqualsDelegate(infobar->delegate()), |infobar| is deleted
-  // immediately without being added.
-  //
-  // Returns the infobar if it was successfully added.
-  InfoBar* AddInfoBar(scoped_ptr<InfoBar> infobar);
-
-  // Removes the specified |infobar|.  This in turn may close immediately or
-  // animate closed; at the end the infobar will delete itself.
-  //
-  // If infobars are disabled for this tab, this will do nothing, on the
-  // assumption that the matching AddInfoBar() call will have already deleted
-  // the infobar (see above).
-  void RemoveInfoBar(InfoBar* infobar);
-
-  // Removes all the infobars.
-  void RemoveAllInfoBars(bool animate);
-
-  // Replaces one infobar with another, without any animation in between.  This
-  // will result in |old_infobar| being synchronously deleted.
-  //
-  // If infobars are disabled for this tab, |new_infobar| is deleted immediately
-  // without being added, and nothing else happens.
-  //
-  // Returns the new infobar if it was successfully added.
-  //
-  // NOTE: This does not perform any EqualsDelegate() checks like AddInfoBar().
-  InfoBar* ReplaceInfoBar(InfoBar* old_infobar,
-                          scoped_ptr<InfoBar> new_infobar);
-
-  // Returns the number of infobars for this tab.
-  size_t infobar_count() const { return infobars_.size(); }
-
-  // Returns the infobar at the given |index|.  The InfoBarManager retains
-  // ownership.
-  //
-  // Warning: Does not sanity check |index|.
-  InfoBar* infobar_at(size_t index) { return infobars_[index]; }
-
-  // Must be called when a navigation happens.
-  void OnNavigation(const InfoBarDelegate::NavigationDetails& details);
-
-  void AddObserver(Observer* obs);
-  void RemoveObserver(Observer* obs);
-
-  // Returns the active entry ID.
-  virtual int GetActiveEntryID() = 0;
-
- protected:
-  // Notifies the observer in |observer_list_|.
-  // TODO(droger): Absorb these methods back into their callers once virtual
-  // overrides are removed (see http://crbug.com/354380).
-  virtual void NotifyInfoBarAdded(InfoBar* infobar);
-  virtual void NotifyInfoBarRemoved(InfoBar* infobar, bool animate);
-  virtual void NotifyInfoBarReplaced(InfoBar* old_infobar,
-                                     InfoBar* new_infobar);
-
- private:
-  // InfoBars associated with this InfoBarManager.  We own these pointers.
-  // However, this is not a ScopedVector, because we don't delete the infobars
-  // directly once they've been added to this; instead, when we're done with an
-  // infobar, we instruct it to delete itself and then orphan it.  See
-  // RemoveInfoBarInternal().
-  typedef std::vector<InfoBar*> InfoBars;
-
-  void RemoveInfoBarInternal(InfoBar* infobar, bool animate);
-
-  InfoBars infobars_;
-  bool infobars_enabled_;
-
-  ObserverList<Observer, true> observer_list_;
-
-  DISALLOW_COPY_AND_ASSIGN(InfoBarManager);
-};
-
-#endif  // CHROME_BROWSER_INFOBARS_INFOBAR_MANAGER_H_
diff --git a/chrome/browser/infobars/infobar_service.cc b/chrome/browser/infobars/infobar_service.cc
index 5b58273..3d03544 100644
--- a/chrome/browser/infobars/infobar_service.cc
+++ b/chrome/browser/infobars/infobar_service.cc
@@ -6,9 +6,9 @@
 
 #include "base/command_line.h"
 #include "chrome/browser/chrome_notification_types.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/insecure_content_infobar_delegate.h"
 #include "chrome/common/render_messages.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/navigation_details.h"
 #include "content/public/browser/navigation_entry.h"
 #include "content/public/browser/notification_service.h"
@@ -16,6 +16,10 @@
 
 DEFINE_WEB_CONTENTS_USER_DATA_KEY(InfoBarService);
 
+using infobars::InfoBar;
+using infobars::InfoBarDelegate;
+using infobars::InfoBarManager;
+
 // static
 InfoBarDelegate::NavigationDetails
     InfoBarService::NavigationDetailsFromLoadCommittedDetails(
diff --git a/chrome/browser/infobars/infobar_service.h b/chrome/browser/infobars/infobar_service.h
index ea24fc5..39cca9a 100644
--- a/chrome/browser/infobars/infobar_service.h
+++ b/chrome/browser/infobars/infobar_service.h
@@ -8,7 +8,7 @@
 #include <vector>
 
 #include "base/memory/scoped_ptr.h"
-#include "chrome/browser/infobars/infobar_manager.h"
+#include "components/infobars/core/infobar_manager.h"
 #include "content/public/browser/web_contents_observer.h"
 #include "content/public/browser/web_contents_user_data.h"
 
@@ -17,22 +17,25 @@
 class WebContents;
 }
 
+namespace infobars {
 class InfoBar;
+}
 
 // Associates a Tab to a InfoBarManager and manages its lifetime.
 // It manages the infobar notifications and responds to navigation events.
-class InfoBarService : public InfoBarManager,
+class InfoBarService : public infobars::InfoBarManager,
                        public content::WebContentsObserver,
                        public content::WebContentsUserData<InfoBarService> {
  public:
-  static InfoBarDelegate::NavigationDetails
+  static infobars::InfoBarDelegate::NavigationDetails
       NavigationDetailsFromLoadCommittedDetails(
           const content::LoadCommittedDetails& details);
 
   // This function must only be called on infobars that are owned by an
   // InfoBarService instance (or not owned at all, in which case this returns
   // NULL).
-  static content::WebContents* WebContentsFromInfoBar(InfoBar* infobar);
+  static content::WebContents* WebContentsFromInfoBar(
+      infobars::InfoBar* infobar);
 
   // Retrieve the WebContents for the tab this service is associated with.
   content::WebContents* web_contents() {
@@ -49,10 +52,11 @@
   virtual int GetActiveEntryID() OVERRIDE;
   // TODO(droger): Remove these functions once infobar notifications are
   // removed. See http://crbug.com/354380
-  virtual void NotifyInfoBarAdded(InfoBar* infobar) OVERRIDE;
-  virtual void NotifyInfoBarRemoved(InfoBar* infobar, bool animate) OVERRIDE;
-  virtual void NotifyInfoBarReplaced(InfoBar* old_infobar,
-                                     InfoBar* new_infobar) OVERRIDE;
+  virtual void NotifyInfoBarAdded(infobars::InfoBar* infobar) OVERRIDE;
+  virtual void NotifyInfoBarRemoved(infobars::InfoBar* infobar,
+                                    bool animate) OVERRIDE;
+  virtual void NotifyInfoBarReplaced(infobars::InfoBar* old_infobar,
+                                     infobars::InfoBar* new_infobar) OVERRIDE;
 
   // content::WebContentsObserver:
   virtual void RenderProcessGone(base::TerminationStatus status) OVERRIDE;
diff --git a/chrome/browser/infobars/infobars_browsertest.cc b/chrome/browser/infobars/infobars_browsertest.cc
index 17d71e4..7465ce5 100644
--- a/chrome/browser/infobars/infobars_browsertest.cc
+++ b/chrome/browser/infobars/infobars_browsertest.cc
@@ -37,7 +37,7 @@
     ExtensionService* service = profile->GetExtensionService();
 
     content::WindowedNotificationObserver observer(
-        chrome::NOTIFICATION_EXTENSION_LOADED,
+        chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
         content::NotificationService::AllSources());
 
     scoped_ptr<ExtensionInstallPrompt> client(new ExtensionInstallPrompt(
diff --git a/chrome/browser/infobars/insecure_content_infobar_delegate.cc b/chrome/browser/infobars/insecure_content_infobar_delegate.cc
index 1d0a336..aa1620a 100644
--- a/chrome/browser/infobars/insecure_content_infobar_delegate.cc
+++ b/chrome/browser/infobars/insecure_content_infobar_delegate.cc
@@ -6,9 +6,9 @@
 
 #include "base/metrics/histogram.h"
 #include "chrome/browser/google/google_util.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/common/render_messages.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/render_view_host.h"
 #include "content/public/browser/web_contents.h"
@@ -20,14 +20,14 @@
 // static
 void InsecureContentInfoBarDelegate::Create(InfoBarService* infobar_service,
                                             InfoBarType type) {
-  scoped_ptr<InfoBar> new_infobar(ConfirmInfoBarDelegate::CreateInfoBar(
-      scoped_ptr<ConfirmInfoBarDelegate>(
+  scoped_ptr<infobars::InfoBar> new_infobar(
+      ConfirmInfoBarDelegate::CreateInfoBar(scoped_ptr<ConfirmInfoBarDelegate>(
           new InsecureContentInfoBarDelegate(type))));
 
   // Only supsersede an existing insecure content infobar if we are upgrading
   // from DISPLAY to RUN.
   for (size_t i = 0; i < infobar_service->infobar_count(); ++i) {
-    InfoBar* old_infobar = infobar_service->infobar_at(i);
+    infobars::InfoBar* old_infobar = infobar_service->infobar_at(i);
     InsecureContentInfoBarDelegate* delegate =
         old_infobar->delegate()->AsInsecureContentInfoBarDelegate();
     if (delegate != NULL) {
diff --git a/chrome/browser/infobars/simple_alert_infobar_delegate.cc b/chrome/browser/infobars/simple_alert_infobar_delegate.cc
index e3b54bc..fa15f36 100644
--- a/chrome/browser/infobars/simple_alert_infobar_delegate.cc
+++ b/chrome/browser/infobars/simple_alert_infobar_delegate.cc
@@ -4,8 +4,8 @@
 
 #include "chrome/browser/infobars/simple_alert_infobar_delegate.h"
 
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
+#include "components/infobars/core/infobar.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 
 // static
diff --git a/chrome/browser/invalidation/OWNERS b/chrome/browser/invalidation/OWNERS
index 153a202..beb88df 100644
--- a/chrome/browser/invalidation/OWNERS
+++ b/chrome/browser/invalidation/OWNERS
@@ -2,3 +2,4 @@
 nyquist@chromium.org
 rlarocque@chromium.org
 tim@chromium.org
+pavely@chromium.org
diff --git a/chrome/browser/invalidation/device_invalidation_auth_provider_chromeos.cc b/chrome/browser/invalidation/device_invalidation_auth_provider_chromeos.cc
deleted file mode 100644
index 11aa3c6..0000000
--- a/chrome/browser/invalidation/device_invalidation_auth_provider_chromeos.cc
+++ /dev/null
@@ -1,27 +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.
-
-#include "chrome/browser/invalidation/device_invalidation_auth_provider_chromeos.h"
-
-#include "chrome/browser/chromeos/settings/device_oauth2_token_service.h"
-
-namespace invalidation {
-
-DeviceInvalidationAuthProvider::DeviceInvalidationAuthProvider(
-    chromeos::DeviceOAuth2TokenService* token_service)
-    : token_service_(token_service) {}
-
-DeviceInvalidationAuthProvider::~DeviceInvalidationAuthProvider() {}
-
-std::string DeviceInvalidationAuthProvider::GetAccountId() {
-  return token_service_->GetRobotAccountId();
-}
-
-OAuth2TokenService* DeviceInvalidationAuthProvider::GetTokenService() {
-  return token_service_;
-}
-
-bool DeviceInvalidationAuthProvider::ShowLoginUI() { return false; }
-
-}  // namespace invalidation
diff --git a/chrome/browser/invalidation/device_invalidation_auth_provider_chromeos.h b/chrome/browser/invalidation/device_invalidation_auth_provider_chromeos.h
deleted file mode 100644
index ecd1334..0000000
--- a/chrome/browser/invalidation/device_invalidation_auth_provider_chromeos.h
+++ /dev/null
@@ -1,37 +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.
-
-#ifndef CHROME_BROWSER_INVALIDATION_DEVICE_INVALIDATION_AUTH_PROVIDER_CHROMEOS_H_
-#define CHROME_BROWSER_INVALIDATION_DEVICE_INVALIDATION_AUTH_PROVIDER_CHROMEOS_H_
-
-#include "base/macros.h"
-#include "chrome/browser/invalidation/invalidation_auth_provider.h"
-
-namespace chromeos {
-class DeviceOAuth2TokenService;
-}
-
-namespace invalidation {
-
-// Authentication provider implementation backed by DeviceOAuth2TokenService.
-class DeviceInvalidationAuthProvider : public InvalidationAuthProvider {
- public:
-  DeviceInvalidationAuthProvider(
-      chromeos::DeviceOAuth2TokenService* token_service);
-  virtual ~DeviceInvalidationAuthProvider();
-
-  // InvalidationAuthProvider:
-  virtual std::string GetAccountId() OVERRIDE;
-  virtual OAuth2TokenService* GetTokenService() OVERRIDE;
-  virtual bool ShowLoginUI() OVERRIDE;
-
- private:
-  chromeos::DeviceOAuth2TokenService* token_service_;
-
-  DISALLOW_COPY_AND_ASSIGN(DeviceInvalidationAuthProvider);
-};
-
-}  // namespace invalidation
-
-#endif  // CHROME_BROWSER_INVALIDATION_DEVICE_INVALIDATION_AUTH_PROVIDER_CHROMEOS_H_
diff --git a/chrome/browser/invalidation/fake_invalidation_service.cc b/chrome/browser/invalidation/fake_invalidation_service.cc
index 8c34f00..ced8d72 100644
--- a/chrome/browser/invalidation/fake_invalidation_service.cc
+++ b/chrome/browser/invalidation/fake_invalidation_service.cc
@@ -10,25 +10,11 @@
 
 namespace invalidation {
 
-FakeInvalidationAuthProvider::FakeInvalidationAuthProvider() {
-  token_service_.set_auto_post_fetch_response_on_message_loop(true);
-}
-
-FakeInvalidationAuthProvider::~FakeInvalidationAuthProvider() {}
-
-OAuth2TokenService* FakeInvalidationAuthProvider::GetTokenService() {
-  return &token_service_;
-}
-
-std::string FakeInvalidationAuthProvider::GetAccountId() {
-  return "fake@example.com";
-}
-
-bool FakeInvalidationAuthProvider::ShowLoginUI() { return false; }
-
 FakeInvalidationService::FakeInvalidationService()
-    : client_id_(GenerateInvalidatorClientId()) {
+    : client_id_(GenerateInvalidatorClientId()),
+      identity_provider_(&token_service_) {
   invalidator_registrar_.UpdateInvalidatorState(syncer::INVALIDATIONS_ENABLED);
+  token_service_.set_auto_post_fetch_response_on_message_loop(true);
 }
 
 FakeInvalidationService::~FakeInvalidationService() {
@@ -73,9 +59,8 @@
   caller.Run(value);
 }
 
-InvalidationAuthProvider*
-FakeInvalidationService::GetInvalidationAuthProvider() {
-  return &auth_provider_;
+IdentityProvider* FakeInvalidationService::GetIdentityProvider() {
+  return &identity_provider_;
 }
 
 void FakeInvalidationService::SetInvalidatorState(
diff --git a/chrome/browser/invalidation/fake_invalidation_service.h b/chrome/browser/invalidation/fake_invalidation_service.h
index d958bf5..eb7e20d 100644
--- a/chrome/browser/invalidation/fake_invalidation_service.h
+++ b/chrome/browser/invalidation/fake_invalidation_service.h
@@ -10,9 +10,9 @@
 
 #include "base/basictypes.h"
 #include "base/callback_forward.h"
-#include "chrome/browser/invalidation/invalidation_auth_provider.h"
 #include "chrome/browser/invalidation/invalidation_service.h"
 #include "chrome/browser/signin/fake_profile_oauth2_token_service.h"
+#include "google_apis/gaia/fake_identity_provider.h"
 #include "sync/notifier/invalidator_registrar.h"
 #include "sync/notifier/mock_ack_handler.h"
 
@@ -28,27 +28,6 @@
 
 class InvalidationLogger;
 
-// Fake invalidation auth provider implementation.
-class FakeInvalidationAuthProvider : public InvalidationAuthProvider {
- public:
-  FakeInvalidationAuthProvider();
-  virtual ~FakeInvalidationAuthProvider();
-
-  // InvalidationAuthProvider:
-  virtual OAuth2TokenService* GetTokenService() OVERRIDE;
-  virtual std::string GetAccountId() OVERRIDE;
-  virtual bool ShowLoginUI() OVERRIDE;
-
-  FakeProfileOAuth2TokenService* fake_token_service() {
-    return &token_service_;
-  }
-
- private:
-  FakeProfileOAuth2TokenService token_service_;
-
-  DISALLOW_COPY_AND_ASSIGN(FakeInvalidationAuthProvider);
-};
-
 // An InvalidationService that emits invalidations only when
 // its EmitInvalidationForTest method is called.
 class FakeInvalidationService : public InvalidationService {
@@ -71,7 +50,7 @@
   virtual InvalidationLogger* GetInvalidationLogger() OVERRIDE;
   virtual void RequestDetailedStatus(
       base::Callback<void(const base::DictionaryValue&)> caller) const OVERRIDE;
-  virtual InvalidationAuthProvider* GetInvalidationAuthProvider() OVERRIDE;
+  virtual IdentityProvider* GetIdentityProvider() OVERRIDE;
 
   void SetInvalidatorState(syncer::InvalidatorState state);
 
@@ -89,7 +68,8 @@
   std::string client_id_;
   syncer::InvalidatorRegistrar invalidator_registrar_;
   syncer::MockAckHandler mock_ack_handler_;
-  FakeInvalidationAuthProvider auth_provider_;
+  FakeProfileOAuth2TokenService token_service_;
+  FakeIdentityProvider identity_provider_;
 
   DISALLOW_COPY_AND_ASSIGN(FakeInvalidationService);
 };
diff --git a/chrome/browser/invalidation/gcm_invalidation_bridge.cc b/chrome/browser/invalidation/gcm_invalidation_bridge.cc
index dd1b5d8..5925eda 100644
--- a/chrome/browser/invalidation/gcm_invalidation_bridge.cc
+++ b/chrome/browser/invalidation/gcm_invalidation_bridge.cc
@@ -7,13 +7,13 @@
 #include "base/single_thread_task_runner.h"
 #include "base/thread_task_runner_handle.h"
 #include "chrome/browser/invalidation/gcm_invalidation_bridge.h"
-#include "chrome/browser/invalidation/invalidation_auth_provider.h"
 #include "chrome/browser/services/gcm/gcm_profile_service.h"
 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
 #include "chrome/browser/signin/signin_manager_factory.h"
 #include "components/signin/core/browser/profile_oauth2_token_service.h"
 #include "components/signin/core/browser/signin_manager.h"
 #include "google_apis/gaia/gaia_constants.h"
+#include "google_apis/gaia/identity_provider.h"
 
 namespace invalidation {
 namespace {
@@ -149,10 +149,10 @@
 
 GCMInvalidationBridge::GCMInvalidationBridge(
     gcm::GCMProfileService* gcm_profile_service,
-    InvalidationAuthProvider* auth_provider)
+    IdentityProvider* identity_provider)
     : OAuth2TokenService::Consumer("gcm_network_channel"),
       gcm_profile_service_(gcm_profile_service),
-      auth_provider_(auth_provider),
+      identity_provider_(identity_provider),
       subscribed_for_incoming_messages_(false),
       weak_factory_(this) {}
 
@@ -195,8 +195,8 @@
   request_token_callback_ = callback;
   OAuth2TokenService::ScopeSet scopes;
   scopes.insert(GaiaConstants::kChromeSyncOAuth2Scope);
-  access_token_request_ = auth_provider_->GetTokenService()->StartRequest(
-      auth_provider_->GetAccountId(), scopes, this);
+  access_token_request_ = identity_provider_->GetTokenService()->StartRequest(
+      identity_provider_->GetActiveAccountId(), scopes, this);
 }
 
 void GCMInvalidationBridge::OnGetTokenSuccess(
@@ -236,8 +236,8 @@
   DCHECK(CalledOnValidThread());
   OAuth2TokenService::ScopeSet scopes;
   scopes.insert(GaiaConstants::kChromeSyncOAuth2Scope);
-  auth_provider_->GetTokenService()->InvalidateToken(
-      auth_provider_->GetAccountId(), scopes, token);
+  identity_provider_->GetTokenService()->InvalidateToken(
+      identity_provider_->GetActiveAccountId(), scopes, token);
 }
 
 void GCMInvalidationBridge::Register(
diff --git a/chrome/browser/invalidation/gcm_invalidation_bridge.h b/chrome/browser/invalidation/gcm_invalidation_bridge.h
index 9bbaf97..c72c6a1 100644
--- a/chrome/browser/invalidation/gcm_invalidation_bridge.h
+++ b/chrome/browser/invalidation/gcm_invalidation_bridge.h
@@ -14,6 +14,8 @@
 #include "google_apis/gcm/gcm_client.h"
 #include "sync/notifier/gcm_network_channel_delegate.h"
 
+class IdentityProvider;
+
 namespace base {
 class SingleThreadTaskRunner;
 }  // namespace base
@@ -24,8 +26,6 @@
 
 namespace invalidation {
 
-class InvalidationAuthProvider;
-
 // GCMInvalidationBridge and GCMInvalidationBridge::Core implement functions
 // needed for GCMNetworkChannel. GCMInvalidationBridge lives on UI thread while
 // Core lives on IO thread. Core implements GCMNetworkChannelDelegate and posts
@@ -38,7 +38,7 @@
   class Core;
 
   GCMInvalidationBridge(gcm::GCMProfileService* gcm_profile_service,
-                        InvalidationAuthProvider* auth_provider);
+                        IdentityProvider* identity_provider);
   virtual ~GCMInvalidationBridge();
 
   // OAuth2TokenService::Consumer implementation.
@@ -81,7 +81,7 @@
 
  private:
   gcm::GCMProfileService* const gcm_profile_service_;
-  InvalidationAuthProvider* const auth_provider_;
+  IdentityProvider* const identity_provider_;
 
   base::WeakPtr<Core> core_;
   scoped_refptr<base::SingleThreadTaskRunner> core_thread_task_runner_;
diff --git a/chrome/browser/invalidation/gcm_invalidation_bridge_unittest.cc b/chrome/browser/invalidation/gcm_invalidation_bridge_unittest.cc
index 22243e0..6ab650e 100644
--- a/chrome/browser/invalidation/gcm_invalidation_bridge_unittest.cc
+++ b/chrome/browser/invalidation/gcm_invalidation_bridge_unittest.cc
@@ -4,15 +4,14 @@
 
 #include "base/run_loop.h"
 #include "chrome/browser/invalidation/gcm_invalidation_bridge.h"
-#include "chrome/browser/invalidation/invalidation_auth_provider.h"
 #include "chrome/browser/services/gcm/gcm_profile_service.h"
 #include "chrome/browser/services/gcm/gcm_profile_service_factory.h"
 #include "chrome/browser/signin/fake_profile_oauth2_token_service.h"
 #include "chrome/browser/signin/fake_profile_oauth2_token_service_builder.h"
 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
 #include "chrome/test/base/testing_profile.h"
-#include "components/signin/core/browser/profile_oauth2_token_service.h"
 #include "content/public/test/test_browser_thread_bundle.h"
+#include "google_apis/gaia/fake_identity_provider.h"
 #include "google_apis/gaia/google_service_auth_error.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -44,27 +43,6 @@
   DISALLOW_COPY_AND_ASSIGN(FakeGCMProfileService);
 };
 
-// Fake invalidation auth provider implementation.
-class FakeInvalidationAuthProvider : public InvalidationAuthProvider {
- public:
-  explicit FakeInvalidationAuthProvider(
-      ProfileOAuth2TokenService* token_service)
-      : token_service_(token_service) {}
-  virtual ~FakeInvalidationAuthProvider() {}
-
-  // InvalidationAuthProvider:
-  virtual OAuth2TokenService* GetTokenService() OVERRIDE {
-    return token_service_;
-  }
-  virtual std::string GetAccountId() OVERRIDE { return std::string(); }
-  virtual bool ShowLoginUI() OVERRIDE { return false; }
-
- private:
-  OAuth2TokenService* token_service_;
-
-  DISALLOW_COPY_AND_ASSIGN(FakeInvalidationAuthProvider);
-};
-
 class GCMInvalidationBridgeTest : public ::testing::Test {
  protected:
   GCMInvalidationBridgeTest() {}
@@ -87,9 +65,9 @@
         (FakeGCMProfileService*)gcm::GCMProfileServiceFactory::GetForProfile(
             profile_.get());
 
-    auth_provider_.reset(new FakeInvalidationAuthProvider(token_service));
-    bridge_.reset(
-        new GCMInvalidationBridge(gcm_profile_service_, auth_provider_.get()));
+    identity_provider_.reset(new FakeIdentityProvider(token_service));
+    bridge_.reset(new GCMInvalidationBridge(gcm_profile_service_,
+                                            identity_provider_.get()));
 
     delegate_ = bridge_->CreateDelegate();
     delegate_->Initialize();
@@ -112,7 +90,7 @@
   content::TestBrowserThreadBundle thread_bundle_;
   scoped_ptr<Profile> profile_;
   FakeGCMProfileService* gcm_profile_service_;
-  scoped_ptr<FakeInvalidationAuthProvider> auth_provider_;
+  scoped_ptr<FakeIdentityProvider> identity_provider_;
 
   std::vector<std::string> issued_tokens_;
   std::vector<GoogleServiceAuthError> request_token_errors_;
diff --git a/chrome/browser/invalidation/invalidation_auth_provider.cc b/chrome/browser/invalidation/invalidation_auth_provider.cc
deleted file mode 100644
index d8f495f..0000000
--- a/chrome/browser/invalidation/invalidation_auth_provider.cc
+++ /dev/null
@@ -1,27 +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.
-
-#include "chrome/browser/invalidation/invalidation_auth_provider.h"
-
-namespace invalidation {
-
-InvalidationAuthProvider::Observer::~Observer() {}
-
-InvalidationAuthProvider::~InvalidationAuthProvider() {}
-
-void InvalidationAuthProvider::AddObserver(Observer* observer) {
-  observers_.AddObserver(observer);
-}
-
-void InvalidationAuthProvider::RemoveObserver(Observer* observer) {
-  observers_.RemoveObserver(observer);
-}
-
-InvalidationAuthProvider::InvalidationAuthProvider() {}
-
-void InvalidationAuthProvider::FireInvalidationAuthLogout() {
-  FOR_EACH_OBSERVER(Observer, observers_, OnInvalidationAuthLogout());
-}
-
-}  // namespace invalidation
diff --git a/chrome/browser/invalidation/invalidation_auth_provider.h b/chrome/browser/invalidation/invalidation_auth_provider.h
deleted file mode 100644
index 33c1455..0000000
--- a/chrome/browser/invalidation/invalidation_auth_provider.h
+++ /dev/null
@@ -1,58 +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.
-
-#ifndef CHROME_BROWSER_INVALIDATION_INVALIDATION_AUTH_PROVIDER_H_
-#define CHROME_BROWSER_INVALIDATION_INVALIDATION_AUTH_PROVIDER_H_
-
-#include <string>
-
-#include "base/macros.h"
-#include "base/observer_list.h"
-
-class OAuth2TokenService;
-
-namespace invalidation {
-
-// Encapsulates authentication-related dependencies of InvalidationService
-// implementations so different implementations can be used for regular Profiles
-// and Chrome OS Kiosk Apps.
-class InvalidationAuthProvider {
- public:
-  class Observer {
-   public:
-    virtual ~Observer();
-
-    // Called when the user logs out.
-    virtual void OnInvalidationAuthLogout() = 0;
-  };
-
-  virtual ~InvalidationAuthProvider();
-
-  // Gets the token service vending tokens for authentication to the cloud.
-  virtual OAuth2TokenService* GetTokenService() = 0;
-
-  // Gets the account ID to use for authentication.
-  virtual std::string GetAccountId() = 0;
-
-  // Shows the login popup, returns true if successful.
-  virtual bool ShowLoginUI() = 0;
-
-  void AddObserver(Observer* observer);
-  void RemoveObserver(Observer* observer);
-
- protected:
-  InvalidationAuthProvider();
-
-  // Fires an OnInvalidationAuthLogout notification.
-  void FireInvalidationAuthLogout();
-
- private:
-  ObserverList<Observer, true> observers_;
-
-  DISALLOW_COPY_AND_ASSIGN(InvalidationAuthProvider);
-};
-
-}  // namespace invalidation
-
-#endif  // CHROME_BROWSER_INVALIDATION_INVALIDATION_AUTH_PROVIDER_H_
diff --git a/chrome/browser/invalidation/invalidation_controller_android.h b/chrome/browser/invalidation/invalidation_controller_android.h
index 05839ad..03b29f9 100644
--- a/chrome/browser/invalidation/invalidation_controller_android.h
+++ b/chrome/browser/invalidation/invalidation_controller_android.h
@@ -8,7 +8,7 @@
 #include <string>
 
 #include "base/android/jni_android.h"
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "sync/notifier/invalidation_util.h"
 
 namespace invalidation {
diff --git a/chrome/browser/invalidation/invalidation_service.h b/chrome/browser/invalidation/invalidation_service.h
index f5f8717..d964f79 100644
--- a/chrome/browser/invalidation/invalidation_service.h
+++ b/chrome/browser/invalidation/invalidation_service.h
@@ -10,12 +10,13 @@
 #include "sync/notifier/invalidation_util.h"
 #include "sync/notifier/invalidator_state.h"
 
+class IdentityProvider;
+
 namespace syncer {
 class InvalidationHandler;
 }  // namespace syncer
 
 namespace invalidation {
-class InvalidationAuthProvider;
 class InvalidationLogger;
 
 // Interface for classes that handle invalidation registrations and send out
@@ -109,8 +110,8 @@
   virtual void RequestDetailedStatus(
       base::Callback<void(const base::DictionaryValue&)> post_caller) const = 0;
 
-  // Returns the authentication provider.
-  virtual InvalidationAuthProvider* GetInvalidationAuthProvider() = 0;
+  // Returns the identity provider.
+  virtual IdentityProvider* GetIdentityProvider() = 0;
 
  protected:
   virtual ~InvalidationService() { }
diff --git a/chrome/browser/invalidation/invalidation_service_android.cc b/chrome/browser/invalidation/invalidation_service_android.cc
index f53f5be..57a34bd 100644
--- a/chrome/browser/invalidation/invalidation_service_android.cc
+++ b/chrome/browser/invalidation/invalidation_service_android.cc
@@ -68,8 +68,7 @@
     base::Callback<void(const base::DictionaryValue&)> return_callback) const {
 }
 
-InvalidationAuthProvider*
-InvalidationServiceAndroid::GetInvalidationAuthProvider() {
+IdentityProvider* InvalidationServiceAndroid::GetIdentityProvider() {
   return NULL;
 }
 
diff --git a/chrome/browser/invalidation/invalidation_service_android.h b/chrome/browser/invalidation/invalidation_service_android.h
index 039bacb..fe94476 100644
--- a/chrome/browser/invalidation/invalidation_service_android.h
+++ b/chrome/browser/invalidation/invalidation_service_android.h
@@ -55,7 +55,7 @@
   virtual void RequestDetailedStatus(
       base::Callback<void(const base::DictionaryValue&)> caller) const
       OVERRIDE;
-  virtual InvalidationAuthProvider* GetInvalidationAuthProvider() OVERRIDE;
+  virtual IdentityProvider* GetIdentityProvider() OVERRIDE;
 
   // content::NotificationObserver implementation.
   virtual void Observe(int type,
diff --git a/chrome/browser/invalidation/invalidation_service_factory.cc b/chrome/browser/invalidation/invalidation_service_factory.cc
index ef34d2e..61b2e07 100644
--- a/chrome/browser/invalidation/invalidation_service_factory.cc
+++ b/chrome/browser/invalidation/invalidation_service_factory.cc
@@ -4,16 +4,17 @@
 
 #include "chrome/browser/invalidation/invalidation_service_factory.h"
 
+#include "base/memory/scoped_ptr.h"
 #include "base/prefs/pref_registry.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/invalidation/fake_invalidation_service.h"
 #include "chrome/browser/invalidation/invalidation_service.h"
 #include "chrome/browser/invalidation/invalidation_service_android.h"
 #include "chrome/browser/invalidation/invalidator_storage.h"
-#include "chrome/browser/invalidation/profile_invalidation_auth_provider.h"
 #include "chrome/browser/invalidation/ticl_invalidation_service.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/services/gcm/gcm_profile_service_factory.h"
+#include "chrome/browser/signin/profile_identity_provider.h"
 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
 #include "chrome/browser/signin/signin_manager_factory.h"
 #include "chrome/browser/ui/webui/signin/login_ui_service_factory.h"
@@ -22,6 +23,8 @@
 #include "components/signin/core/browser/profile_oauth2_token_service.h"
 #include "components/signin/core/browser/signin_manager.h"
 #include "components/user_prefs/pref_registry_syncable.h"
+#include "net/url_request/url_request_context_getter.h"
+#include "sync/notifier/invalidation_state_tracker.h"
 
 #if defined(OS_ANDROID)
 #include "chrome/browser/invalidation/invalidation_controller_android.h"
@@ -32,8 +35,8 @@
 #include "chrome/browser/chromeos/login/user_manager.h"
 #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
 #include "chrome/browser/chromeos/profiles/profile_helper.h"
+#include "chrome/browser/chromeos/settings/device_identity_provider.h"
 #include "chrome/browser/chromeos/settings/device_oauth2_token_service_factory.h"
-#include "chrome/browser/invalidation/device_invalidation_auth_provider_chromeos.h"
 #endif
 
 namespace invalidation {
@@ -95,7 +98,7 @@
                                         new InvalidationControllerAndroid());
 #else
 
-  scoped_ptr<InvalidationAuthProvider> auth_provider;
+  scoped_ptr<IdentityProvider> identity_provider;
 
 #if defined(OS_CHROMEOS)
   policy::BrowserPolicyConnectorChromeOS* connector =
@@ -103,21 +106,24 @@
   if (chromeos::UserManager::IsInitialized() &&
       chromeos::UserManager::Get()->IsLoggedInAsKioskApp() &&
       connector->IsEnterpriseManaged()) {
-    auth_provider.reset(new DeviceInvalidationAuthProvider(
+    identity_provider.reset(new chromeos::DeviceIdentityProvider(
         chromeos::DeviceOAuth2TokenServiceFactory::Get()));
   }
 #endif
 
-  if (!auth_provider) {
-    auth_provider.reset(new ProfileInvalidationAuthProvider(
+  if (!identity_provider) {
+    identity_provider.reset(new ProfileIdentityProvider(
         SigninManagerFactory::GetForProfile(profile),
         ProfileOAuth2TokenServiceFactory::GetForProfile(profile),
         LoginUIServiceFactory::GetForProfile(profile)));
   }
 
-  TiclInvalidationService* service =
-      new TiclInvalidationService(auth_provider.Pass(), profile);
-  service->Init();
+  TiclInvalidationService* service = new TiclInvalidationService(
+      identity_provider.Pass(),
+      profile->GetRequestContext(),
+      profile);
+  service->Init(scoped_ptr<syncer::InvalidationStateTracker>(
+      new InvalidatorStorage(profile->GetPrefs())));
   return service;
 #endif
 }
diff --git a/chrome/browser/invalidation/invalidation_service_test_template.h b/chrome/browser/invalidation/invalidation_service_test_template.h
index 05e9928..124e837 100644
--- a/chrome/browser/invalidation/invalidation_service_test_template.h
+++ b/chrome/browser/invalidation/invalidation_service_test_template.h
@@ -74,6 +74,7 @@
 #include "base/basictypes.h"
 #include "base/compiler_specific.h"
 #include "chrome/browser/invalidation/invalidation_service.h"
+#include "content/public/test/test_browser_thread_bundle.h"
 #include "google/cacheinvalidation/include/types.h"
 #include "google/cacheinvalidation/types.pb.h"
 #include "sync/internal_api/public/base/ack_handle.h"
@@ -100,6 +101,7 @@
     return this->delegate_.GetInvalidationService();
   }
 
+  content::TestBrowserThreadBundle thread_bundle_;
   InvalidatorTestDelegate delegate_;
 
   const invalidation::ObjectId id1;
diff --git a/chrome/browser/invalidation/invalidator_storage.cc b/chrome/browser/invalidation/invalidator_storage.cc
index 39e32b6..bc2cb74 100644
--- a/chrome/browser/invalidation/invalidator_storage.cc
+++ b/chrome/browser/invalidation/invalidator_storage.cc
@@ -82,7 +82,7 @@
 InvalidatorStorage::~InvalidatorStorage() {
 }
 
-void InvalidatorStorage::SetInvalidatorClientId(const std::string& client_id) {
+void InvalidatorStorage::ClearAndSetNewClientId(const std::string& client_id) {
   DCHECK(thread_checker_.CalledOnValidThread());
   Clear();  // We can't reuse our old invalidation state if the ID changes.
   pref_service_->SetString(prefs::kInvalidatorClientId, client_id);
diff --git a/chrome/browser/invalidation/invalidator_storage.h b/chrome/browser/invalidation/invalidator_storage.h
index 75c3f90..37ef025 100644
--- a/chrome/browser/invalidation/invalidator_storage.h
+++ b/chrome/browser/invalidation/invalidator_storage.h
@@ -11,7 +11,6 @@
 
 #include "base/basictypes.h"
 #include "base/gtest_prod_util.h"
-#include "base/memory/weak_ptr.h"
 #include "base/threading/thread_checker.h"
 #include "sync/notifier/invalidation_state_tracker.h"
 #include "sync/notifier/unacked_invalidation_set.h"
@@ -29,8 +28,7 @@
 
 namespace invalidation {
 
-class InvalidatorStorage : public base::SupportsWeakPtr<InvalidatorStorage>,
-                           public syncer::InvalidationStateTracker {
+class InvalidatorStorage : public syncer::InvalidationStateTracker {
  public:
   static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
 
@@ -39,7 +37,7 @@
   virtual ~InvalidatorStorage();
 
   // InvalidationStateTracker implementation.
-  virtual void SetInvalidatorClientId(const std::string& client_id) OVERRIDE;
+  virtual void ClearAndSetNewClientId(const std::string& client_id) OVERRIDE;
   virtual std::string GetInvalidatorClientId() const OVERRIDE;
   virtual void SetBootstrapData(const std::string& data) OVERRIDE;
   virtual std::string GetBootstrapData() const OVERRIDE;
diff --git a/chrome/browser/invalidation/invalidator_storage_unittest.cc b/chrome/browser/invalidation/invalidator_storage_unittest.cc
index b09d8d5..b587997 100644
--- a/chrome/browser/invalidation/invalidator_storage_unittest.cc
+++ b/chrome/browser/invalidation/invalidator_storage_unittest.cc
@@ -32,7 +32,7 @@
   EXPECT_TRUE(storage.GetBootstrapData().empty());
   EXPECT_TRUE(storage.GetInvalidatorClientId().empty());
 
-  storage.SetInvalidatorClientId("fake_id");
+  storage.ClearAndSetNewClientId("fake_id");
   EXPECT_EQ("fake_id", storage.GetInvalidatorClientId());
 
   storage.SetBootstrapData("test");
@@ -48,7 +48,7 @@
   InvalidatorStorage storage(&pref_service_);
   const std::string client_id("fK6eDzAIuKqx9A4+93bljg==");
 
-  storage.SetInvalidatorClientId(client_id);
+  storage.ClearAndSetNewClientId(client_id);
   EXPECT_EQ(client_id, storage.GetInvalidatorClientId());
 }
 
diff --git a/chrome/browser/invalidation/p2p_invalidation_service.cc b/chrome/browser/invalidation/p2p_invalidation_service.cc
index 416525a..5b6a87d 100644
--- a/chrome/browser/invalidation/p2p_invalidation_service.cc
+++ b/chrome/browser/invalidation/p2p_invalidation_service.cc
@@ -5,9 +5,9 @@
 #include "chrome/browser/invalidation/p2p_invalidation_service.h"
 
 #include "base/command_line.h"
-#include "chrome/browser/invalidation/invalidation_auth_provider.h"
 #include "chrome/browser/invalidation/invalidation_service_util.h"
 #include "chrome/common/chrome_switches.h"
+#include "google_apis/gaia/identity_provider.h"
 #include "jingle/notifier/base/notifier_options.h"
 #include "jingle/notifier/listener/push_client.h"
 #include "net/url_request/url_request_context_getter.h"
@@ -20,10 +20,10 @@
 namespace invalidation {
 
 P2PInvalidationService::P2PInvalidationService(
-    scoped_ptr<InvalidationAuthProvider> auth_provider,
+    scoped_ptr<IdentityProvider> identity_provider,
     const scoped_refptr<net::URLRequestContextGetter>& request_context,
     syncer::P2PNotificationTarget notification_target)
-    : auth_provider_(auth_provider.Pass()) {
+    : identity_provider_(identity_provider.Pass()) {
   notifier::NotifierOptions notifier_options =
       ParseNotifierOptions(*CommandLine::ForCurrentProcess());
   notifier_options.request_context_getter = request_context;
@@ -85,9 +85,8 @@
   caller.Run(value);
 }
 
-InvalidationAuthProvider*
-P2PInvalidationService::GetInvalidationAuthProvider() {
-  return auth_provider_.get();
+IdentityProvider* P2PInvalidationService::GetIdentityProvider() {
+  return identity_provider_.get();
 }
 
 }  // namespace invalidation
diff --git a/chrome/browser/invalidation/p2p_invalidation_service.h b/chrome/browser/invalidation/p2p_invalidation_service.h
index bd4c695..f19d059 100644
--- a/chrome/browser/invalidation/p2p_invalidation_service.h
+++ b/chrome/browser/invalidation/p2p_invalidation_service.h
@@ -32,7 +32,7 @@
       public InvalidationService {
  public:
   P2PInvalidationService(
-      scoped_ptr<InvalidationAuthProvider> auth_provider,
+      scoped_ptr<IdentityProvider> identity_provider,
       const scoped_refptr<net::URLRequestContextGetter>& request_context,
       syncer::P2PNotificationTarget notification_target);
   virtual ~P2PInvalidationService();
@@ -54,7 +54,7 @@
   virtual InvalidationLogger* GetInvalidationLogger() OVERRIDE;
   virtual void RequestDetailedStatus(
       base::Callback<void(const base::DictionaryValue&)> caller) const OVERRIDE;
-  virtual InvalidationAuthProvider* GetInvalidationAuthProvider() OVERRIDE;
+  virtual IdentityProvider* GetIdentityProvider() OVERRIDE;
 
   void UpdateCredentials(const std::string& username,
                          const std::string& password);
@@ -62,7 +62,7 @@
   void SendInvalidation(const syncer::ObjectIdSet& ids);
 
  private:
-  scoped_ptr<InvalidationAuthProvider> auth_provider_;
+  scoped_ptr<IdentityProvider> identity_provider_;
   scoped_ptr<syncer::P2PInvalidator> invalidator_;
   std::string invalidator_id_;
 
diff --git a/chrome/browser/invalidation/profile_invalidation_auth_provider.cc b/chrome/browser/invalidation/profile_invalidation_auth_provider.cc
deleted file mode 100644
index 468520d..0000000
--- a/chrome/browser/invalidation/profile_invalidation_auth_provider.cc
+++ /dev/null
@@ -1,44 +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.
-
-#include "chrome/browser/invalidation/profile_invalidation_auth_provider.h"
-
-#include "chrome/browser/ui/webui/signin/login_ui_service.h"
-#include "components/signin/core/browser/profile_oauth2_token_service.h"
-
-namespace invalidation {
-
-ProfileInvalidationAuthProvider::ProfileInvalidationAuthProvider(
-    SigninManagerBase* signin_manager,
-    ProfileOAuth2TokenService* token_service,
-    LoginUIService* login_ui_service)
-    : signin_manager_(signin_manager),
-      token_service_(token_service),
-      login_ui_service_(login_ui_service) {
-  signin_manager_->AddObserver(this);
-}
-
-ProfileInvalidationAuthProvider::~ProfileInvalidationAuthProvider() {
-  signin_manager_->RemoveObserver(this);
-}
-
-std::string ProfileInvalidationAuthProvider::GetAccountId() {
-  return signin_manager_->GetAuthenticatedAccountId();
-}
-
-OAuth2TokenService* ProfileInvalidationAuthProvider::GetTokenService() {
-  return token_service_;
-}
-
-bool ProfileInvalidationAuthProvider::ShowLoginUI() {
-  login_ui_service_->ShowLoginPopup();
-  return true;
-}
-
-void ProfileInvalidationAuthProvider::GoogleSignedOut(
-    const std::string& username) {
-  FireInvalidationAuthLogout();
-}
-
-}  // namespace invalidation
diff --git a/chrome/browser/invalidation/profile_invalidation_auth_provider.h b/chrome/browser/invalidation/profile_invalidation_auth_provider.h
deleted file mode 100644
index aa98828..0000000
--- a/chrome/browser/invalidation/profile_invalidation_auth_provider.h
+++ /dev/null
@@ -1,45 +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.
-
-#ifndef CHROME_BROWSER_INVALIDATION_PROFILE_INVALIDATION_AUTH_PROVIDER_H_
-#define CHROME_BROWSER_INVALIDATION_PROFILE_INVALIDATION_AUTH_PROVIDER_H_
-
-#include "base/macros.h"
-#include "chrome/browser/invalidation/invalidation_auth_provider.h"
-#include "components/signin/core/browser/signin_manager_base.h"
-
-class LoginUIService;
-class ProfileOAuth2TokenService;
-
-namespace invalidation {
-
-// An authentication provider implementation that's backed by
-// ProfileOAuth2TokenService and SigninManager.
-class ProfileInvalidationAuthProvider : public InvalidationAuthProvider,
-                                        public SigninManagerBase::Observer {
- public:
-  ProfileInvalidationAuthProvider(SigninManagerBase* signin_manager,
-                                  ProfileOAuth2TokenService* token_service,
-                                  LoginUIService* login_ui_service);
-  virtual ~ProfileInvalidationAuthProvider();
-
-  // InvalidationAuthProvider:
-  virtual std::string GetAccountId() OVERRIDE;
-  virtual OAuth2TokenService* GetTokenService() OVERRIDE;
-  virtual bool ShowLoginUI() OVERRIDE;
-
-  // SigninManagerBase::Observer:
-  virtual void GoogleSignedOut(const std::string& username) OVERRIDE;
-
- private:
-  SigninManagerBase* const signin_manager_;
-  ProfileOAuth2TokenService* const token_service_;
-  LoginUIService* const login_ui_service_;
-
-  DISALLOW_COPY_AND_ASSIGN(ProfileInvalidationAuthProvider);
-};
-
-}  // namespace invalidation
-
-#endif  // CHROME_BROWSER_INVALIDATION_PROFILE_INVALIDATION_AUTH_PROVIDER_H_
diff --git a/chrome/browser/invalidation/ticl_invalidation_service.cc b/chrome/browser/invalidation/ticl_invalidation_service.cc
index 536d965..8db9111 100644
--- a/chrome/browser/invalidation/ticl_invalidation_service.cc
+++ b/chrome/browser/invalidation/ticl_invalidation_service.cc
@@ -8,8 +8,6 @@
 #include "base/metrics/histogram.h"
 #include "base/prefs/pref_service.h"
 #include "chrome/browser/invalidation/gcm_invalidation_bridge.h"
-#include "chrome/browser/invalidation/invalidation_auth_provider.h"
-#include "chrome/browser/invalidation/invalidation_logger.h"
 #include "chrome/browser/invalidation/invalidation_service_util.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/services/gcm/gcm_profile_service.h"
@@ -19,6 +17,7 @@
 #include "chrome/common/pref_names.h"
 #include "components/signin/core/browser/profile_oauth2_token_service.h"
 #include "google_apis/gaia/gaia_constants.h"
+#include "net/url_request/url_request_context_getter.h"
 #include "sync/notifier/gcm_network_channel_delegate.h"
 #include "sync/notifier/invalidation_util.h"
 #include "sync/notifier/invalidator.h"
@@ -61,28 +60,30 @@
 namespace invalidation {
 
 TiclInvalidationService::TiclInvalidationService(
-    scoped_ptr<InvalidationAuthProvider> auth_provider,
+    scoped_ptr<IdentityProvider> identity_provider,
+    const scoped_refptr<net::URLRequestContextGetter>& request_context,
     Profile* profile)
     : OAuth2TokenService::Consumer("ticl_invalidation"),
       profile_(profile),
-      auth_provider_(auth_provider.Pass()),
+      identity_provider_(identity_provider.Pass()),
       invalidator_registrar_(new syncer::InvalidatorRegistrar()),
       request_access_token_backoff_(&kRequestAccessTokenBackoffPolicy),
       network_channel_type_(PUSH_CLIENT_CHANNEL),
+      request_context_(request_context),
       logger_() {}
 
 TiclInvalidationService::~TiclInvalidationService() {
   DCHECK(CalledOnValidThread());
 }
 
-void TiclInvalidationService::Init() {
+void TiclInvalidationService::Init(
+    scoped_ptr<syncer::InvalidationStateTracker> invalidation_state_tracker) {
   DCHECK(CalledOnValidThread());
+  invalidation_state_tracker_ = invalidation_state_tracker.Pass();
 
-  invalidator_storage_.reset(new InvalidatorStorage(profile_->GetPrefs()));
-  if (invalidator_storage_->GetInvalidatorClientId().empty()) {
-    // This also clears any existing state.  We can't reuse old invalidator
-    // state with the new ID anyway.
-    invalidator_storage_->SetInvalidatorClientId(GenerateInvalidatorClientId());
+  if (invalidation_state_tracker_->GetInvalidatorClientId().empty()) {
+    invalidation_state_tracker_->ClearAndSetNewClientId(
+        GenerateInvalidatorClientId());
   }
 
   pref_change_registrar_.Init(profile_->GetPrefs());
@@ -104,14 +105,17 @@
     StartInvalidator(network_channel_type_);
   }
 
-  auth_provider_->AddObserver(this);
-  auth_provider_->GetTokenService()->AddObserver(this);
+  identity_provider_->AddObserver(this);
+  identity_provider_->AddActiveAccountRefreshTokenObserver(this);
 }
 
-void TiclInvalidationService::InitForTest(syncer::Invalidator* invalidator) {
+void TiclInvalidationService::InitForTest(
+    scoped_ptr<syncer::InvalidationStateTracker> invalidation_state_tracker,
+    syncer::Invalidator* invalidator) {
   // Here we perform the equivalent of Init() and StartInvalidator(), but with
   // some minor changes to account for the fact that we're injecting the
   // invalidator.
+  invalidation_state_tracker_ = invalidation_state_tracker.Pass();
   invalidator_.reset(invalidator);
 
   invalidator_->RegisterHandler(this);
@@ -169,16 +173,15 @@
 
 std::string TiclInvalidationService::GetInvalidatorClientId() const {
   DCHECK(CalledOnValidThread());
-  return invalidator_storage_->GetInvalidatorClientId();
+  return invalidation_state_tracker_->GetInvalidatorClientId();
 }
 
 InvalidationLogger* TiclInvalidationService::GetInvalidationLogger() {
   return &logger_;
 }
 
-InvalidationAuthProvider*
-TiclInvalidationService::GetInvalidationAuthProvider() {
-  return auth_provider_.get();
+IdentityProvider* TiclInvalidationService::GetIdentityProvider() {
+  return identity_provider_.get();
 }
 
 void TiclInvalidationService::RequestDetailedStatus(
@@ -199,8 +202,8 @@
     oauth2_scopes.insert(kOAuth2Scopes[i]);
   // Invalidate previous token, otherwise token service will return the same
   // token again.
-  const std::string& account_id = auth_provider_->GetAccountId();
-  OAuth2TokenService* token_service = auth_provider_->GetTokenService();
+  const std::string& account_id = identity_provider_->GetActiveAccountId();
+  OAuth2TokenService* token_service = identity_provider_->GetTokenService();
   token_service->InvalidateToken(account_id, oauth2_scopes, access_token_);
   access_token_.clear();
   access_token_request_ =
@@ -255,24 +258,18 @@
 
 void TiclInvalidationService::OnRefreshTokenAvailable(
     const std::string& account_id) {
-  if (auth_provider_->GetAccountId() == account_id) {
-    if (!IsStarted() && IsReadyToStart()) {
-      StartInvalidator(network_channel_type_);
-    }
-  }
+  if (!IsStarted() && IsReadyToStart())
+    StartInvalidator(network_channel_type_);
 }
 
 void TiclInvalidationService::OnRefreshTokenRevoked(
     const std::string& account_id) {
-  if (auth_provider_->GetAccountId() == account_id) {
-    access_token_.clear();
-    if (IsStarted()) {
-      UpdateInvalidatorCredentials();
-    }
-  }
+  access_token_.clear();
+  if (IsStarted())
+    UpdateInvalidatorCredentials();
 }
 
-void TiclInvalidationService::OnInvalidationAuthLogout() {
+void TiclInvalidationService::OnActiveAccountLogout() {
   access_token_request_.reset();
   request_access_token_retry_timer_.Stop();
 
@@ -280,11 +277,11 @@
     StopInvalidator();
   }
 
-  // This service always expects to have a valid invalidator storage.
-  // So we must not only clear the old one, but also start a new one.
-  invalidator_storage_->Clear();
-  invalidator_storage_.reset(new InvalidatorStorage(profile_->GetPrefs()));
-  invalidator_storage_->SetInvalidatorClientId(GenerateInvalidatorClientId());
+  // This service always expects to have a valid invalidation state. Thus, we
+  // must generate a new client ID to replace the existing one. Setting a new
+  // client ID also clears all other state.
+  invalidation_state_tracker_->
+      ClearAndSetNewClientId(GenerateInvalidatorClientId());
 }
 
 void TiclInvalidationService::OnInvalidatorStateChange(
@@ -320,12 +317,12 @@
 
 void TiclInvalidationService::Shutdown() {
   DCHECK(CalledOnValidThread());
-  auth_provider_->GetTokenService()->RemoveObserver(this);
-  auth_provider_->RemoveObserver(this);
+  identity_provider_->RemoveActiveAccountRefreshTokenObserver(this);
+  identity_provider_->RemoveObserver(this);
   if (IsStarted()) {
     StopInvalidator();
   }
-  invalidator_storage_.reset();
+  invalidation_state_tracker_.reset();
   invalidator_registrar_.reset();
 }
 
@@ -335,12 +332,12 @@
     return false;
   }
 
-  if (auth_provider_->GetAccountId().empty()) {
+  if (identity_provider_->GetActiveAccountId().empty()) {
     DVLOG(2) << "Not starting TiclInvalidationService: User is not signed in.";
     return false;
   }
 
-  OAuth2TokenService* token_service = auth_provider_->GetTokenService();
+  OAuth2TokenService* token_service = identity_provider_->GetTokenService();
   if (!token_service) {
     DVLOG(2)
         << "Not starting TiclInvalidationService: "
@@ -348,7 +345,8 @@
     return false;
   }
 
-  if (!token_service->RefreshTokenIsAvailable(auth_provider_->GetAccountId())) {
+  if (!token_service->RefreshTokenIsAvailable(
+          identity_provider_->GetActiveAccountId())) {
     DVLOG(2)
         << "Not starting TiclInvalidationServce: Waiting for refresh token.";
     return false;
@@ -365,8 +363,8 @@
     InvalidationNetworkChannel network_channel) {
   DCHECK(CalledOnValidThread());
   DCHECK(!invalidator_);
-  DCHECK(invalidator_storage_);
-  DCHECK(!invalidator_storage_->GetInvalidatorClientId().empty());
+  DCHECK(invalidation_state_tracker_);
+  DCHECK(!invalidation_state_tracker_->GetInvalidatorClientId().empty());
 
   // Request access token for PushClientChannel. GCMNetworkChannel will request
   // access token before sending message to server.
@@ -384,7 +382,7 @@
     case PUSH_CLIENT_CHANNEL: {
       notifier::NotifierOptions options =
           ParseNotifierOptions(*CommandLine::ForCurrentProcess());
-      options.request_context_getter = profile_->GetRequestContext();
+      options.request_context_getter = request_context_;
       options.auth_mechanism = "X-OAUTH2";
       network_channel_options_.SetString("Options.HostPort",
                                          options.xmpp_host_port.ToString());
@@ -398,11 +396,11 @@
     case GCM_NETWORK_CHANNEL: {
       gcm::GCMProfileService* gcm_profile_service =
           gcm::GCMProfileServiceFactory::GetForProfile(profile_);
-      gcm_invalidation_bridge_.reset(
-          new GCMInvalidationBridge(gcm_profile_service, auth_provider_.get()));
+      gcm_invalidation_bridge_.reset(new GCMInvalidationBridge(
+          gcm_profile_service, identity_provider_.get()));
       network_channel_creator =
           syncer::NonBlockingInvalidator::MakeGCMNetworkChannelCreator(
-              profile_->GetRequestContext(),
+              request_context_,
               gcm_invalidation_bridge_->CreateDelegate().Pass());
       break;
     }
@@ -413,13 +411,12 @@
   }
   invalidator_.reset(new syncer::NonBlockingInvalidator(
           network_channel_creator,
-          invalidator_storage_->GetInvalidatorClientId(),
-          invalidator_storage_->GetSavedInvalidations(),
-          invalidator_storage_->GetBootstrapData(),
-          syncer::WeakHandle<syncer::InvalidationStateTracker>(
-              invalidator_storage_->AsWeakPtr()),
+          invalidation_state_tracker_->GetInvalidatorClientId(),
+          invalidation_state_tracker_->GetSavedInvalidations(),
+          invalidation_state_tracker_->GetBootstrapData(),
+          invalidation_state_tracker_.get(),
           GetUserAgent(),
-          profile_->GetRequestContext()));
+          request_context_));
 
   UpdateInvalidatorCredentials();
 
@@ -449,7 +446,7 @@
 }
 
 void TiclInvalidationService::UpdateInvalidatorCredentials() {
-  std::string email = auth_provider_->GetAccountId();
+  std::string email = identity_provider_->GetActiveAccountId();
 
   DCHECK(!email.empty()) << "Expected user to be signed in.";
 
diff --git a/chrome/browser/invalidation/ticl_invalidation_service.h b/chrome/browser/invalidation/ticl_invalidation_service.h
index 684ed2a..c3af571 100644
--- a/chrome/browser/invalidation/ticl_invalidation_service.h
+++ b/chrome/browser/invalidation/ticl_invalidation_service.h
@@ -7,16 +7,17 @@
 
 #include <string>
 
+#include "base/memory/ref_counted.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/prefs/pref_change_registrar.h"
 #include "base/threading/non_thread_safe.h"
 #include "base/timer/timer.h"
-#include "chrome/browser/invalidation/invalidation_auth_provider.h"
+#include "base/values.h"
 #include "chrome/browser/invalidation/invalidation_logger.h"
 #include "chrome/browser/invalidation/invalidation_service.h"
-#include "chrome/browser/invalidation/invalidator_storage.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "components/signin/core/browser/profile_oauth2_token_service.h"
+#include "google_apis/gaia/identity_provider.h"
 #include "google_apis/gaia/oauth2_token_service.h"
 #include "net/base/backoff_entry.h"
 #include "sync/notifier/invalidation_handler.h"
@@ -24,7 +25,12 @@
 
 class Profile;
 
+namespace net {
+class URLRequestContextGetter;
+}
+
 namespace syncer {
+class InvalidationStateTracker;
 class Invalidator;
 }
 
@@ -37,7 +43,7 @@
                                 public InvalidationService,
                                 public OAuth2TokenService::Consumer,
                                 public OAuth2TokenService::Observer,
-                                public InvalidationAuthProvider::Observer,
+                                public IdentityProvider::Observer,
                                 public syncer::InvalidationHandler {
  public:
   enum InvalidationNetworkChannel {
@@ -49,11 +55,14 @@
     NETWORK_CHANNELS_COUNT = 2
   };
 
-  TiclInvalidationService(scoped_ptr<InvalidationAuthProvider> auth_provider,
-                          Profile* profile);
+  TiclInvalidationService(
+      scoped_ptr<IdentityProvider> identity_provider,
+      const scoped_refptr<net::URLRequestContextGetter>& request_context,
+      Profile* profile);
   virtual ~TiclInvalidationService();
 
-  void Init();
+  void Init(
+      scoped_ptr<syncer::InvalidationStateTracker> invalidation_state_tracker);
 
   // InvalidationService implementation.
   // It is an error to have registered handlers when Shutdown() is called.
@@ -69,7 +78,7 @@
   virtual InvalidationLogger* GetInvalidationLogger() OVERRIDE;
   virtual void RequestDetailedStatus(
       base::Callback<void(const base::DictionaryValue&)> caller) const OVERRIDE;
-  virtual InvalidationAuthProvider* GetInvalidationAuthProvider() OVERRIDE;
+  virtual IdentityProvider* GetIdentityProvider() OVERRIDE;
 
   void RequestAccessToken();
 
@@ -86,8 +95,8 @@
   virtual void OnRefreshTokenAvailable(const std::string& account_id) OVERRIDE;
   virtual void OnRefreshTokenRevoked(const std::string& account_id) OVERRIDE;
 
-  // InvalidationAuthProvider::Observer implementation.
-  virtual void OnInvalidationAuthLogout() OVERRIDE;
+  // IdentityProvider::Observer implementation.
+  virtual void OnActiveAccountLogout() OVERRIDE;
 
   // syncer::InvalidationHandler implementation.
   virtual void OnInvalidatorStateChange(
@@ -101,7 +110,9 @@
 
  protected:
   // Initializes with an injected invalidator.
-  void InitForTest(syncer::Invalidator* invalidator);
+  void InitForTest(
+      scoped_ptr<syncer::InvalidationStateTracker> invalidation_state_tracker,
+      syncer::Invalidator* invalidator);
 
   friend class TiclInvalidationServiceTestDelegate;
   friend class TiclInvalidationServiceChannelTest;
@@ -116,10 +127,10 @@
   void StopInvalidator();
 
   Profile *const profile_;
-  scoped_ptr<InvalidationAuthProvider> auth_provider_;
+  scoped_ptr<IdentityProvider> identity_provider_;
 
   scoped_ptr<syncer::InvalidatorRegistrar> invalidator_registrar_;
-  scoped_ptr<InvalidatorStorage> invalidator_storage_;
+  scoped_ptr<syncer::InvalidationStateTracker> invalidation_state_tracker_;
   scoped_ptr<syncer::Invalidator> invalidator_;
 
   // TiclInvalidationService needs to remember access token in order to
@@ -135,6 +146,7 @@
   PrefChangeRegistrar pref_change_registrar_;
   InvalidationNetworkChannel network_channel_type_;
   scoped_ptr<GCMInvalidationBridge> gcm_invalidation_bridge_;
+  scoped_refptr<net::URLRequestContextGetter> request_context_;
 
   // The invalidation logger object we use to record state changes
   // and invalidations.
diff --git a/chrome/browser/invalidation/ticl_invalidation_service_unittest.cc b/chrome/browser/invalidation/ticl_invalidation_service_unittest.cc
index 9c90df7..a4588a9 100644
--- a/chrome/browser/invalidation/ticl_invalidation_service_unittest.cc
+++ b/chrome/browser/invalidation/ticl_invalidation_service_unittest.cc
@@ -7,15 +7,19 @@
 #include "base/prefs/pref_service.h"
 #include "chrome/browser/invalidation/invalidation_service_factory.h"
 #include "chrome/browser/invalidation/invalidation_service_test_template.h"
-#include "chrome/browser/invalidation/profile_invalidation_auth_provider.h"
+#include "chrome/browser/invalidation/invalidator_storage.h"
 #include "chrome/browser/signin/fake_profile_oauth2_token_service.h"
 #include "chrome/browser/signin/fake_signin_manager.h"
+#include "chrome/browser/signin/profile_identity_provider.h"
 #include "chrome/browser/signin/signin_manager_factory.h"
 #include "chrome/common/pref_names.h"
 #include "chrome/test/base/testing_profile.h"
 #include "components/signin/core/browser/signin_manager.h"
+#include "content/public/test/test_browser_thread_bundle.h"
+#include "net/url_request/url_request_context_getter.h"
 #include "sync/notifier/fake_invalidation_handler.h"
 #include "sync/notifier/fake_invalidator.h"
+#include "sync/notifier/invalidation_state_tracker.h"
 #include "sync/notifier/invalidation_util.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -38,17 +42,20 @@
     profile_.reset(new TestingProfile());
     token_service_.reset(new FakeProfileOAuth2TokenService);
     invalidation_service_.reset(new TiclInvalidationService(
-        scoped_ptr<InvalidationAuthProvider>(
-            new ProfileInvalidationAuthProvider(
-                SigninManagerFactory::GetForProfile(profile_.get()),
-                token_service_.get(),
-                NULL)),
+        scoped_ptr<IdentityProvider>(new ProfileIdentityProvider(
+            SigninManagerFactory::GetForProfile(profile_.get()),
+            token_service_.get(),
+            NULL)),
+        profile_->GetRequestContext(),
         profile_.get()));
   }
 
   void InitializeInvalidationService() {
     fake_invalidator_ = new syncer::FakeInvalidator();
-    invalidation_service_->InitForTest(fake_invalidator_);
+    invalidation_service_->InitForTest(
+        scoped_ptr<syncer::InvalidationStateTracker>(
+            new InvalidatorStorage(profile_->GetPrefs())),
+        fake_invalidator_);
   }
 
   InvalidationService* GetInvalidationService() {
@@ -92,12 +99,14 @@
         SigninManagerFactory::GetForProfile(profile_.get()));
     token_service_.reset(new FakeProfileOAuth2TokenService);
 
-    scoped_ptr<InvalidationAuthProvider> auth_provider(
-        new ProfileInvalidationAuthProvider(
-            fake_signin_manager_, token_service_.get(), NULL));
-    invalidation_service_.reset(
-        new TiclInvalidationService(auth_provider.Pass(), profile_.get()));
-    invalidation_service_->Init();
+    scoped_ptr<IdentityProvider> identity_provider(new ProfileIdentityProvider(
+        fake_signin_manager_, token_service_.get(), NULL));
+    invalidation_service_.reset(new TiclInvalidationService(
+        identity_provider.Pass(),
+        profile_->GetRequestContext(),
+        profile_.get()));
+    invalidation_service_->Init(scoped_ptr<syncer::InvalidationStateTracker>(
+        new InvalidatorStorage(profile_->GetPrefs())));
   }
 
   virtual void TearDown() OVERRIDE {
@@ -109,6 +118,7 @@
   }
 
  protected:
+  content::TestBrowserThreadBundle thread_bundle_;
   scoped_ptr<TestingProfile> profile_;
   SigninManagerBase* fake_signin_manager_;
   scoped_ptr<FakeProfileOAuth2TokenService> token_service_;
@@ -174,6 +184,8 @@
 // Test that requesting for detailed status doesn't crash even if the
 // underlying invalidator is not initialized.
 TEST(TiclInvalidationServiceLoggingTest, DetailedStatusCallbacksWork) {
+  content::TestBrowserThreadBundle thread_bundle;
+
   scoped_ptr<TiclInvalidationServiceTestDelegate> delegate (
       new TiclInvalidationServiceTestDelegate());
 
diff --git a/chrome/browser/io_thread.cc b/chrome/browser/io_thread.cc
index 6ff1aea..36a4604 100644
--- a/chrome/browser/io_thread.cc
+++ b/chrome/browser/io_thread.cc
@@ -83,10 +83,6 @@
 #include "net/url_request/url_request_throttler_manager.h"
 #include "net/websockets/websocket_job.h"
 
-#if defined(OS_WIN)
-#include "win8/util/win8_util.h"
-#endif
-
 #if defined(ENABLE_CONFIGURATION_POLICY)
 #include "policy/policy_constants.h"
 #endif
diff --git a/chrome/browser/jumplist_win.cc b/chrome/browser/jumplist_win.cc
index a627120..58cab80 100644
--- a/chrome/browser/jumplist_win.cc
+++ b/chrome/browser/jumplist_win.cc
@@ -25,8 +25,8 @@
 #include "chrome/browser/shell_integration.h"
 #include "chrome/common/chrome_constants.h"
 #include "chrome/common/chrome_switches.h"
-#include "chrome/common/favicon/favicon_types.h"
 #include "chrome/common/url_constants.h"
+#include "components/favicon_base/favicon_types.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/notification_source.h"
 #include "grit/chromium_strings.h"
@@ -398,16 +398,14 @@
   FaviconService* favicon_service =
       FaviconServiceFactory::GetForProfile(profile_, Profile::EXPLICIT_ACCESS);
   task_id_ = favicon_service->GetFaviconImageForURL(
-      FaviconService::FaviconForURLParams(url,
-                                          chrome::FAVICON,
-                                          gfx::kFaviconSize),
-      base::Bind(&JumpList::OnFaviconDataAvailable,
-                 base::Unretained(this)),
+      FaviconService::FaviconForURLParams(
+          url, favicon_base::FAVICON, gfx::kFaviconSize),
+      base::Bind(&JumpList::OnFaviconDataAvailable, base::Unretained(this)),
       &cancelable_task_tracker_);
 }
 
 void JumpList::OnFaviconDataAvailable(
-    const chrome::FaviconImageResult& image_result) {
+    const favicon_base::FaviconImageResult& image_result) {
   // If there is currently a favicon request in progress, it is now outdated,
   // as we have received another, so nullify the handle from the old request.
   task_id_ = base::CancelableTaskTracker::kBadTaskId;
diff --git a/chrome/browser/jumplist_win.h b/chrome/browser/jumplist_win.h
index 82f75dd..26be82c 100644
--- a/chrome/browser/jumplist_win.h
+++ b/chrome/browser/jumplist_win.h
@@ -120,7 +120,8 @@
   // is available.
   // To avoid file operations, this function just attaches the given data to
   // a ShellLinkItem object.
-  void OnFaviconDataAvailable(const chrome::FaviconImageResult& image_result);
+  void OnFaviconDataAvailable(
+      const favicon_base::FaviconImageResult& image_result);
 
   // Callback for TopSites that notifies when the "Most
   // Visited" list is available. This function updates the ShellLinkItemList
diff --git a/chrome/browser/local_discovery/DEPS b/chrome/browser/local_discovery/DEPS
index 28fe1f3..cc56ec5 100644
--- a/chrome/browser/local_discovery/DEPS
+++ b/chrome/browser/local_discovery/DEPS
@@ -1,7 +1,3 @@
-include_rules = [
- "+components/cloud_devices",
-]
-
 specific_include_rules = {
   # For tests, it's fine to include utility process code.
   'test_service_discovery_client\.cc': [
diff --git a/chrome/browser/local_discovery/cloud_print_base_api_flow.cc b/chrome/browser/local_discovery/cloud_print_base_api_flow.cc
deleted file mode 100644
index ec7392f..0000000
--- a/chrome/browser/local_discovery/cloud_print_base_api_flow.cc
+++ /dev/null
@@ -1,164 +0,0 @@
-// Copyright 2013 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 "base/json/json_reader.h"
-#include "base/strings/string_number_conversions.h"
-#include "base/strings/stringprintf.h"
-#include "base/values.h"
-#include "chrome/browser/local_discovery/cloud_print_base_api_flow.h"
-#include "chrome/common/cloud_print/cloud_print_constants.h"
-#include "google_apis/gaia/google_service_auth_error.h"
-#include "net/base/load_flags.h"
-#include "net/base/url_util.h"
-#include "net/http/http_status_code.h"
-#include "net/url_request/url_request_status.h"
-
-namespace local_discovery {
-
-namespace {
-const char kCloudPrintOAuthHeaderFormat[] = "Authorization: Bearer %s";
-const char kXSRFURLParameterKey[] = "xsrf";
-const char kUserURLParameterKey[] = "user";
-}
-
-CloudPrintBaseApiFlow::CloudPrintBaseApiFlow(
-    net::URLRequestContextGetter* request_context,
-    OAuth2TokenService* token_service,
-    const std::string& account_id,
-    const GURL& automated_claim_url,
-    Delegate* delegate)
-    : OAuth2TokenService::Consumer("cloud_print"),
-      request_context_(request_context),
-      token_service_(token_service),
-      account_id_(account_id),
-      user_index_(kAccountIndexUseOAuth2),
-      url_(automated_claim_url),
-      delegate_(delegate) {
-}
-
-CloudPrintBaseApiFlow::CloudPrintBaseApiFlow(
-    net::URLRequestContextGetter* request_context,
-    int  user_index,
-    const std::string& xsrf_token,
-    const GURL& automated_claim_url,
-    Delegate* delegate)
-    : OAuth2TokenService::Consumer("cloud_print"),
-      request_context_(request_context),
-      token_service_(NULL),
-      account_id_(""),
-      user_index_(user_index),
-      xsrf_token_(xsrf_token),
-      url_(automated_claim_url),
-      delegate_(delegate) {
-}
-
-CloudPrintBaseApiFlow::CloudPrintBaseApiFlow(
-    net::URLRequestContextGetter* request_context,
-    int  user_index,
-    const GURL& automated_claim_url,
-    Delegate* delegate)
-    : OAuth2TokenService::Consumer("cloud_print"),
-      request_context_(request_context),
-      token_service_(NULL),
-      account_id_(""),
-      user_index_(user_index),
-      url_(automated_claim_url),
-      delegate_(delegate) {
-}
-
-CloudPrintBaseApiFlow::~CloudPrintBaseApiFlow() {
-}
-
-void CloudPrintBaseApiFlow::Start() {
-  if (UseOAuth2()) {
-    OAuth2TokenService::ScopeSet oauth_scopes;
-    oauth_scopes.insert(cloud_print::kCloudPrintAuth);
-    oauth_request_ = token_service_->StartRequest(account_id_,
-                                                  oauth_scopes,
-                                                  this);
-  } else {
-    GURL cookie_url = url_;
-
-    if (!xsrf_token_.empty()) {
-      cookie_url = net::AppendQueryParameter(cookie_url,
-                                             kXSRFURLParameterKey,
-                                             xsrf_token_);
-    }
-
-    cookie_url = net::AppendQueryParameter(cookie_url,
-                                           kUserURLParameterKey,
-                                           base::IntToString(user_index_));
-
-    CreateRequest(cookie_url);
-
-    url_fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SAVE_COOKIES);
-
-    url_fetcher_->Start();
-  }
-}
-
-void CloudPrintBaseApiFlow::OnGetTokenSuccess(
-    const OAuth2TokenService::Request* request,
-    const std::string& access_token,
-    const base::Time& expiration_time) {
-  CreateRequest(url_);
-
-  std::string authorization_header =
-      base::StringPrintf(kCloudPrintOAuthHeaderFormat, access_token.c_str());
-
-  url_fetcher_->AddExtraRequestHeader(authorization_header);
-  url_fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SAVE_COOKIES |
-                             net::LOAD_DO_NOT_SEND_COOKIES);
-  url_fetcher_->Start();
-}
-
-void CloudPrintBaseApiFlow::OnGetTokenFailure(
-    const OAuth2TokenService::Request* request,
-    const GoogleServiceAuthError& error) {
-  delegate_->OnCloudPrintAPIFlowError(this, ERROR_TOKEN);
-}
-
-void CloudPrintBaseApiFlow::CreateRequest(const GURL& url) {
-  url_fetcher_.reset(net::URLFetcher::Create(url,
-                                             net::URLFetcher::GET,
-                                             this));
-
-  url_fetcher_->SetRequestContext(request_context_.get());
-
-  url_fetcher_->AddExtraRequestHeader(
-      cloud_print::kChromeCloudPrintProxyHeader);
-}
-
-void CloudPrintBaseApiFlow::OnURLFetchComplete(
-    const net::URLFetcher* source) {
-  // TODO(noamsml): Error logging.
-
-  // TODO(noamsml): Extract this and PrivetURLFetcher::OnURLFetchComplete into
-  // one helper method.
-  std::string response_str;
-
-  if (source->GetStatus().status() != net::URLRequestStatus::SUCCESS ||
-      !source->GetResponseAsString(&response_str)) {
-    delegate_->OnCloudPrintAPIFlowError(this, ERROR_NETWORK);
-    return;
-  }
-
-  if (source->GetResponseCode() != net::HTTP_OK) {
-    delegate_->OnCloudPrintAPIFlowError(this, ERROR_HTTP_CODE);
-    return;
-  }
-
-  base::JSONReader reader;
-  scoped_ptr<const base::Value> value(reader.Read(response_str));
-  const base::DictionaryValue* dictionary_value = NULL;
-
-  if (!value || !value->GetAsDictionary(&dictionary_value)) {
-    delegate_->OnCloudPrintAPIFlowError(this, ERROR_MALFORMED_RESPONSE);
-    return;
-  }
-
-  delegate_->OnCloudPrintAPIFlowComplete(this, dictionary_value);
-}
-
-}  // namespace local_discovery
diff --git a/chrome/browser/local_discovery/cloud_print_base_api_flow.h b/chrome/browser/local_discovery/cloud_print_base_api_flow.h
deleted file mode 100644
index 64915b2..0000000
--- a/chrome/browser/local_discovery/cloud_print_base_api_flow.h
+++ /dev/null
@@ -1,102 +0,0 @@
-// Copyright 2013 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 CHROME_BROWSER_LOCAL_DISCOVERY_CLOUD_PRINT_BASE_API_FLOW_H_
-#define CHROME_BROWSER_LOCAL_DISCOVERY_CLOUD_PRINT_BASE_API_FLOW_H_
-
-#include <string>
-
-#include "chrome/browser/local_discovery/privet_constants.h"
-#include "chrome/browser/local_discovery/privet_http.h"
-#include "google_apis/gaia/oauth2_token_service.h"
-#include "net/url_request/url_fetcher.h"
-#include "net/url_request/url_fetcher_delegate.h"
-#include "net/url_request/url_request_context_getter.h"
-
-namespace local_discovery {
-
-// API call flow for communicating with cloud print.
-class CloudPrintBaseApiFlow : public net::URLFetcherDelegate,
-                              public OAuth2TokenService::Consumer {
- public:
-  // TODO(noamsml): Better error model for this class.
-  enum Status {
-    SUCCESS,
-    ERROR_TOKEN,
-    ERROR_NETWORK,
-    ERROR_HTTP_CODE,
-    ERROR_FROM_SERVER,
-    ERROR_MALFORMED_RESPONSE
-  };
-
-  class Delegate {
-   public:
-    virtual ~Delegate() {}
-
-    virtual void OnCloudPrintAPIFlowError(CloudPrintBaseApiFlow* flow,
-                                          Status status) = 0;
-    virtual void OnCloudPrintAPIFlowComplete(
-        CloudPrintBaseApiFlow* flow,
-        const base::DictionaryValue* value) = 0;
-  };
-
-  // Create an OAuth2-based confirmation.
-  CloudPrintBaseApiFlow(net::URLRequestContextGetter* request_context,
-                        OAuth2TokenService* token_service_,
-                        const std::string& account_id,
-                        const GURL& automated_claim_url,
-                        Delegate* delegate);
-
-  // Create a cookie-based confirmation.
-  CloudPrintBaseApiFlow(net::URLRequestContextGetter* request_context,
-                        int  user_index,
-                        const std::string& xsrf_token,
-                        const GURL& automated_claim_url,
-                        Delegate* delegate);
-
-  // Create a cookie-based confirmation with no XSRF token (for requests that
-  // don't need an XSRF token).
-  CloudPrintBaseApiFlow(net::URLRequestContextGetter* request_context,
-                        int  user_index,
-                        const GURL& automated_claim_url,
-                        Delegate* delegate);
-
-
-  virtual ~CloudPrintBaseApiFlow();
-
-  void Start();
-
-
-  // net::URLFetcherDelegate implementation:
-  virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE;
-
-  // OAuth2TokenService::Consumer implementation:
-  virtual void OnGetTokenSuccess(const OAuth2TokenService::Request* request,
-                                 const std::string& access_token,
-                                 const base::Time& expiration_time) OVERRIDE;
-  virtual void OnGetTokenFailure(const OAuth2TokenService::Request* request,
-                                 const GoogleServiceAuthError& error) OVERRIDE;
-
-  // Return the user index or kAccountIndexUseOAuth2 if none is available.
-  int user_index() { return user_index_; }
-
- private:
-  bool UseOAuth2() { return user_index_ == kAccountIndexUseOAuth2; }
-
-  void CreateRequest(const GURL& url);
-
-  scoped_ptr<net::URLFetcher> url_fetcher_;
-  scoped_ptr<OAuth2TokenService::Request> oauth_request_;
-  scoped_refptr<net::URLRequestContextGetter> request_context_;
-  OAuth2TokenService* token_service_;
-  std::string account_id_;
-  int user_index_;
-  std::string xsrf_token_;
-  GURL url_;
-  Delegate* delegate_;
-};
-
-}  // namespace local_discovery
-
-#endif  // CHROME_BROWSER_LOCAL_DISCOVERY_CLOUD_PRINT_BASE_API_FLOW_H_
diff --git a/chrome/browser/local_discovery/cloud_print_printer_list.cc b/chrome/browser/local_discovery/cloud_print_printer_list.cc
index 1f3feea..8849073 100644
--- a/chrome/browser/local_discovery/cloud_print_printer_list.cc
+++ b/chrome/browser/local_discovery/cloud_print_printer_list.cc
@@ -7,30 +7,24 @@
 #include "base/strings/stringprintf.h"
 #include "chrome/browser/local_discovery/cloud_print_printer_list.h"
 #include "chrome/common/cloud_print/cloud_print_constants.h"
+#include "components/cloud_devices/common/cloud_devices_urls.h"
 
 namespace local_discovery {
 
-namespace {
-const char kPrinterListURLFormat[] = "%s/search";
-}
-
 CloudPrintPrinterList::CloudPrintPrinterList(
     net::URLRequestContextGetter* request_context,
-    const std::string& cloud_print_url,
     OAuth2TokenService* token_service,
     const std::string& account_id,
     Delegate* delegate)
     : request_context_(request_context),
-      url_(base::StringPrintf(kPrinterListURLFormat, cloud_print_url.c_str())),
       delegate_(delegate),
       api_flow_(request_context_,
                 token_service,
                 account_id,
-                url_,
+                cloud_devices::GetCloudPrintRelativeURL("search"),
                 this) {
 }
 
-
 CloudPrintPrinterList::~CloudPrintPrinterList() {
 }
 
@@ -48,16 +42,14 @@
   return NULL;
 }
 
-void CloudPrintPrinterList::OnCloudPrintAPIFlowError(
-      CloudPrintBaseApiFlow* flow,
-      CloudPrintBaseApiFlow::Status status) {
+void CloudPrintPrinterList::OnGCDAPIFlowError(GCDBaseApiFlow* flow,
+                                              GCDBaseApiFlow::Status status) {
   delegate_->OnCloudPrintPrinterListUnavailable();
 }
 
-
-void CloudPrintPrinterList::OnCloudPrintAPIFlowComplete(
-      CloudPrintBaseApiFlow* flow,
-      const base::DictionaryValue* value) {
+void CloudPrintPrinterList::OnGCDAPIFlowComplete(
+    GCDBaseApiFlow* flow,
+    const base::DictionaryValue* value) {
   const base::ListValue* printers;
 
   if (!value->GetList(cloud_print::kPrinterListValue, &printers)) {
@@ -88,6 +80,8 @@
   delegate_->OnCloudPrintPrinterListReady();
 }
 
+bool CloudPrintPrinterList::GCDIsCloudPrint() { return true; }
+
 bool CloudPrintPrinterList::FillPrinterDetails(
     const base::DictionaryValue* printer_value,
     PrinterDetails* printer_details) {
diff --git a/chrome/browser/local_discovery/cloud_print_printer_list.h b/chrome/browser/local_discovery/cloud_print_printer_list.h
index 95b5aca..f3333b6 100644
--- a/chrome/browser/local_discovery/cloud_print_printer_list.h
+++ b/chrome/browser/local_discovery/cloud_print_printer_list.h
@@ -9,11 +9,11 @@
 #include <string>
 #include <vector>
 
-#include "chrome/browser/local_discovery/cloud_print_base_api_flow.h"
+#include "chrome/browser/local_discovery/gcd_base_api_flow.h"
 
 namespace local_discovery {
 
-class CloudPrintPrinterList : public CloudPrintBaseApiFlow::Delegate {
+class CloudPrintPrinterList : public GCDBaseApiFlow::Delegate {
  public:
   class Delegate {
    public:
@@ -37,7 +37,6 @@
   typedef PrinterList::const_iterator iterator;
 
   CloudPrintPrinterList(net::URLRequestContextGetter* request_context,
-                        const std::string& cloud_print_url,
                         OAuth2TokenService* token_service,
                         const std::string& account_id,
                         Delegate* delegate);
@@ -45,22 +44,21 @@
 
   void Start();
 
-  virtual void OnCloudPrintAPIFlowError(
-      CloudPrintBaseApiFlow* flow,
-      CloudPrintBaseApiFlow::Status status) OVERRIDE;
+  virtual void OnGCDAPIFlowError(GCDBaseApiFlow* flow,
+                                 GCDBaseApiFlow::Status status) OVERRIDE;
 
-  virtual void OnCloudPrintAPIFlowComplete(
-      CloudPrintBaseApiFlow* flow,
-      const base::DictionaryValue* value) OVERRIDE;
+  virtual void OnGCDAPIFlowComplete(GCDBaseApiFlow* flow,
+                                    const base::DictionaryValue* value)
+      OVERRIDE;
+
+  virtual bool GCDIsCloudPrint() OVERRIDE;
 
   const PrinterDetails* GetDetailsFor(const std::string& id);
 
   iterator begin() { return printer_list_.begin(); }
   iterator end() { return printer_list_.end(); }
 
-  CloudPrintBaseApiFlow* GetOAuth2ApiFlowForTests() {
-    return &api_flow_;
-  }
+  GCDBaseApiFlow* GetOAuth2ApiFlowForTests() { return &api_flow_; }
 
  private:
   typedef std::map<std::string /*ID*/, int /* index in printer_list_ */>
@@ -70,11 +68,10 @@
                           PrinterDetails* printer_details);
 
   scoped_refptr<net::URLRequestContextGetter> request_context_;
-  GURL url_;
   PrinterIDMap printer_id_map_;
   PrinterList printer_list_;
   Delegate* delegate_;
-  CloudPrintBaseApiFlow api_flow_;
+  GCDBaseApiFlow api_flow_;
 };
 
 }  // namespace local_discovery
diff --git a/chrome/browser/local_discovery/cloud_print_printer_list_unittest.cc b/chrome/browser/local_discovery/cloud_print_printer_list_unittest.cc
index c0e3c65..f312898 100644
--- a/chrome/browser/local_discovery/cloud_print_printer_list_unittest.cc
+++ b/chrome/browser/local_discovery/cloud_print_printer_list_unittest.cc
@@ -7,6 +7,7 @@
 #include "base/bind.h"
 #include "base/message_loop/message_loop.h"
 #include "chrome/browser/local_discovery/cloud_print_printer_list.h"
+#include "components/cloud_devices/common/cloud_devices_urls.h"
 #include "content/public/test/test_browser_thread.h"
 #include "google_apis/gaia/fake_oauth2_token_service.h"
 #include "google_apis/gaia/google_service_auth_error.h"
@@ -56,7 +57,6 @@
     token_service_.AddAccount("account_id");
     printer_list_.reset(
         new CloudPrintPrinterList(request_context_.get(),
-                                  "http://SoMeUrL.com/cloudprint",
                                   &token_service_,
                                   "account_id",
                                   &delegate_));
@@ -88,13 +88,12 @@
 
 TEST_F(CloudPrintPrinterListTest, SuccessOAuth2) {
   fetcher_factory_->SetFakeResponse(
-      GURL("http://SoMeUrL.com/cloudprint/search"),
+      cloud_devices::GetCloudPrintRelativeURL("search"),
       kSampleSuccessResponseOAuth,
       net::HTTP_OK,
       net::URLRequestStatus::SUCCESS);
 
-  CloudPrintBaseApiFlow* cloudprint_flow =
-      printer_list_->GetOAuth2ApiFlowForTests();
+  GCDBaseApiFlow* cloudprint_flow = printer_list_->GetOAuth2ApiFlowForTests();
 
   printer_list_->Start();
 
diff --git a/chrome/browser/local_discovery/gcd_base_api_flow.cc b/chrome/browser/local_discovery/gcd_base_api_flow.cc
new file mode 100644
index 0000000..d780cfb
--- /dev/null
+++ b/chrome/browser/local_discovery/gcd_base_api_flow.cc
@@ -0,0 +1,132 @@
+// 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.
+
+#include "chrome/browser/local_discovery/gcd_base_api_flow.h"
+
+#include "base/json/json_reader.h"
+#include "base/strings/string_number_conversions.h"
+#include "base/strings/stringprintf.h"
+#include "base/values.h"
+#include "chrome/browser/local_discovery/gcd_constants.h"
+#include "chrome/common/cloud_print/cloud_print_constants.h"
+#include "components/cloud_devices/common/cloud_devices_urls.h"
+#include "google_apis/gaia/google_service_auth_error.h"
+#include "net/base/load_flags.h"
+#include "net/base/url_util.h"
+#include "net/http/http_status_code.h"
+#include "net/url_request/url_request_status.h"
+
+namespace local_discovery {
+
+namespace {
+const char kCloudPrintOAuthHeaderFormat[] = "Authorization: Bearer %s";
+}
+
+net::URLFetcher::RequestType GCDBaseApiFlow::Delegate::GetRequestType() {
+  return net::URLFetcher::GET;
+}
+
+void GCDBaseApiFlow::Delegate::GetUploadData(std::string* upload_type,
+                                             std::string* upload_data) {
+  *upload_type = std::string();
+  *upload_data = std::string();
+}
+
+GCDBaseApiFlow::GCDBaseApiFlow(net::URLRequestContextGetter* request_context,
+                               OAuth2TokenService* token_service,
+                               const std::string& account_id,
+                               const GURL& automated_claim_url,
+                               Delegate* delegate)
+    : OAuth2TokenService::Consumer("cloud_print"),
+      request_context_(request_context),
+      token_service_(token_service),
+      account_id_(account_id),
+      url_(automated_claim_url),
+      delegate_(delegate) {}
+
+GCDBaseApiFlow::~GCDBaseApiFlow() {}
+
+void GCDBaseApiFlow::Start() {
+  OAuth2TokenService::ScopeSet oauth_scopes;
+  if (delegate_->GCDIsCloudPrint()) {
+    oauth_scopes.insert(cloud_devices::kCloudPrintAuthScope);
+  } else {
+    oauth_scopes.insert(cloud_devices::kCloudDevicesAuthScope);
+  }
+  oauth_request_ =
+      token_service_->StartRequest(account_id_, oauth_scopes, this);
+}
+
+void GCDBaseApiFlow::OnGetTokenSuccess(
+    const OAuth2TokenService::Request* request,
+    const std::string& access_token,
+    const base::Time& expiration_time) {
+  CreateRequest(url_);
+
+  std::string authorization_header =
+      base::StringPrintf(kCloudPrintOAuthHeaderFormat, access_token.c_str());
+
+  url_fetcher_->AddExtraRequestHeader(authorization_header);
+  url_fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SAVE_COOKIES |
+                             net::LOAD_DO_NOT_SEND_COOKIES);
+  url_fetcher_->Start();
+}
+
+void GCDBaseApiFlow::OnGetTokenFailure(
+    const OAuth2TokenService::Request* request,
+    const GoogleServiceAuthError& error) {
+  delegate_->OnGCDAPIFlowError(this, ERROR_TOKEN);
+}
+
+void GCDBaseApiFlow::CreateRequest(const GURL& url) {
+  net::URLFetcher::RequestType request_type = delegate_->GetRequestType();
+
+  url_fetcher_.reset(net::URLFetcher::Create(url, request_type, this));
+
+  if (request_type != net::URLFetcher::GET) {
+    std::string upload_type;
+    std::string upload_data;
+    delegate_->GetUploadData(&upload_type, &upload_data);
+    url_fetcher_->SetUploadData(upload_type, upload_data);
+  }
+
+  url_fetcher_->SetRequestContext(request_context_.get());
+
+  if (delegate_->GCDIsCloudPrint()) {
+    url_fetcher_->AddExtraRequestHeader(
+        cloud_print::kChromeCloudPrintProxyHeader);
+  }
+}
+
+void GCDBaseApiFlow::OnURLFetchComplete(const net::URLFetcher* source) {
+  // TODO(noamsml): Error logging.
+
+  // TODO(noamsml): Extract this and PrivetURLFetcher::OnURLFetchComplete into
+  // one helper method.
+  std::string response_str;
+
+  if (source->GetStatus().status() != net::URLRequestStatus::SUCCESS ||
+      !source->GetResponseAsString(&response_str)) {
+    delegate_->OnGCDAPIFlowError(this, ERROR_NETWORK);
+    return;
+  }
+
+  if (source->GetResponseCode() != net::HTTP_OK) {
+    delegate_->OnGCDAPIFlowError(this, ERROR_HTTP_CODE);
+    return;
+  }
+
+  base::JSONReader reader;
+  scoped_ptr<const base::Value> value(reader.Read(response_str));
+  const base::DictionaryValue* dictionary_value = NULL;
+
+  if (!value || !value->GetAsDictionary(&dictionary_value)) {
+    delegate_->OnGCDAPIFlowError(this, ERROR_MALFORMED_RESPONSE);
+    return;
+  }
+
+  delegate_->OnGCDAPIFlowComplete(this, dictionary_value);
+}
+
+}  // namespace local_discovery
diff --git a/chrome/browser/local_discovery/gcd_base_api_flow.h b/chrome/browser/local_discovery/gcd_base_api_flow.h
new file mode 100644
index 0000000..624a3d2
--- /dev/null
+++ b/chrome/browser/local_discovery/gcd_base_api_flow.h
@@ -0,0 +1,101 @@
+// 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.
+
+#ifndef CHROME_BROWSER_LOCAL_DISCOVERY_GCD_BASE_API_FLOW_H_
+#define CHROME_BROWSER_LOCAL_DISCOVERY_GCD_BASE_API_FLOW_H_
+
+#include <string>
+
+#include "chrome/browser/local_discovery/privet_constants.h"
+#include "chrome/browser/local_discovery/privet_http.h"
+#include "google_apis/gaia/oauth2_token_service.h"
+#include "net/url_request/url_fetcher.h"
+#include "net/url_request/url_fetcher_delegate.h"
+#include "net/url_request/url_request_context_getter.h"
+
+namespace local_discovery {
+
+// API call flow for communicating with cloud print.
+class GCDBaseApiFlow : public net::URLFetcherDelegate,
+                       public OAuth2TokenService::Consumer {
+ public:
+  // TODO(noamsml): Better error model for this class.
+  enum Status {
+    SUCCESS,
+    ERROR_TOKEN,
+    ERROR_NETWORK,
+    ERROR_HTTP_CODE,
+    ERROR_FROM_SERVER,
+    ERROR_MALFORMED_RESPONSE
+  };
+
+  class Delegate {
+   public:
+    virtual ~Delegate() {}
+
+    virtual void OnGCDAPIFlowError(GCDBaseApiFlow* flow, Status status) = 0;
+
+    virtual void OnGCDAPIFlowComplete(GCDBaseApiFlow* flow,
+                                      const base::DictionaryValue* value) = 0;
+
+    // Return 1 if flow is for a Cloud Print device
+    virtual bool GCDIsCloudPrint() = 0;
+
+    virtual net::URLFetcher::RequestType GetRequestType();
+
+    // If there is no data, set upload_type and upload_data to ""
+    virtual void GetUploadData(std::string* upload_type,
+                               std::string* upload_data);
+  };
+
+  // Create an OAuth2-based confirmation.
+  GCDBaseApiFlow(net::URLRequestContextGetter* request_context,
+                 OAuth2TokenService* token_service,
+                 const std::string& account_id,
+                 const GURL& automated_claim_url,
+                 Delegate* delegate);
+
+  // Create a cookie-based confirmation.
+  GCDBaseApiFlow(net::URLRequestContextGetter* request_context,
+                 int user_index,
+                 const std::string& xsrf_token,
+                 const GURL& automated_claim_url,
+                 Delegate* delegate);
+
+  // Create a cookie-based confirmation with no XSRF token (for requests that
+  // don't need an XSRF token).
+  GCDBaseApiFlow(net::URLRequestContextGetter* request_context,
+                 int user_index,
+                 const GURL& automated_claim_url,
+                 Delegate* delegate);
+
+  virtual ~GCDBaseApiFlow();
+
+  void Start();
+
+  // net::URLFetcherDelegate implementation:
+  virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE;
+
+  // OAuth2TokenService::Consumer implementation:
+  virtual void OnGetTokenSuccess(const OAuth2TokenService::Request* request,
+                                 const std::string& access_token,
+                                 const base::Time& expiration_time) OVERRIDE;
+  virtual void OnGetTokenFailure(const OAuth2TokenService::Request* request,
+                                 const GoogleServiceAuthError& error) OVERRIDE;
+
+ private:
+  void CreateRequest(const GURL& url);
+
+  scoped_ptr<net::URLFetcher> url_fetcher_;
+  scoped_ptr<OAuth2TokenService::Request> oauth_request_;
+  scoped_refptr<net::URLRequestContextGetter> request_context_;
+  OAuth2TokenService* token_service_;
+  std::string account_id_;
+  GURL url_;
+  Delegate* delegate_;
+};
+
+}  // namespace local_discovery
+
+#endif  // CHROME_BROWSER_LOCAL_DISCOVERY_GCD_BASE_API_FLOW_H_
diff --git a/chrome/browser/local_discovery/gcd_constants.cc b/chrome/browser/local_discovery/gcd_constants.cc
new file mode 100644
index 0000000..b5b63cc
--- /dev/null
+++ b/chrome/browser/local_discovery/gcd_constants.cc
@@ -0,0 +1,11 @@
+// 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.
+
+#include "chrome/browser/local_discovery/gcd_constants.h"
+
+namespace local_discovery {
+
+const char kGCDKeyKind[] = "kind";
+
+}  // namespace local_discovery
diff --git a/chrome/browser/local_discovery/gcd_constants.h b/chrome/browser/local_discovery/gcd_constants.h
new file mode 100644
index 0000000..c51d15e
--- /dev/null
+++ b/chrome/browser/local_discovery/gcd_constants.h
@@ -0,0 +1,14 @@
+// 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.
+
+#ifndef CHROME_BROWSER_LOCAL_DISCOVERY_GCD_CONSTANTS_H_
+#define CHROME_BROWSER_LOCAL_DISCOVERY_GCD_CONSTANTS_H_
+
+namespace local_discovery {
+
+extern const char kGCDKeyKind[];
+
+}  // namespace local_discovery
+
+#endif  // CHROME_BROWSER_LOCAL_DISCOVERY_GCD_CONSTANTS_H_
diff --git a/chrome/browser/local_discovery/privet_confirm_api_flow.cc b/chrome/browser/local_discovery/privet_confirm_api_flow.cc
index 2f42194..c12a977 100644
--- a/chrome/browser/local_discovery/privet_confirm_api_flow.cc
+++ b/chrome/browser/local_discovery/privet_confirm_api_flow.cc
@@ -2,37 +2,47 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "base/values.h"
-#include "chrome/browser/local_discovery/cloud_print_base_api_flow.h"
 #include "chrome/browser/local_discovery/privet_confirm_api_flow.h"
+
+#include "base/strings/stringprintf.h"
+#include "base/values.h"
+#include "chrome/browser/local_discovery/gcd_base_api_flow.h"
+#include "chrome/browser/local_discovery/gcd_constants.h"
+#include "chrome/browser/local_discovery/privet_constants.h"
 #include "chrome/common/cloud_print/cloud_print_constants.h"
+#include "components/cloud_devices/common/cloud_devices_urls.h"
+#include "net/base/url_util.h"
 
 namespace local_discovery {
 
+namespace {
+
+const char kGCDAutomatedClaimUploadData[] = "{ \"userEmail\": \"me\" }";
+const char kGCDKindRegistrationTicket[] = "clouddevices#registrationTicket";
+
+GURL GetConfirmFlowUrl(bool is_cloud_print, const std::string& token) {
+  if (is_cloud_print) {
+    return net::AppendQueryParameter(
+        cloud_devices::GetCloudPrintRelativeURL("confirm"), "token", token);
+  }
+  return cloud_devices::GetCloudDevicesRelativeURL("registrationTickets/" +
+                                                   token);
+}
+
+}  // namespace
+
 PrivetConfirmApiCallFlow::PrivetConfirmApiCallFlow(
     net::URLRequestContextGetter* request_context,
     OAuth2TokenService* token_service,
     const std::string& account_id,
-    const GURL& automated_claim_url,
+    bool is_cloud_print,
+    const std::string& token,
     const ResponseCallback& callback)
-    : flow_(request_context,
+    : is_cloud_print_(is_cloud_print),
+      flow_(request_context,
             token_service,
             account_id,
-            automated_claim_url,
-            this),
-      callback_(callback) {
-}
-
-PrivetConfirmApiCallFlow::PrivetConfirmApiCallFlow(
-    net::URLRequestContextGetter* request_context,
-    int  user_index,
-    const std::string& xsrf_token,
-    const GURL& automated_claim_url,
-    const ResponseCallback& callback)
-    : flow_(request_context,
-            user_index,
-            xsrf_token,
-            automated_claim_url,
+            GetConfirmFlowUrl(is_cloud_print, token),
             this),
       callback_(callback) {
 }
@@ -44,26 +54,49 @@
   flow_.Start();
 }
 
-void PrivetConfirmApiCallFlow::OnCloudPrintAPIFlowError(
-    CloudPrintBaseApiFlow* flow,
-    CloudPrintBaseApiFlow::Status status) {
+void PrivetConfirmApiCallFlow::OnGCDAPIFlowError(
+    GCDBaseApiFlow* flow,
+    GCDBaseApiFlow::Status status) {
   callback_.Run(status);
 }
 
-void PrivetConfirmApiCallFlow::OnCloudPrintAPIFlowComplete(
-    CloudPrintBaseApiFlow* flow,
+void PrivetConfirmApiCallFlow::OnGCDAPIFlowComplete(
+    GCDBaseApiFlow* flow,
     const base::DictionaryValue* value) {
   bool success = false;
 
-  if (!value->GetBoolean(cloud_print::kSuccessValue, &success)) {
-    callback_.Run(CloudPrintBaseApiFlow::ERROR_MALFORMED_RESPONSE);
-    return;
+  if (is_cloud_print_) {
+    if (!value->GetBoolean(cloud_print::kSuccessValue, &success)) {
+      callback_.Run(GCDBaseApiFlow::ERROR_MALFORMED_RESPONSE);
+      return;
+    }
+  } else {
+    std::string kind;
+    value->GetString(kGCDKeyKind, &kind);
+    success = (kind == kGCDKindRegistrationTicket);
   }
 
   if (success) {
-    callback_.Run(CloudPrintBaseApiFlow::SUCCESS);
+    callback_.Run(GCDBaseApiFlow::SUCCESS);
   } else {
-    callback_.Run(CloudPrintBaseApiFlow::ERROR_FROM_SERVER);
+    callback_.Run(GCDBaseApiFlow::ERROR_FROM_SERVER);
+  }
+}
+
+bool PrivetConfirmApiCallFlow::GCDIsCloudPrint() { return is_cloud_print_; }
+
+net::URLFetcher::RequestType PrivetConfirmApiCallFlow::GetRequestType() {
+  return (is_cloud_print_) ? net::URLFetcher::GET : net::URLFetcher::PATCH;
+}
+
+void PrivetConfirmApiCallFlow::GetUploadData(std::string* upload_type,
+                                             std::string* upload_data) {
+  if (is_cloud_print_) {
+    *upload_type = "";
+    *upload_data = "";
+  } else {
+    *upload_type = cloud_print::kContentTypeJSON;
+    *upload_data = kGCDAutomatedClaimUploadData;
   }
 }
 
diff --git a/chrome/browser/local_discovery/privet_confirm_api_flow.h b/chrome/browser/local_discovery/privet_confirm_api_flow.h
index 9f2ace1..6faf930 100644
--- a/chrome/browser/local_discovery/privet_confirm_api_flow.h
+++ b/chrome/browser/local_discovery/privet_confirm_api_flow.h
@@ -7,49 +7,45 @@
 
 #include <string>
 
-#include "chrome/browser/local_discovery/cloud_print_base_api_flow.h"
+#include "chrome/browser/local_discovery/gcd_base_api_flow.h"
 #include "net/url_request/url_request_context_getter.h"
 
 
 namespace local_discovery {
 
 // API call flow for server-side communication with cloudprint for registration.
-class PrivetConfirmApiCallFlow : public CloudPrintBaseApiFlow::Delegate {
+class PrivetConfirmApiCallFlow : public GCDBaseApiFlow::Delegate {
  public:
-  typedef base::Callback<void(CloudPrintBaseApiFlow::Status /*success*/)>
+  typedef base::Callback<void(GCDBaseApiFlow::Status /*success*/)>
       ResponseCallback;
 
   // Create an OAuth2-based confirmation
   PrivetConfirmApiCallFlow(net::URLRequestContextGetter* request_context,
                            OAuth2TokenService* token_service_,
                            const std::string& account_id,
-                           const GURL& automated_claim_url,
-                           const ResponseCallback& callback);
-
-  // Create a cookie-based confirmation
-  PrivetConfirmApiCallFlow(net::URLRequestContextGetter* request_context,
-                           int  user_index,
-                           const std::string& xsrf_token,
-                           const GURL& automated_claim_url,
+                           bool is_cloud_print,
+                           const std::string& token,
                            const ResponseCallback& callback);
 
   virtual ~PrivetConfirmApiCallFlow();
 
   void Start();
 
-  virtual void OnCloudPrintAPIFlowError(
-      CloudPrintBaseApiFlow* flow,
-      CloudPrintBaseApiFlow::Status status) OVERRIDE;
-  virtual void OnCloudPrintAPIFlowComplete(
-      CloudPrintBaseApiFlow* flow,
-      const base::DictionaryValue* value) OVERRIDE;
+  virtual void OnGCDAPIFlowError(GCDBaseApiFlow* flow,
+                                 GCDBaseApiFlow::Status status) OVERRIDE;
+  virtual void OnGCDAPIFlowComplete(GCDBaseApiFlow* flow,
+                                    const base::DictionaryValue* value)
+      OVERRIDE;
+  virtual bool GCDIsCloudPrint() OVERRIDE;
+  virtual net::URLFetcher::RequestType GetRequestType() OVERRIDE;
+  virtual void GetUploadData(std::string* upload_type,
+                             std::string* upload_data) OVERRIDE;
 
-  CloudPrintBaseApiFlow* GetBaseApiFlowForTests() {
-    return &flow_;
-  }
+  GCDBaseApiFlow* GetBaseApiFlowForTests() { return &flow_; }
 
  private:
-  CloudPrintBaseApiFlow flow_;
+  bool is_cloud_print_;
+  GCDBaseApiFlow flow_;
   ResponseCallback callback_;
 };
 
diff --git a/chrome/browser/local_discovery/privet_confirm_api_flow_unittest.cc b/chrome/browser/local_discovery/privet_confirm_api_flow_unittest.cc
index 60ffd69..772f71b 100644
--- a/chrome/browser/local_discovery/privet_confirm_api_flow_unittest.cc
+++ b/chrome/browser/local_discovery/privet_confirm_api_flow_unittest.cc
@@ -34,11 +34,16 @@
     "   \"success\""
     "]";
 
+const char kGCDConfirmResponse[] =
+    "{"
+    "   \"kind\": \"clouddevices#registrationTicket\""
+    "}";
+
 const char kAccountId[] = "account_id";
 
 class MockableConfirmCallback {
  public:
-  MOCK_METHOD1(ConfirmCallback, void(CloudPrintBaseApiFlow::Status));
+  MOCK_METHOD1(ConfirmCallback, void(GCDBaseApiFlow::Status));
 
   PrivetConfirmApiCallFlow::ResponseCallback callback() {
     return base::Bind(&MockableConfirmCallback::ConfirmCallback,
@@ -76,17 +81,18 @@
   PrivetConfirmApiCallFlow confirm_flow(request_context_.get(),
                                         &token_service_,
                                         account_id_,
-                                        GURL("http://SoMeUrL.com"),
+                                        true,
+                                        "SomeToken",
                                         callback_.callback());
-  CloudPrintBaseApiFlow* cloudprint_flow =
-      confirm_flow.GetBaseApiFlowForTests();
+  GCDBaseApiFlow* cloudprint_flow = confirm_flow.GetBaseApiFlowForTests();
 
   confirm_flow.Start();
 
   cloudprint_flow->OnGetTokenSuccess(NULL, "SomeToken", base::Time());
   net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0);
 
-  EXPECT_EQ(GURL("http://SoMeUrL.com"), fetcher->GetOriginalURL());
+  EXPECT_EQ(GURL("https://www.google.com/cloudprint/confirm?token=SomeToken"),
+            fetcher->GetOriginalURL());
 
   net::HttpRequestHeaders headers;
   fetcher->GetExtraRequestHeaders(&headers);
@@ -102,37 +108,7 @@
                                             net::OK));
   fetcher->set_response_code(200);
 
-  EXPECT_CALL(callback_, ConfirmCallback(CloudPrintBaseApiFlow::SUCCESS));
-
-  fetcher->delegate()->OnURLFetchComplete(fetcher);
-}
-
-TEST_F(PrivetConfirmApiFlowTest, SuccessCookies) {
-  PrivetConfirmApiCallFlow confirm_flow(request_context_.get(),
-                                        1,
-                                        "SomeToken",
-                                        GURL("http://SoMeUrL.com?token=tkn"),
-                                        callback_.callback());
-
-  confirm_flow.Start();
-
-  net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0);
-
-  EXPECT_EQ(GURL("http://SoMeUrL.com?token=tkn&xsrf=SomeToken&user=1"),
-            fetcher->GetOriginalURL());
-
-  net::HttpRequestHeaders headers;
-  fetcher->GetExtraRequestHeaders(&headers);
-  std::string proxy;
-  EXPECT_TRUE(headers.GetHeader("X-Cloudprint-Proxy", &proxy));
-  EXPECT_EQ("Chrome", proxy);
-
-  fetcher->SetResponseString(kSampleConfirmResponse);
-  fetcher->set_status(net::URLRequestStatus(net::URLRequestStatus::SUCCESS,
-                                            net::OK));
-  fetcher->set_response_code(200);
-
-  EXPECT_CALL(callback_, ConfirmCallback(CloudPrintBaseApiFlow::SUCCESS));
+  EXPECT_CALL(callback_, ConfirmCallback(GCDBaseApiFlow::SUCCESS));
 
   fetcher->delegate()->OnURLFetchComplete(fetcher);
 }
@@ -141,16 +117,15 @@
   PrivetConfirmApiCallFlow confirm_flow(request_context_.get(),
                                         &token_service_,
                                         account_id_,
-                                        GURL("http://SoMeUrL.com"),
+                                        true,
+                                        "SomeCloudprintToken",
                                         callback_.callback());
 
   confirm_flow.Start();
 
-  CloudPrintBaseApiFlow* cloudprint_flow =
-      confirm_flow.GetBaseApiFlowForTests();
+  GCDBaseApiFlow* cloudprint_flow = confirm_flow.GetBaseApiFlowForTests();
 
-  EXPECT_CALL(callback_,
-              ConfirmCallback(CloudPrintBaseApiFlow::ERROR_TOKEN));
+  EXPECT_CALL(callback_, ConfirmCallback(GCDBaseApiFlow::ERROR_TOKEN));
   cloudprint_flow->OnGetTokenFailure(NULL, GoogleServiceAuthError(
       GoogleServiceAuthError::USER_NOT_SIGNED_UP));
 }
@@ -159,26 +134,26 @@
   PrivetConfirmApiCallFlow confirm_flow(request_context_.get(),
                                         &token_service_,
                                         account_id_,
-                                        GURL("http://SoMeUrL.com"),
+                                        true,
+                                        "SomeToken",
                                         callback_.callback());
 
   confirm_flow.Start();
 
-  CloudPrintBaseApiFlow* cloudprint_flow =
-      confirm_flow.GetBaseApiFlowForTests();
+  GCDBaseApiFlow* cloudprint_flow = confirm_flow.GetBaseApiFlowForTests();
 
   cloudprint_flow->OnGetTokenSuccess(NULL, "SomeToken", base::Time());
   net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0);
 
-  EXPECT_EQ(GURL("http://SoMeUrL.com"), fetcher->GetOriginalURL());
+  EXPECT_EQ(GURL("https://www.google.com/cloudprint/confirm?token=SomeToken"),
+            fetcher->GetOriginalURL());
 
   fetcher->SetResponseString(kFailedConfirmResponse);
   fetcher->set_status(net::URLRequestStatus(net::URLRequestStatus::SUCCESS,
                                             net::OK));
   fetcher->set_response_code(200);
 
-  EXPECT_CALL(callback_,
-              ConfirmCallback(CloudPrintBaseApiFlow::ERROR_FROM_SERVER));
+  EXPECT_CALL(callback_, ConfirmCallback(GCDBaseApiFlow::ERROR_FROM_SERVER));
 
   fetcher->delegate()->OnURLFetchComplete(fetcher);
 }
@@ -187,18 +162,19 @@
   PrivetConfirmApiCallFlow confirm_flow(request_context_.get(),
                                         &token_service_,
                                         account_id_,
-                                        GURL("http://SoMeUrL.com"),
+                                        true,
+                                        "SomeToken",
                                         callback_.callback());
 
   confirm_flow.Start();
 
-  CloudPrintBaseApiFlow* cloudprint_flow =
-      confirm_flow.GetBaseApiFlowForTests();
+  GCDBaseApiFlow* cloudprint_flow = confirm_flow.GetBaseApiFlowForTests();
 
   cloudprint_flow->OnGetTokenSuccess(NULL, "SomeToken", base::Time());
   net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0);
 
-  EXPECT_EQ(GURL("http://SoMeUrL.com"), fetcher->GetOriginalURL());
+  EXPECT_EQ(GURL("https://www.google.com/cloudprint/confirm?token=SomeToken"),
+            fetcher->GetOriginalURL());
 
   fetcher->SetResponseString(kFailedConfirmResponseBadJson);
   fetcher->set_status(net::URLRequestStatus(
@@ -206,8 +182,46 @@
       net::OK));
   fetcher->set_response_code(200);
 
-  EXPECT_CALL(callback_, ConfirmCallback
-              (CloudPrintBaseApiFlow::ERROR_MALFORMED_RESPONSE));
+  EXPECT_CALL(callback_,
+              ConfirmCallback(GCDBaseApiFlow::ERROR_MALFORMED_RESPONSE));
+
+  fetcher->delegate()->OnURLFetchComplete(fetcher);
+}
+
+TEST_F(PrivetConfirmApiFlowTest, SuccessGCD) {
+  PrivetConfirmApiCallFlow confirm_flow(request_context_.get(),
+                                        &token_service_,
+                                        account_id_,
+                                        false,
+                                        "SomeGcdToken",
+                                        callback_.callback());
+  GCDBaseApiFlow* gcd_flow = confirm_flow.GetBaseApiFlowForTests();
+
+  confirm_flow.Start();
+
+  gcd_flow->OnGetTokenSuccess(NULL, "SomeToken", base::Time());
+  net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0);
+
+  EXPECT_EQ(GURL("https://www.googleapis.com/clouddevices/v1/"
+                 "registrationTickets/SomeGcdToken"),
+            fetcher->GetOriginalURL());
+
+  EXPECT_EQ("{ \"userEmail\": \"me\" }", fetcher->upload_data());
+
+  net::HttpRequestHeaders headers;
+  fetcher->GetExtraRequestHeaders(&headers);
+  std::string oauth_header;
+  std::string proxy;
+  EXPECT_TRUE(headers.GetHeader("Authorization", &oauth_header));
+  EXPECT_EQ("Bearer SomeToken", oauth_header);
+  EXPECT_FALSE(headers.GetHeader("X-Cloudprint-Proxy", &proxy));
+
+  fetcher->SetResponseString(kGCDConfirmResponse);
+  fetcher->set_status(
+      net::URLRequestStatus(net::URLRequestStatus::SUCCESS, net::OK));
+  fetcher->set_response_code(200);
+
+  EXPECT_CALL(callback_, ConfirmCallback(GCDBaseApiFlow::SUCCESS));
 
   fetcher->delegate()->OnURLFetchComplete(fetcher);
 }
diff --git a/chrome/browser/local_discovery/privet_http_impl.cc b/chrome/browser/local_discovery/privet_http_impl.cc
index 107df72..19896c4 100644
--- a/chrome/browser/local_discovery/privet_http_impl.cc
+++ b/chrome/browser/local_discovery/privet_http_impl.cc
@@ -14,7 +14,7 @@
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/local_discovery/privet_constants.h"
-#include "components/cloud_devices/printer_description.h"
+#include "components/cloud_devices/common/printer_description.h"
 #include "net/base/url_util.h"
 #include "printing/pwg_raster_settings.h"
 #include "printing/units.h"
@@ -23,6 +23,10 @@
 
 using namespace cloud_devices::printer;
 
+namespace cloud_print {
+extern const char kContentTypeJSON[];
+}
+
 namespace local_discovery {
 
 namespace {
@@ -40,7 +44,6 @@
 const char kPrivetContentTypePDF[] = "application/pdf";
 const char kPrivetContentTypePWGRaster[] = "image/pwg-raster";
 const char kPrivetContentTypeAny[] = "*/*";
-const char kPrivetContentTypeCJT[] = "application/json";
 
 const char kPrivetStorageListPath[] = "/privet/storage/list";
 const char kPrivetStorageContentPath[] = "/privet/storage/content";
@@ -540,7 +543,8 @@
 
   url_fetcher_= privet_client_->CreateURLFetcher(
       CreatePrivetURL(kPrivetCreatejobPath), net::URLFetcher::POST, this);
-  url_fetcher_->SetUploadData(kPrivetContentTypeCJT, ticket_.ToString());
+  url_fetcher_->SetUploadData(cloud_print::kContentTypeJSON,
+                              ticket_.ToString());
 
   url_fetcher_->Start();
 }
diff --git a/chrome/browser/local_discovery/privet_http_impl.h b/chrome/browser/local_discovery/privet_http_impl.h
index 535664a..1fcde73 100644
--- a/chrome/browser/local_discovery/privet_http_impl.h
+++ b/chrome/browser/local_discovery/privet_http_impl.h
@@ -12,7 +12,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
 #include "chrome/browser/local_discovery/privet_http.h"
-#include "components/cloud_devices/cloud_device_description.h"
+#include "components/cloud_devices/common/cloud_device_description.h"
 #include "printing/pdf_render_settings.h"
 
 namespace printing {
diff --git a/chrome/browser/local_discovery/privet_notifications.cc b/chrome/browser/local_discovery/privet_notifications.cc
index 551f715..5513165 100644
--- a/chrome/browser/local_discovery/privet_notifications.cc
+++ b/chrome/browser/local_discovery/privet_notifications.cc
@@ -363,7 +363,7 @@
   return kPrivetNotificationID;
 }
 
-content::RenderViewHost* PrivetNotificationDelegate::GetRenderViewHost() const {
+content::WebContents* PrivetNotificationDelegate::GetWebContents() const {
   return NULL;
 }
 
diff --git a/chrome/browser/local_discovery/privet_notifications.h b/chrome/browser/local_discovery/privet_notifications.h
index 94cfb69..527db0a 100644
--- a/chrome/browser/local_discovery/privet_notifications.h
+++ b/chrome/browser/local_discovery/privet_notifications.h
@@ -133,7 +133,7 @@
 
   // NotificationDelegate implementation.
   virtual std::string id() const OVERRIDE;
-  virtual content::RenderViewHost* GetRenderViewHost() const OVERRIDE;
+  virtual content::WebContents* GetWebContents() const OVERRIDE;
   virtual void Display() OVERRIDE;
   virtual void Error() OVERRIDE;
   virtual void Close(bool by_user) OVERRIDE;
diff --git a/chrome/browser/local_discovery/service_discovery_host_client.h b/chrome/browser/local_discovery/service_discovery_host_client.h
index 3db3aea..e31a096 100644
--- a/chrome/browser/local_discovery/service_discovery_host_client.h
+++ b/chrome/browser/local_discovery/service_discovery_host_client.h
@@ -9,7 +9,9 @@
 #include <string>
 #include <vector>
 
+#include "base/memory/ref_counted.h"
 #include "base/memory/scoped_vector.h"
+#include "base/memory/weak_ptr.h"
 #include "chrome/common/local_discovery/service_discovery_client.h"
 #include "content/public/browser/utility_process_host_client.h"
 
diff --git a/chrome/browser/managed_mode/managed_mode_browsertest.cc b/chrome/browser/managed_mode/managed_mode_browsertest.cc
index 3e89c2d..e3be689 100644
--- a/chrome/browser/managed_mode/managed_mode_browsertest.cc
+++ b/chrome/browser/managed_mode/managed_mode_browsertest.cc
@@ -10,7 +10,6 @@
 #include "chrome/browser/common/cancelable_request.h"
 #include "chrome/browser/history/history_service_factory.h"
 #include "chrome/browser/infobars/confirm_infobar_delegate.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/managed_mode/managed_mode_interstitial.h"
 #include "chrome/browser/managed_mode/managed_mode_navigation_observer.h"
@@ -27,6 +26,7 @@
 #include "chrome/common/pref_names.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "chrome/test/base/ui_test_utils.h"
+#include "components/infobars/core/infobar.h"
 #include "components/user_prefs/pref_registry_syncable.h"
 #include "content/public/browser/interstitial_page.h"
 #include "content/public/browser/navigation_controller.h"
diff --git a/chrome/browser/managed_mode/managed_mode_interstitial.cc b/chrome/browser/managed_mode/managed_mode_interstitial.cc
index 4163ffb..04dede1 100644
--- a/chrome/browser/managed_mode/managed_mode_interstitial.cc
+++ b/chrome/browser/managed_mode/managed_mode_interstitial.cc
@@ -9,13 +9,13 @@
 #include "base/prefs/pref_service.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/values.h"
-#include "chrome/browser/infobars/infobar.h"
-#include "chrome/browser/infobars/infobar_delegate.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/managed_mode/managed_user_service.h"
 #include "chrome/browser/managed_mode/managed_user_service_factory.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/common/pref_names.h"
+#include "components/infobars/core/infobar.h"
+#include "components/infobars/core/infobar_delegate.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/interstitial_page.h"
 #include "content/public/browser/navigation_controller.h"
@@ -68,7 +68,7 @@
     }
     details.type = content::NAVIGATION_TYPE_NEW_PAGE;
     for (int i = service->infobar_count() - 1; i >= 0; --i) {
-      InfoBar* infobar = service->infobar_at(i);
+      infobars::InfoBar* infobar = service->infobar_at(i);
       if (infobar->delegate()->ShouldExpire(
               InfoBarService::NavigationDetailsFromLoadCommittedDetails(
                   details)))
diff --git a/chrome/browser/managed_mode/managed_mode_navigation_observer.cc b/chrome/browser/managed_mode/managed_mode_navigation_observer.cc
index ac45558..ef33758 100644
--- a/chrome/browser/managed_mode/managed_mode_navigation_observer.cc
+++ b/chrome/browser/managed_mode/managed_mode_navigation_observer.cc
@@ -12,7 +12,6 @@
 #include "chrome/browser/history/history_service_factory.h"
 #include "chrome/browser/history/history_types.h"
 #include "chrome/browser/infobars/confirm_infobar_delegate.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/managed_mode/managed_mode_interstitial.h"
 #include "chrome/browser/managed_mode/managed_mode_resource_throttle.h"
@@ -21,6 +20,7 @@
 #include "chrome/browser/managed_mode/managed_user_service_factory.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/tab_contents/tab_util.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/navigation_entry.h"
 #include "content/public/browser/render_process_host.h"
@@ -83,7 +83,7 @@
  public:
   // Creates a managed mode warning infobar and delegate and adds the infobar to
   // |infobar_service|.  Returns the infobar if it was successfully added.
-  static InfoBar* Create(InfoBarService* infobar_service);
+  static infobars::InfoBar* Create(InfoBarService* infobar_service);
 
  private:
   ManagedModeWarningInfoBarDelegate();
@@ -101,7 +101,7 @@
 };
 
 // static
-InfoBar* ManagedModeWarningInfoBarDelegate::Create(
+infobars::InfoBar* ManagedModeWarningInfoBarDelegate::Create(
     InfoBarService* infobar_service) {
   return infobar_service->AddInfoBar(ConfirmInfoBarDelegate::CreateInfoBar(
       scoped_ptr<ConfirmInfoBarDelegate>(
diff --git a/chrome/browser/managed_mode/managed_mode_navigation_observer.h b/chrome/browser/managed_mode/managed_mode_navigation_observer.h
index d72e5e1..4a484d7 100644
--- a/chrome/browser/managed_mode/managed_mode_navigation_observer.h
+++ b/chrome/browser/managed_mode/managed_mode_navigation_observer.h
@@ -14,7 +14,6 @@
 #include "content/public/browser/web_contents_observer.h"
 #include "content/public/browser/web_contents_user_data.h"
 
-class InfoBar;
 class ManagedModeURLFilter;
 class ManagedUserService;
 
@@ -22,6 +21,10 @@
 class NavigationEntry;
 }
 
+namespace infobars {
+class InfoBar;
+}
+
 class ManagedModeNavigationObserver
     : public content::WebContentsObserver,
       public content::WebContentsUserData<ManagedModeNavigationObserver> {
@@ -68,7 +71,7 @@
   const ManagedModeURLFilter* url_filter_;
 
   // Owned by the InfoBarService, which has the same lifetime as this object.
-  InfoBar* warn_infobar_;
+  infobars::InfoBar* warn_infobar_;
 
   ScopedVector<const content::NavigationEntry> blocked_navigations_;
 
diff --git a/chrome/browser/managed_mode/managed_user_service.cc b/chrome/browser/managed_mode/managed_user_service.cc
index 1256b52..8ca555f 100644
--- a/chrome/browser/managed_mode/managed_user_service.cc
+++ b/chrome/browser/managed_mode/managed_user_service.cc
@@ -346,7 +346,7 @@
                           const content::NotificationSource& source,
                           const content::NotificationDetails& details) {
   switch (type) {
-    case chrome::NOTIFICATION_EXTENSION_LOADED: {
+    case chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED: {
       const extensions::Extension* extension =
           content::Details<extensions::Extension>(details).ptr();
       if (!extensions::ManagedModeInfo::GetContentPackSiteList(
@@ -469,7 +469,8 @@
   // TODO(sergiu): Use sane time here when it's ready.
   dict->SetDouble(kManagedUserAccessRequestTime, base::Time::Now().ToJsTime());
 
-  dict->SetString(kManagedUserName, profile_->GetProfileName());
+  dict->SetString(kManagedUserName,
+                  profile_->GetPrefs()->GetString(prefs::kProfileName));
 
   // Copy the notification setting of the custodian.
   std::string managed_user_id =
@@ -478,7 +479,10 @@
       ManagedUserSharedSettingsServiceFactory::GetForBrowserContext(profile_)
           ->GetValue(managed_user_id, kNotificationSetting);
   bool notifications_enabled = false;
-  if (value) {
+  if (CommandLine::ForCurrentProcess()->HasSwitch(
+          switches::kEnableAccessRequestNotifications)) {
+    notifications_enabled = true;
+  } else if (value) {
     bool success = value->GetAsBoolean(&notifications_enabled);
     DCHECK(success);
   }
@@ -572,7 +576,8 @@
   if (management_policy)
     extension_system->management_policy()->RegisterProvider(this);
 
-  registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
+  registrar_.Add(this,
+                 chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
                  content::Source<Profile>(profile_));
   registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
                  content::Source<Profile>(profile_));
diff --git a/chrome/browser/managed_mode/managed_user_service_unittest.cc b/chrome/browser/managed_mode/managed_user_service_unittest.cc
index f133ed6..d70d199 100644
--- a/chrome/browser/managed_mode/managed_user_service_unittest.cc
+++ b/chrome/browser/managed_mode/managed_user_service_unittest.cc
@@ -325,7 +325,7 @@
   base::FilePath extension_path =
       test_data_dir.AppendASCII("extensions/managed_mode/content_pack");
   content::WindowedNotificationObserver extension_load_observer(
-      chrome::NOTIFICATION_EXTENSION_LOADED,
+      chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
       content::Source<Profile>(profile_.get()));
   installer->Load(extension_path);
   extension_load_observer.Wait();
diff --git a/chrome/browser/media/chrome_media_stream_infobar_browsertest.cc b/chrome/browser/media/chrome_media_stream_infobar_browsertest.cc
index 1ec7e84..e083340 100644
--- a/chrome/browser/media/chrome_media_stream_infobar_browsertest.cc
+++ b/chrome/browser/media/chrome_media_stream_infobar_browsertest.cc
@@ -8,7 +8,6 @@
 #include "base/strings/stringprintf.h"
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/content_settings/host_content_settings_map.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/media/webrtc_browsertest_base.h"
 #include "chrome/browser/media/webrtc_browsertest_common.h"
@@ -21,6 +20,7 @@
 #include "chrome/test/base/in_process_browser_test.h"
 #include "chrome/test/base/test_switches.h"
 #include "chrome/test/base/ui_test_utils.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/notification_service.h"
 #include "content/public/test/browser_test_utils.h"
 #include "net/test/spawned_test_server/spawned_test_server.h"
diff --git a/chrome/browser/media/chrome_webrtc_apprtc_browsertest.cc b/chrome/browser/media/chrome_webrtc_apprtc_browsertest.cc
index 1d1878a..e9a38ab 100644
--- a/chrome/browser/media/chrome_webrtc_apprtc_browsertest.cc
+++ b/chrome/browser/media/chrome_webrtc_apprtc_browsertest.cc
@@ -217,7 +217,7 @@
 }
 
 #if defined(OS_LINUX)
-#define MAYBE_MANUAL_FirefoxApprtcInteropTest MANUAL_FirefoxApprtcInteropTest
+#define MAYBE_MANUAL_FirefoxApprtcInteropTest DISABLED_MANUAL_FirefoxApprtcInteropTest
 #else
 // Not implemented yet on Windows and Mac.
 #define MAYBE_MANUAL_FirefoxApprtcInteropTest DISABLED_MANUAL_FirefoxApprtcInteropTest
diff --git a/chrome/browser/media/chrome_webrtc_video_quality_browsertest.cc b/chrome/browser/media/chrome_webrtc_video_quality_browsertest.cc
index 62b08f7..32cfdd9 100644
--- a/chrome/browser/media/chrome_webrtc_video_quality_browsertest.cc
+++ b/chrome/browser/media/chrome_webrtc_video_quality_browsertest.cc
@@ -12,7 +12,6 @@
 #include "base/test/test_timeouts.h"
 #include "base/time/time.h"
 #include "chrome/browser/chrome_notification_types.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/media/media_stream_infobar_delegate.h"
 #include "chrome/browser/media/webrtc_browsertest_base.h"
@@ -24,6 +23,7 @@
 #include "chrome/common/chrome_switches.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "chrome/test/base/ui_test_utils.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/notification_service.h"
 #include "content/public/test/browser_test_utils.h"
 #include "media/base/media_switches.h"
@@ -200,6 +200,7 @@
                                         base::StringPrintf("%d", width));
     converter_command.AppendSwitchASCII("--height",
                                         base::StringPrintf("%d", height));
+    converter_command.AppendSwitchASCII("--delete_frames", "true");
 
     // We produce an output file that will later be used as an input to the
     // barcode decoder and frame analyzer tools.
diff --git a/chrome/browser/media/encrypted_media_message_filter_android.cc b/chrome/browser/media/encrypted_media_message_filter_android.cc
index 2048fa8..c935fde 100644
--- a/chrome/browser/media/encrypted_media_message_filter_android.cc
+++ b/chrome/browser/media/encrypted_media_message_filter_android.cc
@@ -19,39 +19,48 @@
 
 const size_t kMaxKeySystemLength = 256;
 
-// Check whether the available codecs are supported.
+enum CodecType {
+  CODEC_AUDIO,
+  CODEC_VIDEO
+};
+
+struct CodecInfo {
+  android::SupportedCodecs codec;
+  CodecType codec_type;
+  const char* codec_name;
+  const char* container_mime_type;
+};
+
+const CodecInfo kCodecsToQuery[] = {
+  {android::WEBM_VORBIS, CODEC_AUDIO, "vorbis", "video/webm"},
+  {android::WEBM_VP8, CODEC_VIDEO, "vp8", "video/webm"},
+#if defined(USE_PROPRIETARY_CODECS)
+  {android::MP4_AAC, CODEC_AUDIO, "mp4a", "video/mp4"},
+  {android::MP4_AVC1, CODEC_VIDEO, "avc1", "video/mp4"}
+#endif  // defined(USE_PROPRIETARY_CODECS)
+};
+
 static android::SupportedCodecs GetSupportedCodecs(
     const SupportedKeySystemRequest& request,
     bool video_must_be_compositable) {
   const std::string& key_system = request.key_system;
-  android::SupportedCodecs supported_codecs = android::NO_SUPPORTED_CODECS;
+  android::SupportedCodecs supported_codecs = android::NO_CODECS;
 
-  if ((request.codecs & android::WEBM_VP8_AND_VORBIS) &&
-      MediaDrmBridge::IsKeySystemSupportedWithType(key_system, "video/webm") &&
-      MediaCodecBridge::CanDecode("vp8", !video_must_be_compositable) &&
-      MediaCodecBridge::CanDecode("vorbis", false)) {
-    supported_codecs = static_cast<android::SupportedCodecs>(
-        supported_codecs | android::WEBM_VP8_AND_VORBIS);
+  for (size_t i = 0; i < arraysize(kCodecsToQuery); ++i) {
+    const CodecInfo& info = kCodecsToQuery[i];
+    // TODO(qinmin): Remove the composition logic when secure contents can be
+    // composited.
+    bool is_secure = (info.codec_type == CODEC_VIDEO)
+                         ? (!video_must_be_compositable) : false;
+    if ((request.codecs & info.codec) &&
+        MediaDrmBridge::IsKeySystemSupportedWithType(
+            key_system, info.container_mime_type) &&
+        MediaCodecBridge::CanDecode(info.codec_name, is_secure)) {
+      supported_codecs = static_cast<android::SupportedCodecs>(
+          supported_codecs | info.codec);
+    }
   }
 
-#if defined(USE_PROPRIETARY_CODECS)
-  if ((request.codecs & android::MP4_AAC) &&
-      MediaDrmBridge::IsKeySystemSupportedWithType(key_system, "video/mp4") &&
-      MediaCodecBridge::CanDecode("mp4a", false)) {
-    supported_codecs = static_cast<android::SupportedCodecs>(
-        supported_codecs | android::MP4_AAC);
-  }
-
-  // TODO(qinmin): Remove the composition logic when secure contents can be
-  // composited.
-  if ((request.codecs & android::MP4_AVC1) &&
-      MediaDrmBridge::IsKeySystemSupportedWithType(key_system, "video/mp4") &&
-      MediaCodecBridge::CanDecode("avc1", !video_must_be_compositable)) {
-    supported_codecs = static_cast<android::SupportedCodecs>(
-        supported_codecs | android::MP4_AVC1);
-  }
-#endif  // defined(USE_PROPRIETARY_CODECS)
-
   return supported_codecs;
 }
 
@@ -95,7 +104,8 @@
   if (!MediaDrmBridge::IsKeySystemSupported(request.key_system))
     return;
 
-  DCHECK_EQ(request.codecs >> 3, 0) << "unrecognized codec";
+  DCHECK_EQ(request.codecs & android::INVALID_CODECS, android::NO_CODECS)
+      << "unrecognized codec";
   response->key_system = request.key_system;
   // TODO(qinmin): check composition is supported or not.
   response->compositing_codecs = GetSupportedCodecs(request, true);
diff --git a/chrome/browser/media/media_stream_infobar_delegate.cc b/chrome/browser/media/media_stream_infobar_delegate.cc
index 4b17721..81ce834 100644
--- a/chrome/browser/media/media_stream_infobar_delegate.cc
+++ b/chrome/browser/media/media_stream_infobar_delegate.cc
@@ -8,9 +8,9 @@
 #include "base/metrics/histogram.h"
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/google/google_util.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/common/url_constants.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/web_contents.h"
 #include "grit/generated_resources.h"
 #include "grit/theme_resources.h"
@@ -51,11 +51,11 @@
     return false;
   }
 
-  scoped_ptr<InfoBar> infobar(ConfirmInfoBarDelegate::CreateInfoBar(
-      scoped_ptr<ConfirmInfoBarDelegate>(
+  scoped_ptr<infobars::InfoBar> infobar(
+      ConfirmInfoBarDelegate::CreateInfoBar(scoped_ptr<ConfirmInfoBarDelegate>(
           new MediaStreamInfoBarDelegate(controller.Pass()))));
   for (size_t i = 0; i < infobar_service->infobar_count(); ++i) {
-    InfoBar* old_infobar = infobar_service->infobar_at(i);
+    infobars::InfoBar* old_infobar = infobar_service->infobar_at(i);
     if (old_infobar->delegate()->AsMediaStreamInfoBarDelegate()) {
       infobar_service->ReplaceInfoBar(old_infobar, infobar.Pass());
       return true;
@@ -86,7 +86,8 @@
       IDR_INFOBAR_MEDIA_STREAM_CAMERA : IDR_INFOBAR_MEDIA_STREAM_MIC;
 }
 
-InfoBarDelegate::Type MediaStreamInfoBarDelegate::GetInfoBarType() const {
+infobars::InfoBarDelegate::Type MediaStreamInfoBarDelegate::GetInfoBarType()
+    const {
   return PAGE_ACTION_TYPE;
 }
 
diff --git a/chrome/browser/media/midi_permission_infobar_delegate.cc b/chrome/browser/media/midi_permission_infobar_delegate.cc
index 28fd7a8..e5339b4 100644
--- a/chrome/browser/media/midi_permission_infobar_delegate.cc
+++ b/chrome/browser/media/midi_permission_infobar_delegate.cc
@@ -6,8 +6,8 @@
 
 #include "chrome/browser/content_settings/permission_queue_controller.h"
 #include "chrome/browser/content_settings/permission_request_id.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/navigation_entry.h"
 #include "content/public/browser/web_contents.h"
 #include "grit/generated_resources.h"
@@ -17,7 +17,7 @@
 #include "ui/base/l10n/l10n_util.h"
 
 // static
-InfoBar* MidiPermissionInfoBarDelegate::Create(
+infobars::InfoBar* MidiPermissionInfoBarDelegate::Create(
     InfoBarService* infobar_service,
     PermissionQueueController* controller,
     const PermissionRequestID& id,
@@ -57,7 +57,8 @@
   return IDR_INFOBAR_MIDI;
 }
 
-InfoBarDelegate::Type MidiPermissionInfoBarDelegate::GetInfoBarType() const {
+infobars::InfoBarDelegate::Type MidiPermissionInfoBarDelegate::GetInfoBarType()
+    const {
   return PAGE_ACTION_TYPE;
 }
 
diff --git a/chrome/browser/media/midi_permission_infobar_delegate.h b/chrome/browser/media/midi_permission_infobar_delegate.h
index 2c7ea3a..3c1a5c7 100644
--- a/chrome/browser/media/midi_permission_infobar_delegate.h
+++ b/chrome/browser/media/midi_permission_infobar_delegate.h
@@ -21,11 +21,11 @@
  public:
   // Creates a MIDI permission infobar and delegate and adds the infobar to
   // |infobar_service|.  Returns the infobar if it was successfully added.
-  static InfoBar* Create(InfoBarService* infobar_service,
-                         PermissionQueueController* controller,
-                         const PermissionRequestID& id,
-                         const GURL& requesting_frame,
-                         const std::string& display_languages);
+  static infobars::InfoBar* Create(InfoBarService* infobar_service,
+                                   PermissionQueueController* controller,
+                                   const PermissionRequestID& id,
+                                   const GURL& requesting_frame,
+                                   const std::string& display_languages);
 
  private:
   MidiPermissionInfoBarDelegate(PermissionQueueController* controller,
diff --git a/chrome/browser/media/protected_media_identifier_infobar_delegate.cc b/chrome/browser/media/protected_media_identifier_infobar_delegate.cc
index d0337c5..a968131 100644
--- a/chrome/browser/media/protected_media_identifier_infobar_delegate.cc
+++ b/chrome/browser/media/protected_media_identifier_infobar_delegate.cc
@@ -5,8 +5,8 @@
 #include "chrome/browser/media/protected_media_identifier_infobar_delegate.h"
 
 #include "chrome/browser/content_settings/permission_queue_controller.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/navigation_entry.h"
 #include "grit/generated_resources.h"
 #include "grit/theme_resources.h"
@@ -18,7 +18,7 @@
 #endif
 
 // static
-InfoBar* ProtectedMediaIdentifierInfoBarDelegate::Create(
+infobars::InfoBar* ProtectedMediaIdentifierInfoBarDelegate::Create(
     InfoBarService* infobar_service,
     PermissionQueueController* controller,
     const PermissionRequestID& id,
@@ -77,8 +77,8 @@
   return IDR_INFOBAR_PROTECTED_MEDIA_IDENTIFIER;
 }
 
-InfoBarDelegate::Type
-    ProtectedMediaIdentifierInfoBarDelegate::GetInfoBarType() const {
+infobars::InfoBarDelegate::Type
+ProtectedMediaIdentifierInfoBarDelegate::GetInfoBarType() const {
   return PAGE_ACTION_TYPE;
 }
 
diff --git a/chrome/browser/media/protected_media_identifier_infobar_delegate.h b/chrome/browser/media/protected_media_identifier_infobar_delegate.h
index d1c8089..1a4380b 100644
--- a/chrome/browser/media/protected_media_identifier_infobar_delegate.h
+++ b/chrome/browser/media/protected_media_identifier_infobar_delegate.h
@@ -22,11 +22,12 @@
   // Creates a protected media identifier infobar and delegate and adds the
   // infobar to |infobar_service|.  Returns the infobar if it was successfully
   // added.
-  static InfoBar* Create(InfoBarService* infobar_service,
-                         PermissionQueueController* controller,
-                         const PermissionRequestID& id,
-                         const GURL& requesting_frame,
-                         const std::string& display_languages);
+  static infobars::InfoBar* Create(InfoBarService* infobar_service,
+                                   PermissionQueueController* controller,
+                                   const PermissionRequestID& id,
+                                   const GURL& requesting_frame,
+                                   const std::string& display_languages);
+
  protected:
   ProtectedMediaIdentifierInfoBarDelegate(PermissionQueueController* controller,
                                           const PermissionRequestID& id,
diff --git a/chrome/browser/media/protected_media_identifier_permission_context.cc b/chrome/browser/media/protected_media_identifier_permission_context.cc
index b4b890f..74067da 100644
--- a/chrome/browser/media/protected_media_identifier_permission_context.cc
+++ b/chrome/browser/media/protected_media_identifier_permission_context.cc
@@ -128,7 +128,6 @@
                      id,
                      requesting_frame,
                      callback));
-      rvh->DisableFullscreenEncryptedMediaPlayback();
       break;
     default:
       NOTREACHED();
diff --git a/chrome/browser/media/webrtc_browsertest_base.cc b/chrome/browser/media/webrtc_browsertest_base.cc
index a586029..a85e0c9 100644
--- a/chrome/browser/media/webrtc_browsertest_base.cc
+++ b/chrome/browser/media/webrtc_browsertest_base.cc
@@ -8,7 +8,6 @@
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
 #include "chrome/browser/chrome_notification_types.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/media/media_stream_infobar_delegate.h"
 #include "chrome/browser/media/webrtc_browsertest_common.h"
@@ -16,6 +15,7 @@
 #include "chrome/browser/ui/browser_tabstrip.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/test/base/ui_test_utils.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/notification_service.h"
 #include "content/public/test/browser_test_utils.h"
 #include "net/test/embedded_test_server/embedded_test_server.h"
@@ -98,7 +98,8 @@
 void WebRtcTestBase::GetUserMediaWithSpecificConstraintsAndAccept(
     content::WebContents* tab_contents,
     const std::string& constraints) const {
-  InfoBar* infobar = GetUserMediaAndWaitForInfoBar(tab_contents, constraints);
+  infobars::InfoBar* infobar =
+      GetUserMediaAndWaitForInfoBar(tab_contents, constraints);
   infobar->delegate()->AsConfirmInfoBarDelegate()->Accept();
   CloseInfoBarInTab(tab_contents, infobar);
 
@@ -116,7 +117,8 @@
 void WebRtcTestBase::GetUserMediaWithSpecificConstraintsAndDeny(
     content::WebContents* tab_contents,
     const std::string& constraints) const {
-  InfoBar* infobar = GetUserMediaAndWaitForInfoBar(tab_contents, constraints);
+  infobars::InfoBar* infobar =
+      GetUserMediaAndWaitForInfoBar(tab_contents, constraints);
   infobar->delegate()->AsConfirmInfoBarDelegate()->Cancel();
   CloseInfoBarInTab(tab_contents, infobar);
 
@@ -128,7 +130,7 @@
 
 void WebRtcTestBase::GetUserMediaAndDismiss(
     content::WebContents* tab_contents) const {
-  InfoBar* infobar =
+  infobars::InfoBar* infobar =
       GetUserMediaAndWaitForInfoBar(tab_contents, kAudioVideoCallConstraints);
   infobar->delegate()->InfoBarDismissed();
   CloseInfoBarInTab(tab_contents, infobar);
@@ -148,7 +150,7 @@
   EXPECT_EQ("ok-requested", result);
 }
 
-InfoBar* WebRtcTestBase::GetUserMediaAndWaitForInfoBar(
+infobars::InfoBar* WebRtcTestBase::GetUserMediaAndWaitForInfoBar(
     content::WebContents* tab_contents,
     const std::string& constraints) const {
   content::WindowedNotificationObserver infobar_added(
@@ -160,7 +162,8 @@
 
   // Wait for the bar to pop up, then return it.
   infobar_added.Wait();
-  content::Details<InfoBar::AddedDetails> details(infobar_added.details());
+  content::Details<infobars::InfoBar::AddedDetails> details(
+      infobar_added.details());
   EXPECT_TRUE(details->delegate()->AsMediaStreamInfoBarDelegate());
   return details.ptr();
 }
@@ -205,8 +208,9 @@
 
   content::WebContents* tab_contents =
       browser()->tab_strip_model()->GetActiveWebContents();
-  content::Details<InfoBar::AddedDetails> details(infobar_added.details());
-  InfoBar* infobar = details.ptr();
+  content::Details<infobars::InfoBar::AddedDetails> details(
+      infobar_added.details());
+  infobars::InfoBar* infobar = details.ptr();
   EXPECT_TRUE(infobar);
   infobar->delegate()->AsMediaStreamInfoBarDelegate()->Accept();
 
@@ -214,9 +218,8 @@
   return tab_contents;
 }
 
-void WebRtcTestBase::CloseInfoBarInTab(
-    content::WebContents* tab_contents,
-    InfoBar* infobar) const {
+void WebRtcTestBase::CloseInfoBarInTab(content::WebContents* tab_contents,
+                                       infobars::InfoBar* infobar) const {
   content::WindowedNotificationObserver infobar_removed(
       chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED,
       content::NotificationService::AllSources());
diff --git a/chrome/browser/media/webrtc_browsertest_base.h b/chrome/browser/media/webrtc_browsertest_base.h
index 93567e3..bea46c7 100644
--- a/chrome/browser/media/webrtc_browsertest_base.h
+++ b/chrome/browser/media/webrtc_browsertest_base.h
@@ -9,7 +9,9 @@
 
 #include "chrome/test/base/in_process_browser_test.h"
 
+namespace infobars {
 class InfoBar;
+}
 
 namespace content {
 class WebContents;
@@ -104,9 +106,10 @@
 
  private:
   void CloseInfoBarInTab(content::WebContents* tab_contents,
-                         InfoBar* infobar) const;
-  InfoBar* GetUserMediaAndWaitForInfoBar(content::WebContents* tab_contents,
-                                         const std::string& constraints) const;
+                         infobars::InfoBar* infobar) const;
+  infobars::InfoBar* GetUserMediaAndWaitForInfoBar(
+      content::WebContents* tab_contents,
+      const std::string& constraints) const;
 
   bool detect_errors_in_javascript_;
 
diff --git a/chrome/browser/media/webrtc_logging_handler_host.cc b/chrome/browser/media/webrtc_logging_handler_host.cc
index 90e0bfa..d9ea675 100644
--- a/chrome/browser/media/webrtc_logging_handler_host.cc
+++ b/chrome/browser/media/webrtc_logging_handler_host.cc
@@ -385,11 +385,13 @@
 
   // GPU
   gpu::GPUInfo gpu_info = content::GpuDataManager::GetInstance()->GetGPUInfo();
-  LogToCircularBuffer("Gpu: machine-model='" + gpu_info.machine_model +
-                      "', vendor-id=" + IntToString(gpu_info.gpu.vendor_id) +
-                      ", device-id=" + IntToString(gpu_info.gpu.device_id) +
-                      ", driver-vendor='" + gpu_info.driver_vendor +
-                      "', driver-version=" + gpu_info.driver_version);
+  LogToCircularBuffer(
+      "Gpu: machine-model-name='" + gpu_info.machine_model_name +
+      "', machine-model-version=" + gpu_info.machine_model_version +
+      "', vendor-id=" + IntToString(gpu_info.gpu.vendor_id) +
+      ", device-id=" + IntToString(gpu_info.gpu.device_id) +
+      ", driver-vendor='" + gpu_info.driver_vendor +
+      "', driver-version=" + gpu_info.driver_version);
 
   // Network interfaces
   LogToCircularBuffer("Discovered " + IntToString(network_list.size()) +
diff --git a/chrome/browser/media_galleries/fileapi/device_media_async_file_util.cc b/chrome/browser/media_galleries/fileapi/device_media_async_file_util.cc
index 12c8db4..9ca5faa 100644
--- a/chrome/browser/media_galleries/fileapi/device_media_async_file_util.cc
+++ b/chrome/browser/media_galleries/fileapi/device_media_async_file_util.cc
@@ -15,8 +15,6 @@
 #include "chrome/browser/media_galleries/fileapi/native_media_file_util.h"
 #include "chrome/browser/media_galleries/fileapi/readahead_file_stream_reader.h"
 #include "content/public/browser/browser_thread.h"
-#include "net/base/io_buffer.h"
-#include "net/base/mime_sniffer.h"
 #include "webkit/browser/blob/file_stream_reader.h"
 #include "webkit/browser/fileapi/file_system_context.h"
 #include "webkit/browser/fileapi/file_system_operation_context.h"
diff --git a/chrome/browser/media_galleries/media_galleries_dialog_controller.cc b/chrome/browser/media_galleries/media_galleries_dialog_controller.cc
index 1e9b5f7..d815e1d 100644
--- a/chrome/browser/media_galleries/media_galleries_dialog_controller.cc
+++ b/chrome/browser/media_galleries/media_galleries_dialog_controller.cc
@@ -146,57 +146,50 @@
   return l10n_util::GetStringUTF16(IDS_MEDIA_GALLERIES_UNATTACHED_LOCATIONS);
 }
 
-// TODO(gbillock): Call this something a bit more connected to the
-// messaging in the dialog.
-bool MediaGalleriesDialogController::HasPermittedGalleries() const {
-  for (KnownGalleryPermissions::const_iterator iter = known_galleries_.begin();
-       iter != known_galleries_.end(); ++iter) {
+bool MediaGalleriesDialogController::IsAcceptAllowed() const {
+  if (!toggled_galleries_.empty() || !forgotten_galleries_.empty())
+    return true;
+
+  for (GalleryPermissionsMap::const_iterator iter = new_galleries_.begin();
+       iter != new_galleries_.end();
+       ++iter) {
     if (iter->second.allowed)
       return true;
   }
 
-  // Do this? Views did.
-  if (new_galleries_.size() > 0)
-    return true;
-
   return false;
 }
 
 // Note: sorts by display criterion: GalleriesVectorComparator.
-void MediaGalleriesDialogController::FillPermissions(
-    bool attached,
-    MediaGalleriesDialogController::GalleryPermissionsVector* permissions)
-    const {
-  for (KnownGalleryPermissions::const_iterator iter = known_galleries_.begin();
+MediaGalleriesDialogController::GalleryPermissionsVector
+MediaGalleriesDialogController::FillPermissions(bool attached) const {
+  GalleryPermissionsVector result;
+  for (GalleryPermissionsMap::const_iterator iter = known_galleries_.begin();
        iter != known_galleries_.end(); ++iter) {
-    if (!ContainsKey(forgotten_gallery_ids_, iter->first) &&
+    if (!ContainsKey(forgotten_galleries_, iter->first) &&
         attached == iter->second.pref_info.IsGalleryAvailable()) {
-      permissions->push_back(iter->second);
+      result.push_back(iter->second);
     }
   }
-  for (GalleryPermissionsVector::const_iterator iter = new_galleries_.begin();
+  for (GalleryPermissionsMap::const_iterator iter = new_galleries_.begin();
        iter != new_galleries_.end(); ++iter) {
-    if (attached == iter->pref_info.IsGalleryAvailable()) {
-      permissions->push_back(*iter);
+    if (attached == iter->second.pref_info.IsGalleryAvailable()) {
+      result.push_back(iter->second);
     }
   }
 
-  std::sort(permissions->begin(), permissions->end(),
-            GalleriesVectorComparator);
+  std::sort(result.begin(), result.end(), GalleriesVectorComparator);
+  return result;
 }
 
 MediaGalleriesDialogController::GalleryPermissionsVector
 MediaGalleriesDialogController::AttachedPermissions() const {
-  GalleryPermissionsVector attached;
-  FillPermissions(true, &attached);
-  return attached;
+  return FillPermissions(true);
 }
 
 MediaGalleriesDialogController::GalleryPermissionsVector
 MediaGalleriesDialogController::UnattachedPermissions() const {
-  GalleryPermissionsVector unattached;
-  FillPermissions(false, &unattached);
-  return unattached;
+  return FillPermissions(false);
 }
 
 void MediaGalleriesDialogController::OnAddFolderClicked() {
@@ -218,12 +211,10 @@
       NULL);
 }
 
-void MediaGalleriesDialogController::DidToggleGalleryId(
-    MediaGalleryPrefId gallery_id,
-    bool enabled) {
+void MediaGalleriesDialogController::DidToggleGallery(
+    GalleryDialogId gallery_id, bool enabled) {
   // Check known galleries.
-  KnownGalleryPermissions::iterator iter =
-      known_galleries_.find(gallery_id);
+  GalleryPermissionsMap::iterator iter = known_galleries_.find(gallery_id);
   if (iter != known_galleries_.end()) {
     if (iter->second.allowed == enabled)
       return;
@@ -236,31 +227,22 @@
     return;
   }
 
+  iter = new_galleries_.find(gallery_id);
+  if (iter != new_galleries_.end())
+    iter->second.allowed = enabled;
+
   // Don't sort -- the dialog is open, and we don't want to adjust any
   // positions for future updates to the dialog contents until they are
   // redrawn.
 }
 
-void MediaGalleriesDialogController::DidToggleNewGallery(
-    const MediaGalleryPrefInfo& gallery,
-    bool enabled) {
-  for (GalleryPermissionsVector::iterator iter = new_galleries_.begin();
-       iter != new_galleries_.end(); ++iter) {
-    if (iter->pref_info.path == gallery.path &&
-        iter->pref_info.device_id == gallery.device_id) {
-      iter->allowed = enabled;
-      return;
-    }
-  }
-}
-
 void MediaGalleriesDialogController::DidForgetGallery(
-    MediaGalleryPrefId pref_id) {
-  // TODO(scr): remove from new_galleries_ if it's in there.  Should
-  // new_galleries be a set? Why don't new_galleries allow context clicking?
-  DCHECK(ContainsKey(known_galleries_, pref_id));
+    GalleryDialogId gallery_id) {
   media_galleries::UsageCount(media_galleries::DIALOG_FORGET_GALLERY);
-  forgotten_gallery_ids_.insert(pref_id);
+  if (!new_galleries_.erase(gallery_id)) {
+    DCHECK(ContainsKey(known_galleries_, gallery_id));
+    forgotten_galleries_.insert(gallery_id);
+  }
   dialog_->UpdateGalleries();
 }
 
@@ -299,18 +281,21 @@
     // The prefs are in sync with |known_galleries_|, so it should exist in
     // |known_galleries_| as well. User selecting a known gallery effectively
     // just sets the gallery to permitted.
-    DCHECK(ContainsKey(known_galleries_, gallery.pref_id));
-    forgotten_gallery_ids_.erase(gallery.pref_id);
+    GalleryDialogId gallery_id = GetDialogId(gallery.pref_id);
+    GalleryPermissionsMap::iterator iter = known_galleries_.find(gallery_id);
+    DCHECK(iter != known_galleries_.end());
+    iter->second.allowed = true;
+    forgotten_galleries_.erase(gallery_id);
     dialog_->UpdateGalleries();
     return;
   }
 
   // Try to find it in |new_galleries_| (user added same folder twice).
-  for (GalleryPermissionsVector::iterator iter = new_galleries_.begin();
+  for (GalleryPermissionsMap::iterator iter = new_galleries_.begin();
        iter != new_galleries_.end(); ++iter) {
-    if (iter->pref_info.path == gallery.path &&
-        iter->pref_info.device_id == gallery.device_id) {
-      iter->allowed = true;
+    if (iter->second.pref_info.path == gallery.path &&
+        iter->second.pref_info.device_id == gallery.device_id) {
+      iter->second.allowed = true;
       dialog_->UpdateGalleries();
       return;
     }
@@ -318,7 +303,8 @@
 
   // Lastly, if not found, add a new gallery to |new_galleries_|.
   // Note that it will have prefId = kInvalidMediaGalleryPrefId.
-  new_galleries_.push_back(GalleryPermission(gallery, true));
+  GalleryDialogId gallery_id = GetDialogId(gallery.pref_id);
+  new_galleries_[gallery_id] = GalleryPermission(gallery_id, gallery, true);
   dialog_->UpdateGalleries();
 }
 
@@ -387,7 +373,9 @@
     if (gallery.IsBlackListedType())
       continue;
 
-    known_galleries_[iter->first] = GalleryPermission(gallery, false);
+    GalleryDialogId gallery_id = GetDialogId(gallery.pref_id);
+    known_galleries_[gallery_id] =
+        GalleryPermission(gallery_id, gallery, false);
   }
 
   MediaGalleryPrefIdSet permitted =
@@ -395,23 +383,25 @@
 
   for (MediaGalleryPrefIdSet::iterator iter = permitted.begin();
        iter != permitted.end(); ++iter) {
-    if (ContainsKey(toggled_galleries_, *iter))
+    GalleryDialogId gallery_id = GetDialogId(*iter);
+    if (ContainsKey(toggled_galleries_, gallery_id))
       continue;
-    DCHECK(ContainsKey(known_galleries_, *iter));
-    known_galleries_[*iter].allowed = true;
+    DCHECK(ContainsKey(known_galleries_, gallery_id));
+    known_galleries_[gallery_id].allowed = true;
   }
 }
 
 void MediaGalleriesDialogController::SavePermissions() {
   DCHECK(preferences_);
   media_galleries::UsageCount(media_galleries::SAVE_DIALOG);
-  for (KnownGalleryPermissions::const_iterator iter = known_galleries_.begin();
+  for (GalleryPermissionsMap::const_iterator iter = known_galleries_.begin();
        iter != known_galleries_.end(); ++iter) {
-    if (ContainsKey(forgotten_gallery_ids_, iter->first)) {
-      preferences_->ForgetGalleryById(iter->first);
+    MediaGalleryPrefId pref_id = iter->second.pref_info.pref_id;
+    if (ContainsKey(forgotten_galleries_, iter->first)) {
+      preferences_->ForgetGalleryById(pref_id);
     } else {
       bool changed = preferences_->SetGalleryPermissionForExtension(
-          *extension_, iter->first, iter->second.allowed);
+          *extension_, pref_id, iter->second.allowed);
       if (changed) {
         if (iter->second.allowed) {
           media_galleries::UsageCount(
@@ -424,15 +414,14 @@
     }
   }
 
-  for (GalleryPermissionsVector::const_iterator iter = new_galleries_.begin();
+  for (GalleryPermissionsMap::const_iterator iter = new_galleries_.begin();
        iter != new_galleries_.end(); ++iter) {
     media_galleries::UsageCount(media_galleries::DIALOG_GALLERY_ADDED);
     // If the user added a gallery then unchecked it, forget about it.
-    if (!iter->allowed)
+    if (!iter->second.allowed)
       continue;
 
-    // TODO(gbillock): Should be adding volume metadata during FileSelected.
-    const MediaGalleryPrefInfo& gallery = iter->pref_info;
+    const MediaGalleryPrefInfo& gallery = iter->second.pref_info;
     MediaGalleryPrefId id = preferences_->AddGallery(
         gallery.device_id, gallery.path, MediaGalleryPrefInfo::kUserAdded,
         gallery.volume_label, gallery.vendor_name, gallery.model_name,
@@ -447,25 +436,32 @@
   // but the code below will put |known_galleries_| back in a consistent state.
   InitializePermissions();
 
+  std::set<GalleryDialogId> new_galleries_to_remove;
   // Look for duplicate entries in |new_galleries_| in case one was added
   // in another dialog.
-  for (KnownGalleryPermissions::iterator it = known_galleries_.begin();
+  for (GalleryPermissionsMap::iterator it = known_galleries_.begin();
        it != known_galleries_.end();
        ++it) {
     GalleryPermission& gallery = it->second;
-    for (GalleryPermissionsVector::iterator new_it = new_galleries_.begin();
+    for (GalleryPermissionsMap::iterator new_it = new_galleries_.begin();
          new_it != new_galleries_.end();
          ++new_it) {
-      if (new_it->pref_info.path == gallery.pref_info.path &&
-          new_it->pref_info.device_id == gallery.pref_info.device_id) {
+      if (new_it->second.pref_info.path == gallery.pref_info.path &&
+          new_it->second.pref_info.device_id == gallery.pref_info.device_id) {
         // Found duplicate entry. Get the existing permission from it and then
         // remove it.
-        gallery.allowed = new_it->allowed;
-        new_galleries_.erase(new_it);
+        gallery.allowed = new_it->second.allowed;
+        new_galleries_to_remove.insert(new_it->first);
         break;
       }
     }
   }
+  for (std::set<GalleryDialogId>::const_iterator it =
+           new_galleries_to_remove.begin();
+       it != new_galleries_to_remove.end();
+       ++it) {
+    new_galleries_.erase(*it);
+  }
 
   dialog_->UpdateGalleries();
 }
@@ -476,15 +472,41 @@
 }
 
 ui::MenuModel* MediaGalleriesDialogController::GetContextMenu(
-    MediaGalleryPrefId id) {
-  context_menu_->set_pref_id(id);
+    GalleryDialogId gallery_id) {
+  context_menu_->set_pref_id(gallery_id);
   return context_menu_.get();
 }
 
+GalleryDialogId MediaGalleriesDialogController::GetDialogId(
+    MediaGalleryPrefId pref_id) {
+  return id_map_.GetDialogId(pref_id);
+}
+
 Profile* MediaGalleriesDialogController::GetProfile() {
   return Profile::FromBrowserContext(web_contents_->GetBrowserContext());
 }
 
+MediaGalleriesDialogController::DialogIdMap::DialogIdMap()
+    : next_dialog_id_(1) {
+}
+
+MediaGalleriesDialogController::DialogIdMap::~DialogIdMap() {
+}
+
+GalleryDialogId
+MediaGalleriesDialogController::DialogIdMap::GetDialogId(
+    MediaGalleryPrefId pref_id) {
+  std::map<GalleryDialogId, MediaGalleryPrefId>::const_iterator it =
+      mapping_.find(pref_id);
+  if (it != mapping_.end())
+    return it->second;
+
+  GalleryDialogId result = next_dialog_id_++;
+  if (pref_id != kInvalidMediaGalleryPrefId)
+    mapping_[pref_id] = result;
+  return result;
+}
+
 // MediaGalleries dialog -------------------------------------------------------
 
 MediaGalleriesDialog::~MediaGalleriesDialog() {}
diff --git a/chrome/browser/media_galleries/media_galleries_dialog_controller.h b/chrome/browser/media_galleries/media_galleries_dialog_controller.h
index 67f7663..7e06414 100644
--- a/chrome/browser/media_galleries/media_galleries_dialog_controller.h
+++ b/chrome/browser/media_galleries/media_galleries_dialog_controller.h
@@ -32,6 +32,15 @@
 class MediaGalleryContextMenu;
 class Profile;
 
+// Newly added galleries are not added to preferences until the dialog commits,
+// so they do not have a pref id while the dialog is open; leading to
+// complicated code in the dialogs. To solve this complication, the controller
+// maps pref ids into a new space where it can also assign ids to new galleries.
+// The new number space is only valid for the lifetime of the controller. To
+// make it more clear where real pref ids are used and where the fake ids are
+// used, the GalleryDialogId type is used where fake ids are needed.
+typedef MediaGalleryPrefId GalleryDialogId;
+
 // The view.
 class MediaGalleriesDialog {
  public:
@@ -54,10 +63,16 @@
       public MediaGalleriesPreferences::GalleryChangeObserver {
  public:
   struct GalleryPermission {
-    GalleryPermission(const MediaGalleryPrefInfo& pref_info, bool allowed)
-        : pref_info(pref_info), allowed(allowed) {}
+    GalleryPermission(GalleryDialogId gallery_id,
+                      const MediaGalleryPrefInfo& pref_info,
+                      bool allowed)
+        : gallery_id(gallery_id),
+          pref_info(pref_info),
+          allowed(allowed) {
+    }
     GalleryPermission() {}
 
+    GalleryDialogId gallery_id;
     MediaGalleryPrefInfo pref_info;
     bool allowed;
   };
@@ -79,7 +94,7 @@
   base::string16 GetUnattachedLocationsHeader() const;
 
   // Initial state of whether the dialog's confirmation button will be enabled.
-  bool HasPermittedGalleries() const;
+  bool IsAcceptAllowed() const;
 
   // Get the set of permissions to attached galleries.
   virtual GalleryPermissionsVector AttachedPermissions() const;
@@ -92,20 +107,17 @@
 
   // A checkbox beside a gallery permission was checked. The full set
   // of gallery permissions checkbox settings is sent on every checkbox toggle.
-  virtual void DidToggleGalleryId(MediaGalleryPrefId pref_id,
-                                  bool enabled);
-  virtual void DidToggleNewGallery(const MediaGalleryPrefInfo& gallery,
-                                   bool enabled);
+  virtual void DidToggleGallery(GalleryDialogId gallery_id, bool enabled);
 
   // The forget command in the context menu was selected.
-  virtual void DidForgetGallery(MediaGalleryPrefId pref_id);
+  virtual void DidForgetGallery(GalleryDialogId gallery_id);
 
   // The dialog is being deleted.
   virtual void DialogFinished(bool accepted);
 
   virtual content::WebContents* web_contents();
 
-  ui::MenuModel* GetContextMenu(MediaGalleryPrefId id);
+  ui::MenuModel* GetContextMenu(GalleryDialogId gallery_id);
 
  protected:
   friend class MediaGalleriesDialogControllerTest;
@@ -124,8 +136,21 @@
 
  private:
   // This type keeps track of media galleries already known to the prefs system.
-  typedef std::map<MediaGalleryPrefId, GalleryPermission>
-      KnownGalleryPermissions;
+  typedef std::map<GalleryDialogId, GalleryPermission>
+      GalleryPermissionsMap;
+
+  class DialogIdMap {
+   public:
+    DialogIdMap();
+    ~DialogIdMap();
+    GalleryDialogId GetDialogId(MediaGalleryPrefId pref_id);
+
+   private:
+    GalleryDialogId next_dialog_id_;
+    std::map<GalleryDialogId, MediaGalleryPrefId> mapping_;
+    DISALLOW_COPY_AND_ASSIGN(DialogIdMap);
+  };
+
 
   // Bottom half of constructor -- called when |preferences_| is initialized.
   void OnPreferencesInitialized();
@@ -163,7 +188,7 @@
   void InitializePermissions();
 
   // Saves state of |known_galleries_|, |new_galleries_| and
-  // |forgotten_gallery_ids_| to model.
+  // |forgotten_galleries_| to model.
   //
   // NOTE: possible states for a gallery:
   //   K   N   F   (K = Known, N = New, F = Forgotten)
@@ -184,10 +209,11 @@
   // Updates the model and view when a device is attached or detached.
   void UpdateGalleriesOnDeviceEvent(const std::string& device_id);
 
-  // Fill |permissions| with a sorted list of either attached or unattached
-  // gallery permissions.
-  void FillPermissions(bool attached,
-                       GalleryPermissionsVector* permissions) const;
+  // Return a sorted vector of either attached or unattached gallery
+  // permissions.
+  GalleryPermissionsVector FillPermissions(bool attached) const;
+
+  GalleryDialogId GetDialogId(MediaGalleryPrefId pref_id);
 
   Profile* GetProfile();
 
@@ -198,19 +224,22 @@
   // while the dialog is showing.
   const extensions::Extension* extension_;
 
+  // Mapping between pref ids and dialog ids.
+  DialogIdMap id_map_;
+
   // This map excludes those galleries which have been blacklisted; it only
   // counts active known galleries.
-  KnownGalleryPermissions known_galleries_;
+  GalleryPermissionsMap known_galleries_;
 
   // Galleries in |known_galleries_| that the user have toggled.
-  MediaGalleryPrefIdSet toggled_galleries_;
+  std::set<GalleryDialogId> toggled_galleries_;
 
   // Map of new galleries the user added, but have not saved. This list should
   // never overlap with |known_galleries_|.
-  GalleryPermissionsVector new_galleries_;
+  GalleryPermissionsMap new_galleries_;
 
   // Galleries in |known_galleries_| that the user has forgotten.
-  MediaGalleryPrefIdSet forgotten_gallery_ids_;
+  std::set<GalleryDialogId> forgotten_galleries_;
 
   // Callback to run when the dialog closes.
   base::Closure on_finish_;
diff --git a/chrome/browser/media_galleries/media_galleries_dialog_controller_mock.h b/chrome/browser/media_galleries/media_galleries_dialog_controller_mock.h
index 4d5b211..b903ae7 100644
--- a/chrome/browser/media_galleries/media_galleries_dialog_controller_mock.h
+++ b/chrome/browser/media_galleries/media_galleries_dialog_controller_mock.h
@@ -17,14 +17,14 @@
 
   MOCK_CONST_METHOD0(GetHeader, base::string16());
   MOCK_CONST_METHOD0(GetSubtext, base::string16());
-  MOCK_CONST_METHOD0(HasPermittedGalleries, bool());
+  MOCK_CONST_METHOD0(IsAcceptAllowed, bool());
   MOCK_CONST_METHOD0(AttachedPermissions, GalleryPermissionsVector());
   MOCK_CONST_METHOD0(UnattachedPermissions, GalleryPermissionsVector());
   MOCK_METHOD0(web_contents, content::WebContents*());
 
   MOCK_METHOD0(OnAddFolderClicked, void());
-  MOCK_METHOD2(DidToggleGalleryId, void(MediaGalleryPrefId pref_id,
-                                        bool enabled));
+  MOCK_METHOD2(DidToggleGallery, void(GalleryDialogId gallery_id,
+                                      bool enabled));
   MOCK_METHOD1(DialogFinished, void(bool));
 };
 
diff --git a/chrome/browser/media_galleries/media_galleries_dialog_controller_unittest.cc b/chrome/browser/media_galleries/media_galleries_dialog_controller_unittest.cc
index 9dfc9bb..9298087 100644
--- a/chrome/browser/media_galleries/media_galleries_dialog_controller_unittest.cc
+++ b/chrome/browser/media_galleries/media_galleries_dialog_controller_unittest.cc
@@ -142,6 +142,8 @@
     return gallery_prefs_.get();
   }
 
+  GalleryDialogId GetDialogIdFromPrefId(MediaGalleryPrefId pref_id);
+
   void TestForgottenType(MediaGalleryPrefInfo::Type type);
 
  protected:
@@ -197,6 +199,12 @@
   DISALLOW_COPY_AND_ASSIGN(MediaGalleriesDialogControllerTest);
 };
 
+GalleryDialogId
+MediaGalleriesDialogControllerTest::GetDialogIdFromPrefId(
+    MediaGalleryPrefId pref_id) {
+  return controller_->GetDialogId(pref_id);
+}
+
 void MediaGalleriesDialogControllerTest::TestForgottenType(
     MediaGalleryPrefInfo::Type type) {
   EXPECT_EQ(0U, gallery_prefs()->GalleriesForExtension(*extension()).size());
@@ -210,14 +218,14 @@
   EXPECT_EQ(mock_gallery_locations_.num_galleries() + 2U,
             controller()->AttachedPermissions().size());
   EXPECT_EQ(0U, controller()->UnattachedPermissions().size());
-  controller()->DidToggleGalleryId(forgotten1, true);
-  controller()->DidToggleGalleryId(forgotten2, true);
+  controller()->DidToggleGallery(GetDialogIdFromPrefId(forgotten1), true);
+  controller()->DidToggleGallery(GetDialogIdFromPrefId(forgotten2), true);
   controller()->DialogFinished(true);
   EXPECT_EQ(2U, gallery_prefs()->GalleriesForExtension(*extension()).size());
 
   // Forget one and cancel to see that it's still there.
   StartDialog();
-  controller()->DidForgetGallery(forgotten1);
+  controller()->DidForgetGallery(GetDialogIdFromPrefId(forgotten1));
   EXPECT_EQ(mock_gallery_locations_.num_galleries() + 1U,
             controller()->AttachedPermissions().size());
   controller()->DialogFinished(false);
@@ -225,7 +233,7 @@
 
   // Forget one and confirm to see that it's gone.
   StartDialog();
-  controller()->DidForgetGallery(forgotten1);
+  controller()->DidForgetGallery(GetDialogIdFromPrefId(forgotten1));
   EXPECT_EQ(mock_gallery_locations_.num_galleries() + 1U,
             controller()->AttachedPermissions().size());
   controller()->DialogFinished(true);
@@ -238,8 +246,8 @@
   EXPECT_EQ(mock_gallery_locations_.num_galleries() + 2U,
             controller()->AttachedPermissions().size());
   EXPECT_EQ(0U, controller()->UnattachedPermissions().size());
-  controller()->DidToggleGalleryId(forgotten3, true);
-  controller()->DidForgetGallery(forgotten3);
+  controller()->DidToggleGallery(GetDialogIdFromPrefId(forgotten3), true);
+  controller()->DidForgetGallery(GetDialogIdFromPrefId(forgotten3));
   EXPECT_EQ(mock_gallery_locations_.num_galleries() + 1U,
             controller()->AttachedPermissions().size());
   controller()->DialogFinished(true);
diff --git a/chrome/browser/media_galleries/media_scan_manager.cc b/chrome/browser/media_galleries/media_scan_manager.cc
index e880b98..b631a68 100644
--- a/chrome/browser/media_galleries/media_scan_manager.cc
+++ b/chrome/browser/media_galleries/media_scan_manager.cc
@@ -428,7 +428,8 @@
 
 void MediaScanManager::OnExtensionUnloaded(
     content::BrowserContext* browser_context,
-    const extensions::Extension* extension) {
+    const extensions::Extension* extension,
+    extensions::UnloadedExtensionInfo::Reason reason) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
   CancelScan(Profile::FromBrowserContext(browser_context), extension);
 }
diff --git a/chrome/browser/media_galleries/media_scan_manager.h b/chrome/browser/media_galleries/media_scan_manager.h
index 2441758..707bd0e 100644
--- a/chrome/browser/media_galleries/media_scan_manager.h
+++ b/chrome/browser/media_galleries/media_scan_manager.h
@@ -72,7 +72,8 @@
   // extensions::ExtensionRegistryObserver implementation.
   virtual void OnExtensionUnloaded(
       content::BrowserContext* browser_context,
-      const extensions::Extension* extension) OVERRIDE;
+      const extensions::Extension* extension,
+      extensions::UnloadedExtensionInfo::Reason reason) OVERRIDE;
 
   bool ScanInProgress() const;
 
diff --git a/chrome/browser/memory_details.cc b/chrome/browser/memory_details.cc
index 2976d65..ce72dc7 100644
--- a/chrome/browser/memory_details.cc
+++ b/chrome/browser/memory_details.cc
@@ -59,8 +59,6 @@
       return "Devtools";
     case RENDERER_INTERSTITIAL:
       return "Interstitial";
-    case RENDERER_NOTIFICATION:
-      return "Notification";
     case RENDERER_BACKGROUND_APP:
       return "Background App";
     case RENDERER_UNKNOWN:
@@ -303,13 +301,6 @@
         continue;
       }
 
-      if (type == extensions::VIEW_TYPE_NOTIFICATION) {
-        process.titles.push_back(base::UTF8ToUTF16(url.spec()));
-        process.renderer_type =
-            ProcessMemoryInformation::RENDERER_NOTIFICATION;
-        continue;
-      }
-
       // Since we have a WebContents and and the renderer type hasn't been
       // set yet, it must be a normal tabbed renderer.
       if (process.renderer_type == ProcessMemoryInformation::RENDERER_UNKNOWN)
@@ -461,8 +452,6 @@
         continue;
     }
   }
-  UMA_HISTOGRAM_MEMORY_KB("Memory.BackingStore",
-                          RenderWidgetHost::BackingStoreMemorySize() / 1024);
 #if defined(OS_CHROMEOS)
   // Chrome OS exposes system-wide graphics driver memory which has historically
   // been a source of leak/bloat.
diff --git a/chrome/browser/memory_details.h b/chrome/browser/memory_details.h
index 07984b5..5dd9bdd 100644
--- a/chrome/browser/memory_details.h
+++ b/chrome/browser/memory_details.h
@@ -26,7 +26,6 @@
     RENDERER_EXTENSION,     // chrome-extension://
     RENDERER_DEVTOOLS,      // Web inspector
     RENDERER_INTERSTITIAL,  // malware/phishing interstitial
-    RENDERER_NOTIFICATION,  // HTML notification bubble
     RENDERER_BACKGROUND_APP // hosted app background page
   };
 
diff --git a/chrome/browser/metrics/thread_watcher.cc b/chrome/browser/metrics/thread_watcher.cc
index e3c9dfa..ab80a86 100644
--- a/chrome/browser/metrics/thread_watcher.cc
+++ b/chrome/browser/metrics/thread_watcher.cc
@@ -576,11 +576,18 @@
     return;
   }
 
+  const char* kFieldTrialName = "ThreadWatcher";
+
+  // Nothing else to be done if the trial has already been set (i.e., when
+  // StartWatchingAll() has been already called once).
+  if (base::FieldTrialList::TrialExists(kFieldTrialName))
+    return;
+
   // Set up a field trial for 100% of the users to crash if either UI or IO
   // thread is not responsive for 30 seconds (or 15 pings).
   scoped_refptr<base::FieldTrial> field_trial(
       base::FieldTrialList::FactoryGetFieldTrial(
-          "ThreadWatcher", 100, "default_hung_threads",
+          kFieldTrialName, 100, "default_hung_threads",
           2014, 10, 30, base::FieldTrial::SESSION_RANDOMIZED, NULL));
   int hung_thread_group = field_trial->AppendGroup("hung_thread", 100);
   if (field_trial->group() == hung_thread_group) {
diff --git a/chrome/browser/metro_utils/metro_chrome_win.cc b/chrome/browser/metro_utils/metro_chrome_win.cc
index 30aeca5..d4985a6 100644
--- a/chrome/browser/metro_utils/metro_chrome_win.cc
+++ b/chrome/browser/metro_utils/metro_chrome_win.cc
@@ -12,6 +12,7 @@
 #include "base/win/metro.h"
 #include "base/win/scoped_com_initializer.h"
 #include "base/win/scoped_comptr.h"
+#include "base/win/windows_version.h"
 #include "chrome/installer/util/browser_distribution.h"
 #include "chrome/installer/util/install_util.h"
 #include "chrome/installer/util/shell_util.h"
@@ -19,6 +20,10 @@
 namespace chrome {
 
 bool ActivateMetroChrome() {
+  // TODO(cpu): For Win7 we need to activate differently.
+  if (base::win::GetVersion() < base::win::VERSION_WIN8)
+    return true;
+
   base::FilePath chrome_exe;
   if (!PathService::Get(base::FILE_EXE, &chrome_exe)) {
     NOTREACHED() << "Failed to get chrome exe path";
diff --git a/chrome/browser/nacl_host/nacl_infobar_delegate.cc b/chrome/browser/nacl_host/nacl_infobar_delegate.cc
index 4c8b66f..e488865 100644
--- a/chrome/browser/nacl_host/nacl_infobar_delegate.cc
+++ b/chrome/browser/nacl_host/nacl_infobar_delegate.cc
@@ -4,8 +4,8 @@
 
 #include "chrome/browser/nacl_host/nacl_infobar_delegate.h"
 
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/render_view_host.h"
 #include "content/public/browser/web_contents.h"
 #include "grit/generated_resources.h"
diff --git a/chrome/browser/net/http_server_properties_manager.cc b/chrome/browser/net/http_server_properties_manager.cc
index 09e1c5a..f3d8d73 100644
--- a/chrome/browser/net/http_server_properties_manager.cc
+++ b/chrome/browser/net/http_server_properties_manager.cc
@@ -183,6 +183,20 @@
   ScheduleUpdatePrefsOnIO();
 }
 
+bool HttpServerPropertiesManager::WasAlternateProtocolRecentlyBroken(
+    const net::HostPortPair& server) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+  return http_server_properties_impl_->WasAlternateProtocolRecentlyBroken(
+      server);
+}
+
+void HttpServerPropertiesManager::ConfirmAlternateProtocol(
+    const net::HostPortPair& server) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+  http_server_properties_impl_->ConfirmAlternateProtocol(server);
+  ScheduleUpdatePrefsOnIO();
+}
+
 void HttpServerPropertiesManager::ClearAlternateProtocol(
     const net::HostPortPair& server) {
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
diff --git a/chrome/browser/net/http_server_properties_manager.h b/chrome/browser/net/http_server_properties_manager.h
index b886799..5a0b2a5 100644
--- a/chrome/browser/net/http_server_properties_manager.h
+++ b/chrome/browser/net/http_server_properties_manager.h
@@ -114,6 +114,14 @@
   virtual void SetBrokenAlternateProtocol(
       const net::HostPortPair& server) OVERRIDE;
 
+  // Returns true if Alternate-Protocol for |server| was recently BROKEN.
+  virtual bool WasAlternateProtocolRecentlyBroken(
+      const net::HostPortPair& server) OVERRIDE;
+
+  // Confirms that Alternate-Protocol for |server| is working.
+  virtual void ConfirmAlternateProtocol(
+      const net::HostPortPair& server) OVERRIDE;
+
   // Clears the Alternate-Protocol for |server|.
   virtual void ClearAlternateProtocol(const net::HostPortPair& server) OVERRIDE;
 
diff --git a/chrome/browser/net/net_error_tab_helper.cc b/chrome/browser/net/net_error_tab_helper.cc
index 7112321..5539703 100644
--- a/chrome/browser/net/net_error_tab_helper.cc
+++ b/chrome/browser/net/net_error_tab_helper.cc
@@ -5,6 +5,7 @@
 #include "chrome/browser/net/net_error_tab_helper.h"
 
 #include "base/bind.h"
+#include "base/logging.h"
 #include "base/prefs/pref_service.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/io_thread.h"
@@ -76,6 +77,21 @@
   testing_state_ = state;
 }
 
+void NetErrorTabHelper::DidStartNavigationToPendingEntry(
+    const GURL& url,
+    content::NavigationController::ReloadType reload_type) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+
+  if (!is_error_page_)
+    return;
+
+  // Only record reloads.
+  if (reload_type != content::NavigationController::NO_RELOAD) {
+    chrome_common_net::RecordEvent(
+        chrome_common_net::NETWORK_ERROR_PAGE_BROWSER_INITIATED_RELOAD);
+  }
+}
+
 void NetErrorTabHelper::DidStartProvisionalLoadForFrame(
     int64 frame_id,
     int64 parent_frame_id,
diff --git a/chrome/browser/net/net_error_tab_helper.h b/chrome/browser/net/net_error_tab_helper.h
index 90b0133..d703738 100644
--- a/chrome/browser/net/net_error_tab_helper.h
+++ b/chrome/browser/net/net_error_tab_helper.h
@@ -46,6 +46,10 @@
   }
 
   // content::WebContentsObserver implementation.
+  virtual void DidStartNavigationToPendingEntry(
+      const GURL& url,
+      content::NavigationController::ReloadType reload_type) OVERRIDE;
+
   virtual void DidStartProvisionalLoadForFrame(
       int64 frame_id,
       int64 parent_frame_id,
diff --git a/chrome/browser/net/proxy_service_factory.cc b/chrome/browser/net/proxy_service_factory.cc
index 5933f4a..2c4e9b7 100644
--- a/chrome/browser/net/proxy_service_factory.cc
+++ b/chrome/browser/net/proxy_service_factory.cc
@@ -26,10 +26,6 @@
 #include "chromeos/network/dhcp_proxy_script_fetcher_chromeos.h"
 #endif  // defined(OS_CHROMEOS)
 
-#if defined(OS_WIN)
-#include "win8/util/win8_util.h"
-#endif
-
 #if !defined(OS_IOS)
 #include "net/proxy/proxy_resolver_v8.h"
 #endif
diff --git a/chrome/browser/net/spdyproxy/data_reduction_proxy_settings_android.h b/chrome/browser/net/spdyproxy/data_reduction_proxy_settings_android.h
index 84cc758..4106192 100644
--- a/chrome/browser/net/spdyproxy/data_reduction_proxy_settings_android.h
+++ b/chrome/browser/net/spdyproxy/data_reduction_proxy_settings_android.h
@@ -5,8 +5,8 @@
 #ifndef CHROME_BROWSER_NET_SPDYPROXY_DATA_REDUCTION_PROXY_SETTINGS_ANDROID_H_
 #define CHROME_BROWSER_NET_SPDYPROXY_DATA_REDUCTION_PROXY_SETTINGS_ANDROID_H_
 
-#include "base/android/jni_helper.h"
 #include "base/android/jni_string.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/android/scoped_java_ref.h"
 #include "base/basictypes.h"
 #include "base/compiler_specific.h"
diff --git a/chrome/browser/net/ssl_config_service_manager_pref.cc b/chrome/browser/net/ssl_config_service_manager_pref.cc
index 36bc2aa..9c61f95 100644
--- a/chrome/browser/net/ssl_config_service_manager_pref.cc
+++ b/chrome/browser/net/ssl_config_service_manager_pref.cc
@@ -174,7 +174,6 @@
   BooleanPrefMember rev_checking_required_local_anchors_;
   StringPrefMember ssl_version_min_;
   StringPrefMember ssl_version_max_;
-  BooleanPrefMember channel_id_enabled_;
   BooleanPrefMember ssl_record_splitting_disabled_;
 
   // The cached list of disabled SSL cipher suites.
@@ -205,8 +204,6 @@
       prefs::kSSLVersionMin, local_state, local_state_callback);
   ssl_version_max_.Init(
       prefs::kSSLVersionMax, local_state, local_state_callback);
-  channel_id_enabled_.Init(
-      prefs::kEnableOriginBoundCerts, local_state, local_state_callback);
   ssl_record_splitting_disabled_.Init(
       prefs::kDisableSSLRecordSplitting, local_state, local_state_callback);
 
@@ -235,8 +232,6 @@
       SSLProtocolVersionToString(default_config.version_max);
   registry->RegisterStringPref(prefs::kSSLVersionMin, version_min_str);
   registry->RegisterStringPref(prefs::kSSLVersionMax, version_max_str);
-  registry->RegisterBooleanPref(prefs::kEnableOriginBoundCerts,
-                                default_config.channel_id_enabled);
   registry->RegisterBooleanPref(prefs::kDisableSSLRecordSplitting,
                                 !default_config.false_start_enabled);
   registry->RegisterListPref(prefs::kCipherSuiteBlacklist);
@@ -294,7 +289,6 @@
     config->version_max = std::min(supported_version_max, version_max);
   }
   config->disabled_cipher_suites = disabled_cipher_suites_;
-  config->channel_id_enabled = channel_id_enabled_.GetValue();
   // disabling False Start also happens to disable record splitting.
   config->false_start_enabled = !ssl_record_splitting_disabled_.GetValue();
 }
diff --git a/chrome/browser/net/ssl_config_service_manager_pref_unittest.cc b/chrome/browser/net/ssl_config_service_manager_pref_unittest.cc
index 8ffe95d..94ca963 100644
--- a/chrome/browser/net/ssl_config_service_manager_pref_unittest.cc
+++ b/chrome/browser/net/ssl_config_service_manager_pref_unittest.cc
@@ -34,15 +34,6 @@
         io_thread_(BrowserThread::IO, &message_loop_) {}
 
  protected:
-  bool IsChannelIdEnabled(SSLConfigService* config_service) {
-    // Pump the message loop to notify the SSLConfigServiceManagerPref that the
-    // preferences changed.
-    message_loop_.RunUntilIdle();
-    SSLConfig config;
-    config_service->GetSSLConfig(&config);
-    return config.channel_id_enabled;
-  }
-
   base::MessageLoop message_loop_;
   content::TestBrowserThread ui_thread_;
   content::TestBrowserThread io_thread_;
@@ -52,8 +43,6 @@
 TEST_F(SSLConfigServiceManagerPrefTest, ChannelIDWithoutUserPrefs) {
   TestingPrefServiceSimple local_state;
   SSLConfigServiceManager::RegisterPrefs(local_state.registry());
-  local_state.SetUserPref(prefs::kEnableOriginBoundCerts,
-                          base::Value::CreateBooleanValue(false));
 
   scoped_ptr<SSLConfigServiceManager> config_manager(
       SSLConfigServiceManager::CreateDefaultManager(&local_state));
@@ -63,14 +52,6 @@
 
   SSLConfig config;
   config_service->GetSSLConfig(&config);
-  EXPECT_FALSE(config.channel_id_enabled);
-
-  local_state.SetUserPref(prefs::kEnableOriginBoundCerts,
-                          base::Value::CreateBooleanValue(true));
-  // Pump the message loop to notify the SSLConfigServiceManagerPref that the
-  // preferences changed.
-  message_loop_.RunUntilIdle();
-  config_service->GetSSLConfig(&config);
   EXPECT_TRUE(config.channel_id_enabled);
 }
 
diff --git a/chrome/browser/notifications/desktop_notification_service.cc b/chrome/browser/notifications/desktop_notification_service.cc
index a52747d..ab0e004 100644
--- a/chrome/browser/notifications/desktop_notification_service.cc
+++ b/chrome/browser/notifications/desktop_notification_service.cc
@@ -4,6 +4,7 @@
 
 #include "chrome/browser/notifications/desktop_notification_service.h"
 
+#include "base/bind.h"
 #include "base/metrics/histogram.h"
 #include "base/prefs/scoped_user_pref_update.h"
 #include "base/strings/utf_string_conversions.h"
@@ -16,7 +17,6 @@
 #include "chrome/browser/extensions/api/notifications/notifications_api.h"
 #include "chrome/browser/extensions/extension_service.h"
 #include "chrome/browser/infobars/confirm_infobar_delegate.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/notifications/desktop_notification_service_factory.h"
 #include "chrome/browser/notifications/notification.h"
@@ -32,9 +32,12 @@
 #include "chrome/common/content_settings_pattern.h"
 #include "chrome/common/pref_names.h"
 #include "chrome/common/url_constants.h"
+#include "components/infobars/core/infobar.h"
 #include "components/user_prefs/pref_registry_syncable.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/notification_service.h"
+#include "content/public/browser/render_frame_host.h"
+#include "content/public/browser/render_process_host.h"
 #include "content/public/browser/render_view_host.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/common/show_desktop_notification_params.h"
@@ -55,11 +58,13 @@
 #include "ui/message_center/message_center_util.h"
 #include "ui/message_center/notifier_settings.h"
 
+using blink::WebTextDirection;
 using content::BrowserThread;
 using content::RenderViewHost;
 using content::WebContents;
 using message_center::NotifierId;
-using blink::WebTextDirection;
+
+namespace {
 
 const char kChromeNowExtensionID[] = "pafkbggdmjlpgkdkcbjmhmfcdpncadgh";
 
@@ -71,9 +76,7 @@
       DesktopNotificationService* notification_service,
       const GURL& origin,
       base::string16 display_name,
-      int process_id,
-      int route_id,
-      int callback_context);
+      const base::Closure& callback);
   virtual ~NotificationPermissionRequest();
 
   // PermissionBubbleDelegate:
@@ -98,11 +101,8 @@
   // origin_ for extensions.
   base::string16 display_name_;
 
-  // The callback information that tells us how to respond to javascript via
-  // the correct RenderView.
-  int process_id_;
-  int route_id_;
-  int callback_context_;
+  // The callback information that tells us how to respond to javascript.
+  base::Closure callback_;
 
   // Whether the user clicked one of the buttons.
   bool action_taken_;
@@ -114,15 +114,11 @@
     DesktopNotificationService* notification_service,
     const GURL& origin,
     base::string16 display_name,
-    int process_id,
-    int route_id,
-    int callback_context)
+    const base::Closure& callback)
     : notification_service_(notification_service),
       origin_(origin),
       display_name_(display_name),
-      process_id_(process_id),
-      route_id_(route_id),
-      callback_context_(callback_context),
+      callback_(callback),
       action_taken_(false) {}
 
 NotificationPermissionRequest::~NotificationPermissionRequest() {}
@@ -170,9 +166,7 @@
   if (!action_taken_)
     UMA_HISTOGRAM_COUNTS("NotificationPermissionRequest.Ignored", 1);
 
-  RenderViewHost* host = RenderViewHost::FromID(process_id_, route_id_);
-  if (host)
-    host->DesktopNotificationPermissionRequestDone(callback_context_);
+  callback_.Run();
 
   delete this;
 }
@@ -190,18 +184,14 @@
                      DesktopNotificationService* notification_service,
                      const GURL& origin,
                      const base::string16& display_name,
-                     int process_id,
-                     int route_id,
-                     int callback_context);
+                     const base::Closure& callback);
 
  private:
   NotificationPermissionInfoBarDelegate(
       DesktopNotificationService* notification_service,
       const GURL& origin,
       const base::string16& display_name,
-      int process_id,
-      int route_id,
-      int callback_context);
+      const base::Closure& callback);
   virtual ~NotificationPermissionInfoBarDelegate();
 
   // ConfirmInfoBarDelegate:
@@ -222,11 +212,8 @@
   // The notification service to be used.
   DesktopNotificationService* notification_service_;
 
-  // The callback information that tells us how to respond to javascript via
-  // the correct RenderView.
-  int process_id_;
-  int route_id_;
-  int callback_context_;
+  // The callback information that tells us how to respond to javascript.
+  base::Closure callback_;
 
   // Whether the user clicked one of the buttons.
   bool action_taken_;
@@ -240,30 +227,23 @@
     DesktopNotificationService* notification_service,
     const GURL& origin,
     const base::string16& display_name,
-    int process_id,
-    int route_id,
-    int callback_context) {
+    const base::Closure& callback) {
   infobar_service->AddInfoBar(ConfirmInfoBarDelegate::CreateInfoBar(
       scoped_ptr<ConfirmInfoBarDelegate>(
           new NotificationPermissionInfoBarDelegate(
-              notification_service, origin, display_name, process_id, route_id,
-              callback_context))));
+              notification_service, origin, display_name, callback))));
 }
 
 NotificationPermissionInfoBarDelegate::NotificationPermissionInfoBarDelegate(
     DesktopNotificationService* notification_service,
     const GURL& origin,
     const base::string16& display_name,
-    int process_id,
-    int route_id,
-    int callback_context)
+    const base::Closure& callback)
     : ConfirmInfoBarDelegate(),
       origin_(origin),
       display_name_(display_name),
       notification_service_(notification_service),
-      process_id_(process_id),
-      route_id_(route_id),
-      callback_context_(callback_context),
+      callback_(callback),
       action_taken_(false) {
 }
 
@@ -272,17 +252,15 @@
   if (!action_taken_)
     UMA_HISTOGRAM_COUNTS("NotificationPermissionRequest.Ignored", 1);
 
-  RenderViewHost* host = RenderViewHost::FromID(process_id_, route_id_);
-  if (host)
-    host->DesktopNotificationPermissionRequestDone(callback_context_);
+  callback_.Run();
 }
 
 int NotificationPermissionInfoBarDelegate::GetIconID() const {
   return IDR_INFOBAR_DESKTOP_NOTIFICATIONS;
 }
 
-InfoBarDelegate::Type
-    NotificationPermissionInfoBarDelegate::GetInfoBarType() const {
+infobars::InfoBarDelegate::Type
+NotificationPermissionInfoBarDelegate::GetInfoBarType() const {
   return PAGE_ACTION_TYPE;
 }
 
@@ -311,6 +289,12 @@
   return true;
 }
 
+void CancelNotification(const std::string& id) {
+  g_browser_process->notification_ui_manager()->CancelById(id);
+}
+
+}  // namespace
+
 
 // DesktopNotificationService -------------------------------------------------
 
@@ -514,71 +498,61 @@
 }
 
 void DesktopNotificationService::RequestPermission(
-    const GURL& origin, int process_id, int route_id, int callback_context,
-    WebContents* contents) {
+    const GURL& origin,
+    content::RenderFrameHost* render_frame_host,
+    const base::Closure& callback) {
   // If |origin| hasn't been seen before and the default content setting for
   // notifications is "ask", show an infobar.
   // The cache can only answer queries on the IO thread once it's initialized,
   // so don't ask the cache.
+  WebContents* web_contents = WebContents::FromRenderFrameHost(
+      render_frame_host);
   ContentSetting setting = GetContentSetting(origin);
   if (setting == CONTENT_SETTING_ASK) {
     if (PermissionBubbleManager::Enabled()) {
       PermissionBubbleManager* bubble_manager =
-          PermissionBubbleManager::FromWebContents(contents);
-      bubble_manager->AddRequest(new NotificationPermissionRequest(this,
-              origin, DisplayNameForOriginInProcessId(origin, process_id),
-              process_id, route_id, callback_context));
+          PermissionBubbleManager::FromWebContents(web_contents);
+      bubble_manager->AddRequest(new NotificationPermissionRequest(
+          this,
+          origin,
+          DisplayNameForOriginInProcessId(
+              origin, render_frame_host->GetProcess()->GetID()),
+          callback));
       return;
     }
 
     // Show an info bar requesting permission.
     InfoBarService* infobar_service =
-        InfoBarService::FromWebContents(contents);
+        InfoBarService::FromWebContents(web_contents);
     // |infobar_service| may be NULL, e.g., if this request originated in a
     // browser action popup, extension background page, or any HTML that runs
     // outside of a tab.
     if (infobar_service) {
       NotificationPermissionInfoBarDelegate::Create(
-          infobar_service, this,
-          origin, DisplayNameForOriginInProcessId(origin, process_id),
-          process_id, route_id, callback_context);
+          infobar_service, this, origin,
+          DisplayNameForOriginInProcessId(
+              origin, render_frame_host->GetProcess()->GetID()),
+          callback);
       return;
     }
   }
 
   // Notify renderer immediately.
-  RenderViewHost* host = RenderViewHost::FromID(process_id, route_id);
-  if (host)
-    host->DesktopNotificationPermissionRequestDone(callback_context);
+  callback.Run();
 }
 
-#if !defined(OS_WIN)
-void DesktopNotificationService::ShowNotification(
-    const Notification& notification) {
-  GetUIManager()->Add(notification, profile_);
-}
-
-bool DesktopNotificationService::CancelDesktopNotification(
-    int process_id, int route_id, int notification_id) {
-  scoped_refptr<NotificationObjectProxy> proxy(
-      new NotificationObjectProxy(process_id, route_id, notification_id,
-                                  false));
-  return GetUIManager()->CancelById(proxy->id());
-}
-#endif  // OS_WIN
-
-bool DesktopNotificationService::ShowDesktopNotification(
+void DesktopNotificationService::ShowDesktopNotification(
     const content::ShowDesktopNotificationHostMsgParams& params,
-    int process_id, int route_id, DesktopNotificationSource source) {
+    content::RenderFrameHost* render_frame_host,
+    content::DesktopNotificationDelegate* delegate,
+    base::Closure* cancel_callback) {
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
   const GURL& origin = params.origin;
   NotificationObjectProxy* proxy =
-      new NotificationObjectProxy(process_id, route_id,
-                                  params.notification_id,
-                                  source == WorkerNotification);
+      new NotificationObjectProxy(render_frame_host, delegate);
 
-  base::string16 display_source =
-      DisplayNameForOriginInProcessId(origin, process_id);
+  base::string16 display_source = DisplayNameForOriginInProcessId(
+      origin, render_frame_host->GetProcess()->GetID());
   Notification notification(origin, params.icon_url, params.title,
       params.body, params.direction, display_source, params.replace_id,
       proxy);
@@ -586,8 +560,9 @@
   // The webkit notification doesn't timeout.
   notification.set_never_timeout(true);
 
-  ShowNotification(notification);
-  return true;
+  GetUIManager()->Add(notification, profile_);
+  if (cancel_callback)
+    *cancel_callback = base::Bind(&CancelNotification, proxy->id());
 }
 
 base::string16 DesktopNotificationService::DisplayNameForOriginInProcessId(
@@ -759,8 +734,8 @@
   scoped_ptr<extensions::Event> event(new extensions::Event(
       extensions::api::notifications::OnPermissionLevelChanged::kEventName,
       args.Pass()));
-  extensions::ExtensionSystem::Get(profile_)->event_router()->
-      DispatchEventToExtension(notifier_id.id, event.Pass());
+  extensions::EventRouter::Get(profile_)
+      ->DispatchEventToExtension(notifier_id.id, event.Pass());
 
   // Tell the IO thread that this extension's permission for notifications
   // has changed.
diff --git a/chrome/browser/notifications/desktop_notification_service.h b/chrome/browser/notifications/desktop_notification_service.h
index 745200f..a79a30d 100644
--- a/chrome/browser/notifications/desktop_notification_service.h
+++ b/chrome/browser/notifications/desktop_notification_service.h
@@ -10,6 +10,7 @@
 #include <vector>
 
 #include "base/basictypes.h"
+#include "base/callback_forward.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/prefs/pref_member.h"
@@ -32,7 +33,8 @@
 class Profile;
 
 namespace content {
-class WebContents;
+class DesktopNotificationDelegate;
+class RenderFrameHost;
 struct ShowDesktopNotificationHostMsgParams;
 }
 
@@ -49,11 +51,6 @@
 class DesktopNotificationService : public KeyedService,
                                    public content::NotificationObserver {
  public:
-  enum DesktopNotificationSource {
-    PageNotification,
-    WorkerNotification
-  };
-
   // Register profile-specific prefs of notifications.
   static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* prefs);
 
@@ -61,31 +58,19 @@
                              NotificationUIManager* ui_manager);
   virtual ~DesktopNotificationService();
 
-  // Requests permission (using an info-bar) for a given origin.
-  // |callback_context| contains an opaque value to pass back to the
-  // requesting process when the info-bar finishes.
+  // Requests permission for a given origin. |callback| is run when the UI
+  // finishes.
   void RequestPermission(const GURL& origin,
-                         int process_id,
-                         int route_id,
-                         int callback_context,
-                         content::WebContents* tab);
+                         content::RenderFrameHost* render_frame_host,
+                         const base::Closure& callback);
 
-  // ShowNotification is called on the UI thread handling IPCs from a child
-  // process, identified by |process_id| and |route_id|.  |source| indicates
-  // whether the script is in a worker or page. |params| contains all the
-  // other parameters supplied by the worker or page.
-  bool ShowDesktopNotification(
+  // Show a desktop notification. If |cancel_callback| is non-null, it's set to
+  // a callback which can be used to cancel the notification.
+  void ShowDesktopNotification(
       const content::ShowDesktopNotificationHostMsgParams& params,
-      int process_id,
-      int route_id,
-      DesktopNotificationSource source);
-
-  // Cancels a notification.  If it has already been shown, it will be
-  // removed from the screen.  If it hasn't been shown yet, it won't be
-  // shown.
-  bool CancelDesktopNotification(int process_id,
-                                 int route_id,
-                                 int notification_id);
+      content::RenderFrameHost* render_frame_host,
+      content::DesktopNotificationDelegate* delegate,
+      base::Closure* cancel_callback);
 
   // Methods to setup and modify permission preferences.
   void GrantPermission(const GURL& origin);
@@ -148,9 +133,6 @@
   void ShowWelcomeNotificationIfNecessary(const Notification& notification);
 
  private:
-  // Takes a notification object and shows it in the UI.
-  void ShowNotification(const Notification& notification);
-
   // Returns a display name for an origin in the process id, to be used in
   // permission infobar or on the frame of the notification toast.  Different
   // from the origin itself when dealing with extensions.
diff --git a/chrome/browser/notifications/desktop_notification_service_win.cc b/chrome/browser/notifications/desktop_notification_service_win.cc
deleted file mode 100644
index cc41eb4..0000000
--- a/chrome/browser/notifications/desktop_notification_service_win.cc
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright (c) 2012 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 "chrome/browser/notifications/desktop_notification_service.h"
-
-#include "base/logging.h"
-#include "base/win/metro.h"
-#include "chrome/browser/notifications/notification.h"
-#include "chrome/browser/notifications/notification_object_proxy.h"
-#include "chrome/browser/notifications/notification_ui_manager.h"
-#include "chrome/browser/notifications/notification_ui_manager.h"
-#include "win8/util/win8_util.h"
-
-bool DesktopNotificationService::CancelDesktopNotification(
-    int process_id, int route_id, int notification_id) {
-  scoped_refptr<NotificationObjectProxy> proxy(
-      new NotificationObjectProxy(process_id, route_id, notification_id,
-                                  false));
-  if (win8::IsSingleWindowMetroMode()) {
-    base::win::MetroCancelNotification cancel_metro_notification =
-        reinterpret_cast<base::win::MetroCancelNotification>(GetProcAddress(
-            base::win::GetMetroModule(), "CancelNotification"));
-    DCHECK(cancel_metro_notification);
-    if (cancel_metro_notification(proxy->id().c_str()))
-      return true;
-  }
-  return GetUIManager()->CancelById(proxy->id());
-}
-
-void DesktopNotificationService::ShowNotification(
-    const Notification& notification) {
-  if (win8::IsSingleWindowMetroMode()) {
-    base::win::MetroNotification display_metro_notification =
-        reinterpret_cast<base::win::MetroNotification>(GetProcAddress(
-            base::win::GetMetroModule(), "DisplayNotification"));
-    DCHECK(display_metro_notification);
-    if (!notification.is_html()) {
-      display_metro_notification(notification.origin_url().spec().c_str(),
-                                 notification.content_url().spec().c_str(),
-                                 notification.title().c_str(),
-                                 notification.message().c_str(),
-                                 notification.display_source().c_str(),
-                                 notification.notification_id().c_str(),
-                                 NULL, NULL);
-      return;
-    } else {
-      NOTREACHED() << "We don't support HTML notifications in Windows 8 metro";
-    }
-  }
-  GetUIManager()->Add(notification, profile_);
-}
diff --git a/chrome/browser/notifications/extension_welcome_notification.cc b/chrome/browser/notifications/extension_welcome_notification.cc
index bc00c42..7790ffc 100644
--- a/chrome/browser/notifications/extension_welcome_notification.cc
+++ b/chrome/browser/notifications/extension_welcome_notification.cc
@@ -26,7 +26,7 @@
 #include "ui/message_center/notification_delegate.h"
 #include "ui/message_center/notification_types.h"
 
-const int ExtensionWelcomeNotification::kRequestedShowTimeDays = 1;
+const int ExtensionWelcomeNotification::kRequestedShowTimeDays = 14;
 
 namespace {
 
@@ -35,8 +35,12 @@
  public:
   NotificationCallbacks(
       Profile* profile,
+      const message_center::NotifierId notifier_id,
+      const std::string& welcome_notification_id,
       ExtensionWelcomeNotification::Delegate* delegate)
       : profile_(profile),
+        notifier_id_(notifier_id.type, notifier_id.id),
+        welcome_notification_id_(welcome_notification_id),
         delegate_(delegate) {
   }
 
@@ -56,13 +60,19 @@
 
   virtual void Click() OVERRIDE {}
   virtual void ButtonClick(int index) OVERRIDE {
-    DCHECK_EQ(index, 0);
-    OpenNotificationLearnMoreTab();
+    if (index == 0) {
+      OpenNotificationLearnMoreTab();
+    } else if (index == 1) {
+      DisableNotificationProvider();
+      Close(true);
+    } else {
+      NOTREACHED();
+    }
   }
 
  private:
   void MarkAsDismissed() {
-    profile_->GetPrefs()->SetBoolean(prefs::kWelcomeNotificationDismissed,
+    profile_->GetPrefs()->SetBoolean(prefs::kWelcomeNotificationDismissedLocal,
                                      true);
   }
 
@@ -76,10 +86,24 @@
     chrome::Navigate(&params);
   }
 
+  void DisableNotificationProvider() {
+    message_center::Notifier notifier(notifier_id_, base::string16(), true);
+    message_center::MessageCenter* message_center =
+        delegate_->GetMessageCenter();
+    message_center->DisableNotificationsByNotifier(notifier_id_);
+    message_center->RemoveNotification(welcome_notification_id_, true);
+    message_center->GetNotifierSettingsProvider()->SetNotifierEnabled(
+        notifier, false);
+  }
+
   virtual ~NotificationCallbacks() {}
 
   Profile* const profile_;
 
+  const message_center::NotifierId notifier_id_;
+
+  std::string welcome_notification_id_;
+
   // Weak ref owned by ExtensionWelcomeNotification.
   ExtensionWelcomeNotification::Delegate* const delegate_;
 
@@ -123,6 +147,9 @@
       base::Bind(
           &ExtensionWelcomeNotification::OnWelcomeNotificationDismissedChanged,
           base::Unretained(this)));
+  welcome_notification_dismissed_local_pref_.Init(
+      prefs::kWelcomeNotificationDismissedLocal,
+      profile_->GetPrefs());
 }
 
 // static
@@ -169,7 +196,7 @@
         PrefServiceSyncable::FromProfile(profile_);
     if (pref_service_syncable->IsSyncing()) {
       PrefService* const pref_service = profile_->GetPrefs();
-      if (!pref_service->GetBoolean(prefs::kWelcomeNotificationDismissed)) {
+      if (!UserHasDismissedWelcomeNotification()) {
         const PopUpRequest pop_up_request =
             pref_service->GetBoolean(
                 prefs::kWelcomeNotificationPreviouslyPoppedUp)
@@ -200,6 +227,9 @@
   prefs->RegisterBooleanPref(prefs::kWelcomeNotificationDismissed,
                              false,
                              user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
+  prefs->RegisterBooleanPref(prefs::kWelcomeNotificationDismissedLocal,
+                             false,
+                             user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
   prefs->RegisterBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp,
                              false,
                              user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
@@ -220,10 +250,15 @@
       l10n_util::GetStringUTF16(IDS_NOTIFICATION_WELCOME_BUTTON_LEARN_MORE));
   learn_more.icon = ui::ResourceBundle::GetSharedInstance().GetImageNamed(
       IDR_NOTIFICATION_WELCOME_LEARN_MORE);
+  message_center::ButtonInfo disable(
+      l10n_util::GetStringUTF16(IDS_NOTIFIER_WELCOME_BUTTON));
+  disable.icon = ui::ResourceBundle::GetSharedInstance().GetImageNamed(
+      IDR_NOTIFIER_BLOCK_BUTTON);
 
   message_center::RichNotificationData rich_notification_data;
   rich_notification_data.priority = 2;
   rich_notification_data.buttons.push_back(learn_more);
+  rich_notification_data.buttons.push_back(disable);
 
   if (welcome_notification_id_.empty())
     welcome_notification_id_ = base::GenerateGUID();
@@ -240,7 +275,9 @@
             display_source,
             notifier_id_,
             rich_notification_data,
-            new NotificationCallbacks(profile_, delegate_.get())));
+            new NotificationCallbacks(
+                profile_, notifier_id_, welcome_notification_id_,
+                delegate_.get())));
 
     if (pop_up_request == POP_UP_HIDDEN)
       message_center_notification->set_shown_as_popup(true);
@@ -258,11 +295,21 @@
   }
 }
 
+bool ExtensionWelcomeNotification::UserHasDismissedWelcomeNotification() const {
+  // This was previously a syncable preference; now it's per-machine.
+  // Only the local pref will be written moving forward, but check for both so
+  // users won't be double-toasted.
+  bool shown_synced = profile_->GetPrefs()->GetBoolean(
+      prefs::kWelcomeNotificationDismissed);
+  bool shown_local = profile_->GetPrefs()->GetBoolean(
+      prefs::kWelcomeNotificationDismissedLocal);
+  return (shown_synced || shown_local);
+}
+
 void ExtensionWelcomeNotification::OnWelcomeNotificationDismissedChanged() {
-  const bool welcome_notification_dismissed =
-      profile_->GetPrefs()->GetBoolean(prefs::kWelcomeNotificationDismissed);
-  if (welcome_notification_dismissed)
+  if (UserHasDismissedWelcomeNotification()) {
     HideWelcomeNotification();
+  }
 }
 
 void ExtensionWelcomeNotification::StartExpirationTimer() {
@@ -292,7 +339,8 @@
 
 void ExtensionWelcomeNotification::ExpireWelcomeNotification() {
   DCHECK(IsWelcomeNotificationExpired());
-  profile_->GetPrefs()->SetBoolean(prefs::kWelcomeNotificationDismissed, true);
+  profile_->GetPrefs()->SetBoolean(
+      prefs::kWelcomeNotificationDismissedLocal, true);
   HideWelcomeNotification();
 }
 
@@ -318,5 +366,3 @@
   return !expiration_timestamp.is_null() &&
          (expiration_timestamp <= delegate_->GetCurrentTime());
 }
-
-// C++ Readability Review Change Trigger
diff --git a/chrome/browser/notifications/extension_welcome_notification.h b/chrome/browser/notifications/extension_welcome_notification.h
index 607a7fd..65bdea0 100644
--- a/chrome/browser/notifications/extension_welcome_notification.h
+++ b/chrome/browser/notifications/extension_welcome_notification.h
@@ -103,6 +103,9 @@
   // Hides the welcome notification.
   void HideWelcomeNotification();
 
+  // Whether the notification has been dismissed.
+  bool UserHasDismissedWelcomeNotification() const;
+
   // Called when the Welcome Notification Dismissed pref has been changed.
   void OnWelcomeNotificationDismissedChanged();
 
@@ -127,6 +130,10 @@
   // Prefs listener for welcome_notification_dismissed.
   BooleanPrefMember welcome_notification_dismissed_pref_;
 
+  // Prefs listener for welcome_notification_dismissed_local.
+  // Dismissal flag migrated from a synced pref to a local one.
+  BooleanPrefMember welcome_notification_dismissed_local_pref_;
+
   // The notifier for the extension that we're listening for.
   message_center::NotifierId notifier_id_;
 
@@ -156,5 +163,3 @@
 };
 
 #endif  // CHROME_BROWSER_NOTIFICATIONS_EXTENSION_WELCOME_NOTIFICATION_H_
-
-// C++ Readability Review Change Trigger
diff --git a/chrome/browser/notifications/extension_welcome_notification_unittest.cc b/chrome/browser/notifications/extension_welcome_notification_unittest.cc
index 5f7788b..f3952cc 100644
--- a/chrome/browser/notifications/extension_welcome_notification_unittest.cc
+++ b/chrome/browser/notifications/extension_welcome_notification_unittest.cc
@@ -215,7 +215,7 @@
 
     virtual std::string id() const OVERRIDE { return id_; }
 
-    virtual content::RenderViewHost* GetRenderViewHost() const OVERRIDE {
+    virtual content::WebContents* GetWebContents() const OVERRIDE {
       return NULL;
     }
 
@@ -260,6 +260,7 @@
 TEST_F(ExtensionWelcomeNotificationTest, FirstRunShowRegularNotification) {
   StartPreferenceSyncing();
   EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissed));
+  EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal));
   EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp));
 
   ShowRegularNotification();
@@ -268,6 +269,7 @@
   EXPECT_EQ(message_center()->remove_notification_calls(), 0);
   EXPECT_EQ(message_center()->notifications_with_shown_as_popup(), 0);
   EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissed));
+  EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal));
   EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp));
 }
 
@@ -276,6 +278,7 @@
 TEST_F(ExtensionWelcomeNotificationTest, FirstRunChromeNowNotification) {
   StartPreferenceSyncing();
   EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissed));
+  EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal));
   EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp));
 
   ShowChromeNowNotification();
@@ -284,6 +287,7 @@
   EXPECT_EQ(message_center()->remove_notification_calls(), 0);
   EXPECT_EQ(message_center()->notifications_with_shown_as_popup(), 0);
   EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissed));
+  EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal));
   EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp));
 }
 
@@ -292,6 +296,7 @@
   StartPreferenceSyncing();
   SetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp, true);
   EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissed));
+  EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal));
   EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp));
 
   ShowChromeNowNotification();
@@ -300,15 +305,18 @@
   EXPECT_EQ(message_center()->remove_notification_calls(), 0);
   EXPECT_EQ(message_center()->notifications_with_shown_as_popup(), 1);
   EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissed));
+  EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal));
   EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp));
 }
 
-// Don't show a welcome notification if it was previously dismissed
+// Don't show a welcome notification if it was previously dismissed on another
+// machine that wrote the synced flag.
 TEST_F(ExtensionWelcomeNotificationTest,
        WelcomeNotificationPreviouslyDismissed) {
   StartPreferenceSyncing();
   SetBooleanPref(prefs::kWelcomeNotificationDismissed, true);
   EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationDismissed));
+  EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal));
   EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp));
 
   ShowChromeNowNotification();
@@ -317,6 +325,48 @@
   EXPECT_EQ(message_center()->remove_notification_calls(), 0);
   EXPECT_EQ(message_center()->notifications_with_shown_as_popup(), 0);
   EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationDismissed));
+  EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal));
+  EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp));
+}
+
+// Don't show a welcome notification if it was previously dismissed on this
+// machine.
+TEST_F(ExtensionWelcomeNotificationTest,
+       WelcomeNotificationPreviouslyDismissedLocal) {
+  StartPreferenceSyncing();
+  SetBooleanPref(prefs::kWelcomeNotificationDismissedLocal, true);
+  EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissed));
+  EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal));
+  EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp));
+
+  ShowChromeNowNotification();
+
+  EXPECT_EQ(message_center()->add_notification_calls(), 0);
+  EXPECT_EQ(message_center()->remove_notification_calls(), 0);
+  EXPECT_EQ(message_center()->notifications_with_shown_as_popup(), 0);
+  EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissed));
+  EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal));
+  EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp));
+}
+
+// Don't show a welcome notification if it was previously dismissed with the
+// local flag and synced flag. This case is possible but rare.
+TEST_F(ExtensionWelcomeNotificationTest,
+       WelcomeNotificationPreviouslyDismissedSyncedAndLocal) {
+  StartPreferenceSyncing();
+  SetBooleanPref(prefs::kWelcomeNotificationDismissed, true);
+  SetBooleanPref(prefs::kWelcomeNotificationDismissedLocal, true);
+  EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationDismissed));
+  EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal));
+  EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp));
+
+  ShowChromeNowNotification();
+
+  EXPECT_EQ(message_center()->add_notification_calls(), 0);
+  EXPECT_EQ(message_center()->remove_notification_calls(), 0);
+  EXPECT_EQ(message_center()->notifications_with_shown_as_popup(), 0);
+  EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationDismissed));
+  EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal));
   EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp));
 }
 
@@ -325,6 +375,7 @@
 TEST_F(ExtensionWelcomeNotificationTest, DismissWelcomeNotification) {
   StartPreferenceSyncing();
   EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissed));
+  EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal));
   EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp));
 
   ShowChromeNowNotification();
@@ -334,7 +385,8 @@
   EXPECT_EQ(message_center()->add_notification_calls(), 1);
   EXPECT_EQ(message_center()->remove_notification_calls(), 1);
   EXPECT_EQ(message_center()->notifications_with_shown_as_popup(), 0);
-  EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationDismissed));
+  EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissed));
+  EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal));
   EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp));
 }
 
@@ -343,6 +395,7 @@
 TEST_F(ExtensionWelcomeNotificationTest, SyncedDismissalWelcomeNotification) {
   StartPreferenceSyncing();
   EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissed));
+  EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal));
   EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp));
 
   ShowChromeNowNotification();
@@ -352,6 +405,7 @@
   EXPECT_EQ(message_center()->remove_notification_calls(), 1);
   EXPECT_EQ(message_center()->notifications_with_shown_as_popup(), 0);
   EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationDismissed));
+  EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal));
   EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp));
 }
 
@@ -361,6 +415,7 @@
        DelayedPreferenceSyncPreviouslyDismissed) {
   // Show a notification while the preference system is not syncing.
   EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissed));
+  EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal));
   EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp));
 
   ShowChromeNowNotification();
@@ -369,11 +424,13 @@
   EXPECT_EQ(message_center()->remove_notification_calls(), 0);
   EXPECT_EQ(message_center()->notifications_with_shown_as_popup(), 0);
   EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissed));
+  EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal));
   EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp));
 
   // Now start the preference syncing with a previously dismissed welcome.
   SetBooleanPref(prefs::kWelcomeNotificationDismissed, true);
   EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationDismissed));
+  EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal));
   EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp));
 
   StartPreferenceSyncing();
@@ -382,6 +439,7 @@
   EXPECT_EQ(message_center()->remove_notification_calls(), 0);
   EXPECT_EQ(message_center()->notifications_with_shown_as_popup(), 0);
   EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationDismissed));
+  EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal));
   EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp));
 }
 
@@ -390,6 +448,7 @@
 TEST_F(ExtensionWelcomeNotificationTest, DelayedPreferenceSyncNeverShown) {
   // Show a notification while the preference system is not syncing.
   EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissed));
+  EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal));
   EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp));
 
   ShowChromeNowNotification();
@@ -398,10 +457,12 @@
   EXPECT_EQ(message_center()->remove_notification_calls(), 0);
   EXPECT_EQ(message_center()->notifications_with_shown_as_popup(), 0);
   EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissed));
+  EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal));
   EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp));
 
   // Now start the preference syncing with the default preference values.
   EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissed));
+  EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal));
   EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp));
 
   StartPreferenceSyncing();
@@ -410,6 +471,7 @@
   EXPECT_EQ(message_center()->remove_notification_calls(), 0);
   EXPECT_EQ(message_center()->notifications_with_shown_as_popup(), 0);
   EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissed));
+  EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal));
   EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp));
 }
 
@@ -418,6 +480,7 @@
 TEST_F(ExtensionWelcomeNotificationTest, TimeExpiredNotification) {
   StartPreferenceSyncing();
   EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissed));
+  EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal));
   EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp));
   EXPECT_EQ(GetInt64Pref(prefs::kWelcomeNotificationExpirationTimestamp), 0);
   EXPECT_TRUE(task_runner()->GetPendingTasks().empty());
@@ -435,6 +498,7 @@
   EXPECT_EQ(message_center()->remove_notification_calls(), 0);
   EXPECT_EQ(message_center()->notifications_with_shown_as_popup(), 0);
   EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissed));
+  EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal));
   EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp));
   EXPECT_EQ(
       GetInt64Pref(prefs::kWelcomeNotificationExpirationTimestamp),
@@ -447,7 +511,8 @@
   EXPECT_EQ(message_center()->add_notification_calls(), 1);
   EXPECT_EQ(message_center()->remove_notification_calls(), 1);
   EXPECT_EQ(message_center()->notifications_with_shown_as_popup(), 0);
-  EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationDismissed));
+  EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissed));
+  EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal));
   EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp));
   EXPECT_EQ(
       GetInt64Pref(prefs::kWelcomeNotificationExpirationTimestamp),
@@ -461,6 +526,7 @@
   SetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp, true);
   SetInt64Pref(prefs::kWelcomeNotificationExpirationTimestamp, 1);
   EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissed));
+  EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal));
   EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp));
   EXPECT_EQ(GetInt64Pref(prefs::kWelcomeNotificationExpirationTimestamp), 1);
   EXPECT_TRUE(task_runner()->GetPendingTasks().empty());
@@ -475,9 +541,8 @@
   EXPECT_EQ(message_center()->add_notification_calls(), 0);
   EXPECT_EQ(message_center()->remove_notification_calls(), 0);
   EXPECT_EQ(message_center()->notifications_with_shown_as_popup(), 0);
-  EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationDismissed));
+  EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissed));
+  EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal));
   EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp));
   EXPECT_EQ(GetInt64Pref(prefs::kWelcomeNotificationExpirationTimestamp), 1);
 }
-
-// C++ Readability Review Change Trigger
diff --git a/chrome/browser/notifications/message_center_notification_manager.cc b/chrome/browser/notifications/message_center_notification_manager.cc
index bfbac75..98eb386 100644
--- a/chrome/browser/notifications/message_center_notification_manager.cc
+++ b/chrome/browser/notifications/message_center_notification_manager.cc
@@ -367,14 +367,7 @@
   if (url.is_empty())
     return;
 
-  content::RenderViewHost* host = notification.GetRenderViewHost();
-  if (!host) {
-    LOG(WARNING) << "Notification needs an image but has no RenderViewHost";
-    return;
-  }
-
-  content::WebContents* contents =
-      content::WebContents::FromRenderViewHost(host);
+  content::WebContents* contents = notification.GetWebContents();
   if (!contents) {
     LOG(WARNING) << "Notification needs an image but has no WebContents";
     return;
diff --git a/chrome/browser/notifications/message_center_notifications_browsertest.cc b/chrome/browser/notifications/message_center_notifications_browsertest.cc
index ae50396..ca04dd9 100644
--- a/chrome/browser/notifications/message_center_notifications_browsertest.cc
+++ b/chrome/browser/notifications/message_center_notifications_browsertest.cc
@@ -89,7 +89,7 @@
       log_ += base::IntToString(button_index) + "_";
     }
     virtual std::string id() const OVERRIDE { return id_; }
-    virtual content::RenderViewHost* GetRenderViewHost() const OVERRIDE {
+    virtual content::WebContents* GetWebContents() const OVERRIDE {
       return NULL;
     }
 
diff --git a/chrome/browser/notifications/message_center_notifications_unittest_win.cc b/chrome/browser/notifications/message_center_notifications_unittest_win.cc
index 245f4e8..86b19ed 100644
--- a/chrome/browser/notifications/message_center_notifications_unittest_win.cc
+++ b/chrome/browser/notifications/message_center_notifications_unittest_win.cc
@@ -73,6 +73,9 @@
                           GURL(),
                           base::string16(),
                           base::string16(),
+                          blink::WebTextDirectionDefault,
+                          base::string16(),
+                          base::string16(),
                           new MockNotificationDelegate(id));
   }
 
diff --git a/chrome/browser/notifications/message_center_settings_controller.cc b/chrome/browser/notifications/message_center_settings_controller.cc
index de82030..9f1e26f 100644
--- a/chrome/browser/notifications/message_center_settings_controller.cc
+++ b/chrome/browser/notifications/message_center_settings_controller.cc
@@ -28,7 +28,7 @@
 #include "chrome/browser/profiles/profile_manager.h"
 #include "chrome/common/extensions/api/notifications.h"
 #include "chrome/common/extensions/extension_constants.h"
-#include "chrome/common/favicon/favicon_types.h"
+#include "components/favicon_base/favicon_types.h"
 #include "content/public/browser/notification_service.h"
 #include "content/public/browser/notification_source.h"
 #include "extensions/browser/event_router.h"
@@ -286,7 +286,7 @@
     patterns_[name] = iter->primary_pattern;
     FaviconService::FaviconForURLParams favicon_params(
         url,
-        chrome::FAVICON | chrome::TOUCH_ICON,
+        favicon_base::FAVICON | favicon_base::TOUCH_ICON,
         message_center::kSettingsIconSize);
     // Note that favicon service obtains the favicon from history. This means
     // that it will fail to obtain the image if there are no history data for
@@ -392,8 +392,7 @@
     return false;
   Profile* profile = notifier_groups_[current_notifier_group_]->profile();
 
-  extensions::EventRouter* event_router =
-      extensions::ExtensionSystem::Get(profile)->event_router();
+  extensions::EventRouter* event_router = extensions::EventRouter::Get(profile);
 
   return event_router->ExtensionHasEventListener(
       extension_id, extensions::api::notifications::OnShowSettings::kEventName);
@@ -413,8 +412,7 @@
     return;
   Profile* profile = notifier_groups_[current_notifier_group_]->profile();
 
-  extensions::EventRouter* event_router =
-      extensions::ExtensionSystem::Get(profile)->event_router();
+  extensions::EventRouter* event_router = extensions::EventRouter::Get(profile);
   scoped_ptr<base::ListValue> args(new base::ListValue());
 
   scoped_ptr<extensions::Event> event(new extensions::Event(
@@ -424,7 +422,7 @@
 
 void MessageCenterSettingsController::OnFaviconLoaded(
     const GURL& url,
-    const chrome::FaviconImageResult& favicon_result) {
+    const favicon_base::FaviconImageResult& favicon_result) {
   FOR_EACH_OBSERVER(message_center::NotifierSettingsObserver,
                     observers_,
                     UpdateIconImage(NotifierId(url), favicon_result.image));
diff --git a/chrome/browser/notifications/message_center_settings_controller.h b/chrome/browser/notifications/message_center_settings_controller.h
index 7f2bc19..e8135b4 100644
--- a/chrome/browser/notifications/message_center_settings_controller.h
+++ b/chrome/browser/notifications/message_center_settings_controller.h
@@ -15,6 +15,7 @@
 #include "base/observer_list.h"
 #include "chrome/browser/extensions/app_icon_loader.h"
 #include "chrome/common/content_settings.h"
+#include "components/favicon_base/favicon_types.h"
 #include "content/public/browser/notification_details.h"
 #include "content/public/browser/notification_observer.h"
 #include "content/public/browser/notification_registrar.h"
@@ -32,7 +33,7 @@
 class CancelableTaskTracker;
 }
 
-namespace chrome {
+namespace favicon_base {
 struct FaviconImageResult;
 }
 
@@ -93,7 +94,7 @@
                        const content::NotificationDetails& details) OVERRIDE;
 
   void OnFaviconLoaded(const GURL& url,
-                       const chrome::FaviconImageResult& favicon_result);
+                       const favicon_base::FaviconImageResult& favicon_result);
 
 #if defined(OS_CHROMEOS)
   // Sets up the notifier group for the guest session. This needs to be
diff --git a/chrome/browser/notifications/notification.cc b/chrome/browser/notifications/notification.cc
index d555353..f1b17bf 100644
--- a/chrome/browser/notifications/notification.cc
+++ b/chrome/browser/notifications/notification.cc
@@ -10,26 +10,6 @@
 #include "ui/message_center/message_center_util.h"
 
 Notification::Notification(const GURL& origin_url,
-                           const GURL& content_url,
-                           const base::string16& display_source,
-                           const base::string16& replace_id,
-                           NotificationDelegate* delegate)
-    : message_center::Notification(message_center::NOTIFICATION_TYPE_SIMPLE,
-                                   delegate->id(),
-                                   base::string16(),
-                                   base::string16(),
-                                   gfx::Image(),
-                                   display_source,
-                                   message_center::NotifierId(origin_url),
-                                   message_center::RichNotificationData(),
-                                   delegate),
-      origin_url_(origin_url),
-      is_html_(true),
-      content_url_(content_url),
-      replace_id_(replace_id),
-      delegate_(delegate) {}
-
-Notification::Notification(const GURL& origin_url,
                            const GURL& icon_url,
                            const base::string16& title,
                            const base::string16& body,
@@ -48,7 +28,6 @@
                                    delegate),
       origin_url_(origin_url),
       icon_url_(icon_url),
-      is_html_(false),
       replace_id_(replace_id),
       delegate_(delegate) {
   // "Upconvert" the string parameters to a data: URL.
@@ -78,7 +57,6 @@
                                    rich_notification_data,
                                    delegate),
       origin_url_(origin_url),
-      is_html_(false),
       replace_id_(replace_id),
       delegate_(delegate) {
   // It's important to leave |icon_url_| empty with rich notifications enabled,
@@ -103,7 +81,6 @@
                                    message_center::RichNotificationData(),
                                    delegate),
       origin_url_(origin_url),
-      is_html_(false),
       replace_id_(replace_id),
       delegate_(delegate) {}
 
@@ -111,7 +88,6 @@
     : message_center::Notification(notification),
       origin_url_(notification.origin_url()),
       icon_url_(notification.icon_url()),
-      is_html_(notification.is_html()),
       content_url_(notification.content_url()),
       button_one_icon_url_(notification.button_one_icon_url()),
       button_two_icon_url_(notification.button_two_icon_url()),
@@ -125,7 +101,6 @@
   message_center::Notification::operator=(notification);
   origin_url_ = notification.origin_url();
   icon_url_ = notification.icon_url();
-  is_html_ = notification.is_html();
   content_url_ = notification.content_url();
   button_one_icon_url_ = notification.button_one_icon_url();
   button_two_icon_url_ = notification.button_two_icon_url();
diff --git a/chrome/browser/notifications/notification.h b/chrome/browser/notifications/notification.h
index 70a0ac9..18997a6 100644
--- a/chrome/browser/notifications/notification.h
+++ b/chrome/browser/notifications/notification.h
@@ -24,13 +24,6 @@
 // formated text and icon data.
 class Notification : public message_center::Notification {
  public:
-  // Initializes a notification with HTML content.
-  Notification(const GURL& origin_url,
-               const GURL& content_url,
-               const base::string16& display_source,
-               const base::string16& replace_id,
-               NotificationDelegate* delegate);
-
   // Initializes a notification with text content. On non-ash platforms, this
   // creates an HTML representation using a data: URL for display.
   Notification(const GURL& origin_url,
@@ -70,9 +63,6 @@
   virtual ~Notification();
   Notification& operator=(const Notification& notification);
 
-  // If this is a HTML notification.
-  bool is_html() const { return is_html_; }
-
   // The URL (may be data:) containing the contents for the notification.
   const GURL& content_url() const { return content_url_; }
 
@@ -95,8 +85,8 @@
   std::string notification_id() const { return delegate()->id(); }
   int process_id() const { return delegate()->process_id(); }
 
-  content::RenderViewHost* GetRenderViewHost() const {
-    return delegate()->GetRenderViewHost();
+  content::WebContents* GetWebContents() const {
+    return delegate()->GetWebContents();
   }
   void DoneRendering() { delegate()->ReleaseRenderViewHost(); }
 
@@ -110,10 +100,6 @@
   // to have a non NULL RenderViewHost.
   GURL icon_url_;
 
-  // If this is a HTML notification, the content is in |content_url_|. If
-  // false, the data is in |title_| and |message_|.
-  bool is_html_;
-
   // The URL of the HTML content of the toast (may be a data: URL for simple
   // string-based notifications).
   GURL content_url_;
diff --git a/chrome/browser/notifications/notification_browsertest.cc b/chrome/browser/notifications/notification_browsertest.cc
index f3d20d2..a29a498 100644
--- a/chrome/browser/notifications/notification_browsertest.cc
+++ b/chrome/browser/notifications/notification_browsertest.cc
@@ -16,7 +16,6 @@
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/infobars/confirm_infobar_delegate.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/notifications/desktop_notification_service.h"
 #include "chrome/browser/notifications/desktop_notification_service_factory.h"
@@ -30,6 +29,7 @@
 #include "chrome/common/content_settings_pattern.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "chrome/test/base/ui_test_utils.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/notification_service.h"
 #include "content/public/browser/notification_source.h"
 #include "content/public/browser/notification_types.h"
@@ -290,8 +290,8 @@
     return false;
   }
 
-  InfoBar* infobar = infobar_service->infobar_at(infobar_index);
-  InfoBarDelegate* infobar_delegate = infobar->delegate();
+  infobars::InfoBar* infobar = infobar_service->infobar_at(infobar_index);
+  infobars::InfoBarDelegate* infobar_delegate = infobar->delegate();
   switch (action) {
     case DISMISS:
       infobar_delegate->InfoBarDismissed();
diff --git a/chrome/browser/notifications/notification_delegate.h b/chrome/browser/notifications/notification_delegate.h
index 6ba6171..3de3be6 100644
--- a/chrome/browser/notifications/notification_delegate.h
+++ b/chrome/browser/notifications/notification_delegate.h
@@ -11,7 +11,7 @@
 #include "ui/message_center/notification_delegate.h"
 
 namespace content {
-class RenderViewHost;
+class WebContents;
 }
 
 // Delegate for a notification. This class has two roles: to implement callback
@@ -25,8 +25,8 @@
   // Returns the id of renderer process which creates the notification, or -1.
   virtual int process_id() const;
 
-  // Returns the RenderViewHost that generated the notification, or NULL.
-  virtual content::RenderViewHost* GetRenderViewHost() const = 0;
+  // Returns the WebContents that generated the notification, or NULL.
+  virtual content::WebContents* GetWebContents() const = 0;
 
   // Lets the delegate know that no more rendering will be necessary.
   virtual void ReleaseRenderViewHost();
diff --git a/chrome/browser/notifications/notification_object_proxy.cc b/chrome/browser/notifications/notification_object_proxy.cc
index b8f2f06..af4524b 100644
--- a/chrome/browser/notifications/notification_object_proxy.cc
+++ b/chrome/browser/notifications/notification_object_proxy.cc
@@ -4,22 +4,21 @@
 
 #include "chrome/browser/notifications/notification_object_proxy.h"
 
+#include "base/guid.h"
 #include "base/strings/stringprintf.h"
-#include "content/public/browser/render_view_host.h"
+#include "content/public/browser/desktop_notification_delegate.h"
+#include "content/public/browser/render_frame_host.h"
+#include "content/public/browser/render_process_host.h"
+#include "content/public/browser/web_contents.h"
 
-using content::RenderViewHost;
-
-NotificationObjectProxy::NotificationObjectProxy(int process_id, int route_id,
-    int notification_id, bool worker)
-    : process_id_(process_id),
-      route_id_(route_id),
-      notification_id_(notification_id),
-      worker_(worker),
-      displayed_(false) {
-  if (worker_) {
-    // TODO(johnnyg): http://crbug.com/23065  Worker support coming soon.
-    NOTREACHED();
-  }
+NotificationObjectProxy::NotificationObjectProxy(
+    content::RenderFrameHost* render_frame_host,
+    content::DesktopNotificationDelegate* delegate)
+    : render_process_id_(render_frame_host->GetProcess()->GetID()),
+      render_frame_id_(render_frame_host->GetRoutingID()),
+      delegate_(delegate),
+      displayed_(false),
+      id_(base::GenerateGUID()) {
 }
 
 void NotificationObjectProxy::Display() {
@@ -29,38 +28,30 @@
     return;
   displayed_ = true;
 
-  RenderViewHost* host = RenderViewHost::FromID(process_id_, route_id_);
-  if (host)
-    host->DesktopNotificationPostDisplay(notification_id_);
+  delegate_->NotificationDisplayed();
 }
 
 void NotificationObjectProxy::Error() {
-  RenderViewHost* host = RenderViewHost::FromID(process_id_, route_id_);
-  if (host)
-    host->DesktopNotificationPostError(notification_id_, base::string16());
+  delegate_->NotificationError();
 }
 
 void NotificationObjectProxy::Close(bool by_user) {
-  RenderViewHost* host = RenderViewHost::FromID(process_id_, route_id_);
-  if (host)
-    host->DesktopNotificationPostClose(notification_id_, by_user);
+  delegate_->NotificationClosed(by_user);
 }
 
 void NotificationObjectProxy::Click() {
-  RenderViewHost* host = RenderViewHost::FromID(process_id_, route_id_);
-  if (host)
-    host->DesktopNotificationPostClick(notification_id_);
+  delegate_->NotificationClick();
 }
 
 std::string NotificationObjectProxy::id() const {
-  return base::StringPrintf("%d:%d:%d:%d", process_id_, route_id_,
-                            notification_id_, worker_);
+  return id_;
 }
 
 int NotificationObjectProxy::process_id() const {
-  return process_id_;
+  return render_process_id_;
 }
 
-RenderViewHost* NotificationObjectProxy::GetRenderViewHost() const {
-  return RenderViewHost::FromID(process_id_, route_id_);
+content::WebContents* NotificationObjectProxy::GetWebContents() const {
+  return content::WebContents::FromRenderFrameHost(
+      content::RenderFrameHost::FromID(render_process_id_, render_frame_id_));
 }
diff --git a/chrome/browser/notifications/notification_object_proxy.h b/chrome/browser/notifications/notification_object_proxy.h
index ecd7460..9870ac1 100644
--- a/chrome/browser/notifications/notification_object_proxy.h
+++ b/chrome/browser/notifications/notification_object_proxy.h
@@ -9,6 +9,11 @@
 
 #include "chrome/browser/notifications/notification_delegate.h"
 
+namespace content {
+class DesktopNotificationDelegate;
+class RenderFrameHost;
+}
+
 // A NotificationObjectProxy stands in for the JavaScript Notification object
 // which corresponds to a notification toast on the desktop.  It can be signaled
 // when various events occur regarding the desktop notification, and the
@@ -17,8 +22,8 @@
     : public NotificationDelegate {
  public:
   // Creates a Proxy object with the necessary callback information.
-  NotificationObjectProxy(int process_id, int route_id,
-                          int notification_id, bool worker);
+  NotificationObjectProxy(content::RenderFrameHost* render_frame_host,
+                          content::DesktopNotificationDelegate* delegate);
 
   // NotificationDelegate implementation.
   virtual void Display() OVERRIDE;
@@ -27,7 +32,7 @@
   virtual void Click() OVERRIDE;
   virtual std::string id() const OVERRIDE;
   virtual int process_id() const OVERRIDE;
-  virtual content::RenderViewHost* GetRenderViewHost() const OVERRIDE;
+  virtual content::WebContents* GetWebContents() const OVERRIDE;
 
  protected:
   friend class base::RefCountedThreadSafe<NotificationObjectProxy>;
@@ -36,11 +41,11 @@
 
  private:
   // Callback information to find the JS Notification object where it lives.
-  int process_id_;
-  int route_id_;
-  int notification_id_;
-  bool worker_;
+  int render_process_id_;
+  int render_frame_id_;
+  content::DesktopNotificationDelegate* delegate_;
   bool displayed_;
+  std::string id_;
 };
 
 #endif  // CHROME_BROWSER_NOTIFICATIONS_NOTIFICATION_OBJECT_PROXY_H_
diff --git a/chrome/browser/notifications/notification_test_util.cc b/chrome/browser/notifications/notification_test_util.cc
index 83c3922..1d2b360 100644
--- a/chrome/browser/notifications/notification_test_util.cc
+++ b/chrome/browser/notifications/notification_test_util.cc
@@ -11,7 +11,7 @@
 
 std::string MockNotificationDelegate::id() const { return id_; }
 
-content::RenderViewHost* MockNotificationDelegate::GetRenderViewHost() const {
+content::WebContents* MockNotificationDelegate::GetWebContents() const {
   return NULL;
 }
 
@@ -20,6 +20,9 @@
                     GURL(),
                     base::string16(),
                     base::string16(),
+                    blink::WebTextDirectionDefault,
+                    base::string16(),
+                    base::string16(),
                     new MockNotificationDelegate("stub")),
       welcome_origin_(welcome_origin),
       welcomed_(false),
diff --git a/chrome/browser/notifications/notification_test_util.h b/chrome/browser/notifications/notification_test_util.h
index 033b2a4..d0e29b8 100644
--- a/chrome/browser/notifications/notification_test_util.h
+++ b/chrome/browser/notifications/notification_test_util.h
@@ -27,7 +27,7 @@
   virtual void Close(bool by_user) OVERRIDE {}
   virtual void Click() OVERRIDE {}
   virtual std::string id() const OVERRIDE;
-  virtual content::RenderViewHost* GetRenderViewHost() const OVERRIDE;
+  virtual content::WebContents* GetWebContents() const OVERRIDE;
 
  private:
   virtual ~MockNotificationDelegate();
@@ -72,7 +72,7 @@
   virtual std::string id() const OVERRIDE {
     return notification_id_;
   }
-  virtual content::RenderViewHost* GetRenderViewHost() const OVERRIDE {
+  virtual content::WebContents* GetWebContents() const OVERRIDE {
     return NULL;
   }
 
diff --git a/chrome/browser/notifications/sync_notifier/chrome_notifier_delegate.cc b/chrome/browser/notifications/sync_notifier/chrome_notifier_delegate.cc
index 9264339..1358b03 100644
--- a/chrome/browser/notifications/sync_notifier/chrome_notifier_delegate.cc
+++ b/chrome/browser/notifications/sync_notifier/chrome_notifier_delegate.cc
@@ -61,7 +61,7 @@
   return notification_id_;
 }
 
-content::RenderViewHost* ChromeNotifierDelegate::GetRenderViewHost() const {
+content::WebContents* ChromeNotifierDelegate::GetWebContents() const {
   return NULL;
 }
 
diff --git a/chrome/browser/notifications/sync_notifier/chrome_notifier_delegate.h b/chrome/browser/notifications/sync_notifier/chrome_notifier_delegate.h
index 1fa429a..cde30be 100644
--- a/chrome/browser/notifications/sync_notifier/chrome_notifier_delegate.h
+++ b/chrome/browser/notifications/sync_notifier/chrome_notifier_delegate.h
@@ -48,7 +48,7 @@
   virtual void ButtonClick(int button_index) OVERRIDE;
   virtual std::string id() const OVERRIDE;
 
-  virtual content::RenderViewHost* GetRenderViewHost() const OVERRIDE;
+  virtual content::WebContents* GetWebContents() const OVERRIDE;
 
   void CollectAction(SyncedNotificationActionType type);
 
diff --git a/chrome/browser/notifications/sync_notifier/synced_notification_app_info_service.cc b/chrome/browser/notifications/sync_notifier/synced_notification_app_info_service.cc
index 9facf21..0ffd842 100644
--- a/chrome/browser/notifications/sync_notifier/synced_notification_app_info_service.cc
+++ b/chrome/browser/notifications/sync_notifier/synced_notification_app_info_service.cc
@@ -161,17 +161,21 @@
   // Build a local app_info object from the sync data.
   scoped_ptr<SyncedNotificationAppInfo> incoming(
       CreateSyncedNotificationAppInfoFromProtobuf(app_info));
-  DCHECK(incoming.get());
+  if (incoming.get() == NULL) {
+    LOG(ERROR) << "Invalid Synced No5tification App Info protobuf";
+    return;
+  }
 
   // Process each incoming app_info protobuf.
-  const std::string& name = incoming->settings_display_name();
-  DCHECK_GT(name.length(), 0U);
-  if (name.length() == 0) {
+  std::string app_info_name = incoming->settings_display_name();
+  DCHECK_GT(app_info_name.length(), 0U);
+  if (app_info_name.length() == 0) {
     // If there is no unique id (name), there is nothing we can do.
     return;
   }
 
-  SyncedNotificationAppInfo* found = FindSyncedNotificationAppInfoByName(name);
+  SyncedNotificationAppInfo* found =
+      FindSyncedNotificationAppInfoByName(app_info_name);
 
   std::vector<std::string> old_app_ids;
   std::vector<std::string> new_app_ids;
@@ -187,7 +191,7 @@
     // Append to lists of added and removed types.
     old_app_ids = found->GetAppIdList();
     new_app_ids = incoming->GetAppIdList();
-    FreeSyncedNotificationAppInfoByName(name);
+    FreeSyncedNotificationAppInfoByName(app_info_name);
 
     // Set up for a set difference by sorting the lists.
     std::sort(old_app_ids.begin(), old_app_ids.end());
@@ -242,7 +246,9 @@
 
   // Check for mandatory fields in the sync_data object.
   std::string display_name;
-  if (server_app_info.has_settings_display_name()) {
+  if (server_app_info.has_app_name()) {
+    display_name = server_app_info.app_name();
+  } else if (server_app_info.has_settings_display_name()) {
     display_name = server_app_info.settings_display_name();
   }
 
diff --git a/chrome/browser/notifications/sync_notifier/welcome_delegate.cc b/chrome/browser/notifications/sync_notifier/welcome_delegate.cc
index 12076e4..ce0e97e 100644
--- a/chrome/browser/notifications/sync_notifier/welcome_delegate.cc
+++ b/chrome/browser/notifications/sync_notifier/welcome_delegate.cc
@@ -106,7 +106,7 @@
 
 std::string WelcomeDelegate::id() const { return notification_id_; }
 
-content::RenderViewHost* WelcomeDelegate::GetRenderViewHost() const {
+content::WebContents* WelcomeDelegate::GetWebContents() const {
   return NULL;
 }
 
diff --git a/chrome/browser/notifications/sync_notifier/welcome_delegate.h b/chrome/browser/notifications/sync_notifier/welcome_delegate.h
index c972954..0cd01c2 100644
--- a/chrome/browser/notifications/sync_notifier/welcome_delegate.h
+++ b/chrome/browser/notifications/sync_notifier/welcome_delegate.h
@@ -8,9 +8,6 @@
 #include "chrome/browser/notifications/notification_delegate.h"
 #include "ui/message_center/notifier_settings.h"
 
-namespace content {
-class RenderViewHost;
-}
 class Profile;
 
 namespace notifier {
@@ -32,7 +29,7 @@
   virtual void Click() OVERRIDE;
   virtual bool HasClickedListener() OVERRIDE;
   virtual void ButtonClick(int button_index) OVERRIDE;
-  virtual content::RenderViewHost* GetRenderViewHost() const OVERRIDE;
+  virtual content::WebContents* GetWebContents() const OVERRIDE;
   virtual std::string id() const OVERRIDE;
 
  private:
diff --git a/chrome/browser/omnibox/omnibox_field_trial.cc b/chrome/browser/omnibox/omnibox_field_trial.cc
index f686a21..3d0afe7 100644
--- a/chrome/browser/omnibox/omnibox_field_trial.cc
+++ b/chrome/browser/omnibox/omnibox_field_trial.cc
@@ -366,32 +366,6 @@
   }
 }
 
-OmniboxFieldTrial::UndemotableTopMatchTypes
-OmniboxFieldTrial::GetUndemotableTopTypes(
-    AutocompleteInput::PageClassification current_page_classification) {
-  UndemotableTopMatchTypes undemotable_types;
-  const std::string types_rule =
-      OmniboxFieldTrial::GetValueForRuleInContext(
-          kUndemotableTopTypeRule,
-          current_page_classification);
-  // The value of the UndemotableTopTypes rule is a comma-separated list of
-  // AutocompleteMatchType::Type enums represented as an integer. The
-  // DemoteByType rule does not apply to the top match if the type of the top
-  // match is in this list.
-  std::vector<std::string> types;
-  base::SplitString(types_rule, ',', &types);
-  for (std::vector<std::string>::const_iterator it = types.begin();
-       it != types.end(); ++it) {
-    // This is a best-effort conversion; we trust the hand-crafted parameters
-    // downloaded from the server to be perfect.  There's no need to handle
-    // errors smartly.
-    int t;
-    base::StringToInt(*it, &t);
-    undemotable_types.insert(static_cast<AutocompleteMatchType::Type>(t));
-  }
-  return undemotable_types;
-}
-
 void OmniboxFieldTrial::GetExperimentalHUPScoringParams(
     HUPScoringParams* scoring_params) {
   scoring_params->experimental_scoring_enabled = false;
@@ -444,13 +418,18 @@
       kHQPAllowMatchInSchemeRule) == "true";
 }
 
+bool OmniboxFieldTrial::BookmarksIndexURLsValue() {
+  return chrome_variations::GetVariationParamValue(
+      kBundledExperimentFieldTrialName,
+      kBookmarksIndexURLsRule) == "true";
+}
+
 const char OmniboxFieldTrial::kBundledExperimentFieldTrialName[] =
     "OmniboxBundledExperimentV1";
 const char OmniboxFieldTrial::kShortcutsScoringMaxRelevanceRule[] =
     "ShortcutsScoringMaxRelevance";
 const char OmniboxFieldTrial::kSearchHistoryRule[] = "SearchHistory";
 const char OmniboxFieldTrial::kDemoteByTypeRule[] = "DemoteByType";
-const char OmniboxFieldTrial::kUndemotableTopTypeRule[] = "UndemotableTopTypes";
 const char OmniboxFieldTrial::kHQPBookmarkValueRule[] =
     "HQPBookmarkValue";
 const char OmniboxFieldTrial::kHQPAllowMatchInTLDRule[] = "HQPAllowMatchInTLD";
@@ -458,6 +437,7 @@
     "HQPAllowMatchInScheme";
 const char OmniboxFieldTrial::kZeroSuggestRule[] = "ZeroSuggest";
 const char OmniboxFieldTrial::kZeroSuggestVariantRule[] = "ZeroSuggestVariant";
+const char OmniboxFieldTrial::kBookmarksIndexURLsRule[] = "BookmarksIndexURLs";
 
 const char OmniboxFieldTrial::kHUPNewScoringEnabledParam[] =
     "HUPExperimentalScoringEnabled";
diff --git a/chrome/browser/omnibox/omnibox_field_trial.h b/chrome/browser/omnibox/omnibox_field_trial.h
index 44db860..1b0a1c7 100644
--- a/chrome/browser/omnibox/omnibox_field_trial.h
+++ b/chrome/browser/omnibox/omnibox_field_trial.h
@@ -6,7 +6,6 @@
 #define CHROME_BROWSER_OMNIBOX_OMNIBOX_FIELD_TRIAL_H_
 
 #include <map>
-#include <set>
 #include <string>
 #include <vector>
 
@@ -91,9 +90,6 @@
   // given number.  Omitted types are assumed to have multipliers of 1.0.
   typedef std::map<AutocompleteMatchType::Type, float> DemotionMultipliers;
 
-  // A set of types that should not be demoted when they are the top match.
-  typedef std::set<AutocompleteMatchType::Type> UndemotableTopMatchTypes;
-
   // Creates the static field trial groups.
   // *** MUST NOT BE CALLED MORE THAN ONCE. ***
   static void ActivateStaticTrials();
@@ -226,11 +222,6 @@
       AutocompleteInput::PageClassification current_page_classification,
       DemotionMultipliers* demotions_by_type);
 
-  // Get the set of types that should not be demoted if they are the top
-  // match.
-  static UndemotableTopMatchTypes GetUndemotableTopTypes(
-      AutocompleteInput::PageClassification current_page_classification);
-
   // ---------------------------------------------------------
   // For the HistoryURL provider new scoring experiment that is part of the
   // bundled omnibox field trial.
@@ -268,19 +259,30 @@
   static bool HQPAllowMatchInSchemeValue();
 
   // ---------------------------------------------------------
+  // For the BookmarksIndexURLs experiment that's part of the
+  // bundled omnibox field trial.
+
+  // Returns true if BookmarkIndex should index the URL of bookmarks
+  // (not only the titles) and search for / mark matches in the URLs,
+  // and BookmarkProvider should score bookmarks based on both the
+  // matches in bookmark title and URL.  Returns false if the bookmarks
+  // index URLs experiment isn't active.
+  static bool BookmarksIndexURLsValue();
+
+  // ---------------------------------------------------------
   // Exposed publicly for the sake of unittests.
   static const char kBundledExperimentFieldTrialName[];
   // Rule names used by the bundled experiment.
   static const char kShortcutsScoringMaxRelevanceRule[];
   static const char kSearchHistoryRule[];
   static const char kDemoteByTypeRule[];
-  static const char kUndemotableTopTypeRule[];
   static const char kHQPBookmarkValueRule[];
   static const char kHQPDiscountFrecencyWhenFewVisitsRule[];
   static const char kHQPAllowMatchInTLDRule[];
   static const char kHQPAllowMatchInSchemeRule[];
   static const char kZeroSuggestRule[];
   static const char kZeroSuggestVariantRule[];
+  static const char kBookmarksIndexURLsRule[];
 
   // Parameter names used by the HUP new scoring experiments.
   static const char kHUPNewScoringEnabledParam[];
diff --git a/chrome/browser/omnibox/omnibox_field_trial_unittest.cc b/chrome/browser/omnibox/omnibox_field_trial_unittest.cc
index d386d95..3af72ba 100644
--- a/chrome/browser/omnibox/omnibox_field_trial_unittest.cc
+++ b/chrome/browser/omnibox/omnibox_field_trial_unittest.cc
@@ -224,34 +224,6 @@
   VerifyDemotion(demotions_by_type, AutocompleteMatchType::HISTORY_URL, 0.25);
 }
 
-TEST_F(OmniboxFieldTrialTest, GetUndemotableTopTypes) {
-  {
-    std::map<std::string, std::string> params;
-    const std::string rule(OmniboxFieldTrial::kUndemotableTopTypeRule);
-    params[rule + ":1:*"] = "1,3";
-    params[rule + ":3:*"] = "5";
-    params[rule + ":*:*"] = "2";
-    ASSERT_TRUE(chrome_variations::AssociateVariationParams(
-        OmniboxFieldTrial::kBundledExperimentFieldTrialName, "A", params));
-  }
-  base::FieldTrialList::CreateFieldTrial(
-      OmniboxFieldTrial::kBundledExperimentFieldTrialName, "A");
-  OmniboxFieldTrial::UndemotableTopMatchTypes undemotable_types;
-  undemotable_types = OmniboxFieldTrial::GetUndemotableTopTypes(
-      AutocompleteInput::NTP);
-  ASSERT_EQ(2u, undemotable_types.size());
-  ASSERT_EQ(1u, undemotable_types.count(AutocompleteMatchType::HISTORY_URL));
-  ASSERT_EQ(1u, undemotable_types.count(AutocompleteMatchType::HISTORY_BODY));
-  undemotable_types = OmniboxFieldTrial::GetUndemotableTopTypes(
-      AutocompleteInput::HOME_PAGE);
-  ASSERT_EQ(1u, undemotable_types.size());
-  ASSERT_EQ(1u, undemotable_types.count(AutocompleteMatchType::NAVSUGGEST));
-  undemotable_types = OmniboxFieldTrial::GetUndemotableTopTypes(
-      AutocompleteInput::BLANK);
-  ASSERT_EQ(1u, undemotable_types.size());
-  ASSERT_EQ(1u, undemotable_types.count(AutocompleteMatchType::HISTORY_TITLE));
-}
-
 TEST_F(OmniboxFieldTrialTest, GetValueForRuleInContext) {
   {
     std::map<std::string, std::string> params;
diff --git a/chrome/browser/password_manager/chrome_password_manager_client.cc b/chrome/browser/password_manager/chrome_password_manager_client.cc
index f1a73d2..ed72165 100644
--- a/chrome/browser/password_manager/chrome_password_manager_client.cc
+++ b/chrome/browser/password_manager/chrome_password_manager_client.cc
@@ -165,6 +165,7 @@
   // crbug.com/358998 for more details.
   if (sync_service &&
       sync_service->HasSyncSetupCompleted() &&
+      sync_service->sync_initialized() &&
       !sync_service->IsUsingSecondaryPassphrase()) {
     return sync_service->GetActiveDataTypes().Has(syncer::PASSWORDS);
   }
diff --git a/chrome/browser/password_manager/password_generation_interactive_uitest.cc b/chrome/browser/password_manager/password_generation_interactive_uitest.cc
index 064c288..d06fe19 100644
--- a/chrome/browser/password_manager/password_generation_interactive_uitest.cc
+++ b/chrome/browser/password_manager/password_generation_interactive_uitest.cc
@@ -138,10 +138,12 @@
 // Enabled on these platforms.
 #define MAYBE_PopupShownAndPasswordSelected PopupShownAndPasswordSelected
 #define MAYBE_PopupShownAndDismissed PopupShownAndDismissed
+#define MAYBE_PopupShownAndDismissedByScrolling PopupShownAndDismissedByScrolling
 #else
 // Popup not enabled for these platforms yet.
 #define MAYBE_PopupShownAndPasswordSelected DISABLED_PopupShownAndPasswordSelected
 #define MAYBE_PopupShownAndDismissed DISABLED_PopupShownAndDismissed
+#define MAYBE_PopupShownAndDismissedByScrolling DISABLED_PopupShownAndDismissedByScrolling
 #endif
 
 IN_PROC_BROWSER_TEST_F(PasswordGenerationInteractiveTest,
@@ -173,3 +175,14 @@
   // Popup is dismissed.
   EXPECT_FALSE(GenerationPopupShowing());
 }
+
+IN_PROC_BROWSER_TEST_F(PasswordGenerationInteractiveTest,
+                       MAYBE_PopupShownAndDismissedByScrolling) {
+  FocusPasswordField();
+  EXPECT_TRUE(GenerationPopupShowing());
+
+  ASSERT_TRUE(content::ExecuteScript(GetRenderViewHost(),
+                                     "window.scrollTo(100, 0);"));
+
+  EXPECT_FALSE(GenerationPopupShowing());
+}
diff --git a/chrome/browser/password_manager/password_manager_browsertest.cc b/chrome/browser/password_manager/password_manager_browsertest.cc
index 435a43f..79aacd5 100644
--- a/chrome/browser/password_manager/password_manager_browsertest.cc
+++ b/chrome/browser/password_manager/password_manager_browsertest.cc
@@ -9,7 +9,6 @@
 #include "base/metrics/statistics_recorder.h"
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/infobars/confirm_infobar_delegate.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/password_manager/password_store_factory.h"
 #include "chrome/browser/password_manager/test_password_store_service.h"
@@ -19,10 +18,9 @@
 #include "chrome/test/base/test_switches.h"
 #include "chrome/test/base/ui_test_utils.h"
 #include "components/autofill/core/browser/autofill_test_utils.h"
+#include "components/infobars/core/infobar.h"
+#include "components/infobars/core/infobar_manager.h"
 #include "components/password_manager/core/browser/test_password_store.h"
-#include "content/public/browser/notification_observer.h"
-#include "content/public/browser/notification_registrar.h"
-#include "content/public/browser/notification_service.h"
 #include "content/public/browser/render_view_host.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/browser/web_contents_observer.h"
@@ -41,8 +39,8 @@
 
 // Observer that waits for navigation to complete and for the password infobar
 // to be shown.
-class NavigationObserver : public content::NotificationObserver,
-                           public content::WebContentsObserver {
+class NavigationObserver : public content::WebContentsObserver,
+                           public infobars::InfoBarManager::Observer {
  public:
   explicit NavigationObserver(content::WebContents* web_contents)
       : content::WebContentsObserver(web_contents),
@@ -51,15 +49,13 @@
         infobar_removed_(false),
         should_automatically_accept_infobar_(true),
         infobar_service_(InfoBarService::FromWebContents(web_contents)) {
-    registrar_.Add(this,
-                   chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_ADDED,
-                   content::Source<InfoBarService>(infobar_service_));
-    registrar_.Add(this,
-                   chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED,
-                   content::Source<InfoBarService>(infobar_service_));
+    infobar_service_->AddObserver(this);
   }
 
-  virtual ~NavigationObserver() {}
+  virtual ~NavigationObserver() {
+    if (infobar_service_)
+      infobar_service_->RemoveObserver(this);
+  }
 
   // Normally Wait() will not return until a main frame navigation occurs.
   // If a path is set, Wait() will return after this path has been seen,
@@ -68,27 +64,6 @@
     wait_for_path_ = path;
   }
 
-  // content::NotificationObserver:
-  virtual void Observe(int type,
-                       const content::NotificationSource& source,
-                       const content::NotificationDetails& details) OVERRIDE {
-    switch (type) {
-      case chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_ADDED:
-        if (should_automatically_accept_infobar_) {
-          infobar_service_->infobar_at(0)->delegate()->
-              AsConfirmInfoBarDelegate()->Accept();
-        }
-        infobar_shown_ = true;
-        return;
-      case chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED:
-        infobar_removed_ = true;
-        return;
-      default:
-        NOTREACHED();
-        return;
-    }
-  }
-
   // content::WebContentsObserver:
   virtual void DidFinishLoad(
       int64 frame_id,
@@ -115,6 +90,27 @@
   }
 
  private:
+  // infobars::InfoBarManager::Observer:
+  virtual void OnInfoBarAdded(infobars::InfoBar* infobar) OVERRIDE {
+    if (should_automatically_accept_infobar_) {
+      infobar_service_->infobar_at(0)->delegate()->
+          AsConfirmInfoBarDelegate()->Accept();
+    }
+    infobar_shown_ = true;
+  }
+
+  virtual void OnInfoBarRemoved(infobars::InfoBar* infobar,
+                                bool animate) OVERRIDE {
+    infobar_removed_ = true;
+  }
+
+  virtual void OnManagerShuttingDown(
+      infobars::InfoBarManager* manager) OVERRIDE {
+    ASSERT_EQ(infobar_service_, manager);
+    infobar_service_->RemoveObserver(this);
+    infobar_service_ = NULL;
+  }
+
   std::string wait_for_path_;
   scoped_refptr<content::MessageLoopRunner> message_loop_runner_;
   bool infobar_shown_;
@@ -122,7 +118,6 @@
   // If |should_automatically_accept_infobar_| is true, then whenever the test
   // sees an infobar added, it will click its accepting button. Default = true.
   bool should_automatically_accept_infobar_;
-  content::NotificationRegistrar registrar_;
   InfoBarService* infobar_service_;
 
   DISALLOW_COPY_AND_ASSIGN(NavigationObserver);
@@ -593,10 +588,8 @@
   // The only thing we check here is that there is no use-after-free reported.
 }
 
-// Disabled on Windows due to flakiness: http://crbug.com/163072
-// TODO(vabr): Also disabled on Android, because the tested feature is currently
-// disabled there. http://crbug.com/345510#c13
-#if defined(OS_WIN) || defined(OS_ANDROID)
+// Disabled on Windows due to flakiness: http://crbug.com/346297
+#if defined(OS_WIN)
 #define MAYBE_PasswordValueAccessible DISABLED_PasswordValueAccessible
 #else
 #define MAYBE_PasswordValueAccessible PasswordValueAccessible
diff --git a/chrome/browser/password_manager/save_password_infobar_delegate.cc b/chrome/browser/password_manager/save_password_infobar_delegate.cc
index 5b7ef25..de24a40 100644
--- a/chrome/browser/password_manager/save_password_infobar_delegate.cc
+++ b/chrome/browser/password_manager/save_password_infobar_delegate.cc
@@ -6,11 +6,11 @@
 
 #include "base/metrics/histogram.h"
 #include "base/strings/utf_string_conversions.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/ui/sync/one_click_signin_helper.h"
-#include "chrome/common/profile_management_switches.h"
+#include "components/infobars/core/infobar.h"
 #include "components/password_manager/core/browser/password_form_manager.h"
+#include "components/signin/core/common/profile_management_switches.h"
 #include "content/public/browser/navigation_entry.h"
 #include "content/public/browser/web_contents.h"
 #include "google_apis/gaia/gaia_urls.h"
@@ -103,7 +103,7 @@
 // chrome/browser/ui/android/infobars/save_password_infobar.cc
 
 // static
-scoped_ptr<InfoBar> SavePasswordInfoBarDelegate::CreateInfoBar(
+scoped_ptr<infobars::InfoBar> SavePasswordInfoBarDelegate::CreateInfoBar(
     scoped_ptr<SavePasswordInfoBarDelegate> delegate) {
   return ConfirmInfoBarDelegate::CreateInfoBar(
       delegate.PassAs<ConfirmInfoBarDelegate>());
@@ -112,14 +112,16 @@
 
 bool SavePasswordInfoBarDelegate::ShouldExpire(
     const NavigationDetails& details) const {
-  return !details.is_redirect && InfoBarDelegate::ShouldExpire(details);
+  return !details.is_redirect &&
+         infobars::InfoBarDelegate::ShouldExpire(details);
 }
 
 int SavePasswordInfoBarDelegate::GetIconID() const {
   return IDR_INFOBAR_SAVE_PASSWORD;
 }
 
-InfoBarDelegate::Type SavePasswordInfoBarDelegate::GetInfoBarType() const {
+infobars::InfoBarDelegate::Type SavePasswordInfoBarDelegate::GetInfoBarType()
+    const {
   return PAGE_ACTION_TYPE;
 }
 
@@ -152,7 +154,7 @@
   infobar_response_ = password_manager::metrics_util::INFOBAR_DISMISSED;
 }
 
-InfoBarDelegate::InfoBarAutomationType
-    SavePasswordInfoBarDelegate::GetInfoBarAutomationType() const {
+infobars::InfoBarDelegate::InfoBarAutomationType
+SavePasswordInfoBarDelegate::GetInfoBarAutomationType() const {
   return PASSWORD_INFOBAR;
 }
diff --git a/chrome/browser/password_manager/save_password_infobar_delegate.h b/chrome/browser/password_manager/save_password_infobar_delegate.h
index 775efaf..2359ebf 100644
--- a/chrome/browser/password_manager/save_password_infobar_delegate.h
+++ b/chrome/browser/password_manager/save_password_infobar_delegate.h
@@ -10,7 +10,7 @@
 #include "base/memory/scoped_ptr.h"
 #include "base/timer/elapsed_timer.h"
 #include "chrome/browser/infobars/confirm_infobar_delegate.h"
-#include "chrome/browser/infobars/infobar_delegate.h"
+#include "components/infobars/core/infobar_delegate.h"
 #include "components/password_manager/core/browser/password_form_manager.h"
 #include "components/password_manager/core/browser/password_manager_metrics_util.h"
 
@@ -49,7 +49,7 @@
       const std::string& uma_histogram_suffix);
 
   // Returns a save password infobar that owns |delegate|.
-  static scoped_ptr<InfoBar> CreateInfoBar(
+  static scoped_ptr<infobars::InfoBar> CreateInfoBar(
       scoped_ptr<SavePasswordInfoBarDelegate> delegate);
 
   // InfoBarDelegate
diff --git a/chrome/browser/pepper_broker_infobar_delegate.cc b/chrome/browser/pepper_broker_infobar_delegate.cc
index 9e2af35..4a0bcd4 100644
--- a/chrome/browser/pepper_broker_infobar_delegate.cc
+++ b/chrome/browser/pepper_broker_infobar_delegate.cc
@@ -7,12 +7,12 @@
 #include "base/prefs/pref_service.h"
 #include "chrome/browser/content_settings/host_content_settings_map.h"
 #include "chrome/browser/content_settings/tab_specific_content_settings.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/plugins/plugin_finder.h"
 #include "chrome/browser/plugins/plugin_metadata.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/common/pref_names.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/page_navigator.h"
 #include "content/public/browser/plugin_service.h"
 #include "content/public/browser/user_metrics.h"
diff --git a/chrome/browser/performance_monitor/performance_monitor_browsertest.cc b/chrome/browser/performance_monitor/performance_monitor_browsertest.cc
index 51d0133..61096ee 100644
--- a/chrome/browser/performance_monitor/performance_monitor_browsertest.cc
+++ b/chrome/browser/performance_monitor/performance_monitor_browsertest.cc
@@ -474,7 +474,7 @@
       chrome::NOTIFICATION_CRX_INSTALLER_DONE,
       content::Source<extensions::CrxInstaller>(crx_installer));
   ASSERT_TRUE(extension_service->
-      UpdateExtension(extension->id(), path_v2_, true, GURL(), &crx_installer));
+      UpdateExtension(extension->id(), path_v2_, true, &crx_installer));
   windowed_observer.Wait();
 
   extension = extension_service->GetExtensionById(
diff --git a/chrome/browser/platform_util_linux.cc b/chrome/browser/platform_util_linux.cc
index 27bb72b..f863baa 100644
--- a/chrome/browser/platform_util_linux.cc
+++ b/chrome/browser/platform_util_linux.cc
@@ -22,6 +22,7 @@
   argv.push_back(arg);
 
   base::LaunchOptions options;
+  options.allow_new_privs = true;
   // xdg-open can fall back on mailcap which eventually might plumb through
   // to a command that needs a terminal.  Set the environment variable telling
   // it that we definitely don't have a terminal available and that it should
diff --git a/chrome/browser/plugins/plugin_infobar_delegates.cc b/chrome/browser/plugins/plugin_infobar_delegates.cc
index 846c319..a73d0fc 100644
--- a/chrome/browser/plugins/plugin_infobar_delegates.cc
+++ b/chrome/browser/plugins/plugin_infobar_delegates.cc
@@ -9,7 +9,6 @@
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/content_settings/host_content_settings_map.h"
 #include "chrome/browser/google/google_util.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/lifetime/application_lifetime.h"
 #include "chrome/browser/plugins/chrome_plugin_service_filter.h"
@@ -18,6 +17,7 @@
 #include "chrome/browser/shell_integration.h"
 #include "chrome/browser/ui/browser_commands.h"
 #include "chrome/common/url_constants.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/render_process_host.h"
 #include "content/public/browser/render_view_host.h"
 #include "content/public/browser/user_metrics.h"
@@ -328,9 +328,8 @@
               name)))));
 }
 
-
 void PluginInstallerInfoBarDelegate::Replace(
-    InfoBar* infobar,
+    infobars::InfoBar* infobar,
     PluginInstaller* installer,
     scoped_ptr<PluginMetadata> plugin_metadata,
     bool new_install,
diff --git a/chrome/browser/plugins/plugin_infobar_delegates.h b/chrome/browser/plugins/plugin_infobar_delegates.h
index cde8235..731caa2 100644
--- a/chrome/browser/plugins/plugin_infobar_delegates.h
+++ b/chrome/browser/plugins/plugin_infobar_delegates.h
@@ -139,7 +139,7 @@
 
   // Replaces |infobar|, which must currently be owned, with an infobar asking
   // the user to install or update a particular plugin.
-  static void Replace(InfoBar* infobar,
+  static void Replace(infobars::InfoBar* infobar,
                       PluginInstaller* installer,
                       scoped_ptr<PluginMetadata> plugin_metadata,
                       bool new_install,
diff --git a/chrome/browser/plugins/plugin_installer.cc b/chrome/browser/plugins/plugin_installer.cc
index e9322a9..7c5ae85 100644
--- a/chrome/browser/plugins/plugin_installer.cc
+++ b/chrome/browser/plugins/plugin_installer.cc
@@ -8,66 +8,16 @@
 #include "base/bind_helpers.h"
 #include "base/process/process.h"
 #include "base/strings/stringprintf.h"
-#include "chrome/browser/download/download_service.h"
-#include "chrome/browser/download/download_service_factory.h"
 #include "chrome/browser/download/download_stats.h"
 #include "chrome/browser/platform_util.h"
 #include "chrome/browser/plugins/plugin_installer_observer.h"
-#include "chrome/browser/profiles/profile.h"
 #include "content/public/browser/browser_context.h"
-#include "content/public/browser/browser_thread.h"
 #include "content/public/browser/download_item.h"
-#include "content/public/browser/download_save_info.h"
+#include "content/public/browser/download_manager.h"
 #include "content/public/browser/download_url_parameters.h"
-#include "content/public/browser/render_process_host.h"
-#include "content/public/browser/render_view_host.h"
-#include "content/public/browser/resource_context.h"
-#include "content/public/browser/resource_dispatcher_host.h"
 #include "content/public/browser/web_contents.h"
-#include "content/public/common/referrer.h"
-#include "net/base/request_priority.h"
-#include "net/url_request/url_request.h"
-#include "net/url_request/url_request_context.h"
 
-using content::BrowserContext;
-using content::BrowserThread;
 using content::DownloadItem;
-using content::ResourceDispatcherHost;
-
-namespace {
-
-void BeginDownload(
-    const GURL& url,
-    content::ResourceContext* resource_context,
-    int render_process_host_id,
-    int render_view_host_routing_id,
-    const ResourceDispatcherHost::DownloadStartedCallback& callback) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
-
-  ResourceDispatcherHost* rdh = ResourceDispatcherHost::Get();
-  scoped_ptr<net::URLRequest> request(
-      resource_context->GetRequestContext()->CreateRequest(
-          url, net::DEFAULT_PRIORITY, NULL, NULL));
-  content::DownloadInterruptReason error = rdh->BeginDownload(
-      request.Pass(),
-      content::Referrer(),
-      false,  // is_content_initiated
-      resource_context,
-      render_process_host_id,
-      render_view_host_routing_id,
-      true,  // prefer_cache
-      scoped_ptr<content::DownloadSaveInfo>(new content::DownloadSaveInfo()),
-      content::DownloadItem::kInvalidId,
-      callback);
-
-  if (error != content::DOWNLOAD_INTERRUPT_REASON_NONE) {
-    BrowserThread::PostTask(
-        BrowserThread::UI, FROM_HERE,
-        base::Bind(callback, static_cast<DownloadItem*>(NULL), error));
-  }
-}
-
-}  // namespace
 
 PluginInstaller::PluginInstaller()
     : state_(INSTALLER_STATE_IDLE),
@@ -137,28 +87,33 @@
 
 void PluginInstaller::StartInstalling(const GURL& plugin_url,
                                       content::WebContents* web_contents) {
+  content::DownloadManager* download_manager =
+      content::BrowserContext::GetDownloadManager(
+          web_contents->GetBrowserContext());
+  StartInstallingWithDownloadManager(
+      plugin_url, web_contents, download_manager);
+}
+
+void PluginInstaller::StartInstallingWithDownloadManager(
+    const GURL& plugin_url,
+    content::WebContents* web_contents,
+    content::DownloadManager* download_manager) {
   DCHECK_EQ(INSTALLER_STATE_IDLE, state_);
   state_ = INSTALLER_STATE_DOWNLOADING;
   FOR_EACH_OBSERVER(PluginInstallerObserver, observers_, DownloadStarted());
-  Profile* profile =
-      Profile::FromBrowserContext(web_contents->GetBrowserContext());
+  scoped_ptr<content::DownloadUrlParameters> download_parameters(
+      content::DownloadUrlParameters::FromWebContents(web_contents,
+                                                      plugin_url));
+  download_parameters->set_callback(
+      base::Bind(&PluginInstaller::DownloadStarted, base::Unretained(this)));
   RecordDownloadSource(DOWNLOAD_INITIATED_BY_PLUGIN_INSTALLER);
-  BrowserThread::PostTask(
-      BrowserThread::IO, FROM_HERE,
-      base::Bind(&BeginDownload,
-                 plugin_url,
-                 profile->GetResourceContext(),
-                 web_contents->GetRenderProcessHost()->GetID(),
-                 web_contents->GetRenderViewHost()->GetRoutingID(),
-                 base::Bind(&PluginInstaller::DownloadStarted,
-                            base::Unretained(this))));
+  download_manager->DownloadUrl(download_parameters.Pass());
 }
 
 void PluginInstaller::DownloadStarted(
     content::DownloadItem* item,
     content::DownloadInterruptReason interrupt_reason) {
-  if (!item) {
-    DCHECK_NE(content::DOWNLOAD_INTERRUPT_REASON_NONE, interrupt_reason);
+  if (interrupt_reason != content::DOWNLOAD_INTERRUPT_REASON_NONE) {
     std::string msg = base::StringPrintf(
         "Error %d: %s",
         interrupt_reason,
@@ -166,7 +121,6 @@
     DownloadError(msg);
     return;
   }
-  DCHECK_EQ(content::DOWNLOAD_INTERRUPT_REASON_NONE, interrupt_reason);
   item->SetOpenWhenComplete(true);
   item->AddObserver(this);
 }
diff --git a/chrome/browser/plugins/plugin_installer.h b/chrome/browser/plugins/plugin_installer.h
index 6cd8659..81d3447 100644
--- a/chrome/browser/plugins/plugin_installer.h
+++ b/chrome/browser/plugins/plugin_installer.h
@@ -5,6 +5,7 @@
 #ifndef CHROME_BROWSER_PLUGINS_PLUGIN_INSTALLER_H_
 #define CHROME_BROWSER_PLUGINS_PLUGIN_INSTALLER_H_
 
+#include "base/gtest_prod_util.h"
 #include "base/observer_list.h"
 #include "base/strings/string16.h"
 #include "base/version.h"
@@ -17,6 +18,7 @@
 class WeakPluginInstallerObserver;
 
 namespace content {
+class DownloadManager;
 class WebContents;
 struct WebPluginInfo;
 }
@@ -52,6 +54,10 @@
                        content::WebContents* web_contents);
 
  private:
+  void StartInstallingWithDownloadManager(
+      const GURL& plugin_url,
+      content::WebContents* web_contents,
+      content::DownloadManager* download_manager);
   void DownloadStarted(content::DownloadItem* item,
                        content::DownloadInterruptReason interrupt_reason);
   void DownloadError(const std::string& msg);
@@ -62,6 +68,10 @@
   int strong_observer_count_;
   ObserverList<WeakPluginInstallerObserver> weak_observers_;
 
+  FRIEND_TEST_ALL_PREFIXES(PluginInstallerTest,
+                           StartInstalling_SuccessfulDownload);
+  FRIEND_TEST_ALL_PREFIXES(PluginInstallerTest, StartInstalling_FailedStart);
+  FRIEND_TEST_ALL_PREFIXES(PluginInstallerTest, StartInstalling_Interrupted);
   DISALLOW_COPY_AND_ASSIGN(PluginInstaller);
 };
 
diff --git a/chrome/browser/plugins/plugin_installer_unittest.cc b/chrome/browser/plugins/plugin_installer_unittest.cc
index ea450d8..cfd44d6 100644
--- a/chrome/browser/plugins/plugin_installer_unittest.cc
+++ b/chrome/browser/plugins/plugin_installer_unittest.cc
@@ -4,55 +4,203 @@
 
 #include "chrome/browser/plugins/plugin_installer.h"
 
-#include "base/strings/utf_string_conversions.h"
-#include "content/public/common/webplugininfo.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/run_loop.h"
+#include "chrome/browser/plugins/plugin_installer_observer.h"
+#include "chrome/test/base/chrome_render_view_host_test_harness.h"
+#include "content/public/browser/download_url_parameters.h"
+#include "content/public/test/mock_download_item.h"
+#include "content/public/test/mock_download_manager.h"
+#include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
+using ::testing::_;
+
 namespace {
 
-PluginInstaller::SecurityStatus GetSecurityStatus(PluginInstaller* installer,
-                                                  const char* version) {
-  content:: WebPluginInfo plugin(
-      base::ASCIIToUTF16("Foo plug-in"),
-      base::FilePath(FILE_PATH_LITERAL("/tmp/plugin.so")),
-      base::ASCIIToUTF16(version),
-      base::ASCIIToUTF16("Foo plug-in."));
-  return installer->GetSecurityStatus(plugin);
+class PluginInstallerTest : public ChromeRenderViewHostTestHarness {
+ public:
+  PluginInstallerTest();
+  virtual void SetUp() OVERRIDE;
+  virtual void TearDown() OVERRIDE;
+
+  PluginInstaller* installer() { return installer_.get(); }
+  content::DownloadItem::Observer* last_download_item_observer() {
+    return last_download_item_observer_;
+  }
+
+  scoped_ptr<content::MockDownloadItem> CreateMockDownloadItem();
+
+ private:
+  scoped_ptr<PluginInstaller> installer_;
+  content::DownloadItem::Observer* last_download_item_observer_;
+};
+
+PluginInstallerTest::PluginInstallerTest()
+    : last_download_item_observer_(NULL) {}
+
+void PluginInstallerTest::SetUp() {
+  content::RenderViewHostTestHarness::SetUp();
+  installer_.reset(new PluginInstaller());
 }
 
+void PluginInstallerTest::TearDown() {
+  installer_.reset();
+  content::RenderViewHostTestHarness::TearDown();
+}
+
+scoped_ptr<content::MockDownloadItem>
+PluginInstallerTest::CreateMockDownloadItem() {
+  scoped_ptr<content::MockDownloadItem> mock_download_item(
+      new testing::StrictMock<content::MockDownloadItem>());
+  ON_CALL(*mock_download_item, AddObserver(_))
+      .WillByDefault(testing::SaveArg<0>(&last_download_item_observer_));
+  ON_CALL(*mock_download_item, RemoveObserver(_)).WillByDefault(
+      testing::Assign(&last_download_item_observer_,
+                      static_cast<content::DownloadItem::Observer*>(NULL)));
+  ON_CALL(*mock_download_item, GetState())
+      .WillByDefault(testing::Return(content::DownloadItem::IN_PROGRESS));
+  return mock_download_item.Pass();
+}
+
+class TestPluginInstallerObserver : public PluginInstallerObserver {
+ public:
+  explicit TestPluginInstallerObserver(PluginInstaller* installer)
+      : PluginInstallerObserver(installer),
+        download_started_(false),
+        download_finished_(false),
+        download_cancelled_(false) {}
+
+  bool download_started() const { return download_started_; }
+  bool download_finished() const { return download_finished_; }
+  bool download_cancelled() const { return download_cancelled_; }
+  const std::string& download_error() const { return download_error_; }
+
+ private:
+  virtual void DownloadStarted() OVERRIDE { download_started_ = true; }
+  virtual void DownloadFinished() OVERRIDE { download_finished_ = true; }
+  virtual void DownloadError(const std::string& message) OVERRIDE {
+    download_error_ = message;
+  }
+  virtual void DownloadCancelled() OVERRIDE { download_cancelled_ = true; }
+
+  bool download_started_;
+  bool download_finished_;
+  std::string download_error_;
+  bool download_cancelled_;
+};
+
+// Action for invoking the OnStartedCallback of DownloadURLParameters object
+// which is assumed to be pointed to by arg0.
+ACTION_P2(InvokeOnStartedCallback, download_item, interrupt_reason) {
+  arg0->callback().Run(download_item, interrupt_reason);
+}
+
+ACTION_P(InvokeClosure, closure) {
+  closure.Run();
+}
+
+const char kTestUrl[] = "http://example.com/some-url";
+
 }  // namespace
 
-TEST(PluginInstallerTest, SecurityStatus) {
-  const PluginInstaller::SecurityStatus kUpToDate =
-      PluginInstaller::SECURITY_STATUS_UP_TO_DATE;
-  const PluginInstaller::SecurityStatus kOutOfDate =
-      PluginInstaller::SECURITY_STATUS_OUT_OF_DATE;
-  const PluginInstaller::SecurityStatus kRequiresAuthorization =
-      PluginInstaller::SECURITY_STATUS_REQUIRES_AUTHORIZATION;
+// Test that DownloadStarted()/DownloadFinished() notifications are sent to
+// observers when a download initiated by PluginInstaller completes
+// successfully.
+TEST_F(PluginInstallerTest, StartInstalling_SuccessfulDownload) {
+  content::MockDownloadManager mock_download_manager;
+  base::RunLoop run_loop;
+  scoped_ptr<content::MockDownloadItem> download_item(CreateMockDownloadItem());
 
-  PluginInstaller installer("claybrick-writer",
-                            base::ASCIIToUTF16("ClayBrick Writer"),
-                            true, GURL(), GURL(),
-                            base::ASCIIToUTF16("ClayBrick"));
+  EXPECT_CALL(mock_download_manager,
+              DownloadUrlMock(testing::Property(
+                  &content::DownloadUrlParameters::url, GURL(kTestUrl))))
+      .WillOnce(testing::DoAll(
+          InvokeOnStartedCallback(download_item.get(),
+                                  content::DOWNLOAD_INTERRUPT_REASON_NONE),
+          InvokeClosure(run_loop.QuitClosure())));
+  EXPECT_CALL(*download_item, AddObserver(_));
+  EXPECT_CALL(*download_item, SetOpenWhenComplete(_));
 
-#if defined(OS_LINUX)
-  EXPECT_EQ(kRequiresAuthorization, GetSecurityStatus(&installer, "1.2.3"));
-#else
-  EXPECT_EQ(kUpToDate, GetSecurityStatus(&installer, "1.2.3"));
-#endif
+  TestPluginInstallerObserver installer_observer(installer());
+  installer()->StartInstallingWithDownloadManager(
+      GURL(kTestUrl), web_contents(), &mock_download_manager);
+  run_loop.Run();
 
-  installer.AddVersion(Version("9.4.1"), kRequiresAuthorization);
-  installer.AddVersion(Version("10"), kOutOfDate);
-  installer.AddVersion(Version("10.2.1"), kUpToDate);
+  ASSERT_TRUE(last_download_item_observer());
+  EXPECT_TRUE(installer_observer.download_started());
+  EXPECT_FALSE(installer_observer.download_finished());
 
-  // Invalid version.
-  EXPECT_EQ(kOutOfDate, GetSecurityStatus(&installer, "foo"));
+  EXPECT_CALL(*download_item, GetState())
+      .WillOnce(testing::Return(content::DownloadItem::COMPLETE));
+  EXPECT_CALL(*download_item, RemoveObserver(_));
+  last_download_item_observer()->OnDownloadUpdated(download_item.get());
+  EXPECT_TRUE(installer_observer.download_finished());
+}
 
-  EXPECT_EQ(kOutOfDate, GetSecurityStatus(&installer, "0"));
-  EXPECT_EQ(kOutOfDate, GetSecurityStatus(&installer, "1.2.3"));
-  EXPECT_EQ(kRequiresAuthorization, GetSecurityStatus(&installer, "9.4.1"));
-  EXPECT_EQ(kRequiresAuthorization, GetSecurityStatus(&installer, "9.4.2"));
-  EXPECT_EQ(kOutOfDate, GetSecurityStatus(&installer, "10.2.0"));
-  EXPECT_EQ(kUpToDate, GetSecurityStatus(&installer, "10.2.1"));
-  EXPECT_EQ(kUpToDate, GetSecurityStatus(&installer, "11"));
+// Test that DownloadStarted()/DownloadError() notifications are sent to
+// observers when a download initiated by PluginInstaller fails to start.
+TEST_F(PluginInstallerTest, StartInstalling_FailedStart) {
+  content::MockDownloadManager mock_download_manager;
+  base::RunLoop run_loop;
+  scoped_ptr<content::MockDownloadItem> download_item(CreateMockDownloadItem());
+
+  EXPECT_CALL(mock_download_manager,
+              DownloadUrlMock(testing::Property(
+                  &content::DownloadUrlParameters::url, GURL(kTestUrl))))
+      .WillOnce(
+          testing::DoAll(InvokeOnStartedCallback(
+                             download_item.get(),
+                             content::DOWNLOAD_INTERRUPT_REASON_NETWORK_FAILED),
+                         InvokeClosure(run_loop.QuitClosure())));
+
+  TestPluginInstallerObserver installer_observer(installer());
+  installer()->StartInstallingWithDownloadManager(
+      GURL(kTestUrl), web_contents(), &mock_download_manager);
+  run_loop.Run();
+
+  EXPECT_FALSE(last_download_item_observer());
+  EXPECT_TRUE(installer_observer.download_started());
+  EXPECT_FALSE(installer_observer.download_finished());
+  EXPECT_EQ("Error 20: NETWORK_FAILED", installer_observer.download_error());
+}
+
+// Test that DownloadStarted()/DownloadError() notifications are sent to
+// observers when a download initiated by PluginInstaller starts successfully
+// but is interrupted later.
+TEST_F(PluginInstallerTest, StartInstalling_Interrupted) {
+  content::MockDownloadManager mock_download_manager;
+  base::RunLoop run_loop;
+  scoped_ptr<content::MockDownloadItem> download_item(CreateMockDownloadItem());
+
+  EXPECT_CALL(mock_download_manager,
+              DownloadUrlMock(testing::Property(
+                  &content::DownloadUrlParameters::url, GURL(kTestUrl))))
+      .WillOnce(testing::DoAll(
+          InvokeOnStartedCallback(download_item.get(),
+                                  content::DOWNLOAD_INTERRUPT_REASON_NONE),
+          InvokeClosure(run_loop.QuitClosure())));
+  EXPECT_CALL(*download_item, AddObserver(_));
+  EXPECT_CALL(*download_item, SetOpenWhenComplete(_));
+
+  TestPluginInstallerObserver installer_observer(installer());
+  installer()->StartInstallingWithDownloadManager(
+      GURL(kTestUrl), web_contents(), &mock_download_manager);
+  run_loop.Run();
+
+  ASSERT_TRUE(last_download_item_observer());
+  EXPECT_TRUE(installer_observer.download_started());
+  EXPECT_FALSE(installer_observer.download_finished());
+
+  EXPECT_CALL(*download_item, GetState())
+      .WillOnce(testing::Return(content::DownloadItem::INTERRUPTED));
+  EXPECT_CALL(*download_item, RemoveObserver(_));
+  EXPECT_CALL(*download_item, GetLastReason()).WillOnce(
+      testing::Return(content::DOWNLOAD_INTERRUPT_REASON_NETWORK_FAILED));
+  last_download_item_observer()->OnDownloadUpdated(download_item.get());
+
+  EXPECT_FALSE(last_download_item_observer());
+  EXPECT_TRUE(installer_observer.download_started());
+  EXPECT_FALSE(installer_observer.download_finished());
+  EXPECT_EQ("NETWORK_FAILED", installer_observer.download_error());
 }
diff --git a/chrome/browser/plugins/plugin_observer.cc b/chrome/browser/plugins/plugin_observer.cc
index 66b8612..c838046 100644
--- a/chrome/browser/plugins/plugin_observer.cc
+++ b/chrome/browser/plugins/plugin_observer.cc
@@ -13,7 +13,6 @@
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/content_settings/host_content_settings_map.h"
 #include "chrome/browser/infobars/confirm_infobar_delegate.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/infobars/simple_alert_infobar_delegate.h"
 #include "chrome/browser/lifetime/application_lifetime.h"
@@ -24,6 +23,7 @@
 #include "chrome/browser/ui/tab_modal_confirm_dialog.h"
 #include "chrome/common/render_messages.h"
 #include "chrome/common/url_constants.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/plugin_service.h"
 #include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/render_view_host.h"
diff --git a/chrome/browser/plugins/plugin_observer.h b/chrome/browser/plugins/plugin_observer.h
index b0f43b7..868eb3b 100644
--- a/chrome/browser/plugins/plugin_observer.h
+++ b/chrome/browser/plugins/plugin_observer.h
@@ -15,7 +15,6 @@
 #endif
 
 class GURL;
-class InfoBarDelegate;
 class PluginFinder;
 class PluginMetadata;
 
@@ -28,6 +27,10 @@
 class WebContents;
 }
 
+namespace infobars {
+class InfoBarDelegate;
+}
+
 class PluginObserver : public content::WebContentsObserver,
                        public content::WebContentsUserData<PluginObserver> {
  public:
diff --git a/chrome/browser/policy/cloud/cloud_policy_browsertest.cc b/chrome/browser/policy/cloud/cloud_policy_browsertest.cc
index b3446d3..8e2ca0c 100644
--- a/chrome/browser/policy/cloud/cloud_policy_browsertest.cc
+++ b/chrome/browser/policy/cloud/cloud_policy_browsertest.cc
@@ -121,6 +121,14 @@
                             key_version);
 }
 
+void GetExpectedDefaultPolicy(PolicyMap* policy_map) {
+#if defined(OS_CHROMEOS)
+  policy_map->Set(
+      key::kChromeOsMultiProfileUserBehavior, POLICY_LEVEL_MANDATORY,
+      POLICY_SCOPE_USER, base::Value::CreateStringValue("primary-only"), NULL);
+#endif
+}
+
 void GetExpectedTestPolicy(PolicyMap* expected, const char* homepage) {
   expected->Set(key::kShowHomeButton, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
                 base::Value::CreateBooleanValue(true), NULL);
@@ -138,6 +146,11 @@
   expected->Set(
       key::kHomepageLocation, POLICY_LEVEL_RECOMMENDED,
       POLICY_SCOPE_USER, base::Value::CreateStringValue(homepage), NULL);
+#if defined(OS_CHROMEOS)
+  expected->Set(
+      key::kChromeOsMultiProfileUserBehavior, POLICY_LEVEL_MANDATORY,
+      POLICY_SCOPE_USER, base::Value::CreateStringValue("primary-only"), NULL);
+#endif
 }
 
 }  // namespace
@@ -282,8 +295,9 @@
     run_loop.Run();
   }
 
-  PolicyMap empty;
-  EXPECT_TRUE(empty.Equals(policy_service->GetPolicies(
+  PolicyMap default_policy;
+  GetExpectedDefaultPolicy(&default_policy);
+  EXPECT_TRUE(default_policy.Equals(policy_service->GetPolicies(
       PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()))));
 
   ASSERT_NO_FATAL_FAILURE(SetServerPolicy(GetTestPolicy("google.com", 0)));
@@ -349,8 +363,9 @@
   std::string initial_key;
   ASSERT_TRUE(base::ReadFileToString(user_policy_key_file_, &initial_key));
 
-  PolicyMap empty;
-  EXPECT_TRUE(empty.Equals(policy_service->GetPolicies(
+  PolicyMap default_policy;
+  GetExpectedDefaultPolicy(&default_policy);
+  EXPECT_TRUE(default_policy.Equals(policy_service->GetPolicies(
       PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()))));
 
   // Set the new policies and a new key at the server.
diff --git a/chrome/browser/policy/configuration_policy_handler_list_factory.cc b/chrome/browser/policy/configuration_policy_handler_list_factory.cc
index 3328588..5d5d20b 100644
--- a/chrome/browser/policy/configuration_policy_handler_list_factory.cc
+++ b/chrome/browser/policy/configuration_policy_handler_list_factory.cc
@@ -203,9 +203,6 @@
   { key::kSigninAllowed,
     prefs::kSigninAllowed,
     base::Value::TYPE_BOOLEAN },
-  { key::kEnableOriginBoundCerts,
-    prefs::kEnableOriginBoundCerts,
-    base::Value::TYPE_BOOLEAN },
   { key::kDisableSSLRecordSplitting,
     prefs::kDisableSSLRecordSplitting,
     base::Value::TYPE_BOOLEAN },
diff --git a/chrome/browser/policy/policy_browsertest.cc b/chrome/browser/policy/policy_browsertest.cc
index e621aee..53bbac9 100644
--- a/chrome/browser/policy/policy_browsertest.cc
+++ b/chrome/browser/policy/policy_browsertest.cc
@@ -39,7 +39,6 @@
 #include "chrome/browser/extensions/unpacked_installer.h"
 #include "chrome/browser/extensions/updater/extension_cache_fake.h"
 #include "chrome/browser/extensions/updater/extension_updater.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/media/media_capture_devices_dispatcher.h"
 #include "chrome/browser/media/media_stream_devices_controller.h"
@@ -81,6 +80,7 @@
 #include "chrome/test/base/in_process_browser_test.h"
 #include "chrome/test/base/test_switches.h"
 #include "chrome/test/base/ui_test_utils.h"
+#include "components/infobars/core/infobar.h"
 #include "components/policy/core/browser/browser_policy_connector.h"
 #include "components/policy/core/common/external_data_fetcher.h"
 #include "components/policy/core/common/mock_configuration_policy_provider.h"
@@ -691,7 +691,7 @@
     scoped_refptr<extensions::UnpackedInstaller> installer =
         extensions::UnpackedInstaller::Create(extension_service());
     content::WindowedNotificationObserver observer(
-        expect_success ? chrome::NOTIFICATION_EXTENSION_LOADED
+        expect_success ? chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED
                        : chrome::NOTIFICATION_EXTENSION_LOAD_ERROR,
         content::NotificationService::AllSources());
     installer->Load(extension_path);
@@ -1645,7 +1645,7 @@
       chrome::NOTIFICATION_EXTENSION_PROCESS_TERMINATED,
       content::NotificationService::AllSources());
   content::WindowedNotificationObserver extension_loaded_observer(
-      chrome::NOTIFICATION_EXTENSION_LOADED,
+      chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
       content::NotificationService::AllSources());
   extensions::ExtensionHost* extension_host =
       extensions::ExtensionSystem::Get(browser()->profile())->
@@ -1910,7 +1910,7 @@
 
   // Verify that the translate infobar showed up.
   ASSERT_EQ(1u, infobar_service->infobar_count());
-  InfoBar* infobar = infobar_service->infobar_at(0);
+  infobars::InfoBar* infobar = infobar_service->infobar_at(0);
   TranslateInfoBarDelegate* translate_infobar_delegate =
       infobar->delegate()->AsTranslateInfoBarDelegate();
   ASSERT_TRUE(translate_infobar_delegate);
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc
index 7546955..fd2bd10 100644
--- a/chrome/browser/prefs/browser_prefs.cc
+++ b/chrome/browser/prefs/browser_prefs.cc
@@ -12,7 +12,6 @@
 #include "chrome/browser/accessibility/invert_bubble_prefs.h"
 #include "chrome/browser/apps/shortcut_manager.h"
 #include "chrome/browser/background/background_mode_manager.h"
-#include "chrome/browser/bookmarks/bookmark_prompt_prefs.h"
 #include "chrome/browser/bookmarks/bookmark_utils.h"
 #include "chrome/browser/browser_process_impl.h"
 #include "chrome/browser/browser_shutdown.h"
@@ -57,7 +56,6 @@
 #include "chrome/browser/prefs/incognito_mode_prefs.h"
 #include "chrome/browser/prefs/pref_service_syncable.h"
 #include "chrome/browser/prefs/session_startup_pref.h"
-#include "chrome/browser/printing/cloud_print/cloud_print_url.h"
 #include "chrome/browser/printing/print_dialog_cloud.h"
 #include "chrome/browser/profiles/chrome_version_service.h"
 #include "chrome/browser/profiles/profile.h"
@@ -93,6 +91,7 @@
 #include "chrome/common/metrics/caching_permuted_entropy_provider.h"
 #include "chrome/common/pref_names.h"
 #include "components/autofill/core/browser/autofill_manager.h"
+#include "components/bookmarks/core/browser/bookmark_prompt_prefs.h"
 #include "components/password_manager/core/browser/password_manager.h"
 #include "components/rappor/rappor_service.h"
 #include "components/sync_driver/sync_prefs.h"
@@ -145,7 +144,6 @@
 #include "chrome/browser/chromeos/first_run/first_run.h"
 #include "chrome/browser/chromeos/login/default_pinned_apps_field_trial.h"
 #include "chrome/browser/chromeos/login/login_utils.h"
-#include "chrome/browser/chromeos/login/multi_profile_first_run_notification.h"
 #include "chrome/browser/chromeos/login/multi_profile_user_controller.h"
 #include "chrome/browser/chromeos/login/saml/saml_offline_signin_limiter.h"
 #include "chrome/browser/chromeos/login/startup_utils.h"
@@ -388,7 +386,6 @@
 #if defined(ENABLE_FULL_PRINTING)
   print_dialog_cloud::RegisterProfilePrefs(registry);
   printing::StickySettings::RegisterProfilePrefs(registry);
-  CloudPrintURL::RegisterProfilePrefs(registry);
 #endif
 
 #if defined(ENABLE_MANAGED_USERS)
@@ -435,7 +432,6 @@
   chromeos::attestation::PlatformVerificationFlow::RegisterProfilePrefs(
       registry);
   chromeos::first_run::RegisterProfilePrefs(registry);
-  chromeos::MultiProfileFirstRunNotification::RegisterProfilePrefs(registry);
   chromeos::MultiProfileUserController::RegisterProfilePrefs(registry);
   chromeos::Preferences::RegisterProfilePrefs(registry);
   chromeos::proxy_config::RegisterProfilePrefs(registry);
diff --git a/chrome/browser/prefs/chrome_pref_service_factory.cc b/chrome/browser/prefs/chrome_pref_service_factory.cc
index 1870de9..b057bbc 100644
--- a/chrome/browser/prefs/chrome_pref_service_factory.cc
+++ b/chrome/browser/prefs/chrome_pref_service_factory.cc
@@ -204,8 +204,9 @@
   };
 
   // Use the strongest enforcement setting in the absence of a field trial
-  // config on Windows. Remember to update the OFFICIAL_BUILD section of
-  // pref_hash_browsertest.cc when updating these values.
+  // config on Windows. Remember to update the OFFICIAL_BUILD sections of
+  // pref_hash_browsertest.cc and extension_startup_browsertest.cc when updating
+  // the default value below.
   // TODO(gab): Enforce this on all platforms.
   SettingsEnforcementGroup enforcement_group =
 #if defined(OS_WIN)
diff --git a/chrome/browser/prefs/command_line_pref_store.cc b/chrome/browser/prefs/command_line_pref_store.cc
index 9c854d8..c084431 100644
--- a/chrome/browser/prefs/command_line_pref_store.cc
+++ b/chrome/browser/prefs/command_line_pref_store.cc
@@ -55,7 +55,6 @@
         prefs::kWebKitAllowDisplayingInsecureContent, false },
       { switches::kAllowCrossOriginAuthPrompt,
         prefs::kAllowCrossOriginAuthPrompt, true },
-      { switches::kDisableTLSChannelID, prefs::kEnableOriginBoundCerts, false },
       { switches::kDisableSSLFalseStart, prefs::kDisableSSLRecordSplitting,
           true },
 #if defined(GOOGLE_CHROME_BUILD)
diff --git a/chrome/browser/prerender/prerender_browsertest.cc b/chrome/browser/prerender/prerender_browsertest.cc
index 58b3eae..d997908 100644
--- a/chrome/browser/prerender/prerender_browsertest.cc
+++ b/chrome/browser/prerender/prerender_browsertest.cc
@@ -148,6 +148,7 @@
     case FINAL_STATUS_USED:
     case FINAL_STATUS_WINDOW_OPENER:
     case FINAL_STATUS_APP_TERMINATING:
+    case FINAL_STATUS_PROFILE_DESTROYED:
     case FINAL_STATUS_CACHE_OR_HISTORY_CLEARED:
     // We'll crash the renderer after it's loaded.
     case FINAL_STATUS_RENDERER_CRASHED:
@@ -273,6 +274,10 @@
     tab_strip_model_->RemoveObserver(this);
   }
 
+  void set_did_start_loading() {
+    did_start_loading_ = true;
+  }
+
   void Wait() {
     loop_.Run();
   }
@@ -343,6 +348,7 @@
         static_cast<Browser*>(new_tab->GetDelegate())->tab_strip_model();
     swap_observer_.reset(new NavigationOrSwapObserver(tab_strip_model,
                                                       new_tab));
+    swap_observer_->set_did_start_loading();
     return true;
   }
 
@@ -2559,12 +2565,7 @@
 }
 
 // Checks that scripts can retrieve the correct window size while prerendering.
-#if defined(TOOLKIT_VIEWS)
-// TODO(beng): Widget hierarchy split causes this to fail http://crbug.com/82363
-IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, DISABLED_PrerenderWindowSize) {
-#else
 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderWindowSize) {
-#endif
   PrerenderTestURL("files/prerender/prerender_size.html",
                    FINAL_STATUS_USED,
                    1);
@@ -3223,30 +3224,30 @@
   GoBackToPrerender();
 }
 
-// http://crbug.com/345474
-IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
-                       DISABLED_PrerenderClickNewWindow) {
+IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderClickNewWindow) {
+  // Prerender currently doesn't interpose on this navigation.
+  // http://crbug.com/345474.
   PrerenderTestURL("files/prerender/prerender_page_with_link.html",
-                   FINAL_STATUS_WINDOW_OPENER,
+                   FINAL_STATUS_APP_TERMINATING,
                    1);
   OpenDestURLViaClickNewWindow();
 }
 
-// http://crbug.com/345474
-IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
-                       DISABLED_PrerenderClickNewForegroundTab) {
+IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderClickNewForegroundTab) {
+  // Prerender currently doesn't interpose on this navigation.
+  // http://crbug.com/345474.
   PrerenderTestURL("files/prerender/prerender_page_with_link.html",
-                   FINAL_STATUS_WINDOW_OPENER,
+                   FINAL_STATUS_APP_TERMINATING,
                    1);
   OpenDestURLViaClickNewForegroundTab();
 }
 
-// http://crbug.com/345474
-IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
-                       DISABLED_PrerenderClickNewBackgroundTab) {
+IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderClickNewBackgroundTab) {
+  // Prerender currently doesn't interpose on this navigation.
+  // http://crbug.com/345474.
   scoped_ptr<TestPrerender> prerender =
       PrerenderTestURL("files/prerender/prerender_page_with_link.html",
-                       FINAL_STATUS_WINDOW_OPENER,
+                       FINAL_STATUS_APP_TERMINATING,
                        1);
   ASSERT_TRUE(prerender->contents());
   prerender->contents()->set_should_be_shown(false);
@@ -3499,9 +3500,6 @@
   ASSERT_TRUE(StartSpawnedTestServer());
   extensions::FrameNavigationState::set_allow_extension_scheme(true);
 
-  CommandLine::ForCurrentProcess()->AppendSwitch(
-      extensions::switches::kAllowLegacyExtensionManifests);
-
   // Wait for the extension to set itself up and return control to us.
   ASSERT_TRUE(RunExtensionTest("webnavigation/prerender")) << message_;
 
@@ -3519,19 +3517,12 @@
   ASSERT_TRUE(catcher.GetNextResult()) << catcher.message();
 }
 
-// Fails often on Windows dbg bots. http://crbug.com/177163
-#if defined(OS_WIN) && !defined(NDEBUG)
-#define MAYBE_TabsApi DISABLED_TabsApi
-#else
-#define MAYBE_TabsApi TabsApi
-#endif  // defined(OS_WIN) && !defined(NDEBUG)
-IN_PROC_BROWSER_TEST_F(PrerenderBrowserTestWithExtensions, MAYBE_TabsApi) {
+IN_PROC_BROWSER_TEST_F(PrerenderBrowserTestWithExtensions, TabsApi) {
   ASSERT_TRUE(StartSpawnedTestServer());
   extensions::FrameNavigationState::set_allow_extension_scheme(true);
 
   // Wait for the extension to set itself up and return control to us.
-  ASSERT_TRUE(RunExtensionSubtest("tabs/on_replaced", "on_replaced.html"))
-      << message_;
+  ASSERT_TRUE(RunExtensionTest("tabs/on_replaced")) << message_;
 
   ResultCatcher catcher;
 
@@ -4174,4 +4165,14 @@
   NavigateToDestURL();
 }
 
+// Checks that prerenders are aborted when an incognito profile is closed.
+IN_PROC_BROWSER_TEST_F(PrerenderIncognitoBrowserTest,
+                       PrerenderIncognitoClosed) {
+  scoped_ptr<TestPrerender> prerender =
+      PrerenderTestURL("files/prerender/prerender_page.html",
+                       FINAL_STATUS_PROFILE_DESTROYED, 1);
+  current_browser()->window()->Close();
+  prerender->WaitForStop();
+}
+
 }  // namespace prerender
diff --git a/chrome/browser/printing/background_printing_manager.cc b/chrome/browser/printing/background_printing_manager.cc
index e619fc9..4a29c65 100644
--- a/chrome/browser/printing/background_printing_manager.cc
+++ b/chrome/browser/printing/background_printing_manager.cc
@@ -49,7 +49,7 @@
 }
 
 BackgroundPrintingManager::BackgroundPrintingManager() {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
 }
 
 BackgroundPrintingManager::~BackgroundPrintingManager() {
diff --git a/chrome/browser/printing/cloud_print/cloud_print_proxy_service.cc b/chrome/browser/printing/cloud_print/cloud_print_proxy_service.cc
index 6947c3b..a4c07b6 100644
--- a/chrome/browser/printing/cloud_print/cloud_print_proxy_service.cc
+++ b/chrome/browser/printing/cloud_print/cloud_print_proxy_service.cc
@@ -45,7 +45,7 @@
 }
 
 void CloudPrintProxyService::Initialize() {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
   UMA_HISTOGRAM_ENUMERATION("CloudPrint.ServiceEvents",
                             ServiceProcessControl::SERVICE_EVENT_INITIALIZE,
                             ServiceProcessControl::SERVICE_EVENT_MAX);
@@ -73,14 +73,14 @@
 }
 
 void CloudPrintProxyService::RefreshStatusFromService() {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
   InvokeServiceTask(
       base::Bind(&CloudPrintProxyService::RefreshCloudPrintProxyStatus,
                  weak_factory_.GetWeakPtr()));
 }
 
 bool CloudPrintProxyService::EnforceCloudPrintConnectorPolicyAndQuit() {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
   enforcing_connector_policy_ = true;
   if (ApplyCloudPrintConnectorPolicy())
     return true;
@@ -92,7 +92,7 @@
     const std::string& robot_email,
     const std::string& user_email,
     const base::DictionaryValue& user_preferences) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
   UMA_HISTOGRAM_ENUMERATION("CloudPrint.ServiceEvents",
                             ServiceProcessControl::SERVICE_EVENT_ENABLE,
                             ServiceProcessControl::SERVICE_EVENT_MAX);
@@ -105,7 +105,7 @@
 }
 
 void CloudPrintProxyService::DisableForUser() {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
   UMA_HISTOGRAM_ENUMERATION("CloudPrint.ServiceEvents",
                             ServiceProcessControl::SERVICE_EVENT_DISABLE,
                             ServiceProcessControl::SERVICE_EVENT_MAX);
@@ -115,7 +115,7 @@
 }
 
 bool CloudPrintProxyService::ApplyCloudPrintConnectorPolicy() {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
   if (!profile_->GetPrefs()->GetBoolean(prefs::kCloudPrintProxyEnabled)) {
     std::string email =
         profile_->GetPrefs()->GetString(prefs::kCloudPrintEmail);
@@ -142,7 +142,7 @@
 }
 
 void CloudPrintProxyService::GetPrinters(const PrintersCallback& callback) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
   if (!profile_->GetPrefs()->GetBoolean(prefs::kCloudPrintProxyEnabled))
     return;
 
@@ -176,14 +176,14 @@
 
 void CloudPrintProxyService::GetCloudPrintProxyPrinters(
     const PrintersCallback& callback) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
   ServiceProcessControl* process_control = GetServiceProcessControl();
   DCHECK(process_control->IsConnected());
   process_control->GetPrinters(callback);
 }
 
 void CloudPrintProxyService::RefreshCloudPrintProxyStatus() {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
   ServiceProcessControl* process_control = GetServiceProcessControl();
   DCHECK(process_control->IsConnected());
   ServiceProcessControl::CloudPrintProxyInfoCallback callback = base::Bind(
diff --git a/chrome/browser/printing/cloud_print/cloud_print_url.cc b/chrome/browser/printing/cloud_print/cloud_print_url.cc
deleted file mode 100644
index 530e606..0000000
--- a/chrome/browser/printing/cloud_print/cloud_print_url.cc
+++ /dev/null
@@ -1,122 +0,0 @@
-// Copyright (c) 2011 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 "chrome/browser/printing/cloud_print/cloud_print_url.h"
-
-#include "base/command_line.h"
-#include "base/logging.h"
-#include "base/prefs/pref_service.h"
-#include "base/strings/stringprintf.h"
-#include "chrome/browser/google/google_util.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/common/chrome_switches.h"
-#include "chrome/common/pref_names.h"
-#include "components/user_prefs/pref_registry_syncable.h"
-#include "google_apis/gaia/gaia_urls.h"
-#include "net/base/url_util.h"
-#include "url/gurl.h"
-
-// Url must not be matched by "urls" section of
-// cloud_print_app/manifest.json. If it's matched, print driver dialog will
-// open sign-in page in separate window.
-const char kDefaultCloudPrintServiceURL[] = "https://www.google.com/cloudprint";
-
-const char kLearnMoreURL[] =
-    "https://www.google.com/support/cloudprint";
-const char kTestPageURL[] =
-    "http://www.google.com/landing/cloudprint/enable.html?print=true";
-
-// static
-void CloudPrintURL::RegisterProfilePrefs(
-    user_prefs::PrefRegistrySyncable* registry) {
-  const CommandLine* command_line = CommandLine::ForCurrentProcess();
-  GURL cloud_print_url(
-      command_line->GetSwitchValueASCII(switches::kCloudPrintServiceURL));
-  if (cloud_print_url.is_empty())
-    cloud_print_url = GURL(kDefaultCloudPrintServiceURL);
-  registry->RegisterStringPref(
-      prefs::kCloudPrintServiceURL,
-      cloud_print_url.spec(),
-      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
-  GURL gaia_url(GaiaUrls::GetInstance()->service_login_url());
-  gaia_url = net::AppendQueryParameter(gaia_url, "service", "cloudprint");
-  gaia_url = net::AppendQueryParameter(gaia_url, "sarp", "1");
-  gaia_url = net::AppendQueryParameter(gaia_url, "continue",
-                                       cloud_print_url.spec());
-  registry->RegisterStringPref(
-      prefs::kCloudPrintSigninURL,
-      gaia_url.spec(),
-      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
-}
-
-// Returns the root service URL for the cloud print service.  The default is to
-// point at the Google Cloud Print service.  This can be overridden by the
-// command line or by the user preferences.
-GURL CloudPrintURL::GetCloudPrintServiceURL() {
-  DCHECK(profile_);
-  return GURL(profile_->GetPrefs()->GetString(prefs::kCloudPrintServiceURL));
-}
-
-GURL CloudPrintURL::GetCloudPrintSigninURL() {
-  DCHECK(profile_);
-  GURL cloud_print_signin_url(
-      profile_->GetPrefs()->GetString(prefs::kCloudPrintSigninURL));
-  return google_util::AppendGoogleLocaleParam(cloud_print_signin_url);
-}
-
-GURL CloudPrintURL::GetCloudPrintAddAccountURL() {
-  DCHECK(profile_);
-  GURL url(GaiaUrls::GetInstance()->add_account_url());
-  url = net::AppendQueryParameter(url, "service", "cloudprint");
-  url = net::AppendQueryParameter(url, "sarp", "1");
-  url = net::AppendQueryParameter(
-      url,
-      "continue",
-      profile_->GetPrefs()->GetString(prefs::kCloudPrintServiceURL));
-  return google_util::AppendGoogleLocaleParam(url);
-}
-
-GURL CloudPrintURL::GetCloudPrintServiceDialogURL() {
-  GURL cloud_print_service_url = GetCloudPrintServiceURL();
-  std::string path(cloud_print_service_url.path() + "/client/dialog.html");
-  GURL::Replacements replacements;
-  replacements.SetPathStr(path);
-  GURL cloud_print_dialog_url = cloud_print_service_url.ReplaceComponents(
-      replacements);
-  return google_util::AppendGoogleLocaleParam(cloud_print_dialog_url);
-}
-
-GURL CloudPrintURL::GetCloudPrintServiceManageURL() {
-  GURL cloud_print_service_url = GetCloudPrintServiceURL();
-  std::string path(cloud_print_service_url.path() + "/manage.html");
-  GURL::Replacements replacements;
-  replacements.SetPathStr(path);
-  GURL cloud_print_manage_url = cloud_print_service_url.ReplaceComponents(
-      replacements);
-  return cloud_print_manage_url;
-}
-
-GURL CloudPrintURL::GetCloudPrintServiceEnableURL(
-    const std::string& proxy_id) {
-  GURL cloud_print_service_url = GetCloudPrintServiceURL();
-  std::string path(cloud_print_service_url.path() +
-      "/enable_chrome_connector/enable.html");
-  GURL::Replacements replacements;
-  replacements.SetPathStr(path);
-  std::string query = base::StringPrintf("proxy=%s", proxy_id.c_str());
-  replacements.SetQueryStr(query);
-  GURL cloud_print_enable_url = cloud_print_service_url.ReplaceComponents(
-      replacements);
-  return cloud_print_enable_url;
-}
-
-GURL CloudPrintURL::GetCloudPrintLearnMoreURL() {
-  GURL cloud_print_learn_more_url(kLearnMoreURL);
-  return cloud_print_learn_more_url;
-}
-
-GURL CloudPrintURL::GetCloudPrintTestPageURL() {
-  GURL cloud_print_learn_more_url(kTestPageURL);
-  return cloud_print_learn_more_url;
-}
diff --git a/chrome/browser/printing/cloud_print/cloud_print_url.h b/chrome/browser/printing/cloud_print/cloud_print_url.h
deleted file mode 100644
index a328ec1..0000000
--- a/chrome/browser/printing/cloud_print/cloud_print_url.h
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright (c) 2011 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 CHROME_BROWSER_PRINTING_CLOUD_PRINT_CLOUD_PRINT_URL_H_
-#define CHROME_BROWSER_PRINTING_CLOUD_PRINT_CLOUD_PRINT_URL_H_
-
-#include <string>
-
-class GURL;
-class Profile;
-
-namespace user_prefs {
-class PrefRegistrySyncable;
-}
-
-// Centralize URL management for the cloud print service.
-class CloudPrintURL {
- public:
-  static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
-
-  explicit CloudPrintURL(Profile* profile) : profile_(profile) {}
-
-  GURL GetCloudPrintServiceURL();
-  GURL GetCloudPrintServiceDialogURL();
-  GURL GetCloudPrintServiceManageURL();
-  GURL GetCloudPrintServiceEnableURL(const std::string& proxy_id);
-  GURL GetCloudPrintSigninURL();
-  GURL GetCloudPrintAddAccountURL();
-
-  // These aren't derived from the service, but it makes sense to keep all the
-  // URLs together, and this gives the unit tests access for testing.
-  static GURL GetCloudPrintLearnMoreURL();
-  static GURL GetCloudPrintTestPageURL();
-
- private:
-  Profile* profile_;
-};
-
-#endif  // CHROME_BROWSER_PRINTING_CLOUD_PRINT_CLOUD_PRINT_URL_H_
diff --git a/chrome/browser/printing/print_dialog_cloud.cc b/chrome/browser/printing/print_dialog_cloud.cc
index 2e46481..740664c 100644
--- a/chrome/browser/printing/print_dialog_cloud.cc
+++ b/chrome/browser/printing/print_dialog_cloud.cc
@@ -15,8 +15,8 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/values.h"
 #include "chrome/browser/devtools/devtools_window.h"
+#include "chrome/browser/google/google_util.h"
 #include "chrome/browser/lifetime/application_lifetime.h"
-#include "chrome/browser/printing/cloud_print/cloud_print_url.h"
 #include "chrome/browser/printing/print_dialog_cloud_internal.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/browser.h"
@@ -25,6 +25,7 @@
 #include "chrome/common/pref_names.h"
 #include "chrome/common/print_messages.h"
 #include "chrome/common/url_constants.h"
+#include "components/cloud_devices/common/cloud_devices_urls.h"
 #include "components/user_prefs/pref_registry_syncable.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/navigation_controller.h"
@@ -248,7 +249,7 @@
 // JavaScript to that location, and make sure it gets deleted when not
 // needed. - 4/1/2010
 void CloudPrintDataSender::SendPrintData() {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+  DCHECK_CURRENTLY_ON(BrowserThread::IO);
   if (!data_.get() || !data_->size())
     return;
 
@@ -299,7 +300,7 @@
     CloudPrintWebDialogDelegate* delegate) {
   // Even if setting a new WebUI, it means any previous task needs
   // to be canceled, its now invalid.
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
   CancelAnyRunningTask();
   dialog_delegate_ = delegate;
 }
@@ -308,7 +309,7 @@
 // reference to it, so when the task that is calling it finishes and
 // removes its reference, it goes away.
 void CloudPrintFlowHandler::CancelAnyRunningTask() {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
   if (print_data_sender_.get()) {
     print_data_sender_->CancelPrintDataFile();
     print_data_sender_ = NULL;
@@ -335,9 +336,8 @@
       &web_ui()->GetWebContents()->GetController();
   NavigationEntry* pending_entry = controller->GetPendingEntry();
   if (pending_entry) {
-    Profile* profile = Profile::FromWebUI(web_ui());
-    pending_entry->SetURL(
-        CloudPrintURL(profile).GetCloudPrintServiceDialogURL());
+    pending_entry->SetURL(google_util::AppendGoogleLocaleParam(
+        cloud_devices::GetCloudPrintRelativeURL("client/dialog.html")));
   }
   registrar_.Add(this, content::NOTIFICATION_LOAD_STOP,
                  content::Source<NavigationController>(controller));
@@ -402,7 +402,7 @@
 }
 
 void CloudPrintFlowHandler::HandleSendPrintData(const base::ListValue* args) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
   // This will cancel any ReadPrintDataFile() or SendPrintDataFile()
   // requests in flight (this is anticipation of when setting page
   // setup parameters becomes asynchronous and may be set while some
@@ -477,8 +477,7 @@
 }
 
 bool CloudPrintFlowHandler::IsCloudPrintDialogUrl(const GURL& url) {
-  GURL cloud_print_url =
-      CloudPrintURL(Profile::FromWebUI(web_ui())).GetCloudPrintServiceURL();
+  GURL cloud_print_url = cloud_devices::GetCloudPrintURL();
   return IsSimilarUrl(url, cloud_print_url);
 }
 
@@ -528,7 +527,7 @@
 void CloudPrintWebDialogDelegate::Init(content::BrowserContext* browser_context,
                                        const std::string& json_arguments) {
   // This information is needed to show the dialog HTML content.
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
 
   params_.url = GURL(chrome::kChromeUICloudPrintResourcesURL);
   GetDialogWidthAndHeightFromPrefs(browser_context,
@@ -546,7 +545,7 @@
 CloudPrintWebDialogDelegate::~CloudPrintWebDialogDelegate() {
   // If the flow_handler_ is about to outlive us because we don't own
   // it anymore, we need to have it remove its reference to us.
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
   flow_handler_->SetDialogDelegate(NULL);
   if (owns_flow_handler_) {
     delete flow_handler_;
@@ -620,7 +619,7 @@
                       const base::string16& print_job_title,
                       const base::string16& print_ticket,
                       const std::string& file_type) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
   WebDialogDelegate* dialog_delegate =
       new internal_cloud_print_helpers::CloudPrintWebDialogDelegate(
           browser_context, modal_parent, data, std::string(), print_job_title,
@@ -652,7 +651,7 @@
                              const base::string16& print_job_title,
                              const base::string16& print_ticket,
                              const std::string& file_type) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
+  DCHECK_CURRENTLY_ON(BrowserThread::FILE);
   scoped_refptr<base::RefCountedMemory> data;
   int64 file_size = 0;
   if (base::GetFileSize(path_to_file, &file_size) && file_size != 0) {
@@ -711,17 +710,16 @@
 void CreateCloudPrintSigninTab(Browser* browser,
                                bool add_account,
                                const base::Closure& callback) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  CloudPrintURL cp_url(browser->profile());
-  content::WebContents* web_contents =
-      browser->OpenURL(
-          content::OpenURLParams(add_account ?
-                                     cp_url.GetCloudPrintAddAccountURL() :
-                                     cp_url.GetCloudPrintSigninURL(),
-                                 content::Referrer(), NEW_FOREGROUND_TAB,
-                                 content::PAGE_TRANSITION_AUTO_BOOKMARK,
-                                 false));
-  new SignInObserver(web_contents, cp_url.GetCloudPrintServiceURL(), callback);
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
+  GURL url = add_account ? cloud_devices::GetCloudPrintAddAccountURL()
+                         : cloud_devices::GetCloudPrintSigninURL();
+  content::WebContents* web_contents = browser->OpenURL(
+      content::OpenURLParams(google_util::AppendGoogleLocaleParam(url),
+                             content::Referrer(),
+                             NEW_FOREGROUND_TAB,
+                             content::PAGE_TRANSITION_AUTO_BOOKMARK,
+                             false));
+  new SignInObserver(web_contents, cloud_devices::GetCloudPrintURL(), callback);
 }
 
 void CreatePrintDialogForBytes(content::BrowserContext* browser_context,
diff --git a/chrome/browser/printing/print_dialog_cloud_unittest.cc b/chrome/browser/printing/print_dialog_cloud_unittest.cc
index 8d44ace..c29721e 100644
--- a/chrome/browser/printing/print_dialog_cloud_unittest.cc
+++ b/chrome/browser/printing/print_dialog_cloud_unittest.cc
@@ -17,10 +17,9 @@
 #include "base/path_service.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/values.h"
-#include "chrome/browser/printing/cloud_print/cloud_print_url.h"
 #include "chrome/common/chrome_paths.h"
 #include "chrome/common/url_constants.h"
-#include "chrome/test/base/testing_profile.h"
+#include "components/cloud_devices/common/cloud_devices_urls.h"
 #include "content/public/browser/notification_details.h"
 #include "content/public/browser/notification_source.h"
 #include "content/public/browser/notification_types.h"
@@ -138,70 +137,6 @@
                                             const base::Value& arg2));
 };
 
-class CloudPrintURLTest : public testing::Test {
- public:
-  CloudPrintURLTest() {}
-
- protected:
-  virtual void SetUp() {
-    profile_.reset(new TestingProfile());
-  }
-
-  scoped_ptr<Profile> profile_;
-};
-
-TEST_F(CloudPrintURLTest, CheckDefaultURLs) {
-  std::string service_url =
-      CloudPrintURL(profile_.get()).
-      GetCloudPrintServiceURL().spec();
-  EXPECT_THAT(service_url, HasSubstr("www.google.com"));
-  EXPECT_THAT(service_url, HasSubstr("cloudprint"));
-
-  std::string dialog_url =
-      CloudPrintURL(profile_.get()).
-      GetCloudPrintServiceDialogURL().spec();
-  EXPECT_THAT(dialog_url, HasSubstr("www.google.com"));
-  EXPECT_THAT(dialog_url, HasSubstr("/cloudprint/"));
-  EXPECT_THAT(dialog_url, HasSubstr("/client/"));
-  EXPECT_THAT(dialog_url, Not(HasSubstr("cloudprint/cloudprint")));
-  EXPECT_THAT(dialog_url, HasSubstr("/dialog.html"));
-
-  // Repeat to make sure there isn't a transient glitch.
-  dialog_url =
-      CloudPrintURL(profile_.get()).
-      GetCloudPrintServiceDialogURL().spec();
-  EXPECT_THAT(dialog_url, HasSubstr("www.google.com"));
-  EXPECT_THAT(dialog_url, HasSubstr("/cloudprint/"));
-  EXPECT_THAT(dialog_url, HasSubstr("/client/"));
-  EXPECT_THAT(dialog_url, Not(HasSubstr("cloudprint/cloudprint")));
-  EXPECT_THAT(dialog_url, HasSubstr("/dialog.html"));
-
-  std::string manage_url =
-      CloudPrintURL(profile_.get()).
-      GetCloudPrintServiceManageURL().spec();
-  EXPECT_THAT(manage_url, HasSubstr("www.google.com"));
-  EXPECT_THAT(manage_url, HasSubstr("/cloudprint/"));
-  EXPECT_THAT(manage_url, Not(HasSubstr("/client/")));
-  EXPECT_THAT(manage_url, Not(HasSubstr("cloudprint/cloudprint")));
-  EXPECT_THAT(manage_url, HasSubstr("/manage"));
-
-  GURL learn_more_url = CloudPrintURL::GetCloudPrintLearnMoreURL();
-  std::string learn_more_path = learn_more_url.spec();
-  EXPECT_THAT(learn_more_path, HasSubstr("www.google.com"));
-  EXPECT_THAT(learn_more_path, HasSubstr("/support/"));
-  EXPECT_THAT(learn_more_path, HasSubstr("/cloudprint"));
-  EXPECT_TRUE(learn_more_url.has_path());
-  EXPECT_FALSE(learn_more_url.has_query());
-
-  GURL test_page_url = CloudPrintURL::GetCloudPrintTestPageURL();
-  std::string test_page_path = test_page_url.spec();
-  EXPECT_THAT(test_page_path, HasSubstr("www.google.com"));
-  EXPECT_THAT(test_page_path, HasSubstr("/landing/"));
-  EXPECT_THAT(test_page_path, HasSubstr("/cloudprint/"));
-  EXPECT_TRUE(test_page_url.has_path());
-  EXPECT_TRUE(test_page_url.has_query());
-}
-
 // Testing for CloudPrintDataSender needs a mock WebUI.
 class CloudPrintDataSenderTest : public testing::Test {
  public:
diff --git a/chrome/browser/printing/print_job_worker.cc b/chrome/browser/printing/print_job_worker.cc
index f034e79..88ef3e9 100644
--- a/chrome/browser/printing/print_job_worker.cc
+++ b/chrome/browser/printing/print_job_worker.cc
@@ -178,7 +178,7 @@
     scoped_ptr<PrintingUIWebContentsObserver> web_contents_observer,
     int document_page_count,
     bool has_selection) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
 
   gfx::NativeView parent_view = web_contents_observer->GetParentView();
   if (!parent_view) {
diff --git a/chrome/browser/printing/print_preview_dialog_controller.cc b/chrome/browser/printing/print_preview_dialog_controller.cc
index 6694af3..27d365f 100644
--- a/chrome/browser/printing/print_preview_dialog_controller.cc
+++ b/chrome/browser/printing/print_preview_dialog_controller.cc
@@ -6,6 +6,7 @@
 
 #include <algorithm>
 #include <string>
+#include <vector>
 
 #include "base/auto_reset.h"
 #include "base/path_service.h"
@@ -31,14 +32,14 @@
 #include "content/public/browser/navigation_controller.h"
 #include "content/public/browser/navigation_details.h"
 #include "content/public/browser/navigation_entry.h"
+#include "content/public/browser/notification_details.h"
+#include "content/public/browser/notification_source.h"
 #include "content/public/browser/plugin_service.h"
 #include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/render_process_host.h"
-#include "content/public/browser/render_process_host_observer.h"
 #include "content/public/browser/render_view_host.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/browser/web_contents_delegate.h"
-#include "content/public/browser/web_contents_observer.h"
 #include "content/public/browser/web_contents_view.h"
 #include "content/public/common/webplugininfo.h"
 #include "ui/web_dialogs/web_dialog_delegate.h"
@@ -46,7 +47,6 @@
 
 using content::NativeWebKeyboardEvent;
 using content::NavigationController;
-using content::RenderProcessHost;
 using content::WebContents;
 using content::WebUIMessageHandler;
 using ui::WebDialogDelegate;
@@ -210,97 +210,6 @@
 
 namespace printing {
 
-struct PrintPreviewDialogController::Operation {
-  class Observer : public content::WebContentsObserver,
-                   public content::RenderProcessHostObserver {
-   public:
-    Observer();
-    virtual ~Observer();
-
-    void StartObserving(PrintPreviewDialogController* owner,
-                        WebContents* web_contents);
-    void StopObserving();
-
-   private:
-    // content::WebContentsObserver
-    virtual void WebContentsDestroyed(WebContents* web_contents) OVERRIDE;
-    virtual void NavigationEntryCommitted(
-        const content::LoadCommittedDetails& load_details) OVERRIDE;
-    // content::RenderProcessHostObserver
-    virtual void RenderProcessExited(RenderProcessHost* host,
-                                     base::ProcessHandle handle,
-                                     base::TerminationStatus status,
-                                     int exit_code) OVERRIDE;
-    virtual void RenderProcessHostDestroyed(RenderProcessHost* host) OVERRIDE;
-
-    PrintPreviewDialogController* owner_;
-    RenderProcessHost* host_;
-  };
-
-  Operation();
-
-  WebContents* preview_dialog;
-  WebContents* initiator;
-  Observer preview_dialog_observer;
-  Observer initiator_observer;
-
-  DISALLOW_COPY_AND_ASSIGN(Operation);
-};
-
-PrintPreviewDialogController::Operation::Operation() : preview_dialog(NULL),
-                                                       initiator(NULL) {
-}
-
-PrintPreviewDialogController::Operation::Observer::Observer() : owner_(NULL),
-                                                                host_(NULL) {
-}
-
-PrintPreviewDialogController::Operation::Observer::~Observer() {
-  StopObserving();
-}
-
-void PrintPreviewDialogController::Operation::Observer::StartObserving(
-    PrintPreviewDialogController* owner,
-    WebContents* web_contents) {
-  owner_ = owner;
-  Observe(web_contents);
-  host_ = web_contents->GetRenderProcessHost();
-  host_->AddObserver(this);
-}
-
-void PrintPreviewDialogController::Operation::Observer::StopObserving() {
-  Observe(NULL);
-  if (host_) {
-    host_->RemoveObserver(this);
-    host_ = NULL;
-  }
-}
-
-void PrintPreviewDialogController::Operation::Observer::WebContentsDestroyed(
-    WebContents* web_contents) {
-  owner_->OnWebContentsDestroyed(web_contents);
-}
-
-void
-PrintPreviewDialogController::Operation::Observer::NavigationEntryCommitted(
-    const content::LoadCommittedDetails& load_details) {
-  owner_->OnNavigationEntryCommitted(web_contents(), &load_details);
-}
-
-void PrintPreviewDialogController::Operation::Observer::RenderProcessExited(
-    RenderProcessHost* host,
-    base::ProcessHandle handle,
-    base::TerminationStatus status,
-    int exit_code) {
-  owner_->OnRenderProcessExited(host);
-}
-
-void
-PrintPreviewDialogController::Operation::Observer::RenderProcessHostDestroyed(
-    RenderProcessHost* host) {
-  host_ = NULL;
-}
-
 PrintPreviewDialogController::PrintPreviewDialogController()
     : waiting_for_new_preview_page_(false),
       is_creating_print_preview_dialog_(false) {
@@ -341,11 +250,19 @@
 
 WebContents* PrintPreviewDialogController::GetPrintPreviewForContents(
     WebContents* contents) const {
-  for (size_t i = 0; i < preview_operations_.size(); ++i) {
-    Operation* operation = preview_operations_[i];
-    if (operation->preview_dialog == contents ||
-        operation->initiator == contents) {
-      return operation->preview_dialog;
+  // |preview_dialog_map_| is keyed by the preview dialog, so if find()
+  // succeeds, then |contents| is the preview dialog.
+  PrintPreviewDialogMap::const_iterator it = preview_dialog_map_.find(contents);
+  if (it != preview_dialog_map_.end())
+    return contents;
+
+  for (it = preview_dialog_map_.begin();
+       it != preview_dialog_map_.end();
+       ++it) {
+    // If |contents| is an initiator.
+    if (contents == it->second) {
+      // Return the associated preview dialog.
+      return it->first;
     }
   }
   return NULL;
@@ -353,18 +270,35 @@
 
 WebContents* PrintPreviewDialogController::GetInitiator(
     WebContents* preview_dialog) {
-  for (size_t i = 0; i < preview_operations_.size(); ++i) {
-    Operation* operation = preview_operations_[i];
-    if (operation->preview_dialog == preview_dialog)
-      return operation->initiator;
+  PrintPreviewDialogMap::iterator it = preview_dialog_map_.find(preview_dialog);
+  return (it != preview_dialog_map_.end()) ? it->second : NULL;
+}
+
+void PrintPreviewDialogController::Observe(
+    int type,
+    const content::NotificationSource& source,
+    const content::NotificationDetails& details) {
+  if (type == content::NOTIFICATION_RENDERER_PROCESS_CLOSED) {
+    OnRendererProcessClosed(
+        content::Source<content::RenderProcessHost>(source).ptr());
+  } else if (type == content::NOTIFICATION_WEB_CONTENTS_DESTROYED) {
+    OnWebContentsDestroyed(content::Source<WebContents>(source).ptr());
+  } else {
+    DCHECK_EQ(content::NOTIFICATION_NAV_ENTRY_COMMITTED, type);
+    WebContents* contents =
+        content::Source<NavigationController>(source)->GetWebContents();
+    OnNavEntryCommitted(
+        contents,
+        content::Details<content::LoadCommittedDetails>(details).ptr());
   }
-  return NULL;
 }
 
 void PrintPreviewDialogController::ForEachPreviewDialog(
     base::Callback<void(content::WebContents*)> callback) {
-  for (size_t i = 0; i < preview_operations_.size(); ++i) {
-    callback.Run(preview_operations_[i]->preview_dialog);
+  for (PrintPreviewDialogMap::const_iterator it = preview_dialog_map_.begin();
+       it != preview_dialog_map_.end();
+       ++it) {
+    callback.Run(it->first);
   }
 }
 
@@ -381,30 +315,26 @@
 
 void PrintPreviewDialogController::EraseInitiatorInfo(
     WebContents* preview_dialog) {
-  for (size_t i = 0; i < preview_operations_.size(); ++i) {
-    Operation* operation = preview_operations_[i];
-    if (operation->preview_dialog == preview_dialog) {
-      operation->initiator_observer.StopObserving();
-      operation->initiator = NULL;
-      return;
-    }
-  }
+  PrintPreviewDialogMap::iterator it = preview_dialog_map_.find(preview_dialog);
+  if (it == preview_dialog_map_.end())
+    return;
+
+  RemoveObservers(it->second);
+  preview_dialog_map_[preview_dialog] = NULL;
 }
 
-PrintPreviewDialogController::~PrintPreviewDialogController() {
-  DCHECK_EQ(0U, preview_operations_.size());
-}
+PrintPreviewDialogController::~PrintPreviewDialogController() {}
 
-void PrintPreviewDialogController::OnRenderProcessExited(
-    RenderProcessHost* rph) {
+void PrintPreviewDialogController::OnRendererProcessClosed(
+    content::RenderProcessHost* rph) {
   // Store contents in a vector and deal with them after iterating through
-  // |preview_operations_| because RemoveFoo() can change |preview_operations_|.
+  // |preview_dialog_map_| because RemoveFoo() can change |preview_dialog_map_|.
   std::vector<WebContents*> closed_initiators;
   std::vector<WebContents*> closed_preview_dialogs;
-  for (size_t i = 0; i < preview_operations_.size(); ++i) {
-    Operation* operation = preview_operations_[i];
-    WebContents* preview_dialog = operation->preview_dialog;
-    WebContents* initiator = operation->initiator;
+  for (PrintPreviewDialogMap::iterator iter = preview_dialog_map_.begin();
+       iter != preview_dialog_map_.end(); ++iter) {
+    WebContents* preview_dialog = iter->first;
+    WebContents* initiator = iter->second;
     if (preview_dialog->GetRenderProcessHost() == rph) {
       closed_preview_dialogs.push_back(preview_dialog);
     } else if (initiator &&
@@ -441,8 +371,8 @@
     RemoveInitiator(contents);
 }
 
-void PrintPreviewDialogController::OnNavigationEntryCommitted(
-    WebContents* contents, const content::LoadCommittedDetails* details) {
+void PrintPreviewDialogController::OnNavEntryCommitted(
+    WebContents* contents, content::LoadCommittedDetails* details) {
   WebContents* preview_dialog = GetPrintPreviewForContents(contents);
   if (!preview_dialog) {
     NOTREACHED();
@@ -504,15 +434,12 @@
   extensions::ChromeExtensionWebContentsObserver::CreateForWebContents(
       preview_dialog);
 
+  // Add an entry to the map.
+  preview_dialog_map_[preview_dialog] = initiator;
   waiting_for_new_preview_page_ = true;
 
-  // Add an entry to the map.
-  Operation* operation = new Operation;
-  operation->preview_dialog = preview_dialog;
-  operation->initiator = initiator;
-  operation->preview_dialog_observer.StartObserving(this, preview_dialog);
-  operation->initiator_observer.StartObserving(this, initiator);
-  preview_operations_.push_back(operation);
+  AddObservers(initiator);
+  AddObservers(preview_dialog);
 
   return preview_dialog;
 }
@@ -528,15 +455,49 @@
   }
 }
 
+void PrintPreviewDialogController::AddObservers(WebContents* contents) {
+  registrar_.Add(this, content::NOTIFICATION_WEB_CONTENTS_DESTROYED,
+                 content::Source<WebContents>(contents));
+  registrar_.Add(this, content::NOTIFICATION_NAV_ENTRY_COMMITTED,
+      content::Source<NavigationController>(&contents->GetController()));
+
+  // Multiple sites may share the same RenderProcessHost, so check if this
+  // notification has already been added.
+  content::Source<content::RenderProcessHost> rph_source(
+      contents->GetRenderProcessHost());
+  if (!registrar_.IsRegistered(this,
+      content::NOTIFICATION_RENDERER_PROCESS_CLOSED, rph_source)) {
+    registrar_.Add(this, content::NOTIFICATION_RENDERER_PROCESS_CLOSED,
+                   rph_source);
+  }
+}
+
+void PrintPreviewDialogController::RemoveObservers(WebContents* contents) {
+  registrar_.Remove(this, content::NOTIFICATION_WEB_CONTENTS_DESTROYED,
+                    content::Source<WebContents>(contents));
+  registrar_.Remove(this, content::NOTIFICATION_NAV_ENTRY_COMMITTED,
+      content::Source<NavigationController>(&contents->GetController()));
+
+  // Multiple sites may share the same RenderProcessHost, so check if this
+  // notification has already been added.
+  content::Source<content::RenderProcessHost> rph_source(
+      contents->GetRenderProcessHost());
+  if (registrar_.IsRegistered(this,
+      content::NOTIFICATION_RENDERER_PROCESS_CLOSED, rph_source)) {
+    registrar_.Remove(this, content::NOTIFICATION_RENDERER_PROCESS_CLOSED,
+                      rph_source);
+  }
+}
+
 void PrintPreviewDialogController::RemoveInitiator(
     WebContents* initiator) {
   WebContents* preview_dialog = GetPrintPreviewForContents(initiator);
   DCHECK(preview_dialog);
-
   // Update the map entry first, so when the print preview dialog gets destroyed
   // and reaches RemovePreviewDialog(), it does not attempt to also remove the
   // initiator's observers.
-  EraseInitiatorInfo(preview_dialog);
+  preview_dialog_map_[preview_dialog] = NULL;
+  RemoveObservers(initiator);
 
   PrintViewManager::FromWebContents(initiator)->PrintPreviewDone();
 
@@ -551,32 +512,24 @@
 
 void PrintPreviewDialogController::RemovePreviewDialog(
     WebContents* preview_dialog) {
-  for (size_t i = 0; i < preview_operations_.size(); ++i) {
-    Operation* operation = preview_operations_[i];
-    if (operation->preview_dialog == preview_dialog) {
-      // Remove the initiator's observers before erasing the mapping.
-      if (operation->initiator) {
-        operation->initiator_observer.StopObserving();
-        PrintViewManager::FromWebContents(operation->initiator)->
-            PrintPreviewDone();
-      }
-
-      // Print preview WebContents is destroyed. Notify |PrintPreviewUI| to
-      // abort the initiator preview request.
-      if (content::WebUI* web_ui = preview_dialog->GetWebUI()) {
-        PrintPreviewUI* print_preview_ui =
-            static_cast<PrintPreviewUI*>(web_ui->GetController());
-        if (print_preview_ui)
-          print_preview_ui->OnPrintPreviewDialogDestroyed();
-      }
-
-      preview_operations_.erase(preview_operations_.begin() + i);
-      delete operation;
-
-      return;
-    }
+  // Remove the initiator's observers before erasing the mapping.
+  WebContents* initiator = GetInitiator(preview_dialog);
+  if (initiator) {
+    RemoveObservers(initiator);
+    PrintViewManager::FromWebContents(initiator)->PrintPreviewDone();
   }
-  NOTREACHED();
+
+  // Print preview WebContents is destroyed. Notify |PrintPreviewUI| to abort
+  // the initiator preview request.
+  if (content::WebUI* web_ui = preview_dialog->GetWebUI()) {
+    PrintPreviewUI* print_preview_ui =
+        static_cast<PrintPreviewUI*>(web_ui->GetController());
+    if (print_preview_ui)
+      print_preview_ui->OnPrintPreviewDialogDestroyed();
+  }
+
+  preview_dialog_map_.erase(preview_dialog);
+  RemoveObservers(preview_dialog);
 }
 
 }  // namespace printing
diff --git a/chrome/browser/printing/print_preview_dialog_controller.h b/chrome/browser/printing/print_preview_dialog_controller.h
index 3fc8708..e29635f 100644
--- a/chrome/browser/printing/print_preview_dialog_controller.h
+++ b/chrome/browser/printing/print_preview_dialog_controller.h
@@ -5,12 +5,14 @@
 #ifndef CHROME_BROWSER_PRINTING_PRINT_PREVIEW_DIALOG_CONTROLLER_H_
 #define CHROME_BROWSER_PRINTING_PRINT_PREVIEW_DIALOG_CONTROLLER_H_
 
-#include <vector>
+#include <map>
 
 #include "base/basictypes.h"
 #include "base/callback.h"
 #include "base/memory/ref_counted.h"
 #include "chrome/browser/sessions/session_id.h"
+#include "content/public/browser/notification_observer.h"
+#include "content/public/browser/notification_registrar.h"
 
 class GURL;
 
@@ -29,7 +31,8 @@
 // track of the 1:1 relationship between initiator tabs and print preview
 // dialogs.
 class PrintPreviewDialogController
-    : public base::RefCounted<PrintPreviewDialogController> {
+    : public base::RefCounted<PrintPreviewDialogController>,
+      public content::NotificationObserver {
  public:
   PrintPreviewDialogController();
 
@@ -58,6 +61,11 @@
   void ForEachPreviewDialog(
       base::Callback<void(content::WebContents*)> callback);
 
+  // content::NotificationObserver implementation.
+  virtual void Observe(int type,
+                       const content::NotificationSource& source,
+                       const content::NotificationDetails& details) OVERRIDE;
+
   // Returns true if |contents| is a print preview dialog.
   static bool IsPrintPreviewDialog(content::WebContents* contents);
 
@@ -73,15 +81,27 @@
 
  private:
   friend class base::RefCounted<PrintPreviewDialogController>;
-  struct Operation;
+
+  // 1:1 relationship between a print preview dialog and its initiator tab.
+  // Key: Print preview dialog.
+  // Value: Initiator.
+  typedef std::map<content::WebContents*, content::WebContents*>
+      PrintPreviewDialogMap;
 
   virtual ~PrintPreviewDialogController();
 
-  // Handlers for observed events.
-  void OnRenderProcessExited(content::RenderProcessHost* rph);
+  // Handler for the RENDERER_PROCESS_CLOSED notification. This is observed when
+  // the initiator renderer crashed.
+  void OnRendererProcessClosed(content::RenderProcessHost* rph);
+
+  // Handler for the WEB_CONTENTS_DESTROYED notification. This is observed when
+  // either WebContents is closed.
   void OnWebContentsDestroyed(content::WebContents* contents);
-  void OnNavigationEntryCommitted(content::WebContents* contents,
-                                  const content::LoadCommittedDetails* details);
+
+  // Handler for the NAV_ENTRY_COMMITTED notification. This is observed when the
+  // renderer is navigated to a different page.
+  void OnNavEntryCommitted(content::WebContents* contents,
+                           content::LoadCommittedDetails* details);
 
   // Creates a new print preview dialog.
   content::WebContents* CreatePrintPreviewDialog(
@@ -91,12 +111,19 @@
   // |preview_dialog| in |preview_dialog|'s PrintPreviewUI.
   void SaveInitiatorTitle(content::WebContents* preview_dialog);
 
+  // Adds/Removes observers for notifications from |contents|.
+  void AddObservers(content::WebContents* contents);
+  void RemoveObservers(content::WebContents* contents);
+
   // Removes WebContents when they close/crash/navigate.
   void RemoveInitiator(content::WebContents* initiator);
   void RemovePreviewDialog(content::WebContents* preview_dialog);
 
-  // The list of the currently active preview operations.
-  std::vector<Operation*> preview_operations_;
+  // Mapping between print preview dialog and the corresponding initiator.
+  PrintPreviewDialogMap preview_dialog_map_;
+
+  // A registrar for listening to notifications.
+  content::NotificationRegistrar registrar_;
 
   // True if the controller is waiting for a new preview dialog via
   // content::NAVIGATION_TYPE_NEW_PAGE.
diff --git a/chrome/browser/printing/print_view_manager.cc b/chrome/browser/printing/print_view_manager.cc
index 4917884..07e754d 100644
--- a/chrome/browser/printing/print_view_manager.cc
+++ b/chrome/browser/printing/print_view_manager.cc
@@ -103,7 +103,7 @@
 }
 
 void PrintViewManager::PrintPreviewDone() {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
   DCHECK_NE(NOT_PREVIEWING, print_preview_state_);
 
   if (print_preview_state_ == SCRIPTED_PREVIEW) {
@@ -135,7 +135,7 @@
 }
 
 void PrintViewManager::OnSetupScriptedPrintPreview(IPC::Message* reply_msg) {
-  BrowserThread::CurrentlyOn(BrowserThread::UI);
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
   ScriptedPrintPreviewClosureMap& map =
       g_scripted_print_preview_closure_map.Get();
   content::RenderProcessHost* rph = web_contents()->GetRenderProcessHost();
@@ -185,7 +185,7 @@
 }
 
 void PrintViewManager::OnScriptedPrintPreviewReply(IPC::Message* reply_msg) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
   Send(reply_msg);
 }
 
diff --git a/chrome/browser/printing/printer_manager_dialog_linux.cc b/chrome/browser/printing/printer_manager_dialog_linux.cc
index fec3b02..cc36c3c 100644
--- a/chrome/browser/printing/printer_manager_dialog_linux.cc
+++ b/chrome/browser/printing/printer_manager_dialog_linux.cc
@@ -26,7 +26,7 @@
 // Detect the command based on the deskop environment and open the printer
 // manager dialog.
 void DetectAndOpenPrinterConfigDialog() {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
+  DCHECK_CURRENTLY_ON(BrowserThread::FILE);
   scoped_ptr<Environment> env(Environment::Create());
 
   const char* command = NULL;
diff --git a/chrome/browser/printing/printing_message_filter.cc b/chrome/browser/printing/printing_message_filter.cc
index f9fb3ee..fb6e58b 100644
--- a/chrome/browser/printing/printing_message_filter.cc
+++ b/chrome/browser/printing/printing_message_filter.cc
@@ -161,7 +161,7 @@
     int* sequence_number) {
 #if defined(OS_CHROMEOS)
   // TODO(thestig): Use |render_view_id| for Chrome OS.
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
+  DCHECK_CURRENTLY_ON(BrowserThread::FILE);
   temp_file_fd->fd = *sequence_number = -1;
   temp_file_fd->auto_close = false;
 
@@ -184,7 +184,7 @@
     }
   }
 #elif defined(OS_ANDROID)
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
   content::WebContents* wc = GetWebContentsForRenderView(render_view_id);
   if (!wc)
     return;
@@ -202,7 +202,7 @@
 void PrintingMessageFilter::OnTempFileForPrintingWritten(int render_view_id,
                                                          int sequence_number) {
 #if defined(OS_CHROMEOS)
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
+  DCHECK_CURRENTLY_ON(BrowserThread::FILE);
   SequenceToPathMap* map = &g_printing_file_descriptor_map.Get().map;
   SequenceToPathMap::iterator it = map->find(sequence_number);
   if (it == map->end()) {
@@ -218,7 +218,7 @@
   // Erase the entry in the map.
   map->erase(it);
 #elif defined(OS_ANDROID)
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
   content::WebContents* wc = GetWebContentsForRenderView(render_view_id);
   if (!wc)
     return;
@@ -252,7 +252,7 @@
 
 content::WebContents* PrintingMessageFilter::GetWebContentsForRenderView(
     int render_view_id) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
   content::RenderViewHost* view = content::RenderViewHost::FromID(
       render_process_id_, render_view_id);
   return view ? content::WebContents::FromRenderViewHost(view) : NULL;
@@ -270,7 +270,7 @@
     GetPrintSettingsForRenderViewParams params,
     const base::Closure& callback,
     scoped_refptr<printing::PrinterQuery> printer_query) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
   content::WebContents* wc = GetWebContentsForRenderView(render_view_id);
   if (wc) {
     scoped_ptr<PrintingUIWebContentsObserver> wc_observer(
@@ -292,19 +292,19 @@
 void PrintingMessageFilter::OnGetPrintSettingsFailed(
     const base::Closure& callback,
     scoped_refptr<printing::PrinterQuery> printer_query) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+  DCHECK_CURRENTLY_ON(BrowserThread::IO);
   printer_query->GetSettingsDone(printing::PrintSettings(),
                                  printing::PrintingContext::FAILED);
   callback.Run();
 }
 
 void PrintingMessageFilter::OnIsPrintingEnabled(bool* is_enabled) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+  DCHECK_CURRENTLY_ON(BrowserThread::IO);
   *is_enabled = profile_io_data_->printing_enabled()->GetValue();
 }
 
 void PrintingMessageFilter::OnGetDefaultPrintSettings(IPC::Message* reply_msg) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+  DCHECK_CURRENTLY_ON(BrowserThread::IO);
   scoped_refptr<printing::PrinterQuery> printer_query;
   if (!profile_io_data_->printing_enabled()->GetValue()) {
     // Reply with NULL query.
@@ -416,7 +416,7 @@
 
 #if defined(OS_ANDROID)
 void PrintingMessageFilter::UpdateFileDescriptor(int render_view_id, int fd) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
   content::WebContents* wc = GetWebContentsForRenderView(render_view_id);
   if (!wc)
     return;
diff --git a/chrome/browser/profiles/avatar_menu.cc b/chrome/browser/profiles/avatar_menu.cc
index ed9c9fc..c8dad05 100644
--- a/chrome/browser/profiles/avatar_menu.cc
+++ b/chrome/browser/profiles/avatar_menu.cc
@@ -24,7 +24,7 @@
 #include "chrome/browser/ui/host_desktop.h"
 #include "chrome/browser/ui/startup/startup_browser_creator.h"
 #include "chrome/common/chrome_switches.h"
-#include "chrome/common/profile_management_switches.h"
+#include "components/signin/core/common/profile_management_switches.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/notification_service.h"
 #include "grit/generated_resources.h"
diff --git a/chrome/browser/profiles/gaia_info_update_service.cc b/chrome/browser/profiles/gaia_info_update_service.cc
index 31d489b..b7fd973 100644
--- a/chrome/browser/profiles/gaia_info_update_service.cc
+++ b/chrome/browser/profiles/gaia_info_update_service.cc
@@ -13,7 +13,7 @@
 #include "chrome/browser/signin/signin_manager_factory.h"
 #include "chrome/browser/sync/profile_sync_service.h"
 #include "chrome/common/pref_names.h"
-#include "chrome/common/profile_management_switches.h"
+#include "components/signin/core/common/profile_management_switches.h"
 #include "content/public/browser/notification_details.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 #include "ui/gfx/image/image.h"
@@ -27,7 +27,7 @@
 // before starting an update. This avoids slowdown during startup.
 const int kMinUpdateIntervalSeconds = 5;
 
-} // namespace
+}  // namespace
 
 GAIAInfoUpdateService::GAIAInfoUpdateService(Profile* profile)
     : profile_(profile) {
diff --git a/chrome/browser/profiles/profile_avatar_icon_util.cc b/chrome/browser/profiles/profile_avatar_icon_util.cc
index 30c0661..192a0b7 100644
--- a/chrome/browser/profiles/profile_avatar_icon_util.cc
+++ b/chrome/browser/profiles/profile_avatar_icon_util.cc
@@ -176,131 +176,74 @@
 
 namespace profiles {
 
+struct IconResourceInfo {
+  int resource_id;
+  const char* filename;
+};
+
 const int kAvatarIconWidth = 38;
-const int kAvatarIconHeight = 31;
+const int kAvatarIconHeight = 38;
 const int kAvatarIconPadding = 2;
 const SkColor kAvatarTutorialBackgroundColor = SkColorSetRGB(0x42, 0x85, 0xf4);
 const SkColor kAvatarTutorialContentTextColor = SkColorSetRGB(0xc6, 0xda, 0xfc);
+const SkColor kAvatarBubbleAccountsBackgroundColor =
+    SkColorSetRGB(0xf3, 0xf3, 0xf3);
 
 const char kDefaultUrlPrefix[] = "chrome://theme/IDR_PROFILE_AVATAR_";
 const char kGAIAPictureFileName[] = "Google Profile Picture.png";
 const char kHighResAvatarFolderName[] = "Avatars";
 
-const int kDefaultAvatarIconResources[] = {
-  IDR_PROFILE_AVATAR_0,
-  IDR_PROFILE_AVATAR_1,
-  IDR_PROFILE_AVATAR_2,
-  IDR_PROFILE_AVATAR_3,
-  IDR_PROFILE_AVATAR_4,
-  IDR_PROFILE_AVATAR_5,
-  IDR_PROFILE_AVATAR_6,
-  IDR_PROFILE_AVATAR_7,
-  IDR_PROFILE_AVATAR_8,
-  IDR_PROFILE_AVATAR_9,
-  IDR_PROFILE_AVATAR_10,
-  IDR_PROFILE_AVATAR_11,
-  IDR_PROFILE_AVATAR_12,
-  IDR_PROFILE_AVATAR_13,
-  IDR_PROFILE_AVATAR_14,
-  IDR_PROFILE_AVATAR_15,
-  IDR_PROFILE_AVATAR_16,
-  IDR_PROFILE_AVATAR_17,
-  IDR_PROFILE_AVATAR_18,
-  IDR_PROFILE_AVATAR_19,
-  IDR_PROFILE_AVATAR_20,
-  IDR_PROFILE_AVATAR_21,
-  IDR_PROFILE_AVATAR_22,
-  IDR_PROFILE_AVATAR_23,
-  IDR_PROFILE_AVATAR_24,
-  IDR_PROFILE_AVATAR_25,
-};
+// This avatar does not exist on the server, the high res copy is in the build.
+const char kNoHighResAvatar[] = "NothingToDownload";
 
-// File names for the high-res avatar icon resources. In the same order as
-// the avatars in kDefaultAvatarIconResources.
-const char* kDefaultAvatarIconResourceFileNames[] = {
-  "avatar_generic.png",
-  "avatar_generic_aqua.png",
-  "avatar_generic_blue.png",
-  "avatar_generic_green.png",
-  "avatar_generic_orange.png",
-  "avatar_generic_purple.png",
-  "avatar_generic_red.png",
-  "avatar_generic_yellow.png",
-  "avatar_secret_agent.png",
-  "avatar_superhero.png",
-  "avatar_volley_ball.png",
-  "avatar_businessman.png",
-  "avatar_ninja.png",
-  "avatar_alien.png",
-  "avatar_smiley.png",
-  "avatar_flower.png",
-  "avatar_pizza.png",
-  "avatar_soccer.png",
-  "avatar_burger.png",
-  "avatar_cat.png",
-  "avatar_cupcake.png",
-  "avatar_dog.png",
-  "avatar_horse.png",
-  "avatar_margarita.png",
-  "avatar_note.png",
-  "avatar_sun_cloud.png",
-};
-
-const size_t kDefaultAvatarIconsCount = arraysize(kDefaultAvatarIconResources);
+// The size of the function-static kDefaultAvatarIconResources array below.
+const size_t kDefaultAvatarIconsCount = 27;
 
 // The first 8 icons are generic.
 const size_t kGenericAvatarIconsCount = 8;
 
-gfx::Image GetSizedAvatarIconWithBorder(const gfx::Image& image,
-                                        bool is_rectangle,
-                                        int width, int height) {
-  if (!is_rectangle)
+// The avatar used as a placeholder (grey silhouette).
+const int kPlaceholderAvatarIcon = 26;
+
+gfx::Image GetSizedAvatarIcon(const gfx::Image& image,
+                              bool is_rectangle,
+                              int width, int height) {
+  if (!is_rectangle && image.Height() <= height)
     return image;
 
   gfx::Size size(width, height);
 
-  // Source for a centered, sized icon with a border.
+  // Source for a centered, sized icon. GAIA images get a border.
   scoped_ptr<gfx::ImageSkiaSource> source(
       new AvatarImageSource(
           *image.ToImageSkia(),
           size,
           std::min(width, height),
           AvatarImageSource::POSITION_CENTER,
-          AvatarImageSource::BORDER_NORMAL));
+          is_rectangle ? AvatarImageSource::BORDER_NORMAL :
+              AvatarImageSource::BORDER_NONE));
 
   return gfx::Image(gfx::ImageSkia(source.release(), size));
 }
 
 gfx::Image GetAvatarIconForMenu(const gfx::Image& image,
                                 bool is_rectangle) {
-  return GetSizedAvatarIconWithBorder(
+  return GetSizedAvatarIcon(
       image, is_rectangle, kAvatarIconWidth, kAvatarIconHeight);
 }
 
 gfx::Image GetAvatarIconForWebUI(const gfx::Image& image,
                                  bool is_rectangle) {
-  if (!is_rectangle)
-    return image;
-
-  gfx::Size size(kAvatarIconWidth, kAvatarIconHeight);
-
-  // Source for a centered, sized icon.
-  scoped_ptr<gfx::ImageSkiaSource> source(
-      new AvatarImageSource(
-          *image.ToImageSkia(),
-          size,
-          std::min(kAvatarIconWidth, kAvatarIconHeight),
-          AvatarImageSource::POSITION_CENTER,
-          AvatarImageSource::BORDER_NONE));
-
-  return gfx::Image(gfx::ImageSkia(source.release(), size));
+  return GetSizedAvatarIcon(image, is_rectangle,
+                            kAvatarIconWidth, kAvatarIconHeight);
 }
 
 gfx::Image GetAvatarIconForTitleBar(const gfx::Image& image,
-                                    bool is_rectangle,
+                                    bool is_gaia_image,
                                     int dst_width,
                                     int dst_height) {
-  if (!is_rectangle)
+  // The image requires no border or resizing.
+  if (!is_gaia_image && image.Height() <= kAvatarIconHeight)
     return image;
 
   int size = std::min(std::min(kAvatarIconWidth, kAvatarIconHeight),
@@ -308,14 +251,15 @@
   gfx::Size dst_size(dst_width, dst_height);
 
   // Source for a sized icon drawn at the bottom center of the canvas,
-  // with an etched border.
+  // with an etched border (for GAIA images).
   scoped_ptr<gfx::ImageSkiaSource> source(
       new AvatarImageSource(
           *image.ToImageSkia(),
           dst_size,
           size,
           AvatarImageSource::POSITION_BOTTOM_CENTER,
-          AvatarImageSource::BORDER_ETCHED));
+          is_gaia_image ? AvatarImageSource::BORDER_ETCHED :
+              AvatarImageSource::BORDER_NONE));
 
   return gfx::Image(gfx::ImageSkia(source.release(), dst_size));
 }
@@ -329,13 +273,59 @@
   return kGenericAvatarIconsCount;
 }
 
+int GetPlaceholderAvatarIndex() {
+  return kPlaceholderAvatarIcon;
+}
+
+int GetPlaceholderAvatarIconResourceID() {
+  return IDR_PROFILE_AVATAR_26;
+}
+
+const IconResourceInfo* GetDefaultAvatarIconResourceInfo(size_t index) {
+  static const IconResourceInfo resource_info[kDefaultAvatarIconsCount] = {
+    { IDR_PROFILE_AVATAR_0, "avatar_generic.png"},
+    { IDR_PROFILE_AVATAR_1, "avatar_generic_aqua.png"},
+    { IDR_PROFILE_AVATAR_2, "avatar_generic_blue.png"},
+    { IDR_PROFILE_AVATAR_3, "avatar_generic_green.png"},
+    { IDR_PROFILE_AVATAR_4, "avatar_generic_orange.png"},
+    { IDR_PROFILE_AVATAR_5, "avatar_generic_purple.png"},
+    { IDR_PROFILE_AVATAR_6, "avatar_generic_red.png"},
+    { IDR_PROFILE_AVATAR_7, "avatar_generic_yellow.png"},
+    { IDR_PROFILE_AVATAR_8, "avatar_secret_agent.png"},
+    { IDR_PROFILE_AVATAR_9, "avatar_superhero.png"},
+    { IDR_PROFILE_AVATAR_10, "avatar_volley_ball.png"},
+    { IDR_PROFILE_AVATAR_11, "avatar_businessman.png"},
+    { IDR_PROFILE_AVATAR_12, "avatar_ninja.png"},
+    { IDR_PROFILE_AVATAR_13, "avatar_alien.png"},
+    { IDR_PROFILE_AVATAR_14, "avatar_smiley.png"},
+    { IDR_PROFILE_AVATAR_15, "avatar_flower.png"},
+    { IDR_PROFILE_AVATAR_16, "avatar_pizza.png"},
+    { IDR_PROFILE_AVATAR_17, "avatar_soccer.png"},
+    { IDR_PROFILE_AVATAR_18, "avatar_burger.png"},
+    { IDR_PROFILE_AVATAR_19, "avatar_cat.png"},
+    { IDR_PROFILE_AVATAR_20, "avatar_cupcake.png"},
+    { IDR_PROFILE_AVATAR_21, "avatar_dog.png"},
+    { IDR_PROFILE_AVATAR_22, "avatar_horse.png"},
+    { IDR_PROFILE_AVATAR_23, "avatar_margarita.png"},
+    { IDR_PROFILE_AVATAR_24, "avatar_note.png"},
+    { IDR_PROFILE_AVATAR_25, "avatar_sun_cloud.png"},
+    { IDR_PROFILE_AVATAR_26, kNoHighResAvatar},
+  };
+  return &resource_info[index];
+}
+
 int GetDefaultAvatarIconResourceIDAtIndex(size_t index) {
   DCHECK(IsDefaultAvatarIconIndex(index));
-  return kDefaultAvatarIconResources[index];
+  return GetDefaultAvatarIconResourceInfo(index)->resource_id;
 }
 
 const char* GetDefaultAvatarIconFileNameAtIndex(size_t index) {
-  return kDefaultAvatarIconResourceFileNames[index];
+  DCHECK(index < kDefaultAvatarIconsCount);
+  return GetDefaultAvatarIconResourceInfo(index)->filename;
+}
+
+const char* GetNoHighResAvatarFileName() {
+  return kNoHighResAvatar;
 }
 
 std::string GetDefaultAvatarIconUrl(size_t index) {
diff --git a/chrome/browser/profiles/profile_avatar_icon_util.h b/chrome/browser/profiles/profile_avatar_icon_util.h
index ea26029..1ed7803 100644
--- a/chrome/browser/profiles/profile_avatar_icon_util.h
+++ b/chrome/browser/profiles/profile_avatar_icon_util.h
@@ -20,10 +20,17 @@
 extern const int kAvatarIconPadding;
 extern const SkColor kAvatarTutorialBackgroundColor;
 extern const SkColor kAvatarTutorialContentTextColor;
+extern const SkColor kAvatarBubbleAccountsBackgroundColor;
 
 // Gets the number of default avatar icons that exist.
 size_t GetDefaultAvatarIconCount();
 
+// Gets the index for the (grey silhouette) avatar used as a placeholder.
+int GetPlaceholderAvatarIndex();
+
+// Gets the resource ID of the placeholder avatar icon.
+int GetPlaceholderAvatarIconResourceID();
+
 // Gets the number of generic avatar icons that exist.
 size_t GetGenericAvatarIconCount();
 
@@ -33,6 +40,9 @@
 // Gets the resource filename of the default avatar icon at |index|.
 const char* GetDefaultAvatarIconFileNameAtIndex(size_t index);
 
+// Gets the file name of an avatar that has no high res version.
+const char* GetNoHighResAvatarFileName();
+
 // Returns a URL for the default avatar icon with specified index.
 std::string GetDefaultAvatarIconUrl(size_t index);
 
@@ -42,12 +52,12 @@
 // Checks if the given URL points to one of the default avatar icons. If it
 // is, returns true and its index through |icon_index|. If not, returns false.
 bool IsDefaultAvatarIconUrl(const std::string& icon_url, size_t *icon_index);
-// Returns a version of |image| of a specific size and with a grey border.
-// Note that no checks are done on the width/height so make sure they're
-// reasonable values; in the range of 16-256 is probably best.
-gfx::Image GetSizedAvatarIconWithBorder(const gfx::Image& image,
-                                        bool is_rectangle,
-                                        int width, int height);
+// Returns a version of |image| of a specific size. Note that no checks are
+// done on the width/height so make sure they're reasonable values; in the
+// range of 16-256 is probably best.
+gfx::Image GetSizedAvatarIcon(const gfx::Image& image,
+                              bool is_rectangle,
+                              int width, int height);
 
 // Returns a version of |image| suitable for use in menus.
 gfx::Image GetAvatarIconForMenu(const gfx::Image& image,
diff --git a/chrome/browser/profiles/profile_avatar_icon_util_unittest.cc b/chrome/browser/profiles/profile_avatar_icon_util_unittest.cc
index bf5e7c2..1cb97ab 100644
--- a/chrome/browser/profiles/profile_avatar_icon_util_unittest.cc
+++ b/chrome/browser/profiles/profile_avatar_icon_util_unittest.cc
@@ -38,7 +38,7 @@
   const gfx::Image& profile_image(
       ResourceBundle::GetSharedInstance().GetImageNamed(IDR_PROFILE_AVATAR_0));
   gfx::Image result =
-      profiles::GetSizedAvatarIconWithBorder(profile_image, false, 50, 50);
+      profiles::GetSizedAvatarIcon(profile_image, false, 50, 50);
 
   EXPECT_FALSE(gfx::test::IsEmpty(result));
   EXPECT_TRUE(gfx::test::IsEqual(profile_image, result));
@@ -47,9 +47,8 @@
   gfx::Image rect_picture(gfx::test::CreateImage());
 
   gfx::Size size(30, 20);
-  gfx::Image result2 =
-      profiles::GetSizedAvatarIconWithBorder(
-          rect_picture, true, size.width(), size.height());
+  gfx::Image result2 = profiles::GetSizedAvatarIcon(
+      rect_picture, true, size.width(), size.height());
 
   VerifyScaling(result2, size);
 }
diff --git a/chrome/browser/profiles/profile_impl_io_data.cc b/chrome/browser/profiles/profile_impl_io_data.cc
index 538604e..5163819 100644
--- a/chrome/browser/profiles/profile_impl_io_data.cc
+++ b/chrome/browser/profiles/profile_impl_io_data.cc
@@ -504,6 +504,7 @@
   if (IsDomainReliabilityMonitoringEnabled()) {
     domain_reliability_monitor_.reset(
         new domain_reliability::DomainReliabilityMonitor(main_context));
+    domain_reliability_monitor_->AddBakedInConfigs();
     network_delegate()->set_domain_reliability_monitor(
         domain_reliability_monitor_.get());
   }
diff --git a/chrome/browser/profiles/profile_info_cache.cc b/chrome/browser/profiles/profile_info_cache.cc
index c8c63c0..8220ede 100644
--- a/chrome/browser/profiles/profile_info_cache.cc
+++ b/chrome/browser/profiles/profile_info_cache.cc
@@ -24,7 +24,7 @@
 #include "chrome/browser/profiles/profile_avatar_icon_util.h"
 #include "chrome/common/chrome_paths.h"
 #include "chrome/common/pref_names.h"
-#include "chrome/common/profile_management_switches.h"
+#include "components/signin/core/common/profile_management_switches.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/notification_service.h"
 #include "grit/generated_resources.h"
@@ -76,7 +76,8 @@
   IDS_DEFAULT_AVATAR_NAME_22,
   IDS_DEFAULT_AVATAR_NAME_23,
   IDS_DEFAULT_AVATAR_NAME_24,
-  IDS_DEFAULT_AVATAR_NAME_25
+  IDS_DEFAULT_AVATAR_NAME_25,
+  IDS_DEFAULT_AVATAR_NAME_26
 };
 
 typedef std::vector<unsigned char> ImageData;
@@ -395,6 +396,9 @@
   int avatar_index = GetAvatarIconIndexOfProfileAtIndex(index);
   std::string key = profiles::GetDefaultAvatarIconFileNameAtIndex(avatar_index);
 
+  if (!strcmp(key.c_str(), profiles::GetNoHighResAvatarFileName()))
+    return NULL;
+
   base::FilePath user_data_dir;
   PathService::Get(chrome::DIR_USER_DATA, &user_data_dir);
   base::FilePath image_path = user_data_dir.
diff --git a/chrome/browser/profiles/profile_list_desktop.cc b/chrome/browser/profiles/profile_list_desktop.cc
index 480ba5d..59ffb78 100644
--- a/chrome/browser/profiles/profile_list_desktop.cc
+++ b/chrome/browser/profiles/profile_list_desktop.cc
@@ -7,7 +7,7 @@
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_avatar_icon_util.h"
 #include "chrome/browser/profiles/profile_info_cache.h"
-#include "chrome/common/profile_management_switches.h"
+#include "components/signin/core/common/profile_management_switches.h"
 #include "grit/generated_resources.h"
 #include "ui/base/l10n/l10n_util.h"
 
@@ -43,16 +43,8 @@
       omitted_item_count_++;
       continue;
     }
-    bool is_gaia_picture =
-        profile_info_->IsUsingGAIAPictureOfProfileAtIndex(i) &&
-        profile_info_->GetGAIAPictureOfProfileAtIndex(i);
 
     gfx::Image icon = profile_info_->GetAvatarIconOfProfileAtIndex(i);
-    if (!switches::IsNewProfileManagement()) {
-      // The old avatar menu uses resized-small images.
-      icon = profiles::GetAvatarIconForMenu(icon, is_gaia_picture);
-    }
-
     AvatarMenu::Item* item = new AvatarMenu::Item(i - omitted_item_count_,
                                                   i,
                                                   icon);
diff --git a/chrome/browser/profiles/profile_manager.cc b/chrome/browser/profiles/profile_manager.cc
index 0f2292d..f32f357 100644
--- a/chrome/browser/profiles/profile_manager.cc
+++ b/chrome/browser/profiles/profile_manager.cc
@@ -46,8 +46,8 @@
 #include "chrome/common/chrome_switches.h"
 #include "chrome/common/logging_chrome.h"
 #include "chrome/common/pref_names.h"
-#include "chrome/common/profile_management_switches.h"
 #include "chrome/common/url_constants.h"
+#include "components/signin/core/common/profile_management_switches.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/notification_service.h"
 #include "content/public/browser/user_metrics.h"
diff --git a/chrome/browser/profiles/profile_metrics.cc b/chrome/browser/profiles/profile_metrics.cc
index b04c237..feb1922 100644
--- a/chrome/browser/profiles/profile_metrics.cc
+++ b/chrome/browser/profiles/profile_metrics.cc
@@ -107,8 +107,9 @@
   AVATAR_MARGARITA,
   AVATAR_NOTE,
   AVATAR_SUN_CLOUD,
-  AVATAR_UNKNOWN,           // 26
-  AVATAR_GAIA,              // 27
+  AVATAR_PLACEHOLDER,
+  AVATAR_UNKNOWN,           // 27
+  AVATAR_GAIA,              // 28
   NUM_PROFILE_AVATAR_METRICS
 };
 
@@ -237,7 +238,10 @@
     case 25:
       icon_name = AVATAR_SUN_CLOUD;
       break;
-    case 27:
+    case 26:
+      icon_name = AVATAR_PLACEHOLDER;
+      break;
+    case 28:
       icon_name = AVATAR_GAIA;
       break;
     default:  // We should never actually get here.
diff --git a/chrome/browser/profiles/profile_shortcut_manager_win.cc b/chrome/browser/profiles/profile_shortcut_manager_win.cc
index d7f1beb..721a734 100644
--- a/chrome/browser/profiles/profile_shortcut_manager_win.cc
+++ b/chrome/browser/profiles/profile_shortcut_manager_win.cc
@@ -103,6 +103,7 @@
   IDR_PROFILE_AVATAR_2X_23,
   IDR_PROFILE_AVATAR_2X_24,
   IDR_PROFILE_AVATAR_2X_25,
+  IDR_PROFILE_AVATAR_2X_26,
 };
 
 // Badges |app_icon_bitmap| with |avatar_bitmap| at the bottom right corner and
@@ -110,28 +111,18 @@
 SkBitmap BadgeIcon(const SkBitmap& app_icon_bitmap,
                    const SkBitmap& avatar_bitmap,
                    int scale_factor) {
-  // TODO(rlp): Share this chunk of code with
-  // avatar_menu_button::DrawTaskBarDecoration.
-  SkBitmap source_bitmap = avatar_bitmap;
-  if ((avatar_bitmap.width() == scale_factor * profiles::kAvatarIconWidth) &&
-      (avatar_bitmap.height() == scale_factor * profiles::kAvatarIconHeight)) {
-    // Shave a couple of columns so the bitmap is more square. So when
-    // resized to a square aspect ratio it looks pretty.
-    gfx::Rect frame(scale_factor * profiles::kAvatarIconWidth,
-                    scale_factor * profiles::kAvatarIconHeight);
-    frame.Inset(scale_factor * 2, 0, scale_factor * 2, 0);
-    avatar_bitmap.extractSubset(&source_bitmap, gfx::RectToSkIRect(frame));
-  } else {
-    NOTREACHED();
-  }
+  // All icons, whether cartoon, GAIA or placeholder, should be square.
+  // TODO(mlerman) - uncomment the ASSERT once noms@ lands the square images.
+  // DCHECK(avatar_bitmap.width() == avatar_bitmap.height());
+
   int avatar_badge_size = kProfileAvatarBadgeSize;
   if (app_icon_bitmap.width() != kShortcutIconSize) {
     avatar_badge_size =
         app_icon_bitmap.width() * kProfileAvatarBadgeSize / kShortcutIconSize;
   }
   SkBitmap sk_icon = skia::ImageOperations::Resize(
-      source_bitmap, skia::ImageOperations::RESIZE_LANCZOS3, avatar_badge_size,
-      source_bitmap.height() * avatar_badge_size / source_bitmap.width());
+      avatar_bitmap, skia::ImageOperations::RESIZE_LANCZOS3, avatar_badge_size,
+      avatar_bitmap.height() * avatar_badge_size / avatar_bitmap.width());
 
   // Overlay the avatar on the icon, anchoring it to the bottom-right of the
   // icon.
diff --git a/chrome/browser/profiles/profile_window.cc b/chrome/browser/profiles/profile_window.cc
index f6ed167..84a36f5 100644
--- a/chrome/browser/profiles/profile_window.cc
+++ b/chrome/browser/profiles/profile_window.cc
@@ -8,11 +8,16 @@
 #include "base/files/file_path.h"
 #include "base/prefs/pref_service.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/strings/utf_string_conversions.h"
+#include "chrome/browser/about_flags.h"
 #include "chrome/browser/browser_process.h"
+#include "chrome/browser/pref_service_flags_storage.h"
 #include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/profiles/profile_avatar_icon_util.h"
 #include "chrome/browser/profiles/profile_manager.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_dialogs.h"
+#include "chrome/common/chrome_switches.h"
 #include "chrome/common/pref_names.h"
 #include "chrome/common/url_constants.h"
 #include "content/public/browser/browser_thread.h"
@@ -220,9 +225,14 @@
 void CreateAndSwitchToNewProfile(chrome::HostDesktopType desktop_type,
                                  ProfileSwitchingDoneCallback callback,
                                  ProfileMetrics::ProfileAdd metric) {
+  ProfileInfoCache& cache =
+      g_browser_process->profile_manager()->GetProfileInfoCache();
+
+  int placeholder_avatar_index = profiles::GetPlaceholderAvatarIndex();
   ProfileManager::CreateMultiProfileAsync(
-      base::string16(),
-      base::string16(),
+      cache.ChooseNameForNewProfile(placeholder_avatar_index),
+      base::UTF8ToUTF16(profiles::GetDefaultAvatarIconUrl(
+          placeholder_avatar_index)),
       base::Bind(&OpenBrowserWindowForProfile,
                  callback,
                  true,
@@ -291,4 +301,19 @@
   }
 }
 
+void EnableNewProfileManagementPreview() {
+  const char kNewProfileManagementExperimentInternalName[] =
+      "enable-new-profile-management";
+  about_flags::PrefServiceFlagsStorage flags_storage(
+      g_browser_process->local_state());
+  about_flags::SetExperimentEnabled(
+      &flags_storage,
+      kNewProfileManagementExperimentInternalName,
+      true);
+
+  CommandLine::ForCurrentProcess()->AppendSwitch(
+      switches::kNewProfileManagement);
+  chrome::ShowUserManagerWithTutorial(profiles::USER_MANAGER_TUTORIAL_OVERVIEW);
+}
+
 }  // namespace profiles
diff --git a/chrome/browser/profiles/profile_window.h b/chrome/browser/profiles/profile_window.h
index aa224b6..cf034b1 100644
--- a/chrome/browser/profiles/profile_window.h
+++ b/chrome/browser/profiles/profile_window.h
@@ -82,6 +82,9 @@
 // the tutorial.
 void ShowUserManagerMaybeWithTutorial(Profile* profile);
 
+// Enables new profile management preview and shows the user manager tutorial.
+void EnableNewProfileManagementPreview();
+
 }  // namespace profiles
 
 #endif  // CHROME_BROWSER_PROFILES_PROFILE_WINDOW_H_
diff --git a/chrome/browser/referrer_policy_browsertest.cc b/chrome/browser/referrer_policy_browsertest.cc
index cea9596..ab6a221 100644
--- a/chrome/browser/referrer_policy_browsertest.cc
+++ b/chrome/browser/referrer_policy_browsertest.cc
@@ -206,8 +206,12 @@
       tab_added_observer.Wait();
       tab = tab_added_observer.GetTab();
       EXPECT_TRUE(tab);
-      content::WaitForLoadStop(tab);
-      EXPECT_EQ(expected_title, tab->GetTitle());
+      content::TitleWatcher title_watcher2(tab, expected_title);
+
+      // Watch for all possible outcomes to avoid timeouts if something breaks.
+      AddAllPossibleTitles(start_url, &title_watcher2);
+
+      EXPECT_EQ(expected_title, title_watcher2.WaitAndGetTitle());
     }
 
     EXPECT_EQ(referrer_policy,
diff --git a/chrome/browser/renderer_host/chrome_render_widget_host_view_mac_delegate.h b/chrome/browser/renderer_host/chrome_render_widget_host_view_mac_delegate.h
index 0150044..a7f4350 100644
--- a/chrome/browser/renderer_host/chrome_render_widget_host_view_mac_delegate.h
+++ b/chrome/browser/renderer_host/chrome_render_widget_host_view_mac_delegate.h
@@ -39,6 +39,9 @@
 
 - (void)viewGone:(NSView*)view;
 - (BOOL)handleEvent:(NSEvent*)event;
+- (void)gotUnhandledWheelEvent;
+- (void)scrollOffsetPinnedToLeft:(BOOL)left toRight:(BOOL)right;
+- (void)setHasHorizontalScrollbar:(BOOL)hasHorizontalScrollbar;
 - (BOOL)validateUserInterfaceItem:(id<NSValidatedUserInterfaceItem>)item
                       isValidItem:(BOOL*)valid;
 
diff --git a/chrome/browser/renderer_host/chrome_render_widget_host_view_mac_delegate.mm b/chrome/browser/renderer_host/chrome_render_widget_host_view_mac_delegate.mm
index b645508..a6b260f 100644
--- a/chrome/browser/renderer_host/chrome_render_widget_host_view_mac_delegate.mm
+++ b/chrome/browser/renderer_host/chrome_render_widget_host_view_mac_delegate.mm
@@ -106,8 +106,19 @@
   return [historySwiper_ handleEvent:event];
 }
 
-- (void)gotWheelEventConsumed:(BOOL)consumed {
-  [historySwiper_ gotWheelEventConsumed:consumed];
+// Notification that a wheel event was unhandled.
+- (void)gotUnhandledWheelEvent {
+  [historySwiper_ gotUnhandledWheelEvent];
+}
+
+// Notification of scroll offset pinning.
+- (void)scrollOffsetPinnedToLeft:(BOOL)left toRight:(BOOL)right {
+  [historySwiper_ scrollOffsetPinnedToLeft:left toRight:right];
+}
+
+// Notification of whether the view has a horizontal scrollbar.
+- (void)setHasHorizontalScrollbar:(BOOL)has_horizontal_scrollbar {
+  [historySwiper_ setHasHorizontalScrollbar:has_horizontal_scrollbar];
 }
 
 // NSWindow events.
diff --git a/chrome/browser/renderer_host/chrome_render_widget_host_view_mac_history_swiper.h b/chrome/browser/renderer_host/chrome_render_widget_host_view_mac_history_swiper.h
index cb02412..c9ad41d 100644
--- a/chrome/browser/renderer_host/chrome_render_widget_host_view_mac_history_swiper.h
+++ b/chrome/browser/renderer_host/chrome_render_widget_host_view_mac_history_swiper.h
@@ -17,18 +17,10 @@
 @end
 
 namespace history_swiper {
-
 enum NavigationDirection {
   kBackwards = 0,
   kForwards,
 };
-
-enum GestureHandledState {
-  kPending,    // Still waiting to determine whether the gesture was handled.
-  kHandled,    // At least 1 event in the gesture was handled by blink.
-  kUnhandled,  // No events so far have been handled by blink.
-};
-
 } // history_swiper
 
 // Responsible for maintaining state for 2-finger swipe history navigation.
@@ -41,10 +33,20 @@
 @class HistoryOverlayController;
 @interface HistorySwiper : NSObject {
  @private
-  // Whether blink has handled the gesture.  This enum gets reset to kPending
-  // whenever a new gesture starts.  History swiping is only enabled if blink
-  // has never handled any of the events in the gesture.
-  history_swiper::GestureHandledState gestureHandledState_;
+  // If the viewport is scrolled all the way to the left or right.
+  // Used for history swiping.
+  BOOL isPinnedLeft_;
+  BOOL isPinnedRight_;
+
+  // If the main frame has a horizontal scrollbar.
+  // Used for history swiping.
+  BOOL hasHorizontalScrollbar_;
+
+  // If a scroll event came back unhandled from the renderer. Set to |NO| at
+  // the start of a scroll gesture, and then to |YES| if a scroll event comes
+  // back unhandled from the renderer.
+  // Used for history swiping.
+  BOOL gotUnhandledWheelEvent_;
 
   // This controller will exist if and only if the UI is in history swipe mode.
   HistoryOverlayController* historyOverlay_;
@@ -93,7 +95,9 @@
 // NSScrollWheel. We look at the phase to determine whether to trigger history
 // swiping
 - (BOOL)handleEvent:(NSEvent*)event;
-- (void)gotWheelEventConsumed:(BOOL)consumed;
+- (void)gotUnhandledWheelEvent;
+- (void)scrollOffsetPinnedToLeft:(BOOL)left toRight:(BOOL)right;
+- (void)setHasHorizontalScrollbar:(BOOL)hasHorizontalScrollbar;
 
 // The event passed in is a gesture event, and has touch data associated with
 // the trackpad.
diff --git a/chrome/browser/renderer_host/chrome_render_widget_host_view_mac_history_swiper.mm b/chrome/browser/renderer_host/chrome_render_widget_host_view_mac_history_swiper.mm
index 8cf35cd..47f795e 100644
--- a/chrome/browser/renderer_host/chrome_render_widget_host_view_mac_history_swiper.mm
+++ b/chrome/browser/renderer_host/chrome_render_widget_host_view_mac_history_swiper.mm
@@ -43,12 +43,17 @@
   return NO;
 }
 
-- (void)gotWheelEventConsumed:(BOOL)consumed {
-  if (consumed) {
-    gestureHandledState_ = history_swiper::kHandled;
-  } else if (gestureHandledState_ == history_swiper::kPending) {
-    gestureHandledState_ = history_swiper::kUnhandled;
-  }
+- (void)gotUnhandledWheelEvent {
+  gotUnhandledWheelEvent_ = YES;
+}
+
+- (void)scrollOffsetPinnedToLeft:(BOOL)left toRight:(BOOL)right {
+  isPinnedLeft_ = left;
+  isPinnedRight_ = right;
+}
+
+- (void)setHasHorizontalScrollbar:(BOOL)hasHorizontalScrollbar {
+  hasHorizontalScrollbar_ = hasHorizontalScrollbar;
 }
 
 - (BOOL)canRubberbandLeft:(NSView*)view {
@@ -88,7 +93,7 @@
   // Reset state pertaining to previous gestures.
   historySwipeCancelled_ = NO;
   gestureStartPointValid_ = NO;
-  gestureHandledState_ = history_swiper::kPending;
+  gotUnhandledWheelEvent_ = NO;
   receivedTouch_ = NO;
   mouseScrollDelta_ = NSZeroSize;
 }
@@ -338,6 +343,14 @@
   if (!browserCanMove)
     return NO;
 
+  if (isRightScroll) {
+    if (hasHorizontalScrollbar_ && !isPinnedRight_)
+      return NO;
+  } else {
+    if (hasHorizontalScrollbar_ && !isPinnedLeft_)
+      return NO;
+  }
+
   [self initiateMagicMouseHistorySwipe:isRightScroll event:theEvent];
   return YES;
 }
@@ -474,9 +487,9 @@
   if (![delegate_ shouldAllowHistorySwiping])
     return NO;
 
-  // Only enable history swiping if blink has never handled any of the events in
-  // the gesture.
-  if (gestureHandledState_ != history_swiper::kUnhandled)
+  // Don't even consider enabling history swiping until blink has decided it is
+  // not going to handle the event.
+  if (!gotUnhandledWheelEvent_)
     return NO;
 
   // If the window has a horizontal scroll bar, sometimes Cocoa gets confused
@@ -512,6 +525,14 @@
   if (inverted)
     isRightScroll = !isRightScroll;
 
+  if (isRightScroll) {
+    if (hasHorizontalScrollbar_ && !isPinnedRight_)
+      return NO;
+  } else {
+    if (hasHorizontalScrollbar_ && !isPinnedLeft_)
+      return NO;
+  }
+
   history_swiper::NavigationDirection direction =
       isRightScroll ? history_swiper::kForwards : history_swiper::kBackwards;
   BOOL browserCanMove =
diff --git a/chrome/browser/renderer_host/chrome_render_widget_host_view_mac_history_swiper_unit_test.mm b/chrome/browser/renderer_host/chrome_render_widget_host_view_mac_history_swiper_unit_test.mm
index 226bb73..58fac22 100644
--- a/chrome/browser/renderer_host/chrome_render_widget_host_view_mac_history_swiper_unit_test.mm
+++ b/chrome/browser/renderer_host/chrome_render_widget_host_view_mac_history_swiper_unit_test.mm
@@ -168,7 +168,9 @@
   moveGestureAtPoint(makePoint(0.5, 0.5));
 
   // Callbacks from blink to set the relevant state for history swiping.
-  [historySwiper_ gotWheelEventConsumed:NO];
+  [historySwiper_ gotUnhandledWheelEvent];
+  [historySwiper_ scrollOffsetPinnedToLeft:YES toRight:YES];
+  [historySwiper_ setHasHorizontalScrollbar:NO];
 }
 
 void MacHistorySwiperTest::moveGestureAtPoint(NSPoint point) {
@@ -320,7 +322,9 @@
   EXPECT_EQ(end_count_, 0);
 
   // Callbacks from blink to set the relevant state for history swiping.
-  [historySwiper_ gotWheelEventConsumed:NO];
+  [historySwiper_ gotUnhandledWheelEvent];
+  [historySwiper_ scrollOffsetPinnedToLeft:YES toRight:YES];
+  [historySwiper_ setHasHorizontalScrollbar:NO];
 
   momentumMoveGestureAtPoint(makePoint(0.2, 0.5));
   EXPECT_EQ(begin_count_, 1);
@@ -350,7 +354,9 @@
   [historySwiper_ handleEvent:scrollEvent];
 
   // Callbacks from blink to set the relevant state for history swiping.
-  [historySwiper_ gotWheelEventConsumed:NO];
+  [historySwiper_ gotUnhandledWheelEvent];
+  [historySwiper_ scrollOffsetPinnedToLeft:YES toRight:YES];
+  [historySwiper_ setHasHorizontalScrollbar:NO];
 
   // Send a momentum move gesture.
   scrollEvent =
@@ -400,23 +406,3 @@
   NSEvent* beganEvent = scrollWheelEventWithPhase(NSEventPhaseBegan);
   EXPECT_FALSE([historySwiper_ handleEvent:beganEvent]);
 }
-
-// If any event is handled by blink, history swiping should not trigger.
-TEST_F(MacHistorySwiperTest, EventHandledByBlink) {
-  // These tests require 10.7+ APIs.
-  if (![NSEvent
-          respondsToSelector:@selector(isSwipeTrackingFromScrollEventsEnabled)])
-    return;
-
-  startGestureInMiddle();
-  moveGestureInMiddle();
-
-  // An event is handled by blink.
-  [historySwiper_ gotWheelEventConsumed:YES];
-
-  // A new event comes in, that isn't handled by blink.
-  moveGestureAtPoint(makePoint(0.2, 0.5));
-  [historySwiper_ gotWheelEventConsumed:NO];
-
-  EXPECT_EQ(begin_count_, 0);
-}
diff --git a/chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate.cc b/chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate.cc
index 8fe2144..819a381 100644
--- a/chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate.cc
+++ b/chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate.cc
@@ -33,7 +33,6 @@
 #include "chrome/browser/safe_browsing/safe_browsing_service.h"
 #include "chrome/browser/signin/signin_header_helper.h"
 #include "chrome/browser/tab_contents/tab_util.h"
-#include "chrome/browser/ui/auto_login_prompter.h"
 #include "chrome/browser/ui/login/login_prompt.h"
 #include "chrome/browser/ui/sync/one_click_signin_helper.h"
 #include "chrome/common/extensions/extension_constants.h"
@@ -75,6 +74,7 @@
 
 #if defined(OS_ANDROID)
 #include "chrome/browser/android/intercept_download_resource_throttle.h"
+#include "chrome/browser/ui/android/infobars/auto_login_prompter.h"
 #include "components/navigation_interception/intercept_navigation_delegate.h"
 #else
 #include "chrome/browser/apps/app_url_redirector.h"
@@ -600,11 +600,13 @@
     IPC::Sender* sender) {
   const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request);
 
+#if defined(OS_ANDROID)
   // See if the response contains the X-Auto-Login header.  If so, this was
   // a request for a login page, and the server is allowing the browser to
   // suggest auto-login, if available.
   AutoLoginPrompter::ShowInfoBarIfPossible(request, info->GetChildID(),
                                            info->GetRouteID());
+#endif
 
   ProfileIOData* io_data = ProfileIOData::FromResourceContext(resource_context);
 
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings.grd b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings.grd
new file mode 100644
index 0000000..97d5379
--- /dev/null
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings.grd
@@ -0,0 +1,2370 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<grit base_dir="." current_release="1" enc_check="möl" latest_public_release="0" source_lang_id="en">
+  <outputs>
+    <output filename="_locales/am/messages.json" type="chrome_messages_json" lang="am"/>
+    <output filename="_locales/ar/messages.json" type="chrome_messages_json" lang="ar"/>
+    <output filename="_locales/bg/messages.json" type="chrome_messages_json" lang="bg"/>
+    <output filename="_locales/bn/messages.json" type="chrome_messages_json" lang="bn"/>
+    <output filename="_locales/ca/messages.json" type="chrome_messages_json" lang="ca"/>
+    <output filename="_locales/cs/messages.json" type="chrome_messages_json" lang="cs"/>
+    <output filename="_locales/da/messages.json" type="chrome_messages_json" lang="da"/>
+    <output filename="_locales/de/messages.json" type="chrome_messages_json" lang="de"/>
+    <output filename="_locales/el/messages.json" type="chrome_messages_json" lang="el"/>
+    <output filename="_locales/en_GB/messages.json" type="chrome_messages_json" lang="en-GB"/>
+    <output filename="_locales/en/messages.json" type="chrome_messages_json" lang="en"/>
+    <output filename="_locales/es/messages.json" type="chrome_messages_json" lang="es"/>
+    <output filename="_locales/es_419/messages.json" type="chrome_messages_json" lang="es-419"/>
+    <output filename="_locales/et/messages.json" type="chrome_messages_json" lang="et"/>
+    <output filename="_locales/fa/messages.json" type="chrome_messages_json" lang="fa"/>
+    <output filename="_locales/fi/messages.json" type="chrome_messages_json" lang="fi"/>
+    <output filename="_locales/fil/messages.json" type="chrome_messages_json" lang="fil"/>
+    <output filename="_locales/fr/messages.json" type="chrome_messages_json" lang="fr"/>
+    <output filename="_locales/gu/messages.json" type="chrome_messages_json" lang="gu"/>
+    <output filename="_locales/he/messages.json" type="chrome_messages_json" lang="he"/>
+    <output filename="_locales/hi/messages.json" type="chrome_messages_json" lang="hi"/>
+    <output filename="_locales/hr/messages.json" type="chrome_messages_json" lang="hr"/>
+    <output filename="_locales/hu/messages.json" type="chrome_messages_json" lang="hu"/>
+    <output filename="_locales/id/messages.json" type="chrome_messages_json" lang="id"/>
+    <output filename="_locales/it/messages.json" type="chrome_messages_json" lang="it"/>
+    <output filename="_locales/ja/messages.json" type="chrome_messages_json" lang="ja"/>
+    <output filename="_locales/kn/messages.json" type="chrome_messages_json" lang="kn"/>
+    <output filename="_locales/ko/messages.json" type="chrome_messages_json" lang="ko"/>
+    <output filename="_locales/lt/messages.json" type="chrome_messages_json" lang="lt"/>
+    <output filename="_locales/lv/messages.json" type="chrome_messages_json" lang="lv"/>
+    <output filename="_locales/ml/messages.json" type="chrome_messages_json" lang="ml"/>
+    <output filename="_locales/mr/messages.json" type="chrome_messages_json" lang="mr"/>
+    <output filename="_locales/ms/messages.json" type="chrome_messages_json" lang="ms"/>
+    <output filename="_locales/nl/messages.json" type="chrome_messages_json" lang="nl"/>
+    <output filename="_locales/nb/messages.json" type="chrome_messages_json" lang="no"/>
+    <output filename="_locales/pl/messages.json" type="chrome_messages_json" lang="pl"/>
+    <output filename="_locales/pt_BR/messages.json" type="chrome_messages_json" lang="pt-BR"/>
+    <output filename="_locales/pt_PT/messages.json" type="chrome_messages_json" lang="pt-PT"/>
+    <output filename="_locales/ro/messages.json" type="chrome_messages_json" lang="ro"/>
+    <output filename="_locales/ru/messages.json" type="chrome_messages_json" lang="ru"/>
+    <output filename="_locales/sk/messages.json" type="chrome_messages_json" lang="sk"/>
+    <output filename="_locales/sl/messages.json" type="chrome_messages_json" lang="sl"/>
+    <output filename="_locales/sr/messages.json" type="chrome_messages_json" lang="sr"/>
+    <output filename="_locales/sv/messages.json" type="chrome_messages_json" lang="sv"/>
+    <output filename="_locales/sw/messages.json" type="chrome_messages_json" lang="sw"/>
+    <output filename="_locales/ta/messages.json" type="chrome_messages_json" lang="ta"/>
+    <output filename="_locales/te/messages.json" type="chrome_messages_json" lang="te"/>
+    <output filename="_locales/th/messages.json" type="chrome_messages_json" lang="th"/>
+    <output filename="_locales/tr/messages.json" type="chrome_messages_json" lang="tr"/>
+    <output filename="_locales/uk/messages.json" type="chrome_messages_json" lang="uk"/>
+    <output filename="_locales/vi/messages.json" type="chrome_messages_json" lang="vi"/>
+    <output filename="_locales/zh_CN/messages.json" type="chrome_messages_json" lang="zh-CN"/>
+    <output filename="_locales/zh_TW/messages.json" type="chrome_messages_json" lang="zh-TW"/>
+  </outputs>
+  <translations>
+    <!-- TODO: Add when we have new .xtb files. -->
+  </translations>
+  <release allow_pseudo="false" seq="1">
+    <messages fallback_to_english="true">
+      <message desc="The locale you're translating into. For use in URL to localized pages.  e.g. http://www.google.com/?hl=en." name="IDS_LOCALE">
+        en
+      </message>
+      <message desc="The product name for ChromeVox." name="IDS_CHROMEVOX_NAME">
+        ChromeVox
+      </message>
+      <message desc="The product description, displayed in the Chrome Extensions page." name="IDS_CHROMEVOX_DESCRIPTION">
+        ChromeVox - Giving Voice to Chrome
+      </message>
+      <message desc="The description of the stopSpeech key.  Displayed in the Options page." name="IDS_CHROMEVOX_STOP_SPEECH_KEY">
+        Stop speech
+      </message>
+      <message desc="The description of the toggleStickyMode key. Displayed in the Options page." name="IDS_CHROMEVOX_TOGGLE_STICKY_MODE">
+        Enable/Disable sticky mode
+      </message>
+      <message desc="The description of the prefix key. Displayed in the Options page." name="IDS_CHROMEVOX_PREFIX_KEY">
+        Prefix key
+      </message>
+      <message desc="The description of the handleTab key. Displayed in the Options page." name="IDS_CHROMEVOX_HANDLE_TAB_NEXT">
+        Jump to next focusable item
+      </message>
+      <message desc="The description of the handleTab key. Displayed in the Options page." name="IDS_CHROMEVOX_HANDLE_TAB_PREV">
+        Jump to previous focusable item
+      </message>
+      <message desc="The description of the backward key. Displayed in the Options page." name="IDS_CHROMEVOX_BACKWARD">
+        Navigate backward
+      </message>
+      <message desc="The description of the forward key. Displayed in the Options page." name="IDS_CHROMEVOX_FORWARD">
+        Navigate forward
+      </message>
+      <message desc="The description of the left key. Displayed in the Options page." name="IDS_CHROMEVOX_LEFT">
+        Move left
+      </message>
+      <message desc="The description of the right key. Displayed in the Options page." name="IDS_CHROMEVOX_RIGHT">
+        Move right
+      </message>
+      <message desc="The description of the skip backward key that functions only during continuous reading (when ChromeVox is speaking the entire page without pausing). The skip backward key allows the user to skip backward without pausing the continuous reading. Displayed in the Options page." name="IDS_CHROMEVOX_SKIP_BACKWARD">
+        Skip backward during continuous reading
+      </message>
+      <message desc="The description of the skip forward key that functions only during continuous reading (when ChromeVox is speaking the entire page without pausing). The skip forward key allows the user to skip forward without pausing the continuous reading. Displayed in the Options page." name="IDS_CHROMEVOX_SKIP_FORWARD">
+        Skip forward during continuous reading
+      </message>
+      <message desc="The description of the previousGranularity key. Displayed in the Options page." name="IDS_CHROMEVOX_PREVIOUS_GRANULARITY">
+        Decrease navigation granularity
+      </message>
+      <message desc='The description of the nextGranularity key.  Navigation granularity can be e.g. "sentence level", "word level".  Granularity is also referred as "level of detail".  c.f. http://chromevox.com/tutorial/text_navigation.html Displayed in the Options page.' name="IDS_CHROMEVOX_NEXT_GRANULARITY">
+        Increase navigation granularity
+      </message>
+      <message desc="The description of the actOnCurrentItem key. The current item is the HTML element which has focus.  Taking action is similar to using the mouse to click on the element. Displayed in the Options page." name="IDS_CHROMEVOX_ACT_ON_CURRENT_ITEM">
+        Take action on current item
+      </message>
+      <message desc="The description of the forceClickOnCurrentItem key. Displayed in the Options page." name="IDS_CHROMEVOX_FORCE_CLICK_ON_CURRENT_ITEM">
+        Click on current item
+      </message>
+      <message desc="The description of the readLinkURL key. Displayed in the Options page." name="IDS_CHROMEVOX_READ_LINK_URL">
+        Announce the URL behind a link
+      </message>
+      <message desc="The description of the readCurrentTitle key. Displayed in the Options page." name="IDS_CHROMEVOX_READ_CURRENT_TITLE">
+        Announce the title of the current page
+      </message>
+      <message desc="The description of the readCurrentURL key. Displayed in the Options page." name="IDS_CHROMEVOX_READ_CURRENT_URL">
+        Announce the URL of the current page
+      </message>
+      <message desc="The description of the readFromHere key. Displayed in the Options page." name="IDS_CHROMEVOX_READ_FROM_HERE">
+        Start reading from current location
+      </message>
+      <message desc="The description of the showPowerKey key. Displayed in the Options page." name="IDS_CHROMEVOX_SHOW_POWER_KEY">
+        Open ChromeVox keyboard help
+      </message>
+      <message desc="The description of the hidePowerKey key. Displayed in the Options page." name="IDS_CHROMEVOX_HIDE_POWER_KEY">
+        Hide ChromeVox help
+      </message>
+      <message desc="Spoken instruction on navigating power key." name="IDS_CHROMEVOX_POWER_KEY_HELP">
+        Press up or down to review commands, press enter to activate
+      </message>
+      <message desc="The description of the help key. Displayed in the Options page." name="IDS_CHROMEVOX_HELP">
+        Open ChromeVox tutorial
+      </message>
+      <message desc="The description of the toggleSearchWidget key. Displayed in the Options page." name="IDS_CHROMEVOX_TOGGLE_SEARCH_WIDGET">
+        Toggle search widget
+      </message>
+      <message desc="The description of the showOptionsPage key. Displayed in the Options page." name="IDS_CHROMEVOX_SHOW_OPTIONS_PAGE">
+        Open options page
+      </message>
+      <message desc="The description of the showKbExplorerPage key. Displayed in the Options page." name="IDS_CHROMEVOX_SHOW_KB_EXPLORER_PAGE">
+        Open keyboard explorer
+      </message>
+      <message desc="The description of the decreaseTtsRate key. Displayed in the Options page." name="IDS_CHROMEVOX_DECREASE_TTS_RATE">
+        Decrease rate of speech
+      </message>
+      <message desc="The description of the increaseTtsRate key. Displayed in the Options page." name="IDS_CHROMEVOX_INCREASE_TTS_RATE">
+        Increase rate of speech
+      </message>
+      <message desc="The description of the decreaseTtsPitch key.  This key's action is passed to the text-to-speech voice engine and controls the voice's pitch. c.f. http://en.wikipedia.org/wiki/Pitch_(music) Displayed in the Options page." name="IDS_CHROMEVOX_DECREASE_TTS_PITCH">
+        Decrease pitch
+      </message>
+      <message desc="The description of the increaseTtsPitch key. Displayed in the Options page." name="IDS_CHROMEVOX_INCREASE_TTS_PITCH">
+        Increase pitch
+      </message>
+      <message desc="The description of the decreaseTtsVolume key. Displayed in the Options page." name="IDS_CHROMEVOX_DECREASE_TTS_VOLUME">
+        Decrease speech volume
+      </message>
+      <message desc="The description of the increaseTtsVolume key. Displayed in the Options page." name="IDS_CHROMEVOX_INCREASE_TTS_VOLUME">
+        Increase speech volume
+      </message>
+      <message desc="The description of the showFormsList key. Displayed in the Options page." name="IDS_CHROMEVOX_SHOW_FORMS_LIST">
+        Show forms list
+      </message>
+      <message desc="The description of the showHeadingsList key. Displayed in the Options page." name="IDS_CHROMEVOX_SHOW_HEADINGS_LIST">
+        Show headings list
+      </message>
+      <message desc="The description of the showLinksList key. Displayed in the Options page." name="IDS_CHROMEVOX_SHOW_LINKS_LIST">
+        Show links list
+      </message>
+      <message desc="The description of the showTablesList key. Displayed in the Options page." name="IDS_CHROMEVOX_SHOW_TABLES_LIST">
+        Show tables list
+      </message>
+      <message desc="The description of the showLandmarksList key. Displayed in the Options page." name="IDS_CHROMEVOX_SHOW_LANDMARKS_LIST">
+        Show landmarks list
+      </message>
+      <message desc="The description of the previousRow key. Displayed in the Options page." name="IDS_CHROMEVOX_PREVIOUS_ROW">
+        Previous table row
+      </message>
+      <message desc="The description of the nextRow key. Displayed in the Options page." name="IDS_CHROMEVOX_NEXT_ROW">
+        Next table row
+      </message>
+      <message desc="The description of the previousCol key. Displayed in the Options page." name="IDS_CHROMEVOX_PREVIOUS_COL">
+        Previous table column
+      </message>
+      <message desc="The description of the nextCol key. Displayed in the Options page." name="IDS_CHROMEVOX_NEXT_COL">
+        Next table column
+      </message>
+      <message desc="The description of the announceHeaders key. Displayed in the Options page." name="IDS_CHROMEVOX_ANNOUNCE_HEADERS">
+        Announce the headers of the current cell
+      </message>
+      <message desc="The description of the speakTableLocation key.  This key's action will describe where in the table the focus currently is. Displayed in the Options page." name="IDS_CHROMEVOX_SPEAK_TABLE_LOCATION">
+        Announce current cell coordinates
+      </message>
+      <message desc="The description of the guessRowHeader key. In a table, attempt to determine the header for the row containing the current cell, even if uncertain. Displayed in the Options page." name="IDS_CHROMEVOX_GUESS_ROW_HEADER">
+        Make a guess at the row header of the current cell
+      </message>
+      <message desc="The description of the guessColHeader key. Displayed in the Options page." name="IDS_CHROMEVOX_GUESS_COL_HEADER">
+        Make a guess at the column header of the current cell
+      </message>
+      <message desc="The description of the skipToBeginning key. Displayed in the Options page." name="IDS_CHROMEVOX_SKIP_TO_BEGINNING">
+        Go to beginning of table
+      </message>
+      <message desc="The description of the skipToEnd key. Displayed in the Options page." name="IDS_CHROMEVOX_SKIP_TO_END">
+        Go to end of table
+      </message>
+      <message desc="The description of the skipToRowBeginning key. Displayed in the Options page." name="IDS_CHROMEVOX_SKIP_TO_ROW_BEGINNING">
+        Go to beginning of the current row
+      </message>
+      <message desc="The description of the skipToRowEnd key. Displayed in the Options page." name="IDS_CHROMEVOX_SKIP_TO_ROW_END">
+        Go to end of the current row
+      </message>
+      <message desc="The description of the skipToColBeginning key. Displayed in the Options page." name="IDS_CHROMEVOX_SKIP_TO_COL_BEGINNING">
+        Go to beginning of the current column
+      </message>
+      <message desc="The description of the skipToColEnd key. Displayed in the Options page." name="IDS_CHROMEVOX_SKIP_TO_COL_END">
+        Go to end of the current column
+      </message>
+      <message desc='The description of the nextHeading1 key. In most cases, "level 1 heading" is a H1 HTML tag.  ChromeVox will search, from the current focus, for the next heading on the page.  If a heading is found, ChromeVox will focus on the heading. Displayed in the Options page.' name="IDS_CHROMEVOX_NEXT_HEADING1">
+        Next level 1 heading
+      </message>
+      <message desc="The description of the previousHeading1 key.  Behaves like nextHeading1, but this key's action will search backwards (up the page). Displayed in the Options page." name="IDS_CHROMEVOX_PREVIOUS_HEADING1">
+        Previous level 1 heading
+      </message>
+      <message desc="The description of the nextHeading2 key. Displayed in the Options page." name="IDS_CHROMEVOX_NEXT_HEADING2">
+        Next level 2 heading
+      </message>
+      <message desc="The description of the previousHeading2 key. Displayed in the Options page." name="IDS_CHROMEVOX_PREVIOUS_HEADING2">
+        Previous level 2 heading
+      </message>
+      <message desc="The description of the nextHeading3 key. Displayed in the Options page." name="IDS_CHROMEVOX_NEXT_HEADING3">
+        Next level 3 heading
+      </message>
+      <message desc="The description of the previousHeading3 key. Displayed in the Options page." name="IDS_CHROMEVOX_PREVIOUS_HEADING3">
+        Previous level 3 heading
+      </message>
+      <message desc="The description of the nextHeading4 key. Displayed in the Options page." name="IDS_CHROMEVOX_NEXT_HEADING4">
+        Next level 4 heading
+      </message>
+      <message desc="The description of the previousHeading4 key. Displayed in the Options page." name="IDS_CHROMEVOX_PREVIOUS_HEADING4">
+        Previous level 4 heading
+      </message>
+      <message desc="The description of the nextHeading5 key. Displayed in the Options page." name="IDS_CHROMEVOX_NEXT_HEADING5">
+        Next level 5 heading
+      </message>
+      <message desc="The description of the previousHeading5 key. Displayed in the Options page." name="IDS_CHROMEVOX_PREVIOUS_HEADING5">
+        Previous level 5 heading
+      </message>
+      <message desc="The description of the nextHeading6 key. Displayed in the Options page." name="IDS_CHROMEVOX_NEXT_HEADING6">
+        Next level 6 heading
+      </message>
+      <message desc="The description of the previousHeading6 key. Displayed in the Options page." name="IDS_CHROMEVOX_PREVIOUS_HEADING6">
+        Previous level 6 heading
+      </message>
+      <message desc="The description of the nextComboBox key. Displayed in the Options page." name="IDS_CHROMEVOX_NEXT_COMBO_BOX">
+        Next combo box
+      </message>
+      <message desc="The description of the previousComboBox key. Displayed in the Options page." name="IDS_CHROMEVOX_PREVIOUS_COMBO_BOX">
+        Previous combo box
+      </message>
+      <message desc="The description of the nextEditText key. Displayed in the Options page." name="IDS_CHROMEVOX_NEXT_EDIT_TEXT">
+        Next editable text area
+      </message>
+      <message desc="The description of the previousEditText key. Displayed in the Options page." name="IDS_CHROMEVOX_PREVIOUS_EDIT_TEXT">
+        Previous editable text area
+      </message>
+      <message desc="The description of the nextFormField key. Displayed in the Options page." name="IDS_CHROMEVOX_NEXT_FORM_FIELD">
+        Next form field
+      </message>
+      <message desc="The description of the previousFormField key. Displayed in the Options page." name="IDS_CHROMEVOX_PREVIOUS_FORM_FIELD">
+        Previous form field
+      </message>
+      <message desc="The description of the nextGraphic key. Displayed in the Options page." name="IDS_CHROMEVOX_NEXT_GRAPHIC">
+        Next graphic
+      </message>
+      <message desc="The description of the previousGraphic key. Displayed in the Options page." name="IDS_CHROMEVOX_PREVIOUS_GRAPHIC">
+        Previous graphic
+      </message>
+      <message desc="The description of the nextHeading key. Displayed in the Options page." name="IDS_CHROMEVOX_NEXT_HEADING">
+        Next heading
+      </message>
+      <message desc="The description of the previousHeading key. Displayed in the Options page." name="IDS_CHROMEVOX_PREVIOUS_HEADING">
+        Previous heading
+      </message>
+      <message desc="The description of the nextListItem key. Displayed in the Options page." name="IDS_CHROMEVOX_NEXT_LIST_ITEM">
+        Next list item
+      </message>
+      <message desc="The description of the previousListItem key. Displayed in the Options page." name="IDS_CHROMEVOX_PREVIOUS_LIST_ITEM">
+        Previous list item
+      </message>
+      <message desc="The description of the nextJump key. Displayed in the Options page." name="IDS_CHROMEVOX_NEXT_JUMP">
+        Next jump
+      </message>
+      <message desc="The description of the previousJump key. Displayed in the Options page." name="IDS_CHROMEVOX_PREVIOUS_JUMP">
+        Previous jump
+      </message>
+      <message desc="The description of the nextLink key. Displayed in the Options page." name="IDS_CHROMEVOX_NEXT_LINK">
+        Next link
+      </message>
+      <message desc="The description of the previousLink key. Displayed in the Options page." name="IDS_CHROMEVOX_PREVIOUS_LINK">
+        Previous link
+      </message>
+      <message desc="The description of the nextList key. Displayed in the Options page." name="IDS_CHROMEVOX_NEXT_LIST">
+        Next list
+      </message>
+      <message desc="The description of the previousList key. Displayed in the Options page." name="IDS_CHROMEVOX_PREVIOUS_LIST">
+        Previous list
+      </message>
+      <message desc="The description of the nextMath key. Displayed in the Options page." name="IDS_CHROMEVOX_NEXT_MATH">
+        Next math
+      </message>
+      <message desc="The description of the previousMath key. Displayed in the Options page." name="IDS_CHROMEVOX_PREVIOUS_MATH">
+        Previous math
+      </message>
+      <message desc="The description of the nextMedia key. Displayed in the Options page." name="IDS_CHROMEVOX_NEXT_MEDIA">
+        Next media
+      </message>
+      <message desc="The description of the previousMedia key. Displayed in the Options page." name="IDS_CHROMEVOX_PREVIOUS_MEDIA">
+        Previous media
+      </message>
+      <message desc="The description of the nextBlockquote key. Displayed in the Options page." name="IDS_CHROMEVOX_NEXT_BLOCKQUOTE">
+        Next block quote
+      </message>
+      <message desc="The description of the previousBlockquote key. Displayed in the Options page." name="IDS_CHROMEVOX_PREVIOUS_BLOCKQUOTE">
+        Previous block quote
+      </message>
+      <message desc="The description of the nextRadio key. Displayed in the Options page." name="IDS_CHROMEVOX_NEXT_RADIO">
+        Next radio button
+      </message>
+      <message desc="The description of the previousRadio key. Displayed in the Options page." name="IDS_CHROMEVOX_PREVIOUS_RADIO">
+        Previous radio button
+      </message>
+      <message desc="The description of the nextSlider key. Displayed in the Options page." name="IDS_CHROMEVOX_NEXT_SLIDER">
+        Next slider
+      </message>
+      <message desc="The description of the previousSlider key. Displayed in the Options page." name="IDS_CHROMEVOX_PREVIOUS_SLIDER">
+        Previous slider
+      </message>
+      <message desc="The description of the nextTable key. Displayed in the Options page." name="IDS_CHROMEVOX_NEXT_TABLE">
+        Next table
+      </message>
+      <message desc="The description of the nextVisitedLink key. Displayed in the Options page." name="IDS_CHROMEVOX_NEXT_VISITED_LINK">
+        Next visited link
+      </message>
+      <message desc="The description of the previousTable key. Displayed in the Options page." name="IDS_CHROMEVOX_PREVIOUS_TABLE">
+        Previous table
+      </message>
+      <message desc="The description of the previousVisitedLink key. Displayed in the Options page." name="IDS_CHROMEVOX_PREVIOUS_VISITED_LINK">
+        Previous visited link
+      </message>
+      <message desc="The description of the nextButton key. Displayed in the Options page." name="IDS_CHROMEVOX_NEXT_BUTTON">
+        Next button
+      </message>
+      <message desc="The description of the previousButton key. Displayed in the Options page." name="IDS_CHROMEVOX_PREVIOUS_BUTTON">
+        Previous button
+      </message>
+      <message desc="The description of the nextCheckbox key. Displayed in the Options page." name="IDS_CHROMEVOX_NEXT_CHECKBOX">
+        Next checkbox
+      </message>
+      <message desc="The description of the previousCheckbox key. Displayed in the Options page." name="IDS_CHROMEVOX_PREVIOUS_CHECKBOX">
+        Previous checkbox
+      </message>
+      <message desc="The description of the nextLandmark key. Displayed in the Options page." name="IDS_CHROMEVOX_NEXT_LANDMARK">
+        Next landmark
+      </message>
+      <message desc="The description of the previousLandmark key. Displayed in the Options page." name="IDS_CHROMEVOX_PREVIOUS_LANDMARK">
+        Previous landmark
+      </message>
+      <message desc="The description of the benchmark key.  Launches a benchmark tool useful for debugging. Displayed in the Options page." name="IDS_CHROMEVOX_BENCHMARK">
+        Debug benchmark
+      </message>
+      <message desc="The description of the announcePosition key. Displayed in the Options page." name="IDS_CHROMEVOX_ANNOUNCE_POSITION">
+        Announces a brief description of the current position
+      </message>
+      <message desc="The description of the fullyDescribe key. Displayed in the Options page." name="IDS_CHROMEVOX_FULLY_DESCRIBE">
+        Announces a complete description of the current position
+      </message>
+      <message desc="The title of the extension's options page." name="IDS_CHROMEVOX_OPTIONS_PAGE_TITLE">
+        ChromeVox Options
+      </message>
+      <message desc="The summary of the extension's options.  Shown at the top of the options page." name="IDS_CHROMEVOX_OPTIONS_PAGE_SUMMARY">
+        Use the options below to customize ChromeVox. Changes take effect immediately.
+      </message>
+      <message desc="An option to enable the page focus following the mouse.  Focus represents the current HTML element or group of elements that are being spoken and can be acted upon.  There is also a visual UI which highlights the focused elements. * This key's action allows the user to change focus with the mouse.  Focus can also be changed using the ChromeVox navigation keys and an API." name="IDS_CHROMEVOX_OPTIONS_MOUSE_FOCUS_FOLLOWS">
+        Use the mouse to change focus.
+      </message>
+      <message desc="An option to enhance the experience of specific sites such as Google Search." name="IDS_CHROMEVOX_OPTIONS_SITE_SPECIFIC_ENHANCEMENTS">
+        Enhance specific sites (like Google Search).
+      </message>
+      <message desc="An option to use more verbose feedback for the user." name="IDS_CHROMEVOX_OPTIONS_VERBOSITY_VERBOSE">
+        Enable verbose descriptions.
+      </message>
+      <message desc="An option to show the cursor between characters." name="IDS_CHROMEVOX_OPTIONS_CURSOR_BETWEEN_CHARACTERS">
+        Place cursor between characters when editing text (like Mac OS X).
+      </message>
+      <message desc="An option to show the magnifier." name="IDS_CHROMEVOX_OPTIONS_MAGNIFIER_SHOW_CHECKBOX">
+        Show a magnified view of the page content.
+      </message>
+      <message desc="An options page section header for options about the ChromeVox voice. This section lets users change the voice by selecting a different voice from a listbox." name="IDS_CHROMEVOX_OPTIONS_VOICES">
+        Voices
+      </message>
+      <message desc="Labels the voice selection list box." name="IDS_CHROMEVOX_OPTIONS_VOICES_DESCRIPTION">
+        Change the current voice by selecting an option from the list below.
+      </message>
+      <message desc="An options page section header for options about the ChromeVox braille table.  This section lets users change the braille table by selecting a different braille table from a listbox.  A braille table describes how text gets converted from a unicode encoding into a pattern of dots. This varies based on locale and contraction. See http://en.wikipedia.org/wiki/Braille for a more in-depth discussion." name="IDS_CHROMEVOX_OPTIONS_BRAILLE">
+        Braille
+      </message>
+      <message desc="Labels the braille table type button when the current table is an 6 dot table. A braille table describes how text gets converted from a unicode encoding into a pattern of dots. This varies based on locale and contraction. See http://en.wikipedia.org/wiki/Braille for a more in-depth discussion." name="IDS_CHROMEVOX_OPTIONS_BRAILLE_TABLE_TYPE_6">
+        Switch to 8 dot braille
+      </message>
+      <message desc="Labels the braille table type button when the current table is an 8 dot table. A braille table describes how text gets converted from a unicode encoding into a pattern of dots. This varies based on locale and contraction. See http://en.wikipedia.org/wiki/Braille for a more in-depth discussion." name="IDS_CHROMEVOX_OPTIONS_BRAILLE_TABLE_TYPE_8">
+        Switch to 6 dot braille
+      </message>
+      <message desc="Labels the braille table selection list box.  A braille table describes how text gets converted from a unicode encoding into a pattern of dots. This varies based on locale and contraction. See http://en.wikipedia.org/wiki/Braille for a more in-depth discussion." name="IDS_CHROMEVOX_OPTIONS_BRAILLE_DESCRIPTION_6">
+        Change the current 6 dot braille table by selecting an option from the list below.
+      </message>
+      <message desc="Labels each item in a braille selection listbox.  For example, a locale could be 'U.S. English' and a grade could be 'Grade 2'. Together they would be 'U.S. English, Grade 2'. A braille table describes how text gets converted from a unicode encoding into a pattern of dots. This varies based on locale and contraction. See http://en.wikipedia.org/wiki/Braille for a more in-depth discussion." name="IDS_CHROMEVOX_OPTIONS_BRAILLE_LOCALE_GRADE">
+        <ph name="locale">$1</ph>, Grade <ph name="grade">$2</ph>
+      </message>
+      <message desc="Labels the braille table selection list box.  A braille table describes how text gets converted from a unicode encoding into a pattern of dots. This varies based on locale and contraction. See http://en.wikipedia.org/wiki/Braille for a more in-depth discussion." name="IDS_CHROMEVOX_OPTIONS_BRAILLE_DESCRIPTION_8">
+        Change the current 8 dot braille table by selecting an option from the list below.
+      </message>
+      <message desc="An options page section header for options about key shortcuts. This section lets users change the key bindings for ChromeVox actions. The section has a list of actions and a text field to change the binding (e.g. Ctrl-B) for each action." name="IDS_CHROMEVOX_OPTIONS_KEYBOARD_SHORTCUTS">
+        Keyboard shortcuts
+      </message>
+      <message desc="Labels the key map selection combo box. Key maps describe a pairing of keys users use to invoke a command." name="IDS_CHROMEVOX_OPTIONS_KEYMAP_DESCRIPTION">
+        Change the current keymap by selecting an option from the list below.
+      </message>
+      <message desc="A button to reset the key assignments in the options page." name="IDS_CHROMEVOX_OPTIONS_SELECT_KEYS">
+        Reset current keymap
+      </message>
+      <message desc="Labels the keyboard shortcut section." name="IDS_CHROMEVOX_OPTIONS_SHORTCUTS_DESCRIPTION">
+        Customize keyboard shortcuts for frequently used commands by typing them into the corresponding fields below.
+      </message>
+      <message desc="An options page section header for the modifier key section." name="IDS_CHROMEVOX_OPTIONS_MODIFIER_KEYS">
+        Modifier keys
+      </message>
+      <message desc="An option for setting the key combination that will be used as the ChromeVox modifier key (aka, the 'Cvox' key)." name="IDS_CHROMEVOX_OPTIONS_CVOX_MODIFIER_KEY">
+        ChromeVox modifier key
+      </message>
+      <message desc="The title of the ChromeOS Keyboard explorer page.  The keyboard explorer voices the name of each key when the user presses it." name="IDS_CHROMEVOX_KBEXPLORER_TITLE">
+        ChromeOS Keyboard Explorer
+      </message>
+      <message desc="The instructions for the keyboard explorer.  The keyboard explorer voices the name of each key when the user presses it. * These instructions describe how to use the keyboard explorer." name="IDS_CHROMEVOX_KBEXPLORER_INSTRUCTIONS">
+        Press any key to learn its name. Ctrl+W will close the keyboard explorer.
+      </message>
+      <message desc="Spoken when a System update is ready and restart is needed." name="IDS_CHROMEVOX_CHROME_SYSTEM_NEED_RESTART">
+        System was updated.  Restart is recommended.
+      </message>
+      <message desc="Spoken when the screen brightness is changed." name="IDS_CHROMEVOX_CHROME_BRIGHTNESS_CHANGED">
+        Brightness <ph name="brightness">$1</ph> percent
+      </message>
+      <message desc="Spoken when a new Chrome tab named 'title' is opened." name="IDS_CHROMEVOX_CHROME_TAB_CREATED">
+        tab created
+      </message>
+      <message desc="Spoken when the user changes to different tab showing the 'title' page." name="IDS_CHROMEVOX_CHROME_TAB_SELECTED">
+        <ph name="title">$1</ph>, tab
+      </message>
+      <message desc="Spoken when the user changes to a different normal window showing the 'title' page." name="IDS_CHROMEVOX_CHROME_NORMAL_WINDOW_SELECTED">
+        window <ph name="title">$1</ph> tab
+      </message>
+      <message desc="Spoken when the user changes to a different incognito window showing the 'title' page in the current (displayed) tab." name="IDS_CHROMEVOX_CHROME_INCOGNITO_WINDOW_SELECTED">
+        incognito window <ph name="title">$1</ph> tab
+      </message>
+      <message desc="Spoken when the user opens a Chrome menu named 'title'." name="IDS_CHROMEVOX_CHROME_MENU_OPENED">
+        <ph name="title">$1</ph> menu opened
+      </message>
+      <message desc="Describes a HTML checkbox named 'name' in the checked state." name="IDS_CHROMEVOX_DESCRIBE_CHECKBOX_CHECKED">
+        <ph name="name">$1</ph> checkbox checked
+      </message>
+      <message desc="The checked state for a checkbox." name="IDS_CHROMEVOX_CHECKBOX_CHECKED_STATE">
+        checked
+      </message>
+      <message desc="The checked state for a checkbox in braille." name="IDS_CHROMEVOX_CHECKBOX_CHECKED_STATE_BRL">
+        x
+      </message>
+      <message desc="Describes a HTML checkbox named 'name' in the unchecked state." name="IDS_CHROMEVOX_DESCRIBE_CHECKBOX_UNCHECKED">
+        <ph name="name">$1</ph>, checkbox not checked
+      </message>
+      <message desc="The unchecked state for a checkbox." name="IDS_CHROMEVOX_CHECKBOX_UNCHECKED_STATE">
+        not checked
+      </message>
+      <message desc="The unchecked state for a checkbox in braille." name="IDS_CHROMEVOX_CHECKBOX_UNCHECKED_STATE_BRL">
+        ''' '''
+      </message>
+      <message desc="Describes a HTML radio button named 'name' in the selected state." name="IDS_CHROMEVOX_DESCRIBE_RADIO_SELECTED">
+        <ph name="name">$1</ph>, radio button selected
+      </message>
+      <message desc="The selected state for a radio button." name="IDS_CHROMEVOX_RADIO_SELECTED_STATE">
+        selected
+      </message>
+      <message desc="The selected state for a radio button in braille." name="IDS_CHROMEVOX_RADIO_SELECTED_STATE_BRL">
+        x
+      </message>
+      <message desc="Describes a HTML radio button named 'name' in the unselected state." name="IDS_CHROMEVOX_DESCRIBE_RADIO_UNSELECTED">
+        <ph name="name">$1</ph>, radio button unselected
+      </message>
+      <message desc="The unselected state for a radio button." name="IDS_CHROMEVOX_RADIO_UNSELECTED_STATE">
+        unselected
+      </message>
+      <message desc="The unselected state for a radio button in braille." name="IDS_CHROMEVOX_RADIO_UNSELECTED_STATE_BRL">
+        ''' '''
+      </message>
+      <message desc="Describes a menu named 'name'." name="IDS_CHROMEVOX_DESCRIBE_MENU">
+        <ph name="name">$1</ph>, menu
+      </message>
+      <message desc="Describes a menu item named 'name'." name="IDS_CHROMEVOX_DESCRIBE_MENU_ITEM">
+        <ph name="name">$1</ph>, menu item
+      </message>
+      <message desc="Describes a menu item named 'name' with a submenu." name="IDS_CHROMEVOX_DESCRIBE_MENU_ITEM_WITH_SUBMENU">
+        <ph name="name">$1</ph>, menu item, with submenu
+      </message>
+      <message desc="Describes a window named 'name'." name="IDS_CHROMEVOX_DESCRIBE_WINDOW">
+        <ph name="name">$1</ph>, window
+      </message>
+      <message desc="Describes a HTML textbox named 'name' with value 'value'." name="IDS_CHROMEVOX_DESCRIBE_TEXTBOX">
+        <ph name="value">$1</ph>, <ph name="name">$2</ph>, text box
+      </message>
+      <message desc="Describes an unnamed HTML textbox with value 'value'." name="IDS_CHROMEVOX_DESCRIBE_UNNAMED_TEXTBOX">
+        <ph name="value">$1</ph>, text box
+      </message>
+      <message desc="Describes a HTML password textbox named 'name' with value 'value'." name="IDS_CHROMEVOX_DESCRIBE_PASSWORD">
+        <ph name="value">$1</ph>, <ph name="name">$2</ph>, password text box
+      </message>
+      <message desc="Describes an unnamed HTML password textbox with value 'value'." name="IDS_CHROMEVOX_DESCRIBE_UNNAMED_PASSWORD">
+        <ph name="value">$1</ph>, password text box
+      </message>
+      <message desc="Describes a HTML button named 'name'." name="IDS_CHROMEVOX_DESCRIBE_BUTTON">
+        <ph name="name">$1</ph>, button
+      </message>
+      <message desc="Describes a HTML combo box named 'name'." name="IDS_CHROMEVOX_DESCRIBE_COMBOBOX">
+        <ph name="value">$1</ph>, <ph name="name">$2</ph>, combo box
+      </message>
+      <message desc="Describes an unnamed HTML combo box." name="IDS_CHROMEVOX_DESCRIBE_UNNAMED_COMBOBOX">
+        <ph name="value">$1</ph>, combo box
+      </message>
+      <message desc="Describes a HTML listbox named 'name'." name="IDS_CHROMEVOX_DESCRIBE_LISTBOX">
+        <ph name="value">$1</ph>, <ph name="name">$2</ph>, list box
+      </message>
+      <message desc="Describes an unnamed HTML combo box." name="IDS_CHROMEVOX_DESCRIBE_UNNAMED_LISTBOX">
+        <ph name="value">$1</ph>, list box
+      </message>
+      <message desc="Describes a HTML link named 'name'." name="IDS_CHROMEVOX_DESCRIBE_LINK">
+        <ph name="name">$1</ph>, link
+      </message>
+      <message desc="Describes a Chrome tab named 'name'." name="IDS_CHROMEVOX_DESCRIBE_TAB">
+        <ph name="name">$1</ph>, tab
+      </message>
+      <message desc="Describes a slider with name 'name' and value 'value'." name="IDS_CHROMEVOX_DESCRIBE_SLIDER">
+        <ph name="value">$1</ph>, <ph name="name">$2</ph>, slider
+      </message>
+      <message desc="Spoken through the a11y api after describing an element if it is selected." name="IDS_CHROMEVOX_DESCRIBE_SELECTED">
+        , selected
+      </message>
+      <message desc="Spoken through the a11y api after describing an element if it is unselected." name="IDS_CHROMEVOX_DESCRIBE_UNSELECTED">
+        , unselected
+      </message>
+      <message desc="Spoken through the a11y api after describing an element if it is part of a group." name="IDS_CHROMEVOX_DESCRIBE_INDEX">
+        ''' <ph name="index">$1</ph> of <ph name="total">$2</ph> '''
+      </message>
+      <message desc="Spoken through the a11y api when moving between treeitems of differing depth." name="IDS_CHROMEVOX_DESCRIBE_DEPTH">
+        ''' level <ph name="depth">$1</ph> '''
+      </message>
+      <message desc="Describes the rate of synthesized speech as a percentage of the normal speaking rate, like 50% for slow speech or 200% for fast speech." name="IDS_CHROMEVOX_ANNOUNCE_RATE">
+        Rate <ph name="percent">$1</ph> percent
+      </message>
+      <message desc="Describes the pitch of synthesized speech as a percentage of the normal pitch, like 50% for low pitch or 150% for high pitch." name="IDS_CHROMEVOX_ANNOUNCE_PITCH">
+        Pitch <ph name="percent">$1</ph> percent
+      </message>
+      <message desc="Describes the volume of synthesized speech as a percentage where 100% is full volume." name="IDS_CHROMEVOX_ANNOUNCE_VOLUME">
+        Volume <ph name="percent">$1</ph> percent
+      </message>
+      <message desc="Spoken when the user exits a dialog.  For example an alert dialog." name="IDS_CHROMEVOX_EXITING_DIALOG">
+        Exited dialog.
+      </message>
+      <message desc="Spoken when the user exits a container." name="IDS_CHROMEVOX_EXITED_CONTAINER">
+        Exited <ph name="type">$1</ph>.
+      </message>
+      <message desc="Spoken when the user enters a dialog with the text 'text'." name="IDS_CHROMEVOX_ENTERING_DIALOG">
+        Entered dialog
+      </message>
+      <message desc="Spoken before the list of elements when a live region of a page is removed." name="IDS_CHROMEVOX_LIVE_REGIONS_REMOVED">
+        removed:
+      </message>
+      <message desc="Tells the user that sticky mode is enabled.  Sticky mode allows the user to navigate without pressing the modifier keys." name="IDS_CHROMEVOX_STICKY_MODE_ENABLED">
+        Sticky mode enabled
+      </message>
+      <message desc="Tells the user that sticky mode is disabled.  Sticky mode allows the user to navigate without pressing the modifier keys." name="IDS_CHROMEVOX_STICKY_MODE_DISABLED">
+        Sticky mode disabled
+      </message>
+      <message desc="Prompt spoken when the user first opens the Keyboard Help Widget." name="IDS_CHROMEVOX_KEYBOARD_HELP_INTRO">
+        Keyboard Help
+      </message>
+      <message desc="Prompt spoken when user opens the Context Menu Widget." name="IDS_CHROMEVOX_CONTEXT_MENU_INTRO">
+        Context Menu
+      </message>
+      <message desc="Prompt spoken as a generic name for any choice widget of some type." name="IDS_CHROMEVOX_CHOICE_WIDGET_NAME">
+        <ph name="type">$1</ph> list.
+      </message>
+      <message desc="Prompt spoken as a help message when any choice widget is opened." name="IDS_CHROMEVOX_CHOICE_WIDGET_HELP">
+        Use up and down arrow keys to browse, or type to search.
+      </message>
+      <message desc="Prompt spoken when any ChoiceWidget exits." name="IDS_CHROMEVOX_CHOICE_WIDGET_EXITED">
+        Exited
+      </message>
+      <message desc="Prompt spoken to describe items within the ChoiceWidget." name="IDS_CHROMEVOX_CHOICE_WIDGET_TYPE_GENERIC">
+        ''' '''
+      </message>
+      <message desc="Spoken when table mode reachs the end of a cell." name="IDS_CHROMEVOX_END_OF_CELL">
+        End of cell.
+      </message>
+      <message desc="Spoken when the user reads a link without a URL." name="IDS_CHROMEVOX_NO_URL_FOUND">
+        No URL found
+      </message>
+      <message desc="Spoken, in table mode, when the user leaves an HTML table." name="IDS_CHROMEVOX_LEAVING_TABLE">
+        Leaving table.
+      </message>
+      <message desc="Spoken, in table mode, when the user leaves a grid." name="IDS_CHROMEVOX_LEAVING_GRID">
+        Leaving grid.
+      </message>
+      <message desc="Spoken, in table mode, when the user is inside an HTML table." name="IDS_CHROMEVOX_INSIDE_TABLE">
+        Inside table
+      </message>
+      <message desc="Spoken when the user attempts to enter table mode, but there is no HTML tables." name="IDS_CHROMEVOX_NO_TABLES">
+        No table found.
+      </message>
+      <message desc="Spoken when the user attempts a table mode command, but is not in a table." name="IDS_CHROMEVOX_NOT_INSIDE_TABLE">
+        Not inside table.
+      </message>
+      <message desc="Spoken, in table mode, when the user attempts to navigate to a non-existant next row." name="IDS_CHROMEVOX_NO_CELL_BELOW">
+        No cell below.
+      </message>
+      <message desc="Spoken, in table mode, when the user attempts to navigate to a non-existant previous row." name="IDS_CHROMEVOX_NO_CELL_ABOVE">
+        No cell above.
+      </message>
+      <message desc="Spoken, in table mode, when the user attempts to navigate to a non-existant row to the right." name="IDS_CHROMEVOX_NO_CELL_RIGHT">
+        No cell right.
+      </message>
+      <message desc="Spoken, in table mode, when the user attempts to navigate to a non-existant row to the left." name="IDS_CHROMEVOX_NO_CELL_LEFT">
+        No cell left.
+      </message>
+      <message desc="Spoken, in table mode, when the user moves to an empty cell." name="IDS_CHROMEVOX_EMPTY_CELL">
+        Empty cell.
+      </message>
+      <message desc="Spoken, in table mode, when the user moves to a cell that has rowspan or colspan &gt; 1." name="IDS_CHROMEVOX_SPANNED">
+        Spanned.
+      </message>
+      <message desc="Describes a row header in an HTML table." name="IDS_CHROMEVOX_ROW_HEADER">
+        Row header:
+      </message>
+      <message desc="Describes an empty row header in an HTML table." name="IDS_CHROMEVOX_EMPTY_ROW_HEADER">
+        Empty row header
+      </message>
+      <message desc="Describes a column header in an HTML table." name="IDS_CHROMEVOX_COLUMN_HEADER">
+        Column header:
+      </message>
+      <message desc="Describes an empty column header in an HTML table." name="IDS_CHROMEVOX_EMPTY_COLUMN_HEADER">
+        Empty column header
+      </message>
+      <message desc="Describes the headers on a table with no headers." name="IDS_CHROMEVOX_NO_HEADERS">
+        No headers
+      </message>
+      <message desc="Describes the headers on a table with empty headers." name="IDS_CHROMEVOX_EMPTY_HEADERS">
+        Empty headers
+      </message>
+      <message desc="Descibes the user's location within a table." name="IDS_CHROMEVOX_TABLE_LOCATION">
+        Row <ph name="rowIndex">$1</ph> of <ph name="rowTotal">$2</ph>, Column <ph name="colIndex">$3</ph> of <ph name="colTotal">$4</ph>
+      </message>
+      <message desc="Spoken if the user attempts to jump to the next checkbox when none exists." name="IDS_CHROMEVOX_NO_NEXT_CHECKBOX">
+        No next checkbox.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the previous checkbox when none exists." name="IDS_CHROMEVOX_NO_PREVIOUS_CHECKBOX">
+        No previous checkbox.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the next editable text field when none exists." name="IDS_CHROMEVOX_NO_NEXT_EDIT_TEXT">
+        No next editable text field.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the previous editable text field when none exists." name="IDS_CHROMEVOX_NO_PREVIOUS_EDIT_TEXT">
+        No previous editable text field.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the next heading when none exists." name="IDS_CHROMEVOX_NO_NEXT_HEADING">
+        No next heading.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the previous heading when none exists." name="IDS_CHROMEVOX_NO_PREVIOUS_HEADING">
+        No previous heading.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the next level 1 heading when none exists." name="IDS_CHROMEVOX_NO_NEXT_HEADING_1">
+        No next level 1 heading.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the previous level 1 heading when none exists." name="IDS_CHROMEVOX_NO_PREVIOUS_HEADING_1">
+        No previous level 1 heading.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the next level 2 heading when none exists." name="IDS_CHROMEVOX_NO_NEXT_HEADING_2">
+        No next level 2 heading.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the previous level 2 heading when none exists." name="IDS_CHROMEVOX_NO_PREVIOUS_HEADING_2">
+        No previous level 2 heading.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the next level 3 heading when none exists." name="IDS_CHROMEVOX_NO_NEXT_HEADING_3">
+        No next level 3 heading.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the previous level 3 heading when none exists." name="IDS_CHROMEVOX_NO_PREVIOUS_HEADING_3">
+        No previous level 3 heading.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the next level 4 heading when none exists." name="IDS_CHROMEVOX_NO_NEXT_HEADING_4">
+        No next level 4 heading.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the previous level 4 heading when none exists." name="IDS_CHROMEVOX_NO_PREVIOUS_HEADING_4">
+        No previous level 4 heading.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the next level 5 heading when none exists." name="IDS_CHROMEVOX_NO_NEXT_HEADING_5">
+        No next level 5 heading.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the previous level 5 heading when none exists." name="IDS_CHROMEVOX_NO_PREVIOUS_HEADING_5">
+        No previous level 5 heading.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the next level 6 heading when none exists." name="IDS_CHROMEVOX_NO_NEXT_HEADING_6">
+        No next level 6 heading.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the previous level 6 heading when none exists." name="IDS_CHROMEVOX_NO_PREVIOUS_HEADING_6">
+        No previous level 6 heading.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the next item that isn\'t a link when none exists." name="IDS_CHROMEVOX_NO_NEXT_NOT_LINK">
+        No next item that isn't a link.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the previous item that isn\'t a link when none exists." name="IDS_CHROMEVOX_NO_PREVIOUS_NOT_LINK">
+        No previous item that isn't a link.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the next anchor when none exists." name="IDS_CHROMEVOX_NO_NEXT_ANCHOR">
+        No next anchor.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the previous anchor when none exists." name="IDS_CHROMEVOX_NO_PREVIOUS_ANCHOR">
+        No previous anchor.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the next link when none exists." name="IDS_CHROMEVOX_NO_NEXT_LINK">
+        No next link.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the previous link when none exists." name="IDS_CHROMEVOX_NO_PREVIOUS_LINK">
+        No previous link.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the next table when none exists." name="IDS_CHROMEVOX_NO_NEXT_TABLE">
+        No next table.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the previous table when none exists." name="IDS_CHROMEVOX_NO_PREVIOUS_TABLE">
+        No previous table.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the next visited link when none exists." name="IDS_CHROMEVOX_NO_NEXT_VISITED_LINK">
+        No next visited link.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the previous visited link when none exists." name="IDS_CHROMEVOX_NO_PREVIOUS_VISITED_LINK">
+        No previous visited link.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the next math expression when none exists." name="IDS_CHROMEVOX_NO_NEXT_MATH">
+        No next math expression.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the previous math expression when none exists." name="IDS_CHROMEVOX_NO_PREVIOUS_MATH">
+        No previous math expression.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the next media widget (audio/video) when none exists." name="IDS_CHROMEVOX_NO_NEXT_MEDIA_WIDGET">
+        No next media widget.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the previous media widget (audio/video) when none exists." name="IDS_CHROMEVOX_NO_PREVIOUS_MEDIA_WIDGET">
+        No previous media widget.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the next list when none exists." name="IDS_CHROMEVOX_NO_NEXT_LIST">
+        No next list.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the previous list when none exists." name="IDS_CHROMEVOX_NO_PREVIOUS_LIST">
+        No previous list.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the next list item when none exists." name="IDS_CHROMEVOX_NO_NEXT_LIST_ITEM">
+        No next list item.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the previous list item when none exists." name="IDS_CHROMEVOX_NO_PREVIOUS_LIST_ITEM">
+        No previous list item.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the next blockquote when none exists." name="IDS_CHROMEVOX_NO_NEXT_BLOCKQUOTE">
+        No next blockquote.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the previous blockquote when none exists." name="IDS_CHROMEVOX_NO_PREVIOUS_BLOCKQUOTE">
+        No previous blockquote.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the next form field when none exists." name="IDS_CHROMEVOX_NO_NEXT_FORM_FIELD">
+        No next form field.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the previous form field when none exists." name="IDS_CHROMEVOX_NO_PREVIOUS_FORM_FIELD">
+        No previous form field.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the next jump point when none exists." name="IDS_CHROMEVOX_NO_NEXT_JUMP">
+        No next jump point.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the previous jump point when none exists." name="IDS_CHROMEVOX_NO_PREVIOUS_JUMP">
+        No previous jump point.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the next ARIA landmark when none exists." name="IDS_CHROMEVOX_NO_NEXT_LANDMARK">
+        No next ARIA landmark.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the previous ARIA landmark when none exists." name="IDS_CHROMEVOX_NO_PREVIOUS_LANDMARK">
+        No previous ARIA landmark.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the next combo box when none exists." name="IDS_CHROMEVOX_NO_NEXT_COMBO_BOX">
+        No next combo box.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the previous combo box when none exists." name="IDS_CHROMEVOX_NO_PREVIOUS_COMBO_BOX">
+        No previous combo box.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the next button when none exists." name="IDS_CHROMEVOX_NO_NEXT_BUTTON">
+        No next button.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the previous button when none exists." name="IDS_CHROMEVOX_NO_PREVIOUS_BUTTON">
+        No previous button.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the next graphic when none exists." name="IDS_CHROMEVOX_NO_NEXT_GRAPHIC">
+        No next graphic.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the previous graphic when none exists." name="IDS_CHROMEVOX_NO_PREVIOUS_GRAPHIC">
+        No previous graphic.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the next slider when none exists." name="IDS_CHROMEVOX_NO_NEXT_SLIDER">
+        No next slider.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the previous slider when none exists." name="IDS_CHROMEVOX_NO_PREVIOUS_SLIDER">
+        No previous slider.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the next radio button when none exists." name="IDS_CHROMEVOX_NO_NEXT_RADIO_BUTTON">
+        No next radio button.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the previous radio button when none exists." name="IDS_CHROMEVOX_NO_PREVIOUS_RADIO_BUTTON">
+        No previous radio button.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the next section when none exists." name="IDS_CHROMEVOX_NO_NEXT_SECTION">
+        No next section.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the previous section when none exists." name="IDS_CHROMEVOX_NO_PREVIOUS_SECTION">
+        No previous section.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the next control when none exists." name="IDS_CHROMEVOX_NO_NEXT_CONTROL">
+        No next control.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the previous control when none exists." name="IDS_CHROMEVOX_NO_PREVIOUS_CONTROL">
+        No previous control.
+      </message>
+      <message desc="Spoken when the current HTML element is clicked." name="IDS_CHROMEVOX_ELEMENT_CLICKED">
+        Clicked
+      </message>
+      <message desc="Spoken when the current HTML element is double clicked." name="IDS_CHROMEVOX_ELEMENT_DOUBLE_CLICKED">
+        double clicked
+      </message>
+      <message desc="Spoken in PowerKey if there are no headings to display." name="IDS_CHROMEVOX_POWERKEY_NO_HEADINGS">
+        No headings.
+      </message>
+      <message desc="Spoken in PowerKey if there are no links to display." name="IDS_CHROMEVOX_POWERKEY_NO_LINKS">
+        No links.
+      </message>
+      <message desc="Spoken in PowerKey if there are no forms to display." name="IDS_CHROMEVOX_POWERKEY_NO_FORMS">
+        No forms.
+      </message>
+      <message desc="Spoken in PowerKey if there are no tables to display." name="IDS_CHROMEVOX_POWERKEY_NO_TABLES">
+        No tables.
+      </message>
+      <message desc="Spoken in PowerKey if there are no ARIA landmarks to display." name="IDS_CHROMEVOX_POWERKEY_NO_LANDMARKS">
+        No ARIA landmarks.
+      </message>
+      <message desc="Spoken in PowerKey if there are no jumps to display." name="IDS_CHROMEVOX_POWERKEY_NO_JUMPS">
+        No jumps.
+      </message>
+      <message desc="Describes the list position of a list item." name="IDS_CHROMEVOX_LIST_POSITION">
+        <ph name="index">$1</ph> of <ph name="total">$2</ph>
+      </message>
+      <message desc="Describes the list position of a list item in braille." name="IDS_CHROMEVOX_LIST_POSITION_BRL">
+        <ph name="index">$1</ph>/<ph name="total">$2</ph>
+      </message>
+      <message desc='Spoken after a menu is spoken if the menu has a submenu. For example "Menu Options has submenu"' name="IDS_CHROMEVOX_ARIA_HAS_SUBMENU">
+        has submenu
+      </message>
+      <message desc="Brailled after a menu if the menu has a submenu." name="IDS_CHROMEVOX_ARIA_HAS_SUBMENU_BRL">
+        +submnu
+      </message>
+      <message desc='Spoken after an element is spoken if the element has a pop up. For example "Button Add friends has pop up"' name="IDS_CHROMEVOX_ARIA_HAS_POPUP">
+        has pop up
+      </message>
+      <message desc="Brailled after an element is spoken if the element has a pop up." name="IDS_CHROMEVOX_ARIA_HAS_POPUP_BRL">
+        +popup
+      </message>
+      <message desc='Spoken when describing an ARIA value minimun. For example "Distance, in meters textbox 6, min 2, max 10"' name="IDS_CHROMEVOX_ARIA_VALUE_MIN">
+        Min <ph name="x">$1</ph>
+      </message>
+      <message desc='Brailled when describing an ARIA value minimun. For example "Distance, in meters: 6 min:6 max:10"' name="IDS_CHROMEVOX_ARIA_VALUE_MIN_BRL">
+        min:<ph name="x">$1</ph>
+      </message>
+      <message desc='Spoken when describing an ARIA value maximum. For example "Distance, in meters textbox 6, min 2, max 10"' name="IDS_CHROMEVOX_ARIA_VALUE_MAX">
+        Max <ph name="x">$1</ph>
+      </message>
+      <message desc='Brailled when describing an ARIA value maximum. For example "Distance, in meters: 6 min:2 max:10".' name="IDS_CHROMEVOX_ARIA_VALUE_MAX_BRL">
+        max:<ph name="x">$1</ph>
+      </message>
+      <message desc='Spoken when describing an ARIA value. For example "Distance, in meters textbox 6, min 2, max 10".' name="IDS_CHROMEVOX_ARIA_VALUE_NOW">
+        <ph name="x">$1</ph>
+      </message>
+      <message desc='Brailled when describing an ARIA value. For example "Distance, in meters: 6 min:2 max:10".' name="IDS_CHROMEVOX_ARIA_VALUE_NOW_BRL">
+        <ph name="x">$1</ph>
+      </message>
+      <message desc='Spoken when describing an ARIA value text. For example "Distance, short distance set"' name="IDS_CHROMEVOX_ARIA_VALUE_TEXT">
+        <ph name="x">$1</ph>
+      </message>
+      <message desc='Brailled when describing an ARIA value text. For example "Distance, short distance set"' name="IDS_CHROMEVOX_ARIA_VALUE_TEXT_BRL">
+        <ph name="x">$1</ph>
+      </message>
+      <message desc="Describes an element with the ARIA role alert." name="IDS_CHROMEVOX_ARIA_ROLE_ALERT">
+        Alert
+      </message>
+      <message desc="Braille of element with the ARIA role alert." name="IDS_CHROMEVOX_ARIA_ROLE_ALERT_BRL">
+        alrt
+      </message>
+      <message desc="Describes an element with the ARIA role alertdialog." name="IDS_CHROMEVOX_ARIA_ROLE_ALERTDIALOG">
+        Alert dialog
+      </message>
+      <message desc="Braille of element with the ARIA role alertdialog." name="IDS_CHROMEVOX_ARIA_ROLE_ALERTDIALOG_BRL">
+        alrt dlg
+      </message>
+      <message desc="Describes an element with the ARIA role button." name="IDS_CHROMEVOX_ARIA_ROLE_BUTTON">
+        Button
+      </message>
+      <message desc="Braille of element with the ARIA role button." name="IDS_CHROMEVOX_ARIA_ROLE_BUTTON_BRL">
+        btn
+      </message>
+      <message desc="Describes an element with the ARIA role checkbox." name="IDS_CHROMEVOX_ARIA_ROLE_CHECKBOX">
+        Check box
+      </message>
+      <message desc="Braille of element with the ARIA role checkbox." name="IDS_CHROMEVOX_ARIA_ROLE_CHECKBOX_BRL">
+        chx
+      </message>
+      <message desc="Describes an element with the ARIA role combobox." name="IDS_CHROMEVOX_ARIA_ROLE_COMBOBOX">
+        Combo box
+      </message>
+      <message desc="Braille of element with the ARIA role combobox." name="IDS_CHROMEVOX_ARIA_ROLE_COMBOBOX_BRL">
+        cbx
+      </message>
+      <message desc="Describes an element with the ARIA role dialog." name="IDS_CHROMEVOX_ARIA_ROLE_DIALOG">
+        Dialog
+      </message>
+      <message desc="Braille of element with the ARIA role dialog." name="IDS_CHROMEVOX_ARIA_ROLE_DIALOG_BRL">
+        dlg
+      </message>
+      <message desc="Describes an element with the ARIA role grid." name="IDS_CHROMEVOX_ARIA_ROLE_GRID">
+        Grid
+      </message>
+      <message desc="Braille of element with the ARIA role grid." name="IDS_CHROMEVOX_ARIA_ROLE_GRID_BRL">
+        grd
+      </message>
+      <message desc="Describes an element with the ARIA role gridcell." name="IDS_CHROMEVOX_ARIA_ROLE_GRIDCELL">
+        Cell
+      </message>
+      <message desc="Braille of element with the ARIA role gridcell." name="IDS_CHROMEVOX_ARIA_ROLE_GRIDCELL_BRL">
+        cl
+      </message>
+      <message desc="Describes the position of an element with the ARIA role gridcell." name="IDS_CHROMEVOX_ARIA_ROLE_GRIDCELL_POS">
+        row <ph name="row">$1</ph> column <ph name="col">$2</ph>
+      </message>
+      <message desc="Describes an element with the ARIA role link." name="IDS_CHROMEVOX_ARIA_ROLE_LINK">
+        Link
+      </message>
+      <message desc="Braille of element with the ARIA role link." name="IDS_CHROMEVOX_ARIA_ROLE_LINK_BRL">
+        lnk
+      </message>
+      <message desc="Describes a single element with the ARIA role link with count." name="IDS_CHROMEVOX_ARIA_ROLE_LINK_SINGULAR">
+        1 link
+      </message>
+      <message desc="Describes multiple elements with the ARIA role link." name="IDS_CHROMEVOX_ARIA_ROLE_LINK_PLURAL">
+        <ph name="num">$1</ph> links
+      </message>
+      <message desc="Describes an element with the ARIA role listbox." name="IDS_CHROMEVOX_ARIA_ROLE_LISTBOX">
+        List box
+      </message>
+      <message desc="Braille of element with the ARIA role listbox." name="IDS_CHROMEVOX_ARIA_ROLE_LISTBOX_BRL">
+        lstbx
+      </message>
+      <message desc="Describes an element with the ARIA role log." name="IDS_CHROMEVOX_ARIA_ROLE_LOG">
+        Log
+      </message>
+      <message desc="Braille of element with the ARIA role log." name="IDS_CHROMEVOX_ARIA_ROLE_LOG_BRL">
+        log
+      </message>
+      <message desc="Describes an element with the ARIA role marquee." name="IDS_CHROMEVOX_ARIA_ROLE_MARQUEE">
+        Marquee
+      </message>
+      <message desc="Braille of element with the ARIA role marquee." name="IDS_CHROMEVOX_ARIA_ROLE_MARQUEE_BRL">
+        maqe
+      </message>
+      <message desc="Describes an element with the ARIA role menu." name="IDS_CHROMEVOX_ARIA_ROLE_MENU">
+        Menu
+      </message>
+      <message desc="Braille of element with the ARIA role menu." name="IDS_CHROMEVOX_ARIA_ROLE_MENU_BRL">
+        mnu
+      </message>
+      <message desc="Describes an element with the ARIA role menubar." name="IDS_CHROMEVOX_ARIA_ROLE_MENUBAR">
+        Menu bar
+      </message>
+      <message desc="Braille of element with the ARIA role menubar." name="IDS_CHROMEVOX_ARIA_ROLE_MENUBAR_BRL">
+        mnu br
+      </message>
+      <message desc="Describes an element with the ARIA role menuitem." name="IDS_CHROMEVOX_ARIA_ROLE_MENUITEM">
+        Menu item
+      </message>
+      <message desc="Braille of element with the ARIA role menuitem." name="IDS_CHROMEVOX_ARIA_ROLE_MENUITEM_BRL">
+        mnu itm
+      </message>
+      <message desc="Describes an element with the ARIA role menuitemcheckbox." name="IDS_CHROMEVOX_ARIA_ROLE_MENUITEMCHECKBOX">
+        Menu item check box
+      </message>
+      <message desc="Braille of element with the ARIA role menuitemcheckbox." name="IDS_CHROMEVOX_ARIA_ROLE_MENUITEMCHECKBOX_BRL">
+        mnu itm chx
+      </message>
+      <message desc="Describes an element with the ARIA role menuitemradio." name="IDS_CHROMEVOX_ARIA_ROLE_MENUITEMRADIO">
+        Menu item radio button
+      </message>
+      <message desc="Braille of element with the ARIA role menuitemradio." name="IDS_CHROMEVOX_ARIA_ROLE_MENUITEMRADIO_BRL">
+        mnu itm rd
+      </message>
+      <message desc="Describes an element with the ARIA role option." name="IDS_CHROMEVOX_ARIA_ROLE_OPTION">
+        ''' '''
+      </message>
+      <message desc="Braille of element with the ARIA role option." name="IDS_CHROMEVOX_ARIA_ROLE_OPTION_BRL">
+        ''' '''
+      </message>
+      <message desc="Describes an element with the ARIA role button, with a pop-up." name="IDS_CHROMEVOX_ARIA_ROLE_POPUP_BUTTON">
+        Pop-up button
+      </message>
+      <message desc="Braille of element with the ARIA role button, with a pop-up." name="IDS_CHROMEVOX_ARIA_ROLE_POPUP_BUTTON_BRL">
+        pup btn
+      </message>
+      <message desc="Describes an element with the ARIA role progressbar." name="IDS_CHROMEVOX_ARIA_ROLE_PROGRESSBAR">
+        Progress bar
+      </message>
+      <message desc="Braille of element with the ARIA role progressbar." name="IDS_CHROMEVOX_ARIA_ROLE_PROGRESSBAR_BRL">
+        prog br
+      </message>
+      <message desc="Describes an element with the ARIA role radio." name="IDS_CHROMEVOX_ARIA_ROLE_RADIO">
+        Radio button
+      </message>
+      <message desc="Braille of element with the ARIA role radio." name="IDS_CHROMEVOX_ARIA_ROLE_RADIO_BRL">
+        rd
+      </message>
+      <message desc="Describes an element with the ARIA role radiogroup." name="IDS_CHROMEVOX_ARIA_ROLE_RADIOGROUP">
+        Radio button group
+      </message>
+      <message desc="Braille of element with the ARIA role radiogroup." name="IDS_CHROMEVOX_ARIA_ROLE_RADIOGROUP_BRL">
+        rd grp
+      </message>
+      <message desc="Describes an element with the ARIA role scrollbar." name="IDS_CHROMEVOX_ARIA_ROLE_SCROLLBAR">
+        Scroll bar
+      </message>
+      <message desc="Braille of element with the ARIA role scrollbar." name="IDS_CHROMEVOX_ARIA_ROLE_SCROLLBAR_BRL">
+        scr br
+      </message>
+      <message desc="Describes an element with the ARIA role slider." name="IDS_CHROMEVOX_ARIA_ROLE_SLIDER">
+        Slider
+      </message>
+      <message desc="Braille of element with the ARIA role slider." name="IDS_CHROMEVOX_ARIA_ROLE_SLIDER_BRL">
+        sldr
+      </message>
+      <message desc="Describes an element with the ARIA role spinbutton." name="IDS_CHROMEVOX_ARIA_ROLE_SPINBUTTON">
+        Spin button
+      </message>
+      <message desc="Braille of element with the ARIA role spinbutton." name="IDS_CHROMEVOX_ARIA_ROLE_SPINBUTTON_BRL">
+        spn btn
+      </message>
+      <message desc="Describes an element with the ARIA role status." name="IDS_CHROMEVOX_ARIA_ROLE_STATUS">
+        Status
+      </message>
+      <message desc="Braille of element with the ARIA role status." name="IDS_CHROMEVOX_ARIA_ROLE_STATUS_BRL">
+        sts
+      </message>
+      <message desc="Describes an element with the ARIA role tab." name="IDS_CHROMEVOX_ARIA_ROLE_TAB">
+        Tab
+      </message>
+      <message desc="Braille of element with the ARIA role tab." name="IDS_CHROMEVOX_ARIA_ROLE_TAB_BRL">
+        tab
+      </message>
+      <message desc="Describes an element with the ARIA role tablist." name="IDS_CHROMEVOX_ARIA_ROLE_TABLIST">
+        Tab list
+      </message>
+      <message desc="Brailles an element with the ARIA role tablist." name="IDS_CHROMEVOX_ARIA_ROLE_TABLIST_BRL">
+        tab lst
+      </message>
+      <message desc="Describes an element with the ARIA role tabpanel." name="IDS_CHROMEVOX_ARIA_ROLE_TABPANEL">
+        Tab panel
+      </message>
+      <message desc="Braille of element with the ARIA role tabpanel." name="IDS_CHROMEVOX_ARIA_ROLE_TABPANEL_BRL">
+        tab pnl
+      </message>
+      <message desc="Describes an element with the ARIA role textbox." name="IDS_CHROMEVOX_ARIA_ROLE_TEXTBOX">
+        Text box
+      </message>
+      <message desc="Braille of element with the ARIA role textbox." name="IDS_CHROMEVOX_ARIA_ROLE_TEXTBOX_BRL">
+        txtbx
+      </message>
+      <message desc="Describes an element with the ARIA role timer." name="IDS_CHROMEVOX_ARIA_ROLE_TIMER">
+        Timer
+      </message>
+      <message desc="Braille of element with the ARIA role timer." name="IDS_CHROMEVOX_ARIA_ROLE_TIMER_BRL">
+        tmr
+      </message>
+      <message desc="Describes an element with the ARIA role toolbar." name="IDS_CHROMEVOX_ARIA_ROLE_TOOLBAR">
+        Tool bar
+      </message>
+      <message desc="Braille of element with the ARIA role toolbar." name="IDS_CHROMEVOX_ARIA_ROLE_TOOLBAR_BRL">
+        tl br
+      </message>
+      <message desc="Describes an element with the ARIA role tooltip." name="IDS_CHROMEVOX_ARIA_ROLE_TOOLTIP">
+        Tool tip
+      </message>
+      <message desc="Braille of element with the ARIA role tooltip." name="IDS_CHROMEVOX_ARIA_ROLE_TOOLTIP_BRL">
+        tl tp
+      </message>
+      <message desc="Describes an element with the ARIA role treeitem." name="IDS_CHROMEVOX_ARIA_ROLE_TREEITEM">
+        Tree item
+      </message>
+      <message desc="Braille of element with the ARIA role treeitem." name="IDS_CHROMEVOX_ARIA_ROLE_TREEITEM_BRL">
+        tr itm
+      </message>
+      <message desc="Describes an element with the ARIA role article." name="IDS_CHROMEVOX_ARIA_ROLE_ARTICLE">
+        Article
+      </message>
+      <message desc="Braille of element with the ARIA role article." name="IDS_CHROMEVOX_ARIA_ROLE_ARTICLE_BRL">
+        acl
+      </message>
+      <message desc="Describes an element with the ARIA role application." name="IDS_CHROMEVOX_ARIA_ROLE_APPLICATION">
+        Application
+      </message>
+      <message desc="Braille of element with the ARIA role application." name="IDS_CHROMEVOX_ARIA_ROLE_APPLICATION_BRL">
+        app
+      </message>
+      <message desc="Describes an element with the ARIA role banner." name="IDS_CHROMEVOX_ARIA_ROLE_BANNER">
+        Banner
+      </message>
+      <message desc="Braille of element with the ARIA role banner." name="IDS_CHROMEVOX_ARIA_ROLE_BANNER_BRL">
+        bnr
+      </message>
+      <message desc="Describes an element with the ARIA role columnheader." name="IDS_CHROMEVOX_ARIA_ROLE_COLUMNHEADER">
+        Column header
+      </message>
+      <message desc="Braille of element with the ARIA role columnheader." name="IDS_CHROMEVOX_ARIA_ROLE_COLUMNHEADER_BRL">
+        clm hd
+      </message>
+      <message desc="Describes an element with the ARIA role complementary." name="IDS_CHROMEVOX_ARIA_ROLE_COMPLEMENTARY">
+        Complementary
+      </message>
+      <message desc="Braille of element with the ARIA role complementary." name="IDS_CHROMEVOX_ARIA_ROLE_COMPLEMENTARY_BRL">
+        cmpy
+      </message>
+      <message desc="Describes an element with the ARIA role contentinfo." name="IDS_CHROMEVOX_ARIA_ROLE_CONTENTINFO">
+        Content info
+      </message>
+      <message desc="Braille of element with the ARIA role contentinfo." name="IDS_CHROMEVOX_ARIA_ROLE_CONTENTINFO_BRL">
+        cnt in
+      </message>
+      <message desc="Describes an element with the ARIA role definition." name="IDS_CHROMEVOX_ARIA_ROLE_DEFINITION">
+        Definition
+      </message>
+      <message desc="Braille of element with the ARIA role definition." name="IDS_CHROMEVOX_ARIA_ROLE_DEFINITION_BRL">
+        def
+      </message>
+      <message desc="Describes an element with the ARIA role directory." name="IDS_CHROMEVOX_ARIA_ROLE_DIRECTORY">
+        Directory
+      </message>
+      <message desc="Braille of element with the ARIA role directory." name="IDS_CHROMEVOX_ARIA_ROLE_DIRECTORY_BRL">
+        dir
+      </message>
+      <message desc="Describes an element with the ARIA role document." name="IDS_CHROMEVOX_ARIA_ROLE_DOCUMENT">
+        Document
+      </message>
+      <message desc="Braille of element with the ARIA role document." name="IDS_CHROMEVOX_ARIA_ROLE_DOCUMENT_BRL">
+        doc
+      </message>
+      <message desc="Describes an element with the ARIA role form." name="IDS_CHROMEVOX_ARIA_ROLE_FORM">
+        Form
+      </message>
+      <message desc="Braille of element with the ARIA role form." name="IDS_CHROMEVOX_ARIA_ROLE_FORM_BRL">
+        frm
+      </message>
+      <message desc="Describes a single element with the ARIA role form with count." name="IDS_CHROMEVOX_ARIA_ROLE_FORM_SINGULAR">
+        1 form
+      </message>
+      <message desc="Describes multiple elements with the ARIA role form." name="IDS_CHROMEVOX_ARIA_ROLE_FORM_PLURAL">
+        <ph name="num">$1</ph> forms
+      </message>
+      <message desc="Describes an element with the ARIA role group." name="IDS_CHROMEVOX_ARIA_ROLE_GROUP">
+        Group
+      </message>
+      <message desc="Braille of element with the ARIA role group." name="IDS_CHROMEVOX_ARIA_ROLE_GROUP_BRL">
+        grp
+      </message>
+      <message desc="Describes an element with the ARIA role heading." name="IDS_CHROMEVOX_ARIA_ROLE_HEADING">
+        Heading
+      </message>
+      <message desc="Braille of element with the ARIA role heading." name="IDS_CHROMEVOX_ARIA_ROLE_HEADING_BRL">
+        hd
+      </message>
+      <message desc="Describes an element with the ARIA role img." name="IDS_CHROMEVOX_ARIA_ROLE_IMG">
+        Image
+      </message>
+      <message desc="Describes an element with the ARIA role img." name="IDS_CHROMEVOX_ARIA_ROLE_IMG_BRL">
+        img
+      </message>
+      <message desc="Describes an element with the ARIA role list." name="IDS_CHROMEVOX_ARIA_ROLE_LIST">
+        List
+      </message>
+      <message desc="Braille of element with the ARIA role list." name="IDS_CHROMEVOX_ARIA_ROLE_LIST_BRL">
+        lst
+      </message>
+      <message desc="Describes an element with the ARIA role listitem." name="IDS_CHROMEVOX_ARIA_ROLE_LISTITEM">
+        List item
+      </message>
+      <message desc="Braille of element with the ARIA role listitem." name="IDS_CHROMEVOX_ARIA_ROLE_LISTITEM_BRL">
+        lstitm
+      </message>
+      <message desc="Describes an element with the ARIA role main." name="IDS_CHROMEVOX_ARIA_ROLE_MAIN">
+        Main
+      </message>
+      <message desc="Braille of element with the ARIA role main." name="IDS_CHROMEVOX_ARIA_ROLE_MAIN_BRL">
+        main
+      </message>
+      <message desc="Describes an element with the ARIA role math." name="IDS_CHROMEVOX_ARIA_ROLE_MATH">
+        Math
+      </message>
+      <message desc="Braille of element with the ARIA role math." name="IDS_CHROMEVOX_ARIA_ROLE_MATH_BRL">
+        math
+      </message>
+      <message desc="Describes an element with the ARIA role navigation." name="IDS_CHROMEVOX_ARIA_ROLE_NAVIGATION">
+        Navigation
+      </message>
+      <message desc="Braille of element with the ARIA role navigation." name="IDS_CHROMEVOX_ARIA_ROLE_NAVIGATION_BRL">
+        nav
+      </message>
+      <message desc="Describes an element with the ARIA role note." name="IDS_CHROMEVOX_ARIA_ROLE_NOTE">
+        Note
+      </message>
+      <message desc="Braille of element with the ARIA role note." name="IDS_CHROMEVOX_ARIA_ROLE_NOTE_BRL">
+        note
+      </message>
+      <message desc="Describes an element with the ARIA role region." name="IDS_CHROMEVOX_ARIA_ROLE_REGION">
+        Region
+      </message>
+      <message desc="Braille of element with the ARIA role region." name="IDS_CHROMEVOX_ARIA_ROLE_REGION_BRL">
+        rgn
+      </message>
+      <message desc="Describes an element with the ARIA role rowheader." name="IDS_CHROMEVOX_ARIA_ROLE_ROWHEADER">
+        Row header
+      </message>
+      <message desc="Braille of element with the ARIA role rowheader." name="IDS_CHROMEVOX_ARIA_ROLE_ROWHEADER_BRL">
+        rw hd
+      </message>
+      <message desc="Describes an element with the ARIA role search." name="IDS_CHROMEVOX_ARIA_ROLE_SEARCH">
+        Search
+      </message>
+      <message desc="Braille of element with the ARIA role search." name="IDS_CHROMEVOX_ARIA_ROLE_SEARCH_BRL">
+        srch
+      </message>
+      <message desc="Describes an element with the ARIA role separator." name="IDS_CHROMEVOX_ARIA_ROLE_SEPARATOR">
+        Separator
+      </message>
+      <message desc="Braille of element with the ARIA role separator." name="IDS_CHROMEVOX_ARIA_ROLE_SEPARATOR_BRL">
+        sprtr
+      </message>
+      <message desc="Describes an element with the ARIA attribute aria-autocomplete=inline." name="IDS_CHROMEVOX_ARIA_AUTOCOMPLETE_INLINE">
+        Autocompletion inline
+      </message>
+      <message desc="Braille of element with the ARIA attribute aria-autocomplete=inline." name="IDS_CHROMEVOX_ARIA_AUTOCOMPLETE_INLINE_BRL">
+        autocomplete
+      </message>
+      <message desc="Describes an element with the ARIA attribute aria-autocomplete=list." name="IDS_CHROMEVOX_ARIA_AUTOCOMPLETE_LIST">
+        Autocompletion list
+      </message>
+      <message desc="Braille of element with the ARIA attribute aria-autocomplete=list." name="IDS_CHROMEVOX_ARIA_AUTOCOMPLETE_LIST_BRL">
+        autocomplete lst
+      </message>
+      <message desc="Describes an element with the ARIA attribute aria-autocomplete=both." name="IDS_CHROMEVOX_ARIA_AUTOCOMPLETE_BOTH">
+        Autocompletion inline and list
+      </message>
+      <message desc="Brailles an element with the ARIA attribute aria-autocomplete=both." name="IDS_CHROMEVOX_ARIA_AUTOCOMPLETE_BOTH_BRL">
+        autocomplete lst
+      </message>
+      <message desc="Describes an element with the ARIA attribute aria-checked=true." name="IDS_CHROMEVOX_ARIA_CHECKED_TRUE">
+        Checked
+      </message>
+      <message desc="Braille of element with the ARIA attribute aria-checked=true." name="IDS_CHROMEVOX_ARIA_CHECKED_TRUE_BRL">
+        x
+      </message>
+      <message desc="Describes an element with the ARIA attribute aria-checked=false." name="IDS_CHROMEVOX_ARIA_CHECKED_FALSE">
+        Not checked
+      </message>
+      <message desc="Braille of element with the ARIA attribute aria-checked=false." name="IDS_CHROMEVOX_ARIA_CHECKED_FALSE_BRL">
+        ''' '''
+      </message>
+      <message desc="Describes an element with the ARIA attribute aria-checked=mixed." name="IDS_CHROMEVOX_ARIA_CHECKED_MIXED">
+        Partially checked
+      </message>
+      <message desc="Braille of element with the ARIA attribute aria-checked=mixed." name="IDS_CHROMEVOX_ARIA_CHECKED_MIXED_BRL">
+        /x
+      </message>
+      <message desc="Describes an element with the ARIA attribute aria-disabled=true." name="IDS_CHROMEVOX_ARIA_DISABLED_TRUE">
+        Disabled
+      </message>
+      <message desc="Braille of element with the ARIA attribute aria-disabled=true." name="IDS_CHROMEVOX_ARIA_DISABLED_TRUE_BRL">
+        =
+      </message>
+      <message desc="Describes an element with the ARIA attribute aria-expanded=true." name="IDS_CHROMEVOX_ARIA_EXPANDED_TRUE">
+        Expanded
+      </message>
+      <message desc="Braille of element with the ARIA attribute aria-expanded=true." name="IDS_CHROMEVOX_ARIA_EXPANDED_TRUE_BRL">
+        &gt;
+      </message>
+      <message desc="Describes an element with the ARIA attribute aria-expanded=false." name="IDS_CHROMEVOX_ARIA_EXPANDED_FALSE">
+        Collapsed
+      </message>
+      <message desc="Braille of element with the ARIA attribute aria-expanded=false." name="IDS_CHROMEVOX_ARIA_EXPANDED_FALSE_BRL">
+        &lt;
+      </message>
+      <message desc="Describes an element with the ARIA attribute aria-invalid=true." name="IDS_CHROMEVOX_ARIA_INVALID_TRUE">
+        Invalid input
+      </message>
+      <message desc="Braille of element with the ARIA attribute aria-invalid=true." name="IDS_CHROMEVOX_ARIA_INVALID_TRUE_BRL">
+        !
+      </message>
+      <message desc="Describes an element with the ARIA attribute aria-invalid=grammar." name="IDS_CHROMEVOX_ARIA_INVALID_GRAMMAR">
+        Grammatical mistake detected
+      </message>
+      <message desc="Braille of element with the ARIA attribute aria-invalid=grammar." name="IDS_CHROMEVOX_ARIA_INVALID_GRAMMAR_BRL">
+        Grammatical mistake detected
+      </message>
+      <message desc="Describes an element with the ARIA attribute aria-invalid=spelling." name="IDS_CHROMEVOX_ARIA_INVALID_SPELLING">
+        Spelling mistake detected
+      </message>
+      <message desc="Braille of element with the ARIA attribute aria-invalid=spelling." name="IDS_CHROMEVOX_ARIA_INVALID_SPELLING_BRL">
+        misspelled
+      </message>
+      <message desc="Describes an element with the ARIA attribute aria-multiline=true." name="IDS_CHROMEVOX_ARIA_MULTILINE_TRUE">
+        Multi line
+      </message>
+      <message desc="Braille of element with the ARIA attribute aria-multiline=true." name="IDS_CHROMEVOX_ARIA_MULTILINE_TRUE_BRL">
+        mult ln
+      </message>
+      <message desc="Describes an element with the ARIA attribute aria-multiselectable=true." name="IDS_CHROMEVOX_ARIA_MULTISELECTABLE_TRUE">
+        Multi select
+      </message>
+      <message desc="Braille of element with the ARIA attribute aria-multiselectable=true." name="IDS_CHROMEVOX_ARIA_MULTISELECTABLE_TRUE_BRL">
+        mult sel
+      </message>
+      <message desc="Describes an element with the ARIA attribute aria-pressed=true." name="IDS_CHROMEVOX_ARIA_PRESSED_TRUE">
+        Pressed
+      </message>
+      <message desc="Braille of element with the ARIA attribute aria-pressed=true." name="IDS_CHROMEVOX_ARIA_PRESSED_TRUE_BRL">
+        x
+      </message>
+      <message desc="Describes an element with the ARIA attribute aria-pressed=false." name="IDS_CHROMEVOX_ARIA_PRESSED_FALSE">
+        Not pressed
+      </message>
+      <message desc="Braille of element with the ARIA attribute aria-pressed=false." name="IDS_CHROMEVOX_ARIA_PRESSED_FALSE_BRL">
+        ''' '''
+      </message>
+      <message desc="Describes an element with the ARIA attribute aria-pressed=mixed." name="IDS_CHROMEVOX_ARIA_PRESSED_MIXED">
+        Partially pressed
+      </message>
+      <message desc="Braille of element with the ARIA attribute aria-pressed=mixed." name="IDS_CHROMEVOX_ARIA_PRESSED_MIXED_BRL">
+        /x
+      </message>
+      <message desc="Describes an element with the ARIA attribute aria-readonly=true." name="IDS_CHROMEVOX_ARIA_READONLY_TRUE">
+        Read only
+      </message>
+      <message desc="Braille of element with the ARIA attribute aria-readonly=true." name="IDS_CHROMEVOX_ARIA_READONLY_TRUE_BRL">
+        rdonly
+      </message>
+      <message desc="Describes an element with the ARIA attribute aria-required=true." name="IDS_CHROMEVOX_ARIA_REQUIRED_TRUE">
+        Required
+      </message>
+      <message desc="Braille of element with the ARIA attribute aria-required=true." name="IDS_CHROMEVOX_ARIA_REQUIRED_TRUE_BRL">
+        req
+      </message>
+      <message desc="Describes an element with the ARIA attribute aria-selected=true." name="IDS_CHROMEVOX_ARIA_SELECTED_TRUE">
+        Selected
+      </message>
+      <message desc="Braille of element with the ARIA attribute aria-selected=true." name="IDS_CHROMEVOX_ARIA_SELECTED_TRUE_BRL">
+        x
+      </message>
+      <message desc="Describes an element with the ARIA attribute aria-selected=false." name="IDS_CHROMEVOX_ARIA_SELECTED_FALSE">
+        Not selected
+      </message>
+      <message desc="Braille of element with the ARIA attribute aria-selected=false." name="IDS_CHROMEVOX_ARIA_SELECTED_FALSE_BRL">
+        ''' '''
+      </message>
+      <message desc="Spoken to describe an &lt;a&gt; tag." name="IDS_CHROMEVOX_TAG_LINK">
+        Link
+      </message>
+      <message desc="Brailled to describe an &lt;a&gt; tag." name="IDS_CHROMEVOX_TAG_LINK_BRL">
+        lnk
+      </message>
+      <message desc="Spoken to describe a &lt;button&gt; tag." name="IDS_CHROMEVOX_TAG_BUTTON">
+        Button
+      </message>
+      <message desc="Brailled to describe a &lt;button&gt; tag." name="IDS_CHROMEVOX_TAG_BUTTON_BRL">
+        btn
+      </message>
+      <message desc="Spoken to describe a &lt;h1&gt; tag." name="IDS_CHROMEVOX_TAG_H1">
+        Heading 1
+      </message>
+      <message desc="Brailled to describe a &lt;h1&gt; tag." name="IDS_CHROMEVOX_TAG_H1_BRL">
+        h1
+      </message>
+      <message desc="Spoken to describe a &lt;h2&gt; tag." name="IDS_CHROMEVOX_TAG_H2">
+        Heading 2
+      </message>
+      <message desc="Brailled to describe a &lt;h2&gt; tag." name="IDS_CHROMEVOX_TAG_H2_BRL">
+        h2
+      </message>
+      <message desc="Spoken to describe a &lt;h3&gt; tag." name="IDS_CHROMEVOX_TAG_H3">
+        Heading 3
+      </message>
+      <message desc="Brailled to describe a &lt;h3&gt; tag." name="IDS_CHROMEVOX_TAG_H3_BRL">
+        h3
+      </message>
+      <message desc="Spoken to describe a &lt;h4&gt; tag." name="IDS_CHROMEVOX_TAG_H4">
+        Heading 4
+      </message>
+      <message desc="Brailled to describe a &lt;h4&gt; tag." name="IDS_CHROMEVOX_TAG_H4_BRL">
+        h4
+      </message>
+      <message desc="Spoken to describe a &lt;h5&gt; tag." name="IDS_CHROMEVOX_TAG_H5">
+        Heading 5
+      </message>
+      <message desc="Brailled to describe a &lt;h5&gt; tag." name="IDS_CHROMEVOX_TAG_H5_BRL">
+        h5
+      </message>
+      <message desc="Spoken to describe a &lt;h6&gt; tag." name="IDS_CHROMEVOX_TAG_H6">
+        Heading 6
+      </message>
+      <message desc="Brailled to describe a &lt;h6&gt; tag." name="IDS_CHROMEVOX_TAG_H6_BRL">
+        h6
+      </message>
+      <message desc="Spoken to describe a &lt;li&gt; tag." name="IDS_CHROMEVOX_TAG_LI">
+        List item
+      </message>
+      <message desc="Brailled to describe a &lt;li&gt; tag." name="IDS_CHROMEVOX_TAG_LI_BRL">
+        lstitm
+      </message>
+      <message desc="Spoken to describe a &lt;ol&gt; tag." name="IDS_CHROMEVOX_TAG_OL">
+        Ordered List
+      </message>
+      <message desc="Brailled to describe a &lt;ol&gt; tag." name="IDS_CHROMEVOX_TAG_OL_BRL">
+        lst
+      </message>
+      <message desc="Spoken to describe a &lt;select&gt; tag." name="IDS_CHROMEVOX_TAG_SELECT">
+        Combo box
+      </message>
+      <message desc="Brailled to describe a &lt;select&gt; tag." name="IDS_CHROMEVOX_TAG_SELECT_BRL">
+        cbx
+      </message>
+      <message desc="Spoken to describe a &lt;textarea&gt; tag." name="IDS_CHROMEVOX_TAG_TEXTAREA">
+        Text area
+      </message>
+      <message desc="Brailled to describe a &lt;textarea&gt; tag." name="IDS_CHROMEVOX_TAG_TEXTAREA_BRL">
+        txta
+      </message>
+      <message desc="Spoken to describe a &lt;table&gt; tag." name="IDS_CHROMEVOX_TAG_TABLE">
+        table
+      </message>
+      <message desc="Brailled to describe a &lt;table&gt; tag." name="IDS_CHROMEVOX_TAG_TABLE_BRL">
+        tbl
+      </message>
+      <message desc="Spoken to describe a &lt;ul&gt; tag." name="IDS_CHROMEVOX_TAG_UL">
+        List
+      </message>
+      <message desc="Brailled to describe a &lt;ul&gt; tag." name="IDS_CHROMEVOX_TAG_UL_BRL">
+        lst
+      </message>
+      <message desc="Spoken to describe a &lt;section&gt; tag." name="IDS_CHROMEVOX_TAG_SECTION">
+        Section
+      </message>
+      <message desc="Brailled to describe a &lt;section&gt; tag." name="IDS_CHROMEVOX_TAG_SECTION_BRL">
+        stn
+      </message>
+      <message desc="Spoken to describe a &lt;nav&gt; tag." name="IDS_CHROMEVOX_TAG_NAV">
+        Navigation
+      </message>
+      <message desc="Brailled to describe a &lt;nav&gt; tag." name="IDS_CHROMEVOX_TAG_NAV_BRL">
+        nav
+      </message>
+      <message desc="Spoken to describe a &lt;article&gt; tag." name="IDS_CHROMEVOX_TAG_ARTICLE">
+        Article
+      </message>
+      <message desc="Brailled to describe a &lt;article&gt; tag." name="IDS_CHROMEVOX_TAG_ARTICLE_BRL">
+        article
+      </message>
+      <message desc="Spoken to describe a &lt;aside&gt; tag." name="IDS_CHROMEVOX_TAG_ASIDE">
+        Aside
+      </message>
+      <message desc="Brailled to describe a &lt;aside&gt; tag." name="IDS_CHROMEVOX_TAG_ASIDE_BRL">
+        aside
+      </message>
+      <message desc="Spoken to describe a &lt;hgroup&gt; tag." name="IDS_CHROMEVOX_TAG_HGROUP">
+        Heading group
+      </message>
+      <message desc="Brailled to describe a &lt;hgroup&gt; tag." name="IDS_CHROMEVOX_TAG_HGROUP_BRL">
+        hgrp
+      </message>
+      <message desc="Spoken to describe a &lt;header&gt; tag." name="IDS_CHROMEVOX_TAG_HEADER">
+        Header
+      </message>
+      <message desc="Brailled to describe a &lt;header&gt; tag." name="IDS_CHROMEVOX_TAG_HEADER_BRL">
+        hdr
+      </message>
+      <message desc="Spoken to describe a &lt;footer&gt; tag." name="IDS_CHROMEVOX_TAG_FOOTER">
+        Footer
+      </message>
+      <message desc="Brailled to describe a &lt;footer&gt; tag." name="IDS_CHROMEVOX_TAG_FOOTER_BRL">
+        ftr
+      </message>
+      <message desc="Spoken to describe a &lt;time&gt; tag." name="IDS_CHROMEVOX_TAG_TIME">
+        Time
+      </message>
+      <message desc="Brailled to describe a &lt;time&gt; tag." name="IDS_CHROMEVOX_TAG_TIME_BRL">
+        ''' '''
+      </message>
+      <message desc="Spoken to describe a &lt;mark&gt; tag." name="IDS_CHROMEVOX_TAG_MARK">
+        Mark
+      </message>
+      <message desc="Brailled to describe a &lt;mark&gt; tag." name="IDS_CHROMEVOX_TAG_MARK_BRL">
+        mark
+      </message>
+      <message desc="Spoken to describe a &lt;video&gt; tag." name="IDS_CHROMEVOX_TAG_VIDEO">
+        Video
+      </message>
+      <message desc="Brailled to describe a &lt;video&gt; tag." name="IDS_CHROMEVOX_TAG_VIDEO_BRL">
+        video
+      </message>
+      <message desc="Spoken to describe a &lt;audio&gt; tag." name="IDS_CHROMEVOX_TAG_AUDIO">
+        Audio
+      </message>
+      <message desc="Brailled to describe a &lt;audio&gt; tag." name="IDS_CHROMEVOX_TAG_AUDIO_BRL">
+        audio
+      </message>
+      <message desc="Describes an &lt;input&gt; element with type=button." name="IDS_CHROMEVOX_INPUT_TYPE_BUTTON">
+        Button
+      </message>
+      <message desc="Brailles an &lt;input&gt; element with type=button." name="IDS_CHROMEVOX_INPUT_TYPE_BUTTON_BRL">
+        btn
+      </message>
+      <message desc="Describes an &lt;input&gt; element with type=checkbox." name="IDS_CHROMEVOX_INPUT_TYPE_CHECKBOX">
+        Check box
+      </message>
+      <message desc="Brailles an &lt;input&gt; element with type=checkbox." name="IDS_CHROMEVOX_INPUT_TYPE_CHECKBOX_BRL">
+        chx
+      </message>
+      <message desc="Describes an &lt;input&gt; element with type=color." name="IDS_CHROMEVOX_INPUT_TYPE_COLOR">
+        Color picker
+      </message>
+      <message desc="Brailles an &lt;input&gt; element with type=color." name="IDS_CHROMEVOX_INPUT_TYPE_COLOR_BRL">
+        color picker
+      </message>
+      <message desc="Describes an &lt;input&gt; element with type=datetime." name="IDS_CHROMEVOX_INPUT_TYPE_DATETIME">
+        Date time control
+      </message>
+      <message desc="Brailles an &lt;input&gt; element with type=datetime." name="IDS_CHROMEVOX_INPUT_TYPE_DATETIME_BRL">
+        date time
+      </message>
+      <message desc="Describes an &lt;input&gt; element with type=datetime-local." name="IDS_CHROMEVOX_INPUT_TYPE_DATETIME_LOCAL">
+        Date time control
+      </message>
+      <message desc="Brailles an &lt;input&gt; element with type=datetime-local." name="IDS_CHROMEVOX_INPUT_TYPE_DATETIME_LOCAL_BRL">
+        date time
+      </message>
+      <message desc="Describes an &lt;input&gt; element with type=date." name="IDS_CHROMEVOX_INPUT_TYPE_DATE">
+        Date control
+      </message>
+      <message desc="Brailles an &lt;input&gt; element with type=date." name="IDS_CHROMEVOX_INPUT_TYPE_DATE_BRL">
+        date
+      </message>
+      <message desc="Describes an &lt;input&gt; element with type=email." name="IDS_CHROMEVOX_INPUT_TYPE_EMAIL">
+        Edit text, email entry
+      </message>
+      <message desc="Brailles an &lt;input&gt; element with type=email." name="IDS_CHROMEVOX_INPUT_TYPE_EMAIL_BRL">
+        edtxt email
+      </message>
+      <message desc="Describes an &lt;input&gt; element with type=file." name="IDS_CHROMEVOX_INPUT_TYPE_FILE">
+        File selection
+      </message>
+      <message desc="Brailles an &lt;input&gt; element with type=file." name="IDS_CHROMEVOX_INPUT_TYPE_FILE_BRL">
+        file
+      </message>
+      <message desc="Describes an &lt;input&gt; element with type=image." name="IDS_CHROMEVOX_INPUT_TYPE_IMAGE">
+        Button
+      </message>
+      <message desc="Brailles an &lt;input&gt; element with type=image." name="IDS_CHROMEVOX_INPUT_TYPE_IMAGE_BRL">
+        btn
+      </message>
+      <message desc="Describes an &lt;input&gt; element with type=month." name="IDS_CHROMEVOX_INPUT_TYPE_MONTH">
+        Month control
+      </message>
+      <message desc="Brailles an &lt;input&gt; element with type=month." name="IDS_CHROMEVOX_INPUT_TYPE_MONTH_BRL">
+        month
+      </message>
+      <message desc="Describes an &lt;input&gt; element with type=number." name="IDS_CHROMEVOX_INPUT_TYPE_NUMBER">
+        Edit text numeric only
+      </message>
+      <message desc="Brailles an &lt;input&gt; element with type=number." name="IDS_CHROMEVOX_INPUT_TYPE_NUMBER_BRL">
+        edtxt#
+      </message>
+      <message desc="Describes an &lt;input&gt; element with type=password." name="IDS_CHROMEVOX_INPUT_TYPE_PASSWORD">
+        Password edit text
+      </message>
+      <message desc="Brailles an &lt;input&gt; element with type=password." name="IDS_CHROMEVOX_INPUT_TYPE_PASSWORD_BRL">
+        pwd edtxt
+      </message>
+      <message desc="Describes an &lt;input&gt; element with type=radio." name="IDS_CHROMEVOX_INPUT_TYPE_RADIO">
+        Radio button
+      </message>
+      <message desc="Brailles an &lt;input&gt; element with type=radio." name="IDS_CHROMEVOX_INPUT_TYPE_RADIO_BRL">
+        rd btn
+      </message>
+      <message desc="Describes an &lt;input&gt; element with type=range." name="IDS_CHROMEVOX_INPUT_TYPE_RANGE">
+        Slider
+      </message>
+      <message desc="Brailles an &lt;input&gt; element with type=range." name="IDS_CHROMEVOX_INPUT_TYPE_RANGE_BRL">
+        slr
+      </message>
+      <message desc="Describes an &lt;input&gt; element with type=reset." name="IDS_CHROMEVOX_INPUT_TYPE_RESET">
+        Reset
+      </message>
+      <message desc="Brailles an &lt;input&gt; element with type=reset." name="IDS_CHROMEVOX_INPUT_TYPE_RESET_BRL">
+        reset
+      </message>
+      <message desc="Describes an &lt;input&gt; element with type=search." name="IDS_CHROMEVOX_INPUT_TYPE_SEARCH">
+        Edit text, search entry
+      </message>
+      <message desc="Brailles an &lt;input&gt; element with type=search." name="IDS_CHROMEVOX_INPUT_TYPE_SEARCH_BRL">
+        search edtxt
+      </message>
+      <message desc="Describes an &lt;input&gt; element with type=submit." name="IDS_CHROMEVOX_INPUT_TYPE_SUBMIT">
+        Button
+      </message>
+      <message desc="Brailles an &lt;input&gt; element with type=submit." name="IDS_CHROMEVOX_INPUT_TYPE_SUBMIT_BRL">
+        btn
+      </message>
+      <message desc="Describes an &lt;input&gt; element with type=tel." name="IDS_CHROMEVOX_INPUT_TYPE_TEL">
+        Edit text, number entry
+      </message>
+      <message desc="Brailles an &lt;input&gt; element with type=tel." name="IDS_CHROMEVOX_INPUT_TYPE_TEL_BRL">
+        tele# edtxt
+      </message>
+      <message desc="Describes an &lt;input&gt; element with type=text." name="IDS_CHROMEVOX_INPUT_TYPE_TEXT">
+        Edit text
+      </message>
+      <message desc="Brailles an &lt;input&gt; element with type=text." name="IDS_CHROMEVOX_INPUT_TYPE_TEXT_BRL">
+        edtxt
+      </message>
+      <message desc="Describes an &lt;input&gt; element with type=url." name="IDS_CHROMEVOX_INPUT_TYPE_URL">
+        Edit text, URL entry
+      </message>
+      <message desc="Brailles an &lt;input&gt; element with type=url." name="IDS_CHROMEVOX_INPUT_TYPE_URL_BRL">
+        url edtxt
+      </message>
+      <message desc="Describes an &lt;input&gt; element with type=week." name="IDS_CHROMEVOX_INPUT_TYPE_WEEK">
+        Week of the year control
+      </message>
+      <message desc="Brailles an &lt;input&gt; element with type=week." name="IDS_CHROMEVOX_INPUT_TYPE_WEEK_BRL">
+        week
+      </message>
+      <message desc="Spoken to describe a &lt;a&gt; tag with a link to an internal anchor." name="IDS_CHROMEVOX_INTERNAL_LINK">
+        Internal link
+      </message>
+      <message desc="Brailles to describe a &lt;a&gt; tag with a link to an internal anchor." name="IDS_CHROMEVOX_INTERNAL_LINK_BRL">
+        int lnk
+      </message>
+      <message desc="In an editable text box, describes a blank line." name="IDS_CHROMEVOX_TEXT_BOX_BLANK">
+        Blank
+      </message>
+      <message desc="In an editable text box, describes a line with only whitespace." name="IDS_CHROMEVOX_TEXT_BOX_WHITESPACE">
+        Space
+      </message>
+      <message desc="Further describes a list-like element with a number of items. e.g. This will be combined with other messages to produce: List with 3 items. NOTE(deboer):  This is questionable, it may be better to include 'List' in this message." name="IDS_CHROMEVOX_LIST_WITH_ITEMS">
+        with <ph name="num">$1</ph> items
+      </message>
+      <message desc="Further describes a list-like element with a number of items in braille." name="IDS_CHROMEVOX_LIST_WITH_ITEMS_BRL">
+        +<ph name="num">$1</ph>
+      </message>
+      <message desc="Describes the state of a progress bar, in percent." name="IDS_CHROMEVOX_STATE_PERCENT">
+        <ph name="num">$1</ph>%
+      </message>
+      <message desc="Brailles the state of a progress bar, in percent." name="IDS_CHROMEVOX_STATE_PERCENT_BRL">
+        <ph name="num">$1</ph>%
+      </message>
+      <message desc="Phrase indicating a menu item has a submenu." name="IDS_CHROMEVOX_HAS_SUBMENU">
+        with submenu
+      </message>
+      <message desc="Brailled after an menu is spoken if the menu has a submenu." name="IDS_CHROMEVOX_HAS_SUBMENU_BRL">
+        +submnu
+      </message>
+      <message desc="Phrase indicating a control has a pop-up component to it." name="IDS_CHROMEVOX_HAS_POPUP">
+        has popup
+      </message>
+      <message desc="Brailled phrase indicating a control has a pop-up component to it." name="IDS_CHROMEVOX_HAS_POPUP_BRL">
+        has popup
+      </message>
+      <message desc="Describes a collection of tags. e.g. A 'link collection'." name="IDS_CHROMEVOX_COLLECTION">
+        <ph name="tag">$1</ph> collection with <ph name="num">$2</ph> items
+      </message>
+      <message desc='The "Enter" key on the keyboard.' name="IDS_CHROMEVOX_ENTER_KEY">
+        Enter
+      </message>
+      <message desc='The "Space" key on the keyboard.' name="IDS_CHROMEVOX_SPACE_KEY">
+        Space
+      </message>
+      <message desc='The "Backspace" key on the keyboard.' name="IDS_CHROMEVOX_BACKSPACE_KEY">
+        Backspace
+      </message>
+      <message desc='The "Tab" key on the keyboard.' name="IDS_CHROMEVOX_TAB_KEY">
+        Tab
+      </message>
+      <message desc='The "Left" key on the keyboard.' name="IDS_CHROMEVOX_LEFT_KEY">
+        Left
+      </message>
+      <message desc='The "Up" key on the keyboard.' name="IDS_CHROMEVOX_UP_KEY">
+        Up
+      </message>
+      <message desc='The "Right" key on the keyboard.' name="IDS_CHROMEVOX_RIGHT_KEY">
+        Right
+      </message>
+      <message desc='The "Down" key on the keyboard.' name="IDS_CHROMEVOX_DOWN_KEY">
+        Down
+      </message>
+      <message desc="Describes an element with a link that has no known URL." name="IDS_CHROMEVOX_UNKNOWN_LINK">
+        Unknown link
+      </message>
+      <message desc="The spoken feedback for the command to toggle ChromeVox between active and inactive states." name="IDS_CHROMEVOX_TOGGLE_CHROMEVOX_ACTIVE">
+        Toggle ChromeVox active or inactive.
+      </message>
+      <message desc="The spoken feedback when ChromeVox becomes inactive." name="IDS_CHROMEVOX_CHROMEVOX_INACTIVE">
+        ChromeVox is now inactive.
+      </message>
+      <message desc="The indicator of a pause to tts." name="IDS_CHROMEVOX_PAUSE">
+        , '''
+      </message>
+      <message desc="The indicator of a end to tts." name="IDS_CHROMEVOX_END">
+        . '''
+      </message>
+      <message desc="Description of the previous different element command displayed in the options page." name="IDS_CHROMEVOX_PREVIOUS_DIFFERENT_ELEMENT">
+        Previous different element.
+      </message>
+      <message desc="Description of the next different element command displayed in the options page." name="IDS_CHROMEVOX_NEXT_DIFFERENT_ELEMENT">
+        Next different element.
+      </message>
+      <message desc="Description of the previous similar element command displayed in the options page." name="IDS_CHROMEVOX_PREVIOUS_SIMILAR_ELEMENT">
+        Previous similar element.
+      </message>
+      <message desc="Description of the next similar element command." name="IDS_CHROMEVOX_NEXT_SIMILAR_ELEMENT">
+        Next similar element.
+      </message>
+      <message desc="Verbal indication of no more similar elements." name="IDS_CHROMEVOX_NO_MORE_SIMILAR_ELEMENTS">
+        No more similar elements.
+      </message>
+      <message desc="Verbal indication of no more different elements." name="IDS_CHROMEVOX_NO_MORE_DIFFERENT_ELEMENTS">
+        No more different elements.
+      </message>
+      <message desc="Describes an element with the ARIA role link." name="IDS_CHROMEVOX_INDEX_TOTAL">
+        <ph name="index">$1</ph> of <ph name="total">$2</ph>
+      </message>
+      <message desc="Description of the enter group exploration user command. Displayed in the Options page." name="IDS_CHROMEVOX_ENTER_CSS_SPACE">
+        Enter group exploration
+      </message>
+      <message desc="Spoken when entering group exploration." name="IDS_CHROMEVOX_ENTER_GROUP_EXPLORATION">
+        Exploring groups
+      </message>
+      <message desc="A message displayed at the top of PDF files where text has been automatically extracted for accessibility." name="IDS_CHROMEVOX_PDF_HEADER">
+        This page contains the text automatically extracted from the PDF file &lt;b&gt;<ph name="filename">$1</ph>&lt;/b&gt;. &lt;a href="<ph name="url">$2</ph>"&gt;Click here for the original.&lt;/a&gt;
+      </message>
+      <message desc="A message spoken when the user switches to the object granularity, which allows users to navigate the page by objects." name="IDS_CHROMEVOX_OBJECT_STRATEGY">
+        Object
+      </message>
+      <message desc="A message spoken when the user switches to the group granularity, which allows users to navigate the page by groups." name="IDS_CHROMEVOX_GROUP_STRATEGY">
+        Group
+      </message>
+      <message desc="A message spoken when the user switches to the table granularity, which allows users to navigate within a group." name="IDS_CHROMEVOX_TABLE_STRATEGY">
+        Table
+      </message>
+      <message desc="A message spoken when the user switches to the row granularity, which allows users to navigate within a table." name="IDS_CHROMEVOX_ROW_GRANULARITY">
+        Row
+      </message>
+      <message desc="A message spoken when the user switches to the column granularity, which allows users to navigate within a column." name="IDS_CHROMEVOX_COLUMN_GRANULARITY">
+        Column
+      </message>
+      <message desc="A message spoken when the user switches to the MathMl tree granularity, which allows users to navigate within a math expression." name="IDS_CHROMEVOX_MATHML_TREE_GRANULARITY">
+        Math ML Tree
+      </message>
+      <message desc="A message spoken when the user switches to the MathMl layout granularity, which allows users to navigate within a math expression." name="IDS_CHROMEVOX_MATHML_LAYOUT_GRANULARITY">
+        Math ML Layout
+      </message>
+      <message desc="A message spoken when the user switches to the MathMl token granularity, which allows users to navigate within a math expression." name="IDS_CHROMEVOX_MATHML_TOKEN_GRANULARITY">
+        Math ML Token
+      </message>
+      <message desc="A message spoken when the user switches to the MathMl leaf granularity, which allows users to navigate within a math expression." name="IDS_CHROMEVOX_MATHML_LEAF_GRANULARITY">
+        Math ML Leaf
+      </message>
+      <message desc="A message spoken when the user switches to the visual granularity, which allows users to navigate the page by visual regions." name="IDS_CHROMEVOX_VISUAL_STRATEGY">
+        Visual
+      </message>
+      <message desc="A message spoken when the user switches to a custom granularity, which allows users to navigate in a yet-to-be-defined manner." name="IDS_CHROMEVOX_CUSTOM_STRATEGY">
+        Custom
+      </message>
+      <message desc="A message spoken when the user switches to the line granularity, which allows users to navigate the page one line at a time." name="IDS_CHROMEVOX_LINE_GRANULARITY">
+        Line
+      </message>
+      <message desc="A message spoken when the user switches to the sentence granularity, which allows users to navigate the page one sentence at a time." name="IDS_CHROMEVOX_SENTENCE_GRANULARITY">
+        Sentence
+      </message>
+      <message desc="A message spoken when the user switches to the word granularity, which allows users to navigate the page one word at a time." name="IDS_CHROMEVOX_WORD_GRANULARITY">
+        Word
+      </message>
+      <message desc="A message spoken when the user switches to the character granularity, which allows users to navigate the page one character at a time." name="IDS_CHROMEVOX_CHARACTER_GRANULARITY">
+        Character
+      </message>
+      <message desc="Spoken when the search widget first shows." name="IDS_CHROMEVOX_SEARCH_WIDGET_INTRO">
+        Find in page.
+      </message>
+      <message desc="Spoken help message when the search widget shows." name="IDS_CHROMEVOX_SEARCH_WIDGET_INTRO_HELP">
+        Enter a search query.
+      </message>
+      <message desc="Spoken message when the search widget hides." name="IDS_CHROMEVOX_SEARCH_WIDGET_OUTRO">
+        Exited find in page.
+      </message>
+      <message desc="Spoken message when the search widget has no more search results." name="IDS_CHROMEVOX_SEARCH_WIDGET_NO_RESULTS">
+        No more results.
+      </message>
+      <message desc="Category displayed in the options page under keyboard commands." name="IDS_CHROMEVOX_MODIFIER_KEYS">
+        Modifier Keys
+      </message>
+      <message desc="Category displayed in the options page under keyboard commands." name="IDS_CHROMEVOX_NAVIGATION">
+        ChromeVox Navigation
+      </message>
+      <message desc="Category displayed in the options page under keyboard commands." name="IDS_CHROMEVOX_INFORMATION">
+        Information
+      </message>
+      <message desc="Category displayed in the options page under keyboard commands." name="IDS_CHROMEVOX_HELP_COMMANDS">
+        Help Commands
+      </message>
+      <message desc="Category displayed in the options page under keyboard commands." name="IDS_CHROMEVOX_CONTROLLING_SPEECH">
+        Controlling Speech
+      </message>
+      <message desc="Category displayed in the options page under keyboard commands." name="IDS_CHROMEVOX_OVERVIEW">
+        Overview
+      </message>
+      <message desc="Category displayed in the options page under keyboard commands." name="IDS_CHROMEVOX_TABLES">
+        Tables
+      </message>
+      <message desc="Category displayed in the options page under keyboard commands." name="IDS_CHROMEVOX_JUMP_COMMANDS">
+        Jump Commands
+      </message>
+      <message desc="Category displayed in the options page under keyboard commands." name="IDS_CHROMEVOX_BRAILLE">
+        Braille
+      </message>
+      <message desc="Category displayed in the options page under keyboard commands." name="IDS_CHROMEVOX_DEVELOPER">
+        Developer
+      </message>
+      <message desc="Name of the classic key map." name="IDS_CHROMEVOX_KEYMAP_CLASSIC">
+        Classic keymap
+      </message>
+      <message desc="Name of the flat key map." name="IDS_CHROMEVOX_KEYMAP_FLAT">
+        Flat keymap
+      </message>
+      <message desc="Name of the experimental key map." name="IDS_CHROMEVOX_KEYMAP_EXPERIMENTAL">
+        Experimental keymap
+      </message>
+      <message desc="Description of the TTS console logging command. Displayed in the options page." name="IDS_CHROMEVOX_ENABLE_TTS_LOG">
+        Enable TTS logging
+      </message>
+      <message desc="Spoken when a user begins a selection on a webpage." name="IDS_CHROMEVOX_BEGIN_SELECTION">
+        Start selection
+      </message>
+      <message desc="Spoken when a user ends a selection on a webpage." name="IDS_CHROMEVOX_END_SELECTION">
+        End selection
+      </message>
+      <message desc="Spoken to describe the current selection." name="IDS_CHROMEVOX_SELECTION_IS">
+        Selection is '''
+      </message>
+      <message desc="Describes the toggle selection command. Displayed in the options page." name="IDS_CHROMEVOX_TOGGLE_SELECTION">
+        Start or end selection.
+      </message>
+      <message desc="Spoken when the browser's copy command is invoked." name="IDS_CHROMEVOX_COPY">
+        copy.
+      </message>
+      <message desc="Spoken when the browser's cut command is invoked." name="IDS_CHROMEVOX_CUT">
+        cut.
+      </message>
+      <message desc="Spoken when the browser's paste command is invoked." name="IDS_CHROMEVOX_PASTE">
+        paste.
+      </message>
+      <message desc="Spoken when additional characters are selected in editable text." name="IDS_CHROMEVOX_SELECTED">
+        selected
+      </message>
+      <message desc="Spoken in editable text when text is unselected." name="IDS_CHROMEVOX_UNSELECTED">
+        unselected
+      </message>
+      <message desc="Spoken when more than one character gets added to selection in editable text." name="IDS_CHROMEVOX_ADDED_TO_SELECTION">
+        added to selection
+      </message>
+      <message desc="Spoken when more than one character gets removed from selection in editable text." name="IDS_CHROMEVOX_REMOVED_FROM_SELECTION">
+        removed from selection
+      </message>
+      <message desc="Spoken as the conjunction between hotkey combinations like ctrl then alt followed by a." name="IDS_CHROMEVOX_THEN">
+        then
+      </message>
+      <message desc="Spoken as the conjunction between hotkey combinations like ctrl then alt followed by a." name="IDS_CHROMEVOX_FOLLOWED_BY">
+        followed by
+      </message>
+      <message desc="Spoken to describe the ChromeVox modifier keys when describing a key combination." name="IDS_CHROMEVOX_MODIFIER_KEY">
+        ChromeVox modifier
+      </message>
+      <message desc="Spoken when a key conflict occurs in the options page." name="IDS_CHROMEVOX_KEY_CONFLICT">
+        <ph name="key">$1</ph> is already assigned to a command.
+      </message>
+      <message desc="Spoken to describe the current selection is a Math object." name="IDS_CHROMEVOX_MATH_EXPR">
+        Math
+      </message>
+      <message desc="Brailled phrase indicating the current selection is a Math object." name="IDS_CHROMEVOX_MATH_EXPR_BRL">
+        Math
+      </message>
+      <message desc="Describes an element with the ARIA role math." name="IDS_CHROMEVOX_NOT_INSIDE_MATH">
+        Not inside math
+      </message>
+      <message desc="Time widget. Indicates the user is on the AM/PM field." name="IDS_CHROMEVOX_TIMEWIDGET_AMPM">
+        AM PM
+      </message>
+      <message desc="Time widget. Indicates the user is on the hours field." name="IDS_CHROMEVOX_TIMEWIDGET_HOURS">
+        hours
+      </message>
+      <message desc="Time widget. Indicates the user is on the minutes field." name="IDS_CHROMEVOX_TIMEWIDGET_MINUTES">
+        minutes
+      </message>
+      <message desc="Time widget. Indicates the user is on the seconds field." name="IDS_CHROMEVOX_TIMEWIDGET_SECONDS">
+        seconds
+      </message>
+      <message desc="Time widget. Indicates the user is on the milliseconds field." name="IDS_CHROMEVOX_TIMEWIDGET_MILLISECONDS">
+        milliseconds
+      </message>
+      <message desc="Time widget. Indicates the AM/PM is set to AM." name="IDS_CHROMEVOX_TIMEWIDGET_AM">
+        AM
+      </message>
+      <message desc="Time widget. Indicates the AM/PM is set to PM." name="IDS_CHROMEVOX_TIMEWIDGET_PM">
+        PM
+      </message>
+      <message desc="Date widget. Indicates the user is on the week field." name="IDS_CHROMEVOX_DATEWIDGET_WEEK">
+        week
+      </message>
+      <message desc="Date widget. Indicates that the month is January." name="IDS_CHROMEVOX_DATEWIDGET_JANUARY">
+        January
+      </message>
+      <message desc="Date widget. Indicates that the month is February." name="IDS_CHROMEVOX_DATEWIDGET_FEBRUARY">
+        February
+      </message>
+      <message desc="Date widget. Indicates that the month is March." name="IDS_CHROMEVOX_DATEWIDGET_MARCH">
+        March
+      </message>
+      <message desc="Date widget. Indicates that the month is April." name="IDS_CHROMEVOX_DATEWIDGET_APRIL">
+        April
+      </message>
+      <message desc="Date widget. Indicates that the month is May." name="IDS_CHROMEVOX_DATEWIDGET_MAY">
+        May
+      </message>
+      <message desc="Date widget. Indicates that the month is June." name="IDS_CHROMEVOX_DATEWIDGET_JUNE">
+        June
+      </message>
+      <message desc="Date widget. Indicates that the month is July." name="IDS_CHROMEVOX_DATEWIDGET_JULY">
+        July
+      </message>
+      <message desc="Date widget. Indicates that the month is August." name="IDS_CHROMEVOX_DATEWIDGET_AUGUST">
+        August
+      </message>
+      <message desc="Date widget. Indicates that the month is September." name="IDS_CHROMEVOX_DATEWIDGET_SEPTEMBER">
+        September
+      </message>
+      <message desc="Date widget. Indicates that the month is October." name="IDS_CHROMEVOX_DATEWIDGET_OCTOBER">
+        October
+      </message>
+      <message desc="Date widget. Indicates that the month is November." name="IDS_CHROMEVOX_DATEWIDGET_NOVEMBER">
+        November
+      </message>
+      <message desc="Date widget. Indicates that the month is December." name="IDS_CHROMEVOX_DATEWIDGET_DECEMBER">
+        December
+      </message>
+      <message desc="Spoken when a user switches to a mode announcing no punctuation." name="IDS_CHROMEVOX_NO_PUNCTUATION">
+        No punctuation
+      </message>
+      <message desc="Spoken when a user switches to a mode announcing some punctuation." name="IDS_CHROMEVOX_SOME_PUNCTUATION">
+        Some punctuation
+      </message>
+      <message desc="Spoken when a user switches to a mode announcing all punctuation." name="IDS_CHROMEVOX_ALL_PUNCTUATION">
+        All punctuation
+      </message>
+      <message desc="Spoken as help after every search result in search widget." name="IDS_CHROMEVOX_SEARCH_HELP_ITEM">
+        Press enter to accept or escape to cancel, down for next and up for previous.
+      </message>
+      <message desc="Spoken to describe a clickable element." name="IDS_CHROMEVOX_CLICKABLE">
+        clickable
+      </message>
+      <message desc="Brailled to describe a clickable element." name="IDS_CHROMEVOX_CLICKABLE_BRL">
+        clickable
+      </message>
+      <message desc="The description of the previous character command.  Displayed in the Options page." name="IDS_CHROMEVOX_PREVIOUS_CHARACTER">
+        Previous Character
+      </message>
+      <message desc="The description of the next character command.  Displayed in the Options page." name="IDS_CHROMEVOX_NEXT_CHARACTER">
+        Next Character
+      </message>
+      <message desc="The description of the previous word command.  Displayed in the Options page." name="IDS_CHROMEVOX_PREVIOUS_WORD">
+        Previous Word
+      </message>
+      <message desc="The description of the next word command.  Displayed in the Options page." name="IDS_CHROMEVOX_NEXT_WORD">
+        Next Word
+      </message>
+      <message desc="The description of the previous sentence command.  Displayed in the Options page." name="IDS_CHROMEVOX_PREVIOUS_SENTENCE">
+        Previous Sentence
+      </message>
+      <message desc="The description of the next sentence command.  Displayed in the Options page." name="IDS_CHROMEVOX_NEXT_SENTENCE">
+        Next Sentence
+      </message>
+      <message desc="The description of the previous line command.  Displayed in the Options page." name="IDS_CHROMEVOX_PREVIOUS_LINE">
+        Previous Line
+      </message>
+      <message desc="The description of the next line command.  Displayed in the Options page." name="IDS_CHROMEVOX_NEXT_LINE">
+        Next Line
+      </message>
+      <message desc="The description of the previous object command.  Displayed in the Options page." name="IDS_CHROMEVOX_PREVIOUS_OBJECT">
+        Previous Object
+      </message>
+      <message desc="The description of the next object command.  Displayed in the Options page." name="IDS_CHROMEVOX_NEXT_OBJECT">
+        Next Object
+      </message>
+      <message desc="The description of the previous group command.  Displayed in the Options page." name="IDS_CHROMEVOX_PREVIOUS_GROUP">
+        Previous Group
+      </message>
+      <message desc="The description of the next group command.  Displayed in the Options page." name="IDS_CHROMEVOX_NEXT_GROUP">
+        Next Group
+      </message>
+      <message desc="Describes nodes or anything describing them as a landmark." name="IDS_CHROMEVOX_ROLE_LANDMARK">
+        Landmark
+      </message>
+      <message desc="Spoken when user types invalid keys into the modifier selection field." name="IDS_CHROMEVOX_MODIFIER_ENTRY_ERROR">
+        No modifier pressed; please press and hold one or more modifiers; lift your fingers once done and you will hear the keys set. Tab to exit.
+      </message>
+      <message desc="Spoken when a modifier key becomes successfully set." name="IDS_CHROMEVOX_MODIFIER_ENTRY_SET">
+        <ph name="key">$1</ph> is now the new ChromeVox modifier.
+      </message>
+      <message desc="Spoken when resetting the current keymap to defaults." name="IDS_CHROMEVOX_KEYMAP_RESET">
+        <ph name="key">$1</ph> has been reset.
+      </message>
+      <message desc="Spoken when switched to a keymap different from the current one." name="IDS_CHROMEVOX_KEYMAP_SWITCH">
+        Switched to <ph name="key">$1</ph>.
+      </message>
+      <message desc="The description of the key to move to the beginning of the page. Displayed in the Options page." name="IDS_CHROMEVOX_JUMP_TO_TOP">
+        Jump to the top of the page
+      </message>
+      <message desc="The description of the key to move to the end of the page. Displayed in the Options page." name="IDS_CHROMEVOX_JUMP_TO_BOTTOM">
+        Jump to the bottom of the page
+      </message>
+      <message desc="Message telling the user that they will wrap to the top of the page." name="IDS_CHROMEVOX_WRAPPED_TO_TOP">
+        Wrapped to top
+      </message>
+      <message desc="Message telling the user that they will wrap to the bottom of the page." name="IDS_CHROMEVOX_WRAPPED_TO_BOTTOM">
+        Wrapped to bottom
+      </message>
+      <message desc="Description of the cycle punctuation echo key. Shown in options page." name="IDS_CHROMEVOX_CYCLE_PUNCTUATION_ECHO">
+        Cycle punctuation echo
+      </message>
+      <message desc="Description of the cycle typing echo key. Shown in options page." name="IDS_CHROMEVOX_CYCLE_TYPING_ECHO">
+        Cycle typing echo
+      </message>
+      <message desc="The description of the pauseAllMedia key. Shown in options page." name="IDS_CHROMEVOX_PAUSE_ALL_MEDIA">
+        Pauses all currently playing media widgets
+      </message>
+      <message desc="The description of the openLongDesc key. Shown in options page." name="IDS_CHROMEVOX_OPEN_LONG_DESC">
+        Open long description in a new tab
+      </message>
+      <message desc="Message telling the user that there is no long description if they try to open the long description for an element which does not have one." name="IDS_CHROMEVOX_NO_LONG_DESC">
+        No long description
+      </message>
+      <message desc="Message telling the user that the current image has a long description." name="IDS_CHROMEVOX_IMAGE_WITH_LONG_DESC">
+        Image with long description
+      </message>
+      <message desc="Describes the value of a selection of items within a listbox. For example, 'Mercury to Jupiter, selected 5 items'." name="IDS_CHROMEVOX_SELECTED_OPTIONS_VALUE">
+        <ph name="v1">$1</ph> to <ph name="v2">$2</ph>
+      </message>
+      <message desc="Brailles the value of a selection of items within a listbox. For example, 'Mercury-Jupiter, sld 5'." name="IDS_CHROMEVOX_SELECTED_OPTIONS_VALUE_BRL">
+        <ph name="v1">$1</ph>-<ph name="v2">$2</ph>
+      </message>
+      <message desc="Describes the count of a selection of items within a listbox. For example, 'Mercury to Jupiter, selected 5 items'." name="IDS_CHROMEVOX_SELECTED_OPTIONS_STATE">
+        selected <ph name="count">$1</ph> items
+      </message>
+      <message desc="Brailles the count of a selection of items within a listbox. For example, 'Mercury-Jupiter, sld 5'." name="IDS_CHROMEVOX_SELECTED_OPTIONS_STATE_BRL">
+        sld <ph name="count">$1</ph>
+      </message>
+      <message desc="Spoken when a selection on a page is cleared." name="IDS_CHROMEVOX_CLEAR_PAGE_SELECTION">
+        cleared selection
+      </message>
+      <message desc="Spoken to describe character echo (a setting to speak characters while typing into editable text fields)." name="IDS_CHROMEVOX_CHARACTER_ECHO">
+        character echo
+      </message>
+      <message desc="Spoken to describe word echo (a setting to speak words while typing into editable text fields)." name="IDS_CHROMEVOX_WORD_ECHO">
+        word echo
+      </message>
+      <message desc="Spoken to describe character and word echo (a setting to speak characters and words while typing into editable text fields)." name="IDS_CHROMEVOX_CHARACTER_AND_WORD_ECHO">
+        character and word echo
+      </message>
+      <message desc="Spoken to describe no echo (a setting to not speak characters or words while typing into editable text fields)." name="IDS_CHROMEVOX_NONE_ECHO">
+        no typing echo
+      </message>
+      <message desc="Describes the enter content command in the options page. Content refers to any special structure on the page such as tables or math." name="IDS_CHROMEVOX_ENTER_CONTENT">
+        enter structured content, such as tables
+      </message>
+      <message desc="Describes the exit content command in the options page. Content refers to any special structure on the page such as tables or math." name="IDS_CHROMEVOX_EXIT_CONTENT">
+        exit structured content, such as tables
+      </message>
+      <message desc="Announced when user enters special content such as tables." name="IDS_CHROMEVOX_ENTER_CONTENT_SAY">
+        entered <ph name="type">$1</ph>
+      </message>
+      <message desc="Spoken to describe structural lines." name="IDS_CHROMEVOX_STRUCTURAL_LINE">
+        structural line
+      </message>
+      <message desc="Spoken to describe layout lines." name="IDS_CHROMEVOX_LAYOUT_LINE">
+        line
+      </message>
+      <message desc="Displayed to describe the toggle line type (structural or layout). Shown in the options page." name="IDS_CHROMEVOX_TOGGLE_LINE_TYPE">
+        Toggle line type between structural or layout
+      </message>
+      <message desc="Describes the collection of navigation strategies for a table." name="IDS_CHROMEVOX_TABLE_SHIFTER">
+        table
+      </message>
+      <message desc="Describes the defaultset of navigation strategies." name="IDS_CHROMEVOX_NAVIGATION_SHIFTER">
+        default navigation
+      </message>
+      <message desc="Describes the collection of navigation strategies for math." name="IDS_CHROMEVOX_MATH_SHIFTER">
+        math
+      </message>
+      <message desc="Displayed to describes the key that toggles semantic interpretation of mathematical formulas." name="IDS_CHROMEVOX_TOGGLE_SEMANTICS">
+        Toggle interpretation of math expressions between structural and semantic
+      </message>
+      <message desc="Spoken when semantics interpretation is switched on." name="IDS_CHROMEVOX_SEMANTICS_ON">
+        Semantics on
+      </message>
+      <message desc="Spoken when semantics interpretation is switched off." name="IDS_CHROMEVOX_SEMANTICS_OFF">
+        Semantics off
+      </message>
+      <message desc='Used as a phonetic word hint for a particular letter. The word is used to clarify similarly sounding letters like m and n.  This mapping is taken directly from the NATO phonetic standard: https://en.wikipedia.org/wiki/NATO_phonetic_alphabet Please retain the structure of this string.  The structure is of the form {"letter": "phonetic word equivalent", ..., "letter": "phonetic word equivalent"}.  The first part of the mapping (letter) should be all letters of the localization in lower case. The second part (phonetic word equivalent) should be the word that describes the letter.' name="IDS_CHROMEVOX_PHONETIC_MAP">
+        {"a": "alpha", "b": "bravo", "c": "charlie", "d": "delta", "e": "echo", "f": "foxtrot", "g": "golf", "h": "hotel", "i": "india", "j": "juliet","k": "kilo", "l": "lima", "m": "mike", "n": "november", "o": "oscar","p": "papa", "q": "quebec", "r": "romeo", "s": "sierra", "t": "tango", "u": "uniform", "v": "victor", "w": "whiskey","x": "xray", "y": "yankee", "z": "zulu"}
+      </message>
+      <message desc="Announces that the current page has 1 alert." name="IDS_CHROMEVOX_PAGE_HAS_ONE_ALERT_SINGULAR">
+        This page has 1 alert
+      </message>
+      <message desc="Announces that the current page has multiple alerts." name="IDS_CHROMEVOX_PAGE_HAS_ALERTS_PLURAL">
+        This page has <ph name="num">$1</ph> alerts
+      </message>
+      <message desc="Describes a key sequence that will let the user review (examine and make a decision on) all of the alerts on the page." name="IDS_CHROMEVOX_REVIEW_ALERTS">
+        Press Alt+Shift+A to review alerts
+      </message>
+      <message desc="Spoken if the user attempts to jump to the next article when none exists." name="IDS_CHROMEVOX_NO_NEXT_ARTICLE">
+        No next article.
+      </message>
+      <message desc="Spoken if the user attempts to jump to the previous article when none exists." name="IDS_CHROMEVOX_NO_PREVIOUS_ARTICLE">
+        No previous article.
+      </message>
+      <message desc="Spoken when the browser first starts and ChromeVox is active." name="IDS_CHROMEVOX_CHROMEVOX_INTRO">
+        ChromeVox spoken feedback is ready
+      </message>
+      <message desc="Brailled when ChromeVox is connected to a braille display." name="IDS_CHROMEVOX_INTRO_BRL">
+        ChromeVox ready
+      </message>
+      <message desc="Spoken when earcons are on." name="IDS_CHROMEVOX_EARCONS_ON">
+        Earcons on
+      </message>
+      <message desc="Spoken when earcons are off." name="IDS_CHROMEVOX_EARCONS_OFF">
+        Earcons off
+      </message>
+      <message desc="Description of the toggle earcons key. Shown in options page." name="IDS_CHROMEVOX_TOGGLE_EARCONS">
+        Turn sound feedback (earcons) on or off.
+      </message>
+      <message desc="Description of the speak time and date key. Shown in options page." name="IDS_CHROMEVOX_SPEAK_TIME_AND_DATE">
+        Speak the current time and date.
+      </message>
+      <message desc="Abbreviation indicating following text is an incremental search result. For example, in English, the abbreviation might be 'S:' for 'Search'." name="IDS_CHROMEVOX_MARK_AS_SEARCH_RESULT_BRL">
+        S:<ph name="result">$1</ph>
+      </message>
+      <message desc="Announced when text within an editable text field gets deleted." name="IDS_CHROMEVOX_TEXT_DELETED">
+        Deleted
+      </message>
+      <message desc="Describes the perform default action command. This is usually triggered by hitting the enter key over a control. Shown in options page." name="IDS_CHROMEVOX_PERFORM_DEFAULT_ACTION">
+        Perform default action
+      </message>
+      <message desc="Spoken to describe a link (url) that has been previously visited." name="IDS_CHROMEVOX_VISITED_URL">
+        visited
+      </message>
+      <message desc="Brailled to describe a link (url) that has been previously visited." name="IDS_CHROMEVOX_VISITED_URL_BRL">
+        visited
+      </message>
+      <message desc="Exclamation (!) character description." name="IDS_CHROMEVOX_EXCLAMATION">
+        {COUNT, plural, =1 {exclamation point}other {# exclamation points}}
+      </message>
+      <message desc="Space ( ) character description." name="IDS_CHROMEVOX_SPACE">
+        {COUNT, plural, =1 {space}other {# spaces}}
+      </message>
+      <message desc="Backtcik (`) character description." name="IDS_CHROMEVOX_BACKTICK">
+        {COUNT, plural, =1 {backtick}other {# backticks}}
+      </message>
+      <message desc="Tilde (~) character description." name="IDS_CHROMEVOX_TILDE">
+        {COUNT, plural, =1 {TILDE}other {# tildes}}
+      </message>
+      <message desc="At (@) character description." name="IDS_CHROMEVOX_AT">
+        {COUNT, plural, =1 {at}other {# at signs}}
+      </message>
+      <message desc="Pound (#) character description." name="IDS_CHROMEVOX_POUND">
+        {COUNT, plural, =1 {pound}other {# pound signs}}
+      </message>
+      <message desc="Dollar ($) character description." name="IDS_CHROMEVOX_DOLLAR">
+        {COUNT, plural, =1 {dollar}other {# dollar signs}}
+      </message>
+      <message desc="Percent (%) character description." name="IDS_CHROMEVOX_PERCENT">
+        {COUNT, plural, =1 {percent}other {# percent signs}}
+      </message>
+      <message desc="Caret (^) character description." name="IDS_CHROMEVOX_CARET">
+        {COUNT, plural, =1 {caret}other {# carets}}
+      </message>
+      <message desc="Ampersand (&amp;) character description." name="IDS_CHROMEVOX_AMPERSAND">
+        {COUNT, plural, =1 {ampersand}other {# ampersands}}
+      </message>
+      <message desc="Asterisk (*) character description." name="IDS_CHROMEVOX_ASTERISK">
+        {COUNT, plural, =1 {asterisk}other {# asterisks}}
+      </message>
+      <message desc="Left parenthesis (() character description." name="IDS_CHROMEVOX_OPEN_PAREN">
+        {COUNT, plural, =1 {open paren}other {# open parens}}
+      </message>
+      <message desc="Right parenthesis ()) character description." name="IDS_CHROMEVOX_CLOSE_PAREN">
+        {COUNT, plural, =1 {close paren}other {# close parens}}
+      </message>
+      <message desc="Dash (-) character description." name="IDS_CHROMEVOX_DASH">
+        {COUNT, plural, =1 {dash}other {# dashes}}
+      </message>
+      <message desc="Underscore (_) character description." name="IDS_CHROMEVOX_UNDERSCORE">
+        {COUNT, plural, =1 {underscore}other {# underscores}}
+      </message>
+      <message desc="Equals (=) character description." name="IDS_CHROMEVOX_EQUALS">
+        {COUNT, plural, =1 {equal}other {# equal signs}}
+      </message>
+      <message desc="Plus (+) character description." name="IDS_CHROMEVOX_PLUS">
+        {COUNT, plural, =1 {plus}other {# plus signs}}
+      </message>
+      <message desc="Left bracket ([) character description." name="IDS_CHROMEVOX_LEFT_BRACKET">
+        {COUNT, plural, =1 {left bracket}other {# left brackets}}
+      </message>
+      <message desc="Right bracket (]) character description." name="IDS_CHROMEVOX_RIGHT_BRACKET">
+        {COUNT, plural, =1 {right bracket}other {# right brackets}}
+      </message>
+      <message desc="Left brace ({) character description." name="IDS_CHROMEVOX_LEFT_BRACE">
+        {COUNT, plural, =1 {left brace}other {# left braces}}
+      </message>
+      <message desc="Right brace (}) character description." name="IDS_CHROMEVOX_RIGHT_BRACE">
+        {COUNT, plural, =1 {right brace}other {# right braces}}
+      </message>
+      <message desc="Pipe (|) character description." name="IDS_CHROMEVOX_PIPE">
+        {COUNT, plural, =1 {pipe}other {# vertical pipes}}
+      </message>
+      <message desc="Semicolon (;) character description." name="IDS_CHROMEVOX_SEMICOLON">
+        {COUNT, plural, =1 {semicolon}other {# semicolons}}
+      </message>
+      <message desc="Colon (:) character description." name="IDS_CHROMEVOX_COLON">
+        {COUNT, plural, =1 {colon}other {# colons}}
+      </message>
+      <message desc="Comma (,) character description." name="IDS_CHROMEVOX_COMMA">
+        {COUNT, plural, =1 {comma}other {# commas}}
+      </message>
+      <message desc="Dot (.) character description." name="IDS_CHROMEVOX_DOT">
+        {COUNT, plural, =1 {dot}=3 {ellipsis}other {# dots}}
+      </message>
+      <message desc="Less than (&lt;) character description." name="IDS_CHROMEVOX_LESS_THAN">
+        {COUNT, plural, =1 {less than}other {# less than signs}}
+      </message>
+      <message desc="Greater than (&gt;) character description." name="IDS_CHROMEVOX_GREATER_THAN">
+        {COUNT, plural, =1 {greater than}other {# greater than signs}}
+      </message>
+      <message desc="Slash (/) character description." name="IDS_CHROMEVOX_SLASH">
+        {COUNT, plural, =1 {slash}other {# slashes}}
+      </message>
+      <message desc="Question mark (?) character description." name="IDS_CHROMEVOX_QUESTION_MARK">
+        {COUNT, plural, =1 {question mark}other {# question marks}}
+      </message>
+      <message desc='Quote (") character description.' name="IDS_CHROMEVOX_QUOTE">
+        {COUNT, plural, =1 {quote}other {# quotes}}
+      </message>
+      <message desc="Apostrophe (') character description." name="IDS_CHROMEVOX_APOSTROPHE">
+        {COUNT, plural, =1 {apostrophe}other {# apostrophes}}
+      </message>
+      <message desc="Tab (\t) character description." name="IDS_CHROMEVOX_TAB">
+        {COUNT, plural, =1 {tab}other {# tabs}}
+      </message>
+      <message desc="Backslash (\) character description." name="IDS_CHROMEVOX_BACKSLASH">
+        {COUNT, plural, =1 {backslash}other {# backslashes}}
+      </message>
+      <message desc="Describes the braille click command. Displayed in the options page." name="IDS_CHROMEVOX_BRAILLE_ROUTING">
+        Click the item under a routing key
+      </message>
+      <message desc="Describes the braille pan backward command. Displayed in the options page." name="IDS_CHROMEVOX_BRAILLE_PAN_LEFT">
+        Pan backward
+      </message>
+      <message desc="Describes the braille pan forward command. Displayed in the options page." name="IDS_CHROMEVOX_BRAILLE_PAN_RIGHT">
+        Pan forward
+      </message>
+      <message desc="The description of the braille previous line command.  Displayed in the Options page." name="IDS_CHROMEVOX_BRAILLE_LINE_UP">
+        Braille previous Line
+      </message>
+      <message desc="The description of the braille next line command.  Displayed in the Options page." name="IDS_CHROMEVOX_BRAILLE_LINE_DOWN">
+        Braille next Line
+      </message>
+      <message desc="The description of the braille top command.  Displayed in the Options page." name="IDS_CHROMEVOX_BRAILLE_TOP">
+        Move braille display to top of page
+      </message>
+      <message desc="The description of the braille bottom command.  Displayed in the Options page." name="IDS_CHROMEVOX_BRAILLE_BOTTOM">
+        Move braille display to bottom of page
+      </message>
+      <message desc="Spoken to describe an access key.  An access key consists of a single letter. When pressed along with a modifier (usually alt, but depends on platform), a targetted node will be activated." name="IDS_CHROMEVOX_ACCESS_KEY">
+        has access key, <ph name="key">$1</ph>
+      </message>
+      <message desc="Brailled to describe an access key.  An access key consists of a single letter. When pressed along with a modifier (usually alt, but depends on platform), a targetted node will be activated." name="IDS_CHROMEVOX_ACCESS_KEY_BRL">
+        access key:<ph name="key">$1</ph>
+      </message>
+      <message desc="A dictionary mapping locale identifiers to their corresponding language names.  The format is the following: { ..., 'en_US': 'U.S. English', ...}. Localization only needed for the language name (i.e. English (United States)). All other strings should be kept as is." name="IDS_CHROMEVOX_LOCALE_DICT">
+        {"ar": "Arabic","bg": "Bulgarian","ca": "Catalan","hr": "Croatian","cs": "Czech","da": "Danish","nl": "Dutch","en_CA": "English (Canada)","en_GB": "English (United Kingdom)","en_US": "English (United States)","et": "Estonian","fr": "French","fr_CA": "French (Canada)","fr_FR": "French (France)","fi": "Finnish","de": "German","de_CH": "German (Switzerland)","de_DE": "German (Germany)","el": "Greek","hi": "Hindi","hu": "Hungarian","is": "Icelandic","it": "Italian","lv": "Latvian","lt": "Lithuanian","nb": "Norwegian Bokmål","pl": "Polish","pt": "Portuguese","ro": "Romanian","ru": "Russian","sr": "Serbian","sk": "Slovak","sl": "Slovenian","es": "Spanish","sv": "Swedish","tr": "Turkish","vi": "Vietnamese","zh": "Chinese","zh_TW": "Chinese (Traditional Han)"}
+      </message>
+      <message desc="The text to speak when the user moves their cursor to the end of a block of editable text, in verbose mode." name="IDS_CHROMEVOX_END_OF_TEXT_VERBOSE">
+        End of text
+      </message>
+      <message desc="The text to speak when the user moves their cursor to the end of a block of editable text, in brief mode." name="IDS_CHROMEVOX_END_OF_TEXT_BRIEF">
+        End
+      </message>
+      <message desc="Spoken to describe a new line ('\n')." name="IDS_CHROMEVOX_NEW_LINE">
+        new line
+      </message>
+      <message desc="Spoken to describe a carriage return ('\r')." name="IDS_CHROMEVOX_RETURN">
+        return
+      </message>
+      <message desc="Spoken after pressing the pass through key command." name="IDS_CHROMEVOX_PASS_THROUGH_KEY">
+        Ignoring next key press
+      </message>
+      <message desc="Describes the pass through key command. Shown in options page." name="IDS_CHROMEVOX_PASS_THROUGH_KEY_DESCRIPTION">
+        Pass through key
+      </message>
+      <message desc="Describes the braille caption feature. Braille captioning provides an overlay showing both text and braille of what ChromeVox would show on a refreshable braille display. Shown in the options page as a label." name="IDS_CHROMEVOX_BRAILLE_CAPTIONS">
+        Toggle braille captions
+      </message>
+      <message desc="Spoken and brailled when the braille captions feature is enabled. This feature shows the braille output in a small overlay on the screen for development and demonstration purposes." name="IDS_CHROMEVOX_BRAILLE_CAPTIONS_ENABLED">
+        Braille captions enabled.
+      </message>
+      <message desc="Spoken and brailled when the braille captions feature is disabled. This feature shows the braille output in a small overlay on the screen for development and demonstration purposes." name="IDS_CHROMEVOX_BRAILLE_CAPTIONS_DISABLED">
+        Braille captions disabled.
+      </message>
+    </messages>
+  </release>
+</grit>
diff --git a/chrome/browser/resources/chromeos/login/header_bar.css b/chrome/browser/resources/chromeos/login/header_bar.css
index 30f6d51..0d435c6 100644
--- a/chrome/browser/resources/chromeos/login/header_bar.css
+++ b/chrome/browser/resources/chromeos/login/header_bar.css
@@ -21,14 +21,18 @@
   background-image: url('chrome://theme/IDR_LAUNCHER_BACKGROUND');
 }
 
-html[screen=lock] .login-header-bar-hidden {
+html[screen=lock] .login-header-bar-hidden,
+html[screen=oobe] .login-header-bar-hidden {
   opacity: 0;
 }
-html[screen=lock] .login-header-bar-animate-fast {
+
+html[screen=lock] .login-header-bar-animate-fast,
+html[screen=oobe] .login-header-bar-animate-fast {
   -webkit-transition: opacity 200ms ease-out;
 }
 
-html[screen=lock] .login-header-bar-animate-slow {
+html[screen=lock] .login-header-bar-animate-slow,
+html[screen=oobe] .login-header-bar-animate-slow {
   -webkit-transition: opacity 2s ease-out;
 }
 
diff --git a/chrome/browser/resources/chromeos/login/header_bar.js b/chrome/browser/resources/chromeos/login/header_bar.js
index 152d2d3..fc22bbf 100644
--- a/chrome/browser/resources/chromeos/login/header_bar.js
+++ b/chrome/browser/resources/chromeos/login/header_bar.js
@@ -265,10 +265,29 @@
 
     /**
      * Animates Header bar to slowly appear on the screen.
+     *
+     * @param {function()} callback will be called once animation is finished.
      */
-    animateIn: function() {
-      this.classList.remove('login-header-bar-animate-fast');
-      this.classList.add('login-header-bar-animate-slow');
+    animateIn: function(callback) {
+      if (callback) {
+        var launcher = this;
+        launcher.addEventListener(
+            'webkitTransitionEnd', function f(e) {
+              launcher.removeEventListener('webkitTransitionEnd', f);
+              callback();
+            });
+        // Guard timer for 2 seconds + 200 ms + epsilon.
+        ensureTransitionEndEvent(launcher, 2250);
+      }
+
+      if (Oobe.getInstance().displayType == DISPLAY_TYPE.OOBE) {
+        this.classList.remove('login-header-bar-animate-slow');
+        this.classList.add('login-header-bar-animate-fast');
+      } else {
+        this.classList.remove('login-header-bar-animate-fast');
+        this.classList.add('login-header-bar-animate-slow');
+      }
+
       this.classList.remove('login-header-bar-hidden');
     },
   };
@@ -283,8 +302,8 @@
   /**
    * Convenience wrapper of animateIn.
    */
-  HeaderBar.animateIn = function() {
-    $('login-header-bar').animateIn();
+  HeaderBar.animateIn = function(callback) {
+    $('login-header-bar').animateIn(callback);
   }
 
   return {
diff --git a/chrome/browser/resources/chromeos/login/login.html b/chrome/browser/resources/chromeos/login/login.html
index f60e4f8..e87475b 100644
--- a/chrome/browser/resources/chromeos/login/login.html
+++ b/chrome/browser/resources/chromeos/login/login.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html>
-<html i18n-values="dir:textdirection;build:buildType;run:runType">
+<html i18n-values="dir:textdirection;build:buildType;run:runType;highlight:highlightStrength">
 <head>
 <meta charset="utf-8">
 <meta name="google" value="notranslate">
diff --git a/chrome/browser/resources/chromeos/login/login_common.js b/chrome/browser/resources/chromeos/login/login_common.js
index 9a8412b..13dd071 100644
--- a/chrome/browser/resources/chromeos/login/login_common.js
+++ b/chrome/browser/resources/chromeos/login/login_common.js
@@ -43,6 +43,12 @@
   function Oobe() {
   }
 
+  /**
+   * Delay in milliseconds between start of OOBE animation and start of
+   * header bar animation.
+   */
+  var HEADER_BAR_DELAY_MS = 300;
+
   cr.addSingletonGetter(Oobe);
 
   Oobe.prototype = {
@@ -81,13 +87,21 @@
   Oobe.showOobeUI = function(showOobe) {
     if (showOobe) {
       document.body.classList.add('oobe-display');
+
+      // Callback to animate the header bar in.
+      var showHeaderBar = function() {
+        login.HeaderBar.animateIn(function() {
+          chrome.send('headerBarVisible');
+        });
+      };
+      // Start asynchronously so the OOBE network screen comes in first.
+      window.setTimeout(showHeaderBar, HEADER_BAR_DELAY_MS);
     } else {
       document.body.classList.remove('oobe-display');
       Oobe.getInstance().prepareForLoginDisplay_();
     }
 
-    // Don't show header bar for OOBE.
-    Oobe.getInstance().headerHidden = showOobe;
+    Oobe.getInstance().headerHidden = false;
   };
 
   /**
diff --git a/chrome/browser/resources/chromeos/login/oobe_screen.css b/chrome/browser/resources/chromeos/login/oobe_screen.css
index 52b2c7a..142ef77 100644
--- a/chrome/browser/resources/chromeos/login/oobe_screen.css
+++ b/chrome/browser/resources/chromeos/login/oobe_screen.css
@@ -10,7 +10,7 @@
   position: absolute;
 }
 
-.step.animated {
+.step.animated:not(.faded) {
   -webkit-transition: -webkit-transform 200ms ease-in-out,
                       opacity 200ms ease-in-out,
                       visibility 200ms ease-in-out;
diff --git a/chrome/browser/resources/chromeos/login/oobe_screen_network.js b/chrome/browser/resources/chromeos/login/oobe_screen_network.js
index c184bba..78df29c 100644
--- a/chrome/browser/resources/chromeos/login/oobe_screen_network.js
+++ b/chrome/browser/resources/chromeos/login/oobe_screen_network.js
@@ -10,6 +10,7 @@
   return {
     EXTERNAL_API: [
       'enableContinueButton',
+      'setInputMethod',
       'setTimezone',
       'showError'
     ],
@@ -91,6 +92,17 @@
     },
 
     /**
+     * Sets the current input method.
+     * @param {string} inputMethodId The ID of the input method to select.
+     */
+    setInputMethod: function(inputMethodId) {
+      option = $('keyboard-select').querySelector(
+          'option[value="' + inputMethodId + '"]');
+      if (option)
+        option.selected = true;
+    },
+
+    /**
      * Sets the current timezone.
      * @param {string} timezoneId The timezone ID to select.
      */
diff --git a/chrome/browser/resources/chromeos/login/oobe_screen_reset.html b/chrome/browser/resources/chromeos/login/oobe_screen_reset.html
index 2a89401..bd71cc2 100644
--- a/chrome/browser/resources/chromeos/login/oobe_screen_reset.html
+++ b/chrome/browser/resources/chromeos/login/oobe_screen_reset.html
@@ -1,4 +1,4 @@
-<div class="step hidden no-logo" id="reset" hidden>
+<div class="step faded hidden no-logo" id="reset" hidden>
   <div class="step-contents">
     <div id="reset-warning-msg"></div>
     <img id="reset-warning-icon" src="chrome://theme/IDR_RESET_WARNING" alt="">
diff --git a/chrome/browser/resources/chromeos/login/oobe_screen_reset.js b/chrome/browser/resources/chromeos/login/oobe_screen_reset.js
index decc38d..a07180c 100644
--- a/chrome/browser/resources/chromeos/login/oobe_screen_reset.js
+++ b/chrome/browser/resources/chromeos/login/oobe_screen_reset.js
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 /**
- * @fileoverview Oobe reset screen implementation.
+ * @fileoverview Device reset screen implementation.
  */
 
 login.createScreen('ResetScreen', 'reset', function() {
diff --git a/chrome/browser/resources/component_extension_resources.grd b/chrome/browser/resources/component_extension_resources.grd
index 55d7879..859e937 100644
--- a/chrome/browser/resources/component_extension_resources.grd
+++ b/chrome/browser/resources/component_extension_resources.grd
@@ -71,13 +71,6 @@
         <include name="IDR_FILE_MANAGER_MAIN_JS" file="file_manager/foreground/js/main_scripts.js" flattenhtml="true" type="BINDATA" />
         <include name="IDR_FILE_MANAGER_BKGND_JS" file="file_manager/background/js/background.js" type="BINDATA" />
 
-        <include name="IDR_VIDEO_PLAYER" file="video_player/video_player.html" allowexternalscript="true" flattenhtml="true" type="BINDATA" />
-        <include name="IDR_VIDEO_PLAYER_JS" file="video_player/js/video_player_scripts.js" flattenhtml="true" type="BINDATA" />
-        <include name="IDR_VIDEO_PLAYER_BKGND_JS" file="video_player/js/background.js" flattenhtml="true" type="BINDATA" />
-        <include name="IDR_VIDEO_PLAYER_TEST_UTIL_JS" file="video_player/js/test_util.js" flattenhtml="false" type="BINDATA" />
-        <include name="IDR_VIDEO_PLAYER_ERROR_UTIL_JS" file="video_player/js/error_util.js" flattenhtml="false" type="BINDATA" />
-        <include name="IDR_VIDEO_PLAYER_ICON_16" file="video_player/images/100/icon.png" type="BINDATA" />
-        <include name="IDR_VIDEO_PLAYER_ICON_32" file="video_player/images/200/icon.png" type="BINDATA" />
         <include name="IDR_FILE_MANAGER_AUDIO_PLAYER" file="file_manager/audio_player.html" allowexternalscript="true" flattenhtml="true" type="BINDATA" />
         <include name="IDR_FILE_MANAGER_AUDIO_PLAYER_SCRIPTS_JS" file="file_manager/audio_player/js/audio_player_scripts.js" flattenhtml="true" type="BINDATA" />
 
@@ -141,14 +134,6 @@
         <include name="IDR_FILE_MANAGER_IMG_GALLERY_2X_CURSOR_SWNE" file="file_manager/foreground/images/gallery/2x/cursor_swne.png" type="BINDATA" />
         <include name="IDR_FILE_MANAGER_IMG_GALLERY_2X_CURSOR_UPDOWN" file="file_manager/foreground/images/gallery/2x/cursor_updown.png" type="BINDATA" />
       </if>
-      <if expr="image_loader_extension">
-        <include name="IDR_IMAGE_LOADER_IMAGE_LOADER_JS" file="image_loader/image_loader.js" type="BINDATA" />
-        <include name="IDR_IMAGE_LOADER_CACHE_JS" file="image_loader/cache.js" type="BINDATA" />
-        <include name="IDR_IMAGE_LOADER_WORKER_JS" file="image_loader/worker.js" type="BINDATA" />
-        <include name="IDR_IMAGE_LOADER_REQUEST_JS" file="image_loader/request.js" type="BINDATA" />
-        <include name="IDR_IMAGE_LOADER_BACKGROUND_JS" file="image_loader/background.js" type="BINDATA" />
-        <include name="IDR_IMAGE_LOADER_CLIENT_JS" file="image_loader/image_loader_client.js" type="BINDATA" />
-      </if>
       <if expr="enable_google_now">
         <include name="IDR_GOOGLE_NOW_BACKGROUND_JS" file="google_now/background.js" type="BINDATA" />
         <include name="IDR_GOOGLE_NOW_CARDS_JS" file="google_now/cards.js" type="BINDATA" />
diff --git a/chrome/browser/resources/extensions/apps_developer_tools_promo_48.png b/chrome/browser/resources/extensions/apps_developer_tools_promo_48.png
new file mode 100644
index 0000000..fcfa793
--- /dev/null
+++ b/chrome/browser/resources/extensions/apps_developer_tools_promo_48.png
Binary files differ
diff --git a/chrome/browser/resources/extensions/extension_error_overlay.css b/chrome/browser/resources/extensions/extension_error_overlay.css
index a8b3431..d7cff5d 100644
--- a/chrome/browser/resources/extensions/extension_error_overlay.css
+++ b/chrome/browser/resources/extensions/extension_error_overlay.css
@@ -22,10 +22,28 @@
 #extension-error-overlay-code {
  -webkit-margin-after: 10px;
   border: 1px solid #ccc;
+  display: flex;
   font-family: monospace;
   font-size: 1.2em;
   overflow: auto;
-  padding: 10px;
+  white-space: pre;
+}
+
+#extension-error-overlay-code > * {
+  padding: 5px;
+}
+
+#extension-error-overlay-source {
+  color: #555;
+}
+
+#extension-error-overlay-line-numbers {
+  align-self: flex-start;
+  background-color: rgba(240, 240, 240, 1);
+  border-right: 1px solid #ccc;
+  color: rgba(128, 128, 128, 1);
+  flex-shrink: 0;
+  text-align: right;
 }
 
 .extension-error-overlay-context {
diff --git a/chrome/browser/resources/extensions/extension_error_overlay.html b/chrome/browser/resources/extensions/extension_error_overlay.html
index 57edd82..29fa7de 100644
--- a/chrome/browser/resources/extensions/extension_error_overlay.html
+++ b/chrome/browser/resources/extensions/extension_error_overlay.html
@@ -21,7 +21,10 @@
   <div class="close-button"></div>
   <h1 class="extension-error-overlay-title"></h1>
   <div class="content-area">
-    <div id="extension-error-overlay-code"></div>
+    <div id="extension-error-overlay-code">
+      <div id="extension-error-overlay-line-numbers"></div>
+      <div id="extension-error-overlay-source"></div>
+    </div>
   </div>
   <div class="action-area">
     <div class="action-area-right">
diff --git a/chrome/browser/resources/extensions/extension_error_overlay.js b/chrome/browser/resources/extensions/extension_error_overlay.js
index d975ad1..da71f9a 100644
--- a/chrome/browser/resources/extensions/extension_error_overlay.js
+++ b/chrome/browser/resources/extensions/extension_error_overlay.js
@@ -6,6 +6,15 @@
   'use strict';
 
   /**
+   * Clear all the content of a given element.
+   * @param {HTMLElement} element The element to be cleared.
+   */
+  function clearElement(element) {
+    while (element.firstChild)
+      element.removeChild(element.firstChild);
+  }
+
+  /**
    * Get the url relative to the main extension url. If the url is
    * unassociated with the extension, this will be the full url.
    * @param {string} url The url to make relative.
@@ -139,7 +148,7 @@
       this.error_ = undefined;
       this.extensionUrl_ = undefined;
       this.currentFrameNode_ = undefined;
-      this.stackTrace_.innerHTML = '';
+      clearElement(this.stackTrace_);
       this.stackTrace_.hidden = true;
     },
 
@@ -364,12 +373,20 @@
       this.overlayDiv_ = $('extension-error-overlay');
 
       /**
-       * The portion of the overlay which shows the code relating to the error.
+       * The portion of the overlay which shows the code relating to the error
+       * and the corresponding line numbers.
        * @type {HTMLElement}
        * @private
        */
       this.codeDiv_ = $('extension-error-overlay-code');
 
+      // Also initialize two properties of codeDiv for the section for the pure
+      // file content and the section for the line numbers.
+      this.codeDiv_.sourceDiv =
+          this.codeDiv_.querySelector('#extension-error-overlay-source');
+      this.codeDiv_.linesDiv =
+          this.codeDiv_.querySelector('#extension-error-overlay-line-numbers');
+
       /**
        * The function to show or hide the ExtensionErrorOverlay.
        * @type {function}
@@ -405,7 +422,10 @@
       if (!this.error_)
         return;
 
-      this.codeDiv_.innerHTML = '';
+      // Remove all previous content.
+      clearElement(this.codeDiv_.sourceDiv);
+      clearElement(this.codeDiv_.linesDiv);
+
       this.openDevtoolsButton_.hidden = true;
 
       if (this.error_.type == ExtensionErrorOverlay.RUNTIME_ERROR_TYPE_) {
@@ -470,36 +490,54 @@
       document.querySelector(
           '#extension-error-overlay .extension-error-overlay-title').
               textContent = code.title;
-      this.codeDiv_.innerHTML = '';
+
+      // Remove all previous content. This should be done on close, but, just in
+      // case we crashed, do it again.
+      clearElement(this.codeDiv_.sourceDiv);
+      clearElement(this.codeDiv_.linesDiv);
 
       // If there's no code, then display an appropriate message.
       if (!code) {
         var span = document.createElement('span');
         span.textContent =
             loadTimeData.getString('extensionErrorOverlayNoCodeToDisplay');
-        this.codeDiv_.appendChild(span);
+        this.codeDiv_.sourceDiv.appendChild(span);
         return;
       }
 
+      var lineCount = 0;
       var createSpan = function(source, isHighlighted) {
+        lineCount += source.split('\n').length - 1;
         var span = document.createElement('span');
         span.className = isHighlighted ? 'highlighted-source' : 'normal-source';
-        source = source.replace(/ /g, '&nbsp;').replace(/\n|\r/g, '<br>');
-        span.innerHTML = source;
+        span.textContent = source;
         return span;
       };
 
-      if (code.beforeHighlight)
-        this.codeDiv_.appendChild(createSpan(code.beforeHighlight, false));
+      if (code.beforeHighlight) {
+        this.codeDiv_.sourceDiv.appendChild(
+            createSpan(code.beforeHighlight, false));
+      }
 
       if (code.highlight) {
         var highlightSpan = createSpan(code.highlight, true);
         highlightSpan.title = code.message;
-        this.codeDiv_.appendChild(highlightSpan);
+        this.codeDiv_.sourceDiv.appendChild(highlightSpan);
       }
 
-      if (code.afterHighlight)
-        this.codeDiv_.appendChild(createSpan(code.afterHighlight, false));
+      if (code.afterHighlight) {
+        this.codeDiv_.sourceDiv.appendChild(
+            createSpan(code.afterHighlight, false));
+      }
+
+      // Make the line numbers. This should be the number of line breaks + 1
+      // (the last line doesn't break, but should still be numbered).
+      var content = '';
+      for (var i = 1; i < lineCount + 1; ++i)
+        content += i + '\n';
+      var span = document.createElement('span');
+      span.textContent = content;
+      this.codeDiv_.linesDiv.appendChild(span);
     },
   };
 
diff --git a/chrome/browser/resources/extensions/extension_list.js b/chrome/browser/resources/extensions/extension_list.js
index f21d865..a3b02a5 100644
--- a/chrome/browser/resources/extensions/extension_list.js
+++ b/chrome/browser/resources/extensions/extension_list.js
@@ -148,6 +148,20 @@
       var butterBar = node.querySelector('.butter-bar');
       butterBar.hidden = !butterBarVisibility[extension.id];
 
+      // The 'collect errors' checkbox. This should only be visible if the
+      // error console is enabled - we can detect this by the existence of the
+      // |errorCollectionEnabled| property.
+      if (extension.wantsErrorCollection) {
+        node.querySelector('.error-collection-control').hidden = false;
+        var errorCollection =
+            node.querySelector('.error-collection-control input');
+        errorCollection.checked = extension.errorCollectionEnabled;
+        errorCollection.addEventListener('change', function(e) {
+          chrome.send('extensionSettingsEnableErrorCollection',
+                      [extension.id, String(e.target.checked)]);
+        });
+      }
+
       // The 'allow file:// access' checkbox.
       if (extension.wantsFileAccess) {
         var fileAccess = node.querySelector('.file-access-control');
diff --git a/chrome/browser/resources/extensions/extensions.css b/chrome/browser/resources/extensions/extensions.css
index 4bece46..101d27e 100644
--- a/chrome/browser/resources/extensions/extensions.css
+++ b/chrome/browser/resources/extensions/extensions.css
@@ -41,6 +41,45 @@
   white-space: nowrap;
 }
 
+#apps-developer-tools-promo {
+  -webkit-margin-before: 15px;
+  -webkit-padding-before: 5px;
+  align-items: center;
+  border-top: 1px solid #eee;
+  display: flex;
+  font-size: 13px;
+}
+
+#apps-developer-tools-promo img {
+  content: url(apps_developer_tools_promo_48.png);
+}
+
+#apps-developer-tools-promo-text,
+#apps-developer-tools-promo-link {
+  -webkit-margin-start: 5px;
+}
+
+#apps-developer-tools-promo-close-wrapper {
+  display: flex;
+  flex-grow: 1;
+  justify-content: flex-end;
+}
+
+#apps-developer-tools-promo .close-button {
+  background: url(chrome://theme/IDR_CLOSE_DIALOG) no-repeat center center;
+  height: 14px;
+  width: 14px;
+  z-index: 1;
+}
+
+#apps-developer-tools-promo .close-button:hover {
+  background-image: url(chrome://theme/IDR_CLOSE_DIALOG_H);
+}
+
+#apps-developer-tools-promo .close-button:active {
+  background-image: url(chrome://theme/IDR_CLOSE_DIALOG_P);
+}
+
 #extension-settings.dev-mode #dev-controls {
   -webkit-transition-duration: 250ms;
   height: 45px;
@@ -48,6 +87,10 @@
   padding-bottom: 7px;
 }
 
+#extension-settings.dev-mode.adt-promo #dev-controls {
+  height: 105px;  /* Allow more height for the Apps Developer Tools promo. */
+}
+
 #dev-controls-spacer {
   -webkit-box-flex: 1;
 }
@@ -87,12 +130,12 @@
 }
 
 #footer-section {
-  background: url('chrome://theme/IDR_WEBSTORE_ICON_32') no-repeat left center;
+  background: url(chrome://theme/IDR_WEBSTORE_ICON_32) no-repeat left center;
   font-size: 1.25em;
 }
 
 html[dir=rtl] #footer-section {
-  background: url('chrome://theme/IDR_WEBSTORE_ICON_32') no-repeat right center;
+  background: url(chrome://theme/IDR_WEBSTORE_ICON_32) no-repeat right center;
 }
 
 #footer-section > a {
@@ -228,6 +271,10 @@
   margin: 0;
 }
 
+.error-collection-control {
+  -webkit-margin-start: 5px;
+}
+
 #font-measuring-div {
   /* Remove from the flow and hide. */
   position: absolute;
@@ -313,7 +360,7 @@
 }
 
 .profile-is-managed-banner .page-banner-text {
-  background-image: url('chrome://theme/IDR_WARNING');
+  background-image: url(chrome://theme/IDR_WARNING);
 }
 
 /* Sideload Wipeout */
diff --git a/chrome/browser/resources/extensions/extensions.html b/chrome/browser/resources/extensions/extensions.html
index 153efef..4bb9a12 100644
--- a/chrome/browser/resources/extensions/extensions.html
+++ b/chrome/browser/resources/extensions/extensions.html
@@ -88,6 +88,17 @@
       <button id="update-extensions-now"
           i18n-content="extensionSettingsUpdateButton"></button>
     </div>
+    <div id="apps-developer-tools-promo">
+      <img></img>
+      <span id="apps-developer-tools-promo-text"
+          i18n-content="extensionSettingsAppsDevToolsPromoText"></span>
+      <a id="apps-developer-tools-promo-link" target="_blank"
+         i18n-content="extensionSettingsAppsDevToolsLinkText"
+         i18n-values="href:extensionSettingsAppsDevToolsUrl"></a>
+      <div id="apps-developer-tools-promo-close-wrapper">
+        <div class="close-button"></div>
+      </div>
+    </div>
   </div>
   <div id="extension-settings-list" class="empty-extension-list"></div>
   <div id="no-extensions">
@@ -167,10 +178,19 @@
         <div class="optional-controls">
           <button class="show-button"
               i18n-content="extensionSettingsShowButton" hidden></button>
-          <div class="checkbox"><label class="incognito-control">
-            <input type="checkbox">
-            <span i18n-content="extensionSettingsEnableIncognito"></span>
-          </label></div>
+          <div class="checkbox">
+            <label class="incognito-control">
+              <input type="checkbox">
+              <span i18n-content="extensionSettingsEnableIncognito"></span>
+            </label>
+          </div>
+          <div class="checkbox error-collection-control" hidden>
+            <label>
+              <input type="checkbox">
+              <span i18n-content="extensionSettingsEnableErrorCollection">
+              </span>
+            </label>
+          </div>
           <span class="optional-controls-disableable">
             <label class="file-access-control" hidden>
               <input type="checkbox">
diff --git a/chrome/browser/resources/extensions/extensions.js b/chrome/browser/resources/extensions/extensions.js
index 97bb296..59a14da 100644
--- a/chrome/browser/resources/extensions/extensions.js
+++ b/chrome/browser/resources/extensions/extensions.js
@@ -86,6 +86,13 @@
     __proto__: HTMLDivElement.prototype,
 
     /**
+     * Whether the App Developer Tools promo has been dismissed on this page.
+     * @type {boolean}
+     * @private
+     */
+    promoDismissed_: false,
+
+    /**
      * Perform initial setup.
      */
     initialize: function() {
@@ -114,6 +121,13 @@
       $('update-extensions-now').addEventListener('click',
           this.handleUpdateExtensionNow_.bind(this));
 
+      // Set up the close dialog for the apps developer tools promo.
+      $('apps-developer-tools-promo').querySelector('.close-button').
+          addEventListener('click', function(e) {
+        this.promoDismissed_ = true;
+        $('extension-settings').classList.remove('adt-promo');
+      }.bind(this));
+
       if (!loadTimeData.getBoolean('offStoreInstallEnabled')) {
         this.dragWrapper_ = new cr.ui.DragWrapper(document.documentElement,
                                                   dragWrapperHandler);
@@ -297,6 +311,9 @@
       $('toggle-dev-on').checked = false;
     }
 
+    var showPromo = extensionsData.promoteAppsDevTools && !this.promoDismissed_;
+    pageDiv.classList.toggle('adt-promo', showPromo);
+
     $('load-unpacked').disabled = extensionsData.loadUnpackedDisabled;
 
     ExtensionsList.prototype.data_ = extensionsData;
diff --git a/chrome/browser/resources/file_manager/background/js/device_handler.js b/chrome/browser/resources/file_manager/background/js/device_handler.js
index c1eb86f..6fd11cf 100644
--- a/chrome/browser/resources/file_manager/background/js/device_handler.js
+++ b/chrome/browser/resources/file_manager/background/js/device_handler.js
@@ -16,10 +16,19 @@
    */
   this.mountStatus_ = {};
 
+  /**
+   * List of ID of notificaitons that have a button.
+   * @type {Array.<string>}
+   * @private
+   */
+  this.buttonNotifications_ = [];
+
   chrome.fileBrowserPrivate.onDeviceChanged.addListener(
       this.onDeviceChanged_.bind(this));
   chrome.fileBrowserPrivate.onMountCompleted.addListener(
       this.onMountCompleted_.bind(this));
+  chrome.notifications.onButtonClicked.addListener(
+      this.onNotificationButtonClicked_.bind(this));
 
   Object.seal(this);
 }
@@ -29,9 +38,10 @@
  * @param {string} prefix Prefix of notification ID.
  * @param {string} title String ID of title.
  * @param {string} message String ID of message.
+ * @param {string=} opt_buttonLabel String ID of the button label.
  * @constructor
  */
-DeviceHandler.Notification = function(prefix, title, message) {
+DeviceHandler.Notification = function(prefix, title, message, opt_buttonLabel) {
   /**
    * Prefix of notification ID.
    * @type {string}
@@ -50,6 +60,12 @@
    */
   this.message = message;
 
+  /**
+   * String ID of button label.
+   * @type {?string}
+   */
+  this.buttonLabel = opt_buttonLabel || null;
+
   Object.freeze(this);
 };
 
@@ -85,6 +101,17 @@
  * @type {DeviceHandler.Notification}
  * @const
  */
+DeviceHandler.Notification.DEVICE_HARD_UNPLUGGED =
+    new DeviceHandler.Notification(
+        'deviceFail',
+        'DEVICE_HARD_UNPLUGGED_TITLE',
+        'DEVICE_HARD_UNPLUGGED_MESSAGE',
+        'DEVICE_HARD_UNPLUGGED_BUTTON_LABEL');
+
+/**
+ * @type {DeviceHandler.Notification}
+ * @const
+ */
 DeviceHandler.Notification.FORMAT_START = new DeviceHandler.Notification(
     'formatStart',
     'FORMATTING_OF_DEVICE_PENDING_TITLE',
@@ -112,17 +139,22 @@
  * Shows the notification for the device path.
  * @param {string} devicePath Device path.
  * @param {string=} opt_message Message overrides the default message.
+ * @return {string} Notification ID.
  */
 DeviceHandler.Notification.prototype.show = function(devicePath, opt_message) {
+  var buttons = this.buttonLabel ? [{title: str(this.buttonLabel)}] : undefined;
+  var notificationId = this.makeId_(devicePath);
   chrome.notifications.create(
-      this.makeId_(devicePath),
+      notificationId,
       {
         type: 'basic',
         title: str(this.title),
         message: opt_message || str(this.message),
-        iconUrl: chrome.runtime.getURL('/common/images/icon96.png')
+        iconUrl: chrome.runtime.getURL('/common/images/icon96.png'),
+        buttons: buttons
       },
       function() {});
+  return notificationId;
 };
 
 /**
@@ -168,6 +200,11 @@
           event.devicePath);
       delete this.mountStatus_[event.devicePath];
       break;
+    case 'hard_unplugged':
+      var id = DeviceHandler.Notification.DEVICE_HARD_UNPLUGGED.show(
+          event.devicePath);
+      this.buttonNotifications_.push(id);
+      break;
     case 'format_start':
       DeviceHandler.Notification.FORMAT_START.show(event.devicePath);
       break;
@@ -288,3 +325,16 @@
     DeviceHandler.Notification.DEVICE_FAIL.show(volume.devicePath, message);
   }
 };
+
+/**
+ * Handles notification button click.
+ * @param {string} id ID of the notification.
+ * @private
+ */
+DeviceHandler.prototype.onNotificationButtonClicked_ = function(id) {
+  var index = this.buttonNotifications_.indexOf(id);
+  if (index !== -1) {
+    chrome.notifications.clear(id, function() {});
+    this.buttonNotifications_.splice(index, 1);
+  }
+};
diff --git a/chrome/browser/resources/file_manager/common/js/util.js b/chrome/browser/resources/file_manager/common/js/util.js
index 449f999..7f2ba1d 100644
--- a/chrome/browser/resources/file_manager/common/js/util.js
+++ b/chrome/browser/resources/file_manager/common/js/util.js
@@ -1355,8 +1355,6 @@
 
   if (locationInfo && locationInfo.isRootEntry) {
     switch (locationInfo.rootType) {
-      case RootType.DOWNLOADS:
-        return str('DOWNLOADS_DIRECTORY_LABEL');
       case RootType.DRIVE:
         return str('DRIVE_MY_DRIVE_LABEL');
       case RootType.DRIVE_OFFLINE:
@@ -1365,11 +1363,14 @@
         return str('DRIVE_SHARED_WITH_ME_COLLECTION_LABEL');
       case RootType.DRIVE_RECENT:
         return str('DRIVE_RECENT_COLLECTION_LABEL');
+      case RootType.DOWNLOADS:
       case RootType.ARCHIVE:
-        return entry.filesystem.name;
+      case RootType.REMOVABLE:
+      case RootType.MTP:
+        return locationInfo.volumeInfo.label;
       default:
-        console.error('Unsupported root type: ' + rootType);
-        return entry.filesystem.name;
+        console.error('Unsupported root type: ' + locationInfo.rootType);
+        return locationInfo.volumeInfo.label;
     }
   }
 
diff --git a/chrome/browser/resources/file_manager/foreground/css/file_manager.css b/chrome/browser/resources/file_manager/foreground/css/file_manager.css
index c21d4ce..0682148 100644
--- a/chrome/browser/resources/file_manager/foreground/css/file_manager.css
+++ b/chrome/browser/resources/file_manager/foreground/css/file_manager.css
@@ -142,7 +142,7 @@
   background-color: #f1f1f1;
   display: flex;
   flex-direction: column;
-  max-width: 50%;
+  max-width: 40%;
   min-width: 100px;
   overflow: hidden;
   position: relative;
@@ -391,10 +391,6 @@
   flex: auto;
 }
 
-#search-box.too-short {
-  visibility: hidden;
-}
-
 #search-box .icon {
   -webkit-app-region: no-drag;
   -webkit-padding-end: 0;
diff --git a/chrome/browser/resources/file_manager/foreground/js/directory_model.js b/chrome/browser/resources/file_manager/foreground/js/directory_model.js
index c21db67..bc21f55 100644
--- a/chrome/browser/resources/file_manager/foreground/js/directory_model.js
+++ b/chrome/browser/resources/file_manager/foreground/js/directory_model.js
@@ -100,8 +100,13 @@
  *     no entry set, then returns true.
  */
 DirectoryModel.prototype.isReadOnly = function() {
-  return this.getCurrentDirEntry() ? this.volumeManager_.getLocationInfo(
-      this.getCurrentDirEntry()).isReadOnly : true;
+  var currentDirEntry = this.getCurrentDirEntry();
+  if (currentDirEntry) {
+    var locationInfo = this.volumeManager_.getLocationInfo(currentDirEntry);
+    if (locationInfo)
+      return locationInfo.isReadOnly;
+  }
+  return true;
 };
 
 /**
@@ -669,6 +674,13 @@
 };
 
 /**
+ * Clears the selection in the file list.
+ */
+DirectoryModel.prototype.clearSelection = function() {
+  this.setSelectedEntries_([]);
+};
+
+/**
  * Creates an object which could say whether directory has changed while it has
  * been active or not. Designed for long operations that should be cancelled
  * if the used change current directory.
diff --git a/chrome/browser/resources/file_manager/foreground/js/directory_tree.js b/chrome/browser/resources/file_manager/foreground/js/directory_tree.js
index 425e3c2..cfb5f17 100644
--- a/chrome/browser/resources/file_manager/foreground/js/directory_tree.js
+++ b/chrome/browser/resources/file_manager/foreground/js/directory_tree.js
@@ -249,6 +249,29 @@
 };
 
 /**
+ * Invoked when the tree item is clicked.
+ *
+ * @param {Event} e Click event.
+ * @override
+ */
+DirectoryItem.prototype.handleClick = function(e) {
+  cr.ui.TreeItem.prototype.handleClick.call(this, e);
+
+  if (e.target.classList.contains('expand-icon'))
+    return;
+
+  var currentDirectoryEntry = this.directoryModel_.getCurrentDirEntry();
+  if (currentDirectoryEntry &&
+      util.isSameEntry(this.entry, currentDirectoryEntry)) {
+    // On clicking the current directory, clears the selection on the file list.
+    this.directoryModel_.clearSelection();
+  } else {
+    // Otherwise, changes the current directory.
+    this.directoryModel_.changeDirectoryEntry(this.entry);
+  }
+};
+
+/**
  * Retrieves the latest subdirectories and update them on the tree.
  * @param {boolean} recursive True if the update is recursively.
  * @param {function()=} opt_successCallback Callback called on success.
@@ -355,17 +378,6 @@
 };
 
 /**
- * Executes the assigned action. DirectoryItem performs changeDirectory.
- */
-DirectoryItem.prototype.doAction = function() {
-  if (!this.directoryModel_.getCurrentDirEntry() ||
-      !util.isSameEntry(this.entry,
-                        this.directoryModel_.getCurrentDirEntry())) {
-    this.directoryModel_.changeDirectoryEntry(this.entry);
-  }
-};
-
-/**
  * Sets the context menu for directory tree.
  * @param {cr.ui.Menu} menu Menu to be set.
  */
@@ -481,17 +493,6 @@
   this.directoryModel_.addEventListener('directory-changed',
       this.onCurrentDirectoryChanged_.bind(this));
 
-  // Add a handler for directory change.
-  this.addEventListener('change', function() {
-    if (this.selectedItem &&
-        (!this.currentEntry_ ||
-         !util.isSameEntry(this.currentEntry_, this.selectedItem.entry))) {
-      this.currentEntry_ = this.selectedItem.entry;
-      this.selectedItem.doAction();
-      return;
-    }
-  }.bind(this));
-
   this.privateOnDirectoryChangedBound_ =
       this.onDirectoryContentChanged_.bind(this);
   chrome.fileBrowserPrivate.onDirectoryChanged.addListener(
diff --git a/chrome/browser/resources/file_manager/foreground/js/file_manager.js b/chrome/browser/resources/file_manager/foreground/js/file_manager.js
index 9951445..b7d5b91 100644
--- a/chrome/browser/resources/file_manager/foreground/js/file_manager.js
+++ b/chrome/browser/resources/file_manager/foreground/js/file_manager.js
@@ -73,15 +73,6 @@
 };
 
 /**
- * Unload the file manager.
- * Used by background.js (when running in the packaged mode).
- */
-function unload() {
-  fileManager.onBeforeUnload_();
-  fileManager.onUnload_();
-}
-
-/**
  * List of dialog types.
  *
  * Keep this in sync with FileManagerDialog::GetDialogTypeAsString, except
@@ -572,6 +563,7 @@
                               'initVolumeManager');
 
     this.initializeQueue_.run();
+    window.addEventListener('pagehide', this.onUnload_.bind(this));
   };
 
   FileManager.prototype.initializeUI = function(dialogDom, callback) {
@@ -886,7 +878,7 @@
     this.driveBuyMoreStorageCommand_ =
         this.dialogDom_.querySelector('#drive-buy-more-space');
 
-    this.defaultActionMenuItem_.addEventListener('click',
+    this.defaultActionMenuItem_.addEventListener('activate',
         this.dispatchSelectionAction_.bind(this));
 
     this.initFileTypeFilter_();
@@ -1335,8 +1327,6 @@
     if (this.navigationList_)
       this.navigationList_.redraw();
 
-    this.ui_.searchBox.updateSizeRelatedStyle();
-
     this.previewPanel_.breadcrumbs.truncate();
   };
 
@@ -2373,12 +2363,7 @@
   };
 
   /**
-   * Unload handler for the page.  May be called manually for the file picker
-   * dialog, because it closes by calling extension API functions that do not
-   * return.
-   *
-   * TODO(hirono): This method is not called when Files.app is opend as a dialog
-   *     and is closed by the close button in the dialog frame. crbug.com/309967
+   * Unload handler for the page.
    * @private
    */
   FileManager.prototype.onUnload_ = function() {
@@ -2404,7 +2389,7 @@
       }
     }
     window.closing = true;
-    if (this.backgroundPage_ && util.platform.runningInBrowser())
+    if (this.backgroundPage_)
       this.backgroundPage_.background.tryClose();
   };
 
@@ -3041,7 +3026,6 @@
    */
   FileManager.prototype.onCancel_ = function(event) {
     chrome.fileBrowserPrivate.cancelDialog();
-    this.onUnload_();
     window.close();
   };
 
@@ -3076,7 +3060,6 @@
   FileManager.prototype.callSelectFilesApiAndClose_ = function(selection) {
     var self = this;
     function callback() {
-      self.onUnload_();
       window.close();
     }
     if (selection.multiple) {
@@ -3686,21 +3669,6 @@
   };
 
   /**
-   * Window beforeunload handler.
-   * @return {string} Message to show. Ignored when running as a packaged app.
-   * @private
-   */
-  FileManager.prototype.onBeforeUnload_ = function() {
-    if (this.filePopup_ &&
-        this.filePopup_.contentWindow &&
-        this.filePopup_.contentWindow.beforeunload) {
-      // The gallery might want to prevent the unload if it is busy.
-      return this.filePopup_.contentWindow.beforeunload();
-    }
-    return null;
-  };
-
-  /**
    * @return {FileSelection} Selection object.
    */
   FileManager.prototype.getSelection = function() {
diff --git a/chrome/browser/resources/file_manager/foreground/js/file_transfer_controller.js b/chrome/browser/resources/file_manager/foreground/js/file_transfer_controller.js
index ec20422..1ff7a7b 100644
--- a/chrome/browser/resources/file_manager/foreground/js/file_transfer_controller.js
+++ b/chrome/browser/resources/file_manager/foreground/js/file_transfer_controller.js
@@ -253,31 +253,32 @@
 
     // Call processEntry for each item of entries.
     var processEntries = function(entries) {
-      return Promise.all(entries.map(processEntry)).then(concatArrays);
+      var files = entries.filter(function(entry) {return entry.isFile;});
+      var dirs = entries.filter(function(entry) {return !entry.isFile;});
+      var promises = dirs.map(processDirectoryEntry);
+      if (files.length > 0)
+        promises.push(processFileEntries(files));
+      return Promise.all(promises).then(concatArrays);
     };
 
-    // Check entry type and do particular instructions.
-    var processEntry = function(entry) {
-      if (entry.isFile) {
-        // The entry is file. Obtain metadata.
-        return new Promise(function(callback) {
-          chrome.fileBrowserPrivate.getDriveEntryProperties(entry.toURL(),
-                                                            callback);
-        }).
-        then(function(metadata) {
-          if (metadata &&
-              metadata.isHosted &&
-              !metadata.sharedWithMe) {
-            return [entry];
-          } else {
-            return [];
-          }
+    // Check all file entries and keeps only those need sharing operation.
+    var processFileEntries = function(entries) {
+      return new Promise(function(callback) {
+        var urls = util.entriesToURLs(entries);
+        chrome.fileBrowserPrivate.getDriveEntryProperties(urls, callback);
+      }).
+      then(function(metadatas) {
+        return entries.filter(function(entry, i) {
+          var metadata = metadatas[i];
+          return metadata && metadata.isHosted && !metadata.sharedWithMe;
         });
-      } else {
-        // The entry is directory. Check child entries.
-        return readEntries(entry.createReader());
-      }
-    }.bind(this);
+      });
+    };
+
+    // Check child entries.
+    var processDirectoryEntry = function(entry) {
+      return readEntries(entry.createReader());
+    };
 
     // Read entries from DirectoryReader and call processEntries for the chunk
     // of entries.
@@ -857,7 +858,7 @@
       return false;
     var destinationLocationInfo =
         this.volumeManager_.getLocationInfo(destinationEntry);
-    if (destinationLocationInfo.isReadOnly)
+    if (!destinationLocationInfo || destinationLocationInfo.isReadOnly)
       return false;
     if (!dataTransfer.types || dataTransfer.types.indexOf('fs/tag') === -1)
       return false;  // Unsupported type of content.
diff --git a/chrome/browser/resources/file_manager/foreground/js/folder_shortcuts_data_model.js b/chrome/browser/resources/file_manager/foreground/js/folder_shortcuts_data_model.js
index 24ecfef..7e9a00e 100644
--- a/chrome/browser/resources/file_manager/foreground/js/folder_shortcuts_data_model.js
+++ b/chrome/browser/resources/file_manager/foreground/js/folder_shortcuts_data_model.js
@@ -392,17 +392,6 @@
    * @private
    */
   save_: function() {
-    // The current implementation doesn't rely on sort order in prefs, however
-    // older versions do. Therefore, we need to sort the paths before saving.
-    // TODO(mtomasz): Remove sorting prefs after M-34 is stable.
-    // crbug.com/333148
-    var compareByPath = function(a, b) {
-      return a.localeCompare(
-          b,
-          undefined,  // locale parameter, use default locale.
-          {usage: 'sort', numeric: true});
-    };
-
     this.rememberLastDriveURL_();
     if (!this.lastDriveRootURL_)
       return;
@@ -412,8 +401,7 @@
                 map(function(entry) { return entry.toURL(); }).
                 map(this.convertUrlToStoredPath_.bind(this)).
                 concat(Object.keys(this.pendingPaths_)).
-                concat(Object.keys(this.unresolvablePaths_)).
-                sort(compareByPath);
+                concat(Object.keys(this.unresolvablePaths_));
 
     var prefs = {};
     prefs[FolderShortcutsDataModel.NAME] = paths;
diff --git a/chrome/browser/resources/file_manager/foreground/js/image_editor/image_editor.js b/chrome/browser/resources/file_manager/foreground/js/image_editor/image_editor.js
index 0901554..f79ed02 100644
--- a/chrome/browser/resources/file_manager/foreground/js/image_editor/image_editor.js
+++ b/chrome/browser/resources/file_manager/foreground/js/image_editor/image_editor.js
@@ -740,6 +740,7 @@
     this.dragHandler_ = this.buffer_.getDragHandler(position.x, position.y,
                                                     true /* touch */);
     this.dragHappened_ = false;
+    e.preventDefault();
   }
 };
 
diff --git a/chrome/browser/resources/file_manager/foreground/js/image_editor/image_view.js b/chrome/browser/resources/file_manager/foreground/js/image_editor/image_view.js
index e174ae5..f682d44 100644
--- a/chrome/browser/resources/file_manager/foreground/js/image_editor/image_view.js
+++ b/chrome/browser/resources/file_manager/foreground/js/image_editor/image_view.js
@@ -406,8 +406,10 @@
       self.replace(
           canvas,
           effect,
-          metadata.media.width || metadata.drive.imageWidth,
-          metadata.media.height || metadata.drive.imageHeight,
+          (metadata.media && metadata.media.width) ||
+              metadata.drive.imageWidth,
+          (metadata.media && metadata.media.height) ||
+              metadata.drive.imageHeight,
           true /* preview */);
       if (displayCallback) displayCallback();
     }
diff --git a/chrome/browser/resources/file_manager/foreground/js/main_scripts.js b/chrome/browser/resources/file_manager/foreground/js/main_scripts.js
index b9e6f20..6e0044a 100644
--- a/chrome/browser/resources/file_manager/foreground/js/main_scripts.js
+++ b/chrome/browser/resources/file_manager/foreground/js/main_scripts.js
@@ -24,7 +24,7 @@
 // //so we want to parse it as early as possible.
 //<include src="metrics.js"/>
 //
-//<include src="../../../image_loader/image_loader_client.js"/>
+//<include src="../../../../../../ui/file_manager/image_loader/image_loader_client.js"/>
 //
 //<include src="../../../../../../ui/webui/resources/js/load_time_data.js"/>
 //<include src="../../../../../../ui/webui/resources/js/cr.js"/>
@@ -126,7 +126,4 @@
 
 // Exports
 window.util = util;
-
-window.unload = unload;
-
 })();
diff --git a/chrome/browser/resources/file_manager/foreground/js/metadata/metadata_cache.js b/chrome/browser/resources/file_manager/foreground/js/metadata/metadata_cache.js
index 0a20c17..b86fb35 100644
--- a/chrome/browser/resources/file_manager/foreground/js/metadata/metadata_cache.js
+++ b/chrome/browser/resources/file_manager/foreground/js/metadata/metadata_cache.js
@@ -581,7 +581,7 @@
   if (data === null) return;
   var properties = this.cache_[entry.toURL()].properties;
   for (var type in data) {
-    if (data.hasOwnProperty(type) && !properties.hasOwnProperty(type)) {
+    if (data.hasOwnProperty(type)) {
       properties[type] = data[type];
       this.notifyObservers_(entry, type);
     }
@@ -772,17 +772,16 @@
   this.callbacks_ = [];
   var self = this;
 
-  var task = function(entry, callback) {
-    // TODO(mtomasz): Make getDriveEntryProperties accept Entry instead of URL.
-    var entryURL = entry.toURL();
-    chrome.fileBrowserPrivate.getDriveEntryProperties(entryURL,
-        function(properties) {
-          callback(self.convert_(properties, entry));
-        });
-  };
-
-  for (var i = 0; i < entries.length; i++)
-    task(entries[i], callbacks[i]);
+  // TODO(mtomasz): Make getDriveEntryProperties accept Entry instead of URL.
+  var entryURLs = util.entriesToURLs(entries);
+  chrome.fileBrowserPrivate.getDriveEntryProperties(
+      entryURLs,
+      function(propertiesList) {
+        console.assert(propertiesList.length === callbacks.length);
+        for (var i = 0; i < callbacks.length; i++) {
+          callbacks[i](self.convert_(propertiesList[i], entries[i]));
+        }
+      });
 };
 
 /**
@@ -839,24 +838,24 @@
     shared: data.shared
   };
 
-  if (!data.isPresent) {
-    // Block the local fetch for drive files, which require downloading.
-    result.thumbnail = {url: '', transform: null};
-    result.media = {};
-  }
-
   if ('thumbnailUrl' in data) {
     result.thumbnail = {
       url: data.thumbnailUrl,
       transform: null
     };
+  } else if (data.isPresent) {
+    result.thumbnail = null;
+  } else {
+    // Block the local fetch for drive files, which require downloading.
+    result.thumbnail = {url: '', transform: null};
   }
-  if (!data.isPresent) {
-    // Indicate that the data is not available in local cache.
-    // It used to have a field 'url' for streaming play, but it is
-    // derprecated. See crbug.com/174560.
-    result.streaming = {};
-  }
+
+  result.media = data.isPresent ? null : {};
+  // Indicate that the data is not available in local cache.
+  // It used to have a field 'url' for streaming play, but it is
+  // derprecated. See crbug.com/174560.
+  result.streaming = data.isPresent ? null : {};
+
   return result;
 };
 
diff --git a/chrome/browser/resources/file_manager/foreground/js/photo/gallery.js b/chrome/browser/resources/file_manager/foreground/js/photo/gallery.js
index 9db9cd0..242eea5 100644
--- a/chrome/browser/resources/file_manager/foreground/js/photo/gallery.js
+++ b/chrome/browser/resources/file_manager/foreground/js/photo/gallery.js
@@ -6,12 +6,6 @@
 
 /**
  * Called from the main frame when unloading.
- * @return {string?} User-visible message on null if it is OK to close.
- */
-function beforeunload() { return Gallery.instance.onBeforeUnload() }
-
-/**
- * Called from the main frame when unloading.
  * @param {boolean=} opt_exiting True if the app is exiting.
  */
 function unload(opt_exiting) { Gallery.instance.onUnload(opt_exiting) }
@@ -45,6 +39,8 @@
   this.metadataCache_ = context.metadataCache;
   this.volumeManager_ = volumeManager;
   this.selectedEntry_ = null;
+  this.metadataCacheObserverId_ = null;
+  this.onExternallyUnmountedBound_ = this.onExternallyUnmounted_.bind(this);
 
   this.dataModel_ = new cr.ui.ArrayDataModel([]);
   this.selectionModel_ = new cr.ui.ListSelectionModel();
@@ -116,15 +112,14 @@
   // Search results may contain files from different subdirectories so
   // the observer is not going to work.
   if (!this.context_.searchResults && this.context_.curDirEntry) {
-    this.thumbnailObserverId_ = this.metadataCache_.addObserver(
+    this.metadataCacheObserverId_ = this.metadataCache_.addObserver(
         this.context_.curDirEntry,
         MetadataCache.CHILDREN,
         'thumbnail',
         this.updateThumbnails_.bind(this));
   }
-
-  this.volumeManager_.addEventListener('externally-unmounted',
-      this.onExternallyUnmounted_.bind(this));
+  this.volumeManager_.addEventListener(
+      'externally-unmounted', this.onExternallyUnmountedBound_);
 };
 
 /**
@@ -143,21 +138,14 @@
 };
 
 /**
- * Beforeunload handler.
- * @return {string?} User-visible message on null if it is OK to close.
- */
-Gallery.prototype.onBeforeUnload = function() {
-  return this.slideMode_.onBeforeUnload();
-};
-
-/**
  * Unloads the Gallery.
  * @param {boolean} exiting True if the app is exiting.
  */
 Gallery.prototype.onUnload = function(exiting) {
-  if (!this.context_.searchResults) {
-    this.metadataCache_.removeObserver(this.thumbnailObserverId_);
-  }
+  if (this.metadataCacheObserverId_ !== null)
+    this.metadataCache_.removeObserver(this.metadataCacheObserverId_);
+  this.volumeManager_.removeEventListener(
+      'externally-unmounted', this.onExternallyUnmountedBound_);
   this.slideMode_.onUnload(exiting);
 };
 
diff --git a/chrome/browser/resources/file_manager/foreground/js/photo/gallery_scripts.js b/chrome/browser/resources/file_manager/foreground/js/photo/gallery_scripts.js
index 336fa20..ec7f796 100644
--- a/chrome/browser/resources/file_manager/foreground/js/photo/gallery_scripts.js
+++ b/chrome/browser/resources/file_manager/foreground/js/photo/gallery_scripts.js
@@ -10,7 +10,7 @@
 
 //<include src="../metrics.js">
 
-//<include src="../../../../image_loader/image_loader_client.js"/>
+//<include src="../../../../../../../ui/file_manager/image_loader/image_loader_client.js"/>
 
 //<include src="../../../../../../../ui/webui/resources/js/cr.js">
 //<include src="../../../../../../../ui/webui/resources/js/event_tracker.js">
@@ -64,7 +64,6 @@
 // Exports
 window.ImageUtil = ImageUtil;
 window.Gallery = Gallery;
-window.beforeunload = beforeunload;
 window.unload = unload;
 
 })();
diff --git a/chrome/browser/resources/file_manager/foreground/js/photo/mosaic_mode.js b/chrome/browser/resources/file_manager/foreground/js/photo/mosaic_mode.js
index 0ef1c39..90cc85d 100644
--- a/chrome/browser/resources/file_manager/foreground/js/photo/mosaic_mode.js
+++ b/chrome/browser/resources/file_manager/foreground/js/photo/mosaic_mode.js
@@ -60,8 +60,11 @@
 MosaicMode.prototype.onKeyDown = function(event) {
   switch (util.getKeyModifiers(event) + event.keyIdentifier) {
     case 'Enter':
-      this.toggleMode_();
-      event.preventDefault();
+      if (!document.activeElement ||
+          document.activeElement.localName !== 'button') {
+        this.toggleMode_();
+        event.preventDefault();
+      }
       return;
   }
   this.mosaic_.onKeyDown(event);
diff --git a/chrome/browser/resources/file_manager/foreground/js/photo/slide_mode.js b/chrome/browser/resources/file_manager/foreground/js/photo/slide_mode.js
index d9b4739..94f76d4 100644
--- a/chrome/browser/resources/file_manager/foreground/js/photo/slide_mode.js
+++ b/chrome/browser/resources/file_manager/foreground/js/photo/slide_mode.js
@@ -798,16 +798,6 @@
 };
 
 /**
- * beforeunload handler, to be called from the top frame.
- * @return {string} Message to show if there are unsaved changes.
- */
-SlideMode.prototype.onBeforeUnload = function() {
-  if (this.editor_.isBusy())
-    return this.displayStringFunction_('GALLERY_UNSAVED_CHANGES');
-  return null;
-};
-
-/**
  * Click handler for the image container.
  *
  * @param {Event} event Mouse click event.
diff --git a/chrome/browser/resources/file_manager/foreground/js/ui/navigation_list.js b/chrome/browser/resources/file_manager/foreground/js/ui/navigation_list.js
index e7dd869..75ae1d8 100644
--- a/chrome/browser/resources/file_manager/foreground/js/ui/navigation_list.js
+++ b/chrome/browser/resources/file_manager/foreground/js/ui/navigation_list.js
@@ -278,8 +278,12 @@
  */
 NavigationList.prototype.activateModelItem_ = function(modelItem) {
   var onEntryResolved = function(entry) {
-    if (util.isSameEntry(this.directoryModel_.getCurrentDirEntry(), entry))
+    if (util.isSameEntry(this.directoryModel_.getCurrentDirEntry(), entry)) {
+      // On clicking the current directory, clears the selection.
+      this.directoryModel_.clearSelection();
       return;
+    }
+
     metrics.recordUserAction('FolderShortcut.Navigate');
     this.directoryModel_.changeDirectoryEntry(entry);
   }.bind(this);
diff --git a/chrome/browser/resources/file_manager/foreground/js/ui/search_box.js b/chrome/browser/resources/file_manager/foreground/js/ui/search_box.js
index f4516a0..d038a4b 100644
--- a/chrome/browser/resources/file_manager/foreground/js/ui/search_box.js
+++ b/chrome/browser/resources/file_manager/foreground/js/ui/search_box.js
@@ -139,16 +139,6 @@
 };
 
 /**
- * Updates the size related style.
- */
-SearchBox.prototype.updateSizeRelatedStyle = function() {
-  // Hide the search box if there is not enough space.
-  this.element.classList.toggle(
-      'too-short',
-      this.element.clientWidth < 100);
-};
-
-/**
  * Clears the search query.
  */
 SearchBox.prototype.clear = function() {
diff --git a/chrome/browser/resources/gaia_auth/main.html b/chrome/browser/resources/gaia_auth/main.html
index 57e14f3..a53b3fe 100644
--- a/chrome/browser/resources/gaia_auth/main.html
+++ b/chrome/browser/resources/gaia_auth/main.html
@@ -8,6 +8,8 @@
   <script src="main.js"></script>
 </head>
 <body>
-  <iframe id="gaia-frame" name="gaia-frame" src="about:blank" frameborder="0"></iframe>
+  <iframe id="gaia-frame" name="gaia-frame" src="about:blank" frameborder="0"
+   sandbox="allow-same-origin allow-scripts allow-popups allow-forms
+            allow-pointer-lock"></iframe>
 </body>
 </html>
diff --git a/chrome/browser/resources/gcm_internals.css b/chrome/browser/resources/gcm_internals.css
index 98b3544..f3f3c5e 100644
--- a/chrome/browser/resources/gcm_internals.css
+++ b/chrome/browser/resources/gcm_internals.css
@@ -12,12 +12,28 @@
   padding: 4px;
 }
 
-.row-caption {
+tr:nth-child(odd) {
+  background-color: rgb(245, 245, 200);
+}
+
+th {
+  background-color: rgb(160, 160, 125);
+  color: rgb(255, 255, 255);
+  font-weight: bold;
+}
+
+.flexbar {
+  display: flex;
+  flex-direction: row;
+  margin: 5px;
+}
+
+#device-info tr :first-child {
   font-weight: bold;
   padding-right: 10px;
   text-align: end;
 }
 
-.odd-number-row {
-  background-color: rgb(245, 245, 200);
+.log-table {
+  padding: 4px;
 }
diff --git a/chrome/browser/resources/gcm_internals.html b/chrome/browser/resources/gcm_internals.html
index 775a922..50a508f 100644
--- a/chrome/browser/resources/gcm_internals.html
+++ b/chrome/browser/resources/gcm_internals.html
@@ -13,74 +13,118 @@
 </head>
 <body i18n-values=".style.fontFamily:fontfamily;.style.fontSize:fontsize">
 <h1>GCM Internals</h1>
-<div>
-  <h2>Device Info</h2>
-  <table>
-    <tr class="odd-number-row">
-      <td class="row-caption">
+<div class="flexbar">
+  <button id="refresh">Refresh</button>
+  <button id="recording">Start Recording</button>
+  <button id="clear-logs">Clear All Logs</button>
+</div>
+
+<h2>Device Info</h2>
+<table id="device-info">
+  <tbody>
+    <tr>
+      <td>
         Android Id
       </td>
       <td id="android-id">
       </td>
     </tr>
     <tr>
-      <td class="row-caption">
+      <td>
         User Profile Service Created
       </td>
       <td id="profile-service-created">
       </td>
     </tr>
-    <tr class="odd-number-row">
-      <td class="row-caption">
+    <tr>
+      <td>
         GCM Enabled State
       </td>
       <td id="gcm-enabled-state">
       </td>
     </tr>
     <tr>
-      <td class="row-caption">
+      <td>
         Signed In Username
       </td>
       <td id="signed-in-username">
       </td>
     </tr>
-    <tr class="odd-number-row">
-      <td class="row-caption">
+    <tr>
+      <td>
         GCM Client Created
       </td>
       <td id="gcm-client-created">
       </td>
     </tr>
     <tr>
-      <td class="row-caption">
+      <td>
         GCM Client State
       </td>
       <td id="gcm-client-state">
       </td>
     </tr>
-    <tr class="odd-number-row">
-      <td class="row-caption">
+    <tr>
+      <td>
         GCM Client Is Ready
       </td>
       <td id="gcm-client-ready">
       </td>
     </tr>
     <tr>
-      <td class="row-caption">
+      <td>
         Connection Client Created
       </td>
       <td id="connection-client-created">
       </td>
     </tr>
-    <tr class="odd-number-row">
-      <td class="row-caption">
+    <tr>
+      <td>
         Connection State
       </td>
       <td id="connection-state">
       </td>
     </tr>
-  </table>
-</div>
+    <tr>
+      <td>
+        Registered App Ids
+      </td>
+      <td id="registered-app-ids">
+      </td>
+    </tr>
+    <tr>
+      <td>
+        Send Message Queue Size
+      </td>
+      <td id="send-queue-size">
+      </td>
+    </tr>
+    <tr>
+      <td>
+        Resend Message Queue Size
+      </td>
+      <td id="resend-queue-size">
+      </td>
+    </tr>
+  </tbody>
+</table>
+
+<h2>Send Message Log</h2>
+<table class="log-table">
+  <thead>
+    <tr>
+      <th>Time</th>
+      <th>App Id</th>
+      <th>Receiver Id</th>
+      <th>Msg Id</th>
+      <th>Event</th>
+      <th>Details</th>
+    </tr>
+  </thead>
+  <tbody id="send-info">
+  </tbody>
+</table>
+
 <script src="chrome://resources/js/i18n_template2.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/chrome/browser/resources/gcm_internals.js b/chrome/browser/resources/gcm_internals.js
index f309479..35100b3 100644
--- a/chrome/browser/resources/gcm_internals.js
+++ b/chrome/browser/resources/gcm_internals.js
@@ -5,9 +5,11 @@
 cr.define('gcmInternals', function() {
   'use strict';
 
+  var isRecording = false;
+
   /**
    * If the info dictionary has property prop, then set the text content of
-   * element to the value of this property.
+   * element to the value of this property. Otherwise clear the content.
    * @param {!Object} info A dictionary of device infos to be displayed.
    * @param {string} prop Name of the property.
    * @param {string} element The id of a HTML element.
@@ -15,6 +17,8 @@
   function setIfExists(info, prop, element) {
     if (info[prop] !== undefined) {
       $(element).textContent = info[prop];
+    } else {
+      $(element).textContent = '';
     }
   }
 
@@ -32,10 +36,73 @@
     setIfExists(info, 'gcmClientReady', 'gcm-client-ready');
     setIfExists(info, 'connectionClientCreated', 'connection-client-created');
     setIfExists(info, 'connectionState', 'connection-state');
+    setIfExists(info, 'registeredAppIds', 'registered-app-ids');
+    setIfExists(info, 'sendQueueSize', 'send-queue-size');
+    setIfExists(info, 'resendQueueSize', 'resend-queue-size');
+  }
+
+  /**
+   * Remove all the child nodes of the element.
+   * @param {HTMLElement} element A HTML element.
+   */
+  function removeAllChildNodes(element) {
+    element.textContent = '';
+  }
+
+  /**
+   * For each item in line, add a row to the table. Each item is actually a list
+   * of sub-items; each of which will have a corresponding cell created in that
+   * row, and the sub-item will be displayed in the cell.
+   * @param {HTMLElement} table A HTML tbody element.
+   * @param {!Object} list A list of list of item.
+   */
+  function addRows(table, list) {
+    for (var i = 0; i < list.length; ++i) {
+      var row = document.createElement('tr');
+
+      // The first element is always a timestamp.
+      var cell = document.createElement('td');
+      var d = new Date(list[i][0]);
+      cell.textContent = d;
+      row.appendChild(cell);
+
+      for (var j = 1; j < list[i].length; ++j) {
+        var cell = document.createElement('td');
+        cell.textContent = list[i][j];
+        row.appendChild(cell);
+      }
+      table.appendChild(row);
+    }
+  }
+
+  /**
+   * Refresh all displayed information.
+   */
+  function refreshAll() {
+    chrome.send('getGcmInternalsInfo', [false]);
+  }
+
+  /**
+   * Toggle the isRecording variable and send it to browser.
+   */
+  function setRecording() {
+    isRecording = !isRecording;
+    chrome.send('setGcmInternalsRecording', [isRecording]);
+  }
+
+  /**
+   * Clear all the activity logs.
+   */
+  function clearLogs() {
+    chrome.send('getGcmInternalsInfo', [true]);
   }
 
   function initialize() {
-    chrome.send('getGcmInternalsInfo');
+    $('recording').disabled = true;
+    $('refresh').onclick = refreshAll;
+    $('recording').onclick = setRecording;
+    $('clear-logs').onclick = clearLogs;
+    chrome.send('getGcmInternalsInfo', [false]);
   }
 
   /**
@@ -43,9 +110,20 @@
    * @param {!Object} infos A dictionary of info items to be displayed.
    */
   function setGcmInternalsInfo(infos) {
+    isRecording = infos.isRecording;
+    if (isRecording)
+      $('recording').textContent = 'Stop Recording';
+    else
+      $('recording').textContent = 'Start Recording';
+    $('recording').disabled = false;
     if (infos.deviceInfo !== undefined) {
       displayDeviceInfo(infos.deviceInfo);
     }
+
+    removeAllChildNodes($('send-info'));
+    if (infos.sendInfo !== undefined) {
+      addRows($('send-info'), infos.sendInfo);
+    }
   }
 
   // Return an object with all of the exports.
diff --git a/chrome/browser/resources/hangout_services/manifest.json b/chrome/browser/resources/hangout_services/manifest.json
index 796e09a..25d861c 100644
--- a/chrome/browser/resources/hangout_services/manifest.json
+++ b/chrome/browser/resources/hangout_services/manifest.json
@@ -16,6 +16,7 @@
     "page": "background.html",
     "persistent": false
   },
+  "incognito": "split",
   "permissions": [
     "alarms",
     "desktopCapture",
diff --git a/chrome/browser/resources/hotword_helper/manager.js b/chrome/browser/resources/hotword_helper/manager.js
index 1685089..3fcdb05 100644
--- a/chrome/browser/resources/hotword_helper/manager.js
+++ b/chrome/browser/resources/hotword_helper/manager.js
@@ -32,22 +32,6 @@
 
 
 /**
- * @const {string}
- * @private
- */
-OptInManager.RESET_HOTWORD_PREF_ = 'resetHotwordPref';
-
-/**
- * Commands sent from this helper extension to the hotword extension.
- * @enum {string}
- */
-OptInManager.CommandFromHelper = {
-  DISABLE: 'ds',
-  ENABLE: 'en'
-};
-
-
-/**
  * Commands sent from the page to this content script.
  * @enum {string}
  */
@@ -60,59 +44,27 @@
   AUDIO_LOGGING_ON: 'alon',
   // Audio logging is opted out.
   AUDIO_LOGGING_OFF: 'aloff',
-};
-
-
-/**
- * Handles a tab being activated / focused on.
- * @param {{tabId: number}} info Information about the activated tab.
- * @private
- */
-OptInManager.prototype.handleActivatedTab_ = function(info) {
-  chrome.tabs.get(info.tabId, this.preInjectTab_.bind(this));
-};
-
-
-/**
- * Handles an updated tab.
- * @param {number} tabId Id of the updated tab.
- * @param {{status: string}} info Change info of the tab.
- * @param {!Tab} tab Updated tab.
- * @private
- */
-OptInManager.prototype.handleUpdatedTab_ = function(tabId, info, tab) {
-  //  Chrome fires multiple update events: undefined, loading and completed.
-  // We perform content injection on loading state.
-  if ('loading' !== info['status'])
-    return;
-  this.preInjectTab_(tab);
-};
-
-
-/**
- * @param {Tab} tab Tab to consider.
- * @private
- */
-OptInManager.prototype.preInjectTab_ = function(tab) {
-  if (!tab || !this.isEligibleUrl(tab.url))
-    return;
-  if (chrome.hotwordPrivate && chrome.hotwordPrivate.getStatus)
-    chrome.hotwordPrivate.getStatus(this.injectTab_.bind(this, tab));
+  // User visited an eligible page.
+  PAGE_WAKEUP: 'wu'
 };
 
 
 /**
  * @param {Tab} tab Tab to inject.
+ * @param {function(HotwordStatus)} sendResponse Callback function to respond
+ *     to sender.
  * @param {HotwordStatus} hotwordStatus Status of the hotword extension.
  * @private
  */
-OptInManager.prototype.injectTab_ = function(tab, hotwordStatus) {
-  if (hotwordStatus.available) {
-    if (hotwordStatus.enabled)
-      chrome.tabs.executeScript(tab.id, {'file': 'audio_client.js'});
-    else if (!hotwordStatus.enabledSet)
-      chrome.tabs.executeScript(tab.id, {'file': 'optin_client.js'});
-  }
+OptInManager.prototype.injectTab_ = function(
+    tab, sendResponse, hotwordStatus) {
+  if (!hotwordStatus.available)
+    return;
+  if (hotwordStatus.enabled)
+    chrome.tabs.executeScript(tab.id, {'file': 'audio_client.js'});
+  else if (!hotwordStatus.enabledSet)
+    chrome.tabs.executeScript(tab.id, {'file': 'optin_client.js'});
+  sendResponse(hotwordStatus);
 };
 
 
@@ -120,74 +72,68 @@
  * Handles messages from the helper content script.
  * @param {*} request Message from the sender.
  * @param {MessageSender} sender Information about the sender.
- * @param {function(*)} sendResponse Callback function to respond to sender.
+ * @param {function(HotwordStatus)} sendResponse Callback function to respond
+ *     to sender.
+ * @return {boolean} Whether to maintain the port open to call sendResponse.
  * @private
  */
 OptInManager.prototype.handleMessage_ = function(
     request, sender, sendResponse) {
-  if (request.type) {
-    if (request.type === OptInManager.CommandFromPage.CLICKED_OPTIN) {
-      if (chrome.hotwordPrivate && chrome.hotwordPrivate.setEnabled) {
-        chrome.hotwordPrivate.setEnabled(true);
-        this.preInjectTab_(sender.tab);
+  switch (request.type) {
+    case OptInManager.CommandFromPage.PAGE_WAKEUP:
+      if (((sender.tab && this.isEligibleUrl(sender.tab.url)) ||
+          sender.id == OptInManager.HOTWORD_EXTENSION_ID_) &&
+          chrome.hotwordPrivate && chrome.hotwordPrivate.getStatus) {
+        chrome.hotwordPrivate.getStatus(
+            this.injectTab_.bind(this, request.tab || sender.tab,
+                                 sendResponse));
+        return true;
       }
-    }
+      break;
+    case OptInManager.CommandFromPage.CLICKED_OPTIN:
+      if (chrome.hotwordPrivate && chrome.hotwordPrivate.setEnabled &&
+          chrome.hotwordPrivate.getStatus) {
+        chrome.hotwordPrivate.setEnabled(true);
+        chrome.hotwordPrivate.getStatus(
+            this.injectTab_.bind(this, sender.tab, sendResponse));
+        return true;
+      }
+      break;
     // User has explicitly clicked 'no thanks'.
-    if (request.type === OptInManager.CommandFromPage.CLICKED_NO_OPTIN) {
+    case OptInManager.CommandFromPage.CLICKED_NO_OPTIN:
       if (chrome.hotwordPrivate && chrome.hotwordPrivate.setEnabled) {
         chrome.hotwordPrivate.setEnabled(false);
       }
-    }
+      break;
     // Information regarding the audio logging preference was sent.
-    if (request.type === OptInManager.CommandFromPage.AUDIO_LOGGING_ON) {
+    case OptInManager.CommandFromPage.AUDIO_LOGGING_ON:
       if (chrome.hotwordPrivate &&
           chrome.hotwordPrivate.setAudioLoggingEnabled) {
         chrome.hotwordPrivate.setAudioLoggingEnabled(true);
-        chrome.runtime.sendMessage(
-            OptInManager.HOTWORD_EXTENSION_ID_,
-            {'cmd': OptInManager.CommandFromHelper.AUDIO_LOGGING_ON});
       }
-    }
-    if (request.type === OptInManager.CommandFromPage.AUDIO_LOGGING_OFF) {
+      break;
+    case OptInManager.CommandFromPage.AUDIO_LOGGING_OFF:
       if (chrome.hotwordPrivate &&
           chrome.hotwordPrivate.setAudioLoggingEnabled) {
         chrome.hotwordPrivate.setAudioLoggingEnabled(false);
-        chrome.runtime.sendMessage(
-            OptInManager.HOTWORD_EXTENSION_ID_,
-            {'cmd': OptInManager.CommandFromHelper.AUDIO_LOGGING_OFF});
       }
-    }
+      break;
+    default:
+      break;
   }
+  return false;
 };
 
 
 /**
- * Sets a flag to indicate that the hotword preference has been reset
- * to disabled. See crbug.com/357845.
- * @param {HotwordStatus} hotwordStatus Status of the hotword extension.
- * @private
- */
-OptInManager.prototype.resetHotwordPref_ = function(hotwordStatus) {
-  if (hotwordStatus.enabledSet &&
-      !localStorage.getItem(OptInManager.RESET_HOTWORD_PREF_) &&
-      chrome.hotwordPrivate && chrome.hotwordPrivate.setEnabled) {
-    chrome.hotwordPrivate.setEnabled(false);
-  }
-  localStorage.setItem(OptInManager.RESET_HOTWORD_PREF_, 'true');
-};
-
-
-
-/**
  * Determines if a URL is eligible for hotwording. For now, the
  * valid pages are the Google HP and SERP (this will include the NTP).
  * @param {string} url Url to check.
  * @return {boolean} True if url is eligible hotword url.
  */
 OptInManager.prototype.isEligibleUrl = function(url) {
-  if (!url) {
+  if (!url)
     return false;
-  }
 
   var baseUrls = [
     'https://www.google.com',
@@ -214,14 +160,12 @@
  * Initializes the extension.
  */
 OptInManager.prototype.initialize = function() {
-  chrome.tabs.onActivated.addListener(this.handleActivatedTab_.bind(this));
-  chrome.tabs.onUpdated.addListener(this.handleUpdatedTab_.bind(this));
+  // TODO(rlp): Possibly remove the next line. It's proably not used, but
+  // leaving for now to be safe. We should remove it once all messsage
+  // relaying is removed form the content scripts.
   chrome.runtime.onMessage.addListener(this.handleMessage_.bind(this));
-
-  // Reset the preference to deal with crbug.com/357845.
-  // TODO(rlp): remove this reset once we hit M36. See crbug.com/358392.
-  if (chrome.hotwordPrivate && chrome.hotwordPrivate.getStatus)
-    chrome.hotwordPrivate.getStatus(this.resetHotwordPref_.bind(this));
+  chrome.runtime.onMessageExternal.addListener(
+      this.handleMessage_.bind(this));
 };
 
 
diff --git a/chrome/browser/resources/hotword_helper/manifest.json b/chrome/browser/resources/hotword_helper/manifest.json
index 3d034fc..5d64c6d 100644
--- a/chrome/browser/resources/hotword_helper/manifest.json
+++ b/chrome/browser/resources/hotword_helper/manifest.json
@@ -18,5 +18,12 @@
     "tabs"
   ],
 
+  "externally_connectable": {
+    "matches": [
+      "*://*.google.com/*",
+      "chrome://newtab/"
+    ]
+  },
+
   "minimum_chrome_version": "32"
 }
diff --git a/chrome/browser/resources/image_loader/OWNERS b/chrome/browser/resources/image_loader/OWNERS
deleted file mode 100644
index 4eab6e4..0000000
--- a/chrome/browser/resources/image_loader/OWNERS
+++ /dev/null
@@ -1 +0,0 @@
-mtomasz@chromium.org
diff --git a/chrome/browser/resources/inline_login/inline_login.js b/chrome/browser/resources/inline_login/inline_login.js
index 8aa1c2a..388b5dd 100644
--- a/chrome/browser/resources/inline_login/inline_login.js
+++ b/chrome/browser/resources/inline_login/inline_login.js
@@ -18,10 +18,16 @@
   var authExtHost;
 
   /**
+   * Whether the auth ready event has been fired, for testing purpose.
+   */
+  var authReadyFired;
+
+  /**
    * Handler of auth host 'ready' event.
    */
   function onAuthReady() {
     $('contents').classList.toggle('loading', false);
+    authReadyFired = true;
   }
 
   /**
@@ -69,7 +75,23 @@
     $('contents').classList.toggle('loading', true);
   }
 
+  /**
+   * Returns the auth host instance, for testing purpose.
+   */
+  function getAuthExtHost() {
+    return authExtHost;
+  }
+
+  /**
+   * Returns whether the auth UI is ready, for testing purpose.
+   */
+  function isAuthReady() {
+    return authReadyFired;
+  }
+
   return {
+    getAuthExtHost: getAuthExtHost,
+    isAuthReady: isAuthReady,
     initialize: initialize,
     loadAuthExtension: loadAuthExtension,
     closeDialog: closeDialog,
diff --git a/chrome/browser/resources/inspect/inspect.css b/chrome/browser/resources/inspect/inspect.css
index 9d1d3ab..1f4ffa5 100644
--- a/chrome/browser/resources/inspect/inspect.css
+++ b/chrome/browser/resources/inspect/inspect.css
@@ -373,6 +373,16 @@
   opacity: 0.5;
 }
 
+#port-forwarding-message {
+  margin-bottom: 12px;
+  width: 20em;
+}
+
+#port-forwarding-message a {
+  font-weight: bold;
+  text-decoration: none;
+}
+
 #port-forwarding-config-buttons {
   align-items: center;
   display: flex;
diff --git a/chrome/browser/resources/inspect/inspect.html b/chrome/browser/resources/inspect/inspect.html
index 742197b..f953430 100644
--- a/chrome/browser/resources/inspect/inspect.html
+++ b/chrome/browser/resources/inspect/inspect.html
@@ -68,6 +68,12 @@
     <div id="port-forwarding-config-title">Port forwarding settings</div>
     <div id="port-forwarding-config-list">
     </div>
+    <div id="port-forwarding-message">
+        Define the listening port on your device that maps to a port accessible
+        from your development machine.
+        <a href="https://developers.google.com/chrome-developer-tools/docs/remote-debugging#reverse-port-forwarding"
+           target="_blank">Learn more</a>
+    </div>
     <div id="port-forwarding-config-buttons">
       <input id="port-forwarding-enable" type="checkbox" disabled/>
       <label for="port-forwarding-enable">Enable port forwarding</label>
diff --git a/chrome/browser/resources/inspect/inspect.js b/chrome/browser/resources/inspect/inspect.js
index efb5148..3355967 100644
--- a/chrome/browser/resources/inspect/inspect.js
+++ b/chrome/browser/resources/inspect/inspect.js
@@ -492,6 +492,7 @@
 function addActionLink(row, text, handler, opt_disabled) {
   var link = document.createElement('span');
   link.classList.add('action');
+  link.setAttribute('tabindex', 1);
   if (opt_disabled)
     link.classList.add('disabled');
   else
diff --git a/chrome/browser/resources/local_ntp/local_ntp.css b/chrome/browser/resources/local_ntp/local_ntp.css
index c151464..cdc6ae4 100644
--- a/chrome/browser/resources/local_ntp/local_ntp.css
+++ b/chrome/browser/resources/local_ntp/local_ntp.css
@@ -36,7 +36,9 @@
 }
 
 #logo {
-  background-image: url(images/2x/google_logo.png);
+  background-image: -webkit-image-set(
+      url('images/google_logo.png') 1x,
+      url('images/google_logo.png@2x') 2x);
   background-repeat: no-repeat;
   background-size: 269px 95px;
   height: 95px;
@@ -46,7 +48,7 @@
 }
 
 body.alternate-logo #logo {
-  background-image: url(images/2x/white_google_logo.png);
+  background-image: url(images/white_google_logo.png);
 }
 
 #fakebox {
diff --git a/chrome/browser/resources/login/display_manager.js b/chrome/browser/resources/login/display_manager.js
index 9ae8f03..9301821 100644
--- a/chrome/browser/resources/login/display_manager.js
+++ b/chrome/browser/resources/login/display_manager.js
@@ -11,12 +11,13 @@
 /** @const */ var SCREEN_OOBE_HID_DETECTION = 'hid-detection';
 /** @const */ var SCREEN_OOBE_EULA = 'eula';
 /** @const */ var SCREEN_OOBE_UPDATE = 'update';
+/** @const */ var SCREEN_OOBE_RESET = 'reset';
 /** @const */ var SCREEN_OOBE_ENROLLMENT = 'oauth-enrollment';
 /** @const */ var SCREEN_OOBE_KIOSK_ENABLE = 'kiosk-enable';
 /** @const */ var SCREEN_GAIA_SIGNIN = 'gaia-signin';
 /** @const */ var SCREEN_ACCOUNT_PICKER = 'account-picker';
-/** @const */ var SCREEN_ERROR_MESSAGE = 'error-message';
 /** @const */ var SCREEN_USER_IMAGE_PICKER = 'user-image';
+/** @const */ var SCREEN_ERROR_MESSAGE = 'error-message';
 /** @const */ var SCREEN_TPM_ERROR = 'tpm-error-message';
 /** @const */ var SCREEN_PASSWORD_CHANGED = 'password-changed';
 /** @const */ var SCREEN_CREATE_MANAGED_USER_FLOW =
@@ -24,6 +25,9 @@
 /** @const */ var SCREEN_APP_LAUNCH_SPLASH = 'app-launch-splash';
 /** @const */ var SCREEN_CONFIRM_PASSWORD = 'confirm-password';
 /** @const */ var SCREEN_FATAL_ERROR = 'fatal-error';
+/** @const */ var SCREEN_KIOSK_ENABLE = 'kiosk-enable';
+/** @const */ var SCREEN_TERMS_OF_SERVICE = 'terms-of-service';
+/** @const */ var SCREEN_WRONG_HWID = 'wrong-hwid';
 
 /* Accelerator identifiers. Must be kept in sync with webui_login_view.cc. */
 /** @const */ var ACCELERATOR_CANCEL = 'cancel';
@@ -94,6 +98,40 @@
                         SCREEN_OOBE_EULA,
                         SCREEN_OOBE_UPDATE]
                       ];
+  /**
+   * Group of screens (screen IDs) where factory-reset screen invocation is
+   * available.
+   * @type Array.<string>
+   * @const
+   */
+  var RESET_AVAILABLE_SCREEN_GROUP = [
+    SCREEN_OOBE_NETWORK,
+    SCREEN_OOBE_EULA,
+    SCREEN_OOBE_UPDATE,
+    SCREEN_OOBE_ENROLLMENT,
+    SCREEN_GAIA_SIGNIN,
+    SCREEN_ACCOUNT_PICKER,
+    SCREEN_KIOSK_ENABLE,
+    SCREEN_ERROR_MESSAGE,
+    SCREEN_USER_IMAGE_PICKER,
+    SCREEN_TPM_ERROR,
+    SCREEN_PASSWORD_CHANGED,
+    SCREEN_TERMS_OF_SERVICE,
+    SCREEN_WRONG_HWID,
+    SCREEN_CONFIRM_PASSWORD,
+    SCREEN_FATAL_ERROR
+  ];
+
+  /**
+   * Group of screens (screen IDs) that are not participating in
+   * left-current-right animation.
+   * @type Array.<string>
+   * @const
+   */
+  var NOT_ANIMATED_SCREEN_GROUP = [
+    SCREEN_OOBE_RESET
+  ];
+
 
   /**
    * OOBE screens group index.
@@ -200,7 +238,7 @@
       this.forceKeyboardFlow_ = value;
       if (value) {
         keyboard.initializeKeyboardFlow();
-        cr.ui.Dropdown.enableKeyboardFlow();
+        cr.ui.DropDown.enableKeyboardFlow();
       }
     },
 
@@ -247,10 +285,8 @@
         if (this.allowToggleVersion_)
           $('version-labels').hidden = !$('version-labels').hidden;
       } else if (name == ACCELERATOR_RESET) {
-        if (currentStepId == SCREEN_GAIA_SIGNIN ||
-            currentStepId == SCREEN_ACCOUNT_PICKER) {
+        if (RESET_AVAILABLE_SCREEN_GROUP.indexOf(currentStepId) != -1)
           chrome.send('toggleResetScreen');
-        }
       } else if (name == ACCELERATOR_DEVICE_REQUISITION) {
         if (this.isOobeUI())
           this.showDeviceRequisitionPrompt_();
@@ -303,6 +339,10 @@
       }
     },
 
+    screenIsAnimated_: function(screenId) {
+      return NOT_ANIMATED_SCREEN_GROUP.indexOf(screenId) != -1;
+    },
+
     /**
      * Updates a step's css classes to reflect left, current, or right position.
      * @param {number} stepIndex step index.
@@ -319,6 +359,7 @@
           header.classList.remove(states[i]);
         }
       }
+
       step.classList.add(state);
       header.classList.add(state);
     },
@@ -351,7 +392,9 @@
 
       newStep.classList.remove('hidden');
 
-      if (this.isOobeUI()) {
+      if (this.isOobeUI() &&
+          this.screenIsAnimated_(nextStepId) &&
+          this.screenIsAnimated_(currentStepId)) {
         // Start gliding animation for OOBE steps.
         if (nextStepIndex > this.currentStep_) {
           for (var i = this.currentStep_; i < nextStepIndex; ++i)
@@ -363,9 +406,13 @@
           this.updateStep_(nextStepIndex, 'current');
         }
       } else {
-        // Start fading animation for login display.
+        // Start fading animation for login display or reset screen.
         oldStep.classList.add('faded');
         newStep.classList.remove('faded');
+        if (!this.screenIsAnimated_(nextStepId)) {
+          newStep.classList.remove('left');
+          newStep.classList.remove('right');
+        }
       }
 
       this.disableButtons_(newStep, false);
diff --git a/chrome/browser/resources/login/screen_container.css b/chrome/browser/resources/login/screen_container.css
index 67702b4..6a1d6af 100644
--- a/chrome/browser/resources/login/screen_container.css
+++ b/chrome/browser/resources/login/screen_container.css
@@ -6,6 +6,7 @@
 #outer-container {
   -webkit-box-align: center;
   -webkit-box-pack: center;
+  -webkit-perspective: 1px; /* Workaround, see http://crbug.com/360567 */
   bottom: 51px;  /* Leave space for the header bar */
   display: -webkit-box;
   left: 0;
@@ -30,7 +31,7 @@
 }
 
 #scroll-container::-webkit-scrollbar {
-    display: none;
+  display: none;
 }
 
 #inner-container {
@@ -105,6 +106,8 @@
 #progress-dots {
   -webkit-box-pack: center;
   -webkit-margin-before: 15px;
+  -webkit-transition: opacity 200ms ease-in-out,
+                      visibility 200ms ease-in-out;
   display: -webkit-box;
 }
 
@@ -158,6 +161,10 @@
   opacity: 1;
 }
 
+#oobe.reset #progress-dots {
+  visibility: hidden;
+}
+
 body:not(.oobe-display) #inner-container {
   height: 262px;
   padding: 0;
diff --git a/chrome/browser/resources/login/user_pod_row.css b/chrome/browser/resources/login/user_pod_row.css
index aa3244c..875cd17 100644
--- a/chrome/browser/resources/login/user_pod_row.css
+++ b/chrome/browser/resources/login/user_pod_row.css
@@ -69,16 +69,16 @@
 }
 
 .pod .user-image-container {
+  align-items: center;
+  display: flex;
   height: 160px;
-  line-height: 160px;
-  text-align: center;
+  justify-content: center;
   width: 160px;
 }
 
 .pod .user-image {
   height: 160px;
   opacity: 0.7;
-  vertical-align: middle;
   width: 160px;
 }
 
@@ -187,6 +187,7 @@
   -webkit-transition: opacity linear 150ms;
   background: white;
   border: none;
+  border-radius: 0; /* override widgets.css rule */
   box-sizing: border-box;
   display: none;
   height: 40px;
diff --git a/chrome/browser/resources/options/autofill_edit_address_overlay.html b/chrome/browser/resources/options/autofill_edit_address_overlay.html
index 44ff77f..a54bc85 100644
--- a/chrome/browser/resources/options/autofill_edit_address_overlay.html
+++ b/chrome/browser/resources/options/autofill_edit_address_overlay.html
@@ -46,8 +46,10 @@
     </div>
 
     <div class="settings-row">
-      <div i18n-content="autofillCountryLabel"></div>
-      <select id="country"></select>
+      <label>
+        <div i18n-content="autofillCountryLabel"></div>
+        <select id="country"></select>
+      </label>
     </div>
 
     <div class="input-group settings-row">
diff --git a/chrome/browser/resources/options/autofill_edit_address_overlay.js b/chrome/browser/resources/options/autofill_edit_address_overlay.js
index 94b6a5d..1f1bf5b 100644
--- a/chrome/browser/resources/options/autofill_edit_address_overlay.js
+++ b/chrome/browser/resources/options/autofill_edit_address_overlay.js
@@ -46,8 +46,10 @@
         // Blurring is delayed for list elements.  Queue save and close to
         // ensure that pending changes have been applied.
         setTimeout(function() {
-          self.saveAddress_();
-          self.dismissOverlay_();
+          $('phone-list').doneValidating().then(function() {
+            self.saveAddress_();
+            self.dismissOverlay_();
+          });
         }, 0);
       };
 
@@ -292,6 +294,7 @@
   AutofillEditAddressOverlay.setValidatedPhoneNumbers = function(numbers) {
     AutofillEditAddressOverlay.getInstance().setMultiValueList_('phone-list',
                                                                 numbers);
+    $('phone-list').didReceiveValidationResult();
   };
 
   // Export
diff --git a/chrome/browser/resources/options/autofill_options_list.js b/chrome/browser/resources/options/autofill_options_list.js
index 0be698d..540bf56 100644
--- a/chrome/browser/resources/options/autofill_options_list.js
+++ b/chrome/browser/resources/options/autofill_options_list.js
@@ -490,8 +490,50 @@
       info[0] = index;
       info[1] = numbers;
       info[2] = $('country').value;
+      this.validationRequests_++;
       chrome.send('validatePhoneNumbers', info);
     },
+
+    /**
+     * The number of ongoing validation requests.
+     * @type {number}
+     * @private
+     */
+    validationRequests_: 0,
+
+    /**
+     * Pending Promise resolver functions.
+     * @type {Array.<!Function>}
+     * @private
+     */
+    validationPromiseResolvers_: [],
+
+    /**
+     * This should be called when a reply of chrome.send('validatePhoneNumbers')
+     * is received.
+     */
+    didReceiveValidationResult: function() {
+      this.validationRequests_--;
+      assert(this.validationRequests_ >= 0);
+      if (this.validationRequests_ <= 0) {
+        while (this.validationPromiseResolvers_.length) {
+          this.validationPromiseResolvers_.pop()();
+        }
+      }
+    },
+
+    /**
+     * Returns a Promise which is fulfilled when all of validation requests are
+     * completed.
+     * @return {!Promise} A promise.
+     */
+    doneValidating: function() {
+      if (this.validationRequests_ <= 0)
+        return Promise.resolve();
+      return new Promise(function(resolve) {
+        this.validationPromiseResolvers_.push(resolve);
+      }.bind(this));
+    }
   };
 
   return {
diff --git a/chrome/browser/resources/options/browser_options.css b/chrome/browser/resources/options/browser_options.css
index 24ed45d..4d0374e 100644
--- a/chrome/browser/resources/options/browser_options.css
+++ b/chrome/browser/resources/options/browser_options.css
@@ -106,7 +106,7 @@
 }
 
 #profiles-list > * {
-  height: 40px;
+  height: 47px;
 }
 
 #profiles-list:focus {
@@ -114,7 +114,7 @@
 }
 
 .profile-img {
-  height: 31px;
+  height: 38px;
   padding: 3px;
   vertical-align: middle;
   width: 38px;
diff --git a/chrome/browser/resources/options/browser_options.html b/chrome/browser/resources/options/browser_options.html
index 67a448e..4cea7dc 100644
--- a/chrome/browser/resources/options/browser_options.html
+++ b/chrome/browser/resources/options/browser_options.html
@@ -219,6 +219,17 @@
       </div>
     </div>
   </section>
+
+  <section id="security-section" hidden>
+    <h3 i18n-content="securityTitle"></h3>
+    <div class="settings-row">
+      <span i18n-content="consumerManagementEnrollDescription"></span>
+    </div>
+    <div class="settings-row">
+      <button id="consumer-management-enroll-button"
+          i18n-content="consumerManagementEnrollButton"></button>
+    </div>
+  </section>
 </if>
   <section id="privacy-section">
     <h3 i18n-content="advancedSectionTitlePrivacy"></h3>
@@ -633,7 +644,7 @@
     </div>
   </section>
   <section>
-      <h3 i18n-content="advancedSectionTitleSecurity"></h3>
+      <h3 i18n-content="advancedSectionTitleCertificates"></h3>
       <div>
 <if expr="use_nss or is_win or is_macosx">
         <div class="settings-row">
diff --git a/chrome/browser/resources/options/browser_options.js b/chrome/browser/resources/options/browser_options.js
index 6968042..c057e66 100644
--- a/chrome/browser/resources/options/browser_options.js
+++ b/chrome/browser/resources/options/browser_options.js
@@ -397,6 +397,15 @@
         };
       }
 
+      // Security section.
+      if (cr.isChromeOS &&
+          loadTimeData.getBoolean('consumerManagementEnabled')) {
+        $('security-section').hidden = false;
+        $('consumer-management-enroll-button').onclick = function(event) {
+          chrome.send('enrollConsumerManagement');
+        };
+      }
+
       // Easy Unlock section.
       if (loadTimeData.getBoolean('easyUnlockEnabled')) {
         $('easy-unlock-section').hidden = false;
@@ -911,13 +920,6 @@
       customizeSyncButton.disabled =
           syncData.hasUnrecoverableError ||
           (!syncData.setupCompleted && !$('sync-action-link').hidden);
-
-      // Move #enable-auto-login-checkbox to a different location on CrOS.
-      if (cr.isChromeOs) {
-        $('sync-general').insertBefore($('sync-status').nextSibling,
-                                       $('enable-auto-login-checkbox'));
-      }
-      $('enable-auto-login-checkbox').hidden = !syncData.autoLoginVisible;
     },
 
     /**
diff --git a/chrome/browser/resources/options/chromeos/change_picture_options.css b/chrome/browser/resources/options/chromeos/change_picture_options.css
index 0f1bb26..d68291a 100644
--- a/chrome/browser/resources/options/chromeos/change_picture_options.css
+++ b/chrome/browser/resources/options/chromeos/change_picture_options.css
@@ -54,7 +54,7 @@
  */
 
 #user-image-preview {
-  margin: 20px 10px 0 0;
+  margin: 18px 10px 0 0;
   max-width: 220px;
   position: relative;
 }
@@ -63,7 +63,7 @@
   -webkit-perspective: 600px;
   border: solid 1px #cacaca;
   border-radius: 4px;
-  padding: 2px;
+  padding: 3px;
   width: 220px;
 }
 
@@ -73,7 +73,7 @@
   border-radius: 4px;
   max-height: 220px;
   max-width: 220px;
-  padding: 2px;
+  padding: 3px;
 }
 
 .camera.live #user-image-preview-img {
@@ -172,7 +172,7 @@
 #take-photo {
   display: none;
   height: 25px;
-  margin: 4px 1px;
+  margin: 4px;
   padding: 0;
   width: 220px;
 }
diff --git a/chrome/browser/resources/options/chromeos/internet_detail.html b/chrome/browser/resources/options/chromeos/internet_detail.html
index 556c70a..f3632ed 100644
--- a/chrome/browser/resources/options/chromeos/internet_detail.html
+++ b/chrome/browser/resources/options/chromeos/internet_detail.html
@@ -359,7 +359,7 @@
       <section id="cellular-device-options">
         <table class="option-control-table">
           <tr>
-            <td class="option-name" i18n-content="manufacturer"></td>
+            <td class="option-name" i18n-content="cellularManufacturer"></td>
             <td id="manufacturer" class="option-value"></td>
           </tr>
           <tr>
diff --git a/chrome/browser/resources/options/chromeos/internet_detail.js b/chrome/browser/resources/options/chromeos/internet_detail.js
index f03f155..7fc6c6e 100644
--- a/chrome/browser/resources/options/chromeos/internet_detail.js
+++ b/chrome/browser/resources/options/chromeos/internet_detail.js
@@ -1120,7 +1120,7 @@
       $('roaming-state').textContent = data.roamingState;
       $('restricted-pool').textContent = data.restrictedPool;
       $('error-state').textContent = data.errorState;
-      $('manufacturer').textContent = data.manufacturer;
+      $('manufacturer').textContent = data.cellularManufacturer;
       $('model-id').textContent = data.modelId;
       $('firmware-revision').textContent = data.firmwareRevision;
       $('hardware-revision').textContent = data.hardwareRevision;
diff --git a/chrome/browser/resources/options/clear_browser_data_overlay.js b/chrome/browser/resources/options/clear_browser_data_overlay.js
index 78d5333..75c712a 100644
--- a/chrome/browser/resources/options/clear_browser_data_overlay.js
+++ b/chrome/browser/resources/options/clear_browser_data_overlay.js
@@ -22,10 +22,21 @@
     // Inherit ClearBrowserDataOverlay from OptionsPage.
     __proto__: OptionsPage.prototype,
 
-    // Whether deleting history and downloads is allowed.
+    /**
+     * Whether deleting history and downloads is allowed.
+     * @type {boolean}
+     * @private
+     */
     allowDeletingHistory_: true,
 
     /**
+     * Whether or not clearing browsing data is currently in progress.
+     * @type {boolean}
+     * @private
+     */
+    isClearingInProgress_: true,
+
+    /**
      * Initialize the page.
      */
     initializePage: function() {
@@ -50,7 +61,12 @@
       for (var i = 0; i < checkboxes.length; i++) {
         checkboxes[i].onclick = f;
       }
-      this.updateCommitButtonState_();
+
+      // At this point, assume that we are currently in the process of clearing
+      // data, so as to prevent the controls from being hazardously enabled for
+      // a very short time before ClearBrowserDataOverlay.setClearing() is
+      // called by the native side with the authoritative state.
+      this.setClearing(true);
 
       this.createStuffRemainsFooter_();
 
@@ -58,7 +74,7 @@
         ClearBrowserDataOverlay.dismiss();
       };
       $('clear-browser-data-commit').onclick = function(event) {
-        ClearBrowserDataOverlay.setClearingState(true);
+        ClearBrowserDataOverlay.setClearing(true);
         chrome.send('performClearBrowserData');
       };
 
@@ -66,8 +82,10 @@
       this.showDeleteHistoryCheckboxes_(show);
     },
 
-    // Create a footer that explains that some content is not cleared by the
-    // clear browsing history dialog.
+    /**
+     * Create a footer that explains that some content is not cleared by the
+     * clear browsing history dialog.
+     */
     createStuffRemainsFooter_: function() {
       // The localized string is of the form "Saved [content settings] and
       // {search engines} will not be cleared and may reflect your browsing
@@ -114,7 +132,34 @@
       }
     },
 
-    // Set the enabled state of the commit button.
+    /**
+     * Sets the enabled state of the checkboxes and buttons based on whether or
+     * not we are in the process of clearing data.
+     * @param {boolean} clearing Whether the browsing history is currently
+     *     being cleared.
+     */
+    setClearing: function(clearing) {
+      $('delete-browsing-history-checkbox').disabled = clearing;
+      $('delete-download-history-checkbox').disabled = clearing;
+      $('delete-cache-checkbox').disabled = clearing;
+      $('delete-cookies-checkbox').disabled = clearing;
+      $('delete-passwords-checkbox').disabled = clearing;
+      $('delete-form-data-checkbox').disabled = clearing;
+      $('delete-hosted-apps-data-checkbox').disabled = clearing;
+      $('deauthorize-content-licenses-checkbox').disabled = clearing;
+      $('clear-browser-data-time-period').disabled = clearing;
+      $('cbd-throbber').style.visibility = clearing ? 'visible' : 'hidden';
+      $('clear-browser-data-dismiss').disabled = clearing;
+
+      // The enabled state of the commit button is further based on whether or
+      // not any of the check boxes are checked.
+      this.isClearingInProgress_ = clearing;
+      this.updateCommitButtonState_();
+    },
+
+    /**
+     * Sets the enabled state of the commit button.
+     */
     updateCommitButtonState_: function() {
       var checkboxes = document.querySelectorAll(
           '#cbd-content-area input[type=checkbox]');
@@ -125,7 +170,8 @@
           break;
         }
       }
-      $('clear-browser-data-commit').disabled = !isChecked;
+      $('clear-browser-data-commit').disabled =
+          !isChecked || this.isClearingInProgress_;
     },
 
     setAllowDeletingHistory: function(allowed) {
@@ -164,23 +210,8 @@
     ClearBrowserDataOverlay.getInstance().setAllowDeletingHistory(allowed);
   };
 
-  ClearBrowserDataOverlay.setClearingState = function(state) {
-    $('delete-browsing-history-checkbox').disabled = state;
-    $('delete-download-history-checkbox').disabled = state;
-    $('delete-cache-checkbox').disabled = state;
-    $('delete-cookies-checkbox').disabled = state;
-    $('delete-passwords-checkbox').disabled = state;
-    $('delete-form-data-checkbox').disabled = state;
-    $('delete-hosted-apps-data-checkbox').disabled = state;
-    $('deauthorize-content-licenses-checkbox').disabled = state;
-    $('clear-browser-data-time-period').disabled = state;
-    $('cbd-throbber').style.visibility = state ? 'visible' : 'hidden';
-    $('clear-browser-data-dismiss').disabled = state;
-
-    if (state)
-      $('clear-browser-data-commit').disabled = true;
-    else
-      ClearBrowserDataOverlay.getInstance().updateCommitButtonState_();
+  ClearBrowserDataOverlay.setClearing = function(clearing) {
+    ClearBrowserDataOverlay.getInstance().setClearing(clearing);
   };
 
   ClearBrowserDataOverlay.setBannerVisibility = function(args) {
@@ -201,7 +232,7 @@
     var topmostVisiblePage = OptionsPage.getTopmostVisiblePage();
     if (topmostVisiblePage && topmostVisiblePage.name == 'clearBrowserData')
       OptionsPage.closeOverlay();
-    this.setClearingState(false);
+    this.setClearing(false);
   };
 
   // Export
diff --git a/chrome/browser/resources/options/deletable_item_list.js b/chrome/browser/resources/options/deletable_item_list.js
index 403dc0f..4f223ba 100644
--- a/chrome/browser/resources/options/deletable_item_list.js
+++ b/chrome/browser/resources/options/deletable_item_list.js
@@ -54,6 +54,8 @@
                                                 this.handleMouseDownUpOnClose_);
       this.closeButtonElement_.addEventListener('focus',
                                                 this.handleFocus_.bind(this));
+      this.closeButtonElement_.title =
+          loadTimeData.getString('deletableItemDeleteButtonTitle');
       this.appendChild(this.closeButtonElement_);
     },
 
diff --git a/chrome/browser/resources/options/hotword_confirm_overlay.css b/chrome/browser/resources/options/hotword_confirm_overlay.css
index 9df27a8..6fc7648 100644
--- a/chrome/browser/resources/options/hotword_confirm_overlay.css
+++ b/chrome/browser/resources/options/hotword_confirm_overlay.css
@@ -7,6 +7,6 @@
   width: 500px;
 }
 
-#feedback-bar input {
+#audio-logging-bar input {
   bottom: 6px;
 }
diff --git a/chrome/browser/resources/options/hotword_confirm_overlay.html b/chrome/browser/resources/options/hotword_confirm_overlay.html
index 366b85f..25a61b3 100644
--- a/chrome/browser/resources/options/hotword_confirm_overlay.html
+++ b/chrome/browser/resources/options/hotword_confirm_overlay.html
@@ -22,7 +22,7 @@
       </div>
     </div>
   </div>
-  <div id="feedback-bar" class="gray-bottom-bar checkbox">
+  <div id="audio-logging-bar" class="gray-bottom-bar checkbox">
     <span class="controlled-setting-with-label">
       <input id="hotword-audio-logging-enable"
           pref="hotword.audio_logging_enabled"
diff --git a/chrome/browser/resources/options/language_options.css b/chrome/browser/resources/options/language_options.css
index 8683cfd..07f968f 100644
--- a/chrome/browser/resources/options/language_options.css
+++ b/chrome/browser/resources/options/language_options.css
@@ -67,6 +67,7 @@
   -webkit-box-flex: 1;
   /* To share the center line with the left pane. */
   -webkit-margin-start: -1px;
+  overflow-y: auto;
 }
 
 #language-options-details h3:not(:first-of-type) {
diff --git a/chrome/browser/resources/options/manage_profile_overlay.css b/chrome/browser/resources/options/manage_profile_overlay.css
index 2d7596c..2ea31e0 100644
--- a/chrome/browser/resources/options/manage_profile_overlay.css
+++ b/chrome/browser/resources/options/manage_profile_overlay.css
@@ -7,14 +7,14 @@
 }
 
 .profile-icon-grid-item {
-  height: 31px;
+  height: 38px;
   margin: 2px 4px;
   padding: 4px;
   width: 38px;
 }
 
 .profile-icon {
-  height: 31px;
+  height: 38px;
   width: 38px;
 }
 
diff --git a/chrome/browser/resources/options/manage_profile_overlay.js b/chrome/browser/resources/options/manage_profile_overlay.js
index 3499079..1533fb5 100644
--- a/chrome/browser/resources/options/manage_profile_overlay.js
+++ b/chrome/browser/resources/options/manage_profile_overlay.js
@@ -378,6 +378,7 @@
                 OptionsPage.navigateToPage('managedUserImport');
               } else {
                 self.hideErrorBubble_('create');
+                CreateProfileOverlay.updateCreateInProgress(true);
                 chrome.send('createProfile',
                     [managedUser.name, managedUser.iconURL, false, true,
                         managedUser.id]);
diff --git a/chrome/browser/resources/options/sync_section.html b/chrome/browser/resources/options/sync_section.html
index 194d6e9..04f1a90 100644
--- a/chrome/browser/resources/options/sync_section.html
+++ b/chrome/browser/resources/options/sync_section.html
@@ -60,13 +60,6 @@
         i18n-content="manageAccountsButtonTitle">
     </button>
 </if>  <!-- chromeos -->
-    <div id="enable-auto-login-checkbox" class="checkbox" hidden>
-      <label>
-        <input id="enable-auto-login" pref="autologin.enabled"
-            metric="Options_Autologin" type="checkbox">
-        <span i18n-content="autologinEnabled"></span>
-      </label>
-    </div>
   </div>
 
 <if expr="not chromeos">
diff --git a/chrome/browser/resources/pdf/pdf.js b/chrome/browser/resources/pdf/pdf.js
index f8d0279..319f035 100644
--- a/chrome/browser/resources/pdf/pdf.js
+++ b/chrome/browser/resources/pdf/pdf.js
@@ -278,11 +278,13 @@
     this.toolbar_.style.bottom = toolbarBottom + 'px';
 
     // Update the page indicator.
-    this.pageIndicator_.index = this.viewport_.getMostVisiblePage() + 1;
-    if (this.documentDimensions_.pageDimensions.length > 1 && hasScrollbars.y)
+    this.pageIndicator_.index = this.viewport_.getMostVisiblePage();
+    if (this.documentDimensions_.pageDimensions.length > 1 &&
+        hasScrollbars.vertical) {
       this.pageIndicator_.style.visibility = 'visible';
-    else
+    } else {
       this.pageIndicator_.style.visibility = 'hidden';
+    }
 
     this.messagingHost_.viewportChanged();
 
diff --git a/chrome/browser/resources/print_preview/cloud_print_interface.js b/chrome/browser/resources/print_preview/cloud_print_interface.js
index 7190660..a31ecde 100644
--- a/chrome/browser/resources/print_preview/cloud_print_interface.js
+++ b/chrome/browser/resources/print_preview/cloud_print_interface.js
@@ -47,11 +47,12 @@
     this.userSessionIndex_ = {};
 
     /**
-     * Last received XSRF token. Sent as a parameter in every request.
-     * @type {string}
+     * Stores last received XSRF tokens for each user account. Sent as
+     * a parameter with every request.
+     * @type {!Object.<string, string>}
      * @private
      */
-    this.xsrfToken_ = '';
+    this.xsrfTokens_ = {};
 
     /**
      * Pending requests delayed until we get access token.
@@ -168,35 +169,33 @@
 
     /**
      * Sends Google Cloud Print search API request.
+     * @param {string=} opt_account Account the search is sent for. When
+     *      omitted, the search is done on behalf of the primary user.
      * @param {print_preview.Destination.Origin=} opt_origin When specified,
      *     searches destinations for {@code opt_origin} only, otherwise starts
      *     searches for all origins.
      */
-    search: function(opt_origin) {
+    search: function(opt_account, opt_origin) {
+      var account = opt_account || '';
       var origins =
           opt_origin && [opt_origin] || CloudPrintInterface.CLOUD_ORIGINS_;
-      // Terminate outstanding search requests for all requested origins.
-      this.outstandingCloudSearchRequests_ =
-          this.outstandingCloudSearchRequests_.filter(function(request) {
-            if (origins.indexOf(request.origin) >= 0) {
-              request.xhr.abort();
-              return false;
-            }
-            return true;
-          });
-      this.search_(true, origins);
-      this.search_(false, origins);
+      this.abortSearchRequests_(origins);
+      this.search_(true, account, origins);
+      this.search_(false, account, origins);
     },
 
     /**
      * Sends Google Cloud Print search API requests.
      * @param {boolean} isRecent Whether to search for only recently used
      *     printers.
+     * @param {string} account Account the search is sent for. It matters for
+     *     COOKIES origin only, and can be empty (sent on behalf of the primary
+     *     user in this case).
      * @param {!Array.<!print_preview.Destination.Origin>} origins Origins to
      *     search printers for.
      * @private
      */
-    search_: function(isRecent, origins) {
+    search_: function(isRecent, account, origins) {
       var params = [
         new HttpParam('connection_status', 'ALL'),
         new HttpParam('client', 'chrome'),
@@ -206,9 +205,13 @@
         params.push(new HttpParam('q', '^recent'));
       }
       origins.forEach(function(origin) {
-        var cpRequest =
-            this.buildRequest_('GET', 'search', params, origin,
-                               this.onSearchDone_.bind(this, isRecent));
+        var cpRequest = this.buildRequest_(
+            'GET',
+            'search',
+            params,
+            origin,
+            account,
+            this.onSearchDone_.bind(this, isRecent));
         this.outstandingCloudSearchRequests_.push(cpRequest);
         this.sendOrQueueRequest_(cpRequest);
       }, this);
@@ -241,9 +244,13 @@
                       '__google__chrome_version=' + chromeVersion),
         new HttpParam('tag', '__google__os=' + navigator.platform)
       ];
-      var cpRequest = this.buildRequest_('POST', 'submit', params,
-                                         destination.origin,
-                                         this.onSubmitDone_.bind(this));
+      var cpRequest = this.buildRequest_(
+          'POST',
+          'submit',
+          params,
+          destination.origin,
+          destination.account,
+          this.onSubmitDone_.bind(this));
       this.sendOrQueueRequest_(cpRequest);
     },
 
@@ -251,37 +258,46 @@
      * Sends a Google Cloud Print printer API request.
      * @param {string} printerId ID of the printer to lookup.
      * @param {!print_preview.Destination.Origin} origin Origin of the printer.
+     * @param {string=} account Account this printer is registered for. When
+     *     provided for COOKIES {@code origin}, and users sessions are still not
+     *     known, will be checked against the response (both success and failure
+     *     to get printer) and, if the active user account is not the one
+     *     requested, {@code account} is activated and printer request reissued.
      */
-    printer: function(printerId, origin) {
+    printer: function(printerId, origin, account) {
       var params = [
         new HttpParam('printerid', printerId),
         new HttpParam('use_cdd', 'true'),
         new HttpParam('printer_connection_status', 'true')
       ];
-      var cpRequest =
-          this.buildRequest_('GET', 'printer', params, origin,
-                             this.onPrinterDone_.bind(this, printerId));
-      this.sendOrQueueRequest_(cpRequest);
+      this.sendOrQueueRequest_(this.buildRequest_(
+          'GET',
+          'printer',
+          params,
+          origin,
+          account,
+          this.onPrinterDone_.bind(this, printerId)));
     },
 
     /**
      * Sends a Google Cloud Print update API request to accept (or reject) the
      * terms-of-service of the given printer.
-     * @param {string} printerId ID of the printer to accept the
-     *     terms-of-service for.
-     * @param {!print_preview.Destination.Origin} origin Origin of the printer.
-     * @param {boolean} isAccepted Whether the user accepted the
-     *     terms-of-service.
+     * @param {!print_preview.Destination} destination Destination to accept ToS
+     *     for.
+     * @param {boolean} isAccepted Whether the user accepted ToS or not.
      */
-    updatePrinterTosAcceptance: function(printerId, origin, isAccepted) {
+    updatePrinterTosAcceptance: function(destination, isAccepted) {
       var params = [
-        new HttpParam('printerid', printerId),
+        new HttpParam('printerid', destination.id),
         new HttpParam('is_tos_accepted', isAccepted)
       ];
-      var cpRequest =
-          this.buildRequest_('POST', 'update', params, origin,
-                             this.onUpdatePrinterTosAcceptanceDone_.bind(this));
-      this.sendOrQueueRequest_(cpRequest);
+      this.sendOrQueueRequest_(this.buildRequest_(
+          'POST',
+          'update',
+          params,
+          destination.origin,
+          destination.account,
+          this.onUpdatePrinterTosAcceptanceDone_.bind(this)));
     },
 
     /**
@@ -302,25 +318,28 @@
      * @param {Array.<!HttpParam>} params HTTP parameters to include in the
      *     request.
      * @param {!print_preview.Destination.Origin} origin Origin for destination.
+     * @param {?string} account Account the request is sent for. Can be
+     *     {@code null} or empty string if the request is not cookie bound or
+     *     is sent on behalf of the primary user.
      * @param {function(number, Object, !print_preview.Destination.Origin)}
      *     callback Callback to invoke when request completes.
      * @return {!CloudPrintRequest} Partially prepared request.
      * @private
      */
-    buildRequest_: function(method, action, params, origin, callback) {
+    buildRequest_: function(method, action, params, origin, account, callback) {
       var url = this.baseUrl_ + '/' + action + '?xsrf=';
       if (origin == print_preview.Destination.Origin.COOKIES) {
-        if (!this.xsrfToken_) {
+        var xsrfToken = this.xsrfTokens_[account];
+        if (!xsrfToken) {
           // TODO(rltoscano): Should throw an error if not a read-only action or
           // issue an xsrf token request.
         } else {
-          url = url + this.xsrfToken_;
+          url = url + xsrfToken;
         }
-        params = params || [];
-        if (this.userInfo_.activeUser) {
-          var index = this.userSessionIndex_[this.userInfo_.activeUser] || 0;
+        if (account) {
+          var index = this.userSessionIndex_[account] || 0;
           if (index > 0) {
-            params.push(new HttpParam('user', index));
+            url += '&user=' + index;
           }
         }
       }
@@ -356,7 +375,7 @@
         xhr.setRequestHeader(header, headers[header]);
       }
 
-      return new CloudPrintRequest(xhr, body, origin, callback);
+      return new CloudPrintRequest(xhr, body, origin, account, callback);
     },
 
     /**
@@ -407,6 +426,39 @@
     },
 
     /**
+     * Updates user info and session index from the {@code request} response.
+     * @param {!CloudPrintRequest} request Request to extract user info from.
+     * @private
+     */
+    setUsers_: function(request) {
+      if (request.origin == print_preview.Destination.Origin.COOKIES) {
+        var users = request.result['request']['users'] || [];
+        this.userSessionIndex_ = {};
+        for (var i = 0; i < users.length; i++) {
+          this.userSessionIndex_[users[i]] = i;
+        }
+        this.userInfo_.setUsers(request.result['request']['user'], users);
+      }
+    },
+
+    /**
+     * Terminates search requests for requested {@code origins}.
+     * @param {!Array.<print_preview.Destination.Origin>} origins Origins
+     *     to terminate search requests for.
+     * @private
+     */
+    abortSearchRequests_: function(origins) {
+      this.outstandingCloudSearchRequests_ =
+          this.outstandingCloudSearchRequests_.filter(function(request) {
+            if (origins.indexOf(request.origin) >= 0) {
+              request.xhr.abort();
+              return false;
+            }
+            return true;
+          });
+    },
+
+    /**
      * Called when a native layer receives access token.
      * @param {Event} evt Contains the authentication type and access token.
      * @private
@@ -424,7 +476,7 @@
                                        'Bearer ' + event.accessToken);
           this.sendRequest_(request);
         } else {  // No valid token.
-          // Without abort status does not exists.
+          // Without abort status does not exist.
           request.xhr.abort();
           request.callback(request);
         }
@@ -444,7 +496,8 @@
           request.result = JSON.parse(request.xhr.responseText);
           if (request.origin == print_preview.Destination.Origin.COOKIES &&
               request.result['success']) {
-            this.xsrfToken_ = request.result['xsrf_token'];
+            this.xsrfTokens_[request.result['request']['user']] =
+                request.result['xsrf_token'];
           }
         }
         request.status = request.xhr.status;
@@ -460,15 +513,24 @@
      * @private
      */
     onSearchDone_: function(isRecent, request) {
+      var lastRequestForThisOrigin = true;
       this.outstandingCloudSearchRequests_ =
           this.outstandingCloudSearchRequests_.filter(function(item) {
+            if (item != request && item.origin == request.origin) {
+              lastRequestForThisOrigin = false;
+            }
             return item != request;
           });
+      var activeUser = '';
+      if (request.origin == print_preview.Destination.Origin.COOKIES) {
+        activeUser =
+            request.result &&
+            request.result['request'] &&
+            request.result['request']['user'];
+      }
+      var event = null;
       if (request.xhr.status == 200 && request.result['success']) {
-        var activeUser = '';
-        if (request.origin == print_preview.Destination.Origin.COOKIES) {
-          activeUser = request.result['request']['user'];
-        }
+        // Extract printers.
         var printerListJson = request.result['printers'] || [];
         var printerList = [];
         printerListJson.forEach(function(printerJson) {
@@ -479,25 +541,21 @@
             console.error('Unable to parse cloud print destination: ' + err);
           }
         });
-        var searchDoneEvent =
-            new Event(CloudPrintInterface.EventType.SEARCH_DONE);
-        searchDoneEvent.printers = printerList;
-        searchDoneEvent.origin = request.origin;
-        searchDoneEvent.isRecent = isRecent;
-        if (request.origin == print_preview.Destination.Origin.COOKIES) {
-          var users = request.result['request']['users'] || [];
-          this.userSessionIndex_ = {};
-          for (var i = 0; i < users.length; i++) {
-            this.userSessionIndex_[users[i]] = i;
-          }
-          this.userInfo_.setUsers(activeUser, users);
-        }
-        this.dispatchEvent(searchDoneEvent);
+        // Extract and store users.
+        this.setUsers_(request);
+        // Dispatch SEARCH_DONE event.
+        event = new Event(CloudPrintInterface.EventType.SEARCH_DONE);
+        event.origin = request.origin;
+        event.printers = printerList;
+        event.isRecent = isRecent;
       } else {
-        var errorEvent = this.createErrorEvent_(
-            CloudPrintInterface.EventType.SEARCH_FAILED, request);
-        this.dispatchEvent(errorEvent);
+        event = this.createErrorEvent_(
+            CloudPrintInterface.EventType.SEARCH_FAILED,
+            request);
       }
+      event.user = activeUser;
+      event.searchDone = lastRequestForThisOrigin;
+      this.dispatchEvent(event);
     },
 
     /**
@@ -525,6 +583,29 @@
      * @private
      */
     onPrinterDone_: function(destinationId, request) {
+      // Special handling of the first printer request. It does not matter at
+      // this point, whether printer was found or not.
+      if (request.origin == print_preview.Destination.Origin.COOKIES &&
+          request.result &&
+          request.account &&
+          request.result['request']['user'] &&
+          request.result['request']['users'] &&
+          request.account != request.result['request']['user']) {
+        this.setUsers_(request);
+        // In case the user account is known, but not the primary one,
+        // activate it.
+        if (this.userSessionIndex_[request.account] > 0) {
+          this.userInfo_.activeUser = request.account;
+          // Repeat the request for the newly activated account.
+          this.printer(
+              request.result['request']['params']['printerid'],
+              request.origin,
+              request.account);
+          // Stop processing this request, wait for the new response.
+          return;
+        }
+      }
+      // Process response.
       if (request.xhr.status == 200 && request.result['success']) {
         var activeUser = '';
         if (request.origin == print_preview.Destination.Origin.COOKIES) {
@@ -574,11 +655,14 @@
    * @param {!XMLHttpRequest} xhr Partially prepared http request.
    * @param {string} body Data to send with POST requests.
    * @param {!print_preview.Destination.Origin} origin Origin for destination.
+   * @param {?string} account Account the request is sent for. Can be
+   *     {@code null} or empty string if the request is not cookie bound or
+   *     is sent on behalf of the primary user.
    * @param {function(!CloudPrintRequest)} callback Callback to invoke when
    *     request completes.
    * @constructor
    */
-  function CloudPrintRequest(xhr, body, origin, callback) {
+  function CloudPrintRequest(xhr, body, origin, account, callback) {
     /**
      * Partially prepared http request.
      * @type {!XMLHttpRequest}
@@ -598,6 +682,12 @@
     this.origin = origin;
 
     /**
+     * User account this request is expected to be executed for.
+     * @type {?string}
+     */
+    this.account = account;
+
+    /**
      * Callback to invoke when request completes.
      * @type {function(!CloudPrintRequest)}
      */
diff --git a/chrome/browser/resources/print_preview/data/app_state.js b/chrome/browser/resources/print_preview/data/app_state.js
index d706c74..360b771 100644
--- a/chrome/browser/resources/print_preview/data/app_state.js
+++ b/chrome/browser/resources/print_preview/data/app_state.js
@@ -35,6 +35,7 @@
   AppState.Field = {
     VERSION: 'version',
     SELECTED_DESTINATION_ID: 'selectedDestinationId',
+    SELECTED_DESTINATION_ACCOUNT: 'selectedDestinationAccount',
     SELECTED_DESTINATION_ORIGIN: 'selectedDestinationOrigin',
     SELECTED_DESTINATION_CAPABILITIES: 'selectedDestinationCapabilities',
     SELECTED_DESTINATION_NAME: 'selectedDestinationName',
@@ -72,6 +73,11 @@
       return this.state_[AppState.Field.SELECTED_DESTINATION_ID];
     },
 
+    /** @return {?string} Account the selected destination is registered for. */
+    get selectedDestinationAccount() {
+      return this.state_[AppState.Field.SELECTED_DESTINATION_ACCOUNT];
+    },
+
     /** @return {?string} Origin of the selected destination. */
     get selectedDestinationOrigin() {
       return this.state_[AppState.Field.SELECTED_DESTINATION_ORIGIN];
@@ -175,6 +181,7 @@
       if (!this.isInitialized_)
         return;
       this.state_[AppState.Field.SELECTED_DESTINATION_ID] = dest.id;
+      this.state_[AppState.Field.SELECTED_DESTINATION_ACCOUNT] = dest.account;
       this.state_[AppState.Field.SELECTED_DESTINATION_ORIGIN] = dest.origin;
       this.state_[AppState.Field.SELECTED_DESTINATION_CAPABILITIES] =
           dest.capabilities;
diff --git a/chrome/browser/resources/print_preview/data/destination_store.js b/chrome/browser/resources/print_preview/data/destination_store.js
index 06d227b..27769cc 100644
--- a/chrome/browser/resources/print_preview/data/destination_store.js
+++ b/chrome/browser/resources/print_preview/data/destination_store.js
@@ -69,24 +69,8 @@
     this.selectedDestination_ = null;
 
     /**
-     * Initial destination ID used to auto-select the first inserted destination
-     * that matches. If {@code null}, the first destination inserted into the
-     * store will be selected.
-     * @type {?string}
-     * @private
-     */
-    this.initialDestinationId_ = null;
-
-    /**
-     * Initial origin used to auto-select destination.
-     * @type {print_preview.Destination.Origin}
-     * @private
-     */
-    this.initialDestinationOrigin_ = print_preview.Destination.Origin.LOCAL;
-
-    /**
      * Whether the destination store will auto select the destination that
-     * matches the initial destination.
+     * matches the last used destination stored in appState_.
      * @type {boolean}
      * @private
      */
@@ -107,12 +91,12 @@
     this.cloudPrintInterface_ = null;
 
     /**
-     * Whether the destination store has already loaded or is loading all cloud
-     * destinations.
-     * @type {boolean}
+     * Maps user account to the list of origins for which destinations are
+     * already loaded.
+     * @type {!Object.<string, Array.<print_preview.Destination.Origin>>}
      * @private
      */
-    this.hasLoadedAllCloudDestinations_ = false;
+    this.loadedCloudOrigins_ = {};
 
     /**
      * ID of a timeout after the initial destination ID is set. If no inserted
@@ -242,11 +226,19 @@
     __proto__: cr.EventTarget.prototype,
 
     /**
-     * @return {!Array.<!print_preview.Destination>} List of destinations in
-     *     the store.
+     * @param {string=} opt_account Account to filter destinations by. When
+     *     omitted, all destinations are returned.
+     * @return {!Array.<!print_preview.Destination>} List of destinations
+     *     accessible by the {@code account}.
      */
-    get destinations() {
-      return this.destinations_.slice(0);
+    destinations: function(opt_account) {
+      if (opt_account) {
+        return this.destinations_.filter(function(destination) {
+          return !destination.account || destination.account == opt_account;
+        });
+      } else {
+        return this.destinations_.slice(0);
+      }
     },
 
     /**
@@ -281,33 +273,32 @@
      * @private
      */
     init: function() {
-      if (this.appState_.selectedDestinationId &&
-          this.appState_.selectedDestinationOrigin) {
-        this.initialDestinationId_ = this.appState_.selectedDestinationId;
-        this.initialDestinationOrigin_ =
-            this.appState_.selectedDestinationOrigin;
-      }
       this.isInAutoSelectMode_ = true;
-      if (!this.initialDestinationId_ || !this.initialDestinationOrigin_) {
+      if (!this.appState_.selectedDestinationId ||
+          !this.appState_.selectedDestinationOrigin) {
         this.onAutoSelectFailed_();
       } else {
-        var key = this.getDestinationKey_(this.initialDestinationOrigin_,
-                                          this.initialDestinationId_);
+        var key = this.getDestinationKey_(
+            this.appState_.selectedDestinationOrigin,
+            this.appState_.selectedDestinationId,
+            this.appState_.selectedDestinationAccount);
         var candidate = this.destinationMap_[key];
         if (candidate != null) {
           this.selectDestination(candidate);
-        } else if (this.initialDestinationOrigin_ ==
+        } else if (this.appState_.selectedDestinationOrigin ==
                    print_preview.Destination.Origin.LOCAL) {
           this.nativeLayer_.startGetLocalDestinationCapabilities(
-              this.initialDestinationId_);
+              this.appState_.selectedDestinationId);
         } else if (this.cloudPrintInterface_ &&
-                   (this.initialDestinationOrigin_ ==
-                    print_preview.Destination.Origin.COOKIES ||
-                    this.initialDestinationOrigin_ ==
-                    print_preview.Destination.Origin.DEVICE)) {
-          this.cloudPrintInterface_.printer(this.initialDestinationId_,
-                                            this.initialDestinationOrigin_);
-        } else if (this.initialDestinationOrigin_ ==
+                   (this.appState_.selectedDestinationOrigin ==
+                        print_preview.Destination.Origin.COOKIES ||
+                    this.appState_.selectedDestinationOrigin ==
+                        print_preview.Destination.Origin.DEVICE)) {
+          this.cloudPrintInterface_.printer(
+              this.appState_.selectedDestinationId,
+              this.appState_.selectedDestinationOrigin,
+              this.appState_.selectedDestinationAccount);
+        } else if (this.appState_.selectedDestinationOrigin ==
                    print_preview.Destination.Origin.PRIVET) {
           // TODO(noamsml): Resolve a specific printer instead of listing all
           // privet printers in this case.
@@ -319,7 +310,7 @@
           // destination store. When the real destination is created, this
           // destination will be overwritten.
           this.selectedDestination_ = new print_preview.Destination(
-              this.initialDestinationId_,
+              this.appState_.selectedDestinationId,
               print_preview.Destination.Type.LOCAL,
               print_preview.Destination.Origin.PRIVET,
               destinationName,
@@ -352,7 +343,7 @@
       this.tracker_.add(
           this.cloudPrintInterface_,
           cloudprint.CloudPrintInterface.EventType.SEARCH_FAILED,
-          this.onCloudPrintSearchFailed_.bind(this));
+          this.onCloudPrintSearchDone_.bind(this));
       this.tracker_.add(
           this.cloudPrintInterface_,
           cloudprint.CloudPrintInterface.EventType.PRINTER_DONE,
@@ -368,6 +359,7 @@
      *     loaded.
      */
     hasOnlyDefaultCloudDestinations: function() {
+      // TODO: Move the logic to print_preview.
       return this.destinations_.every(function(dest) {
         return dest.isLocal ||
             dest.id == print_preview.Destination.GooglePromotedId.DOCS ||
@@ -377,30 +369,34 @@
 
     /** @param {!print_preview.Destination} Destination to select. */
     selectDestination: function(destination) {
+      this.isInAutoSelectMode_ = false;
+      this.cancelAutoSelectTimeout_();
+      if (destination == this.selectedDestination_) {
+        return;
+      }
+      if (destination == null) {
+        this.selectedDestination_ = null;
+        cr.dispatchSimpleEvent(
+            this, DestinationStore.EventType.DESTINATION_SELECT);
+        return;
+      }
+      // Update and persist selected destination.
       this.selectedDestination_ = destination;
       this.selectedDestination_.isRecent = true;
-      this.isInAutoSelectMode_ = false;
-      if (this.autoSelectTimeout_ != null) {
-        clearTimeout(this.autoSelectTimeout_);
-        this.autoSelectTimeout_ = null;
-      }
       if (destination.id == print_preview.Destination.GooglePromotedId.FEDEX &&
           !destination.isTosAccepted) {
         assert(this.cloudPrintInterface_ != null,
-               'Selected FedEx Office destination, but Google Cloud Print is ' +
-               'not enabled');
+               'Selected FedEx destination, but GCP API is not available');
         destination.isTosAccepted = true;
-        this.cloudPrintInterface_.updatePrinterTosAcceptance(destination.id,
-                                                             destination.origin,
-                                                             true);
+        this.cloudPrintInterface_.updatePrinterTosAcceptance(destination, true);
       }
       this.appState_.persistSelectedDestination(this.selectedDestination_);
-
+      // Adjust metrics.
       if (destination.cloudID &&
-          this.destinations.some(function(otherDestination) {
+          this.destinations_.some(function(otherDestination) {
             return otherDestination.cloudID == destination.cloudID &&
                 otherDestination != destination;
-            })) {
+          })) {
         if (destination.isPrivet) {
           this.metrics_.incrementDestinationSearchBucket(
               print_preview.Metrics.DestinationSearchBucket.
@@ -411,9 +407,10 @@
                   CLOUD_DUPLICATE_SELECTED);
         }
       }
-
+      // Notify about selected destination change.
       cr.dispatchSimpleEvent(
           this, DestinationStore.EventType.DESTINATION_SELECT);
+      // Request destination capabilities, of not known yet.
       if (destination.capabilities == null) {
         if (destination.isPrivet) {
           this.nativeLayer_.startGetPrivetDestinationCapabilities(
@@ -424,10 +421,9 @@
               destination.id);
         } else {
           assert(this.cloudPrintInterface_ != null,
-                 'Selected destination is a cloud destination, but Google ' +
-                 'Cloud Print is not enabled');
-          this.cloudPrintInterface_.printer(destination.id,
-                                            destination.origin);
+                 'Cloud destination selected, but GCP is not enabled');
+          this.cloudPrintInterface_.printer(
+              destination.id, destination.origin, destination.account);
         }
       } else {
         cr.dispatchSimpleEvent(
@@ -437,78 +433,16 @@
     },
 
     /**
-     * Inserts a print destination to the data store and dispatches a
-     * DESTINATIONS_INSERTED event. If the destination matches the initial
-     * destination ID, then the destination will be automatically selected.
-     * @param {!print_preview.Destination} destination Print destination to
-     *     insert.
+     * Selects 'Save to PDF' destination (since it always exists).
+     * @private
      */
-    insertDestination: function(destination) {
-      if (this.insertDestination_(destination)) {
-        cr.dispatchSimpleEvent(
-            this, DestinationStore.EventType.DESTINATIONS_INSERTED);
-        if (this.isInAutoSelectMode_ &&
-            this.matchInitialDestination_(destination.id, destination.origin)) {
-          this.selectDestination(destination);
-        }
-      }
-    },
-
-    /**
-     * Inserts multiple print destinations to the data store and dispatches one
-     * DESTINATIONS_INSERTED event. If any of the destinations match the initial
-     * destination ID, then that destination will be automatically selected.
-     * @param {!Array.<print_preview.Destination>} destinations Print
-     *     destinations to insert.
-     */
-    insertDestinations: function(destinations) {
-      var insertedDestination = false;
-      var destinationToAutoSelect = null;
-      destinations.forEach(function(dest) {
-        if (this.insertDestination_(dest)) {
-          insertedDestination = true;
-          if (this.isInAutoSelectMode_ &&
-              destinationToAutoSelect == null &&
-              this.matchInitialDestination_(dest.id, dest.origin)) {
-            destinationToAutoSelect = dest;
-          }
-        }
-      }, this);
-      if (insertedDestination) {
-        cr.dispatchSimpleEvent(
-            this, DestinationStore.EventType.DESTINATIONS_INSERTED);
-      }
-      if (destinationToAutoSelect != null) {
-        this.selectDestination(destinationToAutoSelect);
-      }
-    },
-
-    /**
-     * Updates an existing print destination with capabilities and display name
-     * information. If the destination doesn't already exist, it will be added.
-     * @param {!print_preview.Destination} destination Destination to update.
-     * @return {!print_preview.Destination} The existing destination that was
-     *     updated or {@code null} if it was the new destination.
-     */
-    updateDestination: function(destination) {
-      assert(destination.constructor !== Array, 'Single printer expected');
-      var key = this.getDestinationKey_(destination.origin, destination.id);
-      var existingDestination = this.destinationMap_[key];
-      if (existingDestination != null) {
-        existingDestination.capabilities = destination.capabilities;
-      } else {
-        this.insertDestination(destination);
-      }
-
-      if (existingDestination == this.selectedDestination_ ||
-          destination == this.selectedDestination_) {
-        this.appState_.persistSelectedDestination(this.selectedDestination_);
-        cr.dispatchSimpleEvent(
-            this,
-            DestinationStore.EventType.SELECTED_DESTINATION_CAPABILITIES_READY);
-      }
-
-      return existingDestination;
+    selectDefaultDestination_: function() {
+      var destination = this.destinationMap_[this.getDestinationKey_(
+          print_preview.Destination.Origin.LOCAL,
+          print_preview.Destination.GooglePromotedId.SAVE_AS_PDF,
+          '')] || null;
+      assert(destination != null, 'Save to PDF printer not found');
+      this.selectDestination(destination);
     },
 
     /** Initiates loading of local print destinations. */
@@ -541,12 +475,27 @@
      *     for the specified origin only.
      */
     startLoadCloudDestinations: function(opt_origin) {
-      if (this.cloudPrintInterface_ != null &&
-          !this.hasLoadedAllCloudDestinations_) {
-        this.hasLoadedAllCloudDestinations_ = true;
-        this.cloudPrintInterface_.search(opt_origin);
+      if (this.cloudPrintInterface_ != null) {
+        var origins = this.loadedCloudOrigins_[this.userInfo_.activeUser] || [];
+        if (origins.length == 0 ||
+            (opt_origin && origins.indexOf(opt_origin) < 0)) {
+          this.cloudPrintInterface_.search(
+              this.userInfo_.activeUser, opt_origin);
+          cr.dispatchSimpleEvent(
+              this, DestinationStore.EventType.DESTINATION_SEARCH_STARTED);
+        }
+      }
+    },
+
+    /** Requests load of COOKIE based cloud destinations. */
+    reloadUserCookieBasedDestinations: function() {
+      var origins = this.loadedCloudOrigins_[this.userInfo_.activeUser] || [];
+      if (origins.indexOf(print_preview.Destination.Origin.COOKIES) >= 0) {
         cr.dispatchSimpleEvent(
-            this, DestinationStore.EventType.DESTINATION_SEARCH_STARTED);
+            this, DestinationStore.EventType.DESTINATION_SEARCH_DONE);
+      } else {
+        this.startLoadCloudDestinations(
+            print_preview.Destination.Origin.COOKIES);
       }
     },
 
@@ -559,6 +508,87 @@
     },
 
     /**
+     * Inserts {@code destination} to the data store and dispatches a
+     * DESTINATIONS_INSERTED event.
+     * @param {!print_preview.Destination} destination Print destination to
+     *     insert.
+     * @private
+     */
+    insertDestination_: function(destination) {
+      if (this.insertIntoStore_(destination)) {
+        this.destinationsInserted_(destination);
+      }
+    },
+
+    /**
+     * Inserts multiple {@code destinations} to the data store and dispatches
+     * single DESTINATIONS_INSERTED event.
+     * @param {!Array.<print_preview.Destination>} destinations Print
+     *     destinations to insert.
+     * @private
+     */
+    insertDestinations_: function(destinations) {
+      var inserted = false;
+      destinations.forEach(function(destination) {
+        inserted = this.insertIntoStore_(destination) || inserted;
+      }, this);
+      if (inserted) {
+        this.destinationsInserted_();
+      }
+    },
+
+    /**
+     * Dispatches DESTINATIONS_INSERTED event. In auto select mode, tries to
+     * update selected destination to match {@code appState_} settings.
+     * @param {print_preview.Destination=} opt_destination The only destination
+     *     that was changed or skipped if possibly more than one destination was
+     *     changed. Used as a hint to limit destination search scope in
+     *     {@code isInAutoSelectMode_).
+     */
+    destinationsInserted_: function(opt_destination) {
+      cr.dispatchSimpleEvent(
+          this, DestinationStore.EventType.DESTINATIONS_INSERTED);
+      if (this.isInAutoSelectMode_) {
+        var destinationsToSearch =
+            opt_destination && [opt_destination] || this.destinations_;
+        destinationsToSearch.some(function(destination) {
+          if (this.matchPersistedDestination_(destination)) {
+            this.selectDestination(destination);
+            return true;
+          }
+        }, this);
+      }
+    },
+
+    /**
+     * Updates an existing print destination with capabilities and display name
+     * information. If the destination doesn't already exist, it will be added.
+     * @param {!print_preview.Destination} destination Destination to update.
+     * @return {!print_preview.Destination} The existing destination that was
+     *     updated or {@code null} if it was the new destination.
+     * @private
+     */
+    updateDestination_: function(destination) {
+      assert(destination.constructor !== Array, 'Single printer expected');
+      var existingDestination = this.destinationMap_[this.getKey_(destination)];
+      if (existingDestination != null) {
+        existingDestination.capabilities = destination.capabilities;
+      } else {
+        this.insertDestination_(destination);
+      }
+
+      if (existingDestination == this.selectedDestination_ ||
+          destination == this.selectedDestination_) {
+        this.appState_.persistSelectedDestination(this.selectedDestination_);
+        cr.dispatchSimpleEvent(
+            this,
+            DestinationStore.EventType.SELECTED_DESTINATION_CAPABILITIES_READY);
+      }
+
+      return existingDestination;
+    },
+
+    /**
      * Called when the search for Privet printers is done.
      * @private
      */
@@ -576,8 +606,8 @@
      *     store.
      * @private
      */
-    insertDestination_: function(destination) {
-      var key = this.getDestinationKey_(destination.origin, destination.id);
+    insertIntoStore_: function(destination) {
+      var key = this.getKey_(destination);
       var existingDestination = this.destinationMap_[key];
       if (existingDestination == null) {
         this.destinations_.push(destination);
@@ -623,10 +653,6 @@
           this.nativeLayer_,
           print_preview.NativeLayer.EventType.PRIVET_CAPABILITIES_SET,
           this.onPrivetCapabilitiesSet_.bind(this));
-      this.tracker_.add(
-          this.userInfo_,
-          print_preview.UserInfo.EventType.ACTIVE_USER_CHANGED,
-          this.onActiveUserChanged_.bind(this));
     },
 
     /**
@@ -636,57 +662,34 @@
     reset_: function() {
       this.destinations_ = [];
       this.destinationMap_ = {};
-      this.selectedDestination_ = null;
-      this.hasLoadedAllCloudDestinations_ = false;
+      this.selectDestination(null);
+      this.loadedCloudOrigins_ = {};
       this.hasLoadedAllLocalDestinations_ = false;
-      this.insertDestination(
+      this.insertDestination_(
           DestinationStore.createLocalPdfPrintDestination_());
       this.resetAutoSelectTimeout_();
     },
 
     /**
-     * Resets the state of the destination store to its initial state.
-     * @private
-     */
-    resetCookiesDestinations_: function() {
-      // Forget all cookies based destinations.
-      this.destinations_ = this.destinations_.filter(function(destination) {
-        if (destination.origin == print_preview.Destination.Origin.COOKIES) {
-          delete this.destinationMap_[
-              this.getDestinationKey_(destination.origin, destination.id)];
-          return false;
-        }
-        return true;
-      }, this);
-      // Reset selected destination, if necessary.
-      if (this.selectedDestination_ &&
-          this.selectedDestination_.origin ==
-              print_preview.Destination.Origin.COOKIES) {
-        this.selectedDestination_ = null;
-      }
-      this.hasLoadedAllCloudDestinations_ = false;
-      this.resetAutoSelectTimeout_();
-    },
-
-    /**
      * Resets destination auto selection timeout.
      * @private
      */
     resetAutoSelectTimeout_: function() {
+      this.cancelAutoSelectTimeout_();
       this.autoSelectTimeout_ =
           setTimeout(this.onAutoSelectFailed_.bind(this),
                      DestinationStore.AUTO_SELECT_TIMEOUT_);
     },
 
     /**
-     * Called when active user changes. Resets cookie based destinations
-     * and starts loading cloud destinations for the active user.
+     * Cancels destination auto selection timeout.
      * @private
      */
-    onActiveUserChanged_: function() {
-      this.resetCookiesDestinations_();
-      this.isInAutoSelectMode_ = true;
-      this.startLoadCloudDestinations(print_preview.Destination.Origin.COOKIES);
+    cancelAutoSelectTimeout_: function() {
+      if (this.autoSelectTimeout_ != null) {
+        clearTimeout(this.autoSelectTimeout_);
+        this.autoSelectTimeout_ = null;
+      }
     },
 
     /**
@@ -698,7 +701,7 @@
       var localDestinations = event.destinationInfos.map(function(destInfo) {
         return print_preview.LocalDestinationParser.parse(destInfo);
       });
-      this.insertDestinations(localDestinations);
+      this.insertDestinations_(localDestinations);
       this.isLocalDestinationSearchInProgress_ = false;
       cr.dispatchSimpleEvent(
           this, DestinationStore.EventType.DESTINATION_SEARCH_DONE);
@@ -715,9 +718,10 @@
      */
     onLocalDestinationCapabilitiesSet_: function(event) {
       var destinationId = event.settingsInfo['printerId'];
-      var key =
-          this.getDestinationKey_(print_preview.Destination.Origin.LOCAL,
-                                  destinationId);
+      var key = this.getDestinationKey_(
+          print_preview.Destination.Origin.LOCAL,
+          destinationId,
+          '');
       var destination = this.destinationMap_[key];
       var capabilities = print_preview.LocalCapabilitiesParser.parse(
             event.settingsInfo);
@@ -735,7 +739,7 @@
         destination = print_preview.LocalDestinationParser.parse(
             {deviceName: destinationId, printerName: destinationId});
         destination.capabilities = capabilities;
-        this.insertDestination(destination);
+        this.insertDestination_(destination);
       }
       if (this.selectedDestination_ &&
           this.selectedDestination_.id == destinationId) {
@@ -756,33 +760,28 @@
       console.error('Failed to get print capabilities for printer ' +
                     event.destinationId);
       if (this.isInAutoSelectMode_ &&
-          this.matchInitialDestinationStrict_(event.destinationId,
-                                              event.destinationOrigin)) {
-        assert(this.destinations_.length > 0,
-               'No destinations were loaded when failed to get initial ' +
-               'destination');
-        this.selectDestination(this.destinations_[0]);
+          this.sameAsPersistedDestination_(event.destinationId,
+                                           event.destinationOrigin)) {
+        this.selectDefaultDestination_();
       }
     },
 
     /**
-     * Called when the /search call completes. Adds the fetched destinations to
-     * the destination store.
-     * @param {Event} event Contains the fetched destinations.
+     * Called when the /search call completes, either successfully or not.
+     * In case of success, stores fetched destinations.
+     * @param {Event} event Contains the request result.
      * @private
      */
     onCloudPrintSearchDone_: function(event) {
-      this.insertDestinations(event.printers);
-      cr.dispatchSimpleEvent(
-          this, DestinationStore.EventType.DESTINATION_SEARCH_DONE);
-    },
-
-    /**
-     * Called when the /search call fails. Updates outstanding request count and
-     * dispatches CLOUD_DESTINATIONS_LOADED event.
-     * @private
-     */
-    onCloudPrintSearchFailed_: function() {
+      if (event.printers) {
+        this.insertDestinations_(event.printers);
+      }
+      if (event.searchDone) {
+        var origins = this.loadedCloudOrigins_[event.user] || [];
+        if (origins.indexOf(event.origin) < 0) {
+          this.loadedCloudOrigins_[event.user] = origins.concat([event.origin]);
+        }
+      }
       cr.dispatchSimpleEvent(
           this, DestinationStore.EventType.DESTINATION_SEARCH_DONE);
     },
@@ -795,7 +794,7 @@
      * @private
      */
     onCloudPrintPrinterDone_: function(event) {
-      this.updateDestination(event.printer);
+      this.updateDestination_(event.printer);
     },
 
     /**
@@ -808,13 +807,11 @@
      */
     onCloudPrintPrinterFailed_: function(event) {
       if (this.isInAutoSelectMode_ &&
-          this.matchInitialDestinationStrict_(event.destinationId,
-                                              event.destinationOrigin)) {
-        console.error('Could not find initial printer: ' + event.destinationId);
-        assert(this.destinations_.length > 0,
-               'No destinations were loaded when failed to get initial ' +
-               'destination');
-        this.selectDestination(this.destinations_[0]);
+          this.sameAsPersistedDestination_(event.destinationId,
+                                           event.destinationOrigin)) {
+        console.error(
+            'Failed to fetch last used printer caps: ' + event.destinationId);
+        this.selectDefaultDestination_();
       }
     },
 
@@ -829,7 +826,7 @@
         this.waitForRegisterDestination_ = null;
         this.onDestinationsReload_();
       } else {
-        this.insertDestinations(
+        this.insertDestinations_(
             print_preview.PrivetDestinationParser.parse(event.printer));
       }
     },
@@ -845,7 +842,7 @@
           print_preview.PrivetDestinationParser.parse(event.printer);
       destinations.forEach(function(dest) {
         dest.capabilities = event.capabilities;
-        this.updateDestination(dest);
+        this.updateDestination_(dest);
       }, this);
     },
 
@@ -867,10 +864,8 @@
      * @private
      */
     onAutoSelectFailed_: function() {
-      this.autoSelectTimeout_ = null;
-      assert(this.destinations_.length > 0,
-             'No destinations were loaded before auto-select timeout expired');
-      this.selectDestination(this.destinations_[0]);
+      this.cancelAutoSelectTimeout_();
+      this.selectDefaultDestination_();
     },
 
     // TODO(vitalybuka): Remove three next functions replacing Destination.id
@@ -878,23 +873,35 @@
     /**
      * Returns key to be used with {@code destinationMap_}.
      * @param {!print_preview.Destination.Origin} origin Destination origin.
-     * @return {!string} id Destination id.
+     * @return {string} id Destination id.
+     * @return {string} account User account destination is registered for.
      * @private
      */
-    getDestinationKey_: function(origin, id) {
-      return origin + '/' + id;
+    getDestinationKey_: function(origin, id, account) {
+      return origin + '/' + id + '/' + account;
     },
 
     /**
-     * @param {?string} id Id of the destination.
-     * @param {?string} origin Oring of the destination.
-     * @return {boolean} Whether a initial destination matches provided.
+     * Returns key to be used with {@code destinationMap_}.
+     * @param {!print_preview.Destination} destination Destination.
      * @private
      */
-    matchInitialDestination_: function(id, origin) {
-      return this.initialDestinationId_ == null ||
-             this.initialDestinationOrigin_ == null ||
-             this.matchInitialDestinationStrict_(id, origin);
+    getKey_: function(destination) {
+      return this.getDestinationKey_(
+          destination.origin, destination.id, destination.account);
+    },
+
+    /**
+     * @param {!print_preview.Destination} destination Destination to match.
+     * @return {boolean} Whether {@code destination} matches the last user
+     *     selected one.
+     * @private
+     */
+    matchPersistedDestination_: function(destination) {
+      return !this.appState_.selectedDestinationId ||
+             !this.appState_.selectedDestinationOrigin ||
+             this.sameAsPersistedDestination_(
+                 destination.id, destination.origin);
     },
 
     /**
@@ -903,9 +910,9 @@
      * @return {boolean} Whether destination is the same as initial.
      * @private
      */
-    matchInitialDestinationStrict_: function(id, origin) {
-      return id == this.initialDestinationId_ &&
-             origin == this.initialDestinationOrigin_;
+    sameAsPersistedDestination_: function(id, origin) {
+      return id == this.appState_.selectedDestinationId &&
+             origin == this.appState_.selectedDestinationOrigin;
     }
   };
 
diff --git a/chrome/browser/resources/print_preview/data/user_info.js b/chrome/browser/resources/print_preview/data/user_info.js
index 354542c..88967ce 100644
--- a/chrome/browser/resources/print_preview/data/user_info.js
+++ b/chrome/browser/resources/print_preview/data/user_info.js
@@ -23,10 +23,10 @@
 
     /**
      * Email addresses of the logged in users or empty array if no user is
-     * logged in.
-     * @private {!Array.<string>}
+     * logged in. {@code null} if not known yet.
+     * @private {?Array.<string>}
      */
-    this.users_ = [];
+    this.users_ = null;
   };
 
   /**
@@ -41,6 +41,16 @@
   UserInfo.prototype = {
     __proto__: cr.EventTarget.prototype,
 
+    /** @return {boolean} Whether user accounts are already retrieved. */
+    get initialized() {
+      return this.users_ != null;
+    },
+
+    /** @return {boolean} Whether user is logged in or not. */
+    get loggedIn() {
+      return !!this.activeUser;
+    },
+
     /**
      * @return {?string} Email address of the logged in user or {@code null} if
      *     no user is logged.
@@ -57,10 +67,9 @@
       }
     },
 
-
     /**
-     * @return {!Array.<string>} Email addresses of the logged in users or
-     *     empty array if no user is logged in.
+     * @return {?Array.<string>} Email addresses of the logged in users or
+     *     empty array if no user is logged in. {@code null} if not known yet.
      */
     get users() {
       return this.users_;
@@ -68,7 +77,7 @@
 
     /**
      * Sets logged in user accounts info.
-     * @param {string} user Currently logged in user (email).
+     * @param {string} activeUser Active user account (email).
      * @param {!Array.<string>} users List of currently logged in accounts.
      */
     setUsers: function(activeUser, users) {
diff --git a/chrome/browser/resources/print_preview/print_header.js b/chrome/browser/resources/print_preview/print_header.js
index fdeea11..7c0107d 100644
--- a/chrome/browser/resources/print_preview/print_header.js
+++ b/chrome/browser/resources/print_preview/print_header.js
@@ -132,6 +132,7 @@
      */
     updatePrintButtonEnabledState_: function() {
       this.getChildElement('button.print').disabled =
+          this.destinationStore_.selectedDestination == null ||
           !this.isEnabled_ ||
           !this.isPrintButtonEnabled_ ||
           !this.printTicketStore_.isTicketValid();
@@ -222,14 +223,16 @@
      * @private
      */
     onDestinationSelect_: function() {
-      var isSaveLabel = this.destinationStore_.selectedDestination.id ==
-          print_preview.Destination.GooglePromotedId.SAVE_AS_PDF ||
-          this.destinationStore_.selectedDestination.id ==
-              print_preview.Destination.GooglePromotedId.DOCS;
-      this.getChildElement('button.print').textContent = isSaveLabel ?
-          localStrings.getString('saveButton') :
-          localStrings.getString('printButton');
-      this.getChildElement('button.print').focus();
+      var isSaveLabel = this.destinationStore_.selectedDestination &&
+          (this.destinationStore_.selectedDestination.id ==
+               print_preview.Destination.GooglePromotedId.SAVE_AS_PDF ||
+           this.destinationStore_.selectedDestination.id ==
+               print_preview.Destination.GooglePromotedId.DOCS);
+      this.getChildElement('button.print').textContent =
+          localStrings.getString(isSaveLabel ? 'saveButton' : 'printButton');
+      if (this.destinationStore_.selectedDestination) {
+        this.getChildElement('button.print').focus();
+      }
     },
 
     /**
diff --git a/chrome/browser/resources/print_preview/print_preview.js b/chrome/browser/resources/print_preview/print_preview.js
index ee2f46d..712e5cc 100644
--- a/chrome/browser/resources/print_preview/print_preview.js
+++ b/chrome/browser/resources/print_preview/print_preview.js
@@ -785,6 +785,7 @@
 
       if (e.keyCode == 13 /*enter*/ &&
           !this.destinationSearch_.getIsVisible() &&
+          this.destinationStore_.selectedDestination &&
           this.printTicketStore_.isTicketValid()) {
         assert(this.uiState_ == PrintPreview.UiState_.READY,
             'Trying to print when not in ready state: ' + this.uiState_);
@@ -899,9 +900,10 @@
      */
     onDestinationSelect_: function() {
       var selectedDest = this.destinationStore_.selectedDestination;
-      setIsVisible($('cloud-print-dialog-link'),
-                   !cr.isChromeOS && !selectedDest.isLocal);
-      if (this.isInKioskAutoPrintMode_) {
+      setIsVisible(
+          $('cloud-print-dialog-link'),
+          selectedDest && !cr.isChromeOS && !selectedDest.isLocal);
+      if (selectedDest && this.isInKioskAutoPrintMode_) {
         this.onPrintButtonClick_();
       }
     },
diff --git a/chrome/browser/resources/print_preview/search/destination_search.js b/chrome/browser/resources/print_preview/search/destination_search.js
index 71f0201..9d25c35 100644
--- a/chrome/browser/resources/print_preview/search/destination_search.js
+++ b/chrome/browser/resources/print_preview/search/destination_search.js
@@ -147,6 +147,9 @@
               print_preview.Metrics.DestinationSearchBucket.
                   CLOUDPRINT_PROMO_SHOWN);
         }
+        if (this.userInfo_.initialized) {
+          this.onUsersChanged_();
+        }
         this.reflowLists_();
       } else {
         this.getElement().classList.add('transparent');
@@ -224,7 +227,7 @@
       this.tracker.add(
           this.destinationStore_,
           print_preview.DestinationStore.EventType.DESTINATION_SEARCH_DONE,
-          this.updateThrobbers_.bind(this));
+          this.onDestinationSearchDone_.bind(this));
 
       this.tracker.add(
           this.localList_,
@@ -312,7 +315,9 @@
       var cloudDestinations = [];
       var unregisteredCloudDestinations = [];
 
-      this.destinationStore_.destinations.forEach(function(destination) {
+      var destinations =
+          this.destinationStore_.destinations(this.userInfo_.activeUser);
+      destinations.forEach(function(destination) {
         if (destination.isRecent) {
           recentDestinations.push(destination);
         }
@@ -408,18 +413,16 @@
       this.reflowLists_();
     },
 
-
     /**
-     * Updates the account selection UI.
-     * @param {string} email Email of the logged in user.
-     * @param {!Array.<string>} accounts List of logged in user accounts.
+     * Called when user's logged in accounts change. Updates the UI.
+     * @private
      */
-    setAccounts_: function(email, accounts) {
-      var loggedIn = !!email;
+    onUsersChanged_: function() {
+      var loggedIn = this.userInfo_.loggedIn;
       if (loggedIn) {
         var accountSelectEl = this.getChildElement('.account-select');
         accountSelectEl.innerHTML = '';
-        accounts.forEach(function(account) {
+        this.userInfo_.users.forEach(function(account) {
           var option = document.createElement('option');
           option.text = account;
           option.value = account;
@@ -430,7 +433,8 @@
         option.value = '';
         accountSelectEl.add(option);
 
-        accountSelectEl.selectedIndex = accounts.indexOf(email);
+        accountSelectEl.selectedIndex =
+            this.userInfo_.users.indexOf(this.userInfo_.activeUser);
       }
 
       setIsVisible(this.getChildElement('.user-info'), loggedIn);
@@ -480,7 +484,8 @@
      * @private
      */
     onDestinationStoreSelect_: function() {
-      var destinations = this.destinationStore_.destinations;
+      var destinations =
+          this.destinationStore_.destinations(this.userInfo_.activeUser);
       var recentDestinations = [];
       destinations.forEach(function(destination) {
         if (destination.isRecent) {
@@ -502,6 +507,17 @@
     },
 
     /**
+     * Called when destinations are inserted into the store. Rerenders
+     * destinations.
+     * @private
+     */
+    onDestinationSearchDone_: function() {
+      this.updateThrobbers_();
+      this.renderDestinations_();
+      this.reflowLists_();
+    },
+
+    /**
      * Called when the manage cloud printers action is activated.
      * @private
      */
@@ -543,6 +559,7 @@
           accountSelectEl.options[accountSelectEl.selectedIndex].value;
       if (account) {
         this.userInfo_.activeUser = account;
+        this.destinationStore_.reloadUserCookieBasedDestinations();
       } else {
         cr.dispatchSimpleEvent(this, DestinationSearch.EventType.ADD_ACCOUNT);
         // Set selection back to the active user.
@@ -584,14 +601,6 @@
     },
 
     /**
-     * Called when user's logged in accounts change. Updates the UI.
-     * @private
-     */
-    onUsersChanged_: function() {
-      this.setAccounts_(this.userInfo_.activeUser, this.userInfo_.users);
-    },
-
-    /**
      * Called when the window is resized. Reflows layout of destination lists.
      * @private
      */
diff --git a/chrome/browser/resources/print_preview/settings/destination_settings.js b/chrome/browser/resources/print_preview/settings/destination_settings.js
index aa18681..c901be1 100644
--- a/chrome/browser/resources/print_preview/settings/destination_settings.js
+++ b/chrome/browser/resources/print_preview/settings/destination_settings.js
@@ -106,38 +106,42 @@
      * @private
      */
     onDestinationSelect_: function() {
-      var destination = this.destinationStore_.selectedDestination;
-      var nameEl = this.getElement().getElementsByClassName(
-          DestinationSettings.Classes_.NAME)[0];
-      nameEl.textContent = destination.displayName;
-      nameEl.title = destination.displayName;
-
-      var iconEl = this.getElement().getElementsByClassName(
-          DestinationSettings.Classes_.ICON)[0];
-      iconEl.src = destination.iconUrl;
-
-      var hint = destination.hint;
-      var locationEl = this.getElement().getElementsByClassName(
-          DestinationSettings.Classes_.LOCATION)[0];
-      locationEl.textContent = hint;
-      locationEl.title = hint;
-
-      var offlineStatusText = destination.offlineStatusText;
-      var offlineStatusEl =
-          this.getChildElement('.destination-settings-offline-status');
-      offlineStatusEl.textContent = offlineStatusText;
-      offlineStatusEl.title = offlineStatusText;
-
-      var isOffline = destination.isOffline;
       var destinationSettingsBoxEl =
           this.getChildElement('.destination-settings-box');
-      destinationSettingsBoxEl.classList.toggle(
-          DestinationSettings.Classes_.STALE, isOffline);
-      setIsVisible(locationEl, !isOffline);
-      setIsVisible(offlineStatusEl, isOffline);
 
-      setIsVisible(this.getChildElement('.throbber-container'), false);
-      setIsVisible(destinationSettingsBoxEl, true);
+      var destination = this.destinationStore_.selectedDestination;
+      if (destination != null) {
+        var nameEl = this.getElement().getElementsByClassName(
+            DestinationSettings.Classes_.NAME)[0];
+        nameEl.textContent = destination.displayName;
+        nameEl.title = destination.displayName;
+
+        var iconEl = this.getElement().getElementsByClassName(
+            DestinationSettings.Classes_.ICON)[0];
+        iconEl.src = destination.iconUrl;
+
+        var hint = destination.hint;
+        var locationEl = this.getElement().getElementsByClassName(
+            DestinationSettings.Classes_.LOCATION)[0];
+        locationEl.textContent = hint;
+        locationEl.title = hint;
+
+        var offlineStatusText = destination.offlineStatusText;
+        var offlineStatusEl =
+            this.getChildElement('.destination-settings-offline-status');
+        offlineStatusEl.textContent = offlineStatusText;
+        offlineStatusEl.title = offlineStatusText;
+
+        var isOffline = destination.isOffline;
+        destinationSettingsBoxEl.classList.toggle(
+            DestinationSettings.Classes_.STALE, isOffline);
+        setIsVisible(locationEl, !isOffline);
+        setIsVisible(offlineStatusEl, isOffline);
+      }
+
+      setIsVisible(
+          this.getChildElement('.throbber-container'), destination == null);
+      setIsVisible(destinationSettingsBoxEl, destination != null);
     },
 
     onSelectedDestinationNameSet_: function() {
diff --git a/chrome/browser/resources/sync_internals/OWNERS b/chrome/browser/resources/sync_internals/OWNERS
index 6d901fe..cf579e5 100644
--- a/chrome/browser/resources/sync_internals/OWNERS
+++ b/chrome/browser/resources/sync_internals/OWNERS
@@ -5,3 +5,4 @@
 rsimha@chromium.org
 tim@chromium.org
 zea@chromium.org
+pavely@chromium.org
diff --git a/chrome/browser/resources/sync_internals/about.js b/chrome/browser/resources/sync_internals/about.js
index 1fb290f..47c1ab9 100644
--- a/chrome/browser/resources/sync_internals/about.js
+++ b/chrome/browser/resources/sync_internals/about.js
@@ -32,6 +32,23 @@
     refreshAboutInfo(e.details);
   }
 
+  /**
+   * Helper to determine if an element is scrolled to its bottom limit.
+   * @param {Element} elem element to check
+   * @return {boolean} true if the element is scrolled to the bottom
+   */
+  function isScrolledToBottom(elem) {
+    return elem.scrollHeight - elem.scrollTop == elem.clientHeight;
+  }
+
+  /**
+   * Helper to scroll an element to its bottom limit.
+   * @param {Element} elem element to be scrolled
+   */
+  function scrollToBottom(elem) {
+    elem.scrollTop = elem.scrollHeight - elem.clientHeight;
+  }
+
   /** Container for accumulated sync protocol events. */
   var protocolEvents = [];
 
@@ -54,8 +71,17 @@
     knownEventTimestamps[details.time] = true;
     protocolEvents.push(details);
 
+    var trafficContainer = $('traffic-event-container');
+
+    // Scroll to the bottom if we were already at the bottom.  Otherwise, leave
+    // the scrollbar alone.
+    var shouldScrollDown = isScrolledToBottom(trafficContainer);
+
     var context = new JsEvalContext({ events: protocolEvents });
-    jstProcess(context, $('traffic-event-container'));
+    jstProcess(context, trafficContainer);
+
+    if (shouldScrollDown)
+      scrollToBottom(trafficContainer);
   }
 
   /**
@@ -124,10 +150,10 @@
 
   /**
    * Toggles the given traffic event entry div's "expanded" state.
-   * @param {HTMLElement} element the element to toggle.
+   * @param {MouseEvent} e the click event that triggered the toggle.
    */
-  function expandListener(element) {
-    element.target.classList.toggle('traffic-event-entry-expanded');
+  function expandListener(e) {
+    e.target.classList.toggle('traffic-event-entry-expanded');
   }
 
   /**
diff --git a/chrome/browser/resources/user_manager/user_manager.css b/chrome/browser/resources/user_manager/user_manager.css
index e908b34..d76a045 100644
--- a/chrome/browser/resources/user_manager/user_manager.css
+++ b/chrome/browser/resources/user_manager/user_manager.css
@@ -8,6 +8,10 @@
   background-color: #eee;
 }
 
+#outer-container {
+  min-height: 0;
+}
+
 .bubble.faded {
   opacity: 0;
 }
diff --git a/chrome/browser/resources/user_manager/user_manager.js b/chrome/browser/resources/user_manager/user_manager.js
index 66f6dcc..b087331 100644
--- a/chrome/browser/resources/user_manager/user_manager.js
+++ b/chrome/browser/resources/user_manager/user_manager.js
@@ -40,6 +40,10 @@
     // logged in and the screen is "locked", so we must re-enabled it
     $('add-user-header-bar-item').hidden = false;
 
+    // Disable the context menu, as the Print/Inspect element items don't
+    // make sense when displayed as a widget.
+    document.addEventListener('contextmenu', function(e) {e.preventDefault();});
+
     var hash = window.location.hash;
     if (hash && hash == '#tutorial')
       UserManagerTutorial.startTutorial();
diff --git a/chrome/browser/resources/video_player/js/video_player_scripts.js b/chrome/browser/resources/video_player/js/video_player_scripts.js
deleted file mode 100644
index 802eff3..0000000
--- a/chrome/browser/resources/video_player/js/video_player_scripts.js
+++ /dev/null
@@ -1,27 +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.
-
-// The include directives are put into Javascript-style comments to prevent
-// parsing errors in non-flattened mode. The flattener still sees them.
-// Note that this makes the flattener to comment out the first line of the
-// included file but that's all right since any javascript file should start
-// with a copyright comment anyway.
-
-//<include src="error_util.js"/>
-
-//<include src="../../../../../ui/webui/resources/js/cr.js"/>
-//<include src="../../../../../ui/webui/resources/js/load_time_data.js"/>
-
-(function() {
-'use strict';
-
-//<include src="../../file_manager/common/js/util.js"/>
-//<include src="../../file_manager/foreground/js/media/media_controls.js"/>
-//<include src="../../file_manager/foreground/js/media/util.js"/>
-
-//<include src="video_player.js"/>
-
-window.unload = unload;
-
-})();
diff --git a/chrome/browser/resources/video_player/video_player.html b/chrome/browser/resources/video_player/video_player.html
deleted file mode 100644
index 45ef353..0000000
--- a/chrome/browser/resources/video_player/video_player.html
+++ /dev/null
@@ -1,28 +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.
-  -->
-<html>
-<head>
-  <title>#xFEFF;</title>
-  <link rel="icon" type="image/png" href="images/200/icon.png">
-  <link rel="stylesheet" type="text/css"
-        href="../file_manager/foreground/css/media_controls.css">
-  <link rel="stylesheet" type="text/css" href="css/video_player.css">
-
-  <script src="js/video_player_scripts.js"></script>
-</head>
-<body>
-  <div id="video-player" tools>
-    <div id="video-container">
-    </div>
-    <div id="controls-wrapper">
-      <div id="controls" class="tool"></div>
-    </div>
-    <div id="error-wrapper">
-      <div id="error"></div>
-    </div>
-  </div>
-</body>
-</html>
diff --git a/chrome/browser/safe_browsing/database_manager.cc b/chrome/browser/safe_browsing/database_manager.cc
index f1b921b..ba22281 100644
--- a/chrome/browser/safe_browsing/database_manager.cc
+++ b/chrome/browser/safe_browsing/database_manager.cc
@@ -68,6 +68,28 @@
                                              threat_type);
 }
 
+// |list_id| is from |safe_browsing_util::ListType|.
+SBThreatType GetThreatTypeFromListId(int list_id) {
+  if (list_id == safe_browsing_util::PHISH) {
+    return SB_THREAT_TYPE_URL_PHISHING;
+  }
+
+  if (list_id == safe_browsing_util::MALWARE) {
+    return SB_THREAT_TYPE_URL_MALWARE;
+  }
+
+  if (list_id == safe_browsing_util::BINURL) {
+    return SB_THREAT_TYPE_BINARY_MALWARE_URL;
+  }
+
+  if (list_id == safe_browsing_util::EXTENSIONBLACKLIST) {
+    return SB_THREAT_TYPE_EXTENSION;
+  }
+
+  DVLOG(1) << "Unknown safe browsing list id " << list_id;
+  return SB_THREAT_TYPE_SAFE;
+}
+
 }  // namespace
 
 SafeBrowsingDatabaseManager::SafeBrowsingCheck::SafeBrowsingCheck(
@@ -784,28 +806,6 @@
   }
 }
 
-SBThreatType SafeBrowsingDatabaseManager::GetThreatTypeFromListname(
-    const std::string& list_name) {
-  if (safe_browsing_util::IsPhishingList(list_name)) {
-    return SB_THREAT_TYPE_URL_PHISHING;
-  }
-
-  if (safe_browsing_util::IsMalwareList(list_name)) {
-    return SB_THREAT_TYPE_URL_MALWARE;
-  }
-
-  if (safe_browsing_util::IsBadbinurlList(list_name)) {
-    return SB_THREAT_TYPE_BINARY_MALWARE_URL;
-  }
-
-  if (safe_browsing_util::IsExtensionList(list_name)) {
-    return SB_THREAT_TYPE_EXTENSION;
-  }
-
-  DVLOG(1) << "Unknown safe browsing list " << list_name;
-  return SB_THREAT_TYPE_SAFE;
-}
-
 void SafeBrowsingDatabaseManager::DatabaseUpdateFinished(
     bool update_succeeded) {
   DCHECK_EQ(base::MessageLoop::current(),
@@ -891,7 +891,7 @@
     if (index == -1)
       continue;
     SBThreatType threat =
-        GetThreatTypeFromListname(full_hashes[index].list_name);
+        GetThreatTypeFromListId(full_hashes[index].list_id);
     if (threat != SB_THREAT_TYPE_SAFE &&
         IsExpectedThreat(threat, check->expected_threats)) {
       check->url_results[i] = threat;
@@ -905,7 +905,7 @@
     if (index == -1)
       continue;
     SBThreatType threat =
-        GetThreatTypeFromListname(full_hashes[index].list_name);
+        GetThreatTypeFromListId(full_hashes[index].list_id);
     if (threat != SB_THREAT_TYPE_SAFE &&
         IsExpectedThreat(threat, check->expected_threats)) {
       check->full_hash_results[i] = threat;
diff --git a/chrome/browser/safe_browsing/database_manager.h b/chrome/browser/safe_browsing/database_manager.h
index a8d8bad..8f2b219 100644
--- a/chrome/browser/safe_browsing/database_manager.h
+++ b/chrome/browser/safe_browsing/database_manager.h
@@ -277,8 +277,6 @@
 
   void DeleteDatabaseChunks(std::vector<SBChunkDelete>* chunk_deletes);
 
-  static SBThreatType GetThreatTypeFromListname(const std::string& list_name);
-
   void NotifyClientBlockingComplete(Client* client, bool proceed);
 
   void DatabaseUpdateFinished(bool update_succeeded);
diff --git a/chrome/browser/safe_browsing/database_manager_unittest.cc b/chrome/browser/safe_browsing/database_manager_unittest.cc
index f45fb10..af7fda4 100644
--- a/chrome/browser/safe_browsing/database_manager_unittest.cc
+++ b/chrome/browser/safe_browsing/database_manager_unittest.cc
@@ -47,8 +47,7 @@
 
   const SBFullHashResult full_hash_result = {
       same_full_hash,
-      result_list,
-      0
+      safe_browsing_util::GetListId(result_list)
   };
 
   std::vector<SBFullHashResult> fake_results(1, full_hash_result);
diff --git a/chrome/browser/safe_browsing/download_feedback.cc b/chrome/browser/safe_browsing/download_feedback.cc
index b23a313..0a149d6f 100644
--- a/chrome/browser/safe_browsing/download_feedback.cc
+++ b/chrome/browser/safe_browsing/download_feedback.cc
@@ -5,11 +5,9 @@
 #include "chrome/browser/safe_browsing/download_feedback.h"
 
 #include "base/bind.h"
-#include "base/command_line.h"
 #include "base/files/file_util_proxy.h"
 #include "base/metrics/histogram.h"
 #include "base/task_runner.h"
-#include "chrome/common/chrome_switches.h"
 #include "chrome/common/safe_browsing/csd.pb.h"
 #include "net/base/net_errors.h"
 
@@ -17,10 +15,6 @@
 
 namespace {
 
-// The default URL where browser sends download feedback requests.
-const char kSbDefaultFeedbackURL[] =
-    "https://safebrowsing.google.com/safebrowsing/uploads/chrome";
-
 // This enum is used by histograms.  Do not change the ordering or remove items.
 enum UploadResultType {
   UPLOAD_SUCCESS,
@@ -118,8 +112,6 @@
   DCHECK(CalledOnValidThread());
   DCHECK(!uploader_);
 
-  CommandLine* cmdline = CommandLine::ForCurrentProcess();
-
   ClientDownloadReport report_metadata;
 
   bool r = report_metadata.mutable_download_request()->ParseFromString(
@@ -130,17 +122,13 @@
   DCHECK(r);
   file_size_ = report_metadata.download_request().length();
 
-  GURL url = GURL(cmdline->HasSwitch(switches::kSbDownloadFeedbackURL) ?
-      cmdline->GetSwitchValueASCII(switches::kSbDownloadFeedbackURL) :
-      kSbDefaultFeedbackURL);
-
   std::string metadata_string;
   bool ok = report_metadata.SerializeToString(&metadata_string);
   DCHECK(ok);
   uploader_.reset(
       TwoPhaseUploader::Create(request_context_getter_.get(),
                                file_task_runner_.get(),
-                               url,
+                               GURL(kSbFeedbackURL),
                                metadata_string,
                                file_path_,
                                TwoPhaseUploader::ProgressCallback(),
@@ -207,6 +195,10 @@
 const int64 DownloadFeedback::kMaxUploadSize = 50 * 1024 * 1024;
 
 // static
+const char DownloadFeedback::kSbFeedbackURL[] =
+    "https://safebrowsing.google.com/safebrowsing/uploads/chrome";
+
+// static
 DownloadFeedbackFactory* DownloadFeedback::factory_ = NULL;
 
 // static
diff --git a/chrome/browser/safe_browsing/download_feedback.h b/chrome/browser/safe_browsing/download_feedback.h
index 2a9a6c7..6473bda 100644
--- a/chrome/browser/safe_browsing/download_feedback.h
+++ b/chrome/browser/safe_browsing/download_feedback.h
@@ -39,6 +39,9 @@
   // SBDownloadFeedback.SizeSuccess and SizeFailure histograms.
   static const int64 kMaxUploadSize;
 
+  // The URL where the browser sends download feedback requests.
+  static const char kSbFeedbackURL[];
+
   virtual ~DownloadFeedback() {}
 
   // Makes the passed |factory| the factory used to instantiate
diff --git a/chrome/browser/safe_browsing/download_feedback_unittest.cc b/chrome/browser/safe_browsing/download_feedback_unittest.cc
index 460c5ae..db1c1634 100644
--- a/chrome/browser/safe_browsing/download_feedback_unittest.cc
+++ b/chrome/browser/safe_browsing/download_feedback_unittest.cc
@@ -4,14 +4,12 @@
 
 #include "chrome/browser/safe_browsing/download_feedback.h"
 
-#include "base/command_line.h"
 #include "base/file_util.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/single_thread_task_runner.h"
 #include "chrome/browser/safe_browsing/two_phase_uploader.h"
-#include "chrome/common/chrome_switches.h"
 #include "chrome/common/safe_browsing/csd.pb.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/test/test_browser_thread_bundle.h"
@@ -165,10 +163,6 @@
   std::string ping_response(
       expected_report_metadata.download_response().SerializeAsString());
 
-  const char kTestFeedbackURL[] = "https://example.com/test/upload";
-  CommandLine::ForCurrentProcess()->AppendSwitchASCII(
-      switches::kSbDownloadFeedbackURL, kTestFeedbackURL);
-
   DownloadFeedback* feedback =
       DownloadFeedback::Create(url_request_context_getter_.get(),
                                file_task_runner_.get(),
@@ -190,7 +184,7 @@
   EXPECT_EQ(upload_file_path_, uploader()->file_path_);
   EXPECT_EQ(expected_report_metadata.SerializeAsString(),
             uploader()->metadata_);
-  EXPECT_EQ(kTestFeedbackURL, uploader()->base_url_.spec());
+  EXPECT_EQ(DownloadFeedback::kSbFeedbackURL, uploader()->base_url_.spec());
 
   EXPECT_TRUE(base::PathExists(upload_file_path_));
 
diff --git a/chrome/browser/safe_browsing/pe_image_reader_win.h b/chrome/browser/safe_browsing/pe_image_reader_win.h
index 6fa5349..f64891c 100644
--- a/chrome/browser/safe_browsing/pe_image_reader_win.h
+++ b/chrome/browser/safe_browsing/pe_image_reader_win.h
@@ -60,6 +60,8 @@
   // An interface to an image's optional header.
   class OptionalHeader {
    public:
+    virtual ~OptionalHeader() {}
+
     virtual WordSize GetWordSize() = 0;
 
     // Returns the offset of the DataDirectory member relative to the start of
diff --git a/chrome/browser/safe_browsing/prefix_set_unittest.cc b/chrome/browser/safe_browsing/prefix_set_unittest.cc
index 27b9ff5..f935131 100644
--- a/chrome/browser/safe_browsing/prefix_set_unittest.cc
+++ b/chrome/browser/safe_browsing/prefix_set_unittest.cc
@@ -13,7 +13,11 @@
 #include "base/logging.h"
 #include "base/md5.h"
 #include "base/memory/scoped_ptr.h"
+#include "base/path_service.h"
 #include "base/rand_util.h"
+#include "base/strings/string_number_conversions.h"
+#include "base/strings/string_util.h"
+#include "chrome/common/chrome_paths.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "testing/platform_test.h"
 
@@ -165,6 +169,33 @@
     ASSERT_EQ(new_size_64, size_64);
   }
 
+  // Fill |prefixes| with values read from a reference file.  The reference file
+  // was generated from a specific |shared_prefixes_|.
+  bool ReadReferencePrefixes(std::vector<SBPrefix>* prefixes) {
+    const char kRefname[] = "PrefixSetRef";
+    base::FilePath ref_path;
+    if (!PathService::Get(chrome::DIR_TEST_DATA, &ref_path))
+      return false;
+    ref_path = ref_path.AppendASCII("SafeBrowsing");
+    ref_path = ref_path.AppendASCII(kRefname);
+
+    base::ScopedFILE file(base::OpenFile(ref_path, "r"));
+    if (!file.get())
+      return false;
+    char buf[1024];
+    while (fgets(buf, sizeof(buf), file.get())) {
+      std::string trimmed;
+      if (base::TRIM_TRAILING !=
+          base::TrimWhitespace(buf, base::TRIM_ALL, &trimmed))
+        return false;
+      unsigned prefix;
+      if (!base::StringToUint(trimmed, &prefix))
+        return false;
+      prefixes->push_back(prefix);
+    }
+    return true;
+  }
+
   // Tests should not modify this shared resource.
   static std::vector<SBPrefix> shared_prefixes_;
 
@@ -391,7 +422,7 @@
   ASSERT_TRUE(prefix_set.get());
 }
 
-// Bad |index_| size is caught by the sanity check.
+// Bad magic is caught by the sanity check.
 TEST_F(PrefixSetTest, CorruptionMagic) {
   base::FilePath filename;
   ASSERT_TRUE(GetPrefixSetFile(&filename));
@@ -403,13 +434,13 @@
   ASSERT_FALSE(prefix_set.get());
 }
 
-// Bad |index_| size is caught by the sanity check.
+// Bad version is caught by the sanity check.
 TEST_F(PrefixSetTest, CorruptionVersion) {
   base::FilePath filename;
   ASSERT_TRUE(GetPrefixSetFile(&filename));
 
   ASSERT_NO_FATAL_FAILURE(
-      ModifyAndCleanChecksum(filename, kVersionOffset, 1));
+      ModifyAndCleanChecksum(filename, kVersionOffset, 10));
   scoped_ptr<safe_browsing::PrefixSet> prefix_set =
       safe_browsing::PrefixSet::LoadFile(filename);
   ASSERT_FALSE(prefix_set.get());
@@ -590,4 +621,25 @@
   EXPECT_EQ(prefixes_copy[3], static_cast<uint32>(-1000 + 23));
 }
 
+// Test that a golden v2 file can be read by the current code.  All platforms
+// generating v2 files are little-endian, so there is no point to testing this
+// transition if/when a big-endian port is added.
+#if defined(ARCH_CPU_LITTLE_ENDIAN)
+TEST_F(PrefixSetTest, Version2) {
+  std::vector<SBPrefix> ref_prefixes;
+  ASSERT_TRUE(ReadReferencePrefixes(&ref_prefixes));
+
+  const char kBasename[] = "PrefixSetVersion2";
+  base::FilePath golden_path;
+  ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &golden_path));
+  golden_path = golden_path.AppendASCII("SafeBrowsing");
+  golden_path = golden_path.AppendASCII(kBasename);
+
+  scoped_ptr<safe_browsing::PrefixSet> prefix_set =
+      safe_browsing::PrefixSet::LoadFile(golden_path);
+  ASSERT_TRUE(prefix_set.get());
+  CheckPrefixes(*prefix_set, ref_prefixes);
+}
+#endif
+
 }  // namespace
diff --git a/chrome/browser/safe_browsing/protocol_parser.cc b/chrome/browser/safe_browsing/protocol_parser.cc
index 1fb64ef..db550e3 100644
--- a/chrome/browser/safe_browsing/protocol_parser.cc
+++ b/chrome/browser/safe_browsing/protocol_parser.cc
@@ -65,12 +65,13 @@
       return false;
 
     SBFullHashResult full_hash;
-    full_hash.list_name = cmd_parts[0];
-    full_hash.add_chunk_id = atoi(cmd_parts[1].c_str());
+    full_hash.list_id = safe_browsing_util::GetListId(cmd_parts[0]);
+    // Ignore cmd_parts[1] (add_chunk_id), as we no longer use it with SB 2.3
+    // caching rules.
     int full_hash_len = atoi(cmd_parts[2].c_str());
 
     // Ignore hash results from lists we don't recognize.
-    if (safe_browsing_util::GetListId(full_hash.list_name) < 0) {
+    if (full_hash.list_id < 0) {
       data += full_hash_len;
       length -= full_hash_len;
       continue;
diff --git a/chrome/browser/safe_browsing/protocol_parser_unittest.cc b/chrome/browser/safe_browsing/protocol_parser_unittest.cc
index c20c4ce..08d958e 100644
--- a/chrome/browser/safe_browsing/protocol_parser_unittest.cc
+++ b/chrome/browser/safe_browsing/protocol_parser_unittest.cc
@@ -439,15 +439,15 @@
   EXPECT_EQ(memcmp(&full_hashes[0].hash,
                    "00112233445566778899aabbccddeeff",
                    sizeof(SBFullHash)), 0);
-  EXPECT_EQ(full_hashes[0].list_name, "goog-phish-shavar");
+  EXPECT_EQ(full_hashes[0].list_id, safe_browsing_util::PHISH);
   EXPECT_EQ(memcmp(&full_hashes[1].hash,
                    "00001111222233334444555566667777",
                    sizeof(SBFullHash)), 0);
-  EXPECT_EQ(full_hashes[1].list_name, "goog-phish-shavar");
+  EXPECT_EQ(full_hashes[1].list_id, safe_browsing_util::PHISH);
   EXPECT_EQ(memcmp(&full_hashes[2].hash,
                    "ffffeeeeddddccccbbbbaaaa99998888",
                    sizeof(SBFullHash)), 0);
-  EXPECT_EQ(full_hashes[2].list_name, "goog-phish-shavar");
+  EXPECT_EQ(full_hashes[2].list_id, safe_browsing_util::PHISH);
 
   // Test multiple lists in the GetHash results.
   std::string get_hash2("goog-phish-shavar:19:32\n"
@@ -463,15 +463,15 @@
   EXPECT_EQ(memcmp(&full_hashes[0].hash,
                    "00112233445566778899aabbccddeeff",
                    sizeof(SBFullHash)), 0);
-  EXPECT_EQ(full_hashes[0].list_name, "goog-phish-shavar");
+  EXPECT_EQ(full_hashes[0].list_id, safe_browsing_util::PHISH);
   EXPECT_EQ(memcmp(&full_hashes[1].hash,
                    "cafebeefcafebeefdeaddeaddeaddead",
                    sizeof(SBFullHash)), 0);
-  EXPECT_EQ(full_hashes[1].list_name, "goog-malware-shavar");
+  EXPECT_EQ(full_hashes[1].list_id, safe_browsing_util::MALWARE);
   EXPECT_EQ(memcmp(&full_hashes[2].hash,
                    "zzzzyyyyxxxxwwwwvvvvuuuuttttssss",
                    sizeof(SBFullHash)), 0);
-  EXPECT_EQ(full_hashes[2].list_name, "goog-malware-shavar");
+  EXPECT_EQ(full_hashes[2].list_id, safe_browsing_util::MALWARE);
 }
 
 TEST(SafeBrowsingProtocolParsingTest, TestGetHashWithUnknownList) {
@@ -488,8 +488,7 @@
   EXPECT_EQ(full_hashes.size(), 1U);
   EXPECT_EQ(memcmp("12345678901234567890123456789012",
                    &full_hashes[0].hash, sizeof(SBFullHash)), 0);
-  EXPECT_EQ(full_hashes[0].list_name, "goog-phish-shavar");
-  EXPECT_EQ(full_hashes[0].add_chunk_id, 1);
+  EXPECT_EQ(full_hashes[0].list_id, safe_browsing_util::PHISH);
 
   hash_response += "goog-malware-shavar:7:32\n"
                    "abcdefghijklmnopqrstuvwxyz123457";
@@ -501,12 +500,10 @@
   EXPECT_EQ(full_hashes.size(), 2U);
   EXPECT_EQ(memcmp("12345678901234567890123456789012",
                    &full_hashes[0].hash, sizeof(SBFullHash)), 0);
-  EXPECT_EQ(full_hashes[0].list_name, "goog-phish-shavar");
-  EXPECT_EQ(full_hashes[0].add_chunk_id, 1);
+  EXPECT_EQ(full_hashes[0].list_id, safe_browsing_util::PHISH);
   EXPECT_EQ(memcmp("abcdefghijklmnopqrstuvwxyz123457",
                    &full_hashes[1].hash, sizeof(SBFullHash)), 0);
-  EXPECT_EQ(full_hashes[1].list_name, "goog-malware-shavar");
-  EXPECT_EQ(full_hashes[1].add_chunk_id, 7);
+  EXPECT_EQ(full_hashes[1].list_id, safe_browsing_util::MALWARE);
 }
 
 TEST(SafeBrowsingProtocolParsingTest, TestFormatHash) {
diff --git a/chrome/browser/safe_browsing/safe_browsing_database.cc b/chrome/browser/safe_browsing/safe_browsing_database.cc
index 2b5b2e2..d783d12 100644
--- a/chrome/browser/safe_browsing/safe_browsing_database.cc
+++ b/chrome/browser/safe_browsing/safe_browsing_database.cc
@@ -193,34 +193,28 @@
 //
 // For efficiency reasons the code walks |prefix_hits| and
 // |full_hashes| in parallel, so they must be sorted by prefix.
-void GetCachedFullHashesForBrowse(const std::vector<SBPrefix>& prefix_hits,
-                                  const std::vector<SBAddFullHash>& full_hashes,
-                                  std::vector<SBFullHashResult>* full_hits,
-                                  base::Time last_update) {
+void GetCachedFullHashesForBrowse(
+    const std::vector<SBPrefix>& prefix_hits,
+    const std::vector<SBFullHashCached>& full_hashes,
+    std::vector<SBFullHashResult>* full_hits,
+    base::Time last_update) {
   const base::Time expire_time =
       base::Time::Now() - base::TimeDelta::FromMinutes(kMaxStalenessMinutes);
 
   std::vector<SBPrefix>::const_iterator piter = prefix_hits.begin();
-  std::vector<SBAddFullHash>::const_iterator hiter = full_hashes.begin();
+  std::vector<SBFullHashCached>::const_iterator hiter = full_hashes.begin();
 
   while (piter != prefix_hits.end() && hiter != full_hashes.end()) {
-    if (*piter < hiter->full_hash.prefix) {
+    if (*piter < hiter->hash.prefix) {
       ++piter;
-    } else if (hiter->full_hash.prefix < *piter) {
+    } else if (hiter->hash.prefix < *piter) {
       ++hiter;
     } else {
       if (expire_time < last_update ||
           expire_time.ToTimeT() < hiter->received) {
         SBFullHashResult result;
-        const int list_bit = GetListIdBit(hiter->chunk_id);
-        DCHECK(list_bit == safe_browsing_util::MALWARE ||
-               list_bit == safe_browsing_util::PHISH);
-        const safe_browsing_util::ListType list_id =
-            static_cast<safe_browsing_util::ListType>(list_bit);
-        if (!safe_browsing_util::GetListName(list_id, &result.list_name))
-          continue;
-        result.add_chunk_id = DecodeChunkId(hiter->chunk_id);
-        result.hash = hiter->full_hash;
+        result.list_id = hiter->list_id;
+        result.hash = hiter->hash;
         full_hits->push_back(result);
       }
 
@@ -306,10 +300,10 @@
   UpdateChunkRanges(store, std::vector<std::string>(1, listname), lists);
 }
 
-// Order |SBAddFullHash| on the prefix part.  |SBAddPrefixLess()| from
-// safe_browsing_store.h orders on both chunk-id and prefix.
-bool SBAddFullHashPrefixLess(const SBAddFullHash& a, const SBAddFullHash& b) {
-  return a.full_hash.prefix < b.full_hash.prefix;
+// Order |SBFullHashCached| items on the prefix part.
+bool SBFullHashCachedPrefixLess(const SBFullHashCached& a,
+                                const SBFullHashCached& b) {
+  return a.hash.prefix < b.hash.prefix;
 }
 
 // This code always checks for non-zero file size.  This helper makes
@@ -531,7 +525,7 @@
     // contention on the lock...
     base::AutoLock locked(lookup_lock_);
     full_browse_hashes_.clear();
-    pending_browse_hashes_.clear();
+    cached_browse_hashes_.clear();
     LoadPrefixSet();
   }
 
@@ -655,7 +649,7 @@
   {
     base::AutoLock locked(lookup_lock_);
     full_browse_hashes_.clear();
-    pending_browse_hashes_.clear();
+    cached_browse_hashes_.clear();
     prefix_miss_cache_.clear();
     browse_prefix_set_.reset();
     side_effect_free_whitelist_prefix_set_.reset();
@@ -709,13 +703,13 @@
     return false;
 
   // Find the matching full-hash results.  |full_browse_hashes_| are from the
-  // database, |pending_browse_hashes_| are from GetHash requests between
+  // database, |cached_browse_hashes_| are from GetHash requests between
   // updates.
   std::sort(prefix_hits->begin(), prefix_hits->end());
 
   GetCachedFullHashesForBrowse(*prefix_hits, full_browse_hashes_,
                                full_hits, last_update);
-  GetCachedFullHashesForBrowse(*prefix_hits, pending_browse_hashes_,
+  GetCachedFullHashesForBrowse(*prefix_hits, cached_browse_hashes_,
                                full_hits, last_update);
   return true;
 }
@@ -1062,28 +1056,27 @@
     return;
   }
 
-  // TODO(shess): SBFullHashResult and SBAddFullHash are very similar.
-  // Refactor to make them identical.
   const base::Time now = base::Time::Now();
-  const size_t orig_size = pending_browse_hashes_.size();
+  const size_t orig_size = cached_browse_hashes_.size();
   for (std::vector<SBFullHashResult>::const_iterator iter = full_hits.begin();
        iter != full_hits.end(); ++iter) {
-    const int list_id = safe_browsing_util::GetListId(iter->list_name);
-    if (list_id == safe_browsing_util::MALWARE ||
-        list_id == safe_browsing_util::PHISH) {
-      int encoded_chunk_id = EncodeChunkId(iter->add_chunk_id, list_id);
-      SBAddFullHash add_full_hash(encoded_chunk_id, now, iter->hash);
-      pending_browse_hashes_.push_back(add_full_hash);
+    if (iter->list_id == safe_browsing_util::MALWARE ||
+        iter->list_id == safe_browsing_util::PHISH) {
+      SBFullHashCached cached_hash;
+      cached_hash.hash = iter->hash;
+      cached_hash.list_id = iter->list_id;
+      cached_hash.received = static_cast<int>(now.ToTimeT());
+      cached_browse_hashes_.push_back(cached_hash);
     }
   }
 
   // Sort new entries then merge with the previously-sorted entries.
-  std::vector<SBAddFullHash>::iterator
-      orig_end = pending_browse_hashes_.begin() + orig_size;
-  std::sort(orig_end, pending_browse_hashes_.end(), SBAddFullHashPrefixLess);
-  std::inplace_merge(pending_browse_hashes_.begin(),
-                     orig_end, pending_browse_hashes_.end(),
-                     SBAddFullHashPrefixLess);
+  std::vector<SBFullHashCached>::iterator
+      orig_end = cached_browse_hashes_.begin() + orig_size;
+  std::sort(orig_end, cached_browse_hashes_.end(), SBFullHashCachedPrefixLess);
+  std::inplace_merge(cached_browse_hashes_.begin(),
+                     orig_end, cached_browse_hashes_.end(),
+                     SBFullHashCachedPrefixLess);
 }
 
 bool SafeBrowsingDatabaseNew::UpdateStarted(
@@ -1275,15 +1268,11 @@
   if (!store)
     return;
 
-  // For the whitelists, we don't cache and save full hashes since all
-  // hashes are already full.
-  std::vector<SBAddFullHash> empty_add_hashes;
-
   // Note: |builder| will not be empty.  The current data store implementation
   // stores all full-length hashes as both full and prefix hashes.
   safe_browsing::PrefixSetBuilder builder;
   std::vector<SBAddFullHash> full_hashes;
-  if (!store->FinishUpdate(empty_add_hashes, &builder, &full_hashes)) {
+  if (!store->FinishUpdate(&builder, &full_hashes)) {
     RecordFailure(FAILURE_WHITELIST_DATABASE_UPDATE_FINISH);
     WhitelistEverything(whitelist);
     return;
@@ -1300,19 +1289,13 @@
     const base::FilePath& store_filename,
     SafeBrowsingStore* store,
     FailureType failure_type) {
-  // We don't cache and save full hashes.
-  std::vector<SBAddFullHash> empty_add_hashes;
-
   // These results are not used after this call. Simply ignore the
   // returned value after FinishUpdate(...).
   safe_browsing::PrefixSetBuilder builder;
   std::vector<SBAddFullHash> add_full_hashes_result;
 
-  if (!store->FinishUpdate(empty_add_hashes,
-                           &builder,
-                           &add_full_hashes_result)) {
+  if (!store->FinishUpdate(&builder, &add_full_hashes_result))
     RecordFailure(failure_type);
-  }
 
 #if defined(OS_MACOSX)
   base::mac::SetFileBackupExclusion(store_filename);
@@ -1322,16 +1305,6 @@
 }
 
 void SafeBrowsingDatabaseNew::UpdateBrowseStore() {
-  // Copy out the pending add hashes.  Copy rather than swapping in
-  // case |ContainsBrowseURL()| is called before the new filter is complete.
-  std::vector<SBAddFullHash> pending_add_hashes;
-  {
-    base::AutoLock locked(lookup_lock_);
-    pending_add_hashes.insert(pending_add_hashes.end(),
-                              pending_browse_hashes_.begin(),
-                              pending_browse_hashes_.end());
-  }
-
   // Measure the amount of IO during the filter build.
   base::IoCounters io_before, io_after;
   base::ProcessHandle handle = base::Process::Current().handle();
@@ -1353,28 +1326,36 @@
 
   safe_browsing::PrefixSetBuilder builder;
   std::vector<SBAddFullHash> add_full_hashes;
-  if (!browse_store_->FinishUpdate(pending_add_hashes,
-                                   &builder, &add_full_hashes)) {
+  if (!browse_store_->FinishUpdate(&builder, &add_full_hashes)) {
     RecordFailure(FAILURE_BROWSE_DATABASE_UPDATE_FINISH);
     return;
   }
   scoped_ptr<safe_browsing::PrefixSet> prefix_set(builder.GetPrefixSet());
 
+  std::vector<SBFullHashCached> full_hash_results;
+  for (size_t i = 0; i < add_full_hashes.size(); ++i) {
+    SBFullHashCached result;
+    result.hash = add_full_hashes[i].full_hash;
+    result.list_id = GetListIdBit(add_full_hashes[i].chunk_id);
+    result.received = add_full_hashes[i].received;
+    full_hash_results.push_back(result);
+  }
+
   // This needs to be in sorted order by prefix for efficient access.
-  std::sort(add_full_hashes.begin(), add_full_hashes.end(),
-            SBAddFullHashPrefixLess);
+  std::sort(full_hash_results.begin(), full_hash_results.end(),
+            SBFullHashCachedPrefixLess);
 
   // Swap in the newly built filter and cache.
   {
     base::AutoLock locked(lookup_lock_);
-    full_browse_hashes_.swap(add_full_hashes);
+    full_browse_hashes_.swap(full_hash_results);
 
     // TODO(shess): If |CacheHashResults()| is posted between the
     // earlier lock and this clear, those pending hashes will be lost.
     // It could be fixed by only removing hashes which were collected
     // at the earlier point.  I believe that is fail-safe as-is (the
     // hash will be fetched again).
-    pending_browse_hashes_.clear();
+    cached_browse_hashes_.clear();
     prefix_miss_cache_.clear();
     browse_prefix_set_.swap(prefix_set);
   }
@@ -1417,12 +1398,10 @@
 }
 
 void SafeBrowsingDatabaseNew::UpdateSideEffectFreeWhitelistStore() {
-  std::vector<SBAddFullHash> empty_add_hashes;
   safe_browsing::PrefixSetBuilder builder;
   std::vector<SBAddFullHash> add_full_hashes_result;
 
   if (!side_effect_free_whitelist_store_->FinishUpdate(
-          empty_add_hashes,
           &builder,
           &add_full_hashes_result)) {
     RecordFailure(FAILURE_SIDE_EFFECT_FREE_WHITELIST_UPDATE_FINISH);
@@ -1465,16 +1444,11 @@
 }
 
 void SafeBrowsingDatabaseNew::UpdateIpBlacklistStore() {
-  // For the IP blacklist, we don't cache and save full hashes since all
-  // hashes are already full.
-  std::vector<SBAddFullHash> empty_add_hashes;
-
   // Note: prefixes will not be empty.  The current data store implementation
   // stores all full-length hashes as both full and prefix hashes.
   safe_browsing::PrefixSetBuilder builder;
   std::vector<SBAddFullHash> full_hashes;
-  if (!ip_blacklist_store_->FinishUpdate(empty_add_hashes,
-                                         &builder, &full_hashes)) {
+  if (!ip_blacklist_store_->FinishUpdate(&builder, &full_hashes)) {
     RecordFailure(FAILURE_IP_BLACKLIST_UPDATE_FINISH);
     LoadIpBlacklist(std::vector<SBAddFullHash>());  // Clear the list.
     return;
diff --git a/chrome/browser/safe_browsing/safe_browsing_database.h b/chrome/browser/safe_browsing/safe_browsing_database.h
index 9122160..7ed95a3 100644
--- a/chrome/browser/safe_browsing/safe_browsing_database.h
+++ b/chrome/browser/safe_browsing/safe_browsing_database.h
@@ -47,6 +47,16 @@
   DISALLOW_COPY_AND_ASSIGN(SafeBrowsingDatabaseFactory);
 };
 
+// Contains full_hash elements which are cached in memory.  Differs from
+// SBAddFullHash in deriving |list_id| from |chunk_id|.  Differs from
+// SBFullHashResult in adding |received| for later expiration.
+// TODO(shess): Remove/refactor this as part of converting to v2.3 caching
+// semantics.
+struct SBFullHashCached {
+  SBFullHash hash;
+  int list_id;  // TODO(shess): Use safe_browsing_util::ListType.
+  int received;  // time_t like SBAddFullHash.
+};
 
 // Encapsulates on-disk databases that for safebrowsing. There are
 // four databases: browse, download, download whitelist and
@@ -399,7 +409,7 @@
 
   // Lock for protecting access to variables that may be used on the
   // IO thread.  This includes |prefix_set_|, |full_browse_hashes_|,
-  // |pending_browse_hashes_|, |prefix_miss_cache_|, |csd_whitelist_|.
+  // |cached_browse_hashes_|, |prefix_miss_cache_|, |csd_whitelist_|.
   base::Lock lookup_lock_;
 
   // Underlying persistent store for chunk data.
@@ -443,10 +453,10 @@
   // Cached browse store related full-hash items, ordered by prefix for
   // efficient scanning.
   // |full_browse_hashes_| are items from |browse_store_|,
-  // |pending_browse_hashes_| are items from |CacheHashResults()|, which
-  // will be pushed to the store on the next update.
-  std::vector<SBAddFullHash> full_browse_hashes_;
-  std::vector<SBAddFullHash> pending_browse_hashes_;
+  // |cached_browse_hashes_| are items from |CacheHashResults()|, which will be
+  // discarded on next update.
+  std::vector<SBFullHashCached> full_browse_hashes_;
+  std::vector<SBFullHashCached> cached_browse_hashes_;
 
   // Cache of prefixes that returned empty results (no full hash
   // match) to |CacheHashResults()|.  Cached to prevent asking for
diff --git a/chrome/browser/safe_browsing/safe_browsing_database_unittest.cc b/chrome/browser/safe_browsing/safe_browsing_database_unittest.cc
index 70d2b01..ed2aec8 100644
--- a/chrome/browser/safe_browsing/safe_browsing_database_unittest.cc
+++ b/chrome/browser/safe_browsing/safe_browsing_database_unittest.cc
@@ -863,8 +863,7 @@
   // Add the GetHash results to the cache.
   SBFullHashResult full_hash;
   full_hash.hash = SBFullHashForString("www.evil.com/phishing.html");
-  full_hash.list_name = safe_browsing_util::kMalwareList;
-  full_hash.add_chunk_id = 1;
+  full_hash.list_id = safe_browsing_util::MALWARE;
 
   std::vector<SBFullHashResult> results;
   results.push_back(full_hash);
@@ -880,7 +879,7 @@
   PopulateDatabaseForCacheTest();
 
   // We should have both full hashes in the cache.
-  EXPECT_EQ(database_->pending_browse_hashes_.size(), 2U);
+  EXPECT_EQ(2U, database_->cached_browse_hashes_.size());
 
   // Test the cache lookup for the first prefix.
   std::string listname;
@@ -889,7 +888,7 @@
   database_->ContainsBrowseUrl(
       GURL("http://www.evil.com/phishing.html"),
       &listname, &prefixes, &full_hashes, Time::Now());
-  EXPECT_EQ(full_hashes.size(), 1U);
+  ASSERT_EQ(1U, full_hashes.size());
   EXPECT_TRUE(
       SBFullHashEqual(full_hashes[0].hash,
                       SBFullHashForString("www.evil.com/phishing.html")));
@@ -901,7 +900,7 @@
   database_->ContainsBrowseUrl(
       GURL("http://www.evil.com/malware.html"),
       &listname, &prefixes, &full_hashes, Time::Now());
-  EXPECT_EQ(full_hashes.size(), 1U);
+  ASSERT_EQ(1U, full_hashes.size());
   EXPECT_TRUE(
       SBFullHashEqual(full_hashes[0].hash,
                       SBFullHashForString("www.evil.com/malware.html")));
@@ -921,14 +920,13 @@
   database_->InsertChunks(safe_browsing_util::kMalwareList, chunks);
   database_->UpdateFinished(true);
 
-  // This prefix should still be there.
-  database_->ContainsBrowseUrl(
+  // This prefix should still be there, but the fullhash is gone.
+  EXPECT_TRUE(database_->ContainsBrowseUrl(
       GURL("http://www.evil.com/malware.html"),
-      &listname, &prefixes, &full_hashes, Time::Now());
-  EXPECT_EQ(full_hashes.size(), 1U);
-  EXPECT_TRUE(
-      SBFullHashEqual(full_hashes[0].hash,
-                      SBFullHashForString("www.evil.com/malware.html")));
+      &listname, &prefixes, &full_hashes, Time::Now()));
+  ASSERT_EQ(1U, prefixes.size());
+  EXPECT_EQ(SBPrefixForString("www.evil.com/malware.html"), prefixes[0]);
+  EXPECT_TRUE(full_hashes.empty());
   prefixes.clear();
   full_hashes.clear();
 
@@ -950,7 +948,7 @@
       &listname, &prefixes, &full_hashes, Time::Now());
   EXPECT_TRUE(full_hashes.empty());
   EXPECT_TRUE(database_->full_browse_hashes_.empty());
-  EXPECT_TRUE(database_->pending_browse_hashes_.empty());
+  EXPECT_TRUE(database_->cached_browse_hashes_.empty());
 
   prefixes.clear();
   full_hashes.clear();
@@ -960,15 +958,15 @@
   // cache insert uses Time::Now(). First, store some entries.
   PopulateDatabaseForCacheTest();
 
-  std::vector<SBAddFullHash>* hash_cache = &database_->pending_browse_hashes_;
-  EXPECT_EQ(hash_cache->size(), 2U);
+  std::vector<SBFullHashCached>* hash_cache = &database_->cached_browse_hashes_;
+  EXPECT_EQ(2U, hash_cache->size());
 
   // Now adjust one of the entries times to be in the past.
   base::Time expired = base::Time::Now() - base::TimeDelta::FromMinutes(60);
   const SBPrefix key = SBPrefixForString("www.evil.com/malware.html");
-  std::vector<SBAddFullHash>::iterator iter;
+  std::vector<SBFullHashCached>::iterator iter;
   for (iter = hash_cache->begin(); iter != hash_cache->end(); ++iter) {
-    if (iter->full_hash.prefix == key) {
+    if (iter->hash.prefix == key) {
       iter->received = static_cast<int32>(expired.ToTimeT());
       break;
     }
@@ -984,8 +982,7 @@
   database_->ContainsBrowseUrl(
       GURL("http://www.evil.com/phishing.html"),
       &listname, &prefixes, &full_hashes, expired);
-  EXPECT_EQ(full_hashes.size(), 1U);
-
+  EXPECT_EQ(1U, full_hashes.size());
 
   // Testing prefix miss caching. First, we clear out the existing database,
   // Since PopulateDatabaseForCacheTest() doesn't handle adding duplicate
@@ -1002,7 +999,7 @@
   database_->CacheHashResults(prefix_misses, empty_full_hash);
 
   // Prefixes with no full results are misses.
-  EXPECT_EQ(database_->prefix_miss_cache_.size(), 2U);
+  EXPECT_EQ(2U, database_->prefix_miss_cache_.size());
 
   // Update the database.
   PopulateDatabaseForCacheTest();
@@ -1042,7 +1039,7 @@
       GURL("http://www.fullevil.com/bad1.html"),
       &listname, &prefixes, &full_hashes,
       Time::Now()));
-  EXPECT_EQ(full_hashes.size(), 1U);
+  ASSERT_EQ(1U, full_hashes.size());
   EXPECT_TRUE(
       SBFullHashEqual(full_hashes[0].hash,
                       SBFullHashForString("www.fullevil.com/bad1.html")));
@@ -1053,7 +1050,7 @@
       GURL("http://www.fullevil.com/bad2.html"),
       &listname, &prefixes, &full_hashes,
       Time::Now()));
-  EXPECT_EQ(full_hashes.size(), 1U);
+  ASSERT_EQ(1U, full_hashes.size());
   EXPECT_TRUE(
       SBFullHashEqual(full_hashes[0].hash,
                       SBFullHashForString("www.fullevil.com/bad2.html")));
@@ -1082,7 +1079,7 @@
       GURL("http://www.fullevil.com/bad2.html"),
       &listname, &prefixes, &full_hashes,
       Time::Now()));
-  EXPECT_EQ(full_hashes.size(), 1U);
+  ASSERT_EQ(1U, full_hashes.size());
   EXPECT_TRUE(
       SBFullHashEqual(full_hashes[0].hash,
                       SBFullHashForString("www.fullevil.com/bad2.html")));
diff --git a/chrome/browser/safe_browsing/safe_browsing_service_browsertest.cc b/chrome/browser/safe_browsing/safe_browsing_service_browsertest.cc
index 3e5cbce..f8f4441 100644
--- a/chrome/browser/safe_browsing/safe_browsing_service_browsertest.cc
+++ b/chrome/browser/safe_browsing/safe_browsing_service_browsertest.cc
@@ -122,16 +122,16 @@
                                  std::vector<SBFullHashResult>* full_hits,
                                  base::Time last_update) OVERRIDE {
     std::vector<GURL> urls(1, url);
-    return ContainsUrl(safe_browsing_util::kMalwareList,
-                       safe_browsing_util::kPhishingList,
+    return ContainsUrl(safe_browsing_util::MALWARE,
+                       safe_browsing_util::PHISH,
                        urls, prefix_hits, full_hits);
   }
   virtual bool ContainsDownloadUrl(
       const std::vector<GURL>& urls,
       std::vector<SBPrefix>* prefix_hits) OVERRIDE {
     std::vector<SBFullHashResult> full_hits;
-    bool found = ContainsUrl(safe_browsing_util::kBinUrlList,
-                             safe_browsing_util::kBinUrlList,
+    bool found = ContainsUrl(safe_browsing_util::BINURL,
+                             safe_browsing_util::BINURL,
                              urls, prefix_hits, &full_hits);
     if (!found)
       return false;
@@ -184,10 +184,10 @@
 
   // Fill up the database with test URL.
   void AddUrl(const GURL& url,
-              const std::string& list_name,
+              int list_id,
               const std::vector<SBPrefix>& prefix_hits,
               const std::vector<SBFullHashResult>& full_hits) {
-    badurls_[url.spec()].list_name = list_name;
+    badurls_[url.spec()].list_id = list_id;
     badurls_[url.spec()].prefix_hits = prefix_hits;
     badurls_[url.spec()].full_hits = full_hits;
   }
@@ -199,13 +199,13 @@
 
  private:
   struct Hits {
-    std::string list_name;
+    int list_id;
     std::vector<SBPrefix> prefix_hits;
     std::vector<SBFullHashResult> full_hits;
   };
 
-  bool ContainsUrl(const std::string& list_name0,
-                   const std::string& list_name1,
+  bool ContainsUrl(int list_id0,
+                   int list_id1,
                    const std::vector<GURL>& urls,
                    std::vector<SBPrefix>* prefix_hits,
                    std::vector<SBFullHashResult>* full_hits) {
@@ -218,8 +218,8 @@
       if (badurls_it == badurls_.end())
         continue;
 
-      if (badurls_it->second.list_name == list_name0 ||
-          badurls_it->second.list_name == list_name1) {
+      if (badurls_it->second.list_id == list_id0 ||
+          badurls_it->second.list_id == list_id1) {
         prefix_hits->insert(prefix_hits->end(),
                             badurls_it->second.prefix_hits.begin(),
                             badurls_it->second.prefix_hits.end());
@@ -368,24 +368,13 @@
   }
 
   static void GenUrlFullhashResult(const GURL& url,
-                                   const std::string& list_name,
-                                   int add_chunk_id,
+                                   int list_id,
                                    SBFullHashResult* full_hash) {
     std::string host;
     std::string path;
     safe_browsing_util::CanonicalizeUrl(url, &host, &path, NULL);
     full_hash->hash = SBFullHashForString(host + path);
-    full_hash->list_name = list_name;
-    full_hash->add_chunk_id = add_chunk_id;
-  }
-
-  static void GenDigestFullhashResult(const std::string& full_digest,
-                                      const std::string& list_name,
-                                      int add_chunk_id,
-                                      SBFullHashResult* full_hash) {
-    full_hash->hash = safe_browsing_util::StringToSBFullHash(full_digest);
-    full_hash->list_name = list_name;
-    full_hash->add_chunk_id = add_chunk_id;
+    full_hash->list_id = list_id;
   }
 
   virtual void SetUp() {
@@ -423,7 +412,7 @@
     // full hash is hit in database's local cache.
     std::vector<SBFullHashResult> empty_full_hits;
     TestSafeBrowsingDatabase* db = db_factory_.GetDb();
-    db->AddUrl(url, full_hash.list_name, prefix_hits, empty_full_hits);
+    db->AddUrl(url, full_hash.list_id, prefix_hits, empty_full_hits);
 
     TestProtocolManager* pm = pm_factory_.GetProtocolManager();
     pm->SetGetFullHashResponse(full_hash);
@@ -523,9 +512,7 @@
   // After adding the url to safebrowsing database and getfullhash result,
   // we should see the interstitial page.
   SBFullHashResult malware_full_hash;
-  int chunk_id = 0;
-  GenUrlFullhashResult(url, safe_browsing_util::kMalwareList, chunk_id,
-                       &malware_full_hash);
+  GenUrlFullhashResult(url, safe_browsing_util::MALWARE, &malware_full_hash);
   EXPECT_CALL(observer_,
               OnSafeBrowsingMatch(IsUnsafeResourceFor(url))).Times(1);
   EXPECT_CALL(observer_, OnSafeBrowsingHit(IsUnsafeResourceFor(url))).Times(1);
@@ -544,9 +531,7 @@
   // After adding the url to safebrowsing database and getfullhash result,
   // we should see the interstitial page.
   SBFullHashResult malware_full_hash;
-  int chunk_id = 0;
-  GenUrlFullhashResult(url, safe_browsing_util::kMalwareList, chunk_id,
-                       &malware_full_hash);
+  GenUrlFullhashResult(url, safe_browsing_util::MALWARE, &malware_full_hash);
   EXPECT_CALL(observer_,
               OnSafeBrowsingMatch(IsUnsafeResourceFor(url))).Times(1);
   EXPECT_CALL(observer_, OnSafeBrowsingHit(IsUnsafeResourceFor(url))).Times(1)
@@ -605,9 +590,8 @@
   // getfullhash result, we should not see the interstitial page since the
   // only malware was a prefetch target.
   SBFullHashResult malware_full_hash;
-  int chunk_id = 0;
-  GenUrlFullhashResult(malware_url, safe_browsing_util::kMalwareList,
-                       chunk_id, &malware_full_hash);
+  GenUrlFullhashResult(malware_url, safe_browsing_util::MALWARE,
+                       &malware_full_hash);
   SetupResponseForUrl(malware_url, malware_full_hash);
   ui_test_utils::NavigateToURL(browser(), url);
   EXPECT_FALSE(ShowingInterstitialPage());
@@ -691,9 +675,8 @@
   EXPECT_EQ(SB_THREAT_TYPE_SAFE, client->GetThreatType());
 
   SBFullHashResult full_hash_result;
-  int chunk_id = 0;
-  GenUrlFullhashResult(badbin_url, safe_browsing_util::kBinUrlList,
-                       chunk_id, &full_hash_result);
+  GenUrlFullhashResult(badbin_url, safe_browsing_util::BINURL,
+                       &full_hash_result);
   SetupResponseForUrl(badbin_url, full_hash_result);
 
   client->CheckDownloadUrl(badbin_urls);
@@ -718,9 +701,8 @@
   EXPECT_EQ(SB_THREAT_TYPE_SAFE, client->GetThreatType());
 
   SBFullHashResult full_hash_result;
-  int chunk_id = 0;
-  GenUrlFullhashResult(badbin_url, safe_browsing_util::kBinUrlList,
-                       chunk_id, &full_hash_result);
+  GenUrlFullhashResult(badbin_url, safe_browsing_util::BINURL,
+                       &full_hash_result);
   SetupResponseForUrl(badbin_url, full_hash_result);
 
   client->CheckDownloadUrl(badbin_urls);
@@ -735,9 +717,8 @@
 
   scoped_refptr<TestSBClient> client(new TestSBClient);
   SBFullHashResult full_hash_result;
-  int chunk_id = 0;
-  GenUrlFullhashResult(badbin_url, safe_browsing_util::kBinUrlList,
-                       chunk_id, &full_hash_result);
+  GenUrlFullhashResult(badbin_url, safe_browsing_util::BINURL,
+                       &full_hash_result);
   SetupResponseForUrl(badbin_url, full_hash_result);
   client->CheckDownloadUrl(badbin_urls);
 
diff --git a/chrome/browser/safe_browsing/safe_browsing_store.h b/chrome/browser/safe_browsing/safe_browsing_store.h
index b381743..0abe90b 100644
--- a/chrome/browser/safe_browsing/safe_browsing_store.h
+++ b/chrome/browser/safe_browsing/safe_browsing_store.h
@@ -74,7 +74,7 @@
 
 struct SBAddFullHash {
   int32 chunk_id;
-  int32 received;
+  int32 received;  // TODO(shess): Deprecate and remove.
   SBFullHash full_hash;
 
   SBAddFullHash(int32 id, base::Time r, const SBFullHash& h)
@@ -220,12 +220,7 @@
   // Pass the collected chunks through SBPRocessSubs() and commit to
   // permanent storage.  The resulting add prefixes and hashes will be
   // stored in |add_prefixes_result| and |add_full_hashes_result|.
-  // |pending_adds| is the set of full hashes which have been received
-  // since the previous update, and is provided as a convenience
-  // (could be written via WriteAddHash(), but that would flush the
-  // chunk to disk).
   virtual bool FinishUpdate(
-      const std::vector<SBAddFullHash>& pending_adds,
       safe_browsing::PrefixSetBuilder* builder,
       std::vector<SBAddFullHash>* add_full_hashes_result) = 0;
 
diff --git a/chrome/browser/safe_browsing/safe_browsing_store_file.cc b/chrome/browser/safe_browsing/safe_browsing_store_file.cc
index e89d412..0c8b2cd 100644
--- a/chrome/browser/safe_browsing/safe_browsing_store_file.cc
+++ b/chrome/browser/safe_browsing/safe_browsing_store_file.cc
@@ -434,12 +434,6 @@
 // aggregate operations on same.
 class StateInternal {
  public:
-  explicit StateInternal(const std::vector<SBAddFullHash>& pending_adds)
-    : add_full_hashes_(pending_adds.begin(), pending_adds.end()) {
-  }
-
-  StateInternal() {}
-
   // Append indicated amount of data from |fp|.
   bool AppendData(size_t add_prefix_count, size_t sub_prefix_count,
                   size_t add_hash_count, size_t sub_hash_count,
@@ -907,7 +901,6 @@
 }
 
 bool SafeBrowsingStoreFile::DoUpdate(
-    const std::vector<SBAddFullHash>& pending_adds,
     safe_browsing::PrefixSetBuilder* builder,
     std::vector<SBAddFullHash>* add_full_hashes_result) {
   DCHECK(file_.get() || empty_);
@@ -931,7 +924,7 @@
                        std::max(static_cast<int>(update_size / 1024), 1));
 
   // Chunk updates to integrate.
-  StateInternal new_state(pending_adds);
+  StateInternal new_state;
 
   // Read update chunks.
   for (int i = 0; i < chunks_written_; ++i) {
@@ -1173,13 +1166,12 @@
 }
 
 bool SafeBrowsingStoreFile::FinishUpdate(
-    const std::vector<SBAddFullHash>& pending_adds,
     safe_browsing::PrefixSetBuilder* builder,
     std::vector<SBAddFullHash>* add_full_hashes_result) {
   DCHECK(builder);
   DCHECK(add_full_hashes_result);
 
-  if (!DoUpdate(pending_adds, builder, add_full_hashes_result)) {
+  if (!DoUpdate(builder, add_full_hashes_result)) {
     CancelUpdate();
     return false;
   }
diff --git a/chrome/browser/safe_browsing/safe_browsing_store_file.h b/chrome/browser/safe_browsing/safe_browsing_store_file.h
index 22863f2..f54e39b 100644
--- a/chrome/browser/safe_browsing/safe_browsing_store_file.h
+++ b/chrome/browser/safe_browsing/safe_browsing_store_file.h
@@ -152,10 +152,7 @@
   virtual bool FinishChunk() OVERRIDE;
 
   virtual bool BeginUpdate() OVERRIDE;
-  // Store updates with pending add full hashes in file store and
-  // return |add_prefixes_result| and |add_full_hashes_result|.
   virtual bool FinishUpdate(
-      const std::vector<SBAddFullHash>& pending_adds,
       safe_browsing::PrefixSetBuilder* builder,
       std::vector<SBAddFullHash>* add_full_hashes_result) OVERRIDE;
   virtual bool CancelUpdate() OVERRIDE;
@@ -185,9 +182,9 @@
   static bool DeleteStore(const base::FilePath& basename);
 
  private:
-  // Update store file with pending full hashes.
-  virtual bool DoUpdate(const std::vector<SBAddFullHash>& pending_adds,
-                        safe_browsing::PrefixSetBuilder* builder,
+  // Does the actual update for FinishUpdate(), so that FinishUpdate() can clean
+  // up correctly in case of error.
+  virtual bool DoUpdate(safe_browsing::PrefixSetBuilder* builder,
                         std::vector<SBAddFullHash>* add_full_hashes_result);
 
   // Some very lucky users have an original-format file still in their
diff --git a/chrome/browser/safe_browsing/safe_browsing_store_file_unittest.cc b/chrome/browser/safe_browsing/safe_browsing_store_file_unittest.cc
index e17f7e1..864367f 100644
--- a/chrome/browser/safe_browsing/safe_browsing_store_file_unittest.cc
+++ b/chrome/browser/safe_browsing/safe_browsing_store_file_unittest.cc
@@ -83,13 +83,10 @@
     EXPECT_FALSE(store_->CheckAddChunk(kAddChunk3));
     EXPECT_FALSE(store_->CheckSubChunk(kAddChunk1));
 
-    std::vector<SBAddFullHash> pending_adds;
     safe_browsing::PrefixSetBuilder builder;
     std::vector<SBAddFullHash> add_full_hashes_result;
 
-    EXPECT_TRUE(store_->FinishUpdate(pending_adds,
-                                     &builder,
-                                     &add_full_hashes_result));
+    EXPECT_TRUE(store_->FinishUpdate(&builder, &add_full_hashes_result));
   }
 
   // Manually read the shard stride info from the file.
@@ -127,13 +124,10 @@
   EXPECT_FALSE(store_->CheckSubChunk(1));
   EXPECT_FALSE(store_->CheckSubChunk(-1));
 
-  std::vector<SBAddFullHash> pending_adds;
   safe_browsing::PrefixSetBuilder builder;
   std::vector<SBAddFullHash> add_full_hashes_result;
 
-  EXPECT_TRUE(store_->FinishUpdate(pending_adds,
-                                   &builder,
-                                   &add_full_hashes_result));
+  EXPECT_TRUE(store_->FinishUpdate(&builder, &add_full_hashes_result));
   EXPECT_TRUE(add_full_hashes_result.empty());
 
   std::vector<SBPrefix> prefixes_result;
@@ -159,12 +153,9 @@
   EXPECT_EQ(kSubChunk1, chunks[0]);
 
   {
-    std::vector<SBAddFullHash> pending_adds;
     safe_browsing::PrefixSetBuilder builder;
     std::vector<SBAddFullHash> add_full_hashes_result;
-    EXPECT_TRUE(store_->FinishUpdate(pending_adds,
-                                     &builder,
-                                     &add_full_hashes_result));
+    EXPECT_TRUE(store_->FinishUpdate(&builder, &add_full_hashes_result));
 
     std::vector<SBPrefix> prefixes_result;
     builder.GetPrefixSet()->GetPrefixes(&prefixes_result);
@@ -194,12 +185,9 @@
   EXPECT_TRUE(store_->CheckSubChunk(kSubChunk1));
 
   {
-    std::vector<SBAddFullHash> pending_adds;
     safe_browsing::PrefixSetBuilder builder;
     std::vector<SBAddFullHash> add_full_hashes_result;
-    EXPECT_TRUE(store_->FinishUpdate(pending_adds,
-                                     &builder,
-                                     &add_full_hashes_result));
+    EXPECT_TRUE(store_->FinishUpdate(&builder, &add_full_hashes_result));
 
     // Still has the expected contents.
     std::vector<SBPrefix> prefixes_result;
@@ -229,12 +217,9 @@
   EXPECT_TRUE(store_->FinishChunk());
 
   {
-    std::vector<SBAddFullHash> pending_adds;
     safe_browsing::PrefixSetBuilder builder;
     std::vector<SBAddFullHash> add_full_hashes_result;
-    EXPECT_TRUE(store_->FinishUpdate(pending_adds,
-                                     &builder,
-                                     &add_full_hashes_result));
+    EXPECT_TRUE(store_->FinishUpdate(&builder, &add_full_hashes_result));
 
     std::vector<SBPrefix> prefixes_result;
     builder.GetPrefixSet()->GetPrefixes(&prefixes_result);
@@ -254,12 +239,9 @@
   EXPECT_TRUE(store_->FinishChunk());
 
   {
-    std::vector<SBAddFullHash> pending_adds;
     safe_browsing::PrefixSetBuilder builder;
     std::vector<SBAddFullHash> add_full_hashes_result;
-    EXPECT_TRUE(store_->FinishUpdate(pending_adds,
-                                     &builder,
-                                     &add_full_hashes_result));
+    EXPECT_TRUE(store_->FinishUpdate(&builder, &add_full_hashes_result));
 
     std::vector<SBPrefix> prefixes_result;
     builder.GetPrefixSet()->GetPrefixes(&prefixes_result);
@@ -287,12 +269,9 @@
   EXPECT_TRUE(store_->FinishChunk());
 
   {
-    std::vector<SBAddFullHash> pending_adds;
     safe_browsing::PrefixSetBuilder builder;
     std::vector<SBAddFullHash> add_full_hashes_result;
-    EXPECT_TRUE(store_->FinishUpdate(pending_adds,
-                                     &builder,
-                                     &add_full_hashes_result));
+    EXPECT_TRUE(store_->FinishUpdate(&builder, &add_full_hashes_result));
 
     // Knocked out the chunk expected.
     std::vector<SBPrefix> prefixes_result;
@@ -311,12 +290,9 @@
   EXPECT_TRUE(store_->FinishChunk());
 
   {
-    std::vector<SBAddFullHash> pending_adds;
     safe_browsing::PrefixSetBuilder builder;
     std::vector<SBAddFullHash> add_full_hashes_result;
-    EXPECT_TRUE(store_->FinishUpdate(pending_adds,
-                                     &builder,
-                                     &add_full_hashes_result));
+    EXPECT_TRUE(store_->FinishUpdate(&builder, &add_full_hashes_result));
 
     std::vector<SBPrefix> prefixes_result;
     builder.GetPrefixSet()->GetPrefixes(&prefixes_result);
@@ -334,12 +310,9 @@
   EXPECT_TRUE(store_->FinishChunk());
 
   {
-    std::vector<SBAddFullHash> pending_adds;
     safe_browsing::PrefixSetBuilder builder;
     std::vector<SBAddFullHash> add_full_hashes_result;
-    EXPECT_TRUE(store_->FinishUpdate(pending_adds,
-                                     &builder,
-                                     &add_full_hashes_result));
+    EXPECT_TRUE(store_->FinishUpdate(&builder, &add_full_hashes_result));
 
     std::vector<SBPrefix> prefixes_result;
     builder.GetPrefixSet()->GetPrefixes(&prefixes_result);
@@ -399,12 +372,9 @@
   EXPECT_TRUE(store_->CheckSubChunk(kSubChunk2));
 
   {
-    std::vector<SBAddFullHash> pending_adds;
     safe_browsing::PrefixSetBuilder builder;
     std::vector<SBAddFullHash> add_full_hashes_result;
-    EXPECT_TRUE(store_->FinishUpdate(pending_adds,
-                                     &builder,
-                                     &add_full_hashes_result));
+    EXPECT_TRUE(store_->FinishUpdate(&builder, &add_full_hashes_result));
 
     std::vector<SBPrefix> prefixes_result;
     builder.GetPrefixSet()->GetPrefixes(&prefixes_result);
@@ -429,12 +399,9 @@
   store_->DeleteSubChunk(kSubChunk2);
 
   {
-    std::vector<SBAddFullHash> pending_adds;
     safe_browsing::PrefixSetBuilder builder;
     std::vector<SBAddFullHash> add_full_hashes_result;
-    EXPECT_TRUE(store_->FinishUpdate(pending_adds,
-                                     &builder,
-                                     &add_full_hashes_result));
+    EXPECT_TRUE(store_->FinishUpdate(&builder, &add_full_hashes_result));
   }
 
   // Expect no more chunks.
@@ -445,12 +412,9 @@
   EXPECT_FALSE(store_->CheckSubChunk(kSubChunk2));
 
   {
-    std::vector<SBAddFullHash> pending_adds;
     safe_browsing::PrefixSetBuilder builder;
     std::vector<SBAddFullHash> add_full_hashes_result;
-    EXPECT_TRUE(store_->FinishUpdate(pending_adds,
-                                     &builder,
-                                     &add_full_hashes_result));
+    EXPECT_TRUE(store_->FinishUpdate(&builder, &add_full_hashes_result));
 
     std::vector<SBPrefix> prefixes_result;
     builder.GetPrefixSet()->GetPrefixes(&prefixes_result);
@@ -505,12 +469,11 @@
 
   // Can successfully open and read the store.
   {
-    std::vector<SBAddFullHash> pending_adds;
     std::vector<SBPrefix> orig_prefixes;
     std::vector<SBAddFullHash> orig_hashes;
     safe_browsing::PrefixSetBuilder builder;
     ASSERT_TRUE(store_->BeginUpdate());
-    EXPECT_TRUE(store_->FinishUpdate(pending_adds, &builder, &orig_hashes));
+    EXPECT_TRUE(store_->FinishUpdate(&builder, &orig_hashes));
     builder.GetPrefixSet()->GetPrefixes(&orig_prefixes);
     EXPECT_GT(orig_prefixes.size(), 0U);
     EXPECT_GT(orig_hashes.size(), 0U);
@@ -533,10 +496,9 @@
   std::vector<SBAddFullHash> add_hashes;
   corruption_detected_ = false;
   {
-    std::vector<SBAddFullHash> pending_adds;
     safe_browsing::PrefixSetBuilder builder;
     ASSERT_TRUE(store_->BeginUpdate());
-    EXPECT_FALSE(store_->FinishUpdate(pending_adds, &builder, &add_hashes));
+    EXPECT_FALSE(store_->FinishUpdate(&builder, &add_hashes));
     EXPECT_TRUE(corruption_detected_);
   }
 
@@ -668,9 +630,7 @@
 
   safe_browsing::PrefixSetBuilder builder;
   std::vector<SBAddFullHash> add_full_hashes_result;
-  EXPECT_TRUE(store_->FinishUpdate(std::vector<SBAddFullHash>(),
-                                   &builder,
-                                   &add_full_hashes_result));
+  EXPECT_TRUE(store_->FinishUpdate(&builder, &add_full_hashes_result));
 
   SBAddPrefixes add_prefixes;
   EXPECT_TRUE(store_->GetAddPrefixes(&add_prefixes));
@@ -715,12 +675,9 @@
     }
     EXPECT_TRUE(store_->FinishChunk());
 
-    std::vector<SBAddFullHash> pending_adds;
     safe_browsing::PrefixSetBuilder builder;
     std::vector<SBAddFullHash> add_full_hashes_result;
-    EXPECT_TRUE(store_->FinishUpdate(pending_adds,
-                                     &builder,
-                                     &add_full_hashes_result));
+    EXPECT_TRUE(store_->FinishUpdate(&builder, &add_full_hashes_result));
 
     SBAddPrefixes add_prefixes;
     EXPECT_TRUE(store_->GetAddPrefixes(&add_prefixes));
@@ -745,12 +702,9 @@
     EXPECT_FALSE(store_->CheckAddChunk(chunk_id + 1));
     store_->DeleteAddChunk(chunk_id);
 
-    std::vector<SBAddFullHash> pending_adds;
     safe_browsing::PrefixSetBuilder builder;
     std::vector<SBAddFullHash> add_full_hashes_result;
-    EXPECT_TRUE(store_->FinishUpdate(pending_adds,
-                                     &builder,
-                                     &add_full_hashes_result));
+    EXPECT_TRUE(store_->FinishUpdate(&builder, &add_full_hashes_result));
 
     // New stride should be the same, or shifted one left.
     const uint32 new_shard_stride = ReadStride();
@@ -823,12 +777,9 @@
   EXPECT_TRUE(store_->FinishChunk());
 
   {
-    std::vector<SBAddFullHash> pending_adds;
     safe_browsing::PrefixSetBuilder builder;
     std::vector<SBAddFullHash> add_full_hashes_result;
-    EXPECT_TRUE(store_->FinishUpdate(pending_adds,
-                                     &builder,
-                                     &add_full_hashes_result));
+    EXPECT_TRUE(store_->FinishUpdate(&builder, &add_full_hashes_result));
 
     // The sub'ed prefix and hash are gone.
     std::vector<SBPrefix> prefixes_result;
@@ -902,12 +853,9 @@
   EXPECT_TRUE(store_->FinishChunk());
 
   {
-    std::vector<SBAddFullHash> pending_adds;
     safe_browsing::PrefixSetBuilder builder;
     std::vector<SBAddFullHash> add_full_hashes_result;
-    EXPECT_TRUE(store_->FinishUpdate(pending_adds,
-                                     &builder,
-                                     &add_full_hashes_result));
+    EXPECT_TRUE(store_->FinishUpdate(&builder, &add_full_hashes_result));
 
     // The sub'ed prefix and hash are gone.
     std::vector<SBPrefix> prefixes_result;
diff --git a/chrome/browser/safe_browsing/safe_browsing_util.cc b/chrome/browser/safe_browsing/safe_browsing_util.cc
index 40732d6..d375f90 100644
--- a/chrome/browser/safe_browsing/safe_browsing_util.cc
+++ b/chrome/browser/safe_browsing/safe_browsing_util.cc
@@ -494,22 +494,6 @@
   return -1;
 }
 
-bool IsPhishingList(const std::string& list_name) {
-  return list_name.compare(kPhishingList) == 0;
-}
-
-bool IsMalwareList(const std::string& list_name) {
-  return list_name.compare(kMalwareList) == 0;
-}
-
-bool IsBadbinurlList(const std::string& list_name) {
-  return list_name.compare(kBinUrlList) == 0;
-}
-
-bool IsExtensionList(const std::string& list_name) {
-  return list_name.compare(kExtensionBlacklist) == 0;
-}
-
 GURL GeneratePhishingReportUrl(const std::string& report_page,
                                const std::string& url_to_report,
                                bool is_client_side_detection) {
diff --git a/chrome/browser/safe_browsing/safe_browsing_util.h b/chrome/browser/safe_browsing/safe_browsing_util.h
index 783369e..3304989 100644
--- a/chrome/browser/safe_browsing/safe_browsing_util.h
+++ b/chrome/browser/safe_browsing/safe_browsing_util.h
@@ -105,8 +105,8 @@
 // Used when we get a gethash response.
 struct SBFullHashResult {
   SBFullHash hash;
-  std::string list_name;
-  int add_chunk_id;
+  // TODO(shess): Refactor to allow ListType here.
+  int list_id;
 };
 
 // Contains information about a list in the database.
@@ -353,11 +353,6 @@
 int GetUrlHashIndex(const GURL& url,
                     const std::vector<SBFullHashResult>& full_hashes);
 
-bool IsPhishingList(const std::string& list_name);
-bool IsMalwareList(const std::string& list_name);
-bool IsBadbinurlList(const std::string& list_name);
-bool IsExtensionList(const std::string& list_name);
-
 GURL GeneratePhishingReportUrl(const std::string& report_page,
                                const std::string& url_to_report,
                                bool is_client_side_detection);
diff --git a/chrome/browser/search/hotword_service.cc b/chrome/browser/search/hotword_service.cc
index b2db1de..ac25512 100644
--- a/chrome/browser/search/hotword_service.cc
+++ b/chrome/browser/search/hotword_service.cc
@@ -131,8 +131,10 @@
       enabled_state = DISABLED;
   } else {
     // If the preference has not been set the hotword extension should
-    // not be running.
-    DisableHotwordExtension(GetExtensionService(profile_));
+    // not be running. However, this should only be done if auto-install
+    // is enabled which is gated through the IsHotwordAllowed check.
+    if (IsHotwordAllowed())
+      DisableHotwordExtension(GetExtensionService(profile_));
   }
   UMA_HISTOGRAM_ENUMERATION("Hotword.Enabled", enabled_state,
                             NUM_HOTWORD_ENABLED_METRICS);
@@ -165,7 +167,11 @@
     const extensions::Extension* extension =
         content::Details<const extensions::InstalledExtensionInfo>(details)
               ->extension;
-    if (extension->id() == extension_misc::kHotwordExtensionId &&
+    // Disabling the extension automatically on install should only occur
+    // if the user is in the field trial for auto-install which is gated
+    // by the IsHotwordAllowed check.
+    if (IsHotwordAllowed() &&
+        extension->id() == extension_misc::kHotwordExtensionId &&
         !profile_->GetPrefs()->GetBoolean(prefs::kHotwordSearchEnabled)) {
       DisableHotwordExtension(GetExtensionService(profile_));
       // Once the extension is disabled, it will not be enabled until the
diff --git a/chrome/browser/search/local_ntp_source.cc b/chrome/browser/search/local_ntp_source.cc
index 8944ac3..f6f649c 100644
--- a/chrome/browser/search/local_ntp_source.cc
+++ b/chrome/browser/search/local_ntp_source.cc
@@ -19,11 +19,13 @@
 #include "chrome/common/url_constants.h"
 #include "grit/browser_resources.h"
 #include "grit/generated_resources.h"
+#include "grit/theme_resources.h"
 #include "grit/ui_resources.h"
 #include "net/url_request/url_request.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/resource/resource_bundle.h"
 #include "ui/base/webui/jstemplate_builder.h"
+#include "ui/base/webui/web_ui_util.h"
 #include "url/gurl.h"
 
 namespace {
@@ -46,10 +48,9 @@
   { "images/close_2_hover.png", IDR_CLOSE_2_H, "image/png" },
   { "images/close_2_active.png", IDR_CLOSE_2_P, "image/png" },
   { "images/close_2_white.png", IDR_CLOSE_2_MASK, "image/png" },
-  { "images/2x/google_logo.png",
-    IDR_LOCAL_NTP_IMAGES_2X_LOGO_PNG, "image/png" },
-  { "images/2x/white_google_logo.png",
-    IDR_LOCAL_NTP_IMAGES_2X_WHITE_LOGO_PNG, "image/png" },
+  { "images/google_logo.png", IDR_LOCAL_NTP_IMAGES_LOGO_PNG, "image/png" },
+  { "images/white_google_logo.png",
+    IDR_LOCAL_NTP_IMAGES_WHITE_LOGO_PNG, "image/png" },
 };
 
 // Strips any query parameters from the specified path.
@@ -120,6 +121,11 @@
   return config_data_js;
 }
 
+std::string GetLocalNtpPath() {
+  return std::string(chrome::kChromeSearchScheme) + "://" +
+         std::string(chrome::kChromeSearchLocalNtpHost) + "/";
+}
+
 }  // namespace
 
 LocalNtpSource::LocalNtpSource(Profile* profile) : profile_(profile) {
@@ -143,11 +149,15 @@
     callback.Run(base::RefCountedString::TakeString(&config_data_js));
     return;
   }
+  ui::ScaleFactor scale_factor;
+  std::string filename;
+  webui::ParsePathAndScale(
+      GURL(GetLocalNtpPath() + stripped_path), &filename, &scale_factor);
   for (size_t i = 0; i < arraysize(kResources); ++i) {
-    if (stripped_path == kResources[i].filename) {
+    if (filename == kResources[i].filename) {
       scoped_refptr<base::RefCountedStaticMemory> response(
-          ResourceBundle::GetSharedInstance().LoadDataResourceBytes(
-              kResources[i].identifier));
+          ResourceBundle::GetSharedInstance().LoadDataResourceBytesForScale(
+              kResources[i].identifier, scale_factor));
       callback.Run(response.get());
       return;
     }
@@ -172,8 +182,8 @@
     return false;
 
   if (request->url().SchemeIs(chrome::kChromeSearchScheme)) {
-    DCHECK(StartsWithASCII(request->url().path(), "/", true));
-    std::string filename = request->url().path().substr(1);
+    std::string filename;
+    webui::ParsePathAndScale(request->url(), &filename, NULL);
     for (size_t i = 0; i < arraysize(kResources); ++i) {
       if (filename == kResources[i].filename)
         return true;
diff --git a/chrome/browser/search_engines/template_url.cc b/chrome/browser/search_engines/template_url.cc
index cceea6c..f57c3bc 100644
--- a/chrome/browser/search_engines/template_url.cc
+++ b/chrome/browser/search_engines/template_url.cc
@@ -512,8 +512,7 @@
             params.substr(value.begin, value.len),
             net::UnescapeRule::SPACES |
                 net::UnescapeRule::URL_SPECIAL_CHARS |
-                net::UnescapeRule::REPLACE_PLUS_WITH_SPACE,
-            NULL);
+                net::UnescapeRule::REPLACE_PLUS_WITH_SPACE);
         if (search_terms_component)
           *search_terms_component = search_term_key_location_;
         if (search_terms_position)
diff --git a/chrome/browser/search_engines/template_url_service.cc b/chrome/browser/search_engines/template_url_service.cc
index 7138828..8f9f277 100644
--- a/chrome/browser/search_engines/template_url_service.cc
+++ b/chrome/browser/search_engines/template_url_service.cc
@@ -520,6 +520,8 @@
   DCHECK(template_url);
   DCHECK_EQ(kInvalidTemplateURLID, template_url->id());
   DCHECK(info);
+  DCHECK_EQ(info->wants_to_be_default_engine,
+            template_url->show_in_default_list());
   template_url->extension_info_.swap(info);
   DCHECK(!FindTemplateURLForExtension(
       template_url->GetExtensionId(),
diff --git a/chrome/browser/search_engines/template_url_service_android.h b/chrome/browser/search_engines/template_url_service_android.h
index ca06bf7..69f1232 100644
--- a/chrome/browser/search_engines/template_url_service_android.h
+++ b/chrome/browser/search_engines/template_url_service_android.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_BROWSER_SEARCH_ENGINES_TEMPLATE_URL_SERVICE_ANDROID_H_
 #define CHROME_BROWSER_SEARCH_ENGINES_TEMPLATE_URL_SERVICE_ANDROID_H_
 
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/android/scoped_java_ref.h"
 #include "base/memory/scoped_ptr.h"
 #include "chrome/browser/search_engines/template_url_service.h"
diff --git a/chrome/browser/search_engines/template_url_service_unittest.cc b/chrome/browser/search_engines/template_url_service_unittest.cc
index 5338d97..9b64145 100644
--- a/chrome/browser/search_engines/template_url_service_unittest.cc
+++ b/chrome/browser/search_engines/template_url_service_unittest.cc
@@ -97,6 +97,7 @@
     const std::string& alternate_url,
     const std::string& favicon_url,
     bool safe_for_autoreplace,
+    bool show_in_default_list,
     const std::string& encodings,
     Time date_created,
     Time last_modified) {
@@ -109,6 +110,7 @@
     data.alternate_urls.push_back(alternate_url);
   data.favicon_url = GURL(favicon_url);
   data.safe_for_autoreplace = safe_for_autoreplace;
+  data.show_in_default_list = show_in_default_list;
   base::SplitString(encodings, ';', &data.input_encodings);
   data.date_created = date_created;
   data.last_modified = last_modified;
@@ -129,7 +131,7 @@
     Time last_modified) {
   TemplateURL* t_url = CreateKeywordWithDate(
       model, short_name, keyword, url, suggest_url, alternate_url,favicon_url,
-      safe_for_autoreplace, encodings, date_created, last_modified);
+      safe_for_autoreplace, false, encodings, date_created, last_modified);
   model->Add(t_url);
   EXPECT_NE(0, t_url->id());
   return t_url;
@@ -1589,7 +1591,7 @@
   TemplateURL* ext_dse = CreateKeywordWithDate(
       model(), "ext", "ext", "http://www.search.com/s?q={searchTerms}",
       std::string(), std::string(), std::string(),
-      true, "UTF-8", Time(), Time());
+      true, true, "UTF-8", Time(), Time());
   scoped_ptr<AssociatedExtensionInfo> extension_info(
       new AssociatedExtensionInfo);
   extension_info->wants_to_be_default_engine = true;
@@ -1614,7 +1616,7 @@
   TemplateURL* ext_dse = CreateKeywordWithDate(
       model(), "ext1", "ext1", "http://www.ext1.com/s?q={searchTerms}",
       std::string(), std::string(), std::string(),
-      true, "UTF-8", Time(), Time());
+      true, false, "UTF-8", Time(), Time());
   scoped_ptr<AssociatedExtensionInfo> extension_info(
       new AssociatedExtensionInfo);
   extension_info->wants_to_be_default_engine = false;
@@ -1625,7 +1627,7 @@
   ext_dse = CreateKeywordWithDate(
       model(), "ext2", "ext2", "http://www.ext2.com/s?q={searchTerms}",
       std::string(), std::string(), std::string(),
-      true, "UTF-8", Time(), Time());
+      true, true, "UTF-8", Time(), Time());
   extension_info.reset(new AssociatedExtensionInfo);
   extension_info->wants_to_be_default_engine = true;
   extension_info->extension_id = "ext2";
@@ -1672,7 +1674,7 @@
   TemplateURL* ext_dse = CreateKeywordWithDate(
       model(), "ext1", "ext1", "http://www.ext1.com/s?q={searchTerms}",
       std::string(), std::string(), std::string(),
-      true, "UTF-8", Time(), Time());
+      true, true, "UTF-8", Time(), Time());
   scoped_ptr<AssociatedExtensionInfo> extension_info(
       new AssociatedExtensionInfo);
   extension_info->wants_to_be_default_engine = true;
diff --git a/chrome/browser/service_process/service_process_control.cc b/chrome/browser/service_process/service_process_control.cc
index dbac06c..b9cfa57 100644
--- a/chrome/browser/service_process/service_process_control.cc
+++ b/chrome/browser/service_process/service_process_control.cc
@@ -21,6 +21,7 @@
 #include "chrome/common/chrome_switches.h"
 #include "chrome/common/service_messages.h"
 #include "chrome/common/service_process_util.h"
+#include "components/cloud_devices/common/cloud_devices_switches.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/notification_service.h"
 #include "content/public/common/child_process_host.h"
@@ -135,8 +136,9 @@
                               switches::kServiceProcess);
 
   static const char* const kSwitchesToCopy[] = {
-    switches::kCloudPrintServiceURL,
     switches::kCloudPrintSetupProxy,
+    switches::kCloudPrintURL,
+    switches::kCloudPrintXmppEndpoint,
 #if defined(OS_WIN)
     switches::kEnableCloudPrintXps,
 #endif
diff --git a/chrome/browser/services/gcm/gcm_client_mock.cc b/chrome/browser/services/gcm/gcm_client_mock.cc
index 3b58cda..d924238 100644
--- a/chrome/browser/services/gcm/gcm_client_mock.cc
+++ b/chrome/browser/services/gcm/gcm_client_mock.cc
@@ -97,6 +97,12 @@
                  message));
 }
 
+void GCMClientMock::SetRecording(bool recording) {
+}
+
+void GCMClientMock::ClearActivityLogs() {
+}
+
 GCMClient::GCMStatistics GCMClientMock::GetStatistics() const {
   return GCMClient::GCMStatistics();
 }
diff --git a/chrome/browser/services/gcm/gcm_client_mock.h b/chrome/browser/services/gcm/gcm_client_mock.h
index 2cdc104..ce080ce 100644
--- a/chrome/browser/services/gcm/gcm_client_mock.h
+++ b/chrome/browser/services/gcm/gcm_client_mock.h
@@ -48,6 +48,8 @@
   virtual void Send(const std::string& app_id,
                     const std::string& receiver_id,
                     const OutgoingMessage& message) OVERRIDE;
+  virtual void SetRecording(bool recording) OVERRIDE;
+  virtual void ClearActivityLogs() OVERRIDE;
   virtual GCMStatistics GetStatistics() const OVERRIDE;
 
   // Initiate the loading that has been delayed.
diff --git a/chrome/browser/services/gcm/gcm_profile_service.cc b/chrome/browser/services/gcm/gcm_profile_service.cc
index cf7e1b5..f93b427 100644
--- a/chrome/browser/services/gcm/gcm_profile_service.cc
+++ b/chrome/browser/services/gcm/gcm_profile_service.cc
@@ -176,7 +176,8 @@
   void Send(const std::string& app_id,
             const std::string& receiver_id,
             const GCMClient::OutgoingMessage& message);
-  void RequestGCMStatistics();
+  void GetGCMStatistics(bool clear_logs);
+  void SetGCMRecording(bool recording);
 
   // For testing purpose. Can be called from UI thread. Use with care.
   GCMClient* gcm_client_for_testing() const { return gcm_client_.get(); }
@@ -372,19 +373,38 @@
   gcm_client_->Send(app_id, receiver_id, message);
 }
 
-void GCMProfileService::IOWorker::RequestGCMStatistics() {
+void GCMProfileService::IOWorker::GetGCMStatistics(bool clear_logs) {
   DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
   gcm::GCMClient::GCMStatistics stats;
 
   if (gcm_client_.get()) {
-    stats.gcm_client_created = true;
+    if (clear_logs)
+      gcm_client_->ClearActivityLogs();
     stats = gcm_client_->GetStatistics();
   }
 
   content::BrowserThread::PostTask(
       content::BrowserThread::UI,
       FROM_HERE,
-      base::Bind(&GCMProfileService::RequestGCMStatisticsFinished,
+      base::Bind(&GCMProfileService::GetGCMStatisticsFinished,
+                 service_,
+                 stats));
+}
+
+void GCMProfileService::IOWorker::SetGCMRecording(bool recording) {
+  DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
+  gcm::GCMClient::GCMStatistics stats;
+
+  if (gcm_client_.get()) {
+    gcm_client_->SetRecording(recording);
+    stats = gcm_client_->GetStatistics();
+    stats.gcm_client_created = true;
+  }
+
+  content::BrowserThread::PostTask(
+      content::BrowserThread::UI,
+      FROM_HERE,
+      base::Bind(&GCMProfileService::GetGCMStatisticsFinished,
                  service_,
                  stats));
 }
@@ -688,8 +708,8 @@
   return gcm_client_ready_;
 }
 
-void GCMProfileService::RequestGCMStatistics(
-    RequestGCMStatisticsCallback callback) {
+void GCMProfileService::GetGCMStatistics(
+    GetGCMStatisticsCallback callback, bool clear_logs) {
   DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
   DCHECK(!callback.is_null());
 
@@ -697,8 +717,22 @@
   content::BrowserThread::PostTask(
       content::BrowserThread::IO,
       FROM_HERE,
-      base::Bind(&GCMProfileService::IOWorker::RequestGCMStatistics,
-                 io_worker_));
+      base::Bind(&GCMProfileService::IOWorker::GetGCMStatistics,
+                 io_worker_,
+                 clear_logs));
+}
+
+void GCMProfileService::SetGCMRecording(
+    GetGCMStatisticsCallback callback, bool recording) {
+  DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+
+  request_gcm_statistics_callback_ = callback;
+  content::BrowserThread::PostTask(
+      content::BrowserThread::IO,
+      FROM_HERE,
+      base::Bind(&GCMProfileService::IOWorker::SetGCMRecording,
+                 io_worker_,
+                 recording));
 }
 
 void GCMProfileService::Observe(int type,
@@ -904,10 +938,9 @@
   return iter == app_handlers_.end() ? &default_app_handler_ : iter->second;
 }
 
-void GCMProfileService::RequestGCMStatisticsFinished(
+void GCMProfileService::GetGCMStatisticsFinished(
     GCMClient::GCMStatistics stats) {
   DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
-
   request_gcm_statistics_callback_.Run(stats);
 }
 
diff --git a/chrome/browser/services/gcm/gcm_profile_service.h b/chrome/browser/services/gcm/gcm_profile_service.h
index 3817b0e..b93bfa2 100644
--- a/chrome/browser/services/gcm/gcm_profile_service.h
+++ b/chrome/browser/services/gcm/gcm_profile_service.h
@@ -52,7 +52,7 @@
                               GCMClient::Result result)> SendCallback;
   typedef base::Callback<void(GCMClient::Result result)> UnregisterCallback;
   typedef base::Callback<void(const GCMClient::GCMStatistics& stats)>
-      RequestGCMStatisticsCallback;
+      GetGCMStatisticsCallback;
 
   // Any change made to this enum should have corresponding change in the
   // GetGCMEnabledStateString(...) function.
@@ -129,9 +129,14 @@
   // Returns true if the gcm client is ready.
   bool IsGCMClientReady() const;
 
-  // Get GCM client internal states and statistics. If it has not been created
-  // then stats won't be modified.
-  void RequestGCMStatistics(RequestGCMStatisticsCallback callback);
+  // Get GCM client internal states and statistics.
+  // If clear_logs is true then activity logs will be cleared before the stats
+  // are returned.
+  void GetGCMStatistics(GetGCMStatisticsCallback callback,
+                        bool clear_logs);
+
+  // Enables/disables GCM activity recording, and then returns the stats.
+  void SetGCMRecording(GetGCMStatisticsCallback callback, bool recording);
 
  private:
   friend class GCMProfileServiceTestConsumer;
@@ -199,7 +204,7 @@
   // Returns the handler for the given app.
   GCMAppHandler* GetAppHandler(const std::string& app_id);
 
-  void RequestGCMStatisticsFinished(GCMClient::GCMStatistics stats);
+  void GetGCMStatisticsFinished(GCMClient::GCMStatistics stats);
 
   // The profile which owns this object.
   Profile* profile_;
@@ -233,8 +238,8 @@
   // Callback map (from <app_id, message_id> to callback) for Send.
   std::map<std::pair<std::string, std::string>, SendCallback> send_callbacks_;
 
-  // Callback for RequestGCMStatistics.
-  RequestGCMStatisticsCallback request_gcm_statistics_callback_;
+  // Callback for GetGCMStatistics.
+  GetGCMStatisticsCallback request_gcm_statistics_callback_;
 
   // Used to pass a weak pointer to the IO worker.
   base::WeakPtrFactory<GCMProfileService> weak_ptr_factory_;
diff --git a/chrome/browser/sessions/session_backend.cc b/chrome/browser/sessions/session_backend.cc
index fa51c88..9c214c8 100644
--- a/chrome/browser/sessions/session_backend.cc
+++ b/chrome/browser/sessions/session_backend.cc
@@ -333,12 +333,10 @@
         return false;
       }
     }
-#if defined(OS_CHROMEOS)
-    // TODO(gspencer): Remove this once we find a better place to do it.
-    // See issue http://crbug.com/245015
-    file->Flush();
-#endif
   }
+#if defined(OS_CHROMEOS)
+  file->Flush();
+#endif
   return true;
 }
 
diff --git a/chrome/browser/sessions/session_restore.cc b/chrome/browser/sessions/session_restore.cc
index adfd8f9..fc6c0f2 100644
--- a/chrome/browser/sessions/session_restore.cc
+++ b/chrome/browser/sessions/session_restore.cc
@@ -56,10 +56,6 @@
 #include "chrome/browser/chromeos/boot_times_loader.h"
 #endif
 
-#if defined(OS_WIN)
-#include "win8/util/win8_util.h"
-#endif
-
 using content::NavigationController;
 using content::RenderWidgetHost;
 using content::WebContents;
@@ -833,8 +829,8 @@
         browser = browser_;
       } else {
 #if defined(OS_CHROMEOS)
-    chromeos::BootTimesLoader::Get()->AddLoginTimeMarker(
-        "SessionRestore-CreateRestoredBrowser-Start", false);
+        chromeos::BootTimesLoader::Get()->AddLoginTimeMarker(
+            "SessionRestore-CreateRestoredBrowser-Start", false);
 #endif
         // Show the first window if none are visible.
         ui::WindowShowState show_state = (*i)->show_state;
@@ -842,36 +838,14 @@
           show_state = ui::SHOW_STATE_NORMAL;
           has_visible_browser = true;
         }
-        browser = NULL;
-#if defined(OS_WIN)
-        if (win8::IsSingleWindowMetroMode()) {
-          // We don't want to add tabs to the off the record browser.
-          if (browser_ && !browser_->profile()->IsOffTheRecord()) {
-            browser = browser_;
-          } else {
-            browser = last_browser;
-            // last_browser should never be off the record either.
-            // We don't set browser higher above when browser_ is offtherecord,
-            // and CreateRestoredBrowser below, is never created offtherecord.
-            DCHECK(!browser || !browser->profile()->IsOffTheRecord());
-          }
-          // Metro should only have tabbed browsers.
-          // It never creates any non-tabbed browser, and thus should never
-          // restore non-tabbed items...
-          DCHECK(!browser || browser->is_type_tabbed());
-          DCHECK((*i)->type == Browser::TYPE_TABBED);
-        }
-#endif
-        if (!browser) {
-          browser = CreateRestoredBrowser(
-              static_cast<Browser::Type>((*i)->type),
-              (*i)->bounds,
-              show_state,
-              (*i)->app_name);
-        }
+        browser = CreateRestoredBrowser(
+            static_cast<Browser::Type>((*i)->type),
+            (*i)->bounds,
+            show_state,
+            (*i)->app_name);
 #if defined(OS_CHROMEOS)
-    chromeos::BootTimesLoader::Get()->AddLoginTimeMarker(
-        "SessionRestore-CreateRestoredBrowser-End", false);
+        chromeos::BootTimesLoader::Get()->AddLoginTimeMarker(
+            "SessionRestore-CreateRestoredBrowser-End", false);
 #endif
       }
       if ((*i)->type == Browser::TYPE_TABBED)
@@ -918,19 +892,8 @@
     chromeos::BootTimesLoader::Get()->AddLoginTimeMarker(
         "SessionRestore-CreatingTabs-End", false);
 #endif
-    if (browser_to_activate) {
+    if (browser_to_activate)
       browser_to_activate->window()->Activate();
-#if defined(OS_WIN)
-      // On Win8 Metro, we merge all browsers together, so if we need to
-      // activate one of the previously separated window, we need to activate
-      // the tab. Also, selected_tab_to_activate can be -1 if we clobbered the
-      // tab that would have been activated.
-      // In that case we'll leave activation to last tab.
-      // The only current usage of clobber is for crash recovery, so it's fine.
-      if (win8::IsSingleWindowMetroMode() && selected_tab_to_activate != -1)
-        ShowBrowser(browser_to_activate, selected_tab_to_activate);
-#endif
-    }
 
     // If last_browser is NULL and urls_to_open_ is non-empty,
     // FinishedTabCreation will create a new TabbedBrowser and add the urls to
@@ -979,18 +942,27 @@
     if (initial_tab_count == 0) {
       for (int i = 0; i < static_cast<int>(window.tabs.size()); ++i) {
         const SessionTab& tab = *(window.tabs[i]);
+
         // Loads are scheduled for each restored tab unless the tab is going to
         // be selected as ShowBrowser() will load the selected tab.
-        if (i == selected_tab_index) {
-          ShowBrowser(browser,
-                      browser->tab_strip_model()->GetIndexOfWebContents(
-                          RestoreTab(tab, i, browser, false)));
-          tab_loader_->TabIsLoading(
-              &browser->tab_strip_model()->GetActiveWebContents()->
-                  GetController());
-        } else {
-          RestoreTab(tab, i, browser, true);
-        }
+        bool is_not_selected_tab = (i != selected_tab_index);
+        WebContents* restored_tab =
+            RestoreTab(tab, i, browser, is_not_selected_tab);
+
+        // RestoreTab can return NULL if |tab| doesn't have valid data.
+        if (!restored_tab)
+          continue;
+
+        // If this isn't the selected tab, there's nothing else to do.
+        if (is_not_selected_tab)
+          continue;
+
+        ShowBrowser(
+            browser,
+            browser->tab_strip_model()->GetIndexOfWebContents(restored_tab));
+        tab_loader_->TabIsLoading(&browser->tab_strip_model()
+                                       ->GetActiveWebContents()
+                                       ->GetController());
       }
     } else {
       // If the browser already has tabs, we want to restore the new ones after
diff --git a/chrome/browser/sessions/session_restore_browsertest.cc b/chrome/browser/sessions/session_restore_browsertest.cc
index 9a9f243..c3b7b76 100644
--- a/chrome/browser/sessions/session_restore_browsertest.cc
+++ b/chrome/browser/sessions/session_restore_browsertest.cc
@@ -625,6 +625,11 @@
   }
   window.tabs.push_back(&tab2);
 
+  // Leave tab3 empty. Should have no effect on restored session, but simulates
+  // partially complete foreign session data.
+  SessionTab tab3;
+  window.tabs.push_back(&tab3);
+
   session.push_back(static_cast<const SessionWindow*>(&window));
   ui_test_utils::BrowserAddedObserver window_observer;
   std::vector<Browser*> browsers =
diff --git a/chrome/browser/sessions/session_restore_browsertest_chromeos.cc b/chrome/browser/sessions/session_restore_browsertest_chromeos.cc
new file mode 100644
index 0000000..b8961e9
--- /dev/null
+++ b/chrome/browser/sessions/session_restore_browsertest_chromeos.cc
@@ -0,0 +1,183 @@
+// Copyright (c) 2012 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 <list>
+#include <vector>
+
+#include "base/prefs/pref_service.h"
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/chrome_notification_types.h"
+#include "chrome/browser/defaults.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/browser_iterator.h"
+#include "chrome/browser/ui/browser_window.h"
+#include "chrome/browser/ui/host_desktop.h"
+#include "chrome/common/chrome_paths.h"
+#include "chrome/common/pref_names.h"
+#include "chrome/test/base/in_process_browser_test.h"
+#include "components/sessions/serialized_navigation_entry_test_helper.h"
+#include "content/public/browser/notification_service.h"
+#include "content/public/test/test_utils.h"
+
+namespace {
+const char* test_app_popup_name1 = "TestApp1";
+const char* test_app_popup_name2 = "TestApp2";
+}
+
+class SessionRestoreTestChromeOS : public InProcessBrowserTest {
+ public:
+  virtual ~SessionRestoreTestChromeOS() {}
+
+ protected:
+  virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE {
+    InProcessBrowserTest::SetUpCommandLine(command_line);
+  }
+
+  virtual void SetUpOnMainThread() OVERRIDE {
+    InProcessBrowserTest::SetUpOnMainThread();
+  }
+
+  virtual void TearDownOnMainThread() OVERRIDE {
+    InProcessBrowserTest::TearDownOnMainThread();
+    for (std::list<Browser*>::iterator iter = browser_list_.begin();
+         iter != browser_list_.end(); ++iter) {
+      CloseBrowserSynchronously(*iter);
+    }
+    browser_list_.clear();
+  }
+
+  Browser* CreateBrowserWithParams(Browser::CreateParams params) {
+    Browser* browser = new Browser(params);
+    AddBlankTabAndShow(browser);
+    browser_list_.push_back(browser);
+    return browser;
+  }
+
+  bool CloseBrowser(Browser* browser) {
+    for (std::list<Browser*>::iterator iter = browser_list_.begin();
+         iter != browser_list_.end(); ++iter) {
+      if (*iter == browser) {
+        CloseBrowserSynchronously(*iter);
+        browser_list_.erase(iter);
+        return true;
+      }
+    }
+    return false;
+  }
+
+  void CloseBrowserSynchronously(Browser* browser) {
+    content::WindowedNotificationObserver observer(
+        chrome::NOTIFICATION_BROWSER_CLOSED,
+        content::NotificationService::AllSources());
+    browser->window()->Close();
+    observer.Wait();
+  }
+
+  Browser::CreateParams CreateParamsForApp(const std::string name,
+                                           bool trusted) {
+    return Browser::CreateParams::CreateForApp(
+        name, trusted, gfx::Rect(), profile(), chrome::GetActiveDesktop());
+  }
+
+  // Simluate restarting the browser
+  void SetRestart() {
+    PrefService* pref_service = g_browser_process->local_state();
+    pref_service->SetBoolean(prefs::kWasRestarted, true);
+  }
+
+  Profile* profile() { return browser()->profile(); }
+
+  std::list<Browser*> browser_list_;
+};
+
+// Thse tests are in pairs. The PRE_ test creates some browser windows and
+// the following test confirms that the correct windows are restored after a
+// restart.
+
+IN_PROC_BROWSER_TEST_F(SessionRestoreTestChromeOS, PRE_RestoreBrowserWindows) {
+  // One browser window is always created by default.
+  EXPECT_TRUE(browser());
+  // Create a second normal browser window.
+  CreateBrowserWithParams(
+      Browser::CreateParams(profile(), chrome::GetActiveDesktop()));
+  // Create a third incognito browser window which should not get restored.
+  CreateBrowserWithParams(Browser::CreateParams(
+      profile()->GetOffTheRecordProfile(), chrome::GetActiveDesktop()));
+  SetRestart();
+}
+
+IN_PROC_BROWSER_TEST_F(SessionRestoreTestChromeOS, RestoreBrowserWindows) {
+  size_t total_count = 0;
+  size_t incognito_count = 0;
+  for (chrome::BrowserIterator it; !it.done(); it.Next()) {
+    ++total_count;
+    if (it->profile()->IsOffTheRecord())
+      ++incognito_count;
+  }
+  EXPECT_EQ(2u, total_count);
+  EXPECT_EQ(0u, incognito_count);
+}
+
+IN_PROC_BROWSER_TEST_F(SessionRestoreTestChromeOS, PRE_RestoreAppsV1) {
+  // Create a trusted app popup.
+  CreateBrowserWithParams(CreateParamsForApp(test_app_popup_name1, true));
+  // Create a second trusted app with two popup windows.
+  CreateBrowserWithParams(CreateParamsForApp(test_app_popup_name2, true));
+  CreateBrowserWithParams(CreateParamsForApp(test_app_popup_name2, true));
+  // Create a third untrusted (child) app3 popup. This should not get restored.
+  CreateBrowserWithParams(CreateParamsForApp(test_app_popup_name2, false));
+
+  SetRestart();
+}
+
+IN_PROC_BROWSER_TEST_F(SessionRestoreTestChromeOS, RestoreAppsV1) {
+  size_t total_count = 0;
+  size_t app1_count = 0;
+  size_t app2_count = 0;
+  for (chrome::BrowserIterator it; !it.done(); it.Next()) {
+    ++total_count;
+    if (it->app_name() == test_app_popup_name1)
+      ++app1_count;
+    if (it->app_name() == test_app_popup_name2)
+      ++app2_count;
+  }
+  EXPECT_EQ(1u, app1_count);
+  EXPECT_EQ(2u, app2_count);  // Only the trusted app windows are restored.
+  EXPECT_EQ(4u, total_count);  // Default browser() + 3 app windows
+}
+
+IN_PROC_BROWSER_TEST_F(SessionRestoreTestChromeOS, PRE_RestoreMaximized) {
+  // One browser window is always created by default.
+  ASSERT_TRUE(browser());
+  // Create a second browser window and maximize it.
+  Browser* browser2 = CreateBrowserWithParams(
+      Browser::CreateParams(profile(), chrome::GetActiveDesktop()));
+  browser2->window()->Maximize();
+
+  // Create two app popup windows and maximize the second one.
+  Browser* app_browser1 =
+      CreateBrowserWithParams(CreateParamsForApp(test_app_popup_name1, true));
+  Browser* app_browser2 =
+      CreateBrowserWithParams(CreateParamsForApp(test_app_popup_name1, true));
+  app_browser2->window()->Maximize();
+
+  EXPECT_FALSE(browser()->window()->IsMaximized());
+  EXPECT_TRUE(browser2->window()->IsMaximized());
+  EXPECT_FALSE(app_browser1->window()->IsMaximized());
+  EXPECT_TRUE(app_browser2->window()->IsMaximized());
+
+  SetRestart();
+}
+
+IN_PROC_BROWSER_TEST_F(SessionRestoreTestChromeOS, RestoreMaximized) {
+  size_t total_count = 0;
+  size_t maximized_count = 0;
+  for (chrome::BrowserIterator it; !it.done(); it.Next()) {
+    ++total_count;
+    if (it->window()->IsMaximized())
+      ++maximized_count;
+  }
+  EXPECT_EQ(4u, total_count);
+  EXPECT_EQ(2u, maximized_count);
+}
diff --git a/chrome/browser/signin/android_profile_oauth2_token_service.h b/chrome/browser/signin/android_profile_oauth2_token_service.h
index 7d6a660..a641e3e 100644
--- a/chrome/browser/signin/android_profile_oauth2_token_service.h
+++ b/chrome/browser/signin/android_profile_oauth2_token_service.h
@@ -8,7 +8,7 @@
 #include <jni.h>
 #include <string>
 
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/callback.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/time/time.h"
diff --git a/chrome/browser/signin/chrome_signin_client.cc b/chrome/browser/signin/chrome_signin_client.cc
index 0faeffa..7cc19c3 100644
--- a/chrome/browser/signin/chrome_signin_client.cc
+++ b/chrome/browser/signin/chrome_signin_client.cc
@@ -10,7 +10,7 @@
 #include "chrome/browser/signin/local_auth.h"
 #include "chrome/browser/webdata/web_data_service_factory.h"
 #include "chrome/common/chrome_version_info.h"
-#include "chrome/common/profile_management_switches.h"
+#include "components/signin/core/common/profile_management_switches.h"
 #include "content/public/browser/notification_details.h"
 #include "content/public/browser/notification_source.h"
 #include "content/public/browser/render_process_host.h"
diff --git a/chrome/browser/signin/profile_identity_provider.cc b/chrome/browser/signin/profile_identity_provider.cc
new file mode 100644
index 0000000..7ae1a46
--- /dev/null
+++ b/chrome/browser/signin/profile_identity_provider.cc
@@ -0,0 +1,49 @@
+// 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.
+
+#include "chrome/browser/signin/profile_identity_provider.h"
+
+#include "chrome/browser/ui/webui/signin/login_ui_service.h"
+#include "components/signin/core/browser/profile_oauth2_token_service.h"
+
+ProfileIdentityProvider::ProfileIdentityProvider(
+    SigninManagerBase* signin_manager,
+    ProfileOAuth2TokenService* token_service,
+    LoginUIService* login_ui_service)
+    : signin_manager_(signin_manager),
+      token_service_(token_service),
+      login_ui_service_(login_ui_service) {
+  signin_manager_->AddObserver(this);
+}
+
+ProfileIdentityProvider::~ProfileIdentityProvider() {
+  signin_manager_->RemoveObserver(this);
+}
+
+std::string ProfileIdentityProvider::GetActiveUsername() {
+  return signin_manager_->GetAuthenticatedUsername();
+}
+
+std::string ProfileIdentityProvider::GetActiveAccountId() {
+  return signin_manager_->GetAuthenticatedAccountId();
+}
+
+OAuth2TokenService* ProfileIdentityProvider::GetTokenService() {
+  return token_service_;
+}
+
+bool ProfileIdentityProvider::RequestLogin() {
+  login_ui_service_->ShowLoginPopup();
+  return true;
+}
+
+void ProfileIdentityProvider::GoogleSigninSucceeded(
+    const std::string& username,
+    const std::string& password) {
+  FireOnActiveAccountLogin();
+}
+
+void ProfileIdentityProvider::GoogleSignedOut(const std::string& username) {
+  FireOnActiveAccountLogout();
+}
diff --git a/chrome/browser/signin/profile_identity_provider.h b/chrome/browser/signin/profile_identity_provider.h
new file mode 100644
index 0000000..ca67ecf
--- /dev/null
+++ b/chrome/browser/signin/profile_identity_provider.h
@@ -0,0 +1,44 @@
+// 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.
+
+#ifndef CHROME_BROWSER_SIGNIN_PROFILE_IDENTITY_PROVIDER_H_
+#define CHROME_BROWSER_SIGNIN_PROFILE_IDENTITY_PROVIDER_H_
+
+#include "base/macros.h"
+#include "components/signin/core/browser/signin_manager_base.h"
+#include "google_apis/gaia/identity_provider.h"
+
+class LoginUIService;
+class ProfileOAuth2TokenService;
+
+// An identity provider implementation that's backed by
+// ProfileOAuth2TokenService and SigninManager.
+class ProfileIdentityProvider : public IdentityProvider,
+                                public SigninManagerBase::Observer {
+ public:
+  ProfileIdentityProvider(SigninManagerBase* signin_manager,
+                          ProfileOAuth2TokenService* token_service,
+                          LoginUIService* login_ui_service);
+  virtual ~ProfileIdentityProvider();
+
+  // IdentityProvider:
+  virtual std::string GetActiveUsername() OVERRIDE;
+  virtual std::string GetActiveAccountId() OVERRIDE;
+  virtual OAuth2TokenService* GetTokenService() OVERRIDE;
+  virtual bool RequestLogin() OVERRIDE;
+
+  // SigninManagerBase::Observer:
+  virtual void GoogleSigninSucceeded(const std::string& username,
+                                     const std::string& password) OVERRIDE;
+  virtual void GoogleSignedOut(const std::string& username) OVERRIDE;
+
+ private:
+  SigninManagerBase* const signin_manager_;
+  ProfileOAuth2TokenService* const token_service_;
+  LoginUIService* const login_ui_service_;
+
+  DISALLOW_COPY_AND_ASSIGN(ProfileIdentityProvider);
+};
+
+#endif  // CHROME_BROWSER_SIGNIN_PROFILE_IDENTITY_PROVIDER_H_
diff --git a/chrome/browser/signin/signin_error_notifier_ash.cc b/chrome/browser/signin/signin_error_notifier_ash.cc
index a98511e..77a08d7 100644
--- a/chrome/browser/signin/signin_error_notifier_ash.cc
+++ b/chrome/browser/signin/signin_error_notifier_ash.cc
@@ -56,7 +56,7 @@
   virtual void Click() OVERRIDE;
   virtual void ButtonClick(int button_index) OVERRIDE;
   virtual std::string id() const OVERRIDE;
-  virtual content::RenderViewHost* GetRenderViewHost() const OVERRIDE;
+  virtual content::WebContents* GetWebContents() const OVERRIDE;
 
  protected:
   virtual ~SigninNotificationDelegate();
@@ -120,7 +120,7 @@
   return id_;
 }
 
-content::RenderViewHost* SigninNotificationDelegate::GetRenderViewHost() const {
+content::WebContents* SigninNotificationDelegate::GetWebContents() const {
   return NULL;
 }
 
diff --git a/chrome/browser/signin/signin_header_helper.cc b/chrome/browser/signin/signin_header_helper.cc
index b43c4ba..8e2757a 100644
--- a/chrome/browser/signin/signin_header_helper.cc
+++ b/chrome/browser/signin/signin_header_helper.cc
@@ -9,7 +9,7 @@
 #include "chrome/browser/tab_contents/tab_util.h"
 #include "chrome/browser/ui/browser_finder.h"
 #include "chrome/browser/ui/browser_window.h"
-#include "chrome/common/profile_management_switches.h"
+#include "components/signin/core/common/profile_management_switches.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/web_contents.h"
 #include "google_apis/gaia/gaia_auth_util.h"
diff --git a/chrome/browser/signin/signin_promo.cc b/chrome/browser/signin/signin_promo.cc
index 491f8cf..253ba61 100644
--- a/chrome/browser/signin/signin_promo.cc
+++ b/chrome/browser/signin/signin_promo.cc
@@ -22,9 +22,9 @@
 #include "chrome/browser/ui/webui/theme_source.h"
 #include "chrome/common/net/url_util.h"
 #include "chrome/common/pref_names.h"
-#include "chrome/common/profile_management_switches.h"
 #include "chrome/common/url_constants.h"
 #include "components/signin/core/browser/signin_manager.h"
+#include "components/signin/core/common/profile_management_switches.h"
 #include "components/user_prefs/pref_registry_syncable.h"
 #include "content/public/browser/url_data_source.h"
 #include "content/public/browser/web_contents.h"
diff --git a/chrome/browser/signin/signin_tracker_factory.cc b/chrome/browser/signin/signin_tracker_factory.cc
index 638460a..5b1febc 100644
--- a/chrome/browser/signin/signin_tracker_factory.cc
+++ b/chrome/browser/signin/signin_tracker_factory.cc
@@ -8,7 +8,7 @@
 #include "chrome/browser/signin/chrome_signin_client_factory.h"
 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
 #include "chrome/browser/signin/signin_manager_factory.h"
-#include "chrome/common/profile_management_switches.h"
+#include "components/signin/core/common/profile_management_switches.h"
 
 SigninTrackerFactory::SigninTrackerFactory() {}
 SigninTrackerFactory::~SigninTrackerFactory() {}
diff --git a/chrome/browser/speech/extension_api/tts_engine_extension_api.cc b/chrome/browser/speech/extension_api/tts_engine_extension_api.cc
index ac0f2c8..940bd87 100644
--- a/chrome/browser/speech/extension_api/tts_engine_extension_api.cc
+++ b/chrome/browser/speech/extension_api/tts_engine_extension_api.cc
@@ -63,8 +63,7 @@
 void GetExtensionVoices(Profile* profile, std::vector<VoiceData>* out_voices) {
   ExtensionService* service = profile->GetExtensionService();
   DCHECK(service);
-  EventRouter* event_router =
-      ExtensionSystem::Get(profile)->event_router();
+  EventRouter* event_router = EventRouter::Get(profile);
   DCHECK(event_router);
 
   bool is_offline = (net::NetworkChangeNotifier::GetConnectionType() ==
@@ -167,8 +166,8 @@
   scoped_ptr<extensions::Event> event(new extensions::Event(
       tts_engine_events::kOnSpeak, args.Pass()));
   event->restrict_to_browser_context = utterance->profile();
-  ExtensionSystem::Get(utterance->profile())->event_router()->
-      DispatchEventToExtension(utterance->extension_id(), event.Pass());
+  EventRouter::Get(utterance->profile())
+      ->DispatchEventToExtension(utterance->extension_id(), event.Pass());
 }
 
 void ExtensionTtsEngineStop(Utterance* utterance) {
@@ -176,8 +175,8 @@
   scoped_ptr<extensions::Event> event(new extensions::Event(
       tts_engine_events::kOnStop, args.Pass()));
   event->restrict_to_browser_context = utterance->profile();
-  ExtensionSystem::Get(utterance->profile())->event_router()->
-      DispatchEventToExtension(utterance->extension_id(), event.Pass());
+  EventRouter::Get(utterance->profile())
+      ->DispatchEventToExtension(utterance->extension_id(), event.Pass());
 }
 
 void ExtensionTtsEnginePause(Utterance* utterance) {
@@ -186,7 +185,7 @@
       tts_engine_events::kOnPause, args.Pass()));
   Profile* profile = utterance->profile();
   event->restrict_to_browser_context = profile;
-  EventRouter* event_router = ExtensionSystem::Get(profile)->event_router();
+  EventRouter* event_router = EventRouter::Get(profile);
   std::string id = utterance->extension_id();
   event_router->DispatchEventToExtension(id, event.Pass());
   WarnIfMissingPauseOrResumeListener(profile, event_router, id);
@@ -198,7 +197,7 @@
       tts_engine_events::kOnResume, args.Pass()));
   Profile* profile = utterance->profile();
   event->restrict_to_browser_context = profile;
-  EventRouter* event_router = ExtensionSystem::Get(profile)->event_router();
+  EventRouter* event_router = EventRouter::Get(profile);
   std::string id = utterance->extension_id();
   event_router->DispatchEventToExtension(id, event.Pass());
   WarnIfMissingPauseOrResumeListener(profile, event_router, id);
diff --git a/chrome/browser/speech/extension_api/tts_extension_api.cc b/chrome/browser/speech/extension_api/tts_extension_api.cc
index bc8baf5..c60d7be 100644
--- a/chrome/browser/speech/extension_api/tts_extension_api.cc
+++ b/chrome/browser/speech/extension_api/tts_extension_api.cc
@@ -15,7 +15,6 @@
 #include "chrome/browser/speech/tts_controller.h"
 #include "extensions/browser/event_router.h"
 #include "extensions/browser/extension_function_registry.h"
-#include "extensions/browser/extension_system.h"
 #include "ui/base/l10n/l10n_util.h"
 
 namespace constants = tts_extension_api_constants;
@@ -129,14 +128,13 @@
       new extensions::Event(events::kOnEvent, arguments.Pass()));
   event->restrict_to_browser_context = utterance->profile();
   event->event_url = utterance->src_url();
-  extensions::ExtensionSystem::Get(utterance->profile())->event_router()->
-      DispatchEventToExtension(utterance->src_extension_id(), event.Pass());
+  extensions::EventRouter::Get(utterance->profile())
+      ->DispatchEventToExtension(utterance->src_extension_id(), event.Pass());
 
   if (utterance->finished())
     delete this;
 }
 
-
 bool TtsSpeakFunction::RunImpl() {
   std::string text;
   EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &text));
diff --git a/chrome/browser/speech/tts_android.cc b/chrome/browser/speech/tts_android.cc
index 7acf062..e196e8d 100644
--- a/chrome/browser/speech/tts_android.cc
+++ b/chrome/browser/speech/tts_android.cc
@@ -44,9 +44,6 @@
     const VoiceData& voice,
     const UtteranceContinuousParameters& params) {
   JNIEnv* env = AttachCurrentThread();
-  if (!Java_TtsPlatformImpl_isInitialized(env, java_ref_.obj()))
-    return false;
-
   jboolean success = Java_TtsPlatformImpl_speak(
       env, java_ref_.obj(),
       utterance_id,
@@ -63,9 +60,6 @@
 
 bool TtsPlatformImplAndroid::StopSpeaking() {
   JNIEnv* env = AttachCurrentThread();
-  if (!Java_TtsPlatformImpl_isInitialized(env, java_ref_.obj()))
-    return false;
-
   Java_TtsPlatformImpl_stop(env, java_ref_.obj());
   utterance_id_ = 0;
   utterance_.clear();
diff --git a/chrome/browser/speech/tts_extension_loader_chromeos.cc b/chrome/browser/speech/tts_extension_loader_chromeos.cc
index da2f787..f47b709 100644
--- a/chrome/browser/speech/tts_extension_loader_chromeos.cc
+++ b/chrome/browser/speech/tts_extension_loader_chromeos.cc
@@ -92,8 +92,7 @@
 }
 
 void TtsExtensionLoaderChromeOs::Shutdown() {
-  extensions::ExtensionSystem::Get(profile_)->
-      event_router()->UnregisterObserver(this);
+  extensions::EventRouter::Get(profile_)->UnregisterObserver(this);
 }
 
 bool TtsExtensionLoaderChromeOs::IsTtsLoadedInThisProfile() {
diff --git a/chrome/browser/ssl/ssl_tab_helper.cc b/chrome/browser/ssl/ssl_tab_helper.cc
index ab2e2ad..a5be317 100644
--- a/chrome/browser/ssl/ssl_tab_helper.cc
+++ b/chrome/browser/ssl/ssl_tab_helper.cc
@@ -16,13 +16,13 @@
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/content_settings/host_content_settings_map.h"
 #include "chrome/browser/infobars/confirm_infobar_delegate.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ssl/ssl_add_cert_handler.h"
 #include "chrome/browser/ssl/ssl_client_certificate_selector.h"
 #include "chrome/browser/ui/browser_finder.h"
 #include "chrome/common/chrome_switches.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/notification_details.h"
 #include "content/public/browser/notification_observer.h"
 #include "content/public/browser/notification_registrar.h"
@@ -46,10 +46,10 @@
   // NULL, adds the infobar to |infobar_service|; otherwise, replaces
   // |previous_infobar|.  Returns the new infobar if it was successfully added.
   // |cert| is valid iff cert addition was successful.
-  static InfoBar* Create(InfoBarService* infobar_service,
-                         InfoBar* previous_infobar,
-                         const base::string16& message,
-                         net::X509Certificate* cert);
+  static infobars::InfoBar* Create(InfoBarService* infobar_service,
+                                   infobars::InfoBar* previous_infobar,
+                                   const base::string16& message,
+                                   net::X509Certificate* cert);
 
  private:
   SSLCertResultInfoBarDelegate(const base::string16& message,
@@ -71,12 +71,13 @@
 };
 
 // static
-InfoBar* SSLCertResultInfoBarDelegate::Create(InfoBarService* infobar_service,
-                                              InfoBar* previous_infobar,
-                                              const base::string16& message,
-                                              net::X509Certificate* cert) {
-  scoped_ptr<InfoBar> infobar(ConfirmInfoBarDelegate::CreateInfoBar(
-      scoped_ptr<ConfirmInfoBarDelegate>(
+infobars::InfoBar* SSLCertResultInfoBarDelegate::Create(
+    InfoBarService* infobar_service,
+    infobars::InfoBar* previous_infobar,
+    const base::string16& message,
+    net::X509Certificate* cert) {
+  scoped_ptr<infobars::InfoBar> infobar(
+      ConfirmInfoBarDelegate::CreateInfoBar(scoped_ptr<ConfirmInfoBarDelegate>(
           new SSLCertResultInfoBarDelegate(message, cert))));
   return previous_infobar ?
       infobar_service->ReplaceInfoBar(previous_infobar, infobar.Pass()) :
@@ -99,7 +100,8 @@
   return IDR_INFOBAR_SAVE_PASSWORD;
 }
 
-InfoBarDelegate::Type SSLCertResultInfoBarDelegate::GetInfoBarType() const {
+infobars::InfoBarDelegate::Type SSLCertResultInfoBarDelegate::GetInfoBarType()
+    const {
   return cert_.get() ? PAGE_ACTION_TYPE : WARNING_TYPE;
 }
 
@@ -147,7 +149,7 @@
                        const content::NotificationDetails& details) OVERRIDE;
 
   InfoBarService* infobar_service_;
-  InfoBar* infobar_;
+  infobars::InfoBar* infobar_;
   content::NotificationRegistrar registrar_;
 
   DISALLOW_COPY_AND_ASSIGN(SSLAddCertData);
@@ -180,9 +182,12 @@
          type == chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REPLACED);
   if (infobar_ ==
       ((type == chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED) ?
-          content::Details<InfoBar::RemovedDetails>(details)->first :
-          content::Details<InfoBar::ReplacedDetails>(details)->first))
+            content::Details<infobars::InfoBar::RemovedDetails>(
+                details)->first :
+            content::Details<infobars::InfoBar::ReplacedDetails>(
+                details)->first)) {
     infobar_ = NULL;
+  }
 }
 
 
diff --git a/chrome/browser/status_icons/desktop_notification_balloon.cc b/chrome/browser/status_icons/desktop_notification_balloon.cc
index 37848f6..85244df 100644
--- a/chrome/browser/status_icons/desktop_notification_balloon.cc
+++ b/chrome/browser/status_icons/desktop_notification_balloon.cc
@@ -48,7 +48,7 @@
   virtual void Close(bool by_user) OVERRIDE {}
   virtual void Click() OVERRIDE {}
   virtual std::string id() const OVERRIDE { return id_; }
-  virtual content::RenderViewHost* GetRenderViewHost() const OVERRIDE {
+  virtual content::WebContents* GetWebContents() const OVERRIDE {
     return NULL;
   }
 
diff --git a/chrome/browser/sync/OWNERS b/chrome/browser/sync/OWNERS
index 377396d..bb23190 100644
--- a/chrome/browser/sync/OWNERS
+++ b/chrome/browser/sync/OWNERS
@@ -5,6 +5,7 @@
 rsimha@chromium.org
 tim@chromium.org
 zea@chromium.org
+pavely@chromium.org
 
 per-file sync_policy_handler*=dconnelly@chromium.org
 per-file sync_policy_handler*=joaodasilva@chromium.org
diff --git a/chrome/browser/sync/glue/bookmark_change_processor.cc b/chrome/browser/sync/glue/bookmark_change_processor.cc
index 6723c13..9085e43 100644
--- a/chrome/browser/sync/glue/bookmark_change_processor.cc
+++ b/chrome/browser/sync/glue/bookmark_change_processor.cc
@@ -44,13 +44,16 @@
 static const char kMobileBookmarksTag[] = "synced_bookmarks";
 
 BookmarkChangeProcessor::BookmarkChangeProcessor(
+    Profile* profile,
     BookmarkModelAssociator* model_associator,
     DataTypeErrorHandler* error_handler)
     : ChangeProcessor(error_handler),
       bookmark_model_(NULL),
+      profile_(profile),
       model_associator_(model_associator) {
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
   DCHECK(model_associator);
+  DCHECK(profile);
   DCHECK(error_handler);
 }
 
@@ -59,12 +62,10 @@
     bookmark_model_->RemoveObserver(this);
 }
 
-void BookmarkChangeProcessor::StartImpl(Profile* profile) {
+void BookmarkChangeProcessor::StartImpl() {
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  DCHECK(profile);
-  profile_ = profile;
   DCHECK(!bookmark_model_);
-  bookmark_model_ = BookmarkModelFactory::GetForProfile(profile);
+  bookmark_model_ = BookmarkModelFactory::GetForProfile(profile_);
   DCHECK(bookmark_model_->loaded());
   bookmark_model_->AddObserver(this);
 }
@@ -75,7 +76,7 @@
     syncer::WriteNode* dst) {
   // Set the properties of the item.
   dst->SetIsFolder(src->is_folder());
-  dst->SetTitle(base::UTF16ToWideHack(src->GetTitle()));
+  dst->SetTitle(base::UTF16ToUTF8(src->GetTitle()));
   sync_pb::BookmarkSpecifics bookmark_specifics(dst->GetBookmarkSpecifics());
   if (!src->is_folder())
     bookmark_specifics.set_url(src->url().spec());
@@ -710,7 +711,7 @@
         base::Time::FromInternalValue(specifics.creation_time_us()));
   }
   SetBookmarkFavicon(&sync_node, node, model, profile);
-  SetBookmarkMetaInfo(&sync_node, node, model);
+  model->SetNodeMetaInfoMap(node, *GetBookmarkMetaInfo(&sync_node));
 }
 
 // static
@@ -739,8 +740,11 @@
 
   const BookmarkNode* node;
   if (sync_node->GetIsFolder()) {
-    node = model->AddFolder(
-        parent, index, base::UTF8ToUTF16(sync_node->GetTitle()));
+    node =
+        model->AddFolderWithMetaInfo(parent,
+                                     index,
+                                     base::UTF8ToUTF16(sync_node->GetTitle()),
+                                     GetBookmarkMetaInfo(sync_node).get());
   } else {
     // 'creation_time_us' was added in m24. Assume a time of 0 means now.
     const sync_pb::BookmarkSpecifics& specifics =
@@ -748,15 +752,17 @@
     const int64 create_time_internal = specifics.creation_time_us();
     base::Time create_time = (create_time_internal == 0) ?
         base::Time::Now() : base::Time::FromInternalValue(create_time_internal);
-    node = model->AddURLWithCreationTime(parent, index,
-                                         base::UTF8ToUTF16(
-                                             sync_node->GetTitle()),
-                                         GURL(specifics.url()), create_time);
+    node = model->AddURLWithCreationTimeAndMetaInfo(
+        parent,
+        index,
+        base::UTF8ToUTF16(sync_node->GetTitle()),
+        GURL(specifics.url()),
+        create_time,
+        GetBookmarkMetaInfo(sync_node).get());
     if (node)
       SetBookmarkFavicon(sync_node, node, model, profile);
   }
-  if (node)
-    SetBookmarkMetaInfo(sync_node, node, model);
+
   return node;
 }
 
@@ -790,18 +796,18 @@
 }
 
 // static
-void BookmarkChangeProcessor::SetBookmarkMetaInfo(
-    const syncer::BaseNode* sync_node,
-    const BookmarkNode* bookmark_node,
-    BookmarkModel* bookmark_model) {
+scoped_ptr<BookmarkNode::MetaInfoMap>
+BookmarkChangeProcessor::GetBookmarkMetaInfo(
+    const syncer::BaseNode* sync_node) {
   const sync_pb::BookmarkSpecifics& specifics =
       sync_node->GetBookmarkSpecifics();
-  BookmarkNode::MetaInfoMap meta_info_map;
+  scoped_ptr<BookmarkNode::MetaInfoMap> meta_info_map(
+      new BookmarkNode::MetaInfoMap);
   for (int i = 0; i < specifics.meta_info_size(); ++i) {
-    meta_info_map[specifics.meta_info(i).key()] =
+    (*meta_info_map)[specifics.meta_info(i).key()] =
         specifics.meta_info(i).value();
   }
-  bookmark_model->SetNodeMetaInfoMap(bookmark_node, meta_info_map);
+  return meta_info_map.Pass();
 }
 
 // static
@@ -842,7 +848,7 @@
   gfx::Size pixel_size(gfx::kFaviconSize, gfx::kFaviconSize);
   favicon_service->MergeFavicon(bookmark_node->url(),
                                 icon_url,
-                                chrome::FAVICON,
+                                favicon_base::FAVICON,
                                 bitmap_data,
                                 pixel_size);
 }
diff --git a/chrome/browser/sync/glue/bookmark_change_processor.h b/chrome/browser/sync/glue/bookmark_change_processor.h
index f0474b0..f5a886d 100644
--- a/chrome/browser/sync/glue/bookmark_change_processor.h
+++ b/chrome/browser/sync/glue/bookmark_change_processor.h
@@ -10,10 +10,13 @@
 #include "base/compiler_specific.h"
 #include "chrome/browser/bookmarks/bookmark_model_observer.h"
 #include "chrome/browser/sync/glue/bookmark_model_associator.h"
-#include "chrome/browser/sync/glue/change_processor.h"
 #include "chrome/browser/sync/glue/sync_backend_host.h"
+#include "components/bookmarks/core/browser/bookmark_node.h"
+#include "components/sync_driver/change_processor.h"
 #include "components/sync_driver/data_type_error_handler.h"
 
+class Profile;
+
 namespace base {
 class RefCountedMemory;
 }
@@ -32,7 +35,8 @@
 class BookmarkChangeProcessor : public BookmarkModelObserver,
                                 public ChangeProcessor {
  public:
-  BookmarkChangeProcessor(BookmarkModelAssociator* model_associator,
+  BookmarkChangeProcessor(Profile* profile,
+                          BookmarkModelAssociator* model_associator,
                           DataTypeErrorHandler* error_handler);
   virtual ~BookmarkChangeProcessor();
 
@@ -134,7 +138,7 @@
       const std::vector<const BookmarkNode*>& nodes);
 
  protected:
-  virtual void StartImpl(Profile* profile) OVERRIDE;
+  virtual void StartImpl() OVERRIDE;
 
  private:
   enum MoveOrCreate {
@@ -142,10 +146,9 @@
     CREATE,
   };
 
-  // Sets the meta info of the given bookmark node from the given sync node.
-  static void SetBookmarkMetaInfo(const syncer::BaseNode* sync_node,
-                                  const BookmarkNode* bookmark_node,
-                                  BookmarkModel* bookmark_model);
+  // Retrieves the meta info from the given sync node.
+  static scoped_ptr<BookmarkNode::MetaInfoMap> GetBookmarkMetaInfo(
+      const syncer::BaseNode* sync_node);
 
   // Sets the meta info of the given sync node from the given bookmark node.
   static void SetSyncNodeMetaInfo(const BookmarkNode* node,
diff --git a/chrome/browser/sync/glue/bookmark_data_type_controller_unittest.cc b/chrome/browser/sync/glue/bookmark_data_type_controller_unittest.cc
index 9d5f48e..91f0f1c 100644
--- a/chrome/browser/sync/glue/bookmark_data_type_controller_unittest.cc
+++ b/chrome/browser/sync/glue/bookmark_data_type_controller_unittest.cc
@@ -17,11 +17,11 @@
 #include "chrome/browser/history/history_service.h"
 #include "chrome/browser/history/history_service_factory.h"
 #include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/sync/glue/change_processor_mock.h"
 #include "chrome/browser/sync/profile_sync_components_factory_mock.h"
 #include "chrome/browser/sync/profile_sync_service_mock.h"
 #include "chrome/test/base/profile_mock.h"
 #include "components/keyed_service/content/refcounted_browser_context_keyed_service.h"
+#include "components/sync_driver/change_processor_mock.h"
 #include "components/sync_driver/data_type_controller_mock.h"
 #include "components/sync_driver/model_associator_mock.h"
 #include "content/public/browser/notification_service.h"
@@ -56,14 +56,14 @@
 
 KeyedService* BuildBookmarkModel(content::BrowserContext* context) {
   Profile* profile = static_cast<Profile*>(context);
-  BookmarkModel* bookmark_model = new BookmarkModel(profile);
+  BookmarkModel* bookmark_model = new BookmarkModel(profile, false);
   bookmark_model->Load(profile->GetIOTaskRunner());
   return bookmark_model;
 }
 
 KeyedService* BuildBookmarkModelWithoutLoading(
     content::BrowserContext* profile) {
-  return new BookmarkModel(static_cast<Profile*>(profile));
+  return new BookmarkModel(static_cast<Profile*>(profile), false);
 }
 
 KeyedService* BuildHistoryService(content::BrowserContext* profile) {
diff --git a/chrome/browser/sync/glue/change_processor.cc b/chrome/browser/sync/glue/change_processor.cc
deleted file mode 100644
index dd0d46c..0000000
--- a/chrome/browser/sync/glue/change_processor.cc
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright (c) 2012 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 "chrome/browser/sync/glue/change_processor.h"
-#include "chrome/browser/profiles/profile.h"
-
-namespace browser_sync {
-
-ChangeProcessor::ChangeProcessor(DataTypeErrorHandler* error_handler)
-    : error_handler_(error_handler),
-      share_handle_(NULL) {}
-
-ChangeProcessor::~ChangeProcessor() {
-}
-
-void ChangeProcessor::Start(Profile* profile,
-                            syncer::UserShare* share_handle) {
-  DCHECK(!share_handle_);
-  share_handle_ = share_handle;
-  StartImpl(profile);
-}
-
-// Not implemented by default.
-void ChangeProcessor::CommitChangesFromSyncModel() {}
-
-DataTypeErrorHandler* ChangeProcessor::error_handler() const {
-  return error_handler_;
-}
-
-syncer::UserShare* ChangeProcessor::share_handle() const {
-  return share_handle_;
-}
-
-}  // namespace browser_sync
diff --git a/chrome/browser/sync/glue/change_processor.h b/chrome/browser/sync/glue/change_processor.h
deleted file mode 100644
index 3d6ef47..0000000
--- a/chrome/browser/sync/glue/change_processor.h
+++ /dev/null
@@ -1,92 +0,0 @@
-// Copyright (c) 2012 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 CHROME_BROWSER_SYNC_GLUE_CHANGE_PROCESSOR_H_
-#define CHROME_BROWSER_SYNC_GLUE_CHANGE_PROCESSOR_H_
-
-#include "chrome/browser/sync/glue/sync_backend_host.h"
-#include "components/sync_driver/data_type_error_handler.h"
-#include "sync/internal_api/public/change_record.h"
-
-class Profile;
-
-namespace syncer {
-class UnrecoverableErrorHandler;
-}  // namespace syncer
-
-namespace browser_sync {
-
-class ModelAssociator;
-
-// An interface used to apply changes from the sync model to the browser's
-// native model.  This does not currently distinguish between model data types.
-class ChangeProcessor {
- public:
-  explicit ChangeProcessor(DataTypeErrorHandler* error_handler);
-  virtual ~ChangeProcessor();
-
-  // Call when the processor should accept changes from either provided model
-  // and apply them to the other.  Both the chrome model and sync_api are
-  // expected to be initialized and loaded.  You must have set a valid
-  // ModelAssociator and UnrecoverableErrorHandler before using this method, and
-  // the two models should be associated w.r.t the ModelAssociator provided.
-  // Subclasses can extract their associated chrome model from |profile| in
-  // |StartImpl|.
-  void Start(Profile* profile, syncer::UserShare* share_handle);
-
-  // Changes have been applied to the backend model and are ready to be
-  // applied to the frontend model. See syncapi.h for detailed instructions on
-  // how to interpret and process |changes|.
-  virtual void ApplyChangesFromSyncModel(
-      const syncer::BaseTransaction* trans,
-      int64 model_version,
-      const syncer::ImmutableChangeRecordList& changes) = 0;
-
-  // The changes found in ApplyChangesFromSyncModel may be too slow to be
-  // performed while holding a [Read/Write]Transaction lock or may interact
-  // with another thread, which might itself be waiting on the transaction lock,
-  // putting us at risk of deadlock.
-  // This function is called once the transactional lock is released and it is
-  // safe to perform inter-thread or slow I/O operations. Note that not all
-  // datatypes need this, so we provide an empty default version.
-  virtual void CommitChangesFromSyncModel();
-
-  // This ensures that startobserving gets called after stopobserving even
-  // if there is an early return in the function.
-  template <class T>
-  class ScopedStopObserving {
-   public:
-    explicit ScopedStopObserving(T* processor)
-        : processor_(processor) {
-      processor_->StopObserving();
-    }
-    ~ScopedStopObserving() {
-      processor_->StartObserving();
-    }
-
-   private:
-    ScopedStopObserving() {}
-    T* processor_;
-  };
-
- protected:
-  // These methods are invoked by Start() and Stop() to do
-  // implementation-specific work.
-  virtual void StartImpl(Profile* profile) = 0;
-
-  DataTypeErrorHandler* error_handler() const;
-  virtual syncer::UserShare* share_handle() const;
-
- private:
-  DataTypeErrorHandler* error_handler_;  // Guaranteed to outlive us.
-
-  // The sync model we are processing changes from.
-  syncer::UserShare* share_handle_;
-
-  DISALLOW_COPY_AND_ASSIGN(ChangeProcessor);
-};
-
-}  // namespace browser_sync
-
-#endif  // CHROME_BROWSER_SYNC_GLUE_CHANGE_PROCESSOR_H_
diff --git a/chrome/browser/sync/glue/change_processor_mock.cc b/chrome/browser/sync/glue/change_processor_mock.cc
deleted file mode 100644
index 54c3bb1..0000000
--- a/chrome/browser/sync/glue/change_processor_mock.cc
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright (c) 2011 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 "chrome/browser/sync/glue/change_processor_mock.h"
-
-#include "base/compiler_specific.h"
-
-namespace browser_sync {
-
-ChangeProcessorMock::ChangeProcessorMock()
-    : ChangeProcessor(this) {}
-
-ChangeProcessorMock::~ChangeProcessorMock() {}
-
-}  // namespace browser_sync
diff --git a/chrome/browser/sync/glue/change_processor_mock.h b/chrome/browser/sync/glue/change_processor_mock.h
deleted file mode 100644
index d2cb6c5..0000000
--- a/chrome/browser/sync/glue/change_processor_mock.h
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright (c) 2012 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 CHROME_BROWSER_SYNC_GLUE_CHANGE_PROCESSOR_MOCK_H__
-#define CHROME_BROWSER_SYNC_GLUE_CHANGE_PROCESSOR_MOCK_H__
-
-#include "chrome/browser/sync/glue/change_processor.h"
-#include "sync/internal_api/public/base/model_type.h"
-#include "sync/internal_api/public/util/unrecoverable_error_handler.h"
-#include "testing/gmock/include/gmock/gmock.h"
-
-namespace browser_sync {
-
-class ChangeProcessorMock
-    : public ChangeProcessor, public DataTypeErrorHandler{
- public:
-  ChangeProcessorMock();
-  virtual ~ChangeProcessorMock();
-  MOCK_METHOD3(ApplyChangesFromSyncModel,
-               void(const syncer::BaseTransaction*, int64,
-                    const syncer::ImmutableChangeRecordList&));
-  MOCK_METHOD0(CommitChangesFromSyncModel, void());
-  MOCK_METHOD1(StartImpl, void(Profile*));
-  MOCK_CONST_METHOD0(IsRunning, bool());
-  MOCK_METHOD2(OnUnrecoverableError, void(const tracked_objects::Location&,
-                                          const std::string&));
-  MOCK_METHOD2(OnSingleDatatypeUnrecoverableError,
-                     void(const tracked_objects::Location&,
-                          const std::string&));
-  MOCK_METHOD3(CreateAndUploadError,
-                   syncer::SyncError(const tracked_objects::Location&,
-                             const std::string&,
-                             syncer::ModelType));
-
-};
-
-}  // namespace browser_sync
-
-#endif  // CHROME_BROWSER_SYNC_GLUE_CHANGE_PROCESSOR_MOCK_H__
diff --git a/chrome/browser/sync/glue/extension_data_type_controller.h b/chrome/browser/sync/glue/extension_data_type_controller.h
index cb85c80..c8ffbf8 100644
--- a/chrome/browser/sync/glue/extension_data_type_controller.h
+++ b/chrome/browser/sync/glue/extension_data_type_controller.h
@@ -8,8 +8,8 @@
 #include <string>
 
 #include "base/compiler_specific.h"
-#include "chrome/browser/sync/glue/generic_change_processor.h"
 #include "chrome/browser/sync/glue/ui_data_type_controller.h"
+#include "components/sync_driver/generic_change_processor.h"
 
 namespace browser_sync {
 
diff --git a/chrome/browser/sync/glue/extension_setting_data_type_controller.cc b/chrome/browser/sync/glue/extension_setting_data_type_controller.cc
index 4fb8058..f516e30 100644
--- a/chrome/browser/sync/glue/extension_setting_data_type_controller.cc
+++ b/chrome/browser/sync/glue/extension_setting_data_type_controller.cc
@@ -9,8 +9,8 @@
 #include "chrome/browser/extensions/extension_service.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/sync/glue/chrome_report_unrecoverable_error.h"
-#include "chrome/browser/sync/glue/generic_change_processor.h"
 #include "chrome/browser/sync/profile_sync_components_factory.h"
+#include "components/sync_driver/generic_change_processor.h"
 #include "content/public/browser/browser_thread.h"
 #include "extensions/browser/extension_system.h"
 #include "sync/api/syncable_service.h"
diff --git a/chrome/browser/sync/glue/fake_generic_change_processor.cc b/chrome/browser/sync/glue/fake_generic_change_processor.cc
deleted file mode 100644
index 0e1eeb9..0000000
--- a/chrome/browser/sync/glue/fake_generic_change_processor.cc
+++ /dev/null
@@ -1,79 +0,0 @@
-// Copyright (c) 2012 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 "chrome/browser/sync/glue/fake_generic_change_processor.h"
-
-#include "base/location.h"
-#include "base/memory/weak_ptr.h"
-#include "sync/api/attachments/fake_attachment_service.h"
-#include "sync/api/syncable_service.h"
-
-namespace browser_sync {
-
-FakeGenericChangeProcessor::FakeGenericChangeProcessor()
-    : GenericChangeProcessor(NULL,
-                             base::WeakPtr<syncer::SyncableService>(),
-                             base::WeakPtr<syncer::SyncMergeResult>(),
-                             NULL,
-                             syncer::FakeAttachmentService::CreateForTest()),
-      sync_model_has_user_created_nodes_(true),
-      sync_model_has_user_created_nodes_success_(true),
-      crypto_ready_if_necessary_(true) {}
-
-FakeGenericChangeProcessor::~FakeGenericChangeProcessor() {}
-
-void FakeGenericChangeProcessor::set_process_sync_changes_error(
-    const syncer::SyncError& error) {
-  process_sync_changes_error_ = error;
-}
-void FakeGenericChangeProcessor::set_get_sync_data_for_type_error(
-    const syncer::SyncError& error) {
-  get_sync_data_for_type_error_ = error;
-}
-void FakeGenericChangeProcessor::set_sync_model_has_user_created_nodes(
-    bool has_nodes) {
-  sync_model_has_user_created_nodes_ = has_nodes;
-}
-void FakeGenericChangeProcessor::set_sync_model_has_user_created_nodes_success(
-    bool success) {
-  sync_model_has_user_created_nodes_success_ = success;
-}
-void FakeGenericChangeProcessor::set_crypto_ready_if_necessary(
-    bool crypto_ready) {
-  crypto_ready_if_necessary_ = crypto_ready;
-}
-
-syncer::SyncError FakeGenericChangeProcessor::ProcessSyncChanges(
-    const tracked_objects::Location& from_here,
-    const syncer::SyncChangeList& change_list) {
-  return process_sync_changes_error_;
-}
-
-syncer::SyncError FakeGenericChangeProcessor::GetAllSyncDataReturnError(
-    syncer::ModelType type, syncer::SyncDataList* current_sync_data) const {
-  return get_sync_data_for_type_error_;
-}
-
-bool FakeGenericChangeProcessor::GetDataTypeContext(
-    syncer::ModelType type,
-    std::string* context) const {
-  return false;
-}
-
-int FakeGenericChangeProcessor::GetSyncCountForType(syncer::ModelType type) {
-  return 0;
-}
-
-bool FakeGenericChangeProcessor::SyncModelHasUserCreatedNodes(
-    syncer::ModelType type, bool* has_nodes) {
-  *has_nodes = sync_model_has_user_created_nodes_;
-  return sync_model_has_user_created_nodes_success_;
-}
-
-bool FakeGenericChangeProcessor::CryptoReadyIfNecessary(
-    syncer::ModelType type) {
-  return crypto_ready_if_necessary_;
-}
-
-}  // namespace browser_sync
diff --git a/chrome/browser/sync/glue/fake_generic_change_processor.h b/chrome/browser/sync/glue/fake_generic_change_processor.h
deleted file mode 100644
index 489af73..0000000
--- a/chrome/browser/sync/glue/fake_generic_change_processor.h
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright (c) 2012 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 CHROME_BROWSER_SYNC_GLUE_FAKE_GENERIC_CHANGE_PROCESSOR_H_
-#define CHROME_BROWSER_SYNC_GLUE_FAKE_GENERIC_CHANGE_PROCESSOR_H_
-
-#include "chrome/browser/sync/glue/generic_change_processor.h"
-
-#include "sync/api/sync_error.h"
-
-namespace browser_sync {
-
-// A fake GenericChangeProcessor that can return arbitrary values.
-class FakeGenericChangeProcessor : public GenericChangeProcessor {
- public:
-  FakeGenericChangeProcessor();
-  virtual ~FakeGenericChangeProcessor();
-
-  // Setters for GenericChangeProcessor implementation results.
-  void set_process_sync_changes_error(const syncer::SyncError& error);
-  void set_get_sync_data_for_type_error(const syncer::SyncError& error);
-  void set_sync_model_has_user_created_nodes(bool has_nodes);
-  void set_sync_model_has_user_created_nodes_success(bool success);
-  void set_crypto_ready_if_necessary(bool crypto_ready);
-
-  // GenericChangeProcessor implementations.
-  virtual syncer::SyncError ProcessSyncChanges(
-      const tracked_objects::Location& from_here,
-      const syncer::SyncChangeList& change_list) OVERRIDE;
-  virtual syncer::SyncError GetAllSyncDataReturnError(
-      syncer::ModelType type,
-      syncer::SyncDataList* data) const OVERRIDE;
-  virtual bool GetDataTypeContext(syncer::ModelType type,
-                                  std::string* context) const OVERRIDE;
-  virtual int GetSyncCountForType(syncer::ModelType type) OVERRIDE;
-  virtual bool SyncModelHasUserCreatedNodes(syncer::ModelType type,
-                                            bool* has_nodes) OVERRIDE;
-  virtual bool CryptoReadyIfNecessary(syncer::ModelType type) OVERRIDE;
-
- private:
-  syncer::SyncError process_sync_changes_error_;
-  syncer::SyncError get_sync_data_for_type_error_;
-  bool sync_model_has_user_created_nodes_;
-  bool sync_model_has_user_created_nodes_success_;
-  bool crypto_ready_if_necessary_;
-};
-
-}  // namespace browser_sync
-
-#endif  // CHROME_BROWSER_SYNC_GLUE_FAKE_GENERIC_CHANGE_PROCESSOR_H_
diff --git a/chrome/browser/sync/glue/favicon_cache.cc b/chrome/browser/sync/glue/favicon_cache.cc
index 4c8da6e..e64b240 100644
--- a/chrome/browser/sync/glue/favicon_cache.cc
+++ b/chrome/browser/sync/glue/favicon_cache.cc
@@ -36,7 +36,7 @@
   // The actual favicon data.
   // TODO(zea): don't keep around the actual data for locally sourced
   // favicons (UI can access those directly).
-  chrome::FaviconBitmapResult bitmap_data[NUM_SIZES];
+  favicon_base::FaviconBitmapResult bitmap_data[NUM_SIZES];
   // The URL this favicon was loaded from.
   const GURL favicon_url;
   // Is the favicon for a bookmarked page?
@@ -78,9 +78,7 @@
 // Returns a mask of the supported favicon types.
 // TODO(zea): Supporting other favicons types will involve some work in the
 // favicon service and navigation controller. See crbug.com/181068.
-int SupportedFaviconTypes() {
-  return chrome::FAVICON;
-}
+int SupportedFaviconTypes() { return favicon_base::FAVICON; }
 
 // Returns the appropriate IconSize to use for a given gfx::Size pixel
 // dimensions.
@@ -122,12 +120,12 @@
 }
 
 // Convert protobuf image data into a FaviconBitmapResult.
-chrome::FaviconBitmapResult GetImageDataFromSpecifics(
+favicon_base::FaviconBitmapResult GetImageDataFromSpecifics(
     const sync_pb::FaviconData& favicon_data) {
   base::RefCountedString* temp_string =
       new base::RefCountedString();
   temp_string->data() = favicon_data.favicon();
-  chrome::FaviconBitmapResult bitmap_result;
+  favicon_base::FaviconBitmapResult bitmap_result;
   bitmap_result.bitmap_data = temp_string;
   bitmap_result.pixel_size.set_height(favicon_data.height());
   bitmap_result.pixel_size.set_width(favicon_data.width());
@@ -136,7 +134,7 @@
 
 // Convert a FaviconBitmapResult into protobuf image data.
 void FillSpecificsWithImageData(
-    const chrome::FaviconBitmapResult& bitmap_result,
+    const favicon_base::FaviconBitmapResult& bitmap_result,
     sync_pb::FaviconData* favicon_data) {
   if (!bitmap_result.bitmap_data.get())
     return;
@@ -172,7 +170,7 @@
 
 // Updates |favicon_info| with the image data in |bitmap_result|.
 bool UpdateFaviconFromBitmapResult(
-    const chrome::FaviconBitmapResult& bitmap_result,
+    const favicon_base::FaviconBitmapResult& bitmap_result,
     SyncedFaviconInfo* favicon_info) {
   DCHECK_EQ(favicon_info->favicon_url, bitmap_result.icon_url);
   if (!bitmap_result.is_valid()) {
@@ -619,7 +617,7 @@
 
 void FaviconCache::OnFaviconDataAvailable(
     const GURL& page_url,
-    const std::vector<chrome::FaviconBitmapResult>& bitmap_results) {
+    const std::vector<favicon_base::FaviconBitmapResult>& bitmap_results) {
   PageTaskMap::iterator page_iter = page_task_map_.find(page_url);
   if (page_iter == page_task_map_.end())
     return;
@@ -635,7 +633,7 @@
   base::Time now = base::Time::Now();
   std::map<GURL, LocalFaviconUpdateInfo> favicon_updates;
   for (size_t i = 0; i < bitmap_results.size(); ++i) {
-    const chrome::FaviconBitmapResult& bitmap_result = bitmap_results[i];
+    const favicon_base::FaviconBitmapResult& bitmap_result = bitmap_results[i];
     GURL favicon_url = bitmap_result.icon_url;
     if (!favicon_url.is_valid() || favicon_url.SchemeIs("data"))
       continue;  // Can happen if the page is still loading.
@@ -1041,7 +1039,7 @@
              << favicon_iter->second.get()->favicon_url;
     for (int i = 0; i < NUM_SIZES; ++i) {
       favicon_iter->second->bitmap_data[i] =
-          chrome::FaviconBitmapResult();
+          favicon_base::FaviconBitmapResult();
     }
     DCHECK(!FaviconInfoHasImages(*favicon_iter->second));
   } else {
diff --git a/chrome/browser/sync/glue/favicon_cache.h b/chrome/browser/sync/glue/favicon_cache.h
index 7901684..cfab7ef 100644
--- a/chrome/browser/sync/glue/favicon_cache.h
+++ b/chrome/browser/sync/glue/favicon_cache.h
@@ -131,7 +131,7 @@
   // available. Does nothing if no favicon data was available.
   void OnFaviconDataAvailable(
       const GURL& page_url,
-      const std::vector<chrome::FaviconBitmapResult>& bitmap_result);
+      const std::vector<favicon_base::FaviconBitmapResult>& bitmap_result);
 
   // Helper method to update the sync state of the favicon at |icon_url|. If
   // either |image_change_type| or |tracking_change_type| is ACTION_INVALID,
diff --git a/chrome/browser/sync/glue/favicon_cache_unittest.cc b/chrome/browser/sync/glue/favicon_cache_unittest.cc
index 75c6e5a..b0af7e3 100644
--- a/chrome/browser/sync/glue/favicon_cache_unittest.cc
+++ b/chrome/browser/sync/glue/favicon_cache_unittest.cc
@@ -411,9 +411,9 @@
 
 void SyncFaviconCacheTest::OnCustomFaviconDataAvailable(
     const TestFaviconData& test_data) {
-  std::vector<chrome::FaviconBitmapResult> bitmap_results;
+  std::vector<favicon_base::FaviconBitmapResult> bitmap_results;
   if (!test_data.image_16.empty()) {
-    chrome::FaviconBitmapResult bitmap_result;
+    favicon_base::FaviconBitmapResult bitmap_result;
     bitmap_result.icon_url = test_data.icon_url;
     bitmap_result.pixel_size.set_width(16);
     bitmap_result.pixel_size.set_height(16);
@@ -423,7 +423,7 @@
     bitmap_results.push_back(bitmap_result);
   }
   if (!test_data.image_32.empty()) {
-    chrome::FaviconBitmapResult bitmap_result;
+    favicon_base::FaviconBitmapResult bitmap_result;
     bitmap_result.icon_url = test_data.icon_url;
     bitmap_result.pixel_size.set_width(32);
     bitmap_result.pixel_size.set_height(32);
@@ -433,7 +433,7 @@
     bitmap_results.push_back(bitmap_result);
   }
   if (!test_data.image_64.empty()) {
-    chrome::FaviconBitmapResult bitmap_result;
+    favicon_base::FaviconBitmapResult bitmap_result;
     bitmap_result.icon_url = test_data.icon_url;
     bitmap_result.pixel_size.set_width(64);
     bitmap_result.pixel_size.set_height(64);
diff --git a/chrome/browser/sync/glue/frontend_data_type_controller.cc b/chrome/browser/sync/glue/frontend_data_type_controller.cc
index b49ca99..7872aa0 100644
--- a/chrome/browser/sync/glue/frontend_data_type_controller.cc
+++ b/chrome/browser/sync/glue/frontend_data_type_controller.cc
@@ -6,10 +6,10 @@
 
 #include "base/logging.h"
 #include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/sync/glue/change_processor.h"
 #include "chrome/browser/sync/glue/chrome_report_unrecoverable_error.h"
 #include "chrome/browser/sync/profile_sync_components_factory.h"
 #include "chrome/browser/sync/profile_sync_service.h"
+#include "components/sync_driver/change_processor.h"
 #include "components/sync_driver/model_associator.h"
 #include "content/public/browser/browser_thread.h"
 #include "sync/api/sync_error.h"
diff --git a/chrome/browser/sync/glue/frontend_data_type_controller_unittest.cc b/chrome/browser/sync/glue/frontend_data_type_controller_unittest.cc
index 59d42e2..96fb47e 100644
--- a/chrome/browser/sync/glue/frontend_data_type_controller_unittest.cc
+++ b/chrome/browser/sync/glue/frontend_data_type_controller_unittest.cc
@@ -10,12 +10,12 @@
 #include "base/memory/scoped_ptr.h"
 #include "base/message_loop/message_loop.h"
 #include "base/tracked_objects.h"
-#include "chrome/browser/sync/glue/change_processor_mock.h"
 #include "chrome/browser/sync/glue/frontend_data_type_controller.h"
 #include "chrome/browser/sync/glue/frontend_data_type_controller_mock.h"
 #include "chrome/browser/sync/profile_sync_components_factory_mock.h"
 #include "chrome/browser/sync/profile_sync_service_mock.h"
 #include "chrome/test/base/profile_mock.h"
+#include "components/sync_driver/change_processor_mock.h"
 #include "components/sync_driver/data_type_controller_mock.h"
 #include "components/sync_driver/model_associator_mock.h"
 #include "content/public/test/test_browser_thread.h"
diff --git a/chrome/browser/sync/glue/generic_change_processor.cc b/chrome/browser/sync/glue/generic_change_processor.cc
deleted file mode 100644
index 18382aa..0000000
--- a/chrome/browser/sync/glue/generic_change_processor.cc
+++ /dev/null
@@ -1,667 +0,0 @@
-// Copyright (c) 2012 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 "chrome/browser/sync/glue/generic_change_processor.h"
-
-#include "base/location.h"
-#include "base/strings/string_number_conversions.h"
-#include "base/strings/utf_string_conversions.h"
-#include "content/public/browser/browser_thread.h"
-#include "sync/api/sync_change.h"
-#include "sync/api/sync_error.h"
-#include "sync/api/syncable_service.h"
-#include "sync/internal_api/public/base_node.h"
-#include "sync/internal_api/public/change_record.h"
-#include "sync/internal_api/public/read_node.h"
-#include "sync/internal_api/public/read_transaction.h"
-#include "sync/internal_api/public/util/unrecoverable_error_handler.h"
-#include "sync/internal_api/public/write_node.h"
-#include "sync/internal_api/public/write_transaction.h"
-#include "sync/syncable/entry.h"  // TODO(tim): Bug 123674.
-
-using content::BrowserThread;
-
-namespace browser_sync {
-
-namespace {
-
-const int kContextSizeLimit = 1024;  // Datatype context size limit.
-
-void SetNodeSpecifics(const sync_pb::EntitySpecifics& entity_specifics,
-                      syncer::WriteNode* write_node) {
-  if (syncer::GetModelTypeFromSpecifics(entity_specifics) ==
-          syncer::PASSWORDS) {
-    write_node->SetPasswordSpecifics(
-        entity_specifics.password().client_only_encrypted_data());
-  } else {
-    write_node->SetEntitySpecifics(entity_specifics);
-  }
-}
-
-syncer::SyncData BuildRemoteSyncData(
-    int64 sync_id,
-    const syncer::BaseNode& read_node,
-    const syncer::AttachmentServiceProxy& attachment_service_proxy) {
-  const syncer::AttachmentIdList& attachment_ids = read_node.GetAttachmentIds();
-  // Use the specifics of non-password datatypes directly (encryption has
-  // already been handled).
-  if (read_node.GetModelType() != syncer::PASSWORDS) {
-    return syncer::SyncData::CreateRemoteData(sync_id,
-                                              read_node.GetEntitySpecifics(),
-                                              read_node.GetModificationTime(),
-                                              attachment_ids,
-                                              attachment_service_proxy);
-  }
-
-  // Passwords must be accessed differently, to account for their encryption,
-  // and stored into a temporary EntitySpecifics.
-  sync_pb::EntitySpecifics password_holder;
-  password_holder.mutable_password()->mutable_client_only_encrypted_data()->
-      CopyFrom(read_node.GetPasswordSpecifics());
-  return syncer::SyncData::CreateRemoteData(sync_id,
-                                            password_holder,
-                                            read_node.GetModificationTime(),
-                                            attachment_ids,
-                                            attachment_service_proxy);
-}
-
-}  // namespace
-
-GenericChangeProcessor::GenericChangeProcessor(
-    DataTypeErrorHandler* error_handler,
-    const base::WeakPtr<syncer::SyncableService>& local_service,
-    const base::WeakPtr<syncer::SyncMergeResult>& merge_result,
-    syncer::UserShare* user_share,
-    scoped_ptr<syncer::AttachmentService> attachment_service)
-    : ChangeProcessor(error_handler),
-      local_service_(local_service),
-      merge_result_(merge_result),
-      share_handle_(user_share),
-      attachment_service_(attachment_service.Pass()),
-      attachment_service_weak_ptr_factory_(attachment_service_.get()),
-      attachment_service_proxy_(
-          base::MessageLoopProxy::current(),
-          attachment_service_weak_ptr_factory_.GetWeakPtr()) {
-  DCHECK(CalledOnValidThread());
-  DCHECK(attachment_service_);
-}
-
-GenericChangeProcessor::~GenericChangeProcessor() {
-  DCHECK(CalledOnValidThread());
-}
-
-void GenericChangeProcessor::ApplyChangesFromSyncModel(
-    const syncer::BaseTransaction* trans,
-    int64 model_version,
-    const syncer::ImmutableChangeRecordList& changes) {
-  DCHECK(CalledOnValidThread());
-  DCHECK(syncer_changes_.empty());
-  for (syncer::ChangeRecordList::const_iterator it =
-           changes.Get().begin(); it != changes.Get().end(); ++it) {
-    if (it->action == syncer::ChangeRecord::ACTION_DELETE) {
-      scoped_ptr<sync_pb::EntitySpecifics> specifics;
-      if (it->specifics.has_password()) {
-        DCHECK(it->extra.get());
-        specifics.reset(new sync_pb::EntitySpecifics(it->specifics));
-        specifics->mutable_password()->mutable_client_only_encrypted_data()->
-            CopyFrom(it->extra->unencrypted());
-      }
-      const syncer::AttachmentIdList empty_list_of_attachment_ids;
-      syncer_changes_.push_back(
-          syncer::SyncChange(FROM_HERE,
-                             syncer::SyncChange::ACTION_DELETE,
-                             syncer::SyncData::CreateRemoteData(
-                                 it->id,
-                                 specifics ? *specifics : it->specifics,
-                                 base::Time(),
-                                 empty_list_of_attachment_ids,
-                                 attachment_service_proxy_)));
-    } else {
-      syncer::SyncChange::SyncChangeType action =
-          (it->action == syncer::ChangeRecord::ACTION_ADD) ?
-          syncer::SyncChange::ACTION_ADD : syncer::SyncChange::ACTION_UPDATE;
-      // Need to load specifics from node.
-      syncer::ReadNode read_node(trans);
-      if (read_node.InitByIdLookup(it->id) != syncer::BaseNode::INIT_OK) {
-        error_handler()->OnSingleDatatypeUnrecoverableError(
-            FROM_HERE,
-            "Failed to look up data for received change with id " +
-                base::Int64ToString(it->id));
-        return;
-      }
-      syncer_changes_.push_back(syncer::SyncChange(
-          FROM_HERE,
-          action,
-          BuildRemoteSyncData(it->id, read_node, attachment_service_proxy_)));
-    }
-  }
-}
-
-void GenericChangeProcessor::CommitChangesFromSyncModel() {
-  DCHECK(CalledOnValidThread());
-  if (syncer_changes_.empty())
-    return;
-  if (!local_service_.get()) {
-    syncer::ModelType type = syncer_changes_[0].sync_data().GetDataType();
-    syncer::SyncError error(FROM_HERE,
-                            syncer::SyncError::DATATYPE_ERROR,
-                            "Local service destroyed.",
-                            type);
-    error_handler()->OnSingleDatatypeUnrecoverableError(error.location(),
-                                                        error.message());
-    return;
-  }
-  syncer::SyncError error = local_service_->ProcessSyncChanges(FROM_HERE,
-                                                       syncer_changes_);
-  syncer_changes_.clear();
-  if (error.IsSet()) {
-    error_handler()->OnSingleDatatypeUnrecoverableError(
-        error.location(), error.message());
-  }
-}
-
-syncer::SyncDataList GenericChangeProcessor::GetAllSyncData(
-    syncer::ModelType type) const {
-  // This is slow / memory intensive.  Should be used sparingly by datatypes.
-  syncer::SyncDataList data;
-  GetAllSyncDataReturnError(type, &data);
-  return data;
-}
-
-syncer::SyncError GenericChangeProcessor::UpdateDataTypeContext(
-    syncer::ModelType type,
-    syncer::SyncChangeProcessor::ContextRefreshStatus refresh_status,
-    const std::string& context) {
-  DCHECK(syncer::ProtocolTypes().Has(type));
-
-  if (context.size() > static_cast<size_t>(kContextSizeLimit)) {
-    return syncer::SyncError(FROM_HERE,
-                             syncer::SyncError::DATATYPE_ERROR,
-                             "Context size limit exceeded.",
-                             type);
-  }
-
-  syncer::WriteTransaction trans(FROM_HERE, share_handle());
-  trans.SetDataTypeContext(type, refresh_status, context);
-
-  // TODO(zea): plumb a pointer to the PSS or SyncManagerImpl here so we can
-  // trigger a datatype nudge if |refresh_status == REFRESH_NEEDED|.
-
-  return syncer::SyncError();
-}
-
-syncer::SyncError GenericChangeProcessor::GetAllSyncDataReturnError(
-    syncer::ModelType type,
-    syncer::SyncDataList* current_sync_data) const {
-  DCHECK(CalledOnValidThread());
-  std::string type_name = syncer::ModelTypeToString(type);
-  syncer::ReadTransaction trans(FROM_HERE, share_handle());
-  syncer::ReadNode root(&trans);
-  if (root.InitByTagLookup(syncer::ModelTypeToRootTag(type)) !=
-          syncer::BaseNode::INIT_OK) {
-    syncer::SyncError error(FROM_HERE,
-                            syncer::SyncError::DATATYPE_ERROR,
-                            "Server did not create the top-level " + type_name +
-                                " node. We might be running against an out-of-"
-                                "date server.",
-                            type);
-    return error;
-  }
-
-  // TODO(akalin): We'll have to do a tree traversal for bookmarks.
-  DCHECK_NE(type, syncer::BOOKMARKS);
-
-  std::vector<int64> child_ids;
-  root.GetChildIds(&child_ids);
-
-  for (std::vector<int64>::iterator it = child_ids.begin();
-       it != child_ids.end(); ++it) {
-    syncer::ReadNode sync_child_node(&trans);
-    if (sync_child_node.InitByIdLookup(*it) !=
-            syncer::BaseNode::INIT_OK) {
-      syncer::SyncError error(FROM_HERE,
-                              syncer::SyncError::DATATYPE_ERROR,
-                              "Failed to fetch child node for type " +
-                                  type_name + ".",
-                              type);
-      return error;
-    }
-    current_sync_data->push_back(BuildRemoteSyncData(
-        sync_child_node.GetId(), sync_child_node, attachment_service_proxy_));
-  }
-  return syncer::SyncError();
-}
-
-bool GenericChangeProcessor::GetDataTypeContext(syncer::ModelType type,
-                                                std::string* context) const {
-  syncer::ReadTransaction trans(FROM_HERE, share_handle());
-  sync_pb::DataTypeContext context_proto;
-  trans.GetDataTypeContext(type, &context_proto);
-  if (!context_proto.has_context())
-    return false;
-
-  DCHECK_EQ(type,
-            syncer::GetModelTypeFromSpecificsFieldNumber(
-                context_proto.data_type_id()));
-  *context = context_proto.context();
-  return true;
-}
-
-int GenericChangeProcessor::GetSyncCountForType(syncer::ModelType type) {
-  syncer::ReadTransaction trans(FROM_HERE, share_handle());
-  syncer::ReadNode root(&trans);
-  if (root.InitByTagLookup(syncer::ModelTypeToRootTag(type)) !=
-      syncer::BaseNode::INIT_OK)
-    return 0;
-
-  // Subtract one to account for type's root node.
-  return root.GetTotalNodeCount() - 1;
-}
-
-namespace {
-
-// TODO(isherman): Investigating http://crbug.com/121592
-// WARNING: this code is sensitive to compiler optimizations. Be careful
-// modifying any code around an OnSingleDatatypeUnrecoverableError call, else
-// the compiler attempts to merge it with other calls, losing useful information
-// in breakpad uploads.
-syncer::SyncError LogLookupFailure(
-    syncer::BaseNode::InitByLookupResult lookup_result,
-    const tracked_objects::Location& from_here,
-    const std::string& error_prefix,
-    syncer::ModelType type,
-    DataTypeErrorHandler* error_handler) {
-  switch (lookup_result) {
-    case syncer::BaseNode::INIT_FAILED_ENTRY_NOT_GOOD: {
-      syncer::SyncError error;
-      error.Reset(from_here,
-                  error_prefix +
-                      "could not find entry matching the lookup criteria.",
-                  type);
-      error_handler->OnSingleDatatypeUnrecoverableError(FROM_HERE,
-                                                        error.message());
-      LOG(ERROR) << "Delete: Bad entry.";
-      return error;
-    }
-    case syncer::BaseNode::INIT_FAILED_ENTRY_IS_DEL: {
-      syncer::SyncError error;
-      error.Reset(from_here, error_prefix + "entry is already deleted.", type);
-      error_handler->OnSingleDatatypeUnrecoverableError(FROM_HERE,
-                                                        error.message());
-      LOG(ERROR) << "Delete: Deleted entry.";
-      return error;
-    }
-    case syncer::BaseNode::INIT_FAILED_DECRYPT_IF_NECESSARY: {
-      syncer::SyncError error;
-      error.Reset(from_here, error_prefix + "unable to decrypt", type);
-      error_handler->OnSingleDatatypeUnrecoverableError(FROM_HERE,
-                                                        error.message());
-      LOG(ERROR) << "Delete: Undecryptable entry.";
-      return error;
-    }
-    case syncer::BaseNode::INIT_FAILED_PRECONDITION: {
-      syncer::SyncError error;
-      error.Reset(from_here,
-                  error_prefix + "a precondition was not met for calling init.",
-                  type);
-      error_handler->OnSingleDatatypeUnrecoverableError(FROM_HERE,
-                                                        error.message());
-      LOG(ERROR) << "Delete: Failed precondition.";
-      return error;
-    }
-    default: {
-      syncer::SyncError error;
-      // Should have listed all the possible error cases above.
-      error.Reset(from_here, error_prefix + "unknown error", type);
-      error_handler->OnSingleDatatypeUnrecoverableError(FROM_HERE,
-                                                        error.message());
-      LOG(ERROR) << "Delete: Unknown error.";
-      return error;
-    }
-  }
-}
-
-syncer::SyncError AttemptDelete(
-    const syncer::SyncChange& change,
-    syncer::ModelType type,
-    const std::string& type_str,
-    syncer::WriteNode* node,
-    DataTypeErrorHandler* error_handler) {
-  DCHECK_EQ(change.change_type(), syncer::SyncChange::ACTION_DELETE);
-  if (change.sync_data().IsLocal()) {
-    const std::string& tag = syncer::SyncDataLocal(change.sync_data()).GetTag();
-    if (tag.empty()) {
-      syncer::SyncError error(
-          FROM_HERE,
-          syncer::SyncError::DATATYPE_ERROR,
-          "Failed to delete " + type_str + " node. Local data, empty tag. " +
-              change.location().ToString(),
-          type);
-      error_handler->OnSingleDatatypeUnrecoverableError(error.location(),
-                                                        error.message());
-      NOTREACHED();
-      return error;
-    }
-
-    syncer::BaseNode::InitByLookupResult result =
-        node->InitByClientTagLookup(change.sync_data().GetDataType(), tag);
-    if (result != syncer::BaseNode::INIT_OK) {
-      return LogLookupFailure(
-          result, FROM_HERE,
-          "Failed to delete " + type_str + " node. Local data. " +
-              change.location().ToString(),
-          type, error_handler);
-    }
-  } else {
-    syncer::BaseNode::InitByLookupResult result = node->InitByIdLookup(
-        syncer::SyncDataRemote(change.sync_data()).GetId());
-    if (result != syncer::BaseNode::INIT_OK) {
-      return LogLookupFailure(
-          result, FROM_HERE,
-          "Failed to delete " + type_str + " node. Non-local data. " +
-              change.location().ToString(),
-          type, error_handler);
-    }
-  }
-  if (IsActOnceDataType(type))
-    node->Drop();
-  else
-    node->Tombstone();
-  return syncer::SyncError();
-}
-
-}  // namespace
-
-syncer::SyncError GenericChangeProcessor::ProcessSyncChanges(
-    const tracked_objects::Location& from_here,
-    const syncer::SyncChangeList& list_of_changes) {
-  DCHECK(CalledOnValidThread());
-  syncer::WriteTransaction trans(from_here, share_handle());
-
-  for (syncer::SyncChangeList::const_iterator iter = list_of_changes.begin();
-       iter != list_of_changes.end();
-       ++iter) {
-    const syncer::SyncChange& change = *iter;
-    DCHECK_NE(change.sync_data().GetDataType(), syncer::UNSPECIFIED);
-    syncer::ModelType type = change.sync_data().GetDataType();
-    std::string type_str = syncer::ModelTypeToString(type);
-    syncer::WriteNode sync_node(&trans);
-    if (change.change_type() == syncer::SyncChange::ACTION_DELETE) {
-      syncer::SyncError error =
-          AttemptDelete(change, type, type_str, &sync_node, error_handler());
-      if (error.IsSet()) {
-        NOTREACHED();
-        return error;
-      }
-      attachment_service_->OnSyncDataDelete(change.sync_data());
-      if (merge_result_.get()) {
-        merge_result_->set_num_items_deleted(
-            merge_result_->num_items_deleted() + 1);
-      }
-    } else if (change.change_type() == syncer::SyncChange::ACTION_ADD) {
-      syncer::SyncError error =
-          HandleActionAdd(change, type_str, type, trans, &sync_node);
-      if (error.IsSet()) {
-        return error;
-      }
-    } else if (change.change_type() == syncer::SyncChange::ACTION_UPDATE) {
-      syncer::SyncError error =
-          HandleActionUpdate(change, type_str, type, trans, &sync_node);
-      if (error.IsSet()) {
-        return error;
-      }
-    } else {
-      syncer::SyncError error(
-          FROM_HERE,
-          syncer::SyncError::DATATYPE_ERROR,
-          "Received unset SyncChange in the change processor, " +
-              change.location().ToString(),
-          type);
-      error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE,
-                                                          error.message());
-      NOTREACHED();
-      LOG(ERROR) << "Unset sync change.";
-      return error;
-    }
-  }
-  return syncer::SyncError();
-}
-
-// WARNING: this code is sensitive to compiler optimizations. Be careful
-// modifying any code around an OnSingleDatatypeUnrecoverableError call, else
-// the compiler attempts to merge it with other calls, losing useful information
-// in breakpad uploads.
-syncer::SyncError GenericChangeProcessor::HandleActionAdd(
-    const syncer::SyncChange& change,
-    const std::string& type_str,
-    const syncer::ModelType& type,
-    const syncer::WriteTransaction& trans,
-    syncer::WriteNode* sync_node) {
-  // TODO(sync): Handle other types of creation (custom parents, folders,
-  // etc.).
-  syncer::ReadNode root_node(&trans);
-  if (root_node.InitByTagLookup(syncer::ModelTypeToRootTag(
-          change.sync_data().GetDataType())) != syncer::BaseNode::INIT_OK) {
-    syncer::SyncError error(FROM_HERE,
-                            syncer::SyncError::DATATYPE_ERROR,
-                            "Failed to look up root node for type " + type_str,
-                            type);
-    error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE,
-                                                        error.message());
-    NOTREACHED();
-    LOG(ERROR) << "Create: no root node.";
-    return error;
-  }
-  syncer::WriteNode::InitUniqueByCreationResult result =
-      sync_node->InitUniqueByCreation(
-          change.sync_data().GetDataType(),
-          root_node,
-          syncer::SyncDataLocal(change.sync_data()).GetTag());
-  if (result != syncer::WriteNode::INIT_SUCCESS) {
-    std::string error_prefix = "Failed to create " + type_str + " node: " +
-                               change.location().ToString() + ", ";
-    switch (result) {
-      case syncer::WriteNode::INIT_FAILED_EMPTY_TAG: {
-        syncer::SyncError error;
-        error.Reset(FROM_HERE, error_prefix + "empty tag", type);
-        error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE,
-                                                            error.message());
-        LOG(ERROR) << "Create: Empty tag.";
-        return error;
-      }
-      case syncer::WriteNode::INIT_FAILED_ENTRY_ALREADY_EXISTS: {
-        syncer::SyncError error;
-        error.Reset(FROM_HERE, error_prefix + "entry already exists", type);
-        error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE,
-                                                            error.message());
-        LOG(ERROR) << "Create: Entry exists.";
-        return error;
-      }
-      case syncer::WriteNode::INIT_FAILED_COULD_NOT_CREATE_ENTRY: {
-        syncer::SyncError error;
-        error.Reset(FROM_HERE, error_prefix + "failed to create entry", type);
-        error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE,
-                                                            error.message());
-        LOG(ERROR) << "Create: Could not create entry.";
-        return error;
-      }
-      case syncer::WriteNode::INIT_FAILED_SET_PREDECESSOR: {
-        syncer::SyncError error;
-        error.Reset(
-            FROM_HERE, error_prefix + "failed to set predecessor", type);
-        error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE,
-                                                            error.message());
-        LOG(ERROR) << "Create: Bad predecessor.";
-        return error;
-      }
-      default: {
-        syncer::SyncError error;
-        error.Reset(FROM_HERE, error_prefix + "unknown error", type);
-        error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE,
-                                                            error.message());
-        LOG(ERROR) << "Create: Unknown error.";
-        return error;
-      }
-    }
-  }
-  sync_node->SetTitle(base::UTF8ToWide(change.sync_data().GetTitle()));
-  SetNodeSpecifics(change.sync_data().GetSpecifics(), sync_node);
-  attachment_service_->OnSyncDataAdd(change.sync_data());
-  if (merge_result_.get()) {
-    merge_result_->set_num_items_added(merge_result_->num_items_added() + 1);
-  }
-  return syncer::SyncError();
-}
-// WARNING: this code is sensitive to compiler optimizations. Be careful
-// modifying any code around an OnSingleDatatypeUnrecoverableError call, else
-// the compiler attempts to merge it with other calls, losing useful information
-// in breakpad uploads.
-syncer::SyncError GenericChangeProcessor::HandleActionUpdate(
-    const syncer::SyncChange& change,
-    const std::string& type_str,
-    const syncer::ModelType& type,
-    const syncer::WriteTransaction& trans,
-    syncer::WriteNode* sync_node) {
-  // TODO(zea): consider having this logic for all possible changes?
-  syncer::BaseNode::InitByLookupResult result =
-      sync_node->InitByClientTagLookup(
-          change.sync_data().GetDataType(),
-          syncer::SyncDataLocal(change.sync_data()).GetTag());
-  if (result != syncer::BaseNode::INIT_OK) {
-    std::string error_prefix = "Failed to load " + type_str + " node. " +
-                               change.location().ToString() + ", ";
-    if (result == syncer::BaseNode::INIT_FAILED_PRECONDITION) {
-      syncer::SyncError error;
-      error.Reset(FROM_HERE, error_prefix + "empty tag", type);
-      error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE,
-                                                          error.message());
-      LOG(ERROR) << "Update: Empty tag.";
-      return error;
-    } else if (result == syncer::BaseNode::INIT_FAILED_ENTRY_NOT_GOOD) {
-      syncer::SyncError error;
-      error.Reset(FROM_HERE, error_prefix + "bad entry", type);
-      error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE,
-                                                          error.message());
-      LOG(ERROR) << "Update: bad entry.";
-      return error;
-    } else if (result == syncer::BaseNode::INIT_FAILED_ENTRY_IS_DEL) {
-      syncer::SyncError error;
-      error.Reset(FROM_HERE, error_prefix + "deleted entry", type);
-      error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE,
-                                                          error.message());
-      LOG(ERROR) << "Update: deleted entry.";
-      return error;
-    } else {
-      syncer::Cryptographer* crypto = trans.GetCryptographer();
-      syncer::ModelTypeSet encrypted_types(trans.GetEncryptedTypes());
-      const sync_pb::EntitySpecifics& specifics =
-          sync_node->GetEntry()->GetSpecifics();
-      CHECK(specifics.has_encrypted());
-      const bool can_decrypt = crypto->CanDecrypt(specifics.encrypted());
-      const bool agreement = encrypted_types.Has(type);
-      if (!agreement && !can_decrypt) {
-        syncer::SyncError error;
-        error.Reset(FROM_HERE,
-                    "Failed to load encrypted entry, missing key and "
-                    "nigori mismatch for " +
-                        type_str + ".",
-                    type);
-        error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE,
-                                                            error.message());
-        LOG(ERROR) << "Update: encr case 1.";
-        return error;
-      } else if (agreement && can_decrypt) {
-        syncer::SyncError error;
-        error.Reset(FROM_HERE,
-                    "Failed to load encrypted entry, we have the key "
-                    "and the nigori matches (?!) for " +
-                        type_str + ".",
-                    type);
-        error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE,
-                                                            error.message());
-        LOG(ERROR) << "Update: encr case 2.";
-        return error;
-      } else if (agreement) {
-        syncer::SyncError error;
-        error.Reset(FROM_HERE,
-                    "Failed to load encrypted entry, missing key and "
-                    "the nigori matches for " +
-                        type_str + ".",
-                    type);
-        error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE,
-                                                            error.message());
-        LOG(ERROR) << "Update: encr case 3.";
-        return error;
-      } else {
-        syncer::SyncError error;
-        error.Reset(FROM_HERE,
-                    "Failed to load encrypted entry, we have the key"
-                    "(?!) and nigori mismatch for " +
-                        type_str + ".",
-                    type);
-        error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE,
-                                                            error.message());
-        LOG(ERROR) << "Update: encr case 4.";
-        return error;
-      }
-    }
-  }
-
-  sync_node->SetTitle(base::UTF8ToWide(change.sync_data().GetTitle()));
-  SetNodeSpecifics(change.sync_data().GetSpecifics(), sync_node);
-  attachment_service_->OnSyncDataUpdate(sync_node->GetAttachmentIds(),
-                                        change.sync_data());
-  if (merge_result_.get()) {
-    merge_result_->set_num_items_modified(merge_result_->num_items_modified() +
-                                          1);
-  }
-  // TODO(sync): Support updating other parts of the sync node (title,
-  // successor, parent, etc.).
-  return syncer::SyncError();
-}
-
-bool GenericChangeProcessor::SyncModelHasUserCreatedNodes(
-    syncer::ModelType type,
-    bool* has_nodes) {
-  DCHECK(CalledOnValidThread());
-  DCHECK(has_nodes);
-  DCHECK_NE(type, syncer::UNSPECIFIED);
-  std::string type_name = syncer::ModelTypeToString(type);
-  std::string err_str = "Server did not create the top-level " + type_name +
-      " node. We might be running against an out-of-date server.";
-  *has_nodes = false;
-  syncer::ReadTransaction trans(FROM_HERE, share_handle());
-  syncer::ReadNode type_root_node(&trans);
-  if (type_root_node.InitByTagLookup(syncer::ModelTypeToRootTag(type)) !=
-          syncer::BaseNode::INIT_OK) {
-    LOG(ERROR) << err_str;
-    return false;
-  }
-
-  // The sync model has user created nodes if the type's root node has any
-  // children.
-  *has_nodes = type_root_node.HasChildren();
-  return true;
-}
-
-bool GenericChangeProcessor::CryptoReadyIfNecessary(syncer::ModelType type) {
-  DCHECK(CalledOnValidThread());
-  DCHECK_NE(type, syncer::UNSPECIFIED);
-  // We only access the cryptographer while holding a transaction.
-  syncer::ReadTransaction trans(FROM_HERE, share_handle());
-  const syncer::ModelTypeSet encrypted_types = trans.GetEncryptedTypes();
-  return !encrypted_types.Has(type) ||
-         trans.GetCryptographer()->is_ready();
-}
-
-void GenericChangeProcessor::StartImpl(Profile* profile) {
-  DCHECK(CalledOnValidThread());
-}
-
-syncer::UserShare* GenericChangeProcessor::share_handle() const {
-  DCHECK(CalledOnValidThread());
-  return share_handle_;
-}
-
-}  // namespace browser_sync
diff --git a/chrome/browser/sync/glue/generic_change_processor.h b/chrome/browser/sync/glue/generic_change_processor.h
deleted file mode 100644
index 2af4e4e..0000000
--- a/chrome/browser/sync/glue/generic_change_processor.h
+++ /dev/null
@@ -1,150 +0,0 @@
-// Copyright (c) 2012 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 CHROME_BROWSER_SYNC_GLUE_GENERIC_CHANGE_PROCESSOR_H_
-#define CHROME_BROWSER_SYNC_GLUE_GENERIC_CHANGE_PROCESSOR_H_
-
-#include <vector>
-
-#include "base/compiler_specific.h"
-#include "base/memory/weak_ptr.h"
-#include "base/threading/non_thread_safe.h"
-#include "chrome/browser/sync/glue/change_processor.h"
-#include "components/sync_driver/data_type_controller.h"
-#include "components/sync_driver/data_type_error_handler.h"
-#include "sync/api/attachments/attachment_service.h"
-#include "sync/api/attachments/attachment_service_proxy.h"
-#include "sync/api/sync_change_processor.h"
-#include "sync/api/sync_merge_result.h"
-
-namespace syncer {
-class SyncData;
-class SyncableService;
-class WriteNode;
-class WriteTransaction;
-
-typedef std::vector<syncer::SyncData> SyncDataList;
-}  // namespace syncer
-
-namespace browser_sync {
-
-// TODO(sync): deprecate all change processors and have them replaced by
-// instances of this.
-// Datatype agnostic change processor. One instance of GenericChangeProcessor
-// is created for each datatype and lives on the datatype's thread. It then
-// handles all interaction with the sync api, both translating pushes from the
-// local service into transactions and receiving changes from the sync model,
-// which then get converted into SyncChange's and sent to the local service.
-//
-// As a rule, the GenericChangeProcessor is not thread safe, and should only
-// be used on the same thread in which it was created.
-class GenericChangeProcessor : public ChangeProcessor,
-                               public syncer::SyncChangeProcessor,
-                               public base::NonThreadSafe {
- public:
-  // Create a change processor and connect it to the syncer.
-  GenericChangeProcessor(
-      DataTypeErrorHandler* error_handler,
-      const base::WeakPtr<syncer::SyncableService>& local_service,
-      const base::WeakPtr<syncer::SyncMergeResult>& merge_result,
-      syncer::UserShare* user_share,
-      scoped_ptr<syncer::AttachmentService> attachment_service);
-  virtual ~GenericChangeProcessor();
-
-  // ChangeProcessor interface.
-  // Build and store a list of all changes into |syncer_changes_|.
-  virtual void ApplyChangesFromSyncModel(
-      const syncer::BaseTransaction* trans,
-      int64 version,
-      const syncer::ImmutableChangeRecordList& changes) OVERRIDE;
-  // Passes |syncer_changes_|, built in ApplyChangesFromSyncModel, onto
-  // |local_service_| by way of its ProcessSyncChanges method.
-  virtual void CommitChangesFromSyncModel() OVERRIDE;
-
-  // syncer::SyncChangeProcessor implementation.
-  virtual syncer::SyncError ProcessSyncChanges(
-      const tracked_objects::Location& from_here,
-      const syncer::SyncChangeList& change_list) OVERRIDE;
-  virtual syncer::SyncDataList GetAllSyncData(syncer::ModelType type)
-      const OVERRIDE;
-  virtual syncer::SyncError UpdateDataTypeContext(
-      syncer::ModelType type,
-      syncer::SyncChangeProcessor::ContextRefreshStatus refresh_status,
-      const std::string& context) OVERRIDE;
-
-  // Similar to above, but returns a SyncError for use by direct clients
-  // of GenericChangeProcessor that may need more error visibility.
-  virtual syncer::SyncError GetAllSyncDataReturnError(
-      syncer::ModelType type,
-      syncer::SyncDataList* data) const;
-
-  // If a datatype context associated with |type| exists, fills |context| and
-  // returns true. Otheriwse, if there has not been a context set, returns
-  // false.
-  virtual bool GetDataTypeContext(syncer::ModelType type,
-                                  std::string* context) const;
-
-  // Returns the number of items for this type.
-  virtual int GetSyncCountForType(syncer::ModelType type);
-
-  // Generic versions of AssociatorInterface methods. Called by
-  // syncer::SyncableServiceAdapter or the DataTypeController.
-  virtual bool SyncModelHasUserCreatedNodes(syncer::ModelType type,
-                                            bool* has_nodes);
-  virtual bool CryptoReadyIfNecessary(syncer::ModelType type);
-
- protected:
-  // ChangeProcessor interface.
-  virtual void StartImpl(Profile* profile) OVERRIDE;           // Does nothing.
-  virtual syncer::UserShare* share_handle() const OVERRIDE;
-
- private:
-  // Helper methods for acting on changes coming from the datatype. These are
-  // logically part of ProcessSyncChanges.
-  syncer::SyncError HandleActionAdd(const syncer::SyncChange& change,
-                                    const std::string& type_str,
-                                    const syncer::ModelType& type,
-                                    const syncer::WriteTransaction& trans,
-                                    syncer::WriteNode* sync_node);
-  syncer::SyncError HandleActionUpdate(const syncer::SyncChange& change,
-                                       const std::string& type_str,
-                                       const syncer::ModelType& type,
-                                       const syncer::WriteTransaction& trans,
-                                       syncer::WriteNode* sync_node);
-
-  // The SyncableService this change processor will forward changes on to.
-  const base::WeakPtr<syncer::SyncableService> local_service_;
-
-  // A SyncMergeResult used to track the changes made during association. The
-  // owner will invalidate the weak pointer when association is complete. While
-  // the pointer is valid though, we increment it with any changes received
-  // via ProcessSyncChanges.
-  const base::WeakPtr<syncer::SyncMergeResult> merge_result_;
-
-  // The current list of changes received from the syncer. We buffer because
-  // we must ensure no syncapi transaction is held when we pass it on to
-  // |local_service_|.
-  // Set in ApplyChangesFromSyncModel, consumed in CommitChangesFromSyncModel.
-  syncer::SyncChangeList syncer_changes_;
-
-  // Our handle to the sync model. Unlike normal ChangeProcessors, we need to
-  // be able to access the sync model before the change processor begins
-  // listening to changes (the local_service_ will be interacting with us
-  // when it starts up). As such we can't wait until Start(_) has been called,
-  // and have to keep a local pointer to the user_share.
-  syncer::UserShare* const share_handle_;
-
-  scoped_ptr<syncer::AttachmentService> attachment_service_;
-  // Must be destroyed before attachment_service_ to ensure WeakPtrs are
-  // invalidated before attachment_service_ is destroyed.
-  base::WeakPtrFactory<syncer::AttachmentService>
-      attachment_service_weak_ptr_factory_;
-  syncer::AttachmentServiceProxy attachment_service_proxy_;
-
-  DISALLOW_COPY_AND_ASSIGN(GenericChangeProcessor);
-};
-
-}  // namespace browser_sync
-
-#endif  // CHROME_BROWSER_SYNC_GLUE_GENERIC_CHANGE_PROCESSOR_H_
diff --git a/chrome/browser/sync/glue/generic_change_processor_unittest.cc b/chrome/browser/sync/glue/generic_change_processor_unittest.cc
deleted file mode 100644
index 499aa61..0000000
--- a/chrome/browser/sync/glue/generic_change_processor_unittest.cc
+++ /dev/null
@@ -1,246 +0,0 @@
-// Copyright 2013 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 "chrome/browser/sync/glue/generic_change_processor.h"
-
-#include "base/memory/scoped_ptr.h"
-#include "base/memory/weak_ptr.h"
-#include "base/message_loop/message_loop.h"
-#include "base/strings/stringprintf.h"
-#include "components/sync_driver/data_type_error_handler_mock.h"
-#include "sync/api/attachments/fake_attachment_service.h"
-#include "sync/api/fake_syncable_service.h"
-#include "sync/api/sync_change.h"
-#include "sync/api/sync_merge_result.h"
-#include "sync/internal_api/public/base/model_type.h"
-#include "sync/internal_api/public/read_node.h"
-#include "sync/internal_api/public/read_transaction.h"
-#include "sync/internal_api/public/test/test_user_share.h"
-#include "sync/internal_api/public/user_share.h"
-#include "sync/internal_api/public/write_node.h"
-#include "sync/internal_api/public/write_transaction.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace browser_sync {
-
-namespace {
-
-class SyncGenericChangeProcessorTest : public testing::Test {
- public:
-  // It doesn't matter which type we use.  Just pick one.
-  static const syncer::ModelType kType = syncer::PREFERENCES;
-
-  SyncGenericChangeProcessorTest() :
-      sync_merge_result_(kType),
-      merge_result_ptr_factory_(&sync_merge_result_),
-      syncable_service_ptr_factory_(&fake_syncable_service_) {
-  }
-
-  virtual void SetUp() OVERRIDE {
-    test_user_share_.SetUp();
-    syncer::ModelTypeSet types = syncer::ProtocolTypes();
-    for (syncer::ModelTypeSet::Iterator iter = types.First(); iter.Good();
-         iter.Inc()) {
-      syncer::TestUserShare::CreateRoot(iter.Get(),
-                                        test_user_share_.user_share());
-    }
-    test_user_share_.encryption_handler()->Init();
-    change_processor_.reset(new GenericChangeProcessor(
-        &data_type_error_handler_,
-        syncable_service_ptr_factory_.GetWeakPtr(),
-        merge_result_ptr_factory_.GetWeakPtr(),
-        test_user_share_.user_share(),
-        syncer::FakeAttachmentService::CreateForTest()));
-  }
-
-  virtual void TearDown() OVERRIDE {
-    test_user_share_.TearDown();
-  }
-
-  void BuildChildNodes(int n) {
-    syncer::WriteTransaction trans(FROM_HERE, user_share());
-    syncer::ReadNode root(&trans);
-    ASSERT_EQ(syncer::BaseNode::INIT_OK,
-              root.InitByTagLookup(syncer::ModelTypeToRootTag(kType)));
-    for (int i = 0; i < n; ++i) {
-      syncer::WriteNode node(&trans);
-      node.InitUniqueByCreation(kType, root, base::StringPrintf("node%05d", i));
-    }
-  }
-
-  GenericChangeProcessor* change_processor() {
-    return change_processor_.get();
-  }
-
-  syncer::UserShare* user_share() {
-    return test_user_share_.user_share();
-  }
-
- private:
-  base::MessageLoopForUI loop_;
-
-  syncer::SyncMergeResult sync_merge_result_;
-  base::WeakPtrFactory<syncer::SyncMergeResult> merge_result_ptr_factory_;
-
-  syncer::FakeSyncableService fake_syncable_service_;
-  base::WeakPtrFactory<syncer::FakeSyncableService>
-      syncable_service_ptr_factory_;
-
-  DataTypeErrorHandlerMock data_type_error_handler_;
-  syncer::TestUserShare test_user_share_;
-
-  scoped_ptr<GenericChangeProcessor> change_processor_;
-};
-
-// Similar to above, but focused on the method that implements sync/api
-// interfaces and is hence exposed to datatypes directly.
-TEST_F(SyncGenericChangeProcessorTest, StressGetAllSyncData) {
-  const int kNumChildNodes = 1000;
-  const int kRepeatCount = 1;
-
-  ASSERT_NO_FATAL_FAILURE(BuildChildNodes(kNumChildNodes));
-
-  for (int i = 0; i < kRepeatCount; ++i) {
-    syncer::SyncDataList sync_data =
-        change_processor()->GetAllSyncData(kType);
-
-    // Start with a simple test.  We can add more in-depth testing later.
-    EXPECT_EQ(static_cast<size_t>(kNumChildNodes), sync_data.size());
-  }
-}
-
-TEST_F(SyncGenericChangeProcessorTest, SetGetPasswords) {
-  const int kNumPasswords = 10;
-  sync_pb::PasswordSpecificsData password_data;
-  password_data.set_username_value("user");
-
-  sync_pb::EntitySpecifics password_holder;
-
-  syncer::SyncChangeList change_list;
-  for (int i = 0; i < kNumPasswords; ++i) {
-    password_data.set_password_value(
-        base::StringPrintf("password%i", i));
-    password_holder.mutable_password()->mutable_client_only_encrypted_data()->
-        CopyFrom(password_data);
-    change_list.push_back(
-        syncer::SyncChange(FROM_HERE,
-                           syncer::SyncChange::ACTION_ADD,
-                           syncer::SyncData::CreateLocalData(
-                               base::StringPrintf("tag%i", i),
-                               base::StringPrintf("title%i", i),
-                               password_holder)));
-  }
-
-  ASSERT_FALSE(
-      change_processor()->ProcessSyncChanges(FROM_HERE, change_list).IsSet());
-
-  syncer::SyncDataList password_list(
-      change_processor()->GetAllSyncData(syncer::PASSWORDS));
-
-  ASSERT_EQ(password_list.size(), change_list.size());
-  for (int i = 0; i < kNumPasswords; ++i) {
-    // Verify the password is returned properly.
-    ASSERT_TRUE(password_list[i].GetSpecifics().has_password());
-    ASSERT_TRUE(password_list[i].GetSpecifics().password().
-                    has_client_only_encrypted_data());
-    ASSERT_FALSE(password_list[i].GetSpecifics().password().has_encrypted());
-    const sync_pb::PasswordSpecificsData& sync_password =
-        password_list[i].GetSpecifics().password().client_only_encrypted_data();
-    const sync_pb::PasswordSpecificsData& change_password =
-        change_list[i].sync_data().GetSpecifics().password().
-            client_only_encrypted_data();
-    ASSERT_EQ(sync_password.password_value(), change_password.password_value());
-    ASSERT_EQ(sync_password.username_value(), change_password.username_value());
-
-    // Verify the raw sync data was stored securely.
-    syncer::ReadTransaction read_transaction(FROM_HERE, user_share());
-    syncer::ReadNode node(&read_transaction);
-    ASSERT_EQ(node.InitByClientTagLookup(syncer::PASSWORDS,
-                                         base::StringPrintf("tag%i", i)),
-              syncer::BaseNode::INIT_OK);
-    ASSERT_EQ(node.GetTitle(), "encrypted");
-    const sync_pb::EntitySpecifics& raw_specifics = node.GetEntitySpecifics();
-    ASSERT_TRUE(raw_specifics.has_password());
-    ASSERT_TRUE(raw_specifics.password().has_encrypted());
-    ASSERT_FALSE(raw_specifics.password().has_client_only_encrypted_data());
-  }
-}
-
-TEST_F(SyncGenericChangeProcessorTest, UpdatePasswords) {
-  const int kNumPasswords = 10;
-  sync_pb::PasswordSpecificsData password_data;
-  password_data.set_username_value("user");
-
-  sync_pb::EntitySpecifics password_holder;
-
-  syncer::SyncChangeList change_list;
-  syncer::SyncChangeList change_list2;
-  for (int i = 0; i < kNumPasswords; ++i) {
-    password_data.set_password_value(
-        base::StringPrintf("password%i", i));
-    password_holder.mutable_password()->mutable_client_only_encrypted_data()->
-        CopyFrom(password_data);
-    change_list.push_back(
-        syncer::SyncChange(FROM_HERE,
-                           syncer::SyncChange::ACTION_ADD,
-                           syncer::SyncData::CreateLocalData(
-                               base::StringPrintf("tag%i", i),
-                               base::StringPrintf("title%i", i),
-                               password_holder)));
-    password_data.set_password_value(
-        base::StringPrintf("password_m%i", i));
-    password_holder.mutable_password()->mutable_client_only_encrypted_data()->
-        CopyFrom(password_data);
-    change_list2.push_back(
-        syncer::SyncChange(FROM_HERE,
-                           syncer::SyncChange::ACTION_UPDATE,
-                           syncer::SyncData::CreateLocalData(
-                               base::StringPrintf("tag%i", i),
-                               base::StringPrintf("title_m%i", i),
-                               password_holder)));
-  }
-
-  ASSERT_FALSE(
-      change_processor()->ProcessSyncChanges(FROM_HERE, change_list).IsSet());
-  ASSERT_FALSE(
-      change_processor()->ProcessSyncChanges(FROM_HERE, change_list2).IsSet());
-
-  syncer::SyncDataList password_list(
-      change_processor()->GetAllSyncData(syncer::PASSWORDS));
-
-  ASSERT_EQ(password_list.size(), change_list2.size());
-  for (int i = 0; i < kNumPasswords; ++i) {
-    // Verify the password is returned properly.
-    ASSERT_TRUE(password_list[i].GetSpecifics().has_password());
-    ASSERT_TRUE(password_list[i].GetSpecifics().password().
-                    has_client_only_encrypted_data());
-    ASSERT_FALSE(password_list[i].GetSpecifics().password().has_encrypted());
-    const sync_pb::PasswordSpecificsData& sync_password =
-        password_list[i].GetSpecifics().password().client_only_encrypted_data();
-    const sync_pb::PasswordSpecificsData& change_password =
-        change_list2[i].sync_data().GetSpecifics().password().
-            client_only_encrypted_data();
-    ASSERT_EQ(sync_password.password_value(), change_password.password_value());
-    ASSERT_EQ(sync_password.username_value(), change_password.username_value());
-
-    // Verify the raw sync data was stored securely.
-    syncer::ReadTransaction read_transaction(FROM_HERE, user_share());
-    syncer::ReadNode node(&read_transaction);
-    ASSERT_EQ(node.InitByClientTagLookup(syncer::PASSWORDS,
-                                         base::StringPrintf("tag%i", i)),
-              syncer::BaseNode::INIT_OK);
-    ASSERT_EQ(node.GetTitle(), "encrypted");
-    const sync_pb::EntitySpecifics& raw_specifics = node.GetEntitySpecifics();
-    ASSERT_TRUE(raw_specifics.has_password());
-    ASSERT_TRUE(raw_specifics.password().has_encrypted());
-    ASSERT_FALSE(raw_specifics.password().has_client_only_encrypted_data());
-  }
-}
-
-// TODO(maniscalco): Add test cases that verify GenericChangeProcessor calls the
-// right methods on its AttachmentService at the right times (bug 353303).
-
-}  // namespace
-
-}  // namespace browser_sync
diff --git a/chrome/browser/sync/glue/non_frontend_data_type_controller.cc b/chrome/browser/sync/glue/non_frontend_data_type_controller.cc
index a3e6213..309cd5a 100644
--- a/chrome/browser/sync/glue/non_frontend_data_type_controller.cc
+++ b/chrome/browser/sync/glue/non_frontend_data_type_controller.cc
@@ -8,10 +8,10 @@
 #include "base/callback.h"
 #include "base/logging.h"
 #include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/sync/glue/change_processor.h"
 #include "chrome/browser/sync/glue/chrome_report_unrecoverable_error.h"
 #include "chrome/browser/sync/profile_sync_components_factory.h"
 #include "chrome/browser/sync/profile_sync_service.h"
+#include "components/sync_driver/change_processor.h"
 #include "components/sync_driver/model_associator.h"
 #include "content/public/browser/browser_thread.h"
 #include "sync/api/sync_error.h"
diff --git a/chrome/browser/sync/glue/non_frontend_data_type_controller_unittest.cc b/chrome/browser/sync/glue/non_frontend_data_type_controller_unittest.cc
index 9c48a86..9f8febb 100644
--- a/chrome/browser/sync/glue/non_frontend_data_type_controller_unittest.cc
+++ b/chrome/browser/sync/glue/non_frontend_data_type_controller_unittest.cc
@@ -13,12 +13,12 @@
 #include "base/synchronization/waitable_event.h"
 #include "base/test/test_timeouts.h"
 #include "base/tracked_objects.h"
-#include "chrome/browser/sync/glue/change_processor_mock.h"
 #include "chrome/browser/sync/glue/non_frontend_data_type_controller.h"
 #include "chrome/browser/sync/glue/non_frontend_data_type_controller_mock.h"
 #include "chrome/browser/sync/profile_sync_components_factory_mock.h"
 #include "chrome/browser/sync/profile_sync_service_mock.h"
 #include "chrome/test/base/profile_mock.h"
+#include "components/sync_driver/change_processor_mock.h"
 #include "components/sync_driver/data_type_controller_mock.h"
 #include "components/sync_driver/model_associator_mock.h"
 #include "content/public/test/test_browser_thread.h"
diff --git a/chrome/browser/sync/glue/search_engine_data_type_controller.h b/chrome/browser/sync/glue/search_engine_data_type_controller.h
index 1beb7d7..55da555 100644
--- a/chrome/browser/sync/glue/search_engine_data_type_controller.h
+++ b/chrome/browser/sync/glue/search_engine_data_type_controller.h
@@ -10,8 +10,8 @@
 #include "base/compiler_specific.h"
 #include "base/memory/scoped_ptr.h"
 #include "chrome/browser/search_engines/template_url_service.h"
-#include "chrome/browser/sync/glue/generic_change_processor.h"
 #include "chrome/browser/sync/glue/ui_data_type_controller.h"
+#include "components/sync_driver/generic_change_processor.h"
 #include "content/public/browser/notification_observer.h"
 #include "content/public/browser/notification_registrar.h"
 
diff --git a/chrome/browser/sync/glue/search_engine_data_type_controller_unittest.cc b/chrome/browser/sync/glue/search_engine_data_type_controller_unittest.cc
index 700968e..ddfd910 100644
--- a/chrome/browser/sync/glue/search_engine_data_type_controller_unittest.cc
+++ b/chrome/browser/sync/glue/search_engine_data_type_controller_unittest.cc
@@ -10,12 +10,12 @@
 #include "base/tracked_objects.h"
 #include "chrome/browser/search_engines/template_url_service_factory.h"
 #include "chrome/browser/search_engines/template_url_service_test_util.h"
-#include "chrome/browser/sync/glue/fake_generic_change_processor.h"
 #include "chrome/browser/sync/glue/search_engine_data_type_controller.h"
 #include "chrome/browser/sync/profile_sync_components_factory_mock.h"
 #include "chrome/browser/sync/profile_sync_service_mock.h"
 #include "chrome/test/base/profile_mock.h"
 #include "components/sync_driver/data_type_controller_mock.h"
+#include "components/sync_driver/fake_generic_change_processor.h"
 #include "sync/api/fake_syncable_service.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
diff --git a/chrome/browser/sync/glue/session_change_processor.cc b/chrome/browser/sync/glue/session_change_processor.cc
deleted file mode 100644
index 00cba9e..0000000
--- a/chrome/browser/sync/glue/session_change_processor.cc
+++ /dev/null
@@ -1,391 +0,0 @@
-// Copyright (c) 2012 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 "chrome/browser/sync/glue/session_change_processor.h"
-
-#include <string>
-#include <vector>
-
-#include "base/logging.h"
-#include "chrome/browser/chrome_notification_types.h"
-#include "chrome/browser/extensions/tab_helper.h"
-#include "chrome/browser/favicon/favicon_changed_details.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/sync/glue/session_model_associator.h"
-#include "chrome/browser/sync/glue/synced_tab_delegate.h"
-#include "chrome/browser/sync/profile_sync_service.h"
-#include "content/public/browser/navigation_controller.h"
-#include "content/public/browser/navigation_entry.h"
-#include "content/public/browser/notification_details.h"
-#include "content/public/browser/notification_service.h"
-#include "content/public/browser/notification_source.h"
-#include "content/public/browser/web_contents.h"
-#include "sync/api/sync_error.h"
-#include "sync/internal_api/public/base/model_type.h"
-#include "sync/internal_api/public/change_record.h"
-#include "sync/internal_api/public/read_node.h"
-#include "sync/protocol/session_specifics.pb.h"
-
-#if defined(ENABLE_MANAGED_USERS)
-#include "chrome/browser/managed_mode/managed_user_service.h"
-#include "chrome/browser/managed_mode/managed_user_service_factory.h"
-#endif
-
-using content::BrowserThread;
-using content::NavigationController;
-using content::WebContents;
-
-namespace browser_sync {
-
-namespace {
-
-// The URL at which the set of synced tabs is displayed. We treat it differently
-// from all other URL's as accessing it triggers a sync refresh of Sessions.
-static const char kNTPOpenTabSyncURL[] = "chrome://newtab/#open_tabs";
-
-// Extract the source SyncedTabDelegate from a NotificationSource originating
-// from a NavigationController, if it exists. Returns |NULL| otherwise.
-SyncedTabDelegate* ExtractSyncedTabDelegate(
-    const content::NotificationSource& source) {
-  return SyncedTabDelegate::ImplFromWebContents(
-      content::Source<NavigationController>(source).ptr()->GetWebContents());
-}
-
-}  // namespace
-
-SessionChangeProcessor::SessionChangeProcessor(
-    DataTypeErrorHandler* error_handler,
-    SessionModelAssociator* session_model_associator)
-    : ChangeProcessor(error_handler),
-      session_model_associator_(session_model_associator),
-      profile_(NULL),
-      setup_for_test_(false),
-      weak_ptr_factory_(this) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  DCHECK(error_handler);
-  DCHECK(session_model_associator_);
-}
-
-SessionChangeProcessor::SessionChangeProcessor(
-    DataTypeErrorHandler* error_handler,
-    SessionModelAssociator* session_model_associator,
-    bool setup_for_test)
-    : ChangeProcessor(error_handler),
-      session_model_associator_(session_model_associator),
-      profile_(NULL),
-      setup_for_test_(setup_for_test),
-      weak_ptr_factory_(this) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  DCHECK(error_handler);
-  DCHECK(session_model_associator_);
-}
-
-SessionChangeProcessor::~SessionChangeProcessor() {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-}
-
-void SessionChangeProcessor::Observe(
-    int type,
-    const content::NotificationSource& source,
-    const content::NotificationDetails& details) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  DCHECK(profile_);
-
-  // Track which windows and/or tabs are modified.
-  std::vector<SyncedTabDelegate*> modified_tabs;
-  switch (type) {
-    case chrome::NOTIFICATION_FAVICON_CHANGED: {
-      content::Details<FaviconChangedDetails> favicon_details(details);
-      session_model_associator_->FaviconsUpdated(favicon_details->urls);
-      // Note: we favicon notifications don't affect tab contents, so we return
-      // here instead of continuing on to reassociate tabs/windows.
-      return;
-    }
-
-    case chrome::NOTIFICATION_BROWSER_OPENED: {
-      Browser* browser = content::Source<Browser>(source).ptr();
-      if (!browser || browser->profile() != profile_) {
-        return;
-      }
-      DVLOG(1) << "Received BROWSER_OPENED for profile " << profile_;
-      break;
-    }
-
-    case chrome::NOTIFICATION_TAB_PARENTED: {
-      WebContents* web_contents = content::Source<WebContents>(source).ptr();
-      SyncedTabDelegate* tab =
-          SyncedTabDelegate::ImplFromWebContents(web_contents);
-      if (!tab || tab->profile() != profile_) {
-        return;
-      }
-      modified_tabs.push_back(tab);
-      DVLOG(1) << "Received TAB_PARENTED for profile " << profile_;
-      break;
-    }
-
-    case content::NOTIFICATION_LOAD_COMPLETED_MAIN_FRAME: {
-      WebContents* web_contents = content::Source<WebContents>(source).ptr();
-      SyncedTabDelegate* tab =
-          SyncedTabDelegate::ImplFromWebContents(web_contents);
-      if (!tab || tab->profile() != profile_) {
-        return;
-      }
-      modified_tabs.push_back(tab);
-      DVLOG(1) << "Received LOAD_COMPLETED_MAIN_FRAME for profile " << profile_;
-      break;
-    }
-
-    case content::NOTIFICATION_WEB_CONTENTS_DESTROYED: {
-      WebContents* web_contents = content::Source<WebContents>(source).ptr();
-      SyncedTabDelegate* tab =
-          SyncedTabDelegate::ImplFromWebContents(web_contents);
-      if (!tab || tab->profile() != profile_)
-        return;
-      modified_tabs.push_back(tab);
-      DVLOG(1) << "Received NOTIFICATION_WEB_CONTENTS_DESTROYED for profile "
-               << profile_;
-      break;
-    }
-
-    case content::NOTIFICATION_NAV_LIST_PRUNED: {
-      SyncedTabDelegate* tab = ExtractSyncedTabDelegate(source);
-      if (!tab || tab->profile() != profile_) {
-        return;
-      }
-      modified_tabs.push_back(tab);
-      DVLOG(1) << "Received NAV_LIST_PRUNED for profile " << profile_;
-      break;
-    }
-
-    case content::NOTIFICATION_NAV_ENTRY_CHANGED: {
-      SyncedTabDelegate* tab = ExtractSyncedTabDelegate(source);
-      if (!tab || tab->profile() != profile_) {
-        return;
-      }
-      modified_tabs.push_back(tab);
-      DVLOG(1) << "Received NAV_ENTRY_CHANGED for profile " << profile_;
-      break;
-    }
-
-    case content::NOTIFICATION_NAV_ENTRY_COMMITTED: {
-      SyncedTabDelegate* tab = ExtractSyncedTabDelegate(source);
-      if (!tab || tab->profile() != profile_) {
-        return;
-      }
-      modified_tabs.push_back(tab);
-      DVLOG(1) << "Received NAV_ENTRY_COMMITTED for profile " << profile_;
-      break;
-    }
-
-    case chrome::NOTIFICATION_TAB_CONTENTS_APPLICATION_EXTENSION_CHANGED: {
-      extensions::TabHelper* extension_tab_helper =
-          content::Source<extensions::TabHelper>(source).ptr();
-      if (extension_tab_helper->web_contents()->GetBrowserContext() !=
-              profile_) {
-        return;
-      }
-      if (extension_tab_helper->extension_app()) {
-        SyncedTabDelegate* tab = SyncedTabDelegate::ImplFromWebContents(
-            extension_tab_helper->web_contents());
-        modified_tabs.push_back(tab);
-      }
-      DVLOG(1) << "Received TAB_CONTENTS_APPLICATION_EXTENSION_CHANGED "
-               << "for profile " << profile_;
-      break;
-    }
-
-    default:
-      LOG(ERROR) << "Received unexpected notification of type "
-                  << type;
-      break;
-  }
-
-  ProcessModifiedTabs(modified_tabs);
-}
-
-void SessionChangeProcessor::ApplyChangesFromSyncModel(
-    const syncer::BaseTransaction* trans,
-    int64 model_version,
-    const syncer::ImmutableChangeRecordList& changes) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-
-  syncer::ReadNode root(trans);
-  if (root.InitByTagLookup(syncer::ModelTypeToRootTag(syncer::SESSIONS)) !=
-                           syncer::BaseNode::INIT_OK) {
-    error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE,
-        "Sessions root node lookup failed.");
-    return;
-  }
-
-  std::string local_tag = session_model_associator_->GetCurrentMachineTag();
-  for (syncer::ChangeRecordList::const_iterator it =
-           changes.Get().begin(); it != changes.Get().end(); ++it) {
-    const syncer::ChangeRecord& change = *it;
-    syncer::ChangeRecord::Action action(change.action);
-    if (syncer::ChangeRecord::ACTION_DELETE == action) {
-      // Deletions are all or nothing (since we only ever delete entire
-      // sessions). Therefore we don't care if it's a tab node or meta node,
-      // and just ensure we've disassociated.
-      DCHECK_EQ(syncer::GetModelTypeFromSpecifics(it->specifics),
-                syncer::SESSIONS);
-      const sync_pb::SessionSpecifics& specifics = it->specifics.session();
-      if (specifics.session_tag() == local_tag) {
-        // Another client has attempted to delete our local data (possibly by
-        // error or their/our clock is inaccurate). Just ignore the deletion
-        // for now to avoid any possible ping-pong delete/reassociate sequence.
-        LOG(WARNING) << "Local session data deleted. Ignoring until next local "
-                     << "navigation event.";
-      } else {
-        if (specifics.has_header()) {
-          // Disassociate only when header node is deleted. For tab node
-          // deletions, the header node will be updated and foreign tab will
-          // get deleted.
-          session_model_associator_->DisassociateForeignSession(
-              specifics.session_tag());
-        }
-      }
-      continue;
-    }
-
-    // Handle an update or add.
-    syncer::ReadNode sync_node(trans);
-    if (sync_node.InitByIdLookup(change.id) != syncer::BaseNode::INIT_OK) {
-      error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE,
-          "Session node lookup failed.");
-      return;
-    }
-
-    // Check that the changed node is a child of the session folder.
-    DCHECK(root.GetId() == sync_node.GetParentId());
-    DCHECK(syncer::SESSIONS == sync_node.GetModelType());
-
-    const sync_pb::SessionSpecifics& specifics(
-        sync_node.GetSessionSpecifics());
-    if (specifics.session_tag() == local_tag &&
-        !setup_for_test_) {
-      // We should only ever receive a change to our own machine's session info
-      // if encryption was turned on. In that case, the data is still the same,
-      // so we can ignore.
-      LOG(WARNING) << "Dropping modification to local session.";
-      return;
-    }
-    const base::Time& mtime = sync_node.GetModificationTime();
-    // The model associator handles foreign session updates and adds the same.
-    session_model_associator_->AssociateForeignSpecifics(specifics, mtime);
-  }
-
-  // Notify foreign session handlers that there are new sessions.
-  content::NotificationService::current()->Notify(
-      chrome::NOTIFICATION_FOREIGN_SESSION_UPDATED,
-      content::Source<Profile>(profile_),
-      content::NotificationService::NoDetails());
-}
-
-void SessionChangeProcessor::StartImpl(Profile* profile) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  DCHECK(profile);
-  DCHECK(profile_ == NULL);
-  profile_ = profile;
-  StartObserving();
-}
-
-void SessionChangeProcessor::OnNavigationBlocked(WebContents* web_contents) {
-  SyncedTabDelegate* tab =
-      SyncedTabDelegate::ImplFromWebContents(web_contents);
-  if (!tab)
-    return;
-
-  DCHECK(tab->profile() == profile_);
-
-  std::vector<SyncedTabDelegate*> modified_tabs;
-  modified_tabs.push_back(tab);
-  ProcessModifiedTabs(modified_tabs);
-}
-
-void SessionChangeProcessor::ProcessModifiedTabs(
-    const std::vector<SyncedTabDelegate*>& modified_tabs) {
-  // Check if this tab should trigger a session sync refresh. By virtue of
-  // it being a modified tab, we know the tab is active (so we won't do
-  // refreshes just because the refresh page is open in a background tab).
-  if (!modified_tabs.empty()) {
-    SyncedTabDelegate* tab = modified_tabs.front();
-    const content::NavigationEntry* entry = tab->GetActiveEntry();
-    if (!tab->IsBeingDestroyed() &&
-        entry &&
-        entry->GetVirtualURL().is_valid() &&
-        entry->GetVirtualURL().spec() == kNTPOpenTabSyncURL) {
-      DVLOG(1) << "Triggering sync refresh for sessions datatype.";
-      const syncer::ModelTypeSet types(syncer::SESSIONS);
-      content::NotificationService::current()->Notify(
-          chrome::NOTIFICATION_SYNC_REFRESH_LOCAL,
-          content::Source<Profile>(profile_),
-          content::Details<const syncer::ModelTypeSet>(&types));
-    }
-  }
-
-  // Associate tabs first so the synced session tracker is aware of them.
-  // Note that if we fail to associate, it means something has gone wrong,
-  // such as our local session being deleted, so we disassociate and associate
-  // again.
-  bool reassociation_needed = !modified_tabs.empty() &&
-      !session_model_associator_->AssociateTabs(modified_tabs, NULL);
-
-  // Note, we always associate windows because it's possible a tab became
-  // "interesting" by going to a valid URL, in which case it needs to be added
-  // to the window's tab information.
-  if (!reassociation_needed) {
-    reassociation_needed =
-        !session_model_associator_->AssociateWindows(false, NULL);
-  }
-
-  if (reassociation_needed) {
-    LOG(WARNING) << "Reassociation of local models triggered.";
-    syncer::SyncError error;
-    error = session_model_associator_->DisassociateModels();
-    error = session_model_associator_->AssociateModels(NULL, NULL);
-    if (error.IsSet()) {
-      error_handler()->OnSingleDatatypeUnrecoverableError(
-          error.location(),
-          error.message());
-    }
-  }
-}
-
-void SessionChangeProcessor::StartObserving() {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  if (!profile_)
-    return;
-  notification_registrar_.Add(this, chrome::NOTIFICATION_TAB_PARENTED,
-      content::NotificationService::AllSources());
-  notification_registrar_.Add(this,
-      content::NOTIFICATION_WEB_CONTENTS_DESTROYED,
-      content::NotificationService::AllSources());
-  notification_registrar_.Add(this, content::NOTIFICATION_NAV_LIST_PRUNED,
-      content::NotificationService::AllSources());
-  notification_registrar_.Add(this, content::NOTIFICATION_NAV_ENTRY_CHANGED,
-      content::NotificationService::AllSources());
-  notification_registrar_.Add(this, content::NOTIFICATION_NAV_ENTRY_COMMITTED,
-      content::NotificationService::AllSources());
-  notification_registrar_.Add(this, chrome::NOTIFICATION_BROWSER_OPENED,
-      content::NotificationService::AllBrowserContextsAndSources());
-  notification_registrar_.Add(this,
-      chrome::NOTIFICATION_TAB_CONTENTS_APPLICATION_EXTENSION_CHANGED,
-      content::NotificationService::AllSources());
-  notification_registrar_.Add(this,
-      content::NOTIFICATION_LOAD_COMPLETED_MAIN_FRAME,
-      content::NotificationService::AllBrowserContextsAndSources());
-  notification_registrar_.Add(this, chrome::NOTIFICATION_FAVICON_CHANGED,
-      content::Source<Profile>(profile_));
-#if defined(ENABLE_MANAGED_USERS)
-  if (profile_->IsManaged()) {
-    ManagedUserService* managed_user_service =
-        ManagedUserServiceFactory::GetForProfile(profile_);
-    managed_user_service->AddNavigationBlockedCallback(
-        base::Bind(&SessionChangeProcessor::OnNavigationBlocked,
-                   weak_ptr_factory_.GetWeakPtr()));
-  }
-#endif
-}
-
-}  // namespace browser_sync
diff --git a/chrome/browser/sync/glue/session_change_processor.h b/chrome/browser/sync/glue/session_change_processor.h
deleted file mode 100644
index 1152f8b..0000000
--- a/chrome/browser/sync/glue/session_change_processor.h
+++ /dev/null
@@ -1,90 +0,0 @@
-// Copyright (c) 2012 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 CHROME_BROWSER_SYNC_GLUE_SESSION_CHANGE_PROCESSOR_H_
-#define CHROME_BROWSER_SYNC_GLUE_SESSION_CHANGE_PROCESSOR_H_
-
-#include <vector>
-
-#include "base/basictypes.h"
-#include "base/compiler_specific.h"
-#include "chrome/browser/sync/glue/change_processor.h"
-#include "components/sync_driver/data_type_error_handler.h"
-#include "content/public/browser/notification_observer.h"
-#include "content/public/browser/notification_registrar.h"
-#include "content/public/browser/notification_types.h"
-
-class Profile;
-
-namespace content {
-class WebContents;
-}
-
-namespace browser_sync {
-
-class DataTypeErrorHandler;
-class SessionModelAssociator;
-class SyncedTabDelegate;
-
-// This class is responsible for taking changes from the
-// SessionService and applying them to the sync API 'syncable'
-// model, and vice versa. All operations and use of this class are
-// from the UI thread.
-class SessionChangeProcessor : public ChangeProcessor,
-                               public content::NotificationObserver {
- public:
-  // Does not take ownership of either argument.
-  SessionChangeProcessor(
-      DataTypeErrorHandler* error_handler,
-      SessionModelAssociator* session_model_associator);
-  // For testing only.
-  SessionChangeProcessor(
-      DataTypeErrorHandler* error_handler,
-      SessionModelAssociator* session_model_associator,
-      bool setup_for_test);
-  virtual ~SessionChangeProcessor();
-
-  // content::NotificationObserver implementation.
-  // BrowserSessionProvider -> sync API model change application.
-  virtual void Observe(int type,
-                       const content::NotificationSource& source,
-                       const content::NotificationDetails& details) OVERRIDE;
-
-  // ChangeProcessor implementation.
-  // sync API model -> BrowserSessionProvider change application.
-  virtual void ApplyChangesFromSyncModel(
-      const syncer::BaseTransaction* trans,
-      int64 model_version,
-      const syncer::ImmutableChangeRecordList& changes) OVERRIDE;
-
- protected:
-  // ChangeProcessor implementation.
-  virtual void StartImpl(Profile* profile) OVERRIDE;
-
- private:
-  void OnNavigationBlocked(content::WebContents* web_contents);
-
-  // Utility method to handle reassociation of tabs and windows.
-  void ProcessModifiedTabs(
-      const std::vector<SyncedTabDelegate*>& modified_tabs);
-
-  void StartObserving();
-
-  SessionModelAssociator* session_model_associator_;
-  content::NotificationRegistrar notification_registrar_;
-
-  // Profile being synced. Non-null if |running()| is true.
-  Profile* profile_;
-
-  // To bypass some checks/codepaths not applicable in tests.
-  bool setup_for_test_;
-
-  base::WeakPtrFactory<SessionChangeProcessor> weak_ptr_factory_;
-
-  DISALLOW_COPY_AND_ASSIGN(SessionChangeProcessor);
-};
-
-}  // namespace browser_sync
-
-#endif  // CHROME_BROWSER_SYNC_GLUE_SESSION_CHANGE_PROCESSOR_H_
diff --git a/chrome/browser/sync/glue/session_data_type_controller.cc b/chrome/browser/sync/glue/session_data_type_controller.cc
deleted file mode 100644
index c43866c..0000000
--- a/chrome/browser/sync/glue/session_data_type_controller.cc
+++ /dev/null
@@ -1,83 +0,0 @@
-// Copyright (c) 2012 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 "chrome/browser/sync/glue/session_data_type_controller.h"
-
-#include "base/metrics/histogram.h"
-#include "chrome/browser/chrome_notification_types.h"
-#include "chrome/browser/sync/glue/chrome_report_unrecoverable_error.h"
-#include "chrome/browser/sync/glue/synced_window_delegate.h"
-#include "chrome/browser/sync/profile_sync_components_factory.h"
-#include "content/public/browser/browser_thread.h"
-#include "content/public/browser/notification_details.h"
-#include "content/public/browser/notification_service.h"
-#include "content/public/browser/notification_source.h"
-
-using content::BrowserThread;
-
-namespace browser_sync {
-
-SessionDataTypeController::SessionDataTypeController(
-    ProfileSyncComponentsFactory* profile_sync_factory,
-    Profile* profile,
-    ProfileSyncService* sync_service)
-    : FrontendDataTypeController(
-          BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI),
-          base::Bind(&ChromeReportUnrecoverableError),
-          profile_sync_factory,
-          profile,
-          sync_service) {
-    }
-
-SessionModelAssociator* SessionDataTypeController::GetModelAssociator() {
-  return reinterpret_cast<SessionModelAssociator*>(model_associator_.get());
-}
-
-syncer::ModelType SessionDataTypeController::type() const {
-  return syncer::SESSIONS;
-}
-
-bool SessionDataTypeController::StartModels() {
-  DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
-  std::set<browser_sync::SyncedWindowDelegate*> window =
-      browser_sync::SyncedWindowDelegate::GetSyncedWindowDelegates();
-  for (std::set<browser_sync::SyncedWindowDelegate*>::const_iterator i =
-      window.begin(); i != window.end(); ++i) {
-    if ((*i)->IsSessionRestoreInProgress()) {
-      notification_registrar_.Add(
-          this,
-          chrome::NOTIFICATION_SESSION_RESTORE_COMPLETE,
-          content::Source<Profile>(profile_));
-      return false;
-    }
-  }
-  return true;
-}
-
-// Cleanup for our extra registrar usage.
-void SessionDataTypeController::CleanUpState() {
-  notification_registrar_.RemoveAll();
-}
-
-void SessionDataTypeController::Observe(
-    int type,
-    const content::NotificationSource& source,
-    const content::NotificationDetails& details) {
-  DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
-  DCHECK_EQ(chrome::NOTIFICATION_SESSION_RESTORE_COMPLETE, type);
-  DCHECK_EQ(profile_, content::Source<Profile>(source).ptr());
-  notification_registrar_.RemoveAll();
-  OnModelLoaded();
-}
-
-SessionDataTypeController::~SessionDataTypeController() {}
-
-void SessionDataTypeController::CreateSyncComponents() {
-  ProfileSyncComponentsFactory::SyncComponents sync_components =
-      profile_sync_factory_->CreateSessionSyncComponents(sync_service_, this);
-  set_model_associator(sync_components.model_associator);
-  set_change_processor(sync_components.change_processor);
-}
-
-}  // namespace browser_sync
diff --git a/chrome/browser/sync/glue/session_data_type_controller.h b/chrome/browser/sync/glue/session_data_type_controller.h
deleted file mode 100644
index 3312836..0000000
--- a/chrome/browser/sync/glue/session_data_type_controller.h
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright (c) 2012 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 CHROME_BROWSER_SYNC_GLUE_SESSION_DATA_TYPE_CONTROLLER_H_
-#define CHROME_BROWSER_SYNC_GLUE_SESSION_DATA_TYPE_CONTROLLER_H_
-
-#include <string>
-
-#include "base/compiler_specific.h"
-#include "chrome/browser/sync/glue/frontend_data_type_controller.h"
-#include "content/public/browser/notification_observer.h"
-#include "content/public/browser/notification_registrar.h"
-
-namespace browser_sync {
-
-class SessionModelAssociator;
-
-class SessionDataTypeController : public FrontendDataTypeController,
-                                  public content::NotificationObserver {
- public:
-  SessionDataTypeController(
-      ProfileSyncComponentsFactory* profile_sync_factory,
-      Profile* profile,
-      ProfileSyncService* sync_service);
-
-  SessionModelAssociator* GetModelAssociator();
-
-  // FrontendDataTypeController implementation.
-  virtual syncer::ModelType type() const OVERRIDE;
-
-  // NotificationObserver interface.
-  virtual void Observe(int type,
-                       const content::NotificationSource& source,
-                       const content::NotificationDetails& details) OVERRIDE;
-
- private:
-  virtual ~SessionDataTypeController();
-
-  // FrontendDataTypeController implementations.
-  virtual bool StartModels() OVERRIDE;
-  virtual void CleanUpState() OVERRIDE;
-  // Datatype specific creation of sync components.
-  virtual void CreateSyncComponents() OVERRIDE;
-
-  content::NotificationRegistrar notification_registrar_;
-
-  DISALLOW_COPY_AND_ASSIGN(SessionDataTypeController);
-};
-
-}  // namespace browser_sync
-
-#endif  // CHROME_BROWSER_SYNC_GLUE_SESSION_DATA_TYPE_CONTROLLER_H_
-
diff --git a/chrome/browser/sync/glue/session_model_associator.cc b/chrome/browser/sync/glue/session_model_associator.cc
deleted file mode 100644
index 0287961..0000000
--- a/chrome/browser/sync/glue/session_model_associator.cc
+++ /dev/null
@@ -1,1218 +0,0 @@
-// Copyright 2012 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 "chrome/browser/sync/glue/session_model_associator.h"
-
-#include <algorithm>
-#include <set>
-#include <utility>
-
-#include "base/bind.h"
-#include "base/location.h"
-#include "base/logging.h"
-#include "base/strings/utf_string_conversions.h"
-#include "base/threading/sequenced_worker_pool.h"
-#include "chrome/browser/chrome_notification_types.h"
-#include "chrome/browser/favicon/favicon_service_factory.h"
-#include "chrome/browser/history/history_service.h"
-#if !defined(OS_ANDROID)
-#include "chrome/browser/network_time/navigation_time_helper.h"
-#endif
-#include "chrome/browser/prefs/pref_service_syncable.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/sessions/session_id.h"
-#include "chrome/browser/sync/glue/device_info.h"
-#include "chrome/browser/sync/glue/synced_device_tracker.h"
-#include "chrome/browser/sync/glue/synced_session.h"
-#include "chrome/browser/sync/glue/synced_tab_delegate.h"
-#include "chrome/browser/sync/glue/synced_window_delegate.h"
-#include "chrome/browser/sync/profile_sync_service.h"
-#include "chrome/common/chrome_switches.h"
-#include "chrome/common/url_constants.h"
-#include "components/sessions/serialized_navigation_entry.h"
-#include "components/sync_driver/sync_prefs.h"
-#include "components/user_prefs/pref_registry_syncable.h"
-#include "content/public/browser/browser_thread.h"
-#include "content/public/browser/favicon_status.h"
-#include "content/public/browser/navigation_entry.h"
-#include "content/public/browser/notification_details.h"
-#include "content/public/browser/notification_service.h"
-#include "content/public/common/url_constants.h"
-#include "sync/api/sync_error.h"
-#include "sync/api/time.h"
-#include "sync/internal_api/public/base/model_type.h"
-#include "sync/internal_api/public/read_node.h"
-#include "sync/internal_api/public/read_transaction.h"
-#include "sync/internal_api/public/write_node.h"
-#include "sync/internal_api/public/write_transaction.h"
-#include "sync/protocol/session_specifics.pb.h"
-#include "sync/syncable/directory.h"
-#include "sync/syncable/syncable_read_transaction.h"
-#include "sync/syncable/syncable_write_transaction.h"
-#if defined(OS_LINUX)
-#include "base/linux_util.h"
-#elif defined(OS_WIN)
-#include <windows.h>
-#endif
-
-using content::BrowserThread;
-using content::NavigationEntry;
-using sessions::SerializedNavigationEntry;
-using syncer::SESSIONS;
-
-namespace {
-
-std::string SessionTagPrefix() {
-  return std::string("session_sync");
-}
-
-// Given a transaction, returns the GUID-based string that should be used for
-// |current_machine_tag_|.
-std::string GetMachineTagFromTransaction(
-    syncer::WriteTransaction* trans) {
-  syncer::syncable::Directory* dir = trans->GetWrappedWriteTrans()->directory();
-  std::string machine_tag = SessionTagPrefix();
-  machine_tag.append(dir->cache_guid());
-  return machine_tag;
-}
-
-// Given a session tag this function returns the client_id(cache_guid).
-std::string GetClientIdFromSessionTag(const std::string& session_tag) {
-  if (session_tag.find_first_of(SessionTagPrefix()) == std::string::npos) {
-    LOG(ERROR) << "Session tag is malformatted";
-    return std::string();
-  }
-
-  std::string client_id = session_tag.substr(
-      SessionTagPrefix().length(),
-      session_tag.length());
-
-  return client_id;
-}
-
-}  // namespace
-
-namespace browser_sync {
-
-namespace {
-static const char kNoSessionsFolderError[] =
-    "Server did not create the top-level sessions node. We "
-    "might be running against an out-of-date server.";
-
-// The maximum number of navigations in each direction we care to sync.
-static const int kMaxSyncNavigationCount = 6;
-
-// Default number of days without activity after which a session is considered
-// stale and becomes a candidate for garbage collection.
-static const size_t kDefaultStaleSessionThresholdDays = 14;  // 2 weeks.
-
-// Maximum number of favicons to sync.
-// TODO(zea): pull this from the server.
-static const int kMaxSyncFavicons = 200;
-
-}  // namespace
-
-SessionModelAssociator::SessionModelAssociator(
-    ProfileSyncService* sync_service,
-    DataTypeErrorHandler* error_handler)
-    : local_tab_pool_(sync_service),
-      local_session_syncid_(syncer::kInvalidId),
-      sync_service_(sync_service),
-      stale_session_threshold_days_(kDefaultStaleSessionThresholdDays),
-      setup_for_test_(false),
-      waiting_for_change_(false),
-      profile_(sync_service->profile()),
-      error_handler_(error_handler),
-      favicon_cache_(profile_,
-                     sync_service->current_experiments().favicon_sync_limit),
-      test_weak_factory_(this) {
-  DCHECK(CalledOnValidThread());
-  DCHECK(sync_service_);
-  DCHECK(profile_);
-}
-
-SessionModelAssociator::SessionModelAssociator(ProfileSyncService* sync_service,
-                                               bool setup_for_test)
-    : local_tab_pool_(sync_service),
-      local_session_syncid_(syncer::kInvalidId),
-      sync_service_(sync_service),
-      stale_session_threshold_days_(kDefaultStaleSessionThresholdDays),
-      setup_for_test_(setup_for_test),
-      waiting_for_change_(false),
-      profile_(sync_service->profile()),
-      error_handler_(NULL),
-      favicon_cache_(profile_, kMaxSyncFavicons),
-      test_weak_factory_(this) {
-  DCHECK(CalledOnValidThread());
-  DCHECK(sync_service_);
-  DCHECK(profile_);
-  DCHECK(setup_for_test);
-}
-
-SessionModelAssociator::~SessionModelAssociator() {
-  DCHECK(CalledOnValidThread());
-}
-
-bool SessionModelAssociator::SyncModelHasUserCreatedNodes(bool* has_nodes) {
-  DCHECK(CalledOnValidThread());
-  CHECK(has_nodes);
-  *has_nodes = false;
-  syncer::ReadTransaction trans(FROM_HERE, sync_service_->GetUserShare());
-  syncer::ReadNode root(&trans);
-  if (root.InitByTagLookup(syncer::ModelTypeToRootTag(syncer::SESSIONS)) !=
-                           syncer::BaseNode::INIT_OK) {
-    LOG(ERROR) << kNoSessionsFolderError;
-    return false;
-  }
-  // The sync model has user created nodes iff the sessions folder has
-  // any children.
-  *has_nodes = root.HasChildren();
-  return true;
-}
-
-int64 SessionModelAssociator::GetSyncIdFromSessionTag(const std::string& tag) {
-  DCHECK(CalledOnValidThread());
-  syncer::ReadTransaction trans(FROM_HERE, sync_service_->GetUserShare());
-  syncer::ReadNode node(&trans);
-  if (node.InitByClientTagLookup(SESSIONS, tag) != syncer::BaseNode::INIT_OK)
-    return syncer::kInvalidId;
-  return node.GetId();
-}
-
-bool SessionModelAssociator::AssociateWindows(bool reload_tabs,
-                                              syncer::SyncError* error) {
-  DCHECK(CalledOnValidThread());
-  std::string local_tag = GetCurrentMachineTag();
-  sync_pb::SessionSpecifics specifics;
-  specifics.set_session_tag(local_tag);
-  sync_pb::SessionHeader* header_s = specifics.mutable_header();
-  SyncedSession* current_session =
-      synced_session_tracker_.GetSession(local_tag);
-  current_session->modified_time = base::Time::Now();
-  header_s->set_client_name(current_session_name_);
-  header_s->set_device_type(DeviceInfo::GetLocalDeviceType());
-
-  synced_session_tracker_.ResetSessionTracking(local_tag);
-  std::set<SyncedWindowDelegate*> windows =
-      SyncedWindowDelegate::GetSyncedWindowDelegates();
-  for (std::set<SyncedWindowDelegate*>::const_iterator i =
-           windows.begin(); i != windows.end(); ++i) {
-    // Make sure the window has tabs and a viewable window. The viewable window
-    // check is necessary because, for example, when a browser is closed the
-    // destructor is not necessarily run immediately. This means its possible
-    // for us to get a handle to a browser that is about to be removed. If
-    // the tab count is 0 or the window is NULL, the browser is about to be
-    // deleted, so we ignore it.
-    if (ShouldSyncWindow(*i) && (*i)->GetTabCount() && (*i)->HasWindow()) {
-      sync_pb::SessionWindow window_s;
-      SessionID::id_type window_id = (*i)->GetSessionId();
-      DVLOG(1) << "Associating window " << window_id << " with "
-               << (*i)->GetTabCount() << " tabs.";
-      window_s.set_window_id(window_id);
-      // Note: We don't bother to set selected tab index anymore. We still
-      // consume it when receiving foreign sessions, as reading it is free, but
-      // it triggers too many sync cycles with too little value to make setting
-      // it worthwhile.
-      if ((*i)->IsTypeTabbed()) {
-        window_s.set_browser_type(
-            sync_pb::SessionWindow_BrowserType_TYPE_TABBED);
-      } else {
-        window_s.set_browser_type(
-            sync_pb::SessionWindow_BrowserType_TYPE_POPUP);
-      }
-
-      // Store the order of tabs.
-      bool found_tabs = false;
-      for (int j = 0; j < (*i)->GetTabCount(); ++j) {
-        SessionID::id_type tab_id = (*i)->GetTabIdAt(j);
-        SyncedTabDelegate* synced_tab = (*i)->GetTabAt(j);
-
-        // GetTabAt can return a null tab; in that case just skip it.
-        if (!synced_tab)
-          continue;
-
-        if (!synced_tab->HasWebContents()) {
-          // For tabs without WebContents update the |tab_id|, as it could have
-          // changed after a session restore.
-          // Note: We cannot check if a tab is valid if it has no WebContents.
-          // We assume any such tab is valid and leave the contents of
-          // corresponding sync node unchanged.
-          if (synced_tab->GetSyncId() > TabNodePool::kInvalidTabNodeID &&
-              tab_id > TabNodePool::kInvalidTabID) {
-            UpdateTabIdIfNecessary(synced_tab->GetSyncId(), tab_id);
-            found_tabs = true;
-            window_s.add_tab(tab_id);
-          }
-          continue;
-        }
-
-        if (reload_tabs) {
-          // It's possible for GetTabAt to return a tab which has no web
-          // contents. We can assume this means the tab already existed but
-          // hasn't changed, so no need to reassociate.
-          if (synced_tab->HasWebContents() &&
-              !AssociateTab(synced_tab, error)) {
-            // Association failed. Either we need to re-associate, or this is an
-            // unrecoverable error.
-            return false;
-          }
-        }
-
-        // If the tab is valid, it would have been added to the tracker either
-        // by the above AssociateTab call (at association time), or by the
-        // change processor calling AssociateTab for all modified tabs.
-        // Therefore, we can key whether this window has valid tabs based on
-        // the tab's presence in the tracker.
-        const SessionTab* tab = NULL;
-        if (synced_session_tracker_.LookupSessionTab(local_tag, tab_id, &tab)) {
-          found_tabs = true;
-          window_s.add_tab(tab_id);
-        }
-      }
-      // Only add a window if it contains valid tabs.
-      if (found_tabs) {
-        sync_pb::SessionWindow* header_window = header_s->add_window();
-        *header_window = window_s;
-
-        // Update this window's representation in the synced session tracker.
-        synced_session_tracker_.PutWindowInSession(local_tag, window_id);
-        PopulateSessionWindowFromSpecifics(
-            local_tag,
-            window_s,
-            base::Time::Now(),
-            current_session->windows[window_id],
-            &synced_session_tracker_);
-      }
-    }
-  }
-
-  local_tab_pool_.DeleteUnassociatedTabNodes();
-  // Free memory for closed windows and tabs.
-  synced_session_tracker_.CleanupSession(local_tag);
-
-  syncer::WriteTransaction trans(FROM_HERE, sync_service_->GetUserShare());
-  syncer::WriteNode header_node(&trans);
-  if (header_node.InitByIdLookup(local_session_syncid_) !=
-          syncer::BaseNode::INIT_OK) {
-    if (error) {
-      *error = error_handler_->CreateAndUploadError(
-           FROM_HERE,
-           "Failed to load local session header node.",
-           model_type());
-    }
-    return false;
-  }
-  header_node.SetSessionSpecifics(specifics);
-  if (waiting_for_change_) QuitLoopForSubtleTesting();
-  return true;
-}
-
-// Static.
-bool SessionModelAssociator::ShouldSyncWindow(
-    const SyncedWindowDelegate* window) {
-  if (window->IsApp())
-    return false;
-  return window->IsTypeTabbed() || window->IsTypePopup();
-}
-
-bool SessionModelAssociator::AssociateTabs(
-    const std::vector<SyncedTabDelegate*>& tabs,
-    syncer::SyncError* error) {
-  DCHECK(CalledOnValidThread());
-  for (std::vector<SyncedTabDelegate*>::const_iterator i = tabs.begin();
-       i != tabs.end();
-       ++i) {
-    if (!AssociateTab(*i, error))
-      return false;
-  }
-  if (waiting_for_change_) QuitLoopForSubtleTesting();
-  return true;
-}
-
-bool SessionModelAssociator::AssociateTab(SyncedTabDelegate* const tab,
-                                          syncer::SyncError* error) {
-  DCHECK(CalledOnValidThread());
-  DCHECK(tab->HasWebContents());
-  int tab_node_id(TabNodePool::kInvalidTabNodeID);
-  SessionID::id_type tab_id = tab->GetSessionId();
-  if (tab->IsBeingDestroyed()) {
-    // This tab is closing.
-    TabLinksMap::iterator tab_iter = local_tab_map_.find(tab_id);
-    if (tab_iter == local_tab_map_.end()) {
-      // We aren't tracking this tab (for example, sync setting page).
-      return true;
-    }
-    local_tab_pool_.FreeTabNode(tab_iter->second->tab_node_id());
-    local_tab_map_.erase(tab_iter);
-    return true;
-  }
-
-  if (!ShouldSyncTab(*tab))
-    return true;
-
-  TabLinksMap::iterator local_tab_map_iter = local_tab_map_.find(tab_id);
-  TabLink* tab_link = NULL;
-  if (local_tab_map_iter == local_tab_map_.end()) {
-    tab_node_id = tab->GetSyncId();
-    // if there is an old sync node for the tab, reuse it.
-    if (!local_tab_pool_.IsUnassociatedTabNode(tab_node_id)) {
-      // This is a new tab, get a sync node for it.
-      tab_node_id = local_tab_pool_.GetFreeTabNode();
-      if (tab_node_id == TabNodePool::kInvalidTabNodeID) {
-        if (error) {
-          *error = error_handler_->CreateAndUploadError(
-              FROM_HERE,
-              "Received invalid tab node from tab pool.",
-              model_type());
-        }
-        return false;
-      }
-      tab->SetSyncId(tab_node_id);
-    }
-    local_tab_pool_.AssociateTabNode(tab_node_id, tab_id);
-    tab_link = new TabLink(tab_node_id, tab);
-    local_tab_map_[tab_id] = make_linked_ptr<TabLink>(tab_link);
-  } else {
-    // This tab is already associated with a sync node, reuse it.
-    // Note: on some platforms the tab object may have changed, so we ensure
-    // the tab link is up to date.
-    tab_link = local_tab_map_iter->second.get();
-    local_tab_map_iter->second->set_tab(tab);
-  }
-  DCHECK(tab_link);
-  DCHECK_NE(tab_link->tab_node_id(), TabNodePool::kInvalidTabNodeID);
-
-  DVLOG(1) << "Reloading tab " << tab_id << " from window "
-           << tab->GetWindowId();
-  return WriteTabContentsToSyncModel(tab_link, error);
-}
-
-// static
-GURL SessionModelAssociator::GetCurrentVirtualURL(
-    const SyncedTabDelegate& tab_delegate) {
-  const int current_index = tab_delegate.GetCurrentEntryIndex();
-  const int pending_index = tab_delegate.GetPendingEntryIndex();
-  const NavigationEntry* current_entry =
-      (current_index == pending_index) ?
-      tab_delegate.GetPendingEntry() :
-      tab_delegate.GetEntryAtIndex(current_index);
-  return current_entry->GetVirtualURL();
-}
-
-// static
-GURL SessionModelAssociator::GetCurrentFaviconURL(
-    const SyncedTabDelegate& tab_delegate) {
-  const int current_index = tab_delegate.GetCurrentEntryIndex();
-  const int pending_index = tab_delegate.GetPendingEntryIndex();
-  const NavigationEntry* current_entry =
-      (current_index == pending_index) ?
-      tab_delegate.GetPendingEntry() :
-      tab_delegate.GetEntryAtIndex(current_index);
-  return (current_entry->GetFavicon().valid ?
-          current_entry->GetFavicon().url :
-          GURL());
-}
-
-bool SessionModelAssociator::WriteTabContentsToSyncModel(
-    TabLink* tab_link,
-    syncer::SyncError* error) {
-  DCHECK(CalledOnValidThread());
-  const SyncedTabDelegate& tab_delegate = *(tab_link->tab());
-  int tab_node_id = tab_link->tab_node_id();
-  GURL old_tab_url = tab_link->url();
-  const GURL new_url = GetCurrentVirtualURL(tab_delegate);
-  DVLOG(1) << "Local tab " << tab_delegate.GetSessionId()
-           << " now has URL " << new_url.spec();
-
-  SessionTab* session_tab = NULL;
-  {
-    syncer::WriteTransaction trans(FROM_HERE, sync_service_->GetUserShare());
-    syncer::WriteNode tab_node(&trans);
-    if (tab_node.InitByClientTagLookup(
-            syncer::SESSIONS,
-            TabNodePool::TabIdToTag(current_machine_tag_, tab_node_id)) !=
-        syncer::BaseNode::INIT_OK) {
-      if (error) {
-        *error = error_handler_->CreateAndUploadError(
-            FROM_HERE,
-            "Failed to look up local tab node",
-            model_type());
-      }
-      return false;
-    }
-
-    // Load the last stored version of this tab so we can compare changes. If
-    // this is a new tab, session_tab will be a new, blank SessionTab object.
-    sync_pb::SessionSpecifics specifics = tab_node.GetSessionSpecifics();
-    const int s_tab_node_id(specifics.tab_node_id());
-    DCHECK_EQ(tab_node_id, s_tab_node_id);
-    session_tab =
-        synced_session_tracker_.GetTab(GetCurrentMachineTag(),
-                                       tab_delegate.GetSessionId(),
-                                       specifics.tab_node_id());
-    SetSessionTabFromDelegate(tab_delegate, base::Time::Now(), session_tab);
-    sync_pb::SessionTab tab_s = session_tab->ToSyncData();
-
-    if (new_url == old_tab_url) {
-      // Load the old specifics and copy over the favicon data if needed.
-      // TODO(zea): remove this once favicon sync is enabled as a separate type.
-      tab_s.set_favicon(specifics.tab().favicon());
-      tab_s.set_favicon_source(specifics.tab().favicon_source());
-      tab_s.set_favicon_type(specifics.tab().favicon_type());
-    }
-    // Retain the base SessionSpecifics data (tag, tab_node_id, etc.), and just
-    // write the new SessionTabSpecifics.
-    specifics.mutable_tab()->CopyFrom(tab_s);
-
-    // Write into the actual sync model.
-    tab_node.SetSessionSpecifics(specifics);
-  }
-
-  // Trigger the favicon load if needed. We do this outside the write
-  // transaction to avoid jank.
-  tab_link->set_url(new_url);
-  if (new_url != old_tab_url) {
-    favicon_cache_.OnFaviconVisited(new_url,
-                                    GetCurrentFaviconURL(tab_delegate));
-  }
-
-  // Update our last modified time.
-  synced_session_tracker_.GetSession(GetCurrentMachineTag())->modified_time =
-      base::Time::Now();
-
-  return true;
-}
-
-// static
-void SessionModelAssociator::SetSessionTabFromDelegate(
-    const SyncedTabDelegate& tab_delegate,
-    base::Time mtime,
-    SessionTab* session_tab) {
-  DCHECK(session_tab);
-  session_tab->window_id.set_id(tab_delegate.GetWindowId());
-  session_tab->tab_id.set_id(tab_delegate.GetSessionId());
-  session_tab->tab_visual_index = 0;
-  session_tab->current_navigation_index = tab_delegate.GetCurrentEntryIndex();
-  session_tab->pinned = tab_delegate.IsPinned();
-  session_tab->extension_app_id = tab_delegate.GetExtensionAppId();
-  session_tab->user_agent_override.clear();
-  session_tab->timestamp = mtime;
-  const int current_index = tab_delegate.GetCurrentEntryIndex();
-  const int pending_index = tab_delegate.GetPendingEntryIndex();
-  const int min_index = std::max(0, current_index - kMaxSyncNavigationCount);
-  const int max_index = std::min(current_index + kMaxSyncNavigationCount,
-                                 tab_delegate.GetEntryCount());
-  bool is_managed = tab_delegate.ProfileIsManaged();
-  session_tab->navigations.clear();
-
-#if !defined(OS_ANDROID)
-  // For getting navigation time in network time.
-  NavigationTimeHelper* nav_time_helper =
-      tab_delegate.HasWebContents() ?
-          NavigationTimeHelper::FromWebContents(tab_delegate.GetWebContents()) :
-          NULL;
-#endif
-
-  for (int i = min_index; i < max_index; ++i) {
-    const NavigationEntry* entry = (i == pending_index) ?
-        tab_delegate.GetPendingEntry() : tab_delegate.GetEntryAtIndex(i);
-    DCHECK(entry);
-    if (!entry->GetVirtualURL().is_valid())
-      continue;
-
-    scoped_ptr<content::NavigationEntry> network_time_entry(
-        content::NavigationEntry::Create(*entry));
-#if !defined(OS_ANDROID)
-    if (nav_time_helper) {
-      network_time_entry->SetTimestamp(
-          nav_time_helper->GetNavigationTime(entry));
-    }
-#endif
-
-    session_tab->navigations.push_back(
-        SerializedNavigationEntry::FromNavigationEntry(i, *network_time_entry));
-    if (is_managed) {
-      session_tab->navigations.back().set_blocked_state(
-          SerializedNavigationEntry::STATE_ALLOWED);
-    }
-  }
-
-  if (is_managed) {
-    const std::vector<const NavigationEntry*>& blocked_navigations =
-        *tab_delegate.GetBlockedNavigations();
-    int offset = session_tab->navigations.size();
-    for (size_t i = 0; i < blocked_navigations.size(); ++i) {
-      session_tab->navigations.push_back(
-          SerializedNavigationEntry::FromNavigationEntry(
-              i + offset, *blocked_navigations[i]));
-      // Blocked navigations already use network navigation time.
-      session_tab->navigations.back().set_blocked_state(
-          SerializedNavigationEntry::STATE_BLOCKED);
-      // TODO(bauerb): Add categories
-    }
-  }
-  session_tab->session_storage_persistent_id.clear();
-}
-
-void SessionModelAssociator::FaviconsUpdated(
-    const std::set<GURL>& urls) {
-  // TODO(zea): consider a separate container for tabs with outstanding favicon
-  // loads so we don't have to iterate through all tabs comparing urls.
-  for (std::set<GURL>::const_iterator i = urls.begin(); i != urls.end(); ++i) {
-    for (TabLinksMap::iterator tab_iter = local_tab_map_.begin();
-         tab_iter != local_tab_map_.end();
-         ++tab_iter) {
-      if (tab_iter->second->url() == *i)
-        favicon_cache_.OnPageFaviconUpdated(*i);
-    }
-  }
-}
-
-syncer::SyncError SessionModelAssociator::AssociateModels(
-    syncer::SyncMergeResult* local_merge_result,
-    syncer::SyncMergeResult* syncer_merge_result) {
-  DCHECK(CalledOnValidThread());
-  syncer::SyncError error;
-
-  // Ensure that we disassociated properly, otherwise memory might leak.
-  DCHECK(synced_session_tracker_.Empty());
-  DCHECK_EQ(0U, local_tab_pool_.Capacity());
-
-  local_session_syncid_ = syncer::kInvalidId;
-
-  scoped_ptr<DeviceInfo> local_device_info(sync_service_->GetLocalDeviceInfo());
-
-#if defined(OS_ANDROID)
-  std::string transaction_tag;
-#endif
-  // Read any available foreign sessions and load any session data we may have.
-  // If we don't have any local session data in the db, create a header node.
-  {
-    syncer::WriteTransaction trans(FROM_HERE, sync_service_->GetUserShare());
-
-    syncer::ReadNode root(&trans);
-    if (root.InitByTagLookup(syncer::ModelTypeToRootTag(model_type())) !=
-            syncer::BaseNode::INIT_OK) {
-      return error_handler_->CreateAndUploadError(
-          FROM_HERE,
-          kNoSessionsFolderError,
-          model_type());
-    }
-
-    // Make sure we have a machine tag.
-    if (current_machine_tag_.empty())
-      InitializeCurrentMachineTag(&trans);
-    if (local_device_info) {
-      current_session_name_ = local_device_info->client_name();
-    } else {
-      return error_handler_->CreateAndUploadError(
-          FROM_HERE,
-          "Failed to get device info.",
-          model_type());
-    }
-    synced_session_tracker_.SetLocalSessionTag(current_machine_tag_);
-    if (!UpdateAssociationsFromSyncModel(root, &trans, &error)) {
-      DCHECK(error.IsSet());
-      return error;
-    }
-
-    if (local_session_syncid_ == syncer::kInvalidId) {
-      // The sync db didn't have a header node for us, we need to create one.
-      syncer::WriteNode write_node(&trans);
-      syncer::WriteNode::InitUniqueByCreationResult result =
-          write_node.InitUniqueByCreation(SESSIONS, root, current_machine_tag_);
-      if (result != syncer::WriteNode::INIT_SUCCESS) {
-        // If we can't look it up, and we can't create it, chances are there's
-        // a pre-existing node that has encryption issues. But, since we can't
-        // load the item, we can't remove it, and error out at this point.
-        return error_handler_->CreateAndUploadError(
-            FROM_HERE,
-            "Failed to create sessions header sync node.",
-            model_type());
-      }
-
-      // Write the initial values to the specifics so that in case of a crash or
-      // error we don't persist a half-written node.
-      write_node.SetTitle(base::UTF8ToWide(current_machine_tag_));
-      sync_pb::SessionSpecifics base_specifics;
-      base_specifics.set_session_tag(current_machine_tag_);
-      sync_pb::SessionHeader* header_s = base_specifics.mutable_header();
-      header_s->set_client_name(current_session_name_);
-      header_s->set_device_type(DeviceInfo::GetLocalDeviceType());
-      write_node.SetSessionSpecifics(base_specifics);
-
-      local_session_syncid_ = write_node.GetId();
-    }
-#if defined(OS_ANDROID)
-    transaction_tag = GetMachineTagFromTransaction(&trans);
-#endif
-  }
-#if defined(OS_ANDROID)
-  // We need to delete foreign sessions after giving up our
-  // syncer::WriteTransaction, since DeleteForeignSession(std::string&) uses
-  // its own syncer::WriteTransaction.
-  if (current_machine_tag_.compare(transaction_tag) != 0)
-    DeleteForeignSession(transaction_tag);
-#endif
-
-  // Check if anything has changed on the client side.
-  if (!UpdateSyncModelDataFromClient(&error)) {
-    DCHECK(error.IsSet());
-    return error;
-  }
-
-  DVLOG(1) << "Session models associated.";
-  DCHECK(!error.IsSet());
-  return error;
-}
-
-syncer::SyncError SessionModelAssociator::DisassociateModels() {
-  DCHECK(CalledOnValidThread());
-  DVLOG(1) << "Disassociating local session " << GetCurrentMachineTag();
-  synced_session_tracker_.Clear();
-  local_tab_map_.clear();
-  local_tab_pool_.Clear();
-  local_session_syncid_ = syncer::kInvalidId;
-  current_machine_tag_ = "";
-  current_session_name_ = "";
-
-  // There is no local model stored with which to disassociate, just notify
-  // foreign session handlers.
-  content::NotificationService::current()->Notify(
-      chrome::NOTIFICATION_FOREIGN_SESSION_DISABLED,
-      content::Source<Profile>(sync_service_->profile()),
-      content::NotificationService::NoDetails());
-  return syncer::SyncError();
-}
-
-void SessionModelAssociator::InitializeCurrentMachineTag(
-    syncer::WriteTransaction* trans) {
-  DCHECK(CalledOnValidThread());
-  DCHECK(current_machine_tag_.empty());
-  std::string persisted_guid;
-  sync_driver::SyncPrefs prefs(profile_->GetPrefs());
-  persisted_guid = prefs.GetSyncSessionsGUID();
-  if (!persisted_guid.empty()) {
-    current_machine_tag_ = persisted_guid;
-    DVLOG(1) << "Restoring persisted session sync guid: "
-             << persisted_guid;
-  } else {
-    current_machine_tag_ = GetMachineTagFromTransaction(trans);
-    DVLOG(1) << "Creating session sync guid: " << current_machine_tag_;
-    prefs.SetSyncSessionsGUID(current_machine_tag_);
-  }
-
-  local_tab_pool_.SetMachineTag(current_machine_tag_);
-}
-
-bool SessionModelAssociator::GetSyncedFaviconForPageURL(
-    const std::string& page_url,
-    scoped_refptr<base::RefCountedMemory>* favicon_png) const {
-  return favicon_cache_.GetSyncedFaviconForPageURL(GURL(page_url), favicon_png);
-}
-
-scoped_ptr<browser_sync::DeviceInfo>
-    SessionModelAssociator::GetDeviceInfoForSessionTag(
-        const std::string& session_tag) {
-  std::string client_id = GetClientIdFromSessionTag(session_tag);
-  return sync_service_->GetDeviceInfo(client_id);
-}
-
-bool SessionModelAssociator::UpdateAssociationsFromSyncModel(
-    const syncer::ReadNode& root,
-    syncer::WriteTransaction* trans,
-    syncer::SyncError* error) {
-  DCHECK(CalledOnValidThread());
-  DCHECK(local_tab_pool_.Empty());
-  DCHECK_EQ(local_session_syncid_, syncer::kInvalidId);
-
-  // Iterate through the nodes and associate any foreign sessions.
-  int64 id = root.GetFirstChildId();
-  while (id != syncer::kInvalidId) {
-    syncer::WriteNode sync_node(trans);
-    if (sync_node.InitByIdLookup(id) != syncer::BaseNode::INIT_OK) {
-      if (error) {
-        *error = error_handler_->CreateAndUploadError(
-            FROM_HERE,
-            "Failed to load sync node",
-            model_type());
-      }
-      return false;
-    }
-    int64 next_id = sync_node.GetSuccessorId();
-
-    const sync_pb::SessionSpecifics& specifics =
-        sync_node.GetSessionSpecifics();
-    const base::Time& modification_time = sync_node.GetModificationTime();
-    if (specifics.session_tag().empty() ||
-           (specifics.has_tab() && (!specifics.has_tab_node_id() ||
-            !specifics.tab().has_tab_id()))) {
-      // This is a corrupted node. Just delete it.
-      LOG(WARNING) << "Found invalid session node, deleting.";
-      sync_node.Tombstone();
-    } else if (specifics.session_tag() != GetCurrentMachineTag()) {
-      AssociateForeignSpecifics(specifics, modification_time);
-    } else {
-      // This is previously stored local session information.
-      if (specifics.has_header() &&
-          local_session_syncid_ == syncer::kInvalidId) {
-        // This is our previous header node, reuse it.
-        local_session_syncid_ = id;
-        if (specifics.header().has_client_name()) {
-          current_session_name_ = specifics.header().client_name();
-        }
-      } else {
-        if (specifics.has_header() || !specifics.has_tab()) {
-          LOG(WARNING) << "Found invalid session node, deleting.";
-          sync_node.Tombstone();
-        } else {
-          // This is a valid old tab node, add it to the pool so it can be
-          // reused for reassociation.
-          local_tab_pool_.AddTabNode(specifics.tab_node_id());
-        }
-      }
-    }
-    id = next_id;
-  }
-
-  return true;
-}
-
-void SessionModelAssociator::AssociateForeignSpecifics(
-    const sync_pb::SessionSpecifics& specifics,
-    const base::Time& modification_time) {
-  DCHECK(CalledOnValidThread());
-  std::string foreign_session_tag = specifics.session_tag();
-  if (foreign_session_tag == GetCurrentMachineTag() && !setup_for_test_)
-    return;
-
-  SyncedSession* foreign_session =
-      synced_session_tracker_.GetSession(foreign_session_tag);
-  if (specifics.has_header()) {
-    // Read in the header data for this foreign session.
-    // Header data contains window information and ordered tab id's for each
-    // window.
-
-    // Load (or create) the SyncedSession object for this client.
-    const sync_pb::SessionHeader& header = specifics.header();
-    PopulateSessionHeaderFromSpecifics(header,
-                                       modification_time,
-                                       foreign_session);
-
-    // Reset the tab/window tracking for this session (must do this before
-    // we start calling PutWindowInSession and PutTabInWindow so that all
-    // unused tabs/windows get cleared by the CleanupSession(...) call).
-    synced_session_tracker_.ResetSessionTracking(foreign_session_tag);
-
-    // Process all the windows and their tab information.
-    int num_windows = header.window_size();
-    DVLOG(1) << "Associating " << foreign_session_tag << " with "
-             << num_windows << " windows.";
-    for (int i = 0; i < num_windows; ++i) {
-      const sync_pb::SessionWindow& window_s = header.window(i);
-      SessionID::id_type window_id = window_s.window_id();
-      synced_session_tracker_.PutWindowInSession(foreign_session_tag,
-                                                 window_id);
-      PopulateSessionWindowFromSpecifics(foreign_session_tag,
-                                         window_s,
-                                         modification_time,
-                                         foreign_session->windows[window_id],
-                                         &synced_session_tracker_);
-    }
-
-    // Delete any closed windows and unused tabs as necessary.
-    synced_session_tracker_.CleanupSession(foreign_session_tag);
-  } else if (specifics.has_tab()) {
-    const sync_pb::SessionTab& tab_s = specifics.tab();
-    SessionID::id_type tab_id = tab_s.tab_id();
-    SessionTab* tab =
-        synced_session_tracker_.GetTab(foreign_session_tag,
-                                       tab_id,
-                                       specifics.tab_node_id());
-
-    // Update SessionTab based on protobuf.
-    tab->SetFromSyncData(tab_s, modification_time);
-
-    // If a favicon or favicon urls are present, load them into the in-memory
-    // favicon cache.
-    LoadForeignTabFavicon(tab_s);
-
-    // Update the last modified time.
-    if (foreign_session->modified_time < modification_time)
-      foreign_session->modified_time = modification_time;
-  } else {
-    LOG(WARNING) << "Ignoring foreign session node with missing header/tab "
-                 << "fields and tag " << foreign_session_tag << ".";
-  }
-}
-
-bool SessionModelAssociator::DisassociateForeignSession(
-    const std::string& foreign_session_tag) {
-  DCHECK(CalledOnValidThread());
-  if (foreign_session_tag == GetCurrentMachineTag()) {
-    DVLOG(1) << "Local session deleted! Doing nothing until a navigation is "
-             << "triggered.";
-    return false;
-  }
-  DVLOG(1) << "Disassociating session " << foreign_session_tag;
-  return synced_session_tracker_.DeleteSession(foreign_session_tag);
-}
-
-// Static
-void SessionModelAssociator::PopulateSessionHeaderFromSpecifics(
-    const sync_pb::SessionHeader& header_specifics,
-    base::Time mtime,
-    SyncedSession* session_header) {
-  if (header_specifics.has_client_name()) {
-    session_header->session_name = header_specifics.client_name();
-  }
-  if (header_specifics.has_device_type()) {
-    switch (header_specifics.device_type()) {
-      case sync_pb::SyncEnums_DeviceType_TYPE_WIN:
-        session_header->device_type = SyncedSession::TYPE_WIN;
-        break;
-      case sync_pb::SyncEnums_DeviceType_TYPE_MAC:
-        session_header->device_type = SyncedSession::TYPE_MACOSX;
-        break;
-      case sync_pb::SyncEnums_DeviceType_TYPE_LINUX:
-        session_header->device_type = SyncedSession::TYPE_LINUX;
-        break;
-      case sync_pb::SyncEnums_DeviceType_TYPE_CROS:
-        session_header->device_type = SyncedSession::TYPE_CHROMEOS;
-        break;
-      case sync_pb::SyncEnums_DeviceType_TYPE_PHONE:
-        session_header->device_type = SyncedSession::TYPE_PHONE;
-        break;
-      case sync_pb::SyncEnums_DeviceType_TYPE_TABLET:
-        session_header->device_type = SyncedSession::TYPE_TABLET;
-        break;
-      case sync_pb::SyncEnums_DeviceType_TYPE_OTHER:
-        // Intentionally fall-through
-      default:
-        session_header->device_type = SyncedSession::TYPE_OTHER;
-        break;
-    }
-  }
-  session_header->modified_time = mtime;
-}
-
-// Static
-void SessionModelAssociator::PopulateSessionWindowFromSpecifics(
-    const std::string& session_tag,
-    const sync_pb::SessionWindow& specifics,
-    base::Time mtime,
-    SessionWindow* session_window,
-    SyncedSessionTracker* tracker) {
-  if (specifics.has_window_id())
-    session_window->window_id.set_id(specifics.window_id());
-  if (specifics.has_selected_tab_index())
-    session_window->selected_tab_index = specifics.selected_tab_index();
-  if (specifics.has_browser_type()) {
-    if (specifics.browser_type() ==
-        sync_pb::SessionWindow_BrowserType_TYPE_TABBED) {
-      session_window->type = 1;
-    } else {
-      session_window->type = 2;
-    }
-  }
-  session_window->timestamp = mtime;
-  session_window->tabs.resize(specifics.tab_size(), NULL);
-  for (int i = 0; i < specifics.tab_size(); i++) {
-    SessionID::id_type tab_id = specifics.tab(i);
-    tracker->PutTabInWindow(session_tag,
-                            session_window->window_id.id(),
-                            tab_id,
-                            i);
-  }
-}
-
-void SessionModelAssociator::LoadForeignTabFavicon(
-    const sync_pb::SessionTab& tab) {
-  // First go through and iterate over all the navigations, checking if any
-  // have valid favicon urls.
-  for (int i = 0; i < tab.navigation_size(); ++i) {
-    if (!tab.navigation(i).favicon_url().empty()) {
-      const std::string& page_url = tab.navigation(i).virtual_url();
-      const std::string& favicon_url = tab.navigation(i).favicon_url();
-      favicon_cache_.OnReceivedSyncFavicon(GURL(page_url),
-                                           GURL(favicon_url),
-                                           std::string(),
-                                           syncer::TimeToProtoTime(
-                                               base::Time::Now()));
-    }
-  }
-
-  // Then go through and check for any legacy favicon data.
-  if (!tab.has_favicon() || tab.favicon().empty())
-    return;
-  if (!tab.has_favicon_type() ||
-      tab.favicon_type() != sync_pb::SessionTab::TYPE_WEB_FAVICON) {
-    DVLOG(1) << "Ignoring non-web favicon.";
-    return;
-  }
-  if (tab.navigation_size() == 0)
-    return;
-  int selected_index = tab.current_navigation_index();
-  selected_index = std::max(
-      0,
-      std::min(selected_index,
-               static_cast<int>(tab.navigation_size() - 1)));
-  GURL navigation_url(tab.navigation(selected_index).virtual_url());
-  if (!navigation_url.is_valid())
-    return;
-  GURL favicon_source(tab.favicon_source());
-  if (!favicon_source.is_valid())
-    return;
-
-  const std::string& favicon = tab.favicon();
-  DVLOG(1) << "Storing synced favicon for url " << navigation_url.spec()
-           << " with size " << favicon.size() << " bytes.";
-  favicon_cache_.OnReceivedSyncFavicon(navigation_url,
-                                       favicon_source,
-                                       favicon,
-                                       syncer::TimeToProtoTime(
-                                           base::Time::Now()));
-}
-
-bool SessionModelAssociator::UpdateSyncModelDataFromClient(
-    syncer::SyncError* error) {
-  DCHECK(CalledOnValidThread());
-
-  // Associate all open windows and their tabs.
-  return AssociateWindows(true, error);
-}
-
-void SessionModelAssociator::AttemptSessionsDataRefresh() const {
-  DVLOG(1) << "Triggering sync refresh for sessions datatype.";
-  const syncer::ModelTypeSet types(syncer::SESSIONS);
-  content::NotificationService::current()->Notify(
-      chrome::NOTIFICATION_SYNC_REFRESH_LOCAL,
-      content::Source<Profile>(profile_),
-      content::Details<const syncer::ModelTypeSet>(&types));
-}
-
-bool SessionModelAssociator::GetLocalSession(
-    const SyncedSession* * local_session) {
-  DCHECK(CalledOnValidThread());
-  if (current_machine_tag_.empty())
-    return false;
-  *local_session = synced_session_tracker_.GetSession(GetCurrentMachineTag());
-  return true;
-}
-
-bool SessionModelAssociator::GetAllForeignSessions(
-    std::vector<const SyncedSession*>* sessions) {
-  DCHECK(CalledOnValidThread());
-  return synced_session_tracker_.LookupAllForeignSessions(sessions);
-}
-
-bool SessionModelAssociator::GetForeignSession(
-    const std::string& tag,
-    std::vector<const SessionWindow*>* windows) {
-  DCHECK(CalledOnValidThread());
-  return synced_session_tracker_.LookupSessionWindows(tag, windows);
-}
-
-bool SessionModelAssociator::GetForeignTab(
-    const std::string& tag,
-    const SessionID::id_type tab_id,
-    const SessionTab** tab) {
-  DCHECK(CalledOnValidThread());
-  const SessionTab* synced_tab = NULL;
-  bool success = synced_session_tracker_.LookupSessionTab(tag,
-                                                          tab_id,
-                                                          &synced_tab);
-  if (success)
-    *tab = synced_tab;
-  return success;
-}
-
-void SessionModelAssociator::DeleteStaleSessions() {
-  DCHECK(CalledOnValidThread());
-  std::vector<const SyncedSession*> sessions;
-  if (!GetAllForeignSessions(&sessions))
-    return;  // No foreign sessions.
-
-  // Iterate through all the sessions and delete any with age older than
-  // |stale_session_threshold_days_|.
-  for (std::vector<const SyncedSession*>::const_iterator iter =
-           sessions.begin(); iter != sessions.end(); ++iter) {
-    const SyncedSession* session = *iter;
-    int session_age_in_days =
-        (base::Time::Now() - session->modified_time).InDays();
-    std::string session_tag = session->session_tag;
-    if (session_age_in_days > 0 &&  // If false, local clock is not trustworty.
-        static_cast<size_t>(session_age_in_days) >
-            stale_session_threshold_days_) {
-      DVLOG(1) << "Found stale session " << session_tag
-               << " with age " << session_age_in_days << ", deleting.";
-      DeleteForeignSession(session_tag);
-    }
-  }
-}
-
-void SessionModelAssociator::SetStaleSessionThreshold(
-    size_t stale_session_threshold_days) {
-  DCHECK(CalledOnValidThread());
-  if (stale_session_threshold_days_ == 0) {
-    NOTREACHED() << "Attempted to set invalid stale session threshold.";
-    return;
-  }
-  stale_session_threshold_days_ = stale_session_threshold_days;
-  // TODO(zea): maybe make this preference-based? Might be nice to let users be
-  // able to modify this once and forget about it. At the moment, if we want a
-  // different threshold we will need to call this everytime we create a new
-  // model associator and before we AssociateModels (probably from DTC).
-}
-
-void SessionModelAssociator::DeleteForeignSession(const std::string& tag) {
-  DCHECK(CalledOnValidThread());
-  if (tag == GetCurrentMachineTag()) {
-    LOG(ERROR) << "Attempting to delete local session. This is not currently "
-               << "supported.";
-    return;
-  }
-
-  if (!DisassociateForeignSession(tag)) {
-    // We don't have any data for this session, our work here is done!
-    return;
-  }
-
-  syncer::WriteTransaction trans(FROM_HERE, sync_service_->GetUserShare());
-  syncer::ReadNode root(&trans);
-  if (root.InitByTagLookup(syncer::ModelTypeToRootTag(syncer::SESSIONS)) !=
-                           syncer::BaseNode::INIT_OK) {
-    LOG(ERROR) << kNoSessionsFolderError;
-    return;
-  }
-  int64 id = root.GetFirstChildId();
-  while (id != syncer::kInvalidId) {
-    syncer::WriteNode sync_node(&trans);
-    if (sync_node.InitByIdLookup(id) != syncer::BaseNode::INIT_OK) {
-      LOG(ERROR) << "Failed to fetch sync node for id " << id;
-      continue;
-    }
-    id = sync_node.GetSuccessorId();
-    const sync_pb::SessionSpecifics& specifics =
-        sync_node.GetSessionSpecifics();
-    if (specifics.session_tag() == tag)
-      sync_node.Tombstone();
-  }
-
-  content::NotificationService::current()->Notify(
-      chrome::NOTIFICATION_FOREIGN_SESSION_UPDATED,
-      content::Source<Profile>(sync_service_->profile()),
-      content::NotificationService::NoDetails());
-}
-
-bool SessionModelAssociator::IsValidTab(const SyncedTabDelegate& tab) const {
-  if ((!sync_service_ || tab.profile() != sync_service_->profile()) &&
-      !setup_for_test_) {
-    return false;
-  }
-  const SyncedWindowDelegate* window =
-      SyncedWindowDelegate::FindSyncedWindowDelegateWithId(
-          tab.GetWindowId());
-  if (!window && !setup_for_test_)
-    return false;
-  return true;
-}
-
-bool SessionModelAssociator::TabHasValidEntry(
-    const SyncedTabDelegate& tab) const {
-  if (tab.ProfileIsManaged() && tab.GetBlockedNavigations()->size() > 0)
-    return true;
-
-  int entry_count = tab.GetEntryCount();
-  if (entry_count == 0)
-    return false;  // This deliberately ignores a new pending entry.
-
-  int pending_index = tab.GetPendingEntryIndex();
-  bool found_valid_url = false;
-  for (int i = 0; i < entry_count; ++i) {
-    const content::NavigationEntry* entry = (i == pending_index) ?
-       tab.GetPendingEntry() : tab.GetEntryAtIndex(i);
-    if (!entry)
-      return false;
-    const GURL& virtual_url = entry->GetVirtualURL();
-    if (virtual_url.is_valid() &&
-        !virtual_url.SchemeIs(content::kChromeUIScheme) &&
-        !virtual_url.SchemeIs(chrome::kChromeNativeScheme) &&
-        !virtual_url.SchemeIsFile()) {
-      found_valid_url = true;
-    }
-  }
-  return found_valid_url;
-}
-
-// If this functionality changes, browser_sync::ShouldSyncSessionTab should be
-// modified to match.
-bool SessionModelAssociator::ShouldSyncTab(const SyncedTabDelegate& tab) const {
-  DCHECK(CalledOnValidThread());
-  if (!IsValidTab(tab))
-    return false;
-  return TabHasValidEntry(tab);
-}
-
-void SessionModelAssociator::QuitLoopForSubtleTesting() {
-  if (waiting_for_change_) {
-    DVLOG(1) << "Quitting base::MessageLoop for test.";
-    waiting_for_change_ = false;
-    test_weak_factory_.InvalidateWeakPtrs();
-    base::MessageLoop::current()->Quit();
-  }
-}
-
-FaviconCache* SessionModelAssociator::GetFaviconCache() {
-  return &favicon_cache_;
-}
-
-void SessionModelAssociator::BlockUntilLocalChangeForTest(
-    base::TimeDelta timeout) {
-  if (test_weak_factory_.HasWeakPtrs())
-    return;
-  waiting_for_change_ = true;
-  base::MessageLoop::current()->PostDelayedTask(
-      FROM_HERE,
-      base::Bind(&SessionModelAssociator::QuitLoopForSubtleTesting,
-                 test_weak_factory_.GetWeakPtr()),
-      timeout);
-}
-
-bool SessionModelAssociator::CryptoReadyIfNecessary() {
-  // We only access the cryptographer while holding a transaction.
-  syncer::ReadTransaction trans(FROM_HERE, sync_service_->GetUserShare());
-  const syncer::ModelTypeSet encrypted_types = trans.GetEncryptedTypes();
-  return !encrypted_types.Has(SESSIONS) ||
-         sync_service_->IsCryptographerReady(&trans);
-}
-
-void SessionModelAssociator::UpdateTabIdIfNecessary(
-    int tab_node_id,
-    SessionID::id_type new_tab_id) {
-  DCHECK_NE(tab_node_id, TabNodePool::kInvalidTabNodeID);
-  SessionID::id_type old_tab_id =
-      local_tab_pool_.GetTabIdFromTabNodeId(tab_node_id);
-  if (old_tab_id != new_tab_id) {
-    // Rewrite tab id if required.
-    syncer::WriteTransaction trans(FROM_HERE, sync_service_->GetUserShare());
-    syncer::WriteNode tab_node(&trans);
-    if (tab_node.InitByClientTagLookup(syncer::SESSIONS,
-            TabNodePool::TabIdToTag(current_machine_tag_, tab_node_id)) ==
-                syncer::BaseNode::INIT_OK) {
-      sync_pb::SessionSpecifics session_specifics =
-          tab_node.GetSessionSpecifics();
-      DCHECK(session_specifics.has_tab());
-      if (session_specifics.has_tab()) {
-        sync_pb::SessionTab* tab_s = session_specifics.mutable_tab();
-        tab_s->set_tab_id(new_tab_id);
-        tab_node.SetSessionSpecifics(session_specifics);
-        // Update tab node pool with the new association.
-        local_tab_pool_.ReassociateTabNode(tab_node_id, new_tab_id);
-      }
-    }
-  }
-}
-
-}  // namespace browser_sync
diff --git a/chrome/browser/sync/glue/session_model_associator.h b/chrome/browser/sync/glue/session_model_associator.h
deleted file mode 100644
index b54a926..0000000
--- a/chrome/browser/sync/glue/session_model_associator.h
+++ /dev/null
@@ -1,377 +0,0 @@
-// Copyright (c) 2012 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 CHROME_BROWSER_SYNC_GLUE_SESSION_MODEL_ASSOCIATOR_H_
-#define CHROME_BROWSER_SYNC_GLUE_SESSION_MODEL_ASSOCIATOR_H_
-
-#include <map>
-#include <set>
-#include <string>
-#include <vector>
-
-#include "base/basictypes.h"
-#include "base/compiler_specific.h"
-#include "base/gtest_prod_util.h"
-#include "base/memory/linked_ptr.h"
-#include "base/memory/weak_ptr.h"
-#include "base/threading/non_thread_safe.h"
-#include "base/time/time.h"
-#include "chrome/browser/sessions/session_id.h"
-#include "chrome/browser/sessions/session_service.h"
-#include "chrome/browser/sessions/session_types.h"
-#include "chrome/browser/sync/glue/favicon_cache.h"
-#include "chrome/browser/sync/glue/synced_session_tracker.h"
-#include "chrome/browser/sync/glue/tab_node_pool.h"
-#include "chrome/browser/sync/open_tabs_ui_delegate.h"
-#include "components/sync_driver/model_associator.h"
-#include "sync/internal_api/public/base/model_type.h"
-
-class PrefServiceSyncable;
-class Profile;
-class ProfileSyncService;
-
-namespace syncer {
-class ReadNode;
-class WriteTransaction;
-}  // namespace syncer
-
-namespace sync_pb {
-class SessionHeader;
-class SessionSpecifics;
-class SessionTab;
-class SessionWindow;
-class TabNavigation;
-}  // namespace sync_pb
-
-namespace browser_sync {
-
-class DataTypeErrorHandler;
-class DeviceInfo;
-class SyncedTabDelegate;
-class SyncedWindowDelegate;
-
-// Contains all logic for associating the Chrome sessions model and
-// the sync sessions model.
-class SessionModelAssociator
-    : public AssociatorInterface,
-      public OpenTabsUIDelegate,
-      public base::SupportsWeakPtr<SessionModelAssociator>,
-      public base::NonThreadSafe {
- public:
-  // Does not take ownership of sync_service.
-  SessionModelAssociator(ProfileSyncService* sync_service,
-                         DataTypeErrorHandler* error_handler);
-  SessionModelAssociator(ProfileSyncService* sync_service,
-                         bool setup_for_test);
-  virtual ~SessionModelAssociator();
-
-  // The has_nodes out parameter is set to true if the sync model has
-  // nodes other than the permanent tagged nodes.  The method may
-  // return false if an error occurred.
-  virtual bool SyncModelHasUserCreatedNodes(bool* has_nodes) OVERRIDE;
-
-  // AssociatorInterface implementation.
-  virtual void AbortAssociation() OVERRIDE {
-    // No implementation needed, this associator runs on the main thread.
-  }
-
-  // See ModelAssociator interface.
-  virtual bool CryptoReadyIfNecessary() OVERRIDE;
-
-  // Returns sync id for the given session tag.
-  // Returns syncer::kInvalidId if the sync node is not found for the given
-  // tag
-  virtual int64 GetSyncIdFromSessionTag(const std::string& tag);
-
-  // Resync local window information. Updates the local sessions header node
-  // with the status of open windows and the order of tabs they contain. Should
-  // only be called for changes that affect a window, not a change within a
-  // single tab.
-  //
-  // If |reload_tabs| is true, will also resync all tabs (same as calling
-  // AssociateTabs with a vector of all tabs).
-  // |error| gets set if any association error occurred.
-  // Returns: false if the local session's sync nodes were deleted and
-  // reassociation is necessary, true otherwise.
-  bool AssociateWindows(bool reload_tabs, syncer::SyncError* error);
-
-  // Loads and reassociates the local tabs referenced in |tabs|.
-  // |error| gets set if any association error occurred.
-  // Returns: false if the local session's sync nodes were deleted and
-  // reassociation is necessary, true otherwise.
-  bool AssociateTabs(const std::vector<SyncedTabDelegate*>& tabs,
-                     syncer::SyncError* error);
-
-  // Reassociates a single tab with the sync model. Will check if the tab
-  // already is associated with a sync node and allocate one if necessary.
-  // |error| gets set if any association error occurred.
-  // |tab| will be updated with sync id if necessary.
-  // Returns: false if the local session's sync nodes were deleted and
-  // reassociation is necessary, true otherwise.
-  bool AssociateTab(SyncedTabDelegate* const tab, syncer::SyncError* error);
-
-  // Load any foreign session info stored in sync db and update the sync db
-  // with local client data. Processes/reuses any sync nodes owned by this
-  // client and creates any further sync nodes needed to store local header and
-  // tab info.
-  virtual syncer::SyncError AssociateModels(
-      syncer::SyncMergeResult* local_merge_result,
-      syncer::SyncMergeResult* syncer_merge_result) OVERRIDE;
-
-  // Clear local sync data buffers. Does not delete sync nodes to avoid
-  // tombstones. TODO(zea): way to eventually delete orphaned nodes.
-  virtual syncer::SyncError DisassociateModels() OVERRIDE;
-
-  // Returns the tag used to uniquely identify this machine's session in the
-  // sync model.
-  const std::string& GetCurrentMachineTag() const {
-    DCHECK(!current_machine_tag_.empty());
-    return current_machine_tag_;
-  }
-
-  // Load and associate window and tab data for a foreign session.
-  void AssociateForeignSpecifics(const sync_pb::SessionSpecifics& specifics,
-                                 const base::Time& modification_time);
-
-  // Removes a foreign session from our internal bookkeeping.
-  // Returns true if the session was found and deleted, false if no data was
-  // found for that session.
-  bool DisassociateForeignSession(const std::string& foreign_session_tag);
-
-  // Attempts to asynchronously refresh the sessions sync data. If new data is
-  // received, the FOREIGN_SESSIONS_UPDATED notification is sent. No
-  // notification will be sent otherwise. This method is not guaranteed to
-  // trigger a sync cycle.
-  void AttemptSessionsDataRefresh() const;
-
-  // Triggers garbage collection of stale sessions (as defined by
-  // |stale_session_threshold_days_|). This is called automatically every
-  // time we start up (via AssociateModels).
-  void DeleteStaleSessions();
-
-  // Set the threshold of inactivity (in days) at which we consider sessions
-  // stale.
-  void SetStaleSessionThreshold(size_t stale_session_threshold_days);
-
-  // Control which local tabs we're interested in syncing.
-  // Ensures the profile matches sync's profile and that the tab has valid
-  // entries.
-  bool ShouldSyncTab(const SyncedTabDelegate& tab) const;
-
-  // Compare |urls| against |local_tab_map_|'s urls to see if any tabs with
-  // outstanding favicon loads can be fulfilled.
-  void FaviconsUpdated(const std::set<GURL>& urls);
-
-  // Returns the syncable model type.
-  static syncer::ModelType model_type() { return syncer::SESSIONS; }
-
-  // Testing only. Will cause the associator to call MessageLoop::Quit()
-  // when a local change is made, or when timeout occurs, whichever is
-  // first.
-  void BlockUntilLocalChangeForTest(base::TimeDelta timeout);
-
-  // OpenTabsUIDelegate implementation.
-  virtual bool GetSyncedFaviconForPageURL(
-      const std::string& pageurl,
-      scoped_refptr<base::RefCountedMemory>* favicon_png) const OVERRIDE;
-  virtual bool GetAllForeignSessions(
-      std::vector<const SyncedSession*>* sessions) OVERRIDE;
-  virtual bool GetForeignSession(
-      const std::string& tag,
-      std::vector<const SessionWindow*>* windows) OVERRIDE;
-  virtual bool GetForeignTab(const std::string& tag,
-                             const SessionID::id_type tab_id,
-                             const SessionTab** tab) OVERRIDE;
-  virtual void DeleteForeignSession(const std::string& tag) OVERRIDE;
-  virtual bool GetLocalSession(const SyncedSession* * local_session) OVERRIDE;
-
-  void SetCurrentMachineTagForTesting(const std::string& machine_tag) {
-    current_machine_tag_ = machine_tag;
-  }
-
-  // Gets the device info for a given session tag.
-  scoped_ptr<browser_sync::DeviceInfo> GetDeviceInfoForSessionTag(
-      const std::string& session_tag);
-
-  FaviconCache* GetFaviconCache();
-
- private:
-  friend class SyncSessionModelAssociatorTest;
-  FRIEND_TEST_ALL_PREFIXES(ProfileSyncServiceSessionTest, WriteSessionToNode);
-  FRIEND_TEST_ALL_PREFIXES(ProfileSyncServiceSessionTest,
-                           WriteFilledSessionToNode);
-  FRIEND_TEST_ALL_PREFIXES(ProfileSyncServiceSessionTest,
-                           WriteForeignSessionToNode);
-  FRIEND_TEST_ALL_PREFIXES(ProfileSyncServiceSessionTest, TabNodePoolEmpty);
-  FRIEND_TEST_ALL_PREFIXES(ProfileSyncServiceSessionTest, TabNodePoolNonEmpty);
-  FRIEND_TEST_ALL_PREFIXES(ProfileSyncServiceSessionTest, ValidTabs);
-  FRIEND_TEST_ALL_PREFIXES(ProfileSyncServiceSessionTest, ExistingTabs);
-  FRIEND_TEST_ALL_PREFIXES(ProfileSyncServiceSessionTest, MissingLocalTabNode);
-  FRIEND_TEST_ALL_PREFIXES(ProfileSyncServiceSessionTest,
-                           TabPoolFreeNodeLimits);
-  FRIEND_TEST_ALL_PREFIXES(ProfileSyncServiceSessionTest,
-                           TabNodePoolDeleteUnassociatedNodes);
-  FRIEND_TEST_ALL_PREFIXES(SyncSessionModelAssociatorTest,
-                           PopulateSessionHeader);
-  FRIEND_TEST_ALL_PREFIXES(SyncSessionModelAssociatorTest,
-                           PopulateSessionWindow);
-  FRIEND_TEST_ALL_PREFIXES(SyncSessionModelAssociatorTest, PopulateSessionTab);
-  FRIEND_TEST_ALL_PREFIXES(SyncSessionModelAssociatorTest,
-                           TabNodePool);
-
-  // Keep all the links to local tab data in one place. A tab_node_id and tab
-  // must be passed at creation. The tab_node_id is not mutable after, although
-  // all other fields are.
-  class TabLink {
-   public:
-    TabLink(int tab_node_id, const SyncedTabDelegate* tab)
-      : tab_node_id_(tab_node_id),
-        tab_(tab) {}
-
-    void set_tab(const SyncedTabDelegate* tab) { tab_ = tab; }
-    void set_url(const GURL& url) { url_ = url; }
-
-    int tab_node_id() const { return tab_node_id_; }
-    const SyncedTabDelegate* tab() const { return tab_; }
-    const GURL& url() const { return url_; }
-
-   private:
-    DISALLOW_COPY_AND_ASSIGN(TabLink);
-
-    // The id for the sync node this tab is stored in.
-    const int tab_node_id_;
-
-    // The tab object itself.
-    const SyncedTabDelegate* tab_;
-
-    // The currently visible url of the tab (used for syncing favicons).
-    GURL url_;
-  };
-
-  // Container for accessing local tab data by tab id.
-  typedef std::map<SessionID::id_type, linked_ptr<TabLink> > TabLinksMap;
-
-  // Determine if a window is of a type we're interested in syncing.
-  static bool ShouldSyncWindow(const SyncedWindowDelegate* window);
-
-  // Initializes the tag corresponding to this machine.
-  void InitializeCurrentMachineTag(syncer::WriteTransaction* trans);
-
-  // Updates the server data based upon the current client session.  If no node
-  // corresponding to this machine exists in the sync model, one is created.
-  // Returns true on success, false if association failed.
-  bool UpdateSyncModelDataFromClient(syncer::SyncError* error);
-
-  // Pulls the current sync model from the sync database and returns true upon
-  // update of the client model. Will associate any foreign sessions as well as
-  // keep track of any local tab nodes, adding them to our free tab node pool.
-  bool UpdateAssociationsFromSyncModel(const syncer::ReadNode& root,
-                                       syncer::WriteTransaction* trans,
-                                       syncer::SyncError* error);
-
-  // Return the virtual URL of the current tab, even if it's pending.
-  static GURL GetCurrentVirtualURL(const SyncedTabDelegate& tab_delegate);
-
-  // Return the favicon url of the current tab, even if it's pending.
-  static GURL GetCurrentFaviconURL(const SyncedTabDelegate& tab_delegate);
-
-  // Fills a tab sync node with data from a WebContents object. Updates
-  // |tab_link| with the current url if it's valid and triggers a favicon
-  // load if the url has changed.
-  // Returns true on success, false if we need to reassociate due to corruption.
-  bool WriteTabContentsToSyncModel(TabLink* tab_link,
-                                   syncer::SyncError* error);
-
-  // Set |session_tab| from |tab_delegate| and |mtime|.
-  static void SetSessionTabFromDelegate(
-      const SyncedTabDelegate& tab_delegate,
-      base::Time mtime,
-      SessionTab* session_tab);
-
-  // Used to populate a session header from the session specifics header
-  // provided.
-  static void PopulateSessionHeaderFromSpecifics(
-    const sync_pb::SessionHeader& header_specifics,
-    base::Time mtime,
-    SyncedSession* session_header);
-
-  // Used to populate a session window from the session specifics window
-  // provided. Tracks any foreign session data created through |tracker|.
-  static void PopulateSessionWindowFromSpecifics(
-      const std::string& foreign_session_tag,
-      const sync_pb::SessionWindow& window,
-      base::Time mtime,
-      SessionWindow* session_window,
-      SyncedSessionTracker* tracker);
-
-  // Helper method to load the favicon data from the tab specifics. If the
-  // favicon is valid, stores the favicon data into the favicon cache.
-  void LoadForeignTabFavicon(const sync_pb::SessionTab& tab);
-
-  // Returns true if this tab belongs to this profile and belongs to a window,
-  // false otherwise.
-  bool IsValidTab(const SyncedTabDelegate& tab) const;
-
-  // Having a valid entry is defined as the url being valid and and having a
-  // syncable scheme (non chrome:// and file:// url's). In other words, we don't
-  // want to sync a tab that is nothing but chrome:// and file:// navigations or
-  // invalid url's.
-  bool TabHasValidEntry(const SyncedTabDelegate& tab) const;
-
-  // Update the tab id of the node associated with |tab_node_id| to
-  // |new_tab_id|.
-  void UpdateTabIdIfNecessary(int tab_node_id,
-                              SessionID::id_type new_tab_id);
-
-  // For testing only.
-  void QuitLoopForSubtleTesting();
-
-  // Unique client tag.
-  std::string current_machine_tag_;
-
-  // User-visible machine name.
-  std::string current_session_name_;
-
-  // Pool of all used/available sync nodes associated with local tabs.
-  TabNodePool local_tab_pool_;
-
-  // SyncID for the sync node containing all the window information for this
-  // client.
-  int64 local_session_syncid_;
-
-  // Mapping of current open (local) tabs to their sync identifiers.
-  TabLinksMap local_tab_map_;
-
-  SyncedSessionTracker synced_session_tracker_;
-
-  // Weak pointer.
-  ProfileSyncService* sync_service_;
-
-  // Number of days without activity after which we consider a session to be
-  // stale and a candidate for garbage collection.
-  size_t stale_session_threshold_days_;
-
-  // To avoid certain checks not applicable to tests.
-  bool setup_for_test_;
-
-  // During integration tests, we sometimes need to block until a local change
-  // is made.
-  bool waiting_for_change_;
-
-  // Profile being synced. Weak pointer.
-  Profile* const profile_;
-
-  DataTypeErrorHandler* error_handler_;
-
-  // Our favicon cache.
-  FaviconCache favicon_cache_;
-
-  base::WeakPtrFactory<SessionModelAssociator> test_weak_factory_;
-
-  DISALLOW_COPY_AND_ASSIGN(SessionModelAssociator);
-};
-
-}  // namespace browser_sync
-
-#endif  // CHROME_BROWSER_SYNC_GLUE_SESSION_MODEL_ASSOCIATOR_H_
diff --git a/chrome/browser/sync/glue/session_model_associator_unittest.cc b/chrome/browser/sync/glue/session_model_associator_unittest.cc
deleted file mode 100644
index a380168..0000000
--- a/chrome/browser/sync/glue/session_model_associator_unittest.cc
+++ /dev/null
@@ -1,565 +0,0 @@
-// Copyright (c) 2012 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 <string>
-#include <vector>
-
-#include "base/memory/scoped_ptr.h"
-#include "base/message_loop/message_loop.h"
-#include "chrome/browser/chrome_notification_types.h"
-#include "chrome/browser/sessions/session_types.h"
-#include "chrome/browser/sync/glue/session_model_associator.h"
-#include "chrome/browser/sync/glue/synced_tab_delegate.h"
-#include "chrome/browser/sync/profile_sync_service_mock.h"
-#include "chrome/common/url_constants.h"
-#include "chrome/test/base/profile_mock.h"
-#include "components/sessions/serialized_navigation_entry_test_helper.h"
-#include "content/public/browser/navigation_entry.h"
-#include "content/public/browser/notification_details.h"
-#include "content/public/browser/notification_service.h"
-#include "content/public/common/page_transition_types.h"
-#include "content/public/test/test_browser_thread.h"
-#include "sync/protocol/session_specifics.pb.h"
-#include "sync/util/time.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "url/gurl.h"
-
-using content::BrowserThread;
-using sessions::SerializedNavigationEntry;
-using sessions::SerializedNavigationEntryTestHelper;
-using testing::NiceMock;
-using testing::Return;
-using testing::StrictMock;
-using testing::_;
-
-namespace browser_sync {
-
-class SyncSessionModelAssociatorTest : public testing::Test {
- protected:
-  SyncSessionModelAssociatorTest()
-      : ui_thread_(BrowserThread::UI, &message_loop_),
-        sync_service_(&profile_),
-        model_associator_(&sync_service_, true) {}
-
-  void LoadTabFavicon(const sync_pb::SessionTab& tab) {
-    model_associator_.LoadForeignTabFavicon(tab);
-    message_loop_.RunUntilIdle();
-  }
-
-  static GURL GetCurrentVirtualURL(const SyncedTabDelegate& tab_delegate) {
-    return SessionModelAssociator::GetCurrentVirtualURL(tab_delegate);
-  }
-
-  static void SetSessionTabFromDelegate(
-      const SyncedTabDelegate& tab_delegate,
-      base::Time mtime,
-      SessionTab* session_tab) {
-    SessionModelAssociator::SetSessionTabFromDelegate(
-        tab_delegate,
-        mtime,
-        session_tab);
-  }
-
-  bool FaviconEquals(const GURL page_url,
-                     std::string expected_bytes) {
-    FaviconCache* cache = model_associator_.GetFaviconCache();
-    GURL gurl(page_url);
-    scoped_refptr<base::RefCountedMemory> favicon;
-    if (!cache->GetSyncedFaviconForPageURL(gurl, &favicon))
-      return expected_bytes.empty();
-    if (favicon->size() != expected_bytes.size())
-      return false;
-    for (size_t i = 0; i < favicon->size(); ++i) {
-      if (expected_bytes[i] != *(favicon->front() + i))
-        return false;
-    }
-    return true;
-  }
-
- private:
-  base::MessageLoopForUI message_loop_;
-  content::TestBrowserThread ui_thread_;
-  NiceMock<ProfileMock> profile_;
-  NiceMock<ProfileSyncServiceMock> sync_service_;
-
- protected:
-  SessionModelAssociator model_associator_;
-};
-
-namespace {
-
-TEST_F(SyncSessionModelAssociatorTest, SessionWindowHasNoTabsToSync) {
-  SessionWindow win;
-  ASSERT_TRUE(SessionWindowHasNoTabsToSync(win));
-  scoped_ptr<SessionTab> tab(new SessionTab());
-  win.tabs.push_back(tab.release());
-  ASSERT_TRUE(SessionWindowHasNoTabsToSync(win));
-  SerializedNavigationEntry nav =
-      SerializedNavigationEntryTestHelper::CreateNavigation("about:bubba",
-                                                            "title");
-  win.tabs[0]->navigations.push_back(nav);
-  ASSERT_FALSE(SessionWindowHasNoTabsToSync(win));
-}
-
-TEST_F(SyncSessionModelAssociatorTest, ShouldSyncSessionTab) {
-  SessionTab tab;
-  ASSERT_FALSE(ShouldSyncSessionTab(tab));
-  SerializedNavigationEntry nav =
-      SerializedNavigationEntryTestHelper::CreateNavigation(
-          chrome::kChromeUINewTabURL, "title");
-  tab.navigations.push_back(nav);
-  // NewTab does not count as valid if it's the only navigation.
-  ASSERT_FALSE(ShouldSyncSessionTab(tab));
-  SerializedNavigationEntry nav2 =
-      SerializedNavigationEntryTestHelper::CreateNavigation("about:bubba",
-                                                            "title");
-  tab.navigations.push_back(nav2);
-  // Once there's another navigation, the tab is valid.
-  ASSERT_TRUE(ShouldSyncSessionTab(tab));
-}
-
-TEST_F(SyncSessionModelAssociatorTest,
-       ShouldSyncSessionTabIgnoresFragmentForNtp) {
-  SessionTab tab;
-  ASSERT_FALSE(ShouldSyncSessionTab(tab));
-  SerializedNavigationEntry nav =
-      SerializedNavigationEntryTestHelper::CreateNavigation(
-          std::string(chrome::kChromeUINewTabURL) + "#bookmarks", "title");
-  tab.navigations.push_back(nav);
-  // NewTab does not count as valid if it's the only navigation.
-  ASSERT_FALSE(ShouldSyncSessionTab(tab));
-}
-
-}  // namespace
-
-TEST_F(SyncSessionModelAssociatorTest, PopulateSessionHeader) {
-  sync_pb::SessionHeader header_s;
-  header_s.set_client_name("Client 1");
-  header_s.set_device_type(sync_pb::SyncEnums_DeviceType_TYPE_WIN);
-
-  SyncedSession session;
-  base::Time time = base::Time::Now();
-  SessionModelAssociator::PopulateSessionHeaderFromSpecifics(
-      header_s, time, &session);
-  ASSERT_EQ("Client 1", session.session_name);
-  ASSERT_EQ(SyncedSession::TYPE_WIN, session.device_type);
-  ASSERT_EQ(time, session.modified_time);
-}
-
-TEST_F(SyncSessionModelAssociatorTest, PopulateSessionWindow) {
-  sync_pb::SessionWindow window_s;
-  window_s.add_tab(0);
-  window_s.set_browser_type(sync_pb::SessionWindow_BrowserType_TYPE_TABBED);
-  window_s.set_selected_tab_index(1);
-
-  std::string tag = "tag";
-  SyncedSessionTracker tracker;
-  SyncedSession* session = tracker.GetSession(tag);
-  tracker.PutWindowInSession(tag, 0);
-  SessionModelAssociator::PopulateSessionWindowFromSpecifics(
-      tag, window_s, base::Time(), session->windows[0], &tracker);
-  ASSERT_EQ(1U, session->windows[0]->tabs.size());
-  ASSERT_EQ(1, session->windows[0]->selected_tab_index);
-  ASSERT_EQ(1, session->windows[0]->type);
-  ASSERT_EQ(1U, tracker.num_synced_sessions());
-  ASSERT_EQ(1U, tracker.num_synced_tabs(std::string("tag")));
-}
-
-namespace {
-
-class SyncedTabDelegateMock : public SyncedTabDelegate {
- public:
-  SyncedTabDelegateMock() {}
-  virtual ~SyncedTabDelegateMock() {}
-
-  MOCK_CONST_METHOD0(GetWindowId, SessionID::id_type());
-  MOCK_CONST_METHOD0(GetSessionId, SessionID::id_type());
-  MOCK_CONST_METHOD0(IsBeingDestroyed, bool());
-  MOCK_CONST_METHOD0(profile, Profile*());
-  MOCK_CONST_METHOD0(GetExtensionAppId, std::string());
-  MOCK_CONST_METHOD0(GetCurrentEntryIndex, int());
-  MOCK_CONST_METHOD0(GetEntryCount, int());
-  MOCK_CONST_METHOD0(GetPendingEntryIndex, int());
-  MOCK_CONST_METHOD0(GetPendingEntry, content::NavigationEntry*());
-  MOCK_CONST_METHOD1(GetEntryAtIndex, content::NavigationEntry*(int i));
-  MOCK_CONST_METHOD0(GetActiveEntry, content::NavigationEntry*());
-  MOCK_CONST_METHOD0(ProfileIsManaged, bool());
-  MOCK_CONST_METHOD0(GetBlockedNavigations,
-                     const std::vector<const content::NavigationEntry*>*());
-  MOCK_CONST_METHOD0(IsPinned, bool());
-  MOCK_CONST_METHOD0(HasWebContents, bool());
-  MOCK_CONST_METHOD0(GetWebContents, content::WebContents*());
-  MOCK_CONST_METHOD0(GetSyncId, int());
-  MOCK_METHOD1(SetSyncId, void(int));
-};
-
-class SyncRefreshListener : public content::NotificationObserver {
- public:
-  SyncRefreshListener() : notified_of_refresh_(false) {
-    registrar_.Add(this, chrome::NOTIFICATION_SYNC_REFRESH_LOCAL,
-        content::NotificationService::AllSources());
-  }
-
-  virtual void Observe(int type,
-                       const content::NotificationSource& source,
-                       const content::NotificationDetails& details) OVERRIDE {
-    if (type == chrome::NOTIFICATION_SYNC_REFRESH_LOCAL) {
-      notified_of_refresh_ = true;
-    }
-  }
-
-  bool notified_of_refresh() const { return notified_of_refresh_; }
-
- private:
-  bool notified_of_refresh_;
-  content::NotificationRegistrar registrar_;
-};
-
-// Test that AttemptSessionsDataRefresh() triggers the
-// NOTIFICATION_SYNC_REFRESH_LOCAL notification.
-TEST_F(SyncSessionModelAssociatorTest, TriggerSessionRefresh) {
-  SyncRefreshListener refresh_listener;
-
-  EXPECT_FALSE(refresh_listener.notified_of_refresh());
-  model_associator_.AttemptSessionsDataRefresh();
-  EXPECT_TRUE(refresh_listener.notified_of_refresh());
-}
-
-// Test that we exclude tabs with only chrome:// and file:// schemed navigations
-// from ShouldSyncTab(..).
-TEST_F(SyncSessionModelAssociatorTest, ValidTabs) {
-  NiceMock<SyncedTabDelegateMock> tab_mock;
-
-  // A null entry shouldn't crash.
-  EXPECT_CALL(tab_mock, GetCurrentEntryIndex()).WillRepeatedly(Return(0));
-  EXPECT_CALL(tab_mock, GetEntryAtIndex(0)).WillRepeatedly(
-      Return((content::NavigationEntry *)NULL));
-  EXPECT_CALL(tab_mock, GetEntryCount()).WillRepeatedly(Return(1));
-  EXPECT_CALL(tab_mock, GetPendingEntryIndex()).WillRepeatedly(Return(-1));
-  EXPECT_FALSE(model_associator_.ShouldSyncTab(tab_mock));
-
-  // A chrome:// entry isn't valid.
-  scoped_ptr<content::NavigationEntry> entry(
-      content::NavigationEntry::Create());
-  entry->SetVirtualURL(GURL("chrome://preferences/"));
-  testing::Mock::VerifyAndClearExpectations(&tab_mock);
-  EXPECT_CALL(tab_mock, GetCurrentEntryIndex()).WillRepeatedly(Return(0));
-  EXPECT_CALL(tab_mock, GetEntryAtIndex(0)).WillRepeatedly(Return(entry.get()));
-  EXPECT_CALL(tab_mock, GetEntryCount()).WillRepeatedly(Return(1));
-  EXPECT_CALL(tab_mock, GetPendingEntryIndex()).WillRepeatedly(Return(-1));
-  EXPECT_FALSE(model_associator_.ShouldSyncTab(tab_mock));
-
-  // A file:// entry isn't valid, even in addition to another entry.
-  scoped_ptr<content::NavigationEntry> entry2(
-      content::NavigationEntry::Create());
-  entry2->SetVirtualURL(GURL("file://bla"));
-  testing::Mock::VerifyAndClearExpectations(&tab_mock);
-  EXPECT_CALL(tab_mock, GetCurrentEntryIndex()).WillRepeatedly(Return(0));
-  EXPECT_CALL(tab_mock, GetEntryAtIndex(0)).WillRepeatedly(Return(entry.get()));
-  EXPECT_CALL(tab_mock, GetEntryAtIndex(1)).WillRepeatedly(
-      Return(entry2.get()));
-  EXPECT_CALL(tab_mock, GetEntryCount()).WillRepeatedly(Return(2));
-  EXPECT_CALL(tab_mock, GetPendingEntryIndex()).WillRepeatedly(Return(-1));
-  EXPECT_FALSE(model_associator_.ShouldSyncTab(tab_mock));
-
-  // Add a valid scheme entry to tab, making the tab valid.
-  scoped_ptr<content::NavigationEntry> entry3(
-      content::NavigationEntry::Create());
-  entry3->SetVirtualURL(GURL("http://www.google.com"));
-  testing::Mock::VerifyAndClearExpectations(&tab_mock);
-  EXPECT_CALL(tab_mock, GetCurrentEntryIndex()).WillRepeatedly(Return(0));
-  EXPECT_CALL(tab_mock, GetEntryAtIndex(0)).WillRepeatedly(
-      Return(entry.get()));
-  EXPECT_CALL(tab_mock, GetEntryAtIndex(1)).WillRepeatedly(
-      Return(entry2.get()));
-  EXPECT_CALL(tab_mock, GetEntryAtIndex(2)).WillRepeatedly(
-      Return(entry3.get()));
-  EXPECT_CALL(tab_mock, GetEntryCount()).WillRepeatedly(Return(3));
-  EXPECT_CALL(tab_mock, GetPendingEntryIndex()).WillRepeatedly(Return(-1));
-  EXPECT_TRUE(model_associator_.ShouldSyncTab(tab_mock));
-}
-
-// TODO(akalin): We should really use a fake for SyncedTabDelegate.
-
-// Make sure GetCurrentVirtualURL() returns the virtual URL of the pending
-// entry if the current entry is pending.
-TEST_F(SyncSessionModelAssociatorTest, GetCurrentVirtualURLPending) {
-  StrictMock<SyncedTabDelegateMock> tab_mock;
-  scoped_ptr<content::NavigationEntry> entry(
-      content::NavigationEntry::Create());
-  entry->SetVirtualURL(GURL("http://www.google.com"));
-  EXPECT_CALL(tab_mock, GetCurrentEntryIndex()).WillOnce(Return(0));
-  EXPECT_CALL(tab_mock, GetPendingEntryIndex()).WillOnce(Return(0));
-  EXPECT_CALL(tab_mock, GetPendingEntry()).WillOnce(Return(entry.get()));
-  EXPECT_EQ(entry->GetVirtualURL(), GetCurrentVirtualURL(tab_mock));
-}
-
-// Make sure GetCurrentVirtualURL() returns the virtual URL of the current
-// entry if the current entry is non-pending.
-TEST_F(SyncSessionModelAssociatorTest, GetCurrentVirtualURLNonPending) {
-  StrictMock<SyncedTabDelegateMock> tab_mock;
-  scoped_ptr<content::NavigationEntry> entry(
-      content::NavigationEntry::Create());
-  entry->SetVirtualURL(GURL("http://www.google.com"));
-  EXPECT_CALL(tab_mock, GetCurrentEntryIndex()).WillOnce(Return(0));
-  EXPECT_CALL(tab_mock, GetPendingEntryIndex()).WillOnce(Return(-1));
-  EXPECT_CALL(tab_mock, GetEntryAtIndex(0)).WillOnce(Return(entry.get()));
-  EXPECT_EQ(entry->GetVirtualURL(), GetCurrentVirtualURL(tab_mock));
-}
-
-const base::Time kTime1 = base::Time::FromInternalValue(100);
-const base::Time kTime2 = base::Time::FromInternalValue(105);
-const base::Time kTime3 = base::Time::FromInternalValue(110);
-const base::Time kTime4 = base::Time::FromInternalValue(120);
-const base::Time kTime5 = base::Time::FromInternalValue(130);
-
-// Populate the mock tab delegate with some data and navigation
-// entries and make sure that setting a SessionTab from it preserves
-// those entries (and clobbers any existing data).
-TEST_F(SyncSessionModelAssociatorTest, SetSessionTabFromDelegate) {
-  // Create a tab with three valid entries.
-  NiceMock<SyncedTabDelegateMock> tab_mock;
-  EXPECT_CALL(tab_mock, GetSessionId()).WillRepeatedly(Return(0));
-  scoped_ptr<content::NavigationEntry> entry1(
-      content::NavigationEntry::Create());
-  entry1->SetVirtualURL(GURL("http://www.google.com"));
-  entry1->SetTimestamp(kTime1);
-  entry1->SetHttpStatusCode(200);
-  scoped_ptr<content::NavigationEntry> entry2(
-      content::NavigationEntry::Create());
-  entry2->SetVirtualURL(GURL("http://www.noodle.com"));
-  entry2->SetTimestamp(kTime2);
-  entry2->SetHttpStatusCode(201);
-  scoped_ptr<content::NavigationEntry> entry3(
-      content::NavigationEntry::Create());
-  entry3->SetVirtualURL(GURL("http://www.doodle.com"));
-  entry3->SetTimestamp(kTime3);
-  entry3->SetHttpStatusCode(202);
-  EXPECT_CALL(tab_mock, GetCurrentEntryIndex()).WillRepeatedly(Return(2));
-  EXPECT_CALL(tab_mock, GetEntryAtIndex(0)).WillRepeatedly(
-      Return(entry1.get()));
-  EXPECT_CALL(tab_mock, GetEntryAtIndex(1)).WillRepeatedly(
-      Return(entry2.get()));
-  EXPECT_CALL(tab_mock, GetEntryAtIndex(2)).WillRepeatedly(
-      Return(entry3.get()));
-  EXPECT_CALL(tab_mock, GetEntryCount()).WillRepeatedly(Return(3));
-  EXPECT_CALL(tab_mock, GetPendingEntryIndex()).WillRepeatedly(Return(-1));
-  EXPECT_CALL(tab_mock, ProfileIsManaged()).WillRepeatedly(Return(false));
-
-  SessionTab session_tab;
-  session_tab.window_id.set_id(1);
-  session_tab.tab_id.set_id(1);
-  session_tab.tab_visual_index = 1;
-  session_tab.current_navigation_index = 1;
-  session_tab.pinned = true;
-  session_tab.extension_app_id = "app id";
-  session_tab.user_agent_override = "override";
-  session_tab.timestamp = kTime5;
-  session_tab.navigations.push_back(
-      SerializedNavigationEntryTestHelper::CreateNavigation(
-          "http://www.example.com", "Example"));
-  session_tab.session_storage_persistent_id = "persistent id";
-  SetSessionTabFromDelegate(tab_mock, kTime4, &session_tab);
-
-  EXPECT_EQ(0, session_tab.window_id.id());
-  EXPECT_EQ(0, session_tab.tab_id.id());
-  EXPECT_EQ(0, session_tab.tab_visual_index);
-  EXPECT_EQ(2, session_tab.current_navigation_index);
-  EXPECT_FALSE(session_tab.pinned);
-  EXPECT_TRUE(session_tab.extension_app_id.empty());
-  EXPECT_TRUE(session_tab.user_agent_override.empty());
-  EXPECT_EQ(kTime4, session_tab.timestamp);
-  ASSERT_EQ(3u, session_tab.navigations.size());
-  EXPECT_EQ(entry1->GetVirtualURL(),
-            session_tab.navigations[0].virtual_url());
-  EXPECT_EQ(entry2->GetVirtualURL(),
-            session_tab.navigations[1].virtual_url());
-  EXPECT_EQ(entry3->GetVirtualURL(),
-            session_tab.navigations[2].virtual_url());
-  EXPECT_EQ(kTime1, session_tab.navigations[0].timestamp());
-  EXPECT_EQ(kTime2, session_tab.navigations[1].timestamp());
-  EXPECT_EQ(kTime3, session_tab.navigations[2].timestamp());
-  EXPECT_EQ(200, session_tab.navigations[0].http_status_code());
-  EXPECT_EQ(201, session_tab.navigations[1].http_status_code());
-  EXPECT_EQ(202, session_tab.navigations[2].http_status_code());
-  EXPECT_EQ(SerializedNavigationEntry::STATE_INVALID,
-            session_tab.navigations[0].blocked_state());
-  EXPECT_EQ(SerializedNavigationEntry::STATE_INVALID,
-            session_tab.navigations[1].blocked_state());
-  EXPECT_EQ(SerializedNavigationEntry::STATE_INVALID,
-            session_tab.navigations[2].blocked_state());
-  EXPECT_TRUE(session_tab.session_storage_persistent_id.empty());
-}
-
-// Tests that for managed users blocked navigations are recorded and marked as
-// such, while regular navigations are marked as allowed.
-TEST_F(SyncSessionModelAssociatorTest, BlockedNavigations) {
-  NiceMock<SyncedTabDelegateMock> tab_mock;
-  EXPECT_CALL(tab_mock, GetSessionId()).WillRepeatedly(Return(0));
-  scoped_ptr<content::NavigationEntry> entry1(
-      content::NavigationEntry::Create());
-  entry1->SetVirtualURL(GURL("http://www.google.com"));
-  entry1->SetTimestamp(kTime1);
-  EXPECT_CALL(tab_mock, GetCurrentEntryIndex()).WillRepeatedly(Return(0));
-  EXPECT_CALL(tab_mock, GetEntryAtIndex(0)).WillRepeatedly(
-      Return(entry1.get()));
-  EXPECT_CALL(tab_mock, GetEntryCount()).WillRepeatedly(Return(1));
-  EXPECT_CALL(tab_mock, GetPendingEntryIndex()).WillRepeatedly(Return(-1));
-
-  content::NavigationEntry* entry2 = content::NavigationEntry::Create();
-  entry2->SetVirtualURL(GURL("http://blocked.com/foo"));
-  entry2->SetTimestamp(kTime2);
-  content::NavigationEntry* entry3 = content::NavigationEntry::Create();
-  entry3->SetVirtualURL(GURL("http://evil.com"));
-  entry3->SetTimestamp(kTime3);
-  ScopedVector<const content::NavigationEntry> blocked_navigations;
-  blocked_navigations.push_back(entry2);
-  blocked_navigations.push_back(entry3);
-
-  EXPECT_CALL(tab_mock, ProfileIsManaged()).WillRepeatedly(Return(true));
-  EXPECT_CALL(tab_mock, GetBlockedNavigations()).WillRepeatedly(
-      Return(&blocked_navigations.get()));
-
-  SessionTab session_tab;
-  session_tab.window_id.set_id(1);
-  session_tab.tab_id.set_id(1);
-  session_tab.tab_visual_index = 1;
-  session_tab.current_navigation_index = 1;
-  session_tab.pinned = true;
-  session_tab.extension_app_id = "app id";
-  session_tab.user_agent_override = "override";
-  session_tab.timestamp = kTime5;
-  session_tab.navigations.push_back(
-      SerializedNavigationEntryTestHelper::CreateNavigation(
-          "http://www.example.com", "Example"));
-  session_tab.session_storage_persistent_id = "persistent id";
-  SetSessionTabFromDelegate(tab_mock, kTime4, &session_tab);
-
-  EXPECT_EQ(0, session_tab.window_id.id());
-  EXPECT_EQ(0, session_tab.tab_id.id());
-  EXPECT_EQ(0, session_tab.tab_visual_index);
-  EXPECT_EQ(0, session_tab.current_navigation_index);
-  EXPECT_FALSE(session_tab.pinned);
-  EXPECT_TRUE(session_tab.extension_app_id.empty());
-  EXPECT_TRUE(session_tab.user_agent_override.empty());
-  EXPECT_EQ(kTime4, session_tab.timestamp);
-  ASSERT_EQ(3u, session_tab.navigations.size());
-  EXPECT_EQ(entry1->GetVirtualURL(),
-            session_tab.navigations[0].virtual_url());
-  EXPECT_EQ(entry2->GetVirtualURL(),
-            session_tab.navigations[1].virtual_url());
-  EXPECT_EQ(entry3->GetVirtualURL(),
-            session_tab.navigations[2].virtual_url());
-  EXPECT_EQ(kTime1, session_tab.navigations[0].timestamp());
-  EXPECT_EQ(kTime2, session_tab.navigations[1].timestamp());
-  EXPECT_EQ(kTime3, session_tab.navigations[2].timestamp());
-  EXPECT_EQ(SerializedNavigationEntry::STATE_ALLOWED,
-            session_tab.navigations[0].blocked_state());
-  EXPECT_EQ(SerializedNavigationEntry::STATE_BLOCKED,
-            session_tab.navigations[1].blocked_state());
-  EXPECT_EQ(SerializedNavigationEntry::STATE_BLOCKED,
-            session_tab.navigations[2].blocked_state());
-  EXPECT_TRUE(session_tab.session_storage_persistent_id.empty());
-}
-
-// Create tab specifics with an empty favicon. Ensure it gets ignored and not
-// stored into the synced favicon lookups.
-TEST_F(SyncSessionModelAssociatorTest, LoadEmptyFavicon) {
-  std::string favicon;
-  std::string favicon_url = "http://www.faviconurl.com/favicon.ico";
-  std::string page_url = "http://www.faviconurl.com/page.html";
-  sync_pb::SessionTab tab;
-  tab.set_favicon(favicon);
-  tab.set_favicon_source(favicon_url);
-  tab.set_favicon_type(sync_pb::SessionTab::TYPE_WEB_FAVICON);
-  sync_pb::TabNavigation* navigation = tab.add_navigation();
-  navigation->set_virtual_url(page_url);
-  tab.set_current_navigation_index(0);
-
-  EXPECT_TRUE(FaviconEquals(GURL(page_url), std::string()));
-  LoadTabFavicon(tab);
-  EXPECT_TRUE(FaviconEquals(GURL(page_url), std::string()));
-}
-
-// Create tab specifics with a non-web favicon. Ensure it gets ignored and not
-// stored into the synced favicon lookups.
-TEST_F(SyncSessionModelAssociatorTest, LoadNonWebFavicon) {
-  std::string favicon = "icon bytes";
-  std::string favicon_url = "http://www.faviconurl.com/favicon.ico";
-  std::string page_url = "http://www.faviconurl.com/page.html";
-  sync_pb::SessionTab tab;
-  tab.set_favicon(favicon);
-  tab.set_favicon_source(favicon_url);
-  // Set favicon type to an unsupported value (1 == WEB_FAVICON).
-  tab.mutable_unknown_fields()->AddVarint(9, 2);
-  sync_pb::TabNavigation* navigation = tab.add_navigation();
-  navigation->set_virtual_url(page_url);
-  tab.set_current_navigation_index(0);
-
-  EXPECT_TRUE(FaviconEquals(GURL(page_url), std::string()));
-  LoadTabFavicon(tab);
-  EXPECT_TRUE(FaviconEquals(GURL(page_url), std::string()));
-}
-
-// Create tab specifics with a valid favicon. Ensure it gets stored in the
-// synced favicon lookups and is accessible by the page url.
-TEST_F(SyncSessionModelAssociatorTest, LoadValidFavicon) {
-  std::string favicon = "icon bytes";
-  std::string favicon_url = "http://www.faviconurl.com/favicon.ico";
-  std::string page_url = "http://www.faviconurl.com/page.html";
-  sync_pb::SessionTab tab;
-  tab.set_favicon(favicon);
-  tab.set_favicon_source(favicon_url);
-  tab.set_favicon_type(sync_pb::SessionTab::TYPE_WEB_FAVICON);
-  sync_pb::TabNavigation* navigation = tab.add_navigation();
-  navigation->set_virtual_url(page_url);
-  tab.set_current_navigation_index(0);
-
-  EXPECT_TRUE(FaviconEquals(GURL(page_url), std::string()));
-  LoadTabFavicon(tab);
-  EXPECT_TRUE(FaviconEquals(GURL(page_url), favicon));
-}
-
-// Create tab specifics with a valid favicon, load it, then load tab specifics
-// with a new favicon for the same favicon source but different page. Ensure the
-// old favicon remains.
-TEST_F(SyncSessionModelAssociatorTest, UpdateValidFavicon) {
-  std::string favicon_url = "http://www.faviconurl.com/favicon.ico";
-
-  std::string favicon = "icon bytes";
-  std::string page_url = "http://www.faviconurl.com/page.html";
-  sync_pb::SessionTab tab;
-  tab.set_favicon(favicon);
-  tab.set_favicon_source(favicon_url);
-  tab.set_favicon_type(sync_pb::SessionTab::TYPE_WEB_FAVICON);
-  sync_pb::TabNavigation* navigation = tab.add_navigation();
-  navigation->set_virtual_url(page_url);
-  tab.set_current_navigation_index(0);
-
-  EXPECT_TRUE(FaviconEquals(GURL(page_url), std::string()));
-  LoadTabFavicon(tab);
-  EXPECT_TRUE(FaviconEquals(GURL(page_url), favicon));
-
-  // Now have a new page with same favicon source but newer favicon data.
-  std::string favicon2 = "icon bytes 2";
-  std::string page_url2 = "http://www.faviconurl.com/page2.html";
-  sync_pb::SessionTab tab2;
-  tab2.set_favicon(favicon2);
-  tab2.set_favicon_source(favicon_url);
-  tab2.set_favicon_type(sync_pb::SessionTab::TYPE_WEB_FAVICON);
-  sync_pb::TabNavigation* navigation2 = tab2.add_navigation();
-  navigation2->set_virtual_url(page_url2);
-  tab2.set_current_navigation_index(0);
-
-  // The new page should be mapped to the old favicon data.
-  EXPECT_TRUE(FaviconEquals(GURL(page_url2), std::string()));
-  LoadTabFavicon(tab2);
-  EXPECT_TRUE(FaviconEquals(GURL(page_url), favicon));
-  EXPECT_TRUE(FaviconEquals(GURL(page_url2), favicon));
-}
-
-}  // namespace
-
-}  // namespace browser_sync
diff --git a/chrome/browser/sync/glue/shared_change_processor.cc b/chrome/browser/sync/glue/shared_change_processor.cc
index f4393e2..22fc64c 100644
--- a/chrome/browser/sync/glue/shared_change_processor.cc
+++ b/chrome/browser/sync/glue/shared_change_processor.cc
@@ -4,9 +4,9 @@
 
 #include "chrome/browser/sync/glue/shared_change_processor.h"
 
-#include "chrome/browser/sync/glue/generic_change_processor.h"
 #include "chrome/browser/sync/profile_sync_components_factory.h"
 #include "chrome/browser/sync/profile_sync_service.h"
+#include "components/sync_driver/generic_change_processor.h"
 #include "content/public/browser/browser_thread.h"
 #include "sync/api/sync_change.h"
 
diff --git a/chrome/browser/sync/glue/sync_backend_registrar.cc b/chrome/browser/sync/glue/sync_backend_registrar.cc
index 20a919e..ded6f42 100644
--- a/chrome/browser/sync/glue/sync_backend_registrar.cc
+++ b/chrome/browser/sync/glue/sync_backend_registrar.cc
@@ -13,11 +13,11 @@
 #include "chrome/browser/password_manager/password_store_factory.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/sync/glue/browser_thread_model_worker.h"
-#include "chrome/browser/sync/glue/change_processor.h"
 #include "chrome/browser/sync/glue/history_model_worker.h"
 #include "chrome/browser/sync/glue/password_model_worker.h"
 #include "chrome/browser/sync/glue/ui_model_worker.h"
 #include "components/password_manager/core/browser/password_store.h"
+#include "components/sync_driver/change_processor.h"
 #include "content/public/browser/browser_thread.h"
 #include "sync/internal_api/public/engine/passive_model_worker.h"
 #include "sync/internal_api/public/user_share.h"
@@ -219,7 +219,7 @@
   processors_[type] = change_processor;
 
   // Start the change processor.
-  change_processor->Start(profile_, user_share);
+  change_processor->Start(user_share);
   DCHECK(GetProcessorUnsafe(type));
 }
 
diff --git a/chrome/browser/sync/glue/sync_backend_registrar_unittest.cc b/chrome/browser/sync/glue/sync_backend_registrar_unittest.cc
index 2e5b1db..a4daafa 100644
--- a/chrome/browser/sync/glue/sync_backend_registrar_unittest.cc
+++ b/chrome/browser/sync/glue/sync_backend_registrar_unittest.cc
@@ -4,9 +4,9 @@
 
 #include "chrome/browser/sync/glue/sync_backend_registrar.h"
 
-#include "chrome/browser/sync/glue/change_processor_mock.h"
 #include "chrome/browser/sync/glue/ui_model_worker.h"
 #include "chrome/test/base/testing_profile.h"
+#include "components/sync_driver/change_processor_mock.h"
 #include "content/public/test/test_browser_thread.h"
 #include "sync/internal_api/public/base/model_type.h"
 #include "sync/internal_api/public/test/test_user_share.h"
@@ -193,7 +193,7 @@
   TriggerChanges(registrar_.get(), BOOKMARKS);
 
   StrictMock<ChangeProcessorMock> change_processor_mock;
-  EXPECT_CALL(change_processor_mock, StartImpl(&profile_));
+  EXPECT_CALL(change_processor_mock, StartImpl());
   EXPECT_CALL(change_processor_mock, IsRunning())
       .WillRepeatedly(Return(true));
   EXPECT_CALL(change_processor_mock, ApplyChangesFromSyncModel(NULL, _, _));
@@ -234,7 +234,7 @@
   TriggerChanges(registrar_.get(), AUTOFILL);
 
   StrictMock<ChangeProcessorMock> change_processor_mock;
-  EXPECT_CALL(change_processor_mock, StartImpl(&profile_));
+  EXPECT_CALL(change_processor_mock, StartImpl());
   EXPECT_CALL(change_processor_mock, IsRunning())
       .WillRepeatedly(Return(true));
   EXPECT_CALL(change_processor_mock, ApplyChangesFromSyncModel(NULL, _, _));
diff --git a/chrome/browser/sync/glue/synced_device_tracker.cc b/chrome/browser/sync/glue/synced_device_tracker.cc
index 0c8085a..fa4770f 100644
--- a/chrome/browser/sync/glue/synced_device_tracker.cc
+++ b/chrome/browser/sync/glue/synced_device_tracker.cc
@@ -38,7 +38,7 @@
 SyncedDeviceTracker::~SyncedDeviceTracker() {
 }
 
-void SyncedDeviceTracker::StartImpl(Profile* profile) { }
+void SyncedDeviceTracker::StartImpl() { }
 
 void SyncedDeviceTracker::ApplyChangesFromSyncModel(
       const syncer::BaseTransaction* trans,
@@ -129,7 +129,6 @@
                        specifics.chrome_version(),
                        specifics.sync_user_agent(),
                        specifics.device_type()));
-
   }
 }
 
@@ -179,7 +178,7 @@
   if (node.InitByClientTagLookup(syncer::DEVICE_INFO, tag) ==
       syncer::BaseNode::INIT_OK) {
     node.SetDeviceInfoSpecifics(specifics);
-    node.SetTitle(base::UTF8ToWide(specifics.client_name()));
+    node.SetTitle(specifics.client_name());
   } else {
     syncer::ReadNode type_root(&trans);
     syncer::BaseNode::InitByLookupResult type_root_lookup_result =
@@ -193,7 +192,7 @@
                                       tag);
     DCHECK_EQ(syncer::WriteNode::INIT_SUCCESS, create_result);
     new_node.SetDeviceInfoSpecifics(specifics);
-    new_node.SetTitle(base::UTF8ToWide(specifics.client_name()));
+    new_node.SetTitle(specifics.client_name());
   }
 }
 
diff --git a/chrome/browser/sync/glue/synced_device_tracker.h b/chrome/browser/sync/glue/synced_device_tracker.h
index 7b7668f..3f0844a 100644
--- a/chrome/browser/sync/glue/synced_device_tracker.h
+++ b/chrome/browser/sync/glue/synced_device_tracker.h
@@ -12,7 +12,7 @@
 #include "base/memory/scoped_vector.h"
 #include "base/memory/weak_ptr.h"
 #include "base/observer_list_threadsafe.h"
-#include "chrome/browser/sync/glue/change_processor.h"
+#include "components/sync_driver/change_processor.h"
 
 namespace syncer {
 struct UserShare;
@@ -35,7 +35,7 @@
   };
 
   // ChangeProcessor methods
-  virtual void StartImpl(Profile* profile) OVERRIDE;
+  virtual void StartImpl() OVERRIDE;
   virtual void ApplyChangesFromSyncModel(
       const syncer::BaseTransaction* trans,
       int64 model_version,
diff --git a/chrome/browser/sync/glue/synced_device_tracker_unittest.cc b/chrome/browser/sync/glue/synced_device_tracker_unittest.cc
index 296c629..4596b5a 100644
--- a/chrome/browser/sync/glue/synced_device_tracker_unittest.cc
+++ b/chrome/browser/sync/glue/synced_device_tracker_unittest.cc
@@ -51,7 +51,7 @@
     // NULL here.  Constructing a TestingProfile can take over a 100ms, so this
     // optimization can be the difference between 'tests run with a noticeable
     // delay' and 'tests run instantaneously'.
-    synced_device_tracker_->Start(NULL, user_share());
+    synced_device_tracker_->Start(user_share());
   }
 
   virtual void TearDown() {
diff --git a/chrome/browser/sync/glue/synced_session_tracker.h b/chrome/browser/sync/glue/synced_session_tracker.h
index 6ff2b46..08e8c24 100644
--- a/chrome/browser/sync/glue/synced_session_tracker.h
+++ b/chrome/browser/sync/glue/synced_session_tracker.h
@@ -15,7 +15,7 @@
 #include "chrome/browser/sessions/session_id.h"
 #include "chrome/browser/sessions/session_types.h"
 #include "chrome/browser/sync/glue/synced_session.h"
-#include "chrome/browser/sync/glue/tab_node_pool.h"
+#include "chrome/browser/sync/sessions/tab_node_pool.h"
 
 namespace browser_sync {
 
diff --git a/chrome/browser/sync/glue/tab_node_pool.cc b/chrome/browser/sync/glue/tab_node_pool.cc
deleted file mode 100644
index 9ece54a..0000000
--- a/chrome/browser/sync/glue/tab_node_pool.cc
+++ /dev/null
@@ -1,207 +0,0 @@
-// Copyright (c) 2012 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 "chrome/browser/sync/glue/tab_node_pool.h"
-
-#include "base/format_macros.h"
-#include "base/logging.h"
-#include "base/strings/stringprintf.h"
-#include "base/strings/utf_string_conversions.h"
-#include "chrome/browser/sync/profile_sync_service.h"
-#include "sync/internal_api/public/base/model_type.h"
-#include "sync/internal_api/public/read_node.h"
-#include "sync/internal_api/public/write_node.h"
-#include "sync/internal_api/public/write_transaction.h"
-
-namespace browser_sync {
-
-static const char kNoSessionsFolderError[] =
-    "Server did not create the top-level sessions node. We "
-    "might be running against an out-of-date server.";
-
-const size_t TabNodePool::kFreeNodesLowWatermark = 25;
-const size_t TabNodePool::kFreeNodesHighWatermark = 100;
-
-TabNodePool::TabNodePool(ProfileSyncService* sync_service)
-    : max_used_tab_node_id_(kInvalidTabNodeID),
-      sync_service_(sync_service) {}
-
-// static
-// We start vending tab node IDs at 0.
-const int TabNodePool::kInvalidTabNodeID = -1;
-
-TabNodePool::~TabNodePool() {}
-
-// Static
-std::string TabNodePool::TabIdToTag(
-    const std::string machine_tag, int tab_node_id) {
-  return base::StringPrintf("%s %d", machine_tag.c_str(), tab_node_id);
-}
-
-void TabNodePool::AddTabNode(int tab_node_id) {
-  DCHECK_GT(tab_node_id, kInvalidTabNodeID);
-  DCHECK(nodeid_tabid_map_.find(tab_node_id) == nodeid_tabid_map_.end());
-  unassociated_nodes_.insert(tab_node_id);
-  if (max_used_tab_node_id_ < tab_node_id)
-    max_used_tab_node_id_ = tab_node_id;
-}
-
-void TabNodePool::AssociateTabNode(int tab_node_id,
-                                   SessionID::id_type tab_id) {
-  DCHECK_GT(tab_node_id, kInvalidTabNodeID);
-  // Remove sync node if it is in unassociated nodes pool.
-  std::set<int>::iterator u_it = unassociated_nodes_.find(tab_node_id);
-  if (u_it != unassociated_nodes_.end()) {
-    unassociated_nodes_.erase(u_it);
-  } else {
-    // This is a new node association, the sync node should be free.
-    // Remove node from free node pool and then associate it with the tab.
-    std::set<int>::iterator it = free_nodes_pool_.find(tab_node_id);
-    DCHECK(it != free_nodes_pool_.end());
-    free_nodes_pool_.erase(it);
-  }
-  DCHECK(nodeid_tabid_map_.find(tab_node_id) == nodeid_tabid_map_.end());
-  nodeid_tabid_map_[tab_node_id] = tab_id;
-}
-
-int TabNodePool::GetFreeTabNode() {
-  DCHECK_GT(machine_tag_.length(), 0U);
-  if (free_nodes_pool_.empty()) {
-    // Tab pool has no free nodes, allocate new one.
-    syncer::WriteTransaction trans(FROM_HERE, sync_service_->GetUserShare());
-    syncer::ReadNode root(&trans);
-    if (root.InitByTagLookup(syncer::ModelTypeToRootTag(syncer::SESSIONS)) !=
-                             syncer::BaseNode::INIT_OK) {
-      LOG(ERROR) << kNoSessionsFolderError;
-      return kInvalidTabNodeID;
-    }
-    int tab_node_id = ++max_used_tab_node_id_;
-    std::string tab_node_tag = TabIdToTag(machine_tag_, tab_node_id);
-    syncer::WriteNode tab_node(&trans);
-    syncer::WriteNode::InitUniqueByCreationResult result =
-        tab_node.InitUniqueByCreation(syncer::SESSIONS, root, tab_node_tag);
-    if (result != syncer::WriteNode::INIT_SUCCESS) {
-      LOG(ERROR) << "Could not create new node with tag "
-                 << tab_node_tag << "!";
-      return kInvalidTabNodeID;
-    }
-    // We fill the new node with just enough data so that in case of a crash/bug
-    // we can identify the node as our own on re-association and reuse it.
-    tab_node.SetTitle(base::UTF8ToWide(tab_node_tag));
-    sync_pb::SessionSpecifics specifics;
-    specifics.set_session_tag(machine_tag_);
-    specifics.set_tab_node_id(tab_node_id);
-    tab_node.SetSessionSpecifics(specifics);
-
-    // Grow the pool by 1 since we created a new node.
-    DVLOG(1) << "Adding sync node " << tab_node_id
-             << " to tab node id pool";
-    free_nodes_pool_.insert(tab_node_id);
-    return tab_node_id;
-  } else {
-    // Return the next free node.
-    return *free_nodes_pool_.begin();
-  }
-}
-
-void TabNodePool::FreeTabNode(int tab_node_id) {
-  TabNodeIDToTabIDMap::iterator it = nodeid_tabid_map_.find(tab_node_id);
-  DCHECK(it != nodeid_tabid_map_.end());
-  nodeid_tabid_map_.erase(it);
-  FreeTabNodeInternal(tab_node_id);
-}
-
-void TabNodePool::FreeTabNodeInternal(int tab_node_id) {
-  DCHECK(free_nodes_pool_.find(tab_node_id) == free_nodes_pool_.end());
-  free_nodes_pool_.insert(tab_node_id);
-
-  // If number of free nodes exceed kFreeNodesHighWatermark,
-  // delete sync nodes till number reaches kFreeNodesLowWatermark.
-  // Note: This logic is to mitigate temporary disassociation issues with old
-  // clients: http://crbug.com/259918. Newer versions do not need this.
-  if (free_nodes_pool_.size() > kFreeNodesHighWatermark) {
-    syncer::WriteTransaction trans(FROM_HERE, sync_service_->GetUserShare());
-    for (std::set<int>::iterator free_it = free_nodes_pool_.begin();
-         free_it != free_nodes_pool_.end();) {
-      syncer::WriteNode tab_node(&trans);
-      const std::string tab_node_tag = TabIdToTag(machine_tag_, *free_it);
-      if (tab_node.InitByClientTagLookup(syncer::SESSIONS, tab_node_tag) !=
-          syncer::BaseNode::INIT_OK) {
-        LOG(ERROR) << "Could not find sync node with tag: " << tab_node_tag;
-        return;
-      }
-      free_nodes_pool_.erase(free_it++);
-      tab_node.Tombstone();
-      if (free_nodes_pool_.size() <= kFreeNodesLowWatermark) {
-        return;
-      }
-    }
-  }
-}
-
-bool TabNodePool::IsUnassociatedTabNode(int tab_node_id) {
-  return unassociated_nodes_.find(tab_node_id) != unassociated_nodes_.end();
-}
-
-void TabNodePool::ReassociateTabNode(int tab_node_id,
-                                     SessionID::id_type tab_id) {
-  // Remove from list of unassociated sync_nodes if present.
-  std::set<int>::iterator it = unassociated_nodes_.find(tab_node_id);
-  if (it != unassociated_nodes_.end()) {
-    unassociated_nodes_.erase(it);
-  } else {
-    // tab_node_id must be an already associated node.
-    DCHECK(nodeid_tabid_map_.find(tab_node_id) != nodeid_tabid_map_.end());
-  }
-  nodeid_tabid_map_[tab_node_id] = tab_id;
-}
-
-SessionID::id_type TabNodePool::GetTabIdFromTabNodeId(
-    int tab_node_id) const {
-  TabNodeIDToTabIDMap::const_iterator it = nodeid_tabid_map_.find(tab_node_id);
-  if (it != nodeid_tabid_map_.end()) {
-    return it->second;
-  }
-  return kInvalidTabID;
-}
-
-void TabNodePool::DeleteUnassociatedTabNodes() {
-  syncer::WriteTransaction trans(FROM_HERE, sync_service_->GetUserShare());
-  for (std::set<int>::iterator it = unassociated_nodes_.begin();
-       it != unassociated_nodes_.end();) {
-    syncer::WriteNode tab_node(&trans);
-    const std::string tab_node_tag = TabIdToTag(machine_tag_, *it);
-    if (tab_node.InitByClientTagLookup(syncer::SESSIONS, tab_node_tag) !=
-        syncer::BaseNode::INIT_OK) {
-      LOG(ERROR) << "Could not find sync node with tag: " << tab_node_tag;
-    } else {
-      tab_node.Tombstone();
-    }
-    unassociated_nodes_.erase(it++);
-  }
-  DCHECK(unassociated_nodes_.empty());
-}
-
-// Clear tab pool.
-void TabNodePool::Clear() {
-  unassociated_nodes_.clear();
-  free_nodes_pool_.clear();
-  nodeid_tabid_map_.clear();
-  max_used_tab_node_id_ = kInvalidTabNodeID;
-}
-
-size_t TabNodePool::Capacity() const {
-  return nodeid_tabid_map_.size() + unassociated_nodes_.size() +
-         free_nodes_pool_.size();
-}
-
-bool TabNodePool::Empty() const { return free_nodes_pool_.empty(); }
-
-bool TabNodePool::Full() { return nodeid_tabid_map_.empty(); }
-
-void TabNodePool::SetMachineTag(const std::string& machine_tag) {
-  machine_tag_ = machine_tag;
-}
-
-}  // namespace browser_sync
diff --git a/chrome/browser/sync/glue/tab_node_pool.h b/chrome/browser/sync/glue/tab_node_pool.h
deleted file mode 100644
index 64b34d2..0000000
--- a/chrome/browser/sync/glue/tab_node_pool.h
+++ /dev/null
@@ -1,148 +0,0 @@
-// Copyright (c) 2012 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 CHROME_BROWSER_SYNC_GLUE_TAB_NODE_POOL_H_
-#define CHROME_BROWSER_SYNC_GLUE_TAB_NODE_POOL_H_
-
-#include <map>
-#include <set>
-#include <string>
-
-#include "base/basictypes.h"
-#include "base/gtest_prod_util.h"
-#include "chrome/browser/sessions/session_id.h"
-
-class ProfileSyncService;
-
-namespace browser_sync {
-
-// A pool for managing free/used tab sync nodes for the *local* session.
-// Performs lazy creation of sync nodes when necessary.
-// Note: We make use of the following "id's"
-// - a tab_id: created by session service, unique to this client
-// - a tab_node_id: the id for a particular sync tab node. This is used
-//   to generate the sync tab node tag through:
-//       tab_tag = StringPrintf("%s_%ui", local_session_tag, tab_node_id);
-//
-// A sync node can be in one of the three states:
-// 1. Associated   : Sync node is used and associated with a tab.
-// 2. Unassociated : Sync node is used but currently unassociated with any tab.
-//                   This is true for old nodes that remain from a session
-//                   restart. Nodes are only unassociated temporarily while the
-//                   model associator figures out which tabs belong to which
-//                   nodes. Eventually any remaining unassociated nodes are
-//                   deleted.
-// 3. Free         : Sync node is unused.
-
-class TabNodePool {
- public:
-  explicit TabNodePool(ProfileSyncService* sync_service);
-  ~TabNodePool();
-  enum InvalidTab {
-    kInvalidTabID = -1
-  };
-
-  // If free nodes > kFreeNodesHighWatermark, delete all free nodes until
-  // free nodes <= kFreeNodesLowWatermark.
-  static const size_t kFreeNodesLowWatermark;
-
-  // Maximum limit of FreeNodes allowed on the client.
-  static const size_t kFreeNodesHighWatermark;
-
-  static const int kInvalidTabNodeID;
-
-  // Build a sync tag from tab_node_id.
-  static std::string TabIdToTag(const std::string machine_tag,
-                                int tab_node_id);
-
-  // Returns the tab_node_id for the next free tab node. If none are available,
-  // creates a new tab node and adds it to free nodes pool. The free node can
-  // then be used to associate with a tab by calling AssociateTabNode.
-  // Note: The node is considered free until it has been associated. Repeated
-  // calls to GetFreeTabNode will return the same id until node has been
-  // associated.
-  int GetFreeTabNode();
-
-  // Removes association for |tab_node_id| and returns it to the free node pool.
-  void FreeTabNode(int tab_node_id);
-
-  // Associates |tab_node_id| with |tab_id|. |tab_node_id| should either be
-  // unassociated or free. If |tab_node_id| is free, |tab_node_id| is removed
-  // from the free node pool In order to associate a non free sync node,
-  // use ReassociateTabNode.
-  void AssociateTabNode(int tab_node_id, SessionID::id_type tab_id);
-
-  // Adds |tab_node_id| as an unassociated sync node.
-  // Note: this should only be called when we discover tab sync nodes from
-  // previous sessions, not for freeing tab nodes we created through
-  // GetFreeTabNode (use FreeTabNode below for that).
-  void AddTabNode(int tab_node_id);
-
-  // Returns the tab_id for |tab_node_id| if it is associated else returns
-  // kInvalidTabID.
-  SessionID::id_type GetTabIdFromTabNodeId(int tab_node_id) const;
-
-  // Reassociates |tab_node_id| with |tab_id|. |tab_node_id| must be either
-  // associated with a tab or in the set of unassociated nodes.
-  void ReassociateTabNode(int tab_node_id, SessionID::id_type tab_id);
-
-  // Returns true if |tab_node_id| is an unassociated tab node.
-  bool IsUnassociatedTabNode(int tab_node_id);
-
-  // Deletes any unassociated nodes.
-  void DeleteUnassociatedTabNodes();
-
-  // Clear tab pool.
-  void Clear();
-
-  // Return the number of tab nodes this client currently has allocated
-  // (including both free, unassociated and associated nodes)
-  size_t Capacity() const;
-
-  // Return empty status (all tab nodes are in use).
-  bool Empty() const;
-
-  // Return full status (no tab nodes are in use).
-  bool Full();
-
-  void SetMachineTag(const std::string& machine_tag);
-
- private:
-  friend class SyncTabNodePoolTest;
-  typedef std::map<int, SessionID::id_type> TabNodeIDToTabIDMap;
-
-  // Adds |tab_node_id| to free node pool.
-  void FreeTabNodeInternal(int tab_node_id);
-
-  // Stores mapping of node ids associated with tab_ids, these are the used
-  // nodes of tab node pool.
-  // The nodes in the map can be returned to free tab node pool by calling
-  // FreeTabNode(tab_node_id).
-  TabNodeIDToTabIDMap nodeid_tabid_map_;
-
-  // The node ids for the set of free sync nodes.
-  std::set<int> free_nodes_pool_;
-
-  // The node ids that are added to pool using AddTabNode and are currently
-  // not associated with any tab. They can be reassociated using
-  // ReassociateTabNode.
-  std::set<int> unassociated_nodes_;
-
-  // The maximum used tab_node id for a sync node. A new sync node will always
-  // be created with max_used_tab_node_id_ + 1.
-  int max_used_tab_node_id_;
-
-  // The machine tag associated with this tab pool. Used in the title of new
-  // sync nodes.
-  std::string machine_tag_;
-
-  // Our sync service profile (for making changes to the sync db)
-  ProfileSyncService* sync_service_;
-
-  DISALLOW_COPY_AND_ASSIGN(TabNodePool);
-};
-
-}  // namespace browser_sync
-
-#endif  // CHROME_BROWSER_SYNC_GLUE_TAB_NODE_POOL_H_
diff --git a/chrome/browser/sync/glue/tab_node_pool_unittest.cc b/chrome/browser/sync/glue/tab_node_pool_unittest.cc
deleted file mode 100644
index f93de85..0000000
--- a/chrome/browser/sync/glue/tab_node_pool_unittest.cc
+++ /dev/null
@@ -1,196 +0,0 @@
-// Copyright (c) 2012 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 "chrome/browser/sync/glue/tab_node_pool.h"
-#include "base/logging.h"
-
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace browser_sync {
-
-class SyncTabNodePoolTest : public testing::Test {
- protected:
-  SyncTabNodePoolTest() : pool_(NULL) { pool_.SetMachineTag("tag"); }
-
-  int GetMaxUsedTabNodeId() const { return pool_.max_used_tab_node_id_; }
-
-  void AddFreeTabNodes(size_t size, const int node_ids[]);
-
-  TabNodePool pool_;
-};
-
-void SyncTabNodePoolTest::AddFreeTabNodes(size_t size, const int node_ids[]) {
-  for (size_t i = 0; i < size; ++i) {
-    pool_.free_nodes_pool_.insert(node_ids[i]);
-  }
-}
-
-namespace {
-
-TEST_F(SyncTabNodePoolTest, TabNodeIdIncreases) {
-  // max_used_tab_node_ always increases.
-  pool_.AddTabNode(10);
-  EXPECT_EQ(10, GetMaxUsedTabNodeId());
-  pool_.AddTabNode(5);
-  EXPECT_EQ(10, GetMaxUsedTabNodeId());
-  pool_.AddTabNode(1000);
-  EXPECT_EQ(1000, GetMaxUsedTabNodeId());
-  pool_.ReassociateTabNode(1000, 1);
-  pool_.ReassociateTabNode(5, 2);
-  pool_.ReassociateTabNode(10, 3);
-  // Freeing a tab node does not change max_used_tab_node_id_.
-  pool_.FreeTabNode(1000);
-  pool_.FreeTabNode(5);
-  pool_.FreeTabNode(10);
-  for (int i = 0; i < 3; ++i) {
-    pool_.AssociateTabNode(pool_.GetFreeTabNode(), i + 1);
-    EXPECT_EQ(1000, GetMaxUsedTabNodeId());
-  }
-
-  EXPECT_EQ(1000, GetMaxUsedTabNodeId());
-  EXPECT_TRUE(pool_.Empty());
-}
-
-TEST_F(SyncTabNodePoolTest, OldTabNodesAddAndRemove) {
-  // VerifyOldTabNodes are added.
-  pool_.AddTabNode(1);
-  pool_.AddTabNode(2);
-  EXPECT_EQ(2u, pool_.Capacity());
-  EXPECT_TRUE(pool_.Empty());
-  EXPECT_TRUE(pool_.IsUnassociatedTabNode(1));
-  EXPECT_TRUE(pool_.IsUnassociatedTabNode(2));
-  pool_.ReassociateTabNode(1, 2);
-  EXPECT_TRUE(pool_.Empty());
-  pool_.AssociateTabNode(2, 3);
-  EXPECT_FALSE(pool_.IsUnassociatedTabNode(1));
-  EXPECT_FALSE(pool_.IsUnassociatedTabNode(2));
-  pool_.FreeTabNode(2);
-  // 2 should be returned to free node pool_.
-  EXPECT_EQ(2u, pool_.Capacity());
-  // Should be able to free 1.
-  pool_.FreeTabNode(1);
-  EXPECT_FALSE(pool_.Empty());
-  EXPECT_TRUE(pool_.Full());
-  EXPECT_EQ(1, pool_.GetFreeTabNode());
-  pool_.AssociateTabNode(1, 1);
-  EXPECT_EQ(2, pool_.GetFreeTabNode());
-  pool_.AssociateTabNode(2, 1);
-  EXPECT_TRUE(pool_.Empty());
-  EXPECT_FALSE(pool_.Full());
-}
-
-TEST_F(SyncTabNodePoolTest, OldTabNodesReassociation) {
-  // VerifyOldTabNodes are reassociated correctly.
-  pool_.AddTabNode(4);
-  pool_.AddTabNode(5);
-  pool_.AddTabNode(6);
-  EXPECT_EQ(3u, pool_.Capacity());
-  EXPECT_TRUE(pool_.Empty());
-  EXPECT_TRUE(pool_.IsUnassociatedTabNode(4));
-  pool_.ReassociateTabNode(4, 5);
-  pool_.AssociateTabNode(5, 6);
-  pool_.AssociateTabNode(6, 7);
-  // Free 5 and 6.
-  pool_.FreeTabNode(5);
-  pool_.FreeTabNode(6);
-  // 5 and 6 nodes should not be unassociated.
-  EXPECT_FALSE(pool_.IsUnassociatedTabNode(5));
-  EXPECT_FALSE(pool_.IsUnassociatedTabNode(6));
-  // Free node pool should have 5 and 6.
-  EXPECT_FALSE(pool_.Empty());
-  EXPECT_EQ(3u, pool_.Capacity());
-
-  // Free all nodes
-  pool_.FreeTabNode(4);
-  EXPECT_TRUE(pool_.Full());
-  std::set<int> free_sync_ids;
-  for (int i = 0; i < 3; ++i) {
-    free_sync_ids.insert(pool_.GetFreeTabNode());
-    // GetFreeTabNode will return the same value till the node is
-    // reassociated.
-    pool_.AssociateTabNode(pool_.GetFreeTabNode(), i + 1);
-  }
-
-  EXPECT_TRUE(pool_.Empty());
-  EXPECT_EQ(3u, free_sync_ids.size());
-  EXPECT_EQ(1u, free_sync_ids.count(4));
-  EXPECT_EQ(1u, free_sync_ids.count(5));
-  EXPECT_EQ(1u, free_sync_ids.count(6));
-}
-
-TEST_F(SyncTabNodePoolTest, Init) {
-  EXPECT_TRUE(pool_.Empty());
-  EXPECT_TRUE(pool_.Full());
-}
-
-TEST_F(SyncTabNodePoolTest, AddGet) {
-  int free_nodes[] = {5, 10};
-  AddFreeTabNodes(2, free_nodes);
-  EXPECT_FALSE(pool_.Empty());
-  EXPECT_TRUE(pool_.Full());
-  EXPECT_EQ(2U, pool_.Capacity());
-  EXPECT_EQ(5, pool_.GetFreeTabNode());
-  pool_.AssociateTabNode(5, 1);
-  EXPECT_FALSE(pool_.Empty());
-  EXPECT_FALSE(pool_.Full());
-  EXPECT_EQ(2U, pool_.Capacity());
-  // 5 is now used, should return 10.
-  EXPECT_EQ(10, pool_.GetFreeTabNode());
-}
-
-TEST_F(SyncTabNodePoolTest, All) {
-  EXPECT_TRUE(pool_.Empty());
-  EXPECT_TRUE(pool_.Full());
-  EXPECT_EQ(0U, pool_.Capacity());
-  int free_nodes[] = {5, 10};
-  AddFreeTabNodes(2, free_nodes);
-  EXPECT_FALSE(pool_.Empty());
-  EXPECT_TRUE(pool_.Full());
-  EXPECT_EQ(2U, pool_.Capacity());
-  // GetFreeTabNode returns the lowest numbered free node.
-  EXPECT_EQ(5, pool_.GetFreeTabNode());
-  EXPECT_FALSE(pool_.Empty());
-  EXPECT_TRUE(pool_.Full());
-  EXPECT_EQ(2U, pool_.Capacity());
-  // Associate 5, next free node should be 10.
-  pool_.AssociateTabNode(5, 1);
-  EXPECT_EQ(10, pool_.GetFreeTabNode());
-  pool_.AssociateTabNode(10, 2);
-  EXPECT_TRUE(pool_.Empty());
-  EXPECT_FALSE(pool_.Full());
-  EXPECT_EQ(2U, pool_.Capacity());
-  // Release them in reverse order.
-  pool_.FreeTabNode(10);
-  pool_.FreeTabNode(5);
-  EXPECT_EQ(2U, pool_.Capacity());
-  EXPECT_FALSE(pool_.Empty());
-  EXPECT_TRUE(pool_.Full());
-  EXPECT_EQ(5, pool_.GetFreeTabNode());
-  EXPECT_FALSE(pool_.Empty());
-  EXPECT_TRUE(pool_.Full());
-  EXPECT_EQ(2U, pool_.Capacity());
-  EXPECT_FALSE(pool_.Empty());
-  EXPECT_TRUE(pool_.Full());
-  pool_.AssociateTabNode(5, 1);
-  EXPECT_EQ(2U, pool_.Capacity());
-  EXPECT_EQ(10, pool_.GetFreeTabNode());
-  pool_.AssociateTabNode(10, 2);
-  EXPECT_TRUE(pool_.Empty());
-  EXPECT_FALSE(pool_.Full());
-  EXPECT_EQ(2U, pool_.Capacity());
-  // Release them again.
-  pool_.FreeTabNode(10);
-  pool_.FreeTabNode(5);
-  EXPECT_FALSE(pool_.Empty());
-  EXPECT_TRUE(pool_.Full());
-  EXPECT_EQ(2U, pool_.Capacity());
-  pool_.Clear();
-  EXPECT_TRUE(pool_.Empty());
-  EXPECT_TRUE(pool_.Full());
-  EXPECT_EQ(0U, pool_.Capacity());
-}
-
-}  // namespace
-
-}  // namespace browser_sync
diff --git a/chrome/browser/sync/glue/typed_url_change_processor.cc b/chrome/browser/sync/glue/typed_url_change_processor.cc
index 82c0617..75f7930 100644
--- a/chrome/browser/sync/glue/typed_url_change_processor.cc
+++ b/chrome/browser/sync/glue/typed_url_change_processor.cc
@@ -174,7 +174,7 @@
       return false;
     }
 
-    create_node.SetTitle(base::UTF8ToWide(tag));
+    create_node.SetTitle(tag);
     model_associator_->WriteToSyncNode(url, visit_vector, &create_node);
   }
   return true;
@@ -336,9 +336,8 @@
   disconnected_ = true;
 }
 
-void TypedUrlChangeProcessor::StartImpl(Profile* profile) {
+void TypedUrlChangeProcessor::StartImpl() {
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  DCHECK_EQ(profile, profile_);
   DCHECK(history_backend_);
   DCHECK(backend_loop_);
   backend_loop_->PostTask(FROM_HERE,
diff --git a/chrome/browser/sync/glue/typed_url_change_processor.h b/chrome/browser/sync/glue/typed_url_change_processor.h
index f86406c..0d2bbd1 100644
--- a/chrome/browser/sync/glue/typed_url_change_processor.h
+++ b/chrome/browser/sync/glue/typed_url_change_processor.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_BROWSER_SYNC_GLUE_TYPED_URL_CHANGE_PROCESSOR_H_
 #define CHROME_BROWSER_SYNC_GLUE_TYPED_URL_CHANGE_PROCESSOR_H_
 
-#include "chrome/browser/sync/glue/change_processor.h"
+#include "components/sync_driver/change_processor.h"
 
 #include "base/basictypes.h"
 #include "base/compiler_specific.h"
@@ -71,7 +71,7 @@
   void Disconnect();
 
  protected:
-  virtual void StartImpl(Profile* profile) OVERRIDE;
+  virtual void StartImpl() OVERRIDE;
 
  private:
   friend class ScopedStopObserving<TypedUrlChangeProcessor>;
diff --git a/chrome/browser/sync/glue/typed_url_model_associator.cc b/chrome/browser/sync/glue/typed_url_model_associator.cc
index adfdbf6..1a0503e 100644
--- a/chrome/browser/sync/glue/typed_url_model_associator.cc
+++ b/chrome/browser/sync/glue/typed_url_model_associator.cc
@@ -305,7 +305,7 @@
               model_type());
         }
 
-        node.SetTitle(base::UTF8ToWide(tag));
+        node.SetTitle(tag);
         WriteToSyncNode(*ix, visits, &node);
       }
 
diff --git a/chrome/browser/sync/glue/ui_data_type_controller_unittest.cc b/chrome/browser/sync/glue/ui_data_type_controller_unittest.cc
index 538aeb4..6026101 100644
--- a/chrome/browser/sync/glue/ui_data_type_controller_unittest.cc
+++ b/chrome/browser/sync/glue/ui_data_type_controller_unittest.cc
@@ -8,11 +8,11 @@
 #include "base/memory/scoped_ptr.h"
 #include "base/message_loop/message_loop.h"
 #include "base/tracked_objects.h"
-#include "chrome/browser/sync/glue/fake_generic_change_processor.h"
 #include "chrome/browser/sync/profile_sync_components_factory_mock.h"
 #include "chrome/browser/sync/profile_sync_service_mock.h"
 #include "chrome/test/base/profile_mock.h"
 #include "components/sync_driver/data_type_controller_mock.h"
+#include "components/sync_driver/fake_generic_change_processor.h"
 #include "content/public/test/test_browser_thread.h"
 #include "sync/api/fake_syncable_service.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/sync/profile_sync_components_factory.h b/chrome/browser/sync/profile_sync_components_factory.h
index 3212f11..bf26671 100644
--- a/chrome/browser/sync/profile_sync_components_factory.h
+++ b/chrome/browser/sync/profile_sync_components_factory.h
@@ -10,6 +10,7 @@
 #include "base/memory/weak_ptr.h"
 #include "components/sync_driver/data_type_controller.h"
 #include "components/sync_driver/data_type_error_handler.h"
+#include "components/sync_driver/sync_api_component_factory.h"
 #include "sync/api/sync_merge_result.h"
 #include "sync/internal_api/public/util/unrecoverable_error_handler.h"
 #include "sync/internal_api/public/util/weak_handle.h"
@@ -46,7 +47,8 @@
 }
 
 // Factory class for all profile sync related classes.
-class ProfileSyncComponentsFactory {
+class ProfileSyncComponentsFactory
+    : public browser_sync::SyncApiComponentFactory {
  public:
   // The various factory methods for the data type model associators
   // and change processors all return this struct.  This is needed
@@ -103,12 +105,6 @@
   virtual browser_sync::SharedChangeProcessor*
       CreateSharedChangeProcessor() = 0;
 
-  // Returns a weak pointer to the syncable service specified by |type|.
-  // Weak pointer may be unset if service is already destroyed.
-  // Note: Should only be called on the same thread on which a datatype resides.
-  virtual base::WeakPtr<syncer::SyncableService> GetSyncableServiceForType(
-      syncer::ModelType type) = 0;
-
   // Legacy datatypes that need to be converted to the SyncableService API.
   virtual SyncComponents CreateBookmarkSyncComponents(
       ProfileSyncService* profile_sync_service,
@@ -117,9 +113,6 @@
       ProfileSyncService* profile_sync_service,
       history::HistoryBackend* history_backend,
       browser_sync::DataTypeErrorHandler* error_handler) = 0;
-  virtual SyncComponents CreateSessionSyncComponents(
-      ProfileSyncService* profile_sync_service,
-      browser_sync::DataTypeErrorHandler* error_handler) = 0;
 };
 
 #endif  // CHROME_BROWSER_SYNC_PROFILE_SYNC_COMPONENTS_FACTORY_H__
diff --git a/chrome/browser/sync/profile_sync_components_factory_impl.cc b/chrome/browser/sync/profile_sync_components_factory_impl.cc
index 1c0389f..25271d2 100644
--- a/chrome/browser/sync/profile_sync_components_factory_impl.cc
+++ b/chrome/browser/sync/profile_sync_components_factory_impl.cc
@@ -26,12 +26,8 @@
 #include "chrome/browser/sync/glue/data_type_manager_impl.h"
 #include "chrome/browser/sync/glue/extension_data_type_controller.h"
 #include "chrome/browser/sync/glue/extension_setting_data_type_controller.h"
-#include "chrome/browser/sync/glue/generic_change_processor.h"
 #include "chrome/browser/sync/glue/password_data_type_controller.h"
 #include "chrome/browser/sync/glue/search_engine_data_type_controller.h"
-#include "chrome/browser/sync/glue/session_change_processor.h"
-#include "chrome/browser/sync/glue/session_data_type_controller.h"
-#include "chrome/browser/sync/glue/session_model_associator.h"
 #include "chrome/browser/sync/glue/shared_change_processor.h"
 #include "chrome/browser/sync/glue/sync_backend_host.h"
 #include "chrome/browser/sync/glue/sync_backend_host_impl.h"
@@ -43,7 +39,7 @@
 #include "chrome/browser/sync/profile_sync_components_factory_impl.h"
 #include "chrome/browser/sync/profile_sync_service.h"
 #include "chrome/browser/sync/profile_sync_service_factory.h"
-#include "chrome/browser/sync/sessions2/session_data_type_controller2.h"
+#include "chrome/browser/sync/sessions/session_data_type_controller.h"
 #include "chrome/browser/themes/theme_service.h"
 #include "chrome/browser/themes/theme_service_factory.h"
 #include "chrome/browser/themes/theme_syncable_service.h"
@@ -58,6 +54,7 @@
 #include "components/password_manager/core/browser/password_store.h"
 #include "components/signin/core/browser/signin_manager.h"
 #include "components/sync_driver/data_type_manager_observer.h"
+#include "components/sync_driver/generic_change_processor.h"
 #include "components/sync_driver/proxy_data_type_controller.h"
 #include "content/public/browser/browser_thread.h"
 #include "extensions/browser/extension_system.h"
@@ -115,10 +112,7 @@
 using browser_sync::PasswordDataTypeController;
 using browser_sync::ProxyDataTypeController;
 using browser_sync::SearchEngineDataTypeController;
-using browser_sync::SessionChangeProcessor;
 using browser_sync::SessionDataTypeController;
-using browser_sync::SessionDataTypeController2;
-using browser_sync::SessionModelAssociator;
 using browser_sync::SharedChangeProcessor;
 using browser_sync::SyncBackendHost;
 using browser_sync::ThemeDataTypeController;
@@ -216,7 +210,7 @@
          BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI),
          syncer::PROXY_TABS));
     pss->RegisterDataTypeController(
-        new SessionDataTypeController2(this, profile_, pss));
+        new SessionDataTypeController(this, profile_, pss));
   }
 
   // Favicon sync is enabled by default. Register unless explicitly disabled.
@@ -388,8 +382,13 @@
               profile_,
               pss));
 
-    // Synced Notification App Infos are disabled by default.
-    if (command_line_->HasSwitch(switches::kEnableSyncSyncedNotifications)) {
+    // Synced Notification App Infos are enabled by default on Dev and Canary
+    // only.
+    // TODO(petewil): Enable on stable when the feature is ready.
+    chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel();
+    if (channel == chrome::VersionInfo::CHANNEL_UNKNOWN ||
+        channel == chrome::VersionInfo::CHANNEL_DEV ||
+        channel == chrome::VersionInfo::CHANNEL_CANARY) {
       pss->RegisterDataTypeController(new UIDataTypeController(
           BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI),
           base::Bind(&ChromeReportUnrecoverableError),
@@ -446,13 +445,16 @@
         const base::WeakPtr<syncer::SyncableService>& local_service,
         const base::WeakPtr<syncer::SyncMergeResult>& merge_result) {
   syncer::UserShare* user_share = profile_sync_service->GetUserShare();
-  // TODO(maniscalco): Replace FakeAttachmentService with a real
-  // AttachmentService implementation once it has been implemented (bug 356359).
-  scoped_ptr<syncer::AttachmentStore> attachment_store(
-      new syncer::FakeAttachmentStore(
-          BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO)));
+
   scoped_ptr<syncer::AttachmentService> attachment_service(
-      new syncer::FakeAttachmentService(attachment_store.Pass()));
+      // TODO(tim): Bug 339726. Remove merge_result->model_type hack! This
+      // method (CreateGenericChangeProcessor) will cease to exist in favor
+      // of a new SharedChangeProcessor::Connect, at which point we'll know
+      // the data type.
+      // TODO(maniscalco): Replace FakeAttachmentService with a real
+      // AttachmentService implementation once implemented (bug 356359).
+      new syncer::FakeAttachmentService(
+          CreateCustomAttachmentStoreForType(merge_result->model_type())));
   return new GenericChangeProcessor(
       error_handler,
       local_service,
@@ -567,7 +569,6 @@
       return base::WeakPtr<syncer::SyncableService>();
     }
     case syncer::SESSIONS: {
-      DCHECK(!command_line_->HasSwitch(switches::kDisableSyncSessionsV2));
       return ProfileSyncServiceFactory::GetForProfile(profile_)->
           GetSessionsSyncableService()->AsWeakPtr();
     }
@@ -592,6 +593,15 @@
   }
 }
 
+scoped_ptr<syncer::AttachmentStore>
+    ProfileSyncComponentsFactoryImpl::CreateCustomAttachmentStoreForType(
+    syncer::ModelType type) {
+  scoped_ptr<syncer::AttachmentStore> store(
+      new syncer::FakeAttachmentStore(
+          BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO)));
+  return store.Pass();
+}
+
 ProfileSyncComponentsFactory::SyncComponents
     ProfileSyncComponentsFactoryImpl::CreateBookmarkSyncComponents(
         ProfileSyncService* profile_sync_service,
@@ -612,7 +622,8 @@
                                   error_handler,
                                   kExpectMobileBookmarksFolder);
   BookmarkChangeProcessor* change_processor =
-      new BookmarkChangeProcessor(model_associator,
+      new BookmarkChangeProcessor(profile_sync_service->profile(),
+                                  model_associator,
                                   error_handler);
   return SyncComponents(model_associator, change_processor);
 }
@@ -633,14 +644,3 @@
                                   error_handler);
   return SyncComponents(model_associator, change_processor);
 }
-
-ProfileSyncComponentsFactory::SyncComponents
-    ProfileSyncComponentsFactoryImpl::CreateSessionSyncComponents(
-       ProfileSyncService* profile_sync_service,
-        DataTypeErrorHandler* error_handler) {
-  SessionModelAssociator* model_associator =
-      new SessionModelAssociator(profile_sync_service, error_handler);
-  SessionChangeProcessor* change_processor =
-      new SessionChangeProcessor(error_handler, model_associator);
-  return SyncComponents(model_associator, change_processor);
-}
diff --git a/chrome/browser/sync/profile_sync_components_factory_impl.h b/chrome/browser/sync/profile_sync_components_factory_impl.h
index 31f8f5b..8274015 100644
--- a/chrome/browser/sync/profile_sync_components_factory_impl.h
+++ b/chrome/browser/sync/profile_sync_components_factory_impl.h
@@ -56,6 +56,8 @@
 
   virtual base::WeakPtr<syncer::SyncableService> GetSyncableServiceForType(
       syncer::ModelType type) OVERRIDE;
+  virtual scoped_ptr<syncer::AttachmentStore>
+      CreateCustomAttachmentStoreForType(syncer::ModelType type) OVERRIDE;
 
   // Legacy datatypes that need to be converted to the SyncableService API.
   virtual SyncComponents CreateBookmarkSyncComponents(
@@ -65,9 +67,6 @@
       ProfileSyncService* profile_sync_service,
       history::HistoryBackend* history_backend,
       browser_sync::DataTypeErrorHandler* error_handler) OVERRIDE;
-  virtual SyncComponents CreateSessionSyncComponents(
-      ProfileSyncService* profile_sync_service,
-      browser_sync::DataTypeErrorHandler* error_handler) OVERRIDE;
 
  private:
   // Register data types which are enabled on desktop platforms only.
diff --git a/chrome/browser/sync/profile_sync_components_factory_impl_unittest.cc b/chrome/browser/sync/profile_sync_components_factory_impl_unittest.cc
index a476ebc..22fae81 100644
--- a/chrome/browser/sync/profile_sync_components_factory_impl_unittest.cc
+++ b/chrome/browser/sync/profile_sync_components_factory_impl_unittest.cc
@@ -63,6 +63,13 @@
     datatypes.push_back(syncer::FAVICON_TRACKING);
     datatypes.push_back(syncer::FAVICON_IMAGES);
     datatypes.push_back(syncer::SYNCED_NOTIFICATIONS);
+    // TODO(petewil): Enable on stable when the feature is ready.
+    chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel();
+    if (channel == chrome::VersionInfo::CHANNEL_UNKNOWN ||
+        channel == chrome::VersionInfo::CHANNEL_DEV ||
+        channel == chrome::VersionInfo::CHANNEL_CANARY) {
+      datatypes.push_back(syncer::SYNCED_NOTIFICATION_APP_INFO);
+    }
     datatypes.push_back(syncer::MANAGED_USERS);
     datatypes.push_back(syncer::MANAGED_USER_SHARED_SETTINGS);
 
diff --git a/chrome/browser/sync/profile_sync_components_factory_mock.cc b/chrome/browser/sync/profile_sync_components_factory_mock.cc
index 10ca3fce..9ff2672 100644
--- a/chrome/browser/sync/profile_sync_components_factory_mock.cc
+++ b/chrome/browser/sync/profile_sync_components_factory_mock.cc
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/sync/glue/change_processor.h"
 #include "chrome/browser/sync/profile_sync_components_factory_mock.h"
+#include "components/sync_driver/change_processor.h"
 #include "components/sync_driver/model_associator.h"
 
 using browser_sync::AssociatorInterface;
@@ -26,6 +26,12 @@
 
 ProfileSyncComponentsFactoryMock::~ProfileSyncComponentsFactoryMock() {}
 
+scoped_ptr<syncer::AttachmentStore>
+    ProfileSyncComponentsFactoryMock::CreateCustomAttachmentStoreForType(
+        syncer::ModelType type) {
+  return make_scoped_ptr(CreateCustomAttachmentStoreForTypeMock(type));
+}
+
 ProfileSyncComponentsFactory::SyncComponents
     ProfileSyncComponentsFactoryMock::MakeSyncComponents() {
   return SyncComponents(model_associator_.release(),
diff --git a/chrome/browser/sync/profile_sync_components_factory_mock.h b/chrome/browser/sync/profile_sync_components_factory_mock.h
index 11e9cb4..85e48a6 100644
--- a/chrome/browser/sync/profile_sync_components_factory_mock.h
+++ b/chrome/browser/sync/profile_sync_components_factory_mock.h
@@ -52,12 +52,13 @@
       browser_sync::SharedChangeProcessor*());
   MOCK_METHOD1(GetSyncableServiceForType,
                base::WeakPtr<syncer::SyncableService>(syncer::ModelType));
+  MOCK_METHOD1(CreateCustomAttachmentStoreForTypeMock,
+               syncer::AttachmentStore*(syncer::ModelType));
+  virtual scoped_ptr<syncer::AttachmentStore>
+      CreateCustomAttachmentStoreForType(syncer::ModelType type) OVERRIDE;
   MOCK_METHOD2(CreateBookmarkSyncComponents,
       SyncComponents(ProfileSyncService* profile_sync_service,
                      browser_sync::DataTypeErrorHandler* error_handler));
-  MOCK_METHOD2(CreateSessionSyncComponents,
-      SyncComponents(ProfileSyncService* profile_sync_service,
-                     browser_sync::DataTypeErrorHandler* error_handler));
 #if defined(ENABLE_THEMES)
   MOCK_METHOD2(CreateThemeSyncComponents,
       SyncComponents(ProfileSyncService* profile_sync_service,
diff --git a/chrome/browser/sync/profile_sync_service.cc b/chrome/browser/sync/profile_sync_service.cc
index 6c368da..31cfd6c 100644
--- a/chrome/browser/sync/profile_sync_service.cc
+++ b/chrome/browser/sync/profile_sync_service.cc
@@ -35,12 +35,9 @@
 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
 #include "chrome/browser/signin/signin_manager_factory.h"
 #include "chrome/browser/sync/backend_migrator.h"
-#include "chrome/browser/sync/glue/change_processor.h"
 #include "chrome/browser/sync/glue/chrome_report_unrecoverable_error.h"
 #include "chrome/browser/sync/glue/device_info.h"
 #include "chrome/browser/sync/glue/favicon_cache.h"
-#include "chrome/browser/sync/glue/session_data_type_controller.h"
-#include "chrome/browser/sync/glue/session_model_associator.h"
 #include "chrome/browser/sync/glue/sync_backend_host.h"
 #include "chrome/browser/sync/glue/sync_backend_host_impl.h"
 #include "chrome/browser/sync/glue/sync_start_util.h"
@@ -48,8 +45,8 @@
 #include "chrome/browser/sync/glue/typed_url_data_type_controller.h"
 #include "chrome/browser/sync/managed_user_signin_manager_wrapper.h"
 #include "chrome/browser/sync/profile_sync_components_factory_impl.h"
-#include "chrome/browser/sync/sessions2/notification_service_sessions_router.h"
-#include "chrome/browser/sync/sessions2/sessions_sync_manager.h"
+#include "chrome/browser/sync/sessions/notification_service_sessions_router.h"
+#include "chrome/browser/sync/sessions/sessions_sync_manager.h"
 #include "chrome/browser/sync/sync_error_controller.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_list.h"
@@ -63,6 +60,7 @@
 #include "components/signin/core/browser/about_signin_internals.h"
 #include "components/signin/core/browser/profile_oauth2_token_service.h"
 #include "components/signin/core/browser/signin_manager.h"
+#include "components/sync_driver/change_processor.h"
 #include "components/sync_driver/data_type_controller.h"
 #include "components/sync_driver/pref_names.h"
 #include "components/sync_driver/system_encryptor.h"
@@ -212,15 +210,12 @@
     sync_service_url_ = GURL(kSyncServerUrl);
   }
 
-  if (!CommandLine::ForCurrentProcess()->HasSwitch(
-      switches::kDisableSyncSessionsV2)) {
-    syncer::SyncableService::StartSyncFlare flare(
-        sync_start_util::GetFlareForSyncableService(profile->GetPath()));
-    scoped_ptr<browser_sync::LocalSessionEventRouter> router(
-        new NotificationServiceSessionsRouter(profile, flare));
-    sessions_sync_manager_.reset(
-        new SessionsSyncManager(profile, this, router.Pass()));
-  }
+  syncer::SyncableService::StartSyncFlare flare(
+      sync_start_util::GetFlareForSyncableService(profile->GetPath()));
+  scoped_ptr<browser_sync::LocalSessionEventRouter> router(
+      new NotificationServiceSessionsRouter(profile, flare));
+  sessions_sync_manager_.reset(
+      new SessionsSyncManager(profile, this, router.Pass()));
 }
 
 ProfileSyncService::~ProfileSyncService() {
@@ -357,20 +352,6 @@
   non_blocking_types_.Put(type);
 }
 
-browser_sync::SessionModelAssociator*
-    ProfileSyncService::GetSessionModelAssociatorDeprecated() {
-  if (!IsSessionsDataTypeControllerRunning())
-    return NULL;
-
-  // If we're using sessions V2, there's no model associator.
-  if (sessions_sync_manager_.get())
-    return NULL;
-
-  return static_cast<browser_sync::SessionDataTypeController*>(
-      data_type_controllers_.find(
-      syncer::SESSIONS)->second.get())->GetModelAssociator();
-}
-
 bool ProfileSyncService::IsSessionsDataTypeControllerRunning() const {
   return data_type_controllers_.find(syncer::SESSIONS) !=
       data_type_controllers_.end() &&
@@ -381,26 +362,11 @@
 browser_sync::OpenTabsUIDelegate* ProfileSyncService::GetOpenTabsUIDelegate() {
   if (!IsSessionsDataTypeControllerRunning())
     return NULL;
-
-  if (!CommandLine::ForCurrentProcess()->HasSwitch(
-      switches::kDisableSyncSessionsV2)) {
-    return sessions_sync_manager_.get();
-  } else {
-    return GetSessionModelAssociatorDeprecated();
-  }
+  return sessions_sync_manager_.get();
 }
 
 browser_sync::FaviconCache* ProfileSyncService::GetFaviconCache() {
-  // TODO(tim): Clean this up (or remove) once there's only one implementation.
-  // Bug 98892.
-  if (!CommandLine::ForCurrentProcess()->HasSwitch(
-      switches::kDisableSyncSessionsV2)) {
-    return sessions_sync_manager_->GetFaviconCache();
-  } else if (GetSessionModelAssociatorDeprecated()) {
-    return GetSessionModelAssociatorDeprecated()->GetFaviconCache();
-  } else {
-    return NULL;
-  }
+  return sessions_sync_manager_->GetFaviconCache();
 }
 
 scoped_ptr<browser_sync::DeviceInfo>
@@ -983,16 +949,9 @@
   if (IsSessionsDataTypeControllerRunning()) {
     // Trigger garbage collection of old sessions now that we've downloaded
     // any new session data.
-    if (sessions_sync_manager_) {
-      // Sessions V2.
-      base::MessageLoop::current()->PostTask(FROM_HERE, base::Bind(
-          &browser_sync::SessionsSyncManager::DoGarbageCollection,
-              base::AsWeakPtr(sessions_sync_manager_.get())));
-    } else {
-      base::MessageLoop::current()->PostTask(FROM_HERE, base::Bind(
-          &browser_sync::SessionModelAssociator::DeleteStaleSessions,
-              GetSessionModelAssociatorDeprecated()->AsWeakPtr()));
-    }
+    base::MessageLoop::current()->PostTask(FROM_HERE, base::Bind(
+        &browser_sync::SessionsSyncManager::DoGarbageCollection,
+            base::AsWeakPtr(sessions_sync_manager_.get())));
   }
   DVLOG(2) << "Notifying observers sync cycle completed";
   NotifySyncCycleCompleted();
diff --git a/chrome/browser/sync/profile_sync_service.h b/chrome/browser/sync/profile_sync_service.h
index 12aa4b0..737c802 100644
--- a/chrome/browser/sync/profile_sync_service.h
+++ b/chrome/browser/sync/profile_sync_service.h
@@ -26,7 +26,7 @@
 #include "chrome/browser/sync/profile_sync_service_base.h"
 #include "chrome/browser/sync/profile_sync_service_observer.h"
 #include "chrome/browser/sync/protocol_event_observer.h"
-#include "chrome/browser/sync/sessions2/sessions_sync_manager.h"
+#include "chrome/browser/sync/sessions/sessions_sync_manager.h"
 #include "chrome/browser/sync/startup_controller.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "components/signin/core/browser/signin_manager_base.h"
@@ -62,7 +62,6 @@
 class FaviconCache;
 class JsController;
 class OpenTabsUIDelegate;
-class SessionModelAssociator;
 
 namespace sessions {
 class SyncSessionSnapshot;
@@ -315,17 +314,6 @@
   // the syncing of this type
   void RegisterNonBlockingType(syncer::ModelType type);
 
-  // Returns the session model associator associated with this type, but only if
-  // the associator is running.  If it is doing anything else, it will return
-  // null.
-  //
-  // *** DONT USE THIS ANYMORE! ***
-  // If you think you want to use this, think again! Can you use
-  // GetOpenTabsUIDelegate instead?
-  // TODO(tim): Remove this method.
-  virtual browser_sync::SessionModelAssociator*
-      GetSessionModelAssociatorDeprecated();
-
   // Return the active OpenTabsUIDelegate. If sessions is not enabled or not
   // currently syncing, returns NULL.
   virtual browser_sync::OpenTabsUIDelegate* GetOpenTabsUIDelegate();
diff --git a/chrome/browser/sync/profile_sync_service_android.h b/chrome/browser/sync/profile_sync_service_android.h
index 92451cd..72f9fc5 100644
--- a/chrome/browser/sync/profile_sync_service_android.h
+++ b/chrome/browser/sync/profile_sync_service_android.h
@@ -8,7 +8,7 @@
 #include <jni.h>
 #include <map>
 
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/callback.h"
 #include "base/compiler_specific.h"
 #include "base/time/time.h"
diff --git a/chrome/browser/sync/profile_sync_service_autofill_unittest.cc b/chrome/browser/sync/profile_sync_service_autofill_unittest.cc
index 36fc34a..b05302f8 100644
--- a/chrome/browser/sync/profile_sync_service_autofill_unittest.cc
+++ b/chrome/browser/sync/profile_sync_service_autofill_unittest.cc
@@ -30,7 +30,6 @@
 #include "chrome/browser/sync/abstract_profile_sync_service_test.h"
 #include "chrome/browser/sync/glue/autofill_data_type_controller.h"
 #include "chrome/browser/sync/glue/autofill_profile_data_type_controller.h"
-#include "chrome/browser/sync/glue/generic_change_processor.h"
 #include "chrome/browser/sync/glue/shared_change_processor.h"
 #include "chrome/browser/sync/profile_sync_components_factory.h"
 #include "chrome/browser/sync/profile_sync_service.h"
@@ -51,6 +50,7 @@
 #include "components/autofill/core/browser/webdata/autofill_webdata_service.h"
 #include "components/signin/core/browser/signin_manager.h"
 #include "components/sync_driver/data_type_controller.h"
+#include "components/sync_driver/generic_change_processor.h"
 #include "components/webdata/common/web_data_service_test_util.h"
 #include "components/webdata/common/web_database.h"
 #include "content/public/test/test_browser_thread.h"
diff --git a/chrome/browser/sync/profile_sync_service_bookmark_unittest.cc b/chrome/browser/sync/profile_sync_service_bookmark_unittest.cc
index 1a57075..fca3797 100644
--- a/chrome/browser/sync/profile_sync_service_bookmark_unittest.cc
+++ b/chrome/browser/sync/profile_sync_service_bookmark_unittest.cc
@@ -74,7 +74,7 @@
   }
 
   // Pretend that the server told the syncer to add a bookmark object.
-  int64 AddWithMetaInfo(const std::wstring& title,
+  int64 AddWithMetaInfo(const std::string& title,
                         const std::string& url,
                         const BookmarkNode::MetaInfoMap* meta_info_map,
                         bool is_folder,
@@ -110,7 +110,7 @@
     return node.GetId();
   }
 
-  int64 Add(const std::wstring& title,
+  int64 Add(const std::string& title,
             const std::string& url,
             bool is_folder,
             int64 parent_id,
@@ -120,12 +120,12 @@
   }
 
   // Add a bookmark folder.
-  int64 AddFolder(const std::wstring& title,
+  int64 AddFolder(const std::string& title,
                   int64 parent_id,
                   int64 predecessor_id) {
     return Add(title, std::string(), true, parent_id, predecessor_id);
   }
-  int64 AddFolderWithMetaInfo(const std::wstring& title,
+  int64 AddFolderWithMetaInfo(const std::string& title,
                               const BookmarkNode::MetaInfoMap* meta_info_map,
                               int64 parent_id,
                               int64 predecessor_id) {
@@ -134,13 +134,13 @@
   }
 
   // Add a bookmark.
-  int64 AddURL(const std::wstring& title,
+  int64 AddURL(const std::string& title,
                const std::string& url,
                int64 parent_id,
                int64 predecessor_id) {
     return Add(title, url, false, parent_id, predecessor_id);
   }
-  int64 AddURLWithMetaInfo(const std::wstring& title,
+  int64 AddURLWithMetaInfo(const std::string& title,
                            const std::string& url,
                            const BookmarkNode::MetaInfoMap* meta_info_map,
                            int64 parent_id,
@@ -178,13 +178,13 @@
   }
 
   // Set a new title value, and return the old value.
-  std::wstring ModifyTitle(int64 id, const std::wstring& new_title) {
+  std::string ModifyTitle(int64 id, const std::string& new_title) {
     syncer::WriteNode node(trans_);
     EXPECT_EQ(BaseNode::INIT_OK, node.InitByIdLookup(id));
     std::string old_title = node.GetTitle();
     node.SetTitle(new_title);
     SetModified(id);
-    return base::UTF8ToWide(old_title);
+    return old_title;
   }
 
   // Set a new parent and predecessor value.  Return the old parent id.
@@ -355,7 +355,7 @@
     syncer::WriteNode node(trans);
     EXPECT_TRUE(node.InitBookmarkByCreation(bookmark_bar, NULL));
     node.SetIsFolder(true);
-    node.SetTitle(base::ASCIIToWide(title));
+    node.SetTitle(title);
 
     return node.GetId();
   }
@@ -383,7 +383,7 @@
     syncer::WriteNode node(trans);
     EXPECT_TRUE(node.InitBookmarkByCreation(parent, NULL));
     node.SetIsFolder(false);
-    node.SetTitle(base::ASCIIToWide(title));
+    node.SetTitle(title);
     node.SetBookmarkSpecifics(specifics);
 
     return node.GetId();
@@ -469,7 +469,7 @@
         return false;
       node.SetIsFolder(true);
       node.GetMutableEntryForTest()->PutUniqueServerTag(permanent_tags[i]);
-      node.SetTitle(base::UTF8ToWide(permanent_tags[i]));
+      node.SetTitle(permanent_tags[i]);
       node.SetExternalId(0);
       last_child_id = node.GetId();
     }
@@ -528,9 +528,10 @@
 
     // Set up change processor.
     change_processor_.reset(
-        new BookmarkChangeProcessor(model_associator_.get(),
+        new BookmarkChangeProcessor(&profile_,
+                                    model_associator_.get(),
                                     &mock_error_handler_));
-    change_processor_->Start(&profile_, test_user_share_.user_share());
+    change_processor_->Start(test_user_share_.user_share());
   }
 
   void StopSync() {
@@ -656,11 +657,11 @@
     EXPECT_EQ(sync_id, syncer::kInvalidId);
   }
 
-  void ExpectBrowserNodeTitle(int64 sync_id, const std::wstring& title) {
+  void ExpectBrowserNodeTitle(int64 sync_id, const std::string& title) {
     const BookmarkNode* bnode =
         model_associator_->GetChromeNodeFromSyncId(sync_id);
     ASSERT_TRUE(bnode);
-    EXPECT_EQ(bnode->GetTitle(), base::WideToUTF16Hack(title));
+    EXPECT_EQ(bnode->GetTitle(), base::UTF8ToUTF16(title));
   }
 
   void ExpectBrowserNodeURL(int64 sync_id, const std::string& url) {
@@ -855,15 +856,15 @@
   syncer::WriteTransaction trans(FROM_HERE, test_user_share_.user_share());
 
   FakeServerChange adds(&trans);
-  int64 f1 = adds.AddFolder(L"Server Folder B", bookmark_bar_id(), 0);
-  int64 f2 = adds.AddFolder(L"Server Folder A", bookmark_bar_id(), f1);
-  int64 u1 = adds.AddURL(L"Some old site", "ftp://nifty.andrew.cmu.edu/",
+  int64 f1 = adds.AddFolder("Server Folder B", bookmark_bar_id(), 0);
+  int64 f2 = adds.AddFolder("Server Folder A", bookmark_bar_id(), f1);
+  int64 u1 = adds.AddURL("Some old site", "ftp://nifty.andrew.cmu.edu/",
                          bookmark_bar_id(), f2);
-  int64 u2 = adds.AddURL(L"Nifty", "ftp://nifty.andrew.cmu.edu/", f1, 0);
+  int64 u2 = adds.AddURL("Nifty", "ftp://nifty.andrew.cmu.edu/", f1, 0);
   // u3 is a duplicate URL
-  int64 u3 = adds.AddURL(L"Nifty2", "ftp://nifty.andrew.cmu.edu/", f1, u2);
+  int64 u3 = adds.AddURL("Nifty2", "ftp://nifty.andrew.cmu.edu/", f1, u2);
   // u4 is a duplicate title, different URL.
-  adds.AddURL(L"Some old site", "http://slog.thestranger.com/",
+  adds.AddURL("Some old site", "http://slog.thestranger.com/",
               bookmark_bar_id(), u1);
   // u5 tests an empty-string title.
   std::string javascript_url(
@@ -871,9 +872,9 @@
       "'about:blank','gnotesWin','location=0,menubar=0," \
       "scrollbars=0,status=0,toolbar=0,width=300," \
       "height=300,resizable');});");
-  adds.AddURL(std::wstring(), javascript_url, other_bookmarks_id(), 0);
+  adds.AddURL(std::string(), javascript_url, other_bookmarks_id(), 0);
   int64 u6 = adds.AddURL(
-      L"Sync1", "http://www.syncable.edu/", mobile_bookmarks_id(), 0);
+      "Sync1", "http://www.syncable.edu/", mobile_bookmarks_id(), 0);
 
   syncer::ChangeRecordList::const_iterator it;
   // The bookmark model shouldn't yet have seen any of the nodes of |adds|.
@@ -891,18 +892,18 @@
   FakeServerChange mods(&trans);
   // Mess with u2, and move it into empty folder f2
   // TODO(ncarter): Determine if we allow ModifyURL ops or not.
-  /* std::wstring u2_old_url = mods.ModifyURL(u2, L"http://www.google.com"); */
-  std::wstring u2_old_title = mods.ModifyTitle(u2, L"The Google");
+  /* std::string u2_old_url = mods.ModifyURL(u2, "http://www.google.com"); */
+  std::string u2_old_title = mods.ModifyTitle(u2, "The Google");
   int64 u2_old_parent = mods.ModifyPosition(u2, f2, 0);
 
   // Now move f1 after u2.
-  std::wstring f1_old_title = mods.ModifyTitle(f1, L"Server Folder C");
+  std::string f1_old_title = mods.ModifyTitle(f1, "Server Folder C");
   int64 f1_old_parent = mods.ModifyPosition(f1, f2, u2);
 
   // Then add u3 after f1.
   int64 u3_old_parent = mods.ModifyPosition(u3, f2, f1);
 
-  std::wstring u6_old_title = mods.ModifyTitle(u6, L"Mobile Folder A");
+  std::string u6_old_title = mods.ModifyTitle(u6, "Mobile Folder A");
 
   // Test that the property changes have not yet taken effect.
   ExpectBrowserNodeTitle(u2, u2_old_title);
@@ -956,13 +957,13 @@
   std::string url("http://dev.chromium.org/");
   FakeServerChange adds(&trans);
   int64 f0 = other_bookmarks_id();                 // + other_node
-  int64 f1 = adds.AddFolder(L"f1",      f0, 0);    //   + f1
-  int64 f2 = adds.AddFolder(L"f2",      f1, 0);    //     + f2
-  int64 u3 = adds.AddURL(   L"u3", url, f2, 0);    //       + u3    NOLINT
-  int64 u4 = adds.AddURL(   L"u4", url, f2, u3);   //       + u4    NOLINT
-  int64 u5 = adds.AddURL(   L"u5", url, f1, f2);   //     + u5      NOLINT
-  int64 f6 = adds.AddFolder(L"f6",      f1, u5);   //     + f6
-  int64 u7 = adds.AddURL(   L"u7", url, f0, f1);   //   + u7        NOLINT
+  int64 f1 = adds.AddFolder("f1",      f0, 0);    //   + f1
+  int64 f2 = adds.AddFolder("f2",      f1, 0);    //     + f2
+  int64 u3 = adds.AddURL(   "u3", url, f2, 0);    //       + u3    NOLINT
+  int64 u4 = adds.AddURL(   "u4", url, f2, u3);   //       + u4    NOLINT
+  int64 u5 = adds.AddURL(   "u5", url, f1, f2);   //     + u5      NOLINT
+  int64 f6 = adds.AddFolder("f6",      f1, u5);   //     + f6
+  int64 u7 = adds.AddURL(   "u7", url, f0, f1);   //   + u7        NOLINT
 
   syncer::ChangeRecordList::const_iterator it;
   // The bookmark model shouldn't yet have seen any of the nodes of |adds|.
@@ -1003,7 +1004,7 @@
     FakeServerChange adds(&trans);
     std::string url("http://dev.chromium.org");
     EXPECT_NE(GURL(url).spec(), url);
-    adds.AddURL(L"u1", url, other_bookmarks_id(), 0);
+    adds.AddURL("u1", url, other_bookmarks_id(), 0);
 
     adds.ApplyPendingChanges(change_processor_.get());
 
@@ -1034,7 +1035,7 @@
     FakeServerChange adds(&trans);
     std::string url("x");
     EXPECT_FALSE(GURL(url).is_valid());
-    adds.AddURL(L"u1", url, other_bookmarks_id(), 0);
+    adds.AddURL("u1", url, other_bookmarks_id(), 0);
 
     adds.ApplyPendingChanges(change_processor_.get());
 
@@ -1217,11 +1218,11 @@
   {
     syncer::WriteTransaction trans(FROM_HERE, test_user_share_.user_share());
     FakeServerChange adds(&trans);
-    u0 = adds.AddURL(L"URL 0", "http://plus.google.com/", bookmark_bar_id(), 0);
-    f1 = adds.AddFolder(L"Folder 1", bookmark_bar_id(), u0);
-    u1 = adds.AddURL(L"URL 1", "http://www.google.com/", f1, 0);
-    f2 = adds.AddFolder(L"Folder 2", f1, u1);
-    u2 = adds.AddURL(L"URL 2", "http://mail.google.com/", f2, 0);
+    u0 = adds.AddURL("URL 0", "http://plus.google.com/", bookmark_bar_id(), 0);
+    f1 = adds.AddFolder("Folder 1", bookmark_bar_id(), u0);
+    u1 = adds.AddURL("URL 1", "http://www.google.com/", f1, 0);
+    f2 = adds.AddFolder("Folder 2", f1, u1);
+    u2 = adds.AddURL("URL 2", "http://mail.google.com/", f2, 0);
     adds.ApplyPendingChanges(change_processor_.get());
   }
   StopSync();
@@ -1281,7 +1282,7 @@
 }
 
 struct TestData {
-  const wchar_t* title;
+  const char* title;
   const char* url;
 };
 
@@ -1371,64 +1372,64 @@
 //     +-- u5, http://www.u5.com/
 
 static TestData kBookmarkBarChildren[] = {
-  { L"u2", "http://www.u2.com/" },
-  { L"f1", NULL },
-  { L"u1", "http://www.u1.com/" },
-  { L"f2", NULL },
+  { "u2", "http://www.u2.com/" },
+  { "f1", NULL },
+  { "u1", "http://www.u1.com/" },
+  { "f2", NULL },
 };
 static TestData kF1Children[] = {
-  { L"f1u4", "http://www.f1u4.com/" },
-  { L"f1u2", "http://www.f1u2.com/" },
-  { L"f1u3", "http://www.f1u3.com/" },
-  { L"f1u1", "http://www.f1u1.com/" },
+  { "f1u4", "http://www.f1u4.com/" },
+  { "f1u2", "http://www.f1u2.com/" },
+  { "f1u3", "http://www.f1u3.com/" },
+  { "f1u1", "http://www.f1u1.com/" },
 };
 static TestData kF2Children[] = {
-  { L"f2u2", "http://www.f2u2.com/" },
-  { L"f2u4", "http://www.f2u4.com/" },
-  { L"f2u3", "http://www.f2u3.com/" },
-  { L"f2u1", "http://www.f2u1.com/" },
+  { "f2u2", "http://www.f2u2.com/" },
+  { "f2u4", "http://www.f2u4.com/" },
+  { "f2u3", "http://www.f2u3.com/" },
+  { "f2u1", "http://www.f2u1.com/" },
 };
 
 static TestData kOtherBookmarkChildren[] = {
-  { L"f3", NULL },
-  { L"u4", "http://www.u4.com/" },
-  { L"u3", "http://www.u3.com/" },
-  { L"f4", NULL },
-  { L"dup", NULL },
-  { L"dup", NULL },
-  { L"  ls  ", "http://www.ls.com/" }
+  { "f3", NULL },
+  { "u4", "http://www.u4.com/" },
+  { "u3", "http://www.u3.com/" },
+  { "f4", NULL },
+  { "dup", NULL },
+  { "dup", NULL },
+  { "  ls  ", "http://www.ls.com/" }
 };
 static TestData kF3Children[] = {
-  { L"f3u4", "http://www.f3u4.com/" },
-  { L"f3u2", "http://www.f3u2.com/" },
-  { L"f3u3", "http://www.f3u3.com/" },
-  { L"f3u1", "http://www.f3u1.com/" },
+  { "f3u4", "http://www.f3u4.com/" },
+  { "f3u2", "http://www.f3u2.com/" },
+  { "f3u3", "http://www.f3u3.com/" },
+  { "f3u1", "http://www.f3u1.com/" },
 };
 static TestData kF4Children[] = {
-  { L"f4u1", "http://www.f4u1.com/" },
-  { L"f4u2", "http://www.f4u2.com/" },
-  { L"f4u3", "http://www.f4u3.com/" },
-  { L"f4u4", "http://www.f4u4.com/" },
+  { "f4u1", "http://www.f4u1.com/" },
+  { "f4u2", "http://www.f4u2.com/" },
+  { "f4u3", "http://www.f4u3.com/" },
+  { "f4u4", "http://www.f4u4.com/" },
 };
 static TestData kDup1Children[] = {
-  { L"dupu1", "http://www.dupu1.com/" },
+  { "dupu1", "http://www.dupu1.com/" },
 };
 static TestData kDup2Children[] = {
-  { L"dupu2", "http://www.dupu2.com/" },
+  { "dupu2", "http://www.dupu2.com/" },
 };
 
 static TestData kMobileBookmarkChildren[] = {
-  { L"f5", NULL },
-  { L"f6", NULL },
-  { L"u5", "http://www.u5.com/" },
+  { "f5", NULL },
+  { "f6", NULL },
+  { "u5", "http://www.u5.com/" },
 };
 static TestData kF5Children[] = {
-  { L"f5u1", "http://www.f5u1.com/" },
-  { L"f5u2", "http://www.f5u2.com/" },
+  { "f5u1", "http://www.f5u1.com/" },
+  { "f5u2", "http://www.f5u2.com/" },
 };
 static TestData kF6Children[] = {
-  { L"f6u1", "http://www.f6u1.com/" },
-  { L"f6u2", "http://www.f6u2.com/" },
+  { "f6u1", "http://www.f6u1.com/" },
+  { "f6u2", "http://www.f6u2.com/" },
 };
 
 }  // anonymous namespace.
@@ -1451,10 +1452,14 @@
     if (item.url) {
       const base::Time add_time =
           start_time_ + base::TimeDelta::FromMinutes(*running_count);
-      model_->AddURLWithCreationTime(node, i, base::WideToUTF16Hack(item.title),
-                                     GURL(item.url), add_time);
+      model_->AddURLWithCreationTimeAndMetaInfo(node,
+                                                i,
+                                                base::UTF8ToUTF16(item.title),
+                                                GURL(item.url),
+                                                add_time,
+                                                NULL);
     } else {
-      model_->AddFolder(node, i, base::WideToUTF16Hack(item.title));
+      model_->AddFolder(node, i, base::UTF8ToUTF16(item.title));
     }
     (*running_count)++;
   }
@@ -1474,7 +1479,7 @@
     const TestData& item = data[i];
     GURL url = GURL(item.url == NULL ? "" : item.url);
     BookmarkNode test_node(url);
-    test_node.SetTitle(base::WideToUTF16Hack(item.title));
+    test_node.SetTitle(base::UTF8ToUTF16(item.title));
     EXPECT_EQ(child_node->GetTitle(), test_node.GetTitle());
     if (item.url) {
       EXPECT_FALSE(child_node->is_folder());
@@ -1903,7 +1908,7 @@
   // updates it's creation time.
   syncer::WriteTransaction trans(FROM_HERE, test_user_share_.user_share());
   FakeServerChange adds(&trans);
-  const std::wstring kTitle = L"Some site";
+  const std::string kTitle = "Some site";
   const std::string kUrl = "http://www.whatwhat.yeah/";
   const int kCreationTime = 30;
   int64 id = adds.AddURL(kTitle, kUrl,
@@ -1916,7 +1921,7 @@
   const BookmarkNode* node = model_->bookmark_bar_node()->GetChild(0);
   ASSERT_TRUE(node);
   EXPECT_TRUE(node->is_url());
-  EXPECT_EQ(base::WideToUTF16Hack(kTitle), node->GetTitle());
+  EXPECT_EQ(base::UTF8ToUTF16(kTitle), node->GetTitle());
   EXPECT_EQ(kUrl, node->url().possibly_invalid_spec());
   EXPECT_EQ(node->date_added(), base::Time::FromInternalValue(30));
 }
@@ -1934,11 +1939,11 @@
   BookmarkNode::MetaInfoMap folder_meta_info;
   folder_meta_info["folder"] = "foldervalue";
   int64 folder_id = adds.AddFolderWithMetaInfo(
-      L"folder title", &folder_meta_info, bookmark_bar_id(), 0);
+      "folder title", &folder_meta_info, bookmark_bar_id(), 0);
   BookmarkNode::MetaInfoMap node_meta_info;
   node_meta_info["node"] = "nodevalue";
   node_meta_info["other"] = "othervalue";
-  int64 id = adds.AddURLWithMetaInfo(L"node title", "http://www.foo.com",
+  int64 id = adds.AddURLWithMetaInfo("node title", "http://www.foo.com",
                                      &node_meta_info, folder_id, 0);
   adds.ApplyPendingChanges(change_processor_.get());
 
diff --git a/chrome/browser/sync/profile_sync_service_mock.h b/chrome/browser/sync/profile_sync_service_mock.h
index 15eb0ee..b3e1a33 100644
--- a/chrome/browser/sync/profile_sync_service_mock.h
+++ b/chrome/browser/sync/profile_sync_service_mock.h
@@ -10,10 +10,10 @@
 
 #include "base/memory/weak_ptr.h"
 #include "base/strings/string16.h"
-#include "chrome/browser/sync/glue/change_processor.h"
 #include "chrome/browser/sync/glue/device_info.h"
 #include "chrome/browser/sync/profile_sync_service.h"
 #include "chrome/test/base/testing_profile.h"
+#include "components/sync_driver/change_processor.h"
 #include "components/sync_driver/data_type_controller.h"
 #include "google_apis/gaia/google_service_auth_error.h"
 #include "sync/internal_api/public/base/model_type.h"
@@ -97,8 +97,6 @@
   MOCK_METHOD1(SetSetupInProgress, void(bool));
   MOCK_CONST_METHOD0(IsSessionsDataTypeControllerRunning, bool());
 
-  MOCK_METHOD0(GetSessionModelAssociatorDeprecated,
-               browser_sync::SessionModelAssociator*());
   MOCK_CONST_METHOD0(GetAllSignedInDevicesMock,
                      std::vector<browser_sync::DeviceInfo*>* ());
   // This is to get around the fact that GMOCK does not handle Scoped*.
diff --git a/chrome/browser/sync/profile_sync_service_preference_unittest.cc b/chrome/browser/sync/profile_sync_service_preference_unittest.cc
index 497539d..3bd5f13 100644
--- a/chrome/browser/sync/profile_sync_service_preference_unittest.cc
+++ b/chrome/browser/sync/profile_sync_service_preference_unittest.cc
@@ -26,7 +26,6 @@
 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
 #include "chrome/browser/signin/signin_manager_factory.h"
 #include "chrome/browser/sync/abstract_profile_sync_service_test.h"
-#include "chrome/browser/sync/glue/generic_change_processor.h"
 #include "chrome/browser/sync/glue/sync_backend_host.h"
 #include "chrome/browser/sync/glue/ui_data_type_controller.h"
 #include "chrome/browser/sync/profile_sync_service_factory.h"
@@ -38,6 +37,7 @@
 #include "chrome/test/base/testing_profile.h"
 #include "chrome/test/base/testing_profile_manager.h"
 #include "components/signin/core/browser/signin_manager.h"
+#include "components/sync_driver/generic_change_processor.h"
 #include "components/user_prefs/pref_registry_syncable.h"
 #include "google_apis/gaia/gaia_constants.h"
 #include "sync/api/attachments/fake_attachment_service.h"
diff --git a/chrome/browser/sync/profile_sync_service_session_unittest.cc b/chrome/browser/sync/profile_sync_service_session_unittest.cc
deleted file mode 100644
index d0c5662..0000000
--- a/chrome/browser/sync/profile_sync_service_session_unittest.cc
+++ /dev/null
@@ -1,1324 +0,0 @@
-// Copyright (c) 2012 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 <map>
-#include <string>
-#include <utility>
-
-#include "base/bind.h"
-#include "base/bind_helpers.h"
-#include "base/callback.h"
-#include "base/command_line.h"
-#include "base/compiler_specific.h"
-#include "base/files/scoped_temp_dir.h"
-#include "base/guid.h"
-#include "base/location.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/run_loop.h"
-#include "base/stl_util.h"
-#include "base/strings/utf_string_conversions.h"
-#include "base/time/time.h"
-#include "chrome/browser/chrome_notification_types.h"
-#include "chrome/browser/invalidation/fake_invalidation_service.h"
-#include "chrome/browser/invalidation/invalidation_service_factory.h"
-#include "chrome/browser/prefs/pref_service_syncable.h"
-#include "chrome/browser/sessions/session_tab_helper.h"
-#include "chrome/browser/signin/fake_profile_oauth2_token_service.h"
-#include "chrome/browser/signin/fake_profile_oauth2_token_service_builder.h"
-#include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
-#include "chrome/browser/signin/signin_manager_factory.h"
-#include "chrome/browser/sync/abstract_profile_sync_service_test.h"
-#include "chrome/browser/sync/glue/device_info.h"
-#include "chrome/browser/sync/glue/session_change_processor.h"
-#include "chrome/browser/sync/glue/session_data_type_controller.h"
-#include "chrome/browser/sync/glue/session_model_associator.h"
-#include "chrome/browser/sync/glue/session_sync_test_helper.h"
-#include "chrome/browser/sync/glue/sync_backend_host.h"
-#include "chrome/browser/sync/glue/synced_device_tracker.h"
-#include "chrome/browser/sync/glue/synced_tab_delegate.h"
-#include "chrome/browser/sync/glue/tab_node_pool.h"
-#include "chrome/browser/sync/profile_sync_components_factory_mock.h"
-#include "chrome/browser/sync/profile_sync_service_factory.h"
-#include "chrome/browser/sync/profile_sync_test_util.h"
-#include "chrome/browser/sync/test_profile_sync_service.h"
-#include "chrome/browser/ui/sync/tab_contents_synced_tab_delegate.h"
-#include "chrome/browser/ui/tabs/tab_strip_model.h"
-#include "chrome/common/chrome_switches.h"
-#include "chrome/test/base/browser_with_test_window_test.h"
-#include "chrome/test/base/testing_browser_process.h"
-#include "chrome/test/base/testing_profile.h"
-#include "chrome/test/base/testing_profile_manager.h"
-#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
-#include "components/signin/core/browser/profile_oauth2_token_service.h"
-#include "components/signin/core/browser/signin_manager.h"
-#include "content/public/browser/navigation_controller.h"
-#include "content/public/browser/navigation_entry.h"
-#include "content/public/browser/notification_observer.h"
-#include "content/public/browser/notification_registrar.h"
-#include "content/public/browser/notification_service.h"
-#include "content/public/browser/web_contents.h"
-#include "content/public/test/test_browser_thread.h"
-#include "google_apis/gaia/gaia_constants.h"
-#include "net/url_request/test_url_fetcher_factory.h"
-#include "sync/internal_api/public/base/model_type.h"
-#include "sync/internal_api/public/change_record.h"
-#include "sync/internal_api/public/read_node.h"
-#include "sync/internal_api/public/read_transaction.h"
-#include "sync/internal_api/public/test/test_user_share.h"
-#include "sync/internal_api/public/write_node.h"
-#include "sync/internal_api/public/write_transaction.h"
-#include "sync/protocol/session_specifics.pb.h"
-#include "sync/protocol/sync.pb.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "ui/base/ui_base_types.h"
-#include "url/gurl.h"
-
-using browser_sync::SessionChangeProcessor;
-using browser_sync::SessionDataTypeController;
-using browser_sync::SessionModelAssociator;
-using browser_sync::SyncBackendHost;
-using content::BrowserThread;
-using content::WebContents;
-using syncer::ChangeRecord;
-using testing::Return;
-using testing::_;
-
-namespace browser_sync {
-
-namespace {
-
-const char kTestProfileName[] = "test-profile";
-
-class FakeProfileSyncService : public TestProfileSyncService {
- public:
-  FakeProfileSyncService(
-      ProfileSyncComponentsFactory* factory,
-      Profile* profile,
-      SigninManagerBase* signin,
-      ProfileOAuth2TokenService* oauth2_token_service,
-      ProfileSyncServiceStartBehavior behavior)
-      : TestProfileSyncService(factory,
-                               profile,
-                               signin,
-                               oauth2_token_service,
-                               behavior) {}
-  virtual ~FakeProfileSyncService() {}
-
-  virtual scoped_ptr<DeviceInfo> GetLocalDeviceInfo() const OVERRIDE {
-    return scoped_ptr<DeviceInfo>(new DeviceInfo(base::GenerateGUID(),
-                                                 "client_name",
-                                                 std::string(),
-                                                 std::string(),
-                                                 sync_pb::SyncEnums::TYPE_WIN));
-  }
-};
-
-bool CompareMemoryToString(
-    const std::string& str,
-    const scoped_refptr<base::RefCountedMemory>& mem) {
-  if (mem->size() != str.size())
-    return false;
-  for (size_t i = 0; i <mem->size(); ++i) {
-    if (str[i] != *(mem->front() + i))
-      return false;
-  }
-  return true;
-}
-
-ACTION_P(ReturnSyncBackendHost, callback) {
-  return new browser_sync::SyncBackendHostForProfileSyncTest(
-      arg1, arg2, callback);
-}
-
-}  // namespace
-
-class ProfileSyncServiceSessionTest
-    : public BrowserWithTestWindowTest,
-      public content::NotificationObserver {
- public:
-  ProfileSyncServiceSessionTest()
-      : profile_manager_(TestingBrowserProcess::GetGlobal()),
-        window_bounds_(0, 1, 2, 3),
-        notified_of_refresh_(false),
-        notified_of_update_(false) {}
-  ProfileSyncService* sync_service() { return sync_service_.get(); }
-
- protected:
-  virtual TestingProfile* CreateProfile() OVERRIDE {
-    TestingProfile::TestingFactories testing_factories;
-    testing_factories.push_back(std::make_pair(
-        ProfileOAuth2TokenServiceFactory::GetInstance(),
-        BuildAutoIssuingFakeProfileOAuth2TokenService));
-    // Don't want the profile to create a real ProfileSyncService.
-    testing_factories.push_back(std::make_pair(
-        ProfileSyncServiceFactory::GetInstance(),
-        static_cast<BrowserContextKeyedServiceFactory::TestingFactoryFunction>(
-            NULL)));
-    TestingProfile* profile = profile_manager_.CreateTestingProfile(
-        kTestProfileName,
-        scoped_ptr<PrefServiceSyncable>(),
-        base::UTF8ToUTF16(kTestProfileName),
-        0,
-        std::string(),
-        testing_factories);
-    invalidation::InvalidationServiceFactory::GetInstance()->SetTestingFactory(
-        profile, invalidation::FakeInvalidationService::Build);
-    return profile;
-  }
-
-  virtual void DestroyProfile(TestingProfile* profile) OVERRIDE {
-    EXPECT_EQ(kTestProfileName, profile->GetProfileName());
-    profile_manager_.DeleteTestingProfile(kTestProfileName);
-  }
-
-  virtual void SetUp() {
-    ASSERT_TRUE(profile_manager_.SetUp());
-    BrowserWithTestWindowTest::SetUp();
-    ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
-    registrar_.Add(this, chrome::NOTIFICATION_FOREIGN_SESSION_UPDATED,
-        content::NotificationService::AllSources());
-    registrar_.Add(this, chrome::NOTIFICATION_SYNC_REFRESH_LOCAL,
-        content::NotificationService::AllSources());
-    CommandLine::ForCurrentProcess()->AppendSwitchASCII(
-        switches::kSyncDeferredStartupTimeoutSeconds, "0");
-  }
-
-  virtual void Observe(int type,
-      const content::NotificationSource& source,
-      const content::NotificationDetails& details) OVERRIDE {
-    switch (type) {
-      case chrome::NOTIFICATION_FOREIGN_SESSION_UPDATED:
-        notified_of_update_ = true;
-        break;
-      case chrome::NOTIFICATION_SYNC_REFRESH_LOCAL:
-        notified_of_refresh_ = true;
-        break;
-      default:
-        NOTREACHED();
-        break;
-    }
-  }
-
-  virtual void TearDown() {
-    sync_service_->Shutdown();
-    sync_service_.reset();
-
-    // We need to destroy the profile before shutting down the threads, because
-    // some of the ref counted objects in the profile depend on their
-    // destruction on the io thread.
-    DestroyBrowserAndProfile();
-    ASSERT_FALSE(profile());
-
-    // Pump messages posted by the sync core thread (which may end up
-    // posting on the IO thread).
-    base::RunLoop().RunUntilIdle();
-    BrowserWithTestWindowTest::TearDown();
-  }
-
-  bool StartSyncService(const base::Closure& callback,
-                        bool will_fail_association) {
-    if (sync_service_)
-      return false;
-    SigninManagerBase* signin =
-        SigninManagerFactory::GetForProfile(profile());
-    signin->SetAuthenticatedUsername("test_user");
-    ProfileOAuth2TokenService* oauth2_token_service =
-        ProfileOAuth2TokenServiceFactory::GetForProfile(profile());
-    ProfileSyncComponentsFactoryMock* factory =
-        new ProfileSyncComponentsFactoryMock();
-    sync_service_.reset(new FakeProfileSyncService(
-        factory,
-        profile(),
-        signin,
-        oauth2_token_service,
-        browser_sync::AUTO_START));
-    EXPECT_CALL(*factory, CreateSyncBackendHost(_,_,_)).
-        WillOnce(ReturnSyncBackendHost(callback));
-
-    // Register the session data type.
-    SessionDataTypeController *dtc = new SessionDataTypeController(factory,
-                                         profile(),
-                                         sync_service_.get());
-    sync_service_->RegisterDataTypeController(dtc);
-
-    model_associator_ =
-        new SessionModelAssociator(sync_service_.get(),
-                                   true /* setup_for_test */);
-    change_processor_ = new SessionChangeProcessor(
-        dtc, model_associator_,
-        true /* setup_for_test */);
-    EXPECT_CALL(*factory, CreateSessionSyncComponents(_, _)).
-        WillOnce(Return(ProfileSyncComponentsFactory::SyncComponents(
-            model_associator_, change_processor_)));
-    EXPECT_CALL(*factory, CreateDataTypeManager(_, _, _, _, _, _)).
-        WillOnce(ReturnNewDataTypeManager());
-
-    ProfileOAuth2TokenServiceFactory::GetForProfile(profile())
-        ->UpdateCredentials("test_user", "oauth2_login_token");
-    sync_service_->Initialize();
-    base::MessageLoop::current()->Run();
-    return true;
-  }
-
-  // Path used in testing.
-  base::ScopedTempDir temp_dir_;
-  TestingProfileManager profile_manager_;
-  SessionModelAssociator* model_associator_;
-  SessionChangeProcessor* change_processor_;
-  SessionID window_id_;
-  scoped_ptr<TestProfileSyncService> sync_service_;
-  const gfx::Rect window_bounds_;
-  bool notified_of_refresh_;
-  bool notified_of_update_;
-  content::NotificationRegistrar registrar_;
-  net::TestURLFetcherFactory fetcher_factory_;
-  SessionSyncTestHelper helper_;
-};
-
-class CreateRootHelper {
- public:
-  explicit CreateRootHelper(ProfileSyncServiceSessionTest* test)
-      : callback_(base::Bind(&CreateRootHelper::CreateRootCallback,
-                             base::Unretained(this), test)),
-        success_(false) {
-  }
-
-  virtual ~CreateRootHelper() {}
-
-  const base::Closure& callback() const { return callback_; }
-  bool success() { return success_; }
-
- private:
-  void CreateRootCallback(ProfileSyncServiceSessionTest* test) {
-    success_ = syncer::TestUserShare::CreateRoot(
-        syncer::SESSIONS, test->sync_service()->GetUserShare());
-  }
-
-  base::Closure callback_;
-  bool success_;
-};
-
-// Test that we can write this machine's session to a node and retrieve it.
-TEST_F(ProfileSyncServiceSessionTest, WriteSessionToNode) {
-  CreateRootHelper create_root(this);
-  ASSERT_TRUE(StartSyncService(create_root.callback(), false));
-  ASSERT_TRUE(create_root.success());
-
-  // Check that the DataTypeController associated the models.
-  bool has_nodes;
-  ASSERT_TRUE(model_associator_->SyncModelHasUserCreatedNodes(&has_nodes));
-  ASSERT_TRUE(has_nodes);
-  std::string machine_tag = model_associator_->GetCurrentMachineTag();
-  int64 sync_id = model_associator_->GetSyncIdFromSessionTag(machine_tag);
-  ASSERT_NE(syncer::kInvalidId, sync_id);
-
-  // Check that we can get the correct session specifics back from the node.
-  syncer::ReadTransaction trans(FROM_HERE, sync_service_->GetUserShare());
-  syncer::ReadNode node(&trans);
-  ASSERT_EQ(syncer::BaseNode::INIT_OK,
-            node.InitByClientTagLookup(syncer::SESSIONS, machine_tag));
-  const sync_pb::SessionSpecifics& specifics(node.GetSessionSpecifics());
-  ASSERT_EQ(machine_tag, specifics.session_tag());
-  ASSERT_TRUE(specifics.has_header());
-  const sync_pb::SessionHeader& header_s = specifics.header();
-  ASSERT_TRUE(header_s.has_device_type());
-  ASSERT_EQ("client_name", header_s.client_name());
-  ASSERT_EQ(0, header_s.window_size());
-}
-
-// Crashes sometimes on Windows, particularly XP.
-// See http://crbug.com/174951
-#if defined(OS_WIN)
-#define MAYBE_WriteFilledSessionToNode DISABLED_WriteFilledSessionToNode
-#else
-#define MAYBE_WriteFilledSessionToNode WriteFilledSessionToNode
-#endif  // defined(OS_WIN)
-
-// Test that we can fill this machine's session, write it to a node,
-// and then retrieve it.
-TEST_F(ProfileSyncServiceSessionTest, MAYBE_WriteFilledSessionToNode) {
-  CreateRootHelper create_root(this);
-  ASSERT_TRUE(StartSyncService(create_root.callback(), false));
-  ASSERT_TRUE(create_root.success());
-
-  // Check that the DataTypeController associated the models.
-  bool has_nodes;
-  ASSERT_TRUE(model_associator_->SyncModelHasUserCreatedNodes(&has_nodes));
-  ASSERT_TRUE(has_nodes);
-  AddTab(browser(), GURL("http://foo/1"));
-  NavigateAndCommitActiveTab(GURL("http://foo/2"));
-  AddTab(browser(), GURL("http://bar/1"));
-  NavigateAndCommitActiveTab(GURL("http://bar/2"));
-
-  ASSERT_TRUE(model_associator_->SyncModelHasUserCreatedNodes(&has_nodes));
-  ASSERT_TRUE(has_nodes);
-  std::string machine_tag = model_associator_->GetCurrentMachineTag();
-  int64 sync_id = model_associator_->GetSyncIdFromSessionTag(machine_tag);
-  ASSERT_NE(syncer::kInvalidId, sync_id);
-
-  // Check that this machine's data is not included in the foreign windows.
-  std::vector<const SyncedSession*> foreign_sessions;
-  ASSERT_FALSE(model_associator_->GetAllForeignSessions(&foreign_sessions));
-  ASSERT_EQ(foreign_sessions.size(), 0U);
-
-  // Get the tabs for this machine from the node and check that they were
-  // filled.
-  SessionModelAssociator::TabLinksMap tab_map =
-      model_associator_->local_tab_map_;
-  ASSERT_EQ(2U, tab_map.size());
-  // Tabs are ordered by sessionid in tab_map, so should be able to traverse
-  // the tree based on order of tabs created
-  SessionModelAssociator::TabLinksMap::iterator iter = tab_map.begin();
-  ASSERT_EQ(2, iter->second->tab()->GetEntryCount());
-  ASSERT_EQ(GURL("http://foo/1"), iter->second->tab()->
-          GetEntryAtIndex(0)->GetVirtualURL());
-  ASSERT_EQ(GURL("http://foo/2"), iter->second->tab()->
-          GetEntryAtIndex(1)->GetVirtualURL());
-  iter++;
-  ASSERT_EQ(2, iter->second->tab()->GetEntryCount());
-  ASSERT_EQ(GURL("http://bar/1"), iter->second->tab()->
-      GetEntryAtIndex(0)->GetVirtualURL());
-  ASSERT_EQ(GURL("http://bar/2"), iter->second->tab()->
-      GetEntryAtIndex(1)->GetVirtualURL());
-}
-
-// Test that we fail on a failed model association.
-TEST_F(ProfileSyncServiceSessionTest, FailModelAssociation) {
-  ASSERT_TRUE(StartSyncService(base::Closure(), true));
-  ASSERT_TRUE(sync_service_->HasUnrecoverableError());
-}
-
-// Write a foreign session to a node, and then retrieve it.
-TEST_F(ProfileSyncServiceSessionTest, WriteForeignSessionToNode) {
-  CreateRootHelper create_root(this);
-  ASSERT_TRUE(StartSyncService(create_root.callback(), false));
-  ASSERT_TRUE(create_root.success());
-
-  // Check that the DataTypeController associated the models.
-  bool has_nodes;
-  ASSERT_TRUE(model_associator_->SyncModelHasUserCreatedNodes(&has_nodes));
-  ASSERT_TRUE(has_nodes);
-
-  // Fill an instance of session specifics with a foreign session's data.
-  std::string tag = "tag1";
-  SessionID::id_type nums1[] = {5, 10, 13, 17};
-  std::vector<sync_pb::SessionSpecifics> tabs1;
-  std::vector<SessionID::id_type> tab_list1(nums1, nums1 + arraysize(nums1));
-  sync_pb::SessionSpecifics meta(helper_.BuildForeignSession(
-      tag, tab_list1, &tabs1));
-
-  // Update associator with the session's meta node containing one window.
-  model_associator_->AssociateForeignSpecifics(meta, base::Time());
-  // Add tabs for the window.
-  for (std::vector<sync_pb::SessionSpecifics>::iterator iter = tabs1.begin();
-       iter != tabs1.end(); ++iter) {
-    model_associator_->AssociateForeignSpecifics(*iter, base::Time());
-  }
-
-  // Check that the foreign session was associated and retrieve the data.
-  std::vector<const SyncedSession*> foreign_sessions;
-  ASSERT_TRUE(model_associator_->GetAllForeignSessions(&foreign_sessions));
-  ASSERT_EQ(1U, foreign_sessions.size());
-  std::vector<std::vector<SessionID::id_type> > session_reference;
-  session_reference.push_back(tab_list1);
-  helper_.VerifySyncedSession(tag, session_reference, *(foreign_sessions[0]));
-}
-
-// Write a foreign session with one window to a node. Sync, then add a window.
-// Sync, then add a third window. Close the two windows.
-TEST_F(ProfileSyncServiceSessionTest, WriteForeignSessionToNodeThreeWindows) {
-  CreateRootHelper create_root(this);
-  ASSERT_TRUE(StartSyncService(create_root.callback(), false));
-  ASSERT_TRUE(create_root.success());
-
-  // Build a foreign session with one window and four tabs.
-  std::string tag = "tag1";
-  SessionID::id_type nums1[] = {5, 10, 13, 17};
-  std::vector<sync_pb::SessionSpecifics> tabs1;
-  std::vector<SessionID::id_type> tab_list1(nums1, nums1 + arraysize(nums1));
-  sync_pb::SessionSpecifics meta(helper_.BuildForeignSession(
-      tag, tab_list1, &tabs1));
-  // Update associator with the session's meta node containing one window.
-  model_associator_->AssociateForeignSpecifics(meta, base::Time());
-  // Add tabs for first window.
-  for (std::vector<sync_pb::SessionSpecifics>::iterator iter = tabs1.begin();
-       iter != tabs1.end(); ++iter) {
-    model_associator_->AssociateForeignSpecifics(*iter, base::Time());
-  }
-
-  // Verify first window
-  std::vector<const SyncedSession*> foreign_sessions;
-  ASSERT_TRUE(model_associator_->GetAllForeignSessions(&foreign_sessions));
-  std::vector<std::vector<SessionID::id_type> > session_reference;
-  session_reference.push_back(tab_list1);
-  helper_.VerifySyncedSession(tag, session_reference, *(foreign_sessions[0]));
-
-  // Add a second window.
-  SessionID::id_type tab_nums2[] = {7, 15, 18, 20};
-  std::vector<SessionID::id_type> tab_list2(
-      tab_nums2, tab_nums2 + arraysize(tab_nums2));
-  helper_.AddWindowSpecifics(1, tab_list2, &meta);
-  std::vector<sync_pb::SessionSpecifics> tabs2;
-  tabs2.resize(tab_list2.size());
-  for (size_t i = 0; i < tab_list2.size(); ++i) {
-    helper_.BuildTabSpecifics(tag, 0, tab_list2[i], &tabs2[i]);
-  }
-  // Update associator with the session's meta node containing two windows.
-  model_associator_->AssociateForeignSpecifics(meta, base::Time());
-  // Add tabs for second window.
-  for (std::vector<sync_pb::SessionSpecifics>::iterator iter = tabs2.begin();
-       iter != tabs2.end(); ++iter) {
-    model_associator_->AssociateForeignSpecifics(*iter, base::Time());
-  }
-
-  // Verify the two windows.
-  foreign_sessions.clear();
-  ASSERT_TRUE(model_associator_->GetAllForeignSessions(&foreign_sessions));
-  ASSERT_EQ(1U, foreign_sessions.size());
-  session_reference.push_back(tab_list2);
-  helper_.VerifySyncedSession(tag, session_reference, *(foreign_sessions[0]));
-
-  // Add a third window.
-  SessionID::id_type tab_nums3[] = {8, 16, 19, 21};
-  std::vector<SessionID::id_type> tab_list3(
-      tab_nums3, tab_nums3 + arraysize(tab_nums3));
-  helper_.AddWindowSpecifics(2, tab_list3, &meta);
-  std::vector<sync_pb::SessionSpecifics> tabs3;
-  tabs3.resize(tab_list3.size());
-  for (size_t i = 0; i < tab_list3.size(); ++i) {
-    helper_.BuildTabSpecifics(tag, 0, tab_list3[i], &tabs3[i]);
-  }
-  // Update associator with the session's meta node containing three windows.
-  model_associator_->AssociateForeignSpecifics(meta, base::Time());
-  // Add tabs for third window.
-  for (std::vector<sync_pb::SessionSpecifics>::iterator iter = tabs3.begin();
-       iter != tabs3.end(); ++iter) {
-    model_associator_->AssociateForeignSpecifics(*iter, base::Time());
-  }
-
-  // Verify the three windows
-  foreign_sessions.clear();
-  ASSERT_TRUE(model_associator_->GetAllForeignSessions(&foreign_sessions));
-  ASSERT_EQ(1U, foreign_sessions.size());
-  session_reference.push_back(tab_list3);
-  helper_.VerifySyncedSession(tag, session_reference, *(foreign_sessions[0]));
-
-  // Close third window (by clearing and then not adding it back).
-  meta.mutable_header()->clear_window();
-  helper_.AddWindowSpecifics(0, tab_list1, &meta);
-  helper_.AddWindowSpecifics(1, tab_list2, &meta);
-  // Update associator with just the meta node, now containing only two windows.
-  model_associator_->AssociateForeignSpecifics(meta, base::Time());
-
-  // Verify first two windows are still there.
-  foreign_sessions.clear();
-  ASSERT_TRUE(model_associator_->GetAllForeignSessions(&foreign_sessions));
-  ASSERT_EQ(1U, foreign_sessions.size());
-  session_reference.pop_back();  // Pop off the data for the third window.
-  helper_.VerifySyncedSession(tag, session_reference, *(foreign_sessions[0]));
-
-  // Close second window (by clearing and then not adding it back).
-  meta.mutable_header()->clear_window();
-  helper_.AddWindowSpecifics(0, tab_list1, &meta);
-  // Update associator with just the meta node, now containing only one windows.
-  model_associator_->AssociateForeignSpecifics(meta, base::Time());
-
-  // Verify first window is still there.
-  foreign_sessions.clear();
-  ASSERT_TRUE(model_associator_->GetAllForeignSessions(&foreign_sessions));
-  ASSERT_EQ(1U, foreign_sessions.size());
-  session_reference.pop_back();  // Pop off the data for the second window.
-  helper_.VerifySyncedSession(tag, session_reference, *(foreign_sessions[0]));
-}
-
-// Write a foreign session to a node, with the tabs arriving first, and then
-// retrieve it.
-TEST_F(ProfileSyncServiceSessionTest, WriteForeignSessionToNodeTabsFirst) {
-  CreateRootHelper create_root(this);
-  ASSERT_TRUE(StartSyncService(create_root.callback(), false));
-  ASSERT_TRUE(create_root.success());
-
-  // Fill an instance of session specifics with a foreign session's data.
-  std::string tag = "tag1";
-  SessionID::id_type nums1[] = {5, 10, 13, 17};
-  std::vector<sync_pb::SessionSpecifics> tabs1;
-  std::vector<SessionID::id_type> tab_list1 (nums1, nums1 + arraysize(nums1));
-  sync_pb::SessionSpecifics meta(helper_.BuildForeignSession(
-      tag, tab_list1, &tabs1));
-
-  // Add tabs for first window.
-  for (std::vector<sync_pb::SessionSpecifics>::iterator iter = tabs1.begin();
-       iter != tabs1.end(); ++iter) {
-    model_associator_->AssociateForeignSpecifics(*iter, base::Time());
-  }
-  // Update associator with the session's meta node containing one window.
-  model_associator_->AssociateForeignSpecifics(meta, base::Time());
-
-  // Check that the foreign session was associated and retrieve the data.
-  std::vector<const SyncedSession*> foreign_sessions;
-  ASSERT_TRUE(model_associator_->GetAllForeignSessions(&foreign_sessions));
-  ASSERT_EQ(1U, foreign_sessions.size());
-  std::vector<std::vector<SessionID::id_type> > session_reference;
-  session_reference.push_back(tab_list1);
-  helper_.VerifySyncedSession(tag, session_reference, *(foreign_sessions[0]));
-}
-
-// Write a foreign session to a node with some tabs that never arrive.
-TEST_F(ProfileSyncServiceSessionTest, WriteForeignSessionToNodeMissingTabs) {
-  CreateRootHelper create_root(this);
-  ASSERT_TRUE(StartSyncService(create_root.callback(), false));
-  ASSERT_TRUE(create_root.success());
-
-  // Fill an instance of session specifics with a foreign session's data.
-  std::string tag = "tag1";
-  SessionID::id_type nums1[] = {5, 10, 13, 17};
-  std::vector<sync_pb::SessionSpecifics> tabs1;
-  std::vector<SessionID::id_type> tab_list1 (nums1, nums1 + arraysize(nums1));
-  sync_pb::SessionSpecifics meta(helper_.BuildForeignSession(
-      tag, tab_list1, &tabs1));
-  // Add a second window, but this time only create two tab nodes, despite the
-  // window expecting four tabs.
-  SessionID::id_type tab_nums2[] = {7, 15, 18, 20};
-  std::vector<SessionID::id_type> tab_list2(
-      tab_nums2, tab_nums2 + arraysize(tab_nums2));
-  helper_.AddWindowSpecifics(1, tab_list2, &meta);
-  std::vector<sync_pb::SessionSpecifics> tabs2;
-  tabs2.resize(2);
-  for (size_t i = 0; i < 2; ++i) {
-    helper_.BuildTabSpecifics(tag, 0, tab_list2[i], &tabs2[i]);
-  }
-
-  // Update associator with the session's meta node containing two windows.
-  model_associator_->AssociateForeignSpecifics(meta, base::Time());
-  // Add tabs for first window.
-  for (std::vector<sync_pb::SessionSpecifics>::iterator iter = tabs1.begin();
-       iter != tabs1.end(); ++iter) {
-    model_associator_->AssociateForeignSpecifics(*iter, base::Time());
-  }
-  // Add tabs for second window.
-  for (std::vector<sync_pb::SessionSpecifics>::iterator iter = tabs2.begin();
-       iter != tabs2.end(); ++iter) {
-    model_associator_->AssociateForeignSpecifics(*iter, base::Time());
-  }
-
-  // Check that the foreign session was associated and retrieve the data.
-  std::vector<const SyncedSession*> foreign_sessions;
-  ASSERT_TRUE(model_associator_->GetAllForeignSessions(&foreign_sessions));
-  ASSERT_EQ(1U, foreign_sessions.size());
-  ASSERT_EQ(2U, foreign_sessions[0]->windows.size());
-  ASSERT_EQ(4U, foreign_sessions[0]->windows.find(0)->second->tabs.size());
-  ASSERT_EQ(4U, foreign_sessions[0]->windows.find(1)->second->tabs.size());
-
-  // Close the second window.
-  meta.mutable_header()->clear_window();
-  helper_.AddWindowSpecifics(0, tab_list1, &meta);
-
-  // Update associator with the session's meta node containing one window.
-  model_associator_->AssociateForeignSpecifics(meta, base::Time());
-
-  // Check that the foreign session was associated and retrieve the data.
-  foreign_sessions.clear();
-  ASSERT_TRUE(model_associator_->GetAllForeignSessions(&foreign_sessions));
-  ASSERT_EQ(1U, foreign_sessions.size());
-  ASSERT_EQ(1U, foreign_sessions[0]->windows.size());
-  std::vector<std::vector<SessionID::id_type> > session_reference;
-  session_reference.push_back(tab_list1);
-  helper_.VerifySyncedSession(tag, session_reference, *(foreign_sessions[0]));
-}
-
-// Test the DataTypeController on update.
-TEST_F(ProfileSyncServiceSessionTest, UpdatedSyncNodeActionUpdate) {
-  CreateRootHelper create_root(this);
-  ASSERT_TRUE(StartSyncService(create_root.callback(), false));
-  ASSERT_TRUE(create_root.success());
-  int64 node_id = model_associator_->GetSyncIdFromSessionTag(
-      model_associator_->GetCurrentMachineTag());
-  ASSERT_FALSE(notified_of_update_);
-  {
-    syncer::WriteTransaction trans(FROM_HERE, sync_service_->GetUserShare());
-    change_processor_->ApplyChangesFromSyncModel(
-        &trans, 0,
-        ProfileSyncServiceTestHelper::MakeSingletonChangeRecordList(
-            node_id, ChangeRecord::ACTION_UPDATE));
-  }
-  ASSERT_TRUE(notified_of_update_);
-}
-
-// Test the DataTypeController on add.
-TEST_F(ProfileSyncServiceSessionTest, UpdatedSyncNodeActionAdd) {
-  CreateRootHelper create_root(this);
-  ASSERT_TRUE(StartSyncService(create_root.callback(), false));
-  ASSERT_TRUE(create_root.success());
-
-  int64 node_id = model_associator_->GetSyncIdFromSessionTag(
-      model_associator_->GetCurrentMachineTag());
-  ASSERT_FALSE(notified_of_update_);
-  {
-    syncer::WriteTransaction trans(FROM_HERE, sync_service_->GetUserShare());
-    change_processor_->ApplyChangesFromSyncModel(
-        &trans, 0,
-        ProfileSyncServiceTestHelper::MakeSingletonChangeRecordList(
-            node_id, ChangeRecord::ACTION_ADD));
-  }
-  ASSERT_TRUE(notified_of_update_);
-}
-
-// Test the DataTypeController on delete.
-TEST_F(ProfileSyncServiceSessionTest, UpdatedSyncNodeActionDelete) {
-  CreateRootHelper create_root(this);
-  ASSERT_TRUE(StartSyncService(create_root.callback(), false));
-  ASSERT_TRUE(create_root.success());
-
-  int64 node_id = model_associator_->GetSyncIdFromSessionTag(
-      model_associator_->GetCurrentMachineTag());
-  sync_pb::EntitySpecifics deleted_specifics;
-  deleted_specifics.mutable_session()->set_session_tag("tag");
-  ASSERT_FALSE(notified_of_update_);
-  {
-    syncer::WriteTransaction trans(FROM_HERE, sync_service_->GetUserShare());
-    change_processor_->ApplyChangesFromSyncModel(
-        &trans, 0,
-        ProfileSyncServiceTestHelper::MakeSingletonDeletionChangeRecordList(
-            node_id, deleted_specifics));
-  }
-  ASSERT_TRUE(notified_of_update_);
-}
-// Test the TabNodePool when it starts off empty.
-TEST_F(ProfileSyncServiceSessionTest, TabNodePoolEmpty) {
-  CreateRootHelper create_root(this);
-  ASSERT_TRUE(StartSyncService(create_root.callback(), false));
-  ASSERT_TRUE(create_root.success());
-
-  std::vector<int> node_ids;
-  ASSERT_EQ(0U, model_associator_->local_tab_pool_.Capacity());
-  ASSERT_TRUE(model_associator_->local_tab_pool_.Empty());
-  ASSERT_TRUE(model_associator_->local_tab_pool_.Full());
-  const size_t num_ids = 10;
-  for (size_t i = 0; i < num_ids; ++i) {
-    int id = model_associator_->local_tab_pool_.GetFreeTabNode();
-    ASSERT_GT(id, TabNodePool::kInvalidTabNodeID);
-    node_ids.push_back(id);
-    // Associate with a tab node.
-    model_associator_->local_tab_pool_.AssociateTabNode(id, i + 1);
-  }
-  ASSERT_EQ(num_ids, model_associator_->local_tab_pool_.Capacity());
-  ASSERT_TRUE(model_associator_->local_tab_pool_.Empty());
-  ASSERT_FALSE(model_associator_->local_tab_pool_.Full());
-  for (size_t i = 0; i < num_ids; ++i) {
-    model_associator_->local_tab_pool_.FreeTabNode(node_ids[i]);
-  }
-  ASSERT_EQ(num_ids, model_associator_->local_tab_pool_.Capacity());
-  ASSERT_FALSE(model_associator_->local_tab_pool_.Empty());
-  ASSERT_TRUE(model_associator_->local_tab_pool_.Full());
-}
-
-// TODO(jhorwich): Re-enable when crbug.com/121487 addressed
-TEST_F(ProfileSyncServiceSessionTest, TabNodePoolNonEmpty) {
-  CreateRootHelper create_root(this);
-  ASSERT_TRUE(StartSyncService(create_root.callback(), false));
-  ASSERT_TRUE(create_root.success());
-
-  const size_t num_starting_nodes = 3;
-  for (size_t i = 0; i < num_starting_nodes; ++i) {
-    size_t node_id = i + 1;
-    model_associator_->local_tab_pool_.AddTabNode(node_id);
-    model_associator_->local_tab_pool_.AssociateTabNode(node_id, i);
-    model_associator_->local_tab_pool_.FreeTabNode(node_id);
-  }
-
-  std::vector<int> node_ids;
-  ASSERT_EQ(num_starting_nodes, model_associator_->local_tab_pool_.Capacity());
-  ASSERT_FALSE(model_associator_->local_tab_pool_.Empty());
-  ASSERT_TRUE(model_associator_->local_tab_pool_.Full());
-  const size_t num_ids = 10;
-  for (size_t i = 0; i < num_ids; ++i) {
-    int id = model_associator_->local_tab_pool_.GetFreeTabNode();
-    ASSERT_GT(id, TabNodePool::kInvalidTabNodeID);
-    node_ids.push_back(id);
-    // Associate with a tab node.
-    model_associator_->local_tab_pool_.AssociateTabNode(id, i + 1);
-  }
-  ASSERT_EQ(num_ids, model_associator_->local_tab_pool_.Capacity());
-  ASSERT_TRUE(model_associator_->local_tab_pool_.Empty());
-  ASSERT_FALSE(model_associator_->local_tab_pool_.Full());
-  for (size_t i = 0; i < num_ids; ++i) {
-    model_associator_->local_tab_pool_.FreeTabNode(node_ids[i]);
-  }
-  ASSERT_EQ(num_ids, model_associator_->local_tab_pool_.Capacity());
-  ASSERT_FALSE(model_associator_->local_tab_pool_.Empty());
-  ASSERT_TRUE(model_associator_->local_tab_pool_.Full());
-}
-
-// Write a foreign session to a node, and then delete it.
-TEST_F(ProfileSyncServiceSessionTest, DeleteForeignSession) {
-  CreateRootHelper create_root(this);
-  ASSERT_TRUE(StartSyncService(create_root.callback(), false));
-  ASSERT_TRUE(create_root.success());
-
-  // Check that the DataTypeController associated the models.
-  bool has_nodes;
-  ASSERT_TRUE(model_associator_->SyncModelHasUserCreatedNodes(&has_nodes));
-  ASSERT_TRUE(has_nodes);
-
-  // A foreign session's tag.
-  std::string tag = "tag1";
-
-  // Should do nothing if the foreign session doesn't exist.
-  std::vector<const SyncedSession*> foreign_sessions;
-  ASSERT_FALSE(model_associator_->GetAllForeignSessions(&foreign_sessions));
-  ASSERT_FALSE(notified_of_update_);
-  model_associator_->DeleteForeignSession(tag);
-  ASSERT_FALSE(model_associator_->GetAllForeignSessions(&foreign_sessions));
-  // Verify that deleteForeignSession did not trigger the
-  // NOTIFICATION_FOREIGN_SESSION_DISABLED notification.
-  ASSERT_FALSE(notified_of_update_);
-
-  // Fill an instance of session specifics with a foreign session's data.
-  SessionID::id_type nums1[] = {5, 10, 13, 17};
-  std::vector<sync_pb::SessionSpecifics> tabs1;
-  std::vector<SessionID::id_type> tab_list1 (nums1, nums1 + arraysize(nums1));
-  sync_pb::SessionSpecifics meta(helper_.BuildForeignSession(
-      tag, tab_list1, &tabs1));
-
-  // Update associator with the session's meta node containing one window.
-  model_associator_->AssociateForeignSpecifics(meta, base::Time());
-  // Add tabs for the window.
-  for (std::vector<sync_pb::SessionSpecifics>::iterator iter = tabs1.begin();
-       iter != tabs1.end(); ++iter) {
-    model_associator_->AssociateForeignSpecifics(*iter, base::Time());
-  }
-
-  // Check that the foreign session was associated and retrieve the data.
-  ASSERT_TRUE(model_associator_->GetAllForeignSessions(&foreign_sessions));
-  ASSERT_EQ(1U, foreign_sessions.size());
-  std::vector<std::vector<SessionID::id_type> > session_reference;
-  session_reference.push_back(tab_list1);
-  helper_.VerifySyncedSession(tag, session_reference, *(foreign_sessions[0]));
-
-  ASSERT_FALSE(notified_of_update_);
-  // Now delete the foreign session.
-  model_associator_->DeleteForeignSession(tag);
-  ASSERT_FALSE(model_associator_->GetAllForeignSessions(&foreign_sessions));
-
-  // Verify that deleteForeignSession triggers the
-  // NOTIFICATION_FOREIGN_SESSION_DISABLED notification.
-  ASSERT_TRUE(notified_of_update_);
-}
-
-// Associate both a non-stale foreign session and a stale foreign session.
-// Ensure only the stale session gets deleted.
-TEST_F(ProfileSyncServiceSessionTest, DeleteStaleSessions) {
-  CreateRootHelper create_root(this);
-  ASSERT_TRUE(StartSyncService(create_root.callback(), false));
-  ASSERT_TRUE(create_root.success());
-
-  // Fill two instances of session specifics with a foreign session's data.
-  std::string tag = "tag1";
-  SessionID::id_type nums1[] = {5, 10, 13, 17};
-  std::vector<sync_pb::SessionSpecifics> tabs1;
-  std::vector<SessionID::id_type> tab_list1 (nums1, nums1 + arraysize(nums1));
-  sync_pb::SessionSpecifics meta(helper_.BuildForeignSession(
-      tag, tab_list1, &tabs1));
-  std::string tag2 = "tag2";
-  sync_pb::SessionSpecifics meta2;
-  helper_.BuildSessionSpecifics(tag2, &meta2);
-  SessionID::id_type tab_nums2[] = {8, 15, 18, 20};
-  std::vector<SessionID::id_type> tab_list2(
-      tab_nums2, tab_nums2 + arraysize(tab_nums2));
-  helper_.AddWindowSpecifics(0, tab_list2, &meta2);
-  std::vector<sync_pb::SessionSpecifics> tabs2;
-  tabs2.resize(tab_list2.size());
-  for (size_t i = 0; i < tab_list2.size(); ++i) {
-    helper_.BuildTabSpecifics(tag2, 0, tab_list2[i], &tabs2[i]);
-  }
-
-  // Set the modification time for tag1 to be 21 days ago, tag2 to 5 days ago.
-  base::Time tag1_time = base::Time::Now() - base::TimeDelta::FromDays(21);
-  base::Time tag2_time = base::Time::Now() - base::TimeDelta::FromDays(5);
-
-  // Associate specifics.
-  model_associator_->AssociateForeignSpecifics(meta, tag1_time);
-  for (std::vector<sync_pb::SessionSpecifics>::iterator iter = tabs1.begin();
-       iter != tabs1.end(); ++iter) {
-    model_associator_->AssociateForeignSpecifics(*iter, tag1_time);
-  }
-  model_associator_->AssociateForeignSpecifics(meta2, tag2_time);
-  for (std::vector<sync_pb::SessionSpecifics>::iterator iter = tabs2.begin();
-       iter != tabs2.end(); ++iter) {
-    model_associator_->AssociateForeignSpecifics(*iter, tag2_time);
-  }
-
-  // Check that the foreign session was associated and retrieve the data.
-  std::vector<const SyncedSession*> foreign_sessions;
-  ASSERT_TRUE(model_associator_->GetAllForeignSessions(&foreign_sessions));
-  ASSERT_EQ(2U, foreign_sessions.size());
-
-  // Now delete the stale session and verify the non-stale one is still there.
-  model_associator_->DeleteStaleSessions();
-  ASSERT_TRUE(model_associator_->GetAllForeignSessions(&foreign_sessions));
-  ASSERT_EQ(1U, foreign_sessions.size());
-  std::vector<std::vector<SessionID::id_type> > session_reference;
-  session_reference.push_back(tab_list2);
-  helper_.VerifySyncedSession(tag2, session_reference, *(foreign_sessions[0]));
-}
-
-// Write a stale foreign session to a node. Then update one of its tabs so
-// the session is no longer stale. Ensure it doesn't get deleted.
-TEST_F(ProfileSyncServiceSessionTest, StaleSessionRefresh) {
-  CreateRootHelper create_root(this);
-  ASSERT_TRUE(StartSyncService(create_root.callback(), false));
-  ASSERT_TRUE(create_root.success());
-
-  std::string tag = "tag1";
-  SessionID::id_type nums1[] = {5, 10, 13, 17};
-  std::vector<sync_pb::SessionSpecifics> tabs1;
-  std::vector<SessionID::id_type> tab_list1 (nums1, nums1 + arraysize(nums1));
-  sync_pb::SessionSpecifics meta(helper_.BuildForeignSession(
-      tag, tab_list1, &tabs1));
-
-  // Associate.
-  base::Time stale_time = base::Time::Now() - base::TimeDelta::FromDays(21);
-  model_associator_->AssociateForeignSpecifics(meta, stale_time);
-  for (std::vector<sync_pb::SessionSpecifics>::iterator iter = tabs1.begin();
-       iter != tabs1.end(); ++iter) {
-    model_associator_->AssociateForeignSpecifics(*iter, stale_time);
-  }
-
-  // Associate one of the tabs with a non-stale time.
-  model_associator_->AssociateForeignSpecifics(tabs1[0], base::Time::Now());
-
-  // Check that the foreign session was associated and retrieve the data.
-  std::vector<const SyncedSession*> foreign_sessions;
-  ASSERT_TRUE(model_associator_->GetAllForeignSessions(&foreign_sessions));
-  ASSERT_EQ(1U, foreign_sessions.size());
-
-  // Verify the now non-stale session does not get deleted.
-  model_associator_->DeleteStaleSessions();
-  ASSERT_TRUE(model_associator_->GetAllForeignSessions(&foreign_sessions));
-  ASSERT_EQ(1U, foreign_sessions.size());
-  std::vector<std::vector<SessionID::id_type> > session_reference;
-  session_reference.push_back(tab_list1);
-  helper_.VerifySyncedSession(tag, session_reference, *(foreign_sessions[0]));
-}
-
-// Crashes sometimes on Windows, particularly XP.
-// See http://crbug.com/174951
-#if defined(OS_WIN)
-#define MAYBE_ValidTabs DISABLED_ValidTabs
-#else
-#define MAYBE_ValidTabs ValidTabs
-#endif  // defined(OS_WIN)
-
-// Test that tabs with nothing but "chrome://*" and "file://*" navigations are
-// not be synced.
-TEST_F(ProfileSyncServiceSessionTest, MAYBE_ValidTabs) {
-  CreateRootHelper create_root(this);
-  ASSERT_TRUE(StartSyncService(create_root.callback(), false));
-  ASSERT_TRUE(create_root.success());
-
-  AddTab(browser(), GURL("chrome://bla1/"));
-  NavigateAndCommitActiveTab(GURL("chrome://bla2"));
-  AddTab(browser(), GURL("file://bla3/"));
-  AddTab(browser(), GURL("bla://bla"));
-  // Note: chrome://newtab has special handling which crashes in unit tests.
-
-  // Get the tabs for this machine. Only the bla:// url should be synced.
-  SessionModelAssociator::TabLinksMap tab_map =
-      model_associator_->local_tab_map_;
-  ASSERT_EQ(1U, tab_map.size());
-  SessionModelAssociator::TabLinksMap::iterator iter = tab_map.begin();
-  ASSERT_EQ(1, iter->second->tab()->GetEntryCount());
-  ASSERT_EQ(GURL("bla://bla"), iter->second->tab()->
-      GetEntryAtIndex(0)->GetVirtualURL());
-}
-
-// Verify that AttemptSessionsDataRefresh triggers the
-// NOTIFICATION_SYNC_REFRESH_LOCAL notification.
-// TODO(zea): Once we can have unit tests that are able to open to the NTP,
-// test that the NTP/#opentabs URL triggers a refresh as well (but only when
-// it is the active tab).
-TEST_F(ProfileSyncServiceSessionTest, SessionsRefresh) {
-  CreateRootHelper create_root(this);
-  ASSERT_TRUE(StartSyncService(create_root.callback(), false));
-  ASSERT_TRUE(create_root.success());
-
-  // Empty, so returns false.
-  std::vector<const SyncedSession*> foreign_sessions;
-  ASSERT_FALSE(model_associator_->GetAllForeignSessions(&foreign_sessions));
-  ASSERT_FALSE(notified_of_refresh_);
-  model_associator_->AttemptSessionsDataRefresh();
-  ASSERT_TRUE(notified_of_refresh_);
-
-  // Nothing should have changed since we don't have unapplied data.
-  ASSERT_FALSE(model_associator_->GetAllForeignSessions(&foreign_sessions));
-}
-
-// Ensure model association associates the pre-existing tabs.
-TEST_F(ProfileSyncServiceSessionTest, ExistingTabs) {
-  AddTab(browser(), GURL("http://foo1"));
-  NavigateAndCommitActiveTab(GURL("http://foo2"));
-  AddTab(browser(), GURL("http://bar1"));
-  NavigateAndCommitActiveTab(GURL("http://bar2"));
-
-  CreateRootHelper create_root(this);
-  ASSERT_TRUE(StartSyncService(create_root.callback(), false));
-  ASSERT_TRUE(create_root.success());
-  bool has_nodes;
-  ASSERT_TRUE(model_associator_->SyncModelHasUserCreatedNodes(&has_nodes));
-  ASSERT_TRUE(has_nodes);
-
-  std::string machine_tag = model_associator_->GetCurrentMachineTag();
-  int64 sync_id = model_associator_->GetSyncIdFromSessionTag(machine_tag);
-  ASSERT_NE(syncer::kInvalidId, sync_id);
-
-  // Check that this machine's data is not included in the foreign windows.
-  std::vector<const SyncedSession*> foreign_sessions;
-  ASSERT_FALSE(model_associator_->GetAllForeignSessions(&foreign_sessions));
-  ASSERT_EQ(foreign_sessions.size(), 0U);
-
-  // Get the tabs for this machine from the node and check that they were
-  // filled.
-  SessionModelAssociator::TabLinksMap tab_map =
-      model_associator_->local_tab_map_;
-  ASSERT_EQ(2U, tab_map.size());
-  // Tabs are ordered by sessionid in tab_map, so should be able to traverse
-  // the tree based on order of tabs created
-  SessionModelAssociator::TabLinksMap::iterator iter = tab_map.begin();
-  ASSERT_EQ(2, iter->second->tab()->GetEntryCount());
-  ASSERT_EQ(GURL("http://foo1"), iter->second->tab()->
-          GetEntryAtIndex(0)->GetVirtualURL());
-  ASSERT_EQ(GURL("http://foo2"), iter->second->tab()->
-          GetEntryAtIndex(1)->GetVirtualURL());
-  iter++;
-  ASSERT_EQ(2, iter->second->tab()->GetEntryCount());
-  ASSERT_EQ(GURL("http://bar1"), iter->second->tab()->
-      GetEntryAtIndex(0)->GetVirtualURL());
-  ASSERT_EQ(GURL("http://bar2"), iter->second->tab()->
-      GetEntryAtIndex(1)->GetVirtualURL());
-}
-
-TEST_F(ProfileSyncServiceSessionTest, MissingHeaderAndTab) {
-  AddTab(browser(), GURL("http://foo1"));
-  NavigateAndCommitActiveTab(GURL("http://foo2"));
-  AddTab(browser(), GURL("http://bar1"));
-  NavigateAndCommitActiveTab(GURL("http://bar2"));
-  CreateRootHelper create_root(this);
-  ASSERT_TRUE(StartSyncService(create_root.callback(), false));
-  syncer::SyncError error;
-  std::string local_tag = model_associator_->GetCurrentMachineTag();
-
-  error = model_associator_->DisassociateModels();
-  ASSERT_FALSE(error.IsSet());
-  {
-    // Create a sync node with the local tag but neither header nor tab field.
-    syncer::WriteTransaction trans(FROM_HERE, sync_service_->GetUserShare());
-    syncer::ReadNode root(&trans);
-    root.InitByTagLookup(syncer::ModelTypeToRootTag(syncer::SESSIONS));
-    syncer::WriteNode extra_header(&trans);
-    syncer::WriteNode::InitUniqueByCreationResult result =
-        extra_header.InitUniqueByCreation(syncer::SESSIONS, root, "new_tag");
-    ASSERT_EQ(syncer::WriteNode::INIT_SUCCESS, result);
-    sync_pb::SessionSpecifics specifics;
-    specifics.set_session_tag(local_tag);
-    extra_header.SetSessionSpecifics(specifics);
-  }
-
-  error = model_associator_->AssociateModels(NULL, NULL);
-  ASSERT_FALSE(error.IsSet());
-}
-
-TEST_F(ProfileSyncServiceSessionTest, MultipleHeaders) {
-  AddTab(browser(), GURL("http://foo1"));
-  NavigateAndCommitActiveTab(GURL("http://foo2"));
-  AddTab(browser(), GURL("http://bar1"));
-  NavigateAndCommitActiveTab(GURL("http://bar2"));
-  CreateRootHelper create_root(this);
-  ASSERT_TRUE(StartSyncService(create_root.callback(), false));
-  syncer::SyncError error;
-  std::string local_tag = model_associator_->GetCurrentMachineTag();
-
-  error = model_associator_->DisassociateModels();
-  ASSERT_FALSE(error.IsSet());
-  {
-    // Create another sync node with a header field and the local tag.
-    syncer::WriteTransaction trans(FROM_HERE, sync_service_->GetUserShare());
-    syncer::ReadNode root(&trans);
-    root.InitByTagLookup(syncer::ModelTypeToRootTag(syncer::SESSIONS));
-    syncer::WriteNode extra_header(&trans);
-    syncer::WriteNode::InitUniqueByCreationResult result =
-        extra_header.InitUniqueByCreation(syncer::SESSIONS,
-                                          root, local_tag + "_");
-    ASSERT_EQ(syncer::WriteNode::INIT_SUCCESS, result);
-    sync_pb::SessionSpecifics specifics;
-    specifics.set_session_tag(local_tag);
-    specifics.mutable_header();
-    extra_header.SetSessionSpecifics(specifics);
-  }
-  error = model_associator_->AssociateModels(NULL, NULL);
-  ASSERT_FALSE(error.IsSet());
-}
-
-TEST_F(ProfileSyncServiceSessionTest, CorruptedForeign) {
-  AddTab(browser(), GURL("http://foo1"));
-  NavigateAndCommitActiveTab(GURL("http://foo2"));
-  AddTab(browser(), GURL("http://bar1"));
-  NavigateAndCommitActiveTab(GURL("http://bar2"));
-  CreateRootHelper create_root(this);
-  ASSERT_TRUE(StartSyncService(create_root.callback(), false));
-  syncer::SyncError error;
-
-  error = model_associator_->DisassociateModels();
-  ASSERT_FALSE(error.IsSet());
-  {
-    // Create another sync node with neither header nor tab field and a foreign
-    // tag.
-    std::string foreign_tag = "foreign_tag";
-    syncer::WriteTransaction trans(FROM_HERE, sync_service_->GetUserShare());
-    syncer::ReadNode root(&trans);
-    root.InitByTagLookup(syncer::ModelTypeToRootTag(syncer::SESSIONS));
-    syncer::WriteNode extra_header(&trans);
-    syncer::WriteNode::InitUniqueByCreationResult result =
-        extra_header.InitUniqueByCreation(syncer::SESSIONS,
-                                          root, foreign_tag);
-    ASSERT_EQ(syncer::WriteNode::INIT_SUCCESS, result);
-    sync_pb::SessionSpecifics specifics;
-    specifics.set_session_tag(foreign_tag);
-    extra_header.SetSessionSpecifics(specifics);
-  }
-  error = model_associator_->AssociateModels(NULL, NULL);
-  ASSERT_FALSE(error.IsSet());
-}
-
-TEST_F(ProfileSyncServiceSessionTest, MissingLocalTabNode) {
-  AddTab(browser(), GURL("http://foo1"));
-  NavigateAndCommitActiveTab(GURL("http://foo2"));
-  AddTab(browser(), GURL("http://bar1"));
-  NavigateAndCommitActiveTab(GURL("http://bar2"));
-  CreateRootHelper create_root(this);
-  ASSERT_TRUE(StartSyncService(create_root.callback(), false));
-  std::string local_tag = model_associator_->GetCurrentMachineTag();
-  syncer::SyncError error;
-
-  error = model_associator_->DisassociateModels();
-  ASSERT_FALSE(error.IsSet());
-  {
-    // Delete the first sync tab node.
-    std::string tab_tag = TabNodePool::TabIdToTag(local_tag, 1);
-
-    syncer::WriteTransaction trans(FROM_HERE, sync_service_->GetUserShare());
-    syncer::ReadNode root(&trans);
-    root.InitByTagLookup(syncer::ModelTypeToRootTag(syncer::SESSIONS));
-    syncer::WriteNode tab_node(&trans);
-    ASSERT_EQ(syncer::BaseNode::INIT_OK,
-              tab_node.InitByClientTagLookup(syncer::SESSIONS, tab_tag));
-    tab_node.Tombstone();
-  }
-  error = model_associator_->AssociateModels(NULL, NULL);
-  ASSERT_FALSE(error.IsSet());
-
-  // Add some more tabs to ensure we don't conflict with the pre-existing tab
-  // node.
-  AddTab(browser(), GURL("http://baz1"));
-  AddTab(browser(), GURL("http://baz2"));
-}
-
-TEST_F(ProfileSyncServiceSessionTest, Favicons) {
-    CreateRootHelper create_root(this);
-  ASSERT_TRUE(StartSyncService(create_root.callback(), false));
-  ASSERT_TRUE(create_root.success());
-
-  // Build a foreign session with one window and one tab.
-  std::string tag = "tag1";
-  sync_pb::SessionSpecifics meta;
-  helper_.BuildSessionSpecifics(tag, &meta);
-  std::vector<SessionID::id_type> tab_list;
-  tab_list.push_back(5);
-  helper_.AddWindowSpecifics(0, tab_list, &meta);
-  sync_pb::SessionSpecifics tab;
-  helper_.BuildTabSpecifics(tag, 0, tab_list[0], &tab);
-  std::string url = tab.tab().navigation(0).virtual_url();
-  scoped_refptr<base::RefCountedMemory> favicon;
-
-  // Update associator.
-  model_associator_->AssociateForeignSpecifics(meta, base::Time());
-  model_associator_->AssociateForeignSpecifics(tab, base::Time());
-  base::RunLoop().RunUntilIdle();
-  ASSERT_FALSE(model_associator_->GetSyncedFaviconForPageURL(url, &favicon));
-
-  // Now add a favicon.
-  tab.mutable_tab()->set_favicon_source("http://favicon_source.com/png.ico");
-  tab.mutable_tab()->set_favicon_type(sync_pb::SessionTab::TYPE_WEB_FAVICON);
-  tab.mutable_tab()->set_favicon("data");
-  model_associator_->AssociateForeignSpecifics(tab, base::Time());
-  base::RunLoop().RunUntilIdle();
-  ASSERT_TRUE(model_associator_->GetSyncedFaviconForPageURL(url, &favicon));
-  ASSERT_TRUE(CompareMemoryToString("data", favicon));
-
-  // Simulate navigating away. The associator should not delete the favicon.
-  tab.mutable_tab()->clear_navigation();
-  tab.mutable_tab()->add_navigation()->set_virtual_url("http://new_url.com");
-  tab.mutable_tab()->clear_favicon_source();
-  tab.mutable_tab()->clear_favicon_type();
-  tab.mutable_tab()->clear_favicon();
-  model_associator_->AssociateForeignSpecifics(tab, base::Time());
-  base::RunLoop().RunUntilIdle();
-  ASSERT_TRUE(model_associator_->GetSyncedFaviconForPageURL(url, &favicon));
-}
-
-TEST_F(ProfileSyncServiceSessionTest, CorruptedLocalHeader) {
-  AddTab(browser(), GURL("http://foo1"));
-  NavigateAndCommitActiveTab(GURL("http://foo2"));
-  AddTab(browser(), GURL("http://bar1"));
-  NavigateAndCommitActiveTab(GURL("http://bar2"));
-  CreateRootHelper create_root(this);
-  ASSERT_TRUE(StartSyncService(create_root.callback(), false));
-  std::string local_tag = model_associator_->GetCurrentMachineTag();
-  syncer::SyncError error;
-
-  error = model_associator_->DisassociateModels();
-  ASSERT_FALSE(error.IsSet());
-  {
-    // Load the header node and clear it.
-    syncer::WriteTransaction trans(FROM_HERE, sync_service_->GetUserShare());
-    syncer::WriteNode header(&trans);
-    ASSERT_EQ(syncer::BaseNode::INIT_OK,
-              header.InitByClientTagLookup(syncer::SESSIONS, local_tag));
-    sync_pb::SessionSpecifics specifics;
-    header.SetSessionSpecifics(specifics);
-  }
-  // Ensure we associate properly despite the pre-existing node with our local
-  // tag.
-  error = model_associator_->AssociateModels(NULL, NULL);
-  ASSERT_FALSE(error.IsSet());
-}
-
-TEST_F(ProfileSyncServiceSessionTest, CheckPrerenderedWebContentsSwap) {
-  AddTab(browser(), GURL("http://foo1"));
-  NavigateAndCommitActiveTab(GURL("http://foo2"));
-  CreateRootHelper create_root(this);
-  // Test setup.
-  ASSERT_TRUE(StartSyncService(create_root.callback(), false));
-
-  syncer::SyncError error;
-  // Initial association.
-  EXPECT_TRUE(model_associator_->AssociateWindows(true, &error));
-  ASSERT_FALSE(error.IsSet());
-
-  // To simulate WebContents swap during prerendering, create new WebContents
-  // and swap with old WebContents.
-  content::WebContents* old_web_contents =
-      browser()->tab_strip_model()->GetActiveWebContents();
-
-  // Create new WebContents, with the required tab helpers.
-  WebContents* new_web_contents = WebContents::CreateWithSessionStorage(
-      WebContents::CreateParams(profile()),
-      old_web_contents->GetController().GetSessionStorageNamespaceMap());
-  SessionTabHelper::CreateForWebContents(new_web_contents);
-  TabContentsSyncedTabDelegate::CreateForWebContents(new_web_contents);
-  new_web_contents->GetController()
-      .CopyStateFrom(old_web_contents->GetController());
-
-  // Swap the WebContents.
-  int index =
-      browser()->tab_strip_model()->GetIndexOfWebContents(old_web_contents);
-  browser()->tab_strip_model()->ReplaceWebContentsAt(index, new_web_contents);
-
-  EXPECT_TRUE(model_associator_->AssociateWindows(true, &error));
-  ASSERT_FALSE(error.IsSet());
-  // Navigate away.
-  NavigateAndCommitActiveTab(GURL("http://bar2"));
-  EXPECT_TRUE(model_associator_->AssociateWindows(true, &error));
-  ASSERT_FALSE(error.IsSet());
-
-  // Delete old WebContents. This should not crash.
-  delete old_web_contents;
-  EXPECT_TRUE(model_associator_->AssociateWindows(true, &error));
-  ASSERT_FALSE(error.IsSet());
-
-  // Try more navigations to make sure everything if fine.
-  NavigateAndCommitActiveTab(GURL("http://bar3"));
-  EXPECT_TRUE(model_associator_->AssociateWindows(true, &error));
-  ASSERT_FALSE(error.IsSet());
-
-  AddTab(browser(), GURL("http://bar4"));
-  EXPECT_TRUE(model_associator_->AssociateWindows(true, &error));
-  ASSERT_FALSE(error.IsSet());
-  NavigateAndCommitActiveTab(GURL("http://bar5"));
-  EXPECT_TRUE(model_associator_->AssociateWindows(true, &error));
-  ASSERT_FALSE(error.IsSet());
-}
-
-TEST_F(ProfileSyncServiceSessionTest, TabPoolFreeNodeLimits) {
-  CreateRootHelper create_root(this);
-  ASSERT_TRUE(StartSyncService(create_root.callback(), false));
-  ASSERT_TRUE(create_root.success());
-
-  // Allocate TabNodePool::kFreeNodesHighWatermark + 1 nodes and verify that
-  // freeing the last node reduces the free node pool size to
-  // kFreeNodesLowWatermark.
-
-  SessionID session_id;
-  std::vector<int> used_sync_ids;
-  for (size_t i = 1; i <= TabNodePool::kFreeNodesHighWatermark + 1; ++i) {
-    session_id.set_id(i);
-    int sync_id = model_associator_->local_tab_pool_.GetFreeTabNode();
-    model_associator_->local_tab_pool_.AssociateTabNode(sync_id, i);
-    used_sync_ids.push_back(sync_id);
-  }
-
-  // Free all except one node.
-  int last_sync_id = used_sync_ids.back();
-  used_sync_ids.pop_back();
-
-  for (size_t i = 0; i < used_sync_ids.size(); ++i) {
-    model_associator_->local_tab_pool_.FreeTabNode(used_sync_ids[i]);
-  }
-
-  // Except one node all nodes should be in FreeNode pool.
-  EXPECT_FALSE(model_associator_->local_tab_pool_.Full());
-  EXPECT_FALSE(model_associator_->local_tab_pool_.Empty());
-  // Total capacity = 1 Associated Node + kFreeNodesHighWatermark free node.
-  EXPECT_EQ(TabNodePool::kFreeNodesHighWatermark + 1,
-            model_associator_->local_tab_pool_.Capacity());
-
-  // Freeing the last sync node should drop the free nodes to
-  // kFreeNodesLowWatermark.
-  model_associator_->local_tab_pool_.FreeTabNode(last_sync_id);
-  EXPECT_FALSE(model_associator_->local_tab_pool_.Empty());
-  EXPECT_TRUE(model_associator_->local_tab_pool_.Full());
-  EXPECT_EQ(TabNodePool::kFreeNodesLowWatermark,
-            model_associator_->local_tab_pool_.Capacity());
-}
-
-TEST_F(ProfileSyncServiceSessionTest, TabNodePoolDeleteUnassociatedNodes) {
-  CreateRootHelper create_root(this);
-  ASSERT_TRUE(StartSyncService(create_root.callback(), false));
-  std::string local_tag = model_associator_->GetCurrentMachineTag();
-  syncer::SyncError error;
-  // Create a free node and then dissassociate sessions so that it ends up
-  // unassociated.
-  int tab_node_id = model_associator_->local_tab_pool_.GetFreeTabNode();
-  // Update the tab_id of the node, so that it is considered a valid
-  // unassociated node otherwise it will be mistaken for a corrupted node and
-  // will be deleted before being added to the tab node pool.
-  {
-    std::string tab_tag = TabNodePool::TabIdToTag(local_tag, tab_node_id);
-    syncer::WriteTransaction trans(FROM_HERE, sync_service_->GetUserShare());
-    syncer::WriteNode tab_node(&trans);
-    ASSERT_EQ(syncer::BaseNode::INIT_OK,
-              tab_node.InitByClientTagLookup(syncer::SESSIONS, tab_tag));
-    sync_pb::SessionSpecifics specifics = tab_node.GetSessionSpecifics();
-    sync_pb::SessionTab* tab = specifics.mutable_tab();
-    tab->set_tab_id(1);
-    tab_node.SetSessionSpecifics(specifics);
-  }
-
-  error = model_associator_->DisassociateModels();
-  ASSERT_FALSE(error.IsSet());
-  error = model_associator_->AssociateModels(NULL, NULL);
-  ASSERT_FALSE(error.IsSet());
-}
-
-}  // namespace browser_sync
diff --git a/chrome/browser/sync/sessions/notification_service_sessions_router.cc b/chrome/browser/sync/sessions/notification_service_sessions_router.cc
new file mode 100644
index 0000000..d1ab522
--- /dev/null
+++ b/chrome/browser/sync/sessions/notification_service_sessions_router.cc
@@ -0,0 +1,163 @@
+// 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.
+
+#include "chrome/browser/sync/sessions/notification_service_sessions_router.h"
+
+#include "base/logging.h"
+#include "chrome/browser/chrome_notification_types.h"
+#include "chrome/browser/extensions/tab_helper.h"
+#include "chrome/browser/favicon/favicon_changed_details.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/sync/glue/sync_start_util.h"
+#include "chrome/browser/sync/glue/synced_tab_delegate.h"
+#include "chrome/browser/sync/sessions/sessions_util.h"
+#include "chrome/browser/ui/browser.h"
+#include "content/public/browser/navigation_controller.h"
+#include "content/public/browser/navigation_entry.h"
+#include "content/public/browser/notification_details.h"
+#include "content/public/browser/notification_service.h"
+#include "content/public/browser/notification_source.h"
+#include "content/public/browser/web_contents.h"
+
+#if defined(ENABLE_MANAGED_USERS)
+#include "chrome/browser/managed_mode/managed_user_service.h"
+#include "chrome/browser/managed_mode/managed_user_service_factory.h"
+#endif
+
+using content::NavigationController;
+using content::WebContents;
+
+namespace browser_sync {
+
+NotificationServiceSessionsRouter::NotificationServiceSessionsRouter(
+    Profile* profile, const syncer::SyncableService::StartSyncFlare& flare)
+        : handler_(NULL),
+          profile_(profile),
+          flare_(flare),
+          weak_ptr_factory_(this) {
+
+  registrar_.Add(this, chrome::NOTIFICATION_TAB_PARENTED,
+      content::NotificationService::AllSources());
+  registrar_.Add(this, content::NOTIFICATION_WEB_CONTENTS_DESTROYED,
+      content::NotificationService::AllSources());
+  registrar_.Add(this, content::NOTIFICATION_NAV_LIST_PRUNED,
+      content::NotificationService::AllSources());
+  registrar_.Add(this, content::NOTIFICATION_NAV_ENTRY_CHANGED,
+      content::NotificationService::AllSources());
+  registrar_.Add(this, content::NOTIFICATION_NAV_ENTRY_COMMITTED,
+      content::NotificationService::AllSources());
+  registrar_.Add(this,
+      chrome::NOTIFICATION_TAB_CONTENTS_APPLICATION_EXTENSION_CHANGED,
+      content::NotificationService::AllSources());
+  registrar_.Add(this,
+      content::NOTIFICATION_LOAD_COMPLETED_MAIN_FRAME,
+      content::NotificationService::AllBrowserContextsAndSources());
+  registrar_.Add(this, chrome::NOTIFICATION_FAVICON_CHANGED,
+      content::Source<Profile>(profile_));
+#if defined(ENABLE_MANAGED_USERS)
+  if (profile_->IsManaged()) {
+    ManagedUserService* managed_user_service =
+        ManagedUserServiceFactory::GetForProfile(profile_);
+    managed_user_service->AddNavigationBlockedCallback(
+        base::Bind(&NotificationServiceSessionsRouter::OnNavigationBlocked,
+                   weak_ptr_factory_.GetWeakPtr()));
+  }
+#endif
+}
+
+NotificationServiceSessionsRouter::~NotificationServiceSessionsRouter() {}
+
+void NotificationServiceSessionsRouter::Observe(
+    int type,
+    const content::NotificationSource& source,
+    const content::NotificationDetails& details) {
+  switch (type) {
+    case chrome::NOTIFICATION_FAVICON_CHANGED: {
+      content::Details<FaviconChangedDetails> favicon_details(details);
+      if (handler_)
+        handler_->OnFaviconPageUrlsUpdated(favicon_details->urls);
+      return;
+    }
+    // Source<WebContents>.
+    case chrome::NOTIFICATION_TAB_PARENTED:
+    case content::NOTIFICATION_LOAD_COMPLETED_MAIN_FRAME:
+    case content::NOTIFICATION_WEB_CONTENTS_DESTROYED: {
+      WebContents* web_contents = content::Source<WebContents>(source).ptr();
+      SyncedTabDelegate* tab =
+          SyncedTabDelegate::ImplFromWebContents(web_contents);
+      if (!tab || tab->profile() != profile_)
+        return;
+      if (handler_)
+        handler_->OnLocalTabModified(tab);
+      if (!sessions_util::ShouldSyncTab(*tab))
+        return;
+      break;
+    }
+    // Source<NavigationController>.
+    case content::NOTIFICATION_NAV_LIST_PRUNED:
+    case content::NOTIFICATION_NAV_ENTRY_CHANGED:
+    case content::NOTIFICATION_NAV_ENTRY_COMMITTED: {
+      SyncedTabDelegate* tab = SyncedTabDelegate::ImplFromWebContents(
+          content::Source<NavigationController>(source).ptr()->
+              GetWebContents());
+      if (!tab || tab->profile() != profile_)
+        return;
+      if (handler_)
+        handler_->OnLocalTabModified(tab);
+      if (!sessions_util::ShouldSyncTab(*tab))
+        return;
+      break;
+    }
+    case chrome::NOTIFICATION_TAB_CONTENTS_APPLICATION_EXTENSION_CHANGED: {
+      extensions::TabHelper* extension_tab_helper =
+          content::Source<extensions::TabHelper>(source).ptr();
+      if (extension_tab_helper->web_contents()->GetBrowserContext() !=
+              profile_) {
+        return;
+      }
+      if (extension_tab_helper->extension_app()) {
+        SyncedTabDelegate* tab = SyncedTabDelegate::ImplFromWebContents(
+            extension_tab_helper->web_contents());
+        if (!tab || tab->profile() != profile_)
+          return;
+        if (handler_)
+          handler_->OnLocalTabModified(tab);
+        break;
+      }
+      return;
+    }
+    default:
+      LOG(ERROR) << "Received unexpected notification of type " << type;
+      return;
+  }
+
+  if (!flare_.is_null()) {
+    flare_.Run(syncer::SESSIONS);
+    flare_.Reset();
+  }
+}
+
+void NotificationServiceSessionsRouter::OnNavigationBlocked(
+    content::WebContents* web_contents) {
+  SyncedTabDelegate* tab =
+      SyncedTabDelegate::ImplFromWebContents(web_contents);
+  if (!tab || !handler_)
+    return;
+
+  DCHECK(tab->profile() == profile_);
+  handler_->OnLocalTabModified(tab);
+}
+
+void NotificationServiceSessionsRouter::StartRoutingTo(
+    LocalSessionEventHandler* handler) {
+  DCHECK(!handler_);
+  handler_ = handler;
+}
+
+void NotificationServiceSessionsRouter::Stop() {
+  weak_ptr_factory_.InvalidateWeakPtrs();
+  handler_ = NULL;
+}
+
+}  // namespace browser_sync
diff --git a/chrome/browser/sync/sessions/notification_service_sessions_router.h b/chrome/browser/sync/sessions/notification_service_sessions_router.h
new file mode 100644
index 0000000..85df6f9
--- /dev/null
+++ b/chrome/browser/sync/sessions/notification_service_sessions_router.h
@@ -0,0 +1,61 @@
+// 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.
+
+#ifndef CHROME_BROWSER_SYNC_SESSIONS_NOTIFICATION_SERVICE_SESSIONS_ROUTER_H_
+#define CHROME_BROWSER_SYNC_SESSIONS_NOTIFICATION_SERVICE_SESSIONS_ROUTER_H_
+
+#include "base/memory/weak_ptr.h"
+#include "chrome/browser/sync/sessions/sessions_sync_manager.h"
+#include "content/public/browser/notification_observer.h"
+#include "content/public/browser/notification_registrar.h"
+
+class Profile;
+
+namespace content {
+class WebContents;
+}
+
+namespace browser_sync {
+
+// A SessionsSyncManager::LocalEventRouter that drives session sync via
+// the NotificationService.
+class NotificationServiceSessionsRouter
+    : public LocalSessionEventRouter,
+      public content::NotificationObserver {
+ public:
+  NotificationServiceSessionsRouter(
+      Profile* profile,
+      const syncer::SyncableService::StartSyncFlare& flare);
+  virtual ~NotificationServiceSessionsRouter();
+
+  // content::NotificationObserver implementation.
+  // BrowserSessionProvider -> sync API model change application.
+  virtual void Observe(int type,
+                       const content::NotificationSource& source,
+                       const content::NotificationDetails& details) OVERRIDE;
+
+  // SessionsSyncManager::LocalEventRouter implementation.
+  virtual void StartRoutingTo(LocalSessionEventHandler* handler) OVERRIDE;
+  virtual void Stop() OVERRIDE;
+
+ private:
+  // Called when the URL visited in |web_contents| was blocked by the
+  // ManagedUserService. We forward this on to our handler_ via the
+  // normal OnLocalTabModified, but pass through here via a WeakPtr
+  // callback from ManagedUserService and to extract the tab delegate
+  // from WebContents.
+  void OnNavigationBlocked(content::WebContents* web_contents);
+
+  LocalSessionEventHandler* handler_;
+  content::NotificationRegistrar registrar_;
+  Profile* const profile_;
+  syncer::SyncableService::StartSyncFlare flare_;
+  base::WeakPtrFactory<NotificationServiceSessionsRouter> weak_ptr_factory_;
+
+  DISALLOW_COPY_AND_ASSIGN(NotificationServiceSessionsRouter);
+};
+
+}  // namespace browser_sync
+
+#endif  // CHROME_BROWSER_SYNC_SESSIONS_NOTIFICATION_SERVICE_SESSIONS_ROUTER_H_
diff --git a/chrome/browser/sync/sessions/session_data_type_controller.cc b/chrome/browser/sync/sessions/session_data_type_controller.cc
new file mode 100644
index 0000000..2be11d3
--- /dev/null
+++ b/chrome/browser/sync/sessions/session_data_type_controller.cc
@@ -0,0 +1,66 @@
+// 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.
+
+#include "chrome/browser/sync/sessions/session_data_type_controller.h"
+
+#include "chrome/browser/chrome_notification_types.h"
+#include "chrome/browser/sync/glue/chrome_report_unrecoverable_error.h"
+#include "chrome/browser/sync/glue/synced_window_delegate.h"
+#include "content/public/browser/browser_thread.h"
+#include "content/public/browser/notification_details.h"
+#include "content/public/browser/notification_service.h"
+#include "content/public/browser/notification_source.h"
+
+using content::BrowserThread;
+
+namespace browser_sync {
+
+SessionDataTypeController::SessionDataTypeController(
+    ProfileSyncComponentsFactory* profile_sync_factory,
+    Profile* profile,
+    ProfileSyncService* sync_service)
+    : UIDataTypeController(
+          BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI),
+          base::Bind(&ChromeReportUnrecoverableError),
+          syncer::SESSIONS,
+          profile_sync_factory,
+          profile,
+          sync_service) {
+}
+
+SessionDataTypeController::~SessionDataTypeController() {}
+
+bool SessionDataTypeController::StartModels() {
+  DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+  std::set<browser_sync::SyncedWindowDelegate*> window =
+      browser_sync::SyncedWindowDelegate::GetSyncedWindowDelegates();
+  for (std::set<browser_sync::SyncedWindowDelegate*>::const_iterator i =
+      window.begin(); i != window.end(); ++i) {
+    if ((*i)->IsSessionRestoreInProgress()) {
+      notification_registrar_.Add(
+          this,
+          chrome::NOTIFICATION_SESSION_RESTORE_COMPLETE,
+          content::Source<Profile>(profile_));
+      return false;
+    }
+  }
+  return true;
+}
+
+void SessionDataTypeController::StopModels() {
+  notification_registrar_.RemoveAll();
+}
+
+void SessionDataTypeController::Observe(
+    int type,
+    const content::NotificationSource& source,
+    const content::NotificationDetails& details) {
+  DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+  DCHECK_EQ(chrome::NOTIFICATION_SESSION_RESTORE_COMPLETE, type);
+  DCHECK_EQ(profile_, content::Source<Profile>(source).ptr());
+  notification_registrar_.RemoveAll();
+  OnModelLoaded();
+}
+
+}  // namespace browser_sync
diff --git a/chrome/browser/sync/sessions/session_data_type_controller.h b/chrome/browser/sync/sessions/session_data_type_controller.h
new file mode 100644
index 0000000..e8e78f9
--- /dev/null
+++ b/chrome/browser/sync/sessions/session_data_type_controller.h
@@ -0,0 +1,41 @@
+// 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.
+
+#ifndef CHROME_BROWSER_SYNC_SESSIONS_SESSION_DATA_TYPE_CONTROLLER_H_
+#define CHROME_BROWSER_SYNC_SESSIONS_SESSION_DATA_TYPE_CONTROLLER_H_
+
+#include "chrome/browser/sync/glue/ui_data_type_controller.h"
+#include "content/public/browser/notification_observer.h"
+#include "content/public/browser/notification_registrar.h"
+
+namespace browser_sync {
+
+// Overrides StartModels to avoid sync contention with sessions during
+// a session restore operation at startup.
+class SessionDataTypeController : public UIDataTypeController,
+                                  public content::NotificationObserver {
+ public:
+  SessionDataTypeController(ProfileSyncComponentsFactory* factory,
+                            Profile* profile,
+                            ProfileSyncService* service);
+
+  // NotificationObserver interface.
+  virtual void Observe(int type,
+                       const content::NotificationSource& source,
+                       const content::NotificationDetails& details) OVERRIDE;
+
+ protected:
+  virtual ~SessionDataTypeController();
+  virtual bool StartModels() OVERRIDE;
+  virtual void StopModels() OVERRIDE;
+
+ private:
+  content::NotificationRegistrar notification_registrar_;
+  DISALLOW_COPY_AND_ASSIGN(SessionDataTypeController);
+};
+
+}  // namespace browser_sync
+
+#endif  // CHROME_BROWSER_SYNC_SESSIONS_SESSION_DATA_TYPE_CONTROLLER_H_
+
diff --git a/chrome/browser/sync/sessions/sessions_sync_manager.cc b/chrome/browser/sync/sessions/sessions_sync_manager.cc
new file mode 100644
index 0000000..8b624de
--- /dev/null
+++ b/chrome/browser/sync/sessions/sessions_sync_manager.cc
@@ -0,0 +1,1004 @@
+// 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.
+
+#include "chrome/browser/sync/sessions/sessions_sync_manager.h"
+
+#include "chrome/browser/chrome_notification_types.h"
+#if !defined(OS_ANDROID)
+#include "chrome/browser/network_time/navigation_time_helper.h"
+#endif
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/sync/glue/synced_tab_delegate.h"
+#include "chrome/browser/sync/glue/synced_window_delegate.h"
+#include "chrome/browser/sync/sessions/sessions_util.h"
+#include "chrome/browser/sync/sessions/synced_window_delegates_getter.h"
+#include "chrome/common/url_constants.h"
+#include "content/public/browser/favicon_status.h"
+#include "content/public/browser/navigation_entry.h"
+#include "content/public/browser/notification_details.h"
+#include "content/public/browser/notification_service.h"
+#include "content/public/browser/notification_source.h"
+#include "content/public/common/url_constants.h"
+#include "sync/api/sync_error.h"
+#include "sync/api/sync_error_factory.h"
+#include "sync/api/sync_merge_result.h"
+#include "sync/api/time.h"
+
+using content::NavigationEntry;
+using sessions::SerializedNavigationEntry;
+using syncer::SyncChange;
+using syncer::SyncData;
+
+namespace browser_sync {
+
+// Maximum number of favicons to sync.
+// TODO(zea): pull this from the server.
+static const int kMaxSyncFavicons = 200;
+
+// The maximum number of navigations in each direction we care to sync.
+static const int kMaxSyncNavigationCount = 6;
+
+// The URL at which the set of synced tabs is displayed. We treat it differently
+// from all other URL's as accessing it triggers a sync refresh of Sessions.
+static const char kNTPOpenTabSyncURL[] = "chrome://newtab/#open_tabs";
+
+// Default number of days without activity after which a session is considered
+// stale and becomes a candidate for garbage collection.
+static const size_t kDefaultStaleSessionThresholdDays = 14;  // 2 weeks.
+
+SessionsSyncManager::SessionsSyncManager(
+    Profile* profile,
+    SyncInternalApiDelegate* delegate,
+    scoped_ptr<LocalSessionEventRouter> router)
+    : favicon_cache_(profile, kMaxSyncFavicons),
+      local_tab_pool_out_of_sync_(true),
+      sync_prefs_(profile->GetPrefs()),
+      profile_(profile),
+      delegate_(delegate),
+      local_session_header_node_id_(TabNodePool::kInvalidTabNodeID),
+      stale_session_threshold_days_(kDefaultStaleSessionThresholdDays),
+      local_event_router_(router.Pass()),
+      synced_window_getter_(new SyncedWindowDelegatesGetter()) {
+}
+
+LocalSessionEventRouter::~LocalSessionEventRouter() {}
+
+SessionsSyncManager::~SessionsSyncManager() {
+}
+
+// Returns the GUID-based string that should be used for
+// |SessionsSyncManager::current_machine_tag_|.
+static std::string BuildMachineTag(const std::string& cache_guid) {
+  std::string machine_tag = "session_sync";
+  machine_tag.append(cache_guid);
+  return machine_tag;
+}
+
+syncer::SyncMergeResult SessionsSyncManager::MergeDataAndStartSyncing(
+     syncer::ModelType type,
+     const syncer::SyncDataList& initial_sync_data,
+     scoped_ptr<syncer::SyncChangeProcessor> sync_processor,
+     scoped_ptr<syncer::SyncErrorFactory> error_handler) {
+  syncer::SyncMergeResult merge_result(type);
+  DCHECK(session_tracker_.Empty());
+  DCHECK_EQ(0U, local_tab_pool_.Capacity());
+
+  error_handler_ = error_handler.Pass();
+  sync_processor_ = sync_processor.Pass();
+
+  local_session_header_node_id_ = TabNodePool::kInvalidTabNodeID;
+  scoped_ptr<DeviceInfo> local_device_info(delegate_->GetLocalDeviceInfo());
+  syncer::SyncChangeList new_changes;
+
+  // Make sure we have a machine tag.  We do this now (versus earlier) as it's
+  // a conveniently safe time to assert sync is ready and the cache_guid is
+  // initialized.
+  if (current_machine_tag_.empty())
+    InitializeCurrentMachineTag();
+  if (local_device_info) {
+    current_session_name_ = local_device_info->client_name();
+  } else {
+    merge_result.set_error(error_handler_->CreateAndUploadError(
+        FROM_HERE,
+        "Failed to get device info for machine tag."));
+    return merge_result;
+  }
+  session_tracker_.SetLocalSessionTag(current_machine_tag_);
+
+  // First, we iterate over sync data to update our session_tracker_.
+  syncer::SyncDataList restored_tabs;
+  if (!InitFromSyncModel(initial_sync_data, &restored_tabs, &new_changes)) {
+    // The sync db didn't have a header node for us. Create one.
+    sync_pb::EntitySpecifics specifics;
+    sync_pb::SessionSpecifics* base_specifics = specifics.mutable_session();
+    base_specifics->set_session_tag(current_machine_tag());
+    sync_pb::SessionHeader* header_s = base_specifics->mutable_header();
+    header_s->set_client_name(current_session_name_);
+    header_s->set_device_type(DeviceInfo::GetLocalDeviceType());
+    syncer::SyncData data = syncer::SyncData::CreateLocalData(
+        current_machine_tag(), current_session_name_, specifics);
+    new_changes.push_back(syncer::SyncChange(
+        FROM_HERE, syncer::SyncChange::ACTION_ADD, data));
+  }
+
+#if defined(OS_ANDROID)
+  std::string sync_machine_tag(BuildMachineTag(
+      delegate_->GetLocalSyncCacheGUID()));
+  if (current_machine_tag_.compare(sync_machine_tag) != 0)
+    DeleteForeignSessionInternal(sync_machine_tag, &new_changes);
+#endif
+
+  // Check if anything has changed on the local client side.
+  AssociateWindows(RELOAD_TABS, restored_tabs, &new_changes);
+  local_tab_pool_out_of_sync_ = false;
+
+  merge_result.set_error(
+      sync_processor_->ProcessSyncChanges(FROM_HERE, new_changes));
+
+  local_event_router_->StartRoutingTo(this);
+  return merge_result;
+}
+
+void SessionsSyncManager::AssociateWindows(
+    ReloadTabsOption option,
+    const syncer::SyncDataList& restored_tabs,
+    syncer::SyncChangeList* change_output) {
+  const std::string local_tag = current_machine_tag();
+  sync_pb::SessionSpecifics specifics;
+  specifics.set_session_tag(local_tag);
+  sync_pb::SessionHeader* header_s = specifics.mutable_header();
+  SyncedSession* current_session = session_tracker_.GetSession(local_tag);
+  current_session->modified_time = base::Time::Now();
+  header_s->set_client_name(current_session_name_);
+  header_s->set_device_type(DeviceInfo::GetLocalDeviceType());
+
+  session_tracker_.ResetSessionTracking(local_tag);
+  std::set<SyncedWindowDelegate*> windows =
+      synced_window_getter_->GetSyncedWindowDelegates();
+
+  for (std::set<SyncedWindowDelegate*>::const_iterator i =
+           windows.begin(); i != windows.end(); ++i) {
+    // Make sure the window has tabs and a viewable window. The viewable window
+    // check is necessary because, for example, when a browser is closed the
+    // destructor is not necessarily run immediately. This means its possible
+    // for us to get a handle to a browser that is about to be removed. If
+    // the tab count is 0 or the window is NULL, the browser is about to be
+    // deleted, so we ignore it.
+    if (sessions_util::ShouldSyncWindow(*i) &&
+        (*i)->GetTabCount() && (*i)->HasWindow()) {
+      sync_pb::SessionWindow window_s;
+      SessionID::id_type window_id = (*i)->GetSessionId();
+      DVLOG(1) << "Associating window " << window_id << " with "
+               << (*i)->GetTabCount() << " tabs.";
+      window_s.set_window_id(window_id);
+      // Note: We don't bother to set selected tab index anymore. We still
+      // consume it when receiving foreign sessions, as reading it is free, but
+      // it triggers too many sync cycles with too little value to make setting
+      // it worthwhile.
+      if ((*i)->IsTypeTabbed()) {
+        window_s.set_browser_type(
+            sync_pb::SessionWindow_BrowserType_TYPE_TABBED);
+      } else {
+        window_s.set_browser_type(
+            sync_pb::SessionWindow_BrowserType_TYPE_POPUP);
+      }
+
+      bool found_tabs = false;
+      for (int j = 0; j < (*i)->GetTabCount(); ++j) {
+        SessionID::id_type tab_id = (*i)->GetTabIdAt(j);
+        SyncedTabDelegate* synced_tab = (*i)->GetTabAt(j);
+
+        // GetTabAt can return a null tab; in that case just skip it.
+        if (!synced_tab)
+          continue;
+
+        if (!synced_tab->HasWebContents()) {
+          // For tabs without WebContents update the |tab_id|, as it could have
+          // changed after a session restore.
+          // Note: We cannot check if a tab is valid if it has no WebContents.
+          // We assume any such tab is valid and leave the contents of
+          // corresponding sync node unchanged.
+          if (synced_tab->GetSyncId() > TabNodePool::kInvalidTabNodeID &&
+              tab_id > TabNodePool::kInvalidTabID) {
+            AssociateRestoredPlaceholderTab(*synced_tab, tab_id,
+                                            restored_tabs, change_output);
+            found_tabs = true;
+            window_s.add_tab(tab_id);
+          }
+          continue;
+        }
+
+        if (RELOAD_TABS == option)
+          AssociateTab(synced_tab, change_output);
+
+        // If the tab is valid, it would have been added to the tracker either
+        // by the above AssociateTab call (at association time), or by the
+        // change processor calling AssociateTab for all modified tabs.
+        // Therefore, we can key whether this window has valid tabs based on
+        // the tab's presence in the tracker.
+        const SessionTab* tab = NULL;
+        if (session_tracker_.LookupSessionTab(local_tag, tab_id, &tab)) {
+          found_tabs = true;
+          window_s.add_tab(tab_id);
+        }
+      }
+      if (found_tabs) {
+        sync_pb::SessionWindow* header_window = header_s->add_window();
+        *header_window = window_s;
+
+        // Update this window's representation in the synced session tracker.
+        session_tracker_.PutWindowInSession(local_tag, window_id);
+        BuildSyncedSessionFromSpecifics(local_tag,
+                                        window_s,
+                                        current_session->modified_time,
+                                        current_session->windows[window_id]);
+      }
+    }
+  }
+  local_tab_pool_.DeleteUnassociatedTabNodes(change_output);
+  session_tracker_.CleanupSession(local_tag);
+
+  // Always update the header.  Sync takes care of dropping this update
+  // if the entity specifics are identical (i.e windows, client name did
+  // not change).
+  sync_pb::EntitySpecifics entity;
+  entity.mutable_session()->CopyFrom(specifics);
+  syncer::SyncData data = syncer::SyncData::CreateLocalData(
+        current_machine_tag(), current_session_name_, entity);
+  change_output->push_back(syncer::SyncChange(
+        FROM_HERE, syncer::SyncChange::ACTION_UPDATE, data));
+}
+
+void SessionsSyncManager::AssociateTab(SyncedTabDelegate* const tab,
+                                       syncer::SyncChangeList* change_output) {
+  DCHECK(tab->HasWebContents());
+  SessionID::id_type tab_id = tab->GetSessionId();
+  if (tab->profile() != profile_)
+    return;
+
+  if (tab->IsBeingDestroyed()) {
+    // This tab is closing.
+    TabLinksMap::iterator tab_iter = local_tab_map_.find(tab_id);
+    if (tab_iter == local_tab_map_.end()) {
+      // We aren't tracking this tab (for example, sync setting page).
+      return;
+    }
+    local_tab_pool_.FreeTabNode(tab_iter->second->tab_node_id(),
+                                change_output);
+    local_tab_map_.erase(tab_iter);
+    return;
+  }
+
+  if (!sessions_util::ShouldSyncTab(*tab))
+    return;
+
+  TabLinksMap::iterator local_tab_map_iter = local_tab_map_.find(tab_id);
+  TabLink* tab_link = NULL;
+
+  if (local_tab_map_iter == local_tab_map_.end()) {
+    int tab_node_id = tab->GetSyncId();
+    // If there is an old sync node for the tab, reuse it.  If this is a new
+    // tab, get a sync node for it.
+    if (!local_tab_pool_.IsUnassociatedTabNode(tab_node_id)) {
+      tab_node_id = local_tab_pool_.GetFreeTabNode(change_output);
+      tab->SetSyncId(tab_node_id);
+    }
+    local_tab_pool_.AssociateTabNode(tab_node_id, tab_id);
+    tab_link = new TabLink(tab_node_id, tab);
+    local_tab_map_[tab_id] = make_linked_ptr<TabLink>(tab_link);
+  } else {
+    // This tab is already associated with a sync node, reuse it.
+    // Note: on some platforms the tab object may have changed, so we ensure
+    // the tab link is up to date.
+    tab_link = local_tab_map_iter->second.get();
+    local_tab_map_iter->second->set_tab(tab);
+  }
+  DCHECK(tab_link);
+  DCHECK_NE(tab_link->tab_node_id(), TabNodePool::kInvalidTabNodeID);
+  DVLOG(1) << "Reloading tab " << tab_id << " from window "
+           << tab->GetWindowId();
+
+  // Write to sync model.
+  sync_pb::EntitySpecifics specifics;
+  LocalTabDelegateToSpecifics(*tab, specifics.mutable_session());
+  syncer::SyncData data = syncer::SyncData::CreateLocalData(
+      TabNodePool::TabIdToTag(current_machine_tag_,
+                               tab_link->tab_node_id()),
+      current_session_name_,
+      specifics);
+  change_output->push_back(syncer::SyncChange(
+      FROM_HERE, syncer::SyncChange::ACTION_UPDATE, data));
+
+  const GURL new_url = GetCurrentVirtualURL(*tab);
+  if (new_url != tab_link->url()) {
+    tab_link->set_url(new_url);
+    favicon_cache_.OnFaviconVisited(new_url, GetCurrentFaviconURL(*tab));
+  }
+
+  session_tracker_.GetSession(current_machine_tag())->modified_time =
+      base::Time::Now();
+}
+
+void SessionsSyncManager::RebuildAssociations() {
+  syncer::SyncDataList data(
+      sync_processor_->GetAllSyncData(syncer::SESSIONS));
+  scoped_ptr<syncer::SyncErrorFactory> error_handler(error_handler_.Pass());
+  scoped_ptr<syncer::SyncChangeProcessor> processor(sync_processor_.Pass());
+
+  StopSyncing(syncer::SESSIONS);
+  MergeDataAndStartSyncing(
+      syncer::SESSIONS, data, processor.Pass(), error_handler.Pass());
+}
+
+void SessionsSyncManager::OnLocalTabModified(SyncedTabDelegate* modified_tab) {
+  const content::NavigationEntry* entry = modified_tab->GetActiveEntry();
+  if (!modified_tab->IsBeingDestroyed() &&
+      entry &&
+      entry->GetVirtualURL().is_valid() &&
+      entry->GetVirtualURL().spec() == kNTPOpenTabSyncURL) {
+    DVLOG(1) << "Triggering sync refresh for sessions datatype.";
+    const syncer::ModelTypeSet types(syncer::SESSIONS);
+    content::NotificationService::current()->Notify(
+        chrome::NOTIFICATION_SYNC_REFRESH_LOCAL,
+        content::Source<Profile>(profile_),
+        content::Details<const syncer::ModelTypeSet>(&types));
+  }
+
+  if (local_tab_pool_out_of_sync_) {
+    // If our tab pool is corrupt, pay the price of a full re-association to
+    // fix things up.  This takes care of the new tab modification as well.
+    RebuildAssociations();
+    DCHECK(!local_tab_pool_out_of_sync_);
+    return;
+  }
+
+  syncer::SyncChangeList changes;
+  // Associate tabs first so the synced session tracker is aware of them.
+  AssociateTab(modified_tab, &changes);
+  // Note, we always associate windows because it's possible a tab became
+  // "interesting" by going to a valid URL, in which case it needs to be added
+  // to the window's tab information.
+  AssociateWindows(DONT_RELOAD_TABS, syncer::SyncDataList(), &changes);
+  sync_processor_->ProcessSyncChanges(FROM_HERE, changes);
+}
+
+void SessionsSyncManager::OnFaviconPageUrlsUpdated(
+    const std::set<GURL>& updated_favicon_page_urls) {
+  // TODO(zea): consider a separate container for tabs with outstanding favicon
+  // loads so we don't have to iterate through all tabs comparing urls.
+  for (std::set<GURL>::const_iterator i = updated_favicon_page_urls.begin();
+       i != updated_favicon_page_urls.end(); ++i) {
+    for (TabLinksMap::iterator tab_iter = local_tab_map_.begin();
+         tab_iter != local_tab_map_.end();
+         ++tab_iter) {
+      if (tab_iter->second->url() == *i)
+        favicon_cache_.OnPageFaviconUpdated(*i);
+    }
+  }
+}
+
+void SessionsSyncManager::StopSyncing(syncer::ModelType type) {
+  local_event_router_->Stop();
+  sync_processor_.reset(NULL);
+  error_handler_.reset();
+  session_tracker_.Clear();
+  local_tab_map_.clear();
+  local_tab_pool_.Clear();
+  current_machine_tag_.clear();
+  current_session_name_.clear();
+  local_session_header_node_id_ = TabNodePool::kInvalidTabNodeID;
+}
+
+syncer::SyncDataList SessionsSyncManager::GetAllSyncData(
+    syncer::ModelType type) const {
+  syncer::SyncDataList list;
+  const SyncedSession* session = NULL;
+  if (!session_tracker_.LookupLocalSession(&session))
+    return syncer::SyncDataList();
+
+  // First construct the header node.
+  sync_pb::EntitySpecifics header_entity;
+  header_entity.mutable_session()->set_session_tag(current_machine_tag());
+  sync_pb::SessionHeader* header_specifics =
+      header_entity.mutable_session()->mutable_header();
+  header_specifics->MergeFrom(session->ToSessionHeader());
+  syncer::SyncData data = syncer::SyncData::CreateLocalData(
+        current_machine_tag(), current_session_name_, header_entity);
+  list.push_back(data);
+
+  SyncedSession::SyncedWindowMap::const_iterator win_iter;
+  for (win_iter = session->windows.begin();
+       win_iter != session->windows.end(); ++win_iter) {
+    std::vector<SessionTab*>::const_iterator tabs_iter;
+    for (tabs_iter = win_iter->second->tabs.begin();
+         tabs_iter != win_iter->second->tabs.end(); ++tabs_iter) {
+      sync_pb::EntitySpecifics entity;
+      sync_pb::SessionSpecifics* specifics = entity.mutable_session();
+      specifics->mutable_tab()->MergeFrom((*tabs_iter)->ToSyncData());
+      specifics->set_session_tag(current_machine_tag_);
+
+      TabLinksMap::const_iterator tab_map_iter = local_tab_map_.find(
+          (*tabs_iter)->tab_id.id());
+      DCHECK(tab_map_iter != local_tab_map_.end());
+      specifics->set_tab_node_id(tab_map_iter->second->tab_node_id());
+      syncer::SyncData data = syncer::SyncData::CreateLocalData(
+          TabNodePool::TabIdToTag(current_machine_tag_,
+                                   specifics->tab_node_id()),
+          current_session_name_,
+          entity);
+      list.push_back(data);
+    }
+  }
+  return list;
+}
+
+bool SessionsSyncManager::GetLocalSession(
+    const SyncedSession* * local_session) {
+  if (current_machine_tag_.empty())
+    return false;
+  *local_session = session_tracker_.GetSession(current_machine_tag());
+  return true;
+}
+
+syncer::SyncError SessionsSyncManager::ProcessSyncChanges(
+    const tracked_objects::Location& from_here,
+    const syncer::SyncChangeList& change_list) {
+  if (!sync_processor_.get()) {
+    syncer::SyncError error(FROM_HERE,
+                            syncer::SyncError::DATATYPE_ERROR,
+                            "Models not yet associated.",
+                            syncer::SESSIONS);
+    return error;
+  }
+
+  for (syncer::SyncChangeList::const_iterator it = change_list.begin();
+       it != change_list.end(); ++it) {
+    DCHECK(it->IsValid());
+    DCHECK(it->sync_data().GetSpecifics().has_session());
+    const sync_pb::SessionSpecifics& session =
+        it->sync_data().GetSpecifics().session();
+    switch (it->change_type()) {
+      case syncer::SyncChange::ACTION_DELETE:
+        // Deletions are all or nothing (since we only ever delete entire
+        // sessions). Therefore we don't care if it's a tab node or meta node,
+        // and just ensure we've disassociated.
+        if (current_machine_tag() == session.session_tag()) {
+          // Another client has attempted to delete our local data (possibly by
+          // error or a clock is inaccurate). Just ignore the deletion for now
+          // to avoid any possible ping-pong delete/reassociate sequence, but
+          // remember that this happened as our TabNodePool is inconsistent.
+          local_tab_pool_out_of_sync_ = true;
+          LOG(WARNING) << "Local session data deleted. Ignoring until next "
+                       << "local navigation event.";
+        } else if (session.has_header()) {
+          // Disassociate only when header node is deleted. For tab node
+          // deletions, the header node will be updated and foreign tab will
+          // get deleted.
+          DisassociateForeignSession(session.session_tag());
+        }
+        continue;
+      case syncer::SyncChange::ACTION_ADD:
+      case syncer::SyncChange::ACTION_UPDATE:
+        if (current_machine_tag() == session.session_tag()) {
+          // We should only ever receive a change to our own machine's session
+          // info if encryption was turned on. In that case, the data is still
+          // the same, so we can ignore.
+          LOG(WARNING) << "Dropping modification to local session.";
+          return syncer::SyncError();
+        }
+        UpdateTrackerWithForeignSession(
+            session, syncer::SyncDataRemote(it->sync_data()).GetModifiedTime());
+        break;
+      default:
+        NOTREACHED() << "Processing sync changes failed, unknown change type.";
+    }
+  }
+
+  content::NotificationService::current()->Notify(
+      chrome::NOTIFICATION_FOREIGN_SESSION_UPDATED,
+      content::Source<Profile>(profile_),
+      content::NotificationService::NoDetails());
+  return syncer::SyncError();
+}
+
+syncer::SyncChange SessionsSyncManager::TombstoneTab(
+    const sync_pb::SessionSpecifics& tab) {
+  if (!tab.has_tab_node_id()) {
+    LOG(WARNING) << "Old sessions node without tab node id; can't tombstone.";
+    return syncer::SyncChange();
+  } else {
+    return syncer::SyncChange(
+        FROM_HERE,
+        SyncChange::ACTION_DELETE,
+        SyncData::CreateLocalDelete(
+            TabNodePool::TabIdToTag(current_machine_tag(),
+                                     tab.tab_node_id()),
+            syncer::SESSIONS));
+  }
+}
+
+bool SessionsSyncManager::GetAllForeignSessions(
+    std::vector<const SyncedSession*>* sessions) {
+  return session_tracker_.LookupAllForeignSessions(sessions);
+}
+
+bool SessionsSyncManager::InitFromSyncModel(
+    const syncer::SyncDataList& sync_data,
+    syncer::SyncDataList* restored_tabs,
+    syncer::SyncChangeList* new_changes) {
+  bool found_current_header = false;
+  for (syncer::SyncDataList::const_iterator it = sync_data.begin();
+       it != sync_data.end();
+       ++it) {
+    const syncer::SyncData& data = *it;
+    DCHECK(data.GetSpecifics().has_session());
+    const sync_pb::SessionSpecifics& specifics = data.GetSpecifics().session();
+    if (specifics.session_tag().empty() ||
+           (specifics.has_tab() && (!specifics.has_tab_node_id() ||
+                                    !specifics.tab().has_tab_id()))) {
+      syncer::SyncChange tombstone(TombstoneTab(specifics));
+      if (tombstone.IsValid())
+        new_changes->push_back(tombstone);
+    } else if (specifics.session_tag() != current_machine_tag()) {
+      UpdateTrackerWithForeignSession(
+          specifics, syncer::SyncDataRemote(data).GetModifiedTime());
+    } else {
+      // This is previously stored local session information.
+      if (specifics.has_header() && !found_current_header) {
+        // This is our previous header node, reuse it.
+        found_current_header = true;
+        if (specifics.header().has_client_name())
+          current_session_name_ = specifics.header().client_name();
+      } else {
+        if (specifics.has_header() || !specifics.has_tab()) {
+          LOG(WARNING) << "Found more than one session header node with local "
+                       << "tag.";
+          syncer::SyncChange tombstone(TombstoneTab(specifics));
+          if (tombstone.IsValid())
+            new_changes->push_back(tombstone);
+        } else {
+          // This is a valid old tab node, add it to the pool so it can be
+          // reused for reassociation.
+          local_tab_pool_.AddTabNode(specifics.tab_node_id());
+          restored_tabs->push_back(*it);
+        }
+      }
+    }
+  }
+  return found_current_header;
+}
+
+void SessionsSyncManager::UpdateTrackerWithForeignSession(
+    const sync_pb::SessionSpecifics& specifics,
+    const base::Time& modification_time) {
+  std::string foreign_session_tag = specifics.session_tag();
+  DCHECK_NE(foreign_session_tag, current_machine_tag());
+
+  SyncedSession* foreign_session =
+      session_tracker_.GetSession(foreign_session_tag);
+  if (specifics.has_header()) {
+    // Read in the header data for this foreign session.
+    // Header data contains window information and ordered tab id's for each
+    // window.
+
+    // Load (or create) the SyncedSession object for this client.
+    const sync_pb::SessionHeader& header = specifics.header();
+    PopulateSessionHeaderFromSpecifics(header,
+                                       modification_time,
+                                       foreign_session);
+
+    // Reset the tab/window tracking for this session (must do this before
+    // we start calling PutWindowInSession and PutTabInWindow so that all
+    // unused tabs/windows get cleared by the CleanupSession(...) call).
+    session_tracker_.ResetSessionTracking(foreign_session_tag);
+
+    // Process all the windows and their tab information.
+    int num_windows = header.window_size();
+    DVLOG(1) << "Associating " << foreign_session_tag << " with "
+             << num_windows << " windows.";
+
+    for (int i = 0; i < num_windows; ++i) {
+      const sync_pb::SessionWindow& window_s = header.window(i);
+      SessionID::id_type window_id = window_s.window_id();
+      session_tracker_.PutWindowInSession(foreign_session_tag,
+                                          window_id);
+      BuildSyncedSessionFromSpecifics(foreign_session_tag,
+                                      window_s,
+                                      modification_time,
+                                      foreign_session->windows[window_id]);
+    }
+    // Delete any closed windows and unused tabs as necessary.
+    session_tracker_.CleanupSession(foreign_session_tag);
+  } else if (specifics.has_tab()) {
+    const sync_pb::SessionTab& tab_s = specifics.tab();
+    SessionID::id_type tab_id = tab_s.tab_id();
+    SessionTab* tab =
+        session_tracker_.GetTab(foreign_session_tag,
+                                tab_id,
+                                specifics.tab_node_id());
+
+    // Update SessionTab based on protobuf.
+    tab->SetFromSyncData(tab_s, modification_time);
+
+    // If a favicon or favicon urls are present, load the URLs and visit
+    // times into the in-memory favicon cache.
+    RefreshFaviconVisitTimesFromForeignTab(tab_s, modification_time);
+
+    // Update the last modified time.
+    if (foreign_session->modified_time < modification_time)
+      foreign_session->modified_time = modification_time;
+  } else {
+    LOG(WARNING) << "Ignoring foreign session node with missing header/tab "
+                 << "fields and tag " << foreign_session_tag << ".";
+  }
+}
+
+void SessionsSyncManager::InitializeCurrentMachineTag() {
+  DCHECK(current_machine_tag_.empty());
+  std::string persisted_guid;
+  persisted_guid = sync_prefs_.GetSyncSessionsGUID();
+  if (!persisted_guid.empty()) {
+    current_machine_tag_ = persisted_guid;
+    DVLOG(1) << "Restoring persisted session sync guid: " << persisted_guid;
+  } else {
+    current_machine_tag_ = BuildMachineTag(delegate_->GetLocalSyncCacheGUID());
+    DVLOG(1) << "Creating session sync guid: " << current_machine_tag_;
+    sync_prefs_.SetSyncSessionsGUID(current_machine_tag_);
+  }
+
+  local_tab_pool_.SetMachineTag(current_machine_tag_);
+}
+
+// static
+void SessionsSyncManager::PopulateSessionHeaderFromSpecifics(
+    const sync_pb::SessionHeader& header_specifics,
+    base::Time mtime,
+    SyncedSession* session_header) {
+  if (header_specifics.has_client_name())
+    session_header->session_name = header_specifics.client_name();
+  if (header_specifics.has_device_type()) {
+    switch (header_specifics.device_type()) {
+      case sync_pb::SyncEnums_DeviceType_TYPE_WIN:
+        session_header->device_type = SyncedSession::TYPE_WIN;
+        break;
+      case sync_pb::SyncEnums_DeviceType_TYPE_MAC:
+        session_header->device_type = SyncedSession::TYPE_MACOSX;
+        break;
+      case sync_pb::SyncEnums_DeviceType_TYPE_LINUX:
+        session_header->device_type = SyncedSession::TYPE_LINUX;
+        break;
+      case sync_pb::SyncEnums_DeviceType_TYPE_CROS:
+        session_header->device_type = SyncedSession::TYPE_CHROMEOS;
+        break;
+      case sync_pb::SyncEnums_DeviceType_TYPE_PHONE:
+        session_header->device_type = SyncedSession::TYPE_PHONE;
+        break;
+      case sync_pb::SyncEnums_DeviceType_TYPE_TABLET:
+        session_header->device_type = SyncedSession::TYPE_TABLET;
+        break;
+      case sync_pb::SyncEnums_DeviceType_TYPE_OTHER:
+        // Intentionally fall-through
+      default:
+        session_header->device_type = SyncedSession::TYPE_OTHER;
+        break;
+    }
+  }
+  session_header->modified_time = mtime;
+}
+
+// static
+void SessionsSyncManager::BuildSyncedSessionFromSpecifics(
+    const std::string& session_tag,
+    const sync_pb::SessionWindow& specifics,
+    base::Time mtime,
+    SessionWindow* session_window) {
+  if (specifics.has_window_id())
+    session_window->window_id.set_id(specifics.window_id());
+  if (specifics.has_selected_tab_index())
+    session_window->selected_tab_index = specifics.selected_tab_index();
+  if (specifics.has_browser_type()) {
+    if (specifics.browser_type() ==
+        sync_pb::SessionWindow_BrowserType_TYPE_TABBED) {
+      session_window->type = 1;
+    } else {
+      session_window->type = 2;
+    }
+  }
+  session_window->timestamp = mtime;
+  session_window->tabs.resize(specifics.tab_size(), NULL);
+  for (int i = 0; i < specifics.tab_size(); i++) {
+    SessionID::id_type tab_id = specifics.tab(i);
+    session_tracker_.PutTabInWindow(session_tag,
+                                    session_window->window_id.id(),
+                                    tab_id,
+                                    i);
+  }
+}
+
+void SessionsSyncManager::RefreshFaviconVisitTimesFromForeignTab(
+    const sync_pb::SessionTab& tab, const base::Time& modification_time) {
+  // First go through and iterate over all the navigations, checking if any
+  // have valid favicon urls.
+  for (int i = 0; i < tab.navigation_size(); ++i) {
+    if (!tab.navigation(i).favicon_url().empty()) {
+      const std::string& page_url = tab.navigation(i).virtual_url();
+      const std::string& favicon_url = tab.navigation(i).favicon_url();
+      favicon_cache_.OnReceivedSyncFavicon(GURL(page_url),
+                                           GURL(favicon_url),
+                                           std::string(),
+                                           syncer::TimeToProtoTime(
+                                               modification_time));
+    }
+  }
+}
+
+bool SessionsSyncManager::GetSyncedFaviconForPageURL(
+    const std::string& page_url,
+    scoped_refptr<base::RefCountedMemory>* favicon_png) const {
+  return favicon_cache_.GetSyncedFaviconForPageURL(GURL(page_url), favicon_png);
+}
+
+void SessionsSyncManager::DeleteForeignSession(const std::string& tag) {
+  syncer::SyncChangeList changes;
+  DeleteForeignSessionInternal(tag, &changes);
+  sync_processor_->ProcessSyncChanges(FROM_HERE, changes);
+}
+
+void SessionsSyncManager::DeleteForeignSessionInternal(
+    const std::string& tag, syncer::SyncChangeList* change_output) {
+ if (tag == current_machine_tag()) {
+    LOG(ERROR) << "Attempting to delete local session. This is not currently "
+               << "supported.";
+    return;
+  }
+
+  std::set<int> tab_node_ids_to_delete;
+  session_tracker_.LookupTabNodeIds(tag, &tab_node_ids_to_delete);
+  if (!DisassociateForeignSession(tag)) {
+    // We don't have any data for this session, our work here is done!
+    return;
+  }
+
+  // Prepare deletes for the meta-node as well as individual tab nodes.
+  change_output->push_back(syncer::SyncChange(
+      FROM_HERE,
+      SyncChange::ACTION_DELETE,
+      SyncData::CreateLocalDelete(tag, syncer::SESSIONS)));
+
+  for (std::set<int>::const_iterator it = tab_node_ids_to_delete.begin();
+       it != tab_node_ids_to_delete.end();
+       ++it) {
+    change_output->push_back(syncer::SyncChange(
+        FROM_HERE,
+        SyncChange::ACTION_DELETE,
+        SyncData::CreateLocalDelete(TabNodePool::TabIdToTag(tag, *it),
+                                    syncer::SESSIONS)));
+  }
+  content::NotificationService::current()->Notify(
+      chrome::NOTIFICATION_FOREIGN_SESSION_UPDATED,
+      content::Source<Profile>(profile_),
+      content::NotificationService::NoDetails());
+}
+
+bool SessionsSyncManager::DisassociateForeignSession(
+    const std::string& foreign_session_tag) {
+  if (foreign_session_tag == current_machine_tag()) {
+    DVLOG(1) << "Local session deleted! Doing nothing until a navigation is "
+             << "triggered.";
+    return false;
+  }
+  DVLOG(1) << "Disassociating session " << foreign_session_tag;
+  return session_tracker_.DeleteSession(foreign_session_tag);
+}
+
+// static
+GURL SessionsSyncManager::GetCurrentVirtualURL(
+    const SyncedTabDelegate& tab_delegate) {
+  const int current_index = tab_delegate.GetCurrentEntryIndex();
+  const int pending_index = tab_delegate.GetPendingEntryIndex();
+  const NavigationEntry* current_entry =
+      (current_index == pending_index) ?
+      tab_delegate.GetPendingEntry() :
+      tab_delegate.GetEntryAtIndex(current_index);
+  return current_entry->GetVirtualURL();
+}
+
+// static
+GURL SessionsSyncManager::GetCurrentFaviconURL(
+    const SyncedTabDelegate& tab_delegate) {
+  const int current_index = tab_delegate.GetCurrentEntryIndex();
+  const int pending_index = tab_delegate.GetPendingEntryIndex();
+  const NavigationEntry* current_entry =
+      (current_index == pending_index) ?
+      tab_delegate.GetPendingEntry() :
+      tab_delegate.GetEntryAtIndex(current_index);
+  return (current_entry->GetFavicon().valid ?
+          current_entry->GetFavicon().url :
+          GURL());
+}
+
+bool SessionsSyncManager::GetForeignSession(
+    const std::string& tag,
+    std::vector<const SessionWindow*>* windows) {
+  return session_tracker_.LookupSessionWindows(tag, windows);
+}
+
+bool SessionsSyncManager::GetForeignTab(
+    const std::string& tag,
+    const SessionID::id_type tab_id,
+    const SessionTab** tab) {
+  const SessionTab* synced_tab = NULL;
+  bool success = session_tracker_.LookupSessionTab(tag,
+                                                   tab_id,
+                                                   &synced_tab);
+  if (success)
+    *tab = synced_tab;
+  return success;
+}
+
+void SessionsSyncManager::LocalTabDelegateToSpecifics(
+    const SyncedTabDelegate& tab_delegate,
+    sync_pb::SessionSpecifics* specifics) {
+  SessionTab* session_tab = NULL;
+  session_tab =
+      session_tracker_.GetTab(current_machine_tag(),
+                              tab_delegate.GetSessionId(),
+                              tab_delegate.GetSyncId());
+  SetSessionTabFromDelegate(tab_delegate, base::Time::Now(), session_tab);
+  sync_pb::SessionTab tab_s = session_tab->ToSyncData();
+  specifics->set_session_tag(current_machine_tag_);
+  specifics->set_tab_node_id(tab_delegate.GetSyncId());
+  specifics->mutable_tab()->CopyFrom(tab_s);
+}
+
+void SessionsSyncManager::AssociateRestoredPlaceholderTab(
+    const SyncedTabDelegate& tab_delegate,
+    SessionID::id_type new_tab_id,
+    const syncer::SyncDataList& restored_tabs,
+    syncer::SyncChangeList* change_output) {
+  DCHECK_NE(tab_delegate.GetSyncId(), TabNodePool::kInvalidTabNodeID);
+  // Rewrite the tab using |restored_tabs| to retrieve the specifics.
+  if (restored_tabs.empty()) {
+    DLOG(WARNING) << "Can't Update tab ID.";
+    return;
+  }
+
+  for (syncer::SyncDataList::const_iterator it = restored_tabs.begin();
+       it != restored_tabs.end();
+       ++it) {
+    if (it->GetSpecifics().session().tab_node_id() !=
+        tab_delegate.GetSyncId()) {
+      continue;
+    }
+
+    sync_pb::EntitySpecifics entity;
+    sync_pb::SessionSpecifics* specifics = entity.mutable_session();
+    specifics->CopyFrom(it->GetSpecifics().session());
+    DCHECK(specifics->has_tab());
+
+    // Update tab node pool with the new association.
+    local_tab_pool_.ReassociateTabNode(tab_delegate.GetSyncId(),
+                                       new_tab_id);
+    TabLink* tab_link = new TabLink(tab_delegate.GetSyncId(),
+                                    &tab_delegate);
+    local_tab_map_[new_tab_id] = make_linked_ptr<TabLink>(tab_link);
+
+    if (specifics->tab().tab_id() == new_tab_id)
+      return;
+
+    // The tab_id changed (e.g due to session restore), so update sync.
+    specifics->mutable_tab()->set_tab_id(new_tab_id);
+    syncer::SyncData data = syncer::SyncData::CreateLocalData(
+        TabNodePool::TabIdToTag(current_machine_tag_,
+                                 specifics->tab_node_id()),
+        current_session_name_,
+        entity);
+    change_output->push_back(syncer::SyncChange(
+        FROM_HERE, syncer::SyncChange::ACTION_UPDATE, data));
+    return;
+  }
+}
+
+// static.
+void SessionsSyncManager::SetSessionTabFromDelegate(
+      const SyncedTabDelegate& tab_delegate,
+      base::Time mtime,
+      SessionTab* session_tab) {
+  DCHECK(session_tab);
+  session_tab->window_id.set_id(tab_delegate.GetWindowId());
+  session_tab->tab_id.set_id(tab_delegate.GetSessionId());
+  session_tab->tab_visual_index = 0;
+  session_tab->current_navigation_index = tab_delegate.GetCurrentEntryIndex();
+  session_tab->pinned = tab_delegate.IsPinned();
+  session_tab->extension_app_id = tab_delegate.GetExtensionAppId();
+  session_tab->user_agent_override.clear();
+  session_tab->timestamp = mtime;
+  const int current_index = tab_delegate.GetCurrentEntryIndex();
+  const int pending_index = tab_delegate.GetPendingEntryIndex();
+  const int min_index = std::max(0, current_index - kMaxSyncNavigationCount);
+  const int max_index = std::min(current_index + kMaxSyncNavigationCount,
+                                 tab_delegate.GetEntryCount());
+  bool is_managed = tab_delegate.ProfileIsManaged();
+  session_tab->navigations.clear();
+
+#if !defined(OS_ANDROID)
+  // For getting navigation time in network time.
+  NavigationTimeHelper* nav_time_helper =
+      tab_delegate.HasWebContents() ?
+          NavigationTimeHelper::FromWebContents(tab_delegate.GetWebContents()) :
+          NULL;
+#endif
+
+  for (int i = min_index; i < max_index; ++i) {
+    const NavigationEntry* entry = (i == pending_index) ?
+        tab_delegate.GetPendingEntry() : tab_delegate.GetEntryAtIndex(i);
+    DCHECK(entry);
+    if (!entry->GetVirtualURL().is_valid())
+      continue;
+
+    scoped_ptr<content::NavigationEntry> network_time_entry(
+        content::NavigationEntry::Create(*entry));
+#if !defined(OS_ANDROID)
+    if (nav_time_helper) {
+      network_time_entry->SetTimestamp(
+          nav_time_helper->GetNavigationTime(entry));
+    }
+#endif
+
+    session_tab->navigations.push_back(
+        SerializedNavigationEntry::FromNavigationEntry(i, *network_time_entry));
+    if (is_managed) {
+      session_tab->navigations.back().set_blocked_state(
+          SerializedNavigationEntry::STATE_ALLOWED);
+    }
+  }
+
+  if (is_managed) {
+    const std::vector<const NavigationEntry*>& blocked_navigations =
+        *tab_delegate.GetBlockedNavigations();
+    int offset = session_tab->navigations.size();
+    for (size_t i = 0; i < blocked_navigations.size(); ++i) {
+      session_tab->navigations.push_back(
+          SerializedNavigationEntry::FromNavigationEntry(
+              i + offset, *blocked_navigations[i]));
+      session_tab->navigations.back().set_blocked_state(
+          SerializedNavigationEntry::STATE_BLOCKED);
+      // TODO(bauerb): Add categories
+    }
+  }
+  session_tab->session_storage_persistent_id.clear();
+}
+
+FaviconCache* SessionsSyncManager::GetFaviconCache() {
+  return &favicon_cache_;
+}
+
+void SessionsSyncManager::DoGarbageCollection() {
+  std::vector<const SyncedSession*> sessions;
+  if (!GetAllForeignSessions(&sessions))
+    return;  // No foreign sessions.
+
+  // Iterate through all the sessions and delete any with age older than
+  // |stale_session_threshold_days_|.
+  syncer::SyncChangeList changes;
+  for (std::vector<const SyncedSession*>::const_iterator iter =
+           sessions.begin(); iter != sessions.end(); ++iter) {
+    const SyncedSession* session = *iter;
+    int session_age_in_days =
+        (base::Time::Now() - session->modified_time).InDays();
+    std::string session_tag = session->session_tag;
+    if (session_age_in_days > 0 &&  // If false, local clock is not trustworty.
+        static_cast<size_t>(session_age_in_days) >
+            stale_session_threshold_days_) {
+      DVLOG(1) << "Found stale session " << session_tag
+               << " with age " << session_age_in_days << ", deleting.";
+      DeleteForeignSessionInternal(session_tag, &changes);
+    }
+  }
+
+  if (!changes.empty())
+    sync_processor_->ProcessSyncChanges(FROM_HERE, changes);
+}
+
+};  // namespace browser_sync
diff --git a/chrome/browser/sync/sessions/sessions_sync_manager.h b/chrome/browser/sync/sessions/sessions_sync_manager.h
new file mode 100644
index 0000000..51d9a1e
--- /dev/null
+++ b/chrome/browser/sync/sessions/sessions_sync_manager.h
@@ -0,0 +1,381 @@
+// 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.
+
+#ifndef CHROME_BROWSER_SYNC_SESSIONS_SESSIONS_SYNC_MANAGER_H_
+#define CHROME_BROWSER_SYNC_SESSIONS_SESSIONS_SYNC_MANAGER_H_
+
+#include <map>
+#include <set>
+#include <string>
+#include <vector>
+
+#include "base/basictypes.h"
+#include "base/gtest_prod_util.h"
+#include "base/memory/scoped_vector.h"
+#include "base/memory/weak_ptr.h"
+#include "base/time/time.h"
+#include "chrome/browser/sessions/session_id.h"
+#include "chrome/browser/sessions/session_types.h"
+#include "chrome/browser/sync/glue/device_info.h"
+#include "chrome/browser/sync/glue/favicon_cache.h"
+#include "chrome/browser/sync/glue/synced_session.h"
+#include "chrome/browser/sync/glue/synced_session_tracker.h"
+#include "chrome/browser/sync/open_tabs_ui_delegate.h"
+#include "chrome/browser/sync/sessions/tab_node_pool.h"
+#include "components/sync_driver/sync_prefs.h"
+#include "sync/api/syncable_service.h"
+
+class Profile;
+
+namespace syncer {
+class SyncErrorFactory;
+}
+
+namespace sync_pb {
+class SessionHeader;
+class SessionSpecifics;
+class SessionTab;
+class SessionWindow;
+class TabNavigation;
+}  // namespace sync_pb
+
+namespace browser_sync {
+
+class DataTypeErrorHandler;
+class SyncedTabDelegate;
+class SyncedWindowDelegate;
+class SyncedWindowDelegatesGetter;
+
+// An interface defining the ways in which local open tab events can interact
+// with session sync.  All local tab events flow to sync via this interface.
+// In that way it is analogous to sync changes flowing to the local model
+// via ProcessSyncChanges, just with a more granular breakdown.
+class LocalSessionEventHandler {
+ public:
+  // A local navigation event took place that affects the synced session
+  // for this instance of Chrome.
+  virtual void OnLocalTabModified(SyncedTabDelegate* modified_tab) = 0;
+
+  // A local navigation occurred that triggered updates to favicon data for
+  // each URL in |updated_page_urls|.  This is routed through Sessions Sync so
+  // that we can filter (exclude) favicon updates for pages that aren't
+  // currently part of the set of local open tabs, and pass relevant updates
+  // on to FaviconCache for out-of-band favicon syncing.
+  virtual void OnFaviconPageUrlsUpdated(
+      const std::set<GURL>& updated_page_urls) = 0;
+};
+
+// The LocalSessionEventRouter is responsible for hooking itself up to various
+// notification sources in the browser process and forwarding relevant
+// events to a handler as defined in the LocalSessionEventHandler contract.
+class LocalSessionEventRouter {
+ public:
+  virtual ~LocalSessionEventRouter();
+  virtual void StartRoutingTo(LocalSessionEventHandler* handler) = 0;
+  virtual void Stop() = 0;
+};
+
+// Contains all logic for associating the Chrome sessions model and
+// the sync sessions model.
+class SessionsSyncManager : public syncer::SyncableService,
+                            public OpenTabsUIDelegate,
+                            public LocalSessionEventHandler {
+ public:
+  // Isolates SessionsSyncManager from having to depend on sync internals.
+  class SyncInternalApiDelegate {
+   public:
+    virtual ~SyncInternalApiDelegate() {}
+
+    // Returns sync's representation of the local device info.
+    // Return value is an empty scoped_ptr if the device info is unavailable.
+    virtual scoped_ptr<DeviceInfo> GetLocalDeviceInfo() const = 0;
+
+    // Used for creation of the machine tag for this local session.
+    virtual std::string GetLocalSyncCacheGUID() const = 0;
+  };
+
+  SessionsSyncManager(Profile* profile,
+                      SyncInternalApiDelegate* delegate,
+                      scoped_ptr<LocalSessionEventRouter> router);
+  virtual ~SessionsSyncManager();
+
+  // syncer::SyncableService implementation.
+  virtual syncer::SyncMergeResult MergeDataAndStartSyncing(
+      syncer::ModelType type,
+      const syncer::SyncDataList& initial_sync_data,
+      scoped_ptr<syncer::SyncChangeProcessor> sync_processor,
+      scoped_ptr<syncer::SyncErrorFactory> error_handler) OVERRIDE;
+  virtual void StopSyncing(syncer::ModelType type) OVERRIDE;
+  virtual syncer::SyncDataList GetAllSyncData(
+      syncer::ModelType type) const OVERRIDE;
+  virtual syncer::SyncError ProcessSyncChanges(
+      const tracked_objects::Location& from_here,
+      const syncer::SyncChangeList& change_list) OVERRIDE;
+
+  // OpenTabsUIDelegate implementation.
+  virtual bool GetSyncedFaviconForPageURL(
+      const std::string& pageurl,
+      scoped_refptr<base::RefCountedMemory>* favicon_png) const OVERRIDE;
+  virtual bool GetAllForeignSessions(
+      std::vector<const SyncedSession*>* sessions) OVERRIDE;
+  virtual bool GetForeignSession(
+      const std::string& tag,
+      std::vector<const SessionWindow*>* windows) OVERRIDE;
+  virtual bool GetForeignTab(const std::string& tag,
+                             const SessionID::id_type tab_id,
+                             const SessionTab** tab) OVERRIDE;
+  virtual void DeleteForeignSession(const std::string& tag) OVERRIDE;
+  virtual bool GetLocalSession(const SyncedSession* * local_session) OVERRIDE;
+
+  // LocalSessionEventHandler implementation.
+  virtual void OnLocalTabModified(SyncedTabDelegate* modified_tab) OVERRIDE;
+  virtual void OnFaviconPageUrlsUpdated(
+      const std::set<GURL>& updated_favicon_page_urls) OVERRIDE;
+
+  // Returns the tag used to uniquely identify this machine's session in the
+  // sync model.
+  const std::string& current_machine_tag() const {
+    DCHECK(!current_machine_tag_.empty());
+    return current_machine_tag_;
+  }
+
+  // Return the virtual URL of the current tab, even if it's pending.
+  static GURL GetCurrentVirtualURL(const SyncedTabDelegate& tab_delegate);
+
+  // Return the favicon url of the current tab, even if it's pending.
+  static GURL GetCurrentFaviconURL(const SyncedTabDelegate& tab_delegate);
+
+  FaviconCache* GetFaviconCache();
+
+  // Triggers garbage collection of stale sessions (as defined by
+  // |stale_session_threshold_days_|). This is called automatically every
+  // time we start up (via AssociateModels) and when new sessions data is
+  // downloaded (sync cycles complete).
+  void DoGarbageCollection();
+
+ private:
+  // Keep all the links to local tab data in one place. A tab_node_id and tab
+  // must be passed at creation. The tab_node_id is not mutable, although
+  // all other fields are.
+  class TabLink {
+   public:
+    TabLink(int tab_node_id, const SyncedTabDelegate* tab)
+      : tab_node_id_(tab_node_id),
+        tab_(tab) {}
+
+    void set_tab(const SyncedTabDelegate* tab) { tab_ = tab; }
+    void set_url(const GURL& url) { url_ = url; }
+
+    int tab_node_id() const { return tab_node_id_; }
+    const SyncedTabDelegate* tab() const { return tab_; }
+    const GURL& url() const { return url_; }
+
+   private:
+    // The id for the sync node this tab is stored in.
+    const int tab_node_id_;
+
+    // The tab object itself.
+    const SyncedTabDelegate* tab_;
+
+    // The currently visible url of the tab (used for syncing favicons).
+    GURL url_;
+
+    DISALLOW_COPY_AND_ASSIGN(TabLink);
+  };
+
+  // Container for accessing local tab data by tab id.
+  typedef std::map<SessionID::id_type, linked_ptr<TabLink> > TabLinksMap;
+
+  FRIEND_TEST_ALL_PREFIXES(SessionsSyncManagerTest, PopulateSessionHeader);
+  FRIEND_TEST_ALL_PREFIXES(SessionsSyncManagerTest, PopulateSessionWindow);
+  FRIEND_TEST_ALL_PREFIXES(SessionsSyncManagerTest, ValidTabs);
+  FRIEND_TEST_ALL_PREFIXES(SessionsSyncManagerTest, SetSessionTabFromDelegate);
+  FRIEND_TEST_ALL_PREFIXES(SessionsSyncManagerTest, BlockedNavigations);
+  FRIEND_TEST_ALL_PREFIXES(SessionsSyncManagerTest, DeleteForeignSession);
+  FRIEND_TEST_ALL_PREFIXES(SessionsSyncManagerTest,
+                           SaveUnassociatedNodesForReassociation);
+  FRIEND_TEST_ALL_PREFIXES(SessionsSyncManagerTest, MergeDeletesCorruptNode);
+  FRIEND_TEST_ALL_PREFIXES(SessionsSyncManagerTest,
+                           MergeLocalSessionExistingTabs);
+  FRIEND_TEST_ALL_PREFIXES(SessionsSyncManagerTest,
+                           CheckPrerenderedWebContentsSwap);
+  FRIEND_TEST_ALL_PREFIXES(SessionsSyncManagerTest,
+                           AssociateWindowsDontReloadTabs);
+  FRIEND_TEST_ALL_PREFIXES(SessionsSyncManagerTest,
+                           SwappedOutOnRestore);
+  FRIEND_TEST_ALL_PREFIXES(SessionsSyncManagerTest,
+                           ProcessRemoteDeleteOfLocalSession);
+
+  void InitializeCurrentMachineTag();
+
+  // Load and add window or tab data for a foreign session to our internal
+  // tracking.
+  void UpdateTrackerWithForeignSession(
+      const sync_pb::SessionSpecifics& specifics,
+      const base::Time& modification_time);
+
+  // Returns true if |sync_data| contained a header node for the current
+  // machine, false otherwise. |restored_tabs| is a filtered tab-only
+  // subset of |sync_data| returned by this function for convenience.
+  // |new_changes| is a link to the SyncChange pipeline that exists in the
+  // caller's context. This function will append necessary changes for
+  // processing later.
+  bool InitFromSyncModel(const syncer::SyncDataList& sync_data,
+                         syncer::SyncDataList* restored_tabs,
+                         syncer::SyncChangeList* new_changes);
+
+  // Helper to construct a deletion SyncChange for a *tab node*.
+  // Caller should check IsValid() on the returned change, as it's possible
+  // this node could not be deleted.
+  syncer::SyncChange TombstoneTab(const sync_pb::SessionSpecifics& tab);
+
+  // Helper method to load the favicon data from the tab specifics. If the
+  // favicon is valid, stores the favicon data into the favicon cache.
+  void RefreshFaviconVisitTimesFromForeignTab(
+      const sync_pb::SessionTab& tab, const base::Time& modification_time);
+
+  // Removes a foreign session from our internal bookkeeping.
+  // Returns true if the session was found and deleted, false if no data was
+  // found for that session.  This will *NOT* trigger sync deletions. See
+  // DeleteForeignSession below.
+  bool DisassociateForeignSession(const std::string& foreign_session_tag);
+
+  // Delete a foreign session and all its sync data.
+  // |change_output| *must* be provided as a link to the SyncChange pipeline
+  // that exists in the caller's context. This function will append necessary
+  // changes for processing later.
+  void DeleteForeignSessionInternal(const std::string& tag,
+                                    syncer::SyncChangeList* change_output);
+
+  // Used to populate a session header from the session specifics header
+  // provided.
+  static void PopulateSessionHeaderFromSpecifics(
+      const sync_pb::SessionHeader& header_specifics,
+      base::Time mtime,
+      SyncedSession* session_header);
+
+  // Builds |session_window| from the session specifics window
+  // provided and updates the SessionTracker with foreign session data created.
+  void BuildSyncedSessionFromSpecifics(
+      const std::string& session_tag,
+      const sync_pb::SessionWindow& specifics,
+      base::Time mtime,
+      SessionWindow* session_window);
+
+  // Resync local window information. Updates the local sessions header node
+  // with the status of open windows and the order of tabs they contain. Should
+  // only be called for changes that affect a window, not a change within a
+  // single tab.
+  //
+  // RELOAD_TABS will additionally cause a resync of all tabs (same as calling
+  // AssociateTabs with a vector of all tabs).
+  //
+  // |restored_tabs| is a filtered tab-only subset of initial sync data, if
+  // available (during MergeDataAndStartSyncing). It can be used to obtain
+  // baseline SessionSpecifics for tabs we can't fully associate any other
+  // way because they don't yet have a WebContents.
+  //
+  // Returns: false if the local session's sync nodes were deleted and
+  // reassociation is necessary, true otherwise.
+  //
+  // |change_output| *must* be provided as a link to the SyncChange pipeline
+  // that exists in the caller's context. This function will append necessary
+  // changes for processing later.
+  enum ReloadTabsOption {
+    RELOAD_TABS,
+    DONT_RELOAD_TABS
+  };
+  void AssociateWindows(ReloadTabsOption option,
+                        const syncer::SyncDataList& restored_tabs,
+                        syncer::SyncChangeList* change_output);
+
+  // Loads and reassociates the local tabs referenced in |tabs|.
+  // |change_output| *must* be provided as a link to the SyncChange pipeline
+  // that exists in the caller's context. This function will append necessary
+  // changes for processing later.
+  void AssociateTab(SyncedTabDelegate* const tab,
+                    syncer::SyncChangeList* change_output);
+
+  // Set |session_tab| from |tab_delegate| and |mtime|.
+  static void SetSessionTabFromDelegate(
+      const SyncedTabDelegate& tab_delegate,
+      base::Time mtime,
+      SessionTab* session_tab);
+
+  // Populates |specifics| based on the data in |tab_delegate|.
+  void LocalTabDelegateToSpecifics(const SyncedTabDelegate& tab_delegate,
+                                   sync_pb::SessionSpecifics* specifics);
+
+  // It's possible that when we associate windows, tabs aren't all loaded
+  // into memory yet (e.g on android) and we don't have a WebContents. In this
+  // case we can't do a full association, but we still want to update tab IDs
+  // as they may have changed after a session was restored.  This method
+  // compares new_tab_id against the previously persisted tab ID (from
+  // our TabNodePool) and updates it if it differs.
+  // |restored_tabs| is a filtered tab-only subset of initial sync data, if
+  // available (during MergeDataAndStartSyncing). It can be used to obtain
+  // baseline SessionSpecifics for tabs we can't fully associate any other
+  // way because they don't yet have a WebContents.
+  // TODO(tim): Bug 98892. We should be able to test this for this on android
+  // even though we didn't have tests for old API-based sessions sync.
+  void AssociateRestoredPlaceholderTab(
+      const SyncedTabDelegate& tab_delegate,
+      SessionID::id_type new_tab_id,
+      const syncer::SyncDataList& restored_tabs,
+      syncer::SyncChangeList* change_output);
+
+  // Stops and re-starts syncing to rebuild association mappings.
+  // See |local_tab_pool_out_of_sync_|.
+  void RebuildAssociations();
+
+  // Mapping of current open (local) tabs to their sync identifiers.
+  TabLinksMap local_tab_map_;
+
+  SyncedSessionTracker session_tracker_;
+  FaviconCache favicon_cache_;
+
+  // Pool of used/available sync nodes associated with local tabs.
+  TabNodePool local_tab_pool_;
+
+  // Tracks whether our local representation of which sync nodes map to what
+  // tabs (belonging to the current local session) is inconsistent.  This can
+  // happen if a foreign client deems our session as "stale" and decides to
+  // delete it. Rather than respond by bullishly re-creating our nodes
+  // immediately, which could lead to ping-pong sequences, we give the benefit
+  // of the doubt and hold off until another local navigation occurs, which
+  // proves that we are still relevant.
+  bool local_tab_pool_out_of_sync_;
+
+  sync_driver::SyncPrefs sync_prefs_;
+
+  const Profile* const profile_;
+
+  scoped_ptr<syncer::SyncErrorFactory> error_handler_;
+  scoped_ptr<syncer::SyncChangeProcessor> sync_processor_;
+
+  const SyncInternalApiDelegate* const delegate_;
+
+  // Unique client tag.
+  std::string current_machine_tag_;
+
+  // User-visible machine name.
+  std::string current_session_name_;
+
+  // SyncID for the sync node containing all the window information for this
+  // client.
+  int local_session_header_node_id_;
+
+  // Number of days without activity after which we consider a session to be
+  // stale and a candidate for garbage collection.
+  size_t stale_session_threshold_days_;
+
+  scoped_ptr<LocalSessionEventRouter> local_event_router_;
+  scoped_ptr<SyncedWindowDelegatesGetter> synced_window_getter_;
+
+  DISALLOW_COPY_AND_ASSIGN(SessionsSyncManager);
+};
+
+}  // namespace browser_sync
+
+#endif  // CHROME_BROWSER_SYNC_SESSIONS_SESSIONS_SYNC_MANAGER_H_
diff --git a/chrome/browser/sync/sessions/sessions_sync_manager_unittest.cc b/chrome/browser/sync/sessions/sessions_sync_manager_unittest.cc
new file mode 100644
index 0000000..74adf52
--- /dev/null
+++ b/chrome/browser/sync/sessions/sessions_sync_manager_unittest.cc
@@ -0,0 +1,1822 @@
+// 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.
+
+#include "chrome/browser/sync/sessions/sessions_sync_manager.h"
+
+#include "base/strings/string_util.h"
+#include "chrome/browser/chrome_notification_types.h"
+#include "chrome/browser/sessions/session_id.h"
+#include "chrome/browser/sessions/session_tab_helper.h"
+#include "chrome/browser/sessions/session_types.h"
+#include "chrome/browser/sync/glue/device_info.h"
+#include "chrome/browser/sync/glue/session_sync_test_helper.h"
+#include "chrome/browser/sync/glue/synced_tab_delegate.h"
+#include "chrome/browser/sync/glue/synced_window_delegate.h"
+#include "chrome/browser/sync/sessions/notification_service_sessions_router.h"
+#include "chrome/browser/sync/sessions/sessions_util.h"
+#include "chrome/browser/sync/sessions/synced_window_delegates_getter.h"
+#include "chrome/browser/ui/sync/tab_contents_synced_tab_delegate.h"
+#include "chrome/browser/ui/tabs/tab_strip_model.h"
+#include "chrome/test/base/browser_with_test_window_test.h"
+#include "components/sessions/serialized_navigation_entry_test_helper.h"
+#include "content/public/browser/navigation_entry.h"
+#include "content/public/browser/notification_details.h"
+#include "content/public/browser/notification_service.h"
+#include "content/public/browser/notification_source.h"
+#include "content/public/browser/web_contents.h"
+#include "sync/api/attachments/attachment_id.h"
+#include "sync/api/attachments/attachment_service_proxy_for_test.h"
+#include "sync/api/sync_error_factory_mock.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+using content::WebContents;
+using sessions::SerializedNavigationEntry;
+using sessions::SerializedNavigationEntryTestHelper;
+using syncer::SyncChange;
+using syncer::SyncData;
+
+namespace browser_sync {
+
+namespace {
+
+class SyncedWindowDelegateOverride : public SyncedWindowDelegate {
+ public:
+  explicit SyncedWindowDelegateOverride(SyncedWindowDelegate* wrapped)
+      : wrapped_(wrapped) {
+  }
+  virtual ~SyncedWindowDelegateOverride() {}
+
+  virtual bool HasWindow() const OVERRIDE {
+    return wrapped_->HasWindow();
+  }
+
+  virtual SessionID::id_type GetSessionId() const OVERRIDE {
+    return wrapped_->GetSessionId();
+  }
+
+  virtual int GetTabCount() const OVERRIDE {
+    return wrapped_->GetTabCount();
+  }
+
+  virtual int GetActiveIndex() const OVERRIDE {
+    return wrapped_->GetActiveIndex();
+  }
+
+  virtual bool IsApp() const OVERRIDE {
+    return wrapped_->IsApp();
+  }
+
+  virtual bool IsTypeTabbed() const OVERRIDE {
+    return wrapped_->IsTypeTabbed();
+  }
+
+  virtual bool IsTypePopup() const OVERRIDE {
+    return wrapped_->IsTypePopup();
+  }
+
+  virtual bool IsTabPinned(const SyncedTabDelegate* tab) const OVERRIDE {
+    return wrapped_->IsTabPinned(tab);
+  }
+
+  virtual SyncedTabDelegate* GetTabAt(int index) const OVERRIDE {
+    if (tab_overrides_.find(index) != tab_overrides_.end())
+      return tab_overrides_.find(index)->second;
+
+    return wrapped_->GetTabAt(index);
+  }
+
+  void OverrideTabAt(int index,
+                     SyncedTabDelegate* delegate,
+                     SessionID::id_type tab_id) {
+    tab_overrides_[index] = delegate;
+    tab_id_overrides_[index] = tab_id;
+  }
+
+  virtual SessionID::id_type GetTabIdAt(int index) const OVERRIDE {
+    if (tab_id_overrides_.find(index) != tab_id_overrides_.end())
+      return tab_id_overrides_.find(index)->second;
+    return wrapped_->GetTabIdAt(index);
+  }
+
+  virtual bool IsSessionRestoreInProgress() const OVERRIDE {
+    return wrapped_->IsSessionRestoreInProgress();
+  }
+
+ private:
+  std::map<int, SyncedTabDelegate*> tab_overrides_;
+  std::map<int, SessionID::id_type> tab_id_overrides_;
+  SyncedWindowDelegate* wrapped_;
+};
+
+class TestSyncedWindowDelegatesGetter : public SyncedWindowDelegatesGetter {
+ public:
+  TestSyncedWindowDelegatesGetter(
+      const std::set<SyncedWindowDelegate*>& delegates)
+      : delegates_(delegates) {}
+
+  virtual const std::set<SyncedWindowDelegate*> GetSyncedWindowDelegates()
+      OVERRIDE {
+    return delegates_;
+  }
+ private:
+  const std::set<SyncedWindowDelegate*> delegates_;
+};
+
+class TestSyncProcessorStub : public syncer::SyncChangeProcessor {
+ public:
+  explicit TestSyncProcessorStub(syncer::SyncChangeList* output)
+      : output_(output) {}
+  virtual syncer::SyncError ProcessSyncChanges(
+      const tracked_objects::Location& from_here,
+      const syncer::SyncChangeList& change_list) OVERRIDE {
+    if (error_.IsSet()) {
+      syncer::SyncError error = error_;
+      error_ = syncer::SyncError();
+      return error;
+    }
+
+    if (output_)
+      output_->insert(output_->end(), change_list.begin(), change_list.end());
+
+    return syncer::SyncError();
+  }
+
+  virtual syncer::SyncDataList GetAllSyncData(syncer::ModelType type)
+      const OVERRIDE {
+    return sync_data_to_return_;
+  }
+
+  void FailProcessSyncChangesWith(const syncer::SyncError& error) {
+    error_ = error;
+  }
+
+  void SetSyncDataToReturn(const syncer::SyncDataList& data) {
+    sync_data_to_return_ = data;
+  }
+
+ private:
+  syncer::SyncError error_;
+  syncer::SyncChangeList* output_;
+  syncer::SyncDataList sync_data_to_return_;
+};
+
+syncer::SyncChange MakeRemoteChange(
+    int64 id,
+    const sync_pb::SessionSpecifics& specifics,
+    SyncChange::SyncChangeType type) {
+  sync_pb::EntitySpecifics entity;
+  entity.mutable_session()->CopyFrom(specifics);
+  return syncer::SyncChange(
+      FROM_HERE,
+      type,
+      syncer::SyncData::CreateRemoteData(
+          id,
+          entity,
+          base::Time(),
+          syncer::AttachmentIdList(),
+          syncer::AttachmentServiceProxyForTest::Create()));
+}
+
+void AddTabsToChangeList(
+      const std::vector<sync_pb::SessionSpecifics>& batch,
+      SyncChange::SyncChangeType type,
+      syncer::SyncChangeList* change_list) {
+  std::vector<sync_pb::SessionSpecifics>::const_iterator iter;
+  for (iter = batch.begin();
+       iter != batch.end(); ++iter) {
+    sync_pb::EntitySpecifics entity;
+    entity.mutable_session()->CopyFrom(*iter);
+    change_list->push_back(syncer::SyncChange(
+        FROM_HERE,
+        type,
+        syncer::SyncData::CreateRemoteData(
+            iter->tab_node_id(),
+            entity,
+            base::Time(),
+            syncer::AttachmentIdList(),
+            syncer::AttachmentServiceProxyForTest::Create())));
+  }
+}
+
+void AddTabsToSyncDataList(const std::vector<sync_pb::SessionSpecifics> tabs,
+                           syncer::SyncDataList* list) {
+  for (size_t i = 0; i < tabs.size(); i++) {
+    sync_pb::EntitySpecifics entity;
+    entity.mutable_session()->CopyFrom(tabs[i]);
+    list->push_back(SyncData::CreateRemoteData(
+        i + 2,
+        entity,
+        base::Time(),
+        syncer::AttachmentIdList(),
+        syncer::AttachmentServiceProxyForTest::Create()));
+  }
+}
+
+class DummyRouter : public LocalSessionEventRouter {
+ public:
+  virtual ~DummyRouter() {}
+  virtual void StartRoutingTo(LocalSessionEventHandler* handler) OVERRIDE {}
+  virtual void Stop() OVERRIDE {}
+};
+
+scoped_ptr<LocalSessionEventRouter> NewDummyRouter() {
+  return scoped_ptr<LocalSessionEventRouter>(new DummyRouter());
+}
+
+}  // namespace
+
+class SessionsSyncManagerTest
+    : public BrowserWithTestWindowTest,
+      public SessionsSyncManager::SyncInternalApiDelegate {
+ public:
+  SessionsSyncManagerTest() : test_processor_(NULL) {}
+
+  virtual void SetUp() OVERRIDE {
+    BrowserWithTestWindowTest::SetUp();
+    browser_sync::NotificationServiceSessionsRouter* router(
+        new browser_sync::NotificationServiceSessionsRouter(
+            profile(), syncer::SyncableService::StartSyncFlare()));
+    manager_.reset(new SessionsSyncManager(profile(), this,
+      scoped_ptr<LocalSessionEventRouter>(router)));
+  }
+
+  virtual void TearDown() OVERRIDE {
+    test_processor_ = NULL;
+    helper()->Reset();
+    manager_.reset();
+    BrowserWithTestWindowTest::TearDown();
+  }
+
+  virtual scoped_ptr<DeviceInfo> GetLocalDeviceInfo() const OVERRIDE {
+    return scoped_ptr<DeviceInfo>(
+        new DeviceInfo(GetLocalSyncCacheGUID(),
+                       "Wayne Gretzky's Hacking Box",
+                       "Chromium 10k",
+                       "Chrome 10k",
+                       sync_pb::SyncEnums_DeviceType_TYPE_LINUX));
+  }
+
+  virtual std::string GetLocalSyncCacheGUID() const OVERRIDE {
+    return "cache_guid";
+  }
+
+  SessionsSyncManager* manager() { return manager_.get(); }
+  SessionSyncTestHelper* helper() { return &helper_; }
+
+  void InitWithSyncDataTakeOutput(const syncer::SyncDataList& initial_data,
+                                  syncer::SyncChangeList* output) {
+    test_processor_ = new TestSyncProcessorStub(output);
+    syncer::SyncMergeResult result = manager_->MergeDataAndStartSyncing(
+        syncer::SESSIONS, initial_data,
+        scoped_ptr<syncer::SyncChangeProcessor>(test_processor_),
+        scoped_ptr<syncer::SyncErrorFactory>(
+            new syncer::SyncErrorFactoryMock()));
+    EXPECT_FALSE(result.error().IsSet());
+  }
+
+  void InitWithNoSyncData() {
+    InitWithSyncDataTakeOutput(syncer::SyncDataList(), NULL);
+  }
+
+  void TriggerProcessSyncChangesError() {
+    test_processor_->FailProcessSyncChangesWith(syncer::SyncError(
+        FROM_HERE, syncer::SyncError::DATATYPE_ERROR, "Error",
+        syncer::SESSIONS));
+  }
+
+  void SetSyncData(const syncer::SyncDataList& data) {
+     test_processor_->SetSyncDataToReturn(data);
+  }
+
+  syncer::SyncChangeList* FilterOutLocalHeaderChanges(
+      syncer::SyncChangeList* list) {
+    syncer::SyncChangeList::iterator it = list->begin();
+    bool found = false;
+    while (it != list->end()) {
+      if (syncer::SyncDataLocal(it->sync_data()).GetTag() ==
+          manager_->current_machine_tag()) {
+        EXPECT_TRUE(SyncChange::ACTION_ADD == it->change_type() ||
+                    SyncChange::ACTION_UPDATE == it->change_type());
+        it = list->erase(it);
+        found = true;
+      } else {
+        ++it;
+      }
+    }
+    EXPECT_TRUE(found);
+    return list;
+  }
+
+ private:
+  scoped_ptr<SessionsSyncManager> manager_;
+  SessionSyncTestHelper helper_;
+  TestSyncProcessorStub* test_processor_;
+};
+
+// Test that the SyncSessionManager can properly fill in a SessionHeader.
+TEST_F(SessionsSyncManagerTest, PopulateSessionHeader) {
+  sync_pb::SessionHeader header_s;
+  header_s.set_client_name("Client 1");
+  header_s.set_device_type(sync_pb::SyncEnums_DeviceType_TYPE_WIN);
+
+  SyncedSession session;
+  base::Time time = base::Time::Now();
+  SessionsSyncManager::PopulateSessionHeaderFromSpecifics(
+      header_s, time, &session);
+  ASSERT_EQ("Client 1", session.session_name);
+  ASSERT_EQ(SyncedSession::TYPE_WIN, session.device_type);
+  ASSERT_EQ(time, session.modified_time);
+}
+
+// Test translation between protobuf types and chrome session types.
+TEST_F(SessionsSyncManagerTest, PopulateSessionWindow) {
+  sync_pb::SessionWindow window_s;
+  window_s.add_tab(0);
+  window_s.set_browser_type(sync_pb::SessionWindow_BrowserType_TYPE_TABBED);
+  window_s.set_selected_tab_index(1);
+
+  std::string tag = "tag";
+  SyncedSession* session = manager()->session_tracker_.GetSession(tag);
+  manager()->session_tracker_.PutWindowInSession(tag, 0);
+  manager()->BuildSyncedSessionFromSpecifics(
+      tag, window_s, base::Time(), session->windows[0]);
+  ASSERT_EQ(1U, session->windows[0]->tabs.size());
+  ASSERT_EQ(1, session->windows[0]->selected_tab_index);
+  ASSERT_EQ(1, session->windows[0]->type);
+  ASSERT_EQ(1U, manager()->session_tracker_.num_synced_sessions());
+  ASSERT_EQ(1U,
+            manager()->session_tracker_.num_synced_tabs(std::string("tag")));
+}
+
+namespace {
+
+class SyncedTabDelegateFake : public SyncedTabDelegate {
+ public:
+  SyncedTabDelegateFake() : current_entry_index_(0),
+                            pending_entry_index_(-1),
+                            is_managed_(false),
+                            sync_id_(-1),
+                            blocked_navigations_(NULL) {}
+  virtual ~SyncedTabDelegateFake() {}
+
+  virtual int GetCurrentEntryIndex() const OVERRIDE {
+    return current_entry_index_;
+  }
+  void set_current_entry_index(int i) {
+    current_entry_index_ = i;
+  }
+
+  virtual content::NavigationEntry* GetEntryAtIndex(int i) const OVERRIDE {
+    const int size = entries_.size();
+    return (size < i + 1) ? NULL : entries_[i];
+  }
+
+  void AppendEntry(content::NavigationEntry* entry) {
+    entries_.push_back(entry);
+  }
+
+  virtual int GetEntryCount() const OVERRIDE {
+    return entries_.size();
+  }
+
+  virtual int GetPendingEntryIndex() const OVERRIDE {
+    return pending_entry_index_;
+  }
+  void set_pending_entry_index(int i) {
+    pending_entry_index_ = i;
+  }
+
+  virtual SessionID::id_type GetWindowId() const OVERRIDE {
+    return SessionID::id_type();
+  }
+
+  virtual SessionID::id_type GetSessionId() const OVERRIDE {
+    return SessionID::id_type();
+  }
+
+  virtual bool IsBeingDestroyed() const OVERRIDE { return false; }
+  virtual Profile* profile() const OVERRIDE { return NULL; }
+  virtual std::string GetExtensionAppId() const OVERRIDE {
+    return std::string();
+  }
+  virtual content::NavigationEntry* GetPendingEntry() const OVERRIDE {
+   return NULL;
+  }
+  virtual content::NavigationEntry* GetActiveEntry() const OVERRIDE {
+   return NULL;
+  }
+  virtual bool ProfileIsManaged() const OVERRIDE {
+   return is_managed_;
+  }
+  void set_is_managed(bool is_managed) { is_managed_ = is_managed; }
+  virtual const std::vector<const content::NavigationEntry*>*
+      GetBlockedNavigations() const OVERRIDE {
+    return blocked_navigations_;
+  }
+  void set_blocked_navigations(
+      std::vector<const content::NavigationEntry*>* navs) {
+    blocked_navigations_ = navs;
+  }
+  virtual bool IsPinned() const OVERRIDE {
+   return false;
+  }
+  virtual bool HasWebContents() const OVERRIDE {
+   return false;
+  }
+  virtual content::WebContents* GetWebContents() const OVERRIDE {
+   return NULL;
+  }
+
+  // Session sync related methods.
+  virtual int GetSyncId() const OVERRIDE {
+   return sync_id_;
+  }
+  virtual void SetSyncId(int sync_id) OVERRIDE {
+    sync_id_ = sync_id;
+  }
+
+  void reset() {
+    current_entry_index_ = 0;
+    pending_entry_index_ = -1;
+    sync_id_ = -1;
+    entries_.clear();
+  }
+
+ private:
+   int current_entry_index_;
+   int pending_entry_index_;
+   bool is_managed_;
+   int sync_id_;
+   std::vector<const content::NavigationEntry*>* blocked_navigations_;
+   ScopedVector<content::NavigationEntry> entries_;
+};
+
+}  // namespace
+
+// Test that we exclude tabs with only chrome:// and file:// schemed navigations
+// from ShouldSyncTab(..).
+TEST_F(SessionsSyncManagerTest, ValidTabs) {
+  SyncedTabDelegateFake tab;
+
+  // A null entry shouldn't crash.
+  tab.AppendEntry(NULL);
+  EXPECT_FALSE(sessions_util::ShouldSyncTab(tab));
+  tab.reset();
+
+  // A chrome:// entry isn't valid.
+  content::NavigationEntry* entry(content::NavigationEntry::Create());
+  entry->SetVirtualURL(GURL("chrome://preferences/"));
+  tab.AppendEntry(entry);
+  EXPECT_FALSE(sessions_util::ShouldSyncTab(tab));
+
+
+  // A file:// entry isn't valid, even in addition to another entry.
+  content::NavigationEntry* entry2(content::NavigationEntry::Create());
+  entry2->SetVirtualURL(GURL("file://bla"));
+  tab.AppendEntry(entry2);
+  EXPECT_FALSE(sessions_util::ShouldSyncTab(tab));
+
+  // Add a valid scheme entry to tab, making the tab valid.
+  content::NavigationEntry* entry3(content::NavigationEntry::Create());
+  entry3->SetVirtualURL(GURL("http://www.google.com"));
+  tab.AppendEntry(entry3);
+  EXPECT_FALSE(sessions_util::ShouldSyncTab(tab));
+}
+
+// Make sure GetCurrentVirtualURL() returns the virtual URL of the pending
+// entry if the current entry is pending.
+TEST_F(SessionsSyncManagerTest, GetCurrentVirtualURLPending) {
+  SyncedTabDelegateFake tab;
+  content::NavigationEntry* entry(content::NavigationEntry::Create());
+  entry->SetVirtualURL(GURL("http://www.google.com"));
+  tab.AppendEntry(entry);
+  EXPECT_EQ(entry->GetVirtualURL(), manager()->GetCurrentVirtualURL(tab));
+}
+
+// Make sure GetCurrentVirtualURL() returns the virtual URL of the current
+// entry if the current entry is non-pending.
+TEST_F(SessionsSyncManagerTest, GetCurrentVirtualURLNonPending) {
+  SyncedTabDelegateFake tab;
+  content::NavigationEntry* entry(content::NavigationEntry::Create());
+  entry->SetVirtualURL(GURL("http://www.google.com"));
+  tab.AppendEntry(entry);
+  EXPECT_EQ(entry->GetVirtualURL(), manager()->GetCurrentVirtualURL(tab));
+}
+
+static const base::Time kTime1 = base::Time::FromInternalValue(100);
+static const base::Time kTime2 = base::Time::FromInternalValue(105);
+static const base::Time kTime3 = base::Time::FromInternalValue(110);
+static const base::Time kTime4 = base::Time::FromInternalValue(120);
+static const base::Time kTime5 = base::Time::FromInternalValue(130);
+
+// Populate the mock tab delegate with some data and navigation
+// entries and make sure that setting a SessionTab from it preserves
+// those entries (and clobbers any existing data).
+TEST_F(SessionsSyncManagerTest, SetSessionTabFromDelegate) {
+  // Create a tab with three valid entries.
+  SyncedTabDelegateFake tab;
+  content::NavigationEntry* entry1(content::NavigationEntry::Create());
+  entry1->SetVirtualURL(GURL("http://www.google.com"));
+  entry1->SetTimestamp(kTime1);
+  entry1->SetHttpStatusCode(200);
+  content::NavigationEntry* entry2(content::NavigationEntry::Create());
+  entry2->SetVirtualURL(GURL("http://www.noodle.com"));
+  entry2->SetTimestamp(kTime2);
+  entry2->SetHttpStatusCode(201);
+  content::NavigationEntry* entry3(content::NavigationEntry::Create());
+  entry3->SetVirtualURL(GURL("http://www.doodle.com"));
+  entry3->SetTimestamp(kTime3);
+  entry3->SetHttpStatusCode(202);
+
+  tab.AppendEntry(entry1);
+  tab.AppendEntry(entry2);
+  tab.AppendEntry(entry3);
+  tab.set_current_entry_index(2);
+
+  SessionTab session_tab;
+  session_tab.window_id.set_id(1);
+  session_tab.tab_id.set_id(1);
+  session_tab.tab_visual_index = 1;
+  session_tab.current_navigation_index = 1;
+  session_tab.pinned = true;
+  session_tab.extension_app_id = "app id";
+  session_tab.user_agent_override = "override";
+  session_tab.timestamp = kTime5;
+  session_tab.navigations.push_back(
+      SerializedNavigationEntryTestHelper::CreateNavigation(
+          "http://www.example.com", "Example"));
+  session_tab.session_storage_persistent_id = "persistent id";
+  manager()->SetSessionTabFromDelegate(tab, kTime4, &session_tab);
+
+  EXPECT_EQ(0, session_tab.window_id.id());
+  EXPECT_EQ(0, session_tab.tab_id.id());
+  EXPECT_EQ(0, session_tab.tab_visual_index);
+  EXPECT_EQ(2, session_tab.current_navigation_index);
+  EXPECT_FALSE(session_tab.pinned);
+  EXPECT_TRUE(session_tab.extension_app_id.empty());
+  EXPECT_TRUE(session_tab.user_agent_override.empty());
+  EXPECT_EQ(kTime4, session_tab.timestamp);
+  ASSERT_EQ(3u, session_tab.navigations.size());
+  EXPECT_EQ(entry1->GetVirtualURL(),
+            session_tab.navigations[0].virtual_url());
+  EXPECT_EQ(entry2->GetVirtualURL(),
+            session_tab.navigations[1].virtual_url());
+  EXPECT_EQ(entry3->GetVirtualURL(),
+            session_tab.navigations[2].virtual_url());
+  EXPECT_EQ(kTime1, session_tab.navigations[0].timestamp());
+  EXPECT_EQ(kTime2, session_tab.navigations[1].timestamp());
+  EXPECT_EQ(kTime3, session_tab.navigations[2].timestamp());
+  EXPECT_EQ(200, session_tab.navigations[0].http_status_code());
+  EXPECT_EQ(201, session_tab.navigations[1].http_status_code());
+  EXPECT_EQ(202, session_tab.navigations[2].http_status_code());
+  EXPECT_EQ(SerializedNavigationEntry::STATE_INVALID,
+            session_tab.navigations[0].blocked_state());
+  EXPECT_EQ(SerializedNavigationEntry::STATE_INVALID,
+            session_tab.navigations[1].blocked_state());
+  EXPECT_EQ(SerializedNavigationEntry::STATE_INVALID,
+            session_tab.navigations[2].blocked_state());
+  EXPECT_TRUE(session_tab.session_storage_persistent_id.empty());
+}
+
+// Tests that for managed users blocked navigations are recorded and marked as
+// such, while regular navigations are marked as allowed.
+TEST_F(SessionsSyncManagerTest, BlockedNavigations) {
+  SyncedTabDelegateFake tab;
+  content::NavigationEntry* entry1(content::NavigationEntry::Create());
+  entry1->SetVirtualURL(GURL("http://www.google.com"));
+  entry1->SetTimestamp(kTime1);
+  tab.AppendEntry(entry1);
+
+  content::NavigationEntry* entry2 = content::NavigationEntry::Create();
+  entry2->SetVirtualURL(GURL("http://blocked.com/foo"));
+  entry2->SetTimestamp(kTime2);
+  content::NavigationEntry* entry3 = content::NavigationEntry::Create();
+  entry3->SetVirtualURL(GURL("http://evil.com"));
+  entry3->SetTimestamp(kTime3);
+  ScopedVector<const content::NavigationEntry> blocked_navigations;
+  blocked_navigations.push_back(entry2);
+  blocked_navigations.push_back(entry3);
+
+  tab.set_is_managed(true);
+  tab.set_blocked_navigations(&blocked_navigations.get());
+
+  SessionTab session_tab;
+  session_tab.window_id.set_id(1);
+  session_tab.tab_id.set_id(1);
+  session_tab.tab_visual_index = 1;
+  session_tab.current_navigation_index = 1;
+  session_tab.pinned = true;
+  session_tab.extension_app_id = "app id";
+  session_tab.user_agent_override = "override";
+  session_tab.timestamp = kTime5;
+  session_tab.navigations.push_back(
+      SerializedNavigationEntryTestHelper::CreateNavigation(
+          "http://www.example.com", "Example"));
+  session_tab.session_storage_persistent_id = "persistent id";
+  manager()->SetSessionTabFromDelegate(tab, kTime4, &session_tab);
+
+  EXPECT_EQ(0, session_tab.window_id.id());
+  EXPECT_EQ(0, session_tab.tab_id.id());
+  EXPECT_EQ(0, session_tab.tab_visual_index);
+  EXPECT_EQ(0, session_tab.current_navigation_index);
+  EXPECT_FALSE(session_tab.pinned);
+  EXPECT_TRUE(session_tab.extension_app_id.empty());
+  EXPECT_TRUE(session_tab.user_agent_override.empty());
+  EXPECT_EQ(kTime4, session_tab.timestamp);
+  ASSERT_EQ(3u, session_tab.navigations.size());
+  EXPECT_EQ(entry1->GetVirtualURL(),
+            session_tab.navigations[0].virtual_url());
+  EXPECT_EQ(entry2->GetVirtualURL(),
+            session_tab.navigations[1].virtual_url());
+  EXPECT_EQ(entry3->GetVirtualURL(),
+            session_tab.navigations[2].virtual_url());
+  EXPECT_EQ(kTime1, session_tab.navigations[0].timestamp());
+  EXPECT_EQ(kTime2, session_tab.navigations[1].timestamp());
+  EXPECT_EQ(kTime3, session_tab.navigations[2].timestamp());
+  EXPECT_EQ(SerializedNavigationEntry::STATE_ALLOWED,
+            session_tab.navigations[0].blocked_state());
+  EXPECT_EQ(SerializedNavigationEntry::STATE_BLOCKED,
+            session_tab.navigations[1].blocked_state());
+  EXPECT_EQ(SerializedNavigationEntry::STATE_BLOCKED,
+            session_tab.navigations[2].blocked_state());
+  EXPECT_TRUE(session_tab.session_storage_persistent_id.empty());
+}
+
+// Tests that the local session header objects is created properly in
+// presence of no other session activity, once and only once.
+TEST_F(SessionsSyncManagerTest, MergeLocalSessionNoTabs) {
+  syncer::SyncChangeList out;
+  InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out);
+  EXPECT_FALSE(manager()->current_machine_tag().empty());
+
+  EXPECT_EQ(2U, out.size());
+  EXPECT_TRUE(out[0].IsValid());
+  EXPECT_EQ(SyncChange::ACTION_ADD, out[0].change_type());
+  const SyncData data(out[0].sync_data());
+  EXPECT_EQ(manager()->current_machine_tag(),
+            syncer::SyncDataLocal(data).GetTag());
+  const sync_pb::SessionSpecifics& specifics(data.GetSpecifics().session());
+  EXPECT_EQ(manager()->current_machine_tag(), specifics.session_tag());
+  EXPECT_TRUE(specifics.has_header());
+  const sync_pb::SessionHeader& header_s = specifics.header();
+  EXPECT_TRUE(header_s.has_device_type());
+  EXPECT_EQ(GetLocalDeviceInfo()->client_name(), header_s.client_name());
+  EXPECT_EQ(0, header_s.window_size());
+
+  EXPECT_TRUE(out[1].IsValid());
+  EXPECT_EQ(SyncChange::ACTION_UPDATE, out[1].change_type());
+  const SyncData data_2(out[1].sync_data());
+  EXPECT_EQ(manager()->current_machine_tag(),
+            syncer::SyncDataLocal(data_2).GetTag());
+  const sync_pb::SessionSpecifics& specifics2(data_2.GetSpecifics().session());
+  EXPECT_EQ(manager()->current_machine_tag(), specifics2.session_tag());
+  EXPECT_TRUE(specifics2.has_header());
+  const sync_pb::SessionHeader& header_s2 = specifics2.header();
+  EXPECT_EQ(0, header_s2.window_size());
+
+  // Now take that header node and feed it in as input.
+  SyncData d(SyncData::CreateRemoteData(
+      1,
+      data.GetSpecifics(),
+      base::Time(),
+      syncer::AttachmentIdList(),
+      syncer::AttachmentServiceProxyForTest::Create()));
+  syncer::SyncDataList in(&d, &d + 1);
+  out.clear();
+  SessionsSyncManager manager2(profile(), this, NewDummyRouter());
+  syncer::SyncMergeResult result = manager2.MergeDataAndStartSyncing(
+      syncer::SESSIONS, in,
+      scoped_ptr<syncer::SyncChangeProcessor>(
+          new TestSyncProcessorStub(&out)),
+      scoped_ptr<syncer::SyncErrorFactory>(
+          new syncer::SyncErrorFactoryMock()));
+  ASSERT_FALSE(result.error().IsSet());
+
+  EXPECT_EQ(1U, out.size());
+  EXPECT_EQ(SyncChange::ACTION_UPDATE, out[0].change_type());
+  EXPECT_TRUE(out[0].sync_data().GetSpecifics().session().has_header());
+}
+
+// Ensure model association associates the pre-existing tabs.
+TEST_F(SessionsSyncManagerTest, SwappedOutOnRestore) {
+  AddTab(browser(), GURL("http://foo1"));
+  NavigateAndCommitActiveTab(GURL("http://foo2"));
+  AddTab(browser(), GURL("http://bar1"));
+  NavigateAndCommitActiveTab(GURL("http://bar2"));
+  AddTab(browser(), GURL("http://baz1"));
+  NavigateAndCommitActiveTab(GURL("http://baz2"));
+  const int kRestoredTabId = 1337;
+  const int kNewTabId = 2468;
+
+  syncer::SyncDataList in;
+  syncer::SyncChangeList out;
+  InitWithSyncDataTakeOutput(in, &out);
+
+  // Should be one header add, 3 tab add/update pairs, one header update.
+  ASSERT_EQ(8U, out.size());
+
+  // For input, we set up:
+  // * one "normal" fully loaded tab
+  // * one "frozen" tab with no WebContents and a tab_id change
+  // * one "frozen" tab with no WebContents and no tab_id change
+  SyncData t0(SyncData::CreateRemoteData(
+      1,
+      out[2].sync_data().GetSpecifics(),
+      base::Time(),
+      syncer::AttachmentIdList(),
+      syncer::AttachmentServiceProxyForTest::Create()));
+  sync_pb::EntitySpecifics entity(out[4].sync_data().GetSpecifics());
+  entity.mutable_session()->mutable_tab()->set_tab_id(kRestoredTabId);
+  SyncData t1(SyncData::CreateRemoteData(
+      2,
+      entity,
+      base::Time(),
+      syncer::AttachmentIdList(),
+      syncer::AttachmentServiceProxyForTest::Create()));
+  SyncData t2(SyncData::CreateRemoteData(
+      3,
+      out[6].sync_data().GetSpecifics(),
+      base::Time(),
+      syncer::AttachmentIdList(),
+      syncer::AttachmentServiceProxyForTest::Create()));
+  in.push_back(t0);
+  in.push_back(t1);
+  in.push_back(t2);
+  out.clear();
+  manager()->StopSyncing(syncer::SESSIONS);
+
+  const std::set<SyncedWindowDelegate*> windows(
+      SyncedWindowDelegate::GetSyncedWindowDelegates());
+  ASSERT_EQ(1U, windows.size());
+  SyncedTabDelegateFake t1_override, t2_override;
+  t1_override.SetSyncId(1);  // No WebContents by default.
+  t2_override.SetSyncId(2);  // No WebContents by default.
+  SyncedWindowDelegateOverride window_override(*windows.begin());
+  window_override.OverrideTabAt(1, &t1_override, kNewTabId);
+  window_override.OverrideTabAt(2, &t2_override,
+                                t2.GetSpecifics().session().tab().tab_id());
+  std::set<SyncedWindowDelegate*> delegates;
+  delegates.insert(&window_override);
+  scoped_ptr<TestSyncedWindowDelegatesGetter> getter(
+      new TestSyncedWindowDelegatesGetter(delegates));
+  manager()->synced_window_getter_.reset(getter.release());
+
+  syncer::SyncMergeResult result = manager()->MergeDataAndStartSyncing(
+      syncer::SESSIONS, in,
+      scoped_ptr<syncer::SyncChangeProcessor>(
+          new TestSyncProcessorStub(&out)),
+      scoped_ptr<syncer::SyncErrorFactory>(
+          new syncer::SyncErrorFactoryMock()));
+
+  // There should be two changes, one for the fully associated tab, and
+  // one for the tab_id update to t1.  t2 shouldn't need to be updated.
+  ASSERT_EQ(2U, FilterOutLocalHeaderChanges(&out)->size());
+  EXPECT_EQ(SyncChange::ACTION_UPDATE, out[0].change_type());
+  EXPECT_EQ(SyncChange::ACTION_UPDATE, out[1].change_type());
+  EXPECT_EQ(kNewTabId,
+            out[1].sync_data().GetSpecifics().session().tab().tab_id());
+
+  // Verify TabLinks.
+  SessionsSyncManager::TabLinksMap tab_map = manager()->local_tab_map_;
+  ASSERT_EQ(3U, tab_map.size());
+  int t2_tab_id = t2.GetSpecifics().session().tab().tab_id();
+  EXPECT_EQ(2, tab_map.find(t2_tab_id)->second->tab_node_id());
+  EXPECT_EQ(1, tab_map.find(kNewTabId)->second->tab_node_id());
+  int t0_tab_id = out[0].sync_data().GetSpecifics().session().tab().tab_id();
+  EXPECT_EQ(0, tab_map.find(t0_tab_id)->second->tab_node_id());
+  // TODO(tim): Once bug 337057 is fixed, we can issue an OnLocalTabModified
+  // from here (using an override similar to above) to return a new tab id
+  // and verify that we don't see any node creations in the SyncChangeProcessor
+  // (similar to how SessionsSyncManagerTest.OnLocalTabModified works.)
+}
+
+// Tests MergeDataAndStartSyncing with sync data but no local data.
+TEST_F(SessionsSyncManagerTest, MergeWithInitialForeignSession) {
+  std::string tag = "tag1";
+
+  SessionID::id_type n1[] = {5, 10, 13, 17};
+  std::vector<SessionID::id_type> tab_list1(n1, n1 + arraysize(n1));
+  std::vector<sync_pb::SessionSpecifics> tabs1;
+  sync_pb::SessionSpecifics meta(helper()->BuildForeignSession(
+      tag, tab_list1, &tabs1));
+  // Add a second window.
+  SessionID::id_type n2[] = {7, 15, 18, 20};
+  std::vector<SessionID::id_type> tab_list2(n2, n2 + arraysize(n2));
+  helper()->AddWindowSpecifics(1, tab_list2, &meta);
+
+  // Set up initial data.
+  syncer::SyncDataList initial_data;
+  sync_pb::EntitySpecifics entity;
+  entity.mutable_session()->CopyFrom(meta);
+  initial_data.push_back(SyncData::CreateRemoteData(
+      1,
+      entity,
+      base::Time(),
+      syncer::AttachmentIdList(),
+      syncer::AttachmentServiceProxyForTest::Create()));
+  AddTabsToSyncDataList(tabs1, &initial_data);
+
+  for (size_t i = 0; i < tab_list2.size(); ++i) {
+    sync_pb::EntitySpecifics entity;
+    helper()->BuildTabSpecifics(tag, 0, tab_list2[i],
+                                entity.mutable_session());
+    initial_data.push_back(SyncData::CreateRemoteData(
+        i + 10,
+        entity,
+        base::Time(),
+        syncer::AttachmentIdList(),
+        syncer::AttachmentServiceProxyForTest::Create()));
+  }
+
+  syncer::SyncChangeList output;
+  InitWithSyncDataTakeOutput(initial_data, &output);
+  EXPECT_TRUE(FilterOutLocalHeaderChanges(&output)->empty());
+
+  std::vector<const SyncedSession*> foreign_sessions;
+  ASSERT_TRUE(manager()->GetAllForeignSessions(&foreign_sessions));
+  ASSERT_EQ(1U, foreign_sessions.size());
+  std::vector<std::vector<SessionID::id_type> > session_reference;
+  session_reference.push_back(tab_list1);
+  session_reference.push_back(tab_list2);
+  helper()->VerifySyncedSession(tag, session_reference, *(foreign_sessions[0]));
+}
+
+// This is a combination of MergeWithInitialForeignSession and
+// MergeLocalSessionExistingTabs. We repeat some checks performed in each of
+// those tests to ensure the common mixed scenario works.
+TEST_F(SessionsSyncManagerTest, MergeWithLocalAndForeignTabs) {
+  // Local.
+  AddTab(browser(), GURL("http://foo1"));
+  NavigateAndCommitActiveTab(GURL("http://foo2"));
+
+  // Foreign.
+  std::string tag = "tag1";
+  SessionID::id_type n1[] = {5, 10, 13, 17};
+  std::vector<SessionID::id_type> tab_list1(n1, n1 + arraysize(n1));
+  std::vector<sync_pb::SessionSpecifics> tabs1;
+  sync_pb::SessionSpecifics meta(helper()->BuildForeignSession(
+      tag, tab_list1, &tabs1));
+  syncer::SyncDataList foreign_data;
+  sync_pb::EntitySpecifics entity;
+  entity.mutable_session()->CopyFrom(meta);
+  foreign_data.push_back(SyncData::CreateRemoteData(
+      1,
+      entity,
+      base::Time(),
+      syncer::AttachmentIdList(),
+      syncer::AttachmentServiceProxyForTest::Create()));
+  AddTabsToSyncDataList(tabs1, &foreign_data);
+
+  syncer::SyncChangeList output;
+  InitWithSyncDataTakeOutput(foreign_data, &output);
+  ASSERT_EQ(4U, output.size());
+
+  // Verify the local header.
+  EXPECT_TRUE(output[0].IsValid());
+  EXPECT_EQ(SyncChange::ACTION_ADD, output[0].change_type());
+  const SyncData data(output[0].sync_data());
+  EXPECT_EQ(manager()->current_machine_tag(),
+            syncer::SyncDataLocal(data).GetTag());
+  const sync_pb::SessionSpecifics& specifics(data.GetSpecifics().session());
+  EXPECT_EQ(manager()->current_machine_tag(), specifics.session_tag());
+  EXPECT_TRUE(specifics.has_header());
+  const sync_pb::SessionHeader& header_s = specifics.header();
+  EXPECT_TRUE(header_s.has_device_type());
+  EXPECT_EQ(GetLocalDeviceInfo()->client_name(), header_s.client_name());
+  EXPECT_EQ(0, header_s.window_size());
+
+  // Verify the tab node creations and updates with content.
+  for (int i = 1; i < 3; i++) {
+    EXPECT_TRUE(output[i].IsValid());
+    const SyncData data(output[i].sync_data());
+    EXPECT_TRUE(StartsWithASCII(syncer::SyncDataLocal(data).GetTag(),
+                                manager()->current_machine_tag(), true));
+    const sync_pb::SessionSpecifics& specifics(data.GetSpecifics().session());
+    EXPECT_EQ(manager()->current_machine_tag(), specifics.session_tag());
+  }
+  EXPECT_EQ(SyncChange::ACTION_ADD, output[1].change_type());
+  EXPECT_EQ(SyncChange::ACTION_UPDATE, output[2].change_type());
+  EXPECT_TRUE(output[2].sync_data().GetSpecifics().session().has_tab());
+
+  // Verify the header was updated to reflect window state.
+  EXPECT_TRUE(output[3].IsValid());
+  EXPECT_EQ(SyncChange::ACTION_UPDATE, output[3].change_type());
+  const SyncData data_2(output[3].sync_data());
+  EXPECT_EQ(manager()->current_machine_tag(),
+            syncer::SyncDataLocal(data_2).GetTag());
+  const sync_pb::SessionSpecifics& specifics2(data_2.GetSpecifics().session());
+  EXPECT_EQ(manager()->current_machine_tag(), specifics2.session_tag());
+  EXPECT_TRUE(specifics2.has_header());
+  const sync_pb::SessionHeader& header_s2 = specifics2.header();
+  EXPECT_EQ(1, header_s2.window_size());
+
+  // Verify foreign data.
+  std::vector<const SyncedSession*> foreign_sessions;
+  ASSERT_TRUE(manager()->GetAllForeignSessions(&foreign_sessions));
+  std::vector<std::vector<SessionID::id_type> > session_reference;
+  session_reference.push_back(tab_list1);
+  helper()->VerifySyncedSession(tag, session_reference, *(foreign_sessions[0]));
+  // There should be one and only one foreign session. If VerifySyncedSession
+  // was successful above this EXPECT call ensures the local session didn't
+  // get mistakenly added to foreign tracking (Similar to ExistingTabs test).
+  EXPECT_EQ(1U, foreign_sessions.size());
+}
+
+// Tests the common scenario.  Merge with both local and foreign session data
+// followed by updates flowing from sync and local.
+TEST_F(SessionsSyncManagerTest, UpdatesAfterMixedMerge) {
+  // Add local and foreign data.
+  AddTab(browser(), GURL("http://foo1"));
+  NavigateAndCommitActiveTab(GURL("http://foo2"));
+
+  std::string tag1 = "tag1";
+  syncer::SyncDataList foreign_data1;
+  std::vector<std::vector<SessionID::id_type> > meta1_reference;
+  sync_pb::SessionSpecifics meta1;
+
+  SessionID::id_type n1[] = {5, 10, 13, 17};
+  std::vector<SessionID::id_type> tab_list1(n1, n1 + arraysize(n1));
+  meta1_reference.push_back(tab_list1);
+  std::vector<sync_pb::SessionSpecifics> tabs1;
+  meta1 = helper()->BuildForeignSession(tag1, tab_list1, &tabs1);
+  sync_pb::EntitySpecifics entity;
+  entity.mutable_session()->CopyFrom(meta1);
+  foreign_data1.push_back(SyncData::CreateRemoteData(
+      1,
+      entity,
+      base::Time(),
+      syncer::AttachmentIdList(),
+      syncer::AttachmentServiceProxyForTest::Create()));
+  AddTabsToSyncDataList(tabs1, &foreign_data1);
+
+  syncer::SyncChangeList output1;
+  InitWithSyncDataTakeOutput(foreign_data1, &output1);
+  ASSERT_EQ(4U, output1.size());
+
+  // Add a second window to the foreign session.
+  // TODO(tim): Bug 98892. Add local window too when observers are hooked up.
+  SessionID::id_type tab_nums2[] = {7, 15, 18, 20};
+  std::vector<SessionID::id_type> tab_list2(
+      tab_nums2, tab_nums2 + arraysize(tab_nums2));
+  meta1_reference.push_back(tab_list2);
+  helper()->AddWindowSpecifics(1, tab_list2, &meta1);
+  std::vector<sync_pb::SessionSpecifics> tabs2;
+  tabs2.resize(tab_list2.size());
+  for (size_t i = 0; i < tab_list2.size(); ++i) {
+    helper()->BuildTabSpecifics(tag1, 0, tab_list2[i], &tabs2[i]);
+  }
+
+  syncer::SyncChangeList changes;
+  changes.push_back(MakeRemoteChange(1, meta1, SyncChange::ACTION_UPDATE));
+  AddTabsToChangeList(tabs2, SyncChange::ACTION_ADD, &changes);
+  manager()->ProcessSyncChanges(FROM_HERE, changes);
+  changes.clear();
+
+  // Check that the foreign session was associated and retrieve the data.
+  std::vector<const SyncedSession*> foreign_sessions;
+  ASSERT_TRUE(manager()->GetAllForeignSessions(&foreign_sessions));
+  ASSERT_EQ(1U, foreign_sessions.size());
+  ASSERT_EQ(4U, foreign_sessions[0]->windows.find(0)->second->tabs.size());
+  ASSERT_EQ(4U, foreign_sessions[0]->windows.find(1)->second->tabs.size());
+  helper()->VerifySyncedSession(tag1, meta1_reference, *(foreign_sessions[0]));
+
+  // Add a new foreign session.
+  std::string tag2 = "tag2";
+  SessionID::id_type n2[] = {107, 115};
+  std::vector<SessionID::id_type> tag2_tab_list(n2, n2 + arraysize(n2));
+  std::vector<sync_pb::SessionSpecifics> tag2_tabs;
+  sync_pb::SessionSpecifics meta2(helper()->BuildForeignSession(
+      tag2, tag2_tab_list, &tag2_tabs));
+  changes.push_back(MakeRemoteChange(100, meta2, SyncChange::ACTION_ADD));
+  AddTabsToChangeList(tag2_tabs, SyncChange::ACTION_ADD, &changes);
+
+  manager()->ProcessSyncChanges(FROM_HERE, changes);
+  changes.clear();
+
+  ASSERT_TRUE(manager()->GetAllForeignSessions(&foreign_sessions));
+  std::vector<std::vector<SessionID::id_type> > meta2_reference;
+  meta2_reference.push_back(tag2_tab_list);
+  ASSERT_EQ(2U, foreign_sessions.size());
+  ASSERT_EQ(2U, foreign_sessions[1]->windows.find(0)->second->tabs.size());
+  helper()->VerifySyncedSession(tag2, meta2_reference, *(foreign_sessions[1]));
+  foreign_sessions.clear();
+
+  // Remove a tab from a window.
+  meta1_reference[0].pop_back();
+  tab_list1.pop_back();
+  sync_pb::SessionWindow* win = meta1.mutable_header()->mutable_window(0);
+  win->clear_tab();
+  for (std::vector<int>::const_iterator iter = tab_list1.begin();
+       iter != tab_list1.end(); ++iter) {
+    win->add_tab(*iter);
+  }
+  syncer::SyncChangeList removal;
+  removal.push_back(MakeRemoteChange(1, meta1, SyncChange::ACTION_UPDATE));
+  AddTabsToChangeList(tabs1, SyncChange::ACTION_UPDATE, &removal);
+  manager()->ProcessSyncChanges(FROM_HERE, removal);
+
+  ASSERT_TRUE(manager()->GetAllForeignSessions(&foreign_sessions));
+  ASSERT_EQ(2U, foreign_sessions.size());
+  ASSERT_EQ(3U, foreign_sessions[0]->windows.find(0)->second->tabs.size());
+  helper()->VerifySyncedSession(tag1, meta1_reference, *(foreign_sessions[0]));
+}
+
+// Tests that this SyncSessionManager knows how to delete foreign sessions
+// if it wants to.
+TEST_F(SessionsSyncManagerTest, DeleteForeignSession) {
+  InitWithNoSyncData();
+  std::string tag = "tag1";
+  syncer::SyncChangeList changes;
+
+  std::vector<const SyncedSession*> foreign_sessions;
+  ASSERT_FALSE(manager()->GetAllForeignSessions(&foreign_sessions));
+  manager()->DeleteForeignSessionInternal(tag, &changes);
+  ASSERT_FALSE(manager()->GetAllForeignSessions(&foreign_sessions));
+  EXPECT_TRUE(changes.empty());
+
+   // Fill an instance of session specifics with a foreign session's data.
+  std::vector<sync_pb::SessionSpecifics> tabs;
+  SessionID::id_type n1[] = {5, 10, 13, 17};
+  std::vector<SessionID::id_type> tab_nums1(n1, n1 + arraysize(n1));
+  sync_pb::SessionSpecifics meta(helper()->BuildForeignSession(
+      tag, tab_nums1, &tabs));
+
+  // Update associator with the session's meta node, window, and tabs.
+  manager()->UpdateTrackerWithForeignSession(meta, base::Time());
+  for (std::vector<sync_pb::SessionSpecifics>::iterator iter = tabs.begin();
+       iter != tabs.end(); ++iter) {
+    manager()->UpdateTrackerWithForeignSession(*iter, base::Time());
+  }
+  ASSERT_TRUE(manager()->GetAllForeignSessions(&foreign_sessions));
+  ASSERT_EQ(1U, foreign_sessions.size());
+
+  // Now delete the foreign session.
+  manager()->DeleteForeignSessionInternal(tag, &changes);
+  EXPECT_FALSE(manager()->GetAllForeignSessions(&foreign_sessions));
+
+  EXPECT_EQ(5U, changes.size());
+  std::set<std::string> expected_tags(&tag, &tag + 1);
+  for (int i = 0; i < 5; i++)
+    expected_tags.insert(TabNodePool::TabIdToTag(tag, i));
+
+  for (int i = 0; i < 5; i++) {
+    SCOPED_TRACE(changes[i].ToString());
+    EXPECT_TRUE(changes[i].IsValid());
+    EXPECT_EQ(SyncChange::ACTION_DELETE, changes[i].change_type());
+    EXPECT_TRUE(changes[i].sync_data().IsValid());
+    EXPECT_EQ(1U,
+              expected_tags.erase(
+                  syncer::SyncDataLocal(changes[i].sync_data()).GetTag()));
+  }
+}
+
+// Write a foreign session to a node, with the tabs arriving first, and then
+// retrieve it.
+TEST_F(SessionsSyncManagerTest, WriteForeignSessionToNodeTabsFirst) {
+  InitWithNoSyncData();
+
+  // Fill an instance of session specifics with a foreign session's data.
+  std::string tag = "tag1";
+  SessionID::id_type nums1[] = {5, 10, 13, 17};
+  std::vector<sync_pb::SessionSpecifics> tabs1;
+  std::vector<SessionID::id_type> tab_list1 (nums1, nums1 + arraysize(nums1));
+  sync_pb::SessionSpecifics meta(helper()->BuildForeignSession(
+      tag, tab_list1, &tabs1));
+
+  syncer::SyncChangeList adds;
+  // Add tabs for first window, then the meta node.
+  AddTabsToChangeList(tabs1, SyncChange::ACTION_ADD, &adds);
+  adds.push_back(MakeRemoteChange(1, meta, SyncChange::ACTION_ADD));
+  manager()->ProcessSyncChanges(FROM_HERE, adds);
+
+  // Check that the foreign session was associated and retrieve the data.
+  std::vector<const SyncedSession*> foreign_sessions;
+  ASSERT_TRUE(manager()->GetAllForeignSessions(&foreign_sessions));
+  ASSERT_EQ(1U, foreign_sessions.size());
+  std::vector<std::vector<SessionID::id_type> > session_reference;
+  session_reference.push_back(tab_list1);
+  helper()->VerifySyncedSession(tag, session_reference, *(foreign_sessions[0]));
+}
+
+// Write a foreign session to a node with some tabs that never arrive.
+TEST_F(SessionsSyncManagerTest, WriteForeignSessionToNodeMissingTabs) {
+  InitWithNoSyncData();
+
+  // Fill an instance of session specifics with a foreign session's data.
+  std::string tag = "tag1";
+  SessionID::id_type nums1[] = {5, 10, 13, 17};
+  std::vector<sync_pb::SessionSpecifics> tabs1;
+  std::vector<SessionID::id_type> tab_list1 (nums1, nums1 + arraysize(nums1));
+  sync_pb::SessionSpecifics meta(helper()->BuildForeignSession(
+      tag, tab_list1, &tabs1));
+  // Add a second window, but this time only create two tab nodes, despite the
+  // window expecting four tabs.
+  SessionID::id_type tab_nums2[] = {7, 15, 18, 20};
+  std::vector<SessionID::id_type> tab_list2(
+      tab_nums2, tab_nums2 + arraysize(tab_nums2));
+  helper()->AddWindowSpecifics(1, tab_list2, &meta);
+  std::vector<sync_pb::SessionSpecifics> tabs2;
+  tabs2.resize(2);
+  for (size_t i = 0; i < 2; ++i) {
+    helper()->BuildTabSpecifics(tag, 0, tab_list2[i], &tabs2[i]);
+  }
+
+  syncer::SyncChangeList changes;
+  changes.push_back(MakeRemoteChange(1, meta, SyncChange::ACTION_ADD));
+  AddTabsToChangeList(tabs1, SyncChange::ACTION_ADD, &changes);
+  AddTabsToChangeList(tabs2, SyncChange::ACTION_ADD, &changes);
+  manager()->ProcessSyncChanges(FROM_HERE, changes);
+  changes.clear();
+
+  // Check that the foreign session was associated and retrieve the data.
+  std::vector<const SyncedSession*> foreign_sessions;
+  ASSERT_TRUE(manager()->GetAllForeignSessions(&foreign_sessions));
+  ASSERT_EQ(1U, foreign_sessions.size());
+  ASSERT_EQ(2U, foreign_sessions[0]->windows.size());
+  ASSERT_EQ(4U, foreign_sessions[0]->windows.find(0)->second->tabs.size());
+  ASSERT_EQ(4U, foreign_sessions[0]->windows.find(1)->second->tabs.size());
+
+  // Close the second window.
+  meta.mutable_header()->clear_window();
+  helper()->AddWindowSpecifics(0, tab_list1, &meta);
+  changes.push_back(MakeRemoteChange(1, meta, SyncChange::ACTION_UPDATE));
+  // Update associator with the session's meta node containing one window.
+  manager()->ProcessSyncChanges(FROM_HERE, changes);
+
+  // Check that the foreign session was associated and retrieve the data.
+  foreign_sessions.clear();
+  ASSERT_TRUE(manager()->GetAllForeignSessions(&foreign_sessions));
+  ASSERT_EQ(1U, foreign_sessions.size());
+  ASSERT_EQ(1U, foreign_sessions[0]->windows.size());
+  std::vector<std::vector<SessionID::id_type> > session_reference;
+  session_reference.push_back(tab_list1);
+  helper()->VerifySyncedSession(tag, session_reference, *(foreign_sessions[0]));
+}
+
+// Tests that the SessionsSyncManager can handle a remote client deleting
+// sync nodes that belong to this local session.
+TEST_F(SessionsSyncManagerTest, ProcessRemoteDeleteOfLocalSession) {
+  syncer::SyncChangeList out;
+  InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out);
+  ASSERT_EQ(2U, out.size());
+  sync_pb::EntitySpecifics entity(out[0].sync_data().GetSpecifics());
+  SyncData d(SyncData::CreateRemoteData(
+      1,
+      entity,
+      base::Time(),
+      syncer::AttachmentIdList(),
+      syncer::AttachmentServiceProxyForTest::Create()));
+  SetSyncData(syncer::SyncDataList(&d, &d + 1));
+  out.clear();
+
+  syncer::SyncChangeList changes;
+  changes.push_back(
+      MakeRemoteChange(1, entity.session(), SyncChange::ACTION_DELETE));
+  manager()->ProcessSyncChanges(FROM_HERE, changes);
+  EXPECT_TRUE(manager()->local_tab_pool_out_of_sync_);
+  EXPECT_TRUE(out.empty());  // ChangeProcessor shouldn't see any activity.
+
+  // This should trigger repair of the TabNodePool.
+  const GURL foo1("http://foo/1");
+  AddTab(browser(), foo1);
+  EXPECT_FALSE(manager()->local_tab_pool_out_of_sync_);
+
+  // AddTab triggers two notifications, one for the tab insertion and one for
+  // committing the NavigationEntry. The first notification results in a tab
+  // we don't associate although we do update the header node.  The second
+  // notification triggers association of the tab, and the subsequent window
+  // update.  So we should see 4 changes at the SyncChangeProcessor.
+  ASSERT_EQ(4U, out.size());
+
+  EXPECT_EQ(SyncChange::ACTION_UPDATE, out[0].change_type());
+  ASSERT_TRUE(out[0].sync_data().GetSpecifics().session().has_header());
+  EXPECT_EQ(SyncChange::ACTION_ADD, out[1].change_type());
+  int tab_node_id = out[1].sync_data().GetSpecifics().session().tab_node_id();
+  EXPECT_EQ(TabNodePool::TabIdToTag(
+                manager()->current_machine_tag(), tab_node_id),
+            syncer::SyncDataLocal(out[1].sync_data()).GetTag());
+  EXPECT_EQ(SyncChange::ACTION_UPDATE, out[2].change_type());
+  ASSERT_TRUE(out[2].sync_data().GetSpecifics().session().has_tab());
+  EXPECT_EQ(SyncChange::ACTION_UPDATE, out[3].change_type());
+  ASSERT_TRUE(out[3].sync_data().GetSpecifics().session().has_header());
+
+  // Verify the actual content.
+  const sync_pb::SessionHeader& session_header =
+      out[3].sync_data().GetSpecifics().session().header();
+  ASSERT_EQ(1, session_header.window_size());
+  EXPECT_EQ(1, session_header.window(0).tab_size());
+  const sync_pb::SessionTab& tab1 =
+      out[2].sync_data().GetSpecifics().session().tab();
+  ASSERT_EQ(1, tab1.navigation_size());
+  EXPECT_EQ(foo1.spec(), tab1.navigation(0).virtual_url());
+
+  // Verify TabNodePool integrity.
+  EXPECT_EQ(1U, manager()->local_tab_pool_.Capacity());
+  EXPECT_TRUE(manager()->local_tab_pool_.Empty());
+
+  // Verify TabLinks.
+  SessionsSyncManager::TabLinksMap tab_map = manager()->local_tab_map_;
+  ASSERT_EQ(1U, tab_map.size());
+  int tab_id = out[2].sync_data().GetSpecifics().session().tab().tab_id();
+  EXPECT_EQ(tab_node_id, tab_map.find(tab_id)->second->tab_node_id());
+}
+
+// Test that receiving a session delete from sync removes the session
+// from tracking.
+TEST_F(SessionsSyncManagerTest, ProcessForeignDelete) {
+  InitWithNoSyncData();
+  SessionID::id_type n[] = {5};
+  std::vector<sync_pb::SessionSpecifics> tabs1;
+  std::vector<SessionID::id_type> tab_list(n, n + arraysize(n));
+  sync_pb::SessionSpecifics meta(helper()->BuildForeignSession(
+      "tag1", tab_list, &tabs1));
+
+  syncer::SyncChangeList changes;
+  changes.push_back(MakeRemoteChange(1, meta, SyncChange::ACTION_ADD));
+  AddTabsToChangeList(tabs1, SyncChange::ACTION_ADD, &changes);
+  manager()->ProcessSyncChanges(FROM_HERE, changes);
+
+  std::vector<const SyncedSession*> foreign_sessions;
+  ASSERT_TRUE(manager()->GetAllForeignSessions(&foreign_sessions));
+  ASSERT_EQ(1U, foreign_sessions.size());
+
+  changes.clear();
+  foreign_sessions.clear();
+  changes.push_back(MakeRemoteChange(1, meta, SyncChange::ACTION_DELETE));
+  manager()->ProcessSyncChanges(FROM_HERE, changes);
+
+  EXPECT_FALSE(manager()->GetAllForeignSessions(&foreign_sessions));
+}
+
+// TODO(shashishekhar): "Move this to TabNodePool unittests."
+TEST_F(SessionsSyncManagerTest, SaveUnassociatedNodesForReassociation) {
+  syncer::SyncChangeList changes;
+  InitWithNoSyncData();
+
+  std::string local_tag = manager()->current_machine_tag();
+  // Create a free node and then dissassociate sessions so that it ends up
+  // unassociated.
+  manager()->local_tab_pool_.GetFreeTabNode(&changes);
+
+  // Update the tab_id of the node, so that it is considered a valid
+  // unassociated node otherwise it will be mistaken for a corrupted node and
+  // will be deleted before being added to the tab node pool.
+  sync_pb::EntitySpecifics entity(changes[0].sync_data().GetSpecifics());
+  entity.mutable_session()->mutable_tab()->set_tab_id(1);
+  SyncData d(SyncData::CreateRemoteData(
+      1,
+      entity,
+      base::Time(),
+      syncer::AttachmentIdList(),
+      syncer::AttachmentServiceProxyForTest::Create()));
+  syncer::SyncDataList in(&d, &d + 1);
+  changes.clear();
+  SessionsSyncManager manager2(profile(), this, NewDummyRouter());
+  syncer::SyncMergeResult result = manager2.MergeDataAndStartSyncing(
+      syncer::SESSIONS, in,
+      scoped_ptr<syncer::SyncChangeProcessor>(
+          new TestSyncProcessorStub(&changes)),
+      scoped_ptr<syncer::SyncErrorFactory>(
+          new syncer::SyncErrorFactoryMock()));
+  ASSERT_FALSE(result.error().IsSet());
+  EXPECT_TRUE(FilterOutLocalHeaderChanges(&changes)->empty());
+}
+
+TEST_F(SessionsSyncManagerTest, MergeDeletesCorruptNode) {
+  syncer::SyncChangeList changes;
+  InitWithNoSyncData();
+
+  std::string local_tag = manager()->current_machine_tag();
+  int tab_node_id = manager()->local_tab_pool_.GetFreeTabNode(&changes);
+  SyncData d(SyncData::CreateRemoteData(
+      1,
+      changes[0].sync_data().GetSpecifics(),
+      base::Time(),
+      syncer::AttachmentIdList(),
+      syncer::AttachmentServiceProxyForTest::Create()));
+  syncer::SyncDataList in(&d, &d + 1);
+  changes.clear();
+  TearDown();
+  SetUp();
+  InitWithSyncDataTakeOutput(in, &changes);
+  EXPECT_EQ(1U, FilterOutLocalHeaderChanges(&changes)->size());
+  EXPECT_EQ(SyncChange::ACTION_DELETE, changes[0].change_type());
+  EXPECT_EQ(TabNodePool::TabIdToTag(local_tag, tab_node_id),
+            syncer::SyncDataLocal(changes[0].sync_data()).GetTag());
+}
+
+// Test that things work if a tab is initially ignored.
+TEST_F(SessionsSyncManagerTest, AssociateWindowsDontReloadTabs) {
+  syncer::SyncChangeList out;
+  // Go to a URL that is ignored by session syncing.
+  AddTab(browser(), GURL("chrome://preferences/"));
+  InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out);
+  ASSERT_EQ(2U, out.size());  // Header add and update.
+  EXPECT_EQ(
+      0,
+      out[1].sync_data().GetSpecifics().session().header().window_size());
+  out.clear();
+
+  // Go to a sync-interesting URL.
+  NavigateAndCommitActiveTab(GURL("http://foo2"));
+
+  EXPECT_EQ(3U, out.size());  // Tab add, update, and header update.
+
+  EXPECT_TRUE(
+      StartsWithASCII(syncer::SyncDataLocal(out[0].sync_data()).GetTag(),
+                      manager()->current_machine_tag(),
+                      true));
+  EXPECT_EQ(manager()->current_machine_tag(),
+            out[0].sync_data().GetSpecifics().session().session_tag());
+  EXPECT_EQ(SyncChange::ACTION_ADD, out[0].change_type());
+
+  EXPECT_TRUE(
+      StartsWithASCII(syncer::SyncDataLocal(out[1].sync_data()).GetTag(),
+                      manager()->current_machine_tag(),
+                      true));
+  EXPECT_EQ(manager()->current_machine_tag(),
+            out[1].sync_data().GetSpecifics().session().session_tag());
+  EXPECT_TRUE(out[1].sync_data().GetSpecifics().session().has_tab());
+  EXPECT_EQ(SyncChange::ACTION_UPDATE, out[1].change_type());
+
+  EXPECT_TRUE(out[2].IsValid());
+  EXPECT_EQ(SyncChange::ACTION_UPDATE, out[2].change_type());
+  const SyncData data(out[2].sync_data());
+  EXPECT_EQ(manager()->current_machine_tag(),
+            syncer::SyncDataLocal(data).GetTag());
+  const sync_pb::SessionSpecifics& specifics(data.GetSpecifics().session());
+  EXPECT_EQ(manager()->current_machine_tag(), specifics.session_tag());
+  EXPECT_TRUE(specifics.has_header());
+  const sync_pb::SessionHeader& header_s = specifics.header();
+  EXPECT_EQ(1, header_s.window_size());
+  EXPECT_EQ(1, header_s.window(0).tab_size());
+}
+
+// Tests that the SyncSessionManager responds to local tab events properly.
+TEST_F(SessionsSyncManagerTest, OnLocalTabModified) {
+  syncer::SyncChangeList out;
+  // Init with no local data, relies on MergeLocalSessionNoTabs.
+  InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out);
+  ASSERT_FALSE(manager()->current_machine_tag().empty());
+  ASSERT_EQ(2U, out.size());
+
+  // Copy the original header.
+  sync_pb::EntitySpecifics header(out[0].sync_data().GetSpecifics());
+  out.clear();
+
+  const GURL foo1("http://foo/1");
+  const GURL foo2("http://foo/2");
+  const GURL bar1("http://bar/1");
+  const GURL bar2("http://bar/2");
+  AddTab(browser(), foo1);
+  NavigateAndCommitActiveTab(foo2);
+  AddTab(browser(), bar1);
+  NavigateAndCommitActiveTab(bar2);
+
+  // One add, one update for each AddTab.
+  // One update for each NavigateAndCommit.
+  // = 6 total tab updates.
+  // One header update corresponding to each of those.
+  // = 6 total header updates.
+  // 12 total updates.
+  ASSERT_EQ(12U, out.size());
+
+  // Verify the tab node creations and updates to ensure the SyncProcessor
+  // sees the right operations.
+  for (int i = 0; i < 12; i++) {
+    SCOPED_TRACE(i);
+    EXPECT_TRUE(out[i].IsValid());
+    const SyncData data(out[i].sync_data());
+    EXPECT_TRUE(StartsWithASCII(syncer::SyncDataLocal(data).GetTag(),
+                                manager()->current_machine_tag(), true));
+    const sync_pb::SessionSpecifics& specifics(data.GetSpecifics().session());
+    EXPECT_EQ(manager()->current_machine_tag(), specifics.session_tag());
+    if (i % 6 == 0) {
+      // First thing on an AddTab is a no-op header update for parented tab.
+      EXPECT_EQ(header.SerializeAsString(),
+                data.GetSpecifics().SerializeAsString());
+      EXPECT_EQ(manager()->current_machine_tag(),
+                syncer::SyncDataLocal(data).GetTag());
+    } else if (i % 6 == 1) {
+      // Next, the TabNodePool should create the tab node.
+      EXPECT_EQ(SyncChange::ACTION_ADD, out[i].change_type());
+      EXPECT_EQ(TabNodePool::TabIdToTag(
+                    manager()->current_machine_tag(),
+                    data.GetSpecifics().session().tab_node_id()),
+                syncer::SyncDataLocal(data).GetTag());
+    } else if (i % 6 == 2) {
+      // Then we see the tab update to the URL.
+      EXPECT_EQ(SyncChange::ACTION_UPDATE, out[i].change_type());
+      EXPECT_EQ(TabNodePool::TabIdToTag(
+                    manager()->current_machine_tag(),
+                    data.GetSpecifics().session().tab_node_id()),
+                syncer::SyncDataLocal(data).GetTag());
+      ASSERT_TRUE(specifics.has_tab());
+    } else if (i % 6 == 3) {
+      // The header needs to be updated to reflect the new window state.
+      EXPECT_EQ(SyncChange::ACTION_UPDATE, out[i].change_type());
+      EXPECT_TRUE(specifics.has_header());
+    } else if (i % 6 == 4) {
+      // Now we move on to NavigateAndCommit.  Update the tab.
+      EXPECT_EQ(SyncChange::ACTION_UPDATE, out[i].change_type());
+      EXPECT_EQ(TabNodePool::TabIdToTag(
+                    manager()->current_machine_tag(),
+                    data.GetSpecifics().session().tab_node_id()),
+                syncer::SyncDataLocal(data).GetTag());
+      ASSERT_TRUE(specifics.has_tab());
+    } else if (i % 6 == 5) {
+      // The header needs to be updated to reflect the new window state.
+      EXPECT_EQ(SyncChange::ACTION_UPDATE, out[i].change_type());
+      ASSERT_TRUE(specifics.has_header());
+      header = data.GetSpecifics();
+    }
+  }
+
+  // Verify the actual content to ensure sync sees the right data.
+  // When it's all said and done, the header should reflect two tabs.
+  const sync_pb::SessionHeader& session_header = header.session().header();
+  ASSERT_EQ(1, session_header.window_size());
+  EXPECT_EQ(2, session_header.window(0).tab_size());
+
+  // ASSERT_TRUEs above allow us to dive in freely here.
+  // Verify first tab.
+  const sync_pb::SessionTab& tab1_1 =
+      out[2].sync_data().GetSpecifics().session().tab();
+  ASSERT_EQ(1, tab1_1.navigation_size());
+  EXPECT_EQ(foo1.spec(), tab1_1.navigation(0).virtual_url());
+  const sync_pb::SessionTab& tab1_2 =
+      out[4].sync_data().GetSpecifics().session().tab();
+  ASSERT_EQ(2, tab1_2.navigation_size());
+  EXPECT_EQ(foo1.spec(), tab1_2.navigation(0).virtual_url());
+  EXPECT_EQ(foo2.spec(), tab1_2.navigation(1).virtual_url());
+
+  // Verify second tab.
+  const sync_pb::SessionTab& tab2_1 =
+      out[8].sync_data().GetSpecifics().session().tab();
+  ASSERT_EQ(1, tab2_1.navigation_size());
+  EXPECT_EQ(bar1.spec(), tab2_1.navigation(0).virtual_url());
+  const sync_pb::SessionTab& tab2_2 =
+      out[10].sync_data().GetSpecifics().session().tab();
+  ASSERT_EQ(2, tab2_2.navigation_size());
+  EXPECT_EQ(bar1.spec(), tab2_2.navigation(0).virtual_url());
+  EXPECT_EQ(bar2.spec(), tab2_2.navigation(1).virtual_url());
+}
+
+// Ensure model association associates the pre-existing tabs.
+TEST_F(SessionsSyncManagerTest, MergeLocalSessionExistingTabs) {
+  AddTab(browser(), GURL("http://foo1"));
+  NavigateAndCommitActiveTab(GURL("http://foo2"));  // Adds back entry.
+  AddTab(browser(), GURL("http://bar1"));
+  NavigateAndCommitActiveTab(GURL("http://bar2"));  // Adds back entry.
+
+  syncer::SyncChangeList out;
+  InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out);
+  ASSERT_EQ(6U, out.size());
+
+  // Check that this machine's data is not included in the foreign windows.
+  std::vector<const SyncedSession*> foreign_sessions;
+  ASSERT_FALSE(manager()->GetAllForeignSessions(&foreign_sessions));
+
+  // Verify the header.
+  EXPECT_TRUE(out[0].IsValid());
+  EXPECT_EQ(SyncChange::ACTION_ADD, out[0].change_type());
+  const SyncData data(out[0].sync_data());
+  EXPECT_EQ(manager()->current_machine_tag(),
+            syncer::SyncDataLocal(data).GetTag());
+  const sync_pb::SessionSpecifics& specifics(data.GetSpecifics().session());
+  EXPECT_EQ(manager()->current_machine_tag(), specifics.session_tag());
+  EXPECT_TRUE(specifics.has_header());
+  const sync_pb::SessionHeader& header_s = specifics.header();
+  EXPECT_TRUE(header_s.has_device_type());
+  EXPECT_EQ(GetLocalDeviceInfo()->client_name(), header_s.client_name());
+  EXPECT_EQ(0, header_s.window_size());
+
+  // Verify the tab node creations and updates with content.
+  for (int i = 1; i < 5; i++) {
+    EXPECT_TRUE(out[i].IsValid());
+    const SyncData data(out[i].sync_data());
+    EXPECT_TRUE(StartsWithASCII(syncer::SyncDataLocal(data).GetTag(),
+                                manager()->current_machine_tag(), true));
+    const sync_pb::SessionSpecifics& specifics(data.GetSpecifics().session());
+    EXPECT_EQ(manager()->current_machine_tag(), specifics.session_tag());
+    if (i % 2 == 1) {
+      EXPECT_EQ(SyncChange::ACTION_ADD, out[i].change_type());
+    } else {
+      EXPECT_EQ(SyncChange::ACTION_UPDATE, out[i].change_type());
+      EXPECT_TRUE(specifics.has_tab());
+    }
+  }
+
+  // Verify the header was updated to reflect new window state.
+  EXPECT_TRUE(out[5].IsValid());
+  EXPECT_EQ(SyncChange::ACTION_UPDATE, out[5].change_type());
+  const SyncData data_2(out[5].sync_data());
+  EXPECT_EQ(manager()->current_machine_tag(),
+            syncer::SyncDataLocal(data_2).GetTag());
+  const sync_pb::SessionSpecifics& specifics2(data_2.GetSpecifics().session());
+  EXPECT_EQ(manager()->current_machine_tag(), specifics2.session_tag());
+  EXPECT_TRUE(specifics2.has_header());
+  const sync_pb::SessionHeader& header_s2 = specifics2.header();
+  EXPECT_EQ(1, header_s2.window_size());
+
+  // Verify TabLinks.
+  SessionsSyncManager::TabLinksMap tab_map = manager()->local_tab_map_;
+  ASSERT_EQ(2U, tab_map.size());
+  // Tabs are ordered by sessionid in tab_map, so should be able to traverse
+  // the tree based on order of tabs created
+  SessionsSyncManager::TabLinksMap::iterator iter = tab_map.begin();
+  ASSERT_EQ(2, iter->second->tab()->GetEntryCount());
+  EXPECT_EQ(GURL("http://foo1"), iter->second->tab()->
+          GetEntryAtIndex(0)->GetVirtualURL());
+  EXPECT_EQ(GURL("http://foo2"), iter->second->tab()->
+          GetEntryAtIndex(1)->GetVirtualURL());
+  iter++;
+  ASSERT_EQ(2, iter->second->tab()->GetEntryCount());
+  EXPECT_EQ(GURL("http://bar1"), iter->second->tab()->
+      GetEntryAtIndex(0)->GetVirtualURL());
+  EXPECT_EQ(GURL("http://bar2"), iter->second->tab()->
+      GetEntryAtIndex(1)->GetVirtualURL());
+}
+
+// Test garbage collection of stale foreign sessions.
+TEST_F(SessionsSyncManagerTest, DoGarbageCollection) {
+  // Fill two instances of session specifics with a foreign session's data.
+  std::string tag1 = "tag1";
+  SessionID::id_type n1[] = {5, 10, 13, 17};
+  std::vector<SessionID::id_type> tab_list1(n1, n1 + arraysize(n1));
+  std::vector<sync_pb::SessionSpecifics> tabs1;
+  sync_pb::SessionSpecifics meta(helper()->BuildForeignSession(
+      tag1, tab_list1, &tabs1));
+  std::string tag2 = "tag2";
+  SessionID::id_type n2[] = {8, 15, 18, 20};
+  std::vector<SessionID::id_type> tab_list2(n2, n2 + arraysize(n2));
+  std::vector<sync_pb::SessionSpecifics> tabs2;
+  sync_pb::SessionSpecifics meta2(helper()->BuildForeignSession(
+      tag2, tab_list2, &tabs2));
+  // Set the modification time for tag1 to be 21 days ago, tag2 to 5 days ago.
+  base::Time tag1_time = base::Time::Now() - base::TimeDelta::FromDays(21);
+  base::Time tag2_time = base::Time::Now() - base::TimeDelta::FromDays(5);
+
+  syncer::SyncDataList foreign_data;
+  sync_pb::EntitySpecifics entity1, entity2;
+  entity1.mutable_session()->CopyFrom(meta);
+  entity2.mutable_session()->CopyFrom(meta2);
+  foreign_data.push_back(SyncData::CreateRemoteData(
+      1,
+      entity1,
+      tag1_time,
+      syncer::AttachmentIdList(),
+      syncer::AttachmentServiceProxyForTest::Create()));
+  foreign_data.push_back(SyncData::CreateRemoteData(
+      1,
+      entity2,
+      tag2_time,
+      syncer::AttachmentIdList(),
+      syncer::AttachmentServiceProxyForTest::Create()));
+  AddTabsToSyncDataList(tabs1, &foreign_data);
+  AddTabsToSyncDataList(tabs2, &foreign_data);
+
+  syncer::SyncChangeList output;
+  InitWithSyncDataTakeOutput(foreign_data, &output);
+  ASSERT_EQ(2U, output.size());
+  output.clear();
+
+  // Check that the foreign session was associated and retrieve the data.
+  std::vector<const SyncedSession*> foreign_sessions;
+  ASSERT_TRUE(manager()->GetAllForeignSessions(&foreign_sessions));
+  ASSERT_EQ(2U, foreign_sessions.size());
+  foreign_sessions.clear();
+
+  // Now garbage collect and verify the non-stale session is still there.
+  manager()->DoGarbageCollection();
+  ASSERT_EQ(5U, output.size());
+  EXPECT_EQ(SyncChange::ACTION_DELETE, output[0].change_type());
+  const SyncData data(output[0].sync_data());
+  EXPECT_EQ(tag1, syncer::SyncDataLocal(data).GetTag());
+  for (int i = 1; i < 5; i++) {
+    EXPECT_EQ(SyncChange::ACTION_DELETE, output[i].change_type());
+    const SyncData data(output[i].sync_data());
+    EXPECT_EQ(TabNodePool::TabIdToTag(tag1, i),
+              syncer::SyncDataLocal(data).GetTag());
+  }
+
+  ASSERT_TRUE(manager()->GetAllForeignSessions(&foreign_sessions));
+  ASSERT_EQ(1U, foreign_sessions.size());
+  std::vector<std::vector<SessionID::id_type> > session_reference;
+  session_reference.push_back(tab_list2);
+  helper()->VerifySyncedSession(tag2, session_reference,
+                                *(foreign_sessions[0]));
+}
+
+// Test that an update to a previously considered "stale" session,
+// prior to garbage collection, will save the session from deletion.
+TEST_F(SessionsSyncManagerTest, GarbageCollectionHonoursUpdate) {
+  std::string tag1 = "tag1";
+  SessionID::id_type n1[] = {5, 10, 13, 17};
+  std::vector<SessionID::id_type> tab_list1(n1, n1 + arraysize(n1));
+  std::vector<sync_pb::SessionSpecifics> tabs1;
+  sync_pb::SessionSpecifics meta(helper()->BuildForeignSession(
+      tag1, tab_list1, &tabs1));
+  syncer::SyncDataList foreign_data;
+  sync_pb::EntitySpecifics entity1;
+  base::Time tag1_time = base::Time::Now() - base::TimeDelta::FromDays(21);
+  entity1.mutable_session()->CopyFrom(meta);
+  foreign_data.push_back(SyncData::CreateRemoteData(
+      1,
+      entity1,
+      tag1_time,
+      syncer::AttachmentIdList(),
+      syncer::AttachmentServiceProxyForTest::Create()));
+  AddTabsToSyncDataList(tabs1, &foreign_data);
+  syncer::SyncChangeList output;
+  InitWithSyncDataTakeOutput(foreign_data, &output);
+  ASSERT_EQ(2U, output.size());
+
+  // Update to a non-stale time.
+  sync_pb::EntitySpecifics update_entity;
+  update_entity.mutable_session()->CopyFrom(tabs1[0]);
+  syncer::SyncChangeList changes;
+  changes.push_back(
+      syncer::SyncChange(FROM_HERE,
+                         SyncChange::ACTION_UPDATE,
+                         syncer::SyncData::CreateRemoteData(
+                             1,
+                             update_entity,
+                             base::Time::Now(),
+                             syncer::AttachmentIdList(),
+                             syncer::AttachmentServiceProxyForTest::Create())));
+  manager()->ProcessSyncChanges(FROM_HERE, changes);
+
+  // Check that the foreign session was associated and retrieve the data.
+  std::vector<const SyncedSession*> foreign_sessions;
+  ASSERT_TRUE(manager()->GetAllForeignSessions(&foreign_sessions));
+  ASSERT_EQ(1U, foreign_sessions.size());
+  foreign_sessions.clear();
+
+  // Verify the now non-stale session does not get deleted.
+  manager()->DoGarbageCollection();
+  ASSERT_TRUE(manager()->GetAllForeignSessions(&foreign_sessions));
+  ASSERT_EQ(1U, foreign_sessions.size());
+  std::vector<std::vector<SessionID::id_type> > session_reference;
+  session_reference.push_back(tab_list1);
+  helper()->VerifySyncedSession(
+      tag1, session_reference, *(foreign_sessions[0]));
+}
+
+// Test that swapping WebContents for a tab is properly observed and handled
+// by the SessionsSyncManager.
+TEST_F(SessionsSyncManagerTest, CheckPrerenderedWebContentsSwap) {
+  AddTab(browser(), GURL("http://foo1"));
+  NavigateAndCommitActiveTab(GURL("http://foo2"));
+
+  syncer::SyncChangeList out;
+  InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out);
+  ASSERT_EQ(4U, out.size());  // Header, tab ADD, tab UPDATE, header UPDATE.
+
+  // To simulate WebContents swap during prerendering, create new WebContents
+  // and swap with old WebContents.
+  scoped_ptr<content::WebContents> old_web_contents;
+  old_web_contents.reset(browser()->tab_strip_model()->GetActiveWebContents());
+
+  // Create new WebContents, with the required tab helpers.
+  WebContents* new_web_contents = WebContents::CreateWithSessionStorage(
+      WebContents::CreateParams(profile()),
+      old_web_contents->GetController().GetSessionStorageNamespaceMap());
+  SessionTabHelper::CreateForWebContents(new_web_contents);
+  TabContentsSyncedTabDelegate::CreateForWebContents(new_web_contents);
+  new_web_contents->GetController()
+      .CopyStateFrom(old_web_contents->GetController());
+
+  // Swap the WebContents.
+  int index = browser()->tab_strip_model()->GetIndexOfWebContents(
+      old_web_contents.get());
+  browser()->tab_strip_model()->ReplaceWebContentsAt(index, new_web_contents);
+
+  ASSERT_EQ(9U, out.size());
+  EXPECT_EQ(SyncChange::ACTION_ADD, out[4].change_type());
+  EXPECT_EQ(SyncChange::ACTION_UPDATE, out[5].change_type());
+
+  // Navigate away.
+  NavigateAndCommitActiveTab(GURL("http://bar2"));
+
+  // Delete old WebContents. This should not crash.
+  old_web_contents.reset();
+
+  // Try more navigations and verify output size. This can also reveal
+  // bugs (leaks) on memcheck bots if the SessionSyncManager
+  // didn't properly clean up the tab pool or session tracker.
+  NavigateAndCommitActiveTab(GURL("http://bar3"));
+
+  AddTab(browser(), GURL("http://bar4"));
+  NavigateAndCommitActiveTab(GURL("http://bar5"));
+  ASSERT_EQ(19U, out.size());
+}
+
+namespace {
+class SessionNotificationObserver : public content::NotificationObserver {
+ public:
+  SessionNotificationObserver() : notified_of_update_(false),
+                                  notified_of_refresh_(false) {
+    registrar_.Add(this, chrome::NOTIFICATION_FOREIGN_SESSION_UPDATED,
+                   content::NotificationService::AllSources());
+    registrar_.Add(this, chrome::NOTIFICATION_SYNC_REFRESH_LOCAL,
+                   content::NotificationService::AllSources());
+  }
+  virtual void Observe(int type,
+                       const content::NotificationSource& source,
+                       const content::NotificationDetails& details) OVERRIDE {
+    switch (type) {
+      case chrome::NOTIFICATION_FOREIGN_SESSION_UPDATED:
+        notified_of_update_ = true;
+        break;
+      case chrome::NOTIFICATION_SYNC_REFRESH_LOCAL:
+        notified_of_refresh_ = true;
+        break;
+      default:
+        NOTREACHED();
+        break;
+    }
+  }
+  bool notified_of_update() const { return notified_of_update_; }
+  bool notified_of_refresh() const { return notified_of_refresh_; }
+  void Reset() {
+    notified_of_update_ = false;
+    notified_of_refresh_ = false;
+  }
+ private:
+  content::NotificationRegistrar registrar_;
+  bool notified_of_update_;
+  bool notified_of_refresh_;
+};
+}  // namespace
+
+// Test that NOTIFICATION_FOREIGN_SESSION_UPDATED is sent when processing
+// sync changes.
+TEST_F(SessionsSyncManagerTest, NotifiedOfUpdates) {
+  SessionNotificationObserver observer;
+  ASSERT_FALSE(observer.notified_of_update());
+  InitWithNoSyncData();
+
+  SessionID::id_type n[] = {5};
+  std::vector<sync_pb::SessionSpecifics> tabs1;
+  std::vector<SessionID::id_type> tab_list(n, n + arraysize(n));
+  sync_pb::SessionSpecifics meta(helper()->BuildForeignSession(
+      "tag1", tab_list, &tabs1));
+
+  syncer::SyncChangeList changes;
+  changes.push_back(MakeRemoteChange(1, meta, SyncChange::ACTION_ADD));
+  manager()->ProcessSyncChanges(FROM_HERE, changes);
+  EXPECT_TRUE(observer.notified_of_update());
+
+  changes.clear();
+  observer.Reset();
+  AddTabsToChangeList(tabs1, SyncChange::ACTION_ADD, &changes);
+  manager()->ProcessSyncChanges(FROM_HERE, changes);
+  EXPECT_TRUE(observer.notified_of_update());
+
+  changes.clear();
+  observer.Reset();
+  changes.push_back(MakeRemoteChange(1, meta, SyncChange::ACTION_DELETE));
+  manager()->ProcessSyncChanges(FROM_HERE, changes);
+  EXPECT_TRUE(observer.notified_of_update());
+}
+
+// Test that NOTIFICATION_FOREIGN_SESSION_UPDATED is sent when handling
+// local hide/removal of foreign session.
+TEST_F(SessionsSyncManagerTest, NotifiedOfLocalRemovalOfForeignSession) {
+  InitWithNoSyncData();
+  const std::string tag("tag1");
+  SessionID::id_type n[] = {5};
+  std::vector<sync_pb::SessionSpecifics> tabs1;
+  std::vector<SessionID::id_type> tab_list(n, n + arraysize(n));
+  sync_pb::SessionSpecifics meta(helper()->BuildForeignSession(
+      tag, tab_list, &tabs1));
+
+  syncer::SyncChangeList changes;
+  changes.push_back(MakeRemoteChange(1, meta, SyncChange::ACTION_ADD));
+  manager()->ProcessSyncChanges(FROM_HERE, changes);
+
+  SessionNotificationObserver observer;
+  ASSERT_FALSE(observer.notified_of_update());
+  manager()->DeleteForeignSession(tag);
+  ASSERT_TRUE(observer.notified_of_update());
+}
+
+#if defined(OS_ANDROID) || defined(OS_IOS)
+// Tests that opening the other devices page triggers a session sync refresh.
+// This page only exists on mobile platforms today; desktop has a
+// search-enhanced NTP without other devices.
+TEST_F(SessionsSyncManagerTest, NotifiedOfRefresh) {
+  SessionNotificationObserver observer;
+  ASSERT_FALSE(observer.notified_of_refresh());
+  InitWithNoSyncData();
+  AddTab(browser(), GURL("http://foo1"));
+  EXPECT_FALSE(observer.notified_of_refresh());
+  NavigateAndCommitActiveTab(GURL("chrome://newtab/#open_tabs"));
+  EXPECT_TRUE(observer.notified_of_refresh());
+}
+#endif  // defined(OS_ANDROID) || defined(OS_IOS)
+
+}  // namespace browser_sync
diff --git a/chrome/browser/sync/sessions/sessions_util.cc b/chrome/browser/sync/sessions/sessions_util.cc
new file mode 100644
index 0000000..ed0d3fc
--- /dev/null
+++ b/chrome/browser/sync/sessions/sessions_util.cc
@@ -0,0 +1,57 @@
+// 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.
+
+#include "chrome/browser/sync/sessions/sessions_util.h"
+
+#include "chrome/browser/sync/glue/synced_tab_delegate.h"
+#include "chrome/browser/sync/glue/synced_window_delegate.h"
+#include "chrome/common/url_constants.h"
+#include "content/public/browser/navigation_entry.h"
+#include "url/gurl.h"
+
+namespace browser_sync {
+
+namespace sessions_util {
+
+bool ShouldSyncTab(const SyncedTabDelegate& tab) {
+  if (SyncedWindowDelegate::FindSyncedWindowDelegateWithId(
+          tab.GetWindowId()) == NULL) {
+    return false;
+  }
+
+  // Does the tab have a valid NavigationEntry?
+  if (tab.ProfileIsManaged() && tab.GetBlockedNavigations()->size() > 0)
+    return true;
+
+  int entry_count = tab.GetEntryCount();
+  if (entry_count == 0)
+    return false;  // This deliberately ignores a new pending entry.
+
+  int pending_index = tab.GetPendingEntryIndex();
+  bool found_valid_url = false;
+  for (int i = 0; i < entry_count; ++i) {
+    const content::NavigationEntry* entry = (i == pending_index) ?
+       tab.GetPendingEntry() : tab.GetEntryAtIndex(i);
+    if (!entry)
+      return false;
+    const GURL& virtual_url = entry->GetVirtualURL();
+    if (virtual_url.is_valid() &&
+        !virtual_url.SchemeIs(content::kChromeUIScheme) &&
+        !virtual_url.SchemeIs(chrome::kChromeNativeScheme) &&
+        !virtual_url.SchemeIsFile()) {
+      found_valid_url = true;
+    }
+  }
+  return found_valid_url;
+}
+
+bool ShouldSyncWindow(const SyncedWindowDelegate* window) {
+  if (window->IsApp())
+    return false;
+  return window->IsTypeTabbed() || window->IsTypePopup();
+}
+
+}  // namespace sessions_util
+
+}  // namespace browser_sync
diff --git a/chrome/browser/sync/sessions/sessions_util.h b/chrome/browser/sync/sessions/sessions_util.h
new file mode 100644
index 0000000..0a14a83
--- /dev/null
+++ b/chrome/browser/sync/sessions/sessions_util.h
@@ -0,0 +1,27 @@
+// 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.
+
+#ifndef CHROME_BROWSER_SYNC_SESSIONS_SESSIONS_UTIL_H_
+#define CHROME_BROWSER_SYNC_SESSIONS_SESSIONS_UTIL_H_
+
+namespace browser_sync {
+
+class SyncedTabDelegate;
+class SyncedWindowDelegate;
+
+namespace sessions_util {
+
+// Control which local tabs we're interested in syncing.
+// Ensures that the tab has valid entries.
+bool ShouldSyncTab(const SyncedTabDelegate& tab);
+
+// Decides whether |window| is interesting for tab syncing
+// purposes.
+bool ShouldSyncWindow(const SyncedWindowDelegate* window);
+
+}  // namespace sessions_util
+
+}  // namespace browser_sync
+
+#endif  // CHROME_BROWSER_SYNC_SESSIONS_SESSIONS_UTIL_H_
diff --git a/chrome/browser/sync/sessions/synced_window_delegates_getter.cc b/chrome/browser/sync/sessions/synced_window_delegates_getter.cc
new file mode 100644
index 0000000..d18aca4
--- /dev/null
+++ b/chrome/browser/sync/sessions/synced_window_delegates_getter.cc
@@ -0,0 +1,20 @@
+// 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.
+
+#include "chrome/browser/sync/sessions/synced_window_delegates_getter.h"
+
+#include "chrome/browser/sync/glue/synced_window_delegate.h"
+
+namespace browser_sync {
+
+SyncedWindowDelegatesGetter::SyncedWindowDelegatesGetter() {}
+
+SyncedWindowDelegatesGetter::~SyncedWindowDelegatesGetter() {}
+
+const std::set<SyncedWindowDelegate*>
+SyncedWindowDelegatesGetter::GetSyncedWindowDelegates() {
+  return SyncedWindowDelegate::GetSyncedWindowDelegates();
+}
+
+}  // namespace browser_sync
diff --git a/chrome/browser/sync/sessions/synced_window_delegates_getter.h b/chrome/browser/sync/sessions/synced_window_delegates_getter.h
new file mode 100644
index 0000000..4e7fac0
--- /dev/null
+++ b/chrome/browser/sync/sessions/synced_window_delegates_getter.h
@@ -0,0 +1,26 @@
+// 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.
+
+#ifndef CHROME_BROWSER_SYNC_SESSIONS_SYNCED_WINDOW_DELEGATES_GETTER_H_
+#define CHROME_BROWSER_SYNC_SESSIONS_SYNCED_WINDOW_DELEGATES_GETTER_H_
+
+#include <set>
+#include "base/macros.h"
+
+namespace browser_sync {
+
+class SyncedWindowDelegate;
+
+class SyncedWindowDelegatesGetter {
+ public:
+  SyncedWindowDelegatesGetter();
+  virtual ~SyncedWindowDelegatesGetter();
+  virtual const std::set<SyncedWindowDelegate*> GetSyncedWindowDelegates();
+ private:
+  DISALLOW_COPY_AND_ASSIGN(SyncedWindowDelegatesGetter);
+};
+
+}  // namespace browser_sync
+
+#endif  // CHROME_BROWSER_SYNC_SESSIONS_SYNCED_WINDOW_DELEGATES_GETTER_H_
diff --git a/chrome/browser/sync/sessions/tab_node_pool.cc b/chrome/browser/sync/sessions/tab_node_pool.cc
new file mode 100644
index 0000000..3d94269
--- /dev/null
+++ b/chrome/browser/sync/sessions/tab_node_pool.cc
@@ -0,0 +1,188 @@
+// 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.
+
+#include "chrome/browser/sync/sessions/tab_node_pool.h"
+
+#include "base/format_macros.h"
+#include "base/logging.h"
+#include "base/strings/stringprintf.h"
+#include "sync/api/sync_change.h"
+#include "sync/api/sync_data.h"
+#include "sync/internal_api/public/base/model_type.h"
+#include "sync/protocol/session_specifics.pb.h"
+#include "sync/protocol/sync.pb.h"
+
+namespace browser_sync {
+
+const size_t TabNodePool::kFreeNodesLowWatermark = 25;
+const size_t TabNodePool::kFreeNodesHighWatermark = 100;
+
+TabNodePool::TabNodePool()
+    : max_used_tab_node_id_(kInvalidTabNodeID) {}
+
+// static
+// We start vending tab node IDs at 0.
+const int TabNodePool::kInvalidTabNodeID = -1;
+
+TabNodePool::~TabNodePool() {}
+
+// Static
+std::string TabNodePool::TabIdToTag(
+    const std::string machine_tag, int tab_node_id) {
+  return base::StringPrintf("%s %d", machine_tag.c_str(), tab_node_id);
+}
+
+void TabNodePool::AddTabNode(int tab_node_id) {
+  DCHECK_GT(tab_node_id, kInvalidTabNodeID);
+  DCHECK(nodeid_tabid_map_.find(tab_node_id) == nodeid_tabid_map_.end());
+  unassociated_nodes_.insert(tab_node_id);
+  if (max_used_tab_node_id_ < tab_node_id)
+    max_used_tab_node_id_ = tab_node_id;
+}
+
+void TabNodePool::AssociateTabNode(int tab_node_id,
+                                    SessionID::id_type tab_id) {
+  DCHECK_GT(tab_node_id, kInvalidTabNodeID);
+  // Remove sync node if it is in unassociated nodes pool.
+  std::set<int>::iterator u_it = unassociated_nodes_.find(tab_node_id);
+  if (u_it != unassociated_nodes_.end()) {
+    unassociated_nodes_.erase(u_it);
+  } else {
+    // This is a new node association, the sync node should be free.
+    // Remove node from free node pool and then associate it with the tab.
+    std::set<int>::iterator it = free_nodes_pool_.find(tab_node_id);
+    DCHECK(it != free_nodes_pool_.end());
+    free_nodes_pool_.erase(it);
+  }
+  DCHECK(nodeid_tabid_map_.find(tab_node_id) == nodeid_tabid_map_.end());
+  nodeid_tabid_map_[tab_node_id] = tab_id;
+}
+
+int TabNodePool::GetFreeTabNode(syncer::SyncChangeList* append_changes) {
+  DCHECK_GT(machine_tag_.length(), 0U);
+  DCHECK(append_changes);
+  if (free_nodes_pool_.empty()) {
+    // Tab pool has no free nodes, allocate new one.
+    int tab_node_id = ++max_used_tab_node_id_;
+    std::string tab_node_tag = TabIdToTag(machine_tag_, tab_node_id);
+
+    // We fill the new node with just enough data so that in case of a crash/bug
+    // we can identify the node as our own on re-association and reuse it.
+    sync_pb::EntitySpecifics entity;
+    sync_pb::SessionSpecifics* specifics = entity.mutable_session();
+    specifics->set_session_tag(machine_tag_);
+    specifics->set_tab_node_id(tab_node_id);
+    append_changes->push_back(syncer::SyncChange(
+        FROM_HERE,
+        syncer::SyncChange::ACTION_ADD,
+        syncer::SyncData::CreateLocalData(tab_node_tag,
+                                          tab_node_tag,
+                                          entity)));
+
+    // Grow the pool by 1 since we created a new node.
+    DVLOG(1) << "Adding sync node " << tab_node_id
+             << " to tab node id pool";
+    free_nodes_pool_.insert(tab_node_id);
+    return tab_node_id;
+  } else {
+    // Return the next free node.
+    return *free_nodes_pool_.begin();
+  }
+}
+
+void TabNodePool::FreeTabNode(int tab_node_id,
+                               syncer::SyncChangeList* append_changes) {
+  DCHECK(append_changes);
+  TabNodeIDToTabIDMap::iterator it = nodeid_tabid_map_.find(tab_node_id);
+  DCHECK(it != nodeid_tabid_map_.end());
+  nodeid_tabid_map_.erase(it);
+  FreeTabNodeInternal(tab_node_id, append_changes);
+}
+
+void TabNodePool::FreeTabNodeInternal(
+    int tab_node_id,
+    syncer::SyncChangeList* append_changes) {
+  DCHECK(free_nodes_pool_.find(tab_node_id) == free_nodes_pool_.end());
+  DCHECK(append_changes);
+  free_nodes_pool_.insert(tab_node_id);
+
+  // If number of free nodes exceed kFreeNodesHighWatermark,
+  // delete sync nodes till number reaches kFreeNodesLowWatermark.
+  // Note: This logic is to mitigate temporary disassociation issues with old
+  // clients: http://crbug.com/259918. Newer versions do not need this.
+  if (free_nodes_pool_.size() > kFreeNodesHighWatermark) {
+    for (std::set<int>::iterator free_it = free_nodes_pool_.begin();
+         free_it != free_nodes_pool_.end();) {
+      const std::string tab_node_tag = TabIdToTag(machine_tag_, *free_it);
+      append_changes->push_back(syncer::SyncChange(
+          FROM_HERE,
+          syncer::SyncChange::ACTION_DELETE,
+          syncer::SyncData::CreateLocalDelete(tab_node_tag,
+                                              syncer::SESSIONS)));
+      free_nodes_pool_.erase(free_it++);
+      if (free_nodes_pool_.size() <= kFreeNodesLowWatermark) {
+        return;
+      }
+    }
+  }
+}
+
+bool TabNodePool::IsUnassociatedTabNode(int tab_node_id) {
+  return unassociated_nodes_.find(tab_node_id) != unassociated_nodes_.end();
+}
+
+void TabNodePool::ReassociateTabNode(int tab_node_id,
+                                      SessionID::id_type tab_id) {
+  // Remove from list of unassociated sync_nodes if present.
+  std::set<int>::iterator it = unassociated_nodes_.find(tab_node_id);
+  if (it != unassociated_nodes_.end()) {
+    unassociated_nodes_.erase(it);
+  } else {
+    // tab_node_id must be an already associated node.
+    DCHECK(nodeid_tabid_map_.find(tab_node_id) != nodeid_tabid_map_.end());
+  }
+  nodeid_tabid_map_[tab_node_id] = tab_id;
+}
+
+SessionID::id_type TabNodePool::GetTabIdFromTabNodeId(
+    int tab_node_id) const {
+  TabNodeIDToTabIDMap::const_iterator it = nodeid_tabid_map_.find(tab_node_id);
+  if (it != nodeid_tabid_map_.end()) {
+    return it->second;
+  }
+  return kInvalidTabID;
+}
+
+void TabNodePool::DeleteUnassociatedTabNodes(
+    syncer::SyncChangeList* append_changes) {
+  for (std::set<int>::iterator it = unassociated_nodes_.begin();
+       it != unassociated_nodes_.end();) {
+    FreeTabNodeInternal(*it, append_changes);
+    unassociated_nodes_.erase(it++);
+  }
+  DCHECK(unassociated_nodes_.empty());
+}
+
+// Clear tab pool.
+void TabNodePool::Clear() {
+  unassociated_nodes_.clear();
+  free_nodes_pool_.clear();
+  nodeid_tabid_map_.clear();
+  max_used_tab_node_id_ = kInvalidTabNodeID;
+}
+
+size_t TabNodePool::Capacity() const {
+  return nodeid_tabid_map_.size() + unassociated_nodes_.size() +
+         free_nodes_pool_.size();
+}
+
+bool TabNodePool::Empty() const { return free_nodes_pool_.empty(); }
+
+bool TabNodePool::Full() { return nodeid_tabid_map_.empty(); }
+
+void TabNodePool::SetMachineTag(const std::string& machine_tag) {
+  machine_tag_ = machine_tag;
+}
+
+}  // namespace browser_sync
diff --git a/chrome/browser/sync/sessions/tab_node_pool.h b/chrome/browser/sync/sessions/tab_node_pool.h
new file mode 100644
index 0000000..9fd75f1
--- /dev/null
+++ b/chrome/browser/sync/sessions/tab_node_pool.h
@@ -0,0 +1,165 @@
+// 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.
+
+#ifndef CHROME_BROWSER_SYNC_SESSIONS_TAB_NODE_POOL_H_
+#define CHROME_BROWSER_SYNC_SESSIONS_TAB_NODE_POOL_H_
+
+#include <map>
+#include <set>
+#include <string>
+
+#include "base/basictypes.h"
+#include "base/gtest_prod_util.h"
+#include "chrome/browser/sessions/session_id.h"
+#include "sync/api/sync_change_processor.h"
+
+namespace syncer {
+class SyncChangeProcessor;
+}
+
+namespace browser_sync {
+
+// A pool for managing free/used tab sync nodes for the *local* session.
+// Performs lazy creation of sync nodes when necessary.
+// Note: We make use of the following "id's"
+// - a tab_id: created by session service, unique to this client
+// - a tab_node_id: the id for a particular sync tab node. This is used
+//   to generate the sync tab node tag through:
+//       tab_tag = StringPrintf("%s_%ui", local_session_tag, tab_node_id);
+//
+// A sync node can be in one of the three states:
+// 1. Associated   : Sync node is used and associated with a tab.
+// 2. Unassociated : Sync node is used but currently unassociated with any tab.
+//                   This is true for old nodes that remain from a session
+//                   restart. Nodes are only unassociated temporarily while the
+//                   model associator figures out which tabs belong to which
+//                   nodes. Eventually any remaining unassociated nodes are
+//                   freed.
+// 3. Free         : Sync node is unused.
+
+class TabNodePool {
+ public:
+   TabNodePool();
+  ~TabNodePool();
+  enum InvalidTab {
+    kInvalidTabID = -1
+  };
+
+  // If free nodes > kFreeNodesHighWatermark, delete all free nodes until
+  // free nodes <= kFreeNodesLowWatermark.
+  static const size_t kFreeNodesLowWatermark;
+
+  // Maximum limit of FreeNodes allowed on the client.
+  static const size_t kFreeNodesHighWatermark;
+
+  static const int kInvalidTabNodeID;
+
+  // Build a sync tag from tab_node_id.
+  static std::string TabIdToTag(const std::string machine_tag,
+                                int tab_node_id);
+
+  // Returns the tab_node_id for the next free tab node. If none are available,
+  // creates a new tab node and adds it to free nodes pool. The free node can
+  // then be used to associate with a tab by calling AssociateTabNode.
+  // Note: The node is considered free until it has been associated. Repeated
+  // calls to GetFreeTabNode will return the same id until node has been
+  // associated.
+  // |change_output| *must* be provided. It is the TabNodePool's link to
+  // the SyncChange pipeline that exists in the caller context. If the need
+  // to create nodes arises in the implementation, associated SyncChanges will
+  // be appended to this list for later application by the caller via the
+  // SyncChangeProcessor.
+  int GetFreeTabNode(syncer::SyncChangeList* change_output);
+
+  // Removes association for |tab_node_id| and returns it to the free node pool.
+  // |change_output| *must* be provided. It is the TabNodePool's link to
+  // the SyncChange pipeline that exists in the caller's context. If the need
+  // to delete sync nodes arises in the implementation, associated SyncChanges
+  // will be appended to this list for later application by the caller via the
+  // SyncChangeProcessor.
+  void FreeTabNode(int tab_node_id, syncer::SyncChangeList* change_output);
+
+  // Associates |tab_node_id| with |tab_id|. |tab_node_id| should either be
+  // unassociated or free. If |tab_node_id| is free, |tab_node_id| is removed
+  // from the free node pool In order to associate a non free sync node,
+  // use ReassociateTabNode.
+  void AssociateTabNode(int tab_node_id, SessionID::id_type tab_id);
+
+  // Adds |tab_node_id| as an unassociated sync node.
+  // Note: this should only be called when we discover tab sync nodes from
+  // previous sessions, not for freeing tab nodes we created through
+  // GetFreeTabNode (use FreeTabNode below for that).
+  void AddTabNode(int tab_node_id);
+
+  // Returns the tab_id for |tab_node_id| if it is associated else returns
+  // kInvalidTabID.
+  SessionID::id_type GetTabIdFromTabNodeId(int tab_node_id) const;
+
+  // Reassociates |tab_node_id| with |tab_id|. |tab_node_id| must be either
+  // associated with a tab or in the set of unassociated nodes.
+  void ReassociateTabNode(int tab_node_id, SessionID::id_type tab_id);
+
+  // Returns true if |tab_node_id| is an unassociated tab node.
+  bool IsUnassociatedTabNode(int tab_node_id);
+
+  // Returns any unassociated nodes to the free node pool.
+  // |change_output| *must* be provided. It is the TabNodePool's link to
+  // the SyncChange pipeline that exists in the caller's context.
+  // See FreeTabNode for more detail.
+  void DeleteUnassociatedTabNodes(syncer::SyncChangeList* change_output);
+
+  // Clear tab pool.
+  void Clear();
+
+  // Return the number of tab nodes this client currently has allocated
+  // (including both free, unassociated and associated nodes)
+  size_t Capacity() const;
+
+  // Return empty status (all tab nodes are in use).
+  bool Empty() const;
+
+  // Return full status (no tab nodes are in use).
+  bool Full();
+
+  void SetMachineTag(const std::string& machine_tag);
+
+ private:
+  friend class SyncTabNodePoolTest;
+  typedef std::map<int, SessionID::id_type> TabNodeIDToTabIDMap;
+
+  // Adds |tab_node_id| to free node pool.
+  // |change_output| *must* be provided. It is the TabNodePool's link to
+  // the SyncChange pipeline that exists in the caller's context.
+  // See FreeTabNode for more detail.
+  void FreeTabNodeInternal(int tab_node_id,
+                           syncer::SyncChangeList* change_output);
+
+  // Stores mapping of node ids associated with tab_ids, these are the used
+  // nodes of tab node pool.
+  // The nodes in the map can be returned to free tab node pool by calling
+  // FreeTabNode(tab_node_id).
+  TabNodeIDToTabIDMap nodeid_tabid_map_;
+
+  // The node ids for the set of free sync nodes.
+  std::set<int> free_nodes_pool_;
+
+  // The node ids that are added to pool using AddTabNode and are currently
+  // not associated with any tab. They can be reassociated using
+  // ReassociateTabNode.
+  std::set<int> unassociated_nodes_;
+
+  // The maximum used tab_node id for a sync node. A new sync node will always
+  // be created with max_used_tab_node_id_ + 1.
+  int max_used_tab_node_id_;
+
+  // The machine tag associated with this tab pool. Used in the title of new
+  // sync nodes.
+  std::string machine_tag_;
+
+  DISALLOW_COPY_AND_ASSIGN(TabNodePool);
+};
+
+}  // namespace browser_sync
+
+#endif  // CHROME_BROWSER_SYNC_SESSIONS_TAB_NODE_POOL_H_
diff --git a/chrome/browser/sync/sessions/tab_node_pool_unittest.cc b/chrome/browser/sync/sessions/tab_node_pool_unittest.cc
new file mode 100644
index 0000000..f48b8d3
--- /dev/null
+++ b/chrome/browser/sync/sessions/tab_node_pool_unittest.cc
@@ -0,0 +1,262 @@
+// 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.
+
+#include "chrome/browser/sync/sessions/tab_node_pool.h"
+
+#include "base/logging.h"
+#include "sync/api/sync_change.h"
+#include "sync/protocol/session_specifics.pb.h"
+#include "sync/protocol/sync.pb.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace browser_sync {
+
+class SyncTabNodePoolTest : public testing::Test {
+ protected:
+  SyncTabNodePoolTest() { pool_.SetMachineTag("tag"); }
+
+  int GetMaxUsedTabNodeId() const { return pool_.max_used_tab_node_id_; }
+
+  void AddFreeTabNodes(size_t size, const int node_ids[]);
+
+  TabNodePool pool_;
+};
+
+void SyncTabNodePoolTest::AddFreeTabNodes(
+    size_t size, const int node_ids[]) {
+  for (size_t i = 0; i < size; ++i) {
+    pool_.free_nodes_pool_.insert(node_ids[i]);
+  }
+}
+
+namespace {
+
+TEST_F(SyncTabNodePoolTest, TabNodeIdIncreases) {
+  syncer::SyncChangeList changes;
+  // max_used_tab_node_ always increases.
+  pool_.AddTabNode(10);
+  EXPECT_EQ(10, GetMaxUsedTabNodeId());
+  pool_.AddTabNode(5);
+  EXPECT_EQ(10, GetMaxUsedTabNodeId());
+  pool_.AddTabNode(1000);
+  EXPECT_EQ(1000, GetMaxUsedTabNodeId());
+  pool_.ReassociateTabNode(1000, 1);
+  pool_.ReassociateTabNode(5, 2);
+  pool_.ReassociateTabNode(10, 3);
+  // Freeing a tab node does not change max_used_tab_node_id_.
+  pool_.FreeTabNode(1000, &changes);
+  EXPECT_TRUE(changes.empty());
+  pool_.FreeTabNode(5, &changes);
+  EXPECT_TRUE(changes.empty());
+  pool_.FreeTabNode(10, &changes);
+  EXPECT_TRUE(changes.empty());
+  for (int i = 0; i < 3; ++i) {
+    pool_.AssociateTabNode(pool_.GetFreeTabNode(&changes), i + 1);
+    EXPECT_EQ(1000, GetMaxUsedTabNodeId());
+  }
+  EXPECT_TRUE(changes.empty());
+  EXPECT_EQ(1000, GetMaxUsedTabNodeId());
+  EXPECT_TRUE(pool_.Empty());
+}
+
+TEST_F(SyncTabNodePoolTest, OldTabNodesAddAndRemove) {
+  syncer::SyncChangeList changes;
+  // VerifyOldTabNodes are added.
+  pool_.AddTabNode(1);
+  pool_.AddTabNode(2);
+  EXPECT_EQ(2u, pool_.Capacity());
+  EXPECT_TRUE(pool_.Empty());
+  EXPECT_TRUE(pool_.IsUnassociatedTabNode(1));
+  EXPECT_TRUE(pool_.IsUnassociatedTabNode(2));
+  pool_.ReassociateTabNode(1, 2);
+  EXPECT_TRUE(pool_.Empty());
+  pool_.AssociateTabNode(2, 3);
+  EXPECT_FALSE(pool_.IsUnassociatedTabNode(1));
+  EXPECT_FALSE(pool_.IsUnassociatedTabNode(2));
+  pool_.FreeTabNode(2, &changes);
+  EXPECT_TRUE(changes.empty());
+  // 2 should be returned to free node pool_.
+  EXPECT_EQ(2u, pool_.Capacity());
+  // Should be able to free 1.
+  pool_.FreeTabNode(1, &changes);
+  EXPECT_FALSE(pool_.Empty());
+  EXPECT_TRUE(pool_.Full());
+  EXPECT_EQ(1, pool_.GetFreeTabNode(&changes));
+  EXPECT_TRUE(changes.empty());
+  pool_.AssociateTabNode(1, 1);
+  EXPECT_EQ(2, pool_.GetFreeTabNode(&changes));
+  EXPECT_TRUE(changes.empty());
+  pool_.AssociateTabNode(2, 1);
+  EXPECT_TRUE(pool_.Empty());
+  EXPECT_FALSE(pool_.Full());
+  EXPECT_FALSE(pool_.Full());
+}
+
+TEST_F(SyncTabNodePoolTest, OldTabNodesReassociation) {
+  // VerifyOldTabNodes are reassociated correctly.
+  pool_.AddTabNode(4);
+  pool_.AddTabNode(5);
+  pool_.AddTabNode(6);
+  EXPECT_EQ(3u, pool_.Capacity());
+  EXPECT_TRUE(pool_.Empty());
+  EXPECT_TRUE(pool_.IsUnassociatedTabNode(4));
+  pool_.ReassociateTabNode(4, 5);
+  pool_.AssociateTabNode(5, 6);
+  pool_.AssociateTabNode(6, 7);
+  // Free 5 and 6.
+  syncer::SyncChangeList changes;
+  pool_.FreeTabNode(5, &changes);
+  pool_.FreeTabNode(6, &changes);
+  EXPECT_TRUE(changes.empty());
+  // 5 and 6 nodes should not be unassociated.
+  EXPECT_FALSE(pool_.IsUnassociatedTabNode(5));
+  EXPECT_FALSE(pool_.IsUnassociatedTabNode(6));
+  // Free node pool should have 5 and 6.
+  EXPECT_FALSE(pool_.Empty());
+  EXPECT_EQ(3u, pool_.Capacity());
+
+  // Free all nodes
+  pool_.FreeTabNode(4, &changes);
+  EXPECT_TRUE(changes.empty());
+  EXPECT_TRUE(pool_.Full());
+  std::set<int> free_sync_ids;
+  for (int i = 0; i < 3; ++i) {
+    free_sync_ids.insert(pool_.GetFreeTabNode(&changes));
+    // GetFreeTabNode will return the same value till the node is
+    // reassociated.
+    pool_.AssociateTabNode(pool_.GetFreeTabNode(&changes), i + 1);
+  }
+
+  EXPECT_TRUE(pool_.Empty());
+  EXPECT_EQ(3u, free_sync_ids.size());
+  EXPECT_EQ(1u, free_sync_ids.count(4));
+  EXPECT_EQ(1u, free_sync_ids.count(5));
+  EXPECT_EQ(1u, free_sync_ids.count(6));
+}
+
+TEST_F(SyncTabNodePoolTest, Init) {
+  EXPECT_TRUE(pool_.Empty());
+  EXPECT_TRUE(pool_.Full());
+}
+
+TEST_F(SyncTabNodePoolTest, AddGet) {
+  syncer::SyncChangeList changes;
+  int free_nodes[] = {5, 10};
+  AddFreeTabNodes(2, free_nodes);
+
+  EXPECT_EQ(2U, pool_.Capacity());
+  EXPECT_EQ(5, pool_.GetFreeTabNode(&changes));
+  pool_.AssociateTabNode(5, 1);
+  EXPECT_FALSE(pool_.Empty());
+  EXPECT_FALSE(pool_.Full());
+  EXPECT_EQ(2U, pool_.Capacity());
+  // 5 is now used, should return 10.
+  EXPECT_EQ(10, pool_.GetFreeTabNode(&changes));
+}
+
+TEST_F(SyncTabNodePoolTest, All) {
+  syncer::SyncChangeList changes;
+  EXPECT_TRUE(pool_.Empty());
+  EXPECT_TRUE(pool_.Full());
+  EXPECT_EQ(0U, pool_.Capacity());
+
+  // GetFreeTabNode returns the lowest numbered free node.
+  EXPECT_EQ(0, pool_.GetFreeTabNode(&changes));
+  EXPECT_EQ(1U, changes.size());
+  EXPECT_FALSE(pool_.Empty());
+  EXPECT_TRUE(pool_.Full());
+  EXPECT_EQ(1U, pool_.Capacity());
+
+  // Associate 5, next free node should be 10.
+  pool_.AssociateTabNode(0, 1);
+  EXPECT_EQ(1, pool_.GetFreeTabNode(&changes));
+  EXPECT_EQ(2U, changes.size());
+  changes.clear();
+  pool_.AssociateTabNode(1, 2);
+  EXPECT_TRUE(pool_.Empty());
+  EXPECT_FALSE(pool_.Full());
+  EXPECT_EQ(2U, pool_.Capacity());
+  // Release them in reverse order.
+  pool_.FreeTabNode(1, &changes);
+  pool_.FreeTabNode(0, &changes);
+  EXPECT_EQ(2U, pool_.Capacity());
+  EXPECT_FALSE(pool_.Empty());
+  EXPECT_TRUE(pool_.Full());
+  EXPECT_EQ(0, pool_.GetFreeTabNode(&changes));
+  EXPECT_TRUE(changes.empty());
+  EXPECT_FALSE(pool_.Empty());
+  EXPECT_TRUE(pool_.Full());
+  EXPECT_EQ(2U, pool_.Capacity());
+  EXPECT_FALSE(pool_.Empty());
+  EXPECT_TRUE(pool_.Full());
+  pool_.AssociateTabNode(0, 1);
+  EXPECT_EQ(2U, pool_.Capacity());
+  EXPECT_EQ(1, pool_.GetFreeTabNode(&changes));
+  EXPECT_TRUE(changes.empty());
+  pool_.AssociateTabNode(1, 2);
+  EXPECT_TRUE(pool_.Empty());
+  EXPECT_FALSE(pool_.Full());
+  EXPECT_EQ(2U, pool_.Capacity());
+  // Release them again.
+  pool_.FreeTabNode(1, &changes);
+  pool_.FreeTabNode(0, &changes);
+  EXPECT_FALSE(pool_.Empty());
+  EXPECT_TRUE(pool_.Full());
+  EXPECT_EQ(2U, pool_.Capacity());
+  pool_.Clear();
+  EXPECT_TRUE(pool_.Empty());
+  EXPECT_TRUE(pool_.Full());
+  EXPECT_EQ(0U, pool_.Capacity());
+}
+
+TEST_F(SyncTabNodePoolTest, GetFreeTabNodeCreate) {
+  syncer::SyncChangeList changes;
+  EXPECT_EQ(0, pool_.GetFreeTabNode(&changes));
+  EXPECT_TRUE(changes[0].IsValid());
+  EXPECT_EQ(syncer::SyncChange::ACTION_ADD, changes[0].change_type());
+  EXPECT_TRUE(changes[0].sync_data().IsValid());
+  sync_pb::EntitySpecifics entity = changes[0].sync_data().GetSpecifics();
+  sync_pb::SessionSpecifics specifics(entity.session());
+  EXPECT_EQ(0, specifics.tab_node_id());
+}
+
+TEST_F(SyncTabNodePoolTest, TabPoolFreeNodeLimits) {
+  // Allocate TabNodePool::kFreeNodesHighWatermark + 1 nodes and verify that
+  // freeing the last node reduces the free node pool size to
+  // kFreeNodesLowWatermark.
+  syncer::SyncChangeList changes;
+  SessionID session_id;
+  std::vector<int> used_sync_ids;
+  for (size_t i = 1; i <= TabNodePool::kFreeNodesHighWatermark + 1; ++i) {
+    session_id.set_id(i);
+    int sync_id = pool_.GetFreeTabNode(&changes);
+    pool_.AssociateTabNode(sync_id, i);
+    used_sync_ids.push_back(sync_id);
+  }
+
+  // Free all except one node.
+  int last_sync_id = used_sync_ids.back();
+  used_sync_ids.pop_back();
+
+  for (size_t i = 0; i < used_sync_ids.size(); ++i) {
+    pool_.FreeTabNode(used_sync_ids[i], &changes);
+  }
+
+  // Except one node all nodes should be in FreeNode pool.
+  EXPECT_FALSE(pool_.Full());
+  EXPECT_FALSE(pool_.Empty());
+  // Total capacity = 1 Associated Node + kFreeNodesHighWatermark free node.
+  EXPECT_EQ(TabNodePool::kFreeNodesHighWatermark + 1, pool_.Capacity());
+
+  // Freeing the last sync node should drop the free nodes to
+  // kFreeNodesLowWatermark.
+  pool_.FreeTabNode(last_sync_id, &changes);
+  EXPECT_FALSE(pool_.Empty());
+  EXPECT_TRUE(pool_.Full());
+  EXPECT_EQ(TabNodePool::kFreeNodesLowWatermark, pool_.Capacity());
+}
+
+}  // namespace
+
+}  // namespace browser_sync
diff --git a/chrome/browser/sync/sessions2/notification_service_sessions_router.cc b/chrome/browser/sync/sessions2/notification_service_sessions_router.cc
deleted file mode 100644
index 449a1d2..0000000
--- a/chrome/browser/sync/sessions2/notification_service_sessions_router.cc
+++ /dev/null
@@ -1,163 +0,0 @@
-// Copyright 2013 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 "chrome/browser/sync/sessions2/notification_service_sessions_router.h"
-
-#include "base/logging.h"
-#include "chrome/browser/chrome_notification_types.h"
-#include "chrome/browser/extensions/tab_helper.h"
-#include "chrome/browser/favicon/favicon_changed_details.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/sync/glue/sync_start_util.h"
-#include "chrome/browser/sync/glue/synced_tab_delegate.h"
-#include "chrome/browser/sync/sessions2/sessions_util.h"
-#include "chrome/browser/ui/browser.h"
-#include "content/public/browser/navigation_controller.h"
-#include "content/public/browser/navigation_entry.h"
-#include "content/public/browser/notification_details.h"
-#include "content/public/browser/notification_service.h"
-#include "content/public/browser/notification_source.h"
-#include "content/public/browser/web_contents.h"
-
-#if defined(ENABLE_MANAGED_USERS)
-#include "chrome/browser/managed_mode/managed_user_service.h"
-#include "chrome/browser/managed_mode/managed_user_service_factory.h"
-#endif
-
-using content::NavigationController;
-using content::WebContents;
-
-namespace browser_sync {
-
-NotificationServiceSessionsRouter::NotificationServiceSessionsRouter(
-    Profile* profile, const syncer::SyncableService::StartSyncFlare& flare)
-        : handler_(NULL),
-          profile_(profile),
-          flare_(flare),
-          weak_ptr_factory_(this) {
-
-  registrar_.Add(this, chrome::NOTIFICATION_TAB_PARENTED,
-      content::NotificationService::AllSources());
-  registrar_.Add(this, content::NOTIFICATION_WEB_CONTENTS_DESTROYED,
-      content::NotificationService::AllSources());
-  registrar_.Add(this, content::NOTIFICATION_NAV_LIST_PRUNED,
-      content::NotificationService::AllSources());
-  registrar_.Add(this, content::NOTIFICATION_NAV_ENTRY_CHANGED,
-      content::NotificationService::AllSources());
-  registrar_.Add(this, content::NOTIFICATION_NAV_ENTRY_COMMITTED,
-      content::NotificationService::AllSources());
-  registrar_.Add(this,
-      chrome::NOTIFICATION_TAB_CONTENTS_APPLICATION_EXTENSION_CHANGED,
-      content::NotificationService::AllSources());
-  registrar_.Add(this,
-      content::NOTIFICATION_LOAD_COMPLETED_MAIN_FRAME,
-      content::NotificationService::AllBrowserContextsAndSources());
-  registrar_.Add(this, chrome::NOTIFICATION_FAVICON_CHANGED,
-      content::Source<Profile>(profile_));
-#if defined(ENABLE_MANAGED_USERS)
-  if (profile_->IsManaged()) {
-    ManagedUserService* managed_user_service =
-        ManagedUserServiceFactory::GetForProfile(profile_);
-    managed_user_service->AddNavigationBlockedCallback(
-        base::Bind(&NotificationServiceSessionsRouter::OnNavigationBlocked,
-                   weak_ptr_factory_.GetWeakPtr()));
-  }
-#endif
-}
-
-NotificationServiceSessionsRouter::~NotificationServiceSessionsRouter() {}
-
-void NotificationServiceSessionsRouter::Observe(
-    int type,
-    const content::NotificationSource& source,
-    const content::NotificationDetails& details) {
-  switch (type) {
-    case chrome::NOTIFICATION_FAVICON_CHANGED: {
-      content::Details<FaviconChangedDetails> favicon_details(details);
-      if (handler_)
-        handler_->OnFaviconPageUrlsUpdated(favicon_details->urls);
-      return;
-    }
-    // Source<WebContents>.
-    case chrome::NOTIFICATION_TAB_PARENTED:
-    case content::NOTIFICATION_LOAD_COMPLETED_MAIN_FRAME:
-    case content::NOTIFICATION_WEB_CONTENTS_DESTROYED: {
-      WebContents* web_contents = content::Source<WebContents>(source).ptr();
-      SyncedTabDelegate* tab =
-          SyncedTabDelegate::ImplFromWebContents(web_contents);
-      if (!tab || tab->profile() != profile_)
-        return;
-      if (handler_)
-        handler_->OnLocalTabModified(tab);
-      if (!sessions_util::ShouldSyncTab(*tab))
-        return;
-      break;
-    }
-    // Source<NavigationController>.
-    case content::NOTIFICATION_NAV_LIST_PRUNED:
-    case content::NOTIFICATION_NAV_ENTRY_CHANGED:
-    case content::NOTIFICATION_NAV_ENTRY_COMMITTED: {
-      SyncedTabDelegate* tab = SyncedTabDelegate::ImplFromWebContents(
-          content::Source<NavigationController>(source).ptr()->
-              GetWebContents());
-      if (!tab || tab->profile() != profile_)
-        return;
-      if (handler_)
-        handler_->OnLocalTabModified(tab);
-      if (!sessions_util::ShouldSyncTab(*tab))
-        return;
-      break;
-    }
-    case chrome::NOTIFICATION_TAB_CONTENTS_APPLICATION_EXTENSION_CHANGED: {
-      extensions::TabHelper* extension_tab_helper =
-          content::Source<extensions::TabHelper>(source).ptr();
-      if (extension_tab_helper->web_contents()->GetBrowserContext() !=
-              profile_) {
-        return;
-      }
-      if (extension_tab_helper->extension_app()) {
-        SyncedTabDelegate* tab = SyncedTabDelegate::ImplFromWebContents(
-            extension_tab_helper->web_contents());
-        if (!tab || tab->profile() != profile_)
-          return;
-        if (handler_)
-          handler_->OnLocalTabModified(tab);
-        break;
-      }
-      return;
-    }
-    default:
-      LOG(ERROR) << "Received unexpected notification of type " << type;
-      return;
-  }
-
-  if (!flare_.is_null()) {
-    flare_.Run(syncer::SESSIONS);
-    flare_.Reset();
-  }
-}
-
-void NotificationServiceSessionsRouter::OnNavigationBlocked(
-    content::WebContents* web_contents) {
-  SyncedTabDelegate* tab =
-      SyncedTabDelegate::ImplFromWebContents(web_contents);
-  if (!tab || !handler_)
-    return;
-
-  DCHECK(tab->profile() == profile_);
-  handler_->OnLocalTabModified(tab);
-}
-
-void NotificationServiceSessionsRouter::StartRoutingTo(
-    LocalSessionEventHandler* handler) {
-  DCHECK(!handler_);
-  handler_ = handler;
-}
-
-void NotificationServiceSessionsRouter::Stop() {
-  weak_ptr_factory_.InvalidateWeakPtrs();
-  handler_ = NULL;
-}
-
-}  // namespace browser_sync
diff --git a/chrome/browser/sync/sessions2/notification_service_sessions_router.h b/chrome/browser/sync/sessions2/notification_service_sessions_router.h
deleted file mode 100644
index 7a6c653..0000000
--- a/chrome/browser/sync/sessions2/notification_service_sessions_router.h
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright 2013 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 CHROME_BROWSER_SYNC_SESSIONS2_NOTIFICATION_SERVICE_SESSIONS_ROUTER_H_
-#define CHROME_BROWSER_SYNC_SESSIONS2_NOTIFICATION_SERVICE_SESSIONS_ROUTER_H_
-
-#include "base/memory/weak_ptr.h"
-#include "chrome/browser/sync/sessions2/sessions_sync_manager.h"
-#include "content/public/browser/notification_observer.h"
-#include "content/public/browser/notification_registrar.h"
-
-class Profile;
-
-namespace content {
-class WebContents;
-}
-
-namespace browser_sync {
-
-// A SessionsSyncManager::LocalEventRouter that drives session sync via
-// the NotificationService.
-class NotificationServiceSessionsRouter
-    : public LocalSessionEventRouter,
-      public content::NotificationObserver {
- public:
-  NotificationServiceSessionsRouter(
-      Profile* profile,
-      const syncer::SyncableService::StartSyncFlare& flare);
-  virtual ~NotificationServiceSessionsRouter();
-
-  // content::NotificationObserver implementation.
-  // BrowserSessionProvider -> sync API model change application.
-  virtual void Observe(int type,
-                       const content::NotificationSource& source,
-                       const content::NotificationDetails& details) OVERRIDE;
-
-  // SessionsSyncManager::LocalEventRouter implementation.
-  virtual void StartRoutingTo(LocalSessionEventHandler* handler) OVERRIDE;
-  virtual void Stop() OVERRIDE;
-
- private:
-  // Called when the URL visited in |web_contents| was blocked by the
-  // ManagedUserService. We forward this on to our handler_ via the
-  // normal OnLocalTabModified, but pass through here via a WeakPtr
-  // callback from ManagedUserService and to extract the tab delegate
-  // from WebContents.
-  void OnNavigationBlocked(content::WebContents* web_contents);
-
-  LocalSessionEventHandler* handler_;
-  content::NotificationRegistrar registrar_;
-  Profile* const profile_;
-  syncer::SyncableService::StartSyncFlare flare_;
-  base::WeakPtrFactory<NotificationServiceSessionsRouter> weak_ptr_factory_;
-
-  DISALLOW_COPY_AND_ASSIGN(NotificationServiceSessionsRouter);
-};
-
-}  // namespace browser_sync
-
-#endif  // CHROME_BROWSER_SYNC_SESSIONS2_NOTIFICATION_SERVICE_SESSIONS_ROUTER_H_
diff --git a/chrome/browser/sync/sessions2/session_data_type_controller2.cc b/chrome/browser/sync/sessions2/session_data_type_controller2.cc
deleted file mode 100644
index e2ae147..0000000
--- a/chrome/browser/sync/sessions2/session_data_type_controller2.cc
+++ /dev/null
@@ -1,66 +0,0 @@
-// Copyright 2013 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 "chrome/browser/sync/sessions2/session_data_type_controller2.h"
-
-#include "chrome/browser/chrome_notification_types.h"
-#include "chrome/browser/sync/glue/chrome_report_unrecoverable_error.h"
-#include "chrome/browser/sync/glue/synced_window_delegate.h"
-#include "content/public/browser/browser_thread.h"
-#include "content/public/browser/notification_details.h"
-#include "content/public/browser/notification_service.h"
-#include "content/public/browser/notification_source.h"
-
-using content::BrowserThread;
-
-namespace browser_sync {
-
-SessionDataTypeController2::SessionDataTypeController2(
-    ProfileSyncComponentsFactory* profile_sync_factory,
-    Profile* profile,
-    ProfileSyncService* sync_service)
-    : UIDataTypeController(
-          BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI),
-          base::Bind(&ChromeReportUnrecoverableError),
-          syncer::SESSIONS,
-          profile_sync_factory,
-          profile,
-          sync_service) {
-}
-
-SessionDataTypeController2::~SessionDataTypeController2() {}
-
-bool SessionDataTypeController2::StartModels() {
-  DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
-  std::set<browser_sync::SyncedWindowDelegate*> window =
-      browser_sync::SyncedWindowDelegate::GetSyncedWindowDelegates();
-  for (std::set<browser_sync::SyncedWindowDelegate*>::const_iterator i =
-      window.begin(); i != window.end(); ++i) {
-    if ((*i)->IsSessionRestoreInProgress()) {
-      notification_registrar_.Add(
-          this,
-          chrome::NOTIFICATION_SESSION_RESTORE_COMPLETE,
-          content::Source<Profile>(profile_));
-      return false;
-    }
-  }
-  return true;
-}
-
-void SessionDataTypeController2::StopModels() {
-  notification_registrar_.RemoveAll();
-}
-
-void SessionDataTypeController2::Observe(
-    int type,
-    const content::NotificationSource& source,
-    const content::NotificationDetails& details) {
-  DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
-  DCHECK_EQ(chrome::NOTIFICATION_SESSION_RESTORE_COMPLETE, type);
-  DCHECK_EQ(profile_, content::Source<Profile>(source).ptr());
-  notification_registrar_.RemoveAll();
-  OnModelLoaded();
-}
-
-}  // namespace browser_sync
diff --git a/chrome/browser/sync/sessions2/session_data_type_controller2.h b/chrome/browser/sync/sessions2/session_data_type_controller2.h
deleted file mode 100644
index 941ec45..0000000
--- a/chrome/browser/sync/sessions2/session_data_type_controller2.h
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2013 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 CHROME_BROWSER_SYNC_SESSIONS2_SESSION_DATA_TYPE_CONTROLLER2_H_
-#define CHROME_BROWSER_SYNC_SESSIONS2_SESSION_DATA_TYPE_CONTROLLER2_H_
-
-#include "chrome/browser/sync/glue/ui_data_type_controller.h"
-#include "content/public/browser/notification_observer.h"
-#include "content/public/browser/notification_registrar.h"
-
-namespace browser_sync {
-
-// Overrides StartModels to avoid sync contention with sessions during
-// a session restore operation at startup.
-class SessionDataTypeController2 : public UIDataTypeController,
-                                   public content::NotificationObserver {
- public:
-  SessionDataTypeController2(ProfileSyncComponentsFactory* factory,
-                             Profile* profile,
-                             ProfileSyncService* service);
-
-  // NotificationObserver interface.
-  virtual void Observe(int type,
-                       const content::NotificationSource& source,
-                       const content::NotificationDetails& details) OVERRIDE;
-
- protected:
-  virtual ~SessionDataTypeController2();
-  virtual bool StartModels() OVERRIDE;
-  virtual void StopModels() OVERRIDE;
-
- private:
-  content::NotificationRegistrar notification_registrar_;
-  DISALLOW_COPY_AND_ASSIGN(SessionDataTypeController2);
-};
-
-}  // namespace browser_sync
-
-#endif  // CHROME_BROWSER_SYNC_SESSIONS2_SESSION_DATA_TYPE_CONTROLLER2_H_
-
diff --git a/chrome/browser/sync/sessions2/sessions_sync_manager.cc b/chrome/browser/sync/sessions2/sessions_sync_manager.cc
deleted file mode 100644
index dcb5fd3..0000000
--- a/chrome/browser/sync/sessions2/sessions_sync_manager.cc
+++ /dev/null
@@ -1,1004 +0,0 @@
-// Copyright 2013 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 "chrome/browser/sync/sessions2/sessions_sync_manager.h"
-
-#include "chrome/browser/chrome_notification_types.h"
-#if !defined(OS_ANDROID)
-#include "chrome/browser/network_time/navigation_time_helper.h"
-#endif
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/sync/glue/synced_tab_delegate.h"
-#include "chrome/browser/sync/glue/synced_window_delegate.h"
-#include "chrome/browser/sync/sessions2/sessions_util.h"
-#include "chrome/browser/sync/sessions2/synced_window_delegates_getter.h"
-#include "chrome/common/url_constants.h"
-#include "content/public/browser/favicon_status.h"
-#include "content/public/browser/navigation_entry.h"
-#include "content/public/browser/notification_details.h"
-#include "content/public/browser/notification_service.h"
-#include "content/public/browser/notification_source.h"
-#include "content/public/common/url_constants.h"
-#include "sync/api/sync_error.h"
-#include "sync/api/sync_error_factory.h"
-#include "sync/api/sync_merge_result.h"
-#include "sync/api/time.h"
-
-using content::NavigationEntry;
-using sessions::SerializedNavigationEntry;
-using syncer::SyncChange;
-using syncer::SyncData;
-
-namespace browser_sync {
-
-// Maximum number of favicons to sync.
-// TODO(zea): pull this from the server.
-static const int kMaxSyncFavicons = 200;
-
-// The maximum number of navigations in each direction we care to sync.
-static const int kMaxSyncNavigationCount = 6;
-
-// The URL at which the set of synced tabs is displayed. We treat it differently
-// from all other URL's as accessing it triggers a sync refresh of Sessions.
-static const char kNTPOpenTabSyncURL[] = "chrome://newtab/#open_tabs";
-
-// Default number of days without activity after which a session is considered
-// stale and becomes a candidate for garbage collection.
-static const size_t kDefaultStaleSessionThresholdDays = 14;  // 2 weeks.
-
-SessionsSyncManager::SessionsSyncManager(
-    Profile* profile,
-    SyncInternalApiDelegate* delegate,
-    scoped_ptr<LocalSessionEventRouter> router)
-    : favicon_cache_(profile, kMaxSyncFavicons),
-      local_tab_pool_out_of_sync_(true),
-      sync_prefs_(profile->GetPrefs()),
-      profile_(profile),
-      delegate_(delegate),
-      local_session_header_node_id_(TabNodePool2::kInvalidTabNodeID),
-      stale_session_threshold_days_(kDefaultStaleSessionThresholdDays),
-      local_event_router_(router.Pass()),
-      synced_window_getter_(new SyncedWindowDelegatesGetter()) {
-}
-
-LocalSessionEventRouter::~LocalSessionEventRouter() {}
-
-SessionsSyncManager::~SessionsSyncManager() {
-}
-
-// Returns the GUID-based string that should be used for
-// |SessionsSyncManager::current_machine_tag_|.
-static std::string BuildMachineTag(const std::string& cache_guid) {
-  std::string machine_tag = "session_sync";
-  machine_tag.append(cache_guid);
-  return machine_tag;
-}
-
-syncer::SyncMergeResult SessionsSyncManager::MergeDataAndStartSyncing(
-     syncer::ModelType type,
-     const syncer::SyncDataList& initial_sync_data,
-     scoped_ptr<syncer::SyncChangeProcessor> sync_processor,
-     scoped_ptr<syncer::SyncErrorFactory> error_handler) {
-  syncer::SyncMergeResult merge_result(type);
-  DCHECK(session_tracker_.Empty());
-  DCHECK_EQ(0U, local_tab_pool_.Capacity());
-
-  error_handler_ = error_handler.Pass();
-  sync_processor_ = sync_processor.Pass();
-
-  local_session_header_node_id_ = TabNodePool2::kInvalidTabNodeID;
-  scoped_ptr<DeviceInfo> local_device_info(delegate_->GetLocalDeviceInfo());
-  syncer::SyncChangeList new_changes;
-
-  // Make sure we have a machine tag.  We do this now (versus earlier) as it's
-  // a conveniently safe time to assert sync is ready and the cache_guid is
-  // initialized.
-  if (current_machine_tag_.empty())
-    InitializeCurrentMachineTag();
-  if (local_device_info) {
-    current_session_name_ = local_device_info->client_name();
-  } else {
-    merge_result.set_error(error_handler_->CreateAndUploadError(
-        FROM_HERE,
-        "Failed to get device info for machine tag."));
-    return merge_result;
-  }
-  session_tracker_.SetLocalSessionTag(current_machine_tag_);
-
-  // First, we iterate over sync data to update our session_tracker_.
-  syncer::SyncDataList restored_tabs;
-  if (!InitFromSyncModel(initial_sync_data, &restored_tabs, &new_changes)) {
-    // The sync db didn't have a header node for us. Create one.
-    sync_pb::EntitySpecifics specifics;
-    sync_pb::SessionSpecifics* base_specifics = specifics.mutable_session();
-    base_specifics->set_session_tag(current_machine_tag());
-    sync_pb::SessionHeader* header_s = base_specifics->mutable_header();
-    header_s->set_client_name(current_session_name_);
-    header_s->set_device_type(DeviceInfo::GetLocalDeviceType());
-    syncer::SyncData data = syncer::SyncData::CreateLocalData(
-        current_machine_tag(), current_session_name_, specifics);
-    new_changes.push_back(syncer::SyncChange(
-        FROM_HERE, syncer::SyncChange::ACTION_ADD, data));
-  }
-
-#if defined(OS_ANDROID)
-  std::string sync_machine_tag(BuildMachineTag(
-      delegate_->GetLocalSyncCacheGUID()));
-  if (current_machine_tag_.compare(sync_machine_tag) != 0)
-    DeleteForeignSessionInternal(sync_machine_tag, &new_changes);
-#endif
-
-  // Check if anything has changed on the local client side.
-  AssociateWindows(RELOAD_TABS, restored_tabs, &new_changes);
-  local_tab_pool_out_of_sync_ = false;
-
-  merge_result.set_error(
-      sync_processor_->ProcessSyncChanges(FROM_HERE, new_changes));
-
-  local_event_router_->StartRoutingTo(this);
-  return merge_result;
-}
-
-void SessionsSyncManager::AssociateWindows(
-    ReloadTabsOption option,
-    const syncer::SyncDataList& restored_tabs,
-    syncer::SyncChangeList* change_output) {
-  const std::string local_tag = current_machine_tag();
-  sync_pb::SessionSpecifics specifics;
-  specifics.set_session_tag(local_tag);
-  sync_pb::SessionHeader* header_s = specifics.mutable_header();
-  SyncedSession* current_session = session_tracker_.GetSession(local_tag);
-  current_session->modified_time = base::Time::Now();
-  header_s->set_client_name(current_session_name_);
-  header_s->set_device_type(DeviceInfo::GetLocalDeviceType());
-
-  session_tracker_.ResetSessionTracking(local_tag);
-  std::set<SyncedWindowDelegate*> windows =
-      synced_window_getter_->GetSyncedWindowDelegates();
-
-  for (std::set<SyncedWindowDelegate*>::const_iterator i =
-           windows.begin(); i != windows.end(); ++i) {
-    // Make sure the window has tabs and a viewable window. The viewable window
-    // check is necessary because, for example, when a browser is closed the
-    // destructor is not necessarily run immediately. This means its possible
-    // for us to get a handle to a browser that is about to be removed. If
-    // the tab count is 0 or the window is NULL, the browser is about to be
-    // deleted, so we ignore it.
-    if (sessions_util::ShouldSyncWindow(*i) &&
-        (*i)->GetTabCount() && (*i)->HasWindow()) {
-      sync_pb::SessionWindow window_s;
-      SessionID::id_type window_id = (*i)->GetSessionId();
-      DVLOG(1) << "Associating window " << window_id << " with "
-               << (*i)->GetTabCount() << " tabs.";
-      window_s.set_window_id(window_id);
-      // Note: We don't bother to set selected tab index anymore. We still
-      // consume it when receiving foreign sessions, as reading it is free, but
-      // it triggers too many sync cycles with too little value to make setting
-      // it worthwhile.
-      if ((*i)->IsTypeTabbed()) {
-        window_s.set_browser_type(
-            sync_pb::SessionWindow_BrowserType_TYPE_TABBED);
-      } else {
-        window_s.set_browser_type(
-            sync_pb::SessionWindow_BrowserType_TYPE_POPUP);
-      }
-
-      bool found_tabs = false;
-      for (int j = 0; j < (*i)->GetTabCount(); ++j) {
-        SessionID::id_type tab_id = (*i)->GetTabIdAt(j);
-        SyncedTabDelegate* synced_tab = (*i)->GetTabAt(j);
-
-        // GetTabAt can return a null tab; in that case just skip it.
-        if (!synced_tab)
-          continue;
-
-        if (!synced_tab->HasWebContents()) {
-          // For tabs without WebContents update the |tab_id|, as it could have
-          // changed after a session restore.
-          // Note: We cannot check if a tab is valid if it has no WebContents.
-          // We assume any such tab is valid and leave the contents of
-          // corresponding sync node unchanged.
-          if (synced_tab->GetSyncId() > TabNodePool2::kInvalidTabNodeID &&
-              tab_id > TabNodePool2::kInvalidTabID) {
-            AssociateRestoredPlaceholderTab(*synced_tab, tab_id,
-                                            restored_tabs, change_output);
-            found_tabs = true;
-            window_s.add_tab(tab_id);
-          }
-          continue;
-        }
-
-        if (RELOAD_TABS == option)
-          AssociateTab(synced_tab, change_output);
-
-        // If the tab is valid, it would have been added to the tracker either
-        // by the above AssociateTab call (at association time), or by the
-        // change processor calling AssociateTab for all modified tabs.
-        // Therefore, we can key whether this window has valid tabs based on
-        // the tab's presence in the tracker.
-        const SessionTab* tab = NULL;
-        if (session_tracker_.LookupSessionTab(local_tag, tab_id, &tab)) {
-          found_tabs = true;
-          window_s.add_tab(tab_id);
-        }
-      }
-      if (found_tabs) {
-        sync_pb::SessionWindow* header_window = header_s->add_window();
-        *header_window = window_s;
-
-        // Update this window's representation in the synced session tracker.
-        session_tracker_.PutWindowInSession(local_tag, window_id);
-        BuildSyncedSessionFromSpecifics(local_tag,
-                                        window_s,
-                                        current_session->modified_time,
-                                        current_session->windows[window_id]);
-      }
-    }
-  }
-  local_tab_pool_.DeleteUnassociatedTabNodes(change_output);
-  session_tracker_.CleanupSession(local_tag);
-
-  // Always update the header.  Sync takes care of dropping this update
-  // if the entity specifics are identical (i.e windows, client name did
-  // not change).
-  sync_pb::EntitySpecifics entity;
-  entity.mutable_session()->CopyFrom(specifics);
-  syncer::SyncData data = syncer::SyncData::CreateLocalData(
-        current_machine_tag(), current_session_name_, entity);
-  change_output->push_back(syncer::SyncChange(
-        FROM_HERE, syncer::SyncChange::ACTION_UPDATE, data));
-}
-
-void SessionsSyncManager::AssociateTab(SyncedTabDelegate* const tab,
-                                       syncer::SyncChangeList* change_output) {
-  DCHECK(tab->HasWebContents());
-  SessionID::id_type tab_id = tab->GetSessionId();
-  if (tab->profile() != profile_)
-    return;
-
-  if (tab->IsBeingDestroyed()) {
-    // This tab is closing.
-    TabLinksMap::iterator tab_iter = local_tab_map_.find(tab_id);
-    if (tab_iter == local_tab_map_.end()) {
-      // We aren't tracking this tab (for example, sync setting page).
-      return;
-    }
-    local_tab_pool_.FreeTabNode(tab_iter->second->tab_node_id(),
-                                change_output);
-    local_tab_map_.erase(tab_iter);
-    return;
-  }
-
-  if (!sessions_util::ShouldSyncTab(*tab))
-    return;
-
-  TabLinksMap::iterator local_tab_map_iter = local_tab_map_.find(tab_id);
-  TabLink* tab_link = NULL;
-
-  if (local_tab_map_iter == local_tab_map_.end()) {
-    int tab_node_id = tab->GetSyncId();
-    // If there is an old sync node for the tab, reuse it.  If this is a new
-    // tab, get a sync node for it.
-    if (!local_tab_pool_.IsUnassociatedTabNode(tab_node_id)) {
-      tab_node_id = local_tab_pool_.GetFreeTabNode(change_output);
-      tab->SetSyncId(tab_node_id);
-    }
-    local_tab_pool_.AssociateTabNode(tab_node_id, tab_id);
-    tab_link = new TabLink(tab_node_id, tab);
-    local_tab_map_[tab_id] = make_linked_ptr<TabLink>(tab_link);
-  } else {
-    // This tab is already associated with a sync node, reuse it.
-    // Note: on some platforms the tab object may have changed, so we ensure
-    // the tab link is up to date.
-    tab_link = local_tab_map_iter->second.get();
-    local_tab_map_iter->second->set_tab(tab);
-  }
-  DCHECK(tab_link);
-  DCHECK_NE(tab_link->tab_node_id(), TabNodePool2::kInvalidTabNodeID);
-  DVLOG(1) << "Reloading tab " << tab_id << " from window "
-           << tab->GetWindowId();
-
-  // Write to sync model.
-  sync_pb::EntitySpecifics specifics;
-  LocalTabDelegateToSpecifics(*tab, specifics.mutable_session());
-  syncer::SyncData data = syncer::SyncData::CreateLocalData(
-      TabNodePool2::TabIdToTag(current_machine_tag_,
-                               tab_link->tab_node_id()),
-      current_session_name_,
-      specifics);
-  change_output->push_back(syncer::SyncChange(
-      FROM_HERE, syncer::SyncChange::ACTION_UPDATE, data));
-
-  const GURL new_url = GetCurrentVirtualURL(*tab);
-  if (new_url != tab_link->url()) {
-    tab_link->set_url(new_url);
-    favicon_cache_.OnFaviconVisited(new_url, GetCurrentFaviconURL(*tab));
-  }
-
-  session_tracker_.GetSession(current_machine_tag())->modified_time =
-      base::Time::Now();
-}
-
-void SessionsSyncManager::RebuildAssociations() {
-  syncer::SyncDataList data(
-      sync_processor_->GetAllSyncData(syncer::SESSIONS));
-  scoped_ptr<syncer::SyncErrorFactory> error_handler(error_handler_.Pass());
-  scoped_ptr<syncer::SyncChangeProcessor> processor(sync_processor_.Pass());
-
-  StopSyncing(syncer::SESSIONS);
-  MergeDataAndStartSyncing(
-      syncer::SESSIONS, data, processor.Pass(), error_handler.Pass());
-}
-
-void SessionsSyncManager::OnLocalTabModified(SyncedTabDelegate* modified_tab) {
-  const content::NavigationEntry* entry = modified_tab->GetActiveEntry();
-  if (!modified_tab->IsBeingDestroyed() &&
-      entry &&
-      entry->GetVirtualURL().is_valid() &&
-      entry->GetVirtualURL().spec() == kNTPOpenTabSyncURL) {
-    DVLOG(1) << "Triggering sync refresh for sessions datatype.";
-    const syncer::ModelTypeSet types(syncer::SESSIONS);
-    content::NotificationService::current()->Notify(
-        chrome::NOTIFICATION_SYNC_REFRESH_LOCAL,
-        content::Source<Profile>(profile_),
-        content::Details<const syncer::ModelTypeSet>(&types));
-  }
-
-  if (local_tab_pool_out_of_sync_) {
-    // If our tab pool is corrupt, pay the price of a full re-association to
-    // fix things up.  This takes care of the new tab modification as well.
-    RebuildAssociations();
-    DCHECK(!local_tab_pool_out_of_sync_);
-    return;
-  }
-
-  syncer::SyncChangeList changes;
-  // Associate tabs first so the synced session tracker is aware of them.
-  AssociateTab(modified_tab, &changes);
-  // Note, we always associate windows because it's possible a tab became
-  // "interesting" by going to a valid URL, in which case it needs to be added
-  // to the window's tab information.
-  AssociateWindows(DONT_RELOAD_TABS, syncer::SyncDataList(), &changes);
-  sync_processor_->ProcessSyncChanges(FROM_HERE, changes);
-}
-
-void SessionsSyncManager::OnFaviconPageUrlsUpdated(
-    const std::set<GURL>& updated_favicon_page_urls) {
-  // TODO(zea): consider a separate container for tabs with outstanding favicon
-  // loads so we don't have to iterate through all tabs comparing urls.
-  for (std::set<GURL>::const_iterator i = updated_favicon_page_urls.begin();
-       i != updated_favicon_page_urls.end(); ++i) {
-    for (TabLinksMap::iterator tab_iter = local_tab_map_.begin();
-         tab_iter != local_tab_map_.end();
-         ++tab_iter) {
-      if (tab_iter->second->url() == *i)
-        favicon_cache_.OnPageFaviconUpdated(*i);
-    }
-  }
-}
-
-void SessionsSyncManager::StopSyncing(syncer::ModelType type) {
-  local_event_router_->Stop();
-  sync_processor_.reset(NULL);
-  error_handler_.reset();
-  session_tracker_.Clear();
-  local_tab_map_.clear();
-  local_tab_pool_.Clear();
-  current_machine_tag_.clear();
-  current_session_name_.clear();
-  local_session_header_node_id_ = TabNodePool2::kInvalidTabNodeID;
-}
-
-syncer::SyncDataList SessionsSyncManager::GetAllSyncData(
-    syncer::ModelType type) const {
-  syncer::SyncDataList list;
-  const SyncedSession* session = NULL;
-  if (!session_tracker_.LookupLocalSession(&session))
-    return syncer::SyncDataList();
-
-  // First construct the header node.
-  sync_pb::EntitySpecifics header_entity;
-  header_entity.mutable_session()->set_session_tag(current_machine_tag());
-  sync_pb::SessionHeader* header_specifics =
-      header_entity.mutable_session()->mutable_header();
-  header_specifics->MergeFrom(session->ToSessionHeader());
-  syncer::SyncData data = syncer::SyncData::CreateLocalData(
-        current_machine_tag(), current_session_name_, header_entity);
-  list.push_back(data);
-
-  SyncedSession::SyncedWindowMap::const_iterator win_iter;
-  for (win_iter = session->windows.begin();
-       win_iter != session->windows.end(); ++win_iter) {
-    std::vector<SessionTab*>::const_iterator tabs_iter;
-    for (tabs_iter = win_iter->second->tabs.begin();
-         tabs_iter != win_iter->second->tabs.end(); ++tabs_iter) {
-      sync_pb::EntitySpecifics entity;
-      sync_pb::SessionSpecifics* specifics = entity.mutable_session();
-      specifics->mutable_tab()->MergeFrom((*tabs_iter)->ToSyncData());
-      specifics->set_session_tag(current_machine_tag_);
-
-      TabLinksMap::const_iterator tab_map_iter = local_tab_map_.find(
-          (*tabs_iter)->tab_id.id());
-      DCHECK(tab_map_iter != local_tab_map_.end());
-      specifics->set_tab_node_id(tab_map_iter->second->tab_node_id());
-      syncer::SyncData data = syncer::SyncData::CreateLocalData(
-          TabNodePool2::TabIdToTag(current_machine_tag_,
-                                   specifics->tab_node_id()),
-          current_session_name_,
-          entity);
-      list.push_back(data);
-    }
-  }
-  return list;
-}
-
-bool SessionsSyncManager::GetLocalSession(
-    const SyncedSession* * local_session) {
-  if (current_machine_tag_.empty())
-    return false;
-  *local_session = session_tracker_.GetSession(current_machine_tag());
-  return true;
-}
-
-syncer::SyncError SessionsSyncManager::ProcessSyncChanges(
-    const tracked_objects::Location& from_here,
-    const syncer::SyncChangeList& change_list) {
-  if (!sync_processor_.get()) {
-    syncer::SyncError error(FROM_HERE,
-                            syncer::SyncError::DATATYPE_ERROR,
-                            "Models not yet associated.",
-                            syncer::SESSIONS);
-    return error;
-  }
-
-  for (syncer::SyncChangeList::const_iterator it = change_list.begin();
-       it != change_list.end(); ++it) {
-    DCHECK(it->IsValid());
-    DCHECK(it->sync_data().GetSpecifics().has_session());
-    const sync_pb::SessionSpecifics& session =
-        it->sync_data().GetSpecifics().session();
-    switch (it->change_type()) {
-      case syncer::SyncChange::ACTION_DELETE:
-        // Deletions are all or nothing (since we only ever delete entire
-        // sessions). Therefore we don't care if it's a tab node or meta node,
-        // and just ensure we've disassociated.
-        if (current_machine_tag() == session.session_tag()) {
-          // Another client has attempted to delete our local data (possibly by
-          // error or a clock is inaccurate). Just ignore the deletion for now
-          // to avoid any possible ping-pong delete/reassociate sequence, but
-          // remember that this happened as our TabNodePool is inconsistent.
-          local_tab_pool_out_of_sync_ = true;
-          LOG(WARNING) << "Local session data deleted. Ignoring until next "
-                       << "local navigation event.";
-        } else if (session.has_header()) {
-          // Disassociate only when header node is deleted. For tab node
-          // deletions, the header node will be updated and foreign tab will
-          // get deleted.
-          DisassociateForeignSession(session.session_tag());
-        }
-        continue;
-      case syncer::SyncChange::ACTION_ADD:
-      case syncer::SyncChange::ACTION_UPDATE:
-        if (current_machine_tag() == session.session_tag()) {
-          // We should only ever receive a change to our own machine's session
-          // info if encryption was turned on. In that case, the data is still
-          // the same, so we can ignore.
-          LOG(WARNING) << "Dropping modification to local session.";
-          return syncer::SyncError();
-        }
-        UpdateTrackerWithForeignSession(
-            session, syncer::SyncDataRemote(it->sync_data()).GetModifiedTime());
-        break;
-      default:
-        NOTREACHED() << "Processing sync changes failed, unknown change type.";
-    }
-  }
-
-  content::NotificationService::current()->Notify(
-      chrome::NOTIFICATION_FOREIGN_SESSION_UPDATED,
-      content::Source<Profile>(profile_),
-      content::NotificationService::NoDetails());
-  return syncer::SyncError();
-}
-
-syncer::SyncChange SessionsSyncManager::TombstoneTab(
-    const sync_pb::SessionSpecifics& tab) {
-  if (!tab.has_tab_node_id()) {
-    LOG(WARNING) << "Old sessions node without tab node id; can't tombstone.";
-    return syncer::SyncChange();
-  } else {
-    return syncer::SyncChange(
-        FROM_HERE,
-        SyncChange::ACTION_DELETE,
-        SyncData::CreateLocalDelete(
-            TabNodePool2::TabIdToTag(current_machine_tag(),
-                                     tab.tab_node_id()),
-            syncer::SESSIONS));
-  }
-}
-
-bool SessionsSyncManager::GetAllForeignSessions(
-    std::vector<const SyncedSession*>* sessions) {
-  return session_tracker_.LookupAllForeignSessions(sessions);
-}
-
-bool SessionsSyncManager::InitFromSyncModel(
-    const syncer::SyncDataList& sync_data,
-    syncer::SyncDataList* restored_tabs,
-    syncer::SyncChangeList* new_changes) {
-  bool found_current_header = false;
-  for (syncer::SyncDataList::const_iterator it = sync_data.begin();
-       it != sync_data.end();
-       ++it) {
-    const syncer::SyncData& data = *it;
-    DCHECK(data.GetSpecifics().has_session());
-    const sync_pb::SessionSpecifics& specifics = data.GetSpecifics().session();
-    if (specifics.session_tag().empty() ||
-           (specifics.has_tab() && (!specifics.has_tab_node_id() ||
-                                    !specifics.tab().has_tab_id()))) {
-      syncer::SyncChange tombstone(TombstoneTab(specifics));
-      if (tombstone.IsValid())
-        new_changes->push_back(tombstone);
-    } else if (specifics.session_tag() != current_machine_tag()) {
-      UpdateTrackerWithForeignSession(
-          specifics, syncer::SyncDataRemote(data).GetModifiedTime());
-    } else {
-      // This is previously stored local session information.
-      if (specifics.has_header() && !found_current_header) {
-        // This is our previous header node, reuse it.
-        found_current_header = true;
-        if (specifics.header().has_client_name())
-          current_session_name_ = specifics.header().client_name();
-      } else {
-        if (specifics.has_header() || !specifics.has_tab()) {
-          LOG(WARNING) << "Found more than one session header node with local "
-                       << "tag.";
-          syncer::SyncChange tombstone(TombstoneTab(specifics));
-          if (tombstone.IsValid())
-            new_changes->push_back(tombstone);
-        } else {
-          // This is a valid old tab node, add it to the pool so it can be
-          // reused for reassociation.
-          local_tab_pool_.AddTabNode(specifics.tab_node_id());
-          restored_tabs->push_back(*it);
-        }
-      }
-    }
-  }
-  return found_current_header;
-}
-
-void SessionsSyncManager::UpdateTrackerWithForeignSession(
-    const sync_pb::SessionSpecifics& specifics,
-    const base::Time& modification_time) {
-  std::string foreign_session_tag = specifics.session_tag();
-  DCHECK_NE(foreign_session_tag, current_machine_tag());
-
-  SyncedSession* foreign_session =
-      session_tracker_.GetSession(foreign_session_tag);
-  if (specifics.has_header()) {
-    // Read in the header data for this foreign session.
-    // Header data contains window information and ordered tab id's for each
-    // window.
-
-    // Load (or create) the SyncedSession object for this client.
-    const sync_pb::SessionHeader& header = specifics.header();
-    PopulateSessionHeaderFromSpecifics(header,
-                                       modification_time,
-                                       foreign_session);
-
-    // Reset the tab/window tracking for this session (must do this before
-    // we start calling PutWindowInSession and PutTabInWindow so that all
-    // unused tabs/windows get cleared by the CleanupSession(...) call).
-    session_tracker_.ResetSessionTracking(foreign_session_tag);
-
-    // Process all the windows and their tab information.
-    int num_windows = header.window_size();
-    DVLOG(1) << "Associating " << foreign_session_tag << " with "
-             << num_windows << " windows.";
-
-    for (int i = 0; i < num_windows; ++i) {
-      const sync_pb::SessionWindow& window_s = header.window(i);
-      SessionID::id_type window_id = window_s.window_id();
-      session_tracker_.PutWindowInSession(foreign_session_tag,
-                                          window_id);
-      BuildSyncedSessionFromSpecifics(foreign_session_tag,
-                                      window_s,
-                                      modification_time,
-                                      foreign_session->windows[window_id]);
-    }
-    // Delete any closed windows and unused tabs as necessary.
-    session_tracker_.CleanupSession(foreign_session_tag);
-  } else if (specifics.has_tab()) {
-    const sync_pb::SessionTab& tab_s = specifics.tab();
-    SessionID::id_type tab_id = tab_s.tab_id();
-    SessionTab* tab =
-        session_tracker_.GetTab(foreign_session_tag,
-                                tab_id,
-                                specifics.tab_node_id());
-
-    // Update SessionTab based on protobuf.
-    tab->SetFromSyncData(tab_s, modification_time);
-
-    // If a favicon or favicon urls are present, load the URLs and visit
-    // times into the in-memory favicon cache.
-    RefreshFaviconVisitTimesFromForeignTab(tab_s, modification_time);
-
-    // Update the last modified time.
-    if (foreign_session->modified_time < modification_time)
-      foreign_session->modified_time = modification_time;
-  } else {
-    LOG(WARNING) << "Ignoring foreign session node with missing header/tab "
-                 << "fields and tag " << foreign_session_tag << ".";
-  }
-}
-
-void SessionsSyncManager::InitializeCurrentMachineTag() {
-  DCHECK(current_machine_tag_.empty());
-  std::string persisted_guid;
-  persisted_guid = sync_prefs_.GetSyncSessionsGUID();
-  if (!persisted_guid.empty()) {
-    current_machine_tag_ = persisted_guid;
-    DVLOG(1) << "Restoring persisted session sync guid: " << persisted_guid;
-  } else {
-    current_machine_tag_ = BuildMachineTag(delegate_->GetLocalSyncCacheGUID());
-    DVLOG(1) << "Creating session sync guid: " << current_machine_tag_;
-    sync_prefs_.SetSyncSessionsGUID(current_machine_tag_);
-  }
-
-  local_tab_pool_.SetMachineTag(current_machine_tag_);
-}
-
-// static
-void SessionsSyncManager::PopulateSessionHeaderFromSpecifics(
-    const sync_pb::SessionHeader& header_specifics,
-    base::Time mtime,
-    SyncedSession* session_header) {
-  if (header_specifics.has_client_name())
-    session_header->session_name = header_specifics.client_name();
-  if (header_specifics.has_device_type()) {
-    switch (header_specifics.device_type()) {
-      case sync_pb::SyncEnums_DeviceType_TYPE_WIN:
-        session_header->device_type = SyncedSession::TYPE_WIN;
-        break;
-      case sync_pb::SyncEnums_DeviceType_TYPE_MAC:
-        session_header->device_type = SyncedSession::TYPE_MACOSX;
-        break;
-      case sync_pb::SyncEnums_DeviceType_TYPE_LINUX:
-        session_header->device_type = SyncedSession::TYPE_LINUX;
-        break;
-      case sync_pb::SyncEnums_DeviceType_TYPE_CROS:
-        session_header->device_type = SyncedSession::TYPE_CHROMEOS;
-        break;
-      case sync_pb::SyncEnums_DeviceType_TYPE_PHONE:
-        session_header->device_type = SyncedSession::TYPE_PHONE;
-        break;
-      case sync_pb::SyncEnums_DeviceType_TYPE_TABLET:
-        session_header->device_type = SyncedSession::TYPE_TABLET;
-        break;
-      case sync_pb::SyncEnums_DeviceType_TYPE_OTHER:
-        // Intentionally fall-through
-      default:
-        session_header->device_type = SyncedSession::TYPE_OTHER;
-        break;
-    }
-  }
-  session_header->modified_time = mtime;
-}
-
-// static
-void SessionsSyncManager::BuildSyncedSessionFromSpecifics(
-    const std::string& session_tag,
-    const sync_pb::SessionWindow& specifics,
-    base::Time mtime,
-    SessionWindow* session_window) {
-  if (specifics.has_window_id())
-    session_window->window_id.set_id(specifics.window_id());
-  if (specifics.has_selected_tab_index())
-    session_window->selected_tab_index = specifics.selected_tab_index();
-  if (specifics.has_browser_type()) {
-    if (specifics.browser_type() ==
-        sync_pb::SessionWindow_BrowserType_TYPE_TABBED) {
-      session_window->type = 1;
-    } else {
-      session_window->type = 2;
-    }
-  }
-  session_window->timestamp = mtime;
-  session_window->tabs.resize(specifics.tab_size(), NULL);
-  for (int i = 0; i < specifics.tab_size(); i++) {
-    SessionID::id_type tab_id = specifics.tab(i);
-    session_tracker_.PutTabInWindow(session_tag,
-                                    session_window->window_id.id(),
-                                    tab_id,
-                                    i);
-  }
-}
-
-void SessionsSyncManager::RefreshFaviconVisitTimesFromForeignTab(
-    const sync_pb::SessionTab& tab, const base::Time& modification_time) {
-  // First go through and iterate over all the navigations, checking if any
-  // have valid favicon urls.
-  for (int i = 0; i < tab.navigation_size(); ++i) {
-    if (!tab.navigation(i).favicon_url().empty()) {
-      const std::string& page_url = tab.navigation(i).virtual_url();
-      const std::string& favicon_url = tab.navigation(i).favicon_url();
-      favicon_cache_.OnReceivedSyncFavicon(GURL(page_url),
-                                           GURL(favicon_url),
-                                           std::string(),
-                                           syncer::TimeToProtoTime(
-                                               modification_time));
-    }
-  }
-}
-
-bool SessionsSyncManager::GetSyncedFaviconForPageURL(
-    const std::string& page_url,
-    scoped_refptr<base::RefCountedMemory>* favicon_png) const {
-  return favicon_cache_.GetSyncedFaviconForPageURL(GURL(page_url), favicon_png);
-}
-
-void SessionsSyncManager::DeleteForeignSession(const std::string& tag) {
-  syncer::SyncChangeList changes;
-  DeleteForeignSessionInternal(tag, &changes);
-  sync_processor_->ProcessSyncChanges(FROM_HERE, changes);
-}
-
-void SessionsSyncManager::DeleteForeignSessionInternal(
-    const std::string& tag, syncer::SyncChangeList* change_output) {
- if (tag == current_machine_tag()) {
-    LOG(ERROR) << "Attempting to delete local session. This is not currently "
-               << "supported.";
-    return;
-  }
-
-  std::set<int> tab_node_ids_to_delete;
-  session_tracker_.LookupTabNodeIds(tag, &tab_node_ids_to_delete);
-  if (!DisassociateForeignSession(tag)) {
-    // We don't have any data for this session, our work here is done!
-    return;
-  }
-
-  // Prepare deletes for the meta-node as well as individual tab nodes.
-  change_output->push_back(syncer::SyncChange(
-      FROM_HERE,
-      SyncChange::ACTION_DELETE,
-      SyncData::CreateLocalDelete(tag, syncer::SESSIONS)));
-
-  for (std::set<int>::const_iterator it = tab_node_ids_to_delete.begin();
-       it != tab_node_ids_to_delete.end();
-       ++it) {
-    change_output->push_back(syncer::SyncChange(
-        FROM_HERE,
-        SyncChange::ACTION_DELETE,
-        SyncData::CreateLocalDelete(TabNodePool2::TabIdToTag(tag, *it),
-                                    syncer::SESSIONS)));
-  }
-  content::NotificationService::current()->Notify(
-      chrome::NOTIFICATION_FOREIGN_SESSION_UPDATED,
-      content::Source<Profile>(profile_),
-      content::NotificationService::NoDetails());
-}
-
-bool SessionsSyncManager::DisassociateForeignSession(
-    const std::string& foreign_session_tag) {
-  if (foreign_session_tag == current_machine_tag()) {
-    DVLOG(1) << "Local session deleted! Doing nothing until a navigation is "
-             << "triggered.";
-    return false;
-  }
-  DVLOG(1) << "Disassociating session " << foreign_session_tag;
-  return session_tracker_.DeleteSession(foreign_session_tag);
-}
-
-// static
-GURL SessionsSyncManager::GetCurrentVirtualURL(
-    const SyncedTabDelegate& tab_delegate) {
-  const int current_index = tab_delegate.GetCurrentEntryIndex();
-  const int pending_index = tab_delegate.GetPendingEntryIndex();
-  const NavigationEntry* current_entry =
-      (current_index == pending_index) ?
-      tab_delegate.GetPendingEntry() :
-      tab_delegate.GetEntryAtIndex(current_index);
-  return current_entry->GetVirtualURL();
-}
-
-// static
-GURL SessionsSyncManager::GetCurrentFaviconURL(
-    const SyncedTabDelegate& tab_delegate) {
-  const int current_index = tab_delegate.GetCurrentEntryIndex();
-  const int pending_index = tab_delegate.GetPendingEntryIndex();
-  const NavigationEntry* current_entry =
-      (current_index == pending_index) ?
-      tab_delegate.GetPendingEntry() :
-      tab_delegate.GetEntryAtIndex(current_index);
-  return (current_entry->GetFavicon().valid ?
-          current_entry->GetFavicon().url :
-          GURL());
-}
-
-bool SessionsSyncManager::GetForeignSession(
-    const std::string& tag,
-    std::vector<const SessionWindow*>* windows) {
-  return session_tracker_.LookupSessionWindows(tag, windows);
-}
-
-bool SessionsSyncManager::GetForeignTab(
-    const std::string& tag,
-    const SessionID::id_type tab_id,
-    const SessionTab** tab) {
-  const SessionTab* synced_tab = NULL;
-  bool success = session_tracker_.LookupSessionTab(tag,
-                                                   tab_id,
-                                                   &synced_tab);
-  if (success)
-    *tab = synced_tab;
-  return success;
-}
-
-void SessionsSyncManager::LocalTabDelegateToSpecifics(
-    const SyncedTabDelegate& tab_delegate,
-    sync_pb::SessionSpecifics* specifics) {
-  SessionTab* session_tab = NULL;
-  session_tab =
-      session_tracker_.GetTab(current_machine_tag(),
-                              tab_delegate.GetSessionId(),
-                              tab_delegate.GetSyncId());
-  SetSessionTabFromDelegate(tab_delegate, base::Time::Now(), session_tab);
-  sync_pb::SessionTab tab_s = session_tab->ToSyncData();
-  specifics->set_session_tag(current_machine_tag_);
-  specifics->set_tab_node_id(tab_delegate.GetSyncId());
-  specifics->mutable_tab()->CopyFrom(tab_s);
-}
-
-void SessionsSyncManager::AssociateRestoredPlaceholderTab(
-    const SyncedTabDelegate& tab_delegate,
-    SessionID::id_type new_tab_id,
-    const syncer::SyncDataList& restored_tabs,
-    syncer::SyncChangeList* change_output) {
-  DCHECK_NE(tab_delegate.GetSyncId(), TabNodePool2::kInvalidTabNodeID);
-  // Rewrite the tab using |restored_tabs| to retrieve the specifics.
-  if (restored_tabs.empty()) {
-    DLOG(WARNING) << "Can't Update tab ID.";
-    return;
-  }
-
-  for (syncer::SyncDataList::const_iterator it = restored_tabs.begin();
-       it != restored_tabs.end();
-       ++it) {
-    if (it->GetSpecifics().session().tab_node_id() !=
-        tab_delegate.GetSyncId()) {
-      continue;
-    }
-
-    sync_pb::EntitySpecifics entity;
-    sync_pb::SessionSpecifics* specifics = entity.mutable_session();
-    specifics->CopyFrom(it->GetSpecifics().session());
-    DCHECK(specifics->has_tab());
-
-    // Update tab node pool with the new association.
-    local_tab_pool_.ReassociateTabNode(tab_delegate.GetSyncId(),
-                                       new_tab_id);
-    TabLink* tab_link = new TabLink(tab_delegate.GetSyncId(),
-                                    &tab_delegate);
-    local_tab_map_[new_tab_id] = make_linked_ptr<TabLink>(tab_link);
-
-    if (specifics->tab().tab_id() == new_tab_id)
-      return;
-
-    // The tab_id changed (e.g due to session restore), so update sync.
-    specifics->mutable_tab()->set_tab_id(new_tab_id);
-    syncer::SyncData data = syncer::SyncData::CreateLocalData(
-        TabNodePool2::TabIdToTag(current_machine_tag_,
-                                 specifics->tab_node_id()),
-        current_session_name_,
-        entity);
-    change_output->push_back(syncer::SyncChange(
-        FROM_HERE, syncer::SyncChange::ACTION_UPDATE, data));
-    return;
-  }
-}
-
-// static.
-void SessionsSyncManager::SetSessionTabFromDelegate(
-      const SyncedTabDelegate& tab_delegate,
-      base::Time mtime,
-      SessionTab* session_tab) {
-  DCHECK(session_tab);
-  session_tab->window_id.set_id(tab_delegate.GetWindowId());
-  session_tab->tab_id.set_id(tab_delegate.GetSessionId());
-  session_tab->tab_visual_index = 0;
-  session_tab->current_navigation_index = tab_delegate.GetCurrentEntryIndex();
-  session_tab->pinned = tab_delegate.IsPinned();
-  session_tab->extension_app_id = tab_delegate.GetExtensionAppId();
-  session_tab->user_agent_override.clear();
-  session_tab->timestamp = mtime;
-  const int current_index = tab_delegate.GetCurrentEntryIndex();
-  const int pending_index = tab_delegate.GetPendingEntryIndex();
-  const int min_index = std::max(0, current_index - kMaxSyncNavigationCount);
-  const int max_index = std::min(current_index + kMaxSyncNavigationCount,
-                                 tab_delegate.GetEntryCount());
-  bool is_managed = tab_delegate.ProfileIsManaged();
-  session_tab->navigations.clear();
-
-#if !defined(OS_ANDROID)
-  // For getting navigation time in network time.
-  NavigationTimeHelper* nav_time_helper =
-      tab_delegate.HasWebContents() ?
-          NavigationTimeHelper::FromWebContents(tab_delegate.GetWebContents()) :
-          NULL;
-#endif
-
-  for (int i = min_index; i < max_index; ++i) {
-    const NavigationEntry* entry = (i == pending_index) ?
-        tab_delegate.GetPendingEntry() : tab_delegate.GetEntryAtIndex(i);
-    DCHECK(entry);
-    if (!entry->GetVirtualURL().is_valid())
-      continue;
-
-    scoped_ptr<content::NavigationEntry> network_time_entry(
-        content::NavigationEntry::Create(*entry));
-#if !defined(OS_ANDROID)
-    if (nav_time_helper) {
-      network_time_entry->SetTimestamp(
-          nav_time_helper->GetNavigationTime(entry));
-    }
-#endif
-
-    session_tab->navigations.push_back(
-        SerializedNavigationEntry::FromNavigationEntry(i, *network_time_entry));
-    if (is_managed) {
-      session_tab->navigations.back().set_blocked_state(
-          SerializedNavigationEntry::STATE_ALLOWED);
-    }
-  }
-
-  if (is_managed) {
-    const std::vector<const NavigationEntry*>& blocked_navigations =
-        *tab_delegate.GetBlockedNavigations();
-    int offset = session_tab->navigations.size();
-    for (size_t i = 0; i < blocked_navigations.size(); ++i) {
-      session_tab->navigations.push_back(
-          SerializedNavigationEntry::FromNavigationEntry(
-              i + offset, *blocked_navigations[i]));
-      session_tab->navigations.back().set_blocked_state(
-          SerializedNavigationEntry::STATE_BLOCKED);
-      // TODO(bauerb): Add categories
-    }
-  }
-  session_tab->session_storage_persistent_id.clear();
-}
-
-FaviconCache* SessionsSyncManager::GetFaviconCache() {
-  return &favicon_cache_;
-}
-
-void SessionsSyncManager::DoGarbageCollection() {
-  std::vector<const SyncedSession*> sessions;
-  if (!GetAllForeignSessions(&sessions))
-    return;  // No foreign sessions.
-
-  // Iterate through all the sessions and delete any with age older than
-  // |stale_session_threshold_days_|.
-  syncer::SyncChangeList changes;
-  for (std::vector<const SyncedSession*>::const_iterator iter =
-           sessions.begin(); iter != sessions.end(); ++iter) {
-    const SyncedSession* session = *iter;
-    int session_age_in_days =
-        (base::Time::Now() - session->modified_time).InDays();
-    std::string session_tag = session->session_tag;
-    if (session_age_in_days > 0 &&  // If false, local clock is not trustworty.
-        static_cast<size_t>(session_age_in_days) >
-            stale_session_threshold_days_) {
-      DVLOG(1) << "Found stale session " << session_tag
-               << " with age " << session_age_in_days << ", deleting.";
-      DeleteForeignSessionInternal(session_tag, &changes);
-    }
-  }
-
-  if (!changes.empty())
-    sync_processor_->ProcessSyncChanges(FROM_HERE, changes);
-}
-
-};  // namespace browser_sync
diff --git a/chrome/browser/sync/sessions2/sessions_sync_manager.h b/chrome/browser/sync/sessions2/sessions_sync_manager.h
deleted file mode 100644
index 1c415a6..0000000
--- a/chrome/browser/sync/sessions2/sessions_sync_manager.h
+++ /dev/null
@@ -1,381 +0,0 @@
-// Copyright 2013 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 CHROME_BROWSER_SYNC_SESSIONS2_SESSIONS_SYNC_MANAGER_H_
-#define CHROME_BROWSER_SYNC_SESSIONS2_SESSIONS_SYNC_MANAGER_H_
-
-#include <map>
-#include <set>
-#include <string>
-#include <vector>
-
-#include "base/basictypes.h"
-#include "base/gtest_prod_util.h"
-#include "base/memory/scoped_vector.h"
-#include "base/memory/weak_ptr.h"
-#include "base/time/time.h"
-#include "chrome/browser/sessions/session_id.h"
-#include "chrome/browser/sessions/session_types.h"
-#include "chrome/browser/sync/glue/device_info.h"
-#include "chrome/browser/sync/glue/favicon_cache.h"
-#include "chrome/browser/sync/glue/synced_session.h"
-#include "chrome/browser/sync/glue/synced_session_tracker.h"
-#include "chrome/browser/sync/open_tabs_ui_delegate.h"
-#include "chrome/browser/sync/sessions2/tab_node_pool2.h"
-#include "components/sync_driver/sync_prefs.h"
-#include "sync/api/syncable_service.h"
-
-class Profile;
-
-namespace syncer {
-class SyncErrorFactory;
-}
-
-namespace sync_pb {
-class SessionHeader;
-class SessionSpecifics;
-class SessionTab;
-class SessionWindow;
-class TabNavigation;
-}  // namespace sync_pb
-
-namespace browser_sync {
-
-class DataTypeErrorHandler;
-class SyncedTabDelegate;
-class SyncedWindowDelegate;
-class SyncedWindowDelegatesGetter;
-
-// An interface defining the ways in which local open tab events can interact
-// with session sync.  All local tab events flow to sync via this interface.
-// In that way it is analogous to sync changes flowing to the local model
-// via ProcessSyncChanges, just with a more granular breakdown.
-class LocalSessionEventHandler {
- public:
-  // A local navigation event took place that affects the synced session
-  // for this instance of Chrome.
-  virtual void OnLocalTabModified(SyncedTabDelegate* modified_tab) = 0;
-
-  // A local navigation occurred that triggered updates to favicon data for
-  // each URL in |updated_page_urls|.  This is routed through Sessions Sync so
-  // that we can filter (exclude) favicon updates for pages that aren't
-  // currently part of the set of local open tabs, and pass relevant updates
-  // on to FaviconCache for out-of-band favicon syncing.
-  virtual void OnFaviconPageUrlsUpdated(
-      const std::set<GURL>& updated_page_urls) = 0;
-};
-
-// The LocalSessionEventRouter is responsible for hooking itself up to various
-// notification sources in the browser process and forwarding relevant
-// events to a handler as defined in the LocalSessionEventHandler contract.
-class LocalSessionEventRouter {
- public:
-  virtual ~LocalSessionEventRouter();
-  virtual void StartRoutingTo(LocalSessionEventHandler* handler) = 0;
-  virtual void Stop() = 0;
-};
-
-// Contains all logic for associating the Chrome sessions model and
-// the sync sessions model.
-class SessionsSyncManager : public syncer::SyncableService,
-                            public OpenTabsUIDelegate,
-                            public LocalSessionEventHandler {
- public:
-  // Isolates SessionsSyncManager from having to depend on sync internals.
-  class SyncInternalApiDelegate {
-   public:
-    virtual ~SyncInternalApiDelegate() {}
-
-    // Returns sync's representation of the local device info.
-    // Return value is an empty scoped_ptr if the device info is unavailable.
-    virtual scoped_ptr<DeviceInfo> GetLocalDeviceInfo() const = 0;
-
-    // Used for creation of the machine tag for this local session.
-    virtual std::string GetLocalSyncCacheGUID() const = 0;
-  };
-
-  SessionsSyncManager(Profile* profile,
-                      SyncInternalApiDelegate* delegate,
-                      scoped_ptr<LocalSessionEventRouter> router);
-  virtual ~SessionsSyncManager();
-
-  // syncer::SyncableService implementation.
-  virtual syncer::SyncMergeResult MergeDataAndStartSyncing(
-      syncer::ModelType type,
-      const syncer::SyncDataList& initial_sync_data,
-      scoped_ptr<syncer::SyncChangeProcessor> sync_processor,
-      scoped_ptr<syncer::SyncErrorFactory> error_handler) OVERRIDE;
-  virtual void StopSyncing(syncer::ModelType type) OVERRIDE;
-  virtual syncer::SyncDataList GetAllSyncData(
-      syncer::ModelType type) const OVERRIDE;
-  virtual syncer::SyncError ProcessSyncChanges(
-      const tracked_objects::Location& from_here,
-      const syncer::SyncChangeList& change_list) OVERRIDE;
-
-  // OpenTabsUIDelegate implementation.
-  virtual bool GetSyncedFaviconForPageURL(
-      const std::string& pageurl,
-      scoped_refptr<base::RefCountedMemory>* favicon_png) const OVERRIDE;
-  virtual bool GetAllForeignSessions(
-      std::vector<const SyncedSession*>* sessions) OVERRIDE;
-  virtual bool GetForeignSession(
-      const std::string& tag,
-      std::vector<const SessionWindow*>* windows) OVERRIDE;
-  virtual bool GetForeignTab(const std::string& tag,
-                             const SessionID::id_type tab_id,
-                             const SessionTab** tab) OVERRIDE;
-  virtual void DeleteForeignSession(const std::string& tag) OVERRIDE;
-  virtual bool GetLocalSession(const SyncedSession* * local_session) OVERRIDE;
-
-  // LocalSessionEventHandler implementation.
-  virtual void OnLocalTabModified(SyncedTabDelegate* modified_tab) OVERRIDE;
-  virtual void OnFaviconPageUrlsUpdated(
-      const std::set<GURL>& updated_favicon_page_urls) OVERRIDE;
-
-  // Returns the tag used to uniquely identify this machine's session in the
-  // sync model.
-  const std::string& current_machine_tag() const {
-    DCHECK(!current_machine_tag_.empty());
-    return current_machine_tag_;
-  }
-
-  // Return the virtual URL of the current tab, even if it's pending.
-  static GURL GetCurrentVirtualURL(const SyncedTabDelegate& tab_delegate);
-
-  // Return the favicon url of the current tab, even if it's pending.
-  static GURL GetCurrentFaviconURL(const SyncedTabDelegate& tab_delegate);
-
-  FaviconCache* GetFaviconCache();
-
-  // Triggers garbage collection of stale sessions (as defined by
-  // |stale_session_threshold_days_|). This is called automatically every
-  // time we start up (via AssociateModels) and when new sessions data is
-  // downloaded (sync cycles complete).
-  void DoGarbageCollection();
-
- private:
-  // Keep all the links to local tab data in one place. A tab_node_id and tab
-  // must be passed at creation. The tab_node_id is not mutable, although
-  // all other fields are.
-  class TabLink {
-   public:
-    TabLink(int tab_node_id, const SyncedTabDelegate* tab)
-      : tab_node_id_(tab_node_id),
-        tab_(tab) {}
-
-    void set_tab(const SyncedTabDelegate* tab) { tab_ = tab; }
-    void set_url(const GURL& url) { url_ = url; }
-
-    int tab_node_id() const { return tab_node_id_; }
-    const SyncedTabDelegate* tab() const { return tab_; }
-    const GURL& url() const { return url_; }
-
-   private:
-    // The id for the sync node this tab is stored in.
-    const int tab_node_id_;
-
-    // The tab object itself.
-    const SyncedTabDelegate* tab_;
-
-    // The currently visible url of the tab (used for syncing favicons).
-    GURL url_;
-
-    DISALLOW_COPY_AND_ASSIGN(TabLink);
-  };
-
-  // Container for accessing local tab data by tab id.
-  typedef std::map<SessionID::id_type, linked_ptr<TabLink> > TabLinksMap;
-
-  FRIEND_TEST_ALL_PREFIXES(SessionsSyncManagerTest, PopulateSessionHeader);
-  FRIEND_TEST_ALL_PREFIXES(SessionsSyncManagerTest, PopulateSessionWindow);
-  FRIEND_TEST_ALL_PREFIXES(SessionsSyncManagerTest, ValidTabs);
-  FRIEND_TEST_ALL_PREFIXES(SessionsSyncManagerTest, SetSessionTabFromDelegate);
-  FRIEND_TEST_ALL_PREFIXES(SessionsSyncManagerTest, BlockedNavigations);
-  FRIEND_TEST_ALL_PREFIXES(SessionsSyncManagerTest, DeleteForeignSession);
-  FRIEND_TEST_ALL_PREFIXES(SessionsSyncManagerTest,
-                           SaveUnassociatedNodesForReassociation);
-  FRIEND_TEST_ALL_PREFIXES(SessionsSyncManagerTest, MergeDeletesCorruptNode);
-  FRIEND_TEST_ALL_PREFIXES(SessionsSyncManagerTest,
-                           MergeLocalSessionExistingTabs);
-  FRIEND_TEST_ALL_PREFIXES(SessionsSyncManagerTest,
-                           CheckPrerenderedWebContentsSwap);
-  FRIEND_TEST_ALL_PREFIXES(SessionsSyncManagerTest,
-                           AssociateWindowsDontReloadTabs);
-  FRIEND_TEST_ALL_PREFIXES(SessionsSyncManagerTest,
-                           SwappedOutOnRestore);
-  FRIEND_TEST_ALL_PREFIXES(SessionsSyncManagerTest,
-                           ProcessRemoteDeleteOfLocalSession);
-
-  void InitializeCurrentMachineTag();
-
-  // Load and add window or tab data for a foreign session to our internal
-  // tracking.
-  void UpdateTrackerWithForeignSession(
-      const sync_pb::SessionSpecifics& specifics,
-      const base::Time& modification_time);
-
-  // Returns true if |sync_data| contained a header node for the current
-  // machine, false otherwise. |restored_tabs| is a filtered tab-only
-  // subset of |sync_data| returned by this function for convenience.
-  // |new_changes| is a link to the SyncChange pipeline that exists in the
-  // caller's context. This function will append necessary changes for
-  // processing later.
-  bool InitFromSyncModel(const syncer::SyncDataList& sync_data,
-                         syncer::SyncDataList* restored_tabs,
-                         syncer::SyncChangeList* new_changes);
-
-  // Helper to construct a deletion SyncChange for a *tab node*.
-  // Caller should check IsValid() on the returned change, as it's possible
-  // this node could not be deleted.
-  syncer::SyncChange TombstoneTab(const sync_pb::SessionSpecifics& tab);
-
-  // Helper method to load the favicon data from the tab specifics. If the
-  // favicon is valid, stores the favicon data into the favicon cache.
-  void RefreshFaviconVisitTimesFromForeignTab(
-      const sync_pb::SessionTab& tab, const base::Time& modification_time);
-
-  // Removes a foreign session from our internal bookkeeping.
-  // Returns true if the session was found and deleted, false if no data was
-  // found for that session.  This will *NOT* trigger sync deletions. See
-  // DeleteForeignSession below.
-  bool DisassociateForeignSession(const std::string& foreign_session_tag);
-
-  // Delete a foreign session and all its sync data.
-  // |change_output| *must* be provided as a link to the SyncChange pipeline
-  // that exists in the caller's context. This function will append necessary
-  // changes for processing later.
-  void DeleteForeignSessionInternal(const std::string& tag,
-                                    syncer::SyncChangeList* change_output);
-
-  // Used to populate a session header from the session specifics header
-  // provided.
-  static void PopulateSessionHeaderFromSpecifics(
-      const sync_pb::SessionHeader& header_specifics,
-      base::Time mtime,
-      SyncedSession* session_header);
-
-  // Builds |session_window| from the session specifics window
-  // provided and updates the SessionTracker with foreign session data created.
-  void BuildSyncedSessionFromSpecifics(
-      const std::string& session_tag,
-      const sync_pb::SessionWindow& specifics,
-      base::Time mtime,
-      SessionWindow* session_window);
-
-  // Resync local window information. Updates the local sessions header node
-  // with the status of open windows and the order of tabs they contain. Should
-  // only be called for changes that affect a window, not a change within a
-  // single tab.
-  //
-  // RELOAD_TABS will additionally cause a resync of all tabs (same as calling
-  // AssociateTabs with a vector of all tabs).
-  //
-  // |restored_tabs| is a filtered tab-only subset of initial sync data, if
-  // available (during MergeDataAndStartSyncing). It can be used to obtain
-  // baseline SessionSpecifics for tabs we can't fully associate any other
-  // way because they don't yet have a WebContents.
-  //
-  // Returns: false if the local session's sync nodes were deleted and
-  // reassociation is necessary, true otherwise.
-  //
-  // |change_output| *must* be provided as a link to the SyncChange pipeline
-  // that exists in the caller's context. This function will append necessary
-  // changes for processing later.
-  enum ReloadTabsOption {
-    RELOAD_TABS,
-    DONT_RELOAD_TABS
-  };
-  void AssociateWindows(ReloadTabsOption option,
-                        const syncer::SyncDataList& restored_tabs,
-                        syncer::SyncChangeList* change_output);
-
-  // Loads and reassociates the local tabs referenced in |tabs|.
-  // |change_output| *must* be provided as a link to the SyncChange pipeline
-  // that exists in the caller's context. This function will append necessary
-  // changes for processing later.
-  void AssociateTab(SyncedTabDelegate* const tab,
-                    syncer::SyncChangeList* change_output);
-
-  // Set |session_tab| from |tab_delegate| and |mtime|.
-  static void SetSessionTabFromDelegate(
-      const SyncedTabDelegate& tab_delegate,
-      base::Time mtime,
-      SessionTab* session_tab);
-
-  // Populates |specifics| based on the data in |tab_delegate|.
-  void LocalTabDelegateToSpecifics(const SyncedTabDelegate& tab_delegate,
-                                   sync_pb::SessionSpecifics* specifics);
-
-  // It's possible that when we associate windows, tabs aren't all loaded
-  // into memory yet (e.g on android) and we don't have a WebContents. In this
-  // case we can't do a full association, but we still want to update tab IDs
-  // as they may have changed after a session was restored.  This method
-  // compares new_tab_id against the previously persisted tab ID (from
-  // our TabNodePool) and updates it if it differs.
-  // |restored_tabs| is a filtered tab-only subset of initial sync data, if
-  // available (during MergeDataAndStartSyncing). It can be used to obtain
-  // baseline SessionSpecifics for tabs we can't fully associate any other
-  // way because they don't yet have a WebContents.
-  // TODO(tim): Bug 98892. We should be able to test this for this on android
-  // even though we didn't have tests for old API-based sessions sync.
-  void AssociateRestoredPlaceholderTab(
-      const SyncedTabDelegate& tab_delegate,
-      SessionID::id_type new_tab_id,
-      const syncer::SyncDataList& restored_tabs,
-      syncer::SyncChangeList* change_output);
-
-  // Stops and re-starts syncing to rebuild association mappings.
-  // See |local_tab_pool_out_of_sync_|.
-  void RebuildAssociations();
-
-  // Mapping of current open (local) tabs to their sync identifiers.
-  TabLinksMap local_tab_map_;
-
-  SyncedSessionTracker session_tracker_;
-  FaviconCache favicon_cache_;
-
-  // Pool of used/available sync nodes associated with local tabs.
-  TabNodePool2 local_tab_pool_;
-
-  // Tracks whether our local representation of which sync nodes map to what
-  // tabs (belonging to the current local session) is inconsistent.  This can
-  // happen if a foreign client deems our session as "stale" and decides to
-  // delete it. Rather than respond by bullishly re-creating our nodes
-  // immediately, which could lead to ping-pong sequences, we give the benefit
-  // of the doubt and hold off until another local navigation occurs, which
-  // proves that we are still relevant.
-  bool local_tab_pool_out_of_sync_;
-
-  sync_driver::SyncPrefs sync_prefs_;
-
-  const Profile* const profile_;
-
-  scoped_ptr<syncer::SyncErrorFactory> error_handler_;
-  scoped_ptr<syncer::SyncChangeProcessor> sync_processor_;
-
-  const SyncInternalApiDelegate* const delegate_;
-
-  // Unique client tag.
-  std::string current_machine_tag_;
-
-  // User-visible machine name.
-  std::string current_session_name_;
-
-  // SyncID for the sync node containing all the window information for this
-  // client.
-  int local_session_header_node_id_;
-
-  // Number of days without activity after which we consider a session to be
-  // stale and a candidate for garbage collection.
-  size_t stale_session_threshold_days_;
-
-  scoped_ptr<LocalSessionEventRouter> local_event_router_;
-  scoped_ptr<SyncedWindowDelegatesGetter> synced_window_getter_;
-
-  DISALLOW_COPY_AND_ASSIGN(SessionsSyncManager);
-};
-
-}  // namespace browser_sync
-
-#endif  // CHROME_BROWSER_SYNC_SESSIONS2_SESSIONS_SYNC_MANAGER_H_
diff --git a/chrome/browser/sync/sessions2/sessions_sync_manager_unittest.cc b/chrome/browser/sync/sessions2/sessions_sync_manager_unittest.cc
deleted file mode 100644
index 1fe7f96..0000000
--- a/chrome/browser/sync/sessions2/sessions_sync_manager_unittest.cc
+++ /dev/null
@@ -1,1822 +0,0 @@
-// Copyright 2013 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 "chrome/browser/sync/sessions2/sessions_sync_manager.h"
-
-#include "base/strings/string_util.h"
-#include "chrome/browser/chrome_notification_types.h"
-#include "chrome/browser/sessions/session_id.h"
-#include "chrome/browser/sessions/session_tab_helper.h"
-#include "chrome/browser/sessions/session_types.h"
-#include "chrome/browser/sync/glue/device_info.h"
-#include "chrome/browser/sync/glue/session_sync_test_helper.h"
-#include "chrome/browser/sync/glue/synced_tab_delegate.h"
-#include "chrome/browser/sync/glue/synced_window_delegate.h"
-#include "chrome/browser/sync/sessions2/notification_service_sessions_router.h"
-#include "chrome/browser/sync/sessions2/sessions_util.h"
-#include "chrome/browser/sync/sessions2/synced_window_delegates_getter.h"
-#include "chrome/browser/ui/sync/tab_contents_synced_tab_delegate.h"
-#include "chrome/browser/ui/tabs/tab_strip_model.h"
-#include "chrome/test/base/browser_with_test_window_test.h"
-#include "components/sessions/serialized_navigation_entry_test_helper.h"
-#include "content/public/browser/navigation_entry.h"
-#include "content/public/browser/notification_details.h"
-#include "content/public/browser/notification_service.h"
-#include "content/public/browser/notification_source.h"
-#include "content/public/browser/web_contents.h"
-#include "sync/api/attachments/attachment_id.h"
-#include "sync/api/attachments/attachment_service_proxy_for_test.h"
-#include "sync/api/sync_error_factory_mock.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-using content::WebContents;
-using sessions::SerializedNavigationEntry;
-using sessions::SerializedNavigationEntryTestHelper;
-using syncer::SyncChange;
-using syncer::SyncData;
-
-namespace browser_sync {
-
-namespace {
-
-class SyncedWindowDelegateOverride : public SyncedWindowDelegate {
- public:
-  explicit SyncedWindowDelegateOverride(SyncedWindowDelegate* wrapped)
-      : wrapped_(wrapped) {
-  }
-  virtual ~SyncedWindowDelegateOverride() {}
-
-  virtual bool HasWindow() const OVERRIDE {
-    return wrapped_->HasWindow();
-  }
-
-  virtual SessionID::id_type GetSessionId() const OVERRIDE {
-    return wrapped_->GetSessionId();
-  }
-
-  virtual int GetTabCount() const OVERRIDE {
-    return wrapped_->GetTabCount();
-  }
-
-  virtual int GetActiveIndex() const OVERRIDE {
-    return wrapped_->GetActiveIndex();
-  }
-
-  virtual bool IsApp() const OVERRIDE {
-    return wrapped_->IsApp();
-  }
-
-  virtual bool IsTypeTabbed() const OVERRIDE {
-    return wrapped_->IsTypeTabbed();
-  }
-
-  virtual bool IsTypePopup() const OVERRIDE {
-    return wrapped_->IsTypePopup();
-  }
-
-  virtual bool IsTabPinned(const SyncedTabDelegate* tab) const OVERRIDE {
-    return wrapped_->IsTabPinned(tab);
-  }
-
-  virtual SyncedTabDelegate* GetTabAt(int index) const OVERRIDE {
-    if (tab_overrides_.find(index) != tab_overrides_.end())
-      return tab_overrides_.find(index)->second;
-
-    return wrapped_->GetTabAt(index);
-  }
-
-  void OverrideTabAt(int index,
-                     SyncedTabDelegate* delegate,
-                     SessionID::id_type tab_id) {
-    tab_overrides_[index] = delegate;
-    tab_id_overrides_[index] = tab_id;
-  }
-
-  virtual SessionID::id_type GetTabIdAt(int index) const OVERRIDE {
-    if (tab_id_overrides_.find(index) != tab_id_overrides_.end())
-      return tab_id_overrides_.find(index)->second;
-    return wrapped_->GetTabIdAt(index);
-  }
-
-  virtual bool IsSessionRestoreInProgress() const OVERRIDE {
-    return wrapped_->IsSessionRestoreInProgress();
-  }
-
- private:
-  std::map<int, SyncedTabDelegate*> tab_overrides_;
-  std::map<int, SessionID::id_type> tab_id_overrides_;
-  SyncedWindowDelegate* wrapped_;
-};
-
-class TestSyncedWindowDelegatesGetter : public SyncedWindowDelegatesGetter {
- public:
-  TestSyncedWindowDelegatesGetter(
-      const std::set<SyncedWindowDelegate*>& delegates)
-      : delegates_(delegates) {}
-
-  virtual const std::set<SyncedWindowDelegate*> GetSyncedWindowDelegates()
-      OVERRIDE {
-    return delegates_;
-  }
- private:
-  const std::set<SyncedWindowDelegate*> delegates_;
-};
-
-class TestSyncProcessorStub : public syncer::SyncChangeProcessor {
- public:
-  explicit TestSyncProcessorStub(syncer::SyncChangeList* output)
-      : output_(output) {}
-  virtual syncer::SyncError ProcessSyncChanges(
-      const tracked_objects::Location& from_here,
-      const syncer::SyncChangeList& change_list) OVERRIDE {
-    if (error_.IsSet()) {
-      syncer::SyncError error = error_;
-      error_ = syncer::SyncError();
-      return error;
-    }
-
-    if (output_)
-      output_->insert(output_->end(), change_list.begin(), change_list.end());
-
-    return syncer::SyncError();
-  }
-
-  virtual syncer::SyncDataList GetAllSyncData(syncer::ModelType type)
-      const OVERRIDE {
-    return sync_data_to_return_;
-  }
-
-  void FailProcessSyncChangesWith(const syncer::SyncError& error) {
-    error_ = error;
-  }
-
-  void SetSyncDataToReturn(const syncer::SyncDataList& data) {
-    sync_data_to_return_ = data;
-  }
-
- private:
-  syncer::SyncError error_;
-  syncer::SyncChangeList* output_;
-  syncer::SyncDataList sync_data_to_return_;
-};
-
-syncer::SyncChange MakeRemoteChange(
-    int64 id,
-    const sync_pb::SessionSpecifics& specifics,
-    SyncChange::SyncChangeType type) {
-  sync_pb::EntitySpecifics entity;
-  entity.mutable_session()->CopyFrom(specifics);
-  return syncer::SyncChange(
-      FROM_HERE,
-      type,
-      syncer::SyncData::CreateRemoteData(
-          id,
-          entity,
-          base::Time(),
-          syncer::AttachmentIdList(),
-          syncer::AttachmentServiceProxyForTest::Create()));
-}
-
-void AddTabsToChangeList(
-      const std::vector<sync_pb::SessionSpecifics>& batch,
-      SyncChange::SyncChangeType type,
-      syncer::SyncChangeList* change_list) {
-  std::vector<sync_pb::SessionSpecifics>::const_iterator iter;
-  for (iter = batch.begin();
-       iter != batch.end(); ++iter) {
-    sync_pb::EntitySpecifics entity;
-    entity.mutable_session()->CopyFrom(*iter);
-    change_list->push_back(syncer::SyncChange(
-        FROM_HERE,
-        type,
-        syncer::SyncData::CreateRemoteData(
-            iter->tab_node_id(),
-            entity,
-            base::Time(),
-            syncer::AttachmentIdList(),
-            syncer::AttachmentServiceProxyForTest::Create())));
-  }
-}
-
-void AddTabsToSyncDataList(const std::vector<sync_pb::SessionSpecifics> tabs,
-                           syncer::SyncDataList* list) {
-  for (size_t i = 0; i < tabs.size(); i++) {
-    sync_pb::EntitySpecifics entity;
-    entity.mutable_session()->CopyFrom(tabs[i]);
-    list->push_back(SyncData::CreateRemoteData(
-        i + 2,
-        entity,
-        base::Time(),
-        syncer::AttachmentIdList(),
-        syncer::AttachmentServiceProxyForTest::Create()));
-  }
-}
-
-class DummyRouter : public LocalSessionEventRouter {
- public:
-  virtual ~DummyRouter() {}
-  virtual void StartRoutingTo(LocalSessionEventHandler* handler) OVERRIDE {}
-  virtual void Stop() OVERRIDE {}
-};
-
-scoped_ptr<LocalSessionEventRouter> NewDummyRouter() {
-  return scoped_ptr<LocalSessionEventRouter>(new DummyRouter());
-}
-
-}  // namespace
-
-class SessionsSyncManagerTest
-    : public BrowserWithTestWindowTest,
-      public SessionsSyncManager::SyncInternalApiDelegate {
- public:
-  SessionsSyncManagerTest() : test_processor_(NULL) {}
-
-  virtual void SetUp() OVERRIDE {
-    BrowserWithTestWindowTest::SetUp();
-    browser_sync::NotificationServiceSessionsRouter* router(
-        new browser_sync::NotificationServiceSessionsRouter(
-            profile(), syncer::SyncableService::StartSyncFlare()));
-    manager_.reset(new SessionsSyncManager(profile(), this,
-      scoped_ptr<LocalSessionEventRouter>(router)));
-  }
-
-  virtual void TearDown() OVERRIDE {
-    test_processor_ = NULL;
-    helper()->Reset();
-    manager_.reset();
-    BrowserWithTestWindowTest::TearDown();
-  }
-
-  virtual scoped_ptr<DeviceInfo> GetLocalDeviceInfo() const OVERRIDE {
-    return scoped_ptr<DeviceInfo>(
-        new DeviceInfo(GetLocalSyncCacheGUID(),
-                       "Wayne Gretzky's Hacking Box",
-                       "Chromium 10k",
-                       "Chrome 10k",
-                       sync_pb::SyncEnums_DeviceType_TYPE_LINUX));
-  }
-
-  virtual std::string GetLocalSyncCacheGUID() const OVERRIDE {
-    return "cache_guid";
-  }
-
-  SessionsSyncManager* manager() { return manager_.get(); }
-  SessionSyncTestHelper* helper() { return &helper_; }
-
-  void InitWithSyncDataTakeOutput(const syncer::SyncDataList& initial_data,
-                                  syncer::SyncChangeList* output) {
-    test_processor_ = new TestSyncProcessorStub(output);
-    syncer::SyncMergeResult result = manager_->MergeDataAndStartSyncing(
-        syncer::SESSIONS, initial_data,
-        scoped_ptr<syncer::SyncChangeProcessor>(test_processor_),
-        scoped_ptr<syncer::SyncErrorFactory>(
-            new syncer::SyncErrorFactoryMock()));
-    EXPECT_FALSE(result.error().IsSet());
-  }
-
-  void InitWithNoSyncData() {
-    InitWithSyncDataTakeOutput(syncer::SyncDataList(), NULL);
-  }
-
-  void TriggerProcessSyncChangesError() {
-    test_processor_->FailProcessSyncChangesWith(syncer::SyncError(
-        FROM_HERE, syncer::SyncError::DATATYPE_ERROR, "Error",
-        syncer::SESSIONS));
-  }
-
-  void SetSyncData(const syncer::SyncDataList& data) {
-     test_processor_->SetSyncDataToReturn(data);
-  }
-
-  syncer::SyncChangeList* FilterOutLocalHeaderChanges(
-      syncer::SyncChangeList* list) {
-    syncer::SyncChangeList::iterator it = list->begin();
-    bool found = false;
-    while (it != list->end()) {
-      if (syncer::SyncDataLocal(it->sync_data()).GetTag() ==
-          manager_->current_machine_tag()) {
-        EXPECT_TRUE(SyncChange::ACTION_ADD == it->change_type() ||
-                    SyncChange::ACTION_UPDATE == it->change_type());
-        it = list->erase(it);
-        found = true;
-      } else {
-        ++it;
-      }
-    }
-    EXPECT_TRUE(found);
-    return list;
-  }
-
- private:
-  scoped_ptr<SessionsSyncManager> manager_;
-  SessionSyncTestHelper helper_;
-  TestSyncProcessorStub* test_processor_;
-};
-
-// Test that the SyncSessionManager can properly fill in a SessionHeader.
-TEST_F(SessionsSyncManagerTest, PopulateSessionHeader) {
-  sync_pb::SessionHeader header_s;
-  header_s.set_client_name("Client 1");
-  header_s.set_device_type(sync_pb::SyncEnums_DeviceType_TYPE_WIN);
-
-  SyncedSession session;
-  base::Time time = base::Time::Now();
-  SessionsSyncManager::PopulateSessionHeaderFromSpecifics(
-      header_s, time, &session);
-  ASSERT_EQ("Client 1", session.session_name);
-  ASSERT_EQ(SyncedSession::TYPE_WIN, session.device_type);
-  ASSERT_EQ(time, session.modified_time);
-}
-
-// Test translation between protobuf types and chrome session types.
-TEST_F(SessionsSyncManagerTest, PopulateSessionWindow) {
-  sync_pb::SessionWindow window_s;
-  window_s.add_tab(0);
-  window_s.set_browser_type(sync_pb::SessionWindow_BrowserType_TYPE_TABBED);
-  window_s.set_selected_tab_index(1);
-
-  std::string tag = "tag";
-  SyncedSession* session = manager()->session_tracker_.GetSession(tag);
-  manager()->session_tracker_.PutWindowInSession(tag, 0);
-  manager()->BuildSyncedSessionFromSpecifics(
-      tag, window_s, base::Time(), session->windows[0]);
-  ASSERT_EQ(1U, session->windows[0]->tabs.size());
-  ASSERT_EQ(1, session->windows[0]->selected_tab_index);
-  ASSERT_EQ(1, session->windows[0]->type);
-  ASSERT_EQ(1U, manager()->session_tracker_.num_synced_sessions());
-  ASSERT_EQ(1U,
-            manager()->session_tracker_.num_synced_tabs(std::string("tag")));
-}
-
-namespace {
-
-class SyncedTabDelegateFake : public SyncedTabDelegate {
- public:
-  SyncedTabDelegateFake() : current_entry_index_(0),
-                            pending_entry_index_(-1),
-                            is_managed_(false),
-                            sync_id_(-1),
-                            blocked_navigations_(NULL) {}
-  virtual ~SyncedTabDelegateFake() {}
-
-  virtual int GetCurrentEntryIndex() const OVERRIDE {
-    return current_entry_index_;
-  }
-  void set_current_entry_index(int i) {
-    current_entry_index_ = i;
-  }
-
-  virtual content::NavigationEntry* GetEntryAtIndex(int i) const OVERRIDE {
-    const int size = entries_.size();
-    return (size < i + 1) ? NULL : entries_[i];
-  }
-
-  void AppendEntry(content::NavigationEntry* entry) {
-    entries_.push_back(entry);
-  }
-
-  virtual int GetEntryCount() const OVERRIDE {
-    return entries_.size();
-  }
-
-  virtual int GetPendingEntryIndex() const OVERRIDE {
-    return pending_entry_index_;
-  }
-  void set_pending_entry_index(int i) {
-    pending_entry_index_ = i;
-  }
-
-  virtual SessionID::id_type GetWindowId() const OVERRIDE {
-    return SessionID::id_type();
-  }
-
-  virtual SessionID::id_type GetSessionId() const OVERRIDE {
-    return SessionID::id_type();
-  }
-
-  virtual bool IsBeingDestroyed() const OVERRIDE { return false; }
-  virtual Profile* profile() const OVERRIDE { return NULL; }
-  virtual std::string GetExtensionAppId() const OVERRIDE {
-    return std::string();
-  }
-  virtual content::NavigationEntry* GetPendingEntry() const OVERRIDE {
-   return NULL;
-  }
-  virtual content::NavigationEntry* GetActiveEntry() const OVERRIDE {
-   return NULL;
-  }
-  virtual bool ProfileIsManaged() const OVERRIDE {
-   return is_managed_;
-  }
-  void set_is_managed(bool is_managed) { is_managed_ = is_managed; }
-  virtual const std::vector<const content::NavigationEntry*>*
-      GetBlockedNavigations() const OVERRIDE {
-    return blocked_navigations_;
-  }
-  void set_blocked_navigations(
-      std::vector<const content::NavigationEntry*>* navs) {
-    blocked_navigations_ = navs;
-  }
-  virtual bool IsPinned() const OVERRIDE {
-   return false;
-  }
-  virtual bool HasWebContents() const OVERRIDE {
-   return false;
-  }
-  virtual content::WebContents* GetWebContents() const OVERRIDE {
-   return NULL;
-  }
-
-  // Session sync related methods.
-  virtual int GetSyncId() const OVERRIDE {
-   return sync_id_;
-  }
-  virtual void SetSyncId(int sync_id) OVERRIDE {
-    sync_id_ = sync_id;
-  }
-
-  void reset() {
-    current_entry_index_ = 0;
-    pending_entry_index_ = -1;
-    sync_id_ = -1;
-    entries_.clear();
-  }
-
- private:
-   int current_entry_index_;
-   int pending_entry_index_;
-   bool is_managed_;
-   int sync_id_;
-   std::vector<const content::NavigationEntry*>* blocked_navigations_;
-   ScopedVector<content::NavigationEntry> entries_;
-};
-
-}  // namespace
-
-// Test that we exclude tabs with only chrome:// and file:// schemed navigations
-// from ShouldSyncTab(..).
-TEST_F(SessionsSyncManagerTest, ValidTabs) {
-  SyncedTabDelegateFake tab;
-
-  // A null entry shouldn't crash.
-  tab.AppendEntry(NULL);
-  EXPECT_FALSE(sessions_util::ShouldSyncTab(tab));
-  tab.reset();
-
-  // A chrome:// entry isn't valid.
-  content::NavigationEntry* entry(content::NavigationEntry::Create());
-  entry->SetVirtualURL(GURL("chrome://preferences/"));
-  tab.AppendEntry(entry);
-  EXPECT_FALSE(sessions_util::ShouldSyncTab(tab));
-
-
-  // A file:// entry isn't valid, even in addition to another entry.
-  content::NavigationEntry* entry2(content::NavigationEntry::Create());
-  entry2->SetVirtualURL(GURL("file://bla"));
-  tab.AppendEntry(entry2);
-  EXPECT_FALSE(sessions_util::ShouldSyncTab(tab));
-
-  // Add a valid scheme entry to tab, making the tab valid.
-  content::NavigationEntry* entry3(content::NavigationEntry::Create());
-  entry3->SetVirtualURL(GURL("http://www.google.com"));
-  tab.AppendEntry(entry3);
-  EXPECT_FALSE(sessions_util::ShouldSyncTab(tab));
-}
-
-// Make sure GetCurrentVirtualURL() returns the virtual URL of the pending
-// entry if the current entry is pending.
-TEST_F(SessionsSyncManagerTest, GetCurrentVirtualURLPending) {
-  SyncedTabDelegateFake tab;
-  content::NavigationEntry* entry(content::NavigationEntry::Create());
-  entry->SetVirtualURL(GURL("http://www.google.com"));
-  tab.AppendEntry(entry);
-  EXPECT_EQ(entry->GetVirtualURL(), manager()->GetCurrentVirtualURL(tab));
-}
-
-// Make sure GetCurrentVirtualURL() returns the virtual URL of the current
-// entry if the current entry is non-pending.
-TEST_F(SessionsSyncManagerTest, GetCurrentVirtualURLNonPending) {
-  SyncedTabDelegateFake tab;
-  content::NavigationEntry* entry(content::NavigationEntry::Create());
-  entry->SetVirtualURL(GURL("http://www.google.com"));
-  tab.AppendEntry(entry);
-  EXPECT_EQ(entry->GetVirtualURL(), manager()->GetCurrentVirtualURL(tab));
-}
-
-static const base::Time kTime1 = base::Time::FromInternalValue(100);
-static const base::Time kTime2 = base::Time::FromInternalValue(105);
-static const base::Time kTime3 = base::Time::FromInternalValue(110);
-static const base::Time kTime4 = base::Time::FromInternalValue(120);
-static const base::Time kTime5 = base::Time::FromInternalValue(130);
-
-// Populate the mock tab delegate with some data and navigation
-// entries and make sure that setting a SessionTab from it preserves
-// those entries (and clobbers any existing data).
-TEST_F(SessionsSyncManagerTest, SetSessionTabFromDelegate) {
-  // Create a tab with three valid entries.
-  SyncedTabDelegateFake tab;
-  content::NavigationEntry* entry1(content::NavigationEntry::Create());
-  entry1->SetVirtualURL(GURL("http://www.google.com"));
-  entry1->SetTimestamp(kTime1);
-  entry1->SetHttpStatusCode(200);
-  content::NavigationEntry* entry2(content::NavigationEntry::Create());
-  entry2->SetVirtualURL(GURL("http://www.noodle.com"));
-  entry2->SetTimestamp(kTime2);
-  entry2->SetHttpStatusCode(201);
-  content::NavigationEntry* entry3(content::NavigationEntry::Create());
-  entry3->SetVirtualURL(GURL("http://www.doodle.com"));
-  entry3->SetTimestamp(kTime3);
-  entry3->SetHttpStatusCode(202);
-
-  tab.AppendEntry(entry1);
-  tab.AppendEntry(entry2);
-  tab.AppendEntry(entry3);
-  tab.set_current_entry_index(2);
-
-  SessionTab session_tab;
-  session_tab.window_id.set_id(1);
-  session_tab.tab_id.set_id(1);
-  session_tab.tab_visual_index = 1;
-  session_tab.current_navigation_index = 1;
-  session_tab.pinned = true;
-  session_tab.extension_app_id = "app id";
-  session_tab.user_agent_override = "override";
-  session_tab.timestamp = kTime5;
-  session_tab.navigations.push_back(
-      SerializedNavigationEntryTestHelper::CreateNavigation(
-          "http://www.example.com", "Example"));
-  session_tab.session_storage_persistent_id = "persistent id";
-  manager()->SetSessionTabFromDelegate(tab, kTime4, &session_tab);
-
-  EXPECT_EQ(0, session_tab.window_id.id());
-  EXPECT_EQ(0, session_tab.tab_id.id());
-  EXPECT_EQ(0, session_tab.tab_visual_index);
-  EXPECT_EQ(2, session_tab.current_navigation_index);
-  EXPECT_FALSE(session_tab.pinned);
-  EXPECT_TRUE(session_tab.extension_app_id.empty());
-  EXPECT_TRUE(session_tab.user_agent_override.empty());
-  EXPECT_EQ(kTime4, session_tab.timestamp);
-  ASSERT_EQ(3u, session_tab.navigations.size());
-  EXPECT_EQ(entry1->GetVirtualURL(),
-            session_tab.navigations[0].virtual_url());
-  EXPECT_EQ(entry2->GetVirtualURL(),
-            session_tab.navigations[1].virtual_url());
-  EXPECT_EQ(entry3->GetVirtualURL(),
-            session_tab.navigations[2].virtual_url());
-  EXPECT_EQ(kTime1, session_tab.navigations[0].timestamp());
-  EXPECT_EQ(kTime2, session_tab.navigations[1].timestamp());
-  EXPECT_EQ(kTime3, session_tab.navigations[2].timestamp());
-  EXPECT_EQ(200, session_tab.navigations[0].http_status_code());
-  EXPECT_EQ(201, session_tab.navigations[1].http_status_code());
-  EXPECT_EQ(202, session_tab.navigations[2].http_status_code());
-  EXPECT_EQ(SerializedNavigationEntry::STATE_INVALID,
-            session_tab.navigations[0].blocked_state());
-  EXPECT_EQ(SerializedNavigationEntry::STATE_INVALID,
-            session_tab.navigations[1].blocked_state());
-  EXPECT_EQ(SerializedNavigationEntry::STATE_INVALID,
-            session_tab.navigations[2].blocked_state());
-  EXPECT_TRUE(session_tab.session_storage_persistent_id.empty());
-}
-
-// Tests that for managed users blocked navigations are recorded and marked as
-// such, while regular navigations are marked as allowed.
-TEST_F(SessionsSyncManagerTest, BlockedNavigations) {
-  SyncedTabDelegateFake tab;
-  content::NavigationEntry* entry1(content::NavigationEntry::Create());
-  entry1->SetVirtualURL(GURL("http://www.google.com"));
-  entry1->SetTimestamp(kTime1);
-  tab.AppendEntry(entry1);
-
-  content::NavigationEntry* entry2 = content::NavigationEntry::Create();
-  entry2->SetVirtualURL(GURL("http://blocked.com/foo"));
-  entry2->SetTimestamp(kTime2);
-  content::NavigationEntry* entry3 = content::NavigationEntry::Create();
-  entry3->SetVirtualURL(GURL("http://evil.com"));
-  entry3->SetTimestamp(kTime3);
-  ScopedVector<const content::NavigationEntry> blocked_navigations;
-  blocked_navigations.push_back(entry2);
-  blocked_navigations.push_back(entry3);
-
-  tab.set_is_managed(true);
-  tab.set_blocked_navigations(&blocked_navigations.get());
-
-  SessionTab session_tab;
-  session_tab.window_id.set_id(1);
-  session_tab.tab_id.set_id(1);
-  session_tab.tab_visual_index = 1;
-  session_tab.current_navigation_index = 1;
-  session_tab.pinned = true;
-  session_tab.extension_app_id = "app id";
-  session_tab.user_agent_override = "override";
-  session_tab.timestamp = kTime5;
-  session_tab.navigations.push_back(
-      SerializedNavigationEntryTestHelper::CreateNavigation(
-          "http://www.example.com", "Example"));
-  session_tab.session_storage_persistent_id = "persistent id";
-  manager()->SetSessionTabFromDelegate(tab, kTime4, &session_tab);
-
-  EXPECT_EQ(0, session_tab.window_id.id());
-  EXPECT_EQ(0, session_tab.tab_id.id());
-  EXPECT_EQ(0, session_tab.tab_visual_index);
-  EXPECT_EQ(0, session_tab.current_navigation_index);
-  EXPECT_FALSE(session_tab.pinned);
-  EXPECT_TRUE(session_tab.extension_app_id.empty());
-  EXPECT_TRUE(session_tab.user_agent_override.empty());
-  EXPECT_EQ(kTime4, session_tab.timestamp);
-  ASSERT_EQ(3u, session_tab.navigations.size());
-  EXPECT_EQ(entry1->GetVirtualURL(),
-            session_tab.navigations[0].virtual_url());
-  EXPECT_EQ(entry2->GetVirtualURL(),
-            session_tab.navigations[1].virtual_url());
-  EXPECT_EQ(entry3->GetVirtualURL(),
-            session_tab.navigations[2].virtual_url());
-  EXPECT_EQ(kTime1, session_tab.navigations[0].timestamp());
-  EXPECT_EQ(kTime2, session_tab.navigations[1].timestamp());
-  EXPECT_EQ(kTime3, session_tab.navigations[2].timestamp());
-  EXPECT_EQ(SerializedNavigationEntry::STATE_ALLOWED,
-            session_tab.navigations[0].blocked_state());
-  EXPECT_EQ(SerializedNavigationEntry::STATE_BLOCKED,
-            session_tab.navigations[1].blocked_state());
-  EXPECT_EQ(SerializedNavigationEntry::STATE_BLOCKED,
-            session_tab.navigations[2].blocked_state());
-  EXPECT_TRUE(session_tab.session_storage_persistent_id.empty());
-}
-
-// Tests that the local session header objects is created properly in
-// presence of no other session activity, once and only once.
-TEST_F(SessionsSyncManagerTest, MergeLocalSessionNoTabs) {
-  syncer::SyncChangeList out;
-  InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out);
-  EXPECT_FALSE(manager()->current_machine_tag().empty());
-
-  EXPECT_EQ(2U, out.size());
-  EXPECT_TRUE(out[0].IsValid());
-  EXPECT_EQ(SyncChange::ACTION_ADD, out[0].change_type());
-  const SyncData data(out[0].sync_data());
-  EXPECT_EQ(manager()->current_machine_tag(),
-            syncer::SyncDataLocal(data).GetTag());
-  const sync_pb::SessionSpecifics& specifics(data.GetSpecifics().session());
-  EXPECT_EQ(manager()->current_machine_tag(), specifics.session_tag());
-  EXPECT_TRUE(specifics.has_header());
-  const sync_pb::SessionHeader& header_s = specifics.header();
-  EXPECT_TRUE(header_s.has_device_type());
-  EXPECT_EQ(GetLocalDeviceInfo()->client_name(), header_s.client_name());
-  EXPECT_EQ(0, header_s.window_size());
-
-  EXPECT_TRUE(out[1].IsValid());
-  EXPECT_EQ(SyncChange::ACTION_UPDATE, out[1].change_type());
-  const SyncData data_2(out[1].sync_data());
-  EXPECT_EQ(manager()->current_machine_tag(),
-            syncer::SyncDataLocal(data_2).GetTag());
-  const sync_pb::SessionSpecifics& specifics2(data_2.GetSpecifics().session());
-  EXPECT_EQ(manager()->current_machine_tag(), specifics2.session_tag());
-  EXPECT_TRUE(specifics2.has_header());
-  const sync_pb::SessionHeader& header_s2 = specifics2.header();
-  EXPECT_EQ(0, header_s2.window_size());
-
-  // Now take that header node and feed it in as input.
-  SyncData d(SyncData::CreateRemoteData(
-      1,
-      data.GetSpecifics(),
-      base::Time(),
-      syncer::AttachmentIdList(),
-      syncer::AttachmentServiceProxyForTest::Create()));
-  syncer::SyncDataList in(&d, &d + 1);
-  out.clear();
-  SessionsSyncManager manager2(profile(), this, NewDummyRouter());
-  syncer::SyncMergeResult result = manager2.MergeDataAndStartSyncing(
-      syncer::SESSIONS, in,
-      scoped_ptr<syncer::SyncChangeProcessor>(
-          new TestSyncProcessorStub(&out)),
-      scoped_ptr<syncer::SyncErrorFactory>(
-          new syncer::SyncErrorFactoryMock()));
-  ASSERT_FALSE(result.error().IsSet());
-
-  EXPECT_EQ(1U, out.size());
-  EXPECT_EQ(SyncChange::ACTION_UPDATE, out[0].change_type());
-  EXPECT_TRUE(out[0].sync_data().GetSpecifics().session().has_header());
-}
-
-// Ensure model association associates the pre-existing tabs.
-TEST_F(SessionsSyncManagerTest, SwappedOutOnRestore) {
-  AddTab(browser(), GURL("http://foo1"));
-  NavigateAndCommitActiveTab(GURL("http://foo2"));
-  AddTab(browser(), GURL("http://bar1"));
-  NavigateAndCommitActiveTab(GURL("http://bar2"));
-  AddTab(browser(), GURL("http://baz1"));
-  NavigateAndCommitActiveTab(GURL("http://baz2"));
-  const int kRestoredTabId = 1337;
-  const int kNewTabId = 2468;
-
-  syncer::SyncDataList in;
-  syncer::SyncChangeList out;
-  InitWithSyncDataTakeOutput(in, &out);
-
-  // Should be one header add, 3 tab add/update pairs, one header update.
-  ASSERT_EQ(8U, out.size());
-
-  // For input, we set up:
-  // * one "normal" fully loaded tab
-  // * one "frozen" tab with no WebContents and a tab_id change
-  // * one "frozen" tab with no WebContents and no tab_id change
-  SyncData t0(SyncData::CreateRemoteData(
-      1,
-      out[2].sync_data().GetSpecifics(),
-      base::Time(),
-      syncer::AttachmentIdList(),
-      syncer::AttachmentServiceProxyForTest::Create()));
-  sync_pb::EntitySpecifics entity(out[4].sync_data().GetSpecifics());
-  entity.mutable_session()->mutable_tab()->set_tab_id(kRestoredTabId);
-  SyncData t1(SyncData::CreateRemoteData(
-      2,
-      entity,
-      base::Time(),
-      syncer::AttachmentIdList(),
-      syncer::AttachmentServiceProxyForTest::Create()));
-  SyncData t2(SyncData::CreateRemoteData(
-      3,
-      out[6].sync_data().GetSpecifics(),
-      base::Time(),
-      syncer::AttachmentIdList(),
-      syncer::AttachmentServiceProxyForTest::Create()));
-  in.push_back(t0);
-  in.push_back(t1);
-  in.push_back(t2);
-  out.clear();
-  manager()->StopSyncing(syncer::SESSIONS);
-
-  const std::set<SyncedWindowDelegate*> windows(
-      SyncedWindowDelegate::GetSyncedWindowDelegates());
-  ASSERT_EQ(1U, windows.size());
-  SyncedTabDelegateFake t1_override, t2_override;
-  t1_override.SetSyncId(1);  // No WebContents by default.
-  t2_override.SetSyncId(2);  // No WebContents by default.
-  SyncedWindowDelegateOverride window_override(*windows.begin());
-  window_override.OverrideTabAt(1, &t1_override, kNewTabId);
-  window_override.OverrideTabAt(2, &t2_override,
-                                t2.GetSpecifics().session().tab().tab_id());
-  std::set<SyncedWindowDelegate*> delegates;
-  delegates.insert(&window_override);
-  scoped_ptr<TestSyncedWindowDelegatesGetter> getter(
-      new TestSyncedWindowDelegatesGetter(delegates));
-  manager()->synced_window_getter_.reset(getter.release());
-
-  syncer::SyncMergeResult result = manager()->MergeDataAndStartSyncing(
-      syncer::SESSIONS, in,
-      scoped_ptr<syncer::SyncChangeProcessor>(
-          new TestSyncProcessorStub(&out)),
-      scoped_ptr<syncer::SyncErrorFactory>(
-          new syncer::SyncErrorFactoryMock()));
-
-  // There should be two changes, one for the fully associated tab, and
-  // one for the tab_id update to t1.  t2 shouldn't need to be updated.
-  ASSERT_EQ(2U, FilterOutLocalHeaderChanges(&out)->size());
-  EXPECT_EQ(SyncChange::ACTION_UPDATE, out[0].change_type());
-  EXPECT_EQ(SyncChange::ACTION_UPDATE, out[1].change_type());
-  EXPECT_EQ(kNewTabId,
-            out[1].sync_data().GetSpecifics().session().tab().tab_id());
-
-  // Verify TabLinks.
-  SessionsSyncManager::TabLinksMap tab_map = manager()->local_tab_map_;
-  ASSERT_EQ(3U, tab_map.size());
-  int t2_tab_id = t2.GetSpecifics().session().tab().tab_id();
-  EXPECT_EQ(2, tab_map.find(t2_tab_id)->second->tab_node_id());
-  EXPECT_EQ(1, tab_map.find(kNewTabId)->second->tab_node_id());
-  int t0_tab_id = out[0].sync_data().GetSpecifics().session().tab().tab_id();
-  EXPECT_EQ(0, tab_map.find(t0_tab_id)->second->tab_node_id());
-  // TODO(tim): Once bug 337057 is fixed, we can issue an OnLocalTabModified
-  // from here (using an override similar to above) to return a new tab id
-  // and verify that we don't see any node creations in the SyncChangeProcessor
-  // (similar to how SessionsSyncManagerTest.OnLocalTabModified works.)
-}
-
-// Tests MergeDataAndStartSyncing with sync data but no local data.
-TEST_F(SessionsSyncManagerTest, MergeWithInitialForeignSession) {
-  std::string tag = "tag1";
-
-  SessionID::id_type n1[] = {5, 10, 13, 17};
-  std::vector<SessionID::id_type> tab_list1(n1, n1 + arraysize(n1));
-  std::vector<sync_pb::SessionSpecifics> tabs1;
-  sync_pb::SessionSpecifics meta(helper()->BuildForeignSession(
-      tag, tab_list1, &tabs1));
-  // Add a second window.
-  SessionID::id_type n2[] = {7, 15, 18, 20};
-  std::vector<SessionID::id_type> tab_list2(n2, n2 + arraysize(n2));
-  helper()->AddWindowSpecifics(1, tab_list2, &meta);
-
-  // Set up initial data.
-  syncer::SyncDataList initial_data;
-  sync_pb::EntitySpecifics entity;
-  entity.mutable_session()->CopyFrom(meta);
-  initial_data.push_back(SyncData::CreateRemoteData(
-      1,
-      entity,
-      base::Time(),
-      syncer::AttachmentIdList(),
-      syncer::AttachmentServiceProxyForTest::Create()));
-  AddTabsToSyncDataList(tabs1, &initial_data);
-
-  for (size_t i = 0; i < tab_list2.size(); ++i) {
-    sync_pb::EntitySpecifics entity;
-    helper()->BuildTabSpecifics(tag, 0, tab_list2[i],
-                                entity.mutable_session());
-    initial_data.push_back(SyncData::CreateRemoteData(
-        i + 10,
-        entity,
-        base::Time(),
-        syncer::AttachmentIdList(),
-        syncer::AttachmentServiceProxyForTest::Create()));
-  }
-
-  syncer::SyncChangeList output;
-  InitWithSyncDataTakeOutput(initial_data, &output);
-  EXPECT_TRUE(FilterOutLocalHeaderChanges(&output)->empty());
-
-  std::vector<const SyncedSession*> foreign_sessions;
-  ASSERT_TRUE(manager()->GetAllForeignSessions(&foreign_sessions));
-  ASSERT_EQ(1U, foreign_sessions.size());
-  std::vector<std::vector<SessionID::id_type> > session_reference;
-  session_reference.push_back(tab_list1);
-  session_reference.push_back(tab_list2);
-  helper()->VerifySyncedSession(tag, session_reference, *(foreign_sessions[0]));
-}
-
-// This is a combination of MergeWithInitialForeignSession and
-// MergeLocalSessionExistingTabs. We repeat some checks performed in each of
-// those tests to ensure the common mixed scenario works.
-TEST_F(SessionsSyncManagerTest, MergeWithLocalAndForeignTabs) {
-  // Local.
-  AddTab(browser(), GURL("http://foo1"));
-  NavigateAndCommitActiveTab(GURL("http://foo2"));
-
-  // Foreign.
-  std::string tag = "tag1";
-  SessionID::id_type n1[] = {5, 10, 13, 17};
-  std::vector<SessionID::id_type> tab_list1(n1, n1 + arraysize(n1));
-  std::vector<sync_pb::SessionSpecifics> tabs1;
-  sync_pb::SessionSpecifics meta(helper()->BuildForeignSession(
-      tag, tab_list1, &tabs1));
-  syncer::SyncDataList foreign_data;
-  sync_pb::EntitySpecifics entity;
-  entity.mutable_session()->CopyFrom(meta);
-  foreign_data.push_back(SyncData::CreateRemoteData(
-      1,
-      entity,
-      base::Time(),
-      syncer::AttachmentIdList(),
-      syncer::AttachmentServiceProxyForTest::Create()));
-  AddTabsToSyncDataList(tabs1, &foreign_data);
-
-  syncer::SyncChangeList output;
-  InitWithSyncDataTakeOutput(foreign_data, &output);
-  ASSERT_EQ(4U, output.size());
-
-  // Verify the local header.
-  EXPECT_TRUE(output[0].IsValid());
-  EXPECT_EQ(SyncChange::ACTION_ADD, output[0].change_type());
-  const SyncData data(output[0].sync_data());
-  EXPECT_EQ(manager()->current_machine_tag(),
-            syncer::SyncDataLocal(data).GetTag());
-  const sync_pb::SessionSpecifics& specifics(data.GetSpecifics().session());
-  EXPECT_EQ(manager()->current_machine_tag(), specifics.session_tag());
-  EXPECT_TRUE(specifics.has_header());
-  const sync_pb::SessionHeader& header_s = specifics.header();
-  EXPECT_TRUE(header_s.has_device_type());
-  EXPECT_EQ(GetLocalDeviceInfo()->client_name(), header_s.client_name());
-  EXPECT_EQ(0, header_s.window_size());
-
-  // Verify the tab node creations and updates with content.
-  for (int i = 1; i < 3; i++) {
-    EXPECT_TRUE(output[i].IsValid());
-    const SyncData data(output[i].sync_data());
-    EXPECT_TRUE(StartsWithASCII(syncer::SyncDataLocal(data).GetTag(),
-                                manager()->current_machine_tag(), true));
-    const sync_pb::SessionSpecifics& specifics(data.GetSpecifics().session());
-    EXPECT_EQ(manager()->current_machine_tag(), specifics.session_tag());
-  }
-  EXPECT_EQ(SyncChange::ACTION_ADD, output[1].change_type());
-  EXPECT_EQ(SyncChange::ACTION_UPDATE, output[2].change_type());
-  EXPECT_TRUE(output[2].sync_data().GetSpecifics().session().has_tab());
-
-  // Verify the header was updated to reflect window state.
-  EXPECT_TRUE(output[3].IsValid());
-  EXPECT_EQ(SyncChange::ACTION_UPDATE, output[3].change_type());
-  const SyncData data_2(output[3].sync_data());
-  EXPECT_EQ(manager()->current_machine_tag(),
-            syncer::SyncDataLocal(data_2).GetTag());
-  const sync_pb::SessionSpecifics& specifics2(data_2.GetSpecifics().session());
-  EXPECT_EQ(manager()->current_machine_tag(), specifics2.session_tag());
-  EXPECT_TRUE(specifics2.has_header());
-  const sync_pb::SessionHeader& header_s2 = specifics2.header();
-  EXPECT_EQ(1, header_s2.window_size());
-
-  // Verify foreign data.
-  std::vector<const SyncedSession*> foreign_sessions;
-  ASSERT_TRUE(manager()->GetAllForeignSessions(&foreign_sessions));
-  std::vector<std::vector<SessionID::id_type> > session_reference;
-  session_reference.push_back(tab_list1);
-  helper()->VerifySyncedSession(tag, session_reference, *(foreign_sessions[0]));
-  // There should be one and only one foreign session. If VerifySyncedSession
-  // was successful above this EXPECT call ensures the local session didn't
-  // get mistakenly added to foreign tracking (Similar to ExistingTabs test).
-  EXPECT_EQ(1U, foreign_sessions.size());
-}
-
-// Tests the common scenario.  Merge with both local and foreign session data
-// followed by updates flowing from sync and local.
-TEST_F(SessionsSyncManagerTest, UpdatesAfterMixedMerge) {
-  // Add local and foreign data.
-  AddTab(browser(), GURL("http://foo1"));
-  NavigateAndCommitActiveTab(GURL("http://foo2"));
-
-  std::string tag1 = "tag1";
-  syncer::SyncDataList foreign_data1;
-  std::vector<std::vector<SessionID::id_type> > meta1_reference;
-  sync_pb::SessionSpecifics meta1;
-
-  SessionID::id_type n1[] = {5, 10, 13, 17};
-  std::vector<SessionID::id_type> tab_list1(n1, n1 + arraysize(n1));
-  meta1_reference.push_back(tab_list1);
-  std::vector<sync_pb::SessionSpecifics> tabs1;
-  meta1 = helper()->BuildForeignSession(tag1, tab_list1, &tabs1);
-  sync_pb::EntitySpecifics entity;
-  entity.mutable_session()->CopyFrom(meta1);
-  foreign_data1.push_back(SyncData::CreateRemoteData(
-      1,
-      entity,
-      base::Time(),
-      syncer::AttachmentIdList(),
-      syncer::AttachmentServiceProxyForTest::Create()));
-  AddTabsToSyncDataList(tabs1, &foreign_data1);
-
-  syncer::SyncChangeList output1;
-  InitWithSyncDataTakeOutput(foreign_data1, &output1);
-  ASSERT_EQ(4U, output1.size());
-
-  // Add a second window to the foreign session.
-  // TODO(tim): Bug 98892. Add local window too when observers are hooked up.
-  SessionID::id_type tab_nums2[] = {7, 15, 18, 20};
-  std::vector<SessionID::id_type> tab_list2(
-      tab_nums2, tab_nums2 + arraysize(tab_nums2));
-  meta1_reference.push_back(tab_list2);
-  helper()->AddWindowSpecifics(1, tab_list2, &meta1);
-  std::vector<sync_pb::SessionSpecifics> tabs2;
-  tabs2.resize(tab_list2.size());
-  for (size_t i = 0; i < tab_list2.size(); ++i) {
-    helper()->BuildTabSpecifics(tag1, 0, tab_list2[i], &tabs2[i]);
-  }
-
-  syncer::SyncChangeList changes;
-  changes.push_back(MakeRemoteChange(1, meta1, SyncChange::ACTION_UPDATE));
-  AddTabsToChangeList(tabs2, SyncChange::ACTION_ADD, &changes);
-  manager()->ProcessSyncChanges(FROM_HERE, changes);
-  changes.clear();
-
-  // Check that the foreign session was associated and retrieve the data.
-  std::vector<const SyncedSession*> foreign_sessions;
-  ASSERT_TRUE(manager()->GetAllForeignSessions(&foreign_sessions));
-  ASSERT_EQ(1U, foreign_sessions.size());
-  ASSERT_EQ(4U, foreign_sessions[0]->windows.find(0)->second->tabs.size());
-  ASSERT_EQ(4U, foreign_sessions[0]->windows.find(1)->second->tabs.size());
-  helper()->VerifySyncedSession(tag1, meta1_reference, *(foreign_sessions[0]));
-
-  // Add a new foreign session.
-  std::string tag2 = "tag2";
-  SessionID::id_type n2[] = {107, 115};
-  std::vector<SessionID::id_type> tag2_tab_list(n2, n2 + arraysize(n2));
-  std::vector<sync_pb::SessionSpecifics> tag2_tabs;
-  sync_pb::SessionSpecifics meta2(helper()->BuildForeignSession(
-      tag2, tag2_tab_list, &tag2_tabs));
-  changes.push_back(MakeRemoteChange(100, meta2, SyncChange::ACTION_ADD));
-  AddTabsToChangeList(tag2_tabs, SyncChange::ACTION_ADD, &changes);
-
-  manager()->ProcessSyncChanges(FROM_HERE, changes);
-  changes.clear();
-
-  ASSERT_TRUE(manager()->GetAllForeignSessions(&foreign_sessions));
-  std::vector<std::vector<SessionID::id_type> > meta2_reference;
-  meta2_reference.push_back(tag2_tab_list);
-  ASSERT_EQ(2U, foreign_sessions.size());
-  ASSERT_EQ(2U, foreign_sessions[1]->windows.find(0)->second->tabs.size());
-  helper()->VerifySyncedSession(tag2, meta2_reference, *(foreign_sessions[1]));
-  foreign_sessions.clear();
-
-  // Remove a tab from a window.
-  meta1_reference[0].pop_back();
-  tab_list1.pop_back();
-  sync_pb::SessionWindow* win = meta1.mutable_header()->mutable_window(0);
-  win->clear_tab();
-  for (std::vector<int>::const_iterator iter = tab_list1.begin();
-       iter != tab_list1.end(); ++iter) {
-    win->add_tab(*iter);
-  }
-  syncer::SyncChangeList removal;
-  removal.push_back(MakeRemoteChange(1, meta1, SyncChange::ACTION_UPDATE));
-  AddTabsToChangeList(tabs1, SyncChange::ACTION_UPDATE, &removal);
-  manager()->ProcessSyncChanges(FROM_HERE, removal);
-
-  ASSERT_TRUE(manager()->GetAllForeignSessions(&foreign_sessions));
-  ASSERT_EQ(2U, foreign_sessions.size());
-  ASSERT_EQ(3U, foreign_sessions[0]->windows.find(0)->second->tabs.size());
-  helper()->VerifySyncedSession(tag1, meta1_reference, *(foreign_sessions[0]));
-}
-
-// Tests that this SyncSessionManager knows how to delete foreign sessions
-// if it wants to.
-TEST_F(SessionsSyncManagerTest, DeleteForeignSession) {
-  InitWithNoSyncData();
-  std::string tag = "tag1";
-  syncer::SyncChangeList changes;
-
-  std::vector<const SyncedSession*> foreign_sessions;
-  ASSERT_FALSE(manager()->GetAllForeignSessions(&foreign_sessions));
-  manager()->DeleteForeignSessionInternal(tag, &changes);
-  ASSERT_FALSE(manager()->GetAllForeignSessions(&foreign_sessions));
-  EXPECT_TRUE(changes.empty());
-
-   // Fill an instance of session specifics with a foreign session's data.
-  std::vector<sync_pb::SessionSpecifics> tabs;
-  SessionID::id_type n1[] = {5, 10, 13, 17};
-  std::vector<SessionID::id_type> tab_nums1(n1, n1 + arraysize(n1));
-  sync_pb::SessionSpecifics meta(helper()->BuildForeignSession(
-      tag, tab_nums1, &tabs));
-
-  // Update associator with the session's meta node, window, and tabs.
-  manager()->UpdateTrackerWithForeignSession(meta, base::Time());
-  for (std::vector<sync_pb::SessionSpecifics>::iterator iter = tabs.begin();
-       iter != tabs.end(); ++iter) {
-    manager()->UpdateTrackerWithForeignSession(*iter, base::Time());
-  }
-  ASSERT_TRUE(manager()->GetAllForeignSessions(&foreign_sessions));
-  ASSERT_EQ(1U, foreign_sessions.size());
-
-  // Now delete the foreign session.
-  manager()->DeleteForeignSessionInternal(tag, &changes);
-  EXPECT_FALSE(manager()->GetAllForeignSessions(&foreign_sessions));
-
-  EXPECT_EQ(5U, changes.size());
-  std::set<std::string> expected_tags(&tag, &tag + 1);
-  for (int i = 0; i < 5; i++)
-    expected_tags.insert(TabNodePool2::TabIdToTag(tag, i));
-
-  for (int i = 0; i < 5; i++) {
-    SCOPED_TRACE(changes[i].ToString());
-    EXPECT_TRUE(changes[i].IsValid());
-    EXPECT_EQ(SyncChange::ACTION_DELETE, changes[i].change_type());
-    EXPECT_TRUE(changes[i].sync_data().IsValid());
-    EXPECT_EQ(1U,
-              expected_tags.erase(
-                  syncer::SyncDataLocal(changes[i].sync_data()).GetTag()));
-  }
-}
-
-// Write a foreign session to a node, with the tabs arriving first, and then
-// retrieve it.
-TEST_F(SessionsSyncManagerTest, WriteForeignSessionToNodeTabsFirst) {
-  InitWithNoSyncData();
-
-  // Fill an instance of session specifics with a foreign session's data.
-  std::string tag = "tag1";
-  SessionID::id_type nums1[] = {5, 10, 13, 17};
-  std::vector<sync_pb::SessionSpecifics> tabs1;
-  std::vector<SessionID::id_type> tab_list1 (nums1, nums1 + arraysize(nums1));
-  sync_pb::SessionSpecifics meta(helper()->BuildForeignSession(
-      tag, tab_list1, &tabs1));
-
-  syncer::SyncChangeList adds;
-  // Add tabs for first window, then the meta node.
-  AddTabsToChangeList(tabs1, SyncChange::ACTION_ADD, &adds);
-  adds.push_back(MakeRemoteChange(1, meta, SyncChange::ACTION_ADD));
-  manager()->ProcessSyncChanges(FROM_HERE, adds);
-
-  // Check that the foreign session was associated and retrieve the data.
-  std::vector<const SyncedSession*> foreign_sessions;
-  ASSERT_TRUE(manager()->GetAllForeignSessions(&foreign_sessions));
-  ASSERT_EQ(1U, foreign_sessions.size());
-  std::vector<std::vector<SessionID::id_type> > session_reference;
-  session_reference.push_back(tab_list1);
-  helper()->VerifySyncedSession(tag, session_reference, *(foreign_sessions[0]));
-}
-
-// Write a foreign session to a node with some tabs that never arrive.
-TEST_F(SessionsSyncManagerTest, WriteForeignSessionToNodeMissingTabs) {
-  InitWithNoSyncData();
-
-  // Fill an instance of session specifics with a foreign session's data.
-  std::string tag = "tag1";
-  SessionID::id_type nums1[] = {5, 10, 13, 17};
-  std::vector<sync_pb::SessionSpecifics> tabs1;
-  std::vector<SessionID::id_type> tab_list1 (nums1, nums1 + arraysize(nums1));
-  sync_pb::SessionSpecifics meta(helper()->BuildForeignSession(
-      tag, tab_list1, &tabs1));
-  // Add a second window, but this time only create two tab nodes, despite the
-  // window expecting four tabs.
-  SessionID::id_type tab_nums2[] = {7, 15, 18, 20};
-  std::vector<SessionID::id_type> tab_list2(
-      tab_nums2, tab_nums2 + arraysize(tab_nums2));
-  helper()->AddWindowSpecifics(1, tab_list2, &meta);
-  std::vector<sync_pb::SessionSpecifics> tabs2;
-  tabs2.resize(2);
-  for (size_t i = 0; i < 2; ++i) {
-    helper()->BuildTabSpecifics(tag, 0, tab_list2[i], &tabs2[i]);
-  }
-
-  syncer::SyncChangeList changes;
-  changes.push_back(MakeRemoteChange(1, meta, SyncChange::ACTION_ADD));
-  AddTabsToChangeList(tabs1, SyncChange::ACTION_ADD, &changes);
-  AddTabsToChangeList(tabs2, SyncChange::ACTION_ADD, &changes);
-  manager()->ProcessSyncChanges(FROM_HERE, changes);
-  changes.clear();
-
-  // Check that the foreign session was associated and retrieve the data.
-  std::vector<const SyncedSession*> foreign_sessions;
-  ASSERT_TRUE(manager()->GetAllForeignSessions(&foreign_sessions));
-  ASSERT_EQ(1U, foreign_sessions.size());
-  ASSERT_EQ(2U, foreign_sessions[0]->windows.size());
-  ASSERT_EQ(4U, foreign_sessions[0]->windows.find(0)->second->tabs.size());
-  ASSERT_EQ(4U, foreign_sessions[0]->windows.find(1)->second->tabs.size());
-
-  // Close the second window.
-  meta.mutable_header()->clear_window();
-  helper()->AddWindowSpecifics(0, tab_list1, &meta);
-  changes.push_back(MakeRemoteChange(1, meta, SyncChange::ACTION_UPDATE));
-  // Update associator with the session's meta node containing one window.
-  manager()->ProcessSyncChanges(FROM_HERE, changes);
-
-  // Check that the foreign session was associated and retrieve the data.
-  foreign_sessions.clear();
-  ASSERT_TRUE(manager()->GetAllForeignSessions(&foreign_sessions));
-  ASSERT_EQ(1U, foreign_sessions.size());
-  ASSERT_EQ(1U, foreign_sessions[0]->windows.size());
-  std::vector<std::vector<SessionID::id_type> > session_reference;
-  session_reference.push_back(tab_list1);
-  helper()->VerifySyncedSession(tag, session_reference, *(foreign_sessions[0]));
-}
-
-// Tests that the SessionsSyncManager can handle a remote client deleting
-// sync nodes that belong to this local session.
-TEST_F(SessionsSyncManagerTest, ProcessRemoteDeleteOfLocalSession) {
-  syncer::SyncChangeList out;
-  InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out);
-  ASSERT_EQ(2U, out.size());
-  sync_pb::EntitySpecifics entity(out[0].sync_data().GetSpecifics());
-  SyncData d(SyncData::CreateRemoteData(
-      1,
-      entity,
-      base::Time(),
-      syncer::AttachmentIdList(),
-      syncer::AttachmentServiceProxyForTest::Create()));
-  SetSyncData(syncer::SyncDataList(&d, &d + 1));
-  out.clear();
-
-  syncer::SyncChangeList changes;
-  changes.push_back(
-      MakeRemoteChange(1, entity.session(), SyncChange::ACTION_DELETE));
-  manager()->ProcessSyncChanges(FROM_HERE, changes);
-  EXPECT_TRUE(manager()->local_tab_pool_out_of_sync_);
-  EXPECT_TRUE(out.empty());  // ChangeProcessor shouldn't see any activity.
-
-  // This should trigger repair of the TabNodePool.
-  const GURL foo1("http://foo/1");
-  AddTab(browser(), foo1);
-  EXPECT_FALSE(manager()->local_tab_pool_out_of_sync_);
-
-  // AddTab triggers two notifications, one for the tab insertion and one for
-  // committing the NavigationEntry. The first notification results in a tab
-  // we don't associate although we do update the header node.  The second
-  // notification triggers association of the tab, and the subsequent window
-  // update.  So we should see 4 changes at the SyncChangeProcessor.
-  ASSERT_EQ(4U, out.size());
-
-  EXPECT_EQ(SyncChange::ACTION_UPDATE, out[0].change_type());
-  ASSERT_TRUE(out[0].sync_data().GetSpecifics().session().has_header());
-  EXPECT_EQ(SyncChange::ACTION_ADD, out[1].change_type());
-  int tab_node_id = out[1].sync_data().GetSpecifics().session().tab_node_id();
-  EXPECT_EQ(TabNodePool2::TabIdToTag(
-                manager()->current_machine_tag(), tab_node_id),
-            syncer::SyncDataLocal(out[1].sync_data()).GetTag());
-  EXPECT_EQ(SyncChange::ACTION_UPDATE, out[2].change_type());
-  ASSERT_TRUE(out[2].sync_data().GetSpecifics().session().has_tab());
-  EXPECT_EQ(SyncChange::ACTION_UPDATE, out[3].change_type());
-  ASSERT_TRUE(out[3].sync_data().GetSpecifics().session().has_header());
-
-  // Verify the actual content.
-  const sync_pb::SessionHeader& session_header =
-      out[3].sync_data().GetSpecifics().session().header();
-  ASSERT_EQ(1, session_header.window_size());
-  EXPECT_EQ(1, session_header.window(0).tab_size());
-  const sync_pb::SessionTab& tab1 =
-      out[2].sync_data().GetSpecifics().session().tab();
-  ASSERT_EQ(1, tab1.navigation_size());
-  EXPECT_EQ(foo1.spec(), tab1.navigation(0).virtual_url());
-
-  // Verify TabNodePool integrity.
-  EXPECT_EQ(1U, manager()->local_tab_pool_.Capacity());
-  EXPECT_TRUE(manager()->local_tab_pool_.Empty());
-
-  // Verify TabLinks.
-  SessionsSyncManager::TabLinksMap tab_map = manager()->local_tab_map_;
-  ASSERT_EQ(1U, tab_map.size());
-  int tab_id = out[2].sync_data().GetSpecifics().session().tab().tab_id();
-  EXPECT_EQ(tab_node_id, tab_map.find(tab_id)->second->tab_node_id());
-}
-
-// Test that receiving a session delete from sync removes the session
-// from tracking.
-TEST_F(SessionsSyncManagerTest, ProcessForeignDelete) {
-  InitWithNoSyncData();
-  SessionID::id_type n[] = {5};
-  std::vector<sync_pb::SessionSpecifics> tabs1;
-  std::vector<SessionID::id_type> tab_list(n, n + arraysize(n));
-  sync_pb::SessionSpecifics meta(helper()->BuildForeignSession(
-      "tag1", tab_list, &tabs1));
-
-  syncer::SyncChangeList changes;
-  changes.push_back(MakeRemoteChange(1, meta, SyncChange::ACTION_ADD));
-  AddTabsToChangeList(tabs1, SyncChange::ACTION_ADD, &changes);
-  manager()->ProcessSyncChanges(FROM_HERE, changes);
-
-  std::vector<const SyncedSession*> foreign_sessions;
-  ASSERT_TRUE(manager()->GetAllForeignSessions(&foreign_sessions));
-  ASSERT_EQ(1U, foreign_sessions.size());
-
-  changes.clear();
-  foreign_sessions.clear();
-  changes.push_back(MakeRemoteChange(1, meta, SyncChange::ACTION_DELETE));
-  manager()->ProcessSyncChanges(FROM_HERE, changes);
-
-  EXPECT_FALSE(manager()->GetAllForeignSessions(&foreign_sessions));
-}
-
-// TODO(shashishekhar): "Move this to TabNodePool unittests."
-TEST_F(SessionsSyncManagerTest, SaveUnassociatedNodesForReassociation) {
-  syncer::SyncChangeList changes;
-  InitWithNoSyncData();
-
-  std::string local_tag = manager()->current_machine_tag();
-  // Create a free node and then dissassociate sessions so that it ends up
-  // unassociated.
-  manager()->local_tab_pool_.GetFreeTabNode(&changes);
-
-  // Update the tab_id of the node, so that it is considered a valid
-  // unassociated node otherwise it will be mistaken for a corrupted node and
-  // will be deleted before being added to the tab node pool.
-  sync_pb::EntitySpecifics entity(changes[0].sync_data().GetSpecifics());
-  entity.mutable_session()->mutable_tab()->set_tab_id(1);
-  SyncData d(SyncData::CreateRemoteData(
-      1,
-      entity,
-      base::Time(),
-      syncer::AttachmentIdList(),
-      syncer::AttachmentServiceProxyForTest::Create()));
-  syncer::SyncDataList in(&d, &d + 1);
-  changes.clear();
-  SessionsSyncManager manager2(profile(), this, NewDummyRouter());
-  syncer::SyncMergeResult result = manager2.MergeDataAndStartSyncing(
-      syncer::SESSIONS, in,
-      scoped_ptr<syncer::SyncChangeProcessor>(
-          new TestSyncProcessorStub(&changes)),
-      scoped_ptr<syncer::SyncErrorFactory>(
-          new syncer::SyncErrorFactoryMock()));
-  ASSERT_FALSE(result.error().IsSet());
-  EXPECT_TRUE(FilterOutLocalHeaderChanges(&changes)->empty());
-}
-
-TEST_F(SessionsSyncManagerTest, MergeDeletesCorruptNode) {
-  syncer::SyncChangeList changes;
-  InitWithNoSyncData();
-
-  std::string local_tag = manager()->current_machine_tag();
-  int tab_node_id = manager()->local_tab_pool_.GetFreeTabNode(&changes);
-  SyncData d(SyncData::CreateRemoteData(
-      1,
-      changes[0].sync_data().GetSpecifics(),
-      base::Time(),
-      syncer::AttachmentIdList(),
-      syncer::AttachmentServiceProxyForTest::Create()));
-  syncer::SyncDataList in(&d, &d + 1);
-  changes.clear();
-  TearDown();
-  SetUp();
-  InitWithSyncDataTakeOutput(in, &changes);
-  EXPECT_EQ(1U, FilterOutLocalHeaderChanges(&changes)->size());
-  EXPECT_EQ(SyncChange::ACTION_DELETE, changes[0].change_type());
-  EXPECT_EQ(TabNodePool2::TabIdToTag(local_tag, tab_node_id),
-            syncer::SyncDataLocal(changes[0].sync_data()).GetTag());
-}
-
-// Test that things work if a tab is initially ignored.
-TEST_F(SessionsSyncManagerTest, AssociateWindowsDontReloadTabs) {
-  syncer::SyncChangeList out;
-  // Go to a URL that is ignored by session syncing.
-  AddTab(browser(), GURL("chrome://preferences/"));
-  InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out);
-  ASSERT_EQ(2U, out.size());  // Header add and update.
-  EXPECT_EQ(
-      0,
-      out[1].sync_data().GetSpecifics().session().header().window_size());
-  out.clear();
-
-  // Go to a sync-interesting URL.
-  NavigateAndCommitActiveTab(GURL("http://foo2"));
-
-  EXPECT_EQ(3U, out.size());  // Tab add, update, and header update.
-
-  EXPECT_TRUE(
-      StartsWithASCII(syncer::SyncDataLocal(out[0].sync_data()).GetTag(),
-                      manager()->current_machine_tag(),
-                      true));
-  EXPECT_EQ(manager()->current_machine_tag(),
-            out[0].sync_data().GetSpecifics().session().session_tag());
-  EXPECT_EQ(SyncChange::ACTION_ADD, out[0].change_type());
-
-  EXPECT_TRUE(
-      StartsWithASCII(syncer::SyncDataLocal(out[1].sync_data()).GetTag(),
-                      manager()->current_machine_tag(),
-                      true));
-  EXPECT_EQ(manager()->current_machine_tag(),
-            out[1].sync_data().GetSpecifics().session().session_tag());
-  EXPECT_TRUE(out[1].sync_data().GetSpecifics().session().has_tab());
-  EXPECT_EQ(SyncChange::ACTION_UPDATE, out[1].change_type());
-
-  EXPECT_TRUE(out[2].IsValid());
-  EXPECT_EQ(SyncChange::ACTION_UPDATE, out[2].change_type());
-  const SyncData data(out[2].sync_data());
-  EXPECT_EQ(manager()->current_machine_tag(),
-            syncer::SyncDataLocal(data).GetTag());
-  const sync_pb::SessionSpecifics& specifics(data.GetSpecifics().session());
-  EXPECT_EQ(manager()->current_machine_tag(), specifics.session_tag());
-  EXPECT_TRUE(specifics.has_header());
-  const sync_pb::SessionHeader& header_s = specifics.header();
-  EXPECT_EQ(1, header_s.window_size());
-  EXPECT_EQ(1, header_s.window(0).tab_size());
-}
-
-// Tests that the SyncSessionManager responds to local tab events properly.
-TEST_F(SessionsSyncManagerTest, OnLocalTabModified) {
-  syncer::SyncChangeList out;
-  // Init with no local data, relies on MergeLocalSessionNoTabs.
-  InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out);
-  ASSERT_FALSE(manager()->current_machine_tag().empty());
-  ASSERT_EQ(2U, out.size());
-
-  // Copy the original header.
-  sync_pb::EntitySpecifics header(out[0].sync_data().GetSpecifics());
-  out.clear();
-
-  const GURL foo1("http://foo/1");
-  const GURL foo2("http://foo/2");
-  const GURL bar1("http://bar/1");
-  const GURL bar2("http://bar/2");
-  AddTab(browser(), foo1);
-  NavigateAndCommitActiveTab(foo2);
-  AddTab(browser(), bar1);
-  NavigateAndCommitActiveTab(bar2);
-
-  // One add, one update for each AddTab.
-  // One update for each NavigateAndCommit.
-  // = 6 total tab updates.
-  // One header update corresponding to each of those.
-  // = 6 total header updates.
-  // 12 total updates.
-  ASSERT_EQ(12U, out.size());
-
-  // Verify the tab node creations and updates to ensure the SyncProcessor
-  // sees the right operations.
-  for (int i = 0; i < 12; i++) {
-    SCOPED_TRACE(i);
-    EXPECT_TRUE(out[i].IsValid());
-    const SyncData data(out[i].sync_data());
-    EXPECT_TRUE(StartsWithASCII(syncer::SyncDataLocal(data).GetTag(),
-                                manager()->current_machine_tag(), true));
-    const sync_pb::SessionSpecifics& specifics(data.GetSpecifics().session());
-    EXPECT_EQ(manager()->current_machine_tag(), specifics.session_tag());
-    if (i % 6 == 0) {
-      // First thing on an AddTab is a no-op header update for parented tab.
-      EXPECT_EQ(header.SerializeAsString(),
-                data.GetSpecifics().SerializeAsString());
-      EXPECT_EQ(manager()->current_machine_tag(),
-                syncer::SyncDataLocal(data).GetTag());
-    } else if (i % 6 == 1) {
-      // Next, the TabNodePool should create the tab node.
-      EXPECT_EQ(SyncChange::ACTION_ADD, out[i].change_type());
-      EXPECT_EQ(TabNodePool2::TabIdToTag(
-                    manager()->current_machine_tag(),
-                    data.GetSpecifics().session().tab_node_id()),
-                syncer::SyncDataLocal(data).GetTag());
-    } else if (i % 6 == 2) {
-      // Then we see the tab update to the URL.
-      EXPECT_EQ(SyncChange::ACTION_UPDATE, out[i].change_type());
-      EXPECT_EQ(TabNodePool2::TabIdToTag(
-                    manager()->current_machine_tag(),
-                    data.GetSpecifics().session().tab_node_id()),
-                syncer::SyncDataLocal(data).GetTag());
-      ASSERT_TRUE(specifics.has_tab());
-    } else if (i % 6 == 3) {
-      // The header needs to be updated to reflect the new window state.
-      EXPECT_EQ(SyncChange::ACTION_UPDATE, out[i].change_type());
-      EXPECT_TRUE(specifics.has_header());
-    } else if (i % 6 == 4) {
-      // Now we move on to NavigateAndCommit.  Update the tab.
-      EXPECT_EQ(SyncChange::ACTION_UPDATE, out[i].change_type());
-      EXPECT_EQ(TabNodePool2::TabIdToTag(
-                    manager()->current_machine_tag(),
-                    data.GetSpecifics().session().tab_node_id()),
-                syncer::SyncDataLocal(data).GetTag());
-      ASSERT_TRUE(specifics.has_tab());
-    } else if (i % 6 == 5) {
-      // The header needs to be updated to reflect the new window state.
-      EXPECT_EQ(SyncChange::ACTION_UPDATE, out[i].change_type());
-      ASSERT_TRUE(specifics.has_header());
-      header = data.GetSpecifics();
-    }
-  }
-
-  // Verify the actual content to ensure sync sees the right data.
-  // When it's all said and done, the header should reflect two tabs.
-  const sync_pb::SessionHeader& session_header = header.session().header();
-  ASSERT_EQ(1, session_header.window_size());
-  EXPECT_EQ(2, session_header.window(0).tab_size());
-
-  // ASSERT_TRUEs above allow us to dive in freely here.
-  // Verify first tab.
-  const sync_pb::SessionTab& tab1_1 =
-      out[2].sync_data().GetSpecifics().session().tab();
-  ASSERT_EQ(1, tab1_1.navigation_size());
-  EXPECT_EQ(foo1.spec(), tab1_1.navigation(0).virtual_url());
-  const sync_pb::SessionTab& tab1_2 =
-      out[4].sync_data().GetSpecifics().session().tab();
-  ASSERT_EQ(2, tab1_2.navigation_size());
-  EXPECT_EQ(foo1.spec(), tab1_2.navigation(0).virtual_url());
-  EXPECT_EQ(foo2.spec(), tab1_2.navigation(1).virtual_url());
-
-  // Verify second tab.
-  const sync_pb::SessionTab& tab2_1 =
-      out[8].sync_data().GetSpecifics().session().tab();
-  ASSERT_EQ(1, tab2_1.navigation_size());
-  EXPECT_EQ(bar1.spec(), tab2_1.navigation(0).virtual_url());
-  const sync_pb::SessionTab& tab2_2 =
-      out[10].sync_data().GetSpecifics().session().tab();
-  ASSERT_EQ(2, tab2_2.navigation_size());
-  EXPECT_EQ(bar1.spec(), tab2_2.navigation(0).virtual_url());
-  EXPECT_EQ(bar2.spec(), tab2_2.navigation(1).virtual_url());
-}
-
-// Ensure model association associates the pre-existing tabs.
-TEST_F(SessionsSyncManagerTest, MergeLocalSessionExistingTabs) {
-  AddTab(browser(), GURL("http://foo1"));
-  NavigateAndCommitActiveTab(GURL("http://foo2"));  // Adds back entry.
-  AddTab(browser(), GURL("http://bar1"));
-  NavigateAndCommitActiveTab(GURL("http://bar2"));  // Adds back entry.
-
-  syncer::SyncChangeList out;
-  InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out);
-  ASSERT_EQ(6U, out.size());
-
-  // Check that this machine's data is not included in the foreign windows.
-  std::vector<const SyncedSession*> foreign_sessions;
-  ASSERT_FALSE(manager()->GetAllForeignSessions(&foreign_sessions));
-
-  // Verify the header.
-  EXPECT_TRUE(out[0].IsValid());
-  EXPECT_EQ(SyncChange::ACTION_ADD, out[0].change_type());
-  const SyncData data(out[0].sync_data());
-  EXPECT_EQ(manager()->current_machine_tag(),
-            syncer::SyncDataLocal(data).GetTag());
-  const sync_pb::SessionSpecifics& specifics(data.GetSpecifics().session());
-  EXPECT_EQ(manager()->current_machine_tag(), specifics.session_tag());
-  EXPECT_TRUE(specifics.has_header());
-  const sync_pb::SessionHeader& header_s = specifics.header();
-  EXPECT_TRUE(header_s.has_device_type());
-  EXPECT_EQ(GetLocalDeviceInfo()->client_name(), header_s.client_name());
-  EXPECT_EQ(0, header_s.window_size());
-
-  // Verify the tab node creations and updates with content.
-  for (int i = 1; i < 5; i++) {
-    EXPECT_TRUE(out[i].IsValid());
-    const SyncData data(out[i].sync_data());
-    EXPECT_TRUE(StartsWithASCII(syncer::SyncDataLocal(data).GetTag(),
-                                manager()->current_machine_tag(), true));
-    const sync_pb::SessionSpecifics& specifics(data.GetSpecifics().session());
-    EXPECT_EQ(manager()->current_machine_tag(), specifics.session_tag());
-    if (i % 2 == 1) {
-      EXPECT_EQ(SyncChange::ACTION_ADD, out[i].change_type());
-    } else {
-      EXPECT_EQ(SyncChange::ACTION_UPDATE, out[i].change_type());
-      EXPECT_TRUE(specifics.has_tab());
-    }
-  }
-
-  // Verify the header was updated to reflect new window state.
-  EXPECT_TRUE(out[5].IsValid());
-  EXPECT_EQ(SyncChange::ACTION_UPDATE, out[5].change_type());
-  const SyncData data_2(out[5].sync_data());
-  EXPECT_EQ(manager()->current_machine_tag(),
-            syncer::SyncDataLocal(data_2).GetTag());
-  const sync_pb::SessionSpecifics& specifics2(data_2.GetSpecifics().session());
-  EXPECT_EQ(manager()->current_machine_tag(), specifics2.session_tag());
-  EXPECT_TRUE(specifics2.has_header());
-  const sync_pb::SessionHeader& header_s2 = specifics2.header();
-  EXPECT_EQ(1, header_s2.window_size());
-
-  // Verify TabLinks.
-  SessionsSyncManager::TabLinksMap tab_map = manager()->local_tab_map_;
-  ASSERT_EQ(2U, tab_map.size());
-  // Tabs are ordered by sessionid in tab_map, so should be able to traverse
-  // the tree based on order of tabs created
-  SessionsSyncManager::TabLinksMap::iterator iter = tab_map.begin();
-  ASSERT_EQ(2, iter->second->tab()->GetEntryCount());
-  EXPECT_EQ(GURL("http://foo1"), iter->second->tab()->
-          GetEntryAtIndex(0)->GetVirtualURL());
-  EXPECT_EQ(GURL("http://foo2"), iter->second->tab()->
-          GetEntryAtIndex(1)->GetVirtualURL());
-  iter++;
-  ASSERT_EQ(2, iter->second->tab()->GetEntryCount());
-  EXPECT_EQ(GURL("http://bar1"), iter->second->tab()->
-      GetEntryAtIndex(0)->GetVirtualURL());
-  EXPECT_EQ(GURL("http://bar2"), iter->second->tab()->
-      GetEntryAtIndex(1)->GetVirtualURL());
-}
-
-// Test garbage collection of stale foreign sessions.
-TEST_F(SessionsSyncManagerTest, DoGarbageCollection) {
-  // Fill two instances of session specifics with a foreign session's data.
-  std::string tag1 = "tag1";
-  SessionID::id_type n1[] = {5, 10, 13, 17};
-  std::vector<SessionID::id_type> tab_list1(n1, n1 + arraysize(n1));
-  std::vector<sync_pb::SessionSpecifics> tabs1;
-  sync_pb::SessionSpecifics meta(helper()->BuildForeignSession(
-      tag1, tab_list1, &tabs1));
-  std::string tag2 = "tag2";
-  SessionID::id_type n2[] = {8, 15, 18, 20};
-  std::vector<SessionID::id_type> tab_list2(n2, n2 + arraysize(n2));
-  std::vector<sync_pb::SessionSpecifics> tabs2;
-  sync_pb::SessionSpecifics meta2(helper()->BuildForeignSession(
-      tag2, tab_list2, &tabs2));
-  // Set the modification time for tag1 to be 21 days ago, tag2 to 5 days ago.
-  base::Time tag1_time = base::Time::Now() - base::TimeDelta::FromDays(21);
-  base::Time tag2_time = base::Time::Now() - base::TimeDelta::FromDays(5);
-
-  syncer::SyncDataList foreign_data;
-  sync_pb::EntitySpecifics entity1, entity2;
-  entity1.mutable_session()->CopyFrom(meta);
-  entity2.mutable_session()->CopyFrom(meta2);
-  foreign_data.push_back(SyncData::CreateRemoteData(
-      1,
-      entity1,
-      tag1_time,
-      syncer::AttachmentIdList(),
-      syncer::AttachmentServiceProxyForTest::Create()));
-  foreign_data.push_back(SyncData::CreateRemoteData(
-      1,
-      entity2,
-      tag2_time,
-      syncer::AttachmentIdList(),
-      syncer::AttachmentServiceProxyForTest::Create()));
-  AddTabsToSyncDataList(tabs1, &foreign_data);
-  AddTabsToSyncDataList(tabs2, &foreign_data);
-
-  syncer::SyncChangeList output;
-  InitWithSyncDataTakeOutput(foreign_data, &output);
-  ASSERT_EQ(2U, output.size());
-  output.clear();
-
-  // Check that the foreign session was associated and retrieve the data.
-  std::vector<const SyncedSession*> foreign_sessions;
-  ASSERT_TRUE(manager()->GetAllForeignSessions(&foreign_sessions));
-  ASSERT_EQ(2U, foreign_sessions.size());
-  foreign_sessions.clear();
-
-  // Now garbage collect and verify the non-stale session is still there.
-  manager()->DoGarbageCollection();
-  ASSERT_EQ(5U, output.size());
-  EXPECT_EQ(SyncChange::ACTION_DELETE, output[0].change_type());
-  const SyncData data(output[0].sync_data());
-  EXPECT_EQ(tag1, syncer::SyncDataLocal(data).GetTag());
-  for (int i = 1; i < 5; i++) {
-    EXPECT_EQ(SyncChange::ACTION_DELETE, output[i].change_type());
-    const SyncData data(output[i].sync_data());
-    EXPECT_EQ(TabNodePool2::TabIdToTag(tag1, i),
-              syncer::SyncDataLocal(data).GetTag());
-  }
-
-  ASSERT_TRUE(manager()->GetAllForeignSessions(&foreign_sessions));
-  ASSERT_EQ(1U, foreign_sessions.size());
-  std::vector<std::vector<SessionID::id_type> > session_reference;
-  session_reference.push_back(tab_list2);
-  helper()->VerifySyncedSession(tag2, session_reference,
-                                *(foreign_sessions[0]));
-}
-
-// Test that an update to a previously considered "stale" session,
-// prior to garbage collection, will save the session from deletion.
-TEST_F(SessionsSyncManagerTest, GarbageCollectionHonoursUpdate) {
-  std::string tag1 = "tag1";
-  SessionID::id_type n1[] = {5, 10, 13, 17};
-  std::vector<SessionID::id_type> tab_list1(n1, n1 + arraysize(n1));
-  std::vector<sync_pb::SessionSpecifics> tabs1;
-  sync_pb::SessionSpecifics meta(helper()->BuildForeignSession(
-      tag1, tab_list1, &tabs1));
-  syncer::SyncDataList foreign_data;
-  sync_pb::EntitySpecifics entity1;
-  base::Time tag1_time = base::Time::Now() - base::TimeDelta::FromDays(21);
-  entity1.mutable_session()->CopyFrom(meta);
-  foreign_data.push_back(SyncData::CreateRemoteData(
-      1,
-      entity1,
-      tag1_time,
-      syncer::AttachmentIdList(),
-      syncer::AttachmentServiceProxyForTest::Create()));
-  AddTabsToSyncDataList(tabs1, &foreign_data);
-  syncer::SyncChangeList output;
-  InitWithSyncDataTakeOutput(foreign_data, &output);
-  ASSERT_EQ(2U, output.size());
-
-  // Update to a non-stale time.
-  sync_pb::EntitySpecifics update_entity;
-  update_entity.mutable_session()->CopyFrom(tabs1[0]);
-  syncer::SyncChangeList changes;
-  changes.push_back(
-      syncer::SyncChange(FROM_HERE,
-                         SyncChange::ACTION_UPDATE,
-                         syncer::SyncData::CreateRemoteData(
-                             1,
-                             update_entity,
-                             base::Time::Now(),
-                             syncer::AttachmentIdList(),
-                             syncer::AttachmentServiceProxyForTest::Create())));
-  manager()->ProcessSyncChanges(FROM_HERE, changes);
-
-  // Check that the foreign session was associated and retrieve the data.
-  std::vector<const SyncedSession*> foreign_sessions;
-  ASSERT_TRUE(manager()->GetAllForeignSessions(&foreign_sessions));
-  ASSERT_EQ(1U, foreign_sessions.size());
-  foreign_sessions.clear();
-
-  // Verify the now non-stale session does not get deleted.
-  manager()->DoGarbageCollection();
-  ASSERT_TRUE(manager()->GetAllForeignSessions(&foreign_sessions));
-  ASSERT_EQ(1U, foreign_sessions.size());
-  std::vector<std::vector<SessionID::id_type> > session_reference;
-  session_reference.push_back(tab_list1);
-  helper()->VerifySyncedSession(
-      tag1, session_reference, *(foreign_sessions[0]));
-}
-
-// Test that swapping WebContents for a tab is properly observed and handled
-// by the SessionsSyncManager.
-TEST_F(SessionsSyncManagerTest, CheckPrerenderedWebContentsSwap) {
-  AddTab(browser(), GURL("http://foo1"));
-  NavigateAndCommitActiveTab(GURL("http://foo2"));
-
-  syncer::SyncChangeList out;
-  InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out);
-  ASSERT_EQ(4U, out.size());  // Header, tab ADD, tab UPDATE, header UPDATE.
-
-  // To simulate WebContents swap during prerendering, create new WebContents
-  // and swap with old WebContents.
-  scoped_ptr<content::WebContents> old_web_contents;
-  old_web_contents.reset(browser()->tab_strip_model()->GetActiveWebContents());
-
-  // Create new WebContents, with the required tab helpers.
-  WebContents* new_web_contents = WebContents::CreateWithSessionStorage(
-      WebContents::CreateParams(profile()),
-      old_web_contents->GetController().GetSessionStorageNamespaceMap());
-  SessionTabHelper::CreateForWebContents(new_web_contents);
-  TabContentsSyncedTabDelegate::CreateForWebContents(new_web_contents);
-  new_web_contents->GetController()
-      .CopyStateFrom(old_web_contents->GetController());
-
-  // Swap the WebContents.
-  int index = browser()->tab_strip_model()->GetIndexOfWebContents(
-      old_web_contents.get());
-  browser()->tab_strip_model()->ReplaceWebContentsAt(index, new_web_contents);
-
-  ASSERT_EQ(9U, out.size());
-  EXPECT_EQ(SyncChange::ACTION_ADD, out[4].change_type());
-  EXPECT_EQ(SyncChange::ACTION_UPDATE, out[5].change_type());
-
-  // Navigate away.
-  NavigateAndCommitActiveTab(GURL("http://bar2"));
-
-  // Delete old WebContents. This should not crash.
-  old_web_contents.reset();
-
-  // Try more navigations and verify output size. This can also reveal
-  // bugs (leaks) on memcheck bots if the SessionSyncManager
-  // didn't properly clean up the tab pool or session tracker.
-  NavigateAndCommitActiveTab(GURL("http://bar3"));
-
-  AddTab(browser(), GURL("http://bar4"));
-  NavigateAndCommitActiveTab(GURL("http://bar5"));
-  ASSERT_EQ(19U, out.size());
-}
-
-namespace {
-class SessionNotificationObserver : public content::NotificationObserver {
- public:
-  SessionNotificationObserver() : notified_of_update_(false),
-                                  notified_of_refresh_(false) {
-    registrar_.Add(this, chrome::NOTIFICATION_FOREIGN_SESSION_UPDATED,
-                   content::NotificationService::AllSources());
-    registrar_.Add(this, chrome::NOTIFICATION_SYNC_REFRESH_LOCAL,
-                   content::NotificationService::AllSources());
-  }
-  virtual void Observe(int type,
-                       const content::NotificationSource& source,
-                       const content::NotificationDetails& details) OVERRIDE {
-    switch (type) {
-      case chrome::NOTIFICATION_FOREIGN_SESSION_UPDATED:
-        notified_of_update_ = true;
-        break;
-      case chrome::NOTIFICATION_SYNC_REFRESH_LOCAL:
-        notified_of_refresh_ = true;
-        break;
-      default:
-        NOTREACHED();
-        break;
-    }
-  }
-  bool notified_of_update() const { return notified_of_update_; }
-  bool notified_of_refresh() const { return notified_of_refresh_; }
-  void Reset() {
-    notified_of_update_ = false;
-    notified_of_refresh_ = false;
-  }
- private:
-  content::NotificationRegistrar registrar_;
-  bool notified_of_update_;
-  bool notified_of_refresh_;
-};
-}  // namespace
-
-// Test that NOTIFICATION_FOREIGN_SESSION_UPDATED is sent when processing
-// sync changes.
-TEST_F(SessionsSyncManagerTest, NotifiedOfUpdates) {
-  SessionNotificationObserver observer;
-  ASSERT_FALSE(observer.notified_of_update());
-  InitWithNoSyncData();
-
-  SessionID::id_type n[] = {5};
-  std::vector<sync_pb::SessionSpecifics> tabs1;
-  std::vector<SessionID::id_type> tab_list(n, n + arraysize(n));
-  sync_pb::SessionSpecifics meta(helper()->BuildForeignSession(
-      "tag1", tab_list, &tabs1));
-
-  syncer::SyncChangeList changes;
-  changes.push_back(MakeRemoteChange(1, meta, SyncChange::ACTION_ADD));
-  manager()->ProcessSyncChanges(FROM_HERE, changes);
-  EXPECT_TRUE(observer.notified_of_update());
-
-  changes.clear();
-  observer.Reset();
-  AddTabsToChangeList(tabs1, SyncChange::ACTION_ADD, &changes);
-  manager()->ProcessSyncChanges(FROM_HERE, changes);
-  EXPECT_TRUE(observer.notified_of_update());
-
-  changes.clear();
-  observer.Reset();
-  changes.push_back(MakeRemoteChange(1, meta, SyncChange::ACTION_DELETE));
-  manager()->ProcessSyncChanges(FROM_HERE, changes);
-  EXPECT_TRUE(observer.notified_of_update());
-}
-
-// Test that NOTIFICATION_FOREIGN_SESSION_UPDATED is sent when handling
-// local hide/removal of foreign session.
-TEST_F(SessionsSyncManagerTest, NotifiedOfLocalRemovalOfForeignSession) {
-  InitWithNoSyncData();
-  const std::string tag("tag1");
-  SessionID::id_type n[] = {5};
-  std::vector<sync_pb::SessionSpecifics> tabs1;
-  std::vector<SessionID::id_type> tab_list(n, n + arraysize(n));
-  sync_pb::SessionSpecifics meta(helper()->BuildForeignSession(
-      tag, tab_list, &tabs1));
-
-  syncer::SyncChangeList changes;
-  changes.push_back(MakeRemoteChange(1, meta, SyncChange::ACTION_ADD));
-  manager()->ProcessSyncChanges(FROM_HERE, changes);
-
-  SessionNotificationObserver observer;
-  ASSERT_FALSE(observer.notified_of_update());
-  manager()->DeleteForeignSession(tag);
-  ASSERT_TRUE(observer.notified_of_update());
-}
-
-#if defined(OS_ANDROID) || defined(OS_IOS)
-// Tests that opening the other devices page triggers a session sync refresh.
-// This page only exists on mobile platforms today; desktop has a
-// search-enhanced NTP without other devices.
-TEST_F(SessionsSyncManagerTest, NotifiedOfRefresh) {
-  SessionNotificationObserver observer;
-  ASSERT_FALSE(observer.notified_of_refresh());
-  InitWithNoSyncData();
-  AddTab(browser(), GURL("http://foo1"));
-  EXPECT_FALSE(observer.notified_of_refresh());
-  NavigateAndCommitActiveTab(GURL("chrome://newtab/#open_tabs"));
-  EXPECT_TRUE(observer.notified_of_refresh());
-}
-#endif  // defined(OS_ANDROID) || defined(OS_IOS)
-
-}  // namespace browser_sync
diff --git a/chrome/browser/sync/sessions2/sessions_util.cc b/chrome/browser/sync/sessions2/sessions_util.cc
deleted file mode 100644
index 8f48bba..0000000
--- a/chrome/browser/sync/sessions2/sessions_util.cc
+++ /dev/null
@@ -1,57 +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.
-
-#include "chrome/browser/sync/sessions2/sessions_util.h"
-
-#include "chrome/browser/sync/glue/synced_tab_delegate.h"
-#include "chrome/browser/sync/glue/synced_window_delegate.h"
-#include "chrome/common/url_constants.h"
-#include "content/public/browser/navigation_entry.h"
-#include "url/gurl.h"
-
-namespace browser_sync {
-
-namespace sessions_util {
-
-bool ShouldSyncTab(const SyncedTabDelegate& tab) {
-  if (SyncedWindowDelegate::FindSyncedWindowDelegateWithId(
-          tab.GetWindowId()) == NULL) {
-    return false;
-  }
-
-  // Does the tab have a valid NavigationEntry?
-  if (tab.ProfileIsManaged() && tab.GetBlockedNavigations()->size() > 0)
-    return true;
-
-  int entry_count = tab.GetEntryCount();
-  if (entry_count == 0)
-    return false;  // This deliberately ignores a new pending entry.
-
-  int pending_index = tab.GetPendingEntryIndex();
-  bool found_valid_url = false;
-  for (int i = 0; i < entry_count; ++i) {
-    const content::NavigationEntry* entry = (i == pending_index) ?
-       tab.GetPendingEntry() : tab.GetEntryAtIndex(i);
-    if (!entry)
-      return false;
-    const GURL& virtual_url = entry->GetVirtualURL();
-    if (virtual_url.is_valid() &&
-        !virtual_url.SchemeIs(content::kChromeUIScheme) &&
-        !virtual_url.SchemeIs(chrome::kChromeNativeScheme) &&
-        !virtual_url.SchemeIsFile()) {
-      found_valid_url = true;
-    }
-  }
-  return found_valid_url;
-}
-
-bool ShouldSyncWindow(const SyncedWindowDelegate* window) {
-  if (window->IsApp())
-    return false;
-  return window->IsTypeTabbed() || window->IsTypePopup();
-}
-
-}  // namespace sessions_util
-
-}  // namespace browser_sync
diff --git a/chrome/browser/sync/sessions2/sessions_util.h b/chrome/browser/sync/sessions2/sessions_util.h
deleted file mode 100644
index f0d490f..0000000
--- a/chrome/browser/sync/sessions2/sessions_util.h
+++ /dev/null
@@ -1,27 +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.
-
-#ifndef CHROME_BROWSER_SYNC_SESSIONS2_SESSIONS_UTIL_H_
-#define CHROME_BROWSER_SYNC_SESSIONS2_SESSIONS_UTIL_H_
-
-namespace browser_sync {
-
-class SyncedTabDelegate;
-class SyncedWindowDelegate;
-
-namespace sessions_util {
-
-// Control which local tabs we're interested in syncing.
-// Ensures that the tab has valid entries.
-bool ShouldSyncTab(const SyncedTabDelegate& tab);
-
-// Decides whether |window| is interesting for tab syncing
-// purposes.
-bool ShouldSyncWindow(const SyncedWindowDelegate* window);
-
-}  // namespace sessions_util
-
-}  // namespace browser_sync
-
-#endif  // CHROME_BROWSER_SYNC_SESSIONS2_SESSIONS_UTIL_H_
diff --git a/chrome/browser/sync/sessions2/synced_window_delegates_getter.cc b/chrome/browser/sync/sessions2/synced_window_delegates_getter.cc
deleted file mode 100644
index d1262a1..0000000
--- a/chrome/browser/sync/sessions2/synced_window_delegates_getter.cc
+++ /dev/null
@@ -1,20 +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.
-
-#include "chrome/browser/sync/sessions2/synced_window_delegates_getter.h"
-
-#include "chrome/browser/sync/glue/synced_window_delegate.h"
-
-namespace browser_sync {
-
-SyncedWindowDelegatesGetter::SyncedWindowDelegatesGetter() {}
-
-SyncedWindowDelegatesGetter::~SyncedWindowDelegatesGetter() {}
-
-const std::set<SyncedWindowDelegate*>
-SyncedWindowDelegatesGetter::GetSyncedWindowDelegates() {
-  return SyncedWindowDelegate::GetSyncedWindowDelegates();
-}
-
-}  // namespace browser_sync
diff --git a/chrome/browser/sync/sessions2/synced_window_delegates_getter.h b/chrome/browser/sync/sessions2/synced_window_delegates_getter.h
deleted file mode 100644
index d4ee8af..0000000
--- a/chrome/browser/sync/sessions2/synced_window_delegates_getter.h
+++ /dev/null
@@ -1,26 +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.
-
-#ifndef CHROME_BROWSER_SYNC_SESSIONS2_SYNCED_WINDOW_DELEGATES_GETTER_H_
-#define CHROME_BROWSER_SYNC_SESSIONS2_SYNCED_WINDOW_DELEGATES_GETTER_H_
-
-#include <set>
-#include "base/macros.h"
-
-namespace browser_sync {
-
-class SyncedWindowDelegate;
-
-class SyncedWindowDelegatesGetter {
- public:
-  SyncedWindowDelegatesGetter();
-  virtual ~SyncedWindowDelegatesGetter();
-  virtual const std::set<SyncedWindowDelegate*> GetSyncedWindowDelegates();
- private:
-  DISALLOW_COPY_AND_ASSIGN(SyncedWindowDelegatesGetter);
-};
-
-}  // namespace browser_sync
-
-#endif  // CHROME_BROWSER_SYNC_SESSIONS2_SYNCED_WINDOW_DELEGATES_GETTER_H_
diff --git a/chrome/browser/sync/sessions2/tab_node_pool2.cc b/chrome/browser/sync/sessions2/tab_node_pool2.cc
deleted file mode 100644
index b0c4dc4..0000000
--- a/chrome/browser/sync/sessions2/tab_node_pool2.cc
+++ /dev/null
@@ -1,188 +0,0 @@
-// Copyright 2013 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 "chrome/browser/sync/sessions2/tab_node_pool2.h"
-
-#include "base/format_macros.h"
-#include "base/logging.h"
-#include "base/strings/stringprintf.h"
-#include "sync/api/sync_change.h"
-#include "sync/api/sync_data.h"
-#include "sync/internal_api/public/base/model_type.h"
-#include "sync/protocol/session_specifics.pb.h"
-#include "sync/protocol/sync.pb.h"
-
-namespace browser_sync {
-
-const size_t TabNodePool2::kFreeNodesLowWatermark = 25;
-const size_t TabNodePool2::kFreeNodesHighWatermark = 100;
-
-TabNodePool2::TabNodePool2()
-    : max_used_tab_node_id_(kInvalidTabNodeID) {}
-
-// static
-// We start vending tab node IDs at 0.
-const int TabNodePool2::kInvalidTabNodeID = -1;
-
-TabNodePool2::~TabNodePool2() {}
-
-// Static
-std::string TabNodePool2::TabIdToTag(
-    const std::string machine_tag, int tab_node_id) {
-  return base::StringPrintf("%s %d", machine_tag.c_str(), tab_node_id);
-}
-
-void TabNodePool2::AddTabNode(int tab_node_id) {
-  DCHECK_GT(tab_node_id, kInvalidTabNodeID);
-  DCHECK(nodeid_tabid_map_.find(tab_node_id) == nodeid_tabid_map_.end());
-  unassociated_nodes_.insert(tab_node_id);
-  if (max_used_tab_node_id_ < tab_node_id)
-    max_used_tab_node_id_ = tab_node_id;
-}
-
-void TabNodePool2::AssociateTabNode(int tab_node_id,
-                                    SessionID::id_type tab_id) {
-  DCHECK_GT(tab_node_id, kInvalidTabNodeID);
-  // Remove sync node if it is in unassociated nodes pool.
-  std::set<int>::iterator u_it = unassociated_nodes_.find(tab_node_id);
-  if (u_it != unassociated_nodes_.end()) {
-    unassociated_nodes_.erase(u_it);
-  } else {
-    // This is a new node association, the sync node should be free.
-    // Remove node from free node pool and then associate it with the tab.
-    std::set<int>::iterator it = free_nodes_pool_.find(tab_node_id);
-    DCHECK(it != free_nodes_pool_.end());
-    free_nodes_pool_.erase(it);
-  }
-  DCHECK(nodeid_tabid_map_.find(tab_node_id) == nodeid_tabid_map_.end());
-  nodeid_tabid_map_[tab_node_id] = tab_id;
-}
-
-int TabNodePool2::GetFreeTabNode(syncer::SyncChangeList* append_changes) {
-  DCHECK_GT(machine_tag_.length(), 0U);
-  DCHECK(append_changes);
-  if (free_nodes_pool_.empty()) {
-    // Tab pool has no free nodes, allocate new one.
-    int tab_node_id = ++max_used_tab_node_id_;
-    std::string tab_node_tag = TabIdToTag(machine_tag_, tab_node_id);
-
-    // We fill the new node with just enough data so that in case of a crash/bug
-    // we can identify the node as our own on re-association and reuse it.
-    sync_pb::EntitySpecifics entity;
-    sync_pb::SessionSpecifics* specifics = entity.mutable_session();
-    specifics->set_session_tag(machine_tag_);
-    specifics->set_tab_node_id(tab_node_id);
-    append_changes->push_back(syncer::SyncChange(
-        FROM_HERE,
-        syncer::SyncChange::ACTION_ADD,
-        syncer::SyncData::CreateLocalData(tab_node_tag,
-                                          tab_node_tag,
-                                          entity)));
-
-    // Grow the pool by 1 since we created a new node.
-    DVLOG(1) << "Adding sync node " << tab_node_id
-             << " to tab node id pool";
-    free_nodes_pool_.insert(tab_node_id);
-    return tab_node_id;
-  } else {
-    // Return the next free node.
-    return *free_nodes_pool_.begin();
-  }
-}
-
-void TabNodePool2::FreeTabNode(int tab_node_id,
-                               syncer::SyncChangeList* append_changes) {
-  DCHECK(append_changes);
-  TabNodeIDToTabIDMap::iterator it = nodeid_tabid_map_.find(tab_node_id);
-  DCHECK(it != nodeid_tabid_map_.end());
-  nodeid_tabid_map_.erase(it);
-  FreeTabNodeInternal(tab_node_id, append_changes);
-}
-
-void TabNodePool2::FreeTabNodeInternal(
-    int tab_node_id,
-    syncer::SyncChangeList* append_changes) {
-  DCHECK(free_nodes_pool_.find(tab_node_id) == free_nodes_pool_.end());
-  DCHECK(append_changes);
-  free_nodes_pool_.insert(tab_node_id);
-
-  // If number of free nodes exceed kFreeNodesHighWatermark,
-  // delete sync nodes till number reaches kFreeNodesLowWatermark.
-  // Note: This logic is to mitigate temporary disassociation issues with old
-  // clients: http://crbug.com/259918. Newer versions do not need this.
-  if (free_nodes_pool_.size() > kFreeNodesHighWatermark) {
-    for (std::set<int>::iterator free_it = free_nodes_pool_.begin();
-         free_it != free_nodes_pool_.end();) {
-      const std::string tab_node_tag = TabIdToTag(machine_tag_, *free_it);
-      append_changes->push_back(syncer::SyncChange(
-          FROM_HERE,
-          syncer::SyncChange::ACTION_DELETE,
-          syncer::SyncData::CreateLocalDelete(tab_node_tag,
-                                              syncer::SESSIONS)));
-      free_nodes_pool_.erase(free_it++);
-      if (free_nodes_pool_.size() <= kFreeNodesLowWatermark) {
-        return;
-      }
-    }
-  }
-}
-
-bool TabNodePool2::IsUnassociatedTabNode(int tab_node_id) {
-  return unassociated_nodes_.find(tab_node_id) != unassociated_nodes_.end();
-}
-
-void TabNodePool2::ReassociateTabNode(int tab_node_id,
-                                      SessionID::id_type tab_id) {
-  // Remove from list of unassociated sync_nodes if present.
-  std::set<int>::iterator it = unassociated_nodes_.find(tab_node_id);
-  if (it != unassociated_nodes_.end()) {
-    unassociated_nodes_.erase(it);
-  } else {
-    // tab_node_id must be an already associated node.
-    DCHECK(nodeid_tabid_map_.find(tab_node_id) != nodeid_tabid_map_.end());
-  }
-  nodeid_tabid_map_[tab_node_id] = tab_id;
-}
-
-SessionID::id_type TabNodePool2::GetTabIdFromTabNodeId(
-    int tab_node_id) const {
-  TabNodeIDToTabIDMap::const_iterator it = nodeid_tabid_map_.find(tab_node_id);
-  if (it != nodeid_tabid_map_.end()) {
-    return it->second;
-  }
-  return kInvalidTabID;
-}
-
-void TabNodePool2::DeleteUnassociatedTabNodes(
-    syncer::SyncChangeList* append_changes) {
-  for (std::set<int>::iterator it = unassociated_nodes_.begin();
-       it != unassociated_nodes_.end();) {
-    FreeTabNodeInternal(*it, append_changes);
-    unassociated_nodes_.erase(it++);
-  }
-  DCHECK(unassociated_nodes_.empty());
-}
-
-// Clear tab pool.
-void TabNodePool2::Clear() {
-  unassociated_nodes_.clear();
-  free_nodes_pool_.clear();
-  nodeid_tabid_map_.clear();
-  max_used_tab_node_id_ = kInvalidTabNodeID;
-}
-
-size_t TabNodePool2::Capacity() const {
-  return nodeid_tabid_map_.size() + unassociated_nodes_.size() +
-         free_nodes_pool_.size();
-}
-
-bool TabNodePool2::Empty() const { return free_nodes_pool_.empty(); }
-
-bool TabNodePool2::Full() { return nodeid_tabid_map_.empty(); }
-
-void TabNodePool2::SetMachineTag(const std::string& machine_tag) {
-  machine_tag_ = machine_tag;
-}
-
-}  // namespace browser_sync
diff --git a/chrome/browser/sync/sessions2/tab_node_pool2.h b/chrome/browser/sync/sessions2/tab_node_pool2.h
deleted file mode 100644
index 700dc10..0000000
--- a/chrome/browser/sync/sessions2/tab_node_pool2.h
+++ /dev/null
@@ -1,165 +0,0 @@
-// Copyright 2013 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 CHROME_BROWSER_SYNC_SESSIONS2_TAB_NODE_POOL2_H_
-#define CHROME_BROWSER_SYNC_SESSIONS2_TAB_NODE_POOL2_H_
-
-#include <map>
-#include <set>
-#include <string>
-
-#include "base/basictypes.h"
-#include "base/gtest_prod_util.h"
-#include "chrome/browser/sessions/session_id.h"
-#include "sync/api/sync_change_processor.h"
-
-namespace syncer {
-class SyncChangeProcessor;
-}
-
-namespace browser_sync {
-
-// A pool for managing free/used tab sync nodes for the *local* session.
-// Performs lazy creation of sync nodes when necessary.
-// Note: We make use of the following "id's"
-// - a tab_id: created by session service, unique to this client
-// - a tab_node_id: the id for a particular sync tab node. This is used
-//   to generate the sync tab node tag through:
-//       tab_tag = StringPrintf("%s_%ui", local_session_tag, tab_node_id);
-//
-// A sync node can be in one of the three states:
-// 1. Associated   : Sync node is used and associated with a tab.
-// 2. Unassociated : Sync node is used but currently unassociated with any tab.
-//                   This is true for old nodes that remain from a session
-//                   restart. Nodes are only unassociated temporarily while the
-//                   model associator figures out which tabs belong to which
-//                   nodes. Eventually any remaining unassociated nodes are
-//                   freed.
-// 3. Free         : Sync node is unused.
-
-class TabNodePool2 {
- public:
-   TabNodePool2();
-  ~TabNodePool2();
-  enum InvalidTab {
-    kInvalidTabID = -1
-  };
-
-  // If free nodes > kFreeNodesHighWatermark, delete all free nodes until
-  // free nodes <= kFreeNodesLowWatermark.
-  static const size_t kFreeNodesLowWatermark;
-
-  // Maximum limit of FreeNodes allowed on the client.
-  static const size_t kFreeNodesHighWatermark;
-
-  static const int kInvalidTabNodeID;
-
-  // Build a sync tag from tab_node_id.
-  static std::string TabIdToTag(const std::string machine_tag,
-                                int tab_node_id);
-
-  // Returns the tab_node_id for the next free tab node. If none are available,
-  // creates a new tab node and adds it to free nodes pool. The free node can
-  // then be used to associate with a tab by calling AssociateTabNode.
-  // Note: The node is considered free until it has been associated. Repeated
-  // calls to GetFreeTabNode will return the same id until node has been
-  // associated.
-  // |change_output| *must* be provided. It is the TabNodePool's link to
-  // the SyncChange pipeline that exists in the caller context. If the need
-  // to create nodes arises in the implementation, associated SyncChanges will
-  // be appended to this list for later application by the caller via the
-  // SyncChangeProcessor.
-  int GetFreeTabNode(syncer::SyncChangeList* change_output);
-
-  // Removes association for |tab_node_id| and returns it to the free node pool.
-  // |change_output| *must* be provided. It is the TabNodePool's link to
-  // the SyncChange pipeline that exists in the caller's context. If the need
-  // to delete sync nodes arises in the implementation, associated SyncChanges
-  // will be appended to this list for later application by the caller via the
-  // SyncChangeProcessor.
-  void FreeTabNode(int tab_node_id, syncer::SyncChangeList* change_output);
-
-  // Associates |tab_node_id| with |tab_id|. |tab_node_id| should either be
-  // unassociated or free. If |tab_node_id| is free, |tab_node_id| is removed
-  // from the free node pool In order to associate a non free sync node,
-  // use ReassociateTabNode.
-  void AssociateTabNode(int tab_node_id, SessionID::id_type tab_id);
-
-  // Adds |tab_node_id| as an unassociated sync node.
-  // Note: this should only be called when we discover tab sync nodes from
-  // previous sessions, not for freeing tab nodes we created through
-  // GetFreeTabNode (use FreeTabNode below for that).
-  void AddTabNode(int tab_node_id);
-
-  // Returns the tab_id for |tab_node_id| if it is associated else returns
-  // kInvalidTabID.
-  SessionID::id_type GetTabIdFromTabNodeId(int tab_node_id) const;
-
-  // Reassociates |tab_node_id| with |tab_id|. |tab_node_id| must be either
-  // associated with a tab or in the set of unassociated nodes.
-  void ReassociateTabNode(int tab_node_id, SessionID::id_type tab_id);
-
-  // Returns true if |tab_node_id| is an unassociated tab node.
-  bool IsUnassociatedTabNode(int tab_node_id);
-
-  // Returns any unassociated nodes to the free node pool.
-  // |change_output| *must* be provided. It is the TabNodePool's link to
-  // the SyncChange pipeline that exists in the caller's context.
-  // See FreeTabNode for more detail.
-  void DeleteUnassociatedTabNodes(syncer::SyncChangeList* change_output);
-
-  // Clear tab pool.
-  void Clear();
-
-  // Return the number of tab nodes this client currently has allocated
-  // (including both free, unassociated and associated nodes)
-  size_t Capacity() const;
-
-  // Return empty status (all tab nodes are in use).
-  bool Empty() const;
-
-  // Return full status (no tab nodes are in use).
-  bool Full();
-
-  void SetMachineTag(const std::string& machine_tag);
-
- private:
-  friend class SyncTabNodePool2Test;
-  typedef std::map<int, SessionID::id_type> TabNodeIDToTabIDMap;
-
-  // Adds |tab_node_id| to free node pool.
-  // |change_output| *must* be provided. It is the TabNodePool's link to
-  // the SyncChange pipeline that exists in the caller's context.
-  // See FreeTabNode for more detail.
-  void FreeTabNodeInternal(int tab_node_id,
-                           syncer::SyncChangeList* change_output);
-
-  // Stores mapping of node ids associated with tab_ids, these are the used
-  // nodes of tab node pool.
-  // The nodes in the map can be returned to free tab node pool by calling
-  // FreeTabNode(tab_node_id).
-  TabNodeIDToTabIDMap nodeid_tabid_map_;
-
-  // The node ids for the set of free sync nodes.
-  std::set<int> free_nodes_pool_;
-
-  // The node ids that are added to pool using AddTabNode and are currently
-  // not associated with any tab. They can be reassociated using
-  // ReassociateTabNode.
-  std::set<int> unassociated_nodes_;
-
-  // The maximum used tab_node id for a sync node. A new sync node will always
-  // be created with max_used_tab_node_id_ + 1.
-  int max_used_tab_node_id_;
-
-  // The machine tag associated with this tab pool. Used in the title of new
-  // sync nodes.
-  std::string machine_tag_;
-
-  DISALLOW_COPY_AND_ASSIGN(TabNodePool2);
-};
-
-}  // namespace browser_sync
-
-#endif  // CHROME_BROWSER_SYNC_SESSIONS2_TAB_NODE_POOL2_H_
diff --git a/chrome/browser/sync/sessions2/tab_node_pool2_unittest.cc b/chrome/browser/sync/sessions2/tab_node_pool2_unittest.cc
deleted file mode 100644
index d0a9d63..0000000
--- a/chrome/browser/sync/sessions2/tab_node_pool2_unittest.cc
+++ /dev/null
@@ -1,262 +0,0 @@
-// Copyright 2013 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 "chrome/browser/sync/sessions2/tab_node_pool2.h"
-
-#include "base/logging.h"
-#include "sync/api/sync_change.h"
-#include "sync/protocol/session_specifics.pb.h"
-#include "sync/protocol/sync.pb.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace browser_sync {
-
-class SyncTabNodePool2Test : public testing::Test {
- protected:
-  SyncTabNodePool2Test() { pool_.SetMachineTag("tag"); }
-
-  int GetMaxUsedTabNodeId() const { return pool_.max_used_tab_node_id_; }
-
-  void AddFreeTabNodes(size_t size, const int node_ids[]);
-
-  TabNodePool2 pool_;
-};
-
-void SyncTabNodePool2Test::AddFreeTabNodes(
-    size_t size, const int node_ids[]) {
-  for (size_t i = 0; i < size; ++i) {
-    pool_.free_nodes_pool_.insert(node_ids[i]);
-  }
-}
-
-namespace {
-
-TEST_F(SyncTabNodePool2Test, TabNodeIdIncreases) {
-  syncer::SyncChangeList changes;
-  // max_used_tab_node_ always increases.
-  pool_.AddTabNode(10);
-  EXPECT_EQ(10, GetMaxUsedTabNodeId());
-  pool_.AddTabNode(5);
-  EXPECT_EQ(10, GetMaxUsedTabNodeId());
-  pool_.AddTabNode(1000);
-  EXPECT_EQ(1000, GetMaxUsedTabNodeId());
-  pool_.ReassociateTabNode(1000, 1);
-  pool_.ReassociateTabNode(5, 2);
-  pool_.ReassociateTabNode(10, 3);
-  // Freeing a tab node does not change max_used_tab_node_id_.
-  pool_.FreeTabNode(1000, &changes);
-  EXPECT_TRUE(changes.empty());
-  pool_.FreeTabNode(5, &changes);
-  EXPECT_TRUE(changes.empty());
-  pool_.FreeTabNode(10, &changes);
-  EXPECT_TRUE(changes.empty());
-  for (int i = 0; i < 3; ++i) {
-    pool_.AssociateTabNode(pool_.GetFreeTabNode(&changes), i + 1);
-    EXPECT_EQ(1000, GetMaxUsedTabNodeId());
-  }
-  EXPECT_TRUE(changes.empty());
-  EXPECT_EQ(1000, GetMaxUsedTabNodeId());
-  EXPECT_TRUE(pool_.Empty());
-}
-
-TEST_F(SyncTabNodePool2Test, OldTabNodesAddAndRemove) {
-  syncer::SyncChangeList changes;
-  // VerifyOldTabNodes are added.
-  pool_.AddTabNode(1);
-  pool_.AddTabNode(2);
-  EXPECT_EQ(2u, pool_.Capacity());
-  EXPECT_TRUE(pool_.Empty());
-  EXPECT_TRUE(pool_.IsUnassociatedTabNode(1));
-  EXPECT_TRUE(pool_.IsUnassociatedTabNode(2));
-  pool_.ReassociateTabNode(1, 2);
-  EXPECT_TRUE(pool_.Empty());
-  pool_.AssociateTabNode(2, 3);
-  EXPECT_FALSE(pool_.IsUnassociatedTabNode(1));
-  EXPECT_FALSE(pool_.IsUnassociatedTabNode(2));
-  pool_.FreeTabNode(2, &changes);
-  EXPECT_TRUE(changes.empty());
-  // 2 should be returned to free node pool_.
-  EXPECT_EQ(2u, pool_.Capacity());
-  // Should be able to free 1.
-  pool_.FreeTabNode(1, &changes);
-  EXPECT_FALSE(pool_.Empty());
-  EXPECT_TRUE(pool_.Full());
-  EXPECT_EQ(1, pool_.GetFreeTabNode(&changes));
-  EXPECT_TRUE(changes.empty());
-  pool_.AssociateTabNode(1, 1);
-  EXPECT_EQ(2, pool_.GetFreeTabNode(&changes));
-  EXPECT_TRUE(changes.empty());
-  pool_.AssociateTabNode(2, 1);
-  EXPECT_TRUE(pool_.Empty());
-  EXPECT_FALSE(pool_.Full());
-  EXPECT_FALSE(pool_.Full());
-}
-
-TEST_F(SyncTabNodePool2Test, OldTabNodesReassociation) {
-  // VerifyOldTabNodes are reassociated correctly.
-  pool_.AddTabNode(4);
-  pool_.AddTabNode(5);
-  pool_.AddTabNode(6);
-  EXPECT_EQ(3u, pool_.Capacity());
-  EXPECT_TRUE(pool_.Empty());
-  EXPECT_TRUE(pool_.IsUnassociatedTabNode(4));
-  pool_.ReassociateTabNode(4, 5);
-  pool_.AssociateTabNode(5, 6);
-  pool_.AssociateTabNode(6, 7);
-  // Free 5 and 6.
-  syncer::SyncChangeList changes;
-  pool_.FreeTabNode(5, &changes);
-  pool_.FreeTabNode(6, &changes);
-  EXPECT_TRUE(changes.empty());
-  // 5 and 6 nodes should not be unassociated.
-  EXPECT_FALSE(pool_.IsUnassociatedTabNode(5));
-  EXPECT_FALSE(pool_.IsUnassociatedTabNode(6));
-  // Free node pool should have 5 and 6.
-  EXPECT_FALSE(pool_.Empty());
-  EXPECT_EQ(3u, pool_.Capacity());
-
-  // Free all nodes
-  pool_.FreeTabNode(4, &changes);
-  EXPECT_TRUE(changes.empty());
-  EXPECT_TRUE(pool_.Full());
-  std::set<int> free_sync_ids;
-  for (int i = 0; i < 3; ++i) {
-    free_sync_ids.insert(pool_.GetFreeTabNode(&changes));
-    // GetFreeTabNode will return the same value till the node is
-    // reassociated.
-    pool_.AssociateTabNode(pool_.GetFreeTabNode(&changes), i + 1);
-  }
-
-  EXPECT_TRUE(pool_.Empty());
-  EXPECT_EQ(3u, free_sync_ids.size());
-  EXPECT_EQ(1u, free_sync_ids.count(4));
-  EXPECT_EQ(1u, free_sync_ids.count(5));
-  EXPECT_EQ(1u, free_sync_ids.count(6));
-}
-
-TEST_F(SyncTabNodePool2Test, Init) {
-  EXPECT_TRUE(pool_.Empty());
-  EXPECT_TRUE(pool_.Full());
-}
-
-TEST_F(SyncTabNodePool2Test, AddGet) {
-  syncer::SyncChangeList changes;
-  int free_nodes[] = {5, 10};
-  AddFreeTabNodes(2, free_nodes);
-
-  EXPECT_EQ(2U, pool_.Capacity());
-  EXPECT_EQ(5, pool_.GetFreeTabNode(&changes));
-  pool_.AssociateTabNode(5, 1);
-  EXPECT_FALSE(pool_.Empty());
-  EXPECT_FALSE(pool_.Full());
-  EXPECT_EQ(2U, pool_.Capacity());
-  // 5 is now used, should return 10.
-  EXPECT_EQ(10, pool_.GetFreeTabNode(&changes));
-}
-
-TEST_F(SyncTabNodePool2Test, All) {
-  syncer::SyncChangeList changes;
-  EXPECT_TRUE(pool_.Empty());
-  EXPECT_TRUE(pool_.Full());
-  EXPECT_EQ(0U, pool_.Capacity());
-
-  // GetFreeTabNode returns the lowest numbered free node.
-  EXPECT_EQ(0, pool_.GetFreeTabNode(&changes));
-  EXPECT_EQ(1U, changes.size());
-  EXPECT_FALSE(pool_.Empty());
-  EXPECT_TRUE(pool_.Full());
-  EXPECT_EQ(1U, pool_.Capacity());
-
-  // Associate 5, next free node should be 10.
-  pool_.AssociateTabNode(0, 1);
-  EXPECT_EQ(1, pool_.GetFreeTabNode(&changes));
-  EXPECT_EQ(2U, changes.size());
-  changes.clear();
-  pool_.AssociateTabNode(1, 2);
-  EXPECT_TRUE(pool_.Empty());
-  EXPECT_FALSE(pool_.Full());
-  EXPECT_EQ(2U, pool_.Capacity());
-  // Release them in reverse order.
-  pool_.FreeTabNode(1, &changes);
-  pool_.FreeTabNode(0, &changes);
-  EXPECT_EQ(2U, pool_.Capacity());
-  EXPECT_FALSE(pool_.Empty());
-  EXPECT_TRUE(pool_.Full());
-  EXPECT_EQ(0, pool_.GetFreeTabNode(&changes));
-  EXPECT_TRUE(changes.empty());
-  EXPECT_FALSE(pool_.Empty());
-  EXPECT_TRUE(pool_.Full());
-  EXPECT_EQ(2U, pool_.Capacity());
-  EXPECT_FALSE(pool_.Empty());
-  EXPECT_TRUE(pool_.Full());
-  pool_.AssociateTabNode(0, 1);
-  EXPECT_EQ(2U, pool_.Capacity());
-  EXPECT_EQ(1, pool_.GetFreeTabNode(&changes));
-  EXPECT_TRUE(changes.empty());
-  pool_.AssociateTabNode(1, 2);
-  EXPECT_TRUE(pool_.Empty());
-  EXPECT_FALSE(pool_.Full());
-  EXPECT_EQ(2U, pool_.Capacity());
-  // Release them again.
-  pool_.FreeTabNode(1, &changes);
-  pool_.FreeTabNode(0, &changes);
-  EXPECT_FALSE(pool_.Empty());
-  EXPECT_TRUE(pool_.Full());
-  EXPECT_EQ(2U, pool_.Capacity());
-  pool_.Clear();
-  EXPECT_TRUE(pool_.Empty());
-  EXPECT_TRUE(pool_.Full());
-  EXPECT_EQ(0U, pool_.Capacity());
-}
-
-TEST_F(SyncTabNodePool2Test, GetFreeTabNodeCreate) {
-  syncer::SyncChangeList changes;
-  EXPECT_EQ(0, pool_.GetFreeTabNode(&changes));
-  EXPECT_TRUE(changes[0].IsValid());
-  EXPECT_EQ(syncer::SyncChange::ACTION_ADD, changes[0].change_type());
-  EXPECT_TRUE(changes[0].sync_data().IsValid());
-  sync_pb::EntitySpecifics entity = changes[0].sync_data().GetSpecifics();
-  sync_pb::SessionSpecifics specifics(entity.session());
-  EXPECT_EQ(0, specifics.tab_node_id());
-}
-
-TEST_F(SyncTabNodePool2Test, TabPoolFreeNodeLimits) {
-  // Allocate TabNodePool::kFreeNodesHighWatermark + 1 nodes and verify that
-  // freeing the last node reduces the free node pool size to
-  // kFreeNodesLowWatermark.
-  syncer::SyncChangeList changes;
-  SessionID session_id;
-  std::vector<int> used_sync_ids;
-  for (size_t i = 1; i <= TabNodePool2::kFreeNodesHighWatermark + 1; ++i) {
-    session_id.set_id(i);
-    int sync_id = pool_.GetFreeTabNode(&changes);
-    pool_.AssociateTabNode(sync_id, i);
-    used_sync_ids.push_back(sync_id);
-  }
-
-  // Free all except one node.
-  int last_sync_id = used_sync_ids.back();
-  used_sync_ids.pop_back();
-
-  for (size_t i = 0; i < used_sync_ids.size(); ++i) {
-    pool_.FreeTabNode(used_sync_ids[i], &changes);
-  }
-
-  // Except one node all nodes should be in FreeNode pool.
-  EXPECT_FALSE(pool_.Full());
-  EXPECT_FALSE(pool_.Empty());
-  // Total capacity = 1 Associated Node + kFreeNodesHighWatermark free node.
-  EXPECT_EQ(TabNodePool2::kFreeNodesHighWatermark + 1, pool_.Capacity());
-
-  // Freeing the last sync node should drop the free nodes to
-  // kFreeNodesLowWatermark.
-  pool_.FreeTabNode(last_sync_id, &changes);
-  EXPECT_FALSE(pool_.Empty());
-  EXPECT_TRUE(pool_.Full());
-  EXPECT_EQ(TabNodePool2::kFreeNodesLowWatermark, pool_.Capacity());
-}
-
-}  // namespace
-
-}  // namespace browser_sync
diff --git a/chrome/browser/sync/startup_controller.cc b/chrome/browser/sync/startup_controller.cc
index ca0fb44..4a62773 100644
--- a/chrome/browser/sync/startup_controller.cc
+++ b/chrome/browser/sync/startup_controller.cc
@@ -68,7 +68,6 @@
 
 void StartupController::Reset(const syncer::ModelTypeSet registered_types) {
   received_start_request_ = false;
-  setup_in_progress_ = false;
   start_up_time_ = base::Time();
   start_backend_time_ = base::Time();
   // Don't let previous timers affect us post-reset.
diff --git a/chrome/browser/sync/startup_controller.h b/chrome/browser/sync/startup_controller.h
index b5ddc93..9a7aa92 100644
--- a/chrome/browser/sync/startup_controller.h
+++ b/chrome/browser/sync/startup_controller.h
@@ -56,6 +56,10 @@
 
   // Prepares this object for a new attempt to start sync, forgetting
   // whether or not preconditions were previously met.
+  // NOTE: This resets internal state managed by this class, but does not
+  // touch values that are explicitly set and reset by higher layers to
+  // tell this class whether a setup UI dialog is being shown to the user.
+  // See setup_in_progress_.
   void Reset(const syncer::ModelTypeSet registered_types);
 
   void set_setup_in_progress(bool in_progress);
@@ -88,6 +92,9 @@
 
   // If |true|, there is setup UI visible so we should not start downloading
   // data types.
+  // Note: this is explicitly controlled by higher layers (UI) and is meant to
+  // reflect what the UI claims the setup state to be. Therefore, only set this
+  // due to explicit requests to do so via set_setup_in_progress.
   bool setup_in_progress_;
 
   // If true, we want to automatically start sync signin whenever we have
diff --git a/chrome/browser/sync/startup_controller_unittest.cc b/chrome/browser/sync/startup_controller_unittest.cc
index fc96790..3468410 100644
--- a/chrome/browser/sync/startup_controller_unittest.cc
+++ b/chrome/browser/sync/startup_controller_unittest.cc
@@ -247,20 +247,19 @@
   EXPECT_TRUE(started());
 }
 
-// Test that setup-in-progress tracking is reset properly on Reset.
-// This scenario doesn't affect auto-start platforms.
+// Test that setup-in-progress tracking is persistent across a Reset.
 TEST_F(StartupControllerTest, ResetDuringSetup) {
   signin()->set_account(kTestUser);
   token_service()->IssueRefreshTokenForUser(kTestUser, kTestToken);
-  controller()->set_setup_in_progress(true);
-  controller()->Reset(syncer::UserTypes());
-  controller()->TryStart();
 
-  if (!browser_defaults::kSyncAutoStarts) {
-    EXPECT_FALSE(started());
-    EXPECT_EQ(kStateStringNotStarted,
-              controller()->GetBackendInitializationStateString());
-  }
+  // Simulate UI telling us setup is in progress.
+  controller()->set_setup_in_progress(true);
+
+  // This could happen if the UI triggers a stop-syncing permanently call.
+  controller()->Reset(syncer::UserTypes());
+
+  // From the UI's point of view, setup is still in progress.
+  EXPECT_TRUE(controller()->setup_in_progress());
 }
 
 }  // namespace browser_sync
diff --git a/chrome/browser/sync/sync_error_notifier_ash.cc b/chrome/browser/sync/sync_error_notifier_ash.cc
index 40ff587..3e4c796 100644
--- a/chrome/browser/sync/sync_error_notifier_ash.cc
+++ b/chrome/browser/sync/sync_error_notifier_ash.cc
@@ -51,7 +51,7 @@
   virtual void Click() OVERRIDE;
   virtual void ButtonClick(int button_index) OVERRIDE;
   virtual std::string id() const OVERRIDE;
-  virtual content::RenderViewHost* GetRenderViewHost() const OVERRIDE;
+  virtual content::WebContents* GetWebContents() const OVERRIDE;
 
  protected:
   virtual ~SyncNotificationDelegate();
@@ -95,7 +95,7 @@
   return id_;
 }
 
-content::RenderViewHost* SyncNotificationDelegate::GetRenderViewHost() const {
+content::WebContents* SyncNotificationDelegate::GetWebContents() const {
   return NULL;
 }
 
diff --git a/chrome/browser/sync/test/integration/bookmarks_helper.cc b/chrome/browser/sync/test/integration/bookmarks_helper.cc
index 08a6ec7..d83d6e8 100644
--- a/chrome/browser/sync/test/integration/bookmarks_helper.cc
+++ b/chrome/browser/sync/test/integration/bookmarks_helper.cc
@@ -16,6 +16,7 @@
 #include "chrome/browser/bookmarks/bookmark_model.h"
 #include "chrome/browser/bookmarks/bookmark_model_factory.h"
 #include "chrome/browser/bookmarks/bookmark_model_observer.h"
+#include "chrome/browser/bookmarks/bookmark_utils.h"
 #include "chrome/browser/favicon/favicon_service_factory.h"
 #include "chrome/browser/favicon/favicon_util.h"
 #include "chrome/browser/history/history_db_task.h"
@@ -226,10 +227,8 @@
         FaviconServiceFactory::GetForProfile(profile,
                                              Profile::EXPLICIT_ACCESS);
     if (favicon_source == bookmarks_helper::FROM_UI) {
-      favicon_service->SetFavicons(node->url(),
-                                   icon_url,
-                                   chrome::FAVICON,
-                                   image);
+      favicon_service->SetFavicons(
+          node->url(), icon_url, favicon_base::FAVICON, image);
     } else {
       browser_sync::BookmarkChangeProcessor::ApplyBookmarkFavicon(
           node, profile, icon_url, image.As1xPNGBytes());
@@ -423,13 +422,14 @@
                            int index,
                            const std::wstring& title,
                            const GURL& url) {
-  if (GetBookmarkModel(profile)->GetNodeByID(parent->id()) != parent) {
+  BookmarkModel* model = GetBookmarkModel(profile);
+  if (GetBookmarkNodeByID(model, parent->id()) != parent) {
     LOG(ERROR) << "Node " << parent->GetTitle() << " does not belong to "
                << "Profile " << profile;
     return NULL;
   }
-  const BookmarkNode* result = GetBookmarkModel(profile)->
-      AddURL(parent, index, base::WideToUTF16(title), url);
+  const BookmarkNode* result =
+      model->AddURL(parent, index, base::WideToUTF16(title), url);
   if (!result) {
     LOG(ERROR) << "Could not add bookmark " << title << " to Profile "
                << profile;
@@ -437,9 +437,9 @@
   }
   if (test()->use_verifier()) {
     const BookmarkNode* v_parent = NULL;
-    FindNodeInVerifier(GetBookmarkModel(profile), parent, &v_parent);
-    const BookmarkNode* v_node = GetVerifierBookmarkModel()->
-        AddURL(v_parent, index, base::WideToUTF16(title), url);
+    FindNodeInVerifier(model, parent, &v_parent);
+    const BookmarkNode* v_node = GetVerifierBookmarkModel()->AddURL(
+        v_parent, index, base::WideToUTF16(title), url);
     if (!v_node) {
       LOG(ERROR) << "Could not add bookmark " << title << " to the verifier";
       return NULL;
@@ -464,13 +464,14 @@
                               const BookmarkNode* parent,
                               int index,
                               const std::wstring& title) {
-  if (GetBookmarkModel(profile)->GetNodeByID(parent->id()) != parent) {
+  BookmarkModel* model = GetBookmarkModel(profile);
+  if (GetBookmarkNodeByID(model, parent->id()) != parent) {
     LOG(ERROR) << "Node " << parent->GetTitle() << " does not belong to "
                << "Profile " << profile;
     return NULL;
   }
-  const BookmarkNode* result = GetBookmarkModel(profile)->AddFolder(
-      parent, index, base::WideToUTF16(title));
+  const BookmarkNode* result =
+      model->AddFolder(parent, index, base::WideToUTF16(title));
   EXPECT_TRUE(result);
   if (!result) {
     LOG(ERROR) << "Could not add folder " << title << " to Profile "
@@ -479,7 +480,7 @@
   }
   if (test()->use_verifier()) {
     const BookmarkNode* v_parent = NULL;
-    FindNodeInVerifier(GetBookmarkModel(profile), parent, &v_parent);
+    FindNodeInVerifier(model, parent, &v_parent);
     const BookmarkNode* v_node = GetVerifierBookmarkModel()->AddFolder(
         v_parent, index, base::WideToUTF16(title));
     if (!v_node) {
@@ -494,15 +495,16 @@
 void SetTitle(int profile,
               const BookmarkNode* node,
               const std::wstring& new_title) {
-  ASSERT_EQ(GetBookmarkModel(profile)->GetNodeByID(node->id()), node)
+  BookmarkModel* model = GetBookmarkModel(profile);
+  ASSERT_EQ(GetBookmarkNodeByID(model, node->id()), node)
       << "Node " << node->GetTitle() << " does not belong to "
       << "Profile " << profile;
   if (test()->use_verifier()) {
     const BookmarkNode* v_node = NULL;
-    FindNodeInVerifier(GetBookmarkModel(profile), node, &v_node);
+    FindNodeInVerifier(model, node, &v_node);
     GetVerifierBookmarkModel()->SetTitle(v_node, base::WideToUTF16(new_title));
   }
-  GetBookmarkModel(profile)->SetTitle(node, base::WideToUTF16(new_title));
+  model->SetTitle(node, base::WideToUTF16(new_title));
 }
 
 void SetFavicon(int profile,
@@ -510,17 +512,18 @@
                 const GURL& icon_url,
                 const gfx::Image& image,
                 FaviconSource favicon_source) {
-  ASSERT_EQ(GetBookmarkModel(profile)->GetNodeByID(node->id()), node)
+  BookmarkModel* model = GetBookmarkModel(profile);
+  ASSERT_EQ(GetBookmarkNodeByID(model, node->id()), node)
       << "Node " << node->GetTitle() << " does not belong to "
       << "Profile " << profile;
-  ASSERT_EQ(BookmarkNode::URL, node->type())
-      << "Node " << node->GetTitle() << " must be a url.";
+  ASSERT_EQ(BookmarkNode::URL, node->type()) << "Node " << node->GetTitle()
+                                             << " must be a url.";
   if (urls_with_favicons_ == NULL)
     urls_with_favicons_ = new std::set<GURL>();
   urls_with_favicons_->insert(node->url());
   if (test()->use_verifier()) {
     const BookmarkNode* v_node = NULL;
-    FindNodeInVerifier(GetBookmarkModel(profile), node, &v_node);
+    FindNodeInVerifier(model, node, &v_node);
     SetFaviconImpl(test()->verifier(), v_node, icon_url, image, favicon_source);
   }
   SetFaviconImpl(test()->GetProfile(profile), node, icon_url, image,
@@ -530,19 +533,20 @@
 const BookmarkNode* SetURL(int profile,
                            const BookmarkNode* node,
                            const GURL& new_url) {
-  if (GetBookmarkModel(profile)->GetNodeByID(node->id()) != node) {
+  BookmarkModel* model = GetBookmarkModel(profile);
+  if (GetBookmarkNodeByID(model, node->id()) != node) {
     LOG(ERROR) << "Node " << node->GetTitle() << " does not belong to "
                << "Profile " << profile;
     return NULL;
   }
   if (test()->use_verifier()) {
     const BookmarkNode* v_node = NULL;
-    FindNodeInVerifier(GetBookmarkModel(profile), node, &v_node);
+    FindNodeInVerifier(model, node, &v_node);
     if (v_node->is_url())
       GetVerifierBookmarkModel()->SetURL(v_node, new_url);
   }
   if (node->is_url())
-    GetBookmarkModel(profile)->SetURL(node, new_url);
+    model->SetURL(node, new_url);
   return node;
 }
 
@@ -550,32 +554,32 @@
           const BookmarkNode* node,
           const BookmarkNode* new_parent,
           int index) {
-  ASSERT_EQ(GetBookmarkModel(profile)->GetNodeByID(node->id()), node)
+  BookmarkModel* model = GetBookmarkModel(profile);
+  ASSERT_EQ(GetBookmarkNodeByID(model, node->id()), node)
       << "Node " << node->GetTitle() << " does not belong to "
       << "Profile " << profile;
   if (test()->use_verifier()) {
     const BookmarkNode* v_new_parent = NULL;
     const BookmarkNode* v_node = NULL;
-    FindNodeInVerifier(GetBookmarkModel(profile), new_parent, &v_new_parent);
-    FindNodeInVerifier(GetBookmarkModel(profile), node, &v_node);
+    FindNodeInVerifier(model, new_parent, &v_new_parent);
+    FindNodeInVerifier(model, node, &v_node);
     GetVerifierBookmarkModel()->Move(v_node, v_new_parent, index);
   }
-  GetBookmarkModel(profile)->Move(node, new_parent, index);
+  model->Move(node, new_parent, index);
 }
 
-void Remove(int profile,
-            const BookmarkNode* parent,
-            int index) {
-  ASSERT_EQ(GetBookmarkModel(profile)->GetNodeByID(parent->id()), parent)
+void Remove(int profile, const BookmarkNode* parent, int index) {
+  BookmarkModel* model = GetBookmarkModel(profile);
+  ASSERT_EQ(GetBookmarkNodeByID(model, parent->id()), parent)
       << "Node " << parent->GetTitle() << " does not belong to "
       << "Profile " << profile;
   if (test()->use_verifier()) {
     const BookmarkNode* v_parent = NULL;
-    FindNodeInVerifier(GetBookmarkModel(profile), parent, &v_parent);
+    FindNodeInVerifier(model, parent, &v_parent);
     ASSERT_TRUE(NodesMatch(parent->GetChild(index), v_parent->GetChild(index)));
     GetVerifierBookmarkModel()->Remove(v_parent, index);
   }
-  GetBookmarkModel(profile)->Remove(parent, index);
+  model->Remove(parent, index);
 }
 
 void RemoveAll(int profile) {
@@ -592,19 +596,21 @@
 }
 
 void SortChildren(int profile, const BookmarkNode* parent) {
-  ASSERT_EQ(GetBookmarkModel(profile)->GetNodeByID(parent->id()), parent)
+  BookmarkModel* model = GetBookmarkModel(profile);
+  ASSERT_EQ(GetBookmarkNodeByID(model, parent->id()), parent)
       << "Node " << parent->GetTitle() << " does not belong to "
       << "Profile " << profile;
   if (test()->use_verifier()) {
     const BookmarkNode* v_parent = NULL;
-    FindNodeInVerifier(GetBookmarkModel(profile), parent, &v_parent);
+    FindNodeInVerifier(model, parent, &v_parent);
     GetVerifierBookmarkModel()->SortChildren(v_parent);
   }
-  GetBookmarkModel(profile)->SortChildren(parent);
+  model->SortChildren(parent);
 }
 
 void ReverseChildOrder(int profile, const BookmarkNode* parent) {
-  ASSERT_EQ(GetBookmarkModel(profile)->GetNodeByID(parent->id()), parent)
+  ASSERT_EQ(GetBookmarkNodeByID(GetBookmarkModel(profile), parent->id()),
+            parent)
       << "Node " << parent->GetTitle() << " does not belong to "
       << "Profile " << profile;
   int child_count = parent->child_count();
diff --git a/chrome/browser/sync/test/integration/multiple_client_passwords_sync_test.cc b/chrome/browser/sync/test/integration/multiple_client_passwords_sync_test.cc
index 24838c5..f2997c2 100644
--- a/chrome/browser/sync/test/integration/multiple_client_passwords_sync_test.cc
+++ b/chrome/browser/sync/test/integration/multiple_client_passwords_sync_test.cc
@@ -25,7 +25,9 @@
   DISALLOW_COPY_AND_ASSIGN(MultipleClientPasswordsSyncTest);
 };
 
-IN_PROC_BROWSER_TEST_F(MultipleClientPasswordsSyncTest, Sanity) {
+// This test was flaky on the Mac buildbot and also appears to be flaky
+// in local Linux (debug) builds. See crbug.com/363247.
+IN_PROC_BROWSER_TEST_F(MultipleClientPasswordsSyncTest, DISABLED_Sanity) {
   ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
 
   for (int i = 0; i < num_clients(); ++i) {
diff --git a/chrome/browser/sync/test/integration/sessions_helper.cc b/chrome/browser/sync/test/integration/sessions_helper.cc
index 720316e..cd25e2b 100644
--- a/chrome/browser/sync/test/integration/sessions_helper.cc
+++ b/chrome/browser/sync/test/integration/sessions_helper.cc
@@ -13,12 +13,11 @@
 #include "base/test/test_timeouts.h"
 #include "base/time/time.h"
 #include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/sync/glue/session_model_associator.h"
 #include "chrome/browser/sync/open_tabs_ui_delegate.h"
 #include "chrome/browser/sync/profile_sync_service.h"
 #include "chrome/browser/sync/profile_sync_service_factory.h"
-#include "chrome/browser/sync/sessions2/notification_service_sessions_router.h"
-#include "chrome/browser/sync/sessions2/sessions_sync_manager.h"
+#include "chrome/browser/sync/sessions/notification_service_sessions_router.h"
+#include "chrome/browser/sync/sessions/sessions_sync_manager.h"
 #include "chrome/browser/sync/test/integration/multi_client_status_change_checker.h"
 #include "chrome/browser/sync/test/integration/profile_sync_service_harness.h"
 #include "chrome/browser/sync/test/integration/sync_datatype_helper.h"
@@ -180,20 +179,12 @@
         return false;
       }
       if (!found) {
-        if (CommandLine::ForCurrentProcess()->HasSwitch(
-            switches::kDisableSyncSessionsV2)) {
-          ProfileSyncServiceFactory::GetForProfile(test()->GetProfile(index))->
-              GetSessionModelAssociatorDeprecated()->
-              BlockUntilLocalChangeForTest(TestTimeouts::action_max_timeout());
-          content::RunMessageLoop();
-        } else {
-          TabEventHandler handler;
-          browser_sync::NotificationServiceSessionsRouter router(
-              test()->GetProfile(index),
-              syncer::SyncableService::StartSyncFlare());
-          router.StartRoutingTo(&handler);
-          content::RunMessageLoop();
-        }
+        TabEventHandler handler;
+        browser_sync::NotificationServiceSessionsRouter router(
+            test()->GetProfile(index),
+            syncer::SyncableService::StartSyncFlare());
+        router.StartRoutingTo(&handler);
+        content::RunMessageLoop();
       }
     }
   }
diff --git a/chrome/browser/sync/test/integration/single_client_bookmarks_sync_test.cc b/chrome/browser/sync/test/integration/single_client_bookmarks_sync_test.cc
index a3d45e4..b89a8a0 100644
--- a/chrome/browser/sync/test/integration/single_client_bookmarks_sync_test.cc
+++ b/chrome/browser/sync/test/integration/single_client_bookmarks_sync_test.cc
@@ -2,11 +2,15 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "base/strings/utf_string_conversions.h"
+#include "chrome/browser/bookmarks/bookmark_model.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/sync/profile_sync_service.h"
 #include "chrome/browser/sync/test/integration/bookmarks_helper.h"
 #include "chrome/browser/sync/test/integration/sync_integration_test_util.h"
 #include "chrome/browser/sync/test/integration/sync_test.h"
+#include "components/bookmarks/core/browser/bookmark_service.h"
+#include "sync/test/fake_server/fake_server_verifier.h"
 #include "ui/base/layout.h"
 
 using bookmarks_helper::AddFolder;
@@ -28,10 +32,38 @@
   SingleClientBookmarksSyncTest() : SyncTest(SINGLE_CLIENT) {}
   virtual ~SingleClientBookmarksSyncTest() {}
 
+  // Verify that the local bookmark model (for the Profile corresponding to
+  // |index|) matches the data on the FakeServer. It is assumed that FakeServer
+  // is being used and each bookmark has a unique title. Folders are not
+  // verified.
+  void VerifyBookmarkModelMatchesFakeServer(int index);
+
  private:
   DISALLOW_COPY_AND_ASSIGN(SingleClientBookmarksSyncTest);
 };
 
+void SingleClientBookmarksSyncTest::VerifyBookmarkModelMatchesFakeServer(
+    int index) {
+  fake_server::FakeServerVerifier fake_server_verifier(GetFakeServer());
+  std::vector<BookmarkService::URLAndTitle> local_bookmarks;
+  GetBookmarkModel(index)->GetBookmarks(&local_bookmarks);
+
+  // Verify that the number of local bookmarks matches the number in the
+  // server.
+  ASSERT_TRUE(fake_server_verifier.VerifyEntityCountByType(
+      local_bookmarks.size(),
+      syncer::BOOKMARKS));
+
+  // Verify that all local bookmark titles exist once on the server.
+  std::vector<BookmarkService::URLAndTitle>::const_iterator it;
+  for (it = local_bookmarks.begin(); it != local_bookmarks.end(); ++it) {
+    ASSERT_TRUE(fake_server_verifier.VerifyEntityCountByTypeAndName(
+        1,
+        syncer::BOOKMARKS,
+        base::UTF16ToUTF8(it->title)));
+  }
+}
+
 IN_PROC_BROWSER_TEST_F(SingleClientBookmarksSyncTest, Sanity) {
   ASSERT_TRUE(SetupClients()) << "SetupClients() failed.";
 
@@ -143,6 +175,12 @@
   // Wait for newly added bookmarks to sync.
   ASSERT_TRUE(AwaitCommitActivityCompletion(GetSyncService((0))));
   ASSERT_TRUE(ModelMatchesVerifier(0));
+
+  // Only verify FakeServer data if FakeServer is being used.
+  // TODO(pvalenzuela): Use this style of verification in more tests once it is
+  // proven stable.
+  if (GetFakeServer())
+    VerifyBookmarkModelMatchesFakeServer(0);
 }
 
 // Test that a client doesn't mutate the favicon data in the process
diff --git a/chrome/browser/sync/test/integration/sync_test.cc b/chrome/browser/sync/test/integration/sync_test.cc
index 68bdae5..dea47a9 100644
--- a/chrome/browser/sync/test/integration/sync_test.cc
+++ b/chrome/browser/sync/test/integration/sync_test.cc
@@ -26,12 +26,12 @@
 #include "chrome/browser/history/history_service_factory.h"
 #include "chrome/browser/invalidation/invalidation_service_factory.h"
 #include "chrome/browser/invalidation/p2p_invalidation_service.h"
-#include "chrome/browser/invalidation/profile_invalidation_auth_provider.h"
 #include "chrome/browser/lifetime/application_lifetime.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_manager.h"
 #include "chrome/browser/search_engines/template_url_service.h"
 #include "chrome/browser/search_engines/template_url_service_factory.h"
+#include "chrome/browser/signin/profile_identity_provider.h"
 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
 #include "chrome/browser/signin/signin_manager_factory.h"
 #include "chrome/browser/sync/profile_sync_service.h"
@@ -141,11 +141,10 @@
     syncer::P2PNotificationTarget notification_target) {
   Profile* profile = static_cast<Profile*>(context);
   return new invalidation::P2PInvalidationService(
-      scoped_ptr<invalidation::InvalidationAuthProvider>(
-          new invalidation::ProfileInvalidationAuthProvider(
-              SigninManagerFactory::GetForProfile(profile),
-              ProfileOAuth2TokenServiceFactory::GetForProfile(profile),
-              LoginUIServiceFactory::GetForProfile(profile))),
+      scoped_ptr<IdentityProvider>(new ProfileIdentityProvider(
+          SigninManagerFactory::GetForProfile(profile),
+          ProfileOAuth2TokenServiceFactory::GetForProfile(profile),
+          LoginUIServiceFactory::GetForProfile(profile))),
       profile->GetRequestContext(),
       notification_target);
 }
@@ -915,10 +914,18 @@
       return sync_pb::SyncEnums::MIGRATION_DONE;
     case syncer::UNKNOWN_ERROR:
       return sync_pb::SyncEnums::UNKNOWN;
-    default:
-      NOTREACHED();
+    case syncer::INVALID_CREDENTIAL:
+      NOTREACHED();   // NOTREACHED() because auth error is not set through
+                      // error code in sync response.
+      return sync_pb::SyncEnums::UNKNOWN;
+    case syncer::DISABLED_BY_ADMIN:
+      return sync_pb::SyncEnums::DISABLED_BY_ADMIN;
+    case syncer::USER_ROLLBACK:
+      return sync_pb::SyncEnums::USER_ROLLBACK;
+    case syncer::NON_RETRIABLE_ERROR:
       return sync_pb::SyncEnums::UNKNOWN;
   }
+  return sync_pb::SyncEnums::UNKNOWN;
 }
 
 sync_pb::SyncEnums::Action GetClientToServerResponseAction(
@@ -934,12 +941,15 @@
       return sync_pb::SyncEnums::STOP_AND_RESTART_SYNC;
     case syncer::DISABLE_SYNC_ON_CLIENT:
       return sync_pb::SyncEnums::DISABLE_SYNC_ON_CLIENT;
+    case syncer::STOP_SYNC_FOR_DISABLED_ACCOUNT:
+    case syncer::DISABLE_SYNC_AND_ROLLBACK:
+      NOTREACHED();   // No corresponding proto action for these. Shouldn't
+                      // test.
+      return sync_pb::SyncEnums::UNKNOWN_ACTION;
     case syncer::UNKNOWN_ACTION:
       return sync_pb::SyncEnums::UNKNOWN_ACTION;
-    default:
-      NOTREACHED();
-      return sync_pb::SyncEnums::UNKNOWN_ACTION;
   }
+  return sync_pb::SyncEnums::UNKNOWN_ACTION;
 }
 
 }  // namespace
@@ -987,3 +997,7 @@
                  make_scoped_refptr(context_getter), proxy_config));
   done.Wait();
 }
+
+fake_server::FakeServer* SyncTest::GetFakeServer() const {
+  return fake_server_.get();
+}
diff --git a/chrome/browser/sync/test/integration/sync_test.h b/chrome/browser/sync/test/integration/sync_test.h
index bf94b6b..b9e734d 100644
--- a/chrome/browser/sync/test/integration/sync_test.h
+++ b/chrome/browser/sync/test/integration/sync_test.h
@@ -30,6 +30,10 @@
 class CommandLine;
 }
 
+namespace fake_server {
+class FakeServer;
+}
+
 namespace net {
 class FakeURLFetcherFactory;
 class ProxyConfig;
@@ -256,6 +260,10 @@
   // Triggers the creation the Synced Bookmarks folder on the server.
   void TriggerCreateSyncedBookmarks();
 
+  // Returns the FakeServer being used for the test or NULL if FakeServer is
+  // not being used.
+  fake_server::FakeServer* GetFakeServer() const;
+
  protected:
   // Add custom switches needed for running the test.
   virtual void AddTestSwitches(base::CommandLine* cl);
diff --git a/chrome/browser/sync_file_system/drive_backend/callback_helper.h b/chrome/browser/sync_file_system/drive_backend/callback_helper.h
new file mode 100644
index 0000000..2dd9796
--- /dev/null
+++ b/chrome/browser/sync_file_system/drive_backend/callback_helper.h
@@ -0,0 +1,77 @@
+// 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.
+
+#ifndef CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_CALLBACK_HELPER_H_
+#define CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_CALLBACK_HELPER_H_
+
+#include "base/bind.h"
+#include "base/location.h"
+#include "base/message_loop/message_loop_proxy.h"
+
+namespace sync_file_system {
+namespace drive_backend {
+
+namespace internal {
+
+template <typename T>
+typename base::enable_if<
+    base::internal::IsMoveOnlyType<T>::value,
+    base::internal::PassedWrapper<T> >::type
+RebindForward(T& t) {
+  return base::Passed(&t);
+}
+
+template <typename T>
+typename base::enable_if<
+    !base::internal::IsMoveOnlyType<T>::value,
+    T&>::type
+RebindForward(T& t) {
+  return t;
+}
+
+template <typename T>
+void RelayToTaskRunner1(base::SequencedTaskRunner* task_runner,
+                        const tracked_objects::Location& from_here,
+                        const base::Callback<void(T)>& callback,
+                        T arg) {
+  task_runner->PostTask(
+      from_here, base::Bind(callback, RebindForward(arg)));
+}
+
+template <typename T1, typename T2>
+void RelayToTaskRunner2(base::SequencedTaskRunner* task_runner,
+                        const tracked_objects::Location& from_here,
+                        const base::Callback<void(T1, T2)>& callback,
+                        T1 arg1,
+                        T2 arg2) {
+  task_runner->PostTask(
+      from_here, base::Bind(callback,
+                            RebindForward(arg1),
+                            RebindForward(arg2)));
+}
+
+}  // namespace internal
+
+template <typename T>
+base::Callback<void(T)> CreateRelayedCallback(
+    const base::Callback<void(T)>& callback) {
+  return base::Bind(&internal::RelayToTaskRunner1<T>,
+                    base::MessageLoopProxy::current(),
+                    FROM_HERE,
+                    callback);
+}
+
+template <typename T1, typename T2>
+base::Callback<void(T1, T2)> CreateRelayedCallback(
+    const base::Callback<void(T1, T2)>& callback) {
+  return base::Bind(&internal::RelayToTaskRunner2<T1, T2>,
+                    base::MessageLoopProxy::current(),
+                    FROM_HERE,
+                    callback);
+}
+
+}  // namespace drive_backend
+}  // namespace sync_file_system
+
+#endif  // CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_CALLBACK_HELPER_H_
diff --git a/chrome/browser/sync_file_system/drive_backend/callback_helper_unittest.cc b/chrome/browser/sync_file_system/drive_backend/callback_helper_unittest.cc
new file mode 100644
index 0000000..238d24f
--- /dev/null
+++ b/chrome/browser/sync_file_system/drive_backend/callback_helper_unittest.cc
@@ -0,0 +1,49 @@
+// 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.
+
+#include "chrome/browser/sync_file_system/drive_backend/callback_helper.h"
+
+#include "base/message_loop/message_loop.h"
+#include "base/run_loop.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace sync_file_system {
+namespace drive_backend {
+
+namespace {
+
+void SimpleCallback(bool* called, int) {
+  ASSERT_TRUE(called);
+  EXPECT_FALSE(*called);
+  *called = true;
+}
+
+void CallbackWithPassed(bool* called, scoped_ptr<int>) {
+  ASSERT_TRUE(called);
+  EXPECT_FALSE(*called);
+  *called = true;
+}
+
+}  // namespace
+
+TEST(DriveBackendCallbackHelperTest, CreateRelayedCallbackTest) {
+  base::MessageLoop message_loop;
+
+  bool called = false;
+  CreateRelayedCallback(base::Bind(&SimpleCallback, &called)).Run(0);
+  EXPECT_FALSE(called);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_TRUE(called);
+
+  called = false;
+  CreateRelayedCallback(
+      base::Bind(&CallbackWithPassed, &called))
+      .Run(scoped_ptr<int>(new int));
+  EXPECT_FALSE(called);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_TRUE(called);
+}
+
+}  // namespace drive_backend
+}  // namespace sync_file_system
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 4111194..aafc2bc 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
@@ -68,6 +68,7 @@
     context_.reset(new SyncEngineContext(
         fake_drive_service_.get(),
         drive_uploader_.get(),
+        base::MessageLoopProxy::current(),
         base::MessageLoopProxy::current()));
     context_->SetRemoteChangeProcessor(fake_remote_change_processor_.get());
 
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 9cdbbf1..1b6f950 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
@@ -72,21 +72,21 @@
         new drive::DriveUploader(drive_service.get(),
                                  file_task_runner_.get()));
 
+    fake_drive_service_helper_.reset(new FakeDriveServiceHelper(
+        drive_service.get(), uploader.get(),
+        kSyncRootFolderTitle));
+
     remote_sync_service_.reset(new SyncEngine(
         drive_service.PassAs<drive::DriveServiceInterface>(),
         uploader.Pass(),
+        file_task_runner_.get(),
         NULL, NULL, NULL));
     remote_sync_service_->AddServiceObserver(this);
-    remote_sync_service_->Initialize(
-        base_dir_.path(),
-        file_task_runner_.get(),
-        in_memory_env_.get());
+    remote_sync_service_->Initialize(base_dir_.path(),
+                                     base::MessageLoopProxy::current(),
+                                     in_memory_env_.get());
     remote_sync_service_->SetSyncEnabled(true);
 
-    fake_drive_service_helper_.reset(new FakeDriveServiceHelper(
-        fake_drive_service(), drive_uploader(),
-        kSyncRootFolderTitle));
-
     local_sync_service_->SetLocalChangeProcessor(remote_sync_service_.get());
     remote_sync_service_->SetRemoteChangeProcessor(local_sync_service_.get());
   }
@@ -464,10 +464,6 @@
         remote_sync_service_->GetDriveService());
   }
 
-  drive::DriveUploaderInterface* drive_uploader() {
-    return remote_sync_service_->GetDriveUploader();
-  }
-
   FakeDriveServiceHelper* fake_drive_service_helper() {
     return fake_drive_service_helper_.get();
   }
diff --git a/chrome/browser/sync_file_system/drive_backend/list_changes_task.cc b/chrome/browser/sync_file_system/drive_backend/list_changes_task.cc
index 88d8d48..0b97960 100644
--- a/chrome/browser/sync_file_system/drive_backend/list_changes_task.cc
+++ b/chrome/browser/sync_file_system/drive_backend/list_changes_task.cc
@@ -59,6 +59,14 @@
     return;
   }
 
+  SyncTaskManager::UpdateBlockingFactor(
+      token.Pass(),
+      scoped_ptr<BlockingFactor>(new BlockingFactor),
+      base::Bind(&ListChangesTask::StartListing,
+                 weak_ptr_factory_.GetWeakPtr()));
+}
+
+void ListChangesTask::StartListing(scoped_ptr<SyncTaskToken> token) {
   drive_service()->GetChangeList(
       metadata_database()->GetLargestFetchedChangeID() + 1,
       base::Bind(&ListChangesTask::DidListChanges,
@@ -93,9 +101,6 @@
         *resource_list->entries()[i]).release());
   }
 
-  // TODO(tzik): http://crbug.com/310964
-  // This may take long time to run in single task.  Run this as a background
-  // task.
   GURL next_feed;
   if (resource_list->GetNextFeedURL(&next_feed)) {
     drive_service()->GetRemainingChangeList(
@@ -114,11 +119,23 @@
     return;
   }
 
+  scoped_ptr<BlockingFactor> blocking_factor(new BlockingFactor);
+  blocking_factor->exclusive = true;
+  SyncTaskManager::UpdateBlockingFactor(
+      token.Pass(),
+      blocking_factor.Pass(),
+      base::Bind(&ListChangesTask::CheckInChangeList,
+                 weak_ptr_factory_.GetWeakPtr(),
+                 resource_list->largest_changestamp()));
+}
+
+void ListChangesTask::CheckInChangeList(int64 largest_change_id,
+                                        scoped_ptr<SyncTaskToken> token) {
   util::Log(logging::LOG_VERBOSE, FROM_HERE,
             "[Changes] Got %" PRIuS " changes, updating MetadataDatabase.",
             change_list_.size());
   metadata_database()->UpdateByChangeList(
-      resource_list->largest_changestamp(),
+      largest_change_id,
       change_list_.Pass(),
       base::Bind(&SyncTaskManager::NotifyTaskDone, base::Passed(&token)));
 }
diff --git a/chrome/browser/sync_file_system/drive_backend/list_changes_task.h b/chrome/browser/sync_file_system/drive_backend/list_changes_task.h
index 2e286b7..272e788 100644
--- a/chrome/browser/sync_file_system/drive_backend/list_changes_task.h
+++ b/chrome/browser/sync_file_system/drive_backend/list_changes_task.h
@@ -34,9 +34,12 @@
   virtual void RunPreflight(scoped_ptr<SyncTaskToken> token) OVERRIDE;
 
  private:
+  void StartListing(scoped_ptr<SyncTaskToken> token);
   void DidListChanges(scoped_ptr<SyncTaskToken> token,
                       google_apis::GDataErrorCode error,
                       scoped_ptr<google_apis::ResourceList> resource_list);
+  void CheckInChangeList(int64 largest_change_id,
+                         scoped_ptr<SyncTaskToken> token);
 
   bool IsContextReady();
   MetadataDatabase* metadata_database();
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 349e492..81c290c 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
@@ -61,6 +61,7 @@
     context_.reset(
         new SyncEngineContext(fake_drive_service_.get(),
                               drive_uploader_.get(),
+                              base::MessageLoopProxy::current(),
                               base::MessageLoopProxy::current()));
 
     SetUpRemoteFolders();
diff --git a/chrome/browser/sync_file_system/drive_backend/local_to_remote_syncer.cc b/chrome/browser/sync_file_system/drive_backend/local_to_remote_syncer.cc
index fb4df1b..ee5aace 100644
--- a/chrome/browser/sync_file_system/drive_backend/local_to_remote_syncer.cc
+++ b/chrome/browser/sync_file_system/drive_backend/local_to_remote_syncer.cc
@@ -384,7 +384,7 @@
   DCHECK(remote_file_tracker_->has_synced_details());
 
   base::PostTaskAndReplyWithResult(
-      sync_context_->GetBlockingTaskRunner(), FROM_HERE,
+      sync_context_->GetFileTaskRunner(), FROM_HERE,
       base::Bind(&drive::util::GetMd5Digest, local_path_),
       base::Bind(&LocalToRemoteSyncer::DidGetMD5ForUpload,
                  weak_ptr_factory_.GetWeakPtr(),
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 1dca18b..64ac9dc 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
@@ -68,6 +68,7 @@
     context_.reset(new SyncEngineContext(
         fake_drive_service_.get(),
         drive_uploader_.get(),
+        base::MessageLoopProxy::current(),
         base::MessageLoopProxy::current()));
     context_->SetRemoteChangeProcessor(fake_remote_change_processor_.get());
 
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 1e2e2aa..8f7bd1c 100644
--- a/chrome/browser/sync_file_system/drive_backend/metadata_database.cc
+++ b/chrome/browser/sync_file_system/drive_backend/metadata_database.cc
@@ -105,9 +105,17 @@
   return app_root_tracker.Pass();
 }
 
-void AdaptLevelDBStatusToSyncStatusCode(const SyncStatusCallback& callback,
-                                        const leveldb::Status& status) {
-  callback.Run(LevelDBStatusToSyncStatusCode(status));
+void WriteOnFileTaskRunner(
+    leveldb::DB* db,
+    scoped_ptr<leveldb::WriteBatch> batch,
+    scoped_refptr<base::SequencedTaskRunner> worker_task_runner,
+    const SyncStatusCallback& callback) {
+  DCHECK(db);
+  DCHECK(batch);
+  leveldb::Status status = db->Write(leveldb::WriteOptions(), batch.get());
+  worker_task_runner->PostTask(
+      FROM_HERE,
+      base::Bind(callback, LevelDBStatusToSyncStatusCode(status)));
 }
 
 std::string GetTrackerTitle(const FileTracker& tracker) {
@@ -353,11 +361,6 @@
   return SYNC_STATUS_OK;
 }
 
-void RunSoon(const tracked_objects::Location& from_here,
-             const base::Closure& closure) {
-  base::MessageLoopProxy::current()->PostTask(from_here, closure);
-}
-
 bool HasInvalidTitle(const std::string& title) {
   return title.empty() ||
       title.find('/') != std::string::npos ||
@@ -609,19 +612,40 @@
 
 }  // namespace
 
+struct MetadataDatabase::CreateParam {
+  scoped_refptr<base::SequencedTaskRunner> worker_task_runner;
+  scoped_refptr<base::SequencedTaskRunner> file_task_runner;
+  base::FilePath database_path;
+  leveldb::Env* env_override;
+
+  CreateParam(base::SequencedTaskRunner* worker_task_runner,
+              base::SequencedTaskRunner* file_task_runner,
+              const base::FilePath& database_path,
+              leveldb::Env* env_override)
+      : worker_task_runner(worker_task_runner),
+        file_task_runner(file_task_runner),
+        database_path(database_path),
+        env_override(env_override) {
+  }
+};
+
 DatabaseContents::DatabaseContents() {}
 DatabaseContents::~DatabaseContents() {}
 
 // static
-void MetadataDatabase::Create(base::SequencedTaskRunner* task_runner,
+void MetadataDatabase::Create(base::SequencedTaskRunner* worker_task_runner,
+                              base::SequencedTaskRunner* file_task_runner,
                               const base::FilePath& database_path,
                               leveldb::Env* env_override,
                               const CreateCallback& callback) {
-  task_runner->PostTask(FROM_HERE, base::Bind(
-      &CreateOnTaskRunner,
-      base::MessageLoopProxy::current(),
-      make_scoped_refptr(task_runner),
-      database_path, env_override, callback));
+  file_task_runner->PostTask(FROM_HERE, base::Bind(
+      &MetadataDatabase::CreateOnFileTaskRunner,
+      base::Passed(make_scoped_ptr(new CreateParam(
+          worker_task_runner,
+          file_task_runner,
+          database_path,
+          env_override))),
+      callback));
 }
 
 // static
@@ -630,30 +654,31 @@
     scoped_ptr<MetadataDatabase>* metadata_database_out) {
   scoped_ptr<MetadataDatabase> metadata_database(
       new MetadataDatabase(base::MessageLoopProxy::current(),
+                           base::MessageLoopProxy::current(),
                            base::FilePath(), NULL));
   metadata_database->db_ = db.Pass();
   SyncStatusCode status =
-      metadata_database->InitializeOnTaskRunner();
+      metadata_database->InitializeOnFileTaskRunner();
   if (status == SYNC_STATUS_OK)
     *metadata_database_out = metadata_database.Pass();
   return status;
 }
 
 MetadataDatabase::~MetadataDatabase() {
-  task_runner_->DeleteSoon(FROM_HERE, db_.release());
+  file_task_runner_->DeleteSoon(FROM_HERE, db_.release());
 }
 
 // static
 void MetadataDatabase::ClearDatabase(
     scoped_ptr<MetadataDatabase> metadata_database) {
   DCHECK(metadata_database);
-  scoped_refptr<base::SequencedTaskRunner> task_runner =
-      metadata_database->task_runner_;
+  scoped_refptr<base::SequencedTaskRunner> file_task_runner =
+      metadata_database->file_task_runner_;
   base::FilePath database_path = metadata_database->database_path_;
   DCHECK(!database_path.empty());
   metadata_database.reset();
 
-  task_runner->PostTask(
+  file_task_runner->PostTask(
       FROM_HERE,
       base::Bind(base::IgnoreResult(base::DeleteFile),
                  database_path, true /* recursive */));
@@ -715,13 +740,17 @@
                                    const SyncStatusCallback& callback) {
   if (index_->GetAppRootTracker(app_id)) {
     // The app-root is already registered.
-    RunSoon(FROM_HERE, base::Bind(callback, SYNC_STATUS_OK));
+    worker_task_runner_->PostTask(
+        FROM_HERE,
+        base::Bind(callback, SYNC_STATUS_OK));
     return;
   }
 
   TrackerIDSet trackers = index_->GetFileTrackerIDsByFileID(folder_id);
   if (trackers.empty()) {
-    RunSoon(FROM_HERE, base::Bind(callback, SYNC_DATABASE_ERROR_NOT_FOUND));
+    worker_task_runner_->PostTask(
+        FROM_HERE,
+        base::Bind(callback, SYNC_DATABASE_ERROR_NOT_FOUND));
     return;
   }
 
@@ -729,7 +758,9 @@
     // The folder is tracked by another tracker.
     util::Log(logging::LOG_WARNING, FROM_HERE,
               "Failed to register App for %s", app_id.c_str());
-    RunSoon(FROM_HERE, base::Bind(callback, SYNC_STATUS_HAS_CONFLICT));
+    worker_task_runner_->PostTask(
+        FROM_HERE,
+        base::Bind(callback, SYNC_STATUS_HAS_CONFLICT));
     return;
   }
 
@@ -737,7 +768,9 @@
   if (!sync_root_tracker_id) {
     util::Log(logging::LOG_WARNING, FROM_HERE,
               "Sync-root needs to be set up before registering app-root");
-    RunSoon(FROM_HERE, base::Bind(callback, SYNC_DATABASE_ERROR_NOT_FOUND));
+    worker_task_runner_->PostTask(
+        FROM_HERE,
+        base::Bind(callback, SYNC_DATABASE_ERROR_NOT_FOUND));
     return;
   }
 
@@ -745,7 +778,9 @@
       CloneFileTracker(FilterFileTrackersByParent(*index_, trackers,
                                                   sync_root_tracker_id));
   if (!tracker) {
-    RunSoon(FROM_HERE, base::Bind(callback, SYNC_DATABASE_ERROR_NOT_FOUND));
+    worker_task_runner_->PostTask(
+        FROM_HERE,
+        base::Bind(callback, SYNC_DATABASE_ERROR_NOT_FOUND));
     return;
   }
 
@@ -767,12 +802,16 @@
   scoped_ptr<FileTracker> tracker =
       CloneFileTracker(index_->GetFileTracker(tracker_id));
   if (!tracker) {
-    RunSoon(FROM_HERE, base::Bind(callback, SYNC_DATABASE_ERROR_NOT_FOUND));
+    worker_task_runner_->PostTask(
+        FROM_HERE,
+        base::Bind(callback, SYNC_DATABASE_ERROR_NOT_FOUND));
     return;
   }
 
   if (tracker->tracker_kind() == TRACKER_KIND_DISABLED_APP_ROOT) {
-    RunSoon(FROM_HERE, base::Bind(callback, SYNC_STATUS_OK));
+    worker_task_runner_->PostTask(
+        FROM_HERE,
+        base::Bind(callback, SYNC_STATUS_OK));
     return;
   }
 
@@ -796,12 +835,16 @@
   scoped_ptr<FileTracker> tracker =
       CloneFileTracker(index_->GetFileTracker(tracker_id));
   if (!tracker) {
-    RunSoon(FROM_HERE, base::Bind(callback, SYNC_DATABASE_ERROR_NOT_FOUND));
+    worker_task_runner_->PostTask(
+        FROM_HERE,
+        base::Bind(callback, SYNC_DATABASE_ERROR_NOT_FOUND));
     return;
   }
 
   if (tracker->tracker_kind() == TRACKER_KIND_APP_ROOT) {
-    RunSoon(FROM_HERE, base::Bind(callback, SYNC_STATUS_OK));
+    worker_task_runner_->PostTask(
+        FROM_HERE,
+        base::Bind(callback, SYNC_STATUS_OK));
     return;
   }
 
@@ -824,7 +867,9 @@
   scoped_ptr<FileTracker> tracker =
       CloneFileTracker(index_->GetFileTracker(tracker_id));
   if (!tracker || tracker->tracker_kind() == TRACKER_KIND_REGULAR) {
-    RunSoon(FROM_HERE, base::Bind(callback, SYNC_STATUS_OK));
+    worker_task_runner_->PostTask(
+        FROM_HERE,
+        base::Bind(callback, SYNC_STATUS_OK));
     return;
   }
 
@@ -1096,7 +1141,9 @@
                                  resource.file_id());
   if (!to_be_activated) {
     NOTREACHED();
-    RunSoon(FROM_HERE, base::Bind(callback, SYNC_STATUS_FAILED));
+    worker_task_runner_->PostTask(
+        FROM_HERE,
+        base::Bind(callback, SYNC_STATUS_FAILED));
     return;
   }
 
@@ -1121,7 +1168,9 @@
   if (!trackers.has_active()) {
     // It's OK that there is no folder to populate its children.
     // Inactive folders should ignore their contents updates.
-    RunSoon(FROM_HERE, base::Bind(callback, SYNC_STATUS_OK));
+    worker_task_runner_->PostTask(
+        FROM_HERE,
+        base::Bind(callback, SYNC_STATUS_OK));
     return;
   }
 
@@ -1129,7 +1178,9 @@
       CloneFileTracker(index_->GetFileTracker(trackers.active_tracker()));
   if (!folder_tracker) {
     NOTREACHED();
-    RunSoon(FROM_HERE, base::Bind(callback, SYNC_STATUS_FAILED));
+    worker_task_runner_->PostTask(
+        FROM_HERE,
+        base::Bind(callback, SYNC_STATUS_FAILED));
     return;
   }
 
@@ -1165,7 +1216,9 @@
                                      const SyncStatusCallback& callback) {
   const FileTracker* tracker = index_->GetFileTracker(tracker_id);
   if (!tracker) {
-    RunSoon(FROM_HERE, base::Bind(callback, SYNC_DATABASE_ERROR_NOT_FOUND));
+    worker_task_runner_->PostTask(
+        FROM_HERE,
+        base::Bind(callback, SYNC_DATABASE_ERROR_NOT_FOUND));
     return;
   }
   DCHECK(tracker);
@@ -1267,7 +1320,9 @@
   const FileMetadata* metadata = index_->GetFileMetadata(file_id);
   if (!metadata) {
     NOTREACHED();
-    RunSoon(FROM_HERE, base::Bind(callback, SYNC_STATUS_FAILED));
+    worker_task_runner_->PostTask(
+        FROM_HERE,
+        base::Bind(callback, SYNC_STATUS_FAILED));
     return ACTIVATION_PENDING;
   }
   std::string title = metadata->details().title();
@@ -1421,38 +1476,44 @@
   *app_ids = index_->GetRegisteredAppIDs();
 }
 
-MetadataDatabase::MetadataDatabase(base::SequencedTaskRunner* task_runner,
-                                   const base::FilePath& database_path,
-                                   leveldb::Env* env_override)
-    : task_runner_(task_runner),
+MetadataDatabase::MetadataDatabase(
+    base::SequencedTaskRunner* worker_task_runner,
+    base::SequencedTaskRunner* file_task_runner,
+    const base::FilePath& database_path,
+    leveldb::Env* env_override)
+    : worker_task_runner_(worker_task_runner),
+      file_task_runner_(file_task_runner),
       database_path_(database_path),
       env_override_(env_override),
       largest_known_change_id_(0),
       weak_ptr_factory_(this) {
-  DCHECK(task_runner);
+  DCHECK(worker_task_runner);
+  DCHECK(file_task_runner);
 }
 
 // static
-void MetadataDatabase::CreateOnTaskRunner(
-    base::SingleThreadTaskRunner* callback_runner,
-    base::SequencedTaskRunner* task_runner,
-    const base::FilePath& database_path,
-    leveldb::Env* env_override,
+void MetadataDatabase::CreateOnFileTaskRunner(
+    scoped_ptr<CreateParam> create_param,
     const CreateCallback& callback) {
   scoped_ptr<MetadataDatabase> metadata_database(
-      new MetadataDatabase(task_runner, database_path, env_override));
+      new MetadataDatabase(create_param->worker_task_runner.get(),
+                           create_param->file_task_runner.get(),
+                           create_param->database_path,
+                           create_param->env_override));
   SyncStatusCode status =
-      metadata_database->InitializeOnTaskRunner();
+      metadata_database->InitializeOnFileTaskRunner();
   if (status != SYNC_STATUS_OK)
     metadata_database.reset();
 
-  callback_runner->PostTask(FROM_HERE, base::Bind(
-      callback, status, base::Passed(&metadata_database)));
+  create_param->worker_task_runner->PostTask(
+      FROM_HERE,
+      base::Bind(
+          callback, status, base::Passed(&metadata_database)));
 }
 
-SyncStatusCode MetadataDatabase::InitializeOnTaskRunner() {
+SyncStatusCode MetadataDatabase::InitializeOnFileTaskRunner() {
   base::ThreadRestrictions::AssertIOAllowed();
-  DCHECK(task_runner_->RunsTasksOnCurrentThread());
+  DCHECK(file_task_runner_->RunsTasksOnCurrentThread());
 
   SyncStatusCode status = SYNC_STATUS_UNKNOWN;
   bool created = false;
@@ -1736,18 +1797,19 @@
 void MetadataDatabase::WriteToDatabase(scoped_ptr<leveldb::WriteBatch> batch,
                                        const SyncStatusCallback& callback) {
   if (!batch) {
-    RunSoon(FROM_HERE, base::Bind(callback, SYNC_STATUS_OK));
+    worker_task_runner_->PostTask(
+        FROM_HERE,
+        base::Bind(callback, SYNC_STATUS_OK));
     return;
   }
 
-  base::PostTaskAndReplyWithResult(
-      task_runner_.get(),
+  file_task_runner_->PostTask(
       FROM_HERE,
-      base::Bind(&leveldb::DB::Write,
+      base::Bind(&WriteOnFileTaskRunner,
                  base::Unretained(db_.get()),
-                 leveldb::WriteOptions(),
-                 base::Owned(batch.release())),
-      base::Bind(&AdaptLevelDBStatusToSyncStatusCode, callback));
+                 base::Passed(&batch),
+                 worker_task_runner_,
+                 callback));
 }
 
 scoped_ptr<base::ListValue> MetadataDatabase::DumpFiles(
diff --git a/chrome/browser/sync_file_system/drive_backend/metadata_database.h b/chrome/browser/sync_file_system/drive_backend/metadata_database.h
index b60d75b..2d61e5f 100644
--- a/chrome/browser/sync_file_system/drive_backend/metadata_database.h
+++ b/chrome/browser/sync_file_system/drive_backend/metadata_database.h
@@ -141,7 +141,8 @@
   // If |env_override| is non-NULL, internal LevelDB uses |env_override| instead
   // of leveldb::Env::Default().  Use leveldb::MemEnv in test code for faster
   // testing.
-  static void Create(base::SequencedTaskRunner* task_runner,
+  static void Create(base::SequencedTaskRunner* worker_task_runner,
+                     base::SequencedTaskRunner* file_task_runner,
                      const base::FilePath& database_path,
                      leveldb::Env* env_override,
                      const CreateCallback& callback);
@@ -354,16 +355,16 @@
 
  private:
   friend class MetadataDatabaseTest;
+  struct CreateParam;
 
-  MetadataDatabase(base::SequencedTaskRunner* task_runner,
+  MetadataDatabase(base::SequencedTaskRunner* worker_task_runner,
+                   base::SequencedTaskRunner* file_task_runner,
                    const base::FilePath& database_path,
                    leveldb::Env* env_override);
-  static void CreateOnTaskRunner(base::SingleThreadTaskRunner* callback_runner,
-                                 base::SequencedTaskRunner* task_runner,
-                                 const base::FilePath& database_path,
-                                 leveldb::Env* env_override,
-                                 const CreateCallback& callback);
-  SyncStatusCode InitializeOnTaskRunner();
+  static void CreateOnFileTaskRunner(
+      scoped_ptr<CreateParam> create_param,
+      const CreateCallback& callback);
+  SyncStatusCode InitializeOnFileTaskRunner();
   void BuildIndexes(DatabaseContents* contents);
 
   // Database manipulation methods.
@@ -423,7 +424,8 @@
                                   const std::string& file_id,
                                   leveldb::WriteBatch* batch);
 
-  scoped_refptr<base::SequencedTaskRunner> task_runner_;
+  scoped_refptr<base::SequencedTaskRunner> worker_task_runner_;
+  scoped_refptr<base::SequencedTaskRunner> file_task_runner_;
   base::FilePath database_path_;
   leveldb::Env* env_override_;
   scoped_ptr<leveldb::DB> db_;
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 df703d1..cf766a9 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
@@ -197,6 +197,7 @@
   SyncStatusCode InitializeMetadataDatabase() {
     SyncStatusCode status = SYNC_STATUS_UNKNOWN;
     MetadataDatabase::Create(base::MessageLoopProxy::current(),
+                             base::MessageLoopProxy::current(),
                              database_dir_.path(),
                              in_memory_env_.get(),
                              CreateResultReceiver(&status,
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 dbb0a20..6d102f1 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
@@ -58,6 +58,7 @@
     context_.reset(
         new SyncEngineContext(fake_drive_service_.get(),
                               drive_uploader_.get(),
+                              base::MessageLoopProxy::current(),
                               base::MessageLoopProxy::current()));
 
     ASSERT_EQ(google_apis::HTTP_CREATED,
diff --git a/chrome/browser/sync_file_system/drive_backend/remote_to_local_syncer.cc b/chrome/browser/sync_file_system/drive_backend/remote_to_local_syncer.cc
index 90c3bf0..73ceb90 100644
--- a/chrome/browser/sync_file_system/drive_backend/remote_to_local_syncer.cc
+++ b/chrome/browser/sync_file_system/drive_backend/remote_to_local_syncer.cc
@@ -671,9 +671,9 @@
 
 void RemoteToLocalSyncer::DownloadFile(const SyncStatusCallback& callback) {
   base::PostTaskAndReplyWithResult(
-      sync_context_->GetBlockingTaskRunner(), FROM_HERE,
+      sync_context_->GetFileTaskRunner(), FROM_HERE,
       base::Bind(&sync_file_system::drive_backend::CreateTemporaryFile,
-                 make_scoped_refptr(sync_context_->GetBlockingTaskRunner())),
+                 make_scoped_refptr(sync_context_->GetFileTaskRunner())),
       base::Bind(&RemoteToLocalSyncer::DidCreateTemporaryFileForDownload,
                  weak_ptr_factory_.GetWeakPtr(), callback));
 }
@@ -703,7 +703,7 @@
 
   base::FilePath path = file.path();
   base::PostTaskAndReplyWithResult(
-      sync_context_->GetBlockingTaskRunner(), FROM_HERE,
+      sync_context_->GetFileTaskRunner(), FROM_HERE,
       base::Bind(&drive::util::GetMd5Digest, path),
       base::Bind(&RemoteToLocalSyncer::DidCalculateMD5ForDownload,
                  weak_ptr_factory_.GetWeakPtr(),
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 1d5e33f..28e564c 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
@@ -68,6 +68,7 @@
 
     context_.reset(new SyncEngineContext(fake_drive_service_.get(),
                                          drive_uploader_.get(),
+                                         base::MessageLoopProxy::current(),
                                          base::MessageLoopProxy::current()));
     context_->SetRemoteChangeProcessor(fake_remote_change_processor_.get());
 
diff --git a/chrome/browser/sync_file_system/drive_backend/sync_engine.cc b/chrome/browser/sync_file_system/drive_backend/sync_engine.cc
index bd296c1..b80df21 100644
--- a/chrome/browser/sync_file_system/drive_backend/sync_engine.cc
+++ b/chrome/browser/sync_file_system/drive_backend/sync_engine.cc
@@ -18,6 +18,7 @@
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
 #include "chrome/browser/signin/signin_manager_factory.h"
+#include "chrome/browser/sync_file_system/drive_backend/callback_helper.h"
 #include "chrome/browser/sync_file_system/drive_backend/conflict_resolver.h"
 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_constants.h"
 #include "chrome/browser/sync_file_system/drive_backend/list_changes_task.h"
@@ -50,6 +51,53 @@
 class RemoteChangeProcessor;
 
 namespace drive_backend {
+
+class SyncEngine::WorkerObserver
+    : public SyncWorker::Observer {
+ public:
+  WorkerObserver(base::SequencedTaskRunner* ui_task_runner,
+                 base::WeakPtr<SyncEngine> sync_engine)
+      : ui_task_runner_(ui_task_runner),
+        sync_engine_(sync_engine){
+  }
+
+  virtual ~WorkerObserver() {}
+
+  virtual void OnPendingFileListUpdated(int item_count) OVERRIDE {
+    ui_task_runner_->PostTask(
+        FROM_HERE,
+        base::Bind(&SyncEngine::OnPendingFileListUpdated,
+                   sync_engine_,
+                   item_count));
+  }
+
+  virtual void OnFileStatusChanged(const fileapi::FileSystemURL& url,
+                                   SyncFileStatus file_status,
+                                   SyncAction sync_action,
+                                   SyncDirection direction) OVERRIDE {
+    ui_task_runner_->PostTask(
+        FROM_HERE,
+        base::Bind(&SyncEngine::OnFileStatusChanged,
+                   sync_engine_,
+                   url, file_status, sync_action, direction));
+  }
+
+
+  virtual void UpdateServiceState(RemoteServiceState state,
+                                  const std::string& description) OVERRIDE {
+    ui_task_runner_->PostTask(
+        FROM_HERE,
+        base::Bind(&SyncEngine::UpdateServiceState,
+                   sync_engine_, state, description));
+  }
+
+ private:
+  scoped_refptr<base::SequencedTaskRunner> ui_task_runner_;
+  base::WeakPtr<SyncEngine> sync_engine_;
+
+  DISALLOW_COPY_AND_ASSIGN(WorkerObserver);
+};
+
 namespace {
 
 void EmptyStatusCallback(SyncStatusCode status) {}
@@ -90,20 +138,26 @@
   ExtensionService* extension_service =
       extensions::ExtensionSystem::Get(context)->extension_service();
 
-  scoped_refptr<base::SequencedTaskRunner> task_runner(
+  scoped_refptr<base::SequencedTaskRunner> file_task_runner(
       worker_pool->GetSequencedTaskRunnerWithShutdownBehavior(
           worker_pool->GetSequenceToken(),
           base::SequencedWorkerPool::SKIP_ON_SHUTDOWN));
 
+  // TODO(peria): Create another task runner to manage SyncWorker.
+  scoped_refptr<base::SingleThreadTaskRunner>
+      worker_task_runner = base::MessageLoopProxy::current();
+
   scoped_ptr<drive_backend::SyncEngine> sync_engine(
       new SyncEngine(drive_service.Pass(),
                      drive_uploader.Pass(),
+                     worker_task_runner,
                      notification_manager,
                      extension_service,
                      signin_manager));
-  sync_engine->Initialize(GetSyncFileSystemDir(context->GetPath()),
-                          task_runner.get(),
-                          NULL);
+  sync_engine->Initialize(
+      GetSyncFileSystemDir(context->GetPath()),
+      file_task_runner.get(),
+      NULL);
 
   return sync_engine.Pass();
 }
@@ -122,20 +176,29 @@
   GetDriveService()->RemoveObserver(this);
   if (notification_manager_)
     notification_manager_->RemoveObserver(this);
+
+  // TODO(tzik): Destroy |sync_worker_| and |worker_observer_| on the worker.
 }
 
 void SyncEngine::Initialize(const base::FilePath& base_dir,
-                            base::SequencedTaskRunner* task_runner,
+                            base::SequencedTaskRunner* file_task_runner,
                             leveldb::Env* env_override) {
   scoped_ptr<SyncEngineContext> sync_engine_context(
       new SyncEngineContext(drive_service_.get(),
                             drive_uploader_.get(),
-                            task_runner));
-  // TODO(peria): Move this create function to thread pool.
-  sync_worker_ = SyncWorker::CreateOnWorker(weak_ptr_factory_.GetWeakPtr(),
-                                            base_dir,
-                                            sync_engine_context.Pass(),
-                                            env_override);
+                            base::MessageLoopProxy::current(),
+                            file_task_runner));
+  worker_observer_.reset(
+      new WorkerObserver(base::MessageLoopProxy::current(),
+                         weak_ptr_factory_.GetWeakPtr()));
+
+  // TODO(peria): Use PostTask on |worker_task_runner_| to call this function.
+  sync_worker_ = SyncWorker::CreateOnWorker(
+      base_dir,
+      worker_observer_.get(),
+      extension_service_,
+      sync_engine_context.Pass(),
+      env_override);
 
   if (notification_manager_)
     notification_manager_->AddObserver(this);
@@ -153,33 +216,56 @@
 
 void SyncEngine::RegisterOrigin(
     const GURL& origin, const SyncStatusCallback& callback) {
-  sync_worker_->RegisterOrigin(origin, callback);
+  worker_task_runner_->PostTask(
+      FROM_HERE,
+      base::Bind(&SyncWorker::RegisterOrigin,
+                 base::Unretained(sync_worker_.get()),
+                 origin, CreateRelayedCallback(callback)));
 }
 
 void SyncEngine::EnableOrigin(
     const GURL& origin, const SyncStatusCallback& callback) {
-  sync_worker_->EnableOrigin(origin, callback);
+  worker_task_runner_->PostTask(
+      FROM_HERE,
+      base::Bind(&SyncWorker::EnableOrigin,
+                 base::Unretained(sync_worker_.get()),
+                 origin, CreateRelayedCallback(callback)));
 }
 
 void SyncEngine::DisableOrigin(
     const GURL& origin, const SyncStatusCallback& callback) {
-  sync_worker_->DisableOrigin(origin, callback);
+  worker_task_runner_->PostTask(
+      FROM_HERE,
+      base::Bind(&SyncWorker::DisableOrigin,
+                 base::Unretained(sync_worker_.get()),
+                 origin, CreateRelayedCallback(callback)));
 }
 
 void SyncEngine::UninstallOrigin(
     const GURL& origin,
     UninstallFlag flag,
     const SyncStatusCallback& callback) {
-  sync_worker_->UninstallOrigin(origin, flag, callback);
+  worker_task_runner_->PostTask(
+      FROM_HERE,
+      base::Bind(&SyncWorker::UninstallOrigin,
+                 base::Unretained(sync_worker_.get()),
+                 origin, flag, CreateRelayedCallback(callback)));
 }
 
 void SyncEngine::ProcessRemoteChange(const SyncFileCallback& callback) {
-  sync_worker_->ProcessRemoteChange(callback);
+  worker_task_runner_->PostTask(
+      FROM_HERE,
+      base::Bind(&SyncWorker::ProcessRemoteChange,
+                 base::Unretained(sync_worker_.get()),
+                 CreateRelayedCallback(callback)));
 }
 
-void SyncEngine::SetRemoteChangeProcessor(
-    RemoteChangeProcessor* processor) {
-  sync_worker_->SetRemoteChangeProcessor(processor);
+void SyncEngine::SetRemoteChangeProcessor(RemoteChangeProcessor* processor) {
+  worker_task_runner_->PostTask(
+      FROM_HERE,
+      base::Bind(&SyncWorker::SetRemoteChangeProcessor,
+                 base::Unretained(sync_worker_.get()),
+                 processor));
 }
 
 LocalChangeProcessor* SyncEngine::GetLocalChangeProcessor() {
@@ -192,23 +278,31 @@
 }
 
 RemoteServiceState SyncEngine::GetCurrentState() const {
+  // TODO(peria): Post task
   return sync_worker_->GetCurrentState();
 }
 
 void SyncEngine::GetOriginStatusMap(OriginStatusMap* status_map) {
+  // TODO(peria): Make this route asynchronous.
   sync_worker_->GetOriginStatusMap(status_map);
 }
 
 scoped_ptr<base::ListValue> SyncEngine::DumpFiles(const GURL& origin) {
+  // TODO(peria): Make this route asynchronous.
   return sync_worker_->DumpFiles(origin);
 }
 
 scoped_ptr<base::ListValue> SyncEngine::DumpDatabase() {
+  // TODO(peria): Make this route asynchronous.
   return sync_worker_->DumpDatabase();
 }
 
 void SyncEngine::SetSyncEnabled(bool enabled) {
-  sync_worker_->SetSyncEnabled(enabled);
+  worker_task_runner_->PostTask(
+      FROM_HERE,
+      base::Bind(&SyncWorker::SetSyncEnabled,
+                 base::Unretained(sync_worker_.get()),
+                 enabled));
 }
 
 void SyncEngine::UpdateSyncEnabled(bool enabled) {
@@ -220,22 +314,26 @@
 
 SyncStatusCode SyncEngine::SetDefaultConflictResolutionPolicy(
     ConflictResolutionPolicy policy) {
+  // TODO(peria): Make this route asynchronous.
   return sync_worker_->SetDefaultConflictResolutionPolicy(policy);
 }
 
 SyncStatusCode SyncEngine::SetConflictResolutionPolicy(
     const GURL& origin,
     ConflictResolutionPolicy policy) {
+  // TODO(peria): Make this route asynchronous.
   return sync_worker_->SetConflictResolutionPolicy(origin, policy);
 }
 
 ConflictResolutionPolicy SyncEngine::GetDefaultConflictResolutionPolicy()
     const {
+  // TODO(peria): Make this route asynchronous.
   return sync_worker_->GetDefaultConflictResolutionPolicy();
 }
 
 ConflictResolutionPolicy SyncEngine::GetConflictResolutionPolicy(
     const GURL& origin) const {
+  // TODO(peria): Make this route asynchronous.
   return sync_worker_->GetConflictResolutionPolicy(origin);
 }
 
@@ -271,49 +369,75 @@
     const SyncFileMetadata& local_metadata,
     const fileapi::FileSystemURL& url,
     const SyncStatusCallback& callback) {
-  sync_worker_->ApplyLocalChange(
-      local_change, local_path, local_metadata, url, callback);
+  worker_task_runner_->PostTask(
+      FROM_HERE,
+      base::Bind(&SyncWorker::ApplyLocalChange,
+                 base::Unretained(sync_worker_.get()),
+                 local_change,
+                 local_path,
+                 local_metadata,
+                 url,
+                 CreateRelayedCallback(callback)));
 }
 
 SyncTaskManager* SyncEngine::GetSyncTaskManagerForTesting() {
+  // TODO(peria): Post task
   return sync_worker_->GetSyncTaskManager();
 }
 
 void SyncEngine::OnNotificationReceived() {
-  sync_worker_->OnNotificationReceived();
+  worker_task_runner_->PostTask(
+      FROM_HERE,
+      base::Bind(&SyncWorker::OnNotificationReceived,
+                 base::Unretained(sync_worker_.get())));
 }
 
 void SyncEngine::OnPushNotificationEnabled(bool) {}
 
 void SyncEngine::OnReadyToSendRequests() {
-  sync_worker_->OnReadyToSendRequests(
-      signin_manager_ ? signin_manager_->GetAuthenticatedAccountId() : "");
+  const std::string account_id =
+      signin_manager_ ? signin_manager_->GetAuthenticatedAccountId() : "";
+
+  worker_task_runner_->PostTask(
+      FROM_HERE,
+      base::Bind(&SyncWorker::OnReadyToSendRequests,
+                 base::Unretained(sync_worker_.get()),
+                 account_id));
 }
 
 void SyncEngine::OnRefreshTokenInvalid() {
-  sync_worker_->OnRefreshTokenInvalid();
+  worker_task_runner_->PostTask(
+      FROM_HERE,
+      base::Bind(&SyncWorker::OnRefreshTokenInvalid,
+                 base::Unretained(sync_worker_.get())));
 }
 
 void SyncEngine::OnNetworkChanged(
     net::NetworkChangeNotifier::ConnectionType type) {
-  sync_worker_->OnNetworkChanged(type);
+  worker_task_runner_->PostTask(
+      FROM_HERE,
+      base::Bind(&SyncWorker::OnNetworkChanged,
+                 base::Unretained(sync_worker_.get()),
+                 type));
 }
 
 drive::DriveServiceInterface* SyncEngine::GetDriveService() {
-  return sync_worker_->GetDriveService();
+  return drive_service_.get();
 }
 
 drive::DriveUploaderInterface* SyncEngine::GetDriveUploader() {
-  return sync_worker_->GetDriveUploader();
+  return drive_uploader_.get();
 }
 
 MetadataDatabase* SyncEngine::GetMetadataDatabase() {
+  // TODO(peria): Post task
   return sync_worker_->GetMetadataDatabase();
 }
 
 SyncEngine::SyncEngine(
     scoped_ptr<drive::DriveServiceInterface> drive_service,
     scoped_ptr<drive::DriveUploaderInterface> drive_uploader,
+    base::SequencedTaskRunner* worker_task_runner,
     drive::DriveNotificationManager* notification_manager,
     ExtensionServiceInterface* extension_service,
     SigninManagerBase* signin_manager)
@@ -322,42 +446,31 @@
       notification_manager_(notification_manager),
       extension_service_(extension_service),
       signin_manager_(signin_manager),
+      worker_task_runner_(worker_task_runner),
       weak_ptr_factory_(this) {}
 
-void SyncEngine::DidProcessRemoteChange(RemoteToLocalSyncer* syncer) {
-  if (syncer->sync_action() != SYNC_ACTION_NONE && syncer->url().is_valid()) {
-    FOR_EACH_OBSERVER(FileStatusObserver,
-                      file_status_observers_,
-                      OnFileStatusChanged(syncer->url(),
-                                          SYNC_FILE_STATUS_SYNCED,
-                                          syncer->sync_action(),
-                                          SYNC_DIRECTION_REMOTE_TO_LOCAL));
-  }
+void SyncEngine::OnPendingFileListUpdated(int item_count) {
+  FOR_EACH_OBSERVER(
+      Observer,
+      service_observers_,
+      OnRemoteChangeQueueUpdated(item_count));
 }
 
-void SyncEngine::DidApplyLocalChange(LocalToRemoteSyncer* syncer,
-                                     SyncStatusCode status) {
-  if ((status == SYNC_STATUS_OK || status == SYNC_STATUS_RETRY) &&
-      syncer->url().is_valid() &&
-      syncer->sync_action() != SYNC_ACTION_NONE) {
-    fileapi::FileSystemURL updated_url = syncer->url();
-    if (!syncer->target_path().empty()) {
-      updated_url = CreateSyncableFileSystemURL(syncer->url().origin(),
-                                                syncer->target_path());
-    }
-    FOR_EACH_OBSERVER(FileStatusObserver,
-                      file_status_observers_,
-                      OnFileStatusChanged(updated_url,
-                                          SYNC_FILE_STATUS_SYNCED,
-                                          syncer->sync_action(),
-                                          SYNC_DIRECTION_LOCAL_TO_REMOTE));
-  }
+void SyncEngine::OnFileStatusChanged(const fileapi::FileSystemURL& url,
+                                     SyncFileStatus file_status,
+                                     SyncAction sync_action,
+                                     SyncDirection direction) {
+  FOR_EACH_OBSERVER(FileStatusObserver,
+                    file_status_observers_,
+                    OnFileStatusChanged(
+                        url, file_status, sync_action, direction));
 }
 
-void SyncEngine::UpdateServiceState(const std::string& description) {
+void SyncEngine::UpdateServiceState(RemoteServiceState state,
+                                    const std::string& description) {
   FOR_EACH_OBSERVER(
       Observer, service_observers_,
-      OnRemoteServiceStateUpdated(GetCurrentState(), description));
+      OnRemoteServiceStateUpdated(state, description));
 }
 
 void SyncEngine::UpdateRegisteredApps() {
@@ -399,13 +512,5 @@
   }
 }
 
-void SyncEngine::NotifyLastOperationStatus() {
-  FOR_EACH_OBSERVER(
-      Observer,
-      service_observers_,
-      OnRemoteChangeQueueUpdated(
-          GetMetadataDatabase()->CountDirtyTracker()));
-}
-
 }  // namespace drive_backend
 }  // namespace sync_file_system
diff --git a/chrome/browser/sync_file_system/drive_backend/sync_engine.h b/chrome/browser/sync_file_system/drive_backend/sync_engine.h
index 2ea81e5..7c200a4 100644
--- a/chrome/browser/sync_file_system/drive_backend/sync_engine.h
+++ b/chrome/browser/sync_file_system/drive_backend/sync_engine.h
@@ -15,6 +15,8 @@
 #include "chrome/browser/drive/drive_service_interface.h"
 #include "chrome/browser/sync_file_system/local_change_processor.h"
 #include "chrome/browser/sync_file_system/remote_file_sync_service.h"
+#include "chrome/browser/sync_file_system/sync_action.h"
+#include "chrome/browser/sync_file_system/sync_direction.h"
 #include "net/base/network_change_notifier.h"
 
 class ExtensionServiceInterface;
@@ -62,10 +64,9 @@
 
   virtual ~SyncEngine();
 
-  void Initialize(
-      const base::FilePath& base_dir,
-      base::SequencedTaskRunner* task_runner,
-      leveldb::Env* env_override);
+  void Initialize(const base::FilePath& base_dir,
+                  base::SequencedTaskRunner* file_task_runner,
+                  leveldb::Env* env_override);
 
   // RemoteFileSyncService overrides.
   virtual void AddServiceObserver(SyncServiceObserver* observer) OVERRIDE;
@@ -139,24 +140,28 @@
   // Notifies update of sync status to each observer.
   void UpdateSyncEnabled(bool enabled);
 
+  void OnPendingFileListUpdated(int item_count);
+  void OnFileStatusChanged(const fileapi::FileSystemURL& url,
+                           SyncFileStatus file_status,
+                           SyncAction sync_action,
+                           SyncDirection direction);
+  void UpdateServiceState(RemoteServiceState state,
+                          const std::string& description);
+
  private:
+  class WorkerObserver;
+
   friend class DriveBackendSyncTest;
   friend class SyncEngineTest;
-  // TODO(peria): Remove friendship with SyncWorker
-  friend class SyncWorker;
 
   SyncEngine(scoped_ptr<drive::DriveServiceInterface> drive_service,
              scoped_ptr<drive::DriveUploaderInterface> drive_uploader,
+             base::SequencedTaskRunner* worker_task_runner,
              drive::DriveNotificationManager* notification_manager,
              ExtensionServiceInterface* extension_service,
              SigninManagerBase* signin_manager);
 
-  void DidProcessRemoteChange(RemoteToLocalSyncer* syncer);
-  void DidApplyLocalChange(LocalToRemoteSyncer* syncer,
-                           SyncStatusCode status);
-  void UpdateServiceState(const std::string& description);
   void UpdateRegisteredApps();
-  void NotifyLastOperationStatus();
 
   scoped_ptr<drive::DriveServiceInterface> drive_service_;
   scoped_ptr<drive::DriveUploaderInterface> drive_uploader_;
@@ -172,7 +177,9 @@
   ObserverList<SyncServiceObserver> service_observers_;
   ObserverList<FileStatusObserver> file_status_observers_;
 
+  scoped_ptr<WorkerObserver> worker_observer_;
   scoped_ptr<SyncWorker> sync_worker_;
+  scoped_refptr<base::SequencedTaskRunner> worker_task_runner_;
 
   base::WeakPtrFactory<SyncEngine> weak_ptr_factory_;
   DISALLOW_COPY_AND_ASSIGN(SyncEngine);
diff --git a/chrome/browser/sync_file_system/drive_backend/sync_engine_context.cc b/chrome/browser/sync_file_system/drive_backend/sync_engine_context.cc
index f87ab55..b8cadb9 100644
--- a/chrome/browser/sync_file_system/drive_backend/sync_engine_context.cc
+++ b/chrome/browser/sync_file_system/drive_backend/sync_engine_context.cc
@@ -19,11 +19,13 @@
 SyncEngineContext::SyncEngineContext(
     drive::DriveServiceInterface* drive_service,
     drive::DriveUploaderInterface* drive_uploader,
-    base::SequencedTaskRunner* task_runner)
+    base::SequencedTaskRunner* ui_task_runner,
+    base::SequencedTaskRunner* file_task_runner)
     : drive_service_(drive_service),
       drive_uploader_(drive_uploader),
       remote_change_processor_(NULL),
-      task_runner_(task_runner) {}
+      ui_task_runner_(ui_task_runner),
+      file_task_runner_(file_task_runner) {}
 
 SyncEngineContext::~SyncEngineContext() {}
 
@@ -47,8 +49,12 @@
   return remote_change_processor_;
 }
 
-base::SequencedTaskRunner* SyncEngineContext::GetBlockingTaskRunner() {
-  return task_runner_.get();
+base::SequencedTaskRunner* SyncEngineContext::GetUiTaskRunner() {
+  return ui_task_runner_.get();
+}
+
+base::SequencedTaskRunner* SyncEngineContext::GetFileTaskRunner() {
+  return file_task_runner_.get();
 }
 
 void SyncEngineContext::SetMetadataDatabase(
diff --git a/chrome/browser/sync_file_system/drive_backend/sync_engine_context.h b/chrome/browser/sync_file_system/drive_backend/sync_engine_context.h
index e3e32d6..fe23f8b 100644
--- a/chrome/browser/sync_file_system/drive_backend/sync_engine_context.h
+++ b/chrome/browser/sync_file_system/drive_backend/sync_engine_context.h
@@ -32,14 +32,16 @@
   SyncEngineContext(
       drive::DriveServiceInterface* drive_service,
       drive::DriveUploaderInterface* drive_uploader,
-      base::SequencedTaskRunner* task_runner);
+      base::SequencedTaskRunner* ui_task_runner,
+      base::SequencedTaskRunner* file_task_runner);
   ~SyncEngineContext();
 
   drive::DriveServiceInterface* GetDriveService();
   drive::DriveUploaderInterface* GetDriveUploader();
   MetadataDatabase* GetMetadataDatabase();
   RemoteChangeProcessor* GetRemoteChangeProcessor();
-  base::SequencedTaskRunner* GetBlockingTaskRunner();
+  base::SequencedTaskRunner* GetUiTaskRunner();
+  base::SequencedTaskRunner* GetFileTaskRunner();
 
   void SetMetadataDatabase(scoped_ptr<MetadataDatabase> metadata_database);
   void SetRemoteChangeProcessor(RemoteChangeProcessor* remote_change_processor);
@@ -52,7 +54,8 @@
   RemoteChangeProcessor* remote_change_processor_;
 
   scoped_ptr<MetadataDatabase> metadata_database_;
-  scoped_refptr<base::SequencedTaskRunner> task_runner_;
+  scoped_refptr<base::SequencedTaskRunner> ui_task_runner_;
+  scoped_refptr<base::SequencedTaskRunner> file_task_runner_;
 
   DISALLOW_COPY_AND_ASSIGN(SyncEngineContext);
 };
diff --git a/chrome/browser/sync_file_system/drive_backend/sync_engine_initializer.cc b/chrome/browser/sync_file_system/drive_backend/sync_engine_initializer.cc
index eead22e..5bd7f84 100644
--- a/chrome/browser/sync_file_system/drive_backend/sync_engine_initializer.cc
+++ b/chrome/browser/sync_file_system/drive_backend/sync_engine_initializer.cc
@@ -7,6 +7,7 @@
 #include "base/bind.h"
 #include "base/callback.h"
 #include "base/logging.h"
+#include "base/message_loop/message_loop_proxy.h"
 #include "chrome/browser/drive/drive_api_service.h"
 #include "chrome/browser/drive/drive_api_util.h"
 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_constants.h"
@@ -108,7 +109,12 @@
     return;
   }
 
+  // TODO(tzik): Stop using MessageLoopProxy before moving out from UI thread.
+  scoped_refptr<base::SequencedTaskRunner> worker_task_runner(
+      base::MessageLoopProxy::current());
+
   MetadataDatabase::Create(
+      worker_task_runner.get(),
       task_runner_.get(), database_path_, env_override_,
       base::Bind(&SyncEngineInitializer::DidCreateMetadataDatabase,
                  weak_ptr_factory_.GetWeakPtr(), base::Passed(&token)));
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 862f9b3..ac1bcc9 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
@@ -53,6 +53,7 @@
     sync_context_.reset(new SyncEngineContext(
         fake_drive_service_.get(),
         NULL /* drive_uploader */,
+        base::MessageLoopProxy::current(),
         base::MessageLoopProxy::current()));
 
     sync_task_manager_.reset(new SyncTaskManager(
@@ -108,6 +109,7 @@
     scoped_ptr<MetadataDatabase> database;
     MetadataDatabase::Create(
         base::MessageLoopProxy::current(),
+        base::MessageLoopProxy::current(),
         database_path(),
         in_memory_env_.get(),
         CreateResultReceiver(&status, &database));
diff --git a/chrome/browser/sync_file_system/drive_backend/sync_engine_unittest.cc b/chrome/browser/sync_file_system/drive_backend/sync_engine_unittest.cc
index 70432d9..59363de 100644
--- a/chrome/browser/sync_file_system/drive_backend/sync_engine_unittest.cc
+++ b/chrome/browser/sync_file_system/drive_backend/sync_engine_unittest.cc
@@ -114,6 +114,7 @@
     sync_engine_.reset(new drive_backend::SyncEngine(
         fake_drive_service.PassAs<drive::DriveServiceInterface>(),
         scoped_ptr<drive::DriveUploaderInterface>(),
+        base::MessageLoopProxy::current(),
         NULL /* notification_manager */,
         extension_service_.get(),
         NULL /* signin_manager */));
diff --git a/chrome/browser/sync_file_system/drive_backend/sync_task.cc b/chrome/browser/sync_file_system/drive_backend/sync_task.cc
index e32e53c..4475059 100644
--- a/chrome/browser/sync_file_system/drive_backend/sync_task.cc
+++ b/chrome/browser/sync_file_system/drive_backend/sync_task.cc
@@ -29,7 +29,7 @@
   scoped_ptr<BlockingFactor> blocking_factor(new BlockingFactor);
   blocking_factor->exclusive = true;
 
-  SyncTaskManager::MoveTaskToBackground(
+  SyncTaskManager::UpdateBlockingFactor(
       token.Pass(), blocking_factor.Pass(),
       base::Bind(&CallRunExclusive, weak_ptr_factory_.GetWeakPtr()));
 }
diff --git a/chrome/browser/sync_file_system/drive_backend/sync_task_manager.cc b/chrome/browser/sync_file_system/drive_backend/sync_task_manager.cc
index b08ebb8..346961d 100644
--- a/chrome/browser/sync_file_system/drive_backend/sync_task_manager.cc
+++ b/chrome/browser/sync_file_system/drive_backend/sync_task_manager.cc
@@ -129,16 +129,26 @@
 }
 
 // static
-void SyncTaskManager::MoveTaskToBackground(
-    scoped_ptr<SyncTaskToken> token,
+void SyncTaskManager::UpdateBlockingFactor(
+    scoped_ptr<SyncTaskToken> current_task_token,
     scoped_ptr<BlockingFactor> blocking_factor,
     const Continuation& continuation) {
-  DCHECK(token);
+  DCHECK(current_task_token);
 
-  SyncTaskManager* manager = token->manager();
+  SyncTaskManager* manager = current_task_token->manager();
   if (!manager)
     return;
-  manager->MoveTaskToBackgroundBody(token.Pass(), blocking_factor.Pass(),
+
+  scoped_ptr<SyncTaskToken> foreground_task_token;
+  scoped_ptr<SyncTaskToken> background_task_token;
+  if (current_task_token->token_id() == SyncTaskToken::kForegroundTaskTokenID)
+    foreground_task_token = current_task_token.Pass();
+  else
+    background_task_token = current_task_token.Pass();
+
+  manager->UpdateBlockingFactorBody(foreground_task_token.Pass(),
+                                    background_task_token.Pass(),
+                                    blocking_factor.Pass(),
                                     continuation);
 }
 
@@ -150,7 +160,7 @@
   if (token_id == SyncTaskToken::kForegroundTaskTokenID)
     return true;
 
-  return ContainsKey(running_background_task_, token_id);
+  return ContainsKey(running_background_tasks_, token_id);
 }
 
 void SyncTaskManager::NotifyTaskDoneBody(scoped_ptr<SyncTaskToken> token,
@@ -171,9 +181,9 @@
   token->clear_callback();
   if (token->token_id() == SyncTaskToken::kForegroundTaskTokenID) {
     token_ = token.Pass();
-    task = running_task_.Pass();
+    task = running_foreground_task_.Pass();
   } else {
-    task = running_background_task_.take_and_erase(token->token_id());
+    task = running_background_tasks_.take_and_erase(token->token_id());
   }
 
   bool task_used_network = false;
@@ -189,48 +199,88 @@
   StartNextTask();
 }
 
-void SyncTaskManager::MoveTaskToBackgroundBody(
-    scoped_ptr<SyncTaskToken> token,
+void SyncTaskManager::UpdateBlockingFactorBody(
+    scoped_ptr<SyncTaskToken> foreground_task_token,
+    scoped_ptr<SyncTaskToken> background_task_token,
     scoped_ptr<BlockingFactor> blocking_factor,
     const Continuation& continuation) {
+  // Run the task directly if the parallelization is disabled.
   if (!maximum_background_task_) {
-    continuation.Run(token.Pass());
+    DCHECK(foreground_task_token);
+    DCHECK(!background_task_token);
+    continuation.Run(foreground_task_token.Pass());
     return;
   }
 
-  if (running_background_task_.size() >= maximum_background_task_ ||
+  // Clear existing |blocking_factor| from |dependency_manager_| before
+  // getting |foreground_task_token|, so that we can avoid dead lock.
+  if (background_task_token && background_task_token->blocking_factor()) {
+    dependency_manager_.Erase(background_task_token->blocking_factor());
+    background_task_token->clear_blocking_factor();
+  }
+
+  // Try to get |foreground_task_token|.  If it's not available, wait for
+  // current foreground task to finish.
+  if (!foreground_task_token) {
+    DCHECK(background_task_token);
+    foreground_task_token = GetToken(background_task_token->location(),
+                                     SyncStatusCallback());
+    if (!foreground_task_token) {
+      PushPendingTask(
+          base::Bind(&SyncTaskManager::UpdateBlockingFactorBody,
+                     AsWeakPtr(),
+                     base::Passed(&foreground_task_token),
+                     base::Passed(&background_task_token),
+                     base::Passed(&blocking_factor),
+                     continuation),
+          PRIORITY_HIGH);
+      StartNextTask();
+      return;
+    }
+  }
+
+  // Check if the task can run as a background task now.
+  // If there are too many task running or any other task blocks current
+  // task, wait for any other task to finish.
+  bool task_number_limit_exceeded =
+      !background_task_token &&
+      running_background_tasks_.size() >= maximum_background_task_;
+  if (task_number_limit_exceeded ||
       !dependency_manager_.Insert(blocking_factor.get())) {
-    DCHECK(!running_background_task_.empty());
+    DCHECK(!running_background_tasks_.empty());
+    DCHECK(pending_backgrounding_task_.is_null());
 
     // Wait for NotifyTaskDone to release a |blocking_factor|.
     pending_backgrounding_task_ =
-        base::Bind(&SyncTaskManager::MoveTaskToBackground,
-                   base::Passed(&token), base::Passed(&blocking_factor),
+        base::Bind(&SyncTaskManager::UpdateBlockingFactorBody,
+                   AsWeakPtr(),
+                   base::Passed(&foreground_task_token),
+                   base::Passed(&background_task_token),
+                   base::Passed(&blocking_factor),
                    continuation);
     return;
   }
 
-  tracked_objects::Location from_here = token->location();
-  SyncStatusCallback callback = token->callback();
-  token->clear_callback();
+  if (background_task_token) {
+    background_task_token->set_blocking_factor(blocking_factor.Pass());
+  } else {
+    tracked_objects::Location from_here = foreground_task_token->location();
+    SyncStatusCallback callback = foreground_task_token->callback();
+    foreground_task_token->clear_callback();
 
-  scoped_ptr<SyncTaskToken> background_task_token =
-      SyncTaskToken::CreateForBackgroundTask(
-          AsWeakPtr(), task_token_seq_++, blocking_factor.Pass());
-  background_task_token->UpdateTask(from_here, callback);
+    background_task_token =
+        SyncTaskToken::CreateForBackgroundTask(
+            AsWeakPtr(),
+            task_token_seq_++,
+            blocking_factor.Pass());
+    background_task_token->UpdateTask(from_here, callback);
+    running_background_tasks_.set(background_task_token->token_id(),
+                                  running_foreground_task_.Pass());
+  }
 
-  NotifyTaskBackgrounded(token.Pass(), *background_task_token);
-  continuation.Run(background_task_token.Pass());
-}
-
-void SyncTaskManager::NotifyTaskBackgrounded(
-    scoped_ptr<SyncTaskToken> foreground_task_token,
-    const SyncTaskToken& background_task_token) {
   token_ = foreground_task_token.Pass();
-  running_background_task_.set(background_task_token.token_id(),
-                               running_task_.Pass());
-
   StartNextTask();
+  continuation.Run(background_task_token.Pass());
 }
 
 scoped_ptr<SyncTaskToken> SyncTaskManager::GetToken(
@@ -249,9 +299,9 @@
 
 void SyncTaskManager::RunTask(scoped_ptr<SyncTaskToken> token,
                               scoped_ptr<SyncTask> task) {
-  DCHECK(!running_task_);
-  running_task_ = task.Pass();
-  running_task_->RunPreflight(token.Pass());
+  DCHECK(!running_foreground_task_);
+  running_foreground_task_ = task.Pass();
+  running_foreground_task_->RunPreflight(token.Pass());
 }
 
 void SyncTaskManager::StartNextTask() {
diff --git a/chrome/browser/sync_file_system/drive_backend/sync_task_manager.h b/chrome/browser/sync_file_system/drive_backend/sync_task_manager.h
index 7b29035..0597b11 100644
--- a/chrome/browser/sync_file_system/drive_backend/sync_task_manager.h
+++ b/chrome/browser/sync_file_system/drive_backend/sync_task_manager.h
@@ -30,6 +30,13 @@
 class SyncTaskToken;
 struct BlockingFactor;
 
+// This class manages asynchronous tasks for Sync FileSystem.  Each task must be
+// either a Task or a SyncTask.
+// The instance runs single task as the foreground task, and multiple tasks as
+// background tasks.  Running background task has a BlockingFactor that
+// describes which task can run in parallel.  When a task start running as a
+// background task, SyncTaskManager checks if any running background task
+// doesn't block the new background task, and queues it up if it can't run.
 class SyncTaskManager
     : public base::NonThreadSafe,
       public base::SupportsWeakPtr<SyncTaskManager> {
@@ -86,9 +93,23 @@
                               scoped_ptr<SyncTask> task,
                               const SyncStatusCallback& callback);
 
+  // Notifies SyncTaskManager that the task associated to |token| has finished
+  // with |status|.
   static void NotifyTaskDone(scoped_ptr<SyncTaskToken> token,
                              SyncStatusCode status);
-  static void MoveTaskToBackground(scoped_ptr<SyncTaskToken> token,
+
+  // Updates |blocking_factor| associated to the current task by specified
+  // |blocking_factor| and turns the current task to a background task if
+  // the current task is running as a foreground task.
+  // If specified |blocking_factor| is blocked by any other blocking factor
+  // associated to an existing background task, this function waits for the
+  // existing background task to finish.
+  // Upon the task is ready to run as a background task, calls |continuation|
+  // with new SyncTaskToken.
+  // Note that this function once releases previous |blocking_factor| before
+  // applying new |blocking_factor|.  So, any other task may be run before
+  // invocation of |continuation|.
+  static void UpdateBlockingFactor(scoped_ptr<SyncTaskToken> current_task_token,
                                    scoped_ptr<BlockingFactor> blocking_factor,
                                    const Continuation& continuation);
 
@@ -114,18 +135,12 @@
   void NotifyTaskDoneBody(scoped_ptr<SyncTaskToken> token,
                           SyncStatusCode status);
 
-  // Notifies SyncTaskManager that the running task turned to a background task.
-  void NotifyTaskBackgrounded(scoped_ptr<SyncTaskToken> foreground_task_token,
-                              const SyncTaskToken& background_task_token);
-
-  // Non-static version of MoveTaskToBackground.
-  void MoveTaskToBackgroundBody(scoped_ptr<SyncTaskToken> token,
+  // Non-static version of UpdateBlockingFactor.
+  void UpdateBlockingFactorBody(scoped_ptr<SyncTaskToken> foreground_task_token,
+                                scoped_ptr<SyncTaskToken> background_task_token,
                                 scoped_ptr<BlockingFactor> blocking_factor,
                                 const Continuation& continuation);
 
-  // Returns true if no running background task blocks |blocking_factor|.
-  bool CanRunAsBackgroundTask(const BlockingFactor& blocking_factor);
-
   // This should be called when an async task needs to get a task token.
   scoped_ptr<SyncTaskToken> GetToken(const tracked_objects::Location& from_here,
                                      const SyncStatusCallback& callback);
@@ -145,11 +160,11 @@
   base::WeakPtr<Client> client_;
 
   // Owns running SyncTask to cancel the task on SyncTaskManager deletion.
-  scoped_ptr<SyncTask> running_task_;
+  scoped_ptr<SyncTask> running_foreground_task_;
 
   // Owns running backgrounded SyncTask to cancel the task on SyncTaskManager
   // deletion.
-  base::ScopedPtrHashMap<int64, SyncTask> running_background_task_;
+  base::ScopedPtrHashMap<int64, SyncTask> running_background_tasks_;
 
   size_t maximum_background_task_;
 
diff --git a/chrome/browser/sync_file_system/drive_backend/sync_task_manager_unittest.cc b/chrome/browser/sync_file_system/drive_backend/sync_task_manager_unittest.cc
index ed4891c..e09e42b 100644
--- a/chrome/browser/sync_file_system/drive_backend/sync_task_manager_unittest.cc
+++ b/chrome/browser/sync_file_system/drive_backend/sync_task_manager_unittest.cc
@@ -2,10 +2,14 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include <deque>
+#include <string>
+
 #include "base/basictypes.h"
 #include "base/bind.h"
 #include "base/memory/weak_ptr.h"
 #include "base/message_loop/message_loop.h"
+#include "base/run_loop.h"
 #include "chrome/browser/sync_file_system/drive_backend/sync_task_manager.h"
 #include "chrome/browser/sync_file_system/drive_backend/sync_task_token.h"
 #include "chrome/browser/sync_file_system/sync_file_system_test_util.h"
@@ -186,7 +190,7 @@
     blocking_factor->app_id = app_id_;
     blocking_factor->paths.push_back(path_);
 
-    SyncTaskManager::MoveTaskToBackground(
+    SyncTaskManager::UpdateBlockingFactor(
         token.Pass(), blocking_factor.Pass(),
         base::Bind(&BackgroundTask::RunAsBackgroundTask,
                    weak_ptr_factory_.GetWeakPtr()));
@@ -220,6 +224,73 @@
   DISALLOW_COPY_AND_ASSIGN(BackgroundTask);
 };
 
+class BlockerUpdateTestHelper : public SyncTask {
+ public:
+  typedef std::vector<std::string> Log;
+
+  BlockerUpdateTestHelper(const std::string& name,
+                          const std::string& app_id,
+                          const std::vector<std::string>& paths,
+                          Log* log)
+      : name_(name),
+        app_id_(app_id),
+        paths_(paths.begin(), paths.end()),
+        log_(log),
+        weak_ptr_factory_(this) {
+  }
+
+  virtual ~BlockerUpdateTestHelper() {
+  }
+
+  virtual void RunPreflight(scoped_ptr<SyncTaskToken> token) OVERRIDE {
+    UpdateBlocker(token.Pass());
+  }
+
+ private:
+  void UpdateBlocker(scoped_ptr<SyncTaskToken> token) {
+    if (paths_.empty()) {
+      log_->push_back(name_ + ": finished");
+      SyncTaskManager::NotifyTaskDone(token.Pass(), SYNC_STATUS_OK);
+      return;
+    }
+
+    std::string updating_to = paths_.front();
+    paths_.pop_front();
+
+    log_->push_back(name_ + ": updating to " + updating_to);
+
+    scoped_ptr<BlockingFactor> blocking_factor(new BlockingFactor);
+    blocking_factor->app_id = app_id_;
+    blocking_factor->paths.push_back(
+        base::FilePath(fileapi::VirtualPath::GetNormalizedFilePath(
+            base::FilePath::FromUTF8Unsafe(updating_to))));
+
+    SyncTaskManager::UpdateBlockingFactor(
+        token.Pass(), blocking_factor.Pass(),
+        base::Bind(&BlockerUpdateTestHelper::UpdateBlockerSoon,
+                   weak_ptr_factory_.GetWeakPtr(),
+                   updating_to));
+  }
+
+  void UpdateBlockerSoon(const std::string& updated_to,
+                         scoped_ptr<SyncTaskToken> token) {
+    log_->push_back(name_ + ": updated to " + updated_to);
+    base::MessageLoop::current()->PostTask(
+        FROM_HERE,
+        base::Bind(&BlockerUpdateTestHelper::UpdateBlocker,
+                   weak_ptr_factory_.GetWeakPtr(), base::Passed(&token)));
+  }
+
+  std::string name_;
+  std::string app_id_;
+  std::deque<std::string> paths_;
+  Log* log_;
+
+  base::WeakPtrFactory<BlockerUpdateTestHelper> weak_ptr_factory_;
+
+  DISALLOW_COPY_AND_ASSIGN(BlockerUpdateTestHelper);
+};
+
 // Arbitrary non-default status values for testing.
 const SyncStatusCode kStatus1 = static_cast<SyncStatusCode>(-1);
 const SyncStatusCode kStatus2 = static_cast<SyncStatusCode>(-2);
@@ -515,5 +586,75 @@
   EXPECT_EQ(2, stats.max_parallel_task);
 }
 
+TEST(SyncTaskManagerTest, UpdateBlockingFactor) {
+  base::MessageLoop message_loop;
+  SyncTaskManager task_manager(base::WeakPtr<SyncTaskManager::Client>(),
+                               10 /* maximum_background_task */);
+  task_manager.Initialize(SYNC_STATUS_OK);
+
+  SyncStatusCode status = SYNC_STATUS_FAILED;
+  BlockerUpdateTestHelper::Log log;
+
+  {
+    std::vector<std::string> paths;
+    paths.push_back("/foo/bar");
+    paths.push_back("/foo");
+    paths.push_back("/hoge/fuga/piyo");
+    task_manager.ScheduleSyncTask(
+        FROM_HERE,
+        scoped_ptr<SyncTask>(new BlockerUpdateTestHelper(
+            "task1", "app_id", paths, &log)),
+        SyncTaskManager::PRIORITY_MED,
+        CreateResultReceiver(&status));
+  }
+
+  {
+    std::vector<std::string> paths;
+    paths.push_back("/foo");
+    paths.push_back("/foo/bar");
+    paths.push_back("/hoge/fuga/piyo");
+    task_manager.ScheduleSyncTask(
+        FROM_HERE,
+        scoped_ptr<SyncTask>(new BlockerUpdateTestHelper(
+            "task2", "app_id", paths, &log)),
+        SyncTaskManager::PRIORITY_MED,
+        CreateResultReceiver(&status));
+  }
+
+  message_loop.RunUntilIdle();
+
+  EXPECT_EQ(SYNC_STATUS_OK, status);
+
+  ASSERT_EQ(14u, log.size());
+  int i = 0;
+
+  // task1 takes "/foo/bar" first.
+  EXPECT_EQ("task1: updating to /foo/bar", log[i++]);
+  EXPECT_EQ("task1: updated to /foo/bar", log[i++]);
+
+  // task1 blocks task2. task2's update should be pending until task1 update.
+  EXPECT_EQ("task2: updating to /foo", log[i++]);
+
+  // task1 releases "/foo/bar" and tries to take "/foo". Then, pending task2
+  // takes "/foo" and blocks task1.
+  EXPECT_EQ("task1: updating to /foo", log[i++]);
+  EXPECT_EQ("task2: updated to /foo", log[i++]);
+
+  // task2 releases "/foo".
+  EXPECT_EQ("task2: updating to /foo/bar", log[i++]);
+  EXPECT_EQ("task1: updated to /foo", log[i++]);
+
+  // task1 releases "/foo".
+  EXPECT_EQ("task1: updating to /hoge/fuga/piyo", log[i++]);
+  EXPECT_EQ("task1: updated to /hoge/fuga/piyo", log[i++]);
+  EXPECT_EQ("task2: updated to /foo/bar", log[i++]);
+
+  EXPECT_EQ("task1: finished", log[i++]);
+
+  EXPECT_EQ("task2: updating to /hoge/fuga/piyo", log[i++]);
+  EXPECT_EQ("task2: updated to /hoge/fuga/piyo", log[i++]);
+  EXPECT_EQ("task2: finished", log[i++]);
+}
+
 }  // namespace drive_backend
 }  // namespace sync_file_system
diff --git a/chrome/browser/sync_file_system/drive_backend/sync_task_token.cc b/chrome/browser/sync_file_system/drive_backend/sync_task_token.cc
index 2b25ac2..ed95abd 100644
--- a/chrome/browser/sync_file_system/drive_backend/sync_task_token.cc
+++ b/chrome/browser/sync_file_system/drive_backend/sync_task_token.cc
@@ -66,6 +66,11 @@
   return base::Bind(&SyncTaskManager::NotifyTaskDone, base::Passed(&token));
 }
 
+void SyncTaskToken::set_blocking_factor(
+    scoped_ptr<BlockingFactor> blocking_factor) {
+  blocking_factor_ = blocking_factor.Pass();
+}
+
 const BlockingFactor* SyncTaskToken::blocking_factor() const {
   return blocking_factor_.get();
 }
diff --git a/chrome/browser/sync_file_system/drive_backend/sync_task_token.h b/chrome/browser/sync_file_system/drive_backend/sync_task_token.h
index d1b1da1..fcfa86e 100644
--- a/chrome/browser/sync_file_system/drive_backend/sync_task_token.h
+++ b/chrome/browser/sync_file_system/drive_backend/sync_task_token.h
@@ -44,6 +44,7 @@
   const SyncStatusCallback& callback() const { return callback_; }
   void clear_callback() { callback_.Reset(); }
 
+  void set_blocking_factor(scoped_ptr<BlockingFactor> blocking_factor);
   const BlockingFactor* blocking_factor() const;
   void clear_blocking_factor();
 
diff --git a/chrome/browser/sync_file_system/drive_backend/sync_worker.cc b/chrome/browser/sync_file_system/drive_backend/sync_worker.cc
index f58c66c..72df953 100644
--- a/chrome/browser/sync_file_system/drive_backend/sync_worker.cc
+++ b/chrome/browser/sync_file_system/drive_backend/sync_worker.cc
@@ -26,7 +26,6 @@
 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.h"
 #include "chrome/browser/sync_file_system/drive_backend/register_app_task.h"
 #include "chrome/browser/sync_file_system/drive_backend/remote_to_local_syncer.h"
-#include "chrome/browser/sync_file_system/drive_backend/sync_engine.h"
 #include "chrome/browser/sync_file_system/drive_backend/sync_engine_context.h"
 #include "chrome/browser/sync_file_system/drive_backend/sync_engine_initializer.h"
 #include "chrome/browser/sync_file_system/drive_backend/sync_task.h"
@@ -59,15 +58,17 @@
 }  // namespace
 
 scoped_ptr<SyncWorker> SyncWorker::CreateOnWorker(
-    const base::WeakPtr<drive_backend::SyncEngine>& sync_engine,
     const base::FilePath& base_dir,
+    Observer* observer,
+    ExtensionServiceInterface* extension_service,
     scoped_ptr<SyncEngineContext> sync_engine_context,
     leveldb::Env* env_override) {
   scoped_ptr<SyncWorker> sync_worker(
-      new SyncWorker(sync_engine,
-                     base_dir,
+      new SyncWorker(base_dir,
+                     extension_service,
                      sync_engine_context.Pass(),
                      env_override));
+  sync_worker->AddObserver(observer);
   sync_worker->Initialize();
 
   return sync_worker.Pass();
@@ -99,10 +100,12 @@
   scoped_ptr<RegisterAppTask> task(
       new RegisterAppTask(context_.get(), origin.host()));
   if (task->CanFinishImmediately()) {
-    callback.Run(SYNC_STATUS_OK);
+    context_->GetUiTaskRunner()->PostTask(
+        FROM_HERE, base::Bind(callback, SYNC_STATUS_OK));
     return;
   }
 
+  // TODO(peria): Forward |callback| to UI thread.
   task_manager_->ScheduleSyncTask(
       FROM_HERE,
       task.PassAs<SyncTask>(),
@@ -113,6 +116,7 @@
 void SyncWorker::EnableOrigin(
     const GURL& origin,
     const SyncStatusCallback& callback) {
+  // TODO(peria): Forward |callback| to UI thread.
   task_manager_->ScheduleTask(
       FROM_HERE,
       base::Bind(&SyncWorker::DoEnableApp,
@@ -125,6 +129,7 @@
 void SyncWorker::DisableOrigin(
     const GURL& origin,
     const SyncStatusCallback& callback) {
+  // TODO(peria): Forward |callback| to UI thread.
   task_manager_->ScheduleTask(
       FROM_HERE,
       base::Bind(&SyncWorker::DoDisableApp,
@@ -138,6 +143,7 @@
     const GURL& origin,
     RemoteFileSyncService::UninstallFlag flag,
     const SyncStatusCallback& callback) {
+  // TODO(peria): Forward |callback| to UI thread.
   task_manager_->ScheduleSyncTask(
       FROM_HERE,
       scoped_ptr<SyncTask>(
@@ -211,8 +217,11 @@
   if (old_state == GetCurrentState())
     return;
 
-  // TODO(peria): PostTask()
-  sync_engine_->UpdateSyncEnabled(enabled);
+  FOR_EACH_OBSERVER(
+      Observer, observers_,
+      UpdateServiceState(
+          GetCurrentState(),
+          enabled ? "Sync is enabled" : "Sync is disabled"));
 }
 
 SyncStatusCode SyncWorker::SetDefaultConflictResolutionPolicy(
@@ -274,8 +283,9 @@
   UpdateServiceStateFromSyncStatusCode(status, used_network);
 
   if (GetMetadataDatabase()) {
-    // TODO(peria): Post task
-    sync_engine_->NotifyLastOperationStatus();
+    FOR_EACH_OBSERVER(
+        Observer, observers_,
+        OnPendingFileListUpdated(GetMetadataDatabase()->CountDirtyTracker()));
   }
 }
 
@@ -339,9 +349,13 @@
   return task_manager_.get();
 }
 
+void SyncWorker::AddObserver(Observer* observer) {
+  observers_.AddObserver(observer);
+}
+
 SyncWorker::SyncWorker(
-    const base::WeakPtr<drive_backend::SyncEngine>& sync_engine,
     const base::FilePath& base_dir,
+    ExtensionServiceInterface* extension_service,
     scoped_ptr<SyncEngineContext> sync_engine_context,
     leveldb::Env* env_override)
     : base_dir_(base_dir),
@@ -354,24 +368,28 @@
       default_conflict_resolution_policy_(
           CONFLICT_RESOLUTION_POLICY_LAST_WRITE_WIN),
       network_available_(false),
+      extension_service_(extension_service),
       context_(sync_engine_context.Pass()),
-      sync_engine_(sync_engine),
       weak_ptr_factory_(this) {}
 
 void SyncWorker::DoDisableApp(const std::string& app_id,
                               const SyncStatusCallback& callback) {
-  if (GetMetadataDatabase())
+  if (GetMetadataDatabase()) {
     GetMetadataDatabase()->DisableApp(app_id, callback);
-  else
-    callback.Run(SYNC_STATUS_OK);
+  } else {
+    context_->GetUiTaskRunner()->PostTask(
+        FROM_HERE, base::Bind(callback, SYNC_STATUS_OK));
+  }
 }
 
 void SyncWorker::DoEnableApp(const std::string& app_id,
                              const SyncStatusCallback& callback) {
-  if (GetMetadataDatabase())
+  if (GetMetadataDatabase()) {
     GetMetadataDatabase()->EnableApp(app_id, callback);
-  else
-    callback.Run(SYNC_STATUS_OK);
+  } else {
+    context_->GetUiTaskRunner()->PostTask(
+        FROM_HERE, base::Bind(callback, SYNC_STATUS_OK));
+  }
 }
 
 void SyncWorker::PostInitializeTask() {
@@ -381,14 +399,15 @@
   // already initialized when it runs.
   SyncEngineInitializer* initializer =
       new SyncEngineInitializer(context_.get(),
-                                context_->GetBlockingTaskRunner(),
+                                context_->GetFileTaskRunner(),
                                 base_dir_.Append(kDatabaseName),
                                 env_override_);
   task_manager_->ScheduleSyncTask(
       FROM_HERE,
       scoped_ptr<SyncTask>(initializer),
       SyncTaskManager::PRIORITY_HIGH,
-      base::Bind(&SyncWorker::DidInitialize, weak_ptr_factory_.GetWeakPtr(),
+      base::Bind(&SyncWorker::DidInitialize,
+                 weak_ptr_factory_.GetWeakPtr(),
                  initializer));
 }
 
@@ -410,8 +429,52 @@
   if (metadata_database)
     context_->SetMetadataDatabase(metadata_database.Pass());
 
-  // TODO(peria): Post task
-  sync_engine_->UpdateRegisteredApps();
+  UpdateRegisteredApp();
+}
+
+void SyncWorker::UpdateRegisteredApp() {
+  if (extension_service_)
+    return;
+
+  MetadataDatabase* metadata_db = GetMetadataDatabase();
+  DCHECK(metadata_db);
+  std::vector<std::string> app_ids;
+  metadata_db->GetRegisteredAppIDs(&app_ids);
+
+  // Update the status of every origin using status from ExtensionService.
+  for (std::vector<std::string>::const_iterator itr = app_ids.begin();
+       itr != app_ids.end(); ++itr) {
+    const std::string& app_id = *itr;
+        GURL origin =
+            extensions::Extension::GetBaseURLFromExtensionId(app_id);
+
+        // TODO(tzik): Switch |extension_service_| to a wrapper and make this
+        // call async.
+        if (!extension_service_->GetInstalledExtension(app_id)) {
+          // Extension has been uninstalled.
+          // (At this stage we can't know if it was unpacked extension or not,
+          // so just purge the remote folder.)
+          UninstallOrigin(origin,
+                          RemoteFileSyncService::UNINSTALL_AND_PURGE_REMOTE,
+                          base::Bind(&EmptyStatusCallback));
+          continue;
+        }
+        FileTracker tracker;
+        if (!metadata_db->FindAppRootTracker(app_id, &tracker)) {
+          // App will register itself on first run.
+          continue;
+        }
+
+        // TODO(tzik): Switch |extension_service_| to a wrapper and make this
+        // call async.
+        bool is_app_enabled = extension_service_->IsExtensionEnabled(app_id);
+            bool is_app_root_tracker_enabled =
+                tracker.tracker_kind() == TRACKER_KIND_APP_ROOT;
+            if (is_app_enabled && !is_app_root_tracker_enabled)
+              EnableOrigin(origin, base::Bind(&EmptyStatusCallback));
+            else if (!is_app_enabled && is_app_root_tracker_enabled)
+              DisableOrigin(origin, base::Bind(&EmptyStatusCallback));
+  }
 }
 
 void SyncWorker::DidProcessRemoteChange(RemoteToLocalSyncer* syncer,
@@ -425,8 +488,13 @@
   }
 
   if (status == SYNC_STATUS_OK) {
-    // TODO(peria): Post task
-    sync_engine_->DidProcessRemoteChange(syncer);
+    FOR_EACH_OBSERVER(
+        Observer, observers_,
+        OnFileStatusChanged(
+            syncer->url(),
+            SYNC_FILE_STATUS_SYNCED,
+            syncer->sync_action(),
+            SYNC_DIRECTION_REMOTE_TO_LOCAL));
 
     if (syncer->sync_action() == SYNC_ACTION_DELETED &&
         syncer->url().is_valid() &&
@@ -441,8 +509,20 @@
 void SyncWorker::DidApplyLocalChange(LocalToRemoteSyncer* syncer,
                                      const SyncStatusCallback& callback,
                                      SyncStatusCode status) {
-  // TODO(peria): Post task
-  sync_engine_->DidApplyLocalChange(syncer, status);
+  if ((status == SYNC_STATUS_OK || status == SYNC_STATUS_RETRY) &&
+      syncer->url().is_valid() &&
+      syncer->sync_action() != SYNC_ACTION_NONE) {
+    fileapi::FileSystemURL updated_url = syncer->url();
+    if (!syncer->target_path().empty()) {
+      updated_url = CreateSyncableFileSystemURL(syncer->url().origin(),
+                                                syncer->target_path());
+    }
+    FOR_EACH_OBSERVER(Observer, observers_,
+                      OnFileStatusChanged(updated_url,
+                                          SYNC_FILE_STATUS_SYNCED,
+                                          syncer->sync_action(),
+                                          SYNC_DIRECTION_LOCAL_TO_REMOTE));
+  }
 
   if (status == SYNC_STATUS_UNKNOWN_ORIGIN && syncer->url().is_valid()) {
     RegisterOrigin(syncer->url().origin(),
@@ -464,12 +544,6 @@
         base::TimeDelta::FromSeconds(kListChangesRetryDelaySeconds);
   }
 
-  if (status != SYNC_STATUS_OK &&
-      status != SYNC_STATUS_NO_CHANGE_TO_SYNC) {
-    callback.Run(status);
-    return;
-  }
-
   if (status == SYNC_STATUS_OK)
     should_check_conflict_ = true;
 
@@ -583,8 +657,10 @@
   util::Log(logging::LOG_VERBOSE, FROM_HERE,
             "Service state changed: %d->%d: %s",
             old_state, GetCurrentState(), description.c_str());
-  // TODO(peria): Post task
-  sync_engine_->UpdateServiceState(description);
+
+  FOR_EACH_OBSERVER(
+      Observer, observers_,
+      UpdateServiceState(GetCurrentState(), description));
 }
 
 }  // namespace drive_backend
diff --git a/chrome/browser/sync_file_system/drive_backend/sync_worker.h b/chrome/browser/sync_file_system/drive_backend/sync_worker.h
index 5c32eeb..752cfc6 100644
--- a/chrome/browser/sync_file_system/drive_backend/sync_worker.h
+++ b/chrome/browser/sync_file_system/drive_backend/sync_worker.h
@@ -16,8 +16,12 @@
 #include "chrome/browser/sync_file_system/drive_backend/sync_task_manager.h"
 #include "chrome/browser/sync_file_system/local_change_processor.h"
 #include "chrome/browser/sync_file_system/remote_file_sync_service.h"
+#include "chrome/browser/sync_file_system/sync_action.h"
+#include "chrome/browser/sync_file_system/sync_direction.h"
 #include "net/base/network_change_notifier.h"
 
+class ExtensionServiceInterface;
+
 namespace base {
 class SequencedTaskRunner;
 }
@@ -41,15 +45,29 @@
 class LocalToRemoteSyncer;
 class MetadataDatabase;
 class RemoteToLocalSyncer;
-class SyncEngine;
 class SyncEngineContext;
 class SyncEngineInitializer;
 
 class SyncWorker : public SyncTaskManager::Client {
  public:
+  class Observer {
+   public:
+    virtual void OnPendingFileListUpdated(int item_count) = 0;
+    virtual void OnFileStatusChanged(const fileapi::FileSystemURL& url,
+                                     SyncFileStatus file_status,
+                                     SyncAction sync_action,
+                                     SyncDirection direction) = 0;
+    virtual void UpdateServiceState(RemoteServiceState state,
+                                    const std::string& description) = 0;
+
+   protected:
+    virtual ~Observer() {}
+  };
+
   static scoped_ptr<SyncWorker> CreateOnWorker(
-      const base::WeakPtr<drive_backend::SyncEngine>& sync_engine,
       const base::FilePath& base_dir,
+      Observer* observer,
+      ExtensionServiceInterface* extension_service,
       scoped_ptr<SyncEngineContext> sync_engine_context,
       leveldb::Env* env_override);
 
@@ -105,12 +123,14 @@
   MetadataDatabase* GetMetadataDatabase();
   SyncTaskManager* GetSyncTaskManager();
 
+  void AddObserver(Observer* observer);
+
  private:
   friend class DriveBackendSyncTest;
   friend class SyncEngineTest;
 
-  SyncWorker(const base::WeakPtr<drive_backend::SyncEngine>& sync_engine,
-             const base::FilePath& base_dir,
+  SyncWorker(const base::FilePath& base_dir,
+             ExtensionServiceInterface* extension_service,
              scoped_ptr<SyncEngineContext> sync_engine_context,
              leveldb::Env* env_override);
 
@@ -122,6 +142,7 @@
   void PostInitializeTask();
   void DidInitialize(SyncEngineInitializer* initializer,
                      SyncStatusCode status);
+  void UpdateRegisteredApp();
   void DidProcessRemoteChange(RemoteToLocalSyncer* syncer,
                               const SyncFileCallback& callback,
                               SyncStatusCode status);
@@ -157,8 +178,12 @@
 
   scoped_ptr<SyncTaskManager> task_manager_;
 
+  // TODO(tzik): Add a proxy class for ExtensionServiceInterface to cross
+  // thread, and hold its instance as WeakPtr here.
+  ExtensionServiceInterface* extension_service_;
+
   scoped_ptr<SyncEngineContext> context_;
-  base::WeakPtr<drive_backend::SyncEngine> sync_engine_;
+  ObserverList<Observer> observers_;
 
   base::WeakPtrFactory<SyncWorker> weak_ptr_factory_;
   DISALLOW_COPY_AND_ASSIGN(SyncWorker);
diff --git a/chrome/browser/sync_file_system/drive_backend_v1/fake_api_util.cc b/chrome/browser/sync_file_system/drive_backend_v1/fake_api_util.cc
index 0ce39ef..e3afa22 100644
--- a/chrome/browser/sync_file_system/drive_backend_v1/fake_api_util.cc
+++ b/chrome/browser/sync_file_system/drive_backend_v1/fake_api_util.cc
@@ -66,9 +66,7 @@
 FakeAPIUtil::FakeAPIUtil()
     : largest_changestamp_(0),
       url_generator_(
-          GURL(google_apis::GDataWapiUrlGenerator::kBaseUrlForProduction),
-          GURL(google_apis::GDataWapiUrlGenerator::
-               kBaseDownloadUrlForProduction)) {}
+          GURL(google_apis::GDataWapiUrlGenerator::kBaseUrlForProduction)) {}
 
 FakeAPIUtil::~FakeAPIUtil() {}
 
diff --git a/chrome/browser/tab_contents/background_contents.cc b/chrome/browser/tab_contents/background_contents.cc
index 9420402..20902f3 100644
--- a/chrome/browser/tab_contents/background_contents.cc
+++ b/chrome/browser/tab_contents/background_contents.cc
@@ -123,6 +123,12 @@
       new_contents, disposition, initial_pos, user_gesture, was_blocked);
 }
 
+bool BackgroundContents::IsNeverVisible(content::WebContents* web_contents) {
+  DCHECK_EQ(extensions::VIEW_TYPE_BACKGROUND_CONTENTS,
+            extensions::GetViewType(web_contents));
+  return true;
+}
+
 void BackgroundContents::RenderProcessGone(base::TerminationStatus status) {
   content::NotificationService::current()->Notify(
       chrome::NOTIFICATION_BACKGROUND_CONTENTS_TERMINATED,
diff --git a/chrome/browser/tab_contents/background_contents.h b/chrome/browser/tab_contents/background_contents.h
index b186a86..ef644c9 100644
--- a/chrome/browser/tab_contents/background_contents.h
+++ b/chrome/browser/tab_contents/background_contents.h
@@ -65,6 +65,7 @@
                               const gfx::Rect& initial_pos,
                               bool user_gesture,
                               bool* was_blocked) OVERRIDE;
+  virtual bool IsNeverVisible(content::WebContents* web_contents) OVERRIDE;
 
   // content::WebContentsObserver implementation:
   virtual void RenderProcessGone(base::TerminationStatus status) OVERRIDE;
diff --git a/chrome/browser/task_manager/task_manager_browsertest.cc b/chrome/browser/task_manager/task_manager_browsertest.cc
index acd036c..0c966ab 100644
--- a/chrome/browser/task_manager/task_manager_browsertest.cc
+++ b/chrome/browser/task_manager/task_manager_browsertest.cc
@@ -12,7 +12,6 @@
 #include "chrome/browser/extensions/extension_browsertest.h"
 #include "chrome/browser/extensions/extension_service.h"
 #include "chrome/browser/infobars/confirm_infobar_delegate.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/notifications/desktop_notification_service.h"
 #include "chrome/browser/notifications/notification.h"
@@ -33,6 +32,7 @@
 #include "chrome/common/chrome_switches.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "chrome/test/base/ui_test_utils.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/notification_service.h"
 #include "content/public/common/content_switches.h"
 #include "content/public/common/page_transition_types.h"
diff --git a/chrome/browser/themes/browser_theme_pack.cc b/chrome/browser/themes/browser_theme_pack.cc
index 043dbbe..078c9bd 100644
--- a/chrome/browser/themes/browser_theme_pack.cc
+++ b/chrome/browser/themes/browser_theme_pack.cc
@@ -43,7 +43,7 @@
 // Version number of the current theme pack. We just throw out and rebuild
 // theme packs that aren't int-equal to this. Increment this number if you
 // change default theme assets.
-const int kThemePackVersion = 32;
+const int kThemePackVersion = 33;
 
 // IDs that are in the DataPack won't clash with the positive integer
 // uint16. kHeaderID should always have the maximum value because we want the
diff --git a/chrome/browser/themes/theme_service.cc b/chrome/browser/themes/theme_service.cc
index c8c25fc..9e3eb98 100644
--- a/chrome/browser/themes/theme_service.cc
+++ b/chrome/browser/themes/theme_service.cc
@@ -256,7 +256,7 @@
         installed_pending_load_id_ = installed_details->extension->id();
       break;
     }
-    case chrome::NOTIFICATION_EXTENSION_LOADED:
+    case chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED:
     {
       const Extension* extension = Details<const Extension>(details).ptr();
       if (extension->is_theme() &&
@@ -504,7 +504,7 @@
                  chrome::NOTIFICATION_EXTENSION_INSTALLED,
                  content::Source<Profile>(profile_));
   registrar_.Add(this,
-                 chrome::NOTIFICATION_EXTENSION_LOADED,
+                 chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
                  content::Source<Profile>(profile_));
   registrar_.Add(this,
                  chrome::NOTIFICATION_EXTENSION_ENABLED,
diff --git a/chrome/browser/themes/theme_service_unittest.cc b/chrome/browser/themes/theme_service_unittest.cc
index c83adcd..cbebc92 100644
--- a/chrome/browser/themes/theme_service_unittest.cc
+++ b/chrome/browser/themes/theme_service_unittest.cc
@@ -46,7 +46,7 @@
     scoped_refptr<extensions::UnpackedInstaller> installer(
         extensions::UnpackedInstaller::Create(service_));
     content::WindowedNotificationObserver observer(
-        chrome::NOTIFICATION_EXTENSION_LOADED,
+        chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
         content::Source<Profile>(profile_.get()));
     installer->Load(temp_dir);
     observer.Wait();
@@ -62,9 +62,10 @@
 
   // Update the theme with |extension_id|.
   void UpdateUnpackedTheme(const std::string& extension_id) {
-    int updated_notification = service_->IsExtensionEnabled(extension_id) ?
-        chrome::NOTIFICATION_EXTENSION_LOADED :
-        chrome::NOTIFICATION_EXTENSION_UPDATE_DISABLED;
+    int updated_notification =
+        service_->IsExtensionEnabled(extension_id)
+            ? chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED
+            : chrome::NOTIFICATION_EXTENSION_UPDATE_DISABLED;
 
     const base::FilePath& path =
         service_->GetInstalledExtension(extension_id)->path();
diff --git a/chrome/browser/three_d_api_observer.cc b/chrome/browser/three_d_api_observer.cc
index 545bd28..248f5f9 100644
--- a/chrome/browser/three_d_api_observer.cc
+++ b/chrome/browser/three_d_api_observer.cc
@@ -6,9 +6,9 @@
 
 #include "base/metrics/histogram.h"
 #include "chrome/browser/infobars/confirm_infobar_delegate.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/tab_contents/tab_util.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/gpu_data_manager.h"
 #include "grit/generated_resources.h"
 #include "grit/theme_resources.h"
@@ -37,7 +37,8 @@
   virtual ~ThreeDAPIInfoBarDelegate();
 
   // ConfirmInfoBarDelegate:
-  virtual bool EqualsDelegate(InfoBarDelegate* delegate) const OVERRIDE;
+  virtual bool EqualsDelegate(
+      infobars::InfoBarDelegate* delegate) const OVERRIDE;
   virtual int GetIconID() const OVERRIDE;
   virtual base::string16 GetMessageText() const OVERRIDE;
   virtual base::string16 GetButtonLabel(InfoBarButton button) const OVERRIDE;
@@ -84,7 +85,8 @@
   }
 }
 
-bool ThreeDAPIInfoBarDelegate::EqualsDelegate(InfoBarDelegate* delegate) const {
+bool ThreeDAPIInfoBarDelegate::EqualsDelegate(
+    infobars::InfoBarDelegate* delegate) const {
   // For the time being, if a given web page is actually using both
   // WebGL and Pepper 3D and both APIs are blocked, just leave the
   // first infobar up. If the user selects "try again", both APIs will
diff --git a/chrome/browser/translate/translate_browsertest.cc b/chrome/browser/translate/translate_browsertest.cc
index 7c0bef7..d24840f 100644
--- a/chrome/browser/translate/translate_browsertest.cc
+++ b/chrome/browser/translate/translate_browsertest.cc
@@ -7,7 +7,6 @@
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/chrome_notification_types.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/translate/translate_infobar_delegate.h"
 #include "chrome/browser/translate/translate_service.h"
@@ -16,6 +15,7 @@
 #include "chrome/test/base/in_process_browser_test.h"
 #include "chrome/test/base/test_switches.h"
 #include "chrome/test/base/ui_test_utils.h"
+#include "components/infobars/core/infobar.h"
 #include "components/translate/core/browser/translate_manager.h"
 #include "components/translate/core/browser/translate_script.h"
 #include "components/translate/core/common/translate_switches.h"
diff --git a/chrome/browser/translate/translate_infobar_delegate.cc b/chrome/browser/translate/translate_infobar_delegate.cc
index bcee47a..feb8ca9 100644
--- a/chrome/browser/translate/translate_infobar_delegate.cc
+++ b/chrome/browser/translate/translate_infobar_delegate.cc
@@ -10,10 +10,10 @@
 #include "base/metrics/histogram.h"
 #include "base/prefs/pref_service.h"
 #include "chrome/browser/browser_process.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/translate/translate_tab_helper.h"
+#include "components/infobars/core/infobar.h"
 #include "components/translate/core/browser/translate_accept_languages.h"
 #include "components/translate/core/browser/translate_download_manager.h"
 #include "components/translate/core/browser/translate_manager.h"
@@ -85,7 +85,7 @@
   }
 
   // Find any existing translate infobar delegate.
-  InfoBar* old_infobar = NULL;
+  infobars::InfoBar* old_infobar = NULL;
   InfoBarService* infobar_service =
       InfoBarService::FromWebContents(web_contents);
   TranslateInfoBarDelegate* old_delegate = NULL;
@@ -100,7 +100,7 @@
   }
 
   // Add the new delegate.
-  scoped_ptr<InfoBar> infobar(CreateInfoBar(
+  scoped_ptr<infobars::InfoBar> infobar(CreateInfoBar(
       scoped_ptr<TranslateInfoBarDelegate>(new TranslateInfoBarDelegate(
           web_contents, step, old_delegate, original_language,
           target_language, error_type, prefs,
@@ -334,7 +334,7 @@
     TranslateErrors::Type error_type,
     PrefService* prefs,
     bool triggered_from_menu)
-    : InfoBarDelegate(),
+    : infobars::InfoBarDelegate(),
       step_(step),
       background_animation_(NONE),
       ui_delegate_(TranslateTabHelper::FromWebContents(web_contents),
@@ -367,7 +367,8 @@
   return IDR_INFOBAR_TRANSLATE;
 }
 
-InfoBarDelegate::Type TranslateInfoBarDelegate::GetInfoBarType() const {
+infobars::InfoBarDelegate::Type TranslateInfoBarDelegate::GetInfoBarType()
+    const {
   return PAGE_ACTION_TYPE;
 }
 
@@ -378,7 +379,7 @@
   if (!details.is_navigation_to_different_page && !details.is_main_frame)
     return false;
 
-  return InfoBarDelegate::ShouldExpireInternal(details);
+  return infobars::InfoBarDelegate::ShouldExpireInternal(details);
 }
 
 TranslateInfoBarDelegate*
diff --git a/chrome/browser/translate/translate_infobar_delegate.h b/chrome/browser/translate/translate_infobar_delegate.h
index ff55e1f..16bfcd7 100644
--- a/chrome/browser/translate/translate_infobar_delegate.h
+++ b/chrome/browser/translate/translate_infobar_delegate.h
@@ -11,8 +11,8 @@
 
 #include "base/logging.h"
 #include "base/memory/scoped_ptr.h"
-#include "chrome/browser/infobars/infobar_delegate.h"
 #include "chrome/browser/translate/translate_tab_helper.h"
+#include "components/infobars/core/infobar_delegate.h"
 #include "components/translate/core/browser/translate_prefs.h"
 #include "components/translate/core/browser/translate_ui_delegate.h"
 #include "components/translate/core/common/translate_constants.h"
@@ -20,7 +20,7 @@
 
 class PrefService;
 
-class TranslateInfoBarDelegate : public InfoBarDelegate {
+class TranslateInfoBarDelegate : public infobars::InfoBarDelegate {
  public:
   // The types of background color animations.
   enum BackgroundAnimationType {
@@ -183,13 +183,13 @@
   typedef std::pair<std::string, base::string16> LanguageNamePair;
 
   // Returns a translate infobar that owns |delegate|.
-  static scoped_ptr<InfoBar> CreateInfoBar(
+  static scoped_ptr<infobars::InfoBar> CreateInfoBar(
       scoped_ptr<TranslateInfoBarDelegate> delegate);
 
   // InfoBarDelegate:
   virtual void InfoBarDismissed() OVERRIDE;
   virtual int GetIconID() const OVERRIDE;
-  virtual InfoBarDelegate::Type GetInfoBarType() const OVERRIDE;
+  virtual infobars::InfoBarDelegate::Type GetInfoBarType() const OVERRIDE;
   virtual bool ShouldExpire(const NavigationDetails& details) const OVERRIDE;
   virtual TranslateInfoBarDelegate* AsTranslateInfoBarDelegate() OVERRIDE;
 
diff --git a/chrome/browser/translate/translate_manager_render_view_host_unittest.cc b/chrome/browser/translate/translate_manager_render_view_host_unittest.cc
index 71e13f2..db74fe4 100644
--- a/chrome/browser/translate/translate_manager_render_view_host_unittest.cc
+++ b/chrome/browser/translate/translate_manager_render_view_host_unittest.cc
@@ -13,7 +13,6 @@
 #include "chrome/app/chrome_command_ids.h"
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/extensions/test_extension_system.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/renderer_context_menu/render_view_context_menu_test_util.h"
 #include "chrome/browser/translate/translate_infobar_delegate.h"
@@ -28,6 +27,7 @@
 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
 #include "chrome/test/base/testing_browser_process.h"
 #include "chrome/test/base/testing_profile.h"
+#include "components/infobars/core/infobar.h"
 #include "components/translate/content/common/translate_messages.h"
 #include "components/translate/core/browser/translate_accept_languages.h"
 #include "components/translate/core/browser/translate_download_manager.h"
@@ -159,7 +159,7 @@
   // If there is 1 infobar and it is a translate infobar, closes it and returns
   // true.  Returns false otherwise.
   bool CloseTranslateInfoBar() {
-    InfoBarDelegate* infobar = GetTranslateInfoBar();
+    infobars::InfoBarDelegate* infobar = GetTranslateInfoBar();
     if (!infobar)
       return false;
     infobar->InfoBarDismissed();  // Simulates closing the infobar.
@@ -169,7 +169,7 @@
 
   // Checks whether |infobar| has been removed and clears the removed infobar
   // list.
-  bool CheckInfoBarRemovedAndReset(InfoBarDelegate* delegate) {
+  bool CheckInfoBarRemovedAndReset(infobars::InfoBarDelegate* delegate) {
     bool found = removed_infobars_.count(delegate) != 0;
     removed_infobars_.clear();
     return found;
@@ -235,7 +235,8 @@
                        const content::NotificationDetails& details) {
     DCHECK_EQ(chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED, type);
     removed_infobars_.insert(
-        content::Details<InfoBar::RemovedDetails>(details)->first->delegate());
+        content::Details<infobars::InfoBar::RemovedDetails>(
+            details)->first->delegate());
   }
 
   MOCK_METHOD1(OnPreferenceChanged, void(const std::string&));
@@ -355,7 +356,7 @@
 
   // The infobars that have been removed.
   // WARNING: the pointers point to deleted objects, use only for comparison.
-  std::set<InfoBarDelegate*> removed_infobars_;
+  std::set<infobars::InfoBarDelegate*> removed_infobars_;
 
   DISALLOW_COPY_AND_ASSIGN(TranslateManagerRenderViewHostTest);
 };
diff --git a/chrome/browser/translate/translate_tab_helper.cc b/chrome/browser/translate/translate_tab_helper.cc
index f9cadfe..3ad5942 100644
--- a/chrome/browser/translate/translate_tab_helper.cc
+++ b/chrome/browser/translate/translate_tab_helper.cc
@@ -36,6 +36,7 @@
 #if defined(CLD2_DYNAMIC_MODE)
 #include "base/files/file.h"
 #include "base/path_service.h"
+#include "chrome/common/chrome_constants.h"
 #include "chrome/common/chrome_paths.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/render_process_host.h"
diff --git a/chrome/browser/ui/android/content_settings/popup_blocked_infobar_delegate.cc b/chrome/browser/ui/android/content_settings/popup_blocked_infobar_delegate.cc
index 6fd09d8..2bc88c9 100644
--- a/chrome/browser/ui/android/content_settings/popup_blocked_infobar_delegate.cc
+++ b/chrome/browser/ui/android/content_settings/popup_blocked_infobar_delegate.cc
@@ -6,12 +6,12 @@
 
 #include "base/prefs/pref_service.h"
 #include "chrome/browser/content_settings/host_content_settings_map.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/blocked_content/popup_blocker_tab_helper.h"
 #include "chrome/common/content_settings.h"
 #include "chrome/common/content_settings_types.h"
+#include "components/infobars/core/infobar.h"
 #include "grit/generated_resources.h"
 #include "grit/theme_resources.h"
 #include "ui/base/l10n/l10n_util.h"
@@ -23,10 +23,9 @@
   const GURL& url = web_contents->GetURL();
   Profile* profile =
       Profile::FromBrowserContext(web_contents->GetBrowserContext());
-  scoped_ptr<InfoBar> infobar(ConfirmInfoBarDelegate::CreateInfoBar(
-      scoped_ptr<ConfirmInfoBarDelegate>(
-          new PopupBlockedInfoBarDelegate(
-                num_popups, url, profile->GetHostContentSettingsMap()))));
+  scoped_ptr<infobars::InfoBar> infobar(ConfirmInfoBarDelegate::CreateInfoBar(
+      scoped_ptr<ConfirmInfoBarDelegate>(new PopupBlockedInfoBarDelegate(
+          num_popups, url, profile->GetHostContentSettingsMap()))));
 
   InfoBarService* infobar_service =
       InfoBarService::FromWebContents(web_contents);
@@ -35,7 +34,7 @@
   // will be shown once, then hide then be shown again.
   // This will be fixed once we have an in place replace infobar mechanism.
   for (size_t i = 0; i < infobar_service->infobar_count(); ++i) {
-    InfoBar* existing_infobar = infobar_service->infobar_at(i);
+    infobars::InfoBar* existing_infobar = infobar_service->infobar_at(i);
     if (existing_infobar->delegate()->AsPopupBlockedInfoBarDelegate()) {
       infobar_service->ReplaceInfoBar(existing_infobar, infobar.Pass());
       return;
diff --git a/chrome/browser/ui/android/infobars/auto_login_infobar_delegate_android.cc b/chrome/browser/ui/android/infobars/auto_login_infobar_delegate_android.cc
index b52018b..48aff8c 100644
--- a/chrome/browser/ui/android/infobars/auto_login_infobar_delegate_android.cc
+++ b/chrome/browser/ui/android/infobars/auto_login_infobar_delegate_android.cc
@@ -5,13 +5,13 @@
 #include "chrome/browser/ui/android/infobars/auto_login_infobar_delegate_android.h"
 
 #include "base/android/jni_android.h"
-#include "base/android/jni_helper.h"
 #include "base/android/jni_string.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/strings/utf_string_conversions.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/infobars/simple_alert_infobar_delegate.h"
 #include "chrome/browser/ui/auto_login_infobar_delegate.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/web_contents.h"
 #include "grit/generated_resources.h"
 #include "grit/theme_resources.h"
diff --git a/chrome/browser/ui/android/infobars/auto_login_infobar_delegate_android.h b/chrome/browser/ui/android/infobars/auto_login_infobar_delegate_android.h
index b977c94..293c9aa 100644
--- a/chrome/browser/ui/android/infobars/auto_login_infobar_delegate_android.h
+++ b/chrome/browser/ui/android/infobars/auto_login_infobar_delegate_android.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_BROWSER_UI_ANDROID_INFOBARS_AUTO_LOGIN_INFOBAR_DELEGATE_ANDROID_H_
 #define CHROME_BROWSER_UI_ANDROID_INFOBARS_AUTO_LOGIN_INFOBAR_DELEGATE_ANDROID_H_
 
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/android/scoped_java_ref.h"
 #include "chrome/browser/ui/auto_login_infobar_delegate.h"
 
diff --git a/chrome/browser/ui/android/infobars/auto_login_prompter.cc b/chrome/browser/ui/android/infobars/auto_login_prompter.cc
new file mode 100644
index 0000000..2cc1f24
--- /dev/null
+++ b/chrome/browser/ui/android/infobars/auto_login_prompter.cc
@@ -0,0 +1,108 @@
+// 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.
+
+#include "chrome/browser/ui/android/infobars/auto_login_prompter.h"
+
+#include "base/bind.h"
+#include "base/command_line.h"
+#include "base/logging.h"
+#include "base/prefs/pref_service.h"
+#include "chrome/browser/google/google_url_tracker.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
+#include "chrome/browser/signin/signin_manager_factory.h"
+#include "chrome/browser/tab_contents/tab_util.h"
+#include "chrome/common/chrome_switches.h"
+#include "chrome/common/pref_names.h"
+#include "components/auto_login_parser/auto_login_parser.h"
+#include "components/signin/core/browser/profile_oauth2_token_service.h"
+#include "components/signin/core/browser/signin_manager.h"
+#include "content/public/browser/browser_thread.h"
+#include "content/public/browser/web_contents.h"
+#include "net/url_request/url_request.h"
+#include "url/gurl.h"
+
+using content::BrowserThread;
+using content::WebContents;
+
+AutoLoginPrompter::AutoLoginPrompter(WebContents* web_contents,
+                                     const Params& params,
+                                     const GURL& url)
+    : WebContentsObserver(web_contents),
+      params_(params),
+      url_(url),
+      infobar_shown_(false) {
+  if (!web_contents->IsLoading()) {
+    // If the WebContents isn't loading a page, the load notification will never
+    // be triggered.  Try adding the InfoBar now.
+    AddInfoBarToWebContents();
+  }
+}
+
+AutoLoginPrompter::~AutoLoginPrompter() {
+}
+
+// static
+void AutoLoginPrompter::ShowInfoBarIfPossible(net::URLRequest* request,
+                                              int child_id,
+                                              int route_id) {
+  // See if the response contains the X-Auto-Login header.  If so, this was
+  // a request for a login page, and the server is allowing the browser to
+  // suggest auto-login, if available.
+  Params params;
+  // Currently we only accept GAIA credentials in Chrome.
+  if (!auto_login_parser::ParserHeaderInResponse(
+          request, auto_login_parser::ONLY_GOOGLE_COM, &params.header))
+    return;
+
+  BrowserThread::PostTask(
+      BrowserThread::UI, FROM_HERE,
+      base::Bind(&ShowInfoBarUIThread,
+                 params, request->url(), child_id, route_id));
+}
+
+
+// static
+void AutoLoginPrompter::ShowInfoBarUIThread(Params params,
+                                            const GURL& url,
+                                            int child_id,
+                                            int route_id) {
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
+  WebContents* web_contents = tab_util::GetWebContentsByID(child_id, route_id);
+  if (!web_contents)
+    return;
+
+  Profile* profile =
+      Profile::FromBrowserContext(web_contents->GetBrowserContext());
+
+  if (!profile->GetPrefs()->GetBoolean(prefs::kAutologinEnabled))
+    return;
+
+  // Make sure that |account|, if specified, matches the logged in user.
+  // However, |account| is usually empty.
+  if (!params.username.empty() && !params.header.account.empty() &&
+      params.username != params.header.account)
+    return;
+  // We can't add the infobar just yet, since we need to wait for the tab to
+  // finish loading.  If we don't, the info bar appears and then disappears
+  // immediately.  Create an AutoLoginPrompter instance to listen for the
+  // relevant notifications; it will delete itself.
+  new AutoLoginPrompter(web_contents, params, url);
+}
+
+void AutoLoginPrompter::DidStopLoading(
+    content::RenderViewHost* render_view_host) {
+  AddInfoBarToWebContents();
+  delete this;
+}
+
+void AutoLoginPrompter::WebContentsDestroyed(WebContents* web_contents) {
+  // The WebContents was destroyed before the navigation completed.
+  delete this;
+}
+
+void AutoLoginPrompter::AddInfoBarToWebContents() {
+  if (!infobar_shown_)
+    infobar_shown_ = AutoLoginInfoBarDelegate::Create(web_contents(), params_);
+}
diff --git a/chrome/browser/ui/android/infobars/auto_login_prompter.h b/chrome/browser/ui/android/infobars/auto_login_prompter.h
new file mode 100644
index 0000000..d55eb67
--- /dev/null
+++ b/chrome/browser/ui/android/infobars/auto_login_prompter.h
@@ -0,0 +1,69 @@
+// 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.
+
+#ifndef CHROME_BROWSER_UI_ANDROID_INFOBARS_AUTO_LOGIN_PROMPTER_H_
+#define CHROME_BROWSER_UI_ANDROID_INFOBARS_AUTO_LOGIN_PROMPTER_H_
+
+#include <string>
+
+#include "base/compiler_specific.h"
+#include "chrome/browser/ui/auto_login_infobar_delegate.h"
+#include "content/public/browser/web_contents_observer.h"
+#include "url/gurl.h"
+
+namespace content {
+class RenderViewHost;
+class WebContents;
+}
+
+namespace net {
+class URLRequest;
+}
+
+// This class displays an infobar that allows the user to automatically login to
+// the currently loaded page with one click.  This is used when the browser
+// detects that the user has navigated to a login page and that there are stored
+// tokens that would allow a one-click login.
+class AutoLoginPrompter : public content::WebContentsObserver {
+ public:
+  typedef AutoLoginInfoBarDelegate::Params Params;
+
+  // Looks for the X-Auto-Login response header in the request, and if found,
+  // tries to display an infobar in the tab contents identified by the
+  // child/route id.
+  static void ShowInfoBarIfPossible(net::URLRequest* request,
+                                    int child_id,
+                                    int route_id);
+
+ private:
+  friend class AutoLoginPrompterTest;
+
+  AutoLoginPrompter(content::WebContents* web_contents,
+                    const Params& params,
+                    const GURL& url);
+
+  virtual ~AutoLoginPrompter();
+
+  static void ShowInfoBarUIThread(Params params,
+                                  const GURL& url,
+                                  int child_id,
+                                  int route_id);
+
+  virtual void DidStopLoading(
+      content::RenderViewHost* render_view_host) OVERRIDE;
+
+  virtual void WebContentsDestroyed(
+      content::WebContents* web_contents) OVERRIDE;
+
+  // Add the infobar to the WebContents, if it's still needed.
+  void AddInfoBarToWebContents();
+
+  const Params params_;
+  const GURL url_;
+  bool infobar_shown_;
+
+  DISALLOW_COPY_AND_ASSIGN(AutoLoginPrompter);
+};
+
+#endif  // CHROME_BROWSER_UI_ANDROID_INFOBARS_AUTO_LOGIN_PROMPTER_H_
diff --git a/chrome/browser/ui/android/infobars/confirm_infobar.cc b/chrome/browser/ui/android/infobars/confirm_infobar.cc
index 5c9ab06..670e848 100644
--- a/chrome/browser/ui/android/infobars/confirm_infobar.cc
+++ b/chrome/browser/ui/android/infobars/confirm_infobar.cc
@@ -15,18 +15,17 @@
 // ConfirmInfoBarDelegate -----------------------------------------------------
 
 // static
-scoped_ptr<InfoBar> ConfirmInfoBarDelegate::CreateInfoBar(
+scoped_ptr<infobars::InfoBar> ConfirmInfoBarDelegate::CreateInfoBar(
     scoped_ptr<ConfirmInfoBarDelegate> delegate) {
-  return scoped_ptr<InfoBar>(new ConfirmInfoBar(delegate.Pass()));
+  return scoped_ptr<infobars::InfoBar>(new ConfirmInfoBar(delegate.Pass()));
 }
 
 
 // ConfirmInfoBar -------------------------------------------------------------
 
 ConfirmInfoBar::ConfirmInfoBar(scoped_ptr<ConfirmInfoBarDelegate> delegate)
-    : InfoBarAndroid(delegate.PassAs<InfoBarDelegate>()),
-      java_confirm_delegate_() {
-}
+    : InfoBarAndroid(delegate.PassAs<infobars::InfoBarDelegate>()),
+      java_confirm_delegate_() {}
 
 ConfirmInfoBar::~ConfirmInfoBar() {
 }
diff --git a/chrome/browser/ui/android/infobars/infobar_android.cc b/chrome/browser/ui/android/infobars/infobar_android.cc
index 7b2f4b2..dcf30eb 100644
--- a/chrome/browser/ui/android/infobars/infobar_android.cc
+++ b/chrome/browser/ui/android/infobars/infobar_android.cc
@@ -8,9 +8,9 @@
 #include "base/android/jni_string.h"
 #include "base/strings/string_util.h"
 #include "chrome/browser/android/resource_mapper.h"
-#include "chrome/browser/infobars/infobar.h"
-#include "chrome/browser/infobars/infobar_delegate.h"
 #include "chrome/browser/infobars/infobar_service.h"
+#include "components/infobars/core/infobar.h"
+#include "components/infobars/core/infobar_delegate.h"
 #include "jni/InfoBar_jni.h"
 
 
@@ -18,18 +18,18 @@
 
 // Static constants defined in infobar.h.  We don't really use them for anything
 // but they are required.  The values are copied from the GTK implementation.
-const int InfoBar::kSeparatorLineHeight = 1;
-const int InfoBar::kDefaultArrowTargetHeight = 9;
-const int InfoBar::kMaximumArrowTargetHeight = 24;
-const int InfoBar::kDefaultArrowTargetHalfWidth = kDefaultArrowTargetHeight;
-const int InfoBar::kMaximumArrowTargetHalfWidth = 14;
-const int InfoBar::kDefaultBarTargetHeight = 36;
-
+const int infobars::InfoBar::kSeparatorLineHeight = 1;
+const int infobars::InfoBar::kDefaultArrowTargetHeight = 9;
+const int infobars::InfoBar::kMaximumArrowTargetHeight = 24;
+const int infobars::InfoBar::kDefaultArrowTargetHalfWidth =
+    kDefaultArrowTargetHeight;
+const int infobars::InfoBar::kMaximumArrowTargetHalfWidth = 14;
+const int infobars::InfoBar::kDefaultBarTargetHeight = 36;
 
 // InfoBarAndroid -------------------------------------------------------------
 
-InfoBarAndroid::InfoBarAndroid(scoped_ptr<InfoBarDelegate> delegate)
-    : InfoBar(delegate.Pass()) {
+InfoBarAndroid::InfoBarAndroid(scoped_ptr<infobars::InfoBarDelegate> delegate)
+    : infobars::InfoBar(delegate.Pass()) {
 }
 
 InfoBarAndroid::~InfoBarAndroid() {
diff --git a/chrome/browser/ui/android/infobars/infobar_android.h b/chrome/browser/ui/android/infobars/infobar_android.h
index 95a7d09..1411219 100644
--- a/chrome/browser/ui/android/infobars/infobar_android.h
+++ b/chrome/browser/ui/android/infobars/infobar_android.h
@@ -7,16 +7,19 @@
 
 #include <string>
 
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/android/scoped_java_ref.h"
 #include "base/basictypes.h"
 #include "base/compiler_specific.h"
-#include "chrome/browser/infobars/infobar.h"
+#include "components/infobars/core/infobar.h"
 
-class InfoBarDelegate;
 class InfoBarService;
 
-class InfoBarAndroid : public InfoBar {
+namespace infobars {
+class InfoBarDelegate;
+}
+
+class InfoBarAndroid : public infobars::InfoBar {
  public:
 
   // Make sure this set of values is aligned with the java constants defined in
@@ -31,7 +34,7 @@
     ACTION_TRANSLATE_SHOW_ORIGINAL = 4,
   };
 
-  explicit InfoBarAndroid(scoped_ptr<InfoBarDelegate> delegate);
+  explicit InfoBarAndroid(scoped_ptr<infobars::InfoBarDelegate> delegate);
   virtual ~InfoBarAndroid();
 
   // InfoBar:
diff --git a/chrome/browser/ui/android/infobars/infobar_container_android.cc b/chrome/browser/ui/android/infobars/infobar_container_android.cc
index fd9d565..10a675b 100644
--- a/chrome/browser/ui/android/infobars/infobar_container_android.cc
+++ b/chrome/browser/ui/android/infobars/infobar_container_android.cc
@@ -7,11 +7,11 @@
 #include "base/android/jni_android.h"
 #include "base/logging.h"
 #include "base/message_loop/message_loop.h"
-#include "chrome/browser/infobars/infobar.h"
-#include "chrome/browser/infobars/infobar_delegate.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/ui/android/infobars/auto_login_infobar_delegate_android.h"
 #include "chrome/browser/ui/android/infobars/infobar_android.h"
+#include "components/infobars/core/infobar.h"
+#include "components/infobars/core/infobar_delegate.h"
 #include "content/public/browser/web_contents.h"
 #include "jni/InfoBarContainer_jni.h"
 
@@ -21,10 +21,9 @@
 InfoBarContainerAndroid::InfoBarContainerAndroid(JNIEnv* env,
                                                  jobject obj,
                                                  jobject auto_login_delegate)
-    : InfoBarContainer(NULL),
+    : infobars::InfoBarContainer(NULL),
       weak_java_infobar_container_(env, obj),
-      weak_java_auto_login_delegate_(env, auto_login_delegate) {
-}
+      weak_java_auto_login_delegate_(env, auto_login_delegate) {}
 
 InfoBarContainerAndroid::~InfoBarContainerAndroid() {
   RemoveAllInfoBarsForDestruction();
@@ -34,8 +33,9 @@
   delete this;
 }
 
-void InfoBarContainerAndroid::PlatformSpecificAddInfoBar(InfoBar* infobar,
-                                                         size_t position) {
+void InfoBarContainerAndroid::PlatformSpecificAddInfoBar(
+    infobars::InfoBar* infobar,
+    size_t position) {
   DCHECK(infobar);
   InfoBarAndroid* android_bar = static_cast<InfoBarAndroid*>(infobar);
   if (!android_bar) {
@@ -70,13 +70,14 @@
 }
 
 void InfoBarContainerAndroid::PlatformSpecificReplaceInfoBar(
-    InfoBar* old_infobar,
-    InfoBar* new_infobar) {
+    infobars::InfoBar* old_infobar,
+    infobars::InfoBar* new_infobar) {
   static_cast<InfoBarAndroid*>(new_infobar)->PassJavaInfoBar(
       static_cast<InfoBarAndroid*>(old_infobar));
 }
 
-void InfoBarContainerAndroid::PlatformSpecificRemoveInfoBar(InfoBar* infobar) {
+void InfoBarContainerAndroid::PlatformSpecificRemoveInfoBar(
+    infobars::InfoBar* infobar) {
   InfoBarAndroid* android_infobar = static_cast<InfoBarAndroid*>(infobar);
   android_infobar->CloseJavaInfoBar();
 }
diff --git a/chrome/browser/ui/android/infobars/infobar_container_android.h b/chrome/browser/ui/android/infobars/infobar_container_android.h
index f64e358..4a9bfea 100644
--- a/chrome/browser/ui/android/infobars/infobar_container_android.h
+++ b/chrome/browser/ui/android/infobars/infobar_container_android.h
@@ -8,11 +8,11 @@
 #include <map>
 #include <string>
 
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/android/scoped_java_ref.h"
 #include "base/basictypes.h"
 #include "base/compiler_specific.h"
-#include "chrome/browser/infobars/infobar_container.h"
+#include "components/infobars/core/infobar_container.h"
 
 class InfoBarAndroid;
 
@@ -20,7 +20,7 @@
 class WebContents;
 }
 
-class InfoBarContainerAndroid : public InfoBarContainer {
+class InfoBarContainerAndroid : public infobars::InfoBarContainer {
  public:
   InfoBarContainerAndroid(JNIEnv* env,
                           jobject infobar_container,
@@ -39,11 +39,13 @@
   virtual ~InfoBarContainerAndroid() OVERRIDE;
 
   // InfobarContainer:
-  virtual void PlatformSpecificAddInfoBar(InfoBar* infobar,
+  virtual void PlatformSpecificAddInfoBar(infobars::InfoBar* infobar,
                                           size_t position) OVERRIDE;
-  virtual void PlatformSpecificRemoveInfoBar(InfoBar* infobar) OVERRIDE;
-  virtual void PlatformSpecificReplaceInfoBar(InfoBar* old_infobar,
-                                              InfoBar* new_infobar)  OVERRIDE;
+  virtual void PlatformSpecificRemoveInfoBar(infobars::InfoBar* infobar)
+      OVERRIDE;
+  virtual void PlatformSpecificReplaceInfoBar(
+      infobars::InfoBar* old_infobar,
+      infobars::InfoBar* new_infobar) OVERRIDE;
 
   // Create the Java equivalent of |android_bar| and add it to the java
   // container.
diff --git a/chrome/browser/ui/android/infobars/save_password_infobar.cc b/chrome/browser/ui/android/infobars/save_password_infobar.cc
index dc83254..b262ee4 100644
--- a/chrome/browser/ui/android/infobars/save_password_infobar.cc
+++ b/chrome/browser/ui/android/infobars/save_password_infobar.cc
@@ -13,9 +13,10 @@
 // SavePasswordInfoBarDelegate-------------------------------------------------
 
 // static
-scoped_ptr<InfoBar> SavePasswordInfoBarDelegate::CreateInfoBar(
+scoped_ptr<infobars::InfoBar> SavePasswordInfoBarDelegate::CreateInfoBar(
     scoped_ptr<SavePasswordInfoBarDelegate> delegate) {
-  return scoped_ptr<InfoBar>(new SavePasswordInfoBar(delegate.Pass()));
+  return scoped_ptr<infobars::InfoBar>(
+      new SavePasswordInfoBar(delegate.Pass()));
 }
 
 // SavePasswordInfoBar --------------------------------------------------------
diff --git a/chrome/browser/ui/android/infobars/translate_infobar.cc b/chrome/browser/ui/android/infobars/translate_infobar.cc
index 266f232..ab53bdb 100644
--- a/chrome/browser/ui/android/infobars/translate_infobar.cc
+++ b/chrome/browser/ui/android/infobars/translate_infobar.cc
@@ -6,7 +6,7 @@
 
 #include "base/android/jni_android.h"
 #include "base/android/jni_array.h"
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "chrome/browser/translate/translate_infobar_delegate.h"
 #include "grit/generated_resources.h"
 #include "jni/TranslateInfoBarDelegate_jni.h"
@@ -16,9 +16,9 @@
 // TranslateInfoBarDelegate ---------------------------------------------------
 
 // static
-scoped_ptr<InfoBar> TranslateInfoBarDelegate::CreateInfoBar(
+scoped_ptr<infobars::InfoBar> TranslateInfoBarDelegate::CreateInfoBar(
     scoped_ptr<TranslateInfoBarDelegate> delegate) {
-  return scoped_ptr<InfoBar>(new TranslateInfoBar(delegate.Pass()));
+  return scoped_ptr<infobars::InfoBar>(new TranslateInfoBar(delegate.Pass()));
 }
 
 
@@ -26,7 +26,7 @@
 
 TranslateInfoBar::TranslateInfoBar(
     scoped_ptr<TranslateInfoBarDelegate> delegate)
-    : InfoBarAndroid(delegate.PassAs<InfoBarDelegate>()),
+    : InfoBarAndroid(delegate.PassAs<infobars::InfoBarDelegate>()),
       java_translate_delegate_() {
 }
 
diff --git a/chrome/browser/ui/android/javascript_app_modal_dialog_android.cc b/chrome/browser/ui/android/javascript_app_modal_dialog_android.cc
index c46e1ff..0cdc5f4 100644
--- a/chrome/browser/ui/android/javascript_app_modal_dialog_android.cc
+++ b/chrome/browser/ui/android/javascript_app_modal_dialog_android.cc
@@ -157,10 +157,11 @@
 }
 
 JavascriptAppModalDialogAndroid::~JavascriptAppModalDialogAndroid() {
-  JNIEnv* env = AttachCurrentThread();
   // In case the dialog is still displaying, tell it to close itself.
   // This can happen if you trigger a dialog but close the Tab before it's
   // shown, and then accept the dialog.
-  if (!dialog_jobject_.is_null())
+  if (!dialog_jobject_.is_null()) {
+    JNIEnv* env = AttachCurrentThread();
     Java_JavascriptAppModalDialog_dismiss(env, dialog_jobject_.obj());
+  }
 }
diff --git a/chrome/browser/ui/android/javascript_app_modal_dialog_android.h b/chrome/browser/ui/android/javascript_app_modal_dialog_android.h
index 75ce74f..583191b 100644
--- a/chrome/browser/ui/android/javascript_app_modal_dialog_android.h
+++ b/chrome/browser/ui/android/javascript_app_modal_dialog_android.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_BROWSER_UI_ANDROID_JAVASCRIPT_APP_MODAL_DIALOG_ANDROID_H_
 #define CHROME_BROWSER_UI_ANDROID_JAVASCRIPT_APP_MODAL_DIALOG_ANDROID_H_
 
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/android/scoped_java_ref.h"
 #include "base/memory/scoped_ptr.h"
 #include "chrome/browser/ui/app_modal_dialogs/native_app_modal_dialog.h"
diff --git a/chrome/browser/ui/android/navigation_popup.cc b/chrome/browser/ui/android/navigation_popup.cc
index dd9dffd..7eec8a2 100644
--- a/chrome/browser/ui/android/navigation_popup.cc
+++ b/chrome/browser/ui/android/navigation_popup.cc
@@ -49,9 +49,8 @@
   // TODO(tedchoc): Request higher favicons based on screen density instead of
   //                hardcoding kFaviconSize.
   favicon_service->GetFaviconImageForURL(
-      FaviconService::FaviconForURLParams(url,
-                                          chrome::FAVICON,
-                                          gfx::kFaviconSize),
+      FaviconService::FaviconForURLParams(
+          url, favicon_base::FAVICON, gfx::kFaviconSize),
       base::Bind(&NavigationPopup::OnFaviconDataAvailable,
                  base::Unretained(this),
                  url),
@@ -60,7 +59,7 @@
 
 void NavigationPopup::OnFaviconDataAvailable(
     GURL navigation_entry_url,
-    const chrome::FaviconImageResult& image_result) {
+    const favicon_base::FaviconImageResult& image_result) {
   gfx::Image image(image_result.image);
   if (image.IsEmpty()) {
     ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
diff --git a/chrome/browser/ui/android/navigation_popup.h b/chrome/browser/ui/android/navigation_popup.h
index 816eb7a..094143c 100644
--- a/chrome/browser/ui/android/navigation_popup.h
+++ b/chrome/browser/ui/android/navigation_popup.h
@@ -7,13 +7,13 @@
 
 #include <jni.h>
 
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/basictypes.h"
 #include "base/task/cancelable_task_tracker.h"
 
 class GURL;
 
-namespace chrome {
+namespace favicon_base {
 struct FaviconImageResult;
 }
 
@@ -26,8 +26,9 @@
   void Destroy(JNIEnv* env, jobject obj);
   void FetchFaviconForUrl(JNIEnv* env, jobject obj, jstring jurl);
 
-  void OnFaviconDataAvailable(GURL navigation_entry_url,
-                              const chrome::FaviconImageResult& image_result);
+  void OnFaviconDataAvailable(
+      GURL navigation_entry_url,
+      const favicon_base::FaviconImageResult& image_result);
 
   static bool RegisterNavigationPopup(JNIEnv* env);
 
diff --git a/chrome/browser/ui/android/toolbar/toolbar_model_android.h b/chrome/browser/ui/android/toolbar/toolbar_model_android.h
index cdf3e30..5c3690b 100644
--- a/chrome/browser/ui/android/toolbar/toolbar_model_android.h
+++ b/chrome/browser/ui/android/toolbar/toolbar_model_android.h
@@ -6,7 +6,7 @@
 #define CHROME_BROWSER_UI_ANDROID_TOOLBAR_TOOLBAR_MODEL_ANDROID_H_
 
 #include "base/android/jni_android.h"
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/android/scoped_java_ref.h"
 #include "base/basictypes.h"
 #include "base/memory/scoped_ptr.h"
diff --git a/chrome/browser/ui/app_list/app_list_service_ash.h b/chrome/browser/ui/app_list/app_list_service_ash.h
deleted file mode 100644
index 50797fa..0000000
--- a/chrome/browser/ui/app_list/app_list_service_ash.h
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright 2013 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 CHROME_BROWSER_UI_APP_LIST_APP_LIST_SERVICE_ASH_H_
-#define CHROME_BROWSER_UI_APP_LIST_APP_LIST_SERVICE_ASH_H_
-
-class AppListService;
-
-namespace chrome {
-
-AppListService* GetAppListServiceAsh();
-
-}  // namespace chrome
-
-#endif  // CHROME_BROWSER_UI_APP_LIST_APP_LIST_SERVICE_ASH_H_
diff --git a/chrome/browser/ui/app_list/app_list_service_impl.cc b/chrome/browser/ui/app_list/app_list_service_impl.cc
index 732398a..de0470a 100644
--- a/chrome/browser/ui/app_list/app_list_service_impl.cc
+++ b/chrome/browser/ui/app_list/app_list_service_impl.cc
@@ -18,8 +18,6 @@
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/browser_shutdown.h"
 #include "chrome/browser/profiles/profile_manager.h"
-#include "chrome/browser/ui/app_list/keep_alive_service.h"
-#include "chrome/browser/ui/app_list/keep_alive_service_impl.h"
 #include "chrome/browser/ui/app_list/profile_loader.h"
 #include "chrome/browser/ui/app_list/profile_store.h"
 #include "chrome/common/chrome_constants.h"
@@ -228,28 +226,23 @@
 }
 
 AppListServiceImpl::AppListServiceImpl()
-    : profile_store_(new ProfileStoreImpl(
-          g_browser_process->profile_manager())),
+    : profile_store_(
+          new ProfileStoreImpl(g_browser_process->profile_manager())),
       weak_factory_(this),
       command_line_(*CommandLine::ForCurrentProcess()),
       local_state_(g_browser_process->local_state()),
-      profile_loader_(new ProfileLoader(
-          profile_store_.get(),
-          scoped_ptr<KeepAliveService>(new KeepAliveServiceImpl))) {
+      profile_loader_(new ProfileLoader(profile_store_.get())) {
   profile_store_->AddProfileObserver(this);
 }
 
-AppListServiceImpl::AppListServiceImpl(
-    const CommandLine& command_line,
-    PrefService* local_state,
-    scoped_ptr<ProfileStore> profile_store,
-    scoped_ptr<KeepAliveService> keep_alive_service)
+AppListServiceImpl::AppListServiceImpl(const CommandLine& command_line,
+                                       PrefService* local_state,
+                                       scoped_ptr<ProfileStore> profile_store)
     : profile_store_(profile_store.Pass()),
       weak_factory_(this),
       command_line_(command_line),
       local_state_(local_state),
-      profile_loader_(new ProfileLoader(
-          profile_store_.get(), keep_alive_service.Pass())) {
+      profile_loader_(new ProfileLoader(profile_store_.get())) {
   profile_store_->AddProfileObserver(this);
 }
 
diff --git a/chrome/browser/ui/app_list/app_list_service_impl.h b/chrome/browser/ui/app_list/app_list_service_impl.h
index 55660cd..9cc514c 100644
--- a/chrome/browser/ui/app_list/app_list_service_impl.h
+++ b/chrome/browser/ui/app_list/app_list_service_impl.h
@@ -15,7 +15,6 @@
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_info_cache_observer.h"
 #include "chrome/browser/ui/app_list/app_list_service.h"
-#include "chrome/browser/ui/app_list/keep_alive_service.h"
 #include "chrome/browser/ui/app_list/profile_loader.h"
 
 class ProfileStore;
@@ -33,8 +32,7 @@
   // Constructor used for testing.
   AppListServiceImpl(const base::CommandLine& command_line,
                      PrefService* local_state,
-                     scoped_ptr<ProfileStore> profile_store,
-                     scoped_ptr<KeepAliveService> keep_alive_service);
+                     scoped_ptr<ProfileStore> profile_store);
 
   void RecordAppListLaunch();
   static void RecordAppListAppLaunch();
diff --git a/chrome/browser/ui/app_list/app_list_service_unittest.cc b/chrome/browser/ui/app_list/app_list_service_unittest.cc
index affbabe..a3d7b33 100644
--- a/chrome/browser/ui/app_list/app_list_service_unittest.cc
+++ b/chrome/browser/ui/app_list/app_list_service_unittest.cc
@@ -13,7 +13,6 @@
 #include "chrome/browser/profiles/profiles_state.h"
 #include "chrome/browser/ui/app_list/app_list_service.h"
 #include "chrome/browser/ui/app_list/app_list_service_impl.h"
-#include "chrome/browser/ui/app_list/test/fake_keep_alive_service.h"
 #include "chrome/browser/ui/app_list/test/fake_profile.h"
 #include "chrome/browser/ui/app_list/test/fake_profile_store.h"
 #include "chrome/common/chrome_constants.h"
@@ -25,14 +24,9 @@
  public:
   TestingAppListServiceImpl(const CommandLine& command_line,
                             PrefService* local_state,
-                            scoped_ptr<ProfileStore> profile_store,
-                            scoped_ptr<KeepAliveService> keep_alive_service)
-      : AppListServiceImpl(command_line,
-                           local_state,
-                           profile_store.Pass(),
-                           keep_alive_service.Pass()),
-        showing_for_profile_(NULL) {
-  }
+                            scoped_ptr<ProfileStore> profile_store)
+      : AppListServiceImpl(command_line, local_state, profile_store.Pass()),
+        showing_for_profile_(NULL) {}
 
   Profile* showing_for_profile() const {
     return showing_for_profile_;
@@ -100,13 +94,11 @@
     factory.set_user_prefs(make_scoped_refptr(new TestingPrefStore));
     local_state_ = factory.Create(pref_registry).Pass();
 
-    keep_alive_service_ = new FakeKeepAliveService;
     profile_store_ = new FakeProfileStore(user_data_dir_);
     service_.reset(new TestingAppListServiceImpl(
         command_line,
         local_state_.get(),
-        scoped_ptr<ProfileStore>(profile_store_),
-        scoped_ptr<KeepAliveService>(keep_alive_service_)));
+        scoped_ptr<ProfileStore>(profile_store_)));
   }
 
   void EnableAppList() {
@@ -117,7 +109,6 @@
   base::FilePath user_data_dir_;
   scoped_ptr<PrefService> local_state_;
   FakeProfileStore* profile_store_;
-  FakeKeepAliveService* keep_alive_service_;
   scoped_ptr<TestingAppListServiceImpl> service_;
   scoped_ptr<FakeProfile> profile1_;
   scoped_ptr<FakeProfile> profile2_;
diff --git a/chrome/browser/ui/app_list/app_list_shower.cc b/chrome/browser/ui/app_list/app_list_shower.cc
index 0459fb6..6c6c0bb 100644
--- a/chrome/browser/ui/app_list/app_list_shower.cc
+++ b/chrome/browser/ui/app_list/app_list_shower.cc
@@ -5,12 +5,11 @@
 #include "base/bind.h"
 #include "base/message_loop/message_loop.h"
 #include "chrome/browser/ui/app_list/app_list_shower.h"
+#include "chrome/browser/ui/app_list/scoped_keep_alive.h"
 
 AppListShower::AppListShower(scoped_ptr<AppListFactory> factory,
-                             scoped_ptr<KeepAliveService> keep_alive,
                              AppListService* service)
     : factory_(factory.Pass()),
-      keep_alive_service_(keep_alive.Pass()),
       service_(service),
       profile_(NULL),
       can_close_app_list_(true) {
@@ -34,7 +33,7 @@
     app_list_->SetProfile(requested_profile);
   }
 
-  keep_alive_service_->EnsureKeepAlive();
+  keep_alive_.reset(new ScopedKeepAlive);
   if (!IsAppListVisible())
     app_list_->MoveNearCursor();
   app_list_->Show();
@@ -57,11 +56,11 @@
 void AppListShower::DismissAppList() {
   if (app_list_ && can_close_app_list_) {
     app_list_->Hide();
-    keep_alive_service_->FreeKeepAlive();
+    keep_alive_.reset();
   }
 }
 
-void AppListShower::CloseAppList() {
+void AppListShower::HandleViewBeingDestroyed() {
   app_list_.reset();
   profile_ = NULL;
   can_close_app_list_ = true;
@@ -76,12 +75,12 @@
   // CloseAllSecondaryWidgets() won't attempt to delete the AppList's Widget
   // again.
   if (base::MessageLoop::current()) {  // NULL in tests.
-    base::MessageLoop::current()->PostTask(FROM_HERE,
-        base::Bind(&KeepAliveService::FreeKeepAlive,
-                   base::Unretained(keep_alive_service_.get())));
+    base::MessageLoop::current()->PostTask(
+        FROM_HERE,
+        base::Bind(&AppListShower::ResetKeepAlive, base::Unretained(this)));
     return;
   }
-  keep_alive_service_->FreeKeepAlive();
+  keep_alive_.reset();
 }
 
 bool AppListShower::IsAppListVisible() const {
@@ -97,3 +96,7 @@
 bool AppListShower::HasView() const {
   return !!app_list_;
 }
+
+void AppListShower::ResetKeepAlive() {
+  keep_alive_.reset();
+}
diff --git a/chrome/browser/ui/app_list/app_list_shower.h b/chrome/browser/ui/app_list/app_list_shower.h
index 9bc89d7..9c7463c 100644
--- a/chrome/browser/ui/app_list/app_list_shower.h
+++ b/chrome/browser/ui/app_list/app_list_shower.h
@@ -8,22 +8,22 @@
 #include "base/memory/scoped_ptr.h"
 #include "chrome/browser/ui/app_list/app_list.h"
 #include "chrome/browser/ui/app_list/app_list_factory.h"
-#include "chrome/browser/ui/app_list/keep_alive_service.h"
 #include "ui/app_list/pagination_model.h"
 #include "ui/gfx/native_widget_types.h"
 
-class Profile;
-
 namespace app_list {
 class AppListModel;
 }
 
+class AppListShowerUnitTest;
+class Profile;
+class ScopedKeepAlive;
+
 // Creates and shows an AppList as needed for non-Ash desktops. It is owned
 // by AppListService.
 class AppListShower {
  public:
   AppListShower(scoped_ptr<AppListFactory> factory,
-                scoped_ptr<KeepAliveService> keep_alive,
                 AppListService* service);
   ~AppListShower();
 
@@ -41,14 +41,18 @@
   void CreateViewForProfile(Profile* requested_profile);
 
   void DismissAppList();
-  void CloseAppList();
+  void HandleViewBeingDestroyed();
   bool IsAppListVisible() const;
   void WarmupForProfile(Profile* profile);
   bool HasView() const;
 
  private:
+  friend class ::AppListShowerUnitTest;
+
+  void ResetKeepAlive();
+
   scoped_ptr<AppListFactory> factory_;
-  scoped_ptr<KeepAliveService> keep_alive_service_;
+  scoped_ptr<ScopedKeepAlive> keep_alive_;
   scoped_ptr<AppList> app_list_;
   AppListService* service_;  // Weak ptr, owns this.
   Profile* profile_;
diff --git a/chrome/browser/ui/app_list/keep_alive_service.h b/chrome/browser/ui/app_list/keep_alive_service.h
deleted file mode 100644
index d424f64..0000000
--- a/chrome/browser/ui/app_list/keep_alive_service.h
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright 2013 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 CHROME_BROWSER_UI_APP_LIST_KEEP_ALIVE_SERVICE_H_
-#define CHROME_BROWSER_UI_APP_LIST_KEEP_ALIVE_SERVICE_H_
-
-// An interface to manipulate browser keepalive. Subclasses should ensure that
-// keepalive is cleared when the object is destructed.
-class KeepAliveService {
- public:
-  virtual ~KeepAliveService() {}
-  virtual void EnsureKeepAlive() = 0;
-  virtual void FreeKeepAlive() = 0;
-};
-
-#endif  // CHROME_BROWSER_UI_APP_LIST_KEEP_ALIVE_SERVICE_H_
diff --git a/chrome/browser/ui/app_list/keep_alive_service_impl.cc b/chrome/browser/ui/app_list/keep_alive_service_impl.cc
deleted file mode 100644
index c068b6e..0000000
--- a/chrome/browser/ui/app_list/keep_alive_service_impl.cc
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2013 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 "chrome/browser/ui/app_list/keep_alive_service_impl.h"
-
-#include "chrome/browser/lifetime/application_lifetime.h"
-
-ScopedKeepAlive::ScopedKeepAlive() { chrome::IncrementKeepAliveCount(); }
-
-ScopedKeepAlive::~ScopedKeepAlive() { chrome::DecrementKeepAliveCount(); }
-
-KeepAliveServiceImpl::KeepAliveServiceImpl() {
-}
-
-KeepAliveServiceImpl::~KeepAliveServiceImpl() {
-}
-
-void KeepAliveServiceImpl::EnsureKeepAlive() {
-  if (!keep_alive_)
-    keep_alive_.reset(new ScopedKeepAlive());
-}
-
-void KeepAliveServiceImpl::FreeKeepAlive() {
-  if (keep_alive_)
-    keep_alive_.reset();
-}
diff --git a/chrome/browser/ui/app_list/keep_alive_service_impl.h b/chrome/browser/ui/app_list/keep_alive_service_impl.h
deleted file mode 100644
index 1d67e7e..0000000
--- a/chrome/browser/ui/app_list/keep_alive_service_impl.h
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright 2013 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 CHROME_BROWSER_UI_APP_LIST_KEEP_ALIVE_SERVICE_IMPL_H_
-#define CHROME_BROWSER_UI_APP_LIST_KEEP_ALIVE_SERVICE_IMPL_H_
-
-#include "base/memory/scoped_ptr.h"
-#include "chrome/browser/ui/app_list/keep_alive_service.h"
-
-class ScopedKeepAlive {
- public:
-  ScopedKeepAlive();
-  ~ScopedKeepAlive();
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(ScopedKeepAlive);
-};
-
-class KeepAliveServiceImpl : public KeepAliveService {
- public:
-  KeepAliveServiceImpl();
-  virtual ~KeepAliveServiceImpl();
-
-  // KeepAliveServiceImpl overrides.
-  virtual void EnsureKeepAlive() OVERRIDE;
-  virtual void FreeKeepAlive() OVERRIDE;
-
- private:
-  // Used to keep the browser process alive while the app list is visible.
-  scoped_ptr<ScopedKeepAlive> keep_alive_;
-
-  DISALLOW_COPY_AND_ASSIGN(KeepAliveServiceImpl);
-};
-
-
-
-#endif  // CHROME_BROWSER_UI_APP_LIST_KEEP_ALIVE_SERVICE_IMPL_H_
diff --git a/chrome/browser/ui/app_list/profile_loader.cc b/chrome/browser/ui/app_list/profile_loader.cc
index 1bc9dea..d2fd92c 100644
--- a/chrome/browser/ui/app_list/profile_loader.cc
+++ b/chrome/browser/ui/app_list/profile_loader.cc
@@ -6,17 +6,14 @@
 
 #include "base/bind.h"
 #include "base/files/file_path.h"
-#include "base/memory/weak_ptr.h"
-#include "chrome/browser/lifetime/application_lifetime.h"
-#include "chrome/browser/profiles/profile_manager.h"
+#include "chrome/browser/ui/app_list/profile_store.h"
+#include "chrome/browser/ui/app_list/scoped_keep_alive.h"
 
-ProfileLoader::ProfileLoader(ProfileStore* profile_store,
-                             scoped_ptr<KeepAliveService> keep_alive_service)
-  : profile_store_(profile_store),
-    keep_alive_service_(keep_alive_service.Pass()),
-    profile_load_sequence_id_(0),
-    pending_profile_loads_(0),
-    weak_factory_(this) {
+ProfileLoader::ProfileLoader(ProfileStore* profile_store)
+    : profile_store_(profile_store),
+      profile_load_sequence_id_(0),
+      pending_profile_loads_(0),
+      weak_factory_(this) {
 }
 
 ProfileLoader::~ProfileLoader() {
@@ -61,11 +58,11 @@
 void ProfileLoader::IncrementPendingProfileLoads() {
   pending_profile_loads_++;
   if (pending_profile_loads_ == 1)
-    keep_alive_service_->EnsureKeepAlive();
+    keep_alive_.reset(new ScopedKeepAlive);
 }
 
 void ProfileLoader::DecrementPendingProfileLoads() {
   pending_profile_loads_--;
   if (pending_profile_loads_ == 0)
-    keep_alive_service_->FreeKeepAlive();
+    keep_alive_.reset();
 }
diff --git a/chrome/browser/ui/app_list/profile_loader.h b/chrome/browser/ui/app_list/profile_loader.h
index eb3f338..724ea82 100644
--- a/chrome/browser/ui/app_list/profile_loader.h
+++ b/chrome/browser/ui/app_list/profile_loader.h
@@ -6,18 +6,16 @@
 #define CHROME_BROWSER_UI_APP_LIST_PROFILE_LOADER_H_
 
 #include "base/callback.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/profiles/profile_manager.h"
-#include "chrome/browser/ui/app_list/keep_alive_service.h"
-#include "chrome/browser/ui/app_list/profile_store.h"
 
 namespace base {
 class FilePath;
 }
 
-class ProfileManager;
+class Profile;
+class ProfileLoaderUnittest;
+class ProfileStore;
+class ScopedKeepAlive;
 
 // This class loads profiles asynchronously and calls the provided callback once
 // the profile is ready. Only the callback for the most recent load request is
@@ -28,8 +26,7 @@
 // TODO(koz): Merge this into AppListServiceImpl.
 class ProfileLoader {
  public:
-  explicit ProfileLoader(ProfileStore* profile_store,
-                         scoped_ptr<KeepAliveService> keep_alive_service);
+  explicit ProfileLoader(ProfileStore* profile_store);
   ~ProfileLoader();
 
   bool IsAnyProfileLoading() const;
@@ -39,6 +36,8 @@
       base::Callback<void(Profile*)> callback);
 
  private:
+  friend class ::ProfileLoaderUnittest;
+
   void OnProfileLoaded(int profile_load_sequence_id,
                        base::Callback<void(Profile*)> callback,
                        Profile* profile);
@@ -47,7 +46,7 @@
   void DecrementPendingProfileLoads();
 
   ProfileStore* profile_store_;
-  scoped_ptr<KeepAliveService> keep_alive_service_;
+  scoped_ptr<ScopedKeepAlive> keep_alive_;
   int profile_load_sequence_id_;
   int pending_profile_loads_;
 
diff --git a/chrome/browser/ui/app_list/profile_loader_unittest.cc b/chrome/browser/ui/app_list/profile_loader_unittest.cc
index dce1251..d833e0f 100644
--- a/chrome/browser/ui/app_list/profile_loader_unittest.cc
+++ b/chrome/browser/ui/app_list/profile_loader_unittest.cc
@@ -7,7 +7,6 @@
 #include "base/memory/scoped_ptr.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/app_list/profile_loader.h"
-#include "chrome/browser/ui/app_list/test/fake_keep_alive_service.h"
 #include "chrome/browser/ui/app_list/test/fake_profile.h"
 #include "chrome/browser/ui/app_list/test/fake_profile_store.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -23,10 +22,7 @@
 
     profile_store_.reset(new FakeProfileStore(
         base::FilePath(FILE_PATH_LITERAL("udd"))));
-    keep_alive_service_ = new FakeKeepAliveService;
-    loader_.reset(new ProfileLoader(
-        profile_store_.get(),
-        scoped_ptr<KeepAliveService>(keep_alive_service_)));
+    loader_.reset(new ProfileLoader(profile_store_.get()));
   }
 
   void StartLoadingProfile(Profile* profile) {
@@ -44,7 +40,11 @@
     last_callback_result_ = profile;
   }
 
-  FakeKeepAliveService* keep_alive_service_;
+  bool HasKeepAlive() const {
+    return loader_->keep_alive_.get() != NULL;
+  }
+
+ protected:
   scoped_ptr<ProfileLoader> loader_;
   scoped_ptr<FakeProfileStore> profile_store_;
   scoped_ptr<FakeProfile> profile1_;
@@ -69,48 +69,48 @@
 
 TEST_F(ProfileLoaderUnittest, TestKeepsAliveWhileLoadingProfiles) {
   EXPECT_FALSE(loader_->IsAnyProfileLoading());
-  EXPECT_FALSE(keep_alive_service_->is_keeping_alive());
+  EXPECT_FALSE(HasKeepAlive());
 
   StartLoadingProfile(profile1_.get());
   EXPECT_TRUE(loader_->IsAnyProfileLoading());
-  EXPECT_TRUE(keep_alive_service_->is_keeping_alive());
+  EXPECT_TRUE(HasKeepAlive());
 
   FinishLoadingProfile(profile1_.get());
   EXPECT_FALSE(loader_->IsAnyProfileLoading());
-  EXPECT_FALSE(keep_alive_service_->is_keeping_alive());
+  EXPECT_FALSE(HasKeepAlive());
 }
 
 TEST_F(ProfileLoaderUnittest, TestKeepsAliveWhileLoadingMultipleProfiles) {
   EXPECT_FALSE(loader_->IsAnyProfileLoading());
-  EXPECT_FALSE(keep_alive_service_->is_keeping_alive());
+  EXPECT_FALSE(HasKeepAlive());
 
   StartLoadingProfile(profile1_.get());
   EXPECT_TRUE(loader_->IsAnyProfileLoading());
-  EXPECT_TRUE(keep_alive_service_->is_keeping_alive());
+  EXPECT_TRUE(HasKeepAlive());
 
   StartLoadingProfile(profile2_.get());
   EXPECT_TRUE(loader_->IsAnyProfileLoading());
-  EXPECT_TRUE(keep_alive_service_->is_keeping_alive());
+  EXPECT_TRUE(HasKeepAlive());
 
   FinishLoadingProfile(profile1_.get());
   EXPECT_TRUE(loader_->IsAnyProfileLoading());
-  EXPECT_TRUE(keep_alive_service_->is_keeping_alive());
+  EXPECT_TRUE(HasKeepAlive());
 
   FinishLoadingProfile(profile2_.get());
   EXPECT_FALSE(loader_->IsAnyProfileLoading());
-  EXPECT_FALSE(keep_alive_service_->is_keeping_alive());
+  EXPECT_FALSE(HasKeepAlive());
 }
 
 TEST_F(ProfileLoaderUnittest, TestInvalidatingCurrentLoad) {
   EXPECT_FALSE(loader_->IsAnyProfileLoading());
-  EXPECT_FALSE(keep_alive_service_->is_keeping_alive());
+  EXPECT_FALSE(HasKeepAlive());
 
   StartLoadingProfile(profile1_.get());
   loader_->InvalidatePendingProfileLoads();
   // The profile is still considered loading even though we will do nothing when
   // it gets here.
   EXPECT_TRUE(loader_->IsAnyProfileLoading());
-  EXPECT_TRUE(keep_alive_service_->is_keeping_alive());
+  EXPECT_TRUE(HasKeepAlive());
 
   FinishLoadingProfile(profile1_.get());
   EXPECT_EQ(NULL, last_callback_result_);
diff --git a/chrome/browser/ui/app_list/scoped_keep_alive.cc b/chrome/browser/ui/app_list/scoped_keep_alive.cc
new file mode 100644
index 0000000..c93558a3
--- /dev/null
+++ b/chrome/browser/ui/app_list/scoped_keep_alive.cc
@@ -0,0 +1,19 @@
+// 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.
+
+#include "chrome/browser/ui/app_list/scoped_keep_alive.h"
+
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/lifetime/application_lifetime.h"
+
+ScopedKeepAlive::ScopedKeepAlive() {
+  // Allow ScopedKeepAlive to be used in unit tests.
+  if (g_browser_process)
+    chrome::IncrementKeepAliveCount();
+}
+
+ScopedKeepAlive::~ScopedKeepAlive() {
+  if (g_browser_process)
+    chrome::DecrementKeepAliveCount();
+}
diff --git a/chrome/browser/ui/app_list/scoped_keep_alive.h b/chrome/browser/ui/app_list/scoped_keep_alive.h
new file mode 100644
index 0000000..89ff947
--- /dev/null
+++ b/chrome/browser/ui/app_list/scoped_keep_alive.h
@@ -0,0 +1,20 @@
+// 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.
+
+#ifndef CHROME_BROWSER_UI_APP_LIST_SCOPED_KEEP_ALIVE_H_
+#define CHROME_BROWSER_UI_APP_LIST_SCOPED_KEEP_ALIVE_H_
+
+#include "base/macros.h"
+
+// A class that can be put in a scoped_ptr to represent a "keep alive" resource.
+class ScopedKeepAlive {
+ public:
+  explicit ScopedKeepAlive();
+  ~ScopedKeepAlive();
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(ScopedKeepAlive);
+};
+
+#endif  // CHROME_BROWSER_UI_APP_LIST_SCOPED_KEEP_ALIVE_H_
diff --git a/chrome/browser/ui/app_list/search/app_search_provider.cc b/chrome/browser/ui/app_list/search/app_search_provider.cc
index 085d1a3..99ddc6b 100644
--- a/chrome/browser/ui/app_list/search/app_search_provider.cc
+++ b/chrome/browser/ui/app_list/search/app_search_provider.cc
@@ -48,7 +48,8 @@
     AppListControllerDelegate* list_controller)
     : profile_(profile),
       list_controller_(list_controller) {
-  registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
+  registrar_.Add(this,
+                 chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
                  content::Source<Profile>(profile_->GetOriginalProfile()));
   registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNINSTALLED,
                  content::Source<Profile>(profile_->GetOriginalProfile()));
diff --git a/chrome/browser/ui/app_list/search/omnibox_provider.cc b/chrome/browser/ui/app_list/search/omnibox_provider.cc
index 99ae67f..1793964 100644
--- a/chrome/browser/ui/app_list/search/omnibox_provider.cc
+++ b/chrome/browser/ui/app_list/search/omnibox_provider.cc
@@ -152,7 +152,7 @@
                                        false,
                                        false,
                                        true,
-                                       AutocompleteInput::ALL_MATCHES));
+                                       true));
 }
 
 void OmniboxProvider::Stop() {
diff --git a/chrome/browser/ui/app_list/search/people/people_result.cc b/chrome/browser/ui/app_list/search/people/people_result.cc
index 6c6156b..9753182 100644
--- a/chrome/browser/ui/app_list/search/people/people_result.cc
+++ b/chrome/browser/ui/app_list/search/people/people_result.cc
@@ -20,7 +20,6 @@
 #include "components/signin/core/browser/signin_manager.h"
 #include "content/public/browser/user_metrics.h"
 #include "extensions/browser/event_router.h"
-#include "extensions/browser/extension_system.h"
 #include "grit/generated_resources.h"
 #include "grit/theme_resources.h"
 #include "ui/base/l10n/l10n_util.h"
@@ -35,7 +34,7 @@
 namespace {
 
 const int kIconSize = 32;
-const char kImageSizePath[] = "s32-p/";
+const char kImageSizePath[] = "s64-p/";
 const char kEmailUrlPrefix[] = "mailto:";
 
 const char* const kHangoutsExtensionIds[] = {
@@ -47,7 +46,7 @@
 
 // Add a query parameter to specify the size to fetch the image in. The
 // original profile image can be of an arbitrary size, we ask the server to
-// crop it to a square 32x32 using its smart cropping algorithm.
+// crop it to a square 64x64 using its smart cropping algorithm.
 GURL GetImageUrl(const GURL& url) {
   std::string image_filename = url.ExtractFileName();
   if (image_filename.empty())
@@ -164,9 +163,8 @@
 
   // TODO(rkc): Change this once we remove the hangoutsPrivate API.
   // See crbug.com/306672
-  extensions::ExtensionSystem::Get(
-      profile_)->event_router()->DispatchEventToExtension(
-          hangouts_extension_id_, event.Pass());
+  extensions::EventRouter::Get(profile_)
+      ->DispatchEventToExtension(hangouts_extension_id_, event.Pass());
 
   content::RecordAction(base::UserMetricsAction("PeopleSearch_OpenChat"));
 }
@@ -185,8 +183,7 @@
   // TODO(rkc): Change this once we remove the hangoutsPrivate API.
   // See crbug.com/306672
   for (size_t i = 0; i < arraysize(kHangoutsExtensionIds); ++i) {
-    if (extensions::ExtensionSystem::Get(
-        profile_)->event_router()->ExtensionHasEventListener(
+    if (extensions::EventRouter::Get(profile_)->ExtensionHasEventListener(
             kHangoutsExtensionIds[i], OnHangoutRequested::kEventName)) {
       hangouts_extension_id_ = kHangoutsExtensionIds[i];
       return;
diff --git a/chrome/browser/ui/app_list/search/tokenized_string.cc b/chrome/browser/ui/app_list/search/tokenized_string.cc
index d2a0027..fc857fb 100644
--- a/chrome/browser/ui/app_list/search/tokenized_string.cc
+++ b/chrome/browser/ui/app_list/search/tokenized_string.cc
@@ -22,7 +22,11 @@
 
 void TokenizedString::Tokenize() {
   BreakIterator break_iter(text_,  BreakIterator::BREAK_WORD);
-  CHECK(break_iter.Init());
+  if (!break_iter.Init()) {
+    NOTREACHED() << "BreakIterator init failed"
+                 << ", text=\"" << text_ << "\"";
+    return;
+  }
 
   while (break_iter.Advance()) {
     if (!break_iter.IsWord())
diff --git a/chrome/browser/ui/app_list/search/tokenized_string_char_iterator.cc b/chrome/browser/ui/app_list/search/tokenized_string_char_iterator.cc
index 6999edd..744dcaa 100644
--- a/chrome/browser/ui/app_list/search/tokenized_string_char_iterator.cc
+++ b/chrome/browser/ui/app_list/search/tokenized_string_char_iterator.cc
@@ -10,6 +10,13 @@
 
 namespace app_list {
 
+TokenizedStringCharIterator::State::State() : token_index(0u), char_index(0) {}
+
+TokenizedStringCharIterator::State::State(size_t token_index, int char_index)
+    : token_index(token_index),
+      char_index(char_index) {
+}
+
 TokenizedStringCharIterator::TokenizedStringCharIterator(
     const TokenizedString& tokenized)
     : tokens_(tokenized.tokens()),
@@ -57,6 +64,21 @@
   return current_token_iter_ && current_token_iter_->char_pos() == 0;
 }
 
+TokenizedStringCharIterator::State
+TokenizedStringCharIterator::GetState() const {
+  return State(current_token_,
+               current_token_iter_ ? current_token_iter_->char_pos() : 0);
+}
+
+void TokenizedStringCharIterator::SetState(const State& state) {
+  current_token_ = state.token_index;
+  CreateTokenCharIterator();
+  if (current_token_iter_) {
+    while (current_token_iter_->char_pos() < state.char_index)
+      current_token_iter_->Advance();
+  }
+}
+
 void TokenizedStringCharIterator::CreateTokenCharIterator() {
   if (current_token_ == tokens_.size()) {
     current_token_iter_.reset();
diff --git a/chrome/browser/ui/app_list/search/tokenized_string_char_iterator.h b/chrome/browser/ui/app_list/search/tokenized_string_char_iterator.h
index 6c3c065..a77ee73 100644
--- a/chrome/browser/ui/app_list/search/tokenized_string_char_iterator.h
+++ b/chrome/browser/ui/app_list/search/tokenized_string_char_iterator.h
@@ -20,6 +20,14 @@
 // An UTF16 char iterator for a TokenizedString.
 class TokenizedStringCharIterator {
  public:
+  struct State {
+    State();
+    State(size_t token_index, int char_index);
+
+    size_t token_index;
+    int32 char_index;
+  };
+
   // Requires |tokenized| out-lives this iterator.
   explicit TokenizedStringCharIterator(const TokenizedString& tokenized);
   ~TokenizedStringCharIterator();
@@ -44,6 +52,10 @@
   // Returns true if the current char is the first char of the current token.
   bool IsFirstCharOfToken() const;
 
+  // Helpers to get and restore the iterator's state.
+  State GetState() const;
+  void SetState(const State& state);
+
   // Returns true if the iterator is at the end.
   bool end() const { return !current_token_iter_; }
 
diff --git a/chrome/browser/ui/app_list/search/tokenized_string_match.cc b/chrome/browser/ui/app_list/search/tokenized_string_match.cc
index 8190b90..e63a6d9 100644
--- a/chrome/browser/ui/app_list/search/tokenized_string_match.cc
+++ b/chrome/browser/ui/app_list/search/tokenized_string_match.cc
@@ -4,6 +4,8 @@
 
 #include "chrome/browser/ui/app_list/search/tokenized_string_match.h"
 
+#include "base/i18n/string_search.h"
+#include "base/logging.h"
 #include "chrome/browser/ui/app_list/search/tokenized_string_char_iterator.h"
 
 namespace app_list {
@@ -28,13 +30,162 @@
 //       kIsFrontOfWordMultipler for 'c'.
 //   Query 'ch' would use kIsFrontOfWordMultipler for 'c' and
 //       kIsWeakHitMultiplier for 'h'.
+//   Query 'oo' does not match any prefix and would use the substring match
+//       fallback, thus kIsSubstringMultiplier is used for each char.
 const double kIsPrefixMultiplier = 1.0;
 const double kIsFrontOfWordMultipler = 0.8;
 const double kIsWeakHitMultiplier = 0.6;
+const double kIsSubstringMultiplier = 0.4;
 
 // A relevance score that represents no match.
 const double kNoMatchScore = 0.0;
 
+// PrefixMatcher matches the chars of a given query as prefix of tokens in
+// a given text or as prefix of the acronyms of those text tokens.
+class PrefixMatcher {
+ public:
+  PrefixMatcher(const TokenizedString& query,
+                const TokenizedString& text)
+      : query_iter_(query),
+        text_iter_(text),
+        current_match_(gfx::Range::InvalidRange()),
+        current_relevance_(kNoMatchScore) {
+  }
+
+  // Invokes RunMatch to perform prefix match. Use |states_| as a stack to
+  // perform DFS (depth first search) so that all possible matches are
+  // attempted. Stops on the first full match and returns true. Otherwise,
+  // returns false to indicate no match.
+  bool Match() {
+    while (!RunMatch()) {
+      // No match found and no more states to try. Bail out.
+      if (states_.empty()) {
+        current_relevance_ = kNoMatchScore;
+        current_hits_.clear();
+        return false;
+      }
+
+      PopState();
+
+      // Skip restored match to try other possibilites.
+      AdvanceToNextTextToken();
+    }
+
+    if (current_match_.IsValid())
+      current_hits_.push_back(current_match_);
+
+    return true;
+  }
+
+  double relevance() const { return current_relevance_; }
+  const TokenizedStringMatch::Hits& hits() const { return current_hits_; }
+
+ private:
+  // Context record of a match.
+  struct State {
+    State() : relevance(kNoMatchScore) {}
+    State(double relevance,
+          const gfx::Range& current_match,
+          const TokenizedStringMatch::Hits& hits,
+          const TokenizedStringCharIterator& query_iter,
+          const TokenizedStringCharIterator& text_iter)
+        : relevance(relevance),
+          current_match(current_match),
+          hits(hits.begin(), hits.end()),
+          query_iter_state(query_iter.GetState()),
+          text_iter_state(text_iter.GetState()) {}
+
+    // The current score of the processed query chars.
+    double relevance;
+
+    // Current matching range.
+    gfx::Range current_match;
+
+    // Completed matching ranges of the processed query chars.
+    TokenizedStringMatch::Hits hits;
+
+    // States of the processed query and text chars.
+    TokenizedStringCharIterator::State query_iter_state;
+    TokenizedStringCharIterator::State text_iter_state;
+  };
+  typedef std::vector<State> States;
+
+  // Match chars from the query and text one by one. For each matching char,
+  // calculate relevance and matching ranges. And the current stats is
+  // recorded so that the match could be skipped later to try other
+  // possiblities. Repeat until any of the iterators run out. Return true if
+  // query iterator runs out, i.e. all chars in query are matched.
+  bool RunMatch() {
+    while (!query_iter_.end() && !text_iter_.end()) {
+      if (query_iter_.Get() == text_iter_.Get()) {
+        PushState();
+
+        if (query_iter_.GetArrayPos() == text_iter_.GetArrayPos())
+          current_relevance_ += kIsPrefixMultiplier;
+        else if (text_iter_.IsFirstCharOfToken())
+          current_relevance_ += kIsFrontOfWordMultipler;
+        else
+          current_relevance_ += kIsWeakHitMultiplier;
+
+        if (!current_match_.IsValid())
+          current_match_.set_start(text_iter_.GetArrayPos());
+        current_match_.set_end(text_iter_.GetArrayPos() +
+                              text_iter_.GetCharSize());
+
+        query_iter_.NextChar();
+        text_iter_.NextChar();
+      } else {
+        AdvanceToNextTextToken();
+      }
+    }
+
+    return query_iter_.end();
+  }
+
+  // Skip to the next text token and close current match. Invoked when a
+  // mismatch happens or to skip a restored match.
+  void AdvanceToNextTextToken() {
+    if (current_match_.IsValid()) {
+      current_hits_.push_back(current_match_);
+      current_match_ = gfx::Range::InvalidRange();
+    }
+
+    text_iter_.NextToken();
+  }
+
+  void PushState() {
+    states_.push_back(State(current_relevance_,
+                            current_match_,
+                            current_hits_,
+                            query_iter_,
+                            text_iter_));
+  }
+
+  void PopState() {
+    DCHECK(!states_.empty());
+
+    State& last_match = states_.back();
+    current_relevance_ = last_match.relevance;
+    current_match_ = last_match.current_match;
+    current_hits_.swap(last_match.hits);
+    query_iter_.SetState(last_match.query_iter_state);
+    text_iter_.SetState(last_match.text_iter_state);
+
+    states_.pop_back();
+  }
+
+  TokenizedStringCharIterator query_iter_;
+  TokenizedStringCharIterator text_iter_;
+
+  States states_;
+  gfx::Range current_match_;
+
+  double current_relevance_;
+  TokenizedStringMatch::Hits current_hits_;
+
+  DISALLOW_COPY_AND_ASSIGN(PrefixMatcher);
+};
+
 }  // namespace
 
 TokenizedStringMatch::TokenizedStringMatch()
@@ -47,46 +198,26 @@
   relevance_ = kNoMatchScore;
   hits_.clear();
 
-  gfx::Range hit = gfx::Range::InvalidRange();
+  PrefixMatcher matcher(query, text);
+  if (matcher.Match()) {
+    relevance_ = matcher.relevance();
+    hits_.assign(matcher.hits().begin(), matcher.hits().end());
+  }
 
-  TokenizedStringCharIterator query_iter(query);
-  TokenizedStringCharIterator text_iter(text);
-
-  while (!query_iter.end() && !text_iter.end()) {
-    if (query_iter.Get() == text_iter.Get()) {
-      if (query_iter.GetArrayPos() == text_iter.GetArrayPos())
-        relevance_ += kIsPrefixMultiplier;
-      else if (text_iter.IsFirstCharOfToken())
-        relevance_ += kIsFrontOfWordMultipler;
-      else
-        relevance_ += kIsWeakHitMultiplier;
-
-      if (!hit.IsValid())
-        hit.set_start(text_iter.GetArrayPos());
-      hit.set_end(text_iter.GetArrayPos() + text_iter.GetCharSize());
-
-      query_iter.NextChar();
-      text_iter.NextChar();
-    } else {
-      if (hit.IsValid()) {
-        hits_.push_back(hit);
-        hit = gfx::Range::InvalidRange();
-      }
-
-      text_iter.NextToken();
+  // Substring match as a fallback.
+  if (relevance_ == kNoMatchScore) {
+    size_t substr_match_start = 0;
+    size_t substr_match_length = 0;
+    if (base::i18n::StringSearchIgnoringCaseAndAccents(query.text(),
+                                                       text.text(),
+                                                       &substr_match_start,
+                                                       &substr_match_length)) {
+      relevance_ = kIsSubstringMultiplier * substr_match_length;
+      hits_.push_back(gfx::Range(substr_match_start,
+                                 substr_match_start + substr_match_length));
     }
   }
 
-  // No match if query is not fully consumed.
-  if (!query_iter.end()) {
-    relevance_ = kNoMatchScore;
-    hits_.clear();
-    return false;
-  }
-
-  if (hit.IsValid())
-    hits_.push_back(hit);
-
   // Using length() for normalizing is not 100% correct but should be good
   // enough compared with using real char count of the text.
   if (text.text().length())
diff --git a/chrome/browser/ui/app_list/search/tokenized_string_match.h b/chrome/browser/ui/app_list/search/tokenized_string_match.h
index 99b84da..3c9ceb8 100644
--- a/chrome/browser/ui/app_list/search/tokenized_string_match.h
+++ b/chrome/browser/ui/app_list/search/tokenized_string_match.h
@@ -39,7 +39,10 @@
   const Hits& hits() const { return hits_; }
 
  private:
+  // Score in range of [0,1] representing how well the query matches the text.
   double relevance_;
+
+  // Char index ranges in |text| of where matches are found.
   Hits hits_;
 
   DISALLOW_COPY_AND_ASSIGN(TokenizedStringMatch);
diff --git a/chrome/browser/ui/app_list/search/tokenized_string_match_unittest.cc b/chrome/browser/ui/app_list/search/tokenized_string_match_unittest.cc
index 339d24f..d9c8a8e 100644
--- a/chrome/browser/ui/app_list/search/tokenized_string_match_unittest.cc
+++ b/chrome/browser/ui/app_list/search/tokenized_string_match_unittest.cc
@@ -66,6 +66,9 @@
     { "Cut the rope", "cr", "[C]ut the [r]ope" },
     { "John Doe", "jdoe", "[J]ohn [Doe]" },
     { "John Doe", "johnd", "[John D]oe" },
+    { "Secure Shell", "she", "Secure [She]ll" },
+    { "Simple Secure Shell", "sish", "[Si]mple Secure [Sh]ell" },
+    { "Netflix", "flix", "Net[flix]" },
   };
 
   TokenizedStringMatch match;
@@ -93,6 +96,10 @@
     // Prefix match is better than middle match and acronym match.
     { "Google Chrome", "ch", "go" },
     { "Google Chrome", "gc", "go" },
+    // Substring match has the lowest score.
+    { "Google Chrome", "oo", "gc" },
+    { "Google Chrome", "oo", "go" },
+    { "Google Chrome", "oo", "ch" },
   };
 
   TokenizedStringMatch match_low;
diff --git a/chrome/browser/ui/app_list/test/app_list_shower_unittest.cc b/chrome/browser/ui/app_list/test/app_list_shower_unittest.cc
index c01c5db..66224a9 100644
--- a/chrome/browser/ui/app_list/test/app_list_shower_unittest.cc
+++ b/chrome/browser/ui/app_list/test/app_list_shower_unittest.cc
@@ -7,8 +7,7 @@
 #include "chrome/browser/ui/app_list/app_list.h"
 #include "chrome/browser/ui/app_list/app_list_factory.h"
 #include "chrome/browser/ui/app_list/app_list_shower.h"
-#include "chrome/browser/ui/app_list/keep_alive_service.h"
-#include "chrome/browser/ui/app_list/test/fake_keep_alive_service.h"
+#include "chrome/browser/ui/app_list/scoped_keep_alive.h"
 #include "chrome/browser/ui/app_list/test/fake_profile.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -75,11 +74,9 @@
 class AppListShowerUnitTest : public testing::Test {
  public:
   virtual void SetUp() OVERRIDE {
-    keep_alive_service_ = new FakeKeepAliveService;
     factory_ = new FakeFactory;
     shower_.reset(
         new AppListShower(scoped_ptr<AppListFactory>(factory_),
-                          scoped_ptr<KeepAliveService>(keep_alive_service_),
                           NULL /* service */));
     profile1_ = CreateProfile("p1").Pass();
     profile2_ = CreateProfile("p2").Pass();
@@ -96,8 +93,10 @@
     return static_cast<FakeAppList*>(shower_->app_list());
   }
 
-  // Owned by |shower_|.
-  FakeKeepAliveService* keep_alive_service_;
+  bool HasKeepAlive() const {
+    return shower_->keep_alive_.get() != NULL;
+  }
+
   // Owned by |shower_|.
   FakeFactory* factory_;
   scoped_ptr<AppListShower> shower_;
@@ -108,14 +107,14 @@
 TEST_F(AppListShowerUnitTest, Preconditions) {
   EXPECT_FALSE(shower_->IsAppListVisible());
   EXPECT_FALSE(shower_->HasView());
-  EXPECT_FALSE(keep_alive_service_->is_keeping_alive());
+  EXPECT_FALSE(HasKeepAlive());
 }
 
 TEST_F(AppListShowerUnitTest, ShowForProfilePutsViewOnScreen) {
   shower_->ShowForProfile(profile1_.get());
   EXPECT_TRUE(shower_->IsAppListVisible());
   EXPECT_TRUE(shower_->HasView());
-  EXPECT_TRUE(keep_alive_service_->is_keeping_alive());
+  EXPECT_TRUE(HasKeepAlive());
 }
 
 TEST_F(AppListShowerUnitTest, HidingViewRemovesKeepalive) {
@@ -123,7 +122,7 @@
   shower_->DismissAppList();
   EXPECT_FALSE(shower_->IsAppListVisible());
   EXPECT_TRUE(shower_->HasView());
-  EXPECT_FALSE(keep_alive_service_->is_keeping_alive());
+  EXPECT_FALSE(HasKeepAlive());
 }
 
 TEST_F(AppListShowerUnitTest, HideAndShowReusesView) {
@@ -135,24 +134,24 @@
 
 TEST_F(AppListShowerUnitTest, CloseAndShowRecreatesView) {
   shower_->ShowForProfile(profile1_.get());
-  shower_->CloseAppList();
+  shower_->HandleViewBeingDestroyed();
   shower_->ShowForProfile(profile1_.get());
   EXPECT_EQ(2, factory_->views_created_);
 }
 
 TEST_F(AppListShowerUnitTest, CloseRemovesView) {
   shower_->ShowForProfile(profile1_.get());
-  shower_->CloseAppList();
+  shower_->HandleViewBeingDestroyed();
   EXPECT_FALSE(shower_->IsAppListVisible());
   EXPECT_FALSE(shower_->HasView());
-  EXPECT_FALSE(keep_alive_service_->is_keeping_alive());
+  EXPECT_FALSE(HasKeepAlive());
 }
 
 TEST_F(AppListShowerUnitTest, CloseAppListClearsProfile) {
   EXPECT_EQ(NULL, shower_->profile());
   shower_->ShowForProfile(profile1_.get());
   EXPECT_EQ(profile1_.get(), shower_->profile());
-  shower_->CloseAppList();
+  shower_->HandleViewBeingDestroyed();
   EXPECT_EQ(NULL, shower_->profile());
 }
 
diff --git a/chrome/browser/ui/app_list/test/fake_keep_alive_service.cc b/chrome/browser/ui/app_list/test/fake_keep_alive_service.cc
deleted file mode 100644
index 3f57d6a..0000000
--- a/chrome/browser/ui/app_list/test/fake_keep_alive_service.cc
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright 2013 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 "chrome/browser/ui/app_list/test/fake_keep_alive_service.h"
-
-FakeKeepAliveService::FakeKeepAliveService()
-  : is_keeping_alive_(false) {
-}
-
-void FakeKeepAliveService::EnsureKeepAlive() {
-  is_keeping_alive_ = true;
-}
-
-void FakeKeepAliveService::FreeKeepAlive() {
-  is_keeping_alive_ = false;
-}
diff --git a/chrome/browser/ui/app_list/test/fake_keep_alive_service.h b/chrome/browser/ui/app_list/test/fake_keep_alive_service.h
deleted file mode 100644
index 9c15b56..0000000
--- a/chrome/browser/ui/app_list/test/fake_keep_alive_service.h
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright 2013 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 CHROME_BROWSER_UI_APP_LIST_TEST_FAKE_KEEP_ALIVE_SERVICE_H_
-#define CHROME_BROWSER_UI_APP_LIST_TEST_FAKE_KEEP_ALIVE_SERVICE_H_
-
-#include "base/compiler_specific.h"
-#include "chrome/browser/ui/app_list/keep_alive_service.h"
-
-class FakeKeepAliveService : public KeepAliveService {
- public:
-  FakeKeepAliveService();
-
-  bool is_keeping_alive() const { return is_keeping_alive_; }
-
-  // KeepAliveService overrides.
-  virtual void EnsureKeepAlive() OVERRIDE;
-  virtual void FreeKeepAlive() OVERRIDE;
-
- private:
-  bool is_keeping_alive_;
-};
-
-#endif  // CHROME_BROWSER_UI_APP_LIST_TEST_FAKE_KEEP_ALIVE_SERVICE_H_
diff --git a/chrome/browser/ui/app_modal_dialogs/javascript_dialog_manager.cc b/chrome/browser/ui/app_modal_dialogs/javascript_dialog_manager.cc
index 0377788..417a289 100644
--- a/chrome/browser/ui/app_modal_dialogs/javascript_dialog_manager.cc
+++ b/chrome/browser/ui/app_modal_dialogs/javascript_dialog_manager.cc
@@ -270,9 +270,13 @@
                    : IDS_JAVASCRIPT_MESSAGEBOX_DEFAULT_TITLE);
   }
 
+  // For extensions, show the extension name, but only if the origin of
+  // the alert matches the top-level WebContents.
   const Extension* extension = GetExtensionForWebContents(web_contents);
-  if (extension)
+  if (extension &&
+      web_contents->GetLastCommittedURL().GetOrigin() == origin_url) {
     return base::UTF8ToUTF16(extension->name());
+  }
 
   // Otherwise, return the formatted URL.
   // In this case, force URL to have LTR directionality.
diff --git a/chrome/browser/ui/ash/app_list/app_list_service_ash.cc b/chrome/browser/ui/ash/app_list/app_list_service_ash.cc
index 618633f..ac1dc4f 100644
--- a/chrome/browser/ui/ash/app_list/app_list_service_ash.cc
+++ b/chrome/browser/ui/ash/app_list/app_list_service_ash.cc
@@ -2,49 +2,20 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/ui/app_list/app_list_service_ash.h"
+#include "chrome/browser/ui/ash/app_list/app_list_service_ash.h"
 
 #include "ash/shell.h"
 #include "base/files/file_path.h"
-#include "base/memory/scoped_ptr.h"
 #include "base/memory/singleton.h"
 #include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/ui/app_list/app_list_service_impl.h"
 #include "chrome/browser/ui/ash/app_list/app_list_controller_ash.h"
 #include "chrome/browser/ui/ash/launcher/chrome_launcher_controller.h"
 
-namespace {
-
-class AppListServiceAsh : public AppListServiceImpl {
- public:
-  static AppListServiceAsh* GetInstance() {
-    return Singleton<AppListServiceAsh,
-                     LeakySingletonTraits<AppListServiceAsh> >::get();
-  }
-
- private:
-  friend struct DefaultSingletonTraits<AppListServiceAsh>;
-
-  AppListServiceAsh();
-  virtual ~AppListServiceAsh();
-
-  // AppListService overrides:
-  virtual base::FilePath GetProfilePath(
-      const base::FilePath& user_data_dir) OVERRIDE;
-  virtual void CreateForProfile(Profile* default_profile) OVERRIDE;
-  virtual void ShowForProfile(Profile* default_profile) OVERRIDE;
-  virtual bool IsAppListVisible() const OVERRIDE;
-  virtual void DismissAppList() OVERRIDE;
-  virtual void EnableAppList(Profile* initial_profile,
-                             AppListEnableSource enable_source) OVERRIDE;
-  virtual gfx::NativeWindow GetAppListWindow() OVERRIDE;
-  virtual Profile* GetCurrentAppListProfile() OVERRIDE;
-  virtual AppListControllerDelegate* GetControllerDelegate() OVERRIDE;
-
-  scoped_ptr<AppListControllerDelegateAsh> controller_delegate_;
-
-  DISALLOW_COPY_AND_ASSIGN(AppListServiceAsh);
-};
+// static
+AppListServiceAsh* AppListServiceAsh::GetInstance() {
+  return Singleton<AppListServiceAsh,
+                   LeakySingletonTraits<AppListServiceAsh> >::get();
+}
 
 AppListServiceAsh::AppListServiceAsh()
     : controller_delegate_(new AppListControllerDelegateAsh()) {
@@ -94,22 +65,12 @@
   return controller_delegate_.get();
 }
 
-}  // namespace
-
-namespace chrome {
-
-AppListService* GetAppListServiceAsh() {
-  return AppListServiceAsh::GetInstance();
-}
-
-}  // namespace chrome
-
 // Windows Ash additionally supports a native UI. See app_list_service_win.cc.
 #if !defined(OS_WIN)
 
 // static
 AppListService* AppListService::Get(chrome::HostDesktopType desktop_type) {
-  return chrome::GetAppListServiceAsh();
+  return AppListServiceAsh::GetInstance();
 }
 
 // static
diff --git a/chrome/browser/ui/ash/app_list/app_list_service_ash.h b/chrome/browser/ui/ash/app_list/app_list_service_ash.h
new file mode 100644
index 0000000..8a80f53
--- /dev/null
+++ b/chrome/browser/ui/ash/app_list/app_list_service_ash.h
@@ -0,0 +1,44 @@
+// 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.
+
+#ifndef CHROME_BROWSER_UI_ASH_APP_LIST_APP_LIST_SERVICE_ASH_H_
+#define CHROME_BROWSER_UI_ASH_APP_LIST_APP_LIST_SERVICE_ASH_H_
+
+#include "base/memory/scoped_ptr.h"
+#include "chrome/browser/ui/app_list/app_list_service_impl.h"
+
+class AppListControllerDelegateAsh;
+template <typename T> struct DefaultSingletonTraits;
+
+// AppListServiceAsh wraps functionality in ChromeLauncherController and the Ash
+// Shell for showing and hiding the app list on the Ash desktop.
+class AppListServiceAsh : public AppListServiceImpl {
+ public:
+  static AppListServiceAsh* GetInstance();
+
+ private:
+  friend struct DefaultSingletonTraits<AppListServiceAsh>;
+
+  AppListServiceAsh();
+  virtual ~AppListServiceAsh();
+
+  // AppListService overrides:
+  virtual base::FilePath GetProfilePath(
+      const base::FilePath& user_data_dir) OVERRIDE;
+  virtual void CreateForProfile(Profile* default_profile) OVERRIDE;
+  virtual void ShowForProfile(Profile* default_profile) OVERRIDE;
+  virtual bool IsAppListVisible() const OVERRIDE;
+  virtual void DismissAppList() OVERRIDE;
+  virtual void EnableAppList(Profile* initial_profile,
+                             AppListEnableSource enable_source) OVERRIDE;
+  virtual gfx::NativeWindow GetAppListWindow() OVERRIDE;
+  virtual Profile* GetCurrentAppListProfile() OVERRIDE;
+  virtual AppListControllerDelegate* GetControllerDelegate() OVERRIDE;
+
+  scoped_ptr<AppListControllerDelegateAsh> controller_delegate_;
+
+  DISALLOW_COPY_AND_ASSIGN(AppListServiceAsh);
+};
+
+#endif  // CHROME_BROWSER_UI_ASH_APP_LIST_APP_LIST_SERVICE_ASH_H_
diff --git a/chrome/browser/ui/ash/app_sync_ui_state.cc b/chrome/browser/ui/ash/app_sync_ui_state.cc
index c3a9b3b..5469d0c 100644
--- a/chrome/browser/ui/ash/app_sync_ui_state.cc
+++ b/chrome/browser/ui/ash/app_sync_ui_state.cc
@@ -76,7 +76,7 @@
   DCHECK(!sync_service_);
 
   registrar_.Add(this,
-                 chrome::NOTIFICATION_EXTENSION_LOADED,
+                 chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
                  content::Source<Profile>(profile_));
 
   sync_service_ = ProfileSyncServiceFactory::GetForProfile(profile_);
@@ -140,7 +140,7 @@
 void AppSyncUIState::Observe(int type,
                              const content::NotificationSource& source,
                              const content::NotificationDetails& details) {
-  DCHECK_EQ(chrome::NOTIFICATION_EXTENSION_LOADED, type);
+  DCHECK_EQ(chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED, type);
   CheckAppSync();
 }
 
diff --git a/chrome/browser/ui/ash/ash_keyboard_controller_proxy.cc b/chrome/browser/ui/ash/ash_keyboard_controller_proxy.cc
index 618cfe8..8c5dfb4 100644
--- a/chrome/browser/ui/ash/ash_keyboard_controller_proxy.cc
+++ b/chrome/browser/ui/ash/ash_keyboard_controller_proxy.cc
@@ -164,8 +164,7 @@
   // TODO(bshe): Need to check the affected window's profile once multi-profile
   // is supported.
   content::BrowserContext* context = GetBrowserContext();
-  extensions::EventRouter* router =
-      extensions::ExtensionSystem::Get(context)->event_router();
+  extensions::EventRouter* router = extensions::EventRouter::Get(context);
 
   if (!router->HasEventListener(
           virtual_keyboard_private::OnTextInputBoxFocused::kEventName)) {
diff --git a/chrome/browser/ui/ash/chrome_shell_delegate.cc b/chrome/browser/ui/ash/chrome_shell_delegate.cc
index 2307885..bbcaa5d 100644
--- a/chrome/browser/ui/ash/chrome_shell_delegate.cc
+++ b/chrome/browser/ui/ash/chrome_shell_delegate.cc
@@ -22,7 +22,7 @@
 #include "chrome/browser/ui/ash/launcher/launcher_context_menu.h"
 #include "chrome/browser/ui/browser_commands.h"
 #include "chrome/common/chrome_switches.h"
-#include "chrome/common/profile_management_switches.h"
+#include "components/signin/core/common/profile_management_switches.h"
 #include "grit/chromium_strings.h"
 #include "grit/generated_resources.h"
 #include "ui/base/l10n/l10n_util.h"
diff --git a/chrome/browser/ui/ash/launcher/browser_shortcut_launcher_item_controller.cc b/chrome/browser/ui/ash/launcher/browser_shortcut_launcher_item_controller.cc
index edc9d2c..d35a1f8 100644
--- a/chrome/browser/ui/ash/launcher/browser_shortcut_launcher_item_controller.cc
+++ b/chrome/browser/ui/ash/launcher/browser_shortcut_launcher_item_controller.cc
@@ -22,10 +22,12 @@
 #include "chrome/browser/ui/browser_finder.h"
 #include "chrome/browser/ui/browser_list.h"
 #include "chrome/browser/ui/browser_window.h"
+#include "chrome/browser/ui/chrome_pages.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/browser/web_applications/web_app.h"
 #include "chrome/common/extensions/extension_constants.h"
 #include "content/public/browser/web_contents.h"
+#include "content/public/common/url_constants.h"
 #include "grit/ash_resources.h"
 #include "grit/chromium_strings.h"
 #include "grit/generated_resources.h"
@@ -98,6 +100,16 @@
   }
 }
 
+void BrowserShortcutLauncherItemController::SetShelfIDForBrowserWindowContents(
+    Browser* browser,
+    content::WebContents* web_contents) {
+  if (!IsBrowserRepresentedInBrowserList(browser))
+    return;
+  ash::SetShelfIDForWindow(
+      launcher_controller()->GetShelfIDForWebContents(web_contents),
+      browser->window()->GetNativeWindow());
+}
+
 bool BrowserShortcutLauncherItemController::IsOpen() const {
   const BrowserList* ash_browser_list =
       BrowserList::GetInstance(chrome::HOST_DESKTOP_TYPE_ASH);
@@ -317,13 +329,23 @@
 
 bool BrowserShortcutLauncherItemController::IsBrowserRepresentedInBrowserList(
     Browser* browser) {
-  return (browser &&
-          launcher_controller()->IsBrowserFromActiveUser(browser) &&
-          browser->host_desktop_type() == chrome::HOST_DESKTOP_TYPE_ASH &&
-          (browser->is_type_tabbed() ||
-           !browser->is_app() ||
-           !browser->is_type_popup() ||
-           launcher_controller()->
-               GetShelfIDForAppID(web_app::GetExtensionIdFromApplicationName(
-                   browser->app_name())) <= 0));
+  // Only Ash desktop browser windows for the active user are represented.
+  if (!browser ||
+      !launcher_controller()->IsBrowserFromActiveUser(browser) ||
+      browser->host_desktop_type() != chrome::HOST_DESKTOP_TYPE_ASH)
+    return false;
+
+  // v1 App popup windows with a valid app id have their own icon.
+  if (browser->is_app() &&
+      browser->is_type_popup() &&
+      launcher_controller()->GetShelfIDForAppID(
+          web_app::GetExtensionIdFromApplicationName(browser->app_name())) > 0)
+    return false;
+
+  // Stand-alone chrome:// windows (e.g. settings) have their own icon.
+  if (chrome::IsTrustedPopupWindowWithScheme(browser, content::kChromeUIScheme))
+    return false;
+
+  // Tabbed browser and other popup windows are all represented.
+  return true;
 }
diff --git a/chrome/browser/ui/ash/launcher/browser_shortcut_launcher_item_controller.h b/chrome/browser/ui/ash/launcher/browser_shortcut_launcher_item_controller.h
index 7479120..5f5b39e 100644
--- a/chrome/browser/ui/ash/launcher/browser_shortcut_launcher_item_controller.h
+++ b/chrome/browser/ui/ash/launcher/browser_shortcut_launcher_item_controller.h
@@ -29,6 +29,10 @@
   // Updates the activation state of the Broswer item.
   void UpdateBrowserItemState();
 
+  // Sets the shelf id for the browser window if the browser is represented.
+  void SetShelfIDForBrowserWindowContents(Browser* browser,
+                                          content::WebContents* web_contents);
+
   // LauncherItemController overrides:
   virtual bool IsOpen() const OVERRIDE;
   virtual bool IsVisible() const OVERRIDE;
diff --git a/chrome/browser/ui/ash/launcher/browser_status_monitor.cc b/chrome/browser/ui/ash/launcher/browser_status_monitor.cc
index 7d8123d..f10792c 100644
--- a/chrome/browser/ui/ash/launcher/browser_status_monitor.cc
+++ b/chrome/browser/ui/ash/launcher/browser_status_monitor.cc
@@ -10,68 +10,100 @@
 #include "base/stl_util.h"
 #include "chrome/browser/ui/ash/launcher/browser_shortcut_launcher_item_controller.h"
 #include "chrome/browser/ui/ash/launcher/chrome_launcher_controller.h"
+#include "chrome/browser/ui/ash/launcher/launcher_item_util.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_finder.h"
 #include "chrome/browser/ui/browser_list.h"
 #include "chrome/browser/ui/browser_window.h"
+#include "chrome/browser/ui/settings_window_manager.h"
+#include "chrome/browser/ui/settings_window_manager_observer.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/browser/web_applications/web_app.h"
 #include "content/public/browser/web_contents.h"
+#include "content/public/browser/web_contents_observer.h"
+#include "grit/ash_resources.h"
 #include "ui/aura/window.h"
 #include "ui/aura/window_event_dispatcher.h"
 #include "ui/gfx/screen.h"
 #include "ui/wm/public/activation_client.h"
 
-BrowserStatusMonitor::LocalWebContentsObserver::LocalWebContentsObserver(
-    content::WebContents* contents,
-    BrowserStatusMonitor* monitor)
-    : content::WebContentsObserver(contents),
-      monitor_(monitor) {
-}
+// This class monitors the WebContent of the all tab and notifies a navigation
+// to the BrowserStatusMonitor.
+class BrowserStatusMonitor::LocalWebContentsObserver
+    : public content::WebContentsObserver {
+ public:
+  LocalWebContentsObserver(content::WebContents* contents,
+                           BrowserStatusMonitor* monitor)
+      : content::WebContentsObserver(contents),
+        monitor_(monitor) {}
 
-BrowserStatusMonitor::LocalWebContentsObserver::~LocalWebContentsObserver() {
-}
+  virtual ~LocalWebContentsObserver() {}
 
-void BrowserStatusMonitor::LocalWebContentsObserver::DidNavigateMainFrame(
-    const content::LoadCommittedDetails& details,
-    const content::FrameNavigateParams& params) {
-  Browser* browser = chrome::FindBrowserWithWebContents(web_contents());
-  ChromeLauncherController::AppState state =
-      ChromeLauncherController::APP_STATE_INACTIVE;
-  if (browser->window()->IsActive() &&
-      browser->tab_strip_model()->GetActiveWebContents() == web_contents())
-    state = ChromeLauncherController::APP_STATE_WINDOW_ACTIVE;
-  else if (browser->window()->IsActive())
-    state = ChromeLauncherController::APP_STATE_ACTIVE;
+  // content::WebContentsObserver
+  virtual void DidNavigateMainFrame(
+      const content::LoadCommittedDetails& details,
+      const content::FrameNavigateParams& params) OVERRIDE {
+    Browser* browser = chrome::FindBrowserWithWebContents(web_contents());
+    ChromeLauncherController::AppState state =
+        ChromeLauncherController::APP_STATE_INACTIVE;
+    if (browser->window()->IsActive() &&
+        browser->tab_strip_model()->GetActiveWebContents() == web_contents())
+      state = ChromeLauncherController::APP_STATE_WINDOW_ACTIVE;
+    else if (browser->window()->IsActive())
+      state = ChromeLauncherController::APP_STATE_ACTIVE;
 
-  monitor_->UpdateAppItemState(web_contents(), state);
-  monitor_->UpdateBrowserItemState();
+    monitor_->UpdateAppItemState(web_contents(), state);
+    monitor_->UpdateBrowserItemState();
 
-  // Navigating may change the ShelfID associated with the WebContents.
-  if (browser->tab_strip_model()->GetActiveWebContents() == web_contents()) {
-    ash::SetShelfIDForWindow(
-        monitor_->GetShelfIDForWebContents(web_contents()),
-        browser->window()->GetNativeWindow());
+    // Navigating may change the ShelfID associated with the WebContents.
+    if (browser->tab_strip_model()->GetActiveWebContents() == web_contents())
+      monitor_->SetShelfIDForBrowserWindowContents(browser, web_contents());
   }
-}
 
-void BrowserStatusMonitor::LocalWebContentsObserver::WebContentsDestroyed(
-    content::WebContents* web_content) {
-  if (web_content == web_contents()) {
-    // We can only come here when there was a non standard termination like
-    // an app got un-installed while running, etc.
-    monitor_->WebContentsDestroyed(web_content);
-    // |this| is gone now.
+  virtual void WebContentsDestroyed(
+      content::WebContents* web_content) OVERRIDE {
+    if (web_content == web_contents()) {
+      // We can only come here when there was a non standard termination like
+      // an app got un-installed while running, etc.
+      monitor_->WebContentsDestroyed(web_content);
+      // |this| is gone now.
+    }
   }
-}
+
+ private:
+  BrowserStatusMonitor* monitor_;
+
+  DISALLOW_COPY_AND_ASSIGN(LocalWebContentsObserver);
+};
+
+// Observes any new settings windows and sets their shelf icon (since they
+// are excluded from BrowserShortcutLauncherItem).
+class BrowserStatusMonitor::SettingsWindowObserver
+    : public chrome::SettingsWindowManagerObserver {
+ public:
+  SettingsWindowObserver() {}
+  virtual ~SettingsWindowObserver() {}
+
+  // SettingsWindowManagerObserver
+  virtual void OnNewSettingsWindow(Browser* settings_browser) OVERRIDE {
+    CreateShelfItemForDialog(IDR_ASH_SHELF_ICON_SETTINGS,
+                             settings_browser->window()->GetNativeWindow());
+  }
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(SettingsWindowObserver);
+};
 
 BrowserStatusMonitor::BrowserStatusMonitor(
     ChromeLauncherController* launcher_controller)
     : launcher_controller_(launcher_controller),
       observed_activation_clients_(this),
-      observed_root_windows_(this) {
+      observed_root_windows_(this),
+      settings_window_observer_(new SettingsWindowObserver) {
   DCHECK(launcher_controller_);
   BrowserList::AddObserver(this);
+  chrome::SettingsWindowManager::GetInstance()->AddObserver(
+      settings_window_observer_.get());
 
   // This check needs for win7_aura. Without this, all tests in
   // ChromeLauncherController will fail in win7_aura.
@@ -247,8 +279,7 @@
         ChromeLauncherController::APP_STATE_ACTIVE;
     UpdateAppItemState(new_contents, state);
     UpdateBrowserItemState();
-    ash::SetShelfIDForWindow(GetShelfIDForWebContents(new_contents),
-                             browser->window()->GetNativeWindow());
+    SetShelfIDForBrowserWindowContents(browser, new_contents);
   }
 }
 
@@ -274,10 +305,8 @@
   UpdateAppItemState(new_contents, state);
   UpdateBrowserItemState();
 
-  if (tab_strip_model->GetActiveWebContents() == new_contents) {
-    ash::SetShelfIDForWindow(GetShelfIDForWebContents(new_contents),
-                             browser->window()->GetNativeWindow());
-  }
+  if (tab_strip_model->GetActiveWebContents() == new_contents)
+    SetShelfIDForBrowserWindowContents(browser, new_contents);
 
   AddWebContentsObserver(new_contents);
 }
@@ -355,3 +384,10 @@
     content::WebContents* contents) {
   return launcher_controller_->GetShelfIDForWebContents(contents);
 }
+
+void BrowserStatusMonitor::SetShelfIDForBrowserWindowContents(
+    Browser* browser,
+    content::WebContents* web_contents) {
+  launcher_controller_->GetBrowserShortcutLauncherItemController()->
+      SetShelfIDForBrowserWindowContents(browser, web_contents);
+}
diff --git a/chrome/browser/ui/ash/launcher/browser_status_monitor.h b/chrome/browser/ui/ash/launcher/browser_status_monitor.h
index fd1d205..426ef6e 100644
--- a/chrome/browser/ui/ash/launcher/browser_status_monitor.h
+++ b/chrome/browser/ui/ash/launcher/browser_status_monitor.h
@@ -15,7 +15,6 @@
 #include "chrome/browser/ui/ash/launcher/chrome_launcher_controller.h"
 #include "chrome/browser/ui/browser_list_observer.h"
 #include "chrome/browser/ui/tabs/tab_strip_model_observer.h"
-#include "content/public/browser/web_contents_observer.h"
 #include "ui/aura/window_observer.h"
 #include "ui/gfx/display_observer.h"
 #include "ui/wm/public/activation_change_observer.h"
@@ -106,26 +105,8 @@
   bool IsV1AppInShelf(Browser* browser);
 
  private:
-  // This class monitors the WebContent of the all tab and notifies a navigation
-  // to the BrowserStatusMonitor.
-  class LocalWebContentsObserver : public content::WebContentsObserver {
-   public:
-    LocalWebContentsObserver(content::WebContents* contents,
-                             BrowserStatusMonitor* monitor);
-    virtual ~LocalWebContentsObserver();
-
-    // content::WebContentsObserver overrides:
-    virtual void DidNavigateMainFrame(
-        const content::LoadCommittedDetails& details,
-        const content::FrameNavigateParams& params) OVERRIDE;
-    virtual void WebContentsDestroyed(
-        content::WebContents* web_contents) OVERRIDE;
-
-   private:
-    BrowserStatusMonitor* monitor_;
-
-    DISALLOW_COPY_AND_ASSIGN(LocalWebContentsObserver);
-  };
+  class LocalWebContentsObserver;
+  class SettingsWindowObserver;
 
   typedef std::map<Browser*, std::string> BrowserToAppIDMap;
   typedef std::map<content::WebContents*, LocalWebContentsObserver*>
@@ -137,9 +118,13 @@
   // Remove LocalWebContentsObserver for |contents|.
   void RemoveWebContentsObserver(content::WebContents* contents);
 
-  // Retruns the ShelfID for |contents|.
+  // Returns the ShelfID for |contents|.
   ash::ShelfID GetShelfIDForWebContents(content::WebContents* contents);
 
+  // Sets the shelf id for browsers represented by the browser shortcut item.
+  void SetShelfIDForBrowserWindowContents(Browser* browser,
+                                          content::WebContents* web_contents);
+
   ChromeLauncherController* launcher_controller_;
 
   // Hold all observed activation clients.
@@ -150,8 +135,8 @@
   ScopedObserver<aura::Window, aura::WindowObserver> observed_root_windows_;
 
   BrowserToAppIDMap browser_to_app_id_map_;
-
   WebContentsToObserverMap webcontents_to_observer_map_;
+  scoped_ptr<SettingsWindowObserver> settings_window_observer_;
 
   DISALLOW_COPY_AND_ASSIGN(BrowserStatusMonitor);
 };
diff --git a/chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc b/chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc
index 656f47a..22f758c 100644
--- a/chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc
+++ b/chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc
@@ -379,10 +379,9 @@
         ash::Shell::GetInstance()->shelf_item_delegate_manager();
   }
 
-  notification_registrar_.Add(
-      this,
-      chrome::NOTIFICATION_EXTENSION_LOADED,
-      content::Source<Profile>(profile_));
+  notification_registrar_.Add(this,
+                              chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
+                              content::Source<Profile>(profile_));
   notification_registrar_.Add(
       this,
       chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
@@ -1115,7 +1114,7 @@
     const content::NotificationSource& source,
     const content::NotificationDetails& details) {
   switch (type) {
-    case chrome::NOTIFICATION_EXTENSION_LOADED: {
+    case chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED: {
       const Extension* extension =
           content::Details<const Extension>(details).ptr();
       if (IsAppPinned(extension->id())) {
diff --git a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_browsertest.cc b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_browsertest.cc
index 800eecb..02ff9a0 100644
--- a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_browsertest.cc
+++ b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_browsertest.cc
@@ -43,6 +43,7 @@
 #include "chrome/browser/ui/browser_window.h"
 #include "chrome/browser/ui/extensions/application_launch.h"
 #include "chrome/browser/ui/host_desktop.h"
+#include "chrome/browser/ui/settings_window_manager.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/common/chrome_switches.h"
 #include "chrome/test/base/ui_test_utils.h"
@@ -2031,3 +2032,23 @@
   base::MessageLoop::current()->RunUntilIdle();
   EXPECT_EQ(ash::STATUS_CLOSED, model_->ItemByID(id)->status);
 }
+
+// Checks that a opening a settings window creates a new launcher item.
+IN_PROC_BROWSER_TEST_F(ShelfAppBrowserTest, SettingsWindow) {
+  chrome::SettingsWindowManager* settings_manager =
+      chrome::SettingsWindowManager::GetInstance();
+  ash::ShelfModel* shelf_model = ash::Shell::GetInstance()->shelf_model();
+
+  // Get the number of items in the shelf and browser menu.
+  int item_count = shelf_model->item_count();
+  size_t browser_count = NumberOfDetectedLauncherBrowsers(false);
+
+  // Open a settings window. Number of browser items should remain unchanged,
+  // number of shelf items should increase.
+  settings_manager->ShowForProfile(browser()->profile(), std::string());
+  Browser* settings_browser =
+      settings_manager->FindBrowserForProfile(browser()->profile());
+  ASSERT_TRUE(settings_browser);
+  EXPECT_EQ(browser_count, NumberOfDetectedLauncherBrowsers(false));
+  EXPECT_EQ(item_count + 1, shelf_model->item_count());
+}
diff --git a/chrome/browser/ui/ash/multi_user/multi_user_notification_blocker_chromeos.cc b/chrome/browser/ui/ash/multi_user/multi_user_notification_blocker_chromeos.cc
index 55c62fa..b515a90 100644
--- a/chrome/browser/ui/ash/multi_user/multi_user_notification_blocker_chromeos.cc
+++ b/chrome/browser/ui/ash/multi_user/multi_user_notification_blocker_chromeos.cc
@@ -4,38 +4,19 @@
 
 #include "chrome/browser/ui/ash/multi_user/multi_user_notification_blocker_chromeos.h"
 
-#include "ash/shell.h"
-#include "ash/shell_window_ids.h"
 #include "ash/system/system_notifier.h"
-#include "chrome/browser/ui/ash/multi_user/multi_user_util.h"
 #include "chrome/browser/ui/ash/multi_user/multi_user_window_manager.h"
-#include "ui/aura/window.h"
 #include "ui/message_center/message_center.h"
 #include "ui/message_center/notifier_settings.h"
 
 MultiUserNotificationBlockerChromeOS::MultiUserNotificationBlockerChromeOS(
     message_center::MessageCenter* message_center,
-    chrome::MultiUserWindowManager* multi_user_window_manager,
     const std::string& initial_user_id)
     : NotificationBlocker(message_center),
-      multi_user_window_manager_(multi_user_window_manager),
       active_user_id_(initial_user_id) {
-  UpdateWindowOwners();
-  multi_user_window_manager_->AddObserver(this);
 }
 
 MultiUserNotificationBlockerChromeOS::~MultiUserNotificationBlockerChromeOS() {
-  multi_user_window_manager_->RemoveObserver(this);
-}
-
-void MultiUserNotificationBlockerChromeOS::UpdateWindowOwners() {
-  std::set<std::string> new_ids;
-  multi_user_window_manager_->GetOwnersOfVisibleWindows(&new_ids);
-
-  if (current_user_ids_ != new_ids) {
-    current_user_ids_.swap(new_ids);
-    NotifyBlockingStateChanged();
-  }
 }
 
 bool MultiUserNotificationBlockerChromeOS::ShouldShowNotification(
@@ -51,24 +32,7 @@
 
 bool MultiUserNotificationBlockerChromeOS::ShouldShowNotificationAsPopup(
     const message_center::NotifierId& notifier_id) const {
-  return (current_user_ids_.find(notifier_id.profile_id) !=
-          current_user_ids_.end()) ||
-      ShouldShowNotification(notifier_id);
-}
-
-void MultiUserNotificationBlockerChromeOS::OnOwnerEntryAdded(
-    aura::Window* window) {
-  UpdateWindowOwners();
-}
-
-void MultiUserNotificationBlockerChromeOS::OnOwnerEntryChanged(
-    aura::Window* window) {
-  UpdateWindowOwners();
-}
-
-void MultiUserNotificationBlockerChromeOS::OnOwnerEntryRemoved(
-    aura::Window* window) {
-  UpdateWindowOwners();
+  return ShouldShowNotification(notifier_id);
 }
 
 void MultiUserNotificationBlockerChromeOS::ActiveUserChanged(
@@ -84,7 +48,6 @@
       iter->second != message_center()->IsQuietMode()) {
     message_center()->SetQuietMode(iter->second);
   }
-  UpdateWindowOwners();
   NotifyBlockingStateChanged();
 }
 
diff --git a/chrome/browser/ui/ash/multi_user/multi_user_notification_blocker_chromeos.h b/chrome/browser/ui/ash/multi_user/multi_user_notification_blocker_chromeos.h
index a570781..8c812f0 100644
--- a/chrome/browser/ui/ash/multi_user/multi_user_notification_blocker_chromeos.h
+++ b/chrome/browser/ui/ash/multi_user/multi_user_notification_blocker_chromeos.h
@@ -9,18 +9,15 @@
 #include <set>
 #include <string>
 
-#include "chrome/browser/ui/ash/multi_user/multi_user_window_manager.h"
 #include "ui/message_center/notification_blocker.h"
 
 // A notification blocker for per-profile stream switching. Owned and controlled
 // by MultiUserWindowManagerChromeOS.
 class MultiUserNotificationBlockerChromeOS
-    : public message_center::NotificationBlocker,
-      public chrome::MultiUserWindowManager::Observer {
+    : public message_center::NotificationBlocker {
  public:
   MultiUserNotificationBlockerChromeOS(
       message_center::MessageCenter* message_center,
-      chrome::MultiUserWindowManager* multi_user_window_manager,
       const std::string& initial_user_id);
   virtual ~MultiUserNotificationBlockerChromeOS();
 
@@ -33,23 +30,12 @@
   virtual bool ShouldShowNotificationAsPopup(
       const message_center::NotifierId& notifier_id) const OVERRIDE;
 
-  // chrome::MultiUserWindowManager::Observer overrides:
-  virtual void OnOwnerEntryAdded(aura::Window* window) OVERRIDE;
-  virtual void OnOwnerEntryChanged(aura::Window* window) OVERRIDE;
-  virtual void OnOwnerEntryRemoved(aura::Window* window) OVERRIDE;
-
  private:
   // Returns true if this blocker is actively working.
   bool IsActive() const;
 
-  // Checks the current desktop and update the list of users which owns windows
-  // on the current desktop.
-  void UpdateWindowOwners();
-
-  chrome::MultiUserWindowManager* multi_user_window_manager_;  // Weak.
   std::string active_user_id_;
   std::map<std::string, bool> quiet_modes_;
-  std::set<std::string> current_user_ids_;
 
   DISALLOW_COPY_AND_ASSIGN(MultiUserNotificationBlockerChromeOS);
 };
diff --git a/chrome/browser/ui/ash/multi_user/multi_user_notification_blocker_chromeos_unittest.cc b/chrome/browser/ui/ash/multi_user/multi_user_notification_blocker_chromeos_unittest.cc
index 1f73c3d..2d1bc91 100644
--- a/chrome/browser/ui/ash/multi_user/multi_user_notification_blocker_chromeos_unittest.cc
+++ b/chrome/browser/ui/ash/multi_user/multi_user_notification_blocker_chromeos_unittest.cc
@@ -7,7 +7,6 @@
 #include "ash/system/system_notifier.h"
 #include "ash/test/ash_test_base.h"
 #include "ash/test/test_shell_delegate.h"
-#include "ash/wm/window_state.h"
 #include "chrome/browser/ui/ash/multi_user/multi_user_notification_blocker_chromeos.h"
 #include "chrome/browser/ui/ash/multi_user/multi_user_window_manager_chromeos.h"
 #include "chrome/test/base/testing_browser_process.h"
@@ -208,89 +207,3 @@
   EXPECT_FALSE(ShouldShowNotification(random_system_notifier,
                                       "test2@example.com"));
 }
-
-TEST_F(MultiUserNotificationBlockerChromeOSTest, TeleportedWindows) {
-  ASSERT_EQ(chrome::MultiUserWindowManager::MULTI_PROFILE_MODE_SEPARATED,
-            chrome::MultiUserWindowManager::GetMultiProfileMode());
-
-  std::string u1 = GetDefaultUserId();
-  ash::SessionStateDelegate* delegate =
-      ash::Shell::GetInstance()->session_state_delegate();
-  std::string u2 = delegate->GetUserID(1);
-  std::string u3 = delegate->GetUserID(2);
-  CreateProfile(u2);
-  CreateProfile(u3);
-
-  chrome::MultiUserWindowManager* multi_user_window_manager =
-      chrome::MultiUserWindowManager::GetInstance();
-
-  message_center::NotifierId notifier_id(
-      message_center::NotifierId::APPLICATION, "test-app");
-
-  // Initial status: only notifications for u1 should be shown.
-  EXPECT_EQ(0, GetStateChangedCountAndReset());
-  EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id, u1));
-  EXPECT_FALSE(ShouldShowNotificationAsPopup(notifier_id, u2));
-  EXPECT_FALSE(ShouldShowNotificationAsPopup(notifier_id, u3));
-
-  // Create a new window in u2.
-  SwitchActiveUser(u2);
-  scoped_ptr<aura::Window> w2(CreateWindowForProfile(u2));
-  EXPECT_EQ(2, GetStateChangedCountAndReset());
-  EXPECT_FALSE(ShouldShowNotificationAsPopup(notifier_id, u1));
-  EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id, u2));
-  EXPECT_FALSE(ShouldShowNotificationAsPopup(notifier_id, u3));
-
-  // Moves w2 to u1 desktop.
-  multi_user_window_manager->ShowWindowForUser(w2.get(), u1);
-  EXPECT_EQ(1, GetStateChangedCountAndReset());
-  EXPECT_FALSE(ShouldShowNotificationAsPopup(notifier_id, u1));
-  EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id, u2));
-  EXPECT_FALSE(ShouldShowNotificationAsPopup(notifier_id, u3));
-
-  // Switch back to u1 desktop. Notification for u2 should be shown as a popup
-  // because w2 is visiting to u1.
-  SwitchActiveUser(u1);
-  EXPECT_EQ(2, GetStateChangedCountAndReset());
-  EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id, u1));
-  EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id, u2));
-  EXPECT_FALSE(ShouldShowNotificationAsPopup(notifier_id, u3));
-
-  // Notifications for u2 is not shown in the center.
-  EXPECT_TRUE(ShouldShowNotification(notifier_id, u1));
-  EXPECT_FALSE(ShouldShowNotification(notifier_id, u2));
-  EXPECT_FALSE(ShouldShowNotification(notifier_id, u3));
-
-  // Moves w2 back.
-  multi_user_window_manager->ShowWindowForUser(w2.get(), u2);
-  EXPECT_EQ(1, GetStateChangedCountAndReset());
-  EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id, u1));
-  EXPECT_FALSE(ShouldShowNotificationAsPopup(notifier_id, u2));
-  EXPECT_FALSE(ShouldShowNotificationAsPopup(notifier_id, u3));
-
-  // Close/remove the visiting window.
-  scoped_ptr<aura::Window> w22(CreateWindowForProfile(u2));
-  multi_user_window_manager->ShowWindowForUser(w22.get(), u1);
-  EXPECT_EQ(1, GetStateChangedCountAndReset());
-  EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id, u1));
-  EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id, u2));
-  EXPECT_FALSE(ShouldShowNotificationAsPopup(notifier_id, u3));
-
-  w22.reset();
-  EXPECT_EQ(1, GetStateChangedCountAndReset());
-  EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id, u1));
-  EXPECT_FALSE(ShouldShowNotificationAsPopup(notifier_id, u2));
-  EXPECT_FALSE(ShouldShowNotificationAsPopup(notifier_id, u3));
-
-  // Minimize the visiting window.
-  scoped_ptr<aura::Window> w23(CreateWindowForProfile(u2));
-  multi_user_window_manager->ShowWindowForUser(w23.get(), u1);
-  EXPECT_EQ(1, GetStateChangedCountAndReset());
-
-  ash::wm::GetWindowState(w23.get())->Minimize();
-  EXPECT_EQ(u1, multi_user_window_manager->GetUserPresentingWindow(w23.get()));
-  EXPECT_EQ(0, GetStateChangedCountAndReset());
-  EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id, u1));
-  EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id, u2));
-  EXPECT_FALSE(ShouldShowNotificationAsPopup(notifier_id, u3));
-}
diff --git a/chrome/browser/ui/ash/multi_user/multi_user_window_manager_chromeos.cc b/chrome/browser/ui/ash/multi_user/multi_user_window_manager_chromeos.cc
index a8a26cf..d1e344e 100644
--- a/chrome/browser/ui/ash/multi_user/multi_user_window_manager_chromeos.cc
+++ b/chrome/browser/ui/ash/multi_user/multi_user_window_manager_chromeos.cc
@@ -210,7 +210,7 @@
     const std::string& current_user_id)
     : current_user_id_(current_user_id),
       notification_blocker_(new MultiUserNotificationBlockerChromeOS(
-          message_center::MessageCenter::Get(), this, current_user_id)),
+          message_center::MessageCenter::Get(), current_user_id)),
       suppress_visibility_changes_(false),
       animation_speed_(ANIMATION_SPEED_NORMAL) {
   // Add a session state observer to be able to monitor session changes.
diff --git a/chrome/browser/ui/ash/screenshot_taker.cc b/chrome/browser/ui/ash/screenshot_taker.cc
index 4359865..c8f9ec0 100644
--- a/chrome/browser/ui/ash/screenshot_taker.cc
+++ b/chrome/browser/ui/ash/screenshot_taker.cc
@@ -166,7 +166,7 @@
   virtual std::string id() const OVERRIDE {
     return std::string(kNotificationId);
   }
-  virtual content::RenderViewHost* GetRenderViewHost() const OVERRIDE {
+  virtual content::WebContents* GetWebContents() const OVERRIDE {
     return NULL;
   }
 
diff --git a/chrome/browser/ui/ash/system_tray_delegate_chromeos.cc b/chrome/browser/ui/ash/system_tray_delegate_chromeos.cc
index 13c1084..01e8e37 100644
--- a/chrome/browser/ui/ash/system_tray_delegate_chromeos.cc
+++ b/chrome/browser/ui/ash/system_tray_delegate_chromeos.cc
@@ -48,7 +48,6 @@
 #include "chrome/browser/chromeos/accessibility/magnification_manager.h"
 #include "chrome/browser/chromeos/bluetooth/bluetooth_pairing_dialog.h"
 #include "chrome/browser/chromeos/charger_replace/charger_replacement_dialog.h"
-#include "chrome/browser/chromeos/choose_mobile_network_dialog.h"
 #include "chrome/browser/chromeos/drive/drive_integration_service.h"
 #include "chrome/browser/chromeos/drive/job_list.h"
 #include "chrome/browser/chromeos/enrollment_dialog_view.h"
@@ -59,7 +58,6 @@
 #include "chrome/browser/chromeos/login/login_display_host.h"
 #include "chrome/browser/chromeos/login/login_display_host_impl.h"
 #include "chrome/browser/chromeos/login/login_wizard.h"
-#include "chrome/browser/chromeos/login/startup_utils.h"
 #include "chrome/browser/chromeos/login/supervised_user_manager.h"
 #include "chrome/browser/chromeos/login/user.h"
 #include "chrome/browser/chromeos/login/user_adding_screen.h"
@@ -71,6 +69,7 @@
 #include "chrome/browser/chromeos/profiles/multiprofiles_intro_dialog.h"
 #include "chrome/browser/chromeos/settings/cros_settings.h"
 #include "chrome/browser/chromeos/sim_dialog_delegate.h"
+#include "chrome/browser/chromeos/ui/choose_mobile_network_dialog.h"
 #include "chrome/browser/drive/drive_service_interface.h"
 #include "chrome/browser/feedback/tracing_manager.h"
 #include "chrome/browser/google/google_util.h"
@@ -415,13 +414,6 @@
   return ash::user::LOGGED_IN_NONE;
 }
 
-bool SystemTrayDelegateChromeOS::IsOobeCompleted() const {
-  if (!base::SysInfo::IsRunningOnChromeOS() &&
-      LoginState::Get()->IsUserLoggedIn())
-    return true;
-  return StartupUtils::IsOobeCompleted();
-}
-
 void SystemTrayDelegateChromeOS::ChangeProfilePicture() {
   content::RecordAction(
       base::UserMetricsAction("OpenChangeProfilePictureDialog"));
diff --git a/chrome/browser/ui/ash/system_tray_delegate_chromeos.h b/chrome/browser/ui/ash/system_tray_delegate_chromeos.h
index ca85203..418af2e 100644
--- a/chrome/browser/ui/ash/system_tray_delegate_chromeos.h
+++ b/chrome/browser/ui/ash/system_tray_delegate_chromeos.h
@@ -62,7 +62,6 @@
   virtual void Shutdown() OVERRIDE;
   virtual bool GetTrayVisibilityOnStartup() OVERRIDE;
   virtual ash::user::LoginStatus GetUserLoginStatus() const OVERRIDE;
-  virtual bool IsOobeCompleted() const OVERRIDE;
   virtual void ChangeProfilePicture() OVERRIDE;
   virtual const std::string GetEnterpriseDomain() const OVERRIDE;
   virtual const base::string16 GetEnterpriseMessage() const OVERRIDE;
diff --git a/chrome/browser/ui/ash/system_tray_delegate_win.cc b/chrome/browser/ui/ash/system_tray_delegate_win.cc
index a6a7b89..1e900b5 100644
--- a/chrome/browser/ui/ash/system_tray_delegate_win.cc
+++ b/chrome/browser/ui/ash/system_tray_delegate_win.cc
@@ -61,10 +61,6 @@
     return ash::user::LOGGED_IN_OWNER;
   }
 
-  virtual bool IsOobeCompleted() const OVERRIDE {
-    return true;
-  }
-
   virtual void ChangeProfilePicture() OVERRIDE {
   }
 
diff --git a/chrome/browser/ui/aura/chrome_browser_main_extra_parts_aura.cc b/chrome/browser/ui/aura/chrome_browser_main_extra_parts_aura.cc
index dba4955..f73d3b2 100644
--- a/chrome/browser/ui/aura/chrome_browser_main_extra_parts_aura.cc
+++ b/chrome/browser/ui/aura/chrome_browser_main_extra_parts_aura.cc
@@ -18,7 +18,7 @@
 #include "ui/gfx/screen.h"
 #include "ui/views/widget/native_widget_aura.h"
 
-#if defined(OS_LINUX)
+#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
 #include "chrome/browser/ui/libgtk2ui/gtk2_ui.h"
 #include "ui/views/linux_ui/linux_ui.h"
 #else
@@ -70,7 +70,7 @@
 void ChromeBrowserMainExtraPartsAura::ToolkitInitialized() {
 #if !defined(OS_CHROMEOS)
 #if defined(USE_ASH)
-  aura::Env::CreateInstance();
+  CHECK(aura::Env::GetInstance());
   active_desktop_monitor_.reset(new ActiveDesktopMonitor(GetInitialDesktop()));
 #endif
 #endif
diff --git a/chrome/browser/ui/auto_login_infobar_delegate.cc b/chrome/browser/ui/auto_login_infobar_delegate.cc
index 523676a..ff5ae8c 100644
--- a/chrome/browser/ui/auto_login_infobar_delegate.cc
+++ b/chrome/browser/ui/auto_login_infobar_delegate.cc
@@ -12,7 +12,6 @@
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/google/google_util.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
@@ -21,6 +20,7 @@
 #include "chrome/common/chrome_switches.h"
 #include "chrome/common/pref_names.h"
 #include "chrome/common/url_constants.h"
+#include "components/infobars/core/infobar.h"
 #include "components/signin/core/browser/profile_oauth2_token_service.h"
 #include "content/public/browser/navigation_controller.h"
 #include "content/public/browser/page_navigator.h"
@@ -188,7 +188,8 @@
   return IDR_INFOBAR_AUTOLOGIN;
 }
 
-InfoBarDelegate::Type AutoLoginInfoBarDelegate::GetInfoBarType() const {
+infobars::InfoBarDelegate::Type AutoLoginInfoBarDelegate::GetInfoBarType()
+    const {
   return PAGE_ACTION_TYPE;
 }
 
diff --git a/chrome/browser/ui/auto_login_prompter.cc b/chrome/browser/ui/auto_login_prompter.cc
deleted file mode 100644
index 9526e4e..0000000
--- a/chrome/browser/ui/auto_login_prompter.cc
+++ /dev/null
@@ -1,142 +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.
-
-#include "chrome/browser/ui/auto_login_prompter.h"
-
-#include "base/bind.h"
-#include "base/command_line.h"
-#include "base/logging.h"
-#include "base/prefs/pref_service.h"
-#include "chrome/browser/google/google_url_tracker.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
-#include "chrome/browser/signin/signin_manager_factory.h"
-#include "chrome/browser/tab_contents/tab_util.h"
-#include "chrome/common/chrome_switches.h"
-#include "chrome/common/pref_names.h"
-#include "components/auto_login_parser/auto_login_parser.h"
-#include "components/signin/core/browser/profile_oauth2_token_service.h"
-#include "components/signin/core/browser/signin_manager.h"
-#include "content/public/browser/browser_thread.h"
-#include "content/public/browser/web_contents.h"
-#include "net/url_request/url_request.h"
-#include "url/gurl.h"
-
-using content::BrowserThread;
-using content::WebContents;
-
-namespace {
-
-#if !defined(OS_ANDROID)
-bool FetchUsernameThroughSigninManager(Profile* profile, std::string* output) {
-  // In an incognito window these services are not available.
-  SigninManagerBase* signin_manager =
-      SigninManagerFactory::GetInstance()->GetForProfile(profile);
-  if (!signin_manager)
-    return false;
-
-  ProfileOAuth2TokenService* token_service =
-      ProfileOAuth2TokenServiceFactory::GetForProfile(profile);
-  if (!token_service || !token_service->RefreshTokenIsAvailable(
-      signin_manager->GetAuthenticatedAccountId())) {
-    return false;
-  }
-
-  *output = signin_manager->GetAuthenticatedUsername();
-  return true;
-}
-#endif  // !defined(OS_ANDROID)
-
-}  // namespace
-
-AutoLoginPrompter::AutoLoginPrompter(WebContents* web_contents,
-                                     const Params& params,
-                                     const GURL& url)
-    : WebContentsObserver(web_contents),
-      params_(params),
-      url_(url),
-      infobar_shown_(false) {
-  if (!web_contents->IsLoading()) {
-    // If the WebContents isn't loading a page, the load notification will never
-    // be triggered.  Try adding the InfoBar now.
-    AddInfoBarToWebContents();
-  }
-}
-
-AutoLoginPrompter::~AutoLoginPrompter() {
-}
-
-// static
-void AutoLoginPrompter::ShowInfoBarIfPossible(net::URLRequest* request,
-                                              int child_id,
-                                              int route_id) {
-  if (!CommandLine::ForCurrentProcess()->HasSwitch(switches::kEnableAutologin))
-      return;
-
-  // See if the response contains the X-Auto-Login header.  If so, this was
-  // a request for a login page, and the server is allowing the browser to
-  // suggest auto-login, if available.
-  Params params;
-  // Currently we only accept GAIA credentials in Chrome.
-  if (!auto_login_parser::ParserHeaderInResponse(
-          request, auto_login_parser::ONLY_GOOGLE_COM, &params.header))
-    return;
-
-  BrowserThread::PostTask(
-      BrowserThread::UI, FROM_HERE,
-      base::Bind(&ShowInfoBarUIThread,
-                 params, request->url(), child_id, route_id));
-}
-
-
-// static
-void AutoLoginPrompter::ShowInfoBarUIThread(Params params,
-                                            const GURL& url,
-                                            int child_id,
-                                            int route_id) {
-  DCHECK_CURRENTLY_ON(BrowserThread::UI);
-  WebContents* web_contents = tab_util::GetWebContentsByID(child_id, route_id);
-  if (!web_contents)
-    return;
-
-  Profile* profile =
-      Profile::FromBrowserContext(web_contents->GetBrowserContext());
-
-  if (!profile->GetPrefs()->GetBoolean(prefs::kAutologinEnabled))
-    return;
-
-#if !defined(OS_ANDROID)
-  // On Android, the username is fetched on the Java side from the
-  // AccountManager provided by the platform.
-  if (!FetchUsernameThroughSigninManager(profile, &params.username))
-    return;
-#endif
-
-  // Make sure that |account|, if specified, matches the logged in user.
-  // However, |account| is usually empty.
-  if (!params.username.empty() && !params.header.account.empty() &&
-      params.username != params.header.account)
-    return;
-  // We can't add the infobar just yet, since we need to wait for the tab to
-  // finish loading.  If we don't, the info bar appears and then disappears
-  // immediately.  Create an AutoLoginPrompter instance to listen for the
-  // relevant notifications; it will delete itself.
-  new AutoLoginPrompter(web_contents, params, url);
-}
-
-void AutoLoginPrompter::DidStopLoading(
-    content::RenderViewHost* render_view_host) {
-  AddInfoBarToWebContents();
-  delete this;
-}
-
-void AutoLoginPrompter::WebContentsDestroyed(WebContents* web_contents) {
-  // The WebContents was destroyed before the navigation completed.
-  delete this;
-}
-
-void AutoLoginPrompter::AddInfoBarToWebContents() {
-  if (!infobar_shown_)
-    infobar_shown_ = AutoLoginInfoBarDelegate::Create(web_contents(), params_);
-}
diff --git a/chrome/browser/ui/auto_login_prompter.h b/chrome/browser/ui/auto_login_prompter.h
deleted file mode 100644
index 55607b4..0000000
--- a/chrome/browser/ui/auto_login_prompter.h
+++ /dev/null
@@ -1,69 +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.
-
-#ifndef CHROME_BROWSER_UI_AUTO_LOGIN_PROMPTER_H_
-#define CHROME_BROWSER_UI_AUTO_LOGIN_PROMPTER_H_
-
-#include <string>
-
-#include "base/compiler_specific.h"
-#include "chrome/browser/ui/auto_login_infobar_delegate.h"
-#include "content/public/browser/web_contents_observer.h"
-#include "url/gurl.h"
-
-namespace content {
-class RenderViewHost;
-class WebContents;
-}
-
-namespace net {
-class URLRequest;
-}
-
-// This class displays an infobar that allows the user to automatically login to
-// the currently loaded page with one click.  This is used when the browser
-// detects that the user has navigated to a login page and that there are stored
-// tokens that would allow a one-click login.
-class AutoLoginPrompter : public content::WebContentsObserver {
- public:
-  typedef AutoLoginInfoBarDelegate::Params Params;
-
-  // Looks for the X-Auto-Login response header in the request, and if found,
-  // tries to display an infobar in the tab contents identified by the
-  // child/route id.
-  static void ShowInfoBarIfPossible(net::URLRequest* request,
-                                    int child_id,
-                                    int route_id);
-
- private:
-  friend class AutoLoginPrompterTest;
-
-  AutoLoginPrompter(content::WebContents* web_contents,
-                    const Params& params,
-                    const GURL& url);
-
-  virtual ~AutoLoginPrompter();
-
-  static void ShowInfoBarUIThread(Params params,
-                                  const GURL& url,
-                                  int child_id,
-                                  int route_id);
-
-  virtual void DidStopLoading(
-      content::RenderViewHost* render_view_host) OVERRIDE;
-
-  virtual void WebContentsDestroyed(
-      content::WebContents* web_contents) OVERRIDE;
-
-  // Add the infobar to the WebContents, if it's still needed.
-  void AddInfoBarToWebContents();
-
-  const Params params_;
-  const GURL url_;
-  bool infobar_shown_;
-
-  DISALLOW_COPY_AND_ASSIGN(AutoLoginPrompter);
-};
-
-#endif  // CHROME_BROWSER_UI_AUTO_LOGIN_PROMPTER_H_
diff --git a/chrome/browser/ui/autofill/account_chooser_model.cc b/chrome/browser/ui/autofill/account_chooser_model.cc
index 624c950..2362dbe 100644
--- a/chrome/browser/ui/autofill/account_chooser_model.cc
+++ b/chrome/browser/ui/autofill/account_chooser_model.cc
@@ -48,10 +48,6 @@
 
 AccountChooserModel::~AccountChooserModel() {}
 
-void AccountChooserModel::MenuWillShow() {
-  ui::SimpleMenuModel::MenuWillShow();
-}
-
 void AccountChooserModel::SelectWalletAccount(size_t user_index) {
   DCHECK(user_index == 0U || user_index < wallet_accounts_.size());
   checked_item_ = kWalletAccountsStartId + user_index;
@@ -140,10 +136,6 @@
   DoAccountSwitch(command_id);
 }
 
-void AccountChooserModel::MenuWillShow(ui::SimpleMenuModel* source) {
-  delegate_->AccountChooserWillShow();
-}
-
 void AccountChooserModel::SetHadWalletError() {
   // Any non-sign-in error disables all Wallet accounts.
   had_wallet_error_ = true;
diff --git a/chrome/browser/ui/autofill/account_chooser_model.h b/chrome/browser/ui/autofill/account_chooser_model.h
index 4ca7ec4..7a73332 100644
--- a/chrome/browser/ui/autofill/account_chooser_model.h
+++ b/chrome/browser/ui/autofill/account_chooser_model.h
@@ -27,9 +27,6 @@
  public:
   virtual ~AccountChooserModelDelegate();
 
-  // Called right before the account chooser is shown.
-  virtual void AccountChooserWillShow() = 0;
-
   // Called when the active account has changed.
   virtual void AccountChoiceChanged() = 0;
 
@@ -57,9 +54,6 @@
                       const AutofillMetrics& metric_logger);
   virtual ~AccountChooserModel();
 
-  // ui::SimpleMenuModel implementation.
-  virtual void MenuWillShow() OVERRIDE;
-
   // ui::SimpleMenuModel::Delegate implementation.
   virtual bool IsCommandIdChecked(int command_id) const OVERRIDE;
   virtual bool IsCommandIdEnabled(int command_id) const OVERRIDE;
@@ -67,7 +61,6 @@
       int command_id,
       ui::Accelerator* accelerator) OVERRIDE;
   virtual void ExecuteCommand(int command_id, int event_flags) OVERRIDE;
-  virtual void MenuWillShow(ui::SimpleMenuModel* source) OVERRIDE;
 
   // Sets the selection to the given wallet account.
   void SelectWalletAccount(size_t user_index);
diff --git a/chrome/browser/ui/autofill/account_chooser_model_unittest.cc b/chrome/browser/ui/autofill/account_chooser_model_unittest.cc
index e2f8840..a4d44de 100644
--- a/chrome/browser/ui/autofill/account_chooser_model_unittest.cc
+++ b/chrome/browser/ui/autofill/account_chooser_model_unittest.cc
@@ -39,7 +39,6 @@
   MockAccountChooserModelDelegate() {}
   virtual ~MockAccountChooserModelDelegate() {}
 
-  MOCK_METHOD0(AccountChooserWillShow, void());
   MOCK_METHOD0(AccountChoiceChanged, void());
   MOCK_METHOD0(AddAccount, void());
   MOCK_METHOD0(UpdateAccountChooserView, void());
diff --git a/chrome/browser/ui/autofill/autofill_dialog_common.cc b/chrome/browser/ui/autofill/autofill_dialog_common.cc
index dc58d58..4b5070c 100644
--- a/chrome/browser/ui/autofill/autofill_dialog_common.cc
+++ b/chrome/browser/ui/autofill/autofill_dialog_common.cc
@@ -45,7 +45,7 @@
   if (autofill_type.group() != field_type.group())
     return false;
 
-#if defined(OS_MACOSX) || defined(OS_ANDROID)
+#if defined(OS_ANDROID)
   // Street address (all lines) is matched to the first input address line.
   if (server_type == ADDRESS_HOME_STREET_ADDRESS)
     return autofill_type.GetStorableType() == ADDRESS_HOME_LINE1;
diff --git a/chrome/browser/ui/autofill/autofill_dialog_controller_browsertest.cc b/chrome/browser/ui/autofill/autofill_dialog_controller_browsertest.cc
index 9421d04..1ebd14e 100644
--- a/chrome/browser/ui/autofill/autofill_dialog_controller_browsertest.cc
+++ b/chrome/browser/ui/autofill/autofill_dialog_controller_browsertest.cc
@@ -354,6 +354,10 @@
     field.autocomplete_attribute = "shipping tel";
     form.fields.push_back(field);
 
+    FormFieldData cc;
+    cc.autocomplete_attribute = "cc-number";
+    form.fields.push_back(cc);
+
     test_generated_bubble_controller_ =
         new testing::NiceMock<TestGeneratedCreditCardBubbleController>(
             GetActiveWebContents());
@@ -410,6 +414,11 @@
           "<body>"
             "<form>" + form_inner_html + "</form>"
             "<script>"
+              "var invalidEvents = [];"
+              "function recordInvalid(e) {"
+                "if (e.type != 'invalid') throw 'only invalid events allowed';"
+                "invalidEvents.push(e);"
+              "}"
               "function send(msg) {"
                 "domAutomationController.setAutomationId(0);"
                 "domAutomationController.send(msg);"
@@ -421,6 +430,10 @@
                 "send('success');"
               "};"
               "window.onclick = function() {"
+                "var inputs = document.forms[0].querySelectorAll('input');"
+                "for (var i = 0; i < inputs.length; ++i) {"
+                  "inputs[i].oninvalid = recordInvalid;"
+                "}"
                 "document.forms[0].requestAutocomplete();"
                 "send('clicked');"
               "};"
@@ -959,8 +972,8 @@
 
   const CreditCard& credit_card = test::GetVerifiedCreditCard();
   ASSERT_TRUE(
-    credit_card.GetRawInfo(CREDIT_CARD_NAME).find(ASCIIToUTF16("zebra")) ==
-        base::string16::npos);
+      credit_card.GetRawInfo(CREDIT_CARD_NAME).find(ASCIIToUTF16("zebra")) ==
+          base::string16::npos);
   AddCreditcardToProfile(controller->profile(), credit_card);
   AddAutofillProfileToProfile(controller->profile(),
                               test::GetVerifiedProfile());
@@ -971,6 +984,18 @@
   view->SetTextContentsOfSuggestionInput(SECTION_CC, ASCIIToUTF16("123"));
   view->SubmitForTesting();
   ExpectDomMessage("error: invalid");
+
+  int invalid_count = -1;
+  ASSERT_TRUE(content::ExecuteScriptAndExtractInt(
+      GetRenderViewHost(), "send(invalidEvents.length);", &invalid_count));
+  EXPECT_EQ(1, invalid_count);
+
+  std::string invalid_type;
+  ASSERT_TRUE(content::ExecuteScriptAndExtractString(
+      GetRenderViewHost(),
+      "send(invalidEvents[0].target.autocomplete);",
+      &invalid_type));
+  EXPECT_EQ("cc-name", invalid_type);
 }
 
 IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest,
diff --git a/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc b/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc
index aa721a0..2b1a40c 100644
--- a/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc
+++ b/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc
@@ -661,6 +661,27 @@
     return;
   }
 
+  // Fail if the author didn't ask for at least some kind of credit card
+  // information.
+  bool has_credit_card_field = false;
+  for (size_t i = 0; i < form_structure_.field_count(); ++i) {
+    AutofillType type = form_structure_.field(i)->Type();
+    if (type.html_type() != HTML_TYPE_UNKNOWN && type.group() == CREDIT_CARD) {
+      has_credit_card_field = true;
+      break;
+    }
+  }
+
+  if (!has_credit_card_field) {
+    callback_.Run(
+        AutofillManagerDelegate::AutocompleteResultErrorUnsupported,
+        base::ASCIIToUTF16("Form is not a payment form (must contain "
+                           "some autocomplete=\"cc-*\" fields). "),
+        NULL);
+    delete this;
+    return;
+  }
+
   billing_country_combobox_model_.reset(new CountryComboboxModel(
       *GetManager(),
       base::Bind(CountryFilter,
@@ -727,11 +748,7 @@
       downloader.Pass(),
       ValidationRulesStorageFactory::CreateStorage(),
       this);
-  GetValidator()->LoadRules(
-      GetManager()->GetDefaultCountryCodeForNewAddress());
 
-  // TODO(estade): don't show the dialog if the site didn't specify the right
-  // fields. First we must figure out what the "right" fields are.
   SuggestionsUpdated();
   SubmitButtonDelayBegin();
   view_.reset(CreateView());
@@ -1199,8 +1216,14 @@
   DetailInputs* inputs = MutableRequestedFieldsForSection(section);
   for (DetailInputs::iterator it = inputs->begin();
        it != inputs->end(); ++it) {
-    if (it->length != DetailInput::NONE)
+    if (it->length != DetailInput::NONE) {
       it->initial_value.clear();
+    } else if (!it->initial_value.empty() &&
+               (it->type == ADDRESS_BILLING_COUNTRY ||
+                it->type == ADDRESS_HOME_COUNTRY)) {
+      GetValidator()->LoadRules(AutofillCountry::GetCountryCode(
+          it->initial_value, g_browser_process->GetApplicationLocale()));
+    }
   }
 }
 
@@ -1969,9 +1992,6 @@
     RebuildInputsForCountry(section, field_contents, true);
     RestoreUserInputFromSnapshot(snapshot);
     UpdateSection(section);
-
-    GetValidator()->LoadRules(AutofillCountry::GetCountryCode(
-        field_contents, g_browser_process->GetApplicationLocale()));
   }
 
   // The rest of this method applies only to textfields while Autofill is
@@ -2370,10 +2390,6 @@
 ////////////////////////////////////////////////////////////////////////////////
 // SuggestionsMenuModelDelegate implementation.
 
-void AutofillDialogControllerImpl::SuggestionsMenuWillShow() {
-  HidePopup();
-}
-
 void AutofillDialogControllerImpl::SuggestionItemSelected(
     SuggestionsMenuModel* model,
     size_t index) {
@@ -2575,10 +2591,6 @@
 ////////////////////////////////////////////////////////////////////////////////
 // AccountChooserModelDelegate implementation.
 
-void AutofillDialogControllerImpl::AccountChooserWillShow() {
-  HidePopup();
-}
-
 void AutofillDialogControllerImpl::AccountChoiceChanged() {
   ScopedViewUpdates updates(view_.get());
   wallet::WalletClient* client = GetWalletClient();
@@ -3364,6 +3376,12 @@
   inputs->clear();
   common::BuildInputsForSection(section, country_code, inputs,
                                 MutableAddressLanguageCodeForSection(section));
+
+  if (!country_code.empty()) {
+    GetValidator()->LoadRules(AutofillCountry::GetCountryCode(
+        country_name, g_browser_process->GetApplicationLocale()));
+  }
+
   return true;
 }
 
diff --git a/chrome/browser/ui/autofill/autofill_dialog_controller_impl.h b/chrome/browser/ui/autofill/autofill_dialog_controller_impl.h
index f83e33c..01c4d57 100644
--- a/chrome/browser/ui/autofill/autofill_dialog_controller_impl.h
+++ b/chrome/browser/ui/autofill/autofill_dialog_controller_impl.h
@@ -177,7 +177,6 @@
                        const content::NotificationDetails& details) OVERRIDE;
 
   // SuggestionsMenuModelDelegate implementation.
-  virtual void SuggestionsMenuWillShow() OVERRIDE;
   virtual void SuggestionItemSelected(SuggestionsMenuModel* model,
                                       size_t index) OVERRIDE;
 
@@ -204,7 +203,6 @@
   virtual void OnPersonalDataChanged() OVERRIDE;
 
   // AccountChooserModelDelegate implementation.
-  virtual void AccountChooserWillShow() OVERRIDE;
   virtual void AccountChoiceChanged() OVERRIDE;
   virtual void AddAccount() OVERRIDE;
   virtual void UpdateAccountChooserView() OVERRIDE;
diff --git a/chrome/browser/ui/autofill/autofill_dialog_controller_unittest.cc b/chrome/browser/ui/autofill/autofill_dialog_controller_unittest.cc
index c2a4a57..9b6624b 100644
--- a/chrome/browser/ui/autofill/autofill_dialog_controller_unittest.cc
+++ b/chrome/browser/ui/autofill/autofill_dialog_controller_unittest.cc
@@ -463,7 +463,8 @@
   void SetUpControllerWithFormData(const FormData& form_data) {
     ResetControllerWithFormData(form_data);
     controller()->Show();
-    if (!profile()->GetPrefs()->GetBoolean(
+    if (controller() &&
+        !profile()->GetPrefs()->GetBoolean(
             ::prefs::kAutofillDialogPayWithoutWallet)) {
       EXPECT_CALL(*controller()->GetTestingWalletClient(), GetWalletItems());
       controller()->OnDidFetchWalletCookieValue(std::string());
@@ -677,6 +678,42 @@
 
 }  // namespace
 
+TEST_F(AutofillDialogControllerTest, RefuseToShowWithNoAutocompleteAttributes) {
+  FormFieldData email_field;
+  email_field.name = ASCIIToUTF16("email");
+  FormFieldData cc_field;
+  cc_field.name = ASCIIToUTF16("cc");
+  FormFieldData billing_field;
+  billing_field.name = ASCIIToUTF16("billing name");
+
+  FormData form_data;
+  form_data.fields.push_back(email_field);
+  form_data.fields.push_back(cc_field);
+  form_data.fields.push_back(billing_field);
+
+  SetUpControllerWithFormData(form_data);
+  EXPECT_FALSE(controller());
+}
+
+TEST_F(AutofillDialogControllerTest, RefuseToShowWithNoCcField) {
+  FormFieldData shipping_tel;
+  shipping_tel.autocomplete_attribute = "shipping tel";
+
+  FormData form_data;
+  form_data.fields.push_back(shipping_tel);
+
+  SetUpControllerWithFormData(form_data);
+  EXPECT_FALSE(controller());
+
+  // Any cc- field will do.
+  FormFieldData cc_field;
+  cc_field.autocomplete_attribute = "cc-csc";
+  form_data.fields.push_back(cc_field);
+
+  SetUpControllerWithFormData(form_data);
+  EXPECT_TRUE(controller());
+}
+
 // Ensure the default ValidityMessage has the expected values.
 TEST_F(AutofillDialogControllerTest, DefaultValidityMessage) {
   ValidityMessages messages;
@@ -1311,10 +1348,13 @@
   shipping_tel.autocomplete_attribute = "shipping tel";
   FormFieldData billing_tel;
   billing_tel.autocomplete_attribute = "billing tel";
+  FormFieldData cc_field;
+  cc_field.autocomplete_attribute = "cc-csc";
 
   FormData form_data;
   form_data.fields.push_back(shipping_tel);
   form_data.fields.push_back(billing_tel);
+  form_data.fields.push_back(cc_field);
   SetUpControllerWithFormData(form_data);
 
   SwitchToAutofill();
@@ -1332,7 +1372,7 @@
   billing_model->ActivatedAt(1);
 
   controller()->OnAccept();
-  ASSERT_EQ(2U, form_structure()->field_count());
+  ASSERT_EQ(3U, form_structure()->field_count());
   EXPECT_EQ(PHONE_HOME_WHOLE_NUMBER,
             form_structure()->field(0)->Type().GetStorableType());
   EXPECT_EQ(PHONE_HOME, form_structure()->field(0)->Type().group());
@@ -1361,12 +1401,15 @@
   FormFieldData billing_address_textarea;
   billing_address_textarea.autocomplete_attribute = "billing street-address";
   billing_address_textarea.form_control_type = "textarea";
+  FormFieldData cc_field;
+  cc_field.autocomplete_attribute = "cc-csc";
 
   FormData form_data;
   form_data.fields.push_back(shipping_address);
   form_data.fields.push_back(billing_address);
   form_data.fields.push_back(shipping_address_textarea);
   form_data.fields.push_back(billing_address_textarea);
+  form_data.fields.push_back(cc_field);
   SetUpControllerWithFormData(form_data);
 
   SwitchToAutofill();
@@ -1384,7 +1427,7 @@
   billing_model->ActivatedAt(1);
 
   controller()->OnAccept();
-  ASSERT_EQ(4U, form_structure()->field_count());
+  ASSERT_EQ(5U, form_structure()->field_count());
   EXPECT_EQ(ADDRESS_HOME_STREET_ADDRESS,
             form_structure()->field(0)->Type().GetStorableType());
   EXPECT_EQ(ADDRESS_HOME, form_structure()->field(0)->Type().group());
@@ -1800,11 +1843,7 @@
   CreditCard full_card(test::GetCreditCard());
   for (size_t i = 0; i < inputs.size(); ++i) {
     const ServerFieldType type = inputs[i].type;
-#if defined(OS_MACOSX)
-    if (type == ADDRESS_BILLING_LINE1)
-#else
     if (type == ADDRESS_BILLING_STREET_ADDRESS)
-#endif
       outputs[type] = ASCIIToUTF16(kEditedBillingAddress);
     else
       outputs[type] = full_profile.GetInfo(AutofillType(type), "en-US");
@@ -3185,11 +3224,12 @@
 
 TEST_F(AutofillDialogControllerTest, ValidationRulesLoadedOnCountryChange) {
   ResetControllerWithFormData(DefaultFormData());
-  EXPECT_CALL(*controller()->GetMockValidator(), LoadRules("US"));
+  EXPECT_CALL(*controller()->GetMockValidator(),
+              LoadRules("US")).Times(AtLeast(1));
   controller()->Show();
 
   EXPECT_CALL(*controller()->GetMockValidator(), LoadRules("FR"));
-  controller()->UserEditedOrActivatedInput(SECTION_CC_BILLING,
+  controller()->UserEditedOrActivatedInput(SECTION_BILLING,
                                            ADDRESS_BILLING_COUNTRY,
                                            gfx::NativeView(),
                                            gfx::Rect(),
@@ -3197,6 +3237,17 @@
                                            true);
 }
 
+TEST_F(AutofillDialogControllerTest, UsValidationRulesLoadedForJpOnlyProfile) {
+  ResetControllerWithFormData(DefaultFormData());
+  AutofillProfile jp_profile(base::GenerateGUID(), kSettingsOrigin);
+  jp_profile.SetRawInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("JP"));
+  controller()->GetTestingManager()->AddTestingProfile(&jp_profile);
+  EXPECT_CALL(*controller()->GetMockValidator(), LoadRules("US"));
+  EXPECT_CALL(*controller()->GetMockValidator(),
+              LoadRules("JP")).Times(AtLeast(1));
+  controller()->Show();
+}
+
 TEST_F(AutofillDialogControllerTest, InvalidWhenRulesNotReady) {
   // Select "Add new shipping address...".
   controller()->MenuModelForSection(SECTION_SHIPPING)->ActivatedAt(1);
@@ -3282,7 +3333,12 @@
   field.option_values.push_back(ASCIIToUTF16(""));
   field.option_contents.push_back(ASCIIToUTF16("Germany"));
   field.option_values.push_back(ASCIIToUTF16("GRMNY"));
+
+  FormFieldData cc_field;
+  cc_field.autocomplete_attribute = "cc-csc";
+
   form_data.fields.push_back(field);
+  form_data.fields.push_back(cc_field);
   ResetControllerWithFormData(form_data);
   controller()->Show();
 
diff --git a/chrome/browser/ui/autofill/autofill_dialog_i18n_input.cc b/chrome/browser/ui/autofill/autofill_dialog_i18n_input.cc
index edda3b3..e632cd8 100644
--- a/chrome/browser/ui/autofill/autofill_dialog_i18n_input.cc
+++ b/chrome/browser/ui/autofill/autofill_dialog_i18n_input.cc
@@ -60,7 +60,7 @@
     DetailInput input = { length, server_type, placeholder };
     inputs->push_back(input);
 
-#if defined(OS_MACOSX) || defined(OS_ANDROID)
+#if defined(OS_ANDROID)
     if (component.field == ::i18n::addressinput::STREET_ADDRESS &&
         component.length_hint == AddressUiComponent::HINT_LONG) {
       // TODO(dbeam): support more than 2 address lines. http://crbug.com/324889
@@ -147,7 +147,7 @@
       return billing ? ADDRESS_BILLING_ZIP : ADDRESS_HOME_ZIP;
     case ::i18n::addressinput::SORTING_CODE:
       return billing ? ADDRESS_BILLING_SORTING_CODE : ADDRESS_HOME_SORTING_CODE;
-#if defined(OS_MACOSX) || defined(OS_ANDROID)
+#if defined(OS_ANDROID)
     case ::i18n::addressinput::STREET_ADDRESS:
       return billing ? ADDRESS_BILLING_LINE1 : ADDRESS_HOME_LINE1;
 #else
diff --git a/chrome/browser/ui/autofill/autofill_dialog_i18n_input_unittest.cc b/chrome/browser/ui/autofill/autofill_dialog_i18n_input_unittest.cc
index 2a46e67..bfab9ea 100644
--- a/chrome/browser/ui/autofill/autofill_dialog_i18n_input_unittest.cc
+++ b/chrome/browser/ui/autofill/autofill_dialog_i18n_input_unittest.cc
@@ -13,11 +13,7 @@
 
 namespace {
 
-#if defined(OS_MACOSX)
-const size_t kNumberOfAddressLinesUS = 7;
-#else
 const size_t kNumberOfAddressLinesUS = 6;
-#endif
 
 }  // namespace
 
@@ -47,11 +43,7 @@
   BuildAddressInputs(common::ADDRESS_TYPE_SHIPPING, "US", &inputs, NULL);
   ASSERT_EQ(kNumberOfAddressLinesUS, inputs.size());
 
-#if defined(OS_MACOSX)
-  int input_index = 3;
-#else
   int input_index = 2;
-#endif
 
   // Inputs before or after [ City ] [ State ] [ Zip ] should be on other lines.
   EXPECT_NE(inputs[input_index - 1].length, DetailInput::SHORT);
diff --git a/chrome/browser/ui/autofill/autofill_dialog_models.cc b/chrome/browser/ui/autofill/autofill_dialog_models.cc
index fa8de9e..66239e3 100644
--- a/chrome/browser/ui/autofill/autofill_dialog_models.cc
+++ b/chrome/browser/ui/autofill/autofill_dialog_models.cc
@@ -100,10 +100,6 @@
   items_[GetItemIndex(item_key)].enabled = enabled;
 }
 
-void SuggestionsMenuModel::MenuWillShow() {
-  ui::SimpleMenuModel::MenuWillShow();
-}
-
 bool SuggestionsMenuModel::IsCommandIdChecked(
     int command_id) const {
   return checked_item_ == command_id;
@@ -127,10 +123,6 @@
   delegate_->SuggestionItemSelected(this, command_id);
 }
 
-void SuggestionsMenuModel::MenuWillShow(ui::SimpleMenuModel* source) {
-  delegate_->SuggestionsMenuWillShow();
-}
-
 size_t SuggestionsMenuModel::GetItemIndex(const std::string& item_key) {
   for (size_t i = 0; i < items_.size(); ++i) {
     if (items_[i].key == item_key)
diff --git a/chrome/browser/ui/autofill/autofill_dialog_models.h b/chrome/browser/ui/autofill/autofill_dialog_models.h
index 0986559..15b005e 100644
--- a/chrome/browser/ui/autofill/autofill_dialog_models.h
+++ b/chrome/browser/ui/autofill/autofill_dialog_models.h
@@ -22,9 +22,6 @@
  public:
   virtual ~SuggestionsMenuModelDelegate();
 
-  // Called when a suggestions menu is about to show.
-  virtual void SuggestionsMenuWillShow() = 0;
-
   // Called when a menu item has been activated.
   virtual void SuggestionItemSelected(SuggestionsMenuModel* model,
                                       size_t index) = 0;
@@ -82,9 +79,6 @@
   // Enable/disable an item by key.
   void SetEnabled(const std::string& item_key, bool enabled);
 
-  // ui::SimpleMenuModel implementation.
-  virtual void MenuWillShow() OVERRIDE;
-
   // ui::SimpleMenuModel::Delegate implementation.
   virtual bool IsCommandIdChecked(int command_id) const OVERRIDE;
   virtual bool IsCommandIdEnabled(int command_id) const OVERRIDE;
@@ -92,7 +86,6 @@
       int command_id,
       ui::Accelerator* accelerator) OVERRIDE;
   virtual void ExecuteCommand(int command_id, int event_flags) OVERRIDE;
-  virtual void MenuWillShow(ui::SimpleMenuModel* source) OVERRIDE;
 
  private:
   // Represents an item in this model.
diff --git a/chrome/browser/ui/blocked_content/popup_blocker_browsertest.cc b/chrome/browser/ui/blocked_content/popup_blocker_browsertest.cc
index ecf15dd..26f4e14 100644
--- a/chrome/browser/ui/blocked_content/popup_blocker_browsertest.cc
+++ b/chrome/browser/ui/blocked_content/popup_blocker_browsertest.cc
@@ -6,6 +6,7 @@
 #include "base/files/file_path.h"
 #include "base/message_loop/message_loop.h"
 #include "base/path_service.h"
+#include "base/run_loop.h"
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/autocomplete/autocomplete_match.h"
 #include "chrome/browser/autocomplete/autocomplete_result.h"
@@ -30,10 +31,13 @@
 #include "chrome/test/base/ui_test_utils.h"
 #include "content/public/browser/notification_registrar.h"
 #include "content/public/browser/notification_service.h"
+#include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/web_contents.h"
+#include "content/public/browser/web_contents_observer.h"
 #include "content/public/browser/web_contents_view.h"
 #include "content/public/common/url_constants.h"
 #include "content/public/test/browser_test_utils.h"
+#include "content/public/test/test_navigation_observer.h"
 #include "net/dns/mock_host_resolver.h"
 #include "net/test/embedded_test_server/embedded_test_server.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -69,6 +73,25 @@
   DISALLOW_COPY_AND_ASSIGN(CountRenderViewHosts);
 };
 
+class CloseObserver : public content::WebContentsObserver {
+ public:
+  explicit CloseObserver(WebContents* contents)
+      : content::WebContentsObserver(contents) {}
+
+  void Wait() {
+    close_loop_.Run();
+  }
+
+  virtual void WebContentsDestroyed(WebContents* contents) OVERRIDE {
+    close_loop_.Quit();
+  }
+
+ private:
+  base::RunLoop close_loop_;
+
+  DISALLOW_COPY_AND_ASSIGN(CloseObserver);
+};
+
 class PopupBlockerBrowserTest : public InProcessBrowserTest {
  public:
   PopupBlockerBrowserTest() {}
@@ -104,19 +127,29 @@
     ASSERT_EQ(0, GetBlockedContentsCount());
   }
 
+  enum WhatToExpect {
+    ExpectPopup,
+    ExpectTab
+  };
+
+  enum ShouldCheckTitle {
+    CheckTitle,
+    DontCheckTitle
+  };
+
   // Navigates to the test indicated by |test_name| using |browser| which is
   // expected to try to open a popup. Verifies that the popup was blocked and
   // then opens the blocked popup. Once the popup stopped loading, verifies
-  // that the title of the page is "PASS" if |check_title| is true.
+  // that the title of the page is "PASS" if |check_title| is set.
   //
-  // If |expect_new_browser| is true, the popup is expected to open a new
+  // If |what_to_expect| is ExpectPopup, the popup is expected to open a new
   // window, or a background tab if it is false.
   //
   // Returns the WebContents of the launched popup.
   WebContents* RunCheckTest(Browser* browser,
                             const std::string& test_name,
-                            bool expect_new_browser,
-                            bool check_title) {
+                            WhatToExpect what_to_expect,
+                            ShouldCheckTitle check_title) {
     GURL url(embedded_test_server()->GetURL(test_name));
 
     CountRenderViewHosts counter;
@@ -157,7 +190,7 @@
 
     observer.Wait();
     Browser* new_browser;
-    if (expect_new_browser) {
+    if (what_to_expect == ExpectPopup) {
       new_browser = browser_observer.WaitForSingleNewBrowser();
       web_contents = new_browser->tab_strip_model()->GetActiveWebContents();
     } else {
@@ -166,7 +199,7 @@
       web_contents = browser->tab_strip_model()->GetWebContentsAt(1);
     }
 
-    if (check_title) {
+    if (check_title == CheckTitle) {
       // Check that the check passed.
       base::string16 expected_title(base::ASCIIToUTF16("PASS"));
       content::TitleWatcher title_watcher(web_contents, expected_title);
@@ -191,8 +224,8 @@
   RunCheckTest(
       browser(),
       "/popup_blocker/popup-blocked-to-post-blank.html",
-      true,
-      false);
+      ExpectPopup,
+      DontCheckTitle);
 }
 
 IN_PROC_BROWSER_TEST_F(PopupBlockerBrowserTest,
@@ -206,8 +239,8 @@
   RunCheckTest(
       CreateIncognitoBrowser(),
       "/popup_blocker/popup-blocked-to-post-blank.html",
-      true,
-      false);
+      ExpectPopup,
+      DontCheckTitle);
 }
 
 IN_PROC_BROWSER_TEST_F(PopupBlockerBrowserTest,
@@ -221,8 +254,8 @@
   RunCheckTest(
       browser(),
       "/popup_blocker/popup-fake-click-on-anchor.html",
-      false,
-      false);
+      ExpectTab,
+      DontCheckTitle);
 }
 
 IN_PROC_BROWSER_TEST_F(PopupBlockerBrowserTest,
@@ -236,8 +269,8 @@
   RunCheckTest(
       browser(),
       "/popup_blocker/popup-fake-click-on-anchor2.html",
-      false,
-      false);
+      ExpectTab,
+      DontCheckTitle);
 }
 
 IN_PROC_BROWSER_TEST_F(PopupBlockerBrowserTest, MultiplePopups) {
@@ -351,8 +384,8 @@
   WebContents* popup =
       RunCheckTest(browser(),
                    "/popup_blocker/popup-window-open.html",
-                   true,
-                   false);
+                   ExpectPopup,
+                   DontCheckTitle);
 
   // Check that the new popup has (roughly) the requested size.
   gfx::Size window_size = popup->GetView()->GetContainerSize();
@@ -363,52 +396,75 @@
 IN_PROC_BROWSER_TEST_F(PopupBlockerBrowserTest, CorrectReferrer) {
   RunCheckTest(browser(),
                "/popup_blocker/popup-referrer.html",
-               true,
-               true);
+               ExpectPopup,
+               CheckTitle);
 }
 
 IN_PROC_BROWSER_TEST_F(PopupBlockerBrowserTest, WindowFeaturesBarProps) {
   RunCheckTest(browser(),
                "/popup_blocker/popup-windowfeatures.html",
-               true,
-               true);
+               ExpectPopup,
+               CheckTitle);
 }
 
 IN_PROC_BROWSER_TEST_F(PopupBlockerBrowserTest, SessionStorage) {
   RunCheckTest(browser(),
                "/popup_blocker/popup-sessionstorage.html",
-               true,
-               true);
+               ExpectPopup,
+               CheckTitle);
 }
 
 IN_PROC_BROWSER_TEST_F(PopupBlockerBrowserTest, Opener) {
   RunCheckTest(browser(),
                "/popup_blocker/popup-opener.html",
-               true,
-               true);
+               ExpectPopup,
+               CheckTitle);
+}
+
+// Tests that the popup can still close itself after navigating. This tests that
+// the openedByDOM bit is preserved across blocked popups.
+IN_PROC_BROWSER_TEST_F(PopupBlockerBrowserTest, ClosableAfterNavigation) {
+  // Open a popup.
+  WebContents* popup =
+      RunCheckTest(browser(),
+                   "/popup_blocker/popup-opener.html",
+                   ExpectPopup,
+                   CheckTitle);
+
+  // Navigate it elsewhere.
+  content::TestNavigationObserver nav_observer(popup);
+  popup->GetMainFrame()->ExecuteJavaScript(
+      base::UTF8ToUTF16("location.href = '/empty.html'"));
+  nav_observer.Wait();
+
+  // Have it close itself.
+  CloseObserver close_observer(popup);
+  popup->GetMainFrame()->ExecuteJavaScript(
+      base::UTF8ToUTF16("window.close()"));
+  close_observer.Wait();
 }
 
 IN_PROC_BROWSER_TEST_F(PopupBlockerBrowserTest, OpenerSuppressed) {
   RunCheckTest(browser(),
                "/popup_blocker/popup-openersuppressed.html",
-               false,
-               true);
+               ExpectTab,
+               CheckTitle);
 }
 
 IN_PROC_BROWSER_TEST_F(PopupBlockerBrowserTest, ShiftClick) {
   RunCheckTest(
       browser(),
       "/popup_blocker/popup-fake-click-on-anchor3.html",
-      true,
-      true);
+      ExpectPopup,
+      CheckTitle);
 }
 
 IN_PROC_BROWSER_TEST_F(PopupBlockerBrowserTest, WebUI) {
   WebContents* popup =
       RunCheckTest(browser(),
                    "/popup_blocker/popup-webui.html",
-                   true,
-                   false);
+                   ExpectPopup,
+                   DontCheckTitle);
 
   // Check that the new popup displays about:blank.
   EXPECT_EQ(GURL(content::kAboutBlankURL), popup->GetURL());
diff --git a/chrome/browser/ui/bookmarks/bookmark_context_menu_controller.cc b/chrome/browser/ui/bookmarks/bookmark_context_menu_controller.cc
index 9e038ef..aef5067 100644
--- a/chrome/browser/ui/bookmarks/bookmark_context_menu_controller.cc
+++ b/chrome/browser/ui/bookmarks/bookmark_context_menu_controller.cc
@@ -129,12 +129,6 @@
   if (delegate_)
     delegate_->WillExecuteCommand(id, selection_);
 
-  if (ExecutePlatformCommand(id, event_flags)) {
-    if (delegate_)
-      delegate_->DidExecuteCommand(id);
-    return;
-  }
-
   switch (id) {
     case IDC_BOOKMARK_BAR_OPEN_ALL:
     case IDC_BOOKMARK_BAR_OPEN_ALL_INCOGNITO:
@@ -323,10 +317,6 @@
 }
 
 bool BookmarkContextMenuController::IsCommandIdEnabled(int command_id) const {
-  bool enabled = false;
-  if (IsPlatformCommandIdEnabled(command_id, &enabled))
-    return enabled;
-
   PrefService* prefs = profile_->GetPrefs();
 
   bool is_root_node = selection_.size() == 1 &&
@@ -400,21 +390,6 @@
   return false;
 }
 
-#if !defined(OS_WIN)
-bool BookmarkContextMenuController::IsPlatformCommandIdEnabled(
-    int command_id,
-    bool* enabled) const {
-  // By default, there are no platform-specific enabled or disabled commands.
-  return false;
-}
-
-bool BookmarkContextMenuController::ExecutePlatformCommand(int id,
-                                                           int event_flags) {
-  // By default, there are no platform-specific commands.
-  return false;
-}
-#endif  // OS_WIN
-
 void BookmarkContextMenuController::BookmarkModelChanged() {
   if (delegate_)
     delegate_->CloseMenu();
diff --git a/chrome/browser/ui/bookmarks/bookmark_context_menu_controller.h b/chrome/browser/ui/bookmarks/bookmark_context_menu_controller.h
index b2d14af..056e8eb 100644
--- a/chrome/browser/ui/bookmarks/bookmark_context_menu_controller.h
+++ b/chrome/browser/ui/bookmarks/bookmark_context_menu_controller.h
@@ -76,15 +76,6 @@
   }
 
  private:
-  // A hook so that platform-specific implementations can report which commands
-  // are enabled. Returns true if |enabled| was set by the platform-specific
-  // implementation.
-  bool IsPlatformCommandIdEnabled(int command_id, bool* enabled) const;
-
-  // A hook to execute platform-specific commands. Returns true if the command
-  // has been handled and should no longer be processed.
-  bool ExecutePlatformCommand(int command_id, int event_flags);
-
   void BuildMenu();
 
   // Adds a IDC_* style command to the menu with a localized string.
diff --git a/chrome/browser/ui/bookmarks/bookmark_drag_drop.cc b/chrome/browser/ui/bookmarks/bookmark_drag_drop.cc
index af174f5..ce6a814 100644
--- a/chrome/browser/ui/bookmarks/bookmark_drag_drop.cc
+++ b/chrome/browser/ui/bookmarks/bookmark_drag_drop.cc
@@ -9,6 +9,7 @@
 #include "chrome/browser/bookmarks/bookmark_node_data.h"
 #include "chrome/browser/bookmarks/bookmark_utils.h"
 #include "chrome/browser/bookmarks/scoped_group_bookmark_actions.h"
+#include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/undo/bookmark_undo_service.h"
 #include "chrome/browser/undo/bookmark_undo_service_factory.h"
 #include "ui/base/dragdrop/drag_drop_types.h"
@@ -19,13 +20,13 @@
                   const BookmarkNodeData& data,
                   const BookmarkNode* parent_node,
                   int index) {
-#if !defined(OS_ANDROID)
-  ScopedGroupBookmarkActions group_drops(profile);
-#endif
   BookmarkModel* model = BookmarkModelFactory::GetForProfile(profile);
-  if (data.IsFromProfile(profile)) {
+#if !defined(OS_ANDROID)
+  ScopedGroupBookmarkActions group_drops(model);
+#endif
+  if (data.IsFromProfilePath(profile->GetPath())) {
     const std::vector<const BookmarkNode*> dragged_nodes =
-        data.GetNodes(profile);
+        data.GetNodes(model, profile->GetPath());
     if (!dragged_nodes.empty()) {
       // Drag from same profile. Move nodes.
       for (size_t i = 0; i < dragged_nodes.size(); ++i) {
diff --git a/chrome/browser/ui/bookmarks/bookmark_editor_unittest.cc b/chrome/browser/ui/bookmarks/bookmark_editor_unittest.cc
index 7d2d504..186e1b2 100644
--- a/chrome/browser/ui/bookmarks/bookmark_editor_unittest.cc
+++ b/chrome/browser/ui/bookmarks/bookmark_editor_unittest.cc
@@ -12,7 +12,7 @@
 namespace {
 
 TEST(BookmarkEditorTest, ApplyEditsWithNoFolderChange) {
-  BookmarkModel model(NULL);
+  BookmarkModel model(NULL, false);
   const BookmarkNode* bookmarkbar = model.bookmark_bar_node();
   model.AddURL(bookmarkbar, 0, ASCIIToUTF16("url0"), GURL("chrome://newtab"));
   model.AddURL(bookmarkbar, 1, ASCIIToUTF16("url1"), GURL("chrome://newtab"));
diff --git a/chrome/browser/ui/bookmarks/bookmark_prompt_controller.cc b/chrome/browser/ui/bookmarks/bookmark_prompt_controller.cc
index 4e76dcd..f961603 100644
--- a/chrome/browser/ui/bookmarks/bookmark_prompt_controller.cc
+++ b/chrome/browser/ui/bookmarks/bookmark_prompt_controller.cc
@@ -10,7 +10,6 @@
 #include "base/prefs/pref_service.h"
 #include "chrome/browser/bookmarks/bookmark_model.h"
 #include "chrome/browser/bookmarks/bookmark_model_factory.h"
-#include "chrome/browser/bookmarks/bookmark_prompt_prefs.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/defaults.h"
 #include "chrome/browser/history/history_service.h"
@@ -23,6 +22,7 @@
 #include "chrome/common/chrome_version_info.h"
 #include "chrome/common/metrics/variations/variation_ids.h"
 #include "chrome/common/pref_names.h"
+#include "components/bookmarks/core/browser/bookmark_prompt_prefs.h"
 #include "components/variations/variations_associated_data.h"
 #include "content/public/browser/notification_service.h"
 #include "content/public/browser/notification_types.h"
diff --git a/chrome/browser/ui/bookmarks/bookmark_prompt_controller_unittest.cc b/chrome/browser/ui/bookmarks/bookmark_prompt_controller_unittest.cc
index 23d1091..4352b42 100644
--- a/chrome/browser/ui/bookmarks/bookmark_prompt_controller_unittest.cc
+++ b/chrome/browser/ui/bookmarks/bookmark_prompt_controller_unittest.cc
@@ -7,7 +7,6 @@
 #include "base/memory/scoped_ptr.h"
 #include "base/metrics/field_trial.h"
 #include "base/prefs/pref_service.h"
-#include "chrome/browser/bookmarks/bookmark_prompt_prefs.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_list.h"
@@ -15,6 +14,7 @@
 #include "chrome/test/base/browser_with_test_window_test.h"
 #include "chrome/test/base/test_browser_window.h"
 #include "chrome/test/base/testing_browser_process.h"
+#include "components/bookmarks/core/browser/bookmark_prompt_prefs.h"
 #include "content/public/browser/notification_service.h"
 #include "content/public/browser/notification_types.h"
 #include "content/public/browser/web_contents.h"
diff --git a/chrome/browser/ui/bookmarks/bookmark_ui_utils_unittest.cc b/chrome/browser/ui/bookmarks/bookmark_ui_utils_unittest.cc
index a647b77..cbded0f 100644
--- a/chrome/browser/ui/bookmarks/bookmark_ui_utils_unittest.cc
+++ b/chrome/browser/ui/bookmarks/bookmark_ui_utils_unittest.cc
@@ -16,7 +16,7 @@
 namespace {
 
 TEST(BookmarkUIUtilsTest, HasBookmarkURLs) {
-  BookmarkModel model(NULL);
+  BookmarkModel model(NULL, false);
 
   std::vector<const BookmarkNode*> nodes;
 
@@ -56,7 +56,7 @@
 }
 
 TEST(BookmarkUIUtilsTest, HasBookmarkURLsAllowedInIncognitoMode) {
-  BookmarkModel model(NULL);
+  BookmarkModel model(NULL, false);
   TestingProfile profile;
 
   std::vector<const BookmarkNode*> nodes;
diff --git a/chrome/browser/ui/browser.cc b/chrome/browser/ui/browser.cc
index f537991..b201b1a 100644
--- a/chrome/browser/ui/browser.cc
+++ b/chrome/browser/ui/browser.cc
@@ -376,7 +376,8 @@
   search_model_.reset(new SearchModel());
   search_delegate_.reset(new SearchDelegate(search_model_.get()));
 
-  registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
+  registrar_.Add(this,
+                 chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
                  content::Source<Profile>(profile_->GetOriginalProfile()));
   registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
                  content::Source<Profile>(profile_->GetOriginalProfile()));
@@ -1131,6 +1132,16 @@
 #endif
 }
 
+bool Browser::ShouldPreserveAbortedURLs(WebContents* source) {
+  // Allow failed URLs to stick around in the omnibox on the NTP, but not when
+  // other pages have committed.
+  Profile* profile = Profile::FromBrowserContext(source->GetBrowserContext());
+  if (!profile || !source->GetController().GetLastCommittedEntry())
+    return false;
+  GURL committed_url(source->GetController().GetLastCommittedEntry()->GetURL());
+  return chrome::IsNTPURL(committed_url, profile);
+}
+
 bool Browser::PreHandleKeyboardEvent(content::WebContents* source,
                                      const NativeWebKeyboardEvent& event,
                                      bool* is_keyboard_shortcut) {
@@ -1280,7 +1291,8 @@
   FillNavigateParamsFromOpenURLParams(&nav_params, params);
   nav_params.source_contents = source;
   nav_params.tabstrip_add_types = TabStripModel::ADD_NONE;
-  nav_params.window_action = chrome::NavigateParams::SHOW_WINDOW;
+  if (params.user_gesture)
+    nav_params.window_action = chrome::NavigateParams::SHOW_WINDOW;
   nav_params.user_gesture = params.user_gesture;
 
   PopupBlockerTabHelper* popup_blocker_helper = NULL;
@@ -1550,7 +1562,8 @@
 
 void Browser::WorkerCrashed(WebContents* source) {
   SimpleAlertInfoBarDelegate::Create(
-      InfoBarService::FromWebContents(source), InfoBarDelegate::kNoIconID,
+      InfoBarService::FromWebContents(source),
+      infobars::InfoBarDelegate::kNoIconID,
       l10n_util::GetStringUTF16(IDS_WEBWORKER_CRASHED_PROMPT), true);
 }
 
@@ -1919,7 +1932,7 @@
       break;
     }
 
-    case chrome::NOTIFICATION_EXTENSION_LOADED:
+    case chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED:
       chrome::UpdateCommandEnabled(
           this,
           IDC_BOOKMARK_PAGE,
@@ -2235,30 +2248,23 @@
   if (is_type_tabbed())
     return true;
 
-  // Trusted app windows and system windows never show a location bar.
-  if (is_trusted_source())
-    return false;
-
-  // Other non-app browsers always show a location bar.
-  if (!is_app())
-    return true;
-
-  // Normally apps do not show a location bar.
-  if (app_name() == DevToolsWindow::kDevToolsApp ||
-      !CommandLine::ForCurrentProcess()->HasSwitch(
-          switches::kEnableStreamlinedHostedApps)) {
-    return false;
+  if (is_app() && CommandLine::ForCurrentProcess()->HasSwitch(
+                      switches::kEnableStreamlinedHostedApps)) {
+    // If kEnableStreamlinedHostedApps is true, show the location bar for
+    // bookmark apps.
+    ExtensionService* service =
+        extensions::ExtensionSystem::Get(profile_)->extension_service();
+    const extensions::Extension* extension =
+        service ? service->GetInstalledExtension(
+                      web_app::GetExtensionIdFromApplicationName(app_name()))
+                : NULL;
+    return (!extension || extension->from_bookmark()) &&
+           app_name() != DevToolsWindow::kDevToolsApp;
   }
 
-  // If kEnableStreamlinedHostedApps is true, show the locaiton bar for non
-  // legacy packaged apps.
-  ExtensionService* service =
-      extensions::ExtensionSystem::Get(profile_)->extension_service();
-  const extensions::Extension* extension =
-      service ? service->GetInstalledExtension(
-                    web_app::GetExtensionIdFromApplicationName(app_name()))
-              : NULL;
-  return (!extension || !extension->is_legacy_packaged_app());
+  // All app windows and system windows are trusted and never show a location
+  // bar.
+  return !is_trusted_source();
 }
 
 bool Browser::SupportsWindowFeatureImpl(WindowFeature feature,
diff --git a/chrome/browser/ui/browser.h b/chrome/browser/ui/browser.h
index f1c2cac..efc35f1 100644
--- a/chrome/browser/ui/browser.h
+++ b/chrome/browser/ui/browser.h
@@ -360,6 +360,7 @@
   // See the description of
   // FullscreenController::ToggleFullscreenModeWithExtension.
   void ToggleFullscreenModeWithExtension(const GURL& extension_url);
+
 #if defined(OS_WIN)
   // See the description of FullscreenController::ToggleMetroSnapMode.
   void SetMetroSnapMode(bool enable);
@@ -427,6 +428,7 @@
 
   // Overridden from content::WebContentsDelegate:
   virtual bool CanOverscrollContent() const OVERRIDE;
+  virtual bool ShouldPreserveAbortedURLs(content::WebContents* source) OVERRIDE;
   virtual bool PreHandleKeyboardEvent(
       content::WebContents* source,
       const content::NativeWebKeyboardEvent& event,
@@ -486,6 +488,7 @@
   FRIEND_TEST_ALL_PREFIXES(BrowserTest, ConvertTabToAppShortcut);
   FRIEND_TEST_ALL_PREFIXES(BrowserTest, OpenAppWindowLikeNtp);
   FRIEND_TEST_ALL_PREFIXES(BrowserTest, AppIdSwitch);
+  FRIEND_TEST_ALL_PREFIXES(BrowserTest, ShouldShowLocationBar);
   FRIEND_TEST_ALL_PREFIXES(FullscreenControllerTest,
                            TabEntersPresentationModeFromWindowed);
   FRIEND_TEST_ALL_PREFIXES(FullscreenExitBubbleControllerTest,
diff --git a/chrome/browser/ui/browser_browsertest.cc b/chrome/browser/ui/browser_browsertest.cc
index 930e4e3..2525505 100644
--- a/chrome/browser/ui/browser_browsertest.cc
+++ b/chrome/browser/ui/browser_browsertest.cc
@@ -17,6 +17,7 @@
 #include "chrome/browser/command_updater.h"
 #include "chrome/browser/content_settings/host_content_settings_map.h"
 #include "chrome/browser/defaults.h"
+#include "chrome/browser/devtools/devtools_window.h"
 #include "chrome/browser/extensions/extension_browsertest.h"
 #include "chrome/browser/extensions/extension_service.h"
 #include "chrome/browser/extensions/tab_helper.h"
@@ -25,6 +26,7 @@
 #include "chrome/browser/prefs/incognito_mode_prefs.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_manager.h"
+#include "chrome/browser/search/search.h"
 #include "chrome/browser/sessions/session_backend.h"
 #include "chrome/browser/sessions/session_service_factory.h"
 #include "chrome/browser/translate/translate_tab_helper.h"
@@ -469,6 +471,50 @@
   }
 }
 
+// Test that a browser-initiated navigation to an aborted URL load leaves around
+// a pending entry if we start from the NTP but not from a normal page.
+// See http://crbug.com/355537.
+IN_PROC_BROWSER_TEST_F(BrowserTest, ClearPendingOnFailUnlessNTP) {
+  ASSERT_TRUE(test_server()->Start());
+  WebContents* web_contents =
+      browser()->tab_strip_model()->GetActiveWebContents();
+  GURL ntp_url(chrome::GetNewTabPageURL(browser()->profile()));
+  ui_test_utils::NavigateToURL(browser(), ntp_url);
+
+  // Navigate to a 204 URL (aborts with no content) on the NTP and make sure it
+  // sticks around so that the user can edit it.
+  GURL abort_url(test_server()->GetURL("nocontent"));
+  {
+    content::WindowedNotificationObserver stop_observer(
+        content::NOTIFICATION_LOAD_STOP,
+        content::Source<NavigationController>(
+            &web_contents->GetController()));
+    browser()->OpenURL(OpenURLParams(abort_url, Referrer(), CURRENT_TAB,
+                                     content::PAGE_TRANSITION_TYPED, false));
+    stop_observer.Wait();
+    EXPECT_TRUE(web_contents->GetController().GetPendingEntry());
+    EXPECT_EQ(abort_url, web_contents->GetVisibleURL());
+  }
+
+  // Navigate to a real URL.
+  GURL real_url(test_server()->GetURL("title1.html"));
+  ui_test_utils::NavigateToURL(browser(), real_url);
+  EXPECT_EQ(real_url, web_contents->GetVisibleURL());
+
+  // Now navigating to a 204 URL should clear the pending entry.
+  {
+    content::WindowedNotificationObserver stop_observer(
+        content::NOTIFICATION_LOAD_STOP,
+        content::Source<NavigationController>(
+            &web_contents->GetController()));
+    browser()->OpenURL(OpenURLParams(abort_url, Referrer(), CURRENT_TAB,
+                                     content::PAGE_TRANSITION_TYPED, false));
+    stop_observer.Wait();
+    EXPECT_FALSE(web_contents->GetController().GetPendingEntry());
+    EXPECT_EQ(real_url, web_contents->GetVisibleURL());
+  }
+}
+
 // Test for crbug.com/297289.  Ensure that modal dialogs are closed when a
 // cross-process navigation is ready to commit.
 IN_PROC_BROWSER_TEST_F(BrowserTest, CrossProcessNavCancelsDialogs) {
@@ -1278,6 +1324,55 @@
       new_browser->app_name_.find(extension_app->id()),
       std::string::npos) << new_browser->app_name_;
 }
+
+// Open an app window and the dev tools window and ensure that the location
+// bar settings are correct.
+IN_PROC_BROWSER_TEST_F(BrowserTest, ShouldShowLocationBar) {
+  ASSERT_TRUE(test_server()->Start());
+
+  // Load an app.
+  host_resolver()->AddRule("www.example.com", "127.0.0.1");
+  ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII("app/")));
+  const Extension* extension_app = GetExtension();
+
+  // Launch it in a window, as AppLauncherHandler::HandleLaunchApp() would.
+  WebContents* app_window =
+      OpenApplication(AppLaunchParams(browser()->profile(),
+                                      extension_app,
+                                      extensions::LAUNCH_CONTAINER_WINDOW,
+                                      NEW_WINDOW));
+  ASSERT_TRUE(app_window);
+
+  DevToolsWindow::OpenDevToolsWindowForTest(
+      browser()->tab_strip_model()->GetActiveWebContents()->GetRenderViewHost(),
+      false);
+
+  // The launch should have created a new app browser and a dev tools browser.
+  ASSERT_EQ(3u,
+            chrome::GetBrowserCount(browser()->profile(),
+                                    browser()->host_desktop_type()));
+
+  // Find the new browsers.
+  Browser* app_browser = NULL;
+  Browser* dev_tools_browser = NULL;
+  for (chrome::BrowserIterator it; !it.done(); it.Next()) {
+    if (*it == browser()) {
+      continue;
+    } else if ((*it)->app_name() == DevToolsWindow::kDevToolsApp) {
+      dev_tools_browser = *it;
+    } else {
+      app_browser = *it;
+    }
+  }
+  ASSERT_TRUE(dev_tools_browser);
+  ASSERT_TRUE(app_browser);
+  ASSERT_TRUE(app_browser != browser());
+
+  EXPECT_FALSE(
+      dev_tools_browser->SupportsWindowFeature(Browser::FEATURE_LOCATIONBAR));
+  EXPECT_FALSE(
+      app_browser->SupportsWindowFeature(Browser::FEATURE_LOCATIONBAR));
+}
 #endif
 
 // Tests that the CLD (Compact Language Detection) works properly.
@@ -2040,30 +2135,6 @@
 }
 #endif
 
-class ShowModalDialogTest : public BrowserTest {
- public:
-  ShowModalDialogTest() {}
-
-  virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
-    command_line->AppendSwitch(switches::kDisablePopupBlocking);
-  }
-};
-
-IN_PROC_BROWSER_TEST_F(ShowModalDialogTest, BasicTest) {
-  // This navigation should show a modal dialog that will be immediately
-  // closed, but the fact that it was shown should be recorded.
-  GURL url = ui_test_utils::GetTestUrl(
-      base::FilePath(), base::FilePath().AppendASCII("showmodaldialog.html"));
-
-  base::string16 expected_title(ASCIIToUTF16("SUCCESS"));
-  content::TitleWatcher title_watcher(
-      browser()->tab_strip_model()->GetActiveWebContents(), expected_title);
-  ui_test_utils::NavigateToURL(browser(), url);
-
-  // Verify that we set a mark on successful dialog show.
-  ASSERT_EQ(expected_title, title_watcher.WaitAndGetTitle());
-}
-
 IN_PROC_BROWSER_TEST_F(BrowserTest, DisallowFileUrlUniversalAccessTest) {
   GURL url = ui_test_utils::GetTestUrl(
       base::FilePath(),
diff --git a/chrome/browser/ui/browser_command_controller.cc b/chrome/browser/ui/browser_command_controller.cc
index d613264..9982ef7 100644
--- a/chrome/browser/ui/browser_command_controller.cc
+++ b/chrome/browser/ui/browser_command_controller.cc
@@ -1187,6 +1187,7 @@
 void BrowserCommandController::UpdateCommandsForBookmarkBar() {
   command_updater_.UpdateCommandEnabled(IDC_SHOW_BOOKMARK_BAR,
       browser_defaults::bookmarks_enabled &&
+      !profile()->IsGuestSession() &&
       !profile()->GetPrefs()->IsManagedPreference(prefs::kShowBookmarkBar) &&
       IsShowingMainUI());
 }
@@ -1241,8 +1242,9 @@
   UpdateShowSyncState(show_main_ui);
 
   // Settings page/subpages are forced to open in normal mode. We disable these
-  // commands when incognito is forced.
+  // commands for guest sessions and when incognito is forced.
   const bool options_enabled = show_main_ui &&
+      !profile()->IsGuestSession() &&
       IncognitoModePrefs::GetAvailability(
           profile()->GetPrefs()) != IncognitoModePrefs::FORCED;
   command_updater_.UpdateCommandEnabled(IDC_OPTIONS, options_enabled);
diff --git a/chrome/browser/ui/browser_command_controller_unittest.cc b/chrome/browser/ui/browser_command_controller_unittest.cc
index b6ad670..449723d 100644
--- a/chrome/browser/ui/browser_command_controller_unittest.cc
+++ b/chrome/browser/ui/browser_command_controller_unittest.cc
@@ -15,11 +15,12 @@
 #include "chrome/browser/ui/browser_window_state.h"
 #include "chrome/common/chrome_switches.h"
 #include "chrome/common/pref_names.h"
-#include "chrome/common/profile_management_switches.h"
 #include "chrome/test/base/browser_with_test_window_test.h"
 #include "chrome/test/base/test_browser_window.h"
 #include "chrome/test/base/testing_browser_process.h"
+#include "chrome/test/base/testing_profile.h"
 #include "chrome/test/base/testing_profile_manager.h"
+#include "components/signin/core/common/profile_management_switches.h"
 #include "content/public/browser/native_web_keyboard_event.h"
 #include "ui/events/keycodes/keyboard_codes.h"
 
@@ -425,6 +426,14 @@
   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_ABOUT));
   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_SHOW_APP_MENU));
   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FULLSCREEN));
+
+  // Guest Profiles disallow some options.
+  TestingProfile* testprofile = browser()->profile()->AsTestingProfile();
+  EXPECT_TRUE(testprofile);
+  testprofile->SetGuestSession(true);
+
+  browser()->command_controller()->FullscreenStateChanged();
+  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_OPTIONS));
 }
 
 TEST_F(BrowserCommandControllerTest, IncognitoModeOnSigninAllowedPrefChange) {
diff --git a/chrome/browser/ui/browser_commands.cc b/chrome/browser/ui/browser_commands.cc
index 27c6269..9d9a8e7 100644
--- a/chrome/browser/ui/browser_commands.cc
+++ b/chrome/browser/ui/browser_commands.cc
@@ -85,7 +85,6 @@
 
 #if defined(OS_WIN)
 #include "chrome/browser/ui/metro_pin_tab_helper_win.h"
-#include "win8/util/win8_util.h"
 #endif
 
 #if defined(ENABLE_PRINTING)
@@ -535,7 +534,6 @@
   browser->tab_strip_model()->GetActiveWebContents()->Stop();
 }
 
-#if !defined(OS_WIN)
 void NewWindow(Browser* browser) {
   NewEmptyWindow(browser->profile()->GetOriginalProfile(),
                  browser->host_desktop_type());
@@ -545,7 +543,6 @@
   NewEmptyWindow(browser->profile()->GetOffTheRecordProfile(),
                  browser->host_desktop_type());
 }
-#endif  // OS_WIN
 
 void CloseWindow(Browser* browser) {
   content::RecordAction(UserMetricsAction("CloseWindow"));
@@ -1010,12 +1007,7 @@
 
 bool CanOpenTaskManager() {
 #if defined(ENABLE_TASK_MANAGER)
-#if defined(OS_WIN)
-  // In metro we can't display the task manager, as it is a native window.
-  return !win8::IsSingleWindowMetroMode();
-#else
   return true;
-#endif
 #else
   return false;
 #endif
diff --git a/chrome/browser/ui/browser_list.cc b/chrome/browser/ui/browser_list.cc
index 3ebc6f8..e8ed758 100644
--- a/chrome/browser/ui/browser_list.cc
+++ b/chrome/browser/ui/browser_list.cc
@@ -156,12 +156,8 @@
 
 // static
 bool BrowserList::IsOffTheRecordSessionActiveForProfile(Profile* profile) {
-  #if defined(OS_CHROMEOS)
-  // In ChromeOS, we assume that the default profile is always valid, so if
-  // we are in guest mode, keep the OTR profile active so it won't be deleted.
-  if (chromeos::UserManager::Get()->IsLoggedInAsGuest())
+  if (profile->IsGuestSession())
     return true;
-#endif
   for (chrome::BrowserIterator it; !it.done(); it.Next()) {
     if (it->profile()->IsSameProfile(profile) &&
         it->profile()->IsOffTheRecord()) {
diff --git a/chrome/browser/ui/browser_win.cc b/chrome/browser/ui/browser_win.cc
index 929573d..0e471a6 100644
--- a/chrome/browser/ui/browser_win.cc
+++ b/chrome/browser/ui/browser_win.cc
@@ -4,61 +4,7 @@
 
 #include "chrome/browser/ui/browser.h"
 
-#include "base/strings/utf_string_conversions.h"
-#include "base/win/metro.h"
-#include "chrome/browser/bookmarks/bookmark_utils.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/ui/browser_commands.h"
-#include "chrome/browser/ui/browser_finder.h"
-#include "chrome/browser/ui/browser_tabstrip.h"
 #include "chrome/browser/ui/fullscreen/fullscreen_controller.h"
-#include "win8/util/win8_util.h"
-
-namespace {
-
-void NewWindowMaybeMetro(Browser* source_browser, Profile* profile) {
-  chrome::HostDesktopType host_desktop_type =
-      source_browser->host_desktop_type();
-  if (win8::IsSingleWindowMetroMode()) {
-    typedef void (*FlipFrameWindows)();
-
-    static FlipFrameWindows flip_window_fn = reinterpret_cast<FlipFrameWindows>(
-        ::GetProcAddress(base::win::GetMetroModule(), "FlipFrameWindows"));
-    DCHECK(flip_window_fn);
-
-    Browser* browser = chrome::FindTabbedBrowser(profile, false,
-                                                 host_desktop_type);
-
-    if (!browser) {
-      chrome::OpenEmptyWindow(profile, host_desktop_type);
-      return;
-    }
-
-    chrome::NewTab(browser);
-
-    if (browser != source_browser) {
-      // Tell the metro_driver to flip our window. This causes the current
-      // browser window to be hidden and the next window to be shown.
-      flip_window_fn();
-    }
-  } else {
-    NewEmptyWindow(profile, host_desktop_type);
-  }
-}
-
-}  // namespace
-
-namespace chrome {
-
-void NewWindow(Browser* browser) {
-  NewWindowMaybeMetro(browser, browser->profile()->GetOriginalProfile());
-}
-
-void NewIncognitoWindow(Browser* browser) {
-  NewWindowMaybeMetro(browser, browser->profile()->GetOffTheRecordProfile());
-}
-
-}  // namespace chrome
 
 void Browser::SetMetroSnapMode(bool enable) {
   fullscreen_controller_->SetMetroSnapMode(enable);
diff --git a/chrome/browser/ui/chrome_pages.cc b/chrome/browser/ui/chrome_pages.cc
index bb713e8..08df687 100644
--- a/chrome/browser/ui/chrome_pages.cc
+++ b/chrome/browser/ui/chrome_pages.cc
@@ -28,7 +28,6 @@
 #include "components/signin/core/browser/signin_manager.h"
 #include "content/public/browser/user_metrics.h"
 #include "content/public/browser/web_contents.h"
-#include "content/public/common/url_constants.h"
 #include "google_apis/gaia/gaia_urls.h"
 #include "net/base/url_util.h"
 
@@ -212,6 +211,20 @@
   return GURL(url);
 }
 
+bool IsTrustedPopupWindowWithScheme(const Browser* browser,
+                                    const std::string& scheme) {
+  if (!browser->is_type_popup() || !browser->is_trusted_source())
+    return false;
+  if (scheme.empty())  // Any trusted popup window
+    return true;
+  const content::WebContents* web_contents =
+      browser->tab_strip_model()->GetWebContentsAt(0);
+  if (!web_contents)
+    return false;
+  GURL url(web_contents->GetURL());
+  return url.SchemeIs(scheme.c_str());
+}
+
 void ShowSettings(Browser* browser) {
   ShowSettingsSubPage(browser, std::string());
 }
diff --git a/chrome/browser/ui/chrome_pages.h b/chrome/browser/ui/chrome_pages.h
index 0214132..0705e46 100644
--- a/chrome/browser/ui/chrome_pages.h
+++ b/chrome/browser/ui/chrome_pages.h
@@ -57,6 +57,11 @@
 // Constructs a settings GURL for the specified |sub_page|.
 GURL GetSettingsUrl(const std::string& sub_page);
 
+// Returns true if |browser| is a trusted popup window containing a page with
+// matching |scheme| (or any trusted popup if |scheme| is empty).
+bool IsTrustedPopupWindowWithScheme(const Browser* browser,
+                                    const std::string& scheme);
+
 // Various things that open in a settings UI.
 void ShowSettings(Browser* browser);
 void ShowSettingsSubPage(Browser* browser, const std::string& sub_page);
diff --git a/chrome/browser/ui/chrome_select_file_policy.cc b/chrome/browser/ui/chrome_select_file_policy.cc
index 86db315..d203011 100644
--- a/chrome/browser/ui/chrome_select_file_policy.cc
+++ b/chrome/browser/ui/chrome_select_file_policy.cc
@@ -31,7 +31,7 @@
   if (source_contents_) {
     SimpleAlertInfoBarDelegate::Create(
         InfoBarService::FromWebContents(source_contents_),
-        InfoBarDelegate::kNoIconID,
+        infobars::InfoBarDelegate::kNoIconID,
         l10n_util::GetStringUTF16(IDS_FILE_SELECTION_DIALOG_INFOBAR), true);
   } else {
     LOG(WARNING) << "File-selection dialogs are disabled but no WebContents "
diff --git a/chrome/browser/ui/cocoa/apps/native_app_window_cocoa.mm b/chrome/browser/ui/cocoa/apps/native_app_window_cocoa.mm
index 2d949c0..e2936be 100644
--- a/chrome/browser/ui/cocoa/apps/native_app_window_cocoa.mm
+++ b/chrome/browser/ui/cocoa/apps/native_app_window_cocoa.mm
@@ -904,7 +904,7 @@
   shows_resize_controls_ =
       is_resizable_ && !size_constraints_.HasFixedSize();
   shows_fullscreen_controls_ =
-      is_resizable_ && !size_constraints_.HasMaximumSize();
+      is_resizable_ && !size_constraints_.HasMaximumSize() && has_frame_;
 
   if (!is_fullscreen_) {
     [window() setStyleMask:GetWindowStyleMask()];
diff --git a/chrome/browser/ui/cocoa/autofill/autofill_section_container.mm b/chrome/browser/ui/cocoa/autofill/autofill_section_container.mm
index 500e392..e01730a 100644
--- a/chrome/browser/ui/cocoa/autofill/autofill_section_container.mm
+++ b/chrome/browser/ui/cocoa/autofill/autofill_section_container.mm
@@ -147,12 +147,14 @@
 
   [self updateSuggestionState];
 
-  // TODO(groby): "Save in Chrome" handling. http://crbug.com/306203.
-
   if (![[self view] isHidden])
     [self validateFor:autofill::VALIDATE_EDIT];
 
   // Always request re-layout on state change.
+  [self requestRelayout];
+}
+
+- (void)requestRelayout {
   id delegate = [[view_ window] windowController];
   if ([delegate respondsToSelector:@selector(requestRelayout)])
     [delegate performSelector:@selector(requestRelayout)];
@@ -658,6 +660,9 @@
     } else {
       base::scoped_nsobject<AutofillTextField> field(
           [[AutofillTextField alloc] init]);
+      [field setIsMultiline:input.IsMultiline()];
+      [[field cell] setLineBreakMode:NSLineBreakByClipping];
+      [[field cell] setScrollable:YES];
       [[field cell] setPlaceholderString:
           l10n_util::FixUpWindowsStyleLabel(input.placeholder_text)];
       NSString* tooltipText =
@@ -705,9 +710,7 @@
 
   if (inputs_) {
     [[self view] replaceSubview:inputs_ with:view];
-    id delegate = [[view_ window] windowController];
-    if ([delegate respondsToSelector:@selector(requestRelayout)])
-      [delegate performSelector:@selector(requestRelayout)];
+    [self requestRelayout];
   }
 
   inputs_ = view;
diff --git a/chrome/browser/ui/cocoa/autofill/autofill_textfield.h b/chrome/browser/ui/cocoa/autofill/autofill_textfield.h
index 2a68b06..1c9aba6 100644
--- a/chrome/browser/ui/cocoa/autofill/autofill_textfield.h
+++ b/chrome/browser/ui/cocoa/autofill/autofill_textfield.h
@@ -25,8 +25,13 @@
   // YES if the field is currently handling a click that caused the field to
   // become first responder.
   BOOL handlingFirstClick_;
+
+  // YES if the field allows input of multiple lines of text.
+  BOOL isMultiline_;
 }
 
+@property(nonatomic, assign) BOOL isMultiline;
+
 // Can be invoked by field editor to forward mouseDown messages from the field
 // editor to the AutofillTextField.
 - (void)onEditorMouseDown:(id)sender;
diff --git a/chrome/browser/ui/cocoa/autofill/autofill_textfield.mm b/chrome/browser/ui/cocoa/autofill/autofill_textfield.mm
index af881de..f9814dc 100644
--- a/chrome/browser/ui/cocoa/autofill/autofill_textfield.mm
+++ b/chrome/browser/ui/cocoa/autofill/autofill_textfield.mm
@@ -10,22 +10,22 @@
 #include "base/logging.h"
 #include "ui/gfx/scoped_ns_graphics_context_save_gstate_mac.h"
 
-namespace {
-
 const CGFloat kGap = 6.0;  // gap between icon and text.
 const CGFloat kMinimumHeight = 27.0;  // Enforced minimum height for text cells.
 
-}  // namespace
-
-@interface AutofillTextFieldCell (Internal)
-
+@interface AutofillTextFieldCell ()
 - (NSRect)textFrameForFrame:(NSRect)frame;
+@end
 
+@interface AutofillTextField ()
+// Resize to accommodate contents, but keep width fixed.
+- (void)resizeToText;
 @end
 
 @implementation AutofillTextField
 
 @synthesize inputDelegate = inputDelegate_;
+@synthesize isMultiline = isMultiline_;
 
 + (Class)cellClass {
   return [AutofillTextFieldCell class];
@@ -77,12 +77,52 @@
     [inputDelegate_ didChange:self];
 }
 
+- (BOOL)control:(NSControl*)control
+               textView:(NSTextView*)textView
+    doCommandBySelector:(SEL)commandSelector {
+  // No special command handling for single line inputs.
+  if (![self isMultiline])
+    return NO;
+
+  if (commandSelector == @selector(insertNewline:) ||
+      commandSelector == @selector(insertNewlineIgnoringFieldEditor:)) {
+    // Only allow newline at end of text.
+    NSRange selectionRange = [textView selectedRange];
+    if (selectionRange.location < [[textView string] length])
+      return YES;
+
+    // Only allow newline on a non-empty line.
+    NSRange lineRange = [[textView string] lineRangeForRange:selectionRange];
+    if (lineRange.length == 0)
+      return YES;
+
+    // Insert a line-break character without ending editing.
+    [textView insertNewlineIgnoringFieldEditor:self];
+
+    [self resizeToText];
+    return YES;
+  }
+  return NO;
+}
+
+- (void)resizeToText {
+  NSSize size = [[self cell] cellSize];
+  size.width = NSWidth([self frame]);
+  [self setFrameSize:size];
+
+  id delegate = [[self window] windowController];
+  if ([delegate respondsToSelector:@selector(requestRelayout)])
+    [delegate performSelector:@selector(requestRelayout)];
+}
+
 - (NSString*)fieldValue {
   return [[self cell] fieldValue];
 }
 
 - (void)setFieldValue:(NSString*)fieldValue {
   [[self cell] setFieldValue:fieldValue];
+  if ([self isMultiline])
+    [self resizeToText];
 }
 
 - (NSString*)defaultValue {
diff --git a/chrome/browser/ui/cocoa/autofill/autofill_textfield_unittest.mm b/chrome/browser/ui/cocoa/autofill/autofill_textfield_unittest.mm
index f32e636..dc49800 100644
--- a/chrome/browser/ui/cocoa/autofill/autofill_textfield_unittest.mm
+++ b/chrome/browser/ui/cocoa/autofill/autofill_textfield_unittest.mm
@@ -6,8 +6,10 @@
 
 #import "base/mac/scoped_nsobject.h"
 #import "chrome/browser/ui/cocoa/cocoa_test_helper.h"
+#include "testing/gtest_mac.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "testing/platform_test.h"
+#include "ui/events/test/cocoa_test_event_utils.h"
 
 class AutofillTextFieldTest : public CocoaTest {
  public:
@@ -45,3 +47,31 @@
   [textfield_ sizeToFit];
   [textfield_ display];
 }
+
+// Test multiline behavior.
+TEST_F(AutofillTextFieldTest, Multiline) {
+  [[textfield_ window] makeFirstResponder:textfield_];
+
+  // First, test with multiline disabled (default state).
+  ASSERT_EQ(NO, [textfield_ isMultiline]);
+
+  // All input interactions must happen via the field editor - AutofillTextField
+  // is based on NSTextField.
+  [[textfield_ currentEditor] insertText:@"foo"];
+
+  // Insert a newline. Must do this via simulated key event to trigger
+  // -control:textView:doCommandBySelector:.
+  [[textfield_ currentEditor]
+      keyDown:cocoa_test_event_utils::KeyEventWithCharacter('\n')];
+  [[textfield_ currentEditor] insertText:@"bar"];
+  EXPECT_NSEQ(@"bar", [textfield_ stringValue]);
+
+  // Now test with multiline mode enabled.
+  [textfield_ setIsMultiline:YES];
+  [textfield_ setStringValue:@""];
+  [[textfield_ currentEditor] insertText:@"foo"];
+  [[textfield_ currentEditor]
+      keyDown:cocoa_test_event_utils::KeyEventWithCharacter('\n')];
+  [[textfield_ currentEditor] insertText:@"bar"];
+  EXPECT_NSEQ(@"foo\nbar", [textfield_ stringValue]);
+}
diff --git a/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller.mm b/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller.mm
index 4fdf43a..25b267f 100644
--- a/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller.mm
+++ b/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller.mm
@@ -13,6 +13,7 @@
 #include "chrome/browser/bookmarks/bookmark_model_factory.h"
 #include "chrome/browser/bookmarks/bookmark_node_data.h"
 #include "chrome/browser/bookmarks/bookmark_stats.h"
+#include "chrome/browser/bookmarks/bookmark_utils.h"
 #include "chrome/browser/prefs/incognito_mode_prefs.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/themes/theme_properties.h"
@@ -1025,7 +1026,7 @@
 
 - (IBAction)openBookmarkMenuItem:(id)sender {
   int64 tag = [self nodeIdFromMenuTag:[sender tag]];
-  const BookmarkNode* node = bookmarkModel_->GetNodeByID(tag);
+  const BookmarkNode* node = GetBookmarkNodeByID(bookmarkModel_, tag);
   WindowOpenDisposition disposition =
       ui::WindowOpenDispositionFromNSEvent([NSApp currentEvent]);
   [self openURL:node->url() disposition:disposition];
@@ -2416,7 +2417,7 @@
   BookmarkNodeData dragData;
   if (dragData.ReadFromClipboard(ui::CLIPBOARD_TYPE_DRAG)) {
     std::vector<const BookmarkNode*> nodes(
-        dragData.GetNodes(browser_->profile()));
+        dragData.GetNodes(bookmarkModel_, browser_->profile()->GetPath()));
     dragDataNodes.assign(nodes.begin(), nodes.end());
   }
   return dragDataNodes;
diff --git a/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller_unittest.mm b/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller_unittest.mm
index 52b110a..c99287c 100644
--- a/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller_unittest.mm
+++ b/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller_unittest.mm
@@ -703,7 +703,7 @@
   EXPECT_TRUE(item);
   if (item) {
     int64 tag = [bar_ nodeIdFromMenuTag:[item tag]];
-    const BookmarkNode* node = model->GetNodeByID(tag);
+    const BookmarkNode* node = GetBookmarkNodeByID(model, tag);
     EXPECT_TRUE(node);
     EXPECT_EQ(gurl, node->url());
   }
diff --git a/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_controller.mm b/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_controller.mm
index 9b11008..68d0946 100644
--- a/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_controller.mm
+++ b/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_controller.mm
@@ -9,6 +9,7 @@
 #include "base/strings/sys_string_conversions.h"
 #include "chrome/browser/bookmarks/bookmark_model.h"
 #include "chrome/browser/bookmarks/bookmark_node_data.h"
+#import "chrome/browser/profiles/profile.h"
 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_constants.h"
 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller.h"
 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_button_cell.h"
@@ -1469,7 +1470,9 @@
   std::vector<const BookmarkNode*> dragDataNodes;
   BookmarkNodeData dragData;
   if (dragData.ReadFromClipboard(ui::CLIPBOARD_TYPE_DRAG)) {
-    std::vector<const BookmarkNode*> nodes(dragData.GetNodes(profile_));
+    BookmarkModel* bookmarkModel = [self bookmarkModel];
+    std::vector<const BookmarkNode*> nodes(
+        dragData.GetNodes(bookmarkModel, profile_->GetPath()));
     dragDataNodes.assign(nodes.begin(), nodes.end());
   }
   return dragDataNodes;
diff --git a/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_view.mm b/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_view.mm
index 3a62c85..9c3d35b 100644
--- a/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_view.mm
+++ b/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_view.mm
@@ -5,6 +5,7 @@
 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_view.h"
 
 #include "chrome/browser/bookmarks/bookmark_pasteboard_helper_mac.h"
+#include "chrome/browser/bookmarks/bookmark_utils.h"
 #include "chrome/browser/profiles/profile.h"
 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller.h"
 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_folder_target.h"
@@ -161,7 +162,7 @@
     const BookmarkModel* const model = [[self controller] bookmarkModel];
     const BookmarkNode* const source_node = [button bookmarkNode];
     const BookmarkNode* const target_node =
-        model->GetNodeByID(source_node->id());
+        GetBookmarkNodeByID(model, source_node->id());
 
     BOOL copy =
         !([info draggingSourceOperationMask] & NSDragOperationMove) ||
diff --git a/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_view.mm b/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_view.mm
index 651f35d..8b78dd4 100644
--- a/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_view.mm
+++ b/chrome/browser/ui/cocoa/bookmarks/bookmark_bar_view.mm
@@ -5,6 +5,7 @@
 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_view.h"
 
 #include "chrome/browser/bookmarks/bookmark_pasteboard_helper_mac.h"
+#include "chrome/browser/bookmarks/bookmark_utils.h"
 #include "chrome/browser/profiles/profile.h"
 #import "chrome/browser/themes/theme_properties.h"
 #import "chrome/browser/themes/theme_service.h"
@@ -226,7 +227,7 @@
     const BookmarkModel* const model = [[self controller] bookmarkModel];
     const BookmarkNode* const source_node = [button bookmarkNode];
     const BookmarkNode* const target_node =
-        model->GetNodeByID(source_node->id());
+        GetBookmarkNodeByID(model, source_node->id());
 
     BOOL copy =
         !([info draggingSourceOperationMask] & NSDragOperationMove) ||
diff --git a/chrome/browser/ui/cocoa/bookmarks/bookmark_button.mm b/chrome/browser/ui/cocoa/bookmarks/bookmark_button.mm
index cc3f93b..042d1a2 100644
--- a/chrome/browser/ui/cocoa/bookmarks/bookmark_button.mm
+++ b/chrome/browser/ui/cocoa/bookmarks/bookmark_button.mm
@@ -405,14 +405,14 @@
 }
 
 - (BOOL)isOpaque {
-  // Make this control opaque so that sub pixel anti aliasing works when core
-  // animation is enabled.
+  // Make this control opaque so that sub-pixel anti-aliasing works when
+  // CoreAnimation is enabled.
   return YES;
 }
 
 - (void)drawRect:(NSRect)rect {
-  NSView* toolbarView = [[self superview] superview];
-  [self cr_drawUsingAncestor:toolbarView inRect:(NSRect)rect];
+  NSView* bookmarkBarToolbarView = [[self superview] superview];
+  [self cr_drawUsingAncestor:bookmarkBarToolbarView inRect:(NSRect)rect];
   [super drawRect:rect];
 }
 
diff --git a/chrome/browser/ui/cocoa/bookmarks/bookmark_drag_drop_cocoa.mm b/chrome/browser/ui/cocoa/bookmarks/bookmark_drag_drop_cocoa.mm
index 71e327f..c3e8ec1 100644
--- a/chrome/browser/ui/cocoa/bookmarks/bookmark_drag_drop_cocoa.mm
+++ b/chrome/browser/ui/cocoa/bookmarks/bookmark_drag_drop_cocoa.mm
@@ -139,7 +139,7 @@
   base::MessageLoop::current()->SetNestableTasksAllowed(true);
 
   BookmarkNodeData drag_data(nodes);
-  drag_data.SetOriginatingProfile(profile);
+  drag_data.SetOriginatingProfilePath(profile->GetPath());
   drag_data.WriteToClipboard(ui::CLIPBOARD_TYPE_DRAG);
 
   // Synthesize an event for dragging, since we can't be sure that
diff --git a/chrome/browser/ui/cocoa/bookmarks/bookmark_folder_target.mm b/chrome/browser/ui/cocoa/bookmarks/bookmark_folder_target.mm
index d8d65bd..75a12ca 100644
--- a/chrome/browser/ui/cocoa/bookmarks/bookmark_folder_target.mm
+++ b/chrome/browser/ui/cocoa/bookmarks/bookmark_folder_target.mm
@@ -102,7 +102,7 @@
     [pboard clearContents];
   } else {
     BookmarkNodeData data(node);
-    data.SetOriginatingProfile(profile_);
+    data.SetOriginatingProfilePath(profile_->GetPath());
     data.WriteToClipboard(ui::CLIPBOARD_TYPE_DRAG);
   }
 }
diff --git a/chrome/browser/ui/cocoa/bookmarks/bookmark_menu_cocoa_controller.mm b/chrome/browser/ui/cocoa/bookmarks/bookmark_menu_cocoa_controller.mm
index e5b391a..43a49e2 100644
--- a/chrome/browser/ui/cocoa/bookmarks/bookmark_menu_cocoa_controller.mm
+++ b/chrome/browser/ui/cocoa/bookmarks/bookmark_menu_cocoa_controller.mm
@@ -7,7 +7,7 @@
 #include "base/strings/sys_string_conversions.h"
 #include "chrome/app/chrome_command_ids.h"  // IDC_BOOKMARK_MENU
 #import "chrome/browser/app_controller_mac.h"
-#include "chrome/browser/bookmarks/bookmark_model.h"
+#include "chrome/browser/bookmarks/bookmark_utils.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/bookmarks/bookmark_utils.h"
 #include "chrome/browser/ui/browser.h"
@@ -80,7 +80,7 @@
 // Return the a BookmarkNode that has the given id (called
 // "identifier" here to avoid conflict with objc's concept of "id").
 - (const BookmarkNode*)nodeForIdentifier:(int)identifier {
-  return bridge_->GetBookmarkModel()->GetNodeByID(identifier);
+  return GetBookmarkNodeByID(bridge_->GetBookmarkModel(), identifier);
 }
 
 // Open the URL of the given BookmarkNode in the current tab.
diff --git a/chrome/browser/ui/cocoa/browser_window_controller.mm b/chrome/browser/ui/cocoa/browser_window_controller.mm
index a81f119..2790cbf 100644
--- a/chrome/browser/ui/cocoa/browser_window_controller.mm
+++ b/chrome/browser/ui/cocoa/browser_window_controller.mm
@@ -77,8 +77,8 @@
 #include "chrome/browser/ui/window_sizer/window_sizer.h"
 #include "chrome/common/chrome_switches.h"
 #include "chrome/common/extensions/command.h"
-#include "chrome/common/profile_management_switches.h"
 #include "chrome/common/url_constants.h"
+#include "components/signin/core/common/profile_management_switches.h"
 #include "components/translate/core/browser/translate_ui_delegate.h"
 #include "components/web_modal/web_contents_modal_dialog_manager.h"
 #include "content/public/browser/render_view_host.h"
@@ -1542,7 +1542,7 @@
 }
 
 - (BOOL)shouldUseNewAvatarButton {
-  return switches::IsNewProfileManagement() &&
+  return switches::IsNewAvatarMenu() &&
       profiles::IsRegularOrGuestSession(browser_.get());
 }
 
diff --git a/chrome/browser/ui/cocoa/constrained_window/constrained_window_button.h b/chrome/browser/ui/cocoa/constrained_window/constrained_window_button.h
index 9bd32ae..8026b30 100644
--- a/chrome/browser/ui/cocoa/constrained_window/constrained_window_button.h
+++ b/chrome/browser/ui/cocoa/constrained_window/constrained_window_button.h
@@ -9,6 +9,16 @@
 
 #import "ui/base/cocoa/tracking_area.h"
 
+namespace constrained_window_button {
+const CGFloat kButtonMinWidth = 72;
+}
+
+@protocol ConstrainedWindowButtonDrawableCell
+@property (nonatomic, assign) BOOL isMouseInside;
+- (BOOL)isEnabled;
+- (BOOL)isHighlighted;
+@end
+
 // A push button for use in a constrained window. Specialized constrained
 // windows that need a push button should use this class instead of NSButton.
 @interface ConstrainedWindowButton : NSButton {
@@ -16,16 +26,34 @@
   ui::ScopedCrTrackingArea trackingArea_;
 }
 
+extern const CGFloat buttonMinWidth_;
+
+// Draws the background and shadow inside |path| with the appropriate
+// colors for |buttonState|, onto |view|.
++ (void)DrawBackgroundAndShadowForPath:(NSBezierPath*)path
+                          withCell:(id<ConstrainedWindowButtonDrawableCell>)cell
+                            inView:(NSView*)view;
+
+// Draws the highlight inside |path|, with the color for |buttonState|,
+// onto |view|.
++ (void)DrawInnerHighlightForPath:(NSBezierPath*)path
+                         withCell:(id<ConstrainedWindowButtonDrawableCell>)cell
+                           inView:(NSView*)view;
+
+// Draws the border along |path|, with a color according to |buttonState|,
+// onto |view|.
++ (void)DrawBorderForPath:(NSBezierPath*)path
+                 withCell:(id<ConstrainedWindowButtonDrawableCell>)cell
+                   inView:(NSView*)view;
 @end
 
 // A button cell used by ConstrainedWindowButton.
-@interface ConstrainedWindowButtonCell : NSButtonCell {
+@interface ConstrainedWindowButtonCell :
+    NSButtonCell<ConstrainedWindowButtonDrawableCell> {
  @private
   BOOL isMouseInside_;
 }
 
-@property(nonatomic, assign) BOOL isMouseInside;
-
 @end
 
 #endif  // CHROME_BROWSER_UI_COCOA_CONSTRAINED_WINDOW_CONSTRAINED_WINDOW_BUTTON_
diff --git a/chrome/browser/ui/cocoa/constrained_window/constrained_window_button.mm b/chrome/browser/ui/cocoa/constrained_window/constrained_window_button.mm
index eed5dbb..0c8cb09 100644
--- a/chrome/browser/ui/cocoa/constrained_window/constrained_window_button.mm
+++ b/chrome/browser/ui/cocoa/constrained_window/constrained_window_button.mm
@@ -10,6 +10,10 @@
 #import "third_party/molokocacao/NSBezierPath+MCAdditions.h"
 #include "ui/gfx/scoped_ns_graphics_context_save_gstate_mac.h"
 
+@interface ConstrainedWindowButton ()
+- (BOOL)isMouseReallyInside;
+@end
+
 namespace {
 
 enum ButtonState {
@@ -19,23 +23,21 @@
   BUTTON_DISABLED,
 };
 
-const CGFloat kButtonMinWidth = 72;
-
-}  // namespace
-
-@interface ConstrainedWindowButton ()
-- (BOOL)isMouseReallyInside;
-@end
-
-@interface ConstrainedWindowButtonCell ()
-- (ButtonState)buttonState;
-@end
-
-namespace {
-
 const CGFloat kButtonHeight = 28;
 const CGFloat kButtonPaddingX = 14;
 
+ButtonState cellButtonState(id<ConstrainedWindowButtonDrawableCell> cell) {
+  if (!cell)
+    return BUTTON_NORMAL;
+  if (![cell isEnabled])
+    return BUTTON_DISABLED;
+  if ([cell isHighlighted])
+    return BUTTON_PRESSED;
+  if ([cell isMouseInside])
+    return BUTTON_HOVER;
+  return BUTTON_NORMAL;
+}
+
 // The functions below use hex color values to make it easier to compare
 // the code with the spec. Table of hex values are also more readable
 // then tables of NSColor constructors.
@@ -79,9 +81,10 @@
   return gfx::SkColorToCalibratedNSColor(color[button_state]);
 }
 
-NSAttributedString* GetButtonAttributedString(NSString* title,
-                                              NSString* key_equivalent,
-                                              ButtonState button_state) {
+NSAttributedString* GetButtonAttributedString(
+    NSString* title,
+    NSString* key_equivalent,
+    id<ConstrainedWindowButtonDrawableCell> cell) {
   const SkColor text_color[] = {0xFF333333, 0XFF000000, 0xFF000000, 0xFFAAAAAA};
   // The shadow color should be 0xFFF0F0F0 but that doesn't show up so use
   // pure white instead.
@@ -90,7 +93,7 @@
 
   base::scoped_nsobject<NSShadow> shadow([[NSShadow alloc] init]);
   [shadow setShadowColor:
-      gfx::SkColorToCalibratedNSColor(shadow_color[button_state])];
+      gfx::SkColorToCalibratedNSColor(shadow_color[cellButtonState(cell)])];
   [shadow setShadowOffset:NSMakeSize(0, -1)];
   [shadow setShadowBlurRadius:0];
 
@@ -106,7 +109,7 @@
 
   NSDictionary* attributes = [NSDictionary dictionaryWithObjectsAndKeys:
       font, NSFontAttributeName,
-      gfx::SkColorToCalibratedNSColor(text_color[button_state]),
+      gfx::SkColorToCalibratedNSColor(text_color[cellButtonState(cell)]),
       NSForegroundColorAttributeName,
       shadow.get(), NSShadowAttributeName,
       paragraphStyle.get(), NSParagraphStyleAttributeName,
@@ -115,6 +118,41 @@
                                           attributes:attributes] autorelease];
 }
 
+void DrawBackgroundAndShadow(const NSRect& frame,
+                             id<ConstrainedWindowButtonDrawableCell> cell,
+                             NSView* view) {
+  NSBezierPath* path = [NSBezierPath bezierPathWithRoundedRect:frame
+                                                       xRadius:2
+                                                       yRadius:2];
+  [ConstrainedWindowButton DrawBackgroundAndShadowForPath:path
+                                                 withCell:cell
+                                                   inView:view];
+}
+
+void DrawInnerHighlight(const NSRect& frame,
+                        id<ConstrainedWindowButtonDrawableCell> cell,
+                        NSView* view) {
+  NSBezierPath* path =
+      [NSBezierPath bezierPathWithRoundedRect:NSInsetRect(frame, 1, 1)
+                                      xRadius:2
+                                      yRadius:2];
+  [ConstrainedWindowButton DrawInnerHighlightForPath:path
+                                            withCell:cell
+                                              inView:view];
+}
+
+void DrawBorder(const NSRect& frame,
+                id<ConstrainedWindowButtonDrawableCell> cell,
+                NSView* view) {
+  NSBezierPath* path =
+      [NSBezierPath bezierPathWithRoundedRect:NSInsetRect(frame, 0.5, 0.5)
+                                      xRadius:2
+                                      yRadius:2];
+  [ConstrainedWindowButton DrawBorderForPath:path
+                                    withCell:cell
+                                      inView:view];
+}
+
 }  // namespace
 
 @implementation ConstrainedWindowButton
@@ -172,76 +210,81 @@
 - (void)sizeToFit {
   [super sizeToFit];
   NSSize size = [self frame].size;
-  if (size.width < kButtonMinWidth) {
-    size.width = kButtonMinWidth;
+  if (size.width < constrained_window_button::kButtonMinWidth) {
+    size.width = constrained_window_button::kButtonMinWidth;
     [self setFrameSize:size];
   }
 }
 
++ (void)DrawBackgroundAndShadowForPath:(NSBezierPath*)path
+                          withCell:(id<ConstrainedWindowButtonDrawableCell>)cell
+                            inView:(NSView*)view {
+  ButtonState buttonState = cellButtonState(cell);
+  {
+    gfx::ScopedNSGraphicsContextSaveGState scopedGState;
+    [GetButtonShadow(buttonState) set];
+    [[[view window] backgroundColor] set];
+    [path fill];
+  }
+  [GetButtonGradient(buttonState) drawInBezierPath:path angle:90.0];
+}
+
++ (void)DrawInnerHighlightForPath:(NSBezierPath*)path
+                         withCell:(id<ConstrainedWindowButtonDrawableCell>)cell
+                           inView:(NSView*)view {
+  [path fillWithInnerShadow:GetButtonHighlight(cellButtonState(cell))];
+}
+
++ (void)DrawBorderForPath:(NSBezierPath*)path
+                 withCell:(id<ConstrainedWindowButtonDrawableCell>)cell
+                   inView:(NSView*)view {
+  if ([[[view window] firstResponder] isEqual:view])
+    [[NSColor colorWithCalibratedRed:0.30 green:0.57 blue:1.0 alpha:1.0] set];
+  else
+    [GetButtonBorderColor(cellButtonState(cell)) set];
+  [path stroke];
+}
+
 @end
 
 @implementation ConstrainedWindowButtonCell
 
 @synthesize isMouseInside = isMouseInside_;
 
-- (void)drawWithFrame:(NSRect)frame
-               inView:(NSView *)controlView {
-  NSBezierPath* path = nil;
-  ButtonState buttonState = [self buttonState];
-
+- (void)drawBezelWithFrame:(NSRect)frame inView:(NSView*)controlView {
   // Inset to leave room for shadow.
   --frame.size.height;
 
   // Background and shadow
-  path = [NSBezierPath bezierPathWithRoundedRect:frame
-                                         xRadius:2
-                                         yRadius:2];
-  {
-    gfx::ScopedNSGraphicsContextSaveGState scopedGState;
-    [GetButtonShadow(buttonState) set];
-    [[[controlView window] backgroundColor] set];
-    [path fill];
-  }
-  [GetButtonGradient(buttonState) drawInBezierPath:path angle:90.0];
+  DrawBackgroundAndShadow(frame, self, controlView);
 
   // Inner highlight
-  path = [NSBezierPath bezierPathWithRoundedRect:NSInsetRect(frame, 1, 1)
-                                         xRadius:2
-                                         yRadius:2];
-  [path fillWithInnerShadow:GetButtonHighlight(buttonState)];
+  DrawInnerHighlight(frame, self, controlView);
 
   // Border
-  path = [NSBezierPath bezierPathWithRoundedRect:NSInsetRect(frame, 0.5, 0.5)
-                                         xRadius:2
-                                         yRadius:2];
-  if ([[[controlView window] firstResponder] isEqual:controlView])
-    [[NSColor colorWithCalibratedRed:0.30 green:0.57 blue:1.0 alpha:1.0] set];
-  else
-    [GetButtonBorderColor(buttonState) set];
-  [path stroke];
+  DrawBorder(frame, self, controlView);
+}
 
+- (void)drawInteriorWithFrame:(NSRect)frame inView:(NSView*)controlView {
+  // Inset to leave room for shadow.
+  --frame.size.height;
   NSAttributedString* title = GetButtonAttributedString(
-      [self title], [self keyEquivalent], buttonState);
+     [self title], [self keyEquivalent], self);
   [self drawTitle:title withFrame:frame inView:controlView];
 }
 
 - (NSSize)cellSize {
   NSAttributedString* title = GetButtonAttributedString(
-      [self title], [self keyEquivalent], [self buttonState]);
+      [self title], [self keyEquivalent], self);
   NSSize size = [title size];
   size.height = std::max(size.height, kButtonHeight);
   size.width += kButtonPaddingX * 2;
   return size;
 }
 
-- (ButtonState)buttonState {
-  if (![self isEnabled])
-    return BUTTON_DISABLED;
-  if ([self isHighlighted])
-    return BUTTON_PRESSED;
-  if (isMouseInside_)
-    return BUTTON_HOVER;
-  return BUTTON_NORMAL;
+- (NSAttributedString*)getAttributedTitle {
+  return GetButtonAttributedString(
+      [self title], [self keyEquivalent], self);
 }
 
 @end
diff --git a/chrome/browser/ui/cocoa/constrained_window/constrained_window_mac.mm b/chrome/browser/ui/cocoa/constrained_window/constrained_window_mac.mm
index 8ddade5..c3a2b4f 100644
--- a/chrome/browser/ui/cocoa/constrained_window/constrained_window_mac.mm
+++ b/chrome/browser/ui/cocoa/constrained_window/constrained_window_mac.mm
@@ -56,6 +56,7 @@
 void ConstrainedWindowMac::CloseWebContentsModalDialog() {
   [[ConstrainedWindowSheetController controllerForSheet:sheet_]
       closeSheet:sheet_];
+  // TODO(gbillock): get this object in config, not from a global.
   WebContentsModalDialogManager* web_contents_modal_dialog_manager =
       WebContentsModalDialogManager::FromWebContents(web_contents_);
 
diff --git a/chrome/browser/ui/cocoa/download/download_item_button.mm b/chrome/browser/ui/cocoa/download/download_item_button.mm
index 0a6a7a9..67726e8 100644
--- a/chrome/browser/ui/cocoa/download/download_item_button.mm
+++ b/chrome/browser/ui/cocoa/download/download_item_button.mm
@@ -9,6 +9,8 @@
 #import "chrome/browser/ui/cocoa/download/download_item_cell.h"
 #import "chrome/browser/ui/cocoa/download/download_item_controller.h"
 #import "chrome/browser/ui/cocoa/download/download_shelf_context_menu_controller.h"
+#import "chrome/browser/ui/cocoa/nsview_additions.h"
+#import "chrome/browser/ui/cocoa/view_id_util.h"
 
 @implementation DownloadItemButton
 
@@ -60,4 +62,16 @@
   return YES;
 }
 
+- (BOOL)isOpaque {
+  // Make this control opaque so that sub-pixel anti-aliasing works when
+  // CoreAnimation is enabled.
+  return YES;
+}
+
+- (void)drawRect:(NSRect)rect {
+  NSView* downloadShelfView = [self ancestorWithViewID:VIEW_ID_DOWNLOAD_SHELF];
+  [self cr_drawUsingAncestor:downloadShelfView inRect:rect];
+  [super drawRect:rect];
+}
+
 @end
diff --git a/chrome/browser/ui/cocoa/download/download_show_all_button.mm b/chrome/browser/ui/cocoa/download/download_show_all_button.mm
index 81b6354..196a7ff 100644
--- a/chrome/browser/ui/cocoa/download/download_show_all_button.mm
+++ b/chrome/browser/ui/cocoa/download/download_show_all_button.mm
@@ -6,6 +6,8 @@
 
 #include "base/logging.h"
 #import "chrome/browser/ui/cocoa/download/download_show_all_cell.h"
+#import "chrome/browser/ui/cocoa/nsview_additions.h"
+#import "chrome/browser/ui/cocoa/view_id_util.h"
 #include "grit/generated_resources.h"
 #include "grit/theme_resources.h"
 #include "ui/base/resource/resource_bundle.h"
@@ -35,4 +37,16 @@
   [self setFrame:newRect];
 }
 
+- (BOOL)isOpaque {
+  // Make this control opaque so that sub-pixel anti-aliasing works when
+  // CoreAnimation is enabled.
+  return YES;
+}
+
+- (void)drawRect:(NSRect)rect {
+  NSView* downloadShelfView = [self ancestorWithViewID:VIEW_ID_DOWNLOAD_SHELF];
+  [self cr_drawUsingAncestor:downloadShelfView inRect:rect];
+  [super drawRect:rect];
+}
+
 @end
diff --git a/chrome/browser/ui/cocoa/extensions/extension_installed_bubble_controller.mm b/chrome/browser/ui/cocoa/extensions/extension_installed_bubble_controller.mm
index f6fb43a..01f53d4 100644
--- a/chrome/browser/ui/cocoa/extensions/extension_installed_bubble_controller.mm
+++ b/chrome/browser/ui/cocoa/extensions/extension_installed_bubble_controller.mm
@@ -60,8 +60,9 @@
   ExtensionLoadedNotificationObserver(
       ExtensionInstalledBubbleController* controller, Profile* profile)
           : controller_(controller) {
-    registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
-        content::Source<Profile>(profile));
+    registrar_.Add(this,
+                   chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
+                   content::Source<Profile>(profile));
     registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
         content::Source<Profile>(profile));
   }
@@ -73,7 +74,7 @@
       int type,
       const content::NotificationSource& source,
       const content::NotificationDetails& details) OVERRIDE {
-    if (type == chrome::NOTIFICATION_EXTENSION_LOADED) {
+    if (type == chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED) {
       const Extension* extension =
           content::Details<const Extension>(details).ptr();
       if (extension == [controller_ extension]) {
diff --git a/chrome/browser/ui/cocoa/extensions/extension_uninstall_dialog_cocoa.mm b/chrome/browser/ui/cocoa/extensions/extension_uninstall_dialog_cocoa.mm
index 35c06b8..11d5955 100644
--- a/chrome/browser/ui/cocoa/extensions/extension_uninstall_dialog_cocoa.mm
+++ b/chrome/browser/ui/cocoa/extensions/extension_uninstall_dialog_cocoa.mm
@@ -49,13 +49,13 @@
 
   NSButton* continueButton = [alert addButtonWithTitle:l10n_util::GetNSString(
       IDS_EXTENSION_PROMPT_UNINSTALL_BUTTON)];
-  // Clear the key equivalent (currently 'Return') because cancel is the default
-  // button.
-  [continueButton setKeyEquivalent:@""];
-
   NSButton* cancelButton = [alert addButtonWithTitle:l10n_util::GetNSString(
       IDS_CANCEL)];
-  [cancelButton setKeyEquivalent:@"\r"];
+  // Default to accept when triggered via chrome://extensions page.
+  if (triggering_extension_) {
+    [continueButton setKeyEquivalent:@""];
+    [cancelButton setKeyEquivalent:@"\r"];
+  }
 
   [alert setMessageText:base::SysUTF8ToNSString(GetHeadingText())];
   [alert setAlertStyle:NSWarningAlertStyle];
diff --git a/chrome/browser/ui/cocoa/extensions/media_galleries_dialog_cocoa.h b/chrome/browser/ui/cocoa/extensions/media_galleries_dialog_cocoa.h
index 50b014f..549f9d3 100644
--- a/chrome/browser/ui/cocoa/extensions/media_galleries_dialog_cocoa.h
+++ b/chrome/browser/ui/cocoa/extensions/media_galleries_dialog_cocoa.h
@@ -47,7 +47,7 @@
   virtual void OnConstrainedWindowClosed(
       ConstrainedWindowMac* window) OVERRIDE;
 
-  ui::MenuModel* GetContextMenu(MediaGalleryPrefId prefid);
+  ui::MenuModel* GetContextMenu(GalleryDialogId gallery_id);
 
  private:
   FRIEND_TEST_ALL_PREFIXES(MediaGalleriesDialogBrowserTest, Close);
@@ -56,17 +56,13 @@
   FRIEND_TEST_ALL_PREFIXES(MediaGalleriesDialogTest, UpdateAdds);
   FRIEND_TEST_ALL_PREFIXES(MediaGalleriesDialogTest, ForgetDeletes);
 
-  void UpdateGalleryCheckbox(const MediaGalleryPrefInfo& gallery,
-                             bool permitted,
-                             CGFloat y_pos);
+  void UpdateGalleryCheckbox(
+      const MediaGalleriesDialogController::GalleryPermission& gallery,
+      CGFloat y_pos);
 
   void InitDialogControls();
   CGFloat CreateAddFolderButton();
-  CGFloat CreateAttachedCheckboxes(
-      CGFloat y_pos,
-      const MediaGalleriesDialogController::GalleryPermissionsVector&
-          permissions);
-  CGFloat CreateUnattachedCheckboxes(
+  CGFloat CreateCheckboxes(
       CGFloat y_pos,
       const MediaGalleriesDialogController::GalleryPermissionsVector&
           permissions);
diff --git a/chrome/browser/ui/cocoa/extensions/media_galleries_dialog_cocoa.mm b/chrome/browser/ui/cocoa/extensions/media_galleries_dialog_cocoa.mm
index ba06fb8..a8d936f 100644
--- a/chrome/browser/ui/cocoa/extensions/media_galleries_dialog_cocoa.mm
+++ b/chrome/browser/ui/cocoa/extensions/media_galleries_dialog_cocoa.mm
@@ -58,13 +58,13 @@
 @interface MediaGalleriesCheckbox : NSButton {
  @private
   MediaGalleriesDialogCocoa* dialog_;  // |dialog_| owns |this|.
-  MediaGalleryPrefId prefId_;
+  GalleryDialogId galleryId_;
   base::scoped_nsobject<MenuController> menuController_;
 }
 
 - (id)initWithFrame:(NSRect)frameRect
              dialog:(MediaGalleriesDialogCocoa*)dialog
-             prefId:(MediaGalleryPrefId)prefId;
+          galleryId:(GalleryDialogId)galleryId;
 - (NSMenu*)menuForEvent:(NSEvent*)theEvent;
 
 @end
@@ -73,17 +73,17 @@
 
 - (id)initWithFrame:(NSRect)frameRect
              dialog:(MediaGalleriesDialogCocoa*)dialog
-             prefId:(MediaGalleryPrefId)prefId {
+          galleryId:(GalleryDialogId)galleryId {
   if ((self = [super initWithFrame:frameRect])) {
     dialog_ = dialog;
-    prefId_ = prefId;
+    galleryId_ = galleryId;
   }
   return self;
 }
 
 - (NSMenu*)menuForEvent:(NSEvent*)theEvent {
   menuController_.reset(
-    [[MenuController alloc] initWithModel:dialog_->GetContextMenu(prefId_)
+    [[MenuController alloc] initWithModel:dialog_->GetContextMenu(galleryId_)
                    useWithPopUpButtonCell:NO]);
   return [menuController_ menu];
 }
@@ -96,10 +96,6 @@
 const CGFloat kCheckboxMaxWidth = 440;
 const CGFloat kScrollAreaHeight = 220;
 
-NSString* GetUniqueIDForGallery(const MediaGalleryPrefInfo& gallery) {
-  return base::SysUTF8ToNSString(gallery.device_id + gallery.path.value());
-}
-
 }  // namespace
 
 MediaGalleriesDialogCocoa::MediaGalleriesDialogCocoa(
@@ -177,13 +173,11 @@
 
   CGFloat y_pos = 0;
 
-  y_pos = CreateAttachedCheckboxes(y_pos, controller_->AttachedPermissions());
+  y_pos = CreateCheckboxes(y_pos, controller_->AttachedPermissions());
 
   if (!controller_->UnattachedPermissions().empty()) {
     y_pos = CreateCheckboxSeparator(y_pos);
-
-    y_pos = CreateUnattachedCheckboxes(
-        y_pos, controller_->UnattachedPermissions());
+    y_pos = CreateCheckboxes(y_pos, controller_->UnattachedPermissions());
   }
 
   [checkbox_container_ setFrame:NSMakeRect(0, 0, kCheckboxMaxWidth, y_pos + 2)];
@@ -202,12 +196,12 @@
   // confirming, the button will be unavailable for dialogs without any checks
   // until the user toggles something.
   [[[alert_ buttons] objectAtIndex:0] setEnabled:
-      controller_->HasPermittedGalleries()];
+      controller_->IsAcceptAllowed()];
 
   [alert_ layout];
 }
 
-CGFloat MediaGalleriesDialogCocoa::CreateAttachedCheckboxes(
+CGFloat MediaGalleriesDialogCocoa::CreateCheckboxes(
     CGFloat y_pos,
     const MediaGalleriesDialogController::GalleryPermissionsVector&
         permissions) {
@@ -217,26 +211,7 @@
        const_iterator iter = permissions.begin();
        iter != permissions.end(); iter++) {
     const MediaGalleriesDialogController::GalleryPermission& permission = *iter;
-    UpdateGalleryCheckbox(permission.pref_info, permission.allowed, y_pos);
-    y_pos = NSMaxY([[checkboxes_ lastObject] frame]) + kCheckboxMargin;
-  }
-
-  return y_pos;
-}
-
-// Add checkboxes for galleries that aren't available (i.e. removable
-// volumes that are not currently attached).
-CGFloat MediaGalleriesDialogCocoa::CreateUnattachedCheckboxes(
-    CGFloat y_pos,
-    const MediaGalleriesDialogController::GalleryPermissionsVector&
-        permissions) {
-  y_pos += kCheckboxMargin;
-
-  for (MediaGalleriesDialogController::GalleryPermissionsVector::
-       const_iterator iter = permissions.begin();
-       iter != permissions.end(); iter++) {
-    const MediaGalleriesDialogController::GalleryPermission& permission = *iter;
-    UpdateGalleryCheckbox(permission.pref_info, permission.allowed, y_pos);
+    UpdateGalleryCheckbox(permission, y_pos);
     y_pos = NSMaxY([[checkboxes_ lastObject] frame]) + kCheckboxMargin;
   }
 
@@ -294,49 +269,25 @@
 }
 
 void MediaGalleriesDialogCocoa::OnCheckboxToggled(NSButton* checkbox) {
-  [[[alert_ buttons] objectAtIndex:0] setEnabled:YES];
+  GalleryDialogId gallery_id =
+      [[[checkbox cell] representedObject] longLongValue];
+  controller_->DidToggleGallery(gallery_id, [checkbox state] == NSOnState);
 
-  const MediaGalleriesDialogController::GalleryPermissionsVector&
-      attached_permissions = controller_->AttachedPermissions();
-  for (MediaGalleriesDialogController::GalleryPermissionsVector::
-       const_reverse_iterator iter = attached_permissions.rbegin();
-       iter != attached_permissions.rend(); iter++) {
-    const MediaGalleryPrefInfo* gallery = &iter->pref_info;
-    NSString* unique_id = GetUniqueIDForGallery(*gallery);
-    if ([[[checkbox cell] representedObject] isEqual:unique_id]) {
-      controller_->DidToggleGalleryId(gallery->pref_id,
-                                      [checkbox state] == NSOnState);
-      break;
-    }
-  }
-
-  const MediaGalleriesDialogController::GalleryPermissionsVector&
-      unattached_permissions = controller_->UnattachedPermissions();
-  for (MediaGalleriesDialogController::GalleryPermissionsVector::
-       const_reverse_iterator iter = unattached_permissions.rbegin();
-       iter != unattached_permissions.rend(); iter++) {
-    const MediaGalleryPrefInfo* gallery = &iter->pref_info;
-    NSString* unique_id = GetUniqueIDForGallery(*gallery);
-    if ([[[checkbox cell] representedObject] isEqual:unique_id]) {
-      controller_->DidToggleGalleryId(gallery->pref_id,
-                                      [checkbox state] == NSOnState);
-      break;
-    }
-  }
-
+  [[[alert_ buttons] objectAtIndex:0] setEnabled:
+      controller_->IsAcceptAllowed()];
 }
 
 void MediaGalleriesDialogCocoa::UpdateGalleryCheckbox(
-    const MediaGalleryPrefInfo& gallery,
-    bool permitted,
+    const MediaGalleriesDialogController::GalleryPermission& gallery,
     CGFloat y_pos) {
   // Checkbox.
   base::scoped_nsobject<MediaGalleriesCheckbox> checkbox(
       [[MediaGalleriesCheckbox alloc] initWithFrame:NSZeroRect
                                              dialog:this
-                                             prefId:gallery.pref_id]);
-  NSString* unique_id = GetUniqueIDForGallery(gallery);
-  [[checkbox cell] setRepresentedObject:unique_id];
+                                          galleryId:gallery.gallery_id]);
+  NSNumber* gallery_id_object =
+      [NSNumber numberWithLongLong:gallery.gallery_id];
+  [[checkbox cell] setRepresentedObject:gallery_id_object];
   [[checkbox cell] setLineBreakMode:NSLineBreakByTruncatingMiddle];
   [checkbox setButtonType:NSSwitchButton];
   [checkbox setTarget:cocoa_controller_];
@@ -344,9 +295,10 @@
   [checkboxes_ addObject:checkbox];
 
   [checkbox setTitle:base::SysUTF16ToNSString(
-      gallery.GetGalleryDisplayName())];
-  [checkbox setToolTip:base::SysUTF16ToNSString(gallery.GetGalleryTooltip())];
-  [checkbox setState:permitted ? NSOnState : NSOffState];
+      gallery.pref_info.GetGalleryDisplayName())];
+  [checkbox setToolTip:base::SysUTF16ToNSString(
+      gallery.pref_info.GetGalleryTooltip())];
+  [checkbox setState:gallery.allowed ? NSOnState : NSOffState];
 
   [checkbox sizeToFit];
   NSRect rect = [checkbox bounds];
@@ -359,7 +311,8 @@
   [details setBezeled:NO];
   [details setAttributedStringValue:
       constrained_window::GetAttributedLabelString(
-          base::SysUTF16ToNSString(gallery.GetGalleryAdditionalDetails()),
+          base::SysUTF16ToNSString(
+              gallery.pref_info.GetGalleryAdditionalDetails()),
           chrome_style::kTextFontStyle,
           NSNaturalTextAlignment,
           NSLineBreakByClipping
@@ -395,8 +348,8 @@
 }
 
 ui::MenuModel* MediaGalleriesDialogCocoa::GetContextMenu(
-    MediaGalleryPrefId prefid) {
-  return controller_->GetContextMenu(prefid);
+    GalleryDialogId gallery_id) {
+  return controller_->GetContextMenu(gallery_id);
 }
 
 // static
diff --git a/chrome/browser/ui/cocoa/extensions/media_galleries_dialog_cocoa_unittest.mm b/chrome/browser/ui/cocoa/extensions/media_galleries_dialog_cocoa_unittest.mm
index 30e0e8a..b6a0f11 100644
--- a/chrome/browser/ui/cocoa/extensions/media_galleries_dialog_cocoa_unittest.mm
+++ b/chrome/browser/ui/cocoa/extensions/media_galleries_dialog_cocoa_unittest.mm
@@ -56,10 +56,10 @@
   MediaGalleriesDialogController::GalleryPermissionsVector attached_permissions;
   attached_permissions.push_back(
       MediaGalleriesDialogController::GalleryPermission(
-          MakePrefInfoForTesting(1), true));
+          1, MakePrefInfoForTesting(10), true));
   attached_permissions.push_back(
       MediaGalleriesDialogController::GalleryPermission(
-          MakePrefInfoForTesting(2), false));
+          2, MakePrefInfoForTesting(20), false));
   EXPECT_CALL(controller, AttachedPermissions()).
       WillRepeatedly(Return(attached_permissions));
 
@@ -69,7 +69,7 @@
       WillRepeatedly(Return(unattached_permissions));
 
   // Initializing checkboxes should not cause them to be toggled.
-  EXPECT_CALL(controller, DidToggleGalleryId(_, _)).
+  EXPECT_CALL(controller, DidToggleGallery(_, _)).
       Times(0);
 
   scoped_ptr<MediaGalleriesDialogCocoa> dialog(
@@ -91,7 +91,7 @@
   MediaGalleriesDialogController::GalleryPermissionsVector attached_permissions;
   attached_permissions.push_back(
       MediaGalleriesDialogController::GalleryPermission(
-          MakePrefInfoForTesting(1), true));
+          1, MakePrefInfoForTesting(10), true));
   EXPECT_CALL(controller, AttachedPermissions()).
       WillRepeatedly(Return(attached_permissions));
 
@@ -108,11 +108,11 @@
   NSButton* checkbox = [dialog->checkboxes_ objectAtIndex:0];
   EXPECT_EQ([checkbox state], NSOnState);
 
-  EXPECT_CALL(controller, DidToggleGalleryId(1, false));
+  EXPECT_CALL(controller, DidToggleGallery(1, false));
   [checkbox performClick:nil];
   EXPECT_EQ([checkbox state], NSOffState);
 
-  EXPECT_CALL(controller, DidToggleGalleryId(1, true));
+  EXPECT_CALL(controller, DidToggleGallery(1, true));
   [checkbox performClick:nil];
   EXPECT_EQ([checkbox state], NSOnState);
 }
@@ -140,7 +140,7 @@
 
   attached_permissions.push_back(
       MediaGalleriesDialogController::GalleryPermission(
-          MakePrefInfoForTesting(1), true));
+          1, MakePrefInfoForTesting(10), true));
   dialog->UpdateGalleries();
   EXPECT_EQ(1U, [dialog->checkboxes_ count]);
 
@@ -151,7 +151,7 @@
 
   attached_permissions.push_back(
       MediaGalleriesDialogController::GalleryPermission(
-          MakePrefInfoForTesting(2), true));
+          2, MakePrefInfoForTesting(20), true));
   dialog->UpdateGalleries();
   EXPECT_EQ(2U, [dialog->checkboxes_ count]);
 
@@ -188,11 +188,11 @@
   // Add a couple of galleries.
   attached_permissions.push_back(
       MediaGalleriesDialogController::GalleryPermission(
-          MakePrefInfoForTesting(1), true));
+          1, MakePrefInfoForTesting(10), true));
   dialog->UpdateGalleries();
   attached_permissions.push_back(
       MediaGalleriesDialogController::GalleryPermission(
-          MakePrefInfoForTesting(2), true));
+          2, MakePrefInfoForTesting(20), true));
   dialog->UpdateGalleries();
   EXPECT_EQ(2U, [dialog->checkboxes_ count]);
   CGFloat old_container_height = NSHeight([dialog->checkbox_container_ frame]);
diff --git a/chrome/browser/ui/cocoa/history_menu_bridge.h b/chrome/browser/ui/cocoa/history_menu_bridge.h
index a1be69b..f90094b 100644
--- a/chrome/browser/ui/cocoa/history_menu_bridge.h
+++ b/chrome/browser/ui/cocoa/history_menu_bridge.h
@@ -31,7 +31,7 @@
 class HistoryMenuBridgeTest;
 }
 
-namespace chrome {
+namespace favicon_base {
 struct FaviconImageResult;
 }
 
@@ -195,7 +195,7 @@
   // sets the image on the menu. Called on the same same thread that
   // GetFaviconForHistoryItem() was called on (UI thread).
   void GotFaviconData(HistoryItem* item,
-                      const chrome::FaviconImageResult& image_result);
+                      const favicon_base::FaviconImageResult& image_result);
 
   // Cancels a favicon load request for a given HistoryItem, if one is in
   // progress.
diff --git a/chrome/browser/ui/cocoa/history_menu_bridge.mm b/chrome/browser/ui/cocoa/history_menu_bridge.mm
index 3bae9db..3fd89b7 100644
--- a/chrome/browser/ui/cocoa/history_menu_bridge.mm
+++ b/chrome/browser/ui/cocoa/history_menu_bridge.mm
@@ -20,8 +20,8 @@
 #include "chrome/browser/sessions/session_types.h"
 #include "chrome/browser/sessions/tab_restore_service_factory.h"
 #import "chrome/browser/ui/cocoa/history_menu_cocoa_controller.h"
-#include "chrome/common/favicon/favicon_types.h"
 #include "chrome/common/url_constants.h"
+#include "components/favicon_base/favicon_types.h"
 #include "content/public/browser/notification_registrar.h"
 #include "content/public/browser/notification_source.h"
 #include "grit/generated_resources.h"
@@ -458,7 +458,7 @@
       FaviconServiceFactory::GetForProfile(profile_, Profile::EXPLICIT_ACCESS);
   base::CancelableTaskTracker::TaskId task_id = service->GetFaviconImageForURL(
       FaviconService::FaviconForURLParams(
-          item->url, chrome::FAVICON, gfx::kFaviconSize),
+          item->url, favicon_base::FAVICON, gfx::kFaviconSize),
       base::Bind(
           &HistoryMenuBridge::GotFaviconData, base::Unretained(this), item),
       &cancelable_task_tracker_);
@@ -468,7 +468,7 @@
 
 void HistoryMenuBridge::GotFaviconData(
     HistoryItem* item,
-    const chrome::FaviconImageResult& image_result) {
+    const favicon_base::FaviconImageResult& image_result) {
   // Since we're going to do Cocoa-y things, make sure this is the main thread.
   DCHECK([NSThread isMainThread]);
 
diff --git a/chrome/browser/ui/cocoa/history_menu_bridge_unittest.mm b/chrome/browser/ui/cocoa/history_menu_bridge_unittest.mm
index e226f25..ead2f46 100644
--- a/chrome/browser/ui/cocoa/history_menu_bridge_unittest.mm
+++ b/chrome/browser/ui/cocoa/history_menu_bridge_unittest.mm
@@ -15,8 +15,8 @@
 #include "chrome/browser/sessions/persistent_tab_restore_service.h"
 #include "chrome/browser/ui/cocoa/cocoa_profile_test.h"
 #include "chrome/browser/ui/cocoa/history_menu_bridge.h"
-#include "chrome/common/favicon/favicon_types.h"
 #include "chrome/test/base/testing_profile.h"
+#include "components/favicon_base/favicon_types.h"
 #include "components/sessions/serialized_navigation_entry_test_helper.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -107,9 +107,8 @@
     bridge_->GetFaviconForHistoryItem(item);
   }
 
-  void GotFaviconData(
-      HistoryMenuBridge::HistoryItem* item,
-      const chrome::FaviconImageResult& image_result) {
+  void GotFaviconData(HistoryMenuBridge::HistoryItem* item,
+                      const favicon_base::FaviconImageResult& image_result) {
     bridge_->GotFaviconData(item, image_result);
   }
 
@@ -354,7 +353,7 @@
   GetFaviconForHistoryItem(&item);
 
   // Pretend to be called back.
-  chrome::FaviconImageResult image_result;
+  favicon_base::FaviconImageResult image_result;
   image_result.image = gfx::Image::CreateFrom1xBitmap(bitmap);
   GotFaviconData(&item, image_result);
 
diff --git a/chrome/browser/ui/cocoa/infobars/alternate_nav_infobar_controller.mm b/chrome/browser/ui/cocoa/infobars/alternate_nav_infobar_controller.mm
index 2281b75..16e83e0 100644
--- a/chrome/browser/ui/cocoa/infobars/alternate_nav_infobar_controller.mm
+++ b/chrome/browser/ui/cocoa/infobars/alternate_nav_infobar_controller.mm
@@ -58,12 +58,12 @@
 @end
 
 // static
-scoped_ptr<InfoBar> AlternateNavInfoBarDelegate::CreateInfoBar(
+scoped_ptr<infobars::InfoBar> AlternateNavInfoBarDelegate::CreateInfoBar(
     scoped_ptr<AlternateNavInfoBarDelegate> delegate) {
   scoped_ptr<InfoBarCocoa> infobar(
-      new InfoBarCocoa(delegate.PassAs<InfoBarDelegate>()));
+      new InfoBarCocoa(delegate.PassAs<infobars::InfoBarDelegate>()));
   base::scoped_nsobject<AlternateNavInfoBarController> controller(
       [[AlternateNavInfoBarController alloc] initWithInfoBar:infobar.get()]);
   infobar->set_controller(controller);
-  return infobar.PassAs<InfoBar>();
+  return infobar.PassAs<infobars::InfoBar>();
 }
diff --git a/chrome/browser/ui/cocoa/infobars/confirm_infobar_controller.mm b/chrome/browser/ui/cocoa/infobars/confirm_infobar_controller.mm
index 6373d98..cb52a9c 100644
--- a/chrome/browser/ui/cocoa/infobars/confirm_infobar_controller.mm
+++ b/chrome/browser/ui/cocoa/infobars/confirm_infobar_controller.mm
@@ -138,12 +138,12 @@
 @end
 
 // static
-scoped_ptr<InfoBar> ConfirmInfoBarDelegate::CreateInfoBar(
+scoped_ptr<infobars::InfoBar> ConfirmInfoBarDelegate::CreateInfoBar(
     scoped_ptr<ConfirmInfoBarDelegate> delegate) {
   scoped_ptr<InfoBarCocoa> infobar(
-      new InfoBarCocoa(delegate.PassAs<InfoBarDelegate>()));
+      new InfoBarCocoa(delegate.PassAs<infobars::InfoBarDelegate>()));
   base::scoped_nsobject<ConfirmInfoBarController> controller(
       [[ConfirmInfoBarController alloc] initWithInfoBar:infobar.get()]);
   infobar->set_controller(controller);
-  return infobar.PassAs<InfoBar>();
+  return infobar.PassAs<infobars::InfoBar>();
 }
diff --git a/chrome/browser/ui/cocoa/infobars/confirm_infobar_controller_unittest.mm b/chrome/browser/ui/cocoa/infobars/confirm_infobar_controller_unittest.mm
index e7eb9d4..0291e8e 100644
--- a/chrome/browser/ui/cocoa/infobars/confirm_infobar_controller_unittest.mm
+++ b/chrome/browser/ui/cocoa/infobars/confirm_infobar_controller_unittest.mm
@@ -91,8 +91,8 @@
         WebContents::Create(WebContents::CreateParams(profile())));
    InfoBarService::CreateForWebContents(web_contents_.get());
 
-    scoped_ptr<InfoBarDelegate> delegate(
-        new MockConfirmInfoBarDelegate(this));
+   scoped_ptr<infobars::InfoBarDelegate> delegate(
+       new MockConfirmInfoBarDelegate(this));
     infobar_ = new InfoBarCocoa(delegate.Pass());
     infobar_->SetOwner(InfoBarService::FromWebContents(web_contents_.get()));
 
diff --git a/chrome/browser/ui/cocoa/infobars/extension_infobar_controller.mm b/chrome/browser/ui/cocoa/infobars/extension_infobar_controller.mm
index c1f15c5..496478d 100644
--- a/chrome/browser/ui/cocoa/infobars/extension_infobar_controller.mm
+++ b/chrome/browser/ui/cocoa/infobars/extension_infobar_controller.mm
@@ -260,12 +260,12 @@
 @end
 
 // static
-scoped_ptr<InfoBar> ExtensionInfoBarDelegate::CreateInfoBar(
+scoped_ptr<infobars::InfoBar> ExtensionInfoBarDelegate::CreateInfoBar(
     scoped_ptr<ExtensionInfoBarDelegate> delegate) {
   scoped_ptr<InfoBarCocoa> infobar(
-      new InfoBarCocoa(delegate.PassAs<InfoBarDelegate>()));
+      new InfoBarCocoa(delegate.PassAs<infobars::InfoBarDelegate>()));
   base::scoped_nsobject<ExtensionInfoBarController> controller(
       [[ExtensionInfoBarController alloc] initWithInfoBar:infobar.get()]);
   infobar->set_controller(controller);
-  return infobar.PassAs<InfoBar>();
+  return infobar.PassAs<infobars::InfoBar>();
 }
diff --git a/chrome/browser/ui/cocoa/infobars/infobar_cocoa.h b/chrome/browser/ui/cocoa/infobars/infobar_cocoa.h
index 033400b..14f563d 100644
--- a/chrome/browser/ui/cocoa/infobars/infobar_cocoa.h
+++ b/chrome/browser/ui/cocoa/infobars/infobar_cocoa.h
@@ -7,15 +7,15 @@
 
 #include "base/mac/scoped_nsobject.h"
 #include "base/memory/weak_ptr.h"
-#include "chrome/browser/infobars/infobar.h"
+#include "components/infobars/core/infobar.h"
 
 @class InfoBarController;
 
 // The cocoa specific implementation of InfoBar. The real info bar logic is
 // actually in InfoBarController.
-class InfoBarCocoa : public InfoBar {
+class InfoBarCocoa : public infobars::InfoBar {
  public:
-  explicit InfoBarCocoa(scoped_ptr<InfoBarDelegate> delegate);
+  explicit InfoBarCocoa(scoped_ptr<infobars::InfoBarDelegate> delegate);
 
   virtual ~InfoBarCocoa();
 
@@ -26,7 +26,7 @@
   }
 
   // These functions allow access to protected InfoBar functions.
-  InfoBarManager* OwnerCocoa();
+  infobars::InfoBarManager* OwnerCocoa();
 
   base::WeakPtr<InfoBarCocoa> GetWeakPtr();
 
diff --git a/chrome/browser/ui/cocoa/infobars/infobar_cocoa.mm b/chrome/browser/ui/cocoa/infobars/infobar_cocoa.mm
index 7ba03e5..dd25e54 100644
--- a/chrome/browser/ui/cocoa/infobars/infobar_cocoa.mm
+++ b/chrome/browser/ui/cocoa/infobars/infobar_cocoa.mm
@@ -6,15 +6,16 @@
 
 #import "chrome/browser/ui/cocoa/infobars/infobar_controller.h"
 
-const int InfoBar::kSeparatorLineHeight = 1;
-const int InfoBar::kDefaultArrowTargetHeight = 11;
-const int InfoBar::kMaximumArrowTargetHeight = 24;
-const int InfoBar::kDefaultArrowTargetHalfWidth = kDefaultArrowTargetHeight;
-const int InfoBar::kMaximumArrowTargetHalfWidth = 14;
-const int InfoBar::kDefaultBarTargetHeight = 36;
+const int infobars::InfoBar::kSeparatorLineHeight = 1;
+const int infobars::InfoBar::kDefaultArrowTargetHeight = 11;
+const int infobars::InfoBar::kMaximumArrowTargetHeight = 24;
+const int infobars::InfoBar::kDefaultArrowTargetHalfWidth =
+    kDefaultArrowTargetHeight;
+const int infobars::InfoBar::kMaximumArrowTargetHalfWidth = 14;
+const int infobars::InfoBar::kDefaultBarTargetHeight = 36;
 
-InfoBarCocoa::InfoBarCocoa(scoped_ptr<InfoBarDelegate> delegate)
-    : InfoBar(delegate.Pass()),
+InfoBarCocoa::InfoBarCocoa(scoped_ptr<infobars::InfoBarDelegate> delegate)
+    : infobars::InfoBar(delegate.Pass()),
       weak_ptr_factory_(this) {
 }
 
@@ -23,9 +24,7 @@
     [controller() infobarWillClose];
 }
 
-InfoBarManager* InfoBarCocoa::OwnerCocoa() {
-  return owner();
-}
+infobars::InfoBarManager* InfoBarCocoa::OwnerCocoa() { return owner(); }
 
 base::WeakPtr<InfoBarCocoa> InfoBarCocoa::GetWeakPtr() {
   return weak_ptr_factory_.GetWeakPtr();
diff --git a/chrome/browser/ui/cocoa/infobars/infobar_container_cocoa.h b/chrome/browser/ui/cocoa/infobars/infobar_container_cocoa.h
index fe65762..5d37f37 100644
--- a/chrome/browser/ui/cocoa/infobars/infobar_container_cocoa.h
+++ b/chrome/browser/ui/cocoa/infobars/infobar_container_cocoa.h
@@ -5,23 +5,24 @@
 #ifndef CHROME_BROWSER_UI_COCOA_INFOBARS_INFOBAR_CONTAINER_COCOA_H_
 #define CHROME_BROWSER_UI_COCOA_INFOBARS_INFOBAR_CONTAINER_COCOA_H_
 
-#include "chrome/browser/infobars/infobar_container.h"
+#include "components/infobars/core/infobar_container.h"
 
 @class InfoBarContainerController;
 
 // The cocoa specific implementation of InfoBarContainer. This mostly serves as
 // a bridge for InfoBarContainerController.
-class InfoBarContainerCocoa : public InfoBarContainer,
-                              public InfoBarContainer::Delegate {
+class InfoBarContainerCocoa : public infobars::InfoBarContainer,
+                              public infobars::InfoBarContainer::Delegate {
  public:
   explicit InfoBarContainerCocoa(InfoBarContainerController* controller);
   virtual ~InfoBarContainerCocoa();
 
  private:
   // InfoBarContainer:
-  virtual void PlatformSpecificAddInfoBar(InfoBar* infobar,
+  virtual void PlatformSpecificAddInfoBar(infobars::InfoBar* infobar,
                                           size_t position) OVERRIDE;
-  virtual void PlatformSpecificRemoveInfoBar(InfoBar* infobar) OVERRIDE;
+  virtual void PlatformSpecificRemoveInfoBar(
+      infobars::InfoBar* infobar) OVERRIDE;
 
   // InfoBarContainer::Delegate:
   virtual SkColor GetInfoBarSeparatorColor() const OVERRIDE;
diff --git a/chrome/browser/ui/cocoa/infobars/infobar_container_cocoa.mm b/chrome/browser/ui/cocoa/infobars/infobar_container_cocoa.mm
index 969b18e..cd9c907 100644
--- a/chrome/browser/ui/cocoa/infobars/infobar_container_cocoa.mm
+++ b/chrome/browser/ui/cocoa/infobars/infobar_container_cocoa.mm
@@ -9,7 +9,7 @@
 
 InfoBarContainerCocoa::InfoBarContainerCocoa(
     InfoBarContainerController* controller)
-    : InfoBarContainer(this),
+    : infobars::InfoBarContainer(this),
       controller_(controller) {
 }
 
@@ -17,13 +17,15 @@
   RemoveAllInfoBarsForDestruction();
 }
 
-void InfoBarContainerCocoa::PlatformSpecificAddInfoBar(InfoBar* infobar,
-                                                       size_t position) {
+void InfoBarContainerCocoa::PlatformSpecificAddInfoBar(
+    infobars::InfoBar* infobar,
+    size_t position) {
   InfoBarCocoa* infobar_cocoa = static_cast<InfoBarCocoa*>(infobar);
   [controller_ addInfoBar:infobar_cocoa position:position];
 }
 
-void InfoBarContainerCocoa::PlatformSpecificRemoveInfoBar(InfoBar* infobar) {
+void InfoBarContainerCocoa::PlatformSpecificRemoveInfoBar(
+    infobars::InfoBar* infobar) {
   InfoBarCocoa* infobar_cocoa = static_cast<InfoBarCocoa*>(infobar);
   [controller_ removeInfoBar:infobar_cocoa];
 }
diff --git a/chrome/browser/ui/cocoa/infobars/infobar_container_controller.h b/chrome/browser/ui/cocoa/infobars/infobar_container_controller.h
index d8044c5..5943144 100644
--- a/chrome/browser/ui/cocoa/infobars/infobar_container_controller.h
+++ b/chrome/browser/ui/cocoa/infobars/infobar_container_controller.h
@@ -15,13 +15,16 @@
 @class InfoBarController;
 class InfoBarCocoa;
 class InfoBarContainerCocoa;
-class InfoBarDelegate;
 class TabStripModel;
 
 namespace content {
 class WebContents;
 }
 
+namespace infobars {
+class InfoBarDelegate;
+}
+
 // Protocol for basic container methods, as needed by an InfoBarController.
 // This protocol exists to make mocking easier in unittests.
 @protocol InfoBarContainerControllerBase
diff --git a/chrome/browser/ui/cocoa/infobars/infobar_container_controller.mm b/chrome/browser/ui/cocoa/infobars/infobar_container_controller.mm
index b5e7aed..bebd178 100644
--- a/chrome/browser/ui/cocoa/infobars/infobar_container_controller.mm
+++ b/chrome/browser/ui/cocoa/infobars/infobar_container_controller.mm
@@ -7,8 +7,6 @@
 #include "base/logging.h"
 #include "base/mac/mac_util.h"
 #include "chrome/browser/infobars/confirm_infobar_delegate.h"
-#include "chrome/browser/infobars/infobar.h"
-#include "chrome/browser/infobars/infobar_container.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #import "chrome/browser/ui/cocoa/browser_window_controller.h"
 #import "chrome/browser/ui/cocoa/infobars/infobar_cocoa.h"
@@ -16,6 +14,8 @@
 #import "chrome/browser/ui/cocoa/infobars/infobar_controller.h"
 #import "chrome/browser/ui/cocoa/location_bar/location_bar_view_mac.h"
 #import "chrome/browser/ui/cocoa/view_id_util.h"
+#include "components/infobars/core/infobar.h"
+#include "components/infobars/core/infobar_container.h"
 
 @interface InfoBarContainerController ()
 // Removes |controller| from the list of controllers in this container and
diff --git a/chrome/browser/ui/cocoa/infobars/infobar_container_controller_unittest.mm b/chrome/browser/ui/cocoa/infobars/infobar_container_controller_unittest.mm
index 52b2412..967ddbe 100644
--- a/chrome/browser/ui/cocoa/infobars/infobar_container_controller_unittest.mm
+++ b/chrome/browser/ui/cocoa/infobars/infobar_container_controller_unittest.mm
@@ -60,7 +60,7 @@
 TEST_F(InfoBarContainerControllerTest, AddAndRemoveInfoBars) {
   NSView* view = [controller_ view];
 
-  scoped_ptr<InfoBarDelegate> confirm_delegate(
+  scoped_ptr<infobars::InfoBarDelegate> confirm_delegate(
       new MockConfirmInfoBarDelegate(NULL));
   scoped_ptr<InfoBarCocoa> infobar(new InfoBarCocoa(confirm_delegate.Pass()));
   base::scoped_nsobject<ConfirmInfoBarController> controller(
diff --git a/chrome/browser/ui/cocoa/infobars/infobar_controller.h b/chrome/browser/ui/cocoa/infobars/infobar_controller.h
index 7755dab..ae45879 100644
--- a/chrome/browser/ui/cocoa/infobars/infobar_controller.h
+++ b/chrome/browser/ui/cocoa/infobars/infobar_controller.h
@@ -9,10 +9,13 @@
 
 @protocol InfoBarContainerControllerBase;
 class InfoBarCocoa;
-class InfoBarDelegate;
 class InfoBarService;
 @class InfoBarGradientView;
 
+namespace infobars {
+class InfoBarDelegate;
+}
+
 // A controller for an infobar in the browser window.  There is one
 // controller per infobar view.  The base InfoBarController is able to
 // draw an icon, a text message, and a close button.  Subclasses can
@@ -39,7 +42,7 @@
 
 @property(nonatomic, assign)
     id<InfoBarContainerControllerBase> containerController;
-@property(nonatomic, readonly) InfoBarDelegate* delegate;
+@property(nonatomic, readonly) infobars::InfoBarDelegate* delegate;
 @property(nonatomic, readonly) InfoBarCocoa* infobar;
 
 // Initializes a new InfoBarController and takes a WeakPtr to |infobar|.
diff --git a/chrome/browser/ui/cocoa/infobars/infobar_controller.mm b/chrome/browser/ui/cocoa/infobars/infobar_controller.mm
index 755b8aa..80cc4a2 100644
--- a/chrome/browser/ui/cocoa/infobars/infobar_controller.mm
+++ b/chrome/browser/ui/cocoa/infobars/infobar_controller.mm
@@ -162,7 +162,7 @@
   }
 }
 
-- (InfoBarDelegate*)delegate {
+- (infobars::InfoBarDelegate*)delegate {
   return infobar_->delegate();
 }
 
diff --git a/chrome/browser/ui/cocoa/infobars/infobar_gradient_view.h b/chrome/browser/ui/cocoa/infobars/infobar_gradient_view.h
index f78ec6a..4621f4f 100644
--- a/chrome/browser/ui/cocoa/infobars/infobar_gradient_view.h
+++ b/chrome/browser/ui/cocoa/infobars/infobar_gradient_view.h
@@ -5,8 +5,8 @@
 #ifndef CHROME_BROWSER_UI_COCOA_INFOBARS_INFOBAR_GRADIENT_VIEW_H_
 #define CHROME_BROWSER_UI_COCOA_INFOBARS_INFOBAR_GRADIENT_VIEW_H_
 
-#include "chrome/browser/infobars/infobar_delegate.h"
 #import "chrome/browser/ui/cocoa/vertical_gradient_view.h"
+#include "components/infobars/core/infobar_delegate.h"
 
 #import <Cocoa/Cocoa.h>
 
@@ -25,7 +25,7 @@
 @property(assign, nonatomic) BOOL hasTip;
 
 // Sets the infobar type. This will change the view's gradient.
-- (void)setInfobarType:(InfoBarDelegate::Type)infobarType;
+- (void)setInfobarType:(infobars::InfoBarDelegate::Type)infobarType;
 
 @end
 
diff --git a/chrome/browser/ui/cocoa/infobars/infobar_gradient_view.mm b/chrome/browser/ui/cocoa/infobars/infobar_gradient_view.mm
index 4b0c70b..e96d567 100644
--- a/chrome/browser/ui/cocoa/infobars/infobar_gradient_view.mm
+++ b/chrome/browser/ui/cocoa/infobars/infobar_gradient_view.mm
@@ -5,13 +5,13 @@
 #include "chrome/browser/ui/cocoa/infobars/infobar_gradient_view.h"
 
 #include "base/mac/scoped_nsobject.h"
-#include "chrome/browser/infobars/infobar.h"
 #import "chrome/browser/themes/theme_properties.h"
 #import "chrome/browser/ui/cocoa/browser_window_controller.h"
 #import "chrome/browser/ui/cocoa/infobars/infobar_container_controller.h"
 #import "chrome/browser/ui/cocoa/location_bar/location_bar_view_mac.h"
 #import "chrome/browser/ui/cocoa/nsview_additions.h"
 #import "chrome/browser/ui/cocoa/themed_window.h"
+#include "components/infobars/core/infobar.h"
 #include "skia/ext/skia_utils_mac.h"
 #include "ui/base/theme_provider.h"
 
@@ -36,9 +36,9 @@
   return self;
 }
 
-- (void)setInfobarType:(InfoBarDelegate::Type)infobarType {
-  SkColor topColor = InfoBar::GetTopColor(infobarType);
-  SkColor bottomColor = InfoBar::GetBottomColor(infobarType);
+- (void)setInfobarType:(infobars::InfoBarDelegate::Type)infobarType {
+  SkColor topColor = infobars::InfoBar::GetTopColor(infobarType);
+  SkColor bottomColor = infobars::InfoBar::GetBottomColor(infobarType);
   base::scoped_nsobject<NSGradient> gradient([[NSGradient alloc]
       initWithStartingColor:gfx::SkColorToCalibratedNSColor(topColor)
                 endingColor:gfx::SkColorToCalibratedNSColor(bottomColor)]);
@@ -58,7 +58,7 @@
 
 - (void)drawRect:(NSRect)rect {
   NSRect bounds = [self bounds];
-  bounds.size.height = InfoBar::kDefaultBarTargetHeight;
+  bounds.size.height = infobars::InfoBar::kDefaultBarTargetHeight;
 
   CGFloat tipXOffset = arrowX_ - arrowHalfWidth_;
 
diff --git a/chrome/browser/ui/cocoa/infobars/infobar_utilities.mm b/chrome/browser/ui/cocoa/infobars/infobar_utilities.mm
index 6a9d1bc..aeec574 100644
--- a/chrome/browser/ui/cocoa/infobars/infobar_utilities.mm
+++ b/chrome/browser/ui/cocoa/infobars/infobar_utilities.mm
@@ -5,10 +5,10 @@
 #import "chrome/browser/ui/cocoa/infobars/infobar_utilities.h"
 
 #include "base/mac/scoped_nsobject.h"
-#import "chrome/browser/infobars/infobar.h"
 #import "chrome/browser/ui/cocoa/infobars/infobar_container_controller.h"
 #import "chrome/browser/ui/cocoa/infobars/infobar_gradient_view.h"
 #import "chrome/browser/ui/cocoa/nsview_additions.h"
+#import "components/infobars/core/infobar.h"
 
 @interface InfobarLabelTextField : NSTextField
 @end
@@ -66,7 +66,7 @@
   // rather than in the total height (which includes the bulge).
   CGFloat superHeight = NSHeight(superViewFrame);
   if ([[toMove superview] isKindOfClass:[InfoBarGradientView class]])
-    superHeight = InfoBar::kDefaultBarTargetHeight;
+    superHeight = infobars::InfoBar::kDefaultBarTargetHeight;
   viewFrame.origin.y =
       floor((superHeight - NSHeight(viewFrame)) / 2.0);
   [toMove setFrame:viewFrame];
diff --git a/chrome/browser/ui/cocoa/infobars/translate_infobar_base.mm b/chrome/browser/ui/cocoa/infobars/translate_infobar_base.mm
index 5f3ca0b..dc2797a 100644
--- a/chrome/browser/ui/cocoa/infobars/translate_infobar_base.mm
+++ b/chrome/browser/ui/cocoa/infobars/translate_infobar_base.mm
@@ -28,10 +28,10 @@
 using InfoBarUtilities::AddMenuItem;
 
 // static
-scoped_ptr<InfoBar> TranslateInfoBarDelegate::CreateInfoBar(
+scoped_ptr<infobars::InfoBar> TranslateInfoBarDelegate::CreateInfoBar(
     scoped_ptr<TranslateInfoBarDelegate> delegate) {
   scoped_ptr<InfoBarCocoa> infobar(
-      new InfoBarCocoa(delegate.PassAs<InfoBarDelegate>()));
+      new InfoBarCocoa(delegate.PassAs<infobars::InfoBarDelegate>()));
   base::scoped_nsobject<TranslateInfoBarControllerBase> infobar_controller;
   switch (infobar->delegate()->AsTranslateInfoBarDelegate()->translate_step()) {
     case translate::TRANSLATE_STEP_BEFORE_TRANSLATE:
@@ -51,7 +51,7 @@
       NOTREACHED();
   }
   infobar->set_controller(infobar_controller);
-  return infobar.PassAs<InfoBar>();
+  return infobar.PassAs<infobars::InfoBar>();
 }
 
 @implementation TranslateInfoBarControllerBase (FrameChangeObserver)
diff --git a/chrome/browser/ui/cocoa/infobars/translate_infobar_unittest.mm b/chrome/browser/ui/cocoa/infobars/translate_infobar_unittest.mm
index 13b85db..e405c65 100644
--- a/chrome/browser/ui/cocoa/infobars/translate_infobar_unittest.mm
+++ b/chrome/browser/ui/cocoa/infobars/translate_infobar_unittest.mm
@@ -99,7 +99,7 @@
     scoped_ptr<TranslateInfoBarDelegate> delegate(
         new MockTranslateInfoBarDelegate(web_contents_.get(), type, error,
                                          profile->GetPrefs()));
-    scoped_ptr<InfoBar> infobar(
+    scoped_ptr<infobars::InfoBar> infobar(
         TranslateInfoBarDelegate::CreateInfoBar(delegate.Pass()));
     if (infobar_)
       infobar_->CloseSoon();
diff --git a/chrome/browser/ui/cocoa/keystone_infobar_delegate.mm b/chrome/browser/ui/cocoa/keystone_infobar_delegate.mm
index 82f9f48..e12e8d9 100644
--- a/chrome/browser/ui/cocoa/keystone_infobar_delegate.mm
+++ b/chrome/browser/ui/cocoa/keystone_infobar_delegate.mm
@@ -15,7 +15,6 @@
 #include "base/prefs/pref_service.h"
 #include "chrome/browser/first_run/first_run.h"
 #include "chrome/browser/infobars/confirm_infobar_delegate.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #import "chrome/browser/mac/keystone_glue.h"
 #include "chrome/browser/profiles/profile.h"
@@ -24,6 +23,7 @@
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/common/chrome_switches.h"
 #include "chrome/common/pref_names.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/web_contents.h"
 #include "grit/chromium_strings.h"
 #include "grit/generated_resources.h"
diff --git a/chrome/browser/ui/cocoa/location_bar/location_bar_view_mac.mm b/chrome/browser/ui/cocoa/location_bar/location_bar_view_mac.mm
index edd90f6..f70f7d9 100644
--- a/chrome/browser/ui/cocoa/location_bar/location_bar_view_mac.mm
+++ b/chrome/browser/ui/cocoa/location_bar/location_bar_view_mac.mm
@@ -148,7 +148,8 @@
   content::Source<Profile> profile_source = content::Source<Profile>(profile);
   registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOCATION_BAR_UPDATED,
                  profile_source);
-  registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED, profile_source);
+  registrar_.Add(
+      this, chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED, profile_source);
   registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
                  profile_source);
 
@@ -630,7 +631,7 @@
       break;
     }
 
-    case chrome::NOTIFICATION_EXTENSION_LOADED:
+    case chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED:
     case chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED:
       Update(NULL);
       break;
diff --git a/chrome/browser/ui/cocoa/profiles/avatar_base_controller.mm b/chrome/browser/ui/cocoa/profiles/avatar_base_controller.mm
index e77db1b..f25ad98 100644
--- a/chrome/browser/ui/cocoa/profiles/avatar_base_controller.mm
+++ b/chrome/browser/ui/cocoa/profiles/avatar_base_controller.mm
@@ -17,7 +17,7 @@
 #import "chrome/browser/ui/cocoa/browser_window_controller.h"
 #import "chrome/browser/ui/cocoa/profiles/avatar_menu_bubble_controller.h"
 #import "chrome/browser/ui/cocoa/profiles/profile_chooser_controller.h"
-#include "chrome/common/profile_management_switches.h"
+#include "components/signin/core/common/profile_management_switches.h"
 #include "ui/base/resource/resource_bundle.h"
 
 // Space between the avatar icon and the avatar menu bubble.
@@ -113,15 +113,15 @@
 
   // The new avatar bubble does not have an arrow, and it should be anchored
   // to the edge of the avatar button.
-  int anchorX = switches::IsNewProfileManagement() ? NSMaxX([anchor bounds]) :
-                                                     NSMidX([anchor bounds]);
+  int anchorX = switches::IsNewAvatarMenu() ? NSMaxX([anchor bounds]) :
+                                              NSMidX([anchor bounds]);
   NSPoint point = NSMakePoint(anchorX,
                               NSMaxY([anchor bounds]) - kMenuYOffsetAdjust);
   point = [anchor convertPoint:point toView:nil];
   point = [[anchor window] convertBaseToScreen:point];
 
   // |menuController_| will automatically release itself on close.
-  if (switches::IsNewProfileManagement()) {
+  if (switches::IsNewAvatarMenu()) {
     BubbleViewMode viewMode =
         mode == BrowserWindow::AVATAR_BUBBLE_MODE_DEFAULT ?
         BUBBLE_VIEW_MODE_PROFILE_CHOOSER :
diff --git a/chrome/browser/ui/cocoa/profiles/avatar_icon_controller.mm b/chrome/browser/ui/cocoa/profiles/avatar_icon_controller.mm
index 3dfe59e..a35b801 100644
--- a/chrome/browser/ui/cocoa/profiles/avatar_icon_controller.mm
+++ b/chrome/browser/ui/cocoa/profiles/avatar_icon_controller.mm
@@ -13,6 +13,7 @@
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_window.h"
 #import "chrome/browser/ui/cocoa/browser_window_controller.h"
+#import "chrome/browser/ui/cocoa/nsview_additions.h"
 #import "chrome/browser/ui/cocoa/profiles/avatar_label_button.h"
 #include "grit/generated_resources.h"
 #include "grit/theme_resources.h"
@@ -59,6 +60,7 @@
     base::scoped_nsobject<NSView> container(
         [[NSView alloc] initWithFrame:NSMakeRect(
             0, 0, profiles::kAvatarIconWidth, profiles::kAvatarIconHeight)]);
+    [container cr_setWantsLayer:YES];
     [self setView:container];
 
     button_.reset([[NSButton alloc] initWithFrame:NSMakeRect(
@@ -99,8 +101,8 @@
     Profile* profile = browser_->profile();
 
     if (profile->IsOffTheRecord() || profile->IsGuestSession()) {
-      const int icon_id = profile->IsGuestSession() ? IDR_LOGIN_GUEST :
-                                                      IDR_OTR_ICON;
+      const int icon_id = profile->IsGuestSession() ?
+          profiles::GetPlaceholderAvatarIconResourceID() : IDR_OTR_ICON;
       NSImage* icon = ResourceBundle::GetSharedInstance().GetNativeImageNamed(
           icon_id).ToNSImage();
       [self setImage:[self compositeImageWithShadow:icon]];
diff --git a/chrome/browser/ui/cocoa/profiles/profile_chooser_controller.h b/chrome/browser/ui/cocoa/profiles/profile_chooser_controller.h
index 8fc631b..b3e3150 100644
--- a/chrome/browser/ui/cocoa/profiles/profile_chooser_controller.h
+++ b/chrome/browser/ui/cocoa/profiles/profile_chooser_controller.h
@@ -92,11 +92,17 @@
 // Shows the account management view.
 - (IBAction)showAccountManagement:(id)sender;
 
+// Hides the account management view and shows the default view.
+- (IBAction)hideAccountManagement:(id)sender;
+
 // Locks the active profile.
 - (IBAction)lockProfile:(id)sender;
 
-// Shows the signin page.
-- (IBAction)showSigninPage:(id)sender;
+// Shows the inline signin page.
+- (IBAction)showInlineSigninPage:(id)sender;
+
+// Shows the signin tab in the browser.
+- (IBAction)showTabbedSigninPage:(id)sender;
 
 // Adds an account to the active profile.
 - (IBAction)addAccount:(id)sender;
diff --git a/chrome/browser/ui/cocoa/profiles/profile_chooser_controller.mm b/chrome/browser/ui/cocoa/profiles/profile_chooser_controller.mm
index f92c6c7..2819622 100644
--- a/chrome/browser/ui/cocoa/profiles/profile_chooser_controller.mm
+++ b/chrome/browser/ui/cocoa/profiles/profile_chooser_controller.mm
@@ -35,8 +35,8 @@
 #import "chrome/browser/ui/cocoa/profiles/user_manager_mac.h"
 #include "chrome/browser/ui/singleton_tabs.h"
 #include "chrome/common/pref_names.h"
-#include "chrome/common/profile_management_switches.h"
 #include "chrome/common/url_constants.h"
+#include "components/signin/core/common/profile_management_switches.h"
 #include "components/signin/core/browser/mutable_profile_oauth2_token_service.h"
 #include "components/signin/core/browser/profile_oauth2_token_service.h"
 #include "components/signin/core/browser/signin_manager.h"
@@ -65,13 +65,13 @@
 
 // Constants taken from the Windows/Views implementation at:
 // chrome/browser/ui/views/profile_chooser_view.cc
-const int kLargeImageSide = 64;
+const int kLargeImageSide = 88;
 const int kSmallImageSide = 32;
 const CGFloat kFixedMenuWidth = 250;
 
-const CGFloat kVerticalSpacing = 20.0;
+const CGFloat kVerticalSpacing = 16.0;
 const CGFloat kSmallVerticalSpacing = 10.0;
-const CGFloat kHorizontalSpacing = 20.0;
+const CGFloat kHorizontalSpacing = 16.0;
 const CGFloat kTitleFontSize = 15.0;
 const CGFloat kTextFontSize = 12.0;
 const CGFloat kProfileButtonHeight = 30;
@@ -94,7 +94,7 @@
 const int kPrimaryProfileTag = -1;
 
 gfx::Image CreateProfileImage(const gfx::Image& icon, int imageSize) {
-  return profiles::GetSizedAvatarIconWithBorder(
+  return profiles::GetSizedAvatarIcon(
       icon, true /* image is a square */,
       imageSize + profiles::kAvatarIconPadding,
       imageSize + profiles::kAvatarIconPadding);
@@ -134,11 +134,11 @@
   [label setFrameOrigin:frame_origin];
   [label sizeToFit];
 
-  if (background_color) {
-    DCHECK(text_color);
+  if (background_color)
     [[label cell] setBackgroundColor:background_color];
+  if (text_color)
     [[label cell] setTextColor:text_color];
-  }
+
   return label.autorelease();
 }
 
@@ -156,7 +156,9 @@
       [[HyperlinkTextView alloc] initWithFrame:NSZeroRect]);
   NSColor* link_color = gfx::SkColorToCalibratedNSColor(
       chrome_style::GetLinkColor());
-  [text_view setMessageAndLink:message
+  // Adds a padding row at the bottom, because |boundingRectWithSize| below cuts
+  // off the last row sometimes.
+  [text_view setMessageAndLink:[NSString stringWithFormat:@"%@\n", message]
                       withLink:link
                       atOffset:link_offset
                           font:[NSFont labelFontOfSize:kTextFontSize]
@@ -180,6 +182,13 @@
   return text_view.autorelease();
 }
 
+// Returns the native dialog background color.
+NSColor* GetDialogBackgroundColor() {
+  return gfx::SkColorToCalibratedNSColor(
+      ui::NativeTheme::instance()->GetSystemColor(
+          ui::NativeTheme::kColorId_DialogBackground));
+}
+
 // Builds a title card with one back button right aligned and one label center
 // aligned.
 NSView* BuildTitleCard(NSRect frame_rect,
@@ -203,12 +212,14 @@
 
   NSTextField* title_label =
       BuildLabel(l10n_util::GetNSString(message_id), NSZeroPoint,
-                 nil /* background_color */, nil /* text_color */);
+                 GetDialogBackgroundColor(), nil /* text_color */);
   [title_label setAlignment:NSCenterTextAlignment];
   [title_label setFont:[NSFont labelFontOfSize:kTitleFontSize]];
   [title_label sizeToFit];
   CGFloat x_offset = (frame_rect.size.width - NSWidth([title_label frame])) / 2;
-  [title_label setFrameOrigin:NSMakePoint(x_offset, 0)];
+  CGFloat y_offset =
+      (NSHeight([button frame]) - NSHeight([title_label frame])) / 2;
+  [title_label setFrameOrigin:NSMakePoint(x_offset, y_offset)];
 
   [container addSubview:button];
   [container addSubview:title_label];
@@ -472,15 +483,20 @@
 
     [self setBordered:NO];
     [self setFont:[NSFont labelFontOfSize:kTitleFontSize]];
-    [self setAlignment:NSLeftTextAlignment];
+    [self setAlignment:NSCenterTextAlignment];
     [[self cell] setLineBreakMode:NSLineBreakByTruncatingTail];
     [self setTitle:profileName];
 
     if (editingAllowed) {
-      // Show an "edit" pencil icon when hovering over.
+      // Show an "edit" pencil icon when hovering over. In the default state,
+      // we need to create an empty placeholder of the correct size, so that
+      // the text doesn't jump around when the hovered icon appears.
       ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance();
-      [self setHoverImage:
-          rb->GetNativeImageNamed(IDR_ICON_PROFILES_EDIT_HOVER).AsNSImage()];
+      NSImage* hoverImage = rb->GetNativeImageNamed(
+          IDR_ICON_PROFILES_EDIT_HOVER).AsNSImage();
+      NSImage* placeholder = [[NSImage alloc] initWithSize:[hoverImage size]];
+      [self setDefaultImage:placeholder];
+      [self setHoverImage:hoverImage];
       [self setAlternateImage:
           rb->GetNativeImageNamed(IDR_ICON_PROFILES_EDIT_PRESSED).AsNSImage()];
       [self setImagePosition:NSImageRight];
@@ -498,6 +514,7 @@
       [profileNameTextField_ setEditable:YES];
       [profileNameTextField_ setDrawsBackground:YES];
       [profileNameTextField_ setBezeled:YES];
+      [profileNameTextField_ setAlignment:NSCenterTextAlignment];
       [[profileNameTextField_ cell] setWraps:NO];
       [[profileNameTextField_ cell] setLineBreakMode:
           NSLineBreakByTruncatingTail];
@@ -581,12 +598,24 @@
 @end
 
 // A custom button that allows for setting a background color when hovered over.
-@interface BackgroundColorHoverButton : HoverImageButton
+@interface BackgroundColorHoverButton : HoverImageButton {
+ @private
+  base::scoped_nsobject<NSColor> backgroundColor_;
+  base::scoped_nsobject<NSColor> hoverColor_;
+}
 @end
 
 @implementation BackgroundColorHoverButton
-- (id)initWithFrame:(NSRect)frameRect {
+
+- (id)initWithFrame:(NSRect)frameRect
+  imageTitleSpacing:(int)imageTitleSpacing
+    backgroundColor:(NSColor*)backgroundColor {
   if ((self = [super initWithFrame:frameRect])) {
+    backgroundColor_.reset([backgroundColor retain]);
+    hoverColor_.reset([gfx::SkColorToCalibratedNSColor(
+        ui::NativeTheme::instance()->GetSystemColor(
+            ui::NativeTheme::kColorId_ButtonHoverBackgroundColor)) retain]);
+
     [self setBordered:NO];
     [self setFont:[NSFont labelFontOfSize:kTextFontSize]];
     [self setButtonType:NSMomentaryChangeButton];
@@ -594,7 +623,7 @@
     base::scoped_nsobject<CustomPaddingImageButtonCell> cell(
         [[CustomPaddingImageButtonCell alloc]
             initWithLeftMarginSpacing:kHorizontalSpacing
-                    imageTitleSpacing:kImageTitleSpacing]);
+                    imageTitleSpacing:imageTitleSpacing]);
     [cell setLineBreakMode:NSLineBreakByTruncatingTail];
     [self setCell:cell.get()];
   }
@@ -605,11 +634,7 @@
   [super setHoverState:state];
   bool isHighlighted = ([self hoverState] != kHoverStateNone);
 
-  NSColor* backgroundColor = gfx::SkColorToCalibratedNSColor(
-      ui::NativeTheme::instance()->GetSystemColor(isHighlighted?
-          ui::NativeTheme::kColorId_MenuSeparatorColor :
-          ui::NativeTheme::kColorId_DialogBackground));
-
+  NSColor* backgroundColor = isHighlighted ? hoverColor_ : backgroundColor_;
   [[self cell] setBackgroundColor:backgroundColor];
 }
 
@@ -638,8 +663,23 @@
 @end
 
 @interface ProfileChooserController ()
-// Creates a tutorial card for the profile |avatar_item| if needed.
-- (NSView*)createTutorialViewIfNeeded:(const AvatarMenu::Item&)item;
+// Builds a tutorial card with a title label using |titleMessageId|, a content
+// label using |contentMessageId|, and a bottom row with a right-aligned link
+// using |linkMessageId|, and a left aligned button using |buttonMessageId|.
+// On click, the link would execute |linkAction|, and the button would execute
+// |buttonAction|.
+- (NSView*)tutorialViewWithTitle:(int)titleMessageId
+                  contentMessage:(int)contentMessageId
+                     linkMessage:(int)linkMessageId
+                   buttonMessage:(int)buttonMessageId
+                      linkAction:(SEL)linkAction
+                    buttonAction:(SEL)buttonAction;
+
+// Builds a a tutorial card for new profile management preview if needed. if
+// new profile management is not enabled yet, then it prompts the user to try
+// out the feature. Otherwise, it notifies the user that the feature has been
+// enabled if needed.
+- (NSView*)buildPreviewTutorialIfNeeded:(const AvatarMenu::Item&)item;
 
 // Creates the main profile card for the profile |item| at the top of
 // the bubble.
@@ -647,7 +687,7 @@
 
 // Creates the possible links for the main profile card with profile |item|.
 - (NSView*)createCurrentProfileLinksForItem:(const AvatarMenu::Item&)item
-                                withXOffset:(CGFloat)xOffset;
+                                       rect:(NSRect)rect;
 
 // Creates a main profile card for the guest user.
 - (NSView*)createGuestProfileView;
@@ -714,14 +754,22 @@
   [self initMenuContentsWithView:BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT];
 }
 
+- (IBAction)hideAccountManagement:(id)sender {
+  [self initMenuContentsWithView:BUBBLE_VIEW_MODE_PROFILE_CHOOSER];
+}
+
 - (IBAction)lockProfile:(id)sender {
   profiles::LockProfile(browser_->profile());
 }
 
-- (IBAction)showSigninPage:(id)sender {
+- (IBAction)showInlineSigninPage:(id)sender {
   [self initMenuContentsWithView:BUBBLE_VIEW_MODE_GAIA_SIGNIN];
 }
 
+- (IBAction)showTabbedSigninPage:(id)sender {
+  chrome::ShowBrowserSignin(browser_, signin::SOURCE_MENU);
+}
+
 - (IBAction)addAccount:(id)sender {
   [self initMenuContentsWithView:BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT];
 }
@@ -767,6 +815,10 @@
   chrome::Navigate(&params);
 }
 
+- (IBAction)enableNewProfileManagementPreview:(id)sender {
+  profiles::EnableNewProfileManagementPreview();
+}
+
 - (IBAction)dismissTutorial:(id)sender {
   // If the user manually dismissed the tutorial, never show it again by setting
   // the number of times shown to the maximum plus 1, so that later we could
@@ -807,12 +859,9 @@
     // Guest profiles do not have a token service.
     isGuestSession_ = browser_->profile()->IsGuestSession();
 
-    ui::NativeTheme* nativeTheme = ui::NativeTheme::instance();
     [[self bubble] setAlignment:info_bubble::kAlignRightEdgeToAnchorEdge];
     [[self bubble] setArrowLocation:info_bubble::kNoArrow];
-    [[self bubble] setBackgroundColor:
-        gfx::SkColorToCalibratedNSColor(nativeTheme->GetSystemColor(
-            ui::NativeTheme::kColorId_DialogBackground))];
+    [[self bubble] setBackgroundColor:GetDialogBackgroundColor()];
     [self initMenuContentsWithView:viewMode_];
   }
 
@@ -849,7 +898,7 @@
     const AvatarMenu::Item& item = avatarMenu_->GetItemAt(i);
     if (item.active) {
       if (viewMode_ == BUBBLE_VIEW_MODE_PROFILE_CHOOSER)
-        tutorialView = [self createTutorialViewIfNeeded:item];
+        tutorialView = [self buildPreviewTutorialIfNeeded:item];
       currentProfileView = [self createCurrentProfileView:item];
       enableLock = item.signed_in;
     } else {
@@ -861,55 +910,51 @@
 
   // |yOffset| is the next position at which to draw in |contentView|
   // coordinates.
-  CGFloat yOffset = kSmallVerticalSpacing;
+  CGFloat yOffset = 0;
 
-  // Option buttons.
-  NSView* optionsView = [self createOptionsViewWithRect:
-      NSMakeRect(0, yOffset, kFixedMenuWidth, 0)
-                                        enableLock:enableLock];
-  [contentView addSubview:optionsView];
-  yOffset = NSMaxY([optionsView frame]) + kSmallVerticalSpacing;
+  // Option buttons. Only available with the new profile management flag.
+  if (switches::IsNewProfileManagement()) {
+    NSRect rect = NSMakeRect(0, yOffset, kFixedMenuWidth, 0);
+    NSView* optionsView = [self createOptionsViewWithRect:rect
+                                               enableLock:enableLock];
+    [contentView addSubview:optionsView];
+    rect.origin.y = NSMaxY([optionsView frame]);
 
-  NSBox* separator = [self separatorWithFrame:
-      NSMakeRect(0, yOffset, kFixedMenuWidth, 0)];
-  [contentView addSubview:separator];
-  yOffset = NSMaxY([separator frame]) + kVerticalSpacing;
+    NSBox* separator = [self separatorWithFrame:rect];
+    [contentView addSubview:separator];
+    yOffset = NSMaxY([separator frame]);
+  }
 
   if (viewToDisplay == BUBBLE_VIEW_MODE_PROFILE_CHOOSER &&
       switches::IsFastUserSwitching()) {
     // Other profiles switcher. The profiles have already been sorted
     // by their y-coordinate, so they can be added in the existing order.
     for (NSView *otherProfileView in otherProfiles.get()) {
-      [otherProfileView setFrameOrigin:NSMakePoint(kHorizontalSpacing,
-                                                   yOffset)];
+      [otherProfileView setFrameOrigin:NSMakePoint(0, yOffset)];
       [contentView addSubview:otherProfileView];
-      yOffset = NSMaxY([otherProfileView frame]) + kSmallVerticalSpacing;
-    }
+      yOffset = NSMaxY([otherProfileView frame]);
 
-    // If we displayed other profiles, ensure the spacing between the last item
-    // and the active profile card is the same as the spacing between the active
-    // profile card and the bottom of the bubble.
-    if ([otherProfiles.get() count] > 0)
-      yOffset += kSmallVerticalSpacing;
+      NSBox* separator =
+          [self separatorWithFrame:NSMakeRect(0, yOffset, kFixedMenuWidth, 0)];
+      [contentView addSubview:separator];
+      yOffset = NSMaxY([separator frame]);
+    }
   } else if (viewToDisplay == BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT) {
     NSView* currentProfileAccountsView = [self createCurrentProfileAccountsView:
-        NSMakeRect(kHorizontalSpacing,
-                   yOffset,
-                   kFixedMenuWidth - 2 * kHorizontalSpacing,
-                   0)];
+        NSMakeRect(0, yOffset, kFixedMenuWidth, 0)];
     [contentView addSubview:currentProfileAccountsView];
-    yOffset = NSMaxY([currentProfileAccountsView frame]) + kVerticalSpacing;
+    yOffset = NSMaxY([currentProfileAccountsView frame]);
 
     NSBox* accountsSeparator = [self separatorWithFrame:
         NSMakeRect(0, yOffset, kFixedMenuWidth, 0)];
     [contentView addSubview:accountsSeparator];
-    yOffset = NSMaxY([accountsSeparator frame]) + kVerticalSpacing;
+    yOffset = NSMaxY([accountsSeparator frame]);
   }
 
   // Active profile card.
   if (currentProfileView) {
-    [currentProfileView setFrameOrigin:NSMakePoint(kHorizontalSpacing,
-                                                   yOffset)];
+    yOffset += kVerticalSpacing;
+    [currentProfileView setFrameOrigin:NSMakePoint(0, yOffset)];
     [contentView addSubview:currentProfileView];
     yOffset = NSMaxY([currentProfileView frame]) + kVerticalSpacing;
   }
@@ -925,8 +970,19 @@
   SetWindowSize([self window], NSMakeSize(kFixedMenuWidth, yOffset));
 }
 
-- (NSView*)createTutorialViewIfNeeded:(const AvatarMenu::Item&)item {
-  if (!item.signed_in)
+- (NSView*)buildPreviewTutorialIfNeeded:(const AvatarMenu::Item&)item {
+  if (!switches::IsNewProfileManagement()) {
+    return [self tutorialViewWithTitle:IDS_PROFILES_PREVIEW_TUTORIAL_TITLE
+                        contentMessage:
+        IDS_PROFILES_PREVIEW_TUTORIAL_CONTENT_TEXT
+                           linkMessage:IDS_PROFILES_PROFILE_TUTORIAL_LEARN_MORE
+                         buttonMessage:IDS_PROFILES_TUTORIAL_TRY_BUTTON
+                            linkAction:@selector(openTutorialLearnMoreURL:)
+                          buttonAction:
+        @selector(enableNewProfileManagementPreview:)];
+  }
+
+  if (!switches::IsNewProfileManagementPreviewEnabled())
     return nil;
 
   Profile* profile = browser_->profile();
@@ -940,33 +996,41 @@
     if (showCount == kProfileAvatarTutorialShowMax)
       return nil;
     profile->GetPrefs()->SetInteger(
-      prefs::kProfileAvatarTutorialShown, showCount + 1);
+        prefs::kProfileAvatarTutorialShown, showCount + 1);
     tutorialShowing_ = true;
   }
 
+  return [self tutorialViewWithTitle:IDS_PROFILES_PREVIEW_ENABLED_TUTORIAL_TITLE
+                      contentMessage:
+      IDS_PROFILES_PREVIEW_ENABLED_TUTORIAL_CONTENT_TEXT
+                         linkMessage:IDS_PROFILES_PROFILE_TUTORIAL_LEARN_MORE
+                       buttonMessage:IDS_PROFILES_TUTORIAL_OK_BUTTON
+                          linkAction:@selector(openTutorialLearnMoreURL:)
+                        buttonAction:@selector(dismissTutorial:)];
+}
+
+- (NSView*)tutorialViewWithTitle:(int)titleMessageId
+                  contentMessage:(int)contentMessageId
+                     linkMessage:(int)linkMessageId
+                   buttonMessage:(int)buttonMessageId
+                      linkAction:(SEL)linkAction
+                    buttonAction:(SEL)buttonAction {
   NSColor* tutorialBackgroundColor =
       gfx::SkColorToSRGBNSColor(profiles::kAvatarTutorialBackgroundColor);
   base::scoped_nsobject<NSView> container([[BackgroundColorView alloc]
       initWithFrame:NSMakeRect(0, 0, kFixedMenuWidth, 0)
           withColor:tutorialBackgroundColor]);
   CGFloat availableWidth = kFixedMenuWidth - 2 * kHorizontalSpacing;
-  CGFloat yOffset = kVerticalSpacing;
+  CGFloat yOffset = kSmallVerticalSpacing;
 
   // Adds links and buttons at the bottom.
-  NSButton* learnMoreLink =
-      [self linkButtonWithTitle:
-          l10n_util::GetNSString(IDS_PROFILES_PROFILE_TUTORIAL_LEARN_MORE)
-                    frameOrigin:NSMakePoint(kHorizontalSpacing, yOffset)
-                         action:@selector(openTutorialLearnMoreURL:)];
-  [[learnMoreLink cell] setTextColor:[NSColor whiteColor]];
-  [container addSubview:learnMoreLink];
-
   base::scoped_nsobject<NSButton> tutorialOkButton([[HoverButton alloc]
       initWithFrame:NSZeroRect]);
   [tutorialOkButton setTitle:l10n_util::GetNSString(
-      IDS_PROFILES_TUTORIAL_OK_BUTTON)];
+      buttonMessageId)];
+  [tutorialOkButton setBezelStyle:NSRoundedBezelStyle];
   [tutorialOkButton setTarget:self];
-  [tutorialOkButton setAction:@selector(dismissTutorial:)];
+  [tutorialOkButton setAction:buttonAction];
   [tutorialOkButton sizeToFit];
   NSSize buttonSize = [tutorialOkButton frame].size;
   const CGFloat kTopBottomTextPadding = 6;
@@ -980,13 +1044,22 @@
       yOffset)];
   [container addSubview:tutorialOkButton];
 
+  NSButton* learnMoreLink =
+      [self linkButtonWithTitle:l10n_util::GetNSString(linkMessageId)
+                    frameOrigin:NSZeroPoint
+                         action:@selector(linkAction:)];
+  [[learnMoreLink cell] setTextColor:[NSColor whiteColor]];
+  CGFloat linkYOffset = yOffset + (NSHeight([tutorialOkButton frame]) -
+                                   NSHeight([learnMoreLink frame])) / 2;
+  [learnMoreLink setFrameOrigin:NSMakePoint(kHorizontalSpacing, linkYOffset)];
+  [container addSubview:learnMoreLink];
+
   yOffset = std::max(NSMaxY([learnMoreLink frame]),
                      NSMaxY([tutorialOkButton frame])) + kVerticalSpacing;
 
   // Adds body content.
   NSTextField* contentLabel = BuildLabel(
-      l10n_util::GetNSString(
-          IDS_PROFILES_PREVIEW_ENABLED_TUTORIAL_CONTENT_TEXT),
+      l10n_util::GetNSString(contentMessageId),
       NSMakePoint(kHorizontalSpacing, yOffset),
       tutorialBackgroundColor,
       gfx::SkColorToSRGBNSColor(profiles::kAvatarTutorialContentTextColor));
@@ -997,11 +1070,10 @@
 
   // Adds title.
   NSTextField* titleLabel =
-      BuildLabel(
-          l10n_util::GetNSString(IDS_PROFILES_PREVIEW_ENABLED_TUTORIAL_TITLE),
-          NSMakePoint(kHorizontalSpacing, yOffset),
-          tutorialBackgroundColor,
-          [NSColor whiteColor] /* text_color */);
+      BuildLabel(l10n_util::GetNSString(titleMessageId),
+                 NSMakePoint(kHorizontalSpacing, yOffset),
+                 tutorialBackgroundColor,
+                 [NSColor whiteColor] /* text_color */);
   [titleLabel setFont:[NSFont labelFontOfSize:kTitleFontSize]];
   [titleLabel sizeToFit];
   [titleLabel setFrameSize:
@@ -1036,28 +1108,23 @@
   base::scoped_nsobject<NSView> container([[NSView alloc]
       initWithFrame:NSZeroRect]);
 
-  // Profile icon.
-  base::scoped_nsobject<EditableProfilePhoto> iconView(
-      [[EditableProfilePhoto alloc]
-          initWithFrame:NSMakeRect(0, 0, kLargeImageSide, kLargeImageSide)
-             avatarMenu:avatarMenu_.get()
-            profileIcon:item.icon
-         editingAllowed:!isGuestSession_]);
+  CGFloat xOffset = kHorizontalSpacing;
+  CGFloat yOffset = 0;
+  CGFloat availableTextWidth = kFixedMenuWidth - 2 * kHorizontalSpacing;
 
-  [container addSubview:iconView];
-
-  CGFloat xOffset = NSMaxX([iconView frame]) + kHorizontalSpacing;
-  CGFloat yOffset = kVerticalSpacing;
-  if (!isGuestSession_ && viewMode_ == BUBBLE_VIEW_MODE_PROFILE_CHOOSER) {
+  // Profile options. This can be a link to the accounts view, the profile's
+  // username for signed in users, or a "Sign in" button for local profiles.
+  if (!isGuestSession_) {
     NSView* linksContainer =
-        [self createCurrentProfileLinksForItem:item withXOffset:xOffset];
+        [self createCurrentProfileLinksForItem:item
+                                          rect:NSMakeRect(xOffset, yOffset,
+                                                          availableTextWidth,
+                                                          0)];
     [container addSubview:linksContainer];
     yOffset = NSMaxY([linksContainer frame]);
   }
 
-  // Profile name.
-  CGFloat availableTextWidth =
-      kFixedMenuWidth - xOffset - 2 * kHorizontalSpacing;
+  // Profile name, centered.
   base::scoped_nsobject<EditableProfileNameButton> profileName(
       [[EditableProfileNameButton alloc]
           initWithFrame:NSMakeRect(xOffset, yOffset,
@@ -1069,42 +1136,87 @@
          editingAllowed:!isGuestSession_]);
 
   [container addSubview:profileName];
-  [container setFrameSize:NSMakeSize(kFixedMenuWidth,
-                                     NSHeight([iconView frame]))];
+  yOffset = NSMaxY([profileName frame]);
+
+  // Profile icon, centered.
+  xOffset = (kFixedMenuWidth - kLargeImageSide) / 2;
+  base::scoped_nsobject<EditableProfilePhoto> iconView(
+      [[EditableProfilePhoto alloc]
+          initWithFrame:NSMakeRect(xOffset, yOffset,
+                                   kLargeImageSide, kLargeImageSide)
+             avatarMenu:avatarMenu_.get()
+            profileIcon:item.icon
+         editingAllowed:!isGuestSession_]);
+
+  [container addSubview:iconView];
+  yOffset = NSMaxY([iconView frame]);
+
+  [container setFrameSize:NSMakeSize(kFixedMenuWidth, yOffset)];
   return container.autorelease();
 }
 
 - (NSView*)createCurrentProfileLinksForItem:(const AvatarMenu::Item&)item
-                                withXOffset:(CGFloat)xOffset {
-  base::scoped_nsobject<NSView> container([[NSView alloc]
-      initWithFrame:NSZeroRect]);
+                                       rect:(NSRect)rect {
+  base::scoped_nsobject<NSView> container([[NSView alloc] initWithFrame:rect]);
 
-  NSButton* link;
-  NSPoint frameOrigin = NSMakePoint(xOffset, kSmallVerticalSpacing);
+  // Don't double-apply the left margin to the sub-views.
+  rect.origin.x = 0;
+
   // The available links depend on the type of profile that is active.
+  NSButton* link;
   if (item.signed_in) {
-    link = [self linkButtonWithTitle:l10n_util::GetNSString(
-        IDS_PROFILES_PROFILE_MANAGE_ACCOUNTS_BUTTON)
-                         frameOrigin:frameOrigin
-                              action:@selector(showAccountManagement:)];
+    if (switches::IsNewProfileManagement()) {
+      NSString* linkTitle = l10n_util::GetNSString(
+          viewMode_ ==  BUBBLE_VIEW_MODE_PROFILE_CHOOSER ?
+              IDS_PROFILES_PROFILE_MANAGE_ACCOUNTS_BUTTON :
+              IDS_PROFILES_PROFILE_HIDE_MANAGE_ACCOUNTS_BUTTON);
+      SEL linkSelector = (viewMode_ ==  BUBBLE_VIEW_MODE_PROFILE_CHOOSER) ?
+          @selector(showAccountManagement:) : @selector(hideAccountManagement:);
+      link = [self linkButtonWithTitle:linkTitle
+                           frameOrigin:rect.origin
+                                action:linkSelector];
+    } else {
+      link = [self linkButtonWithTitle:base::SysUTF16ToNSString(item.sync_state)
+                           frameOrigin:rect.origin
+                                action:nil];
+      [[link cell] setTextColor:[NSColor blackColor]];
+    }
+    // -linkButtonWithTitle sizeToFit's the link, so re-stretch it so that it
+    // can be centered correctly in the view.
+    rect.size.height = NSMaxY([link frame]);
+    [link setFrame:rect];
+    [link setAlignment:NSCenterTextAlignment];
   } else {
-    link = [self linkButtonWithTitle:l10n_util::GetNSStringFWithFixup(
-        IDS_SYNC_START_SYNC_BUTTON_LABEL,
-        l10n_util::GetStringUTF16(IDS_SHORT_PRODUCT_NAME))
-                         frameOrigin:frameOrigin
-                              action:@selector(showSigninPage:)];
+    rect.size.height = kBlueButtonHeight;
+    link = [[BlueLabelButton alloc] initWithFrame:rect];
+
+    // Manually elide the button text so that the contents fit inside the bubble
+    // This is needed because the BlueLabelButton cell resets the style on
+    // every call to -cellSize, which prevents setting a custom lineBreakMode.
+    NSString* elidedButtonText = base::SysUTF16ToNSString(gfx::ElideText(
+        l10n_util::GetStringFUTF16(
+            IDS_SYNC_START_SYNC_BUTTON_LABEL,
+            l10n_util::GetStringUTF16(IDS_SHORT_PRODUCT_NAME)),
+        ui::ResourceBundle::GetSharedInstance().GetFontList(
+            ui::ResourceBundle::BaseFont),
+        rect.size.width,
+        gfx::ELIDE_AT_END));
+
+    [link setTitle:elidedButtonText];
+    [link setTarget:self];
+    [link setAction:switches::IsNewProfileManagement() ?
+        @selector(showInlineSigninPage:) : @selector(showTabbedSigninPage:)];
   }
 
   [container addSubview:link];
-  [container setFrameSize:NSMakeSize(
-      NSMaxX([link frame]), NSMaxY([link frame]) + kSmallVerticalSpacing)];
+  [container setFrameSize:rect.size];
   return container.autorelease();
 }
 
 - (NSView*)createGuestProfileView {
   gfx::Image guestIcon =
       ui::ResourceBundle::GetSharedInstance().GetNativeImageNamed(
-          IDR_LOGIN_GUEST);
+          profiles::GetPlaceholderAvatarIconResourceID());
   AvatarMenu::Item guestItem(std::string::npos, /* menu_index, not used */
                              std::string::npos, /* profile_index, not used */
                              guestIcon);
@@ -1117,33 +1229,24 @@
 
 - (NSButton*)createOtherProfileView:(int)itemIndex {
   const AvatarMenu::Item& item = avatarMenu_->GetItemAt(itemIndex);
-  base::scoped_nsobject<NSButton> profileButton([[NSButton alloc]
-      initWithFrame:NSZeroRect]);
-  base::scoped_nsobject<CustomPaddingImageButtonCell> cell(
-  [[CustomPaddingImageButtonCell alloc]
-      initWithLeftMarginSpacing:0
-              imageTitleSpacing:kImageTitleSpacing]);
-  [profileButton setCell:cell.get()];
 
-  [[profileButton cell] setLineBreakMode:NSLineBreakByTruncatingTail];
+  NSRect rect = NSMakeRect(0, 0, kFixedMenuWidth,
+                           kBlueButtonHeight + kSmallVerticalSpacing);
+  base::scoped_nsobject<BackgroundColorHoverButton> profileButton(
+      [[BackgroundColorHoverButton alloc]
+          initWithFrame:rect
+      imageTitleSpacing:kImageTitleSpacing
+        backgroundColor:GetDialogBackgroundColor()]);
   [profileButton setTitle:base::SysUTF16ToNSString(item.name)];
-  [profileButton setImage:CreateProfileImage(
+  [profileButton setDefaultImage:CreateProfileImage(
       item.icon, kSmallImageSide).ToNSImage()];
   [profileButton setImagePosition:NSImageLeft];
   [profileButton setAlignment:NSLeftTextAlignment];
   [profileButton setBordered:NO];
-  [profileButton setFont:[NSFont labelFontOfSize:kTitleFontSize]];
   [profileButton setTag:itemIndex];
   [profileButton setTarget:self];
   [profileButton setAction:@selector(switchToProfile:)];
 
-  // Since the bubble is fixed width, we need to calculate the width available
-  // for the profile name, as longer names will have to be elided.
-  CGFloat availableTextWidth = kFixedMenuWidth - 2 * kHorizontalSpacing;
-  [profileButton sizeToFit];
-  [profileButton setFrameSize:NSMakeSize(availableTextWidth,
-                                         NSHeight([profileButton frame]))];
-
   return profileButton.autorelease();
 }
 
@@ -1152,7 +1255,7 @@
   int widthOfLockButton = enableLock? 2 * kHorizontalSpacing + 12 : 0;
   NSRect viewRect = NSMakeRect(0, 0,
                                rect.size.width - widthOfLockButton,
-                               kBlueButtonHeight);
+                               kBlueButtonHeight + kVerticalSpacing);
   NSButton* notYouButton =
       [self hoverButtonWithRect:viewRect
                            text:l10n_util::GetNSStringF(
@@ -1163,8 +1266,7 @@
                          action:@selector(showUserManager:)];
 
   rect.size.height = NSMaxY([notYouButton frame]);
-  base::scoped_nsobject<NSView> container([[NSView alloc]
-      initWithFrame:rect]);
+  base::scoped_nsobject<NSView> container([[NSView alloc] initWithFrame:rect]);
   [container addSubview:notYouButton];
 
   if (enableLock) {
@@ -1183,17 +1285,17 @@
 }
 
 - (NSView*)createCurrentProfileAccountsView:(NSRect)rect {
-  const CGFloat kAccountButtonHeight = 15;
+  const CGFloat kAccountButtonHeight = 34;
 
   const AvatarMenu::Item& item =
       avatarMenu_->GetItemAt(avatarMenu_->GetActiveProfileIndex());
   DCHECK(item.signed_in);
 
-  base::scoped_nsobject<NSView> container([[NSView alloc] initWithFrame:rect]);
-
-  NSRect viewRect = NSMakeRect(0, 0, rect.size.width, kBlueButtonHeight);
-  base::scoped_nsobject<NSButton> addAccountsButton([[BlueLabelButton alloc]
-      initWithFrame:viewRect]);
+  NSColor* backgroundColor = gfx::SkColorToCalibratedNSColor(
+      profiles::kAvatarBubbleAccountsBackgroundColor);
+  base::scoped_nsobject<NSView> container([[BackgroundColorView alloc]
+      initWithFrame:rect
+          withColor:backgroundColor]);
 
   // Manually elide the button text so that the contents fit inside the bubble.
   // This is needed because the BlueLabelButton cell resets the style on
@@ -1206,20 +1308,19 @@
       rect.size.width,
       gfx::ELIDE_AT_END));
 
-  [addAccountsButton setTitle:elidedButtonText];
-  [addAccountsButton setTarget:self];
-  [addAccountsButton setAction:@selector(addAccount:)];
+  NSButton* addAccountsButton =
+      [self linkButtonWithTitle:elidedButtonText
+                    frameOrigin:NSMakePoint(
+          kHorizontalSpacing, kSmallVerticalSpacing)
+                         action:@selector(addAccount:)];
   [container addSubview:addAccountsButton];
 
-  // Update the height of the email account buttons. This is needed so that the
-  // all the buttons span the entire width of the bubble.
-  viewRect.origin.y = NSMaxY([addAccountsButton frame]) + kVerticalSpacing;
-  viewRect.size.height = kAccountButtonHeight;
-
-  NSView* accountEmails = [self createAccountsListWithRect:viewRect];
+  NSView* accountEmails = [self createAccountsListWithRect:NSMakeRect(
+      0, kAccountButtonHeight, rect.size.width, kAccountButtonHeight)];
   [container addSubview:accountEmails];
-  [container setFrameSize:NSMakeSize(
-      NSWidth([container frame]), NSMaxY([accountEmails frame]))];
+
+  [container setFrameSize:NSMakeSize(rect.size.width,
+                                     NSMaxY([accountEmails frame]))];
   return container.autorelease();
 }
 
@@ -1242,7 +1343,7 @@
                                                     title:accounts[i]];
     [accountButton setTag:i];
     [container addSubview:accountButton];
-    rect.origin.y = NSMaxY([accountButton frame]) + kSmallVerticalSpacing;
+    rect.origin.y = NSMaxY([accountButton frame]);
   }
 
   // The primary account should always be listed first.
@@ -1339,12 +1440,10 @@
     contentView = BuildFixedWidthTextViewWithLink(self, contentStr, linkStr,
         offsets[1], contentFrameOrigin, availableWidth);
   } else {
-    NSString* contentStr = isPrimaryAccount ?
-    l10n_util::GetNSStringF(IDS_PROFILES_PRIMARY_ACCOUNT_REMOVAL_TEXT,
-                            base::UTF8ToUTF16(accountIdToRemove_)) :
-    l10n_util::GetNSString(IDS_PROFILES_ACCOUNT_REMOVAL_TEXT);
+    NSString* contentStr =
+        l10n_util::GetNSString(IDS_PROFILES_ACCOUNT_REMOVAL_TEXT);
     NSTextField* contentLabel = BuildLabel(contentStr, contentFrameOrigin,
-        nil /* background_color */, nil /* text_color */);
+        GetDialogBackgroundColor(), nil /* text_color */);
     [contentLabel setFrameSize:NSMakeSize(availableWidth, 0)];
     [GTMUILocalizerAndLayoutTweaker sizeToFitFixedWidthTextField:contentLabel];
     contentView = contentLabel;
@@ -1382,9 +1481,12 @@
                             text:(NSString*)text
                  imageResourceId:(int)imageResourceId
         alternateImageResourceId:(int)alternateImageResourceId
-                          action:(SEL)action  {
+                          action:(SEL)action {
   base::scoped_nsobject<BackgroundColorHoverButton> button(
-      [[BackgroundColorHoverButton alloc] initWithFrame:rect]);
+      [[BackgroundColorHoverButton alloc]
+          initWithFrame:rect
+      imageTitleSpacing:kImageTitleSpacing
+        backgroundColor:GetDialogBackgroundColor()]);
 
   [button setTitle:text];
   ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance();
@@ -1424,14 +1526,16 @@
 
 - (NSButton*)accountButtonWithRect:(NSRect)rect
                              title:(const std::string&)title {
-  base::scoped_nsobject<NSButton> button([[NSButton alloc] initWithFrame:rect]);
+  NSColor* backgroundColor = gfx::SkColorToCalibratedNSColor(
+      profiles::kAvatarBubbleAccountsBackgroundColor);
+  base::scoped_nsobject<BackgroundColorHoverButton> button(
+      [[BackgroundColorHoverButton alloc] initWithFrame:rect
+                                      imageTitleSpacing:0
+                                        backgroundColor:backgroundColor]);
+
   [button setTitle:ElideEmail(title, rect.size.width)];
   [button setAlignment:NSLeftTextAlignment];
   [button setBordered:NO];
-
-  [button setImage:ui::ResourceBundle::GetSharedInstance().
-      GetNativeImageNamed(IDR_CLOSE_1).ToNSImage()];
-  [button setImagePosition:NSImageRight];
   [button setTarget:self];
   [button setAction:@selector(showAccountRemovalView:)];
 
diff --git a/chrome/browser/ui/cocoa/profiles/profile_chooser_controller_unittest.mm b/chrome/browser/ui/cocoa/profiles/profile_chooser_controller_unittest.mm
index d9589a3..bafb0d2 100644
--- a/chrome/browser/ui/cocoa/profiles/profile_chooser_controller_unittest.mm
+++ b/chrome/browser/ui/cocoa/profiles/profile_chooser_controller_unittest.mm
@@ -72,6 +72,20 @@
     [controller_ showWindow:nil];
   }
 
+  void EnableNewProfileManagement() {
+    CommandLine::ForCurrentProcess()->AppendSwitch(
+        switches::kNewProfileManagement);
+  }
+
+  void EnableNewAvatarMenuOnly() {
+    CommandLine::ForCurrentProcess()->AppendSwitch(switches::kNewAvatarMenu);
+  }
+
+  void EnableFastUserSwitching() {
+    CommandLine::ForCurrentProcess()->AppendSwitch(
+        switches::kFastUserSwitching);
+  }
+
   ProfileChooserController* controller() { return controller_; }
   AvatarMenu* menu() { return menu_; }
 
@@ -84,8 +98,10 @@
   DISALLOW_COPY_AND_ASSIGN(ProfileChooserControllerTest);
 };
 
-TEST_F(ProfileChooserControllerTest, InitialLayout) {
+TEST_F(ProfileChooserControllerTest, InitialLayoutWithNewManagement) {
+  EnableNewProfileManagement();
   StartProfileChooserController();
+
   NSArray* subviews = [[[controller() window] contentView] subviews];
 
   // Three profiles means we should have one active card, one separator and
@@ -107,27 +123,87 @@
   NSArray* activeCardSubviews = [[subviews objectAtIndex:2] subviews];
   EXPECT_EQ(3U, [activeCardSubviews count]);
 
-  NSView* activeProfileImage = [activeCardSubviews objectAtIndex:0];
+  // Profile icon.
+  NSView* activeProfileImage = [activeCardSubviews objectAtIndex:2];
   EXPECT_TRUE([activeProfileImage isKindOfClass:[NSImageView class]]);
 
-  // There are some links in between. The profile name is added last.
-  CGFloat index = [activeCardSubviews count] - 1;
-  NSView* activeProfileName = [activeCardSubviews objectAtIndex:index];
+  // Profile name.
+  NSView* activeProfileName = [activeCardSubviews objectAtIndex:1];
   EXPECT_TRUE([activeProfileName isKindOfClass:[NSButton class]]);
   EXPECT_EQ(menu()->GetItemAt(0).name, base::SysNSStringToUTF16(
       [static_cast<NSButton*>(activeProfileName) title]));
+
+  // Profile links. This is a local profile, so there should be a signin button.
+  NSArray* linksSubviews = [[activeCardSubviews objectAtIndex:0] subviews];
+  EXPECT_EQ(1U, [linksSubviews count]);
+  NSButton* link = static_cast<NSButton*>([linksSubviews objectAtIndex:0]);
+  EXPECT_EQ(@selector(showInlineSigninPage:), [link action]);
+  EXPECT_EQ(controller(), [link target]);
+}
+
+TEST_F(ProfileChooserControllerTest, InitialLayoutWithNewMenu) {
+  EnableNewAvatarMenuOnly();
+  StartProfileChooserController();
+
+  NSArray* subviews = [[[controller() window] contentView] subviews];
+
+  // Three profiles means we should have one active card and a
+  // fast user switcher which has two "other" profiles and 2 separators. In
+  // this flow we also have the tutorial view.
+  EXPECT_EQ(6U, [subviews count]);
+
+  // There should be two "other profiles" items. The items are drawn from the
+  // bottom up, so in the opposite order of those in the AvatarMenu.
+  int profileIndex = 1;
+  for (int i = 3; i >= 0; i -= 2) {
+    // Each profile button has a separator.
+    EXPECT_TRUE([[subviews objectAtIndex:i] isKindOfClass:[NSBox class]]);
+
+    NSButton* button = static_cast<NSButton*>([subviews objectAtIndex:i-1]);
+    EXPECT_EQ(menu()->GetItemAt(profileIndex).name,
+              base::SysNSStringToUTF16([button title]));
+    EXPECT_EQ(profileIndex, [button tag]);
+    EXPECT_EQ(@selector(switchToProfile:), [button action]);
+    EXPECT_EQ(controller(), [button target]);
+    profileIndex++;
+  }
+
+  // There should be the profile avatar, name and links container in the active
+  // card view. The links displayed in the container are checked separately.
+  NSArray* activeCardSubviews = [[subviews objectAtIndex:4] subviews];
+  EXPECT_EQ(3U, [activeCardSubviews count]);
+
+  // Profile icon.
+  NSView* activeProfileImage = [activeCardSubviews objectAtIndex:2];
+  EXPECT_TRUE([activeProfileImage isKindOfClass:[NSImageView class]]);
+
+  // Profile name.
+  NSView* activeProfileName = [activeCardSubviews objectAtIndex:1];
+  EXPECT_TRUE([activeProfileName isKindOfClass:[NSButton class]]);
+  EXPECT_EQ(menu()->GetItemAt(0).name, base::SysNSStringToUTF16(
+      [static_cast<NSButton*>(activeProfileName) title]));
+
+  // Profile links. This is a local profile, so there should be a signin button.
+  NSArray* linksSubviews = [[activeCardSubviews objectAtIndex:0] subviews];
+  EXPECT_EQ(1U, [linksSubviews count]);
+  NSButton* link = static_cast<NSButton*>([linksSubviews objectAtIndex:0]);
+  EXPECT_EQ(@selector(showTabbedSigninPage:), [link action]);
+  EXPECT_EQ(controller(), [link target]);
+
+  // There is a tutorial view card at the top.
+  EXPECT_TRUE([[subviews objectAtIndex:5] isKindOfClass:[NSView class]]);
 }
 
 TEST_F(ProfileChooserControllerTest, InitialLayoutWithFastUserSwitcher) {
-  // The fast user switcher is only availbale behind a flag.
-  CommandLine::ForCurrentProcess()->AppendSwitch(switches::kFastUserSwitching);
-
+  EnableNewProfileManagement();
+  EnableFastUserSwitching();
   StartProfileChooserController();
+
   NSArray* subviews = [[[controller() window] contentView] subviews];
 
   // Three profiles means we should have one active card, two "other" profiles,
-  // one separator and one option buttons view.
-  EXPECT_EQ(5U, [subviews count]);
+  // each with a separator, and one option buttons view.
+  EXPECT_EQ(7U, [subviews count]);
 
   // For a local profile, there should be one button in the option buttons view.
   NSArray* buttonSubviews = [[subviews objectAtIndex:0] subviews];
@@ -142,8 +218,11 @@
   // There should be two "other profiles" items. The items are drawn from the
   // bottom up, so in the opposite order of those in the AvatarMenu.
   int profileIndex = 1;
-  for (NSUInteger i = 3; i >= 2; --i) {
-    NSButton* button = static_cast<NSButton*>([subviews objectAtIndex:i]);
+  for (int i = 5; i >= 2; i -= 2) {
+    // Each profile button has a separator.
+    EXPECT_TRUE([[subviews objectAtIndex:i] isKindOfClass:[NSBox class]]);
+
+    NSButton* button = static_cast<NSButton*>([subviews objectAtIndex:i-1]);
     EXPECT_EQ(menu()->GetItemAt(profileIndex).name,
               base::SysNSStringToUTF16([button title]));
     EXPECT_EQ(profileIndex, [button tag]);
@@ -153,24 +232,13 @@
   }
 
   // There should be the profile avatar, name and links container in the active
-  // card view. The links displayed in the container are checked separately.
-  NSArray* activeCardSubviews = [[subviews objectAtIndex:4] subviews];
+  // card view. These have been checked separately.
+  NSArray* activeCardSubviews = [[subviews objectAtIndex:6] subviews];
   EXPECT_EQ(3U, [activeCardSubviews count]);
-
-  NSView* activeProfileImage = [activeCardSubviews objectAtIndex:0];
-  EXPECT_TRUE([activeProfileImage isKindOfClass:[NSImageView class]]);
-
-  // There are some links in between. The profile name is added last.
-  CGFloat index = [activeCardSubviews count] - 1;
-  NSView* activeProfileName = [activeCardSubviews objectAtIndex:index];
-  EXPECT_TRUE([activeProfileName isKindOfClass:[NSButton class]]);
-  EXPECT_EQ(menu()->GetItemAt(0).name, base::SysNSStringToUTF16(
-      [static_cast<NSButton*>(activeProfileName) title]));
 }
 
 TEST_F(ProfileChooserControllerTest, OtherProfilesSortedAlphabetically) {
-  // The fast user switcher is only availbale behind a flag.
-  CommandLine::ForCurrentProcess()->AppendSwitch(switches::kFastUserSwitching);
+  EnableNewAvatarMenuOnly();
 
   // Add two extra profiles, to make sure sorting is alphabetical and not
   // by order of creation.
@@ -189,33 +257,57 @@
                               @"New Profile",
                               @"Test 1",
                               @"Test 2" };
-  // There should be three "other profiles" items, sorted alphabetically.
-  // The "other profiles" start at index 2, after the option buttons and
-  // a separator. We need to iterate through the profiles in the order
-  // displayed in the bubble, which is opposite from the drawn order.
+  // There are four "other" profiles, each with a button and a separator, an
+  // active profile card, and a tutorial card.
+  EXPECT_EQ(10U, [subviews count]);
+  // There should be four "other profiles" items, sorted alphabetically.
+  // The "other profiles" start at index 0, and each have a separator. We
+  // need to iterate through the profiles in the order displayed in the bubble,
+  // which is opposite from the drawn order.
   int sortedNameIndex = 0;
-  for (NSUInteger i = 5; i >= 2; --i) {
-    NSButton* button = static_cast<NSButton*>([subviews objectAtIndex:i]);
+  for (int i = 7; i >= 0; i -= 2) {
+    // The item at index i is the separator.
+    NSButton* button = static_cast<NSButton*>([subviews objectAtIndex:i-1]);
     EXPECT_TRUE(
         [[button title] isEqualToString:sortedNames[sortedNameIndex++]]);
   }
 }
 
-TEST_F(ProfileChooserControllerTest, LocalProfileActiveCardLinks) {
+TEST_F(ProfileChooserControllerTest,
+    LocalProfileActiveCardLinksWithNewManagement) {
+  EnableNewProfileManagement();
   StartProfileChooserController();
   NSArray* subviews = [[[controller() window] contentView] subviews];
   NSArray* activeCardSubviews = [[subviews objectAtIndex:2] subviews];
-  NSArray* activeCardLinks = [[activeCardSubviews objectAtIndex:1] subviews];
+  NSArray* activeCardLinks = [[activeCardSubviews objectAtIndex:0] subviews];
 
   // There should be one "sign in" link.
   EXPECT_EQ(1U, [activeCardLinks count]);
   NSButton* signinLink =
       static_cast<NSButton*>([activeCardLinks objectAtIndex:0]);
-  EXPECT_EQ(@selector(showSigninPage:), [signinLink action]);
+  EXPECT_EQ(@selector(showInlineSigninPage:), [signinLink action]);
   EXPECT_EQ(controller(), [signinLink target]);
 }
 
-TEST_F(ProfileChooserControllerTest, SignedInProfileActiveCardLinks) {
+TEST_F(ProfileChooserControllerTest,
+    LocalProfileActiveCardLinksWithNewMenu) {
+  EnableNewAvatarMenuOnly();
+  StartProfileChooserController();
+  NSArray* subviews = [[[controller() window] contentView] subviews];
+  NSArray* activeCardSubviews = [[subviews objectAtIndex:4] subviews];
+  NSArray* activeCardLinks = [[activeCardSubviews objectAtIndex:0] subviews];
+
+  // There should be one "sign in" link.
+  EXPECT_EQ(1U, [activeCardLinks count]);
+  NSButton* signinLink =
+      static_cast<NSButton*>([activeCardLinks objectAtIndex:0]);
+  EXPECT_EQ(@selector(showTabbedSigninPage:), [signinLink action]);
+  EXPECT_EQ(controller(), [signinLink target]);
+}
+
+TEST_F(ProfileChooserControllerTest,
+    SignedInProfileActiveCardLinksWithNewManagement) {
+  EnableNewProfileManagement();
   // Sign in the first profile.
   ProfileInfoCache* cache = testing_profile_manager()->profile_info_cache();
   cache->SetUserNameOfProfileAtIndex(0, base::ASCIIToUTF16(kEmail));
@@ -223,7 +315,7 @@
   StartProfileChooserController();
   NSArray* subviews = [[[controller() window] contentView] subviews];
   NSArray* activeCardSubviews = [[subviews objectAtIndex:2] subviews];
-  NSArray* activeCardLinks = [[activeCardSubviews objectAtIndex:1] subviews];
+  NSArray* activeCardLinks = [[activeCardSubviews objectAtIndex:0] subviews];
 
   // There is one link: manage accounts.
   EXPECT_EQ(1U, [activeCardLinks count]);
@@ -233,7 +325,29 @@
   EXPECT_EQ(controller(), [manageAccountsLink target]);
 }
 
+TEST_F(ProfileChooserControllerTest,
+    SignedInProfileActiveCardLinksWithNewMenu) {
+  EnableNewAvatarMenuOnly();
+  // Sign in the first profile.
+  ProfileInfoCache* cache = testing_profile_manager()->profile_info_cache();
+  cache->SetUserNameOfProfileAtIndex(0, base::ASCIIToUTF16(kEmail));
+
+  StartProfileChooserController();
+  NSArray* subviews = [[[controller() window] contentView] subviews];
+  NSArray* activeCardSubviews = [[subviews objectAtIndex:4] subviews];
+  NSArray* activeCardLinks = [[activeCardSubviews objectAtIndex:0] subviews];
+
+  // There is one link, without a target and with the user's email.
+  EXPECT_EQ(1U, [activeCardLinks count]);
+  NSButton* emailLink =
+      static_cast<NSButton*>([activeCardLinks objectAtIndex:0]);
+  EXPECT_EQ(nil, [emailLink action]);
+  EXPECT_EQ(kEmail, base::SysNSStringToUTF8([emailLink title]));
+  EXPECT_EQ(controller(), [emailLink target]);
+}
+
 TEST_F(ProfileChooserControllerTest, AccountManagementLayout) {
+  EnableNewProfileManagement();
   // Sign in the first profile.
   ProfileInfoCache* cache = testing_profile_manager()->profile_info_cache();
   cache->SetUserNameOfProfileAtIndex(0, base::ASCIIToUTF16(kEmail));
@@ -288,26 +402,37 @@
       static_cast<NSButton*>([accountsListSubviews objectAtIndex:0]);
   EXPECT_EQ(@selector(showAccountRemovalView:), [genericAccount action]);
   EXPECT_EQ(controller(), [genericAccount target]);
+  EXPECT_NE(-1, [genericAccount tag]);
 
   // Primary accounts are always last.
   NSButton* primaryAccount =
       static_cast<NSButton*>([accountsListSubviews objectAtIndex:1]);
   EXPECT_EQ(@selector(showAccountRemovalView:), [primaryAccount action]);
   EXPECT_EQ(controller(), [primaryAccount target]);
+  EXPECT_EQ(-1, [primaryAccount tag]);
 
   // There should be another separator.
   EXPECT_TRUE([[subviews objectAtIndex:3] isKindOfClass:[NSBox class]]);
 
-  // There should be the profile avatar, name and no links container in the
-  // active card view.
+  // There should be the profile avatar, name and a "hide accounts" link
+  // container in the active card view.
   NSArray* activeCardSubviews = [[subviews objectAtIndex:4] subviews];
-  EXPECT_EQ(2U, [activeCardSubviews count]);
+  EXPECT_EQ(3U, [activeCardSubviews count]);
 
-  NSView* activeProfileImage = [activeCardSubviews objectAtIndex:0];
+  // Profile icon.
+  NSView* activeProfileImage = [activeCardSubviews objectAtIndex:2];
   EXPECT_TRUE([activeProfileImage isKindOfClass:[NSImageView class]]);
 
+  // Profile name.
   NSView* activeProfileName = [activeCardSubviews objectAtIndex:1];
   EXPECT_TRUE([activeProfileName isKindOfClass:[NSButton class]]);
   EXPECT_EQ(menu()->GetItemAt(0).name, base::SysNSStringToUTF16(
       [static_cast<NSButton*>(activeProfileName) title]));
+
+  // Profile links. This is a local profile, so there should be a signin button.
+  NSArray* linksSubviews = [[activeCardSubviews objectAtIndex:0] subviews];
+  EXPECT_EQ(1U, [linksSubviews count]);
+  NSButton* link = static_cast<NSButton*>([linksSubviews objectAtIndex:0]);
+  EXPECT_EQ(@selector(hideAccountManagement:), [link action]);
+  EXPECT_EQ(controller(), [link target]);
 }
diff --git a/chrome/browser/ui/cocoa/profiles/user_manager_mac.mm b/chrome/browser/ui/cocoa/profiles/user_manager_mac.mm
index c70c851..89a0cb5 100644
--- a/chrome/browser/ui/cocoa/profiles/user_manager_mac.mm
+++ b/chrome/browser/ui/cocoa/profiles/user_manager_mac.mm
@@ -75,6 +75,7 @@
                   backing:NSBackingStoreBuffered
                     defer:NO];
   [window setTitle:l10n_util::GetNSString(IDS_USER_MANAGER_SCREEN_TITLE)];
+  [window setMinSize:NSMakeSize(kWindowWidth, kWindowHeight)];
 
   if ((self = [super initWithWindow:window])) {
     userManagerObserver_ = userManagerObserver;
diff --git a/chrome/browser/ui/cocoa/restart_browser.mm b/chrome/browser/ui/cocoa/restart_browser.mm
index a265b68..891bfb8 100644
--- a/chrome/browser/ui/cocoa/restart_browser.mm
+++ b/chrome/browser/ui/cocoa/restart_browser.mm
@@ -39,9 +39,9 @@
          returnCode:(int)returnCode
         contextInfo:(void*)contextInfo {
   if (returnCode == NSAlertFirstButtonReturn) {
-    // Nothing to do. User will restart later.
-  } else if (returnCode == NSAlertSecondButtonReturn) {
     chrome::AttemptRestart();
+  } else if (returnCode == NSAlertSecondButtonReturn) {
+    // Nothing to do. User will restart later.
   } else {
     NOTREACHED();
   }
@@ -59,7 +59,7 @@
   NSString* text =
       l10n_util::GetNSStringFWithFixup(IDS_UPDATE_RECOMMENDED,
           l10n_util::GetStringUTF16(IDS_PRODUCT_NAME));
-  NSString* notNowButtin = l10n_util::GetNSStringWithFixup(IDS_NOT_NOW);
+  NSString* notNowButton = l10n_util::GetNSStringWithFixup(IDS_NOT_NOW);
   NSString* restartButton =
       l10n_util::GetNSStringWithFixup(IDS_RELAUNCH_AND_UPDATE);
 
@@ -69,8 +69,8 @@
   [alert setAlertStyle:NSInformationalAlertStyle];
   [alert setMessageText:title];
   [alert setInformativeText:text];
-  [alert addButtonWithTitle:notNowButtin];
   [alert addButtonWithTitle:restartButton];
+  [alert addButtonWithTitle:notNowButton];
 
   if (parent) {
     [alert beginSheetModalForWindow:parent
diff --git a/chrome/browser/ui/cocoa/tab_contents/chrome_web_contents_view_delegate_mac.mm b/chrome/browser/ui/cocoa/tab_contents/chrome_web_contents_view_delegate_mac.mm
index 95ac89e..5fdc5be 100644
--- a/chrome/browser/ui/cocoa/tab_contents/chrome_web_contents_view_delegate_mac.mm
+++ b/chrome/browser/ui/cocoa/tab_contents/chrome_web_contents_view_delegate_mac.mm
@@ -44,8 +44,9 @@
 
 void ChromeWebContentsViewDelegateMac::ShowMenu(
     scoped_ptr<RenderViewContextMenu> menu) {
-  DCHECK(menu.get());
   context_menu_.reset(static_cast<RenderViewContextMenuMac*>(menu.release()));
+  if (!context_menu_.get())
+    return;
 
   // The renderer may send the "show context menu" message multiple times, one
   // for each right click mouse event it receives. Normally, this doesn't happen
@@ -64,10 +65,20 @@
 scoped_ptr<RenderViewContextMenu> ChromeWebContentsViewDelegateMac::BuildMenu(
     content::WebContents* web_contents,
     const content::ContextMenuParams& params) {
-  content::RenderWidgetHostView* widget_view = GetActiveRenderWidgetHostView();
-  scoped_ptr<RenderViewContextMenuMac> menu(new RenderViewContextMenuMac(
-      web_contents->GetFocusedFrame(), params, widget_view->GetNativeView()));
-  menu->Init();
+  scoped_ptr<RenderViewContextMenuMac> menu;
+  content::RenderFrameHost* focused_frame = web_contents->GetFocusedFrame();
+  // If the frame tree does not have a focused frame at this point, do not
+  // bother creating RenderViewContextMenuMac.
+  // This happens if the frame has navigated to a different page before
+  // ContextMenu message was received by the current RenderFrameHost.
+  if (focused_frame) {
+    content::RenderWidgetHostView* widget_view =
+        GetActiveRenderWidgetHostView();
+    menu.reset(new RenderViewContextMenuMac(
+        focused_frame, params, widget_view->GetNativeView()));
+    menu->Init();
+  }
+
   return menu.PassAs<RenderViewContextMenu>();
 }
 
diff --git a/chrome/browser/ui/cocoa/tab_contents/tab_contents_controller.mm b/chrome/browser/ui/cocoa/tab_contents/tab_contents_controller.mm
index 7eb9a3a..e0b033b 100644
--- a/chrome/browser/ui/cocoa/tab_contents/tab_contents_controller.mm
+++ b/chrome/browser/ui/cocoa/tab_contents/tab_contents_controller.mm
@@ -6,6 +6,8 @@
 
 #include <utility>
 
+#include "base/command_line.h"
+#include "base/mac/scoped_cftyperef.h"
 #include "base/mac/scoped_nsobject.h"
 #include "chrome/browser/devtools/devtools_window.h"
 #import "chrome/browser/themes/theme_properties.h"
@@ -16,6 +18,8 @@
 #include "content/public/browser/web_contents.h"
 #include "content/public/browser/web_contents_observer.h"
 #include "content/public/browser/web_contents_view.h"
+#include "ui/base/cocoa/animation_utils.h"
+#include "ui/base/ui_base_switches.h"
 #include "ui/gfx/geometry/rect.h"
 
 using content::WebContents;
@@ -61,6 +65,7 @@
 };
 
 @interface TabContentsController (TabContentsContainerViewDelegate)
+- (BOOL)contentsInFullscreenCaptureMode;
 // Computes and returns the frame to use for the contents view within the
 // container view.
 - (NSRect)frameForContentsView;
@@ -73,6 +78,8 @@
  @private
   TabContentsController* delegate_;  // weak
 }
+
+- (NSColor*)computeBackgroundColor;
 @end
 
 @implementation TabContentsContainerView
@@ -80,6 +87,14 @@
 - (id)initWithDelegate:(TabContentsController*)delegate {
   if ((self = [super initWithFrame:NSZeroRect])) {
     delegate_ = delegate;
+    if (!CommandLine::ForCurrentProcess()->HasSwitch(
+            switches::kDisableCoreAnimation)) {
+      ScopedCAActionDisabler disabler;
+      base::scoped_nsobject<CALayer> layer([[CALayer alloc] init]);
+      [layer setBackgroundColor:CGColorGetConstantColor(kCGColorWhite)];
+      [self setLayer:layer];
+      [self setWantsLayer:YES];
+    }
   }
   return self;
 }
@@ -90,24 +105,33 @@
   delegate_ = nil;
 }
 
+- (NSColor*)computeBackgroundColor {
+  // This view is sometimes flashed into visibility (e.g, when closing
+  // windows), so ensure that the flash be white in those cases.
+  if (![delegate_ contentsInFullscreenCaptureMode])
+    return [NSColor whiteColor];
+
+  // Fill with a dark tint of the new tab page's background color.  This is
+  // only seen when the subview is sized specially for fullscreen tab capture.
+  NSColor* bgColor = nil;
+  ThemeService* const theme =
+      static_cast<ThemeService*>([[self window] themeProvider]);
+  if (theme)
+    bgColor = theme->GetNSColor(ThemeProperties::COLOR_NTP_BACKGROUND);
+  if (!bgColor)
+    bgColor = [[self window] backgroundColor];
+  const float kDarknessFraction = 0.80f;
+  return [bgColor blendedColorWithFraction:kDarknessFraction
+                                   ofColor:[NSColor blackColor]];
+}
+
 // Override -drawRect to fill the view with a solid color outside of the
 // subview's frame.
 - (void)drawRect:(NSRect)dirtyRect {
   NSView* const contentsView =
       [[self subviews] count] > 0 ? [[self subviews] objectAtIndex:0] : nil;
   if (!contentsView || !NSContainsRect([contentsView frame], dirtyRect)) {
-    // Fill with a dark tint of the new tab page's background color.  This is
-    // only seen when the subview is sized specially for fullscreen tab capture.
-    NSColor* bgColor = nil;
-    ThemeService* const theme =
-        static_cast<ThemeService*>([[self window] themeProvider]);
-    if (theme)
-      bgColor = theme->GetNSColor(ThemeProperties::COLOR_NTP_BACKGROUND);
-    if (!bgColor)
-      bgColor = [[self window] backgroundColor];
-    const float kDarknessFraction = 0.80f;
-    [[bgColor blendedColorWithFraction:kDarknessFraction
-                               ofColor:[NSColor blackColor]] setFill];
+    [[self computeBackgroundColor] setFill];
     NSRectFill(dirtyRect);
   }
   [super drawRect:dirtyRect];
@@ -122,9 +146,29 @@
       !delegate_) {
     return;
   }
+
+  ScopedCAActionDisabler disabler;
   [contentsView setFrame:[delegate_ frameForContentsView]];
 }
 
+// Update the background layer's color whenever the view needs to repaint.
+- (void)setNeedsDisplayInRect:(NSRect)rect {
+  [super setNeedsDisplayInRect:rect];
+
+  // Convert from an NSColor to a CGColorRef.
+  NSColor* nsBackgroundColor = [self computeBackgroundColor];
+  NSColorSpace* nsColorSpace = [nsBackgroundColor colorSpace];
+  CGColorSpaceRef cgColorSpace = [nsColorSpace CGColorSpace];
+  const NSInteger numberOfComponents = [nsBackgroundColor numberOfComponents];
+  CGFloat components[numberOfComponents];
+  [nsBackgroundColor getComponents:components];
+  base::ScopedCFTypeRef<CGColorRef> cgBackgroundColor(
+      CGColorCreate(cgColorSpace, components));
+
+  ScopedCAActionDisabler disabler;
+  [[self layer] setBackgroundColor:cgBackgroundColor];
+}
+
 @end  // @implementation TabContentsContainerView
 
 @implementation TabContentsController
@@ -167,6 +211,7 @@
 - (void)ensureContentsVisible {
   if (!contents_)
     return;
+  ScopedCAActionDisabler disabler;
   NSView* contentsContainer = [self view];
   NSArray* subviews = [contentsContainer subviews];
   NSView* contentsNativeView;
@@ -263,6 +308,22 @@
   [self ensureContentsVisible];
 }
 
+- (BOOL)contentsInFullscreenCaptureMode {
+  if (!fullscreenObserver_)
+    return NO;
+  // Note: Grab a known-valid WebContents pointer from |fullscreenObserver_|.
+  content::WebContents* const wc = fullscreenObserver_->web_contents();
+  if (!wc ||
+      wc->GetCapturerCount() == 0 ||
+      wc->GetPreferredSize().IsEmpty() ||
+      !(isEmbeddingFullscreenWidget_ ||
+        (wc->GetDelegate() &&
+         wc->GetDelegate()->IsFullscreenForTabOrPending(wc)))) {
+    return NO;
+  }
+  return YES;
+}
+
 - (NSRect)frameForContentsView {
   const NSSize containerSize = [[self view] frame].size;
   gfx::Rect rect;
@@ -272,22 +333,13 @@
   // In most cases, the contents view is simply sized to fill the container
   // view's bounds. Only WebContentses that are in fullscreen mode and being
   // screen-captured will engage the special layout/sizing behavior.
-  if (!fullscreenObserver_)
+  if (![self contentsInFullscreenCaptureMode])
     return NSRectFromCGRect(rect.ToCGRect());
-  // Note: Grab a known-valid WebContents pointer from |fullscreenObserver_|.
-  content::WebContents* const wc = fullscreenObserver_->web_contents();
-  if (!wc ||
-      wc->GetCapturerCount() == 0 ||
-      wc->GetPreferredSize().IsEmpty() ||
-      !(isEmbeddingFullscreenWidget_ ||
-        (wc->GetDelegate() &&
-         wc->GetDelegate()->IsFullscreenForTabOrPending(wc)))) {
-    return NSRectFromCGRect(rect.ToCGRect());
-  }
 
   // Size the contents view to the capture video resolution and center it. If
   // the container view is not large enough to fit it at the preferred size,
   // scale down to fit (preserving aspect ratio).
+  content::WebContents* const wc = fullscreenObserver_->web_contents();
   const gfx::Size captureSize = wc->GetPreferredSize();
   if (captureSize.width() <= rect.width() &&
       captureSize.height() <= rect.height()) {
diff --git a/chrome/browser/ui/cocoa/tabs/tab_strip_drag_controller.mm b/chrome/browser/ui/cocoa/tabs/tab_strip_drag_controller.mm
index 4bab57e..841c46c 100644
--- a/chrome/browser/ui/cocoa/tabs/tab_strip_drag_controller.mm
+++ b/chrome/browser/ui/cocoa/tabs/tab_strip_drag_controller.mm
@@ -13,6 +13,7 @@
 #import "chrome/browser/ui/cocoa/tabs/tab_view.h"
 #import "chrome/browser/ui/cocoa/tabs/tab_window_controller.h"
 #import "chrome/browser/ui/cocoa/tabs/tab_strip_controller.h"
+#include "ui/gfx/mac/scoped_ns_disable_screen_updates.h"
 
 const CGFloat kTearDistance = 36.0;
 const NSTimeInterval kTearDuration = 0.333;
@@ -113,6 +114,11 @@
                            untilDate:[NSDate distantFuture]
                               inMode:NSDefaultRunLoopMode
                              dequeue:YES];
+
+    // Ensure that any window changes that happen while handling this event
+    // appear atomically.
+    gfx::ScopedNSDisableScreenUpdates disabler;
+
     NSEventType type = [theEvent type];
     if (type == NSKeyUp) {
       if ([theEvent keyCode] == kVK_Escape) {
diff --git a/chrome/browser/ui/cocoa/toolbar/toolbar_controller.mm b/chrome/browser/ui/cocoa/toolbar/toolbar_controller.mm
index a1255bd..e4a1cf7 100644
--- a/chrome/browser/ui/cocoa/toolbar/toolbar_controller.mm
+++ b/chrome/browser/ui/cocoa/toolbar/toolbar_controller.mm
@@ -509,6 +509,14 @@
     // aren't sent correctly.
     DCHECK(autocompleteTextFieldEditor_.get());
     [autocompleteTextFieldEditor_.get() setFieldEditor:YES];
+    if (base::mac::IsOSSnowLeopard()) {
+      // Manually transferring the drawsBackground and backgroundColor
+      // properties is necessary to ensure anti-aliased text on 10.6.
+      [autocompleteTextFieldEditor_
+          setDrawsBackground:[locationBar_ drawsBackground]];
+      [autocompleteTextFieldEditor_
+          setBackgroundColor:[locationBar_ backgroundColor]];
+    }
     return autocompleteTextFieldEditor_.get();
   }
   return nil;
diff --git a/chrome/browser/ui/cocoa/view_id_util.h b/chrome/browser/ui/cocoa/view_id_util.h
index 2b16624..e104ad8 100644
--- a/chrome/browser/ui/cocoa/view_id_util.h
+++ b/chrome/browser/ui/cocoa/view_id_util.h
@@ -46,6 +46,10 @@
 // override this method to return its fixed ViewID.
 - (ViewID)viewID;
 
+// Returns the ancestor view with a specific ViewID, or nil if no ancestor
+// view has that ViewID.
+- (NSView*)ancestorWithViewID:(ViewID)viewID;
+
 @end
 
 #endif  // CHROME_BROWSER_UI_COCOA_VIEW_ID_UTIL_H_
diff --git a/chrome/browser/ui/cocoa/view_id_util.mm b/chrome/browser/ui/cocoa/view_id_util.mm
index 691c7f3..6dd19ad 100644
--- a/chrome/browser/ui/cocoa/view_id_util.mm
+++ b/chrome/browser/ui/cocoa/view_id_util.mm
@@ -86,4 +86,11 @@
   return iter != map->end() ? iter->second : VIEW_ID_NONE;
 }
 
+- (NSView*)ancestorWithViewID:(ViewID)viewID {
+  NSView* ancestor = self;
+  while (ancestor && [ancestor viewID] != viewID)
+    ancestor = [ancestor superview];
+  return ancestor;
+}
+
 @end
diff --git a/chrome/browser/ui/cocoa/web_contents_modal_dialog_manager_cocoa.mm b/chrome/browser/ui/cocoa/web_contents_modal_dialog_manager_cocoa.mm
index 0b6847f..f284c5b 100644
--- a/chrome/browser/ui/cocoa/web_contents_modal_dialog_manager_cocoa.mm
+++ b/chrome/browser/ui/cocoa/web_contents_modal_dialog_manager_cocoa.mm
@@ -14,45 +14,52 @@
 class NativeWebContentsModalDialogManagerCocoa
     : public web_modal::SingleWebContentsDialogManager {
  public:
-  NativeWebContentsModalDialogManagerCocoa() {
+  NativeWebContentsModalDialogManagerCocoa(
+      NativeWebContentsModalDialog dialog)
+      : dialog_(dialog) {
   }
 
   virtual ~NativeWebContentsModalDialogManagerCocoa() {
   }
 
   // SingleWebContentsDialogManager overrides
-  virtual void ManageDialog(NativeWebContentsModalDialog dialog) OVERRIDE {
+  virtual void Show() OVERRIDE {
+    GetConstrainedWindowMac(dialog())->ShowWebContentsModalDialog();
   }
 
-  virtual void ShowDialog(NativeWebContentsModalDialog dialog) OVERRIDE {
-    GetConstrainedWindowMac(dialog)->ShowWebContentsModalDialog();
+  virtual void Hide() OVERRIDE {
   }
 
-  virtual void HideDialog(NativeWebContentsModalDialog dialog) OVERRIDE {
+  virtual void Close() OVERRIDE {
+    GetConstrainedWindowMac(dialog())->CloseWebContentsModalDialog();
   }
 
-  virtual void CloseDialog(NativeWebContentsModalDialog dialog) OVERRIDE {
-    GetConstrainedWindowMac(dialog)->CloseWebContentsModalDialog();
+  virtual void Focus() OVERRIDE {
+    GetConstrainedWindowMac(dialog())->FocusWebContentsModalDialog();
   }
 
-  virtual void FocusDialog(NativeWebContentsModalDialog dialog) OVERRIDE {
-    GetConstrainedWindowMac(dialog)->FocusWebContentsModalDialog();
-  }
-
-  virtual void PulseDialog(NativeWebContentsModalDialog dialog) OVERRIDE {
-    GetConstrainedWindowMac(dialog)->PulseWebContentsModalDialog();
+  virtual void Pulse() OVERRIDE {
+    GetConstrainedWindowMac(dialog())->PulseWebContentsModalDialog();
   }
 
   virtual void HostChanged(
       web_modal::WebContentsModalDialogHost* new_host) OVERRIDE {
   }
 
+  virtual NativeWebContentsModalDialog dialog() OVERRIDE {
+    return dialog_;
+  }
+
  private:
   static ConstrainedWindowMac* GetConstrainedWindowMac(
       NativeWebContentsModalDialog dialog) {
     return static_cast<ConstrainedWindowMac*>(dialog);
   }
 
+  // In mac this is a pointer to a ConstrainedWindowMac.
+  // TODO(gbillock): Replace this casting system with a more typesafe call path.
+  NativeWebContentsModalDialog dialog_;
+
   DISALLOW_COPY_AND_ASSIGN(NativeWebContentsModalDialogManagerCocoa);
 };
 
@@ -62,8 +69,9 @@
 
 SingleWebContentsDialogManager*
     WebContentsModalDialogManager::CreateNativeWebModalManager(
+        NativeWebContentsModalDialog dialog,
         SingleWebContentsDialogManagerDelegate* native_delegate) {
-  return new NativeWebContentsModalDialogManagerCocoa;
+  return new NativeWebContentsModalDialogManagerCocoa(dialog);
 }
 
 }  // namespace web_modal
diff --git a/chrome/browser/ui/cocoa/website_settings/permission_bubble_controller.h b/chrome/browser/ui/cocoa/website_settings/permission_bubble_controller.h
index 855f101..3ec26c4 100644
--- a/chrome/browser/ui/cocoa/website_settings/permission_bubble_controller.h
+++ b/chrome/browser/ui/cocoa/website_settings/permission_bubble_controller.h
@@ -7,7 +7,9 @@
 #include "base/mac/scoped_nsobject.h"
 #import "chrome/browser/ui/cocoa/base_bubble_controller.h"
 #include "chrome/browser/ui/website_settings/permission_bubble_view.h"
+#include "ui/base/models/simple_menu_model.h"
 
+@class MenuController;
 class PermissionBubbleCocoa;
 class PermissionBubbleRequest;
 
@@ -21,6 +23,9 @@
   // Delegate to be informed of user actions.
   PermissionBubbleView::Delegate* delegate_;  // Weak.
 
+  // Delegate that receives menu events on behalf of this.
+  scoped_ptr<ui::SimpleMenuModel::Delegate> menuDelegate_;
+
   // Bridge to the C++ class that created this object.
   PermissionBubbleCocoa* bridge_;  // Weak.
 }
@@ -41,4 +46,7 @@
          acceptStates:(const std::vector<bool>&)acceptStates
     customizationMode:(BOOL)customizationMode;
 
+// Called when a menu item is selected.
+- (void)onMenuItemClicked:(int)commandId;
+
 @end
diff --git a/chrome/browser/ui/cocoa/website_settings/permission_bubble_controller.mm b/chrome/browser/ui/cocoa/website_settings/permission_bubble_controller.mm
index ccec5b9..0b6f6f0 100644
--- a/chrome/browser/ui/cocoa/website_settings/permission_bubble_controller.mm
+++ b/chrome/browser/ui/cocoa/website_settings/permission_bubble_controller.mm
@@ -20,17 +20,21 @@
 #import "chrome/browser/ui/cocoa/info_bubble_view.h"
 #import "chrome/browser/ui/cocoa/info_bubble_window.h"
 #include "chrome/browser/ui/cocoa/website_settings/permission_bubble_cocoa.h"
+#include "chrome/browser/ui/cocoa/website_settings/split_block_button.h"
 #include "chrome/browser/ui/website_settings/permission_bubble_request.h"
 #include "chrome/browser/ui/website_settings/permission_bubble_view.h"
 #include "content/public/browser/user_metrics.h"
 #include "grit/generated_resources.h"
 #include "skia/ext/skia_utils_mac.h"
 #include "ui/base/cocoa/window_size_constants.h"
+#import "ui/base/cocoa/menu_controller.h"
 #include "ui/base/l10n/l10n_util_mac.h"
+#include "ui/base/models/simple_menu_model.h"
 
 using base::UserMetricsAction;
 
 namespace {
+
 const CGFloat kHorizontalPadding = 20.0f;
 const CGFloat kVerticalPadding = 20.0f;
 const CGFloat kButtonPadding = 10.0f;
@@ -38,13 +42,37 @@
 const CGFloat kCheckboxYAdjustment = 2.0f;
 
 const CGFloat kFontSize = 15.0f;
-const base::char16 kBulletPoint = 0x2022;
+class MenuDelegate : public ui::SimpleMenuModel::Delegate {
+ public:
+  explicit MenuDelegate(PermissionBubbleController* bubble)
+      : bubble_controller_(bubble) {}
+  virtual bool IsCommandIdChecked(int command_id) const OVERRIDE {
+    return false;
+  }
+  virtual bool IsCommandIdEnabled(int command_id) const OVERRIDE {
+    // TODO(leng):  Change this to true once setting the bubble to be
+    // customizable works properly.  Ideally, the bubble will alter its
+    // contents, rather than reshowing completely.
+    return false;
+  }
+  virtual bool GetAcceleratorForCommandId(
+      int command_id,
+      ui::Accelerator* accelerator) OVERRIDE {
+    return false;
+  }
+  virtual void ExecuteCommand(int command_id, int event_flags) OVERRIDE {
+    [bubble_controller_ onMenuItemClicked:command_id];
+  }
+ private:
+  PermissionBubbleController* bubble_controller_;  // Weak, owns us.
+  DISALLOW_COPY_AND_ASSIGN(MenuDelegate);
+};
 
 }  // namespace
 
 @interface PermissionBubbleController ()
 
-// Returns an autoreleased NSView displaying the label for |request|.
+// Returns an autoreleased NSView displaying the icon and label for |request|.
 - (NSView*)labelForRequest:(PermissionBubbleRequest*)request;
 
 // Returns an autoreleased NSView displaying the title for the bubble
@@ -56,19 +84,24 @@
 - (NSView*)checkboxForRequest:(PermissionBubbleRequest*)request
                       checked:(BOOL)checked;
 
-// Returns an autoreleased NSView displaying the customize button.
-- (NSView*)customizationButton;
-
 // Returns an autoreleased NSView of a button with |title| and |action|.
-// If |pairedButton| is non-nil, the size of both buttons will be set to be
-// equal to the size of the larger of the two.
 - (NSView*)buttonWithTitle:(NSString*)title
-                    action:(SEL)action
-                pairedWith:(NSView*)pairedButton;
+                    action:(SEL)action;
+
+// Returns an autoreleased NSView displaying a block button.
+- (NSView*)blockButton;
+
+// Returns an autoreleased NSView with a block button and a drop-down menu
+// with one item, which will change the UI to allow customizing the permissions.
+- (NSView*)blockButtonWithCustomizeMenu;
 
 // Returns an autoreleased NSView displaying the close 'x' button.
 - (NSView*)closeButton;
 
+// Sets the width of both |viewA| and |viewB| to be the larger of the
+// two views' widths.  Does not change either view's origin or height.
+- (CGFloat)matchWidthsOf:(NSView*)viewA andOf:(NSView*)viewB;
+
 // Called when the 'ok' button is pressed.
 - (void)ok:(id)sender;
 
@@ -87,7 +120,6 @@
 // Called when a checkbox changes from checked to unchecked, or vice versa.
 - (void)onCheckboxChanged:(id)sender;
 
-
 @end
 
 @implementation PermissionBubbleController
@@ -118,8 +150,8 @@
 }
 
 - (void)showAtAnchor:(NSPoint)anchorPoint
-        withDelegate:(PermissionBubbleView::Delegate*)delegate
-         forRequests:(const std::vector<PermissionBubbleRequest*>&)requests
+         withDelegate:(PermissionBubbleView::Delegate*)delegate
+          forRequests:(const std::vector<PermissionBubbleRequest*>&)requests
          acceptStates:(const std::vector<bool>&)acceptStates
     customizationMode:(BOOL)customizationMode {
   DCHECK(!requests.empty());
@@ -135,13 +167,11 @@
   if (customizationMode) {
     NSString* okTitle = l10n_util::GetNSString(IDS_OK);
     allowOrOkButton.reset([[self buttonWithTitle:okTitle
-                                          action:@selector(ok:)
-                                      pairedWith:nil] retain]);
+                                          action:@selector(ok:)] retain]);
   } else {
     NSString* allowTitle = l10n_util::GetNSString(IDS_PERMISSION_ALLOW);
     allowOrOkButton.reset([[self buttonWithTitle:allowTitle
-                                          action:@selector(onAllow:)
-                                      pairedWith:nil] retain]);
+                                          action:@selector(onAllow:)] retain]);
   }
   CGFloat yOffset = 2 * kVerticalPadding + NSMaxY([allowOrOkButton frame]);
   BOOL singlePermission = requests.size() == 1;
@@ -207,29 +237,21 @@
   [contentView addSubview:allowOrOkButton];
 
   if (!customizationMode) {
-    NSString* blockTitle = l10n_util::GetNSString(IDS_PERMISSION_DENY);
-    base::scoped_nsobject<NSView> blockButton(
-        [[self buttonWithTitle:blockTitle
-                        action:@selector(onBlock:)
-                    pairedWith:allowOrOkButton] retain]);
-    xOrigin = NSMinX([allowOrOkButton frame]) - NSWidth([blockButton frame]) -
-        kButtonPadding;
+    base::scoped_nsobject<NSView> blockButton;
+    if (singlePermission)
+      blockButton.reset([[self blockButton] retain]);
+    else
+      blockButton.reset([[self blockButtonWithCustomizeMenu] retain]);
+    CGFloat width = [self matchWidthsOf:blockButton andOf:allowOrOkButton];
+    // Ensure the allow/ok button is still in the correct position.
+    xOrigin = NSWidth(bubbleFrame) - width - kHorizontalPadding;
+    [allowOrOkButton setFrameOrigin:NSMakePoint(xOrigin, kVerticalPadding)];
+    // Line up the block button.
+    xOrigin = NSMinX([allowOrOkButton frame]) - width - kButtonPadding;
     [blockButton setFrameOrigin:NSMakePoint(xOrigin, kVerticalPadding)];
     [contentView addSubview:blockButton];
   }
 
-  if (!singlePermission && !customizationMode) {
-    base::scoped_nsobject<NSView> customizeButton(
-        [[self customizationButton] retain]);
-    // The Y center should match the Y centers of the buttons.
-    CGFloat customizeButtonYOffset = kVerticalPadding +
-      std::ceil(0.5f * (NSHeight([allowOrOkButton frame]) -
-                        NSHeight([customizeButton frame])));
-    [customizeButton setFrameOrigin:NSMakePoint(kHorizontalPadding,
-                                                customizeButtonYOffset)];
-    [contentView addSubview:customizeButton];
-  }
-
   bubbleFrame.size.height = yOffset + kVerticalPadding;
   bubbleFrame = [[self window] frameRectForContentRect:bubbleFrame];
 
@@ -252,19 +274,46 @@
 
 - (NSView*)labelForRequest:(PermissionBubbleRequest*)request {
   DCHECK(request);
+  base::scoped_nsobject<NSView> permissionView(
+      [[NSView alloc] initWithFrame:NSZeroRect]);
+  base::scoped_nsobject<NSImageView> permissionIcon(
+      [[NSImageView alloc] initWithFrame:NSZeroRect]);
+  [permissionIcon setImage:ui::ResourceBundle::GetSharedInstance().
+      GetNativeImageNamed(request->GetIconID()).ToNSImage()];
+  [permissionIcon setFrameSize:[[permissionIcon image] size]];
+  [permissionView addSubview:permissionIcon];
+
   base::scoped_nsobject<NSTextField> permissionLabel(
       [[NSTextField alloc] initWithFrame:NSZeroRect]);
-  base::string16 label;
-  label.push_back(kBulletPoint);
-  label.push_back(' ');
-  label += request->GetMessageTextFragment();
+  base::string16 label = request->GetMessageTextFragment();
   [permissionLabel setDrawsBackground:NO];
   [permissionLabel setBezeled:NO];
   [permissionLabel setEditable:NO];
   [permissionLabel setSelectable:NO];
   [permissionLabel setStringValue:base::SysUTF16ToNSString(label)];
   [permissionLabel sizeToFit];
-  return permissionLabel.autorelease();
+  [permissionLabel setFrameOrigin:
+      NSMakePoint(NSWidth([permissionIcon frame]), 0)];
+  [permissionView addSubview:permissionLabel];
+
+  // Match the horizontal centers of the two subviews.  Note that the label's
+  // center is rounded down, and the icon's center, up.  It looks better that
+  // way - with the text's center slightly lower than the icon's center - if the
+  // height delta is not evenly split.
+  NSRect iconFrame = [permissionIcon frame];
+  NSRect labelFrame = [permissionLabel frame];
+  NSRect unionFrame = NSUnionRect(iconFrame, labelFrame);
+
+  iconFrame.origin.y =
+      std::ceil((NSHeight(unionFrame) - NSHeight(iconFrame)) / 2);
+  labelFrame.origin.y =
+      std::floor((NSHeight(unionFrame) - NSHeight(labelFrame)) / 2);
+
+  [permissionLabel setFrame:labelFrame];
+  [permissionIcon setFrame:iconFrame];
+  [permissionView setFrame:unionFrame];
+
+  return permissionView.autorelease();
 }
 
 - (NSView*)titleWithHostname:(const std::string&)host {
@@ -301,25 +350,8 @@
   return checkbox.autorelease();
 }
 
-- (NSView*)customizationButton {
-  NSColor* linkColor =
-      gfx::SkColorToCalibratedNSColor(chrome_style::GetLinkColor());
-  base::scoped_nsobject<NSButton> customizeButton(
-      [[NSButton alloc] initWithFrame:NSZeroRect]);
-  [customizeButton setButtonType:NSMomentaryChangeButton];
-  [customizeButton setAttributedTitle:[[NSAttributedString alloc]
-      initWithString:l10n_util::GetNSString(IDS_PERMISSION_CUSTOMIZE)
-          attributes:@{ NSForegroundColorAttributeName : linkColor }]];
-  [customizeButton setTarget:self];
-  [customizeButton setAction:@selector(onCustomize:)];
-  [customizeButton setBordered:NO];
-  [customizeButton sizeToFit];
-  return customizeButton.autorelease();
-}
-
 - (NSView*)buttonWithTitle:(NSString*)title
-                    action:(SEL)action
-                pairedWith:(NSView*)pairedButton {
+                    action:(SEL)action {
   base::scoped_nsobject<NSButton> button(
       [[ConstrainedWindowButton alloc] initWithFrame:NSZeroRect]);
   [button setButtonType:NSMomentaryPushInButton];
@@ -327,16 +359,26 @@
   [button setTarget:self];
   [button setAction:action];
   [button sizeToFit];
-  if (pairedButton) {
-    NSRect buttonFrame = [button frame];
-    NSRect pairedFrame = [pairedButton frame];
-    CGFloat width = std::max(NSWidth(buttonFrame), NSWidth(pairedFrame));
-    [button setFrameSize:NSMakeSize(width, buttonFrame.size.height)];
-    [pairedButton setFrameSize:NSMakeSize(width, pairedFrame.size.height)];
-  }
   return button.autorelease();
 }
 
+- (NSView*)blockButton {
+  NSString* blockTitle = l10n_util::GetNSString(IDS_PERMISSION_DENY);
+  return [self buttonWithTitle:blockTitle
+                        action:@selector(onBlock:)];
+}
+
+- (NSView*)blockButtonWithCustomizeMenu {
+  menuDelegate_.reset(new MenuDelegate(self));
+  base::scoped_nsobject<SplitBlockButton> blockButton([[SplitBlockButton alloc]
+      initWithMenuDelegate:menuDelegate_.get()]);
+  [blockButton sizeToFit];
+  [blockButton setEnabled:YES];
+  [blockButton setAction:@selector(onBlock:)];
+  [blockButton setTarget:self];
+  return blockButton.autorelease();
+}
+
 - (NSView*)closeButton {
   int dimension = chrome_style::GetCloseButtonSize();
   NSRect frame = NSMakeRect(0, 0, dimension, dimension);
@@ -347,6 +389,15 @@
   return button.autorelease();
 }
 
+- (CGFloat)matchWidthsOf:(NSView*)viewA andOf:(NSView*)viewB {
+  NSRect frameA = [viewA frame];
+  NSRect frameB = [viewB frame];
+  CGFloat width = std::max(NSWidth(frameA), NSWidth(frameB));
+  [viewA setFrameSize:NSMakeSize(width, NSHeight(frameA))];
+  [viewB setFrameSize:NSMakeSize(width, NSHeight(frameB))];
+  return width;
+}
+
 - (void)ok:(id)sender {
   DCHECK(delegate_);
   delegate_->Closing();
@@ -378,4 +429,9 @@
   delegate_->ToggleAccept([checkbox tag], [checkbox state] == NSOnState);
 }
 
+- (void)onMenuItemClicked:(int)commandId {
+  DCHECK(commandId == 0);
+  [self onCustomize:nil];
+}
+
 @end  // implementation PermissionBubbleController
diff --git a/chrome/browser/ui/cocoa/website_settings/permission_bubble_controller_unittest.mm b/chrome/browser/ui/cocoa/website_settings/permission_bubble_controller_unittest.mm
index f7ea307..1a7a93c 100644
--- a/chrome/browser/ui/cocoa/website_settings/permission_bubble_controller_unittest.mm
+++ b/chrome/browser/ui/cocoa/website_settings/permission_bubble_controller_unittest.mm
@@ -11,6 +11,7 @@
 #import "chrome/browser/ui/cocoa/cocoa_test_helper.h"
 #include "chrome/browser/ui/cocoa/run_loop_testing.h"
 #import "chrome/browser/ui/cocoa/website_settings/permission_bubble_cocoa.h"
+#import "chrome/browser/ui/cocoa/website_settings/split_block_button.h"
 #include "chrome/browser/ui/website_settings/mock_permission_bubble_request.h"
 #include "grit/generated_resources.h"
 #include "ui/base/l10n/l10n_util.h"
@@ -26,6 +27,10 @@
 - (void)onCheckboxChanged:(id)sender;
 @end
 
+@interface SplitBlockButton (ExposedForTesting)
+- (NSMenu*)menu;
+@end
+
 namespace {
 const char* const kPermissionA = "Permission A";
 const char* const kPermissionB = "Permission B";
@@ -88,13 +93,33 @@
 
   NSTextField* FindTextFieldWithString(const std::string& text) {
     NSView* parent = base::mac::ObjCCastStrict<NSView>([controller_ bubble]);
-    NSString* title = base::SysUTF8ToNSString(text);
-    for (NSView* child in [parent subviews]) {
-      NSTextField* textField = base::mac::ObjCCast<NSTextField>(child);
-      if ([[textField stringValue] hasSuffix:title]) {
-        return textField;
+    return FindTextFieldWithString(parent, base::SysUTF8ToNSString(text));
+  }
+
+  NSTextField* FindTextFieldWithString(NSView* view, NSString* text) {
+    NSTextField* textField = nil;
+    for (NSView* child in [view subviews]) {
+      textField = base::mac::ObjCCast<NSTextField>(child);
+      if (![[textField stringValue] hasSuffix:text]) {
+        textField = FindTextFieldWithString(child, text);
+        if (textField)
+          break;
       }
     }
+    return textField;
+  }
+
+  NSMenuItem* FindCustomizeMenuItem() {
+    NSButton* button = FindButtonWithTitle(IDS_PERMISSION_DENY);
+    if (!button || ![button isKindOfClass:[SplitBlockButton class]])
+      return nil;
+    NSString* customize = l10n_util::GetNSString(IDS_PERMISSION_CUSTOMIZE);
+    SplitBlockButton* block_button =
+        base::mac::ObjCCast<SplitBlockButton>(button);
+    for (NSMenuItem* item in [[block_button menu] itemArray]) {
+      if ([[item title] isEqualToString:customize])
+        return item;
+    }
     return nil;
   }
 
@@ -122,7 +147,7 @@
   EXPECT_TRUE(FindButtonWithTitle(IDS_PERMISSION_ALLOW));
   EXPECT_TRUE(FindButtonWithTitle(IDS_PERMISSION_DENY));
   EXPECT_FALSE(FindButtonWithTitle(IDS_OK));
-  EXPECT_FALSE(FindButtonWithTitle(IDS_PERMISSION_CUSTOMIZE));
+  EXPECT_FALSE(FindCustomizeMenuItem());
 }
 
 TEST_F(PermissionBubbleControllerTest, ShowMultiplePermissions) {
@@ -141,7 +166,7 @@
 
   EXPECT_TRUE(FindButtonWithTitle(IDS_PERMISSION_ALLOW));
   EXPECT_TRUE(FindButtonWithTitle(IDS_PERMISSION_DENY));
-  EXPECT_TRUE(FindButtonWithTitle(IDS_PERMISSION_CUSTOMIZE));
+  EXPECT_TRUE(FindCustomizeMenuItem());
   EXPECT_FALSE(FindButtonWithTitle(IDS_OK));
 }
 
@@ -168,7 +193,7 @@
   EXPECT_TRUE(FindButtonWithTitle(IDS_OK));
   EXPECT_FALSE(FindButtonWithTitle(IDS_PERMISSION_ALLOW));
   EXPECT_FALSE(FindButtonWithTitle(IDS_PERMISSION_DENY));
-  EXPECT_FALSE(FindButtonWithTitle(IDS_PERMISSION_CUSTOMIZE));
+  EXPECT_FALSE(FindCustomizeMenuItem());
 }
 
 TEST_F(PermissionBubbleControllerTest, OK) {
@@ -232,5 +257,8 @@
          customizationMode:NO];
 
   EXPECT_CALL(*this, SetCustomizationMode()).Times(1);
-  [FindButtonWithTitle(IDS_PERMISSION_CUSTOMIZE) performClick:nil];
+  NSMenuItem* customize_item = FindCustomizeMenuItem();
+  EXPECT_TRUE(customize_item);
+  NSMenu* menu = [customize_item menu];
+  [menu performActionForItemAtIndex:[menu indexOfItem:customize_item]];
 }
diff --git a/chrome/browser/ui/cocoa/website_settings/permission_selector_button.h b/chrome/browser/ui/cocoa/website_settings/permission_selector_button.h
new file mode 100644
index 0000000..a285199
--- /dev/null
+++ b/chrome/browser/ui/cocoa/website_settings/permission_selector_button.h
@@ -0,0 +1,37 @@
+// 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.
+
+#ifndef CHROME_BROWSER_UI_COCOA_WEBSITE_SETTINGS_PERMISSION_SELECTOR_BUTTON_H_
+#define CHROME_BROWSER_UI_COCOA_WEBSITE_SETTINGS_PERMISSION_SELECTOR_BUTTON_H_
+
+#import <Cocoa/Cocoa.h>
+
+#include "base/mac/scoped_nsobject.h"
+#include "base/memory/scoped_ptr.h"
+#include "chrome/browser/ui/website_settings/permission_menu_model.h"
+#include "chrome/common/content_settings.h"
+
+@class MenuController;
+
+@interface PermissionSelectorButton : NSPopUpButton {
+ @private
+  scoped_ptr<PermissionMenuModel> menuModel_;
+  base::scoped_nsobject<MenuController> menuController_;
+}
+
+// Designated initializer.
+- (id)initWithPermissionInfo:
+          (const WebsiteSettingsUI::PermissionInfo&)permissionInfo
+                      forURL:(const GURL&)url
+                withCallback:(PermissionMenuModel::ChangeCallback)callback;
+
+// Returns the size of the button with the given title.
+- (NSSize)sizeForTitle:(NSString*)title;
+
+// Returns the largest possible size given all of the items in the menu.
+- (CGFloat)maxTitleWidthWithDefaultSetting:(ContentSetting)defaultSetting;
+
+@end
+
+#endif  // CHROME_BROWSER_UI_COCOA_WEBSITE_SETTINGS_PERMISSION_SELECTOR_BUTTON_H_
diff --git a/chrome/browser/ui/cocoa/website_settings/permission_selector_button.mm b/chrome/browser/ui/cocoa/website_settings/permission_selector_button.mm
new file mode 100644
index 0000000..49520a4
--- /dev/null
+++ b/chrome/browser/ui/cocoa/website_settings/permission_selector_button.mm
@@ -0,0 +1,84 @@
+// 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 "chrome/browser/ui/cocoa/website_settings/permission_selector_button.h"
+
+#include "base/strings/sys_string_conversions.h"
+#include "chrome/browser/ui/website_settings/website_settings_ui.h"
+#include "chrome/browser/ui/website_settings/website_settings_utils.h"
+#import "ui/base/cocoa/menu_controller.h"
+
+// The amount of horizontal space between the permission popup title and the
+// arrow icon.
+const CGFloat kPermissionButtonTitleRightPadding = 4;
+
+@implementation PermissionSelectorButton
+
+- (id)initWithPermissionInfo:
+          (const WebsiteSettingsUI::PermissionInfo&)permissionInfo
+                      forURL:(const GURL&)url
+                withCallback:(PermissionMenuModel::ChangeCallback)callback {
+  if (self = [super initWithFrame:NSMakeRect(0, 0, 1, 1) pullsDown:NO]) {
+    [self setFont:[NSFont systemFontOfSize:[NSFont smallSystemFontSize]]];
+    [self setBordered:NO];
+    [[self cell] setControlSize:NSSmallControlSize];
+
+    menuModel_.reset(new PermissionMenuModel(url, permissionInfo, callback));
+
+    menuController_.reset([[MenuController alloc] initWithModel:menuModel_.get()
+                                         useWithPopUpButtonCell:NO]);
+    [self setMenu:[menuController_ menu]];
+    [self selectItemWithTag:permissionInfo.setting];
+
+    // Set the button title.
+    base::scoped_nsobject<NSMenuItem> titleItem([[NSMenuItem alloc] init]);
+    base::string16 buttonTitle = WebsiteSettingsUI::PermissionActionToUIString(
+        permissionInfo.setting,
+        permissionInfo.default_setting,
+        permissionInfo.source);
+    [titleItem setTitle:base::SysUTF16ToNSString(buttonTitle)];
+    [[self cell] setUsesItemFromMenu:NO];
+    [[self cell] setMenuItem:titleItem.get()];
+    // Although the frame is reset, below, this sizes the cell properly.
+    [self sizeToFit];
+
+    // Size the button to just fit the visible title - not all of its items.
+    [self setFrameSize:[self sizeForTitle:[self title]]];
+  }
+  return self;
+}
+
+// Determine the size of a popup button with the given title.
+- (NSSize)sizeForTitle:(NSString*)title {
+  NSDictionary* textAttributes = @{NSFontAttributeName : [self font]};
+  NSSize titleSize = [title sizeWithAttributes:textAttributes];
+
+  NSRect frame = [self frame];
+  NSRect titleRect = [[self cell] titleRectForBounds:frame];
+  CGFloat width = titleSize.width + NSWidth(frame) - NSWidth(titleRect);
+
+  return NSMakeSize(width + kPermissionButtonTitleRightPadding,
+                    NSHeight(frame));
+}
+
+- (CGFloat)maxTitleWidthWithDefaultSetting:(ContentSetting)defaultSetting {
+  // Determine the largest possible size for this button.
+  CGFloat maxTitleWidth = 0;
+  for (NSMenuItem* item in [self itemArray]) {
+    base::string16 title = WebsiteSettingsUI::PermissionActionToUIString(
+        static_cast<ContentSetting>([item tag]),
+        defaultSetting,
+        content_settings::SETTING_SOURCE_USER);
+    NSSize size = [self sizeForTitle:base::SysUTF16ToNSString(title)];
+    maxTitleWidth = std::max(maxTitleWidth, size.width);
+  }
+  return maxTitleWidth;
+}
+
+// Accessor function for testing only.
+- (NSMenu*)permissionMenu {
+  return [menuController_ menu];
+}
+
+@end
diff --git a/chrome/browser/ui/cocoa/website_settings/permission_selector_button_unittest.mm b/chrome/browser/ui/cocoa/website_settings/permission_selector_button_unittest.mm
new file mode 100644
index 0000000..c819bec
--- /dev/null
+++ b/chrome/browser/ui/cocoa/website_settings/permission_selector_button_unittest.mm
@@ -0,0 +1,56 @@
+// 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 "chrome/browser/ui/cocoa/website_settings/permission_selector_button.h"
+
+#include "base/mac/scoped_nsobject.h"
+#import "chrome/browser/ui/cocoa/cocoa_test_helper.h"
+#include "chrome/browser/ui/website_settings/website_settings_ui.h"
+
+@interface PermissionSelectorButton (Testing)
+- (NSMenu*)permissionMenu;
+@end
+
+namespace {
+
+const ContentSettingsType kTestPermissionType =
+    CONTENT_SETTINGS_TYPE_MEDIASTREAM;
+
+class PermissionSelectorButtonTest : public CocoaTest {
+ public:
+  PermissionSelectorButtonTest() {
+    got_callback_ = false;
+    WebsiteSettingsUI::PermissionInfo test_info;
+    test_info.type = kTestPermissionType;
+    test_info.setting = CONTENT_SETTING_BLOCK;
+    test_info.source = content_settings::SETTING_SOURCE_USER;
+    GURL test_url("http://www.google.com");
+    PermissionMenuModel::ChangeCallback callback = base::Bind(
+        &PermissionSelectorButtonTest::Callback, base::Unretained(this));
+    view_.reset(
+        [[PermissionSelectorButton alloc] initWithPermissionInfo:test_info
+                                                          forURL:test_url
+                                                    withCallback:callback]);
+    [[test_window() contentView] addSubview:view_];
+  }
+
+  void Callback(const WebsiteSettingsUI::PermissionInfo& permission) {
+    EXPECT_TRUE(permission.type == kTestPermissionType);
+    got_callback_ = true;
+  }
+
+  bool got_callback_;
+  base::scoped_nsobject<PermissionSelectorButton> view_;
+};
+
+TEST_VIEW(PermissionSelectorButtonTest, view_);
+
+TEST_F(PermissionSelectorButtonTest, Callback) {
+  NSMenu* menu = [view_ permissionMenu];
+  NSMenuItem* item = [menu itemAtIndex:0];
+  [[item target] performSelector:[item action] withObject:item];
+  EXPECT_TRUE(got_callback_);
+}
+
+}  // namespace
diff --git a/chrome/browser/ui/cocoa/website_settings/split_block_button.h b/chrome/browser/ui/cocoa/website_settings/split_block_button.h
new file mode 100644
index 0000000..ddb3287
--- /dev/null
+++ b/chrome/browser/ui/cocoa/website_settings/split_block_button.h
@@ -0,0 +1,36 @@
+// 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.
+
+#ifndef CHROME_BROWSER_UI_COCOA_WEBSITE_SETTINGS_SPLIT_BLOCK_BUTTON_
+#define CHROME_BROWSER_UI_COCOA_WEBSITE_SETTINGS_SPLIT_BLOCK_BUTTON_
+
+#import <Cocoa/Cocoa.h>
+
+#import "chrome/browser/ui/cocoa/constrained_window/constrained_window_button.h"
+#include "grit/generated_resources.h"
+#include "ui/base/models/simple_menu_model.h"
+
+@class SplitButtonPopUpCell;
+@class SplitButtonTitleCell;
+
+// Block ('deny') button for the permissions bubble.  Subclassed from
+// ConstrainedWindowButton, so that it shares styling, but contains two cells
+// instead of just one.  The left cell behaves as a normal button, and when
+// clicked, calls the button's |action| on its |target|.  The right cell behaves
+// as a NSPopUpButtonCell, and implements a single-item menu.
+@interface SplitBlockButton : ConstrainedWindowButton {
+ @private
+  base::scoped_nsobject<SplitButtonTitleCell> leftCell_;
+  base::scoped_nsobject<SplitButtonPopUpCell> rightCell_;
+
+  ui::ScopedCrTrackingArea leftTrackingArea_;
+  ui::ScopedCrTrackingArea rightTrackingArea_;
+}
+
+// Designated initializer.
+- (id)initWithMenuDelegate:(ui::SimpleMenuModel::Delegate*)menuDelegate;
+
+@end
+
+#endif  // CHROME_BROWSER_UI_COCOA_WEBSITE_SETTINGS_SPLIT_BLOCK_BUTTON_
diff --git a/chrome/browser/ui/cocoa/website_settings/split_block_button.mm b/chrome/browser/ui/cocoa/website_settings/split_block_button.mm
new file mode 100644
index 0000000..e247a23
--- /dev/null
+++ b/chrome/browser/ui/cocoa/website_settings/split_block_button.mm
@@ -0,0 +1,340 @@
+// 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 "chrome/browser/ui/cocoa/website_settings/split_block_button.h"
+
+#include <cmath>
+
+#include "base/logging.h"
+#include "base/mac/scoped_nsobject.h"
+#include "skia/ext/skia_utils_mac.h"
+#import "ui/base/cocoa/menu_controller.h"
+#include "ui/base/l10n/l10n_util_mac.h"
+#include "ui/base/models/simple_menu_model.h"
+
+namespace {
+
+enum MouseLocation {
+  kInsideLeftCell,
+  kInsideRightCell,
+  kNotInside,
+};
+
+enum CornerType {
+  kRounded,
+  kAngled,
+};
+
+NSBezierPath* PathWithCornerStyles(NSRect frame,
+                                   CornerType leftCornerStyle,
+                                   CornerType rightCornerStyle) {
+  base::scoped_nsobject<NSBezierPath> path([[NSBezierPath bezierPath] retain]);
+  const CGFloat x0 = NSMinX(frame);
+  const CGFloat x1 = NSMaxX(frame);
+  const CGFloat y0 = NSMinY(frame);
+  const CGFloat y1 = NSMaxY(frame);
+  const CGFloat radius = 2;
+
+  // Start at the center bottom.  Draw left and up, including both left corners.
+  [path moveToPoint:NSMakePoint(std::floor((x1 - x0) * .5), y0)];
+  if (leftCornerStyle == kAngled) {
+    [path lineToPoint:NSMakePoint(x0, y0)];
+    [path lineToPoint:NSMakePoint(x0, y1)];
+  } else {
+    [path appendBezierPathWithArcFromPoint:NSMakePoint(x0, y0)
+                                   toPoint:NSMakePoint(x0, y0 + radius)
+                                    radius:radius];
+    [path appendBezierPathWithArcFromPoint:NSMakePoint(x0, y1)
+                                   toPoint:NSMakePoint(x0 + radius, y1)
+                                    radius:radius];
+  }
+  // Draw through the upper right-hand and lower-right-hand corners.
+  if (rightCornerStyle == kAngled) {
+    [path lineToPoint:NSMakePoint(x1, y1)];
+    [path lineToPoint:NSMakePoint(x1, y0)];
+  } else {
+    [path appendBezierPathWithArcFromPoint:NSMakePoint(x1, y1)
+                                   toPoint:NSMakePoint(x1, y1 - radius)
+                                    radius:radius];
+    [path appendBezierPathWithArcFromPoint:NSMakePoint(x1, y0)
+                                   toPoint:NSMakePoint(x1 - radius, y0)
+                                    radius:radius];
+  }
+  return path.autorelease();
+}
+
+void DrawBezel(id<ConstrainedWindowButtonDrawableCell>cell,
+               CornerType leftCorners,
+               CornerType rightCorners,
+               NSRect frame,
+               NSView* view) {
+  if ([cell isMouseInside]) {
+    base::scoped_nsobject<NSBezierPath> path(
+        [PathWithCornerStyles(frame, leftCorners, rightCorners) retain]);
+    [ConstrainedWindowButton DrawBackgroundAndShadowForPath:path
+                                                   withCell:cell
+                                                     inView:view];
+    [ConstrainedWindowButton DrawInnerHighlightForPath:path
+                                              withCell:cell
+                                                inView:view];
+  }
+}
+
+}  // namespace
+
+// A button cell used by SplitBlockButton, containing the title.
+@interface SplitButtonTitleCell : ConstrainedWindowButtonCell
+- (NSRect)rect;
+@end
+
+// A button cell used by SplitBlockButton, containing the popup menu.
+@interface SplitButtonPopUpCell :
+    NSPopUpButtonCell<ConstrainedWindowButtonDrawableCell> {
+ @private
+  BOOL isMouseInside_;
+  base::scoped_nsobject<MenuController> menuController_;
+  scoped_ptr<ui::SimpleMenuModel> menuModel_;
+}
+
+// Designated initializer.
+- (id)initWithMenuDelegate:(ui::SimpleMenuModel::Delegate*)menuDelegate;
+
+- (NSRect)rect;
+
+@end
+
+@implementation SplitBlockButton
+
+- (id)initWithMenuDelegate:(ui::SimpleMenuModel::Delegate*)menuDelegate {
+  if (self = [super initWithFrame:NSZeroRect]) {
+    leftCell_.reset([[SplitButtonTitleCell alloc] init]);
+    rightCell_.reset([[SplitButtonPopUpCell alloc]
+        initWithMenuDelegate:menuDelegate]);
+    [leftCell_ setTitle:l10n_util::GetNSString(IDS_PERMISSION_DENY)];
+    [leftCell_ setEnabled:YES];
+    [rightCell_ setEnabled:YES];
+  }
+  return self;
+}
+
++ (Class)cellClass {
+  return nil;
+}
+
+- (NSString*)title {
+  return [leftCell_ title];
+}
+
+- (void)setAction:(SEL)action {
+  [leftCell_ setAction:action];
+}
+
+- (void)setTarget:(id)target {
+  [leftCell_ setTarget:target];
+}
+
+- (void)drawRect:(NSRect)rect {
+  // Copy the base class:  inset to leave room for the shadow.
+  --rect.size.height;
+
+  // This function assumes that |rect| is always the same as [self frame].
+  // If that changes, the drawing functions will need to be adjusted.
+  const CGFloat radius = 2;
+  NSBezierPath* path = [NSBezierPath bezierPathWithRoundedRect:rect
+                                                       xRadius:radius
+                                                       yRadius:radius];
+  [ConstrainedWindowButton DrawBackgroundAndShadowForPath:path
+                                                 withCell:nil
+                                                   inView:self];
+
+  // Use intersection rects for the cell drawing, to ensure the height
+  // adjustment is honored.
+  [leftCell_ setControlView:self];
+  [leftCell_ drawWithFrame:NSIntersectionRect(rect, [self leftCellRect])
+                    inView:self];
+
+  [rightCell_ setControlView:self];
+  [rightCell_ drawWithFrame:NSIntersectionRect(rect, [self rightCellRect])
+                     inView:self];
+
+  // Draw the border.
+  path = [NSBezierPath bezierPathWithRoundedRect:NSInsetRect(rect, 0.5, 0.5)
+                                         xRadius:radius
+                                         yRadius:radius];
+  [ConstrainedWindowButton DrawBorderForPath:path
+                                    withCell:nil
+                                      inView:self];
+}
+
+- (void)updateTrackingAreas {
+  [self updateTrackingArea:&leftTrackingArea_
+                   forCell:leftCell_
+                  withRect:[self leftCellRect]];
+
+  [self updateTrackingArea:&rightTrackingArea_
+                   forCell:rightCell_
+                  withRect:[self rightCellRect]];
+}
+
+- (void)updateTrackingArea:(ui::ScopedCrTrackingArea*)trackingArea
+                   forCell:(id<ConstrainedWindowButtonDrawableCell>)cell
+                  withRect:(NSRect)rect {
+  DCHECK(trackingArea);
+  NSTrackingAreaOptions options = NSTrackingMouseEnteredAndExited |
+                                  NSTrackingActiveInActiveApp;
+  [self removeTrackingArea:trackingArea->get()];
+  trackingArea->reset([[CrTrackingArea alloc] initWithRect:rect
+                                                   options:options
+                                                     owner:self
+                                                  userInfo:nil]);
+  [self addTrackingArea:trackingArea->get()];
+}
+
+- (void)mouseEntered:(NSEvent*)theEvent {
+  [self mouseMoved:theEvent];
+}
+
+- (void)mouseExited:(NSEvent*)theEvent {
+  [self mouseMoved:theEvent];
+}
+
+- (void)mouseMoved:(NSEvent*)theEvent {
+  MouseLocation location = [self mouseLocationForEvent:theEvent];
+  [rightCell_ setIsMouseInside:NO];
+  [leftCell_ setIsMouseInside:NO];
+  if (location == kInsideLeftCell)
+    [leftCell_ setIsMouseInside:YES];
+  else if (location == kInsideRightCell)
+    [rightCell_ setIsMouseInside:YES];
+  [self setNeedsDisplay:YES];
+}
+
+- (void)mouseDown:(NSEvent*)theEvent {
+  MouseLocation downLocation = [self mouseLocationForEvent:theEvent];
+  NSCell* focusCell = nil;
+  NSRect rect;
+  if (downLocation == kInsideLeftCell) {
+    focusCell = leftCell_.get();
+    rect = [self leftCellRect];
+  } else if (downLocation == kInsideRightCell) {
+    focusCell = rightCell_.get();
+    rect = [self rightCellRect];
+  }
+
+  do {
+    MouseLocation location = [self mouseLocationForEvent:theEvent];
+    if (location != kNotInside) {
+      [focusCell setHighlighted:YES];
+      [self setNeedsDisplay:YES];
+
+      if ([focusCell trackMouse:theEvent
+                         inRect:rect
+                         ofView:self
+                   untilMouseUp:NO]) {
+        [focusCell setState:![focusCell state]];
+        [self setNeedsDisplay:YES];
+        break;
+      } else {
+        // The above -trackMouse call returned NO, so we know that
+        // the mouse left the cell before a mouse up event occurred.
+        [focusCell setHighlighted:NO];
+        [self setNeedsDisplay:YES];
+      }
+    }
+    const NSUInteger mask = NSLeftMouseUpMask | NSLeftMouseDraggedMask;
+    theEvent = [[self window] nextEventMatchingMask:mask];
+  } while ([theEvent type] != NSLeftMouseUp);
+}
+
+- (MouseLocation)mouseLocationForEvent:(NSEvent*)theEvent {
+  MouseLocation location = kNotInside;
+  NSPoint mousePoint = [self convertPoint:[theEvent locationInWindow]
+                                 fromView:nil];
+  if ([self mouse:mousePoint inRect:[leftCell_ rect]])
+    location = kInsideLeftCell;
+  else if ([self mouse:mousePoint inRect:[self rightCellRect]])
+    location = kInsideRightCell;
+  return location;
+}
+
+- (void)sizeToFit {
+  NSSize leftSize = [leftCell_ cellSize];
+  NSSize rightSize = [rightCell_ cellSize];
+  NSSize size = NSMakeSize(
+      std::max(leftSize.width + rightSize.width,
+               constrained_window_button::kButtonMinWidth),
+      std::max(leftSize.height, rightSize.height));
+  [self setFrameSize:size];
+}
+
+- (NSRect)leftCellRect {
+  return [leftCell_ rect];
+}
+
+- (NSRect)rightCellRect {
+  NSRect leftFrame, rightFrame;
+  NSDivideRect([self bounds], &leftFrame, &rightFrame,
+               NSWidth([self leftCellRect]), NSMinXEdge);
+  return rightFrame;
+}
+
+// Accessor for Testing.
+- (NSMenu*)menu {
+  return [rightCell_ menu];
+}
+
+@end
+
+@implementation SplitButtonTitleCell
+
+- (void)drawBezelWithFrame:(NSRect)frame inView:(NSView *)controlView {
+  DrawBezel(self, kRounded, kAngled, frame, controlView);
+}
+
+- (NSRect)rect {
+  NSSize size = [self cellSize];
+  return NSMakeRect(0, 0, std::ceil(size.width), std::ceil(size.height));
+}
+
+@end
+
+@implementation SplitButtonPopUpCell
+
+@synthesize isMouseInside = isMouseInside_;
+
+- (id)initWithMenuDelegate:(ui::SimpleMenuModel::Delegate*)menuDelegate {
+  if (self = [super initTextCell:@"" pullsDown:YES]) {
+    [self setControlSize:NSSmallControlSize];
+    [self setArrowPosition:NSPopUpArrowAtCenter];
+    [self setBordered:NO];
+    [self setBackgroundColor:[NSColor clearColor]];
+    menuModel_.reset(new ui::SimpleMenuModel(menuDelegate));
+    menuModel_->AddItemWithStringId(0, IDS_PERMISSION_CUSTOMIZE);
+    menuController_.reset(
+        [[MenuController alloc] initWithModel:menuModel_.get()
+                       useWithPopUpButtonCell:NO]);
+    [self setMenu:[menuController_ menu]];
+    [self setUsesItemFromMenu:NO];
+  }
+  return self;
+}
+
+- (void)drawBorderAndBackgroundWithFrame:(NSRect)frame
+                                  inView:(NSView*)controlView {
+  // The arrow, which is what should be drawn by the base class, is drawn
+  // during -drawBezelWithFrame.  The only way to draw our own border with
+  // the default arrow is to make the cell unbordered, and draw the border
+  // from -drawBorderAndBackgroundWithFrame, rather than simply overriding
+  // -drawBezelWithFrame.
+  DrawBezel(self, kAngled, kRounded, frame, controlView);
+  [super drawBorderAndBackgroundWithFrame:NSOffsetRect(frame, -4, 0)
+                                   inView:controlView];
+}
+
+- (NSRect)rect {
+  NSSize size = [self cellSize];
+  return NSMakeRect(0, 0, std::ceil(size.width), std::ceil(size.height));
+}
+
+@end
diff --git a/chrome/browser/ui/cocoa/website_settings_bubble_controller.mm b/chrome/browser/ui/cocoa/website_settings_bubble_controller.mm
index a7de40b..9e36489 100644
--- a/chrome/browser/ui/cocoa/website_settings_bubble_controller.mm
+++ b/chrome/browser/ui/cocoa/website_settings_bubble_controller.mm
@@ -8,6 +8,7 @@
 
 #import <AppKit/AppKit.h>
 
+#include "base/mac/bind_objc_block.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/sys_string_conversions.h"
 #import "chrome/browser/certificate_viewer.h"
@@ -17,6 +18,8 @@
 #import "chrome/browser/ui/cocoa/info_bubble_view.h"
 #import "chrome/browser/ui/cocoa/info_bubble_window.h"
 #import "chrome/browser/ui/cocoa/location_bar/location_bar_view_mac.h"
+#import "chrome/browser/ui/cocoa/website_settings/permission_selector_button.h"
+#include "chrome/browser/ui/website_settings/permission_menu_model.h"
 #include "chrome/browser/ui/website_settings/website_settings_utils.h"
 #include "chrome/common/url_constants.h"
 #include "content/public/browser/cert_store.h"
@@ -83,10 +86,6 @@
 // The amount of horizontal space between a permission label and the popup.
 const CGFloat kPermissionPopUpXSpacing = 3;
 
-// The amount of horizontal space between the permission popup title and the
-// arrow icon.
-const CGFloat kPermissionButtonTitleRightPadding = 4;
-
 // The extra space to the left of the first tab in the tab strip.
 const CGFloat kTabStripXPadding = kFramePadding;
 
@@ -833,129 +832,57 @@
   return button.get();
 }
 
-// Determine the size of a popup button with the given title.
-- (NSSize)sizeForPopUpButton:(NSPopUpButton*)button
-                   withTitle:(NSString*)title {
-  NSDictionary* textAttributes =
-      [NSDictionary dictionaryWithObject:[button font]
-                                  forKey:NSFontAttributeName];
-  NSSize titleSize = [title sizeWithAttributes:textAttributes];
-
-  NSRect buttonFrame = [button frame];
-  NSRect titleRect = [[button cell] titleRectForBounds:buttonFrame];
-  CGFloat width = titleSize.width + NSWidth(buttonFrame) - NSWidth(titleRect);
-
-  return NSMakeSize(width + kPermissionButtonTitleRightPadding,
-                    NSHeight(buttonFrame));
-}
-
 // Add a pop-up button for |permissionInfo| to the given view.
 - (NSPopUpButton*)addPopUpButtonForPermission:
     (const WebsiteSettingsUI::PermissionInfo&)permissionInfo
                                        toView:(NSView*)view
                                       atPoint:(NSPoint)point {
-  // Use an arbitrary width and height; it will be sized to fit.
-  NSRect frame = NSMakeRect(point.x, point.y, 1, 1);
-  base::scoped_nsobject<NSPopUpButton> button(
-      [[NSPopUpButton alloc] initWithFrame:frame pullsDown:NO]);
-  [button setFont:[NSFont systemFontOfSize:[NSFont smallSystemFontSize]]];
-  [button setBordered:NO];
-  [[button cell] setControlSize:NSSmallControlSize];
-  [button setTag:permissionInfo.type];
-  [button setAction:@selector(permissionValueChanged:)];
-  [button setTarget:self];
 
-  // Create the popup menu.
-  // TODO(dubroy): Refactor this code to use PermissionMenuModel.
-
-  // Media stream permission only support "Always allow" for https.
-  if (permissionInfo.type != CONTENT_SETTINGS_TYPE_MEDIASTREAM ||
-      (webContents_ && webContents_->GetURL().SchemeIsSecure())) {
-    [button addItemWithTitle:
-        l10n_util::GetNSString(IDS_WEBSITE_SETTINGS_MENU_ITEM_ALLOW)];
-    [[button lastItem] setTag:CONTENT_SETTING_ALLOW];
-  }
-
-  // Fullscreen does not support "Always block".
-  if (permissionInfo.type != CONTENT_SETTINGS_TYPE_FULLSCREEN) {
-    [button addItemWithTitle:
-        l10n_util::GetNSString(IDS_WEBSITE_SETTINGS_MENU_ITEM_BLOCK)];
-    [[button lastItem] setTag:CONTENT_SETTING_BLOCK];
-  }
-
-  [button addItemWithTitle:l10n_util::GetNSStringF(
-      IDS_WEBSITE_SETTINGS_DEFAULT_PERMISSION_LABEL,
-      WebsiteSettingsUI::PermissionValueToUIString(
-          permissionInfo.default_setting))];
-  [[button lastItem] setTag:CONTENT_SETTING_DEFAULT];
-
-  [button selectItemWithTag:permissionInfo.setting];
-
-  // Set the button title.
-  base::scoped_nsobject<NSMenuItem> titleItem([[NSMenuItem alloc] init]);
-  base::string16 buttonTitle = WebsiteSettingsUI::PermissionActionToUIString(
-      permissionInfo.setting,
-      permissionInfo.default_setting,
-      permissionInfo.source);
-  [titleItem setTitle:base::SysUTF16ToNSString(buttonTitle)];
-  [[button cell] setUsesItemFromMenu:NO];
-  [[button cell] setMenuItem:titleItem.get()];
-  [button sizeToFit];
-
+  GURL url = webContents_ ? webContents_->GetURL() : GURL();
+  __block WebsiteSettingsBubbleController* weakSelf = self;
+  PermissionMenuModel::ChangeCallback callback =
+      base::BindBlock(^(const WebsiteSettingsUI::PermissionInfo& permission) {
+          [weakSelf onPermissionChanged:permission.type to:permission.setting];
+      });
+  base::scoped_nsobject<PermissionSelectorButton> button(
+      [[PermissionSelectorButton alloc] initWithPermissionInfo:permissionInfo
+                                                        forURL:url
+                                                  withCallback:callback]);
   // Determine the largest possible size for this button.
-  CGFloat maxTitleWidth = 0;
-  for (NSInteger i = 0; i < [button numberOfItems]; ++i) {
-    base::string16 title = WebsiteSettingsUI::PermissionActionToUIString(
-        static_cast<ContentSetting>([[button itemAtIndex:i] tag]),
-        permissionInfo.default_setting,
-        content_settings::SETTING_SOURCE_USER);
-    NSSize size = [self sizeForPopUpButton:button
-                                 withTitle:base::SysUTF16ToNSString(title)];
-    maxTitleWidth = std::max(maxTitleWidth, size.width);
-  }
+  CGFloat maxTitleWidth =
+      [button maxTitleWidthWithDefaultSetting:permissionInfo.default_setting];
+
   // Ensure the containing view is large enough to contain the button with its
   // widest possible title.
   NSRect containerFrame = [view frame];
   containerFrame.size.width = std::max(
       NSWidth(containerFrame), point.x + maxTitleWidth + kFramePadding);
   [view setFrame:containerFrame];
-
-  // Size the button to just fit the title.
-  [button setFrameSize:[self sizeForPopUpButton:button
-                                      withTitle:[button title]]];
-
   [view addSubview:button.get()];
   return button.get();
 }
 
+// Called when the user changes the setting of a permission.
+- (void)onPermissionChanged:(ContentSettingsType)permissionType
+                         to:(ContentSetting)newSetting {
+  if (presenter_)
+    presenter_->OnSitePermissionChanged(permissionType, newSetting);
+}
+
 // Called when the user changes the selected segment in the segmented control.
 - (void)tabSelected:(id)sender {
   [tabView_ selectTabViewItemAtIndex:[segmentedControl_ selectedSegment]];
 }
 
-// Handler for the permission-changing menus.
-- (void)permissionValueChanged:(id)sender {
-  DCHECK([sender isKindOfClass:[NSPopUpButton class]]);
-  NSPopUpButton* button = static_cast<NSPopUpButton*>(sender);
-  ContentSettingsType type = static_cast<ContentSettingsType>([button tag]);
-  ContentSetting newSetting = static_cast<ContentSetting>(
-      [[button selectedItem] tag]);
-  if (presenter_.get())
-    presenter_->OnSitePermissionChanged(type, newSetting);
-}
-
 // Adds a new row to the UI listing the permissions. Returns the amount of
 // vertical space that was taken up by the row.
 - (NSPoint)addPermission:
     (const WebsiteSettingsUI::PermissionInfo&)permissionInfo
                   toView:(NSView*)view
                  atPoint:(NSPoint)point {
-  // TODO(dubroy): Remove this check by refactoring GetPermissionIcon to take
-  // the PermissionInfo object as its argument.
-  ContentSetting setting = permissionInfo.setting == CONTENT_SETTING_DEFAULT ?
-      permissionInfo.default_setting : permissionInfo.setting;
-  NSImage* image = WebsiteSettingsUI::GetPermissionIcon(
-      permissionInfo.type, setting).ToNSImage();
+  base::scoped_nsobject<NSImage> image(
+      [WebsiteSettingsUI::GetPermissionIcon(permissionInfo).ToNSImage()
+          retain]);
   NSImageView* imageView = [self addImageWithSize:[image size]
                                            toView:view
                                           atPoint:point];
@@ -1019,8 +946,10 @@
     (const WebsiteSettingsUI::CookieInfo&)cookieInfo
                   toView:(NSView*)view
                  atPoint:(NSPoint)point {
-  NSImage* image = WebsiteSettingsUI::GetPermissionIcon(
-      CONTENT_SETTINGS_TYPE_COOKIES, CONTENT_SETTING_ALLOW).ToNSImage();
+  WebsiteSettingsUI::PermissionInfo info;
+  info.type = CONTENT_SETTINGS_TYPE_COOKIES;
+  info.setting = CONTENT_SETTING_ALLOW;
+  NSImage* image = WebsiteSettingsUI::GetPermissionIcon(info).ToNSImage();
   NSImageView* imageView = [self addImageWithSize:[image size]
                                            toView:view
                                           atPoint:point];
diff --git a/chrome/browser/ui/cocoa/wrench_menu/wrench_menu_controller_unittest.mm b/chrome/browser/ui/cocoa/wrench_menu/wrench_menu_controller_unittest.mm
index a58b6d7..774b559 100644
--- a/chrome/browser/ui/cocoa/wrench_menu/wrench_menu_controller_unittest.mm
+++ b/chrome/browser/ui/cocoa/wrench_menu/wrench_menu_controller_unittest.mm
@@ -7,10 +7,9 @@
 #include "base/strings/sys_string_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/app/chrome_command_ids.h"
-#include "chrome/browser/sync/glue/session_model_associator.h"
 #include "chrome/browser/sync/glue/device_info.h"
 #include "chrome/browser/sync/profile_sync_service_factory.h"
-#include "chrome/browser/sync/sessions2/sessions_sync_manager.h"
+#include "chrome/browser/sync/sessions/sessions_sync_manager.h"
 #include "chrome/browser/ui/cocoa/cocoa_profile_test.h"
 #include "chrome/browser/ui/cocoa/run_loop_testing.h"
 #import "chrome/browser/ui/cocoa/toolbar/toolbar_controller.h"
@@ -30,6 +29,7 @@
 #include "testing/gtest_mac.h"
 #include "testing/platform_test.h"
 #include "ui/base/l10n/l10n_util.h"
+#include "ui/base/resource/resource_bundle.h"
 
 namespace {
 
@@ -67,28 +67,18 @@
     controller_.reset([[WrenchMenuController alloc] initWithBrowser:browser()]);
     fake_model_.reset(new MockWrenchMenuModel);
 
-    if (!CommandLine::ForCurrentProcess()->HasSwitch(
-            switches::kDisableSyncSessionsV2)) {
-      manager_.reset(new browser_sync::SessionsSyncManager(
-          profile(),
-          this,
-          scoped_ptr<browser_sync::LocalSessionEventRouter>(
-              new DummyRouter())));
-      manager_->MergeDataAndStartSyncing(
-          syncer::SESSIONS,
-          syncer::SyncDataList(),
-          scoped_ptr<syncer::SyncChangeProcessor>(
-              new syncer::FakeSyncChangeProcessor),
-          scoped_ptr<syncer::SyncErrorFactory>(
-              new syncer::SyncErrorFactoryMock));
-    } else {
-      ProfileSyncService* sync_service =
-          ProfileSyncServiceFactory::GetInstance()->GetForProfile(profile());
-      associator_.reset(new browser_sync::SessionModelAssociator(
-          sync_service, true));
-      associator_->SetCurrentMachineTagForTesting(
-          GetLocalSyncCacheGUID());
-    }
+    manager_.reset(new browser_sync::SessionsSyncManager(
+        profile(),
+        this,
+        scoped_ptr<browser_sync::LocalSessionEventRouter>(
+            new DummyRouter())));
+    manager_->MergeDataAndStartSyncing(
+        syncer::SESSIONS,
+        syncer::SyncDataList(),
+        scoped_ptr<syncer::SyncChangeProcessor>(
+            new syncer::FakeSyncChangeProcessor),
+        scoped_ptr<syncer::SyncErrorFactory>(
+            new syncer::SyncErrorFactoryMock));
   }
 
   virtual scoped_ptr<browser_sync::DeviceInfo> GetLocalDeviceInfo()
@@ -106,27 +96,16 @@
   }
 
   void RegisterRecentTabs(RecentTabsBuilderTestHelper* helper) {
-    if (!CommandLine::ForCurrentProcess()->HasSwitch(
-            switches::kDisableSyncSessionsV2)) {
-      helper->ExportToSessionsSyncManager(manager_.get());
-    } else {
-      helper->ExportToSessionModelAssociator(associator_.get());
-    }
+    helper->ExportToSessionsSyncManager(manager_.get());
   }
 
   browser_sync::OpenTabsUIDelegate* GetOpenTabsDelegate() {
-    if (!CommandLine::ForCurrentProcess()->HasSwitch(
-            switches::kDisableSyncSessionsV2)) {
-      return manager_.get();
-    } else {
-      return associator_.get();
-    }
+    return manager_.get();
   }
 
   virtual void TearDown() OVERRIDE {
     fake_model_.reset();
     controller_.reset();
-    associator_.reset();
     manager_.reset();
     CocoaProfileTest::TearDown();
   }
@@ -140,8 +119,6 @@
   scoped_ptr<MockWrenchMenuModel> fake_model_;
 
  private:
-  // TODO(tim): Bug 98892. Remove associator_ once sessions2 is the default.
-  scoped_ptr<browser_sync::SessionModelAssociator> associator_;
   scoped_ptr<browser_sync::SessionsSyncManager> manager_;
 };
 
diff --git a/chrome/browser/ui/collected_cookies_infobar_delegate.cc b/chrome/browser/ui/collected_cookies_infobar_delegate.cc
index 92310ce..b435abf 100644
--- a/chrome/browser/ui/collected_cookies_infobar_delegate.cc
+++ b/chrome/browser/ui/collected_cookies_infobar_delegate.cc
@@ -5,8 +5,8 @@
 #include "chrome/browser/ui/collected_cookies_infobar_delegate.h"
 
 #include "base/logging.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/web_contents.h"
 #include "grit/generated_resources.h"
 #include "grit/theme_resources.h"
@@ -31,7 +31,8 @@
   return IDR_INFOBAR_COOKIE;
 }
 
-InfoBarDelegate::Type CollectedCookiesInfoBarDelegate::GetInfoBarType() const {
+infobars::InfoBarDelegate::Type
+CollectedCookiesInfoBarDelegate::GetInfoBarType() const {
   return PAGE_ACTION_TYPE;
 }
 
diff --git a/chrome/browser/ui/content_settings/content_setting_bubble_model_unittest.cc b/chrome/browser/ui/content_settings/content_setting_bubble_model_unittest.cc
index 50b1239..f6fe5f4 100644
--- a/chrome/browser/ui/content_settings/content_setting_bubble_model_unittest.cc
+++ b/chrome/browser/ui/content_settings/content_setting_bubble_model_unittest.cc
@@ -8,7 +8,6 @@
 #include "chrome/browser/content_settings/host_content_settings_map.h"
 #include "chrome/browser/content_settings/tab_specific_content_settings.h"
 #include "chrome/browser/custom_handlers/protocol_handler_registry.h"
-#include "chrome/browser/infobars/infobar_delegate.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/media/media_capture_devices_dispatcher.h"
 #include "chrome/browser/profiles/profile.h"
@@ -17,6 +16,7 @@
 #include "chrome/common/content_settings.h"
 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
 #include "chrome/test/base/testing_profile.h"
+#include "components/infobars/core/infobar_delegate.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/test/web_contents_tester.h"
 #include "grit/generated_resources.h"
diff --git a/chrome/browser/ui/content_settings/media_setting_changed_infobar_delegate.cc b/chrome/browser/ui/content_settings/media_setting_changed_infobar_delegate.cc
index 1a924b4..b5cbc99 100644
--- a/chrome/browser/ui/content_settings/media_setting_changed_infobar_delegate.cc
+++ b/chrome/browser/ui/content_settings/media_setting_changed_infobar_delegate.cc
@@ -5,8 +5,8 @@
 #include "chrome/browser/ui/content_settings/media_setting_changed_infobar_delegate.h"
 
 #include "base/logging.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/web_contents.h"
 #include "grit/generated_resources.h"
 #include "grit/theme_resources.h"
@@ -31,8 +31,8 @@
   return IDR_INFOBAR_MEDIA_STREAM_CAMERA;
 }
 
-InfoBarDelegate::Type
-    MediaSettingChangedInfoBarDelegate::GetInfoBarType() const {
+infobars::InfoBarDelegate::Type
+MediaSettingChangedInfoBarDelegate::GetInfoBarType() const {
   return PAGE_ACTION_TYPE;
 }
 
diff --git a/chrome/browser/ui/elide_url.cc b/chrome/browser/ui/elide_url.cc
index ba48aae..330de41 100644
--- a/chrome/browser/ui/elide_url.cc
+++ b/chrome/browser/ui/elide_url.cc
@@ -4,6 +4,7 @@
 
 #include "chrome/browser/ui/elide_url.h"
 
+#include "base/logging.h"
 #include "base/strings/string_split.h"
 #include "base/strings/utf_string_conversions.h"
 #include "net/base/escape.h"
diff --git a/chrome/browser/ui/extensions/application_launch.cc b/chrome/browser/ui/extensions/application_launch.cc
index fc131d5..b96c1ab 100644
--- a/chrome/browser/ui/extensions/application_launch.cc
+++ b/chrome/browser/ui/extensions/application_launch.cc
@@ -8,7 +8,6 @@
 
 #include "apps/launcher.h"
 #include "base/command_line.h"
-#include "base/metrics/field_trial.h"
 #include "base/metrics/histogram.h"
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/app_mode/app_mode_utils.h"
@@ -18,7 +17,6 @@
 #include "chrome/browser/extensions/launch_util.h"
 #include "chrome/browser/extensions/tab_helper.h"
 #include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/signin/signin_manager_factory.h"
 #include "chrome/browser/ui/app_list/app_list_service.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_commands.h"
@@ -30,11 +28,9 @@
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/browser/web_applications/web_app.h"
 #include "chrome/common/chrome_switches.h"
-#include "chrome/common/extensions/extension_constants.h"
 #include "chrome/common/extensions/manifest_handlers/app_launch_info.h"
 #include "chrome/common/extensions/manifest_url_handler.h"
 #include "chrome/common/url_constants.h"
-#include "components/signin/core/browser/signin_manager.h"
 #include "content/public/browser/render_view_host.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/browser/web_contents_view.h"
@@ -45,7 +41,6 @@
 #include "extensions/common/constants.h"
 #include "extensions/common/extension.h"
 #include "grit/generated_resources.h"
-#include "ui/base/l10n/l10n_util.h"
 #include "ui/base/window_open_disposition.h"
 #include "ui/gfx/rect.h"
 
@@ -53,10 +48,6 @@
 #include "chrome/browser/ui/browser_commands_mac.h"
 #endif
 
-#if defined(OS_WIN)
-#include "win8/util/win8_util.h"
-#endif
-
 using content::WebContents;
 using extensions::Extension;
 using extensions::ExtensionPrefs;
@@ -215,17 +206,7 @@
                                                                params.container,
                                                                extension);
 
-  Browser* browser = NULL;
-#if defined(OS_WIN)
-  // On Windows 8's single window Metro mode we don't allow multiple Chrome
-  // windows to be created. We instead attempt to reuse an existing Browser
-  // window.
-  if (win8::IsSingleWindowMetroMode())
-    browser = chrome::FindBrowserWithProfile(profile, params.desktop_type);
-
-#endif
-  if (!browser)
-    browser = new Browser(browser_params);
+  Browser* browser = new Browser(browser_params);
 
   WebContents* web_contents = chrome::AddSelectedTabWithURL(
       browser, url, content::PAGE_TRANSITION_AUTO_TOPLEVEL);
@@ -347,29 +328,6 @@
     // window we can open them on the right desktop.
     PerAppSettingsServiceFactory::GetForBrowserContext(profile)->
         SetDesktopLastLaunchedFrom(extension->id(), params.desktop_type);
-#if !defined(OS_CHROMEOS)
-    SigninManager* signin_manager =
-        SigninManagerFactory::GetForProfile(profile);
-    if (extension->id() != extension_misc::kSettingsAppId &&
-        signin_manager && signin_manager->GetAuthenticatedUsername().empty()) {
-      const char kEnforceSigninToUseAppsFieldTrial[] = "EnforceSigninToUseApps";
-
-      std::string field_trial_value =
-          base::FieldTrialList::FindFullName(kEnforceSigninToUseAppsFieldTrial);
-
-      // Only enforce signin if the field trial is set.
-      if (!field_trial_value.empty()) {
-        GURL gurl(l10n_util::GetStringFUTF8(
-            IDS_APP_LAUNCH_NOT_SIGNED_IN_LINK,
-            base::UTF8ToUTF16(extension->id())));
-        chrome::NavigateParams navigate_params(profile, gurl,
-                                               content::PAGE_TRANSITION_LINK);
-        navigate_params.host_desktop_type = params.desktop_type;
-        chrome::Navigate(&navigate_params);
-        return NULL;
-      }
-    }
-#endif
 
     apps::LaunchPlatformAppWithCommandLine(
         profile, extension, params.command_line, params.current_directory);
diff --git a/chrome/browser/ui/extensions/extension_enable_flow.cc b/chrome/browser/ui/extensions/extension_enable_flow.cc
index b89155f..3b6c1a9 100644
--- a/chrome/browser/ui/extensions/extension_enable_flow.cc
+++ b/chrome/browser/ui/extensions/extension_enable_flow.cc
@@ -110,7 +110,8 @@
 }
 
 void ExtensionEnableFlow::StartObserving() {
-  registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
+  registrar_.Add(this,
+                 chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
                  content::Source<Profile>(profile_));
   registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOAD_ERROR,
                  content::Source<Profile>(profile_));
@@ -126,7 +127,7 @@
                                   const content::NotificationSource& source,
                                   const content::NotificationDetails& details) {
   switch (type) {
-    case chrome::NOTIFICATION_EXTENSION_LOADED: {
+    case chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED: {
       const Extension* extension =
           content::Details<const Extension>(details).ptr();
       if (extension->id() == extension_id_) {
diff --git a/chrome/browser/ui/extensions/extension_install_ui_default.cc b/chrome/browser/ui/extensions/extension_install_ui_default.cc
index 1196638..8e0ccfd 100644
--- a/chrome/browser/ui/extensions/extension_install_ui_default.cc
+++ b/chrome/browser/ui/extensions/extension_install_ui_default.cc
@@ -11,7 +11,6 @@
 #include "chrome/browser/extensions/extension_install_prompt.h"
 #include "chrome/browser/extensions/theme_installed_infobar_delegate.h"
 #include "chrome/browser/infobars/confirm_infobar_delegate.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/prefs/incognito_mode_prefs.h"
 #include "chrome/browser/profiles/profile.h"
@@ -33,6 +32,7 @@
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/common/chrome_switches.h"
 #include "chrome/common/url_constants.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/notification_service.h"
 #include "content/public/browser/web_contents.h"
diff --git a/chrome/browser/ui/extensions/extension_installed_bubble.cc b/chrome/browser/ui/extensions/extension_installed_bubble.cc
index 2788880..d9c47d3 100644
--- a/chrome/browser/ui/extensions/extension_installed_bubble.cc
+++ b/chrome/browser/ui/extensions/extension_installed_bubble.cc
@@ -54,8 +54,9 @@
   // fired, but all of the EXTENSION_LOADED Observers have run. Only then can we
   // be sure that a BrowserAction or PageAction has had views created which we
   // can inspect for the purpose of previewing of pointing to them.
-  registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
-      content::Source<Profile>(browser->profile()));
+  registrar_.Add(this,
+                 chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
+                 content::Source<Profile>(browser->profile()));
   registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
       content::Source<Profile>(browser->profile()));
   registrar_.Add(this, chrome::NOTIFICATION_BROWSER_CLOSING,
@@ -86,7 +87,7 @@
     const content::NotificationSource& source,
     const content::NotificationDetails& details) {
   switch (type) {
-    case chrome::NOTIFICATION_EXTENSION_LOADED: {
+    case chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED: {
       const Extension* extension = Details<const Extension>(details).ptr();
       if (extension == extension_) {
         animation_wait_retries_ = 0;
diff --git a/chrome/browser/ui/hung_plugin_tab_helper.cc b/chrome/browser/ui/hung_plugin_tab_helper.cc
index 229f044..139dc95 100644
--- a/chrome/browser/ui/hung_plugin_tab_helper.cc
+++ b/chrome/browser/ui/hung_plugin_tab_helper.cc
@@ -12,9 +12,9 @@
 #include "build/build_config.h"
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/infobars/confirm_infobar_delegate.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/common/chrome_version_info.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/browser_child_process_host_iterator.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/child_process_data.h"
@@ -132,10 +132,10 @@
  public:
   // Creates a hung plugin infobar and delegate and adds the infobar to
   // |infobar_service|.  Returns the infobar if it was successfully added.
-  static InfoBar* Create(InfoBarService* infobar_service,
-                         HungPluginTabHelper* helper,
-                         int plugin_child_id,
-                         const base::string16& plugin_name);
+  static infobars::InfoBar* Create(InfoBarService* infobar_service,
+                                   HungPluginTabHelper* helper,
+                                   int plugin_child_id,
+                                   const base::string16& plugin_name);
 
  private:
   HungPluginInfoBarDelegate(HungPluginTabHelper* helper,
@@ -158,10 +158,11 @@
 };
 
 // static
-InfoBar* HungPluginInfoBarDelegate::Create(InfoBarService* infobar_service,
-                                           HungPluginTabHelper* helper,
-                                           int plugin_child_id,
-                                           const base::string16& plugin_name) {
+infobars::InfoBar* HungPluginInfoBarDelegate::Create(
+    InfoBarService* infobar_service,
+    HungPluginTabHelper* helper,
+    int plugin_child_id,
+    const base::string16& plugin_name) {
   return infobar_service->AddInfoBar(ConfirmInfoBarDelegate::CreateInfoBar(
       scoped_ptr<ConfirmInfoBarDelegate>(new HungPluginInfoBarDelegate(
           helper, plugin_child_id, plugin_name))));
@@ -221,7 +222,7 @@
   base::string16 name;
 
   // Possibly-null if we're not showing an infobar right now.
-  InfoBar* infobar;
+  infobars::InfoBar* infobar;
 
   // Time to delay before re-showing the infobar for a hung plugin. This is
   // increased each time the user cancels it.
@@ -325,7 +326,8 @@
     const content::NotificationSource& source,
     const content::NotificationDetails& details) {
   DCHECK_EQ(chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED, type);
-  InfoBar* infobar = content::Details<InfoBar::RemovedDetails>(details)->first;
+  infobars::InfoBar* infobar =
+      content::Details<infobars::InfoBar::RemovedDetails>(details)->first;
   for (PluginStateMap::iterator i = hung_plugins_.begin();
        i != hung_plugins_.end(); ++i) {
     PluginState* state = i->second.get();
diff --git a/chrome/browser/ui/hung_plugin_tab_helper.h b/chrome/browser/ui/hung_plugin_tab_helper.h
index 4457797..6cf1a39 100644
--- a/chrome/browser/ui/hung_plugin_tab_helper.h
+++ b/chrome/browser/ui/hung_plugin_tab_helper.h
@@ -16,12 +16,14 @@
 #include "content/public/browser/web_contents_observer.h"
 #include "content/public/browser/web_contents_user_data.h"
 
-class InfoBarDelegate;
-
 namespace base {
 class FilePath;
 }
 
+namespace infobars {
+class InfoBarDelegate;
+}
+
 // Manages per-tab state with regard to hung plugins. This only handles
 // Pepper plugins which we know are windowless. Hung NPAPI plugins (which
 // may have native windows) can not be handled with infobars and have a
diff --git a/chrome/browser/ui/libgtk2ui/gtk2_key_bindings_handler.cc b/chrome/browser/ui/libgtk2ui/gtk2_key_bindings_handler.cc
index 1ade488..ac18bb1 100644
--- a/chrome/browser/ui/libgtk2ui/gtk2_key_bindings_handler.cc
+++ b/chrome/browser/ui/libgtk2ui/gtk2_key_bindings_handler.cc
@@ -329,7 +329,7 @@
       break;
     case GTK_MOVEMENT_BUFFER_ENDS:
       command = (count > 0 ? TextEditCommandAuraLinux::MOVE_TO_END_OF_DOCUMENT :
-                 TextEditCommandAuraLinux::MOVE_TO_BEGINING_OF_PARAGRAPH);
+                 TextEditCommandAuraLinux::MOVE_TO_BEGINING_OF_DOCUMENT);
       break;
     default:
       // GTK_MOVEMENT_PARAGRAPHS and GTK_MOVEMENT_HORIZONTAL_PAGES have
diff --git a/chrome/browser/ui/libgtk2ui/gtk2_ui.h b/chrome/browser/ui/libgtk2ui/gtk2_ui.h
index 0e78131..c27bcc5 100644
--- a/chrome/browser/ui/libgtk2ui/gtk2_ui.h
+++ b/chrome/browser/ui/libgtk2ui/gtk2_ui.h
@@ -256,9 +256,6 @@
   // Image cache of lazily created images.
   mutable ImageCache gtk_images_;
 
-  // Whether to use the Gtk2 version of the native theme.
-  bool use_gtk_;
-
   DISALLOW_COPY_AND_ASSIGN(Gtk2UI);
 };
 
diff --git a/chrome/browser/ui/libgtk2ui/native_theme_gtk2.cc b/chrome/browser/ui/libgtk2ui/native_theme_gtk2.cc
index 7c08b1d..5369ac2 100644
--- a/chrome/browser/ui/libgtk2ui/native_theme_gtk2.cc
+++ b/chrome/browser/ui/libgtk2ui/native_theme_gtk2.cc
@@ -230,6 +230,8 @@
       return GetButtonStyle()->base[GTK_STATE_SELECTED];
     case kColorId_ButtonHoverColor:
       return GetButtonStyle()->text[GTK_STATE_PRELIGHT];
+    case kColorId_ButtonHoverBackgroundColor:
+      return GetButtonStyle()->bg[GTK_STATE_PRELIGHT];
 
     // Textfield
     case kColorId_TextfieldDefaultColor:
diff --git a/chrome/browser/ui/omnibox/alternate_nav_infobar_delegate.cc b/chrome/browser/ui/omnibox/alternate_nav_infobar_delegate.cc
index cb80a34..3b9df35 100644
--- a/chrome/browser/ui/omnibox/alternate_nav_infobar_delegate.cc
+++ b/chrome/browser/ui/omnibox/alternate_nav_infobar_delegate.cc
@@ -9,9 +9,9 @@
 #include "chrome/browser/autocomplete/shortcuts_backend_factory.h"
 #include "chrome/browser/history/history_service.h"
 #include "chrome/browser/history/history_service_factory.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/profiles/profile.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/web_contents.h"
 #include "grit/generated_resources.h"
 #include "grit/theme_resources.h"
@@ -40,7 +40,7 @@
     const base::string16& text,
     const AutocompleteMatch& match,
     const GURL& search_url)
-    : InfoBarDelegate(),
+    : infobars::InfoBarDelegate(),
       profile_(profile),
       text_(text),
       match_(match),
@@ -96,6 +96,7 @@
   return IDR_INFOBAR_ALT_NAV_URL;
 }
 
-InfoBarDelegate::Type AlternateNavInfoBarDelegate::GetInfoBarType() const {
+infobars::InfoBarDelegate::Type AlternateNavInfoBarDelegate::GetInfoBarType()
+    const {
   return PAGE_ACTION_TYPE;
 }
diff --git a/chrome/browser/ui/omnibox/alternate_nav_infobar_delegate.h b/chrome/browser/ui/omnibox/alternate_nav_infobar_delegate.h
index 0b6a16a..e15ba90 100644
--- a/chrome/browser/ui/omnibox/alternate_nav_infobar_delegate.h
+++ b/chrome/browser/ui/omnibox/alternate_nav_infobar_delegate.h
@@ -7,13 +7,13 @@
 
 #include "base/memory/scoped_ptr.h"
 #include "chrome/browser/autocomplete/autocomplete_match.h"
-#include "chrome/browser/infobars/infobar_delegate.h"
+#include "components/infobars/core/infobar_delegate.h"
 
 namespace content {
 class WebContents;
 }
 
-class AlternateNavInfoBarDelegate : public InfoBarDelegate {
+class AlternateNavInfoBarDelegate : public infobars::InfoBarDelegate {
  public:
   virtual ~AlternateNavInfoBarDelegate();
 
@@ -35,7 +35,7 @@
                               const GURL& search_url);
 
   // Returns an alternate nav infobar that owns |delegate|.
-  static scoped_ptr<InfoBar> CreateInfoBar(
+  static scoped_ptr<infobars::InfoBar> CreateInfoBar(
       scoped_ptr<AlternateNavInfoBarDelegate> delegate);
 
   // InfoBarDelegate:
diff --git a/chrome/browser/ui/omnibox/omnibox_controller.cc b/chrome/browser/ui/omnibox/omnibox_controller.cc
index 8f0f484..a6c3ef3 100644
--- a/chrome/browser/ui/omnibox/omnibox_controller.cc
+++ b/chrome/browser/ui/omnibox/omnibox_controller.cc
@@ -87,8 +87,7 @@
   autocomplete_controller_->Start(AutocompleteInput(
       user_text, cursor_position, base::string16(), current_url,
       current_page_classification, prevent_inline_autocomplete,
-      prefer_keyword, allow_exact_keyword_match,
-      AutocompleteInput::ALL_MATCHES));
+      prefer_keyword, allow_exact_keyword_match, true));
 }
 
 void OmniboxController::OnResultChanged(bool default_match_changed) {
diff --git a/chrome/browser/ui/omnibox/omnibox_current_page_delegate_impl.cc b/chrome/browser/ui/omnibox/omnibox_current_page_delegate_impl.cc
index 356e2f6..5800fcf 100644
--- a/chrome/browser/ui/omnibox/omnibox_current_page_delegate_impl.cc
+++ b/chrome/browser/ui/omnibox/omnibox_current_page_delegate_impl.cc
@@ -123,12 +123,12 @@
 void OmniboxCurrentPageDelegateImpl::SetSuggestionToPrefetch(
       const InstantSuggestion& suggestion) {
   content::WebContents* web_contents = controller_->GetWebContents();
-  SearchTabHelper* search_tab_helper =
-      SearchTabHelper::FromWebContents(web_contents);
-  if (search_tab_helper->IsSearchResultsPage()) {
+  if (web_contents &&
+      SearchTabHelper::FromWebContents(web_contents)->IsSearchResultsPage()) {
     if (chrome::ShouldPrefetchSearchResultsOnSRP() ||
         chrome::ShouldPrefetchSearchResults()) {
-      search_tab_helper->SetSuggestionToPrefetch(suggestion);
+      SearchTabHelper::FromWebContents(web_contents)->
+          SetSuggestionToPrefetch(suggestion);
     }
   } else if (chrome::ShouldPrefetchSearchResults()) {
       InstantSearchPrerenderer* prerenderer =
diff --git a/chrome/browser/ui/omnibox/omnibox_edit_model.cc b/chrome/browser/ui/omnibox/omnibox_edit_model.cc
index 1ec70e5..a34048f 100644
--- a/chrome/browser/ui/omnibox/omnibox_edit_model.cc
+++ b/chrome/browser/ui/omnibox/omnibox_edit_model.cc
@@ -234,6 +234,8 @@
     }
   }
 
+  UMA_HISTOGRAM_BOOLEAN("Omnibox.SaveStateForTabSwitch.UserInputInProgress",
+                        user_input_in_progress_);
   return State(
       user_input_in_progress_, user_text_, view_->GetGrayTextAutocompletion(),
       keyword_, is_keyword_hint_,
@@ -635,7 +637,8 @@
       old_input.cursor_position(), base::ASCIIToUTF16("com"),
       GURL(), old_input.current_page_classification(),
       old_input.prevent_inline_autocomplete(), old_input.prefer_keyword(),
-      old_input.allow_exact_keyword_match(), old_input.matches_requested());
+      old_input.allow_exact_keyword_match(),
+      old_input.want_asynchronous_matches());
     AutocompleteMatch url_match(
         autocomplete_controller()->history_url_provider()->SuggestExactInput(
             input.text(), input.canonicalized_url(), false));
@@ -916,8 +919,7 @@
     // |permanent_text_| is empty.
     autocomplete_controller()->StartZeroSuggest(AutocompleteInput(
         permanent_text_, base::string16::npos, base::string16(),
-        delegate_->GetURL(), ClassifyPage(), false, false, true,
-        AutocompleteInput::ALL_MATCHES));
+        delegate_->GetURL(), ClassifyPage(), false, false, true, true));
   }
 
   if (user_input_in_progress_ || !in_revert_)
diff --git a/chrome/browser/ui/panels/panel_manager.cc b/chrome/browser/ui/panels/panel_manager.cc
index da61f92..afddc37 100644
--- a/chrome/browser/ui/panels/panel_manager.cc
+++ b/chrome/browser/ui/panels/panel_manager.cc
@@ -27,10 +27,6 @@
 #include "ui/base/x/x11_util.h"
 #endif
 
-#if defined(OS_WIN)
-#include "win8/util/win8_util.h"
-#endif
-
 namespace {
 // Maxmium width of a panel is based on a factor of the working area.
 #if defined(OS_CHROMEOS)
@@ -124,12 +120,6 @@
   }
 #endif  // USE_X11 && !OS_CHROMEOS
 
-#if defined(OS_WIN)
-  // No panels in Metro mode.
-  if (win8::IsSingleWindowMetroMode())
-    return false;
-#endif // OS_WIN
-
   chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel();
   if (channel == chrome::VersionInfo::CHANNEL_STABLE ||
       channel == chrome::VersionInfo::CHANNEL_BETA) {
diff --git a/chrome/browser/ui/passwords/manage_passwords_bubble.cc b/chrome/browser/ui/passwords/manage_passwords_bubble.cc
new file mode 100644
index 0000000..87efd80
--- /dev/null
+++ b/chrome/browser/ui/passwords/manage_passwords_bubble.cc
@@ -0,0 +1,18 @@
+// 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.
+
+#include "chrome/browser/ui/passwords/manage_passwords_bubble.h"
+
+#include "base/metrics/histogram.h"
+#include "chrome/browser/ui/passwords/manage_passwords_bubble_model.h"
+
+ManagePasswordsBubble::ManagePasswordsBubble(content::WebContents* contents,
+                                             DisplayReason reason)
+    : model_(new ManagePasswordsBubbleModel(contents)) {
+  model()->OnBubbleShown(reason);
+}
+
+ManagePasswordsBubble::~ManagePasswordsBubble() {
+  model()->OnBubbleHidden();
+}
diff --git a/chrome/browser/ui/passwords/manage_passwords_bubble.h b/chrome/browser/ui/passwords/manage_passwords_bubble.h
new file mode 100644
index 0000000..f759ea9
--- /dev/null
+++ b/chrome/browser/ui/passwords/manage_passwords_bubble.h
@@ -0,0 +1,40 @@
+// 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.
+
+#ifndef CHROME_BROWSER_UI_PASSWORDS_MANAGE_PASSWORDS_BUBBLE_H_
+#define CHROME_BROWSER_UI_PASSWORDS_MANAGE_PASSWORDS_BUBBLE_H_
+
+#include "base/basictypes.h"
+#include "base/memory/scoped_ptr.h"
+#include "components/password_manager/core/browser/password_manager_metrics_util.h"
+
+class ManagePasswordsBubbleModel;
+
+namespace content {
+class WebContents;
+}  // namespace content
+
+// Base class for platform-specific password management bubble views. This class
+// is responsible for creating and destroying the model associated with the view
+// and providing a platform-agnostic interface to the bubble.
+class ManagePasswordsBubble {
+ public:
+  enum DisplayReason { AUTOMATIC, USER_ACTION };
+
+ protected:
+  // Creates a ManagePasswordsBubble. |contents| is used only to create a
+  // ManagePasswordsBubbleModel; this class neither takes ownership of the
+  // object nor stores the pointer.
+  ManagePasswordsBubble(content::WebContents* contents, DisplayReason reason);
+  ~ManagePasswordsBubble();
+
+  ManagePasswordsBubbleModel* model() { return model_.get(); }
+
+ private:
+  scoped_ptr<ManagePasswordsBubbleModel> model_;
+
+  DISALLOW_COPY_AND_ASSIGN(ManagePasswordsBubble);
+};
+
+#endif  // CHROME_BROWSER_UI_PASSWORDS_MANAGE_PASSWORDS_BUBBLE_H_
diff --git a/chrome/browser/ui/passwords/manage_passwords_bubble_model.cc b/chrome/browser/ui/passwords/manage_passwords_bubble_model.cc
index 5c06cbf..687dca2 100644
--- a/chrome/browser/ui/passwords/manage_passwords_bubble_model.cc
+++ b/chrome/browser/ui/passwords/manage_passwords_bubble_model.cc
@@ -7,9 +7,7 @@
 #include "chrome/browser/password_manager/password_store_factory.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_finder.h"
-#include "chrome/browser/ui/chrome_pages.h"
 #include "chrome/browser/ui/passwords/manage_passwords_bubble_ui_controller.h"
-#include "chrome/common/url_constants.h"
 #include "components/password_manager/core/browser/password_store.h"
 #include "grit/generated_resources.h"
 #include "ui/base/l10n/l10n_util.h"
@@ -20,7 +18,10 @@
 ManagePasswordsBubbleModel::ManagePasswordsBubbleModel(
     content::WebContents* web_contents)
     : content::WebContentsObserver(web_contents),
-      web_contents_(web_contents) {
+      web_contents_(web_contents),
+      display_disposition_(
+          password_manager::metrics_util::AUTOMATIC_WITH_PASSWORD_PENDING),
+      dismissal_reason_(password_manager::metrics_util::NOT_DISPLAYED) {
   ManagePasswordsBubbleUIController* manage_passwords_bubble_ui_controller =
       ManagePasswordsBubbleUIController::FromWebContents(web_contents_);
 
@@ -33,7 +34,7 @@
       (manage_passwords_bubble_state_ == PASSWORD_TO_BE_SAVED) ?
           IDS_SAVE_PASSWORD : IDS_MANAGE_PASSWORDS);
   pending_credentials_ =
-      manage_passwords_bubble_ui_controller->pending_credentials();
+      manage_passwords_bubble_ui_controller->PendingCredentials();
   best_matches_ = manage_passwords_bubble_ui_controller->best_matches();
   manage_link_ =
       l10n_util::GetStringUTF16(IDS_OPTIONS_PASSWORDS_MANAGE_PASSWORDS_LINK);
@@ -41,11 +42,50 @@
 
 ManagePasswordsBubbleModel::~ManagePasswordsBubbleModel() {}
 
+void ManagePasswordsBubbleModel::OnBubbleShown(
+    ManagePasswordsBubble::DisplayReason reason) {
+  DCHECK(WaitingToSavePassword() ||
+         reason == ManagePasswordsBubble::USER_ACTION);
+  if (reason == ManagePasswordsBubble::USER_ACTION) {
+    if (WaitingToSavePassword()) {
+      display_disposition_ =
+          password_manager::metrics_util::MANUAL_WITH_PASSWORD_PENDING;
+    } else {
+      // TODO(mkwst): Deal with "Never save passwords" once we've decided how
+      // that flow should work.
+      display_disposition_ =
+          password_manager::metrics_util::MANUAL_MANAGE_PASSWORDS;
+    }
+  } else {
+    display_disposition_ =
+        password_manager::metrics_util::AUTOMATIC_WITH_PASSWORD_PENDING;
+  }
+  password_manager::metrics_util::LogUIDisplayDisposition(display_disposition_);
+
+  // Default to a dismissal reason of "no interaction". If the user interacts
+  // with the button in such a way that it closes, we'll reset this value
+  // accordingly.
+  dismissal_reason_ = password_manager::metrics_util::NO_DIRECT_INTERACTION;
+}
+
+void ManagePasswordsBubbleModel::OnBubbleHidden() {
+  if (dismissal_reason_ == password_manager::metrics_util::NOT_DISPLAYED)
+    return;
+
+  password_manager::metrics_util::LogUIDismissalReason(dismissal_reason_);
+}
+
+void ManagePasswordsBubbleModel::OnCloseWithoutLogging() {
+  dismissal_reason_ = password_manager::metrics_util::NOT_DISPLAYED;
+}
+
 void ManagePasswordsBubbleModel::OnNopeClicked() {
+  dismissal_reason_ = password_manager::metrics_util::CLICKED_NOPE;
   manage_passwords_bubble_state_ = PASSWORD_TO_BE_SAVED;
 }
 
 void ManagePasswordsBubbleModel::OnNeverForThisSiteClicked() {
+  dismissal_reason_ = password_manager::metrics_util::CLICKED_NEVER;
   ManagePasswordsBubbleUIController* manage_passwords_bubble_ui_controller =
       ManagePasswordsBubbleUIController::FromWebContents(web_contents_);
   manage_passwords_bubble_ui_controller->NeverSavePassword();
@@ -54,6 +94,7 @@
 }
 
 void ManagePasswordsBubbleModel::OnSaveClicked() {
+  dismissal_reason_ = password_manager::metrics_util::CLICKED_SAVE;
   ManagePasswordsBubbleUIController* manage_passwords_bubble_ui_controller =
       ManagePasswordsBubbleUIController::FromWebContents(web_contents_);
   manage_passwords_bubble_ui_controller->SavePassword();
@@ -61,9 +102,14 @@
   manage_passwords_bubble_state_ = MANAGE_PASSWORDS;
 }
 
+void ManagePasswordsBubbleModel::OnDoneClicked() {
+  dismissal_reason_ = password_manager::metrics_util::CLICKED_DONE;
+}
+
 void ManagePasswordsBubbleModel::OnManageLinkClicked() {
-  chrome::ShowSettingsSubPage(chrome::FindBrowserWithWebContents(web_contents_),
-                              chrome::kPasswordManagerSubPage);
+  dismissal_reason_ = password_manager::metrics_util::CLICKED_MANAGE;
+  ManagePasswordsBubbleUIController::FromWebContents(web_contents_)
+      ->NavigateToPasswordManagerSettingsPage();
 }
 
 void ManagePasswordsBubbleModel::OnPasswordAction(
diff --git a/chrome/browser/ui/passwords/manage_passwords_bubble_model.h b/chrome/browser/ui/passwords/manage_passwords_bubble_model.h
index b8cc326..d2c3718 100644
--- a/chrome/browser/ui/passwords/manage_passwords_bubble_model.h
+++ b/chrome/browser/ui/passwords/manage_passwords_bubble_model.h
@@ -5,7 +5,9 @@
 #ifndef CHROME_BROWSER_UI_PASSWORDS_MANAGE_PASSWORDS_BUBBLE_MODEL_H_
 #define CHROME_BROWSER_UI_PASSWORDS_MANAGE_PASSWORDS_BUBBLE_MODEL_H_
 
+#include "chrome/browser/ui/passwords/manage_passwords_bubble.h"
 #include "components/autofill/core/common/password_form.h"
+#include "components/password_manager/core/browser/password_manager_metrics_util.h"
 #include "content/public/browser/web_contents_observer.h"
 
 class ManagePasswordsIconController;
@@ -18,9 +20,6 @@
 // password management actions.
 class ManagePasswordsBubbleModel : public content::WebContentsObserver {
  public:
-  explicit ManagePasswordsBubbleModel(content::WebContents* web_contents);
-  virtual ~ManagePasswordsBubbleModel();
-
   enum ManagePasswordsBubbleState {
     PASSWORD_TO_BE_SAVED,
     MANAGE_PASSWORDS,
@@ -29,6 +28,20 @@
 
   enum PasswordAction { REMOVE_PASSWORD, ADD_PASSWORD };
 
+  // Creates a ManagePasswordsBubbleModel, which holds a raw pointer to the
+  // WebContents in which it lives. Defaults to a display disposition of
+  // AUTOMATIC_WITH_PASSWORD_PENDING, and a dismissal reason of NOT_DISPLAYED.
+  // The bubble's state is updated from the ManagePasswordsBubbleUIController
+  // associated with |web_contents| upon creation.
+  explicit ManagePasswordsBubbleModel(content::WebContents* web_contents);
+  virtual ~ManagePasswordsBubbleModel();
+
+  // Called by the view code when the bubble is shown.
+  void OnBubbleShown(ManagePasswordsBubble::DisplayReason reason);
+
+  // Called by the view code when the bubble is hidden.
+  void OnBubbleHidden();
+
   // Called by the view code when the "Nope" button in clicked by the user.
   void OnNopeClicked();
 
@@ -39,6 +52,9 @@
   // Called by the view code when the save button in clicked by the user.
   void OnSaveClicked();
 
+  // Called by the view code when the "Done" button is clicked by the user.
+  void OnDoneClicked();
+
   // Called by the view code when the manage link is clicked by the user.
   void OnManageLinkClicked();
 
@@ -47,6 +63,10 @@
   void OnPasswordAction(const autofill::PasswordForm& password_form,
                         PasswordAction action);
 
+  // Called by the view code when the bubble is closed without ever displaying
+  // content to the user. We shouldn't log to UMA in this case.
+  void OnCloseWithoutLogging();
+
   ManagePasswordsBubbleState manage_passwords_bubble_state() {
     return manage_passwords_bubble_state_;
   }
@@ -62,6 +82,22 @@
   const autofill::PasswordFormMap& best_matches() { return best_matches_; }
   const base::string16& manage_link() { return manage_link_; }
 
+  // Gets and sets the reason the bubble was displayed; exposed for testing.
+  password_manager::metrics_util::UIDisplayDisposition display_disposition()
+      const {
+    return display_disposition_;
+  }
+
+  // Gets the reason the bubble was dismissed; exposed for testing.
+  password_manager::metrics_util::UIDismissalReason dismissal_reason() const {
+    return dismissal_reason_;
+  }
+
+  // State setter; exposed for testing.
+  void set_manage_passwords_bubble_state(ManagePasswordsBubbleState state) {
+    manage_passwords_bubble_state_ = state;
+  }
+
  private:
   // content::WebContentsObserver
   virtual void WebContentsDestroyed(
@@ -74,6 +110,9 @@
   autofill::PasswordFormMap best_matches_;
   base::string16 manage_link_;
 
+  password_manager::metrics_util::UIDisplayDisposition display_disposition_;
+  password_manager::metrics_util::UIDismissalReason dismissal_reason_;
+
   DISALLOW_COPY_AND_ASSIGN(ManagePasswordsBubbleModel);
 };
 
diff --git a/chrome/browser/ui/passwords/manage_passwords_bubble_model_unittest.cc b/chrome/browser/ui/passwords/manage_passwords_bubble_model_unittest.cc
new file mode 100644
index 0000000..2ee54d6
--- /dev/null
+++ b/chrome/browser/ui/passwords/manage_passwords_bubble_model_unittest.cc
@@ -0,0 +1,242 @@
+// 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.
+
+#include "base/metrics/histogram_samples.h"
+#include "base/prefs/pref_service.h"
+#include "base/test/statistics_delta_reader.h"
+#include "chrome/browser/ui/passwords/manage_passwords_bubble.h"
+#include "chrome/browser/ui/passwords/manage_passwords_bubble_model.h"
+#include "chrome/browser/ui/passwords/manage_passwords_bubble_ui_controller_mock.h"
+#include "chrome/test/base/testing_profile.h"
+#include "components/password_manager/core/browser/password_manager_metrics_util.h"
+#include "content/public/test/test_browser_thread_bundle.h"
+#include "content/public/test/web_contents_tester.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+const char kUIDismissalReasonMetric[] = "PasswordManager.UIDismissalReason";
+
+class ManagePasswordsBubbleModelTest : public testing::Test {
+ public:
+  ManagePasswordsBubbleModelTest()
+      : test_web_contents_(
+            content::WebContentsTester::CreateTestWebContents(&profile_,
+                                                              NULL)) {}
+
+  virtual void SetUp() OVERRIDE {
+    // Create the test UIController here so that it's bound to
+    // |test_web_contents_| and therefore accessible to the model.
+    new ManagePasswordsBubbleUIControllerMock(test_web_contents_.get());
+
+    model_.reset(new ManagePasswordsBubbleModel(test_web_contents_.get()));
+  }
+
+  virtual void TearDown() OVERRIDE { model_.reset(); }
+
+  void PretendPasswordWaiting() {
+    model_->set_manage_passwords_bubble_state(
+        ManagePasswordsBubbleModel::PASSWORD_TO_BE_SAVED);
+    model_->OnBubbleShown(ManagePasswordsBubble::AUTOMATIC);
+  }
+
+  void PretendManagingPasswords() {
+    model_->set_manage_passwords_bubble_state(
+        ManagePasswordsBubbleModel::MANAGE_PASSWORDS);
+    model_->OnBubbleShown(ManagePasswordsBubble::USER_ACTION);
+  }
+
+  ManagePasswordsBubbleUIControllerMock* controller() {
+    return reinterpret_cast<ManagePasswordsBubbleUIControllerMock*>(
+        ManagePasswordsBubbleUIController::FromWebContents(
+            test_web_contents_.get()));
+  }
+
+ protected:
+  scoped_ptr<ManagePasswordsBubbleModel> model_;
+
+ private:
+  content::TestBrowserThreadBundle thread_bundle_;
+  TestingProfile profile_;
+  scoped_ptr<content::WebContents> test_web_contents_;
+};
+
+TEST_F(ManagePasswordsBubbleModelTest, DefaultValues) {
+  EXPECT_EQ(model_->display_disposition(),
+            password_manager::metrics_util::AUTOMATIC_WITH_PASSWORD_PENDING);
+  EXPECT_EQ(model_->dismissal_reason(),
+            password_manager::metrics_util::NOT_DISPLAYED);
+  EXPECT_FALSE(controller()->saved_password());
+  EXPECT_FALSE(controller()->never_saved_password());
+}
+
+TEST_F(ManagePasswordsBubbleModelTest, CloseWithoutLogging) {
+  base::StatisticsDeltaReader statistics_delta_reader;
+  model_->OnCloseWithoutLogging();
+  model_->OnBubbleHidden();
+  EXPECT_EQ(model_->dismissal_reason(),
+            password_manager::metrics_util::NOT_DISPLAYED);
+  EXPECT_FALSE(controller()->saved_password());
+  EXPECT_FALSE(controller()->never_saved_password());
+
+  scoped_ptr<base::HistogramSamples> samples(
+      statistics_delta_reader.GetHistogramSamplesSinceCreation(
+          kUIDismissalReasonMetric));
+  EXPECT_EQ(NULL, samples.get());
+}
+
+TEST_F(ManagePasswordsBubbleModelTest, CloseWithoutInteraction) {
+  base::StatisticsDeltaReader statistics_delta_reader;
+  PretendPasswordWaiting();
+  model_->OnBubbleHidden();
+  EXPECT_EQ(model_->dismissal_reason(),
+            password_manager::metrics_util::NO_DIRECT_INTERACTION);
+  EXPECT_FALSE(controller()->saved_password());
+  EXPECT_FALSE(controller()->never_saved_password());
+
+  scoped_ptr<base::HistogramSamples> samples(
+      statistics_delta_reader.GetHistogramSamplesSinceCreation(
+          kUIDismissalReasonMetric));
+  EXPECT_EQ(
+      1,
+      samples->GetCount(password_manager::metrics_util::NO_DIRECT_INTERACTION));
+  EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_SAVE));
+  EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_NOPE));
+  EXPECT_EQ(0,
+            samples->GetCount(password_manager::metrics_util::CLICKED_NEVER));
+  EXPECT_EQ(0,
+            samples->GetCount(password_manager::metrics_util::CLICKED_MANAGE));
+  EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_DONE));
+}
+
+TEST_F(ManagePasswordsBubbleModelTest, ClickSave) {
+  base::StatisticsDeltaReader statistics_delta_reader;
+  PretendPasswordWaiting();
+  model_->OnSaveClicked();
+  model_->OnBubbleHidden();
+  EXPECT_EQ(model_->dismissal_reason(),
+            password_manager::metrics_util::CLICKED_SAVE);
+  EXPECT_TRUE(controller()->saved_password());
+  EXPECT_FALSE(controller()->never_saved_password());
+
+  scoped_ptr<base::HistogramSamples> samples(
+      statistics_delta_reader.GetHistogramSamplesSinceCreation(
+          kUIDismissalReasonMetric));
+  EXPECT_EQ(
+      0,
+      samples->GetCount(password_manager::metrics_util::NO_DIRECT_INTERACTION));
+  EXPECT_EQ(1, samples->GetCount(password_manager::metrics_util::CLICKED_SAVE));
+  EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_NOPE));
+  EXPECT_EQ(0,
+            samples->GetCount(password_manager::metrics_util::CLICKED_NEVER));
+  EXPECT_EQ(0,
+            samples->GetCount(password_manager::metrics_util::CLICKED_MANAGE));
+  EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_DONE));
+}
+
+TEST_F(ManagePasswordsBubbleModelTest, ClickNope) {
+  base::StatisticsDeltaReader statistics_delta_reader;
+  PretendPasswordWaiting();
+  model_->OnNopeClicked();
+  model_->OnBubbleHidden();
+  EXPECT_EQ(model_->dismissal_reason(),
+            password_manager::metrics_util::CLICKED_NOPE);
+  EXPECT_FALSE(controller()->saved_password());
+  EXPECT_FALSE(controller()->never_saved_password());
+
+  scoped_ptr<base::HistogramSamples> samples(
+      statistics_delta_reader.GetHistogramSamplesSinceCreation(
+          kUIDismissalReasonMetric));
+  EXPECT_EQ(
+      0,
+      samples->GetCount(password_manager::metrics_util::NO_DIRECT_INTERACTION));
+  EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_SAVE));
+  EXPECT_EQ(1, samples->GetCount(password_manager::metrics_util::CLICKED_NOPE));
+  EXPECT_EQ(0,
+            samples->GetCount(password_manager::metrics_util::CLICKED_NEVER));
+  EXPECT_EQ(0,
+            samples->GetCount(password_manager::metrics_util::CLICKED_MANAGE));
+  EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_DONE));
+}
+
+TEST_F(ManagePasswordsBubbleModelTest, ClickNever) {
+  base::StatisticsDeltaReader statistics_delta_reader;
+  PretendPasswordWaiting();
+  model_->OnNeverForThisSiteClicked();
+  model_->OnBubbleHidden();
+  EXPECT_EQ(model_->dismissal_reason(),
+            password_manager::metrics_util::CLICKED_NEVER);
+  EXPECT_FALSE(controller()->saved_password());
+  EXPECT_TRUE(controller()->never_saved_password());
+
+  scoped_ptr<base::HistogramSamples> samples(
+      statistics_delta_reader.GetHistogramSamplesSinceCreation(
+          kUIDismissalReasonMetric));
+  EXPECT_EQ(
+      0,
+      samples->GetCount(password_manager::metrics_util::NO_DIRECT_INTERACTION));
+  EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_SAVE));
+  EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_NOPE));
+  EXPECT_EQ(1,
+            samples->GetCount(password_manager::metrics_util::CLICKED_NEVER));
+  EXPECT_EQ(0,
+            samples->GetCount(password_manager::metrics_util::CLICKED_MANAGE));
+  EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_DONE));
+}
+
+TEST_F(ManagePasswordsBubbleModelTest, ClickManage) {
+  base::StatisticsDeltaReader statistics_delta_reader;
+  PretendManagingPasswords();
+  model_->OnManageLinkClicked();
+  model_->OnBubbleHidden();
+  EXPECT_EQ(model_->dismissal_reason(),
+            password_manager::metrics_util::CLICKED_MANAGE);
+  EXPECT_FALSE(controller()->saved_password());
+  EXPECT_FALSE(controller()->never_saved_password());
+
+  scoped_ptr<base::HistogramSamples> samples(
+      statistics_delta_reader.GetHistogramSamplesSinceCreation(
+          kUIDismissalReasonMetric));
+  EXPECT_EQ(
+      0,
+      samples->GetCount(password_manager::metrics_util::NO_DIRECT_INTERACTION));
+  EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_SAVE));
+  EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_NOPE));
+  EXPECT_EQ(0,
+            samples->GetCount(password_manager::metrics_util::CLICKED_NEVER));
+  EXPECT_EQ(1,
+            samples->GetCount(password_manager::metrics_util::CLICKED_MANAGE));
+  EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_DONE));
+}
+
+TEST_F(ManagePasswordsBubbleModelTest, ClickDone) {
+  base::StatisticsDeltaReader statistics_delta_reader;
+  PretendManagingPasswords();
+  model_->OnDoneClicked();
+  model_->OnBubbleHidden();
+  EXPECT_EQ(model_->dismissal_reason(),
+            password_manager::metrics_util::CLICKED_DONE);
+  EXPECT_FALSE(controller()->saved_password());
+  EXPECT_FALSE(controller()->never_saved_password());
+
+  scoped_ptr<base::HistogramSamples> samples(
+      statistics_delta_reader.GetHistogramSamplesSinceCreation(
+          kUIDismissalReasonMetric));
+  EXPECT_EQ(
+      0,
+      samples->GetCount(password_manager::metrics_util::NO_DIRECT_INTERACTION));
+  EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_SAVE));
+  EXPECT_EQ(0, samples->GetCount(password_manager::metrics_util::CLICKED_NOPE));
+  EXPECT_EQ(0,
+            samples->GetCount(password_manager::metrics_util::CLICKED_NEVER));
+  EXPECT_EQ(0,
+            samples->GetCount(password_manager::metrics_util::CLICKED_MANAGE));
+  EXPECT_EQ(1, samples->GetCount(password_manager::metrics_util::CLICKED_DONE));
+}
+
+TEST_F(ManagePasswordsBubbleModelTest, WaitingToSavePassword) {
+  EXPECT_FALSE(model_->WaitingToSavePassword());
+
+  model_->set_manage_passwords_bubble_state(
+      ManagePasswordsBubbleModel::PASSWORD_TO_BE_SAVED);
+  EXPECT_TRUE(model_->WaitingToSavePassword());
+}
diff --git a/chrome/browser/ui/passwords/manage_passwords_bubble_ui_controller.cc b/chrome/browser/ui/passwords/manage_passwords_bubble_ui_controller.cc
index c1d21e1..d9516de 100644
--- a/chrome/browser/ui/passwords/manage_passwords_bubble_ui_controller.cc
+++ b/chrome/browser/ui/passwords/manage_passwords_bubble_ui_controller.cc
@@ -8,7 +8,9 @@
 #include "chrome/browser/password_manager/password_store_factory.h"
 #include "chrome/browser/ui/browser_finder.h"
 #include "chrome/browser/ui/browser_window.h"
+#include "chrome/browser/ui/chrome_pages.h"
 #include "chrome/browser/ui/omnibox/location_bar.h"
+#include "chrome/common/url_constants.h"
 #include "components/password_manager/core/browser/password_store.h"
 #include "content/public/browser/notification_service.h"
 
@@ -58,7 +60,7 @@
     PasswordFormManager* form_manager) {
   form_manager_.reset(form_manager);
   password_form_map_ = form_manager_->best_matches();
-  origin_ = pending_credentials().origin;
+  origin_ = PendingCredentials().origin;
   manage_passwords_icon_to_be_shown_ = true;
   password_to_be_saved_ = true;
   manage_passwords_bubble_needs_showing_ = true;
@@ -117,6 +119,17 @@
   unset_manage_passwords_bubble_needs_showing();
 }
 
+void ManagePasswordsBubbleUIController::
+    NavigateToPasswordManagerSettingsPage() {
+// TODO(mkwst): chrome_pages.h is compiled out of Android. Need to figure out
+// how this navigation should work there.
+#if !defined(OS_ANDROID)
+  chrome::ShowSettingsSubPage(
+      chrome::FindBrowserWithWebContents(web_contents()),
+      chrome::kPasswordManagerSubPage);
+#endif
+}
+
 void ManagePasswordsBubbleUIController::SavePassword() {
   DCHECK(form_manager_.get());
   form_manager_->Save();
@@ -138,3 +151,9 @@
   manage_passwords_bubble_needs_showing_ = false;
   UpdateBubbleAndIconVisibility();
 }
+
+const autofill::PasswordForm& ManagePasswordsBubbleUIController::
+    PendingCredentials() const {
+  DCHECK(form_manager_);
+  return form_manager_->pending_credentials();
+}
diff --git a/chrome/browser/ui/passwords/manage_passwords_bubble_ui_controller.h b/chrome/browser/ui/passwords/manage_passwords_bubble_ui_controller.h
index 31d96f8..abe6de4 100644
--- a/chrome/browser/ui/passwords/manage_passwords_bubble_ui_controller.h
+++ b/chrome/browser/ui/passwords/manage_passwords_bubble_ui_controller.h
@@ -43,14 +43,23 @@
   virtual void OnLoginsChanged(
       const password_manager::PasswordStoreChangeList& changes) OVERRIDE;
 
-  void SavePassword();
+  // Called from the model when the user chooses to save a password; passes the
+  // action off to the FormManager.
+  virtual void SavePassword();
 
-  void NeverSavePassword();
+  // Called from the model when the user chooses to never save passwords; passes
+  // the action off to the FormManager.
+  virtual void NeverSavePassword();
 
   // Called when the bubble is opened after the icon gets displayed. We change
   // the state to know that we do not need to pop up the bubble again.
   void OnBubbleShown();
 
+  // Open a new tab, pointing to the password manager settings page.
+  virtual void NavigateToPasswordManagerSettingsPage();
+
+  virtual const autofill::PasswordForm& PendingCredentials() const;
+
   bool manage_passwords_icon_to_be_shown() const {
     return manage_passwords_icon_to_be_shown_;
   }
@@ -71,10 +80,6 @@
     password_to_be_saved_ = false;
   }
 
-  const autofill::PasswordForm& pending_credentials() const {
-    return form_manager_->pending_credentials();
-  }
-
   const autofill::PasswordFormMap best_matches() const {
     return password_form_map_;
   }
@@ -84,12 +89,13 @@
     autofill_blocked_ = autofill_blocked;
   }
 
- private:
-  friend class content::WebContentsUserData<ManagePasswordsBubbleUIController>;
-
+ protected:
   explicit ManagePasswordsBubbleUIController(
       content::WebContents* web_contents);
 
+ private:
+  friend class content::WebContentsUserData<ManagePasswordsBubbleUIController>;
+
   // Called when a passwordform is autofilled, when a new passwordform is
   // submitted, or when a navigation occurs to update the visibility of the
   // manage passwords icon and bubble.
diff --git a/chrome/browser/ui/passwords/manage_passwords_bubble_ui_controller_mock.cc b/chrome/browser/ui/passwords/manage_passwords_bubble_ui_controller_mock.cc
new file mode 100644
index 0000000..6ea3414
--- /dev/null
+++ b/chrome/browser/ui/passwords/manage_passwords_bubble_ui_controller_mock.cc
@@ -0,0 +1,41 @@
+// 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.
+
+#include "chrome/browser/ui/passwords/manage_passwords_bubble_ui_controller_mock.h"
+
+#include "content/public/browser/web_contents.h"
+
+ManagePasswordsBubbleUIControllerMock::ManagePasswordsBubbleUIControllerMock(
+    content::WebContents* contents)
+    : ManagePasswordsBubbleUIController(contents),
+      navigated_to_settings_page_(false),
+      saved_password_(false),
+      never_saved_password_(false) {
+  contents->SetUserData(UserDataKey(), this);
+}
+
+ManagePasswordsBubbleUIControllerMock::
+    ~ManagePasswordsBubbleUIControllerMock() {}
+
+void ManagePasswordsBubbleUIControllerMock::
+    NavigateToPasswordManagerSettingsPage() {
+  navigated_to_settings_page_ = true;
+}
+
+const autofill::PasswordForm&
+    ManagePasswordsBubbleUIControllerMock::PendingCredentials() const {
+  return pending_credentials_;
+}
+
+bool ManagePasswordsBubbleUIControllerMock::IsInstalled() const {
+  return web_contents()->GetUserData(UserDataKey()) == this;
+}
+
+void ManagePasswordsBubbleUIControllerMock::SavePassword() {
+  saved_password_ = true;
+}
+
+void ManagePasswordsBubbleUIControllerMock::NeverSavePassword() {
+  never_saved_password_ = true;
+}
diff --git a/chrome/browser/ui/passwords/manage_passwords_bubble_ui_controller_mock.h b/chrome/browser/ui/passwords/manage_passwords_bubble_ui_controller_mock.h
new file mode 100644
index 0000000..857fa15
--- /dev/null
+++ b/chrome/browser/ui/passwords/manage_passwords_bubble_ui_controller_mock.h
@@ -0,0 +1,56 @@
+// 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.
+
+#ifndef CHROME_BROWSER_UI_PASSWORDS_MANAGE_PASSWORDS_BUBBLE_UI_CONTROLLER_MOCK_H_
+#define CHROME_BROWSER_UI_PASSWORDS_MANAGE_PASSWORDS_BUBBLE_UI_CONTROLLER_MOCK_H_
+
+#include "base/basictypes.h"
+#include "chrome/browser/ui/passwords/manage_passwords_bubble_ui_controller.h"
+
+namespace content {
+class WebContents;
+}  // namespace content
+
+// This mock is used in tests to ensure that we're just testing the controller
+// behavior, and not the behavior of the bits and pieces it relies upon (like
+// FormManager).
+class ManagePasswordsBubbleUIControllerMock
+    : public ManagePasswordsBubbleUIController {
+ public:
+  explicit ManagePasswordsBubbleUIControllerMock(
+      content::WebContents* contents);
+  virtual ~ManagePasswordsBubbleUIControllerMock();
+
+  // Navigation, surprisingly, is platform-specific; Android's settings page
+  // is native UI and therefore isn't available in a tab for unit tests.
+  //
+  // TODO(mkwst): Determine how to reasonably test this on that platform.
+  virtual void NavigateToPasswordManagerSettingsPage() OVERRIDE;
+  bool navigated_to_settings_page() const {
+    return navigated_to_settings_page_;
+  }
+
+  // We don't have a FormManager in tests, so stub these out.
+  virtual void SavePassword() OVERRIDE;
+  bool saved_password() const { return saved_password_; }
+
+  virtual void NeverSavePassword() OVERRIDE;
+  bool never_saved_password() const { return never_saved_password_; }
+
+  virtual const autofill::PasswordForm& PendingCredentials() const OVERRIDE;
+
+  // True if this controller is installed on |web_contents()|.
+  bool IsInstalled() const;
+
+ private:
+  bool navigated_to_settings_page_;
+  bool saved_password_;
+  bool never_saved_password_;
+
+  autofill::PasswordForm pending_credentials_;
+
+  DISALLOW_COPY_AND_ASSIGN(ManagePasswordsBubbleUIControllerMock);
+};
+
+#endif  // CHROME_BROWSER_UI_PASSWORDS_MANAGE_PASSWORDS_BUBBLE_UI_CONTROLLER_MOCK_H_
diff --git a/chrome/browser/ui/search_engines/template_url_table_model.cc b/chrome/browser/ui/search_engines/template_url_table_model.cc
index ae2a976..a8657d23 100644
--- a/chrome/browser/ui/search_engines/template_url_table_model.cc
+++ b/chrome/browser/ui/search_engines/template_url_table_model.cc
@@ -15,7 +15,7 @@
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/search_engines/template_url.h"
 #include "chrome/browser/search_engines/template_url_service.h"
-#include "chrome/common/favicon/favicon_types.h"
+#include "components/favicon_base/favicon_types.h"
 #include "grit/generated_resources.h"
 #include "grit/ui_resources.h"
 #include "third_party/skia/include/core/SkBitmap.h"
@@ -96,13 +96,15 @@
     }
     load_state_ = LOADING;
     favicon_service->GetFaviconImage(
-        favicon_url, chrome::FAVICON, gfx::kFaviconSize,
-        base::Bind(&ModelEntry::OnFaviconDataAvailable,
-                   base::Unretained(this)),
+        favicon_url,
+        favicon_base::FAVICON,
+        gfx::kFaviconSize,
+        base::Bind(&ModelEntry::OnFaviconDataAvailable, base::Unretained(this)),
         &tracker_);
   }
 
-  void OnFaviconDataAvailable(const chrome::FaviconImageResult& image_result) {
+  void OnFaviconDataAvailable(
+      const favicon_base::FaviconImageResult& image_result) {
     load_state_ = LOADED;
     if (!image_result.image.IsEmpty()) {
       favicon_ = image_result.image.AsImageSkia();
diff --git a/chrome/browser/ui/settings_window_manager.cc b/chrome/browser/ui/settings_window_manager.cc
index 5c8f345..1e991e4 100644
--- a/chrome/browser/ui/settings_window_manager.cc
+++ b/chrome/browser/ui/settings_window_manager.cc
@@ -10,6 +10,7 @@
 #include "chrome/browser/ui/browser_navigator.h"
 #include "chrome/browser/ui/browser_window.h"
 #include "chrome/browser/ui/chrome_pages.h"
+#include "chrome/browser/ui/settings_window_manager_observer.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "content/public/browser/user_metrics.h"
 #include "content/public/browser/web_contents.h"
@@ -21,30 +22,38 @@
   return Singleton<SettingsWindowManager>::get();
 }
 
+void SettingsWindowManager::AddObserver(
+    SettingsWindowManagerObserver* observer) {
+  observers_.AddObserver(observer);
+}
+
+void SettingsWindowManager::RemoveObserver(
+    SettingsWindowManagerObserver* observer) {
+  observers_.RemoveObserver(observer);
+}
+
 void SettingsWindowManager::ShowForProfile(Profile* profile,
                                            const std::string& sub_page) {
   content::RecordAction(base::UserMetricsAction("ShowOptions"));
   GURL gurl = chrome::GetSettingsUrl(sub_page);
   // Look for an existing browser window.
-  ProfileSessionMap::iterator iter = settings_session_map_.find(profile);
-  if (iter != settings_session_map_.end()) {
-    Browser* browser = chrome::FindBrowserWithID(iter->second);
-    if (browser) {
-      DCHECK(browser->profile() == profile);
-      const content::WebContents* web_contents =
-          browser->tab_strip_model()->GetWebContentsAt(0);
-      if (web_contents && web_contents->GetURL() == gurl) {
-        browser->window()->Show();
-        return;
-      }
-      NavigateParams params(browser, gurl,
-                            content::PAGE_TRANSITION_AUTO_BOOKMARK);
-      params.window_action = NavigateParams::SHOW_WINDOW;
-      params.user_gesture = true;
-      chrome::Navigate(&params);
+  Browser* browser = FindBrowserForProfile(profile);
+  if (browser) {
+    DCHECK(browser->profile() == profile);
+    const content::WebContents* web_contents =
+        browser->tab_strip_model()->GetWebContentsAt(0);
+    if (web_contents && web_contents->GetURL() == gurl) {
+      browser->window()->Show();
       return;
     }
+    NavigateParams params(browser, gurl,
+                          content::PAGE_TRANSITION_AUTO_BOOKMARK);
+    params.window_action = NavigateParams::SHOW_WINDOW;
+    params.user_gesture = true;
+    chrome::Navigate(&params);
+    return;
   }
+
   // No existing browser window, create one.
   NavigateParams params(profile, gurl, content::PAGE_TRANSITION_AUTO_BOOKMARK);
   params.disposition = NEW_POPUP;
@@ -54,6 +63,16 @@
   params.path_behavior = NavigateParams::IGNORE_AND_NAVIGATE;
   chrome::Navigate(&params);
   settings_session_map_[profile] = params.browser->session_id().id();
+
+  FOR_EACH_OBSERVER(SettingsWindowManagerObserver,
+                    observers_, OnNewSettingsWindow(params.browser));
+}
+
+Browser* SettingsWindowManager::FindBrowserForProfile(Profile* profile) {
+  ProfileSessionMap::iterator iter = settings_session_map_.find(profile);
+  if (iter != settings_session_map_.end())
+    return chrome::FindBrowserWithID(iter->second);
+  return NULL;
 }
 
 SettingsWindowManager::SettingsWindowManager() {
diff --git a/chrome/browser/ui/settings_window_manager.h b/chrome/browser/ui/settings_window_manager.h
index fc96bcd..79b07d4 100644
--- a/chrome/browser/ui/settings_window_manager.h
+++ b/chrome/browser/ui/settings_window_manager.h
@@ -9,12 +9,16 @@
 #include <string>
 
 #include "base/memory/singleton.h"
+#include "base/observer_list.h"
 #include "chrome/browser/sessions/session_id.h"
 
+class Browser;
 class Profile;
 
 namespace chrome {
 
+class SettingsWindowManagerObserver;
+
 // Class for managing settings windows when --enable-settings-window is enabled.
 // TODO(stevenjb): Remove flag comment if enabled by default.
 
@@ -22,10 +26,17 @@
  public:
   static SettingsWindowManager* GetInstance();
 
-  // Show an existing settings window for |profile| or create a new one, and
-  // navigate to |sub_page|.
+  void AddObserver(SettingsWindowManagerObserver* observer);
+  void RemoveObserver(SettingsWindowManagerObserver* observer);
+
+  // Shows an existing settings Browser window for |profile| or creates a new
+  // one. Navigates that window to |sub_page|.
   void ShowForProfile(Profile* profile, const std::string& sub_page);
 
+  // If a Browser settings window for |profile| has already been created,
+  // returns it, otherwise returns NULL.
+  Browser* FindBrowserForProfile(Profile* profile);
+
  private:
   friend struct DefaultSingletonTraits<SettingsWindowManager>;
   typedef std::map<Profile*, SessionID::id_type> ProfileSessionMap;
@@ -33,6 +44,7 @@
   SettingsWindowManager();
   ~SettingsWindowManager();
 
+  ObserverList<SettingsWindowManagerObserver> observers_;
   ProfileSessionMap settings_session_map_;
 
   DISALLOW_COPY_AND_ASSIGN(SettingsWindowManager);
diff --git a/chrome/browser/ui/settings_window_manager_browsertest.cc b/chrome/browser/ui/settings_window_manager_browsertest.cc
new file mode 100644
index 0000000..50aabfc
--- /dev/null
+++ b/chrome/browser/ui/settings_window_manager_browsertest.cc
@@ -0,0 +1,164 @@
+// 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.
+
+#include "chrome/browser/ui/settings_window_manager.h"
+
+#include "base/command_line.h"
+#include "base/file_util.h"
+#include "base/files/scoped_temp_dir.h"
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/chrome_notification_types.h"
+#include "chrome/browser/profiles/profile_manager.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/browser_window.h"
+#include "chrome/browser/ui/settings_window_manager_observer.h"
+#include "chrome/common/chrome_switches.h"
+#include "chrome/test/base/in_process_browser_test.h"
+#include "content/public/browser/notification_service.h"
+#include "content/public/test/test_utils.h"
+
+namespace {
+
+class SettingsWindowTestObserver
+    : public chrome::SettingsWindowManagerObserver {
+ public:
+  SettingsWindowTestObserver() : browser_(NULL), new_settings_count_(0) {}
+  virtual ~SettingsWindowTestObserver() {}
+
+  virtual void OnNewSettingsWindow(Browser* settings_browser) OVERRIDE {
+    browser_ = settings_browser;
+    ++new_settings_count_;
+  }
+
+  Browser* browser() { return browser_; }
+  size_t new_settings_count() const { return new_settings_count_; }
+
+ private:
+  Browser* browser_;
+  size_t new_settings_count_;
+
+  DISALLOW_COPY_AND_ASSIGN(SettingsWindowTestObserver);
+};
+
+}  // namespace
+
+class SettingsWindowManagerTest : public InProcessBrowserTest {
+ public:
+  SettingsWindowManagerTest() : test_profile_(NULL) {
+    chrome::SettingsWindowManager::GetInstance()->AddObserver(&observer_);
+  }
+  virtual ~SettingsWindowManagerTest() {
+    chrome::SettingsWindowManager::GetInstance()->RemoveObserver(&observer_);
+  }
+
+  virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
+    command_line->AppendSwitch(::switches::kMultiProfiles);
+  }
+
+  Profile* CreateTestProfile() {
+    CHECK(!test_profile_);
+
+    ProfileManager* profile_manager = g_browser_process->profile_manager();
+    base::RunLoop run_loop;
+    profile_manager->CreateProfileAsync(
+        profile_manager->GenerateNextProfileDirectoryPath(),
+        base::Bind(&SettingsWindowManagerTest::ProfileInitialized,
+                   base::Unretained(this),
+                   run_loop.QuitClosure()),
+        base::string16(),
+        base::string16(),
+        std::string());
+    run_loop.Run();
+
+    return test_profile_;
+  }
+
+  void ProfileInitialized(const base::Closure& closure,
+                          Profile* profile,
+                          Profile::CreateStatus status) {
+    if (status == Profile::CREATE_STATUS_INITIALIZED) {
+      test_profile_ = profile;
+      closure.Run();
+    }
+  }
+
+  void CloseBrowserSynchronously(Browser* browser) {
+    content::WindowedNotificationObserver observer(
+        chrome::NOTIFICATION_BROWSER_CLOSED,
+        content::NotificationService::AllSources());
+    browser->window()->Close();
+    observer.Wait();
+  }
+
+ protected:
+  SettingsWindowTestObserver observer_;
+  base::ScopedTempDir temp_profile_dir_;
+  Profile* test_profile_;  // Owned by g_browser_process->profile_manager()
+
+  DISALLOW_COPY_AND_ASSIGN(SettingsWindowManagerTest);
+};
+
+
+IN_PROC_BROWSER_TEST_F(SettingsWindowManagerTest, OpenSettingsWindow) {
+  chrome::SettingsWindowManager* settings_manager =
+      chrome::SettingsWindowManager::GetInstance();
+
+  // Open a settings window.
+  settings_manager->ShowForProfile(browser()->profile(), std::string());
+  Browser* settings_browser =
+      settings_manager->FindBrowserForProfile(browser()->profile());
+  ASSERT_TRUE(settings_browser);
+  // Ensure the observer fired correctly.
+  EXPECT_EQ(1u, observer_.new_settings_count());
+  EXPECT_EQ(settings_browser, observer_.browser());
+
+  // Open the settings again: no new window.
+  settings_manager->ShowForProfile(browser()->profile(), std::string());
+  EXPECT_EQ(settings_browser,
+            settings_manager->FindBrowserForProfile(browser()->profile()));
+  EXPECT_EQ(1u, observer_.new_settings_count());
+
+  // Close the settings window.
+  CloseBrowserSynchronously(settings_browser);
+  EXPECT_FALSE(settings_manager->FindBrowserForProfile(browser()->profile()));
+
+  // Open a new settings window.
+  settings_manager->ShowForProfile(browser()->profile(), std::string());
+  Browser* settings_browser2 =
+      settings_manager->FindBrowserForProfile(browser()->profile());
+  ASSERT_TRUE(settings_browser2);
+  EXPECT_EQ(2u, observer_.new_settings_count());
+
+  CloseBrowserSynchronously(settings_browser2);
+}
+
+#if !defined(OS_CHROMEOS)
+IN_PROC_BROWSER_TEST_F(SettingsWindowManagerTest, SettingsWindowMultiProfile) {
+  chrome::SettingsWindowManager* settings_manager =
+      chrome::SettingsWindowManager::GetInstance();
+  Profile* test_profile = CreateTestProfile();
+  ASSERT_TRUE(test_profile);
+
+  // Open a settings window.
+  settings_manager->ShowForProfile(browser()->profile(), std::string());
+  Browser* settings_browser =
+      settings_manager->FindBrowserForProfile(browser()->profile());
+  ASSERT_TRUE(settings_browser);
+  // Ensure the observer fired correctly.
+  EXPECT_EQ(1u, observer_.new_settings_count());
+  EXPECT_EQ(settings_browser, observer_.browser());
+
+  // Open a settings window for a new profile.
+  settings_manager->ShowForProfile(test_profile, std::string());
+  Browser* settings_browser2 =
+      settings_manager->FindBrowserForProfile(test_profile);
+  ASSERT_TRUE(settings_browser2);
+  // Ensure the observer fired correctly.
+  EXPECT_EQ(2u, observer_.new_settings_count());
+  EXPECT_EQ(settings_browser2, observer_.browser());
+
+  CloseBrowserSynchronously(settings_browser);
+  CloseBrowserSynchronously(settings_browser2);
+}
+#endif
diff --git a/chrome/browser/ui/settings_window_manager_observer.h b/chrome/browser/ui/settings_window_manager_observer.h
new file mode 100644
index 0000000..69bfec4
--- /dev/null
+++ b/chrome/browser/ui/settings_window_manager_observer.h
@@ -0,0 +1,23 @@
+// 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.
+
+#ifndef CHROME_BROWSER_UI_SETTINGS_WINDOW_MANAGER_OBSERVER_H_
+#define CHROME_BROWSER_UI_SETTINGS_WINDOW_MANAGER_OBSERVER_H_
+
+class Browser;
+
+namespace chrome {
+
+class SettingsWindowManagerObserver {
+ public:
+  // Called when a new settings browser window is created.
+  virtual void OnNewSettingsWindow(Browser* settings_browser) = 0;
+
+ protected:
+  virtual ~SettingsWindowManagerObserver() {}
+};
+
+}  // namespace chrome
+
+#endif  // CHROME_BROWSER_UI_SETTINGS_WINDOW_MANAGER_OBSERVER_H_
diff --git a/chrome/browser/ui/startup/autolaunch_prompt_win.cc b/chrome/browser/ui/startup/autolaunch_prompt_win.cc
index 8351571..021c981 100644
--- a/chrome/browser/ui/startup/autolaunch_prompt_win.cc
+++ b/chrome/browser/ui/startup/autolaunch_prompt_win.cc
@@ -11,7 +11,6 @@
 #include "chrome/browser/auto_launch_trial.h"
 #include "chrome/browser/first_run/first_run.h"
 #include "chrome/browser/infobars/confirm_infobar_delegate.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/browser.h"
@@ -20,6 +19,7 @@
 #include "chrome/common/chrome_switches.h"
 #include "chrome/common/pref_names.h"
 #include "chrome/installer/util/auto_launch_util.h"
+#include "components/infobars/core/infobar.h"
 #include "components/user_prefs/pref_registry_syncable.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/web_contents.h"
diff --git a/chrome/browser/ui/startup/bad_flags_prompt.cc b/chrome/browser/ui/startup/bad_flags_prompt.cc
index ea10603..f283141 100644
--- a/chrome/browser/ui/startup/bad_flags_prompt.cc
+++ b/chrome/browser/ui/startup/bad_flags_prompt.cc
@@ -80,7 +80,7 @@
     if (CommandLine::ForCurrentProcess()->HasSwitch(*flag)) {
       SimpleAlertInfoBarDelegate::Create(
           InfoBarService::FromWebContents(web_contents),
-          InfoBarDelegate::kNoIconID,
+          infobars::InfoBarDelegate::kNoIconID,
           l10n_util::GetStringFUTF16(IDS_BAD_FLAGS_WARNING_MESSAGE,
                                      base::UTF8ToUTF16(
                                          std::string("--") + *flag)),
diff --git a/chrome/browser/ui/startup/default_browser_prompt.cc b/chrome/browser/ui/startup/default_browser_prompt.cc
index c065e12..0604b67 100644
--- a/chrome/browser/ui/startup/default_browser_prompt.cc
+++ b/chrome/browser/ui/startup/default_browser_prompt.cc
@@ -13,7 +13,6 @@
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/first_run/first_run.h"
 #include "chrome/browser/infobars/confirm_infobar_delegate.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/shell_integration.h"
@@ -24,6 +23,7 @@
 #include "chrome/common/pref_names.h"
 #include "chrome/installer/util/master_preferences.h"
 #include "chrome/installer/util/master_preferences_constants.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/navigation_details.h"
 #include "content/public/browser/web_contents.h"
diff --git a/chrome/browser/ui/startup/google_api_keys_infobar_delegate.cc b/chrome/browser/ui/startup/google_api_keys_infobar_delegate.cc
index 6b64e4b..d9e975c 100644
--- a/chrome/browser/ui/startup/google_api_keys_infobar_delegate.cc
+++ b/chrome/browser/ui/startup/google_api_keys_infobar_delegate.cc
@@ -4,8 +4,8 @@
 
 #include "chrome/browser/ui/startup/google_api_keys_infobar_delegate.h"
 
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/web_contents.h"
 #include "google_apis/google_api_keys.h"
 #include "grit/chromium_strings.h"
diff --git a/chrome/browser/ui/startup/obsolete_system_infobar_delegate.cc b/chrome/browser/ui/startup/obsolete_system_infobar_delegate.cc
index d5df5a3..ba806e3 100644
--- a/chrome/browser/ui/startup/obsolete_system_infobar_delegate.cc
+++ b/chrome/browser/ui/startup/obsolete_system_infobar_delegate.cc
@@ -5,9 +5,9 @@
 #include "chrome/browser/ui/startup/obsolete_system_infobar_delegate.h"
 
 #include "base/cpu.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/common/url_constants.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/web_contents.h"
 #include "grit/chromium_strings.h"
 #include "grit/generated_resources.h"
diff --git a/chrome/browser/ui/startup/session_crashed_infobar_delegate.cc b/chrome/browser/ui/startup/session_crashed_infobar_delegate.cc
index 6e0b212..c51df57 100644
--- a/chrome/browser/ui/startup/session_crashed_infobar_delegate.cc
+++ b/chrome/browser/ui/startup/session_crashed_infobar_delegate.cc
@@ -4,7 +4,6 @@
 
 #include "chrome/browser/ui/startup/session_crashed_infobar_delegate.h"
 
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/search/search.h"
@@ -13,6 +12,7 @@
 #include "chrome/browser/ui/browser_finder.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/common/url_constants.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/dom_storage_context.h"
 #include "content/public/browser/storage_partition.h"
 #include "grit/chromium_strings.h"
diff --git a/chrome/browser/ui/startup/session_crashed_infobar_delegate_unittest.cc b/chrome/browser/ui/startup/session_crashed_infobar_delegate_unittest.cc
index 5887b7b..50b7d27 100644
--- a/chrome/browser/ui/startup/session_crashed_infobar_delegate_unittest.cc
+++ b/chrome/browser/ui/startup/session_crashed_infobar_delegate_unittest.cc
@@ -7,7 +7,6 @@
 #include "base/prefs/pref_registry_simple.h"
 #include "base/prefs/testing_pref_service.h"
 #include "base/run_loop.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/prefs/browser_prefs.h"
 #include "chrome/browser/sessions/session_service_factory.h"
@@ -17,6 +16,7 @@
 #include "chrome/test/base/browser_with_test_window_test.h"
 #include "chrome/test/base/scoped_testing_local_state.h"
 #include "chrome/test/base/testing_browser_process.h"
+#include "components/infobars/core/infobar.h"
 
 #if defined(OS_CHROMEOS)
 #include "base/command_line.h"
diff --git a/chrome/browser/ui/startup/startup_browser_creator.cc b/chrome/browser/ui/startup/startup_browser_creator.cc
index d3372ff..c22ed67 100644
--- a/chrome/browser/ui/startup/startup_browser_creator.cc
+++ b/chrome/browser/ui/startup/startup_browser_creator.cc
@@ -56,9 +56,9 @@
 #include "chrome/common/chrome_version_info.h"
 #include "chrome/common/net/url_fixer_upper.h"
 #include "chrome/common/pref_names.h"
-#include "chrome/common/profile_management_switches.h"
 #include "chrome/common/url_constants.h"
 #include "chrome/installer/util/browser_distribution.h"
+#include "components/signin/core/common/profile_management_switches.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/child_process_security_policy.h"
 #include "content/public/browser/navigation_controller.h"
@@ -85,10 +85,6 @@
 #include "ui/events/x/touch_factory_x11.h"
 #endif
 
-#if defined(OS_WIN)
-#include "chrome/browser/ui/startup/startup_browser_creator_win.h"
-#endif
-
 #if defined(ENABLE_FULL_PRINTING)
 #include "chrome/browser/printing/cloud_print/cloud_print_proxy_service.h"
 #include "chrome/browser/printing/cloud_print/cloud_print_proxy_service_factory.h"
@@ -450,16 +446,6 @@
       }
     }
   }
-#if defined(OS_WIN)
-  if (urls.empty()) {
-    // If we are in Windows 8 metro mode and were launched as a result of the
-    // search charm or via a url navigation in metro, then fetch the
-    // corresponding url.
-    GURL url(chrome::GetURLToOpen(profile));
-    if (url.is_valid())
-      urls.push_back(url);
-  }
-#endif  // OS_WIN
   return urls;
 }
 
diff --git a/chrome/browser/ui/startup/startup_browser_creator_impl.cc b/chrome/browser/ui/startup/startup_browser_creator_impl.cc
index 58995aa..5d346ac 100644
--- a/chrome/browser/ui/startup/startup_browser_creator_impl.cc
+++ b/chrome/browser/ui/startup/startup_browser_creator_impl.cc
@@ -590,9 +590,6 @@
   std::vector<GURL> adjust_urls = urls_to_open;
   if (adjust_urls.empty()) {
     AddStartupURLs(&adjust_urls);
-    if (StartupBrowserCreatorImpl::OpenStartupURLsInExistingBrowser(
-            profile_, adjust_urls))
-      return;
   } else if (!command_line_.HasSwitch(switches::kOpenInNewWindow)) {
     // Always open a list of urls in a window on the native desktop.
     browser = chrome::FindTabbedBrowser(profile_, false,
@@ -940,12 +937,3 @@
     }
   }
 }
-
-#if !defined(OS_WIN)
-// static
-bool StartupBrowserCreatorImpl::OpenStartupURLsInExistingBrowser(
-    Profile* profile,
-    const std::vector<GURL>& startup_urls) {
-  return false;
-}
-#endif
diff --git a/chrome/browser/ui/startup/startup_browser_creator_impl.h b/chrome/browser/ui/startup/startup_browser_creator_impl.h
index b1e86cd..8103e20 100644
--- a/chrome/browser/ui/startup/startup_browser_creator_impl.h
+++ b/chrome/browser/ui/startup/startup_browser_creator_impl.h
@@ -145,12 +145,6 @@
   // that case.
   void CheckPreferencesBackup(Profile* profile);
 
-  // Function to open startup urls in an existing Browser instance for the
-  // profile passed in. Returns true on success.
-  static bool OpenStartupURLsInExistingBrowser(
-      Profile* profile,
-      const std::vector<GURL>& startup_urls);
-
   const base::FilePath cur_dir_;
   const base::CommandLine& command_line_;
   Profile* profile_;
diff --git a/chrome/browser/ui/startup/startup_browser_creator_win.cc b/chrome/browser/ui/startup/startup_browser_creator_win.cc
deleted file mode 100644
index f946e77..0000000
--- a/chrome/browser/ui/startup/startup_browser_creator_win.cc
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright (c) 2012 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 "chrome/browser/ui/startup/startup_browser_creator_win.h"
-
-#include "base/logging.h"
-#include "base/win/metro.h"
-#include "chrome/browser/search_engines/util.h"
-#include "chrome/browser/ui/browser_finder.h"
-#include "chrome/browser/ui/browser_window.h"
-#include "chrome/browser/ui/startup/startup_browser_creator_impl.h"
-#include "chrome/common/url_constants.h"
-#include "win8/util/win8_util.h"
-
-namespace chrome {
-
-GURL GetURLToOpen(Profile* profile) {
-  base::string16 params;
-  base::win::MetroLaunchType launch_type =
-      base::win::GetMetroLaunchParams(&params);
-  if ((launch_type == base::win::METRO_PROTOCOL) ||
-      (launch_type == base::win::METRO_LAUNCH))
-    return GURL(params);
-  return (launch_type == base::win::METRO_SEARCH) ?
-      GetDefaultSearchURLForSearchTerms(profile, params) : GURL();
-}
-
-}  // namespace chrome
-
-// static
-bool StartupBrowserCreatorImpl::OpenStartupURLsInExistingBrowser(
-    Profile* profile,
-    const std::vector<GURL>& startup_urls) {
-  if (!win8::IsSingleWindowMetroMode())
-    return false;
-
-  // We activate an existing browser window if we are opening just the new tab
-  // page in metro mode.
-  if (startup_urls.size() > 1)
-    return false;
-
-  if (startup_urls[0] != GURL(chrome::kChromeUINewTabURL))
-    return false;
-
-  Browser* browser = chrome::FindBrowserWithProfile(
-      profile, chrome::HOST_DESKTOP_TYPE_NATIVE);
-
-  if (!browser)
-    return false;
-
-  browser->window()->Show();
-  return true;
-}
diff --git a/chrome/browser/ui/startup/startup_browser_creator_win.h b/chrome/browser/ui/startup/startup_browser_creator_win.h
deleted file mode 100644
index ce65d9f..0000000
--- a/chrome/browser/ui/startup/startup_browser_creator_win.h
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright (c) 2012 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 CHROME_BROWSER_UI_STARTUP_STARTUP_BROWSER_CREATOR_WIN_H_
-#define CHROME_BROWSER_UI_STARTUP_STARTUP_BROWSER_CREATOR_WIN_H_
-
-class GURL;
-class Profile;
-
-namespace chrome {
-
-// If we are in Windows 8 metro mode and were launched as a result of the search
-// charm or via a url navigation in metro, then this function fetches the
-// url/search term from the metro driver.
-GURL GetURLToOpen(Profile* profile);
-
-}  // namespace chrome
-
-#endif  // CHROME_BROWSER_UI_STARTUP_STARTUP_BROWSER_CREATOR_WIN_H_
diff --git a/chrome/browser/ui/sync/OWNERS b/chrome/browser/ui/sync/OWNERS
index dac6813..4aa30a1 100644
--- a/chrome/browser/ui/sync/OWNERS
+++ b/chrome/browser/ui/sync/OWNERS
@@ -5,3 +5,4 @@
 rsimha@chromium.org
 tim@chromium.org
 zea@chromium.org
+pavely@chromium.org
diff --git a/chrome/browser/ui/sync/one_click_signin_helper.cc b/chrome/browser/ui/sync/one_click_signin_helper.cc
index cabc381..82c0af5 100644
--- a/chrome/browser/ui/sync/one_click_signin_helper.cc
+++ b/chrome/browser/ui/sync/one_click_signin_helper.cc
@@ -58,7 +58,6 @@
 #include "chrome/common/chrome_version_info.h"
 #include "chrome/common/net/url_util.h"
 #include "chrome/common/pref_names.h"
-#include "chrome/common/profile_management_switches.h"
 #include "chrome/common/url_constants.h"
 #include "components/autofill/core/common/password_form.h"
 #include "components/password_manager/core/browser/password_manager.h"
@@ -67,6 +66,7 @@
 #include "components/signin/core/browser/signin_error_controller.h"
 #include "components/signin/core/browser/signin_manager.h"
 #include "components/signin/core/browser/signin_manager_cookie_helper.h"
+#include "components/signin/core/common/profile_management_switches.h"
 #include "components/sync_driver/sync_prefs.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/navigation_entry.h"
@@ -749,6 +749,7 @@
     case signin::SOURCE_DEVICES_PAGE:
       UMA_HISTOGRAM_ENUMERATION("Signin.DevicesPageActions", action,
                                 one_click_signin::HISTOGRAM_MAX);
+      break;
     default:
       // This switch statement needs to be updated when the enum Source changes.
       COMPILE_ASSERT(signin::SOURCE_UNKNOWN == 12,
diff --git a/chrome/browser/ui/sync/one_click_signin_sync_starter.cc b/chrome/browser/ui/sync/one_click_signin_sync_starter.cc
index a3bdde4..afcddd8 100644
--- a/chrome/browser/ui/sync/one_click_signin_sync_starter.cc
+++ b/chrome/browser/ui/sync/one_click_signin_sync_starter.cc
@@ -35,9 +35,9 @@
 #include "chrome/browser/ui/webui/signin/login_ui_service.h"
 #include "chrome/browser/ui/webui/signin/login_ui_service_factory.h"
 #include "chrome/browser/ui/webui/signin/profile_signin_confirmation_dialog.h"
-#include "chrome/common/profile_management_switches.h"
 #include "chrome/common/url_constants.h"
 #include "components/signin/core/browser/signin_manager.h"
+#include "components/signin/core/common/profile_management_switches.h"
 #include "components/sync_driver/sync_prefs.h"
 #include "grit/chromium_strings.h"
 #include "grit/generated_resources.h"
diff --git a/chrome/browser/ui/tabs/tab_strip_model_unittest.cc b/chrome/browser/ui/tabs/tab_strip_model_unittest.cc
index 76a6697..4c43196 100644
--- a/chrome/browser/ui/tabs/tab_strip_model_unittest.cc
+++ b/chrome/browser/ui/tabs/tab_strip_model_unittest.cc
@@ -108,23 +108,26 @@
     : public web_modal::SingleWebContentsDialogManager {
  public:
   explicit DummySingleWebContentsDialogManager(
+      NativeWebContentsModalDialog dialog,
       web_modal::SingleWebContentsDialogManagerDelegate* delegate)
-      : delegate_(delegate) {}
+      : delegate_(delegate),
+        dialog_(dialog) {}
   virtual ~DummySingleWebContentsDialogManager() {}
 
-  virtual void ManageDialog(NativeWebContentsModalDialog dialog) OVERRIDE {}
-  virtual void ShowDialog(NativeWebContentsModalDialog dialog) OVERRIDE {}
-  virtual void HideDialog(NativeWebContentsModalDialog dialog) OVERRIDE {}
-  virtual void CloseDialog(NativeWebContentsModalDialog dialog) OVERRIDE {
-    delegate_->WillClose(dialog);
+  virtual void Show() OVERRIDE {}
+  virtual void Hide() OVERRIDE {}
+  virtual void Close() OVERRIDE {
+    delegate_->WillClose(dialog_);
   }
-  virtual void FocusDialog(NativeWebContentsModalDialog dialog) OVERRIDE {}
-  virtual void PulseDialog(NativeWebContentsModalDialog dialog) OVERRIDE {}
+  virtual void Focus() OVERRIDE {}
+  virtual void Pulse() OVERRIDE {}
   virtual void HostChanged(
       web_modal::WebContentsModalDialogHost* new_host) OVERRIDE {}
+  virtual NativeWebContentsModalDialog dialog() OVERRIDE { return dialog_; }
 
  private:
   web_modal::SingleWebContentsDialogManagerDelegate* delegate_;
+  NativeWebContentsModalDialog dialog_;
 
   DISALLOW_COPY_AND_ASSIGN(DummySingleWebContentsDialogManager);
 };
@@ -2567,7 +2570,9 @@
   // DummySingleWebContentsDialogManager doesn't care about the
   // NativeWebContentsModalDialog value, so any dummy value works.
   DummySingleWebContentsDialogManager* native_manager =
-      new DummySingleWebContentsDialogManager(modal_dialog_manager);
+      new DummySingleWebContentsDialogManager(
+          reinterpret_cast<NativeWebContentsModalDialog>(0),
+          modal_dialog_manager);
   modal_dialog_manager->ShowDialogWithManager(
       reinterpret_cast<NativeWebContentsModalDialog>(0),
       scoped_ptr<web_modal::SingleWebContentsDialogManager>(
diff --git a/chrome/browser/ui/toolbar/back_forward_menu_model.cc b/chrome/browser/ui/toolbar/back_forward_menu_model.cc
index e1648d9..2c8ec53 100644
--- a/chrome/browser/ui/toolbar/back_forward_menu_model.cc
+++ b/chrome/browser/ui/toolbar/back_forward_menu_model.cc
@@ -15,9 +15,9 @@
 #include "chrome/browser/ui/browser_commands.h"
 #include "chrome/browser/ui/singleton_tabs.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
-#include "chrome/common/favicon/favicon_types.h"
 #include "chrome/common/pref_names.h"
 #include "chrome/common/url_constants.h"
+#include "components/favicon_base/favicon_types.h"
 #include "content/public/browser/favicon_status.h"
 #include "content/public/browser/navigation_controller.h"
 #include "content/public/browser/navigation_entry.h"
@@ -255,9 +255,8 @@
     return;
 
   favicon_service->GetFaviconImageForURL(
-      FaviconService::FaviconForURLParams(entry->GetURL(),
-                                          chrome::FAVICON,
-                                          gfx::kFaviconSize),
+      FaviconService::FaviconForURLParams(
+          entry->GetURL(), favicon_base::FAVICON, gfx::kFaviconSize),
       base::Bind(&BackForwardMenuModel::OnFavIconDataAvailable,
                  base::Unretained(this),
                  entry->GetUniqueID()),
@@ -266,7 +265,7 @@
 
 void BackForwardMenuModel::OnFavIconDataAvailable(
     int navigation_entry_unique_id,
-    const chrome::FaviconImageResult& image_result) {
+    const favicon_base::FaviconImageResult& image_result) {
   if (!image_result.image.IsEmpty()) {
     // Find the current model_index for the unique id.
     NavigationEntry* entry = NULL;
diff --git a/chrome/browser/ui/toolbar/back_forward_menu_model.h b/chrome/browser/ui/toolbar/back_forward_menu_model.h
index 66082ad..af3437e 100644
--- a/chrome/browser/ui/toolbar/back_forward_menu_model.h
+++ b/chrome/browser/ui/toolbar/back_forward_menu_model.h
@@ -18,7 +18,7 @@
 
 class Browser;
 
-namespace chrome {
+namespace favicon_base {
 struct FaviconImageResult;
 }
 
@@ -102,7 +102,7 @@
   // Callback from the favicon service.
   void OnFavIconDataAvailable(
       int navigation_entry_unique_id,
-      const chrome::FaviconImageResult& image_result);
+      const favicon_base::FaviconImageResult& image_result);
 
   // Allows the unit test to use its own dummy tab contents.
   void set_test_web_contents(content::WebContents* test_web_contents) {
diff --git a/chrome/browser/ui/toolbar/back_forward_menu_model_unittest.cc b/chrome/browser/ui/toolbar/back_forward_menu_model_unittest.cc
index df7787a..cd333b7 100644
--- a/chrome/browser/ui/toolbar/back_forward_menu_model_unittest.cc
+++ b/chrome/browser/ui/toolbar/back_forward_menu_model_unittest.cc
@@ -524,10 +524,11 @@
   HistoryServiceFactory::GetForProfile(
       profile(), Profile::EXPLICIT_ACCESS)->AddPage(
           url1, base::Time::Now(), history::SOURCE_BROWSED);
-  FaviconServiceFactory::GetForProfile(
-      profile(), Profile::EXPLICIT_ACCESS)->SetFavicons(
-          url1, url1_favicon, chrome::FAVICON,
-          gfx::Image::CreateFrom1xBitmap(new_icon_bitmap));
+  FaviconServiceFactory::GetForProfile(profile(), Profile::EXPLICIT_ACCESS)
+      ->SetFavicons(url1,
+                    url1_favicon,
+                    favicon_base::FAVICON,
+                    gfx::Image::CreateFrom1xBitmap(new_icon_bitmap));
 
   // Will return the current icon (default) but start an anync call
   // to retrieve the favicon from the favicon service.
diff --git a/chrome/browser/ui/toolbar/recent_tabs_builder_test_helper.cc b/chrome/browser/ui/toolbar/recent_tabs_builder_test_helper.cc
index f1718f5..fa28e50 100644
--- a/chrome/browser/ui/toolbar/recent_tabs_builder_test_helper.cc
+++ b/chrome/browser/ui/toolbar/recent_tabs_builder_test_helper.cc
@@ -8,9 +8,8 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
-#include "chrome/browser/sync/glue/session_model_associator.h"
 #include "chrome/browser/sync/open_tabs_ui_delegate.h"
-#include "chrome/browser/sync/sessions2/sessions_sync_manager.h"
+#include "chrome/browser/sync/sessions/sessions_sync_manager.h"
 #include "sync/api/attachments/attachment_id.h"
 #include "sync/api/attachments/attachment_service_proxy_for_test.h"
 #include "sync/protocol/session_specifics.pb.h"
@@ -219,25 +218,6 @@
   VerifyExport(manager);
 }
 
-void RecentTabsBuilderTestHelper::ExportToSessionModelAssociator(
-    browser_sync::SessionModelAssociator* associator) {
-  for (int s = 0; s < GetSessionCount(); ++s) {
-    sync_pb::SessionSpecifics meta;
-    BuildSessionSpecifics(s, &meta);
-    for (int w = 0; w < GetWindowCount(s); ++w) {
-      BuildWindowSpecifics(s, w, &meta);
-      for (int t = 0; t < GetTabCount(s, w); ++t) {
-        sync_pb::SessionSpecifics tab_base;
-        BuildTabSpecifics(s, w, t, &tab_base);
-        associator->AssociateForeignSpecifics(tab_base,
-                                              GetTabTimestamp(s, w, t));
-      }
-    }
-    associator->AssociateForeignSpecifics(meta, GetSessionTimestamp(s));
-  }
-  VerifyExport(associator);
-}
-
 void RecentTabsBuilderTestHelper::VerifyExport(
     browser_sync::OpenTabsUIDelegate* delegate) {
   // Make sure data is populated correctly in SessionModelAssociator.
diff --git a/chrome/browser/ui/toolbar/recent_tabs_builder_test_helper.h b/chrome/browser/ui/toolbar/recent_tabs_builder_test_helper.h
index 4c093a0..92ac29e 100644
--- a/chrome/browser/ui/toolbar/recent_tabs_builder_test_helper.h
+++ b/chrome/browser/ui/toolbar/recent_tabs_builder_test_helper.h
@@ -13,7 +13,6 @@
 
 namespace browser_sync {
 class OpenTabsUIDelegate;
-class SessionModelAssociator;
 class SessionsSyncManager;
 }
 namespace sync_pb {
@@ -51,8 +50,6 @@
                        int window_index,
                        int tab_index);
 
-  void ExportToSessionModelAssociator(
-      browser_sync::SessionModelAssociator* associator);
   void ExportToSessionsSyncManager(
       browser_sync::SessionsSyncManager* manager);
 
diff --git a/chrome/browser/ui/toolbar/recent_tabs_sub_menu_model.cc b/chrome/browser/ui/toolbar/recent_tabs_sub_menu_model.cc
index 57f5898..27431d3 100644
--- a/chrome/browser/ui/toolbar/recent_tabs_sub_menu_model.cc
+++ b/chrome/browser/ui/toolbar/recent_tabs_sub_menu_model.cc
@@ -25,8 +25,8 @@
 #include "chrome/browser/ui/browser_commands.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/browser/ui/toolbar/wrench_menu_model.h"
-#include "chrome/common/favicon/favicon_types.h"
 #include "chrome/common/pref_names.h"
+#include "components/favicon_base/favicon_types.h"
 #include "grit/browser_resources.h"
 #include "grit/generated_resources.h"
 #include "grit/theme_resources.h"
@@ -610,19 +610,18 @@
     return;
 
   favicon_service->GetFaviconImageForURL(
-      FaviconService::FaviconForURLParams(url,
-                                          chrome::FAVICON,
-                                          gfx::kFaviconSize),
+      FaviconService::FaviconForURLParams(
+          url, favicon_base::FAVICON, gfx::kFaviconSize),
       base::Bind(&RecentTabsSubMenuModel::OnFaviconDataAvailable,
                  weak_ptr_factory_.GetWeakPtr(),
                  command_id),
-      is_local_tab ? &local_tab_cancelable_task_tracker_ :
-                     &other_devices_tab_cancelable_task_tracker_);
+      is_local_tab ? &local_tab_cancelable_task_tracker_
+                   : &other_devices_tab_cancelable_task_tracker_);
 }
 
 void RecentTabsSubMenuModel::OnFaviconDataAvailable(
     int command_id,
-    const chrome::FaviconImageResult& image_result) {
+    const favicon_base::FaviconImageResult& image_result) {
   if (image_result.image.IsEmpty())
     return;
   int index_in_menu = GetIndexOfCommandId(command_id);
diff --git a/chrome/browser/ui/toolbar/recent_tabs_sub_menu_model.h b/chrome/browser/ui/toolbar/recent_tabs_sub_menu_model.h
index 2e1b5bf..313d62b 100644
--- a/chrome/browser/ui/toolbar/recent_tabs_sub_menu_model.h
+++ b/chrome/browser/ui/toolbar/recent_tabs_sub_menu_model.h
@@ -23,7 +23,7 @@
 class OpenTabsUIDelegate;
 }
 
-namespace chrome {
+namespace favicon_base {
 struct FaviconImageResult;
 }
 
@@ -107,8 +107,9 @@
   // Add the favicon for a local or other devices' tab asynchronously,
   // OnFaviconDataAvailable() will be invoked when the favicon is ready.
   void AddTabFavicon(int command_id, const GURL& url);
-  void OnFaviconDataAvailable(int command_id,
-                              const chrome::FaviconImageResult& image_result);
+  void OnFaviconDataAvailable(
+      int command_id,
+      const favicon_base::FaviconImageResult& image_result);
 
   // Clear all recently closed tabs and windows.
   void ClearLocalEntries();
diff --git a/chrome/browser/ui/toolbar/recent_tabs_sub_menu_model_unittest.cc b/chrome/browser/ui/toolbar/recent_tabs_sub_menu_model_unittest.cc
index 80f7884..56be452 100644
--- a/chrome/browser/ui/toolbar/recent_tabs_sub_menu_model_unittest.cc
+++ b/chrome/browser/ui/toolbar/recent_tabs_sub_menu_model_unittest.cc
@@ -12,10 +12,9 @@
 #include "chrome/browser/sessions/session_types.h"
 #include "chrome/browser/sessions/persistent_tab_restore_service.h"
 #include "chrome/browser/sessions/tab_restore_service_factory.h"
-#include "chrome/browser/sync/glue/session_model_associator.h"
 #include "chrome/browser/sync/glue/synced_session.h"
 #include "chrome/browser/sync/profile_sync_service_mock.h"
-#include "chrome/browser/sync/sessions2/sessions_sync_manager.h"
+#include "chrome/browser/sync/sessions/sessions_sync_manager.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_tabstrip.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
@@ -113,28 +112,20 @@
     : public BrowserWithTestWindowTest,
       public browser_sync::SessionsSyncManager::SyncInternalApiDelegate {
  public:
-   RecentTabsSubMenuModelTest()
-       : sync_service_(&testing_profile_) {
-    if (!CommandLine::ForCurrentProcess()->HasSwitch(
-            switches::kDisableSyncSessionsV2)) {
-      manager_.reset(new browser_sync::SessionsSyncManager(
-          &testing_profile_,
-          this,
-          scoped_ptr<browser_sync::LocalSessionEventRouter>(
-              new DummyRouter())));
-      manager_->MergeDataAndStartSyncing(
-          syncer::SESSIONS,
-          syncer::SyncDataList(),
-          scoped_ptr<syncer::SyncChangeProcessor>(
-            new syncer::FakeSyncChangeProcessor),
-          scoped_ptr<syncer::SyncErrorFactory>(
-              new syncer::SyncErrorFactoryMock));
-    } else {
-      associator_.reset(new browser_sync::SessionModelAssociator(
-          &sync_service_, true));
-      associator_->SetCurrentMachineTagForTesting(
-          GetLocalSyncCacheGUID());
-    }
+  RecentTabsSubMenuModelTest()
+      : sync_service_(&testing_profile_) {
+    manager_.reset(new browser_sync::SessionsSyncManager(
+        &testing_profile_,
+        this,
+        scoped_ptr<browser_sync::LocalSessionEventRouter>(
+            new DummyRouter())));
+    manager_->MergeDataAndStartSyncing(
+        syncer::SESSIONS,
+        syncer::SyncDataList(),
+        scoped_ptr<syncer::SyncChangeProcessor>(
+          new syncer::FakeSyncChangeProcessor),
+        scoped_ptr<syncer::SyncErrorFactory>(
+            new syncer::SyncErrorFactoryMock));
   }
 
   void WaitForLoadFromLastSession() {
@@ -152,21 +143,11 @@
 
 
   browser_sync::OpenTabsUIDelegate* GetOpenTabsDelegate() {
-    if (!CommandLine::ForCurrentProcess()->HasSwitch(
-            switches::kDisableSyncSessionsV2)) {
-      return manager_.get();
-    } else {
-      return associator_.get();
-    }
+    return manager_.get();
   }
 
   void RegisterRecentTabs(RecentTabsBuilderTestHelper* helper) {
-    if (!CommandLine::ForCurrentProcess()->HasSwitch(
-            switches::kDisableSyncSessionsV2)) {
-      helper->ExportToSessionsSyncManager(manager_.get());
-    } else {
-      helper->ExportToSessionModelAssociator(associator_.get());
-    }
+    helper->ExportToSessionsSyncManager(manager_.get());
   }
 
   virtual scoped_ptr<browser_sync::DeviceInfo> GetLocalDeviceInfo()
@@ -187,8 +168,6 @@
   TestingProfile testing_profile_;
   testing::NiceMock<ProfileSyncServiceMock> sync_service_;
 
-  // TODO(tim): Remove associator_ when sessions V2 is the default, bug 98892.
-  scoped_ptr<browser_sync::SessionModelAssociator> associator_;
   scoped_ptr<browser_sync::SessionsSyncManager> manager_;
 };
 
diff --git a/chrome/browser/ui/toolbar/toolbar_model_impl.cc b/chrome/browser/ui/toolbar/toolbar_model_impl.cc
index 7d76410..05b3dd6 100644
--- a/chrome/browser/ui/toolbar/toolbar_model_impl.cc
+++ b/chrome/browser/ui/toolbar/toolbar_model_impl.cc
@@ -138,7 +138,7 @@
     if (key.is_nonempty() && query_str.substr(key.begin, key.len) == kChipKey) {
       return net::UnescapeAndDecodeUTF8URLComponent(
           query_str.substr(value.begin, value.len),
-          net::UnescapeRule::NORMAL, NULL);
+          net::UnescapeRule::NORMAL);
     }
   }
   return base::string16();
diff --git a/chrome/browser/ui/toolbar/wrench_menu_model.cc b/chrome/browser/ui/toolbar/wrench_menu_model.cc
index e2ca7b5..13dc110 100644
--- a/chrome/browser/ui/toolbar/wrench_menu_model.cc
+++ b/chrome/browser/ui/toolbar/wrench_menu_model.cc
@@ -66,7 +66,6 @@
 #include "chrome/browser/enumerate_modules_model_win.h"
 #include "chrome/browser/ui/metro_pin_tab_helper_win.h"
 #include "content/public/browser/gpu_data_manager.h"
-#include "win8/util/win8_util.h"
 #endif
 
 #if defined(USE_ASH)
@@ -482,33 +481,9 @@
   if (browser_->profile()->IsManaged())
     return false;
 
-#if defined(OS_WIN)
-  if (win8::IsSingleWindowMetroMode() &&
-      browser_->profile()->HasOffTheRecordProfile()) {
-    return false;
-  }
-#endif
-
   return !browser_->profile()->IsGuestSession();
 }
 
-bool WrenchMenuModel::ShouldShowNewWindowMenuItem() {
-#if defined(OS_WIN)
-  if (!win8::IsSingleWindowMetroMode())
-    return true;
-
-  // In Win8's single window Metro mode, we only show the New Window options
-  // if there isn't already a window of the requested type (incognito or not)
-  // that is available.
-  return browser_->profile()->IsOffTheRecord() &&
-      !chrome::FindBrowserWithProfile(
-          browser_->profile()->GetOriginalProfile(),
-          browser_->host_desktop_type());
-#else
-  return true;
-#endif
-}
-
 void WrenchMenuModel::Build(bool is_new_menu) {
 #if defined(OS_WIN)
   AddItem(IDC_VIEW_INCOMPATIBILITIES,
@@ -521,8 +496,7 @@
 #endif
 
   AddItemWithStringId(IDC_NEW_TAB, IDS_NEW_TAB);
-  if (ShouldShowNewWindowMenuItem())
-    AddItemWithStringId(IDC_NEW_WINDOW, IDS_NEW_WINDOW);
+  AddItemWithStringId(IDC_NEW_WINDOW, IDS_NEW_WINDOW);
 
   if (ShouldShowNewIncognitoWindowMenuItem())
     AddItemWithStringId(IDC_NEW_INCOGNITO_WINDOW, IDS_NEW_INCOGNITO_WINDOW);
diff --git a/chrome/browser/ui/toolbar/wrench_menu_model.h b/chrome/browser/ui/toolbar/wrench_menu_model.h
index 9d38635..5dabbb5 100644
--- a/chrome/browser/ui/toolbar/wrench_menu_model.h
+++ b/chrome/browser/ui/toolbar/wrench_menu_model.h
@@ -160,7 +160,6 @@
   void OnZoomLevelChanged(const content::HostZoomMap::ZoomLevelChange& change);
 
   bool ShouldShowNewIncognitoWindowMenuItem();
-  bool ShouldShowNewWindowMenuItem();
 
   // Models for the special menu items with buttons.
   scoped_ptr<ui::ButtonMenuItemModel> edit_menu_item_model_;
diff --git a/chrome/browser/ui/views/accessibility/automation_manager_views.cc b/chrome/browser/ui/views/accessibility/automation_manager_views.cc
new file mode 100644
index 0000000..9b4812e
--- /dev/null
+++ b/chrome/browser/ui/views/accessibility/automation_manager_views.cc
@@ -0,0 +1,76 @@
+// 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.
+
+#include "chrome/browser/ui/views/accessibility/automation_manager_views.h"
+
+#include <vector>
+
+#include "base/command_line.h"
+#include "base/memory/singleton.h"
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/extensions/api/automation_internal/automation_util.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/profiles/profile_manager.h"
+#include "chrome/common/chrome_switches.h"
+#include "content/public/browser/ax_event_notification_details.h"
+#include "ui/views/view.h"
+#include "ui/views/widget/widget.h"
+
+// static
+AutomationManagerViews* AutomationManagerViews::GetInstance() {
+  return Singleton<AutomationManagerViews>::get();
+}
+
+void AutomationManagerViews::HandleEvent(Profile* profile,
+                                         views::View* view,
+                                         ui::AXEvent event_type) {
+  if (!CommandLine::ForCurrentProcess()->HasSwitch(
+          switches::kEnableAutomationAPI)) {
+    return;
+  }
+
+  // TODO(dtseng): Events should only be delivered to extensions with the
+  // desktop permission.
+  views::Widget* widget = view->GetWidget();
+  if (!widget)
+    return;
+
+  if (!profile && g_browser_process->profile_manager()) {
+    profile = g_browser_process->profile_manager()->GetLastUsedProfile();
+  }
+  if (!profile) {
+    LOG(WARNING) << "Accessibility notification but no profile";
+    return;
+  }
+
+  if (!current_tree_.get() ||
+      current_tree_->GetRoot()->GetWidget() != widget) {
+    current_tree_.reset(new views::AXTreeSourceViews(widget));
+    current_tree_serializer_.reset(
+        new ui::AXTreeSerializer<views::View*>(current_tree_.get()));
+    // TODO(dtseng): Need to send a load complete and clear any previous desktop
+    // trees.
+  }
+
+  ui::AXTreeUpdate out_update;
+  current_tree_serializer_->SerializeChanges(view, &out_update);
+
+  // Route this event to special process/routing ids recognized by the
+  // Automation API as the desktop tree.
+
+  // TODO(dtseng): Would idealy define these special desktop constants in idl.
+  content::AXEventNotificationDetails detail(out_update.nodes,
+                                             event_type,
+                                             current_tree_->GetId(view),
+                                             0, /* process_id */
+                                             0 /* routing_id */);
+  std::vector<content::AXEventNotificationDetails> details;
+  details.push_back(detail);
+  extensions::automation_util::DispatchAccessibilityEventsToAutomation(
+      details, profile);
+}
+
+AutomationManagerViews::AutomationManagerViews() {}
+
+AutomationManagerViews::  ~AutomationManagerViews() {}
diff --git a/chrome/browser/ui/views/accessibility/automation_manager_views.h b/chrome/browser/ui/views/accessibility/automation_manager_views.h
new file mode 100644
index 0000000..d2592ae
--- /dev/null
+++ b/chrome/browser/ui/views/accessibility/automation_manager_views.h
@@ -0,0 +1,49 @@
+// 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.
+
+#ifndef CHROME_BROWSER_UI_VIEWS_ACCESSIBILITY_AUTOMATION_MANAGER_VIEWS_H_
+#define CHROME_BROWSER_UI_VIEWS_ACCESSIBILITY_AUTOMATION_MANAGER_VIEWS_H_
+
+#include "base/basictypes.h"
+#include "base/memory/scoped_ptr.h"
+
+#include "ui/accessibility/ax_tree_serializer.h"
+#include "ui/views/accessibility/ax_tree_source_views.h"
+
+template <typename T> struct DefaultSingletonTraits;
+
+class Profile;
+
+namespace views {
+class View;
+}  // namespace views
+
+// Manages a tree of automation nodes.
+class AutomationManagerViews {
+ public:
+  // Get the single instance of this class.
+  static AutomationManagerViews* GetInstance();
+
+  // Handle an event fired upon a |View|.
+  void HandleEvent(Profile* profile, views::View* view, ui::AXEvent event_type);
+
+ private:
+  friend struct DefaultSingletonTraits<AutomationManagerViews>;
+
+  AutomationManagerViews();
+  ~AutomationManagerViews();
+
+  // Holds the active views-based accessibility tree. A tree currently consists
+  // of all views descendant to a |Widget| (see |AXTreeSourceViews|).
+  // A tree becomes active when an event is fired on a descendant view.
+  scoped_ptr <views::AXTreeSourceViews> current_tree_;
+
+  // Serializes incremental updates on the currently active tree
+  // |current_tree_|.
+  scoped_ptr<ui::AXTreeSerializer<views::View*> > current_tree_serializer_;
+
+  DISALLOW_COPY_AND_ASSIGN(AutomationManagerViews);
+};
+
+#endif  // CHROME_BROWSER_UI_VIEWS_ACCESSIBILITY_AUTOMATION_MANAGER_VIEWS_H_
diff --git a/chrome/browser/ui/views/app_list/linux/app_list_controller_delegate_linux.cc b/chrome/browser/ui/views/app_list/linux/app_list_controller_delegate_linux.cc
index c0f6cd0..895d23f 100644
--- a/chrome/browser/ui/views/app_list/linux/app_list_controller_delegate_linux.cc
+++ b/chrome/browser/ui/views/app_list/linux/app_list_controller_delegate_linux.cc
@@ -15,7 +15,7 @@
 AppListControllerDelegateLinux::~AppListControllerDelegateLinux() {}
 
 void AppListControllerDelegateLinux::ViewClosing() {
-  service_->OnAppListClosing();
+  service_->OnViewBeingDestroyed();
 }
 
 void AppListControllerDelegateLinux::OnShowExtensionPrompt() {
diff --git a/chrome/browser/ui/views/app_list/linux/app_list_service_linux.cc b/chrome/browser/ui/views/app_list/linux/app_list_service_linux.cc
index 37af4f0..16b19ce 100644
--- a/chrome/browser/ui/views/app_list/linux/app_list_service_linux.cc
+++ b/chrome/browser/ui/views/app_list/linux/app_list_service_linux.cc
@@ -11,7 +11,7 @@
 #include "chrome/browser/ui/app_list/app_list_factory.h"
 #include "chrome/browser/ui/app_list/app_list_shower.h"
 #include "chrome/browser/ui/app_list/app_list_view_delegate.h"
-#include "chrome/browser/ui/app_list/keep_alive_service_impl.h"
+#include "chrome/browser/ui/app_list/scoped_keep_alive.h"
 #include "chrome/browser/ui/views/app_list/linux/app_list_controller_delegate_linux.h"
 #include "chrome/browser/ui/views/app_list/linux/app_list_linux.h"
 #include "content/public/browser/browser_thread.h"
@@ -81,8 +81,8 @@
   shower_->set_can_close(can_close);
 }
 
-void AppListServiceLinux::OnAppListClosing() {
-  shower_->CloseAppList();
+void AppListServiceLinux::OnViewBeingDestroyed() {
+  shower_->HandleViewBeingDestroyed();
 }
 
 void AppListServiceLinux::Init(Profile* initial_profile) {
@@ -98,7 +98,7 @@
   if (requested_profile->IsManaged())
     return;
 
-  ScopedKeepAlive show_app_list_keepalive;
+  ScopedKeepAlive keep_alive;
 
   InvalidatePendingProfileLoads();
   SetProfilePath(requested_profile->GetPath());
@@ -134,7 +134,6 @@
 AppListServiceLinux::AppListServiceLinux()
     : shower_(new AppListShower(
           scoped_ptr<AppListFactory>(new AppListFactoryLinux(this)),
-          scoped_ptr<KeepAliveService>(new KeepAliveServiceImpl),
           this)),
       controller_delegate_(new AppListControllerDelegateLinux(this)) {
 }
diff --git a/chrome/browser/ui/views/app_list/linux/app_list_service_linux.h b/chrome/browser/ui/views/app_list/linux/app_list_service_linux.h
index 49ac432..81a2046 100644
--- a/chrome/browser/ui/views/app_list/linux/app_list_service_linux.h
+++ b/chrome/browser/ui/views/app_list/linux/app_list_service_linux.h
@@ -20,7 +20,7 @@
 
   static AppListServiceLinux* GetInstance();
   void set_can_close(bool can_close);
-  void OnAppListClosing();
+  void OnViewBeingDestroyed();
 
   // AppListService overrides:
   virtual void Init(Profile* initial_profile) OVERRIDE;
diff --git a/chrome/browser/ui/views/app_list/win/app_list_controller_delegate_win.cc b/chrome/browser/ui/views/app_list/win/app_list_controller_delegate_win.cc
index 38cb76f..222f4c7 100644
--- a/chrome/browser/ui/views/app_list/win/app_list_controller_delegate_win.cc
+++ b/chrome/browser/ui/views/app_list/win/app_list_controller_delegate_win.cc
@@ -26,7 +26,7 @@
 }
 
 void AppListControllerDelegateWin::ViewClosing() {
-  service_->OnAppListClosing();
+  service_->OnViewBeingDestroyed();
 }
 
 gfx::ImageSkia AppListControllerDelegateWin::GetWindowIcon() {
diff --git a/chrome/browser/ui/views/app_list/win/app_list_service_win.cc b/chrome/browser/ui/views/app_list/win/app_list_service_win.cc
index 33ed474..f5ac4fc 100644
--- a/chrome/browser/ui/views/app_list/win/app_list_service_win.cc
+++ b/chrome/browser/ui/views/app_list/win/app_list_service_win.cc
@@ -9,8 +9,7 @@
 
 #include "base/command_line.h"
 #include "base/file_util.h"
-#include "base/lazy_instance.h"
-#include "base/memory/weak_ptr.h"
+#include "base/memory/singleton.h"
 #include "base/message_loop/message_loop.h"
 #include "base/metrics/histogram.h"
 #include "base/path_service.h"
@@ -18,7 +17,6 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/threading/sequenced_worker_pool.h"
 #include "base/time/time.h"
-#include "base/timer/timer.h"
 #include "base/win/shortcut.h"
 #include "base/win/windows_version.h"
 #include "chrome/app/chrome_dll_resource.h"
@@ -31,10 +29,10 @@
 #include "chrome/browser/ui/app_list/app_list.h"
 #include "chrome/browser/ui/app_list/app_list_controller_delegate.h"
 #include "chrome/browser/ui/app_list/app_list_factory.h"
-#include "chrome/browser/ui/app_list/app_list_service_impl.h"
 #include "chrome/browser/ui/app_list/app_list_shower.h"
 #include "chrome/browser/ui/app_list/app_list_view_delegate.h"
-#include "chrome/browser/ui/app_list/keep_alive_service_impl.h"
+#include "chrome/browser/ui/app_list/scoped_keep_alive.h"
+#include "chrome/browser/ui/ash/app_list/app_list_service_ash.h"
 #include "chrome/browser/ui/views/app_list/win/activation_tracker_win.h"
 #include "chrome/browser/ui/views/app_list/win/app_list_controller_delegate_win.h"
 #include "chrome/browser/ui/views/app_list/win/app_list_win.h"
@@ -43,58 +41,26 @@
 #include "chrome/common/chrome_switches.h"
 #include "chrome/common/chrome_version_info.h"
 #include "chrome/common/pref_names.h"
-#include "chrome/installer/launcher_support/chrome_launcher_support.h"
 #include "chrome/installer/util/browser_distribution.h"
 #include "chrome/installer/util/google_update_settings.h"
 #include "chrome/installer/util/install_util.h"
-#include "chrome/installer/util/util_constants.h"
 #include "content/public/browser/browser_thread.h"
-#include "grit/chromium_strings.h"
-#include "grit/generated_resources.h"
-#include "grit/google_chrome_strings.h"
-#include "grit/theme_resources.h"
-#include "ui/app_list/app_list_model.h"
-#include "ui/app_list/pagination_model.h"
 #include "ui/app_list/views/app_list_view.h"
-#include "ui/base/l10n/l10n_util.h"
-#include "ui/base/resource/resource_bundle.h"
 #include "ui/base/win/shell.h"
-#include "ui/gfx/display.h"
-#include "ui/gfx/image/image_skia.h"
 #include "ui/gfx/screen.h"
-#include "ui/views/bubble/bubble_border.h"
-#include "ui/views/widget/widget.h"
-
-#if defined(USE_AURA)
-#include "ui/aura/window.h"
-#include "ui/aura/window_event_dispatcher.h"
-#endif
-
-#if defined(USE_ASH)
-#include "chrome/browser/ui/app_list/app_list_service_ash.h"
-#include "chrome/browser/ui/host_desktop.h"
-#endif
-
-#if defined(GOOGLE_CHROME_BUILD)
-#include "chrome/installer/util/install_util.h"
-#endif
 
 // static
 AppListService* AppListService::Get(chrome::HostDesktopType desktop_type) {
-#if defined(USE_ASH)
   if (desktop_type == chrome::HOST_DESKTOP_TYPE_ASH)
-    return chrome::GetAppListServiceAsh();
-#endif
+    return AppListServiceAsh::GetInstance();
 
-  return chrome::GetAppListServiceWin();
+  return AppListServiceWin::GetInstance();
 }
 
 // static
 void AppListService::InitAll(Profile* initial_profile) {
-#if defined(USE_ASH)
-  chrome::GetAppListServiceAsh()->Init(initial_profile);
-#endif
-  chrome::GetAppListServiceWin()->Init(initial_profile);
+  AppListServiceAsh::GetInstance()->Init(initial_profile);
+  AppListServiceWin::GetInstance()->Init(initial_profile);
 }
 
 namespace {
@@ -332,10 +298,8 @@
     : enable_app_list_on_next_init_(false),
       shower_(new AppListShower(
           scoped_ptr<AppListFactory>(new AppListFactoryWin(this)),
-          scoped_ptr<KeepAliveService>(new KeepAliveServiceImpl),
           this)),
-      controller_delegate_(new AppListControllerDelegateWin(this)),
-      weak_factory_(this) {
+      controller_delegate_(new AppListControllerDelegateWin(this)) {
 }
 
 AppListServiceWin::~AppListServiceWin() {
@@ -362,7 +326,7 @@
   if (requested_profile->IsManaged())
     return;
 
-  ScopedKeepAlive show_app_list_keepalive;
+  ScopedKeepAlive keep_alive;
 
   content::BrowserThread::PostBlockingPoolTask(
       FROM_HERE, base::Bind(SetDidRunForNDayActiveStats));
@@ -377,8 +341,8 @@
   shower_->DismissAppList();
 }
 
-void AppListServiceWin::OnAppListClosing() {
-  shower_->CloseAppList();
+void AppListServiceWin::OnViewBeingDestroyed() {
+  shower_->HandleViewBeingDestroyed();
 }
 
 void AppListServiceWin::OnLoadProfileForWarmup(Profile* initial_profile) {
@@ -413,29 +377,6 @@
     CreateShortcut();
   }
 
-  // Migrate from legacy app launcher if we are on a non-canary and non-chromium
-  // build.
-#if defined(GOOGLE_CHROME_BUILD)
-  if (!InstallUtil::IsChromeSxSProcess() &&
-      !chrome_launcher_support::GetAnyAppHostPath().empty()) {
-    chrome_launcher_support::InstallationState state =
-        chrome_launcher_support::GetAppLauncherInstallationState();
-    if (state == chrome_launcher_support::NOT_INSTALLED) {
-      // If app_host.exe is found but can't be located in the registry,
-      // skip the migration as this is likely a developer build.
-      return;
-    } else if (state == chrome_launcher_support::INSTALLED_AT_SYSTEM_LEVEL) {
-      chrome_launcher_support::UninstallLegacyAppLauncher(
-          chrome_launcher_support::SYSTEM_LEVEL_INSTALLATION);
-    } else if (state == chrome_launcher_support::INSTALLED_AT_USER_LEVEL) {
-      chrome_launcher_support::UninstallLegacyAppLauncher(
-          chrome_launcher_support::USER_LEVEL_INSTALLATION);
-    }
-    EnableAppList(initial_profile, ENABLE_ON_REINSTALL);
-    CreateShortcut();
-  }
-#endif
-
   ScheduleWarmup();
 
   MigrateAppLauncherEnabledPref();
@@ -477,7 +418,7 @@
   base::MessageLoop::current()->PostDelayedTask(
       FROM_HERE,
       base::Bind(&AppListServiceWin::LoadProfileForWarmup,
-                 weak_factory_.GetWeakPtr()),
+                 base::Unretained(this)),
       base::TimeDelta::FromSeconds(kInitWindowDelay));
 }
 
@@ -502,13 +443,5 @@
   profile_loader().LoadProfileInvalidatingOtherLoads(
       profile_path,
       base::Bind(&AppListServiceWin::OnLoadProfileForWarmup,
-                 weak_factory_.GetWeakPtr()));
+                 base::Unretained(this)));
 }
-
-namespace chrome {
-
-AppListService* GetAppListServiceWin() {
-  return AppListServiceWin::GetInstance();
-}
-
-}  // namespace chrome
diff --git a/chrome/browser/ui/views/app_list/win/app_list_service_win.h b/chrome/browser/ui/views/app_list/win/app_list_service_win.h
index 434bdaa..e4d0069 100644
--- a/chrome/browser/ui/views/app_list/win/app_list_service_win.h
+++ b/chrome/browser/ui/views/app_list/win/app_list_service_win.h
@@ -6,7 +6,6 @@
 #define CHROME_BROWSER_UI_VIEWS_APP_LIST_WIN_APP_LIST_SERVICE_WIN_H_
 
 #include "base/memory/scoped_ptr.h"
-#include "base/memory/singleton.h"
 #include "chrome/browser/ui/app_list/app_list_service_impl.h"
 
 namespace app_list{
@@ -15,6 +14,7 @@
 
 class AppListControllerDelegateWin;
 class AppListShower;
+template <typename T> struct DefaultSingletonTraits;
 
 class AppListServiceWin : public AppListServiceImpl {
  public:
@@ -23,7 +23,7 @@
 
   static AppListServiceWin* GetInstance();
   void set_can_close(bool can_close);
-  void OnAppListClosing();
+  void OnViewBeingDestroyed();
 
   // AppListService overrides:
   virtual void SetAppListNextPaintCallback(void (*callback)()) OVERRIDE;
@@ -60,15 +60,7 @@
 
   scoped_ptr<AppListControllerDelegateWin> controller_delegate_;
 
-  base::WeakPtrFactory<AppListServiceWin> weak_factory_;
-
   DISALLOW_COPY_AND_ASSIGN(AppListServiceWin);
 };
 
-namespace chrome {
-
-AppListService* GetAppListServiceWin();
-
-}  // namespace chrome
-
 #endif  // CHROME_BROWSER_UI_VIEWS_APP_LIST_WIN_APP_LIST_SERVICE_WIN_H_
diff --git a/chrome/browser/ui/views/apps/app_info_dialog/app_info_summary_tab.cc b/chrome/browser/ui/views/apps/app_info_dialog/app_info_summary_tab.cc
index b8706e3..788c501 100644
--- a/chrome/browser/ui/views/apps/app_info_dialog/app_info_summary_tab.cc
+++ b/chrome/browser/ui/views/apps/app_info_dialog/app_info_summary_tab.cc
@@ -13,6 +13,7 @@
 #include "chrome/browser/extensions/image_loader.h"
 #include "chrome/browser/extensions/launch_util.h"
 #include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/ui/browser_dialogs.h"
 #include "chrome/browser/ui/browser_navigator.h"
 #include "chrome/common/chrome_switches.h"
 #include "chrome/common/extensions/extension_constants.h"
@@ -142,6 +143,7 @@
     : AppInfoTab(parent_window, profile, app, close_callback),
       app_icon_(NULL),
       view_in_store_link_(NULL),
+      create_shortcuts_button_(NULL),
       uninstall_button_(NULL),
       launch_options_combobox_(NULL),
       weak_ptr_factory_(this) {
@@ -260,12 +262,20 @@
     layout->AddView(launch_options_combobox_);
   }
 
-  // Add an uninstall button for apps that can be uninstalled.
-  if (CanUninstallApp()) {
-    // Create a column set specifically for the left-aligned uninstall button.
-    static const int kButtonsColumnSet = 2;
+  if (CanCreateShortcuts() || CanUninstallApp()) {
+    // Create a column set specifically for the left-aligned buttons at the
+    // bottom of the dialog.
+    static const int kButtonsColumnSetId = 2;
     views::ColumnSet* buttons_column_set =
-        layout->AddColumnSet(kButtonsColumnSet);
+        layout->AddColumnSet(kButtonsColumnSetId);
+    buttons_column_set->AddColumn(views::GridLayout::LEADING,
+                                  views::GridLayout::LEADING,
+                                  0,
+                                  views::GridLayout::USE_PREF,
+                                  0,  // No fixed width
+                                  0);
+    buttons_column_set->AddPaddingColumn(
+        0, views::kRelatedControlHorizontalSpacing);
     buttons_column_set->AddColumn(views::GridLayout::LEADING,
                                   views::GridLayout::LEADING,
                                   0,
@@ -273,14 +283,28 @@
                                   0,  // No fixed width
                                   0);
 
-    uninstall_button_ = new views::LabelButton(
-        this,
-        l10n_util::GetStringUTF16(IDS_APPLICATION_INFO_UNINSTALL_BUTTON_TEXT));
-    uninstall_button_->SetStyle(views::Button::STYLE_BUTTON);
-
     layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing);
-    layout->StartRow(0, kButtonsColumnSet);
-    layout->AddView(uninstall_button_);
+    layout->StartRow(0, kButtonsColumnSetId);
+
+    // Add a Create Shortcuts button for apps that can have shortcuts.
+    if (CanCreateShortcuts()) {
+      create_shortcuts_button_ = new views::LabelButton(
+          this,
+          l10n_util::GetStringUTF16(
+              IDS_APPLICATION_INFO_CREATE_SHORTCUTS_BUTTON_TEXT));
+      create_shortcuts_button_->SetStyle(views::Button::STYLE_BUTTON);
+      layout->AddView(create_shortcuts_button_);
+    }
+
+    // Add an uninstall button for apps that can be uninstalled.
+    if (CanUninstallApp()) {
+      uninstall_button_ = new views::LabelButton(
+          this,
+          l10n_util::GetStringUTF16(
+              IDS_APPLICATION_INFO_UNINSTALL_BUTTON_TEXT));
+      uninstall_button_->SetStyle(views::Button::STYLE_BUTTON);
+      layout->AddView(uninstall_button_);
+    }
   }
 }
 
@@ -310,6 +334,8 @@
                                       const ui::Event& event) {
   if (sender == uninstall_button_) {
     UninstallApp();
+  } else if (sender == create_shortcuts_button_) {
+    CreateShortcuts();
   } else {
     NOTREACHED();
   }
@@ -402,3 +428,18 @@
       ->management_policy()
       ->UserMayModifySettings(app_, NULL);
 }
+
+void AppInfoSummaryTab::CreateShortcuts() {
+  DCHECK(CanCreateShortcuts());
+  chrome::ShowCreateChromeAppShortcutsDialog(
+      parent_window_, profile_, app_, base::Closure());
+}
+
+bool AppInfoSummaryTab::CanCreateShortcuts() const {
+  // ChromeOS can pin apps to the app launcher, but can't create shortcuts.
+#if defined(OS_CHROMEOS)
+  return false;
+#else
+  return true;
+#endif
+}
diff --git a/chrome/browser/ui/views/apps/app_info_dialog/app_info_summary_tab.h b/chrome/browser/ui/views/apps/app_info_dialog/app_info_summary_tab.h
index 005b889..a338fc9 100644
--- a/chrome/browser/ui/views/apps/app_info_dialog/app_info_summary_tab.h
+++ b/chrome/browser/ui/views/apps/app_info_dialog/app_info_summary_tab.h
@@ -86,9 +86,15 @@
   void UninstallApp();
   bool CanUninstallApp() const;
 
+  // Create Shortcuts for the app. Must only be called if CanCreateShortcuts()
+  // returns true.
+  void CreateShortcuts();
+  bool CanCreateShortcuts() const;
+
   // UI elements on the dialog.
   views::ImageView* app_icon_;
   views::Link* view_in_store_link_;
+  views::LabelButton* create_shortcuts_button_;
 
   scoped_ptr<ExtensionUninstallDialog> extension_uninstall_dialog_;
   views::LabelButton* uninstall_button_;
diff --git a/chrome/browser/ui/views/apps/chrome_native_app_window_views.cc b/chrome/browser/ui/views/apps/chrome_native_app_window_views.cc
index f49843f..6a7bbd8 100644
--- a/chrome/browser/ui/views/apps/chrome_native_app_window_views.cc
+++ b/chrome/browser/ui/views/apps/chrome_native_app_window_views.cc
@@ -647,7 +647,8 @@
 
   aura::Window* native_window = widget()->GetNativeWindow();
   if (shape_) {
-    widget()->SetShape(new SkRegion(*shape_));
+    native_window->layer()->SetAlphaShape(
+        make_scoped_ptr(new SkRegion(*shape_)));
     if (!had_shape) {
       native_window->SetEventTargeter(scoped_ptr<ui::EventTargeter>(
           new ShapedAppWindowTargeter(native_window, this)));
diff --git a/chrome/browser/ui/views/autofill/autofill_dialog_views.h b/chrome/browser/ui/views/autofill/autofill_dialog_views.h
index d705ee1..e84a880 100644
--- a/chrome/browser/ui/views/autofill/autofill_dialog_views.h
+++ b/chrome/browser/ui/views/autofill/autofill_dialog_views.h
@@ -375,8 +375,7 @@
     DISALLOW_COPY_AND_ASSIGN(DetailsContainerView);
   };
 
-  // A view that contains a suggestion (such as a known address) and a link to
-  // edit the suggestion.
+  // A view that contains a suggestion (such as a known address).
   class SuggestionView : public views::View {
    public:
     explicit SuggestionView(AutofillDialogViews* autofill_dialog);
@@ -429,8 +428,6 @@
     views::ImageView* icon_;
     // The input set by ShowTextfield.
     ExpandingTextfield* textfield_;
-    // An "Edit" link that flips to editable inputs rather than suggestion text.
-    views::Link* edit_link_;
 
     DISALLOW_COPY_AND_ASSIGN(SuggestionView);
   };
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc b/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc
index 4ac18d5..273a08d9 100644
--- a/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc
+++ b/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc
@@ -1540,7 +1540,8 @@
   } else if (!GetBookmarkButtonCount()) {
     // No bookmarks, accept the drop.
     location->index = 0;
-    int ops = data.GetFirstNode(profile) ? ui::DragDropTypes::DRAG_MOVE :
+    int ops = data.GetFirstNode(model_, profile->GetPath()) ?
+        ui::DragDropTypes::DRAG_MOVE :
         ui::DragDropTypes::DRAG_COPY | ui::DragDropTypes::DRAG_LINK;
     location->operation = chrome::GetPreferredBookmarkDropOperation(
         event.source_operations(), ops);
@@ -1606,13 +1607,13 @@
     location->operation = chrome::GetBookmarkDropOperation(
         profile, event, data, parent, parent->child_count());
     if (!location->operation && !data.has_single_url() &&
-        data.GetFirstNode(profile) == parent) {
+        data.GetFirstNode(model_, profile->GetPath()) == parent) {
       // Don't open a menu if the node being dragged is the menu to open.
       location->on = false;
     }
   } else {
-    location->operation = chrome::GetBookmarkDropOperation(profile, event,
-        data, model_->bookmark_bar_node(), location->index);
+    location->operation = chrome::GetBookmarkDropOperation(
+        profile, event, data, model_->bookmark_bar_node(), location->index);
   }
 }
 
@@ -1620,7 +1621,7 @@
                                             ui::OSExchangeData* data) {
   DCHECK(node && data);
   BookmarkNodeData drag_data(node);
-  drag_data.Write(browser_->profile(), data);
+  drag_data.Write(browser_->profile()->GetPath(), data);
 }
 
 void BookmarkBarView::StartThrobbing(const BookmarkNode* node,
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_bar_view.h b/chrome/browser/ui/views/bookmarks/bookmark_bar_view.h
index 3bdb513..883f916 100644
--- a/chrome/browser/ui/views/bookmarks/bookmark_bar_view.h
+++ b/chrome/browser/ui/views/bookmarks/bookmark_bar_view.h
@@ -31,6 +31,7 @@
 class BookmarkContextMenu;
 class Browser;
 class BrowserView;
+class Profile;
 
 namespace content {
 class PageNavigator;
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_context_menu.cc b/chrome/browser/ui/views/bookmarks/bookmark_context_menu.cc
index 2a1567c..28862bd 100644
--- a/chrome/browser/ui/views/bookmarks/bookmark_context_menu.cc
+++ b/chrome/browser/ui/views/bookmarks/bookmark_context_menu.cc
@@ -46,7 +46,6 @@
       parent_widget_(parent_widget),
       menu_(new views::MenuItemView(this)),
       menu_runner_(new views::MenuRunner(menu_)),
-      parent_node_(parent),
       observer_(NULL),
       close_on_remove_(close_on_remove) {
 
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_context_menu.h b/chrome/browser/ui/views/bookmarks/bookmark_context_menu.h
index eba85f6..7fd36ee 100644
--- a/chrome/browser/ui/views/bookmarks/bookmark_context_menu.h
+++ b/chrome/browser/ui/views/bookmarks/bookmark_context_menu.h
@@ -82,9 +82,6 @@
   // Responsible for running the menu.
   scoped_ptr<views::MenuRunner> menu_runner_;
 
-  // The node we're showing the menu for.
-  const BookmarkNode* parent_node_;
-
   BookmarkContextMenuObserver* observer_;
 
   // Should the menu close when a node is removed.
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_context_menu_controller_win.cc b/chrome/browser/ui/views/bookmarks/bookmark_context_menu_controller_win.cc
deleted file mode 100644
index 5c1f8f9..0000000
--- a/chrome/browser/ui/views/bookmarks/bookmark_context_menu_controller_win.cc
+++ /dev/null
@@ -1,140 +0,0 @@
-// Copyright (c) 2012 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 "chrome/browser/ui/bookmarks/bookmark_context_menu_controller.h"
-
-#include "chrome/app/chrome_command_ids.h"
-#include "chrome/browser/bookmarks/bookmark_stats.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/ui/bookmarks/bookmark_utils.h"
-#include "chrome/browser/ui/browser.h"
-#include "chrome/browser/ui/browser_finder.h"
-#include "chrome/browser/ui/browser_window.h"
-#include "chrome/browser/ui/tabs/tab_strip_model.h"
-#include "content/public/browser/page_navigator.h"
-#include "content/public/browser/user_metrics.h"
-#include "content/public/browser/web_contents.h"
-#include "win8/util/win8_util.h"
-
-using base::UserMetricsAction;
-using content::OpenURLParams;
-using content::PageNavigator;
-using content::WebContents;
-
-namespace {
-
-// A PageNavigator implementation that creates a new Browser. This is used when
-// opening a url and there is no Browser open. The Browser is created the first
-// time the PageNavigator method is invoked.
-class NewBrowserPageNavigator : public PageNavigator {
- public:
-  explicit NewBrowserPageNavigator(Profile* profile)
-      : profile_(profile),
-        browser_(NULL) {}
-
-  virtual ~NewBrowserPageNavigator() {
-    if (browser_)
-      browser_->window()->Show();
-  }
-
-  Browser* browser() const { return browser_; }
-
-  virtual WebContents* OpenURL(const OpenURLParams& params) OVERRIDE {
-    if (!browser_) {
-      Profile* profile = (params.disposition == OFF_THE_RECORD) ?
-          profile_->GetOffTheRecordProfile() : profile_;
-      browser_ = new Browser(Browser::CreateParams(profile,
-                                                   chrome::GetActiveDesktop()));
-    }
-
-    OpenURLParams forward_params = params;
-    forward_params.disposition = NEW_FOREGROUND_TAB;
-    return browser_->OpenURL(forward_params);
-  }
-
- private:
-  Profile* profile_;
-  Browser* browser_;
-
-  DISALLOW_COPY_AND_ASSIGN(NewBrowserPageNavigator);
-};
-
-}  // namespace
-
-bool BookmarkContextMenuController::IsPlatformCommandIdEnabled(
-    int command_id,
-    bool* enabled) const {
-  // In Windows 8 metro mode no new window option on a regular chrome window
-  // and no new incognito window option on an incognito chrome window.
-  if (win8::IsSingleWindowMetroMode()) {
-    if (command_id == IDC_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW &&
-        !profile_->IsOffTheRecord()) {
-      *enabled = false;
-      return true;
-    } else if (command_id == IDC_BOOKMARK_BAR_OPEN_ALL_INCOGNITO &&
-               profile_->IsOffTheRecord()) {
-      *enabled = false;
-      return true;
-    }
-  }
-  return false;
-}
-
-bool BookmarkContextMenuController::ExecutePlatformCommand(int command_id,
-                                                           int event_flags) {
-  if (win8::IsSingleWindowMetroMode()) {
-    switch (command_id) {
-      // We need to handle the open in new window and open in incognito window
-      // commands to ensure that they first look for an existing browser object
-      // to handle the request. If we find one then a new foreground tab is
-      // opened, else a new browser object is created.
-      case IDC_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW:
-      case IDC_BOOKMARK_BAR_OPEN_ALL_INCOGNITO: {
-        Profile* profile_to_use = profile_;
-        if (command_id == IDC_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW) {
-          if (profile_to_use->IsOffTheRecord())
-            profile_to_use = profile_to_use->GetOriginalProfile();
-
-          content::RecordAction(
-              UserMetricsAction("BookmarkBar_ContextMenu_OpenAllInNewWindow"));
-        } else {
-          if (!profile_to_use->IsOffTheRecord())
-            profile_to_use = profile_to_use->GetOffTheRecordProfile();
-
-          content::RecordAction(
-              UserMetricsAction("BookmarkBar_ContextMenu_OpenAllIncognito"));
-        }
-
-        NewBrowserPageNavigator navigator_impl(profile_to_use);
-
-        // TODO(robertshield): FTB - Switch this to HOST_DESKTOP_TYPE_ASH when
-        //                     we make that the default for metro.
-        Browser* browser =
-            chrome::FindTabbedBrowser(profile_to_use,
-                                      false,
-                                      chrome::HOST_DESKTOP_TYPE_NATIVE);
-        PageNavigator* navigator = NULL;
-        if (!browser || !browser->tab_strip_model()->GetActiveWebContents()) {
-          navigator = &navigator_impl;
-        } else {
-          browser->window()->Activate();
-          navigator = browser->tab_strip_model()->GetActiveWebContents();
-        }
-
-        chrome::OpenAll(parent_window_, navigator, selection_,
-                        NEW_FOREGROUND_TAB, profile_to_use);
-        for (size_t i = 0; i < selection_.size(); ++i) {
-          RecordBookmarkLaunch(selection_[i],
-                               BOOKMARK_LAUNCH_LOCATION_CONTEXT_MENU);
-        }
-        return true;
-      }
-
-      default:
-        break;
-    }
-  }
-
-  return false;
-}
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_drag_drop_views.cc b/chrome/browser/ui/views/bookmarks/bookmark_drag_drop_views.cc
index 1b3a75b..f22882b 100644
--- a/chrome/browser/ui/views/bookmarks/bookmark_drag_drop_views.cc
+++ b/chrome/browser/ui/views/bookmarks/bookmark_drag_drop_views.cc
@@ -7,7 +7,9 @@
 #include "base/message_loop/message_loop.h"
 #include "base/prefs/pref_service.h"
 #include "chrome/browser/bookmarks/bookmark_model.h"
+#include "chrome/browser/bookmarks/bookmark_model_factory.h"
 #include "chrome/browser/bookmarks/bookmark_node_data.h"
+#include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/bookmarks/bookmark_drag_drop.h"
 #include "chrome/common/pref_names.h"
 #include "components/user_prefs/user_prefs.h"
@@ -28,7 +30,7 @@
   // Set up our OLE machinery
   ui::OSExchangeData data;
   BookmarkNodeData drag_data(nodes);
-  drag_data.Write(profile, &data);
+  drag_data.Write(profile->GetPath(), &data);
 
   // Allow nested message loop so we get DnD events as we drag this around.
   bool was_nested = base::MessageLoop::current()->IsNested();
@@ -80,14 +82,17 @@
                              const BookmarkNodeData& data,
                              const BookmarkNode* parent,
                              int index) {
-  if (data.IsFromProfile(profile) && data.size() > 1)
+  const base::FilePath& profile_path = profile->GetPath();
+
+  if (data.IsFromProfilePath(profile_path) && data.size() > 1)
     // Currently only accept one dragged node at a time.
     return ui::DragDropTypes::DRAG_NONE;
 
   if (!IsValidBookmarkDropLocation(profile, data, parent, index))
     return ui::DragDropTypes::DRAG_NONE;
 
-  if (data.GetFirstNode(profile))
+  if (data.GetFirstNode(BookmarkModelFactory::GetForProfile(profile),
+                        profile_path))
     // User is dragging from this profile: move.
     return ui::DragDropTypes::DRAG_MOVE;
 
@@ -108,8 +113,10 @@
   if (!data.is_valid())
     return false;
 
-  if (data.IsFromProfile(profile)) {
-    std::vector<const BookmarkNode*> nodes = data.GetNodes(profile);
+  const base::FilePath& profile_path = profile->GetPath();
+  if (data.IsFromProfilePath(profile_path)) {
+    std::vector<const BookmarkNode*> nodes = data.GetNodes(
+        BookmarkModelFactory::GetForProfile(profile), profile_path);
     for (size_t i = 0; i < nodes.size(); ++i) {
       // Don't allow the drop if the user is attempting to drop on one of the
       // nodes being dragged.
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_editor_view.cc b/chrome/browser/ui/views/bookmarks/bookmark_editor_view.cc
index ecac9bf..8e0f5a1 100644
--- a/chrome/browser/ui/views/bookmarks/bookmark_editor_view.cc
+++ b/chrome/browser/ui/views/bookmarks/bookmark_editor_view.cc
@@ -208,7 +208,7 @@
     if (!node)
       return;
     if (node->value != 0) {
-      const BookmarkNode* b_node = bb_model_->GetNodeByID(node->value);
+      const BookmarkNode* b_node = GetBookmarkNodeByID(bb_model_, node->value);
       if (!b_node->empty() &&
           !chrome::ConfirmDeleteBookmarkNode(b_node,
             GetWidget()->GetNativeWindow())) {
@@ -608,8 +608,9 @@
   if (!tree_view_->IsExpanded(editor_node))
     return;
 
-  if (editor_node->value != 0)  // The root is 0
-    expanded_nodes->insert(bb_model_->GetNodeByID(editor_node->value));
+  if (editor_node->value != 0)  // The root is 0.
+    expanded_nodes->insert(GetBookmarkNodeByID(bb_model_, editor_node->value));
+
   for (int i = 0; i < editor_node->child_count(); ++i)
     UpdateExpandedNodes(editor_node->GetChild(i), expanded_nodes);
 }
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_menu_delegate.cc b/chrome/browser/ui/views/bookmarks/bookmark_menu_delegate.cc
index e7decf8..1954d03 100644
--- a/chrome/browser/ui/views/bookmarks/bookmark_menu_delegate.cc
+++ b/chrome/browser/ui/views/bookmarks/bookmark_menu_delegate.cc
@@ -48,7 +48,6 @@
       page_navigator_(navigator),
       parent_(parent),
       menu_(NULL),
-      for_drop_(false),
       parent_menu_item_(NULL),
       next_menu_id_(first_menu_id),
       min_menu_id_(first_menu_id),
@@ -174,7 +173,8 @@
   if (drop_data_.has_single_url())
     return true;
 
-  const BookmarkNode* drag_node = drop_data_.GetFirstNode(profile_);
+  const BookmarkNode* drag_node =
+      drop_data_.GetFirstNode(GetBookmarkModel(), profile_->GetPath());
   if (!drag_node) {
     // Dragging a folder from another profile, always accept.
     return true;
@@ -231,8 +231,8 @@
       break;
   }
   DCHECK(drop_parent);
-  return chrome::GetBookmarkDropOperation(profile_, event, drop_data_,
-                                          drop_parent, index_to_drop_at);
+  return chrome::GetBookmarkDropOperation(
+      profile_, event, drop_data_, drop_parent, index_to_drop_at);
 }
 
 int BookmarkMenuDelegate::OnPerformDrop(
@@ -312,7 +312,7 @@
   content::RecordAction(UserMetricsAction("BookmarkBar_DragFromFolder"));
 
   BookmarkNodeData drag_data(menu_id_to_node_map_[sender->GetCommand()]);
-  drag_data.Write(profile_, data);
+  drag_data.Write(profile_->GetPath(), data);
 }
 
 int BookmarkMenuDelegate::GetDragOperations(MenuItemView* sender) {
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_menu_delegate.h b/chrome/browser/ui/views/bookmarks/bookmark_menu_delegate.h
index cf8e2e8..b43db05 100644
--- a/chrome/browser/ui/views/bookmarks/bookmark_menu_delegate.h
+++ b/chrome/browser/ui/views/bookmarks/bookmark_menu_delegate.h
@@ -183,9 +183,6 @@
   // Used when a context menu is shown.
   scoped_ptr<BookmarkContextMenu> context_menu_;
 
-  // Is the menu being shown for a drop?
-  bool for_drop_;
-
   // If non-NULL this is the |parent| passed to Init and is NOT owned by us.
   views::MenuItemView* parent_menu_item_;
 
diff --git a/chrome/browser/ui/views/chrome_views_delegate.cc b/chrome/browser/ui/views/chrome_views_delegate.cc
index e434add..f7dc790 100644
--- a/chrome/browser/ui/views/chrome_views_delegate.cc
+++ b/chrome/browser/ui/views/chrome_views_delegate.cc
@@ -13,6 +13,7 @@
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/profiles/profile_manager.h"
 #include "chrome/browser/ui/views/accessibility/accessibility_event_router_views.h"
+#include "chrome/browser/ui/views/accessibility/automation_manager_views.h"
 #include "chrome/common/pref_names.h"
 #include "grit/chrome_unscaled_resources.h"
 #include "ui/base/resource/resource_bundle.h"
@@ -24,8 +25,11 @@
 
 #if defined(OS_WIN)
 #include <dwmapi.h>
+#include <shellapi.h>
+#include "base/task_runner_util.h"
 #include "base/win/windows_version.h"
 #include "chrome/browser/app_icon_win.h"
+#include "content/public/browser/browser_thread.h"
 #include "ui/base/win/shell.h"
 #endif
 
@@ -50,8 +54,18 @@
 #include "chrome/browser/ui/ash/ash_util.h"
 #endif
 
+
+// Helpers --------------------------------------------------------------------
+
 namespace {
 
+Profile* GetProfileForWindow(const views::Widget* window) {
+  if (!window)
+    return NULL;
+  return reinterpret_cast<Profile*>(
+      window->GetNativeWindowProperty(Profile::kProfileKey));
+}
+
 // If the given window has a profile associated with it, use that profile's
 // preference service. Otherwise, store and retrieve the data from Local State.
 // This function may return NULL if the necessary pref service has not yet
@@ -59,8 +73,7 @@
 // TODO(mirandac): This function will also separate windows by profile in a
 // multi-profile environment.
 PrefService* GetPrefsForWindow(const views::Widget* window) {
-  Profile* profile = reinterpret_cast<Profile*>(
-      window->GetNativeWindowProperty(Profile::kProfileKey));
+  Profile* profile = GetProfileForWindow(window);
   if (!profile) {
     // Use local state for windows that have no explicit profile.
     return g_browser_process->local_state();
@@ -68,10 +81,51 @@
   return profile->GetPrefs();
 }
 
+#if defined(OS_WIN)
+bool MonitorHasTopmostAutohideTaskbarForEdge(UINT edge, const RECT& rect) {
+  APPBARDATA taskbar_data = { sizeof(APPBARDATA), NULL, 0, edge, rect };
+  // NOTE: This call spins a nested message loop.
+  HWND taskbar = reinterpret_cast<HWND>(SHAppBarMessage(ABM_GETAUTOHIDEBAREX,
+                                                        &taskbar_data));
+  return ::IsWindow(taskbar) &&
+      (GetWindowLong(taskbar, GWL_EXSTYLE) & WS_EX_TOPMOST);
+}
+
+int GetAppbarAutohideEdgesOnWorkerThread(HMONITOR monitor) {
+  DCHECK(monitor);
+
+  MONITORINFO mi = { sizeof(MONITORINFO) };
+  GetMonitorInfo(monitor, &mi);
+
+  int edges = 0;
+  if (MonitorHasTopmostAutohideTaskbarForEdge(ABE_LEFT, mi.rcMonitor))
+    edges |= views::ViewsDelegate::EDGE_LEFT;
+  if (MonitorHasTopmostAutohideTaskbarForEdge(ABE_TOP, mi.rcMonitor))
+    edges |= views::ViewsDelegate::EDGE_TOP;
+  if (MonitorHasTopmostAutohideTaskbarForEdge(ABE_RIGHT, mi.rcMonitor))
+    edges |= views::ViewsDelegate::EDGE_RIGHT;
+  if (MonitorHasTopmostAutohideTaskbarForEdge(ABE_BOTTOM, mi.rcMonitor))
+    edges |= views::ViewsDelegate::EDGE_BOTTOM;
+  return edges;
+}
+#endif
+
 }  // namespace
 
-///////////////////////////////////////////////////////////////////////////////
-// ChromeViewsDelegate, views::ViewsDelegate implementation:
+
+// ChromeViewsDelegate --------------------------------------------------------
+
+#if defined(OS_WIN)
+ChromeViewsDelegate::ChromeViewsDelegate()
+    : weak_factory_(this),
+      in_autohide_edges_callback_(false) {
+#else
+ChromeViewsDelegate::ChromeViewsDelegate() {
+#endif
+}
+
+ChromeViewsDelegate::~ChromeViewsDelegate() {
+}
 
 void ChromeViewsDelegate::SaveWindowPlacement(const views::Widget* window,
                                               const std::string& window_name,
@@ -143,6 +197,9 @@
     views::View* view, ui::AXEvent event_type) {
   AccessibilityEventRouterViews::GetInstance()->HandleAccessibilityEvent(
       view, event_type);
+
+  AutomationManagerViews::GetInstance()->HandleEvent(
+      GetProfileForWindow(view->GetWidget()), view, event_type);
 }
 
 void ChromeViewsDelegate::NotifyMenuItemFocused(
@@ -171,14 +228,13 @@
 }
 #endif
 
+#if defined(USE_ASH)
 views::NonClientFrameView* ChromeViewsDelegate::CreateDefaultNonClientFrameView(
     views::Widget* widget) {
-#if defined(USE_ASH)
-  if (chrome::IsNativeViewInAsh(widget->GetNativeView()))
-    return ash::Shell::GetInstance()->CreateDefaultNonClientFrameView(widget);
-#endif
-  return NULL;
+  return chrome::IsNativeViewInAsh(widget->GetNativeView()) ?
+      ash::Shell::GetInstance()->CreateDefaultNonClientFrameView(widget) : NULL;
 }
+#endif
 
 void ChromeViewsDelegate::AddRef() {
   g_browser_process->AddRefModule();
@@ -188,12 +244,6 @@
   g_browser_process->ReleaseModule();
 }
 
-content::WebContents* ChromeViewsDelegate::CreateWebContents(
-    content::BrowserContext* browser_context,
-    content::SiteInstance* site_instance) {
-  return NULL;
-}
-
 void ChromeViewsDelegate::OnBeforeWidgetInit(
     views::Widget::InitParams* params,
     views::internal::NativeWidgetDelegate* delegate) {
@@ -301,22 +351,55 @@
 #endif
 }
 
-base::TimeDelta
-ChromeViewsDelegate::GetDefaultTextfieldObscuredRevealDuration() {
-  return base::TimeDelta();
-}
-
-bool ChromeViewsDelegate::WindowManagerProvidesTitleBar(bool maximized) {
 #if defined(OS_LINUX) && !defined(OS_CHROMEOS)
+bool ChromeViewsDelegate::WindowManagerProvidesTitleBar(bool maximized) {
   // On Ubuntu Unity, the system always provides a title bar for maximized
   // windows.
   views::LinuxUI* ui = views::LinuxUI::instance();
   return maximized && ui && ui->UnityIsRunning();
+}
 #endif
 
-  return false;
+#if defined(OS_WIN)
+int ChromeViewsDelegate::GetAppbarAutohideEdges(HMONITOR monitor,
+                                                const base::Closure& callback) {
+  // Initialize the map with EDGE_BOTTOM. This is important, as if we return an
+  // initial value of 0 (no auto-hide edges) then we'll go fullscreen and
+  // windows will automatically remove WS_EX_TOPMOST from the appbar resulting
+  // in us thinking there is no auto-hide edges. By returning at least one edge
+  // we don't initially go fullscreen until we figure out the real auto-hide
+  // edges.
+  if (!appbar_autohide_edge_map_.count(monitor))
+    appbar_autohide_edge_map_[monitor] = EDGE_BOTTOM;
+  if (monitor && !in_autohide_edges_callback_) {
+    base::PostTaskAndReplyWithResult(
+        content::BrowserThread::GetBlockingPool(),
+        FROM_HERE,
+        base::Bind(&GetAppbarAutohideEdgesOnWorkerThread,
+                   monitor),
+        base::Bind(&ChromeViewsDelegate::OnGotAppbarAutohideEdges,
+                   weak_factory_.GetWeakPtr(),
+                   callback,
+                   monitor,
+                   appbar_autohide_edge_map_[monitor]));
+  }
+  return appbar_autohide_edge_map_[monitor];
 }
 
+void ChromeViewsDelegate::OnGotAppbarAutohideEdges(
+    const base::Closure& callback,
+    HMONITOR monitor,
+    int returned_edges,
+    int edges) {
+  appbar_autohide_edge_map_[monitor] = edges;
+  if (returned_edges == edges)
+    return;
+
+  base::AutoReset<bool> in_callback_setter(&in_autohide_edges_callback_, true);
+  callback.Run();
+}
+#endif
+
 #if !defined(USE_AURA) && !defined(USE_CHROMEOS)
 views::Widget::InitParams::WindowOpacity
 ChromeViewsDelegate::GetOpacityForInitParams(
diff --git a/chrome/browser/ui/views/chrome_views_delegate.h b/chrome/browser/ui/views/chrome_views_delegate.h
index 75d5a5a..62a77b0 100644
--- a/chrome/browser/ui/views/chrome_views_delegate.h
+++ b/chrome/browser/ui/views/chrome_views_delegate.h
@@ -13,10 +13,10 @@
 
 class ChromeViewsDelegate : public views::ViewsDelegate {
  public:
-  ChromeViewsDelegate() {}
-  virtual ~ChromeViewsDelegate() {}
+  ChromeViewsDelegate();
+  virtual ~ChromeViewsDelegate();
 
-  // Overridden from views::ViewsDelegate:
+  // views::ViewsDelegate:
   virtual void SaveWindowPlacement(const views::Widget* window,
                                    const std::string& window_name,
                                    const gfx::Rect& bounds,
@@ -33,32 +33,54 @@
                                      int item_index,
                                      int item_count,
                                      bool has_submenu) OVERRIDE;
-
 #if defined(OS_WIN)
   virtual HICON GetDefaultWindowIcon() const OVERRIDE;
   virtual bool IsWindowInMetro(gfx::NativeWindow window) const OVERRIDE;
 #elif defined(OS_LINUX) && !defined(OS_CHROMEOS)
   virtual gfx::ImageSkia* GetDefaultWindowIcon() const OVERRIDE;
 #endif
+#if defined(USE_ASH)
   virtual views::NonClientFrameView* CreateDefaultNonClientFrameView(
       views::Widget* widget) OVERRIDE;
+#endif
   virtual void AddRef() OVERRIDE;
   virtual void ReleaseRef() OVERRIDE;
-  virtual content::WebContents* CreateWebContents(
-      content::BrowserContext* browser_context,
-      content::SiteInstance* site_instance) OVERRIDE;
   virtual void OnBeforeWidgetInit(
       views::Widget::InitParams* params,
       views::internal::NativeWidgetDelegate* delegate) OVERRIDE;
-  virtual base::TimeDelta GetDefaultTextfieldObscuredRevealDuration() OVERRIDE;
+#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
   virtual bool WindowManagerProvidesTitleBar(bool maximized) OVERRIDE;
+#endif
+#if defined(OS_WIN)
+  virtual int GetAppbarAutohideEdges(HMONITOR monitor,
+                                     const base::Closure& callback) OVERRIDE;
+#endif
 
  private:
+#if defined(OS_WIN)
+  typedef std::map<HMONITOR, int> AppbarAutohideEdgeMap;
+
+  // Callback on main thread with the edges. |returned_edges| is the value that
+  // was returned from the call to GetAutohideEdges() that initiated the lookup.
+  void OnGotAppbarAutohideEdges(const base::Closure& callback,
+                                HMONITOR monitor,
+                                int returned_edges,
+                                int edges);
+#endif
+
   // Function to retrieve default opacity value mainly based on platform
   // and desktop context.
   views::Widget::InitParams::WindowOpacity GetOpacityForInitParams(
       const views::Widget::InitParams& params);
 
+#if defined(OS_WIN)
+  AppbarAutohideEdgeMap appbar_autohide_edge_map_;
+  base::WeakPtrFactory<ChromeViewsDelegate> weak_factory_;
+  // If true we're in the process of notifying a callback from
+  // GetAutohideEdges().start a new query.
+  bool in_autohide_edges_callback_;
+#endif
+
   DISALLOW_COPY_AND_ASSIGN(ChromeViewsDelegate);
 };
 
diff --git a/chrome/browser/ui/views/create_application_shortcut_view.cc b/chrome/browser/ui/views/create_application_shortcut_view.cc
index 521ebe3..338f94b 100644
--- a/chrome/browser/ui/views/create_application_shortcut_view.cc
+++ b/chrome/browser/ui/views/create_application_shortcut_view.cc
@@ -521,7 +521,6 @@
     const extensions::Extension* app,
     const base::Closure& close_callback)
         : CreateApplicationShortcutView(profile),
-          app_(app),
           close_callback_(close_callback),
           weak_ptr_factory_(this) {
   // Required by InitControls().
diff --git a/chrome/browser/ui/views/create_application_shortcut_view.h b/chrome/browser/ui/views/create_application_shortcut_view.h
index 86763a8..12aa0d7 100644
--- a/chrome/browser/ui/views/create_application_shortcut_view.h
+++ b/chrome/browser/ui/views/create_application_shortcut_view.h
@@ -135,7 +135,6 @@
   void OnShortcutInfoLoaded(
       const web_app::ShortcutInfo& shortcut_info);
 
-  const extensions::Extension* app_;
   base::Closure close_callback_;
 
   base::WeakPtrFactory<CreateChromeApplicationShortcutView> weak_ptr_factory_;
diff --git a/chrome/browser/ui/views/crypto_module_password_dialog_view.h b/chrome/browser/ui/views/crypto_module_password_dialog_view.h
index 9a070cf..dbddff1 100644
--- a/chrome/browser/ui/views/crypto_module_password_dialog_view.h
+++ b/chrome/browser/ui/views/crypto_module_password_dialog_view.h
@@ -55,7 +55,6 @@
             const std::string& slot_name,
             CryptoModulePasswordReason reason);
 
-  views::Label* title_label_;
   views::Label* reason_label_;
   views::Label* password_label_;
   views::Textfield* password_entry_;
diff --git a/chrome/browser/ui/views/edit_search_engine_dialog.h b/chrome/browser/ui/views/edit_search_engine_dialog.h
index a76e22b..f018254 100644
--- a/chrome/browser/ui/views/edit_search_engine_dialog.h
+++ b/chrome/browser/ui/views/edit_search_engine_dialog.h
@@ -71,9 +71,6 @@
                        bool is_valid,
                        int invalid_message_id);
 
-  // View containing the buttons, text fields ...
-  views::View* view_;
-
   // Text fields.
   views::Textfield* title_tf_;
   views::Textfield* keyword_tf_;
diff --git a/chrome/browser/ui/views/extensions/extension_installed_bubble_view.cc b/chrome/browser/ui/views/extensions/extension_installed_bubble_view.cc
index 1ed806f..c28ba8d 100644
--- a/chrome/browser/ui/views/extensions/extension_installed_bubble_view.cc
+++ b/chrome/browser/ui/views/extensions/extension_installed_bubble_view.cc
@@ -90,11 +90,9 @@
   InstalledBubbleContent(Browser* browser,
                          const Extension* extension,
                          ExtensionInstalledBubble::BubbleType type,
-                         const SkBitmap* icon,
-                         ExtensionInstalledBubbleView* bubble)
+                         const SkBitmap* icon)
       : browser_(browser),
         extension_id_(extension->id()),
-        bubble_(bubble),
         type_(type),
         flavors_(NONE),
         height_of_signin_promo_(0u),
@@ -482,9 +480,6 @@
   // The id of the extension just installed.
   const std::string extension_id_;
 
-  // The ExtensionInstalledBubbleView showing us.
-  ExtensionInstalledBubbleView* bubble_;
-
   // The string that contains the link text at the beginning of the sign-in
   // promo text.
   base::string16 signin_promo_link_text_;
@@ -577,7 +572,7 @@
   SetLayoutManager(new views::FillLayout());
   AddChildView(new InstalledBubbleContent(
       bubble_.browser(), bubble_.extension(), bubble_.type(),
-      &bubble_.icon(), this));
+      &bubble_.icon()));
 
   views::BubbleDelegateView::CreateBubble(this)->Show();
 
diff --git a/chrome/browser/ui/views/extensions/extension_message_bubble_view.cc b/chrome/browser/ui/views/extensions/extension_message_bubble_view.cc
index 2e58aae..09a9236 100644
--- a/chrome/browser/ui/views/extensions/extension_message_bubble_view.cc
+++ b/chrome/browser/ui/views/extensions/extension_message_bubble_view.cc
@@ -285,6 +285,9 @@
 
 void ExtensionMessageBubbleFactory::MaybeShow(views::View* anchor_view) {
 #if defined(OS_WIN)
+  bool is_initial_check = IsInitialProfileCheck(profile_->GetOriginalProfile());
+  RecordProfileCheck(profile_->GetOriginalProfile());
+
   // The list of suspicious extensions takes priority over the dev mode bubble
   // and the settings API bubble, since that needs to be shown as soon as we
   // disable something. The settings API bubble is shown on first startup after
@@ -293,20 +296,17 @@
   // The dev mode bubble is not time sensitive like the other two so we'll catch
   // the dev mode extensions on the next startup/next window that opens. That
   // way, we're not too spammy with the bubbles.
-  if (!shown_suspicious_extensions_bubble_) {
-    if (MaybeShowSuspiciousExtensionsBubble(anchor_view))
-      return;
-  }
+  if (!shown_suspicious_extensions_bubble_ &&
+      MaybeShowSuspiciousExtensionsBubble(anchor_view))
+    return;
 
   if (!shown_startup_override_extensions_bubble_ &&
-      IsInitialProfileCheck(profile_->GetOriginalProfile()) &&
+      is_initial_check &&
       MaybeShowStartupOverrideExtensionsBubble(anchor_view))
     return;
 
   if (!shown_dev_mode_extensions_bubble_)
     MaybeShowDevModeExtensionsBubble(anchor_view);
-
-  RecordProfileCheck(profile_->GetOriginalProfile());
 #endif  // OS_WIN
 }
 
diff --git a/chrome/browser/ui/views/extensions/extension_uninstall_dialog_view.cc b/chrome/browser/ui/views/extensions/extension_uninstall_dialog_view.cc
index a58b667..db14320 100644
--- a/chrome/browser/ui/views/extensions/extension_uninstall_dialog_view.cc
+++ b/chrome/browser/ui/views/extensions/extension_uninstall_dialog_view.cc
@@ -84,7 +84,9 @@
   virtual base::string16 GetDialogButtonLabel(
       ui::DialogButton button) const OVERRIDE;
   virtual int GetDefaultDialogButton() const OVERRIDE {
-    return ui::DIALOG_BUTTON_CANCEL;
+    // Default to accept when triggered via chrome://extensions page.
+    return triggered_by_extension_ ?
+        ui::DIALOG_BUTTON_CANCEL : ui::DIALOG_BUTTON_OK;
   }
   virtual bool Accept() OVERRIDE;
   virtual bool Cancel() OVERRIDE;
@@ -104,6 +106,7 @@
 
   views::ImageView* icon_;
   views::Label* heading_;
+  bool triggered_by_extension_;
 
   DISALLOW_COPY_AND_ASSIGN(ExtensionUninstallDialogDelegateView);
 };
@@ -158,7 +161,8 @@
     const extensions::Extension* extension,
     const extensions::Extension* triggering_extension,
     gfx::ImageSkia* icon)
-    : dialog_(dialog_view) {
+    : dialog_(dialog_view),
+      triggered_by_extension_(triggering_extension != NULL) {
   // Scale down to icon size, but allow smaller icons (don't scale up).
   gfx::Size size(icon->width(), icon->height());
   if (size.width() > kIconSize || size.height() > kIconSize)
diff --git a/chrome/browser/ui/views/extensions/media_galleries_dialog_views.cc b/chrome/browser/ui/views/extensions/media_galleries_dialog_views.cc
index f0c00b4..98fa00e 100644
--- a/chrome/browser/ui/views/extensions/media_galleries_dialog_views.cc
+++ b/chrome/browser/ui/views/extensions/media_galleries_dialog_views.cc
@@ -138,15 +138,13 @@
 
   // Add attached galleries checkboxes.
   checkbox_map_.clear();
-  new_checkbox_map_.clear();
   GalleryPermissionsVector permissions = controller_->AttachedPermissions();
   for (GalleryPermissionsVector::const_iterator iter = permissions.begin();
        iter != permissions.end(); ++iter) {
     int spacing = 0;
     if (iter + 1 == permissions.end())
       spacing = views::kRelatedControlSmallVerticalSpacing;
-    AddOrUpdateGallery(iter->pref_info, iter->allowed, scroll_container,
-                       spacing);
+    AddOrUpdateGallery(*iter, scroll_container, spacing);
   }
 
   GalleryPermissionsVector unattached_permissions =
@@ -174,11 +172,11 @@
     for (GalleryPermissionsVector::const_iterator iter =
              unattached_permissions.begin();
          iter != unattached_permissions.end(); ++iter) {
-      AddOrUpdateGallery(iter->pref_info, iter->allowed, scroll_container, 0);
+      AddOrUpdateGallery(*iter, scroll_container, 0);
     }
   }
 
-  confirm_available_ = controller_->HasPermittedGalleries();
+  confirm_available_ = controller_->IsAcceptAllowed();
 
   // Add the scrollable area to the outer dialog view. It will squeeze against
   // the title/subtitle and buttons to occupy all available space in the dialog.
@@ -198,19 +196,17 @@
 }
 
 bool MediaGalleriesDialogViews::AddOrUpdateGallery(
-    const MediaGalleryPrefInfo& gallery,
-    bool permitted,
+    const MediaGalleriesDialogController::GalleryPermission& gallery,
     views::View* container,
     int trailing_vertical_space) {
-  base::string16 label = gallery.GetGalleryDisplayName();
-  base::string16 tooltip_text = gallery.GetGalleryTooltip();
-  base::string16 details = gallery.GetGalleryAdditionalDetails();
+  base::string16 label = gallery.pref_info.GetGalleryDisplayName();
+  base::string16 tooltip_text = gallery.pref_info.GetGalleryTooltip();
+  base::string16 details = gallery.pref_info.GetGalleryAdditionalDetails();
 
-  CheckboxMap::iterator iter = checkbox_map_.find(gallery.pref_id);
-  if (iter != checkbox_map_.end() &&
-      gallery.pref_id != kInvalidMediaGalleryPrefId) {
+  CheckboxMap::iterator iter = checkbox_map_.find(gallery.gallery_id);
+  if (iter != checkbox_map_.end()) {
     views::Checkbox* checkbox = iter->second->checkbox();
-    checkbox->SetChecked(permitted);
+    checkbox->SetChecked(gallery.allowed);
     checkbox->SetText(label);
     checkbox->SetTooltipText(tooltip_text);
     iter->second->secondary_text()->SetText(details);
@@ -218,21 +214,12 @@
     return false;
   }
 
-  views::ContextMenuController* menu_controller = NULL;
-  if (gallery.pref_id != kInvalidMediaGalleryPrefId)
-    menu_controller = this;
-
   MediaGalleryCheckboxView* gallery_view =
       new MediaGalleryCheckboxView(label, tooltip_text, details, false,
-                                   trailing_vertical_space, this,
-                                   menu_controller);
-  gallery_view->checkbox()->SetChecked(permitted);
+                                   trailing_vertical_space, this, this);
+  gallery_view->checkbox()->SetChecked(gallery.allowed);
   container->AddChildView(gallery_view);
-
-  if (gallery.pref_id != kInvalidMediaGalleryPrefId)
-    checkbox_map_[gallery.pref_id] = gallery_view;
-  else
-    new_checkbox_map_[gallery_view] = gallery;
+  checkbox_map_[gallery.gallery_id] = gallery_view;
 
   return true;
 }
@@ -310,18 +297,11 @@
   for (CheckboxMap::const_iterator iter = checkbox_map_.begin();
        iter != checkbox_map_.end(); ++iter) {
     if (sender == iter->second->checkbox()) {
-      controller_->DidToggleGalleryId(iter->first,
-                                      iter->second->checkbox()->checked());
+      controller_->DidToggleGallery(iter->first,
+                                    iter->second->checkbox()->checked());
       return;
     }
   }
-  for (NewCheckboxMap::const_iterator iter = new_checkbox_map_.begin();
-       iter != new_checkbox_map_.end(); ++iter) {
-    if (sender == iter->first->checkbox()) {
-      controller_->DidToggleNewGallery(iter->second,
-                                       iter->first->checkbox()->checked());
-    }
-  }
 }
 
 void MediaGalleriesDialogViews::ShowContextMenuForView(
@@ -339,7 +319,7 @@
 
 void MediaGalleriesDialogViews::ShowContextMenu(const gfx::Point& point,
                                                 ui::MenuSourceType source_type,
-                                                MediaGalleryPrefId id) {
+                                                GalleryDialogId id) {
   context_menu_runner_.reset(new views::MenuRunner(
       controller_->GetContextMenu(id)));
 
diff --git a/chrome/browser/ui/views/extensions/media_galleries_dialog_views.h b/chrome/browser/ui/views/extensions/media_galleries_dialog_views.h
index 8e9b922..2eff512 100644
--- a/chrome/browser/ui/views/extensions/media_galleries_dialog_views.h
+++ b/chrome/browser/ui/views/extensions/media_galleries_dialog_views.h
@@ -65,22 +65,20 @@
   FRIEND_TEST_ALL_PREFIXES(MediaGalleriesDialogTest, UpdateAdds);
   FRIEND_TEST_ALL_PREFIXES(MediaGalleriesDialogTest, ForgetDeletes);
 
-  typedef std::map<MediaGalleryPrefId, MediaGalleryCheckboxView*> CheckboxMap;
-  typedef std::map<MediaGalleryCheckboxView*, MediaGalleryPrefInfo>
-      NewCheckboxMap;
+  typedef std::map<GalleryDialogId, MediaGalleryCheckboxView*> CheckboxMap;
 
   void InitChildViews();
 
   // Adds a checkbox or updates an existing checkbox. Returns true if a new one
   // was added.
-  bool AddOrUpdateGallery(const MediaGalleryPrefInfo& gallery,
-                          bool permitted,
-                          views::View* container,
-                          int trailing_vertical_space);
+  bool AddOrUpdateGallery(
+      const MediaGalleriesDialogController::GalleryPermission& gallery,
+      views::View* container,
+      int trailing_vertical_space);
 
   void ShowContextMenu(const gfx::Point& point,
                        ui::MenuSourceType source_type,
-                       MediaGalleryPrefId id);
+                       GalleryDialogId id);
 
   // Whether |controller_| has a valid WebContents or not.
   // In unit tests, it may not.
@@ -94,11 +92,9 @@
   // The contents of the dialog. Owned by |window_|'s RootView except for tests.
   views::View* contents_;
 
-  // A map from media gallery ID to views::Checkbox view.
+  // A map from gallery ID to views::Checkbox view.
   CheckboxMap checkbox_map_;
 
-  NewCheckboxMap new_checkbox_map_;
-
   // Pointer to the button to add a new gallery. Owned by parent in
   // the dialog views tree.
   views::LabelButton* add_gallery_button_;
diff --git a/chrome/browser/ui/views/extensions/media_galleries_dialog_views_unittest.cc b/chrome/browser/ui/views/extensions/media_galleries_dialog_views_unittest.cc
index b95afe5..979db62 100644
--- a/chrome/browser/ui/views/extensions/media_galleries_dialog_views_unittest.cc
+++ b/chrome/browser/ui/views/extensions/media_galleries_dialog_views_unittest.cc
@@ -62,10 +62,10 @@
   MediaGalleriesDialogController::GalleryPermissionsVector attached_permissions;
   attached_permissions.push_back(
       MediaGalleriesDialogController::GalleryPermission(
-          MakePrefInfoForTesting(1), true));
+          1, MakePrefInfoForTesting(10), true));
   attached_permissions.push_back(
       MediaGalleriesDialogController::GalleryPermission(
-          MakePrefInfoForTesting(2), false));
+          2, MakePrefInfoForTesting(20), false));
   EXPECT_CALL(controller, AttachedPermissions()).
       WillRepeatedly(Return(attached_permissions));
 
@@ -91,7 +91,7 @@
   MediaGalleriesDialogController::GalleryPermissionsVector attached_permissions;
   attached_permissions.push_back(
       MediaGalleriesDialogController::GalleryPermission(
-          MakePrefInfoForTesting(1), true));
+          1, MakePrefInfoForTesting(10), true));
   EXPECT_CALL(controller, AttachedPermissions()).
       WillRepeatedly(Return(attached_permissions));
 
@@ -106,11 +106,11 @@
   EXPECT_TRUE(checkbox->checked());
 
   ui::KeyEvent dummy_event(ui::ET_KEY_PRESSED, ui::VKEY_A, ui::EF_NONE, false);
-  EXPECT_CALL(controller, DidToggleGalleryId(1, false));
+  EXPECT_CALL(controller, DidToggleGallery(1, false));
   checkbox->SetChecked(false);
   dialog.ButtonPressed(checkbox, dummy_event);
 
-  EXPECT_CALL(controller, DidToggleGalleryId(1, true));
+  EXPECT_CALL(controller, DidToggleGallery(1, true));
   checkbox->SetChecked(true);
   dialog.ButtonPressed(checkbox, dummy_event);
 }
@@ -133,20 +133,20 @@
 
   EXPECT_TRUE(dialog.checkbox_map_.empty());
 
-  MediaGalleryPrefInfo gallery1 = MakePrefInfoForTesting(1);
+  MediaGalleryPrefInfo gallery1 = MakePrefInfoForTesting(10);
   attached_permissions.push_back(
-      MediaGalleriesDialogController::GalleryPermission(gallery1, true));
+      MediaGalleriesDialogController::GalleryPermission(1, gallery1, true));
   dialog.UpdateGalleries();
   EXPECT_EQ(1U, dialog.checkbox_map_.size());
 
-  MediaGalleryPrefInfo gallery2 = MakePrefInfoForTesting(2);
+  MediaGalleryPrefInfo gallery2 = MakePrefInfoForTesting(20);
   attached_permissions.push_back(
-      MediaGalleriesDialogController::GalleryPermission(gallery2, true));
+      MediaGalleriesDialogController::GalleryPermission(2, gallery2, true));
   dialog.UpdateGalleries();
   EXPECT_EQ(2U, dialog.checkbox_map_.size());
 
   attached_permissions.push_back(
-      MediaGalleriesDialogController::GalleryPermission(gallery2, false));
+      MediaGalleriesDialogController::GalleryPermission(2, gallery2, false));
   dialog.UpdateGalleries();
   EXPECT_EQ(2U, dialog.checkbox_map_.size());
 }
@@ -167,15 +167,15 @@
 
   EXPECT_TRUE(dialog.checkbox_map_.empty());
 
-  MediaGalleryPrefInfo gallery1 = MakePrefInfoForTesting(1);
+  MediaGalleryPrefInfo gallery1 = MakePrefInfoForTesting(10);
   attached_permissions.push_back(
-      MediaGalleriesDialogController::GalleryPermission(gallery1, true));
+      MediaGalleriesDialogController::GalleryPermission(1, gallery1, true));
   dialog.UpdateGalleries();
   EXPECT_EQ(1U, dialog.checkbox_map_.size());
 
-  MediaGalleryPrefInfo gallery2 = MakePrefInfoForTesting(2);
+  MediaGalleryPrefInfo gallery2 = MakePrefInfoForTesting(20);
   attached_permissions.push_back(
-      MediaGalleriesDialogController::GalleryPermission(gallery2, true));
+      MediaGalleriesDialogController::GalleryPermission(2, gallery2, true));
   dialog.UpdateGalleries();
   EXPECT_EQ(2U, dialog.checkbox_map_.size());
 
diff --git a/chrome/browser/ui/views/find_bar_view.cc b/chrome/browser/ui/views/find_bar_view.cc
index 966b678..f07c373 100644
--- a/chrome/browser/ui/views/find_bar_view.cc
+++ b/chrome/browser/ui/views/find_bar_view.cc
@@ -35,12 +35,11 @@
 
 namespace {
 
-// The amount of whitespace to have before the find button.
-const int kWhiteSpaceAfterMatchCountLabel = 1;
-
-// The margins around the search field and the close button.
+// The margins around the search field, match count label, and the close button.
 const int kMarginLeftOfCloseButton = 3;
 const int kMarginRightOfCloseButton = 7;
+const int kMarginLeftOfMatchCountLabel = 2;
+const int kMarginRightOfMatchCountLabel = 1;
 const int kMarginLeftOfFindTextfield = 12;
 
 // The margins around the match count label (We add extra space so that the
@@ -316,7 +315,7 @@
   sz.Enlarge(kMatchCountExtraWidth, 0);
   sz.SetToMax(gfx::Size(kMatchCountMinWidth, 0));
   int match_count_x =
-      find_previous_button_->x() - kWhiteSpaceAfterMatchCountLabel - sz.width();
+      find_previous_button_->x() - kMarginRightOfMatchCountLabel - sz.width();
   int find_text_y = (height() - find_text_->GetPreferredSize().height()) / 2;
   match_count_text_->SetBounds(match_count_x,
                                find_text_y + find_text_->GetBaseline() -
@@ -324,10 +323,10 @@
                                sz.width(), sz.height());
 
   // And whatever space is left in between, gets filled up by the find edit box.
-  int find_text_width = std::max(0, match_count_x - kMarginLeftOfFindTextfield);
-  find_text_->SetBounds(std::max(0, match_count_x - find_text_width),
-                        find_text_y, find_text_width,
-                        find_text_->GetPreferredSize().height());
+  int find_text_width = std::max(0, match_count_x -
+      kMarginLeftOfMatchCountLabel - kMarginLeftOfFindTextfield);
+  find_text_->SetBounds(kMarginLeftOfFindTextfield, find_text_y,
+      find_text_width, find_text_->GetPreferredSize().height());
 
   // The focus forwarder view is a hidden view that should cover the area
   // between the find text box and the find button so that when the user clicks
diff --git a/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_win.cc b/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_win.cc
index e877b8c..bd9dc65 100644
--- a/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_win.cc
+++ b/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_win.cc
@@ -143,7 +143,8 @@
     return false;
   }
 
-  int border_thickness = GetSystemMetrics(SM_CXSIZEFRAME);
+  int border_thickness =
+      GetSystemMetrics(SM_CXSIZEFRAME) + GetSystemMetrics(SM_CXPADDEDBORDER);
   // In fullscreen mode, we have no frame. In restored mode, we draw our own
   // client edge over part of the default frame.
   if (GetWidget()->IsFullscreen())
diff --git a/chrome/browser/ui/views/frame/browser_frame.cc b/chrome/browser/ui/views/frame/browser_frame.cc
index a2db1e9..585a12c 100644
--- a/chrome/browser/ui/views/frame/browser_frame.cc
+++ b/chrome/browser/ui/views/frame/browser_frame.cc
@@ -166,7 +166,9 @@
 }
 
 gfx::Rect BrowserFrame::GetBoundsForTabStrip(views::View* tabstrip) const {
-  return browser_frame_view_->GetBoundsForTabStrip(tabstrip);
+  // This can be invoked before |browser_frame_view_| has been set.
+  return browser_frame_view_ ?
+      browser_frame_view_->GetBoundsForTabStrip(tabstrip) : gfx::Rect();
 }
 
 int BrowserFrame::GetTopInset() const {
diff --git a/chrome/browser/ui/views/frame/browser_header_painter_ash.cc b/chrome/browser/ui/views/frame/browser_header_painter_ash.cc
index 799cf03..be2dbc7 100644
--- a/chrome/browser/ui/views/frame/browser_header_painter_ash.cc
+++ b/chrome/browser/ui/views/frame/browser_header_painter_ash.cc
@@ -10,7 +10,6 @@
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/views/frame/browser_frame.h"
 #include "chrome/browser/ui/views/frame/browser_view.h"
-#include "grit/ash_resources.h"
 #include "grit/theme_resources.h"
 #include "third_party/skia/include/core/SkCanvas.h"
 #include "third_party/skia/include/core/SkColor.h"
@@ -30,10 +29,8 @@
 using views::Widget;
 
 namespace {
-// Color for the restored window title text.
-const SkColor kRestoredWindowTitleTextColor = SkColorSetRGB(40, 40, 40);
-// Color for the maximized window title text.
-const SkColor kMaximizedWindowTitleTextColor = SK_ColorWHITE;
+// Color for the window title text.
+const SkColor kWindowTitleTextColor = SkColorSetRGB(40, 40, 40);
 // Duration of crossfade animation for activating and deactivating frame.
 const int kActivationCrossfadeDurationMs = 200;
 
@@ -326,11 +323,9 @@
   // The window icon is painted by its own views::View.
   gfx::Rect title_bounds = GetTitleBounds();
   title_bounds.set_x(view_->GetMirroredXForRect(title_bounds));
-  SkColor title_color = (frame_->IsMaximized() || frame_->IsFullscreen()) ?
-      kMaximizedWindowTitleTextColor : kRestoredWindowTitleTextColor;
   canvas->DrawStringRectWithFlags(frame_->widget_delegate()->GetWindowTitle(),
                                   BrowserFrame::GetTitleFontList(),
-                                  title_color,
+                                  kWindowTitleTextColor,
                                   title_bounds,
                                   gfx::Canvas::NO_SUBPIXEL_RENDERING);
 }
@@ -368,100 +363,68 @@
         IDR_THEME_FRAME_INCOGNITO_INACTIVE : IDR_THEME_FRAME_INACTIVE;
   }
 
-  if ((frame_->IsMaximized() || frame_->IsFullscreen()) &&
-      !tp->HasCustomImage(IDR_THEME_FRAME) &&
-      !tp->HasCustomImage(frame_image_id) &&
-      frame_overlay_image_id == 0) {
-    *frame_image = *tp->GetImageSkiaNamed(
-        IDR_ASH_BROWSER_WINDOW_HEADER_BASE_MAXIMIZED);
-  } else {
-    *frame_image = *tp->GetImageSkiaNamed(frame_image_id);
-  }
-
+  *frame_image = *tp->GetImageSkiaNamed(frame_image_id);
   *frame_overlay_image = (frame_overlay_image_id == 0) ?
       gfx::ImageSkia() : *tp->GetImageSkiaNamed(frame_overlay_image_id);
 }
 
 gfx::ImageSkia BrowserHeaderPainterAsh::GetFrameImageForNonTabbedBrowser(
     Mode mode) const {
+  // Request the images from the ResourceBundle (and not from the ThemeProvider)
+  // in order to get the default non-themed assets.
   ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
-  if (frame_->IsMaximized() || frame_->IsFullscreen())
-    return *rb.GetImageSkiaNamed(IDR_ASH_BROWSER_WINDOW_HEADER_BASE_MAXIMIZED);
-
   if (mode == MODE_ACTIVE) {
     return *rb.GetImageSkiaNamed(is_incognito_ ?
-        IDR_ASH_BROWSER_WINDOW_HEADER_BASE_RESTORED_INCOGNITO_ACTIVE :
-        IDR_ASH_BROWSER_WINDOW_HEADER_BASE_RESTORED_ACTIVE);
+        IDR_THEME_FRAME_INCOGNITO : IDR_THEME_FRAME);
   }
   return *rb.GetImageSkiaNamed(is_incognito_ ?
-      IDR_ASH_BROWSER_WINDOW_HEADER_BASE_RESTORED_INCOGNITO_INACTIVE :
-      IDR_ASH_BROWSER_WINDOW_HEADER_BASE_RESTORED_INACTIVE);
+      IDR_THEME_FRAME_INCOGNITO_INACTIVE : IDR_THEME_FRAME_INACTIVE);
 }
 
 void BrowserHeaderPainterAsh::UpdateCaptionButtonImages() {
+  int hover_background_id = 0;
+  int pressed_background_id = 0;
   if (frame_->IsMaximized() || frame_->IsFullscreen()) {
-    caption_button_container_->SetButtonImages(
-        ash::CAPTION_BUTTON_ICON_MINIMIZE,
-        IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_MAXIMIZED_MINIMIZE,
-        IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_MAXIMIZED_MINIMIZE,
-        IDR_ASH_BROWSER_WINDOW_CONTROL_BACKGROUND_MAXIMIZED_H,
-        IDR_ASH_BROWSER_WINDOW_CONTROL_BACKGROUND_MAXIMIZED_P);
-    caption_button_container_->SetButtonImages(
-        ash::CAPTION_BUTTON_ICON_MAXIMIZE_RESTORE,
-        IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_MAXIMIZED_SIZE,
-        IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_MAXIMIZED_SIZE,
-        IDR_ASH_BROWSER_WINDOW_CONTROL_BACKGROUND_MAXIMIZED_H,
-        IDR_ASH_BROWSER_WINDOW_CONTROL_BACKGROUND_MAXIMIZED_P);
-    caption_button_container_->SetButtonImages(
-        ash::CAPTION_BUTTON_ICON_CLOSE,
-        IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_MAXIMIZED_CLOSE,
-        IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_MAXIMIZED_CLOSE,
-        IDR_ASH_BROWSER_WINDOW_CONTROL_BACKGROUND_MAXIMIZED_H,
-        IDR_ASH_BROWSER_WINDOW_CONTROL_BACKGROUND_MAXIMIZED_P);
-    caption_button_container_->SetButtonImages(
-        ash::CAPTION_BUTTON_ICON_LEFT_SNAPPED,
-        IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_MAXIMIZED_LEFT_SNAPPED,
-        IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_MAXIMIZED_LEFT_SNAPPED,
-        IDR_ASH_BROWSER_WINDOW_CONTROL_BACKGROUND_MAXIMIZED_H,
-        IDR_ASH_BROWSER_WINDOW_CONTROL_BACKGROUND_MAXIMIZED_P);
-    caption_button_container_->SetButtonImages(
-        ash::CAPTION_BUTTON_ICON_RIGHT_SNAPPED,
-        IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_MAXIMIZED_RIGHT_SNAPPED,
-        IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_MAXIMIZED_RIGHT_SNAPPED,
-        IDR_ASH_BROWSER_WINDOW_CONTROL_BACKGROUND_MAXIMIZED_H,
-        IDR_ASH_BROWSER_WINDOW_CONTROL_BACKGROUND_MAXIMIZED_P);
+    hover_background_id =
+        IDR_ASH_BROWSER_WINDOW_CONTROL_BACKGROUND_MAXIMIZED_H;
+    pressed_background_id =
+        IDR_ASH_BROWSER_WINDOW_CONTROL_BACKGROUND_MAXIMIZED_P;
   } else {
-    caption_button_container_->SetButtonImages(
-        ash::CAPTION_BUTTON_ICON_MINIMIZE,
-        IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_RESTORED_MINIMIZE,
-        IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_RESTORED_MINIMIZE,
-        IDR_ASH_BROWSER_WINDOW_CONTROL_BACKGROUND_RESTORED_H,
-        IDR_ASH_BROWSER_WINDOW_CONTROL_BACKGROUND_RESTORED_P);
-    caption_button_container_->SetButtonImages(
-        ash::CAPTION_BUTTON_ICON_MAXIMIZE_RESTORE,
-        IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_RESTORED_SIZE,
-        IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_RESTORED_SIZE,
-        IDR_ASH_BROWSER_WINDOW_CONTROL_BACKGROUND_RESTORED_H,
-        IDR_ASH_BROWSER_WINDOW_CONTROL_BACKGROUND_RESTORED_P);
-    caption_button_container_->SetButtonImages(
-        ash::CAPTION_BUTTON_ICON_CLOSE,
-        IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_RESTORED_CLOSE,
-        IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_RESTORED_CLOSE,
-        IDR_ASH_BROWSER_WINDOW_CONTROL_BACKGROUND_RESTORED_H,
-        IDR_ASH_BROWSER_WINDOW_CONTROL_BACKGROUND_RESTORED_P);
-    caption_button_container_->SetButtonImages(
-        ash::CAPTION_BUTTON_ICON_LEFT_SNAPPED,
-        IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_RESTORED_LEFT_SNAPPED,
-        IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_RESTORED_LEFT_SNAPPED,
-        IDR_ASH_BROWSER_WINDOW_CONTROL_BACKGROUND_RESTORED_H,
-        IDR_ASH_BROWSER_WINDOW_CONTROL_BACKGROUND_RESTORED_P);
-    caption_button_container_->SetButtonImages(
-        ash::CAPTION_BUTTON_ICON_RIGHT_SNAPPED,
-        IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_RESTORED_RIGHT_SNAPPED,
-        IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_RESTORED_RIGHT_SNAPPED,
-        IDR_ASH_BROWSER_WINDOW_CONTROL_BACKGROUND_RESTORED_H,
-        IDR_ASH_BROWSER_WINDOW_CONTROL_BACKGROUND_RESTORED_P);
+    hover_background_id =
+        IDR_ASH_BROWSER_WINDOW_CONTROL_BACKGROUND_RESTORED_H;
+    pressed_background_id =
+        IDR_ASH_BROWSER_WINDOW_CONTROL_BACKGROUND_RESTORED_P;
   }
+  caption_button_container_->SetButtonImages(
+      ash::CAPTION_BUTTON_ICON_MINIMIZE,
+      IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_MINIMIZE,
+      IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_MINIMIZE,
+      hover_background_id,
+      pressed_background_id);
+  caption_button_container_->SetButtonImages(
+      ash::CAPTION_BUTTON_ICON_MAXIMIZE_RESTORE,
+      IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_SIZE,
+      IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_SIZE,
+      hover_background_id,
+      pressed_background_id);
+  caption_button_container_->SetButtonImages(
+      ash::CAPTION_BUTTON_ICON_CLOSE,
+      IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_CLOSE,
+      IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_CLOSE,
+      hover_background_id,
+      pressed_background_id);
+  caption_button_container_->SetButtonImages(
+      ash::CAPTION_BUTTON_ICON_LEFT_SNAPPED,
+      IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_LEFT_SNAPPED,
+      IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_LEFT_SNAPPED,
+      hover_background_id,
+      pressed_background_id);
+  caption_button_container_->SetButtonImages(
+      ash::CAPTION_BUTTON_ICON_RIGHT_SNAPPED,
+      IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_RIGHT_SNAPPED,
+      IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_RIGHT_SNAPPED,
+      hover_background_id,
+      pressed_background_id);
 }
 
 gfx::Rect BrowserHeaderPainterAsh::GetPaintedBounds() const {
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view.cc b/chrome/browser/ui/views/frame/browser_non_client_frame_view.cc
index 3e50e35..11dcf8f 100644
--- a/chrome/browser/ui/views/frame/browser_non_client_frame_view.cc
+++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view.cc
@@ -7,6 +7,7 @@
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/profiles/avatar_menu.h"
 #include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/profiles/profile_avatar_icon_util.h"
 #include "chrome/browser/profiles/profile_info_cache.h"
 #include "chrome/browser/profiles/profile_manager.h"
 #include "chrome/browser/profiles/profiles_state.h"
@@ -16,7 +17,7 @@
 #include "chrome/browser/ui/views/profiles/avatar_label.h"
 #include "chrome/browser/ui/views/profiles/avatar_menu_button.h"
 #include "chrome/browser/ui/views/profiles/new_avatar_button.h"
-#include "chrome/common/profile_management_switches.h"
+#include "components/signin/core/common/profile_management_switches.h"
 #include "grit/generated_resources.h"
 #include "grit/theme_resources.h"
 #include "third_party/skia/include/core/SkColor.h"
@@ -91,7 +92,8 @@
   base::string16 text;
   bool is_rectangle = false;
   if (browser_view_->IsGuestSession()) {
-    avatar = rb.GetImageNamed(browser_view_->GetGuestIconResourceID());
+    avatar = rb.
+        GetImageNamed(profiles::GetPlaceholderAvatarIconResourceID());
   } else if (browser_view_->IsOffTheRecord()) {
     avatar = rb.GetImageNamed(browser_view_->GetOTRIconResourceID());
     // TODO(nkostylev): Allow this on ChromeOS once the ChromeOS test
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash.cc b/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash.cc
index 00c2882..19d9161 100644
--- a/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash.cc
+++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash.cc
@@ -454,9 +454,9 @@
 void BrowserNonClientFrameViewAsh::PaintImmersiveLightbarStyleHeader(
     gfx::Canvas* canvas) {
   // The light bar header is not themed because theming it does not look good.
-  gfx::ImageSkia* frame_image = GetThemeProvider()->GetImageSkiaNamed(
-      IDR_ASH_BROWSER_WINDOW_HEADER_BASE_MAXIMIZED);
-  canvas->TileImageInt(*frame_image, 0, 0, width(), frame_image->height());
+  canvas->FillRect(
+      gfx::Rect(width(), header_painter_->GetHeaderHeightForPainting()),
+      SK_ColorBLACK);
 }
 
 void BrowserNonClientFrameViewAsh::PaintToolbarBackground(gfx::Canvas* canvas) {
diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc
index 0430823..cd9e871 100644
--- a/chrome/browser/ui/views/frame/browser_view.cc
+++ b/chrome/browser/ui/views/frame/browser_view.cc
@@ -25,6 +25,7 @@
 #include "chrome/browser/password_manager/chrome_password_manager_client.h"
 #include "chrome/browser/profiles/avatar_menu.h"
 #include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/profiles/profile_avatar_icon_util.h"
 #include "chrome/browser/profiles/profile_info_cache.h"
 #include "chrome/browser/profiles/profile_manager.h"
 #include "chrome/browser/profiles/profiles_state.h"
@@ -95,9 +96,9 @@
 #include "chrome/browser/ui/window_sizer/window_sizer.h"
 #include "chrome/common/chrome_switches.h"
 #include "chrome/common/pref_names.h"
-#include "chrome/common/profile_management_switches.h"
 #include "chrome/common/url_constants.h"
 #include "components/password_manager/core/browser/password_manager.h"
+#include "components/signin/core/common/profile_management_switches.h"
 #include "content/public/browser/download_manager.h"
 #include "content/public/browser/native_web_keyboard_event.h"
 #include "content/public/browser/notification_service.h"
@@ -155,7 +156,6 @@
 #include "base/win/windows_version.h"
 #include "chrome/browser/jumplist_win.h"
 #include "ui/views/win/scoped_fullscreen_visibility.h"
-#include "win8/util/win8_util.h"
 #endif
 
 #if defined(ENABLE_ONE_CLICK_SIGNIN)
@@ -245,20 +245,6 @@
 // static
 const char BrowserView::kViewClassName[] = "BrowserView";
 
-namespace {
-
-bool ShouldSaveOrRestoreWindowPos() {
-#if defined(OS_WIN)
-  // In Windows 8's single window Metro mode the window is always maximized
-  // (without the WS_MAXIMIZE style).
-  if (win8::IsSingleWindowMetroMode())
-    return false;
-#endif
-  return true;
-}
-
-}  // namespace
-
 ///////////////////////////////////////////////////////////////////////////////
 
 // Delegate implementation for BrowserViewLayout. Usually just forwards calls
@@ -571,21 +557,9 @@
 }
 
 int BrowserView::GetOTRIconResourceID() const {
-  int otr_resource_id = IDR_OTR_ICON;
-  if (ui::GetDisplayLayout() == ui::LAYOUT_TOUCH) {
-    if (IsFullscreen())
-      otr_resource_id = IDR_OTR_ICON_FULLSCREEN;
-#if defined(OS_WIN)
-    if (win8::IsSingleWindowMetroMode())
-      otr_resource_id = IDR_OTR_ICON_FULLSCREEN;
-#endif
-  }
-
-  return otr_resource_id;
-}
-
-int BrowserView::GetGuestIconResourceID() const {
-  return IDR_LOGIN_GUEST;
+  if (ui::GetDisplayLayout() == ui::LAYOUT_TOUCH && IsFullscreen())
+    return IDR_OTR_ICON_FULLSCREEN;
+  return IDR_OTR_ICON;
 }
 
 bool BrowserView::ShouldShowAvatar() const {
@@ -1428,12 +1402,7 @@
 
 WindowOpenDisposition BrowserView::GetDispositionForPopupBounds(
     const gfx::Rect& bounds) {
-#if defined(OS_WIN)
-  // If we are in Win8's single window Metro mode, we can't allow popup windows.
-  return win8::IsSingleWindowMetroMode() ? NEW_BACKGROUND_TAB : NEW_POPUP;
-#else
   return NEW_POPUP;
-#endif
 }
 
 FindBar* BrowserView::CreateFindBar() {
@@ -1632,17 +1601,6 @@
 #if defined(OS_WIN)
   if (command_id == IDC_DEBUG_FRAME_TOGGLE)
     GetWidget()->DebugToggleFrameType();
-
-  // In Windows 8 metro mode prevent sizing and moving.
-  if (win8::IsSingleWindowMetroMode()) {
-    // Windows uses the 4 lower order bits of |notification_code| for type-
-    // specific information so we must exclude this when comparing.
-    static const int sc_mask = 0xFFF0;
-    if (((command_id & sc_mask) == SC_MOVE) ||
-        ((command_id & sc_mask) == SC_SIZE) ||
-        ((command_id & sc_mask) == SC_MAXIMIZE))
-      return true;
-  }
 #endif
   // Translate WM_APPCOMMAND command ids into a command id that the browser
   // knows how to handle.
@@ -1662,9 +1620,6 @@
   // If IsFullscreen() is true, we've just changed into fullscreen mode, and
   // we're catching the going-into-fullscreen sizing and positioning calls,
   // which we want to ignore.
-  if (!ShouldSaveOrRestoreWindowPos())
-    return;
-
   if (!IsFullscreen() && chrome::ShouldSaveWindowPlacement(browser_.get())) {
     WidgetDelegate::SaveWindowPlacement(bounds, show_state);
     chrome::SaveWindowPlacement(browser_.get(), bounds, show_state);
@@ -1675,8 +1630,6 @@
     const views::Widget* widget,
     gfx::Rect* bounds,
     ui::WindowShowState* show_state) const {
-  if (!ShouldSaveOrRestoreWindowPos())
-    return false;
   chrome::GetSavedWindowBoundsAndShowState(browser_.get(), bounds, show_state);
 
   if (browser_->is_type_popup() &&
@@ -2493,7 +2446,6 @@
       web_contents->GetRenderViewHost(),
       ChromePasswordManagerClient::GetManagerFromWebContents(web_contents),
       password_generator,
-      browser_.get(),
       GetWidget()->GetThemeProvider());
 
   views::BubbleDelegateView::CreateBubble(bubble);
diff --git a/chrome/browser/ui/views/frame/browser_view.h b/chrome/browser/ui/views/frame/browser_view.h
index d04aa83..7bd43f4 100644
--- a/chrome/browser/ui/views/frame/browser_view.h
+++ b/chrome/browser/ui/views/frame/browser_view.h
@@ -14,7 +14,6 @@
 #include "base/timer/timer.h"
 #include "build/build_config.h"
 #include "chrome/browser/devtools/devtools_window.h"
-#include "chrome/browser/infobars/infobar_container.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_window.h"
 #include "chrome/browser/ui/omnibox/omnibox_popup_model_observer.h"
@@ -25,6 +24,7 @@
 #include "chrome/browser/ui/views/frame/scroll_end_effect_controller.h"
 #include "chrome/browser/ui/views/frame/web_contents_close_handler.h"
 #include "chrome/browser/ui/views/load_complete_listener.h"
+#include "components/infobars/core/infobar_container.h"
 #include "ui/base/accelerators/accelerator.h"
 #include "ui/base/models/simple_menu_model.h"
 #include "ui/gfx/native_widget_types.h"
@@ -95,7 +95,7 @@
                     public views::WidgetDelegate,
                     public views::WidgetObserver,
                     public views::ClientView,
-                    public InfoBarContainer::Delegate,
+                    public infobars::InfoBarContainer::Delegate,
                     public gfx::SysColorChangeListener,
                     public LoadCompleteListener::Delegate,
                     public OmniboxPopupModelObserver {
@@ -207,10 +207,6 @@
   // which layout is being shown and whether we are full-screen.
   int GetOTRIconResourceID() const;
 
-  // Returns the resource ID to use for the Guest icon, which may depend on
-  // which layout is being shown and whether we are full-screen.
-  int GetGuestIconResourceID() const;
-
   // Returns true if the non-client view should render an avatar icon.
   bool ShouldShowAvatar() const;
 
diff --git a/chrome/browser/ui/views/frame/glass_browser_frame_view.cc b/chrome/browser/ui/views/frame/glass_browser_frame_view.cc
index bc32bc8..62cc54b 100644
--- a/chrome/browser/ui/views/frame/glass_browser_frame_view.cc
+++ b/chrome/browser/ui/views/frame/glass_browser_frame_view.cc
@@ -18,7 +18,7 @@
 #include "chrome/browser/ui/views/tabs/tab_strip.h"
 #include "chrome/browser/ui/views/toolbar/toolbar_view.h"
 #include "chrome/common/pref_names.h"
-#include "chrome/common/profile_management_switches.h"
+#include "components/signin/core/common/profile_management_switches.h"
 #include "content/public/browser/notification_service.h"
 #include "grit/generated_resources.h"
 #include "grit/theme_resources.h"
diff --git a/chrome/browser/ui/views/frame/opaque_browser_frame_view.cc b/chrome/browser/ui/views/frame/opaque_browser_frame_view.cc
index b7f2888..002a54a 100644
--- a/chrome/browser/ui/views/frame/opaque_browser_frame_view.cc
+++ b/chrome/browser/ui/views/frame/opaque_browser_frame_view.cc
@@ -25,7 +25,7 @@
 #include "chrome/browser/ui/views/theme_image_mapper.h"
 #include "chrome/browser/ui/views/toolbar/toolbar_view.h"
 #include "chrome/common/pref_names.h"
-#include "chrome/common/profile_management_switches.h"
+#include "components/signin/core/common/profile_management_switches.h"
 #include "content/public/browser/notification_service.h"
 #include "content/public/browser/web_contents.h"
 #include "grit/chromium_strings.h"
@@ -101,32 +101,30 @@
       frame_background_(new views::FrameBackground()) {
   SetLayoutManager(layout_);
 
-  if (OpaqueBrowserFrameViewLayout::ShouldAddDefaultCaptionButtons()) {
-    minimize_button_ = InitWindowCaptionButton(IDR_MINIMIZE,
-                                               IDR_MINIMIZE_H,
-                                               IDR_MINIMIZE_P,
-                                               IDR_MINIMIZE_BUTTON_MASK,
-                                               IDS_ACCNAME_MINIMIZE,
-                                               VIEW_ID_MINIMIZE_BUTTON);
-    maximize_button_ = InitWindowCaptionButton(IDR_MAXIMIZE,
-                                               IDR_MAXIMIZE_H,
-                                               IDR_MAXIMIZE_P,
-                                               IDR_MAXIMIZE_BUTTON_MASK,
-                                               IDS_ACCNAME_MAXIMIZE,
-                                               VIEW_ID_MAXIMIZE_BUTTON);
-    restore_button_ = InitWindowCaptionButton(IDR_RESTORE,
-                                              IDR_RESTORE_H,
-                                              IDR_RESTORE_P,
-                                              IDR_RESTORE_BUTTON_MASK,
-                                              IDS_ACCNAME_RESTORE,
-                                              VIEW_ID_RESTORE_BUTTON);
-    close_button_ = InitWindowCaptionButton(IDR_CLOSE,
-                                            IDR_CLOSE_H,
-                                            IDR_CLOSE_P,
-                                            IDR_CLOSE_BUTTON_MASK,
-                                            IDS_ACCNAME_CLOSE,
-                                            VIEW_ID_CLOSE_BUTTON);
-  }
+  minimize_button_ = InitWindowCaptionButton(IDR_MINIMIZE,
+                                             IDR_MINIMIZE_H,
+                                             IDR_MINIMIZE_P,
+                                             IDR_MINIMIZE_BUTTON_MASK,
+                                             IDS_ACCNAME_MINIMIZE,
+                                             VIEW_ID_MINIMIZE_BUTTON);
+  maximize_button_ = InitWindowCaptionButton(IDR_MAXIMIZE,
+                                             IDR_MAXIMIZE_H,
+                                             IDR_MAXIMIZE_P,
+                                             IDR_MAXIMIZE_BUTTON_MASK,
+                                             IDS_ACCNAME_MAXIMIZE,
+                                             VIEW_ID_MAXIMIZE_BUTTON);
+  restore_button_ = InitWindowCaptionButton(IDR_RESTORE,
+                                            IDR_RESTORE_H,
+                                            IDR_RESTORE_P,
+                                            IDR_RESTORE_BUTTON_MASK,
+                                            IDS_ACCNAME_RESTORE,
+                                            VIEW_ID_RESTORE_BUTTON);
+  close_button_ = InitWindowCaptionButton(IDR_CLOSE,
+                                          IDR_CLOSE_H,
+                                          IDR_CLOSE_P,
+                                          IDR_CLOSE_BUTTON_MASK,
+                                          IDS_ACCNAME_CLOSE,
+                                          VIEW_ID_CLOSE_BUTTON);
 
   // Initializing the TabIconView is expensive, so only do it if we need to.
   if (browser_view->ShouldShowWindowIcon()) {
@@ -274,8 +272,6 @@
 }
 
 void OpaqueBrowserFrameView::ResetWindowControls() {
-  if (!OpaqueBrowserFrameViewLayout::ShouldAddDefaultCaptionButtons())
-    return;
   restore_button_->SetState(views::CustomButton::STATE_NORMAL);
   minimize_button_->SetState(views::CustomButton::STATE_NORMAL);
   maximize_button_->SetState(views::CustomButton::STATE_NORMAL);
@@ -472,8 +468,6 @@
 }
 
 bool OpaqueBrowserFrameView::ShouldShowCaptionButtons() const {
-  if (!OpaqueBrowserFrameViewLayout::ShouldAddDefaultCaptionButtons())
-    return false;
   return ShouldShowWindowTitleBar();
 }
 
diff --git a/chrome/browser/ui/views/frame/opaque_browser_frame_view_layout.cc b/chrome/browser/ui/views/frame/opaque_browser_frame_view_layout.cc
index b6d51aa..4847dfa 100644
--- a/chrome/browser/ui/views/frame/opaque_browser_frame_view_layout.cc
+++ b/chrome/browser/ui/views/frame/opaque_browser_frame_view_layout.cc
@@ -9,15 +9,11 @@
 #include "chrome/browser/ui/views/profiles/avatar_label.h"
 #include "chrome/browser/ui/views/profiles/avatar_menu_button.h"
 #include "chrome/common/chrome_switches.h"
-#include "chrome/common/profile_management_switches.h"
+#include "components/signin/core/common/profile_management_switches.h"
 #include "ui/gfx/font.h"
 #include "ui/views/controls/button/image_button.h"
 #include "ui/views/controls/label.h"
 
-#if defined(OS_WIN)
-#include "win8/util/win8_util.h"
-#endif  // OS_WIN
-
 namespace {
 
 // Besides the frame border, there's another 9 px of empty space atop the
@@ -128,15 +124,6 @@
 
 OpaqueBrowserFrameViewLayout::~OpaqueBrowserFrameViewLayout() {}
 
-// static
-bool OpaqueBrowserFrameViewLayout::ShouldAddDefaultCaptionButtons() {
-#if defined(OS_WIN)
-  return !win8::IsSingleWindowMetroMode();
-#else
-  return true;
-#endif
-}
-
 void OpaqueBrowserFrameViewLayout::SetButtonOrdering(
     const std::vector<views::FrameButton>& leading_buttons,
     const std::vector<views::FrameButton>& trailing_buttons) {
@@ -292,9 +279,6 @@
 }
 
 void OpaqueBrowserFrameViewLayout::LayoutWindowControls(views::View* host) {
-  if (!ShouldAddDefaultCaptionButtons())
-    return;
-
   int caption_y = CaptionButtonY(false);
 
   // Keep a list of all buttons that we don't show.
diff --git a/chrome/browser/ui/views/frame/taskbar_decorator_win.cc b/chrome/browser/ui/views/frame/taskbar_decorator_win.cc
index 99ca875..e9a5ad8 100644
--- a/chrome/browser/ui/views/frame/taskbar_decorator_win.cc
+++ b/chrome/browser/ui/views/frame/taskbar_decorator_win.cc
@@ -8,13 +8,12 @@
 
 #include "base/bind.h"
 #include "base/location.h"
-#include "base/threading/worker_pool.h"
-#include "base/win/scoped_com_initializer.h"
 #include "base/win/scoped_comptr.h"
 #include "base/win/scoped_gdi_object.h"
 #include "base/win/windows_version.h"
 #include "chrome/browser/profiles/profile_avatar_icon_util.h"
 #include "chrome/browser/ui/host_desktop.h"
+#include "content/public/browser/browser_thread.h"
 #include "skia/ext/image_operations.h"
 #include "skia/ext/platform_canvas.h"
 #include "third_party/skia/include/core/SkRect.h"
@@ -34,7 +33,6 @@
 // Docs for TaskbarList::SetOverlayIcon() say it does nothing if the HWND is not
 // valid.
 void SetOverlayIcon(HWND hwnd, scoped_ptr<SkBitmap> bitmap) {
-  base::win::ScopedCOMInitializer com_initializer;
   base::win::ScopedComPtr<ITaskbarList3> taskbar;
   HRESULT result = taskbar.CreateInstance(CLSID_TaskbarList, NULL,
                                           CLSCTX_INPROC_SERVER);
@@ -43,32 +41,15 @@
 
   base::win::ScopedGDIObject<HICON> icon;
   if (bitmap.get()) {
-    const SkBitmap* source_bitmap = NULL;
-    SkBitmap squarer_bitmap;
-    if ((bitmap->width() == profiles::kAvatarIconWidth) &&
-        (bitmap->height() == profiles::kAvatarIconHeight)) {
-      // Shave a couple of columns so the bitmap is more square. So when
-      // resized to a square aspect ratio it looks pretty.
-      int x = 2;
-      bitmap->extractSubset(&squarer_bitmap, SkIRect::MakeXYWH(x, 0,
-          profiles::kAvatarIconWidth - x * 2, profiles::kAvatarIconHeight));
-      source_bitmap = &squarer_bitmap;
-    } else {
-      // The image's size has changed. Resize what we have.
-      source_bitmap = bitmap.get();
-    }
-
-    // Maintain aspect ratio on resize. It is assumed that the image is wider
-    // than it is tall.
     const size_t kOverlayIconSize = 16;
-    size_t resized_height =
-        source_bitmap->height() * kOverlayIconSize / source_bitmap->width();
-    DCHECK_GE(kOverlayIconSize, resized_height);
+    const SkBitmap* source_bitmap = bitmap.get();
+
+    // Maintain aspect ratio on resize. Image is assumed to be square.
     // Since the target size is so small, we use our best resizer.
     SkBitmap sk_icon = skia::ImageOperations::Resize(
         *source_bitmap,
         skia::ImageOperations::RESIZE_LANCZOS3,
-        kOverlayIconSize, resized_height);
+        kOverlayIconSize, kOverlayIconSize);
 
     // Paint the resized icon onto a 16x16 canvas otherwise Windows will badly
     // hammer it to 16x16.
@@ -76,7 +57,7 @@
     offscreen_bitmap.allocN32Pixels(kOverlayIconSize, kOverlayIconSize);
     SkCanvas offscreen_canvas(offscreen_bitmap);
     offscreen_canvas.clear(SK_ColorTRANSPARENT);
-    offscreen_canvas.drawBitmap(sk_icon, 0, kOverlayIconSize - resized_height);
+    offscreen_canvas.drawBitmap(sk_icon, 0, 0);
 
     icon.Set(IconUtil::CreateHICONFromSkBitmap(offscreen_bitmap));
     if (!icon.Get())
@@ -105,9 +86,9 @@
   // gfx::Image isn't thread safe.
   scoped_ptr<SkBitmap> bitmap(
       image ? new SkBitmap(*image->ToSkBitmap()) : NULL);
-  // TaskbarList::SetOverlayIcon() may take a while, so we use slow here.
-  base::WorkerPool::PostTask(
-      FROM_HERE, base::Bind(&SetOverlayIcon, hwnd, Passed(&bitmap)), true);
+  content::BrowserThread::GetBlockingPool()->PostWorkerTaskWithShutdownBehavior(
+      FROM_HERE, base::Bind(&SetOverlayIcon, hwnd, Passed(&bitmap)),
+      base::SequencedWorkerPool::CONTINUE_ON_SHUTDOWN);
 }
 
 }  // namespace chrome
diff --git a/chrome/browser/ui/views/hung_renderer_view.cc b/chrome/browser/ui/views/hung_renderer_view.cc
index a7b95af..a663391 100644
--- a/chrome/browser/ui/views/hung_renderer_view.cc
+++ b/chrome/browser/ui/views/hung_renderer_view.cc
@@ -26,6 +26,7 @@
 #include "grit/chromium_strings.h"
 #include "grit/generated_resources.h"
 #include "grit/theme_resources.h"
+#include "ui/aura/window.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/resource/resource_bundle.h"
 #include "ui/gfx/canvas.h"
@@ -38,37 +39,19 @@
 #include "ui/views/window/client_view.h"
 
 #if defined(OS_WIN)
+#include "chrome/browser/hang_monitor/hang_crash_dump_win.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/shell_integration.h"
 #include "ui/base/win/shell.h"
 #include "ui/views/win/hwnd_util.h"
 #endif
 
-#if defined(USE_AURA)
-#include "ui/aura/window.h"
-#endif
-
 #if defined(OS_WIN)
 #include "ui/base/win/shell.h"
 #endif
 
 using content::WebContents;
 
-// These functions allow certain chrome platforms to override the default hung
-// renderer dialog. For e.g. Chrome on Windows 8 metro
-bool PlatformShowCustomHungRendererDialog(WebContents* contents);
-bool PlatformHideCustomHungRendererDialog(WebContents* contents);
-
-#if !defined(OS_WIN)
-bool PlatformShowCustomHungRendererDialog(WebContents* contents) {
-  return false;
-}
-
-bool PlatformHideCustomHungRendererDialog(WebContents* contents) {
-  return false;
-}
-#endif  // OS_WIN
-
 HungRendererDialogView* HungRendererDialogView::g_instance_ = NULL;
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -218,13 +201,16 @@
   return platform_util::IsWindowActive(frame_view);
 }
 
-#if !defined(OS_WIN)
 // static
 void HungRendererDialogView::KillRendererProcess(
     base::ProcessHandle process_handle) {
+#if defined(OS_WIN)
+  // Try to generate a crash report for the hung process.
+  CrashDumpAndTerminateHungChildProcess(process_handle);
+#else
   base::KillProcess(process_handle, content::RESULT_CODE_HUNG, false);
+#endif
 }
-#endif  // OS_WIN
 
 
 HungRendererDialogView::HungRendererDialogView()
@@ -451,27 +437,22 @@
 namespace chrome {
 
 void ShowHungRendererDialog(WebContents* contents) {
-  if (!logging::DialogsAreSuppressed() &&
-      !PlatformShowCustomHungRendererDialog(contents)) {
-    gfx::NativeView toplevel_view =
-        platform_util::GetTopLevel(contents->GetView()->GetNativeView());
-#if defined(USE_AURA)
-    // Don't show the dialog if there is no root window for the renderer,
-    // because it's invisible to the user (happens when the renderer is for
-    // prerendering for example).
-    if (!toplevel_view->GetRootWindow())
-      return;
-#endif
-    HungRendererDialogView* view = HungRendererDialogView::Create(
-        toplevel_view);
-    view->ShowForWebContents(contents);
-  }
+  if (logging::DialogsAreSuppressed())
+    return;
+
+  gfx::NativeView toplevel_view =
+      platform_util::GetTopLevel(contents->GetView()->GetNativeView());
+  // Don't show the dialog if there is no root window for the renderer, because
+  // it's invisible to the user (happens when the renderer is for prerendering
+  // for example).
+  if (!toplevel_view->GetRootWindow())
+    return;
+  HungRendererDialogView* view = HungRendererDialogView::Create(toplevel_view);
+  view->ShowForWebContents(contents);
 }
 
 void HideHungRendererDialog(WebContents* contents) {
-  if (!logging::DialogsAreSuppressed() &&
-      !PlatformHideCustomHungRendererDialog(contents) &&
-      HungRendererDialogView::GetInstance())
+  if (!logging::DialogsAreSuppressed() && HungRendererDialogView::GetInstance())
     HungRendererDialogView::GetInstance()->EndForWebContents(contents);
 }
 
diff --git a/chrome/browser/ui/views/hung_renderer_view_win.cc b/chrome/browser/ui/views/hung_renderer_view_win.cc
deleted file mode 100644
index 992d964..0000000
--- a/chrome/browser/ui/views/hung_renderer_view_win.cc
+++ /dev/null
@@ -1,171 +0,0 @@
-// Copyright (c) 2012 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 "chrome/browser/ui/views/hung_renderer_view_win.h"
-
-#include "base/win/metro.h"
-#include "chrome/browser/hang_monitor/hang_crash_dump_win.h"
-#include "chrome/browser/ui/views/hung_renderer_view.h"
-#include "content/public/browser/browser_thread.h"
-#include "content/public/browser/render_process_host.h"
-#include "grit/generated_resources.h"
-#include "ui/base/l10n/l10n_util.h"
-#include "win8/util/win8_util.h"
-
-// Metro functions for displaying and dismissing a dialog box.
-typedef void (*MetroShowDialogBox)(
-    const wchar_t* title,
-    const wchar_t* content,
-    const wchar_t* button1_label,
-    const wchar_t* button2_label,
-    base::win::MetroDialogButtonPressedHandler button1_handler,
-    base::win::MetroDialogButtonPressedHandler button2_handler);
-
-typedef void (*MetroDismissDialogBox)();
-
-using content::BrowserThread;
-using content::WebContents;
-
-HungRendererDialogMetro* HungRendererDialogMetro::g_instance_ = NULL;
-
-bool PlatformShowCustomHungRendererDialog(WebContents* contents) {
-  if (!win8::IsSingleWindowMetroMode())
-    return false;
-
-  HungRendererDialogMetro::Create()->Show(contents);
-  return true;
-}
-
-bool PlatformHideCustomHungRendererDialog(WebContents* contents) {
-  if (!win8::IsSingleWindowMetroMode())
-    return false;
-
-  if (HungRendererDialogMetro::GetInstance())
-    HungRendererDialogMetro::GetInstance()->Hide(contents);
-  return true;
-}
-
-// static
-void HungRendererDialogView::KillRendererProcess(
-    base::ProcessHandle process_handle) {
-  // Try to generate a crash report for the hung process.
-  CrashDumpAndTerminateHungChildProcess(process_handle);
-}
-
-// static
-HungRendererDialogMetro* HungRendererDialogMetro::Create() {
-  if (!GetInstance())
-    g_instance_ = new HungRendererDialogMetro;
-  return g_instance_;
-}
-
-// static
-HungRendererDialogMetro* HungRendererDialogMetro::GetInstance() {
-  return g_instance_;
-}
-
-HungRendererDialogMetro::HungRendererDialogMetro()
-    : contents_(NULL),
-      metro_dialog_displayed_(false) {
-}
-
-HungRendererDialogMetro::~HungRendererDialogMetro() {
-  g_instance_ = NULL;
-}
-
-void HungRendererDialogMetro::Show(WebContents* contents) {
-  if (!metro_dialog_displayed_ &&
-      HungRendererDialogView::IsFrameActive(contents)) {
-    HMODULE metro_dll = base::win::GetMetroModule();
-    DCHECK(metro_dll);
-    if (metro_dll) {
-      MetroShowDialogBox show_dialog_box = reinterpret_cast<MetroShowDialogBox>
-          (::GetProcAddress(metro_dll, "ShowDialogBox"));
-      DCHECK(show_dialog_box);
-      if (show_dialog_box) {
-        base::string16 dialog_box_title =
-            l10n_util::GetStringUTF16(IDS_BROWSER_HANGMONITOR_RENDERER_TITLE);
-
-        base::string16 kill_button_label =
-            l10n_util::GetStringUTF16(IDS_BROWSER_HANGMONITOR_RENDERER_END);
-
-        base::string16 wait_button_label =
-            l10n_util::GetStringUTF16(IDS_BROWSER_HANGMONITOR_RENDERER_WAIT);
-
-        contents_ = contents;
-        metro_dialog_displayed_ = true;
-
-        (*show_dialog_box)(dialog_box_title.c_str(),
-                           contents->GetTitle().c_str(),
-                           kill_button_label.c_str(),
-                           wait_button_label.c_str(),
-                           HungRendererDialogMetro::OnMetroKillProcess,
-                           HungRendererDialogMetro::OnMetroWait);
-      }
-    }
-  }
-}
-
-void HungRendererDialogMetro::Hide(WebContents* contents) {
-  HMODULE metro_dll = base::win::GetMetroModule();
-  DCHECK(metro_dll);
-  if (metro_dll) {
-    MetroDismissDialogBox dismiss_dialog_box =
-        reinterpret_cast<MetroDismissDialogBox>
-            (::GetProcAddress(metro_dll, "DismissDialogBox"));
-    DCHECK(dismiss_dialog_box);
-    if (dismiss_dialog_box) {
-      (*dismiss_dialog_box)();
-      ResetMetroState();
-    }
-  }
-}
-
-void HungRendererDialogMetro::ResetMetroState() {
-  metro_dialog_displayed_ = false;
-  contents_ = NULL;
-  delete g_instance_;
-}
-
-// static
-void HungRendererDialogMetro::OnMetroKillProcess() {
-  // Metro chrome will invoke these handlers on the metro thread. Ensure that
-  // we switch to the UI thread.
-  if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
-    BrowserThread::PostTask(
-        BrowserThread::UI, FROM_HERE,
-        base::Bind(HungRendererDialogMetro::OnMetroKillProcess));
-    return;
-  }
-
-  // Its possible that we got deleted in the meantime.
-  if (!GetInstance())
-    return;
-
-  DCHECK(GetInstance()->contents_);
-
-  HungRendererDialogView::KillRendererProcess(
-      GetInstance()->contents_->GetRenderProcessHost()->GetHandle());
-
-  // The metro dialog box is dismissed when the button handlers are invoked.
-  GetInstance()->ResetMetroState();
-}
-
-// static
-void HungRendererDialogMetro::OnMetroWait() {
-  // Metro chrome will invoke these handlers on the metro thread. Ensure that
-  // we switch to the UI thread.
-  if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
-    BrowserThread::PostTask(
-        BrowserThread::UI, FROM_HERE,
-        base::Bind(HungRendererDialogMetro::OnMetroWait));
-    return;
-  }
-
-  // Its possible that we got deleted in the meantime.
-  if (!GetInstance())
-    return;
-
-  GetInstance()->ResetMetroState();
-}
diff --git a/chrome/browser/ui/views/hung_renderer_view_win.h b/chrome/browser/ui/views/hung_renderer_view_win.h
deleted file mode 100644
index 3920c40..0000000
--- a/chrome/browser/ui/views/hung_renderer_view_win.h
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright (c) 2012 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 CHROME_BROWSER_UI_VIEWS_HUNG_RENDERER_VIEW_WIN_H_
-#define CHROME_BROWSER_UI_VIEWS_HUNG_RENDERER_VIEW_WIN_H_
-
-#include "base/basictypes.h"
-#include "content/public/browser/web_contents.h"
-
-// This class provides functionality to display a Windows 8 metro style hung
-// renderer dialog.
-class HungRendererDialogMetro {
- public:
-  // Creates or returns the global instance of the HungRendererDialogMetro
-  // class
-  static HungRendererDialogMetro* Create();
-  static HungRendererDialogMetro* GetInstance();
-
-  void Show(content::WebContents* contents);
-  void Hide(content::WebContents* contents);
-
- private:
-  HungRendererDialogMetro();
-  ~HungRendererDialogMetro();
-
-  // Handlers for the hang monitor dialog displayed in Windows 8 metro.
-  static void OnMetroKillProcess();
-  static void OnMetroWait();
-
-  // Resets Windows 8 metro specific state like whether the dialog was
-  // displayed, etc.
-  void ResetMetroState();
-
-  content::WebContents* contents_;
-
-  // Set to true if the metro version of the hang dialog is displayed.
-  // Helps ensure that only one instance of the dialog is displayed at any
-  // given time.
-  bool metro_dialog_displayed_;
-
-  // Pointer to the global instance of the HungRendererDialogMetro class.
-  static HungRendererDialogMetro* g_instance_;
-
-  DISALLOW_COPY_AND_ASSIGN(HungRendererDialogMetro);
-};
-
-#endif  // CHROME_BROWSER_UI_VIEWS_HUNG_RENDERER_VIEW_WIN_H_
-
diff --git a/chrome/browser/ui/views/infobars/alternate_nav_infobar_view.cc b/chrome/browser/ui/views/infobars/alternate_nav_infobar_view.cc
index d28c4dc..a6cdf99 100644
--- a/chrome/browser/ui/views/infobars/alternate_nav_infobar_view.cc
+++ b/chrome/browser/ui/views/infobars/alternate_nav_infobar_view.cc
@@ -15,9 +15,10 @@
 // AlternateNavInfoBarDelegate -------------------------------------------------
 
 // static
-scoped_ptr<InfoBar> AlternateNavInfoBarDelegate::CreateInfoBar(
+scoped_ptr<infobars::InfoBar> AlternateNavInfoBarDelegate::CreateInfoBar(
     scoped_ptr<AlternateNavInfoBarDelegate> delegate) {
-  return scoped_ptr<InfoBar>(new AlternateNavInfoBarView(delegate.Pass()));
+  return scoped_ptr<infobars::InfoBar>(
+      new AlternateNavInfoBarView(delegate.Pass()));
 }
 
 
@@ -25,11 +26,10 @@
 
 AlternateNavInfoBarView::AlternateNavInfoBarView(
     scoped_ptr<AlternateNavInfoBarDelegate> delegate)
-    : InfoBarView(delegate.PassAs<InfoBarDelegate>()),
+    : InfoBarView(delegate.PassAs<infobars::InfoBarDelegate>()),
       label_1_(NULL),
       link_(NULL),
-      label_2_(NULL) {
-}
+      label_2_(NULL) {}
 
 AlternateNavInfoBarView::~AlternateNavInfoBarView() {
 }
diff --git a/chrome/browser/ui/views/infobars/confirm_infobar.cc b/chrome/browser/ui/views/infobars/confirm_infobar.cc
index 6f07a3a..e538af7 100644
--- a/chrome/browser/ui/views/infobars/confirm_infobar.cc
+++ b/chrome/browser/ui/views/infobars/confirm_infobar.cc
@@ -15,16 +15,16 @@
 // ConfirmInfoBarDelegate -----------------------------------------------------
 
 // static
-scoped_ptr<InfoBar> ConfirmInfoBarDelegate::CreateInfoBar(
+scoped_ptr<infobars::InfoBar> ConfirmInfoBarDelegate::CreateInfoBar(
     scoped_ptr<ConfirmInfoBarDelegate> delegate) {
-  return scoped_ptr<InfoBar>(new ConfirmInfoBar(delegate.Pass()));
+  return scoped_ptr<infobars::InfoBar>(new ConfirmInfoBar(delegate.Pass()));
 }
 
 
 // ConfirmInfoBar -------------------------------------------------------------
 
 ConfirmInfoBar::ConfirmInfoBar(scoped_ptr<ConfirmInfoBarDelegate> delegate)
-    : InfoBarView(delegate.PassAs<InfoBarDelegate>()),
+    : InfoBarView(delegate.PassAs<infobars::InfoBarDelegate>()),
       label_(NULL),
       ok_button_(NULL),
       cancel_button_(NULL),
diff --git a/chrome/browser/ui/views/infobars/extension_infobar.cc b/chrome/browser/ui/views/infobars/extension_infobar.cc
index bb29708..f7e617f 100644
--- a/chrome/browser/ui/views/infobars/extension_infobar.cc
+++ b/chrome/browser/ui/views/infobars/extension_infobar.cc
@@ -30,10 +30,11 @@
 // ExtensionInfoBarDelegate ----------------------------------------------------
 
 // static
-scoped_ptr<InfoBar> ExtensionInfoBarDelegate::CreateInfoBar(
+scoped_ptr<infobars::InfoBar> ExtensionInfoBarDelegate::CreateInfoBar(
     scoped_ptr<ExtensionInfoBarDelegate> delegate) {
   Browser* browser = delegate->browser_;
-  return scoped_ptr<InfoBar>(new ExtensionInfoBar(delegate.Pass(), browser));
+  return scoped_ptr<infobars::InfoBar>(
+      new ExtensionInfoBar(delegate.Pass(), browser));
 }
 
 
@@ -84,7 +85,7 @@
 ExtensionInfoBar::ExtensionInfoBar(
     scoped_ptr<ExtensionInfoBarDelegate> delegate,
     Browser* browser)
-    : InfoBarView(delegate.PassAs<InfoBarDelegate>()),
+    : InfoBarView(delegate.PassAs<infobars::InfoBarDelegate>()),
       browser_(browser),
       infobar_icon_(NULL),
       icon_as_menu_(NULL),
diff --git a/chrome/browser/ui/views/infobars/infobar_background.cc b/chrome/browser/ui/views/infobars/infobar_background.cc
index cb73c4a..09e4191 100644
--- a/chrome/browser/ui/views/infobars/infobar_background.cc
+++ b/chrome/browser/ui/views/infobars/infobar_background.cc
@@ -4,17 +4,18 @@
 
 #include "chrome/browser/ui/views/infobars/infobar_background.h"
 
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/ui/views/infobars/infobar_view.h"
+#include "components/infobars/core/infobar.h"
 #include "third_party/skia/include/effects/SkGradientShader.h"
 #include "ui/gfx/canvas.h"
 #include "ui/gfx/color_utils.h"
 #include "ui/views/view.h"
 
-InfoBarBackground::InfoBarBackground(InfoBarDelegate::Type infobar_type)
+InfoBarBackground::InfoBarBackground(
+    infobars::InfoBarDelegate::Type infobar_type)
     : separator_color_(SK_ColorBLACK),
-      top_color_(InfoBar::GetTopColor(infobar_type)),
-      bottom_color_(InfoBar::GetBottomColor(infobar_type)) {
+      top_color_(infobars::InfoBar::GetTopColor(infobar_type)),
+      bottom_color_(infobars::InfoBar::GetBottomColor(infobar_type)) {
   SetNativeControlColor(
       color_utils::AlphaBlend(top_color_, bottom_color_, 128));
 }
@@ -31,7 +32,7 @@
       SkGradientShader::CreateLinear(gradient_points, gradient_colors, NULL, 2,
                                      SkShader::kClamp_TileMode));
   SkPaint paint;
-  paint.setStrokeWidth(SkIntToScalar(InfoBar::kSeparatorLineHeight));
+  paint.setStrokeWidth(SkIntToScalar(infobars::InfoBar::kSeparatorLineHeight));
   paint.setStyle(SkPaint::kFill_Style);
   paint.setStrokeCap(SkPaint::kRound_Cap);
   paint.setShader(gradient_shader.get());
@@ -52,7 +53,8 @@
   paint.setAntiAlias(false);
 
   // Now draw the separator at the bottom.
-  canvas->FillRect(gfx::Rect(0, view->height() - InfoBar::kSeparatorLineHeight,
-                             view->width(), InfoBar::kSeparatorLineHeight),
-                   separator_color_);
+  canvas->FillRect(
+      gfx::Rect(0, view->height() - infobars::InfoBar::kSeparatorLineHeight,
+                view->width(), infobars::InfoBar::kSeparatorLineHeight),
+      separator_color_);
 }
diff --git a/chrome/browser/ui/views/infobars/infobar_background.h b/chrome/browser/ui/views/infobars/infobar_background.h
index ba04a88..a571b66 100644
--- a/chrome/browser/ui/views/infobars/infobar_background.h
+++ b/chrome/browser/ui/views/infobars/infobar_background.h
@@ -6,12 +6,12 @@
 #define CHROME_BROWSER_UI_VIEWS_INFOBARS_INFOBAR_BACKGROUND_H_
 
 #include "base/compiler_specific.h"
-#include "chrome/browser/infobars/infobar_delegate.h"
+#include "components/infobars/core/infobar_delegate.h"
 #include "ui/views/background.h"
 
 class InfoBarBackground : public views::Background {
  public:
-  explicit InfoBarBackground(InfoBarDelegate::Type infobar_type);
+  explicit InfoBarBackground(infobars::InfoBarDelegate::Type infobar_type);
   virtual ~InfoBarBackground();
 
   void set_separator_color(SkColor color) { separator_color_ = color; }
diff --git a/chrome/browser/ui/views/infobars/infobar_container_view.cc b/chrome/browser/ui/views/infobars/infobar_container_view.cc
index ba84618..d365076 100644
--- a/chrome/browser/ui/views/infobars/infobar_container_view.cc
+++ b/chrome/browser/ui/views/infobars/infobar_container_view.cc
@@ -14,7 +14,7 @@
 const char InfoBarContainerView::kViewClassName[] = "InfoBarContainerView";
 
 InfoBarContainerView::InfoBarContainerView(Delegate* delegate)
-    : InfoBarContainer(delegate) {
+    : infobars::InfoBarContainer(delegate) {
   set_id(VIEW_ID_INFO_BAR_CONTAINER);
 }
 
@@ -52,12 +52,14 @@
   state->name = l10n_util::GetStringUTF16(IDS_ACCNAME_INFOBAR_CONTAINER);
 }
 
-void InfoBarContainerView::PlatformSpecificAddInfoBar(InfoBar* infobar,
-                                                      size_t position) {
+void InfoBarContainerView::PlatformSpecificAddInfoBar(
+    infobars::InfoBar* infobar,
+    size_t position) {
   AddChildViewAt(static_cast<InfoBarView*>(infobar),
                  static_cast<int>(position));
 }
 
-void InfoBarContainerView::PlatformSpecificRemoveInfoBar(InfoBar* infobar) {
+void InfoBarContainerView::PlatformSpecificRemoveInfoBar(
+    infobars::InfoBar* infobar) {
   RemoveChildView(static_cast<InfoBarView*>(infobar));
 }
diff --git a/chrome/browser/ui/views/infobars/infobar_container_view.h b/chrome/browser/ui/views/infobars/infobar_container_view.h
index a41b270..afd8cfd 100644
--- a/chrome/browser/ui/views/infobars/infobar_container_view.h
+++ b/chrome/browser/ui/views/infobars/infobar_container_view.h
@@ -5,12 +5,12 @@
 #ifndef CHROME_BROWSER_UI_VIEWS_INFOBARS_INFOBAR_CONTAINER_VIEW_H_
 #define CHROME_BROWSER_UI_VIEWS_INFOBARS_INFOBAR_CONTAINER_VIEW_H_
 
-#include "chrome/browser/infobars/infobar_container.h"
+#include "components/infobars/core/infobar_container.h"
 #include "ui/views/accessible_pane_view.h"
 
 // The views-specific implementation of InfoBarContainer.
 class InfoBarContainerView : public views::AccessiblePaneView,
-                             public InfoBarContainer {
+                             public infobars::InfoBarContainer {
  public:
   static const char kViewClassName[];
 
@@ -25,9 +25,10 @@
   virtual void GetAccessibleState(ui::AXViewState* state) OVERRIDE;
 
   // InfobarContainer:
-  virtual void PlatformSpecificAddInfoBar(InfoBar* infobar,
+  virtual void PlatformSpecificAddInfoBar(infobars::InfoBar* infobar,
                                           size_t position) OVERRIDE;
-  virtual void PlatformSpecificRemoveInfoBar(InfoBar* infobar) OVERRIDE;
+  virtual void PlatformSpecificRemoveInfoBar(
+      infobars::InfoBar* infobar) OVERRIDE;
 
   DISALLOW_COPY_AND_ASSIGN(InfoBarContainerView);
 };
diff --git a/chrome/browser/ui/views/infobars/infobar_view.cc b/chrome/browser/ui/views/infobars/infobar_view.cc
index 9f45fd6..0c6c226 100644
--- a/chrome/browser/ui/views/infobars/infobar_view.cc
+++ b/chrome/browser/ui/views/infobars/infobar_view.cc
@@ -12,8 +12,8 @@
 
 #include "base/memory/scoped_ptr.h"
 #include "base/strings/utf_string_conversions.h"
-#include "chrome/browser/infobars/infobar_delegate.h"
 #include "chrome/browser/ui/views/infobars/infobar_background.h"
+#include "components/infobars/core/infobar_delegate.h"
 #include "grit/generated_resources.h"
 #include "grit/theme_resources.h"
 #include "grit/ui_resources.h"
@@ -31,6 +31,7 @@
 #include "ui/views/controls/label.h"
 #include "ui/views/controls/link.h"
 #include "ui/views/controls/menu/menu_runner.h"
+#include "ui/views/layout/layout_constants.h"
 #include "ui/views/widget/widget.h"
 #include "ui/views/window/non_client_view.h"
 
@@ -46,6 +47,10 @@
 
 namespace {
 
+const int kEdgeItemPadding = views::kRelatedControlHorizontalSpacing;
+const int kIconToLabelSpacing = views::kRelatedControlHorizontalSpacing;
+const int kBeforeCloseButtonSpacing = views::kUnrelatedControlHorizontalSpacing;
+
 bool SortLabelsByDecreasingWidth(views::Label* label_1, views::Label* label_2) {
   return label_1->GetPreferredSize().width() >
       label_2->GetPreferredSize().width();
@@ -57,30 +62,29 @@
 // InfoBar --------------------------------------------------------------------
 
 // static
-const int InfoBar::kSeparatorLineHeight =
+const int infobars::InfoBar::kSeparatorLineHeight =
     views::NonClientFrameView::kClientEdgeThickness;
-const int InfoBar::kDefaultArrowTargetHeight = 9;
-const int InfoBar::kMaximumArrowTargetHeight = 24;
-const int InfoBar::kDefaultArrowTargetHalfWidth = kDefaultArrowTargetHeight;
-const int InfoBar::kMaximumArrowTargetHalfWidth = 14;
-const int InfoBar::kDefaultBarTargetHeight = 36;
-
+const int infobars::InfoBar::kDefaultArrowTargetHeight = 9;
+const int infobars::InfoBar::kMaximumArrowTargetHeight = 24;
+const int infobars::InfoBar::kDefaultArrowTargetHalfWidth =
+    kDefaultArrowTargetHeight;
+const int infobars::InfoBar::kMaximumArrowTargetHalfWidth = 14;
+const int infobars::InfoBar::kDefaultBarTargetHeight = 36;
 
 // InfoBarView ----------------------------------------------------------------
 
 // static
-const int InfoBarView::kButtonButtonSpacing = 10;
-const int InfoBarView::kEndOfLabelSpacing = 16;
-const int InfoBarView::kHorizontalPadding = 6;
-const int InfoBarView::kCloseButtonSpacing = kEndOfLabelSpacing;
+const int InfoBarView::kButtonButtonSpacing = views::kRelatedButtonHSpacing;
+const int InfoBarView::kEndOfLabelSpacing = views::kItemLabelSpacing;
 
-InfoBarView::InfoBarView(scoped_ptr<InfoBarDelegate> delegate)
-    : InfoBar(delegate.Pass()),
+InfoBarView::InfoBarView(scoped_ptr<infobars::InfoBarDelegate> delegate)
+    : infobars::InfoBar(delegate.Pass()),
       views::ExternalFocusTracker(this, NULL),
       icon_(NULL),
       close_button_(NULL) {
   set_owned_by_client();  // InfoBar deletes itself at the appropriate time.
-  set_background(new InfoBarBackground(InfoBar::delegate()->GetInfoBarType()));
+  set_background(
+      new InfoBarBackground(infobars::InfoBar::delegate()->GetInfoBarType()));
 }
 
 InfoBarView::~InfoBarView() {
@@ -213,7 +217,7 @@
   // width is changed, which affects both paths.
   stroke_path_.rewind();
   fill_path_.rewind();
-  const InfoBarContainer::Delegate* delegate = container_delegate();
+  const infobars::InfoBarContainer::Delegate* delegate = container_delegate();
   if (delegate) {
     static_cast<InfoBarBackground*>(background())->set_separator_color(
         delegate->GetInfoBarSeparatorColor());
@@ -252,17 +256,18 @@
         SkIntToScalar(width()), SkIntToScalar(height() - kSeparatorLineHeight));
   }
 
-  int start_x = kHorizontalPadding;
+  int start_x = kEdgeItemPadding;
   if (icon_ != NULL) {
     icon_->SetPosition(gfx::Point(start_x, OffsetY(icon_)));
-    start_x = icon_->bounds().right() + kHorizontalPadding;
+    start_x = icon_->bounds().right() + kIconToLabelSpacing;
   }
 
   int content_minimum_width = ContentMinimumWidth();
   close_button_->SetPosition(gfx::Point(
-      std::max(start_x + content_minimum_width +
-                   ((content_minimum_width > 0) ? kCloseButtonSpacing : 0),
-               width() - kHorizontalPadding - close_button_->width()),
+      std::max(
+          start_x + content_minimum_width +
+              ((content_minimum_width > 0) ? kBeforeCloseButtonSpacing : 0),
+          width() - kEdgeItemPadding - close_button_->width()),
       OffsetY(close_button_)));
 }
 
@@ -343,12 +348,12 @@
   // Ensure we don't return a value greater than EndX(), so children can safely
   // set something's width to "EndX() - StartX()" without risking that being
   // negative.
-  return std::min(EndX(),
-      ((icon_ != NULL) ? icon_->bounds().right() : 0) + kHorizontalPadding);
+  return std::min(EndX(), (icon_ != NULL) ?
+      (icon_->bounds().right() + kIconToLabelSpacing) : kEdgeItemPadding);
 }
 
 int InfoBarView::EndX() const {
-  return close_button_->x() - kCloseButtonSpacing;
+  return close_button_->x() - kBeforeCloseButtonSpacing;
 }
 
 int InfoBarView::OffsetY(views::View* view) const {
@@ -357,8 +362,9 @@
       (bar_target_height() - bar_height());
 }
 
-const InfoBarContainer::Delegate* InfoBarView::container_delegate() const {
-  const InfoBarContainer* infobar_container = container();
+const infobars::InfoBarContainer::Delegate* InfoBarView::container_delegate()
+    const {
+  const infobars::InfoBarContainer* infobar_container = container();
   return infobar_container ? infobar_container->delegate() : NULL;
 }
 
@@ -426,16 +432,17 @@
 
 void InfoBarView::GetAccessibleState(ui::AXViewState* state) {
   state->name = l10n_util::GetStringUTF16(
-      (delegate()->GetInfoBarType() == InfoBarDelegate::WARNING_TYPE) ?
+      (delegate()->GetInfoBarType() ==
+       infobars::InfoBarDelegate::WARNING_TYPE) ?
           IDS_ACCNAME_INFOBAR_WARNING : IDS_ACCNAME_INFOBAR_PAGE_ACTION);
   state->role = ui::AX_ROLE_ALERT;
 }
 
 gfx::Size InfoBarView::GetPreferredSize() {
   return gfx::Size(
-      kHorizontalPadding + (icon_ ? (icon_->width() + kHorizontalPadding) : 0) +
-          ContentMinimumWidth() + kCloseButtonSpacing + close_button_->width() +
-          kHorizontalPadding,
+      kEdgeItemPadding + (icon_ ? (icon_->width() + kIconToLabelSpacing) : 0) +
+          ContentMinimumWidth() + kBeforeCloseButtonSpacing +
+          close_button_->width() + kEdgeItemPadding,
       total_height());
 }
 
diff --git a/chrome/browser/ui/views/infobars/infobar_view.h b/chrome/browser/ui/views/infobars/infobar_view.h
index 769b910..49a5d5b 100644
--- a/chrome/browser/ui/views/infobars/infobar_view.h
+++ b/chrome/browser/ui/views/infobars/infobar_view.h
@@ -7,8 +7,8 @@
 
 #include "base/basictypes.h"
 #include "base/compiler_specific.h"
-#include "chrome/browser/infobars/infobar.h"
-#include "chrome/browser/infobars/infobar_container.h"
+#include "components/infobars/core/infobar.h"
+#include "components/infobars/core/infobar_container.h"
 #include "third_party/skia/include/core/SkPath.h"
 #include "ui/views/controls/button/button.h"
 #include "ui/views/controls/menu/menu_item_view.h"
@@ -30,12 +30,12 @@
 class MenuRunner;
 }  // namespace views
 
-class InfoBarView : public InfoBar,
+class InfoBarView : public infobars::InfoBar,
                     public views::View,
                     public views::ButtonListener,
                     public views::ExternalFocusTracker {
  public:
-  explicit InfoBarView(scoped_ptr<InfoBarDelegate> delegate);
+  explicit InfoBarView(scoped_ptr<infobars::InfoBarDelegate> delegate);
 
   const SkPath& fill_path() const { return fill_path_; }
   const SkPath& stroke_path() const { return stroke_path_; }
@@ -101,7 +101,7 @@
   int OffsetY(views::View* view) const;
 
   // Convenience getter.
-  const InfoBarContainer::Delegate* container_delegate() const;
+  const infobars::InfoBarContainer::Delegate* container_delegate() const;
 
   // Shows a menu at the specified position.
   // NOTE: This must not be called if we're unowned.  (Subclasses should ignore
@@ -111,9 +111,6 @@
                  views::MenuItemView::AnchorPosition anchor);
 
  private:
-  static const int kHorizontalPadding;
-  static const int kCloseButtonSpacing;
-
   // Does the actual work for AssignWidths().  Assumes |labels| is sorted by
   // decreasing preferred width.
   static void AssignWidthsSorted(Labels* labels, int available_width);
diff --git a/chrome/browser/ui/views/infobars/translate_infobar_base.cc b/chrome/browser/ui/views/infobars/translate_infobar_base.cc
index a460ce8..5227ce0 100644
--- a/chrome/browser/ui/views/infobars/translate_infobar_base.cc
+++ b/chrome/browser/ui/views/infobars/translate_infobar_base.cc
@@ -5,12 +5,12 @@
 #include "chrome/browser/ui/views/infobars/translate_infobar_base.h"
 
 #include "base/strings/utf_string_conversions.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/translate/translate_infobar_delegate.h"
 #include "chrome/browser/translate/translate_tab_helper.h"
 #include "chrome/browser/ui/views/infobars/after_translate_infobar.h"
 #include "chrome/browser/ui/views/infobars/before_translate_infobar.h"
 #include "chrome/browser/ui/views/infobars/translate_message_infobar.h"
+#include "components/infobars/core/infobar.h"
 #include "grit/theme_resources.h"
 #include "ui/base/resource/resource_bundle.h"
 #include "ui/gfx/animation/slide_animation.h"
@@ -22,13 +22,20 @@
 // TranslateInfoBarDelegate ---------------------------------------------------
 
 // static
-scoped_ptr<InfoBar> TranslateInfoBarDelegate::CreateInfoBar(
+scoped_ptr<infobars::InfoBar> TranslateInfoBarDelegate::CreateInfoBar(
     scoped_ptr<TranslateInfoBarDelegate> delegate) {
-  if (delegate->translate_step() == translate::TRANSLATE_STEP_BEFORE_TRANSLATE)
-    return scoped_ptr<InfoBar>(new BeforeTranslateInfoBar(delegate.Pass()));
-  if (delegate->translate_step() == translate::TRANSLATE_STEP_AFTER_TRANSLATE)
-    return scoped_ptr<InfoBar>(new AfterTranslateInfoBar(delegate.Pass()));
-  return scoped_ptr<InfoBar>(new TranslateMessageInfoBar(delegate.Pass()));
+  if (delegate->translate_step() ==
+      translate::TRANSLATE_STEP_BEFORE_TRANSLATE) {
+    return scoped_ptr<infobars::InfoBar>(
+        new BeforeTranslateInfoBar(delegate.Pass()));
+  }
+  if (delegate->translate_step() ==
+      translate::TRANSLATE_STEP_AFTER_TRANSLATE) {
+    return scoped_ptr<infobars::InfoBar>(
+        new AfterTranslateInfoBar(delegate.Pass()));
+  }
+  return scoped_ptr<infobars::InfoBar>(
+      new TranslateMessageInfoBar(delegate.Pass()));
 }
 
 
@@ -50,8 +57,8 @@
 
 TranslateInfoBarBase::TranslateInfoBarBase(
     scoped_ptr<TranslateInfoBarDelegate> delegate)
-    : InfoBarView(delegate.PassAs<InfoBarDelegate>()),
-      error_background_(InfoBarDelegate::WARNING_TYPE) {
+    : InfoBarView(delegate.PassAs<infobars::InfoBarDelegate>()),
+      error_background_(infobars::InfoBarDelegate::WARNING_TYPE) {
 }
 
 TranslateInfoBarBase::~TranslateInfoBarBase() {
@@ -87,7 +94,7 @@
 void TranslateInfoBarBase::OnPaintBackground(gfx::Canvas* canvas) {
   // We need to set the separator color for |error_background_| like
   // InfoBarView::Layout() does for the normal background.
-  const InfoBarContainer::Delegate* delegate = container_delegate();
+  const infobars::InfoBarContainer::Delegate* delegate = container_delegate();
   if (delegate)
     error_background_.set_separator_color(delegate->GetInfoBarSeparatorColor());
 
diff --git a/chrome/browser/ui/views/location_bar/location_bar_view.cc b/chrome/browser/ui/views/location_bar/location_bar_view.cc
index 54801db..d7ecd3b 100644
--- a/chrome/browser/ui/views/location_bar/location_bar_view.cc
+++ b/chrome/browser/ui/views/location_bar/location_bar_view.cc
@@ -384,7 +384,7 @@
   zoom_view_->set_id(VIEW_ID_ZOOM_BUTTON);
   AddChildView(zoom_view_);
 
-  open_pdf_in_reader_view_ = new OpenPDFInReaderView(this);
+  open_pdf_in_reader_view_ = new OpenPDFInReaderView();
   AddChildView(open_pdf_in_reader_view_);
 
   manage_passwords_icon_view_ = new ManagePasswordsIconView(delegate_);
@@ -445,7 +445,8 @@
   registrar_.Add(this,
                  chrome::NOTIFICATION_EXTENSION_LOCATION_BAR_UPDATED,
                  profile_source);
-  registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED, profile_source);
+  registrar_.Add(
+      this, chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED, profile_source);
   registrar_.Add(this,
                  chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
                  profile_source);
@@ -1685,7 +1686,7 @@
       break;
     }
 
-    case chrome::NOTIFICATION_EXTENSION_LOADED:
+    case chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED:
     case chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED:
       Update(NULL);
       break;
diff --git a/chrome/browser/ui/views/location_bar/open_pdf_in_reader_view.cc b/chrome/browser/ui/views/location_bar/open_pdf_in_reader_view.cc
index c003bb7..6bc9cf3 100644
--- a/chrome/browser/ui/views/location_bar/open_pdf_in_reader_view.cc
+++ b/chrome/browser/ui/views/location_bar/open_pdf_in_reader_view.cc
@@ -14,10 +14,7 @@
 #include "ui/base/resource/resource_bundle.h"
 #include "ui/views/widget/widget.h"
 
-OpenPDFInReaderView::OpenPDFInReaderView(LocationBarView* location_bar_view)
-    : location_bar_view_(location_bar_view),
-      bubble_(NULL),
-      model_(NULL) {
+OpenPDFInReaderView::OpenPDFInReaderView() : bubble_(NULL), model_(NULL) {
   SetAccessibilityFocusable(true);
   SetImage(ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed(
       IDR_OMNIBOX_PDF_ICON));
diff --git a/chrome/browser/ui/views/location_bar/open_pdf_in_reader_view.h b/chrome/browser/ui/views/location_bar/open_pdf_in_reader_view.h
index bbe9765..3bb25b0 100644
--- a/chrome/browser/ui/views/location_bar/open_pdf_in_reader_view.h
+++ b/chrome/browser/ui/views/location_bar/open_pdf_in_reader_view.h
@@ -8,7 +8,6 @@
 #include "ui/views/controls/image_view.h"
 #include "ui/views/widget/widget_observer.h"
 
-class LocationBarView;
 class OpenPDFInReaderBubbleView;
 class OpenPDFInReaderPromptDelegate;
 
@@ -20,7 +19,7 @@
 class OpenPDFInReaderView : public views::ImageView,
                             public views::WidgetObserver {
  public:
-  explicit OpenPDFInReaderView(LocationBarView* location_bar_view);
+  OpenPDFInReaderView();
   virtual ~OpenPDFInReaderView();
 
   void Update(content::WebContents* web_contents);
@@ -37,9 +36,6 @@
   // views::WidgetObserver:
   virtual void OnWidgetDestroying(views::Widget* widget) OVERRIDE;
 
-  // The LocationBarView hosting this view.
-  LocationBarView* location_bar_view_;
-
   OpenPDFInReaderBubbleView* bubble_;
 
   // Weak pointer; owned by the PDFTabHelper of the currently active tab.
diff --git a/chrome/browser/ui/views/message_center/web_notification_tray.cc b/chrome/browser/ui/views/message_center/web_notification_tray.cc
index 5316f06..3db0229 100644
--- a/chrome/browser/ui/views/message_center/web_notification_tray.cc
+++ b/chrome/browser/ui/views/message_center/web_notification_tray.cc
@@ -128,7 +128,6 @@
     : message_center_delegate_(NULL),
       status_icon_(NULL),
       status_icon_menu_(NULL),
-      message_center_visible_(false),
       should_update_tray_content_(true) {
   message_center_tray_.reset(
       new MessageCenterTray(this, g_browser_process->message_center()));
diff --git a/chrome/browser/ui/views/message_center/web_notification_tray.h b/chrome/browser/ui/views/message_center/web_notification_tray.h
index 34f0193..24dfe52 100644
--- a/chrome/browser/ui/views/message_center/web_notification_tray.h
+++ b/chrome/browser/ui/views/message_center/web_notification_tray.h
@@ -100,7 +100,6 @@
 
   StatusIcon* status_icon_;
   StatusIconMenuModel* status_icon_menu_;
-  bool message_center_visible_;
   scoped_ptr<MessageCenterTray> message_center_tray_;
   gfx::Point mouse_click_point_;
 
diff --git a/chrome/browser/ui/views/message_center/web_notification_tray_browsertest.cc b/chrome/browser/ui/views/message_center/web_notification_tray_browsertest.cc
index fcb8bcb..6e95b0b 100644
--- a/chrome/browser/ui/views/message_center/web_notification_tray_browsertest.cc
+++ b/chrome/browser/ui/views/message_center/web_notification_tray_browsertest.cc
@@ -52,7 +52,7 @@
     virtual void Close(bool by_user) OVERRIDE {}
     virtual void Click() OVERRIDE {}
     virtual std::string id() const OVERRIDE { return id_; }
-    virtual content::RenderViewHost* GetRenderViewHost() const OVERRIDE {
+    virtual content::WebContents* GetWebContents() const OVERRIDE {
       return NULL;
     }
 
diff --git a/chrome/browser/ui/views/password_generation_bubble_view.cc b/chrome/browser/ui/views/password_generation_bubble_view.cc
index 73b623f..d86d3df 100644
--- a/chrome/browser/ui/views/password_generation_bubble_view.cc
+++ b/chrome/browser/ui/views/password_generation_bubble_view.cc
@@ -12,7 +12,6 @@
 #include "components/autofill/core/browser/password_generator.h"
 #include "components/autofill/core/common/password_generation_util.h"
 #include "components/password_manager/core/browser/password_manager.h"
-#include "content/public/browser/page_navigator.h"
 #include "content/public/browser/render_view_host.h"
 #include "grit/generated_resources.h"
 #include "grit/theme_resources.h"
@@ -123,7 +122,6 @@
     content::RenderViewHost* render_view_host,
     password_manager::PasswordManager* password_manager,
     autofill::PasswordGenerator* password_generator,
-    content::PageNavigator* navigator,
     ui::ThemeProvider* theme_provider)
     : BubbleDelegateView(anchor_view, views::BubbleBorder::TOP_LEFT),
       title_label_(NULL),
@@ -136,7 +134,6 @@
       render_view_host_(render_view_host),
       password_manager_(password_manager),
       password_generator_(password_generator),
-      navigator_(navigator),
       theme_provider_(theme_provider) {}
 
 PasswordGenerationBubbleView::~PasswordGenerationBubbleView() {}
diff --git a/chrome/browser/ui/views/password_generation_bubble_view.h b/chrome/browser/ui/views/password_generation_bubble_view.h
index dcfdd75..32e908f 100644
--- a/chrome/browser/ui/views/password_generation_bubble_view.h
+++ b/chrome/browser/ui/views/password_generation_bubble_view.h
@@ -19,7 +19,6 @@
 }
 
 namespace content {
-class PageNavigator;
 class RenderViewHost;
 }
 
@@ -48,7 +47,6 @@
       content::RenderViewHost* render_view_host,
       password_manager::PasswordManager* password_manager,
       autofill::PasswordGenerator* password_generator,
-      content::PageNavigator* navigator,
       ui::ThemeProvider* theme_provider);
   virtual ~PasswordGenerationBubbleView();
 
@@ -97,10 +95,6 @@
   // Object to generate passwords. The class won't take the ownership of it.
   autofill::PasswordGenerator* password_generator_;
 
-  // An object used to handle page loads that originate from link clicks
-  // within this UI.
-  content::PageNavigator* navigator_;
-
   // Theme provider used to draw the regenerate button.
   ui::ThemeProvider* theme_provider_;
 
diff --git a/chrome/browser/ui/views/passwords/manage_password_item_view.cc b/chrome/browser/ui/views/passwords/manage_password_item_view.cc
index c9557b5..8f0773e 100644
--- a/chrome/browser/ui/views/passwords/manage_password_item_view.cc
+++ b/chrome/browser/ui/views/passwords/manage_password_item_view.cc
@@ -4,6 +4,7 @@
 
 #include "chrome/browser/ui/views/passwords/manage_password_item_view.h"
 
+#include "chrome/browser/ui/passwords/manage_passwords_bubble_model.h"
 #include "grit/generated_resources.h"
 #include "grit/ui_resources.h"
 #include "ui/base/l10n/l10n_util.h"
diff --git a/chrome/browser/ui/views/passwords/manage_password_item_view.h b/chrome/browser/ui/views/passwords/manage_password_item_view.h
index 4cbbb16..793f915 100644
--- a/chrome/browser/ui/views/passwords/manage_password_item_view.h
+++ b/chrome/browser/ui/views/passwords/manage_password_item_view.h
@@ -8,6 +8,8 @@
 #include "chrome/browser/ui/views/passwords/manage_passwords_bubble_view.h"
 #include "components/autofill/core/common/password_form.h"
 
+class ManagePasswordsBubbleModel;
+
 namespace views {
 class GridLayout;
 class ImageButton;
diff --git a/chrome/browser/ui/views/passwords/manage_passwords_bubble_view.cc b/chrome/browser/ui/views/passwords/manage_passwords_bubble_view.cc
index b93e163..d6d379e 100644
--- a/chrome/browser/ui/views/passwords/manage_passwords_bubble_view.cc
+++ b/chrome/browser/ui/views/passwords/manage_passwords_bubble_view.cc
@@ -32,25 +32,18 @@
 
 namespace {
 
-// Metrics: "PasswordBubble.DisplayDisposition"
-enum BubbleDisplayDisposition {
-  AUTOMATIC_WITH_PASSWORD_PENDING = 0,
-  MANUAL_WITH_PASSWORD_PENDING,
-  MANUAL_MANAGE_PASSWORDS,
-  NUM_DISPLAY_DISPOSITIONS
-};
+enum FieldType { USERNAME_FIELD, PASSWORD_FIELD };
 
 // Upper limit on the size of the username and password fields.
 const int kUsernameFieldSize = 30;
 const int kPasswordFieldSize = 22;
 
 // Returns the width of |type| field.
-int GetFieldWidth(ManagePasswordsBubbleView::FieldType type) {
+int GetFieldWidth(FieldType type) {
   return ui::ResourceBundle::GetSharedInstance()
       .GetFontList(ui::ResourceBundle::SmallFont)
-      .GetExpectedTextWidth(type == ManagePasswordsBubbleView::USERNAME_FIELD
-                                ? kUsernameFieldSize
-                                : kPasswordFieldSize);
+      .GetExpectedTextWidth(type == USERNAME_FIELD ? kUsernameFieldSize
+                                                   : kPasswordFieldSize);
 }
 
 class SavePasswordRefusalComboboxModel : public ui::ComboboxModel {
@@ -90,8 +83,7 @@
 
 // static
 void ManagePasswordsBubbleView::ShowBubble(content::WebContents* web_contents,
-                                           ManagePasswordsIconView* icon_view,
-                                           BubbleDisplayReason reason) {
+                                           DisplayReason reason) {
   Browser* browser = chrome::FindBrowserWithWebContents(web_contents);
   DCHECK(browser);
   DCHECK(browser->window());
@@ -103,7 +95,7 @@
   views::View* anchor_view = is_fullscreen ?
       NULL : browser_view->GetLocationBarView()->manage_passwords_icon_view();
   manage_passwords_bubble_ = new ManagePasswordsBubbleView(
-      web_contents, anchor_view, icon_view, reason);
+      web_contents, anchor_view, reason);
 
   if (is_fullscreen) {
     manage_passwords_bubble_->set_parent_window(
@@ -122,10 +114,9 @@
 }
 
 // static
-void ManagePasswordsBubbleView::CloseBubble(
-    password_manager::metrics_util::UIDismissalReason reason) {
+void ManagePasswordsBubbleView::CloseBubble() {
   if (manage_passwords_bubble_)
-    manage_passwords_bubble_->Close(reason);
+    manage_passwords_bubble_->CloseWithoutLogging();
 }
 
 // static
@@ -138,40 +129,17 @@
 ManagePasswordsBubbleView::ManagePasswordsBubbleView(
     content::WebContents* web_contents,
     views::View* anchor_view,
-    ManagePasswordsIconView* icon_view,
-    BubbleDisplayReason reason)
-    : BubbleDelegateView(anchor_view,
+    DisplayReason reason)
+    : ManagePasswordsBubble(web_contents, reason),
+      BubbleDelegateView(anchor_view,
                          anchor_view ? views::BubbleBorder::TOP_RIGHT
-                                     : views::BubbleBorder::NONE),
-      manage_passwords_bubble_model_(
-          new ManagePasswordsBubbleModel(web_contents)),
-      icon_view_(icon_view) {
+                                     : views::BubbleBorder::NONE) {
   // Compensate for built-in vertical padding in the anchor view's image.
   set_anchor_view_insets(gfx::Insets(5, 0, 5, 0));
   set_notify_enter_exit_on_child(true);
-
-  BubbleDisplayDisposition disposition = AUTOMATIC_WITH_PASSWORD_PENDING;
-  if (reason == USER_ACTION) {
-    // TODO(mkwst): Deal with "Never save passwords" once we've decided how that
-    // flow should work.
-    disposition = manage_passwords_bubble_model_->WaitingToSavePassword()
-                      ? MANUAL_WITH_PASSWORD_PENDING
-                      : MANUAL_MANAGE_PASSWORDS;
-  } else {
-    DCHECK(manage_passwords_bubble_model_->WaitingToSavePassword());
-  }
-
-  UMA_HISTOGRAM_ENUMERATION("PasswordBubble.DisplayDisposition",
-                            disposition,
-                            NUM_DISPLAY_DISPOSITIONS);
 }
 
-ManagePasswordsBubbleView::~ManagePasswordsBubbleView() {
-  if (dismissal_reason_ == password_manager::metrics_util::NOT_DISPLAYED)
-    return;
-
-  password_manager::metrics_util::LogUIDismissalReason(dismissal_reason_);
-}
+ManagePasswordsBubbleView::~ManagePasswordsBubbleView() {}
 
 void ManagePasswordsBubbleView::BuildColumnSet(views::GridLayout* layout,
                                                ColumnSetType type) {
@@ -235,23 +203,18 @@
   SetAnchorRect(gfx::Rect(x_pos, screen_bounds.y(), 0, 0));
 }
 
-void ManagePasswordsBubbleView::Close(
-    password_manager::metrics_util::UIDismissalReason reason) {
-  dismissal_reason_ = reason;
-  icon_view_->SetTooltip(
-      manage_passwords_bubble_model_->manage_passwords_bubble_state() ==
-      ManagePasswordsBubbleModel::PASSWORD_TO_BE_SAVED);
+void ManagePasswordsBubbleView::Close() {
+  GetWidget()->Close();
+}
+
+void ManagePasswordsBubbleView::CloseWithoutLogging() {
+  model()->OnCloseWithoutLogging();
   GetWidget()->Close();
 }
 
 void ManagePasswordsBubbleView::Init() {
   using views::GridLayout;
 
-  // Default to a dismissal reason of "no interaction". If the user interacts
-  // with the button in such a way that it closes, we'll reset this value
-  // accordingly.
-  dismissal_reason_ = password_manager::metrics_util::NO_DIRECT_INTERACTION;
-
   GridLayout* layout = new GridLayout(this);
   SetFocusable(true);
   SetLayoutManager(layout);
@@ -273,8 +236,7 @@
           .width());
 
   // Build and populate the header.
-  views::Label* title_label =
-      new views::Label(manage_passwords_bubble_model_->title());
+  views::Label* title_label = new views::Label(model()->title());
   title_label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
   title_label->SetMultiLine(true);
   title_label->SetFontList(ui::ResourceBundle::GetSharedInstance().GetFontList(
@@ -285,17 +247,17 @@
   layout->AddView(title_label);
   layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing);
 
-  if (manage_passwords_bubble_model_->WaitingToSavePassword()) {
+  if (model()->WaitingToSavePassword()) {
     // If we've got a password that we're deciding whether or not to save,
     // then we need to display a single-view columnset containing the
     // ManagePasswordItemView, followed by double-view columnset containing
     // a "Save" and "Reject" button.
-    ManagePasswordItemView* item = new ManagePasswordItemView(
-        manage_passwords_bubble_model_,
-        manage_passwords_bubble_model_->pending_credentials(),
-        first_field_width,
-        second_field_width,
-        ManagePasswordItemView::FIRST_ITEM);
+    ManagePasswordItemView* item =
+        new ManagePasswordItemView(model(),
+                                   model()->pending_credentials(),
+                                   first_field_width,
+                                   second_field_width,
+                                   ManagePasswordItemView::FIRST_ITEM);
     layout->StartRow(0, SINGLE_VIEW_COLUMN_SET);
     layout->AddView(item);
 
@@ -320,16 +282,17 @@
     // TODO(mkwst): Do we really want the "No passwords" case? It would probably
     // be better to only clear the pending password upon navigation, rather than
     // as soon as the bubble closes.
-    if (!manage_passwords_bubble_model_->best_matches().empty()) {
+    if (!model()->best_matches().empty()) {
       for (autofill::PasswordFormMap::const_iterator i(
-               manage_passwords_bubble_model_->best_matches().begin());
-           i != manage_passwords_bubble_model_->best_matches().end(); ++i) {
+               model()->best_matches().begin());
+           i != model()->best_matches().end();
+           ++i) {
         ManagePasswordItemView* item = new ManagePasswordItemView(
-            manage_passwords_bubble_model_,
+            model(),
             *i->second,
             first_field_width,
             second_field_width,
-            i == manage_passwords_bubble_model_->best_matches().begin()
+            i == model()->best_matches().begin()
                 ? ManagePasswordItemView::FIRST_ITEM
                 : ManagePasswordItemView::SUBSEQUENT_ITEM);
 
@@ -348,8 +311,7 @@
     // Build a "manage" link and "done" button, and throw them both into a new
     // row
     // containing a double-view columnset.
-    manage_link_ =
-        new views::Link(manage_passwords_bubble_model_->manage_link());
+    manage_link_ = new views::Link(model()->manage_link());
     manage_link_->SetHorizontalAlignment(gfx::ALIGN_LEFT);
     manage_link_->SetUnderline(false);
     manage_link_->set_listener(this);
@@ -376,39 +338,32 @@
                                               const ui::Event& event) {
   DCHECK(sender == save_button_ || sender == done_button_);
 
-  password_manager::metrics_util::UIDismissalReason reason;
-  if (sender == save_button_) {
-    manage_passwords_bubble_model_->OnSaveClicked();
-    reason = password_manager::metrics_util::CLICKED_SAVE;
-  } else {
-    reason = password_manager::metrics_util::CLICKED_DONE;
-  }
-  Close(reason);
+  if (sender == save_button_)
+    model()->OnSaveClicked();
+  else
+    model()->OnDoneClicked();
+  Close();
 }
 
 void ManagePasswordsBubbleView::LinkClicked(views::Link* source,
                                             int event_flags) {
   DCHECK_EQ(source, manage_link_);
-  manage_passwords_bubble_model_->OnManageLinkClicked();
-  Close(password_manager::metrics_util::CLICKED_MANAGE);
+  model()->OnManageLinkClicked();
+  Close();
 }
 
 void ManagePasswordsBubbleView::OnPerformAction(views::Combobox* source) {
   DCHECK_EQ(source, refuse_combobox_);
-  password_manager::metrics_util::UIDismissalReason reason =
-      password_manager::metrics_util::NOT_DISPLAYED;
   switch (refuse_combobox_->selected_index()) {
     case SavePasswordRefusalComboboxModel::INDEX_NOPE:
-      manage_passwords_bubble_model_->OnNopeClicked();
-      reason = password_manager::metrics_util::CLICKED_NOPE;
+      model()->OnNopeClicked();
       break;
     case SavePasswordRefusalComboboxModel::INDEX_NEVER_FOR_THIS_SITE:
-      manage_passwords_bubble_model_->OnNeverForThisSiteClicked();
-      reason = password_manager::metrics_util::CLICKED_NEVER;
+      model()->OnNeverForThisSiteClicked();
       break;
     default:
       NOTREACHED();
       break;
   }
-  Close(reason);
+  Close();
 }
diff --git a/chrome/browser/ui/views/passwords/manage_passwords_bubble_view.h b/chrome/browser/ui/views/passwords/manage_passwords_bubble_view.h
index bda7182..39e1e50 100644
--- a/chrome/browser/ui/views/passwords/manage_passwords_bubble_view.h
+++ b/chrome/browser/ui/views/passwords/manage_passwords_bubble_view.h
@@ -6,8 +6,7 @@
 #define CHROME_BROWSER_UI_VIEWS_PASSWORDS_MANAGE_PASSWORDS_BUBBLE_VIEW_H_
 
 #include "base/basictypes.h"
-#include "chrome/browser/ui/passwords/manage_passwords_bubble_model.h"
-#include "components/password_manager/core/browser/password_manager_metrics_util.h"
+#include "chrome/browser/ui/passwords/manage_passwords_bubble.h"
 #include "ui/views/bubble/bubble_delegate.h"
 #include "ui/views/controls/button/button.h"
 #include "ui/views/controls/combobox/combobox.h"
@@ -27,23 +26,18 @@
 class GridLayout;
 }
 
-class ManagePasswordsBubbleView : public views::BubbleDelegateView,
+class ManagePasswordsBubbleView : public ManagePasswordsBubble,
+                                  public views::BubbleDelegateView,
                                   public views::ButtonListener,
                                   public views::ComboboxListener,
                                   public views::LinkListener {
  public:
-  enum FieldType { USERNAME_FIELD, PASSWORD_FIELD };
-
-  enum BubbleDisplayReason { AUTOMATIC = 0, USER_ACTION, NUM_DISPLAY_REASONS };
-
   // Shows the bubble.
   static void ShowBubble(content::WebContents* web_contents,
-                         ManagePasswordsIconView* icon_view,
-                         BubbleDisplayReason reason);
+                         DisplayReason reason);
 
   // Closes any existing bubble.
-  static void CloseBubble(
-      password_manager::metrics_util::UIDismissalReason reason);
+  static void CloseBubble();
 
   // Whether the bubble is currently showing.
   static bool IsShowing();
@@ -68,8 +62,7 @@
 
   ManagePasswordsBubbleView(content::WebContents* web_contents,
                             views::View* anchor_view,
-                            ManagePasswordsIconView* icon_view,
-                            BubbleDisplayReason reason);
+                            DisplayReason reason);
   virtual ~ManagePasswordsBubbleView();
 
   // Construct an appropriate ColumnSet for the given |type|, and add it
@@ -82,7 +75,17 @@
   // bubble, this must be called after the bubble is created.
   void AdjustForFullscreen(const gfx::Rect& screen_bounds);
 
-  void Close(password_manager::metrics_util::UIDismissalReason reason);
+  // Close the bubble.
+  void Close();
+
+  // Close the bubble without triggering UMA logging. We need this for the
+  // moment, as the current implementation can close the bubble without user
+  // interaction; we want to ensure that doesn't show up as a user action in
+  // our counts.
+  //
+  // TODO(mkwst): Throw this away once the icon is no longer responsible for
+  // creating the bubble.
+  void CloseWithoutLogging();
 
   // views::BubbleDelegateView:
   virtual void Init() OVERRIDE;
@@ -103,9 +106,6 @@
   // shown twice at the same time.
   static ManagePasswordsBubbleView* manage_passwords_bubble_;
 
-  ManagePasswordsBubbleModel* manage_passwords_bubble_model_;
-  ManagePasswordsIconView* icon_view_;
-
   // The buttons that are shown in the bubble.
   views::BlueButton* save_button_;
   views::Combobox* refuse_combobox_;
@@ -113,9 +113,6 @@
   views::Link* manage_link_;
   views::LabelButton* done_button_;
 
-  // We track the dismissal reason so we can log it correctly in the destructor.
-  password_manager::metrics_util::UIDismissalReason dismissal_reason_;
-
   DISALLOW_COPY_AND_ASSIGN(ManagePasswordsBubbleView);
 };
 
diff --git a/chrome/browser/ui/views/passwords/manage_passwords_icon_view.cc b/chrome/browser/ui/views/passwords/manage_passwords_icon_view.cc
index 6686784..aa99be4 100644
--- a/chrome/browser/ui/views/passwords/manage_passwords_icon_view.cc
+++ b/chrome/browser/ui/views/passwords/manage_passwords_icon_view.cc
@@ -28,8 +28,7 @@
           manage_passwords_icon_to_be_shown() &&
       !location_bar_delegate_->GetToolbarModel()->input_in_progress());
   if (!visible()) {
-    ManagePasswordsBubbleView::CloseBubble(
-        password_manager::metrics_util::NOT_DISPLAYED);
+    ManagePasswordsBubbleView::CloseBubble();
     return;
   }
   int icon_to_display =
@@ -49,7 +48,6 @@
       !ManagePasswordsBubbleView::IsShowing()) {
     ManagePasswordsBubbleView::ShowBubble(
         location_bar_delegate_->GetWebContents(),
-        this,
         ManagePasswordsBubbleView::AUTOMATIC);
     manage_passwords_bubble_ui_controller->OnBubbleShown();
   }
@@ -73,7 +71,6 @@
   if (event->type() == ui::ET_GESTURE_TAP) {
     ManagePasswordsBubbleView::ShowBubble(
         location_bar_delegate_->GetWebContents(),
-        this,
         ManagePasswordsBubbleView::USER_ACTION);
     event->SetHandled();
   }
@@ -88,7 +85,6 @@
   if (event.IsOnlyLeftMouseButton() && HitTestPoint(event.location())) {
     ManagePasswordsBubbleView::ShowBubble(
         location_bar_delegate_->GetWebContents(),
-        this,
         ManagePasswordsBubbleView::USER_ACTION);
   }
 }
diff --git a/chrome/browser/ui/views/profiles/avatar_menu_bubble_view.cc b/chrome/browser/ui/views/profiles/avatar_menu_bubble_view.cc
index 27b2b6a..aa3b695 100644
--- a/chrome/browser/ui/views/profiles/avatar_menu_bubble_view.cc
+++ b/chrome/browser/ui/views/profiles/avatar_menu_bubble_view.cc
@@ -21,9 +21,9 @@
 #include "chrome/browser/ui/browser_list.h"
 #include "chrome/browser/ui/browser_window.h"
 #include "chrome/browser/ui/chrome_pages.h"
-#include "chrome/common/profile_management_switches.h"
 #include "chrome/common/url_constants.h"
 #include "components/signin/core/browser/signin_manager.h"
+#include "components/signin/core/common/profile_management_switches.h"
 #include "content/public/browser/page_navigator.h"
 #include "content/public/browser/web_contents.h"
 #include "grit/generated_resources.h"
diff --git a/chrome/browser/ui/views/profiles/avatar_menu_button.cc b/chrome/browser/ui/views/profiles/avatar_menu_button.cc
index b2b1d53..73bf30d 100644
--- a/chrome/browser/ui/views/profiles/avatar_menu_button.cc
+++ b/chrome/browser/ui/views/profiles/avatar_menu_button.cc
@@ -16,7 +16,7 @@
 #include "chrome/browser/ui/views/profiles/avatar_menu_bubble_view.h"
 #include "chrome/browser/ui/views/profiles/profile_chooser_view.h"
 #include "chrome/common/pref_names.h"
-#include "chrome/common/profile_management_switches.h"
+#include "components/signin/core/common/profile_management_switches.h"
 #include "content/public/browser/notification_service.h"
 #include "ui/gfx/canvas.h"
 #include "ui/views/widget/widget.h"
diff --git a/chrome/browser/ui/views/profiles/profile_chooser_view.cc b/chrome/browser/ui/views/profiles/profile_chooser_view.cc
index eb811cf..a4feda3 100644
--- a/chrome/browser/ui/views/profiles/profile_chooser_view.cc
+++ b/chrome/browser/ui/views/profiles/profile_chooser_view.cc
@@ -6,11 +6,10 @@
 
 #include "base/prefs/pref_service.h"
 #include "base/strings/utf_string_conversions.h"
-#include "chrome/browser/about_flags.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/lifetime/application_lifetime.h"
-#include "chrome/browser/pref_service_flags_storage.h"
 #include "chrome/browser/profiles/profile_avatar_icon_util.h"
+#include "chrome/browser/profiles/profile_info_cache.h"
 #include "chrome/browser/profiles/profile_manager.h"
 #include "chrome/browser/profiles/profile_window.h"
 #include "chrome/browser/profiles/profiles_state.h"
@@ -22,13 +21,12 @@
 #include "chrome/browser/ui/chrome_pages.h"
 #include "chrome/browser/ui/singleton_tabs.h"
 #include "chrome/browser/ui/views/profiles/user_manager_view.h"
-#include "chrome/common/chrome_switches.h"
 #include "chrome/common/pref_names.h"
-#include "chrome/common/profile_management_switches.h"
 #include "chrome/common/url_constants.h"
 #include "components/signin/core/browser/mutable_profile_oauth2_token_service.h"
 #include "components/signin/core/browser/profile_oauth2_token_service.h"
 #include "components/signin/core/browser/signin_manager.h"
+#include "components/signin/core/common/profile_management_switches.h"
 #include "grit/chromium_strings.h"
 #include "grit/generated_resources.h"
 #include "grit/theme_resources.h"
@@ -157,7 +155,7 @@
       : views::ImageView(),
         change_photo_button_(NULL) {
     const int kLargeImageSide = 64;
-    gfx::Image image = profiles::GetSizedAvatarIconWithBorder(
+    gfx::Image image = profiles::GetSizedAvatarIcon(
         icon, true,
         kLargeImageSide + profiles::kAvatarIconPadding,
         kLargeImageSide + profiles::kAvatarIconPadding);
@@ -529,7 +527,7 @@
         prefs::kProfileAvatarTutorialShown, kProfileAvatarTutorialShowMax + 1);
     ShowView(BUBBLE_VIEW_MODE_PROFILE_CHOOSER, avatar_menu_.get());
   } else if (sender == tutorial_enable_new_profile_management_button_) {
-    EnableNewProfileManagementPreview();
+    profiles::EnableNewProfileManagementPreview();
   } else if (sender == remove_account_and_relaunch_button_) {
     RemoveAccount();
   } else if (sender == account_removal_cancel_button_) {
@@ -899,7 +897,8 @@
 
 views::View* ProfileChooserView::CreateGuestProfileView() {
   gfx::Image guest_icon =
-      ui::ResourceBundle::GetSharedInstance().GetImageNamed(IDR_LOGIN_GUEST);
+      ui::ResourceBundle::GetSharedInstance().GetImageNamed(
+          profiles::GetPlaceholderAvatarIconResourceID());
   AvatarMenu::Item guest_avatar_item(0, 0, guest_icon);
   guest_avatar_item.active = true;
   guest_avatar_item.name = l10n_util::GetStringUTF16(
@@ -922,7 +921,7 @@
     const AvatarMenu::Item& item = avatar_menu_->GetItemAt(index);
     const int kSmallImageSide = 32;
 
-    gfx::Image image = profiles::GetSizedAvatarIconWithBorder(
+    gfx::Image image = profiles::GetSizedAvatarIcon(
         item.icon, true,
         kSmallImageSide + profiles::kAvatarIconPadding,
         kSmallImageSide + profiles::kAvatarIconPadding);
@@ -1132,11 +1131,11 @@
     std::vector<size_t> offsets;
     const base::string16 settings_text =
         l10n_util::GetStringUTF16(IDS_PROFILES_SETTINGS_LINK);
-    const base::string16 primmary_account_removal_text =
+    const base::string16 primary_account_removal_text =
         l10n_util::GetStringFUTF16(IDS_PROFILES_PRIMARY_ACCOUNT_REMOVAL_TEXT,
             base::UTF8ToUTF16(account_id_to_remove_), settings_text, &offsets);
     views::StyledLabel* primary_account_removal_label =
-        new views::StyledLabel(primmary_account_removal_text, this);
+        new views::StyledLabel(primary_account_removal_text, this);
     primary_account_removal_label->AddStyleRange(
         gfx::Range(offsets[1], offsets[1] + settings_text.size()),
         views::StyledLabel::RangeStyleInfo::CreateForLink());
@@ -1176,18 +1175,3 @@
       &tutorial_learn_more_link_,
       &tutorial_enable_new_profile_management_button_);
 }
-
-void ProfileChooserView::EnableNewProfileManagementPreview() {
-  const char kNewProfileManagementExperimentInternalName[] =
-      "enable-new-profile-management";
-  about_flags::PrefServiceFlagsStorage flags_storage(
-      g_browser_process->local_state());
-  about_flags::SetExperimentEnabled(
-      &flags_storage,
-      kNewProfileManagementExperimentInternalName,
-      true);
-
-  CommandLine::ForCurrentProcess()->AppendSwitch(
-      switches::kNewProfileManagement);
-  chrome::ShowUserManagerWithTutorial(profiles::USER_MANAGER_TUTORIAL_OVERVIEW);
-}
diff --git a/chrome/browser/ui/views/profiles/profile_chooser_view.h b/chrome/browser/ui/views/profiles/profile_chooser_view.h
index 90c1d36..1fc0359 100644
--- a/chrome/browser/ui/views/profiles/profile_chooser_view.h
+++ b/chrome/browser/ui/views/profiles/profile_chooser_view.h
@@ -193,9 +193,6 @@
       views::Link** link,
       views::LabelButton** button);
 
-  // Enables new profile management preview.
-  void EnableNewProfileManagementPreview();
-
   scoped_ptr<AvatarMenu> avatar_menu_;
   Browser* browser_;
 
diff --git a/chrome/browser/ui/views/profiles/user_manager_view.cc b/chrome/browser/ui/views/profiles/user_manager_view.cc
index 5d305a7..c0eb030 100644
--- a/chrome/browser/ui/views/profiles/user_manager_view.cc
+++ b/chrome/browser/ui/views/profiles/user_manager_view.cc
@@ -30,7 +30,6 @@
 #include "chrome/browser/shell_integration.h"
 #include "ui/base/win/shell.h"
 #include "ui/views/win/hwnd_util.h"
-#include "win8/util/win8_util.h"
 #endif
 
 namespace {
diff --git a/chrome/browser/ui/views/renderer_context_menu/render_view_context_menu_views.cc b/chrome/browser/ui/views/renderer_context_menu/render_view_context_menu_views.cc
index 3ef9aa5..20edad9 100644
--- a/chrome/browser/ui/views/renderer_context_menu/render_view_context_menu_views.cc
+++ b/chrome/browser/ui/views/renderer_context_menu/render_view_context_menu_views.cc
@@ -19,7 +19,6 @@
 #include "ui/views/controls/menu/menu_item_view.h"
 #include "ui/views/controls/menu/menu_runner.h"
 
-
 using content::WebContents;
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -35,14 +34,12 @@
 RenderViewContextMenuViews::~RenderViewContextMenuViews() {
 }
 
-#if !defined(OS_WIN)
 // static
 RenderViewContextMenuViews* RenderViewContextMenuViews::Create(
     content::RenderFrameHost* render_frame_host,
     const content::ContextMenuParams& params) {
   return new RenderViewContextMenuViews(render_frame_host, params);
 }
-#endif  // OS_WIN
 
 void RenderViewContextMenuViews::RunMenuAt(views::Widget* parent,
                                            const gfx::Point& point,
diff --git a/chrome/browser/ui/views/renderer_context_menu/render_view_context_menu_win.cc b/chrome/browser/ui/views/renderer_context_menu/render_view_context_menu_win.cc
deleted file mode 100644
index a470587..0000000
--- a/chrome/browser/ui/views/renderer_context_menu/render_view_context_menu_win.cc
+++ /dev/null
@@ -1,78 +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.
-
-#include "chrome/browser/ui/views/renderer_context_menu/render_view_context_menu_win.h"
-
-#include "chrome/app/chrome_command_ids.h"
-#include "chrome/browser/chrome_notification_types.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/tab_contents/retargeting_details.h"
-#include "chrome/browser/ui/browser_finder.h"
-#include "chrome/browser/ui/tabs/tab_strip_model.h"
-#include "content/public/browser/web_contents.h"
-#include "win8/util/win8_util.h"
-
-using content::WebContents;
-
-RenderViewContextMenuWin::RenderViewContextMenuWin(
-    content::RenderFrameHost* render_frame_host,
-    const content::ContextMenuParams& params)
-    : RenderViewContextMenuViews(render_frame_host, params) {
-}
-
-RenderViewContextMenuWin::~RenderViewContextMenuWin() {
-}
-
-// static
-RenderViewContextMenuViews* RenderViewContextMenuViews::Create(
-    content::RenderFrameHost* render_frame_host,
-    const content::ContextMenuParams& params) {
-  return new RenderViewContextMenuWin(render_frame_host, params);
-}
-
-bool RenderViewContextMenuWin::IsCommandIdVisible(int command_id) const {
-  // In windows 8 metro mode no new window option on normal browser windows.
-  if (win8::IsSingleWindowMetroMode() && !profile_->IsOffTheRecord() &&
-      command_id == IDC_CONTENT_CONTEXT_OPENLINKNEWWINDOW) {
-    return false;
-  }
-  return RenderViewContextMenu::IsCommandIdVisible(command_id);
-}
-
-void RenderViewContextMenuWin::ExecuteCommand(int command_id,
-                                              int event_flags) {
-  if (win8::IsSingleWindowMetroMode() &&
-      command_id == IDC_CONTENT_CONTEXT_OPENLINKNEWWINDOW) {
-    // The open link in new window command should only be enabled for
-    // incognito windows in metro mode.
-    DCHECK(profile_->IsOffTheRecord());
-    // We directly go to the Browser object to open the url in effect
-    // bypassing the delegate. Currently the Browser is the only class which
-    // implements the delegate for the context menu. This would break if there
-    // are other delegates for the context menu. This is ok for now as this
-    // code only executes for Windows 8 metro mode.
-    // TODO(robertshield): FTB - Switch this to HOST_DESKTOP_TYPE_ASH when
-    //                     we make that the default for metro.
-    Browser* browser =
-        chrome::FindTabbedBrowser(profile_->GetOriginalProfile(),
-                                  false,
-                                  chrome::HOST_DESKTOP_TYPE_NATIVE);
-    if (browser) {
-      content::OpenURLParams url_params(
-          params_.link_url,
-          content::Referrer(params_.frame_url.is_empty() ?
-                                params_.page_url : params_.frame_url,
-                            params_.referrer_policy),
-          NEW_FOREGROUND_TAB,
-          content::PAGE_TRANSITION_LINK,
-          false);
-      WebContents* source_web_contents =
-          browser->tab_strip_model()->GetActiveWebContents();
-      WebContents* new_contents = source_web_contents->OpenURL(url_params);
-      DCHECK(new_contents);
-      return;
-    }
-  }
-  RenderViewContextMenu::ExecuteCommand(command_id, event_flags);
-}
diff --git a/chrome/browser/ui/views/renderer_context_menu/render_view_context_menu_win.h b/chrome/browser/ui/views/renderer_context_menu/render_view_context_menu_win.h
deleted file mode 100644
index 12d6b34..0000000
--- a/chrome/browser/ui/views/renderer_context_menu/render_view_context_menu_win.h
+++ /dev/null
@@ -1,29 +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.
-
-#ifndef CHROME_BROWSER_UI_VIEWS_RENDERER_CONTEXT_MENU_RENDER_VIEW_CONTEXT_MENU_WIN_H_
-#define CHROME_BROWSER_UI_VIEWS_RENDERER_CONTEXT_MENU_RENDER_VIEW_CONTEXT_MENU_WIN_H_
-
-#include "chrome/browser/ui/views/renderer_context_menu/render_view_context_menu_views.h"
-
-namespace content {
-class WebContents;
-}
-
-// Windows specific implementation of the render view context menu.
-class RenderViewContextMenuWin : public RenderViewContextMenuViews {
- public:
-  RenderViewContextMenuWin(content::RenderFrameHost* render_frame_host,
-                           const content::ContextMenuParams& params);
-  virtual ~RenderViewContextMenuWin();
-
-  // SimpleMenuModel::Delegate implementation.
-  virtual bool IsCommandIdVisible(int command_id) const OVERRIDE;
-  virtual void ExecuteCommand(int command_id, int event_flags) OVERRIDE;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(RenderViewContextMenuWin);
-};
-
-#endif  // CHROME_BROWSER_UI_VIEWS_RENDERER_CONTEXT_MENU_RENDER_VIEW_CONTEXT_MENU_WIN_H_
diff --git a/chrome/browser/ui/views/screen_capture_notification_ui_views.cc b/chrome/browser/ui/views/screen_capture_notification_ui_views.cc
index b30881d..3c259c6 100644
--- a/chrome/browser/ui/views/screen_capture_notification_ui_views.cc
+++ b/chrome/browser/ui/views/screen_capture_notification_ui_views.cc
@@ -207,8 +207,9 @@
       work_area.y() + work_area.height() - size.height(),
       size.width(), size.height());
   widget->SetBounds(bounds);
-  widget->SetOpacity(0xFF * kWindowAlphaValue);
   widget->Show();
+  // This has to be called after Show() to have effect.
+  widget->SetOpacity(0xFF * kWindowAlphaValue);
 
 #if defined(OS_WIN)
   return gfx::NativeViewId(views::HWNDForWidget(widget));
diff --git a/chrome/browser/ui/views/signed_certificate_timestamps_views.cc b/chrome/browser/ui/views/signed_certificate_timestamps_views.cc
index 12c7708..89c5598 100644
--- a/chrome/browser/ui/views/signed_certificate_timestamps_views.cc
+++ b/chrome/browser/ui/views/signed_certificate_timestamps_views.cc
@@ -103,7 +103,8 @@
 SignedCertificateTimestampsViews::SignedCertificateTimestampsViews(
     content::WebContents* web_contents,
     const net::SignedCertificateTimestampAndStatusList& sct_list)
-    : web_contents_(web_contents), sct_info_view_(NULL), sct_list_(sct_list) {
+    : sct_info_view_(NULL),
+      sct_list_(sct_list) {
   WebContentsModalDialogManager* web_contents_modal_dialog_manager =
       WebContentsModalDialogManager::FromWebContents(web_contents);
   WebContentsModalDialogManagerDelegate* modal_delegate =
diff --git a/chrome/browser/ui/views/signed_certificate_timestamps_views.h b/chrome/browser/ui/views/signed_certificate_timestamps_views.h
index 9001558..ea2d77b 100644
--- a/chrome/browser/ui/views/signed_certificate_timestamps_views.h
+++ b/chrome/browser/ui/views/signed_certificate_timestamps_views.h
@@ -57,8 +57,6 @@
                        const content::NotificationSource& source,
                        const content::NotificationDetails& details) OVERRIDE;
 
-  content::WebContents* web_contents_;
-
   SignedCertificateTimestampInfoView* sct_info_view_;
 
   scoped_ptr<SCTListModel> sct_list_model_;
diff --git a/chrome/browser/ui/views/status_bubble_views.cc b/chrome/browser/ui/views/status_bubble_views.cc
index c2717e6..46c1cfb 100644
--- a/chrome/browser/ui/views/status_bubble_views.cc
+++ b/chrome/browser/ui/views/status_bubble_views.cc
@@ -128,8 +128,7 @@
     STYLE_STANDARD_RIGHT
   };
 
-  StatusView(StatusBubble* status_bubble,
-             views::Widget* popup,
+  StatusView(views::Widget* popup,
              ui::ThemeProvider* theme_provider);
   virtual ~StatusView();
 
@@ -183,9 +182,6 @@
 
   scoped_ptr<StatusViewAnimation> animation_;
 
-  // Manager, owns us.
-  StatusBubble* status_bubble_;
-
   // Handle to the widget that contains us.
   views::Widget* popup_;
 
@@ -198,14 +194,12 @@
   DISALLOW_COPY_AND_ASSIGN(StatusView);
 };
 
-StatusBubbleViews::StatusView::StatusView(StatusBubble* status_bubble,
-                                          views::Widget* popup,
+StatusBubbleViews::StatusView::StatusView(views::Widget* popup,
                                           ui::ThemeProvider* theme_provider)
     : state_(BUBBLE_HIDDEN),
       style_(STYLE_STANDARD),
       timer_factory_(this),
       animation_(new StatusViewAnimation(this, 0, 0)),
-      status_bubble_(status_bubble),
       popup_(popup),
       theme_service_(theme_provider) {
 }
@@ -589,7 +583,6 @@
 StatusBubbleViews::StatusBubbleViews(views::View* base_view)
     : contains_mouse_(false),
       offset_(0),
-      opacity_(0),
       base_view_(base_view),
       view_(NULL),
       download_shelf_is_visible_(false),
@@ -609,7 +602,7 @@
     popup_.reset(new views::Widget);
     views::Widget* frame = base_view_->GetWidget();
     if (!view_)
-      view_ = new StatusView(this, popup_.get(), frame->GetThemeProvider());
+      view_ = new StatusView(popup_.get(), frame->GetThemeProvider());
     if (!expand_view_.get())
       expand_view_.reset(new StatusViewExpander(this, view_));
     views::Widget::InitParams params(views::Widget::InitParams::TYPE_POPUP);
diff --git a/chrome/browser/ui/views/status_bubble_views.h b/chrome/browser/ui/views/status_bubble_views.h
index c0e835b..db9548a 100644
--- a/chrome/browser/ui/views/status_bubble_views.h
+++ b/chrome/browser/ui/views/status_bubble_views.h
@@ -130,7 +130,6 @@
   // We use a HWND for the popup so that it may float above any HWNDs in our
   // UI (the location bar, for example).
   scoped_ptr<views::Widget> popup_;
-  double opacity_;
 
   views::View* base_view_;
   StatusView* view_;
diff --git a/chrome/browser/ui/views/status_icons/status_icon_win.cc b/chrome/browser/ui/views/status_icons/status_icon_win.cc
index 9dd5997..2bbbdae 100644
--- a/chrome/browser/ui/views/status_icons/status_icon_win.cc
+++ b/chrome/browser/ui/views/status_icons/status_icon_win.cc
@@ -5,14 +5,12 @@
 #include "chrome/browser/ui/views/status_icons/status_icon_win.h"
 
 #include "base/strings/string_number_conversions.h"
-#include "base/win/metro.h"
 #include "base/win/windows_version.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 #include "ui/gfx/icon_util.h"
 #include "ui/gfx/point.h"
 #include "ui/views/controls/menu/menu_item_view.h"
 #include "ui/views/controls/menu/menu_runner.h"
-#include "win8/util/win8_util.h"
 
 ////////////////////////////////////////////////////////////////////////////////
 // StatusIconWin, public:
@@ -167,51 +165,3 @@
   icon_data->hWnd = window_;
   icon_data->uID = icon_id_;
 }
-
-////////////////////////////////////////////////////////////////////////////////
-// StatusIconMetro
-
-StatusIconMetro::StatusIconMetro(UINT id)
-    : id_(id) {
-  DCHECK(win8::IsSingleWindowMetroMode());
-}
-
-StatusIconMetro::~StatusIconMetro() {
-}
-
-void StatusIconMetro::SetImage(const gfx::ImageSkia& image) {
-  DVLOG(1) << __FUNCTION__;
-}
-
-void StatusIconMetro::SetPressedImage(const gfx::ImageSkia& image) {
-  DVLOG(1) << __FUNCTION__;
-}
-
-void StatusIconMetro::SetToolTip(const base::string16& tool_tip) {
-  DVLOG(1) << __FUNCTION__;
-  tool_tip_ = tool_tip;
-}
-
-void StatusIconMetro::DisplayBalloon(const gfx::ImageSkia& icon,
-                                     const base::string16& title,
-                                     const base::string16& contents) {
-  DVLOG(1) << __FUNCTION__;
-
-  HMODULE metro_module = base::win::GetMetroModule();
-  DCHECK(metro_module);
-
-  if (metro_module) {
-    base::win::MetroNotification notification =
-        reinterpret_cast<base::win::MetroNotification>(
-            ::GetProcAddress(metro_module, "DisplayNotification"));
-    DCHECK(notification);
-    notification("", "", title.c_str(), contents.c_str(), L"",
-                 base::IntToString(id_).c_str(), NULL, NULL);
-  }
-}
-
-void StatusIconMetro::UpdatePlatformContextMenu(StatusIconMenuModel* menu) {
-  DVLOG(1) << __FUNCTION__
-           << " This functionality is not supported in Windows 8 metro";
-}
-
diff --git a/chrome/browser/ui/views/status_icons/status_icon_win.h b/chrome/browser/ui/views/status_icons/status_icon_win.h
index c8e5953..f6d5bb9 100644
--- a/chrome/browser/ui/views/status_icons/status_icon_win.h
+++ b/chrome/browser/ui/views/status_icons/status_icon_win.h
@@ -82,29 +82,4 @@
   DISALLOW_COPY_AND_ASSIGN(StatusIconWin);
 };
 
-// Implements status notifications using Windows 8 metro style notifications.
-class StatusIconMetro : public StatusIcon {
- public:
-  // Constructor which provides this icon's unique ID and messaging window.
-  explicit StatusIconMetro(UINT id);
-  virtual ~StatusIconMetro();
-
-  // Overridden from StatusIcon:
-  virtual void SetImage(const gfx::ImageSkia& image) OVERRIDE;
-  virtual void SetPressedImage(const gfx::ImageSkia& image) OVERRIDE;
-  virtual void SetToolTip(const base::string16& tool_tip) OVERRIDE;
-  virtual void DisplayBalloon(const gfx::ImageSkia& icon,
-                              const base::string16& title,
-                              const base::string16& contents) OVERRIDE;
- protected:
-  virtual void UpdatePlatformContextMenu(
-      StatusIconMenuModel* menu) OVERRIDE;
-
- private:
-  base::string16 tool_tip_;
-  const UINT id_;
-
-  DISALLOW_COPY_AND_ASSIGN(StatusIconMetro);
-};
-
 #endif  // CHROME_BROWSER_UI_VIEWS_STATUS_ICONS_STATUS_ICON_WIN_H_
diff --git a/chrome/browser/ui/views/status_icons/status_tray_win.cc b/chrome/browser/ui/views/status_icons/status_tray_win.cc
index 8c66cd4..bcbe8e6 100644
--- a/chrome/browser/ui/views/status_icons/status_tray_win.cc
+++ b/chrome/browser/ui/views/status_icons/status_tray_win.cc
@@ -11,7 +11,6 @@
 #include "chrome/common/chrome_constants.h"
 #include "ui/gfx/screen.h"
 #include "ui/gfx/win/hwnd_util.h"
-#include "win8/util/win8_util.h"
 
 static const UINT kStatusIconMessage = WM_APP + 1;
 
@@ -135,11 +134,8 @@
   else
     next_icon_id = ReservedIconId(type);
 
-  StatusIcon* icon = NULL;
-  if (win8::IsSingleWindowMetroMode())
-    icon = new StatusIconMetro(next_icon_id);
-  else
-    icon = new StatusIconWin(next_icon_id, window_, kStatusIconMessage);
+  StatusIcon* icon =
+      new StatusIconWin(next_icon_id, window_, kStatusIconMessage);
 
   icon->SetImage(image);
   icon->SetToolTip(tool_tip);
diff --git a/chrome/browser/ui/views/sync/profile_signin_confirmation_dialog_views.cc b/chrome/browser/ui/views/sync/profile_signin_confirmation_dialog_views.cc
index 2fce6a8..07f6ec9 100644
--- a/chrome/browser/ui/views/sync/profile_signin_confirmation_dialog_views.cc
+++ b/chrome/browser/ui/views/sync/profile_signin_confirmation_dialog_views.cc
@@ -52,11 +52,9 @@
 
 ProfileSigninConfirmationDialogViews::ProfileSigninConfirmationDialogViews(
     Browser* browser,
-    Profile* profile,
     const std::string& username,
     ui::ProfileSigninConfirmationDelegate* delegate)
   : browser_(browser),
-    profile_(profile),
     username_(username),
     delegate_(delegate),
     prompt_for_new_profile_(true),
@@ -73,7 +71,7 @@
     ui::ProfileSigninConfirmationDelegate* delegate) {
   ProfileSigninConfirmationDialogViews* dialog =
       new ProfileSigninConfirmationDialogViews(
-          browser, profile, username, delegate);
+          browser, username, delegate);
   ui::CheckShouldPromptForNewProfile(
       profile,
       // This callback is guaranteed to be invoked, and once it is, the dialog
diff --git a/chrome/browser/ui/views/sync/profile_signin_confirmation_dialog_views.h b/chrome/browser/ui/views/sync/profile_signin_confirmation_dialog_views.h
index a00335d..31e263a 100644
--- a/chrome/browser/ui/views/sync/profile_signin_confirmation_dialog_views.h
+++ b/chrome/browser/ui/views/sync/profile_signin_confirmation_dialog_views.h
@@ -39,7 +39,6 @@
  private:
   ProfileSigninConfirmationDialogViews(
       Browser* browser,
-      Profile* profile,
       const std::string& username,
       ui::ProfileSigninConfirmationDelegate* delegate);
   virtual ~ProfileSigninConfirmationDialogViews();
@@ -75,9 +74,6 @@
   // Weak ptr to parent view.
   Browser* browser_;
 
-  // The profile being signed in.
-  Profile* profile_;
-
   // The GAIA username being signed in.
   std::string username_;
 
diff --git a/chrome/browser/ui/views/tab_contents/chrome_web_contents_view_delegate_views.cc b/chrome/browser/ui/views/tab_contents/chrome_web_contents_view_delegate_views.cc
index a4f3640..1b56ee4 100644
--- a/chrome/browser/ui/views/tab_contents/chrome_web_contents_view_delegate_views.cc
+++ b/chrome/browser/ui/views/tab_contents/chrome_web_contents_view_delegate_views.cc
@@ -122,17 +122,24 @@
 scoped_ptr<RenderViewContextMenu> ChromeWebContentsViewDelegateViews::BuildMenu(
     content::WebContents* web_contents,
     const content::ContextMenuParams& params) {
-  scoped_ptr<RenderViewContextMenu> menu(
-      RenderViewContextMenuViews::Create(web_contents->GetFocusedFrame(),
-                                         params));
-  menu->Init();
+  scoped_ptr<RenderViewContextMenu> menu;
+  content::RenderFrameHost* focused_frame = web_contents->GetFocusedFrame();
+  // If the frame tree does not have a focused frame at this point, do not
+  // bother creating RenderViewContextMenuViews.
+  // This happens if the frame has navigated to a different page before
+  // ContextMenu message was received by the current RenderFrameHost.
+  if (focused_frame) {
+    menu.reset(RenderViewContextMenuViews::Create(focused_frame, params));
+    menu->Init();
+  }
   return menu.Pass();
 }
 
 void ChromeWebContentsViewDelegateViews::ShowMenu(
     scoped_ptr<RenderViewContextMenu> menu) {
-  DCHECK(menu.get());
   context_menu_.reset(static_cast<RenderViewContextMenuViews*>(menu.release()));
+  if (!context_menu_.get())
+    return;
 
   // Menus need a Widget to work. If we're not the active tab we won't
   // necessarily be in a widget.
diff --git a/chrome/browser/ui/views/tab_contents/chrome_web_contents_view_delegate_views_unittest.cc b/chrome/browser/ui/views/tab_contents/chrome_web_contents_view_delegate_views_unittest.cc
new file mode 100644
index 0000000..d69f48a
--- /dev/null
+++ b/chrome/browser/ui/views/tab_contents/chrome_web_contents_view_delegate_views_unittest.cc
@@ -0,0 +1,28 @@
+// 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.
+
+#include "chrome/browser/ui/views/tab_contents/chrome_web_contents_view_delegate_views.h"
+
+#include "chrome/test/base/chrome_render_view_host_test_harness.h"
+#include "content/public/browser/web_contents.h"
+#include "content/public/common/context_menu_params.h"
+
+class ChromeWebContentsViewDelegateViewsTest
+    : public ChromeRenderViewHostTestHarness {
+ public:
+  ChromeWebContentsViewDelegateViewsTest() {}
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(ChromeWebContentsViewDelegateViewsTest);
+};
+
+// Test that makes sure ShowContextMenu does not crash if web_contents() does
+// not have a focused frame.
+TEST_F(ChromeWebContentsViewDelegateViewsTest, ContextMenuNoFocusedFrame) {
+  scoped_ptr<ChromeWebContentsViewDelegateViews> delegate_view(
+      new ChromeWebContentsViewDelegateViews(web_contents()));
+  EXPECT_FALSE(web_contents()->GetFocusedFrame());
+  const content::ContextMenuParams params;
+  delegate_view->ShowContextMenu(web_contents()->GetMainFrame(), params);
+}
diff --git a/chrome/browser/ui/views/tabs/tab.cc b/chrome/browser/ui/views/tabs/tab.cc
index 3c0b397..3326c9e 100644
--- a/chrome/browser/ui/views/tabs/tab.cc
+++ b/chrome/browser/ui/views/tabs/tab.cc
@@ -49,10 +49,6 @@
 #include "ui/views/widget/widget.h"
 #include "ui/views/window/non_client_view.h"
 
-#if defined(OS_WIN)
-#include "win8/util/win8_util.h"
-#endif
-
 #if defined(USE_ASH)
 #include "ui/aura/env.h"
 #endif
@@ -1681,11 +1677,6 @@
   } else if (data().incognito) {
     *tab_id = IDR_THEME_TAB_BACKGROUND_INCOGNITO;
     *frame_id = IDR_THEME_FRAME_INCOGNITO;
-#if defined(OS_WIN)
-  } else if (win8::IsSingleWindowMetroMode()) {
-    *tab_id = IDR_THEME_TAB_BACKGROUND_V;
-    *frame_id = 0;
-#endif
   } else {
     *tab_id = IDR_THEME_TAB_BACKGROUND;
     *frame_id = IDR_THEME_FRAME;
diff --git a/chrome/browser/ui/views/tabs/tab_drag_controller_interactive_uitest.cc b/chrome/browser/ui/views/tabs/tab_drag_controller_interactive_uitest.cc
index fcab2b9..f708c81 100644
--- a/chrome/browser/ui/views/tabs/tab_drag_controller_interactive_uitest.cc
+++ b/chrome/browser/ui/views/tabs/tab_drag_controller_interactive_uitest.cc
@@ -1885,7 +1885,7 @@
   float GetCursorDeviceScaleFactor() const {
     ash::test::CursorManagerTestApi cursor_test_api(
         ash::Shell::GetInstance()->cursor_manager());
-    return cursor_test_api.GetDisplay().device_scale_factor();
+    return cursor_test_api.GetCurrentCursor().device_scale_factor();
   }
 
  private:
diff --git a/chrome/browser/ui/views/tabs/tab_strip.cc b/chrome/browser/ui/views/tabs/tab_strip.cc
index de351f5..0904445 100644
--- a/chrome/browser/ui/views/tabs/tab_strip.cc
+++ b/chrome/browser/ui/views/tabs/tab_strip.cc
@@ -59,7 +59,6 @@
 #include "ui/gfx/win/hwnd_util.h"
 #include "ui/views/widget/monitor_win.h"
 #include "ui/views/win/hwnd_util.h"
-#include "win8/util/win8_util.h"
 #endif
 
 using base::UserMetricsAction;
@@ -440,10 +439,6 @@
     background_id = IDR_THEME_TAB_BACKGROUND_V;
   } else if (tab_strip_->controller()->IsIncognito()) {
     background_id = IDR_THEME_TAB_BACKGROUND_INCOGNITO;
-#if defined(OS_WIN)
-  } else if (win8::IsSingleWindowMetroMode()) {
-    background_id = IDR_THEME_TAB_BACKGROUND_V;
-#endif
   } else {
     background_id = IDR_THEME_TAB_BACKGROUND;
   }
@@ -1141,11 +1136,6 @@
     move_behavior = TabDragController::MOVE_VISIBILE_TABS;
   }
 
-#if defined(OS_WIN)
-  // It doesn't make sense to drag tabs out on Win8's single window Metro mode.
-  if (win8::IsSingleWindowMetroMode())
-    detach_behavior = TabDragController::NOT_DETACHABLE;
-#endif
   drag_controller_.reset(new TabDragController);
   drag_controller_->Init(
       this, tab, tabs, gfx::Point(x, y), event.x(), selection_model,
diff --git a/chrome/browser/ui/views/task_manager_view.cc b/chrome/browser/ui/views/task_manager_view.cc
index 796a18c..0216996 100644
--- a/chrome/browser/ui/views/task_manager_view.cc
+++ b/chrome/browser/ui/views/task_manager_view.cc
@@ -50,7 +50,6 @@
 #include "chrome/browser/shell_integration.h"
 #include "ui/base/win/shell.h"
 #include "ui/views/win/hwnd_util.h"
-#include "win8/util/win8_util.h"
 #endif
 
 namespace {
@@ -461,10 +460,6 @@
 
 // static
 void TaskManagerView::Show(Browser* browser) {
-#if defined(OS_WIN)
-  // In Windows Metro it's not good to open this native window.
-  DCHECK(!win8::IsSingleWindowMetroMode());
-#endif
   // In ash we can come here through the ChromeShellDelegate. If there is no
   // browser window at that time of the call, browser could be passed as NULL.
   const chrome::HostDesktopType desktop_type =
diff --git a/chrome/browser/ui/views/toolbar/reload_button.cc b/chrome/browser/ui/views/toolbar/reload_button.cc
index aa09514..7adefcb 100644
--- a/chrome/browser/ui/views/toolbar/reload_button.cc
+++ b/chrome/browser/ui/views/toolbar/reload_button.cc
@@ -9,7 +9,6 @@
 #include "chrome/browser/command_updater.h"
 #include "chrome/browser/search/search.h"
 #include "chrome/browser/ui/search/search_model.h"
-#include "chrome/browser/ui/views/location_bar/location_bar_view.h"
 #include "grit/generated_resources.h"
 #include "grit/theme_resources.h"
 #include "ui/base/l10n/l10n_util.h"
@@ -37,10 +36,8 @@
 // static
 const char ReloadButton::kViewClassName[] = "ReloadButton";
 
-ReloadButton::ReloadButton(LocationBarView* location_bar,
-                           CommandUpdater* command_updater)
+ReloadButton::ReloadButton(CommandUpdater* command_updater)
     : ToolbarButton(this, CreateMenuModel()),
-      location_bar_(location_bar),
       command_updater_(command_updater),
       intended_mode_(MODE_RELOAD),
       visible_mode_(MODE_RELOAD),
diff --git a/chrome/browser/ui/views/toolbar/reload_button.h b/chrome/browser/ui/views/toolbar/reload_button.h
index f3d1f5d..5cbdf42 100644
--- a/chrome/browser/ui/views/toolbar/reload_button.h
+++ b/chrome/browser/ui/views/toolbar/reload_button.h
@@ -13,7 +13,6 @@
 #include "ui/views/controls/button/button.h"
 
 class CommandUpdater;
-class LocationBarView;
 
 ////////////////////////////////////////////////////////////////////////////////
 //
@@ -35,8 +34,7 @@
   // The button's class name.
   static const char kViewClassName[];
 
-  ReloadButton(LocationBarView* location_bar,
-               CommandUpdater* command_updater);
+  explicit ReloadButton(CommandUpdater* command_updater);
   virtual ~ReloadButton();
 
   // Ask for a specified button state.  If |force| is true this will be applied
@@ -84,8 +82,7 @@
   base::OneShotTimer<ReloadButton> double_click_timer_;
   base::OneShotTimer<ReloadButton> stop_to_reload_timer_;
 
-  // These may be NULL when testing.
-  LocationBarView* location_bar_;
+  // This may be NULL when testing.
   CommandUpdater* command_updater_;
 
   // The mode we should be in assuming no timers are running.
diff --git a/chrome/browser/ui/views/toolbar/reload_button_unittest.cc b/chrome/browser/ui/views/toolbar/reload_button_unittest.cc
index 6d8e257..3355ea6 100644
--- a/chrome/browser/ui/views/toolbar/reload_button_unittest.cc
+++ b/chrome/browser/ui/views/toolbar/reload_button_unittest.cc
@@ -29,7 +29,7 @@
   ReloadButton reload_;
 };
 
-ReloadButtonTest::ReloadButtonTest() : reload_(NULL, NULL) {
+ReloadButtonTest::ReloadButtonTest() : reload_(NULL) {
   // Set the timer delays to 0 so that timers will fire as soon as we tell the
   // message loop to run pending tasks.
   reload_.double_click_timer_delay_ = base::TimeDelta();
diff --git a/chrome/browser/ui/views/toolbar/toolbar_view.cc b/chrome/browser/ui/views/toolbar/toolbar_view.cc
index 4556ad0..a9229ec 100644
--- a/chrome/browser/ui/views/toolbar/toolbar_view.cc
+++ b/chrome/browser/ui/views/toolbar/toolbar_view.cc
@@ -215,14 +215,12 @@
   forward_->set_id(VIEW_ID_FORWARD_BUTTON);
   forward_->Init();
 
-  // Have to create this before |reload_| as |reload_|'s constructor needs it.
   location_bar_ = new LocationBarView(
       browser_, browser_->profile(),
       browser_->command_controller()->command_updater(), this,
       display_mode_ == DISPLAYMODE_LOCATION);
 
-  reload_ = new ReloadButton(location_bar_,
-                             browser_->command_controller()->command_updater());
+  reload_ = new ReloadButton(browser_->command_controller()->command_updater());
   reload_->set_triggerable_event_flags(
       ui::EF_LEFT_MOUSE_BUTTON | ui::EF_MIDDLE_MOUSE_BUTTON);
   reload_->set_tag(IDC_RELOAD);
diff --git a/chrome/browser/ui/views/toolbar/wrench_toolbar_button.cc b/chrome/browser/ui/views/toolbar/wrench_toolbar_button.cc
index 4271129..c3c5d7d 100644
--- a/chrome/browser/ui/views/toolbar/wrench_toolbar_button.cc
+++ b/chrome/browser/ui/views/toolbar/wrench_toolbar_button.cc
@@ -26,12 +26,6 @@
 }
 
 void WrenchToolbarButton::OnPaint(gfx::Canvas* canvas) {
-  // Badge linux aura builds so they're quickly identifiable.
-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
-  wrench_icon_painter_->set_badge(
-      *GetThemeProvider()->GetImageSkiaNamed(IDR_TOOLS_BADGE_AURA));
-#endif
-
   wrench_icon_painter_->Paint(
       canvas, GetThemeProvider(), gfx::Rect(size()), GetCurrentBezelType());
   views::Painter::PaintFocusPainter(this, canvas, focus_painter());
diff --git a/chrome/browser/ui/views/web_contents_modal_dialog_manager_views.cc b/chrome/browser/ui/views/web_contents_modal_dialog_manager_views.cc
index 12cec5f..5f88794 100644
--- a/chrome/browser/ui/views/web_contents_modal_dialog_manager_views.cc
+++ b/chrome/browser/ui/views/web_contents_modal_dialog_manager_views.cc
@@ -49,9 +49,12 @@
       public views::WidgetObserver {
  public:
   NativeWebContentsModalDialogManagerViews(
+      NativeWebContentsModalDialog dialog,
       SingleWebContentsDialogManagerDelegate* native_delegate)
       : native_delegate_(native_delegate),
+        dialog_(dialog),
         host_(NULL) {
+    ManageDialog();
   }
 
   virtual ~NativeWebContentsModalDialogManagerViews() {
@@ -65,9 +68,10 @@
     }
   }
 
-  // SingleWebContentsDialogManager overrides
-  virtual void ManageDialog(NativeWebContentsModalDialog dialog) OVERRIDE {
-    views::Widget* widget = GetWidget(dialog);
+  // Sets up this object to manage the dialog_. Registers for closing events
+  // in order to notify the delegate.
+  virtual void ManageDialog() {
+    views::Widget* widget = GetWidget(dialog());
     widget->AddObserver(this);
     observed_widgets_.insert(widget);
     widget->set_movement_disabled(true);
@@ -97,8 +101,9 @@
 #endif
   }
 
-  virtual void ShowDialog(NativeWebContentsModalDialog dialog) OVERRIDE {
-    views::Widget* widget = GetWidget(dialog);
+  // SingleWebContentsDialogManager overrides
+  virtual void Show() OVERRIDE {
+    views::Widget* widget = GetWidget(dialog());
 #if defined(USE_AURA)
     scoped_ptr<wm::SuspendChildWindowVisibilityAnimations> suspend;
     if (shown_widgets_.find(widget) != shown_widgets_.end()) {
@@ -110,7 +115,7 @@
     if (host_)
       UpdateWebContentsModalDialogPosition(widget, host_);
     widget->Show();
-    FocusDialog(dialog);
+    Focus();
 
 #if defined(USE_AURA)
     // TODO(pkotwicz): Control the z-order of the constrained dialog via
@@ -120,8 +125,8 @@
 #endif
   }
 
-  virtual void HideDialog(NativeWebContentsModalDialog dialog) OVERRIDE {
-    views::Widget* widget = GetWidget(dialog);
+  virtual void Hide() OVERRIDE {
+    views::Widget* widget = GetWidget(dialog());
 #if defined(USE_AURA)
     scoped_ptr<wm::SuspendChildWindowVisibilityAnimations> suspend;
     suspend.reset(new wm::SuspendChildWindowVisibilityAnimations(
@@ -130,12 +135,12 @@
     widget->Hide();
   }
 
-  virtual void CloseDialog(NativeWebContentsModalDialog dialog) OVERRIDE {
-    GetWidget(dialog)->Close();
+  virtual void Close() OVERRIDE {
+    GetWidget(dialog())->Close();
   }
 
-  virtual void FocusDialog(NativeWebContentsModalDialog dialog) OVERRIDE {
-    views::Widget* widget = GetWidget(dialog);
+  virtual void Focus() OVERRIDE {
+    views::Widget* widget = GetWidget(dialog());
     if (widget->widget_delegate() &&
         widget->widget_delegate()->GetInitiallyFocusedView())
       widget->widget_delegate()->GetInitiallyFocusedView()->RequestFocus();
@@ -146,7 +151,7 @@
 #endif
   }
 
-  virtual void PulseDialog(NativeWebContentsModalDialog dialog) OVERRIDE {
+  virtual void Pulse() OVERRIDE {
   }
 
   // WebContentsModalDialogHostObserver overrides
@@ -205,6 +210,10 @@
     }
   }
 
+  virtual NativeWebContentsModalDialog dialog() OVERRIDE {
+    return dialog_;
+  }
+
  private:
   static views::Widget* GetWidget(NativeWebContentsModalDialog dialog) {
     views::Widget* widget = views::Widget::GetWidgetForNativeWindow(dialog);
@@ -231,6 +240,7 @@
   }
 
   SingleWebContentsDialogManagerDelegate* native_delegate_;
+  NativeWebContentsModalDialog dialog_;
   WebContentsModalDialogHost* host_;
   std::set<views::Widget*> observed_widgets_;
   std::set<views::Widget*> shown_widgets_;
@@ -244,8 +254,9 @@
 
 SingleWebContentsDialogManager* WebContentsModalDialogManager::
 CreateNativeWebModalManager(
+    NativeWebContentsModalDialog dialog,
     SingleWebContentsDialogManagerDelegate* native_delegate) {
-  return new NativeWebContentsModalDialogManagerViews(native_delegate);
+  return new NativeWebContentsModalDialogManagerViews(dialog, native_delegate);
 }
 
 }  // namespace web_modal
diff --git a/chrome/browser/ui/views/website_settings/permission_selector_view.cc b/chrome/browser/ui/views/website_settings/permission_selector_view.cc
index 8577eb3..11319fd 100644
--- a/chrome/browser/ui/views/website_settings/permission_selector_view.cc
+++ b/chrome/browser/ui/views/website_settings/permission_selector_view.cc
@@ -5,11 +5,11 @@
 #include "chrome/browser/ui/views/website_settings/permission_selector_view.h"
 
 #include "base/strings/utf_string_conversions.h"
+#include "chrome/browser/ui/website_settings/permission_menu_model.h"
 #include "chrome/browser/ui/website_settings/website_settings_ui.h"
 #include "grit/generated_resources.h"
 #include "ui/accessibility/ax_view_state.h"
 #include "ui/base/l10n/l10n_util.h"
-#include "ui/base/models/simple_menu_model.h"
 #include "ui/gfx/image/image.h"
 #include "ui/views/controls/button/menu_button.h"
 #include "ui/views/controls/image_view.h"
@@ -26,20 +26,6 @@
 // The width of the column that contains the permissions icons.
 const int kPermissionIconColumnWidth = 20;
 
-ContentSetting CommandIdToContentSetting(int command_id) {
-  switch (command_id) {
-    case PermissionMenuModel::COMMAND_SET_TO_DEFAULT:
-      return CONTENT_SETTING_DEFAULT;
-    case PermissionMenuModel::COMMAND_SET_TO_ALLOW:
-      return CONTENT_SETTING_ALLOW;
-    case PermissionMenuModel::COMMAND_SET_TO_BLOCK:
-      return CONTENT_SETTING_BLOCK;
-    default:
-      NOTREACHED();
-      return CONTENT_SETTING_DEFAULT;
-  }
-}
-
 }  // namespace
 
 namespace internal {
@@ -149,15 +135,8 @@
 
 PermissionSelectorView::PermissionSelectorView(
     const GURL& url,
-    ContentSettingsType type,
-    ContentSetting default_setting,
-    ContentSetting current_setting,
-    content_settings::SettingSource source)
-    : icon_(NULL),
-      menu_button_(NULL),
-      type_(type),
-      default_setting_(default_setting),
-      current_setting_(current_setting) {
+    const WebsiteSettingsUI::PermissionInfo& permission)
+    : icon_(NULL), menu_button_(NULL) {
   views::GridLayout* layout = new views::GridLayout(this);
   SetLayoutManager(layout);
   const int column_set_id = 0;
@@ -185,10 +164,7 @@
   layout->StartRow(1, column_set_id);
   // Create the permission icon.
   icon_ = new views::ImageView();
-  ContentSetting setting = current_setting;
-  if (setting == CONTENT_SETTING_DEFAULT)
-    setting = default_setting;
-  const gfx::Image& image = WebsiteSettingsUI::GetPermissionIcon(type, setting);
+  const gfx::Image& image = WebsiteSettingsUI::GetPermissionIcon(permission);
   icon_->SetImage(image.ToImageSkia());
   layout->AddView(icon_,
                   1,
@@ -196,29 +172,32 @@
                   views::GridLayout::CENTER,
                   views::GridLayout::CENTER);
   // Create the label that displays the permission type.
-  views::Label* label = new views::Label(
-      l10n_util::GetStringFUTF16(
-          IDS_WEBSITE_SETTINGS_PERMISSION_TYPE,
-          WebsiteSettingsUI::PermissionTypeToUIString(type)));
+  views::Label* label = new views::Label(l10n_util::GetStringFUTF16(
+      IDS_WEBSITE_SETTINGS_PERMISSION_TYPE,
+      WebsiteSettingsUI::PermissionTypeToUIString(permission.type)));
   layout->AddView(label,
                   1,
                   1,
                   views::GridLayout::LEADING,
                   views::GridLayout::CENTER);
+  // Create the menu model.
+  menu_model_.reset(new PermissionMenuModel(
+      url,
+      permission,
+      base::Bind(&PermissionSelectorView::PermissionChanged,
+                 base::Unretained(this))));
   // Create the permission menu button.
-  menu_button_model_.reset(new PermissionMenuModel(
-      this, url, type, default_setting, current_setting));
-  bool button_enabled = source == content_settings::SETTING_SOURCE_USER;
+  bool button_enabled =
+      permission.source == content_settings::SETTING_SOURCE_USER;
   menu_button_ = new internal::PermissionMenuButton(
-      WebsiteSettingsUI::PermissionActionToUIString(current_setting,
-                                                    default_setting,
-                                                    source),
-      menu_button_model_.get(),
+      WebsiteSettingsUI::PermissionActionToUIString(
+          permission.setting, permission.default_setting, permission.source),
+      menu_model_.get(),
       button_enabled);
   menu_button_->SetEnabled(button_enabled);
   menu_button_->SetFocusable(button_enabled);
   menu_button_->SetAccessibleName(
-      WebsiteSettingsUI::PermissionTypeToUIString(type));
+      WebsiteSettingsUI::PermissionTypeToUIString(permission.type));
   layout->AddView(menu_button_);
 }
 
@@ -239,28 +218,19 @@
 PermissionSelectorView::~PermissionSelectorView() {
 }
 
-void PermissionSelectorView::ExecuteCommand(int command_id) {
-  current_setting_ = CommandIdToContentSetting(command_id);
-
+void PermissionSelectorView::PermissionChanged(
+    const WebsiteSettingsUI::PermissionInfo& permission) {
   // Change the permission icon to reflect the selected setting.
-  ContentSetting effective_setting = current_setting_;
-  if (effective_setting == CONTENT_SETTING_DEFAULT)
-    effective_setting = default_setting_;
-  const gfx::Image& image = WebsiteSettingsUI::GetPermissionIcon(
-      type_, effective_setting);
+  const gfx::Image& image = WebsiteSettingsUI::GetPermissionIcon(permission);
   icon_->SetImage(image.ToImageSkia());
 
   // Update the menu button text to reflect the new setting.
   menu_button_->SetText(WebsiteSettingsUI::PermissionActionToUIString(
-      current_setting_,
-      default_setting_,
+      permission.setting,
+      permission.default_setting,
       content_settings::SETTING_SOURCE_USER));
 
   FOR_EACH_OBSERVER(PermissionSelectorViewObserver,
                     observer_list_,
-                    OnPermissionChanged(this));
-}
-
-bool PermissionSelectorView::IsCommandIdChecked(int command_id) {
-  return current_setting_ == CommandIdToContentSetting(command_id);
+                    OnPermissionChanged(permission));
 }
diff --git a/chrome/browser/ui/views/website_settings/permission_selector_view.h b/chrome/browser/ui/views/website_settings/permission_selector_view.h
index c670e38..d963307 100644
--- a/chrome/browser/ui/views/website_settings/permission_selector_view.h
+++ b/chrome/browser/ui/views/website_settings/permission_selector_view.h
@@ -12,6 +12,7 @@
 #include "base/strings/string16.h"
 #include "chrome/browser/ui/views/website_settings/permission_selector_view_observer.h"
 #include "chrome/browser/ui/website_settings/permission_menu_model.h"
+#include "chrome/browser/ui/website_settings/website_settings_ui.h"
 #include "chrome/common/content_settings.h"
 #include "chrome/common/content_settings_types.h"
 #include "ui/views/controls/button/menu_button_listener.h"
@@ -28,22 +29,14 @@
 
 // A custom view for selecting a permission setting for the given permission
 // |type|.
-class PermissionSelectorView : public views::View,
-                               public PermissionMenuModel::Delegate {
+class PermissionSelectorView : public views::View {
  public:
   PermissionSelectorView(const GURL& url,
-                         ContentSettingsType type,
-                         ContentSetting default_setting,
-                         ContentSetting current_setting,
-                         content_settings::SettingSource source);
+                         const WebsiteSettingsUI::PermissionInfo& permission);
 
   void AddObserver(PermissionSelectorViewObserver* observer);
 
-  // Returns the selected setting.
-  ContentSetting current_setting() const { return current_setting_; }
-
-  // Returns the permission type.
-  ContentSettingsType type() const { return type_; }
+  void PermissionChanged(const WebsiteSettingsUI::PermissionInfo& permission);
 
  protected:
   // Overridden from views::View.
@@ -52,23 +45,11 @@
  private:
   virtual ~PermissionSelectorView();
 
-  // Overridden from PermissionMenuModel::Delegate.
-  virtual void ExecuteCommand(int command_id) OVERRIDE;
-  virtual bool IsCommandIdChecked(int command_id) OVERRIDE;
+  // Model for the permission's menu.
+  scoped_ptr<PermissionMenuModel> menu_model_;
 
   views::ImageView* icon_;  // Owned by the views hierachy.
   internal::PermissionMenuButton* menu_button_;  // Owned by the views hierachy.
-  scoped_ptr<PermissionMenuModel> menu_button_model_;
-
-  // The site permission (the |ContentSettingsType|) for which the menu model
-  // provides settings.
-  ContentSettingsType type_;
-
-  // The global default setting for the permission |type_|.
-  ContentSetting default_setting_;
-
-  // The currently active setting for the permission |type_|.
-  ContentSetting current_setting_;
 
   ObserverList<PermissionSelectorViewObserver, false> observer_list_;
 
diff --git a/chrome/browser/ui/views/website_settings/permission_selector_view_observer.h b/chrome/browser/ui/views/website_settings/permission_selector_view_observer.h
index 15c5113..cd3612f 100644
--- a/chrome/browser/ui/views/website_settings/permission_selector_view_observer.h
+++ b/chrome/browser/ui/views/website_settings/permission_selector_view_observer.h
@@ -5,12 +5,15 @@
 #ifndef CHROME_BROWSER_UI_VIEWS_WEBSITE_SETTINGS_PERMISSION_SELECTOR_VIEW_OBSERVER_H_
 #define CHROME_BROWSER_UI_VIEWS_WEBSITE_SETTINGS_PERMISSION_SELECTOR_VIEW_OBSERVER_H_
 
+#include "chrome/browser/ui/website_settings/website_settings_ui.h"
+
 class PermissionSelectorView;
 
 class PermissionSelectorViewObserver {
  public:
   // This method is called whenever the permission setting is changed.
-  virtual void OnPermissionChanged(PermissionSelectorView* selector) = 0;
+  virtual void OnPermissionChanged(
+      const WebsiteSettingsUI::PermissionInfo& permission) = 0;
 
  protected:
   virtual ~PermissionSelectorViewObserver() {}
diff --git a/chrome/browser/ui/views/website_settings/permissions_bubble_view.cc b/chrome/browser/ui/views/website_settings/permissions_bubble_view.cc
index ab4ab07..9811704 100644
--- a/chrome/browser/ui/views/website_settings/permissions_bubble_view.cc
+++ b/chrome/browser/ui/views/website_settings/permissions_bubble_view.cc
@@ -47,8 +47,7 @@
 // about any updates to the state of the selection.
 // TODO: refactor PermissionMenuButton to work like this and re-use?
 class PermissionCombobox : public views::MenuButton,
-                           public views::MenuButtonListener,
-                           public PermissionMenuModel::Delegate {
+                           public views::MenuButtonListener {
  public:
   // Get notifications when the selection changes.
   class Listener {
@@ -59,9 +58,7 @@
   PermissionCombobox(Listener* listener,
                      int index,
                      const GURL& url,
-                     ContentSettingsType type,
-                     ContentSetting default_setting,
-                     ContentSetting current_setting);
+                     ContentSetting setting);
   virtual ~PermissionCombobox();
 
   int index() const { return index_; }
@@ -72,35 +69,29 @@
   virtual void OnMenuButtonClicked(View* source,
                                    const gfx::Point& point) OVERRIDE;
 
-  // PermissionMenuModel::Delegate:
-  virtual void ExecuteCommand(int command_id) OVERRIDE;
-  virtual bool IsCommandIdChecked(int command_id) OVERRIDE;
-
+  // Callback when a permission's setting is changed.
+  void PermissionChanged(const WebsiteSettingsUI::PermissionInfo& permission);
 
  private:
   int index_;
   Listener* listener_;
   scoped_ptr<PermissionMenuModel> model_;
-  int current_command_id_;
   scoped_ptr<views::MenuRunner> menu_runner_;
 };
 
-PermissionCombobox::PermissionCombobox(
-    Listener* listener,
-    int index,
-    const GURL& url,
-    ContentSettingsType type,
-    ContentSetting default_setting,
-    ContentSetting current_setting)
+PermissionCombobox::PermissionCombobox(Listener* listener,
+                                       int index,
+                                       const GURL& url,
+                                       ContentSetting setting)
     : MenuButton(NULL, base::string16(), this, true),
       index_(index),
       listener_(listener),
       model_(new PermissionMenuModel(
-          this, url, type, default_setting, current_setting)),
-      current_command_id_(current_setting == CONTENT_SETTING_ALLOW ?
-                          PermissionMenuModel::COMMAND_SET_TO_ALLOW :
-                          PermissionMenuModel::COMMAND_SET_TO_BLOCK) {
-  SetText(model_->GetLabelAt(model_->GetIndexOfCommandId(current_command_id_)));
+          url,
+          setting,
+          base::Bind(&PermissionCombobox::PermissionChanged,
+                     base::Unretained(this)))) {
+  SetText(model_->GetLabelAt(model_->GetIndexOfCommandId(setting)));
   SizeToPreferredSize();
 }
 
@@ -127,17 +118,13 @@
     return;
 }
 
-void PermissionCombobox::ExecuteCommand(int command_id) {
-  current_command_id_ = command_id;
-  SetText(model_->GetLabelAt(model_->GetIndexOfCommandId(current_command_id_)));
+void PermissionCombobox::PermissionChanged(
+    const WebsiteSettingsUI::PermissionInfo& permission) {
+  SetText(model_->GetLabelAt(model_->GetIndexOfCommandId(permission.setting)));
   SizeToPreferredSize();
 
-  listener_->PermissionSelectionChanged(index_,
-        IsCommandIdChecked(PermissionMenuModel::COMMAND_SET_TO_ALLOW));
-}
-
-bool PermissionCombobox::IsCommandIdChecked(int command_id) {
-  return current_command_id_ == command_id;
+  listener_->PermissionSelectionChanged(
+      index_, permission.setting == CONTENT_SETTING_ALLOW);
 }
 
 // A combobox originating on the Allow button allowing for customization
@@ -280,8 +267,6 @@
           this,
           index,
           requests[index]->GetRequestingHostname(),
-          CONTENT_SETTINGS_TYPE_DEFAULT,
-          CONTENT_SETTING_NUM_SETTINGS,
           accept_state[index] ? CONTENT_SETTING_ALLOW : CONTENT_SETTING_BLOCK);
       row_layout->AddView(combobox);
       customize_comboboxes_.push_back(combobox);
diff --git a/chrome/browser/ui/views/website_settings/website_settings_popup_view.cc b/chrome/browser/ui/views/website_settings/website_settings_popup_view.cc
index eb679bd..b9baf5c 100644
--- a/chrome/browser/ui/views/website_settings/website_settings_popup_view.cc
+++ b/chrome/browser/ui/views/website_settings/website_settings_popup_view.cc
@@ -369,10 +369,8 @@
 }
 
 void WebsiteSettingsPopupView::OnPermissionChanged(
-    PermissionSelectorView* permission_selector) {
-  DCHECK(permission_selector);
-  presenter_->OnSitePermissionChanged(permission_selector->type(),
-                                      permission_selector->current_setting());
+    const WebsiteSettingsUI::PermissionInfo& permission) {
+  presenter_->OnSitePermissionChanged(permission.type, permission.setting);
 }
 
 void WebsiteSettingsPopupView::OnWidgetDestroying(views::Widget* widget) {
@@ -459,9 +457,11 @@
     if (i != cookie_info_list.begin())
       layout->AddPaddingRow(1, kSiteDataSectionRowSpacing);
     layout->StartRow(1, site_data_content_column);
+    WebsiteSettingsUI::PermissionInfo info;
+    info.type = CONTENT_SETTINGS_TYPE_COOKIES;
+    info.setting = CONTENT_SETTING_ALLOW;
     views::ImageView* icon = new views::ImageView();
-    const gfx::Image& image = WebsiteSettingsUI::GetPermissionIcon(
-        CONTENT_SETTINGS_TYPE_COOKIES, CONTENT_SETTING_ALLOW);
+    const gfx::Image& image = WebsiteSettingsUI::GetPermissionIcon(info);
     icon->SetImage(image.ToImageSkia());
     layout->AddView(icon, 1, 1, views::GridLayout::CENTER,
                     views::GridLayout::CENTER);
@@ -497,10 +497,7 @@
     layout->StartRow(1, content_column);
     PermissionSelectorView* selector = new PermissionSelectorView(
         web_contents_ ? web_contents_->GetURL() : GURL::EmptyGURL(),
-        permission->type,
-        permission->default_setting,
-        permission->setting,
-        permission->source);
+        *permission);
     selector->AddObserver(this);
     layout->AddView(selector,
                     1,
diff --git a/chrome/browser/ui/views/website_settings/website_settings_popup_view.h b/chrome/browser/ui/views/website_settings/website_settings_popup_view.h
index 894e297..9b10fa8 100644
--- a/chrome/browser/ui/views/website_settings/website_settings_popup_view.h
+++ b/chrome/browser/ui/views/website_settings/website_settings_popup_view.h
@@ -65,7 +65,7 @@
 
   // PermissionSelectorViewObserver implementation.
   virtual void OnPermissionChanged(
-      PermissionSelectorView* selector) OVERRIDE;
+      const WebsiteSettingsUI::PermissionInfo& permission) OVERRIDE;
 
   // views::BubbleDelegateView implementation.
   virtual void OnWidgetDestroying(views::Widget* widget) OVERRIDE;
diff --git a/chrome/browser/ui/website_settings/mock_permission_bubble_request.cc b/chrome/browser/ui/website_settings/mock_permission_bubble_request.cc
index ae38582..300a697 100644
--- a/chrome/browser/ui/website_settings/mock_permission_bubble_request.cc
+++ b/chrome/browser/ui/website_settings/mock_permission_bubble_request.cc
@@ -6,6 +6,7 @@
 
 #include "base/strings/string16.h"
 #include "base/strings/utf_string_conversions.h"
+#include "grit/theme_resources.h"
 
 MockPermissionBubbleRequest::MockPermissionBubbleRequest()
     : granted_(false), cancelled_(false), finished_(false) {
@@ -34,7 +35,8 @@
 MockPermissionBubbleRequest::~MockPermissionBubbleRequest() {}
 
 int MockPermissionBubbleRequest::GetIconID() const {
-  return 0;
+  // Use a valid icon ID to support UI tests.
+  return IDR_INFOBAR_MEDIA_STREAM_CAMERA;
 }
 
 base::string16 MockPermissionBubbleRequest::GetMessageText() const {
diff --git a/chrome/browser/ui/website_settings/permission_bubble_manager.cc b/chrome/browser/ui/website_settings/permission_bubble_manager.cc
index 650328a..8b3a88e 100644
--- a/chrome/browser/ui/website_settings/permission_bubble_manager.cc
+++ b/chrome/browser/ui/website_settings/permission_bubble_manager.cc
@@ -24,8 +24,6 @@
       switches::kEnablePermissionsBubbles);
 }
 
-
-
 PermissionBubbleManager::PermissionBubbleManager(
     content::WebContents* web_contents)
   : content::WebContentsObserver(web_contents),
@@ -56,6 +54,14 @@
 }
 
 void PermissionBubbleManager::AddRequest(PermissionBubbleRequest* request) {
+  // TODO(gbillock): is there a race between an early request on a
+  // newly-navigated page and the to-be-cleaned-up requests on the previous
+  // page? We should maybe listen to DidStartNavigationToPendingEntry (and
+  // any other renderer-side nav initiations?). Double-check this for
+  // correct behavior on interstitials -- we probably want to basically queue
+  // any request for which GetVisibleURL != GetLastCommittedURL.
+  request_url_ = web_contents()->GetLastCommittedURL();
+
   // Don't re-add an existing request or one with a duplicate text request.
   std::vector<PermissionBubbleRequest*>::iterator requests_iter;
   for (requests_iter = requests_.begin();
@@ -135,10 +141,21 @@
     timer_->Reset();
 }
 
+void PermissionBubbleManager::NavigationEntryCommitted(
+    const content::LoadCommittedDetails& details) {
+  if (!request_url_.is_empty() &&
+      request_url_ != web_contents()->GetLastCommittedURL()) {
+    // Kill off existing bubble and cancel any pending requests.
+    CancelPendingQueue();
+    FinalizeBubble();
+  }
+}
+
 void PermissionBubbleManager::WebContentsDestroyed(
     content::WebContents* web_contents) {
   // If the web contents has been destroyed, do not attempt to notify
   // the requests of any changes - simply close the bubble.
+  CancelPendingQueue();
   FinalizeBubble();
 
   // The WebContents is going away; be aggressively paranoid and delete
@@ -223,6 +240,17 @@
     // TODO(leng):  Explore other options of showing the next bubble.  The
     // advantage of this is that it uses the same code path as the first bubble.
     timer_->Reset();
+  } else {
+    request_url_ = GURL();
+  }
+}
+
+void PermissionBubbleManager::CancelPendingQueue() {
+  std::vector<PermissionBubbleRequest*>::iterator requests_iter;
+  for (requests_iter = queued_requests_.begin();
+       requests_iter != queued_requests_.end();
+       requests_iter++) {
+    (*requests_iter)->RequestFinished();
   }
 }
 
diff --git a/chrome/browser/ui/website_settings/permission_bubble_manager.h b/chrome/browser/ui/website_settings/permission_bubble_manager.h
index d784541..494cf7b 100644
--- a/chrome/browser/ui/website_settings/permission_bubble_manager.h
+++ b/chrome/browser/ui/website_settings/permission_bubble_manager.h
@@ -76,6 +76,10 @@
       const GURL& validated_url,
       bool is_main_frame,
       content::RenderViewHost* render_view_host) OVERRIDE;
+  // If a page on which permissions requests are pending is navigated,
+  // they will be finalized as if canceled by the user.
+  virtual void NavigationEntryCommitted(
+      const content::LoadCommittedDetails& details) OVERRIDE;
   virtual void WebContentsDestroyed(
       content::WebContents* web_contents) OVERRIDE;
 
@@ -92,6 +96,11 @@
   // Finalize the pending permissions request.
   void FinalizeBubble();
 
+  // Cancel any pending requests. This is called if the WebContents
+  // on which permissions calls are pending is destroyed or navigated away
+  // from the requesting page.
+  void CancelPendingQueue();
+
   // Whether or not we are showing the bubble in this tab.
   bool bubble_showing_;
 
@@ -100,6 +109,7 @@
 
   std::vector<PermissionBubbleRequest*> requests_;
   std::vector<PermissionBubbleRequest*> queued_requests_;
+  GURL request_url_;
   std::vector<bool> accept_states_;
   bool customization_mode_;
 
diff --git a/chrome/browser/ui/website_settings/permission_bubble_manager_unittest.cc b/chrome/browser/ui/website_settings/permission_bubble_manager_unittest.cc
index d2933fd..bda0202 100644
--- a/chrome/browser/ui/website_settings/permission_bubble_manager_unittest.cc
+++ b/chrome/browser/ui/website_settings/permission_bubble_manager_unittest.cc
@@ -10,7 +10,7 @@
 #include "chrome/browser/ui/website_settings/permission_bubble_request.h"
 #include "chrome/browser/ui/website_settings/permission_bubble_view.h"
 #include "chrome/common/chrome_switches.h"
-#include "content/public/test/test_browser_thread.h"
+#include "chrome/test/base/chrome_render_view_host_test_harness.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace {
@@ -57,13 +57,25 @@
 
 }  // namespace
 
-class PermissionBubbleManagerTest : public testing::Test {
+class PermissionBubbleManagerTest : public ChromeRenderViewHostTestHarness {
  public:
-  PermissionBubbleManagerTest();
+  PermissionBubbleManagerTest()
+      : ChromeRenderViewHostTestHarness(),
+        request1_("test1"),
+        request2_("test2") {}
   virtual ~PermissionBubbleManagerTest() {}
 
-  virtual void TearDown() {
+  virtual void SetUp() OVERRIDE {
+    ChromeRenderViewHostTestHarness::SetUp();
+    SetContents(CreateTestWebContents());
+
+    manager_.reset(new PermissionBubbleManager(web_contents()));
+    manager_->SetCoalesceIntervalForTesting(0);
+  }
+
+  virtual void TearDown() OVERRIDE {
     manager_.reset();
+    ChromeRenderViewHostTestHarness::TearDown();
   }
 
   void ToggleAccept(int index, bool value) {
@@ -78,24 +90,18 @@
     base::MessageLoop::current()->RunUntilIdle();
   }
 
+  virtual void NavigationEntryCommitted(
+      const content::LoadCommittedDetails& details) {
+    manager_->NavigationEntryCommitted(details);
+  }
+
  protected:
   MockPermissionBubbleRequest request1_;
   MockPermissionBubbleRequest request2_;
   MockView view_;
   scoped_ptr<PermissionBubbleManager> manager_;
-
-  base::MessageLoop message_loop_;
-  content::TestBrowserThread ui_thread_;
 };
 
-PermissionBubbleManagerTest::PermissionBubbleManagerTest()
-    : request1_("test1"),
-      request2_("test2"),
-      manager_(new PermissionBubbleManager(NULL)),
-      ui_thread_(content::BrowserThread::UI, &message_loop_) {
-  manager_->SetCoalesceIntervalForTesting(0);
-}
-
 TEST_F(PermissionBubbleManagerTest, TestFlag) {
   EXPECT_FALSE(PermissionBubbleManager::Enabled());
   CommandLine::ForCurrentProcess()->AppendSwitch(
@@ -308,3 +314,20 @@
   EXPECT_TRUE(dupe_request2.finished());
   EXPECT_FALSE(request2_.finished());
 }
+
+TEST_F(PermissionBubbleManagerTest, ForgetRequestsOnPageNavigation) {
+  NavigateAndCommit(GURL("http://www.google.com/"));
+  manager_->SetView(&view_);
+  manager_->AddRequest(&request1_);
+  WaitForCoalescing();
+  manager_->AddRequest(&request2_);
+
+  EXPECT_TRUE(view_.shown_);
+  ASSERT_EQ(1u, view_.permission_requests_.size());
+
+  NavigateAndCommit(GURL("http://www2.google.com/"));
+
+  EXPECT_FALSE(view_.shown_);
+  EXPECT_TRUE(request1_.finished());
+  EXPECT_TRUE(request2_.finished());
+}
diff --git a/chrome/browser/ui/website_settings/permission_bubble_request.h b/chrome/browser/ui/website_settings/permission_bubble_request.h
index 8093515..49d71de 100644
--- a/chrome/browser/ui/website_settings/permission_bubble_request.h
+++ b/chrome/browser/ui/website_settings/permission_bubble_request.h
@@ -12,7 +12,7 @@
 // implement. A class of this type is registered with the permission bubble
 // manager to receive updates about the result of the permissions request
 // from the bubble. It should live until it is unregistered or until
-// PermissionsBubbleDestroyed is called.
+// RequestFinished is called.
 // Note that no particular guarantees are made about what exact UI surface
 // is presented to the user. The delegate may be coalesced with other bubble
 // requests, or depending on the situation, not shown at all.
diff --git a/chrome/browser/ui/website_settings/permission_menu_model.cc b/chrome/browser/ui/website_settings/permission_menu_model.cc
index 3655c27..3532fe9 100644
--- a/chrome/browser/ui/website_settings/permission_menu_model.cc
+++ b/chrome/browser/ui/website_settings/permission_menu_model.cc
@@ -8,15 +8,13 @@
 #include "ui/base/l10n/l10n_util.h"
 
 PermissionMenuModel::PermissionMenuModel(
-    Delegate* delegate,
     const GURL& url,
-    ContentSettingsType type,
-    ContentSetting default_setting,
-    ContentSetting current_setting)
-    : ui::SimpleMenuModel(this),
-      delegate_(delegate) {
+    const WebsiteSettingsUI::PermissionInfo& info,
+    const ChangeCallback& callback)
+    : ui::SimpleMenuModel(this), permission_(info), callback_(callback) {
+  DCHECK(!callback_.is_null());
   base::string16 label;
-  switch (default_setting) {
+  switch (permission_.default_setting) {
     case CONTENT_SETTING_ALLOW:
       label = l10n_util::GetStringUTF16(
           IDS_WEBSITE_SETTINGS_MENU_ITEM_DEFAULT_ALLOW);
@@ -30,34 +28,45 @@
           IDS_WEBSITE_SETTINGS_MENU_ITEM_DEFAULT_ASK);
       break;
     case CONTENT_SETTING_NUM_SETTINGS:
-      // Do not add a default label if the default_setting is set invalid.
-      break;
+      NOTREACHED();
     default:
       break;
   }
-  if (!label.empty()) {
-    AddCheckItem(COMMAND_SET_TO_DEFAULT, label);
-  }
+  AddCheckItem(CONTENT_SETTING_DEFAULT, label);
 
-  // Media only support COMMAND_SET_TO_ALLOW for https.
-  if (type != CONTENT_SETTINGS_TYPE_MEDIASTREAM ||
+  // Media only support CONTENTE_SETTTING_ALLOW for https.
+  if (permission_.type != CONTENT_SETTINGS_TYPE_MEDIASTREAM ||
       url.SchemeIsSecure()) {
     label = l10n_util::GetStringUTF16(
         IDS_WEBSITE_SETTINGS_MENU_ITEM_ALLOW);
-    AddCheckItem(COMMAND_SET_TO_ALLOW, label);
+    AddCheckItem(CONTENT_SETTING_ALLOW, label);
   }
 
-  if (type != CONTENT_SETTINGS_TYPE_FULLSCREEN) {
+  if (permission_.type != CONTENT_SETTINGS_TYPE_FULLSCREEN) {
     label = l10n_util::GetStringUTF16(
         IDS_WEBSITE_SETTINGS_MENU_ITEM_BLOCK);
-    AddCheckItem(COMMAND_SET_TO_BLOCK, label);
+    AddCheckItem(CONTENT_SETTING_BLOCK, label);
   }
 }
 
+PermissionMenuModel::PermissionMenuModel(const GURL& url,
+                                         ContentSetting setting,
+                                         const ChangeCallback& callback)
+    : ui::SimpleMenuModel(this), callback_(callback) {
+  DCHECK(setting == CONTENT_SETTING_ALLOW || setting == CONTENT_SETTING_BLOCK);
+  permission_.type = CONTENT_SETTINGS_TYPE_DEFAULT;
+  permission_.setting = setting;
+  permission_.default_setting = CONTENT_SETTING_NUM_SETTINGS;
+  AddCheckItem(CONTENT_SETTING_ALLOW,
+               l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_MENU_ITEM_ALLOW));
+  AddCheckItem(CONTENT_SETTING_BLOCK,
+               l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_MENU_ITEM_BLOCK));
+}
+
+PermissionMenuModel::~PermissionMenuModel() {}
+
 bool PermissionMenuModel::IsCommandIdChecked(int command_id) const {
-  if (delegate_)
-    return delegate_->IsCommandIdChecked(command_id);
-  return false;
+  return permission_.setting == command_id;
 }
 
 bool PermissionMenuModel::IsCommandIdEnabled(int command_id) const {
@@ -72,6 +81,6 @@
 }
 
 void PermissionMenuModel::ExecuteCommand(int command_id, int event_flags) {
-  if (delegate_)
-    delegate_->ExecuteCommand(command_id);
+  permission_.setting = static_cast<ContentSetting>(command_id);
+  callback_.Run(permission_);
 }
diff --git a/chrome/browser/ui/website_settings/permission_menu_model.h b/chrome/browser/ui/website_settings/permission_menu_model.h
index 51a06fa..0754f71 100644
--- a/chrome/browser/ui/website_settings/permission_menu_model.h
+++ b/chrome/browser/ui/website_settings/permission_menu_model.h
@@ -5,6 +5,7 @@
 #ifndef CHROME_BROWSER_UI_WEBSITE_SETTINGS_PERMISSION_MENU_MODEL_H_
 #define CHROME_BROWSER_UI_WEBSITE_SETTINGS_PERMISSION_MENU_MODEL_H_
 
+#include "chrome/browser/ui/website_settings/website_settings_ui.h"
 #include "chrome/common/content_settings.h"
 #include "chrome/common/content_settings_types.h"
 #include "ui/base/models/simple_menu_model.h"
@@ -13,29 +14,21 @@
 class PermissionMenuModel : public ui::SimpleMenuModel,
                             public ui::SimpleMenuModel::Delegate {
  public:
-  enum CommandID {
-    COMMAND_SET_TO_DEFAULT,
-    COMMAND_SET_TO_ALLOW,
-    COMMAND_SET_TO_BLOCK,
-  };
+  typedef base::Callback<void(const WebsiteSettingsUI::PermissionInfo&)>
+      ChangeCallback;
 
-  class Delegate {
-   public:
-    // Executes the command with the given |command_id|.
-    virtual void ExecuteCommand(int command_id) = 0;
-    // Returns true if the command with the given |command_id| should be
-    // checked.
-    virtual bool IsCommandIdChecked(int command_id) = 0;
-  };
-
-  // Create a new menu model for permission settings. To restrict to
-  // simple allow/block settings, set the type to CONTENT_SETTINGS_TYPE_DEFAULT
-  // and the default setting to CONTENT_SETTING_NUM_SETTINGS.
-  PermissionMenuModel(Delegate* delegate,
-                      const GURL& url,
-                      ContentSettingsType type,
-                      ContentSetting default_setting,
-                      ContentSetting current_setting);
+  // Create a new menu model for permission settings.
+  PermissionMenuModel(const GURL& url,
+                      const WebsiteSettingsUI::PermissionInfo& info,
+                      const ChangeCallback& callback);
+  // Creates a special-case menu model that only has the allow and block
+  // options.  It does not track a permission type.  |setting| is the
+  // initial selected option.  It must be either CONTENT_SETTING_ALLOW or
+  // CONTENT_SETTING_BLOCK.
+  PermissionMenuModel(const GURL& url,
+                      ContentSetting setting,
+                      const ChangeCallback& callback);
+  virtual ~PermissionMenuModel();
 
   // Overridden from ui::SimpleMenuModel::Delegate:
   virtual bool IsCommandIdChecked(int command_id) const OVERRIDE;
@@ -46,8 +39,11 @@
   virtual void ExecuteCommand(int command_id, int event_flags) OVERRIDE;
 
  private:
-  // The delegate of the |PermissionMenuModel|. |delegate_| can be NULL.
-  Delegate* delegate_;
+  // The permission info represented by the menu model.
+  WebsiteSettingsUI::PermissionInfo permission_;
+
+  // Callback to be called when the permission's setting is changed.
+  ChangeCallback callback_;
 
   DISALLOW_COPY_AND_ASSIGN(PermissionMenuModel);
 };
diff --git a/chrome/browser/ui/website_settings/permission_menu_model_unittest.cc b/chrome/browser/ui/website_settings/permission_menu_model_unittest.cc
index 3ca09a0..64c6873 100644
--- a/chrome/browser/ui/website_settings/permission_menu_model_unittest.cc
+++ b/chrome/browser/ui/website_settings/permission_menu_model_unittest.cc
@@ -10,15 +10,15 @@
 
 namespace {
 
-class TestDelegate : public PermissionMenuModel::Delegate {
+class TestCallback {
  public:
-  TestDelegate() : current_(-1) {}
+  TestCallback() : current_(-1) {}
 
-  virtual void ExecuteCommand(int command_id) OVERRIDE {
-    current_ = command_id;
+  PermissionMenuModel::ChangeCallback callback() {
+    return base::Bind(&TestCallback::PermissionChanged, base::Unretained(this));
   }
-  virtual bool IsCommandIdChecked(int command_id) OVERRIDE {
-    return (current_ == command_id);
+  void PermissionChanged(const WebsiteSettingsUI::PermissionInfo& permission) {
+    current_ = permission.setting;
   }
 
   int current_;
@@ -27,31 +27,31 @@
 }  // namespace
 
 TEST(PermissionMenuModelTest, TestDefault) {
-  TestDelegate delegate;
-  PermissionMenuModel model(&delegate,
-                            GURL("http://www.google.com"),
-                            CONTENT_SETTINGS_TYPE_COOKIES,
-                            CONTENT_SETTING_ALLOW,
-                            CONTENT_SETTING_ALLOW);
+  TestCallback callback;
+  WebsiteSettingsUI::PermissionInfo permission;
+  permission.type = CONTENT_SETTINGS_TYPE_COOKIES;
+  permission.setting = CONTENT_SETTING_ALLOW;
+  permission.default_setting = CONTENT_SETTING_ALLOW;
+  PermissionMenuModel model(
+      GURL("http://www.google.com"), permission, callback.callback());
   EXPECT_EQ(3, model.GetItemCount());
 }
 
 TEST(PermissionMenuModelTest, TestDefaultMediaHttp) {
-  TestDelegate delegate;
-  PermissionMenuModel model(&delegate,
-                            GURL("http://www.google.com"),
-                            CONTENT_SETTINGS_TYPE_MEDIASTREAM,
-                            CONTENT_SETTING_ALLOW,
-                            CONTENT_SETTING_ALLOW);
+  TestCallback callback;
+  WebsiteSettingsUI::PermissionInfo permission;
+  permission.type = CONTENT_SETTINGS_TYPE_MEDIASTREAM;
+  permission.setting = CONTENT_SETTING_ALLOW;
+  permission.default_setting = CONTENT_SETTING_ALLOW;
+  PermissionMenuModel model(
+      GURL("http://www.google.com"), permission, callback.callback());
   EXPECT_EQ(2, model.GetItemCount());
 }
 
 TEST(PermissionMenuModelTest, TestAllowBlock) {
-  TestDelegate delegate;
-  PermissionMenuModel model(&delegate,
-                            GURL("http://www.google.com"),
-                            CONTENT_SETTINGS_TYPE_DEFAULT,
-                            CONTENT_SETTING_NUM_SETTINGS,
-                            CONTENT_SETTING_ALLOW);
+  TestCallback callback;
+  PermissionMenuModel model(GURL("http://www.google.com"),
+                            CONTENT_SETTING_ALLOW,
+                            callback.callback());
   EXPECT_EQ(2, model.GetItemCount());
 }
diff --git a/chrome/browser/ui/website_settings/website_settings_infobar_delegate.cc b/chrome/browser/ui/website_settings/website_settings_infobar_delegate.cc
index bd1fee3..0440384 100644
--- a/chrome/browser/ui/website_settings/website_settings_infobar_delegate.cc
+++ b/chrome/browser/ui/website_settings/website_settings_infobar_delegate.cc
@@ -6,8 +6,8 @@
 
 #include "base/logging.h"
 #include "base/strings/utf_string_conversions.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/web_contents.h"
 #include "grit/generated_resources.h"
 #include "grit/theme_resources.h"
@@ -32,7 +32,8 @@
   return IDR_INFOBAR_ALT_NAV_URL;
 }
 
-InfoBarDelegate::Type WebsiteSettingsInfoBarDelegate::GetInfoBarType() const {
+infobars::InfoBarDelegate::Type WebsiteSettingsInfoBarDelegate::GetInfoBarType()
+    const {
   return PAGE_ACTION_TYPE;
 }
 
diff --git a/chrome/browser/ui/website_settings/website_settings_ui.cc b/chrome/browser/ui/website_settings/website_settings_ui.cc
index a1e5fef..ad5c738 100644
--- a/chrome/browser/ui/website_settings/website_settings_ui.cc
+++ b/chrome/browser/ui/website_settings/website_settings_ui.cc
@@ -242,10 +242,12 @@
 
 // static
 const gfx::Image& WebsiteSettingsUI::GetPermissionIcon(
-    ContentSettingsType type,
-    ContentSetting setting) {
+    const PermissionInfo& info) {
+  ContentSetting setting = info.setting;
+  if (setting == CONTENT_SETTING_DEFAULT)
+    setting = info.default_setting;
   ResourceBundle& rb = ResourceBundle::GetSharedInstance();
-  return rb.GetNativeImageNamed(GetPermissionIconID(type, setting));
+  return rb.GetNativeImageNamed(GetPermissionIconID(info.type, setting));
 }
 
 // static
diff --git a/chrome/browser/ui/website_settings/website_settings_ui.h b/chrome/browser/ui/website_settings/website_settings_ui.h
index 2c45c5e..b9e075c 100644
--- a/chrome/browser/ui/website_settings/website_settings_ui.h
+++ b/chrome/browser/ui/website_settings/website_settings_ui.h
@@ -60,7 +60,6 @@
   // the current website.
   struct PermissionInfo {
     PermissionInfo();
-
     // Site permission |type|.
     ContentSettingsType type;
     // The current value for the permission |type| (e.g. ALLOW or BLOCK).
@@ -123,9 +122,10 @@
   static int GetPermissionIconID(ContentSettingsType type,
                                  ContentSetting setting);
 
-  // Returns the icon for the given permission |type| and |setting|.
-  static const gfx::Image& GetPermissionIcon(ContentSettingsType type,
-                                             ContentSetting setting);
+  // Returns the icon for the given permissionInfo |info|.  If |info|'s current
+  // setting is CONTENT_SETTING_DEFAULT, it will return the icon for |info|'s
+  // default setting.
+  static const gfx::Image& GetPermissionIcon(const PermissionInfo& info);
 
   // Returns the identity icon ID for the given identity |status|.
   static int GetIdentityIconID(WebsiteSettings::SiteIdentityStatus status);
diff --git a/chrome/browser/ui/website_settings/website_settings_unittest.cc b/chrome/browser/ui/website_settings/website_settings_unittest.cc
index fd1c622..45877f6 100644
--- a/chrome/browser/ui/website_settings/website_settings_unittest.cc
+++ b/chrome/browser/ui/website_settings/website_settings_unittest.cc
@@ -12,13 +12,13 @@
 #include "chrome/browser/content_settings/content_settings_utils.h"
 #include "chrome/browser/content_settings/host_content_settings_map.h"
 #include "chrome/browser/content_settings/tab_specific_content_settings.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/ui/website_settings/website_settings_ui.h"
 #include "chrome/common/content_settings.h"
 #include "chrome/common/content_settings_types.h"
 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
 #include "chrome/test/base/testing_profile.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/cert_store.h"
 #include "content/public/common/ssl_status.h"
 #include "net/cert/cert_status_flags.h"
diff --git a/chrome/browser/ui/webui/app_list/start_page_handler.cc b/chrome/browser/ui/webui/app_list/start_page_handler.cc
index 4ee69f6..8987645 100644
--- a/chrome/browser/ui/webui/app_list/start_page_handler.cc
+++ b/chrome/browser/ui/webui/app_list/start_page_handler.cc
@@ -93,7 +93,7 @@
   DCHECK_EQ(Profile::FromWebUI(web_ui()),
             content::Source<Profile>(source).ptr());
   switch (type) {
-    case chrome::NOTIFICATION_EXTENSION_LOADED: {
+    case chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED: {
       extensions::Extension* extension =
           content::Details<extensions::Extension>(details).ptr();
       if (extension->id() == extension_misc::kHotwordExtensionId)
@@ -160,7 +160,8 @@
         prefs::kHotwordSearchEnabled,
         base::Bind(&StartPageHandler::OnHotwordEnabledChanged,
                    base::Unretained(this)));
-    registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
+    registrar_.Add(this,
+                   chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
                    content::Source<Profile>(profile));
     registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
                    content::Source<Profile>(profile));
diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
index d3520ac..27b3e2f 100644
--- a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
+++ b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
@@ -57,12 +57,12 @@
 #include "chrome/common/chrome_switches.h"
 #include "chrome/common/extensions/extension_constants.h"
 #include "chrome/common/pref_names.h"
-#include "chrome/common/profile_management_switches.h"
 #include "chrome/common/url_constants.h"
 #include "components/dom_distiller/core/dom_distiller_constants.h"
 #include "components/dom_distiller/core/dom_distiller_service.h"
 #include "components/dom_distiller/webui/dom_distiller_ui.h"
 #include "components/password_manager/core/common/password_manager_switches.h"
+#include "components/signin/core/common/profile_management_switches.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/browser/web_ui.h"
 #include "content/public/common/content_client.h"
@@ -520,7 +520,7 @@
 
 void RunFaviconCallbackAsync(
     const FaviconService::FaviconResultsCallback& callback,
-    const std::vector<chrome::FaviconBitmapResult>* results) {
+    const std::vector<favicon_base::FaviconBitmapResult>* results) {
   base::MessageLoopProxy::current()->PostTask(
       FROM_HERE,
       base::Bind(&FaviconService::FaviconResultsCallbackRunner,
@@ -579,23 +579,23 @@
 #if defined(ENABLE_EXTENSIONS)
     ExtensionWebUI::GetFaviconForURL(profile, url, callback);
 #else
-    RunFaviconCallbackAsync(callback,
-                            new std::vector<chrome::FaviconBitmapResult>());
+    RunFaviconCallbackAsync(
+        callback, new std::vector<favicon_base::FaviconBitmapResult>());
 #endif
     return;
   }
 
-  std::vector<chrome::FaviconBitmapResult>* favicon_bitmap_results =
-      new std::vector<chrome::FaviconBitmapResult>();
+  std::vector<favicon_base::FaviconBitmapResult>* favicon_bitmap_results =
+      new std::vector<favicon_base::FaviconBitmapResult>();
 
   for (size_t i = 0; i < scale_factors.size(); ++i) {
     scoped_refptr<base::RefCountedMemory> bitmap(GetFaviconResourceBytes(
           url, scale_factors[i]));
     if (bitmap.get() && bitmap->size()) {
-      chrome::FaviconBitmapResult bitmap_result;
+      favicon_base::FaviconBitmapResult bitmap_result;
       bitmap_result.bitmap_data = bitmap;
       // Leave |bitmap_result|'s icon URL as the default of GURL().
-      bitmap_result.icon_type = chrome::FAVICON;
+      bitmap_result.icon_type = favicon_base::FAVICON;
       favicon_bitmap_results->push_back(bitmap_result);
 
       // Assume that |bitmap| is |gfx::kFaviconSize| x |gfx::kFaviconSize|
diff --git a/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc b/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc
index bf71e59..a4d815b 100644
--- a/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc
@@ -10,6 +10,7 @@
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/chromeos/accessibility/accessibility_manager.h"
 #include "chrome/browser/chromeos/accessibility/magnification_manager.h"
+#include "chrome/browser/chromeos/login/login_display_host_impl.h"
 #include "chrome/browser/chromeos/login/wizard_controller.h"
 #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
 #include "chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos.h"
@@ -36,6 +37,7 @@
 const char kJsApiScreenStateInitialize[] = "screenStateInitialize";
 const char kJsApiSkipUpdateEnrollAfterEula[] = "skipUpdateEnrollAfterEula";
 const char kJsApiScreenAssetsLoaded[] = "screenAssetsLoaded";
+const char kJsApiHeaderBarVisible[] = "headerBarVisible";
 
 }  // namespace
 
@@ -128,6 +130,9 @@
                  &CoreOobeHandler::HandleSkipToLoginForTesting);
   AddCallback("launchHelpApp",
               &CoreOobeHandler::HandleLaunchHelpApp);
+  AddCallback("toggleResetScreen", &CoreOobeHandler::HandleToggleResetScreen);
+  AddCallback(kJsApiHeaderBarVisible,
+              &CoreOobeHandler::HandleHeaderBarVisible);
 }
 
 void CoreOobeHandler::ShowSignInError(
@@ -144,6 +149,23 @@
   CallJS("showTpmError");
 }
 
+void CoreOobeHandler::ShowDeviceResetScreen() {
+  policy::BrowserPolicyConnectorChromeOS* connector =
+      g_browser_process->platform_part()->browser_policy_connector_chromeos();
+  if (!connector->IsEnterpriseManaged()) {
+    // Don't recreate WizardController if it already exists.
+    WizardController* wizard_controller =
+        WizardController::default_controller();
+    if (wizard_controller && !wizard_controller->login_screen_started()) {
+      wizard_controller->AdvanceToScreen(WizardController::kResetScreenName);
+    } else {
+      scoped_ptr<base::DictionaryValue> params(new base::DictionaryValue());
+      LoginDisplayHostImpl::default_host()->StartWizard(
+          WizardController::kResetScreenName, params.Pass());
+    }
+  }
+}
+
 void CoreOobeHandler::ShowSignInUI(const std::string& email) {
   CallJS("showSigninUI", email);
 }
@@ -259,6 +281,8 @@
       WizardController::default_controller()->SkipToLoginForTesting(context);
 }
 
+void CoreOobeHandler::HandleToggleResetScreen() { ShowDeviceResetScreen(); }
+
 void CoreOobeHandler::ShowOobeUI(bool show) {
   if (show == show_oobe_ui_)
     return;
@@ -336,4 +360,8 @@
       static_cast<HelpAppLauncher::HelpTopic>(help_topic_id));
 }
 
+void CoreOobeHandler::HandleHeaderBarVisible() {
+  LoginDisplayHostImpl::default_host()->SetStatusAreaVisible(true);
+}
+
 }  // namespace chromeos
diff --git a/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.h b/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.h
index 9d55f55..c4ba5ab 100644
--- a/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.h
+++ b/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.h
@@ -77,6 +77,7 @@
   virtual void ClearErrors() OVERRIDE;
   virtual void ReloadContent(const base::DictionaryValue& dictionary) OVERRIDE;
   virtual void ShowControlBar(bool show) OVERRIDE;
+  virtual void ShowDeviceResetScreen() OVERRIDE;
 
   // Handlers for JS WebUI messages.
   void HandleEnableLargeCursor(bool enabled);
@@ -91,6 +92,8 @@
   void HandleScreenAssetsLoaded(const std::string& screen_async_load_id);
   void HandleSkipToLoginForTesting(const base::ListValue* args);
   void HandleLaunchHelpApp(double help_topic_id);
+  void HandleToggleResetScreen();
+  void HandleHeaderBarVisible();
 
   // Updates a11y menu state based on the current a11y features state(on/off).
   void UpdateA11yState();
diff --git a/chrome/browser/ui/webui/chromeos/login/network_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/network_screen_handler.cc
index 913d799..29cb470 100644
--- a/chrome/browser/ui/webui/chromeos/login/network_screen_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/login/network_screen_handler.cc
@@ -33,7 +33,6 @@
 #include "chrome/common/pref_names.h"
 #include "chromeos/chromeos_switches.h"
 #include "chromeos/ime/extension_ime_util.h"
-#include "chromeos/ime/input_method_manager.h"
 #include "grit/chromium_strings.h"
 #include "grit/generated_resources.h"
 #include "ui/base/l10n/l10n_util.h"
@@ -108,6 +107,7 @@
 
   input_method::InputMethodManager* manager =
       input_method::InputMethodManager::Get();
+  manager->AddObserver(this);
   manager->GetComponentExtensionIMEManager()->AddObserver(this);
 }
 
@@ -115,9 +115,10 @@
   if (screen_)
     screen_->OnActorDestroyed(this);
 
-  input_method::InputMethodManager::Get()
-      ->GetComponentExtensionIMEManager()
-      ->RemoveObserver(this);
+  input_method::InputMethodManager* manager =
+      input_method::InputMethodManager::Get();
+  manager->RemoveObserver(this);
+  manager->GetComponentExtensionIMEManager()->RemoveObserver(this);
 }
 
 // NetworkScreenHandler, NetworkScreenActor implementation: --------------------
@@ -486,6 +487,11 @@
     should_reinitialize_language_keyboard_list_ = true;
 }
 
+void NetworkScreenHandler::InputMethodChanged(
+    input_method::InputMethodManager* manager, bool show_message) {
+  CallJS("setInputMethod", manager->GetCurrentInputMethod().id());
+}
+
 void NetworkScreenHandler::ReloadLocalizedContent() {
   base::DictionaryValue localized_strings;
   static_cast<OobeUI*>(web_ui()->GetController())
diff --git a/chrome/browser/ui/webui/chromeos/login/network_screen_handler.h b/chrome/browser/ui/webui/chromeos/login/network_screen_handler.h
index 4ebae1a..f11e6fa 100644
--- a/chrome/browser/ui/webui/chromeos/login/network_screen_handler.h
+++ b/chrome/browser/ui/webui/chromeos/login/network_screen_handler.h
@@ -15,6 +15,7 @@
 #include "chrome/browser/chromeos/settings/cros_settings.h"
 #include "chrome/browser/ui/webui/chromeos/login/base_screen_handler.h"
 #include "chromeos/ime/component_extension_ime_manager.h"
+#include "chromeos/ime/input_method_manager.h"
 #include "ui/gfx/point.h"
 
 class PrefRegistrySimple;
@@ -30,7 +31,8 @@
 // the welcome screen (part of the page) of the OOBE.
 class NetworkScreenHandler : public NetworkScreenActor,
                              public BaseScreenHandler,
-                             public ComponentExtensionIMEManager::Observer {
+                             public ComponentExtensionIMEManager::Observer,
+                             public input_method::InputMethodManager::Observer {
  public:
   explicit NetworkScreenHandler(CoreOobeActor* core_oobe_actor);
   virtual ~NetworkScreenHandler();
@@ -57,6 +59,10 @@
   // ComponentExtensionIMEManager::Observer implementation:
   virtual void OnImeComponentExtensionInitialized() OVERRIDE;
 
+  // InputMethodManager::Observer implementation:
+  virtual void InputMethodChanged(input_method::InputMethodManager* manager,
+                                  bool show_message) OVERRIDE;
+
   // Registers the preference for derelict state.
   static void RegisterPrefs(PrefRegistrySimple* registry);
 
diff --git a/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc b/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc
index 0a66b71..191cc69 100644
--- a/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc
+++ b/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc
@@ -173,6 +173,7 @@
       user_image_screen_actor_(NULL),
       kiosk_app_menu_handler_(NULL),
       current_screen_(SCREEN_UNKNOWN),
+      previous_screen_(SCREEN_UNKNOWN),
       ready_(false) {
   display_type_ = GetDisplayType(url);
   InitializeScreenMaps();
@@ -496,6 +497,7 @@
 }
 
 void OobeUI::OnCurrentScreenChanged(const std::string& screen) {
+  previous_screen_ = current_screen_;
   if (screen_ids_.count(screen)) {
     Screen new_screen = screen_ids_[screen];
     FOR_EACH_OBSERVER(Observer,
diff --git a/chrome/browser/ui/webui/chromeos/login/oobe_ui.h b/chrome/browser/ui/webui/chromeos/login/oobe_ui.h
index d53d82e..9659ac9 100644
--- a/chrome/browser/ui/webui/chromeos/login/oobe_ui.h
+++ b/chrome/browser/ui/webui/chromeos/login/oobe_ui.h
@@ -131,6 +131,8 @@
 
   Screen current_screen() const { return current_screen_; }
 
+  Screen previous_screen() const { return previous_screen_; }
+
   const std::string& GetScreenName(Screen screen) const;
 
   SigninScreenHandler* signin_screen_handler_for_test() {
@@ -196,6 +198,9 @@
   // Id of the current oobe/login screen.
   Screen current_screen_;
 
+  // Id of the previous oobe/login screen.
+  Screen previous_screen_;
+
   // Maps JS screen names to screen ids.
   std::map<std::string, Screen> screen_ids_;
 
diff --git a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc
index d248371..76f23df 100644
--- a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc
@@ -766,8 +766,6 @@
               &SigninScreenHandler::HandleToggleEnrollmentScreen);
   AddCallback("toggleKioskEnableScreen",
               &SigninScreenHandler::HandleToggleKioskEnableScreen);
-  AddCallback("toggleResetScreen",
-              &SigninScreenHandler::HandleToggleResetScreen);
   AddCallback("createAccount", &SigninScreenHandler::HandleCreateAccount);
   AddCallback("accountPickerReady",
               &SigninScreenHandler::HandleAccountPickerReady);
@@ -1280,13 +1278,6 @@
   }
 }
 
-void SigninScreenHandler::HandleToggleResetScreen() {
-  policy::BrowserPolicyConnectorChromeOS* connector =
-      g_browser_process->platform_part()->browser_policy_connector_chromeos();
-  if (delegate_ && !connector->IsEnterpriseManaged())
-    delegate_->ShowResetScreen();
-}
-
 void SigninScreenHandler::HandleToggleKioskAutolaunchScreen() {
   policy::BrowserPolicyConnectorChromeOS* connector =
       g_browser_process->platform_part()->browser_policy_connector_chromeos();
@@ -1426,7 +1417,8 @@
 
   PrefService* prefs = g_browser_process->local_state();
   if (prefs->GetBoolean(prefs::kFactoryResetRequested)) {
-    HandleToggleResetScreen();
+    if (core_oobe_actor_)
+      core_oobe_actor_->ShowDeviceResetScreen();
     return;
   }
 
@@ -1455,7 +1447,7 @@
     // Do this only once. Any subsequent call would relod GAIA frame.
     focus_stolen_ = false;
     const char code[] =
-        "if (typeof gWindowOnLoad != 'undefined) gWindowOnLoad();";
+        "if (typeof gWindowOnLoad != 'undefined') gWindowOnLoad();";
     content::RenderFrameHost* frame =
         LoginDisplayHostImpl::GetGaiaAuthIframe(web_ui()->GetWebContents());
     frame->ExecuteJavaScript(base::ASCIIToUTF16(code));
diff --git a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h
index e6bc577..333bb93 100644
--- a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h
+++ b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h
@@ -157,9 +157,6 @@
   virtual void ShowKioskEnableScreen() = 0;
 
   // Shows Reset screen.
-  virtual void ShowResetScreen() = 0;
-
-  // Shows Reset screen.
   virtual void ShowKioskAutolaunchScreen() = 0;
 
   // Show wrong hwid screen.
diff --git a/chrome/browser/ui/webui/extensions/command_handler.cc b/chrome/browser/ui/webui/extensions/command_handler.cc
index 6a51761..e444592 100644
--- a/chrome/browser/ui/webui/extensions/command_handler.cc
+++ b/chrome/browser/ui/webui/extensions/command_handler.cc
@@ -46,7 +46,8 @@
 }
 
 void CommandHandler::RegisterMessages() {
-  registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
+  registrar_.Add(this,
+                 chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
                  content::Source<Profile>(profile_));
   registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
                  content::Source<Profile>(profile_));
@@ -69,7 +70,7 @@
     int type,
     const content::NotificationSource& source,
     const content::NotificationDetails& details) {
-  DCHECK(type == chrome::NOTIFICATION_EXTENSION_LOADED ||
+  DCHECK(type == chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED ||
          type == chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED);
   UpdateCommandDataOnPage();
 }
diff --git a/chrome/browser/ui/webui/extensions/extension_icon_source.cc b/chrome/browser/ui/webui/extensions/extension_icon_source.cc
index ad54869..4c188ba 100644
--- a/chrome/browser/ui/webui/extensions/extension_icon_source.cc
+++ b/chrome/browser/ui/webui/extensions/extension_icon_source.cc
@@ -220,17 +220,18 @@
   GURL favicon_url =
       AppLaunchInfo::GetFullLaunchURL(GetData(request_id)->extension);
   favicon_service->GetRawFaviconForURL(
-      FaviconService::FaviconForURLParams(favicon_url, chrome::FAVICON,
-                                          gfx::kFaviconSize),
+      FaviconService::FaviconForURLParams(
+          favicon_url, favicon_base::FAVICON, gfx::kFaviconSize),
       ui::SCALE_FACTOR_100P,
       base::Bind(&ExtensionIconSource::OnFaviconDataAvailable,
-                 base::Unretained(this), request_id),
+                 base::Unretained(this),
+                 request_id),
       &cancelable_task_tracker_);
 }
 
 void ExtensionIconSource::OnFaviconDataAvailable(
     int request_id,
-    const chrome::FaviconBitmapResult& bitmap_result) {
+    const favicon_base::FaviconBitmapResult& bitmap_result) {
   ExtensionIconRequest* request = GetData(request_id);
 
   // Fallback to the default icon if there wasn't a favicon.
diff --git a/chrome/browser/ui/webui/extensions/extension_icon_source.h b/chrome/browser/ui/webui/extensions/extension_icon_source.h
index d961055..2ec71bc 100644
--- a/chrome/browser/ui/webui/extensions/extension_icon_source.h
+++ b/chrome/browser/ui/webui/extensions/extension_icon_source.h
@@ -110,7 +110,7 @@
   // FaviconService callback
   void OnFaviconDataAvailable(
       int request_id,
-      const chrome::FaviconBitmapResult& bitmap_result);
+      const favicon_base::FaviconBitmapResult& bitmap_result);
 
   // ImageLoader callback
   void OnImageLoaded(int request_id, const gfx::Image& image);
diff --git a/chrome/browser/ui/webui/extensions/extension_settings_handler.cc b/chrome/browser/ui/webui/extensions/extension_settings_handler.cc
index bce5145..1e9d039 100644
--- a/chrome/browser/ui/webui/extensions/extension_settings_handler.cc
+++ b/chrome/browser/ui/webui/extensions/extension_settings_handler.cc
@@ -52,7 +52,9 @@
 #include "chrome/browser/ui/webui/extensions/extension_basic_info.h"
 #include "chrome/browser/ui/webui/extensions/extension_icon_source.h"
 #include "chrome/common/chrome_switches.h"
+#include "chrome/common/chrome_version_info.h"
 #include "chrome/common/extensions/extension_constants.h"
+#include "chrome/common/extensions/features/feature_channel.h"
 #include "chrome/common/extensions/manifest_url_handler.h"
 #include "chrome/common/pref_names.h"
 #include "chrome/common/url_constants.h"
@@ -81,7 +83,6 @@
 #include "extensions/common/extension.h"
 #include "extensions/common/extension_icon_set.h"
 #include "extensions/common/extension_set.h"
-#include "extensions/common/feature_switch.h"
 #include "extensions/common/manifest.h"
 #include "extensions/common/manifest_handlers/background_info.h"
 #include "extensions/common/manifest_handlers/incognito_info.h"
@@ -97,6 +98,11 @@
 using content::RenderViewHost;
 using content::WebContents;
 
+namespace {
+const char kAppsDeveloperToolsExtensionId[] =
+    "ohmmkhmmmpcnpikjeljgnaoabkaalbgc";
+}
+
 namespace extensions {
 
 ExtensionPage::ExtensionPage(const GURL& url,
@@ -340,8 +346,13 @@
   // (using both is redundant).
   ErrorConsole* error_console =
       ErrorConsole::Get(extension_service_->profile());
-  if (error_console->IsEnabledForChromeExtensionsPage() &&
-      extension->location() == Manifest::UNPACKED) {
+  bool error_console_is_enabled =
+      error_console->IsEnabledForChromeExtensionsPage();
+  extension_data->SetBoolean("wantsErrorCollection", error_console_is_enabled);
+  if (error_console_is_enabled) {
+    extension_data->SetBoolean("errorCollectionEnabled",
+                               error_console->IsReportingEnabledForExtension(
+                                   extension->id()));
     const ErrorList& errors =
         error_console->GetErrorsForExtension(extension->id());
     if (!errors.empty()) {
@@ -426,6 +437,8 @@
       l10n_util::GetStringUTF16(IDS_EXTENSIONS_REMOVE));
   source->AddString("extensionSettingsEnableIncognito",
       l10n_util::GetStringUTF16(IDS_EXTENSIONS_ENABLE_INCOGNITO));
+  source->AddString("extensionSettingsEnableErrorCollection",
+      l10n_util::GetStringUTF16(IDS_EXTENSIONS_ENABLE_ERROR_COLLECTION));
   source->AddString("extensionSettingsAllowFileAccess",
       l10n_util::GetStringUTF16(IDS_EXTENSIONS_ALLOW_FILE_ACCESS));
   source->AddString("extensionSettingsIncognitoWarning",
@@ -467,6 +480,17 @@
       l10n_util::GetStringUTF16(IDS_EXTENSIONS_COMMANDS_CONFIGURE));
   source->AddString("extensionSettingsUpdateButton",
       l10n_util::GetStringUTF16(IDS_EXTENSIONS_UPDATE_BUTTON));
+  source->AddString(
+      "extensionSettingsAppsDevToolsPromoText",
+      l10n_util::GetStringUTF16(IDS_EXTENSIONS_APPS_DEV_TOOLS_PROMO_TEXT));
+  source->AddString(
+      "extensionSettingsAppsDevToolsLinkText",
+      l10n_util::GetStringUTF16(IDS_EXTENSIONS_APPS_DEV_TOOLS_LINK_TEXT));
+  source->AddString(
+      "extensionSettingsAppsDevToolsUrl",
+      base::ASCIIToUTF16(google_util::AppendGoogleLocaleParam(
+          GURL(extension_urls::GetWebstoreItemDetailURLPrefix() +
+                   kAppsDeveloperToolsExtensionId)).spec()));
   source->AddString("extensionSettingsCrashMessage",
       l10n_util::GetStringUTF16(IDS_EXTENSIONS_CRASHED_EXTENSION));
   source->AddString("extensionSettingsInDevelopment",
@@ -534,6 +558,9 @@
   web_ui()->RegisterMessageCallback("extensionSettingsEnableIncognito",
       base::Bind(&ExtensionSettingsHandler::HandleEnableIncognitoMessage,
                  AsWeakPtr()));
+  web_ui()->RegisterMessageCallback("extensionSettingsEnableErrorCollection",
+      base::Bind(&ExtensionSettingsHandler::HandleEnableErrorCollectionMessage,
+                 AsWeakPtr()));
   web_ui()->RegisterMessageCallback("extensionSettingsAllowFileAccess",
       base::Bind(&ExtensionSettingsHandler::HandleAllowFileAccessMessage,
                  AsWeakPtr()));
@@ -658,7 +685,7 @@
       HandleLoadRetryMessage(retry_and_path->first, retry_and_path->second);
       break;
     }
-    case chrome::NOTIFICATION_EXTENSION_LOADED: {
+    case chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED: {
       const base::FilePath& path =
           content::Details<const Extension>(details).ptr()->path();
       if (IndexOfLoadingPath(path) != -1)
@@ -814,6 +841,14 @@
   results.SetBoolean("profileIsManaged", is_managed);
   results.SetBoolean("developerMode", developer_mode);
 
+  // Promote the Apps Developer Tools if they're not installed.
+  bool promote_apps_dev_tools =
+      GetCurrentChannel() <= chrome::VersionInfo::CHANNEL_DEV &&
+      !ExtensionRegistry::Get(Profile::FromWebUI(web_ui()))->
+          GetExtensionById(kAppsDeveloperToolsExtensionId,
+                           ExtensionRegistry::EVERYTHING);
+  results.SetBoolean("promoteAppsDevTools", promote_apps_dev_tools);
+
   bool load_unpacked_disabled =
       ExtensionPrefs::Get(profile)->ExtensionsBlacklistedByDefault();
   results.SetBoolean("loadUnpackedDisabled", load_unpacked_disabled);
@@ -978,6 +1013,18 @@
                               enable_str == "true");
 }
 
+void ExtensionSettingsHandler::HandleEnableErrorCollectionMessage(
+    const base::ListValue* args) {
+  CHECK_EQ(2u, args->GetSize());
+  std::string extension_id;
+  std::string enable_str;
+  CHECK(args->GetString(0, &extension_id));
+  CHECK(args->GetString(1, &enable_str));
+  bool enabled = enable_str == "true";
+  ErrorConsole::Get(Profile::FromWebUI(web_ui()))
+      ->SetReportingAllForExtension(extension_id, enabled);
+}
+
 void ExtensionSettingsHandler::HandleAllowFileAccessMessage(
     const base::ListValue* args) {
   CHECK_EQ(2U, args->GetSize());
@@ -1136,7 +1183,8 @@
   Profile* profile = Profile::FromWebUI(web_ui());
 
   // Register for notifications that we need to reload the page.
-  registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
+  registrar_.Add(this,
+                 chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
                  content::Source<Profile>(profile));
   registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
                  content::Source<Profile>(profile));
diff --git a/chrome/browser/ui/webui/extensions/extension_settings_handler.h b/chrome/browser/ui/webui/extensions/extension_settings_handler.h
index 1c0c8be..3331c72 100644
--- a/chrome/browser/ui/webui/extensions/extension_settings_handler.h
+++ b/chrome/browser/ui/webui/extensions/extension_settings_handler.h
@@ -180,6 +180,9 @@
   // Callback for "enableIncognito" message.
   void HandleEnableIncognitoMessage(const base::ListValue* args);
 
+  // Callback for "enableErrorCollection" message.
+  void HandleEnableErrorCollectionMessage(const base::ListValue* args);
+
   // Callback for "allowFileAcces" message.
   void HandleAllowFileAccessMessage(const base::ListValue* args);
 
diff --git a/chrome/browser/ui/webui/favicon_source.cc b/chrome/browser/ui/webui/favicon_source.cc
index cef2344..46cce9b 100644
--- a/chrome/browser/ui/webui/favicon_source.cc
+++ b/chrome/browser/ui/webui/favicon_source.cc
@@ -45,17 +45,17 @@
 
 FaviconSource::FaviconSource(Profile* profile, IconType type)
     : profile_(profile->GetOriginalProfile()),
-      icon_types_(type == FAVICON ? chrome::FAVICON :
-          chrome::TOUCH_PRECOMPOSED_ICON | chrome::TOUCH_ICON |
-          chrome::FAVICON) {
-}
+      icon_types_(type == FAVICON ? favicon_base::FAVICON
+                                  : favicon_base::TOUCH_PRECOMPOSED_ICON |
+                                        favicon_base::TOUCH_ICON |
+                                        favicon_base::FAVICON) {}
 
 FaviconSource::~FaviconSource() {
 }
 
 std::string FaviconSource::GetSource() const {
-  return icon_types_ == chrome::FAVICON ?
-      chrome::kChromeUIFaviconHost : chrome::kChromeUITouchIconHost;
+  return icon_types_ == favicon_base::FAVICON ? chrome::kChromeUIFaviconHost
+                                              : chrome::kChromeUITouchIconHost;
 }
 
 void FaviconSource::StartDataRequest(
@@ -84,15 +84,13 @@
     // IconType.
     favicon_service->GetRawFavicon(
         url,
-        chrome::FAVICON,
+        favicon_base::FAVICON,
         parsed.size_in_dip,
         parsed.scale_factor,
         base::Bind(&FaviconSource::OnFaviconDataAvailable,
                    base::Unretained(this),
-                   IconRequest(callback,
-                               url,
-                               parsed.size_in_dip,
-                               parsed.scale_factor)),
+                   IconRequest(
+                       callback, url, parsed.size_in_dip, parsed.scale_factor)),
         &cancelable_task_tracker_);
   } else {
     // Intercept requests for prepopulated pages.
@@ -158,7 +156,7 @@
 
 void FaviconSource::OnFaviconDataAvailable(
     const IconRequest& request,
-    const chrome::FaviconBitmapResult& bitmap_result) {
+    const favicon_base::FaviconBitmapResult& bitmap_result) {
   if (bitmap_result.is_valid()) {
     // Forward the data along to the networking system.
     request.callback.Run(bitmap_result.bitmap_data.get());
diff --git a/chrome/browser/ui/webui/favicon_source.h b/chrome/browser/ui/webui/favicon_source.h
index b60b9f2..1dc7eda 100644
--- a/chrome/browser/ui/webui/favicon_source.h
+++ b/chrome/browser/ui/webui/favicon_source.h
@@ -120,7 +120,7 @@
   // Called when favicon data is available from the history backend.
   void OnFaviconDataAvailable(
       const IconRequest& request,
-      const chrome::FaviconBitmapResult& bitmap_result);
+      const favicon_base::FaviconBitmapResult& bitmap_result);
 
   // Sends the 16x16 DIP 1x default favicon.
   void SendDefaultResponse(
@@ -135,7 +135,7 @@
   // database doesn't have a favicon for a webpage. Indexed by IconSize values.
   scoped_refptr<base::RefCountedMemory> default_favicons_[NUM_SIZES];
 
-  // The chrome::IconTypes of icon that this FaviconSource handles.
+  // The favicon_base::IconTypes of icon that this FaviconSource handles.
   int icon_types_;
 
   DISALLOW_COPY_AND_ASSIGN(FaviconSource);
diff --git a/chrome/browser/ui/webui/gcm_internals_ui.cc b/chrome/browser/ui/webui/gcm_internals_ui.cc
index be9fe84..2130cd8 100644
--- a/chrome/browser/ui/webui/gcm_internals_ui.cc
+++ b/chrome/browser/ui/webui/gcm_internals_ui.cc
@@ -4,10 +4,13 @@
 
 #include "chrome/browser/ui/webui/gcm_internals_ui.h"
 
+#include <vector>
+
 #include "base/bind.h"
 #include "base/bind_helpers.h"
 #include "base/format_macros.h"
 #include "base/memory/weak_ptr.h"
+#include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/values.h"
 #include "chrome/browser/profiles/profile.h"
@@ -23,6 +26,24 @@
 
 namespace {
 
+void SetSendingInfo(
+    const std::vector<gcm::GCMStatsRecorder::SendingActivity>& sends,
+    base::ListValue* send_info) {
+  std::vector<gcm::GCMStatsRecorder::SendingActivity>::const_iterator it =
+     sends.begin();
+  for (; it < sends.end(); ++it) {
+    base::ListValue* row = new base::ListValue();
+    send_info->Append(row);
+
+    row->AppendDouble(it->time.ToJsTime());
+    row->AppendString(it->app_id);
+    row->AppendString(it->receiver_id);
+    row->AppendString(it->message_id);
+    row->AppendString(it->event);
+    row->AppendString(it->details);
+  }
+}
+
 // Class acting as a controller of the chrome://gcm-internals WebUI.
 class GcmInternalsUIMessageHandler : public content::WebUIMessageHandler {
  public:
@@ -42,6 +63,9 @@
   // Request all of the GCM related infos through gcm profile service.
   void RequestAllInfo(const base::ListValue* args);
 
+  // Enables/disables GCM activity recording through gcm profile service.
+  void SetRecording(const base::ListValue* args);
+
   // Callback function of the request for all gcm related infos.
   void RequestGCMStatisticsFinished(
       const gcm::GCMClient::GCMStatistics& args) const;
@@ -76,16 +100,27 @@
                             profile_service->IsGCMClientReady());
   }
   if (stats) {
+    results.SetBoolean("isRecording", stats->is_recording);
     device_info->SetBoolean("gcmClientCreated", stats->gcm_client_created);
     device_info->SetString("gcmClientState", stats->gcm_client_state);
     device_info->SetBoolean("connectionClientCreated",
                             stats->connection_client_created);
+    device_info->SetString("registeredAppIds",
+                           JoinString(stats->registered_app_ids, ","));
     if (stats->connection_client_created)
       device_info->SetString("connectionState", stats->connection_state);
     if (stats->android_id > 0) {
       device_info->SetString("androidId",
           base::StringPrintf("0x%" PRIx64, stats->android_id));
     }
+    device_info->SetInteger("sendQueueSize", stats->send_queue_size);
+    device_info->SetInteger("resendQueueSize", stats->resend_queue_size);
+
+    if (stats->sending_activities.size() > 0) {
+      base::ListValue* send_info = new base::ListValue();
+      results.Set("sendInfo", send_info);
+      SetSendingInfo(stats->sending_activities, send_info);
+    }
   }
   web_ui()->CallJavascriptFunction("gcmInternals.setGcmInternalsInfo",
                                    results);
@@ -93,19 +128,63 @@
 
 void GcmInternalsUIMessageHandler::RequestAllInfo(
     const base::ListValue* args) {
+  if (args->GetSize() != 1) {
+    NOTREACHED();
+    return;
+  }
+  bool clear_logs = false;
+  if (!args->GetBoolean(0, &clear_logs)) {
+    NOTREACHED();
+    return;
+  }
+
   Profile* profile = Profile::FromWebUI(web_ui());
   gcm::GCMProfileService* profile_service =
     gcm::GCMProfileServiceFactory::GetForProfile(profile);
 
   if (!profile_service) {
     ReturnResults(profile, NULL, NULL);
+  } else if (profile_service->SignedInUserName().empty()) {
+    ReturnResults(profile, profile_service, NULL);
   } else {
-    profile_service->RequestGCMStatistics(base::Bind(
-        &GcmInternalsUIMessageHandler::RequestGCMStatisticsFinished,
-        weak_ptr_factory_.GetWeakPtr()));
+    profile_service->GetGCMStatistics(
+        base::Bind(&GcmInternalsUIMessageHandler::RequestGCMStatisticsFinished,
+                   weak_ptr_factory_.GetWeakPtr()),
+        clear_logs);
   }
 }
 
+void GcmInternalsUIMessageHandler::SetRecording(const base::ListValue* args) {
+  if (args->GetSize() != 1) {
+    NOTREACHED();
+    return;
+  }
+  bool recording = false;
+  if (!args->GetBoolean(0, &recording)) {
+    NOTREACHED();
+    return;
+  }
+
+  Profile* profile = Profile::FromWebUI(web_ui());
+  gcm::GCMProfileService* profile_service =
+      gcm::GCMProfileServiceFactory::GetForProfile(profile);
+
+  if (!profile_service) {
+    ReturnResults(profile, NULL, NULL);
+    return;
+  }
+  if (profile_service->SignedInUserName().empty()) {
+    ReturnResults(profile, profile_service, NULL);
+    return;
+  }
+  // Get fresh stats after changing recording setting.
+  profile_service->SetGCMRecording(
+      base::Bind(
+          &GcmInternalsUIMessageHandler::RequestGCMStatisticsFinished,
+          weak_ptr_factory_.GetWeakPtr()),
+      recording);
+}
+
 void GcmInternalsUIMessageHandler::RequestGCMStatisticsFinished(
     const gcm::GCMClient::GCMStatistics& stats) const {
   Profile* profile = Profile::FromWebUI(web_ui());
@@ -120,7 +199,11 @@
   web_ui()->RegisterMessageCallback(
       "getGcmInternalsInfo",
       base::Bind(&GcmInternalsUIMessageHandler::RequestAllInfo,
-                 base::Unretained(this)));
+                 weak_ptr_factory_.GetWeakPtr()));
+  web_ui()->RegisterMessageCallback(
+      "setGcmInternalsRecording",
+      base::Bind(&GcmInternalsUIMessageHandler::SetRecording,
+                 weak_ptr_factory_.GetWeakPtr()));
 }
 
 }  // namespace
diff --git a/chrome/browser/ui/webui/inspect_ui.cc b/chrome/browser/ui/webui/inspect_ui.cc
index 5ad979d..0ad7738 100644
--- a/chrome/browser/ui/webui/inspect_ui.cc
+++ b/chrome/browser/ui/webui/inspect_ui.cc
@@ -6,7 +6,6 @@
 
 #include "base/prefs/pref_service.h"
 #include "base/stl_util.h"
-#include "chrome/browser/devtools/devtools_adb_bridge.h"
 #include "chrome/browser/devtools/devtools_targets_ui.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/browser_navigator.h"
diff --git a/chrome/browser/ui/webui/inspect_ui_browsertest.cc b/chrome/browser/ui/webui/inspect_ui_browsertest.cc
index eec7d2e..e6ad8bf 100644
--- a/chrome/browser/ui/webui/inspect_ui_browsertest.cc
+++ b/chrome/browser/ui/webui/inspect_ui_browsertest.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/devtools/devtools_adb_bridge.h"
+#include "chrome/browser/devtools/device/devtools_android_bridge.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/common/url_constants.h"
@@ -67,12 +67,12 @@
       new base::StringValue(kSharedWorkerTestPage)));
 }
 
-IN_PROC_BROWSER_TEST_F(InspectUITest, AdbTargets) {
-  scoped_refptr<DevToolsAdbBridge> adb_bridge =
-      DevToolsAdbBridge::Factory::GetForProfile(browser()->profile());
+IN_PROC_BROWSER_TEST_F(InspectUITest, AndroidTargets) {
+  scoped_refptr<DevToolsAndroidBridge> android_bridge =
+      DevToolsAndroidBridge::Factory::GetForProfile(browser()->profile());
   AndroidDeviceManager::DeviceProviders providers;
   providers.push_back(AndroidDeviceManager::GetMockDeviceProviderForTest());
-  adb_bridge->set_device_providers_for_test(providers);
+  android_bridge->set_device_providers_for_test(providers);
 
   ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIInspectURL));
 
diff --git a/chrome/browser/ui/webui/local_discovery/local_discovery_ui_browsertest.cc b/chrome/browser/ui/webui/local_discovery/local_discovery_ui_browsertest.cc
index 0f3933c..b293e67 100644
--- a/chrome/browser/ui/webui/local_discovery/local_discovery_ui_browsertest.cc
+++ b/chrome/browser/ui/webui/local_discovery/local_discovery_ui_browsertest.cc
@@ -97,13 +97,14 @@
   0x00, 0x01,        // CLASS is IN.
   0x00, 0x00,        // TTL (4 bytes) is 32768 seconds.
   0x01, 0x00,
-  0x00, 0x34,        // RDLENGTH is 69 bytes.
+  0x00, 0x41,        // RDLENGTH is 69 bytes.
   0x03, 'i', 'd', '=',
   0x10, 't', 'y', '=', 'S', 'a', 'm', 'p', 'l', 'e', ' ',
         'd', 'e', 'v', 'i', 'c', 'e',
   0x1e, 'n', 'o', 't', 'e', '=',
         'S', 'a', 'm', 'p', 'l', 'e', ' ', 'd', 'e', 'v', 'i', 'c', 'e', ' ',
         'd', 'e', 's', 'c', 'r', 'i', 'p', 't', 'i', 'o', 'n',
+  0x0c, 't', 'y', 'p', 'e', '=', 'p', 'r', 'i', 'n', 't', 'e', 'r',
 
   0x09, 'm', 'y', 'S', 'e', 'r', 'v', 'i', 'c', 'e',
   0xc0, 0x0c,
diff --git a/chrome/browser/ui/webui/local_discovery/local_discovery_ui_handler.cc b/chrome/browser/ui/webui/local_discovery/local_discovery_ui_handler.cc
index d948926..485d3c8 100644
--- a/chrome/browser/ui/webui/local_discovery/local_discovery_ui_handler.cc
+++ b/chrome/browser/ui/webui/local_discovery/local_discovery_ui_handler.cc
@@ -21,7 +21,6 @@
 #include "chrome/browser/local_discovery/service_discovery_shared_client.h"
 #include "chrome/browser/printing/cloud_print/cloud_print_proxy_service.h"
 #include "chrome/browser/printing/cloud_print/cloud_print_proxy_service_factory.h"
-#include "chrome/browser/printing/cloud_print/cloud_print_url.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
 #include "chrome/browser/signin/signin_manager_factory.h"
@@ -30,15 +29,16 @@
 #include "chrome/browser/ui/browser_tabstrip.h"
 #include "chrome/common/chrome_switches.h"
 #include "chrome/common/pref_names.h"
+#include "components/cloud_devices/common/cloud_devices_urls.h"
 #include "components/signin/core/browser/profile_oauth2_token_service.h"
 #include "components/signin/core/browser/signin_manager_base.h"
 #include "content/public/browser/user_metrics.h"
-#include "content/public/browser/user_metrics.h"
 #include "content/public/browser/web_ui.h"
 #include "content/public/common/page_transition_types.h"
 #include "grit/generated_resources.h"
 #include "net/base/host_port_pair.h"
 #include "net/base/net_util.h"
+#include "net/base/url_util.h"
 #include "net/http/http_status_code.h"
 #include "ui/base/l10n/l10n_util.h"
 
@@ -49,8 +49,7 @@
 namespace local_discovery {
 
 namespace {
-const char kPrivetAutomatedClaimURLFormat[] = "%s/confirm?token=%s";
-
+const char kDeviceTypePrinter[] = "printer";
 int g_num_visible = 0;
 }  // namespace
 
@@ -189,12 +188,11 @@
   SigninManagerBase* signin_manager =
       SigninManagerFactory::GetInstance()->GetForProfile(profile);
 
-  cloud_print_printer_list_.reset(new CloudPrintPrinterList(
-      profile->GetRequestContext(),
-      GetCloudPrintBaseUrl(),
-      token_service,
-      signin_manager->GetAuthenticatedAccountId(),
-      this));
+  cloud_print_printer_list_.reset(
+      new CloudPrintPrinterList(profile->GetRequestContext(),
+                                token_service,
+                                signin_manager->GetAuthenticatedAccountId(),
+                                this));
   cloud_print_printer_list_->Start();
 }
 
@@ -204,7 +202,7 @@
   bool rv = args->GetString(0, &url);
   DCHECK(rv);
 
-  GURL url_full(GetCloudPrintBaseUrl() + url);
+  GURL url_full(cloud_devices::GetCloudPrintRelativeURL(url));
 
   Browser* browser = chrome::FindBrowserWithWebContents(
       web_ui()->GetWebContents());
@@ -256,12 +254,9 @@
     return;
   }
 
-  std::string base_url = GetCloudPrintBaseUrl();
-
-  GURL automated_claim_url(base::StringPrintf(
-      kPrivetAutomatedClaimURLFormat,
-      base_url.c_str(),
-      token.c_str()));
+  bool is_cloud_print =
+      device_descriptions_[current_http_client_->GetName()].type ==
+      kDeviceTypePrinter;
 
   Profile* profile = Profile::FromWebUI(web_ui());
 
@@ -284,7 +279,8 @@
       profile->GetRequestContext(),
       token_service,
       signin_manager->GetAuthenticatedAccountId(),
-      automated_claim_url,
+      is_cloud_print,
+      token,
       base::Bind(&LocalDiscoveryUIHandler::OnConfirmDone,
                  base::Unretained(this))));
   confirm_api_call_flow_->Start();
@@ -338,9 +334,8 @@
   SendRegisterDone(found->first, found->second);
 }
 
-void LocalDiscoveryUIHandler::OnConfirmDone(
-    CloudPrintBaseApiFlow::Status status) {
-  if (status == CloudPrintBaseApiFlow::SUCCESS) {
+void LocalDiscoveryUIHandler::OnConfirmDone(GCDBaseApiFlow::Status status) {
+  if (status == GCDBaseApiFlow::SUCCESS) {
     confirm_api_call_flow_.reset();
     current_register_operation_->CompleteRegistration();
   } else {
@@ -469,12 +464,6 @@
   return signin_manager->GetAuthenticatedUsername();
 }
 
-std::string LocalDiscoveryUIHandler::GetCloudPrintBaseUrl() {
-  CloudPrintURL cloud_print_url(Profile::FromWebUI(web_ui()));
-
-  return cloud_print_url.GetCloudPrintServiceURL().spec();
-}
-
 // TODO(noamsml): Create master object for registration flow.
 void LocalDiscoveryUIHandler::ResetCurrentRegistration() {
   if (current_register_operation_.get()) {
@@ -543,9 +532,12 @@
   // Open the connector enable page in the current tab.
   Profile* profile = Profile::FromWebUI(web_ui());
   content::OpenURLParams params(
-      CloudPrintURL(profile).GetCloudPrintServiceEnableURL(
+      cloud_devices::GetCloudPrintEnableURL(
           CloudPrintProxyServiceFactory::GetForProfile(profile)->proxy_id()),
-      content::Referrer(), CURRENT_TAB, content::PAGE_TRANSITION_LINK, false);
+      content::Referrer(),
+      CURRENT_TAB,
+      content::PAGE_TRANSITION_LINK,
+      false);
   web_ui()->GetWebContents()->OpenURL(params);
 }
 
diff --git a/chrome/browser/ui/webui/local_discovery/local_discovery_ui_handler.h b/chrome/browser/ui/webui/local_discovery/local_discovery_ui_handler.h
index fb7b285..1929063 100644
--- a/chrome/browser/ui/webui/local_discovery/local_discovery_ui_handler.h
+++ b/chrome/browser/ui/webui/local_discovery/local_discovery_ui_handler.h
@@ -115,7 +115,7 @@
 
   // For when the confirm operation on the cloudprint server has finished
   // executing.
-  void OnConfirmDone(CloudPrintBaseApiFlow::Status status);
+  void OnConfirmDone(GCDBaseApiFlow::Status status);
 
   // Signal to the web interface an error has ocurred while registering.
   void SendRegisterError();
@@ -130,9 +130,6 @@
   // Get the sync account email.
   std::string GetSyncAccount();
 
-  // Get the base cloud print URL.
-  std::string GetCloudPrintBaseUrl();
-
   // Reset and cancel the current registration.
   void ResetCurrentRegistration();
 
diff --git a/chrome/browser/ui/webui/ntp/android/bookmarks_handler.cc b/chrome/browser/ui/webui/ntp/android/bookmarks_handler.cc
index 40bb7b0..ef43cf0 100644
--- a/chrome/browser/ui/webui/ntp/android/bookmarks_handler.cc
+++ b/chrome/browser/ui/webui/ntp/android/bookmarks_handler.cc
@@ -13,6 +13,7 @@
 #include "chrome/browser/android/tab_android.h"
 #include "chrome/browser/bookmarks/bookmark_model.h"
 #include "chrome/browser/bookmarks/bookmark_model_factory.h"
+#include "chrome/browser/bookmarks/bookmark_utils.h"
 #include "chrome/browser/favicon/favicon_service_factory.h"
 #include "chrome/browser/profiles/incognito_helpers.h"
 #include "chrome/browser/profiles/profile.h"
@@ -450,11 +451,11 @@
   FaviconService* favicon_service = FaviconServiceFactory::GetForProfile(
       profile, Profile::EXPLICIT_ACCESS);
   favicon_service->GetRawFaviconForURL(
-      FaviconService::FaviconForURLParams(
-          node->url(),
-          chrome::TOUCH_PRECOMPOSED_ICON | chrome::TOUCH_ICON |
-              chrome::FAVICON,
-          0),  // request the largest icon.
+      FaviconService::FaviconForURLParams(node->url(),
+                                          favicon_base::TOUCH_PRECOMPOSED_ICON |
+                                              favicon_base::TOUCH_ICON |
+                                              favicon_base::FAVICON,
+                                          0),  // request the largest icon.
       ui::SCALE_FACTOR_100P,  // density doesn't matter for the largest icon.
       base::Bind(&BookmarksHandler::OnShortcutFaviconDataAvailable,
                  base::Unretained(this),
@@ -464,7 +465,7 @@
 
 void BookmarksHandler::OnShortcutFaviconDataAvailable(
     const BookmarkNode* node,
-    const chrome::FaviconBitmapResult& bitmap_result) {
+    const favicon_base::FaviconBitmapResult& bitmap_result) {
   if (!AreModelsLoaded())
     return;
 
@@ -520,7 +521,7 @@
   if (is_partner)
     return partner_bookmarks_shim_->GetNodeByID(id);
 
-  return bookmark_model_->GetNodeByID(id);
+  return GetBookmarkNodeByID(bookmark_model_, id);
 }
 
 const BookmarkNode* BookmarksHandler::GetParentOf(
diff --git a/chrome/browser/ui/webui/ntp/android/bookmarks_handler.h b/chrome/browser/ui/webui/ntp/android/bookmarks_handler.h
index 978f17f..1cf2606 100644
--- a/chrome/browser/ui/webui/ntp/android/bookmarks_handler.h
+++ b/chrome/browser/ui/webui/ntp/android/bookmarks_handler.h
@@ -148,7 +148,7 @@
   // and is available for use.
   void OnShortcutFaviconDataAvailable(
       const BookmarkNode* node,
-      const chrome::FaviconBitmapResult& bitmap_result);
+      const favicon_base::FaviconBitmapResult& bitmap_result);
 
   // Looks at an optional bookmark ID in |args| and returns the corresponding
   // node if found, otherwise returns NULL.
diff --git a/chrome/browser/ui/webui/ntp/app_launcher_handler.cc b/chrome/browser/ui/webui/ntp/app_launcher_handler.cc
index c34ee9a..3d442ca 100644
--- a/chrome/browser/ui/webui/ntp/app_launcher_handler.cc
+++ b/chrome/browser/ui/webui/ntp/app_launcher_handler.cc
@@ -38,10 +38,10 @@
 #include "chrome/browser/ui/webui/ntp/new_tab_ui.h"
 #include "chrome/common/extensions/extension_constants.h"
 #include "chrome/common/extensions/manifest_handlers/app_launch_info.h"
-#include "chrome/common/favicon/favicon_types.h"
 #include "chrome/common/pref_names.h"
 #include "chrome/common/url_constants.h"
 #include "chrome/common/web_application_info.h"
+#include "components/favicon_base/favicon_types.h"
 #include "content/public/browser/notification_service.h"
 #include "content/public/browser/web_ui.h"
 #include "content/public/common/favicon_url.h"
@@ -260,7 +260,7 @@
     return;
 
   switch (type) {
-    case chrome::NOTIFICATION_EXTENSION_LOADED: {
+    case chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED: {
       const Extension* extension =
           content::Details<const Extension>(details).ptr();
       if (!extension->is_app())
@@ -473,8 +473,9 @@
         extensions::pref_names::kExtensions, callback);
     extension_pref_change_registrar_.Add(prefs::kNtpAppPageNames, callback);
 
-    registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
-        content::Source<Profile>(profile));
+    registrar_.Add(this,
+                   chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
+                   content::Source<Profile>(profile));
     registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
         content::Source<Profile>(profile));
     registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNINSTALLED,
@@ -714,9 +715,8 @@
   install_info->page_ordinal = page_ordinal;
 
   favicon_service->GetFaviconImageForURL(
-      FaviconService::FaviconForURLParams(launch_url,
-                                          chrome::FAVICON,
-                                          gfx::kFaviconSize),
+      FaviconService::FaviconForURLParams(
+          launch_url, favicon_base::FAVICON, gfx::kFaviconSize),
       base::Bind(&AppLauncherHandler::OnFaviconForApp,
                  base::Unretained(this),
                  base::Passed(&install_info)),
@@ -738,7 +738,7 @@
 
 void AppLauncherHandler::OnFaviconForApp(
     scoped_ptr<AppInstallInfo> install_info,
-    const chrome::FaviconImageResult& image_result) {
+    const favicon_base::FaviconImageResult& image_result) {
   scoped_ptr<WebApplicationInfo> web_app(new WebApplicationInfo());
   web_app->title = install_info->title;
   web_app->app_url = install_info->app_url;
diff --git a/chrome/browser/ui/webui/ntp/app_launcher_handler.h b/chrome/browser/ui/webui/ntp/app_launcher_handler.h
index 4552d39..b6dc2dc 100644
--- a/chrome/browser/ui/webui/ntp/app_launcher_handler.h
+++ b/chrome/browser/ui/webui/ntp/app_launcher_handler.h
@@ -27,7 +27,7 @@
 class PrefChangeRegistrar;
 class Profile;
 
-namespace chrome {
+namespace favicon_base {
 struct FaviconImageResult;
 }
 
@@ -136,7 +136,7 @@
 
   // Continuation for installing a bookmark app after favicon lookup.
   void OnFaviconForApp(scoped_ptr<AppInstallInfo> install_info,
-                       const chrome::FaviconImageResult& image_result);
+                       const favicon_base::FaviconImageResult& image_result);
 
   // Sends |highlight_app_id_| to the js.
   void SetAppToBeHighlighted();
diff --git a/chrome/browser/ui/webui/ntp/favicon_webui_handler.cc b/chrome/browser/ui/webui/ntp/favicon_webui_handler.cc
index 975c716..365a793 100644
--- a/chrome/browser/ui/webui/ntp/favicon_webui_handler.cc
+++ b/chrome/browser/ui/webui/ntp/favicon_webui_handler.cc
@@ -114,9 +114,7 @@
   dom_id_map_[id_] = dom_id;
   favicon_service->GetRawFaviconForURL(
       FaviconService::FaviconForURLParams(
-          url,
-          chrome::FAVICON,
-          gfx::kFaviconSize),
+          url, favicon_base::FAVICON, gfx::kFaviconSize),
       ui::SCALE_FACTOR_100P,
       base::Bind(&FaviconWebUIHandler::OnFaviconDataAvailable,
                  base::Unretained(this),
@@ -126,7 +124,7 @@
 
 void FaviconWebUIHandler::OnFaviconDataAvailable(
     int id,
-    const chrome::FaviconBitmapResult& bitmap_result) {
+    const favicon_base::FaviconBitmapResult& bitmap_result) {
   scoped_ptr<base::StringValue> color_value;
 
   if (bitmap_result.is_valid())
diff --git a/chrome/browser/ui/webui/ntp/favicon_webui_handler.h b/chrome/browser/ui/webui/ntp/favicon_webui_handler.h
index b3a3f44..dd19e17 100644
--- a/chrome/browser/ui/webui/ntp/favicon_webui_handler.h
+++ b/chrome/browser/ui/webui/ntp/favicon_webui_handler.h
@@ -11,7 +11,7 @@
 #include "base/basictypes.h"
 #include "base/memory/ref_counted.h"
 #include "base/task/cancelable_task_tracker.h"
-#include "chrome/common/favicon/favicon_types.h"
+#include "components/favicon_base/favicon_types.h"
 #include "content/public/browser/web_ui_message_handler.h"
 
 class ExtensionIconColorManager;
@@ -41,8 +41,9 @@
 
  private:
   // Called when favicon data is available from the history backend.
-  void OnFaviconDataAvailable(int request_handle,
-                              const chrome::FaviconBitmapResult& bitmap_result);
+  void OnFaviconDataAvailable(
+      int request_handle,
+      const favicon_base::FaviconBitmapResult& bitmap_result);
 
   base::CancelableTaskTracker cancelable_task_tracker_;
 
diff --git a/chrome/browser/ui/webui/ntp/ntp_login_handler.cc b/chrome/browser/ui/webui/ntp/ntp_login_handler.cc
index 5b6f70e..65459a3 100644
--- a/chrome/browser/ui/webui/ntp/ntp_login_handler.cc
+++ b/chrome/browser/ui/webui/ntp/ntp_login_handler.cc
@@ -75,7 +75,7 @@
       net::EscapeForHTML(content) + base::ASCIIToUTF16("</span>");
 }
 
-} // namespace
+}  // namespace
 
 NTPLoginHandler::NTPLoginHandler() {
 }
@@ -114,11 +114,8 @@
 void NTPLoginHandler::Observe(int type,
                               const content::NotificationSource& source,
                               const content::NotificationDetails& details) {
-  if (type == chrome::NOTIFICATION_PROFILE_CACHED_INFO_CHANGED) {
-    UpdateLogin();
-  } else {
-    NOTREACHED();
-  }
+  DCHECK_EQ(chrome::NOTIFICATION_PROFILE_CACHED_INFO_CHANGED, type);
+  UpdateLogin();
 }
 
 void NTPLoginHandler::HandleInitializeSyncLogin(const base::ListValue* args) {
diff --git a/chrome/browser/ui/webui/omnibox/omnibox_ui_handler.cc b/chrome/browser/ui/webui/omnibox/omnibox_ui_handler.cc
index b33115b..bda6142 100644
--- a/chrome/browser/ui/webui/omnibox/omnibox_ui_handler.cc
+++ b/chrome/browser/ui/webui/omnibox/omnibox_ui_handler.cc
@@ -208,7 +208,7 @@
       prevent_inline_autocomplete,
       prefer_keyword,
       true,  // allow exact keyword matches
-      AutocompleteInput::ALL_MATCHES));  // want all matches
+      true));  // want all matches
 }
 
 void OmniboxUIHandler::ResetController() {
diff --git a/chrome/browser/ui/webui/options/autofill_options_browsertest.js b/chrome/browser/ui/webui/options/autofill_options_browsertest.js
index c62562f..c21aee8 100644
--- a/chrome/browser/ui/webui/options/autofill_options_browsertest.js
+++ b/chrome/browser/ui/webui/options/autofill_options_browsertest.js
@@ -22,3 +22,42 @@
 TEST_F('AutofillOptionsWebUITest', 'testOpenAutofillOptions', function() {
   assertEquals(this.browsePreload, document.location.href);
 });
+
+/**
+ * TestFixture for autofill edit address overlay WebUI testing.
+ * @extends {testing.Test}
+ * @constructor
+ */
+function AutofillEditAddressWebUITest() {}
+
+AutofillEditAddressWebUITest.prototype = {
+  __proto__: testing.Test.prototype,
+
+  /**
+   * Browse to autofill edit address overlay.
+   */
+  browsePreload: 'chrome://settings-frame/autofillEditAddress',
+
+  /** @override  */
+  isAsync: true,
+};
+
+TEST_F('AutofillEditAddressWebUITest',
+       'testAutofillPhoneValueListDoneValidating',
+       function() {
+  assertEquals(this.browsePreload, document.location.href);
+
+  var phoneList = $('phone-list');
+  expectEquals(0, phoneList.validationRequests_);
+  phoneList.doneValidating().then(function() {
+    phoneList.focus();
+    var input = phoneList.querySelector('input');
+    input.focus();
+    document.execCommand('insertText', false, '111-222-333');
+    assertEquals('111-222-333', input.value);
+    input.blur();
+    phoneList.doneValidating().then(function() {
+      testDone();
+    });
+  });
+});
diff --git a/chrome/browser/ui/webui/options/browser_options_handler.cc b/chrome/browser/ui/webui/options/browser_options_handler.cc
index 2f68fd0..beeb8d5 100644
--- a/chrome/browser/ui/webui/options/browser_options_handler.cc
+++ b/chrome/browser/ui/webui/options/browser_options_handler.cc
@@ -34,7 +34,6 @@
 #include "chrome/browser/prefs/session_startup_pref.h"
 #include "chrome/browser/printing/cloud_print/cloud_print_proxy_service.h"
 #include "chrome/browser/printing/cloud_print/cloud_print_proxy_service_factory.h"
-#include "chrome/browser/printing/cloud_print/cloud_print_url.h"
 #include "chrome/browser/profile_resetter/automatic_profile_resetter.h"
 #include "chrome/browser/profile_resetter/automatic_profile_resetter_factory.h"
 #include "chrome/browser/profiles/profile.h"
@@ -181,6 +180,8 @@
   static OptionsStringResource resources[] = {
     { "advancedSectionTitleCloudPrint", IDS_GOOGLE_CLOUD_PRINT },
     { "currentUserOnly", IDS_OPTIONS_CURRENT_USER_ONLY },
+    { "advancedSectionTitleCertificates",
+      IDS_OPTIONS_ADVANCED_SECTION_TITLE_CERTIFICATES },
     { "advancedSectionTitleContent",
       IDS_OPTIONS_ADVANCED_SECTION_TITLE_CONTENT },
     { "advancedSectionTitleLanguages",
@@ -189,8 +190,6 @@
       IDS_OPTIONS_ADVANCED_SECTION_TITLE_NETWORK },
     { "advancedSectionTitlePrivacy",
       IDS_OPTIONS_ADVANCED_SECTION_TITLE_PRIVACY },
-    { "advancedSectionTitleSecurity",
-      IDS_OPTIONS_ADVANCED_SECTION_TITLE_SECURITY },
     { "autofillEnabled", IDS_OPTIONS_AUTOFILL_ENABLE },
     { "autologinEnabled", IDS_OPTIONS_PASSWORDS_AUTOLOGIN },
     { "autoOpenFileTypesInfo", IDS_OPTIONS_OPEN_FILE_TYPES_AUTOMATICALLY },
@@ -368,6 +367,10 @@
       IDS_OPTIONS_SETTINGS_ACCESSIBILITY_AUTOCLICK_DELAY_LONG },
     { "autoclickDelayVeryLong",
       IDS_OPTIONS_SETTINGS_ACCESSIBILITY_AUTOCLICK_DELAY_VERY_LONG },
+    { "consumerManagementEnrollButton",
+      IDS_OPTIONS_CONSUMER_MANAGEMENT_ENROLL_BUTTON },
+    { "consumerManagementEnrollDescription",
+      IDS_OPTIONS_CONSUMER_MANAGEMENT_ENROLL_DESCRIPTION },
     { "enableContentProtectionAttestation",
       IDS_OPTIONS_ENABLE_CONTENT_PROTECTION_ATTESTATION },
     { "factoryResetHeading", IDS_OPTIONS_FACTORY_RESET_HEADING },
@@ -391,6 +394,7 @@
     { "noPointingDevices", IDS_OPTIONS_NO_POINTING_DEVICES },
     { "sectionTitleDevice", IDS_OPTIONS_DEVICE_GROUP_NAME },
     { "sectionTitleInternet", IDS_OPTIONS_INTERNET_OPTIONS_GROUP_LABEL },
+    { "securityTitle", IDS_OPTIONS_SECURITY_SECTION_TITLE },
     { "syncOverview", IDS_SYNC_OVERVIEW },
     { "syncButtonTextStart", IDS_SYNC_SETUP_BUTTON_LABEL },
     { "timezone", IDS_OPTIONS_SETTINGS_TIMEZONE_DESCRIPTION },
@@ -577,6 +581,11 @@
       l10n_util::GetStringFUTF16(
           IDS_OPTIONS_EASY_UNLOCK_CHECKBOX_LABEL_CHROMEOS,
           chromeos::GetChromeDeviceType()));
+
+  values->SetBoolean(
+      "consumerManagementEnabled",
+      CommandLine::ForCurrentProcess()->HasSwitch(
+          chromeos::switches::kEnableConsumerManagement));
 #endif
 }
 
@@ -659,6 +668,10 @@
       "performFactoryResetRestart",
       base::Bind(&BrowserOptionsHandler::PerformFactoryResetRestart,
                  base::Unretained(this)));
+  web_ui()->RegisterMessageCallback(
+      "enrollConsumerManagement",
+      base::Bind(&BrowserOptionsHandler::HandleEnrollConsumerManagement,
+                 base::Unretained(this)));
 #else
   web_ui()->RegisterMessageCallback(
       "restartBrowser",
@@ -1330,11 +1343,6 @@
                           !signin->GetAuthenticatedUsername().empty());
   sync_status->SetBoolean("hasUnrecoverableError",
                           service && service->HasUnrecoverableError());
-  sync_status->SetBoolean(
-      "autoLoginVisible",
-      CommandLine::ForCurrentProcess()->HasSwitch(switches::kEnableAutologin) &&
-      service && service->IsSyncEnabledAndLoggedIn() &&
-      service->IsOAuthRefreshTokenAvailable());
 
   return sync_status.Pass();
 }
@@ -1548,6 +1556,11 @@
   chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RequestRestart();
 }
 
+void BrowserOptionsHandler::HandleEnrollConsumerManagement(
+    const base::ListValue* args) {
+  // TODO(davidyu): Implement. http://crbug.com/353050.
+}
+
 void BrowserOptionsHandler::SetupAccessibilityFeatures() {
   PrefService* pref_service = g_browser_process->local_state();
   base::FundamentalValue virtual_keyboard_enabled(
diff --git a/chrome/browser/ui/webui/options/browser_options_handler.h b/chrome/browser/ui/webui/options/browser_options_handler.h
index d935c27..a705338 100644
--- a/chrome/browser/ui/webui/options/browser_options_handler.h
+++ b/chrome/browser/ui/webui/options/browser_options_handler.h
@@ -282,6 +282,9 @@
   // Called when the user confirmed factory reset. Chrome will
   // initiate asynchronous file operation and then log out.
   void PerformFactoryResetRestart(const base::ListValue* args);
+
+  // Called when the consumer management enroll button is clicked.
+  void HandleEnrollConsumerManagement(const base::ListValue* args);
 #endif
 
   // Setup the visibility for the metrics reporting setting.
diff --git a/chrome/browser/ui/webui/options/certificate_manager_browsertest.cc b/chrome/browser/ui/webui/options/certificate_manager_browsertest.cc
index 959c432..0969f20 100644
--- a/chrome/browser/ui/webui/options/certificate_manager_browsertest.cc
+++ b/chrome/browser/ui/webui/options/certificate_manager_browsertest.cc
@@ -144,31 +144,16 @@
   }
 #endif
 
-  static bool FrameHasSettingsSourceHost(content::RenderFrameHost* frame) {
-    return frame->GetLastCommittedURL().DomainIs(
-        chrome::kChromeUISettingsFrameHost);
-  }
-
-  content::RenderFrameHost* SettingsFrame() {
-    // NB: The utility function content::FrameHasSourceUrl can't be used because
-    // the settings frame navigates itself to chrome://settings-frame/settings
-    // to indicate that it's showing the top-level settings. Therefore, just
-    // match the host.
-    return content::FrameMatchingPredicate(
-        browser()->tab_strip_model()->GetActiveWebContents(),
-        base::Bind(&CertificateManagerBrowserTest::FrameHasSettingsSourceHost));
-  }
-
   void ClickElement(const std::string& selector) {
     EXPECT_TRUE(content::ExecuteScript(
-        SettingsFrame(),
+        GetSettingsFrame(),
         "document.querySelector(\"" + selector + "\").click()"));
   }
 
   bool HasElement(const std::string& selector) {
     bool result;
     EXPECT_TRUE(content::ExecuteScriptAndExtractBool(
-        SettingsFrame(),
+        GetSettingsFrame(),
         "window.domAutomationController.send("
         "    !!document.querySelector('" + selector + "'));",
         &result));
diff --git a/chrome/browser/ui/webui/options/chromeos/OWNERS b/chrome/browser/ui/webui/options/chromeos/OWNERS
index 640b42d..f421534 100644
--- a/chrome/browser/ui/webui/options/chromeos/OWNERS
+++ b/chrome/browser/ui/webui/options/chromeos/OWNERS
@@ -1,10 +1,9 @@
 dpolukhin@chromium.org
 nkostylev@chromium.org
+stevenjb@chromium.org
 
 # Display options.
 mukai@chromium.org
 
 per-file bluetooth_options_handler.*=keybuk@chromium.org
 per-file bluetooth_options_handler.*=armansito@chromium.org
-per-file internet_options_handler.*=stevenjb@chromium.org
-per-file internet_options_handler.*=rkc@chromium.org
diff --git a/chrome/browser/ui/webui/options/chromeos/internet_options_handler.cc b/chrome/browser/ui/webui/options/chromeos/internet_options_handler.cc
index b065fb4..9dd7a05 100644
--- a/chrome/browser/ui/webui/options/chromeos/internet_options_handler.cc
+++ b/chrome/browser/ui/webui/options/chromeos/internet_options_handler.cc
@@ -10,27 +10,17 @@
 #include <string>
 #include <vector>
 
-#include "ash/shell.h"
-#include "ash/shell_delegate.h"
 #include "ash/system/chromeos/network/network_connect.h"
 #include "ash/system/chromeos/network/network_icon.h"
-#include "base/base64.h"
 #include "base/basictypes.h"
 #include "base/bind.h"
 #include "base/bind_helpers.h"
 #include "base/command_line.h"
-#include "base/i18n/time_formatting.h"
-#include "base/json/json_writer.h"
-#include "base/strings/string16.h"
 #include "base/strings/string_number_conversions.h"
-#include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
-#include "base/time/time.h"
 #include "base/values.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/chrome_notification_types.h"
-#include "chrome/browser/chromeos/choose_mobile_network_dialog.h"
-#include "chrome/browser/chromeos/enrollment_dialog_view.h"
 #include "chrome/browser/chromeos/login/user.h"
 #include "chrome/browser/chromeos/login/user_manager.h"
 #include "chrome/browser/chromeos/mobile_config.h"
@@ -39,14 +29,11 @@
 #include "chrome/browser/chromeos/options/network_property_ui_data.h"
 #include "chrome/browser/chromeos/settings/cros_settings.h"
 #include "chrome/browser/chromeos/sim_dialog_delegate.h"
+#include "chrome/browser/chromeos/ui/choose_mobile_network_dialog.h"
+#include "chrome/browser/chromeos/ui/mobile_config_ui.h"
 #include "chrome/browser/chromeos/ui_proxy_config_service.h"
-#include "chrome/browser/profiles/profile_manager.h"
-#include "chrome/browser/ui/browser.h"
-#include "chrome/browser/ui/browser_window.h"
-#include "chrome/browser/ui/host_desktop.h"
-#include "chrome/browser/ui/scoped_tabbed_browser_displayer.h"
-#include "chrome/browser/ui/singleton_tabs.h"
 #include "chrome/browser/ui/webui/options/chromeos/core_chromeos_options_handler.h"
+#include "chrome/browser/ui/webui/options/chromeos/internet_options_handler_strings.h"
 #include "chromeos/chromeos_switches.h"
 #include "chromeos/network/device_state.h"
 #include "chromeos/network/favorite_state.h"
@@ -70,9 +57,6 @@
 #include "content/public/browser/web_contents_view.h"
 #include "content/public/browser/web_ui.h"
 #include "grit/ash_resources.h"
-#include "grit/ash_strings.h"
-#include "grit/chromium_strings.h"
-#include "grit/generated_resources.h"
 #include "grit/locale_settings.h"
 #include "grit/theme_resources.h"
 #include "third_party/cros_system_api/dbus/service_constants.h"
@@ -80,10 +64,7 @@
 #include "ui/base/layout.h"
 #include "ui/base/resource/resource_bundle.h"
 #include "ui/base/webui/web_ui_util.h"
-#include "ui/gfx/display.h"
 #include "ui/gfx/image/image_skia.h"
-#include "ui/gfx/screen.h"
-#include "ui/views/widget/widget.h"
 
 namespace chromeos {
 namespace options {
@@ -197,7 +178,7 @@
 const char kTagLanguage[] = "language";
 const char kTagLastGoodApn[] = "lastGoodApn";
 const char kTagLocalizedName[] = "localizedName";
-const char kTagManufacturer[] = "manufacturer";
+const char kTagCellularManufacturer[] = "cellularManufacturer";
 const char kTagMdn[] = "mdn";
 const char kTagMeid[] = "meid";
 const char kTagMin[] = "min";
@@ -251,6 +232,14 @@
 const char kTagWimaxEnabled[] = "wimaxEnabled";
 const char kTagWiredList[] = "wiredList";
 const char kTagWirelessList[] = "wirelessList";
+const char kTagLoggedInUserNone[] = "none";
+const char kTagLoggedInUserRegular[] = "regular";
+const char kTagLoggedInUserOwner[] = "owner";
+const char kTagLoggedInUserGuest[] = "guest";
+const char kTagLoggedInUserRetailMode[] = "retail-mode";
+const char kTagLoggedInUserPublicAccount[] = "public-account";
+const char kTagLoggedInUserLocallyManaged[] = "locally-managed";
+const char kTagLoggedInUserKioskApp[] = "kiosk-app";
 
 const int kPreferredPriority = 1;
 
@@ -283,130 +272,27 @@
       base::Bind(&ShillError, "SetNetworkProperty"));
 }
 
-std::string ActivationStateString(const std::string& activation_state) {
-  int id;
-  if (activation_state == shill::kActivationStateActivated)
-    id = IDS_CHROMEOS_NETWORK_ACTIVATION_STATE_ACTIVATED;
-  else if (activation_state == shill::kActivationStateActivating)
-    id = IDS_CHROMEOS_NETWORK_ACTIVATION_STATE_ACTIVATING;
-  else if (activation_state == shill::kActivationStateNotActivated)
-    id = IDS_CHROMEOS_NETWORK_ACTIVATION_STATE_NOT_ACTIVATED;
-  else if (activation_state == shill::kActivationStatePartiallyActivated)
-    id = IDS_CHROMEOS_NETWORK_ACTIVATION_STATE_PARTIALLY_ACTIVATED;
-  else
-    id = IDS_CHROMEOS_NETWORK_ACTIVATION_STATE_UNKNOWN;
-  return l10n_util::GetStringUTF8(id);
-}
-
-std::string RoamingStateString(const std::string& roaming_state) {
-  int id;
-  if (roaming_state == shill::kRoamingStateHome)
-    id = IDS_CHROMEOS_NETWORK_ROAMING_STATE_HOME;
-  else if (roaming_state == shill::kRoamingStateRoaming)
-    id = IDS_CHROMEOS_NETWORK_ROAMING_STATE_ROAMING;
-  else
-    id = IDS_CHROMEOS_NETWORK_ROAMING_STATE_UNKNOWN;
-  return l10n_util::GetStringUTF8(id);
-}
-
-std::string ConnectionStateString(const std::string& state) {
-  int id;
-  if (state == shill::kUnknownString)
-    id = IDS_CHROMEOS_NETWORK_STATE_UNKNOWN;
-  else if (state == shill::kStateIdle)
-    id = IDS_CHROMEOS_NETWORK_STATE_IDLE;
-  else if (state == shill::kStateCarrier)
-    id = IDS_CHROMEOS_NETWORK_STATE_CARRIER;
-  else if (state == shill::kStateAssociation)
-    id = IDS_CHROMEOS_NETWORK_STATE_ASSOCIATION;
-  else if (state == shill::kStateConfiguration)
-    id = IDS_CHROMEOS_NETWORK_STATE_CONFIGURATION;
-  else if (state == shill::kStateReady)
-    id = IDS_CHROMEOS_NETWORK_STATE_READY;
-  else if (state == shill::kStateDisconnect)
-    id = IDS_CHROMEOS_NETWORK_STATE_DISCONNECT;
-  else if (state == shill::kStateFailure)
-    id = IDS_CHROMEOS_NETWORK_STATE_FAILURE;
-  else if (state == shill::kStateActivationFailure)
-    id = IDS_CHROMEOS_NETWORK_STATE_ACTIVATION_FAILURE;
-  else if (state == shill::kStatePortal)
-    id = IDS_CHROMEOS_NETWORK_STATE_PORTAL;
-  else if (state == shill::kStateOnline)
-    id = IDS_CHROMEOS_NETWORK_STATE_ONLINE;
-  else
-    id = IDS_CHROMEOS_NETWORK_STATE_UNRECOGNIZED;
-  return l10n_util::GetStringUTF8(id);
-}
-
-std::string LoggedInUserTypeToString(
-    LoginState::LoggedInUserType type) {
+std::string LoggedInUserTypeToJSString(LoginState::LoggedInUserType type) {
   switch (type) {
     case LoginState::LOGGED_IN_USER_NONE:
-      return "none";
+      return kTagLoggedInUserNone;
     case LoginState::LOGGED_IN_USER_REGULAR:
-      return "regular";
+      return kTagLoggedInUserRegular;
     case LoginState::LOGGED_IN_USER_OWNER:
-      return "owner";
+      return kTagLoggedInUserOwner;
     case LoginState::LOGGED_IN_USER_GUEST:
-      return "guest";
+      return kTagLoggedInUserGuest;
     case LoginState::LOGGED_IN_USER_RETAIL_MODE:
-      return "retail-mode";
+      return kTagLoggedInUserRetailMode;
     case LoginState::LOGGED_IN_USER_PUBLIC_ACCOUNT:
-      return "public-account";
+      return kTagLoggedInUserPublicAccount;
     case LoginState::LOGGED_IN_USER_LOCALLY_MANAGED:
-      return "locally-managed";
+      return kTagLoggedInUserLocallyManaged;
     case LoginState::LOGGED_IN_USER_KIOSK_APP:
-      return "kiosk-app";
-    default:
-      return "";
+      return kTagLoggedInUserKioskApp;
   }
-}
-
-std::string EncryptionString(const std::string& security,
-                             const std::string& eap_method) {
-  if (security == shill::kSecurityNone)
-    return "";
-  if (security == shill::kSecurityWpa)
-    return "WPA";
-  if (security == shill::kSecurityWep)
-    return "WEP";
-  if (security == shill::kSecurityRsn)
-    return "RSN";
-  if (security == shill::kSecurityPsk)
-    return "PSK";
-  if (security == shill::kSecurity8021x) {
-    std::string result = "8021X";
-    if (eap_method == shill::kEapMethodPEAP)
-      result += "PEAP";
-    else if (eap_method == shill::kEapMethodTLS)
-      result += "TLS";
-    else if (eap_method == shill::kEapMethodTTLS)
-      result += "TTLS";
-    else if (eap_method == shill::kEapMethodLEAP)
-      result += "LEAP";
-    return result;
-  }
-  return "Unknown";
-}
-
-std::string ProviderTypeString(
-    const std::string& provider_type,
-    const base::DictionaryValue& provider_properties) {
-  int id;
-  if (provider_type == shill::kProviderL2tpIpsec) {
-    std::string client_cert_id;
-    provider_properties.GetStringWithoutPathExpansion(
-        shill::kL2tpIpsecClientCertIdProperty, &client_cert_id);
-    if (client_cert_id.empty())
-      id = IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_L2TP_IPSEC_PSK;
-    else
-      id = IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_L2TP_IPSEC_USER_CERT;
-  } else if (provider_type == shill::kProviderOpenVpn) {
-    id = IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_OPEN_VPN;
-  } else {
-    id = IDS_CHROMEOS_NETWORK_ERROR_UNKNOWN;
-  }
-  return l10n_util::GetStringUTF8(id);
+  NOTREACHED();
+  return std::string();
 }
 
 bool HasPolicyForFavorite(const FavoriteState* favorite,
@@ -436,8 +322,10 @@
   network_info->SetString(kNetworkInfoKeyIconURL, icon_url);
 
   std::string name = state->name();
-  if (state->Matches(NetworkTypePattern::Ethernet()))
-    name = l10n_util::GetStringUTF8(IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET);
+  if (state->Matches(NetworkTypePattern::Ethernet())) {
+    name = internet_options_strings::NetworkDeviceTypeString(
+        shill::kTypeEthernet);
+  }
   network_info->SetString(kNetworkInfoKeyNetworkName, name);
   network_info->SetString(kNetworkInfoKeyNetworkType, state->type());
   network_info->SetString(kNetworkInfoKeyServicePath, state->path());
@@ -628,8 +516,7 @@
   if (!source.GetIntegerWithoutPathExpansion(src_key, &int_value))
     return;
   if (as_string) {
-    std::string str = base::StringPrintf("%d", int_value);
-    dest->SetStringWithoutPathExpansion(dest_key, str);
+    dest->SetStringWithoutPathExpansion(dest_key, base::IntToString(int_value));
   } else {
     dest->SetIntegerWithoutPathExpansion(dest_key, int_value);
   }
@@ -652,8 +539,9 @@
   provider_properties->GetStringWithoutPathExpansion(
       shill::kTypeProperty, &provider_type);
   dictionary->SetString(kTagProviderType,
-                        ProviderTypeString(provider_type,
-                                           *provider_properties));
+                        internet_options_strings::ProviderTypeString(
+                            provider_type,
+                            *provider_properties));
 
   std::string username;
   if (provider_type == shill::kProviderOpenVpn) {
@@ -673,8 +561,7 @@
   hostname_ui_data.ParseOncProperty(
       onc_source,
       onc,
-      base::StringPrintf("%s.%s", ::onc::network_config::kVPN,
-                         ::onc::vpn::kHost));
+      ::onc::network_config::VpnProperty(::onc::vpn::kHost));
   std::string provider_host;
   provider_properties->GetStringWithoutPathExpansion(
       shill::kHostProperty, &provider_host);
@@ -715,27 +602,296 @@
 
 void PopulateWifiDetails(const NetworkState* wifi,
                          const base::DictionaryValue& shill_properties,
-                         base::DictionaryValue* dictionary);
-// TODO(stevenjb): Move implementation here.
+                         base::DictionaryValue* dictionary) {
+  dictionary->SetString(kTagSsid, wifi->name());
+  dictionary->SetInteger(kTagStrength, wifi->signal_strength());
+  dictionary->SetString(kTagEncryption,
+                        internet_options_strings::EncryptionString(
+                            wifi->security(), wifi->eap_method()));
+  CopyStringFromDictionary(
+      shill_properties, shill::kWifiBSsid, kTagBssid, dictionary);
+  CopyIntegerFromDictionary(shill_properties,
+                            shill::kWifiFrequency,
+                            kTagFrequency,
+                            false,
+                            dictionary);
+}
 
 void PopulateWimaxDetails(const NetworkState* wimax,
                           const base::DictionaryValue& shill_properties,
-                          base::DictionaryValue* dictionary);
-// TODO(stevenjb): Move implementation here.
+                          base::DictionaryValue* dictionary) {
+  dictionary->SetInteger(kTagStrength, wimax->signal_strength());
+  CopyStringFromDictionary(
+      shill_properties, shill::kEapIdentityProperty, kTagIdentity, dictionary);
+}
 
 void CreateDictionaryFromCellularApn(const base::DictionaryValue* apn,
-                                     base::DictionaryValue* dictionary);
-// TODO(stevenjb): Move implementation here.
+                                     base::DictionaryValue* dictionary) {
+  CopyStringFromDictionary(*apn, shill::kApnProperty, kTagApn, dictionary);
+  CopyStringFromDictionary(
+      *apn, shill::kApnNetworkIdProperty, kTagNetworkId, dictionary);
+  CopyStringFromDictionary(
+      *apn, shill::kApnUsernameProperty, kTagUsername, dictionary);
+  CopyStringFromDictionary(
+      *apn, shill::kApnPasswordProperty, kTagPassword, dictionary);
+  CopyStringFromDictionary(*apn, shill::kApnNameProperty, kTagName, dictionary);
+  CopyStringFromDictionary(
+      *apn, shill::kApnLocalizedNameProperty, kTagLocalizedName, dictionary);
+  CopyStringFromDictionary(
+      *apn, shill::kApnLanguageProperty, kTagLanguage, dictionary);
+}
 
 void PopulateCellularDetails(const NetworkState* cellular,
                              const base::DictionaryValue& shill_properties,
-                             base::DictionaryValue* dictionary);
-// TODO(stevenjb): Move implementation here.
+                             base::DictionaryValue* dictionary) {
+  dictionary->SetBoolean(kTagCarrierSelectFlag,
+                         CommandLine::ForCurrentProcess()->HasSwitch(
+                             chromeos::switches::kEnableCarrierSwitching));
+  // Cellular network / connection settings.
+  dictionary->SetString(kTagNetworkTechnology, cellular->network_technology());
+  dictionary->SetString(kTagActivationState,
+                        internet_options_strings::ActivationStateString(
+                            cellular->activation_state()));
+  dictionary->SetString(kTagRoamingState,
+                        internet_options_strings::RoamingStateString(
+                            cellular->roaming()));
+  dictionary->SetString(
+      kTagRestrictedPool,
+      internet_options_strings::RestrictedStateString(
+          cellular->connection_state()));
+
+  const base::DictionaryValue* serving_operator = NULL;
+  if (shill_properties.GetDictionaryWithoutPathExpansion(
+          shill::kServingOperatorProperty, &serving_operator)) {
+    CopyStringFromDictionary(*serving_operator,
+                             shill::kOperatorNameKey,
+                             kTagOperatorName,
+                             dictionary);
+    CopyStringFromDictionary(*serving_operator,
+                             shill::kOperatorCodeKey,
+                             kTagOperatorCode,
+                             dictionary);
+  }
+
+  const base::DictionaryValue* olp = NULL;
+  if (shill_properties.GetDictionaryWithoutPathExpansion(
+          shill::kPaymentPortalProperty, &olp)) {
+    std::string url;
+    olp->GetStringWithoutPathExpansion(shill::kPaymentPortalURL, &url);
+    dictionary->SetString(kTagSupportUrl, url);
+  }
+
+  base::DictionaryValue* apn = new base::DictionaryValue;
+  const base::DictionaryValue* source_apn = NULL;
+  if (shill_properties.GetDictionaryWithoutPathExpansion(
+          shill::kCellularApnProperty, &source_apn)) {
+    CreateDictionaryFromCellularApn(source_apn, apn);
+  }
+  dictionary->Set(kTagApn, apn);
+
+  base::DictionaryValue* last_good_apn = new base::DictionaryValue;
+  if (shill_properties.GetDictionaryWithoutPathExpansion(
+          shill::kCellularLastGoodApnProperty, &source_apn)) {
+    CreateDictionaryFromCellularApn(source_apn, last_good_apn);
+  }
+  dictionary->Set(kTagLastGoodApn, last_good_apn);
+
+  // These default to empty and are only set if device != NULL.
+  std::string carrier_id;
+  std::string mdn;
+
+  // Device settings.
+  const DeviceState* device =
+      NetworkHandler::Get()->network_state_handler()->GetDeviceState(
+          cellular->device_path());
+  if (device) {
+    // TODO(stevenjb): Add NetworkDeviceHandler::GetProperties() and use that
+    // to retrieve the complete dictionary of device properties, instead of
+    // caching them (will be done for the new UI).
+    const base::DictionaryValue& device_properties = device->properties();
+    const NetworkPropertyUIData cellular_property_ui_data(
+        cellular->ui_data().onc_source());
+    CopyStringFromDictionary(device_properties,
+                             shill::kManufacturerProperty,
+                             kTagCellularManufacturer,
+                             dictionary);
+    CopyStringFromDictionary(
+        device_properties, shill::kModelIDProperty, kTagModelId, dictionary);
+    CopyStringFromDictionary(device_properties,
+                             shill::kFirmwareRevisionProperty,
+                             kTagFirmwareRevision,
+                             dictionary);
+    CopyStringFromDictionary(device_properties,
+                             shill::kHardwareRevisionProperty,
+                             kTagHardwareRevision,
+                             dictionary);
+    CopyIntegerFromDictionary(device_properties,
+                              shill::kPRLVersionProperty,
+                              kTagPrlVersion,
+                              true,
+                              dictionary);
+    CopyStringFromDictionary(
+        device_properties, shill::kMeidProperty, kTagMeid, dictionary);
+    CopyStringFromDictionary(
+        device_properties, shill::kIccidProperty, kTagIccid, dictionary);
+    CopyStringFromDictionary(
+        device_properties, shill::kImeiProperty, kTagImei, dictionary);
+    mdn = CopyStringFromDictionary(
+        device_properties, shill::kMdnProperty, kTagMdn, dictionary);
+    CopyStringFromDictionary(
+        device_properties, shill::kImsiProperty, kTagImsi, dictionary);
+    CopyStringFromDictionary(
+        device_properties, shill::kEsnProperty, kTagEsn, dictionary);
+    CopyStringFromDictionary(
+        device_properties, shill::kMinProperty, kTagMin, dictionary);
+    std::string family;
+    device_properties.GetStringWithoutPathExpansion(
+        shill::kTechnologyFamilyProperty, &family);
+    dictionary->SetBoolean(kTagGsm, family == shill::kNetworkTechnologyGsm);
+
+    SetValueDictionary(dictionary,
+                       kTagSimCardLockEnabled,
+                       new base::FundamentalValue(device->sim_lock_enabled()),
+                       cellular_property_ui_data);
+
+    carrier_id = device->home_provider_id();
+
+    MobileConfig* config = MobileConfig::GetInstance();
+    if (config->IsReady()) {
+      const MobileConfig::Carrier* carrier = config->GetCarrier(carrier_id);
+      if (carrier && !carrier->top_up_url().empty())
+        dictionary->SetString(kTagCarrierUrl, carrier->top_up_url());
+    }
+
+    base::ListValue* apn_list_value = new base::ListValue();
+    const base::ListValue* apn_list;
+    if (device_properties.GetListWithoutPathExpansion(
+            shill::kCellularApnListProperty, &apn_list)) {
+      for (base::ListValue::const_iterator iter = apn_list->begin();
+           iter != apn_list->end();
+           ++iter) {
+        const base::DictionaryValue* dict;
+        if ((*iter)->GetAsDictionary(&dict)) {
+          base::DictionaryValue* apn = new base::DictionaryValue;
+          CreateDictionaryFromCellularApn(dict, apn);
+          apn_list_value->Append(apn);
+        }
+      }
+    }
+    SetValueDictionary(dictionary,
+                       kTagProviderApnList,
+                       apn_list_value,
+                       cellular_property_ui_data);
+    if (CommandLine::ForCurrentProcess()->HasSwitch(
+            chromeos::switches::kEnableCarrierSwitching)) {
+      const base::ListValue* supported_carriers;
+      if (device_properties.GetListWithoutPathExpansion(
+              shill::kSupportedCarriersProperty, &supported_carriers)) {
+        dictionary->Set(kTagCarriers, supported_carriers->DeepCopy());
+        dictionary->SetInteger(
+            kTagCurrentCarrierIndex,
+            FindCurrentCarrierIndex(supported_carriers, device));
+      } else {
+        // In case of any error, set the current carrier tag to -1 indicating
+        // to the JS code to fallback to a single carrier.
+        dictionary->SetInteger(kTagCurrentCarrierIndex, -1);
+      }
+    }
+  }
+
+  // Set Cellular Buttons Visibility
+  dictionary->SetBoolean(
+      kTagDisableConnectButton,
+      cellular->activation_state() == shill::kActivationStateActivating ||
+          cellular->IsConnectingState());
+
+  // Don't show any account management related buttons if the activation
+  // state is unknown or no payment portal URL is available.
+  std::string support_url;
+  if (cellular->activation_state() == shill::kActivationStateUnknown ||
+      !dictionary->GetString(kTagSupportUrl, &support_url) ||
+      support_url.empty()) {
+    VLOG(2) << "No support URL is available. Don't display buttons.";
+    return;
+  }
+
+  if (cellular->activation_state() != shill::kActivationStateActivating &&
+      cellular->activation_state() != shill::kActivationStateActivated) {
+    dictionary->SetBoolean(kTagShowActivateButton, true);
+  } else {
+    bool may_show_portal_button = false;
+
+    // If an online payment URL was provided by shill, then this means that the
+    // "View Account" button should be shown for the current carrier.
+    if (olp) {
+      std::string url;
+      olp->GetStringWithoutPathExpansion(shill::kPaymentPortalURL, &url);
+      may_show_portal_button = !url.empty();
+    }
+    // If no online payment URL was provided by shill, fall back to
+    // MobileConfig to determine if the "View Account" should be shown.
+    if (!may_show_portal_button && MobileConfig::GetInstance()->IsReady()) {
+      const MobileConfig::Carrier* carrier =
+          MobileConfig::GetInstance()->GetCarrier(carrier_id);
+      may_show_portal_button = carrier && carrier->show_portal_button();
+    }
+    if (may_show_portal_button) {
+      // The button should be shown for a LTE network even when the LTE network
+      // is not connected, but CrOS is online. This is done to enable users to
+      // update their plan even if they are out of credits.
+      // The button should not be shown when the device's mdn is not set,
+      // because the network's proper portal url cannot be generated without it
+      const NetworkState* default_network =
+          NetworkHandler::Get()->network_state_handler()->DefaultNetwork();
+      const std::string& technology = cellular->network_technology();
+      bool force_show_view_account_button =
+          (technology == shill::kNetworkTechnologyLte ||
+           technology == shill::kNetworkTechnologyLteAdvanced) &&
+          default_network && !mdn.empty();
+
+      // The button will trigger ShowMorePlanInfoCallback() which will open
+      // carrier specific portal.
+      if (cellular->IsConnectedState() || force_show_view_account_button)
+        dictionary->SetBoolean(kTagShowViewAccountButton, true);
+    }
+  }
+}
 
 void PopulateConnectionDetails(const NetworkState* network,
                                const base::DictionaryValue& shill_properties,
-                               base::DictionaryValue* dictionary);
-// TODO(stevenjb): Move implementation here.
+                               base::DictionaryValue* dictionary) {
+  dictionary->SetString(kNetworkInfoKeyServicePath, network->path());
+  dictionary->SetString(kTagServiceName, network->name());
+  dictionary->SetBoolean(kTagConnecting, network->IsConnectingState());
+  dictionary->SetBoolean(kTagConnected, network->IsConnectedState());
+  dictionary->SetString(kTagConnectionState,
+                        internet_options_strings::ConnectionStateString(
+                            network->connection_state()));
+  dictionary->SetString(kTagNetworkName, network->name());
+  dictionary->SetString(
+      kTagErrorState,
+      ash::network_connect::ErrorString(network->error(), network->path()));
+
+  dictionary->SetBoolean(kTagRemembered, !network->profile_path().empty());
+  bool shared = !network->IsPrivate();
+  dictionary->SetBoolean(kTagShared, shared);
+
+  const std::string& type = network->type();
+  const NetworkState* connected_network =
+      NetworkHandler::Get()->network_state_handler()->ConnectedNetworkByType(
+          NetworkTypePattern::Primitive(type));
+
+  dictionary->SetBoolean(kTagDeviceConnected, connected_network != NULL);
+
+  if (type == shill::kTypeWifi)
+    PopulateWifiDetails(network, shill_properties, dictionary);
+  else if (type == shill::kTypeWimax)
+    PopulateWimaxDetails(network, shill_properties, dictionary);
+  else if (type == shill::kTypeCellular)
+    PopulateCellularDetails(network, shill_properties, dictionary);
+  else if (type == shill::kTypeVPN)
+    PopulateVPNDetails(network, shill_properties, dictionary);
+}
 
 // Helper methods for SetIPConfigProperties
 bool AppendPropertyKeyIfPresent(const std::string& key,
@@ -807,162 +963,7 @@
 void InternetOptionsHandler::GetLocalizedValues(
     base::DictionaryValue* localized_strings) {
   DCHECK(localized_strings);
-
-  static OptionsStringResource resources[] = {
-
-    // Main settings page.
-
-    { "ethernetTitle", IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET },
-    { "wifiTitle", IDS_OPTIONS_SETTINGS_SECTION_TITLE_WIFI_NETWORK },
-    { "wimaxTitle", IDS_OPTIONS_SETTINGS_SECTION_TITLE_WIMAX_NETWORK },
-    { "cellularTitle", IDS_OPTIONS_SETTINGS_SECTION_TITLE_CELLULAR_NETWORK },
-    { "vpnTitle", IDS_OPTIONS_SETTINGS_SECTION_TITLE_PRIVATE_NETWORK },
-    { "networkNotConnected", IDS_OPTIONS_SETTINGS_NETWORK_NOT_CONNECTED },
-    { "networkConnected", IDS_CHROMEOS_NETWORK_STATE_READY },
-    { "joinOtherNetwork", IDS_OPTIONS_SETTINGS_NETWORK_OTHER },
-    { "networkOffline", IDS_OPTIONS_SETTINGS_NETWORK_OFFLINE },
-    { "networkDisabled", IDS_OPTIONS_SETTINGS_NETWORK_DISABLED },
-    { "networkOnline", IDS_OPTIONS_SETTINGS_NETWORK_ONLINE },
-    { "networkOptions", IDS_OPTIONS_SETTINGS_NETWORK_OPTIONS },
-    { "turnOffWifi", IDS_OPTIONS_SETTINGS_NETWORK_DISABLE_WIFI },
-    { "turnOffWimax", IDS_OPTIONS_SETTINGS_NETWORK_DISABLE_WIMAX },
-    { "turnOffCellular", IDS_OPTIONS_SETTINGS_NETWORK_DISABLE_CELLULAR },
-    { "disconnectNetwork", IDS_OPTIONS_SETTINGS_DISCONNECT },
-    { "preferredNetworks", IDS_OPTIONS_SETTINGS_PREFERRED_NETWORKS_LABEL },
-    { "preferredNetworksPage", IDS_OPTIONS_SETTINGS_PREFERRED_NETWORKS_TITLE },
-    { "useSharedProxies", IDS_OPTIONS_SETTINGS_USE_SHARED_PROXIES },
-    { "addConnectionTitle",
-      IDS_OPTIONS_SETTINGS_SECTION_TITLE_ADD_CONNECTION },
-    { "addConnectionWifi", IDS_OPTIONS_SETTINGS_ADD_CONNECTION_WIFI },
-    { "addConnectionVPN", IDS_STATUSBAR_NETWORK_ADD_VPN },
-    { "otherCellularNetworks", IDS_OPTIONS_SETTINGS_OTHER_CELLULAR_NETWORKS },
-    { "enableDataRoaming", IDS_OPTIONS_SETTINGS_ENABLE_DATA_ROAMING },
-    { "disableDataRoaming", IDS_OPTIONS_SETTINGS_DISABLE_DATA_ROAMING },
-    { "dataRoamingDisableToggleTooltip",
-      IDS_OPTIONS_SETTINGS_TOGGLE_DATA_ROAMING_RESTRICTION },
-    { "activateNetwork", IDS_STATUSBAR_NETWORK_DEVICE_ACTIVATE },
-
-    // Internet details dialog.
-
-    { "changeProxyButton",
-      IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_CHANGE_PROXY_BUTTON },
-    { "managedNetwork", IDS_OPTIONS_SETTINGS_MANAGED_NETWORK },
-    { "wifiNetworkTabLabel", IDS_OPTIONS_SETTINGS_INTERNET_TAB_CONNECTION },
-    { "vpnTabLabel", IDS_OPTIONS_SETTINGS_INTERNET_TAB_VPN },
-    { "cellularConnTabLabel", IDS_OPTIONS_SETTINGS_INTERNET_TAB_CONNECTION },
-    { "cellularDeviceTabLabel", IDS_OPTIONS_SETTINGS_INTERNET_TAB_DEVICE },
-    { "networkTabLabel", IDS_OPTIONS_SETTINGS_INTERNET_TAB_NETWORK },
-    { "securityTabLabel", IDS_OPTIONS_SETTINGS_INTERNET_TAB_SECURITY },
-    { "proxyTabLabel", IDS_OPTIONS_SETTINGS_INTERNET_TAB_PROXY },
-    { "connectionState", IDS_OPTIONS_SETTINGS_INTERNET_CONNECTION_STATE },
-    { "inetAddress", IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_ADDRESS },
-    { "inetNetmask", IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_SUBNETMASK },
-    { "inetGateway", IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_GATEWAY },
-    { "inetNameServers", IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_DNSSERVER },
-    { "ipAutomaticConfiguration",
-        IDS_OPTIONS_SETTINGS_INTERNET_IP_AUTOMATIC_CONFIGURATION },
-    { "automaticNameServers",
-        IDS_OPTIONS_SETTINGS_INTERNET_AUTOMATIC_NAME_SERVERS },
-    { "userNameServer1", IDS_OPTIONS_SETTINGS_INTERNET_USER_NAME_SERVER_1 },
-    { "userNameServer2", IDS_OPTIONS_SETTINGS_INTERNET_USER_NAME_SERVER_2 },
-    { "userNameServer3", IDS_OPTIONS_SETTINGS_INTERNET_USER_NAME_SERVER_3 },
-    { "userNameServer4", IDS_OPTIONS_SETTINGS_INTERNET_USER_NAME_SERVER_4 },
-    { "googleNameServers", IDS_OPTIONS_SETTINGS_INTERNET_GOOGLE_NAME_SERVERS },
-    { "userNameServers", IDS_OPTIONS_SETTINGS_INTERNET_USER_NAME_SERVERS },
-    { "hardwareAddress",
-      IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_HARDWARE_ADDRESS },
-    { "detailsInternetDismiss", IDS_CLOSE },
-    { "activateButton", IDS_OPTIONS_SETTINGS_ACTIVATE },
-    { "buyplanButton", IDS_OPTIONS_SETTINGS_BUY_PLAN },
-    { "connectButton", IDS_OPTIONS_SETTINGS_CONNECT },
-    { "configureButton", IDS_OPTIONS_SETTINGS_CONFIGURE },
-    { "disconnectButton", IDS_OPTIONS_SETTINGS_DISCONNECT },
-    { "viewAccountButton", IDS_STATUSBAR_NETWORK_VIEW_ACCOUNT },
-    { "wimaxConnTabLabel", IDS_OPTIONS_SETTINGS_INTERNET_TAB_WIMAX },
-
-    // Wifi Tab.
-
-    { "inetSsid", IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_NETWORK_ID },
-    { "inetBssid", IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_NETWORK_BSSID },
-    { "inetEncryption",
-      IDS_OPTIONS_SETTIGNS_INTERNET_OPTIONS_NETWORK_ENCRYPTION },
-    { "inetFrequency",
-      IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_NETWORK_FREQUENCY },
-    { "inetFrequencyFormat",
-      IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_NETWORK_FREQUENCY_MHZ },
-    { "inetSignalStrength",
-      IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_NETWORK_STRENGTH },
-    { "inetSignalStrengthFormat",
-      IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_NETWORK_STRENGTH_PERCENTAGE },
-    { "inetPassProtected",
-      IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_NET_PROTECTED },
-    { "inetNetworkShared",
-      IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_NETWORK_SHARED },
-    { "inetPreferredNetwork",
-      IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_PREFER_NETWORK },
-    { "inetAutoConnectNetwork",
-      IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_AUTO_CONNECT },
-    { "inetLogin", IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_LOGIN },
-    { "inetShowPass", IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_SHOWPASSWORD },
-    { "inetPassPrompt", IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_PASSWORD },
-    { "inetSsidPrompt", IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_SSID },
-    { "inetStatus", IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_STATUS_TITLE },
-    { "inetConnect", IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_CONNECT_TITLE },
-
-    // VPN Tab.
-
-    { "inetServiceName",
-      IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_VPN_SERVICE_NAME },
-    { "inetServerHostname",
-      IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_VPN_SERVER_HOSTNAME },
-    { "inetProviderType",
-      IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_VPN_PROVIDER_TYPE },
-    { "inetUsername", IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_VPN_USERNAME },
-
-    // Cellular Tab.
-
-    { "serviceName", IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_SERVICE_NAME },
-    { "networkTechnology",
-      IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_NETWORK_TECHNOLOGY },
-    { "operatorName", IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_OPERATOR },
-    { "operatorCode", IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_OPERATOR_CODE },
-    { "activationState",
-      IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_ACTIVATION_STATE },
-    { "roamingState", IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_ROAMING_STATE },
-    { "restrictedPool",
-      IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_RESTRICTED_POOL },
-    { "errorState", IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_ERROR_STATE },
-    { "manufacturer", IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_MANUFACTURER },
-    { "modelId", IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_MODEL_ID },
-    { "firmwareRevision",
-      IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_FIRMWARE_REVISION },
-    { "hardwareRevision",
-      IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_HARDWARE_REVISION },
-    { "prlVersion", IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_PRL_VERSION },
-    { "cellularApnLabel", IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_APN },
-    { "cellularApnOther", IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_APN_OTHER },
-    { "cellularApnUsername",
-      IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_APN_USERNAME },
-    { "cellularApnPassword",
-      IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_APN_PASSWORD },
-    { "cellularApnUseDefault",
-      IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_APN_CLEAR },
-    { "cellularApnSet", IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_APN_SET },
-    { "cellularApnCancel", IDS_CANCEL },
-
-    // Security Tab.
-
-    { "accessSecurityTabLink",
-      IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_ACCESS_SECURITY_TAB },
-    { "lockSimCard", IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_LOCK_SIM_CARD },
-    { "changePinButton",
-      IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_CHANGE_PIN_BUTTON },
-
-    // Proxy Tab.
-    { "webProxyAutoDiscoveryUrl", IDS_PROXY_WEB_PROXY_AUTO_DISCOVERY },
-  };
-
-  RegisterStrings(localized_strings, resources, arraysize(resources));
+  internet_options_strings::RegisterLocalizedStrings(localized_strings);
 
   std::string owner;
   chromeos::CrosSettings::Get()->GetString(chromeos::kDeviceOwner, &owner);
@@ -1081,23 +1082,8 @@
     return;
   }
   if (device->IsSimAbsent()) {
-    MobileConfig* config = MobileConfig::GetInstance();
-    if (config->IsReady()) {
-      const MobileConfig::LocaleConfig* locale_config =
-          config->GetLocaleConfig();
-      if (locale_config) {
-        std::string setup_url = locale_config->setup_url();
-        if (!setup_url.empty()) {
-          // The mobile device will be managed by the primary user.
-          chrome::ScopedTabbedBrowserDisplayer displayer(
-               ProfileManager::GetPrimaryUserProfile(),
-               chrome::HOST_DESKTOP_TYPE_ASH);
-          chrome::ShowSingletonTab(displayer.browser(), GURL(setup_url));
-          return;
-        }
-      }
-    }
-    // TODO(nkostylev): Show generic error message. http://crosbug.com/15444
+    mobile_config_ui::DisplayConfigDialog();
+    return;
   }
   LOG(ERROR) << "EnableCellularCallback called for enabled mobile device";
 }
@@ -1263,7 +1249,7 @@
 
 void InternetOptionsHandler::ChangePinCallback(const base::ListValue* args) {
   SimDialogDelegate::ShowDialog(GetNativeWindow(),
-      SimDialogDelegate::SIM_DIALOG_CHANGE_PIN);
+                                SimDialogDelegate::SIM_DIALOG_CHANGE_PIN);
 }
 
 void InternetOptionsHandler::RefreshNetworksCallback(
@@ -1348,9 +1334,8 @@
   if (!web_ui())
     return;
   base::StringValue login_type(
-      LoggedInUserTypeToString(LoginState::Get()->GetLoggedInUserType()));
-  web_ui()->CallJavascriptFunction(
-      kUpdateLoggedInUserTypeFunction, login_type);
+      LoggedInUserTypeToJSString(LoginState::Get()->GetLoggedInUserType()));
+  web_ui()->CallJavascriptFunction(kUpdateLoggedInUserTypeFunction, login_type);
 }
 
 void InternetOptionsHandler::Observe(
@@ -1615,10 +1600,8 @@
       content::RecordAction(
           base::UserMetricsAction("Options_NetworkShowDetailsWifiConnected"));
     }
-    onc_path_to_auto_connect = base::StringPrintf(
-        "%s.%s",
-        ::onc::network_config::kWiFi,
-        ::onc::wifi::kAutoConnect);
+    onc_path_to_auto_connect =
+        ::onc::network_config::WifiProperty(::onc::wifi::kAutoConnect);
   } else if (type == shill::kTypeVPN) {
     content::RecordAction(
         base::UserMetricsAction("Options_NetworkShowDetailsVPN"));
@@ -1626,9 +1609,7 @@
       content::RecordAction(
           base::UserMetricsAction("Options_NetworkShowDetailsVPNConnected"));
     }
-    onc_path_to_auto_connect = base::StringPrintf(
-        "%s.%s",
-        ::onc::network_config::kVPN,
+    onc_path_to_auto_connect = ::onc::network_config::VpnProperty(
         ::onc::vpn::kAutoConnect);
   } else if (type == shill::kTypeCellular) {
     content::RecordAction(
@@ -1657,287 +1638,6 @@
   web_ui()->CallJavascriptFunction(kShowDetailedInfoFunction, dictionary);
 }
 
-namespace {
-
-void PopulateConnectionDetails(const NetworkState* network,
-                               const base::DictionaryValue& shill_properties,
-                               base::DictionaryValue* dictionary) {
-  dictionary->SetString(kNetworkInfoKeyServicePath, network->path());
-  dictionary->SetString(kTagServiceName, network->name());
-  dictionary->SetBoolean(kTagConnecting, network->IsConnectingState());
-  dictionary->SetBoolean(kTagConnected, network->IsConnectedState());
-  dictionary->SetString(kTagConnectionState,
-                        ConnectionStateString(network->connection_state()));
-  dictionary->SetString(kTagNetworkName, network->name());
-  dictionary->SetString(
-      kTagErrorState,
-      ash::network_connect::ErrorString(network->error(), network->path()));
-
-  dictionary->SetBoolean(kTagRemembered, !network->profile_path().empty());
-  bool shared = !network->IsPrivate();
-  dictionary->SetBoolean(kTagShared, shared);
-
-  const std::string& type = network->type();
-  const NetworkState* connected_network =
-      NetworkHandler::Get()->network_state_handler()->ConnectedNetworkByType(
-          NetworkTypePattern::Primitive(type));
-
-  dictionary->SetBoolean(kTagDeviceConnected, connected_network != NULL);
-
-  if (type == shill::kTypeWifi)
-    PopulateWifiDetails(network, shill_properties, dictionary);
-  else if (type == shill::kTypeWimax)
-    PopulateWimaxDetails(network, shill_properties, dictionary);
-  else if (type == shill::kTypeCellular)
-    PopulateCellularDetails(network, shill_properties, dictionary);
-  else if (type == shill::kTypeVPN)
-    PopulateVPNDetails(network, shill_properties, dictionary);
-}
-
-void PopulateWifiDetails(const NetworkState* wifi,
-                         const base::DictionaryValue& shill_properties,
-                         base::DictionaryValue* dictionary) {
-  dictionary->SetString(kTagSsid, wifi->name());
-  dictionary->SetInteger(kTagStrength, wifi->signal_strength());
-  dictionary->SetString(kTagEncryption,
-                        EncryptionString(wifi->security(), wifi->eap_method()));
-  CopyStringFromDictionary(shill_properties, shill::kWifiBSsid,
-                           kTagBssid, dictionary);
-  CopyIntegerFromDictionary(shill_properties, shill::kWifiFrequency,
-                            kTagFrequency, false, dictionary);
-}
-
-void PopulateWimaxDetails(const NetworkState* wimax,
-                          const base::DictionaryValue& shill_properties,
-                          base::DictionaryValue* dictionary) {
-  dictionary->SetInteger(kTagStrength, wimax->signal_strength());
-  CopyStringFromDictionary(shill_properties, shill::kEapIdentityProperty,
-                           kTagIdentity, dictionary);
-}
-
-void CreateDictionaryFromCellularApn(const base::DictionaryValue* apn,
-                                     base::DictionaryValue* dictionary) {
-  CopyStringFromDictionary(*apn, shill::kApnProperty,
-                           kTagApn, dictionary);
-  CopyStringFromDictionary(*apn, shill::kApnNetworkIdProperty,
-                           kTagNetworkId, dictionary);
-  CopyStringFromDictionary(*apn, shill::kApnUsernameProperty,
-                           kTagUsername, dictionary);
-  CopyStringFromDictionary(*apn, shill::kApnPasswordProperty,
-                           kTagPassword, dictionary);
-  CopyStringFromDictionary(*apn, shill::kApnNameProperty,
-                           kTagName, dictionary);
-  CopyStringFromDictionary(*apn, shill::kApnLocalizedNameProperty,
-                           kTagLocalizedName, dictionary);
-  CopyStringFromDictionary(*apn, shill::kApnLanguageProperty,
-                           kTagLanguage, dictionary);
-}
-
-void PopulateCellularDetails(const NetworkState* cellular,
-                             const base::DictionaryValue& shill_properties,
-                             base::DictionaryValue* dictionary) {
-  dictionary->SetBoolean(kTagCarrierSelectFlag,
-                         CommandLine::ForCurrentProcess()->HasSwitch(
-                             chromeos::switches::kEnableCarrierSwitching));
-  // Cellular network / connection settings.
-  dictionary->SetString(kTagNetworkTechnology, cellular->network_technology());
-  dictionary->SetString(kTagActivationState,
-                        ActivationStateString(cellular->activation_state()));
-  dictionary->SetString(kTagRoamingState,
-                        RoamingStateString(cellular->roaming()));
-  bool restricted = cellular->connection_state() == shill::kStatePortal;
-  dictionary->SetString(kTagRestrictedPool,
-                        restricted ?
-                        l10n_util::GetStringUTF8(
-                            IDS_CONFIRM_MESSAGEBOX_YES_BUTTON_LABEL) :
-                        l10n_util::GetStringUTF8(
-                            IDS_CONFIRM_MESSAGEBOX_NO_BUTTON_LABEL));
-
-  const base::DictionaryValue* serving_operator = NULL;
-  if (shill_properties.GetDictionaryWithoutPathExpansion(
-          shill::kServingOperatorProperty, &serving_operator)) {
-    CopyStringFromDictionary(*serving_operator, shill::kOperatorNameKey,
-                             kTagOperatorName, dictionary);
-    CopyStringFromDictionary(*serving_operator, shill::kOperatorCodeKey,
-                             kTagOperatorCode, dictionary);
-  }
-
-  const base::DictionaryValue* olp = NULL;
-  if (shill_properties.GetDictionaryWithoutPathExpansion(
-          shill::kPaymentPortalProperty, &olp)) {
-    std::string url;
-    olp->GetStringWithoutPathExpansion(shill::kPaymentPortalURL, &url);
-    dictionary->SetString(kTagSupportUrl, url);
-  }
-
-  base::DictionaryValue* apn = new base::DictionaryValue;
-  const base::DictionaryValue* source_apn = NULL;
-  if (shill_properties.GetDictionaryWithoutPathExpansion(
-          shill::kCellularApnProperty, &source_apn)) {
-    CreateDictionaryFromCellularApn(source_apn, apn);
-  }
-  dictionary->Set(kTagApn, apn);
-
-  base::DictionaryValue* last_good_apn = new base::DictionaryValue;
-  if (shill_properties.GetDictionaryWithoutPathExpansion(
-          shill::kCellularLastGoodApnProperty, &source_apn)) {
-    CreateDictionaryFromCellularApn(source_apn, last_good_apn);
-  }
-  dictionary->Set(kTagLastGoodApn, last_good_apn);
-
-  // These default to empty and are only set if device != NULL.
-  std::string carrier_id;
-  std::string mdn;
-
-  // Device settings.
-  const DeviceState* device = NetworkHandler::Get()->network_state_handler()->
-      GetDeviceState(cellular->device_path());
-  if (device) {
-    // TODO(stevenjb): Add NetworkDeviceHandler::GetProperties() and use that
-    // to retrieve the complete dictionary of device properties, instead of
-    // caching them (will be done for the new UI).
-    const base::DictionaryValue& device_properties = device->properties();
-    const NetworkPropertyUIData cellular_property_ui_data(
-        cellular->ui_data().onc_source());
-    CopyStringFromDictionary(device_properties, shill::kManufacturerProperty,
-                            kTagManufacturer, dictionary);
-    CopyStringFromDictionary(device_properties, shill::kModelIDProperty,
-                            kTagModelId, dictionary);
-    CopyStringFromDictionary(device_properties,
-                            shill::kFirmwareRevisionProperty,
-                            kTagFirmwareRevision, dictionary);
-    CopyStringFromDictionary(device_properties,
-                            shill::kHardwareRevisionProperty,
-                            kTagHardwareRevision, dictionary);
-    CopyIntegerFromDictionary(device_properties, shill::kPRLVersionProperty,
-                             kTagPrlVersion, true, dictionary);
-    CopyStringFromDictionary(device_properties, shill::kMeidProperty,
-                            kTagMeid, dictionary);
-    CopyStringFromDictionary(device_properties, shill::kIccidProperty,
-                            kTagIccid, dictionary);
-    CopyStringFromDictionary(device_properties, shill::kImeiProperty,
-                            kTagImei, dictionary);
-    mdn = CopyStringFromDictionary(device_properties, shill::kMdnProperty,
-                                   kTagMdn, dictionary);
-    CopyStringFromDictionary(device_properties, shill::kImsiProperty,
-                            kTagImsi, dictionary);
-    CopyStringFromDictionary(device_properties, shill::kEsnProperty,
-                            kTagEsn, dictionary);
-    CopyStringFromDictionary(device_properties, shill::kMinProperty,
-                            kTagMin, dictionary);
-    std::string family;
-    device_properties.GetStringWithoutPathExpansion(
-        shill::kTechnologyFamilyProperty, &family);
-    dictionary->SetBoolean(kTagGsm, family == shill::kNetworkTechnologyGsm);
-
-    SetValueDictionary(
-        dictionary, kTagSimCardLockEnabled,
-        new base::FundamentalValue(device->sim_lock_enabled()),
-        cellular_property_ui_data);
-
-    carrier_id = device->home_provider_id();
-
-    MobileConfig* config = MobileConfig::GetInstance();
-    if (config->IsReady()) {
-      const MobileConfig::Carrier* carrier = config->GetCarrier(carrier_id);
-      if (carrier && !carrier->top_up_url().empty())
-        dictionary->SetString(kTagCarrierUrl, carrier->top_up_url());
-    }
-
-    base::ListValue* apn_list_value = new base::ListValue();
-    const base::ListValue* apn_list;
-    if (device_properties.GetListWithoutPathExpansion(
-            shill::kCellularApnListProperty, &apn_list)) {
-      for (base::ListValue::const_iterator iter = apn_list->begin();
-           iter != apn_list->end(); ++iter) {
-        const base::DictionaryValue* dict;
-        if ((*iter)->GetAsDictionary(&dict)) {
-          base::DictionaryValue* apn = new base::DictionaryValue;
-          CreateDictionaryFromCellularApn(dict, apn);
-          apn_list_value->Append(apn);
-        }
-      }
-    }
-    SetValueDictionary(dictionary, kTagProviderApnList, apn_list_value,
-                       cellular_property_ui_data);
-    if (CommandLine::ForCurrentProcess()->HasSwitch(
-            chromeos::switches::kEnableCarrierSwitching)) {
-      const base::ListValue* supported_carriers;
-      if (device_properties.GetListWithoutPathExpansion(
-              shill::kSupportedCarriersProperty, &supported_carriers)) {
-        dictionary->Set(kTagCarriers, supported_carriers->DeepCopy());
-        dictionary->SetInteger(kTagCurrentCarrierIndex,
-                               FindCurrentCarrierIndex(supported_carriers,
-                                                       device));
-      } else {
-        // In case of any error, set the current carrier tag to -1 indicating
-        // to the JS code to fallback to a single carrier.
-        dictionary->SetInteger(kTagCurrentCarrierIndex, -1);
-      }
-    }
-  }
-
-  // Set Cellular Buttons Visibility
-  dictionary->SetBoolean(
-      kTagDisableConnectButton,
-      cellular->activation_state() == shill::kActivationStateActivating ||
-      cellular->IsConnectingState());
-
-  // Don't show any account management related buttons if the activation
-  // state is unknown or no payment portal URL is available.
-  std::string support_url;
-  if (cellular->activation_state() == shill::kActivationStateUnknown ||
-      !dictionary->GetString(kTagSupportUrl, &support_url) ||
-      support_url.empty()) {
-    VLOG(2) << "No support URL is available. Don't display buttons.";
-    return;
-  }
-
-  if (cellular->activation_state() != shill::kActivationStateActivating &&
-      cellular->activation_state() != shill::kActivationStateActivated) {
-    dictionary->SetBoolean(kTagShowActivateButton, true);
-  } else {
-    bool may_show_portal_button = false;
-
-    // If an online payment URL was provided by shill, then this means that the
-    // "View Account" button should be shown for the current carrier.
-    if (olp) {
-      std::string url;
-      olp->GetStringWithoutPathExpansion(shill::kPaymentPortalURL, &url);
-      may_show_portal_button = !url.empty();
-    }
-    // If no online payment URL was provided by shill, fall back to
-    // MobileConfig to determine if the "View Account" should be shown.
-    if (!may_show_portal_button && MobileConfig::GetInstance()->IsReady()) {
-      const MobileConfig::Carrier* carrier =
-          MobileConfig::GetInstance()->GetCarrier(carrier_id);
-      may_show_portal_button = carrier && carrier->show_portal_button();
-    }
-    if (may_show_portal_button) {
-      // The button should be shown for a LTE network even when the LTE network
-      // is not connected, but CrOS is online. This is done to enable users to
-      // update their plan even if they are out of credits.
-      // The button should not be shown when the device's mdn is not set,
-      // because the network's proper portal url cannot be generated without it
-      const NetworkState* default_network =
-          NetworkHandler::Get()->network_state_handler()->DefaultNetwork();
-      const std::string& technology = cellular->network_technology();
-      bool force_show_view_account_button =
-          (technology == shill::kNetworkTechnologyLte ||
-           technology == shill::kNetworkTechnologyLteAdvanced) &&
-          default_network &&
-          !mdn.empty();
-
-      // The button will trigger ShowMorePlanInfoCallback() which will open
-      // carrier specific portal.
-      if (cellular->IsConnectedState() || force_show_view_account_button)
-        dictionary->SetBoolean(kTagShowViewAccountButton, true);
-    }
-  }
-}
-
-}  // namespace
-
 gfx::NativeWindow InternetOptionsHandler::GetNativeWindow() const {
   return web_ui()->GetWebContents()->GetView()->GetTopLevelNativeWindow();
 }
diff --git a/chrome/browser/ui/webui/options/chromeos/internet_options_handler_strings.cc b/chrome/browser/ui/webui/options/chromeos/internet_options_handler_strings.cc
new file mode 100644
index 0000000..62cd79a
--- /dev/null
+++ b/chrome/browser/ui/webui/options/chromeos/internet_options_handler_strings.cc
@@ -0,0 +1,291 @@
+// Copyright (c) 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.
+
+#include "chrome/browser/ui/webui/options/chromeos/internet_options_handler_strings.h"
+
+#include "base/macros.h"
+#include "base/values.h"
+#include "grit/ash_strings.h"
+#include "grit/chromium_strings.h"
+#include "grit/generated_resources.h"
+#include "third_party/cros_system_api/dbus/service_constants.h"
+#include "ui/base/l10n/l10n_util.h"
+
+namespace chromeos {
+namespace internet_options_strings {
+
+namespace {
+
+struct StringResource {
+  const char* name;
+  int id;
+};
+
+StringResource kStringResources[] = {
+    // Main settings page.
+    {"ethernetTitle", IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET},
+    {"wifiTitle", IDS_OPTIONS_SETTINGS_SECTION_TITLE_WIFI_NETWORK},
+    {"wimaxTitle", IDS_OPTIONS_SETTINGS_SECTION_TITLE_WIMAX_NETWORK},
+    {"cellularTitle", IDS_OPTIONS_SETTINGS_SECTION_TITLE_CELLULAR_NETWORK},
+    {"vpnTitle", IDS_OPTIONS_SETTINGS_SECTION_TITLE_PRIVATE_NETWORK},
+    {"networkNotConnected", IDS_OPTIONS_SETTINGS_NETWORK_NOT_CONNECTED},
+    {"networkConnected", IDS_CHROMEOS_NETWORK_STATE_READY},
+    {"joinOtherNetwork", IDS_OPTIONS_SETTINGS_NETWORK_OTHER},
+    {"networkOffline", IDS_OPTIONS_SETTINGS_NETWORK_OFFLINE},
+    {"networkDisabled", IDS_OPTIONS_SETTINGS_NETWORK_DISABLED},
+    {"turnOffWifi", IDS_OPTIONS_SETTINGS_NETWORK_DISABLE_WIFI},
+    {"turnOffWimax", IDS_OPTIONS_SETTINGS_NETWORK_DISABLE_WIMAX},
+    {"turnOffCellular", IDS_OPTIONS_SETTINGS_NETWORK_DISABLE_CELLULAR},
+    {"disconnectNetwork", IDS_OPTIONS_SETTINGS_DISCONNECT},
+    {"preferredNetworks", IDS_OPTIONS_SETTINGS_PREFERRED_NETWORKS_LABEL},
+    {"preferredNetworksPage", IDS_OPTIONS_SETTINGS_PREFERRED_NETWORKS_TITLE},
+    {"useSharedProxies", IDS_OPTIONS_SETTINGS_USE_SHARED_PROXIES},
+    { "addConnectionTitle",
+      IDS_OPTIONS_SETTINGS_SECTION_TITLE_ADD_CONNECTION },
+    {"addConnectionWifi", IDS_OPTIONS_SETTINGS_ADD_CONNECTION_WIFI},
+    {"addConnectionVPN", IDS_STATUSBAR_NETWORK_ADD_VPN},
+    {"otherCellularNetworks", IDS_OPTIONS_SETTINGS_OTHER_CELLULAR_NETWORKS},
+    {"enableDataRoaming", IDS_OPTIONS_SETTINGS_ENABLE_DATA_ROAMING},
+    {"disableDataRoaming", IDS_OPTIONS_SETTINGS_DISABLE_DATA_ROAMING},
+    {"dataRoamingDisableToggleTooltip",
+     IDS_OPTIONS_SETTINGS_TOGGLE_DATA_ROAMING_RESTRICTION},
+
+    // Internet details dialog.
+    {"managedNetwork", IDS_OPTIONS_SETTINGS_MANAGED_NETWORK},
+    {"wifiNetworkTabLabel", IDS_OPTIONS_SETTINGS_INTERNET_TAB_CONNECTION},
+    {"vpnTabLabel", IDS_OPTIONS_SETTINGS_INTERNET_TAB_VPN},
+    {"cellularConnTabLabel", IDS_OPTIONS_SETTINGS_INTERNET_TAB_CONNECTION},
+    {"cellularDeviceTabLabel", IDS_OPTIONS_SETTINGS_INTERNET_TAB_DEVICE},
+    {"networkTabLabel", IDS_OPTIONS_SETTINGS_INTERNET_TAB_NETWORK},
+    {"securityTabLabel", IDS_OPTIONS_SETTINGS_INTERNET_TAB_SECURITY},
+    {"proxyTabLabel", IDS_OPTIONS_SETTINGS_INTERNET_TAB_PROXY},
+    {"connectionState", IDS_OPTIONS_SETTINGS_INTERNET_CONNECTION_STATE},
+    {"inetAddress", IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_ADDRESS},
+    {"inetNetmask", IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_SUBNETMASK},
+    {"inetGateway", IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_GATEWAY},
+    {"inetNameServers", IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_DNSSERVER},
+    {"ipAutomaticConfiguration",
+     IDS_OPTIONS_SETTINGS_INTERNET_IP_AUTOMATIC_CONFIGURATION},
+    {"automaticNameServers",
+     IDS_OPTIONS_SETTINGS_INTERNET_AUTOMATIC_NAME_SERVERS},
+    {"userNameServer1", IDS_OPTIONS_SETTINGS_INTERNET_USER_NAME_SERVER_1},
+    {"userNameServer2", IDS_OPTIONS_SETTINGS_INTERNET_USER_NAME_SERVER_2},
+    {"userNameServer3", IDS_OPTIONS_SETTINGS_INTERNET_USER_NAME_SERVER_3},
+    {"userNameServer4", IDS_OPTIONS_SETTINGS_INTERNET_USER_NAME_SERVER_4},
+    {"googleNameServers", IDS_OPTIONS_SETTINGS_INTERNET_GOOGLE_NAME_SERVERS},
+    {"userNameServers", IDS_OPTIONS_SETTINGS_INTERNET_USER_NAME_SERVERS},
+    {"hardwareAddress", IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_HARDWARE_ADDRESS},
+    {"detailsInternetDismiss", IDS_CLOSE},
+    {"activateButton", IDS_OPTIONS_SETTINGS_ACTIVATE},
+    {"buyplanButton", IDS_OPTIONS_SETTINGS_BUY_PLAN},
+    {"connectButton", IDS_OPTIONS_SETTINGS_CONNECT},
+    {"configureButton", IDS_OPTIONS_SETTINGS_CONFIGURE},
+    {"disconnectButton", IDS_OPTIONS_SETTINGS_DISCONNECT},
+    {"viewAccountButton", IDS_STATUSBAR_NETWORK_VIEW_ACCOUNT},
+    {"wimaxConnTabLabel", IDS_OPTIONS_SETTINGS_INTERNET_TAB_WIMAX},
+
+    // Wifi Tab.
+    {"inetSsid", IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_NETWORK_ID},
+    {"inetBssid", IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_NETWORK_BSSID},
+    {"inetEncryption",
+     IDS_OPTIONS_SETTIGNS_INTERNET_OPTIONS_NETWORK_ENCRYPTION},
+    {"inetFrequency", IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_NETWORK_FREQUENCY},
+    {"inetFrequencyFormat",
+     IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_NETWORK_FREQUENCY_MHZ},
+    {"inetSignalStrength",
+     IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_NETWORK_STRENGTH},
+    {"inetSignalStrengthFormat",
+     IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_NETWORK_STRENGTH_PERCENTAGE},
+    {"inetPassProtected", IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_NET_PROTECTED},
+    {"inetNetworkShared", IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_NETWORK_SHARED},
+    {"inetPreferredNetwork",
+     IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_PREFER_NETWORK},
+    {"inetAutoConnectNetwork",
+     IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_AUTO_CONNECT},
+
+    // VPN Tab.
+    {"inetServiceName", IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_VPN_SERVICE_NAME},
+    {"inetServerHostname",
+     IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_VPN_SERVER_HOSTNAME},
+    {"inetProviderType",
+     IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_VPN_PROVIDER_TYPE},
+    {"inetUsername", IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_VPN_USERNAME},
+
+    // Cellular Tab.
+    {"serviceName", IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_SERVICE_NAME},
+    {"networkTechnology",
+     IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_NETWORK_TECHNOLOGY},
+    {"operatorName", IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_OPERATOR},
+    {"operatorCode", IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_OPERATOR_CODE},
+    {"activationState",
+     IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_ACTIVATION_STATE},
+    {"roamingState", IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_ROAMING_STATE},
+    {"restrictedPool", IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_RESTRICTED_POOL},
+    {"errorState", IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_ERROR_STATE},
+    {"cellularManufacturer",
+     IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_MANUFACTURER},
+    {"modelId", IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_MODEL_ID},
+    {"firmwareRevision",
+     IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_FIRMWARE_REVISION},
+    {"hardwareRevision",
+     IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_HARDWARE_REVISION},
+    {"prlVersion", IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_PRL_VERSION},
+    {"cellularApnLabel", IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_APN},
+    {"cellularApnOther", IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_APN_OTHER},
+    {"cellularApnUsername",
+     IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_APN_USERNAME},
+    {"cellularApnPassword",
+     IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_APN_PASSWORD},
+    {"cellularApnUseDefault", IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_APN_CLEAR},
+    {"cellularApnSet", IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_APN_SET},
+    {"cellularApnCancel", IDS_CANCEL},
+
+    // Security Tab.
+    {"lockSimCard", IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_LOCK_SIM_CARD},
+    {"changePinButton",
+     IDS_OPTIONS_SETTINGS_INTERNET_CELLULAR_CHANGE_PIN_BUTTON},
+
+    // Proxy Tab.
+    {"webProxyAutoDiscoveryUrl", IDS_PROXY_WEB_PROXY_AUTO_DISCOVERY},
+};
+
+const size_t kStringResourcesLength = arraysize(kStringResources);
+
+}  // namespace
+
+void RegisterLocalizedStrings(base::DictionaryValue* localized_strings) {
+  for (size_t i = 0; i < kStringResourcesLength; ++i) {
+    localized_strings->SetString(
+        kStringResources[i].name,
+        l10n_util::GetStringUTF16(kStringResources[i].id));
+  }
+}
+
+std::string ActivationStateString(const std::string& activation_state) {
+  int id;
+  if (activation_state == shill::kActivationStateActivated)
+    id = IDS_CHROMEOS_NETWORK_ACTIVATION_STATE_ACTIVATED;
+  else if (activation_state == shill::kActivationStateActivating)
+    id = IDS_CHROMEOS_NETWORK_ACTIVATION_STATE_ACTIVATING;
+  else if (activation_state == shill::kActivationStateNotActivated)
+    id = IDS_CHROMEOS_NETWORK_ACTIVATION_STATE_NOT_ACTIVATED;
+  else if (activation_state == shill::kActivationStatePartiallyActivated)
+    id = IDS_CHROMEOS_NETWORK_ACTIVATION_STATE_PARTIALLY_ACTIVATED;
+  else
+    id = IDS_CHROMEOS_NETWORK_ACTIVATION_STATE_UNKNOWN;
+  return l10n_util::GetStringUTF8(id);
+}
+
+std::string RoamingStateString(const std::string& roaming_state) {
+  int id;
+  if (roaming_state == shill::kRoamingStateHome)
+    id = IDS_CHROMEOS_NETWORK_ROAMING_STATE_HOME;
+  else if (roaming_state == shill::kRoamingStateRoaming)
+    id = IDS_CHROMEOS_NETWORK_ROAMING_STATE_ROAMING;
+  else
+    id = IDS_CHROMEOS_NETWORK_ROAMING_STATE_UNKNOWN;
+  return l10n_util::GetStringUTF8(id);
+}
+
+std::string ConnectionStateString(const std::string& state) {
+  int id;
+  if (state == shill::kUnknownString)
+    id = IDS_CHROMEOS_NETWORK_STATE_UNKNOWN;
+  else if (state == shill::kStateIdle)
+    id = IDS_CHROMEOS_NETWORK_STATE_IDLE;
+  else if (state == shill::kStateCarrier)
+    id = IDS_CHROMEOS_NETWORK_STATE_CARRIER;
+  else if (state == shill::kStateAssociation)
+    id = IDS_CHROMEOS_NETWORK_STATE_ASSOCIATION;
+  else if (state == shill::kStateConfiguration)
+    id = IDS_CHROMEOS_NETWORK_STATE_CONFIGURATION;
+  else if (state == shill::kStateReady)
+    id = IDS_CHROMEOS_NETWORK_STATE_READY;
+  else if (state == shill::kStateDisconnect)
+    id = IDS_CHROMEOS_NETWORK_STATE_DISCONNECT;
+  else if (state == shill::kStateFailure)
+    id = IDS_CHROMEOS_NETWORK_STATE_FAILURE;
+  else if (state == shill::kStateActivationFailure)
+    id = IDS_CHROMEOS_NETWORK_STATE_ACTIVATION_FAILURE;
+  else if (state == shill::kStatePortal)
+    id = IDS_CHROMEOS_NETWORK_STATE_PORTAL;
+  else if (state == shill::kStateOnline)
+    id = IDS_CHROMEOS_NETWORK_STATE_ONLINE;
+  else
+    id = IDS_CHROMEOS_NETWORK_STATE_UNRECOGNIZED;
+  return l10n_util::GetStringUTF8(id);
+}
+
+// Note: these strings are user visible but not localized.
+std::string EncryptionString(const std::string& security,
+                             const std::string& eap_method) {
+  if (security == shill::kSecurityNone)
+    return "";
+  if (security == shill::kSecurityWpa)
+    return "WPA";
+  if (security == shill::kSecurityWep)
+    return "WEP";
+  if (security == shill::kSecurityRsn)
+    return "RSN";
+  if (security == shill::kSecurityPsk)
+    return "PSK";
+  if (security == shill::kSecurity8021x) {
+    std::string result = "8021X";
+    if (eap_method == shill::kEapMethodPEAP)
+      result += "PEAP";
+    else if (eap_method == shill::kEapMethodTLS)
+      result += "TLS";
+    else if (eap_method == shill::kEapMethodTTLS)
+      result += "TTLS";
+    else if (eap_method == shill::kEapMethodLEAP)
+      result += "LEAP";
+    return result;
+  }
+  return "Unknown";
+}
+
+std::string ProviderTypeString(
+    const std::string& provider_type,
+    const base::DictionaryValue& provider_properties) {
+  int id;
+  if (provider_type == shill::kProviderL2tpIpsec) {
+    std::string client_cert_id;
+    provider_properties.GetStringWithoutPathExpansion(
+        shill::kL2tpIpsecClientCertIdProperty, &client_cert_id);
+    if (client_cert_id.empty())
+      id = IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_L2TP_IPSEC_PSK;
+    else
+      id = IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_L2TP_IPSEC_USER_CERT;
+  } else if (provider_type == shill::kProviderOpenVpn) {
+    id = IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_OPEN_VPN;
+  } else {
+    id = IDS_CHROMEOS_NETWORK_ERROR_UNKNOWN;
+  }
+  return l10n_util::GetStringUTF8(id);
+}
+
+std::string RestrictedStateString(const std::string& connection_state) {
+  int id;
+  if (connection_state == shill::kStatePortal)
+    id = IDS_CONFIRM_MESSAGEBOX_YES_BUTTON_LABEL;
+  else
+    id = IDS_CONFIRM_MESSAGEBOX_NO_BUTTON_LABEL;
+  return l10n_util::GetStringUTF8(id);
+}
+
+std::string NetworkDeviceTypeString(const std::string& network_type) {
+  int id;
+  if (network_type == shill::kTypeEthernet)
+    id = IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET;
+  else if (network_type == shill::kTypeWifi)
+    id = IDS_STATUSBAR_NETWORK_DEVICE_WIFI;
+  else if (network_type == shill::kTypeCellular)
+    id = IDS_STATUSBAR_NETWORK_DEVICE_CELLULAR;
+  else
+    id = IDS_STATUSBAR_NETWORK_DEVICE_UNKNOWN;
+  return l10n_util::GetStringUTF8(id);
+}
+
+}  // namespace internet_options_strings
+}  // namespace chromeos
diff --git a/chrome/browser/ui/webui/options/chromeos/internet_options_handler_strings.h b/chrome/browser/ui/webui/options/chromeos/internet_options_handler_strings.h
new file mode 100644
index 0000000..764c2f2
--- /dev/null
+++ b/chrome/browser/ui/webui/options/chromeos/internet_options_handler_strings.h
@@ -0,0 +1,32 @@
+// Copyright (c) 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.
+
+#ifndef CHROME_BROWSER_UI_WEBUI_OPTIONS_CHROMEOS_INTERNET_OPTIONS_HANDLER_STRINGS_H_
+#define CHROME_BROWSER_UI_WEBUI_OPTIONS_CHROMEOS_INTERNET_OPTIONS_HANDLER_STRINGS_H_
+
+#include <string>
+
+namespace base {
+class DictionaryValue;
+}
+
+namespace chromeos {
+namespace internet_options_strings {
+
+void RegisterLocalizedStrings(base::DictionaryValue* localized_strings);
+std::string ActivationStateString(const std::string& activation_state);
+std::string RoamingStateString(const std::string& roaming_state);
+std::string ConnectionStateString(const std::string& state);
+std::string EncryptionString(const std::string& security,
+                             const std::string& eap_method);
+std::string ProviderTypeString(
+    const std::string& provider_type,
+    const base::DictionaryValue& provider_properties);
+std::string RestrictedStateString(const std::string& connection_state);
+std::string NetworkDeviceTypeString(const std::string& network_type);
+
+}  // namespace internet_options_strings
+}  // namespace chromeos
+
+#endif  // CHROME_BROWSER_UI_WEBUI_OPTIONS_CHROMEOS_INTERNET_OPTIONS_HANDLER_STRINGS_H_
diff --git a/chrome/browser/ui/webui/options/clear_browser_data_browsertest.cc b/chrome/browser/ui/webui/options/clear_browser_data_browsertest.cc
new file mode 100644
index 0000000..ff33e27
--- /dev/null
+++ b/chrome/browser/ui/webui/options/clear_browser_data_browsertest.cc
@@ -0,0 +1,66 @@
+// 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.
+
+#include "chrome/browser/browsing_data/browsing_data_remover_test_util.h"
+#include "chrome/browser/ui/webui/options/options_ui_browsertest.h"
+#include "chrome/common/url_constants.h"
+#include "content/public/test/browser_test_utils.h"
+
+namespace options {
+
+class ClearBrowserDataBrowserTest : public OptionsUIBrowserTest {
+ protected:
+  void ClickElement(const std::string& selector) {
+    bool element_enabled = false;
+    ASSERT_NO_FATAL_FAILURE(GetElementEnabledState(selector, &element_enabled));
+    ASSERT_TRUE(element_enabled);
+    ASSERT_TRUE(content::ExecuteScript(
+        GetSettingsFrame(),
+        "document.querySelector('" + selector + "').click();"));
+  }
+
+  bool IsElementEnabled(const std::string& selector) {
+    bool element_enabled = false;
+    GetElementEnabledState(selector, &element_enabled);
+    return element_enabled;
+  }
+
+ private:
+  void GetElementEnabledState(
+      const std::string& selector,
+      bool* enabled) {
+    ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
+        GetSettingsFrame(),
+        "window.domAutomationController.send(!document.querySelector('" +
+            selector + "').disabled);",
+        enabled));
+  }
+};
+
+IN_PROC_BROWSER_TEST_F(ClearBrowserDataBrowserTest,
+                       CommitButtonDisabledWhileDeletionInProgress) {
+  const char kCommitButtonId[] = "#clear-browser-data-commit";
+  BrowsingDataRemoverCompletionInhibitor completion_inhibitor;
+
+  // Navigate to the Clear Browsing Data dialog to ensure that the commit button
+  // is initially enabled, usable, and gets disabled after having been pressed.
+  NavigateToSettingsSubpage(chrome::kClearBrowserDataSubPage);
+  ASSERT_NO_FATAL_FAILURE(ClickElement(kCommitButtonId));
+  EXPECT_FALSE(IsElementEnabled(kCommitButtonId));
+
+  completion_inhibitor.BlockUntilNearCompletion();
+
+  // Simulate a reload while the previous removal is still running, and verify
+  // that the button is still disabled.
+  NavigateToSettingsSubpage(chrome::kClearBrowserDataSubPage);
+  EXPECT_FALSE(IsElementEnabled(kCommitButtonId));
+
+  completion_inhibitor.ContinueToCompletion();
+
+  // However, the button should be enabled again once the process has finished.
+  NavigateToSettingsSubpage(chrome::kClearBrowserDataSubPage);
+  EXPECT_TRUE(IsElementEnabled(kCommitButtonId));
+}
+
+}  // namespace options
diff --git a/chrome/browser/ui/webui/options/clear_browser_data_handler.cc b/chrome/browser/ui/webui/options/clear_browser_data_handler.cc
index 9437ed9..6b0e5e4 100644
--- a/chrome/browser/ui/webui/options/clear_browser_data_handler.cc
+++ b/chrome/browser/ui/webui/options/clear_browser_data_handler.cc
@@ -55,6 +55,10 @@
 void ClearBrowserDataHandler::InitializePage() {
   UpdateInfoBannerVisibility();
   OnBrowsingHistoryPrefChanged();
+
+  bool removal_in_progress = !!remover_;
+  web_ui()->CallJavascriptFunction("ClearBrowserDataOverlay.setClearing",
+                                   base::FundamentalValue(removal_in_progress));
 }
 
 void ClearBrowserDataHandler::UpdateInfoBannerVisibility() {
@@ -148,9 +152,8 @@
 
 void ClearBrowserDataHandler::HandleClearBrowserData(
     const base::ListValue* value) {
-  // TODO(engedy): change this back to a DCHECK once we have updated the UI.
-  if (remover_)
-    return;
+  // We should never be called when the previous clearing has not yet finished.
+  CHECK(!remover_);
 
   Profile* profile = Profile::FromWebUI(web_ui());
   PrefService* prefs = profile->GetPrefs();
diff --git a/chrome/browser/ui/webui/options/core_options_handler.cc b/chrome/browser/ui/webui/options/core_options_handler.cc
index ccebd08..926224d 100644
--- a/chrome/browser/ui/webui/options/core_options_handler.cc
+++ b/chrome/browser/ui/webui/options/core_options_handler.cc
@@ -143,6 +143,8 @@
       l10n_util::GetStringUTF16(IDS_CLOSE));
   localized_strings->SetString("done",
       l10n_util::GetStringUTF16(IDS_DONE));
+  localized_strings->SetString("deletableItemDeleteButtonTitle",
+      l10n_util::GetStringUTF16(IDS_OPTIONS_DELETABLE_ITEM_DELETE_BUTTON));
 }
 
 void CoreOptionsHandler::Uninitialize() {
diff --git a/chrome/browser/ui/webui/options/font_settings_handler.cc b/chrome/browser/ui/webui/options/font_settings_handler.cc
index ab67644..d1c2ec5 100644
--- a/chrome/browser/ui/webui/options/font_settings_handler.cc
+++ b/chrome/browser/ui/webui/options/font_settings_handler.cc
@@ -112,7 +112,8 @@
 }
 
 void FontSettingsHandler::InitializeHandler() {
-  registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
+  registrar_.Add(this,
+                 chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
                  content::NotificationService::AllSources());
   registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
                  content::NotificationService::AllSources());
@@ -178,7 +179,7 @@
 void FontSettingsHandler::Observe(int type,
                                   const content::NotificationSource& source,
                                   const content::NotificationDetails& details) {
-  DCHECK(type == chrome::NOTIFICATION_EXTENSION_LOADED ||
+  DCHECK(type == chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED ||
          type == chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED);
   NotifyAdvancedFontSettingsAvailability();
 }
diff --git a/chrome/browser/ui/webui/options/home_page_overlay_handler.cc b/chrome/browser/ui/webui/options/home_page_overlay_handler.cc
index 4496648..4d48add 100644
--- a/chrome/browser/ui/webui/options/home_page_overlay_handler.cc
+++ b/chrome/browser/ui/webui/options/home_page_overlay_handler.cc
@@ -51,8 +51,7 @@
 
   autocomplete_controller_->Start(AutocompleteInput(
       input, base::string16::npos, base::string16(), GURL(),
-      AutocompleteInput::INVALID_SPEC, true,
-      false, false, AutocompleteInput::ALL_MATCHES));
+      AutocompleteInput::INVALID_SPEC, true, false, false, true));
 }
 
 void HomePageOverlayHandler::OnResultChanged(bool default_match_changed) {
diff --git a/chrome/browser/ui/webui/options/options_ui_browsertest.cc b/chrome/browser/ui/webui/options/options_ui_browsertest.cc
index 45e4841..41b3813 100644
--- a/chrome/browser/ui/webui/options/options_ui_browsertest.cc
+++ b/chrome/browser/ui/webui/options/options_ui_browsertest.cc
@@ -10,6 +10,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/signin/signin_manager_factory.h"
 #include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/chrome_pages.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/browser/ui/webui/options/options_ui.h"
 #include "chrome/browser/ui/webui/uber/uber_ui.h"
@@ -17,6 +18,7 @@
 #include "chrome/common/url_constants.h"
 #include "chrome/test/base/ui_test_utils.h"
 #include "components/signin/core/browser/signin_manager.h"
+#include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/test/browser_test_utils.h"
 #include "content/public/test/test_utils.h"
@@ -48,7 +50,7 @@
 
 class SignOutWaiter : public SigninManagerBase::Observer {
  public:
-  SignOutWaiter(SigninManagerBase* signin_manager)
+  explicit SignOutWaiter(SigninManagerBase* signin_manager)
       : seen_(false), running_(false), scoped_observer_(this) {
     scoped_observer_.Add(signin_manager);
   }
@@ -89,13 +91,23 @@
 }
 #endif
 
+bool FrameHasSettingsSourceHost(content::RenderFrameHost* frame) {
+  return frame->GetLastCommittedURL().DomainIs(
+      chrome::kChromeUISettingsFrameHost);
+}
+
 }  // namespace
 
 OptionsUIBrowserTest::OptionsUIBrowserTest() {
 }
 
 void OptionsUIBrowserTest::NavigateToSettings() {
-  const GURL& url = GURL(chrome::kChromeUISettingsURL);
+  NavigateToSettingsSubpage("");
+}
+
+void OptionsUIBrowserTest::NavigateToSettingsSubpage(
+    const std::string& sub_page) {
+  const GURL& url = chrome::GetSettingsUrl(sub_page);
   ui_test_utils::NavigateToURLWithDisposition(browser(), url, CURRENT_TAB, 0);
 
   content::WebContents* web_contents =
@@ -140,6 +152,16 @@
   EXPECT_NE(title.find(expected_title), base::string16::npos);
 }
 
+content::RenderFrameHost* OptionsUIBrowserTest::GetSettingsFrame() {
+  // NB: The utility function content::FrameHasSourceUrl can't be used because
+  // the settings frame navigates itself to chrome://settings-frame/settings
+  // to indicate that it's showing the top-level settings. Therefore, just
+  // match the host.
+  return content::FrameMatchingPredicate(
+      browser()->tab_strip_model()->GetActiveWebContents(),
+      base::Bind(&FrameHasSettingsSourceHost));
+}
+
 IN_PROC_BROWSER_TEST_F(OptionsUIBrowserTest, LoadOptionsByURL) {
   NavigateToSettings();
   VerifyTitle();
diff --git a/chrome/browser/ui/webui/options/options_ui_browsertest.h b/chrome/browser/ui/webui/options/options_ui_browsertest.h
index 85ca83c..eafcfb1 100644
--- a/chrome/browser/ui/webui/options/options_ui_browsertest.h
+++ b/chrome/browser/ui/webui/options/options_ui_browsertest.h
@@ -5,9 +5,15 @@
 #ifndef CHROME_BROWSER_UI_WEBUI_OPTIONS_OPTIONS_UI_BROWSERTEST_H_
 #define CHROME_BROWSER_UI_WEBUI_OPTIONS_OPTIONS_UI_BROWSERTEST_H_
 
+#include <string>
+
 #include "base/basictypes.h"
 #include "chrome/test/base/in_process_browser_test.h"
 
+namespace content {
+class RenderFrameHost;
+}
+
 namespace options {
 
 class OptionsUIBrowserTest : public InProcessBrowserTest {
@@ -17,6 +23,10 @@
   // Navigate to the Uber/Settings page and block until it has loaded.
   void NavigateToSettings();
 
+  // Navigate to a certain subpage in the Uber/Settings page and block until it
+  // has loaded.
+  void NavigateToSettingsSubpage(const std::string& sub_page);
+
   // Navigate to the Settings frame and block until complete.
   void NavigateToSettingsFrame();
 
@@ -27,6 +37,14 @@
   // The only guarantee we can make about the title of a settings tab is that
   // it should contain IDS_SETTINGS_TITLE somewhere.
   void VerifyTitle();
+
+ protected:
+  // Returns the RenderFrameHost associated with the Settings frame inside the
+  // Uber UI page (which must be already loaded).
+  content::RenderFrameHost* GetSettingsFrame();
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(OptionsUIBrowserTest);
 };
 
 }  // namespace options
diff --git a/chrome/browser/ui/webui/options/preferences_browsertest.cc b/chrome/browser/ui/webui/options/preferences_browsertest.cc
index 69a1693..5ad7546 100644
--- a/chrome/browser/ui/webui/options/preferences_browsertest.cc
+++ b/chrome/browser/ui/webui/options/preferences_browsertest.cc
@@ -12,7 +12,6 @@
 #include "base/json/json_writer.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/prefs/pref_service.h"
-#include "base/stl_util.h"
 #include "base/values.h"
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/profiles/profile.h"
@@ -38,6 +37,8 @@
 #include "base/strings/stringprintf.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/chromeos/net/proxy_config_handler.h"
+#include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
+#include "chrome/browser/chromeos/policy/stub_enterprise_install_attributes.h"
 #include "chrome/browser/chromeos/proxy_cros_settings_parser.h"
 #include "chrome/browser/chromeos/settings/cros_settings.h"
 #include "chrome/browser/prefs/proxy_config_dictionary.h"
@@ -194,11 +195,6 @@
       &policy_provider_);
 };
 
-void PreferencesBrowserTest::TearDownInProcessBrowserTestFixture() {
-  STLDeleteElements(&default_values_);
-  STLDeleteElements(&non_default_values_);
-}
-
 void PreferencesBrowserTest::SetUserPolicies(
     const std::vector<std::string>& names,
     const std::vector<base::Value*>& values,
@@ -219,8 +215,9 @@
 void PreferencesBrowserTest::SetUserValues(
     const std::vector<std::string>& names,
     const std::vector<base::Value*>& values) {
-  for (size_t i = 0; i < names.size(); ++i)
+  for (size_t i = 0; i < names.size(); ++i) {
     pref_service_->Set(names[i].c_str(), *values[i]);
+  }
 }
 
 void PreferencesBrowserTest::VerifyKeyValue(const base::DictionaryValue& dict,
@@ -283,9 +280,10 @@
   const base::DictionaryValue* observed_dict;
   ASSERT_TRUE(observed_value_ptr.get());
   ASSERT_TRUE(observed_value_ptr->GetAsDictionary(&observed_dict));
-  for (size_t i = 0; i < names.size(); ++i)
+  for (size_t i = 0; i < names.size(); ++i) {
     VerifyPref(observed_dict, names[i], values[i], controlledBy, disabled,
                uncommitted);
+  }
 }
 
 void PreferencesBrowserTest::ExpectNoCommit(const std::string& name) {
@@ -330,8 +328,9 @@
   std::stringstream javascript;
   javascript << "var testEnv = new TestEnv();";
   for (std::vector<std::string>::const_iterator name = pref_names.begin();
-       name != pref_names.end(); ++name)
+       name != pref_names.end(); ++name) {
     javascript << "testEnv.addPref('" << name->c_str() << "');";
+  }
   javascript << "testEnv.setupAndReply();";
   std::string temp_observed_json;
   if (!observed_json)
@@ -466,7 +465,7 @@
     pref_names_.push_back(prefs::kURLsToRestoreOnStartup);
     policy_names_.push_back(policy::key::kRestoreOnStartupURLs);
     base::ListValue* list = new base::ListValue;
-    list->Append(new base::StringValue("http://www.google.com"));
+    list->Append(new base::StringValue("http://www.example.com"));
     list->Append(new base::StringValue("http://example.com"));
     non_default_values_.push_back(list);
   }
@@ -488,29 +487,30 @@
   // Verify notifications when default values are in effect.
   SetupJavaScriptTestEnvironment(pref_names_, &observed_json);
   VerifyObservedPrefs(
-      observed_json, pref_names_, default_values_, std::string(), false, false);
+      observed_json, pref_names_, default_values_.get(),
+      std::string(), false, false);
 
   // Verify notifications when recommended values are in effect.
-  SetUserPolicies(policy_names_, non_default_values_,
+  SetUserPolicies(policy_names_, non_default_values_.get(),
                   policy::POLICY_LEVEL_RECOMMENDED);
   SetupJavaScriptTestEnvironment(pref_names_, &observed_json);
-  VerifyObservedPrefs(observed_json, pref_names_, non_default_values_,
+  VerifyObservedPrefs(observed_json, pref_names_, non_default_values_.get(),
                       "recommended", false, false);
 
   // Verify notifications when mandatory values are in effect.
-  SetUserPolicies(policy_names_, non_default_values_,
+  SetUserPolicies(policy_names_, non_default_values_.get(),
                   policy::POLICY_LEVEL_MANDATORY);
   SetupJavaScriptTestEnvironment(pref_names_, &observed_json);
-  VerifyObservedPrefs(observed_json, pref_names_, non_default_values_,
+  VerifyObservedPrefs(observed_json, pref_names_, non_default_values_.get(),
                       "policy", true, false);
 
   // Verify notifications when user-modified values are in effect.
   ClearUserPolicies();
-  SetUserValues(pref_names_, non_default_values_);
+  SetUserValues(pref_names_, non_default_values_.get());
   SetupJavaScriptTestEnvironment(pref_names_, &observed_json);
   VerifyObservedPrefs(observed_json,
                       pref_names_,
-                      non_default_values_,
+                      non_default_values_.get(),
                       std::string(),
                       false,
                       false);
@@ -523,8 +523,9 @@
   UseDefaultTestPrefs(false);
 
   ASSERT_NO_FATAL_FAILURE(SetupJavaScriptTestEnvironment(pref_names_, NULL));
-  for (size_t i = 0; i < pref_names_.size(); ++i)
+  for (size_t i = 0; i < pref_names_.size(); ++i) {
     VerifySetPref(pref_names_[i], types_[i], non_default_values_[i], true);
+  }
 }
 
 // Verifies that clearing a user-modified pref value through the JavaScript
@@ -533,12 +534,13 @@
 IN_PROC_BROWSER_TEST_F(PreferencesBrowserTest, ClearPrefs) {
   UseDefaultTestPrefs(false);
 
-  SetUserPolicies(policy_names_, default_values_,
+  SetUserPolicies(policy_names_, default_values_.get(),
                   policy::POLICY_LEVEL_RECOMMENDED);
-  SetUserValues(pref_names_, non_default_values_);
+  SetUserValues(pref_names_, non_default_values_.get());
   ASSERT_NO_FATAL_FAILURE(SetupJavaScriptTestEnvironment(pref_names_, NULL));
-  for (size_t i = 0; i < pref_names_.size(); ++i)
+  for (size_t i = 0; i < pref_names_.size(); ++i) {
     VerifyClearPref(pref_names_[i], default_values_[i], true);
+  }
 }
 
 // Verifies that when the user-modified value of a dialog pref is set and the
@@ -569,7 +571,7 @@
   }
 
   // Verify behavior when recommended values are in effect.
-  SetUserPolicies(policy_names_, default_values_,
+  SetUserPolicies(policy_names_, default_values_.get(),
                   policy::POLICY_LEVEL_RECOMMENDED);
   ASSERT_NO_FATAL_FAILURE(SetupJavaScriptTestEnvironment(pref_names_, NULL));
   for (size_t i = 0; i < pref_names_.size(); ++i) {
@@ -585,9 +587,9 @@
 IN_PROC_BROWSER_TEST_F(PreferencesBrowserTest, DialogPrefsClearCommit) {
   UseDefaultTestPrefs(false);
 
-  SetUserPolicies(policy_names_, default_values_,
+  SetUserPolicies(policy_names_, default_values_.get(),
                   policy::POLICY_LEVEL_RECOMMENDED);
-  SetUserValues(pref_names_, non_default_values_);
+  SetUserValues(pref_names_, non_default_values_.get());
   ASSERT_NO_FATAL_FAILURE(SetupJavaScriptTestEnvironment(pref_names_, NULL));
   for (size_t i = 0; i < pref_names_.size(); ++i) {
     VerifyClearPref(pref_names_[i], default_values_[i], false);
@@ -601,9 +603,9 @@
 IN_PROC_BROWSER_TEST_F(PreferencesBrowserTest, DialogPrefsClearRollback) {
   UseDefaultTestPrefs(false);
 
-  SetUserPolicies(policy_names_, default_values_,
+  SetUserPolicies(policy_names_, default_values_.get(),
                   policy::POLICY_LEVEL_RECOMMENDED);
-  SetUserValues(pref_names_, non_default_values_);
+  SetUserValues(pref_names_, non_default_values_.get());
   ASSERT_NO_FATAL_FAILURE(SetupJavaScriptTestEnvironment(pref_names_, NULL));
   for (size_t i = 0; i < pref_names_.size(); ++i) {
     VerifyClearPref(pref_names_[i], default_values_[i], false);
@@ -621,18 +623,18 @@
 
   // Verify notifications when recommended values come into effect.
   StartObserving();
-  SetUserPolicies(policy_names_, non_default_values_,
+  SetUserPolicies(policy_names_, non_default_values_.get(),
                   policy::POLICY_LEVEL_RECOMMENDED);
   FinishObserving(&observed_json);
-  VerifyObservedPrefs(observed_json, pref_names_, non_default_values_,
+  VerifyObservedPrefs(observed_json, pref_names_, non_default_values_.get(),
                       "recommended", false, false);
 
   // Verify notifications when mandatory values come into effect.
   StartObserving();
-  SetUserPolicies(policy_names_, non_default_values_,
+  SetUserPolicies(policy_names_, non_default_values_.get(),
                   policy::POLICY_LEVEL_MANDATORY);
   FinishObserving(&observed_json);
-  VerifyObservedPrefs(observed_json, pref_names_, non_default_values_,
+  VerifyObservedPrefs(observed_json, pref_names_, non_default_values_.get(),
                       "policy", true, false);
 
   // Verify notifications when default values come into effect.
@@ -640,15 +642,16 @@
   ClearUserPolicies();
   FinishObserving(&observed_json);
   VerifyObservedPrefs(
-      observed_json, pref_names_, default_values_, std::string(), false, false);
+      observed_json, pref_names_, default_values_.get(),
+      std::string(), false, false);
 
   // Verify notifications when user-modified values come into effect.
   StartObserving();
-  SetUserValues(pref_names_, non_default_values_);
+  SetUserValues(pref_names_, non_default_values_.get());
   FinishObserving(&observed_json);
   VerifyObservedPrefs(observed_json,
                       pref_names_,
-                      non_default_values_,
+                      non_default_values_.get(),
                       std::string(),
                       false,
                       false);
@@ -660,26 +663,94 @@
 // notifications in JavaScript for pref values handled by the
 // CoreChromeOSOptionsHandler class.
 IN_PROC_BROWSER_TEST_F(PreferencesBrowserTest, ChromeOSDeviceFetchPrefs) {
-  std::vector<base::Value*> decorated_non_default_values;
   std::string observed_json;
 
   // Boolean pref.
   pref_names_.push_back(chromeos::kAccountsPrefAllowGuest);
   default_values_.push_back(new base::FundamentalValue(true));
+
+  // String pref.
+  pref_names_.push_back(chromeos::kReleaseChannel);
+  default_values_.push_back(new base::StringValue(""));
+
+  // List pref.
+  pref_names_.push_back(chromeos::kAccountsPrefUsers);
+  default_values_.push_back(new base::ListValue);
+
+  // Verify notifications when default values are in effect.
+  SetupJavaScriptTestEnvironment(pref_names_, &observed_json);
+  VerifyObservedPrefs(observed_json, pref_names_, default_values_.get(),
+                      "owner", true, false);
+}
+
+// Verifies that initializing the JavaScript Preferences class fires the correct
+// notifications in JavaScript for non-privileged pref values handled by the
+// CoreChromeOSOptionsHandler class.
+IN_PROC_BROWSER_TEST_F(PreferencesBrowserTest,
+                       ChromeOSDeviceFetchNonPrivilegedPrefs) {
+  ScopedVector<base::Value> decorated_non_default_values;
+  std::string observed_json;
+
+  // Non-privileged string pref.
+  pref_names_.push_back(chromeos::kSystemTimezone);
+  default_values_.push_back(new base::StringValue("America/Los_Angeles"));
+  non_default_values_.push_back(new base::StringValue("America/New_York"));
+  decorated_non_default_values.push_back(
+      non_default_values_.back()->DeepCopy());
+
+  // Verify notifications when default values are in effect.
+  SetupJavaScriptTestEnvironment(pref_names_, &observed_json);
+  VerifyObservedPrefs(observed_json, pref_names_, default_values_.get(),
+                      std::string(), false, false);
+
+  chromeos::CrosSettings* cros_settings = chromeos::CrosSettings::Get();
+  cros_settings->Set(pref_names_[0], *non_default_values_[0]);
+
+  // Verify notifications when non-default values are in effect.
+  SetupJavaScriptTestEnvironment(pref_names_, &observed_json);
+  VerifyObservedPrefs(observed_json, pref_names_,
+                      decorated_non_default_values.get(),
+                      std::string(), false, false);
+}
+
+class ManagedPreferencesBrowserTest : public PreferencesBrowserTest {
+ protected:
+  // PreferencesBrowserTest implementation:
+  virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
+    // Set up fake install attributes.
+    scoped_ptr<policy::StubEnterpriseInstallAttributes> attributes(
+        new policy::StubEnterpriseInstallAttributes());
+    attributes->SetDomain("example.com");
+    attributes->SetRegistrationUser("user@example.com");
+    policy::BrowserPolicyConnectorChromeOS::SetInstallAttributesForTesting(
+        attributes.release());
+
+    PreferencesBrowserTest::SetUpInProcessBrowserTestFixture();
+  }
+};
+
+// Verifies that initializing the JavaScript Preferences class fires the correct
+// notifications in JavaScript for pref values handled by the
+// CoreChromeOSOptionsHandler class for a managed device.
+IN_PROC_BROWSER_TEST_F(ManagedPreferencesBrowserTest,
+                       ChromeOSDeviceFetchPrefs) {
+  ScopedVector<base::Value> decorated_non_default_values;
+  std::string observed_json;
+
+  // Boolean pref.
+  pref_names_.push_back(chromeos::kAccountsPrefAllowGuest);
   non_default_values_.push_back(new base::FundamentalValue(false));
   decorated_non_default_values.push_back(
       non_default_values_.back()->DeepCopy());
 
   // String pref.
   pref_names_.push_back(chromeos::kReleaseChannel);
-  default_values_.push_back(new base::StringValue(""));
   non_default_values_.push_back(new base::StringValue("stable-channel"));
   decorated_non_default_values.push_back(
       non_default_values_.back()->DeepCopy());
 
   // List pref.
   pref_names_.push_back(chromeos::kAccountsPrefUsers);
-  default_values_.push_back(new base::ListValue);
   base::ListValue* list = new base::ListValue;
   list->Append(new base::StringValue("me@google.com"));
   list->Append(new base::StringValue("you@google.com"));
@@ -699,23 +770,40 @@
   list->Append(dict);
   decorated_non_default_values.push_back(list);
 
-  // Verify notifications when default values are in effect.
+  chromeos::CrosSettings* cros_settings = chromeos::CrosSettings::Get();
+  for (size_t i = 0; i < pref_names_.size(); ++i) {
+    cros_settings->Set(pref_names_[i], *non_default_values_[i]);
+  }
+
+  // Verify notifications when mandatory values are in effect.
   SetupJavaScriptTestEnvironment(pref_names_, &observed_json);
-  VerifyObservedPrefs(observed_json, pref_names_, default_values_,
-                      "owner", true, false);
+  VerifyObservedPrefs(observed_json, pref_names_,
+                      decorated_non_default_values.get(),
+                      "policy", true, false);
+}
+
+// Verifies that initializing the JavaScript Preferences class fires the correct
+// notifications in JavaScript for non-privileged pref values handled by the
+// CoreChromeOSOptionsHandler class for a managed device.
+IN_PROC_BROWSER_TEST_F(ManagedPreferencesBrowserTest,
+                       ChromeOSDeviceFetchNonPrivilegedPrefs) {
+  ScopedVector<base::Value> decorated_non_default_values;
+  std::string observed_json;
+
+  // Non-privileged string pref.
+  pref_names_.push_back(chromeos::kSystemTimezone);
+  non_default_values_.push_back(new base::StringValue("America/New_York"));
+  decorated_non_default_values.push_back(
+      non_default_values_.back()->DeepCopy());
 
   // Verify notifications when mandatory values are in effect.
   chromeos::CrosSettings* cros_settings = chromeos::CrosSettings::Get();
-  for (size_t i = 0; i < pref_names_.size(); ++i)
-    cros_settings->Set(pref_names_[i], *non_default_values_[i]);
-  // FIXME(bartfab): Find a way to simulate enterprise enrollment in browser
-  // tests. Only if Chrome thinks that it is enrolled will the device prefs be
-  // decorated with "controlledBy: policy".
-  SetupJavaScriptTestEnvironment(pref_names_, &observed_json);
-  VerifyObservedPrefs(observed_json, pref_names_, decorated_non_default_values,
-                      "owner", true, false);
+  cros_settings->Set(pref_names_[0], *non_default_values_[0]);
 
-  STLDeleteElements(&decorated_non_default_values);
+  SetupJavaScriptTestEnvironment(pref_names_, &observed_json);
+  VerifyObservedPrefs(observed_json, pref_names_,
+                      decorated_non_default_values.get(),
+                      std::string(), false, false);
 }
 
 namespace {
@@ -881,7 +969,7 @@
   std::string observed_json;
   SetupJavaScriptTestEnvironment(pref_names_, &observed_json);
   VerifyObservedPrefs(
-      observed_json, pref_names_, non_default_values_, "", false, false);
+      observed_json, pref_names_, non_default_values_.get(), "", false, false);
 }
 
 IN_PROC_BROWSER_TEST_F(ProxyPreferencesBrowserTest, ONCPolicy) {
@@ -896,17 +984,18 @@
   std::string observed_json;
   SetupJavaScriptTestEnvironment(pref_names_, &observed_json);
   VerifyObservedPrefs(
-      observed_json, pref_names_, non_default_values_, "policy", true, false);
+      observed_json, pref_names_, non_default_values_.get(),
+      "policy", true, false);
 
   // Verify that 'use-shared-proxies' is not affected by per-network policy.
   pref_names_.clear();
-  STLDeleteElements(&non_default_values_);
+  non_default_values_.clear();
   pref_names_.push_back(prefs::kUseSharedProxies);
   non_default_values_.push_back(new base::FundamentalValue(false));
 
   SetupJavaScriptTestEnvironment(pref_names_, &observed_json);
   VerifyObservedPrefs(
-      observed_json, pref_names_, non_default_values_, "", false, false);
+      observed_json, pref_names_, non_default_values_.get(), "", false, false);
 }
 
 IN_PROC_BROWSER_TEST_F(ProxyPreferencesBrowserTest, DeviceONCPolicy) {
@@ -921,17 +1010,18 @@
   std::string observed_json;
   SetupJavaScriptTestEnvironment(pref_names_, &observed_json);
   VerifyObservedPrefs(
-      observed_json, pref_names_, non_default_values_, "policy", true, false);
+      observed_json, pref_names_, non_default_values_.get(),
+      "policy", true, false);
 
   // Verify that 'use-shared-proxies' is not affected by per-network policy.
   pref_names_.clear();
-  STLDeleteElements(&non_default_values_);
+  non_default_values_.clear();
   pref_names_.push_back(prefs::kUseSharedProxies);
   non_default_values_.push_back(new base::FundamentalValue(false));
 
   SetupJavaScriptTestEnvironment(pref_names_, &observed_json);
   VerifyObservedPrefs(
-      observed_json, pref_names_, non_default_values_, "", false, false);
+      observed_json, pref_names_, non_default_values_.get(), "", false, false);
 }
 
 IN_PROC_BROWSER_TEST_F(ProxyPreferencesBrowserTest, UserProxyPolicy) {
@@ -939,7 +1029,7 @@
   default_values_.push_back(
       new base::StringValue(ProxyPrefs::kAutoDetectProxyModeName));
   SetUserPolicies(
-      policy_names_, default_values_, policy::POLICY_LEVEL_MANDATORY);
+      policy_names_, default_values_.get(), policy::POLICY_LEVEL_MANDATORY);
   content::RunAllPendingInMessageLoop();
 
   // Verify that the policy is presented to the UI. This verification must be
@@ -954,7 +1044,8 @@
   std::string observed_json;
   SetupJavaScriptTestEnvironment(pref_names_, &observed_json);
   VerifyObservedPrefs(
-      observed_json, pref_names_, non_default_values_, "policy", true, false);
+      observed_json, pref_names_, non_default_values_.get(),
+      "policy", true, false);
 }
 
 // Verifies that modifications to the proxy settings are correctly pushed from
diff --git a/chrome/browser/ui/webui/options/preferences_browsertest.h b/chrome/browser/ui/webui/options/preferences_browsertest.h
index 8469b24..2727377 100644
--- a/chrome/browser/ui/webui/options/preferences_browsertest.h
+++ b/chrome/browser/ui/webui/options/preferences_browsertest.h
@@ -10,6 +10,7 @@
 
 #include "base/basictypes.h"
 #include "base/compiler_specific.h"
+#include "base/memory/scoped_vector.h"
 #include "base/prefs/pref_change_registrar.h"
 #include "base/prefs/pref_service.h"
 #include "chrome/test/base/in_process_browser_test.h"
@@ -49,7 +50,6 @@
 
   // InProcessBrowserTest implementation:
   virtual void SetUpInProcessBrowserTestFixture() OVERRIDE;
-  virtual void TearDownInProcessBrowserTestFixture() OVERRIDE;
 
   // Sets user policies through the mock policy provider.
   void SetUserPolicies(const std::vector<std::string>& names,
@@ -186,8 +186,8 @@
   std::vector<std::string> types_;
   std::vector<std::string> pref_names_;
   std::vector<std::string> policy_names_;
-  std::vector<base::Value*> default_values_;
-  std::vector<base::Value*> non_default_values_;
+  ScopedVector<base::Value> default_values_;
+  ScopedVector<base::Value> non_default_values_;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(PreferencesBrowserTest);
diff --git a/chrome/browser/ui/webui/options/startup_pages_handler.cc b/chrome/browser/ui/webui/options/startup_pages_handler.cc
index 00324ce..19b0563 100644
--- a/chrome/browser/ui/webui/options/startup_pages_handler.cc
+++ b/chrome/browser/ui/webui/options/startup_pages_handler.cc
@@ -23,10 +23,10 @@
 
 namespace options {
 
-StartupPagesHandler::StartupPagesHandler() {}
+StartupPagesHandler::StartupPagesHandler() {
+}
 
 StartupPagesHandler::~StartupPagesHandler() {
-
 }
 
 void StartupPagesHandler::GetLocalizedValues(
@@ -167,6 +167,7 @@
 
 void StartupPagesHandler::EditStartupPage(const base::ListValue* args) {
   std::string url_string;
+  GURL fixed_url;
   int index;
   CHECK_EQ(args->GetSize(), 2U);
   CHECK(args->GetInteger(0, &index));
@@ -177,9 +178,14 @@
     return;
   }
 
-  std::vector<GURL> urls = startup_custom_pages_table_model_->GetURLs();
-  urls[index] = URLFixerUpper::FixupURL(url_string, std::string());
-  startup_custom_pages_table_model_->SetURLs(urls);
+  fixed_url = URLFixerUpper::FixupURL(url_string, std::string());
+  if (!fixed_url.is_empty()) {
+    std::vector<GURL> urls = startup_custom_pages_table_model_->GetURLs();
+    urls[index] = fixed_url;
+    startup_custom_pages_table_model_->SetURLs(urls);
+  } else {
+    startup_custom_pages_table_model_->Remove(index);
+  }
 }
 
 void StartupPagesHandler::DragDropStartupPage(const base::ListValue* args) {
@@ -230,8 +236,7 @@
 
   autocomplete_controller_->Start(AutocompleteInput(
       input, base::string16::npos, base::string16(), GURL(),
-      AutocompleteInput::INVALID_SPEC, true,
-      false, false, AutocompleteInput::ALL_MATCHES));
+      AutocompleteInput::INVALID_SPEC, true, false, false, true));
 }
 
 void StartupPagesHandler::OnResultChanged(bool default_match_changed) {
diff --git a/chrome/browser/ui/webui/policy_ui.cc b/chrome/browser/ui/webui/policy_ui.cc
index 69ddc57..bd75825 100644
--- a/chrome/browser/ui/webui/policy_ui.cc
+++ b/chrome/browser/ui/webui/policy_ui.cc
@@ -577,7 +577,7 @@
   GetPolicyService()->AddObserver(policy::POLICY_DOMAIN_EXTENSIONS, this);
 
   registrar_.Add(this,
-                 chrome::NOTIFICATION_EXTENSION_LOADED,
+                 chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
                  content::NotificationService::AllSources());
   registrar_.Add(this,
                  chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
@@ -595,7 +595,7 @@
 void PolicyUIHandler::Observe(int type,
                               const content::NotificationSource& source,
                               const content::NotificationDetails& details) {
-  DCHECK(type == chrome::NOTIFICATION_EXTENSION_LOADED ||
+  DCHECK(type == chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED ||
          type == chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED);
   SendPolicyNames();
   SendPolicyValues();
diff --git a/chrome/browser/ui/webui/print_preview/print_preview_handler.cc b/chrome/browser/ui/webui/print_preview/print_preview_handler.cc
index a6ec0c6..1250aec 100644
--- a/chrome/browser/ui/webui/print_preview/print_preview_handler.cc
+++ b/chrome/browser/ui/webui/print_preview/print_preview_handler.cc
@@ -27,7 +27,6 @@
 #include "base/values.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/platform_util.h"
-#include "chrome/browser/printing/cloud_print/cloud_print_url.h"
 #include "chrome/browser/printing/print_dialog_cloud.h"
 #include "chrome/browser/printing/print_error_dialog.h"
 #include "chrome/browser/printing/print_job_manager.h"
@@ -49,6 +48,7 @@
 #include "chrome/common/crash_keys.h"
 #include "chrome/common/pref_names.h"
 #include "chrome/common/print_messages.h"
+#include "components/cloud_devices/common/cloud_devices_urls.h"
 #include "components/signin/core/browser/profile_oauth2_token_service.h"
 #include "components/signin/core/browser/signin_manager.h"
 #include "components/signin/core/browser/signin_manager_base.h"
@@ -432,7 +432,7 @@
 
     if (service) {
       OAuth2TokenService::ScopeSet oauth_scopes;
-      oauth_scopes.insert(cloud_print::kCloudPrintAuth);
+      oauth_scopes.insert(cloud_devices::kCloudPrintAuthScope);
       scoped_ptr<OAuth2TokenService::Request> request(
           service->StartRequest(account_id, oauth_scopes, this));
       requests_[type].reset(request.release());
@@ -955,15 +955,12 @@
 void PrintPreviewHandler::HandleManageCloudPrint(
     const base::ListValue* /*args*/) {
   ++manage_cloud_printers_dialog_request_count_;
-  Profile* profile = Profile::FromBrowserContext(
-      preview_web_contents()->GetBrowserContext());
-  preview_web_contents()->OpenURL(
-      content::OpenURLParams(
-          CloudPrintURL(profile).GetCloudPrintServiceManageURL(),
-          content::Referrer(),
-          NEW_FOREGROUND_TAB,
-          content::PAGE_TRANSITION_LINK,
-          false));
+  preview_web_contents()->OpenURL(content::OpenURLParams(
+      cloud_devices::GetCloudPrintRelativeURL("manage.html"),
+      content::Referrer(),
+      NEW_FOREGROUND_TAB,
+      content::PAGE_TRANSITION_LINK,
+      false));
 }
 
 void PrintPreviewHandler::HandleShowSystemDialog(
@@ -1178,7 +1175,7 @@
       preview_web_contents()->GetBrowserContext());
   PrefService* prefs = profile->GetPrefs();
   if (prefs->GetBoolean(prefs::kCloudPrintSubmitEnabled)) {
-    GURL gcp_url(CloudPrintURL(profile).GetCloudPrintServiceURL());
+    GURL gcp_url(cloud_devices::GetCloudPrintURL());
     base::StringValue gcp_url_value(gcp_url.spec());
     web_ui()->CallJavascriptFunction("setUseCloudPrint", gcp_url_value);
   }
diff --git a/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc b/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc
index 5ab044a..41957ef 100644
--- a/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc
+++ b/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc
@@ -175,8 +175,7 @@
 
 InlineLoginHandlerImpl::InlineLoginHandlerImpl()
       : weak_factory_(this),
-        choose_what_to_sync_(false),
-        complete_login_triggered_(false) {
+        choose_what_to_sync_(false) {
 }
 
 InlineLoginHandlerImpl::~InlineLoginHandlerImpl() {}
@@ -256,18 +255,6 @@
 }
 
 void InlineLoginHandlerImpl::CompleteLogin(const base::ListValue* args) {
-  if (complete_login_triggered_) {
-    // Gaia is supposed to trigger CompleteLogin by sending a completelogin
-    // message to Chrome, since Gaia does not always do this, Chrome injects
-    // some code into the Gaia page to handle that. This may result in duplicate
-    // completelogin messages when Gaia does send the message.
-    // TODO(guohui): coordinate with Gaia team to only send the completeLogin
-    // message on Chrome versions that do not inject similar code into Gaia.
-    VLOG(1) << "InlineLoginHandlerImpl::CompleteLogin called more than once";
-    return;
-  }
-  complete_login_triggered_ = true;
-
   content::WebContents* contents = web_ui()->GetWebContents();
   const GURL& current_url = contents->GetURL();
 
diff --git a/chrome/browser/ui/webui/signin/inline_login_handler_impl.h b/chrome/browser/ui/webui/signin/inline_login_handler_impl.h
index fe987de..c40f0ce 100644
--- a/chrome/browser/ui/webui/signin/inline_login_handler_impl.h
+++ b/chrome/browser/ui/webui/signin/inline_login_handler_impl.h
@@ -47,7 +47,6 @@
   std::string password_;
   std::string session_index_;
   bool choose_what_to_sync_;
-  bool complete_login_triggered_;
 
   DISALLOW_COPY_AND_ASSIGN(InlineLoginHandlerImpl);
 };
diff --git a/chrome/browser/ui/webui/signin/inline_login_ui_browsertest.cc b/chrome/browser/ui/webui/signin/inline_login_ui_browsertest.cc
index 35469d9..6f5764d 100644
--- a/chrome/browser/ui/webui/signin/inline_login_ui_browsertest.cc
+++ b/chrome/browser/ui/webui/signin/inline_login_ui_browsertest.cc
@@ -18,6 +18,8 @@
 #include "content/public/browser/web_ui_controller.h"
 #include "content/public/common/url_constants.h"
 #include "content/public/test/browser_test_utils.h"
+#include "net/base/url_util.h"
+#include "net/test/embedded_test_server/embedded_test_server.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -123,6 +125,27 @@
  public:
   FooWebUIProvider& foo_provider() { return foo_provider_; }
 
+  void WaitUntilUIReady() {
+    ASSERT_TRUE(content::ExecuteScript(
+        browser()->tab_strip_model()->GetActiveWebContents(),
+        "if (!inline.login.getAuthExtHost())"
+        "  inline.login.initialize();"
+        "var handler = function() {"
+        "  window.domAutomationController.setAutomationId(0);"
+        "  window.domAutomationController.send('ready');"
+        "};"
+        "if (inline.login.isAuthReady())"
+        "  handler();"
+        "else"
+        "  inline.login.getAuthExtHost().addEventListener('ready', handler);"));
+
+    content::DOMMessageQueue message_queue;
+    std::string message;
+    // TODO(guohui): this timeouts on trybot sometimes.
+    ASSERT_TRUE(message_queue.WaitForMessage(&message));
+    EXPECT_EQ("\"ready\"", message);
+  }
+
  private:
   virtual void SetUpOnMainThread() OVERRIDE {
     content::WebUIControllerFactory::UnregisterFactoryForTesting(
@@ -161,3 +184,24 @@
   EXPECT_CALL(foo_provider(), NewWebUI(_, _)).Times(0);
   ui_test_utils::NavigateToURL(browser(), url);
 }
+
+// Make sure that the gaia iframe cannot trigger top-frame navigation.
+// TODO(guohui): flaky on trybot crbug/364759.
+IN_PROC_BROWSER_TEST_F(InlineLoginUISafeIframeBrowserTest,
+    DISABLED_TopFrameNavigationDisallowed) {
+  ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
+  // Loads into gaia iframe a web page that attempts to deframe on load.
+  GURL deframe_url(embedded_test_server()->GetURL("/login/deframe.html"));
+  GURL url(net::AppendOrReplaceQueryParameter(
+      signin::GetPromoURL(signin::SOURCE_START_PAGE, false),
+      "frameUrl", deframe_url.spec()));
+  ui_test_utils::NavigateToURL(browser(), url);
+  WaitUntilUIReady();
+
+  content::WebContents* contents =
+      browser()->tab_strip_model()->GetActiveWebContents();
+  EXPECT_EQ(url, contents->GetVisibleURL());
+
+  content::NavigationController& controller = contents->GetController();
+  EXPECT_TRUE(controller.GetPendingEntry() == NULL);
+}
diff --git a/chrome/browser/ui/webui/signin/user_manager_screen_handler.cc b/chrome/browser/ui/webui/signin/user_manager_screen_handler.cc
index e7a58cf..492559c 100644
--- a/chrome/browser/ui/webui/signin/user_manager_screen_handler.cc
+++ b/chrome/browser/ui/webui/signin/user_manager_screen_handler.cc
@@ -107,9 +107,9 @@
   if (avatar_image.Width() <= profiles::kAvatarIconWidth ||
       avatar_image.Height() <= profiles::kAvatarIconHeight ) {
     avatar_image = ui::ResourceBundle::GetSharedInstance().GetImageNamed(
-        IDR_USER_MANAGER_DEFAULT_AVATAR);
+        profiles::GetPlaceholderAvatarIconResourceID());
   }
-  gfx::Image resized_image = profiles::GetSizedAvatarIconWithBorder(
+  gfx::Image resized_image = profiles::GetSizedAvatarIcon(
       avatar_image, is_gaia_picture, kAvatarIconSize, kAvatarIconSize);
   return webui::GetBitmapDataUrl(resized_image.AsBitmap());
 }
diff --git a/chrome/browser/ui/webui/signin/user_manager_ui_browsertest.cc b/chrome/browser/ui/webui/signin/user_manager_ui_browsertest.cc
index 96c2366..dbdb6bb 100644
--- a/chrome/browser/ui/webui/signin/user_manager_ui_browsertest.cc
+++ b/chrome/browser/ui/webui/signin/user_manager_ui_browsertest.cc
@@ -15,10 +15,6 @@
 #include "grit/generated_resources.h"
 #include "ui/base/l10n/l10n_util.h"
 
-namespace {
-const GURL& url = GURL(chrome::kChromeUIUserManagerURL);
-}  // namespace
-
 class UserManagerUIBrowserTest : public InProcessBrowserTest,
                                  public testing::WithParamInterface<bool> {
  public:
@@ -37,7 +33,8 @@
 };
 
 IN_PROC_BROWSER_TEST_F(UserManagerUIBrowserTest, PageLoads) {
-  ui_test_utils::NavigateToURLBlockUntilNavigationsComplete(browser(), url, 1);
+  ui_test_utils::NavigateToURLBlockUntilNavigationsComplete(
+      browser(), GURL(chrome::kChromeUIUserManagerURL), 1);
   content::WebContents* web_contents =
       browser()->tab_strip_model()->GetActiveWebContents();
 
diff --git a/chrome/browser/ui/webui/uber/uber_ui.cc b/chrome/browser/ui/webui/uber/uber_ui.cc
index 4393e5f..3187926 100644
--- a/chrome/browser/ui/webui/uber/uber_ui.cc
+++ b/chrome/browser/ui/webui/uber/uber_ui.cc
@@ -202,8 +202,9 @@
   content::WebUIDataSource::Add(profile, CreateUberFrameHTMLSource(profile));
 
   // Register as an observer for when extensions are loaded and unloaded.
-  registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
-      content::Source<Profile>(profile));
+  registrar_.Add(this,
+                 chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
+                 content::Source<Profile>(profile));
   registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
       content::Source<Profile>(profile));
 }
@@ -220,7 +221,7 @@
     // we must update the behavior of the History navigation element so that
     // it opens the history extension if one is installed and enabled or
     // opens the default history page if one is uninstalled or disabled.
-    case chrome::NOTIFICATION_EXTENSION_LOADED:
+    case chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED:
     case chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED: {
       Profile* profile = Profile::FromWebUI(web_ui());
       bool overrides_history =
diff --git a/chrome/browser/undo/bookmark_undo_service.cc b/chrome/browser/undo/bookmark_undo_service.cc
index 10e743c..90bcd93 100644
--- a/chrome/browser/undo/bookmark_undo_service.cc
+++ b/chrome/browser/undo/bookmark_undo_service.cc
@@ -81,7 +81,7 @@
 
 void BookmarkAddOperation::Undo() {
   BookmarkModel* model = GetBookmarkModel();
-  const BookmarkNode* parent = model->GetNodeByID(parent_id_);
+  const BookmarkNode* parent = GetBookmarkNodeByID(model, parent_id_);
   DCHECK(parent);
 
   model->Remove(parent, index_);
@@ -147,7 +147,7 @@
 void BookmarkRemoveOperation::Undo() {
   DCHECK(removed_node_.is_valid());
   BookmarkModel* model = GetBookmarkModel();
-  const BookmarkNode* parent = model->GetNodeByID(parent_id_);
+  const BookmarkNode* parent = GetBookmarkNodeByID(model, parent_id_);
   DCHECK(parent);
 
   bookmark_utils::CloneBookmarkNode(model, removed_node_.elements, parent,
@@ -215,7 +215,7 @@
 void BookmarkEditOperation::Undo() {
   DCHECK(original_bookmark_.is_valid());
   BookmarkModel* model = GetBookmarkModel();
-  const BookmarkNode* node = model->GetNodeByID(node_id_);
+  const BookmarkNode* node = GetBookmarkNodeByID(model, node_id_);
   DCHECK(node);
 
   model->SetTitle(node, original_bookmark_.elements[0].title);
@@ -279,8 +279,8 @@
 
 void BookmarkMoveOperation::Undo() {
   BookmarkModel* model = GetBookmarkModel();
-  const BookmarkNode* old_parent = model->GetNodeByID(old_parent_id_);
-  const BookmarkNode* new_parent = model->GetNodeByID(new_parent_id_);
+  const BookmarkNode* old_parent = GetBookmarkNodeByID(model, old_parent_id_);
+  const BookmarkNode* new_parent = GetBookmarkNodeByID(model, new_parent_id_);
   DCHECK(old_parent);
   DCHECK(new_parent);
 
@@ -352,12 +352,12 @@
 
 void BookmarkReorderOperation::Undo() {
   BookmarkModel* model = GetBookmarkModel();
-  const BookmarkNode* parent = model->GetNodeByID(parent_id_);
+  const BookmarkNode* parent = GetBookmarkNodeByID(model, parent_id_);
   DCHECK(parent);
 
   std::vector<const BookmarkNode*> ordered_nodes;
   for (size_t i = 0; i < ordered_bookmarks_.size(); ++i)
-    ordered_nodes.push_back(model->GetNodeByID(ordered_bookmarks_[i]));
+    ordered_nodes.push_back(GetBookmarkNodeByID(model, ordered_bookmarks_[i]));
 
   model->ReorderChildren(parent, ordered_nodes);
 }
@@ -434,7 +434,7 @@
 }
 
 void BookmarkUndoService::OnWillRemoveAllBookmarks(BookmarkModel* model) {
-  ScopedGroupBookmarkActions merge_removes(profile_);
+  ScopedGroupBookmarkActions merge_removes(model);
   for (int i = 0; i < model->root_node()->child_count(); ++i) {
     const BookmarkNode* permanent_node = model->root_node()->GetChild(i);
     for (int j = permanent_node->child_count() - 1; j >= 0; --j) {
diff --git a/chrome/browser/undo/undo_manager.cc b/chrome/browser/undo/undo_manager.cc
index 89ffe30..94e28f4 100644
--- a/chrome/browser/undo/undo_manager.cc
+++ b/chrome/browser/undo/undo_manager.cc
@@ -6,6 +6,7 @@
 
 #include "base/auto_reset.h"
 #include "base/logging.h"
+#include "chrome/browser/undo/undo_manager_observer.h"
 #include "chrome/browser/undo/undo_operation.h"
 #include "grit/generated_resources.h"
 #include "ui/base/l10n/l10n_util.h"
@@ -165,6 +166,16 @@
   DCHECK(!group_actions_count_);
   undo_actions_.clear();
   redo_actions_.clear();
+
+  NotifyOnUndoManagerStateChange();
+}
+
+void UndoManager::AddObserver(UndoManagerObserver* observer) {
+  observers_.AddObserver(observer);
+}
+
+void UndoManager::RemoveObserver(UndoManagerObserver* observer) {
+  observers_.RemoveObserver(observer);
 }
 
 void UndoManager::Undo(bool* performing_indicator,
@@ -185,6 +196,13 @@
   StartGroupingActions();
   action->Undo();
   EndGroupingActions();
+
+  NotifyOnUndoManagerStateChange();
+}
+
+void UndoManager::NotifyOnUndoManagerStateChange() {
+  FOR_EACH_OBSERVER(
+      UndoManagerObserver, observers_, OnUndoManagerStateChange());
 }
 
 void UndoManager::AddUndoGroup(UndoGroup* new_undo_group) {
@@ -197,6 +215,8 @@
   // Limit the number of undo levels so the undo stack does not grow unbounded.
   if (GetActiveUndoGroup()->size() > kMaxUndoGroups)
     GetActiveUndoGroup()->erase(GetActiveUndoGroup()->begin());
+
+  NotifyOnUndoManagerStateChange();
 }
 
 ScopedVector<UndoGroup>* UndoManager::GetActiveUndoGroup() {
diff --git a/chrome/browser/undo/undo_manager.h b/chrome/browser/undo/undo_manager.h
index d05edc3..443d2d7 100644
--- a/chrome/browser/undo/undo_manager.h
+++ b/chrome/browser/undo/undo_manager.h
@@ -8,8 +8,10 @@
 #include "base/basictypes.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/memory/scoped_vector.h"
+#include "base/observer_list.h"
 #include "base/strings/string16.h"
 
+class UndoManagerObserver;
 class UndoOperation;
 
 // UndoGroup ------------------------------------------------------------------
@@ -83,11 +85,18 @@
   // suspension of undo tracking states are left unchanged.
   void RemoveAllOperations();
 
+  // Observers are notified when the internal state of this class changes.
+  void AddObserver(UndoManagerObserver* observer);
+  void RemoveObserver(UndoManagerObserver* observer);
+
  private:
   void Undo(bool* performing_indicator,
             ScopedVector<UndoGroup>* active_undo_group);
   bool is_user_action() const { return !performing_undo_ && !performing_redo_; }
 
+  // Notifies the observers that the undo manager's state has changed.
+  void NotifyOnUndoManagerStateChange();
+
   // Handle the addition of |new_undo_group| to the active undo group container.
   void AddUndoGroup(UndoGroup* new_undo_group);
 
@@ -99,6 +108,9 @@
   ScopedVector<UndoGroup> undo_actions_;
   ScopedVector<UndoGroup> redo_actions_;
 
+  // The observers to notify when internal state changes.
+  ObserverList<UndoManagerObserver> observers_;
+
   // Supports grouping operations into a single undo action.
   int group_actions_count_;
 
diff --git a/chrome/browser/undo/undo_manager_observer.h b/chrome/browser/undo/undo_manager_observer.h
new file mode 100644
index 0000000..c61aea2
--- /dev/null
+++ b/chrome/browser/undo/undo_manager_observer.h
@@ -0,0 +1,18 @@
+// 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.
+
+#ifndef CHROME_BROWSER_UNDO_UNDO_MANAGER_OBSERVER_H_
+#define CHROME_BROWSER_UNDO_UNDO_MANAGER_OBSERVER_H_
+
+// Observer for the UndoManager.
+class UndoManagerObserver {
+ public:
+  // Invoked when the internal state of the UndoManager has changed.
+  virtual void OnUndoManagerStateChange() = 0;
+
+ protected:
+  virtual ~UndoManagerObserver() {}
+};
+
+#endif  // CHROME_BROWSER_UNDO_UNDO_MANAGER_OBSERVER_H_
diff --git a/chrome/browser/undo/undo_manager_test.cc b/chrome/browser/undo/undo_manager_test.cc
index 70215d7..4ed7d49 100644
--- a/chrome/browser/undo/undo_manager_test.cc
+++ b/chrome/browser/undo/undo_manager_test.cc
@@ -4,6 +4,7 @@
 
 #include "base/auto_reset.h"
 #include "chrome/browser/undo/undo_manager.h"
+#include "chrome/browser/undo/undo_manager_observer.h"
 #include "chrome/browser/undo/undo_operation.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -95,6 +96,22 @@
     ++undo_operation_count_;
 }
 
+// TestObserver ----------------------------------------------------------------
+
+class TestObserver : public UndoManagerObserver {
+ public:
+  TestObserver() : state_change_count_(0) {}
+  // Returns the number of state change callbacks
+  int state_change_count() { return state_change_count_; }
+
+  virtual void OnUndoManagerStateChange() OVERRIDE { ++state_change_count_; }
+
+ private:
+  int state_change_count_;
+
+  DISALLOW_COPY_AND_ASSIGN(TestObserver);
+};
+
 // Tests -----------------------------------------------------------------------
 
 TEST(UndoServiceTest, AddUndoActions) {
@@ -216,4 +233,34 @@
   EXPECT_EQ(4U, all_operations.size());
 }
 
+TEST(UndoServiceTest, ObserverCallbacks) {
+  TestObserver observer;
+  TestUndoService undo_service;
+  undo_service.undo_manager_.AddObserver(&observer);
+  EXPECT_EQ(0, observer.state_change_count());
+
+  undo_service.TriggerOperation();
+  EXPECT_EQ(1, observer.state_change_count());
+
+  undo_service.undo_manager_.StartGroupingActions();
+  undo_service.TriggerOperation();
+  undo_service.TriggerOperation();
+  undo_service.undo_manager_.EndGroupingActions();
+  EXPECT_EQ(2, observer.state_change_count());
+
+  // There should be at least 1 observer callback for undo.
+  undo_service.undo_manager_.Undo();
+  int callback_count_after_undo = observer.state_change_count();
+  EXPECT_GT(callback_count_after_undo, 2);
+
+  // There should be at least 1 observer callback for redo.
+  undo_service.undo_manager_.Redo();
+  int callback_count_after_redo = observer.state_change_count();
+  EXPECT_GT(callback_count_after_redo, callback_count_after_undo);
+
+  undo_service.undo_manager_.RemoveObserver(&observer);
+  undo_service.undo_manager_.Undo();
+  EXPECT_EQ(callback_count_after_redo, observer.state_change_count());
+}
+
 } // namespace
diff --git a/chrome/browser/usb/DEPS b/chrome/browser/usb/DEPS
deleted file mode 100644
index e3044a5..0000000
--- a/chrome/browser/usb/DEPS
+++ /dev/null
@@ -1,3 +0,0 @@
-include_rules = [
-  "+third_party/libusb",
-]
diff --git a/chrome/browser/usb/usb_context.cc b/chrome/browser/usb/usb_context.cc
deleted file mode 100644
index 27971e4..0000000
--- a/chrome/browser/usb/usb_context.cc
+++ /dev/null
@@ -1,73 +0,0 @@
-// Copyright 2013 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 "chrome/browser/usb/usb_context.h"
-
-#include "base/logging.h"
-#include "base/synchronization/waitable_event.h"
-#include "base/threading/platform_thread.h"
-#include "third_party/libusb/src/libusb/interrupt.h"
-#include "third_party/libusb/src/libusb/libusb.h"
-
-// The UsbEventHandler works around a design flaw in the libusb interface. There
-// is currently no way to signal to libusb that any caller into one of the event
-// handler calls should return without handling any events.
-class UsbContext::UsbEventHandler : public base::PlatformThread::Delegate {
- public:
-  explicit UsbEventHandler(libusb_context* context);
-  virtual ~UsbEventHandler();
-
-  // base::PlatformThread::Delegate
-  virtual void ThreadMain() OVERRIDE;
-
- private:
-  volatile bool running_;
-  libusb_context* context_;
-  base::PlatformThreadHandle thread_handle_;
-  base::WaitableEvent start_polling_;
-  DISALLOW_COPY_AND_ASSIGN(UsbEventHandler);
-};
-
-UsbContext::UsbEventHandler::UsbEventHandler(libusb_context* context)
-    : running_(true),
-      context_(context),
-      thread_handle_(0),
-      start_polling_(false, false) {
-  bool success = base::PlatformThread::Create(0, this, &thread_handle_);
-  DCHECK(success) << "Failed to create USB IO handling thread.";
-  start_polling_.Wait();
-}
-
-UsbContext::UsbEventHandler::~UsbEventHandler() {
-  running_ = false;
-  // Spreading running_ to the UsbEventHandler thread.
-  base::subtle::MemoryBarrier();
-  libusb_interrupt_handle_event(context_);
-  base::PlatformThread::Join(thread_handle_);
-}
-
-void UsbContext::UsbEventHandler::ThreadMain() {
-  base::PlatformThread::SetName("UsbEventHandler");
-  VLOG(1) << "UsbEventHandler started.";
-  if (running_) {
-    start_polling_.Signal();
-    libusb_handle_events(context_);
-  }
-  while (running_)
-    libusb_handle_events(context_);
-  VLOG(1) << "UsbEventHandler shutting down.";
-}
-
-UsbContext::UsbContext(PlatformUsbContext context) : context_(context) {
-  DCHECK(thread_checker_.CalledOnValidThread());
-  event_handler_ = new UsbEventHandler(context_);
-}
-
-UsbContext::~UsbContext() {
-  // destruction of UsbEventHandler is a blocking operation.
-  DCHECK(thread_checker_.CalledOnValidThread());
-  delete event_handler_;
-  event_handler_ = NULL;
-  libusb_exit(context_);
-}
diff --git a/chrome/browser/usb/usb_context.h b/chrome/browser/usb/usb_context.h
deleted file mode 100644
index c914206..0000000
--- a/chrome/browser/usb/usb_context.h
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2013 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 CHROME_BROWSER_USB_USB_CONTEXT_H_
-#define CHROME_BROWSER_USB_USB_CONTEXT_H_
-
-#include "base/basictypes.h"
-#include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/threading/thread_checker.h"
-
-struct libusb_context;
-
-typedef libusb_context* PlatformUsbContext;
-
-// Ref-counted wrapper for libusb_context*.
-// It also manages the life-cycle of UsbEventHandler.
-// It is a blocking operation to delete UsbContext.
-// Destructor must be called on FILE thread.
-class UsbContext : public base::RefCountedThreadSafe<UsbContext> {
- public:
-  PlatformUsbContext context() const { return context_; }
-
- protected:
-  friend class UsbService;
-  friend class base::RefCountedThreadSafe<UsbContext>;
-
-  explicit UsbContext(PlatformUsbContext context);
-  virtual ~UsbContext();
-
- private:
-  class UsbEventHandler;
-  PlatformUsbContext context_;
-  UsbEventHandler* event_handler_;
-  base::ThreadChecker thread_checker_;
-
-  DISALLOW_COPY_AND_ASSIGN(UsbContext);
-};
-
-#endif  // CHROME_BROWSER_USB_USB_CONTEXT_H_
diff --git a/chrome/browser/usb/usb_context_unittest.cc b/chrome/browser/usb/usb_context_unittest.cc
deleted file mode 100644
index dce79f4..0000000
--- a/chrome/browser/usb/usb_context_unittest.cc
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2013 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 "chrome/browser/usb/usb_context.h"
-
-#include "base/threading/platform_thread.h"
-#include "build/build_config.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/libusb/src/libusb/libusb.h"
-
-namespace {
-
-class UsbContextTest : public testing::Test {
- protected:
-  class UsbContextForTest : public UsbContext {
-   public:
-    explicit UsbContextForTest(PlatformUsbContext context)
-        : UsbContext(context) {}
-   private:
-    virtual ~UsbContextForTest() {}
-    DISALLOW_COPY_AND_ASSIGN(UsbContextForTest);
-  };
-};
-
-}  // namespace
-
-#if defined(OS_LINUX)
-// Linux trybot does not support usb.
-#define MAYBE_GracefulShutdown DISABLED_GracefulShutdown
-#elif defined(OS_ANDROID)
-// Android build does not include usb support.
-#define MAYBE_GracefulShutdown DISABLED_GracefulShutdown
-#else
-#define MAYBE_GracefulShutdown GracefulShutdown
-#endif
-
-TEST_F(UsbContextTest, MAYBE_GracefulShutdown) {
-  base::TimeTicks start = base::TimeTicks::Now();
-  {
-    PlatformUsbContext platform_context;
-    ASSERT_EQ(LIBUSB_SUCCESS, libusb_init(&platform_context));
-    scoped_refptr<UsbContextForTest> context(
-        new UsbContextForTest(platform_context));
-  }
-  base::TimeDelta elapse = base::TimeTicks::Now() - start;
-  if (elapse > base::TimeDelta::FromSeconds(2)) {
-    FAIL();
-  }
-}
diff --git a/chrome/browser/usb/usb_device.cc b/chrome/browser/usb/usb_device.cc
deleted file mode 100644
index 8f71d50..0000000
--- a/chrome/browser/usb/usb_device.cc
+++ /dev/null
@@ -1,154 +0,0 @@
-// Copyright 2013 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 "chrome/browser/usb/usb_device.h"
-
-#include <algorithm>
-
-#include "base/stl_util.h"
-#include "chrome/browser/usb/usb_context.h"
-#include "chrome/browser/usb/usb_device_handle.h"
-#include "content/public/browser/browser_thread.h"
-#include "third_party/libusb/src/libusb/libusb.h"
-
-#if defined(OS_CHROMEOS)
-#include "base/sys_info.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
-#include "chromeos/dbus/permission_broker_client.h"
-#endif  // defined(OS_CHROMEOS)
-
-using content::BrowserThread;
-
-namespace {
-
-#if defined(OS_CHROMEOS)
-void OnRequestUsbAccessReplied(
-    const base::Callback<void(bool success)>& callback,
-    bool success) {
-  BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE,
-                          base::Bind(callback, success));
-}
-#endif  // defined(OS_CHROMEOS)
-
-}  // namespace
-
-UsbDevice::UsbDevice(
-    scoped_refptr<UsbContext> context,
-    PlatformUsbDevice platform_device,
-    uint16 vendor_id,
-    uint16 product_id,
-    uint32 unique_id)
-    : platform_device_(platform_device),
-      vendor_id_(vendor_id),
-      product_id_(product_id),
-      unique_id_(unique_id),
-      context_(context) {
-  CHECK(platform_device) << "platform_device cannot be NULL";
-  libusb_ref_device(platform_device);
-}
-
-UsbDevice::UsbDevice()
-    : platform_device_(NULL),
-      vendor_id_(0),
-      product_id_(0),
-      unique_id_(0),
-      context_(NULL) {
-}
-
-UsbDevice::~UsbDevice() {
-  DCHECK(thread_checker_.CalledOnValidThread());
-  for (HandlesVector::iterator it = handles_.begin();
-      it != handles_.end();
-      ++it) {
-    (*it)->InternalClose();
-  }
-  STLClearObject(&handles_);
-  libusb_unref_device(platform_device_);
-}
-
-#if defined(OS_CHROMEOS)
-
-void UsbDevice::RequestUsbAcess(
-    int interface_id,
-    const base::Callback<void(bool success)>& callback) {
-  DCHECK(thread_checker_.CalledOnValidThread());
-
-  // ChromeOS builds on non-ChromeOS machines (dev) should not attempt to
-  // use permission broker.
-  if (base::SysInfo::IsRunningOnChromeOS()) {
-    chromeos::PermissionBrokerClient* client =
-        chromeos::DBusThreadManager::Get()->GetPermissionBrokerClient();
-    DCHECK(client) << "Could not get permission broker client.";
-    if (!client) {
-      callback.Run(false);
-      return;
-    }
-
-    BrowserThread::PostTask(
-        BrowserThread::UI, FROM_HERE,
-        base::Bind(&chromeos::PermissionBrokerClient::RequestUsbAccess,
-                   base::Unretained(client),
-                   this->vendor_id_,
-                   this->product_id_,
-                   interface_id,
-                   base::Bind(&OnRequestUsbAccessReplied, callback)));
-  }
-}
-
-#endif
-
-scoped_refptr<UsbDeviceHandle> UsbDevice::Open() {
-  DCHECK(thread_checker_.CalledOnValidThread());
-  PlatformUsbDeviceHandle handle;
-  int rv = libusb_open(platform_device_, &handle);
-  if (LIBUSB_SUCCESS == rv) {
-    scoped_refptr<UsbConfigDescriptor> interfaces = ListInterfaces();
-    if (!interfaces)
-      return NULL;
-    scoped_refptr<UsbDeviceHandle> device_handle =
-        new UsbDeviceHandle(context_, this, handle, interfaces);
-    handles_.push_back(device_handle);
-    return device_handle;
-  }
-  return NULL;
-}
-
-bool UsbDevice::Close(scoped_refptr<UsbDeviceHandle> handle) {
-  DCHECK(thread_checker_.CalledOnValidThread());
-
-  for (HandlesVector::iterator it = handles_.begin();
-      it != handles_.end();
-      ++it) {
-    if (*it == handle) {
-      (*it)->InternalClose();
-      handles_.erase(it);
-      return true;
-    }
-  }
-  return false;
-}
-
-scoped_refptr<UsbConfigDescriptor> UsbDevice::ListInterfaces() {
-  DCHECK(thread_checker_.CalledOnValidThread());
-
-  PlatformUsbConfigDescriptor platform_config;
-  const int list_result =
-      libusb_get_active_config_descriptor(platform_device_, &platform_config);
-  if (list_result == 0)
-    return new UsbConfigDescriptor(platform_config);
-
-  return NULL;
-}
-
-void UsbDevice::OnDisconnect() {
-  DCHECK(thread_checker_.CalledOnValidThread());
-  HandlesVector handles;
-  swap(handles, handles_);
-  for (std::vector<scoped_refptr<UsbDeviceHandle> >::iterator it =
-      handles.begin();
-      it != handles.end();
-      ++it) {
-    (*it)->InternalClose();
-  }
-}
diff --git a/chrome/browser/usb/usb_device.h b/chrome/browser/usb/usb_device.h
deleted file mode 100644
index a8bd0a3..0000000
--- a/chrome/browser/usb/usb_device.h
+++ /dev/null
@@ -1,94 +0,0 @@
-// Copyright 2013 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 CHROME_BROWSER_USB_USB_DEVICE_H_
-#define CHROME_BROWSER_USB_USB_DEVICE_H_
-
-#include <vector>
-
-#include "base/basictypes.h"
-#include "base/callback.h"
-#include "base/memory/ref_counted.h"
-#include "base/threading/thread_checker.h"
-#include "chrome/browser/usb/usb_interface.h"
-
-struct libusb_device;
-class UsbDeviceHandle;
-class UsbContext;
-
-typedef libusb_device* PlatformUsbDevice;
-
-// A UsbDevice object represents a detected USB device, providing basic
-// information about it. For further manipulation of the device, a
-// UsbDeviceHandle must be created from Open() method.
-class UsbDevice : public base::RefCountedThreadSafe<UsbDevice> {
- public:
-  // Accessors to basic information.
-  PlatformUsbDevice platform_device() const { return platform_device_; }
-  uint16 vendor_id() const { return vendor_id_; }
-  uint16 product_id() const { return product_id_; }
-  uint32 unique_id() const { return unique_id_; }
-
-#if defined(OS_CHROMEOS)
-  // On ChromeOS, if an interface of a claimed device is not claimed, the
-  // permission broker can change the owner of the device so that the unclaimed
-  // interfaces can be used. If this argument is missing, permission broker will
-  // not be used and this method fails if the device is claimed.
-  virtual void RequestUsbAcess(
-      int interface_id, const base::Callback<void(bool success)>& callback);
-#endif  // OS_CHROMEOS
-
-  // Creates a UsbDeviceHandle for further manipulation.
-  // Blocking method. Must be called on FILE thread.
-  virtual scoped_refptr<UsbDeviceHandle> Open();
-
-  // Explicitly closes a device handle. This method will be automatically called
-  // by the destructor of a UsbDeviceHandle as well.
-  // Closing a closed handle is a safe
-  // Blocking method. Must be called on FILE thread.
-  virtual bool Close(scoped_refptr<UsbDeviceHandle> handle);
-
-  // Lists the interfaces provided by the device and fills the given
-  // UsbConfigDescriptor.
-  // Blocking method. Must be called on FILE thread.
-  virtual scoped_refptr<UsbConfigDescriptor> ListInterfaces();
-
- protected:
-  friend class UsbService;
-  friend class base::RefCountedThreadSafe<UsbDevice>;
-
-  // Called by UsbService only;
-  UsbDevice(scoped_refptr<UsbContext> context,
-            PlatformUsbDevice platform_device,
-            uint16 vendor_id,
-            uint16 product_id,
-            uint32 unique_id);
-
-  // Constructor called in test only.
-  UsbDevice();
-  virtual ~UsbDevice();
-
-  // Called only be UsbService.
-  virtual void OnDisconnect();
-
- private:
-  PlatformUsbDevice platform_device_;
-  uint16 vendor_id_;
-  uint16 product_id_;
-  uint32 unique_id_;
-
-  // Retain the context so that it will not be released before UsbDevice.
-  scoped_refptr<UsbContext> context_;
-
-  // Opened handles.
-  typedef std::vector<scoped_refptr<UsbDeviceHandle> > HandlesVector;
-  HandlesVector handles_;
-
-  base::ThreadChecker thread_checker_;
-
-  DISALLOW_COPY_AND_ASSIGN(UsbDevice);
-};
-
-#endif  // CHROME_BROWSER_USB_USB_DEVICE_H_
diff --git a/chrome/browser/usb/usb_device_handle.cc b/chrome/browser/usb/usb_device_handle.cc
deleted file mode 100644
index 367ecfd..0000000
--- a/chrome/browser/usb/usb_device_handle.cc
+++ /dev/null
@@ -1,603 +0,0 @@
-// Copyright (c) 2013 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 "chrome/browser/usb/usb_device_handle.h"
-
-#include <algorithm>
-#include <vector>
-
-#include "base/message_loop/message_loop.h"
-#include "base/stl_util.h"
-#include "base/strings/string16.h"
-#include "base/synchronization/lock.h"
-#include "chrome/browser/usb/usb_context.h"
-#include "chrome/browser/usb/usb_device.h"
-#include "chrome/browser/usb/usb_interface.h"
-#include "chrome/browser/usb/usb_service.h"
-#include "content/public/browser/browser_thread.h"
-#include "third_party/libusb/src/libusb/libusb.h"
-
-using content::BrowserThread;
-void HandleTransferCompletion(PlatformUsbTransferHandle transfer);
-
-namespace {
-
-static uint8 ConvertTransferDirection(
-    const UsbEndpointDirection direction) {
-  switch (direction) {
-    case USB_DIRECTION_INBOUND:
-      return LIBUSB_ENDPOINT_IN;
-    case USB_DIRECTION_OUTBOUND:
-      return LIBUSB_ENDPOINT_OUT;
-    default:
-      NOTREACHED();
-      return LIBUSB_ENDPOINT_IN;
-  }
-}
-
-static uint8 CreateRequestType(const UsbEndpointDirection direction,
-    const UsbDeviceHandle::TransferRequestType request_type,
-    const UsbDeviceHandle::TransferRecipient recipient) {
-  uint8 result = ConvertTransferDirection(direction);
-
-  switch (request_type) {
-    case UsbDeviceHandle::STANDARD:
-      result |= LIBUSB_REQUEST_TYPE_STANDARD;
-      break;
-    case UsbDeviceHandle::CLASS:
-      result |= LIBUSB_REQUEST_TYPE_CLASS;
-      break;
-    case UsbDeviceHandle::VENDOR:
-      result |= LIBUSB_REQUEST_TYPE_VENDOR;
-      break;
-    case UsbDeviceHandle::RESERVED:
-      result |= LIBUSB_REQUEST_TYPE_RESERVED;
-      break;
-  }
-
-  switch (recipient) {
-    case UsbDeviceHandle::DEVICE:
-      result |= LIBUSB_RECIPIENT_DEVICE;
-      break;
-    case UsbDeviceHandle::INTERFACE:
-      result |= LIBUSB_RECIPIENT_INTERFACE;
-      break;
-    case UsbDeviceHandle::ENDPOINT:
-      result |= LIBUSB_RECIPIENT_ENDPOINT;
-      break;
-    case UsbDeviceHandle::OTHER:
-      result |= LIBUSB_RECIPIENT_OTHER;
-      break;
-  }
-
-  return result;
-}
-
-static UsbTransferStatus ConvertTransferStatus(
-    const libusb_transfer_status status) {
-  switch (status) {
-    case LIBUSB_TRANSFER_COMPLETED:
-      return USB_TRANSFER_COMPLETED;
-    case LIBUSB_TRANSFER_ERROR:
-      return USB_TRANSFER_ERROR;
-    case LIBUSB_TRANSFER_TIMED_OUT:
-      return USB_TRANSFER_TIMEOUT;
-    case LIBUSB_TRANSFER_STALL:
-      return USB_TRANSFER_STALLED;
-    case LIBUSB_TRANSFER_NO_DEVICE:
-      return USB_TRANSFER_DISCONNECT;
-    case LIBUSB_TRANSFER_OVERFLOW:
-      return USB_TRANSFER_OVERFLOW;
-    case LIBUSB_TRANSFER_CANCELLED:
-      return USB_TRANSFER_CANCELLED;
-    default:
-      NOTREACHED();
-      return USB_TRANSFER_ERROR;
-  }
-}
-
-static void LIBUSB_CALL PlatformTransferCompletionCallback(
-    PlatformUsbTransferHandle transfer) {
-  BrowserThread::PostTask(BrowserThread::FILE,
-                          FROM_HERE,
-                          base::Bind(HandleTransferCompletion, transfer));
-}
-
-}  // namespace
-
-void HandleTransferCompletion(PlatformUsbTransferHandle transfer) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
-  UsbDeviceHandle* const device_handle =
-      reinterpret_cast<UsbDeviceHandle*>(transfer->user_data);
-  CHECK(device_handle) << "Device handle is closed before transfer finishes.";
-  device_handle->TransferComplete(transfer);
-  libusb_free_transfer(transfer);
-}
-
-
-class UsbDeviceHandle::InterfaceClaimer
-    : public base::RefCountedThreadSafe<UsbDeviceHandle::InterfaceClaimer> {
- public:
-  InterfaceClaimer(const scoped_refptr<UsbDeviceHandle> handle,
-                   const int interface_number);
-
-  bool Claim() const;
-
-  int alternate_setting() const { return alternate_setting_; }
-  void set_alternate_setting(const int alternate_setting) {
-    alternate_setting_ = alternate_setting;
-  }
-
- private:
-  friend class UsbDevice;
-  friend class base::RefCountedThreadSafe<InterfaceClaimer>;
-  ~InterfaceClaimer();
-
-  const scoped_refptr<UsbDeviceHandle> handle_;
-  const int interface_number_;
-  int alternate_setting_;
-
-  DISALLOW_COPY_AND_ASSIGN(InterfaceClaimer);
-};
-
-UsbDeviceHandle::InterfaceClaimer::InterfaceClaimer(
-    const scoped_refptr<UsbDeviceHandle> handle, const int interface_number)
-    : handle_(handle),
-      interface_number_(interface_number),
-      alternate_setting_(0) {
-}
-
-UsbDeviceHandle::InterfaceClaimer::~InterfaceClaimer() {
-  libusb_release_interface(handle_->handle(), interface_number_);
-}
-
-bool UsbDeviceHandle::InterfaceClaimer::Claim() const {
-  return libusb_claim_interface(handle_->handle(), interface_number_) == 0;
-}
-
-struct UsbDeviceHandle::Transfer {
-  Transfer();
-  ~Transfer();
-
-  UsbTransferType transfer_type;
-  scoped_refptr<net::IOBuffer> buffer;
-  scoped_refptr<UsbDeviceHandle::InterfaceClaimer> claimed_interface;
-  scoped_refptr<base::MessageLoopProxy> message_loop_proxy;
-  size_t length;
-  UsbTransferCallback callback;
-};
-
-UsbDeviceHandle::Transfer::Transfer()
-    : transfer_type(USB_TRANSFER_CONTROL),
-      length(0) {
-}
-
-UsbDeviceHandle::Transfer::~Transfer() {}
-
-UsbDeviceHandle::UsbDeviceHandle(
-    scoped_refptr<UsbContext> context,
-    UsbDevice* device,
-    PlatformUsbDeviceHandle handle,
-    scoped_refptr<UsbConfigDescriptor> interfaces)
-    : device_(device),
-      handle_(handle),
-      interfaces_(interfaces),
-      context_(context) {
-  DCHECK(thread_checker_.CalledOnValidThread());
-  DCHECK(handle) << "Cannot create device with NULL handle.";
-  DCHECK(interfaces_) << "Unabled to list interfaces";
-}
-
-UsbDeviceHandle::UsbDeviceHandle() : device_(NULL), handle_(NULL) {
-}
-
-UsbDeviceHandle::~UsbDeviceHandle() {
-  DCHECK(thread_checker_.CalledOnValidThread());
-
-  libusb_close(handle_);
-  handle_ = NULL;
-}
-
-scoped_refptr<UsbDevice> UsbDeviceHandle::device() const {
-  return device_;
-}
-
-void UsbDeviceHandle::Close() {
-  DCHECK(thread_checker_.CalledOnValidThread());
-  if (device_)
-    device_->Close(this);
-}
-
-void UsbDeviceHandle::TransferComplete(PlatformUsbTransferHandle handle) {
-  DCHECK(ContainsKey(transfers_, handle)) << "Missing transfer completed";
-
-  Transfer transfer = transfers_[handle];
-  transfers_.erase(handle);
-
-  DCHECK_GE(handle->actual_length, 0) << "Negative actual length received";
-  size_t actual_length =
-      static_cast<size_t>(std::max(handle->actual_length, 0));
-
-  DCHECK(transfer.length >= actual_length) <<
-      "data too big for our buffer (libusb failure?)";
-
-  scoped_refptr<net::IOBuffer> buffer = transfer.buffer;
-  switch (transfer.transfer_type) {
-    case USB_TRANSFER_CONTROL:
-      // If the transfer is a control transfer we do not expose the control
-      // setup header to the caller. This logic strips off the header if
-      // present before invoking the callback provided with the transfer.
-      if (actual_length > 0) {
-        CHECK(transfer.length >= LIBUSB_CONTROL_SETUP_SIZE) <<
-            "buffer was not correctly set: too small for the control header";
-
-        if (transfer.length >= actual_length &&
-            actual_length >= LIBUSB_CONTROL_SETUP_SIZE) {
-          // If the payload is zero bytes long, pad out the allocated buffer
-          // size to one byte so that an IOBuffer of that size can be allocated.
-          scoped_refptr<net::IOBuffer> resized_buffer = new net::IOBuffer(
-              std::max(actual_length, static_cast<size_t>(1)));
-          memcpy(resized_buffer->data(),
-                 buffer->data() + LIBUSB_CONTROL_SETUP_SIZE,
-                 actual_length);
-          buffer = resized_buffer;
-        }
-      }
-      break;
-
-    case USB_TRANSFER_ISOCHRONOUS:
-      // Isochronous replies might carry data in the different isoc packets even
-      // if the transfer actual_data value is zero. Furthermore, not all of the
-      // received packets might contain data, so we need to calculate how many
-      // data bytes we are effectively providing and pack the results.
-      if (actual_length == 0) {
-        size_t packet_buffer_start = 0;
-        for (int i = 0; i < handle->num_iso_packets; ++i) {
-          PlatformUsbIsoPacketDescriptor packet = &handle->iso_packet_desc[i];
-          if (packet->actual_length > 0) {
-            // We don't need to copy as long as all packets until now provide
-            // all the data the packet can hold.
-            if (actual_length < packet_buffer_start) {
-              CHECK(packet_buffer_start + packet->actual_length <=
-                    transfer.length);
-              memmove(buffer->data() + actual_length,
-                      buffer->data() + packet_buffer_start,
-                      packet->actual_length);
-            }
-            actual_length += packet->actual_length;
-          }
-
-          packet_buffer_start += packet->length;
-        }
-      }
-      break;
-
-    case USB_TRANSFER_BULK:
-    case USB_TRANSFER_INTERRUPT:
-      break;
-
-    default:
-      NOTREACHED() << "Invalid usb transfer type";
-      break;
-  }
-
-  transfer.message_loop_proxy->PostTask(
-      FROM_HERE,
-      base::Bind(transfer.callback,
-                 ConvertTransferStatus(handle->status),
-                 buffer,
-                 actual_length));
-
-  // Must release interface first before actually delete this.
-  transfer.claimed_interface = NULL;
-}
-
-bool UsbDeviceHandle::ClaimInterface(const int interface_number) {
-  DCHECK(thread_checker_.CalledOnValidThread());
-  if (!device_) return false;
-  if (ContainsKey(claimed_interfaces_, interface_number)) return true;
-
-  scoped_refptr<InterfaceClaimer> claimer =
-      new InterfaceClaimer(this, interface_number);
-
-  if (claimer->Claim()) {
-    claimed_interfaces_[interface_number]= claimer;
-    RefreshEndpointMap();
-    return true;
-  }
-  return false;
-}
-
-bool UsbDeviceHandle::ReleaseInterface(const int interface_number) {
-  DCHECK(thread_checker_.CalledOnValidThread());
-  if (!device_) return false;
-  if (!ContainsKey(claimed_interfaces_, interface_number)) return false;
-
-  // Cancel all the transfers on that interface.
-  InterfaceClaimer* interface_claimer =
-      claimed_interfaces_[interface_number].get();
-  for (TransferMap::iterator it = transfers_.begin();
-      it != transfers_.end(); ++it) {
-    if (it->second.claimed_interface.get() == interface_claimer)
-      libusb_cancel_transfer(it->first);
-  }
-  claimed_interfaces_.erase(interface_number);
-
-  RefreshEndpointMap();
-  return true;
-}
-
-bool UsbDeviceHandle::SetInterfaceAlternateSetting(
-    const int interface_number,
-    const int alternate_setting) {
-  DCHECK(thread_checker_.CalledOnValidThread());
-  if (!device_) return false;
-  if (!ContainsKey(claimed_interfaces_, interface_number)) return false;
-  const int rv = libusb_set_interface_alt_setting(handle_,
-      interface_number, alternate_setting);
-  if (rv == 0) {
-    claimed_interfaces_[interface_number]->
-      set_alternate_setting(alternate_setting);
-    RefreshEndpointMap();
-    return true;
-  }
-  return false;
-}
-
-bool UsbDeviceHandle::ResetDevice() {
-  DCHECK(thread_checker_.CalledOnValidThread());
-  if (!device_) return false;
-
-  return libusb_reset_device(handle_) == 0;
-}
-
-bool UsbDeviceHandle::GetSerial(base::string16* serial) {
-  DCHECK(thread_checker_.CalledOnValidThread());
-  PlatformUsbDevice device = libusb_get_device(handle_);
-  libusb_device_descriptor desc;
-
-  if (libusb_get_device_descriptor(device, &desc) != LIBUSB_SUCCESS)
-    return false;
-
-  if (desc.iSerialNumber == 0)
-    return false;
-
-  // Getting supported language ID.
-  uint16 langid[128] = { 0 };
-
-  int size = libusb_get_string_descriptor(
-      handle_, 0, 0,
-      reinterpret_cast<unsigned char*>(&langid[0]), sizeof(langid));
-  if (size < 0)
-    return false;
-
-  int language_count = (size - 2) / 2;
-
-  for (int i = 1; i <= language_count; ++i) {
-    // Get the string using language ID.
-    base::char16 text[256] = { 0 };
-    size = libusb_get_string_descriptor(
-        handle_, desc.iSerialNumber, langid[i],
-        reinterpret_cast<unsigned char*>(&text[0]), sizeof(text));
-    if (size <= 2)
-      continue;
-    if ((text[0] >> 8) != LIBUSB_DT_STRING)
-      continue;
-    if ((text[0] & 255) > size)
-      continue;
-
-    size = size / 2 - 1;
-    *serial = base::string16(text + 1, size);
-    return true;
-  }
-  return false;
-}
-
-void UsbDeviceHandle::ControlTransfer(const UsbEndpointDirection direction,
-    const TransferRequestType request_type, const TransferRecipient recipient,
-    const uint8 request, const uint16 value, const uint16 index,
-    net::IOBuffer* buffer, const size_t length, const unsigned int timeout,
-    const UsbTransferCallback& callback) {
-  if (!device_) {
-    callback.Run(USB_TRANSFER_DISCONNECT, buffer, 0);
-    return;
-  }
-
-  const size_t resized_length = LIBUSB_CONTROL_SETUP_SIZE + length;
-  scoped_refptr<net::IOBuffer> resized_buffer(new net::IOBufferWithSize(
-      resized_length));
-  memcpy(resized_buffer->data() + LIBUSB_CONTROL_SETUP_SIZE, buffer->data(),
-         length);
-
-  PlatformUsbTransferHandle const transfer = libusb_alloc_transfer(0);
-  const uint8 converted_type = CreateRequestType(direction, request_type,
-                                                 recipient);
-  libusb_fill_control_setup(reinterpret_cast<uint8*>(resized_buffer->data()),
-                            converted_type, request, value, index, length);
-  libusb_fill_control_transfer(
-      transfer,
-      handle_,
-      reinterpret_cast<uint8*>(resized_buffer->data()),
-      PlatformTransferCompletionCallback,
-      this,
-      timeout);
-
-  BrowserThread::PostTask(
-      BrowserThread::FILE,
-      FROM_HERE,
-      base::Bind(&UsbDeviceHandle::SubmitTransfer,
-                 this,
-                 transfer,
-                 USB_TRANSFER_CONTROL,
-                 resized_buffer,
-                 resized_length,
-                 base::MessageLoopProxy::current(),
-                 callback));
-}
-
-void UsbDeviceHandle::BulkTransfer(const UsbEndpointDirection direction,
-    const uint8 endpoint, net::IOBuffer* buffer, const size_t length,
-    const unsigned int timeout, const UsbTransferCallback& callback) {
-  if (!device_) {
-    callback.Run(USB_TRANSFER_DISCONNECT, buffer, 0);
-    return;
-  }
-
-  PlatformUsbTransferHandle const transfer = libusb_alloc_transfer(0);
-  const uint8 new_endpoint = ConvertTransferDirection(direction) | endpoint;
-  libusb_fill_bulk_transfer(transfer, handle_, new_endpoint,
-      reinterpret_cast<uint8*>(buffer->data()), length,
-      PlatformTransferCompletionCallback, this, timeout);
-
-  BrowserThread::PostTask(
-      BrowserThread::FILE,
-      FROM_HERE,
-      base::Bind(&UsbDeviceHandle::SubmitTransfer,
-                 this,
-                 transfer,
-                 USB_TRANSFER_BULK,
-                 make_scoped_refptr(buffer),
-                 length,
-                 base::MessageLoopProxy::current(),
-                 callback));
-}
-
-void UsbDeviceHandle::InterruptTransfer(const UsbEndpointDirection direction,
-    const uint8 endpoint, net::IOBuffer* buffer, const size_t length,
-    const unsigned int timeout, const UsbTransferCallback& callback) {
-  if (!device_) {
-    callback.Run(USB_TRANSFER_DISCONNECT, buffer, 0);
-    return;
-  }
-
-  PlatformUsbTransferHandle const transfer = libusb_alloc_transfer(0);
-  const uint8 new_endpoint = ConvertTransferDirection(direction) | endpoint;
-  libusb_fill_interrupt_transfer(transfer, handle_, new_endpoint,
-      reinterpret_cast<uint8*>(buffer->data()), length,
-      PlatformTransferCompletionCallback, this, timeout);
-  BrowserThread::PostTask(
-      BrowserThread::FILE,
-      FROM_HERE,
-      base::Bind(&UsbDeviceHandle::SubmitTransfer,
-                 this,
-                 transfer,
-                 USB_TRANSFER_INTERRUPT,
-                 make_scoped_refptr(buffer),
-                 length,
-                 base::MessageLoopProxy::current(),
-                 callback));
-}
-
-void UsbDeviceHandle::IsochronousTransfer(const UsbEndpointDirection direction,
-    const uint8 endpoint, net::IOBuffer* buffer, const size_t length,
-    const unsigned int packets, const unsigned int packet_length,
-    const unsigned int timeout, const UsbTransferCallback& callback) {
-  if (!device_) {
-    callback.Run(USB_TRANSFER_DISCONNECT, buffer, 0);
-    return;
-  }
-
-  const uint64 total_length = packets * packet_length;
-  CHECK(packets <= length && total_length <= length) <<
-      "transfer length is too small";
-
-  PlatformUsbTransferHandle const transfer = libusb_alloc_transfer(packets);
-  const uint8 new_endpoint = ConvertTransferDirection(direction) | endpoint;
-  libusb_fill_iso_transfer(transfer, handle_, new_endpoint,
-      reinterpret_cast<uint8*>(buffer->data()), length, packets,
-      PlatformTransferCompletionCallback, this, timeout);
-  libusb_set_iso_packet_lengths(transfer, packet_length);
-
-  BrowserThread::PostTask(
-      BrowserThread::FILE,
-      FROM_HERE,
-      base::Bind(&UsbDeviceHandle::SubmitTransfer,
-                 this,
-                 transfer,
-                 USB_TRANSFER_ISOCHRONOUS,
-                 make_scoped_refptr(buffer),
-                 length,
-                 base::MessageLoopProxy::current(),
-                 callback));
-}
-
-void UsbDeviceHandle::RefreshEndpointMap() {
-  DCHECK(thread_checker_.CalledOnValidThread());
-  endpoint_map_.clear();
-  for (ClaimedInterfaceMap::iterator it = claimed_interfaces_.begin();
-      it != claimed_interfaces_.end(); ++it) {
-    scoped_refptr<const UsbInterfaceAltSettingDescriptor> interface_desc =
-        interfaces_->GetInterface(it->first)->GetAltSetting(
-            it->second->alternate_setting());
-    for (size_t i = 0; i < interface_desc->GetNumEndpoints(); i++) {
-      scoped_refptr<const UsbEndpointDescriptor> endpoint =
-          interface_desc->GetEndpoint(i);
-      endpoint_map_[endpoint->GetAddress()] = it->first;
-    }
-  }
-}
-
-scoped_refptr<UsbDeviceHandle::InterfaceClaimer>
-    UsbDeviceHandle::GetClaimedInterfaceForEndpoint(unsigned char endpoint) {
-  unsigned char address = endpoint & LIBUSB_ENDPOINT_ADDRESS_MASK;
-  if (ContainsKey(endpoint_map_, address))
-    return claimed_interfaces_[endpoint_map_[address]];
-  return NULL;
-}
-
-void UsbDeviceHandle::SubmitTransfer(
-    PlatformUsbTransferHandle handle,
-    UsbTransferType transfer_type,
-    net::IOBuffer* buffer,
-    const size_t length,
-    scoped_refptr<base::MessageLoopProxy> message_loop_proxy,
-    const UsbTransferCallback& callback) {
-  DCHECK(thread_checker_.CalledOnValidThread());
-  if (!device_) {
-    message_loop_proxy->PostTask(
-        FROM_HERE,
-        base::Bind(callback, USB_TRANSFER_DISCONNECT,
-                   make_scoped_refptr(buffer), 0));
-  }
-
-  Transfer transfer;
-  transfer.transfer_type = transfer_type;
-  transfer.buffer = buffer;
-  transfer.length = length;
-  transfer.callback = callback;
-  transfer.message_loop_proxy = message_loop_proxy;
-
-  // It's OK for this method to return NULL. libusb_submit_transfer will fail if
-  // it requires an interface we didn't claim.
-  transfer.claimed_interface = GetClaimedInterfaceForEndpoint(handle->endpoint);
-
-  if (libusb_submit_transfer(handle) == LIBUSB_SUCCESS) {
-    transfers_[handle] = transfer;
-  } else {
-    message_loop_proxy->PostTask(
-        FROM_HERE,
-        base::Bind(callback, USB_TRANSFER_ERROR,
-                   make_scoped_refptr(buffer), 0));
-  }
-}
-
-void UsbDeviceHandle::InternalClose() {
-  DCHECK(thread_checker_.CalledOnValidThread());
-  if (!device_) return;
-
-  // Cancel all the transfers.
-  for (TransferMap::iterator it = transfers_.begin();
-      it != transfers_.end(); ++it) {
-    // The callback will be called some time later.
-    libusb_cancel_transfer(it->first);
-  }
-
-  // Attempt-release all the interfaces.
-  // It will be retained until the transfer cancellation is finished.
-  claimed_interfaces_.clear();
-
-  // Cannot close device handle here. Need to wait for libusb_cancel_transfer to
-  // finish.
-  device_ = NULL;
-}
diff --git a/chrome/browser/usb/usb_device_handle.h b/chrome/browser/usb/usb_device_handle.h
deleted file mode 100644
index 09cd101..0000000
--- a/chrome/browser/usb/usb_device_handle.h
+++ /dev/null
@@ -1,185 +0,0 @@
-// Copyright (c) 2013 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 CHROME_BROWSER_USB_USB_DEVICE_HANDLE_H_
-#define CHROME_BROWSER_USB_USB_DEVICE_HANDLE_H_
-
-#include <map>
-#include <vector>
-
-#include "base/memory/ref_counted.h"
-#include "base/strings/string16.h"
-#include "base/synchronization/lock.h"
-#include "base/threading/thread_checker.h"
-#include "chrome/browser/usb/usb_interface.h"
-#include "net/base/completion_callback.h"
-#include "net/base/io_buffer.h"
-
-struct libusb_device_handle;
-struct libusb_iso_packet_descriptor;
-struct libusb_transfer;
-
-typedef libusb_device_handle* PlatformUsbDeviceHandle;
-typedef libusb_iso_packet_descriptor* PlatformUsbIsoPacketDescriptor;
-typedef libusb_transfer* PlatformUsbTransferHandle;
-
-class UsbContext;
-class UsbConfigDescriptor;
-class UsbDevice;
-class UsbInterfaceDescriptor;
-
-namespace base {
-  class MessageLoopProxy;
-}  // namespace base
-
-namespace net {
-class IOBuffer;
-}  // namespace net
-
-enum UsbTransferStatus {
-  USB_TRANSFER_COMPLETED = 0,
-  USB_TRANSFER_ERROR,
-  USB_TRANSFER_TIMEOUT,
-  USB_TRANSFER_CANCELLED,
-  USB_TRANSFER_STALLED,
-  USB_TRANSFER_DISCONNECT,
-  USB_TRANSFER_OVERFLOW,
-  USB_TRANSFER_LENGTH_SHORT,
-};
-
-typedef base::Callback<void(UsbTransferStatus, scoped_refptr<net::IOBuffer>,
-    size_t)> UsbTransferCallback;
-
-// UsbDeviceHandle class provides basic I/O related functionalities.
-class UsbDeviceHandle : public base::RefCountedThreadSafe<UsbDeviceHandle> {
- public:
-  enum TransferRequestType { STANDARD, CLASS, VENDOR, RESERVED };
-  enum TransferRecipient { DEVICE, INTERFACE, ENDPOINT, OTHER };
-
-  scoped_refptr<UsbDevice> device() const;
-  PlatformUsbDeviceHandle handle() const { return handle_; }
-
-  // Notifies UsbDevice to drop the reference of this object; cancels all the
-  // flying transfers.
-  // It is possible that the object has no other reference after this call. So
-  // if it is called using a raw pointer, it could be invalidated.
-  // The platform device handle will be closed when UsbDeviceHandle destructs.
-  virtual void Close();
-
-  // Device manipulation operations. These methods are blocking and must be
-  // called on FILE thread.
-  virtual bool ClaimInterface(const int interface_number);
-  virtual bool ReleaseInterface(const int interface_number);
-  virtual bool SetInterfaceAlternateSetting(
-      const int interface_number,
-      const int alternate_setting);
-  virtual bool ResetDevice();
-  virtual bool GetSerial(base::string16* serial);
-
-  // Async IO. Can be called on any thread.
-  virtual void ControlTransfer(const UsbEndpointDirection direction,
-                               const TransferRequestType request_type,
-                               const TransferRecipient recipient,
-                               const uint8 request,
-                               const uint16 value,
-                               const uint16 index,
-                               net::IOBuffer* buffer,
-                               const size_t length,
-                               const unsigned int timeout,
-                               const UsbTransferCallback& callback);
-
-  virtual void BulkTransfer(const UsbEndpointDirection direction,
-                            const uint8 endpoint,
-                            net::IOBuffer* buffer,
-                            const size_t length,
-                            const unsigned int timeout,
-                            const UsbTransferCallback& callback);
-
-  virtual void InterruptTransfer(const UsbEndpointDirection direction,
-                                 const uint8 endpoint,
-                                 net::IOBuffer* buffer,
-                                 const size_t length,
-                                 const unsigned int timeout,
-                                 const UsbTransferCallback& callback);
-
-  virtual void IsochronousTransfer(const UsbEndpointDirection direction,
-                                   const uint8 endpoint,
-                                   net::IOBuffer* buffer,
-                                   const size_t length,
-                                   const unsigned int packets,
-                                   const unsigned int packet_length,
-                                   const unsigned int timeout,
-                                   const UsbTransferCallback& callback);
-
- protected:
-  friend class base::RefCountedThreadSafe<UsbDeviceHandle>;
-  friend class UsbDevice;
-
-  // This constructor is called by UsbDevice.
-  UsbDeviceHandle(scoped_refptr<UsbContext> context,
-                  UsbDevice* device, PlatformUsbDeviceHandle handle,
-                  scoped_refptr<UsbConfigDescriptor> interfaces);
-
-  // This constructor variant is for use in testing only.
-  UsbDeviceHandle();
-  virtual ~UsbDeviceHandle();
-
-  UsbDevice* device_;
-
- private:
-  friend void HandleTransferCompletion(PlatformUsbTransferHandle handle);
-
-  class InterfaceClaimer;
-  struct Transfer;
-
-  // Refresh endpoint_map_ after ClaimInterface, ReleaseInterface and
-  // SetInterfaceAlternateSetting.
-  void RefreshEndpointMap();
-
-  // Look up the claimed interface by endpoint. Return NULL if the interface
-  // of the endpoint is not found.
-  scoped_refptr<InterfaceClaimer> GetClaimedInterfaceForEndpoint(
-      unsigned char endpoint);
-
-  // Submits a transfer and starts tracking it. Retains the buffer and copies
-  // the completion callback until the transfer finishes, whereupon it invokes
-  // the callback then releases the buffer.
-  void SubmitTransfer(PlatformUsbTransferHandle handle,
-                      UsbTransferType transfer_type,
-                      net::IOBuffer* buffer,
-                      const size_t length,
-                      scoped_refptr<base::MessageLoopProxy> message_loop_proxy,
-                      const UsbTransferCallback& callback);
-
-  // Invokes the callbacks associated with a given transfer, and removes it from
-  // the in-flight transfer set.
-  void TransferComplete(PlatformUsbTransferHandle transfer);
-
-  // Informs the object to drop internal references.
-  void InternalClose();
-
-  PlatformUsbDeviceHandle handle_;
-
-  scoped_refptr<UsbConfigDescriptor> interfaces_;
-
-  typedef std::map<int, scoped_refptr<InterfaceClaimer> > ClaimedInterfaceMap;
-  ClaimedInterfaceMap claimed_interfaces_;
-
-  typedef std::map<PlatformUsbTransferHandle, Transfer> TransferMap;
-  TransferMap transfers_;
-
-  // A map from endpoints to interfaces
-  typedef std::map<int, int> EndpointMap;
-  EndpointMap endpoint_map_;
-
-  // Retain the UsbContext so that the platform context will not be destroyed
-  // before this handle.
-  scoped_refptr<UsbContext> context_;
-
-  base::ThreadChecker thread_checker_;
-
-  DISALLOW_COPY_AND_ASSIGN(UsbDeviceHandle);
-};
-
-#endif  // CHROME_BROWSER_USB_USB_DEVICE_HANDLE_H_
diff --git a/chrome/browser/usb/usb_interface.cc b/chrome/browser/usb/usb_interface.cc
deleted file mode 100644
index d5a1e0f..0000000
--- a/chrome/browser/usb/usb_interface.cc
+++ /dev/null
@@ -1,161 +0,0 @@
-// Copyright (c) 2012 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 "chrome/browser/usb/usb_interface.h"
-
-#include "base/logging.h"
-#include "third_party/libusb/src/libusb/libusb.h"
-
-UsbEndpointDescriptor::UsbEndpointDescriptor(
-    scoped_refptr<const UsbConfigDescriptor> config,
-    PlatformUsbEndpointDescriptor descriptor)
-    : config_(config), descriptor_(descriptor) {
-}
-
-UsbEndpointDescriptor::~UsbEndpointDescriptor() {}
-
-int UsbEndpointDescriptor::GetAddress() const {
-  return descriptor_->bEndpointAddress & LIBUSB_ENDPOINT_ADDRESS_MASK;
-}
-
-UsbEndpointDirection UsbEndpointDescriptor::GetDirection() const {
-  switch (descriptor_->bEndpointAddress & LIBUSB_ENDPOINT_DIR_MASK) {
-    case LIBUSB_ENDPOINT_IN:
-      return USB_DIRECTION_INBOUND;
-    case LIBUSB_ENDPOINT_OUT:
-      return USB_DIRECTION_OUTBOUND;
-    default:
-      NOTREACHED();
-      return USB_DIRECTION_INBOUND;
-  }
-}
-
-int UsbEndpointDescriptor::GetMaximumPacketSize() const {
-  return descriptor_->wMaxPacketSize;
-}
-
-UsbSynchronizationType UsbEndpointDescriptor::GetSynchronizationType() const {
-  switch (descriptor_->bmAttributes & LIBUSB_ISO_SYNC_TYPE_MASK) {
-    case LIBUSB_ISO_SYNC_TYPE_NONE:
-      return USB_SYNCHRONIZATION_NONE;
-    case LIBUSB_ISO_SYNC_TYPE_ASYNC:
-      return USB_SYNCHRONIZATION_ASYNCHRONOUS;
-    case LIBUSB_ISO_SYNC_TYPE_ADAPTIVE:
-      return USB_SYNCHRONIZATION_ADAPTIVE;
-    case LIBUSB_ISO_SYNC_TYPE_SYNC:
-      return USB_SYNCHRONIZATION_SYNCHRONOUS;
-    default:
-      NOTREACHED();
-      return USB_SYNCHRONIZATION_NONE;
-  }
-}
-
-UsbTransferType UsbEndpointDescriptor::GetTransferType() const {
-  switch (descriptor_->bmAttributes & LIBUSB_TRANSFER_TYPE_MASK) {
-    case LIBUSB_TRANSFER_TYPE_CONTROL:
-      return USB_TRANSFER_CONTROL;
-    case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS:
-      return USB_TRANSFER_ISOCHRONOUS;
-    case LIBUSB_TRANSFER_TYPE_BULK:
-      return USB_TRANSFER_BULK;
-    case LIBUSB_TRANSFER_TYPE_INTERRUPT:
-      return USB_TRANSFER_INTERRUPT;
-    default:
-      NOTREACHED();
-      return USB_TRANSFER_CONTROL;
-  }
-}
-
-UsbUsageType UsbEndpointDescriptor::GetUsageType() const {
-  switch (descriptor_->bmAttributes & LIBUSB_ISO_USAGE_TYPE_MASK) {
-    case LIBUSB_ISO_USAGE_TYPE_DATA:
-      return USB_USAGE_DATA;
-    case LIBUSB_ISO_USAGE_TYPE_FEEDBACK:
-      return USB_USAGE_FEEDBACK;
-    case LIBUSB_ISO_USAGE_TYPE_IMPLICIT:
-      return USB_USAGE_EXPLICIT_FEEDBACK;
-    default:
-      NOTREACHED();
-      return USB_USAGE_DATA;
-  }
-}
-
-int UsbEndpointDescriptor::GetPollingInterval() const {
-  return descriptor_->bInterval;
-}
-
-UsbInterfaceAltSettingDescriptor::UsbInterfaceAltSettingDescriptor(
-    scoped_refptr<const UsbConfigDescriptor> config,
-    PlatformUsbInterfaceDescriptor descriptor)
-    : config_(config), descriptor_(descriptor) {
-}
-
-UsbInterfaceAltSettingDescriptor::~UsbInterfaceAltSettingDescriptor() {}
-
-size_t UsbInterfaceAltSettingDescriptor::GetNumEndpoints() const {
-  return descriptor_->bNumEndpoints;
-}
-
-scoped_refptr<const UsbEndpointDescriptor>
-    UsbInterfaceAltSettingDescriptor::GetEndpoint(size_t index) const {
-  return new UsbEndpointDescriptor(config_, &descriptor_->endpoint[index]);
-}
-
-int UsbInterfaceAltSettingDescriptor::GetInterfaceNumber() const {
-  return descriptor_->bInterfaceNumber;
-}
-
-int UsbInterfaceAltSettingDescriptor::GetAlternateSetting() const {
-  return descriptor_->bAlternateSetting;
-}
-
-int UsbInterfaceAltSettingDescriptor::GetInterfaceClass() const {
-  return descriptor_->bInterfaceClass;
-}
-
-int UsbInterfaceAltSettingDescriptor::GetInterfaceSubclass() const {
-  return descriptor_->bInterfaceSubClass;
-}
-
-int UsbInterfaceAltSettingDescriptor::GetInterfaceProtocol() const {
-  return descriptor_->bInterfaceProtocol;
-}
-
-UsbInterfaceDescriptor::UsbInterfaceDescriptor(
-    scoped_refptr<const UsbConfigDescriptor> config,
-    PlatformUsbInterface usbInterface)
-    : config_(config), interface_(usbInterface) {
-}
-
-UsbInterfaceDescriptor::~UsbInterfaceDescriptor() {}
-
-size_t UsbInterfaceDescriptor::GetNumAltSettings() const {
-  return interface_->num_altsetting;
-}
-
-scoped_refptr<const UsbInterfaceAltSettingDescriptor>
-    UsbInterfaceDescriptor::GetAltSetting(size_t index) const {
-  return new UsbInterfaceAltSettingDescriptor(config_,
-                                              &interface_->altsetting[index]);
-}
-
-UsbConfigDescriptor::UsbConfigDescriptor(PlatformUsbConfigDescriptor config)
-    : config_(config) {
-}
-
-UsbConfigDescriptor::~UsbConfigDescriptor() {
-  if (config_ != NULL) {
-    libusb_free_config_descriptor(config_);
-    config_ = NULL;
-  }
-}
-
-size_t UsbConfigDescriptor::GetNumInterfaces() const {
-  return config_->bNumInterfaces;
-}
-
-scoped_refptr<const UsbInterfaceDescriptor>
-    UsbConfigDescriptor::GetInterface(size_t index) const {
-  return new UsbInterfaceDescriptor(this, &config_->interface[index]);
-}
diff --git a/chrome/browser/usb/usb_interface.h b/chrome/browser/usb/usb_interface.h
deleted file mode 100644
index e73b044..0000000
--- a/chrome/browser/usb/usb_interface.h
+++ /dev/null
@@ -1,141 +0,0 @@
-// Copyright (c) 2012 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 CHROME_BROWSER_USB_USB_INTERFACE_H_
-#define CHROME_BROWSER_USB_USB_INTERFACE_H_
-
-#include "base/memory/ref_counted.h"
-
-struct libusb_config_descriptor;
-struct libusb_endpoint_descriptor;
-struct libusb_interface;
-struct libusb_interface_descriptor;
-
-typedef libusb_config_descriptor* PlatformUsbConfigDescriptor;
-typedef const libusb_endpoint_descriptor* PlatformUsbEndpointDescriptor;
-typedef const libusb_interface* PlatformUsbInterface;
-typedef const libusb_interface_descriptor* PlatformUsbInterfaceDescriptor;
-
-enum UsbTransferType {
-  USB_TRANSFER_CONTROL = 0,
-  USB_TRANSFER_ISOCHRONOUS,
-  USB_TRANSFER_BULK,
-  USB_TRANSFER_INTERRUPT,
-};
-
-enum UsbEndpointDirection {
-  USB_DIRECTION_INBOUND = 0,
-  USB_DIRECTION_OUTBOUND,
-};
-
-enum UsbSynchronizationType {
-  USB_SYNCHRONIZATION_NONE = 0,
-  USB_SYNCHRONIZATION_ASYNCHRONOUS,
-  USB_SYNCHRONIZATION_ADAPTIVE,
-  USB_SYNCHRONIZATION_SYNCHRONOUS,
-};
-
-enum UsbUsageType {
-  USB_USAGE_DATA = 0,
-  USB_USAGE_FEEDBACK,
-  USB_USAGE_EXPLICIT_FEEDBACK
-};
-
-class UsbDevice;
-class UsbConfigDescriptor;
-class UsbInterfaceDescriptor;
-class UsbInterfaceAltSettingDescriptor;
-
-class UsbEndpointDescriptor
-    : public base::RefCounted<const UsbEndpointDescriptor> {
- public:
-  int GetAddress() const;
-  UsbEndpointDirection GetDirection() const;
-  int GetMaximumPacketSize() const;
-  UsbSynchronizationType GetSynchronizationType() const;
-  UsbTransferType GetTransferType() const;
-  UsbUsageType GetUsageType() const;
-  int GetPollingInterval() const;
-
- private:
-  friend class base::RefCounted<const UsbEndpointDescriptor>;
-  friend class UsbInterfaceAltSettingDescriptor;
-
-  UsbEndpointDescriptor(
-      scoped_refptr<const UsbConfigDescriptor> config,
-      PlatformUsbEndpointDescriptor descriptor);
-  ~UsbEndpointDescriptor();
-
-  scoped_refptr<const UsbConfigDescriptor> config_;
-  PlatformUsbEndpointDescriptor descriptor_;
-
-  DISALLOW_COPY_AND_ASSIGN(UsbEndpointDescriptor);
-};
-
-class UsbInterfaceAltSettingDescriptor
-    : public base::RefCounted<const UsbInterfaceAltSettingDescriptor> {
- public:
-  size_t GetNumEndpoints() const;
-  scoped_refptr<const UsbEndpointDescriptor> GetEndpoint(size_t index) const;
-
-  int GetInterfaceNumber() const;
-  int GetAlternateSetting() const;
-  int GetInterfaceClass() const;
-  int GetInterfaceSubclass() const;
-  int GetInterfaceProtocol() const;
-
- private:
-  friend class base::RefCounted<const UsbInterfaceAltSettingDescriptor>;
-  friend class UsbInterfaceDescriptor;
-
-  UsbInterfaceAltSettingDescriptor(
-      scoped_refptr<const UsbConfigDescriptor> config,
-      PlatformUsbInterfaceDescriptor descriptor);
-  ~UsbInterfaceAltSettingDescriptor();
-
-  scoped_refptr<const UsbConfigDescriptor> config_;
-  PlatformUsbInterfaceDescriptor descriptor_;
-
-  DISALLOW_COPY_AND_ASSIGN(UsbInterfaceAltSettingDescriptor);
-};
-
-class UsbInterfaceDescriptor
-    : public base::RefCounted<const UsbInterfaceDescriptor> {
- public:
-  size_t GetNumAltSettings() const;
-  scoped_refptr<const UsbInterfaceAltSettingDescriptor> GetAltSetting(
-      size_t index) const;
-
- private:
-  friend class base::RefCounted<const UsbInterfaceDescriptor>;
-  friend class UsbConfigDescriptor;
-
-  UsbInterfaceDescriptor(scoped_refptr<const UsbConfigDescriptor> config,
-               PlatformUsbInterface usbInterface);
-  ~UsbInterfaceDescriptor();
-
-  scoped_refptr<const UsbConfigDescriptor> config_;
-  PlatformUsbInterface interface_;
-
-  DISALLOW_COPY_AND_ASSIGN(UsbInterfaceDescriptor);
-};
-
-class UsbConfigDescriptor : public base::RefCounted<UsbConfigDescriptor> {
- public:
-  size_t GetNumInterfaces() const;
-  scoped_refptr<const UsbInterfaceDescriptor> GetInterface(size_t index) const;
-
- private:
-  friend class base::RefCounted<UsbConfigDescriptor>;
-  friend class UsbDevice;
-
-  explicit UsbConfigDescriptor(PlatformUsbConfigDescriptor config);
-  ~UsbConfigDescriptor();
-
-  PlatformUsbConfigDescriptor config_;
-
-  DISALLOW_COPY_AND_ASSIGN(UsbConfigDescriptor);
-};
-
-#endif  // CHROME_BROWSER_USB_USB_INTERFACE_H_
diff --git a/chrome/browser/usb/usb_service.cc b/chrome/browser/usb/usb_service.cc
deleted file mode 100644
index 5916457..0000000
--- a/chrome/browser/usb/usb_service.cc
+++ /dev/null
@@ -1,122 +0,0 @@
-// Copyright (c) 2012 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 "chrome/browser/usb/usb_service.h"
-
-#include <set>
-#include <vector>
-
-#include "base/lazy_instance.h"
-#include "base/stl_util.h"
-#include "chrome/browser/usb/usb_context.h"
-#include "chrome/browser/usb/usb_device.h"
-#include "content/public/browser/browser_thread.h"
-#include "third_party/libusb/src/libusb/libusb.h"
-
-namespace {
-
-base::LazyInstance<scoped_ptr<UsbService> >::Leaky g_usb_service_instance =
-    LAZY_INSTANCE_INITIALIZER;
-
-}  // namespace
-
-// static
-UsbService* UsbService::GetInstance() {
-  DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::FILE));
-  UsbService* instance = g_usb_service_instance.Get().get();
-  if (!instance) {
-    PlatformUsbContext context = NULL;
-    if (libusb_init(&context) != LIBUSB_SUCCESS)
-      return NULL;
-    if (!context)
-      return NULL;
-
-    instance = new UsbService(context);
-    g_usb_service_instance.Get().reset(instance);
-  }
-  return instance;
-}
-
-scoped_refptr<UsbDevice> UsbService::GetDeviceById(uint32 unique_id) {
-  DCHECK(CalledOnValidThread());
-  RefreshDevices();
-  for (DeviceMap::iterator it = devices_.begin(); it != devices_.end(); ++it) {
-    if (it->second->unique_id() == unique_id)
-      return it->second;
-  }
-  return NULL;
-}
-
-void UsbService::GetDevices(std::vector<scoped_refptr<UsbDevice> >* devices) {
-  DCHECK(CalledOnValidThread());
-  STLClearObject(devices);
-  RefreshDevices();
-
-  for (DeviceMap::iterator it = devices_.begin(); it != devices_.end(); ++it) {
-    devices->push_back(it->second);
-  }
-}
-
-void UsbService::WillDestroyCurrentMessageLoop() {
-  DCHECK(CalledOnValidThread());
-  g_usb_service_instance.Get().reset(NULL);
-}
-
-UsbService::UsbService(PlatformUsbContext context)
-    : context_(new UsbContext(context)), next_unique_id_(0) {
-  base::MessageLoop::current()->AddDestructionObserver(this);
-}
-
-UsbService::~UsbService() {
-  base::MessageLoop::current()->RemoveDestructionObserver(this);
-  for (DeviceMap::iterator it = devices_.begin(); it != devices_.end(); ++it) {
-    it->second->OnDisconnect();
-  }
-}
-
-void UsbService::RefreshDevices() {
-  DCHECK(CalledOnValidThread());
-
-  libusb_device** platform_devices = NULL;
-  const ssize_t device_count =
-      libusb_get_device_list(context_->context(), &platform_devices);
-
-  std::set<UsbDevice*> connected_devices;
-  std::vector<PlatformUsbDevice> disconnected_devices;
-
-  // Populates new devices.
-  for (ssize_t i = 0; i < device_count; ++i) {
-    if (!ContainsKey(devices_, platform_devices[i])) {
-      libusb_device_descriptor descriptor;
-      // This test is needed. A valid vendor/produce pair is required.
-      if (0 != libusb_get_device_descriptor(platform_devices[i], &descriptor))
-        continue;
-      UsbDevice* new_device = new UsbDevice(context_,
-                                            platform_devices[i],
-                                            descriptor.idVendor,
-                                            descriptor.idProduct,
-                                            ++next_unique_id_);
-      devices_[platform_devices[i]] = new_device;
-      connected_devices.insert(new_device);
-    } else {
-      connected_devices.insert(devices_[platform_devices[i]].get());
-    }
-  }
-
-  // Find disconnected devices.
-  for (DeviceMap::iterator it = devices_.begin(); it != devices_.end(); ++it) {
-    if (!ContainsKey(connected_devices, it->second)) {
-      disconnected_devices.push_back(it->first);
-    }
-  }
-
-  // Remove disconnected devices from devices_.
-  for (size_t i = 0; i < disconnected_devices.size(); ++i) {
-    // UsbDevice will be destroyed after this. The corresponding
-    // PlatformUsbDevice will be unref'ed during this process.
-    devices_.erase(disconnected_devices[i]);
-  }
-
-  libusb_free_device_list(platform_devices, true);
-}
diff --git a/chrome/browser/usb/usb_service.h b/chrome/browser/usb/usb_service.h
deleted file mode 100644
index c83ed5b..0000000
--- a/chrome/browser/usb/usb_service.h
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright (c) 2012 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 CHROME_BROWSER_USB_USB_SERVICE_H_
-#define CHROME_BROWSER_USB_USB_SERVICE_H_
-
-#include <map>
-#include <utility>
-#include <vector>
-
-#include "base/basictypes.h"
-#include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/message_loop/message_loop.h"
-#include "base/threading/non_thread_safe.h"
-
-typedef struct libusb_device* PlatformUsbDevice;
-typedef struct libusb_context* PlatformUsbContext;
-
-class UsbContext;
-class UsbDevice;
-
-// The USB service handles creating and managing an event handler thread that is
-// used to manage and dispatch USB events. It is also responsible for device
-// discovery on the system, which allows it to re-use device handles to prevent
-// competition for the same USB device.
-class UsbService : public base::MessageLoop::DestructionObserver,
-                   public base::NonThreadSafe {
- public:
-  typedef scoped_ptr<std::vector<scoped_refptr<UsbDevice> > >
-      ScopedDeviceVector;
-
-  // Must be called on FILE thread.
-  // Returns NULL when failed to initialized.
-  static UsbService* GetInstance();
-
-  scoped_refptr<UsbDevice> GetDeviceById(uint32 unique_id);
-
-  // Get all of the devices attached to the system, inserting them into
-  // |devices|. Clears |devices| before use. The result will be sorted by id
-  // in increasing order. Must be called on FILE thread.
-  void GetDevices(std::vector<scoped_refptr<UsbDevice> >* devices);
-
-  // base::MessageLoop::DestructionObserver implementation.
-  virtual void WillDestroyCurrentMessageLoop() OVERRIDE;
-
- private:
-  friend struct base::DefaultDeleter<UsbService>;
-
-  explicit UsbService(PlatformUsbContext context);
-  virtual ~UsbService();
-
-  // Enumerate USB devices from OS and Update devices_ map.
-  void RefreshDevices();
-
-  scoped_refptr<UsbContext> context_;
-
-  // TODO(ikarienator): Figure out a better solution.
-  uint32 next_unique_id_;
-
-  // The map from PlatformUsbDevices to UsbDevices.
-  typedef std::map<PlatformUsbDevice, scoped_refptr<UsbDevice> > DeviceMap;
-  DeviceMap devices_;
-
-  DISALLOW_COPY_AND_ASSIGN(UsbService);
-};
-
-#endif  // CHROME_BROWSER_USB_USB_SERVICE_H_
diff --git a/chrome/browser/web_applications/update_shortcut_worker_win.cc b/chrome/browser/web_applications/update_shortcut_worker_win.cc
index 11e2c91..1e88f85 100644
--- a/chrome/browser/web_applications/update_shortcut_worker_win.cc
+++ b/chrome/browser/web_applications/update_shortcut_worker_win.cc
@@ -111,15 +111,19 @@
                             requested_size,
                             &closest_indices,
                             NULL);
-  size_t closest_index = closest_indices[0];
 
-  if (!bitmaps.empty() && !bitmaps[closest_index].isNull()) {
+  SkBitmap bitmap;
+  if (!bitmaps.empty()) {
+     size_t closest_index = closest_indices[0];
+     bitmap = bitmaps[closest_index];
+  }
+
+  if (!bitmap.isNull()) {
     // Update icon with download image and update shortcut.
-    shortcut_info_.favicon.Add(
-        gfx::Image::CreateFrom1xBitmap(bitmaps[closest_index]));
+    shortcut_info_.favicon.Add(gfx::Image::CreateFrom1xBitmap(bitmap));
     extensions::TabHelper* extensions_tab_helper =
         extensions::TabHelper::FromWebContents(web_contents_);
-    extensions_tab_helper->SetAppIcon(bitmaps[closest_index]);
+    extensions_tab_helper->SetAppIcon(bitmap);
     UpdateShortcuts();
   } else {
     // Try the next icon otherwise.
diff --git a/chrome/chrome.gyp b/chrome/chrome.gyp
index ed51181..123ada3 100644
--- a/chrome/chrome.gyp
+++ b/chrome/chrome.gyp
@@ -151,21 +151,23 @@
             '..',
           ],
           'sources': [
-            'browser/devtools/adb/android_rsa.cc',
-            'browser/devtools/adb/android_rsa.h',
-            'browser/devtools/adb/android_usb_device.cc',
-            'browser/devtools/adb/android_usb_device.h',
-            'browser/devtools/adb/android_usb_socket.cc',
-            'browser/devtools/adb/android_usb_socket.h',
-            'browser/devtools/adb_client_socket.cc',
-            'browser/devtools/adb_client_socket.h',
-            'browser/devtools/adb_web_socket.cc',
-            'browser/devtools/android_device.cc',
-            'browser/devtools/android_device.h',
+            'browser/devtools/device/adb/adb_client_socket.cc',
+            'browser/devtools/device/adb/adb_client_socket.h',
+            'browser/devtools/device/android_device_manager.cc',
+            'browser/devtools/device/android_device_manager.h',
+            'browser/devtools/device/android_web_socket.cc',
+            'browser/devtools/device/devtools_android_bridge.cc',
+            'browser/devtools/device/devtools_android_bridge.h',
+            'browser/devtools/device/port_forwarding_controller.cc',
+            'browser/devtools/device/port_forwarding_controller.h',
+            'browser/devtools/device/usb/android_rsa.cc',
+            'browser/devtools/device/usb/android_rsa.h',
+            'browser/devtools/device/usb/android_usb_device.cc',
+            'browser/devtools/device/usb/android_usb_device.h',
+            'browser/devtools/device/usb/android_usb_socket.cc',
+            'browser/devtools/device/usb/android_usb_socket.h',
             'browser/devtools/browser_list_tabcontents_provider.cc',
             'browser/devtools/browser_list_tabcontents_provider.h',
-            'browser/devtools/devtools_adb_bridge.cc',
-            'browser/devtools/devtools_adb_bridge.h',
             'browser/devtools/devtools_contents_resizing_strategy.cc',
             'browser/devtools/devtools_contents_resizing_strategy.h',
             'browser/devtools/devtools_embedder_message_dispatcher.cc',
@@ -184,8 +186,6 @@
             'browser/devtools/devtools_toggle_action.h',
             'browser/devtools/devtools_window.cc',
             'browser/devtools/devtools_window.h',
-            'browser/devtools/port_forwarding_controller.cc',
-            'browser/devtools/port_forwarding_controller.h',
             'browser/devtools/remote_debugging_server.cc',
             'browser/devtools/remote_debugging_server.h',
           ],
@@ -195,7 +195,7 @@
                 '../third_party/libusb/libusb.gyp:libusb',
               ],
               'sources!': [
-                'browser/devtools/adb/android_rsa.cc',
+                'browser/devtools/device/usb/android_rsa.cc',
                 'browser/devtools/browser_list_tabcontents_provider.cc',
                 'browser/devtools/devtools_file_system_indexer.cc',
                 'browser/devtools/devtools_target_impl.cc',
@@ -238,6 +238,7 @@
             'common/extensions/api/api.gyp:chrome_api',
             '../base/base.gyp:base',
             '../components/components.gyp:wifi_component',
+            '../components/components_strings.gyp:components_strings',
             '../content/content.gyp:content_common',
             '../content/content.gyp:content_utility',
             '../media/media.gyp:media',
@@ -1012,7 +1013,7 @@
             'common',
             'common_net',
             '../base/base.gyp:base',
-            '../components/components.gyp:cloud_devices',
+            '../components/components.gyp:cloud_devices_common',
             '../google_apis/google_apis.gyp:google_apis',
             '../jingle/jingle.gyp:notifier',
             '../net/net.gyp:net',
diff --git a/chrome/chrome_android.gypi b/chrome/chrome_android.gypi
index 48e8cdb..00a3af2 100644
--- a/chrome/chrome_android.gypi
+++ b/chrome/chrome_android.gypi
@@ -44,6 +44,13 @@
           'dependencies': [
             '../base/allocator/allocator.gyp:allocator', ],
         }],
+        ['OS=="android"', {
+          'ldflags': [
+            # Some android targets still depend on --gc-sections to link.
+            # TODO: remove --gc-sections for Debug builds (crbug.com/159847).
+            '-Wl,--gc-sections',
+          ],
+        }],
       ],
     },
     {
diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi
index 38ee9e3..00213bf 100644
--- a/chrome/chrome_browser.gypi
+++ b/chrome/chrome_browser.gypi
@@ -29,16 +29,19 @@
         'suggestions_proto',
         '../components/components.gyp:autofill_core_browser',
         '../components/components.gyp:bookmarks_core_browser',
-        '../components/components.gyp:cloud_devices',
+        '../components/components.gyp:cloud_devices_common',
         '../components/components.gyp:data_reduction_proxy_browser',
         '../components/components.gyp:domain_reliability',
+        '../components/components.gyp:favicon_base',
         '../components/components.gyp:favicon_core',
+        '../components/components.gyp:infobars_core',
         '../components/components.gyp:navigation_metrics',
         '../components/components.gyp:os_crypt',
         '../components/components.gyp:password_manager_core_browser',
         '../components/components.gyp:password_manager_core_common',
         '../components/components.gyp:policy_component',
         '../components/components.gyp:precache_core',
+        '../components/components.gyp:query_parser',
         '../components/components.gyp:rappor',
         '../components/components.gyp:signin_core_browser',
         '../components/components.gyp:startup_metric_utils',
@@ -59,7 +62,6 @@
         '../google_apis/gcm/gcm.gyp:gcm',
         '../google_apis/google_apis.gyp:google_apis',
         '../jingle/jingle.gyp:notifier',
-        '../media/cast/logging/logging.gyp:cast_common_logging',
         '../skia/skia.gyp:skia',
         '../sql/sql.gyp:sql',
         '../sync/sync.gyp:sync',
@@ -299,16 +301,10 @@
         'browser/bookmarks/bookmark_node_data_views.cc',
         'browser/bookmarks/bookmark_pasteboard_helper_mac.h',
         'browser/bookmarks/bookmark_pasteboard_helper_mac.mm',
-        'browser/bookmarks/bookmark_prompt_prefs.cc',
-        'browser/bookmarks/bookmark_prompt_prefs.h',
-        'browser/bookmarks/bookmark_service.cc',
-        'browser/bookmarks/bookmark_service.h',
         'browser/bookmarks/bookmark_stats.cc',
         'browser/bookmarks/bookmark_stats.h',
         'browser/bookmarks/bookmark_storage.cc',
         'browser/bookmarks/bookmark_storage.h',
-        'browser/bookmarks/bookmark_title_match.cc',
-        'browser/bookmarks/bookmark_title_match.h',
         'browser/bookmarks/bookmark_utils.cc',
         'browser/bookmarks/bookmark_utils.h',
         'browser/bookmarks/enhanced_bookmarks_features.cc',
@@ -744,6 +740,8 @@
         'browser/guestview/guestview.h',
         'browser/guestview/webview/context_menu_content_type_webview.cc',
         'browser/guestview/webview/context_menu_content_type_webview.h',
+        'browser/guestview/webview/javascript_dialog_helper.cc',
+        'browser/guestview/webview/javascript_dialog_helper.h',
         'browser/guestview/webview/plugin_permission_helper.cc',
         'browser/guestview/webview/plugin_permission_helper.h',
         'browser/guestview/webview/webview_constants.cc',
@@ -825,14 +823,10 @@
         'browser/history/most_visited_tiles_experiment.h',
         'browser/history/page_usage_data.cc',
         'browser/history/page_usage_data.h',
-        'browser/history/query_parser.cc',
-        'browser/history/query_parser.h',
         'browser/history/scored_history_match.cc',
         'browser/history/scored_history_match.h',
         'browser/history/select_favicon_frames.cc',
         'browser/history/select_favicon_frames.h',
-        'browser/history/snippet.cc',
-        'browser/history/snippet.h',
         'browser/history/shortcuts_database.cc',
         'browser/history/shortcuts_database.h',
         'browser/history/thumbnail_database.cc',
@@ -908,14 +902,6 @@
         'browser/importer/profile_writer.h',
         'browser/infobars/confirm_infobar_delegate.cc',
         'browser/infobars/confirm_infobar_delegate.h',
-        'browser/infobars/infobar.cc',
-        'browser/infobars/infobar.h',
-        'browser/infobars/infobar_container.cc',
-        'browser/infobars/infobar_container.h',
-        'browser/infobars/infobar_delegate.cc',
-        'browser/infobars/infobar_delegate.h',
-        'browser/infobars/infobar_manager.cc',
-        'browser/infobars/infobar_manager.h',
         'browser/infobars/infobar_service.cc',
         'browser/infobars/infobar_service.h',
         'browser/infobars/insecure_content_infobar_delegate.cc',
@@ -941,12 +927,8 @@
         'browser/internal_auth.h',
         'browser/intranet_redirect_detector.cc',
         'browser/intranet_redirect_detector.h',
-        'browser/invalidation/device_invalidation_auth_provider_chromeos.cc',
-        'browser/invalidation/device_invalidation_auth_provider_chromeos.h',
         'browser/invalidation/gcm_invalidation_bridge.cc',
         'browser/invalidation/gcm_invalidation_bridge.h',
-        'browser/invalidation/invalidation_auth_provider.cc',
-        'browser/invalidation/invalidation_auth_provider.h',
         'browser/invalidation/invalidation_controller_android.cc',
         'browser/invalidation/invalidation_controller_android.h',
         'browser/invalidation/invalidation_logger.cc',
@@ -960,8 +942,6 @@
         'browser/invalidation/invalidation_service_util.h',
         'browser/invalidation/invalidator_storage.cc',
         'browser/invalidation/invalidator_storage.h',
-        'browser/invalidation/profile_invalidation_auth_provider.cc',
-        'browser/invalidation/profile_invalidation_auth_provider.h',
         'browser/invalidation/ticl_invalidation_service.cc',
         'browser/invalidation/ticl_invalidation_service.h',
         'browser/io_thread.cc',
@@ -983,12 +963,14 @@
         'browser/lifetime/application_lifetime_win.cc',
         'browser/lifetime/browser_close_manager.cc',
         'browser/lifetime/browser_close_manager.h',
-        'browser/local_discovery/cloud_print_base_api_flow.cc',
-        'browser/local_discovery/cloud_print_base_api_flow.h',
         'browser/local_discovery/cloud_print_printer_list.cc',
         'browser/local_discovery/cloud_print_printer_list.h',
         'browser/local_discovery/device_description.cc',
         'browser/local_discovery/device_description.h',
+        'browser/local_discovery/gcd_base_api_flow.cc',
+        'browser/local_discovery/gcd_base_api_flow.h',
+        'browser/local_discovery/gcd_constants.cc',
+        'browser/local_discovery/gcd_constants.h',
         'browser/local_discovery/privet_confirm_api_flow.cc',
         'browser/local_discovery/privet_confirm_api_flow.h',
         'browser/local_discovery/privet_constants.cc',
@@ -1370,7 +1352,6 @@
         'browser/notifications/desktop_notification_service.h',
         'browser/notifications/desktop_notification_service_factory.cc',
         'browser/notifications/desktop_notification_service_factory.h',
-        'browser/notifications/desktop_notification_service_win.cc',
         'browser/notifications/extension_welcome_notification.cc',
         'browser/notifications/extension_welcome_notification.h',
         'browser/notifications/message_center_notification_manager.cc',
@@ -1671,8 +1652,6 @@
         'browser/printing/cloud_print/cloud_print_proxy_service.h',
         'browser/printing/cloud_print/cloud_print_proxy_service_factory.cc',
         'browser/printing/cloud_print/cloud_print_proxy_service_factory.h',
-        'browser/printing/cloud_print/cloud_print_url.cc',
-        'browser/printing/cloud_print/cloud_print_url.h',
         'browser/printing/print_dialog_cloud.cc',
         'browser/printing/print_dialog_cloud.h',
         'browser/printing/print_error_dialog.cc',
@@ -2075,6 +2054,8 @@
         'browser/signin/local_auth.h',
         'browser/signin/principals_message_filter.cc',
         'browser/signin/principals_message_filter.h',
+        'browser/signin/profile_identity_provider.cc',
+        'browser/signin/profile_identity_provider.h',
         'browser/signin/profile_oauth2_token_service_factory.cc',
         'browser/signin/profile_oauth2_token_service_factory.h',
         'browser/signin/profile_oauth2_token_service_request.cc',
@@ -2199,8 +2180,6 @@
         'browser/sync/glue/bookmark_model_associator.h',
         'browser/sync/glue/browser_thread_model_worker.cc',
         'browser/sync/glue/browser_thread_model_worker.h',
-        'browser/sync/glue/change_processor.cc',
-        'browser/sync/glue/change_processor.h',
         'browser/sync/glue/chrome_report_unrecoverable_error.cc',
         'browser/sync/glue/chrome_report_unrecoverable_error.h',
         'browser/sync/glue/data_type_manager_impl.cc',
@@ -2217,8 +2196,6 @@
         'browser/sync/glue/favicon_cache.h',
         'browser/sync/glue/frontend_data_type_controller.cc',
         'browser/sync/glue/frontend_data_type_controller.h',
-        'browser/sync/glue/generic_change_processor.cc',
-        'browser/sync/glue/generic_change_processor.h',
         'browser/sync/glue/history_model_worker.cc',
         'browser/sync/glue/history_model_worker.h',
         'browser/sync/glue/non_frontend_data_type_controller.cc',
@@ -2231,12 +2208,6 @@
         'browser/sync/glue/password_model_worker.h',
         'browser/sync/glue/search_engine_data_type_controller.cc',
         'browser/sync/glue/search_engine_data_type_controller.h',
-        'browser/sync/glue/session_change_processor.cc',
-        'browser/sync/glue/session_change_processor.h',
-        'browser/sync/glue/session_data_type_controller.cc',
-        'browser/sync/glue/session_data_type_controller.h',
-        'browser/sync/glue/session_model_associator.cc',
-        'browser/sync/glue/session_model_associator.h',
         'browser/sync/glue/shared_change_processor.cc',
         'browser/sync/glue/shared_change_processor.h',
         'browser/sync/glue/shared_change_processor_ref.cc',
@@ -2263,8 +2234,6 @@
         'browser/sync/glue/synced_window_delegate.h',
         'browser/sync/glue/synced_window_delegate_android.cc',
         'browser/sync/glue/synced_window_delegate_android.h',
-        'browser/sync/glue/tab_node_pool.cc',
-        'browser/sync/glue/tab_node_pool.h',
         'browser/sync/glue/theme_data_type_controller.cc',
         'browser/sync/glue/theme_data_type_controller.h',
         'browser/sync/glue/typed_url_change_processor.cc',
@@ -2295,18 +2264,18 @@
         'browser/sync/profile_sync_service_observer.h',
         'browser/sync/protocol_event_observer.cc',
         'browser/sync/protocol_event_observer.h',
-        'browser/sync/sessions2/notification_service_sessions_router.cc',
-        'browser/sync/sessions2/notification_service_sessions_router.h',
-        'browser/sync/sessions2/session_data_type_controller2.cc',
-        'browser/sync/sessions2/session_data_type_controller2.h',
-        'browser/sync/sessions2/sessions_sync_manager.cc',
-        'browser/sync/sessions2/sessions_sync_manager.h',
-        'browser/sync/sessions2/sessions_util.cc',
-        'browser/sync/sessions2/sessions_util.h',
-        'browser/sync/sessions2/synced_window_delegates_getter.cc',
-        'browser/sync/sessions2/synced_window_delegates_getter.h',
-        'browser/sync/sessions2/tab_node_pool2.cc',
-        'browser/sync/sessions2/tab_node_pool2.h',
+        'browser/sync/sessions/notification_service_sessions_router.cc',
+        'browser/sync/sessions/notification_service_sessions_router.h',
+        'browser/sync/sessions/session_data_type_controller.cc',
+        'browser/sync/sessions/session_data_type_controller.h',
+        'browser/sync/sessions/sessions_sync_manager.cc',
+        'browser/sync/sessions/sessions_sync_manager.h',
+        'browser/sync/sessions/sessions_util.cc',
+        'browser/sync/sessions/sessions_util.h',
+        'browser/sync/sessions/synced_window_delegates_getter.cc',
+        'browser/sync/sessions/synced_window_delegates_getter.h',
+        'browser/sync/sessions/tab_node_pool.cc',
+        'browser/sync/sessions/tab_node_pool.h',
         'browser/sync/startup_controller.cc',
         'browser/sync/startup_controller.h',
         'browser/sync/sync_error_controller.cc',
@@ -2328,6 +2297,7 @@
         'browser/sync_file_system/conflict_resolution_policy.h',
         'browser/sync_file_system/conflict_resolution_resolver.cc',
         'browser/sync_file_system/conflict_resolution_resolver.h',
+        'browser/sync_file_system/drive_backend/callback_helper.h',
         'browser/sync_file_system/drive_backend/conflict_resolver.cc',
         'browser/sync_file_system/drive_backend/conflict_resolver.h',
         'browser/sync_file_system/drive_backend/drive_backend_constants.cc',
@@ -2534,6 +2504,7 @@
         'browser/undo/bookmark_undo_utils.h',
         'browser/undo/undo_manager.cc',
         'browser/undo/undo_manager.h',
+        'browser/undo/undo_manager_observer.h',
         'browser/undo/undo_operation.h',
         'browser/upgrade_detector.cc',
         'browser/upgrade_detector.h',
@@ -2541,16 +2512,6 @@
         'browser/upgrade_detector_impl.h',
         'browser/upload_list.cc',
         'browser/upload_list.h',
-        'browser/usb/usb_device.cc',
-        'browser/usb/usb_device.h',
-        'browser/usb/usb_device_handle.cc',
-        'browser/usb/usb_device_handle.h',
-        'browser/usb/usb_interface.cc',
-        'browser/usb/usb_interface.h',
-        'browser/usb/usb_context.cc',
-        'browser/usb/usb_context.h',
-        'browser/usb/usb_service.cc',
-        'browser/usb/usb_service.h',
         'browser/web_applications/update_shortcut_worker_win.cc',
         'browser/web_applications/update_shortcut_worker_win.h',
         'browser/web_applications/web_app.cc',
@@ -2619,10 +2580,11 @@
             '../components/components.gyp:storage_monitor',
             '../components/components.gyp:translate_content_browser',
             '../components/components.gyp:url_matcher',
+            '../components/components.gyp:usb_service',
             '../components/components.gyp:visitedlink_browser',
             '../components/components.gyp:visitedlink_common',
             '../components/components.gyp:web_modal',
-            '../media/cast/transport/cast_transport.gyp:cast_transport',
+            '../media/cast/cast.gyp:cast_transport',
             '../media/media.gyp:media',
             '../net/net.gyp:net_with_v8',
             # TODO(tonyg): Remove this dependency (crbug.com/280157).
@@ -2632,7 +2594,6 @@
             '../third_party/hunspell/hunspell.gyp:hunspell',
             '../third_party/leveldatabase/leveldatabase.gyp:leveldatabase',
             '../third_party/libaddressinput/libaddressinput.gyp:libaddressinput',
-            '../third_party/libusb/libusb.gyp:libusb',
             '../third_party/libyuv/libyuv.gyp:libyuv',
             '../third_party/npapi/npapi.gyp:npapi',
             '../third_party/smhasher/smhasher.gyp:cityhash',
@@ -3098,45 +3059,6 @@
             'browser/net/nss_context.h',
           ],
         }],
-        ['toolkit_uses_gtk == 1', {
-          'dependencies': [
-            '../build/linux/system.gyp:dbus',
-            '../build/linux/system.gyp:gconf',
-            '../build/linux/system.gyp:gtk',
-            '../build/linux/system.gyp:gtkprint',
-            '../build/linux/system.gyp:ssl',
-            '../build/linux/system.gyp:x11',
-            '../dbus/dbus.gyp:dbus',
-            '../third_party/undoview/undoview.gyp:undoview',
-          ],
-          'conditions': [
-            ['OS=="linux"', {
-              'link_settings': {
-                'libraries': [
-                  # For dlsym() in 'browser/zygote_main_linux.cc'
-                  '-ldl',
-                ],
-              },
-            }],
-          ],
-        }, {
-          'sources!': [
-            'browser/notifications/balloon_collection.cc',
-            'browser/notifications/balloon_collection.h',
-            'browser/notifications/balloon_collection_base.cc',
-            'browser/notifications/balloon_collection_base.h',
-            'browser/notifications/balloon_collection_impl.cc',
-            'browser/notifications/balloon_collection_impl.h',
-            'browser/notifications/balloon_host.cc',
-            'browser/notifications/balloon_host.h',
-            'browser/notifications/balloon_notification_ui_manager.cc',
-            'browser/notifications/balloon_notification_ui_manager.h',
-            'browser/notifications/notification_options_menu_model.cc',
-            'browser/notifications/notification_options_menu_model.h',
-            'browser/task_manager/notification_resource_provider.cc',
-            'browser/task_manager/notification_resource_provider.h',
-          ]
-        }],
         ['input_speech==0', {
           'sources/': [
             ['exclude', '^browser/speech/chrome_speech_recognition_manager_delegate_bubble_ui'],
@@ -3217,9 +3139,9 @@
           ],
           'dependencies!': [
             '../components/components.gyp:storage_monitor',
+            '../components/components.gyp:usb_service',
             '../components/components.gyp:web_modal',
             '../third_party/libaddressinput/libaddressinput.gyp:libaddressinput',
-            '../third_party/libusb/libusb.gyp:libusb',
           ],
           'sources': [
             'browser/sessions/in_memory_tab_restore_service.cc',
@@ -3341,7 +3263,6 @@
             ['exclude', '^browser/sync/glue/app_'],
             ['exclude', '^browser/sync/glue/extension_'],
             ['exclude', '^browser/sync/glue/theme_'],
-            ['exclude', '^browser/usb/'],
             ['exclude', '^third_party/mozilla_security_manager/'],
           ],
         }],
@@ -3408,7 +3329,6 @@
             '../third_party/isimpledom/isimpledom.gyp:isimpledom',
             '../ui/views/controls/webview/webview.gyp:webview',
             '../ui/views/views.gyp:views',
-            '../win8/win8.gyp:win8_util',
           ],
           'export_dependent_settings': [
             '../ui/views/controls/webview/webview.gyp:webview',
diff --git a/chrome/chrome_browser_chromeos.gypi b/chrome/chrome_browser_chromeos.gypi
index a57b01d..1285027 100644
--- a/chrome/chrome_browser_chromeos.gypi
+++ b/chrome/chrome_browser_chromeos.gypi
@@ -62,6 +62,7 @@
         '../crypto/crypto.gyp:crypto',
         '../dbus/dbus.gyp:dbus',
         '../device/bluetooth/bluetooth.gyp:device_bluetooth',
+        '../device/hid/hid.gyp:device_hid',
         '../media/media.gyp:media',
         '../net/net.gyp:net',
         '../ppapi/ppapi_internal.gyp:ppapi_ipc',  # For PpapiMsg_LoadPlugin
@@ -176,12 +177,12 @@
         'browser/chromeos/charger_replace/charger_link_dialog.h',
         'browser/chromeos/charger_replace/charger_replacement_dialog.cc',
         'browser/chromeos/charger_replace/charger_replacement_dialog.h',
-        'browser/chromeos/choose_mobile_network_dialog.cc',
-        'browser/chromeos/choose_mobile_network_dialog.h',
         'browser/chromeos/chrome_browser_main_chromeos.cc',
         'browser/chromeos/chrome_browser_main_chromeos.h',
         'browser/chromeos/customization_document.cc',
         'browser/chromeos/customization_document.h',
+        'browser/chromeos/customization_wallpaper_downloader.cc',
+        'browser/chromeos/customization_wallpaper_downloader.h',
         'browser/chromeos/display/display_configuration_observer.cc',
         'browser/chromeos/display/display_configuration_observer.h',
         'browser/chromeos/display/display_preferences.cc',
@@ -200,6 +201,8 @@
         'browser/chromeos/dbus/proxy_resolution_service_provider.h',
         'browser/chromeos/dbus/screen_lock_service_provider.cc',
         'browser/chromeos/dbus/screen_lock_service_provider.h',
+        'browser/chromeos/device/input_service_proxy.cc',
+        'browser/chromeos/device/input_service_proxy.h',
         'browser/chromeos/device_hierarchy_observer.h',
         'browser/chromeos/device_uma.cc',
         'browser/chromeos/device_uma.h',
@@ -369,9 +372,18 @@
         'browser/chromeos/file_manager/volume_manager_observer.h',
         'browser/chromeos/file_manager/zip_file_creator.cc',
         'browser/chromeos/file_manager/zip_file_creator.h',
+        'browser/chromeos/file_system_provider/fileapi/backend_delegate.cc',
+        'browser/chromeos/file_system_provider/fileapi/backend_delegate.h',
+        'browser/chromeos/file_system_provider/fileapi/provider_async_file_util.cc',
+        'browser/chromeos/file_system_provider/fileapi/provider_async_file_util.h',
+        'browser/chromeos/file_system_provider/mount_path_util.cc',
+        'browser/chromeos/file_system_provider/mount_path_util.h',
         'browser/chromeos/file_system_provider/observer.h',
         'browser/chromeos/file_system_provider/provided_file_system.cc',
         'browser/chromeos/file_system_provider/provided_file_system.h',
+        'browser/chromeos/file_system_provider/provided_file_system_info.cc',
+        'browser/chromeos/file_system_provider/provided_file_system_info.h',
+        'browser/chromeos/file_system_provider/provided_file_system_interface.h',
         'browser/chromeos/file_system_provider/request_manager.cc',
         'browser/chromeos/file_system_provider/request_manager.h',
         'browser/chromeos/file_system_provider/service.cc',
@@ -402,6 +414,12 @@
         'browser/chromeos/first_run/steps/tray_step.cc',
         'browser/chromeos/first_run/steps/tray_step.h',
         'browser/chromeos/genius_app/app_id.h',
+        'browser/chromeos/geolocation/geoposition.cc',
+        'browser/chromeos/geolocation/geoposition.h',
+        'browser/chromeos/geolocation/simple_geolocation_provider.cc',
+        'browser/chromeos/geolocation/simple_geolocation_provider.h',
+        'browser/chromeos/geolocation/simple_geolocation_request.cc',
+        'browser/chromeos/geolocation/simple_geolocation_request.h',
         'browser/chromeos/idle_detector.cc',
         'browser/chromeos/idle_detector.h',
         'browser/chromeos/imageburner/burn_controller.cc',
@@ -507,8 +525,6 @@
         'browser/chromeos/login/login_display_host.h',
         'browser/chromeos/login/login_display_host_impl.cc',
         'browser/chromeos/login/login_display_host_impl.h',
-        'browser/chromeos/login/login_location_monitor.cc',
-        'browser/chromeos/login/login_location_monitor.h',
         'browser/chromeos/login/login_performer.cc',
         'browser/chromeos/login/login_performer.h',
         'browser/chromeos/login/login_status_consumer.cc',
@@ -544,8 +560,6 @@
         'browser/chromeos/login/merge_session_xhr_request_waiter.h',
         'browser/chromeos/login/mount_manager.cc',
         'browser/chromeos/login/mount_manager.h',
-        'browser/chromeos/login/multi_profile_first_run_notification.cc',
-        'browser/chromeos/login/multi_profile_first_run_notification.h',
         'browser/chromeos/login/multi_profile_user_controller.cc',
         'browser/chromeos/login/multi_profile_user_controller.h',
         'browser/chromeos/login/multi_profile_user_controller_delegate.h',
@@ -836,6 +850,8 @@
         'browser/chromeos/session_length_limiter.h',
         'browser/chromeos/settings/cros_settings.cc',
         'browser/chromeos/settings/cros_settings.h',
+        'browser/chromeos/settings/device_identity_provider.cc',
+        'browser/chromeos/settings/device_identity_provider.h',
         'browser/chromeos/settings/device_oauth2_token_service.cc',
         'browser/chromeos/settings/device_oauth2_token_service.h',
         'browser/chromeos/settings/device_oauth2_token_service_factory.cc',
@@ -893,6 +909,8 @@
         'browser/chromeos/timezone/timezone_provider.cc',
         'browser/chromeos/timezone/timezone_request.cc',
         'browser/chromeos/timezone/timezone_request.h',
+        'browser/chromeos/ui/choose_mobile_network_dialog.cc',
+        'browser/chromeos/ui/choose_mobile_network_dialog.h',
         'browser/chromeos/ui/echo_dialog_listener.h',
         'browser/chromeos/ui/echo_dialog_view.cc',
         'browser/chromeos/ui/echo_dialog_view.h',
@@ -904,6 +922,8 @@
         'browser/chromeos/ui/idle_app_name_notification_view.h',
         'browser/chromeos/ui/idle_logout_dialog_view.cc',
         'browser/chromeos/ui/idle_logout_dialog_view.h',
+        'browser/chromeos/ui/mobile_config_ui.cc',
+        'browser/chromeos/ui/mobile_config_ui.h',
         'browser/chromeos/ui/screen_capture_notification_ui_chromeos.cc',
         'browser/chromeos/ui/screen_capture_notification_ui_chromeos.h',
         'browser/chromeos/chromeos_utils.cc',
@@ -927,6 +947,9 @@
       ],
       'conditions': [
         ['enable_extensions==1', {
+          'dependencies': [
+            '../ui/file_manager/file_manager.gyp:file_manager',
+          ],
           'sources': [
             # Only extension API implementations should go here.
             'browser/chromeos/extensions/echo_private_api.cc',
diff --git a/chrome/chrome_browser_extensions.gypi b/chrome/chrome_browser_extensions.gypi
index d86fb7e..f23578c 100644
--- a/chrome/chrome_browser_extensions.gypi
+++ b/chrome/chrome_browser_extensions.gypi
@@ -42,6 +42,7 @@
         '../device/serial/serial.gyp:device_serial',
         '../extensions/common/api/api.gyp:extensions_api',
         '../extensions/extensions.gyp:extensions_browser',
+        '../extensions/extensions_strings.gyp:extensions_strings',
         '../net/net.gyp:net',
         '../skia/skia.gyp:skia',
         '../sync/sync.gyp:sync',
@@ -109,8 +110,8 @@
         'browser/extensions/activity_log/activity_log.h',
         'browser/extensions/activity_log/activity_log_policy.cc',
         'browser/extensions/activity_log/activity_log_policy.h',
-        'browser/extensions/activity_log/ad_injection_util.cc',
-        'browser/extensions/activity_log/ad_injection_util.h',
+        'browser/extensions/activity_log/ad_network_database.cc',
+        'browser/extensions/activity_log/ad_network_database.h',
         'browser/extensions/activity_log/counting_policy.cc',
         'browser/extensions/activity_log/counting_policy.h',
         'browser/extensions/activity_log/database_string_table.cc',
@@ -140,6 +141,8 @@
         'browser/extensions/api/audio/audio_service_chromeos.cc',
         'browser/extensions/api/automation_internal/automation_internal_api.cc',
         'browser/extensions/api/automation_internal/automation_internal_api.h',
+        'browser/extensions/api/automation_internal/automation_util.cc',
+        'browser/extensions/api/automation_internal/automation_util.h',
         'browser/extensions/api/autotest_private/autotest_private_api.cc',
         'browser/extensions/api/autotest_private/autotest_private_api.h',
         'browser/extensions/api/bluetooth/bluetooth_api.cc',
@@ -158,6 +161,8 @@
         'browser/extensions/api/bluetooth/bluetooth_private_api.h',
         'browser/extensions/api/bluetooth/bluetooth_socket_event_dispatcher.h',
         'browser/extensions/api/bluetooth/bluetooth_socket_event_dispatcher.cc',
+        'browser/extensions/api/bluetooth_low_energy/bluetooth_low_energy_api.cc',
+        'browser/extensions/api/bluetooth_low_energy/bluetooth_low_energy_api.h',
         'browser/extensions/api/bookmark_manager_private/bookmark_manager_private_api.cc',
         'browser/extensions/api/bookmark_manager_private/bookmark_manager_private_api.h',
         'browser/extensions/api/bookmarks/bookmark_api_constants.cc',
@@ -692,6 +697,8 @@
         'browser/extensions/extension_error_ui_default.h',
         'browser/extensions/extension_garbage_collector.cc',
         'browser/extensions/extension_garbage_collector.h',
+        'browser/extensions/extension_garbage_collector_factory.cc',
+        'browser/extensions/extension_garbage_collector_factory.h',
         'browser/extensions/extension_gcm_app_handler.cc',
         'browser/extensions/extension_gcm_app_handler.h',
         'browser/extensions/extension_icon_image.cc',
diff --git a/chrome/chrome_browser_ui.gypi b/chrome/chrome_browser_ui.gypi
index 3083390..81dde9f 100644
--- a/chrome/chrome_browser_ui.gypi
+++ b/chrome/chrome_browser_ui.gypi
@@ -87,6 +87,8 @@
         'browser/ui/android/content_settings/popup_blocked_infobar_delegate.h',
         'browser/ui/android/infobars/auto_login_infobar_delegate_android.cc',
         'browser/ui/android/infobars/auto_login_infobar_delegate_android.h',
+        'browser/ui/android/infobars/auto_login_prompter.cc',
+        'browser/ui/android/infobars/auto_login_prompter.h',
         'browser/ui/android/infobars/confirm_infobar.cc',
         'browser/ui/android/infobars/confirm_infobar.h',
         'browser/ui/android/infobars/infobar_android.cc',
@@ -145,7 +147,6 @@
         'browser/ui/app_list/app_list_positioner.h',
         'browser/ui/app_list/app_list_service.cc',
         'browser/ui/app_list/app_list_service.h',
-        'browser/ui/app_list/app_list_service_ash.h',
         'browser/ui/app_list/app_list_service_disabled.cc',
         'browser/ui/app_list/app_list_service_impl.cc',
         'browser/ui/app_list/app_list_service_impl.h',
@@ -171,15 +172,14 @@
         'browser/ui/app_list/extension_uninstaller.h',
         'browser/ui/app_list/fast_show_pickler.cc',
         'browser/ui/app_list/fast_show_pickler.h',
-        'browser/ui/app_list/keep_alive_service.h',
-        'browser/ui/app_list/keep_alive_service_impl.cc',
-        'browser/ui/app_list/keep_alive_service_impl.h',
         'browser/ui/app_list/profile_loader.cc',
         'browser/ui/app_list/profile_loader.h',
         'browser/ui/app_list/profile_store.h',
         'browser/ui/app_list/recommended_apps.cc',
         'browser/ui/app_list/recommended_apps.h',
         'browser/ui/app_list/recommended_apps_observer.h',
+        'browser/ui/app_list/scoped_keep_alive.cc',
+        'browser/ui/app_list/scoped_keep_alive.h',
         'browser/ui/app_list/search/app_result.cc',
         'browser/ui/app_list/search/app_result.h',
         'browser/ui/app_list/search/app_search_provider.cc',
@@ -259,9 +259,10 @@
         'browser/ui/apps/directory_access_confirmation_dialog.h',
         'browser/ui/ash/ash_keyboard_controller_proxy.cc',
         'browser/ui/ash/ash_keyboard_controller_proxy.h',
-        'browser/ui/ash/app_list/app_list_controller_ash.h',
         'browser/ui/ash/app_list/app_list_controller_ash.cc',
+        'browser/ui/ash/app_list/app_list_controller_ash.h',
         'browser/ui/ash/app_list/app_list_service_ash.cc',
+        'browser/ui/ash/app_list/app_list_service_ash.h',
         'browser/ui/ash/app_list/app_sync_ui_state_watcher.cc',
         'browser/ui/ash/app_list/app_sync_ui_state_watcher.h',
         'browser/ui/ash/app_sync_ui_state.cc',
@@ -412,8 +413,6 @@
         'browser/ui/autofill/tab_autofill_manager_delegate.h',
         'browser/ui/auto_login_infobar_delegate.cc',
         'browser/ui/auto_login_infobar_delegate.h',
-        'browser/ui/auto_login_prompter.cc',
-        'browser/ui/auto_login_prompter.h',
         'browser/ui/blocked_content/blocked_window_params.cc',
         'browser/ui/blocked_content/blocked_window_params.h',
         'browser/ui/blocked_content/popup_blocker_tab_helper.cc',
@@ -1082,6 +1081,10 @@
         'browser/ui/cocoa/website_settings/permission_bubble_cocoa.mm',
         'browser/ui/cocoa/website_settings/permission_bubble_controller.h',
         'browser/ui/cocoa/website_settings/permission_bubble_controller.mm',
+        'browser/ui/cocoa/website_settings/permission_selector_button.h',
+        'browser/ui/cocoa/website_settings/permission_selector_button.mm',
+        'browser/ui/cocoa/website_settings/split_block_button.h',
+        'browser/ui/cocoa/website_settings/split_block_button.mm',
         'browser/ui/cocoa/website_settings_bubble_controller.h',
         'browser/ui/cocoa/website_settings_bubble_controller.mm',
         'browser/ui/cocoa/window_restore_utils.h',
@@ -1234,6 +1237,8 @@
         'browser/ui/panels/stacked_panel_collection.h',
         'browser/ui/panels/stacked_panel_drag_handler.cc',
         'browser/ui/panels/stacked_panel_drag_handler.h',
+        'browser/ui/passwords/manage_passwords_bubble.cc',
+        'browser/ui/passwords/manage_passwords_bubble.h',
         'browser/ui/passwords/manage_passwords_bubble_model.cc',
         'browser/ui/passwords/manage_passwords_bubble_model.h',
         'browser/ui/passwords/manage_passwords_bubble_ui_controller.cc',
@@ -1298,6 +1303,7 @@
         'browser/ui/search_engines/template_url_table_model.h',
         'browser/ui/settings_window_manager.cc',
         'browser/ui/settings_window_manager.h',
+        'browser/ui/settings_window_manager_observer.h',
         'browser/ui/profile_reset_bubble.h',
         'browser/ui/profile_reset_bubble_stub.cc',
         'browser/ui/simple_message_box.h',
@@ -1321,8 +1327,6 @@
         'browser/ui/startup/startup_browser_creator.h',
         'browser/ui/startup/startup_browser_creator_impl.cc',
         'browser/ui/startup/startup_browser_creator_impl.h',
-        'browser/ui/startup/startup_browser_creator_win.cc',
-        'browser/ui/startup/startup_browser_creator_win.h',
         'browser/ui/startup/startup_tab.cc',
         'browser/ui/startup/startup_tab.h',
         'browser/ui/startup/startup_types.h',
@@ -1429,6 +1433,8 @@
         'browser/ui/views/accessibility/accessibility_event_router_views.h',
         'browser/ui/views/accessibility/invert_bubble_view.cc',
         'browser/ui/views/accessibility/invert_bubble_view.h',
+        'browser/ui/views/accessibility/automation_manager_views.cc',
+        'browser/ui/views/accessibility/automation_manager_views.h',
         'browser/ui/views/app_list/linux/app_list_controller_delegate_linux.cc',
         'browser/ui/views/app_list/linux/app_list_controller_delegate_linux.h',
         'browser/ui/views/app_list/linux/app_list_linux.cc',
@@ -1496,7 +1502,6 @@
         'browser/ui/views/bookmarks/bookmark_bubble_view_observer.h',
         'browser/ui/views/bookmarks/bookmark_context_menu.cc',
         'browser/ui/views/bookmarks/bookmark_context_menu.h',
-        'browser/ui/views/bookmarks/bookmark_context_menu_controller_win.cc',
         'browser/ui/views/bookmarks/bookmark_drag_drop_views.cc',
         'browser/ui/views/bookmarks/bookmark_drag_drop_views.h',
         'browser/ui/views/bookmarks/bookmark_editor_view.cc',
@@ -1705,8 +1710,6 @@
         'browser/ui/views/global_error_bubble_view.h',
         'browser/ui/views/hung_renderer_view.cc',
         'browser/ui/views/hung_renderer_view.h',
-        'browser/ui/views/hung_renderer_view_win.cc',
-        'browser/ui/views/hung_renderer_view_win.h',
         'browser/ui/views/importer/import_lock_dialog_view.cc',
         'browser/ui/views/importer/import_lock_dialog_view.h',
         'browser/ui/views/infobars/alternate_nav_infobar_view.cc',
@@ -1833,8 +1836,6 @@
         'browser/ui/views/profiles/user_manager_view.h',
         'browser/ui/views/renderer_context_menu/render_view_context_menu_views.cc',
         'browser/ui/views/renderer_context_menu/render_view_context_menu_views.h',
-        'browser/ui/views/renderer_context_menu/render_view_context_menu_win.cc',
-        'browser/ui/views/renderer_context_menu/render_view_context_menu_win.h',
         'browser/ui/views/sad_tab_view.cc',
         'browser/ui/views/sad_tab_view.h',
         'browser/ui/views/screen_capture_notification_ui_views.cc',
@@ -1931,9 +1932,9 @@
         'browser/ui/views/web_contents_modal_dialog_manager_views.cc',
         'browser/ui/views/website_settings/permission_selector_view.cc',
         'browser/ui/views/website_settings/permission_selector_view.h',
+        'browser/ui/views/website_settings/permission_selector_view_observer.h',
         'browser/ui/views/website_settings/permissions_bubble_view.cc',
         'browser/ui/views/website_settings/permissions_bubble_view.h',
-        'browser/ui/views/website_settings/permission_selector_view_observer.h',
         'browser/ui/views/website_settings/website_settings_popup_view.cc',
         'browser/ui/views/website_settings/website_settings_popup_view.h',
         'browser/ui/website_settings/permission_bubble_manager.cc',
@@ -2237,6 +2238,8 @@
         'browser/ui/webui/options/chromeos/display_overscan_handler.h',
         'browser/ui/webui/options/chromeos/internet_options_handler.cc',
         'browser/ui/webui/options/chromeos/internet_options_handler.h',
+        'browser/ui/webui/options/chromeos/internet_options_handler_strings.cc',
+        'browser/ui/webui/options/chromeos/internet_options_handler_strings.h',
         'browser/ui/webui/options/chromeos/keyboard_handler.cc',
         'browser/ui/webui/options/chromeos/keyboard_handler.h',
         'browser/ui/webui/options/chromeos/pointer_handler.cc',
@@ -2474,6 +2477,12 @@
             '../third_party/openssl/openssl.gyp:openssl',
           ],
         }],
+        ['OS!="android" and OS!="ios"', {
+          'sources!': [
+            'browser/ui/auto_login_infobar_delegate.cc',
+            'browser/ui/auto_login_infobar_delegate.h',
+          ],
+        }],
         ['enable_one_click_signin==0', {
           'sources!': [
             'browser/ui/cocoa/one_click_signin_bubble_controller.h',
@@ -2543,7 +2552,7 @@
         }],
         ['toolkit_views == 1', {
           'dependencies': [
-            '../ui/wm/wm.gyp:wm_core',
+            '../ui/wm/wm.gyp:wm',
           ],
           'sources!': [
             'browser/ui/profile_reset_bubble_stub.cc',
@@ -2751,6 +2760,8 @@
           ],
           'dependencies!': [
              '../third_party/libusb/libusb.gyp:libusb',
+             '../ui/events/events.gyp:events',
+             'chrome_browser_ui_views.gyp:browser_ui_views',
           ],
           'sources': [
             'browser/ui/webui/ntp/android/bookmarks_handler.cc',
@@ -2972,7 +2983,6 @@
             '../ui/app_list/app_list.gyp:app_list',
             '../ui/views/controls/webview/webview.gyp:webview',
             '../ui/views/views.gyp:views',
-            '../win8/win8.gyp:win8_util',
           ],
           'export_dependent_settings': [
             '../ui/views/controls/webview/webview.gyp:webview',
diff --git a/chrome/chrome_common.gypi b/chrome/chrome_common.gypi
index ffe71b2..4d95f87 100644
--- a/chrome/chrome_common.gypi
+++ b/chrome/chrome_common.gypi
@@ -36,6 +36,7 @@
         '<(DEPTH)/chrome/chrome_resources.gyp:chrome_strings',
         '<(DEPTH)/chrome/chrome_resources.gyp:theme_resources',
         '<(DEPTH)/chrome/common_constants.gyp:common_constants',
+        '<(DEPTH)/components/components.gyp:cloud_devices_common',
         '<(DEPTH)/components/components.gyp:json_schema',
         '<(DEPTH)/components/components.gyp:metrics',
         '<(DEPTH)/components/components.gyp:policy_component_common',
@@ -43,7 +44,8 @@
         '<(DEPTH)/components/components.gyp:variations',
         '<(DEPTH)/content/content.gyp:content_common',
         '<(DEPTH)/crypto/crypto.gyp:crypto',
-        '<(DEPTH)/media/cast/transport/cast_transport.gyp:cast_transport',
+        '<(DEPTH)/extensions/extensions_strings.gyp:extensions_strings',
+        '<(DEPTH)/media/cast/cast.gyp:cast_transport',
         '<(DEPTH)/net/net.gyp:net',
         '<(DEPTH)/skia/skia.gyp:skia',
         '<(DEPTH)/third_party/icu/icu.gyp:icui18n',
@@ -109,6 +111,8 @@
         'common/custom_handlers/protocol_handler.h',
         'common/descriptors_android.h',
         'common/encrypted_media_messages_android.h',
+        'common/extensions/ad_injection_constants.cc',
+        'common/extensions/ad_injection_constants.h',
         'common/extensions/api/bluetooth/bluetooth_manifest_data.cc',
         'common/extensions/api/bluetooth/bluetooth_manifest_data.h',
         'common/extensions/api/bluetooth/bluetooth_manifest_handler.cc',
@@ -203,12 +207,8 @@
         'common/extensions/sync_helper.h',
         'common/extensions/update_manifest.cc',
         'common/extensions/update_manifest.h',
-        'common/favicon/favicon_types.cc',
-        'common/favicon/favicon_types.h',
         'common/favicon/favicon_url_parser.cc',
         'common/favicon/favicon_url_parser.h',
-        'common/profile_management_switches.cc',
-        'common/profile_management_switches.h',
         'common/icon_with_badge_image_source.cc',
         'common/icon_with_badge_image_source.h',
         'common/importer/firefox_importer_utils.cc',
diff --git a/chrome/chrome_dll.gypi b/chrome/chrome_dll.gypi
index 47e9304..fc2cc1c 100644
--- a/chrome/chrome_dll.gypi
+++ b/chrome/chrome_dll.gypi
@@ -109,8 +109,6 @@
                 '../chrome/chrome_resources.gyp:chrome_unscaled_resources',
                 '../crypto/crypto.gyp:crypto',
                 '../net/net.gyp:net_resources',
-                # TODO(dcheng): remove this temporary hack once WebLocalFrame lands and rolls.
-                '../third_party/WebKit/public/blink_headers.gyp:blink_headers',
                 '../ui/views/views.gyp:views',
                 '../webkit/webkit_resources.gyp:webkit_resources',
               ],
@@ -364,8 +362,6 @@
             '<@(chromium_child_dependencies)',
             '../content/content.gyp:content_app_child',
             '../content/content.gyp:content_worker',
-            # TODO(dcheng): remove this temporary hack once WebLocalFrame lands and rolls.
-            '../third_party/WebKit/public/blink_headers.gyp:blink_headers',
             'chrome_version_resources',
             'policy_path_parser',
           ],
diff --git a/chrome/chrome_exe.gypi b/chrome/chrome_exe.gypi
index e293b66..7e1e83f 100644
--- a/chrome/chrome_exe.gypi
+++ b/chrome/chrome_exe.gypi
@@ -174,31 +174,6 @@
                 },
               ],
             }],
-            ['toolkit_uses_gtk == 1', {
-              'dependencies': [
-                # On Linux, link the dependencies (libraries) that make up actual
-                # Chromium functionality directly into the executable.
-                '<@(chromium_browser_dependencies)',
-                '<@(chromium_child_dependencies)',
-                '../content/content.gyp:content_app_both',
-                # Needed for chrome_main.cc initialization of libraries.
-                '../build/linux/system.gyp:gtk',
-                # Needed to use the master_preferences functions
-                'installer_util',
-              ],
-            }, { # else toolkit_uses_gtk == 1
-              'dependencies': [
-                # On Linux, link the dependencies (libraries) that make up actual
-                # Chromium functionality directly into the executable.
-                '<@(chromium_browser_dependencies)',
-                '<@(chromium_child_dependencies)',
-                '../content/content.gyp:content_app_both',
-                # Needed for chrome_main.cc initialization of libraries.
-                '../build/linux/system.gyp:pangocairo',
-                # Needed to use the master_preferences functions
-                'installer_util',
-              ],
-            }],
             # x11 build. Needed for chrome_main.cc initialization of libraries.
             ['use_x11==1', {
               'dependencies': [
@@ -213,6 +188,17 @@
             'app/chrome_main_delegate.cc',
             'app/chrome_main_delegate.h',
           ],
+          'dependencies': [
+            # On Linux, link the dependencies (libraries) that make up actual
+            # Chromium functionality directly into the executable.
+            '<@(chromium_browser_dependencies)',
+            '<@(chromium_child_dependencies)',
+            '../content/content.gyp:content_app_both',
+            # Needed for chrome_main.cc initialization of libraries.
+            '../build/linux/system.gyp:pangocairo',
+            # Needed to use the master_preferences functions
+            'installer_util',
+          ],
         }],
         ['OS=="mac"', {
           # 'branding' is a variable defined in common.gypi
diff --git a/chrome/chrome_installer.gypi b/chrome/chrome_installer.gypi
index a11d099..b25aa4a 100644
--- a/chrome/chrome_installer.gypi
+++ b/chrome/chrome_installer.gypi
@@ -95,6 +95,7 @@
           'sources': [
             'installer/setup/compat_checks_unittest.cc',
             'installer/setup/setup_constants.cc',
+            'installer/util/advanced_firewall_manager_win_unittest.cc',
             'installer/util/callback_work_item_unittest.cc',
             'installer/util/channel_info_unittest.cc',
             'installer/util/copy_reg_key_work_item_unittest.cc',
@@ -119,6 +120,7 @@
             'installer/util/installer_util_unittests.rc',
             'installer/util/installer_util_unittests_resource.h',
             'installer/util/language_selector_unittest.cc',
+            'installer/util/legacy_firewall_manager_win_unittest.cc',
             'installer/util/logging_installer_unittest.cc',
             'installer/util/lzma_util_unittest.cc',
             'installer/util/master_preferences_unittest.cc',
diff --git a/chrome/chrome_installer_util.gypi b/chrome/chrome_installer_util.gypi
index 31c3653..234750f 100644
--- a/chrome/chrome_installer_util.gypi
+++ b/chrome/chrome_installer_util.gypi
@@ -11,6 +11,8 @@
       # This part is shared between the two versions of the target.
       ['installer_util_target==1', {
         'sources': [
+          'installer/util/advanced_firewall_manager_win.cc',
+          'installer/util/advanced_firewall_manager_win.h',
           'installer/util/app_command.cc',
           'installer/util/app_command.h',
           'installer/util/app_commands.cc',
@@ -47,6 +49,8 @@
           'installer/util/delete_tree_work_item.h',
           'installer/util/duplicate_tree_detector.cc',
           'installer/util/duplicate_tree_detector.h',
+          'installer/util/firewall_manager_win.cc',
+          'installer/util/firewall_manager_win.h',
           'installer/util/google_chrome_binaries_distribution.cc',
           'installer/util/google_chrome_binaries_distribution.h',
           'installer/util/google_chrome_sxs_distribution.cc',
@@ -71,6 +75,8 @@
           'installer/util/l10n_string_util.h',
           'installer/util/language_selector.cc',
           'installer/util/language_selector.h',
+          'installer/util/legacy_firewall_manager_win.cc',
+          'installer/util/legacy_firewall_manager_win.h',
           'installer/util/master_preferences_constants.cc',
           'installer/util/master_preferences_constants.h',
           'installer/util/move_tree_work_item.cc',
diff --git a/chrome/chrome_renderer.gypi b/chrome/chrome_renderer.gypi
index 6cd3952..fbd29bd 100644
--- a/chrome/chrome_renderer.gypi
+++ b/chrome/chrome_renderer.gypi
@@ -22,10 +22,8 @@
         '../components/components.gyp:visitedlink_renderer',
         '../content/content.gyp:content_renderer',
         '../extensions/extensions.gyp:extensions_renderer',
-        '../media/cast/cast_config.gyp:cast_config',
-        '../media/cast/cast_sender.gyp:cast_sender',
-        '../media/cast/logging/logging.gyp:sender_logging',
-        '../media/cast/transport/cast_transport.gyp:cast_transport',
+        '../media/cast/cast.gyp:cast_sender',
+        '../media/cast/cast.gyp:cast_transport',
         '../net/net.gyp:net',
         '../skia/skia.gyp:skia',
         '../third_party/WebKit/public/blink.gyp:blink',
@@ -51,43 +49,26 @@
         'renderer/extensions/activity_log_converter_strategy.h',
         'renderer/extensions/api_activity_logger.cc',
         'renderer/extensions/api_activity_logger.h',
-        'renderer/extensions/api_definitions_natives.cc',
-        'renderer/extensions/api_definitions_natives.h',
         'renderer/extensions/app_bindings.cc',
         'renderer/extensions/app_bindings.h',
         'renderer/extensions/app_runtime_custom_bindings.cc',
         'renderer/extensions/app_runtime_custom_bindings.h',
         'renderer/extensions/app_window_custom_bindings.cc',
         'renderer/extensions/app_window_custom_bindings.h',
-        'renderer/extensions/binding_generating_native_handler.cc',
-        'renderer/extensions/binding_generating_native_handler.h',
-        'renderer/extensions/blob_native_handler.cc',
-        'renderer/extensions/blob_native_handler.h',
         'renderer/extensions/cast_streaming_native_handler.cc',
         'renderer/extensions/cast_streaming_native_handler.h',
+        'renderer/extensions/chrome_extensions_renderer_client.cc',
+        'renderer/extensions/chrome_extensions_renderer_client.h',
         'renderer/extensions/chrome_v8_context.cc',
         'renderer/extensions/chrome_v8_context.h',
-        'renderer/extensions/chrome_v8_context_set.cc',
-        'renderer/extensions/chrome_v8_context_set.h',
-        'renderer/extensions/chrome_v8_extension.cc',
-        'renderer/extensions/chrome_v8_extension.h',
         'renderer/extensions/chrome_v8_extension_handler.cc',
         'renderer/extensions/chrome_v8_extension_handler.h',
-        'renderer/extensions/content_watcher.cc',
-        'renderer/extensions/content_watcher.h',
-        'renderer/extensions/context_menus_custom_bindings.cc',
-        'renderer/extensions/context_menus_custom_bindings.h',
-        'renderer/extensions/css_native_handler.cc',
-        'renderer/extensions/css_native_handler.h',
         'renderer/extensions/dispatcher.cc',
         'renderer/extensions/dispatcher.h',
-        'renderer/extensions/document_custom_bindings.cc',
-        'renderer/extensions/document_custom_bindings.h',
         'renderer/extensions/dom_activity_logger.cc',
         'renderer/extensions/dom_activity_logger.h',
         'renderer/extensions/extension_frame_helper.cc',
         'renderer/extensions/extension_frame_helper.h',
-        'renderer/extensions/extension_groups.h',
         'renderer/extensions/extension_helper.cc',
         'renderer/extensions/extension_helper.h',
         'renderer/extensions/extension_localization_peer.cc',
@@ -96,14 +77,6 @@
         'renderer/extensions/file_browser_handler_custom_bindings.h',
         'renderer/extensions/file_browser_private_custom_bindings.cc',
         'renderer/extensions/file_browser_private_custom_bindings.h',
-        'renderer/extensions/file_system_natives.cc',
-        'renderer/extensions/file_system_natives.h',
-        'renderer/extensions/i18n_custom_bindings.cc',
-        'renderer/extensions/i18n_custom_bindings.h',
-        'renderer/extensions/id_generator_custom_bindings.cc',
-        'renderer/extensions/id_generator_custom_bindings.h',
-        'renderer/extensions/logging_native_handler.cc',
-        'renderer/extensions/logging_native_handler.h',
         'renderer/extensions/media_galleries_custom_bindings.cc',
         'renderer/extensions/media_galleries_custom_bindings.h',
         'renderer/extensions/messaging_bindings.cc',
@@ -118,16 +91,10 @@
         'renderer/extensions/pepper_request_proxy.h',
         'renderer/extensions/renderer_permissions_policy_delegate.cc',
         'renderer/extensions/renderer_permissions_policy_delegate.h',
-        'renderer/extensions/render_view_observer_natives.cc',
-        'renderer/extensions/render_view_observer_natives.h',
         'renderer/extensions/resource_request_policy.cc',
         'renderer/extensions/resource_request_policy.h',
         'renderer/extensions/runtime_custom_bindings.cc',
         'renderer/extensions/runtime_custom_bindings.h',
-        'renderer/extensions/send_request_natives.cc',
-        'renderer/extensions/send_request_natives.h',
-        'renderer/extensions/set_icon_natives.cc',
-        'renderer/extensions/set_icon_natives.h',
         'renderer/extensions/sync_file_system_custom_bindings.cc',
         'renderer/extensions/sync_file_system_custom_bindings.h',
         'renderer/extensions/tab_finder.cc',
@@ -138,10 +105,6 @@
         'renderer/extensions/user_script_scheduler.h',
         'renderer/extensions/user_script_slave.cc',
         'renderer/extensions/user_script_slave.h',
-        'renderer/extensions/utils_native_handler.cc',
-        'renderer/extensions/utils_native_handler.h',
-        'renderer/extensions/v8_schema_registry.cc',
-        'renderer/extensions/v8_schema_registry.h',
         'renderer/extensions/webstore_bindings.cc',
         'renderer/extensions/webstore_bindings.h',
         'renderer/isolated_world_ids.h',
@@ -167,12 +130,12 @@
         'renderer/media/chrome_webrtc_log_message_delegate.h',
         'renderer/media/webrtc_logging_message_filter.cc',
         'renderer/media/webrtc_logging_message_filter.h',
-        'renderer/net/error_cache_load.cc',
-        'renderer/net/error_cache_load.h',
         'renderer/net/net_error_helper.cc',
         'renderer/net/net_error_helper.h',
         'renderer/net/net_error_helper_core.cc',
         'renderer/net/net_error_helper_core.h',
+        'renderer/net/net_error_page_controller.cc',
+        'renderer/net/net_error_page_controller.h',
         'renderer/net/predictor_queue.cc',
         'renderer/net/predictor_queue.h',
         'renderer/net/prescient_networking_dispatcher.cc',
@@ -414,15 +377,10 @@
           'sources!': [
             'renderer/prerender/prerender_media_load_deferrer.cc',
             'renderer/prerender/prerender_media_load_deferrer.h',
-            'renderer/extensions/api_definitions_natives.cc',
             'renderer/extensions/app_window_custom_bindings.cc',
-            'renderer/extensions/chrome_v8_extension.cc',
             'renderer/extensions/chrome_v8_extension_handler.cc',
-            'renderer/extensions/context_menus_custom_bindings.cc',
             'renderer/extensions/file_browser_handler_custom_bindings.cc',
             'renderer/extensions/page_actions_custom_bindings.cc',
-            'renderer/extensions/render_view_observer_natives.cc',
-            'renderer/extensions/send_request_natives.cc',
             'renderer/extensions/tabs_custom_bindings.cc',
             'renderer/extensions/tts_custom_bindings.cc',
           ],
diff --git a/chrome/chrome_repack_resources.gypi b/chrome/chrome_repack_resources.gypi
index dcc2d7e..0adb340 100644
--- a/chrome/chrome_repack_resources.gypi
+++ b/chrome/chrome_repack_resources.gypi
@@ -21,6 +21,11 @@
     ],
     'pak_output': '<(SHARED_INTERMEDIATE_DIR)/repack/resources.pak',
     'conditions': [
+      ['chromeos==1', {
+        'pak_inputs': [
+          '<(SHARED_INTERMEDIATE_DIR)/ui/file_manager/file_manager_resources.pak',
+        ],
+      }],
       ['OS != "ios"', {
         'pak_inputs': [
           '<(SHARED_INTERMEDIATE_DIR)/content/browser/tracing/tracing_resources.pak',
diff --git a/chrome/chrome_resources.gyp b/chrome/chrome_resources.gyp
index 6b1d8d8..a299f1e 100644
--- a/chrome/chrome_resources.gyp
+++ b/chrome/chrome_resources.gyp
@@ -115,6 +115,7 @@
         ['chromeos==1 and disable_nacl==0 and disable_nacl_untrusted==0', {
           'dependencies': [
             '../chrome/third_party/chromevox/chromevox.gyp:chromevox_resources',
+            'chromevox_strings',
           ],
         }],
       ],
@@ -385,6 +386,7 @@
           'dependencies': [
             '<(DEPTH)/content/content_resources.gyp:content_resources',
             '<(DEPTH)/device/bluetooth/bluetooth_strings.gyp:device_bluetooth_strings',
+            '<(DEPTH)/extensions/extensions_strings.gyp:extensions_strings',
             '<(DEPTH)/webkit/webkit_resources.gyp:webkit_resources',
             '<(DEPTH)/webkit/webkit_resources.gyp:webkit_strings',
           ],
@@ -501,5 +503,23 @@
         },
       ],
     },
+    {
+      'target_name': 'chromevox_strings',
+      'type': 'none',
+      'actions': [
+        {
+          'action_name': 'chromevox_strings',
+          'variables': {
+            'grit_grd_file': 'browser/resources/chromeos/chromevox/strings/chromevox_strings.grd',
+            # TODO(plundblad): Change to use PRODUCT_DIR when we have
+            # translations.
+            'grit_out_dir': '<(SHARED_INTERMEDIATE_DIR)/resources/chromeos/chromevox',
+            # We don't generate any RC files, so no resource_ds file is needed.
+            'grit_resource_ids': '',
+          },
+          'includes': [ '../build/grit_action.gypi' ],
+        },
+      ],
+    },
   ], # targets
 }
diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi
index cafb501..14e3b1a 100644
--- a/chrome/chrome_tests.gypi
+++ b/chrome/chrome_tests.gypi
@@ -10,6 +10,24 @@
       'target_name': 'interactive_ui_tests',
       'type': 'executable',
       'dependencies': [
+        '../google_apis/google_apis.gyp:google_apis_test_support',
+        '../net/net.gyp:net',
+        '../net/net.gyp:net_resources',
+        '../net/net.gyp:net_test_support',
+        '../ppapi/ppapi_internal.gyp:ppapi_tests',
+        '../skia/skia.gyp:skia',
+        '../sync/sync.gyp:sync',
+        '../testing/gmock.gyp:gmock',
+        '../testing/gtest.gyp:gtest',
+        '../third_party/hunspell/hunspell.gyp:hunspell',
+        '../third_party/icu/icu.gyp:icui18n',
+        '../third_party/icu/icu.gyp:icuuc',
+        '../third_party/libpng/libpng.gyp:libpng',
+        '../third_party/npapi/npapi.gyp:npapi',
+        '../third_party/zlib/zlib.gyp:zlib',
+        '../ui/base/ui_base.gyp:ui_base_test_support',
+        '../ui/web_dialogs/web_dialogs.gyp:web_dialogs_test_support',
+        '../webkit/webkit_resources.gyp:webkit_resources',
         'browser',
         'chrome_resources.gyp:chrome_resources',
         'chrome_resources.gyp:chrome_strings',
@@ -18,25 +36,6 @@
         'debugger',
         'renderer',
         'test_support_common',
-        '../google_apis/google_apis.gyp:google_apis_test_support',
-        '../third_party/hunspell/hunspell.gyp:hunspell',
-        '../net/net.gyp:net',
-        '../net/net.gyp:net_resources',
-        '../net/net.gyp:net_test_support',
-        '../skia/skia.gyp:skia',
-        '../sync/sync.gyp:sync',
-        '../third_party/icu/icu.gyp:icui18n',
-        '../third_party/icu/icu.gyp:icuuc',
-        '../third_party/libpng/libpng.gyp:libpng',
-        '../third_party/zlib/zlib.gyp:zlib',
-        '../testing/gmock.gyp:gmock',
-        '../testing/gtest.gyp:gtest',
-        '../third_party/npapi/npapi.gyp:npapi',
-        # Runtime dependencies
-        '../ppapi/ppapi_internal.gyp:ppapi_tests',
-        '../ui/ui_unittests.gyp:ui_test_support',
-        '../ui/web_dialogs/web_dialogs.gyp:web_dialogs_test_support',
-        '../webkit/webkit_resources.gyp:webkit_resources',
       ],
       'include_dirs': [
         '..',
@@ -73,6 +72,7 @@
         'browser/extensions/updater/extension_cache_fake.cc',
         'browser/extensions/window_open_interactive_apitest.cc',
         'browser/mouseleave_browsertest.cc',
+        'browser/notifications/notification_browsertest.cc',
         'browser/password_manager/password_generation_interactive_uitest.cc',
         'browser/renderer_context_menu/render_view_context_menu_browsertest_util.cc',
         'browser/renderer_context_menu/render_view_context_menu_browsertest_util.h',
@@ -151,17 +151,6 @@
             '../tools/xdisplaycheck/xdisplaycheck.gyp:xdisplaycheck',
           ],
         }],
-        ['toolkit_uses_gtk == 1', {
-          'dependencies': [
-            '../build/linux/system.gyp:gtk',
-          ],
-        }, {
-          'sources!': [
-            'browser/notifications/desktop_notifications_unittest.cc',
-            'browser/notifications/desktop_notifications_unittest.h',
-            'browser/notifications/notification_browsertest.cc',
-          ]
-        }],
         ['OS=="linux" and use_aura==1', {
           # TODO(gbillock): aura linux does not support the automation for
           # SendMouseMoveNotifyWhenDone
@@ -169,7 +158,7 @@
             'browser/ui/views/toolbar/toolbar_button_test.cc',
           ],
         }],
-        ['toolkit_uses_gtk == 1 or chromeos==1 or (OS=="linux" and use_aura==1)', {
+        ['OS=="linux"', {
           'dependencies': [
             '../build/linux/system.gyp:ssl',
           ],
@@ -300,6 +289,7 @@
           ],
           'sources!': [
             # chromeos does not use cross-platform panels
+            'browser/notifications/notification_browsertest.cc',
             'browser/ui/panels/detached_panel_browsertest.cc',
             'browser/ui/panels/docked_panel_browsertest.cc',
             'browser/ui/panels/panel_browsertest.cc',
@@ -787,7 +777,7 @@
         '../device/bluetooth/bluetooth.gyp:device_bluetooth_mocks',
         '../extensions/common/api/api.gyp:extensions_api',
         '../google_apis/google_apis.gyp:google_apis_test_support',
-        '../media/cast/test/utility/utility.gyp:cast_test_utility',
+        '../media/cast/cast.gyp:cast_test_utility',
         '../net/net.gyp:net',
         '../net/net.gyp:net_test_support',
         '../skia/skia.gyp:skia',
@@ -879,6 +869,7 @@
         'browser/chromeos/app_mode/kiosk_app_manager_browsertest.cc',
         'browser/chromeos/app_mode/kiosk_app_update_service_browsertest.cc',
         'browser/chromeos/attestation/attestation_policy_browsertest.cc',
+        'browser/chromeos/device/input_service_proxy_browsertest.cc',
         'browser/chromeos/drive/drive_integration_service_browsertest.cc',
         'browser/chromeos/drive/drive_notification_manager_factory_browsertest.cc',
         'browser/chromeos/drive/test_util.cc',
@@ -978,8 +969,9 @@
         'browser/content_settings/content_settings_browsertest.cc',
         'browser/crash_recovery_browsertest.cc',
         'browser/custom_handlers/protocol_handler_registry_browsertest.cc',
-        'browser/devtools/adb_client_socket_browsertest.cc',
-        'browser/devtools/devtools_adb_bridge_browsertest.cc',
+        'browser/devtools/device/adb/adb_client_socket_browsertest.cc',
+        'browser/devtools/device/devtools_android_bridge_browsertest.cc',
+        'browser/devtools/device/port_forwarding_browsertest.cc',
         'browser/devtools/devtools_sanity_browsertest.cc',
         'browser/dom_distiller/dom_distiller_viewer_source_browsertest.cc',
         'browser/do_not_track_browsertest.cc',
@@ -991,6 +983,7 @@
         'browser/errorpage_browsertest.cc',
         'browser/extensions/active_tab_apitest.cc',
         'browser/extensions/activity_log/activity_log_browsertest.cc',
+        'browser/extensions/activity_log/ad_injection_browsertest.cc',
         'browser/extensions/activity_log/uma_policy_browsertest.cc',
         'browser/extensions/alert_apitest.cc',
         'browser/extensions/all_urls_apitest.cc',
@@ -1283,6 +1276,7 @@
         'browser/sessions/better_session_restore_browsertest.cc',
         'browser/sessions/persistent_tab_restore_service_browsertest.cc',
         'browser/sessions/session_restore_browsertest.cc',
+        'browser/sessions/session_restore_browsertest_chromeos.cc',
         'browser/sessions/tab_restore_browsertest.cc',
         'browser/signin/signin_browsertest.cc',
         'browser/speech/extension_api/tts_extension_apitest.cc',
@@ -1363,6 +1357,7 @@
         'browser/ui/panels/panel_extension_browsertest.cc',
         'browser/ui/pdf/pdf_browsertest.cc',
         'browser/ui/prefs/prefs_tab_helper_browsertest.cc',
+        'browser/ui/settings_window_manager_browsertest.cc',
         'browser/ui/startup/startup_browser_creator_browsertest.cc',
         'browser/ui/sync/one_click_signin_bubble_links_delegate_browsertest.cc',
         'browser/ui/sync/profile_signin_confirmation_helper_browsertest.cc',
@@ -1412,6 +1407,7 @@
         'browser/ui/webui/options/browser_options_browsertest.js',
         'browser/ui/webui/options/certificate_manager_browsertest.cc',
         'browser/ui/webui/options/certificate_manager_browsertest.js',
+        'browser/ui/webui/options/clear_browser_data_browsertest.cc',
         'browser/ui/webui/options/chromeos/accounts_options_browsertest.cc',
         'browser/ui/webui/options/chromeos/accounts_options_browsertest.js',
         'browser/ui/webui/options/chromeos/bluetooth_options_browsertest.js',
@@ -1791,7 +1787,7 @@
             'app/chrome_version.rc.version',
           ],
         }],
-        ['toolkit_uses_gtk == 1 or chromeos==1 or (OS=="linux" and use_aura==1)', {
+        ['OS=="linux"', {
           'dependencies': [
             '../build/linux/system.gyp:ssl',
           ],
@@ -1978,7 +1974,7 @@
         '../base/base.gyp:base',
         '../base/base.gyp:base_i18n',
         '../base/base.gyp:test_support_base',
-        '../media/cast/test/utility/utility.gyp:cast_test_utility',
+        '../media/cast/cast.gyp:cast_test_utility',
         '../net/net.gyp:net',
         '../net/net.gyp:net_test_support',
         '../skia/skia.gyp:skia',
@@ -2093,7 +2089,7 @@
             '../tools/xdisplaycheck/xdisplaycheck.gyp:xdisplaycheck',
           ],
         }],
-        ['toolkit_uses_gtk == 1 or chromeos==1 or (OS=="linux" and use_aura==1)', {
+        ['OS=="linux"', {
           'dependencies': [
             '../build/linux/system.gyp:ssl',
           ],
@@ -2318,7 +2314,7 @@
         'browser/sync/test/integration/two_client_typed_urls_sync_test.cc',
       ],
       'conditions': [
-        ['toolkit_uses_gtk == 1 or chromeos==1 or (OS=="linux" and use_aura==1)', {
+        ['OS=="linux"', {
           'dependencies': [
             '../build/linux/system.gyp:ssl',
           ],
@@ -2423,7 +2419,7 @@
         'test/data/resource.rc',
       ],
       'conditions': [
-        ['toolkit_uses_gtk == 1 or chromeos==1 or (OS=="linux" and use_aura==1)', {
+        ['OS=="linux"', {
           'dependencies': [
             '../build/linux/system.gyp:ssl',
           ],
diff --git a/chrome/chrome_tests_unit.gypi b/chrome/chrome_tests_unit.gypi
index 8754df9..f714d07 100644
--- a/chrome/chrome_tests_unit.gypi
+++ b/chrome/chrome_tests_unit.gypi
@@ -125,6 +125,8 @@
         'browser/drive/dummy_drive_service.h',
         'browser/drive/fake_drive_service.cc',
         'browser/drive/fake_drive_service.h',
+        'browser/drive/test_util.cc',
+        'browser/drive/test_util.h',
         'browser/extensions/api/messaging/native_messaging_test_util.cc',
         'browser/extensions/api/messaging/native_messaging_test_util.h',
         'browser/extensions/extension_notification_observer.cc',
@@ -281,8 +283,6 @@
         'test/ppapi/ppapi_test.h',
         '../ui/gfx/image/image_unittest_util.cc',
         '../ui/gfx/image/image_unittest_util.h',
-        '../webkit/browser/quota/mock_special_storage_policy.cc',
-        '../webkit/browser/quota/mock_special_storage_policy.h',
       ],
       'conditions': [
         ['OS!="ios"', {
@@ -357,7 +357,7 @@
             ['exclude', '^browser/extensions/fake_safe_browsing_database_manager.h'],
           ],
         }],
-        ['toolkit_uses_gtk == 1 or chromeos==1 or (OS=="linux" and use_aura==1)', {
+        ['OS=="linux"', {
           'dependencies': [
             '../build/linux/system.gyp:ssl',
           ],
@@ -474,6 +474,7 @@
         # 2) test-specific support libraries:
         '../base/base.gyp:test_support_base',
         '../components/components_resources.gyp:components_resources',
+        '../content/content_shell_and_tests.gyp:webkit_test_support_content',
         '../content/content.gyp:content_app_both',
         '../net/net.gyp:net',
         '../net/net.gyp:net_test_support',
@@ -494,9 +495,9 @@
         '../third_party/icu/icu.gyp:icui18n',
         '../third_party/icu/icu.gyp:icuuc',
         '../third_party/libxml/libxml.gyp:libxml',
+        '../ui/base/ui_base.gyp:ui_base_test_support',
         '../ui/gfx/gfx.gyp:gfx_test_support',
         '../ui/resources/ui_resources.gyp:ui_resources',
-        '../ui/ui_unittests.gyp:ui_test_support',
         'chrome_resources.gyp:chrome_resources',
         'chrome_resources.gyp:chrome_strings',
       ],
@@ -576,6 +577,7 @@
         '../extensions/common/url_pattern_set_unittest.cc',
         '../extensions/common/url_pattern_unittest.cc',
         '../extensions/common/user_script_unittest.cc',
+        '../extensions/renderer/script_context_set_unittest.cc',
         'app/chrome_dll.rc',
         # All unittests in browser, common, renderer and service.
         'browser/about_flags_unittest.cc',
@@ -695,6 +697,9 @@
         'browser/chromeos/extensions/default_app_order_unittest.cc',
         'browser/chromeos/extensions/device_local_account_external_policy_loader_unittest.cc',
         'browser/chromeos/extensions/external_cache_unittest.cc',
+        'browser/chromeos/extensions/device_local_account_management_policy_provider_unittest.cc',
+        'browser/chromeos/extensions/wallpaper_private_api_unittest.cc',
+        'browser/chromeos/external_metrics_unittest.cc',
         'browser/chromeos/file_manager/fake_disk_mount_manager.cc',
         'browser/chromeos/file_manager/fake_disk_mount_manager.h',
         'browser/chromeos/file_manager/file_tasks_unittest.cc',
@@ -704,11 +709,13 @@
         'browser/chromeos/file_manager/path_util_unittest.cc',
         'browser/chromeos/file_manager/url_util_unittest.cc',
         'browser/chromeos/file_manager/volume_manager_unittest.cc',
+        'browser/chromeos/file_system_provider/fake_provided_file_system.cc',
+        'browser/chromeos/file_system_provider/fake_provided_file_system.h',
+        'browser/chromeos/file_system_provider/fileapi/provider_async_file_util_unittest.cc',
+        'browser/chromeos/file_system_provider/mount_path_util_unittest.cc',
+        'browser/chromeos/file_system_provider/provided_file_system_unittest.cc',
         'browser/chromeos/file_system_provider/request_manager_unittest.cc',
         'browser/chromeos/file_system_provider/service_unittest.cc',
-        'browser/chromeos/extensions/device_local_account_management_policy_provider_unittest.cc',
-        'browser/chromeos/extensions/wallpaper_private_api_unittest.cc',
-        'browser/chromeos/external_metrics_unittest.cc',
         'browser/chromeos/fileapi/file_access_permissions_unittest.cc',
         'browser/chromeos/fileapi/file_system_backend_unittest.cc',
         'browser/chromeos/imageburner/burn_device_handler_unittest.cc',
@@ -723,6 +730,7 @@
         'browser/chromeos/kiosk_mode/kiosk_mode_settings_unittest.cc',
         'browser/chromeos/login/existing_user_controller_auto_login_unittest.cc',
         'browser/chromeos/login/hwid_checker_unittest.cc',
+        'browser/chromeos/login/managed/supervised_user_authentication_unittest.cc',
         'browser/chromeos/login/merge_session_load_page_unittest.cc',
         'browser/chromeos/login/mock_auth_attempt_state_resolver.cc',
         'browser/chromeos/login/mock_auth_attempt_state_resolver.h',
@@ -826,7 +834,7 @@
         'browser/extensions/activity_log/activity_log_enabled_unittest.cc',
         'browser/extensions/activity_log/activity_log_unittest.cc',
         'browser/extensions/activity_log/activity_log_policy_unittest.cc',
-        'browser/extensions/activity_log/ad_injection_util_unittest.cc',
+        'browser/extensions/activity_log/ad_injection_unittest.cc',
         'browser/extensions/activity_log/counting_policy_unittest.cc',
         'browser/extensions/activity_log/database_string_table_unittest.cc',
         'browser/extensions/activity_log/fullstream_ui_policy_unittest.cc',
@@ -837,6 +845,7 @@
         'browser/extensions/api/bluetooth/bluetooth_api_unittest.cc',
         'browser/extensions/api/bluetooth/bluetooth_event_router_unittest.cc',
         'browser/extensions/api/bookmarks/bookmark_api_helpers_unittest.cc',
+        'browser/extensions/api/cast_channel/cast_channel_api_unittest.cc',
         'browser/extensions/api/cast_channel/cast_socket_unittest.cc',
         'browser/extensions/api/content_settings/content_settings_store_unittest.cc',
         'browser/extensions/api/content_settings/content_settings_unittest.cc',
@@ -991,11 +1000,9 @@
         'browser/history/in_memory_url_index_types_unittest.cc',
         'browser/history/in_memory_url_index_unittest.cc',
         'browser/history/most_visited_tiles_experiment_unittest.cc',
-        'browser/history/query_parser_unittest.cc',
         'browser/history/scored_history_match_unittest.cc',
         'browser/history/select_favicon_frames_unittest.cc',
         'browser/history/shortcuts_database_unittest.cc',
-        'browser/history/snippet_unittest.cc',
         'browser/history/thumbnail_database_unittest.cc',
         'browser/history/top_sites_cache_unittest.cc',
         'browser/history/top_sites_database_unittest.cc',
@@ -1128,6 +1135,7 @@
         'browser/password_manager/password_store_x_unittest.cc',
         'browser/performance_monitor/database_unittest.cc',
         'browser/plugins/plugin_finder_unittest.cc',
+        'browser/plugins/plugin_installer_unittest.cc',
         'browser/plugins/plugin_metadata_unittest.cc',
         'browser/plugins/plugin_prefs_unittest.cc',
         'browser/policy/cloud/cloud_policy_invalidator_unittest.cc',
@@ -1290,17 +1298,12 @@
         'browser/sync/glue/autofill_data_type_controller_unittest.cc',
         'browser/sync/glue/bookmark_data_type_controller_unittest.cc',
         'browser/sync/glue/browser_thread_model_worker_unittest.cc',
-        'browser/sync/glue/change_processor_mock.cc',
-        'browser/sync/glue/change_processor_mock.h',
         'browser/sync/glue/data_type_manager_impl_unittest.cc',
         'browser/sync/glue/extensions_activity_monitor_unittest.cc',
-        'browser/sync/glue/fake_generic_change_processor.cc',
-        'browser/sync/glue/fake_generic_change_processor.h',
         'browser/sync/glue/favicon_cache_unittest.cc',
         'browser/sync/glue/frontend_data_type_controller_mock.cc',
         'browser/sync/glue/frontend_data_type_controller_mock.h',
         'browser/sync/glue/frontend_data_type_controller_unittest.cc',
-        'browser/sync/glue/generic_change_processor_unittest.cc',
         'browser/sync/glue/non_frontend_data_type_controller_mock.cc',
         'browser/sync/glue/non_frontend_data_type_controller_mock.h',
         'browser/sync/glue/non_frontend_data_type_controller_unittest.cc',
@@ -1308,7 +1311,6 @@
         'browser/sync/glue/non_ui_data_type_controller_mock.h',
         'browser/sync/glue/non_ui_data_type_controller_unittest.cc',
         'browser/sync/glue/search_engine_data_type_controller_unittest.cc',
-        'browser/sync/glue/session_model_associator_unittest.cc',
         'browser/sync/glue/shared_change_processor_mock.cc',
         'browser/sync/glue/shared_change_processor_mock.h',
         'browser/sync/glue/shared_change_processor_unittest.cc',
@@ -1318,7 +1320,6 @@
         'browser/sync/glue/sync_backend_registrar_unittest.cc',
         'browser/sync/glue/synced_device_tracker_unittest.cc',
         'browser/sync/glue/synced_session_tracker_unittest.cc',
-        'browser/sync/glue/tab_node_pool_unittest.cc',
         'browser/sync/glue/typed_url_model_associator_unittest.cc',
         'browser/sync/glue/ui_data_type_controller_unittest.cc',
         'browser/sync/glue/ui_model_worker_unittest.cc',
@@ -1328,14 +1329,13 @@
         'browser/sync/profile_sync_service_autofill_unittest.cc',
         'browser/sync/profile_sync_service_bookmark_unittest.cc',
         'browser/sync/profile_sync_service_preference_unittest.cc',
-        'browser/sync/profile_sync_service_session_unittest.cc',
         'browser/sync/profile_sync_service_startup_unittest.cc',
         'browser/sync/profile_sync_service_typed_url_unittest.cc',
         'browser/sync/profile_sync_service_unittest.cc',
         'browser/sync/profile_sync_test_util.cc',
         'browser/sync/profile_sync_test_util.h',
-        'browser/sync/sessions2/sessions_sync_manager_unittest.cc',
-        'browser/sync/sessions2/tab_node_pool2_unittest.cc',
+        'browser/sync/sessions/sessions_sync_manager_unittest.cc',
+        'browser/sync/sessions/tab_node_pool_unittest.cc',
         'browser/sync/startup_controller_unittest.cc',
         'browser/sync/sync_error_notifier_ash_unittest.cc',
         'browser/sync/sync_global_error_unittest.cc',
@@ -1346,6 +1346,7 @@
         'browser/sync/test/test_http_bridge_factory.h',
         'browser/sync/test_profile_sync_service.cc',
         'browser/sync/test_profile_sync_service.h',
+        'browser/sync_file_system/drive_backend/callback_helper_unittest.cc',
         'browser/sync_file_system/drive_backend/conflict_resolver_unittest.cc',
         'browser/sync_file_system/drive_backend/drive_backend_sync_unittest.cc',
         'browser/sync_file_system/drive_backend/drive_backend_test_util.cc',
@@ -1639,6 +1640,7 @@
         'browser/ui/cocoa/view_resizer_pong.h',
         'browser/ui/cocoa/view_resizer_pong.mm',
         'browser/ui/cocoa/website_settings/permission_bubble_controller_unittest.mm',
+        'browser/ui/cocoa/website_settings/permission_selector_button_unittest.mm',
         'browser/ui/cocoa/website_settings_bubble_controller_unittest.mm',
         'browser/ui/cocoa/web_dialog_window_controller_unittest.mm',
         'browser/ui/cocoa/window_size_autosaver_unittest.mm',
@@ -1657,6 +1659,8 @@
         'browser/ui/omnibox/omnibox_popup_model_unittest.cc',
         'browser/ui/omnibox/omnibox_view_unittest.cc',
         'browser/ui/panels/panel_mouse_watcher_unittest.cc',
+        'browser/ui/passwords/manage_passwords_bubble_model_unittest.cc',
+        'browser/ui/passwords/manage_passwords_bubble_ui_controller_mock.cc',
         'browser/ui/passwords/password_manager_presenter_unittest.cc',
         'browser/ui/search_engines/keyword_editor_controller_unittest.cc',
         'browser/ui/search/instant_page_unittest.cc',
@@ -1722,6 +1726,7 @@
         'browser/ui/views/select_file_dialog_extension_unittest.cc',
         'browser/ui/views/status_icons/status_tray_win_unittest.cc',
         'browser/ui/views/sync/one_click_signin_bubble_view_unittest.cc',
+        'browser/ui/views/tab_contents/chrome_web_contents_view_delegate_views_unittest.cc',
         'browser/ui/views/tabs/fake_base_tab_strip_controller.cc',
         'browser/ui/views/tabs/fake_base_tab_strip_controller.h',
         'browser/ui/views/tabs/stacked_tab_strip_layout_unittest.cc',
@@ -1753,7 +1758,6 @@
         'browser/chrome_content_browser_client_unittest.cc',
         'browser/undo/bookmark_undo_service_test.cc',
         'browser/undo/undo_manager_test.cc',
-        'browser/usb/usb_context_unittest.cc',
         'browser/web_applications/web_app_mac_unittest.mm',
         'browser/web_applications/web_app_unittest.cc',
         'browser/web_resource/eula_accepted_notifier_unittest.cc',
@@ -1856,7 +1860,6 @@
         'renderer/chrome_content_renderer_client_unittest.cc',
         'renderer/content_settings_observer_unittest.cc',
         'renderer/extensions/activity_log_converter_strategy_unittest.cc',
-        'renderer/extensions/chrome_v8_context_set_unittest.cc',
         'renderer/extensions/event_unittest.cc',
         'renderer/extensions/extension_localization_peer_unittest.cc',
         'renderer/extensions/json_schema_unittest.cc',
@@ -1961,8 +1964,6 @@
         '../tools/json_schema_compiler/test/simple_api_unittest.cc',
         '../tools/json_schema_compiler/test/error_generation_unittest.cc',
         '../ui/webui/resources/js/cr.js',
-        '../webkit/browser/quota/mock_storage_client.cc',
-        '../webkit/browser/quota/mock_storage_client.h',
       ],
       'conditions': [
         ['OS!="ios"', {
@@ -1971,6 +1972,7 @@
             '../components/components.gyp:data_reduction_proxy_test_support',
             '../components/components_strings.gyp:components_strings',
             '../device/bluetooth/bluetooth.gyp:device_bluetooth_mocks',
+            '../extensions/extensions_strings.gyp:extensions_strings',
             '../gpu/gpu.gyp:gpu_unittest_utils',
             '../media/media.gyp:media_test_support',
             '../ppapi/ppapi_internal.gyp:ppapi_unittest_shared',
@@ -2120,7 +2122,7 @@
         ['use_aura==1 or toolkit_views==1', {
           'dependencies': [
             '../ui/events/events.gyp:events_test_support',
-            '../ui/wm/wm.gyp:wm_core',
+            '../ui/wm/wm.gyp:wm',
           ],
         }],
         ['use_aura==1 and component=="shared_library"', {
@@ -2283,7 +2285,7 @@
             '../tools/xdisplaycheck/xdisplaycheck.gyp:xdisplaycheck',
           ],
         }],
-        ['toolkit_uses_gtk == 1 or chromeos==1 or (OS=="linux" and use_aura==1)', {
+        ['OS=="linux"', {
           'dependencies': [
             '../build/linux/system.gyp:ssl',
           ],
@@ -2452,6 +2454,11 @@
           'dependencies!': [
             '../third_party/libaddressinput/libaddressinput.gyp:libaddressinput',
           ],
+          'ldflags': [
+            # Some android targets still depend on --gc-sections to link.
+            # TODO: remove --gc-sections for Debug builds (crbug.com/159847).
+            '-Wl,--gc-sections',
+          ],
           'sources!': [
             # Bookmark export/import are handled via the BookmarkColumns
             # ContentProvider.
@@ -2474,8 +2481,7 @@
             'browser/renderer_context_menu/render_view_context_menu_unittest.cc',
             'browser/search/instant_service_unittest.cc',
             'browser/search/search_unittest.cc',
-            'browser/sync/profile_sync_service_session_unittest.cc',
-            'browser/sync/sessions2/sessions_sync_manager_unittest.cc',
+            'browser/sync/sessions/sessions_sync_manager_unittest.cc',
             'browser/sync/sync_global_error_unittest.cc',
             'browser/translate/translate_manager_render_view_host_unittest.cc',
             'browser/ui/browser_instant_controller_unittest.cc',
@@ -2526,9 +2532,6 @@
             # The importer code is not used on Android.
             'common/importer/firefox_importer_utils_unittest.cc',
 
-            # USB service is not supported on Android.
-            'browser/usb/usb_context_unittest.cc',
-
             # Bookmark undo is not used on Android.
            'browser/undo/bookmark_undo_service_test.cc',
            'browser/undo/undo_manager_test.cc',
@@ -2675,6 +2678,11 @@
             ['exclude', '^browser/chromeos/events/'],  # crbug.com/354036
           ],
         }],
+        ['enable_plugin_installation==0', {
+          'sources!': [
+            'browser/plugins/plugin_installer_unittest.cc',
+          ],
+        }],
       ],
     },
     {
@@ -2766,7 +2774,6 @@
           ],
           'variables': {
             'test_suite_name': 'unit_tests',
-            'input_shlib_path': '<(SHARED_LIB_DIR)/<(SHARED_LIB_PREFIX)unit_tests<(SHARED_LIB_SUFFIX)',
             'android_manifest_path': 'test/android/unit_tests_apk/AndroidManifest.xml',
           },
           'includes': [ '../build/apk_test.gypi' ],
@@ -2830,8 +2837,6 @@
             'browser/ui/app_list/app_list_service_unittest.cc',
             'browser/ui/app_list/profile_loader_unittest.cc',
             'browser/ui/app_list/test/app_list_shower_unittest.cc',
-            'browser/ui/app_list/test/fake_keep_alive_service.cc',
-            'browser/ui/app_list/test/fake_keep_alive_service.h',
             'browser/ui/app_list/test/fake_profile.cc',
             'browser/ui/app_list/test/fake_profile.h',
             'browser/ui/app_list/test/fake_profile_store.cc',
diff --git a/chrome/common/DEPS b/chrome/common/DEPS
index 2ecbccd..23a65ab 100644
--- a/chrome/common/DEPS
+++ b/chrome/common/DEPS
@@ -5,6 +5,7 @@
   "+components/autofill/content/common",
   "+components/autofill/core/common",
   "+components/bookmarks/core/common",
+  "+components/cloud_devices/common",
   "+components/data_reduction_proxy/common",
   "+components/nacl/common",
   "+components/password_manager/core/common",
diff --git a/chrome/common/OWNERS b/chrome/common/OWNERS
index 911f0a6..2f5ee74 100644
--- a/chrome/common/OWNERS
+++ b/chrome/common/OWNERS
@@ -51,4 +51,3 @@
 per-file autocomplete_match_type.*=pkasting@chromium.org
 per-file autocomplete_match_type.*=sky@chromium.org
 per-file crash_keys*=rsesek@chromium.org
-per-file profile_management_switches.*=bcwhite@chromium.org
diff --git a/chrome/common/child_process_logging_win.cc b/chrome/common/child_process_logging_win.cc
index 4cf9b0a..1befb33 100644
--- a/chrome/common/child_process_logging_win.cc
+++ b/chrome/common/child_process_logging_win.cc
@@ -10,6 +10,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/common/chrome_constants.h"
 #include "chrome/common/crash_keys.h"
+#include "chrome/installer/util/google_update_settings.h"
 
 namespace child_process_logging {
 
@@ -63,6 +64,13 @@
   crash_keys::RegisterChromeCrashKeys();
   base::debug::SetCrashKeyReportingFunctions(
       &SetCrashKeyValueTrampoline, &ClearCrashKeyValueTrampoline);
+
+  // This would be handled by BreakpadClient::SetClientID(), but because of the
+  // aforementioned issue, crash keys aren't ready yet at the time of Breakpad
+  // initialization.
+  std::string client_id;
+  if (GoogleUpdateSettings::GetMetricsId(&client_id))
+    base::debug::SetCrashKeyValue(crash_keys::kClientID, client_id);
 }
 
 }  // namespace child_process_logging
diff --git a/chrome/common/chrome_switches.cc b/chrome/common/chrome_switches.cc
index 2c56c35..87168e7 100644
--- a/chrome/common/chrome_switches.cc
+++ b/chrome/common/chrome_switches.cc
@@ -173,11 +173,6 @@
 // service or register proxy for autostart.
 const char kCloudPrintSetupProxy[]          = "cloud-print-setup-proxy";
 
-// The URL of the cloud print service to use, overrides any value stored in
-// preferences, and the default. Only used if the cloud print service has been
-// enabled (see enable-cloud-print).
-const char kCloudPrintServiceURL[]          = "cloud-print-service";
-
 // Comma-separated options to troubleshoot the component updater. Only valid
 // for the browser process.
 const char kComponentUpdater[]              = "component-updater";
@@ -298,9 +293,6 @@
 // a tab.  http://crbug.com/256870 and http://crbug.com/290403
 const char kDisableFullscreenWithinTab[] = "disable-fullscreen-within-tab";
 
-// Prevent infobars from appearing.
-const char kDisableInfoBars[]               = "disable-infobars";
-
 // Don't resolve hostnames to IPv6 addresses. This can be used when debugging
 // issues relating to IPv6, but shouldn't otherwise be needed. Be sure to file
 // bugs if something isn't working properly in the presence of IPv6. This flag
@@ -384,9 +376,6 @@
 // Disables syncing browser data to a Google Account.
 const char kDisableSync[]                   = "disable-sync";
 
-// Disables sync/API based session sync implementation (back to legacy).
-const char kDisableSyncSessionsV2[] = "disable-sync-sessions-v2";
-
 // Disable synced notifications.
 const char kDisableSyncSyncedNotifications[] =
     "disable-sync-synced-notifications";
@@ -398,9 +387,6 @@
 // --disable-synctypes='Typed URLs, Bookmarks, Autofill Profiles'
 const char kDisableSyncTypes[]              = "disable-sync-types";
 
-// Disables TLS Channel ID extension.
-const char kDisableTLSChannelID[]           = "disable-tls-channel-id";
-
 // Disables some security measures when accessing user media devices like
 // webcams and microphones, especially on non-HTTPS pages.
 const char kDisableUserMediaSecurity[]      = "disable-user-media-security";
@@ -435,6 +421,11 @@
 // Overrides the path of Easy Unlock component app.
 extern const char kEasyUnlockAppPath[]      = "easy-unlock-app-path";
 
+// Enables the notifications for the custodian of a supervised user when the
+// supervised user sends an access request.
+extern const char kEnableAccessRequestNotifications[] =
+    "enable-access-request-notifications";
+
 // Enables the <adview> tag in packaged apps.
 const char kEnableAdview[]                  = "enable-adview";
 
@@ -457,11 +448,6 @@
 // HttpAuthHandlerNegotiate::CreateSPN for more background.
 const char kEnableAuthNegotiatePort[]       = "enable-auth-negotiate-port";
 
-// Enables the pre- and auto-login features. When a user signs in to sync, the
-// browser's cookie jar is pre-filled with GAIA cookies. When the user visits a
-// GAIA login page, an info bar can help the user login.
-const char kEnableAutologin[]               = "enable-autologin";
-
 // Enables the Automation extension API.
 // TODO(dtseng): Remove once API enabled for stable channel.
 const char kEnableAutomationAPI[]           = "enable-automation-api";
@@ -514,10 +500,6 @@
 // crbug.com/142458 .
 const char kEnableFastUnload[]         = "enable-fast-unload";
 
-// Enables the pure web-based flow for sign in on first run/NTP/wrench menu/
-// settings page.
-const char kEnableWebBasedSignin[]            = "enable-web-based-signin";
-
 // Enables IPv6 support, even if probes suggest that it may not be fully
 // supported. Some probes may require internet connections, and this flag will
 // allow support independent of application testing. This flag overrides
@@ -717,10 +699,6 @@
 // loaded. It is useful to tell the difference for tracking purposes.
 const char kFastStart[]            = "fast-start";
 
-// Allows displaying the list of existing profiles in the avatar bubble for
-// fast switching between profiles.
-const char kFastUserSwitching[]             = "fast-user-switching";
-
 // These two flags are added around the switches about:flags adds to the
 // command line. This is useful to see which switches were added by about:flags
 // on about:version. They don't have any effect.
@@ -751,9 +729,6 @@
 // Specifies an alternate URL to use for speaking to Google. Useful for testing.
 const char kGoogleBaseURL[]                 = "google-base-url";
 
-// Enables using GAIA information to populate profile name and icon.
-const char kGoogleProfileInfo[]             = "google-profile-info";
-
 // Specifies a custom name for the GSSAPI library to load.
 const char kGSSAPILibraryName[]             = "gssapi-library-name";
 
@@ -892,16 +867,6 @@
 // Intended primarily for use with --log-net-log.
 const char kNetLogLevel[]                   = "net-log-level";
 
-// Use new avatar menu. When combined with new-profile-management, it simply
-// shows the new profile management avatar menu. Otherwise it shows a redesigned
-// avatar menu with the same functionality as the old one, plus a tutorial card
-// at the top prompting the user to try out the new profile management UI.
-const char kNewAvatarMenu[]                 = "new-avatar-menu";
-
-// Use new profile management system, including profile sign-out and new
-// choosers.
-const char kNewProfileManagement[]          = "new-profile-management";
-
 // Disables the default browser check. Useful for UI/browser tests where we
 // want to avoid having the default browser info-bar displayed.
 const char kNoDefaultBrowserCheck[]         = "no-default-browser-check";
@@ -1143,9 +1108,6 @@
 const char kSbDisableSideEffectFreeWhitelist[] =
     "safebrowsing-disable-side-effect-free-whitelist";
 
-// URL to send safebrowsing download feedback reports to.
-const char kSbDownloadFeedbackURL[] = "safebrowsing-download-feedback-url";
-
 // Causes the process to run as a service process.
 const char kServiceProcess[]                = "service";
 
@@ -1330,9 +1292,6 @@
 #endif
 
 #if defined(OS_ANDROID)
-// Disables the app banner <meta> tag.
-const char kDisableAppBanners[]              = "disable-app-banners";
-
 // Disables support for playing videos on Chromecast devices.
 const char kDisableCast[]                    = "disable-cast";
 
@@ -1452,7 +1411,7 @@
 const char kWaitForMutex[]                  = "wait-for-mutex";
 
 // Indicates that chrome was launched to service a search request in Windows 8.
-const char kWindows8Search[]           = "windows8-search";
+const char kWindows8Search[]                = "windows8-search";
 #endif
 
 #if defined(ENABLE_FULL_PRINTING) && !defined(OFFICIAL_BUILD)
@@ -1463,10 +1422,7 @@
 #ifndef NDEBUG
 // Enables overriding the path of file manager extension.
 const char kFileManagerExtensionPath[]      = "filemgr-ext-path";
-
-// Enables overriding the path of image loader extension.
-const char kImageLoaderExtensionPath[]      = "image-loader-ext-path";
-#endif  // NDEBUG
+#endif
 
 // Controls print preview in the browser process.
 #if defined(GOOGLE_CHROME_BUILD)
diff --git a/chrome/common/chrome_switches.h b/chrome/common/chrome_switches.h
index 358d597..5512234 100644
--- a/chrome/common/chrome_switches.h
+++ b/chrome/common/chrome_switches.h
@@ -62,7 +62,6 @@
 extern const char kCloudPrintFileType[];
 extern const char kCloudPrintPrintTicket[];
 extern const char kCloudPrintSetupProxy[];
-extern const char kCloudPrintServiceURL[];
 extern const char kComponentUpdater[];
 extern const char kConflictingModulesCheck[];
 extern const char kCrashOnHangThreads[];
@@ -91,7 +90,6 @@
 extern const char kDisableExtensionsResourceWhitelist[];
 extern const char kDisableExtensions[];
 extern const char kDisableFullscreenWithinTab[];
-extern const char kDisableInfoBars[];
 extern const char kDisableIPv6[];
 extern const char kDisableMinimizeOnSecondLauncherItemClick[];
 extern const char kDisableNTPOtherSessionsMenu[];
@@ -114,10 +112,8 @@
 extern const char kDisableScriptedPrintThrottling[];
 extern const char kDisableSpdy31[];
 extern const char kDisableSync[];
-extern const char kDisableSyncSessionsV2[];
 extern const char kDisableSyncSyncedNotifications[];
 extern const char kDisableSyncTypes[];
-extern const char kDisableTLSChannelID[];
 extern const char kDisableUserMediaSecurity[];
 extern const char kDisableWebResources[];
 extern const char kDisableZeroBrowsersOpenForTests[];
@@ -127,13 +123,13 @@
 extern const char kDnsPrefetchDisable[];
 extern const char kDumpBrowserHistograms[];
 extern const char kEasyUnlockAppPath[];
+extern const char kEnableAccessRequestNotifications[];
 extern const char kEnableAdview[];
 extern const char kEnableAppList[];
 extern const char kEnableAppWindowControls[];
 extern const char kEnableAppsShowOnFirstPaint[];
 extern const char kEnableAsyncDns[];
 extern const char kEnableAuthNegotiatePort[];
-extern const char kEnableAutologin[];
 extern const char kEnableAutomationAPI[];
 extern const char kEnableBenchmarking[];
 extern const char kEnableClientHints[];
@@ -150,7 +146,6 @@
 extern const char kEnableExtensionActivityLogging[];
 extern const char kEnableExtensionActivityLogTesting[];
 extern const char kEnableFastUnload[];
-extern const char kEnableWebBasedSignin[];
 extern const char kEnableIPv6[];
 extern const char kEnableLinkableEphemeralApps[];
 extern const char kEnableManagedStorage[];
@@ -204,7 +199,6 @@
 extern const char kExtraSearchQueryParams[];
 extern const char kFakeVariationsChannel[];
 extern const char kFastStart[];
-extern const char kFastUserSwitching[];
 extern const char kFlagSwitchesBegin[];
 extern const char kFlagSwitchesEnd[];
 extern const char kFeedbackServer[];
@@ -213,7 +207,6 @@
 extern const char kForceFirstRun[];
 extern const char kForceVariationIds[];
 extern const char kGoogleBaseURL[];
-extern const char kGoogleProfileInfo[];
 extern const char kGSSAPILibraryName[];
 extern const char kHelp[];
 extern const char kHelpShort[];
@@ -248,8 +241,6 @@
 extern const char kMetricsRecordingOnly[];
 extern const char kMultiProfiles[];
 extern const char kNetLogLevel[];
-extern const char kNewAvatarMenu[];
-extern const char kNewProfileManagement[];
 extern const char kNoDefaultBrowserCheck[];
 extern const char kNoDisplayingInsecureContent[];
 extern const char kNoEvents[];
@@ -309,7 +300,6 @@
 extern const char kSbDisableDownloadProtection[];
 extern const char kSbDisableExtensionBlacklist[];
 extern const char kSbDisableSideEffectFreeWhitelist[];
-extern const char kSbDownloadFeedbackURL[];
 extern const char kServiceProcess[];
 extern const char kSilentDebuggerExtensionAPI[];
 extern const char kSilentLaunch[];
@@ -365,7 +355,6 @@
 #endif
 
 #if defined(OS_ANDROID)
-extern const char kDisableAppBanners[];
 extern const char kDisableCast[];
 extern const char kDisableNewNTP[];
 extern const char kDisableZeroSuggest[];
@@ -417,7 +406,6 @@
 
 #ifndef NDEBUG
 extern const char kFileManagerExtensionPath[];
-extern const char kImageLoaderExtensionPath[];
 #endif
 
 #if defined(GOOGLE_CHROME_BUILD)
diff --git a/chrome/common/chrome_version_info_posix.cc b/chrome/common/chrome_version_info_posix.cc
index a243b07..98aa72f 100644
--- a/chrome/common/chrome_version_info_posix.cc
+++ b/chrome/common/chrome_version_info_posix.cc
@@ -12,13 +12,8 @@
 // static
 std::string VersionInfo::GetVersionStringModifier() {
   char* env = getenv("CHROME_VERSION_EXTRA");
-  if (!env) {
-    std::string modifier;
-#if defined(USE_AURA) && defined(OS_LINUX) && !defined(OS_CHROMEOS)
-    modifier = "aura";
-#endif
-    return modifier;
-  }
+  if (!env)
+    return std::string();
   std::string modifier(env);
 
 #if defined(GOOGLE_CHROME_BUILD)
@@ -34,10 +29,6 @@
   }
 #endif
 
-#if defined(USE_AURA) && defined(OS_LINUX) && !defined(OS_CHROMEOS)
-  modifier += " aura";
-#endif
-
   return modifier;
 }
 
diff --git a/chrome/common/cloud_print/cloud_print_constants.cc b/chrome/common/cloud_print/cloud_print_constants.cc
index 7764198..e9a641e 100644
--- a/chrome/common/cloud_print/cloud_print_constants.cc
+++ b/chrome/common/cloud_print/cloud_print_constants.cc
@@ -9,7 +9,6 @@
 const char kCloudPrintUserAgent[] = "GoogleCloudPrintProxy";
 const char kChromeCloudPrintProxyHeader[] = "X-CloudPrint-Proxy: Chrome";
 const char kCloudPrintPushNotificationsSource[] = "cloudprint.google.com";
-const char kCloudPrintAuth[] = "https://www.googleapis.com/auth/cloudprint";
 
 const char kProxyIdValue[] = "proxy";
 const char kPrinterNameValue[] = "printer";
diff --git a/chrome/common/cloud_print/cloud_print_constants.h b/chrome/common/cloud_print/cloud_print_constants.h
index 8422209..864ae79 100644
--- a/chrome/common/cloud_print/cloud_print_constants.h
+++ b/chrome/common/cloud_print/cloud_print_constants.h
@@ -15,8 +15,6 @@
 extern const char kChromeCloudPrintProxyHeader[];
 // The source of cloud print notifications.
 extern const char kCloudPrintPushNotificationsSource[];
-// The cloud print OAuth2 scope.
-extern const char kCloudPrintAuth[];
 
 // Values used to register or update a printer with the cloud print service.
 extern const char kProxyIdValue[];
diff --git a/chrome/common/encrypted_media_messages_android.h b/chrome/common/encrypted_media_messages_android.h
index 7d7ea8c..c18cda5 100644
--- a/chrome/common/encrypted_media_messages_android.h
+++ b/chrome/common/encrypted_media_messages_android.h
@@ -18,10 +18,15 @@
 // Defines bitmask values used to specify supported codecs.
 // Each value represents a codec within a specific container.
 enum SupportedCodecs {
-  NO_SUPPORTED_CODECS = 0,
-  WEBM_VP8_AND_VORBIS = 1 << 0,
-  MP4_AAC = 1 << 1,
-  MP4_AVC1 = 1 << 2,
+  NO_CODECS = 0,
+  WEBM_VORBIS = 1 << 0,
+  WEBM_VP8 = 1 << 1,
+  WEBM_CODECS = (WEBM_VORBIS | WEBM_VP8),
+  MP4_AAC = 1 << 2,
+  MP4_AVC1 = 1 << 3,
+  MP4_CODECS = (MP4_AAC | MP4_AVC1),
+  ALL_CODECS = (WEBM_CODECS | MP4_CODECS),
+  INVALID_CODECS = ~ALL_CODECS
 };
 
 }  // namespace android
@@ -36,15 +41,15 @@
 IPC_STRUCT_BEGIN(SupportedKeySystemRequest)
   IPC_STRUCT_MEMBER(std::string, key_system)
   IPC_STRUCT_MEMBER(android::SupportedCodecs, codecs,
-                    android::NO_SUPPORTED_CODECS)
+                    android::NO_CODECS)
 IPC_STRUCT_END()
 
 IPC_STRUCT_BEGIN(SupportedKeySystemResponse)
   IPC_STRUCT_MEMBER(std::string, key_system)
   IPC_STRUCT_MEMBER(android::SupportedCodecs, compositing_codecs,
-                    android::NO_SUPPORTED_CODECS)
+                    android::NO_CODECS)
   IPC_STRUCT_MEMBER(android::SupportedCodecs, non_compositing_codecs,
-                    android::NO_SUPPORTED_CODECS)
+                    android::NO_CODECS)
 IPC_STRUCT_END()
 
 // Messages sent from the renderer to the browser.
diff --git a/chrome/common/extensions/ad_injection_constants.cc b/chrome/common/extensions/ad_injection_constants.cc
new file mode 100644
index 0000000..6cdea97
--- /dev/null
+++ b/chrome/common/extensions/ad_injection_constants.cc
@@ -0,0 +1,39 @@
+// 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.
+
+#include "chrome/common/extensions/ad_injection_constants.h"
+
+#include "base/strings/string_util.h"
+
+namespace extensions {
+namespace ad_injection_constants {
+
+namespace keys {
+
+const char kType[] = "type";
+const char kChildren[] = "children";
+const char kSrc[] = "src";
+const char kHref[] = "href";
+
+}  // namespace keys
+
+const char kHtmlIframeSrcApiName[] = "HTMLIFrameElement.src";
+const char kHtmlEmbedSrcApiName[] = "HTMLEmbedElement.src";
+const char kAppendChildApiSuffix[] = "appendChild";
+
+// The maximum number of children to check when we examine a newly-added
+// element.
+extern const size_t kMaximumChildrenToCheck = 10u;
+
+// The maximum depth to check when we examine a newly-added element.
+extern const size_t kMaximumDepthToCheck = 5u;
+
+bool ApiCanInjectAds(const char* api) {
+  return api == kHtmlIframeSrcApiName ||
+         api == kHtmlEmbedSrcApiName ||
+         EndsWith(api, kAppendChildApiSuffix, true /* case sensitive */);
+}
+
+}  // namespace ad_injection_constants
+}  // namespace extensions
diff --git a/chrome/common/extensions/ad_injection_constants.h b/chrome/common/extensions/ad_injection_constants.h
new file mode 100644
index 0000000..2d08393
--- /dev/null
+++ b/chrome/common/extensions/ad_injection_constants.h
@@ -0,0 +1,37 @@
+// 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.
+
+#ifndef CHROME_COMMON_EXTENSIONS_AD_INJECTION_CONSTANTS_H_
+#define CHROME_COMMON_EXTENSIONS_AD_INJECTION_CONSTANTS_H_
+
+#include "base/basictypes.h"
+
+namespace extensions {
+namespace ad_injection_constants {
+
+// The keys used when serializing arguments to activity action APIs.
+namespace keys {
+
+extern const char kType[];
+extern const char kChildren[];
+extern const char kSrc[];
+extern const char kHref[];
+
+}  // namespace keys
+
+extern const char kHtmlIframeSrcApiName[];
+extern const char kHtmlEmbedSrcApiName[];
+extern const char kAppendChildApiSuffix[];
+
+extern const size_t kMaximumChildrenToCheck;
+extern const size_t kMaximumDepthToCheck;
+
+// Returns true if the given |api| can potentially inject ads, and should
+// therefore be examined.
+bool ApiCanInjectAds(const char* api);
+
+}  // namespace ad_injection_constants
+}  // namespace extensions
+
+#endif  // CHROME_COMMON_EXTENSIONS_AD_INJECTION_CONSTANTS_H_
diff --git a/chrome/common/extensions/api/_api_features.json b/chrome/common/extensions/api/_api_features.json
index 7e8481a..731b4f2 100644
--- a/chrome/common/extensions/api/_api_features.json
+++ b/chrome/common/extensions/api/_api_features.json
@@ -111,6 +111,10 @@
     "dependencies": ["manifest:bluetooth"],
     "contexts": ["blessed_extension"]
   },
+  "bluetoothLowEnergy": {
+    "dependencies": ["manifest:bluetooth"],
+    "contexts": ["blessed_extension"]
+  },
   "bluetoothPrivate": {
     "dependencies": ["permission:bluetoothPrivate"],
     "contexts": ["blessed_extension"]
@@ -150,12 +154,11 @@
     "channel": "stable",
     "dependencies": ["manifest:browser_action"],
     "whitelist": [
-      "enhhojjnijigcajfphajepfemndkmdlo",  // Dev
-      "pkedcjkdefgpdelpbcmbmeomcjbeemfm",  // Trusted Tester
-      "fmfcbgogabcbclcofgocippekhfcmgfj",  // Staging
-      "hfaagokkkhdbgiakmmlclaapfelnkoah",  // Canary
-      "F155646B5D1CA545F7E1E4E20D573DFDD44C2540",  // Trusted Tester (public)
-      "16CA7A47AAE4BE49B1E75A6B960C3875E945B264"   // Release
+      "63ED55E43214C211F82122ED56407FF1A807F2A3",  // Dev
+      "FA01E0B81978950F2BC5A50512FD769725F57510",  // Beta
+      "B11A93E7E5B541F8010245EBDE2C74647D6C14B9",  // Canary
+      "F155646B5D1CA545F7E1E4E20D573DFDD44C2540",  // Google Cast Beta
+      "16CA7A47AAE4BE49B1E75A6B960C3875E945B264"   // Google Cast Stable
     ],
     "contexts": ["blessed_extension"]
   }],
diff --git a/chrome/common/extensions/api/_manifest_features.json b/chrome/common/extensions/api/_manifest_features.json
index 24283bf..d8d1c9e 100644
--- a/chrome/common/extensions/api/_manifest_features.json
+++ b/chrome/common/extensions/api/_manifest_features.json
@@ -72,6 +72,9 @@
     "max_manifest_version": 1
   },
   "bluetooth": {
+    // Note: The "bluetooth" manifest permission is used by both
+    // chrome.bluetooth and chrome.bluetoothLowEnergy APIs. Split this property
+    // if the two APIs get released at different dates.
     "channel": "dev",
     "extension_types": ["platform_app"]
   },
diff --git a/chrome/common/extensions/api/_permission_features.json b/chrome/common/extensions/api/_permission_features.json
index cc9a5fa..1c2e593 100644
--- a/chrome/common/extensions/api/_permission_features.json
+++ b/chrome/common/extensions/api/_permission_features.json
@@ -26,7 +26,7 @@
   "accessibilityPrivate": {
     "channel": "stable",
     "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
-    "location": "component"
+    "whitelist": [ "2FCBCE08B34CCA1728A85F1EFBD9A34DD2558B2E" ]
   },
   "activeTab": {
     "channel": "stable",
@@ -164,11 +164,10 @@
     "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
     "whitelist": [
       "63ED55E43214C211F82122ED56407FF1A807F2A3",  // Dev
-      "226CF815E39A363090A1E547D53063472B8279FA",  // Trusted Tester
-      "FA01E0B81978950F2BC5A50512FD769725F57510",  // Staging
+      "FA01E0B81978950F2BC5A50512FD769725F57510",  // Beta
       "B11A93E7E5B541F8010245EBDE2C74647D6C14B9",  // Canary
-      "F155646B5D1CA545F7E1E4E20D573DFDD44C2540",  // Trusted Tester (public)
-      "16CA7A47AAE4BE49B1E75A6B960C3875E945B264"   // Release
+      "F155646B5D1CA545F7E1E4E20D573DFDD44C2540",  // Google Cast Beta
+      "16CA7A47AAE4BE49B1E75A6B960C3875E945B264"   // Google Cast Stable
     ]
   },
   "cast.streaming": [{
@@ -179,11 +178,10 @@
     "extension_types": ["extension"],
     "whitelist": [
       "63ED55E43214C211F82122ED56407FF1A807F2A3",  // Dev
-      "226CF815E39A363090A1E547D53063472B8279FA",  // Trusted Tester
-      "FA01E0B81978950F2BC5A50512FD769725F57510",  // Staging
+      "FA01E0B81978950F2BC5A50512FD769725F57510",  // Beta
       "B11A93E7E5B541F8010245EBDE2C74647D6C14B9",  // Canary
-      "F155646B5D1CA545F7E1E4E20D573DFDD44C2540",  // Trusted Tester (public)
-      "16CA7A47AAE4BE49B1E75A6B960C3875E945B264"   // Release
+      "F155646B5D1CA545F7E1E4E20D573DFDD44C2540",  // Google Cast Beta
+      "16CA7A47AAE4BE49B1E75A6B960C3875E945B264"   // Google Cast Stable
     ]
   }],
   "chromePrivate": {
@@ -206,14 +204,14 @@
       "307E96539209F95A1A8740C713E6998A73657D96",  // http://crbug.com/329690
       "A291B26E088FA6BA53FFD72F0916F06EBA7C585A",  // http://crbug.com/341258
       "D7986543275120831B39EF28D1327552FC343960",  // http://crbug.com/329088
+      // http://crbug.com/343701
       // TODO(tbarzic): Remove the following six when http://crbug.com/346572
       // gets fixed.
-      "63ED55E43214C211F82122ED56407FF1A807F2A3",  // http://crbug.com/343701
-      "226CF815E39A363090A1E547D53063472B8279FA",  // http://crbug.com/343701
-      "FA01E0B81978950F2BC5A50512FD769725F57510",  // http://crbug.com/343701
-      "B11A93E7E5B541F8010245EBDE2C74647D6C14B9",  // http://crbug.com/343701
-      "F155646B5D1CA545F7E1E4E20D573DFDD44C2540",  // http://crbug.com/343701
-      "16CA7A47AAE4BE49B1E75A6B960C3875E945B264"   // http://crbug.com/343701
+      "63ED55E43214C211F82122ED56407FF1A807F2A3",  // Dev
+      "FA01E0B81978950F2BC5A50512FD769725F57510",  // Beta
+      "B11A93E7E5B541F8010245EBDE2C74647D6C14B9",  // Canary
+      "F155646B5D1CA545F7E1E4E20D573DFDD44C2540",  // Google Cast Beta
+      "16CA7A47AAE4BE49B1E75A6B960C3875E945B264"   // Google Cast Stable
     ]
   },
   "clipboardRead": {
@@ -354,11 +352,11 @@
     "channel": "stable",
     "extension_types": ["extension"],
     "whitelist": [
-      "226CF815E39A363090A1E547D53063472B8279FA",  // Trusted Tester
-      "FA01E0B81978950F2BC5A50512FD769725F57510",  // Staging
+      "63ED55E43214C211F82122ED56407FF1A807F2A3",  // Dev
+      "FA01E0B81978950F2BC5A50512FD769725F57510",  // Beta
       "B11A93E7E5B541F8010245EBDE2C74647D6C14B9",  // Canary
-      "F155646B5D1CA545F7E1E4E20D573DFDD44C2540",  // Trusted Tester (public)
-      "16CA7A47AAE4BE49B1E75A6B960C3875E945B264"   // Release
+      "F155646B5D1CA545F7E1E4E20D573DFDD44C2540",  // Google Cast Beta
+      "16CA7A47AAE4BE49B1E75A6B960C3875E945B264"   // Google Cast Stable
     ]
   },
   "enterprise.platformKeysPrivate": {
@@ -629,11 +627,10 @@
     "extension_types": ["extension"],
     "whitelist": [
       "63ED55E43214C211F82122ED56407FF1A807F2A3",  // Dev
-      "226CF815E39A363090A1E547D53063472B8279FA",  // Trusted Tester
-      "FA01E0B81978950F2BC5A50512FD769725F57510",  // Staging
+      "FA01E0B81978950F2BC5A50512FD769725F57510",  // Beta
       "B11A93E7E5B541F8010245EBDE2C74647D6C14B9",  // Canary
-      "F155646B5D1CA545F7E1E4E20D573DFDD44C2540",  // Trusted Tester (public)
-      "16CA7A47AAE4BE49B1E75A6B960C3875E945B264"   // Release
+      "F155646B5D1CA545F7E1E4E20D573DFDD44C2540",  // Google Cast Beta
+      "16CA7A47AAE4BE49B1E75A6B960C3875E945B264"   // Google Cast Stable
     ]
   },
   "musicManagerPrivate": {
@@ -661,11 +658,11 @@
       "8C3741E3AF0B93B6E8E0DDD499BB0B74839EA578",  // http://crbug.com/234235
       "E703483CEF33DEC18B4B6DD84B5C776FB9182BDB",  // http://crbug.com/234235
       "307E96539209F95A1A8740C713E6998A73657D96",  // http://crbug.com/329690
-      "226CF815E39A363090A1E547D53063472B8279FA",  // Trusted Tester
-      "FA01E0B81978950F2BC5A50512FD769725F57510",  // Staging
+      "63ED55E43214C211F82122ED56407FF1A807F2A3",  // Dev
+      "FA01E0B81978950F2BC5A50512FD769725F57510",  // Beta
       "B11A93E7E5B541F8010245EBDE2C74647D6C14B9",  // Canary
-      "F155646B5D1CA545F7E1E4E20D573DFDD44C2540",  // Trusted Tester (public)
-      "16CA7A47AAE4BE49B1E75A6B960C3875E945B264",  // Release
+      "F155646B5D1CA545F7E1E4E20D573DFDD44C2540",  // Google Cast Beta
+      "16CA7A47AAE4BE49B1E75A6B960C3875E945B264",  // Google Cast Stable
       "7AE714FFD394E073F0294CFA134C9F91DB5FBAA4",  // CCD Development
       "C7DA3A55C2355F994D3FDDAD120B426A0DF63843",  // CCD Testing
       "75E3CFFFC530582C583E4690EF97C70B9C8423B7"   // CCD Release
@@ -923,7 +920,11 @@
   "virtualKeyboardPrivate": {
     "channel": "stable",
     "whitelist": [
-      "3F50C3A83839D9C76334BCE81CDEC06174F266AF"  // System-level virtual kbd
+      "3F50C3A83839D9C76334BCE81CDEC06174F266AF",  // System-level virtual kbd
+      "06BE211D5F014BAB34BC22D9DDA09C63A81D828E",  // Official XKB virtual kbd
+      "CFBF7EE448FA48960FFDA7CEB30F7A21B26AA981",  // Official m17n virtual kbd
+      "F94EE6AB36D6C6588670B2B01EB65212D9C64E33",  // Public XKB virtual kbd
+      "3E03D9B67FDD31B2438D1CF5070573415DCB3CBA"  // Public m17n virtual kbd
     ],
     "extension_types": ["extension"]
   },
diff --git a/chrome/common/extensions/api/api.gyp b/chrome/common/extensions/api/api.gyp
index 13a1bb5..d55c20a 100644
--- a/chrome/common/extensions/api/api.gyp
+++ b/chrome/common/extensions/api/api.gyp
@@ -46,6 +46,7 @@
               'automation.idl',
               'autotest_private.idl',
               'bluetooth.idl',
+              'bluetooth_low_energy.idl',
               'bluetooth_private.json',
               'bookmark_manager_private.json',
               'bookmarks.json',
diff --git a/chrome/common/extensions/api/automation.idl b/chrome/common/extensions/api/automation.idl
index 25888b0..3b280c7 100644
--- a/chrome/common/extensions/api/automation.idl
+++ b/chrome/common/extensions/api/automation.idl
@@ -8,6 +8,13 @@
 // <em>semantic</em> structure of a page, and can be used to programmatically
 // interact with a page.
 [nocompile] namespace automation {
+  dictionary Rect {
+    long left;
+    long top;
+    long width;
+    long height;
+  };
+
   // An event in the Automation tree.
   [nocompile] dictionary AutomationEvent {
     // The $(ref:automation.AutomationNode) to which the event was targeted.
@@ -35,7 +42,8 @@
     // The state of this node, e.g. {pressed": true, "inactive": true} etc.
     object state;
 
-    // TODO(aboxhall): Rect location;
+    // The rendered location (as a bounding box) of this node within the frame.
+    Rect location;
 
     // A collection of this node's other attributes.
     // TODO(aboxhall): Create and use combined list of attributes from
@@ -61,15 +69,20 @@
     static void setSelection(long startIndex, long endIndex);
 
     // Events.
-    static void addEventListener(DOMString eventType,
-                                 AutomationListener listener,
-                                 bool capture);
-    static void removeEventListener(AutomationListener listener);
+    static void addEventListener(
+        DOMString eventType, AutomationListener listener, bool capture);
+    static void removeEventListener(
+        DOMString eventType, AutomationListener listener, bool capture);
   };
 
   // The automation tree for a single page.
   [nocompile] dictionary AutomationTree {
     AutomationNode root;
+
+    static void addEventListener(
+        DOMString eventType, AutomationListener listener, bool capture);
+    static void removeEventListener(
+        DOMString eventType, AutomationListener listener, bool capture);
   };
 
   // Called when the <code>AutomationTree</code> for the page is available.
@@ -77,7 +90,10 @@
 
   interface Functions {
     // Get the automation tree for the current tab, enabling automation if
-    // necessary.
+    // necessary. Returns a tree with a placeholder root node; listen for
+    // the "load_complete" event to get a notification that the tree has fully
+    // loaded (the previous root node reference will stop working at or before
+    // this point).
     [nocompile] static void getTree(RootCallback callback);
   };
 };
diff --git a/chrome/common/extensions/api/automation_internal.idl b/chrome/common/extensions/api/automation_internal.idl
index 28bc8eb..dbdb91b 100644
--- a/chrome/common/extensions/api/automation_internal.idl
+++ b/chrome/common/extensions/api/automation_internal.idl
@@ -6,6 +6,13 @@
 // essentially a translation of the internal accessibility tree update system
 // into an extension API.
 namespace automationInternal {
+  dictionary Rect {
+    long left;
+    long top;
+    long width;
+    long height;
+  };
+
   // A compact representation of the accessibility information for a
   // single web object, in a form that can be serialized and sent from
   // one process to another.
@@ -14,7 +21,8 @@
     long id;
     DOMString role;
     object state;
-    // TODO(aboxhall): include location data;
+    Rect location;
+
     object? boolAttributes;
     object? floatAttributes;
     object? htmlAttributes;
@@ -34,6 +42,9 @@
     // The routing id of the web contents that this update is for.
     long routingID;
 
+    // ID of the node that the event applies to.
+    long targetID;
+
     // The type of event that this update represents.
     DOMString eventType;
 
diff --git a/chrome/common/extensions/api/bluetooth_low_energy.idl b/chrome/common/extensions/api/bluetooth_low_energy.idl
new file mode 100644
index 0000000..4b2d15e
--- /dev/null
+++ b/chrome/common/extensions/api/bluetooth_low_energy.idl
@@ -0,0 +1,228 @@
+// 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.
+
+// The <code>chrome.bluetoothLowEnergy</code> API is used to communicate with
+// Bluetooth Smart (Low Energy) devices.
+namespace bluetoothLowEnergy {
+  // Values representing the possible properties of a characteristic.
+  enum CharacteristicProperty {broadcast, read, writeWithoutResponse, write,
+                               notify, indicate, authenticatedSignedWrites,
+                               extendedProperties, reliableWrite,
+                               writeableAuxiliaries};
+
+  // Represents a peripheral's Bluetooth GATT Service, a collection of
+  // characteristics and relationships to other services that encapsulate
+  // the behavior of part of a device.
+  dictionary Service {
+    // The UUID of the service, e.g. 0000180d-0000-1000-8000-00805f9b34fb.
+    DOMString uuid;
+
+    // Indicates whether the type of this service is primary or secondary.
+    boolean isPrimary;
+
+    // Indicates whether this service represents a local service hosted by the
+    // application and available to other peripherals, or a remote service
+    // hosted and received from a remote peripheral.
+    boolean isLocal;
+
+    // Returns the identifier assigned to this service. Use the instance ID to
+    // distinguish between services from a peripheral with the same UUID and
+    // to make function calls that take in a service identifier. Present, if
+    // this instance represents a remote service.
+    DOMString? instanceId;
+
+    // The remote peripheral that the GATT service belongs to. Present, if this
+    // instance represents a remote service.
+    bluetooth.Device? device;
+  };
+
+  // Represents a GATT characteristic, which is a basic data element that
+  // provides further information about a peripheral's service.
+  dictionary Characteristic {
+    // The UUID of the characteristic, e.g.
+    // 00002a37-0000-1000-8000-00805f9b34fb.
+    DOMString uuid;
+
+    // Indicates whether this characteristic represents a local characteristic
+    // hosted by the application and available to other peripherals, or a remote
+    // characteristic hosted and received from a remote peripheral.
+    boolean isLocal;
+
+    // The GATT service this characteristic belongs to.
+    Service service;
+
+    // The properties of this characteristic.
+    CharacteristicProperty[] properties;
+
+    // Returns the identifier assigned to this characteristic. Use the instance
+    // ID to distinguish between characteristics from a peripheral with the same
+    // UUID and to make function calls that take in a characteristic identifier.
+    // Present, if this instance represents a remote characteristic.
+    DOMString? instanceId;
+
+    // The currently cached characteristic value. This value gets updated when
+    // the value of the characteristic is read, written, or updated via a
+    // notification or indication. For local characteristics, this is the value
+    // that will be returned upon requests from remote peripherals by default.
+    ArrayBuffer? value;
+  };
+
+  // Represents a GATT characteristic descriptor, which provides further
+  // information about a characteristic's value.
+  dictionary Descriptor {
+    // The UUID of the characteristic descriptor, e.g.
+    // 00002902-0000-1000-8000-00805f9b34fb.
+    DOMString uuid;
+
+    // Indicates whether this descriptor represents a local descriptor
+    // hosted by the application and available to other peripherals, or a remote
+    // descriptor hosted and received from a remote peripheral.
+    boolean isLocal;
+
+    // The GATT characteristic this descriptor belongs to.
+    Characteristic characteristic;
+
+    // Returns the identifier assigned to this descriptor. Use the instance ID
+    // to distinguish between descriptors from a peripheral with the same UUID
+    // and to make function calls that take in a descriptor identifier. Present,
+    // if this instance represents a remote characteristic.
+    DOMString? instanceId;
+
+    // The currently cached descriptor value. This value gets updated when
+    // the value of the descriptor is read or written. For local descriptors,
+    // this is the value that will be returned upon requests from remote
+    // peripherals by default.
+    ArrayBuffer? value;
+  };
+
+  callback CharacteristicCallback = void(Characteristic result);
+  callback CharacteristicsCallback = void(Characteristic[] result);
+  callback DescriptorCallback = void(Descriptor result);
+  callback DescriptorsCallback = void(Descriptor[] result);
+  callback ResultCallback = void();
+  callback ServiceCallback = void(Service result);
+  callback ServicesCallback = void(Service[] result);
+
+  // These functions all report failures via chrome.runtime.lastError.
+  interface Functions {
+    // Get the GATT service with the given instance ID.
+    // |serviceId| : The instance ID of the requested GATT service.
+    // |callback| : Called with the requested Service object.
+    static void getService(DOMString serviceId, ServiceCallback callback);
+
+    // Get all the GATT services that were discovered on the remote device with
+    // the given device address.
+    // |deviceAddress| : The Bluetooth Address of the remote device whose GATT
+    // services should be returned.
+    // |callback| : Called with the list of requested Service objects.
+    static void getServices(DOMString deviceAddress, ServicesCallback callback);
+
+    // Get the GATT characteristic with the given instance ID that belongs to
+    // the given GATT service, if the characteristic exists.
+    // |characteristicId| : The instance ID of the requested GATT
+    // characteristic.
+    // |callback| : Called with the requested Characteristic object.
+    static void getCharacteristic(DOMString characteristicId,
+                                  CharacteristicCallback callback);
+
+    // Get a list of all discovered GATT characteristics that belong to the
+    // given service.
+    // |serviceId| : The instance ID of the GATT service whose characteristics
+    // should be returned.
+    // |callback| : Called with the list of characteristics that belong to the
+    // given service.
+    static void getCharacteristics(DOMString serviceId,
+                                   CharacteristicsCallback callback);
+
+    // Get a list of GATT services that are included by the given service.
+    // |serviceId| : The instance ID of the GATT service whose included
+    // services should be returned.
+    // |callback| : Called with the list of GATT services included from the
+    // given service.
+    static void getIncludedServices(DOMString serviceId,
+                                    ServicesCallback callback);
+
+    // Get the GATT characteristic descriptor with the given instance ID.
+    // |descriptorId| : The instance ID of the requested GATT characteristic
+    // descriptor.
+    // |callback| : Called with the requested Descriptor object.
+    static void getDescriptor(DOMString descriptorId,
+                              DescriptorCallback callback);
+
+    // Get a list of GATT characteristic descriptors that belong to the given
+    // characteristic.
+    // |characteristicId| : The instance ID of the GATT characteristic whose
+    // descriptors should be returned.
+    // |callback| : Called with the list of descriptors that belong to the given
+    // characteristic.
+    static void getDescriptors(DOMString characteristicId,
+                               DescriptorsCallback callback);
+
+    // Retrieve the value of a specified characteristic from a remote
+    // peripheral. This function will fail if the characteristic is local.
+    // |characteristicId| : The instance ID of the GATT characteristic whose
+    // value should be read from the remote device.
+    // |callback| : Called with the Characteristic object whose value was
+    // requested. The <code>value</code> field of the returned Characteristic
+    // object contains the result of the read request.
+    static void readCharacteristicValue(DOMString characteristicId,
+                                        CharacteristicCallback callback);
+
+    // Write the value of a specified characteristic from a remote peripheral.
+    // This function will fail if the characteristic is local.
+    // |characteristicId| : The instance ID of the GATT characteristic whose
+    // value should be written to.
+    // |value| : The value that should be sent to the remote characteristic as
+    // part of the write request.
+    // |callback| : Called when the write request has completed.
+    static void writeCharacteristicValue(DOMString characteristicId,
+                                         ArrayBuffer value,
+                                         ResultCallback callback);
+
+    // Retrieve the value of a specified characteristic descriptor from a remote
+    // peripheral. This function will fail if the descriptor is local.
+    // |descriptorId| : The instance ID of the GATT characteristic descriptor
+    // whose value should be read from the remote device.
+    // |callback| : Called with the Descriptor object whose value was requested.
+    // The <code>value</code> field of the returned Descriptor object contains
+    // the result of the read request.
+    static void readDescriptorValue(DOMString descriptorId,
+                                    DescriptorCallback callback);
+
+    // Write the value of a specified characteristic descriptor from a remote
+    // peripheral. This function will fail if the descriptor is local.
+    // |descriptorId| : The instance ID of the GATT characteristic descriptor
+    // whose value should be written to.
+    // |value| : The value that should be sent to the remote descriptor as part
+    // of the write request.
+    // |callback| : Called when the write request has completed.
+    static void writeDescriptorValue(DOMString descriptorId,
+                                     ArrayBuffer value,
+                                     ResultCallback callback);
+  };
+
+  interface Events {
+    // Fired whan a new GATT service has been discovered on a remote device.
+    // |service| : The GATT service that was added.
+    static void onServiceAdded(Service service);
+
+    // Fired when the state of a remote GATT service changes. This involves any
+    // characteristics and/or descriptors that get added or removed from the
+    // service, as well as "ServiceChanged" notifications from the remote
+    // device.
+    // |service| : The GATT service whose state has changed.
+    static void onServiceChanged(Service service);
+
+    // Fired when a GATT service that was previously discovered on a remote
+    // device has been removed.
+    // |service| : The GATT service that was removed.
+    static void onServiceRemoved(Service service);
+
+    // Fired when the value of a remote GATT characteristic changes, either as
+    // a result of a read or write request, or a value change notification or
+    // indication.
+    // |characteristic| : The GATT characteristic whose value has changed.
+    static void onCharacteristicValueChanged(Characteristic characteristic);
+  };
+};
diff --git a/chrome/common/extensions/api/bookmark_manager_private.json b/chrome/common/extensions/api/bookmark_manager_private.json
index 87cba9f..a965d17 100644
--- a/chrome/common/extensions/api/bookmark_manager_private.json
+++ b/chrome/common/extensions/api/bookmark_manager_private.json
@@ -6,11 +6,9 @@
   {
     "namespace": "bookmarkManagerPrivate",
     "description": "none",
-    "nodoc": true,
     "types": [
       {
         "id": "BookmarkNodeDataElement",
-        "nodoc": true,
         "type": "object",
         "properties": {
           "id": {
@@ -36,7 +34,6 @@
       },
       {
         "id": "BookmarkNodeData",
-        "nodoc": true,
         "type": "object",
         "description": "Information about the drag and drop data for use with drag and drop events.",
         "properties": {
@@ -46,6 +43,12 @@
             "items": {"$ref": "BookmarkNodeDataElement"}
           }
         }
+      },
+      {
+        "id": "MetaInfoFields",
+        "type": "object",
+        "description": "Collection of meta info fields.",
+        "additionalProperties": {"type": "string"}
       }
     ],
     "functions": [
@@ -53,7 +56,6 @@
         "name": "copy",
         "type": "function",
         "description": "Copies the given bookmarks into the clipboard",
-        "nodoc": "true",
         "parameters": [
           {
             "name": "idList",
@@ -69,7 +71,6 @@
         "name": "cut",
         "type": "function",
         "description": "Cuts the given bookmarks into the clipboard",
-        "nodoc": "true",
         "parameters": [
           {
             "name": "idList",
@@ -85,7 +86,6 @@
         "name": "paste",
         "type": "function",
         "description": "Pastes bookmarks from the clipboard into the parent folder after the last selected node",
-        "nodoc": "true",
         "parameters": [
           {"type": "string", "name": "parentId"},
           {
@@ -103,7 +103,6 @@
         "name": "canPaste",
         "type": "function",
         "description": "Whether there are any bookmarks that can be pasted",
-        "nodoc": "true",
         "parameters": [
           {"type": "string", "name": "parentId", "description": "The ID of the folder to paste into"},
           {"type": "function", "name": "callback", "parameters": [
@@ -115,7 +114,6 @@
         "name": "sortChildren",
         "type": "function",
         "description": "Sorts the children of a given folder",
-        "nodoc": "true",
         "parameters": [
           {"type": "string", "name": "parentId", "description": "The ID of the folder to sort the children of"}
         ]
@@ -124,7 +122,6 @@
         "name": "getStrings",
         "type": "function",
         "description": "Gets the i18n strings for the bookmark manager",
-        "nodoc": "true",
         "parameters": [
           {
             "type": "function",
@@ -143,7 +140,6 @@
         "name": "startDrag",
         "type": "function",
         "description": "Begins dragging a set of bookmarks",
-        "nodoc": "true",
         "parameters": [
           {
             "name": "idList",
@@ -163,7 +159,6 @@
         "name": "drop",
         "type": "function",
         "description": "Performs the drop action of the drag and drop session",
-        "nodoc": "true",
         "parameters": [
           {
             "name": "parentId",
@@ -183,7 +178,6 @@
         "name": "getSubtree",
         "type": "function",
         "description": "Retrieves a bookmark hierarchy from the given node.  If the node id is empty, it is the full tree.  If foldersOnly is true, it will only return folders, not actual bookmarks.",
-        "nodoc": "true",
         "parameters": [
           {
             "name": "id",
@@ -208,7 +202,6 @@
         "name": "canEdit",
         "type": "function",
         "description": "Whether bookmarks can be modified",
-        "nodoc": "true",
         "parameters": [
           {"type": "function", "name": "callback", "parameters": [
             {"name": "result", "type": "boolean"}
@@ -219,7 +212,6 @@
         "name": "canOpenNewWindows",
         "type": "function",
         "description": "Whether bookmarks can be opened in new windows",
-        "nodoc": "true",
         "parameters": [
           {"type": "function", "name": "callback", "parameters": [
             {"name": "result", "type": "boolean"}
@@ -230,7 +222,6 @@
         "name": "removeTrees",
         "type": "function",
         "description": "Recursively removes list of bookmarks nodes.",
-        "nodoc": "true",
         "parameters": [
           {
             "name": "idList",
@@ -246,14 +237,38 @@
         "name": "recordLaunch",
         "type": "function",
         "description": "",
-        "nodoc": "true",
         "parameters": []
       },
       {
+        "name": "createWithMetaInfo",
+        "type": "function",
+        "description": "Mimics the functionality of bookmarks.create, but will additionally set the given meta info fields.",
+        "parameters": [
+          {
+            "name": "bookmark",
+            "$ref": "bookmarks.CreateDetails"
+          },
+          {
+            "name": "metaInfo",
+            "$ref": "MetaInfoFields"
+          },
+          {
+            "type": "function",
+            "name": "callback",
+            "optional": true,
+            "parameters": [
+              {
+                "name": "result",
+                "$ref": "bookmarks.BookmarkTreeNode"
+              }
+            ]
+          }
+        ]
+      },
+      {
         "name": "getMetaInfo",
         "type": "function",
-        "description": "Gets a meta info field from a bookmark node",
-        "nodoc": "true",
+        "description": "Gets meta info from a bookmark node",
         "parameters": [
           {
             "name": "id",
@@ -262,7 +277,8 @@
           },
           {
             "name": "key",
-            "description": "The key for the meta info to retrieve",
+            "description": "The key for the meta info to retrieve. If omitted, all fields are returned",
+            "optional": true,
             "type": "string"
           },
           {
@@ -271,9 +287,14 @@
             "parameters": [
               {
                 "name": "value",
-                "description": "The value of the meta info, if present",
+                "description": "If a key was given, the value of the specified field, if present. Otherwise an object containing all meta info fields for the node.",
                 "optional": true,
-                "type": "string"
+                // TODO(rfevang): Convert this to always return MetaInfoFields
+                // if the API is made public.
+                "choices": [
+                  {"type": "string"},
+                  {"$ref": "MetaInfoFields"}
+                ]
               }
             ]
           }
@@ -283,7 +304,6 @@
         "name": "setMetaInfo",
         "type": "function",
         "description": "Sets a meta info value for a bookmark node",
-        "nodoc": "true",
         "parameters": [
           {
             "name": "id",
@@ -309,24 +329,44 @@
         ]
       },
       {
+        "name": "updateMetaInfo",
+        "type": "function",
+        "description": "Updates a set of meta info values for a bookmark node.",
+        "parameters": [
+          {
+            "name": "id",
+            "description": "The id of the bookmark node to update the meta info of.",
+            "type": "string"
+          },
+          {
+            "name": "metaInfoChanges",
+            "description": "A set of meta info key/value pairs to update.",
+            "$ref": "MetaInfoFields"
+          },
+          {
+            "name": "callback",
+            "type": "function",
+            "optional": true,
+            "parameters": []
+          }
+        ]
+      },
+      {
         "name": "undo",
         "type": "function",
         "description": "Performs an undo of the last change to the bookmark model",
-        "nodoc": "true",
         "parameters": []
       },
       {
         "name": "redo",
         "type": "function",
         "description": "Performs a redo of last undone change to the bookmark model",
-        "nodoc": "true",
         "parameters": []
       },
       {
         "name": "getUndoInfo",
         "type": "function",
         "description": "Gets the information for the undo if available",
-        "nodoc": "true",
         "parameters": [
           {
             "type": "function",
@@ -348,7 +388,6 @@
         "name": "getRedoInfo",
         "type": "function",
         "description": "Gets the information for the redo if available",
-        "nodoc": "true",
         "parameters": [
           {
             "type": "function",
@@ -397,7 +436,8 @@
         "type": "function",
         "description": "Fired when the meta info of a node changes.",
         "parameters": [
-          {"name": "id", "type": "string"}
+          {"name": "id", "type": "string"},
+          {"name": "metaInfoChanges", "$ref": "MetaInfoFields"}
         ]
       }
     ]
diff --git a/chrome/common/extensions/api/bookmarks.json b/chrome/common/extensions/api/bookmarks.json
index 6166ffb..daa8baa 100644
--- a/chrome/common/extensions/api/bookmarks.json
+++ b/chrome/common/extensions/api/bookmarks.json
@@ -64,6 +64,33 @@
             "description": "An ordered list of children of this node."
           }
         }
+      },
+      {
+        "id": "CreateDetails",
+        "description": "Object passed to the create() function.",
+        "inline_doc": true,
+        "type": "object",
+        "properties": {
+          "parentId": {
+            "type": "string",
+            "serialized_type": "int64",
+            "optional": true,
+            "description": "Defaults to the Other Bookmarks folder."
+          },
+          "index": {
+            "type": "integer",
+            "minimum": 0,
+            "optional": true
+          },
+          "title": {
+            "type": "string",
+            "optional": true
+          },
+          "url": {
+            "type": "string",
+            "optional": true
+          }
+        }
       }
     ],
     "functions": [
@@ -247,29 +274,8 @@
         "description": "Creates a bookmark or folder under the specified parentId.  If url is NULL or missing, it will be a folder.",
         "parameters": [
           {
-            "type": "object",
-            "name": "bookmark",
-            "properties": {
-              "parentId": {
-                "type": "string",
-                "serialized_type": "int64",
-                "optional": true,
-                "description": "Defaults to the Other Bookmarks folder."
-              },
-              "index": {
-                "type": "integer",
-                "minimum": 0,
-                "optional": true
-              },
-              "title": {
-                "type": "string",
-                "optional": true
-              },
-              "url": {
-                "type": "string",
-                "optional": true
-              }
-            }
+            "$ref": "CreateDetails",
+            "name": "bookmark"
           },
           {
             "type": "function",
diff --git a/chrome/common/extensions/api/cast_channel.idl b/chrome/common/extensions/api/cast_channel.idl
index 6001e54..d034bf1 100644
--- a/chrome/common/extensions/api/cast_channel.idl
+++ b/chrome/common/extensions/api/cast_channel.idl
@@ -46,17 +46,41 @@
     unknown
   };
 
+  // Authentication methods that may be required to connect to a Cast receiver.
+  enum ChannelAuthType {
+    // SSL over TCP.
+    ssl,
+    // SSL over TCP with challenge and receiver signature verification.
+    ssl_verified
+  };
+
+  // Describes the information needed to connect to a Cast receiver.
+  // This replaces the prior use of cast:// and casts:// URLs.
+  dictionary ConnectInfo {
+    // The IPV4 address of the Cast receiver, e.g. '198.1.0.2'.
+    // TODO(mfoltz): Investigate whether IPV6 addresses "just work."
+    DOMString ipAddress;
+
+    // The port number to connect to, 0-65535.
+    long port;
+
+    // The authentication method required for the channel.
+    ChannelAuthType auth;
+  };
+
   // Describes the state of a channel to a Cast receiver.
   dictionary ChannelInfo {
     // Id for the channel.
     long channelId;
 
-    // The URL to the receiver.  The URL should be of the form:
-    // cast://<IP>:<port> (for an unauthenticated channel) or
-    // casts://<IP>:<port> (for an authenticated channel).  Name resolution is
-    // not currently supported for cast:// URLs, but may be added in the future.
+    // DEPRECATED: The URL to the receiver.  This field will be removed in a
+    // future release.
     DOMString url;
 
+    // Connection information that was used to establish the channel to the
+    // receiver.
+    ConnectInfo connectInfo;
+
     // The current state of the channel.
     ReadyState readyState;
       
@@ -97,13 +121,16 @@
   callback ChannelInfoCallback = void (ChannelInfo result);
 
   interface Functions {
-    // Opens a new channel to the Cast receiver specified by the URL.  Only one
-    // channel may be connected to the same URL from the same extension at a
-    // time.  If the open request is successful, the callback will be invoked
+    // Opens a new channel to the Cast receiver specified by connectInfo.  Only
+    // one channel may be connected to same receiver from the same extension at
+    // a time.  If the open request is successful, the callback will be invoked
     // with a ChannelInfo with readyState == 'connecting'.  If unsuccessful, the
     // callback will be invoked with a ChannelInfo with channel.readyState ==
     // 'closed' and channel.errorState will be set to the error condition.
-    static void open(DOMString url,
+    //
+    // TODO(mfoltz): Convert 'any' to ConnectInfo once all clients are updated
+    // to not send URLs.
+    static void open(any connectInfo,
                      ChannelInfoCallback callback);
 
     // Sends a message on the channel and invokes callback with the resulting
diff --git a/chrome/common/extensions/api/extension_api_unittest.cc b/chrome/common/extensions/api/extension_api_unittest.cc
index 4656ae5..162def5 100644
--- a/chrome/common/extensions/api/extension_api_unittest.cc
+++ b/chrome/common/extensions/api/extension_api_unittest.cc
@@ -706,7 +706,7 @@
     EXPECT_TRUE(feature->GetContexts()->count(
         Feature::BLESSED_EXTENSION_CONTEXT));
 
-    EXPECT_EQ(Feature::UNSPECIFIED_LOCATION, feature->location());
+    EXPECT_EQ(SimpleFeature::UNSPECIFIED_LOCATION, feature->location());
     EXPECT_TRUE(feature->platforms()->empty());
     EXPECT_EQ(0, feature->min_manifest_version());
     EXPECT_EQ(0, feature->max_manifest_version());
diff --git a/chrome/common/extensions/api/file_browser_private.idl b/chrome/common/extensions/api/file_browser_private.idl
index 3a3eb3d..326f84b 100644
--- a/chrome/common/extensions/api/file_browser_private.idl
+++ b/chrome/common/extensions/api/file_browser_private.idl
@@ -93,6 +93,8 @@
   scan_canceled,
   // Device is removed.
   removed,
+  // Device is hard unplugged.
+  hard_unplugged,
   // Format started.
   format_start,
   // Format succeeded.
@@ -437,9 +439,9 @@
 // |the caller has no appropriate permissions.
 callback RequestFileSystemCallback = void(optional object fileSystem);
 
-// |fileProperties| A dictionary containing properties of the requested entry.
+// |fileProperties| A dictionary containing properties of the requested entries.
 callback GetDriveEntryPropertiesCallback =
-    void(DriveEntryProperties fileProperties);
+    void(DriveEntryProperties[] entryProperties);
 
 // |localFilePaths| An array of the local file paths for the requested files,
 // one entry for each file in fileUrls.
@@ -583,11 +585,12 @@
                          boolean shouldReturnLocalPath,
                          SimpleCallback callback);
 
-  // Requests Drive file properties for a file.
-  // |fileUrl| URL of a file
+  // Requests Drive file properties for files.
+  // |fileUrls| list of URLs of files
   // |callback|
-  static void getDriveEntryProperties(DOMString fileUrl,
-                                      GetDriveEntryPropertiesCallback callback);
+  static void getDriveEntryProperties(
+      DOMString[] fileUrls,
+      GetDriveEntryPropertiesCallback callback);
 
   // Pins/unpins a Drive file in the cache.
   // |fileUrl| URL of a file to pin/unpin.
diff --git a/chrome/common/extensions/api/i18n/default_locale_handler.cc b/chrome/common/extensions/api/i18n/default_locale_handler.cc
index b8a4daa..ddb6d4f 100644
--- a/chrome/common/extensions/api/i18n/default_locale_handler.cc
+++ b/chrome/common/extensions/api/i18n/default_locale_handler.cc
@@ -15,7 +15,7 @@
 #include "extensions/common/extension_l10n_util.h"
 #include "extensions/common/manifest.h"
 #include "extensions/common/manifest_constants.h"
-#include "grit/generated_resources.h"
+#include "grit/extensions_strings.h"
 #include "ui/base/l10n/l10n_util.h"
 
 namespace extensions {
diff --git a/chrome/common/extensions/api/media_galleries.idl b/chrome/common/extensions/api/media_galleries.idl
index 0bf42d3..0955f09 100644
--- a/chrome/common/extensions/api/media_galleries.idl
+++ b/chrome/common/extensions/api/media_galleries.idl
@@ -98,6 +98,14 @@
   callback MediaFileSystemsMetadataCallback =
       void (MediaFileSystemMetadata[] metadata);
 
+  dictionary StreamInfo {
+    // Describes format of container or codec of stream, i.e. "mp3", "h264".
+    DOMString type;
+    
+    // An unfiltered string->string dictionary of tags for the stream.
+    object tags;
+  };
+
   dictionary MediaMetadata {
     // The browser sniffed mime type.
     DOMString mimeType;
@@ -136,9 +144,9 @@
     DOMString? title;
     long? track;
 
-    // A dictionary of all the metadata in the media file. This metadata is in
-    // string form, and neither the key nor value is normalized.
-    object rawTags;
+    // All the metadata in the media file. For formats with multiple streams,
+    // stream order will be preserved. Container metadata is the first element.
+    StreamInfo[] rawTags;
   };
 
   callback MediaMetadataCallback = void (MediaMetadata metadata);
diff --git a/chrome/common/extensions/docs/examples/apps/calculator/app/controller.js b/chrome/common/extensions/docs/examples/apps/calculator/app/controller.js
index f9dda50..2340249 100644
--- a/chrome/common/extensions/docs/examples/apps/calculator/app/controller.js
+++ b/chrome/common/extensions/docs/examples/apps/calculator/app/controller.js
@@ -12,8 +12,10 @@
 if (typeof chrome !== 'undefined' && chrome.app && chrome.app.runtime) {
   var showCalculatorWindow = function () {
     chrome.app.window.create('calculator.html', {
-      defaultWidth: 243, minWidth: 243, maxWidth: 243,
-      defaultHeight: 380, minHeight: 380, maxHeight: 380,
+      innerBounds: {
+        width: 243, minWidth: 243, maxWidth: 243,
+        height: 380, minHeight: 380, maxHeight: 380
+      },
       id: 'calculator'
     }, function(appWindow) {
       appWindow.contentWindow.onload = function() {
diff --git a/chrome/common/extensions/docs/server2/api_data_source.py b/chrome/common/extensions/docs/server2/api_data_source.py
index 743bb08..5727050 100644
--- a/chrome/common/extensions/docs/server2/api_data_source.py
+++ b/chrome/common/extensions/docs/server2/api_data_source.py
@@ -69,8 +69,7 @@
   '''
 
   def __init__(self,
-               api_name,
-               api_models,
+               namespace,
                availability_finder,
                json_cache,
                template_cache,
@@ -84,7 +83,7 @@
     self._api_features = features_bundle.GetAPIFeatures()
     self._template_cache = template_cache
     self._event_byname_function = event_byname_function
-    self._namespace = api_models.GetModel(api_name).Get()
+    self._namespace = namespace
 
   def _GetLink(self, link):
     ref = link if '.' in link else (self._namespace.name + '.' + link)
@@ -488,38 +487,42 @@
     '''
     if self._event_byname is None:
       self._event_byname = _GetEventByNameFromEvents(
-          self._GetSchemaModel('events'))
+          self._GetSchemaModel('events').Get())
     return self._event_byname
 
   def _GetSchemaModel(self, api_name):
-    jsc_model = self._model_cache.Get(api_name).Get()
-    if jsc_model is not None:
+    jsc_model_future = self._model_cache.Get(api_name)
+    model_future = self._api_models.GetModel(api_name)
+    def resolve():
+      jsc_model = jsc_model_future.Get()
+      if jsc_model is None:
+        jsc_model = _JSCModel(
+            model_future.Get(),
+            self._availability_finder,
+            self._json_cache,
+            self._template_cache,
+            self._features_bundle,
+            self._LoadEventByName).ToDict()
+        self._model_cache.Set(api_name, jsc_model)
       return jsc_model
+    return Future(callback=resolve)
 
-    jsc_model = _JSCModel(
-        api_name,
-        self._api_models,
-        self._availability_finder,
-        self._json_cache,
-        self._template_cache,
-        self._features_bundle,
-        self._LoadEventByName).ToDict()
-
-    self._model_cache.Set(api_name, jsc_model)
-    return jsc_model
-
-
-  def _GenerateHandlebarContext(self, handlebar_dict):
-    # Parsing samples on the preview server takes seconds and doesn't add
-    # anything. Don't do it.
-    if not IsPreviewServer():
-      handlebar_dict['samples'] = _LazySamplesGetter(
-          handlebar_dict['name'],
-          self._samples)
-    return handlebar_dict
+  def _GetImpl(self, api_name):
+    handlebar_dict_future = self._GetSchemaModel(api_name)
+    def resolve():
+      handlebar_dict = handlebar_dict_future.Get()
+      # Parsing samples on the preview server takes seconds and doesn't add
+      # anything. Don't do it.
+      if not IsPreviewServer():
+        handlebar_dict['samples'] = _LazySamplesGetter(
+            handlebar_dict['name'],
+            self._samples)
+      return handlebar_dict
+    return Future(callback=resolve)
 
   def get(self, api_name):
-    return self._GenerateHandlebarContext(self._GetSchemaModel(api_name))
+    return self._GetImpl(api_name).Get()
 
   def Cron(self):
-    return Future(value=())
+    futures = [self._GetImpl(name) for name in self._api_models.GetNames()]
+    return Collect(futures, except_pass=FileNotFoundError)
diff --git a/chrome/common/extensions/docs/server2/api_data_source_test.py b/chrome/common/extensions/docs/server2/api_data_source_test.py
index 836c4b4..478226d 100755
--- a/chrome/common/extensions/docs/server2/api_data_source_test.py
+++ b/chrome/common/extensions/docs/server2/api_data_source_test.py
@@ -79,8 +79,7 @@
     return json.loads(self._ReadLocalFile(filename))
 
   def testCreateId(self):
-    dict_ = _JSCModel('tester',
-                      self._api_models,
+    dict_ = _JSCModel(self._api_models.GetModel('tester').Get(),
                       _FakeAvailabilityFinder(),
                       self._json_cache,
                       _FakeTemplateCache(),
@@ -95,8 +94,7 @@
   # TODO(kalman): re-enable this when we have a rebase option.
   def DISABLED_testToDict(self):
     expected_json = self._LoadJSON('expected_tester.json')
-    dict_ = _JSCModel('tester',
-                      self._api_models,
+    dict_ = _JSCModel(self._api_models.GetModel('tester').Get(),
                       _FakeAvailabilityFinder(),
                       self._json_cache,
                       _FakeTemplateCache(),
@@ -119,8 +117,7 @@
       'tabs': ChannelInfo('stable', CANNED_BRANCHES[18], 18)
     }
     for api_name, availability in api_availabilities.iteritems():
-      model = _JSCModel(api_name,
-                        self._avail_api_models,
+      model = _JSCModel(self._avail_api_models.GetModel(api_name).Get(),
                         self._avail_finder,
                         self._avail_json_cache,
                         _FakeTemplateCache(),
@@ -129,8 +126,7 @@
       self.assertEquals(availability, model._GetApiAvailability())
 
   def testGetIntroList(self):
-    model = _JSCModel('tester',
-                      self._api_models,
+    model = _JSCModel(self._api_models.GetModel('tester').Get(),
                       _FakeAvailabilityFinder(),
                       self._json_cache,
                       _FakeTemplateCache(),
@@ -200,8 +196,7 @@
     return _GetEventByNameFromEvents(events)
 
   def testAddRules(self):
-    dict_ = _JSCModel('add_rules_tester',
-                      self._api_models,
+    dict_ = _JSCModel(self._api_models.GetModel('add_rules_tester').Get(),
                       _FakeAvailabilityFinder(),
                       self._json_cache,
                       _FakeTemplateCache(),
diff --git a/chrome/common/extensions/docs/server2/api_models.py b/chrome/common/extensions/docs/server2/api_models.py
index d7cacc4..bf457f4 100644
--- a/chrome/common/extensions/docs/server2/api_models.py
+++ b/chrome/common/extensions/docs/server2/api_models.py
@@ -7,7 +7,7 @@
 from compiled_file_system import SingleFile, Unicode
 from extensions_paths import API_PATHS
 from file_system import FileNotFoundError
-from future import Future
+from future import Collect, Future
 from schema_util import ProcessSchema
 from third_party.json_schema_compiler.model import Namespace, UnixName
 
@@ -16,7 +16,8 @@
 @Unicode
 def _CreateAPIModel(path, data):
   schema = ProcessSchema(path, data)[0]
-  if not schema: return None
+  if not schema:
+    raise FileNotFoundError('No schema for %s' % path)
   return Namespace(schema, schema['namespace'])
 
 
@@ -83,6 +84,10 @@
       futures[0].Get()
     return Future(callback=resolve)
 
+  def Cron(self):
+    futures = [self.GetModel(name) for name in self.GetNames()]
+    return Collect(futures, except_pass=FileNotFoundError)
+
   def IterModels(self):
     future_models = [(name, self.GetModel(name)) for name in self.GetNames()]
     for name, future_model in future_models:
diff --git a/chrome/common/extensions/docs/server2/app.yaml b/chrome/common/extensions/docs/server2/app.yaml
index 9cc0d24..0e642ed 100644
--- a/chrome/common/extensions/docs/server2/app.yaml
+++ b/chrome/common/extensions/docs/server2/app.yaml
@@ -1,5 +1,5 @@
 application: chrome-apps-doc
-version: 3-17-7
+version: 3-20-0
 runtime: python27
 api_version: 1
 threadsafe: false
diff --git a/chrome/common/extensions/docs/server2/content_provider.py b/chrome/common/extensions/docs/server2/content_provider.py
index c0138f5..d62ba4f 100644
--- a/chrome/common/extensions/docs/server2/content_provider.py
+++ b/chrome/common/extensions/docs/server2/content_provider.py
@@ -13,7 +13,7 @@
 from file_system import FileNotFoundError
 from future import Future
 from path_canonicalizer import PathCanonicalizer
-from path_util import AssertIsValid, Join, ToDirectory
+from path_util import AssertIsValid, IsDirectory, Join, ToDirectory
 from special_paths import SITE_VERIFICATION_FILE
 from third_party.handlebar import Handlebar
 from third_party.markdown import markdown
@@ -148,8 +148,12 @@
       new_path = self._AddExt(path)
       # Add a trailing / to check if it is a directory and not a file with
       # no extension.
-      if new_path is None and self.file_system.Exists(path + '/').Get():
-        new_path = self._AddExt(path + '/index')
+      if new_path is None and self.file_system.Exists(ToDirectory(path)).Get():
+        new_path = self._AddExt(Join(path, 'index'))
+        # If an index file wasn't found in this directly then we're never going
+        # to find a file.
+        if new_path is None:
+          return FileNotFoundError.RaiseInFuture('"%s" is a directory' % path)
       if new_path is not None:
         path = new_path
 
diff --git a/chrome/common/extensions/docs/server2/content_provider_test.py b/chrome/common/extensions/docs/server2/content_provider_test.py
index d2e7620..ed7783f 100755
--- a/chrome/common/extensions/docs/server2/content_provider_test.py
+++ b/chrome/common/extensions/docs/server2/content_provider_test.py
@@ -63,6 +63,7 @@
   'dir.txt': 'dir.txt content',
   'dir5.html': 'dir5.html content',
   'img.png': 'img.png content',
+  'index.html': 'index.html content',
   'read.txt': 'read.txt content',
   'redirects.json': _REDIRECTS_JSON,
   'noextension': 'noextension content',
@@ -183,6 +184,7 @@
         self._content_provider.GetContentAndType('oops').Get)
 
   def testIndexRedirect(self):
+    self._assertTemplateContent(u'index.html content', '')
     self._assertTemplateContent(u'index.html content 1', 'dir4')
     self._assertTemplateContent(u'dir5.html content', 'dir5')
     self._assertMarkdownContent(
diff --git a/chrome/common/extensions/docs/server2/cron.yaml b/chrome/common/extensions/docs/server2/cron.yaml
index ae7ef58..5285941 100644
--- a/chrome/common/extensions/docs/server2/cron.yaml
+++ b/chrome/common/extensions/docs/server2/cron.yaml
@@ -2,4 +2,4 @@
 - description: Repopulates all cached data.
   url: /_cron
   schedule: every 5 minutes
-  target: 3-17-7
+  target: 3-20-0
diff --git a/chrome/common/extensions/docs/server2/cron_servlet.py b/chrome/common/extensions/docs/server2/cron_servlet.py
index 31c7143..622b0f1 100644
--- a/chrome/common/extensions/docs/server2/cron_servlet.py
+++ b/chrome/common/extensions/docs/server2/cron_servlet.py
@@ -190,7 +190,8 @@
         return Future(callback=resolve)
 
       targets = (CreateDataSources(server_instance).values() +
-                 [server_instance.content_providers])
+                 [server_instance.content_providers,
+                  server_instance.api_models])
       title = 'initializing %s parallel Cron targets' % len(targets)
       _cronlog.info(title)
       timer = Timer()
@@ -199,16 +200,6 @@
       finally:
         _cronlog.info('%s took %s' % (title, timer.Stop().FormatElapsed()))
 
-      # Rendering the public templates will also pull in all of the private
-      # templates.
-      results.append(request_files_in_dir(PUBLIC_TEMPLATES,
-                                          strip_ext=('.html', '.md')))
-
-      # Rendering the public templates will have pulled in the .js and
-      # manifest.json files (for listing examples on the API reference pages),
-      # but there are still images, CSS, etc.
-      results.append(request_files_in_dir(STATIC_DOCS, prefix='static'))
-
       # Samples are too expensive to run on the dev server, where there is no
       # parallel fetch.
       #
diff --git a/chrome/common/extensions/docs/server2/future.py b/chrome/common/extensions/docs/server2/future.py
index 2f60099..f43aa24 100644
--- a/chrome/common/extensions/docs/server2/future.py
+++ b/chrome/common/extensions/docs/server2/future.py
@@ -7,11 +7,21 @@
 _no_value = object()
 
 
-def Collect(futures):
+def Collect(futures, except_pass=None):
   '''Creates a Future which returns a list of results from each Future in
-  |futures|.
+  |futures|. |except_pass| should be one or more exceptions to ignore when
+  calling Get on the futures.
   '''
-  return Future(callback=lambda: [f.Get() for f in futures])
+  def resolve():
+    resolved = []
+    for f in futures:
+      try:
+        resolved.append(f.Get())
+      # "except None" will simply not catch any errors
+      except except_pass:
+        pass
+    return resolved
+  return Future(callback=resolve)
 
 
 class Future(object):
diff --git a/chrome/common/extensions/docs/server2/instance_servlet.py b/chrome/common/extensions/docs/server2/instance_servlet.py
index a408049..a23bb43 100644
--- a/chrome/common/extensions/docs/server2/instance_servlet.py
+++ b/chrome/common/extensions/docs/server2/instance_servlet.py
@@ -4,7 +4,7 @@
 
 from branch_utility import BranchUtility
 from compiled_file_system import CompiledFileSystem
-from environment import IsDevServer
+from environment import IsDevServer, IsReleaseServer
 from github_file_system_provider import GithubFileSystemProvider
 from host_file_system_provider import HostFileSystemProvider
 from third_party.json_schema_compiler.memoize import memoize
@@ -37,14 +37,11 @@
     branch_utility = self._delegate.CreateBranchUtility(object_store_creator)
     # In production have offline=True so that we can catch cron errors. In
     # development it's annoying to have to run the cron job, so offline=False.
-    #
-    # XXX(kalman): The above comment is not true, I have temporarily disabled
-    # this while the cron is running out of memory and not reliably finishing.
-    # In the meantime, live dangerously and fetch content if it's not there.
-    # I.e. never offline. See http://crbug.com/345361.
+    # Note that offline=True if running on any appengine server due to
+    # http://crbug.com/345361.
     host_file_system_provider = self._delegate.CreateHostFileSystemProvider(
         object_store_creator,
-        offline=False)  # XXX(kalman): condition should be "not IsDevServer()"
+        offline=not (IsDevServer() or IsReleaseServer()))
     github_file_system_provider = self._delegate.CreateGithubFileSystemProvider(
         object_store_creator)
     return ServerInstance(object_store_creator,
diff --git a/chrome/common/extensions/docs/server2/instance_servlet_test.py b/chrome/common/extensions/docs/server2/instance_servlet_test.py
index 540f1dd..f857ed6 100755
--- a/chrome/common/extensions/docs/server2/instance_servlet_test.py
+++ b/chrome/common/extensions/docs/server2/instance_servlet_test.py
@@ -30,10 +30,8 @@
   It should never return a 500 (i.e. crash).
   '''
 
-  # XXX(kalman): Disabled, see comment in instance_servlet.py and
-  # http://crbug.com/345361.
   @DisableLogging('warning')
-  def DISABLED_testHostFileSystemNotAccessed(self):
+  def testHostFileSystemNotAccessed(self):
     delegate = _TestDelegate(FailOnAccessFileSystem)
     constructor = InstanceServlet.GetConstructor(delegate_for_test=delegate)
     def test_path(path, status=404):
diff --git a/chrome/common/extensions/docs/server2/preview.py b/chrome/common/extensions/docs/server2/preview.py
index c2c3bfe..5161b2c 100755
--- a/chrome/common/extensions/docs/server2/preview.py
+++ b/chrome/common/extensions/docs/server2/preview.py
@@ -33,6 +33,7 @@
 from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
 import logging
 import optparse
+import posixpath
 import time
 
 from local_renderer import LocalRenderer
@@ -41,6 +42,11 @@
   '''A HTTPRequestHandler that outputs the docs page generated by Handler.
   '''
   def do_GET(self):
+    # Sanitize path to guarantee that it stays within the server.
+    if not posixpath.abspath(self.path.lstrip('/')).startswith(
+                             posixpath.abspath('')):
+      return
+
     # Rewrite paths that would otherwise be served from app.yaml.
     self.path = {
       '/robots.txt': '../../server2/robots.txt',
diff --git a/chrome/common/extensions/docs/server2/render_servlet.py b/chrome/common/extensions/docs/server2/render_servlet.py
index 2aadb13..fe6d68d 100644
--- a/chrome/common/extensions/docs/server2/render_servlet.py
+++ b/chrome/common/extensions/docs/server2/render_servlet.py
@@ -106,10 +106,6 @@
       return Response.Redirect('/' + request_path.rstrip('/'),
                                permanent=False)
 
-    if not path:
-      # Empty-path request hasn't been redirected by now. It doesn't exist.
-      raise FileNotFoundError('Empty path')
-
     content_and_type = content_provider.GetContentAndType(path).Get()
     if not content_and_type.content:
       logging.error('%s had empty content' % path)
diff --git a/chrome/common/extensions/docs/server2/render_servlet_test.py b/chrome/common/extensions/docs/server2/render_servlet_test.py
index 5ab95a9..d4b97db 100755
--- a/chrome/common/extensions/docs/server2/render_servlet_test.py
+++ b/chrome/common/extensions/docs/server2/render_servlet_test.py
@@ -95,10 +95,11 @@
     self.assertTrue(len(response.content) >
                     len(ReadFile('%s%s.html' % (PUBLIC_TEMPLATES, html_file))))
 
-  def testIndexRedirect(self):
+  def testIndexRender(self):
     response = self._Render('extensions')
-    self.assertEqual(('/extensions/index', False),
-                     response.GetRedirect())
+    self.assertEqual(200, response.status)
+    self.assertEqual(self._Render('extensions/index').content.ToString(),
+                     response.content.ToString())
 
   def testOtherRedirectsJsonRedirect(self):
     response = self._Render('apps/webview_tag')
diff --git a/chrome/common/extensions/docs/server2/template_data_source.py b/chrome/common/extensions/docs/server2/template_data_source.py
index 4f8395b..b106453 100644
--- a/chrome/common/extensions/docs/server2/template_data_source.py
+++ b/chrome/common/extensions/docs/server2/template_data_source.py
@@ -38,7 +38,7 @@
     futures = []
     for root, _, files in self._file_system.Walk(self._dir):
       futures += [self._template_cache.GetFromFile(
-                      posixpath.join(self._dir, root, f))
+                      posixpath.join(self._dir, root, FormatKey(f)))
                   for f in files
                   if posixpath.splitext(f)[1] == '.html']
     return Collect(futures)
diff --git a/chrome/common/extensions/docs/templates/intros/commands.html b/chrome/common/extensions/docs/templates/intros/commands.html
index 6d9503b..f1ba414 100644
--- a/chrome/common/extensions/docs/templates/intros/commands.html
+++ b/chrome/common/extensions/docs/templates/intros/commands.html
@@ -80,9 +80,9 @@
 <h2 id="usage">Scope</h2>
 <p>By default, Commands are scoped to the Chrome browser, which means that while
 the browser does not have focus, the shortcut will be inactive. On desktop
-Chrome, Commands can instead have global scope and will then also work while
-Chrome does *not* have focus. NOTE: The exception here is ChromeOS, where global
-commands are not allowed at the moment.</p>
+Chrome, Commands can instead have global scope, as of version 35, and will then
+also work while Chrome does *not* have focus. NOTE: The exception here is
+ChromeOS, where global commands are not allowed at the moment.</p>
 
 <p>The user is free to designate any shortcut as global using the UI in
 chrome://extensions \ Keyboard Shortcuts, but the extension developer is limited
diff --git a/chrome/common/extensions/docs/templates/json/permissions.json b/chrome/common/extensions/docs/templates/json/permissions.json
index 00e88de..5d3a415 100644
--- a/chrome/common/extensions/docs/templates/json/permissions.json
+++ b/chrome/common/extensions/docs/templates/json/permissions.json
@@ -39,6 +39,9 @@
   "geolocation": {
     "partial": "permissions/geolocation.html"
   },
+  "nativeMessaging": {
+    "partial": "permissions/nativeMessaging.html"
+  },
   "notifications": {
     "partial": "permissions/notifications.html"
   },
diff --git a/chrome/common/extensions/docs/templates/private/permissions/nativeMessaging.html b/chrome/common/extensions/docs/templates/private/permissions/nativeMessaging.html
new file mode 100644
index 0000000..f5c5bfc
--- /dev/null
+++ b/chrome/common/extensions/docs/templates/private/permissions/nativeMessaging.html
@@ -0,0 +1 @@
+Gives your {{platform}} access to the <a href="messaging.html#native-messaging">native messaging API</a>.
diff --git a/chrome/common/extensions/docs/templates/public/apps/bluetoothLowEnergy.html b/chrome/common/extensions/docs/templates/public/apps/bluetoothLowEnergy.html
new file mode 100644
index 0000000..00816cf
--- /dev/null
+++ b/chrome/common/extensions/docs/templates/public/apps/bluetoothLowEnergy.html
@@ -0,0 +1 @@
+{{+partials.standard_apps_api api:apis.bluetooth_low_energy/}}
diff --git a/chrome/common/extensions/docs/templates/public/extensions/redirects.json b/chrome/common/extensions/docs/templates/public/extensions/redirects.json
index e2e06ed..700b73b 100644
--- a/chrome/common/extensions/docs/templates/public/extensions/redirects.json
+++ b/chrome/common/extensions/docs/templates/public/extensions/redirects.json
@@ -1,5 +1,4 @@
 {
-  "": "index",
   "experimental.debugger": "debugger",
   "experimental_debugger": "debugger",
   "experimental.infobars": "infobars",
diff --git a/chrome/common/extensions/docs/templates/public/redirects.json b/chrome/common/extensions/docs/templates/public/redirects.json
index efe7784..6c724a2 100644
--- a/chrome/common/extensions/docs/templates/public/redirects.json
+++ b/chrome/common/extensions/docs/templates/public/redirects.json
@@ -1,9 +1,4 @@
 {
-  "": "/home/index",
-  "apps": "/apps/about_apps",
-  "devtools": "/devtools/index",
-  "extensions": "/extensions/index",
-  "multidevice": "/multidevice/index",
-  "native-client": "/native-client/overview",
-  "webstore": "/webstore/index"
+  "": "/home",
+  "apps": "/apps/about_apps"
 }
diff --git a/chrome/common/extensions/features/chrome_channel_feature_filter.cc b/chrome/common/extensions/features/chrome_channel_feature_filter.cc
index 00bc6c2..e1c581d 100644
--- a/chrome/common/extensions/features/chrome_channel_feature_filter.cc
+++ b/chrome/common/extensions/features/chrome_channel_feature_filter.cc
@@ -78,7 +78,7 @@
 Feature::Availability ChromeChannelFeatureFilter::IsAvailableToManifest(
     const std::string& extension_id,
     Manifest::Type type,
-    Feature::Location location,
+    Manifest::Location location,
     int manifest_version,
     Feature::Platform platfortm) const {
   if (channel_has_been_set_ && channel_ < GetCurrentChannel()) {
diff --git a/chrome/common/extensions/features/chrome_channel_feature_filter.h b/chrome/common/extensions/features/chrome_channel_feature_filter.h
index a0e9faa..90d98c5 100644
--- a/chrome/common/extensions/features/chrome_channel_feature_filter.h
+++ b/chrome/common/extensions/features/chrome_channel_feature_filter.h
@@ -22,7 +22,7 @@
   virtual Feature::Availability IsAvailableToManifest(
       const std::string& extension_id,
       Manifest::Type type,
-      Feature::Location location,
+      Manifest::Location location,
       int manifest_version,
       Feature::Platform platform) const OVERRIDE;
 
diff --git a/chrome/common/extensions/manifest_handlers/app_launch_info.cc b/chrome/common/extensions/manifest_handlers/app_launch_info.cc
index a3b3ac5..18ec3ab 100644
--- a/chrome/common/extensions/manifest_handlers/app_launch_info.cc
+++ b/chrome/common/extensions/manifest_handlers/app_launch_info.cc
@@ -12,6 +12,7 @@
 #include "chrome/common/chrome_switches.h"
 #include "chrome/common/extensions/extension_constants.h"
 #include "chrome/common/url_constants.h"
+#include "components/cloud_devices/common/cloud_devices_urls.h"
 #include "extensions/common/error_utils.h"
 #include "extensions/common/manifest_constants.h"
 
@@ -205,19 +206,10 @@
   } else if (extension->id() == extension_misc::kCloudPrintAppId) {
     // In order for the --cloud-print-service switch to work, we must update
     // the launch URL and web extent.
-    // TODO(sanjeevr): Ideally we want to use CloudPrintURL here but that is
-    // currently under chrome/browser.
-    const CommandLine& command_line = *CommandLine::ForCurrentProcess();
-    GURL cloud_print_service_url = GURL(command_line.GetSwitchValueASCII(
-        switches::kCloudPrintServiceURL));
-    if (!cloud_print_service_url.is_empty()) {
-      std::string path(
-          cloud_print_service_url.path() + "/enable_chrome_connector");
-      GURL::Replacements replacements;
-      replacements.SetPathStr(path);
-      GURL cloud_print_enable_connector_url =
-          cloud_print_service_url.ReplaceComponents(replacements);
-      OverrideLaunchURL(extension, cloud_print_enable_connector_url);
+    GURL url =
+        cloud_devices::GetCloudPrintRelativeURL("enable_chrome_connector");
+    if (!url.is_empty()) {
+      OverrideLaunchURL(extension, url);
     }
   }
 
diff --git a/chrome/common/extensions/manifest_tests/extension_manifests_requirements_unittest.cc b/chrome/common/extensions/manifest_tests/extension_manifests_requirements_unittest.cc
index 572bbad..c1b5fb8 100644
--- a/chrome/common/extensions/manifest_tests/extension_manifests_requirements_unittest.cc
+++ b/chrome/common/extensions/manifest_tests/extension_manifests_requirements_unittest.cc
@@ -52,14 +52,12 @@
       "requirements_valid_empty.json"));
   ASSERT_TRUE(extension.get());
   EXPECT_EQ(RequirementsInfo::GetRequirements(extension.get()).webgl, false);
-  EXPECT_EQ(RequirementsInfo::GetRequirements(extension.get()).css3d, false);
   EXPECT_EQ(RequirementsInfo::GetRequirements(extension.get()).npapi, false);
 
   // Test loading all the requirements.
   extension = LoadAndExpectSuccess("requirements_valid_full.json");
   ASSERT_TRUE(extension.get());
   EXPECT_EQ(RequirementsInfo::GetRequirements(extension.get()).webgl, true);
-  EXPECT_EQ(RequirementsInfo::GetRequirements(extension.get()).css3d, true);
   EXPECT_EQ(RequirementsInfo::GetRequirements(extension.get()).npapi, true);
 }
 
@@ -70,26 +68,22 @@
       "requirements_npapi_empty.json"));
   ASSERT_TRUE(extension.get());
   EXPECT_EQ(RequirementsInfo::GetRequirements(extension.get()).webgl, false);
-  EXPECT_EQ(RequirementsInfo::GetRequirements(extension.get()).css3d, false);
   EXPECT_EQ(RequirementsInfo::GetRequirements(extension.get()).npapi, true);
 
   extension = LoadAndExpectSuccess(
       "requirements_npapi_empty_plugins_empty.json");
   ASSERT_TRUE(extension.get());
   EXPECT_EQ(RequirementsInfo::GetRequirements(extension.get()).webgl, false);
-  EXPECT_EQ(RequirementsInfo::GetRequirements(extension.get()).css3d, false);
   EXPECT_EQ(RequirementsInfo::GetRequirements(extension.get()).npapi, false);
 
   extension = LoadAndExpectSuccess("requirements_npapi.json");
   ASSERT_TRUE(extension.get());
   EXPECT_EQ(RequirementsInfo::GetRequirements(extension.get()).webgl, false);
-  EXPECT_EQ(RequirementsInfo::GetRequirements(extension.get()).css3d, false);
   EXPECT_EQ(RequirementsInfo::GetRequirements(extension.get()).npapi, false);
 
   extension = LoadAndExpectSuccess("requirements_npapi_plugins_empty.json");
   ASSERT_TRUE(extension.get());
   EXPECT_EQ(RequirementsInfo::GetRequirements(extension.get()).webgl, false);
-  EXPECT_EQ(RequirementsInfo::GetRequirements(extension.get()).css3d, false);
   EXPECT_EQ(RequirementsInfo::GetRequirements(extension.get()).npapi, true);
 }
 
diff --git a/chrome/common/extensions/permissions/chrome_api_permissions.cc b/chrome/common/extensions/permissions/chrome_api_permissions.cc
index 9711087..c160f78 100644
--- a/chrome/common/extensions/permissions/chrome_api_permissions.cc
+++ b/chrome/common/extensions/permissions/chrome_api_permissions.cc
@@ -11,6 +11,7 @@
 #include "extensions/common/permissions/permissions_info.h"
 #include "extensions/common/permissions/socket_permission.h"
 #include "extensions/common/permissions/usb_device_permission.h"
+#include "grit/extensions_strings.h"
 #include "grit/generated_resources.h"
 
 namespace extensions {
diff --git a/chrome/common/extensions/permissions/chrome_permission_message_provider.cc b/chrome/common/extensions/permissions/chrome_permission_message_provider.cc
index 14a43fb..c999ce0 100644
--- a/chrome/common/extensions/permissions/chrome_permission_message_provider.cc
+++ b/chrome/common/extensions/permissions/chrome_permission_message_provider.cc
@@ -21,6 +21,8 @@
 
 namespace {
 
+typedef std::set<PermissionMessage> PermissionMsgSet;
+
 bool ShouldWarnAllHosts(const PermissionSet* permissions) {
   if (permissions->HasEffectiveAccessToAllHosts())
     return true;
@@ -62,17 +64,28 @@
   return false;
 }
 
-PermissionMessages::iterator FindMessageByID(PermissionMessages& messages,
-                                             int id) {
-  for (PermissionMessages::iterator it = messages.begin();
+template<typename T>
+typename T::iterator FindMessageByID(T& messages, int id) {
+  for (typename T::iterator it = messages.begin();
        it != messages.end(); ++it) {
     if (it->id() == id)
       return it;
   }
-
   return messages.end();
 }
 
+template<typename T>
+void SuppressMessage(T& messages,
+                     int suppressing_message,
+                     int suppressed_message) {
+  typename T::iterator suppressed = FindMessageByID(messages,
+                                                    suppressed_message);
+  if (suppressed != messages.end() &&
+      FindMessageByID(messages, suppressing_message) != messages.end()) {
+    messages.erase(suppressed);
+  }
+}
+
 }  // namespace
 
 ChromePermissionMessageProvider::ChromePermissionMessageProvider() {
@@ -93,26 +106,32 @@
     return messages;
   }
 
-  std::set<PermissionMessage> host_msgs =
+  PermissionMsgSet host_msgs =
       GetHostPermissionMessages(permissions, extension_type);
-  std::set<PermissionMessage> api_msgs = GetAPIPermissionMessages(permissions);
-  std::set<PermissionMessage> manifest_permission_msgs =
+  PermissionMsgSet api_msgs = GetAPIPermissionMessages(permissions);
+  PermissionMsgSet manifest_permission_msgs =
       GetManifestPermissionMessages(permissions);
   messages.insert(messages.end(), host_msgs.begin(), host_msgs.end());
   messages.insert(messages.end(), api_msgs.begin(), api_msgs.end());
   messages.insert(messages.end(), manifest_permission_msgs.begin(),
                   manifest_permission_msgs.end());
 
-  // Special hack: bookmarks permission message supersedes override bookmarks UI
-  // permission message if both permissions are specified.
-  PermissionMessages::iterator override_bookmarks_ui =
-      FindMessageByID(messages, PermissionMessage::kOverrideBookmarksUI);
-  if (override_bookmarks_ui != messages.end() &&
-      FindMessageByID(messages, PermissionMessage::kBookmarks) !=
-          messages.end()) {
-    messages.erase(override_bookmarks_ui);
-  }
-
+  // Some warnings are more generic and/or powerful and superseed other
+  // warnings. In that case, suppress the superseeded warning.
+  SuppressMessage(messages,
+                  PermissionMessage::kBookmarks,
+                  PermissionMessage::kOverrideBookmarksUI);
+  // Both tabs and history already allow reading favicons.
+  SuppressMessage(messages,
+                  PermissionMessage::kTabs,
+                  PermissionMessage::kFavicon);
+  SuppressMessage(messages,
+                  PermissionMessage::kBrowsingHistory,
+                  PermissionMessage::kFavicon);
+  // Warning for history permission already covers warning for tabs permission.
+  SuppressMessage(messages,
+                  PermissionMessage::kBrowsingHistory,
+                  PermissionMessage::kTabs);
   return messages;
 }
 
@@ -227,7 +246,7 @@
 std::set<PermissionMessage>
 ChromePermissionMessageProvider::GetAPIPermissionMessages(
     const PermissionSet* permissions) const {
-  std::set<PermissionMessage> messages;
+  PermissionMsgSet messages;
   for (APIPermissionSet::const_iterator permission_it =
            permissions->apis().begin();
        permission_it != permissions->apis().end(); ++permission_it) {
@@ -241,18 +260,12 @@
   // kFileSystemDirectory and and kFileSystemWrite as the write directory
   // message implies the other two.
   // TODO(sammc): Remove this. See http://crbug.com/284849.
-  std::set<PermissionMessage>::iterator write_directory_message =
-      messages.find(PermissionMessage(
-          PermissionMessage::kFileSystemWriteDirectory, base::string16()));
-  if (write_directory_message != messages.end()) {
-    messages.erase(
-        PermissionMessage(PermissionMessage::kFileSystemWrite,
-                          base::string16()));
-    messages.erase(
-        PermissionMessage(PermissionMessage::kFileSystemDirectory,
-                          base::string16()));
-  }
-
+  SuppressMessage(messages,
+                  PermissionMessage::kFileSystemWriteDirectory,
+                  PermissionMessage::kFileSystemWrite);
+  SuppressMessage(messages,
+                  PermissionMessage::kFileSystemWriteDirectory,
+                  PermissionMessage::kFileSystemDirectory);
   // A special hack: The warning message for declarativeWebRequest
   // permissions speaks about blocking parts of pages, which is a
   // subset of what the "<all_urls>" access allows. Therefore we
@@ -263,14 +276,13 @@
         PermissionMessage(
             PermissionMessage::kDeclarativeWebRequest, base::string16()));
   }
-
   return messages;
 }
 
 std::set<PermissionMessage>
 ChromePermissionMessageProvider::GetManifestPermissionMessages(
     const PermissionSet* permissions) const {
-  std::set<PermissionMessage> messages;
+  PermissionMsgSet messages;
   for (ManifestPermissionSet::const_iterator permission_it =
            permissions->manifest_permissions().begin();
       permission_it != permissions->manifest_permissions().end();
@@ -287,7 +299,7 @@
 ChromePermissionMessageProvider::GetHostPermissionMessages(
     const PermissionSet* permissions,
     Manifest::Type extension_type) const {
-  std::set<PermissionMessage> messages;
+  PermissionMsgSet messages;
   // Since platform apps always use isolated storage, they can't (silently)
   // access user data on other domains, so there's no need to prompt.
   // Note: this must remain consistent with IsHostPrivilegeIncrease.
@@ -318,7 +330,6 @@
   if (new_permissions == NULL)
     return false;
 
-  typedef std::set<PermissionMessage> PermissionMsgSet;
   PermissionMsgSet old_warnings = GetAPIPermissionMessages(old_permissions);
   PermissionMsgSet new_warnings = GetAPIPermissionMessages(new_permissions);
   PermissionMsgSet delta_warnings =
@@ -348,7 +359,6 @@
   if (new_permissions == NULL)
     return false;
 
-  typedef std::set<PermissionMessage> PermissionMsgSet;
   PermissionMsgSet old_warnings =
       GetManifestPermissionMessages(old_permissions);
   PermissionMsgSet new_warnings =
diff --git a/chrome/common/extensions/permissions/permission_set_unittest.cc b/chrome/common/extensions/permissions/permission_set_unittest.cc
index 460ef03..4668254 100644
--- a/chrome/common/extensions/permissions/permission_set_unittest.cc
+++ b/chrome/common/extensions/permissions/permission_set_unittest.cc
@@ -811,6 +811,52 @@
   EXPECT_EQ(PermissionMessage::kFileSystemWriteDirectory, messages[0].id());
 }
 
+TEST(PermissionsTest, SuppressedPermissionMessages) {
+  {
+    APIPermissionSet api_permissions;
+    api_permissions.insert(APIPermission::kTab);
+    api_permissions.insert(APIPermission::kHistory);
+    scoped_refptr<PermissionSet> permissions(
+        new PermissionSet(api_permissions, ManifestPermissionSet(),
+                          URLPatternSet(), URLPatternSet()));
+    PermissionMessages messages =
+        PermissionMessageProvider::Get()->GetPermissionMessages(
+            permissions, Manifest::TYPE_EXTENSION);
+    EXPECT_EQ(1u, messages.size());
+    EXPECT_EQ(PermissionMessage::kBrowsingHistory, messages[0].id());
+  }
+  {
+    APIPermissionSet api_permissions;
+    api_permissions.insert(APIPermission::kTab);
+    URLPatternSet hosts;
+    hosts.AddPattern(URLPattern(URLPattern::SCHEME_CHROMEUI,
+                                "chrome://favicon/"));
+    scoped_refptr<PermissionSet> permissions(
+        new PermissionSet(api_permissions, ManifestPermissionSet(),
+                          hosts, URLPatternSet()));
+    PermissionMessages messages =
+        PermissionMessageProvider::Get()->GetPermissionMessages(
+            permissions, Manifest::TYPE_EXTENSION);
+    EXPECT_EQ(1u, messages.size());
+    EXPECT_EQ(PermissionMessage::kTabs, messages[0].id());
+  }
+  {
+    APIPermissionSet api_permissions;
+    api_permissions.insert(APIPermission::kHistory);
+    URLPatternSet hosts;
+    hosts.AddPattern(URLPattern(URLPattern::SCHEME_CHROMEUI,
+                                "chrome://favicon/"));
+    scoped_refptr<PermissionSet> permissions(
+        new PermissionSet(api_permissions, ManifestPermissionSet(),
+                          hosts, URLPatternSet()));
+    PermissionMessages messages =
+        PermissionMessageProvider::Get()->GetPermissionMessages(
+            permissions, Manifest::TYPE_EXTENSION);
+    EXPECT_EQ(1u, messages.size());
+    EXPECT_EQ(PermissionMessage::kBrowsingHistory, messages[0].id());
+  }
+}
+
 TEST(PermissionsTest, MergedFileSystemPermissionComparison) {
   APIPermissionSet write_api_permissions;
   write_api_permissions.insert(APIPermission::kFileSystemWrite);
diff --git a/chrome/common/extensions/permissions/usb_device_permission_unittest.cc b/chrome/common/extensions/permissions/usb_device_permission_unittest.cc
index dcf066c..ee92932 100644
--- a/chrome/common/extensions/permissions/usb_device_permission_unittest.cc
+++ b/chrome/common/extensions/permissions/usb_device_permission_unittest.cc
@@ -35,9 +35,9 @@
 
 TEST(USBDevicePermissionTest, MAYBE_PermissionMessage) {
   const char* const kMessages[] = {
-      "Access the USB device PVR Mass Storage from HUMAX Co., Ltd..",
-      "Access the USB device from HUMAX Co., Ltd..",
-      "Access the USB device.",
+      "Access the USB device PVR Mass Storage from HUMAX Co., Ltd.",
+      "Access the USB device from HUMAX Co., Ltd.",
+      "Access the USB device",
   };
 
   // Prepare data set
diff --git a/chrome/common/favicon/DEPS b/chrome/common/favicon/DEPS
new file mode 100644
index 0000000..3daf8ae
--- /dev/null
+++ b/chrome/common/favicon/DEPS
@@ -0,0 +1,3 @@
+include_rules = [
+  "+components/favicon_base",
+]
diff --git a/chrome/common/favicon/favicon_types.cc b/chrome/common/favicon/favicon_types.cc
deleted file mode 100644
index ca4fac6..0000000
--- a/chrome/common/favicon/favicon_types.cc
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright 2013 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 "chrome/common/favicon/favicon_types.h"
-
-namespace chrome {
-
-// FaviconImageResult ---------------------------------------------------------
-
-FaviconImageResult::FaviconImageResult() {}
-
-FaviconImageResult::~FaviconImageResult() {}
-
-// FaviconBitmapResult --------------------------------------------------------
-
-FaviconBitmapResult::FaviconBitmapResult()
-    : expired(false),
-      icon_type(INVALID_ICON) {}
-
-FaviconBitmapResult::~FaviconBitmapResult() {}
-
-}  // namespace chrome
diff --git a/chrome/common/favicon/favicon_types.h b/chrome/common/favicon/favicon_types.h
deleted file mode 100644
index f848555..0000000
--- a/chrome/common/favicon/favicon_types.h
+++ /dev/null
@@ -1,77 +0,0 @@
-// Copyright 2013 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 CHROME_COMMON_FAVICON_FAVICON_TYPES_H_
-#define CHROME_COMMON_FAVICON_FAVICON_TYPES_H_
-
-#include "base/memory/ref_counted_memory.h"
-#include "ui/gfx/image/image.h"
-#include "ui/gfx/size.h"
-#include "url/gurl.h"
-
-namespace chrome {
-
-typedef int64 FaviconID;
-
-// Defines the icon types. They are also stored in icon_type field of favicons
-// table.
-// The values of the IconTypes are used to select the priority in which favicon
-// data is returned in HistoryBackend and ThumbnailDatabase. Data for the
-// largest IconType takes priority if data for multiple IconTypes is available.
-enum IconType {
-  INVALID_ICON = 0x0,
-  FAVICON = 1 << 0,
-  TOUCH_ICON = 1 << 1,
-  TOUCH_PRECOMPOSED_ICON = 1 << 2
-};
-
-// Defines a gfx::Image of size desired_size_in_dip composed of image
-// representations for each of the desired scale factors.
-struct FaviconImageResult {
-  FaviconImageResult();
-  ~FaviconImageResult();
-
-  // The resulting image.
-  gfx::Image image;
-
-  // The URL of the favicon which contains all of the image representations of
-  // |image|.
-  // TODO(pkotwicz): Return multiple |icon_urls| to allow |image| to have
-  // representations from several favicons once content::FaviconStatus supports
-  // multiple URLs.
-  GURL icon_url;
-};
-
-// Defines a favicon bitmap which best matches the desired DIP size and one of
-// the desired scale factors.
-struct FaviconBitmapResult {
-  FaviconBitmapResult();
-  ~FaviconBitmapResult();
-
-  // Returns true if |bitmap_data| contains a valid bitmap.
-  bool is_valid() const { return bitmap_data.get() && bitmap_data->size(); }
-
-  // Indicates whether |bitmap_data| is expired.
-  bool expired;
-
-  // The bits of the bitmap.
-  scoped_refptr<base::RefCountedMemory> bitmap_data;
-
-  // The pixel dimensions of |bitmap_data|.
-  gfx::Size pixel_size;
-
-  // The URL of the containing favicon.
-  GURL icon_url;
-
-  // The icon type of the containing favicon.
-  IconType icon_type;
-};
-
-// Define type with same structure as FaviconBitmapResult for passing data to
-// HistoryBackend::SetFavicons().
-typedef FaviconBitmapResult FaviconBitmapData;
-
-}  // namespace chrome
-
-#endif  // CHROME_COMMON_FAVICON_FAVICON_TYPES_H_
diff --git a/chrome/common/favicon/favicon_url_parser.cc b/chrome/common/favicon/favicon_url_parser.cc
index ef6999e..95f35a9 100644
--- a/chrome/common/favicon/favicon_url_parser.cc
+++ b/chrome/common/favicon/favicon_url_parser.cc
@@ -5,7 +5,7 @@
 #include "chrome/common/favicon/favicon_url_parser.h"
 
 #include "base/strings/string_number_conversions.h"
-#include "chrome/common/favicon/favicon_types.h"
+#include "components/favicon_base/favicon_types.h"
 #include "net/url_request/url_request.h"
 #include "ui/base/layout.h"
 #include "ui/base/webui/web_ui_util.h"
@@ -88,7 +88,7 @@
     //   where scale factor is one of FaviconUtil::GetFaviconScaleFactors().
     // - the largest TOUCH_ICON / TOUCH_PRECOMPOSED_ICON
     if (parsed->size_in_dip != gfx::kFaviconSize &&
-        icon_types == chrome::FAVICON)
+        icon_types == favicon_base::FAVICON)
       return false;
 
     parsed_index = slash + 1;
diff --git a/chrome/common/favicon/favicon_url_parser_unittest.cc b/chrome/common/favicon/favicon_url_parser_unittest.cc
index ccbdc80..1ccd9ed 100644
--- a/chrome/common/favicon/favicon_url_parser_unittest.cc
+++ b/chrome/common/favicon/favicon_url_parser_unittest.cc
@@ -5,7 +5,7 @@
 #include "chrome/common/favicon/favicon_url_parser.h"
 
 #include "base/memory/scoped_ptr.h"
-#include "chrome/common/favicon/favicon_types.h"
+#include "components/favicon_base/favicon_types.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/base/layout.h"
 
@@ -35,7 +35,7 @@
 // Test parsing path with no extra parameters.
 TEST_F(FaviconUrlParserTest, ParsingNoExtraParams) {
   const std::string url("https://www.google.ca/imghp?hl=en&tab=wi");
-  int icon_types = chrome::TOUCH_PRECOMPOSED_ICON;
+  int icon_types = favicon_base::TOUCH_PRECOMPOSED_ICON;
   chrome::ParsedFaviconPath parsed;
 
   const std::string path1 = url;
@@ -49,7 +49,7 @@
 // Test parsing path with a 'size' parameter.
 TEST_F(FaviconUrlParserTest, ParsingSizeParam) {
   const std::string url("https://www.google.ca/imghp?hl=en&tab=wi");
-  int icon_types = chrome::TOUCH_PRECOMPOSED_ICON;
+  int icon_types = favicon_base::TOUCH_PRECOMPOSED_ICON;
   chrome::ParsedFaviconPath parsed;
 
   // Test that we can still parse the legacy 'size' parameter format.
@@ -97,7 +97,7 @@
 // Test parsing path with the 'largest' parameter.
 TEST_F(FaviconUrlParserTest, ParsingLargestParam) {
   const std::string url("https://www.google.ca/imghp?hl=en&tab=wi");
-  int icon_types = chrome::TOUCH_PRECOMPOSED_ICON;
+  int icon_types = favicon_base::TOUCH_PRECOMPOSED_ICON;
   chrome::ParsedFaviconPath parsed;
 
   const std::string path9 = "largest/" + url;
@@ -111,7 +111,7 @@
 // Test parsing path with 'iconurl' parameter.
 TEST_F(FaviconUrlParserTest, ParsingIconUrlParam) {
   const std::string url("https://www.google.ca/imghp?hl=en&tab=wi");
-  int icon_types = chrome::TOUCH_PRECOMPOSED_ICON;
+  int icon_types = favicon_base::TOUCH_PRECOMPOSED_ICON;
   chrome::ParsedFaviconPath parsed;
 
   const std::string path10 = "iconurl/http://www.google.com/favicon.ico";
@@ -125,7 +125,7 @@
 // Test parsing path with 'origin' parameter.
 TEST_F(FaviconUrlParserTest, ParsingOriginParam) {
   const std::string url("https://www.google.ca/imghp?hl=en&tab=wi");
-  int icon_types = chrome::TOUCH_PRECOMPOSED_ICON;
+  int icon_types = favicon_base::TOUCH_PRECOMPOSED_ICON;
   chrome::ParsedFaviconPath parsed;
 
   const std::string path11 = "origin/" + url;
@@ -147,7 +147,7 @@
 // parameter.
 TEST_F(FaviconUrlParserTest, ParsingSizeParamAndUrlModifier) {
   const std::string url("https://www.google.ca/imghp?hl=en&tab=wi");
-  int icon_types = chrome::TOUCH_PRECOMPOSED_ICON;
+  int icon_types = favicon_base::TOUCH_PRECOMPOSED_ICON;
   chrome::ParsedFaviconPath parsed;
 
   const std::string path13 = "size/32@1.4x/origin/" + url;
diff --git a/chrome/common/localized_error.cc b/chrome/common/localized_error.cc
index dc5e844..46e1bc5 100644
--- a/chrome/common/localized_error.cc
+++ b/chrome/common/localized_error.cc
@@ -294,6 +294,13 @@
    IDS_ERRORPAGES_DETAILS_BLOCKED_BY_ADMINISTRATOR,
    SUGGEST_VIEW_POLICIES | SUGGEST_CONTACT_ADMINISTRATOR,
   },
+  {net::ERR_BLOCKED_ENROLLMENT_CHECK_PENDING,
+   IDS_ERRORPAGES_TITLE_BLOCKED,
+   IDS_ERRORPAGES_HEADING_BLOCKED_BY_ADMINISTRATOR,
+   IDS_ERRORPAGES_SUMMARY_BLOCKED_ENROLLMENT_CHECK_PENDING,
+   IDS_ERRORPAGES_DETAILS_BLOCKED_ENROLLMENT_CHECK_PENDING,
+   SUGGEST_CHECK_CONNECTION,
+  },
 };
 
 // Special error page to be used in the case of navigating back to a page
@@ -493,7 +500,7 @@
                                 const std::string& error_domain,
                                 const GURL& failed_url,
                                 bool is_post,
-                                bool stale_copy_in_cache,
+                                bool show_stale_load_button,
                                 const std::string& locale,
                                 const std::string& accept_languages,
                                 scoped_ptr<ErrorPageParams> params,
@@ -641,10 +648,10 @@
   if (params->suggest_reload) {
     if (!is_post) {
       base::DictionaryValue* reload_button = new base::DictionaryValue;
-      reload_button->SetString("msg",
-          l10n_util::GetStringUTF16(IDS_ERRORPAGES_BUTTON_RELOAD));
+      reload_button->SetString(
+          "msg", l10n_util::GetStringUTF16(IDS_ERRORPAGES_BUTTON_RELOAD));
       reload_button->SetString("reloadUrl", failed_url.spec());
-      error_strings->Set("reload", reload_button);
+      error_strings->Set("reloadButton", reload_button);
     } else {
       // If the page was created by a post, it can't be reloaded in the same
       // way, so just add a suggestion instead.
@@ -667,7 +674,15 @@
   if (!use_default_suggestions)
     return;
 
-  error_strings->SetBoolean("staleCopyInCache", stale_copy_in_cache);
+  if (show_stale_load_button) {
+    base::DictionaryValue* stale_load_button = new base::DictionaryValue;
+    stale_load_button->SetString(
+        "msg", l10n_util::GetStringUTF16(IDS_ERRORPAGES_BUTTON_LOAD_STALE));
+    stale_load_button->SetString(
+        "title",
+        l10n_util::GetStringUTF16(IDS_ERRORPAGES_BUTTON_LOAD_STALE_HELP));
+    error_strings->Set("staleLoadButton", stale_load_button);
+  }
 
 #if defined(OS_CHROMEOS)
   error_strings->SetString(
diff --git a/chrome/common/localized_error.h b/chrome/common/localized_error.h
index 23f955b..fe40b93 100644
--- a/chrome/common/localized_error.h
+++ b/chrome/common/localized_error.h
@@ -53,7 +53,7 @@
                          const std::string& error_domain,
                          const GURL& failed_url,
                          bool is_post,
-                         bool stale_copy_in_cache,
+                         bool show_stale_load_button,
                          const std::string& locale,
                          const std::string& accept_languages,
                          scoped_ptr<ErrorPageParams> params,
diff --git a/chrome/common/net/net_error_info.cc b/chrome/common/net/net_error_info.cc
index 91a1ca9..2501c40 100644
--- a/chrome/common/net/net_error_info.cc
+++ b/chrome/common/net/net_error_info.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "base/logging.h"
+#include "base/metrics/histogram.h"
 #include "chrome/common/net/net_error_info.h"
 
 namespace chrome_common_net {
@@ -36,4 +37,9 @@
          status < DNS_PROBE_MAX;
 }
 
+void RecordEvent(NetworkErrorPageEvent event) {
+  UMA_HISTOGRAM_ENUMERATION("Net.ErrorPageCounts", event,
+                            NETWORK_ERROR_PAGE_EVENT_MAX);
+}
+
 }  // namespace chrome_common_net
diff --git a/chrome/common/net/net_error_info.h b/chrome/common/net/net_error_info.h
index 1f69f7c..5652eb0 100644
--- a/chrome/common/net/net_error_info.h
+++ b/chrome/common/net/net_error_info.h
@@ -7,6 +7,26 @@
 
 namespace chrome_common_net {
 
+// Network error page events.  Used for UMA statistics.
+enum NetworkErrorPageEvent {
+  NETWORK_ERROR_PAGE_SHOWN,                      // Error pages shown.
+
+  NETWORK_ERROR_PAGE_RELOAD_BUTTON_SHOWN,        // Reload buttons shown.
+  NETWORK_ERROR_PAGE_RELOAD_BUTTON_CLICKED,      // Reload button clicked.
+  NETWORK_ERROR_PAGE_RELOAD_BUTTON_ERROR,        // Reload button clicked
+                                                 // -> error.
+
+  NETWORK_ERROR_PAGE_LOAD_STALE_BUTTON_SHOWN,    // Load stale buttons shown.
+  NETWORK_ERROR_PAGE_LOAD_STALE_BUTTON_CLICKED,  // Load stale button clicked.
+  NETWORK_ERROR_PAGE_LOAD_STALE_BUTTON_ERROR,    // Load stale buttons -> error.
+
+  NETWORK_ERROR_PAGE_MORE_BUTTON_CLICKED,        // More button clicked.
+
+  NETWORK_ERROR_PAGE_BROWSER_INITIATED_RELOAD,   // Reload from browser.
+
+  NETWORK_ERROR_PAGE_EVENT_MAX,
+};
+
 // The status of a DNS probe that the NetErrorTabHelper may or may not have
 // started.
 //
@@ -62,6 +82,9 @@
 // Returns true if |status| is one of the DNS_PROBE_FINISHED_* statuses.
 bool DnsProbeStatusIsFinished(DnsProbeStatus status);
 
+// Record specific error page events.
+void RecordEvent(NetworkErrorPageEvent event);
+
 // The error domain used to pass DNS probe statuses to the localized error
 // code.
 extern const char kDnsProbeErrorDomain[];
diff --git a/chrome/common/net/url_fixer_upper.h b/chrome/common/net/url_fixer_upper.h
index 3462880..4a63298 100644
--- a/chrome/common/net/url_fixer_upper.h
+++ b/chrome/common/net/url_fixer_upper.h
@@ -14,7 +14,7 @@
 class FilePath;
 }
 
-namespace url_parse {
+namespace url {
 struct Component;
 struct Parsed;
 }
diff --git a/chrome/common/net/url_fixer_upper_unittest.cc b/chrome/common/net/url_fixer_upper_unittest.cc
index a6e80c6..654b9fa 100644
--- a/chrome/common/net/url_fixer_upper_unittest.cc
+++ b/chrome/common/net/url_fixer_upper_unittest.cc
@@ -21,13 +21,13 @@
   };
 };
 
-namespace url_parse {
+namespace url {
 
 std::ostream& operator<<(std::ostream& os, const Component& part) {
   return os << "(begin=" << part.begin << ", len=" << part.len << ")";
 }
 
-}  // namespace url_parse
+}  // namespace url
 
 struct SegmentCase {
   const std::string input;
diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc
index 655cf7f..45f64b4 100644
--- a/chrome/common/pref_names.cc
+++ b/chrome/common/pref_names.cc
@@ -841,11 +841,6 @@
 const char kMultiProfileWarningShowDismissed[] =
     "settings.multi_profile_warning_show_dismissed";
 
-// A boolean pref recording whether user has dismissed the multiprofile
-// notification.
-const char kMultiProfileNotificationDismissed[] =
-    "settings.multi_profile_notification_dismissed";
-
 // A string pref that holds string enum values of how the user should behave
 // in a multiprofile session. See ChromeOsMultiProfileUserBehavior policy
 // for more details of the valid values.
@@ -1248,10 +1243,18 @@
 extern const char kSyncedNotificationFirstRun[] =
     "synced_notification.first_run";
 
-// Boolean pref indicating the welcome notification was dismissed by the user.
+// Boolean pref indicating the Chrome Now welcome notification was dismissed
+// by the user. Syncable.
+// Note: This is now read-only. The welcome notification writes the _local
+// version, below.
 extern const char kWelcomeNotificationDismissed[] =
     "message_center.welcome_notification_dismissed";
 
+// Boolean pref indicating the Chrome Now welcome notification was dismissed
+// by the user on this machine.
+extern const char kWelcomeNotificationDismissedLocal[] =
+    "message_center.welcome_notification_dismissed_local";
+
 // Boolean pref indicating the welcome notification was previously popped up.
 extern const char kWelcomeNotificationPreviouslyPoppedUp[] =
     "message_center.welcome_notification_previously_popped_up";
@@ -1328,7 +1331,6 @@
 const char kSSLVersionMin[] = "ssl.version_min";
 const char kSSLVersionMax[] = "ssl.version_max";
 const char kCipherSuiteBlacklist[] = "ssl.cipher_suites.blacklist";
-const char kEnableOriginBoundCerts[] = "ssl.origin_bound_certs.enabled";
 const char kDisableSSLRecordSplitting[] = "ssl.ssl_record_splitting.disabled";
 
 // A boolean pref of the EULA accepted flag.
@@ -1879,11 +1881,6 @@
 // The last used printer and its settings.
 const char kPrintPreviewStickySettings[] =
     "printing.print_preview_sticky_settings";
-// The root URL of the cloud print service.
-const char kCloudPrintServiceURL[] = "cloud_print.service_url";
-
-// The URL to use to sign in to cloud print.
-const char kCloudPrintSigninURL[] = "cloud_print.signin_url";
 
 // The last requested size of the dialog as it was closed.
 const char kCloudPrintDialogWidth[] = "cloud_print.dialog_size.width";
@@ -2080,6 +2077,12 @@
 // after recovery.
 const char kServerBackedDeviceState[] = "server_backed_device_state";
 
+// Customized wallpaper URL, which is already downloaded and scaled.
+// The URL from this preference must never be fetched. It is compared to the
+// URL from customization document to check if wallpaper URL has changed
+// since wallpaper was cached.
+const char kCustomizationDefaultWallpaperURL[] =
+    "customization.default_wallpaper_url";
 #endif
 
 // Whether there is a Flash version installed that supports clearing LSO data.
diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h
index ca8e160..bc4ff73 100644
--- a/chrome/common/pref_names.h
+++ b/chrome/common/pref_names.h
@@ -273,7 +273,6 @@
 extern const char kRAConsentFirstTime[];
 extern const char kMultiProfileNeverShowIntro[];
 extern const char kMultiProfileWarningShowDismissed[];
-extern const char kMultiProfileNotificationDismissed[];
 extern const char kMultiProfileUserBehavior[];
 extern const char kFirstRunTutorialShown[];
 extern const char kSAMLOfflineSigninTimeLimit[];
@@ -394,6 +393,7 @@
 extern const char kInitializedSyncedNotificationSendingServices[];
 extern const char kSyncedNotificationFirstRun[];
 extern const char kWelcomeNotificationDismissed[];
+extern const char kWelcomeNotificationDismissedLocal[];
 extern const char kWelcomeNotificationPreviouslyPoppedUp[];
 extern const char kWelcomeNotificationExpirationTimestamp[];
 
@@ -416,7 +416,6 @@
 extern const char kSSLVersionMin[];
 extern const char kSSLVersionMax[];
 extern const char kCipherSuiteBlacklist[];
-extern const char kEnableOriginBoundCerts[];
 extern const char kDisableSSLRecordSplitting[];
 
 extern const char kGLVendorString[];
@@ -631,8 +630,6 @@
 
 extern const char kPrintPreviewStickySettings[];
 extern const char kCloudPrintRoot[];
-extern const char kCloudPrintServiceURL[];
-extern const char kCloudPrintSigninURL[];
 extern const char kCloudPrintDialogWidth[];
 extern const char kCloudPrintDialogHeight[];
 extern const char kCloudPrintSigninDialogWidth[];
@@ -720,6 +717,7 @@
 extern const char kDeviceRegistered[];
 extern const char kUsedPolicyCertificates[];
 extern const char kServerBackedDeviceState[];
+extern const char kCustomizationDefaultWallpaperURL[];
 #endif
 
 extern const char kClearPluginLSODataEnabled[];
diff --git a/chrome/common/profile_management_switches.cc b/chrome/common/profile_management_switches.cc
deleted file mode 100644
index 1c83744..0000000
--- a/chrome/common/profile_management_switches.cc
+++ /dev/null
@@ -1,73 +0,0 @@
-// Copyright 2013 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 "chrome/common/profile_management_switches.h"
-
-#include "base/command_line.h"
-#include "base/metrics/field_trial.h"
-#include "chrome/common/chrome_switches.h"
-
-namespace {
-
-const char kNewProfileManagementFieldTrialName[] = "NewProfileManagement";
-
-bool CheckProfileManagementFlag(std::string command_switch, bool active_state) {
-  // Individiual flag settings take precedence.
-  if (CommandLine::ForCurrentProcess()->HasSwitch(command_switch)) {
-    return true;
-  }
-
-  // --new-profile-management flag always affects all switches.
-  if (CommandLine::ForCurrentProcess()->HasSwitch(
-        switches::kNewProfileManagement)) {
-    return active_state;
-  }
-
-  // NewProfileManagement experiment acts like above flag.
-  std::string trial_type =
-      base::FieldTrialList::FindFullName(kNewProfileManagementFieldTrialName);
-  if (!trial_type.empty()) {
-    if (trial_type == "Enabled")
-      return active_state;
-    if (trial_type == "Disabled")
-      return !active_state;
-  }
-
-  return false;
-}
-
-}  // namespace
-
-namespace switches {
-
-bool IsEnableWebBasedSignin() {
-  return CheckProfileManagementFlag(switches::kEnableWebBasedSignin, false);
-}
-
-bool IsGoogleProfileInfo() {
-  return CheckProfileManagementFlag(switches::kGoogleProfileInfo, true);
-}
-
-bool IsNewProfileManagement() {
-  return CheckProfileManagementFlag(switches::kNewProfileManagement, true);
-}
-
-bool IsNewAvatarMenu() {
-  bool is_new_avatar_menu =
-      CommandLine::ForCurrentProcess()->HasSwitch(switches::kNewAvatarMenu);
-  return is_new_avatar_menu || IsNewProfileManagement();
-}
-
-bool IsNewProfileManagementPreviewEnabled() {
-  bool is_new_avatar_menu =
-      CommandLine::ForCurrentProcess()->HasSwitch(switches::kNewAvatarMenu);
-  return is_new_avatar_menu && IsNewProfileManagement();
-}
-
-bool IsFastUserSwitching() {
-  return CommandLine::ForCurrentProcess()->HasSwitch(
-      switches::kFastUserSwitching);
-}
-
-}  // namespace switches
diff --git a/chrome/common/profile_management_switches.h b/chrome/common/profile_management_switches.h
deleted file mode 100644
index e05bb1b..0000000
--- a/chrome/common/profile_management_switches.h
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 2013 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.
-
-// These are functions to access various profile-management flags but with
-// possible overrides from Experiements.  This is done inside chrome/common
-// because it is accessed by files through the chrome/ directory tree.
-
-#ifndef CHROME_COMMON_PROFILE_MANAGEMENT_SWITCHES_H_
-#define CHROME_COMMON_PROFILE_MANAGEMENT_SWITCHES_H_
-
-namespace switches {
-
-// Enables the web-based sign in flow on Chrome desktop.
-bool IsEnableWebBasedSignin();
-
-// Enables using GAIA information to populate profile name and icon.
-bool IsGoogleProfileInfo();
-
-// Use new profile management system, including profile sign-out and new
-// choosers.
-bool IsNewProfileManagement();
-
-// Whether the new avatar menu is enabled, either because new profile management
-// is enabled or because the new profile management preview UI is enabled.
-bool IsNewAvatarMenu();
-
-// Whether the new profile management preview has been enabled.
-bool IsNewProfileManagementPreviewEnabled();
-
-// Checks whether the flag for fast user switching is enabled.
-bool IsFastUserSwitching();
-
-}  // namespace switches
-
-#endif  // CHROME_COMMON_PROFILE_MANAGEMENT_SWITCHES_H_
diff --git a/chrome/docs/redirects.json b/chrome/docs/redirects.json
deleted file mode 100644
index 2f16825..0000000
--- a/chrome/docs/redirects.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-  "": "index"
-}
diff --git a/chrome/installer/linux/sysroot_scripts/install-debian.wheezy.sysroot.py b/chrome/installer/linux/sysroot_scripts/install-debian.wheezy.sysroot.py
index 4010668..87158fc 100755
--- a/chrome/installer/linux/sysroot_scripts/install-debian.wheezy.sysroot.py
+++ b/chrome/installer/linux/sysroot_scripts/install-debian.wheezy.sysroot.py
@@ -15,6 +15,7 @@
 # image. The image will normally need to be rebuilt every time chrome's build
 # dependancies are changed.
 
+import hashlib
 import platform
 import optparse
 import os
@@ -27,13 +28,27 @@
 SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
 URL_PREFIX = 'https://commondatastorage.googleapis.com'
 URL_PATH = 'chrome-linux-sysroot/toolchain'
-REVISION = 259398
+REVISION = 264817
 TARBALL_AMD64 = 'debian_wheezy_amd64_sysroot.tgz'
 TARBALL_I386 = 'debian_wheezy_i386_sysroot.tgz'
+TARBALL_AMD64_SHA1SUM = '74b7231e12aaf45c5c5489d9aebb56bd6abb3653'
+TARBALL_I386_SHA1SUM = 'fe3d284926839683b00641bc66c9023f872ea4b4'
 SYSROOT_DIR_AMD64 = 'debian_wheezy_amd64-sysroot'
 SYSROOT_DIR_I386 = 'debian_wheezy_i386-sysroot'
 
 
+def get_sha1(filename):
+  sha1 = hashlib.sha1()
+  with open(filename, 'rb') as f:
+    while True:
+      # Read in 1mb chunks, so it doesn't all have to be loaded into memory.
+      chunk = f.read(1024*1024)
+      if not chunk:
+        break
+      sha1.update(chunk)
+  return sha1.hexdigest()
+
+
 def main(args):
   if options.arch not in ['amd64', 'i386']:
     print 'Unknown architecture: %s' % options.arch
@@ -81,9 +96,11 @@
   if options.arch == 'amd64':
     sysroot = os.path.join(linux_dir, SYSROOT_DIR_AMD64)
     tarball_filename = TARBALL_AMD64
+    tarball_sha1sum = TARBALL_AMD64_SHA1SUM
   else:
     sysroot = os.path.join(linux_dir, SYSROOT_DIR_I386)
     tarball_filename = TARBALL_I386
+    tarball_sha1sum = TARBALL_I386_SHA1SUM
   url = '%s/%s/%s/%s' % (URL_PREFIX, URL_PATH, REVISION, tarball_filename)
 
   stamp = os.path.join(sysroot, '.stamp')
@@ -100,6 +117,11 @@
   os.mkdir(sysroot)
   tarball = os.path.join(sysroot, tarball_filename)
   subprocess.check_call(['curl', '-L', url, '-o', tarball])
+  sha1sum = get_sha1(tarball)
+  if sha1sum != tarball_sha1sum:
+    print 'Tarball sha1sum is wrong.'
+    print 'Expected %s, actual: %s' % (tarball_sha1sum, sha1sum)
+    return 1
   subprocess.check_call(['tar', 'xf', tarball, '-C', sysroot])
   os.remove(tarball)
 
diff --git a/chrome/installer/linux/sysroot_scripts/packagelist.debian.wheezy.amd64 b/chrome/installer/linux/sysroot_scripts/packagelist.debian.wheezy.amd64
index c93eccb..7295de9 100644
--- a/chrome/installer/linux/sysroot_scripts/packagelist.debian.wheezy.amd64
+++ b/chrome/installer/linux/sysroot_scripts/packagelist.debian.wheezy.amd64
@@ -58,6 +58,7 @@
 main/k/krb5/libkrb5support0_1.10.1+dfsg-5+deb7u1_amd64.deb
 main/libc/libcap2/libcap2_2.22-1.2_amd64.deb
 main/libc/libcap2/libcap-dev_2.22-1.2_amd64.deb
+main/libd/libdrm/libdrm2_2.4.40-1~deb7u2_amd64.deb
 main/libe/libexif/libexif12_0.6.20-3_amd64.deb
 main/libe/libexif/libexif-dev_0.6.20-3_amd64.deb
 main/libf/libffi/libffi5_3.0.10-3_amd64.deb
@@ -75,10 +76,12 @@
 main/libt/libtasn1-3/libtasn1-3_2.13-2_amd64.deb
 main/libx/libx11/libx11-6_1.5.0-1+deb7u1_amd64.deb
 main/libx/libx11/libx11-dev_1.5.0-1+deb7u1_amd64.deb
+main/libx/libx11/libx11-xcb1_1.5.0-1+deb7u1_amd64.deb
 main/libx/libxau/libxau6_1.0.7-1_amd64.deb
 main/libx/libxau/libxau-dev_1.0.7-1_amd64.deb
 main/libx/libxcb/libxcb1_1.8.1-2+deb7u1_amd64.deb
 main/libx/libxcb/libxcb1-dev_1.8.1-2+deb7u1_amd64.deb
+main/libx/libxcb/libxcb-glx0_1.8.1-2+deb7u1_amd64.deb
 main/libx/libxcb/libxcb-render0_1.8.1-2+deb7u1_amd64.deb
 main/libx/libxcb/libxcb-render0-dev_1.8.1-2+deb7u1_amd64.deb
 main/libx/libxcb/libxcb-shm0_1.8.1-2+deb7u1_amd64.deb
@@ -108,7 +111,12 @@
 main/libx/libxt/libxt-dev_1.1.3-1+deb7u1_amd64.deb
 main/libx/libxtst/libxtst6_1.2.1-1+deb7u1_amd64.deb
 main/libx/libxtst/libxtst-dev_1.2.1-1+deb7u1_amd64.deb
+main/libx/libxxf86vm/libxxf86vm1_1.1.2-1+deb7u1_amd64.deb
 main/l/linux/linux-libc-dev_3.2.54-2_amd64.deb
+main/m/mesa/libgl1-mesa-dev_8.0.5-4+deb7u2_amd64.deb
+main/m/mesa/libgl1-mesa-glx_8.0.5-4+deb7u2_amd64.deb
+main/m/mesa/libglapi-mesa_8.0.5-4+deb7u2_amd64.deb
+main/m/mesa/mesa-common-dev_8.0.5-4+deb7u2_amd64.deb
 main/n/nspr/libnspr4_4.9.2-1+deb7u1_amd64.deb
 main/n/nspr/libnspr4-dev_4.9.2-1+deb7u1_amd64.deb
 main/n/nss/libnss3_3.14.5-1_amd64.deb
diff --git a/chrome/installer/linux/sysroot_scripts/packagelist.debian.wheezy.i386 b/chrome/installer/linux/sysroot_scripts/packagelist.debian.wheezy.i386
index ab63a1e..c0371a3 100644
--- a/chrome/installer/linux/sysroot_scripts/packagelist.debian.wheezy.i386
+++ b/chrome/installer/linux/sysroot_scripts/packagelist.debian.wheezy.i386
@@ -58,6 +58,7 @@
 main/k/krb5/libkrb5support0_1.10.1+dfsg-5+deb7u1_i386.deb
 main/libc/libcap2/libcap2_2.22-1.2_i386.deb
 main/libc/libcap2/libcap-dev_2.22-1.2_i386.deb
+main/libd/libdrm/libdrm2_2.4.40-1~deb7u2_i386.deb
 main/libe/libexif/libexif12_0.6.20-3_i386.deb
 main/libe/libexif/libexif-dev_0.6.20-3_i386.deb
 main/libf/libffi/libffi5_3.0.10-3_i386.deb
@@ -75,10 +76,12 @@
 main/libt/libtasn1-3/libtasn1-3_2.13-2_i386.deb
 main/libx/libx11/libx11-6_1.5.0-1+deb7u1_i386.deb
 main/libx/libx11/libx11-dev_1.5.0-1+deb7u1_i386.deb
+main/libx/libx11/libx11-xcb1_1.5.0-1+deb7u1_i386.deb
 main/libx/libxau/libxau6_1.0.7-1_i386.deb
 main/libx/libxau/libxau-dev_1.0.7-1_i386.deb
 main/libx/libxcb/libxcb1_1.8.1-2+deb7u1_i386.deb
 main/libx/libxcb/libxcb1-dev_1.8.1-2+deb7u1_i386.deb
+main/libx/libxcb/libxcb-glx0_1.8.1-2+deb7u1_i386.deb
 main/libx/libxcb/libxcb-render0_1.8.1-2+deb7u1_i386.deb
 main/libx/libxcb/libxcb-render0-dev_1.8.1-2+deb7u1_i386.deb
 main/libx/libxcb/libxcb-shm0_1.8.1-2+deb7u1_i386.deb
@@ -108,7 +111,12 @@
 main/libx/libxt/libxt-dev_1.1.3-1+deb7u1_i386.deb
 main/libx/libxtst/libxtst6_1.2.1-1+deb7u1_i386.deb
 main/libx/libxtst/libxtst-dev_1.2.1-1+deb7u1_i386.deb
+main/libx/libxxf86vm/libxxf86vm1_1.1.2-1+deb7u1_i386.deb
 main/l/linux/linux-libc-dev_3.2.54-2_i386.deb
+main/m/mesa/libgl1-mesa-dev_8.0.5-4+deb7u2_i386.deb
+main/m/mesa/libgl1-mesa-glx_8.0.5-4+deb7u2_i386.deb
+main/m/mesa/libglapi-mesa_8.0.5-4+deb7u2_i386.deb
+main/m/mesa/mesa-common-dev_8.0.5-4+deb7u2_i386.deb
 main/n/nspr/libnspr4_4.9.2-1+deb7u1_i386.deb
 main/n/nspr/libnspr4-dev_4.9.2-1+deb7u1_i386.deb
 main/n/nss/libnss3_3.14.5-1_i386.deb
diff --git a/chrome/installer/linux/sysroot_scripts/sysroot-creator-debian.wheezy.sh b/chrome/installer/linux/sysroot_scripts/sysroot-creator-debian.wheezy.sh
index 7eabe61..fb3e043 100755
--- a/chrome/installer/linux/sysroot_scripts/sysroot-creator-debian.wheezy.sh
+++ b/chrome/installer/linux/sysroot_scripts/sysroot-creator-debian.wheezy.sh
@@ -71,6 +71,7 @@
   libdbus-1-3 \
   libdbus-1-dev \
   libdbus-glib-1-2 \
+  libdrm2 \
   libelf1 \
   libelf-dev \
   libexif12 \
@@ -91,6 +92,9 @@
   libgcrypt11-dev \
   libgdk-pixbuf2.0-0 \
   libgdk-pixbuf2.0-dev \
+  libgl1-mesa-dev \
+  libgl1-mesa-glx \
+  libglapi-mesa \
   libglib2.0-0 \
   libglib2.0-dev \
   libgnome-keyring0 \
@@ -151,10 +155,12 @@
   libudev-dev \
   libx11-6 \
   libx11-dev \
+  libx11-xcb1 \
   libxau6 \
   libxau-dev \
   libxcb1 \
   libxcb1-dev \
+  libxcb-glx0 \
   libxcb-render0 \
   libxcb-render0-dev \
   libxcb-shm0 \
@@ -184,7 +190,9 @@
   libxt-dev \
   libxtst6 \
   libxtst-dev \
+  libxxf86vm1 \
   linux-libc-dev \
+  mesa-common-dev \
   speech-dispatcher \
   x11proto-composite-dev \
   x11proto-core-dev \
@@ -202,8 +210,6 @@
 
 readonly DEBIAN_DEP_LIST_AMD64="${SCRIPT_DIR}/packagelist.debian.wheezy.amd64"
 readonly DEBIAN_DEP_LIST_I386="${SCRIPT_DIR}/packagelist.debian.wheezy.i386"
-readonly DEBIAN_DEP_FILES_AMD64="$(cat ${DEBIAN_DEP_LIST_AMD64})"
-readonly DEBIAN_DEP_FILES_I386="$(cat ${DEBIAN_DEP_LIST_I386})"
 
 ######################################################################
 # Helper
@@ -310,14 +316,14 @@
 
 
 ClearInstallDir() {
-  Banner "clearing dirs in ${INSTALL_ROOT}"
+  Banner "Clearing dirs in ${INSTALL_ROOT}"
   rm -rf ${INSTALL_ROOT}/*
 }
 
 
 CreateTarBall() {
   local tarball=$1
-  Banner "creating tar ball ${tarball}"
+  Banner "Creating tar ball ${tarball}"
   tar zcf ${tarball} -C ${INSTALL_ROOT} .
 }
 
@@ -333,6 +339,46 @@
   fi
 }
 
+ExtractPackageBz2() {
+  bzcat "$1" | egrep '^(Package:|Filename:|SHA256:) ' > "$2"
+}
+
+GeneratePackageListAmd64() {
+  local output_file="$1"
+  local package_list="${TMP}/Packages.wheezy_amd64.bz2"
+  DownloadOrCopy ${PACKAGE_LIST_AMD64} ${package_list}
+  VerifyPackageListing ${PACKAGE_FILE_AMD64} ${package_list}
+  ExtractPackageBz2 "$package_list" "${TMP}/Packages"
+
+  GeneratePackageList "$output_file" "${DEBIAN_PACKAGES}"
+}
+
+GeneratePackageListI386() {
+  local output_file="$1"
+  local package_list="${TMP}/Packages.wheezy_i386.bz2"
+  DownloadOrCopy ${PACKAGE_LIST_I386} ${package_list}
+  VerifyPackageListing ${PACKAGE_FILE_I386} ${package_list}
+  ExtractPackageBz2 "$package_list" "${TMP}/Packages"
+
+  GeneratePackageList "$output_file" "${DEBIAN_PACKAGES}"
+}
+
+StripChecksumsFromPackageList() {
+  local package_file="$1"
+  sed -i 's/ [a-f0-9]\{64\}$//' "$package_file"
+}
+
+VerifyPackageFilesMatch() {
+  local downloaded_package_file="$1"
+  local stored_package_file="$2"
+  diff -u "$downloaded_package_file" "$stored_package_file"
+  if [ "$?" -ne "0" ]; then
+    echo "ERROR: downloaded package files does not match $2."
+    echo "You may need to run UpdatePackageLists."
+    exit 1
+  fi
+}
+
 ######################################################################
 #
 ######################################################################
@@ -390,16 +436,27 @@
 
   mkdir -p ${TMP}/debian-packages
   mkdir -p ${INSTALL_ROOT}
-  for file in $@ ; do
+  while (( "$#" )); do
+    local file="$1"
     local package="${TMP}/debian-packages/${file##*/}"
-    Banner "installing ${file}"
+    shift
+    local sha256sum="$1"
+    shift
+    if [ "${#sha256sum}" -ne "64" ]; then
+      echo "Bad sha256sum from package list"
+      exit 1
+    fi
+
+    Banner "Installing ${file}"
     DownloadOrCopy ${DEBIAN_REPO}/pool/${file} ${package}
-    SubBanner "extracting to ${INSTALL_ROOT}"
     if [ ! -s "${package}" ] ; then
       echo
       echo "ERROR: bad package ${package}"
       exit 1
     fi
+    echo "${sha256sum}  ${package}" | sha256sum --quiet -c
+
+    SubBanner "Extracting to ${INSTALL_ROOT}"
     dpkg --fsys-tarfile ${package}\
       | tar -xvf - --exclude=./usr/share -C ${INSTALL_ROOT}
   done
@@ -407,7 +464,7 @@
 
 
 CleanupJailSymlinks() {
-  Banner "jail symlink cleanup"
+  Banner "Jail symlink cleanup"
 
   SAVEDPWD=$(pwd)
   cd ${INSTALL_ROOT}
@@ -453,7 +510,12 @@
 BuildSysrootAmd64() {
   CheckBuildSysrootArgs $@
   ClearInstallDir
-  InstallIntoSysroot ${DEBIAN_DEP_FILES_AMD64}
+  local package_file="$TMP/package_with_sha256sum_amd64"
+  GeneratePackageListAmd64 "$package_file"
+  local files_and_sha256sums="$(cat ${package_file})"
+  StripChecksumsFromPackageList "$package_file"
+  VerifyPackageFilesMatch "$package_file" "$DEBIAN_DEP_LIST_AMD64"
+  InstallIntoSysroot ${files_and_sha256sums}
   CleanupJailSymlinks
   HacksAndPatchesAmd64
   CreateTarBall "$1"
@@ -466,7 +528,12 @@
 BuildSysrootI386() {
   CheckBuildSysrootArgs $@
   ClearInstallDir
-  InstallIntoSysroot ${DEBIAN_DEP_FILES_I386}
+  local package_file="$TMP/package_with_sha256sum_amd64"
+  GeneratePackageListI386 "$package_file"
+  local files_and_sha256sums="$(cat ${package_file})"
+  StripChecksumsFromPackageList "$package_file"
+  VerifyPackageFilesMatch "$package_file" "$DEBIAN_DEP_LIST_I386"
+  InstallIntoSysroot ${files_and_sha256sums}
   CleanupJailSymlinks
   HacksAndPatchesI386
   CreateTarBall "$1"
@@ -507,25 +574,13 @@
 
   echo "Verifying: ${output_file}"
   local checksums=$(grep ${file_path} ${release_file} | cut -d " " -f 2)
-  local md5sum=$(echo ${checksums} | cut -d " " -f 1)
-  local sha1sum=$(echo ${checksums} | cut -d " " -f 2)
   local sha256sum=$(echo ${checksums} | cut -d " " -f 3)
 
-  if [ "${#md5sum}" -ne "32" ]; then
-    echo "Bad md5sum from ${RELEASE_LIST}"
-    exit 1
-  fi
-  if [ "${#sha1sum}" -ne "40" ]; then
-    echo "Bad sha1sum from ${RELEASE_LIST}"
-    exit 1
-  fi
   if [ "${#sha256sum}" -ne "64" ]; then
     echo "Bad sha256sum from ${RELEASE_LIST}"
     exit 1
   fi
 
-  echo "${md5sum}  ${output_file}" | md5sum --quiet -c
-  echo "${sha1sum}  ${output_file}" | sha1sum --quiet -c
   echo "${sha256sum}  ${output_file}" | sha256sum --quiet -c
 }
 
@@ -536,20 +591,28 @@
 #     to output file.
 #
 GeneratePackageList() {
-  local output_file=$1
+  local output_file="$1"
   echo "Updating: ${output_file}"
-  /bin/rm -f ${output_file}
+  /bin/rm -f "${output_file}"
   shift
   for pkg in $@ ; do
-    local pkg_full=$(grep -A 1 " ${pkg}\$" ${TMP}/Packages | egrep -o "pool/.*")
+    local pkg_full=$(grep -A 1 " ${pkg}\$" "${TMP}/Packages" | \
+      egrep -o "pool/.*")
     if [ -z "${pkg_full}" ]; then
         echo "ERROR: missing package: $pkg"
         exit 1
     fi
-    echo $pkg_full | sed "s/^pool\///" >> $output_file
+    local pkg_nopool=$(echo "$pkg_full" | sed "s/^pool\///")
+    local sha256sum=$(grep -A 4 " ${pkg}\$" "${TMP}/Packages" | \
+      grep ^SHA256: | sed 's/^SHA256: //')
+    if [ "${#sha256sum}" -ne "64" ]; then
+      echo "Bad sha256sum from Packages"
+      exit 1
+    fi
+    echo $pkg_nopool $sha256sum >> "$output_file"
   done
   # sort -o does an in-place sort of this file
-  sort $output_file -o $output_file
+  sort "$output_file" -o "$output_file"
 }
 
 #@
@@ -558,12 +621,8 @@
 #@     Regenerate the package lists such that they contain an up-to-date
 #@     list of URLs within the Debian archive. (For amd64)
 UpdatePackageListsAmd64() {
-  local package_list="${TMP}/Packages.wheezy_amd64.bz2"
-  DownloadOrCopy ${PACKAGE_LIST_AMD64} ${package_list}
-  VerifyPackageListing ${PACKAGE_FILE_AMD64} ${package_list}
-  bzcat ${package_list} | egrep '^(Package:|Filename:)' > ${TMP}/Packages
-
-  GeneratePackageList ${DEBIAN_DEP_LIST_AMD64} "${DEBIAN_PACKAGES}"
+  GeneratePackageListAmd64 "$DEBIAN_DEP_LIST_AMD64"
+  StripChecksumsFromPackageList "$DEBIAN_DEP_LIST_AMD64"
 }
 
 #@
@@ -572,12 +631,8 @@
 #@     Regenerate the package lists such that they contain an up-to-date
 #@     list of URLs within the Debian archive. (For i386)
 UpdatePackageListsI386() {
-  local package_list="${TMP}/Packages.wheezy_i386.bz2"
-  DownloadOrCopy ${PACKAGE_LIST_I386} ${package_list}
-  VerifyPackageListing ${PACKAGE_FILE_I386} ${package_list}
-  bzcat ${package_list} | egrep '^(Package:|Filename:)' > ${TMP}/Packages
-
-  GeneratePackageList ${DEBIAN_DEP_LIST_I386} "${DEBIAN_PACKAGES}"
+  GeneratePackageListI386 "$DEBIAN_DEP_LIST_I386"
+  StripChecksumsFromPackageList "$DEBIAN_DEP_LIST_I386"
 }
 
 if [ $# -eq 0 ] ; then
diff --git a/chrome/installer/setup/setup_main.cc b/chrome/installer/setup/setup_main.cc
index c3f2f93..5b64ab6 100644
--- a/chrome/installer/setup/setup_main.cc
+++ b/chrome/installer/setup/setup_main.cc
@@ -855,10 +855,8 @@
 // accepted.
 bool CreateEULASentinel(BrowserDistribution* dist) {
   base::FilePath eula_sentinel;
-  if (!InstallUtil::GetSentinelFilePath(installer::kEULASentinelFile, dist,
-                                        &eula_sentinel)) {
+  if (!InstallUtil::GetEULASentinelFilePath(&eula_sentinel))
     return false;
-  }
 
   return (base::CreateDirectory(eula_sentinel.DirName()) &&
           base::WriteFile(eula_sentinel, "", 0) != -1);
diff --git a/chrome/installer/util/advanced_firewall_manager_win.cc b/chrome/installer/util/advanced_firewall_manager_win.cc
new file mode 100644
index 0000000..80d78c1
--- /dev/null
+++ b/chrome/installer/util/advanced_firewall_manager_win.cc
@@ -0,0 +1,199 @@
+// 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.
+
+#include "chrome/installer/util/advanced_firewall_manager_win.h"
+
+#include "base/guid.h"
+#include "base/logging.h"
+#include "base/strings/stringprintf.h"
+#include "base/strings/utf_string_conversions.h"
+#include "base/win/scoped_bstr.h"
+#include "base/win/scoped_variant.h"
+
+namespace installer {
+
+AdvancedFirewallManager::AdvancedFirewallManager() {}
+
+AdvancedFirewallManager::~AdvancedFirewallManager() {}
+
+bool AdvancedFirewallManager::Init(const base::string16& app_name,
+                                   const base::FilePath& app_path) {
+  firewall_rules_ = NULL;
+  HRESULT hr = firewall_policy_.CreateInstance(CLSID_NetFwPolicy2);
+  if (FAILED(hr)) {
+    DLOG(ERROR) << logging::SystemErrorCodeToString(hr);
+    firewall_policy_ = NULL;
+    return false;
+  }
+  hr = firewall_policy_->get_Rules(firewall_rules_.Receive());
+  if (FAILED(hr)) {
+    DLOG(ERROR) << logging::SystemErrorCodeToString(hr);
+    firewall_rules_ = NULL;
+    return false;
+  }
+  app_name_ = app_name;
+  app_path_ = app_path;
+  return true;
+}
+
+bool AdvancedFirewallManager::IsFirewallEnabled() {
+  long profile_types = 0;
+  HRESULT hr = firewall_policy_->get_CurrentProfileTypes(&profile_types);
+  if (FAILED(hr))
+    return false;
+  // The most-restrictive active profile takes precedence.
+  const NET_FW_PROFILE_TYPE2 kProfileTypes[] = {
+    NET_FW_PROFILE2_PUBLIC,
+    NET_FW_PROFILE2_PRIVATE,
+    NET_FW_PROFILE2_DOMAIN
+  };
+  for (size_t i = 0; i < arraysize(kProfileTypes); ++i) {
+    if ((profile_types & kProfileTypes[i]) != 0) {
+      VARIANT_BOOL enabled = VARIANT_TRUE;
+      hr = firewall_policy_->get_FirewallEnabled(kProfileTypes[i], &enabled);
+      // Assume the firewall is enabled if we can't determine.
+      if (FAILED(hr) || enabled != VARIANT_FALSE)
+        return true;
+    }
+  }
+  return false;
+}
+
+bool AdvancedFirewallManager::HasAnyRule() {
+  std::vector<base::win::ScopedComPtr<INetFwRule> > rules;
+  GetAllRules(&rules);
+  return !rules.empty();
+}
+
+bool AdvancedFirewallManager::AddUDPRule(const base::string16& rule_name,
+                                         const base::string16& description,
+                                         uint16_t port) {
+  // Delete the rule. According MDSN |INetFwRules::Add| should replace rule with
+  // same "rule identifier". It's not clear what is "rule identifier", but it
+  // can successfully create many rule with same name.
+  DeleteRuleByName(rule_name);
+
+  // Create the rule and add it to the rule set (only succeeds if elevated).
+  base::win::ScopedComPtr<INetFwRule> udp_rule =
+      CreateUDPRule(rule_name, description, port);
+  if (!udp_rule.get())
+    return false;
+
+  HRESULT hr = firewall_rules_->Add(udp_rule);
+  DLOG_IF(ERROR, FAILED(hr)) << logging::SystemErrorCodeToString(hr);
+  return SUCCEEDED(hr);
+}
+
+void AdvancedFirewallManager::DeleteRuleByName(
+    const base::string16& rule_name) {
+  std::vector<base::win::ScopedComPtr<INetFwRule> > rules;
+  GetAllRules(&rules);
+  for (size_t i = 0; i < rules.size(); ++i) {
+    base::win::ScopedBstr name;
+    HRESULT hr = rules[i]->get_Name(name.Receive());
+    if (SUCCEEDED(hr) && name && base::string16(name) == rule_name) {
+      DeleteRule(rules[i]);
+    }
+  }
+}
+
+void AdvancedFirewallManager::DeleteRule(
+    base::win::ScopedComPtr<INetFwRule> rule) {
+  // Rename rule to unique name and delete by unique name. We can't just delete
+  // rule by name. Multiple rules with the same name and different app are
+  // possible.
+  base::win::ScopedBstr unique_name(
+      base::UTF8ToUTF16(base::GenerateGUID()).c_str());
+  rule->put_Name(unique_name);
+  firewall_rules_->Remove(unique_name);
+}
+
+void AdvancedFirewallManager::DeleteAllRules() {
+  std::vector<base::win::ScopedComPtr<INetFwRule> > rules;
+  GetAllRules(&rules);
+  for (size_t i = 0; i < rules.size(); ++i) {
+    DeleteRule(rules[i]);
+  }
+}
+
+base::win::ScopedComPtr<INetFwRule> AdvancedFirewallManager::CreateUDPRule(
+    const base::string16& rule_name,
+    const base::string16& description,
+    uint16_t port) {
+  base::win::ScopedComPtr<INetFwRule> udp_rule;
+
+  HRESULT hr = udp_rule.CreateInstance(CLSID_NetFwRule);
+  if (FAILED(hr)) {
+    DLOG(ERROR) << logging::SystemErrorCodeToString(hr);
+    return base::win::ScopedComPtr<INetFwRule>();
+  }
+
+  udp_rule->put_Name(base::win::ScopedBstr(rule_name.c_str()));
+  udp_rule->put_Description(base::win::ScopedBstr(description.c_str()));
+  udp_rule->put_ApplicationName(
+      base::win::ScopedBstr(app_path_.value().c_str()));
+  udp_rule->put_Protocol(NET_FW_IP_PROTOCOL_UDP);
+  udp_rule->put_Direction(NET_FW_RULE_DIR_IN);
+  udp_rule->put_Enabled(VARIANT_TRUE);
+  udp_rule->put_LocalPorts(
+      base::win::ScopedBstr(base::StringPrintf(L"%u", port).c_str()));
+  udp_rule->put_Grouping(base::win::ScopedBstr(app_name_.c_str()));
+  udp_rule->put_Profiles(NET_FW_PROFILE2_ALL);
+  udp_rule->put_Action(NET_FW_ACTION_ALLOW);
+
+  return udp_rule;
+}
+
+void AdvancedFirewallManager::GetAllRules(
+    std::vector<base::win::ScopedComPtr<INetFwRule> >* rules) {
+  base::win::ScopedComPtr<IUnknown> rules_enum_unknown;
+  HRESULT hr = firewall_rules_->get__NewEnum(rules_enum_unknown.Receive());
+  if (FAILED(hr)) {
+    DLOG(ERROR) << logging::SystemErrorCodeToString(hr);
+    return;
+  }
+
+  base::win::ScopedComPtr<IEnumVARIANT> rules_enum;
+  hr = rules_enum.QueryFrom(rules_enum_unknown);
+  if (FAILED(hr)) {
+    DLOG(ERROR) << logging::SystemErrorCodeToString(hr);
+    return;
+  }
+
+  for (;;) {
+    base::win::ScopedVariant rule_var;
+    hr = rules_enum->Next(1, rule_var.Receive(), NULL);
+    DLOG_IF(ERROR, FAILED(hr)) << logging::SystemErrorCodeToString(hr);
+    if (hr != S_OK)
+      break;
+    DCHECK_EQ(VT_DISPATCH, rule_var.type());
+    if (VT_DISPATCH != rule_var.type()) {
+      DLOG(ERROR) << "Unexpected type";
+      continue;
+    }
+    base::win::ScopedComPtr<INetFwRule> rule;
+    hr = rule.QueryFrom(V_DISPATCH(&rule_var));
+    if (FAILED(hr)) {
+      DLOG(ERROR) << logging::SystemErrorCodeToString(hr);
+      continue;
+    }
+
+    base::win::ScopedBstr path;
+    hr = rule->get_ApplicationName(path.Receive());
+    if (FAILED(hr)) {
+      DLOG(ERROR) << logging::SystemErrorCodeToString(hr);
+      continue;
+    }
+
+    if (!path ||
+        !base::FilePath::CompareEqualIgnoreCase(static_cast<BSTR>(path),
+                                                app_path_.value())) {
+      continue;
+    }
+
+    rules->push_back(rule);
+  }
+}
+
+}  // namespace installer
diff --git a/chrome/installer/util/advanced_firewall_manager_win.h b/chrome/installer/util/advanced_firewall_manager_win.h
new file mode 100644
index 0000000..91b984d
--- /dev/null
+++ b/chrome/installer/util/advanced_firewall_manager_win.h
@@ -0,0 +1,72 @@
+// 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.
+
+#ifndef CHROME_INSTALLER_UTIL_ADVANCED_FIREWALL_MANAGER_WIN_H_
+#define CHROME_INSTALLER_UTIL_ADVANCED_FIREWALL_MANAGER_WIN_H_
+
+#include <windows.h>
+#include <netfw.h>
+#include <vector>
+
+#include "base/files/file_path.h"
+#include "base/strings/string16.h"
+#include "base/win/scoped_comptr.h"
+
+namespace installer {
+
+// Manages firewall rules using Advanced Security Windows API. The API is
+// available on Windows Vista and later. Most methods need elevation.
+class AdvancedFirewallManager {
+ public:
+  AdvancedFirewallManager();
+  ~AdvancedFirewallManager();
+
+  // Initializes object to manage application win name |app_name| and path
+  // |app_path|.
+  bool Init(const base::string16& app_name, const base::FilePath& app_path);
+
+  // Returns true if firewall is enabled.
+  bool IsFirewallEnabled();
+
+  // Returns true if there is any rule for the application.
+  bool HasAnyRule();
+
+  // Adds a firewall rule allowing inbound connections to the application on UDP
+  // port |port|. Replaces the rule if it already exists. Needs elevation.
+  bool AddUDPRule(const base::string16& rule_name,
+                  const base::string16& description,
+                  uint16_t port);
+
+  // Deletes all rules with specified name. Needs elevation.
+  void DeleteRuleByName(const base::string16& rule_name);
+
+  // Deletes all rules for current app. Needs elevation.
+  void DeleteAllRules();
+
+ private:
+  friend class AdvancedFirewallManagerTest;
+
+  // Creates a firewall rule allowing inbound connections to UDP port |port|.
+  base::win::ScopedComPtr<INetFwRule> CreateUDPRule(
+      const base::string16& rule_name,
+      const base::string16& description,
+      uint16_t port);
+
+  // Returns the list of rules applying to the application.
+  void GetAllRules(std::vector<base::win::ScopedComPtr<INetFwRule> >* rules);
+
+  // Deletes rules. Needs elevation.
+  void DeleteRule(base::win::ScopedComPtr<INetFwRule> rule);
+
+  base::string16 app_name_;
+  base::FilePath app_path_;
+  base::win::ScopedComPtr<INetFwPolicy2> firewall_policy_;
+  base::win::ScopedComPtr<INetFwRules> firewall_rules_;
+
+  DISALLOW_COPY_AND_ASSIGN(AdvancedFirewallManager);
+};
+
+}  // namespace installer
+
+#endif  // CHROME_INSTALLER_UTIL_ADVANCED_FIREWALL_MANAGER_WIN_H_
diff --git a/chrome/installer/util/advanced_firewall_manager_win_unittest.cc b/chrome/installer/util/advanced_firewall_manager_win_unittest.cc
new file mode 100644
index 0000000..4d96282
--- /dev/null
+++ b/chrome/installer/util/advanced_firewall_manager_win_unittest.cc
@@ -0,0 +1,87 @@
+// 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.
+
+#include "chrome/installer/util/advanced_firewall_manager_win.h"
+
+#include "base/path_service.h"
+#include "base/process/process_handle.h"
+#include "base/win/scoped_bstr.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace installer {
+
+class AdvancedFirewallManagerTest : public ::testing::Test {
+ public:
+  AdvancedFirewallManagerTest() : skip_test_(true) {}
+
+ protected:
+  // Sets up the test fixture.
+  virtual void SetUp() OVERRIDE {
+    base::IntegrityLevel level = base::INTEGRITY_UNKNOWN;
+    if (!GetProcessIntegrityLevel(base::GetCurrentProcessHandle(), &level) ||
+        level != base::HIGH_INTEGRITY) {
+      LOG(WARNING) << "XP or not elevated. Skipping the test.";
+      return;
+    };
+    skip_test_ = false;
+    base::FilePath exe_path;
+    PathService::Get(base::FILE_EXE, &exe_path);
+    EXPECT_TRUE(manager_.Init(L"AdvancedFirewallManagerTest", exe_path));
+    manager_.DeleteAllRules();
+  }
+
+  // Tears down the test fixture.
+  virtual void TearDown() OVERRIDE {
+    if (!skip_test_)
+      manager_.DeleteAllRules();
+  }
+
+  // Forwards calls to |manager_| to avoid making each test a friend of
+  // |AdvancedFirewallManager|.
+  void GetAllRules(std::vector<base::string16>* rule_names) {
+    std::vector<base::win::ScopedComPtr<INetFwRule> > rules;
+    manager_.GetAllRules(&rules);
+    for (size_t i = 0; i < rules.size(); ++i) {
+      base::win::ScopedBstr name;
+      EXPECT_TRUE(SUCCEEDED(rules[i]->get_Name(name.Receive())));
+      EXPECT_TRUE(name);
+      rule_names->push_back(base::string16(name));
+    }
+  }
+
+  bool skip_test_;
+  AdvancedFirewallManager manager_;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(AdvancedFirewallManagerTest);
+};
+
+TEST_F(AdvancedFirewallManagerTest, NoRule) {
+  if (skip_test_)
+    return;
+  std::vector<base::string16> rule_names;
+  GetAllRules(&rule_names);
+  EXPECT_TRUE(rule_names.empty());
+}
+
+TEST_F(AdvancedFirewallManagerTest, AddRule) {
+  if (skip_test_)
+    return;
+  const wchar_t kRuleName[] = L"Port56789";
+  EXPECT_TRUE(manager_.AddUDPRule(kRuleName, L"Test Description", 56789));
+
+  std::vector<base::string16> rule_names;
+  GetAllRules(&rule_names);
+  ASSERT_EQ(1u, rule_names.size());
+  EXPECT_EQ(rule_names[0], kRuleName);
+  EXPECT_TRUE(manager_.HasAnyRule());
+
+  manager_.DeleteRuleByName(kRuleName);
+  rule_names.clear();
+  GetAllRules(&rule_names);
+  EXPECT_TRUE(rule_names.empty());
+  EXPECT_FALSE(manager_.HasAnyRule());
+}
+
+}  // namespace installer
diff --git a/chrome/installer/util/eula_util.cc b/chrome/installer/util/eula_util.cc
index e1051e4..c39fa6f 100644
--- a/chrome/installer/util/eula_util.cc
+++ b/chrome/installer/util/eula_util.cc
@@ -11,7 +11,6 @@
 #include "chrome/installer/util/installation_state.h"
 #include "chrome/installer/util/master_preferences.h"
 #include "chrome/installer/util/master_preferences_constants.h"
-#include "chrome/installer/util/util_constants.h"
 
 namespace installer {
 
@@ -22,8 +21,7 @@
   // doing so is required by master_preferences. Assume the EULA has not been
   // accepted if the path to the sentinel cannot be determined.
   base::FilePath eula_sentinel;
-  return InstallUtil::GetSentinelFilePath(kEULASentinelFile, dist,
-                                          &eula_sentinel) &&
+  return InstallUtil::GetEULASentinelFilePath(&eula_sentinel) &&
       base::PathExists(eula_sentinel);
 }
 
diff --git a/chrome/installer/util/firewall_manager_win.cc b/chrome/installer/util/firewall_manager_win.cc
new file mode 100644
index 0000000..2249331
--- /dev/null
+++ b/chrome/installer/util/firewall_manager_win.cc
@@ -0,0 +1,100 @@
+// 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.
+
+#include "chrome/installer/util/firewall_manager_win.h"
+
+#include "base/files/file_path.h"
+#include "base/strings/string16.h"
+#include "chrome/installer/util/advanced_firewall_manager_win.h"
+#include "chrome/installer/util/browser_distribution.h"
+#include "chrome/installer/util/legacy_firewall_manager_win.h"
+
+namespace installer {
+
+namespace {
+
+class FirewallManagerAdvancedImpl : public FirewallManager {
+ public:
+  FirewallManagerAdvancedImpl() {}
+  virtual ~FirewallManagerAdvancedImpl() {}
+
+  bool Init(const base::string16& app_name, const base::FilePath& app_path) {
+    return manager_.Init(app_name, app_path);
+  }
+
+  // FirewallManager methods.
+  virtual bool CanUseLocalPorts() OVERRIDE {
+    return !manager_.IsFirewallEnabled() || manager_.HasAnyRule();
+  };
+
+  virtual bool AddFirewallRules() OVERRIDE {
+    // Nothing yet.
+    return true;
+  }
+
+  virtual void RemoveFirewallRules() OVERRIDE {
+    manager_.DeleteAllRules();
+  }
+
+ private:
+  AdvancedFirewallManager manager_;
+  DISALLOW_COPY_AND_ASSIGN(FirewallManagerAdvancedImpl);
+};
+
+class FirewallManagerLegacyImpl : public FirewallManager {
+ public:
+  FirewallManagerLegacyImpl() {}
+  virtual ~FirewallManagerLegacyImpl() {}
+
+  bool Init(const base::string16& app_name, const base::FilePath& app_path) {
+    return manager_.Init(app_name, app_path);
+  }
+
+  // FirewallManager methods.
+  virtual bool CanUseLocalPorts() OVERRIDE {
+    return !manager_.IsFirewallEnabled() ||
+        manager_.GetAllowIncomingConnection(NULL);
+  };
+
+  virtual bool AddFirewallRules() OVERRIDE {
+    // Nothing yet.
+    return true;
+  }
+
+  virtual void RemoveFirewallRules() OVERRIDE {
+    manager_.DeleteRule();
+  }
+
+ private:
+  LegacyFirewallManager manager_;
+  DISALLOW_COPY_AND_ASSIGN(FirewallManagerLegacyImpl);
+};
+
+}  // namespace
+
+FirewallManager::~FirewallManager() {}
+
+// static
+scoped_ptr<FirewallManager> FirewallManager::Create(
+    BrowserDistribution* dist,
+    const base::FilePath& chrome_path) {
+  // First try to connect to "Windows Firewall with Advanced Security" (Vista+).
+  scoped_ptr<FirewallManagerAdvancedImpl> manager(
+      new FirewallManagerAdvancedImpl());
+  if (manager->Init(dist->GetDisplayName(), chrome_path))
+    return manager.PassAs<FirewallManager>();
+
+  // Next try to connect to "Windows Firewall for Windows XP with SP2".
+  scoped_ptr<FirewallManagerLegacyImpl> legacy_manager(
+      new FirewallManagerLegacyImpl());
+  if (legacy_manager->Init(dist->GetDisplayName(), chrome_path))
+    return legacy_manager.PassAs<FirewallManager>();
+
+  return scoped_ptr<FirewallManager>();
+}
+
+FirewallManager::FirewallManager() {
+}
+
+}  // namespace installer
diff --git a/chrome/installer/util/firewall_manager_win.h b/chrome/installer/util/firewall_manager_win.h
new file mode 100644
index 0000000..aa87da0
--- /dev/null
+++ b/chrome/installer/util/firewall_manager_win.h
@@ -0,0 +1,48 @@
+// 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.
+
+#ifndef CHROME_INSTALLER_UTIL_FIREWALL_MANAGER_WIN_H_
+#define CHROME_INSTALLER_UTIL_FIREWALL_MANAGER_WIN_H_
+
+#include "base/memory/scoped_ptr.h"
+
+class BrowserDistribution;
+
+namespace base {
+class FilePath;
+}
+
+namespace installer {
+
+// Requires that COM be initialized on the calling thread.
+class FirewallManager {
+ public:
+  virtual ~FirewallManager();
+
+  // Creates instance of |FirewallManager|. Implementation chooses best version
+  // available for current version of Windows.
+  static scoped_ptr<FirewallManager> Create(BrowserDistribution* dist,
+                                            const base::FilePath& chrome_path);
+
+  // Returns true if application can one ports for incoming connections without
+  // triggering firewall alert. It still does not guarantee that traffic
+  // would pass firewall.
+  virtual bool CanUseLocalPorts() = 0;
+
+  // Installs all windows firewall rules needed by Chrome.
+  // Return true if operation succeeded. Needs elevation.
+  virtual bool AddFirewallRules() = 0;
+
+  // Removes all windows firewall related to Chrome. Needs elevation.
+  virtual void RemoveFirewallRules() = 0;
+
+ protected:
+  FirewallManager();
+
+  DISALLOW_COPY_AND_ASSIGN(FirewallManager);
+};
+
+}  // namespace installer
+
+#endif  // CHROME_INSTALLER_UTIL_FIREWALL_MANAGER_WIN_H_
diff --git a/chrome/installer/util/helper.cc b/chrome/installer/util/helper.cc
index 25f9918..df63dc0 100644
--- a/chrome/installer/util/helper.cc
+++ b/chrome/installer/util/helper.cc
@@ -42,6 +42,8 @@
 }
 
 base::FilePath GetChromeUserDataPath(BrowserDistribution* dist) {
+  // TODO(msw): Remove this method and make callers use PathService directly to
+  // obtain the right DIR_USER_DATA.
   return GetChromeInstallBasePath(false, dist, kInstallUserDataDir);
 }
 
diff --git a/chrome/installer/util/install_util.cc b/chrome/installer/util/install_util.cc
index f00af27..0dcd987 100644
--- a/chrome/installer/util/install_util.cc
+++ b/chrome/installer/util/install_util.cc
@@ -410,15 +410,11 @@
 }
 
 // static
-bool InstallUtil::GetSentinelFilePath(const base::FilePath::CharType* file,
-                                      BrowserDistribution* dist,
-                                      base::FilePath* path) {
-  // TODO(msw): Use PathService to obtain the correct DIR_USER_DATA.
-  base::FilePath user_data_dir(installer::GetChromeUserDataPath(dist));
-
-  if (user_data_dir.empty())
+bool InstallUtil::GetEULASentinelFilePath(base::FilePath* path) {
+  base::FilePath user_data_dir;
+  if (!PathService::Get(chrome::DIR_USER_DATA, &user_data_dir))
     return false;
-  *path = user_data_dir.Append(file);
+  *path = user_data_dir.Append(installer::kEULASentinelFile);
   return true;
 }
 
diff --git a/chrome/installer/util/install_util.h b/chrome/installer/util/install_util.h
index 53d389f..1c3d0cb 100644
--- a/chrome/installer/util/install_util.h
+++ b/chrome/installer/util/install_util.h
@@ -109,11 +109,8 @@
   // Returns true if the sentinel file exists (or the path cannot be obtained).
   static bool IsFirstRunSentinelPresent();
 
-  // Populates |path| with the path to |file| in the sentinel directory for
-  // |dist|. Returns false on error.
-  static bool GetSentinelFilePath(const base::FilePath::CharType* file,
-                                  BrowserDistribution* dist,
-                                  base::FilePath* path);
+  // Populates |path| with EULA sentinel file path. Returns false on error.
+  static bool GetEULASentinelFilePath(base::FilePath* path);
 
   // Deletes the registry key at path key_path under the key given by root_key.
   static bool DeleteRegistryKey(HKEY root_key, const base::string16& key_path);
diff --git a/chrome/installer/util/legacy_firewall_manager_win.cc b/chrome/installer/util/legacy_firewall_manager_win.cc
new file mode 100644
index 0000000..2ea7c2c
--- /dev/null
+++ b/chrome/installer/util/legacy_firewall_manager_win.cc
@@ -0,0 +1,134 @@
+// 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.
+
+#include "chrome/installer/util/legacy_firewall_manager_win.h"
+
+#include "base/logging.h"
+#include "base/strings/stringprintf.h"
+#include "base/win/scoped_bstr.h"
+
+namespace installer {
+
+LegacyFirewallManager::LegacyFirewallManager() {}
+
+LegacyFirewallManager::~LegacyFirewallManager() {}
+
+bool LegacyFirewallManager::Init(const base::string16& app_name,
+                                 const base::FilePath& app_path) {
+  base::win::ScopedComPtr<INetFwMgr> firewall_manager;
+  HRESULT hr = firewall_manager.CreateInstance(CLSID_NetFwMgr);
+  if (FAILED(hr)) {
+    DLOG(ERROR) << logging::SystemErrorCodeToString(hr);
+    return false;
+  }
+
+  base::win::ScopedComPtr<INetFwPolicy> firewall_policy;
+  hr = firewall_manager->get_LocalPolicy(firewall_policy.Receive());
+  if (FAILED(hr)) {
+    DLOG(ERROR) << logging::SystemErrorCodeToString(hr);
+    return false;
+  }
+
+  hr = firewall_policy->get_CurrentProfile(current_profile_.Receive());
+  if (FAILED(hr)) {
+    DLOG(ERROR) << logging::SystemErrorCodeToString(hr);
+    current_profile_ = NULL;
+    return false;
+  }
+
+  app_name_ = app_name;
+  app_path_ = app_path;
+  return true;
+}
+
+bool LegacyFirewallManager::IsFirewallEnabled() {
+  VARIANT_BOOL is_enabled = VARIANT_TRUE;
+  HRESULT hr = current_profile_->get_FirewallEnabled(&is_enabled);
+  return SUCCEEDED(hr) && is_enabled != VARIANT_FALSE;
+}
+
+bool LegacyFirewallManager::GetAllowIncomingConnection(bool* value) {
+  // Otherwise, check to see if there is a rule either allowing or disallowing
+  // this chrome.exe.
+  base::win::ScopedComPtr<INetFwAuthorizedApplications> authorized_apps(
+      GetAuthorizedApplications());
+  if (!authorized_apps.get())
+    return false;
+
+  base::win::ScopedComPtr<INetFwAuthorizedApplication> chrome_application;
+  HRESULT hr = authorized_apps->Item(
+      base::win::ScopedBstr(app_path_.value().c_str()),
+      chrome_application.Receive());
+  if (FAILED(hr))
+    return false;
+  VARIANT_BOOL is_enabled = VARIANT_FALSE;
+  hr = chrome_application->get_Enabled(&is_enabled);
+  if (FAILED(hr))
+    return false;
+  if (value)
+    *value = (is_enabled == VARIANT_TRUE);
+  return true;
+}
+
+// The SharedAccess service must be running.
+bool LegacyFirewallManager::SetAllowIncomingConnection(bool allow) {
+  base::win::ScopedComPtr<INetFwAuthorizedApplications> authorized_apps(
+      GetAuthorizedApplications());
+  if (!authorized_apps.get())
+    return false;
+
+  // Authorize chrome.
+  base::win::ScopedComPtr<INetFwAuthorizedApplication> authorization =
+      CreateChromeAuthorization(allow);
+  if (!authorization.get())
+    return false;
+  HRESULT hr = authorized_apps->Add(authorization);
+  DLOG_IF(ERROR, FAILED(hr)) << logging::SystemErrorCodeToString(hr);
+  return SUCCEEDED(hr);
+}
+
+void LegacyFirewallManager::DeleteRule() {
+  base::win::ScopedComPtr<INetFwAuthorizedApplications> authorized_apps(
+      GetAuthorizedApplications());
+  if (!authorized_apps.get())
+    return;
+  authorized_apps->Remove(base::win::ScopedBstr(app_path_.value().c_str()));
+}
+
+base::win::ScopedComPtr<INetFwAuthorizedApplications>
+LegacyFirewallManager::GetAuthorizedApplications() {
+  base::win::ScopedComPtr<INetFwAuthorizedApplications> authorized_apps;
+  HRESULT hr =
+      current_profile_->get_AuthorizedApplications(authorized_apps.Receive());
+  if (FAILED(hr)) {
+    DLOG(ERROR) << logging::SystemErrorCodeToString(hr);
+    return base::win::ScopedComPtr<INetFwAuthorizedApplications>();
+  }
+
+  return authorized_apps;
+}
+
+base::win::ScopedComPtr<INetFwAuthorizedApplication>
+LegacyFirewallManager::CreateChromeAuthorization(bool allow) {
+  base::win::ScopedComPtr<INetFwAuthorizedApplication> chrome_application;
+
+  HRESULT hr =
+      chrome_application.CreateInstance(CLSID_NetFwAuthorizedApplication);
+  if (FAILED(hr)) {
+    DLOG(ERROR) << logging::SystemErrorCodeToString(hr);
+    return base::win::ScopedComPtr<INetFwAuthorizedApplication>();
+  }
+
+  chrome_application->put_Name(base::win::ScopedBstr(app_name_.c_str()));
+  chrome_application->put_ProcessImageFileName(
+      base::win::ScopedBstr(app_path_.value().c_str()));
+  // IpVersion defaults to NET_FW_IP_VERSION_ANY.
+  // Scope defaults to NET_FW_SCOPE_ALL.
+  // RemoteAddresses defaults to "*".
+  chrome_application->put_Enabled(allow ? VARIANT_TRUE : VARIANT_FALSE);
+
+  return chrome_application;
+}
+
+}  // namespace installer
diff --git a/chrome/installer/util/legacy_firewall_manager_win.h b/chrome/installer/util/legacy_firewall_manager_win.h
new file mode 100644
index 0000000..6c8afbd
--- /dev/null
+++ b/chrome/installer/util/legacy_firewall_manager_win.h
@@ -0,0 +1,63 @@
+// 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.
+
+#ifndef CHROME_INSTALLER_UTIL_LEGACY_FIREWALL_MANAGER_WIN_H_
+#define CHROME_INSTALLER_UTIL_LEGACY_FIREWALL_MANAGER_WIN_H_
+
+#include <windows.h>
+#include <netfw.h>
+
+#include "base/files/file_path.h"
+#include "base/strings/string16.h"
+#include "base/win/scoped_comptr.h"
+
+namespace installer {
+
+// Manages firewall rules using Windows Firewall API. The API is
+// available on Windows XP with SP2 and later. Applications should use
+// |AdvancedFirewallManager| instead of this class on Windows Vista and later.
+// Most methods need elevation.
+class LegacyFirewallManager {
+ public:
+  LegacyFirewallManager();
+  ~LegacyFirewallManager();
+
+  // Initializes object to manage application win name |app_name| and path
+  // |app_path|.
+  bool Init(const base::string16& app_name, const base::FilePath& app_path);
+
+  // Returns true if firewall is enabled.
+  bool IsFirewallEnabled();
+
+  // Returns true if function can read rule for the current app. Sets |value|
+  // true, if rule allows incoming connections, or false otherwise.
+  bool GetAllowIncomingConnection(bool* value);
+
+  // Allows or blocks all incoming connection for current app. Needs elevation.
+  bool SetAllowIncomingConnection(bool allow);
+
+  // Deletes rule for current app. Needs elevation.
+  void DeleteRule();
+
+ private:
+  // Returns the authorized applications collection for the local firewall
+  // policy's current profile or an empty pointer in case of error.
+  base::win::ScopedComPtr<INetFwAuthorizedApplications>
+      GetAuthorizedApplications();
+
+  // Creates rule for the current application. If |allow| is true, incoming
+  // connections are allowed, blocked otherwise.
+  base::win::ScopedComPtr<INetFwAuthorizedApplication>
+      CreateChromeAuthorization(bool allow);
+
+  base::string16 app_name_;
+  base::FilePath app_path_;
+  base::win::ScopedComPtr<INetFwProfile> current_profile_;
+
+  DISALLOW_COPY_AND_ASSIGN(LegacyFirewallManager);
+};
+
+}  // namespace installer
+
+#endif  // CHROME_INSTALLER_UTIL_LEGACY_FIREWALL_MANAGER_WIN_H_
diff --git a/chrome/installer/util/legacy_firewall_manager_win_unittest.cc b/chrome/installer/util/legacy_firewall_manager_win_unittest.cc
new file mode 100644
index 0000000..5d615f3
--- /dev/null
+++ b/chrome/installer/util/legacy_firewall_manager_win_unittest.cc
@@ -0,0 +1,74 @@
+// 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.
+
+#include "chrome/installer/util/legacy_firewall_manager_win.h"
+
+#include "base/path_service.h"
+#include "base/process/process_handle.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace installer {
+
+class LegacyFirewallManagerTest : public ::testing::Test {
+ public:
+  LegacyFirewallManagerTest() : skip_test_(true) {}
+
+ protected:
+  // Sets up the test fixture.
+  virtual void SetUp() OVERRIDE {
+    base::IntegrityLevel level = base::INTEGRITY_UNKNOWN;
+    if (GetProcessIntegrityLevel(base::GetCurrentProcessHandle(), &level) &&
+        level != base::HIGH_INTEGRITY) {
+      LOG(WARNING) << "Not elevated. Skipping the test.";
+      return;
+    };
+    skip_test_ = false;
+    base::FilePath exe_path;
+    PathService::Get(base::FILE_EXE, &exe_path);
+    EXPECT_TRUE(manager_.Init(L"LegacyFirewallManagerTest", exe_path));
+    manager_.DeleteRule();
+  }
+
+  // Tears down the test fixture.
+  virtual void TearDown() OVERRIDE {
+    if (!skip_test_)
+      manager_.DeleteRule();
+  }
+
+  bool skip_test_;
+  LegacyFirewallManager manager_;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(LegacyFirewallManagerTest);
+};
+
+TEST_F(LegacyFirewallManagerTest, NoRule) {
+  if (skip_test_)
+    return;
+  EXPECT_FALSE(manager_.GetAllowIncomingConnection(NULL));
+}
+
+TEST_F(LegacyFirewallManagerTest, AllowRule) {
+  if (skip_test_)
+    return;
+  EXPECT_TRUE(manager_.SetAllowIncomingConnection(true));
+  bool allowed = false;
+  EXPECT_TRUE(manager_.GetAllowIncomingConnection(&allowed));
+  EXPECT_TRUE(allowed);
+  manager_.DeleteRule();
+  EXPECT_FALSE(manager_.GetAllowIncomingConnection(NULL));
+}
+
+TEST_F(LegacyFirewallManagerTest, BlockRule) {
+  if (skip_test_)
+    return;
+  EXPECT_TRUE(manager_.SetAllowIncomingConnection(false));
+  bool allowed = true;
+  EXPECT_TRUE(manager_.GetAllowIncomingConnection(&allowed));
+  EXPECT_FALSE(allowed);
+  manager_.DeleteRule();
+  EXPECT_FALSE(manager_.GetAllowIncomingConnection(NULL));
+}
+
+}  // namespace installer
diff --git a/chrome/renderer/DEPS b/chrome/renderer/DEPS
index 30e6f88..d65e9df 100644
--- a/chrome/renderer/DEPS
+++ b/chrome/renderer/DEPS
@@ -5,6 +5,7 @@
   "+components/autofill/core/common",
   "+components/nacl/renderer",
   "+components/plugins/renderer",
+  "+components/signin/core/common",
   "+components/translate/content/common",
   "+components/translate/core/common",
   "+components/translate/language_detection",
diff --git a/chrome/renderer/autofill/form_autofill_browsertest.cc b/chrome/renderer/autofill/form_autofill_browsertest.cc
index f8ff9c5..e0a1be9 100644
--- a/chrome/renderer/autofill/form_autofill_browsertest.cc
+++ b/chrome/renderer/autofill/form_autofill_browsertest.cc
@@ -13,6 +13,7 @@
 #include "chrome/test/base/chrome_render_view_test.h"
 #include "components/autofill/content/renderer/form_autofill_util.h"
 #include "components/autofill/content/renderer/form_cache.h"
+#include "components/autofill/core/common/autofill_data_validation.h"
 #include "components/autofill/core/common/form_data.h"
 #include "components/autofill/core/common/web_element_descriptor.h"
 #include "components/variations/entropy_provider.h"
@@ -462,6 +463,29 @@
   EXPECT_EQ(ASCIIToUTF16("Texas"), result3.option_contents[1]);
 }
 
+// When faced with <select> field with *many* options, we should trim them to a
+// reasonable number.
+TEST_F(FormAutofillTest, WebFormControlElementToFormFieldLongSelect) {
+  std::string html = "<SELECT id=\"element\"/>";
+  for (size_t i = 0; i < 2 * kMaxListSize; ++i) {
+    html += base::StringPrintf("<OPTION value=\"%" PRIuS "\">"
+                               "%" PRIuS "</OPTION>", i, i);
+  }
+  html += "</SELECT>";
+  LoadHTML(html.c_str());
+
+  WebFrame* frame = GetMainFrame();
+  ASSERT_TRUE(frame);
+
+  WebElement web_element = frame->document().getElementById("element");
+  WebFormControlElement element = web_element.to<WebFormControlElement>();
+  FormFieldData result;
+  WebFormControlElementToFormField(element, autofill::EXTRACT_OPTIONS, &result);
+
+  EXPECT_EQ(0U, result.option_values.size());
+  EXPECT_EQ(0U, result.option_contents.size());
+}
+
 // We should be able to extract a <textarea> field.
 TEST_F(FormAutofillTest, WebFormControlElementToFormFieldTextArea) {
   LoadHTML("<TEXTAREA id=\"element\">"
diff --git a/chrome/renderer/autofill/password_autofill_agent_browsertest.cc b/chrome/renderer/autofill/password_autofill_agent_browsertest.cc
index 7be602a..1872c8b 100644
--- a/chrome/renderer/autofill/password_autofill_agent_browsertest.cc
+++ b/chrome/renderer/autofill/password_autofill_agent_browsertest.cc
@@ -19,8 +19,8 @@
 #include "third_party/WebKit/public/web/WebDocument.h"
 #include "third_party/WebKit/public/web/WebElement.h"
 #include "third_party/WebKit/public/web/WebFormElement.h"
-#include "third_party/WebKit/public/web/WebFrame.h"
 #include "third_party/WebKit/public/web/WebInputElement.h"
+#include "third_party/WebKit/public/web/WebLocalFrame.h"
 #include "third_party/WebKit/public/web/WebNode.h"
 #include "third_party/WebKit/public/web/WebView.h"
 #include "ui/events/keycodes/keyboard_codes.h"
diff --git a/chrome/renderer/autofill/password_generation_agent_browsertest.cc b/chrome/renderer/autofill/password_generation_agent_browsertest.cc
index a168660..35eae49 100644
--- a/chrome/renderer/autofill/password_generation_agent_browsertest.cc
+++ b/chrome/renderer/autofill/password_generation_agent_browsertest.cc
@@ -14,6 +14,7 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/WebKit/public/platform/WebString.h"
 #include "third_party/WebKit/public/web/WebDocument.h"
+#include "third_party/WebKit/public/web/WebLocalFrame.h"
 #include "third_party/WebKit/public/web/WebWidget.h"
 
 using blink::WebDocument;
diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer/chrome_content_renderer_client.cc
index 661a5ac..7101411 100644
--- a/chrome/renderer/chrome_content_renderer_client.cc
+++ b/chrome/renderer/chrome_content_renderer_client.cc
@@ -24,7 +24,6 @@
 #include "chrome/common/extensions/extension_process_policy.h"
 #include "chrome/common/localized_error.h"
 #include "chrome/common/pepper_permission_util.h"
-#include "chrome/common/profile_management_switches.h"
 #include "chrome/common/render_messages.h"
 #include "chrome/common/url_constants.h"
 #include "chrome/renderer/benchmarking_extension.h"
@@ -32,8 +31,7 @@
 #include "chrome/renderer/chrome_render_process_observer.h"
 #include "chrome/renderer/chrome_render_view_observer.h"
 #include "chrome/renderer/content_settings_observer.h"
-#include "chrome/renderer/extensions/chrome_v8_context.h"
-#include "chrome/renderer/extensions/chrome_v8_extension.h"
+#include "chrome/renderer/extensions/chrome_extensions_renderer_client.h"
 #include "chrome/renderer/extensions/dispatcher.h"
 #include "chrome/renderer/extensions/extension_frame_helper.h"
 #include "chrome/renderer/extensions/extension_helper.h"
@@ -71,6 +69,7 @@
 #include "components/autofill/content/renderer/password_generation_agent.h"
 #include "components/nacl/renderer/ppb_nacl_private_impl.h"
 #include "components/plugins/renderer/mobile_youtube_plugin.h"
+#include "components/signin/core/common/profile_management_switches.h"
 #include "components/visitedlink/renderer/visitedlink_slave.h"
 #include "content/public/common/content_constants.h"
 #include "content/public/renderer/render_frame.h"
@@ -82,6 +81,7 @@
 #include "extensions/common/extension_set.h"
 #include "extensions/common/extension_urls.h"
 #include "extensions/common/switches.h"
+#include "extensions/renderer/script_context.h"
 #include "grit/generated_resources.h"
 #include "grit/locale_settings.h"
 #include "grit/renderer_resources.h"
@@ -97,7 +97,7 @@
 #include "third_party/WebKit/public/web/WebDataSource.h"
 #include "third_party/WebKit/public/web/WebDocument.h"
 #include "third_party/WebKit/public/web/WebElement.h"
-#include "third_party/WebKit/public/web/WebFrame.h"
+#include "third_party/WebKit/public/web/WebLocalFrame.h"
 #include "third_party/WebKit/public/web/WebPluginContainer.h"
 #include "third_party/WebKit/public/web/WebPluginParams.h"
 #include "third_party/WebKit/public/web/WebSecurityOrigin.h"
@@ -361,6 +361,8 @@
 
   extensions::ExtensionsClient::Set(
       extensions::ChromeExtensionsClient::GetInstance());
+  extensions::ExtensionsRendererClient::Set(
+      ChromeExtensionsRendererClient::GetInstance());
 
 #if defined(OS_WIN)
   // Report if the renderer process has been patched by chrome_elf.
@@ -1064,8 +1066,8 @@
 }
 
 bool ChromeContentRendererClient::AllowPopup() {
-  extensions::ChromeV8Context* current_context =
-      extension_dispatcher_->v8_context_set().GetCurrent();
+  extensions::ScriptContext* current_context =
+      extension_dispatcher_->script_context_set().GetCurrent();
   if (!current_context || !current_context->extension())
     return false;
   // See http://crbug.com/117446 for the subtlety of this check.
diff --git a/chrome/renderer/chrome_content_renderer_client.h b/chrome/renderer/chrome_content_renderer_client.h
index 7b7e264..277487f 100644
--- a/chrome/renderer/chrome_content_renderer_client.h
+++ b/chrome/renderer/chrome_content_renderer_client.h
@@ -14,7 +14,6 @@
 #include "base/strings/string16.h"
 #include "content/public/renderer/content_renderer_client.h"
 #include "ipc/ipc_channel_proxy.h"
-#include "third_party/WebKit/public/web/WebLocalFrame.h"
 
 class ChromeRenderProcessObserver;
 class PrescientNetworkingDispatcher;
diff --git a/chrome/renderer/chrome_render_view_observer.cc b/chrome/renderer/chrome_render_view_observer.cc
index 5182a1f..ea3d0c5 100644
--- a/chrome/renderer/chrome_render_view_observer.cc
+++ b/chrome/renderer/chrome_render_view_observer.cc
@@ -41,8 +41,8 @@
 #include "third_party/WebKit/public/web/WebDataSource.h"
 #include "third_party/WebKit/public/web/WebDocument.h"
 #include "third_party/WebKit/public/web/WebElement.h"
-#include "third_party/WebKit/public/web/WebFrame.h"
 #include "third_party/WebKit/public/web/WebInputEvent.h"
+#include "third_party/WebKit/public/web/WebLocalFrame.h"
 #include "third_party/WebKit/public/web/WebNode.h"
 #include "third_party/WebKit/public/web/WebNodeList.h"
 #include "third_party/WebKit/public/web/WebView.h"
diff --git a/chrome/renderer/extensions/activity_log_converter_strategy.cc b/chrome/renderer/extensions/activity_log_converter_strategy.cc
index 5ea67dd..9cd9893 100644
--- a/chrome/renderer/extensions/activity_log_converter_strategy.cc
+++ b/chrome/renderer/extensions/activity_log_converter_strategy.cc
@@ -3,55 +3,186 @@
 // found in the LICENSE file.
 
 #include "chrome/renderer/extensions/activity_log_converter_strategy.h"
+
+#include "base/logging.h"
 #include "base/values.h"
+#include "chrome/common/extensions/ad_injection_constants.h"
+#include "v8/include/v8.h"
 
 namespace extensions {
 
-bool ActivityLogConverterStrategy::FromV8Object(v8::Handle<v8::Object> value,
-                                                base::Value** out,
-                                                v8::Isolate* isolate) const {
-  return FromV8ObjectInternal(value, out, isolate);
+namespace {
+
+typedef ActivityLogConverterStrategy::FromV8ValueCallback FromV8ValueCallback;
+
+namespace constants = ad_injection_constants;
+namespace keys = constants::keys;
+
+const char kFirstChildProperty[] = "firstElementChild";
+const char kNextElementSiblingProperty[] = "nextElementSibling";
+
+scoped_ptr<base::DictionaryValue> ParseV8Object(
+    v8::Isolate* isolate,
+    v8::Object* object,
+    const FromV8ValueCallback& callback);
+
+// Get a property from a V8 object without entering javascript. We use this
+// in order to examine the objects, while ensuring that we don't cause any
+// change in the running program.
+v8::Local<v8::Value> SafeGetProperty(v8::Isolate* isolate,
+                                     v8::Object* object,
+                                     const char* key) {
+  v8::TryCatch try_catch;
+  v8::Isolate::DisallowJavascriptExecutionScope scope(
+      isolate, v8::Isolate::DisallowJavascriptExecutionScope::THROW_ON_FAILURE);
+  v8::Local<v8::String> key_string = v8::String::NewFromUtf8(isolate, key);
+  v8::Local<v8::Value> value = object->Get(key_string);
+  if (try_catch.HasCaught() || value.IsEmpty() || value->IsUndefined() ||
+      value->IsNull()) {
+    return v8::Local<v8::Value>();
+  }
+  return value;
 }
 
-bool ActivityLogConverterStrategy::FromV8Array(v8::Handle<v8::Array> value,
-                                               base::Value** out,
-                                               v8::Isolate* isolate) const {
-  return FromV8ObjectInternal(value, out, isolate);
+// Append a property to the given |dict| from the given |object| if the
+// property exists on |object| and can be accessed safely (i.e., without
+// triggering any javascript execution).
+void MaybeAppendV8Property(v8::Isolate* isolate,
+                           v8::Object* object,
+                           const char* property_name,
+                           base::DictionaryValue* dict,
+                           const FromV8ValueCallback& callback) {
+  v8::Handle<v8::Value> value = SafeGetProperty(isolate, object, property_name);
+  if (!value.IsEmpty()) {
+    scoped_ptr<base::Value> parsed_value(callback.Run(value, isolate));
+    if (parsed_value.get())
+      dict->Set(property_name, parsed_value.release());
+  }
 }
 
-bool ActivityLogConverterStrategy::FromV8ObjectInternal(
-    v8::Handle<v8::Object> value,
-    base::Value** out,
-    v8::Isolate* isolate) const {
+// Parse the children of a V8 |object| and return them as a list. This will
+// return an empty scoped_ptr if no children are present, or if the children
+// cannot be read safely (without triggering javascript).
+scoped_ptr<base::ListValue> MaybeParseV8Children(
+    v8::Isolate* isolate,
+    v8::Object* object,
+    const FromV8ValueCallback& callback) {
+  scoped_ptr<base::ListValue> parsed_children(new base::ListValue());
+  v8::Local<v8::Value> child_value =
+      SafeGetProperty(isolate, object, kFirstChildProperty);
+  size_t checked_children = 0u;
+  while (!child_value.IsEmpty() &&
+         child_value->IsObject() &&
+         checked_children < constants::kMaximumChildrenToCheck) {
+    ++checked_children;
+    v8::Handle<v8::Object> child_object = child_value->ToObject();
+    scoped_ptr<base::Value> parsed_child(
+        callback.Run(child_object, isolate));
+    if (parsed_child.get())
+      parsed_children->Append(parsed_child.release());
+    child_value =
+        SafeGetProperty(isolate, *child_object, kNextElementSiblingProperty);
+  }
 
-  // Handle JSObject.
-  // We cannot use value->Get(key/index) as there may be a getter method,
-  // accessor, interceptor/handler, or access check callback set on the
-  // property. If that it is the case, any of those may invoke JS code that
-  // may result on logging extension activity events caused by value conversion
-  // rather than extension itself.
+  return parsed_children->GetSize() > 0 ? parsed_children.Pass()
+                                        : scoped_ptr<base::ListValue>();
+}
 
-  // V8 arrays are handled here in the same way as other JSObjects as they may
-  // also have getter methods, accessor, interceptor/handler, and access check
-  // callback.
+// Parse a V8 |object| into a DictionaryValue. This will examine the object
+// for a few important properties, including:
+// - href
+// - src
+// - children
+// These properties are necessary to analyze whether or not the object contains
+// ads, which may have been injected.
+scoped_ptr<base::DictionaryValue> ParseV8Object(
+    v8::Isolate* isolate,
+    v8::Object* object,
+    const FromV8ValueCallback& callback) {
+  scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue());
 
-  v8::Handle<v8::String> name = v8::String::NewFromUtf8(isolate, "[");
-  if (value->IsFunction()) {
+  dict->SetString(keys::kType,
+                  *v8::String::Utf8Value(object->GetConstructorName()));
+
+  MaybeAppendV8Property(isolate, object, keys::kHref, dict.get(), callback);
+  MaybeAppendV8Property(isolate, object, keys::kSrc, dict.get(), callback);
+
+  scoped_ptr<base::ListValue> maybe_children =
+      MaybeParseV8Children(isolate, object, callback);
+  if (maybe_children.get())
+    dict->Set(keys::kChildren, maybe_children.release());
+
+  return dict.Pass();
+}
+
+// Summarize a V8 value. This performs a shallow conversion in all cases, and
+// returns only a string with a description of the value (e.g.,
+// "[HTMLElement]").
+scoped_ptr<base::Value> SummarizeV8Value(v8::Isolate* isolate,
+                                         v8::Handle<v8::Object> object) {
+  v8::TryCatch try_catch;
+  v8::Isolate::DisallowJavascriptExecutionScope scope(
+      isolate, v8::Isolate::DisallowJavascriptExecutionScope::THROW_ON_FAILURE);
+  v8::Local<v8::String> name = v8::String::NewFromUtf8(isolate, "[");
+  if (object->IsFunction()) {
     name =
         v8::String::Concat(name, v8::String::NewFromUtf8(isolate, "Function"));
-    v8::Handle<v8::Value> fname =
-        v8::Handle<v8::Function>::Cast(value)->GetName();
+    v8::Local<v8::Value> fname =
+        v8::Handle<v8::Function>::Cast(object)->GetName();
     if (fname->IsString() && v8::Handle<v8::String>::Cast(fname)->Length()) {
       name = v8::String::Concat(name, v8::String::NewFromUtf8(isolate, " "));
       name = v8::String::Concat(name, v8::Handle<v8::String>::Cast(fname));
       name = v8::String::Concat(name, v8::String::NewFromUtf8(isolate, "()"));
     }
   } else {
-    name = v8::String::Concat(name, value->GetConstructorName());
+    name = v8::String::Concat(name, object->GetConstructorName());
   }
   name = v8::String::Concat(name, v8::String::NewFromUtf8(isolate, "]"));
-  *out = new base::StringValue(std::string(*v8::String::Utf8Value(name)));
-  // Prevent V8ValueConverter from further processing this object.
+
+  if (try_catch.HasCaught()) {
+    return scoped_ptr<base::Value>(
+        new base::StringValue("[JS Execution Exception]"));
+  }
+
+  return scoped_ptr<base::Value>(
+      new base::StringValue(std::string(*v8::String::Utf8Value(name))));
+}
+
+}  // namespace
+
+ActivityLogConverterStrategy::ActivityLogConverterStrategy()
+    : enable_detailed_parsing_(false) {}
+
+ActivityLogConverterStrategy::~ActivityLogConverterStrategy() {}
+
+bool ActivityLogConverterStrategy::FromV8Object(
+    v8::Handle<v8::Object> value,
+    base::Value** out,
+    v8::Isolate* isolate,
+    const FromV8ValueCallback& callback) const {
+  return FromV8Internal(value, out, isolate, callback);
+}
+
+bool ActivityLogConverterStrategy::FromV8Array(
+    v8::Handle<v8::Array> value,
+    base::Value** out,
+    v8::Isolate* isolate,
+    const FromV8ValueCallback& callback) const {
+  return FromV8Internal(value, out, isolate, callback);
+}
+
+bool ActivityLogConverterStrategy::FromV8Internal(
+    v8::Handle<v8::Object> value,
+    base::Value** out,
+    v8::Isolate* isolate,
+    const FromV8ValueCallback& callback) const {
+  scoped_ptr<base::Value> parsed_value;
+  if (enable_detailed_parsing_)
+    parsed_value = ParseV8Object(isolate, *value, callback);
+  if (!parsed_value.get())
+    parsed_value = SummarizeV8Value(isolate, value);
+  *out = parsed_value.release();
+
   return true;
 }
 
diff --git a/chrome/renderer/extensions/activity_log_converter_strategy.h b/chrome/renderer/extensions/activity_log_converter_strategy.h
index 9b80c6f..46abcf6 100644
--- a/chrome/renderer/extensions/activity_log_converter_strategy.h
+++ b/chrome/renderer/extensions/activity_log_converter_strategy.h
@@ -6,6 +6,7 @@
 #define CHROME_RENDERER_EXTENSIONS_ACTIVITY_LOG_CONVERTER_STRATEGY_H_
 
 #include "base/compiler_specific.h"
+#include "base/macros.h"
 #include "content/public/renderer/v8_value_converter.h"
 #include "v8/include/v8.h"
 
@@ -19,19 +20,38 @@
 class ActivityLogConverterStrategy
     : public content::V8ValueConverter::Strategy {
  public:
-  virtual ~ActivityLogConverterStrategy() {}
+  typedef content::V8ValueConverter::Strategy::FromV8ValueCallback
+      FromV8ValueCallback;
 
+  ActivityLogConverterStrategy();
+  virtual ~ActivityLogConverterStrategy();
+
+  // content::V8ValueConverter::Strategy implementation.
   virtual bool FromV8Object(v8::Handle<v8::Object> value,
                             base::Value** out,
-                            v8::Isolate* isolate) const OVERRIDE;
+                            v8::Isolate* isolate,
+                            const FromV8ValueCallback& callback) const OVERRIDE;
   virtual bool FromV8Array(v8::Handle<v8::Array> value,
                            base::Value** out,
-                           v8::Isolate* isolate) const OVERRIDE;
+                           v8::Isolate* isolate,
+                           const FromV8ValueCallback& callback) const OVERRIDE;
+
+  void set_enable_detailed_parsing(bool enable_detailed_parsing) {
+    enable_detailed_parsing_ = enable_detailed_parsing;
+  }
 
  private:
-  bool FromV8ObjectInternal(v8::Handle<v8::Object> value,
-                            base::Value** out,
-                            v8::Isolate* isolate) const;
+  bool FromV8Internal(v8::Handle<v8::Object> value,
+                      base::Value** out,
+                      v8::Isolate* isolate,
+                      const FromV8ValueCallback& callback) const;
+
+  // Whether or not to extract a detailed value from the passed in objects. We
+  // do this when we need more information about the arguments in order to
+  // determine, e.g., if an ad was injected.
+  bool enable_detailed_parsing_;
+
+  DISALLOW_COPY_AND_ASSIGN(ActivityLogConverterStrategy);
 };
 
 }  // namespace extensions
diff --git a/chrome/renderer/extensions/api_activity_logger.cc b/chrome/renderer/extensions/api_activity_logger.cc
index 80f25bd..8b833c8 100644
--- a/chrome/renderer/extensions/api_activity_logger.cc
+++ b/chrome/renderer/extensions/api_activity_logger.cc
@@ -3,21 +3,21 @@
 // found in the LICENSE file.
 
 #include <string>
+
 #include "base/bind.h"
-#include "chrome/renderer/chrome_render_process_observer.h"
 #include "chrome/renderer/extensions/activity_log_converter_strategy.h"
 #include "chrome/renderer/extensions/api_activity_logger.h"
 #include "content/public/renderer/render_thread.h"
 #include "content/public/renderer/v8_value_converter.h"
 #include "extensions/common/extension_messages.h"
+#include "extensions/renderer/script_context.h"
 
 using content::V8ValueConverter;
 
 namespace extensions {
 
-APIActivityLogger::APIActivityLogger(
-    Dispatcher* dispatcher, ChromeV8Context* context)
-    : ChromeV8Extension(dispatcher, context) {
+APIActivityLogger::APIActivityLogger(ScriptContext* context)
+    : ObjectBackedNativeHandler(context) {
   RouteFunction("LogEvent", base::Bind(&APIActivityLogger::LogEvent));
   RouteFunction("LogAPICall", base::Bind(&APIActivityLogger::LogAPICall));
 }
diff --git a/chrome/renderer/extensions/api_activity_logger.h b/chrome/renderer/extensions/api_activity_logger.h
index bfb9787..7eb4565 100644
--- a/chrome/renderer/extensions/api_activity_logger.h
+++ b/chrome/renderer/extensions/api_activity_logger.h
@@ -6,9 +6,9 @@
 #define CHROME_RENDERER_EXTENSIONS_API_ACTIVITY_LOGGER_H_
 
 #include <string>
-#include "chrome/renderer/extensions/chrome_v8_extension.h"
-#include "chrome/renderer/extensions/dispatcher.h"
+
 #include "extensions/common/features/feature.h"
+#include "extensions/renderer/object_backed_native_handler.h"
 #include "v8/include/v8.h"
 
 namespace extensions {
@@ -16,9 +16,9 @@
 // Used to log extension API calls and events that are implemented with custom
 // bindings.The actions are sent via IPC to extensions::ActivityLog for
 // recording and display.
-class APIActivityLogger : public ChromeV8Extension {
+class APIActivityLogger : public ObjectBackedNativeHandler {
  public:
-  APIActivityLogger(Dispatcher* dispatcher, ChromeV8Context* context);
+  explicit APIActivityLogger(ScriptContext* context);
 
  private:
    // Used to distinguish API calls & events from each other in LogInternal.
diff --git a/chrome/renderer/extensions/api_definitions_natives.cc b/chrome/renderer/extensions/api_definitions_natives.cc
deleted file mode 100644
index 37dc415..0000000
--- a/chrome/renderer/extensions/api_definitions_natives.cc
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright (c) 2012 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 "chrome/renderer/extensions/api_definitions_natives.h"
-
-#include <algorithm>
-
-#include "extensions/common/features/feature.h"
-#include "extensions/common/features/feature_provider.h"
-
-namespace extensions {
-
-ApiDefinitionsNatives::ApiDefinitionsNatives(Dispatcher* dispatcher,
-                                             ChromeV8Context* context)
-    : ChromeV8Extension(dispatcher, context) {
-  RouteFunction("GetExtensionAPIDefinitionsForTest",
-                base::Bind(
-                    &ApiDefinitionsNatives::GetExtensionAPIDefinitionsForTest,
-                    base::Unretained(this)));
-}
-
-void ApiDefinitionsNatives::GetExtensionAPIDefinitionsForTest(
-    const v8::FunctionCallbackInfo<v8::Value>& args) {
-  std::vector<std::string> apis;
-  FeatureProvider* feature_provider = FeatureProvider::GetAPIFeatures();
-  const std::vector<std::string>& feature_names =
-      feature_provider->GetAllFeatureNames();
-  for (std::vector<std::string>::const_iterator i = feature_names.begin();
-       i != feature_names.end(); ++i) {
-    if (!feature_provider->GetParent(feature_provider->GetFeature(*i)) &&
-        context()->GetAvailability(*i).is_available()) {
-      apis.push_back(*i);
-    }
-  }
-  args.GetReturnValue().Set(
-    dispatcher()->v8_schema_registry()->GetSchemas(apis));
-}
-
-}  // namespace extensions
diff --git a/chrome/renderer/extensions/api_definitions_natives.h b/chrome/renderer/extensions/api_definitions_natives.h
deleted file mode 100644
index cc3f0a7..0000000
--- a/chrome/renderer/extensions/api_definitions_natives.h
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright (c) 2012 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 CHROME_RENDERER_EXTENSIONS_API_DEFINITIONS_NATIVES_H_
-#define CHROME_RENDERER_EXTENSIONS_API_DEFINITIONS_NATIVES_H_
-
-#include "chrome/renderer/extensions/chrome_v8_extension.h"
-#include "chrome/renderer/extensions/dispatcher.h"
-
-#include "v8/include/v8.h"
-
-class ChromeV8Context;
-
-namespace extensions {
-
-// Native functions for JS to get access to the schemas for extension APIs.
-class ApiDefinitionsNatives : public ChromeV8Extension {
- public:
-  ApiDefinitionsNatives(Dispatcher* dispatcher, ChromeV8Context* context);
-
- private:
-  // Returns the list of all schemas that are available to the calling context.
-  void GetExtensionAPIDefinitionsForTest(
-      const v8::FunctionCallbackInfo<v8::Value>& args);
-  DISALLOW_COPY_AND_ASSIGN(ApiDefinitionsNatives);
-};
-
-}  // namespace extensions
-
-#endif  // CHROME_RENDERER_EXTENSIONS_API_DEFINITIONS_NATIVES_H_
diff --git a/chrome/renderer/extensions/app_bindings.cc b/chrome/renderer/extensions/app_bindings.cc
index e25b81b..6ec369c 100644
--- a/chrome/renderer/extensions/app_bindings.cc
+++ b/chrome/renderer/extensions/app_bindings.cc
@@ -11,7 +11,6 @@
 #include "base/values.h"
 #include "chrome/common/chrome_switches.h"
 #include "chrome/common/extensions/extension_constants.h"
-#include "chrome/renderer/extensions/chrome_v8_context.h"
 #include "chrome/renderer/extensions/dispatcher.h"
 #include "chrome/renderer/extensions/extension_helper.h"
 #include "content/public/renderer/render_view.h"
@@ -20,7 +19,7 @@
 #include "extensions/common/extension_set.h"
 #include "extensions/common/manifest.h"
 #include "extensions/renderer/console.h"
-#include "grit/renderer_resources.h"
+#include "extensions/renderer/script_context.h"
 #include "third_party/WebKit/public/web/WebDocument.h"
 #include "third_party/WebKit/public/web/WebLocalFrame.h"
 #include "v8/include/v8.h"
@@ -58,9 +57,10 @@
 
 }  // namespace
 
-AppBindings::AppBindings(Dispatcher* dispatcher, ChromeV8Context* context)
-    : ChromeV8Extension(dispatcher, context),
-      ChromeV8ExtensionHandler(context) {
+AppBindings::AppBindings(Dispatcher* dispatcher, ScriptContext* context)
+    : ObjectBackedNativeHandler(context),
+      ChromeV8ExtensionHandler(context),
+      dispatcher_(dispatcher) {
   RouteFunction("GetIsInstalled",
       base::Bind(&AppBindings::GetIsInstalled, base::Unretained(this)));
   RouteFunction("GetDetails",
diff --git a/chrome/renderer/extensions/app_bindings.h b/chrome/renderer/extensions/app_bindings.h
index 76e3c4f..4634dfb 100644
--- a/chrome/renderer/extensions/app_bindings.h
+++ b/chrome/renderer/extensions/app_bindings.h
@@ -12,19 +12,20 @@
 #define CHROME_RENDERER_EXTENSIONS_APP_BINDINGS_H_
 
 #include "base/compiler_specific.h"
-#include "chrome/renderer/extensions/chrome_v8_extension.h"
+#include "chrome/renderer/extensions/chrome_v8_extension_handler.h"
+#include "extensions/renderer/object_backed_native_handler.h"
 #include "third_party/WebKit/public/web/WebFrame.h"
 
 namespace extensions {
-class ChromeV8Context;
+class Dispatcher;
 
 // Implements the chrome.app JavaScript object.
 //
 // TODO(aa): Add unit testing for this class.
-class AppBindings : public ChromeV8Extension,
+class AppBindings : public ObjectBackedNativeHandler,
                     public ChromeV8ExtensionHandler {
  public:
-  AppBindings(Dispatcher* dispatcher, ChromeV8Context* context);
+  AppBindings(Dispatcher* dispatcher, ScriptContext* context);
 
  private:
   // IPC::Listener
@@ -40,6 +41,9 @@
 
   void OnAppInstallStateResponse(const std::string& state, int callback_id);
 
+  // Dispatcher handle. Not owned.
+  Dispatcher* dispatcher_;
+
   DISALLOW_COPY_AND_ASSIGN(AppBindings);
 };
 
diff --git a/chrome/renderer/extensions/app_runtime_custom_bindings.cc b/chrome/renderer/extensions/app_runtime_custom_bindings.cc
index 1ff0de1..3d1016a 100644
--- a/chrome/renderer/extensions/app_runtime_custom_bindings.cc
+++ b/chrome/renderer/extensions/app_runtime_custom_bindings.cc
@@ -57,9 +57,8 @@
 
 namespace extensions {
 
-AppRuntimeCustomBindings::AppRuntimeCustomBindings(
-    Dispatcher* dispatcher,
-    ChromeV8Context* context) : ChromeV8Extension(dispatcher, context) {
+AppRuntimeCustomBindings::AppRuntimeCustomBindings(ScriptContext* context)
+    : ObjectBackedNativeHandler(context) {
   RouteFunction("DeserializeString", base::Bind(&DeserializeString));
   RouteFunction("SerializeToString", base::Bind(&SerializeToString));
   RouteFunction("CreateBlob", base::Bind(&CreateBlob));
diff --git a/chrome/renderer/extensions/app_runtime_custom_bindings.h b/chrome/renderer/extensions/app_runtime_custom_bindings.h
index 2d63ded..f83c0f7 100644
--- a/chrome/renderer/extensions/app_runtime_custom_bindings.h
+++ b/chrome/renderer/extensions/app_runtime_custom_bindings.h
@@ -5,15 +5,14 @@
 #ifndef CHROME_RENDERER_EXTENSIONS_APP_RUNTIME_CUSTOM_BINDINGS_H_
 #define CHROME_RENDERER_EXTENSIONS_APP_RUNTIME_CUSTOM_BINDINGS_H_
 
-#include "chrome/renderer/extensions/chrome_v8_extension.h"
+#include "extensions/renderer/object_backed_native_handler.h"
 
 namespace extensions {
 
 // The native component of custom bindings for the chrome.app.runtime API.
-class AppRuntimeCustomBindings : public ChromeV8Extension {
+class AppRuntimeCustomBindings : public ObjectBackedNativeHandler {
  public:
-  AppRuntimeCustomBindings(Dispatcher* dispatcher,
-                           ChromeV8Context* context);
+  explicit AppRuntimeCustomBindings(ScriptContext* context);
 
  private:
   DISALLOW_COPY_AND_ASSIGN(AppRuntimeCustomBindings);
diff --git a/chrome/renderer/extensions/app_window_custom_bindings.cc b/chrome/renderer/extensions/app_window_custom_bindings.cc
index 53a0813..fe0ccac 100644
--- a/chrome/renderer/extensions/app_window_custom_bindings.cc
+++ b/chrome/renderer/extensions/app_window_custom_bindings.cc
@@ -8,7 +8,6 @@
 
 #include "base/command_line.h"
 #include "chrome/common/chrome_switches.h"
-#include "chrome/renderer/extensions/chrome_v8_context.h"
 #include "chrome/renderer/extensions/dispatcher.h"
 #include "content/public/renderer/render_thread.h"
 #include "content/public/renderer/render_view.h"
@@ -17,8 +16,10 @@
 #include "content/public/renderer/v8_value_converter.h"
 #include "extensions/common/extension_messages.h"
 #include "extensions/renderer/scoped_persistent.h"
+#include "extensions/renderer/script_context.h"
+#include "extensions/renderer/script_context_set.h"
 #include "grit/renderer_resources.h"
-#include "third_party/WebKit/public/web/WebFrame.h"
+#include "third_party/WebKit/public/web/WebLocalFrame.h"
 #include "third_party/WebKit/public/web/WebView.h"
 #include "ui/base/resource/resource_bundle.h"
 #include "v8/include/v8.h"
@@ -27,10 +28,9 @@
 
 class DidCreateDocumentElementObserver : public content::RenderViewObserver {
  public:
-  DidCreateDocumentElementObserver(
-      content::RenderView* view, Dispatcher* dispatcher)
-      : content::RenderViewObserver(view), dispatcher_(dispatcher) {
-  }
+  DidCreateDocumentElementObserver(content::RenderView* view,
+                                   Dispatcher* dispatcher)
+      : content::RenderViewObserver(view), dispatcher_(dispatcher) {}
 
   virtual void DidCreateDocumentElement(blink::WebLocalFrame* frame) OVERRIDE {
     DCHECK(frame);
@@ -39,14 +39,14 @@
     if (frame->parent())
       return;
     v8::HandleScope handle_scope(v8::Isolate::GetCurrent());
-    ChromeV8Context* v8_context =
-        dispatcher_->v8_context_set().GetByV8Context(
+    ScriptContext* script_context =
+        dispatcher_->script_context_set().GetByV8Context(
             frame->mainWorldScriptContext());
 
-    if (!v8_context)
+    if (!script_context)
       return;
-    v8::Context::Scope context_scope(v8_context->v8_context());
-    v8_context->module_system()->CallModuleMethod(
+    v8::Context::Scope context_scope(script_context->v8_context());
+    script_context->module_system()->CallModuleMethod(
         "injectAppTitlebar", "didCreateDocumentElement");
   }
 
@@ -54,9 +54,9 @@
   Dispatcher* dispatcher_;
 };
 
-AppWindowCustomBindings::AppWindowCustomBindings(
-    Dispatcher* dispatcher,
-    ChromeV8Context* context) : ChromeV8Extension(dispatcher, context) {
+AppWindowCustomBindings::AppWindowCustomBindings(Dispatcher* dispatcher,
+                                                 ScriptContext* context)
+    : ObjectBackedNativeHandler(context), dispatcher_(dispatcher) {
   RouteFunction("GetView",
       base::Bind(&AppWindowCustomBindings::GetView,
                  base::Unretained(this)));
@@ -91,13 +91,13 @@
     return;
 
   if (inject_titlebar)
-    new DidCreateDocumentElementObserver(view, dispatcher());
+    new DidCreateDocumentElementObserver(view, dispatcher_);
 
   // TODO(jeremya): it doesn't really make sense to set the opener here, but we
   // need to make sure the security origin is set up before returning the DOM
   // reference. A better way to do this would be to have the browser pass the
   // opener through so opener_id is set in RenderViewImpl's constructor.
-  content::RenderView* render_view = GetRenderView();
+  content::RenderView* render_view = context()->GetRenderView();
   if (!render_view)
     return;
   blink::WebFrame* opener = render_view->GetWebView()->mainFrame();
diff --git a/chrome/renderer/extensions/app_window_custom_bindings.h b/chrome/renderer/extensions/app_window_custom_bindings.h
index 48635ca..e0f942a 100644
--- a/chrome/renderer/extensions/app_window_custom_bindings.h
+++ b/chrome/renderer/extensions/app_window_custom_bindings.h
@@ -5,15 +5,15 @@
 #ifndef CHROME_RENDERER_EXTENSIONS_APP_WINDOW_CUSTOM_BINDINGS_H_
 #define CHROME_RENDERER_EXTENSIONS_APP_WINDOW_CUSTOM_BINDINGS_H_
 
-#include "chrome/renderer/extensions/chrome_v8_extension.h"
+#include "extensions/renderer/object_backed_native_handler.h"
 
 namespace extensions {
 class Dispatcher;
 
 // Implements custom bindings for the app.window API.
-class AppWindowCustomBindings : public ChromeV8Extension {
+class AppWindowCustomBindings : public ObjectBackedNativeHandler {
  public:
-  AppWindowCustomBindings(Dispatcher* dispatcher, ChromeV8Context* context);
+  AppWindowCustomBindings(Dispatcher* dispatcher, ScriptContext* context);
 
  private:
   void GetView(const v8::FunctionCallbackInfo<v8::Value>& args);
@@ -23,6 +23,9 @@
   void GetWindowControlsHtmlTemplate(
       const v8::FunctionCallbackInfo<v8::Value>& args);
 
+  // Dispatcher handle. Not owned.
+  Dispatcher* dispatcher_;
+
   DISALLOW_COPY_AND_ASSIGN(AppWindowCustomBindings);
 };
 
diff --git a/chrome/renderer/extensions/binding_generating_native_handler.cc b/chrome/renderer/extensions/binding_generating_native_handler.cc
deleted file mode 100644
index 91f2d91..0000000
--- a/chrome/renderer/extensions/binding_generating_native_handler.cc
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright (c) 2012 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 "chrome/renderer/extensions/binding_generating_native_handler.h"
-
-#include "extensions/renderer/module_system.h"
-
-namespace extensions {
-
-BindingGeneratingNativeHandler::BindingGeneratingNativeHandler(
-    ModuleSystem* module_system,
-    const std::string& api_name,
-    const std::string& bind_to)
-    : module_system_(module_system),
-      api_name_(api_name),
-      bind_to_(bind_to) {
-}
-
-v8::Handle<v8::Object> BindingGeneratingNativeHandler::NewInstance() {
-  v8::Isolate* isolate = module_system_->GetIsolate();
-  v8::EscapableHandleScope scope(isolate);
-  v8::Handle<v8::Object> binding_module =
-      module_system_->Require("binding")->ToObject();
-  v8::Handle<v8::Object> binding = binding_module
-      ->Get(v8::String::NewFromUtf8(isolate, "Binding"))->ToObject();
-  v8::Handle<v8::Function> create_binding = binding
-      ->Get(v8::String::NewFromUtf8(isolate, "create")).As<v8::Function>();
-  v8::Handle<v8::Value> argv[] = {v8::String::NewFromUtf8(isolate,
-                                                          api_name_.c_str())};
-  v8::Handle<v8::Object> binding_instance =
-      create_binding->Call(binding, arraysize(argv), argv)->ToObject();
-  v8::Handle<v8::Function> generate = binding_instance
-      ->Get(v8::String::NewFromUtf8(isolate, "generate")).As<v8::Function>();
-  v8::Local<v8::Object> object = v8::Object::New(isolate);
-  v8::Handle<v8::Value> compiled_schema =
-      generate->Call(binding_instance, 0, NULL);
-  if (!compiled_schema.IsEmpty()) {
-    object->Set(v8::String::NewFromUtf8(isolate, bind_to_.c_str()),
-                compiled_schema);
-  }
-  return scope.Escape(object);
-}
-
-} // namespace extensions
diff --git a/chrome/renderer/extensions/binding_generating_native_handler.h b/chrome/renderer/extensions/binding_generating_native_handler.h
deleted file mode 100644
index ed58e08..0000000
--- a/chrome/renderer/extensions/binding_generating_native_handler.h
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright (c) 2012 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 CHROME_RENDERER_EXTENSIONS_BINDING_GENERATING_NATIVE_HANDLER_H_
-#define CHROME_RENDERER_EXTENSIONS_BINDING_GENERATING_NATIVE_HANDLER_H_
-
-#include <string>
-
-#include "base/compiler_specific.h"
-#include "extensions/renderer/native_handler.h"
-
-namespace extensions {
-
-class ModuleSystem;
-
-// Generates API bindings based on the JSON/IDL schemas. This is done by
-// creating a |Binding| (from binding.js) for the schema and generating the
-// bindings from that.
-class BindingGeneratingNativeHandler : public NativeHandler {
- public:
-  // Generates binding for |api_name|, and sets the |bind_to| property on the
-  // Object returned by |NewInstance| to the generated binding.
-  BindingGeneratingNativeHandler(ModuleSystem* module_system,
-                                 const std::string& api_name,
-                                 const std::string& bind_to);
-
-  virtual v8::Handle<v8::Object> NewInstance() OVERRIDE;
-
- private:
-  ModuleSystem* module_system_;
-  std::string api_name_;
-  std::string bind_to_;
-};
-
-}  // namespace extensions
-
-#endif  // CHROME_RENDERER_EXTENSIONS_BINDING_GENERATING_NATIVE_HANDLER_H_
diff --git a/chrome/renderer/extensions/blob_native_handler.cc b/chrome/renderer/extensions/blob_native_handler.cc
deleted file mode 100644
index 6c6bbfe..0000000
--- a/chrome/renderer/extensions/blob_native_handler.cc
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2013 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 "chrome/renderer/extensions/blob_native_handler.h"
-
-#include "base/bind.h"
-#include "third_party/WebKit/public/platform/WebCString.h"
-#include "third_party/WebKit/public/platform/WebURL.h"
-#include "third_party/WebKit/public/web/WebBlob.h"
-
-namespace {
-
-// Expects a single Blob argument. Returns the Blob's UUID.
-void GetBlobUuid(const v8::FunctionCallbackInfo<v8::Value>& args) {
-  DCHECK_EQ(1, args.Length());
-  blink::WebBlob blob = blink::WebBlob::fromV8Value(args[0]);
-  args.GetReturnValue().Set(
-      v8::String::NewFromUtf8(args.GetIsolate(), blob.uuid().utf8().data()));
-}
-
-}  // namespace
-
-namespace extensions {
-
-BlobNativeHandler::BlobNativeHandler(ScriptContext* context)
-    : ObjectBackedNativeHandler(context) {
-  RouteFunction("GetBlobUuid", base::Bind(&GetBlobUuid));
-}
-
-}  // namespace extensions
diff --git a/chrome/renderer/extensions/blob_native_handler.h b/chrome/renderer/extensions/blob_native_handler.h
deleted file mode 100644
index 4eee852..0000000
--- a/chrome/renderer/extensions/blob_native_handler.h
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2013 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 CHROME_RENDERER_EXTENSIONS_BLOB_NATIVE_HANDLER_H_
-#define CHROME_RENDERER_EXTENSIONS_BLOB_NATIVE_HANDLER_H_
-
-#include "extensions/renderer/object_backed_native_handler.h"
-
-namespace extensions {
-class ScriptContext;
-
-// This native handler is used to extract Blobs' UUIDs and pass them over to the
-// browser process extension implementation via argument modification. This is
-// necessary to support extension functions that take Blob parameters, as Blobs
-// are not serialized and sent over to the browser process in the normal way.
-//
-// Blobs sent via this method don't have their ref-counts incremented, so the
-// app using this technique must be sure to keep a reference.
-class BlobNativeHandler : public ObjectBackedNativeHandler {
- public:
-  explicit BlobNativeHandler(ScriptContext* context);
-};
-
-}  // namespace extensions
-
-#endif  // CHROME_RENDERER_EXTENSIONS_BLOB_NATIVE_HANDLER_H_
diff --git a/chrome/renderer/extensions/cast_streaming_native_handler.cc b/chrome/renderer/extensions/cast_streaming_native_handler.cc
index f77b5fc..424ba05 100644
--- a/chrome/renderer/extensions/cast_streaming_native_handler.cc
+++ b/chrome/renderer/extensions/cast_streaming_native_handler.cc
@@ -12,11 +12,11 @@
 #include "base/message_loop/message_loop.h"
 #include "chrome/common/extensions/api/cast_streaming_rtp_stream.h"
 #include "chrome/common/extensions/api/cast_streaming_udp_transport.h"
-#include "chrome/renderer/extensions/chrome_v8_context.h"
 #include "chrome/renderer/media/cast_rtp_stream.h"
 #include "chrome/renderer/media/cast_session.h"
 #include "chrome/renderer/media/cast_udp_transport.h"
 #include "content/public/renderer/v8_value_converter.h"
+#include "extensions/renderer/script_context.h"
 #include "net/base/host_port_pair.h"
 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h"
 #include "third_party/WebKit/public/web/WebDOMMediaStreamTrack.h"
@@ -145,7 +145,7 @@
 
 }  // namespace
 
-CastStreamingNativeHandler::CastStreamingNativeHandler(ChromeV8Context* context)
+CastStreamingNativeHandler::CastStreamingNativeHandler(ScriptContext* context)
     : ObjectBackedNativeHandler(context),
       last_transport_id_(1),
       weak_factory_(this) {
diff --git a/chrome/renderer/extensions/cast_streaming_native_handler.h b/chrome/renderer/extensions/cast_streaming_native_handler.h
index a78e9b4..f468186 100644
--- a/chrome/renderer/extensions/cast_streaming_native_handler.h
+++ b/chrome/renderer/extensions/cast_streaming_native_handler.h
@@ -23,12 +23,10 @@
 
 namespace extensions {
 
-class ChromeV8Context;
-
 // Native code that handle chrome.webrtc custom bindings.
 class CastStreamingNativeHandler : public ObjectBackedNativeHandler {
  public:
-  explicit CastStreamingNativeHandler(ChromeV8Context* context);
+  explicit CastStreamingNativeHandler(ScriptContext* context);
   virtual ~CastStreamingNativeHandler();
 
  private:
diff --git a/chrome/renderer/extensions/chrome_extensions_renderer_client.cc b/chrome/renderer/extensions/chrome_extensions_renderer_client.cc
new file mode 100644
index 0000000..c3ef38d
--- /dev/null
+++ b/chrome/renderer/extensions/chrome_extensions_renderer_client.cc
@@ -0,0 +1,28 @@
+// 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.
+
+#include "chrome/renderer/extensions/chrome_extensions_renderer_client.h"
+
+#include "base/lazy_instance.h"
+#include "chrome/renderer/chrome_render_process_observer.h"
+#include "chrome/renderer/isolated_world_ids.h"
+
+ChromeExtensionsRendererClient::ChromeExtensionsRendererClient() {}
+
+ChromeExtensionsRendererClient::~ChromeExtensionsRendererClient() {}
+
+// static
+ChromeExtensionsRendererClient* ChromeExtensionsRendererClient::GetInstance() {
+  static base::LazyInstance<ChromeExtensionsRendererClient> client =
+      LAZY_INSTANCE_INITIALIZER;
+  return client.Pointer();
+}
+
+bool ChromeExtensionsRendererClient::IsIncognitoProcess() const {
+  return ChromeRenderProcessObserver::is_incognito_process();
+}
+
+int ChromeExtensionsRendererClient::GetLowestIsolatedWorldId() const {
+  return chrome::ISOLATED_WORLD_ID_EXTENSIONS;
+}
diff --git a/chrome/renderer/extensions/chrome_extensions_renderer_client.h b/chrome/renderer/extensions/chrome_extensions_renderer_client.h
new file mode 100644
index 0000000..801bc1a
--- /dev/null
+++ b/chrome/renderer/extensions/chrome_extensions_renderer_client.h
@@ -0,0 +1,28 @@
+// 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.
+
+#ifndef CHROME_RENDERER_EXTENSIONS_CHROME_EXTENSIONS_RENDERER_CLIENT_H_
+#define CHROME_RENDERER_EXTENSIONS_CHROME_EXTENSIONS_RENDERER_CLIENT_H_
+
+#include "base/macros.h"
+#include "extensions/renderer/extensions_renderer_client.h"
+
+class ChromeExtensionsRendererClient
+    : public extensions::ExtensionsRendererClient {
+ public:
+  ChromeExtensionsRendererClient();
+  virtual ~ChromeExtensionsRendererClient();
+
+  // Get the LazyInstance for ChromeExtensionsRendererClient.
+  static ChromeExtensionsRendererClient* GetInstance();
+
+  // extensions::ExtensionsRendererClient implementation.
+  virtual bool IsIncognitoProcess() const OVERRIDE;
+  virtual int GetLowestIsolatedWorldId() const OVERRIDE;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(ChromeExtensionsRendererClient);
+};
+
+#endif  // CHROME_RENDERER_EXTENSIONS_CHROME_EXTENSIONS_RENDERER_CLIENT_H_
diff --git a/chrome/renderer/extensions/chrome_v8_context_set.cc b/chrome/renderer/extensions/chrome_v8_context_set.cc
deleted file mode 100644
index 74a0a6d..0000000
--- a/chrome/renderer/extensions/chrome_v8_context_set.cc
+++ /dev/null
@@ -1,138 +0,0 @@
-// Copyright (c) 2012 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 "chrome/renderer/extensions/chrome_v8_context_set.h"
-
-#include "base/logging.h"
-#include "base/message_loop/message_loop.h"
-#include "base/tracked_objects.h"
-#include "base/values.h"
-#include "chrome/common/url_constants.h"
-#include "chrome/renderer/extensions/chrome_v8_context.h"
-#include "content/public/renderer/render_thread.h"
-#include "content/public/renderer/render_view.h"
-#include "extensions/common/constants.h"
-#include "extensions/common/extension.h"
-#include "third_party/WebKit/public/platform/WebURL.h"
-#include "third_party/WebKit/public/platform/WebURLRequest.h"
-#include "third_party/WebKit/public/web/WebDocument.h"
-#include "third_party/WebKit/public/web/WebFrame.h"
-#include "third_party/WebKit/public/web/WebView.h"
-#include "v8/include/v8.h"
-
-using content::RenderThread;
-
-namespace extensions {
-
-ChromeV8ContextSet::ChromeV8ContextSet() {
-}
-ChromeV8ContextSet::~ChromeV8ContextSet() {
-}
-
-int ChromeV8ContextSet::size() const {
-  return static_cast<int>(contexts_.size());
-}
-
-void ChromeV8ContextSet::Add(ChromeV8Context* context) {
-#if DCHECK_IS_ON
-  // It's OK to insert the same context twice, but we should only ever have
-  // one ChromeV8Context per v8::Context.
-  for (ContextSet::iterator iter = contexts_.begin(); iter != contexts_.end();
-      ++iter) {
-    ChromeV8Context* candidate = *iter;
-    if (candidate != context)
-      DCHECK(candidate->v8_context() != context->v8_context());
-  }
-#endif
-  contexts_.insert(context);
-}
-
-void ChromeV8ContextSet::Remove(ChromeV8Context* context) {
-  if (contexts_.erase(context)) {
-    context->Invalidate();
-    base::MessageLoop::current()->DeleteSoon(FROM_HERE, context);
-  }
-}
-
-ChromeV8ContextSet::ContextSet ChromeV8ContextSet::GetAll() const {
-  return contexts_;
-}
-
-ChromeV8Context* ChromeV8ContextSet::GetCurrent() const {
-  v8::Isolate* isolate = v8::Isolate::GetCurrent();
-  return isolate->InContext() ? GetByV8Context(isolate->GetCurrentContext())
-                              : NULL;
-}
-
-ChromeV8Context* ChromeV8ContextSet::GetCalling() const {
-  v8::Isolate* isolate = v8::Isolate::GetCurrent();
-  v8::Local<v8::Context> calling = isolate->GetCallingContext();
-  return calling.IsEmpty() ? NULL : GetByV8Context(calling);
-}
-
-ChromeV8Context* ChromeV8ContextSet::GetByV8Context(
-    v8::Handle<v8::Context> v8_context) const {
-  for (ContextSet::const_iterator iter = contexts_.begin();
-       iter != contexts_.end(); ++iter) {
-    if ((*iter)->v8_context() == v8_context)
-      return *iter;
-  }
-
-  return NULL;
-}
-
-void ChromeV8ContextSet::ForEach(
-    const std::string& extension_id,
-    content::RenderView* render_view,
-    const base::Callback<void(ChromeV8Context*)>& callback) const {
-  // We copy the context list, because calling into javascript may modify it
-  // out from under us.
-  ContextSet contexts = GetAll();
-
-  for (ContextSet::iterator it = contexts.begin(); it != contexts.end();
-       ++it) {
-    ChromeV8Context* context = *it;
-
-    // For the same reason as above, contexts may become invalid while we run.
-    if (!context->is_valid())
-      continue;
-
-    if (!extension_id.empty()) {
-      const Extension* extension = context->extension();
-      if (!extension || (extension_id != extension->id()))
-        continue;
-    }
-
-    content::RenderView* context_render_view = context->GetRenderView();
-    if (!context_render_view)
-      continue;
-
-    if (render_view && render_view != context_render_view)
-      continue;
-
-    callback.Run(context);
-  }
-}
-
-ChromeV8ContextSet::ContextSet ChromeV8ContextSet::OnExtensionUnloaded(
-    const std::string& extension_id) {
-  ContextSet contexts = GetAll();
-  ContextSet removed;
-
-  // Clean up contexts belonging to the unloaded extension. This is done so
-  // that content scripts (which remain injected into the page) don't continue
-  // receiving events and sending messages.
-  for (ContextSet::iterator it = contexts.begin(); it != contexts.end();
-       ++it) {
-    if ((*it)->extension() && (*it)->extension()->id() == extension_id) {
-      (*it)->DispatchOnUnloadEvent();
-      removed.insert(*it);
-      Remove(*it);
-    }
-  }
-
-  return removed;
-}
-
-}  // namespace extensions
diff --git a/chrome/renderer/extensions/chrome_v8_context_set.h b/chrome/renderer/extensions/chrome_v8_context_set.h
deleted file mode 100644
index f47a61f..0000000
--- a/chrome/renderer/extensions/chrome_v8_context_set.h
+++ /dev/null
@@ -1,90 +0,0 @@
-// Copyright (c) 2012 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 CHROME_RENDERER_EXTENSIONS_CHROME_V8_CONTEXT_SET_H_
-#define CHROME_RENDERER_EXTENSIONS_CHROME_V8_CONTEXT_SET_H_
-
-#include <set>
-#include <string>
-
-#include "base/basictypes.h"
-#include "base/bind.h"
-#include "v8/include/v8.h"
-
-class GURL;
-
-namespace base {
-class ListValue;
-}
-
-namespace content {
-class RenderView;
-}
-
-namespace v8 {
-class Context;
-}
-
-namespace extensions {
-class ChromeV8Context;
-
-// A container of ExtensionBindingsContext. Since calling JavaScript within a
-// context can cause any number of contexts to be created or destroyed, this
-// has additional smarts to help with the set changing underneath callers.
-class ChromeV8ContextSet {
- public:
-  ChromeV8ContextSet();
-  ~ChromeV8ContextSet();
-
-  int size() const;
-
-  // Takes ownership of |context|.
-  void Add(ChromeV8Context* context);
-
-  // If the specified context is contained in this set, remove it, then delete
-  // it asynchronously. After this call returns the context object will still
-  // be valid, but its frame() pointer will be cleared.
-  void Remove(ChromeV8Context* context);
-
-  // Returns a copy to protect against changes.
-  typedef std::set<ChromeV8Context*> ContextSet;
-  ContextSet GetAll() const;
-
-  // Gets the ChromeV8Context corresponding to v8::Context::GetCurrent(), or
-  // NULL if no such context exists.
-  ChromeV8Context* GetCurrent() const;
-
-  // Gets the ChromeV8Context corresponding to v8::Context::GetCalling(), or
-  // NULL if no such context exists.
-  ChromeV8Context* GetCalling() const;
-
-  // Gets the ChromeV8Context corresponding to the specified
-  // v8::Context or NULL if no such context exists.
-  ChromeV8Context* GetByV8Context(v8::Handle<v8::Context> context) const;
-
-  // Synchronously runs |callback| with each ChromeV8Context that belongs to
-  // |extension_id| in |render_view|.
-  //
-  // |extension_id| may be "" to match all extensions.
-  // |render_view| may be NULL to match all render views.
-  void ForEach(const std::string& extension_id,
-               content::RenderView* render_view,
-               const base::Callback<void(ChromeV8Context*)>& callback) const;
-
-  // Cleans up contexts belonging to an unloaded extension.
-  //
-  // Returns the set of ChromeV8Contexts that were removed as a result. These
-  // are safe to interact with until the end of the current event loop, since
-  // they're deleted asynchronously.
-  ContextSet OnExtensionUnloaded(const std::string& extension_id);
-
- private:
-  ContextSet contexts_;
-
-  DISALLOW_COPY_AND_ASSIGN(ChromeV8ContextSet);
-};
-
-}  // namespace extensions
-
-#endif  // CHROME_RENDERER_EXTENSIONS_CHROME_V8_CONTEXT_SET_H_
diff --git a/chrome/renderer/extensions/chrome_v8_context_set_unittest.cc b/chrome/renderer/extensions/chrome_v8_context_set_unittest.cc
deleted file mode 100644
index 002b129..0000000
--- a/chrome/renderer/extensions/chrome_v8_context_set_unittest.cc
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (c) 2012 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 "base/message_loop/message_loop.h"
-#include "chrome/renderer/extensions/chrome_v8_context.h"
-#include "chrome/renderer/extensions/chrome_v8_context_set.h"
-#include "extensions/common/extension.h"
-#include "extensions/common/features/feature.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/WebKit/public/web/WebFrame.h"
-#include "v8/include/v8.h"
-
-namespace extensions {
-
-TEST(ChromeV8ContextSet, Lifecycle) {
-  base::MessageLoop loop;
-
-  ChromeV8ContextSet context_set;
-
-  v8::Isolate* isolate = v8::Isolate::GetCurrent();
-  v8::HandleScope handle_scope(isolate);
-  v8::Handle<v8::Context> v8_context(v8::Context::New(isolate));
-
-  // Dirty hack, but we don't actually need the frame, and this is easier than
-  // creating a whole webview.
-  blink::WebFrame* frame = reinterpret_cast<blink::WebFrame*>(1);
-  const Extension* extension = NULL;
-  ChromeV8Context* context = new ChromeV8Context(
-      v8_context,
-      frame,
-      extension,
-      Feature::BLESSED_EXTENSION_CONTEXT);
-
-  context_set.Add(context);
-  EXPECT_EQ(1u, context_set.GetAll().count(context));
-  EXPECT_EQ(context, context_set.GetByV8Context(context->v8_context()));
-
-  // Adding the same item multiple times should be OK and deduped.
-  context_set.Add(context);
-  EXPECT_EQ(1u, context_set.GetAll().count(context));
-
-  // GetAll() returns a copy so removing from one should not remove from others.
-  ChromeV8ContextSet::ContextSet set_copy = context_set.GetAll();
-  EXPECT_EQ(1u, set_copy.count(context));
-
-  context_set.Remove(context);
-  EXPECT_EQ(0, context_set.size());
-  EXPECT_FALSE(context_set.GetByV8Context(context->v8_context()));
-  EXPECT_EQ(1u, set_copy.size());
-
-  // After removal, the context should be marked for destruction.
-  EXPECT_FALSE(context->web_frame());
-
-  // Run loop to do the actual deletion.
-  loop.RunUntilIdle();
-}
-
-}  // namespace extensions
diff --git a/chrome/renderer/extensions/chrome_v8_extension.cc b/chrome/renderer/extensions/chrome_v8_extension.cc
deleted file mode 100644
index 56fe379..0000000
--- a/chrome/renderer/extensions/chrome_v8_extension.cc
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright (c) 2012 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 "chrome/renderer/extensions/chrome_v8_extension.h"
-
-#include "base/logging.h"
-#include "chrome/renderer/extensions/chrome_v8_context.h"
-#include "chrome/renderer/extensions/dispatcher.h"
-#include "content/public/renderer/render_view.h"
-
-namespace extensions {
-
-ChromeV8Extension::ChromeV8Extension(Dispatcher* dispatcher,
-                                     ChromeV8Context* context)
-    : ObjectBackedNativeHandler(context),
-      dispatcher_(dispatcher) {
-  CHECK(dispatcher);
-}
-
-ChromeV8Extension::~ChromeV8Extension() {
-}
-
-content::RenderView* ChromeV8Extension::GetRenderView() {
-  return context() ? context()->GetRenderView() : NULL;
-}
-
-const Extension* ChromeV8Extension::GetExtensionForRenderView() {
-  return context() ? context()->extension() : NULL;
-}
-
-}  // namespace extensions
diff --git a/chrome/renderer/extensions/chrome_v8_extension.h b/chrome/renderer/extensions/chrome_v8_extension.h
deleted file mode 100644
index 2fab470..0000000
--- a/chrome/renderer/extensions/chrome_v8_extension.h
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright (c) 2012 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 CHROME_RENDERER_EXTENSIONS_CHROME_V8_EXTENSION_H_
-#define CHROME_RENDERER_EXTENSIONS_CHROME_V8_EXTENSION_H_
-
-#include "base/logging.h"
-#include "base/memory/linked_ptr.h"
-#include "base/strings/string_piece.h"
-#include "chrome/renderer/extensions/chrome_v8_extension_handler.h"
-#include "extensions/renderer/object_backed_native_handler.h"
-#include "v8/include/v8.h"
-
-#include <map>
-#include <set>
-#include <string>
-
-
-namespace content {
-class RenderView;
-}
-
-namespace extensions {
-class ChromeV8Context;
-class Dispatcher;
-class Extension;
-
-// DEPRECATED.
-//
-// This is a base class for chrome extension bindings.  Common features that
-// are shared by different modules go here.
-//
-// TODO(kalman): Delete this class entirely, it has no value anymore.
-//               Custom bindings should extend ObjectBackedNativeHandler.
-class ChromeV8Extension : public ObjectBackedNativeHandler {
- public:
-  ChromeV8Extension(Dispatcher* dispatcher, ChromeV8Context* context);
-  virtual ~ChromeV8Extension();
-
-  Dispatcher* dispatcher() { return dispatcher_; }
-
-  // Shortcuts through to the context's render view and extension.
-  content::RenderView* GetRenderView();
-  const Extension* GetExtensionForRenderView();
-
- protected:
-  Dispatcher* dispatcher_;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(ChromeV8Extension);
-};
-
-}  // namespace extensions
-
-#endif  // CHROME_RENDERER_EXTENSIONS_CHROME_V8_EXTENSION_H_
diff --git a/chrome/renderer/extensions/chrome_v8_extension_handler.cc b/chrome/renderer/extensions/chrome_v8_extension_handler.cc
index eaa8a2f..0698dd4 100644
--- a/chrome/renderer/extensions/chrome_v8_extension_handler.cc
+++ b/chrome/renderer/extensions/chrome_v8_extension_handler.cc
@@ -5,14 +5,14 @@
 #include "chrome/renderer/extensions/chrome_v8_extension_handler.h"
 
 #include "base/logging.h"
-#include "chrome/renderer/extensions/chrome_v8_context.h"
 #include "content/public/renderer/render_thread.h"
+#include "extensions/renderer/script_context.h"
 
 using content::RenderThread;
 
 namespace extensions {
 
-ChromeV8ExtensionHandler::ChromeV8ExtensionHandler(ChromeV8Context* context)
+ChromeV8ExtensionHandler::ChromeV8ExtensionHandler(ScriptContext* context)
     : context_(context), routing_id_(MSG_ROUTING_NONE) {
 }
 
diff --git a/chrome/renderer/extensions/chrome_v8_extension_handler.h b/chrome/renderer/extensions/chrome_v8_extension_handler.h
index 71f86b2..fab359f 100644
--- a/chrome/renderer/extensions/chrome_v8_extension_handler.h
+++ b/chrome/renderer/extensions/chrome_v8_extension_handler.h
@@ -12,7 +12,7 @@
 #include "v8/include/v8.h"
 
 namespace extensions {
-class ChromeV8Context;
+class ScriptContext;
 
 // Base class for context-scoped handlers used with ChromeV8Extension.
 // TODO(koz): Rename/refactor this somehow. Maybe just pull it into
@@ -25,10 +25,10 @@
   virtual bool OnMessageReceived(const IPC::Message& message) = 0;
 
  protected:
-  explicit ChromeV8ExtensionHandler(ChromeV8Context* context);
+  explicit ChromeV8ExtensionHandler(ScriptContext* context);
   int GetRoutingID();
   void Send(IPC::Message* message);
-  ChromeV8Context* context_;
+  ScriptContext* context_;
 
  private:
   int routing_id_;
diff --git a/chrome/renderer/extensions/content_watcher.cc b/chrome/renderer/extensions/content_watcher.cc
deleted file mode 100644
index a7c00e6..0000000
--- a/chrome/renderer/extensions/content_watcher.cc
+++ /dev/null
@@ -1,119 +0,0 @@
-// Copyright (c) 2012 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 "chrome/renderer/extensions/content_watcher.h"
-
-#include "content/public/renderer/render_view.h"
-#include "content/public/renderer/render_view_visitor.h"
-#include "extensions/common/extension_messages.h"
-#include "third_party/WebKit/public/web/WebDocument.h"
-#include "third_party/WebKit/public/web/WebElement.h"
-#include "third_party/WebKit/public/web/WebFrame.h"
-#include "third_party/WebKit/public/web/WebScriptBindings.h"
-#include "third_party/WebKit/public/web/WebView.h"
-
-namespace extensions {
-
-using blink::WebString;
-using blink::WebVector;
-using blink::WebView;
-
-ContentWatcher::ContentWatcher() {}
-ContentWatcher::~ContentWatcher() {}
-
-void ContentWatcher::OnWatchPages(
-    const std::vector<std::string>& new_css_selectors_utf8) {
-  blink::WebVector<blink::WebString> new_css_selectors(
-      new_css_selectors_utf8.size());
-  bool changed = new_css_selectors.size() != css_selectors_.size();
-  for (size_t i = 0; i < new_css_selectors.size(); ++i) {
-    new_css_selectors[i] =
-        blink::WebString::fromUTF8(new_css_selectors_utf8[i]);
-    if (!changed && new_css_selectors[i] != css_selectors_[i])
-      changed = true;
-  }
-
-  if (!changed)
-    return;
-
-  css_selectors_.swap(new_css_selectors);
-
-  // Tell each frame's document about the new set of watched selectors. These
-  // will trigger calls to DidMatchCSS after Blink has a chance to apply the new
-  // style, which will in turn notify the browser about the changes.
-  struct WatchSelectors : public content::RenderViewVisitor {
-    explicit WatchSelectors(const WebVector<WebString>& css_selectors)
-        : css_selectors_(css_selectors) {}
-
-    virtual bool Visit(content::RenderView* view) OVERRIDE {
-      for (blink::WebFrame* frame = view->GetWebView()->mainFrame(); frame;
-           frame = frame->traverseNext(/*wrap=*/false))
-        frame->document().watchCSSSelectors(css_selectors_);
-
-      return true;  // Continue visiting.
-    }
-
-    const WebVector<WebString>& css_selectors_;
-  };
-  WatchSelectors visitor(css_selectors_);
-  content::RenderView::ForEach(&visitor);
-}
-
-void ContentWatcher::DidCreateDocumentElement(blink::WebFrame* frame) {
-  frame->document().watchCSSSelectors(css_selectors_);
-}
-
-void ContentWatcher::DidMatchCSS(
-    blink::WebFrame* frame,
-    const WebVector<WebString>& newly_matching_selectors,
-    const WebVector<WebString>& stopped_matching_selectors) {
-  std::set<std::string>& frame_selectors = matching_selectors_[frame];
-  for (size_t i = 0; i < stopped_matching_selectors.size(); ++i)
-    frame_selectors.erase(stopped_matching_selectors[i].utf8());
-  for (size_t i = 0; i < newly_matching_selectors.size(); ++i)
-    frame_selectors.insert(newly_matching_selectors[i].utf8());
-
-  if (frame_selectors.empty())
-    matching_selectors_.erase(frame);
-
-  NotifyBrowserOfChange(frame);
-}
-
-void ContentWatcher::NotifyBrowserOfChange(
-    blink::WebFrame* changed_frame) const {
-  blink::WebFrame* const top_frame = changed_frame->top();
-  const blink::WebSecurityOrigin top_origin =
-      top_frame->document().securityOrigin();
-  // Want to aggregate matched selectors from all frames where an
-  // extension with access to top_origin could run on the frame.
-  if (!top_origin.canAccess(changed_frame->document().securityOrigin())) {
-    // If the changed frame can't be accessed by the top frame, then
-    // no change in it could affect the set of selectors we'd send back.
-    return;
-  }
-
-  std::set<base::StringPiece> transitive_selectors;
-  for (blink::WebFrame* frame = top_frame; frame;
-       frame = frame->traverseNext(/*wrap=*/false)) {
-    if (top_origin.canAccess(frame->document().securityOrigin())) {
-      std::map<blink::WebFrame*, std::set<std::string> >::const_iterator
-          frame_selectors = matching_selectors_.find(frame);
-      if (frame_selectors != matching_selectors_.end()) {
-        transitive_selectors.insert(frame_selectors->second.begin(),
-                                    frame_selectors->second.end());
-      }
-    }
-  }
-  std::vector<std::string> selector_strings;
-  for (std::set<base::StringPiece>::const_iterator
-           it = transitive_selectors.begin();
-       it != transitive_selectors.end(); ++it)
-    selector_strings.push_back(it->as_string());
-  content::RenderView* view =
-      content::RenderView::FromWebView(top_frame->view());
-  view->Send(new ExtensionHostMsg_OnWatchedPageChange(
-      view->GetRoutingID(), selector_strings));
-}
-
-}  // namespace extensions
diff --git a/chrome/renderer/extensions/content_watcher.h b/chrome/renderer/extensions/content_watcher.h
deleted file mode 100644
index 8eb2289..0000000
--- a/chrome/renderer/extensions/content_watcher.h
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright (c) 2012 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 CHROME_RENDERER_EXTENSIONS_CONTENT_WATCHER_H_
-#define CHROME_RENDERER_EXTENSIONS_CONTENT_WATCHER_H_
-
-#include <map>
-#include <set>
-#include <string>
-#include <vector>
-
-#include "third_party/WebKit/public/platform/WebVector.h"
-
-namespace blink {
-class WebFrame;
-class WebString;
-}
-
-namespace extensions {
-class Dispatcher;
-class Extension;
-class NativeHandler;
-
-// Watches the content of WebFrames to notify extensions when they match various
-// patterns.  This class tracks the set of relevant patterns (set by
-// ExtensionMsg_WatchPages) and the set that match on each WebFrame, and sends a
-// ExtensionHostMsg_OnWatchedPageChange whenever a RenderView's set changes.
-//
-// There's one ContentWatcher per Dispatcher rather than per RenderView because
-// WebFrames can move between RenderViews through adoptNode.
-class ContentWatcher {
- public:
-  ContentWatcher();
-  ~ContentWatcher();
-
-  // Handler for ExtensionMsg_WatchPages.
-  void OnWatchPages(const std::vector<std::string>& css_selectors);
-
-  // Uses WebDocument::watchCSSSelectors to watch the selectors in
-  // css_selectors_ and get a callback into DidMatchCSS() whenever the set of
-  // matching selectors in |frame| changes.
-  void DidCreateDocumentElement(blink::WebFrame* frame);
-
-  // Records that |newly_matching_selectors| have started matching on |*frame|,
-  // and |stopped_matching_selectors| have stopped matching.
-  void DidMatchCSS(
-      blink::WebFrame* frame,
-      const blink::WebVector<blink::WebString>& newly_matching_selectors,
-      const blink::WebVector<blink::WebString>& stopped_matching_selectors);
-
- private:
-  // Given that we saw a change in the CSS selectors that |changed_frame|
-  // matched, tell the browser about the new set of matching selectors in its
-  // top-level page.  We filter this so that if an extension were to be granted
-  // activeTab permission on that top-level page, we only send CSS selectors for
-  // frames that it could run on.
-  void NotifyBrowserOfChange(blink::WebFrame* changed_frame) const;
-
-  // If any of these selectors match on a page, we need to send an
-  // ExtensionHostMsg_OnWatchedPageChange back to the browser.
-  blink::WebVector<blink::WebString> css_selectors_;
-
-  // Maps live WebFrames to the set of CSS selectors they match. Blink sends
-  // back diffs, which we apply to these sets.
-  std::map<blink::WebFrame*, std::set<std::string> > matching_selectors_;
-};
-
-}  // namespace extensions
-
-#endif  // CHROME_RENDERER_EXTENSIONS_CONTENT_WATCHER_H_
diff --git a/chrome/renderer/extensions/context_menus_custom_bindings.cc b/chrome/renderer/extensions/context_menus_custom_bindings.cc
deleted file mode 100644
index f7a80fd..0000000
--- a/chrome/renderer/extensions/context_menus_custom_bindings.cc
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright (c) 2012 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 "chrome/renderer/extensions/context_menus_custom_bindings.h"
-
-#include "base/bind.h"
-#include "content/public/renderer/render_thread.h"
-#include "extensions/common/extension_messages.h"
-#include "grit/renderer_resources.h"
-#include "v8/include/v8.h"
-
-namespace {
-
-void GetNextContextMenuId(const v8::FunctionCallbackInfo<v8::Value>& args) {
-  int context_menu_id = -1;
-  content::RenderThread::Get()->Send(
-      new ExtensionHostMsg_GenerateUniqueID(&context_menu_id));
-  args.GetReturnValue().Set(static_cast<int32_t>(context_menu_id));
-}
-
-}  // namespace
-
-namespace extensions {
-
-ContextMenusCustomBindings::ContextMenusCustomBindings(
-    Dispatcher* dispatcher, ChromeV8Context* context)
-    : ChromeV8Extension(dispatcher, context) {
-  RouteFunction("GetNextContextMenuId", base::Bind(&GetNextContextMenuId));
-}
-
-}  // extensions
diff --git a/chrome/renderer/extensions/context_menus_custom_bindings.h b/chrome/renderer/extensions/context_menus_custom_bindings.h
deleted file mode 100644
index 3d5a828..0000000
--- a/chrome/renderer/extensions/context_menus_custom_bindings.h
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright (c) 2012 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 CHROME_RENDERER_EXTENSIONS_CONTEXT_MENUS_CUSTOM_BINDINGS_H_
-#define CHROME_RENDERER_EXTENSIONS_CONTEXT_MENUS_CUSTOM_BINDINGS_H_
-
-#include "chrome/renderer/extensions/chrome_v8_extension.h"
-
-namespace extensions {
-
-// Implements custom bindings for the contextMenus API.
-class ContextMenusCustomBindings : public ChromeV8Extension {
- public:
-  ContextMenusCustomBindings(Dispatcher* dispatcher, ChromeV8Context* context);
-};
-
-}  // extensions
-
-#endif  // CHROME_RENDERER_EXTENSIONS_CONTEXT_MENUS_CUSTOM_BINDINGS_H_
diff --git a/chrome/renderer/extensions/css_native_handler.cc b/chrome/renderer/extensions/css_native_handler.cc
deleted file mode 100644
index e5a94ca..0000000
--- a/chrome/renderer/extensions/css_native_handler.cc
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2013 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 "chrome/renderer/extensions/css_native_handler.h"
-
-#include "chrome/renderer/extensions/chrome_v8_context.h"
-#include "third_party/WebKit/public/platform/WebString.h"
-#include "third_party/WebKit/public/web/WebScriptBindings.h"
-#include "third_party/WebKit/public/web/WebSelector.h"
-
-namespace extensions {
-
-using blink::WebString;
-
-CssNativeHandler::CssNativeHandler(ChromeV8Context* context)
-    : ObjectBackedNativeHandler(context) {
-  RouteFunction("CanonicalizeCompoundSelector",
-                base::Bind(&CssNativeHandler::CanonicalizeCompoundSelector,
-                           base::Unretained(this)));
-}
-
-void CssNativeHandler::CanonicalizeCompoundSelector(
-    const v8::FunctionCallbackInfo<v8::Value>& args) {
-  CHECK_EQ(args.Length(), 1);
-  CHECK(args[0]->IsString());
-  WebString input_selector =
-      blink::WebScriptBindings::toWebString(args[0].As<v8::String>());
-  WebString output_selector = blink::canonicalizeSelector(
-      input_selector, blink::WebSelectorTypeCompound);
-  args.GetReturnValue().Set(blink::WebScriptBindings::toV8String(
-      output_selector, context()->v8_context()->GetIsolate()));
-}
-
-}  // namespace extensions
diff --git a/chrome/renderer/extensions/css_native_handler.h b/chrome/renderer/extensions/css_native_handler.h
deleted file mode 100644
index a216500..0000000
--- a/chrome/renderer/extensions/css_native_handler.h
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2013 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 CHROME_RENDERER_EXTENSIONS_CSS_NATIVE_HANDLER_H_
-#define CHROME_RENDERER_EXTENSIONS_CSS_NATIVE_HANDLER_H_
-
-#include "extensions/renderer/object_backed_native_handler.h"
-
-namespace extensions {
-class ChromeV8Context;
-
-class CssNativeHandler : public ObjectBackedNativeHandler {
- public:
-  explicit CssNativeHandler(ChromeV8Context* context);
-
- private:
-  // Expects one string argument that's a comma-separated list of compound CSS
-  // selectors (http://dev.w3.org/csswg/selectors4/#compound), and returns its
-  // Blink-canonicalized form. If the selector is invalid, returns an empty
-  // string.
-  void CanonicalizeCompoundSelector(
-      const v8::FunctionCallbackInfo<v8::Value>& args);
-};
-
-}  // namespace extensions
-
-#endif  // CHROME_RENDERER_EXTENSIONS_CSS_NATIVE_HANDLER_H_
diff --git a/chrome/renderer/extensions/dispatcher.cc b/chrome/renderer/extensions/dispatcher.cc
index 38f4756..f4b2f46 100644
--- a/chrome/renderer/extensions/dispatcher.cc
+++ b/chrome/renderer/extensions/dispatcher.cc
@@ -23,43 +23,25 @@
 #include "chrome/common/url_constants.h"
 #include "chrome/renderer/chrome_render_process_observer.h"
 #include "chrome/renderer/extensions/api_activity_logger.h"
-#include "chrome/renderer/extensions/api_definitions_natives.h"
 #include "chrome/renderer/extensions/app_bindings.h"
 #include "chrome/renderer/extensions/app_runtime_custom_bindings.h"
 #include "chrome/renderer/extensions/app_window_custom_bindings.h"
-#include "chrome/renderer/extensions/binding_generating_native_handler.h"
-#include "chrome/renderer/extensions/blob_native_handler.h"
 #include "chrome/renderer/extensions/chrome_v8_context.h"
-#include "chrome/renderer/extensions/chrome_v8_extension.h"
-#include "chrome/renderer/extensions/content_watcher.h"
-#include "chrome/renderer/extensions/context_menus_custom_bindings.h"
-#include "chrome/renderer/extensions/css_native_handler.h"
-#include "chrome/renderer/extensions/document_custom_bindings.h"
 #include "chrome/renderer/extensions/dom_activity_logger.h"
-#include "chrome/renderer/extensions/extension_groups.h"
 #include "chrome/renderer/extensions/extension_helper.h"
 #include "chrome/renderer/extensions/file_browser_handler_custom_bindings.h"
 #include "chrome/renderer/extensions/file_browser_private_custom_bindings.h"
-#include "chrome/renderer/extensions/file_system_natives.h"
-#include "chrome/renderer/extensions/i18n_custom_bindings.h"
-#include "chrome/renderer/extensions/id_generator_custom_bindings.h"
-#include "chrome/renderer/extensions/logging_native_handler.h"
 #include "chrome/renderer/extensions/media_galleries_custom_bindings.h"
 #include "chrome/renderer/extensions/messaging_bindings.h"
 #include "chrome/renderer/extensions/page_actions_custom_bindings.h"
 #include "chrome/renderer/extensions/page_capture_custom_bindings.h"
 #include "chrome/renderer/extensions/pepper_request_natives.h"
-#include "chrome/renderer/extensions/render_view_observer_natives.h"
 #include "chrome/renderer/extensions/runtime_custom_bindings.h"
-#include "chrome/renderer/extensions/send_request_natives.h"
-#include "chrome/renderer/extensions/set_icon_natives.h"
 #include "chrome/renderer/extensions/sync_file_system_custom_bindings.h"
 #include "chrome/renderer/extensions/tab_finder.h"
 #include "chrome/renderer/extensions/tabs_custom_bindings.h"
 #include "chrome/renderer/extensions/user_script_slave.h"
-#include "chrome/renderer/extensions/utils_native_handler.h"
 #include "chrome/renderer/extensions/webstore_bindings.h"
-#include "chrome/renderer/resource_bundle_source_map.h"
 #include "content/public/renderer/render_thread.h"
 #include "content/public/renderer/render_view.h"
 #include "content/public/renderer/v8_value_converter.h"
@@ -80,12 +62,29 @@
 #include "extensions/common/permissions/permissions_data.h"
 #include "extensions/common/switches.h"
 #include "extensions/common/view_type.h"
+#include "extensions/renderer/api_definitions_natives.h"
+#include "extensions/renderer/binding_generating_native_handler.h"
+#include "extensions/renderer/blob_native_handler.h"
+#include "extensions/renderer/content_watcher.h"
+#include "extensions/renderer/context_menus_custom_bindings.h"
+#include "extensions/renderer/css_native_handler.h"
+#include "extensions/renderer/document_custom_bindings.h"
 #include "extensions/renderer/event_bindings.h"
+#include "extensions/renderer/extension_groups.h"
+#include "extensions/renderer/file_system_natives.h"
+#include "extensions/renderer/i18n_custom_bindings.h"
+#include "extensions/renderer/id_generator_custom_bindings.h"
+#include "extensions/renderer/logging_native_handler.h"
 #include "extensions/renderer/module_system.h"
 #include "extensions/renderer/object_backed_native_handler.h"
+#include "extensions/renderer/render_view_observer_natives.h"
 #include "extensions/renderer/request_sender.h"
 #include "extensions/renderer/safe_builtins.h"
 #include "extensions/renderer/script_context.h"
+#include "extensions/renderer/script_context_set.h"
+#include "extensions/renderer/send_request_natives.h"
+#include "extensions/renderer/set_icon_natives.h"
+#include "extensions/renderer/utils_native_handler.h"
 #include "grit/common_resources.h"
 #include "grit/renderer_resources.h"
 #include "third_party/WebKit/public/platform/WebString.h"
@@ -153,7 +152,7 @@
 
 class TestFeaturesNativeHandler : public ObjectBackedNativeHandler {
  public:
-  explicit TestFeaturesNativeHandler(ChromeV8Context* context)
+  explicit TestFeaturesNativeHandler(ScriptContext* context)
       : ObjectBackedNativeHandler(context) {
     RouteFunction("GetAPIFeatures",
         base::Bind(&TestFeaturesNativeHandler::GetAPIFeatures,
@@ -174,7 +173,7 @@
 
 class UserGesturesNativeHandler : public ObjectBackedNativeHandler {
  public:
-  explicit UserGesturesNativeHandler(ChromeV8Context* context)
+  explicit UserGesturesNativeHandler(ScriptContext* context)
       : ObjectBackedNativeHandler(context) {
     RouteFunction("IsProcessingUserGesture",
         base::Bind(&UserGesturesNativeHandler::IsProcessingUserGesture,
@@ -218,7 +217,7 @@
 
 class V8ContextNativeHandler : public ObjectBackedNativeHandler {
  public:
-  V8ContextNativeHandler(ChromeV8Context* context, Dispatcher* dispatcher)
+  V8ContextNativeHandler(ScriptContext* context, Dispatcher* dispatcher)
       : ObjectBackedNativeHandler(context),
         context_(context),
         dispatcher_(dispatcher) {
@@ -252,18 +251,18 @@
     CHECK(args[0]->IsObject());
     v8::Handle<v8::Context> v8_context =
         v8::Handle<v8::Object>::Cast(args[0])->CreationContext();
-    ChromeV8Context* context = dispatcher_->v8_context_set().GetByV8Context(
-        v8_context);
+    ScriptContext* context =
+        dispatcher_->script_context_set().GetByV8Context(v8_context);
     args.GetReturnValue().Set(context->module_system()->NewInstance());
   }
 
-  ChromeV8Context* context_;
+  ScriptContext* context_;
   Dispatcher* dispatcher_;
 };
 
 class ChromeNativeHandler : public ObjectBackedNativeHandler {
  public:
-  explicit ChromeNativeHandler(ChromeV8Context* context)
+  explicit ChromeNativeHandler(ScriptContext* context)
       : ObjectBackedNativeHandler(context) {
     RouteFunction("GetChrome",
         base::Bind(&ChromeNativeHandler::GetChrome, base::Unretained(this)));
@@ -276,7 +275,7 @@
 
 class PrintNativeHandler : public ObjectBackedNativeHandler {
  public:
-  explicit PrintNativeHandler(ChromeV8Context* context)
+  explicit PrintNativeHandler(ScriptContext* context)
       : ObjectBackedNativeHandler(context) {
     RouteFunction("Print",
         base::Bind(&PrintNativeHandler::Print,
@@ -295,11 +294,10 @@
   }
 };
 
-class LazyBackgroundPageNativeHandler : public ChromeV8Extension {
+class LazyBackgroundPageNativeHandler : public ObjectBackedNativeHandler {
  public:
-  LazyBackgroundPageNativeHandler(Dispatcher* dispatcher,
-                                  ChromeV8Context* context)
-      : ChromeV8Extension(dispatcher, context) {
+  explicit LazyBackgroundPageNativeHandler(ScriptContext* context)
+      : ObjectBackedNativeHandler(context) {
     RouteFunction("IncrementKeepaliveCount",
         base::Bind(&LazyBackgroundPageNativeHandler::IncrementKeepaliveCount,
                    base::Unretained(this)));
@@ -342,16 +340,15 @@
   }
 };
 
-class ProcessInfoNativeHandler : public ChromeV8Extension {
+class ProcessInfoNativeHandler : public ObjectBackedNativeHandler {
  public:
-  ProcessInfoNativeHandler(Dispatcher* dispatcher,
-                           ChromeV8Context* context,
+  ProcessInfoNativeHandler(ScriptContext* context,
                            const std::string& extension_id,
                            const std::string& context_type,
                            bool is_incognito_context,
                            int manifest_version,
                            bool send_request_disabled)
-      : ChromeV8Extension(dispatcher, context),
+      : ObjectBackedNativeHandler(context),
         extension_id_(extension_id),
         context_type_(context_type),
         is_incognito_context_(is_incognito_context),
@@ -430,11 +427,11 @@
 
 // Calls a method |method_name| in a module |module_name| belonging to the
 // module system from |context|. Intended as a callback target from
-// ChromeV8ContextSet::ForEach.
+// ScriptContextSet::ForEach.
 void CallModuleMethod(const std::string& module_name,
                       const std::string& method_name,
                       const base::ListValue* args,
-                      ChromeV8Context* context) {
+                      ScriptContext* context) {
   v8::HandleScope handle_scope(context->isolate());
   v8::Context::Scope context_scope(context->v8_context());
 
@@ -596,12 +593,15 @@
   source_tab.GetInteger("id", &sender_tab_id);
   port_to_tab_id_map_[target_port_id] = sender_tab_id;
 
-  MessagingBindings::DispatchOnConnect(
-      v8_context_set_.GetAll(),
-      target_port_id, channel_name, source_tab,
-      info.source_id, info.target_id, info.source_url,
-      tls_channel_id,
-      NULL);  // All render views.
+  MessagingBindings::DispatchOnConnect(script_context_set_.GetAll(),
+                                       target_port_id,
+                                       channel_name,
+                                       source_tab,
+                                       info.source_id,
+                                       info.target_id,
+                                       info.source_url,
+                                       tls_channel_id,
+                                       NULL);  // All render views.
 }
 
 void Dispatcher::OnDeliverMessage(int target_port_id,
@@ -614,19 +614,18 @@
                                                        it->second));
   }
 
-  MessagingBindings::DeliverMessage(
-      v8_context_set_.GetAll(),
-      target_port_id,
-      message,
-      NULL);  // All render views.
+  MessagingBindings::DeliverMessage(script_context_set_.GetAll(),
+                                    target_port_id,
+                                    message,
+                                    NULL);  // All render views.
 }
 
 void Dispatcher::OnDispatchOnDisconnect(int port_id,
                                         const std::string& error_message) {
-  MessagingBindings::DispatchOnDisconnect(
-      v8_context_set_.GetAll(),
-      port_id, error_message,
-      NULL);  // All render views.
+  MessagingBindings::DispatchOnDisconnect(script_context_set_.GetAll(),
+                                          port_id,
+                                          error_message,
+                                          NULL);  // All render views.
 }
 
 void Dispatcher::OnLoaded(
@@ -661,11 +660,12 @@
   user_script_slave_->RemoveIsolatedWorld(id);
 
   // Invalidate all of the contexts that were removed.
-  // TODO(kalman): add an invalidation observer interface to ChromeV8Context.
-  ChromeV8ContextSet::ContextSet removed_contexts =
-      v8_context_set_.OnExtensionUnloaded(id);
-  for (ChromeV8ContextSet::ContextSet::iterator it = removed_contexts.begin();
-       it != removed_contexts.end(); ++it) {
+  // TODO(kalman): add an invalidation observer interface to ScriptContext.
+  ScriptContextSet::ContextSet removed_contexts =
+      script_context_set_.OnExtensionUnloaded(id);
+  for (ScriptContextSet::ContextSet::iterator it = removed_contexts.begin();
+       it != removed_contexts.end();
+       ++it) {
     request_sender_->InvalidateSource(*it);
   }
 
@@ -718,7 +718,7 @@
   return new_object;
 }
 
-void Dispatcher::AddOrRemoveBindingsForContext(ChromeV8Context* context) {
+void Dispatcher::AddOrRemoveBindingsForContext(ScriptContext* context) {
   v8::HandleScope handle_scope(context->isolate());
   v8::Context::Scope context_scope(context->v8_context());
 
@@ -789,7 +789,7 @@
 v8::Handle<v8::Object> Dispatcher::GetOrCreateBindObjectIfAvailable(
     const std::string& api_name,
     std::string* bind_name,
-    ChromeV8Context* context) {
+    ScriptContext* context) {
   std::vector<std::string> split;
   base::SplitString(api_name, '.', &split);
 
@@ -837,7 +837,7 @@
 }
 
 void Dispatcher::RegisterBinding(const std::string& api_name,
-                                 ChromeV8Context* context) {
+                                 ScriptContext* context) {
   std::string bind_name;
   v8::Handle<v8::Object> bind_object =
       GetOrCreateBindObjectIfAvailable(api_name, &bind_name, context);
@@ -889,23 +889,28 @@
 
 // NOTE: please use the naming convention "foo_natives" for these.
 void Dispatcher::RegisterNativeHandlers(ModuleSystem* module_system,
-                                        ChromeV8Context* context) {
-  module_system->RegisterNativeHandler("event_natives",
-      scoped_ptr<NativeHandler>(EventBindings::Create(this, context)));
+                                        ScriptContext* context) {
+  module_system->RegisterNativeHandler(
+      "event_natives",
+      scoped_ptr<NativeHandler>(new EventBindings(this, context)));
   module_system->RegisterNativeHandler("messaging_natives",
       scoped_ptr<NativeHandler>(MessagingBindings::Get(this, context)));
   module_system->RegisterNativeHandler("apiDefinitions",
       scoped_ptr<NativeHandler>(new ApiDefinitionsNatives(this, context)));
-  module_system->RegisterNativeHandler("sendRequest",
+  module_system->RegisterNativeHandler(
+      "sendRequest",
       scoped_ptr<NativeHandler>(
-          new SendRequestNatives(this, request_sender_.get(), context)));
-  module_system->RegisterNativeHandler("setIcon",
+          new SendRequestNatives(request_sender_.get(), context)));
+  module_system->RegisterNativeHandler(
+      "setIcon",
       scoped_ptr<NativeHandler>(
-          new SetIconNatives(this, request_sender_.get(), context)));
-  module_system->RegisterNativeHandler("activityLogger",
-      scoped_ptr<NativeHandler>(new APIActivityLogger(this, context)));
-  module_system->RegisterNativeHandler("renderViewObserverNatives",
-      scoped_ptr<NativeHandler>(new RenderViewObserverNatives(this, context)));
+          new SetIconNatives(request_sender_.get(), context)));
+  module_system->RegisterNativeHandler(
+      "activityLogger",
+      scoped_ptr<NativeHandler>(new APIActivityLogger(context)));
+  module_system->RegisterNativeHandler(
+      "renderViewObserverNatives",
+      scoped_ptr<NativeHandler>(new RenderViewObserverNatives(context)));
 
   // Natives used by multiple APIs.
   module_system->RegisterNativeHandler("file_system_natives",
@@ -914,55 +919,54 @@
   // Custom bindings.
   module_system->RegisterNativeHandler("app",
       scoped_ptr<NativeHandler>(new AppBindings(this, context)));
-  module_system->RegisterNativeHandler("app_runtime",
-      scoped_ptr<NativeHandler>(
-          new AppRuntimeCustomBindings(this, context)));
+  module_system->RegisterNativeHandler(
+      "app_runtime",
+      scoped_ptr<NativeHandler>(new AppRuntimeCustomBindings(context)));
   module_system->RegisterNativeHandler("app_window_natives",
       scoped_ptr<NativeHandler>(
           new AppWindowCustomBindings(this, context)));
   module_system->RegisterNativeHandler("blob_natives",
       scoped_ptr<NativeHandler>(new BlobNativeHandler(context)));
-  module_system->RegisterNativeHandler("context_menus",
-      scoped_ptr<NativeHandler>(
-          new ContextMenusCustomBindings(this, context)));
+  module_system->RegisterNativeHandler(
+      "context_menus",
+      scoped_ptr<NativeHandler>(new ContextMenusCustomBindings(context)));
   module_system->RegisterNativeHandler(
       "css_natives", scoped_ptr<NativeHandler>(new CssNativeHandler(context)));
-  module_system->RegisterNativeHandler("document_natives",
-      scoped_ptr<NativeHandler>(
-          new DocumentCustomBindings(this, context)));
-  module_system->RegisterNativeHandler("sync_file_system",
-      scoped_ptr<NativeHandler>(
-          new SyncFileSystemCustomBindings(this, context)));
-  module_system->RegisterNativeHandler("file_browser_handler",
-      scoped_ptr<NativeHandler>(new FileBrowserHandlerCustomBindings(
-          this, context)));
-  module_system->RegisterNativeHandler("file_browser_private",
-      scoped_ptr<NativeHandler>(new FileBrowserPrivateCustomBindings(
-          this, context)));
-  module_system->RegisterNativeHandler("i18n",
-      scoped_ptr<NativeHandler>(
-          new I18NCustomBindings(this, context)));
+  module_system->RegisterNativeHandler(
+      "document_natives",
+      scoped_ptr<NativeHandler>(new DocumentCustomBindings(context)));
+  module_system->RegisterNativeHandler(
+      "sync_file_system",
+      scoped_ptr<NativeHandler>(new SyncFileSystemCustomBindings(context)));
+  module_system->RegisterNativeHandler(
+      "file_browser_handler",
+      scoped_ptr<NativeHandler>(new FileBrowserHandlerCustomBindings(context)));
+  module_system->RegisterNativeHandler(
+      "file_browser_private",
+      scoped_ptr<NativeHandler>(new FileBrowserPrivateCustomBindings(context)));
+  module_system->RegisterNativeHandler(
+      "i18n", scoped_ptr<NativeHandler>(new I18NCustomBindings(context)));
   module_system->RegisterNativeHandler(
       "id_generator",
-      scoped_ptr<NativeHandler>(new IdGeneratorCustomBindings(this, context)));
-  module_system->RegisterNativeHandler("mediaGalleries",
-      scoped_ptr<NativeHandler>(
-          new MediaGalleriesCustomBindings(this, context)));
-  module_system->RegisterNativeHandler("page_actions",
-      scoped_ptr<NativeHandler>(
-          new PageActionsCustomBindings(this, context)));
-  module_system->RegisterNativeHandler("page_capture",
-      scoped_ptr<NativeHandler>(
-          new PageCaptureCustomBindings(this, context)));
+      scoped_ptr<NativeHandler>(new IdGeneratorCustomBindings(context)));
+  module_system->RegisterNativeHandler(
+      "mediaGalleries",
+      scoped_ptr<NativeHandler>(new MediaGalleriesCustomBindings(context)));
+  module_system->RegisterNativeHandler(
+      "page_actions",
+      scoped_ptr<NativeHandler>(new PageActionsCustomBindings(this, context)));
+  module_system->RegisterNativeHandler(
+      "page_capture",
+      scoped_ptr<NativeHandler>(new PageCaptureCustomBindings(context)));
   module_system->RegisterNativeHandler(
       "pepper_request_natives",
       scoped_ptr<NativeHandler>(new PepperRequestNatives(context)));
-  module_system->RegisterNativeHandler("runtime",
-      scoped_ptr<NativeHandler>(new RuntimeCustomBindings(this, context)));
-  module_system->RegisterNativeHandler("tabs",
-      scoped_ptr<NativeHandler>(new TabsCustomBindings(this, context)));
-  module_system->RegisterNativeHandler("webstore",
-      scoped_ptr<NativeHandler>(new WebstoreBindings(this, context)));
+  module_system->RegisterNativeHandler(
+      "runtime", scoped_ptr<NativeHandler>(new RuntimeCustomBindings(context)));
+  module_system->RegisterNativeHandler(
+      "tabs", scoped_ptr<NativeHandler>(new TabsCustomBindings(context)));
+  module_system->RegisterNativeHandler(
+      "webstore", scoped_ptr<NativeHandler>(new WebstoreBindings(context)));
 #if defined(ENABLE_WEBRTC)
   module_system->RegisterNativeHandler("cast_streaming_natives",
       scoped_ptr<NativeHandler>(new CastStreamingNativeHandler(context)));
@@ -1137,9 +1141,9 @@
                                 ScriptContext::GetDataSourceURLForFrame(frame),
                                 frame->document().securityOrigin());
 
-  ChromeV8Context* context =
+  ScriptContext* context =
       new ChromeV8Context(v8_context, frame, extension, context_type);
-  v8_context_set_.Add(context);
+  script_context_set_.Add(context);
 
   if (extension)
     InitOriginPermissions(extension, context_type);
@@ -1161,9 +1165,9 @@
       scoped_ptr<NativeHandler>(new ChromeNativeHandler(context)));
   module_system->RegisterNativeHandler("print",
       scoped_ptr<NativeHandler>(new PrintNativeHandler(context)));
-  module_system->RegisterNativeHandler("lazy_background_page",
-      scoped_ptr<NativeHandler>(
-          new LazyBackgroundPageNativeHandler(this, context)));
+  module_system->RegisterNativeHandler(
+      "lazy_background_page",
+      scoped_ptr<NativeHandler>(new LazyBackgroundPageNativeHandler(context)));
   module_system->RegisterNativeHandler("logging",
       scoped_ptr<NativeHandler>(new LoggingNativeHandler(context)));
   module_system->RegisterNativeHandler("schema_registry",
@@ -1181,12 +1185,15 @@
   bool send_request_disabled =
       (extension && Manifest::IsUnpackedLocation(extension->location()) &&
        BackgroundInfo::HasLazyBackgroundPage(extension));
-  module_system->RegisterNativeHandler("process",
+  module_system->RegisterNativeHandler(
+      "process",
       scoped_ptr<NativeHandler>(new ProcessInfoNativeHandler(
-          this, context, context->GetExtensionID(),
+          context,
+          context->GetExtensionID(),
           context->GetContextTypeDescription(),
           ChromeRenderProcessObserver::is_incognito_process(),
-          manifest_version, send_request_disabled)));
+          manifest_version,
+          send_request_disabled)));
 
   // chrome.Event is part of the public API (although undocumented). Make it
   // lazily evalulate to Event from event_bindings.js. For extensions only
@@ -1257,7 +1264,7 @@
     }
   }
 
-  VLOG(1) << "Num tracked contexts: " << v8_context_set_.size();
+  VLOG(1) << "Num tracked contexts: " << script_context_set_.size();
 }
 
 std::string Dispatcher::GetExtensionID(const WebFrame* frame, int world_id) {
@@ -1287,16 +1294,16 @@
 
 void Dispatcher::WillReleaseScriptContext(
     WebFrame* frame, v8::Handle<v8::Context> v8_context, int world_id) {
-  ChromeV8Context* context = v8_context_set_.GetByV8Context(v8_context);
+  ScriptContext* context = script_context_set_.GetByV8Context(v8_context);
   if (!context)
     return;
 
   context->DispatchOnUnloadEvent();
-  // TODO(kalman): add an invalidation observer interface to ChromeV8Context.
+  // TODO(kalman): add an invalidation observer interface to ScriptContext.
   request_sender_->InvalidateSource(context);
 
-  v8_context_set_.Remove(context);
-  VLOG(1) << "Num tracked contexts: " << v8_context_set_.size();
+  script_context_set_.Remove(context);
+  VLOG(1) << "Num tracked contexts: " << script_context_set_.size();
 }
 
 void Dispatcher::DidCreateDocumentElement(blink::WebFrame* frame) {
@@ -1411,7 +1418,7 @@
 }
 
 void Dispatcher::AddOrRemoveBindings(const std::string& extension_id) {
-  v8_context_set().ForEach(
+  script_context_set().ForEach(
       extension_id,
       NULL,  // all render views
       base::Bind(&Dispatcher::AddOrRemoveBindingsForContext,
@@ -1649,13 +1656,12 @@
 
   // Needed for Windows compilation, since kEventBindings is declared extern.
   const char* local_event_bindings = kEventBindings;
-  v8_context_set_.ForEach(
-      extension_id,
-      NULL,  // all render views
-      base::Bind(&CallModuleMethod,
-                 local_event_bindings,
-                 kEventDispatchFunction,
-                 &args));
+  script_context_set_.ForEach(extension_id,
+                              NULL,  // all render views
+                              base::Bind(&CallModuleMethod,
+                                         local_event_bindings,
+                                         kEventDispatchFunction,
+                                         &args));
 }
 
 void Dispatcher::InvokeModuleSystemMethod(
@@ -1669,7 +1675,7 @@
   if (user_gesture)
     web_user_gesture.reset(new WebScopedUserGesture);
 
-  v8_context_set_.ForEach(
+  script_context_set_.ForEach(
       extension_id,
       render_view,
       base::Bind(&CallModuleMethod, module_name, function_name, &args));
diff --git a/chrome/renderer/extensions/dispatcher.h b/chrome/renderer/extensions/dispatcher.h
index a68d8a2..a04b0f1 100644
--- a/chrome/renderer/extensions/dispatcher.h
+++ b/chrome/renderer/extensions/dispatcher.h
@@ -12,15 +12,15 @@
 
 #include "base/memory/shared_memory.h"
 #include "base/timer/timer.h"
-#include "chrome/renderer/extensions/chrome_v8_context.h"
-#include "chrome/renderer/extensions/chrome_v8_context_set.h"
-#include "chrome/renderer/extensions/v8_schema_registry.h"
 #include "chrome/renderer/resource_bundle_source_map.h"
 #include "content/public/renderer/render_process_observer.h"
 #include "extensions/common/event_filter.h"
 #include "extensions/common/extension_set.h"
 #include "extensions/common/extensions_client.h"
 #include "extensions/common/features/feature.h"
+#include "extensions/renderer/script_context.h"
+#include "extensions/renderer/script_context_set.h"
+#include "extensions/renderer/v8_schema_registry.h"
 #include "third_party/WebKit/public/platform/WebString.h"
 #include "third_party/WebKit/public/platform/WebVector.h"
 #include "v8/include/v8.h"
@@ -70,8 +70,8 @@
 
   bool is_extension_process() const { return is_extension_process_; }
   const ExtensionSet* extensions() const { return &extensions_; }
-  const ChromeV8ContextSet& v8_context_set() const {
-    return v8_context_set_;
+  const ScriptContextSet& script_context_set() const {
+    return script_context_set_;
   }
   UserScriptSlave* user_script_slave() {
     return user_script_slave_.get();
@@ -220,14 +220,13 @@
   void AddOrRemoveBindings(const std::string& extension_id);
 
   void RegisterNativeHandlers(ModuleSystem* module_system,
-                              ChromeV8Context* context);
-  void AddOrRemoveBindingsForContext(ChromeV8Context* context);
-  void RegisterBinding(const std::string& api_name,
-                       ChromeV8Context* context);
+                              ScriptContext* context);
+  void AddOrRemoveBindingsForContext(ScriptContext* context);
+  void RegisterBinding(const std::string& api_name, ScriptContext* context);
   v8::Handle<v8::Object> GetOrCreateBindObjectIfAvailable(
       const std::string& api_name,
       std::string* bind_name,
-      ChromeV8Context* context);
+      ScriptContext* context);
 
   // Inserts static source code into |source_map_|.
   void PopulateSourceMap();
@@ -272,7 +271,7 @@
 
   // All the bindings contexts that are currently loaded for this renderer.
   // There is zero or one for each v8 context.
-  ChromeV8ContextSet v8_context_set_;
+  ScriptContextSet script_context_set_;
 
   scoped_ptr<UserScriptSlave> user_script_slave_;
 
diff --git a/chrome/renderer/extensions/document_custom_bindings.cc b/chrome/renderer/extensions/document_custom_bindings.cc
deleted file mode 100644
index b8471a4..0000000
--- a/chrome/renderer/extensions/document_custom_bindings.cc
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright 2013 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 "chrome/renderer/extensions/document_custom_bindings.h"
-
-#include <string>
-
-#include "base/bind.h"
-#include "chrome/renderer/extensions/chrome_v8_context.h"
-#include "third_party/WebKit/public/web/WebDocument.h"
-#include "third_party/WebKit/public/web/WebFrame.h"
-#include "v8/include/v8.h"
-
-namespace extensions {
-
-DocumentCustomBindings::DocumentCustomBindings(
-    Dispatcher* dispatcher, ChromeV8Context* context)
-    : ChromeV8Extension(dispatcher, context) {
-  RouteFunction("RegisterElement",
-      base::Bind(&DocumentCustomBindings::RegisterElement,
-                 base::Unretained(this)));
-}
-
-// Attach an event name to an object.
-void DocumentCustomBindings::RegisterElement(
-    const v8::FunctionCallbackInfo<v8::Value>& args) {
-  if (args.Length() != 2 || !args[0]->IsString() || !args[1]->IsObject()) {
-    NOTREACHED();
-    return;
-  }
-
-  std::string element_name(*v8::String::Utf8Value(args[0]));
-  v8::Local<v8::Object> options = args[1]->ToObject();
-
-  blink::WebExceptionCode ec = 0;
-  blink::WebDocument document = context()->web_frame()->document();
-  v8::Handle<v8::Value> constructor =
-      document.registerEmbedderCustomElement(
-          blink::WebString::fromUTF8(element_name), options, ec);
-  args.GetReturnValue().Set(constructor);
-}
-
-}  // namespace extensions
diff --git a/chrome/renderer/extensions/document_custom_bindings.h b/chrome/renderer/extensions/document_custom_bindings.h
deleted file mode 100644
index 4a16015..0000000
--- a/chrome/renderer/extensions/document_custom_bindings.h
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2013 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 CHROME_RENDERER_EXTENSIONS_DOCUMENT_CUSTOM_BINDINGS_H_
-#define CHROME_RENDERER_EXTENSIONS_DOCUMENT_CUSTOM_BINDINGS_H_
-
-#include "chrome/renderer/extensions/chrome_v8_extension.h"
-
-namespace extensions {
-
-// Implements custom bindings for document-level operations.
-class DocumentCustomBindings : public ChromeV8Extension {
- public:
-  DocumentCustomBindings(Dispatcher* dispatcher, ChromeV8Context* context);
-
- private:
-  // Registers the provided element as a custom element in Blink.
-  void RegisterElement(const v8::FunctionCallbackInfo<v8::Value>& args);
-};
-
-}  // namespace extensions
-
-#endif  // CHROME_RENDERER_EXTENSIONS_DOCUMENT_CUSTOM_BINDINGS_H_
diff --git a/chrome/renderer/extensions/dom_activity_logger.cc b/chrome/renderer/extensions/dom_activity_logger.cc
index 7527c8d..97cab71 100644
--- a/chrome/renderer/extensions/dom_activity_logger.cc
+++ b/chrome/renderer/extensions/dom_activity_logger.cc
@@ -4,7 +4,7 @@
 
 #include "chrome/renderer/extensions/dom_activity_logger.h"
 
-#include "base/logging.h"
+#include "chrome/common/extensions/ad_injection_constants.h"
 #include "chrome/common/extensions/dom_action_types.h"
 #include "chrome/renderer/chrome_render_process_observer.h"
 #include "chrome/renderer/extensions/activity_log_converter_strategy.h"
@@ -23,7 +23,10 @@
 namespace extensions {
 
 DOMActivityLogger::DOMActivityLogger(const std::string& extension_id)
-    : extension_id_(extension_id) {}
+    : extension_id_(extension_id) {
+}
+
+DOMActivityLogger::~DOMActivityLogger() {}
 
 void DOMActivityLogger::log(
     const WebString& api_name,
@@ -34,15 +37,18 @@
     const WebString& title) {
   scoped_ptr<V8ValueConverter> converter(V8ValueConverter::create());
   ActivityLogConverterStrategy strategy;
+  strategy.set_enable_detailed_parsing(
+      ad_injection_constants::ApiCanInjectAds(api_name.utf8().c_str()));
   converter->SetFunctionAllowed(true);
   converter->SetStrategy(&strategy);
   scoped_ptr<base::ListValue> argv_list_value(new base::ListValue());
-  for (int i =0; i < argc; i++) {
+  for (int i = 0; i < argc; i++) {
     argv_list_value->Set(
         i,
         converter->FromV8Value(argv[i],
                                v8::Isolate::GetCurrent()->GetCurrentContext()));
   }
+
   ExtensionHostMsg_DOMAction_Params params;
   params.url = url;
   params.url_title = title;
@@ -73,4 +79,3 @@
 }
 
 }  // namespace extensions
-
diff --git a/chrome/renderer/extensions/dom_activity_logger.h b/chrome/renderer/extensions/dom_activity_logger.h
index cce945c..19294f7 100644
--- a/chrome/renderer/extensions/dom_activity_logger.h
+++ b/chrome/renderer/extensions/dom_activity_logger.h
@@ -14,14 +14,21 @@
 #include "url/gurl.h"
 #include "v8/include/v8.h"
 
-// Used to log DOM API calls from within WebKit. The events are sent via IPC to
-// extensions::ActivityLog for recording and display.
+namespace content {
+class V8ValueConverter;
+}
+
 namespace extensions {
 
+class ActivityLogConverterStrategy;
+
+// Used to log DOM API calls from within WebKit. The events are sent via IPC to
+// extensions::ActivityLog for recording and display.
 class DOMActivityLogger: public blink::WebDOMActivityLogger {
  public:
   static const int kMainWorldId = 0;
   explicit DOMActivityLogger(const std::string& extension_id);
+  virtual ~DOMActivityLogger();
 
   // Marshalls the arguments into an ExtensionHostMsg_DOMAction_Params
   // and sends it over to the browser (via IPC) for appending it to the
@@ -32,7 +39,7 @@
                    const v8::Handle<v8::Value> argv[],
                    const blink::WebString& call_type,
                    const blink::WebURL& url,
-                   const blink::WebString& title);
+                   const blink::WebString& title) OVERRIDE;
 
   // Check (using the WebKit API) if there is no logger attached to the world
   // corresponding to world_id, and if so, construct a new logger and attach it.
diff --git a/chrome/renderer/extensions/extension_groups.h b/chrome/renderer/extensions/extension_groups.h
deleted file mode 100644
index 09b6ea1..0000000
--- a/chrome/renderer/extensions/extension_groups.h
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright (c) 2012 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 CHROME_RENDERER_EXTENSIONS_EXTENSION_GROUPS_H_
-#define CHROME_RENDERER_EXTENSIONS_EXTENSION_GROUPS_H_
-
-namespace extensions {
-
-// A set of extension groups for use with blink::registerExtension and
-// WebFrame::ExecuteScriptInNewWorld to control which extensions get loaded
-// into which contexts.
-enum ExtensionGroups {
-  // Use this to mark extensions to be loaded into content scripts only.
-  EXTENSION_GROUP_CONTENT_SCRIPTS = 1,
-
-  // Use this in an isolated world for internal Chrome Translate.
-  // No extension APIs are available.
-  EXTENSION_GROUP_INTERNAL_TRANSLATE_SCRIPTS = 2,
-};
-
-}  // namespace extensions
-
-#endif  // CHROME_RENDERER_EXTENSIONS_EXTENSION_GROUPS_H_
diff --git a/chrome/renderer/extensions/extension_helper.cc b/chrome/renderer/extensions/extension_helper.cc
index a4f27dd..92108e7 100644
--- a/chrome/renderer/extensions/extension_helper.cc
+++ b/chrome/renderer/extensions/extension_helper.cc
@@ -30,7 +30,7 @@
 #include "third_party/WebKit/public/platform/WebURLRequest.h"
 #include "third_party/WebKit/public/web/WebConsoleMessage.h"
 #include "third_party/WebKit/public/web/WebDocument.h"
-#include "third_party/WebKit/public/web/WebFrame.h"
+#include "third_party/WebKit/public/web/WebLocalFrame.h"
 #include "third_party/WebKit/public/web/WebScopedUserGesture.h"
 #include "third_party/WebKit/public/web/WebView.h"
 
@@ -279,26 +279,32 @@
     const ExtensionMsg_ExternalConnectionInfo& info,
     const std::string& tls_channel_id) {
   MessagingBindings::DispatchOnConnect(
-      dispatcher_->v8_context_set().GetAll(),
-      target_port_id, channel_name, source_tab,
-      info.source_id, info.target_id, info.source_url,
-      tls_channel_id, render_view());
+      dispatcher_->script_context_set().GetAll(),
+      target_port_id,
+      channel_name,
+      source_tab,
+      info.source_id,
+      info.target_id,
+      info.source_url,
+      tls_channel_id,
+      render_view());
 }
 
 void ExtensionHelper::OnExtensionDeliverMessage(int target_id,
                                                 const Message& message) {
-  MessagingBindings::DeliverMessage(dispatcher_->v8_context_set().GetAll(),
-                                        target_id,
-                                        message,
-                                        render_view());
+  MessagingBindings::DeliverMessage(dispatcher_->script_context_set().GetAll(),
+                                    target_id,
+                                    message,
+                                    render_view());
 }
 
 void ExtensionHelper::OnExtensionDispatchOnDisconnect(
     int port_id,
     const std::string& error_message) {
   MessagingBindings::DispatchOnDisconnect(
-      dispatcher_->v8_context_set().GetAll(),
-      port_id, error_message,
+      dispatcher_->script_context_set().GetAll(),
+      port_id,
+      error_message,
       render_view());
 }
 
@@ -368,14 +374,14 @@
 
 void ExtensionHelper::OnAppWindowClosed() {
   v8::HandleScope scope(v8::Isolate::GetCurrent());
-  v8::Handle<v8::Context> script_context =
+  v8::Handle<v8::Context> v8_context =
       render_view()->GetWebView()->mainFrame()->mainWorldScriptContext();
-  ChromeV8Context* chrome_v8_context =
-      dispatcher_->v8_context_set().GetByV8Context(script_context);
-  if (!chrome_v8_context)
+  ScriptContext* script_context =
+      dispatcher_->script_context_set().GetByV8Context(v8_context);
+  if (!script_context)
     return;
-  chrome_v8_context->module_system()->CallModuleMethod(
-      "app.window", "onAppWindowClosed");
+  script_context->module_system()->CallModuleMethod("app.window",
+                                                    "onAppWindowClosed");
 }
 
 }  // namespace extensions
diff --git a/chrome/renderer/extensions/file_browser_handler_custom_bindings.cc b/chrome/renderer/extensions/file_browser_handler_custom_bindings.cc
index 2c30f53..1dec5d9 100644
--- a/chrome/renderer/extensions/file_browser_handler_custom_bindings.cc
+++ b/chrome/renderer/extensions/file_browser_handler_custom_bindings.cc
@@ -8,8 +8,7 @@
 
 #include "base/basictypes.h"
 #include "base/logging.h"
-#include "chrome/renderer/extensions/chrome_v8_context.h"
-#include "grit/renderer_resources.h"
+#include "extensions/renderer/script_context.h"
 #include "third_party/WebKit/public/platform/WebString.h"
 #include "third_party/WebKit/public/web/WebDOMFileSystem.h"
 #include "third_party/WebKit/public/web/WebLocalFrame.h"
@@ -17,8 +16,8 @@
 namespace extensions {
 
 FileBrowserHandlerCustomBindings::FileBrowserHandlerCustomBindings(
-    Dispatcher* dispatcher, ChromeV8Context* context)
-    : ChromeV8Extension(dispatcher, context) {
+    ScriptContext* context)
+    : ObjectBackedNativeHandler(context) {
   RouteFunction(
       "GetExternalFileEntry",
       base::Bind(&FileBrowserHandlerCustomBindings::GetExternalFileEntry,
diff --git a/chrome/renderer/extensions/file_browser_handler_custom_bindings.h b/chrome/renderer/extensions/file_browser_handler_custom_bindings.h
index b7fe203..07a14e3 100644
--- a/chrome/renderer/extensions/file_browser_handler_custom_bindings.h
+++ b/chrome/renderer/extensions/file_browser_handler_custom_bindings.h
@@ -6,15 +6,14 @@
 #define CHROME_RENDERER_EXTENSIONS_FILE_BROWSER_HANDLER_CUSTOM_BINDINGS_H_
 
 #include "base/compiler_specific.h"
-#include "chrome/renderer/extensions/chrome_v8_extension.h"
+#include "extensions/renderer/object_backed_native_handler.h"
 
 namespace extensions {
 
 // Custom bindings for the fileBrowserHandler API.
-class FileBrowserHandlerCustomBindings : public ChromeV8Extension {
+class FileBrowserHandlerCustomBindings : public ObjectBackedNativeHandler {
  public:
-  FileBrowserHandlerCustomBindings(Dispatcher* dispatcher,
-                                   ChromeV8Context* context);
+  explicit FileBrowserHandlerCustomBindings(ScriptContext* context);
 
  private:
   void GetExternalFileEntry(const v8::FunctionCallbackInfo<v8::Value>& args);
diff --git a/chrome/renderer/extensions/file_browser_private_custom_bindings.cc b/chrome/renderer/extensions/file_browser_private_custom_bindings.cc
index a4aab78..20afb3d 100644
--- a/chrome/renderer/extensions/file_browser_private_custom_bindings.cc
+++ b/chrome/renderer/extensions/file_browser_private_custom_bindings.cc
@@ -9,7 +9,7 @@
 #include "base/basictypes.h"
 #include "base/logging.h"
 #include "chrome/renderer/extensions/chrome_v8_context.h"
-#include "grit/renderer_resources.h"
+#include "extensions/renderer/script_context.h"
 #include "third_party/WebKit/public/platform/WebString.h"
 #include "third_party/WebKit/public/web/WebDOMFileSystem.h"
 #include "third_party/WebKit/public/web/WebLocalFrame.h"
@@ -17,8 +17,8 @@
 namespace extensions {
 
 FileBrowserPrivateCustomBindings::FileBrowserPrivateCustomBindings(
-    Dispatcher* dispatcher, ChromeV8Context* context)
-    : ChromeV8Extension(dispatcher, context) {
+    ScriptContext* context)
+    : ObjectBackedNativeHandler(context) {
   RouteFunction(
       "GetFileSystem",
        base::Bind(&FileBrowserPrivateCustomBindings::GetFileSystem,
diff --git a/chrome/renderer/extensions/file_browser_private_custom_bindings.h b/chrome/renderer/extensions/file_browser_private_custom_bindings.h
index 8311739..0439745 100644
--- a/chrome/renderer/extensions/file_browser_private_custom_bindings.h
+++ b/chrome/renderer/extensions/file_browser_private_custom_bindings.h
@@ -6,15 +6,14 @@
 #define CHROME_RENDERER_EXTENSIONS_FILE_BROWSER_PRIVATE_CUSTOM_BINDINGS_H_
 
 #include "base/compiler_specific.h"
-#include "chrome/renderer/extensions/chrome_v8_extension.h"
+#include "extensions/renderer/object_backed_native_handler.h"
 
 namespace extensions {
 
 // Custom bindings for the fileBrowserPrivate API.
-class FileBrowserPrivateCustomBindings : public ChromeV8Extension {
+class FileBrowserPrivateCustomBindings : public ObjectBackedNativeHandler {
  public:
-  FileBrowserPrivateCustomBindings(Dispatcher* dispatcher,
-                                   ChromeV8Context* context);
+  explicit FileBrowserPrivateCustomBindings(ScriptContext* context);
 
   void GetFileSystem(const v8::FunctionCallbackInfo<v8::Value>& args);
 
diff --git a/chrome/renderer/extensions/file_system_natives.cc b/chrome/renderer/extensions/file_system_natives.cc
deleted file mode 100644
index 8c83c8e..0000000
--- a/chrome/renderer/extensions/file_system_natives.cc
+++ /dev/null
@@ -1,160 +0,0 @@
-// Copyright (c) 2012 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 "chrome/renderer/extensions/file_system_natives.h"
-
-#include <string>
-
-#include "base/basictypes.h"
-#include "base/logging.h"
-#include "chrome/common/url_constants.h"
-#include "chrome/renderer/extensions/chrome_v8_context.h"
-#include "chrome/renderer/extensions/user_script_slave.h"
-#include "extensions/common/constants.h"
-#include "extensions/renderer/script_context.h"
-#include "grit/renderer_resources.h"
-#include "third_party/WebKit/public/platform/WebString.h"
-#include "third_party/WebKit/public/web/WebDOMError.h"
-#include "third_party/WebKit/public/web/WebDOMFileSystem.h"
-#include "third_party/WebKit/public/web/WebLocalFrame.h"
-#include "webkit/common/fileapi/file_system_types.h"
-#include "webkit/common/fileapi/file_system_util.h"
-
-namespace extensions {
-
-FileSystemNatives::FileSystemNatives(ChromeV8Context* context)
-    : ObjectBackedNativeHandler(context) {
-  RouteFunction("GetFileEntry",
-      base::Bind(&FileSystemNatives::GetFileEntry, base::Unretained(this)));
-  RouteFunction("GetIsolatedFileSystem",
-      base::Bind(&FileSystemNatives::GetIsolatedFileSystem,
-                 base::Unretained(this)));
-  RouteFunction("CrackIsolatedFileSystemName",
-      base::Bind(&FileSystemNatives::CrackIsolatedFileSystemName,
-                 base::Unretained(this)));
-  RouteFunction("GetDOMError",
-      base::Bind(&FileSystemNatives::GetDOMError,
-                 base::Unretained(this)));
-}
-
-void FileSystemNatives::GetIsolatedFileSystem(
-    const v8::FunctionCallbackInfo<v8::Value>& args) {
-  DCHECK(args.Length() == 1 || args.Length() == 2);
-  DCHECK(args[0]->IsString());
-  std::string file_system_id(*v8::String::Utf8Value(args[0]));
-  blink::WebLocalFrame* webframe =
-      blink::WebLocalFrame::frameForContext(context()->v8_context());
-  DCHECK(webframe);
-
-  GURL context_url =
-      extensions::ScriptContext::GetDataSourceURLForFrame(webframe);
-  CHECK(context_url.SchemeIs(extensions::kExtensionScheme));
-
-  std::string name(fileapi::GetIsolatedFileSystemName(context_url.GetOrigin(),
-                                                      file_system_id));
-
-  // The optional second argument is the subfolder within the isolated file
-  // system at which to root the DOMFileSystem we're returning to the caller.
-  std::string optional_root_name;
-  if (args.Length() == 2) {
-    DCHECK(args[1]->IsString());
-    optional_root_name = *v8::String::Utf8Value(args[1]);
-  }
-
-  GURL root_url(fileapi::GetIsolatedFileSystemRootURIString(
-      context_url.GetOrigin(),
-      file_system_id,
-      optional_root_name));
-
-  args.GetReturnValue().Set(
-      blink::WebDOMFileSystem::create(
-          webframe,
-          blink::WebFileSystemTypeIsolated,
-          blink::WebString::fromUTF8(name),
-          root_url).toV8Value());
-}
-
-void FileSystemNatives::GetFileEntry(
-    const v8::FunctionCallbackInfo<v8::Value>& args) {
-  DCHECK(args.Length() == 5);
-  DCHECK(args[0]->IsString());
-  std::string type_string = *v8::String::Utf8Value(args[0]->ToString());
-  blink::WebFileSystemType type;
-  bool is_valid_type = fileapi::GetFileSystemPublicType(type_string, &type);
-  DCHECK(is_valid_type);
-  if (is_valid_type == false) {
-    return;
-  }
-
-  DCHECK(args[1]->IsString());
-  DCHECK(args[2]->IsString());
-  DCHECK(args[3]->IsString());
-  std::string file_system_name(*v8::String::Utf8Value(args[1]->ToString()));
-  GURL file_system_root_url(*v8::String::Utf8Value(args[2]->ToString()));
-  std::string file_path_string(*v8::String::Utf8Value(args[3]->ToString()));
-  base::FilePath file_path = base::FilePath::FromUTF8Unsafe(file_path_string);
-  DCHECK(fileapi::VirtualPath::IsAbsolute(file_path.value()));
-
-  DCHECK(args[4]->IsBoolean());
-  blink::WebDOMFileSystem::EntryType entry_type = args[4]->BooleanValue()
-      ? blink::WebDOMFileSystem::EntryTypeDirectory
-      : blink::WebDOMFileSystem::EntryTypeFile;
-
-  blink::WebLocalFrame* webframe =
-      blink::WebLocalFrame::frameForContext(context()->v8_context());
-  DCHECK(webframe);
-  args.GetReturnValue().Set(
-      blink::WebDOMFileSystem::create(
-          webframe, type,
-          blink::WebString::fromUTF8(file_system_name),
-          file_system_root_url).createV8Entry(
-              blink::WebString::fromUTF8(file_path_string),
-              entry_type));
-}
-
-void FileSystemNatives::CrackIsolatedFileSystemName(
-    const v8::FunctionCallbackInfo<v8::Value>& args) {
-  DCHECK_EQ(args.Length(), 1);
-  DCHECK(args[0]->IsString());
-  std::string filesystem_name = *v8::String::Utf8Value(args[0]->ToString());
-  std::string filesystem_id;
-  if (!fileapi::CrackIsolatedFileSystemName(filesystem_name, &filesystem_id))
-    return;
-
-  args.GetReturnValue().Set(v8::String::NewFromUtf8(args.GetIsolate(),
-                                                    filesystem_id.c_str(),
-                                                    v8::String::kNormalString,
-                                                    filesystem_id.size()));
-}
-
-void FileSystemNatives::GetDOMError(
-    const v8::FunctionCallbackInfo<v8::Value>& args) {
-  if (args.Length() != 2) {
-    NOTREACHED();
-    return;
-  }
-  if (!args[0]->IsString()) {
-    NOTREACHED();
-    return;
-  }
-  if (!args[1]->IsString()) {
-    NOTREACHED();
-    return;
-  }
-
-  std::string name(*v8::String::Utf8Value(args[0]));
-  if (name.empty()) {
-    NOTREACHED();
-    return;
-  }
-  std::string message(*v8::String::Utf8Value(args[1]));
-  // message is optional hence empty is fine.
-
-  blink::WebDOMError dom_error = blink::WebDOMError::create(
-      blink::WebString::fromUTF8(name),
-      blink::WebString::fromUTF8(message));
-  args.GetReturnValue().Set(dom_error.toV8Value());
-}
-
-}  // namespace extensions
diff --git a/chrome/renderer/extensions/file_system_natives.h b/chrome/renderer/extensions/file_system_natives.h
deleted file mode 100644
index 26f0257..0000000
--- a/chrome/renderer/extensions/file_system_natives.h
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright (c) 2012 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 CHROME_RENDERER_EXTENSIONS_FILE_SYSTEM_NATIVES_H_
-#define CHROME_RENDERER_EXTENSIONS_FILE_SYSTEM_NATIVES_H_
-
-#include "base/compiler_specific.h"
-#include "extensions/renderer/object_backed_native_handler.h"
-
-namespace extensions {
-class ChromeV8Context;
-
-// Custom bindings for the nativeFileSystem API.
-class FileSystemNatives : public ObjectBackedNativeHandler {
- public:
-  explicit FileSystemNatives(ChromeV8Context* context);
-
- private:
-  void GetFileEntry(const v8::FunctionCallbackInfo<v8::Value>& args);
-  void GetIsolatedFileSystem(const v8::FunctionCallbackInfo<v8::Value>& args);
-  void CrackIsolatedFileSystemName(
-      const v8::FunctionCallbackInfo<v8::Value>& args);
-  // Constructs a DOMError object to be used in JavaScript.
-  void GetDOMError(const v8::FunctionCallbackInfo<v8::Value>& args);
-
-  DISALLOW_COPY_AND_ASSIGN(FileSystemNatives);
-};
-
-}  // namespace extensions
-
-#endif  // CHROME_RENDERER_EXTENSIONS_FILE_SYSTEM_NATIVES_H_
diff --git a/chrome/renderer/extensions/i18n_custom_bindings.cc b/chrome/renderer/extensions/i18n_custom_bindings.cc
deleted file mode 100644
index c1af428..0000000
--- a/chrome/renderer/extensions/i18n_custom_bindings.cc
+++ /dev/null
@@ -1,97 +0,0 @@
-// Copyright (c) 2012 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 "chrome/renderer/extensions/i18n_custom_bindings.h"
-
-#include "base/bind.h"
-#include "content/public/renderer/render_thread.h"
-#include "content/public/renderer/render_view.h"
-#include "extensions/common/extension_messages.h"
-#include "extensions/common/message_bundle.h"
-#include "grit/renderer_resources.h"
-#include "v8/include/v8.h"
-
-namespace extensions {
-
-I18NCustomBindings::I18NCustomBindings(Dispatcher* dispatcher,
-                                       ChromeV8Context* context)
-    : ChromeV8Extension(dispatcher, context) {
-  RouteFunction("GetL10nMessage",
-      base::Bind(&I18NCustomBindings::GetL10nMessage, base::Unretained(this)));
-  RouteFunction("GetL10nUILanguage",
-                base::Bind(&I18NCustomBindings::GetL10nUILanguage,
-                           base::Unretained(this)));
-}
-
-void I18NCustomBindings::GetL10nMessage(
-    const v8::FunctionCallbackInfo<v8::Value>& args) {
-  if (args.Length() != 3 || !args[0]->IsString()) {
-    NOTREACHED() << "Bad arguments";
-    return;
-  }
-
-  std::string extension_id;
-  if (args[2]->IsNull() || !args[2]->IsString()) {
-    return;
-  } else {
-    extension_id = *v8::String::Utf8Value(args[2]->ToString());
-    if (extension_id.empty())
-      return;
-  }
-
-  L10nMessagesMap* l10n_messages = GetL10nMessagesMap(extension_id);
-  if (!l10n_messages) {
-    // Get the current RenderView so that we can send a routed IPC message
-    // from the correct source.
-    content::RenderView* renderview = GetRenderView();
-    if (!renderview)
-      return;
-
-    L10nMessagesMap messages;
-    // A sync call to load message catalogs for current extension.
-    renderview->Send(new ExtensionHostMsg_GetMessageBundle(
-        extension_id, &messages));
-
-    // Save messages we got.
-    ExtensionToL10nMessagesMap& l10n_messages_map =
-        *GetExtensionToL10nMessagesMap();
-    l10n_messages_map[extension_id] = messages;
-
-    l10n_messages = GetL10nMessagesMap(extension_id);
-  }
-
-  std::string message_name = *v8::String::Utf8Value(args[0]);
-  std::string message =
-      MessageBundle::GetL10nMessage(message_name, *l10n_messages);
-
-  v8::Isolate* isolate = args.GetIsolate();
-  std::vector<std::string> substitutions;
-  if (args[1]->IsArray()) {
-    // chrome.i18n.getMessage("message_name", ["more", "params"]);
-    v8::Local<v8::Array> placeholders = v8::Local<v8::Array>::Cast(args[1]);
-    uint32_t count = placeholders->Length();
-    if (count > 9)
-      return;
-    for (uint32_t i = 0; i < count; ++i) {
-      substitutions.push_back(
-          *v8::String::Utf8Value(
-              placeholders->Get(v8::Integer::New(isolate, i))->ToString()));
-    }
-  } else if (args[1]->IsString()) {
-    // chrome.i18n.getMessage("message_name", "one param");
-    substitutions.push_back(*v8::String::Utf8Value(args[1]->ToString()));
-  }
-
-  args.GetReturnValue().Set(
-      v8::String::NewFromUtf8(isolate, ReplaceStringPlaceholders(
-        message, substitutions, NULL).c_str()));
-}
-
-void I18NCustomBindings::GetL10nUILanguage(
-    const v8::FunctionCallbackInfo<v8::Value>& args) {
-  args.GetReturnValue().Set(v8::String::NewFromUtf8(
-      args.GetIsolate(), content::RenderThread::Get()->GetLocale().c_str()));
-}
-
-}  // namespace extensions
diff --git a/chrome/renderer/extensions/i18n_custom_bindings.h b/chrome/renderer/extensions/i18n_custom_bindings.h
deleted file mode 100644
index 390bc6e..0000000
--- a/chrome/renderer/extensions/i18n_custom_bindings.h
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright (c) 2012 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 CHROME_RENDERER_EXTENSIONS_I18N_CUSTOM_BINDINGS_H_
-#define CHROME_RENDERER_EXTENSIONS_I18N_CUSTOM_BINDINGS_H_
-
-#include "chrome/renderer/extensions/chrome_v8_extension.h"
-
-namespace extensions {
-
-// Implements custom bindings for the i18n API.
-class I18NCustomBindings : public ChromeV8Extension {
- public:
-  I18NCustomBindings(Dispatcher* dispatcher, ChromeV8Context* context);
-
- private:
-  void GetL10nMessage(const v8::FunctionCallbackInfo<v8::Value>& args);
-  void GetL10nUILanguage(const v8::FunctionCallbackInfo<v8::Value>& args);
-};
-
-}  // namespace extensions
-
-#endif  // CHROME_RENDERER_EXTENSIONS_I18N_CUSTOM_BINDINGS_H_
diff --git a/chrome/renderer/extensions/id_generator_custom_bindings.cc b/chrome/renderer/extensions/id_generator_custom_bindings.cc
deleted file mode 100644
index 42c7d83..0000000
--- a/chrome/renderer/extensions/id_generator_custom_bindings.cc
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2013 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 "chrome/renderer/extensions/id_generator_custom_bindings.h"
-
-#include "base/bind.h"
-#include "grit/renderer_resources.h"
-#include "v8/include/v8.h"
-
-namespace extensions {
-
-IdGeneratorCustomBindings::IdGeneratorCustomBindings(Dispatcher* dispatcher,
-                                                     ChromeV8Context* context)
-    : ChromeV8Extension(dispatcher, context) {
-  RouteFunction("GetNextId", base::Bind(&IdGeneratorCustomBindings::GetNextId,
-                                        base::Unretained(this)));
-}
-
-void IdGeneratorCustomBindings::GetNextId(
-    const v8::FunctionCallbackInfo<v8::Value>& args) {
-  static int32_t next_id = 0;
-  ++next_id;
-  // Make sure 0 is never returned because some APIs (particularly WebRequest)
-  // have special meaning for 0 IDs.
-  if (next_id == 0)
-    next_id = 1;
-  args.GetReturnValue().Set(next_id);
-}
-
-}  // namespace extensions
diff --git a/chrome/renderer/extensions/id_generator_custom_bindings.h b/chrome/renderer/extensions/id_generator_custom_bindings.h
deleted file mode 100644
index 4ed6a96..0000000
--- a/chrome/renderer/extensions/id_generator_custom_bindings.h
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2013 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 CHROME_RENDERER_EXTENSIONS_ID_GENERATOR_CUSTOM_BINDINGS_H_
-#define CHROME_RENDERER_EXTENSIONS_ID_GENERATOR_CUSTOM_BINDINGS_H_
-
-#include "chrome/renderer/extensions/chrome_v8_extension.h"
-
-namespace extensions {
-
-// Implements function that can be used by JS layer to generate unique integer
-// identifiers.
-class IdGeneratorCustomBindings : public ChromeV8Extension {
- public:
-  IdGeneratorCustomBindings(Dispatcher* dispatcher, ChromeV8Context* context);
-
- private:
-  void GetNextId(const v8::FunctionCallbackInfo<v8::Value>& args);
-};
-
-}  // namespace extensions
-
-#endif  // CHROME_RENDERER_EXTENSIONS_ID_GENERATOR_CUSTOM_BINDINGS_H_
diff --git a/chrome/renderer/extensions/json_schema_unittest.cc b/chrome/renderer/extensions/json_schema_unittest.cc
index 6d8be10..858b135 100644
--- a/chrome/renderer/extensions/json_schema_unittest.cc
+++ b/chrome/renderer/extensions/json_schema_unittest.cc
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/renderer/extensions/v8_schema_registry.h"
 #include "chrome/test/base/module_system_test.h"
+#include "extensions/renderer/v8_schema_registry.h"
 #include "grit/renderer_resources.h"
 
 namespace extensions {
diff --git a/chrome/renderer/extensions/logging_native_handler.cc b/chrome/renderer/extensions/logging_native_handler.cc
deleted file mode 100644
index 9002b7d..0000000
--- a/chrome/renderer/extensions/logging_native_handler.cc
+++ /dev/null
@@ -1,98 +0,0 @@
-// Copyright 2013 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 "chrome/renderer/extensions/logging_native_handler.h"
-
-#include "base/logging.h"
-#include "base/strings/stringprintf.h"
-
-namespace extensions {
-
-LoggingNativeHandler::LoggingNativeHandler(ScriptContext* context)
-    : ObjectBackedNativeHandler(context) {
-  RouteFunction("DCHECK",
-      base::Bind(&LoggingNativeHandler::Dcheck, base::Unretained(this)));
-  RouteFunction("CHECK",
-      base::Bind(&LoggingNativeHandler::Check, base::Unretained(this)));
-  RouteFunction("DCHECK_IS_ON",
-      base::Bind(&LoggingNativeHandler::DcheckIsOn, base::Unretained(this)));
-  RouteFunction("LOG",
-      base::Bind(&LoggingNativeHandler::Log, base::Unretained(this)));
-  RouteFunction("WARNING",
-      base::Bind(&LoggingNativeHandler::Warning, base::Unretained(this)));
-}
-
-LoggingNativeHandler::~LoggingNativeHandler() {}
-
-void LoggingNativeHandler::Check(
-    const v8::FunctionCallbackInfo<v8::Value>& args) {
-  bool check_value;
-  std::string error_message;
-  ParseArgs(args, &check_value, &error_message);
-  CHECK(check_value) << error_message;
-}
-
-void LoggingNativeHandler::Dcheck(
-    const v8::FunctionCallbackInfo<v8::Value>& args) {
-  bool check_value;
-  std::string error_message;
-  ParseArgs(args, &check_value, &error_message);
-  DCHECK(check_value) << error_message;
-}
-
-void LoggingNativeHandler::DcheckIsOn(
-    const v8::FunctionCallbackInfo<v8::Value>& args) {
-  args.GetReturnValue().Set(DCHECK_IS_ON);
-}
-
-void LoggingNativeHandler::Log(
-    const v8::FunctionCallbackInfo<v8::Value>& args) {
-  CHECK_EQ(1, args.Length());
-  LOG(INFO) << *v8::String::Utf8Value(args[0]);
-}
-
-void LoggingNativeHandler::Warning(
-    const v8::FunctionCallbackInfo<v8::Value>& args) {
-  CHECK_EQ(1, args.Length());
-  LOG(WARNING) << *v8::String::Utf8Value(args[0]);
-}
-
-void LoggingNativeHandler::ParseArgs(
-    const v8::FunctionCallbackInfo<v8::Value>& args,
-    bool* check_value,
-    std::string* error_message) {
-  CHECK_LE(args.Length(), 2);
-  *check_value = args[0]->BooleanValue();
-  if (args.Length() == 2) {
-    *error_message = "Error: " + std::string(
-        *v8::String::Utf8Value(args[1]));
-  }
-
-  v8::Handle<v8::StackTrace> stack_trace =
-      v8::StackTrace::CurrentStackTrace(args.GetIsolate(), 10);
-  if (stack_trace.IsEmpty() || stack_trace->GetFrameCount() <= 0) {
-    *error_message += "\n    <no stack trace>";
-  } else {
-    for (size_t i = 0; i < (size_t) stack_trace->GetFrameCount(); ++i) {
-      v8::Handle<v8::StackFrame> frame = stack_trace->GetFrame(i);
-      CHECK(!frame.IsEmpty());
-      *error_message += base::StringPrintf("\n    at %s (%s:%d:%d)",
-          ToStringOrDefault(frame->GetFunctionName(), "<anonymous>").c_str(),
-          ToStringOrDefault(frame->GetScriptName(), "<anonymous>").c_str(),
-          frame->GetLineNumber(),
-          frame->GetColumn());
-    }
-  }
-}
-
-std::string LoggingNativeHandler::ToStringOrDefault(
-    const v8::Handle<v8::String>& v8_string,
-    const std::string& dflt) {
-  if (v8_string.IsEmpty())
-    return dflt;
-  std::string ascii_value = *v8::String::Utf8Value(v8_string);
-  return ascii_value.empty() ? dflt : ascii_value;
-}
-
-}  // namespace extensions
diff --git a/chrome/renderer/extensions/logging_native_handler.h b/chrome/renderer/extensions/logging_native_handler.h
deleted file mode 100644
index f097c54..0000000
--- a/chrome/renderer/extensions/logging_native_handler.h
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright 2013 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 CHROME_RENDERER_EXTENSIONS_LOGGING_NATIVE_HANDLER_H_
-#define CHROME_RENDERER_EXTENSIONS_LOGGING_NATIVE_HANDLER_H_
-
-#include <string>
-
-#include "extensions/renderer/object_backed_native_handler.h"
-
-namespace extensions {
-class ScriptContext;
-
-// Exposes logging.h macros to JavaScript bindings.
-class LoggingNativeHandler : public ObjectBackedNativeHandler {
- public:
-  explicit LoggingNativeHandler(ScriptContext* context);
-  virtual ~LoggingNativeHandler();
-
-  // Equivalent to CHECK(predicate) << message.
-  //
-  // void(predicate, message?)
-  void Check(const v8::FunctionCallbackInfo<v8::Value>& args);
-
-  // Equivalent to DCHECK(predicate) << message.
-  //
-  // void(predicate, message?)
-  void Dcheck(const v8::FunctionCallbackInfo<v8::Value>& args);
-
-  // Equivalent to DCHECK_IS_ON.
-  //
-  // bool()
-  void DcheckIsOn(const v8::FunctionCallbackInfo<v8::Value>& args);
-
-  // Equivalent to LOG(INFO) << message.
-  //
-  // void(message)
-  void Log(const v8::FunctionCallbackInfo<v8::Value>& args);
-
-  // Equivalent to LOG(WARNING) << message.
-  //
-  // void(message)
-  void Warning(const v8::FunctionCallbackInfo<v8::Value>& args);
-
-  void ParseArgs(const v8::FunctionCallbackInfo<v8::Value>& args,
-                 bool* check_value,
-                 std::string* error_message);
-
-  std::string ToStringOrDefault(const v8::Handle<v8::String>& v8_string,
-                                const std::string& dflt);
-};
-
-}  // namespace extensions
-
-#endif  // CHROME_RENDERER_EXTENSIONS_LOGGING_NATIVE_HANDLER_H_
diff --git a/chrome/renderer/extensions/media_galleries_custom_bindings.cc b/chrome/renderer/extensions/media_galleries_custom_bindings.cc
index 72a1a46..f8e3712 100644
--- a/chrome/renderer/extensions/media_galleries_custom_bindings.cc
+++ b/chrome/renderer/extensions/media_galleries_custom_bindings.cc
@@ -6,7 +6,7 @@
 
 #include <string>
 
-#include "chrome/common/extensions/extension_constants.h"
+#include "extensions/renderer/script_context.h"
 #include "third_party/WebKit/public/web/WebDOMFileSystem.h"
 #include "third_party/WebKit/public/web/WebDocument.h"
 #include "third_party/WebKit/public/web/WebLocalFrame.h"
@@ -45,8 +45,8 @@
 }  // namespace
 
 MediaGalleriesCustomBindings::MediaGalleriesCustomBindings(
-    Dispatcher* dispatcher, ChromeV8Context* context)
-    : ChromeV8Extension(dispatcher, context) {
+    ScriptContext* context)
+    : ObjectBackedNativeHandler(context) {
   RouteFunction("GetMediaFileSystemObject",
                 base::Bind(&GetMediaFileSystemObject));
 }
diff --git a/chrome/renderer/extensions/media_galleries_custom_bindings.h b/chrome/renderer/extensions/media_galleries_custom_bindings.h
index c38055b..bfa68ce 100644
--- a/chrome/renderer/extensions/media_galleries_custom_bindings.h
+++ b/chrome/renderer/extensions/media_galleries_custom_bindings.h
@@ -5,15 +5,14 @@
 #ifndef CHROME_RENDERER_EXTENSIONS_MEDIA_GALLERIES_CUSTOM_BINDINGS_H_
 #define CHROME_RENDERER_EXTENSIONS_MEDIA_GALLERIES_CUSTOM_BINDINGS_H_
 
-#include "chrome/renderer/extensions/chrome_v8_extension.h"
+#include "extensions/renderer/object_backed_native_handler.h"
 
 namespace extensions {
 
 // Implements custom bindings for the media galleries API.
-class MediaGalleriesCustomBindings : public ChromeV8Extension {
+class MediaGalleriesCustomBindings : public ObjectBackedNativeHandler {
  public:
-  MediaGalleriesCustomBindings(Dispatcher* dispatcher,
-                               ChromeV8Context* context);
+  explicit MediaGalleriesCustomBindings(ScriptContext* context);
 
  private:
   DISALLOW_COPY_AND_ASSIGN(MediaGalleriesCustomBindings);
diff --git a/chrome/renderer/extensions/messaging_bindings.cc b/chrome/renderer/extensions/messaging_bindings.cc
index 4e273b7..e906f4d 100644
--- a/chrome/renderer/extensions/messaging_bindings.cc
+++ b/chrome/renderer/extensions/messaging_bindings.cc
@@ -15,9 +15,6 @@
 #include "base/values.h"
 #include "chrome/common/extensions/manifest_handlers/externally_connectable.h"
 #include "chrome/common/url_constants.h"
-#include "chrome/renderer/extensions/chrome_v8_context.h"
-#include "chrome/renderer/extensions/chrome_v8_context_set.h"
-#include "chrome/renderer/extensions/chrome_v8_extension.h"
 #include "chrome/renderer/extensions/dispatcher.h"
 #include "content/public/renderer/render_thread.h"
 #include "content/public/renderer/render_view.h"
@@ -25,8 +22,10 @@
 #include "extensions/common/api/messaging/message.h"
 #include "extensions/common/extension_messages.h"
 #include "extensions/renderer/event_bindings.h"
+#include "extensions/renderer/object_backed_native_handler.h"
 #include "extensions/renderer/scoped_persistent.h"
-#include "grit/renderer_resources.h"
+#include "extensions/renderer/script_context.h"
+#include "extensions/renderer/script_context_set.h"
 #include "third_party/WebKit/public/web/WebScopedMicrotaskSuppression.h"
 #include "third_party/WebKit/public/web/WebScopedUserGesture.h"
 #include "third_party/WebKit/public/web/WebScopedWindowFocusAllowedIndicator.h"
@@ -78,10 +77,10 @@
 const char kReceivingEndDoesntExistError[] =
     "Could not establish connection. Receiving end does not exist.";
 
-class ExtensionImpl : public ChromeV8Extension {
+class ExtensionImpl : public ObjectBackedNativeHandler {
  public:
-  ExtensionImpl(Dispatcher* dispatcher, ChromeV8Context* context)
-      : ChromeV8Extension(dispatcher, context) {
+  ExtensionImpl(Dispatcher* dispatcher, ScriptContext* context)
+      : ObjectBackedNativeHandler(context), dispatcher_(dispatcher) {
     RouteFunction("CloseChannel",
         base::Bind(&ExtensionImpl::CloseChannel, base::Unretained(this)));
     RouteFunction("PortAddRef",
@@ -97,14 +96,15 @@
 
   virtual ~ExtensionImpl() {}
 
+ private:
   void ClearPortDataAndNotifyDispatcher(int port_id) {
     ClearPortData(port_id);
-    dispatcher()->ClearPortData(port_id);
+    dispatcher_->ClearPortData(port_id);
   }
 
   // Sends a message along the given channel.
   void PostMessage(const v8::FunctionCallbackInfo<v8::Value>& args) {
-    content::RenderView* renderview = GetRenderView();
+    content::RenderView* renderview = context()->GetRenderView();
     if (!renderview)
       return;
 
@@ -232,19 +232,21 @@
                      args[1].As<v8::Function>(),
                      args.GetIsolate());
   }
+
+  // Dispatcher handle. Not owned.
+  Dispatcher* dispatcher_;
 };
 
 }  // namespace
 
-ChromeV8Extension* MessagingBindings::Get(
-    Dispatcher* dispatcher,
-    ChromeV8Context* context) {
+ObjectBackedNativeHandler* MessagingBindings::Get(Dispatcher* dispatcher,
+                                                  ScriptContext* context) {
   return new ExtensionImpl(dispatcher, context);
 }
 
 // static
 void MessagingBindings::DispatchOnConnect(
-    const ChromeV8ContextSet::ContextSet& contexts,
+    const ScriptContextSet::ContextSet& contexts,
     int target_port_id,
     const std::string& channel_name,
     const base::DictionaryValue& source_tab,
@@ -261,9 +263,10 @@
   bool port_created = false;
   std::string source_url_spec = source_url.spec();
 
-  // TODO(kalman): pass in the full ChromeV8ContextSet; call ForEach.
-  for (ChromeV8ContextSet::ContextSet::const_iterator it = contexts.begin();
-       it != contexts.end(); ++it) {
+  // TODO(kalman): pass in the full ScriptContextSet; call ForEach.
+  for (ScriptContextSet::ContextSet::const_iterator it = contexts.begin();
+       it != contexts.end();
+       ++it) {
     if (restrict_to_render_view &&
         restrict_to_render_view != (*it)->GetRenderView()) {
       continue;
@@ -346,7 +349,7 @@
 
 // static
 void MessagingBindings::DeliverMessage(
-    const ChromeV8ContextSet::ContextSet& contexts,
+    const ScriptContextSet::ContextSet& contexts,
     int target_port_id,
     const Message& message,
     content::RenderView* restrict_to_render_view) {
@@ -360,9 +363,10 @@
   v8::Isolate* isolate = v8::Isolate::GetCurrent();
   v8::HandleScope handle_scope(isolate);
 
-  // TODO(kalman): pass in the full ChromeV8ContextSet; call ForEach.
-  for (ChromeV8ContextSet::ContextSet::const_iterator it = contexts.begin();
-       it != contexts.end(); ++it) {
+  // TODO(kalman): pass in the full ScriptContextSet; call ForEach.
+  for (ScriptContextSet::ContextSet::const_iterator it = contexts.begin();
+       it != contexts.end();
+       ++it) {
     if (restrict_to_render_view &&
         restrict_to_render_view != (*it)->GetRenderView()) {
       continue;
@@ -399,16 +403,17 @@
 
 // static
 void MessagingBindings::DispatchOnDisconnect(
-    const ChromeV8ContextSet::ContextSet& contexts,
+    const ScriptContextSet::ContextSet& contexts,
     int port_id,
     const std::string& error_message,
     content::RenderView* restrict_to_render_view) {
   v8::Isolate* isolate = v8::Isolate::GetCurrent();
   v8::HandleScope handle_scope(isolate);
 
-  // TODO(kalman): pass in the full ChromeV8ContextSet; call ForEach.
-  for (ChromeV8ContextSet::ContextSet::const_iterator it = contexts.begin();
-       it != contexts.end(); ++it) {
+  // TODO(kalman): pass in the full ScriptContextSet; call ForEach.
+  for (ScriptContextSet::ContextSet::const_iterator it = contexts.begin();
+       it != contexts.end();
+       ++it) {
     if (restrict_to_render_view &&
         restrict_to_render_view != (*it)->GetRenderView()) {
       continue;
diff --git a/chrome/renderer/extensions/messaging_bindings.h b/chrome/renderer/extensions/messaging_bindings.h
index c9ebd83..ab3c093 100644
--- a/chrome/renderer/extensions/messaging_bindings.h
+++ b/chrome/renderer/extensions/messaging_bindings.h
@@ -7,7 +7,7 @@
 
 #include <string>
 
-#include "chrome/renderer/extensions/chrome_v8_context_set.h"
+#include "extensions/renderer/script_context_set.h"
 
 namespace base {
 class DictionaryValue;
@@ -22,9 +22,9 @@
 }
 
 namespace extensions {
-class ChromeV8Extension;
 class Dispatcher;
 struct Message;
+class ObjectBackedNativeHandler;
 
 // Manually implements JavaScript bindings for extension messaging.
 //
@@ -34,35 +34,33 @@
 class MessagingBindings {
  public:
   // Creates an instance of the extension.
-  static ChromeV8Extension* Get(Dispatcher* dispatcher,
-                                ChromeV8Context* context);
+  static ObjectBackedNativeHandler* Get(Dispatcher* dispatcher,
+                                        ScriptContext* context);
 
   // Dispatches the onConnect content script messaging event to some contexts
   // in |contexts|. If |restrict_to_render_view| is specified, only contexts in
   // that render view will receive the message.
-  static void DispatchOnConnect(
-      const ChromeV8ContextSet::ContextSet& contexts,
-      int target_port_id,
-      const std::string& channel_name,
-      const base::DictionaryValue& source_tab,
-      const std::string& source_extension_id,
-      const std::string& target_extension_id,
-      const GURL& source_url,
-      const std::string& tls_channel_id,
-      content::RenderView* restrict_to_render_view);
+  static void DispatchOnConnect(const ScriptContextSet::ContextSet& contexts,
+                                int target_port_id,
+                                const std::string& channel_name,
+                                const base::DictionaryValue& source_tab,
+                                const std::string& source_extension_id,
+                                const std::string& target_extension_id,
+                                const GURL& source_url,
+                                const std::string& tls_channel_id,
+                                content::RenderView* restrict_to_render_view);
 
   // Delivers a message sent using content script messaging to some of the
   // contexts in |bindings_context_set|. If |restrict_to_render_view| is
   // specified, only contexts in that render view will receive the message.
-  static void DeliverMessage(
-      const ChromeV8ContextSet::ContextSet& context_set,
-      int target_port_id,
-      const Message& message,
-      content::RenderView* restrict_to_render_view);
+  static void DeliverMessage(const ScriptContextSet::ContextSet& context_set,
+                             int target_port_id,
+                             const Message& message,
+                             content::RenderView* restrict_to_render_view);
 
   // Dispatches the onDisconnect event in response to the channel being closed.
   static void DispatchOnDisconnect(
-      const ChromeV8ContextSet::ContextSet& context_set,
+      const ScriptContextSet::ContextSet& context_set,
       int port_id,
       const std::string& error_message,
       content::RenderView* restrict_to_render_view);
diff --git a/chrome/renderer/extensions/page_actions_custom_bindings.cc b/chrome/renderer/extensions/page_actions_custom_bindings.cc
index 54b7e97..fa74cfb 100644
--- a/chrome/renderer/extensions/page_actions_custom_bindings.cc
+++ b/chrome/renderer/extensions/page_actions_custom_bindings.cc
@@ -10,14 +10,14 @@
 #include "chrome/common/extensions/api/extension_action/action_info.h"
 #include "chrome/renderer/extensions/dispatcher.h"
 #include "extensions/common/extension.h"
-#include "grit/renderer_resources.h"
+#include "extensions/renderer/script_context.h"
 #include "v8/include/v8.h"
 
 namespace extensions {
 
-PageActionsCustomBindings::PageActionsCustomBindings(
-    Dispatcher* dispatcher, ChromeV8Context* context)
-    : ChromeV8Extension(dispatcher, context) {
+PageActionsCustomBindings::PageActionsCustomBindings(Dispatcher* dispatcher,
+                                                     ScriptContext* context)
+    : ObjectBackedNativeHandler(context), dispatcher_(dispatcher) {
   RouteFunction("GetCurrentPageActions",
       base::Bind(&PageActionsCustomBindings::GetCurrentPageActions,
                  base::Unretained(this)));
diff --git a/chrome/renderer/extensions/page_actions_custom_bindings.h b/chrome/renderer/extensions/page_actions_custom_bindings.h
index b09babd..9200f91 100644
--- a/chrome/renderer/extensions/page_actions_custom_bindings.h
+++ b/chrome/renderer/extensions/page_actions_custom_bindings.h
@@ -5,19 +5,21 @@
 #ifndef CHROME_RENDERER_EXTENSIONS_PAGE_ACTIONS_CUSTOM_BINDINGS_H_
 #define CHROME_RENDERER_EXTENSIONS_PAGE_ACTIONS_CUSTOM_BINDINGS_H_
 
-#include "chrome/renderer/extensions/chrome_v8_extension.h"
+#include "extensions/renderer/object_backed_native_handler.h"
 
 namespace extensions {
 class Dispatcher;
 
 // Implements custom bindings for the pageActions API.
-class PageActionsCustomBindings : public ChromeV8Extension {
+class PageActionsCustomBindings : public ObjectBackedNativeHandler {
  public:
-  PageActionsCustomBindings(Dispatcher* extension_dispatcher,
-                            ChromeV8Context* context);
+  PageActionsCustomBindings(Dispatcher* dispatcher, ScriptContext* context);
 
  private:
   void GetCurrentPageActions(const v8::FunctionCallbackInfo<v8::Value>& args);
+
+  // Dispatcher handle. Not owned.
+  Dispatcher* dispatcher_;
 };
 
 }  // namespace extensions
diff --git a/chrome/renderer/extensions/page_capture_custom_bindings.cc b/chrome/renderer/extensions/page_capture_custom_bindings.cc
index d0a2334..57d5b3b 100644
--- a/chrome/renderer/extensions/page_capture_custom_bindings.cc
+++ b/chrome/renderer/extensions/page_capture_custom_bindings.cc
@@ -8,16 +8,14 @@
 #include "base/strings/utf_string_conversions.h"
 #include "content/public/renderer/render_view.h"
 #include "extensions/common/extension_messages.h"
-#include "grit/renderer_resources.h"
+#include "extensions/renderer/script_context.h"
 #include "third_party/WebKit/public/web/WebBlob.h"
 #include "v8/include/v8.h"
 
 namespace extensions {
 
-PageCaptureCustomBindings::PageCaptureCustomBindings(
-    Dispatcher* dispatcher,
-    ChromeV8Context* context)
-    : ChromeV8Extension(dispatcher, context) {
+PageCaptureCustomBindings::PageCaptureCustomBindings(ScriptContext* context)
+    : ObjectBackedNativeHandler(context) {
   RouteFunction("CreateBlob",
       base::Bind(&PageCaptureCustomBindings::CreateBlob,
                  base::Unretained(this)));
@@ -42,7 +40,7 @@
   CHECK(args.Length() == 1);
   CHECK(args[0]->IsInt32());
 
-  content::RenderView* render_view = GetRenderView();
+  content::RenderView* render_view = context()->GetRenderView();
   if (render_view) {
     render_view->Send(new ExtensionHostMsg_ResponseAck(
         render_view->GetRoutingID(), args[0]->Int32Value()));
diff --git a/chrome/renderer/extensions/page_capture_custom_bindings.h b/chrome/renderer/extensions/page_capture_custom_bindings.h
index e568ab5..312ba01 100644
--- a/chrome/renderer/extensions/page_capture_custom_bindings.h
+++ b/chrome/renderer/extensions/page_capture_custom_bindings.h
@@ -5,15 +5,14 @@
 #ifndef CHROME_RENDERER_EXTENSIONS_PAGE_CAPTURE_CUSTOM_BINDINGS_H_
 #define CHROME_RENDERER_EXTENSIONS_PAGE_CAPTURE_CUSTOM_BINDINGS_H_
 
-#include "chrome/renderer/extensions/chrome_v8_extension.h"
+#include "extensions/renderer/object_backed_native_handler.h"
 
 namespace extensions {
 
 // Implements custom bindings for the pageCapture API.
-class PageCaptureCustomBindings : public ChromeV8Extension {
+class PageCaptureCustomBindings : public ObjectBackedNativeHandler {
  public:
-  PageCaptureCustomBindings(Dispatcher* dispatcher,
-                            ChromeV8Context* context);
+  explicit PageCaptureCustomBindings(ScriptContext* context);
 
  private:
   // Creates a Blob with the content of the specified file.
diff --git a/chrome/renderer/extensions/pepper_request_natives.cc b/chrome/renderer/extensions/pepper_request_natives.cc
index 8bfc77c..75bc5b4 100644
--- a/chrome/renderer/extensions/pepper_request_natives.cc
+++ b/chrome/renderer/extensions/pepper_request_natives.cc
@@ -13,7 +13,7 @@
 
 namespace extensions {
 
-PepperRequestNatives::PepperRequestNatives(ChromeV8Context* context)
+PepperRequestNatives::PepperRequestNatives(ScriptContext* context)
     : ObjectBackedNativeHandler(context) {
   RouteFunction(
       "SendResponse",
diff --git a/chrome/renderer/extensions/pepper_request_natives.h b/chrome/renderer/extensions/pepper_request_natives.h
index 0f2b8d7..c1b1add 100644
--- a/chrome/renderer/extensions/pepper_request_natives.h
+++ b/chrome/renderer/extensions/pepper_request_natives.h
@@ -13,12 +13,11 @@
 }
 
 namespace extensions {
-class ChromeV8Context;
 
 // Custom bindings for handling API calls from pepper plugins.
 class PepperRequestNatives : public ObjectBackedNativeHandler {
  public:
-  explicit PepperRequestNatives(ChromeV8Context* context);
+  explicit PepperRequestNatives(ScriptContext* context);
 
  private:
   // Sends a response to an API call to the pepper plugin which made the call.
diff --git a/chrome/renderer/extensions/render_view_observer_natives.cc b/chrome/renderer/extensions/render_view_observer_natives.cc
deleted file mode 100644
index f13f3a2..0000000
--- a/chrome/renderer/extensions/render_view_observer_natives.cc
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright 2013 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 "chrome/renderer/extensions/render_view_observer_natives.h"
-
-#include "chrome/renderer/extensions/dispatcher.h"
-#include "content/public/renderer/render_view.h"
-#include "content/public/renderer/render_view_observer.h"
-#include "extensions/common/extension_api.h"
-#include "extensions/renderer/script_context.h"
-#include "third_party/WebKit/public/web/WebFrame.h"
-#include "third_party/WebKit/public/web/WebScopedMicrotaskSuppression.h"
-
-namespace extensions {
-
-namespace {
-
-// Deletes itself when done.
-class LoadWatcher : public content::RenderViewObserver {
- public:
-  LoadWatcher(ScriptContext* context,
-              content::RenderView* view,
-              v8::Handle<v8::Function> cb)
-      : content::RenderViewObserver(view), context_(context), callback_(cb) {}
-
-  virtual void DidCreateDocumentElement(blink::WebLocalFrame* frame) OVERRIDE {
-    CallbackAndDie(true);
-  }
-
-  virtual void DidFailProvisionalLoad(
-      blink::WebLocalFrame* frame,
-      const blink::WebURLError& error) OVERRIDE {
-    CallbackAndDie(false);
-  }
-
- private:
-  void CallbackAndDie(bool succeeded) {
-    v8::Isolate* isolate = context_->isolate();
-    v8::HandleScope handle_scope(isolate);
-    v8::Handle<v8::Value> args[] = { v8::Boolean::New(isolate, succeeded) };
-    context_->CallFunction(callback_.NewHandle(isolate), 1, args);
-    delete this;
-  }
-
-  ScriptContext* context_;
-  ScopedPersistent<v8::Function> callback_;
-  DISALLOW_COPY_AND_ASSIGN(LoadWatcher);
-};
-}  // namespace
-
-
-RenderViewObserverNatives::RenderViewObserverNatives(Dispatcher* dispatcher,
-                                                     ChromeV8Context* context)
-    : ChromeV8Extension(dispatcher, context) {
-  RouteFunction("OnDocumentElementCreated",
-                base::Bind(&RenderViewObserverNatives::OnDocumentElementCreated,
-                           base::Unretained(this)));
-}
-
-void RenderViewObserverNatives::OnDocumentElementCreated(
-    const v8::FunctionCallbackInfo<v8::Value>& args) {
-  CHECK(args.Length() == 2);
-  CHECK(args[0]->IsInt32());
-  CHECK(args[1]->IsFunction());
-
-  int view_id = args[0]->Int32Value();
-
-  content::RenderView* view = content::RenderView::FromRoutingID(view_id);
-  if (!view) {
-    LOG(WARNING) << "No render view found to register LoadWatcher.";
-    return;
-  }
-
-  new LoadWatcher(context(), view, args[1].As<v8::Function>());
-
-  args.GetReturnValue().Set(true);
-}
-
-}  // namespace extensions
diff --git a/chrome/renderer/extensions/render_view_observer_natives.h b/chrome/renderer/extensions/render_view_observer_natives.h
deleted file mode 100644
index 7d9fb69..0000000
--- a/chrome/renderer/extensions/render_view_observer_natives.h
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2013 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 CHROME_RENDERER_EXTENSIONS_RENDER_VIEW_OBSERVER_NATIVES_H_
-#define CHROME_RENDERER_EXTENSIONS_RENDER_VIEW_OBSERVER_NATIVES_H_
-
-#include "chrome/renderer/extensions/chrome_v8_extension.h"
-#include "v8/include/v8.h"
-
-namespace extensions {
-class Dispatcher;
-
-// Native functions for JS to run callbacks upon RenderView events.
-class RenderViewObserverNatives : public ChromeV8Extension {
- public:
-  RenderViewObserverNatives(Dispatcher* dispatcher, ChromeV8Context* context);
-
- private:
-  // Runs a callback upon creation of new document element inside a render view
-  // (document.documentElement).
-  void OnDocumentElementCreated(
-      const v8::FunctionCallbackInfo<v8::Value>& args);
-  DISALLOW_COPY_AND_ASSIGN(RenderViewObserverNatives);
-};
-
-}  // namespace extensions
-
-#endif  // CHROME_RENDERER_EXTENSIONS_RENDER_VIEW_OBSERVER_NATIVES_H_
diff --git a/chrome/renderer/extensions/runtime_custom_bindings.cc b/chrome/renderer/extensions/runtime_custom_bindings.cc
index ac6fb40..bc36d78 100644
--- a/chrome/renderer/extensions/runtime_custom_bindings.cc
+++ b/chrome/renderer/extensions/runtime_custom_bindings.cc
@@ -8,8 +8,6 @@
 #include "base/memory/scoped_ptr.h"
 #include "base/values.h"
 #include "chrome/renderer/extensions/api_activity_logger.h"
-#include "chrome/renderer/extensions/chrome_v8_context.h"
-#include "chrome/renderer/extensions/dispatcher.h"
 #include "chrome/renderer/extensions/extension_helper.h"
 #include "content/public/renderer/render_view.h"
 #include "content/public/renderer/v8_value_converter.h"
@@ -18,6 +16,7 @@
 #include "extensions/common/features/feature.h"
 #include "extensions/common/features/feature_provider.h"
 #include "extensions/common/manifest.h"
+#include "extensions/renderer/script_context.h"
 #include "third_party/WebKit/public/web/WebDocument.h"
 #include "third_party/WebKit/public/web/WebFrame.h"
 #include "third_party/WebKit/public/web/WebView.h"
@@ -26,9 +25,8 @@
 
 namespace extensions {
 
-RuntimeCustomBindings::RuntimeCustomBindings(Dispatcher* dispatcher,
-                                             ChromeV8Context* context)
-    : ChromeV8Extension(dispatcher, context) {
+RuntimeCustomBindings::RuntimeCustomBindings(ScriptContext* context)
+    : ObjectBackedNativeHandler(context) {
   RouteFunction("GetManifest",
                 base::Bind(&RuntimeCustomBindings::GetManifest,
                            base::Unretained(this)));
@@ -49,7 +47,7 @@
     const v8::FunctionCallbackInfo<v8::Value>& args) {
   // Get the current RenderView so that we can send a routed IPC message from
   // the correct source.
-  content::RenderView* renderview = GetRenderView();
+  content::RenderView* renderview = context()->GetRenderView();
   if (!renderview)
     return;
 
@@ -81,17 +79,17 @@
     const v8::FunctionCallbackInfo<v8::Value>& args) {
   // Verify that the extension has permission to use native messaging.
   Feature::Availability availability =
-      FeatureProvider::GetPermissionFeatures()->
-          GetFeature("nativeMessaging")->IsAvailableToContext(
-              GetExtensionForRenderView(),
-              context()->context_type(),
-              context()->GetURL());
+      FeatureProvider::GetPermissionFeatures()
+          ->GetFeature("nativeMessaging")
+          ->IsAvailableToContext(context()->extension(),
+                                 context()->context_type(),
+                                 context()->GetURL());
   if (!availability.is_available())
     return;
 
   // Get the current RenderView so that we can send a routed IPC message from
   // the correct source.
-  content::RenderView* renderview = GetRenderView();
+  content::RenderView* renderview = context()->GetRenderView();
   if (!renderview)
     return;
 
@@ -143,8 +141,6 @@
     view_type = VIEW_TYPE_EXTENSION_BACKGROUND_PAGE;
   } else if (view_type_string == kViewTypeInfobar) {
     view_type = VIEW_TYPE_EXTENSION_INFOBAR;
-  } else if (view_type_string == kViewTypeNotification) {
-    view_type = VIEW_TYPE_NOTIFICATION;
   } else if (view_type_string == kViewTypeTabContents) {
     view_type = VIEW_TYPE_TAB_CONTENTS;
   } else if (view_type_string == kViewTypePopup) {
diff --git a/chrome/renderer/extensions/runtime_custom_bindings.h b/chrome/renderer/extensions/runtime_custom_bindings.h
index 3200eb5..ce2ba03 100644
--- a/chrome/renderer/extensions/runtime_custom_bindings.h
+++ b/chrome/renderer/extensions/runtime_custom_bindings.h
@@ -6,18 +6,15 @@
 #define CHROME_RENDERER_EXTENSIONS_RUNTIME_CUSTOM_BINDINGS_H_
 
 #include "base/compiler_specific.h"
-#include "chrome/renderer/extensions/chrome_v8_extension.h"
+#include "extensions/renderer/object_backed_native_handler.h"
 #include "v8/include/v8.h"
 
-class ExtensionDispatcher;
-class ChromeV8Context;
-
 namespace extensions {
 
 // The native component of custom bindings for the chrome.runtime API.
-class RuntimeCustomBindings : public ChromeV8Extension {
+class RuntimeCustomBindings : public ObjectBackedNativeHandler {
  public:
-  RuntimeCustomBindings(Dispatcher* dispatcher, ChromeV8Context* context);
+  explicit RuntimeCustomBindings(ScriptContext* context);
 
   virtual ~RuntimeCustomBindings();
 
diff --git a/chrome/renderer/extensions/send_request_natives.cc b/chrome/renderer/extensions/send_request_natives.cc
deleted file mode 100644
index 5a7c46b..0000000
--- a/chrome/renderer/extensions/send_request_natives.cc
+++ /dev/null
@@ -1,77 +0,0 @@
-// Copyright (c) 2012 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 "chrome/renderer/extensions/send_request_natives.h"
-
-#include "base/json/json_reader.h"
-#include "content/public/renderer/v8_value_converter.h"
-#include "extensions/renderer/request_sender.h"
-
-using content::V8ValueConverter;
-
-namespace extensions {
-
-SendRequestNatives::SendRequestNatives(Dispatcher* dispatcher,
-                                       RequestSender* request_sender,
-                                       ChromeV8Context* context)
-    : ChromeV8Extension(dispatcher, context),
-      request_sender_(request_sender) {
-  RouteFunction("GetNextRequestId",
-                base::Bind(&SendRequestNatives::GetNextRequestId,
-                           base::Unretained(this)));
-  RouteFunction("StartRequest",
-                base::Bind(&SendRequestNatives::StartRequest,
-                           base::Unretained(this)));
-  RouteFunction("GetGlobal",
-                base::Bind(&SendRequestNatives::GetGlobal,
-                           base::Unretained(this)));
-}
-
-void SendRequestNatives::GetNextRequestId(
-    const v8::FunctionCallbackInfo<v8::Value>& args) {
-  args.GetReturnValue().Set(static_cast<int32_t>(
-      request_sender_->GetNextRequestId()));
-}
-
-// Starts an API request to the browser, with an optional callback.  The
-// callback will be dispatched to EventBindings::HandleResponse.
-void SendRequestNatives::StartRequest(
-    const v8::FunctionCallbackInfo<v8::Value>& args) {
-  CHECK_EQ(6, args.Length());
-  std::string name = *v8::String::Utf8Value(args[0]);
-  int request_id = args[2]->Int32Value();
-  bool has_callback = args[3]->BooleanValue();
-  bool for_io_thread = args[4]->BooleanValue();
-  bool preserve_null_in_objects = args[5]->BooleanValue();
-
-  scoped_ptr<V8ValueConverter> converter(V8ValueConverter::create());
-
-  // See http://crbug.com/149880. The context menus APIs relies on this, but
-  // we shouldn't really be doing it (e.g. for the sake of the storage API).
-  converter->SetFunctionAllowed(true);
-
-  if (!preserve_null_in_objects)
-    converter->SetStripNullFromObjects(true);
-
-  scoped_ptr<base::Value> value_args(
-      converter->FromV8Value(args[1], context()->v8_context()));
-  if (!value_args.get() || !value_args->IsType(base::Value::TYPE_LIST)) {
-    NOTREACHED() << "Unable to convert args passed to StartRequest";
-    return;
-  }
-
-  request_sender_->StartRequest(
-      context(), name, request_id, has_callback, for_io_thread,
-      static_cast<base::ListValue*>(value_args.get()));
-}
-
-void SendRequestNatives::GetGlobal(
-    const v8::FunctionCallbackInfo<v8::Value>& args) {
-  CHECK_EQ(1, args.Length());
-  CHECK(args[0]->IsObject());
-  args.GetReturnValue().Set(
-      v8::Handle<v8::Object>::Cast(args[0])->CreationContext()->Global());
-}
-
-}  // namespace extensions
diff --git a/chrome/renderer/extensions/send_request_natives.h b/chrome/renderer/extensions/send_request_natives.h
deleted file mode 100644
index 115e0bc..0000000
--- a/chrome/renderer/extensions/send_request_natives.h
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright (c) 2012 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 CHROME_RENDERER_EXTENSIONS_SEND_REQUEST_NATIVES_H_
-#define CHROME_RENDERER_EXTENSIONS_SEND_REQUEST_NATIVES_H_
-
-#include "chrome/renderer/extensions/chrome_v8_extension.h"
-#include "chrome/renderer/extensions/dispatcher.h"
-
-#include "v8/include/v8.h"
-
-namespace extensions {
-class ChromeV8Context;
-class RequestSender;
-
-// Native functions exposed to extensions via JS for calling API functions in
-// the browser.
-class SendRequestNatives : public ChromeV8Extension {
- public:
-  SendRequestNatives(Dispatcher* dispatcher,
-                     RequestSender* request_sender,
-                     ChromeV8Context* context);
-
- private:
-  void GetNextRequestId(const v8::FunctionCallbackInfo<v8::Value>& args);
-
-  // Starts an API request to the browser, with an optional callback.  The
-  // callback will be dispatched to EventBindings::HandleResponse.
-  void StartRequest(const v8::FunctionCallbackInfo<v8::Value>& args);
-
-  // Gets a reference to an object's global object.
-  void GetGlobal(const v8::FunctionCallbackInfo<v8::Value>& args);
-
-  RequestSender* request_sender_;
-
-  DISALLOW_COPY_AND_ASSIGN(SendRequestNatives);
-};
-
-}  // namespace extensions
-
-#endif  // CHROME_RENDERER_EXTENSIONS_SEND_REQUEST_NATIVES_H_
diff --git a/chrome/renderer/extensions/set_icon_natives.cc b/chrome/renderer/extensions/set_icon_natives.cc
deleted file mode 100644
index 73590db..0000000
--- a/chrome/renderer/extensions/set_icon_natives.cc
+++ /dev/null
@@ -1,164 +0,0 @@
-// Copyright (c) 2012 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 "chrome/renderer/extensions/set_icon_natives.h"
-
-#include <limits>
-
-#include "base/memory/scoped_ptr.h"
-#include "chrome/common/render_messages.h"
-#include "extensions/renderer/request_sender.h"
-#include "third_party/skia/include/core/SkBitmap.h"
-#include "third_party/skia/include/core/SkColor.h"
-
-namespace {
-
-const char* kImageSizeKeys[] = { "19", "38" };
-const char kInvalidDimensions[] = "ImageData has invalid dimensions.";
-const char kInvalidData[] = "ImageData data length does not match dimensions.";
-const char kNoMemory[] = "Chrome was unable to initialize icon.";
-
-}  // namespace
-
-namespace extensions {
-
-SetIconNatives::SetIconNatives(Dispatcher* dispatcher,
-                               RequestSender* request_sender,
-                               ChromeV8Context* context)
-    : ChromeV8Extension(dispatcher, context),
-      request_sender_(request_sender) {
-  RouteFunction(
-      "SetIconCommon",
-      base::Bind(&SetIconNatives::SetIconCommon, base::Unretained(this)));
-}
-
-bool SetIconNatives::ConvertImageDataToBitmapValue(
-    const v8::Local<v8::Object> image_data,
-    base::Value** bitmap_value) {
-  v8::Isolate* isolate = context()->v8_context()->GetIsolate();
-  v8::Local<v8::Object> data =
-      image_data->Get(v8::String::NewFromUtf8(isolate, "data"))->ToObject();
-  int width =
-      image_data->Get(v8::String::NewFromUtf8(isolate, "width"))->Int32Value();
-  int height =
-      image_data->Get(v8::String::NewFromUtf8(isolate, "height"))->Int32Value();
-
-  if (width <= 0 || height <= 0) {
-    isolate->ThrowException(v8::Exception::Error(
-        v8::String::NewFromUtf8(isolate, kInvalidDimensions)));
-    return false;
-  }
-
-  // We need to be able to safely check |data_length| == 4 * width * height
-  // without overflowing below.
-  int max_width = (std::numeric_limits<int>::max() / 4) / height;
-  if (width > max_width) {
-    isolate->ThrowException(v8::Exception::Error(
-        v8::String::NewFromUtf8(isolate, kInvalidDimensions)));
-    return false;
-  }
-
-  int data_length =
-      data->Get(v8::String::NewFromUtf8(isolate, "length"))->Int32Value();
-  if (data_length != 4 * width * height) {
-    isolate->ThrowException(
-        v8::Exception::Error(v8::String::NewFromUtf8(isolate, kInvalidData)));
-    return false;
-  }
-
-  SkBitmap bitmap;
-  bitmap.setConfig(SkBitmap::kARGB_8888_Config, width, height);
-  if (!bitmap.allocPixels()) {
-    isolate->ThrowException(
-        v8::Exception::Error(v8::String::NewFromUtf8(isolate, kNoMemory)));
-    return false;
-  }
-  bitmap.eraseARGB(0, 0, 0, 0);
-
-  uint32_t* pixels = bitmap.getAddr32(0, 0);
-  for (int t = 0; t < width*height; t++) {
-    // |data| is RGBA, pixels is ARGB.
-    pixels[t] = SkPreMultiplyColor(
-        ((data->Get(v8::Integer::New(isolate, 4*t + 3))->Int32Value() & 0xFF)
-         << 24) |
-        ((data->Get(v8::Integer::New(isolate, 4*t + 0))->Int32Value() & 0xFF)
-         << 16) |
-        ((data->Get(v8::Integer::New(isolate, 4*t + 1))->Int32Value() & 0xFF)
-         << 8) |
-        ((data->Get(v8::Integer::New(isolate, 4*t + 2))->Int32Value() & 0xFF)
-         << 0));
-  }
-
-  // Construct the Value object.
-  IPC::Message bitmap_pickle;
-  IPC::WriteParam(&bitmap_pickle, bitmap);
-  *bitmap_value = base::BinaryValue::CreateWithCopiedBuffer(
-      static_cast<const char*>(bitmap_pickle.data()), bitmap_pickle.size());
-
-  return true;
-}
-
-bool SetIconNatives::ConvertImageDataSetToBitmapValueSet(
-    const v8::FunctionCallbackInfo<v8::Value>& args,
-    base::DictionaryValue* bitmap_set_value) {
-  v8::Local<v8::Object> extension_args = args[1]->ToObject();
-  v8::Local<v8::Object> details = extension_args
-      ->Get(v8::String::NewFromUtf8(args.GetIsolate(), "0"))->ToObject();
-  v8::Local<v8::Object> image_data_set =
-      details->Get(v8::String::NewFromUtf8(args.GetIsolate(), "imageData"))
-          ->ToObject();
-
-  DCHECK(bitmap_set_value);
-  for (size_t i = 0; i < arraysize(kImageSizeKeys); i++) {
-    if (!image_data_set->Has(
-            v8::String::NewFromUtf8(args.GetIsolate(), kImageSizeKeys[i])))
-      continue;
-    v8::Local<v8::Object> image_data = image_data_set
-        ->Get(v8::String::NewFromUtf8(args.GetIsolate(), kImageSizeKeys[i]))
-        ->ToObject();
-    base::Value* image_data_bitmap = NULL;
-    if (!ConvertImageDataToBitmapValue(image_data, &image_data_bitmap))
-      return false;
-    bitmap_set_value->Set(kImageSizeKeys[i], image_data_bitmap);
-  }
-  return true;
-}
-
-void SetIconNatives::SetIconCommon(
-    const v8::FunctionCallbackInfo<v8::Value>& args) {
-  scoped_ptr<base::DictionaryValue> bitmap_set_value(
-      new base::DictionaryValue());
-  if (!ConvertImageDataSetToBitmapValueSet(args, bitmap_set_value.get()))
-    return;
-
-  v8::Local<v8::Object> extension_args = args[1]->ToObject();
-  v8::Local<v8::Object> details = extension_args
-      ->Get(v8::String::NewFromUtf8(args.GetIsolate(), "0"))->ToObject();
-
-  base::DictionaryValue* dict = new base::DictionaryValue();
-  dict->Set("imageData", bitmap_set_value.release());
-
-  if (details->Has(v8::String::NewFromUtf8(args.GetIsolate(), "tabId"))) {
-    dict->SetInteger("tabId",
-                     details->Get(v8::String::NewFromUtf8(
-                         args.GetIsolate(), "tabId"))->Int32Value());
-  }
-
-  base::ListValue list_value;
-  list_value.Append(dict);
-
-  std::string name = *v8::String::Utf8Value(args[0]);
-  int request_id = args[2]->Int32Value();
-  bool has_callback = args[3]->BooleanValue();
-  bool for_io_thread = args[4]->BooleanValue();
-
-  request_sender_->StartRequest(context(),
-                                name,
-                                request_id,
-                                has_callback,
-                                for_io_thread,
-                                &list_value);
-}
-
-}  // namespace extensions
diff --git a/chrome/renderer/extensions/set_icon_natives.h b/chrome/renderer/extensions/set_icon_natives.h
deleted file mode 100644
index b325206..0000000
--- a/chrome/renderer/extensions/set_icon_natives.h
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright (c) 2012 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 CHROME_RENDERER_EXTENSIONS_SET_ICON_NATIVES_H_
-#define CHROME_RENDERER_EXTENSIONS_SET_ICON_NATIVES_H_
-
-#include "chrome/renderer/extensions/chrome_v8_extension.h"
-#include "chrome/renderer/extensions/dispatcher.h"
-
-#include "v8/include/v8.h"
-
-namespace base {
-class Value;
-}
-
-namespace extensions {
-class RequestSender;
-
-// Functions exposed to extension JS to implement the setIcon extension API.
-class SetIconNatives : public ChromeV8Extension {
- public:
-  SetIconNatives(Dispatcher* dispatcher,
-                 RequestSender* request_sender,
-                 ChromeV8Context* context);
-
- private:
-  bool ConvertImageDataToBitmapValue(const v8::Local<v8::Object> image_data,
-                                     base::Value** bitmap_value);
-  bool ConvertImageDataSetToBitmapValueSet(
-      const v8::FunctionCallbackInfo<v8::Value>& args,
-      base::DictionaryValue* bitmap_value);
-  void SetIconCommon(const v8::FunctionCallbackInfo<v8::Value>& args);
-
-  RequestSender* request_sender_;
-
-  DISALLOW_COPY_AND_ASSIGN(SetIconNatives);
-};
-
-}  // namespace extensions
-
-#endif  // CHROME_RENDERER_EXTENSIONS_SET_ICON_NATIVES_H_
diff --git a/chrome/renderer/extensions/sync_file_system_custom_bindings.cc b/chrome/renderer/extensions/sync_file_system_custom_bindings.cc
index b5e6480..f0268fe 100644
--- a/chrome/renderer/extensions/sync_file_system_custom_bindings.cc
+++ b/chrome/renderer/extensions/sync_file_system_custom_bindings.cc
@@ -6,8 +6,7 @@
 
 #include <string>
 
-#include "chrome/common/extensions/extension_constants.h"
-#include "chrome/renderer/extensions/chrome_v8_context.h"
+#include "extensions/renderer/script_context.h"
 #include "third_party/WebKit/public/web/WebDOMFileSystem.h"
 #include "third_party/WebKit/public/web/WebLocalFrame.h"
 #include "v8/include/v8.h"
@@ -16,8 +15,8 @@
 namespace extensions {
 
 SyncFileSystemCustomBindings::SyncFileSystemCustomBindings(
-    Dispatcher* dispatcher, ChromeV8Context* context)
-    : ChromeV8Extension(dispatcher, context) {
+    ScriptContext* context)
+    : ObjectBackedNativeHandler(context) {
   RouteFunction(
       "GetSyncFileSystemObject",
       base::Bind(&SyncFileSystemCustomBindings::GetSyncFileSystemObject,
diff --git a/chrome/renderer/extensions/sync_file_system_custom_bindings.h b/chrome/renderer/extensions/sync_file_system_custom_bindings.h
index 1372dc0..fc38357 100644
--- a/chrome/renderer/extensions/sync_file_system_custom_bindings.h
+++ b/chrome/renderer/extensions/sync_file_system_custom_bindings.h
@@ -5,16 +5,15 @@
 #ifndef CHROME_RENDERER_EXTENSIONS_SYNC_FILE_SYSTEM_CUSTOM_BINDINGS_H_
 #define CHROME_RENDERER_EXTENSIONS_SYNC_FILE_SYSTEM_CUSTOM_BINDINGS_H_
 
-#include "chrome/renderer/extensions/chrome_v8_extension.h"
+#include "extensions/renderer/object_backed_native_handler.h"
 #include "v8/include/v8.h"
 
 namespace extensions {
 
 // Implements custom bindings for the sync file system API.
-class SyncFileSystemCustomBindings : public ChromeV8Extension {
+class SyncFileSystemCustomBindings : public ObjectBackedNativeHandler {
  public:
-  SyncFileSystemCustomBindings(Dispatcher* dispatcher,
-                               ChromeV8Context* context);
+  explicit SyncFileSystemCustomBindings(ScriptContext* context);
 
  private:
   // FileSystemObject GetSyncFileSystemObject(string name, string root_url):
diff --git a/chrome/renderer/extensions/tabs_custom_bindings.cc b/chrome/renderer/extensions/tabs_custom_bindings.cc
index 471bae6..ac971ac 100644
--- a/chrome/renderer/extensions/tabs_custom_bindings.cc
+++ b/chrome/renderer/extensions/tabs_custom_bindings.cc
@@ -9,14 +9,13 @@
 #include "base/bind.h"
 #include "content/public/renderer/render_view.h"
 #include "extensions/common/extension_messages.h"
-#include "grit/renderer_resources.h"
+#include "extensions/renderer/script_context.h"
 #include "v8/include/v8.h"
 
 namespace extensions {
 
-TabsCustomBindings::TabsCustomBindings(Dispatcher* dispatcher,
-                                       ChromeV8Context* context)
-    : ChromeV8Extension(dispatcher, context) {
+TabsCustomBindings::TabsCustomBindings(ScriptContext* context)
+    : ObjectBackedNativeHandler(context) {
   RouteFunction("OpenChannelToTab",
       base::Bind(&TabsCustomBindings::OpenChannelToTab,
                  base::Unretained(this)));
@@ -26,7 +25,7 @@
     const v8::FunctionCallbackInfo<v8::Value>& args) {
   // Get the current RenderView so that we can send a routed IPC message from
   // the correct source.
-  content::RenderView* renderview = GetRenderView();
+  content::RenderView* renderview = context()->GetRenderView();
   if (!renderview)
     return;
 
diff --git a/chrome/renderer/extensions/tabs_custom_bindings.h b/chrome/renderer/extensions/tabs_custom_bindings.h
index e7f4ca3..a5b4389 100644
--- a/chrome/renderer/extensions/tabs_custom_bindings.h
+++ b/chrome/renderer/extensions/tabs_custom_bindings.h
@@ -5,14 +5,14 @@
 #ifndef CHROME_RENDERER_EXTENSIONS_TABS_CUSTOM_BINDINGS_H_
 #define CHROME_RENDERER_EXTENSIONS_TABS_CUSTOM_BINDINGS_H_
 
-#include "chrome/renderer/extensions/chrome_v8_extension.h"
+#include "extensions/renderer/object_backed_native_handler.h"
 
 namespace extensions {
 
 // Implements custom bindings for the tabs API.
-class TabsCustomBindings : public ChromeV8Extension {
+class TabsCustomBindings : public ObjectBackedNativeHandler {
  public:
-  TabsCustomBindings(Dispatcher* dispatcher, ChromeV8Context* context);
+  explicit TabsCustomBindings(ScriptContext* context);
 
  private:
   // Creates a new messaging channel to the tab with the given ID.
diff --git a/chrome/renderer/extensions/user_script_scheduler.cc b/chrome/renderer/extensions/user_script_scheduler.cc
index 463047c..cb66ee0 100644
--- a/chrome/renderer/extensions/user_script_scheduler.cc
+++ b/chrome/renderer/extensions/user_script_scheduler.cc
@@ -11,7 +11,6 @@
 #include "chrome/renderer/extensions/chrome_v8_context.h"
 #include "chrome/renderer/extensions/dispatcher.h"
 #include "chrome/renderer/extensions/dom_activity_logger.h"
-#include "chrome/renderer/extensions/extension_groups.h"
 #include "chrome/renderer/extensions/extension_helper.h"
 #include "chrome/renderer/extensions/user_script_slave.h"
 #include "content/public/renderer/render_view.h"
@@ -20,6 +19,7 @@
 #include "extensions/common/extension_messages.h"
 #include "extensions/common/manifest_constants.h"
 #include "extensions/common/permissions/permissions_data.h"
+#include "extensions/renderer/extension_groups.h"
 #include "extensions/renderer/script_context.h"
 #include "third_party/WebKit/public/platform/WebString.h"
 #include "third_party/WebKit/public/platform/WebVector.h"
diff --git a/chrome/renderer/extensions/user_script_slave.cc b/chrome/renderer/extensions/user_script_slave.cc
index 249b439..cfd11c8 100644
--- a/chrome/renderer/extensions/user_script_slave.cc
+++ b/chrome/renderer/extensions/user_script_slave.cc
@@ -14,9 +14,7 @@
 #include "base/strings/stringprintf.h"
 #include "base/timer/elapsed_timer.h"
 #include "chrome/common/url_constants.h"
-#include "chrome/renderer/chrome_render_process_observer.h"
 #include "chrome/renderer/extensions/dom_activity_logger.h"
-#include "chrome/renderer/extensions/extension_groups.h"
 #include "chrome/renderer/isolated_world_ids.h"
 #include "content/public/renderer/render_thread.h"
 #include "content/public/renderer/render_view.h"
@@ -25,6 +23,8 @@
 #include "extensions/common/extension_set.h"
 #include "extensions/common/manifest_handlers/csp_info.h"
 #include "extensions/common/permissions/permissions_data.h"
+#include "extensions/renderer/extension_groups.h"
+#include "extensions/renderer/extensions_renderer_client.h"
 #include "extensions/renderer/script_context.h"
 #include "grit/renderer_resources.h"
 #include "third_party/WebKit/public/platform/WebURLRequest.h"
@@ -54,7 +54,8 @@
 
 int UserScriptSlave::GetIsolatedWorldIdForExtension(const Extension* extension,
                                                     WebFrame* frame) {
-  static int g_next_isolated_world_id = chrome::ISOLATED_WORLD_ID_EXTENSIONS;
+  static int g_next_isolated_world_id =
+      ExtensionsRendererClient::Get()->GetLowestIsolatedWorldId();
 
   IsolatedWorldMap::iterator iter = isolated_world_ids_.find(extension->id());
   if (iter != isolated_world_ids_.end()) {
@@ -119,7 +120,7 @@
   scripts_.clear();
 
   bool only_inject_incognito =
-      ChromeRenderProcessObserver::is_incognito_process();
+      ExtensionsRendererClient::Get()->IsIncognitoProcess();
 
   // Create the shared memory object (read only).
   shared_memory_.reset(new base::SharedMemory(shared_memory, true));
diff --git a/chrome/renderer/extensions/utils_native_handler.cc b/chrome/renderer/extensions/utils_native_handler.cc
deleted file mode 100644
index 642a89d..0000000
--- a/chrome/renderer/extensions/utils_native_handler.cc
+++ /dev/null
@@ -1,75 +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.
-
-#include "chrome/renderer/extensions/utils_native_handler.h"
-
-#include "base/strings/stringprintf.h"
-#include "chrome/renderer/extensions/chrome_v8_context.h"
-#include "third_party/WebKit/public/web/WebScopedMicrotaskSuppression.h"
-
-namespace extensions {
-
-UtilsNativeHandler::UtilsNativeHandler(ChromeV8Context* context)
-    : ObjectBackedNativeHandler(context) {
-  RouteFunction("createClassWrapper",
-      base::Bind(&UtilsNativeHandler::CreateClassWrapper,
-                 base::Unretained(this)));
-}
-
-UtilsNativeHandler::~UtilsNativeHandler() {}
-
-void UtilsNativeHandler::CreateClassWrapper(
-    const v8::FunctionCallbackInfo<v8::Value>& args) {
-  CHECK_EQ(2, args.Length());
-  CHECK(args[0]->IsString());
-  std::string name = *v8::String::Utf8Value(args[0]);
-  CHECK(args[1]->IsObject());
-  v8::Local<v8::Object> obj = args[1].As<v8::Object>();
-
-  v8::HandleScope handle_scope(GetIsolate());
-  // TODO(fsamuel): Consider moving the source wrapping to ModuleSystem.
-  v8::Handle<v8::String> source = v8::String::NewFromUtf8(
-      GetIsolate(),
-      base::StringPrintf(
-          "(function($Object, $Function, privates, cls) {"
-          "'use strict';\n"
-          "  return function %s() {\n"
-          "  var privateObj = $Object.create(cls.prototype);\n"
-          "  $Function.apply(cls, privateObj, arguments);\n"
-          "  privateObj.wrapper = this;\n"
-          "  privates(this).impl = privateObj;\n"
-          "}})", name.c_str()).c_str());
-  v8::Handle<v8::Value> func_as_value =
-      context()->module_system()->RunString(source,
-          v8::String::NewFromUtf8(GetIsolate(), name.c_str()));
-  if (func_as_value.IsEmpty() || func_as_value->IsUndefined()) {
-    args.GetReturnValue().SetUndefined();
-    return;
-  }
-
-  // TODO(fsamuel): Move privates from ModuleSystem to a shared location.
-  v8::Handle<v8::Object> natives(context()->module_system()->NewInstance());
-  CHECK(!natives.IsEmpty());  // this can happen if v8 has issues
-  v8::Handle<v8::Function> func = func_as_value.As<v8::Function>();
-  v8::Handle<v8::Value> func_args[] = {
-      context()->safe_builtins()->GetObjekt(),
-      context()->safe_builtins()->GetFunction(),
-      natives->Get(v8::String::NewFromUtf8(
-          GetIsolate(), "privates", v8::String::kInternalizedString)),
-      obj
-  };
-  v8::Local<v8::Value> result;
-  {
-    v8::TryCatch try_catch;
-    try_catch.SetCaptureMessage(true);
-    result = context()->CallFunction(func, arraysize(func_args), func_args);
-    if (try_catch.HasCaught()) {
-      args.GetReturnValue().SetUndefined();
-      return;
-    }
-  }
-  args.GetReturnValue().Set(result);
-}
-
-}  // namespace extensions
diff --git a/chrome/renderer/extensions/utils_native_handler.h b/chrome/renderer/extensions/utils_native_handler.h
deleted file mode 100644
index b4e646b..0000000
--- a/chrome/renderer/extensions/utils_native_handler.h
+++ /dev/null
@@ -1,29 +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.
-
-#ifndef CHROME_RENDERER_EXTENSIONS_UTILS_NATIVE_HANDLER_H_
-#define CHROME_RENDERER_EXTENSIONS_UTILS_NATIVE_HANDLER_H_
-
-#include "extensions/renderer/object_backed_native_handler.h"
-
-namespace extensions {
-class ChromeV8Context;
-
-class UtilsNativeHandler : public ObjectBackedNativeHandler {
- public:
-  explicit UtilsNativeHandler(ChromeV8Context* context);
-  virtual ~UtilsNativeHandler();
-
- private:
-  // |args| consists of two arguments: a public class name, and a reference
-  // to the implementation class. CreateClassWrapper returns a new class
-  // that wraps the implementation, while hiding its members.
-  void CreateClassWrapper(const v8::FunctionCallbackInfo<v8::Value>& args);
-
-  DISALLOW_COPY_AND_ASSIGN(UtilsNativeHandler);
-};
-
-}  // namespace extensions
-
-#endif  // CHROME_RENDERER_EXTENSIONS_UTILS_NATIVE_HANDLER_H_
diff --git a/chrome/renderer/extensions/v8_schema_registry.cc b/chrome/renderer/extensions/v8_schema_registry.cc
deleted file mode 100644
index 7c1b910..0000000
--- a/chrome/renderer/extensions/v8_schema_registry.cc
+++ /dev/null
@@ -1,114 +0,0 @@
-// Copyright (c) 2012 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 "chrome/renderer/extensions/v8_schema_registry.h"
-
-#include "base/logging.h"
-#include "base/values.h"
-#include "chrome/renderer/extensions/chrome_v8_context.h"
-#include "content/public/renderer/v8_value_converter.h"
-#include "extensions/common/extension_api.h"
-#include "extensions/renderer/object_backed_native_handler.h"
-
-using content::V8ValueConverter;
-
-namespace extensions {
-
-namespace {
-
-class SchemaRegistryNativeHandler : public ObjectBackedNativeHandler {
- public:
-  SchemaRegistryNativeHandler(V8SchemaRegistry* registry,
-                              scoped_ptr<ChromeV8Context> context)
-      : ObjectBackedNativeHandler(context.get()),
-        context_(context.Pass()),
-        registry_(registry) {
-    RouteFunction("GetSchema",
-        base::Bind(&SchemaRegistryNativeHandler::GetSchema,
-                   base::Unretained(this)));
-  }
-
- private:
-  void GetSchema(const v8::FunctionCallbackInfo<v8::Value>& args) {
-    args.GetReturnValue().Set(
-      registry_->GetSchema(*v8::String::Utf8Value(args[0])));
-  }
-
-  scoped_ptr<ChromeV8Context> context_;
-  V8SchemaRegistry* registry_;
-};
-
-}  // namespace
-
-V8SchemaRegistry::V8SchemaRegistry() {}
-
-V8SchemaRegistry::~V8SchemaRegistry() {}
-
-scoped_ptr<NativeHandler> V8SchemaRegistry::AsNativeHandler() {
-  scoped_ptr<ChromeV8Context> context(new ChromeV8Context(
-      GetOrCreateContext(v8::Isolate::GetCurrent()),
-      NULL,  // no frame
-      NULL,  // no extension
-      Feature::UNSPECIFIED_CONTEXT));
-  return scoped_ptr<NativeHandler>(
-      new SchemaRegistryNativeHandler(this, context.Pass()));
-}
-
-v8::Handle<v8::Array> V8SchemaRegistry::GetSchemas(
-    const std::vector<std::string>& apis) {
-  v8::Isolate* isolate = v8::Isolate::GetCurrent();
-  v8::EscapableHandleScope handle_scope(isolate);
-  v8::Context::Scope context_scope(GetOrCreateContext(isolate));
-
-  v8::Local<v8::Array> v8_apis(v8::Array::New(isolate, apis.size()));
-  size_t api_index = 0;
-  for (std::vector<std::string>::const_iterator i = apis.begin();
-       i != apis.end(); ++i) {
-    v8_apis->Set(api_index++, GetSchema(*i));
-  }
-  return handle_scope.Escape(v8_apis);
-}
-
-v8::Handle<v8::Object> V8SchemaRegistry::GetSchema(const std::string& api) {
-  if (schema_cache_ != NULL) {
-    v8::Local<v8::Object> cached_schema = schema_cache_->Get(api);
-    if (!cached_schema.IsEmpty()) {
-      return cached_schema;
-    }
-  }
-
-  // Slow path: Need to build schema first.
-
-  v8::Isolate* isolate = v8::Isolate::GetCurrent();
-  v8::EscapableHandleScope handle_scope(isolate);
-  v8::Handle<v8::Context> context = GetOrCreateContext(isolate);
-  v8::Context::Scope context_scope(context);
-
-  const base::DictionaryValue* schema =
-      ExtensionAPI::GetSharedInstance()->GetSchema(api);
-  CHECK(schema) << api;
-  scoped_ptr<V8ValueConverter> v8_value_converter(V8ValueConverter::create());
-  v8::Handle<v8::Value> value = v8_value_converter->ToV8Value(schema, context);
-  CHECK(!value.IsEmpty());
-
-  v8::Local<v8::Object> v8_schema(v8::Handle<v8::Object>::Cast(value));
-  schema_cache_->Set(api, v8_schema);
-
-  return handle_scope.Escape(v8_schema);
-}
-
-v8::Handle<v8::Context> V8SchemaRegistry::GetOrCreateContext(
-    v8::Isolate* isolate) {
-  // It's ok to create local handles in this function, since this is only called
-  // when we have a HandleScope.
-  if (context_.IsEmpty()) {
-    v8::Handle<v8::Context> context = v8::Context::New(isolate);
-    context_.reset(context);
-    schema_cache_.reset(new SchemaCache(isolate));
-    return context;
-  }
-  return context_.NewHandle(isolate);
-}
-
-}  // namespace extensions
diff --git a/chrome/renderer/extensions/v8_schema_registry.h b/chrome/renderer/extensions/v8_schema_registry.h
deleted file mode 100644
index 302a3b2..0000000
--- a/chrome/renderer/extensions/v8_schema_registry.h
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright (c) 2012 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 CHROME_RENDERER_EXTENSIONS_V8_SCHEMA_REGISTRY_H_
-#define CHROME_RENDERER_EXTENSIONS_V8_SCHEMA_REGISTRY_H_
-
-#include <map>
-#include <string>
-#include <vector>
-
-#include "base/basictypes.h"
-#include "base/memory/scoped_ptr.h"
-#include "extensions/renderer/scoped_persistent.h"
-#include "v8/include/v8-util.h"
-#include "v8/include/v8.h"
-
-namespace extensions {
-class NativeHandler;
-
-// A registry for the v8::Value representations of extension API schemas.
-// In a way, the v8 counterpart to ExtensionAPI.
-class V8SchemaRegistry {
- public:
-  V8SchemaRegistry();
-  ~V8SchemaRegistry();
-
-  // Creates a NativeHandler wrapper |this|. Supports GetSchema.
-  scoped_ptr<NativeHandler> AsNativeHandler();
-
-  // Returns a v8::Array with all the schemas for the APIs in |apis|.
-  v8::Handle<v8::Array> GetSchemas(const std::vector<std::string>& apis);
-
-  // Returns a v8::Object for the schema for |api|, possibly from the cache.
-  v8::Handle<v8::Object> GetSchema(const std::string& api);
-
- private:
-  // Gets the separate context that backs the registry, creating a new one if
-  // if necessary. Will also initialize schema_cache_.
-  v8::Handle<v8::Context> GetOrCreateContext(v8::Isolate* isolate);
-
-  // Cache of schemas. Created lazily by GetOrCreateContext.
-  typedef v8::StdPersistentValueMap<std::string, v8::Object> SchemaCache;
-  scoped_ptr<SchemaCache> schema_cache_;
-
-  // Single per-instance v8::Context to create v8::Values.
-  // Created lazily via GetOrCreateContext.
-  ScopedPersistent<v8::Context> context_;
-
-  DISALLOW_COPY_AND_ASSIGN(V8SchemaRegistry);
-};
-
-}  // namespace extensions
-
-#endif  // CHROME_RENDERER_EXTENSIONS_V8_SCHEMA_REGISTRY_H_
diff --git a/chrome/renderer/extensions/webstore_bindings.cc b/chrome/renderer/extensions/webstore_bindings.cc
index 08e9d9a..28884d1 100644
--- a/chrome/renderer/extensions/webstore_bindings.cc
+++ b/chrome/renderer/extensions/webstore_bindings.cc
@@ -8,10 +8,9 @@
 #include "chrome/common/extensions/api/webstore/webstore_api_constants.h"
 #include "chrome/common/extensions/chrome_extension_messages.h"
 #include "chrome/common/extensions/extension_constants.h"
-#include "chrome/renderer/extensions/chrome_v8_context.h"
 #include "content/public/renderer/render_view.h"
 #include "extensions/common/extension.h"
-#include "grit/renderer_resources.h"
+#include "extensions/renderer/script_context.h"
 #include "third_party/WebKit/public/web/WebDocument.h"
 #include "third_party/WebKit/public/web/WebElement.h"
 #include "third_party/WebKit/public/web/WebNode.h"
@@ -49,17 +48,15 @@
 
 } // anonymous namespace
 
-WebstoreBindings::WebstoreBindings(Dispatcher* dispatcher,
-                                   ChromeV8Context* context)
-    : ChromeV8Extension(dispatcher, context),
-      ChromeV8ExtensionHandler(context) {
+WebstoreBindings::WebstoreBindings(ScriptContext* context)
+    : ObjectBackedNativeHandler(context), ChromeV8ExtensionHandler(context) {
   RouteFunction("Install",
                 base::Bind(&WebstoreBindings::Install, base::Unretained(this)));
 }
 
 void WebstoreBindings::Install(
     const v8::FunctionCallbackInfo<v8::Value>& args) {
-  content::RenderView* render_view = GetRenderView();
+  content::RenderView* render_view = context()->GetRenderView();
   if (!render_view)
     return;
 
diff --git a/chrome/renderer/extensions/webstore_bindings.h b/chrome/renderer/extensions/webstore_bindings.h
index 5df521a..6eda8c0 100644
--- a/chrome/renderer/extensions/webstore_bindings.h
+++ b/chrome/renderer/extensions/webstore_bindings.h
@@ -6,20 +6,19 @@
 #define CHROME_RENDERER_EXTENSIONS_WEBSTORE_BINDINGS_H_
 
 #include "base/compiler_specific.h"
-#include "chrome/renderer/extensions/chrome_v8_extension.h"
+#include "chrome/renderer/extensions/chrome_v8_extension_handler.h"
+#include "extensions/renderer/object_backed_native_handler.h"
 #include "third_party/WebKit/public/web/WebFrame.h"
 
 namespace extensions {
-class ChromeV8Context;
 
 // A V8 extension that creates an object at window.chrome.webstore. This object
 // allows JavaScript to initiate inline installs of apps that are listed in the
 // Chrome Web Store (CWS).
-class WebstoreBindings : public ChromeV8Extension,
+class WebstoreBindings : public ObjectBackedNativeHandler,
                          public ChromeV8ExtensionHandler {
  public:
-  explicit WebstoreBindings(Dispatcher* dispatcher,
-                            ChromeV8Context* context);
+  explicit WebstoreBindings(ScriptContext* context);
 
   // IPC::Listener
   virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
diff --git a/chrome/renderer/media/chrome_key_systems.cc b/chrome/renderer/media/chrome_key_systems.cc
index 276c63c..c5f4077 100644
--- a/chrome/renderer/media/chrome_key_systems.cc
+++ b/chrome/renderer/media/chrome_key_systems.cc
@@ -5,6 +5,7 @@
 #include "chrome/renderer/media/chrome_key_systems.h"
 
 #include <string>
+#include <vector>
 
 #include "base/logging.h"
 #include "base/strings/string16.h"
@@ -31,16 +32,15 @@
 const char kAudioWebM[] = "audio/webm";
 const char kVideoWebM[] = "video/webm";
 const char kVorbis[] = "vorbis";
-const char kVorbisVP8[] = "vorbis,vp8,vp8.0";
+const char kVP8[] = "vp8";
+const char kVP80[] = "vp8.0";
 
 #if defined(USE_PROPRIETARY_CODECS)
 const char kAudioMp4[] = "audio/mp4";
 const char kVideoMp4[] = "video/mp4";
 const char kMp4a[] = "mp4a";
-#if defined(WIDEVINE_CDM_AVAILABLE)
-const char kAvc1Avc3[] = "avc1,avc3";
-#endif  // WIDEVINE_CDM_AVAILABLE
-const char kMp4aAvc1Avc3[] = "mp4a,avc1,avc3";
+const char kAvc1[] = "avc1";
+const char kAvc3[] = "avc3";
 #endif  // defined(USE_PROPRIETARY_CODECS)
 
 #if defined(ENABLE_PEPPER_CDMS)
@@ -85,12 +85,17 @@
 
   KeySystemInfo info(kExternalClearKeyKeySystem);
 
-  info.supported_types.push_back(std::make_pair(kAudioWebM, kVorbis));
-  info.supported_types.push_back(std::make_pair(kVideoWebM, kVorbisVP8));
+  info.supported_types[kAudioWebM].insert(kVorbis);
+  info.supported_types[kVideoWebM] = info.supported_types[kAudioWebM];
+  info.supported_types[kVideoWebM].insert(kVP8);
+  info.supported_types[kVideoWebM].insert(kVP80);
 #if defined(USE_PROPRIETARY_CODECS)
-  info.supported_types.push_back(std::make_pair(kAudioMp4, kMp4a));
-  info.supported_types.push_back(std::make_pair(kVideoMp4, kMp4aAvc1Avc3));
+  info.supported_types[kAudioMp4].insert(kMp4a);
+  info.supported_types[kVideoMp4] = info.supported_types[kAudioMp4];
+  info.supported_types[kVideoMp4].insert(kAvc1);
+  info.supported_types[kVideoMp4].insert(kAvc3);
 #endif  // defined(USE_PROPRIETARY_CODECS)
+
   info.pepper_type = kExternalClearKeyPepperType;
 
   concrete_key_systems->push_back(info);
@@ -131,12 +136,18 @@
 typedef uint32 SupportedCodecs;
 enum SupportedCodecMasks {
   NO_CODECS = 0,
-  WEBM_VP8_AND_VORBIS = 1 << 0,
+  WEBM_VORBIS = 1 << 0,
+  WEBM_VP8 = 1 << 1,
+  WEBM_CODECS = (WEBM_VORBIS | WEBM_VP8),
 #if defined(USE_PROPRIETARY_CODECS)
-  MP4_AAC = 1 << 1,
-  MP4_AVC1 = 1 << 2,
+  MP4_AAC = 1 << 2,
+  MP4_AVC1 = 1 << 3,
   MP4_CODECS = (MP4_AAC | MP4_AVC1),
+  ALL_CODECS = (WEBM_CODECS | MP4_CODECS),
+#else
+  ALL_CODECS = WEBM_CODECS,
 #endif  // defined(USE_PROPRIETARY_CODECS)
+  INVALID_CODECS = ~ALL_CODECS
 };
 
 #if defined(OS_ANDROID)
@@ -144,9 +155,15 @@
   COMPILE_ASSERT(static_cast<int>(name) == \
                  static_cast<int>(android::name), \
                  mismatching_enums)
-COMPILE_ASSERT_MATCHING_ENUM(WEBM_VP8_AND_VORBIS);
+COMPILE_ASSERT_MATCHING_ENUM(NO_CODECS);
+COMPILE_ASSERT_MATCHING_ENUM(WEBM_VORBIS);
+COMPILE_ASSERT_MATCHING_ENUM(WEBM_VP8);
+COMPILE_ASSERT_MATCHING_ENUM(WEBM_CODECS);
 COMPILE_ASSERT_MATCHING_ENUM(MP4_AAC);
 COMPILE_ASSERT_MATCHING_ENUM(MP4_AVC1);
+COMPILE_ASSERT_MATCHING_ENUM(MP4_CODECS);
+COMPILE_ASSERT_MATCHING_ENUM(ALL_CODECS);
+COMPILE_ASSERT_MATCHING_ENUM(INVALID_CODECS);
 #undef COMPILE_ASSERT_MATCHING_ENUM
 #else
 static bool IsWidevineHrSupported() {
@@ -167,7 +184,6 @@
     WidevineCdmType widevine_cdm_type,
     SupportedCodecs supported_codecs,
     std::vector<KeySystemInfo>* concrete_key_systems) {
-
   KeySystemInfo info(kWidevineKeySystem);
 
   switch (widevine_cdm_type) {
@@ -187,23 +203,30 @@
       NOTREACHED();
   }
 
-  if (supported_codecs & WEBM_VP8_AND_VORBIS) {
-    info.supported_types.push_back(std::make_pair(kAudioWebM, kVorbis));
-    info.supported_types.push_back(std::make_pair(kVideoWebM, kVorbisVP8));
+  // TODO(xhwang): A container or an initDataType may be supported even though
+  // there are no codecs supported in that container. Fix this when we support
+  // initDataType.
+  if (supported_codecs & WEBM_CODECS) {
+    if (supported_codecs & WEBM_VORBIS)
+      info.supported_types[kAudioWebM].insert(kVorbis);
+
+    if (supported_codecs & WEBM_VP8) {
+      info.supported_types[kVideoWebM] = info.supported_types[kAudioWebM];
+      info.supported_types[kVideoWebM].insert(kVP8);
+      info.supported_types[kVideoWebM].insert(kVP80);
+    }
   }
 
 #if defined(USE_PROPRIETARY_CODECS)
   if (supported_codecs & MP4_CODECS) {
-    // MP4 container is supported for audio and video if any codec is supported.
-    bool is_aac_supported = (supported_codecs & MP4_AAC) != NO_CODECS;
-    bool is_avc1_supported = (supported_codecs & MP4_AVC1) != NO_CODECS;
-    const char* video_codecs = is_avc1_supported ?
-                               (is_aac_supported ? kMp4aAvc1Avc3 : kAvc1Avc3) :
-                               "";
-    const char* audio_codecs = is_aac_supported ? kMp4a : "";
+    if (supported_codecs & MP4_AAC)
+      info.supported_types[kAudioMp4].insert(kMp4a);
 
-    info.supported_types.push_back(std::make_pair(kAudioMp4, audio_codecs));
-    info.supported_types.push_back(std::make_pair(kVideoMp4, video_codecs));
+    if (supported_codecs & MP4_AVC1) {
+      info.supported_types[kVideoMp4] = info.supported_types[kAudioMp4];
+      info.supported_types[kVideoMp4].insert(kAvc1);
+      info.supported_types[kVideoMp4].insert(kAvc3);
+    }
   }
 #endif  // defined(USE_PROPRIETARY_CODECS)
 
@@ -269,9 +292,10 @@
 
   SupportedCodecs supported_codecs = NO_CODECS;
   for (size_t i = 0; i < codecs.size(); ++i) {
-    // TODO(ddorwin): Break up VP8 and Vorbis. For now, "vp8" implies both.
+    if (codecs[i] == kCdmSupportedCodecVorbis)
+      supported_codecs |= WEBM_VORBIS;
     if (codecs[i] == kCdmSupportedCodecVp8)
-      supported_codecs |= WEBM_VP8_AND_VORBIS;
+      supported_codecs |= WEBM_VP8;
 #if defined(USE_PROPRIETARY_CODECS)
     if (codecs[i] == kCdmSupportedCodecAac)
       supported_codecs |= MP4_AAC;
@@ -292,20 +316,24 @@
   SupportedKeySystemResponse response;
 
   request.key_system = kWidevineKeySystem;
-  request.codecs = static_cast<android::SupportedCodecs>(
-      android::WEBM_VP8_AND_VORBIS | android::MP4_AAC | android::MP4_AVC1);
+  request.codecs = static_cast<android::SupportedCodecs>(android::WEBM_CODECS |
+                                                         android::MP4_CODECS);
   content::RenderThread::Get()->Send(
       new ChromeViewHostMsg_GetSupportedKeySystems(request, &response));
-  DCHECK_EQ(response.compositing_codecs >> 3, 0) << "unrecognized codec";
-  DCHECK_EQ(response.non_compositing_codecs >> 3, 0) << "unrecognized codec";
-  if (response.compositing_codecs != android::NO_SUPPORTED_CODECS) {
+  DCHECK_EQ(response.compositing_codecs & android::INVALID_CODECS,
+            android::NO_CODECS)
+      << "unrecognized codec";
+  DCHECK_EQ(response.non_compositing_codecs & android::INVALID_CODECS,
+            android::NO_CODECS)
+      << "unrecognized codec";
+  if (response.compositing_codecs != android::NO_CODECS) {
     AddWidevineWithCodecs(
         WIDEVINE,
         static_cast<SupportedCodecs>(response.compositing_codecs),
         concrete_key_systems);
   }
 
-  if (response.non_compositing_codecs != android::NO_SUPPORTED_CODECS) {
+  if (response.non_compositing_codecs != android::NO_CODECS) {
     AddWidevineWithCodecs(
         WIDEVINE_HR_NON_COMPOSITING,
         static_cast<SupportedCodecs>(response.non_compositing_codecs),
diff --git a/chrome/renderer/media/chrome_key_systems.h b/chrome/renderer/media/chrome_key_systems.h
index 3409038..13acd39 100644
--- a/chrome/renderer/media/chrome_key_systems.h
+++ b/chrome/renderer/media/chrome_key_systems.h
@@ -5,6 +5,8 @@
 #ifndef CHROME_RENDERER_MEDIA_CHROME_KEY_SYSTEMS_H_
 #define CHROME_RENDERER_MEDIA_CHROME_KEY_SYSTEMS_H_
 
+#include <vector>
+
 #include "content/public/renderer/key_system_info.h"
 
 void AddChromeKeySystems(std::vector<content::KeySystemInfo>* key_systems_info);
diff --git a/chrome/renderer/net/error_cache_load.cc b/chrome/renderer/net/error_cache_load.cc
deleted file mode 100644
index e866917..0000000
--- a/chrome/renderer/net/error_cache_load.cc
+++ /dev/null
@@ -1,60 +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.
-
-#include "error_cache_load.h"
-
-#include "content/public/renderer/render_frame.h"
-#include "gin/handle.h"
-#include "gin/object_template_builder.h"
-#include "third_party/WebKit/public/platform/WebURLRequest.h"
-#include "third_party/WebKit/public/web/WebFrame.h"
-#include "third_party/WebKit/public/web/WebKit.h"
-
-gin::WrapperInfo ErrorCacheLoad::kWrapperInfo = {gin::kEmbedderNativeGin};
-
-// static
-void ErrorCacheLoad::Install(content::RenderFrame* render_frame,
-                             const GURL& page_url) {
-  v8::Isolate* isolate = blink::mainThreadIsolate();
-  v8::HandleScope handle_scope(isolate);
-  v8::Handle<v8::Context> context =
-      render_frame->GetWebFrame()->mainWorldScriptContext();
-  if (context.IsEmpty())
-    return;
-
-  v8::Context::Scope context_scope(context);
-
-  gin::Handle<ErrorCacheLoad> controller =
-      gin::CreateHandle(isolate, new ErrorCacheLoad(render_frame, page_url));
-  v8::Handle<v8::Object> global = context->Global();
-  global->Set(gin::StringToV8(isolate, "errorCacheLoad"), controller.ToV8());
-}
-
-bool ErrorCacheLoad::ReloadStaleInstance() {
-  if (!render_frame_)
-    return false;
-
-  blink::WebURLRequest request(page_url_);
-  request.setCachePolicy(blink::WebURLRequest::ReturnCacheDataDontLoad);
-
-  render_frame_->GetWebFrame()->loadRequest(request);
-
-  return true;
-}
-
-ErrorCacheLoad::ErrorCacheLoad(content::RenderFrame* render_frame,
-                               const GURL& page_url)
-    : RenderFrameObserver(render_frame),
-      render_frame_(render_frame),
-      page_url_(page_url) {}
-
-ErrorCacheLoad::~ErrorCacheLoad() {}
-
-gin::ObjectTemplateBuilder ErrorCacheLoad::GetObjectTemplateBuilder(
-    v8::Isolate* isolate) {
-  return gin::Wrappable<ErrorCacheLoad>::GetObjectTemplateBuilder(isolate)
-      .SetMethod("reloadStaleInstance", &ErrorCacheLoad::ReloadStaleInstance);
-}
-
-void ErrorCacheLoad::OnDestruct() { render_frame_ = NULL; }
diff --git a/chrome/renderer/net/error_cache_load.h b/chrome/renderer/net/error_cache_load.h
deleted file mode 100644
index 1bb60c2..0000000
--- a/chrome/renderer/net/error_cache_load.h
+++ /dev/null
@@ -1,60 +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.
-
-#ifndef CHROME_RENDERER_NET_ERROR_CACHE_LOAD_H_
-#define CHROME_RENDERER_NET_ERROR_CACHE_LOAD_H_
-
-#include "base/basictypes.h"
-#include "content/public/renderer/render_frame_observer.h"
-#include "gin/wrappable.h"
-#include "url/gurl.h"
-
-// ErrorCacheLoad class:
-//
-// This class makes cache loading operations available to the
-// error page loaded by NetErrorHelper.  It is bound to the javascript
-// window.errorCacheLoad object.
-
-class GURL;
-
-namespace content {
-class RenderFrame;
-}
-
-class ErrorCacheLoad : public gin::Wrappable<ErrorCacheLoad>,
-                       public content::RenderFrameObserver {
- public:
-  static gin::WrapperInfo kWrapperInfo;
-
-  static void Install(content::RenderFrame* render_frame, const GURL& page_url);
-
- private:
-  ErrorCacheLoad(content::RenderFrame* render_frame, const GURL& page_url);
-  virtual ~ErrorCacheLoad();
-
-  // Loads the original URL associated with the frame, with the blink
-  // ReturnCacheDataDontLoad flag set to make sure that the value is
-  // only gotten from cache.
-  bool ReloadStaleInstance();
-
-  // gin::WrappableBase
-  virtual gin::ObjectTemplateBuilder GetObjectTemplateBuilder(
-      v8::Isolate* isolate) OVERRIDE;
-
-  // RenderFrameObserver.  Overridden to avoid being destroyed when RenderFrame
-  // goes away; ErrorCacheLoad objects are owned by the JS garbage collector.
-  virtual void OnDestruct() OVERRIDE;
-
-  // We'll be torn down by V8 when the page goes away, so it's safe to hold
-  // a naked pointer to the render frame.
-  content::RenderFrame* render_frame_;
-
-  const GURL page_url_;
-
-  bool render_frame_destroyed_;
-
-  DISALLOW_COPY_AND_ASSIGN(ErrorCacheLoad);
-};
-
-#endif  // CHROME_RENDERER_NET_ERROR_CACHE_LOAD_H_
diff --git a/chrome/renderer/net/net_error_helper.cc b/chrome/renderer/net/net_error_helper.cc
index 1d9529a..5ef563f 100644
--- a/chrome/renderer/net/net_error_helper.cc
+++ b/chrome/renderer/net/net_error_helper.cc
@@ -16,7 +16,7 @@
 #include "chrome/common/localized_error.h"
 #include "chrome/common/net/net_error_info.h"
 #include "chrome/common/render_messages.h"
-#include "chrome/renderer/net/error_cache_load.h"
+#include "chrome/renderer/net/net_error_page_controller.h"
 #include "content/public/common/content_client.h"
 #include "content/public/common/url_constants.h"
 #include "content/public/renderer/content_renderer_client.h"
@@ -95,6 +95,18 @@
   RenderThread::Get()->RemoveObserver(this);
 }
 
+void NetErrorHelper::ReloadButtonPressed() {
+  core_.ExecuteButtonPress(NetErrorHelperCore::RELOAD_BUTTON);
+}
+
+void NetErrorHelper::LoadStaleButtonPressed() {
+  core_.ExecuteButtonPress(NetErrorHelperCore::LOAD_STALE_BUTTON);
+}
+
+void NetErrorHelper::MoreButtonPressed() {
+  core_.ExecuteButtonPress(NetErrorHelperCore::MORE_BUTTON);
+}
+
 void NetErrorHelper::DidStartProvisionalLoad() {
   blink::WebFrame* frame = render_frame()->GetWebFrame();
   core_.OnStartLoad(GetFrameType(frame), GetLoadingPageType(frame));
@@ -148,6 +160,8 @@
     const blink::WebURLError& error,
     bool is_failed_post,
     scoped_ptr<LocalizedError::ErrorPageParams> params,
+    bool* reload_button_shown,
+    bool* load_stale_button_shown,
     std::string* error_html) const {
   error_html->clear();
 
@@ -160,11 +174,14 @@
     base::DictionaryValue error_strings;
     LocalizedError::GetStrings(error.reason, error.domain.utf8(),
                                error.unreachableURL, is_failed_post,
-                               error.staleCopyInCache,
+                               error.staleCopyInCache && !is_failed_post,
                                RenderThread::Get()->GetLocale(),
                                render_frame()->GetRenderView()->
                                    GetAcceptLanguages(),
                                params.Pass(), &error_strings);
+    *reload_button_shown = error_strings.Get("reloadButton", NULL);
+    *load_stale_button_shown = error_strings.Get("staleLoadButton", NULL);
+
     // "t" is the id of the template's root node.
     *error_html = webui::GetTemplatesHtml(template_html, &error_strings, "t");
   }
@@ -179,8 +196,8 @@
   frame->loadHTMLString(html, GURL(kUnreachableWebDataURL), failed_url, true);
 }
 
-void NetErrorHelper::EnableStaleLoadBindings(const GURL& page_url) {
-  ErrorCacheLoad::Install(render_frame(), page_url);
+void NetErrorHelper::EnablePageHelperFunctions() {
+  NetErrorPageController::Install(render_frame());
 }
 
 void NetErrorHelper::UpdateErrorPage(const blink::WebURLError& error,
@@ -190,7 +207,7 @@
                              error.domain.utf8(),
                              error.unreachableURL,
                              is_failed_post,
-                             error.staleCopyInCache,
+                             error.staleCopyInCache && !is_failed_post,
                              RenderThread::Get()->GetLocale(),
                              render_frame()->GetRenderView()->
                                  GetAcceptLanguages(),
@@ -243,6 +260,16 @@
   render_frame()->GetWebFrame()->reload(false);
 }
 
+void NetErrorHelper::LoadPageFromCache(const GURL& page_url) {
+  blink::WebFrame* web_frame = render_frame()->GetWebFrame();
+  DCHECK(!EqualsASCII(web_frame->dataSource()->request().httpMethod(), "POST"));
+
+  blink::WebURLRequest request(page_url);
+  request.setCachePolicy(blink::WebURLRequest::ReturnCacheDataDontLoad);
+
+  web_frame->loadRequest(request);
+}
+
 void NetErrorHelper::OnNetErrorInfo(int status_num) {
   DCHECK(status_num >= 0 && status_num < chrome_common_net::DNS_PROBE_MAX);
 
diff --git a/chrome/renderer/net/net_error_helper.h b/chrome/renderer/net/net_error_helper.h
index 5369e19..173146f 100644
--- a/chrome/renderer/net/net_error_helper.h
+++ b/chrome/renderer/net/net_error_helper.h
@@ -40,6 +40,11 @@
   explicit NetErrorHelper(content::RenderFrame* render_view);
   virtual ~NetErrorHelper();
 
+  // Button press notification from error page.
+  void ReloadButtonPressed();
+  void LoadStaleButtonPressed();
+  void MoreButtonPressed();
+
   // RenderFrameObserver implementation.
   virtual void DidStartProvisionalLoad() OVERRIDE;
   virtual void DidCommitProvisionalLoad(bool is_new_navigation) OVERRIDE;
@@ -75,10 +80,12 @@
       const blink::WebURLError& error,
       bool is_failed_post,
       scoped_ptr<LocalizedError::ErrorPageParams> params,
+      bool* reload_button_shown,
+      bool* load_stale_button_shown,
       std::string* html) const OVERRIDE;
   virtual void LoadErrorPageInMainFrame(const std::string& html,
                                         const GURL& failed_url) OVERRIDE;
-  virtual void EnableStaleLoadBindings(const GURL& page_url) OVERRIDE;
+  virtual void EnablePageHelperFunctions() OVERRIDE;
   virtual void UpdateErrorPage(const blink::WebURLError& error,
                                bool is_failed_post) OVERRIDE;
   virtual void FetchNavigationCorrections(
@@ -86,6 +93,7 @@
       const std::string& navigation_correction_request_body) OVERRIDE;
   virtual void CancelFetchNavigationCorrections() OVERRIDE;
   virtual void ReloadPage() OVERRIDE;
+  virtual void LoadPageFromCache(const GURL& page_url) OVERRIDE;
 
   void OnNetErrorInfo(int status);
   void OnSetNavigationCorrectionInfo(const GURL& navigation_correction_url,
diff --git a/chrome/renderer/net/net_error_helper_core.cc b/chrome/renderer/net/net_error_helper_core.cc
index 517f4d5..cd681a5 100644
--- a/chrome/renderer/net/net_error_helper_core.cc
+++ b/chrome/renderer/net/net_error_helper_core.cc
@@ -12,6 +12,7 @@
 #include "base/json/json_reader.h"
 #include "base/json/json_writer.h"
 #include "base/location.h"
+#include "base/logging.h"
 #include "base/metrics/histogram.h"
 #include "base/strings/string16.h"
 #include "base/values.h"
@@ -253,6 +254,8 @@
       : error(error),
         was_failed_post(was_failed_post),
         needs_dns_updates(false),
+        reload_button_in_page(false),
+        load_stale_button_in_page(false),
         is_finished_loading(false) {
   }
 
@@ -278,6 +281,10 @@
   //                the blank page is loading, to get rid of these.
   std::string navigation_correction_request_body;
 
+  // Track if specific buttons are included in an error page, for statistics.
+  bool reload_button_in_page;
+  bool load_stale_button_in_page;
+
   // True if a page has completed loading, at which point it can receive
   // updates.
   bool is_finished_loading;
@@ -298,7 +305,8 @@
       // TODO(ellyjones): Make online_ accurate at object creation.
       online_(true),
       auto_reload_count_(0),
-      can_auto_reload_page_(false) {
+      can_auto_reload_page_(false),
+      navigation_from_button_(NO_BUTTON) {
 }
 
 NetErrorHelperCore::~NetErrorHelperCore() {
@@ -356,6 +364,24 @@
   if (frame_type != MAIN_FRAME)
     return;
 
+  // Track if an error occurred due to a page button press.
+  // This isn't perfect; if (for instance), the server is slow responding
+  // to a request generated from the page reload button, and the user hits
+  // the browser reload button, this code will still believe the
+  // result is from the page reload button.
+  if (committed_error_page_info_ && pending_error_page_info_ &&
+      navigation_from_button_ != NO_BUTTON &&
+      committed_error_page_info_->error.unreachableURL ==
+          pending_error_page_info_->error.unreachableURL) {
+    DCHECK(navigation_from_button_ == RELOAD_BUTTON ||
+           navigation_from_button_ == LOAD_STALE_BUTTON);
+    chrome_common_net::RecordEvent(
+        navigation_from_button_ == RELOAD_BUTTON ?
+            chrome_common_net::NETWORK_ERROR_PAGE_RELOAD_BUTTON_ERROR :
+            chrome_common_net::NETWORK_ERROR_PAGE_LOAD_STALE_BUTTON_ERROR);
+  }
+  navigation_from_button_ = NO_BUTTON;
+
   if (committed_error_page_info_ && !pending_error_page_info_ &&
       can_auto_reload_page_) {
     int reason = committed_error_page_info_->error.reason;
@@ -384,11 +410,17 @@
 
   committed_error_page_info_->is_finished_loading = true;
 
-  // Only enable stale cache JS bindings if this wasn't a post.
-  if (!committed_error_page_info_->was_failed_post) {
-    delegate_->EnableStaleLoadBindings(
-        committed_error_page_info_->error.unreachableURL);
+  chrome_common_net::RecordEvent(chrome_common_net::NETWORK_ERROR_PAGE_SHOWN);
+  if (committed_error_page_info_->reload_button_in_page) {
+    chrome_common_net::RecordEvent(
+        chrome_common_net::NETWORK_ERROR_PAGE_RELOAD_BUTTON_SHOWN);
   }
+  if (committed_error_page_info_->load_stale_button_in_page) {
+    chrome_common_net::RecordEvent(
+        chrome_common_net::NETWORK_ERROR_PAGE_LOAD_STALE_BUTTON_SHOWN);
+  }
+
+  delegate_->EnablePageHelperFunctions();
 
   if (committed_error_page_info_->navigation_correction_url.is_valid()) {
     // If there is another pending error page load, |fix_url| should have been
@@ -466,14 +498,24 @@
 
       delegate_->GenerateLocalizedErrorPage(
           GetUpdatedError(error), is_failed_post, params.Pass(),
+          &pending_error_page_info_->reload_button_in_page,
+          &pending_error_page_info_->load_stale_button_in_page,
           error_html);
       pending_error_page_info_->needs_dns_updates = true;
       return;
     }
   }
 
-  delegate_->GenerateLocalizedErrorPage(error, is_failed_post,
-                                        params.Pass(), error_html);
+  bool reload_button_in_page = false;
+  bool load_stale_button_in_page = false;
+  delegate_->GenerateLocalizedErrorPage(
+      error, is_failed_post, params.Pass(),
+      &reload_button_in_page, &load_stale_button_in_page, error_html);
+  if (pending_error_page_info_ && frame_type == MAIN_FRAME) {
+    pending_error_page_info_->reload_button_in_page = reload_button_in_page;
+    pending_error_page_info_->load_stale_button_in_page =
+        load_stale_button_in_page;
+  }
 }
 
 void NetErrorHelperCore::OnNetErrorInfo(
@@ -518,6 +560,9 @@
   if (last_probe_status_ != chrome_common_net::DNS_PROBE_STARTED)
     committed_error_page_info_->needs_dns_updates = false;
 
+  // There is no need to worry about the button display statistics here because
+  // the presentation of the reload and load stale buttons can't be changed
+  // by a DNS error update.
   delegate_->UpdateErrorPage(
       GetUpdatedError(committed_error_page_info_->error),
       committed_error_page_info_->was_failed_post);
@@ -601,13 +646,17 @@
   DCHECK(committed_error_page_info_);
   DCHECK(can_auto_reload_page_);
   base::TimeDelta delay = GetAutoReloadTime(auto_reload_count_);
-  auto_reload_count_++;
   auto_reload_timer_->Stop();
   auto_reload_timer_->Start(FROM_HERE, delay,
-      base::Bind(&NetErrorHelperCore::Reload,
+      base::Bind(&NetErrorHelperCore::AutoReloadTimerFired,
                  base::Unretained(this)));
 }
 
+void NetErrorHelperCore::AutoReloadTimerFired() {
+  auto_reload_count_++;
+  Reload();
+}
+
 void NetErrorHelperCore::NetworkStateChanged(bool online) {
   online_ = online;
   if (auto_reload_timer_->IsRunning()) {
@@ -650,3 +699,30 @@
   MaybeStartAutoReloadTimer();
   return true;
 }
+
+void NetErrorHelperCore::ExecuteButtonPress(Button button) {
+  switch (button) {
+    case RELOAD_BUTTON:
+      chrome_common_net::RecordEvent(
+          chrome_common_net::NETWORK_ERROR_PAGE_RELOAD_BUTTON_CLICKED);
+      navigation_from_button_ = RELOAD_BUTTON;
+      Reload();
+      return;
+    case LOAD_STALE_BUTTON:
+      chrome_common_net::RecordEvent(
+          chrome_common_net::NETWORK_ERROR_PAGE_LOAD_STALE_BUTTON_CLICKED);
+      navigation_from_button_ = LOAD_STALE_BUTTON;
+      delegate_->LoadPageFromCache(
+          committed_error_page_info_->error.unreachableURL);
+      return;
+    case MORE_BUTTON:
+      // Visual effects on page are handled in Javascript code.
+      chrome_common_net::RecordEvent(
+          chrome_common_net::NETWORK_ERROR_PAGE_MORE_BUTTON_CLICKED);
+      return;
+    case NO_BUTTON:
+      NOTREACHED();
+      return;
+  }
+}
+
diff --git a/chrome/renderer/net/net_error_helper_core.h b/chrome/renderer/net/net_error_helper_core.h
index bd5297c..570879c 100644
--- a/chrome/renderer/net/net_error_helper_core.h
+++ b/chrome/renderer/net/net_error_helper_core.h
@@ -39,6 +39,13 @@
     ERROR_PAGE,
   };
 
+  enum Button {
+    NO_BUTTON,
+    RELOAD_BUTTON,
+    LOAD_STALE_BUTTON,
+    MORE_BUTTON,
+  };
+
   // The Delegate handles all interaction with the RenderView, WebFrame, and
   // the network, as well as the generation of error pages.
   class Delegate {
@@ -48,6 +55,8 @@
         const blink::WebURLError& error,
         bool is_failed_post,
         scoped_ptr<LocalizedError::ErrorPageParams> params,
+        bool* reload_button_shown,
+        bool* load_stale_button_shown,
         std::string* html) const = 0;
 
     // Loads the given HTML in the main frame for use as an error page.
@@ -55,7 +64,7 @@
                                           const GURL& failed_url) = 0;
 
     // Create extra Javascript bindings in the error page.
-    virtual void EnableStaleLoadBindings(const GURL& page_url) = 0;
+    virtual void EnablePageHelperFunctions() = 0;
 
     // Updates the currently displayed error page with a new error code.  The
     // currently displayed error page must have finished loading, and must have
@@ -77,6 +86,9 @@
     // Starts a reload of the page in the observed frame.
     virtual void ReloadPage() = 0;
 
+    // Load the original page from cache.
+    virtual void LoadPageFromCache(const GURL& page_url) = 0;
+
    protected:
     virtual ~Delegate() {}
   };
@@ -145,6 +157,11 @@
     auto_reload_timer_.reset(timer.release());
   }
 
+  // Execute the effect of pressing the specified button.
+  // Note that the visual effects of the 'MORE' button are taken
+  // care of in JavaScript.
+  void ExecuteButtonPress(Button button);
+
  private:
   struct ErrorPageInfo;
 
@@ -165,6 +182,7 @@
   void Reload();
   bool MaybeStartAutoReloadTimer();
   void StartAutoReloadTimer();
+  void AutoReloadTimerFired();
 
   static bool IsReloadableError(const ErrorPageInfo& info);
 
@@ -195,6 +213,10 @@
 
   int auto_reload_count_;
   bool can_auto_reload_page_;
+
+  // Non-NO_BUTTON only when a navigation has been initiated from the error
+  // page.  Used to detect when such navigations result in errors.
+  Button navigation_from_button_;
 };
 
 #endif  // CHROME_RENDERER_NET_NET_ERROR_HELPER_CORE_H_
diff --git a/chrome/renderer/net/net_error_helper_core_unittest.cc b/chrome/renderer/net/net_error_helper_core_unittest.cc
index f41da62..285b217 100644
--- a/chrome/renderer/net/net_error_helper_core_unittest.cc
+++ b/chrome/renderer/net/net_error_helper_core_unittest.cc
@@ -119,7 +119,8 @@
                              update_count_(0),
                              error_html_update_count_(0),
                              reload_count_(0),
-                             enable_stale_load_bindings_count_(0) {
+                             load_stale_count_(0),
+                             enable_page_helper_functions_count_(0) {
     core_.set_auto_reload_enabled(false);
     core_.set_timer_for_testing(scoped_ptr<base::Timer>(timer_));
   }
@@ -138,8 +139,16 @@
     return reload_count_;
   }
 
-  int enable_stale_load_bindings_count() const {
-    return enable_stale_load_bindings_count_;
+  int load_stale_count() const {
+    return load_stale_count_;
+  }
+
+  const GURL& load_stale_url() const {
+    return load_stale_url_;
+  }
+
+  int enable_page_helper_functions_count() const {
+    return enable_page_helper_functions_count_;
   }
 
   const std::string& last_update_string() const { return last_update_string_; }
@@ -225,8 +234,12 @@
       const WebURLError& error,
       bool is_failed_post,
       scoped_ptr<LocalizedError::ErrorPageParams> params,
+      bool* reload_button_shown,
+      bool* load_stale_button_shown,
       std::string* html) const OVERRIDE {
     last_error_page_params_.reset(params.release());
+    *reload_button_shown = false;
+    *load_stale_button_shown = false;
     *html = ErrorToString(error, is_failed_post);
   }
 
@@ -236,8 +249,8 @@
     last_error_html_ = html;
   }
 
-  virtual void EnableStaleLoadBindings(const GURL& page_url) OVERRIDE {
-    enable_stale_load_bindings_count_++;
+  virtual void EnablePageHelperFunctions() OVERRIDE {
+    enable_page_helper_functions_count_++;
   }
 
   virtual void UpdateErrorPage(const WebURLError& error,
@@ -267,6 +280,11 @@
     reload_count_++;
   }
 
+  virtual void LoadPageFromCache(const GURL& error_url) OVERRIDE {
+    load_stale_count_++;
+    load_stale_url_ = error_url;
+  }
+
   base::MockTimer* timer_;
 
   NetErrorHelperCore core_;
@@ -289,8 +307,10 @@
   mutable scoped_ptr<LocalizedError::ErrorPageParams> last_error_page_params_;
 
   int reload_count_;
+  int load_stale_count_;
+  GURL load_stale_url_;
 
-  int enable_stale_load_bindings_count_;
+  int enable_page_helper_functions_count_;
 };
 
 //------------------------------------------------------------------------------
@@ -334,14 +354,14 @@
   EXPECT_EQ(NetErrorString(net::ERR_CONNECTION_RESET), html);
 
   // Error page loads.
-  EXPECT_EQ(0, enable_stale_load_bindings_count());
+  EXPECT_EQ(0, enable_page_helper_functions_count());
   core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
                      NetErrorHelperCore::ERROR_PAGE);
   core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
   core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
   EXPECT_EQ(0, update_count());
   EXPECT_EQ(0, error_html_update_count());
-  EXPECT_EQ(1, enable_stale_load_bindings_count());
+  EXPECT_EQ(1, enable_page_helper_functions_count());
 }
 
 TEST_F(NetErrorHelperCoreTest, MainFrameNonDnsErrorWithCorrections) {
@@ -739,13 +759,13 @@
             html);
 
   // Error page loads.
-  EXPECT_EQ(0, enable_stale_load_bindings_count());
+  EXPECT_EQ(0, enable_page_helper_functions_count());
   core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
                      NetErrorHelperCore::ERROR_PAGE);
   core().OnCommitLoad(NetErrorHelperCore::MAIN_FRAME);
   core().OnFinishLoad(NetErrorHelperCore::MAIN_FRAME);
   EXPECT_EQ(0, update_count());
-  EXPECT_EQ(0, enable_stale_load_bindings_count());
+  EXPECT_EQ(1, enable_page_helper_functions_count());
 
   core().OnNetErrorInfo(chrome_common_net::DNS_PROBE_STARTED);
   EXPECT_EQ(1, update_count());
@@ -1770,8 +1790,9 @@
 TEST_F(NetErrorHelperCoreTest, AutoReloadStopsLoadingOnStop) {
   core().set_auto_reload_enabled(true);
   DoErrorLoad(net::ERR_CONNECTION_RESET);
-  EXPECT_EQ(1, core().auto_reload_count());
+  EXPECT_EQ(0, core().auto_reload_count());
   timer()->Fire();
+  EXPECT_EQ(1, core().auto_reload_count());
   EXPECT_EQ(1, reload_count());
   core().OnStop();
   EXPECT_FALSE(timer()->IsRunning());
@@ -1785,21 +1806,23 @@
   core().OnStartLoad(NetErrorHelperCore::MAIN_FRAME,
                      NetErrorHelperCore::NON_ERROR_PAGE);
   EXPECT_FALSE(timer()->IsRunning());
-  EXPECT_EQ(1, core().auto_reload_count());
+  EXPECT_EQ(0, core().auto_reload_count());
 }
 
 TEST_F(NetErrorHelperCoreTest, AutoReloadResetsCountOnSuccess) {
   core().set_auto_reload_enabled(true);
   DoErrorLoad(net::ERR_CONNECTION_RESET);
   base::TimeDelta delay = timer()->GetCurrentDelay();
-  EXPECT_EQ(1, core().auto_reload_count());
+  EXPECT_EQ(0, core().auto_reload_count());
   timer()->Fire();
+  EXPECT_EQ(1, core().auto_reload_count());
   EXPECT_EQ(1, reload_count());
   DoSuccessLoad();
   DoErrorLoad(net::ERR_CONNECTION_RESET);
-  EXPECT_EQ(1, core().auto_reload_count());
+  EXPECT_EQ(0, core().auto_reload_count());
   EXPECT_EQ(timer()->GetCurrentDelay(), delay);
   timer()->Fire();
+  EXPECT_EQ(1, core().auto_reload_count());
   EXPECT_EQ(2, reload_count());
   DoSuccessLoad();
   EXPECT_EQ(0, core().auto_reload_count());
@@ -1845,7 +1868,7 @@
   EXPECT_FALSE(timer()->IsRunning());
   core().NetworkStateChanged(true);
   EXPECT_TRUE(timer()->IsRunning());
-  EXPECT_EQ(1, core().auto_reload_count());
+  EXPECT_EQ(0, core().auto_reload_count());
 }
 
 TEST_F(NetErrorHelperCoreTest, AutoReloadDoesNotRestartOnOnlineAfterStop) {
@@ -1984,3 +2007,20 @@
   EXPECT_TRUE(core().ShouldSuppressErrorPage(NetErrorHelperCore::MAIN_FRAME,
                                              GURL(kFailedUrl)));
 }
+
+TEST_F(NetErrorHelperCoreTest, ExplicitReloadSucceeds) {
+  DoErrorLoad(net::ERR_CONNECTION_RESET);
+  EXPECT_EQ(0, reload_count());
+  core().ExecuteButtonPress(NetErrorHelperCore::RELOAD_BUTTON);
+  EXPECT_EQ(1, reload_count());
+}
+
+TEST_F(NetErrorHelperCoreTest, ExplicitLoadStaleSucceeds) {
+  DoErrorLoad(net::ERR_CONNECTION_RESET);
+  EXPECT_EQ(0, load_stale_count());
+  core().ExecuteButtonPress(NetErrorHelperCore::LOAD_STALE_BUTTON);
+  EXPECT_EQ(1, load_stale_count());
+  EXPECT_EQ(GURL(kFailedUrl), load_stale_url());
+}
+
+
diff --git a/chrome/renderer/net/net_error_page_controller.cc b/chrome/renderer/net/net_error_page_controller.cc
new file mode 100644
index 0000000..66ca54f
--- /dev/null
+++ b/chrome/renderer/net/net_error_page_controller.cc
@@ -0,0 +1,89 @@
+// 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.
+
+#include "chrome/renderer/net/net_error_page_controller.h"
+
+#include "base/strings/string_piece.h"
+#include "chrome/renderer/net/net_error_helper.h"
+#include "content/public/renderer/render_frame.h"
+#include "gin/handle.h"
+#include "gin/object_template_builder.h"
+#include "third_party/WebKit/public/web/WebFrame.h"
+#include "third_party/WebKit/public/web/WebKit.h"
+
+gin::WrapperInfo NetErrorPageController::kWrapperInfo = {
+    gin::kEmbedderNativeGin};
+
+// static
+void NetErrorPageController::Install(content::RenderFrame* render_frame) {
+  v8::Isolate* isolate = blink::mainThreadIsolate();
+  v8::HandleScope handle_scope(isolate);
+  v8::Handle<v8::Context> context =
+      render_frame->GetWebFrame()->mainWorldScriptContext();
+  if (context.IsEmpty())
+    return;
+
+  v8::Context::Scope context_scope(context);
+
+  gin::Handle<NetErrorPageController> controller = gin::CreateHandle(
+      isolate, new NetErrorPageController(render_frame));
+  v8::Handle<v8::Object> global = context->Global();
+  global->Set(gin::StringToV8(isolate, "errorPageController"),
+              controller.ToV8());
+}
+
+bool NetErrorPageController::LoadStaleButtonClick() {
+  if (!render_frame())
+    return false;
+
+  NetErrorHelper* net_error_helper =
+      content::RenderFrameObserverTracker<NetErrorHelper>::Get(render_frame());
+  DCHECK(net_error_helper);
+  net_error_helper->LoadStaleButtonPressed();
+
+  return true;
+}
+
+bool NetErrorPageController::ReloadButtonClick() {
+  if (!render_frame())
+    return false;
+
+  NetErrorHelper* net_error_helper =
+      content::RenderFrameObserverTracker<NetErrorHelper>::Get(render_frame());
+  DCHECK(net_error_helper);
+  net_error_helper->ReloadButtonPressed();
+
+  return true;
+}
+
+bool NetErrorPageController::MoreButtonClick() {
+  if (!render_frame())
+    return false;
+
+  NetErrorHelper* net_error_helper =
+      content::RenderFrameObserverTracker<NetErrorHelper>::Get(render_frame());
+  DCHECK(net_error_helper);
+  net_error_helper->MoreButtonPressed();
+
+  return true;
+}
+
+NetErrorPageController::NetErrorPageController(
+    content::RenderFrame* render_frame) : RenderFrameObserver(render_frame) {}
+
+NetErrorPageController::~NetErrorPageController() {}
+
+gin::ObjectTemplateBuilder NetErrorPageController::GetObjectTemplateBuilder(
+    v8::Isolate* isolate) {
+  return gin::Wrappable<NetErrorPageController>::GetObjectTemplateBuilder(
+             isolate)
+      .SetMethod("loadStaleButtonClick",
+                 &NetErrorPageController::LoadStaleButtonClick)
+      .SetMethod("reloadButtonClick",
+                 &NetErrorPageController::ReloadButtonClick)
+      .SetMethod("moreButtonClick",
+                 &NetErrorPageController::MoreButtonClick);
+}
+
+void NetErrorPageController::OnDestruct() {}
diff --git a/chrome/renderer/net/net_error_page_controller.h b/chrome/renderer/net/net_error_page_controller.h
new file mode 100644
index 0000000..a3a615f
--- /dev/null
+++ b/chrome/renderer/net/net_error_page_controller.h
@@ -0,0 +1,53 @@
+// 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.
+
+#ifndef CHROME_RENDERER_NET_NET_ERROR_PAGE_CONTROLLER_H_
+#define CHROME_RENDERER_NET_NET_ERROR_PAGE_CONTROLLER_H_
+
+#include "base/macros.h"
+#include "content/public/renderer/render_frame_observer.h"
+#include "gin/wrappable.h"
+
+
+namespace content {
+class RenderFrame;
+}
+
+// This class makes various helper functions available to the
+// error page loaded by NetErrorHelper.  It is bound to the JavaScript
+// window.errorPageController object.
+class NetErrorPageController
+    : public gin::Wrappable<NetErrorPageController>,
+      public content::RenderFrameObserver {
+ public:
+  static gin::WrapperInfo kWrapperInfo;
+
+  static void Install(content::RenderFrame* render_frame);
+
+ private:
+  explicit NetErrorPageController(content::RenderFrame* render_frame);
+  virtual ~NetErrorPageController();
+
+  // Execute a "Load Stale" button click.
+  bool LoadStaleButtonClick();
+
+  // Execute a "Reload" button click.
+  bool ReloadButtonClick();
+
+  // Execute a "More" button click.
+  bool MoreButtonClick();
+
+  // gin::WrappableBase
+  virtual gin::ObjectTemplateBuilder GetObjectTemplateBuilder(
+      v8::Isolate* isolate) OVERRIDE;
+
+  // RenderFrameObserver.  Overridden to avoid being destroyed when RenderFrame
+  // goes away; NetErrorPageController objects are owned by the JS
+  // garbage collector.
+  virtual void OnDestruct() OVERRIDE;
+
+  DISALLOW_COPY_AND_ASSIGN(NetErrorPageController);
+};
+
+#endif  // CHROME_RENDERER_NET_NET_ERROR_PAGE_CONTROLLER_H_
diff --git a/chrome/renderer/pepper/chrome_renderer_pepper_host_factory.cc b/chrome/renderer/pepper/chrome_renderer_pepper_host_factory.cc
index 6c5457f..447c4dd 100644
--- a/chrome/renderer/pepper/chrome_renderer_pepper_host_factory.cc
+++ b/chrome/renderer/pepper/chrome_renderer_pepper_host_factory.cc
@@ -33,7 +33,7 @@
     const ppapi::proxy::ResourceMessageCallParams& params,
     PP_Instance instance,
     const IPC::Message& message) {
-  DCHECK(host == host_->GetPpapiHost());
+  DCHECK_EQ(host_->GetPpapiHost(), host);
 
   // Make sure the plugin is giving us a valid instance for this resource.
   if (!host_->IsValidInstance(instance))
diff --git a/chrome/renderer/pepper/pepper_extensions_common_host.cc b/chrome/renderer/pepper/pepper_extensions_common_host.cc
index 1bda041..f48d6b4 100644
--- a/chrome/renderer/pepper/pepper_extensions_common_host.cc
+++ b/chrome/renderer/pepper/pepper_extensions_common_host.cc
@@ -19,7 +19,7 @@
 #include "ppapi/proxy/ppapi_messages.h"
 #include "third_party/WebKit/public/web/WebDocument.h"
 #include "third_party/WebKit/public/web/WebElement.h"
-#include "third_party/WebKit/public/web/WebFrame.h"
+#include "third_party/WebKit/public/web/WebLocalFrame.h"
 #include "third_party/WebKit/public/web/WebPluginContainer.h"
 
 namespace {
@@ -59,13 +59,15 @@
       host->GetContainerForInstance(instance);
   if (!container)
     return NULL;
-  blink::WebFrame* frame = container->element().document().frame();
+  blink::WebLocalFrame* frame = container->element().document().frame();
   if (!frame)
     return NULL;
   v8::HandleScope scope(v8::Isolate::GetCurrent());
+  // TODO(rockot): Remove this downcast. See http://crbug.com/362616.
   extensions::ChromeV8Context* context =
-      dispatcher->v8_context_set().GetByV8Context(
-          frame->mainWorldScriptContext());
+      static_cast<extensions::ChromeV8Context*>(
+          dispatcher->script_context_set().GetByV8Context(
+              frame->mainWorldScriptContext()));
   if (!context)
     return NULL;
 
diff --git a/chrome/renderer/pepper/pepper_pdf_host.cc b/chrome/renderer/pepper/pepper_pdf_host.cc
index 7804e2e..25a518b 100644
--- a/chrome/renderer/pepper/pepper_pdf_host.cc
+++ b/chrome/renderer/pepper/pepper_pdf_host.cc
@@ -27,7 +27,7 @@
 #include "skia/ext/platform_canvas.h"
 #include "third_party/WebKit/public/web/WebDocument.h"
 #include "third_party/WebKit/public/web/WebElement.h"
-#include "third_party/WebKit/public/web/WebFrame.h"
+#include "third_party/WebKit/public/web/WebLocalFrame.h"
 #include "third_party/WebKit/public/web/WebPluginContainer.h"
 #include "third_party/WebKit/public/web/WebView.h"
 #include "third_party/skia/include/core/SkBitmap.h"
@@ -247,7 +247,8 @@
     return PP_ERROR_FAILED;
   GURL url = instance->GetPluginURL();
   content::RenderView* render_view = instance->GetRenderView();
-  blink::WebFrame* frame = render_view->GetWebView()->mainFrame();
+  blink::WebLocalFrame* frame =
+      render_view->GetWebView()->mainFrame()->toWebLocalFrame();
   content::Referrer referrer(frame->document().url(),
                              frame->document().referrerPolicy());
   render_view->Send(new ChromeViewHostMsg_PDFSaveURLAs(
diff --git a/chrome/renderer/pepper/ppb_pdf_impl.cc b/chrome/renderer/pepper/ppb_pdf_impl.cc
index 90c0a60..1069e06 100644
--- a/chrome/renderer/pepper/ppb_pdf_impl.cc
+++ b/chrome/renderer/pepper/ppb_pdf_impl.cc
@@ -28,7 +28,7 @@
 #include "ppapi/shared_impl/var.h"
 #include "third_party/WebKit/public/web/WebDocument.h"
 #include "third_party/WebKit/public/web/WebElement.h"
-#include "third_party/WebKit/public/web/WebFrame.h"
+#include "third_party/WebKit/public/web/WebLocalFrame.h"
 #include "third_party/WebKit/public/web/WebPluginContainer.h"
 #include "third_party/WebKit/public/web/WebView.h"
 #include "third_party/icu/source/i18n/unicode/usearch.h"
@@ -347,7 +347,8 @@
   GURL url = instance->GetPluginURL();
 
   content::RenderView* render_view = instance->GetRenderView();
-  blink::WebFrame* frame = render_view->GetWebView()->mainFrame();
+  blink::WebLocalFrame* frame =
+      render_view->GetWebView()->mainFrame()->toWebLocalFrame();
   content::Referrer referrer(frame->document().url(),
                              frame->document().referrerPolicy());
   render_view->Send(new ChromeViewHostMsg_PDFSaveURLAs(
diff --git a/chrome/renderer/printing/print_web_view_helper.cc b/chrome/renderer/printing/print_web_view_helper.cc
index 5893484..259601e 100644
--- a/chrome/renderer/printing/print_web_view_helper.cc
+++ b/chrome/renderer/printing/print_web_view_helper.cc
@@ -35,8 +35,8 @@
 #include "third_party/WebKit/public/web/WebConsoleMessage.h"
 #include "third_party/WebKit/public/web/WebDocument.h"
 #include "third_party/WebKit/public/web/WebElement.h"
-#include "third_party/WebKit/public/web/WebFrame.h"
 #include "third_party/WebKit/public/web/WebFrameClient.h"
+#include "third_party/WebKit/public/web/WebLocalFrame.h"
 #include "third_party/WebKit/public/web/WebPlugin.h"
 #include "third_party/WebKit/public/web/WebPluginDocument.h"
 #include "third_party/WebKit/public/web/WebPrintParams.h"
@@ -566,6 +566,11 @@
     return owns_web_view_ && frame() && frame()->isLoading();
   }
 
+  // TODO(ojan): Remove this override and have this class use a non-null
+  // layerTreeView.
+  // blink::WebViewClient override:
+  virtual bool allowsBrokenNullLayerTreeView() const;
+
  protected:
   // blink::WebViewClient override:
   virtual void didStopLoading();
@@ -701,6 +706,10 @@
   frame()->loadRequest(blink::WebURLRequest(GURL(url_str)));
 }
 
+bool PrepareFrameAndViewForPrint::allowsBrokenNullLayerTreeView() const {
+  return true;
+}
+
 void PrepareFrameAndViewForPrint::didStopLoading() {
   DCHECK(!on_ready_.is_null());
   // Don't call callback here, because it can delete |this| and WebView that is
diff --git a/chrome/renderer/printing/print_web_view_helper_browsertest.cc b/chrome/renderer/printing/print_web_view_helper_browsertest.cc
index 4bf4dbd..a8563b7 100644
--- a/chrome/renderer/printing/print_web_view_helper_browsertest.cc
+++ b/chrome/renderer/printing/print_web_view_helper_browsertest.cc
@@ -12,7 +12,7 @@
 #include "printing/print_job_constants.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/WebKit/public/platform/WebString.h"
-#include "third_party/WebKit/public/web/WebFrame.h"
+#include "third_party/WebKit/public/web/WebLocalFrame.h"
 #include "third_party/WebKit/public/web/WebRange.h"
 #include "third_party/WebKit/public/web/WebView.h"
 
@@ -21,6 +21,7 @@
 #include "printing/image.h"
 
 using blink::WebFrame;
+using blink::WebLocalFrame;
 using blink::WebString;
 #endif
 
diff --git a/chrome/renderer/printing/print_web_view_helper_linux.cc b/chrome/renderer/printing/print_web_view_helper_linux.cc
index 7041acf..721dd97 100644
--- a/chrome/renderer/printing/print_web_view_helper_linux.cc
+++ b/chrome/renderer/printing/print_web_view_helper_linux.cc
@@ -14,7 +14,7 @@
 #include "printing/page_size_margins.h"
 #include "skia/ext/platform_device.h"
 #include "skia/ext/vector_canvas.h"
-#include "third_party/WebKit/public/web/WebFrame.h"
+#include "third_party/WebKit/public/web/WebLocalFrame.h"
 
 #if !defined(OS_CHROMEOS) && !defined(OS_ANDROID)
 #include "base/process/process_handle.h"
diff --git a/chrome/renderer/printing/print_web_view_helper_mac.mm b/chrome/renderer/printing/print_web_view_helper_mac.mm
index 23f2c87..071b7e5 100644
--- a/chrome/renderer/printing/print_web_view_helper_mac.mm
+++ b/chrome/renderer/printing/print_web_view_helper_mac.mm
@@ -17,7 +17,7 @@
 #include "skia/ext/platform_device.h"
 #include "skia/ext/vector_canvas.h"
 #include "third_party/WebKit/public/platform/WebCanvas.h"
-#include "third_party/WebKit/public/web/WebFrame.h"
+#include "third_party/WebKit/public/web/WebLocalFrame.h"
 
 namespace printing {
 
diff --git a/chrome/renderer/printing/print_web_view_helper_win.cc b/chrome/renderer/printing/print_web_view_helper_win.cc
index da78a1d..4e80461 100644
--- a/chrome/renderer/printing/print_web_view_helper_win.cc
+++ b/chrome/renderer/printing/print_web_view_helper_win.cc
@@ -20,7 +20,7 @@
 #include "skia/ext/platform_device.h"
 #include "skia/ext/refptr.h"
 #include "skia/ext/vector_canvas.h"
-#include "third_party/WebKit/public/web/WebFrame.h"
+#include "third_party/WebKit/public/web/WebLocalFrame.h"
 #include "ui/gfx/gdi_util.h"
 #include "ui/gfx/point.h"
 #include "ui/gfx/rect.h"
diff --git a/chrome/renderer/resources/extensions/automation/automation_event.js b/chrome/renderer/resources/extensions/automation/automation_event.js
index 6086a9b..7d04ecc 100644
--- a/chrome/renderer/resources/extensions/automation/automation_event.js
+++ b/chrome/renderer/resources/extensions/automation/automation_event.js
@@ -19,7 +19,8 @@
   }
 };
 
-exports.AutomationEvent = utils.expose('AutomationEvent',
-                                       AutomationEventImpl,
-                                       ['stopPropagation'],
-                                       ['type', 'target']);
+exports.AutomationEvent = utils.expose(
+    'AutomationEvent',
+    AutomationEventImpl,
+    { functions: ['stopPropagation'],
+      readonly: ['type', 'target', 'eventPhase'] });
diff --git a/chrome/renderer/resources/extensions/automation/automation_node.js b/chrome/renderer/resources/extensions/automation/automation_node.js
index 987aaf3..5f0c834 100644
--- a/chrome/renderer/resources/extensions/automation/automation_node.js
+++ b/chrome/renderer/resources/extensions/automation/automation_node.js
@@ -17,9 +17,15 @@
   this.childIds = [];
   this.attributes = {};
   this.listeners = {};
+  this.location = { left: 0, top: 0, width: 0, height: 0 };
 };
 
 AutomationNodeImpl.prototype = {
+  id: -1,
+  role: '',
+  loaded: false,
+  state: { busy: true },
+
   parent: function() {
     return this.owner.get(this.parentID);
   },
@@ -99,6 +105,7 @@
       // TODO(aboxhall/dtseng): handle unloaded parent node
       parent = parent.parent();
     }
+    path.push(this.owner.wrapper);
     var event = new AutomationEvent(eventType, this.wrapper);
 
     // Dispatch the event through the propagation path in three phases:
@@ -113,6 +120,14 @@
     }
   },
 
+  toString: function() {
+    return 'node id=' + this.id +
+        ' role=' + this.role +
+        ' state=' + JSON.stringify(this.state) +
+        ' childIds=' + JSON.stringify(this.childIds) +
+        ' attributes=' + JSON.stringify(this.attributes);
+  },
+
   dispatchEventAtCapturing_: function(event, path) {
     privates(event).impl.eventPhase = Event.CAPTURING_PHASE;
     for (var i = path.length - 1; i >= 0; i--) {
@@ -144,8 +159,9 @@
     var listeners = nodeImpl.listeners[event.type];
     if (!listeners)
       return;
+
+    var eventPhase = event.eventPhase;
     for (var i = 0; i < listeners.length; i++) {
-      var eventPhase = privates(event).impl.eventPhase;
       if (eventPhase == Event.CAPTURING_PHASE && !listeners[i].capture)
         continue;
       if (eventPhase == Event.BUBBLING_PHASE && listeners[i].capture)
@@ -177,16 +193,23 @@
 
 var AutomationNode = utils.expose('AutomationNode',
                                   AutomationNodeImpl,
-                                  ['parent',
-                                   'firstChild',
-                                   'lastChild',
-                                   'children',
-                                   'previousSibling',
-                                   'nextSibling',
-                                   'doDefault',
-                                   'focus',
-                                   'makeVisible',
-                                   'setSelection',
-                                   'addEventListener',
-                                   'removeEventListener']);
+                                  { functions: ['parent',
+                                                'firstChild',
+                                                'lastChild',
+                                                'children',
+                                                'previousSibling',
+                                                'nextSibling',
+                                                'doDefault',
+                                                'focus',
+                                                'makeVisible',
+                                                'setSelection',
+                                                'addEventListener',
+                                                'removeEventListener'],
+                                    readonly: ['id',
+                                               'role',
+                                               'state',
+                                               'location',
+                                               'attributes',
+                                               'loaded'] });
+
 exports.AutomationNode = AutomationNode;
diff --git a/chrome/renderer/resources/extensions/automation/automation_tree.js b/chrome/renderer/resources/extensions/automation/automation_tree.js
index 9b16e69..6d8afc5 100644
--- a/chrome/renderer/resources/extensions/automation/automation_tree.js
+++ b/chrome/renderer/resources/extensions/automation/automation_tree.js
@@ -4,13 +4,15 @@
 
 var Event = require('event_bindings').Event;
 var AutomationNode = require('automationNode').AutomationNode;
+var utils = require('utils');
 
 // Maps an attribute to its default value in an invalidated node.
 // These attributes are taken directly from the Automation idl.
 var AutomationAttributeDefaults = {
   'id': -1,
   'role': '',
-  'state': {}
+  'state': {},
+  'location': { left: 0, top: 0, width: 0, height: 0 }
 };
 
 
@@ -41,51 +43,21 @@
  * renderer widget host.
  * @constructor
  */
-var AutomationTree = function(processID, routingID) {
-  privates(this).impl = new AutomationTreeImpl(processID, routingID);
-};
-
-
-AutomationTree.prototype = {
-  /**
-   * The root of this automation tree.
-   * @type {Object}
-   */
-  get root() {
-    return privates(this).impl.root;
-  }
-};
-
-
 var AutomationTreeImpl = function(processID, routingID) {
   this.processID = processID;
   this.routingID = routingID;
-
-  /**
-   * Our cache of the native AXTree.
-   * @type {!Object.<number, Object>}
-   * @private
-   */
+  this.listeners = {};
+  this.root = new AutomationNode(this);
   this.axNodeDataCache_ = {};
 };
 
 AutomationTreeImpl.prototype = {
   root: null,
 
-  /**
-   * Looks up AXNodeData from backing AXTree.
-   * We assume this cache is complete at the time a client requests a node.
-   * @param {number} id The id of the AXNode to retrieve.
-   * @return {AutomationNode} The data, if it exists.
-   */
   get: function(id) {
     return this.axNodeDataCache_[id];
   },
 
-  /**
-   * Invalidates a subtree rooted at |node|.
-   * @param {AutomationNode} id The node to invalidate.
-   */
   invalidate: function(node) {
     if (!node)
       return;
@@ -97,17 +69,32 @@
 
     var id = node.id;
     for (var key in AutomationAttributeDefaults) {
-      node[key] = AutomationAttributeDefaults[key];
+      privates(node).impl[key] = AutomationAttributeDefaults[key];
     }
-    node.id = id;
+    privates(node).impl.loaded = false;
+    privates(node).impl.id = id;
     this.axNodeDataCache_[id] = undefined;
   },
 
-  /**
-   * Send an update to this tree.
-   * @param {Object} data The update.
-   * @return {boolean} Whether any changes to the tree occurred.
-   */
+  // TODO(aboxhall): make AutomationTree inherit from AutomationNode (or a
+  // mutual ancestor) and remove this code.
+  addEventListener: function(eventType, callback, capture) {
+    this.removeEventListener(eventType, callback);
+    if (!this.listeners[eventType])
+      this.listeners[eventType] = [];
+    this.listeners[eventType].push({callback: callback, capture: capture});
+  },
+
+  removeEventListener: function(eventType, callback) {
+    if (this.listeners[eventType]) {
+      var listeners = this.listeners[eventType];
+      for (var i = 0; i < listeners.length; i++) {
+        if (callback === listeners[i].callback)
+          listeners.splice(i, 1);
+      }
+    }
+  },
+
   update: function(data) {
     var didUpdateRoot = false;
 
@@ -135,7 +122,7 @@
         if (!childNode) {
           childNode = new AutomationNode(this);
           this.axNodeDataCache_[newId] = childNode;
-          childNode.id = newId;
+          privates(childNode).impl.id = newId;
         }
         privates(childNode).impl.indexInParent = j;
         privates(childNode).impl.parentID = nodeData.id;
@@ -154,31 +141,47 @@
         didUpdateRoot = true;
       }
       for (var key in AutomationAttributeDefaults) {
-        // This assumes that we sometimes don't get specific attributes (i.e. in
-        // tests). Better safe than sorry.
-        if (nodeData[key]) {
-          node[key] = nodeData[key];
-        } else {
-          node[key] = AutomationAttributeDefaults[key];
-        }
+        if (key in nodeData)
+          privates(node).impl[key] = nodeData[key];
+        else
+          privates(node).impl[key] = AutomationAttributeDefaults[key];
       }
-      node.attributes = {};
       for (var attributeTypeIndex = 0;
            attributeTypeIndex < AutomationAttributeTypes.length;
            attributeTypeIndex++) {
         var attributeType = AutomationAttributeTypes[attributeTypeIndex];
         for (var attributeID in nodeData[attributeType]) {
-          node.attributes[attributeID] =
+          privates(node).impl.attributes[attributeID] =
               nodeData[attributeType][attributeID];
         }
       }
       privates(node).impl.childIds = newChildIDs;
+      privates(node).impl.loaded = true;
       this.axNodeDataCache_[node.id] = node;
-      privates(node).impl.dispatchEvent(data.eventType);
     }
+    var node = this.get(data.targetID);
+    if (node)
+      privates(node).impl.dispatchEvent(data.eventType);
     return true;
+  },
+
+  toString: function() {
+    function toStringInternal(node, indent) {
+      if (!node)
+        return '';
+      var output =
+          new Array(indent).join(' ') + privates(node).impl.toString() + '\n';
+      indent += 2;
+      for (var i = 0; i < node.children().length; i++)
+        output += toStringInternal(node.children()[i], indent);
+      return output;
+    }
+    return toStringInternal(this.root, 0);
   }
 };
 
-
-exports.AutomationTree = AutomationTree;
+exports.AutomationTree = utils.expose('AutomationTree',
+                                      AutomationTreeImpl,
+                                      { functions: ['addEventListener',
+                                                    'removeEventListener'],
+                                        readonly: ['root'] });
diff --git a/chrome/renderer/resources/extensions/automation_custom_bindings.js b/chrome/renderer/resources/extensions/automation_custom_bindings.js
index 65a0279..8a8bf1b 100644
--- a/chrome/renderer/resources/extensions/automation_custom_bindings.js
+++ b/chrome/renderer/resources/extensions/automation_custom_bindings.js
@@ -28,6 +28,7 @@
 automation.registerCustomHook(function(bindingsAPI) {
   var apiFunctions = bindingsAPI.apiFunctions;
 
+  // TODO(aboxhall/dtseng): Re-work once 'desktop' object is fully specced
   apiFunctions.setHandleRequest('getTree', function(callback) {
     // enableCurrentTab() ensures the renderer for the current tab has
     // accessibility enabled, and fetches its process and routing ids to use as
@@ -70,15 +71,18 @@
   }
   privates(targetTree).impl.update(data);
 
-  // If the tree wasn't available when getTree() was called, the callback will
-  // have been cached in idToCallback, so call and delete it now that we
-  // have the tree.
-  if (id in idToCallback) {
-    for (var i = 0; i < idToCallback[id].length; i++) {
-      var callback = idToCallback[id][i];
-      callback(targetTree);
+  var eventType = data.eventType;
+  if (eventType == 'load_complete' || eventType == 'layout_complete') {
+    // If the tree wasn't available when getTree() was called, the callback will
+    // have been cached in idToCallback, so call and delete it now that we
+    // have the complete tree.
+    if (id in idToCallback) {
+      for (var i = 0; i < idToCallback[id].length; i++) {
+        var callback = idToCallback[id][i];
+        callback(targetTree);
+      }
+      delete idToCallback[id];
     }
-    delete idToCallback[id];
   }
 });
 
diff --git a/chrome/renderer/resources/extensions/event.js b/chrome/renderer/resources/extensions/event.js
index 681b985..8beca3d 100644
--- a/chrome/renderer/resources/extensions/event.js
+++ b/chrome/renderer/resources/extensions/event.js
@@ -506,7 +506,7 @@
     }
   });
 
-  var Event = utils.expose('Event', EventImpl, [
+  var Event = utils.expose('Event', EventImpl, { functions: [
     'addListener',
     'removeListener',
     'hasListener',
@@ -516,7 +516,7 @@
     'addRules',
     'removeRules',
     'getRules'
-  ]);
+  ] });
 
   // NOTE: Event is (lazily) exposed as chrome.Event from dispatcher.cc.
   exports.Event = Event;
diff --git a/chrome/renderer/resources/extensions/last_error.js b/chrome/renderer/resources/extensions/last_error.js
index 4445f02..1d2b565 100644
--- a/chrome/renderer/resources/extensions/last_error.js
+++ b/chrome/renderer/resources/extensions/last_error.js
@@ -32,10 +32,32 @@
     targetChrome.extension.lastError = errorObject;
 
   assertRuntimeIsAvailable();
-  targetChrome.runtime.lastError = errorObject;
+
+  // We check to see if developers access runtime.lastError in order to decide
+  // whether or not to log it in the (error) console.
+  privates(targetChrome.runtime).accessedLastError = false;
+  $Object.defineProperty(targetChrome.runtime, 'lastError', {
+      configurable: true,
+      get: function() {
+        privates(targetChrome.runtime).accessedLastError = true;
+        return errorObject;
+      },
+      set: function(error) {
+        errorObject = errorObject;
+      }});
 };
 
 /**
+ * Check if anyone has checked chrome.runtime.lastError since it was set.
+ * @param {Object} targetChrome the Chrome object to check.
+ * @return boolean True if the lastError property was set.
+ */
+function hasAccessed(targetChrome) {
+  assertRuntimeIsAvailable();
+  return privates(targetChrome.runtime).accessedLastError === true;
+}
+
+/**
  * Clears the last error on |targetChrome|.
  */
 function clear(targetChrome) {
@@ -47,6 +69,7 @@
 
   assertRuntimeIsAvailable();
   delete targetChrome.runtime.lastError;
+  delete privates(targetChrome.runtime).accessedLastError;
 };
 
 function assertRuntimeIsAvailable() {
@@ -78,5 +101,6 @@
 }
 
 exports.clear = clear;
+exports.hasAccessed = hasAccessed;
 exports.set = set;
 exports.run = run;
diff --git a/chrome/renderer/resources/extensions/messaging.js b/chrome/renderer/resources/extensions/messaging.js
index 1ac9704..aea77cb 100644
--- a/chrome/renderer/resources/extensions/messaging.js
+++ b/chrome/renderer/resources/extensions/messaging.js
@@ -361,15 +361,15 @@
     return alignedArgs;
   }
 
-var Port = utils.expose('Port', PortImpl, [
+var Port = utils.expose('Port', PortImpl, { functions: [
     'disconnect',
     'postMessage'
   ],
-  [
+  properties: [
     'name',
     'onDisconnect',
     'onMessage'
-  ]);
+  ] });
 
 exports.kRequestChannel = kRequestChannel;
 exports.kMessageChannel = kMessageChannel;
diff --git a/chrome/renderer/resources/extensions/platform_app.js b/chrome/renderer/resources/extensions/platform_app.js
index 0982a6a..f6934cf 100644
--- a/chrome/renderer/resources/extensions/platform_app.js
+++ b/chrome/renderer/resources/extensions/platform_app.js
@@ -152,7 +152,7 @@
 disableMethods(HTMLDocument.prototype, 'document', ['write', 'writeln'], true);
 
 // Disable history.
-window.history = {};
+Object.defineProperty(window, "history", { value: {} });
 disableGetters(window.history, 'history', ['back', 'forward', 'go', 'length']);
 
 // Disable find.
diff --git a/chrome/renderer/resources/extensions/send_request.js b/chrome/renderer/resources/extensions/send_request.js
index 152442a..9117e96 100644
--- a/chrome/renderer/resources/extensions/send_request.js
+++ b/chrome/renderer/resources/extensions/send_request.js
@@ -74,11 +74,17 @@
         validate(responseList, request.callbackSchema.parameters);
       }
       safeCallbackApply(name, request, request.callback, responseList);
-    } else if (error) {
-      // The native call caused an error, but no callback was present.
-      // Notify the developer of the error via the console.
-      console.error("Error in response handler for " + (name || "unknown") +
-          ": " + error + (request.stack ? "\n" + request.stack : ""));
+    }
+
+    if (error &&
+        !lastError.hasAccessed(chrome) &&
+        !lastError.hasAccessed(callerChrome)) {
+      // The native call caused an error, but the developer didn't check
+      // runtime.lastError.
+      // Notify the developer of the error via the (error) console.
+      console.error("Unchecked runtime.lastError while running " +
+          (name || "unknown") + ": " + error +
+          (request.stack ? "\n" + request.stack : ""));
     }
   } finally {
     delete requests[requestId];
diff --git a/chrome/renderer/resources/extensions/utils.js b/chrome/renderer/resources/extensions/utils.js
index 22d3f86..4378e3c 100644
--- a/chrome/renderer/resources/extensions/utils.js
+++ b/chrome/renderer/resources/extensions/utils.js
@@ -7,8 +7,13 @@
 var CHECK = requireNative('logging').CHECK;
 var WARNING = requireNative('logging').WARNING;
 
-// An object forEach. Calls |f| with each (key, value) pair of |obj|, using
-// |self| as the target.
+/**
+ * An object forEach. Calls |f| with each (key, value) pair of |obj|, using
+ * |self| as the target.
+ * @param {Object} obj The object to iterate over.
+ * @param {function} f The function to call in each iteration.
+ * @param {Object} self The object to use as |this| in each function call.
+ */
 function forEach(obj, f, self) {
   for (var key in obj) {
     if ($Object.hasOwnProperty(obj, key))
@@ -16,9 +21,14 @@
   }
 }
 
-// Assuming |array_of_dictionaries| is structured like this:
-// [{id: 1, ... }, {id: 2, ...}, ...], you can use
-// lookup(array_of_dictionaries, 'id', 2) to get the dictionary with id == 2.
+/**
+ * Assuming |array_of_dictionaries| is structured like this:
+ * [{id: 1, ... }, {id: 2, ...}, ...], you can use
+ * lookup(array_of_dictionaries, 'id', 2) to get the dictionary with id == 2.
+ * @param {Array.<Object.<string, ?>>} array_of_dictionaries
+ * @param {string} field
+ * @param {?} value
+ */
 function lookup(array_of_dictionaries, field, value) {
   var filter = function (dict) {return dict[field] == value;};
   var matches = array_of_dictionaries.filter(filter);
@@ -52,14 +62,28 @@
   return null;
 }
 
-// expose takes a private class implementation |cls| and exposes a subset of its
-// methods |funcs| and properties |props| in a public wrapper class that it
-// returns.
-function expose(name, cls, funcs, props) {
+/**
+ * Takes a private class implementation |cls| and exposes a subset of its
+ * methods |functions| and properties |properties| and |readonly| in a public
+ * wrapper class that it returns. Within bindings code, you can access the
+ * implementation from an instance of the wrapper class using
+ * privates(instance).impl, and from the implementation class you can access
+ * the wrapper using this.wrapper (or implInstance.wrapper if you have another
+ * instance of the implementation class).
+ * @param {string} name The name of the exposed wrapper class.
+ * @param {Object} cls The class implementation.
+ * @param {{functions: ?Array.<string>,
+ *          properties: ?Array.<string>,
+ *          readonly: ?Array.<string>}} exposed The names of properties on the
+ *     implementation class to be exposed. |functions| represents the names of
+ *     functions which should be delegated to the implementation; |properties|
+ *     are gettable/settable properties and |readonly| are read-only properties.
+ */
+function expose(name, cls, exposed) {
   var publicClass = createClassWrapper(name, cls);
 
-  if (funcs) {
-    $Array.forEach(funcs, function(func) {
+  if ('functions' in exposed) {
+    $Array.forEach(exposed.functions, function(func) {
       publicClass.prototype[func] = function() {
         var impl = privates(this).impl;
         return $Function.apply(impl[func], impl, arguments);
@@ -67,8 +91,8 @@
     });
   }
 
-  if (props) {
-    $Array.forEach(props, function(prop) {
+  if ('properties' in exposed) {
+    $Array.forEach(exposed.properties, function(prop) {
       $Object.defineProperty(publicClass.prototype, prop, {
         enumerable: true,
         get: function() {
@@ -83,6 +107,17 @@
     });
   }
 
+  if ('readonly' in exposed) {
+    $Array.forEach(exposed.readonly, function(readonly) {
+      $Object.defineProperty(publicClass.prototype, readonly, {
+        enumerable: true,
+        get: function() {
+          return privates(this).impl[readonly];
+        },
+      });
+    });
+  }
+
   return publicClass;
 }
 
diff --git a/chrome/renderer/resources/extensions/web_request_internal_custom_bindings.js b/chrome/renderer/resources/extensions/web_request_internal_custom_bindings.js
index 789df03..76460ee 100644
--- a/chrome/renderer/resources/extensions/web_request_internal_custom_bindings.js
+++ b/chrome/renderer/resources/extensions/web_request_internal_custom_bindings.js
@@ -175,7 +175,9 @@
   });
 });
 
-var WebRequestEvent = utils.expose('WebRequestEvent', WebRequestEventImpl, [
+var WebRequestEvent = utils.expose('WebRequestEvent',
+                                   WebRequestEventImpl,
+                                   { functions: [
   'hasListener',
   'hasListeners',
   'addListener',
@@ -183,7 +185,7 @@
   'addRules',
   'removeRules',
   'getRules'
-]);
+] });
 
 webRequestInternal = binding.generate();
 exports.binding = webRequestInternal;
diff --git a/chrome/renderer/resources/extensions/web_view_experimental.js b/chrome/renderer/resources/extensions/web_view_experimental.js
index 74eb991..1b6a8c0 100644
--- a/chrome/renderer/resources/extensions/web_view_experimental.js
+++ b/chrome/renderer/resources/extensions/web_view_experimental.js
@@ -120,7 +120,7 @@
 
 var WebViewContextMenus = utils.expose(
     'WebViewContextMenus', WebViewContextMenusImpl,
-    ['create', 'remove', 'removeAll', 'update']);
+    { functions: ['create', 'remove', 'removeAll', 'update'] });
 
 /**
  * @private
diff --git a/chrome/renderer/resources/neterror.html b/chrome/renderer/resources/neterror.html
index 63c6a69..e0eaf7c 100644
--- a/chrome/renderer/resources/neterror.html
+++ b/chrome/renderer/resources/neterror.html
@@ -21,12 +21,16 @@
         </h1>
         <div id="buttons">
           <button id="reload-button" class="blue-button text-button"
-              onclick="location = this.url"
-              jsselect="reload" jsvalues=".url:reloadUrl"
+              onclick="reloadButtonClick(this.url);"
+              jsselect="reloadButton" jsvalues=".url:reloadUrl"
               jscontent="msg"></button>
+          <button id="stale-load-button" class="blue-button text-button"
+              onclick="loadStaleButtonClick()"
+              jsselect="staleLoadButton"
+              jscontent="msg" jsvalues="title:title"></button>
           <button id="more-less-button" class="text-button"
-              onclick="toggleHelpBox()" jsdisplay="more"
-              jsvalues=".moreText:more; .lessText:less;"
+              onclick="moreButtonClick(); toggleHelpBox()"
+              jsdisplay="more" jsvalues=".moreText:more; .lessText:less;"
               jscontent="more"></button>
         </div>
       </div>
@@ -53,7 +57,7 @@
               <button type="submit" id="search-button" class="blue-button"
                   jsvalues="aria-label:searchHeader">
                 <img id="search-image">
-  	          </button>
+              </button>
             </div>
           </form>
           <div class="error-code" jscontent="errorCode"></div>
diff --git a/chrome/renderer/resources/neterror.js b/chrome/renderer/resources/neterror.js
index 6f1e601..d1f4c5f 100644
--- a/chrome/renderer/resources/neterror.js
+++ b/chrome/renderer/resources/neterror.js
@@ -60,13 +60,38 @@
   return false;
 }
 
+// Implements button clicks.  This function is needed during the transition
+// between implementing these in trunk chromium and implementing them in
+// iOS.
+function reloadButtonClick(url) {
+  if (window.errorPageController) {
+    errorPageController.reloadButtonClick();
+  } else {
+    location = url;
+  }
+}
+
+function loadStaleButtonClick() {
+  if (window.errorPageController) {
+    errorPageController.loadStaleButtonClick();
+  }
+}
+
+function moreButtonClick() {
+  if (window.errorPageController) {
+    errorPageController.moreButtonClick();
+  }
+}
+
 <if expr="is_macosx or is_ios or is_linux or is_android">
 // Re-orders buttons. Used on Mac, Linux, and Android, where reload should go
 // on the right.
 function swapButtonOrder() {
-  reloadButton = document.getElementById('reload-button');
-  moreLessButton = document.getElementById('more-less-button');
+  var reloadButton = document.getElementById('reload-button');
+  var moreLessButton = document.getElementById('more-less-button');
+  var staleLoadButton = document.getElementById('stale-load-button');
   reloadButton.parentNode.insertBefore(moreLessButton, reloadButton);
+  reloadButton.parentNode.insertBefore(staleLoadButton, reloadButton)
 }
 document.addEventListener("DOMContentLoaded", swapButtonOrder);
 </if>
diff --git a/chrome/renderer/safe_browsing/phishing_classifier_browsertest.cc b/chrome/renderer/safe_browsing/phishing_classifier_browsertest.cc
index 9617d68..19adce4 100644
--- a/chrome/renderer/safe_browsing/phishing_classifier_browsertest.cc
+++ b/chrome/renderer/safe_browsing/phishing_classifier_browsertest.cc
@@ -55,7 +55,7 @@
     command_line->AppendSwitch(switches::kSingleProcess);
 #if defined(OS_WIN)
     // Don't want to try to create a GPU process.
-    command_line->AppendSwitch(switches::kDisableAcceleratedCompositing);
+    command_line->AppendSwitch(switches::kDisableGpu);
 #endif
   }
 
diff --git a/chrome/renderer/safe_browsing/phishing_classifier_delegate.cc b/chrome/renderer/safe_browsing/phishing_classifier_delegate.cc
index 3c80cdf..cd120ed 100644
--- a/chrome/renderer/safe_browsing/phishing_classifier_delegate.cc
+++ b/chrome/renderer/safe_browsing/phishing_classifier_delegate.cc
@@ -22,7 +22,7 @@
 #include "content/public/renderer/render_view.h"
 #include "third_party/WebKit/public/platform/WebURL.h"
 #include "third_party/WebKit/public/web/WebDocument.h"
-#include "third_party/WebKit/public/web/WebFrame.h"
+#include "third_party/WebKit/public/web/WebLocalFrame.h"
 #include "third_party/WebKit/public/web/WebView.h"
 
 using content::DocumentState;
diff --git a/chrome/renderer/safe_browsing/phishing_classifier_delegate_browsertest.cc b/chrome/renderer/safe_browsing/phishing_classifier_delegate_browsertest.cc
index c26db55..e4908e9 100644
--- a/chrome/renderer/safe_browsing/phishing_classifier_delegate_browsertest.cc
+++ b/chrome/renderer/safe_browsing/phishing_classifier_delegate_browsertest.cc
@@ -146,7 +146,7 @@
     command_line->AppendSwitch(switches::kSingleProcess);
 #if defined(OS_WIN)
     // Don't want to try to create a GPU process.
-    command_line->AppendSwitch(switches::kDisableAcceleratedCompositing);
+    command_line->AppendSwitch(switches::kDisableGpu);
 #endif
   }
 
diff --git a/chrome/renderer/safe_browsing/phishing_dom_feature_extractor.cc b/chrome/renderer/safe_browsing/phishing_dom_feature_extractor.cc
index c785a86..d5cfc09 100644
--- a/chrome/renderer/safe_browsing/phishing_dom_feature_extractor.cc
+++ b/chrome/renderer/safe_browsing/phishing_dom_feature_extractor.cc
@@ -19,7 +19,7 @@
 #include "third_party/WebKit/public/platform/WebString.h"
 #include "third_party/WebKit/public/web/WebElement.h"
 #include "third_party/WebKit/public/web/WebElementCollection.h"
-#include "third_party/WebKit/public/web/WebFrame.h"
+#include "third_party/WebKit/public/web/WebLocalFrame.h"
 #include "third_party/WebKit/public/web/WebView.h"
 
 namespace safe_browsing {
diff --git a/chrome/renderer/safe_browsing/phishing_dom_feature_extractor_browsertest.cc b/chrome/renderer/safe_browsing/phishing_dom_feature_extractor_browsertest.cc
index 45c7592..a7b5bbf 100644
--- a/chrome/renderer/safe_browsing/phishing_dom_feature_extractor_browsertest.cc
+++ b/chrome/renderer/safe_browsing/phishing_dom_feature_extractor_browsertest.cc
@@ -77,7 +77,7 @@
     command_line->AppendSwitch(switches::kSingleProcess);
 #if defined(OS_WIN)
     // Don't want to try to create a GPU process.
-    command_line->AppendSwitch(switches::kDisableAcceleratedCompositing);
+    command_line->AppendSwitch(switches::kDisableGpu);
 #endif
   }
 
diff --git a/chrome/renderer/searchbox/DEPS b/chrome/renderer/searchbox/DEPS
new file mode 100644
index 0000000..3daf8ae
--- /dev/null
+++ b/chrome/renderer/searchbox/DEPS
@@ -0,0 +1,3 @@
+include_rules = [
+  "+components/favicon_base",
+]
diff --git a/chrome/renderer/searchbox/searchbox.cc b/chrome/renderer/searchbox/searchbox.cc
index 922a61f..6d0d42c 100644
--- a/chrome/renderer/searchbox/searchbox.cc
+++ b/chrome/renderer/searchbox/searchbox.cc
@@ -10,12 +10,12 @@
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/common/chrome_switches.h"
-#include "chrome/common/favicon/favicon_types.h"
 #include "chrome/common/favicon/favicon_url_parser.h"
 #include "chrome/common/omnibox_focus_state.h"
 #include "chrome/common/render_messages.h"
 #include "chrome/common/url_constants.h"
 #include "chrome/renderer/searchbox/searchbox_extension.h"
+#include "components/favicon_base/favicon_types.h"
 #include "content/public/renderer/render_view.h"
 #include "grit/renderer_resources.h"
 #include "net/base/escape.h"
@@ -85,7 +85,7 @@
   raw_path = raw_path.substr(1);
 
   chrome::ParsedFaviconPath parsed;
-  if (!chrome::ParseFaviconPath(raw_path, chrome::FAVICON, &parsed))
+  if (!chrome::ParseFaviconPath(raw_path, favicon_base::FAVICON, &parsed))
     return false;
 
   // The part of the URL which details the favicon parameters should be returned
diff --git a/chrome/renderer/translate/translate_helper.cc b/chrome/renderer/translate/translate_helper.cc
index 0e3db6e..788dc73 100644
--- a/chrome/renderer/translate/translate_helper.cc
+++ b/chrome/renderer/translate/translate_helper.cc
@@ -18,7 +18,6 @@
 #include "base/strings/string16.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
-#include "chrome/renderer/extensions/extension_groups.h"
 #include "chrome/renderer/isolated_world_ids.h"
 #include "components/translate/content/common/translate_messages.h"
 #include "components/translate/core/common/translate_constants.h"
@@ -27,6 +26,7 @@
 #include "components/translate/language_detection/language_detection_util.h"
 #include "content/public/renderer/render_view.h"
 #include "extensions/common/constants.h"
+#include "extensions/renderer/extension_groups.h"
 #include "ipc/ipc_platform_file.h"
 #if defined(CLD2_DYNAMIC_MODE)
 #include "content/public/common/url_constants.h"
diff --git a/chrome/renderer/translate/translate_helper_browsertest.cc b/chrome/renderer/translate/translate_helper_browsertest.cc
index 61c5756..9cfc34f 100644
--- a/chrome/renderer/translate/translate_helper_browsertest.cc
+++ b/chrome/renderer/translate/translate_helper_browsertest.cc
@@ -10,6 +10,7 @@
 #include "content/public/renderer/render_view.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/WebKit/public/web/WebLocalFrame.h"
 
 using testing::AtLeast;
 using testing::Return;
diff --git a/chrome/service/cloud_print/DEPS b/chrome/service/cloud_print/DEPS
index eede8f5..1ad9bbd 100644
--- a/chrome/service/cloud_print/DEPS
+++ b/chrome/service/cloud_print/DEPS
@@ -1,5 +1,5 @@
 include_rules = [
-  "+components/cloud_devices",
+  "+components/cloud_devices/common",
   # sync notifier depends on the common jingle notifier classes.
   "+jingle/notifier",
 ]
diff --git a/chrome/service/cloud_print/cdd_conversion_win.cc b/chrome/service/cloud_print/cdd_conversion_win.cc
index 93fd836..dab6cd0 100644
--- a/chrome/service/cloud_print/cdd_conversion_win.cc
+++ b/chrome/service/cloud_print/cdd_conversion_win.cc
@@ -4,7 +4,7 @@
 
 #include "chrome/service/cloud_print/cdd_conversion_win.h"
 
-#include "components/cloud_devices/printer_description.h"
+#include "components/cloud_devices/common/printer_description.h"
 #include "printing/backend/print_backend.h"
 #include "printing/backend/win_helper.h"
 
diff --git a/chrome/service/cloud_print/cloud_print_proxy_backend.cc b/chrome/service/cloud_print/cloud_print_proxy_backend.cc
index 6423c51..52205cd 100644
--- a/chrome/service/cloud_print/cloud_print_proxy_backend.cc
+++ b/chrome/service/cloud_print/cloud_print_proxy_backend.cc
@@ -13,7 +13,6 @@
 #include "base/metrics/histogram.h"
 #include "base/rand_util.h"
 #include "base/values.h"
-#include "chrome/common/chrome_switches.h"
 #include "chrome/common/cloud_print/cloud_print_constants.h"
 #include "chrome/service/cloud_print/cloud_print_auth.h"
 #include "chrome/service/cloud_print/cloud_print_connector.h"
@@ -22,6 +21,7 @@
 #include "chrome/service/cloud_print/connector_settings.h"
 #include "chrome/service/net/service_url_request_context.h"
 #include "chrome/service/service_process.h"
+#include "components/cloud_devices/common/cloud_devices_switches.h"
 #include "google_apis/gaia/gaia_oauth_client.h"
 #include "google_apis/gaia/gaia_urls.h"
 #include "grit/generated_resources.h"
@@ -341,6 +341,9 @@
       g_service_process->GetServiceURLRequestContextGetter();
   notifier_options.auth_mechanism = "X-OAUTH2";
   notifier_options.try_ssltcp_first = true;
+  notifier_options.xmpp_host_port = net::HostPortPair::FromString(
+      CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
+          switches::kCloudPrintXmppEndpoint));
   push_client_ = notifier::PushClient::CreateDefault(notifier_options);
   push_client_->AddObserver(this);
   notifier::Subscription subscription;
diff --git a/chrome/service/cloud_print/connector_settings.cc b/chrome/service/cloud_print/connector_settings.cc
index 35ed6eb..01eadc9 100644
--- a/chrome/service/cloud_print/connector_settings.cc
+++ b/chrome/service/cloud_print/connector_settings.cc
@@ -4,18 +4,16 @@
 
 #include "chrome/service/cloud_print/connector_settings.h"
 
-#include "base/command_line.h"
 #include "base/metrics/histogram.h"
 #include "base/values.h"
-#include "chrome/common/chrome_switches.h"
 #include "chrome/common/cloud_print/cloud_print_constants.h"
 #include "chrome/common/pref_names.h"
 #include "chrome/service/cloud_print/print_system.h"
 #include "chrome/service/service_process_prefs.h"
+#include "components/cloud_devices/common/cloud_devices_urls.h"
 
 namespace {
 
-const char kDefaultCloudPrintServerUrl[] = "https://www.google.com/cloudprint";
 const char kDeleteOnEnumFail[] = "delete_on_enum_fail";
 const char kName[] = "name";
 const char kConnect[] = "connect";
@@ -56,17 +54,7 @@
   }
 
   // Check if there is an override for the cloud print server URL.
-  const CommandLine& command_line = *CommandLine::ForCurrentProcess();
-  server_url_ =
-      GURL(command_line.GetSwitchValueASCII(switches::kCloudPrintServiceURL));
-  if (server_url_.is_empty() || !server_url_.is_valid()) {
-    server_url_ =
-        GURL(prefs->GetString(prefs::kCloudPrintServiceURL, std::string()));
-    DCHECK(server_url_.is_empty() || server_url_.is_valid());
-    if (server_url_.is_empty() || !server_url_.is_valid()) {
-      server_url_ = GURL(kDefaultCloudPrintServerUrl);
-    }
-  }
+  server_url_ = cloud_devices::GetCloudPrintURL();
   DCHECK(server_url_.is_valid());
 
   connect_new_printers_ = prefs->GetBoolean(
diff --git a/chrome/service/cloud_print/connector_settings_unittest.cc b/chrome/service/cloud_print/connector_settings_unittest.cc
index 07f4717..b53c215 100644
--- a/chrome/service/cloud_print/connector_settings_unittest.cc
+++ b/chrome/service/cloud_print/connector_settings_unittest.cc
@@ -28,7 +28,6 @@
     "      'proxy_id': 'PROXY',"
     "      'robot_email': '123@cloudprint.googleusercontent.com',"
     "      'robot_refresh_token': '123',"
-    "      'service_url': 'http://cp.google.com',"
     "      'xmpp_auth_token': 'xmp token',"
     "      'xmpp_ping_enabled': true,"
     "      'xmpp_ping_timeout_sec': 256,"
@@ -99,7 +98,7 @@
   scoped_ptr<ServiceProcessPrefs> prefs(CreateTestFile(kServiceStateContent));
   ConnectorSettings settings;
   settings.InitFrom(prefs.get());
-  EXPECT_EQ("http://cp.google.com/", settings.server_url().spec());
+  EXPECT_EQ("https://www.google.com/cloudprint", settings.server_url().spec());
   EXPECT_EQ("PROXY", settings.proxy_id());
   EXPECT_FALSE(settings.proxy_id().empty());
   EXPECT_TRUE(settings.delete_on_enum_fail());
diff --git a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/TabUtils.java b/chrome/test/android/javatests/src/org/chromium/chrome/test/util/TabUtils.java
index c8429b9..7c39510 100644
--- a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/TabUtils.java
+++ b/chrome/test/android/javatests/src/org/chromium/chrome/test/util/TabUtils.java
@@ -22,7 +22,7 @@
  */
 public class TabUtils {
     private static TestContentViewClient createTestContentViewClientForTab(Tab tab) {
-        ContentViewClient client = tab.getContentView().getContentViewClient();
+        ContentViewClient client = tab.getContentViewCore().getContentViewClient();
         if (client instanceof TestContentViewClient) return (TestContentViewClient) client;
 
         TestContentViewClient testClient = new TestContentViewClientWrapper(client);
@@ -39,7 +39,7 @@
 
         public TestCallbackHelperContainerForTab(Tab tab) {
             super(createTestContentViewClientForTab(tab),
-                    new TestWebContentsObserver(tab.getContentView().getContentViewCore()));
+                    new TestWebContentsObserver(tab.getContentViewCore()));
             mOnCloseTabHelper = new CallbackHelper();
             mOnContextMenuShownHelper = new OnContextMenuShownHelper();
             tab.addObserver(new EmptyTabObserver() {
diff --git a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/contextmenu/ContextMenuUtils.java b/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/contextmenu/ContextMenuUtils.java
index 7398417..7a0e8a1 100644
--- a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/contextmenu/ContextMenuUtils.java
+++ b/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/contextmenu/ContextMenuUtils.java
@@ -44,7 +44,7 @@
                 client.getOnContextMenuShownHelper();
 
         int callCount = helper.getCallCount();
-        DOMUtils.longPressNode(testCase, tab.getContentView(), openerDOMNodeId);
+        DOMUtils.longPressNode(testCase, tab.getContentViewCore(), openerDOMNodeId);
 
         helper.waitForCallback(callCount);
         return helper.getContextMenu();
diff --git a/chrome/test/base/chrome_render_view_test.cc b/chrome/test/base/chrome_render_view_test.cc
index abf053c..732e2f1 100644
--- a/chrome/test/base/chrome_render_view_test.cc
+++ b/chrome/test/base/chrome_render_view_test.cc
@@ -9,8 +9,6 @@
 #include "chrome/common/chrome_content_client.h"
 #include "chrome/common/render_messages.h"
 #include "chrome/renderer/chrome_content_renderer_client.h"
-#include "chrome/renderer/extensions/chrome_v8_context_set.h"
-#include "chrome/renderer/extensions/chrome_v8_extension.h"
 #include "chrome/renderer/extensions/dispatcher.h"
 #include "chrome/renderer/spellchecker/spellcheck.h"
 #include "chrome/test/base/chrome_unit_test_suite.h"
@@ -24,7 +22,6 @@
 #include "extensions/browser/extension_function_dispatcher.h"
 #include "extensions/common/extension.h"
 #include "extensions/renderer/event_bindings.h"
-#include "grit/renderer_resources.h"
 #include "third_party/WebKit/public/platform/WebURLRequest.h"
 #include "third_party/WebKit/public/web/WebFrame.h"
 #include "third_party/WebKit/public/web/WebInputEvent.h"
diff --git a/chrome/test/base/module_system_test.cc b/chrome/test/base/module_system_test.cc
index 69976ba..bfc8308 100644
--- a/chrome/test/base/module_system_test.cc
+++ b/chrome/test/base/module_system_test.cc
@@ -14,10 +14,10 @@
 #include "base/strings/string_piece.h"
 #include "chrome/common/chrome_paths.h"
 #include "chrome/renderer/extensions/chrome_v8_context.h"
-#include "chrome/renderer/extensions/logging_native_handler.h"
-#include "chrome/renderer/extensions/utils_native_handler.h"
+#include "extensions/renderer/logging_native_handler.h"
 #include "extensions/renderer/object_backed_native_handler.h"
 #include "extensions/renderer/safe_builtins.h"
+#include "extensions/renderer/utils_native_handler.h"
 #include "ui/base/resource/resource_bundle.h"
 
 #include <map>
diff --git a/chrome/test/base/testing_profile.cc b/chrome/test/base/testing_profile.cc
index 9d53560..4889808 100644
--- a/chrome/test/base/testing_profile.cc
+++ b/chrome/test/base/testing_profile.cc
@@ -494,7 +494,7 @@
 
 static KeyedService* BuildBookmarkModel(content::BrowserContext* context) {
   Profile* profile = static_cast<Profile*>(context);
-  BookmarkModel* bookmark_model = new BookmarkModel(profile);
+  BookmarkModel* bookmark_model = new BookmarkModel(profile, false);
   bookmark_model->Load(profile->GetIOTaskRunner());
   return bookmark_model;
 }
@@ -553,6 +553,10 @@
   top_sites_loaded_observer.Wait();
 }
 
+void TestingProfile::SetGuestSession(bool guest) {
+  guest_session_ = guest;
+}
+
 base::FilePath TestingProfile::GetPath() const {
   return profile_path_;
 }
diff --git a/chrome/test/base/testing_profile.h b/chrome/test/base/testing_profile.h
index 10f6088..2644b99 100644
--- a/chrome/test/base/testing_profile.h
+++ b/chrome/test/base/testing_profile.h
@@ -202,6 +202,9 @@
   // Blocks until TopSites finishes loading.
   void BlockUntilTopSitesLoaded();
 
+  // Allow setting a profile as Guest after-the-fact to simplify some tests.
+  void SetGuestSession(bool guest);
+
   TestingPrefServiceSyncable* GetTestingPrefService();
 
   // content::BrowserContext
diff --git a/chrome/test/chromedriver/chrome/chrome.h b/chrome/test/chromedriver/chrome/chrome.h
index bd0601b..56885bc 100644
--- a/chrome/test/chromedriver/chrome/chrome.h
+++ b/chrome/test/chromedriver/chrome/chrome.h
@@ -8,6 +8,7 @@
 #include <list>
 #include <string>
 
+struct BrowserInfo;
 class ChromeDesktopImpl;
 class Status;
 class WebView;
@@ -18,11 +19,7 @@
 
   virtual ChromeDesktopImpl* GetAsDesktop() = 0;
 
-  virtual std::string GetVersion() = 0;
-
-  virtual int GetBuildNo() = 0;
-
-  virtual int GetBlinkRevision() = 0;
+  virtual const BrowserInfo* GetBrowserInfo() = 0;
 
   virtual bool HasCrashedWebView() = 0;
 
diff --git a/chrome/test/chromedriver/chrome/chrome_desktop_impl.cc b/chrome/test/chromedriver/chrome/chrome_desktop_impl.cc
index 184a150..8cdd130 100644
--- a/chrome/test/chromedriver/chrome/chrome_desktop_impl.cc
+++ b/chrome/test/chromedriver/chrome/chrome_desktop_impl.cc
@@ -116,8 +116,7 @@
 
   scoped_ptr<WebView> web_view_tmp(
       new WebViewImpl(id,
-                      GetBuildNo(),
-                      GetBlinkRevision(),
+                      devtools_http_client_->browser_info(),
                       devtools_http_client_->CreateClient(id)));
   Status status = web_view_tmp->ConnectIfNecessary();
   if (status.IsError())
diff --git a/chrome/test/chromedriver/chrome/chrome_impl.cc b/chrome/test/chromedriver/chrome/chrome_impl.cc
index 35898d7..f0b87d6 100644
--- a/chrome/test/chromedriver/chrome/chrome_impl.cc
+++ b/chrome/test/chromedriver/chrome/chrome_impl.cc
@@ -8,6 +8,7 @@
 #include "chrome/test/chromedriver/chrome/devtools_event_listener.h"
 #include "chrome/test/chromedriver/chrome/devtools_http_client.h"
 #include "chrome/test/chromedriver/chrome/status.h"
+#include "chrome/test/chromedriver/chrome/version.h"
 #include "chrome/test/chromedriver/chrome/web_view_impl.h"
 #include "chrome/test/chromedriver/net/port_server.h"
 
@@ -20,16 +21,8 @@
   return NULL;
 }
 
-std::string ChromeImpl::GetVersion() {
-  return devtools_http_client_->version();
-}
-
-int ChromeImpl::GetBuildNo() {
-  return devtools_http_client_->build_no();
-}
-
-int ChromeImpl::GetBlinkRevision() {
-  return devtools_http_client_->blink_revision();
+const BrowserInfo* ChromeImpl::GetBrowserInfo() {
+  return devtools_http_client_->browser_info();
 }
 
 bool ChromeImpl::HasCrashedWebView() {
@@ -67,7 +60,7 @@
     // being returned as active windows for some builds of Chrome.
     // TODO(bustamante): Once Chrome builds < 1755 are no longer
     //   supported this check can be removed.
-    int kBuildNumber = GetBuildNo();
+    int kBuildNumber = devtools_http_client_->browser_info()->build_no;
     if (kBuildNumber < 1755 && view.type == WebViewInfo::kApp &&
         view.url.find("_generated_background") != std::string::npos)
       continue;
@@ -90,7 +83,7 @@
         // OnConnected will fire when DevToolsClient connects later.
       }
       web_views_.push_back(make_linked_ptr(new WebViewImpl(
-          view.id, GetBuildNo(), GetBlinkRevision(), client.Pass())));
+          view.id, devtools_http_client_->browser_info(), client.Pass())));
     }
   }
 
diff --git a/chrome/test/chromedriver/chrome/chrome_impl.h b/chrome/test/chromedriver/chrome/chrome_impl.h
index 1df0649..01ad596 100644
--- a/chrome/test/chromedriver/chrome/chrome_impl.h
+++ b/chrome/test/chromedriver/chrome/chrome_impl.h
@@ -15,6 +15,7 @@
 #include "chrome/test/chromedriver/chrome/chrome.h"
 
 class AutomationExtension;
+struct BrowserInfo;
 class DevToolsEventListener;
 class DevToolsHttpClient;
 class JavaScriptDialogManager;
@@ -28,10 +29,8 @@
   virtual ~ChromeImpl();
 
   // Overridden from Chrome:
-  virtual std::string GetVersion() OVERRIDE;
   virtual ChromeDesktopImpl* GetAsDesktop() OVERRIDE;
-  virtual int GetBuildNo() OVERRIDE;
-  virtual int GetBlinkRevision() OVERRIDE;
+  virtual const BrowserInfo* GetBrowserInfo() OVERRIDE;
   virtual bool HasCrashedWebView() OVERRIDE;
   virtual Status GetWebViewIds(std::list<std::string>* web_view_ids) OVERRIDE;
   virtual Status GetWebViewById(const std::string& id,
diff --git a/chrome/test/chromedriver/chrome/devtools_http_client.cc b/chrome/test/chromedriver/chrome/devtools_http_client.cc
index 8120d89..2d380a8 100644
--- a/chrome/test/chromedriver/chrome/devtools_http_client.cc
+++ b/chrome/test/chromedriver/chrome/devtools_http_client.cc
@@ -109,19 +109,14 @@
                   "unrecognized Blink revision: " + blink_revision_string);
   }
 
-  blink_revision_ = blink_revision_int;
+  browser_info_.blink_revision = blink_revision_int;
 
-  int kToTBuildNo = 9999;
   if (browser_version.empty()) {
-    // Content Shell has an empty product version and a fake user agent.
-    // There's no way to detect the actual version, so assume it is tip of tree.
-    version_ = "content shell";
-    build_no_ = kToTBuildNo;
+    browser_info_.browser_name = "content shell";
     return Status(kOk);
   }
   if (browser_version.find("Version/") == 0u) {
-    version_ = "webview";
-    build_no_ = kToTBuildNo;
+    browser_info_.browser_name = "webview";
     return Status(kOk);
   }
   std::string prefix = "Chrome/";
@@ -140,8 +135,9 @@
                   "unrecognized Chrome version: " + browser_version);
   }
 
-  version_ = stripped_version;
-  build_no_ = temp_build_no;
+  browser_info_.browser_name = "chrome";
+  browser_info_.browser_version = stripped_version;
+  browser_info_.build_no = temp_build_no;
 
   return Status(kOk);
 }
@@ -196,16 +192,8 @@
   return Status(kOk);
 }
 
-const std::string& DevToolsHttpClient::version() const {
-  return version_;
-}
-
-int DevToolsHttpClient::build_no() const {
-  return build_no_;
-}
-
-int DevToolsHttpClient::blink_revision() const {
-  return blink_revision_;
+const BrowserInfo* DevToolsHttpClient::browser_info() {
+  return &browser_info_;
 }
 
 Status DevToolsHttpClient::GetVersion(std::string* browser_version,
@@ -260,7 +248,7 @@
         *it,
         base::Bind(&FakeCloseFrontends)));
     scoped_ptr<WebViewImpl> web_view(
-        new WebViewImpl(*it, build_no_, blink_revision_, client.Pass()));
+        new WebViewImpl(*it, &browser_info_, client.Pass()));
 
     status = web_view->ConnectIfNecessary();
     // Ignore disconnected error, because the debugger might have closed when
diff --git a/chrome/test/chromedriver/chrome/devtools_http_client.h b/chrome/test/chromedriver/chrome/devtools_http_client.h
index 2c7ceb1..693f0c0 100644
--- a/chrome/test/chromedriver/chrome/devtools_http_client.h
+++ b/chrome/test/chromedriver/chrome/devtools_http_client.h
@@ -10,6 +10,7 @@
 
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_ptr.h"
+#include "chrome/test/chromedriver/chrome/version.h"
 #include "chrome/test/chromedriver/net/sync_websocket_factory.h"
 
 namespace base {
@@ -76,9 +77,7 @@
 
   Status ActivateWebView(const std::string& id);
 
-  const std::string& version() const;
-  int build_no() const;
-  int blink_revision() const;
+  const BrowserInfo* browser_info();
 
  private:
   Status GetVersion(std::string* browser_version, std::string* blink_version);
@@ -91,9 +90,7 @@
   SyncWebSocketFactory socket_factory_;
   std::string server_url_;
   std::string web_socket_url_prefix_;
-  std::string version_;
-  int build_no_;
-  int blink_revision_;
+  BrowserInfo browser_info_;
 
   DISALLOW_COPY_AND_ASSIGN(DevToolsHttpClient);
 };
diff --git a/chrome/test/chromedriver/chrome/navigation_tracker.cc b/chrome/test/chromedriver/chrome/navigation_tracker.cc
index 66065d9..aad70e5 100644
--- a/chrome/test/chromedriver/chrome/navigation_tracker.cc
+++ b/chrome/test/chromedriver/chrome/navigation_tracker.cc
@@ -8,21 +8,23 @@
 #include "base/values.h"
 #include "chrome/test/chromedriver/chrome/devtools_client.h"
 #include "chrome/test/chromedriver/chrome/status.h"
+#include "chrome/test/chromedriver/chrome/version.h"
 
-NavigationTracker::NavigationTracker(DevToolsClient* client, int blink_revision)
+NavigationTracker::NavigationTracker(DevToolsClient* client,
+                                     const BrowserInfo* browser_info)
     : client_(client),
       loading_state_(kUnknown),
-      blink_revision_(blink_revision),
+      browser_info_(browser_info),
       num_frames_pending_(0) {
   client_->AddListener(this);
 }
 
 NavigationTracker::NavigationTracker(DevToolsClient* client,
                                      LoadingState known_state,
-                                     int blink_revision)
+                                     const BrowserInfo* browser_info)
     : client_(client),
       loading_state_(known_state),
-      blink_revision_(blink_revision),
+      browser_info_(browser_info),
       num_frames_pending_(0) {
   client_->AddListener(this);
 }
@@ -88,18 +90,30 @@
     loading_state_ = kLoading;
     num_frames_pending_++;
   } else if (method == "Page.frameStoppedLoading") {
-    // Chrome 35.0.1916.x and earlier does not send Page.frameStoppedLoading
-    // until all frames have run their onLoad handlers (including frames created
-    // during the handlers).  When it does, it only sends one stopped event for
-    // all frames.
+    // Versions of Blink before revision 170248 sent a single
+    // Page.frameStoppedLoading event per page, but 170248 and newer revisions
+    // only send one event for each frame on the page.
     //
-    // This was introduced in blink revision 170248, which was rolled into the
-    // chromium tree in revision 260203.
-    //
-    // TODO(samuong): we can get rid of this once we stop supporting Chrome 35,
-    // which will be when Chrome 39 is released.
+    // This change was rolled into the Chromium tree in revision 260203.
+    // Versions of Chrome with build number 1916 and earlier do not contain this
+    // change.
+    bool expecting_single_stop_event = false;
+
+    if (browser_info_->browser_name == "chrome") {
+      // If we're talking to a version of Chrome with an old build number, we
+      // are using a branched version of Blink which does not contain 170248
+      // (even if blink_revision > 170248).
+      expecting_single_stop_event = browser_info_->build_no <= 1916;
+    } else {
+      // If we're talking to a non-Chrome embedder (e.g. Content Shell, Android
+      // WebView), assume that the browser does not use a branched version of
+      // Blink.
+      expecting_single_stop_event = browser_info_->blink_revision < 170248;
+    }
+
     num_frames_pending_--;
-    if (num_frames_pending_ <= 0 || blink_revision_ < 170248) {
+
+    if (num_frames_pending_ <= 0 || expecting_single_stop_event) {
       num_frames_pending_ = 0;
       loading_state_ = kNotLoading;
     }
diff --git a/chrome/test/chromedriver/chrome/navigation_tracker.h b/chrome/test/chromedriver/chrome/navigation_tracker.h
index 0e0ab5e..e6d198d 100644
--- a/chrome/test/chromedriver/chrome/navigation_tracker.h
+++ b/chrome/test/chromedriver/chrome/navigation_tracker.h
@@ -10,6 +10,7 @@
 
 #include "base/basictypes.h"
 #include "base/compiler_specific.h"
+#include "base/memory/scoped_ptr.h"
 #include "chrome/test/chromedriver/chrome/devtools_event_listener.h"
 #include "chrome/test/chromedriver/chrome/status.h"
 
@@ -17,6 +18,7 @@
 class DictionaryValue;
 }
 
+struct BrowserInfo;
 class DevToolsClient;
 class Status;
 
@@ -29,10 +31,12 @@
     kNotLoading,
   };
 
-  NavigationTracker(DevToolsClient* client, int blink_revision);
+  NavigationTracker(DevToolsClient* client, const BrowserInfo* browser_info);
+
   NavigationTracker(DevToolsClient* client,
                     LoadingState known_state,
-                    int blink_revision);
+                    const BrowserInfo* browser_info);
+
   virtual ~NavigationTracker();
 
   // Gets whether a navigation is pending for the specified frame. |frame_id|
@@ -50,7 +54,7 @@
  private:
   DevToolsClient* client_;
   LoadingState loading_state_;
-  int blink_revision_;
+  const BrowserInfo* browser_info_;
   int num_frames_pending_;
   std::set<std::string> scheduled_frame_set_;
 
diff --git a/chrome/test/chromedriver/chrome/navigation_tracker_unittest.cc b/chrome/test/chromedriver/chrome/navigation_tracker_unittest.cc
index 24c6819..e2f333a 100644
--- a/chrome/test/chromedriver/chrome/navigation_tracker_unittest.cc
+++ b/chrome/test/chromedriver/chrome/navigation_tracker_unittest.cc
@@ -10,16 +10,11 @@
 #include "chrome/test/chromedriver/chrome/navigation_tracker.h"
 #include "chrome/test/chromedriver/chrome/status.h"
 #include "chrome/test/chromedriver/chrome/stub_devtools_client.h"
+#include "chrome/test/chromedriver/chrome/version.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace {
 
-// NavigationTracker::OnEvent handles the Page.frameStoppedLoading event
-// differently, depending on the blink revision. See the comment in that
-// function for details.
-static const int kOld = 170247;
-static const int kNew = 170248;
-
 void AssertPendingState(NavigationTracker* tracker,
                         const std::string& frame_id,
                         bool expected_is_pending) {
@@ -28,11 +23,64 @@
   ASSERT_EQ(expected_is_pending, is_pending);
 }
 
+void AssertTrackerExpectsSingleStopEvent(BrowserInfo* browser_info) {
+  StubDevToolsClient client;
+  NavigationTracker tracker(&client, browser_info);
+  base::DictionaryValue params;
+
+  // num_frames_pending_ == 0
+  ASSERT_EQ(
+      kOk, tracker.OnEvent(&client, "Page.frameStartedLoading", params).code());
+  // num_frames_pending_ == 1
+  ASSERT_NO_FATAL_FAILURE(AssertPendingState(&tracker, "f", true));
+  ASSERT_EQ(
+      kOk, tracker.OnEvent(&client, "Page.frameStartedLoading", params).code());
+  // num_frames_pending_ == 2
+  ASSERT_NO_FATAL_FAILURE(AssertPendingState(&tracker, "f", true));
+  ASSERT_EQ(
+      kOk, tracker.OnEvent(&client, "Page.frameStoppedLoading", params).code());
+  // num_frames_pending_ == 0
+  ASSERT_NO_FATAL_FAILURE(AssertPendingState(&tracker, "f", false));
+}
+
+void AssertTrackerExpectsMultipleStopEvents(BrowserInfo* browser_info) {
+  StubDevToolsClient client;
+  NavigationTracker tracker(&client, browser_info);
+  base::DictionaryValue params;
+
+  // num_frames_pending_ == 0
+  ASSERT_EQ(
+      kOk, tracker.OnEvent(&client, "Page.frameStartedLoading", params).code());
+  // num_frames_pending_ == 1
+  ASSERT_NO_FATAL_FAILURE(AssertPendingState(&tracker, "f", true));
+  ASSERT_EQ(
+      kOk, tracker.OnEvent(&client, "Page.frameStartedLoading", params).code());
+  // num_frames_pending_ == 2
+  ASSERT_NO_FATAL_FAILURE(AssertPendingState(&tracker, "f", true));
+  ASSERT_EQ(
+      kOk, tracker.OnEvent(&client, "Page.frameStoppedLoading", params).code());
+  // num_frames_pending_ == 1
+  ASSERT_NO_FATAL_FAILURE(AssertPendingState(&tracker, "f", true));
+  ASSERT_EQ(
+      kOk, tracker.OnEvent(&client, "Page.frameStoppedLoading", params).code());
+  // num_frames_pending_ == 0
+  ASSERT_NO_FATAL_FAILURE(AssertPendingState(&tracker, "f", false));
+  ASSERT_EQ(
+      kOk, tracker.OnEvent(&client, "Page.frameStoppedLoading", params).code());
+  // num_frames_pending_ == 0
+  ASSERT_NO_FATAL_FAILURE(AssertPendingState(&tracker, "f", false));
+  ASSERT_EQ(
+      kOk, tracker.OnEvent(&client, "Page.frameStartedLoading", params).code());
+  // num_frames_pending_ == 1
+  ASSERT_NO_FATAL_FAILURE(AssertPendingState(&tracker, "f", true));
+}
+
 }  // namespace
 
 TEST(NavigationTracker, FrameLoadStartStop) {
   StubDevToolsClient client;
-  NavigationTracker tracker(&client, kNew);
+  BrowserInfo browser_info;
+  NavigationTracker tracker(&client, &browser_info);
 
   base::DictionaryValue params;
   ASSERT_EQ(
@@ -43,61 +91,31 @@
   ASSERT_NO_FATAL_FAILURE(AssertPendingState(&tracker, "f", false));
 }
 
-TEST(NavigationTracker, MultipleFramesLoadWithOldDevtools) {
-  StubDevToolsClient client;
-  NavigationTracker tracker(&client, kOld);
-  base::DictionaryValue params;
+// NavigationTracker::OnEvent handles the Page.frameStoppedLoading event
+// differently, depending on the browser and blink version. See the comment in
+// NavigationTracker::OnEvent for details.
 
-  // num_frames_pending_ == 0
-  ASSERT_EQ(
-      kOk, tracker.OnEvent(&client, "Page.frameStartedLoading", params).code());
-  // num_frames_pending_ == 1
-  ASSERT_NO_FATAL_FAILURE(AssertPendingState(&tracker, "f", true));
-  ASSERT_EQ(
-      kOk, tracker.OnEvent(&client, "Page.frameStartedLoading", params).code());
-  // num_frames_pending_ == 2
-  ASSERT_NO_FATAL_FAILURE(AssertPendingState(&tracker, "f", true));
-  ASSERT_EQ(
-      kOk, tracker.OnEvent(&client, "Page.frameStoppedLoading", params).code());
-  // num_frames_pending_ == 0
-  ASSERT_NO_FATAL_FAILURE(AssertPendingState(&tracker, "f", false));
+TEST(NavigationTracker, MultipleFramesLoadOldDevtools) {
+  BrowserInfo kOldChromeWithNewBlink("chrome", std::string(), 1916, 170248);
+  AssertTrackerExpectsSingleStopEvent(&kOldChromeWithNewBlink);
+
+  BrowserInfo kWebViewWithOldBlink("webview", std::string(), 9999, 170247);
+  AssertTrackerExpectsSingleStopEvent(&kWebViewWithOldBlink);
 }
 
 TEST(NavigationTracker, MultipleFramesLoad) {
-  StubDevToolsClient client;
-  NavigationTracker tracker(&client, kNew);
-  base::DictionaryValue params;
+  BrowserInfo kNewChromeWithNewBlink("chrome", std::string(), 1917, 170248);
+  AssertTrackerExpectsMultipleStopEvents(&kNewChromeWithNewBlink);
 
-  // num_frames_pending_ == 0
-  ASSERT_EQ(
-      kOk, tracker.OnEvent(&client, "Page.frameStartedLoading", params).code());
-  // num_frames_pending_ == 1
-  ASSERT_NO_FATAL_FAILURE(AssertPendingState(&tracker, "f", true));
-  ASSERT_EQ(
-      kOk, tracker.OnEvent(&client, "Page.frameStartedLoading", params).code());
-  // num_frames_pending_ == 2
-  ASSERT_NO_FATAL_FAILURE(AssertPendingState(&tracker, "f", true));
-  ASSERT_EQ(
-      kOk, tracker.OnEvent(&client, "Page.frameStoppedLoading", params).code());
-  // num_frames_pending_ == 1
-  ASSERT_NO_FATAL_FAILURE(AssertPendingState(&tracker, "f", true));
-  ASSERT_EQ(
-      kOk, tracker.OnEvent(&client, "Page.frameStoppedLoading", params).code());
-  // num_frames_pending_ == 0
-  ASSERT_NO_FATAL_FAILURE(AssertPendingState(&tracker, "f", false));
-  ASSERT_EQ(
-      kOk, tracker.OnEvent(&client, "Page.frameStoppedLoading", params).code());
-  // num_frames_pending_ == 0
-  ASSERT_NO_FATAL_FAILURE(AssertPendingState(&tracker, "f", false));
-  ASSERT_EQ(
-      kOk, tracker.OnEvent(&client, "Page.frameStartedLoading", params).code());
-  // num_frames_pending_ == 1
-  ASSERT_NO_FATAL_FAILURE(AssertPendingState(&tracker, "f", true));
+  BrowserInfo kWebViewWithNewBlink("webview", std::string(), 9999, 170248);
+  AssertTrackerExpectsMultipleStopEvents(&kWebViewWithNewBlink);
 }
 
 TEST(NavigationTracker, NavigationScheduledThenLoaded) {
   StubDevToolsClient client;
-  NavigationTracker tracker(&client, NavigationTracker::kNotLoading, kNew);
+  BrowserInfo browser_info;
+  NavigationTracker tracker(
+      &client, NavigationTracker::kNotLoading, &browser_info);
   base::DictionaryValue params;
   params.SetString("frameId", "f");
   base::DictionaryValue params_scheduled;
@@ -124,7 +142,9 @@
 
 TEST(NavigationTracker, NavigationScheduledForOtherFrame) {
   StubDevToolsClient client;
-  NavigationTracker tracker(&client, NavigationTracker::kNotLoading, kNew);
+  BrowserInfo browser_info;
+  NavigationTracker tracker(
+      &client, NavigationTracker::kNotLoading, &browser_info);
   base::DictionaryValue params_scheduled;
   params_scheduled.SetInteger("delay", 0);
   params_scheduled.SetString("frameId", "other");
@@ -138,7 +158,9 @@
 
 TEST(NavigationTracker, NavigationScheduledThenCancelled) {
   StubDevToolsClient client;
-  NavigationTracker tracker(&client, NavigationTracker::kNotLoading, kNew);
+  BrowserInfo browser_info;
+  NavigationTracker tracker(
+      &client, NavigationTracker::kNotLoading, &browser_info);
   base::DictionaryValue params;
   params.SetString("frameId", "f");
   base::DictionaryValue params_scheduled;
@@ -159,7 +181,9 @@
 
 TEST(NavigationTracker, NavigationScheduledTooFarAway) {
   StubDevToolsClient client;
-  NavigationTracker tracker(&client, NavigationTracker::kNotLoading, kNew);
+  BrowserInfo browser_info;
+  NavigationTracker tracker(
+      &client, NavigationTracker::kNotLoading, &browser_info);
 
   base::DictionaryValue params_scheduled;
   params_scheduled.SetInteger("delay", 10);
@@ -173,7 +197,9 @@
 
 TEST(NavigationTracker, DiscardScheduledNavigationsOnMainFrameCommit) {
   StubDevToolsClient client;
-  NavigationTracker tracker(&client, NavigationTracker::kNotLoading, kNew);
+  BrowserInfo browser_info;
+  NavigationTracker tracker(
+      &client, NavigationTracker::kNotLoading, &browser_info);
 
   base::DictionaryValue params_scheduled;
   params_scheduled.SetString("frameId", "subframe");
@@ -216,7 +242,8 @@
 
 TEST(NavigationTracker, UnknownStateFailsToDetermineState) {
   FailToEvalScriptDevToolsClient client;
-  NavigationTracker tracker(&client, kNew);
+  BrowserInfo browser_info;
+  NavigationTracker tracker(&client, &browser_info);
   bool is_pending;
   ASSERT_EQ(kUnknownError,
             tracker.IsPendingNavigation("f", &is_pending).code());
@@ -264,7 +291,8 @@
 TEST(NavigationTracker, UnknownStateForcesStart) {
   base::DictionaryValue params;
   DeterminingLoadStateDevToolsClient client(true, std::string(), &params);
-  NavigationTracker tracker(&client, kNew);
+  BrowserInfo browser_info;
+  NavigationTracker tracker(&client, &browser_info);
   ASSERT_NO_FATAL_FAILURE(AssertPendingState(&tracker, "f", true));
 }
 
@@ -272,7 +300,8 @@
   base::DictionaryValue params;
   DeterminingLoadStateDevToolsClient client(
       true, "Page.frameStoppedLoading", &params);
-  NavigationTracker tracker(&client, kNew);
+  BrowserInfo browser_info;
+  NavigationTracker tracker(&client, &browser_info);
   ASSERT_NO_FATAL_FAILURE(AssertPendingState(&tracker, "f", false));
 }
 
@@ -280,7 +309,9 @@
   base::DictionaryValue params;
   DeterminingLoadStateDevToolsClient client(
       true, "Page.frameStoppedLoading", &params);
-  NavigationTracker tracker(&client, NavigationTracker::kNotLoading, kNew);
+  BrowserInfo browser_info;
+  NavigationTracker tracker(
+      &client, NavigationTracker::kNotLoading, &browser_info);
   tracker.OnCommandSuccess(&client, "Page.navigate");
   ASSERT_NO_FATAL_FAILURE(AssertPendingState(&tracker, "f", false));
 }
@@ -288,7 +319,9 @@
 TEST(NavigationTracker, OnSuccessfulNavigateStillWaiting) {
   base::DictionaryValue params;
   DeterminingLoadStateDevToolsClient client(true, std::string(), &params);
-  NavigationTracker tracker(&client, NavigationTracker::kNotLoading, kNew);
+  BrowserInfo browser_info;
+  NavigationTracker tracker(
+      &client, NavigationTracker::kNotLoading, &browser_info);
   tracker.OnCommandSuccess(&client, "Page.navigate");
   ASSERT_NO_FATAL_FAILURE(AssertPendingState(&tracker, "f", true));
 }
diff --git a/chrome/test/chromedriver/chrome/stub_chrome.cc b/chrome/test/chromedriver/chrome/stub_chrome.cc
index 467b746..5e1cbe1 100644
--- a/chrome/test/chromedriver/chrome/stub_chrome.cc
+++ b/chrome/test/chromedriver/chrome/stub_chrome.cc
@@ -4,6 +4,7 @@
 
 #include "chrome/test/chromedriver/chrome/stub_chrome.h"
 #include "chrome/test/chromedriver/chrome/status.h"
+#include "chrome/test/chromedriver/chrome/version.h"
 #include "chrome/test/chromedriver/chrome/web_view.h"
 
 StubChrome::StubChrome() {}
@@ -14,16 +15,8 @@
   return NULL;
 }
 
-std::string StubChrome::GetVersion() {
-  return std::string();
-}
-
-int StubChrome::GetBuildNo() {
-  return 9999;
-}
-
-int StubChrome::GetBlinkRevision() {
-  return 999999;
+const BrowserInfo* StubChrome::GetBrowserInfo() {
+  return &browser_info_;
 }
 
 bool StubChrome::HasCrashedWebView() {
diff --git a/chrome/test/chromedriver/chrome/stub_chrome.h b/chrome/test/chromedriver/chrome/stub_chrome.h
index fcd7aa4..1e07aa0 100644
--- a/chrome/test/chromedriver/chrome/stub_chrome.h
+++ b/chrome/test/chromedriver/chrome/stub_chrome.h
@@ -8,7 +8,9 @@
 #include <list>
 
 #include "base/compiler_specific.h"
+#include "base/memory/scoped_ptr.h"
 #include "chrome/test/chromedriver/chrome/chrome.h"
+#include "chrome/test/chromedriver/chrome/version.h"
 
 class Status;
 class WebView;
@@ -20,9 +22,7 @@
 
   // Overridden from Chrome:
   virtual ChromeDesktopImpl* GetAsDesktop() OVERRIDE;
-  virtual std::string GetVersion() OVERRIDE;
-  virtual int GetBuildNo() OVERRIDE;
-  virtual int GetBlinkRevision() OVERRIDE;
+  virtual const BrowserInfo* GetBrowserInfo() OVERRIDE;
   virtual bool HasCrashedWebView() OVERRIDE;
   virtual Status GetWebViewIds(std::list<std::string>* web_view_ids) OVERRIDE;
   virtual Status GetWebViewById(const std::string& id,
@@ -31,6 +31,9 @@
   virtual Status ActivateWebView(const std::string& id) OVERRIDE;
   virtual std::string GetOperatingSystemName() OVERRIDE;
   virtual Status Quit() OVERRIDE;
+
+ private:
+  BrowserInfo browser_info_;
 };
 
 #endif  // CHROME_TEST_CHROMEDRIVER_CHROME_STUB_CHROME_H_
diff --git a/chrome/test/chromedriver/chrome/version.cc b/chrome/test/chromedriver/chrome/version.cc
index d3d13ac..44ec6cc 100644
--- a/chrome/test/chromedriver/chrome/version.cc
+++ b/chrome/test/chromedriver/chrome/version.cc
@@ -15,6 +15,31 @@
 
 const int kMinimumSupportedChromeBuildNo = kMinimumSupportedChromeVersion[2];
 
+// Content Shell and WebView have an empty product version and a fake user
+// agent. There's no way to detect the actual version, so unless specified we
+// assume it is tip of tree.
+static const int kToTBuildNo = 9999;
+
+// Similarly, if the Blink Revision isn't given then assume it is tip of tree.
+static const int kToTBlinkRevision = 999999;
+
+BrowserInfo::BrowserInfo()
+    : browser_name(std::string()),
+      browser_version(std::string()),
+      build_no(kToTBuildNo),
+      blink_revision(kToTBlinkRevision) {
+}
+
+BrowserInfo::BrowserInfo(std::string browser_name,
+                         std::string browser_version,
+                         int build_no,
+                         int blink_revision)
+    : browser_name(browser_name),
+      browser_version(browser_version),
+      build_no(build_no),
+      blink_revision(blink_revision) {
+}
+
 std::string GetMinimumSupportedChromeVersion() {
   return base::StringPrintf(
       "%d.%d.%d.%d",
diff --git a/chrome/test/chromedriver/chrome/version.h b/chrome/test/chromedriver/chrome/version.h
index 1618b97..39ca4e9 100644
--- a/chrome/test/chromedriver/chrome/version.h
+++ b/chrome/test/chromedriver/chrome/version.h
@@ -7,6 +7,19 @@
 
 #include <string>
 
+struct BrowserInfo {
+  BrowserInfo();
+  BrowserInfo(std::string browser_name_,
+              std::string browser_version_,
+              int build_no_,
+              int blink_revision_);
+
+  std::string browser_name;
+  std::string browser_version;
+  int build_no;
+  int blink_revision;
+};
+
 extern const int kMinimumSupportedChromeBuildNo;
 
 std::string GetMinimumSupportedChromeVersion();
diff --git a/chrome/test/chromedriver/chrome/web_view_impl.cc b/chrome/test/chromedriver/chrome/web_view_impl.cc
index 8f9bb32..052ceb4 100644
--- a/chrome/test/chromedriver/chrome/web_view_impl.cc
+++ b/chrome/test/chromedriver/chrome/web_view_impl.cc
@@ -24,6 +24,7 @@
 #include "chrome/test/chromedriver/chrome/navigation_tracker.h"
 #include "chrome/test/chromedriver/chrome/status.h"
 #include "chrome/test/chromedriver/chrome/ui_events.h"
+#include "chrome/test/chromedriver/chrome/version.h"
 
 namespace {
 
@@ -112,14 +113,13 @@
 }  // namespace
 
 WebViewImpl::WebViewImpl(const std::string& id,
-                         int build_no,
-                         int blink_revision,
+                         const BrowserInfo* browser_info,
                          scoped_ptr<DevToolsClient> client)
     : id_(id),
-      build_no_(build_no),
+      browser_info_(browser_info),
       dom_tracker_(new DomTracker(client.get())),
       frame_tracker_(new FrameTracker(client.get())),
-      navigation_tracker_(new NavigationTracker(client.get(), blink_revision)),
+      navigation_tracker_(new NavigationTracker(client.get(), browser_info)),
       dialog_manager_(new JavaScriptDialogManager(client.get())),
       geolocation_override_manager_(
           new GeolocationOverrideManager(client.get())),
@@ -245,7 +245,7 @@
     Status status = client_->SendCommand("Input.dispatchMouseEvent", params);
     if (status.IsError())
       return status;
-    if (build_no_ < 1569 && it->button == kRightMouseButton &&
+    if (browser_info_->build_no < 1569 && it->button == kRightMouseButton &&
         it->type == kReleasedMouseEventType) {
       base::ListValue args;
       args.AppendInteger(it->x);
diff --git a/chrome/test/chromedriver/chrome/web_view_impl.h b/chrome/test/chromedriver/chrome/web_view_impl.h
index e1f7c66..df33053 100644
--- a/chrome/test/chromedriver/chrome/web_view_impl.h
+++ b/chrome/test/chromedriver/chrome/web_view_impl.h
@@ -19,6 +19,7 @@
 class Value;
 }
 
+struct BrowserInfo;
 class DebuggerTracker;
 class DevToolsClient;
 class DomTracker;
@@ -33,8 +34,7 @@
 class WebViewImpl : public WebView {
  public:
   WebViewImpl(const std::string& id,
-              int build_no,
-              int blink_revision,
+              const BrowserInfo* browser_info,
               scoped_ptr<DevToolsClient> client);
   virtual ~WebViewImpl();
 
@@ -100,7 +100,7 @@
   Status IsNotPendingNavigation(const std::string& frame_id,
                                 bool* is_not_pending);
   std::string id_;
-  int build_no_;
+  const BrowserInfo* browser_info_;
   scoped_ptr<DomTracker> dom_tracker_;
   scoped_ptr<FrameTracker> frame_tracker_;
   scoped_ptr<NavigationTracker> navigation_tracker_;
diff --git a/chrome/test/chromedriver/chrome_launcher.cc b/chrome/test/chromedriver/chrome_launcher.cc
index 24da0bc..ffc2428 100644
--- a/chrome/test/chromedriver/chrome_launcher.cc
+++ b/chrome/test/chromedriver/chrome_launcher.cc
@@ -164,7 +164,7 @@
   Status status = client->Init(deadline - base::TimeTicks::Now());
   if (status.IsError())
     return status;
-  if (client->build_no() < kMinimumSupportedChromeBuildNo) {
+  if (client->browser_info()->build_no < kMinimumSupportedChromeBuildNo) {
     return Status(kUnknownError, "Chrome version must be >= " +
         GetMinimumSupportedChromeVersion());
   }
diff --git a/chrome/test/chromedriver/commands.cc b/chrome/test/chromedriver/commands.cc
index af71207..25a7d69 100644
--- a/chrome/test/chromedriver/commands.cc
+++ b/chrome/test/chromedriver/commands.cc
@@ -21,6 +21,7 @@
 #include "chrome/test/chromedriver/capabilities.h"
 #include "chrome/test/chromedriver/chrome/chrome.h"
 #include "chrome/test/chromedriver/chrome/status.h"
+#include "chrome/test/chromedriver/chrome/version.h"
 #include "chrome/test/chromedriver/logging.h"
 #include "chrome/test/chromedriver/session.h"
 #include "chrome/test/chromedriver/session_thread_map.h"
@@ -55,7 +56,7 @@
   if (new_id.empty())
     new_id = GenerateId();
   scoped_ptr<Session> session(new Session(new_id));
-  scoped_ptr<base::Thread> thread(new base::Thread(new_id.c_str()));
+  scoped_ptr<base::Thread> thread(new base::Thread(new_id));
   if (!thread->Start()) {
     callback.Run(
         Status(kUnknownError, "failed to start a thread for the new session"),
@@ -178,8 +179,9 @@
       }
     }
     if (status.IsError()) {
-      status.AddDetails(
-          "Session info: chrome=" + session->chrome->GetVersion());
+      const BrowserInfo* browser_info = session->chrome->GetBrowserInfo();
+      status.AddDetails("Session info: " + browser_info->browser_name + "=" +
+                        browser_info->browser_version);
     }
   }
 
diff --git a/chrome/test/chromedriver/element_commands.cc b/chrome/test/chromedriver/element_commands.cc
index ac7585d..c140704 100644
--- a/chrome/test/chromedriver/element_commands.cc
+++ b/chrome/test/chromedriver/element_commands.cc
@@ -20,6 +20,7 @@
 #include "chrome/test/chromedriver/chrome/js.h"
 #include "chrome/test/chromedriver/chrome/status.h"
 #include "chrome/test/chromedriver/chrome/ui_events.h"
+#include "chrome/test/chromedriver/chrome/version.h"
 #include "chrome/test/chromedriver/chrome/web_view.h"
 #include "chrome/test/chromedriver/element_util.h"
 #include "chrome/test/chromedriver/session.h"
@@ -202,7 +203,7 @@
     const base::DictionaryValue& params,
     scoped_ptr<base::Value>* value) {
   // Fall back to javascript atom for pre-m30 Chrome.
-  if (session->chrome->GetBuildNo() < 1576)
+  if (session->chrome->GetBrowserInfo()->build_no < 1576)
     return ExecuteTouchSingleTapAtom(
         session, web_view, element_id, params, value);
 
diff --git a/chrome/test/chromedriver/element_util.cc b/chrome/test/chromedriver/element_util.cc
index fc27c48..9b15fa5 100644
--- a/chrome/test/chromedriver/element_util.cc
+++ b/chrome/test/chromedriver/element_util.cc
@@ -14,6 +14,7 @@
 #include "chrome/test/chromedriver/chrome/chrome.h"
 #include "chrome/test/chromedriver/chrome/js.h"
 #include "chrome/test/chromedriver/chrome/status.h"
+#include "chrome/test/chromedriver/chrome/version.h"
 #include "chrome/test/chromedriver/chrome/web_view.h"
 #include "chrome/test/chromedriver/session.h"
 #include "third_party/webdriver/atoms.h"
@@ -393,8 +394,8 @@
     return status;
 
   std::string tmp_element_id = element_id;
-  if (tag_name == "area" && session->chrome->GetBuildNo() < 1799 &&
-      session->chrome->GetBuildNo() >= 1666) {
+  int build_no = session->chrome->GetBrowserInfo()->build_no;
+  if (tag_name == "area" && build_no < 1799 && build_no >= 1666) {
     // This is to skip clickable verification for <area>.
     // The problem is caused by document.ElementFromPoint(crbug.com/338601).
     // It was introduced by blink r159012, which rolled into chromium r227489.
diff --git a/chrome/test/chromedriver/server/http_handler.cc b/chrome/test/chromedriver/server/http_handler.cc
index 6b6c9ae..1d8baf0 100644
--- a/chrome/test/chromedriver/server/http_handler.cc
+++ b/chrome/test/chromedriver/server/http_handler.cc
@@ -619,7 +619,7 @@
     if (!parsed_body || !parsed_body->GetAsDictionary(&body_params)) {
       scoped_ptr<net::HttpServerResponseInfo> response(
           new net::HttpServerResponseInfo(net::HTTP_BAD_REQUEST));
-      response->SetBody("missing command parameters", "test/plain");
+      response->SetBody("missing command parameters", "text/plain");
       send_response_func.Run(response.Pass());
       return;
     }
diff --git a/chrome/test/chromedriver/session_commands.cc b/chrome/test/chromedriver/session_commands.cc
index b9c25ae..b0ad052 100644
--- a/chrome/test/chromedriver/session_commands.cc
+++ b/chrome/test/chromedriver/session_commands.cc
@@ -25,6 +25,7 @@
 #include "chrome/test/chromedriver/chrome/devtools_event_listener.h"
 #include "chrome/test/chromedriver/chrome/geoposition.h"
 #include "chrome/test/chromedriver/chrome/status.h"
+#include "chrome/test/chromedriver/chrome/version.h"
 #include "chrome/test/chromedriver/chrome/web_view.h"
 #include "chrome/test/chromedriver/chrome_launcher.h"
 #include "chrome/test/chromedriver/logging.h"
@@ -71,7 +72,7 @@
 scoped_ptr<base::DictionaryValue> CreateCapabilities(Chrome* chrome) {
   scoped_ptr<base::DictionaryValue> caps(new base::DictionaryValue());
   caps->SetString("browserName", "chrome");
-  caps->SetString("version", chrome->GetVersion());
+  caps->SetString("version", chrome->GetBrowserInfo()->browser_version);
   caps->SetString("chrome.chromedriverVersion", kChromeDriverVersion);
   caps->SetString("platform", chrome->GetOperatingSystemName());
   caps->SetBoolean("javascriptEnabled", true);
diff --git a/chrome/test/gpu/gpu_feature_browsertest.cc b/chrome/test/gpu/gpu_feature_browsertest.cc
index 6cc7f9c..8bed26b 100644
--- a/chrome/test/gpu/gpu_feature_browsertest.cc
+++ b/chrome/test/gpu/gpu_feature_browsertest.cc
@@ -17,6 +17,7 @@
 #include "chrome/test/base/tracing.h"
 #include "chrome/test/base/ui_test_utils.h"
 #include "content/public/browser/gpu_data_manager.h"
+#include "content/public/common/content_client.h"
 #include "content/public/common/content_switches.h"
 #include "content/public/test/browser_test_utils.h"
 #include "gpu/config/gpu_feature_type.h"
@@ -41,14 +42,24 @@
 
 namespace {
 
-const char kSwapBuffersEvent[] = "SwapBuffers";
 const char kAcceleratedCanvasCreationEvent[] = "Canvas2DLayerBridgeCreation";
 const char kWebGLCreationEvent[] = "DrawingBufferCreation";
 
+class FakeContentClient : public content::ContentClient {
+};
+
 class GpuFeatureTest : public InProcessBrowserTest {
  public:
   GpuFeatureTest() : category_patterns_("test_gpu") {}
 
+  virtual void SetUp() OVERRIDE {
+    content::SetContentClient(&content_client_);
+  }
+
+  virtual void TearDown() OVERRIDE {
+    content::SetContentClient(NULL);
+  }
+
   virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
     base::FilePath test_dir;
     ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_dir));
@@ -160,6 +171,7 @@
   scoped_ptr<TraceAnalyzer> analyzer_;
   std::string category_patterns_;
   std::string trace_events_json_;
+  FakeContentClient content_client_;
 };
 
 class GpuFeaturePixelTest : public GpuFeatureTest {
@@ -170,91 +182,39 @@
   }
 };
 
-#if defined(OS_WIN) || defined(ADDRESS_SANITIZER) || defined(USE_AURA) || \
-    defined(OS_MACOSX)
-// This test is flaky on Windows. http://crbug.com/177113
-// Also fails under AddressSanitizer. http://crbug.com/185178
-// It fundamentally doesn't test the right thing on Aura.
-// http://crbug.com/280675
-// This does not work with software compositing on Mac. http://crbug.com/286038
-#define MAYBE_AcceleratedCompositingAllowed DISABLED_AcceleratedCompositingAllowed
-#else
-#define MAYBE_AcceleratedCompositingAllowed AcceleratedCompositingAllowed
-#endif
-
-IN_PROC_BROWSER_TEST_F(GpuFeatureTest, MAYBE_AcceleratedCompositingAllowed) {
-  EXPECT_FALSE(GpuDataManager::GetInstance()->IsFeatureBlacklisted(
-      gpu::GPU_FEATURE_TYPE_ACCELERATED_COMPOSITING));
-
-  const base::FilePath url(FILE_PATH_LITERAL("feature_compositing.html"));
-  RunEventTest(url, kSwapBuffersEvent, true);
-}
-
-class AcceleratedCompositingBlockedTest : public GpuFeatureTest {
+class GpuCompositingBlockedTest : public GpuFeatureTest {
  public:
   virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
     GpuFeatureTest::SetUpInProcessBrowserTestFixture();
     const std::string json_blacklist =
-      "{\n"
-      "  \"name\": \"gpu blacklist\",\n"
-      "  \"version\": \"1.0\",\n"
-      "  \"entries\": [\n"
-      "    {\n"
-      "      \"id\": 1,\n"
-      "      \"features\": [\n"
-      "        \"accelerated_compositing\"\n"
-      "      ]\n"
-      "    }\n"
-      "  ]\n"
-      "}";
+        "{\n"
+        "  \"name\": \"gpu blacklist\",\n"
+        "  \"version\": \"1.0\",\n"
+        "  \"entries\": [\n"
+        "    {\n"
+        "      \"id\": 1,\n"
+        "      \"features\": [\n"
+        "        \"gpu_compositing\"\n"
+        "      ]\n"
+        "    }\n"
+        "  ]\n"
+        "}";
     SetupBlacklist(json_blacklist);
   }
 };
 
-#if defined(USE_AURA) || defined(OS_MACOSX)
-// Compositing is always on for Aura and Mac.
-#define MAYBE_AcceleratedCompositingBlocked DISABLED_AcceleratedCompositingBlocked
-#else
-// TODO(jam): http://crbug.com/350550
-#define MAYBE_AcceleratedCompositingBlocked DISABLED_AcceleratedCompositingBlocked
-#endif
-
-IN_PROC_BROWSER_TEST_F(AcceleratedCompositingBlockedTest,
-                       MAYBE_AcceleratedCompositingBlocked) {
+IN_PROC_BROWSER_TEST_F(GpuCompositingBlockedTest, GpuCompositingBlocked) {
   EXPECT_TRUE(GpuDataManager::GetInstance()->IsFeatureBlacklisted(
-      gpu::GPU_FEATURE_TYPE_ACCELERATED_COMPOSITING));
-
-  const base::FilePath url(FILE_PATH_LITERAL("feature_compositing.html"));
-  RunEventTest(url, kSwapBuffersEvent, false);
+      gpu::GPU_FEATURE_TYPE_GPU_COMPOSITING));
 }
 
-class AcceleratedCompositingTest : public GpuFeatureTest {
- public:
-  virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
-    GpuFeatureTest::SetUpCommandLine(command_line);
-    command_line->AppendSwitch(switches::kDisableAcceleratedCompositing);
-  }
-};
-
-#if defined(USE_AURA) || defined(OS_MACOSX)
-// Compositing is always on for Aura and Mac.
-#define MAYBE_AcceleratedCompositingDisabled DISABLED_AcceleratedCompositingDisabled
-#else
-#define MAYBE_AcceleratedCompositingDisabled AcceleratedCompositingDisabled
-#endif
-
-IN_PROC_BROWSER_TEST_F(AcceleratedCompositingTest,
-                       MAYBE_AcceleratedCompositingDisabled) {
-// Compositing is always on for Windows Aura.
-  const base::FilePath url(FILE_PATH_LITERAL("feature_compositing.html"));
-  RunEventTest(url, kSwapBuffersEvent, false);
-}
-
-// Times out: http://crbug.com/166060
-IN_PROC_BROWSER_TEST_F(GpuFeatureTest, DISABLED_WebGLAllowed) {
+IN_PROC_BROWSER_TEST_F(GpuFeatureTest, WebGLAllowed) {
   EXPECT_FALSE(GpuDataManager::GetInstance()->IsFeatureBlacklisted(
       gpu::GPU_FEATURE_TYPE_WEBGL));
 
+  // The below times out: http://crbug.com/166060
+  return;
+
   const base::FilePath url(FILE_PATH_LITERAL("feature_webgl.html"));
   RunEventTest(url, kWebGLCreationEvent, true);
 }
@@ -426,21 +386,6 @@
   RunTest(url, "\"SUCCESS\"", false);
 }
 
-class ThreadedCompositorTest : public GpuFeatureTest {
- public:
-  virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
-    GpuFeatureTest::SetUpCommandLine(command_line);
-    command_line->AppendSwitch(switches::kEnableThreadedCompositing);
-  }
-};
-
-// http://crbug.com/157985
-IN_PROC_BROWSER_TEST_F(ThreadedCompositorTest, DISABLED_ThreadedCompositor) {
-  const base::FilePath url(FILE_PATH_LITERAL("feature_compositing.html"));
-  RunEventTest(url, kSwapBuffersEvent, true);
-}
-
-
 #if defined(OS_WIN) || defined(OS_CHROMEOS) || defined(OS_MACOSX)
 // http://crbug.com/162343: flaky on Windows and Mac, failing on ChromiumOS.
 #define MAYBE_RafNoDamage DISABLED_RafNoDamage
diff --git a/chrome/test/gpu/webgl_infobar_browsertest.cc b/chrome/test/gpu/webgl_infobar_browsertest.cc
index 8040cae..2ebbb03 100644
--- a/chrome/test/gpu/webgl_infobar_browsertest.cc
+++ b/chrome/test/gpu/webgl_infobar_browsertest.cc
@@ -7,7 +7,6 @@
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/infobars/confirm_infobar_delegate.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_commands.h"
@@ -20,6 +19,7 @@
 #include "chrome/test/base/test_launcher_utils.h"
 #include "chrome/test/base/test_switches.h"
 #include "chrome/test/base/ui_test_utils.h"
+#include "components/infobars/core/infobar.h"
 #include "content/public/browser/gpu_data_manager.h"
 #include "content/public/browser/notification_service.h"
 #include "content/public/browser/notification_types.h"
@@ -132,7 +132,8 @@
   InfoBarService* infobar_service = InfoBarService::FromWebContents(
       browser()->tab_strip_model()->GetActiveWebContents());
   ASSERT_EQ(1u, infobar_service->infobar_count());
-  InfoBarDelegate* delegate = infobar_service->infobar_at(0)->delegate();
+  infobars::InfoBarDelegate* delegate =
+      infobar_service->infobar_at(0)->delegate();
   ASSERT_EQ(IDR_INFOBAR_3D_BLOCKED, delegate->GetIconID());
   delegate->AsConfirmInfoBarDelegate()->Cancel();
 
diff --git a/chrome/test/nacl/nacl_browsertest.cc b/chrome/test/nacl/nacl_browsertest.cc
index 2057ab2..9b6168c 100644
--- a/chrome/test/nacl/nacl_browsertest.cc
+++ b/chrome/test/nacl/nacl_browsertest.cc
@@ -28,10 +28,8 @@
 
 #if defined(OS_WIN)
 // crbug.com/98721
-#  define MAYBE_Crash DISABLED_Crash
 #  define MAYBE_SysconfNprocessorsOnln DISABLED_SysconfNprocessorsOnln
 #else
-#  define MAYBE_Crash Crash
 #  define MAYBE_SysconfNprocessorsOnln SysconfNprocessorsOnln
 #endif
 
@@ -114,6 +112,15 @@
 }
 #endif
 
+#if defined(OS_WIN)
+// crbug.com/98721
+#  define MAYBE_Crash DISABLED_Crash
+#elif defined(OS_LINUX)
+// crbug.com/366334
+#  define MAYBE_Crash DISABLED_Crash
+#else
+#  define MAYBE_Crash Crash
+#endif
 NACL_BROWSER_TEST_F(NaClBrowserTest, MAYBE_Crash, {
   RunNaClIntegrationTest(FILE_PATH_LITERAL("ppapi_crash.html"));
 })
diff --git a/chrome/test/ppapi/ppapi_browsertest.cc b/chrome/test/ppapi/ppapi_browsertest.cc
index 216824f..1f5f2f0 100644
--- a/chrome/test/ppapi/ppapi_browsertest.cc
+++ b/chrome/test/ppapi/ppapi_browsertest.cc
@@ -1181,6 +1181,26 @@
   RUN_AUDIO_SUBTESTS;
 }
 
+#define RUN_AUDIO_THREAD_CREATOR_SUBTESTS \
+  RunTestViaHTTP( \
+      LIST_TEST(Audio_AudioThreadCreatorIsRequired) \
+      LIST_TEST(Audio_AudioThreadCreatorIsCalled) \
+  )
+
+IN_PROC_BROWSER_TEST_F(PPAPINaClNewlibTest, AudioThreadCreator) {
+  RUN_AUDIO_THREAD_CREATOR_SUBTESTS;
+}
+IN_PROC_BROWSER_TEST_F(PPAPINaClGLibcTest, MAYBE_GLIBC(AudioThreadCreator)) {
+  RUN_AUDIO_THREAD_CREATOR_SUBTESTS;
+}
+IN_PROC_BROWSER_TEST_F(PPAPINaClPNaClTest, AudioThreadCreator) {
+  RUN_AUDIO_THREAD_CREATOR_SUBTESTS;
+}
+IN_PROC_BROWSER_TEST_F(PPAPINaClPNaClNonSfiTest,
+                       MAYBE_NONSFI(AudioThreadCreator)) {
+  RUN_AUDIO_THREAD_CREATOR_SUBTESTS;
+}
+
 TEST_PPAPI_IN_PROCESS(View_CreatedVisible);
 TEST_PPAPI_OUT_OF_PROCESS(View_CreatedVisible);
 TEST_PPAPI_NACL(View_CreatedVisible);
diff --git a/chrome/test/ppapi/ppapi_test.cc b/chrome/test/ppapi/ppapi_test.cc
index 70a5bc1..8da58e6 100644
--- a/chrome/test/ppapi/ppapi_test.cc
+++ b/chrome/test/ppapi/ppapi_test.cc
@@ -12,7 +12,6 @@
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/content_settings/host_content_settings_map.h"
 #include "chrome/browser/infobars/confirm_infobar_delegate.h"
-#include "chrome/browser/infobars/infobar.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/browser.h"
@@ -21,6 +20,7 @@
 #include "chrome/common/chrome_switches.h"
 #include "chrome/test/base/test_switches.h"
 #include "chrome/test/base/ui_test_utils.h"
+#include "components/infobars/core/infobar.h"
 #include "components/nacl/common/nacl_switches.h"
 #include "content/public/browser/dom_operation_notification_details.h"
 #include "content/public/browser/notification_service.h"
@@ -116,7 +116,7 @@
     return;
   expecting_infobar_ = false;
 
-  InfoBar* infobar = infobar_service->infobar_at(0);
+  infobars::InfoBar* infobar = infobar_service->infobar_at(0);
   ConfirmInfoBarDelegate* delegate =
       infobar->delegate()->AsConfirmInfoBarDelegate();
   ASSERT_TRUE(delegate != NULL);
diff --git a/chrome/test/remoting/remote_desktop_browsertest.cc b/chrome/test/remoting/remote_desktop_browsertest.cc
index 098e8ae..fe2b80e 100644
--- a/chrome/test/remoting/remote_desktop_browsertest.cc
+++ b/chrome/test/remoting/remote_desktop_browsertest.cc
@@ -117,7 +117,7 @@
   installer->set_prompt_for_plugins(false);
 
   content::WindowedNotificationObserver observer(
-      chrome::NOTIFICATION_EXTENSION_LOADED,
+      chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
       content::NotificationService::AllSources());
 
   installer->Load(webapp_unpacked_);
diff --git a/chrome/tools/build/repack_locales.py b/chrome/tools/build/repack_locales.py
index 6dbcef5..3acaa04 100755
--- a/chrome/tools/build/repack_locales.py
+++ b/chrome/tools/build/repack_locales.py
@@ -101,6 +101,12 @@
     inputs.append(os.path.join(SHARE_INT_DIR, 'ui', 'app_locale_settings',
                   'app_locale_settings_%s.pak' % locale))
 
+    # For example:
+    # '<(SHARED_INTERMEDIATE_DIR)/extensions/strings/extensions_strings_da.pak
+    # TODO(jamescook): When Android stops building extensions code move this
+    # to the OS != 'ios' and OS != 'android' section below.
+    inputs.append(os.path.join(SHARE_INT_DIR, 'extensions', 'strings',
+                  'extensions_strings_%s.pak' % locale))
 
   if OS != 'ios' and OS != 'android':
     #e.g. '<(SHARED_INTERMEDIATE_DIR)/third_party/libaddressinput/
diff --git a/chrome/tools/check_grd_for_unused_strings.py b/chrome/tools/check_grd_for_unused_strings.py
index e0d9462..2ff3c90 100755
--- a/chrome/tools/check_grd_for_unused_strings.py
+++ b/chrome/tools/check_grd_for_unused_strings.py
@@ -151,6 +151,7 @@
       os.path.join(chrome_dir, 'renderer', 'resources',
                    'renderer_resources.grd'),
       os.path.join(device_base_dir, 'bluetooth', 'bluetooth_strings.grd'),
+      os.path.join(src_dir, 'extensions', 'extensions_strings.grd'),
       os.path.join(src_dir, 'ui', 'resources', 'ui_resources.grd'),
       os.path.join(src_dir, 'ui', 'webui', 'resources', 'webui_resources.grd'),
       os.path.join(ui_base_strings_dir, 'app_locale_settings.grd'),
@@ -166,6 +167,7 @@
       os.path.join(src_dir, 'components'),
       os.path.join(src_dir, 'content'),
       os.path.join(src_dir, 'device'),
+      os.path.join(src_dir, 'extensions'),
       os.path.join(src_dir, 'ui'),
       os.path.join(src_dir, 'views'),
       # nsNSSCertHelper.cpp has a bunch of ids
diff --git a/chrome/utility/chrome_content_utility_client.cc b/chrome/utility/chrome_content_utility_client.cc
index e3fb09a..7390adb 100644
--- a/chrome/utility/chrome_content_utility_client.cc
+++ b/chrome/utility/chrome_content_utility_client.cc
@@ -726,14 +726,6 @@
       page_number = total_page_count - 1 - page_number;
     }
 
-    bool rotate = false;
-
-    // Transform odd pages.
-    if (page_number % 2) {
-      rotate =
-          (bitmap_settings.odd_page_transform != printing::TRANSFORM_NORMAL);
-    }
-
     if (!g_pdf_lib.Get().RenderPDFPageToBitmap(data.data(),
                                                data.size(),
                                                page_number,
@@ -745,9 +737,36 @@
                                                autoupdate)) {
       return false;
     }
+
+    cloud_print::PwgHeaderInfo header_info;
+    header_info.dpi = settings.dpi();
+    header_info.total_pages = total_page_count;
+
+    // Transform odd pages.
+    if (page_number % 2) {
+      switch (bitmap_settings.odd_page_transform) {
+        case printing::TRANSFORM_NORMAL:
+          break;
+        case printing::TRANSFORM_ROTATE_180:
+          header_info.flipx = true;
+          header_info.flipy = true;
+          break;
+        case printing::TRANSFORM_FLIP_HORIZONTAL:
+          header_info.flipx = true;
+          break;
+        case printing::TRANSFORM_FLIP_VERTICAL:
+          header_info.flipy = true;
+          break;
+      }
+    }
+
+    if (bitmap_settings.rotate_all_pages) {
+      header_info.flipx = !header_info.flipx;
+      header_info.flipy = !header_info.flipy;
+    }
+
     std::string pwg_page;
-    if (!encoder.EncodePage(
-            image, settings.dpi(), total_page_count, &pwg_page, rotate))
+    if (!encoder.EncodePage(image, header_info, &pwg_page))
       return false;
     bytes_written = base::WritePlatformFileAtCurrentPos(bitmap_file,
                                                         pwg_page.data(),
diff --git a/chrome/utility/cloud_print/bitmap_image.cc b/chrome/utility/cloud_print/bitmap_image.cc
index 2a2cf9f..5d43ee7 100644
--- a/chrome/utility/cloud_print/bitmap_image.cc
+++ b/chrome/utility/cloud_print/bitmap_image.cc
@@ -2,6 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "base/logging.h"
 #include "chrome/utility/cloud_print/bitmap_image.h"
 
 namespace cloud_print {
@@ -24,4 +25,10 @@
   return kCurrentlySupportedNumberOfChannels;
 }
 
+const uint8* BitmapImage::GetPixel(const gfx::Point& point) const {
+  DCHECK_LT(point.x(), size_.width());
+  DCHECK_LT(point.y(), size_.height());
+  return data_.get() + (point.y() * size_.width() + point.x()) * channels();
+}
+
 }  // namespace cloud_print
diff --git a/chrome/utility/cloud_print/bitmap_image.h b/chrome/utility/cloud_print/bitmap_image.h
index 93af0cd..df06aab 100644
--- a/chrome/utility/cloud_print/bitmap_image.h
+++ b/chrome/utility/cloud_print/bitmap_image.h
@@ -6,6 +6,7 @@
 #define CHROME_UTILITY_CLOUD_PRINT_BITMAP_IMAGE_H_
 
 #include "base/memory/scoped_ptr.h"
+#include "ui/gfx/point.h"
 #include "ui/gfx/size.h"
 
 namespace cloud_print {
@@ -28,6 +29,8 @@
   const uint8* pixel_data() const { return data_.get(); }
   uint8* pixel_data() { return data_.get(); }
 
+  const uint8* GetPixel(const gfx::Point& point) const;
+
  private:
   gfx::Size size_;
   Colorspace colorspace_;
diff --git a/chrome/utility/cloud_print/pwg_encoder.cc b/chrome/utility/cloud_print/pwg_encoder.cc
index c4aeded..03eac5c 100644
--- a/chrome/utility/cloud_print/pwg_encoder.cc
+++ b/chrome/utility/cloud_print/pwg_encoder.cc
@@ -16,16 +16,21 @@
 namespace {
 
 const uint32 kBitsPerColor = 8;
-const uint32 kColorSpace = 19;  // sRGB.
 const uint32 kColorOrder = 0;  // chunky.
-const uint32 kNumColors = 3;
-const uint32 kBitsPerPixel = kNumColors * kBitsPerColor;
 
-const char kPwgKeyword[] = "RaS2";
+// Coefficients used to convert from RGB to monochrome.
+const uint32 kRedCoefficient = 2125;
+const uint32 kGreenCoefficient = 7154;
+const uint32 kBlueCoefficient = 0721;
+const uint32 kColorCoefficientDenominator = 10000;
+
+const char* kPwgKeyword = "RaS2";
 
 const uint32 kHeaderSize = 1796;
-const uint32 kHeaderHwResolutionHorizontal = 276;
-const uint32 kHeaderHwResolutionVertical = 280;
+const uint32 kHeaderCupsDuplex = 272;
+const uint32 kHeaderCupsHwResolutionHorizontal = 276;
+const uint32 kHeaderCupsHwResolutionVertical = 280;
+const uint32 kHeaderCupsTumble = 368;
 const uint32 kHeaderCupsWidth = 372;
 const uint32 kHeaderCupsHeight = 376;
 const uint32 kHeaderCupsBitsPerColor = 384;
@@ -35,174 +40,220 @@
 const uint32 kHeaderCupsColorSpace = 400;
 const uint32 kHeaderCupsNumColors = 420;
 const uint32 kHeaderPwgTotalPageCount = 452;
+const uint32 kHeaderPwgCrossFeedTransform = 456;
+const uint32 kHeaderPwgFeedTransform = 460;
 
 const int kPwgMaxPackedRows = 256;
 
 const int kPwgMaxPackedPixels = 128;
 
-inline int FlipIfNeeded(bool flip, int current, int total) {
-  return flip ? total - current : current;
+struct RGBA8 {
+  uint8 red;
+  uint8 green;
+  uint8 blue;
+  uint8 alpha;
+};
+
+struct BGRA8 {
+  uint8 blue;
+  uint8 green;
+  uint8 red;
+  uint8 alpha;
+};
+
+template <class InputStruct>
+inline void encodePixelToRGB(const void* pixel, std::string* output) {
+  const InputStruct* i = reinterpret_cast<const InputStruct*>(pixel);
+  output->push_back(static_cast<char>(i->red));
+  output->push_back(static_cast<char>(i->green));
+  output->push_back(static_cast<char>(i->blue));
+}
+
+template <class InputStruct>
+inline void encodePixelToMonochrome(const void* pixel, std::string* output) {
+  const InputStruct* i = reinterpret_cast<const InputStruct*>(pixel);
+  output->push_back(static_cast<char>((i->red * kRedCoefficient +
+                                       i->green * kGreenCoefficient +
+                                       i->blue * kBlueCoefficient) /
+                                      kColorCoefficientDenominator));
 }
 
 }  // namespace
 
 PwgEncoder::PwgEncoder() {}
 
-inline void encodePixelFromRGBA(const uint8* pixel, std::string* output) {
-  output->push_back(static_cast<char>(pixel[0]));
-  output->push_back(static_cast<char>(pixel[1]));
-  output->push_back(static_cast<char>(pixel[2]));
-}
-
-inline void encodePixelFromBGRA(const uint8* pixel, std::string* output) {
-  output->push_back(static_cast<char>(pixel[2]));
-  output->push_back(static_cast<char>(pixel[1]));
-  output->push_back(static_cast<char>(pixel[0]));
-}
-
 void PwgEncoder::EncodeDocumentHeader(std::string* output) const {
   output->clear();
   output->append(kPwgKeyword, 4);
 }
 
-void PwgEncoder::EncodePageHeader(const BitmapImage& image, const uint32 dpi,
-                                  const uint32 total_pages,
+void PwgEncoder::EncodePageHeader(const BitmapImage& image,
+                                  const PwgHeaderInfo& pwg_header_info,
                                   std::string* output) const {
   char header[kHeaderSize];
   memset(header, 0, kHeaderSize);
-  base::WriteBigEndian<uint32>(header + kHeaderHwResolutionHorizontal, dpi);
-  base::WriteBigEndian<uint32>(header + kHeaderHwResolutionVertical, dpi);
+
+  uint32 num_colors =
+      pwg_header_info.color_space == PwgHeaderInfo::SGRAY ? 1 : 3;
+  uint32 bits_per_pixel = num_colors * kBitsPerColor;
+
+  base::WriteBigEndian<uint32>(header + kHeaderCupsDuplex,
+                               pwg_header_info.duplex ? 1 : 0);
+  base::WriteBigEndian<uint32>(header + kHeaderCupsHwResolutionHorizontal,
+                               pwg_header_info.dpi);
+  base::WriteBigEndian<uint32>(header + kHeaderCupsHwResolutionVertical,
+                               pwg_header_info.dpi);
+  base::WriteBigEndian<uint32>(header + kHeaderCupsTumble,
+                               pwg_header_info.tumble ? 1 : 0);
   base::WriteBigEndian<uint32>(header + kHeaderCupsWidth, image.size().width());
   base::WriteBigEndian<uint32>(header + kHeaderCupsHeight,
                                image.size().height());
   base::WriteBigEndian<uint32>(header + kHeaderCupsBitsPerColor, kBitsPerColor);
-  base::WriteBigEndian<uint32>(header + kHeaderCupsBitsPerPixel, kBitsPerPixel);
+  base::WriteBigEndian<uint32>(header + kHeaderCupsBitsPerPixel,
+                               bits_per_pixel);
   base::WriteBigEndian<uint32>(header + kHeaderCupsBytesPerLine,
-                               (kBitsPerPixel * image.size().width() + 7) / 8);
+                               (bits_per_pixel * image.size().width() + 7) / 8);
   base::WriteBigEndian<uint32>(header + kHeaderCupsColorOrder, kColorOrder);
-  base::WriteBigEndian<uint32>(header + kHeaderCupsColorSpace, kColorSpace);
-  base::WriteBigEndian<uint32>(header + kHeaderCupsNumColors, kNumColors);
-  base::WriteBigEndian<uint32>(header + kHeaderPwgTotalPageCount, total_pages);
+  base::WriteBigEndian<uint32>(header + kHeaderCupsColorSpace,
+                               pwg_header_info.color_space);
+  base::WriteBigEndian<uint32>(header + kHeaderCupsNumColors, num_colors);
+  base::WriteBigEndian<uint32>(header + kHeaderPwgCrossFeedTransform,
+                               pwg_header_info.flipx ? -1 : 1);
+  base::WriteBigEndian<uint32>(header + kHeaderPwgFeedTransform,
+                               pwg_header_info.flipy ? -1 : 1);
+  base::WriteBigEndian<uint32>(header + kHeaderPwgTotalPageCount,
+                               pwg_header_info.total_pages);
   output->append(header, kHeaderSize);
 }
 
-bool PwgEncoder::EncodeRowFrom32Bit(const uint8* row, const int width,
-                                    const int color_space,
-                                    std::string* output) const {
-  void (*pixel_encoder)(const uint8*, std::string*);
-  switch (color_space) {
-    case BitmapImage::RGBA:
-      pixel_encoder = &encodePixelFromRGBA;
-      break;
-    case BitmapImage::BGRA:
-      pixel_encoder = &encodePixelFromBGRA;
-      break;
-    default:
-      LOG(ERROR) << "Unsupported colorspace.";
-      return false;
-  }
-
-  // Converts the list of uint8 to uint32 as every pixels contains 4 bytes
-  // of information and comparison of elements is easier. The actual management
-  // of the bytes of the pixel is done by template function P on the original
-  // array to avoid endian problems.
-  const uint32* pos = reinterpret_cast<const uint32*>(row);
-  const uint32* row_end = pos + width;
+template <typename InputStruct, class RandomAccessIterator>
+void PwgEncoder::EncodeRow(RandomAccessIterator pos,
+                           RandomAccessIterator row_end,
+                           bool monochrome,
+                           std::string* output) const {
   // According to PWG-raster, a sequence of N identical pixels (up to 128)
   // can be encoded by a byte N-1, followed by the information on
-  // that pixel. Any generic sequence of N pixels (up to 128) can be encoded
+  // that pixel. Any generic sequence of N pixels (up to 129) can be encoded
   // with (signed) byte 1-N, followed by the information on the N pixels.
   // Notice that for sequences of 1 pixel there is no difference between
   // the two encodings.
 
-  // It is usually better to encode every largest sequence of > 2 identical
-  // pixels together because it saves the most space. Every other pixel should
-  // be encoded in the smallest number of generic sequences.
+  // We encode every largest sequence of identical pixels together because it
+  // usually saves the most space. Every other pixel should be encoded in the
+  // smallest number of generic sequences.
+  // NOTE: the algorithm is not optimal especially in case of monochrome.
   while (pos != row_end) {
-    const uint32* it = pos + 1;
-    const uint32* end = std::min(pos + kPwgMaxPackedPixels, row_end);
+    RandomAccessIterator it = pos + 1;
+    RandomAccessIterator end = std::min(pos + kPwgMaxPackedPixels, row_end);
 
     // Counts how many identical pixels (up to 128).
     while (it != end && *pos == *it) {
-      it++;
+      ++it;
     }
     if (it != pos + 1) {  // More than one pixel
       output->push_back(static_cast<char>((it - pos) - 1));
-      pixel_encoder(reinterpret_cast<const uint8*>(pos), output);
+      if (monochrome)
+        encodePixelToMonochrome<InputStruct>(&*pos, output);
+      else
+        encodePixelToRGB<InputStruct>(&*pos, output);
       pos = it;
     } else {
-      // Finds how many pixels each different from the previous one (up to 128).
+      // Finds how many pixels there are each different from the previous one.
+      // IMPORTANT: even if sequences of different pixels can contain as many
+      // as 129 pixels, we restrict to 128 because some decoders don't manage
+      // it correctly. So iterating until it != end is correct.
       while (it != end && *it != *(it - 1)) {
-        it++;
+        ++it;
       }
       // Optimization: ignores the last pixel of the sequence if it is followed
       // by an identical pixel, as it is more convenient for it to be the start
       // of a new sequence of identical pixels. Notice that we don't compare
       // to end, but row_end.
       if (it != row_end && *it == *(it - 1)) {
-        it--;
+        --it;
       }
       output->push_back(static_cast<char>(1 - (it - pos)));
       while (pos != it) {
-        pixel_encoder(reinterpret_cast<const uint8*>(pos++), output);
+        if (monochrome)
+          encodePixelToMonochrome<InputStruct>(&*pos, output);
+        else
+          encodePixelToRGB<InputStruct>(&*pos, output);
+        ++pos;
       }
     }
   }
-  return true;
 }
 
 inline const uint8* PwgEncoder::GetRow(const BitmapImage& image,
-                                       int row) const {
-  return image.pixel_data() + row * image.size().width() * image.channels();
+                                       int row,
+                                       bool flipy) const {
+  return image.GetPixel(
+      gfx::Point(0, flipy ? image.size().height() - 1 - row : row));
 }
 
 // Given a pointer to a struct Image, create a PWG of the image and
-// put the compressed image data in the std::string.  Returns true on success.
-// The content of the std::string is undefined on failure.
+// put the compressed image data in the string.  Returns true on success.
+// The content of the string is undefined on failure.
 bool PwgEncoder::EncodePage(const BitmapImage& image,
-                            const uint32 dpi,
-                            const uint32 total_pages,
-                            std::string* output,
-                            bool rotate) const {
-  // For now only some 4-channel colorspaces are supported.
-  if (image.channels() != 4) {
-    LOG(ERROR) << "Unsupported colorspace.";
-    return false;
+                            const PwgHeaderInfo& pwg_header_info,
+                            std::string* output) const {
+  // pwg_header_info.color_space can only contain color spaces that are
+  // supported, so no sanity check is needed.
+  switch (image.colorspace()) {
+    case BitmapImage::RGBA:
+      return EncodePageWithColorspace<RGBA8>(image, pwg_header_info, output);
+
+    case BitmapImage::BGRA:
+      return EncodePageWithColorspace<BGRA8>(image, pwg_header_info, output);
+
+    default:
+      LOG(ERROR) << "Unsupported colorspace.";
+      return false;
   }
+}
 
-  EncodePageHeader(image, dpi, total_pages, output);
+template <typename InputStruct>
+bool PwgEncoder::EncodePageWithColorspace(const BitmapImage& image,
+                                          const PwgHeaderInfo& pwg_header_info,
+                                          std::string* output) const {
+  bool monochrome = pwg_header_info.color_space == PwgHeaderInfo::SGRAY;
+  EncodePageHeader(image, pwg_header_info, output);
 
+  // Ensure no integer overflow.
+  CHECK(image.size().width() < INT_MAX / image.channels());
   int row_size = image.size().width() * image.channels();
-  scoped_ptr<uint8[]> current_row_cpy(new uint8[row_size]);
 
   int row_number = 0;
-  int total_rows = image.size().height();
-  while (row_number < total_rows) {
+  while (row_number < image.size().height()) {
     const uint8* current_row =
-        GetRow(image, FlipIfNeeded(rotate, row_number++, total_rows));
+        GetRow(image, row_number++, pwg_header_info.flipy);
     int num_identical_rows = 1;
     // We count how many times the current row is repeated.
     while (num_identical_rows < kPwgMaxPackedRows &&
            row_number < image.size().height() &&
            !memcmp(current_row,
-                   GetRow(image, FlipIfNeeded(rotate, row_number, total_rows)),
+                   GetRow(image, row_number, pwg_header_info.flipy),
                    row_size)) {
       num_identical_rows++;
       row_number++;
     }
     output->push_back(static_cast<char>(num_identical_rows - 1));
 
-    if (rotate) {
-      memcpy(current_row_cpy.get(), current_row, row_size);
-      std::reverse(reinterpret_cast<uint32*>(current_row_cpy.get()),
-                   reinterpret_cast<uint32*>(current_row_cpy.get() + row_size));
-      current_row = current_row_cpy.get();
-    }
-
     // Both supported colorspaces have a 32-bit pixels information.
-    if (!EncodeRowFrom32Bit(
-            current_row, image.size().width(), image.colorspace(), output)) {
-      return false;
+    // Converts the list of uint8 to uint32 as every pixels contains 4 bytes
+    // of information and comparison of elements is easier. The actual
+    // Management of the bytes of the pixel is done by pixel_encoder function
+    // on the original array to avoid endian problems.
+    const uint32* pos = reinterpret_cast<const uint32*>(current_row);
+    const uint32* row_end = pos + image.size().width();
+    if (!pwg_header_info.flipx) {
+      EncodeRow<InputStruct>(pos, row_end, monochrome, output);
+    } else {
+      // We reverse the iterators.
+      EncodeRow<InputStruct>(std::reverse_iterator<const uint32*>(row_end),
+                             std::reverse_iterator<const uint32*>(pos),
+                             monochrome,
+                             output);
     }
   }
   return true;
diff --git a/chrome/utility/cloud_print/pwg_encoder.h b/chrome/utility/cloud_print/pwg_encoder.h
index a51aff6..aaa0084 100644
--- a/chrome/utility/cloud_print/pwg_encoder.h
+++ b/chrome/utility/cloud_print/pwg_encoder.h
@@ -13,25 +13,51 @@
 
 class BitmapImage;
 
+struct PwgHeaderInfo {
+  PwgHeaderInfo()
+      : dpi(300),
+        total_pages(1),
+        flipx(false),
+        flipy(false),
+        color_space(SRGB),
+        duplex(false),
+        tumble(false) {}
+  enum ColorSpace { SGRAY = 18, SRGB = 19 };
+  uint32 dpi;
+  uint32 total_pages;
+  bool flipx;
+  bool flipy;
+  ColorSpace color_space;
+  bool duplex;
+  bool tumble;
+};
+
 class PwgEncoder {
  public:
   PwgEncoder();
 
   void EncodeDocumentHeader(std::string *output) const;
   bool EncodePage(const BitmapImage& image,
-                  const uint32 dpi,
-                  const uint32 total_pages,
-                  std::string* output,
-                  bool rotate) const;
+                  const PwgHeaderInfo& pwg_header_info,
+                  std::string* output) const;
 
  private:
-  void EncodePageHeader(const BitmapImage& image, const uint32 dpi,
-                        const uint32 total_pages, std::string* output) const;
-  bool EncodeRowFrom32Bit(const uint8* row,
-                          const int width,
-                          const int color_space,
-                          std::string* output) const;
-  const uint8* GetRow(const BitmapImage& image, int row) const;
+  void EncodePageHeader(const BitmapImage& image,
+                        const PwgHeaderInfo& pwg_header_info,
+                        std::string* output) const;
+
+  template <typename InputStruct, class RandomAccessIterator>
+  void EncodeRow(RandomAccessIterator pos,
+                 RandomAccessIterator row_end,
+                 bool monochrome,
+                 std::string* output) const;
+
+  template <typename InputStruct>
+  bool EncodePageWithColorspace(const BitmapImage& image,
+                                const PwgHeaderInfo& pwg_header_info,
+                                std::string* output) const;
+
+  const uint8* GetRow(const BitmapImage& image, int row, bool flipy) const;
 };
 
 }  // namespace cloud_print
diff --git a/chrome/utility/cloud_print/pwg_encoder_unittest.cc b/chrome/utility/cloud_print/pwg_encoder_unittest.cc
index c455f35..bba7990 100644
--- a/chrome/utility/cloud_print/pwg_encoder_unittest.cc
+++ b/chrome/utility/cloud_print/pwg_encoder_unittest.cc
@@ -15,11 +15,10 @@
 
 // SHA-1 of golden master for this test, plus null terminating character.
 // File is in chrome/test/data/printing/test_pwg_generator.pwg.
-const char kPWGFileSha1[] = {
-  '\xda', '\x5c', '\xca', '\x36', '\x10', '\xb9', '\xa4', '\x16',
-  '\x2f', '\x98', '\x1b', '\xa6', '\x5f', '\x43', '\x24', '\x33',
-  '\x60', '\x43', '\x67', '\x34', '\0'
-};
+const char kPWGFileSha1[] = {'\x4a', '\xd7', '\x44', '\x29', '\x98', '\xc8',
+                             '\xfe', '\xae', '\x94', '\xbc', '\x9c', '\x8b',
+                             '\x17', '\x7a', '\x7c', '\x94', '\x76', '\x6c',
+                             '\xc9', '\xfb', '\0'};
 
 const int kRasterWidth = 612;
 const int kRasterHeight = 792;
@@ -63,14 +62,16 @@
 
 }  // namespace
 
-// TODO(noamsml): Add tests for rotated cases.
 TEST(PwgRasterTest, CompareWithMaster) {
   std::string output;
   PwgEncoder encoder;
   scoped_ptr<BitmapImage> image = MakeSampleBitmap();
+  PwgHeaderInfo header_info;
+  header_info.dpi = kRasterDPI;
+  header_info.total_pages = 1;
 
   encoder.EncodeDocumentHeader(&output);
-  encoder.EncodePage(*image, kRasterDPI, 1, &output, false);
+  encoder.EncodePage(*image, header_info, &output);
 
   EXPECT_EQ(kPWGFileSha1, base::SHA1HashString(output));
 }
diff --git a/chrome/utility/importer/firefox_importer_unittest_utils_mac.cc b/chrome/utility/importer/firefox_importer_unittest_utils_mac.cc
index 93961c5..5c385de 100644
--- a/chrome/utility/importer/firefox_importer_unittest_utils_mac.cc
+++ b/chrome/utility/importer/firefox_importer_unittest_utils_mac.cc
@@ -21,7 +21,6 @@
 #include "ipc/ipc_listener.h"
 #include "ipc/ipc_message.h"
 #include "ipc/ipc_multiprocess_test.h"
-#include "ipc/ipc_switches.h"
 #include "testing/multiprocess_func_list.h"
 
 #define IPC_MESSAGE_IMPL
@@ -56,10 +55,7 @@
   fds_to_map.push_back(std::pair<int,int>(ipcfd.get(),
       kPrimaryIPCChannel + base::GlobalDescriptors::kBaseDescriptor));
 
-  bool debug_on_start = CommandLine::ForCurrentProcess()->HasSwitch(
-                            switches::kDebugChildren);
   options.fds_to_remap = &fds_to_map;
-  options.wait = debug_on_start;
   return base::LaunchProcess(cl.argv(), options, handle);
 }
 
diff --git a/chrome/utility/importer/safari_importer.mm b/chrome/utility/importer/safari_importer.mm
index 177d268..253c6a1 100644
--- a/chrome/utility/importer/safari_importer.mm
+++ b/chrome/utility/importer/safari_importer.mm
@@ -20,6 +20,7 @@
 #include "chrome/common/importer/importer_bridge.h"
 #include "chrome/common/url_constants.h"
 #include "chrome/utility/importer/favicon_reencode.h"
+#include "grit/component_strings.h"
 #include "grit/generated_resources.h"
 #include "net/base/data_url.h"
 #include "sql/statement.h"
diff --git a/chrome/utility/media_galleries/media_metadata_parser.cc b/chrome/utility/media_galleries/media_metadata_parser.cc
index 07c54dc..9475bb8 100644
--- a/chrome/utility/media_galleries/media_metadata_parser.cc
+++ b/chrome/utility/media_galleries/media_metadata_parser.cc
@@ -7,6 +7,7 @@
 #include <string>
 
 #include "base/bind.h"
+#include "base/memory/linked_ptr.h"
 #include "base/message_loop/message_loop.h"
 #include "base/strings/string_util.h"
 #include "base/task_runner_util.h"
@@ -15,6 +16,8 @@
 #include "media/base/audio_video_metadata_extractor.h"
 #include "media/base/data_source.h"
 
+namespace MediaGalleries = extensions::api::media_galleries;
+
 namespace metadata {
 
 namespace {
@@ -76,10 +79,21 @@
   SetStringScopedPtr(extractor.title(), &metadata->title);
   SetIntScopedPtr(extractor.track(), &metadata->track);
 
-  for (std::map<std::string, std::string>::const_iterator it =
-           extractor.raw_tags().begin();
-       it != extractor.raw_tags().end(); ++it) {
-    metadata->raw_tags.additional_properties.SetString(it->first, it->second);
+  for (media::AudioVideoMetadataExtractor::StreamInfoVector::const_iterator it =
+           extractor.stream_infos().begin();
+       it != extractor.stream_infos().end(); ++it) {
+    linked_ptr<MediaGalleries::StreamInfo> stream_info(
+        new MediaGalleries::StreamInfo);
+    stream_info->type = it->type;
+
+    for (std::map<std::string, std::string>::const_iterator tag_it =
+             it->tags.begin();
+         tag_it != it->tags.end(); ++tag_it) {
+      stream_info->tags.additional_properties.SetString(tag_it->first,
+                                                        tag_it->second);
+    }
+
+    metadata->raw_tags.push_back(stream_info);
   }
 
   return metadata.Pass();
diff --git a/chromeos/CHROMEOS_LKGM b/chromeos/CHROMEOS_LKGM
index d35ec17..8a7aa15 100644
--- a/chromeos/CHROMEOS_LKGM
+++ b/chromeos/CHROMEOS_LKGM
@@ -1 +1 @@
-5759.0.0
\ No newline at end of file
+5783.0.0
\ No newline at end of file
diff --git a/chromeos/audio/cras_audio_handler.cc b/chromeos/audio/cras_audio_handler.cc
index fd2d92e..aeda0eb 100644
--- a/chromeos/audio/cras_audio_handler.cc
+++ b/chromeos/audio/cras_audio_handler.cc
@@ -112,6 +112,7 @@
   const AudioDevice* device = GetDeviceFromId(device_id);
   if (!device)
     return false;
+  DCHECK(!device->is_input);
   return audio_pref_handler_->GetMuteValue(*device);
 }
 
@@ -127,7 +128,12 @@
   const AudioDevice* device = GetDeviceFromId(device_id);
   if (!device)
     return false;
-  return audio_pref_handler_->GetMuteValue(*device);
+  DCHECK(device->is_input);
+  // We don't record input mute state for each device in the prefs,
+  // for any non-active input device, we assume mute is off.
+  if (device->id == active_input_node_id_)
+    return input_mute_on_;
+  return false;
 }
 
 int CrasAudioHandler::GetOutputDefaultVolumeMuteThreshold() {
@@ -225,8 +231,10 @@
   if (!SetOutputMuteInternal(mute_on))
     return;
 
-  if (const AudioDevice* device = GetDeviceFromId(active_output_node_id_))
+  if (const AudioDevice* device = GetDeviceFromId(active_output_node_id_)) {
+    DCHECK(!device->is_input);
     audio_pref_handler_->SetMuteValue(*device, output_mute_on_);
+  }
 
   FOR_EACH_OBSERVER(AudioObserver, observers_, OnOutputMuteChanged());
 }
@@ -243,10 +251,10 @@
   if (!SetInputMuteInternal(mute_on))
     return;
 
-  AudioDevice device;
-  if (const AudioDevice* device = GetDeviceFromId(active_input_node_id_))
-    audio_pref_handler_->SetMuteValue(*device, input_mute_on_);
-
+  // Audio input mute state is not saved in prefs, see crbug.com/365050.
+  LOG(WARNING) << "SetInputMute set active input id="
+               << "0x" << std::hex << active_input_node_id_
+               << " mute=" << mute_on;
 
   FOR_EACH_OBSERVER(AudioObserver, observers_, OnInputMuteChanged());
 }
@@ -288,12 +296,15 @@
     SetOutputMute(mute_on);
     return;
   } else if (device_id == active_input_node_id_) {
+    LOG(WARNING) << "SetMuteForDevice sets active input device id="
+                 << "0x" << std::hex << device_id << " mute=" << mute_on;
     SetInputMute(mute_on);
     return;
   }
 
-  AudioDevice device;
-  if (const AudioDevice* device = GetDeviceFromId(device_id))
+  const AudioDevice* device = GetDeviceFromId(device_id);
+  // Input device's mute state is not recorded in the pref. crbug.com/365050.
+  if (device && !device->is_input)
     audio_pref_handler_->SetMuteValue(*device, mute_on);
 }
 
@@ -414,8 +425,9 @@
         << "0x" << std::hex << active_input_node_id_;
     return;
   }
-  input_mute_on_ = audio_pref_handler_->GetMuteValue(*device);
   input_gain_ = audio_pref_handler_->GetInputGainValue(device);
+  LOG(WARNING) << "SetupAudioInputState for active device id="
+               << "0x" << std::hex << device->id << " mute=" << input_mute_on_;
   SetInputMuteInternal(input_mute_on_);
   // TODO(rkc,jennyz): Set input gain once we decide on how to store
   // the gain values since the range and step are both device specific.
@@ -429,6 +441,7 @@
         << "0x" << std::hex << active_output_node_id_;
     return;
   }
+  DCHECK(!device->is_input);
   output_mute_on_ = audio_pref_handler_->GetMuteValue(*device);
   output_volume_ = audio_pref_handler_->GetOutputVolumeValue(device);
 
@@ -456,12 +469,14 @@
 
   input_mute_locked_ = false;
   if (audio_pref_handler_->GetAudioCaptureAllowedValue()) {
-    // Set input mute if we have discovered active input device.
-    const AudioDevice* device = GetDeviceFromId(active_input_node_id_);
-    if (device)
-      SetInputMuteInternal(false);
+    LOG(WARNING) << "Audio input allowed by policy, sets input id="
+                 << "0x" << std::hex << active_input_node_id_
+                 << " mute=false";
+    SetInputMuteInternal(false);
   } else {
-    SetInputMute(true);
+    LOG(WARNING) << "Audio input NOT allowed by policy, sets input id="
+                 << "0x" << std::hex << active_input_node_id_ << " mute=true";
+    SetInputMuteInternal(true);
     input_mute_locked_ = true;
   }
 }
@@ -490,6 +505,9 @@
   if (input_mute_locked_)
     return false;
 
+  LOG(WARNING) << "SetInputMuteInternal sets active input device id="
+               << "0x" << std::hex << active_input_node_id_
+               << " mute=" << mute_on;
   input_mute_on_ = mute_on;
   chromeos::DBusThreadManager::Get()->GetCrasAudioClient()->
       SetInputMute(mute_on);
diff --git a/chromeos/audio/cras_audio_handler_unittest.cc b/chromeos/audio/cras_audio_handler_unittest.cc
index f4c3c99..ef706df 100644
--- a/chromeos/audio/cras_audio_handler_unittest.cc
+++ b/chromeos/audio/cras_audio_handler_unittest.cc
@@ -1499,21 +1499,16 @@
   // Mute the device.
   cras_audio_handler_->SetInputMute(true);
 
-  // Verify the input is muted, OnInputMuteChanged event is fired,
-  // and mute value is saved in the preferences.
+  // Verify the input is muted, OnInputMuteChanged event is fired.
   EXPECT_TRUE(cras_audio_handler_->IsInputMuted());
   EXPECT_EQ(1, test_observer_->input_mute_changed_count());
-  AudioDevice internal_mic(kInternalMic);
-  EXPECT_TRUE(audio_pref_handler_->GetMuteValue(internal_mic));
 
   // Unmute the device.
   cras_audio_handler_->SetInputMute(false);
 
-  // Verify the input is unmuted, OnInputMuteChanged event is fired,
-  // and mute value is saved in the preferences.
+  // Verify the input is unmuted, OnInputMuteChanged event is fired.
   EXPECT_FALSE(cras_audio_handler_->IsInputMuted());
   EXPECT_EQ(2, test_observer_->input_mute_changed_count());
-  EXPECT_FALSE(audio_pref_handler_->GetMuteValue(internal_mic));
 }
 
 TEST_F(CrasAudioHandlerTest, SetOutputVolumePercent) {
@@ -1584,19 +1579,14 @@
   EXPECT_EQ(kUSBMic.id, cras_audio_handler_->GetActiveInputNode());
   cras_audio_handler_->SetMuteForDevice(kUSBMic.id, true);
 
-  // Verify the USB Mic is muted and mute state is saved in the preferences.
-  EXPECT_TRUE(cras_audio_handler_->IsOutputMutedForDevice(kUSBMic.id));
-  AudioDevice usb_mic(kUSBMic);
-  EXPECT_TRUE(audio_pref_handler_->GetMuteValue(usb_mic));
+  // Verify the USB Mic is muted.
+  EXPECT_TRUE(cras_audio_handler_->IsInputMutedForDevice(kUSBMic.id));
 
-  // Mute the non-active input device.
+  // Mute the non-active input device should be a no-op, see crbug.com/365050.
   cras_audio_handler_->SetMuteForDevice(kInternalMic.id, true);
 
-  // Verify the internal mic is muted and mute value is saved in the
-  // preferences.
-  EXPECT_TRUE(cras_audio_handler_->IsOutputMutedForDevice(kInternalMic.id));
-  AudioDevice internal_mic(kInternalMic);
-  EXPECT_TRUE(audio_pref_handler_->GetMuteValue(internal_mic));
+  // Verify IsInputMutedForDevice returns false for non-active input device.
+  EXPECT_FALSE(cras_audio_handler_->IsInputMutedForDevice(kInternalMic.id));
 }
 
 TEST_F(CrasAudioHandlerTest, SetVolumeGainPercentForDevice) {
diff --git a/chromeos/chromeos.gyp b/chromeos/chromeos.gyp
index bc73f6a..d6cf1bb 100644
--- a/chromeos/chromeos.gyp
+++ b/chromeos/chromeos.gyp
@@ -156,6 +156,8 @@
         'dbus/fake_gsm_sms_client.h',
         'dbus/fake_introspectable_client.cc',
         'dbus/fake_introspectable_client.h',
+        'dbus/fake_lorgnette_manager_client.cc',
+        'dbus/fake_lorgnette_manager_client.h',
         'dbus/fake_modem_messaging_client.cc',
         'dbus/fake_modem_messaging_client.h',
         'dbus/fake_nfc_adapter_client.cc',
@@ -218,6 +220,8 @@
         'dbus/image_burner_client.h',
         'dbus/introspectable_client.cc',
         'dbus/introspectable_client.h',
+        'dbus/lorgnette_manager_client.cc',
+        'dbus/lorgnette_manager_client.h',
         'dbus/modem_messaging_client.cc',
         'dbus/modem_messaging_client.h',
         'dbus/permission_broker_client.cc',
diff --git a/chromeos/chromeos_switches.cc b/chromeos/chromeos_switches.cc
index 1c2a4e6..32c1909 100644
--- a/chromeos/chromeos_switches.cc
+++ b/chromeos/chromeos_switches.cc
@@ -65,6 +65,13 @@
 // Enables switching between different cellular carriers from the UI.
 const char kEnableCarrierSwitching[]        = "enable-carrier-switching";
 
+// Enables consumer management, which allows user to enroll, remotely lock and
+// locate the device.
+const char kEnableConsumerManagement[]      = "enable-consumer-management";
+
+// Enables MTP support in Files.app.
+const char kEnableFileManagerMTP[] = "enable-filemanager-mtp";
+
 // Enables notifications about captive portals in session.
 const char kEnableNetworkPortalNotification[] =
     "enable-network-portal-notification";
@@ -103,6 +110,10 @@
 const char kFileManagerEnableNewAudioPlayer[] =
     "file-manager-enable-new-audio-player";
 
+// Enables the new gallery in the Files.app.
+const char kFileManagerEnableNewGallery[] =
+    "file-manager-enable-new-gallery";
+
 // Passed to Chrome the first time that it's run after the system boots.
 // Not passed on restart after sign out.
 const char kFirstExecAfterBoot[]            = "first-exec-after-boot";
@@ -125,9 +136,6 @@
 // Path for the screensaver used in Kiosk mode
 const char kKioskModeScreensaverPath[]      = "kiosk-mode-screensaver-path";
 
-// Allows override of oobe for testing - goes directly to the login screen.
-const char kLoginScreen[]                   = "login-screen";
-
 // Enables Chrome-as-a-login-manager behavior.
 const char kLoginManager[]                  = "login-manager";
 
diff --git a/chromeos/chromeos_switches.h b/chromeos/chromeos_switches.h
index 9c8b2df..17d2d47 100644
--- a/chromeos/chromeos_switches.h
+++ b/chromeos/chromeos_switches.h
@@ -37,6 +37,8 @@
 CHROMEOS_EXPORT extern const char kDisableVolumeAdjustSound[];
 CHROMEOS_EXPORT extern const char kEchoExtensionPath[];
 CHROMEOS_EXPORT extern const char kEnableCarrierSwitching[];
+CHROMEOS_EXPORT extern const char kEnableConsumerManagement[];
+CHROMEOS_EXPORT extern const char kEnableFileManagerMTP[];
 CHROMEOS_EXPORT extern const char kEnableKioskMode[];
 CHROMEOS_EXPORT extern const char kEnableNetworkPortalNotification[];
 CHROMEOS_EXPORT extern const char kEnableRequestTabletSite[];
@@ -46,13 +48,13 @@
 CHROMEOS_EXPORT extern const char kEnterpriseEnrollmentModulusLimit[];
 CHROMEOS_EXPORT extern const char kEnterpriseEnrollmentSkipRobotAuth[];
 CHROMEOS_EXPORT extern const char kFileManagerEnableNewAudioPlayer[];
+CHROMEOS_EXPORT extern const char kFileManagerEnableNewGallery[];
 CHROMEOS_EXPORT extern const char kFirstExecAfterBoot[];
 CHROMEOS_EXPORT extern const char kForceLoginManagerInTests[];
 CHROMEOS_EXPORT extern const char kGuestSession[];
 CHROMEOS_EXPORT extern const char kHasChromeOSDiamondKey[];
 CHROMEOS_EXPORT extern const char kHasChromeOSKeyboard[];
 CHROMEOS_EXPORT extern const char kKioskModeScreensaverPath[];
-CHROMEOS_EXPORT extern const char kLoginScreen[];
 CHROMEOS_EXPORT extern const char kLoginManager[];
 CHROMEOS_EXPORT extern const char kLoginPassword[];
 CHROMEOS_EXPORT extern const char kLoginProfile[];
diff --git a/chromeos/cryptohome/homedir_methods.cc b/chromeos/cryptohome/homedir_methods.cc
index d1a1cf4..cd12218 100644
--- a/chromeos/cryptohome/homedir_methods.cc
+++ b/chromeos/cryptohome/homedir_methods.cc
@@ -77,8 +77,11 @@
       return MOUNT_ERROR_USER_DOES_NOT_EXIST;
     case CRYPTOHOME_ERROR_NOT_IMPLEMENTED:
     case CRYPTOHOME_ERROR_MOUNT_FATAL:
+    case CRYPTOHOME_ERROR_KEY_QUOTA_EXCEEDED:
+    case CRYPTOHOME_ERROR_BACKING_STORE_FAILURE:
       return MOUNT_ERROR_FATAL;
     case CRYPTOHOME_ERROR_AUTHORIZATION_KEY_NOT_FOUND:
+    case CRYPTOHOME_ERROR_KEY_NOT_FOUND:
     case CRYPTOHOME_ERROR_AUTHORIZATION_KEY_FAILED:
       return MOUNT_ERROR_KEY_FAILURE;
     case CRYPTOHOME_ERROR_TPM_COMM_ERROR:
@@ -90,6 +93,8 @@
     case CRYPTOHOME_ERROR_TPM_NEEDS_REBOOT:
       return MOUNT_ERROR_TPM_NEEDS_REBOOT;
     case CRYPTOHOME_ERROR_AUTHORIZATION_KEY_DENIED:
+    case CRYPTOHOME_ERROR_KEY_LABEL_EXISTS:
+    case CRYPTOHOME_ERROR_UPDATE_SIGNATURE_INVALID:
       return MOUNT_ERROR_KEY_FAILURE;
     default:
       NOTREACHED();
diff --git a/chromeos/dbus/dbus_thread_manager.cc b/chromeos/dbus/dbus_thread_manager.cc
index 46fd684..7056c03 100644
--- a/chromeos/dbus/dbus_thread_manager.cc
+++ b/chromeos/dbus/dbus_thread_manager.cc
@@ -30,6 +30,7 @@
 #include "chromeos/dbus/gsm_sms_client.h"
 #include "chromeos/dbus/image_burner_client.h"
 #include "chromeos/dbus/introspectable_client.h"
+#include "chromeos/dbus/lorgnette_manager_client.h"
 #include "chromeos/dbus/modem_messaging_client.h"
 #include "chromeos/dbus/nfc_adapter_client.h"
 #include "chromeos/dbus/nfc_device_client.h"
@@ -88,6 +89,7 @@
     cros_disks_client_.reset(CrosDisksClient::Create(client_type));
     cryptohome_client_.reset(CryptohomeClient::Create());
     debug_daemon_client_.reset(DebugDaemonClient::Create());
+    lorgnette_manager_client_.reset(LorgnetteManagerClient::Create());
     shill_manager_client_.reset(ShillManagerClient::Create());
     shill_device_client_.reset(ShillDeviceClient::Create());
     shill_ipconfig_client_.reset(ShillIPConfigClient::Create());
@@ -154,6 +156,9 @@
   DebugDaemonClient* debug_daemon_client() {
     return debug_daemon_client_.get();
   }
+  LorgnetteManagerClient* lorgnette_manager_client() {
+    return lorgnette_manager_client_.get();
+  }
   ShillDeviceClient* shill_device_client() {
     return shill_device_client_.get();
   }
@@ -230,6 +235,7 @@
   scoped_ptr<CrosDisksClient> cros_disks_client_;
   scoped_ptr<CryptohomeClient> cryptohome_client_;
   scoped_ptr<DebugDaemonClient> debug_daemon_client_;
+  scoped_ptr<LorgnetteManagerClient> lorgnette_manager_client_;
   scoped_ptr<ShillDeviceClient> shill_device_client_;
   scoped_ptr<ShillIPConfigClient> shill_ipconfig_client_;
   scoped_ptr<ShillManagerClient> shill_manager_client_;
@@ -365,6 +371,10 @@
     return client_bundle_->debug_daemon_client();
   }
 
+  virtual LorgnetteManagerClient* GetLorgnetteManagerClient() OVERRIDE {
+    return client_bundle_->lorgnette_manager_client();
+  }
+
   virtual ShillDeviceClient* GetShillDeviceClient() OVERRIDE {
     return client_bundle_->shill_device_client();
   }
@@ -578,6 +588,7 @@
   InitClient(g_dbus_thread_manager->GetGsmSMSClient());
   InitClient(g_dbus_thread_manager->GetImageBurnerClient());
   InitClient(g_dbus_thread_manager->GetIntrospectableClient());
+  InitClient(g_dbus_thread_manager->GetLorgnetteManagerClient());
   InitClient(g_dbus_thread_manager->GetModemMessagingClient());
   InitClient(g_dbus_thread_manager->GetPermissionBrokerClient());
   InitClient(g_dbus_thread_manager->GetPowerManagerClient());
diff --git a/chromeos/dbus/dbus_thread_manager.h b/chromeos/dbus/dbus_thread_manager.h
index 7253623..b1d395d 100644
--- a/chromeos/dbus/dbus_thread_manager.h
+++ b/chromeos/dbus/dbus_thread_manager.h
@@ -43,6 +43,7 @@
 class GsmSMSClient;
 class ImageBurnerClient;
 class IntrospectableClient;
+class LorgnetteManagerClient;
 class ModemMessagingClient;
 class NfcAdapterClient;
 class NfcDeviceClient;
@@ -142,6 +143,7 @@
   virtual GsmSMSClient* GetGsmSMSClient() = 0;
   virtual ImageBurnerClient* GetImageBurnerClient() = 0;
   virtual IntrospectableClient* GetIntrospectableClient() = 0;
+  virtual LorgnetteManagerClient* GetLorgnetteManagerClient() = 0;
   virtual ModemMessagingClient* GetModemMessagingClient() = 0;
   virtual NfcAdapterClient* GetNfcAdapterClient() = 0;
   virtual NfcDeviceClient* GetNfcDeviceClient() = 0;
diff --git a/chromeos/dbus/fake_dbus_thread_manager.cc b/chromeos/dbus/fake_dbus_thread_manager.cc
index 4ba7e78..10b7835 100644
--- a/chromeos/dbus/fake_dbus_thread_manager.cc
+++ b/chromeos/dbus/fake_dbus_thread_manager.cc
@@ -25,6 +25,7 @@
 #include "chromeos/dbus/fake_gsm_sms_client.h"
 #include "chromeos/dbus/fake_image_burner_client.h"
 #include "chromeos/dbus/fake_introspectable_client.h"
+#include "chromeos/dbus/fake_lorgnette_manager_client.h"
 #include "chromeos/dbus/fake_modem_messaging_client.h"
 #include "chromeos/dbus/fake_nfc_adapter_client.h"
 #include "chromeos/dbus/fake_nfc_device_client.h"
@@ -82,6 +83,8 @@
   SetCryptohomeClient(scoped_ptr<CryptohomeClient>(new FakeCryptohomeClient));
   SetDebugDaemonClient(
       scoped_ptr<DebugDaemonClient>(new FakeDebugDaemonClient));
+  SetLorgnetteManagerClient(
+      scoped_ptr<LorgnetteManagerClient>(new FakeLorgnetteManagerClient));
 
   SetFakeShillClients();
 
@@ -202,6 +205,11 @@
   debug_daemon_client_ = client.Pass();
 }
 
+void FakeDBusThreadManager::SetLorgnetteManagerClient(
+    scoped_ptr<LorgnetteManagerClient> client) {
+  lorgnette_manager_client_ = client.Pass();
+}
+
 void FakeDBusThreadManager::SetShillDeviceClient(
     scoped_ptr<ShillDeviceClient> client) {
   shill_device_client_ = client.Pass();
@@ -383,6 +391,10 @@
   return debug_daemon_client_.get();
 }
 
+LorgnetteManagerClient* FakeDBusThreadManager::GetLorgnetteManagerClient() {
+  return lorgnette_manager_client_.get();
+}
+
 ShillDeviceClient*
     FakeDBusThreadManager::GetShillDeviceClient() {
   return shill_device_client_.get();
diff --git a/chromeos/dbus/fake_dbus_thread_manager.h b/chromeos/dbus/fake_dbus_thread_manager.h
index ce02567..b3d308c 100644
--- a/chromeos/dbus/fake_dbus_thread_manager.h
+++ b/chromeos/dbus/fake_dbus_thread_manager.h
@@ -56,6 +56,7 @@
   void SetCrosDisksClient(scoped_ptr<CrosDisksClient> client);
   void SetCryptohomeClient(scoped_ptr<CryptohomeClient> client);
   void SetDebugDaemonClient(scoped_ptr<DebugDaemonClient> client);
+  void SetLorgnetteManagerClient(scoped_ptr<LorgnetteManagerClient> client);
   void SetShillDeviceClient(scoped_ptr<ShillDeviceClient> client);
   void SetShillIPConfigClient(scoped_ptr<ShillIPConfigClient> client);
   void SetShillManagerClient(scoped_ptr<ShillManagerClient> client);
@@ -99,6 +100,7 @@
   virtual CrosDisksClient* GetCrosDisksClient() OVERRIDE;
   virtual CryptohomeClient* GetCryptohomeClient() OVERRIDE;
   virtual DebugDaemonClient* GetDebugDaemonClient() OVERRIDE;
+  virtual LorgnetteManagerClient* GetLorgnetteManagerClient() OVERRIDE;
   virtual ShillDeviceClient* GetShillDeviceClient() OVERRIDE;
   virtual ShillIPConfigClient* GetShillIPConfigClient() OVERRIDE;
   virtual ShillManagerClient* GetShillManagerClient() OVERRIDE;
@@ -141,6 +143,7 @@
   scoped_ptr<CrosDisksClient> cros_disks_client_;
   scoped_ptr<CryptohomeClient> cryptohome_client_;
   scoped_ptr<DebugDaemonClient> debug_daemon_client_;
+  scoped_ptr<LorgnetteManagerClient> lorgnette_manager_client_;
   scoped_ptr<ShillDeviceClient> shill_device_client_;
   scoped_ptr<ShillIPConfigClient> shill_ipconfig_client_;
   scoped_ptr<ShillManagerClient> shill_manager_client_;
diff --git a/chromeos/dbus/fake_lorgnette_manager_client.cc b/chromeos/dbus/fake_lorgnette_manager_client.cc
new file mode 100644
index 0000000..16924b3
--- /dev/null
+++ b/chromeos/dbus/fake_lorgnette_manager_client.cc
@@ -0,0 +1,40 @@
+// 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.
+
+#include "chromeos/dbus/fake_lorgnette_manager_client.h"
+
+#include <map>
+#include <string>
+#include <vector>
+
+#include "base/bind.h"
+#include "base/callback.h"
+#include "base/location.h"
+#include "base/message_loop/message_loop.h"
+
+namespace chromeos {
+
+FakeLorgnetteManagerClient::FakeLorgnetteManagerClient() {}
+
+FakeLorgnetteManagerClient::~FakeLorgnetteManagerClient() {}
+
+void FakeLorgnetteManagerClient::Init(dbus::Bus* bus) {}
+
+void FakeLorgnetteManagerClient::ListScanners(
+    const ListScannersCallback& callback) {
+  std::map<std::string, ScannerTableEntry> scanners;
+  base::MessageLoop::current()->PostTask(FROM_HERE,
+                                         base::Bind(callback, false, scanners));
+}
+
+void FakeLorgnetteManagerClient::ScanImage(
+    std::string device_name,
+    base::PlatformFile file,
+    const ScanProperties& properties,
+    const ScanImageCallback& callback) {
+  base::MessageLoop::current()->PostTask(FROM_HERE,
+                                         base::Bind(callback, false));
+}
+
+}  // namespace chromeos
diff --git a/chromeos/dbus/fake_lorgnette_manager_client.h b/chromeos/dbus/fake_lorgnette_manager_client.h
new file mode 100644
index 0000000..7f514f5
--- /dev/null
+++ b/chromeos/dbus/fake_lorgnette_manager_client.h
@@ -0,0 +1,36 @@
+// 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.
+
+#ifndef CHROMEOS_DBUS_FAKE_LORGNETTE_MANAGER_CLIENT_H_
+#define CHROMEOS_DBUS_FAKE_LORGNETTE_MANAGER_CLIENT_H_
+
+#include "base/basictypes.h"
+#include "base/compiler_specific.h"
+#include "chromeos/dbus/lorgnette_manager_client.h"
+
+namespace chromeos {
+
+// Lorgnette LorgnetteManagerClient implementation used on Linux desktop,
+// which does nothing.
+class CHROMEOS_EXPORT FakeLorgnetteManagerClient
+    : public LorgnetteManagerClient {
+ public:
+  FakeLorgnetteManagerClient();
+  virtual ~FakeLorgnetteManagerClient();
+
+  virtual void Init(dbus::Bus* bus) OVERRIDE;
+
+  virtual void ListScanners(const ListScannersCallback& callback) OVERRIDE;
+  virtual void ScanImage(std::string device_name,
+                         base::PlatformFile file,
+                         const ScanProperties& properties,
+                         const ScanImageCallback& callback) OVERRIDE;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(FakeLorgnetteManagerClient);
+};
+
+}  // namespace chromeos
+
+#endif  // CHROMEOS_DBUS_FAKE_LORGNETTE_MANAGER_CLIENT_H_
diff --git a/chromeos/dbus/fake_power_manager_client.cc b/chromeos/dbus/fake_power_manager_client.cc
index 529628a..657123c 100644
--- a/chromeos/dbus/fake_power_manager_client.cc
+++ b/chromeos/dbus/fake_power_manager_client.cc
@@ -3,6 +3,8 @@
 // found in the LICENSE file.
 
 #include "chromeos/dbus/fake_power_manager_client.h"
+
+#include "base/time/time.h"
 #include "chromeos/dbus/power_manager/policy.pb.h"
 
 namespace chromeos {
@@ -92,19 +94,8 @@
   FOR_EACH_OBSERVER(Observer, observers_, SuspendImminent());
 }
 
-void FakePowerManagerClient::SendSuspendStateChanged(
-    const power_manager::SuspendState& suspend_state) {
-  base::Time wall_time =
-      base::Time::FromInternalValue(suspend_state.wall_time());
-  switch (suspend_state.type()) {
-    case power_manager::SuspendState_Type_SUSPEND_TO_MEMORY:
-      last_suspend_wall_time_ = wall_time;
-      break;
-    case power_manager::SuspendState_Type_RESUME:
-      FOR_EACH_OBSERVER(Observer, observers_,
-                        SystemResumed(wall_time - last_suspend_wall_time_));
-      break;
-  }
+void FakePowerManagerClient::SendSuspendDone() {
+  FOR_EACH_OBSERVER(Observer, observers_, SuspendDone(base::TimeDelta()));
 }
 
 } // namespace chromeos
diff --git a/chromeos/dbus/fake_power_manager_client.h b/chromeos/dbus/fake_power_manager_client.h
index dd0cd26..74aad41 100644
--- a/chromeos/dbus/fake_power_manager_client.h
+++ b/chromeos/dbus/fake_power_manager_client.h
@@ -9,7 +9,6 @@
 
 #include "base/basictypes.h"
 #include "base/observer_list.h"
-#include "base/time/time.h"
 #include "chromeos/dbus/power_manager/policy.pb.h"
 #include "chromeos/dbus/power_manager/suspend.pb.h"
 #include "chromeos/dbus/power_manager_client.h"
@@ -63,14 +62,10 @@
   virtual base::Closure GetSuspendReadinessCallback() OVERRIDE;
   virtual int GetNumPendingSuspendReadinessCallbacks() OVERRIDE;
 
-  // Emulates that the dbus server sends a message "SuspendImminent" to the
-  // client.
+  // Emulates the power manager announcing that the system is starting or
+  // completing a suspend attempt.
   void SendSuspendImminent();
-
-  // Emulates that the dbus server sends a message "SuspendStateChanged" to the
-  // client.
-  void SendSuspendStateChanged(
-      const power_manager::SuspendState& suspend_state);
+  void SendSuspendDone();
 
  private:
   ObserverList<Observer> observers_;
@@ -78,9 +73,6 @@
   // Last policy passed to SetPolicy().
   power_manager::PowerManagementPolicy policy_;
 
-  // Last time passed to a SUSPEND_TO_MEMORY call to SendSuspendStateChanged().
-  base::Time last_suspend_wall_time_;
-
   // Number of times that RequestRestart() has been called.
   int num_request_restart_calls_;
 
diff --git a/chromeos/dbus/lorgnette_manager_client.cc b/chromeos/dbus/lorgnette_manager_client.cc
new file mode 100644
index 0000000..629a60a
--- /dev/null
+++ b/chromeos/dbus/lorgnette_manager_client.cc
@@ -0,0 +1,201 @@
+// 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.
+
+#include "chromeos/dbus/lorgnette_manager_client.h"
+
+#include <string>
+
+#include "base/bind.h"
+#include "base/bind_helpers.h"
+#include "base/callback.h"
+#include "base/location.h"
+#include "base/memory/ref_counted_memory.h"
+#include "base/platform_file.h"
+#include "base/threading/worker_pool.h"
+#include "dbus/bus.h"
+#include "dbus/message.h"
+#include "dbus/object_path.h"
+#include "dbus/object_proxy.h"
+#include "net/base/file_stream.h"
+#include "third_party/cros_system_api/dbus/service_constants.h"
+
+namespace chromeos {
+
+// The LorgnetteManagerClient implementation used in production.
+class LorgnetteManagerClientImpl : public LorgnetteManagerClient {
+ public:
+  LorgnetteManagerClientImpl() :
+      lorgnette_daemon_proxy_(NULL), weak_ptr_factory_(this) {}
+
+  virtual ~LorgnetteManagerClientImpl() {}
+
+  virtual void ListScanners(const ListScannersCallback& callback) OVERRIDE {
+    dbus::MethodCall method_call(lorgnette::kManagerServiceInterface,
+                                 lorgnette::kListScannersMethod);
+    lorgnette_daemon_proxy_->CallMethod(
+        &method_call,
+        dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
+        base::Bind(&LorgnetteManagerClientImpl::OnListScanners,
+                   weak_ptr_factory_.GetWeakPtr(),
+                   callback));
+  }
+
+  // LorgnetteManagerClient override.
+  virtual void ScanImage(std::string device_name,
+                         base::PlatformFile file,
+                         const ScanProperties& properties,
+                         const ScanImageCallback& callback) OVERRIDE {
+    dbus::FileDescriptor* file_descriptor = new dbus::FileDescriptor();
+    file_descriptor->PutValue(file);
+    // Punt descriptor validity check to a worker thread; on return we'll
+    // issue the D-Bus request to stop tracing and collect results.
+    base::WorkerPool::PostTaskAndReply(
+        FROM_HERE,
+        base::Bind(&LorgnetteManagerClientImpl::CheckValidity,
+                   file_descriptor),
+        base::Bind(&LorgnetteManagerClientImpl::OnCheckValidityScanImage,
+                   weak_ptr_factory_.GetWeakPtr(),
+                   base::Owned(file_descriptor),
+                   device_name,
+                   properties,
+                   callback),
+        false);
+  }
+
+ protected:
+  virtual void Init(dbus::Bus* bus) OVERRIDE {
+    lorgnette_daemon_proxy_ =
+        bus->GetObjectProxy(lorgnette::kManagerServiceName,
+                            dbus::ObjectPath(lorgnette::kManagerServicePath));
+  }
+
+ private:
+  // Called when ListScanners completes.
+  void OnListScanners(const ListScannersCallback& callback,
+                      dbus::Response* response) {
+    ScannerTable scanners;
+    dbus::MessageReader table_reader(NULL);
+    if (!response || !dbus::MessageReader(response).PopArray(&table_reader)) {
+      callback.Run(false, scanners);
+      return;
+    }
+
+    bool decode_failure = false;
+    while (table_reader.HasMoreData()) {
+      std::string device_name;
+      dbus::MessageReader device_entry_reader(NULL);
+      dbus::MessageReader device_element_reader(NULL);
+      if (!table_reader.PopDictEntry(&device_entry_reader) ||
+          !device_entry_reader.PopString(&device_name) ||
+          !device_entry_reader.PopArray(&device_element_reader)) {
+        decode_failure = true;
+        break;
+      }
+
+      ScannerTableEntry scanner_entry;
+      while (device_element_reader.HasMoreData()) {
+        dbus::MessageReader device_attribute_reader(NULL);
+        std::string attribute;
+        std::string value;
+        if (!device_element_reader.PopDictEntry(&device_attribute_reader) ||
+            !device_attribute_reader.PopString(&attribute) ||
+            !device_attribute_reader.PopString(&value)) {
+          decode_failure = true;
+          break;
+        }
+        scanner_entry[attribute] = value;
+      }
+
+      if (decode_failure)
+          break;
+
+      scanners[device_name] = scanner_entry;
+    }
+
+    if (decode_failure) {
+      LOG(ERROR) << "Failed to decode response from ListScanners";
+      callback.Run(false, scanners);
+    } else {
+      callback.Run(true, scanners);
+    }
+  }
+
+  // Called to check descriptor validity on a thread where i/o is permitted.
+  static void CheckValidity(dbus::FileDescriptor* file_descriptor) {
+    file_descriptor->CheckValidity();
+  }
+
+  // Called when a CheckValidity response is received.
+  void OnCheckValidityScanImage(
+      dbus::FileDescriptor* file_descriptor,
+      std::string device_name,
+      const ScanProperties& properties,
+      const ScanImageCallback& callback) {
+    if (!file_descriptor->is_valid()) {
+      LOG(ERROR) << "Failed to scan image: file descriptor is invalid";
+      callback.Run(false);
+      return;
+    }
+    // Issue the dbus request to scan an image.
+    dbus::MethodCall method_call(
+        lorgnette::kManagerServiceInterface,
+        lorgnette::kScanImageMethod);
+    dbus::MessageWriter writer(&method_call);
+    writer.AppendString(device_name);
+    writer.AppendFileDescriptor(*file_descriptor);
+
+    dbus::MessageWriter option_writer(NULL);
+    dbus::MessageWriter element_writer(NULL);
+    writer.OpenArray("{sv}", &option_writer);
+    if (!properties.mode.empty()) {
+      option_writer.OpenDictEntry(&element_writer);
+      element_writer.AppendString(lorgnette::kScanPropertyMode);
+      element_writer.AppendVariantOfString(properties.mode);
+      option_writer.CloseContainer(&element_writer);
+    }
+    if (properties.resolution_dpi) {
+      option_writer.OpenDictEntry(&element_writer);
+      element_writer.AppendString(lorgnette::kScanPropertyResolution);
+      element_writer.AppendVariantOfUint32(properties.resolution_dpi);
+      option_writer.CloseContainer(&element_writer);
+    }
+    writer.CloseContainer(&option_writer);
+
+    lorgnette_daemon_proxy_->CallMethod(
+        &method_call,
+        dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
+        base::Bind(&LorgnetteManagerClientImpl::OnScanImageComplete,
+                   weak_ptr_factory_.GetWeakPtr(),
+                   callback));
+  }
+
+  // Called when a response for ScanImage() is received.
+  void OnScanImageComplete(const ScanImageCallback& callback,
+                           dbus::Response* response) {
+    if (!response) {
+      LOG(ERROR) << "Failed to scan image";
+      callback.Run(false);
+      return;
+    }
+    callback.Run(true);
+  }
+
+  dbus::ObjectProxy* lorgnette_daemon_proxy_;
+  base::WeakPtrFactory<LorgnetteManagerClientImpl> weak_ptr_factory_;
+
+  DISALLOW_COPY_AND_ASSIGN(LorgnetteManagerClientImpl);
+};
+
+LorgnetteManagerClient::LorgnetteManagerClient() {
+}
+
+LorgnetteManagerClient::~LorgnetteManagerClient() {
+}
+
+// static
+LorgnetteManagerClient* LorgnetteManagerClient::Create() {
+  return new LorgnetteManagerClientImpl();
+}
+
+}  // namespace chromeos
diff --git a/chromeos/dbus/lorgnette_manager_client.h b/chromeos/dbus/lorgnette_manager_client.h
new file mode 100644
index 0000000..2f3103e
--- /dev/null
+++ b/chromeos/dbus/lorgnette_manager_client.h
@@ -0,0 +1,68 @@
+// 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.
+
+#ifndef CHROMEOS_DBUS_LORGNETTE_MANAGER_CLIENT_H_
+#define CHROMEOS_DBUS_LORGNETTE_MANAGER_CLIENT_H_
+
+#include <map>
+
+#include "base/callback.h"
+#include "base/memory/ref_counted_memory.h"
+#include "base/platform_file.h"
+#include "chromeos/chromeos_export.h"
+#include "chromeos/dbus/dbus_client.h"
+
+namespace chromeos {
+
+// LorgnetteManagerClient is used to communicate with the lorgnette
+// document scanning daemon.
+class CHROMEOS_EXPORT LorgnetteManagerClient : public DBusClient {
+ public:
+  // The property information for each scanner retured by ListScanners.
+  typedef std::map<std::string, std::string> ScannerTableEntry;
+  typedef std::map<std::string, ScannerTableEntry> ScannerTable;
+
+  // Callback type for ListScanners().  Returns a map which contains
+  // a ScannerTableEntry for each available scanner.
+  typedef base::Callback<void(
+      bool succeeded, const ScannerTable&)> ListScannersCallback;
+
+  // Called once ScanImage() is complete. Takes one parameter:
+  // - succeeded: was the scan completed successfully.
+  typedef base::Callback<void(bool succeeded)> ScanImageCallback;
+
+  // Attributes provided to a scan request.
+  struct ScanProperties {
+    ScanProperties() : resolution_dpi(0) {}
+    std::string mode;  // Can be "Color", "Gray", or "Lineart".
+    int resolution_dpi;
+  };
+
+  virtual ~LorgnetteManagerClient();
+
+  // Gets a list of scanners from the lorgnette manager.
+  virtual void ListScanners(const ListScannersCallback& callback) = 0;
+
+  // Request a scanned image and calls |callback| when completed.
+  // Image data will be stored in the .png format.
+  virtual void ScanImage(std::string device_name,
+                         base::PlatformFile file,
+                         const ScanProperties& properties,
+                         const ScanImageCallback& callback) = 0;
+
+  // Factory function, creates a new instance and returns ownership.
+  // For normal usage, access the singleton via DBusThreadManager::Get().
+  static LorgnetteManagerClient* Create();
+
+ protected:
+  // Create() should be used instead.
+  LorgnetteManagerClient();
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(LorgnetteManagerClient);
+};
+
+}  // namespace chromeos
+
+#endif  // CHROMEOS_DBUS_LORGNETTE_MANAGER_CLIENT_H_
diff --git a/chromeos/dbus/pipe_reader.cc b/chromeos/dbus/pipe_reader.cc
index 8d857ea..547a974 100644
--- a/chromeos/dbus/pipe_reader.cc
+++ b/chromeos/dbus/pipe_reader.cc
@@ -42,8 +42,7 @@
   // Pass ownership of pipe_fds[0] to data_stream_, which will will close it.
   data_stream_.reset(new net::FileStream(
       data_file_,
-      base::PLATFORM_FILE_READ | base::PLATFORM_FILE_ASYNC,
-      NULL));
+      base::PLATFORM_FILE_READ | base::PLATFORM_FILE_ASYNC));
 
   // Post an initial async read to setup data collection
   int rv = data_stream_->Read(
diff --git a/chromeos/dbus/power_manager_client.cc b/chromeos/dbus/power_manager_client.cc
index be8fb6d..587e43f 100644
--- a/chromeos/dbus/power_manager_client.cc
+++ b/chromeos/dbus/power_manager_client.cc
@@ -268,18 +268,18 @@
 
     power_manager_proxy_->ConnectToSignal(
         power_manager::kPowerManagerInterface,
-        power_manager::kSuspendStateChangedSignal,
-        base::Bind(&PowerManagerClientImpl::SuspendStateChangedReceived,
-                   weak_ptr_factory_.GetWeakPtr()),
+        power_manager::kSuspendImminentSignal,
+        base::Bind(
+            &PowerManagerClientImpl::SuspendImminentReceived,
+            weak_ptr_factory_.GetWeakPtr()),
         base::Bind(&PowerManagerClientImpl::SignalConnected,
                    weak_ptr_factory_.GetWeakPtr()));
 
     power_manager_proxy_->ConnectToSignal(
         power_manager::kPowerManagerInterface,
-        power_manager::kSuspendImminentSignal,
-        base::Bind(
-            &PowerManagerClientImpl::SuspendImminentReceived,
-            weak_ptr_factory_.GetWeakPtr()),
+        power_manager::kSuspendDoneSignal,
+        base::Bind(&PowerManagerClientImpl::SuspendDoneReceived,
+                   weak_ptr_factory_.GetWeakPtr()),
         base::Bind(&PowerManagerClientImpl::SignalConnected,
                    weak_ptr_factory_.GetWeakPtr()));
 
@@ -452,29 +452,58 @@
     }
 
     dbus::MessageReader reader(signal);
-    power_manager::SuspendImminent protobuf_imminent;
-    if (!reader.PopArrayOfBytesAsProto(&protobuf_imminent)) {
+    power_manager::SuspendImminent proto;
+    if (!reader.PopArrayOfBytesAsProto(&proto)) {
       LOG(ERROR) << "Unable to decode protocol buffer from "
                  << power_manager::kSuspendImminentSignal << " signal";
       return;
     }
 
+    VLOG(1) << "Got " << power_manager::kSuspendImminentSignal << " signal "
+            << "announcing suspend attempt " << proto.suspend_id();
     if (suspend_is_pending_) {
       LOG(WARNING) << "Got " << power_manager::kSuspendImminentSignal
                    << " signal about pending suspend attempt "
-                   << protobuf_imminent.suspend_id() << " while still waiting "
+                   << proto.suspend_id() << " while still waiting "
                    << "on attempt " << pending_suspend_id_;
     }
 
-    pending_suspend_id_ = protobuf_imminent.suspend_id();
+    pending_suspend_id_ = proto.suspend_id();
     suspend_is_pending_ = true;
     num_pending_suspend_readiness_callbacks_ = 0;
     FOR_EACH_OBSERVER(Observer, observers_, SuspendImminent());
     MaybeReportSuspendReadiness();
   }
 
+  void SuspendDoneReceived(dbus::Signal* signal) {
+    dbus::MessageReader reader(signal);
+    power_manager::SuspendDone proto;
+    if (!reader.PopArrayOfBytesAsProto(&proto)) {
+      LOG(ERROR) << "Unable to decode protocol buffer from "
+                 << power_manager::kSuspendDoneSignal << " signal";
+      return;
+    }
+
+    const base::TimeDelta duration =
+        base::TimeDelta::FromInternalValue(proto.suspend_duration());
+    VLOG(1) << "Got " << power_manager::kSuspendDoneSignal << " signal:"
+            << " suspend_id=" << proto.suspend_id()
+            << " duration=" << duration.InSeconds() << " sec";
+    FOR_EACH_OBSERVER(
+        PowerManagerClient::Observer, observers_, SuspendDone(duration));
+  }
+
   void IdleActionImminentReceived(dbus::Signal* signal) {
-    FOR_EACH_OBSERVER(Observer, observers_, IdleActionImminent());
+    dbus::MessageReader reader(signal);
+    power_manager::IdleActionImminent proto;
+    if (!reader.PopArrayOfBytesAsProto(&proto)) {
+      LOG(ERROR) << "Unable to decode protocol buffer from "
+                 << power_manager::kIdleActionImminentSignal << " signal";
+      return;
+    }
+    FOR_EACH_OBSERVER(Observer, observers_,
+        IdleActionImminent(base::TimeDelta::FromInternalValue(
+            proto.time_until_idle_action())));
   }
 
   void IdleActionDeferredReceived(dbus::Signal* signal) {
@@ -527,31 +556,6 @@
     }
   }
 
-  void SuspendStateChangedReceived(dbus::Signal* signal) {
-    dbus::MessageReader reader(signal);
-    power_manager::SuspendState proto;
-    if (!reader.PopArrayOfBytesAsProto(&proto)) {
-      LOG(ERROR) << "Unable to decode protocol buffer from "
-                 << power_manager::kSuspendStateChangedSignal << " signal";
-      return;
-    }
-
-    VLOG(1) << "Got " << power_manager::kSuspendStateChangedSignal << " signal:"
-            << " type=" << proto.type() << " wall_time=" << proto.wall_time();
-    base::Time wall_time =
-        base::Time::FromInternalValue(proto.wall_time());
-    switch (proto.type()) {
-      case power_manager::SuspendState_Type_SUSPEND_TO_MEMORY:
-        last_suspend_wall_time_ = wall_time;
-        break;
-      case power_manager::SuspendState_Type_RESUME:
-        FOR_EACH_OBSERVER(
-            PowerManagerClient::Observer, observers_,
-            SystemResumed(wall_time - last_suspend_wall_time_));
-        break;
-    }
-  }
-
   // Registers a suspend delay with the power manager.  This is usually
   // only called at startup, but if the power manager restarts, we need to
   // create a new delay.
@@ -608,6 +612,8 @@
         power_manager::kHandleSuspendReadinessMethod);
     dbus::MessageWriter writer(&method_call);
 
+    VLOG(1) << "Announcing readiness of suspend delay " << suspend_delay_id_
+            << " for suspend attempt " << pending_suspend_id_;
     power_manager::SuspendReadinessInfo protobuf_request;
     protobuf_request.set_delay_id(suspend_delay_id_);
     protobuf_request.set_suspend_id(pending_suspend_id_);
@@ -646,10 +652,6 @@
   // attempt but have not yet been called.
   int num_pending_suspend_readiness_callbacks_;
 
-  // Wall time from the latest signal telling us that the system was about to
-  // suspend to memory.
-  base::Time last_suspend_wall_time_;
-
   // Last state passed to SetIsProjecting().
   bool last_is_projecting_;
 
diff --git a/chromeos/dbus/power_manager_client.h b/chromeos/dbus/power_manager_client.h
index 5c957f4..f37476e 100644
--- a/chromeos/dbus/power_manager_client.h
+++ b/chromeos/dbus/power_manager_client.h
@@ -66,6 +66,11 @@
     // the observer is ready for suspend.
     virtual void SuspendImminent() {}
 
+    // Called when a suspend attempt (previously announced via
+    // SuspendImminent()) has completed. The system may not have actually
+    // suspended (if e.g. the user canceled the suspend attempt).
+    virtual void SuspendDone(const base::TimeDelta& sleep_duration) {}
+
     // Called when the power button is pressed or released.
     virtual void PowerButtonEventReceived(bool down,
                                           const base::TimeTicks& timestamp) {}
@@ -74,11 +79,10 @@
     virtual void LidEventReceived(bool open,
                                   const base::TimeTicks& timestamp) {}
 
-    // Called when the system resumes from sleep.
-    virtual void SystemResumed(const base::TimeDelta& sleep_duration) {}
-
-    // Called when the idle action will be performed soon.
-    virtual void IdleActionImminent() {}
+    // Called when the idle action will be performed after
+    // |time_until_idle_action|.
+    virtual void IdleActionImminent(
+        const base::TimeDelta& time_until_idle_action) {}
 
     // Called after IdleActionImminent() when the inactivity timer is reset
     // before the idle action has been performed.
diff --git a/chromeos/network/network_change_notifier_chromeos.cc b/chromeos/network/network_change_notifier_chromeos.cc
index d8d3d2c..5c6908a 100644
--- a/chromeos/network/network_change_notifier_chromeos.cc
+++ b/chromeos/network/network_change_notifier_chromeos.cc
@@ -84,7 +84,7 @@
   return connection_type_;
 }
 
-void NetworkChangeNotifierChromeos::SystemResumed(
+void NetworkChangeNotifierChromeos::SuspendDone(
     const base::TimeDelta& sleep_duration) {
   // Force invalidation of network resources on resume.
   NetworkChangeNotifier::NotifyObserversOfIPAddressChange();
diff --git a/chromeos/network/network_change_notifier_chromeos.h b/chromeos/network/network_change_notifier_chromeos.h
index aabfddc..d70386e 100644
--- a/chromeos/network/network_change_notifier_chromeos.h
+++ b/chromeos/network/network_change_notifier_chromeos.h
@@ -36,7 +36,7 @@
       GetCurrentConnectionType() const OVERRIDE;
 
   // PowerManagerClient::Observer overrides.
-  virtual void SystemResumed(const base::TimeDelta& sleep_duration) OVERRIDE;
+  virtual void SuspendDone(const base::TimeDelta& sleep_duration) OVERRIDE;
 
   // NetworkStateHandlerObserver overrides.
   virtual void DefaultNetworkChanged(
diff --git a/chromeos/network/network_configuration_handler.cc b/chromeos/network/network_configuration_handler.cc
index ea81a75..9b2efc9 100644
--- a/chromeos/network/network_configuration_handler.cc
+++ b/chromeos/network/network_configuration_handler.cc
@@ -256,7 +256,7 @@
       dbus::ObjectPath(service_path),
       names,
       base::Bind(&NetworkConfigurationHandler::ClearPropertiesSuccessCallback,
-                 AsWeakPtr(), service_path, names, callback, error_callback),
+                 AsWeakPtr(), service_path, names, callback),
       base::Bind(&NetworkConfigurationHandler::ClearPropertiesErrorCallback,
                  AsWeakPtr(), service_path, error_callback));
 }
@@ -394,37 +394,23 @@
     const std::string& service_path,
     const std::vector<std::string>& names,
     const base::Closure& callback,
-    const network_handler::ErrorCallback& error_callback,
     const base::ListValue& result) {
   const std::string kClearPropertiesFailedError("Error.ClearPropertiesFailed");
   DCHECK(names.size() == result.GetSize())
       << "Incorrect result size from ClearProperties.";
 
-  bool some_failed = false;
   for (size_t i = 0; i < result.GetSize(); ++i) {
     bool success = false;
     result.GetBoolean(i, &success);
     if (!success) {
+      // If a property was cleared that has never been set, the clear will fail.
+      // We do not track which properties have been set, so just log the error.
       NET_LOG_ERROR("ClearProperties Failed: " + names[i], service_path);
-      some_failed = true;
     }
   }
 
-  if (some_failed) {
-    if (!error_callback.is_null()) {
-      scoped_ptr<base::DictionaryValue> error_data(
-          network_handler::CreateErrorData(
-              service_path, kClearPropertiesFailedError,
-              base::StringPrintf("Errors: %" PRIuS, result.GetSize())));
-      error_data->Set("errors", result.DeepCopy());
-      scoped_ptr<base::ListValue> name_list(new base::ListValue);
-      name_list->AppendStrings(names);
-      error_data->Set("names", name_list.release());
-      error_callback.Run(kClearPropertiesFailedError, error_data.Pass());
-    }
-  } else if (!callback.is_null()) {
+  if (!callback.is_null())
     callback.Run();
-  }
   network_state_handler_->RequestUpdateForNetwork(service_path);
 }
 
diff --git a/chromeos/network/network_configuration_handler.h b/chromeos/network/network_configuration_handler.h
index ee96639..3dc4a68 100644
--- a/chromeos/network/network_configuration_handler.h
+++ b/chromeos/network/network_configuration_handler.h
@@ -148,7 +148,6 @@
       const std::string& service_path,
       const std::vector<std::string>& names,
       const base::Closure& callback,
-      const network_handler::ErrorCallback& error_callback,
       const base::ListValue& result);
   void ClearPropertiesErrorCallback(
       const std::string& service_path,
diff --git a/cloud_print/DEPS b/cloud_print/DEPS
index 88a5403..25918c1 100644
--- a/cloud_print/DEPS
+++ b/cloud_print/DEPS
@@ -1,6 +1,7 @@
 include_rules = [
   "+chrome/common",
   "+chrome/installer/launcher_support",
+  "+components/cloud_devices/common",
   "+google_apis",
   "+grit",
   "+jingle/notifier",
diff --git a/cloud_print/gcp20/prototype/dns_packet_parser.cc b/cloud_print/gcp20/prototype/dns_packet_parser.cc
index 26cd2e5..e52ba39 100644
--- a/cloud_print/gcp20/prototype/dns_packet_parser.cc
+++ b/cloud_print/gcp20/prototype/dns_packet_parser.cc
@@ -5,6 +5,7 @@
 #include "cloud_print/gcp20/prototype/dns_packet_parser.h"
 
 #include "base/big_endian.h"
+#include "base/logging.h"
 
 DnsPacketParser::DnsPacketParser(const char* packet, size_t length)
     : packet_(packet),
diff --git a/cloud_print/gcp20/prototype/dns_response_builder.h b/cloud_print/gcp20/prototype/dns_response_builder.h
index b574ddf..380e2f7 100644
--- a/cloud_print/gcp20/prototype/dns_response_builder.h
+++ b/cloud_print/gcp20/prototype/dns_response_builder.h
@@ -9,6 +9,8 @@
 #include <vector>
 
 #include "base/basictypes.h"
+#include "base/memory/ref_counted.h"
+#include "net/base/io_buffer.h"
 #include "net/base/net_util.h"
 #include "net/dns/dns_protocol.h"
 
diff --git a/cloud_print/service/service.gyp b/cloud_print/service/service.gyp
index f4bc65b..04d612d 100644
--- a/cloud_print/service/service.gyp
+++ b/cloud_print/service/service.gyp
@@ -54,6 +54,7 @@
         '<(DEPTH)/base/base.gyp:base',
         '<(DEPTH)/base/base.gyp:base_static',
         '<(DEPTH)/base/third_party/dynamic_annotations/dynamic_annotations.gyp:dynamic_annotations',
+        '<(DEPTH)/components/components.gyp:cloud_devices_common',
         '<(DEPTH)/google_apis/google_apis.gyp:google_apis',
         '<(DEPTH)/ipc/ipc.gyp:ipc',
         '<(DEPTH)/net/net.gyp:net',
diff --git a/cloud_print/service/win/chrome_launcher.cc b/cloud_print/service/win/chrome_launcher.cc
index 231ae84..650b502 100644
--- a/cloud_print/service/win/chrome_launcher.cc
+++ b/cloud_print/service/win/chrome_launcher.cc
@@ -23,6 +23,7 @@
 #include "cloud_print/common/win/cloud_print_utils.h"
 #include "cloud_print/service/service_constants.h"
 #include "cloud_print/service/win/service_utils.h"
+#include "components/cloud_devices/common/cloud_devices_urls.h"
 #include "google_apis/gaia/gaia_urls.h"
 #include "net/base/url_util.h"
 #include "url/gurl.h"
@@ -91,27 +92,6 @@
   return true;
 }
 
-GURL GetCloudPrintServiceEnableURL(const std::string& proxy_id) {
-  GURL url(
-      CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
-          switches::kCloudPrintServiceURL));
-  if (url.is_empty())
-    url = GURL("https://www.google.com/cloudprint");
-  url = net::AppendQueryParameter(url, "proxy", proxy_id);
-  std::string url_path(url.path() + "/enable_chrome_connector/enable.html");
-  GURL::Replacements replacements;
-  replacements.SetPathStr(url_path);
-  return url.ReplaceComponents(replacements);
-}
-
-GURL GetCloudPrintServiceEnableURLWithSignin(const std::string& proxy_id) {
-  GURL url(GaiaUrls::GetInstance()->service_login_url());
-  url = net::AppendQueryParameter(url, "service", "cloudprint");
-  url = net::AppendQueryParameter(url, "sarp", "1");
-  return net::AppendQueryParameter(
-      url, "continue", GetCloudPrintServiceEnableURL(proxy_id).spec());
-}
-
 std::string ReadAndUpdateServiceState(const base::FilePath& directory,
                                       const std::string& proxy_id) {
   std::string json;
@@ -311,7 +291,8 @@
   cmd.AppendSwitch(switches::kNoDefaultBrowserCheck);
   cmd.AppendSwitch(switches::kNoFirstRun);
 
-  cmd.AppendArg(GetCloudPrintServiceEnableURLWithSignin(proxy_id).spec());
+  cmd.AppendArg(
+      cloud_devices::GetCloudPrintEnableURLWithSignin(proxy_id).spec());
 
   base::win::ScopedHandle chrome_handle;
   DWORD thread_id = 0;
diff --git a/cloud_print/service/win/service_utils.cc b/cloud_print/service/win/service_utils.cc
index 37f2747..b71bca2 100644
--- a/cloud_print/service/win/service_utils.cc
+++ b/cloud_print/service/win/service_utils.cc
@@ -11,6 +11,7 @@
 #include "base/command_line.h"
 #include "base/strings/string_util.h"
 #include "chrome/common/chrome_switches.h"
+#include "components/cloud_devices/common/cloud_devices_switches.h"
 
 base::string16 GetLocalComputerName() {
   DWORD size = 0;
@@ -49,7 +50,8 @@
 
 void CopyChromeSwitchesFromCurrentProcess(CommandLine* destination) {
   static const char* const kSwitchesToCopy[] = {
-    switches::kCloudPrintServiceURL,
+    switches::kCloudPrintURL,
+    switches::kCloudPrintXmppEndpoint,
     switches::kEnableCloudPrintXps,
     switches::kEnableLogging,
     switches::kIgnoreUrlFetcherCertRequests,
diff --git a/components/OWNERS b/components/OWNERS
index af4446c..d0d9637 100644
--- a/components/OWNERS
+++ b/components/OWNERS
@@ -43,6 +43,8 @@
 # Temporary for the duration of the favicon componentization.
 per-file favicon*=droger@chromium.org
 
+per-file infobars.gypi=pkasting@chromium.org
+
 per-file json_schema.gypi=asargent@chromium.org
 per-file json_schema.gypi=calamity@chromium.org
 per-file json_schema.gypi=kalman@chromium.org
@@ -88,6 +90,13 @@
 per-file policy*=pneubeck@chromium.org
 per-file policy*=dconnelly@chromium.org
 
+per-file query_parser*=brettw@chromium.org
+per-file query_parser*=sky@chromium.org
+# Temporary for the duration of the bookmarks & history componentization.
+per-file query_parser*=blundell@chromium.org
+# Temporary for the duration of the bookmarks & history componentization.
+per-file query_parser*=droger@chromium.org
+
 per-file rappor*=asvitkine@chromium.org
 # OWNER-to-be: per-file rappor*=holte@chromium.org
 
@@ -102,6 +111,7 @@
 per-file sync_driver*=rlarocque@chromium.org
 per-file sync_driver*=tim@chromium.org
 per-file sync_driver*=zea@chromium.org
+per-file sync_driver*=pavely@chromium.org
 
 per-file tracing*=jbauman@chromium.org
 per-file tracing*=nduca@chromium.org
@@ -113,6 +123,10 @@
 
 per-file startup_metric_utils.gypi=jeremy@chromium.org
 
+per-file usb_service.gypi=pfeldman@chromium.org
+per-file usb_service.gypi=rockot@chromium.org
+per-file usb_service.gypi=rpaquay@chromium.org
+
 per-file user_prefs.gypi=battre@chromium.org
 per-file user_prefs.gypi=bauerb@chromium.org
 per-file user_prefs.gypi=mnissler@chromium.org
@@ -126,3 +140,7 @@
 
 per-file *.isolate=csharp@chromium.org
 per-file *.isolate=maruel@chromium.org
+
+# These are for the common case of adding or removing test. If you're doing
+# structural changes, please get a review from a reviewer in this file. 
+per-file components_tests.gyp=*
diff --git a/components/auto_login_parser.target.darwin-arm.mk b/components/auto_login_parser.target.darwin-arm.mk
index 2b243fd..9ec4a6a 100644
--- a/components/auto_login_parser.target.darwin-arm.mk
+++ b/components/auto_login_parser.target.darwin-arm.mk
@@ -225,7 +225,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/auto_login_parser.target.darwin-mips.mk b/components/auto_login_parser.target.darwin-mips.mk
index c504186..7eed61b 100644
--- a/components/auto_login_parser.target.darwin-mips.mk
+++ b/components/auto_login_parser.target.darwin-mips.mk
@@ -221,7 +221,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/auto_login_parser.target.darwin-x86.mk b/components/auto_login_parser.target.darwin-x86.mk
index fc3f4e9..7e82b4c 100644
--- a/components/auto_login_parser.target.darwin-x86.mk
+++ b/components/auto_login_parser.target.darwin-x86.mk
@@ -221,7 +221,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/auto_login_parser.target.darwin-x86_64.mk b/components/auto_login_parser.target.darwin-x86_64.mk
index bdb154c..3cb5bdd 100644
--- a/components/auto_login_parser.target.darwin-x86_64.mk
+++ b/components/auto_login_parser.target.darwin-x86_64.mk
@@ -223,7 +223,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/auto_login_parser.target.linux-arm.mk b/components/auto_login_parser.target.linux-arm.mk
index 2b243fd..9ec4a6a 100644
--- a/components/auto_login_parser.target.linux-arm.mk
+++ b/components/auto_login_parser.target.linux-arm.mk
@@ -225,7 +225,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/auto_login_parser.target.linux-mips.mk b/components/auto_login_parser.target.linux-mips.mk
index c504186..7eed61b 100644
--- a/components/auto_login_parser.target.linux-mips.mk
+++ b/components/auto_login_parser.target.linux-mips.mk
@@ -221,7 +221,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/auto_login_parser.target.linux-x86.mk b/components/auto_login_parser.target.linux-x86.mk
index fc3f4e9..7e82b4c 100644
--- a/components/auto_login_parser.target.linux-x86.mk
+++ b/components/auto_login_parser.target.linux-x86.mk
@@ -221,7 +221,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/auto_login_parser.target.linux-x86_64.mk b/components/auto_login_parser.target.linux-x86_64.mk
index bdb154c..3cb5bdd 100644
--- a/components/auto_login_parser.target.linux-x86_64.mk
+++ b/components/auto_login_parser.target.linux-x86_64.mk
@@ -223,7 +223,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill.gypi b/components/autofill.gypi
index 5b0fd89..d96fa4c 100644
--- a/components/autofill.gypi
+++ b/components/autofill.gypi
@@ -100,6 +100,7 @@
         '../third_party/libphonenumber/libphonenumber.gyp:libphonenumber',
         '../ui/base/ui_base.gyp:ui_base',
         '../ui/gfx/gfx.gyp:gfx',
+        '../ui/gfx/gfx.gyp:gfx_geometry',
         '../url/url.gyp:url_lib',
         'autofill_core_common',
         'autofill_regexes',
diff --git a/components/autofill/content/common/autofill_messages.h b/components/autofill/content/common/autofill_messages.h
index c734cd2..93026b5 100644
--- a/components/autofill/content/common/autofill_messages.h
+++ b/components/autofill/content/common/autofill_messages.h
@@ -190,7 +190,10 @@
 IPC_MESSAGE_ROUTED1(AutofillHostMsg_PasswordFormSubmitted,
                     autofill::PasswordForm /* form */)
 
-// Notification that logs during saving the password have been gathered.
+// Sends |log| to browser for displaying to the user. Only strings passed as an
+// argument to methods overriding SavePasswordProgressLogger::SendLog may become
+// |log|, because those are guaranteed to be sanitized. Never pass a free-form
+// string as |log|.
 IPC_MESSAGE_ROUTED1(AutofillHostMsg_RecordSavePasswordProgress,
                     std::string /* log */)
 
diff --git a/components/autofill/content/renderer/autofill_agent.cc b/components/autofill/content/renderer/autofill_agent.cc
index 89e5505..3d05c63 100644
--- a/components/autofill/content/renderer/autofill_agent.cc
+++ b/components/autofill/content/renderer/autofill_agent.cc
@@ -38,8 +38,8 @@
 #include "third_party/WebKit/public/web/WebElementCollection.h"
 #include "third_party/WebKit/public/web/WebFormControlElement.h"
 #include "third_party/WebKit/public/web/WebFormElement.h"
-#include "third_party/WebKit/public/web/WebFrame.h"
 #include "third_party/WebKit/public/web/WebInputEvent.h"
+#include "third_party/WebKit/public/web/WebLocalFrame.h"
 #include "third_party/WebKit/public/web/WebNode.h"
 #include "third_party/WebKit/public/web/WebOptionElement.h"
 #include "third_party/WebKit/public/web/WebTextAreaElement.h"
@@ -237,6 +237,12 @@
 }
 
 void AutofillAgent::FocusedNodeChanged(const WebNode& node) {
+  if (password_generation_agent_ &&
+      password_generation_agent_->FocusedNodeHasChanged(node)) {
+    is_popup_possibly_visible_ = true;
+    return;
+  }
+
   if (node.isNull() || !node.isElementNode())
     return;
 
@@ -280,14 +286,26 @@
       ::switches::kReduceSecurityForTesting);
 
   FormData form_data;
-  if (!in_flight_request_form_.isNull() ||
-      (!is_safe && !allow_unsafe) ||
-      !WebFormElementToFormData(form,
-                                WebFormControlElement(),
-                                REQUIRE_AUTOCOMPLETE,
-                                EXTRACT_OPTIONS,
-                                &form_data,
-                                NULL)) {
+  std::string error_message;
+  if (!in_flight_request_form_.isNull()) {
+    error_message = "already active.";
+  } else if (!is_safe && !allow_unsafe) {
+    error_message =
+        "must use a secure connection or --reduce-security-for-testing.";
+  } else if (!WebFormElementToFormData(form,
+                                       WebFormControlElement(),
+                                       REQUIRE_AUTOCOMPLETE,
+                                       EXTRACT_OPTIONS,
+                                       &form_data,
+                                       NULL)) {
+    error_message = "failed to parse form.";
+  }
+
+  if (!error_message.empty()) {
+    WebConsoleMessage console_message = WebConsoleMessage(
+        WebConsoleMessage::LevelLog,
+        WebString(base::ASCIIToUTF16("requestAutocomplete: ") +
+                      base::ASCIIToUTF16(error_message)));
     WebFormElement(form).finishRequestAutocomplete(
         WebFormElement::AutocompleteResultErrorDisabled);
     return;
@@ -359,6 +377,7 @@
   if (input_element) {
     if (password_generation_agent_ &&
         password_generation_agent_->TextDidChangeInTextField(*input_element)) {
+      is_popup_possibly_visible_ = true;
       return;
     }
 
@@ -397,6 +416,10 @@
     ShowSuggestions(element, true, false, false, true);
 }
 
+void AutofillAgent::firstUserGestureObserved() {
+  password_autofill_agent_->FirstUserGestureObserved();
+}
+
 void AutofillAgent::AcceptDataListSuggestion(
     const base::string16& suggested_value) {
   WebInputElement* input_element = toWebInputElement(&element_);
@@ -510,7 +533,7 @@
 
   if (result == WebFormElement::AutocompleteResultSuccess) {
     FillFormIncludingNonFocusableElements(form_data, in_flight_request_form_);
-    if (!in_flight_request_form_.checkValidityWithoutDispatchingEvents())
+    if (!in_flight_request_form_.checkValidity())
       result = WebFormElement::AutocompleteResultErrorInvalid;
   }
 
diff --git a/components/autofill/content/renderer/autofill_agent.h b/components/autofill/content/renderer/autofill_agent.h
index 5b268d9..cf1c522 100644
--- a/components/autofill/content/renderer/autofill_agent.h
+++ b/components/autofill/content/renderer/autofill_agent.h
@@ -90,6 +90,7 @@
   virtual void didAssociateFormControls(
       const blink::WebVector<blink::WebNode>& nodes);
   virtual void openTextDataListChooser(const blink::WebInputElement& element);
+  virtual void firstUserGestureObserved();
 
   void OnFieldTypePredictionsAvailable(
       const std::vector<FormDataPredictions>& forms);
diff --git a/components/autofill/content/renderer/form_autofill_util.cc b/components/autofill/content/renderer/form_autofill_util.cc
index a6d4e62..965f7f6 100644
--- a/components/autofill/content/renderer/form_autofill_util.cc
+++ b/components/autofill/content/renderer/form_autofill_util.cc
@@ -448,6 +448,13 @@
   option_values->clear();
   option_contents->clear();
   WebVector<WebElement> list_items = select_element.listItems();
+
+  // Constrain the maximum list length to prevent a malicious site from DOS'ing
+  // the browser, without entirely breaking autocomplete for some extreme
+  // legitimate sites: http://crbug.com/49332 and http://crbug.com/363094
+  if (list_items.size() > kMaxListSize)
+    return;
+
   option_values->reserve(list_items.size());
   option_contents->reserve(list_items.size());
   for (size_t i = 0; i < list_items.size(); ++i) {
diff --git a/components/autofill/content/renderer/page_click_tracker.cc b/components/autofill/content/renderer/page_click_tracker.cc
index d4e02c4..112d8e8 100644
--- a/components/autofill/content/renderer/page_click_tracker.cc
+++ b/components/autofill/content/renderer/page_click_tracker.cc
@@ -10,9 +10,9 @@
 #include "third_party/WebKit/public/platform/WebString.h"
 #include "third_party/WebKit/public/web/WebDOMMouseEvent.h"
 #include "third_party/WebKit/public/web/WebDocument.h"
-#include "third_party/WebKit/public/web/WebFrame.h"
 #include "third_party/WebKit/public/web/WebInputElement.h"
 #include "third_party/WebKit/public/web/WebInputEvent.h"
+#include "third_party/WebKit/public/web/WebLocalFrame.h"
 #include "third_party/WebKit/public/web/WebTextAreaElement.h"
 #include "third_party/WebKit/public/web/WebView.h"
 
diff --git a/components/autofill/content/renderer/password_autofill_agent.cc b/components/autofill/content/renderer/password_autofill_agent.cc
index 5ba541b..e271422 100644
--- a/components/autofill/content/renderer/password_autofill_agent.cc
+++ b/components/autofill/content/renderer/password_autofill_agent.cc
@@ -22,8 +22,8 @@
 #include "third_party/WebKit/public/web/WebDocument.h"
 #include "third_party/WebKit/public/web/WebElement.h"
 #include "third_party/WebKit/public/web/WebFormElement.h"
-#include "third_party/WebKit/public/web/WebFrame.h"
 #include "third_party/WebKit/public/web/WebInputEvent.h"
+#include "third_party/WebKit/public/web/WebLocalFrame.h"
 #include "third_party/WebKit/public/web/WebNode.h"
 #include "third_party/WebKit/public/web/WebNodeList.h"
 #include "third_party/WebKit/public/web/WebPasswordFormData.h"
@@ -395,6 +395,10 @@
   SendPasswordForms(frame, false /* only_visible */);
 }
 
+void PasswordAutofillAgent::FirstUserGestureObserved() {
+  gatekeeper_.OnUserGesture();
+}
+
 void PasswordAutofillAgent::SendPasswordForms(blink::WebFrame* frame,
                                               bool only_visible) {
   // Make sure that this security origin is allowed to use password manager.
@@ -517,10 +521,6 @@
   }
 }
 
-void PasswordAutofillAgent::WillProcessUserGesture() {
-  gatekeeper_.OnUserGesture();
-}
-
 blink::WebFrame* PasswordAutofillAgent::CurrentOrChildFrameWithSavedForms(
     const blink::WebFrame* current_frame) {
   for (FrameToPasswordFormMap::const_iterator it =
@@ -818,17 +818,11 @@
     return false;
   }
 
-// TODO(vabr): The "gatekeeper" feature is currently disabled on mobile.
-// http://crbug.com/345510#c13
-#if !defined(OS_ANDROID) || !defined(OS_IOS)
   // Wait to fill in the password until a user gesture occurs. This is to make
   // sure that we do not fill in the DOM with a password until we believe the
   // user is intentionally interacting with the page.
   password_element->setSuggestedValue(password);
   gatekeeper_.RegisterElement(password_element);
-#else
-  password_element->setValue(password);
-#endif
 
   password_element->setAutofilled(true);
   return true;
diff --git a/components/autofill/content/renderer/password_autofill_agent.h b/components/autofill/content/renderer/password_autofill_agent.h
index f814dfd..582f331 100644
--- a/components/autofill/content/renderer/password_autofill_agent.h
+++ b/components/autofill/content/renderer/password_autofill_agent.h
@@ -53,6 +53,11 @@
   // Called when new form controls are inserted.
   void OnDynamicFormsSeen(blink::WebFrame* frame);
 
+  // Called when the user first interacts with the page after a load. This is a
+  // signal to make autofilled values of password input elements accessible to
+  // JavaScript.
+  void FirstUserGestureObserved();
+
  protected:
   virtual bool OriginCanAccessPasswordManager(
       const blink::WebSecurityOrigin& origin);
@@ -120,7 +125,6 @@
                                    const blink::WebFormElement& form) OVERRIDE;
   virtual void WillSubmitForm(blink::WebLocalFrame* frame,
                               const blink::WebFormElement& form) OVERRIDE;
-  virtual void WillProcessUserGesture() OVERRIDE;
 
   // RenderView IPC handlers:
   void OnFillPasswordForm(const PasswordFormFillData& form_data);
diff --git a/components/autofill/content/renderer/password_generation_agent.cc b/components/autofill/content/renderer/password_generation_agent.cc
index 85d45ed..e90f1c9 100644
--- a/components/autofill/content/renderer/password_generation_agent.cc
+++ b/components/autofill/content/renderer/password_generation_agent.cc
@@ -21,8 +21,8 @@
 #include "third_party/WebKit/public/platform/WebVector.h"
 #include "third_party/WebKit/public/web/WebDocument.h"
 #include "third_party/WebKit/public/web/WebFormElement.h"
-#include "third_party/WebKit/public/web/WebFrame.h"
 #include "third_party/WebKit/public/web/WebInputElement.h"
+#include "third_party/WebKit/public/web/WebLocalFrame.h"
 #include "third_party/WebKit/public/web/WebSecurityOrigin.h"
 #include "third_party/WebKit/public/web/WebView.h"
 #include "ui/gfx/rect.h"
@@ -266,24 +266,26 @@
       password_generation::GENERATION_AVAILABLE);
 }
 
-void PasswordGenerationAgent::FocusedNodeChanged(const blink::WebNode& node) {
+bool PasswordGenerationAgent::FocusedNodeHasChanged(
+    const blink::WebNode& node) {
   if (!generation_element_.isNull())
     generation_element_.setShouldRevealPassword(false);
 
   if (node.isNull() || !node.isElementNode())
-    return;
+    return false;
 
   const blink::WebElement web_element = node.toConst<blink::WebElement>();
   if (!web_element.document().frame())
-    return;
+    return false;
 
   const blink::WebInputElement* element = toWebInputElement(&web_element);
   if (!element || *element != generation_element_)
-    return;
+    return false;
 
   if (password_is_generated_) {
     generation_element_.setShouldRevealPassword(true);
     ShowEditingPopup();
+    return true;
   }
 
   // Only trigger if the password field is empty.
@@ -291,7 +293,10 @@
       element->isEnabled() &&
       element->value().isEmpty()) {
     ShowGenerationPopup();
+    return true;
   }
+
+  return false;
 }
 
 bool PasswordGenerationAgent::TextDidChangeInTextField(
diff --git a/components/autofill/content/renderer/password_generation_agent.h b/components/autofill/content/renderer/password_generation_agent.h
index 5f7e9fa..bf632ae 100644
--- a/components/autofill/content/renderer/password_generation_agent.h
+++ b/components/autofill/content/renderer/password_generation_agent.h
@@ -36,6 +36,9 @@
   // is being offered. Updates the state of the popup if necessary.
   bool TextDidChangeInTextField(const blink::WebInputElement& element);
 
+  // Returns true if the newly focused node caused the generation UI to show.
+  bool FocusedNodeHasChanged(const blink::WebNode& node);
+
  protected:
   // Returns true if this document is one that we should consider analyzing.
   // Virtual so that it can be overriden during testing.
@@ -51,7 +54,6 @@
   // RenderViewObserver:
   virtual void DidFinishDocumentLoad(blink::WebLocalFrame* frame) OVERRIDE;
   virtual void DidFinishLoad(blink::WebLocalFrame* frame) OVERRIDE;
-  virtual void FocusedNodeChanged(const blink::WebNode& node) OVERRIDE;
 
   // Message handlers.
   void OnFormNotBlacklisted(const PasswordForm& form);
diff --git a/components/autofill/core/common/save_password_progress_logger.cc b/components/autofill/core/common/save_password_progress_logger.cc
index cdb8dd7..5f051cc 100644
--- a/components/autofill/core/common/save_password_progress_logger.cc
+++ b/components/autofill/core/common/save_password_progress_logger.cc
@@ -4,9 +4,14 @@
 
 #include "components/autofill/core/common/save_password_progress_logger.h"
 
+#include <algorithm>
+
 #include "base/json/json_writer.h"
 #include "base/logging.h"
 #include "base/numerics/safe_conversions.h"
+#include "base/strings/string16.h"
+#include "base/strings/string_util.h"
+#include "base/strings/utf_string_conversions.h"
 #include "base/values.h"
 #include "components/autofill/core/common/password_form.h"
 
@@ -20,6 +25,76 @@
 
 namespace {
 
+// Note 1: Caching the ID->string map in an array would be probably faster, but
+// the switch statement is (a) robust against re-ordering, and (b) checks in
+// compile-time, that all IDs get a string assigned. The expected frequency of
+// calls is low enough (in particular, zero if password manager internals page
+// is not open), that optimizing for code robustness is preferred against speed.
+// Note 2: The messages can be used as dictionary keys. Do not use '.' in them.
+std::string GetStringFromID(SavePasswordProgressLogger::StringID id) {
+  switch (id) {
+    case SavePasswordProgressLogger::STRING_DECISION_ASK:
+      return "Decision: ASK the user";
+    case SavePasswordProgressLogger::STRING_DECISION_DROP:
+      return "Decision: DROP the password";
+    case SavePasswordProgressLogger::STRING_DECISION_SAVE:
+      return "Decision: SAVE the password";
+    case SavePasswordProgressLogger::STRING_METHOD:
+      return "Form method";
+    case SavePasswordProgressLogger::STRING_METHOD_GET:
+      return "GET";
+    case SavePasswordProgressLogger::STRING_METHOD_POST:
+      return "POST";
+    case SavePasswordProgressLogger::STRING_METHOD_EMPTY:
+      return "(empty)";
+    case SavePasswordProgressLogger::STRING_OTHER:
+      return "(other)";
+    case SavePasswordProgressLogger::STRING_SCHEME_HTML:
+      return "HTML";
+    case SavePasswordProgressLogger::STRING_SCHEME_BASIC:
+      return "Basic";
+    case SavePasswordProgressLogger::STRING_SCHEME_DIGEST:
+      return "Digest";
+    case SavePasswordProgressLogger::STRING_SCHEME_MESSAGE:
+      return "Scheme";
+    case SavePasswordProgressLogger::STRING_SIGNON_REALM:
+      return "Signon realm";
+    case SavePasswordProgressLogger::STRING_ORIGINAL_SIGNON_REALM:
+      return "Original signon realm";
+    case SavePasswordProgressLogger::STRING_ORIGIN:
+      return "Origin";
+    case SavePasswordProgressLogger::STRING_ACTION:
+      return "Action";
+    case SavePasswordProgressLogger::STRING_USERNAME_ELEMENT:
+      return "Username element";
+    case SavePasswordProgressLogger::STRING_PASSWORD_ELEMENT:
+      return "Password element";
+    case SavePasswordProgressLogger::STRING_PASSWORD_AUTOCOMPLETE_SET:
+      return "Password autocomplete set";
+    case SavePasswordProgressLogger::STRING_OLD_PASSWORD_ELEMENT:
+      return "Old password element";
+    case SavePasswordProgressLogger::STRING_SSL_VALID:
+      return "SSL valid";
+    case SavePasswordProgressLogger::STRING_PASSWORD_GENERATED:
+      return "Password generated";
+    case SavePasswordProgressLogger::STRING_TIMES_USED:
+      return "Times used";
+    case SavePasswordProgressLogger::STRING_USE_ADDITIONAL_AUTHENTICATION:
+      return "Use additional authentication";
+    case SavePasswordProgressLogger::STRING_PSL_MATCH:
+      return "PSL match";
+    case SavePasswordProgressLogger::STRING_NAME_OR_ID:
+      return "Form name or ID";
+    case SavePasswordProgressLogger::STRING_MESSAGE:
+      return "Message";
+    case SavePasswordProgressLogger::STRING_INVALID:
+      return "INVALID";
+      // Intentionally no default: clause here -- all IDs need to get covered.
+  }
+  NOTREACHED();  // Win compilers don't believe this is unreachable.
+  return std::string();
+};
+
 // Removes privacy sensitive parts of |url| (currently all but host and scheme).
 std::string ScrubURL(const GURL& url) {
   if (url.is_valid())
@@ -27,112 +102,150 @@
   return std::string();
 }
 
-std::string FormSchemeToString(PasswordForm::Scheme scheme) {
-  switch (scheme) {
-    case PasswordForm::SCHEME_HTML:
-      return "HTML";
-    case PasswordForm::SCHEME_BASIC:
-      return "BASIC";
-    case PasswordForm::SCHEME_DIGEST:
-      return "DIGEST";
-    case PasswordForm::SCHEME_OTHER:
-      return "OTHER";
-  }
-  NOTREACHED();  // Win compilers don't believe this is unreachable.
-  return std::string();
+// Returns true for all characters which we don't want to see in the logged IDs
+// or names of HTML elements.
+bool IsUnwantedInElementID(char c) {
+  return !(c == '_' || c == '-' || IsAsciiAlpha(c) || IsAsciiDigit(c));
 }
 
-StringValue DecisionToStringValue(
-    SavePasswordProgressLogger::Decision decision) {
-  switch (decision) {
-    case SavePasswordProgressLogger::DECISION_SAVE:
-      return StringValue("SAVE the password");
-    case SavePasswordProgressLogger::DECISION_ASK:
-      return StringValue("ASK the user whether to save the password");
-    case SavePasswordProgressLogger::DECISION_DROP:
-      return StringValue("DROP the password");
+// Replaces all characters satisfying IsUnwantedInElementID by a ' ', and turns
+// all characters to lowercase. This damages some valid HTML element IDs or
+// names, but it is likely that it will be still possible to match the scrubbed
+// string to the original ID or name in the HTML doc. That's good enough for the
+// logging purposes, and provides some security benefits.
+std::string ScrubElementID(std::string element_id) {
+  std::replace_if(
+      element_id.begin(), element_id.end(), IsUnwantedInElementID, ' ');
+  return StringToLowerASCII(element_id);
+}
+
+std::string ScrubElementID(const base::string16& element_id) {
+  return ScrubElementID(base::UTF16ToUTF8(element_id));
+}
+
+std::string FormSchemeToString(PasswordForm::Scheme scheme) {
+  SavePasswordProgressLogger::StringID result_id =
+      SavePasswordProgressLogger::STRING_INVALID;
+  switch (scheme) {
+    case PasswordForm::SCHEME_HTML:
+      result_id = SavePasswordProgressLogger::STRING_SCHEME_HTML;
+      break;
+    case PasswordForm::SCHEME_BASIC:
+      result_id = SavePasswordProgressLogger::STRING_SCHEME_BASIC;
+      break;
+    case PasswordForm::SCHEME_DIGEST:
+      result_id = SavePasswordProgressLogger::STRING_SCHEME_DIGEST;
+      break;
+    case PasswordForm::SCHEME_OTHER:
+      result_id = SavePasswordProgressLogger::STRING_OTHER;
+      break;
   }
-  NOTREACHED();  // Win compilers don't believe this is unreachable.
-  return StringValue(std::string());
+  return GetStringFromID(result_id);
+}
+
+std::string FormMethodToString(const std::string& method) {
+  std::string method_processed;
+  base::TrimWhitespaceASCII(
+      StringToLowerASCII(method), base::TRIM_ALL, &method_processed);
+  SavePasswordProgressLogger::StringID result_id =
+      SavePasswordProgressLogger::STRING_OTHER;
+  if (method_processed.empty())
+    result_id = SavePasswordProgressLogger::STRING_METHOD_EMPTY;
+  else if (method_processed == "get")
+    result_id = SavePasswordProgressLogger::STRING_METHOD_GET;
+  else if (method_processed == "post")
+    result_id = SavePasswordProgressLogger::STRING_METHOD_POST;
+  return GetStringFromID(result_id);
 }
 
 }  // namespace
 
-SavePasswordProgressLogger::SavePasswordProgressLogger() {}
+SavePasswordProgressLogger::SavePasswordProgressLogger() {
+}
 
-SavePasswordProgressLogger::~SavePasswordProgressLogger() {}
+SavePasswordProgressLogger::~SavePasswordProgressLogger() {
+}
 
-void SavePasswordProgressLogger::LogPasswordForm(const std::string& message,
-                                                 const PasswordForm& form) {
+void SavePasswordProgressLogger::LogPasswordForm(
+    SavePasswordProgressLogger::StringID label,
+    const PasswordForm& form) {
   DictionaryValue log;
-  // Do not use the "<<" operator for PasswordForms, because it also prints
-  // passwords. Also, that operator is only for testing.
-  log.SetString("scheme", FormSchemeToString(form.scheme));
-  log.SetString("signon realm", ScrubURL(GURL(form.signon_realm)));
-  log.SetString("original signon realm",
+  log.SetString(GetStringFromID(STRING_SCHEME_MESSAGE),
+                FormSchemeToString(form.scheme));
+  log.SetString(GetStringFromID(STRING_SCHEME_MESSAGE),
+                FormSchemeToString(form.scheme));
+  log.SetString(GetStringFromID(STRING_SIGNON_REALM),
+                ScrubURL(GURL(form.signon_realm)));
+  log.SetString(GetStringFromID(STRING_ORIGINAL_SIGNON_REALM),
                 ScrubURL(GURL(form.original_signon_realm)));
-  log.SetString("origin", ScrubURL(form.origin));
-  log.SetString("action", ScrubURL(form.action));
-  log.SetString("username element", form.username_element);
-  log.SetString("password element", form.password_element);
-  log.SetBoolean("password autocomplete set", form.password_autocomplete_set);
-  log.SetString("old password element", form.old_password_element);
-  log.SetBoolean("ssl valid", form.ssl_valid);
-  log.SetBoolean("password generated",
+  log.SetString(GetStringFromID(STRING_ORIGIN), ScrubURL(form.origin));
+  log.SetString(GetStringFromID(STRING_ACTION), ScrubURL(form.action));
+  log.SetString(GetStringFromID(STRING_USERNAME_ELEMENT),
+                ScrubElementID(form.username_element));
+  log.SetString(GetStringFromID(STRING_PASSWORD_ELEMENT),
+                ScrubElementID(form.password_element));
+  log.SetBoolean(GetStringFromID(STRING_PASSWORD_AUTOCOMPLETE_SET),
+                 form.password_autocomplete_set);
+  log.SetString(GetStringFromID(STRING_OLD_PASSWORD_ELEMENT),
+                ScrubElementID(form.old_password_element));
+  log.SetBoolean(GetStringFromID(STRING_SSL_VALID), form.ssl_valid);
+  log.SetBoolean(GetStringFromID(STRING_PASSWORD_GENERATED),
                  form.type == PasswordForm::TYPE_GENERATED);
-  log.SetInteger("times used", form.times_used);
-  log.SetBoolean("use additional authentication",
+  log.SetInteger(GetStringFromID(STRING_TIMES_USED), form.times_used);
+  log.SetBoolean(GetStringFromID(STRING_USE_ADDITIONAL_AUTHENTICATION),
                  form.use_additional_authentication);
-  log.SetBoolean("is PSL match", form.IsPublicSuffixMatch());
-  LogValue(message, log);
+  log.SetBoolean(GetStringFromID(STRING_PSL_MATCH), form.IsPublicSuffixMatch());
+  LogValue(label, log);
 }
 
-void SavePasswordProgressLogger::LogHTMLForm(const std::string& message,
-                                             const std::string& name_or_id,
-                                             const std::string& method,
-                                             const GURL& action) {
+void SavePasswordProgressLogger::LogHTMLForm(
+    SavePasswordProgressLogger::StringID label,
+    const std::string& name_or_id,
+    const std::string& method,
+    const GURL& action) {
   DictionaryValue log;
-  log.SetString("name_or_id", name_or_id);
-  log.SetString("method", method);
-  log.SetString("action", ScrubURL(action));
-  LogValue(message, log);
+  log.SetString(GetStringFromID(STRING_NAME_OR_ID), ScrubElementID(name_or_id));
+  log.SetString(GetStringFromID(STRING_METHOD), FormMethodToString(method));
+  log.SetString(GetStringFromID(STRING_ACTION), ScrubURL(action));
+  LogValue(label, log);
 }
 
-void SavePasswordProgressLogger::LogURL(const std::string& message,
-                                        const GURL& url) {
-  LogValue(message, StringValue(ScrubURL(url)));
+void SavePasswordProgressLogger::LogURL(
+    SavePasswordProgressLogger::StringID label,
+    const GURL& url) {
+  LogValue(label, StringValue(ScrubURL(url)));
 }
 
-void SavePasswordProgressLogger::LogBoolean(const std::string& message,
-                                            bool value) {
-  LogValue(message, FundamentalValue(value));
+void SavePasswordProgressLogger::LogBoolean(
+    SavePasswordProgressLogger::StringID label,
+    bool truth_value) {
+  LogValue(label, FundamentalValue(truth_value));
 }
 
-void SavePasswordProgressLogger::LogNumber(const std::string& message,
-                                           int value) {
-  LogValue(message, FundamentalValue(value));
+void SavePasswordProgressLogger::LogNumber(
+    SavePasswordProgressLogger::StringID label,
+    int signed_number) {
+  LogValue(label, FundamentalValue(signed_number));
 }
 
-void SavePasswordProgressLogger::LogNumber(const std::string& message,
-                                           size_t value) {
-  LogValue(message, FundamentalValue(checked_cast<int, size_t>(value)));
+void SavePasswordProgressLogger::LogNumber(
+    SavePasswordProgressLogger::StringID label,
+    size_t unsigned_number) {
+  int signed_number = checked_cast<int, size_t>(unsigned_number);
+  LogNumber(label, signed_number);
 }
 
-void SavePasswordProgressLogger::LogFinalDecision(Decision decision) {
-  LogValue("Final decision taken", DecisionToStringValue(decision));
+void SavePasswordProgressLogger::LogMessage(
+    SavePasswordProgressLogger::StringID message) {
+  LogValue(STRING_MESSAGE, StringValue(GetStringFromID(message)));
 }
 
-void SavePasswordProgressLogger::LogMessage(const std::string& message) {
-  LogValue("Message", StringValue(message));
-}
-
-void SavePasswordProgressLogger::LogValue(const std::string& name,
-                                          const Value& log) {
+void SavePasswordProgressLogger::LogValue(StringID label, const Value& log) {
   std::string log_string;
   bool conversion_to_string_successful = base::JSONWriter::WriteWithOptions(
       &log, base::JSONWriter::OPTIONS_PRETTY_PRINT, &log_string);
   DCHECK(conversion_to_string_successful);
-  SendLog(name + ": " + log_string);
+  SendLog(GetStringFromID(label) + ": " + log_string);
 }
 
 }  // namespace autofill
diff --git a/components/autofill/core/common/save_password_progress_logger.h b/components/autofill/core/common/save_password_progress_logger.h
index 9df9908..d5b98ad 100644
--- a/components/autofill/core/common/save_password_progress_logger.h
+++ b/components/autofill/core/common/save_password_progress_logger.h
@@ -32,38 +32,63 @@
 // to stay in autofill as well.
 class SavePasswordProgressLogger {
  public:
-  // All three possible decisions about saving a password. Call LogFinalDecision
-  // as soon as one is taken by the password management code.
-  enum Decision { DECISION_SAVE, DECISION_ASK, DECISION_DROP };
+  // IDs of strings allowed in the logs: for security reasons, we only pass the
+  // IDs from the renderer, and map them to strings in the browser.
+  enum StringID {
+    STRING_DECISION_ASK,
+    STRING_DECISION_DROP,
+    STRING_DECISION_SAVE,
+    STRING_METHOD,
+    STRING_METHOD_GET,
+    STRING_METHOD_POST,
+    STRING_METHOD_EMPTY,
+    STRING_OTHER,
+    STRING_SCHEME_HTML,
+    STRING_SCHEME_BASIC,
+    STRING_SCHEME_DIGEST,
+    STRING_SCHEME_MESSAGE,
+    STRING_SIGNON_REALM,
+    STRING_ORIGINAL_SIGNON_REALM,
+    STRING_ORIGIN,
+    STRING_ACTION,
+    STRING_USERNAME_ELEMENT,
+    STRING_PASSWORD_ELEMENT,
+    STRING_PASSWORD_AUTOCOMPLETE_SET,
+    STRING_OLD_PASSWORD_ELEMENT,
+    STRING_SSL_VALID,
+    STRING_PASSWORD_GENERATED,
+    STRING_TIMES_USED,
+    STRING_USE_ADDITIONAL_AUTHENTICATION,
+    STRING_PSL_MATCH,
+    STRING_NAME_OR_ID,
+    STRING_MESSAGE,
+    STRING_INVALID,  // Represents a string returned in a case of an error.
+    STRING_MAX = STRING_INVALID
+  };
 
   SavePasswordProgressLogger();
   virtual ~SavePasswordProgressLogger();
 
-  // Logging: specialized methods (for logging forms, URLs, etc.) take care of
-  // proper removing of sensitive data where appropriate.
-  void LogPasswordForm(const std::string& message,
-                       const autofill::PasswordForm& form);
-  void LogHTMLForm(const std::string& message,
+  // Call these methods to log information. They sanitize the input and call
+  // SendLog to pass it for display.
+  void LogPasswordForm(StringID label, const autofill::PasswordForm& form);
+  void LogHTMLForm(StringID label,
                    const std::string& name_or_id,
                    const std::string& method,
                    const GURL& action);
-  void LogURL(const std::string& message, const GURL& url);
-  void LogBoolean(const std::string& message, bool value);
-  void LogNumber(const std::string& message, int value);
-  void LogNumber(const std::string& message, size_t value);
-  void LogFinalDecision(Decision decision);
-  // Do not use LogMessage when there is an appropriate specialized method
-  // above. LogMessage performs no scrubbing of sensitive data.
-  void LogMessage(const std::string& message);
+  void LogURL(StringID label, const GURL& url);
+  void LogBoolean(StringID label, bool truth_value);
+  void LogNumber(StringID label, int signed_number);
+  void LogNumber(StringID label, size_t unsigned_number);
+  void LogMessage(StringID message);
 
  protected:
   // Sends |log| immediately for display.
   virtual void SendLog(const std::string& log) = 0;
 
  private:
-  // Takes a structured |log|, converts it to a string suitable for plain text
-  // output, adds the |name| as a caption, and sends out via SendLog.
-  void LogValue(const std::string& name, const base::Value& log);
+  // Converts |log| and its |label| to a string and calls SendLog on the result.
+  void LogValue(StringID label, const base::Value& log);
 
   DISALLOW_COPY_AND_ASSIGN(SavePasswordProgressLogger);
 };
diff --git a/components/autofill/core/common/save_password_progress_logger_unittest.cc b/components/autofill/core/common/save_password_progress_logger_unittest.cc
index 9c09505..805cc5f 100644
--- a/components/autofill/core/common/save_password_progress_logger_unittest.cc
+++ b/components/autofill/core/common/save_password_progress_logger_unittest.cc
@@ -21,7 +21,7 @@
 
 namespace {
 
-const char kTestString[] = "Test";
+const char kTestString[] = "Message";  // Corresponds to STRING_MESSAGE.
 
 class TestLogger : public SavePasswordProgressLogger {
  public:
@@ -45,34 +45,62 @@
   TestLogger logger;
   PasswordForm form;
   form.action = GURL("http://example.org/verysecret?verysecret");
+  form.password_element = UTF8ToUTF16("pwdelement");
   form.password_value = UTF8ToUTF16("verysecret");
   form.username_value = UTF8ToUTF16("verysecret");
-  logger.LogPasswordForm(kTestString, form);
+  logger.LogPasswordForm(SavePasswordProgressLogger::STRING_MESSAGE, form);
   SCOPED_TRACE(testing::Message() << "Log string = ["
                                   << logger.accumulated_log() << "]");
   EXPECT_TRUE(logger.LogsContainSubstring(kTestString));
+  EXPECT_TRUE(logger.LogsContainSubstring("pwdelement"));
   EXPECT_TRUE(logger.LogsContainSubstring("http://example.org"));
   EXPECT_FALSE(logger.LogsContainSubstring("verysecret"));
 }
 
+TEST(SavePasswordProgressLoggerTest, LogPasswordFormElementID) {
+  // Test filtering element IDs.
+  TestLogger logger;
+  PasswordForm form;
+  const std::string kHTMLInside("Username <script> element");
+  const std::string kHTMLInsideExpected("username  script  element");
+  const std::string kIPAddressInside("y128.0.0.1Y");
+  const std::string kIPAddressInsideExpected("y128 0 0 1y");
+  const std::string kSpecialCharsInside("X@#a$%B&*c()D;:e+!x");
+  const std::string kSpecialCharsInsideExpected("x  a  b  c  d  e  x");
+  form.username_element = UTF8ToUTF16(kHTMLInside);
+  form.password_element = UTF8ToUTF16(kIPAddressInside);
+  form.old_password_element = UTF8ToUTF16(kSpecialCharsInside);
+  logger.LogPasswordForm(SavePasswordProgressLogger::STRING_MESSAGE, form);
+  SCOPED_TRACE(testing::Message() << "Log string = ["
+                                  << logger.accumulated_log() << "]");
+  EXPECT_TRUE(logger.LogsContainSubstring(kTestString));
+  EXPECT_FALSE(logger.LogsContainSubstring(kHTMLInside));
+  EXPECT_TRUE(logger.LogsContainSubstring(kHTMLInsideExpected));
+  EXPECT_FALSE(logger.LogsContainSubstring(kIPAddressInside));
+  EXPECT_TRUE(logger.LogsContainSubstring(kIPAddressInsideExpected));
+  EXPECT_FALSE(logger.LogsContainSubstring(kSpecialCharsInside));
+  EXPECT_TRUE(logger.LogsContainSubstring(kSpecialCharsInsideExpected));
+}
+
 TEST(SavePasswordProgressLoggerTest, LogHTMLForm) {
   TestLogger logger;
-  logger.LogHTMLForm(kTestString,
+  logger.LogHTMLForm(SavePasswordProgressLogger::STRING_MESSAGE,
                      "form_name",
-                     "form_method",
+                     "post",
                      GURL("http://example.org/verysecret?verysecret"));
   SCOPED_TRACE(testing::Message() << "Log string = ["
                                   << logger.accumulated_log() << "]");
   EXPECT_TRUE(logger.LogsContainSubstring(kTestString));
   EXPECT_TRUE(logger.LogsContainSubstring("form_name"));
-  EXPECT_TRUE(logger.LogsContainSubstring("form_method"));
+  EXPECT_TRUE(logger.LogsContainSubstring("POST"));
   EXPECT_TRUE(logger.LogsContainSubstring("http://example.org"));
   EXPECT_FALSE(logger.LogsContainSubstring("verysecret"));
 }
 
 TEST(SavePasswordProgressLoggerTest, LogURL) {
   TestLogger logger;
-  logger.LogURL(kTestString, GURL("http://example.org/verysecret?verysecret"));
+  logger.LogURL(SavePasswordProgressLogger::STRING_MESSAGE,
+                GURL("http://example.org/verysecret?verysecret"));
   SCOPED_TRACE(testing::Message() << "Log string = ["
                                   << logger.accumulated_log() << "]");
   EXPECT_TRUE(logger.LogsContainSubstring(kTestString));
@@ -82,7 +110,7 @@
 
 TEST(SavePasswordProgressLoggerTest, LogBooleanTrue) {
   TestLogger logger;
-  logger.LogBoolean(kTestString, true);
+  logger.LogBoolean(SavePasswordProgressLogger::STRING_MESSAGE, true);
   SCOPED_TRACE(testing::Message() << "Log string = ["
                                   << logger.accumulated_log() << "]");
   EXPECT_TRUE(logger.LogsContainSubstring(kTestString));
@@ -91,7 +119,7 @@
 
 TEST(SavePasswordProgressLoggerTest, LogBooleanFalse) {
   TestLogger logger;
-  logger.LogBoolean(kTestString, false);
+  logger.LogBoolean(SavePasswordProgressLogger::STRING_MESSAGE, false);
   SCOPED_TRACE(testing::Message() << "Log string = ["
                                   << logger.accumulated_log() << "]");
   EXPECT_TRUE(logger.LogsContainSubstring(kTestString));
@@ -101,7 +129,7 @@
 TEST(SavePasswordProgressLoggerTest, LogSignedNumber) {
   TestLogger logger;
   int signed_number = -12345;
-  logger.LogNumber(kTestString, signed_number);
+  logger.LogNumber(SavePasswordProgressLogger::STRING_MESSAGE, signed_number);
   SCOPED_TRACE(testing::Message() << "Log string = ["
                                   << logger.accumulated_log() << "]");
   EXPECT_TRUE(logger.LogsContainSubstring(kTestString));
@@ -111,40 +139,16 @@
 TEST(SavePasswordProgressLoggerTest, LogUnsignedNumber) {
   TestLogger logger;
   size_t unsigned_number = 654321;
-  logger.LogNumber(kTestString, unsigned_number);
+  logger.LogNumber(SavePasswordProgressLogger::STRING_MESSAGE, unsigned_number);
   SCOPED_TRACE(testing::Message() << "Log string = ["
                                   << logger.accumulated_log() << "]");
   EXPECT_TRUE(logger.LogsContainSubstring(kTestString));
   EXPECT_TRUE(logger.LogsContainSubstring("654321"));
 }
 
-TEST(SavePasswordProgressLoggerTest, LogFinalDecisionSave) {
-  TestLogger logger;
-  logger.LogFinalDecision(SavePasswordProgressLogger::DECISION_SAVE);
-  SCOPED_TRACE(testing::Message() << "Log string = ["
-                                  << logger.accumulated_log() << "]");
-  EXPECT_TRUE(logger.LogsContainSubstring("SAVE"));
-}
-
-TEST(SavePasswordProgressLoggerTest, LogFinalDecisionAsk) {
-  TestLogger logger;
-  logger.LogFinalDecision(SavePasswordProgressLogger::DECISION_ASK);
-  SCOPED_TRACE(testing::Message() << "Log string = ["
-                                  << logger.accumulated_log() << "]");
-  EXPECT_TRUE(logger.LogsContainSubstring("ASK"));
-}
-
-TEST(SavePasswordProgressLoggerTest, LogFinalDecisionDrop) {
-  TestLogger logger;
-  logger.LogFinalDecision(SavePasswordProgressLogger::DECISION_DROP);
-  SCOPED_TRACE(testing::Message() << "Log string = ["
-                                  << logger.accumulated_log() << "]");
-  EXPECT_TRUE(logger.LogsContainSubstring("DROP"));
-}
-
 TEST(SavePasswordProgressLoggerTest, LogMessage) {
   TestLogger logger;
-  logger.LogMessage(kTestString);
+  logger.LogMessage(SavePasswordProgressLogger::STRING_MESSAGE);
   SCOPED_TRACE(testing::Message() << "Log string = ["
                                   << logger.accumulated_log() << "]");
   EXPECT_TRUE(logger.LogsContainSubstring(kTestString));
diff --git a/components/autofill_content_browser.target.darwin-arm.mk b/components/autofill_content_browser.target.darwin-arm.mk
index 318c0ce..55ab2d3 100644
--- a/components/autofill_content_browser.target.darwin-arm.mk
+++ b/components/autofill_content_browser.target.darwin-arm.mk
@@ -112,12 +112,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -262,12 +265,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -369,7 +375,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill_content_browser.target.darwin-mips.mk b/components/autofill_content_browser.target.darwin-mips.mk
index acfd867..356cec7 100644
--- a/components/autofill_content_browser.target.darwin-mips.mk
+++ b/components/autofill_content_browser.target.darwin-mips.mk
@@ -111,12 +111,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -260,12 +263,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -365,7 +371,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill_content_browser.target.darwin-x86.mk b/components/autofill_content_browser.target.darwin-x86.mk
index 4da2fbb..2fe8b20 100644
--- a/components/autofill_content_browser.target.darwin-x86.mk
+++ b/components/autofill_content_browser.target.darwin-x86.mk
@@ -113,12 +113,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -262,12 +265,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -365,7 +371,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill_content_browser.target.darwin-x86_64.mk b/components/autofill_content_browser.target.darwin-x86_64.mk
index 845ac27..6c70138 100644
--- a/components/autofill_content_browser.target.darwin-x86_64.mk
+++ b/components/autofill_content_browser.target.darwin-x86_64.mk
@@ -113,12 +113,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -263,12 +266,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -367,7 +373,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill_content_browser.target.linux-arm.mk b/components/autofill_content_browser.target.linux-arm.mk
index 318c0ce..55ab2d3 100644
--- a/components/autofill_content_browser.target.linux-arm.mk
+++ b/components/autofill_content_browser.target.linux-arm.mk
@@ -112,12 +112,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -262,12 +265,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -369,7 +375,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill_content_browser.target.linux-mips.mk b/components/autofill_content_browser.target.linux-mips.mk
index acfd867..356cec7 100644
--- a/components/autofill_content_browser.target.linux-mips.mk
+++ b/components/autofill_content_browser.target.linux-mips.mk
@@ -111,12 +111,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -260,12 +263,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -365,7 +371,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill_content_browser.target.linux-x86.mk b/components/autofill_content_browser.target.linux-x86.mk
index 4da2fbb..2fe8b20 100644
--- a/components/autofill_content_browser.target.linux-x86.mk
+++ b/components/autofill_content_browser.target.linux-x86.mk
@@ -113,12 +113,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -262,12 +265,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -365,7 +371,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill_content_browser.target.linux-x86_64.mk b/components/autofill_content_browser.target.linux-x86_64.mk
index 845ac27..6c70138 100644
--- a/components/autofill_content_browser.target.linux-x86_64.mk
+++ b/components/autofill_content_browser.target.linux-x86_64.mk
@@ -113,12 +113,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -263,12 +266,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -367,7 +373,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill_content_common.target.darwin-arm.mk b/components/autofill_content_common.target.darwin-arm.mk
index a872f93..c5267e2 100644
--- a/components/autofill_content_common.target.darwin-arm.mk
+++ b/components/autofill_content_common.target.darwin-arm.mk
@@ -92,12 +92,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -216,12 +219,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -297,7 +303,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill_content_common.target.darwin-mips.mk b/components/autofill_content_common.target.darwin-mips.mk
index c4b3f05..d5a4a02 100644
--- a/components/autofill_content_common.target.darwin-mips.mk
+++ b/components/autofill_content_common.target.darwin-mips.mk
@@ -91,12 +91,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -214,12 +217,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -293,7 +299,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill_content_common.target.darwin-x86.mk b/components/autofill_content_common.target.darwin-x86.mk
index 1360836..bfffc5a 100644
--- a/components/autofill_content_common.target.darwin-x86.mk
+++ b/components/autofill_content_common.target.darwin-x86.mk
@@ -93,12 +93,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -217,12 +220,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -295,7 +301,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill_content_common.target.darwin-x86_64.mk b/components/autofill_content_common.target.darwin-x86_64.mk
index 510cc24..f4585f8 100644
--- a/components/autofill_content_common.target.darwin-x86_64.mk
+++ b/components/autofill_content_common.target.darwin-x86_64.mk
@@ -93,12 +93,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -217,12 +220,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -295,7 +301,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill_content_common.target.linux-arm.mk b/components/autofill_content_common.target.linux-arm.mk
index a872f93..c5267e2 100644
--- a/components/autofill_content_common.target.linux-arm.mk
+++ b/components/autofill_content_common.target.linux-arm.mk
@@ -92,12 +92,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -216,12 +219,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -297,7 +303,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill_content_common.target.linux-mips.mk b/components/autofill_content_common.target.linux-mips.mk
index c4b3f05..d5a4a02 100644
--- a/components/autofill_content_common.target.linux-mips.mk
+++ b/components/autofill_content_common.target.linux-mips.mk
@@ -91,12 +91,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -214,12 +217,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -293,7 +299,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill_content_common.target.linux-x86.mk b/components/autofill_content_common.target.linux-x86.mk
index 1360836..bfffc5a 100644
--- a/components/autofill_content_common.target.linux-x86.mk
+++ b/components/autofill_content_common.target.linux-x86.mk
@@ -93,12 +93,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -217,12 +220,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -295,7 +301,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill_content_common.target.linux-x86_64.mk b/components/autofill_content_common.target.linux-x86_64.mk
index 510cc24..f4585f8 100644
--- a/components/autofill_content_common.target.linux-x86_64.mk
+++ b/components/autofill_content_common.target.linux-x86_64.mk
@@ -93,12 +93,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -217,12 +220,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -295,7 +301,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill_content_renderer.target.darwin-arm.mk b/components/autofill_content_renderer.target.darwin-arm.mk
index 430c936..a541bdf 100644
--- a/components/autofill_content_renderer.target.darwin-arm.mk
+++ b/components/autofill_content_renderer.target.darwin-arm.mk
@@ -102,12 +102,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -243,12 +246,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -340,7 +346,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill_content_renderer.target.darwin-mips.mk b/components/autofill_content_renderer.target.darwin-mips.mk
index 6633fd2..a7a1f11 100644
--- a/components/autofill_content_renderer.target.darwin-mips.mk
+++ b/components/autofill_content_renderer.target.darwin-mips.mk
@@ -101,12 +101,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -241,12 +244,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -336,7 +342,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill_content_renderer.target.darwin-x86.mk b/components/autofill_content_renderer.target.darwin-x86.mk
index f3ff0a1..d99cdd1 100644
--- a/components/autofill_content_renderer.target.darwin-x86.mk
+++ b/components/autofill_content_renderer.target.darwin-x86.mk
@@ -103,12 +103,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -244,12 +247,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -338,7 +344,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill_content_renderer.target.darwin-x86_64.mk b/components/autofill_content_renderer.target.darwin-x86_64.mk
index 5c99b99..f21d135 100644
--- a/components/autofill_content_renderer.target.darwin-x86_64.mk
+++ b/components/autofill_content_renderer.target.darwin-x86_64.mk
@@ -103,12 +103,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -244,12 +247,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -338,7 +344,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill_content_renderer.target.linux-arm.mk b/components/autofill_content_renderer.target.linux-arm.mk
index 430c936..a541bdf 100644
--- a/components/autofill_content_renderer.target.linux-arm.mk
+++ b/components/autofill_content_renderer.target.linux-arm.mk
@@ -102,12 +102,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -243,12 +246,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -340,7 +346,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill_content_renderer.target.linux-mips.mk b/components/autofill_content_renderer.target.linux-mips.mk
index 6633fd2..a7a1f11 100644
--- a/components/autofill_content_renderer.target.linux-mips.mk
+++ b/components/autofill_content_renderer.target.linux-mips.mk
@@ -101,12 +101,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -241,12 +244,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -336,7 +342,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill_content_renderer.target.linux-x86.mk b/components/autofill_content_renderer.target.linux-x86.mk
index f3ff0a1..d99cdd1 100644
--- a/components/autofill_content_renderer.target.linux-x86.mk
+++ b/components/autofill_content_renderer.target.linux-x86.mk
@@ -103,12 +103,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -244,12 +247,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -338,7 +344,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill_content_renderer.target.linux-x86_64.mk b/components/autofill_content_renderer.target.linux-x86_64.mk
index 5c99b99..f21d135 100644
--- a/components/autofill_content_renderer.target.linux-x86_64.mk
+++ b/components/autofill_content_renderer.target.linux-x86_64.mk
@@ -103,12 +103,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -244,12 +247,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -338,7 +344,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill_content_risk_proto.target.darwin-arm.mk b/components/autofill_content_risk_proto.target.darwin-arm.mk
index b1e496b..e1b0475 100644
--- a/components/autofill_content_risk_proto.target.darwin-arm.mk
+++ b/components/autofill_content_risk_proto.target.darwin-arm.mk
@@ -252,7 +252,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill_content_risk_proto.target.darwin-mips.mk b/components/autofill_content_risk_proto.target.darwin-mips.mk
index adeebeb..6c35fae 100644
--- a/components/autofill_content_risk_proto.target.darwin-mips.mk
+++ b/components/autofill_content_risk_proto.target.darwin-mips.mk
@@ -248,7 +248,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill_content_risk_proto.target.darwin-x86.mk b/components/autofill_content_risk_proto.target.darwin-x86.mk
index b26a169..d8c9d7a 100644
--- a/components/autofill_content_risk_proto.target.darwin-x86.mk
+++ b/components/autofill_content_risk_proto.target.darwin-x86.mk
@@ -250,7 +250,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill_content_risk_proto.target.darwin-x86_64.mk b/components/autofill_content_risk_proto.target.darwin-x86_64.mk
index 0a6f30d..d96f588 100644
--- a/components/autofill_content_risk_proto.target.darwin-x86_64.mk
+++ b/components/autofill_content_risk_proto.target.darwin-x86_64.mk
@@ -250,7 +250,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill_content_risk_proto.target.linux-arm.mk b/components/autofill_content_risk_proto.target.linux-arm.mk
index b1e496b..e1b0475 100644
--- a/components/autofill_content_risk_proto.target.linux-arm.mk
+++ b/components/autofill_content_risk_proto.target.linux-arm.mk
@@ -252,7 +252,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill_content_risk_proto.target.linux-mips.mk b/components/autofill_content_risk_proto.target.linux-mips.mk
index adeebeb..6c35fae 100644
--- a/components/autofill_content_risk_proto.target.linux-mips.mk
+++ b/components/autofill_content_risk_proto.target.linux-mips.mk
@@ -248,7 +248,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill_content_risk_proto.target.linux-x86.mk b/components/autofill_content_risk_proto.target.linux-x86.mk
index b26a169..d8c9d7a 100644
--- a/components/autofill_content_risk_proto.target.linux-x86.mk
+++ b/components/autofill_content_risk_proto.target.linux-x86.mk
@@ -250,7 +250,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill_content_risk_proto.target.linux-x86_64.mk b/components/autofill_content_risk_proto.target.linux-x86_64.mk
index 0a6f30d..d96f588 100644
--- a/components/autofill_content_risk_proto.target.linux-x86_64.mk
+++ b/components/autofill_content_risk_proto.target.linux-x86_64.mk
@@ -250,7 +250,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill_core_browser.target.darwin-arm.mk b/components/autofill_core_browser.target.darwin-arm.mk
index e067422..2c4c9a2 100644
--- a/components/autofill_core_browser.target.darwin-arm.mk
+++ b/components/autofill_core_browser.target.darwin-arm.mk
@@ -138,12 +138,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -286,12 +289,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -391,7 +397,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill_core_browser.target.darwin-mips.mk b/components/autofill_core_browser.target.darwin-mips.mk
index 7c6de1a..37c2f36 100644
--- a/components/autofill_core_browser.target.darwin-mips.mk
+++ b/components/autofill_core_browser.target.darwin-mips.mk
@@ -137,12 +137,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -284,12 +287,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -387,7 +393,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill_core_browser.target.darwin-x86.mk b/components/autofill_core_browser.target.darwin-x86.mk
index 916bd81..5252b52 100644
--- a/components/autofill_core_browser.target.darwin-x86.mk
+++ b/components/autofill_core_browser.target.darwin-x86.mk
@@ -139,12 +139,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -286,12 +289,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -387,7 +393,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill_core_browser.target.darwin-x86_64.mk b/components/autofill_core_browser.target.darwin-x86_64.mk
index 61c00d4..ada2824 100644
--- a/components/autofill_core_browser.target.darwin-x86_64.mk
+++ b/components/autofill_core_browser.target.darwin-x86_64.mk
@@ -139,12 +139,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -287,12 +290,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -389,7 +395,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill_core_browser.target.linux-arm.mk b/components/autofill_core_browser.target.linux-arm.mk
index e067422..2c4c9a2 100644
--- a/components/autofill_core_browser.target.linux-arm.mk
+++ b/components/autofill_core_browser.target.linux-arm.mk
@@ -138,12 +138,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -286,12 +289,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -391,7 +397,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill_core_browser.target.linux-mips.mk b/components/autofill_core_browser.target.linux-mips.mk
index 7c6de1a..37c2f36 100644
--- a/components/autofill_core_browser.target.linux-mips.mk
+++ b/components/autofill_core_browser.target.linux-mips.mk
@@ -137,12 +137,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -284,12 +287,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -387,7 +393,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill_core_browser.target.linux-x86.mk b/components/autofill_core_browser.target.linux-x86.mk
index 916bd81..5252b52 100644
--- a/components/autofill_core_browser.target.linux-x86.mk
+++ b/components/autofill_core_browser.target.linux-x86.mk
@@ -139,12 +139,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -286,12 +289,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -387,7 +393,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill_core_browser.target.linux-x86_64.mk b/components/autofill_core_browser.target.linux-x86_64.mk
index 61c00d4..ada2824 100644
--- a/components/autofill_core_browser.target.linux-x86_64.mk
+++ b/components/autofill_core_browser.target.linux-x86_64.mk
@@ -139,12 +139,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -287,12 +290,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -389,7 +395,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill_core_common.target.darwin-arm.mk b/components/autofill_core_common.target.darwin-arm.mk
index 9b59e45..a7d4cc2 100644
--- a/components/autofill_core_common.target.darwin-arm.mk
+++ b/components/autofill_core_common.target.darwin-arm.mk
@@ -110,12 +110,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -231,12 +234,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -309,7 +315,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill_core_common.target.darwin-mips.mk b/components/autofill_core_common.target.darwin-mips.mk
index 043178c..cf49da0 100644
--- a/components/autofill_core_common.target.darwin-mips.mk
+++ b/components/autofill_core_common.target.darwin-mips.mk
@@ -109,12 +109,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -229,12 +232,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -305,7 +311,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill_core_common.target.darwin-x86.mk b/components/autofill_core_common.target.darwin-x86.mk
index 6a25303..187bf7f 100644
--- a/components/autofill_core_common.target.darwin-x86.mk
+++ b/components/autofill_core_common.target.darwin-x86.mk
@@ -110,12 +110,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -230,12 +233,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -305,7 +311,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill_core_common.target.darwin-x86_64.mk b/components/autofill_core_common.target.darwin-x86_64.mk
index e656b88..19e104d 100644
--- a/components/autofill_core_common.target.darwin-x86_64.mk
+++ b/components/autofill_core_common.target.darwin-x86_64.mk
@@ -111,12 +111,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -232,12 +235,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -307,7 +313,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill_core_common.target.linux-arm.mk b/components/autofill_core_common.target.linux-arm.mk
index 9b59e45..a7d4cc2 100644
--- a/components/autofill_core_common.target.linux-arm.mk
+++ b/components/autofill_core_common.target.linux-arm.mk
@@ -110,12 +110,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -231,12 +234,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -309,7 +315,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill_core_common.target.linux-mips.mk b/components/autofill_core_common.target.linux-mips.mk
index 043178c..cf49da0 100644
--- a/components/autofill_core_common.target.linux-mips.mk
+++ b/components/autofill_core_common.target.linux-mips.mk
@@ -109,12 +109,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -229,12 +232,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -305,7 +311,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill_core_common.target.linux-x86.mk b/components/autofill_core_common.target.linux-x86.mk
index 6a25303..187bf7f 100644
--- a/components/autofill_core_common.target.linux-x86.mk
+++ b/components/autofill_core_common.target.linux-x86.mk
@@ -110,12 +110,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -230,12 +233,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -305,7 +311,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/autofill_core_common.target.linux-x86_64.mk b/components/autofill_core_common.target.linux-x86_64.mk
index e656b88..19e104d 100644
--- a/components/autofill_core_common.target.linux-x86_64.mk
+++ b/components/autofill_core_common.target.linux-x86_64.mk
@@ -111,12 +111,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -232,12 +235,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -307,7 +313,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/bookmarks.gypi b/components/bookmarks.gypi
index 076c97f..017885b 100644
--- a/components/bookmarks.gypi
+++ b/components/bookmarks.gypi
@@ -17,8 +17,13 @@
         '../url/url.gyp:url_lib',
       ],
       'sources': [
+        'bookmarks/core/browser/bookmark_match.cc',
+        'bookmarks/core/browser/bookmark_match.h',
         'bookmarks/core/browser/bookmark_node.cc',
         'bookmarks/core/browser/bookmark_node.h',
+        'bookmarks/core/browser/bookmark_prompt_prefs.cc',
+        'bookmarks/core/browser/bookmark_prompt_prefs.h',
+        'bookmarks/core/browser/bookmark_service.h',
       ],
     },
     {
diff --git a/components/bookmarks/DEPS b/components/bookmarks/DEPS
index 389e48f..53d5da2 100644
--- a/components/bookmarks/DEPS
+++ b/components/bookmarks/DEPS
@@ -2,5 +2,6 @@
   # Bookmarks is a component that is not allowed to uses content/ so that it
   # can be shared on iOS.
   "-content",
+  "+components/user_prefs",
   "+ui",
 ]
diff --git a/components/bookmarks/core/browser/bookmark_match.cc b/components/bookmarks/core/browser/bookmark_match.cc
new file mode 100644
index 0000000..6a3d303
--- /dev/null
+++ b/components/bookmarks/core/browser/bookmark_match.cc
@@ -0,0 +1,44 @@
+// 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.
+
+#include "components/bookmarks/core/browser/bookmark_match.h"
+
+#include "base/logging.h"
+#include "base/strings/string16.h"
+
+BookmarkMatch::BookmarkMatch() : node(NULL) {}
+
+BookmarkMatch::~BookmarkMatch() {}
+
+// static
+std::vector<size_t> BookmarkMatch::OffsetsFromMatchPositions(
+    const MatchPositions& match_positions) {
+  std::vector<size_t> offsets;
+  for (MatchPositions::const_iterator i = match_positions.begin();
+       i != match_positions.end(); ++i) {
+    offsets.push_back(i->first);
+    offsets.push_back(i->second);
+  }
+  return offsets;
+}
+
+// static
+BookmarkMatch::MatchPositions BookmarkMatch::ReplaceOffsetsInMatchPositions(
+    const MatchPositions& match_positions,
+    const std::vector<size_t>& offsets) {
+  DCHECK_EQ(2 * match_positions.size(), offsets.size());
+  MatchPositions new_match_positions;
+  std::vector<size_t>::const_iterator offset_iter = offsets.begin();
+  for (MatchPositions::const_iterator match_iter = match_positions.begin();
+       match_iter != match_positions.end(); ++match_iter, ++offset_iter) {
+    const size_t begin = *offset_iter;
+    ++offset_iter;
+    const size_t end = *offset_iter;
+    if ((begin != base::string16::npos) && (end != base::string16::npos)) {
+      const MatchPosition new_match_position(begin, end);
+      new_match_positions.push_back(new_match_position);
+    }
+  }
+  return new_match_positions;
+}
diff --git a/components/bookmarks/core/browser/bookmark_match.h b/components/bookmarks/core/browser/bookmark_match.h
new file mode 100644
index 0000000..b53f9c8
--- /dev/null
+++ b/components/bookmarks/core/browser/bookmark_match.h
@@ -0,0 +1,44 @@
+// 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.
+
+#ifndef COMPONENTS_BOOKMARKS_CORE_BROWSER_BOOKMARK_TITLE_MATCH_H_
+#define COMPONENTS_BOOKMARKS_CORE_BROWSER_BOOKMARK_TITLE_MATCH_H_
+
+#include <cstddef>
+#include <utility>
+#include <vector>
+
+class BookmarkNode;
+
+struct BookmarkMatch {
+  // Each MatchPosition is the [begin, end) positions of a match within a
+  // string.
+  typedef std::pair<size_t, size_t> MatchPosition;
+  typedef std::vector<MatchPosition> MatchPositions;
+
+  BookmarkMatch();
+  ~BookmarkMatch();
+
+  // Extracts and returns the offsets from |match_positions|.
+  static std::vector<size_t> OffsetsFromMatchPositions(
+      const MatchPositions& match_positions);
+
+  // Replaces the offsets in |match_positions| with those given in |offsets|,
+  // deleting any which are npos, and returns the updated list of match
+  // positions.
+  static MatchPositions ReplaceOffsetsInMatchPositions(
+      const MatchPositions& match_positions,
+      const std::vector<size_t>& offsets);
+
+  // The matching node of a query.
+  const BookmarkNode* node;
+
+  // Location of the matching words in the title of the node.
+  MatchPositions title_match_positions;
+
+  // Location of the matching words in the URL of the node.
+  MatchPositions url_match_positions;
+};
+
+#endif  // COMPONENTS_BOOKMARKS_CORE_BROWSER_BOOKMARK_TITLE_MATCH_H_
diff --git a/components/bookmarks/core/browser/bookmark_prompt_prefs.cc b/components/bookmarks/core/browser/bookmark_prompt_prefs.cc
new file mode 100644
index 0000000..9e3de77
--- /dev/null
+++ b/components/bookmarks/core/browser/bookmark_prompt_prefs.cc
@@ -0,0 +1,48 @@
+// 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.
+
+#include "components/bookmarks/core/browser/bookmark_prompt_prefs.h"
+
+#include "base/prefs/pref_service.h"
+#include "components/bookmarks/core/common/bookmark_pref_names.h"
+#include "components/user_prefs/pref_registry_syncable.h"
+
+BookmarkPromptPrefs::BookmarkPromptPrefs(PrefService* user_prefs)
+    : prefs_(user_prefs) {
+}
+
+BookmarkPromptPrefs::~BookmarkPromptPrefs() {
+}
+
+void BookmarkPromptPrefs::DisableBookmarkPrompt() {
+  prefs_->SetBoolean(prefs::kBookmarkPromptEnabled, false);
+}
+
+int BookmarkPromptPrefs::GetPromptImpressionCount() const {
+  return prefs_->GetInteger(prefs::kBookmarkPromptImpressionCount);
+}
+
+void BookmarkPromptPrefs::IncrementPromptImpressionCount() {
+  prefs_->SetInteger(prefs::kBookmarkPromptImpressionCount,
+                     GetPromptImpressionCount() + 1);
+}
+
+bool BookmarkPromptPrefs::IsBookmarkPromptEnabled() const {
+  return prefs_->GetBoolean(prefs::kBookmarkPromptEnabled);
+}
+
+// static
+void BookmarkPromptPrefs::RegisterProfilePrefs(
+    user_prefs::PrefRegistrySyncable* registry) {
+  // We always register preferences without checking FieldTrial, because
+  // we may not receive field trial list from the server yet.
+  registry->RegisterBooleanPref(
+      prefs::kBookmarkPromptEnabled,
+      true,
+      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
+  registry->RegisterIntegerPref(
+      prefs::kBookmarkPromptImpressionCount,
+      0,
+      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
+}
diff --git a/components/bookmarks/core/browser/bookmark_prompt_prefs.h b/components/bookmarks/core/browser/bookmark_prompt_prefs.h
new file mode 100644
index 0000000..c258ed6
--- /dev/null
+++ b/components/bookmarks/core/browser/bookmark_prompt_prefs.h
@@ -0,0 +1,45 @@
+// 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.
+
+#ifndef COMPONENTS_BOOKMARKS_CORE_BROWSER_BOOKMARK_PROMPT_PREFS_H_
+#define COMPONENTS_BOOKMARKS_CORE_BROWSER_BOOKMARK_PROMPT_PREFS_H_
+
+#include "base/basictypes.h"
+
+class PrefService;
+
+namespace user_prefs {
+class PrefRegistrySyncable;
+}
+
+// Helper class for getting, changing bookmark prompt related preferences.
+class BookmarkPromptPrefs {
+ public:
+  // Constructs and associates to |prefs|. Further operations occurred on
+  // associated |prefs|.
+  explicit BookmarkPromptPrefs(PrefService* prefs);
+  ~BookmarkPromptPrefs();
+
+  // Disables bookmark prompt feature.
+  void DisableBookmarkPrompt();
+
+  // Returns number of times bookmark prompt displayed so far.
+  int GetPromptImpressionCount() const;
+
+  // Increments bookmark prompt impression counter.
+  void IncrementPromptImpressionCount();
+
+  // Returns true if bookmark prompt feature enabled, otherwise false.
+  bool IsBookmarkPromptEnabled() const;
+
+  // Registers user preferences used by bookmark prompt feature.
+  static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
+
+ private:
+  PrefService* prefs_;  // Weak.
+
+  DISALLOW_COPY_AND_ASSIGN(BookmarkPromptPrefs);
+};
+
+#endif  // COMPONENTS_BOOKMARKS_CORE_BROWSER_BOOKMARK_PROMPT_PREFS_H_
diff --git a/components/bookmarks/core/browser/bookmark_service.h b/components/bookmarks/core/browser/bookmark_service.h
new file mode 100644
index 0000000..3aaa076
--- /dev/null
+++ b/components/bookmarks/core/browser/bookmark_service.h
@@ -0,0 +1,43 @@
+// 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.
+
+#ifndef COMPONENTS_BOOKMARKS_CORE_BROWSER_BOOKMARK_SERVICE_H_
+#define COMPONENTS_BOOKMARKS_CORE_BROWSER_BOOKMARK_SERVICE_H_
+
+#include <vector>
+
+#include "base/strings/string16.h"
+#include "url/gurl.h"
+
+// BookmarkService provides a thread safe view of bookmarks. It can be used
+// to determine the set of bookmarked URLs or to check if an URL is bookmarked.
+class BookmarkService {
+ public:
+  struct URLAndTitle {
+    GURL url;
+    base::string16 title;
+  };
+
+  // Returns true if the specified URL is bookmarked.
+  //
+  // If not on the main thread you *must* invoke BlockTillLoaded first.
+  virtual bool IsBookmarked(const GURL& url) = 0;
+
+  // Returns, by reference in |bookmarks|, the set of bookmarked urls and their
+  // titles. This returns the unique set of URLs. For example, if two bookmarks
+  // reference the same URL only one entry is added not matter the titles are
+  // same or not.
+  //
+  // If not on the main thread you *must* invoke BlockTillLoaded first.
+  virtual void GetBookmarks(std::vector<URLAndTitle>* bookmarks) = 0;
+
+  // Blocks until loaded. This is intended for usage on a thread other than
+  // the main thread.
+  virtual void BlockTillLoaded() = 0;
+
+ protected:
+  virtual ~BookmarkService() {}
+};
+
+#endif  // COMPONENTS_BOOKMARKS_CORE_BROWSER_BOOKMARK_SERVICE_H_
diff --git a/components/bookmarks_strings.grdp b/components/bookmarks_strings.grdp
new file mode 100644
index 0000000..e21cf85
--- /dev/null
+++ b/components/bookmarks_strings.grdp
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<grit-part>
+  <if expr="not is_android and not is_ios and not use_titlecase">
+    <message name="IDS_BOOKMARK_BAR_FOLDER_NAME" desc="Name shown in the tree for the Bookmarks Bar folder.">
+      Bookmarks bar
+    </message>
+  </if>
+  <if expr="not is_android and not is_ios and use_titlecase">
+    <message name="IDS_BOOKMARK_BAR_FOLDER_NAME" desc="In Title Case: Name shown in the tree for the Bookmarks Bar folder.">
+      Bookmarks Bar
+    </message>
+  </if>
+  <if expr="is_android">
+    <message name="IDS_BOOKMARK_BAR_FOLDER_NAME" desc="Mobile: Name shown in the tree for the desktop bookmarks folder">
+      Desktop bookmarks
+    </message>
+  </if>
+  <if expr="is_ios">
+    <message name="IDS_BOOKMARK_BAR_FOLDER_NAME" desc="Mobile: Name shown in the tree for the desktop bookmarks folder">
+      Desktop Bookmarks
+    </message>
+  </if>
+
+  <if expr="not use_titlecase">
+    <message name="IDS_BOOKMARK_BAR_MOBILE_FOLDER_NAME" desc="Name shown in the tree for the mobile bookmarks folder">
+      Mobile bookmarks
+    </message>
+    <message name="IDS_BOOKMARK_BAR_OTHER_FOLDER_NAME" desc="Name shown in the tree for the other bookmarks folder">
+      Other bookmarks
+    </message>
+  </if>
+  <if expr="use_titlecase">
+    <message name="IDS_BOOKMARK_BAR_MOBILE_FOLDER_NAME" desc="In Title Case: Name shown in the tree for the mobile bookmarks folder">
+      Mobile Bookmarks
+    </message>
+    <message name="IDS_BOOKMARK_BAR_OTHER_FOLDER_NAME" desc="In Title Case: Name shown in the tree for the other bookmarks folder">
+      Other Bookmarks
+    </message>
+  </if>
+</grit-part>
diff --git a/components/breakpad/browser/crash_handler_host_linux.cc b/components/breakpad/browser/crash_handler_host_linux.cc
index cefcd19..856b23f 100644
--- a/components/breakpad/browser/crash_handler_host_linux.cc
+++ b/components/breakpad/browser/crash_handler_host_linux.cc
@@ -114,7 +114,7 @@
 
 void CrashHandlerHostLinux::StartUploaderThread() {
   uploader_thread_.reset(
-      new base::Thread(std::string(process_type_ + "_crash_uploader").c_str()));
+      new base::Thread(process_type_ + "_crash_uploader"));
   uploader_thread_->Start();
 }
 
diff --git a/components/cloud_devices.gypi b/components/cloud_devices.gypi
index 27adfd1..abdcc75 100644
--- a/components/cloud_devices.gypi
+++ b/components/cloud_devices.gypi
@@ -5,23 +5,28 @@
 {
   'targets': [
     {
-      'target_name': 'cloud_devices',
+      'target_name': 'cloud_devices_common',
       'type': 'static_library',
       'include_dirs': [
         '..',
       ],
       'dependencies': [
         '../base/base.gyp:base',
+        '../net/net.gyp:net',
       ],
       'sources': [
-        'cloud_devices/cloud_device_description.cc',
-        'cloud_devices/cloud_device_description.h',
-        'cloud_devices/cloud_device_description_consts.cc',
-        'cloud_devices/cloud_device_description_consts.h',
-        'cloud_devices/description_items.h',
-        'cloud_devices/description_items_inl.h',
-        'cloud_devices/printer_description.cc',
-        'cloud_devices/printer_description.h',
+        'cloud_devices/common/cloud_device_description.cc',
+        'cloud_devices/common/cloud_device_description.h',
+        'cloud_devices/common/cloud_device_description_consts.cc',
+        'cloud_devices/common/cloud_device_description_consts.h',
+        'cloud_devices/common/cloud_devices_switches.cc',
+        'cloud_devices/common/cloud_devices_switches.h',
+        'cloud_devices/common/cloud_devices_urls.cc',
+        'cloud_devices/common/cloud_devices_urls.h',
+        'cloud_devices/common/description_items.h',
+        'cloud_devices/common/description_items_inl.h',
+        'cloud_devices/common/printer_description.cc',
+        'cloud_devices/common/printer_description.h',
       ],
     },
   ],
diff --git a/components/cloud_devices/cloud_device_description.cc b/components/cloud_devices/cloud_device_description.cc
deleted file mode 100644
index baf544d..0000000
--- a/components/cloud_devices/cloud_device_description.cc
+++ /dev/null
@@ -1,83 +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.
-
-#include "components/cloud_devices/cloud_device_description.h"
-
-#include "base/json/json_reader.h"
-#include "base/json/json_writer.h"
-#include "base/logging.h"
-#include "base/values.h"
-#include "components/cloud_devices/cloud_device_description_consts.h"
-
-namespace cloud_devices {
-
-CloudDeviceDescription::CloudDeviceDescription() {
-  Reset();
-}
-
-CloudDeviceDescription::~CloudDeviceDescription() {
-}
-
-void CloudDeviceDescription::Reset() {
-  root_.reset(new base::DictionaryValue);
-  root_->SetString(json::kVersion, json::kVersion10);
-}
-
-bool CloudDeviceDescription::InitFromDictionary(
-    scoped_ptr<base::DictionaryValue> root) {
-  if (!root)
-    return false;
-  Reset();
-  root_ = root.Pass();
-  std::string version;
-  root_->GetString(json::kVersion, &version);
-  return version == json::kVersion10;
-}
-
-bool CloudDeviceDescription::InitFromString(const std::string& json) {
-  scoped_ptr<base::Value> parsed(base::JSONReader::Read(json));
-  base::DictionaryValue* description = NULL;
-  if (!parsed || !parsed->GetAsDictionary(&description))
-    return false;
-  ignore_result(parsed.release());
-  return InitFromDictionary(make_scoped_ptr(description));
-}
-
-std::string CloudDeviceDescription::ToString() const {
-  std::string json;
-  base::JSONWriter::WriteWithOptions(root_.get(),
-                                     base::JSONWriter::OPTIONS_PRETTY_PRINT,
-                                     &json);
-  return json;
-}
-
-const base::DictionaryValue* CloudDeviceDescription::GetItem(
-    const std::string& path) const {
-  const base::DictionaryValue* value = NULL;
-  root_->GetDictionary(path, &value);
-  return value;
-}
-
-base::DictionaryValue* CloudDeviceDescription::CreateItem(
-    const std::string& path) {
-  base::DictionaryValue* value = new base::DictionaryValue;
-  root_->Set(path, value);
-  return value;
-}
-
-const base::ListValue* CloudDeviceDescription::GetListItem(
-    const std::string& path) const {
-  const base::ListValue* value = NULL;
-  root_->GetList(path, &value);
-  return value;
-}
-
-base::ListValue* CloudDeviceDescription::CreateListItem(
-    const std::string& path) {
-  base::ListValue* value = new base::ListValue;
-  root_->Set(path, value);
-  return value;
-}
-
-}  // namespace cloud_devices
diff --git a/components/cloud_devices/cloud_device_description.h b/components/cloud_devices/cloud_device_description.h
deleted file mode 100644
index d4ce081..0000000
--- a/components/cloud_devices/cloud_device_description.h
+++ /dev/null
@@ -1,58 +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.
-
-#ifndef COMPONENTS_CLOUD_DEVICES_CLOUD_DEVICE_DESCRIPTION_H_
-#define COMPONENTS_CLOUD_DEVICES_CLOUD_DEVICE_DESCRIPTION_H_
-
-#include <string>
-
-#include "base/callback.h"
-
-namespace base {
-class DictionaryValue;
-class ListValue;
-}
-
-namespace cloud_devices {
-
-// Provides parsing, serialization and validation Cloud Device Description or
-// Cloud Job Ticket.
-// https://developers.google.com/cloud-print/docs/cdd
-class CloudDeviceDescription {
- public:
-  CloudDeviceDescription();
-  ~CloudDeviceDescription();
-
-  void Reset();
-
-  bool InitFromDictionary(scoped_ptr<base::DictionaryValue> root);
-  bool InitFromString(const std::string& json);
-
-  std::string ToString() const;
-
-  // Returns dictionary with capability/option.
-  // Returns NULL if missing.
-  const base::DictionaryValue* GetItem(const std::string& path) const;
-
-  // Create dictionary for capability/option.
-  // Never returns NULL.
-  base::DictionaryValue* CreateItem(const std::string& path);
-
-  // Returns list with capability/option.
-  // Returns NULL if missing.
-  const base::ListValue* GetListItem(const std::string& path) const;
-
-  // Create list for capability/option.
-  // Never returns NULL.
-  base::ListValue* CreateListItem(const std::string& path);
-
- private:
-  scoped_ptr<base::DictionaryValue> root_;
-
-  DISALLOW_COPY_AND_ASSIGN(CloudDeviceDescription);
-};
-
-}  // namespace cloud_devices
-
-#endif  // COMPONENTS_CLOUD_DEVICES_CLOUD_DEVICE_DESCRIPTION_H_
diff --git a/components/cloud_devices/cloud_device_description_consts.cc b/components/cloud_devices/cloud_device_description_consts.cc
deleted file mode 100644
index 79d9d92..0000000
--- a/components/cloud_devices/cloud_device_description_consts.cc
+++ /dev/null
@@ -1,20 +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.
-
-#include "components/cloud_devices/cloud_device_description_consts.h"
-
-namespace cloud_devices {
-
-namespace json {
-
-const char kVersion[] = "version";
-const char kVersion10[] = "1.0";
-
-const char kKeyDefault[] = "default";
-const char kKeyIsDefault[] = "is_default";
-const char kKeyOption[] = "option";
-
-}  // namespace json
-
-}  // namespace cloud_devices
diff --git a/components/cloud_devices/common/DEPS b/components/cloud_devices/common/DEPS
new file mode 100644
index 0000000..2d23c96
--- /dev/null
+++ b/components/cloud_devices/common/DEPS
@@ -0,0 +1,4 @@
+include_rules = [
+  "+google_apis/gaia",
+  "+net/base",
+]
diff --git a/components/cloud_devices/common/cloud_device_description.cc b/components/cloud_devices/common/cloud_device_description.cc
new file mode 100644
index 0000000..d1cb504
--- /dev/null
+++ b/components/cloud_devices/common/cloud_device_description.cc
@@ -0,0 +1,82 @@
+// 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.
+
+#include "components/cloud_devices/common/cloud_device_description.h"
+
+#include "base/json/json_reader.h"
+#include "base/json/json_writer.h"
+#include "base/logging.h"
+#include "base/values.h"
+#include "components/cloud_devices/common/cloud_device_description_consts.h"
+
+namespace cloud_devices {
+
+CloudDeviceDescription::CloudDeviceDescription() {
+  Reset();
+}
+
+CloudDeviceDescription::~CloudDeviceDescription() {
+}
+
+void CloudDeviceDescription::Reset() {
+  root_.reset(new base::DictionaryValue);
+  root_->SetString(json::kVersion, json::kVersion10);
+}
+
+bool CloudDeviceDescription::InitFromDictionary(
+    scoped_ptr<base::DictionaryValue> root) {
+  if (!root)
+    return false;
+  Reset();
+  root_ = root.Pass();
+  std::string version;
+  root_->GetString(json::kVersion, &version);
+  return version == json::kVersion10;
+}
+
+bool CloudDeviceDescription::InitFromString(const std::string& json) {
+  scoped_ptr<base::Value> parsed(base::JSONReader::Read(json));
+  base::DictionaryValue* description = NULL;
+  if (!parsed || !parsed->GetAsDictionary(&description))
+    return false;
+  ignore_result(parsed.release());
+  return InitFromDictionary(make_scoped_ptr(description));
+}
+
+std::string CloudDeviceDescription::ToString() const {
+  std::string json;
+  base::JSONWriter::WriteWithOptions(
+      root_.get(), base::JSONWriter::OPTIONS_PRETTY_PRINT, &json);
+  return json;
+}
+
+const base::DictionaryValue* CloudDeviceDescription::GetItem(
+    const std::string& path) const {
+  const base::DictionaryValue* value = NULL;
+  root_->GetDictionary(path, &value);
+  return value;
+}
+
+base::DictionaryValue* CloudDeviceDescription::CreateItem(
+    const std::string& path) {
+  base::DictionaryValue* value = new base::DictionaryValue;
+  root_->Set(path, value);
+  return value;
+}
+
+const base::ListValue* CloudDeviceDescription::GetListItem(
+    const std::string& path) const {
+  const base::ListValue* value = NULL;
+  root_->GetList(path, &value);
+  return value;
+}
+
+base::ListValue* CloudDeviceDescription::CreateListItem(
+    const std::string& path) {
+  base::ListValue* value = new base::ListValue;
+  root_->Set(path, value);
+  return value;
+}
+
+}  // namespace cloud_devices
diff --git a/components/cloud_devices/common/cloud_device_description.h b/components/cloud_devices/common/cloud_device_description.h
new file mode 100644
index 0000000..8a00210
--- /dev/null
+++ b/components/cloud_devices/common/cloud_device_description.h
@@ -0,0 +1,58 @@
+// 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.
+
+#ifndef COMPONENTS_CLOUD_DEVICES_COMMON_CLOUD_DEVICE_DESCRIPTION_H_
+#define COMPONENTS_CLOUD_DEVICES_COMMON_CLOUD_DEVICE_DESCRIPTION_H_
+
+#include <string>
+
+#include "base/callback.h"
+
+namespace base {
+class DictionaryValue;
+class ListValue;
+}
+
+namespace cloud_devices {
+
+// Provides parsing, serialization and validation Cloud Device Description or
+// Cloud Job Ticket.
+// https://developers.google.com/cloud-print/docs/cdd
+class CloudDeviceDescription {
+ public:
+  CloudDeviceDescription();
+  ~CloudDeviceDescription();
+
+  void Reset();
+
+  bool InitFromDictionary(scoped_ptr<base::DictionaryValue> root);
+  bool InitFromString(const std::string& json);
+
+  std::string ToString() const;
+
+  // Returns dictionary with capability/option.
+  // Returns NULL if missing.
+  const base::DictionaryValue* GetItem(const std::string& path) const;
+
+  // Create dictionary for capability/option.
+  // Never returns NULL.
+  base::DictionaryValue* CreateItem(const std::string& path);
+
+  // Returns list with capability/option.
+  // Returns NULL if missing.
+  const base::ListValue* GetListItem(const std::string& path) const;
+
+  // Create list for capability/option.
+  // Never returns NULL.
+  base::ListValue* CreateListItem(const std::string& path);
+
+ private:
+  scoped_ptr<base::DictionaryValue> root_;
+
+  DISALLOW_COPY_AND_ASSIGN(CloudDeviceDescription);
+};
+
+}  // namespace cloud_devices
+
+#endif  // COMPONENTS_CLOUD_DEVICES_COMMON_CLOUD_DEVICE_DESCRIPTION_H_
diff --git a/components/cloud_devices/common/cloud_device_description_consts.cc b/components/cloud_devices/common/cloud_device_description_consts.cc
new file mode 100644
index 0000000..9429870
--- /dev/null
+++ b/components/cloud_devices/common/cloud_device_description_consts.cc
@@ -0,0 +1,20 @@
+// 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.
+
+#include "components/cloud_devices/common/cloud_device_description_consts.h"
+
+namespace cloud_devices {
+
+namespace json {
+
+const char kVersion[] = "version";
+const char kVersion10[] = "1.0";
+
+const char kKeyDefault[] = "default";
+const char kKeyIsDefault[] = "is_default";
+const char kKeyOption[] = "option";
+
+}  // namespace json
+
+}  // namespace cloud_devices
diff --git a/components/cloud_devices/cloud_device_description_consts.h b/components/cloud_devices/common/cloud_device_description_consts.h
similarity index 100%
rename from components/cloud_devices/cloud_device_description_consts.h
rename to components/cloud_devices/common/cloud_device_description_consts.h
diff --git a/components/cloud_devices/common/cloud_devices_switches.cc b/components/cloud_devices/common/cloud_devices_switches.cc
new file mode 100644
index 0000000..83667fa
--- /dev/null
+++ b/components/cloud_devices/common/cloud_devices_switches.cc
@@ -0,0 +1,21 @@
+// 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.
+
+#include "components/cloud_devices/common/cloud_devices_switches.h"
+
+namespace switches {
+
+// The URL of the cloud print service to use, overrides any value stored in
+// preferences, and the default. Only used if the cloud print service has been
+// enabled. Used for testing.
+const char kCloudPrintURL[] = "cloud-print-url";
+
+// The XMPP endpoint the cloud print service will use. Only used if the cloud
+// print service has been enabled. Used for testing.
+const char kCloudPrintXmppEndpoint[] = "cloud-print-xmpp-endpoint";
+
+// The URL of the cloud devices service to use.
+const char kCloudDevicesURL[] = "cloud-devices-url";
+
+}  // namespace switches
diff --git a/components/cloud_devices/common/cloud_devices_switches.h b/components/cloud_devices/common/cloud_devices_switches.h
new file mode 100644
index 0000000..2a57d73
--- /dev/null
+++ b/components/cloud_devices/common/cloud_devices_switches.h
@@ -0,0 +1,16 @@
+// 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.
+
+#ifndef COMPONENTS_CLOUD_DEVICES_COMMON_CLOUD_DEVICES_SWITCHES_H_
+#define COMPONENTS_CLOUD_DEVICES_COMMON_CLOUD_DEVICES_SWITCHES_H_
+
+namespace switches {
+
+extern const char kCloudPrintURL[];
+extern const char kCloudPrintXmppEndpoint[];
+extern const char kCloudDevicesURL[];
+
+}  // namespace switches
+
+#endif  // COMPONENTS_CLOUD_DEVICES_COMMON_CLOUD_DEVICES_SWITCHES_H_
diff --git a/components/cloud_devices/common/cloud_devices_urls.cc b/components/cloud_devices/common/cloud_devices_urls.cc
new file mode 100644
index 0000000..7645429
--- /dev/null
+++ b/components/cloud_devices/common/cloud_devices_urls.cc
@@ -0,0 +1,119 @@
+// 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.
+
+#include "components/cloud_devices/common/cloud_devices_urls.h"
+
+#include "base/command_line.h"
+#include "base/strings/string_util.h"
+#include "base/strings/stringprintf.h"
+#include "components/cloud_devices/common/cloud_devices_switches.h"
+#include "google_apis/gaia/gaia_urls.h"
+#include "net/base/url_util.h"
+
+namespace cloud_devices {
+
+const char kCloudPrintAuthScope[] =
+    "https://www.googleapis.com/auth/cloudprint";
+
+const char kCloudDevicesAuthScope[] =
+    "https://www.googleapis.com/auth/clouddevices";
+
+const char kCloudPrintLearnMoreURL[] =
+    "https://www.google.com/support/cloudprint";
+
+const char kCloudPrintTestPageURL[] =
+    "http://www.google.com/landing/cloudprint/enable.html?print=true";
+
+namespace {
+
+// Url must not be matched by "urls" section of
+// cloud_print_app/manifest.json. If it's matched, print driver dialog will
+// open sign-in page in separate window.
+const char kCloudPrintURL[] = "https://www.google.com/cloudprint";
+
+const char kCloudDevicesUrl[] = "https://www.googleapis.com/clouddevices/v1";
+}
+
+// Returns the root service URL for the cloud print service.  The default is to
+// point at the Google Cloud Print service.  This can be overridden by the
+// command line or by the user preferences.
+GURL GetCloudPrintURL() {
+  const CommandLine* command_line = CommandLine::ForCurrentProcess();
+  GURL cloud_print_url(
+      command_line->GetSwitchValueASCII(switches::kCloudPrintURL));
+  if (cloud_print_url.is_empty())
+    cloud_print_url = GURL(kCloudPrintURL);
+  return cloud_print_url;
+}
+
+GURL GetCloudPrintRelativeURL(const std::string& relative_path) {
+  GURL url = GetCloudPrintURL();
+  std::string path;
+  const char kURLPathSeparator[] = "/";
+  base::TrimString(url.path(), kURLPathSeparator, &path);
+  std::string trimmed_path;
+  base::TrimString(relative_path, kURLPathSeparator, &trimmed_path);
+  path += kURLPathSeparator;
+  path += trimmed_path;
+  GURL::Replacements replacements;
+  replacements.SetPathStr(path);
+  return url.ReplaceComponents(replacements);
+}
+
+GURL GetCloudPrintSigninURL() {
+  GURL url(GaiaUrls::GetInstance()->service_login_url());
+  url = net::AppendQueryParameter(url, "service", "cloudprint");
+  url = net::AppendQueryParameter(url, "sarp", "1");
+  std::string continue_str = GetCloudPrintURL().spec();
+  url = net::AppendQueryParameter(url, "continue", continue_str);
+  return url;
+}
+
+GURL GetCloudPrintAddAccountURL() {
+  GURL url(GaiaUrls::GetInstance()->add_account_url());
+  url = net::AppendQueryParameter(url, "service", "cloudprint");
+  url = net::AppendQueryParameter(url, "sarp", "1");
+  std::string continue_str = GetCloudPrintURL().spec();
+  url = net::AppendQueryParameter(url, "continue", continue_str);
+  return url;
+}
+
+GURL GetCloudPrintEnableURL(const std::string& proxy_id) {
+  GURL url = GetCloudPrintRelativeURL("enable_chrome_connector/enable.html");
+  url = net::AppendQueryParameter(url, "proxy", proxy_id);
+  return url;
+}
+
+GURL GetCloudPrintEnableURLWithSignin(const std::string& proxy_id) {
+  GURL url(GaiaUrls::GetInstance()->service_login_url());
+  url = net::AppendQueryParameter(url, "service", "cloudprint");
+  url = net::AppendQueryParameter(url, "sarp", "1");
+  std::string continue_str = GetCloudPrintEnableURL(proxy_id).spec();
+  return net::AppendQueryParameter(url, "continue", continue_str);
+}
+
+GURL GetCloudDevicesURL() {
+  const CommandLine* command_line = CommandLine::ForCurrentProcess();
+  GURL cloud_print_url(
+      command_line->GetSwitchValueASCII(switches::kCloudDevicesURL));
+  if (cloud_print_url.is_empty())
+    cloud_print_url = GURL(kCloudDevicesUrl);
+  return cloud_print_url;
+}
+
+GURL GetCloudDevicesRelativeURL(const std::string& relative_path) {
+  GURL url = GetCloudDevicesURL();
+  std::string path;
+  const char kURLPathSeparator[] = "/";
+  base::TrimString(url.path(), kURLPathSeparator, &path);
+  std::string trimmed_path;
+  base::TrimString(relative_path, kURLPathSeparator, &trimmed_path);
+  path += kURLPathSeparator;
+  path += trimmed_path;
+  GURL::Replacements replacements;
+  replacements.SetPathStr(path);
+  return url.ReplaceComponents(replacements);
+}
+
+}  // namespace cloud_devices
diff --git a/components/cloud_devices/common/cloud_devices_urls.h b/components/cloud_devices/common/cloud_devices_urls.h
new file mode 100644
index 0000000..8e03856
--- /dev/null
+++ b/components/cloud_devices/common/cloud_devices_urls.h
@@ -0,0 +1,31 @@
+// 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.
+
+#ifndef COMPONENTS_CLOUD_DEVICES_COMMON_CLOUD_DEVICES_URLS_H_
+#define COMPONENTS_CLOUD_DEVICES_COMMON_CLOUD_DEVICES_URLS_H_
+
+#include <string>
+
+#include "url/gurl.h"
+
+namespace cloud_devices {
+
+extern const char kCloudPrintAuthScope[];
+extern const char kCloudDevicesAuthScope[];
+extern const char kCloudPrintLearnMoreURL[];
+extern const char kCloudPrintTestPageURL[];
+
+GURL GetCloudPrintURL();
+GURL GetCloudPrintRelativeURL(const std::string& relative_path);
+GURL GetCloudPrintEnableURL(const std::string& proxy_id);
+GURL GetCloudPrintEnableURLWithSignin(const std::string& proxy_id);
+GURL GetCloudPrintSigninURL();
+GURL GetCloudPrintAddAccountURL();
+
+GURL GetCloudDevicesURL();
+GURL GetCloudDevicesRelativeURL(const std::string& relative_path);
+
+}  // namespace cloud_devices
+
+#endif  // COMPONENTS_CLOUD_DEVICES_COMMON_CLOUD_DEVICES_URLS_H_
diff --git a/components/cloud_devices/common/cloud_devices_urls_unittest.cc b/components/cloud_devices/common/cloud_devices_urls_unittest.cc
new file mode 100644
index 0000000..4a285c6
--- /dev/null
+++ b/components/cloud_devices/common/cloud_devices_urls_unittest.cc
@@ -0,0 +1,87 @@
+// 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.
+
+#include "components/cloud_devices/common/cloud_devices_urls.h"
+
+#include <string>
+
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+using testing::HasSubstr;
+
+namespace cloud_devices {
+
+TEST(CloudPrintURLTest, GetCloudPrintURL) {
+  std::string service_url = GetCloudPrintURL().spec();
+  EXPECT_THAT(service_url, HasSubstr("www.google.com"));
+  EXPECT_THAT(service_url, HasSubstr("cloudprint"));
+}
+
+TEST(CloudPrintURLTest, GetCloudPrintRelativeURL) {
+  EXPECT_THAT(GetCloudPrintRelativeURL("///a/b/c///").spec(),
+              HasSubstr("/cloudprint/a/b/c"));
+
+  EXPECT_THAT(GetCloudPrintRelativeURL("a/b/c").spec(),
+              HasSubstr("/cloudprint/a/b/c"));
+}
+
+TEST(CloudPrintURLTest, GetCloudPrintDialogUrl) {
+  std::string dialog_url =
+      GetCloudPrintRelativeURL("client/dialog.html").spec();
+  EXPECT_THAT(dialog_url, HasSubstr("www.google.com"));
+  EXPECT_THAT(dialog_url, HasSubstr("/cloudprint/"));
+  EXPECT_THAT(dialog_url, HasSubstr("/client/"));
+  EXPECT_THAT(dialog_url, Not(HasSubstr("cloudprint/cloudprint")));
+  EXPECT_THAT(dialog_url, HasSubstr("/dialog.html"));
+}
+
+TEST(CloudPrintURLTest, GetCloudPrintManageUrl) {
+  std::string manage_url = GetCloudPrintRelativeURL("manage.html").spec();
+  EXPECT_THAT(manage_url, HasSubstr("www.google.com"));
+  EXPECT_THAT(manage_url, HasSubstr("/cloudprint/"));
+  EXPECT_THAT(manage_url, Not(HasSubstr("/client/")));
+  EXPECT_THAT(manage_url, Not(HasSubstr("cloudprint/cloudprint")));
+  EXPECT_THAT(manage_url, HasSubstr("/manage.html"));
+}
+
+TEST(CloudPrintURLTest, GetCloudPrintEnableURL) {
+  std::string enable_url = GetCloudPrintEnableURL("123123").spec();
+  EXPECT_THAT(enable_url, HasSubstr("proxy=123123"));
+  EXPECT_THAT(enable_url, HasSubstr("/enable_chrome_connector/enable.html"));
+  EXPECT_THAT(enable_url, HasSubstr("/cloudprint/"));
+}
+
+TEST(CloudPrintURLTest, GetCloudPrintEnableURLWithSignin) {
+  std::string enable_url = GetCloudPrintEnableURLWithSignin("123123").spec();
+  EXPECT_THAT(enable_url, HasSubstr("accounts.google.com"));
+  EXPECT_THAT(enable_url, HasSubstr("/ServiceLogin"));
+  EXPECT_THAT(enable_url, HasSubstr("service=cloudprint"));
+  EXPECT_THAT(enable_url, HasSubstr("continue="));
+  EXPECT_THAT(enable_url, HasSubstr("proxy%3D123123"));
+  EXPECT_THAT(enable_url, HasSubstr("%2Fenable_chrome_connector%2Fenable"));
+  EXPECT_THAT(enable_url, HasSubstr("%2Fcloudprint%2F"));
+}
+
+TEST(CloudPrintURLTest, GetCloudPrintSigninURL) {
+  std::string signin_url = GetCloudPrintSigninURL().spec();
+  EXPECT_THAT(signin_url, HasSubstr("accounts.google.com"));
+  EXPECT_THAT(signin_url, HasSubstr("/ServiceLogin"));
+  EXPECT_THAT(signin_url, HasSubstr("service=cloudprint"));
+  EXPECT_THAT(signin_url, HasSubstr("continue="));
+  EXPECT_THAT(signin_url, HasSubstr("%2Fcloudprint"));
+  EXPECT_THAT(signin_url, Not(HasSubstr("/cloudprint")));
+}
+
+TEST(CloudPrintURLTest, GetCloudPrintAddAccountURL) {
+  std::string add_url = GetCloudPrintAddAccountURL().spec();
+  EXPECT_THAT(add_url, HasSubstr("accounts.google.com"));
+  EXPECT_THAT(add_url, HasSubstr("/AddSession"));
+  EXPECT_THAT(add_url, HasSubstr("service=cloudprint"));
+  EXPECT_THAT(add_url, HasSubstr("continue="));
+  EXPECT_THAT(add_url, HasSubstr("%2Fcloudprint"));
+  EXPECT_THAT(add_url, Not(HasSubstr("/cloudprint")));
+}
+
+}  // namespace cloud_devices
diff --git a/components/cloud_devices/common/description_items.h b/components/cloud_devices/common/description_items.h
new file mode 100644
index 0000000..1e8ed53
--- /dev/null
+++ b/components/cloud_devices/common/description_items.h
@@ -0,0 +1,228 @@
+// 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.
+
+#ifndef COMPONENTS_CLOUD_DEVICES_COMMON_CAPABILITY_INTERFACES_H_
+#define COMPONENTS_CLOUD_DEVICES_COMMON_CAPABILITY_INTERFACES_H_
+
+// Defines common templates that could be used to create device specific
+// capabilities and print tickets.
+
+#include <vector>
+
+#include "base/logging.h"
+#include "base/numerics/safe_conversions.h"
+#include "components/cloud_devices/common/cloud_device_description.h"
+
+namespace base {
+class DictionaryValue;
+}
+
+namespace cloud_devices {
+
+// All traits below specify how to serialize and validate capabilities and
+// ticket items.
+// Traits should have following methods:
+//   // Returns true if capability semantically valid.
+//   static bool IsValid(const Option&);
+//
+//   // Returns json path relative to the root of CDD/CJT.
+//   static std::string GetItemPath();
+//
+//   // Loads ticket item. Returns false if failed.
+//   static bool Load(const base::DictionaryValue& dict, ContentType* option);
+//
+//   // Saves ticket item.
+//   static void Save(ContentType option, base::DictionaryValue* dict);
+
+// Represents a CDD capability that is stored as a JSON list
+// Ex: "<CAPABILITY_NAME>": [ {<VALUE>}, {<VALUE>}, {<VALUE>} ]
+// Option specifies data type for <VALUE>.
+// Traits specifies how <VALUE> is stored in JSON and semantic validation.
+template <class Option, class Traits>
+class ListCapability {
+ public:
+  ListCapability();
+  ~ListCapability();
+
+  bool LoadFrom(const CloudDeviceDescription& description);
+  void SaveTo(CloudDeviceDescription* description) const;
+
+  void Reset() { options_.clear(); }
+
+  bool IsValid() const;
+
+  bool empty() const { return options_.empty(); }
+
+  size_t size() const { return options_.size(); }
+
+  const Option& operator[](size_t i) const { return options_[i]; }
+
+  bool Contains(const Option& option) const {
+    return std::find(options_.begin(), options_.end(), option) !=
+           options_.end();
+  }
+
+  void AddOption(const Option& option) { options_.push_back(option); }
+
+ private:
+  typedef std::vector<Option> OptionVector;
+  OptionVector options_;
+
+  DISALLOW_COPY_AND_ASSIGN(ListCapability);
+};
+
+// Represents CDD capability stored as JSON list with default_value value.
+// Ex: "<CAPABILITY_NAME>": { "option": [{ "is_default": true, <VALUE>},
+//                                       {<VALUE>} ]}
+// Option specifies data type for <VALUE>.
+// Traits specifies how <VALUE> is stored in JSON and semantic validation.
+template <class Option, class Traits>
+class SelectionCapability {
+ public:
+  SelectionCapability();
+  ~SelectionCapability();
+
+  bool LoadFrom(const CloudDeviceDescription& description);
+  void SaveTo(CloudDeviceDescription* description) const;
+
+  void Reset() {
+    options_.clear();
+    default_idx_ = -1;
+  }
+
+  bool IsValid() const;
+
+  bool empty() const { return options_.empty(); }
+
+  size_t size() const { return options_.size(); }
+
+  const Option& operator[](size_t i) const { return options_[i]; }
+
+  bool Contains(const Option& option) const {
+    return std::find(options_.begin(), options_.end(), option) !=
+           options_.end();
+  }
+
+  const Option& GetDefault() const {
+    CHECK_GE(default_idx_, 0);
+    return options_[default_idx_];
+  }
+
+  void AddOption(const Option& option) { AddDefaultOption(option, false); }
+
+  void AddDefaultOption(const Option& option, bool is_default) {
+    if (is_default) {
+      DCHECK_EQ(default_idx_, -1);
+      // Point to the last element.
+      default_idx_ = base::checked_cast<int>(size());
+    }
+    options_.push_back(option);
+  }
+
+ private:
+  typedef std::vector<Option> OptionVector;
+
+  OptionVector options_;
+  int default_idx_;
+
+  DISALLOW_COPY_AND_ASSIGN(SelectionCapability);
+};
+
+// Represents CDD capability that can be true or false.
+// Ex: "<CAPABILITY_NAME>": { "default_value": true }
+// Traits specifies how <VALUE> is stored in JSON and semantic validation.
+template <class Traits>
+class BooleanCapability {
+ public:
+  BooleanCapability();
+  ~BooleanCapability();
+
+  bool LoadFrom(const CloudDeviceDescription& description);
+  void SaveTo(CloudDeviceDescription* description) const;
+
+  void Reset() { default_value_ = false; }
+
+  void set_default_value(bool value) { default_value_ = value; }
+
+  bool default_value() const { return default_value_; }
+
+ private:
+  bool default_value_;
+
+  DISALLOW_COPY_AND_ASSIGN(BooleanCapability);
+};
+
+// Represents CDD capability for which existence is only important.
+// Ex: "<CAPABILITY_NAME>": { }
+// Traits specifies how <VALUE> is stored in JSON and semantic validation.
+template <class Traits>
+class EmptyCapability {
+ public:
+  EmptyCapability() {};
+  ~EmptyCapability() {};
+
+  bool LoadFrom(const CloudDeviceDescription& description);
+  void SaveTo(CloudDeviceDescription* description) const;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(EmptyCapability);
+};
+
+// Represents an item that is of a specific value type.
+// Ex: "<CAPABILITY_NAME>": {<VALUE>}
+// Option specifies data type for <VALUE>.
+// Traits specifies how <VALUE> is stored in JSON and semantic validation.
+template <class Option, class Traits>
+class ValueCapability {
+ public:
+  ValueCapability();
+  ~ValueCapability();
+
+  bool LoadFrom(const CloudDeviceDescription& description);
+  void SaveTo(CloudDeviceDescription* description) const;
+
+  void Reset() { value_ = Option(); }
+
+  bool IsValid() const;
+
+  const Option& value() const { return value_; }
+
+  void set_value(const Option& value) { value_ = value; }
+
+ private:
+  Option value_;
+
+  DISALLOW_COPY_AND_ASSIGN(ValueCapability);
+};
+
+// Represents CJT items.
+// Ex: "<CAPABILITY_NAME>": {<VALUE>}
+// Option specifies data type for <VALUE>.
+// Traits specifies how <VALUE> is stored in JSON and semantic validation.
+template <class Option, class Traits>
+class TicketItem {
+ public:
+  TicketItem();
+  ~TicketItem();
+
+  bool LoadFrom(const CloudDeviceDescription& description);
+  void SaveTo(CloudDeviceDescription* description) const;
+
+  void Reset() { value_ = Option(); }
+
+  bool IsValid() const;
+
+  const Option& value() const { return value_; }
+
+  void set_value(const Option& value) { value_ = value; }
+
+ private:
+  Option value_;
+
+  DISALLOW_COPY_AND_ASSIGN(TicketItem);
+};
+
+}  // namespace cloud_devices
+
+#endif  // COMPONENTS_CLOUD_DEVICES_COMMON_CAPABILITY_INTERFACES_H_
diff --git a/components/cloud_devices/common/description_items_inl.h b/components/cloud_devices/common/description_items_inl.h
new file mode 100644
index 0000000..a4302bc
--- /dev/null
+++ b/components/cloud_devices/common/description_items_inl.h
@@ -0,0 +1,253 @@
+// 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.
+
+#ifndef COMPONENTS_CLOUD_DEVICES_COMMON_DESCRIPTION_DESCRIPTION_ITEMS_INL_H_
+#define COMPONENTS_CLOUD_DEVICES_COMMON_DESCRIPTION_DESCRIPTION_ITEMS_INL_H_
+
+#include <vector>
+
+#include "base/numerics/safe_conversions.h"
+#include "components/cloud_devices/common/description_items.h"
+
+// Implementation of templates defined in header file.
+// This file should be included from CC file with implementation of device
+// specific capabilities.
+
+namespace cloud_devices {
+
+template <class Option, class Traits>
+ListCapability<Option, Traits>::ListCapability() {
+  Reset();
+}
+
+template <class Option, class Traits>
+ListCapability<Option, Traits>::~ListCapability() {
+}
+
+template <class Option, class Traits>
+bool ListCapability<Option, Traits>::IsValid() const {
+  if (empty())
+    return false;  // This type of capabilities can't be empty.
+  for (size_t i = 0; i < options_.size(); ++i) {
+    if (!Traits::IsValid(options_[i]))
+      return false;
+  }
+  return true;
+}
+
+template <class Option, class Traits>
+bool ListCapability<Option, Traits>::LoadFrom(
+    const CloudDeviceDescription& description) {
+  Reset();
+  const base::ListValue* options =
+      description.GetListItem(Traits::GetCapabilityPath());
+  if (!options)
+    return false;
+  for (size_t i = 0; i < options->GetSize(); ++i) {
+    const base::DictionaryValue* option_value = NULL;
+    if (!options->GetDictionary(i, &option_value))
+      return false;  // Every entry must be a dictionary.
+    Option option;
+    if (!Traits::Load(*option_value, &option))
+      return false;
+    AddOption(option);
+  }
+  return IsValid();
+}
+
+template <class Option, class Traits>
+void ListCapability<Option, Traits>::SaveTo(
+    CloudDeviceDescription* description) const {
+  DCHECK(IsValid());
+  base::ListValue* options_list =
+      description->CreateListItem(Traits::GetCapabilityPath());
+  for (size_t i = 0; i < options_.size(); ++i) {
+    base::DictionaryValue* option_value = new base::DictionaryValue;
+    options_list->Append(option_value);
+    Traits::Save(options_[i], option_value);
+  }
+}
+
+template <class Option, class Traits>
+SelectionCapability<Option, Traits>::SelectionCapability() {
+  Reset();
+}
+
+template <class Option, class Traits>
+SelectionCapability<Option, Traits>::~SelectionCapability() {
+}
+
+template <class Option, class Traits>
+bool SelectionCapability<Option, Traits>::IsValid() const {
+  if (empty())
+    return false;  // This type of capabilities can't be empty
+  for (size_t i = 0; i < options_.size(); ++i) {
+    if (!Traits::IsValid(options_[i]))
+      return false;
+  }
+  return default_idx_ >= 0 && default_idx_ < base::checked_cast<int>(size());
+}
+
+template <class Option, class Traits>
+bool SelectionCapability<Option, Traits>::LoadFrom(
+    const CloudDeviceDescription& description) {
+  Reset();
+  const base::DictionaryValue* item =
+      description.GetItem(Traits::GetCapabilityPath());
+  if (!item)
+    return false;
+  const base::ListValue* options = NULL;
+  if (!item->GetList(json::kKeyOption, &options))
+    return false;
+  for (size_t i = 0; i < options->GetSize(); ++i) {
+    const base::DictionaryValue* option_value = NULL;
+    if (!options->GetDictionary(i, &option_value))
+      return false;  // Every entry must be a dictionary.
+    Option option;
+    if (!Traits::Load(*option_value, &option))
+      return false;
+    bool is_default = false;
+    option_value->GetBoolean(json::kKeyIsDefault, &is_default);
+    if (is_default && default_idx_ >= 0) {
+      return false;  // Multiple defaults.
+    }
+    AddDefaultOption(option, is_default);
+  }
+  return IsValid();
+}
+
+template <class Option, class Traits>
+void SelectionCapability<Option, Traits>::SaveTo(
+    CloudDeviceDescription* description) const {
+  DCHECK(IsValid());
+  base::ListValue* options_list = new base::ListValue;
+  description->CreateItem(Traits::GetCapabilityPath())
+      ->Set(json::kKeyOption, options_list);
+  for (size_t i = 0; i < options_.size(); ++i) {
+    base::DictionaryValue* option_value = new base::DictionaryValue;
+    options_list->Append(option_value);
+    if (base::checked_cast<int>(i) == default_idx_)
+      option_value->SetBoolean(json::kKeyIsDefault, true);
+    Traits::Save(options_[i], option_value);
+  }
+}
+
+template <class Traits>
+BooleanCapability<Traits>::BooleanCapability() {
+  Reset();
+}
+
+template <class Traits>
+BooleanCapability<Traits>::~BooleanCapability() {
+}
+
+template <class Traits>
+bool BooleanCapability<Traits>::LoadFrom(
+    const CloudDeviceDescription& description) {
+  Reset();
+  const base::DictionaryValue* dict =
+      description.GetItem(Traits::GetCapabilityPath());
+  if (!dict)
+    return false;
+  default_value_ = Traits::kDefault;
+  dict->GetBoolean(json::kKeyDefault, &default_value_);
+  return true;
+}
+
+template <class Traits>
+void BooleanCapability<Traits>::SaveTo(
+    CloudDeviceDescription* description) const {
+  base::DictionaryValue* dict =
+      description->CreateItem(Traits::GetCapabilityPath());
+  if (default_value_ != Traits::kDefault)
+    dict->SetBoolean(json::kKeyDefault, default_value_);
+}
+
+template <class Traits>
+bool EmptyCapability<Traits>::LoadFrom(
+    const CloudDeviceDescription& description) {
+  return description.GetItem(Traits::GetCapabilityPath()) != NULL;
+}
+
+template <class Traits>
+void EmptyCapability<Traits>::SaveTo(
+    CloudDeviceDescription* description) const {
+  description->CreateItem(Traits::GetCapabilityPath());
+}
+
+template <class Option, class Traits>
+ValueCapability<Option, Traits>::ValueCapability() {
+  Reset();
+}
+
+template <class Option, class Traits>
+ValueCapability<Option, Traits>::~ValueCapability() {
+}
+
+template <class Option, class Traits>
+bool ValueCapability<Option, Traits>::IsValid() const {
+  return Traits::IsValid(value());
+}
+
+template <class Option, class Traits>
+bool ValueCapability<Option, Traits>::LoadFrom(
+    const CloudDeviceDescription& description) {
+  Reset();
+  const base::DictionaryValue* option_value =
+      description.GetItem(Traits::GetCapabilityPath());
+  if (!option_value)
+    return false;
+  Option option;
+  if (!Traits::Load(*option_value, &option))
+    return false;
+  set_value(option);
+  return IsValid();
+}
+
+template <class Option, class Traits>
+void ValueCapability<Option, Traits>::SaveTo(
+    CloudDeviceDescription* description) const {
+  DCHECK(IsValid());
+  Traits::Save(value(), description->CreateItem(Traits::GetCapabilityPath()));
+}
+
+template <class Option, class Traits>
+TicketItem<Option, Traits>::TicketItem() {
+  Reset();
+}
+
+template <class Option, class Traits>
+TicketItem<Option, Traits>::~TicketItem() {
+}
+
+template <class Option, class Traits>
+bool TicketItem<Option, Traits>::IsValid() const {
+  return Traits::IsValid(value());
+}
+
+template <class Option, class Traits>
+bool TicketItem<Option, Traits>::LoadFrom(
+    const CloudDeviceDescription& description) {
+  Reset();
+  const base::DictionaryValue* option_value =
+      description.GetItem(Traits::GetTicketItemPath());
+  if (!option_value)
+    return false;
+  Option option;
+  if (!Traits::Load(*option_value, &option))
+    return false;
+  set_value(option);
+  return IsValid();
+}
+
+template <class Option, class Traits>
+void TicketItem<Option, Traits>::SaveTo(
+    CloudDeviceDescription* description) const {
+  DCHECK(IsValid());
+  Traits::Save(value(), description->CreateItem(Traits::GetTicketItemPath()));
+}
+
+}  // namespace cloud_devices
+
+#endif  // COMPONENTS_CLOUD_DEVICES_COMMON_DESCRIPTION_DESCRIPTION_ITEMS_INL_H_
diff --git a/components/cloud_devices/common/printer_description.cc b/components/cloud_devices/common/printer_description.cc
new file mode 100644
index 0000000..8697795
--- /dev/null
+++ b/components/cloud_devices/common/printer_description.cc
@@ -0,0 +1,817 @@
+// 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.
+
+#include "components/cloud_devices/common/printer_description.h"
+
+#include <algorithm>
+
+#include "base/json/json_reader.h"
+#include "base/json/json_writer.h"
+#include "base/strings/string_util.h"
+#include "base/values.h"
+#include "components/cloud_devices/common/cloud_device_description_consts.h"
+#include "components/cloud_devices/common/description_items_inl.h"
+
+namespace cloud_devices {
+
+namespace printer {
+
+namespace {
+
+const int32 kMaxPageNumber = 1000000;
+
+const char kSectionPrint[] = "print";
+const char kSectionPrinter[] = "printer";
+
+const char kCustomName[] = "custom_display_name";
+const char kKeyContentType[] = "content_type";
+const char kKeyName[] = "name";
+const char kKeyType[] = "type";
+const char kKeyVendorId[] = "vendor_id";
+
+// extern is required to be used in templates.
+extern const char kOptionCollate[] = "collate";
+extern const char kOptionColor[] = "color";
+extern const char kOptionContentType[] = "supported_content_type";
+extern const char kOptionCopies[] = "copies";
+extern const char kOptionDpi[] = "dpi";
+extern const char kOptionDuplex[] = "duplex";
+extern const char kOptionFitToPage[] = "fit_to_page";
+extern const char kOptionMargins[] = "margins";
+extern const char kOptionMediaSize[] = "media_size";
+extern const char kOptionPageOrientation[] = "page_orientation";
+extern const char kOptionPageRange[] = "page_range";
+extern const char kOptionReverse[] = "reverse_order";
+extern const char kOptionPwgRasterConfig[] = "pwg_raster_config";
+
+const char kMargineBottom[] = "bottom_microns";
+const char kMargineLeft[] = "left_microns";
+const char kMargineRight[] = "right_microns";
+const char kMargineTop[] = "top_microns";
+
+const char kDpiHorizontal[] = "horizontal_dpi";
+const char kDpiVertical[] = "vertical_dpi";
+
+const char kMediaWidth[] = "width_microns";
+const char kMediaHeight[] = "height_microns";
+const char kMediaIsContinuous[] = "is_continuous_feed";
+
+const char kPageRangeInterval[] = "interval";
+const char kPageRangeEnd[] = "end";
+const char kPageRangeStart[] = "start";
+
+const char kPwgRasterDocumentSheetBack[] = "document_sheet_back";
+const char kPwgRasterReverseOrderStreaming[] = "reverse_order_streaming";
+const char kPwgRasterRotateAllPages[] = "rotate_all_pages";
+
+const char kTypeColorColor[] = "STANDARD_COLOR";
+const char kTypeColorMonochrome[] = "STANDARD_MONOCHROME";
+const char kTypeColorCustomColor[] = "CUSTOM_COLOR";
+const char kTypeColorCustomMonochrome[] = "CUSTOM_MONOCHROME";
+const char kTypeColorAuto[] = "AUTO";
+
+const char kTypeDuplexLongEdge[] = "LONG_EDGE";
+const char kTypeDuplexNoDuplex[] = "NO_DUPLEX";
+const char kTypeDuplexShortEdge[] = "SHORT_EDGE";
+
+const char kTypeFitToPageFillPage[] = "FILL_PAGE";
+const char kTypeFitToPageFitToPage[] = "FIT_TO_PAGE";
+const char kTypeFitToPageGrowToPage[] = "GROW_TO_PAGE";
+const char kTypeFitToPageNoFitting[] = "NO_FITTING";
+const char kTypeFitToPageShrinkToPage[] = "SHRINK_TO_PAGE";
+
+const char kTypeMarginsBorderless[] = "BORDERLESS";
+const char kTypeMarginsCustom[] = "CUSTOM";
+const char kTypeMarginsStandard[] = "STANDARD";
+const char kTypeOrientationAuto[] = "AUTO";
+
+const char kTypeOrientationLandscape[] = "LANDSCAPE";
+const char kTypeOrientationPortrait[] = "PORTRAIT";
+
+const char kTypeDocumentSheetBackNormal[] = "NORMAL";
+const char kTypeDocumentSheetBackRotated[] = "ROTATED";
+const char kTypeDocumentSheetBackManualTumble[] = "MANUAL_TUMBLE";
+const char kTypeDocumentSheetBackFlipped[] = "FLIPPED";
+
+const struct ColorNames {
+  ColorType id;
+  const char* const json_name;
+} kColorNames[] = {
+      {STANDARD_COLOR, kTypeColorColor},
+      {STANDARD_MONOCHROME, kTypeColorMonochrome},
+      {CUSTOM_COLOR, kTypeColorCustomColor},
+      {CUSTOM_MONOCHROME, kTypeColorCustomMonochrome},
+      {AUTO_COLOR, kTypeColorAuto},
+};
+
+const struct DuplexNames {
+  DuplexType id;
+  const char* const json_name;
+} kDuplexNames[] = {
+      {NO_DUPLEX, kTypeDuplexNoDuplex},
+      {LONG_EDGE, kTypeDuplexLongEdge},
+      {SHORT_EDGE, kTypeDuplexShortEdge},
+};
+
+const struct OrientationNames {
+  OrientationType id;
+  const char* const json_name;
+} kOrientationNames[] = {
+      {PORTRAIT, kTypeOrientationPortrait},
+      {LANDSCAPE, kTypeOrientationLandscape},
+      {AUTO_ORIENTATION, kTypeOrientationAuto},
+};
+
+const struct MarginsNames {
+  MarginsType id;
+  const char* const json_name;
+} kMarginsNames[] = {
+      {NO_MARGINS, kTypeMarginsBorderless},
+      {STANDARD_MARGINS, kTypeMarginsStandard},
+      {CUSTOM_MARGINS, kTypeMarginsCustom},
+};
+
+const struct FitToPageNames {
+  FitToPageType id;
+  const char* const json_name;
+} kFitToPageNames[] = {
+      {NO_FITTING, kTypeFitToPageNoFitting},
+      {FIT_TO_PAGE, kTypeFitToPageFitToPage},
+      {GROW_TO_PAGE, kTypeFitToPageGrowToPage},
+      {SHRINK_TO_PAGE, kTypeFitToPageShrinkToPage},
+      {FILL_PAGE, kTypeFitToPageFillPage},
+};
+
+const struct DocumentSheetBackNames {
+  DocumentSheetBack id;
+  const char* const json_name;
+} kDocumentSheetBackNames[] = {
+      {NORMAL, kTypeDocumentSheetBackNormal},
+      {ROTATED, kTypeDocumentSheetBackRotated},
+      {MANUAL_TUMBLE, kTypeDocumentSheetBackManualTumble},
+      {FLIPPED, kTypeDocumentSheetBackFlipped}};
+
+const int32 kInchToUm = 25400;
+const int32 kMmToUm = 1000;
+const int32 kSizeTrasholdUm = 1000;
+
+#define MAP_CLOUD_PRINT_MEDIA_TYPE(type, width, height, unit_um) \
+  {                                                              \
+    type, #type, static_cast<int>(width* unit_um + 0.5),         \
+        static_cast<int>(height* unit_um + 0.5)                  \
+  }
+
+const struct MadiaDefinition {
+  MediaType id;
+  const char* const json_name;
+  int width_um;
+  int height_um;
+} kMediaDefinitions[] = {
+      {CUSTOM_MEDIA, "CUSTOM", 0, 0},
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_INDEX_3X5, 3, 5, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_PERSONAL, 3.625f, 6.5f, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_MONARCH, 3.875f, 7.5f, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_NUMBER_9, 3.875f, 8.875f, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_INDEX_4X6, 4, 6, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_NUMBER_10, 4.125f, 9.5f, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_A2, 4.375f, 5.75f, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_NUMBER_11, 4.5f, 10.375f, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_NUMBER_12, 4.75f, 11, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_5X7, 5, 7, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_INDEX_5X8, 5, 8, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_NUMBER_14, 5, 11.5f, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_INVOICE, 5.5f, 8.5f, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_INDEX_4X6_EXT, 6, 8, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_6X9, 6, 9, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_C5, 6.5f, 9.5f, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_7X9, 7, 9, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_EXECUTIVE, 7.25f, 10.5f, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_GOVT_LETTER, 8, 10, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_GOVT_LEGAL, 8, 13, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_QUARTO, 8.5f, 10.83f, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_LETTER, 8.5f, 11, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_FANFOLD_EUR, 8.5f, 12, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_LETTER_PLUS, 8.5f, 12.69f, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_FOOLSCAP, 8.5f, 13, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_LEGAL, 8.5f, 14, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_SUPER_A, 8.94f, 14, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_9X11, 9, 11, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_ARCH_A, 9, 12, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_LETTER_EXTRA, 9.5f, 12, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_LEGAL_EXTRA, 9.5f, 15, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_10X11, 10, 11, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_10X13, 10, 13, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_10X14, 10, 14, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_10X15, 10, 15, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_11X12, 11, 12, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_EDP, 11, 14, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_FANFOLD_US, 11, 14.875f, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_11X15, 11, 15, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_LEDGER, 11, 17, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_EUR_EDP, 12, 14, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_ARCH_B, 12, 18, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_12X19, 12, 19, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_B_PLUS, 12, 19.17f, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_SUPER_B, 13, 19, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_C, 17, 22, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_ARCH_C, 18, 24, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_D, 22, 34, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_ARCH_D, 24, 36, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_ASME_F, 28, 40, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_WIDE_FORMAT, 30, 42, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_E, 34, 44, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_ARCH_E, 36, 48, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(NA_F, 44, 68, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ROC_16K, 7.75f, 10.75f, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ROC_8K, 10.75f, 15.5f, kInchToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(PRC_32K, 97, 151, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(PRC_1, 102, 165, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(PRC_2, 102, 176, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(PRC_4, 110, 208, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(PRC_5, 110, 220, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(PRC_8, 120, 309, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(PRC_6, 120, 230, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(PRC_3, 125, 176, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(PRC_16K, 146, 215, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(PRC_7, 160, 230, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(OM_JUURO_KU_KAI, 198, 275, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(OM_PA_KAI, 267, 389, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(OM_DAI_PA_KAI, 275, 395, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(PRC_10, 324, 458, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A10, 26, 37, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A9, 37, 52, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A8, 52, 74, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A7, 74, 105, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A6, 105, 148, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A5, 148, 210, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A5_EXTRA, 174, 235, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A4, 210, 297, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A4_TAB, 225, 297, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A4_EXTRA, 235, 322, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A3, 297, 420, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A4X3, 297, 630, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A4X4, 297, 841, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A4X5, 297, 1051, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A4X6, 297, 1261, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A4X7, 297, 1471, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A4X8, 297, 1682, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A4X9, 297, 1892, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A3_EXTRA, 322, 445, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A2, 420, 594, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A3X3, 420, 891, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A3X4, 420, 1189, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A3X5, 420, 1486, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A3X6, 420, 1783, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A3X7, 420, 2080, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A1, 594, 841, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A2X3, 594, 1261, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A2X4, 594, 1682, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A2X5, 594, 2102, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A0, 841, 1189, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A1X3, 841, 1783, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A1X4, 841, 2378, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_2A0, 1189, 1682, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A0X3, 1189, 2523, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_B10, 31, 44, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_B9, 44, 62, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_B8, 62, 88, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_B7, 88, 125, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_B6, 125, 176, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_B6C4, 125, 324, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_B5, 176, 250, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_B5_EXTRA, 201, 276, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_B4, 250, 353, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_B3, 353, 500, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_B2, 500, 707, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_B1, 707, 1000, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_B0, 1000, 1414, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_C10, 28, 40, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_C9, 40, 57, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_C8, 57, 81, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_C7, 81, 114, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_C7C6, 81, 162, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_C6, 114, 162, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_C6C5, 114, 229, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_C5, 162, 229, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_C4, 229, 324, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_C3, 324, 458, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_C2, 458, 648, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_C1, 648, 917, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_C0, 917, 1297, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_DL, 110, 220, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_RA2, 430, 610, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_SRA2, 450, 640, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_RA1, 610, 860, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_SRA1, 640, 900, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_RA0, 860, 1220, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_SRA0, 900, 1280, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(JIS_B10, 32, 45, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(JIS_B9, 45, 64, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(JIS_B8, 64, 91, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(JIS_B7, 91, 128, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(JIS_B6, 128, 182, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(JIS_B5, 182, 257, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(JIS_B4, 257, 364, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(JIS_B3, 364, 515, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(JIS_B2, 515, 728, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(JIS_B1, 728, 1030, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(JIS_B0, 1030, 1456, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(JIS_EXEC, 216, 330, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(JPN_CHOU4, 90, 205, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(JPN_HAGAKI, 100, 148, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(JPN_YOU4, 105, 235, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(JPN_CHOU2, 111.1f, 146, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(JPN_CHOU3, 120, 235, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(JPN_OUFUKU, 148, 200, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(JPN_KAHU, 240, 322.1f, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(JPN_KAKU2, 240, 332, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(OM_SMALL_PHOTO, 100, 150, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(OM_ITALIAN, 110, 230, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(OM_POSTFIX, 114, 229, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(OM_LARGE_PHOTO, 200, 300, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(OM_FOLIO, 210, 330, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(OM_FOLIO_SP, 215, 315, kMmToUm),
+      MAP_CLOUD_PRINT_MEDIA_TYPE(OM_INVITE, 220, 220, kMmToUm)};
+#undef MAP_CLOUD_PRINT_MEDIA_TYPE
+
+const MadiaDefinition* FindMediaBySize(int32 width_um, int32 height_um) {
+  const MadiaDefinition* result = NULL;
+  for (size_t i = 0; i < arraysize(kMediaDefinitions); ++i) {
+    int32 diff = std::max(std::abs(width_um - kMediaDefinitions[i].width_um),
+                          std::abs(height_um - kMediaDefinitions[i].height_um));
+    if (diff < kSizeTrasholdUm)
+      result = &kMediaDefinitions[i];
+  }
+  return result;
+}
+
+template <class T, class IdType>
+std::string TypeToString(const T& names, IdType id) {
+  for (size_t i = 0; i < arraysize(names); ++i) {
+    if (id == names[i].id)
+      return names[i].json_name;
+  }
+  NOTREACHED();
+  return std::string();
+}
+
+template <class T, class IdType>
+bool TypeFromString(const T& names, const std::string& type, IdType* id) {
+  for (size_t i = 0; i < arraysize(names); ++i) {
+    if (type == names[i].json_name) {
+      *id = names[i].id;
+      return true;
+    }
+  }
+  return false;
+}
+
+}  // namespace
+
+PwgRasterConfig::PwgRasterConfig()
+    : document_sheet_back(ROTATED),
+      reverse_order_streaming(false),
+      rotate_all_pages(false) {
+}
+
+Color::Color() : type(AUTO_COLOR) {
+}
+
+Color::Color(ColorType type) : type(type) {
+}
+
+bool Color::operator==(const Color& other) const {
+  return type == other.type && vendor_id == other.vendor_id &&
+         custom_display_name == other.custom_display_name;
+}
+
+bool Color::IsValid() const {
+  if (type != CUSTOM_COLOR && type != CUSTOM_MONOCHROME)
+    return true;
+  return !vendor_id.empty() && !custom_display_name.empty();
+}
+
+Margins::Margins()
+    : type(STANDARD_MARGINS), top_um(0), right_um(0), bottom_um(0), left_um(0) {
+}
+
+Margins::Margins(MarginsType type,
+                 int32 top_um,
+                 int32 right_um,
+                 int32 bottom_um,
+                 int32 left_um)
+    : type(type),
+      top_um(top_um),
+      right_um(right_um),
+      bottom_um(bottom_um),
+      left_um(left_um) {
+}
+
+bool Margins::operator==(const Margins& other) const {
+  return type == other.type && top_um == other.top_um &&
+         right_um == other.right_um && bottom_um == other.bottom_um;
+}
+
+Dpi::Dpi() : horizontal(0), vertical(0) {
+}
+
+Dpi::Dpi(int32 horizontal, int32 vertical)
+    : horizontal(horizontal), vertical(vertical) {
+}
+
+bool Dpi::IsValid() const {
+  return horizontal > 0 && vertical > 0;
+}
+
+bool Dpi::operator==(const Dpi& other) const {
+  return horizontal == other.horizontal && vertical == other.vertical;
+}
+
+Media::Media()
+    : type(CUSTOM_MEDIA), width_um(0), height_um(0), is_continuous_feed(false) {
+}
+
+Media::Media(MediaType type, int32 width_um, int32 height_um)
+    : type(type),
+      width_um(width_um),
+      height_um(height_um),
+      is_continuous_feed(width_um <= 0 || height_um <= 0) {
+}
+
+Media::Media(const std::string& custom_display_name,
+             int32 width_um,
+             int32 height_um)
+    : type(CUSTOM_MEDIA),
+      width_um(width_um),
+      height_um(height_um),
+      is_continuous_feed(width_um <= 0 || height_um <= 0),
+      custom_display_name(custom_display_name) {
+}
+
+bool Media::MatchBySize() {
+  const MadiaDefinition* media = FindMediaBySize(width_um, height_um);
+  if (!media)
+    return false;
+  type = media->id;
+  custom_display_name.clear();
+  return true;
+}
+
+bool Media::IsValid() const {
+  if (is_continuous_feed) {
+    if (width_um <= 0 && height_um <= 0)
+      return false;
+  } else {
+    if (width_um <= 0 || height_um <= 0)
+      return false;
+  }
+  return true;
+}
+
+bool Media::operator==(const Media& other) const {
+  return type == other.type && width_um == other.width_um &&
+         height_um == other.height_um &&
+         is_continuous_feed == other.is_continuous_feed;
+}
+
+Interval::Interval() : start(0), end(0) {
+}
+
+Interval::Interval(int32 start, int32 end) : start(start), end(end) {
+}
+
+Interval::Interval(int32 start) : start(start), end(kMaxPageNumber) {
+}
+
+bool Interval::operator==(const Interval& other) const {
+  return start == other.start && end == other.end;
+}
+
+template <const char* kName>
+class ItemsTraits {
+ public:
+  static std::string GetCapabilityPath() {
+    std::string result = kSectionPrinter;
+    result += '.';
+    result += kName;
+    return result;
+  }
+
+  static std::string GetTicketItemPath() {
+    std::string result = kSectionPrint;
+    result += '.';
+    result += kName;
+    return result;
+  }
+};
+
+class NoValueValidation {
+ public:
+  template <class Option>
+  static bool IsValid(const Option&) {
+    return true;
+  }
+};
+
+class ContentTypeTraits : public NoValueValidation,
+                          public ItemsTraits<kOptionContentType> {
+ public:
+  static bool Load(const base::DictionaryValue& dict, ContentType* option) {
+    return dict.GetString(kKeyContentType, option);
+  }
+
+  static void Save(ContentType option, base::DictionaryValue* dict) {
+    dict->SetString(kKeyContentType, option);
+  }
+};
+
+class PwgRasterConfigTraits : public NoValueValidation,
+                              public ItemsTraits<kOptionPwgRasterConfig> {
+ public:
+  static bool Load(const base::DictionaryValue& dict, PwgRasterConfig* option) {
+    std::string document_sheet_back;
+    PwgRasterConfig option_out;
+    if (dict.GetString(kPwgRasterDocumentSheetBack, &document_sheet_back)) {
+      if (!TypeFromString(kDocumentSheetBackNames,
+                          document_sheet_back,
+                          &option_out.document_sheet_back)) {
+        return false;
+      }
+    }
+
+    dict.GetBoolean(kPwgRasterReverseOrderStreaming,
+                    &option_out.reverse_order_streaming);
+    dict.GetBoolean(kPwgRasterRotateAllPages, &option_out.rotate_all_pages);
+    *option = option_out;
+    return true;
+  }
+
+  static void Save(const PwgRasterConfig& option, base::DictionaryValue* dict) {
+    dict->SetString(
+        kPwgRasterDocumentSheetBack,
+        TypeToString(kDocumentSheetBackNames, option.document_sheet_back));
+    if (option.reverse_order_streaming)
+      dict->SetBoolean(kPwgRasterReverseOrderStreaming,
+                       option.reverse_order_streaming);
+
+    if (option.rotate_all_pages)
+      dict->SetBoolean(kPwgRasterRotateAllPages, option.rotate_all_pages);
+  }
+};
+
+class ColorTraits : public ItemsTraits<kOptionColor> {
+ public:
+  static bool IsValid(const Color& option) { return option.IsValid(); }
+
+  static bool Load(const base::DictionaryValue& dict, Color* option) {
+    std::string type_str;
+    if (!dict.GetString(kKeyType, &type_str))
+      return false;
+    if (!TypeFromString(kColorNames, type_str, &option->type))
+      return false;
+    dict.GetString(kKeyVendorId, &option->vendor_id);
+    dict.GetString(kCustomName, &option->custom_display_name);
+    return true;
+  }
+
+  static void Save(const Color& option, base::DictionaryValue* dict) {
+    dict->SetString(kKeyType, TypeToString(kColorNames, option.type));
+    if (!option.vendor_id.empty())
+      dict->SetString(kKeyVendorId, option.vendor_id);
+    if (!option.custom_display_name.empty())
+      dict->SetString(kCustomName, option.custom_display_name);
+  }
+};
+
+class DuplexTraits : public NoValueValidation,
+                     public ItemsTraits<kOptionDuplex> {
+ public:
+  static bool Load(const base::DictionaryValue& dict, DuplexType* option) {
+    std::string type_str;
+    return dict.GetString(kKeyType, &type_str) &&
+           TypeFromString(kDuplexNames, type_str, option);
+  }
+
+  static void Save(DuplexType option, base::DictionaryValue* dict) {
+    dict->SetString(kKeyType, TypeToString(kDuplexNames, option));
+  }
+};
+
+class OrientationTraits : public NoValueValidation,
+                          public ItemsTraits<kOptionPageOrientation> {
+ public:
+  static bool Load(const base::DictionaryValue& dict, OrientationType* option) {
+    std::string type_str;
+    return dict.GetString(kKeyType, &type_str) &&
+           TypeFromString(kOrientationNames, type_str, option);
+  }
+
+  static void Save(OrientationType option, base::DictionaryValue* dict) {
+    dict->SetString(kKeyType, TypeToString(kOrientationNames, option));
+  }
+};
+
+class CopiesTraits : public ItemsTraits<kOptionCopies> {
+ public:
+  static bool IsValid(int32 option) { return option >= 1; }
+
+  static bool Load(const base::DictionaryValue& dict, int32* option) {
+    return dict.GetInteger(kOptionCopies, option);
+  }
+
+  static void Save(int32 option, base::DictionaryValue* dict) {
+    dict->SetInteger(kOptionCopies, option);
+  }
+};
+
+class MarginsTraits : public NoValueValidation,
+                      public ItemsTraits<kOptionMargins> {
+ public:
+  static bool Load(const base::DictionaryValue& dict, Margins* option) {
+    std::string type_str;
+    if (!dict.GetString(kKeyType, &type_str))
+      return false;
+    if (!TypeFromString(kMarginsNames, type_str, &option->type))
+      return false;
+    return dict.GetInteger(kMargineTop, &option->top_um) &&
+           dict.GetInteger(kMargineRight, &option->right_um) &&
+           dict.GetInteger(kMargineBottom, &option->bottom_um) &&
+           dict.GetInteger(kMargineLeft, &option->left_um);
+  }
+
+  static void Save(const Margins& option, base::DictionaryValue* dict) {
+    dict->SetString(kKeyType, TypeToString(kMarginsNames, option.type));
+    dict->SetInteger(kMargineTop, option.top_um);
+    dict->SetInteger(kMargineRight, option.right_um);
+    dict->SetInteger(kMargineBottom, option.bottom_um);
+    dict->SetInteger(kMargineLeft, option.left_um);
+  }
+};
+
+class DpiTraits : public ItemsTraits<kOptionDpi> {
+ public:
+  static bool IsValid(const Dpi& option) { return option.IsValid(); }
+
+  static bool Load(const base::DictionaryValue& dict, Dpi* option) {
+    if (!dict.GetInteger(kDpiHorizontal, &option->horizontal) ||
+        !dict.GetInteger(kDpiVertical, &option->vertical)) {
+      return false;
+    }
+    return true;
+  }
+
+  static void Save(const Dpi& option, base::DictionaryValue* dict) {
+    dict->SetInteger(kDpiHorizontal, option.horizontal);
+    dict->SetInteger(kDpiVertical, option.vertical);
+  }
+};
+
+class FitToPageTraits : public NoValueValidation,
+                        public ItemsTraits<kOptionFitToPage> {
+ public:
+  static bool Load(const base::DictionaryValue& dict, FitToPageType* option) {
+    std::string type_str;
+    return dict.GetString(kKeyType, &type_str) &&
+           TypeFromString(kFitToPageNames, type_str, option);
+  }
+
+  static void Save(FitToPageType option, base::DictionaryValue* dict) {
+    dict->SetString(kKeyType, TypeToString(kFitToPageNames, option));
+  }
+};
+
+class PageRangeTraits : public ItemsTraits<kOptionPageRange> {
+ public:
+  static bool IsValid(const PageRange& option) {
+    for (size_t i = 0; i < option.size(); ++i) {
+      if (option[i].start < 1 || option[i].end < 1) {
+        return false;
+      }
+    }
+    return true;
+  }
+
+  static bool Load(const base::DictionaryValue& dict, PageRange* option) {
+    const base::ListValue* list = NULL;
+    if (!dict.GetList(kPageRangeInterval, &list))
+      return false;
+    for (size_t i = 0; i < list->GetSize(); ++i) {
+      const base::DictionaryValue* interval = NULL;
+      if (!list->GetDictionary(i, &interval))
+        return false;
+      Interval new_interval(1, kMaxPageNumber);
+      interval->GetInteger(kPageRangeStart, &new_interval.start);
+      interval->GetInteger(kPageRangeEnd, &new_interval.end);
+      option->push_back(new_interval);
+    }
+    return true;
+  }
+
+  static void Save(const PageRange& option, base::DictionaryValue* dict) {
+    if (!option.empty()) {
+      base::ListValue* list = new base::ListValue;
+      dict->Set(kPageRangeInterval, list);
+      for (size_t i = 0; i < option.size(); ++i) {
+        base::DictionaryValue* interval = new base::DictionaryValue;
+        list->Append(interval);
+        interval->SetInteger(kPageRangeStart, option[i].start);
+        if (option[i].end < kMaxPageNumber)
+          interval->SetInteger(kPageRangeEnd, option[i].end);
+      }
+    }
+  }
+};
+
+class MediaTraits : public ItemsTraits<kOptionMediaSize> {
+ public:
+  static bool IsValid(const Media& option) { return option.IsValid(); }
+
+  static bool Load(const base::DictionaryValue& dict, Media* option) {
+    std::string type_str;
+    if (dict.GetString(kKeyName, &type_str)) {
+      if (!TypeFromString(kMediaDefinitions, type_str, &option->type))
+        return false;
+    }
+
+    dict.GetInteger(kMediaWidth, &option->width_um);
+    dict.GetInteger(kMediaHeight, &option->height_um);
+    dict.GetBoolean(kMediaIsContinuous, &option->is_continuous_feed);
+    dict.GetString(kCustomName, &option->custom_display_name);
+    return true;
+  }
+
+  static void Save(const Media& option, base::DictionaryValue* dict) {
+    if (option.type != CUSTOM_MEDIA)
+      dict->SetString(kKeyName, TypeToString(kMediaDefinitions, option.type));
+    if (!option.custom_display_name.empty() || option.type == CUSTOM_MEDIA)
+      dict->SetString(kCustomName, option.custom_display_name);
+    if (option.width_um > 0)
+      dict->SetInteger(kMediaWidth, option.width_um);
+    if (option.height_um > 0)
+      dict->SetInteger(kMediaHeight, option.height_um);
+    if (option.is_continuous_feed)
+      dict->SetBoolean(kMediaIsContinuous, true);
+  }
+};
+
+class CollateTraits : public NoValueValidation,
+                      public ItemsTraits<kOptionCollate> {
+ public:
+  static const bool kDefault = true;
+
+  static bool Load(const base::DictionaryValue& dict, bool* option) {
+    return dict.GetBoolean(kOptionCollate, option);
+  }
+
+  static void Save(bool option, base::DictionaryValue* dict) {
+    dict->SetBoolean(kOptionCollate, option);
+  }
+};
+
+class ReverseTraits : public NoValueValidation,
+                      public ItemsTraits<kOptionReverse> {
+ public:
+  static const bool kDefault = false;
+
+  static bool Load(const base::DictionaryValue& dict, bool* option) {
+    return dict.GetBoolean(kOptionReverse, option);
+  }
+
+  static void Save(bool option, base::DictionaryValue* dict) {
+    dict->SetBoolean(kOptionReverse, option);
+  }
+};
+
+}  // namespace printer
+
+using namespace printer;
+
+template class ListCapability<ContentType, ContentTypeTraits>;
+template class ValueCapability<PwgRasterConfig, PwgRasterConfigTraits>;
+template class SelectionCapability<Color, ColorTraits>;
+template class SelectionCapability<DuplexType, DuplexTraits>;
+template class SelectionCapability<OrientationType, OrientationTraits>;
+template class SelectionCapability<Margins, MarginsTraits>;
+template class SelectionCapability<Dpi, DpiTraits>;
+template class SelectionCapability<FitToPageType, FitToPageTraits>;
+template class SelectionCapability<Media, MediaTraits>;
+template class EmptyCapability<class CopiesTraits>;
+template class EmptyCapability<class PageRangeTraits>;
+template class BooleanCapability<class CollateTraits>;
+template class BooleanCapability<class ReverseTraits>;
+
+template class TicketItem<PwgRasterConfig, PwgRasterConfigTraits>;
+template class TicketItem<Color, ColorTraits>;
+template class TicketItem<DuplexType, DuplexTraits>;
+template class TicketItem<OrientationType, OrientationTraits>;
+template class TicketItem<Margins, MarginsTraits>;
+template class TicketItem<Dpi, DpiTraits>;
+template class TicketItem<FitToPageType, FitToPageTraits>;
+template class TicketItem<Media, MediaTraits>;
+template class TicketItem<int32, CopiesTraits>;
+template class TicketItem<PageRange, PageRangeTraits>;
+template class TicketItem<bool, CollateTraits>;
+template class TicketItem<bool, ReverseTraits>;
+
+}  // namespace cloud_devices
diff --git a/components/cloud_devices/common/printer_description.h b/components/cloud_devices/common/printer_description.h
new file mode 100644
index 0000000..74225ff
--- /dev/null
+++ b/components/cloud_devices/common/printer_description.h
@@ -0,0 +1,370 @@
+// 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.
+
+#ifndef COMPONENTS_CLOUD_DEVICES_COMMON_CLOUD_PRINTER_DESCRIPTION_H_
+#define COMPONENTS_CLOUD_DEVICES_COMMON_CLOUD_PRINTER_DESCRIPTION_H_
+
+#include <string>
+
+#include "base/logging.h"
+#include "components/cloud_devices/common/description_items.h"
+
+// Defines printer options, CDD and CJT items.
+// https://developers.google.com/cloud-print/docs/cdd
+
+namespace cloud_devices {
+
+namespace printer {
+
+typedef std::string ContentType;
+
+enum DocumentSheetBack { NORMAL, ROTATED, MANUAL_TUMBLE, FLIPPED };
+
+struct PwgRasterConfig {
+  PwgRasterConfig();
+
+  DocumentSheetBack document_sheet_back;
+  bool reverse_order_streaming;
+  bool rotate_all_pages;
+};
+
+enum ColorType {
+  STANDARD_COLOR,
+  STANDARD_MONOCHROME,
+  CUSTOM_COLOR,
+  CUSTOM_MONOCHROME,
+  AUTO_COLOR,
+};
+
+struct Color {
+  Color();
+  explicit Color(ColorType type);
+
+  bool IsValid() const;
+  bool operator==(const Color& other) const;
+  bool operator!=(const Color& other) const { return !(*this == other); }
+
+  ColorType type;
+  std::string vendor_id;
+  std::string custom_display_name;
+};
+
+enum DuplexType {
+  NO_DUPLEX,
+  LONG_EDGE,
+  SHORT_EDGE,
+};
+
+enum OrientationType {
+  PORTRAIT,
+  LANDSCAPE,
+  AUTO_ORIENTATION,
+};
+
+enum MarginsType {
+  NO_MARGINS,
+  STANDARD_MARGINS,
+  CUSTOM_MARGINS,
+};
+
+struct Margins {
+  Margins();
+  Margins(MarginsType type,
+          int32 top_um,
+          int32 right_um,
+          int32 bottom_um,
+          int32 left_um);
+
+  bool operator==(const Margins& other) const;
+  bool operator!=(const Margins& other) const { return !(*this == other); }
+
+  MarginsType type;
+  int32 top_um;
+  int32 right_um;
+  int32 bottom_um;
+  int32 left_um;
+};
+
+struct Dpi {
+  Dpi();
+  Dpi(int32 horizontal, int32 vertical);
+
+  bool IsValid() const;
+  bool operator==(const Dpi& other) const;
+  bool operator!=(const Dpi& other) const { return !(*this == other); }
+
+  int32 horizontal;
+  int32 vertical;
+};
+
+enum FitToPageType {
+  NO_FITTING,
+  FIT_TO_PAGE,
+  GROW_TO_PAGE,
+  SHRINK_TO_PAGE,
+  FILL_PAGE,
+};
+
+enum MediaType {
+  CUSTOM_MEDIA,
+
+  // North American standard sheet media names.
+  NA_INDEX_3X5,
+  NA_PERSONAL,
+  NA_MONARCH,
+  NA_NUMBER_9,
+  NA_INDEX_4X6,
+  NA_NUMBER_10,
+  NA_A2,
+  NA_NUMBER_11,
+  NA_NUMBER_12,
+  NA_5X7,
+  NA_INDEX_5X8,
+  NA_NUMBER_14,
+  NA_INVOICE,
+  NA_INDEX_4X6_EXT,
+  NA_6X9,
+  NA_C5,
+  NA_7X9,
+  NA_EXECUTIVE,
+  NA_GOVT_LETTER,
+  NA_GOVT_LEGAL,
+  NA_QUARTO,
+  NA_LETTER,
+  NA_FANFOLD_EUR,
+  NA_LETTER_PLUS,
+  NA_FOOLSCAP,
+  NA_LEGAL,
+  NA_SUPER_A,
+  NA_9X11,
+  NA_ARCH_A,
+  NA_LETTER_EXTRA,
+  NA_LEGAL_EXTRA,
+  NA_10X11,
+  NA_10X13,
+  NA_10X14,
+  NA_10X15,
+  NA_11X12,
+  NA_EDP,
+  NA_FANFOLD_US,
+  NA_11X15,
+  NA_LEDGER,
+  NA_EUR_EDP,
+  NA_ARCH_B,
+  NA_12X19,
+  NA_B_PLUS,
+  NA_SUPER_B,
+  NA_C,
+  NA_ARCH_C,
+  NA_D,
+  NA_ARCH_D,
+  NA_ASME_F,
+  NA_WIDE_FORMAT,
+  NA_E,
+  NA_ARCH_E,
+  NA_F,
+
+  // Chinese standard sheet media size names.
+  ROC_16K,
+  ROC_8K,
+  PRC_32K,
+  PRC_1,
+  PRC_2,
+  PRC_4,
+  PRC_5,
+  PRC_8,
+  PRC_6,
+  PRC_3,
+  PRC_16K,
+  PRC_7,
+  OM_JUURO_KU_KAI,
+  OM_PA_KAI,
+  OM_DAI_PA_KAI,
+  PRC_10,
+
+  // ISO standard sheet media size names.
+  ISO_A10,
+  ISO_A9,
+  ISO_A8,
+  ISO_A7,
+  ISO_A6,
+  ISO_A5,
+  ISO_A5_EXTRA,
+  ISO_A4,
+  ISO_A4_TAB,
+  ISO_A4_EXTRA,
+  ISO_A3,
+  ISO_A4X3,
+  ISO_A4X4,
+  ISO_A4X5,
+  ISO_A4X6,
+  ISO_A4X7,
+  ISO_A4X8,
+  ISO_A4X9,
+  ISO_A3_EXTRA,
+  ISO_A2,
+  ISO_A3X3,
+  ISO_A3X4,
+  ISO_A3X5,
+  ISO_A3X6,
+  ISO_A3X7,
+  ISO_A1,
+  ISO_A2X3,
+  ISO_A2X4,
+  ISO_A2X5,
+  ISO_A0,
+  ISO_A1X3,
+  ISO_A1X4,
+  ISO_2A0,
+  ISO_A0X3,
+  ISO_B10,
+  ISO_B9,
+  ISO_B8,
+  ISO_B7,
+  ISO_B6,
+  ISO_B6C4,
+  ISO_B5,
+  ISO_B5_EXTRA,
+  ISO_B4,
+  ISO_B3,
+  ISO_B2,
+  ISO_B1,
+  ISO_B0,
+  ISO_C10,
+  ISO_C9,
+  ISO_C8,
+  ISO_C7,
+  ISO_C7C6,
+  ISO_C6,
+  ISO_C6C5,
+  ISO_C5,
+  ISO_C4,
+  ISO_C3,
+  ISO_C2,
+  ISO_C1,
+  ISO_C0,
+  ISO_DL,
+  ISO_RA2,
+  ISO_SRA2,
+  ISO_RA1,
+  ISO_SRA1,
+  ISO_RA0,
+  ISO_SRA0,
+
+  // Japanese standard sheet media size names.
+  JIS_B10,
+  JIS_B9,
+  JIS_B8,
+  JIS_B7,
+  JIS_B6,
+  JIS_B5,
+  JIS_B4,
+  JIS_B3,
+  JIS_B2,
+  JIS_B1,
+  JIS_B0,
+  JIS_EXEC,
+  JPN_CHOU4,
+  JPN_HAGAKI,
+  JPN_YOU4,
+  JPN_CHOU2,
+  JPN_CHOU3,
+  JPN_OUFUKU,
+  JPN_KAHU,
+  JPN_KAKU2,
+
+  // Other metric standard sheet media size names.
+  OM_SMALL_PHOTO,
+  OM_ITALIAN,
+  OM_POSTFIX,
+  OM_LARGE_PHOTO,
+  OM_FOLIO,
+  OM_FOLIO_SP,
+  OM_INVITE,
+};
+
+struct Media {
+  Media();
+
+  Media(MediaType type, int32 width_um, int32 height_um);
+
+  Media(const std::string& custom_display_name,
+        int32 width_um,
+        int32 height_um);
+
+  bool MatchBySize();
+
+  bool IsValid() const;
+  bool operator==(const Media& other) const;
+  bool operator!=(const Media& other) const { return !(*this == other); }
+
+  MediaType type;
+  int32 width_um;
+  int32 height_um;
+  bool is_continuous_feed;
+  std::string custom_display_name;
+};
+
+struct Interval {
+  Interval();
+  Interval(int32 start, int32 end);
+  Interval(int32 start);
+
+  bool operator==(const Interval& other) const;
+  bool operator!=(const Interval& other) const { return !(*this == other); }
+
+  int32 start;
+  int32 end;
+};
+
+typedef std::vector<Interval> PageRange;
+
+class ContentTypeTraits;
+class PwgRasterConfigTraits;
+class ColorTraits;
+class DuplexTraits;
+class OrientationTraits;
+class MarginsTraits;
+class DpiTraits;
+class FitToPageTraits;
+class MediaTraits;
+class CopiesTraits;
+class PageRangeTraits;
+class CollateTraits;
+
+typedef ListCapability<ContentType, ContentTypeTraits> ContentTypesCapability;
+typedef ValueCapability<PwgRasterConfig, PwgRasterConfigTraits>
+    PwgRasterConfigCapability;
+typedef SelectionCapability<Color, ColorTraits> ColorCapability;
+typedef SelectionCapability<DuplexType, DuplexTraits> DuplexCapability;
+typedef SelectionCapability<OrientationType, OrientationTraits>
+    OrientationCapability;
+typedef SelectionCapability<Margins, MarginsTraits> MarginsCapability;
+typedef SelectionCapability<Dpi, DpiTraits> DpiCapability;
+typedef SelectionCapability<FitToPageType, FitToPageTraits> FitToPageCapability;
+typedef SelectionCapability<Media, MediaTraits> MediaCapability;
+typedef EmptyCapability<class CopiesTraits> CopiesCapability;
+typedef EmptyCapability<class PageRangeTraits> PageRangeCapability;
+typedef BooleanCapability<class CollateTraits> CollateCapability;
+typedef BooleanCapability<class ReverseTraits> ReverseCapability;
+
+typedef TicketItem<PwgRasterConfig, PwgRasterConfigTraits>
+    PwgRasterConfigTicketItem;
+typedef TicketItem<Color, ColorTraits> ColorTicketItem;
+typedef TicketItem<DuplexType, DuplexTraits> DuplexTicketItem;
+typedef TicketItem<OrientationType, OrientationTraits> OrientationTicketItem;
+typedef TicketItem<Margins, MarginsTraits> MarginsTicketItem;
+typedef TicketItem<Dpi, DpiTraits> DpiTicketItem;
+typedef TicketItem<FitToPageType, FitToPageTraits> FitToPageTicketItem;
+typedef TicketItem<Media, MediaTraits> MediaTicketItem;
+typedef TicketItem<int32, CopiesTraits> CopiesTicketItem;
+typedef TicketItem<PageRange, PageRangeTraits> PageRangeTicketItem;
+typedef TicketItem<bool, CollateTraits> CollateTicketItem;
+typedef TicketItem<bool, ReverseTraits> ReverseTicketItem;
+
+}  // namespace printer
+
+}  // namespace cloud_devices
+
+#endif  // COMPONENTS_CLOUD_DEVICES_COMMON_CLOUD_PRINTER_DESCRIPTION_H_
diff --git a/components/cloud_devices/common/printer_description_unittest.cc b/components/cloud_devices/common/printer_description_unittest.cc
new file mode 100644
index 0000000..519409e
--- /dev/null
+++ b/components/cloud_devices/common/printer_description_unittest.cc
@@ -0,0 +1,618 @@
+// 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.
+
+#include "components/cloud_devices/common/printer_description.h"
+
+#include "base/json/json_reader.h"
+#include "base/json/json_writer.h"
+#include "base/strings/string_util.h"
+#include "base/values.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace cloud_devices {
+
+namespace printer {
+
+// Replaces ' with " to allow readable json constants in tests.
+// Makes sure that same json value represented by same strings to simplify
+// comparison.
+std::string NormalizeJson(const std::string& json) {
+  std::string result = json;
+  base::ReplaceChars(result, "'", "\"", &result);
+  scoped_ptr<base::Value> value(base::JSONReader::Read(result));
+  DCHECK(value);
+  base::JSONWriter::Write(value.get(), &result);
+  return result;
+}
+
+const char kCdd[] =
+    "{"
+    "  'version': '1.0',"
+    "  'printer': {"
+    "    'supported_content_type': [ {"
+    "      'content_type': 'image/pwg-raster'"
+    "    }, {"
+    "      'content_type': 'image/jpeg'"
+    "    } ],"
+    "    'pwg_raster_config' : {"
+    "      'document_sheet_back' : 'MANUAL_TUMBLE',"
+    "      'reverse_order_streaming': true"
+    "    },"
+    "    'color': {"
+    "      'option': [ {"
+    "        'is_default': true,"
+    "        'type': 'STANDARD_COLOR'"
+    "      }, {"
+    "        'type': 'STANDARD_MONOCHROME'"
+    "      }, {"
+    "        'type': 'CUSTOM_MONOCHROME',"
+    "        'vendor_id': '123',"
+    "        'custom_display_name': 'monochrome'"
+    "      } ]"
+    "    },"
+    "    'duplex': {"
+    "      'option': [ {"
+    "        'is_default': true,"
+    "        'type': 'LONG_EDGE'"
+    "       }, {"
+    "        'type': 'SHORT_EDGE'"
+    "       }, {"
+    "        'type': 'NO_DUPLEX'"
+    "       } ]"
+    "    },"
+    "    'page_orientation': {"
+    "      'option': [ {"
+    "        'type': 'PORTRAIT'"
+    "      }, {"
+    "        'type': 'LANDSCAPE'"
+    "      }, {"
+    "        'is_default': true,"
+    "        'type': 'AUTO'"
+    "      } ]"
+    "    },"
+    "    'copies': {"
+    "    },"
+    "    'margins': {"
+    "      'option': [ {"
+    "        'is_default': true,"
+    "        'type': 'BORDERLESS',"
+    "        'top_microns': 0,"
+    "        'right_microns': 0,"
+    "        'bottom_microns': 0,"
+    "        'left_microns': 0"
+    "      }, {"
+    "         'type': 'STANDARD',"
+    "         'top_microns': 100,"
+    "         'right_microns': 200,"
+    "         'bottom_microns': 300,"
+    "         'left_microns': 400"
+    "      }, {"
+    "         'type': 'CUSTOM',"
+    "         'top_microns': 1,"
+    "         'right_microns': 2,"
+    "         'bottom_microns': 3,"
+    "         'left_microns': 4"
+    "      } ]"
+    "    },"
+    "    'dpi': {"
+    "      'option': [ {"
+    "        'horizontal_dpi': 150,"
+    "        'vertical_dpi': 250"
+    "      }, {"
+    "        'is_default': true,"
+    "        'horizontal_dpi': 600,"
+    "        'vertical_dpi': 1600"
+    "      } ]"
+    "    },"
+    "    'fit_to_page': {"
+    "      'option': [ {"
+    "        'is_default': true,"
+    "        'type': 'NO_FITTING'"
+    "      }, {"
+    "        'type': 'FIT_TO_PAGE'"
+    "      }, {"
+    "        'type': 'GROW_TO_PAGE'"
+    "      }, {"
+    "        'type': 'SHRINK_TO_PAGE'"
+    "      }, {"
+    "        'type': 'FILL_PAGE'"
+    "      } ]"
+    "    },"
+    "    'page_range': {"
+    "    },"
+    "    'media_size': {"
+    "      'option': [ {"
+    "        'is_default': true,"
+    "        'name': 'NA_LETTER',"
+    "        'width_microns': 2222,"
+    "        'height_microns': 3333"
+    "      }, {"
+    "        'name': 'ISO_A6',"
+    "        'width_microns': 4444,"
+    "        'height_microns': 5555"
+    "      }, {"
+    "        'name': 'JPN_YOU4',"
+    "        'width_microns': 6666,"
+    "        'height_microns': 7777"
+    "      }, {"
+    "        'width_microns': 1111,"
+    "        'is_continuous_feed': true,"
+    "        'custom_display_name': 'FEED'"
+    "      } ]"
+    "    },"
+    "    'collate': {"
+    "      'default': false"
+    "    },"
+    "    'reverse_order': {"
+    "      'default': true"
+    "    }"
+    "  }"
+    "}";
+
+const char kDefaultCdd[] =
+    "{"
+    "  'version': '1.0'"
+    "}";
+
+const char kBadVersionCdd[] =
+    "{"
+    "  'version': '1.1',"
+    "  'printer': {"
+    "  }"
+    "}";
+
+const char kNoDefaultCdd[] =
+    "{"
+    "  'version': '1.0',"
+    "  'printer': {"
+    "    'color': {"
+    "      'option': [ {"
+    "        'type': 'STANDARD_COLOR'"
+    "      }, {"
+    "        'type': 'STANDARD_MONOCHROME'"
+    "      } ]"
+    "    }"
+    "  }"
+    "}";
+
+const char kMultyDefaultCdd[] =
+    "{"
+    "  'version': '1.0',"
+    "  'printer': {"
+    "    'color': {"
+    "      'option': [ {"
+    "        'is_default': true,"
+    "        'type': 'STANDARD_COLOR'"
+    "      }, {"
+    "        'is_default': true,"
+    "        'type': 'STANDARD_MONOCHROME'"
+    "      } ]"
+    "    }"
+    "  }"
+    "}";
+
+const char kCjt[] =
+    "{"
+    "  'version': '1.0',"
+    "  'print': {"
+    "    'pwg_raster_config' : {"
+    "      'document_sheet_back' : 'MANUAL_TUMBLE',"
+    "      'reverse_order_streaming': true"
+    "    },"
+    "    'color': {"
+    "      'type': 'STANDARD_MONOCHROME'"
+    "    },"
+    "    'duplex': {"
+    "      'type': 'NO_DUPLEX'"
+    "    },"
+    "    'page_orientation': {"
+    "      'type': 'LANDSCAPE'"
+    "    },"
+    "    'copies': {"
+    "      'copies': 123"
+    "    },"
+    "    'margins': {"
+    "       'type': 'CUSTOM',"
+    "       'top_microns': 7,"
+    "       'right_microns': 6,"
+    "       'bottom_microns': 3,"
+    "       'left_microns': 1"
+    "    },"
+    "    'dpi': {"
+    "      'horizontal_dpi': 562,"
+    "      'vertical_dpi': 125"
+    "    },"
+    "    'fit_to_page': {"
+    "      'type': 'SHRINK_TO_PAGE'"
+    "    },"
+    "    'page_range': {"
+    "      'interval': [ {"
+    "        'start': 1,"
+    "        'end': 99"
+    "       }, {"
+    "        'start': 150"
+    "       } ]"
+    "    },"
+    "    'media_size': {"
+    "      'name': 'ISO_C7C6',"
+    "      'width_microns': 4261,"
+    "      'height_microns': 334"
+    "    },"
+    "    'collate': {"
+    "      'collate': false"
+    "    },"
+    "    'reverse_order': {"
+    "      'reverse_order': true"
+    "    }"
+    "  }"
+    "}";
+
+const char kDefaultCjt[] =
+    "{"
+    "  'version': '1.0'"
+    "}";
+
+const char kBadVersionCjt[] =
+    "{"
+    "  'version': '1.1',"
+    "  'print': {"
+    "  }"
+    "}";
+
+TEST(PrinterDescriptionTest, CddInit) {
+  CloudDeviceDescription description;
+  EXPECT_EQ(NormalizeJson(kDefaultCdd), NormalizeJson(description.ToString()));
+
+  ContentTypesCapability content_types;
+  PwgRasterConfigCapability pwg_raster;
+  ColorCapability color;
+  DuplexCapability duplex;
+  OrientationCapability orientation;
+  MarginsCapability margins;
+  DpiCapability dpi;
+  FitToPageCapability fit_to_page;
+  MediaCapability media;
+  CopiesCapability copies;
+  PageRangeCapability page_range;
+  CollateCapability collate;
+  ReverseCapability reverse;
+
+  EXPECT_FALSE(content_types.LoadFrom(description));
+  EXPECT_FALSE(pwg_raster.LoadFrom(description));
+  EXPECT_FALSE(color.LoadFrom(description));
+  EXPECT_FALSE(duplex.LoadFrom(description));
+  EXPECT_FALSE(orientation.LoadFrom(description));
+  EXPECT_FALSE(copies.LoadFrom(description));
+  EXPECT_FALSE(margins.LoadFrom(description));
+  EXPECT_FALSE(dpi.LoadFrom(description));
+  EXPECT_FALSE(fit_to_page.LoadFrom(description));
+  EXPECT_FALSE(page_range.LoadFrom(description));
+  EXPECT_FALSE(media.LoadFrom(description));
+  EXPECT_FALSE(collate.LoadFrom(description));
+  EXPECT_FALSE(reverse.LoadFrom(description));
+  EXPECT_FALSE(media.LoadFrom(description));
+}
+
+TEST(PrinterDescriptionTest, CddInvalid) {
+  CloudDeviceDescription description;
+  ColorCapability color;
+
+  EXPECT_FALSE(description.InitFromString(NormalizeJson(kBadVersionCdd)));
+
+  EXPECT_TRUE(description.InitFromString(NormalizeJson(kNoDefaultCdd)));
+  EXPECT_FALSE(color.LoadFrom(description));
+
+  EXPECT_TRUE(description.InitFromString(NormalizeJson(kMultyDefaultCdd)));
+  EXPECT_FALSE(color.LoadFrom(description));
+}
+
+TEST(PrinterDescriptionTest, CddSetAll) {
+  CloudDeviceDescription description;
+
+  ContentTypesCapability content_types;
+  PwgRasterConfigCapability pwg_raster_config;
+  ColorCapability color;
+  DuplexCapability duplex;
+  OrientationCapability orientation;
+  MarginsCapability margins;
+  DpiCapability dpi;
+  FitToPageCapability fit_to_page;
+  MediaCapability media;
+  CopiesCapability copies;
+  PageRangeCapability page_range;
+  CollateCapability collate;
+  ReverseCapability reverse;
+
+  content_types.AddOption("image/pwg-raster");
+  content_types.AddOption("image/jpeg");
+
+  PwgRasterConfig custom_raster;
+  custom_raster.document_sheet_back = MANUAL_TUMBLE;
+  custom_raster.reverse_order_streaming = true;
+  custom_raster.rotate_all_pages = false;
+  pwg_raster_config.set_value(custom_raster);
+
+  color.AddDefaultOption(Color(STANDARD_COLOR), true);
+  color.AddOption(Color(STANDARD_MONOCHROME));
+  Color custom(CUSTOM_MONOCHROME);
+  custom.vendor_id = "123";
+  custom.custom_display_name = "monochrome";
+  color.AddOption(custom);
+
+  duplex.AddDefaultOption(LONG_EDGE, true);
+  duplex.AddOption(SHORT_EDGE);
+  duplex.AddOption(NO_DUPLEX);
+
+  orientation.AddOption(PORTRAIT);
+  orientation.AddOption(LANDSCAPE);
+  orientation.AddDefaultOption(AUTO_ORIENTATION, true);
+
+  margins.AddDefaultOption(Margins(NO_MARGINS, 0, 0, 0, 0), true);
+  margins.AddOption(Margins(STANDARD_MARGINS, 100, 200, 300, 400));
+  margins.AddOption(Margins(CUSTOM_MARGINS, 1, 2, 3, 4));
+
+  dpi.AddOption(Dpi(150, 250));
+  dpi.AddDefaultOption(Dpi(600, 1600), true);
+
+  fit_to_page.AddDefaultOption(NO_FITTING, true);
+  fit_to_page.AddOption(FIT_TO_PAGE);
+  fit_to_page.AddOption(GROW_TO_PAGE);
+  fit_to_page.AddOption(SHRINK_TO_PAGE);
+  fit_to_page.AddOption(FILL_PAGE);
+
+  media.AddDefaultOption(Media(NA_LETTER, 2222, 3333), true);
+  media.AddOption(Media(ISO_A6, 4444, 5555));
+  media.AddOption(Media(JPN_YOU4, 6666, 7777));
+  media.AddOption(Media("FEED", 1111, 0));
+
+  collate.set_default_value(false);
+  reverse.set_default_value(true);
+
+  content_types.SaveTo(&description);
+  color.SaveTo(&description);
+  duplex.SaveTo(&description);
+  orientation.SaveTo(&description);
+  copies.SaveTo(&description);
+  margins.SaveTo(&description);
+  dpi.SaveTo(&description);
+  fit_to_page.SaveTo(&description);
+  page_range.SaveTo(&description);
+  media.SaveTo(&description);
+  collate.SaveTo(&description);
+  reverse.SaveTo(&description);
+  pwg_raster_config.SaveTo(&description);
+
+  EXPECT_EQ(NormalizeJson(kCdd), NormalizeJson(description.ToString()));
+}
+
+TEST(PrinterDescriptionTest, CddGetAll) {
+  CloudDeviceDescription description;
+  ASSERT_TRUE(description.InitFromString(NormalizeJson(kCdd)));
+
+  ContentTypesCapability content_types;
+  PwgRasterConfigCapability pwg_raster_config;
+  ColorCapability color;
+  DuplexCapability duplex;
+  OrientationCapability orientation;
+  MarginsCapability margins;
+  DpiCapability dpi;
+  FitToPageCapability fit_to_page;
+  MediaCapability media;
+  CopiesCapability copies;
+  PageRangeCapability page_range;
+  CollateCapability collate;
+  ReverseCapability reverse;
+
+  EXPECT_TRUE(content_types.LoadFrom(description));
+  EXPECT_TRUE(color.LoadFrom(description));
+  EXPECT_TRUE(duplex.LoadFrom(description));
+  EXPECT_TRUE(orientation.LoadFrom(description));
+  EXPECT_TRUE(copies.LoadFrom(description));
+  EXPECT_TRUE(margins.LoadFrom(description));
+  EXPECT_TRUE(dpi.LoadFrom(description));
+  EXPECT_TRUE(fit_to_page.LoadFrom(description));
+  EXPECT_TRUE(page_range.LoadFrom(description));
+  EXPECT_TRUE(media.LoadFrom(description));
+  EXPECT_TRUE(collate.LoadFrom(description));
+  EXPECT_TRUE(reverse.LoadFrom(description));
+  EXPECT_TRUE(media.LoadFrom(description));
+  EXPECT_TRUE(pwg_raster_config.LoadFrom(description));
+
+  EXPECT_TRUE(content_types.Contains("image/pwg-raster"));
+  EXPECT_TRUE(content_types.Contains("image/jpeg"));
+
+  EXPECT_EQ(MANUAL_TUMBLE, pwg_raster_config.value().document_sheet_back);
+  EXPECT_TRUE(pwg_raster_config.value().reverse_order_streaming);
+  EXPECT_FALSE(pwg_raster_config.value().rotate_all_pages);
+
+  EXPECT_TRUE(color.Contains(Color(STANDARD_COLOR)));
+  EXPECT_TRUE(color.Contains(Color(STANDARD_MONOCHROME)));
+  Color custom(CUSTOM_MONOCHROME);
+  custom.vendor_id = "123";
+  custom.custom_display_name = "monochrome";
+  EXPECT_TRUE(color.Contains(custom));
+  EXPECT_EQ(Color(STANDARD_COLOR), color.GetDefault());
+
+  EXPECT_TRUE(duplex.Contains(LONG_EDGE));
+  EXPECT_TRUE(duplex.Contains(SHORT_EDGE));
+  EXPECT_TRUE(duplex.Contains(NO_DUPLEX));
+  EXPECT_EQ(LONG_EDGE, duplex.GetDefault());
+
+  EXPECT_TRUE(orientation.Contains(PORTRAIT));
+  EXPECT_TRUE(orientation.Contains(LANDSCAPE));
+  EXPECT_TRUE(orientation.Contains(AUTO_ORIENTATION));
+  EXPECT_EQ(AUTO_ORIENTATION, orientation.GetDefault());
+
+  EXPECT_TRUE(margins.Contains(Margins(NO_MARGINS, 0, 0, 0, 0)));
+  EXPECT_TRUE(margins.Contains(Margins(STANDARD_MARGINS, 100, 200, 300, 400)));
+  EXPECT_TRUE(margins.Contains(Margins(CUSTOM_MARGINS, 1, 2, 3, 4)));
+  EXPECT_EQ(Margins(NO_MARGINS, 0, 0, 0, 0), margins.GetDefault());
+
+  EXPECT_TRUE(dpi.Contains(Dpi(150, 250)));
+  EXPECT_TRUE(dpi.Contains(Dpi(600, 1600)));
+  EXPECT_EQ(Dpi(600, 1600), dpi.GetDefault());
+
+  EXPECT_TRUE(fit_to_page.Contains(NO_FITTING));
+  EXPECT_TRUE(fit_to_page.Contains(FIT_TO_PAGE));
+  EXPECT_TRUE(fit_to_page.Contains(GROW_TO_PAGE));
+  EXPECT_TRUE(fit_to_page.Contains(SHRINK_TO_PAGE));
+  EXPECT_TRUE(fit_to_page.Contains(FILL_PAGE));
+  EXPECT_EQ(NO_FITTING, fit_to_page.GetDefault());
+
+  EXPECT_TRUE(media.Contains(Media(NA_LETTER, 2222, 3333)));
+  EXPECT_TRUE(media.Contains(Media(ISO_A6, 4444, 5555)));
+  EXPECT_TRUE(media.Contains(Media(JPN_YOU4, 6666, 7777)));
+  EXPECT_TRUE(media.Contains(Media("FEED", 1111, 0)));
+  EXPECT_EQ(Media(NA_LETTER, 2222, 3333), media.GetDefault());
+
+  EXPECT_FALSE(collate.default_value());
+  EXPECT_TRUE(reverse.default_value());
+
+  EXPECT_EQ(NormalizeJson(kCdd), NormalizeJson(description.ToString()));
+}
+
+TEST(PrinterDescriptionTest, CjtInit) {
+  CloudDeviceDescription description;
+  EXPECT_EQ(NormalizeJson(kDefaultCjt), NormalizeJson(description.ToString()));
+
+  PwgRasterConfigTicketItem pwg_raster_config;
+  ColorTicketItem color;
+  DuplexTicketItem duplex;
+  OrientationTicketItem orientation;
+  MarginsTicketItem margins;
+  DpiTicketItem dpi;
+  FitToPageTicketItem fit_to_page;
+  MediaTicketItem media;
+  CopiesTicketItem copies;
+  PageRangeTicketItem page_range;
+  CollateTicketItem collate;
+  ReverseTicketItem reverse;
+
+  EXPECT_FALSE(pwg_raster_config.LoadFrom(description));
+  EXPECT_FALSE(color.LoadFrom(description));
+  EXPECT_FALSE(duplex.LoadFrom(description));
+  EXPECT_FALSE(orientation.LoadFrom(description));
+  EXPECT_FALSE(copies.LoadFrom(description));
+  EXPECT_FALSE(margins.LoadFrom(description));
+  EXPECT_FALSE(dpi.LoadFrom(description));
+  EXPECT_FALSE(fit_to_page.LoadFrom(description));
+  EXPECT_FALSE(page_range.LoadFrom(description));
+  EXPECT_FALSE(media.LoadFrom(description));
+  EXPECT_FALSE(collate.LoadFrom(description));
+  EXPECT_FALSE(reverse.LoadFrom(description));
+  EXPECT_FALSE(media.LoadFrom(description));
+}
+
+TEST(PrinterDescriptionTest, CjtInvalid) {
+  CloudDeviceDescription ticket;
+  EXPECT_FALSE(ticket.InitFromString(NormalizeJson(kBadVersionCjt)));
+}
+
+TEST(PrinterDescriptionTest, CjtSetAll) {
+  CloudDeviceDescription description;
+
+  PwgRasterConfigTicketItem pwg_raster_config;
+  ColorTicketItem color;
+  DuplexTicketItem duplex;
+  OrientationTicketItem orientation;
+  MarginsTicketItem margins;
+  DpiTicketItem dpi;
+  FitToPageTicketItem fit_to_page;
+  MediaTicketItem media;
+  CopiesTicketItem copies;
+  PageRangeTicketItem page_range;
+  CollateTicketItem collate;
+  ReverseTicketItem reverse;
+
+  PwgRasterConfig custom_raster;
+  custom_raster.document_sheet_back = MANUAL_TUMBLE;
+  custom_raster.reverse_order_streaming = true;
+  custom_raster.rotate_all_pages = false;
+  pwg_raster_config.set_value(custom_raster);
+  color.set_value(Color(STANDARD_MONOCHROME));
+  duplex.set_value(NO_DUPLEX);
+  orientation.set_value(LANDSCAPE);
+  copies.set_value(123);
+  margins.set_value(Margins(CUSTOM_MARGINS, 7, 6, 3, 1));
+  dpi.set_value(Dpi(562, 125));
+  fit_to_page.set_value(SHRINK_TO_PAGE);
+  PageRange page_ranges;
+  page_ranges.push_back(Interval(1, 99));
+  page_ranges.push_back(Interval(150));
+  page_range.set_value(page_ranges);
+  media.set_value(Media(ISO_C7C6, 4261, 334));
+  collate.set_value(false);
+  reverse.set_value(true);
+
+  pwg_raster_config.SaveTo(&description);
+  color.SaveTo(&description);
+  duplex.SaveTo(&description);
+  orientation.SaveTo(&description);
+  copies.SaveTo(&description);
+  margins.SaveTo(&description);
+  dpi.SaveTo(&description);
+  fit_to_page.SaveTo(&description);
+  page_range.SaveTo(&description);
+  media.SaveTo(&description);
+  collate.SaveTo(&description);
+  reverse.SaveTo(&description);
+
+  EXPECT_EQ(NormalizeJson(kCjt), NormalizeJson(description.ToString()));
+}
+
+TEST(PrinterDescriptionTest, CjtGetAll) {
+  CloudDeviceDescription description;
+  ASSERT_TRUE(description.InitFromString(NormalizeJson(kCjt)));
+
+  ColorTicketItem color;
+  DuplexTicketItem duplex;
+  OrientationTicketItem orientation;
+  MarginsTicketItem margins;
+  DpiTicketItem dpi;
+  FitToPageTicketItem fit_to_page;
+  MediaTicketItem media;
+  CopiesTicketItem copies;
+  PageRangeTicketItem page_range;
+  CollateTicketItem collate;
+  ReverseTicketItem reverse;
+  PwgRasterConfigTicketItem pwg_raster_config;
+
+  EXPECT_TRUE(pwg_raster_config.LoadFrom(description));
+  EXPECT_TRUE(color.LoadFrom(description));
+  EXPECT_TRUE(duplex.LoadFrom(description));
+  EXPECT_TRUE(orientation.LoadFrom(description));
+  EXPECT_TRUE(copies.LoadFrom(description));
+  EXPECT_TRUE(margins.LoadFrom(description));
+  EXPECT_TRUE(dpi.LoadFrom(description));
+  EXPECT_TRUE(fit_to_page.LoadFrom(description));
+  EXPECT_TRUE(page_range.LoadFrom(description));
+  EXPECT_TRUE(media.LoadFrom(description));
+  EXPECT_TRUE(collate.LoadFrom(description));
+  EXPECT_TRUE(reverse.LoadFrom(description));
+  EXPECT_TRUE(media.LoadFrom(description));
+
+  EXPECT_EQ(MANUAL_TUMBLE, pwg_raster_config.value().document_sheet_back);
+  EXPECT_TRUE(pwg_raster_config.value().reverse_order_streaming);
+  EXPECT_FALSE(pwg_raster_config.value().rotate_all_pages);
+  EXPECT_EQ(color.value(), Color(STANDARD_MONOCHROME));
+  EXPECT_EQ(duplex.value(), NO_DUPLEX);
+  EXPECT_EQ(orientation.value(), LANDSCAPE);
+  EXPECT_EQ(copies.value(), 123);
+  EXPECT_EQ(margins.value(), Margins(CUSTOM_MARGINS, 7, 6, 3, 1));
+  EXPECT_EQ(dpi.value(), Dpi(562, 125));
+  EXPECT_EQ(fit_to_page.value(), SHRINK_TO_PAGE);
+  PageRange page_ranges;
+  page_ranges.push_back(Interval(1, 99));
+  page_ranges.push_back(Interval(150));
+  EXPECT_EQ(page_range.value(), page_ranges);
+  EXPECT_EQ(media.value(), Media(ISO_C7C6, 4261, 334));
+  EXPECT_FALSE(collate.value());
+  EXPECT_TRUE(reverse.value());
+
+  EXPECT_EQ(NormalizeJson(kCjt), NormalizeJson(description.ToString()));
+}
+
+}  // namespace printer
+
+}  // namespace cloud_devices
diff --git a/components/cloud_devices/description_items.h b/components/cloud_devices/description_items.h
deleted file mode 100644
index 383aa55..0000000
--- a/components/cloud_devices/description_items.h
+++ /dev/null
@@ -1,258 +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.
-
-#ifndef COMPONENTS_CLOUD_DEVICES_CAPABILITY_INTERFACES_H_
-#define COMPONENTS_CLOUD_DEVICES_CAPABILITY_INTERFACES_H_
-
-// Defines common templates that could be used to create device specific
-// capabilities and print tickets.
-
-#include <vector>
-
-#include "base/logging.h"
-#include "base/numerics/safe_conversions.h"
-#include "components/cloud_devices/cloud_device_description.h"
-
-namespace base {
-class DictionaryValue;
-}
-
-namespace cloud_devices {
-
-// All traits below specify how to serialize and validate capabilities and
-// ticket items.
-// Traits should have following methods:
-//   // Returns true if capability semantically valid.
-//   static bool IsValid(const Option&);
-//
-//   // Returns json path relative to the root of CDD/CJT.
-//   static std::string GetItemPath();
-//
-//   // Loads ticket item. Returns false if failed.
-//   static bool Load(const base::DictionaryValue& dict, ContentType* option);
-//
-//   // Saves ticket item.
-//   static void Save(ContentType option, base::DictionaryValue* dict);
-
-// Represents a CDD capability that is stored as a JSON list
-// Ex: "<CAPABILITY_NAME>": [ {<VALUE>}, {<VALUE>}, {<VALUE>} ]
-// Option specifies data type for <VALUE>.
-// Traits specifies how <VALUE> is stored in JSON and semantic validation.
-template <class Option, class Traits>
-class ListCapability {
- public:
-  ListCapability();
-  ~ListCapability();
-
-  bool LoadFrom(const CloudDeviceDescription& description);
-  void SaveTo(CloudDeviceDescription* description) const;
-
-  void Reset() {
-    options_.clear();
-  }
-
-  bool IsValid() const;
-
-  bool empty() const {
-    return options_.empty();
-  }
-
-  size_t size() const {
-    return options_.size();
-  }
-
-  const Option& operator[](size_t i) const {
-    return options_[i];
-  }
-
-  bool Contains(const Option& option) const{
-    return std::find(options_.begin(), options_.end(), option) !=
-           options_.end();
-  }
-
-  void AddOption(const Option& option) {
-    options_.push_back(option);
-  }
-
- private:
-  typedef std::vector<Option> OptionVector;
-  OptionVector options_;
-
-  DISALLOW_COPY_AND_ASSIGN(ListCapability);
-};
-
-// Represents CDD capability stored as JSON list with default_value value.
-// Ex: "<CAPABILITY_NAME>": { "option": [{ "is_default": true, <VALUE>},
-//                                       {<VALUE>} ]}
-// Option specifies data type for <VALUE>.
-// Traits specifies how <VALUE> is stored in JSON and semantic validation.
-template <class Option, class Traits>
-class SelectionCapability {
- public:
-  SelectionCapability();
-  ~SelectionCapability();
-
-  bool LoadFrom(const CloudDeviceDescription& description);
-  void SaveTo(CloudDeviceDescription* description) const;
-
-  void Reset() {
-    options_.clear();
-    default_idx_ = -1;
-  }
-
-  bool IsValid() const;
-
-  bool empty() const {
-    return options_.empty();
-  }
-
-  size_t size() const {
-    return options_.size();
-  }
-
-  const Option& operator[](size_t i) const {
-    return options_[i];
-  }
-
-  bool Contains(const Option& option) const{
-    return std::find(options_.begin(), options_.end(), option) !=
-           options_.end();
-  }
-
-  const Option& GetDefault() const {
-    CHECK_GE(default_idx_, 0);
-    return options_[default_idx_];
-  }
-
-  void AddOption(const Option& option) {
-    AddDefaultOption(option, false);
-  }
-
-  void AddDefaultOption(const Option& option, bool is_default) {
-    if (is_default) {
-      DCHECK_EQ(default_idx_, -1);
-      // Point to the last element.
-      default_idx_ = base::checked_cast<int>(size());
-    }
-    options_.push_back(option);
-  }
-
- private:
-  typedef std::vector<Option> OptionVector;
-
-  OptionVector options_;
-  int default_idx_;
-
-  DISALLOW_COPY_AND_ASSIGN(SelectionCapability);
-};
-
-// Represents CDD capability that can be true or false.
-// Ex: "<CAPABILITY_NAME>": { "default_value": true }
-// Traits specifies how <VALUE> is stored in JSON and semantic validation.
-template <class Traits>
-class BooleanCapability {
- public:
-  BooleanCapability();
-  ~BooleanCapability();
-
-  bool LoadFrom(const CloudDeviceDescription& description);
-  void SaveTo(CloudDeviceDescription* description) const;
-
-  void Reset() {
-    default_value_ = false;
-  }
-
-  void set_default_value(bool value) {
-    default_value_ = value;
-  }
-
-  bool default_value() const {
-    return default_value_;
-  }
-
- private:
-  bool default_value_;
-
-  DISALLOW_COPY_AND_ASSIGN(BooleanCapability);
-};
-
-// Represents CDD capability for which existence is only important.
-// Ex: "<CAPABILITY_NAME>": { }
-// Traits specifies how <VALUE> is stored in JSON and semantic validation.
-template <class Traits>
-class EmptyCapability {
- public:
-  EmptyCapability() {};
-  ~EmptyCapability() {};
-
-  bool LoadFrom(const CloudDeviceDescription& description);
-  void SaveTo(CloudDeviceDescription* description) const;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(EmptyCapability);
-};
-
-// Represents an item that is of a specific value type.
-// Ex: "<CAPABILITY_NAME>": {<VALUE>}
-// Option specifies data type for <VALUE>.
-// Traits specifies how <VALUE> is stored in JSON and semantic validation.
-template <class Option, class Traits>
-class ValueCapability {
- public:
-  ValueCapability();
-  ~ValueCapability();
-
-  bool LoadFrom(const CloudDeviceDescription& description);
-  void SaveTo(CloudDeviceDescription* description) const;
-
-  void Reset() { value_ = Option(); }
-
-  bool IsValid() const;
-
-  const Option& value() const { return value_; }
-
-  void set_value(const Option& value) { value_ = value; }
-
- private:
-  Option value_;
-
-  DISALLOW_COPY_AND_ASSIGN(ValueCapability);
-};
-
-// Represents CJT items.
-// Ex: "<CAPABILITY_NAME>": {<VALUE>}
-// Option specifies data type for <VALUE>.
-// Traits specifies how <VALUE> is stored in JSON and semantic validation.
-template <class Option, class Traits>
-class TicketItem {
- public:
-  TicketItem();
-  ~TicketItem();
-
-  bool LoadFrom(const CloudDeviceDescription& description);
-  void SaveTo(CloudDeviceDescription* description) const;
-
-  void Reset() {
-    value_ = Option();
-  }
-
-  bool IsValid() const;
-
-  const Option& value() const {
-    return value_;
-  }
-
-  void set_value(const Option& value) {
-    value_ = value;
-  }
-
- private:
-  Option value_;
-
-  DISALLOW_COPY_AND_ASSIGN(TicketItem);
-};
-
-}  // namespace cloud_devices
-
-#endif  // COMPONENTS_CLOUD_DEVICES_CAPABILITY_INTERFACES_H_
diff --git a/components/cloud_devices/description_items_inl.h b/components/cloud_devices/description_items_inl.h
deleted file mode 100644
index 6254890..0000000
--- a/components/cloud_devices/description_items_inl.h
+++ /dev/null
@@ -1,248 +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.
-
-#ifndef COMPONENTS_CLOUD_DEVICES_DESCRIPTION_DESCRIPTION_ITEMS_INL_H_
-#define COMPONENTS_CLOUD_DEVICES_DESCRIPTION_DESCRIPTION_ITEMS_INL_H_
-
-#include <vector>
-
-#include "base/numerics/safe_conversions.h"
-#include "components/cloud_devices/description_items.h"
-
-// Implementation of templates defined in header file.
-// This file should be included from CC file with implementation of device
-// specific capabilities.
-
-namespace cloud_devices {
-
-template <class Option, class Traits>
-ListCapability<Option, Traits>::ListCapability() {
-  Reset();
-}
-
-template <class Option, class Traits>
-ListCapability<Option, Traits>::~ListCapability() { }
-
-template <class Option, class Traits>
-bool ListCapability<Option, Traits>::IsValid() const {
-  if (empty())
-    return false;  // This type of capabilities can't be empty.
-  for (size_t i = 0; i < options_.size(); ++i) {
-    if (!Traits::IsValid(options_[i]))
-      return false;
-  }
-  return true;
-}
-
-template <class Option, class Traits>
-bool ListCapability<Option, Traits>::LoadFrom(
-    const CloudDeviceDescription& description) {
-  Reset();
-  const base::ListValue* options =
-      description.GetListItem(Traits::GetCapabilityPath());
-  if (!options)
-    return false;
-  for (size_t i = 0; i < options->GetSize(); ++i) {
-    const base::DictionaryValue* option_value = NULL;
-    if (!options->GetDictionary(i, &option_value))
-      return false;  // Every entry must be a dictionary.
-    Option option;
-    if (!Traits::Load(*option_value, &option))
-      return false;
-    AddOption(option);
-  }
-  return IsValid();
-}
-
-template <class Option, class Traits>
-void ListCapability<Option, Traits>::SaveTo(
-    CloudDeviceDescription* description) const {
-  DCHECK(IsValid());
-  base::ListValue* options_list =
-      description->CreateListItem(Traits::GetCapabilityPath());
-  for (size_t i = 0; i < options_.size(); ++i) {
-    base::DictionaryValue* option_value = new base::DictionaryValue;
-    options_list->Append(option_value);
-    Traits::Save(options_[i], option_value);
-  }
-}
-
-template <class Option, class Traits>
-SelectionCapability<Option, Traits>::SelectionCapability() {
-  Reset();
-}
-
-template <class Option, class Traits>
-SelectionCapability<Option, Traits>::~SelectionCapability() { }
-
-template <class Option, class Traits>
-bool SelectionCapability<Option, Traits>::IsValid() const {
-  if (empty())
-    return false;  // This type of capabilities can't be empty
-  for (size_t i = 0; i < options_.size(); ++i) {
-    if (!Traits::IsValid(options_[i]))
-      return false;
-  }
-  return default_idx_ >= 0 && default_idx_ < base::checked_cast<int>(size());
-}
-
-template <class Option, class Traits>
-bool SelectionCapability<Option, Traits>::LoadFrom(
-    const CloudDeviceDescription& description) {
-  Reset();
-  const base::DictionaryValue* item =
-      description.GetItem(Traits::GetCapabilityPath());
-  if (!item)
-    return false;
-  const base::ListValue* options = NULL;
-  if (!item->GetList(json::kKeyOption, &options))
-    return false;
-  for (size_t i = 0; i < options->GetSize(); ++i) {
-    const base::DictionaryValue* option_value = NULL;
-    if (!options->GetDictionary(i, &option_value))
-      return false;  // Every entry must be a dictionary.
-    Option option;
-    if (!Traits::Load(*option_value, &option))
-      return false;
-    bool is_default = false;
-    option_value->GetBoolean(json::kKeyIsDefault, &is_default);
-    if (is_default && default_idx_ >= 0) {
-      return false;  // Multiple defaults.
-    }
-    AddDefaultOption(option, is_default);
-  }
-  return IsValid();
-}
-
-template <class Option, class Traits>
-void SelectionCapability<Option, Traits>::SaveTo(
-    CloudDeviceDescription* description) const {
-  DCHECK(IsValid());
-  base::ListValue* options_list = new base::ListValue;
-  description->CreateItem(Traits::GetCapabilityPath())->Set(json::kKeyOption,
-                                                            options_list);
-  for (size_t i = 0; i < options_.size(); ++i) {
-    base::DictionaryValue* option_value = new base::DictionaryValue;
-    options_list->Append(option_value);
-    if (base::checked_cast<int>(i) == default_idx_)
-      option_value->SetBoolean(json::kKeyIsDefault, true);
-    Traits::Save(options_[i], option_value);
-  }
-}
-
-template <class Traits>
-BooleanCapability<Traits>::BooleanCapability() {
-  Reset();
-}
-
-template <class Traits>
-BooleanCapability<Traits>::~BooleanCapability() { }
-
-template <class Traits>
-bool BooleanCapability<Traits>::LoadFrom(
-    const CloudDeviceDescription& description) {
-  Reset();
-  const base::DictionaryValue* dict =
-      description.GetItem(Traits::GetCapabilityPath());
-  if (!dict)
-    return false;
-  default_value_ = Traits::kDefault;
-  dict->GetBoolean(json::kKeyDefault, &default_value_);
-  return true;
-}
-
-template <class Traits>
-void BooleanCapability<Traits>::SaveTo(
-    CloudDeviceDescription* description) const {
-  base::DictionaryValue* dict =
-      description->CreateItem(Traits::GetCapabilityPath());
-  if (default_value_ != Traits::kDefault)
-    dict->SetBoolean(json::kKeyDefault, default_value_);
-}
-
-template <class Traits>
-bool EmptyCapability<Traits>::LoadFrom(
-    const CloudDeviceDescription& description) {
-  return description.GetItem(Traits::GetCapabilityPath()) != NULL;
-}
-
-template <class Traits>
-void EmptyCapability<Traits>::SaveTo(
-    CloudDeviceDescription* description) const {
-  description->CreateItem(Traits::GetCapabilityPath());
-}
-
-template <class Option, class Traits>
-ValueCapability<Option, Traits>::ValueCapability() {
-  Reset();
-}
-
-template <class Option, class Traits>
-ValueCapability<Option, Traits>::~ValueCapability() {}
-
-template <class Option, class Traits>
-bool ValueCapability<Option, Traits>::IsValid() const {
-  return Traits::IsValid(value());
-}
-
-template <class Option, class Traits>
-bool ValueCapability<Option, Traits>::LoadFrom(
-    const CloudDeviceDescription& description) {
-  Reset();
-  const base::DictionaryValue* option_value =
-      description.GetItem(Traits::GetCapabilityPath());
-  if (!option_value)
-    return false;
-  Option option;
-  if (!Traits::Load(*option_value, &option))
-    return false;
-  set_value(option);
-  return IsValid();
-}
-
-template <class Option, class Traits>
-void ValueCapability<Option, Traits>::SaveTo(
-    CloudDeviceDescription* description) const {
-  DCHECK(IsValid());
-  Traits::Save(value(), description->CreateItem(Traits::GetCapabilityPath()));
-}
-
-template <class Option, class Traits>
-TicketItem<Option, Traits>::TicketItem() {
-  Reset();
-}
-
-template <class Option, class Traits>
-TicketItem<Option, Traits>::~TicketItem() { }
-
-template <class Option, class Traits>
-bool TicketItem<Option, Traits>::IsValid() const {
-  return Traits::IsValid(value());
-}
-
-template <class Option, class Traits>
-bool TicketItem<Option, Traits>::LoadFrom(
-    const CloudDeviceDescription& description) {
-  Reset();
-  const base::DictionaryValue* option_value =
-      description.GetItem(Traits::GetTicketItemPath());
-  if (!option_value)
-    return false;
-  Option option;
-  if (!Traits::Load(*option_value, &option))
-    return false;
-  set_value(option);
-  return IsValid();
-}
-
-template <class Option, class Traits>
-void TicketItem<Option, Traits>::SaveTo(
-    CloudDeviceDescription* description) const {
-  DCHECK(IsValid());
-  Traits::Save(value(), description->CreateItem(Traits::GetTicketItemPath()));
-}
-
-}  // namespace cloud_devices
-
-#endif  // COMPONENTS_CLOUD_DEVICES_DESCRIPTION_DESCRIPTION_ITEMS_INL_H_
diff --git a/components/cloud_devices/printer_description.cc b/components/cloud_devices/printer_description.cc
deleted file mode 100644
index 8efb576..0000000
--- a/components/cloud_devices/printer_description.cc
+++ /dev/null
@@ -1,830 +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.
-
-#include "components/cloud_devices/printer_description.h"
-
-#include <algorithm>
-
-#include "base/json/json_reader.h"
-#include "base/json/json_writer.h"
-#include "base/strings/string_util.h"
-#include "base/values.h"
-#include "components/cloud_devices/cloud_device_description_consts.h"
-#include "components/cloud_devices/description_items_inl.h"
-
-namespace cloud_devices {
-
-namespace printer {
-
-namespace {
-
-const int32 kMaxPageNumber = 1000000;
-
-const char kSectionPrint[] = "print";
-const char kSectionPrinter[] = "printer";
-
-const char kCustomName[] = "custom_display_name";
-const char kKeyContentType[] = "content_type";
-const char kKeyName[] = "name";
-const char kKeyType[] = "type";
-const char kKeyVendorId[] = "vendor_id";
-
-// extern is required to be used in templates.
-extern const char kOptionCollate[] = "collate";
-extern const char kOptionColor[] = "color";
-extern const char kOptionContentType[] = "supported_content_type";
-extern const char kOptionCopies[] = "copies";
-extern const char kOptionDpi[] = "dpi";
-extern const char kOptionDuplex[] = "duplex";
-extern const char kOptionFitToPage[] = "fit_to_page";
-extern const char kOptionMargins[] = "margins";
-extern const char kOptionMediaSize[] = "media_size";
-extern const char kOptionPageOrientation[] = "page_orientation";
-extern const char kOptionPageRange[] = "page_range";
-extern const char kOptionReverse[] = "reverse_order";
-extern const char kOptionPwgRasterConfig[] = "pwg_raster_config";
-
-const char kMargineBottom[] = "bottom_microns";
-const char kMargineLeft[] = "left_microns";
-const char kMargineRight[] = "right_microns";
-const char kMargineTop[] = "top_microns";
-
-const char kDpiHorizontal[] = "horizontal_dpi";
-const char kDpiVertical[] = "vertical_dpi";
-
-const char kMediaWidth[] = "width_microns";
-const char kMediaHeight[] = "height_microns";
-const char kMediaIsContinuous[] = "is_continuous_feed";
-
-const char kPageRangeInterval[] = "interval";
-const char kPageRangeEnd[] = "end";
-const char kPageRangeStart[] = "start";
-
-const char kPwgRasterDocumentSheetBack[] = "document_sheet_back";
-const char kPwgRasterReverseOrderStreaming[] = "reverse_order_streaming";
-const char kPwgRasterRotateAllPages[] = "rotate_all_pages";
-
-const char kTypeColorColor[] = "STANDARD_COLOR";
-const char kTypeColorMonochrome[] = "STANDARD_MONOCHROME";
-const char kTypeColorCustomColor[] = "CUSTOM_COLOR";
-const char kTypeColorCustomMonochrome[] = "CUSTOM_MONOCHROME";
-const char kTypeColorAuto[] = "AUTO";
-
-const char kTypeDuplexLongEdge[] = "LONG_EDGE";
-const char kTypeDuplexNoDuplex[] = "NO_DUPLEX";
-const char kTypeDuplexShortEdge[] = "SHORT_EDGE";
-
-const char kTypeFitToPageFillPage[] = "FILL_PAGE";
-const char kTypeFitToPageFitToPage[] = "FIT_TO_PAGE";
-const char kTypeFitToPageGrowToPage[] = "GROW_TO_PAGE";
-const char kTypeFitToPageNoFitting[] = "NO_FITTING";
-const char kTypeFitToPageShrinkToPage[] = "SHRINK_TO_PAGE";
-
-const char kTypeMarginsBorderless[] = "BORDERLESS";
-const char kTypeMarginsCustom[] = "CUSTOM";
-const char kTypeMarginsStandard[] = "STANDARD";
-const char kTypeOrientationAuto[] = "AUTO";
-
-const char kTypeOrientationLandscape[] = "LANDSCAPE";
-const char kTypeOrientationPortrait[] = "PORTRAIT";
-
-const char kTypeDocumentSheetBackNormal[] = "NORMAL";
-const char kTypeDocumentSheetBackRotated[] = "ROTATED";
-const char kTypeDocumentSheetBackManualTumble[] = "MANUAL_TUMBLE";
-const char kTypeDocumentSheetBackFlipped[] = "FLIPPED";
-
-const struct ColorNames {
-  ColorType id;
-  const char* const json_name;
-} kColorNames[] = {
-  { STANDARD_COLOR, kTypeColorColor },
-  { STANDARD_MONOCHROME, kTypeColorMonochrome },
-  { CUSTOM_COLOR, kTypeColorCustomColor },
-  { CUSTOM_MONOCHROME, kTypeColorCustomMonochrome },
-  { AUTO_COLOR, kTypeColorAuto },
-};
-
-const struct DuplexNames {
-  DuplexType id;
-  const char* const json_name;
-} kDuplexNames[] = {
-  { NO_DUPLEX, kTypeDuplexNoDuplex },
-  { LONG_EDGE, kTypeDuplexLongEdge },
-  { SHORT_EDGE, kTypeDuplexShortEdge },
-};
-
-const struct OrientationNames {
-  OrientationType id;
-  const char* const json_name;
-} kOrientationNames[] = {
-  { PORTRAIT, kTypeOrientationPortrait },
-  { LANDSCAPE, kTypeOrientationLandscape },
-  { AUTO_ORIENTATION, kTypeOrientationAuto },
-};
-
-const struct MarginsNames {
-  MarginsType id;
-  const char* const json_name;
-} kMarginsNames[] = {
-  { NO_MARGINS, kTypeMarginsBorderless },
-  { STANDARD_MARGINS, kTypeMarginsStandard },
-  { CUSTOM_MARGINS, kTypeMarginsCustom },
-};
-
-const struct FitToPageNames {
-  FitToPageType id;
-  const char* const json_name;
-} kFitToPageNames[] = {
-  { NO_FITTING, kTypeFitToPageNoFitting },
-  { FIT_TO_PAGE, kTypeFitToPageFitToPage },
-  { GROW_TO_PAGE, kTypeFitToPageGrowToPage },
-  { SHRINK_TO_PAGE, kTypeFitToPageShrinkToPage },
-  { FILL_PAGE, kTypeFitToPageFillPage },
-};
-
-const struct DocumentSheetBackNames {
-  DocumentSheetBack id;
-  const char* const json_name;
-} kDocumentSheetBackNames[] = {
-      {NORMAL, kTypeDocumentSheetBackNormal},
-      {ROTATED, kTypeDocumentSheetBackRotated},
-      {MANUAL_TUMBLE, kTypeDocumentSheetBackManualTumble},
-      {FLIPPED, kTypeDocumentSheetBackFlipped}};
-
-const int32 kInchToUm = 25400;
-const int32 kMmToUm = 1000;
-const int32 kSizeTrasholdUm = 1000;
-
-#define MAP_CLOUD_PRINT_MEDIA_TYPE(type, width, height, unit_um) \
-    { type, #type, \
-      static_cast<int>(width * unit_um + 0.5), \
-      static_cast<int>(height * unit_um + 0.5) }
-
-const struct MadiaDefinition {
-  MediaType id;
-  const char* const json_name;
-  int width_um;
-  int height_um;
-} kMediaDefinitions[] = {
-  { CUSTOM_MEDIA, "CUSTOM" , 0, 0},
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_INDEX_3X5, 3, 5, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_PERSONAL, 3.625f, 6.5f, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_MONARCH, 3.875f, 7.5f, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_NUMBER_9, 3.875f, 8.875f, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_INDEX_4X6, 4, 6, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_NUMBER_10, 4.125f, 9.5f, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_A2, 4.375f, 5.75f, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_NUMBER_11, 4.5f, 10.375f, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_NUMBER_12, 4.75f, 11, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_5X7, 5, 7, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_INDEX_5X8, 5, 8, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_NUMBER_14, 5, 11.5f, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_INVOICE, 5.5f, 8.5f, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_INDEX_4X6_EXT, 6, 8, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_6X9, 6, 9, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_C5, 6.5f, 9.5f, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_7X9, 7, 9, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_EXECUTIVE, 7.25f, 10.5f, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_GOVT_LETTER, 8, 10, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_GOVT_LEGAL, 8, 13, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_QUARTO, 8.5f, 10.83f, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_LETTER, 8.5f, 11, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_FANFOLD_EUR, 8.5f, 12, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_LETTER_PLUS, 8.5f, 12.69f, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_FOOLSCAP, 8.5f, 13, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_LEGAL, 8.5f, 14, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_SUPER_A, 8.94f, 14, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_9X11, 9, 11, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_ARCH_A, 9, 12, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_LETTER_EXTRA, 9.5f, 12, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_LEGAL_EXTRA, 9.5f, 15, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_10X11, 10, 11, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_10X13, 10, 13, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_10X14, 10, 14, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_10X15, 10, 15, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_11X12, 11, 12, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_EDP, 11, 14, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_FANFOLD_US, 11, 14.875f, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_11X15, 11, 15, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_LEDGER, 11, 17, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_EUR_EDP, 12, 14, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_ARCH_B, 12, 18, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_12X19, 12, 19, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_B_PLUS, 12, 19.17f, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_SUPER_B, 13, 19, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_C, 17, 22, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_ARCH_C, 18, 24, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_D, 22, 34, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_ARCH_D, 24, 36, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_ASME_F, 28, 40, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_WIDE_FORMAT, 30, 42, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_E, 34, 44, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_ARCH_E, 36, 48, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(NA_F, 44, 68, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ROC_16K, 7.75f, 10.75f, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ROC_8K, 10.75f, 15.5f, kInchToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(PRC_32K, 97, 151, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(PRC_1, 102, 165, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(PRC_2, 102, 176, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(PRC_4, 110, 208, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(PRC_5, 110, 220, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(PRC_8, 120, 309, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(PRC_6, 120, 230, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(PRC_3, 125, 176, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(PRC_16K, 146, 215, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(PRC_7, 160, 230, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(OM_JUURO_KU_KAI, 198, 275, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(OM_PA_KAI, 267, 389, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(OM_DAI_PA_KAI, 275, 395, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(PRC_10, 324, 458, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A10, 26, 37, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A9, 37, 52, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A8, 52, 74, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A7, 74, 105, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A6, 105, 148, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A5, 148, 210, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A5_EXTRA, 174, 235, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A4, 210, 297, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A4_TAB, 225, 297, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A4_EXTRA, 235, 322, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A3, 297, 420, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A4X3, 297, 630, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A4X4, 297, 841, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A4X5, 297, 1051, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A4X6, 297, 1261, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A4X7, 297, 1471, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A4X8, 297, 1682, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A4X9, 297, 1892, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A3_EXTRA, 322, 445, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A2, 420, 594, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A3X3, 420, 891, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A3X4, 420, 1189, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A3X5, 420, 1486, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A3X6, 420, 1783, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A3X7, 420, 2080, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A1, 594, 841, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A2X3, 594, 1261, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A2X4, 594, 1682, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A2X5, 594, 2102, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A0, 841, 1189, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A1X3, 841, 1783, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A1X4, 841, 2378, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_2A0, 1189, 1682, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_A0X3, 1189, 2523, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_B10, 31, 44, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_B9, 44, 62, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_B8, 62, 88, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_B7, 88, 125, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_B6, 125, 176, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_B6C4, 125, 324, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_B5, 176, 250, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_B5_EXTRA, 201, 276, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_B4, 250, 353, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_B3, 353, 500, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_B2, 500, 707, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_B1, 707, 1000, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_B0, 1000, 1414, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_C10, 28, 40, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_C9, 40, 57, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_C8, 57, 81, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_C7, 81, 114, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_C7C6, 81, 162, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_C6, 114, 162, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_C6C5, 114, 229, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_C5, 162, 229, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_C4, 229, 324, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_C3, 324, 458, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_C2, 458, 648, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_C1, 648, 917, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_C0, 917, 1297, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_DL, 110, 220, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_RA2, 430, 610, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_SRA2, 450, 640, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_RA1, 610, 860, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_SRA1, 640, 900, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_RA0, 860, 1220, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(ISO_SRA0, 900, 1280, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(JIS_B10, 32, 45, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(JIS_B9, 45, 64, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(JIS_B8, 64, 91, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(JIS_B7, 91, 128, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(JIS_B6, 128, 182, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(JIS_B5, 182, 257, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(JIS_B4, 257, 364, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(JIS_B3, 364, 515, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(JIS_B2, 515, 728, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(JIS_B1, 728, 1030, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(JIS_B0, 1030, 1456, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(JIS_EXEC, 216, 330, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(JPN_CHOU4, 90, 205, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(JPN_HAGAKI, 100, 148, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(JPN_YOU4, 105, 235, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(JPN_CHOU2, 111.1f, 146, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(JPN_CHOU3, 120, 235, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(JPN_OUFUKU, 148, 200, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(JPN_KAHU, 240, 322.1f, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(JPN_KAKU2, 240, 332, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(OM_SMALL_PHOTO, 100, 150, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(OM_ITALIAN, 110, 230, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(OM_POSTFIX, 114, 229, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(OM_LARGE_PHOTO, 200, 300, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(OM_FOLIO, 210, 330, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(OM_FOLIO_SP, 215, 315, kMmToUm),
-  MAP_CLOUD_PRINT_MEDIA_TYPE(OM_INVITE, 220, 220, kMmToUm)
-};
-#undef MAP_CLOUD_PRINT_MEDIA_TYPE
-
-const MadiaDefinition* FindMediaBySize(int32 width_um, int32 height_um) {
-  const MadiaDefinition* result = NULL;
-  for (size_t i = 0; i < arraysize(kMediaDefinitions); ++i) {
-    int32 diff = std::max(std::abs(width_um - kMediaDefinitions[i].width_um),
-                          std::abs(height_um - kMediaDefinitions[i].height_um));
-    if (diff < kSizeTrasholdUm)
-      result = &kMediaDefinitions[i];
-  }
-  return result;
-}
-
-template<class T, class IdType>
-std::string TypeToString(const T& names, IdType id) {
-  for (size_t i = 0; i < arraysize(names); ++i) {
-    if (id == names[i].id)
-      return names[i].json_name;
-  }
-  NOTREACHED();
-  return std::string();
-}
-
-template<class T, class IdType>
-bool TypeFromString(const T& names, const std::string& type, IdType* id) {
-  for (size_t i = 0; i < arraysize(names); ++i) {
-    if (type == names[i].json_name) {
-      *id = names[i].id;
-      return true;
-    }
-  }
-  return false;
-}
-
-}  // namespace
-
-PwgRasterConfig::PwgRasterConfig()
-    : document_sheet_back(ROTATED),
-      reverse_order_streaming(false),
-      rotate_all_pages(false) {}
-
-Color::Color() : type(AUTO_COLOR) {}
-
-Color::Color(ColorType type) : type(type) {}
-
-bool Color::operator==(const Color& other) const {
-  return type == other.type && vendor_id == other.vendor_id &&
-         custom_display_name == other.custom_display_name;
-}
-
-bool Color::IsValid() const {
-  if (type != CUSTOM_COLOR && type != CUSTOM_MONOCHROME)
-    return true;
-  return !vendor_id.empty() && !custom_display_name.empty();
-}
-
-Margins::Margins()
-    : type(STANDARD_MARGINS),
-      top_um(0),
-      right_um(0),
-      bottom_um(0),
-      left_um(0) {
-}
-
-Margins::Margins(MarginsType type,
-                 int32 top_um,
-                 int32 right_um,
-                 int32 bottom_um,
-                 int32 left_um)
-    : type(type),
-      top_um(top_um),
-      right_um(right_um),
-      bottom_um(bottom_um),
-      left_um(left_um) {
-}
-
-bool Margins::operator==(const Margins& other) const {
-  return type == other.type &&
-         top_um == other.top_um &&
-         right_um == other.right_um &&
-         bottom_um == other.bottom_um;
-}
-
-Dpi::Dpi() : horizontal(0), vertical(0) {}
-
-Dpi::Dpi(int32 horizontal, int32 vertical)
-    : horizontal(horizontal), vertical(vertical) {}
-
-bool Dpi::IsValid() const {
-  return horizontal > 0 && vertical > 0;
-}
-
-bool Dpi::operator==(const Dpi& other) const {
-  return horizontal == other.horizontal && vertical == other.vertical;
-}
-
-Media::Media()
-    : type(CUSTOM_MEDIA),
-      width_um(0),
-      height_um(0),
-      is_continuous_feed(false) {
-
-}
-
-Media::Media(MediaType type, int32 width_um, int32 height_um)
-    : type(type),
-      width_um(width_um),
-      height_um(height_um),
-      is_continuous_feed(width_um <= 0 || height_um <= 0) {
-}
-
-Media::Media(const std::string& custom_display_name, int32 width_um,
-             int32 height_um)
-    : type(CUSTOM_MEDIA),
-      width_um(width_um),
-      height_um(height_um),
-      is_continuous_feed(width_um <= 0 || height_um <= 0),
-      custom_display_name(custom_display_name) {
-}
-
-bool Media::MatchBySize() {
-  const MadiaDefinition* media = FindMediaBySize(width_um, height_um);
-  if (!media)
-    return false;
-  type = media->id;
-  custom_display_name.clear();
-  return true;
-}
-
-bool Media::IsValid() const {
-  if (is_continuous_feed) {
-    if (width_um <= 0 && height_um <= 0)
-      return false;
-  } else {
-    if (width_um <= 0 || height_um <= 0)
-      return false;
-  }
-  return true;
-}
-
-bool Media::operator==(const Media& other) const {
-  return type == other.type &&
-         width_um == other.width_um &&
-         height_um == other.height_um &&
-         is_continuous_feed == other.is_continuous_feed;
-}
-
-Interval::Interval() : start(0), end(0) {}
-
-Interval::Interval(int32 start, int32 end)
-    : start(start), end(end) {}
-
-Interval::Interval(int32 start)
-    : start(start), end(kMaxPageNumber) {}
-
-bool Interval::operator==(const Interval& other) const {
-  return start == other.start && end == other.end;
-}
-
-template<const char* kName>
-class ItemsTraits {
- public:
-  static std::string GetCapabilityPath() {
-    std::string result = kSectionPrinter;
-    result += '.';
-    result += kName;
-    return result;
-  }
-
-  static std::string GetTicketItemPath() {
-    std::string result = kSectionPrint;
-    result += '.';
-    result += kName;
-    return result;
-  }
-};
-
-class NoValueValidation {
- public:
-  template <class Option>
-  static bool IsValid(const Option&) {
-    return true;
-  }
-};
-
-class ContentTypeTraits : public NoValueValidation,
-                          public ItemsTraits<kOptionContentType> {
- public:
-  static bool Load(const base::DictionaryValue& dict, ContentType* option) {
-    return dict.GetString(kKeyContentType, option);
-  }
-
-  static void Save(ContentType option, base::DictionaryValue* dict) {
-    dict->SetString(kKeyContentType, option);
-  }
-};
-
-class PwgRasterConfigTraits : public NoValueValidation,
-                              public ItemsTraits<kOptionPwgRasterConfig> {
- public:
-  static bool Load(const base::DictionaryValue& dict, PwgRasterConfig* option) {
-    std::string document_sheet_back;
-    PwgRasterConfig option_out;
-    if (dict.GetString(kPwgRasterDocumentSheetBack, &document_sheet_back)) {
-      if (!TypeFromString(kDocumentSheetBackNames,
-                          document_sheet_back,
-                          &option_out.document_sheet_back)) {
-        return false;
-      }
-    }
-
-    dict.GetBoolean(kPwgRasterReverseOrderStreaming,
-                    &option_out.reverse_order_streaming);
-    dict.GetBoolean(kPwgRasterRotateAllPages, &option_out.rotate_all_pages);
-    *option = option_out;
-    return true;
-  }
-
-  static void Save(const PwgRasterConfig& option, base::DictionaryValue* dict) {
-    dict->SetString(
-        kPwgRasterDocumentSheetBack,
-        TypeToString(kDocumentSheetBackNames, option.document_sheet_back));
-    if (option.reverse_order_streaming)
-      dict->SetBoolean(kPwgRasterReverseOrderStreaming,
-                       option.reverse_order_streaming);
-
-    if (option.rotate_all_pages)
-      dict->SetBoolean(kPwgRasterRotateAllPages, option.rotate_all_pages);
-  }
-};
-
-class ColorTraits : public ItemsTraits<kOptionColor> {
- public:
-  static bool IsValid(const Color& option) {
-    return option.IsValid();
-  }
-
-  static bool Load(const base::DictionaryValue& dict, Color* option) {
-    std::string type_str;
-    if (!dict.GetString(kKeyType, &type_str))
-      return false;
-    if (!TypeFromString(kColorNames, type_str, &option->type))
-      return false;
-    dict.GetString(kKeyVendorId, &option->vendor_id);
-    dict.GetString(kCustomName, &option->custom_display_name);
-    return true;
-  }
-
-  static void Save(const Color& option, base::DictionaryValue* dict) {
-    dict->SetString(kKeyType, TypeToString(kColorNames, option.type));
-    if (!option.vendor_id.empty())
-      dict->SetString(kKeyVendorId, option.vendor_id);
-    if (!option.custom_display_name.empty())
-      dict->SetString(kCustomName, option.custom_display_name);
-  }
-};
-
-class DuplexTraits : public NoValueValidation,
-                     public ItemsTraits<kOptionDuplex> {
- public:
-  static bool Load(const base::DictionaryValue& dict, DuplexType* option) {
-    std::string type_str;
-    return dict.GetString(kKeyType, &type_str) &&
-           TypeFromString(kDuplexNames, type_str, option);
-  }
-
-  static void Save(DuplexType option, base::DictionaryValue* dict) {
-    dict->SetString(kKeyType, TypeToString(kDuplexNames, option));
-  }
-};
-
-class OrientationTraits : public NoValueValidation,
-                          public ItemsTraits<kOptionPageOrientation> {
- public:
-  static bool Load(const base::DictionaryValue& dict, OrientationType* option) {
-    std::string type_str;
-    return dict.GetString(kKeyType, &type_str) &&
-           TypeFromString(kOrientationNames, type_str, option);
-  }
-
-  static void Save(OrientationType option, base::DictionaryValue* dict) {
-    dict->SetString(kKeyType, TypeToString(kOrientationNames, option));
-  }
-};
-
-class CopiesTraits : public ItemsTraits<kOptionCopies> {
- public:
-  static bool IsValid(int32 option) {
-    return option >= 1;
-  }
-
-  static bool Load(const base::DictionaryValue& dict, int32* option) {
-    return dict.GetInteger(kOptionCopies, option);
-  }
-
-  static void Save(int32 option, base::DictionaryValue* dict) {
-    dict->SetInteger(kOptionCopies, option);
-  }
-};
-
-class MarginsTraits : public NoValueValidation,
-                      public ItemsTraits<kOptionMargins> {
- public:
-  static bool Load(const base::DictionaryValue& dict, Margins* option) {
-    std::string type_str;
-    if (!dict.GetString(kKeyType, &type_str))
-      return false;
-    if (!TypeFromString(kMarginsNames, type_str, &option->type))
-      return false;
-    return
-        dict.GetInteger(kMargineTop, &option->top_um) &&
-        dict.GetInteger(kMargineRight, &option->right_um) &&
-        dict.GetInteger(kMargineBottom, &option->bottom_um) &&
-        dict.GetInteger(kMargineLeft, &option->left_um);
-  }
-
-  static void Save(const Margins& option, base::DictionaryValue* dict) {
-    dict->SetString(kKeyType, TypeToString(kMarginsNames, option.type));
-    dict->SetInteger(kMargineTop, option.top_um);
-    dict->SetInteger(kMargineRight, option.right_um);
-    dict->SetInteger(kMargineBottom, option.bottom_um);
-    dict->SetInteger(kMargineLeft, option.left_um);
-  }
-};
-
-class DpiTraits : public ItemsTraits<kOptionDpi> {
- public:
-  static bool IsValid(const Dpi& option) {
-    return option.IsValid();
-  }
-
-  static bool Load(const base::DictionaryValue& dict, Dpi* option) {
-    if (!dict.GetInteger(kDpiHorizontal, &option->horizontal) ||
-        !dict.GetInteger(kDpiVertical, &option->vertical)) {
-      return false;
-    }
-    return true;
-  }
-
-  static void Save(const Dpi& option, base::DictionaryValue* dict) {
-    dict->SetInteger(kDpiHorizontal, option.horizontal);
-    dict->SetInteger(kDpiVertical, option.vertical);
-  }
-};
-
-class FitToPageTraits : public NoValueValidation,
-                        public ItemsTraits<kOptionFitToPage> {
- public:
-  static bool Load(const base::DictionaryValue& dict, FitToPageType* option) {
-    std::string type_str;
-    return dict.GetString(kKeyType, &type_str) &&
-           TypeFromString(kFitToPageNames, type_str, option);
-  }
-
-  static void Save(FitToPageType option, base::DictionaryValue* dict) {
-    dict->SetString(kKeyType, TypeToString(kFitToPageNames, option));
-  }
-};
-
-class PageRangeTraits : public ItemsTraits<kOptionPageRange> {
- public:
-  static bool IsValid(const PageRange& option) {
-    for (size_t i = 0; i < option.size(); ++i) {
-      if (option[i].start < 1 || option[i].end < 1) {
-        return false;
-      }
-    }
-    return true;
-  }
-
-  static bool Load(const base::DictionaryValue& dict, PageRange* option) {
-    const base::ListValue* list = NULL;
-    if (!dict.GetList(kPageRangeInterval, &list))
-      return false;
-    for (size_t i = 0; i < list->GetSize(); ++i) {
-      const base::DictionaryValue* interval = NULL;
-      if (!list->GetDictionary(i, &interval))
-        return false;
-      Interval new_interval(1, kMaxPageNumber);
-      interval->GetInteger(kPageRangeStart, &new_interval.start);
-      interval->GetInteger(kPageRangeEnd, &new_interval.end);
-      option->push_back(new_interval);
-    }
-    return true;
-  }
-
-  static void Save(const PageRange& option, base::DictionaryValue* dict) {
-    if (!option.empty()) {
-      base::ListValue* list = new base::ListValue;
-      dict->Set(kPageRangeInterval, list);
-      for (size_t i = 0; i < option.size(); ++i) {
-        base::DictionaryValue* interval = new base::DictionaryValue;
-        list->Append(interval);
-        interval->SetInteger(kPageRangeStart, option[i].start);
-        if (option[i].end < kMaxPageNumber)
-          interval->SetInteger(kPageRangeEnd, option[i].end);
-      }
-    }
-  }
-};
-
-class MediaTraits : public ItemsTraits<kOptionMediaSize> {
- public:
-  static bool IsValid(const Media& option) {
-    return option.IsValid();
-  }
-
-  static bool Load(const base::DictionaryValue& dict, Media* option) {
-    std::string type_str;
-    if (dict.GetString(kKeyName, &type_str)) {
-      if (!TypeFromString(kMediaDefinitions, type_str, &option->type))
-        return false;
-    }
-
-    dict.GetInteger(kMediaWidth, &option->width_um);
-    dict.GetInteger(kMediaHeight, &option->height_um);
-    dict.GetBoolean(kMediaIsContinuous, &option->is_continuous_feed);
-    dict.GetString(kCustomName, &option->custom_display_name);
-    return true;
-  }
-
-  static void Save(const Media& option, base::DictionaryValue* dict) {
-    if (option.type != CUSTOM_MEDIA)
-      dict->SetString(kKeyName, TypeToString(kMediaDefinitions, option.type));
-    if (!option.custom_display_name.empty() || option.type == CUSTOM_MEDIA)
-      dict->SetString(kCustomName, option.custom_display_name);
-    if (option.width_um > 0)
-      dict->SetInteger(kMediaWidth, option.width_um);
-    if (option.height_um > 0)
-      dict->SetInteger(kMediaHeight, option.height_um);
-    if (option.is_continuous_feed)
-      dict->SetBoolean(kMediaIsContinuous, true);
-  }
-};
-
-class CollateTraits : public NoValueValidation,
-                      public ItemsTraits<kOptionCollate> {
- public:
-  static const bool kDefault = true;
-
-  static bool Load(const base::DictionaryValue& dict, bool* option) {
-    return dict.GetBoolean(kOptionCollate, option);
-  }
-
-  static void Save(bool option, base::DictionaryValue* dict) {
-    dict->SetBoolean(kOptionCollate, option);
-  }
-};
-
-class ReverseTraits : public NoValueValidation,
-                      public ItemsTraits<kOptionReverse> {
- public:
-  static const bool kDefault = false;
-
-  static bool Load(const base::DictionaryValue& dict, bool* option) {
-    return dict.GetBoolean(kOptionReverse, option);
-  }
-
-  static void Save(bool option, base::DictionaryValue* dict) {
-    dict->SetBoolean(kOptionReverse, option);
-  }
-};
-
-}  // namespace printer
-
-using namespace printer;
-
-template class ListCapability<ContentType, ContentTypeTraits>;
-template class ValueCapability<PwgRasterConfig, PwgRasterConfigTraits>;
-template class SelectionCapability<Color, ColorTraits>;
-template class SelectionCapability<DuplexType, DuplexTraits>;
-template class SelectionCapability<OrientationType, OrientationTraits>;
-template class SelectionCapability<Margins, MarginsTraits>;
-template class SelectionCapability<Dpi, DpiTraits>;
-template class SelectionCapability<FitToPageType, FitToPageTraits>;
-template class SelectionCapability<Media, MediaTraits>;
-template class EmptyCapability<class CopiesTraits>;
-template class EmptyCapability<class PageRangeTraits>;
-template class BooleanCapability<class CollateTraits>;
-template class BooleanCapability<class ReverseTraits>;
-
-template class TicketItem<PwgRasterConfig, PwgRasterConfigTraits>;
-template class TicketItem<Color, ColorTraits>;
-template class TicketItem<DuplexType, DuplexTraits>;
-template class TicketItem<OrientationType, OrientationTraits>;
-template class TicketItem<Margins, MarginsTraits>;
-template class TicketItem<Dpi, DpiTraits>;
-template class TicketItem<FitToPageType, FitToPageTraits>;
-template class TicketItem<Media, MediaTraits>;
-template class TicketItem<int32, CopiesTraits>;
-template class TicketItem<PageRange, PageRangeTraits>;
-template class TicketItem<bool, CollateTraits>;
-template class TicketItem<bool, ReverseTraits>;
-
-}  // namespace cloud_devices
diff --git a/components/cloud_devices/printer_description.h b/components/cloud_devices/printer_description.h
deleted file mode 100644
index cdfd20e..0000000
--- a/components/cloud_devices/printer_description.h
+++ /dev/null
@@ -1,384 +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.
-
-#ifndef COMPONENTS_CLOUD_DEVICES_CLOUD_PRINTER_DESCRIPTION_H_
-#define COMPONENTS_CLOUD_DEVICES_CLOUD_PRINTER_DESCRIPTION_H_
-
-#include <string>
-
-#include "base/logging.h"
-#include "components/cloud_devices/description_items.h"
-
-// Defines printer options, CDD and CJT items.
-// https://developers.google.com/cloud-print/docs/cdd
-
-namespace cloud_devices {
-
-namespace printer {
-
-typedef std::string ContentType;
-
-enum DocumentSheetBack {
-  NORMAL,
-  ROTATED,
-  MANUAL_TUMBLE,
-  FLIPPED
-};
-
-struct PwgRasterConfig {
-  PwgRasterConfig();
-
-  DocumentSheetBack document_sheet_back;
-  bool reverse_order_streaming;
-  bool rotate_all_pages;
-};
-
-enum ColorType {
-  STANDARD_COLOR,
-  STANDARD_MONOCHROME,
-  CUSTOM_COLOR,
-  CUSTOM_MONOCHROME,
-  AUTO_COLOR,
-};
-
-struct Color {
-  Color();
-  explicit Color(ColorType type);
-
-  bool IsValid() const;
-  bool operator==(const Color& other) const;
-  bool operator!=(const Color& other) const {
-    return !(*this == other);
-  }
-
-  ColorType type;
-  std::string vendor_id;
-  std::string custom_display_name;
-};
-
-enum DuplexType {
-  NO_DUPLEX,
-  LONG_EDGE,
-  SHORT_EDGE,
-};
-
-enum OrientationType {
-  PORTRAIT,
-  LANDSCAPE,
-  AUTO_ORIENTATION,
-};
-
-enum MarginsType {
-  NO_MARGINS,
-  STANDARD_MARGINS,
-  CUSTOM_MARGINS,
-};
-
-struct Margins {
-  Margins();
-  Margins(MarginsType type,
-          int32 top_um,
-          int32 right_um,
-          int32 bottom_um,
-          int32 left_um);
-
-  bool operator==(const Margins& other) const;
-  bool operator!=(const Margins& other) const {
-    return !(*this == other);
-  }
-
-  MarginsType type;
-  int32 top_um;
-  int32 right_um;
-  int32 bottom_um;
-  int32 left_um;
-};
-
-struct Dpi {
-  Dpi();
-  Dpi(int32 horizontal, int32 vertical);
-
-  bool IsValid() const;
-  bool operator==(const Dpi& other) const;
-  bool operator!=(const Dpi& other) const {
-    return !(*this == other);
-  }
-
-  int32 horizontal;
-  int32 vertical;
-};
-
-enum FitToPageType {
-  NO_FITTING,
-  FIT_TO_PAGE,
-  GROW_TO_PAGE,
-  SHRINK_TO_PAGE,
-  FILL_PAGE,
-};
-
-enum MediaType {
-  CUSTOM_MEDIA,
-
-  // North American standard sheet media names.
-  NA_INDEX_3X5,
-  NA_PERSONAL,
-  NA_MONARCH,
-  NA_NUMBER_9,
-  NA_INDEX_4X6,
-  NA_NUMBER_10,
-  NA_A2,
-  NA_NUMBER_11,
-  NA_NUMBER_12,
-  NA_5X7,
-  NA_INDEX_5X8,
-  NA_NUMBER_14,
-  NA_INVOICE,
-  NA_INDEX_4X6_EXT,
-  NA_6X9,
-  NA_C5,
-  NA_7X9,
-  NA_EXECUTIVE,
-  NA_GOVT_LETTER,
-  NA_GOVT_LEGAL,
-  NA_QUARTO,
-  NA_LETTER,
-  NA_FANFOLD_EUR,
-  NA_LETTER_PLUS,
-  NA_FOOLSCAP,
-  NA_LEGAL,
-  NA_SUPER_A,
-  NA_9X11,
-  NA_ARCH_A,
-  NA_LETTER_EXTRA,
-  NA_LEGAL_EXTRA,
-  NA_10X11,
-  NA_10X13,
-  NA_10X14,
-  NA_10X15,
-  NA_11X12,
-  NA_EDP,
-  NA_FANFOLD_US,
-  NA_11X15,
-  NA_LEDGER,
-  NA_EUR_EDP,
-  NA_ARCH_B,
-  NA_12X19,
-  NA_B_PLUS,
-  NA_SUPER_B,
-  NA_C,
-  NA_ARCH_C,
-  NA_D,
-  NA_ARCH_D,
-  NA_ASME_F,
-  NA_WIDE_FORMAT,
-  NA_E,
-  NA_ARCH_E,
-  NA_F,
-
-  // Chinese standard sheet media size names.
-  ROC_16K,
-  ROC_8K,
-  PRC_32K,
-  PRC_1,
-  PRC_2,
-  PRC_4,
-  PRC_5,
-  PRC_8,
-  PRC_6,
-  PRC_3,
-  PRC_16K,
-  PRC_7,
-  OM_JUURO_KU_KAI,
-  OM_PA_KAI,
-  OM_DAI_PA_KAI,
-  PRC_10,
-
-  // ISO standard sheet media size names.
-  ISO_A10,
-  ISO_A9,
-  ISO_A8,
-  ISO_A7,
-  ISO_A6,
-  ISO_A5,
-  ISO_A5_EXTRA,
-  ISO_A4,
-  ISO_A4_TAB,
-  ISO_A4_EXTRA,
-  ISO_A3,
-  ISO_A4X3,
-  ISO_A4X4,
-  ISO_A4X5,
-  ISO_A4X6,
-  ISO_A4X7,
-  ISO_A4X8,
-  ISO_A4X9,
-  ISO_A3_EXTRA,
-  ISO_A2,
-  ISO_A3X3,
-  ISO_A3X4,
-  ISO_A3X5,
-  ISO_A3X6,
-  ISO_A3X7,
-  ISO_A1,
-  ISO_A2X3,
-  ISO_A2X4,
-  ISO_A2X5,
-  ISO_A0,
-  ISO_A1X3,
-  ISO_A1X4,
-  ISO_2A0,
-  ISO_A0X3,
-  ISO_B10,
-  ISO_B9,
-  ISO_B8,
-  ISO_B7,
-  ISO_B6,
-  ISO_B6C4,
-  ISO_B5,
-  ISO_B5_EXTRA,
-  ISO_B4,
-  ISO_B3,
-  ISO_B2,
-  ISO_B1,
-  ISO_B0,
-  ISO_C10,
-  ISO_C9,
-  ISO_C8,
-  ISO_C7,
-  ISO_C7C6,
-  ISO_C6,
-  ISO_C6C5,
-  ISO_C5,
-  ISO_C4,
-  ISO_C3,
-  ISO_C2,
-  ISO_C1,
-  ISO_C0,
-  ISO_DL,
-  ISO_RA2,
-  ISO_SRA2,
-  ISO_RA1,
-  ISO_SRA1,
-  ISO_RA0,
-  ISO_SRA0,
-
-  // Japanese standard sheet media size names.
-  JIS_B10,
-  JIS_B9,
-  JIS_B8,
-  JIS_B7,
-  JIS_B6,
-  JIS_B5,
-  JIS_B4,
-  JIS_B3,
-  JIS_B2,
-  JIS_B1,
-  JIS_B0,
-  JIS_EXEC,
-  JPN_CHOU4,
-  JPN_HAGAKI,
-  JPN_YOU4,
-  JPN_CHOU2,
-  JPN_CHOU3,
-  JPN_OUFUKU,
-  JPN_KAHU,
-  JPN_KAKU2,
-
-  // Other metric standard sheet media size names.
-  OM_SMALL_PHOTO,
-  OM_ITALIAN,
-  OM_POSTFIX,
-  OM_LARGE_PHOTO,
-  OM_FOLIO,
-  OM_FOLIO_SP,
-  OM_INVITE,
-};
-
-struct Media {
-  Media();
-
-  Media(MediaType type, int32 width_um, int32 height_um);
-
-  Media(const std::string& custom_display_name,
-        int32 width_um, int32 height_um);
-
-  bool MatchBySize();
-
-  bool IsValid() const;
-  bool operator==(const Media& other) const;
-  bool operator!=(const Media& other) const {
-    return !(*this == other);
-  }
-
-  MediaType type;
-  int32 width_um;
-  int32 height_um;
-  bool is_continuous_feed;
-  std::string custom_display_name;
-};
-
-struct Interval {
-  Interval();
-  Interval(int32 start, int32 end);
-  Interval(int32 start);
-
-  bool operator==(const Interval& other) const;
-  bool operator!=(const Interval& other) const {
-    return !(*this == other);
-  }
-
-  int32 start;
-  int32 end;
-};
-
-typedef std::vector<Interval> PageRange;
-
-class ContentTypeTraits;
-class PwgRasterConfigTraits;
-class ColorTraits;
-class DuplexTraits;
-class OrientationTraits;
-class MarginsTraits;
-class DpiTraits;
-class FitToPageTraits;
-class MediaTraits;
-class CopiesTraits;
-class PageRangeTraits;
-class CollateTraits;
-
-typedef ListCapability<ContentType, ContentTypeTraits> ContentTypesCapability;
-typedef ValueCapability<PwgRasterConfig, PwgRasterConfigTraits>
-    PwgRasterConfigCapability;
-typedef SelectionCapability<Color, ColorTraits> ColorCapability;
-typedef SelectionCapability<DuplexType, DuplexTraits> DuplexCapability;
-typedef SelectionCapability<OrientationType,
-                            OrientationTraits> OrientationCapability;
-typedef SelectionCapability<Margins, MarginsTraits> MarginsCapability;
-typedef SelectionCapability<Dpi, DpiTraits> DpiCapability;
-typedef SelectionCapability<FitToPageType, FitToPageTraits> FitToPageCapability;
-typedef SelectionCapability<Media, MediaTraits> MediaCapability;
-typedef EmptyCapability<class CopiesTraits> CopiesCapability;
-typedef EmptyCapability<class PageRangeTraits> PageRangeCapability;
-typedef BooleanCapability<class CollateTraits> CollateCapability;
-typedef BooleanCapability<class ReverseTraits> ReverseCapability;
-
-typedef TicketItem<PwgRasterConfig, PwgRasterConfigTraits>
-    PwgRasterConfigTicketItem;
-typedef TicketItem<Color, ColorTraits> ColorTicketItem;
-typedef TicketItem<DuplexType, DuplexTraits> DuplexTicketItem;
-typedef TicketItem<OrientationType, OrientationTraits> OrientationTicketItem;
-typedef TicketItem<Margins, MarginsTraits> MarginsTicketItem;
-typedef TicketItem<Dpi, DpiTraits> DpiTicketItem;
-typedef TicketItem<FitToPageType, FitToPageTraits> FitToPageTicketItem;
-typedef TicketItem<Media, MediaTraits> MediaTicketItem;
-typedef TicketItem<int32, CopiesTraits> CopiesTicketItem;
-typedef TicketItem<PageRange, PageRangeTraits> PageRangeTicketItem;
-typedef TicketItem<bool, CollateTraits> CollateTicketItem;
-typedef TicketItem<bool, ReverseTraits> ReverseTicketItem;
-
-}  // namespace printer
-
-}  // namespace cloud_devices
-
-#endif  // COMPONENTS_CLOUD_DEVICES_CLOUD_PRINTER_DESCRIPTION_H_
diff --git a/components/cloud_devices/printer_description_unittest.cc b/components/cloud_devices/printer_description_unittest.cc
deleted file mode 100644
index 41923ea..0000000
--- a/components/cloud_devices/printer_description_unittest.cc
+++ /dev/null
@@ -1,619 +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.
-
-#include "components/cloud_devices/printer_description.h"
-
-#include "base/json/json_reader.h"
-#include "base/json/json_writer.h"
-#include "base/strings/string_util.h"
-#include "base/values.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace cloud_devices {
-
-namespace printer {
-
-// Replaces ' with " to allow readable json constants in tests.
-// Makes sure that same json value represented by same strings to simplify
-// comparison.
-std::string NormalizeJson(const std::string& json) {
-  std::string result = json;
-  base::ReplaceChars(result, "'", "\"", &result);
-  scoped_ptr<base::Value> value(base::JSONReader::Read(result));
-  DCHECK(value);
-  base::JSONWriter::Write(value.get(), &result);
-  return result;
-}
-
-const char kCdd[] =
-"{"
-"  'version': '1.0',"
-"  'printer': {"
-"    'supported_content_type': [ {"
-"      'content_type': 'image/pwg-raster'"
-"    }, {"
-"      'content_type': 'image/jpeg'"
-"    } ],"
-"    'pwg_raster_config' : {"
-"      'document_sheet_back' : 'MANUAL_TUMBLE',"
-"      'reverse_order_streaming': true"
-"    },"
-"    'color': {"
-"      'option': [ {"
-"        'is_default': true,"
-"        'type': 'STANDARD_COLOR'"
-"      }, {"
-"        'type': 'STANDARD_MONOCHROME'"
-"      }, {"
-"        'type': 'CUSTOM_MONOCHROME',"
-"        'vendor_id': '123',"
-"        'custom_display_name': 'monochrome'"
-"      } ]"
-"    },"
-"    'duplex': {"
-"      'option': [ {"
-"        'is_default': true,"
-"        'type': 'LONG_EDGE'"
-"       }, {"
-"        'type': 'SHORT_EDGE'"
-"       }, {"
-"        'type': 'NO_DUPLEX'"
-"       } ]"
-"    },"
-"    'page_orientation': {"
-"      'option': [ {"
-"        'type': 'PORTRAIT'"
-"      }, {"
-"        'type': 'LANDSCAPE'"
-"      }, {"
-"        'is_default': true,"
-"        'type': 'AUTO'"
-"      } ]"
-"    },"
-"    'copies': {"
-"    },"
-"    'margins': {"
-"      'option': [ {"
-"        'is_default': true,"
-"        'type': 'BORDERLESS',"
-"        'top_microns': 0,"
-"        'right_microns': 0,"
-"        'bottom_microns': 0,"
-"        'left_microns': 0"
-"      }, {"
-"         'type': 'STANDARD',"
-"         'top_microns': 100,"
-"         'right_microns': 200,"
-"         'bottom_microns': 300,"
-"         'left_microns': 400"
-"      }, {"
-"         'type': 'CUSTOM',"
-"         'top_microns': 1,"
-"         'right_microns': 2,"
-"         'bottom_microns': 3,"
-"         'left_microns': 4"
-"      } ]"
-"    },"
-"    'dpi': {"
-"      'option': [ {"
-"        'horizontal_dpi': 150,"
-"        'vertical_dpi': 250"
-"      }, {"
-"        'is_default': true,"
-"        'horizontal_dpi': 600,"
-"        'vertical_dpi': 1600"
-"      } ]"
-"    },"
-"    'fit_to_page': {"
-"      'option': [ {"
-"        'is_default': true,"
-"        'type': 'NO_FITTING'"
-"      }, {"
-"        'type': 'FIT_TO_PAGE'"
-"      }, {"
-"        'type': 'GROW_TO_PAGE'"
-"      }, {"
-"        'type': 'SHRINK_TO_PAGE'"
-"      }, {"
-"        'type': 'FILL_PAGE'"
-"      } ]"
-"    },"
-"    'page_range': {"
-"    },"
-"    'media_size': {"
-"      'option': [ {"
-"        'is_default': true,"
-"        'name': 'NA_LETTER',"
-"        'width_microns': 2222,"
-"        'height_microns': 3333"
-"      }, {"
-"        'name': 'ISO_A6',"
-"        'width_microns': 4444,"
-"        'height_microns': 5555"
-"      }, {"
-"        'name': 'JPN_YOU4',"
-"        'width_microns': 6666,"
-"        'height_microns': 7777"
-"      }, {"
-"        'width_microns': 1111,"
-"        'is_continuous_feed': true,"
-"        'custom_display_name': 'FEED'"
-"      } ]"
-"    },"
-"    'collate': {"
-"      'default': false"
-"    },"
-"    'reverse_order': {"
-"      'default': true"
-"    }"
-"  }"
-"}";
-
-
-const char kDefaultCdd[] =
-"{"
-"  'version': '1.0'"
-"}";
-
-const char kBadVersionCdd[] =
-"{"
-"  'version': '1.1',"
-"  'printer': {"
-"  }"
-"}";
-
-const char kNoDefaultCdd[] =
-"{"
-"  'version': '1.0',"
-"  'printer': {"
-"    'color': {"
-"      'option': [ {"
-"        'type': 'STANDARD_COLOR'"
-"      }, {"
-"        'type': 'STANDARD_MONOCHROME'"
-"      } ]"
-"    }"
-"  }"
-"}";
-
-const char kMultyDefaultCdd[] =
-"{"
-"  'version': '1.0',"
-"  'printer': {"
-"    'color': {"
-"      'option': [ {"
-"        'is_default': true,"
-"        'type': 'STANDARD_COLOR'"
-"      }, {"
-"        'is_default': true,"
-"        'type': 'STANDARD_MONOCHROME'"
-"      } ]"
-"    }"
-"  }"
-"}";
-
-const char kCjt[] =
-"{"
-"  'version': '1.0',"
-"  'print': {"
-"    'pwg_raster_config' : {"
-"      'document_sheet_back' : 'MANUAL_TUMBLE',"
-"      'reverse_order_streaming': true"
-"    },"
-"    'color': {"
-"      'type': 'STANDARD_MONOCHROME'"
-"    },"
-"    'duplex': {"
-"      'type': 'NO_DUPLEX'"
-"    },"
-"    'page_orientation': {"
-"      'type': 'LANDSCAPE'"
-"    },"
-"    'copies': {"
-"      'copies': 123"
-"    },"
-"    'margins': {"
-"       'type': 'CUSTOM',"
-"       'top_microns': 7,"
-"       'right_microns': 6,"
-"       'bottom_microns': 3,"
-"       'left_microns': 1"
-"    },"
-"    'dpi': {"
-"      'horizontal_dpi': 562,"
-"      'vertical_dpi': 125"
-"    },"
-"    'fit_to_page': {"
-"      'type': 'SHRINK_TO_PAGE'"
-"    },"
-"    'page_range': {"
-"      'interval': [ {"
-"        'start': 1,"
-"        'end': 99"
-"       }, {"
-"        'start': 150"
-"       } ]"
-"    },"
-"    'media_size': {"
-"      'name': 'ISO_C7C6',"
-"      'width_microns': 4261,"
-"      'height_microns': 334"
-"    },"
-"    'collate': {"
-"      'collate': false"
-"    },"
-"    'reverse_order': {"
-"      'reverse_order': true"
-"    }"
-"  }"
-"}";
-
-const char kDefaultCjt[] =
-"{"
-"  'version': '1.0'"
-"}";
-
-const char kBadVersionCjt[] =
-"{"
-"  'version': '1.1',"
-"  'print': {"
-"  }"
-"}";
-
-TEST(PrinterDescriptionTest, CddInit) {
-  CloudDeviceDescription description;
-  EXPECT_EQ(NormalizeJson(kDefaultCdd), NormalizeJson(description.ToString()));
-
-  ContentTypesCapability content_types;
-  PwgRasterConfigCapability pwg_raster;
-  ColorCapability color;
-  DuplexCapability duplex;
-  OrientationCapability orientation;
-  MarginsCapability margins;
-  DpiCapability dpi;
-  FitToPageCapability fit_to_page;
-  MediaCapability media;
-  CopiesCapability copies;
-  PageRangeCapability page_range;
-  CollateCapability collate;
-  ReverseCapability reverse;
-
-  EXPECT_FALSE(content_types.LoadFrom(description));
-  EXPECT_FALSE(pwg_raster.LoadFrom(description));
-  EXPECT_FALSE(color.LoadFrom(description));
-  EXPECT_FALSE(duplex.LoadFrom(description));
-  EXPECT_FALSE(orientation.LoadFrom(description));
-  EXPECT_FALSE(copies.LoadFrom(description));
-  EXPECT_FALSE(margins.LoadFrom(description));
-  EXPECT_FALSE(dpi.LoadFrom(description));
-  EXPECT_FALSE(fit_to_page.LoadFrom(description));
-  EXPECT_FALSE(page_range.LoadFrom(description));
-  EXPECT_FALSE(media.LoadFrom(description));
-  EXPECT_FALSE(collate.LoadFrom(description));
-  EXPECT_FALSE(reverse.LoadFrom(description));
-  EXPECT_FALSE(media.LoadFrom(description));
-}
-
-TEST(PrinterDescriptionTest, CddInvalid) {
-  CloudDeviceDescription description;
-  ColorCapability color;
-
-  EXPECT_FALSE(description.InitFromString(NormalizeJson(kBadVersionCdd)));
-
-  EXPECT_TRUE(description.InitFromString(NormalizeJson(kNoDefaultCdd)));
-  EXPECT_FALSE(color.LoadFrom(description));
-
-  EXPECT_TRUE(description.InitFromString(NormalizeJson(kMultyDefaultCdd)));
-  EXPECT_FALSE(color.LoadFrom(description));
-}
-
-TEST(PrinterDescriptionTest, CddSetAll) {
-  CloudDeviceDescription description;
-
-  ContentTypesCapability content_types;
-  PwgRasterConfigCapability pwg_raster_config;
-  ColorCapability color;
-  DuplexCapability duplex;
-  OrientationCapability orientation;
-  MarginsCapability margins;
-  DpiCapability dpi;
-  FitToPageCapability fit_to_page;
-  MediaCapability media;
-  CopiesCapability copies;
-  PageRangeCapability page_range;
-  CollateCapability collate;
-  ReverseCapability reverse;
-
-  content_types.AddOption("image/pwg-raster");
-  content_types.AddOption("image/jpeg");
-
-  PwgRasterConfig custom_raster;
-  custom_raster.document_sheet_back = MANUAL_TUMBLE;
-  custom_raster.reverse_order_streaming = true;
-  custom_raster.rotate_all_pages = false;
-  pwg_raster_config.set_value(custom_raster);
-
-  color.AddDefaultOption(Color(STANDARD_COLOR), true);
-  color.AddOption(Color(STANDARD_MONOCHROME));
-  Color custom(CUSTOM_MONOCHROME);
-  custom.vendor_id = "123";
-  custom.custom_display_name = "monochrome";
-  color.AddOption(custom);
-
-  duplex.AddDefaultOption(LONG_EDGE, true);
-  duplex.AddOption(SHORT_EDGE);
-  duplex.AddOption(NO_DUPLEX);
-
-  orientation.AddOption(PORTRAIT);
-  orientation.AddOption(LANDSCAPE);
-  orientation.AddDefaultOption(AUTO_ORIENTATION, true);
-
-  margins.AddDefaultOption(Margins(NO_MARGINS, 0, 0, 0, 0), true);
-  margins.AddOption(Margins(STANDARD_MARGINS, 100, 200, 300, 400));
-  margins.AddOption(Margins(CUSTOM_MARGINS, 1, 2, 3, 4));
-
-  dpi.AddOption(Dpi(150, 250));
-  dpi.AddDefaultOption(Dpi(600, 1600), true);
-
-  fit_to_page.AddDefaultOption(NO_FITTING, true);
-  fit_to_page.AddOption(FIT_TO_PAGE);
-  fit_to_page.AddOption(GROW_TO_PAGE);
-  fit_to_page.AddOption(SHRINK_TO_PAGE);
-  fit_to_page.AddOption(FILL_PAGE);
-
-  media.AddDefaultOption(Media(NA_LETTER, 2222, 3333), true);
-  media.AddOption(Media(ISO_A6, 4444, 5555));
-  media.AddOption(Media(JPN_YOU4, 6666, 7777));
-  media.AddOption(Media("FEED", 1111, 0));
-
-  collate.set_default_value(false);
-  reverse.set_default_value(true);
-
-  content_types.SaveTo(&description);
-  color.SaveTo(&description);
-  duplex.SaveTo(&description);
-  orientation.SaveTo(&description);
-  copies.SaveTo(&description);
-  margins.SaveTo(&description);
-  dpi.SaveTo(&description);
-  fit_to_page.SaveTo(&description);
-  page_range.SaveTo(&description);
-  media.SaveTo(&description);
-  collate.SaveTo(&description);
-  reverse.SaveTo(&description);
-  pwg_raster_config.SaveTo(&description);
-
-  EXPECT_EQ(NormalizeJson(kCdd), NormalizeJson(description.ToString()));
-}
-
-TEST(PrinterDescriptionTest, CddGetAll) {
-  CloudDeviceDescription description;
-  ASSERT_TRUE(description.InitFromString(NormalizeJson(kCdd)));
-
-  ContentTypesCapability content_types;
-  PwgRasterConfigCapability pwg_raster_config;
-  ColorCapability color;
-  DuplexCapability duplex;
-  OrientationCapability orientation;
-  MarginsCapability margins;
-  DpiCapability dpi;
-  FitToPageCapability fit_to_page;
-  MediaCapability media;
-  CopiesCapability copies;
-  PageRangeCapability page_range;
-  CollateCapability collate;
-  ReverseCapability reverse;
-
-  EXPECT_TRUE(content_types.LoadFrom(description));
-  EXPECT_TRUE(color.LoadFrom(description));
-  EXPECT_TRUE(duplex.LoadFrom(description));
-  EXPECT_TRUE(orientation.LoadFrom(description));
-  EXPECT_TRUE(copies.LoadFrom(description));
-  EXPECT_TRUE(margins.LoadFrom(description));
-  EXPECT_TRUE(dpi.LoadFrom(description));
-  EXPECT_TRUE(fit_to_page.LoadFrom(description));
-  EXPECT_TRUE(page_range.LoadFrom(description));
-  EXPECT_TRUE(media.LoadFrom(description));
-  EXPECT_TRUE(collate.LoadFrom(description));
-  EXPECT_TRUE(reverse.LoadFrom(description));
-  EXPECT_TRUE(media.LoadFrom(description));
-  EXPECT_TRUE(pwg_raster_config.LoadFrom(description));
-
-  EXPECT_TRUE(content_types.Contains("image/pwg-raster"));
-  EXPECT_TRUE(content_types.Contains("image/jpeg"));
-
-  EXPECT_EQ(MANUAL_TUMBLE, pwg_raster_config.value().document_sheet_back);
-  EXPECT_TRUE(pwg_raster_config.value().reverse_order_streaming);
-  EXPECT_FALSE(pwg_raster_config.value().rotate_all_pages);
-
-  EXPECT_TRUE(color.Contains(Color(STANDARD_COLOR)));
-  EXPECT_TRUE(color.Contains(Color(STANDARD_MONOCHROME)));
-  Color custom(CUSTOM_MONOCHROME);
-  custom.vendor_id = "123";
-  custom.custom_display_name = "monochrome";
-  EXPECT_TRUE(color.Contains(custom));
-  EXPECT_EQ(Color(STANDARD_COLOR), color.GetDefault());
-
-  EXPECT_TRUE(duplex.Contains(LONG_EDGE));
-  EXPECT_TRUE(duplex.Contains(SHORT_EDGE));
-  EXPECT_TRUE(duplex.Contains(NO_DUPLEX));
-  EXPECT_EQ(LONG_EDGE, duplex.GetDefault());
-
-  EXPECT_TRUE(orientation.Contains(PORTRAIT));
-  EXPECT_TRUE(orientation.Contains(LANDSCAPE));
-  EXPECT_TRUE(orientation.Contains(AUTO_ORIENTATION));
-  EXPECT_EQ(AUTO_ORIENTATION, orientation.GetDefault());
-
-  EXPECT_TRUE(margins.Contains(Margins(NO_MARGINS, 0, 0, 0, 0)));
-  EXPECT_TRUE(margins.Contains(Margins(STANDARD_MARGINS, 100, 200, 300, 400)));
-  EXPECT_TRUE(margins.Contains(Margins(CUSTOM_MARGINS, 1, 2, 3, 4)));
-  EXPECT_EQ(Margins(NO_MARGINS, 0, 0, 0, 0), margins.GetDefault());
-
-  EXPECT_TRUE(dpi.Contains(Dpi(150, 250)));
-  EXPECT_TRUE(dpi.Contains(Dpi(600, 1600)));
-  EXPECT_EQ(Dpi(600, 1600), dpi.GetDefault());
-
-  EXPECT_TRUE(fit_to_page.Contains(NO_FITTING));
-  EXPECT_TRUE(fit_to_page.Contains(FIT_TO_PAGE));
-  EXPECT_TRUE(fit_to_page.Contains(GROW_TO_PAGE));
-  EXPECT_TRUE(fit_to_page.Contains(SHRINK_TO_PAGE));
-  EXPECT_TRUE(fit_to_page.Contains(FILL_PAGE));
-  EXPECT_EQ(NO_FITTING, fit_to_page.GetDefault());
-
-  EXPECT_TRUE(media.Contains(Media(NA_LETTER, 2222, 3333)));
-  EXPECT_TRUE(media.Contains(Media(ISO_A6, 4444, 5555)));
-  EXPECT_TRUE(media.Contains(Media(JPN_YOU4, 6666, 7777)));
-  EXPECT_TRUE(media.Contains(Media("FEED", 1111, 0)));
-  EXPECT_EQ(Media(NA_LETTER, 2222, 3333), media.GetDefault());
-
-  EXPECT_FALSE(collate.default_value());
-  EXPECT_TRUE(reverse.default_value());
-
-  EXPECT_EQ(NormalizeJson(kCdd), NormalizeJson(description.ToString()));
-}
-
-TEST(PrinterDescriptionTest, CjtInit) {
-  CloudDeviceDescription description;
-  EXPECT_EQ(NormalizeJson(kDefaultCjt), NormalizeJson(description.ToString()));
-
-  PwgRasterConfigTicketItem pwg_raster_config;
-  ColorTicketItem color;
-  DuplexTicketItem duplex;
-  OrientationTicketItem orientation;
-  MarginsTicketItem margins;
-  DpiTicketItem dpi;
-  FitToPageTicketItem fit_to_page;
-  MediaTicketItem media;
-  CopiesTicketItem copies;
-  PageRangeTicketItem page_range;
-  CollateTicketItem collate;
-  ReverseTicketItem reverse;
-
-  EXPECT_FALSE(pwg_raster_config.LoadFrom(description));
-  EXPECT_FALSE(color.LoadFrom(description));
-  EXPECT_FALSE(duplex.LoadFrom(description));
-  EXPECT_FALSE(orientation.LoadFrom(description));
-  EXPECT_FALSE(copies.LoadFrom(description));
-  EXPECT_FALSE(margins.LoadFrom(description));
-  EXPECT_FALSE(dpi.LoadFrom(description));
-  EXPECT_FALSE(fit_to_page.LoadFrom(description));
-  EXPECT_FALSE(page_range.LoadFrom(description));
-  EXPECT_FALSE(media.LoadFrom(description));
-  EXPECT_FALSE(collate.LoadFrom(description));
-  EXPECT_FALSE(reverse.LoadFrom(description));
-  EXPECT_FALSE(media.LoadFrom(description));
-}
-
-TEST(PrinterDescriptionTest, CjtInvalid) {
-  CloudDeviceDescription ticket;
-  EXPECT_FALSE(ticket.InitFromString(NormalizeJson(kBadVersionCjt)));
-}
-
-TEST(PrinterDescriptionTest, CjtSetAll) {
-  CloudDeviceDescription description;
-
-  PwgRasterConfigTicketItem pwg_raster_config;
-  ColorTicketItem color;
-  DuplexTicketItem duplex;
-  OrientationTicketItem orientation;
-  MarginsTicketItem margins;
-  DpiTicketItem dpi;
-  FitToPageTicketItem fit_to_page;
-  MediaTicketItem media;
-  CopiesTicketItem copies;
-  PageRangeTicketItem page_range;
-  CollateTicketItem collate;
-  ReverseTicketItem reverse;
-
-  PwgRasterConfig custom_raster;
-  custom_raster.document_sheet_back = MANUAL_TUMBLE;
-  custom_raster.reverse_order_streaming = true;
-  custom_raster.rotate_all_pages = false;
-  pwg_raster_config.set_value(custom_raster);
-  color.set_value(Color(STANDARD_MONOCHROME));
-  duplex.set_value(NO_DUPLEX);
-  orientation.set_value(LANDSCAPE);
-  copies.set_value(123);
-  margins.set_value(Margins(CUSTOM_MARGINS, 7, 6, 3, 1));
-  dpi.set_value(Dpi(562, 125));
-  fit_to_page.set_value(SHRINK_TO_PAGE);
-  PageRange page_ranges;
-  page_ranges.push_back(Interval(1, 99));
-  page_ranges.push_back(Interval(150));
-  page_range.set_value(page_ranges);
-  media.set_value(Media(ISO_C7C6, 4261, 334));
-  collate.set_value(false);
-  reverse.set_value(true);
-
-  pwg_raster_config.SaveTo(&description);
-  color.SaveTo(&description);
-  duplex.SaveTo(&description);
-  orientation.SaveTo(&description);
-  copies.SaveTo(&description);
-  margins.SaveTo(&description);
-  dpi.SaveTo(&description);
-  fit_to_page.SaveTo(&description);
-  page_range.SaveTo(&description);
-  media.SaveTo(&description);
-  collate.SaveTo(&description);
-  reverse.SaveTo(&description);
-
-  EXPECT_EQ(NormalizeJson(kCjt), NormalizeJson(description.ToString()));
-}
-
-TEST(PrinterDescriptionTest, CjtGetAll) {
-  CloudDeviceDescription description;
-  ASSERT_TRUE(description.InitFromString(NormalizeJson(kCjt)));
-
-  ColorTicketItem color;
-  DuplexTicketItem duplex;
-  OrientationTicketItem orientation;
-  MarginsTicketItem margins;
-  DpiTicketItem dpi;
-  FitToPageTicketItem fit_to_page;
-  MediaTicketItem media;
-  CopiesTicketItem copies;
-  PageRangeTicketItem page_range;
-  CollateTicketItem collate;
-  ReverseTicketItem reverse;
-  PwgRasterConfigTicketItem pwg_raster_config;
-
-  EXPECT_TRUE(pwg_raster_config.LoadFrom(description));
-  EXPECT_TRUE(color.LoadFrom(description));
-  EXPECT_TRUE(duplex.LoadFrom(description));
-  EXPECT_TRUE(orientation.LoadFrom(description));
-  EXPECT_TRUE(copies.LoadFrom(description));
-  EXPECT_TRUE(margins.LoadFrom(description));
-  EXPECT_TRUE(dpi.LoadFrom(description));
-  EXPECT_TRUE(fit_to_page.LoadFrom(description));
-  EXPECT_TRUE(page_range.LoadFrom(description));
-  EXPECT_TRUE(media.LoadFrom(description));
-  EXPECT_TRUE(collate.LoadFrom(description));
-  EXPECT_TRUE(reverse.LoadFrom(description));
-  EXPECT_TRUE(media.LoadFrom(description));
-
-  EXPECT_EQ(MANUAL_TUMBLE, pwg_raster_config.value().document_sheet_back);
-  EXPECT_TRUE(pwg_raster_config.value().reverse_order_streaming);
-  EXPECT_FALSE(pwg_raster_config.value().rotate_all_pages);
-  EXPECT_EQ(color.value(), Color(STANDARD_MONOCHROME));
-  EXPECT_EQ(duplex.value(), NO_DUPLEX);
-  EXPECT_EQ(orientation.value(), LANDSCAPE);
-  EXPECT_EQ(copies.value(), 123);
-  EXPECT_EQ(margins.value(), Margins(CUSTOM_MARGINS, 7, 6, 3, 1));
-  EXPECT_EQ(dpi.value(), Dpi(562, 125));
-  EXPECT_EQ(fit_to_page.value(), SHRINK_TO_PAGE);
-  PageRange page_ranges;
-  page_ranges.push_back(Interval(1, 99));
-  page_ranges.push_back(Interval(150));
-  EXPECT_EQ(page_range.value(), page_ranges);
-  EXPECT_EQ(media.value(), Media(ISO_C7C6, 4261, 334));
-  EXPECT_FALSE(collate.value());
-  EXPECT_TRUE(reverse.value());
-
-  EXPECT_EQ(NormalizeJson(kCjt), NormalizeJson(description.ToString()));
-}
-
-}  // namespace printer
-
-}  // namespace cloud_devices
diff --git a/components/components.gyp b/components/components.gyp
index b39b8e0..182c1be 100644
--- a/components/components.gyp
+++ b/components/components.gyp
@@ -20,6 +20,8 @@
     'dom_distiller.gypi',
     'domain_reliability.gypi',
     'favicon.gypi',
+    'favicon_base.gypi',
+    'infobars.gypi',
     'json_schema.gypi',
     'keyed_service.gypi',
     'language_usage_metrics.gypi',
@@ -30,6 +32,7 @@
     'password_manager.gypi',
     'policy.gypi',
     'precache.gypi',
+    'query_parser.gypi',
     'rappor.gypi',
     'signin.gypi',
     'startup_metric_utils.gypi',
@@ -52,6 +55,11 @@
         'wifi.gypi',
       ],
     }],
+    ['OS != "ios" and OS != "android"', {
+      'includes': [
+        'usb_service.gypi',
+      ]
+    }],
     ['android_webview_build == 0', {
       # Android WebView fails to build if a dependency on sync.gyp:sync is
       # introduced.
diff --git a/components/components_strings.grd b/components/components_strings.grd
index 13d8b5b..2e942ab 100644
--- a/components/components_strings.grd
+++ b/components/components_strings.grd
@@ -170,6 +170,7 @@
       <part file="autofill_strings.grdp" />
       <part file="dom_distiller_strings.grdp" />
       <part file="policy_strings.grdp" />
+      <part file="bookmarks_strings.grdp" />
     </messages>
   </release>
 </grit>
diff --git a/components/components_strings.target.darwin-arm.mk b/components/components_strings.target.darwin-arm.mk
index df34c33..695ba63 100644
--- a/components/components_strings.target.darwin-arm.mk
+++ b/components/components_strings.target.darwin-arm.mk
@@ -19,7 +19,7 @@
 $(gyp_shared_intermediate_dir)/components/strings/grit/component_strings.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/components/strings/grit/component_strings.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/components/strings/grit/component_strings.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/components/strings/grit/component_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/components/components_strings.grd $(LOCAL_PATH)/components/autofill_strings.grdp $(LOCAL_PATH)/components/dom_distiller_strings.grdp $(LOCAL_PATH)/components/policy_strings.grdp $(LOCAL_PATH)/components/strings/component_strings_am.xtb $(LOCAL_PATH)/components/strings/component_strings_ar.xtb $(LOCAL_PATH)/components/strings/component_strings_bg.xtb $(LOCAL_PATH)/components/strings/component_strings_bn.xtb $(LOCAL_PATH)/components/strings/component_strings_ca.xtb $(LOCAL_PATH)/components/strings/component_strings_cs.xtb $(LOCAL_PATH)/components/strings/component_strings_da.xtb $(LOCAL_PATH)/components/strings/component_strings_de.xtb $(LOCAL_PATH)/components/strings/component_strings_el.xtb $(LOCAL_PATH)/components/strings/component_strings_en-GB.xtb $(LOCAL_PATH)/components/strings/component_strings_es-419.xtb $(LOCAL_PATH)/components/strings/component_strings_es.xtb $(LOCAL_PATH)/components/strings/component_strings_et.xtb $(LOCAL_PATH)/components/strings/component_strings_fa.xtb $(LOCAL_PATH)/components/strings/component_strings_fi.xtb $(LOCAL_PATH)/components/strings/component_strings_fil.xtb $(LOCAL_PATH)/components/strings/component_strings_fr.xtb $(LOCAL_PATH)/components/strings/component_strings_gu.xtb $(LOCAL_PATH)/components/strings/component_strings_hi.xtb $(LOCAL_PATH)/components/strings/component_strings_hr.xtb $(LOCAL_PATH)/components/strings/component_strings_hu.xtb $(LOCAL_PATH)/components/strings/component_strings_id.xtb $(LOCAL_PATH)/components/strings/component_strings_it.xtb $(LOCAL_PATH)/components/strings/component_strings_iw.xtb $(LOCAL_PATH)/components/strings/component_strings_ja.xtb $(LOCAL_PATH)/components/strings/component_strings_kn.xtb $(LOCAL_PATH)/components/strings/component_strings_ko.xtb $(LOCAL_PATH)/components/strings/component_strings_lt.xtb $(LOCAL_PATH)/components/strings/component_strings_lv.xtb $(LOCAL_PATH)/components/strings/component_strings_ml.xtb $(LOCAL_PATH)/components/strings/component_strings_mr.xtb $(LOCAL_PATH)/components/strings/component_strings_ms.xtb $(LOCAL_PATH)/components/strings/component_strings_nl.xtb $(LOCAL_PATH)/components/strings/component_strings_no.xtb $(LOCAL_PATH)/components/strings/component_strings_pl.xtb $(LOCAL_PATH)/components/strings/component_strings_pt-BR.xtb $(LOCAL_PATH)/components/strings/component_strings_pt-PT.xtb $(LOCAL_PATH)/components/strings/component_strings_ro.xtb $(LOCAL_PATH)/components/strings/component_strings_ru.xtb $(LOCAL_PATH)/components/strings/component_strings_sk.xtb $(LOCAL_PATH)/components/strings/component_strings_sl.xtb $(LOCAL_PATH)/components/strings/component_strings_sr.xtb $(LOCAL_PATH)/components/strings/component_strings_sv.xtb $(LOCAL_PATH)/components/strings/component_strings_sw.xtb $(LOCAL_PATH)/components/strings/component_strings_ta.xtb $(LOCAL_PATH)/components/strings/component_strings_te.xtb $(LOCAL_PATH)/components/strings/component_strings_th.xtb $(LOCAL_PATH)/components/strings/component_strings_tr.xtb $(LOCAL_PATH)/components/strings/component_strings_uk.xtb $(LOCAL_PATH)/components/strings/component_strings_vi.xtb $(LOCAL_PATH)/components/strings/component_strings_zh-CN.xtb $(LOCAL_PATH)/components/strings/component_strings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/components/strings/grit/component_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/components/components_strings.grd $(LOCAL_PATH)/components/autofill_strings.grdp $(LOCAL_PATH)/components/bookmarks_strings.grdp $(LOCAL_PATH)/components/dom_distiller_strings.grdp $(LOCAL_PATH)/components/policy_strings.grdp $(LOCAL_PATH)/components/strings/component_strings_am.xtb $(LOCAL_PATH)/components/strings/component_strings_ar.xtb $(LOCAL_PATH)/components/strings/component_strings_bg.xtb $(LOCAL_PATH)/components/strings/component_strings_bn.xtb $(LOCAL_PATH)/components/strings/component_strings_ca.xtb $(LOCAL_PATH)/components/strings/component_strings_cs.xtb $(LOCAL_PATH)/components/strings/component_strings_da.xtb $(LOCAL_PATH)/components/strings/component_strings_de.xtb $(LOCAL_PATH)/components/strings/component_strings_el.xtb $(LOCAL_PATH)/components/strings/component_strings_en-GB.xtb $(LOCAL_PATH)/components/strings/component_strings_es-419.xtb $(LOCAL_PATH)/components/strings/component_strings_es.xtb $(LOCAL_PATH)/components/strings/component_strings_et.xtb $(LOCAL_PATH)/components/strings/component_strings_fa.xtb $(LOCAL_PATH)/components/strings/component_strings_fi.xtb $(LOCAL_PATH)/components/strings/component_strings_fil.xtb $(LOCAL_PATH)/components/strings/component_strings_fr.xtb $(LOCAL_PATH)/components/strings/component_strings_gu.xtb $(LOCAL_PATH)/components/strings/component_strings_hi.xtb $(LOCAL_PATH)/components/strings/component_strings_hr.xtb $(LOCAL_PATH)/components/strings/component_strings_hu.xtb $(LOCAL_PATH)/components/strings/component_strings_id.xtb $(LOCAL_PATH)/components/strings/component_strings_it.xtb $(LOCAL_PATH)/components/strings/component_strings_iw.xtb $(LOCAL_PATH)/components/strings/component_strings_ja.xtb $(LOCAL_PATH)/components/strings/component_strings_kn.xtb $(LOCAL_PATH)/components/strings/component_strings_ko.xtb $(LOCAL_PATH)/components/strings/component_strings_lt.xtb $(LOCAL_PATH)/components/strings/component_strings_lv.xtb $(LOCAL_PATH)/components/strings/component_strings_ml.xtb $(LOCAL_PATH)/components/strings/component_strings_mr.xtb $(LOCAL_PATH)/components/strings/component_strings_ms.xtb $(LOCAL_PATH)/components/strings/component_strings_nl.xtb $(LOCAL_PATH)/components/strings/component_strings_no.xtb $(LOCAL_PATH)/components/strings/component_strings_pl.xtb $(LOCAL_PATH)/components/strings/component_strings_pt-BR.xtb $(LOCAL_PATH)/components/strings/component_strings_pt-PT.xtb $(LOCAL_PATH)/components/strings/component_strings_ro.xtb $(LOCAL_PATH)/components/strings/component_strings_ru.xtb $(LOCAL_PATH)/components/strings/component_strings_sk.xtb $(LOCAL_PATH)/components/strings/component_strings_sl.xtb $(LOCAL_PATH)/components/strings/component_strings_sr.xtb $(LOCAL_PATH)/components/strings/component_strings_sv.xtb $(LOCAL_PATH)/components/strings/component_strings_sw.xtb $(LOCAL_PATH)/components/strings/component_strings_ta.xtb $(LOCAL_PATH)/components/strings/component_strings_te.xtb $(LOCAL_PATH)/components/strings/component_strings_th.xtb $(LOCAL_PATH)/components/strings/component_strings_tr.xtb $(LOCAL_PATH)/components/strings/component_strings_uk.xtb $(LOCAL_PATH)/components/strings/component_strings_vi.xtb $(LOCAL_PATH)/components/strings/component_strings_zh-CN.xtb $(LOCAL_PATH)/components/strings/component_strings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from components_strings.grd ($@)"
 	$(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/strings/grit $(gyp_shared_intermediate_dir)/components/strings; python ../tools/grit/grit.py -i components_strings.grd build -f ../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/components/strings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc
 
diff --git a/components/components_strings.target.darwin-mips.mk b/components/components_strings.target.darwin-mips.mk
index df34c33..695ba63 100644
--- a/components/components_strings.target.darwin-mips.mk
+++ b/components/components_strings.target.darwin-mips.mk
@@ -19,7 +19,7 @@
 $(gyp_shared_intermediate_dir)/components/strings/grit/component_strings.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/components/strings/grit/component_strings.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/components/strings/grit/component_strings.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/components/strings/grit/component_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/components/components_strings.grd $(LOCAL_PATH)/components/autofill_strings.grdp $(LOCAL_PATH)/components/dom_distiller_strings.grdp $(LOCAL_PATH)/components/policy_strings.grdp $(LOCAL_PATH)/components/strings/component_strings_am.xtb $(LOCAL_PATH)/components/strings/component_strings_ar.xtb $(LOCAL_PATH)/components/strings/component_strings_bg.xtb $(LOCAL_PATH)/components/strings/component_strings_bn.xtb $(LOCAL_PATH)/components/strings/component_strings_ca.xtb $(LOCAL_PATH)/components/strings/component_strings_cs.xtb $(LOCAL_PATH)/components/strings/component_strings_da.xtb $(LOCAL_PATH)/components/strings/component_strings_de.xtb $(LOCAL_PATH)/components/strings/component_strings_el.xtb $(LOCAL_PATH)/components/strings/component_strings_en-GB.xtb $(LOCAL_PATH)/components/strings/component_strings_es-419.xtb $(LOCAL_PATH)/components/strings/component_strings_es.xtb $(LOCAL_PATH)/components/strings/component_strings_et.xtb $(LOCAL_PATH)/components/strings/component_strings_fa.xtb $(LOCAL_PATH)/components/strings/component_strings_fi.xtb $(LOCAL_PATH)/components/strings/component_strings_fil.xtb $(LOCAL_PATH)/components/strings/component_strings_fr.xtb $(LOCAL_PATH)/components/strings/component_strings_gu.xtb $(LOCAL_PATH)/components/strings/component_strings_hi.xtb $(LOCAL_PATH)/components/strings/component_strings_hr.xtb $(LOCAL_PATH)/components/strings/component_strings_hu.xtb $(LOCAL_PATH)/components/strings/component_strings_id.xtb $(LOCAL_PATH)/components/strings/component_strings_it.xtb $(LOCAL_PATH)/components/strings/component_strings_iw.xtb $(LOCAL_PATH)/components/strings/component_strings_ja.xtb $(LOCAL_PATH)/components/strings/component_strings_kn.xtb $(LOCAL_PATH)/components/strings/component_strings_ko.xtb $(LOCAL_PATH)/components/strings/component_strings_lt.xtb $(LOCAL_PATH)/components/strings/component_strings_lv.xtb $(LOCAL_PATH)/components/strings/component_strings_ml.xtb $(LOCAL_PATH)/components/strings/component_strings_mr.xtb $(LOCAL_PATH)/components/strings/component_strings_ms.xtb $(LOCAL_PATH)/components/strings/component_strings_nl.xtb $(LOCAL_PATH)/components/strings/component_strings_no.xtb $(LOCAL_PATH)/components/strings/component_strings_pl.xtb $(LOCAL_PATH)/components/strings/component_strings_pt-BR.xtb $(LOCAL_PATH)/components/strings/component_strings_pt-PT.xtb $(LOCAL_PATH)/components/strings/component_strings_ro.xtb $(LOCAL_PATH)/components/strings/component_strings_ru.xtb $(LOCAL_PATH)/components/strings/component_strings_sk.xtb $(LOCAL_PATH)/components/strings/component_strings_sl.xtb $(LOCAL_PATH)/components/strings/component_strings_sr.xtb $(LOCAL_PATH)/components/strings/component_strings_sv.xtb $(LOCAL_PATH)/components/strings/component_strings_sw.xtb $(LOCAL_PATH)/components/strings/component_strings_ta.xtb $(LOCAL_PATH)/components/strings/component_strings_te.xtb $(LOCAL_PATH)/components/strings/component_strings_th.xtb $(LOCAL_PATH)/components/strings/component_strings_tr.xtb $(LOCAL_PATH)/components/strings/component_strings_uk.xtb $(LOCAL_PATH)/components/strings/component_strings_vi.xtb $(LOCAL_PATH)/components/strings/component_strings_zh-CN.xtb $(LOCAL_PATH)/components/strings/component_strings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/components/strings/grit/component_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/components/components_strings.grd $(LOCAL_PATH)/components/autofill_strings.grdp $(LOCAL_PATH)/components/bookmarks_strings.grdp $(LOCAL_PATH)/components/dom_distiller_strings.grdp $(LOCAL_PATH)/components/policy_strings.grdp $(LOCAL_PATH)/components/strings/component_strings_am.xtb $(LOCAL_PATH)/components/strings/component_strings_ar.xtb $(LOCAL_PATH)/components/strings/component_strings_bg.xtb $(LOCAL_PATH)/components/strings/component_strings_bn.xtb $(LOCAL_PATH)/components/strings/component_strings_ca.xtb $(LOCAL_PATH)/components/strings/component_strings_cs.xtb $(LOCAL_PATH)/components/strings/component_strings_da.xtb $(LOCAL_PATH)/components/strings/component_strings_de.xtb $(LOCAL_PATH)/components/strings/component_strings_el.xtb $(LOCAL_PATH)/components/strings/component_strings_en-GB.xtb $(LOCAL_PATH)/components/strings/component_strings_es-419.xtb $(LOCAL_PATH)/components/strings/component_strings_es.xtb $(LOCAL_PATH)/components/strings/component_strings_et.xtb $(LOCAL_PATH)/components/strings/component_strings_fa.xtb $(LOCAL_PATH)/components/strings/component_strings_fi.xtb $(LOCAL_PATH)/components/strings/component_strings_fil.xtb $(LOCAL_PATH)/components/strings/component_strings_fr.xtb $(LOCAL_PATH)/components/strings/component_strings_gu.xtb $(LOCAL_PATH)/components/strings/component_strings_hi.xtb $(LOCAL_PATH)/components/strings/component_strings_hr.xtb $(LOCAL_PATH)/components/strings/component_strings_hu.xtb $(LOCAL_PATH)/components/strings/component_strings_id.xtb $(LOCAL_PATH)/components/strings/component_strings_it.xtb $(LOCAL_PATH)/components/strings/component_strings_iw.xtb $(LOCAL_PATH)/components/strings/component_strings_ja.xtb $(LOCAL_PATH)/components/strings/component_strings_kn.xtb $(LOCAL_PATH)/components/strings/component_strings_ko.xtb $(LOCAL_PATH)/components/strings/component_strings_lt.xtb $(LOCAL_PATH)/components/strings/component_strings_lv.xtb $(LOCAL_PATH)/components/strings/component_strings_ml.xtb $(LOCAL_PATH)/components/strings/component_strings_mr.xtb $(LOCAL_PATH)/components/strings/component_strings_ms.xtb $(LOCAL_PATH)/components/strings/component_strings_nl.xtb $(LOCAL_PATH)/components/strings/component_strings_no.xtb $(LOCAL_PATH)/components/strings/component_strings_pl.xtb $(LOCAL_PATH)/components/strings/component_strings_pt-BR.xtb $(LOCAL_PATH)/components/strings/component_strings_pt-PT.xtb $(LOCAL_PATH)/components/strings/component_strings_ro.xtb $(LOCAL_PATH)/components/strings/component_strings_ru.xtb $(LOCAL_PATH)/components/strings/component_strings_sk.xtb $(LOCAL_PATH)/components/strings/component_strings_sl.xtb $(LOCAL_PATH)/components/strings/component_strings_sr.xtb $(LOCAL_PATH)/components/strings/component_strings_sv.xtb $(LOCAL_PATH)/components/strings/component_strings_sw.xtb $(LOCAL_PATH)/components/strings/component_strings_ta.xtb $(LOCAL_PATH)/components/strings/component_strings_te.xtb $(LOCAL_PATH)/components/strings/component_strings_th.xtb $(LOCAL_PATH)/components/strings/component_strings_tr.xtb $(LOCAL_PATH)/components/strings/component_strings_uk.xtb $(LOCAL_PATH)/components/strings/component_strings_vi.xtb $(LOCAL_PATH)/components/strings/component_strings_zh-CN.xtb $(LOCAL_PATH)/components/strings/component_strings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from components_strings.grd ($@)"
 	$(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/strings/grit $(gyp_shared_intermediate_dir)/components/strings; python ../tools/grit/grit.py -i components_strings.grd build -f ../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/components/strings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc
 
diff --git a/components/components_strings.target.darwin-x86.mk b/components/components_strings.target.darwin-x86.mk
index df34c33..695ba63 100644
--- a/components/components_strings.target.darwin-x86.mk
+++ b/components/components_strings.target.darwin-x86.mk
@@ -19,7 +19,7 @@
 $(gyp_shared_intermediate_dir)/components/strings/grit/component_strings.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/components/strings/grit/component_strings.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/components/strings/grit/component_strings.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/components/strings/grit/component_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/components/components_strings.grd $(LOCAL_PATH)/components/autofill_strings.grdp $(LOCAL_PATH)/components/dom_distiller_strings.grdp $(LOCAL_PATH)/components/policy_strings.grdp $(LOCAL_PATH)/components/strings/component_strings_am.xtb $(LOCAL_PATH)/components/strings/component_strings_ar.xtb $(LOCAL_PATH)/components/strings/component_strings_bg.xtb $(LOCAL_PATH)/components/strings/component_strings_bn.xtb $(LOCAL_PATH)/components/strings/component_strings_ca.xtb $(LOCAL_PATH)/components/strings/component_strings_cs.xtb $(LOCAL_PATH)/components/strings/component_strings_da.xtb $(LOCAL_PATH)/components/strings/component_strings_de.xtb $(LOCAL_PATH)/components/strings/component_strings_el.xtb $(LOCAL_PATH)/components/strings/component_strings_en-GB.xtb $(LOCAL_PATH)/components/strings/component_strings_es-419.xtb $(LOCAL_PATH)/components/strings/component_strings_es.xtb $(LOCAL_PATH)/components/strings/component_strings_et.xtb $(LOCAL_PATH)/components/strings/component_strings_fa.xtb $(LOCAL_PATH)/components/strings/component_strings_fi.xtb $(LOCAL_PATH)/components/strings/component_strings_fil.xtb $(LOCAL_PATH)/components/strings/component_strings_fr.xtb $(LOCAL_PATH)/components/strings/component_strings_gu.xtb $(LOCAL_PATH)/components/strings/component_strings_hi.xtb $(LOCAL_PATH)/components/strings/component_strings_hr.xtb $(LOCAL_PATH)/components/strings/component_strings_hu.xtb $(LOCAL_PATH)/components/strings/component_strings_id.xtb $(LOCAL_PATH)/components/strings/component_strings_it.xtb $(LOCAL_PATH)/components/strings/component_strings_iw.xtb $(LOCAL_PATH)/components/strings/component_strings_ja.xtb $(LOCAL_PATH)/components/strings/component_strings_kn.xtb $(LOCAL_PATH)/components/strings/component_strings_ko.xtb $(LOCAL_PATH)/components/strings/component_strings_lt.xtb $(LOCAL_PATH)/components/strings/component_strings_lv.xtb $(LOCAL_PATH)/components/strings/component_strings_ml.xtb $(LOCAL_PATH)/components/strings/component_strings_mr.xtb $(LOCAL_PATH)/components/strings/component_strings_ms.xtb $(LOCAL_PATH)/components/strings/component_strings_nl.xtb $(LOCAL_PATH)/components/strings/component_strings_no.xtb $(LOCAL_PATH)/components/strings/component_strings_pl.xtb $(LOCAL_PATH)/components/strings/component_strings_pt-BR.xtb $(LOCAL_PATH)/components/strings/component_strings_pt-PT.xtb $(LOCAL_PATH)/components/strings/component_strings_ro.xtb $(LOCAL_PATH)/components/strings/component_strings_ru.xtb $(LOCAL_PATH)/components/strings/component_strings_sk.xtb $(LOCAL_PATH)/components/strings/component_strings_sl.xtb $(LOCAL_PATH)/components/strings/component_strings_sr.xtb $(LOCAL_PATH)/components/strings/component_strings_sv.xtb $(LOCAL_PATH)/components/strings/component_strings_sw.xtb $(LOCAL_PATH)/components/strings/component_strings_ta.xtb $(LOCAL_PATH)/components/strings/component_strings_te.xtb $(LOCAL_PATH)/components/strings/component_strings_th.xtb $(LOCAL_PATH)/components/strings/component_strings_tr.xtb $(LOCAL_PATH)/components/strings/component_strings_uk.xtb $(LOCAL_PATH)/components/strings/component_strings_vi.xtb $(LOCAL_PATH)/components/strings/component_strings_zh-CN.xtb $(LOCAL_PATH)/components/strings/component_strings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/components/strings/grit/component_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/components/components_strings.grd $(LOCAL_PATH)/components/autofill_strings.grdp $(LOCAL_PATH)/components/bookmarks_strings.grdp $(LOCAL_PATH)/components/dom_distiller_strings.grdp $(LOCAL_PATH)/components/policy_strings.grdp $(LOCAL_PATH)/components/strings/component_strings_am.xtb $(LOCAL_PATH)/components/strings/component_strings_ar.xtb $(LOCAL_PATH)/components/strings/component_strings_bg.xtb $(LOCAL_PATH)/components/strings/component_strings_bn.xtb $(LOCAL_PATH)/components/strings/component_strings_ca.xtb $(LOCAL_PATH)/components/strings/component_strings_cs.xtb $(LOCAL_PATH)/components/strings/component_strings_da.xtb $(LOCAL_PATH)/components/strings/component_strings_de.xtb $(LOCAL_PATH)/components/strings/component_strings_el.xtb $(LOCAL_PATH)/components/strings/component_strings_en-GB.xtb $(LOCAL_PATH)/components/strings/component_strings_es-419.xtb $(LOCAL_PATH)/components/strings/component_strings_es.xtb $(LOCAL_PATH)/components/strings/component_strings_et.xtb $(LOCAL_PATH)/components/strings/component_strings_fa.xtb $(LOCAL_PATH)/components/strings/component_strings_fi.xtb $(LOCAL_PATH)/components/strings/component_strings_fil.xtb $(LOCAL_PATH)/components/strings/component_strings_fr.xtb $(LOCAL_PATH)/components/strings/component_strings_gu.xtb $(LOCAL_PATH)/components/strings/component_strings_hi.xtb $(LOCAL_PATH)/components/strings/component_strings_hr.xtb $(LOCAL_PATH)/components/strings/component_strings_hu.xtb $(LOCAL_PATH)/components/strings/component_strings_id.xtb $(LOCAL_PATH)/components/strings/component_strings_it.xtb $(LOCAL_PATH)/components/strings/component_strings_iw.xtb $(LOCAL_PATH)/components/strings/component_strings_ja.xtb $(LOCAL_PATH)/components/strings/component_strings_kn.xtb $(LOCAL_PATH)/components/strings/component_strings_ko.xtb $(LOCAL_PATH)/components/strings/component_strings_lt.xtb $(LOCAL_PATH)/components/strings/component_strings_lv.xtb $(LOCAL_PATH)/components/strings/component_strings_ml.xtb $(LOCAL_PATH)/components/strings/component_strings_mr.xtb $(LOCAL_PATH)/components/strings/component_strings_ms.xtb $(LOCAL_PATH)/components/strings/component_strings_nl.xtb $(LOCAL_PATH)/components/strings/component_strings_no.xtb $(LOCAL_PATH)/components/strings/component_strings_pl.xtb $(LOCAL_PATH)/components/strings/component_strings_pt-BR.xtb $(LOCAL_PATH)/components/strings/component_strings_pt-PT.xtb $(LOCAL_PATH)/components/strings/component_strings_ro.xtb $(LOCAL_PATH)/components/strings/component_strings_ru.xtb $(LOCAL_PATH)/components/strings/component_strings_sk.xtb $(LOCAL_PATH)/components/strings/component_strings_sl.xtb $(LOCAL_PATH)/components/strings/component_strings_sr.xtb $(LOCAL_PATH)/components/strings/component_strings_sv.xtb $(LOCAL_PATH)/components/strings/component_strings_sw.xtb $(LOCAL_PATH)/components/strings/component_strings_ta.xtb $(LOCAL_PATH)/components/strings/component_strings_te.xtb $(LOCAL_PATH)/components/strings/component_strings_th.xtb $(LOCAL_PATH)/components/strings/component_strings_tr.xtb $(LOCAL_PATH)/components/strings/component_strings_uk.xtb $(LOCAL_PATH)/components/strings/component_strings_vi.xtb $(LOCAL_PATH)/components/strings/component_strings_zh-CN.xtb $(LOCAL_PATH)/components/strings/component_strings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from components_strings.grd ($@)"
 	$(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/strings/grit $(gyp_shared_intermediate_dir)/components/strings; python ../tools/grit/grit.py -i components_strings.grd build -f ../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/components/strings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc
 
diff --git a/components/components_strings.target.darwin-x86_64.mk b/components/components_strings.target.darwin-x86_64.mk
index df34c33..695ba63 100644
--- a/components/components_strings.target.darwin-x86_64.mk
+++ b/components/components_strings.target.darwin-x86_64.mk
@@ -19,7 +19,7 @@
 $(gyp_shared_intermediate_dir)/components/strings/grit/component_strings.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/components/strings/grit/component_strings.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/components/strings/grit/component_strings.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/components/strings/grit/component_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/components/components_strings.grd $(LOCAL_PATH)/components/autofill_strings.grdp $(LOCAL_PATH)/components/dom_distiller_strings.grdp $(LOCAL_PATH)/components/policy_strings.grdp $(LOCAL_PATH)/components/strings/component_strings_am.xtb $(LOCAL_PATH)/components/strings/component_strings_ar.xtb $(LOCAL_PATH)/components/strings/component_strings_bg.xtb $(LOCAL_PATH)/components/strings/component_strings_bn.xtb $(LOCAL_PATH)/components/strings/component_strings_ca.xtb $(LOCAL_PATH)/components/strings/component_strings_cs.xtb $(LOCAL_PATH)/components/strings/component_strings_da.xtb $(LOCAL_PATH)/components/strings/component_strings_de.xtb $(LOCAL_PATH)/components/strings/component_strings_el.xtb $(LOCAL_PATH)/components/strings/component_strings_en-GB.xtb $(LOCAL_PATH)/components/strings/component_strings_es-419.xtb $(LOCAL_PATH)/components/strings/component_strings_es.xtb $(LOCAL_PATH)/components/strings/component_strings_et.xtb $(LOCAL_PATH)/components/strings/component_strings_fa.xtb $(LOCAL_PATH)/components/strings/component_strings_fi.xtb $(LOCAL_PATH)/components/strings/component_strings_fil.xtb $(LOCAL_PATH)/components/strings/component_strings_fr.xtb $(LOCAL_PATH)/components/strings/component_strings_gu.xtb $(LOCAL_PATH)/components/strings/component_strings_hi.xtb $(LOCAL_PATH)/components/strings/component_strings_hr.xtb $(LOCAL_PATH)/components/strings/component_strings_hu.xtb $(LOCAL_PATH)/components/strings/component_strings_id.xtb $(LOCAL_PATH)/components/strings/component_strings_it.xtb $(LOCAL_PATH)/components/strings/component_strings_iw.xtb $(LOCAL_PATH)/components/strings/component_strings_ja.xtb $(LOCAL_PATH)/components/strings/component_strings_kn.xtb $(LOCAL_PATH)/components/strings/component_strings_ko.xtb $(LOCAL_PATH)/components/strings/component_strings_lt.xtb $(LOCAL_PATH)/components/strings/component_strings_lv.xtb $(LOCAL_PATH)/components/strings/component_strings_ml.xtb $(LOCAL_PATH)/components/strings/component_strings_mr.xtb $(LOCAL_PATH)/components/strings/component_strings_ms.xtb $(LOCAL_PATH)/components/strings/component_strings_nl.xtb $(LOCAL_PATH)/components/strings/component_strings_no.xtb $(LOCAL_PATH)/components/strings/component_strings_pl.xtb $(LOCAL_PATH)/components/strings/component_strings_pt-BR.xtb $(LOCAL_PATH)/components/strings/component_strings_pt-PT.xtb $(LOCAL_PATH)/components/strings/component_strings_ro.xtb $(LOCAL_PATH)/components/strings/component_strings_ru.xtb $(LOCAL_PATH)/components/strings/component_strings_sk.xtb $(LOCAL_PATH)/components/strings/component_strings_sl.xtb $(LOCAL_PATH)/components/strings/component_strings_sr.xtb $(LOCAL_PATH)/components/strings/component_strings_sv.xtb $(LOCAL_PATH)/components/strings/component_strings_sw.xtb $(LOCAL_PATH)/components/strings/component_strings_ta.xtb $(LOCAL_PATH)/components/strings/component_strings_te.xtb $(LOCAL_PATH)/components/strings/component_strings_th.xtb $(LOCAL_PATH)/components/strings/component_strings_tr.xtb $(LOCAL_PATH)/components/strings/component_strings_uk.xtb $(LOCAL_PATH)/components/strings/component_strings_vi.xtb $(LOCAL_PATH)/components/strings/component_strings_zh-CN.xtb $(LOCAL_PATH)/components/strings/component_strings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/components/strings/grit/component_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/components/components_strings.grd $(LOCAL_PATH)/components/autofill_strings.grdp $(LOCAL_PATH)/components/bookmarks_strings.grdp $(LOCAL_PATH)/components/dom_distiller_strings.grdp $(LOCAL_PATH)/components/policy_strings.grdp $(LOCAL_PATH)/components/strings/component_strings_am.xtb $(LOCAL_PATH)/components/strings/component_strings_ar.xtb $(LOCAL_PATH)/components/strings/component_strings_bg.xtb $(LOCAL_PATH)/components/strings/component_strings_bn.xtb $(LOCAL_PATH)/components/strings/component_strings_ca.xtb $(LOCAL_PATH)/components/strings/component_strings_cs.xtb $(LOCAL_PATH)/components/strings/component_strings_da.xtb $(LOCAL_PATH)/components/strings/component_strings_de.xtb $(LOCAL_PATH)/components/strings/component_strings_el.xtb $(LOCAL_PATH)/components/strings/component_strings_en-GB.xtb $(LOCAL_PATH)/components/strings/component_strings_es-419.xtb $(LOCAL_PATH)/components/strings/component_strings_es.xtb $(LOCAL_PATH)/components/strings/component_strings_et.xtb $(LOCAL_PATH)/components/strings/component_strings_fa.xtb $(LOCAL_PATH)/components/strings/component_strings_fi.xtb $(LOCAL_PATH)/components/strings/component_strings_fil.xtb $(LOCAL_PATH)/components/strings/component_strings_fr.xtb $(LOCAL_PATH)/components/strings/component_strings_gu.xtb $(LOCAL_PATH)/components/strings/component_strings_hi.xtb $(LOCAL_PATH)/components/strings/component_strings_hr.xtb $(LOCAL_PATH)/components/strings/component_strings_hu.xtb $(LOCAL_PATH)/components/strings/component_strings_id.xtb $(LOCAL_PATH)/components/strings/component_strings_it.xtb $(LOCAL_PATH)/components/strings/component_strings_iw.xtb $(LOCAL_PATH)/components/strings/component_strings_ja.xtb $(LOCAL_PATH)/components/strings/component_strings_kn.xtb $(LOCAL_PATH)/components/strings/component_strings_ko.xtb $(LOCAL_PATH)/components/strings/component_strings_lt.xtb $(LOCAL_PATH)/components/strings/component_strings_lv.xtb $(LOCAL_PATH)/components/strings/component_strings_ml.xtb $(LOCAL_PATH)/components/strings/component_strings_mr.xtb $(LOCAL_PATH)/components/strings/component_strings_ms.xtb $(LOCAL_PATH)/components/strings/component_strings_nl.xtb $(LOCAL_PATH)/components/strings/component_strings_no.xtb $(LOCAL_PATH)/components/strings/component_strings_pl.xtb $(LOCAL_PATH)/components/strings/component_strings_pt-BR.xtb $(LOCAL_PATH)/components/strings/component_strings_pt-PT.xtb $(LOCAL_PATH)/components/strings/component_strings_ro.xtb $(LOCAL_PATH)/components/strings/component_strings_ru.xtb $(LOCAL_PATH)/components/strings/component_strings_sk.xtb $(LOCAL_PATH)/components/strings/component_strings_sl.xtb $(LOCAL_PATH)/components/strings/component_strings_sr.xtb $(LOCAL_PATH)/components/strings/component_strings_sv.xtb $(LOCAL_PATH)/components/strings/component_strings_sw.xtb $(LOCAL_PATH)/components/strings/component_strings_ta.xtb $(LOCAL_PATH)/components/strings/component_strings_te.xtb $(LOCAL_PATH)/components/strings/component_strings_th.xtb $(LOCAL_PATH)/components/strings/component_strings_tr.xtb $(LOCAL_PATH)/components/strings/component_strings_uk.xtb $(LOCAL_PATH)/components/strings/component_strings_vi.xtb $(LOCAL_PATH)/components/strings/component_strings_zh-CN.xtb $(LOCAL_PATH)/components/strings/component_strings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from components_strings.grd ($@)"
 	$(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/strings/grit $(gyp_shared_intermediate_dir)/components/strings; python ../tools/grit/grit.py -i components_strings.grd build -f ../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/components/strings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc
 
diff --git a/components/components_strings.target.linux-arm.mk b/components/components_strings.target.linux-arm.mk
index df34c33..695ba63 100644
--- a/components/components_strings.target.linux-arm.mk
+++ b/components/components_strings.target.linux-arm.mk
@@ -19,7 +19,7 @@
 $(gyp_shared_intermediate_dir)/components/strings/grit/component_strings.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/components/strings/grit/component_strings.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/components/strings/grit/component_strings.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/components/strings/grit/component_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/components/components_strings.grd $(LOCAL_PATH)/components/autofill_strings.grdp $(LOCAL_PATH)/components/dom_distiller_strings.grdp $(LOCAL_PATH)/components/policy_strings.grdp $(LOCAL_PATH)/components/strings/component_strings_am.xtb $(LOCAL_PATH)/components/strings/component_strings_ar.xtb $(LOCAL_PATH)/components/strings/component_strings_bg.xtb $(LOCAL_PATH)/components/strings/component_strings_bn.xtb $(LOCAL_PATH)/components/strings/component_strings_ca.xtb $(LOCAL_PATH)/components/strings/component_strings_cs.xtb $(LOCAL_PATH)/components/strings/component_strings_da.xtb $(LOCAL_PATH)/components/strings/component_strings_de.xtb $(LOCAL_PATH)/components/strings/component_strings_el.xtb $(LOCAL_PATH)/components/strings/component_strings_en-GB.xtb $(LOCAL_PATH)/components/strings/component_strings_es-419.xtb $(LOCAL_PATH)/components/strings/component_strings_es.xtb $(LOCAL_PATH)/components/strings/component_strings_et.xtb $(LOCAL_PATH)/components/strings/component_strings_fa.xtb $(LOCAL_PATH)/components/strings/component_strings_fi.xtb $(LOCAL_PATH)/components/strings/component_strings_fil.xtb $(LOCAL_PATH)/components/strings/component_strings_fr.xtb $(LOCAL_PATH)/components/strings/component_strings_gu.xtb $(LOCAL_PATH)/components/strings/component_strings_hi.xtb $(LOCAL_PATH)/components/strings/component_strings_hr.xtb $(LOCAL_PATH)/components/strings/component_strings_hu.xtb $(LOCAL_PATH)/components/strings/component_strings_id.xtb $(LOCAL_PATH)/components/strings/component_strings_it.xtb $(LOCAL_PATH)/components/strings/component_strings_iw.xtb $(LOCAL_PATH)/components/strings/component_strings_ja.xtb $(LOCAL_PATH)/components/strings/component_strings_kn.xtb $(LOCAL_PATH)/components/strings/component_strings_ko.xtb $(LOCAL_PATH)/components/strings/component_strings_lt.xtb $(LOCAL_PATH)/components/strings/component_strings_lv.xtb $(LOCAL_PATH)/components/strings/component_strings_ml.xtb $(LOCAL_PATH)/components/strings/component_strings_mr.xtb $(LOCAL_PATH)/components/strings/component_strings_ms.xtb $(LOCAL_PATH)/components/strings/component_strings_nl.xtb $(LOCAL_PATH)/components/strings/component_strings_no.xtb $(LOCAL_PATH)/components/strings/component_strings_pl.xtb $(LOCAL_PATH)/components/strings/component_strings_pt-BR.xtb $(LOCAL_PATH)/components/strings/component_strings_pt-PT.xtb $(LOCAL_PATH)/components/strings/component_strings_ro.xtb $(LOCAL_PATH)/components/strings/component_strings_ru.xtb $(LOCAL_PATH)/components/strings/component_strings_sk.xtb $(LOCAL_PATH)/components/strings/component_strings_sl.xtb $(LOCAL_PATH)/components/strings/component_strings_sr.xtb $(LOCAL_PATH)/components/strings/component_strings_sv.xtb $(LOCAL_PATH)/components/strings/component_strings_sw.xtb $(LOCAL_PATH)/components/strings/component_strings_ta.xtb $(LOCAL_PATH)/components/strings/component_strings_te.xtb $(LOCAL_PATH)/components/strings/component_strings_th.xtb $(LOCAL_PATH)/components/strings/component_strings_tr.xtb $(LOCAL_PATH)/components/strings/component_strings_uk.xtb $(LOCAL_PATH)/components/strings/component_strings_vi.xtb $(LOCAL_PATH)/components/strings/component_strings_zh-CN.xtb $(LOCAL_PATH)/components/strings/component_strings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/components/strings/grit/component_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/components/components_strings.grd $(LOCAL_PATH)/components/autofill_strings.grdp $(LOCAL_PATH)/components/bookmarks_strings.grdp $(LOCAL_PATH)/components/dom_distiller_strings.grdp $(LOCAL_PATH)/components/policy_strings.grdp $(LOCAL_PATH)/components/strings/component_strings_am.xtb $(LOCAL_PATH)/components/strings/component_strings_ar.xtb $(LOCAL_PATH)/components/strings/component_strings_bg.xtb $(LOCAL_PATH)/components/strings/component_strings_bn.xtb $(LOCAL_PATH)/components/strings/component_strings_ca.xtb $(LOCAL_PATH)/components/strings/component_strings_cs.xtb $(LOCAL_PATH)/components/strings/component_strings_da.xtb $(LOCAL_PATH)/components/strings/component_strings_de.xtb $(LOCAL_PATH)/components/strings/component_strings_el.xtb $(LOCAL_PATH)/components/strings/component_strings_en-GB.xtb $(LOCAL_PATH)/components/strings/component_strings_es-419.xtb $(LOCAL_PATH)/components/strings/component_strings_es.xtb $(LOCAL_PATH)/components/strings/component_strings_et.xtb $(LOCAL_PATH)/components/strings/component_strings_fa.xtb $(LOCAL_PATH)/components/strings/component_strings_fi.xtb $(LOCAL_PATH)/components/strings/component_strings_fil.xtb $(LOCAL_PATH)/components/strings/component_strings_fr.xtb $(LOCAL_PATH)/components/strings/component_strings_gu.xtb $(LOCAL_PATH)/components/strings/component_strings_hi.xtb $(LOCAL_PATH)/components/strings/component_strings_hr.xtb $(LOCAL_PATH)/components/strings/component_strings_hu.xtb $(LOCAL_PATH)/components/strings/component_strings_id.xtb $(LOCAL_PATH)/components/strings/component_strings_it.xtb $(LOCAL_PATH)/components/strings/component_strings_iw.xtb $(LOCAL_PATH)/components/strings/component_strings_ja.xtb $(LOCAL_PATH)/components/strings/component_strings_kn.xtb $(LOCAL_PATH)/components/strings/component_strings_ko.xtb $(LOCAL_PATH)/components/strings/component_strings_lt.xtb $(LOCAL_PATH)/components/strings/component_strings_lv.xtb $(LOCAL_PATH)/components/strings/component_strings_ml.xtb $(LOCAL_PATH)/components/strings/component_strings_mr.xtb $(LOCAL_PATH)/components/strings/component_strings_ms.xtb $(LOCAL_PATH)/components/strings/component_strings_nl.xtb $(LOCAL_PATH)/components/strings/component_strings_no.xtb $(LOCAL_PATH)/components/strings/component_strings_pl.xtb $(LOCAL_PATH)/components/strings/component_strings_pt-BR.xtb $(LOCAL_PATH)/components/strings/component_strings_pt-PT.xtb $(LOCAL_PATH)/components/strings/component_strings_ro.xtb $(LOCAL_PATH)/components/strings/component_strings_ru.xtb $(LOCAL_PATH)/components/strings/component_strings_sk.xtb $(LOCAL_PATH)/components/strings/component_strings_sl.xtb $(LOCAL_PATH)/components/strings/component_strings_sr.xtb $(LOCAL_PATH)/components/strings/component_strings_sv.xtb $(LOCAL_PATH)/components/strings/component_strings_sw.xtb $(LOCAL_PATH)/components/strings/component_strings_ta.xtb $(LOCAL_PATH)/components/strings/component_strings_te.xtb $(LOCAL_PATH)/components/strings/component_strings_th.xtb $(LOCAL_PATH)/components/strings/component_strings_tr.xtb $(LOCAL_PATH)/components/strings/component_strings_uk.xtb $(LOCAL_PATH)/components/strings/component_strings_vi.xtb $(LOCAL_PATH)/components/strings/component_strings_zh-CN.xtb $(LOCAL_PATH)/components/strings/component_strings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from components_strings.grd ($@)"
 	$(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/strings/grit $(gyp_shared_intermediate_dir)/components/strings; python ../tools/grit/grit.py -i components_strings.grd build -f ../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/components/strings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc
 
diff --git a/components/components_strings.target.linux-mips.mk b/components/components_strings.target.linux-mips.mk
index df34c33..695ba63 100644
--- a/components/components_strings.target.linux-mips.mk
+++ b/components/components_strings.target.linux-mips.mk
@@ -19,7 +19,7 @@
 $(gyp_shared_intermediate_dir)/components/strings/grit/component_strings.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/components/strings/grit/component_strings.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/components/strings/grit/component_strings.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/components/strings/grit/component_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/components/components_strings.grd $(LOCAL_PATH)/components/autofill_strings.grdp $(LOCAL_PATH)/components/dom_distiller_strings.grdp $(LOCAL_PATH)/components/policy_strings.grdp $(LOCAL_PATH)/components/strings/component_strings_am.xtb $(LOCAL_PATH)/components/strings/component_strings_ar.xtb $(LOCAL_PATH)/components/strings/component_strings_bg.xtb $(LOCAL_PATH)/components/strings/component_strings_bn.xtb $(LOCAL_PATH)/components/strings/component_strings_ca.xtb $(LOCAL_PATH)/components/strings/component_strings_cs.xtb $(LOCAL_PATH)/components/strings/component_strings_da.xtb $(LOCAL_PATH)/components/strings/component_strings_de.xtb $(LOCAL_PATH)/components/strings/component_strings_el.xtb $(LOCAL_PATH)/components/strings/component_strings_en-GB.xtb $(LOCAL_PATH)/components/strings/component_strings_es-419.xtb $(LOCAL_PATH)/components/strings/component_strings_es.xtb $(LOCAL_PATH)/components/strings/component_strings_et.xtb $(LOCAL_PATH)/components/strings/component_strings_fa.xtb $(LOCAL_PATH)/components/strings/component_strings_fi.xtb $(LOCAL_PATH)/components/strings/component_strings_fil.xtb $(LOCAL_PATH)/components/strings/component_strings_fr.xtb $(LOCAL_PATH)/components/strings/component_strings_gu.xtb $(LOCAL_PATH)/components/strings/component_strings_hi.xtb $(LOCAL_PATH)/components/strings/component_strings_hr.xtb $(LOCAL_PATH)/components/strings/component_strings_hu.xtb $(LOCAL_PATH)/components/strings/component_strings_id.xtb $(LOCAL_PATH)/components/strings/component_strings_it.xtb $(LOCAL_PATH)/components/strings/component_strings_iw.xtb $(LOCAL_PATH)/components/strings/component_strings_ja.xtb $(LOCAL_PATH)/components/strings/component_strings_kn.xtb $(LOCAL_PATH)/components/strings/component_strings_ko.xtb $(LOCAL_PATH)/components/strings/component_strings_lt.xtb $(LOCAL_PATH)/components/strings/component_strings_lv.xtb $(LOCAL_PATH)/components/strings/component_strings_ml.xtb $(LOCAL_PATH)/components/strings/component_strings_mr.xtb $(LOCAL_PATH)/components/strings/component_strings_ms.xtb $(LOCAL_PATH)/components/strings/component_strings_nl.xtb $(LOCAL_PATH)/components/strings/component_strings_no.xtb $(LOCAL_PATH)/components/strings/component_strings_pl.xtb $(LOCAL_PATH)/components/strings/component_strings_pt-BR.xtb $(LOCAL_PATH)/components/strings/component_strings_pt-PT.xtb $(LOCAL_PATH)/components/strings/component_strings_ro.xtb $(LOCAL_PATH)/components/strings/component_strings_ru.xtb $(LOCAL_PATH)/components/strings/component_strings_sk.xtb $(LOCAL_PATH)/components/strings/component_strings_sl.xtb $(LOCAL_PATH)/components/strings/component_strings_sr.xtb $(LOCAL_PATH)/components/strings/component_strings_sv.xtb $(LOCAL_PATH)/components/strings/component_strings_sw.xtb $(LOCAL_PATH)/components/strings/component_strings_ta.xtb $(LOCAL_PATH)/components/strings/component_strings_te.xtb $(LOCAL_PATH)/components/strings/component_strings_th.xtb $(LOCAL_PATH)/components/strings/component_strings_tr.xtb $(LOCAL_PATH)/components/strings/component_strings_uk.xtb $(LOCAL_PATH)/components/strings/component_strings_vi.xtb $(LOCAL_PATH)/components/strings/component_strings_zh-CN.xtb $(LOCAL_PATH)/components/strings/component_strings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/components/strings/grit/component_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/components/components_strings.grd $(LOCAL_PATH)/components/autofill_strings.grdp $(LOCAL_PATH)/components/bookmarks_strings.grdp $(LOCAL_PATH)/components/dom_distiller_strings.grdp $(LOCAL_PATH)/components/policy_strings.grdp $(LOCAL_PATH)/components/strings/component_strings_am.xtb $(LOCAL_PATH)/components/strings/component_strings_ar.xtb $(LOCAL_PATH)/components/strings/component_strings_bg.xtb $(LOCAL_PATH)/components/strings/component_strings_bn.xtb $(LOCAL_PATH)/components/strings/component_strings_ca.xtb $(LOCAL_PATH)/components/strings/component_strings_cs.xtb $(LOCAL_PATH)/components/strings/component_strings_da.xtb $(LOCAL_PATH)/components/strings/component_strings_de.xtb $(LOCAL_PATH)/components/strings/component_strings_el.xtb $(LOCAL_PATH)/components/strings/component_strings_en-GB.xtb $(LOCAL_PATH)/components/strings/component_strings_es-419.xtb $(LOCAL_PATH)/components/strings/component_strings_es.xtb $(LOCAL_PATH)/components/strings/component_strings_et.xtb $(LOCAL_PATH)/components/strings/component_strings_fa.xtb $(LOCAL_PATH)/components/strings/component_strings_fi.xtb $(LOCAL_PATH)/components/strings/component_strings_fil.xtb $(LOCAL_PATH)/components/strings/component_strings_fr.xtb $(LOCAL_PATH)/components/strings/component_strings_gu.xtb $(LOCAL_PATH)/components/strings/component_strings_hi.xtb $(LOCAL_PATH)/components/strings/component_strings_hr.xtb $(LOCAL_PATH)/components/strings/component_strings_hu.xtb $(LOCAL_PATH)/components/strings/component_strings_id.xtb $(LOCAL_PATH)/components/strings/component_strings_it.xtb $(LOCAL_PATH)/components/strings/component_strings_iw.xtb $(LOCAL_PATH)/components/strings/component_strings_ja.xtb $(LOCAL_PATH)/components/strings/component_strings_kn.xtb $(LOCAL_PATH)/components/strings/component_strings_ko.xtb $(LOCAL_PATH)/components/strings/component_strings_lt.xtb $(LOCAL_PATH)/components/strings/component_strings_lv.xtb $(LOCAL_PATH)/components/strings/component_strings_ml.xtb $(LOCAL_PATH)/components/strings/component_strings_mr.xtb $(LOCAL_PATH)/components/strings/component_strings_ms.xtb $(LOCAL_PATH)/components/strings/component_strings_nl.xtb $(LOCAL_PATH)/components/strings/component_strings_no.xtb $(LOCAL_PATH)/components/strings/component_strings_pl.xtb $(LOCAL_PATH)/components/strings/component_strings_pt-BR.xtb $(LOCAL_PATH)/components/strings/component_strings_pt-PT.xtb $(LOCAL_PATH)/components/strings/component_strings_ro.xtb $(LOCAL_PATH)/components/strings/component_strings_ru.xtb $(LOCAL_PATH)/components/strings/component_strings_sk.xtb $(LOCAL_PATH)/components/strings/component_strings_sl.xtb $(LOCAL_PATH)/components/strings/component_strings_sr.xtb $(LOCAL_PATH)/components/strings/component_strings_sv.xtb $(LOCAL_PATH)/components/strings/component_strings_sw.xtb $(LOCAL_PATH)/components/strings/component_strings_ta.xtb $(LOCAL_PATH)/components/strings/component_strings_te.xtb $(LOCAL_PATH)/components/strings/component_strings_th.xtb $(LOCAL_PATH)/components/strings/component_strings_tr.xtb $(LOCAL_PATH)/components/strings/component_strings_uk.xtb $(LOCAL_PATH)/components/strings/component_strings_vi.xtb $(LOCAL_PATH)/components/strings/component_strings_zh-CN.xtb $(LOCAL_PATH)/components/strings/component_strings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from components_strings.grd ($@)"
 	$(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/strings/grit $(gyp_shared_intermediate_dir)/components/strings; python ../tools/grit/grit.py -i components_strings.grd build -f ../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/components/strings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc
 
diff --git a/components/components_strings.target.linux-x86.mk b/components/components_strings.target.linux-x86.mk
index df34c33..695ba63 100644
--- a/components/components_strings.target.linux-x86.mk
+++ b/components/components_strings.target.linux-x86.mk
@@ -19,7 +19,7 @@
 $(gyp_shared_intermediate_dir)/components/strings/grit/component_strings.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/components/strings/grit/component_strings.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/components/strings/grit/component_strings.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/components/strings/grit/component_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/components/components_strings.grd $(LOCAL_PATH)/components/autofill_strings.grdp $(LOCAL_PATH)/components/dom_distiller_strings.grdp $(LOCAL_PATH)/components/policy_strings.grdp $(LOCAL_PATH)/components/strings/component_strings_am.xtb $(LOCAL_PATH)/components/strings/component_strings_ar.xtb $(LOCAL_PATH)/components/strings/component_strings_bg.xtb $(LOCAL_PATH)/components/strings/component_strings_bn.xtb $(LOCAL_PATH)/components/strings/component_strings_ca.xtb $(LOCAL_PATH)/components/strings/component_strings_cs.xtb $(LOCAL_PATH)/components/strings/component_strings_da.xtb $(LOCAL_PATH)/components/strings/component_strings_de.xtb $(LOCAL_PATH)/components/strings/component_strings_el.xtb $(LOCAL_PATH)/components/strings/component_strings_en-GB.xtb $(LOCAL_PATH)/components/strings/component_strings_es-419.xtb $(LOCAL_PATH)/components/strings/component_strings_es.xtb $(LOCAL_PATH)/components/strings/component_strings_et.xtb $(LOCAL_PATH)/components/strings/component_strings_fa.xtb $(LOCAL_PATH)/components/strings/component_strings_fi.xtb $(LOCAL_PATH)/components/strings/component_strings_fil.xtb $(LOCAL_PATH)/components/strings/component_strings_fr.xtb $(LOCAL_PATH)/components/strings/component_strings_gu.xtb $(LOCAL_PATH)/components/strings/component_strings_hi.xtb $(LOCAL_PATH)/components/strings/component_strings_hr.xtb $(LOCAL_PATH)/components/strings/component_strings_hu.xtb $(LOCAL_PATH)/components/strings/component_strings_id.xtb $(LOCAL_PATH)/components/strings/component_strings_it.xtb $(LOCAL_PATH)/components/strings/component_strings_iw.xtb $(LOCAL_PATH)/components/strings/component_strings_ja.xtb $(LOCAL_PATH)/components/strings/component_strings_kn.xtb $(LOCAL_PATH)/components/strings/component_strings_ko.xtb $(LOCAL_PATH)/components/strings/component_strings_lt.xtb $(LOCAL_PATH)/components/strings/component_strings_lv.xtb $(LOCAL_PATH)/components/strings/component_strings_ml.xtb $(LOCAL_PATH)/components/strings/component_strings_mr.xtb $(LOCAL_PATH)/components/strings/component_strings_ms.xtb $(LOCAL_PATH)/components/strings/component_strings_nl.xtb $(LOCAL_PATH)/components/strings/component_strings_no.xtb $(LOCAL_PATH)/components/strings/component_strings_pl.xtb $(LOCAL_PATH)/components/strings/component_strings_pt-BR.xtb $(LOCAL_PATH)/components/strings/component_strings_pt-PT.xtb $(LOCAL_PATH)/components/strings/component_strings_ro.xtb $(LOCAL_PATH)/components/strings/component_strings_ru.xtb $(LOCAL_PATH)/components/strings/component_strings_sk.xtb $(LOCAL_PATH)/components/strings/component_strings_sl.xtb $(LOCAL_PATH)/components/strings/component_strings_sr.xtb $(LOCAL_PATH)/components/strings/component_strings_sv.xtb $(LOCAL_PATH)/components/strings/component_strings_sw.xtb $(LOCAL_PATH)/components/strings/component_strings_ta.xtb $(LOCAL_PATH)/components/strings/component_strings_te.xtb $(LOCAL_PATH)/components/strings/component_strings_th.xtb $(LOCAL_PATH)/components/strings/component_strings_tr.xtb $(LOCAL_PATH)/components/strings/component_strings_uk.xtb $(LOCAL_PATH)/components/strings/component_strings_vi.xtb $(LOCAL_PATH)/components/strings/component_strings_zh-CN.xtb $(LOCAL_PATH)/components/strings/component_strings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/components/strings/grit/component_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/components/components_strings.grd $(LOCAL_PATH)/components/autofill_strings.grdp $(LOCAL_PATH)/components/bookmarks_strings.grdp $(LOCAL_PATH)/components/dom_distiller_strings.grdp $(LOCAL_PATH)/components/policy_strings.grdp $(LOCAL_PATH)/components/strings/component_strings_am.xtb $(LOCAL_PATH)/components/strings/component_strings_ar.xtb $(LOCAL_PATH)/components/strings/component_strings_bg.xtb $(LOCAL_PATH)/components/strings/component_strings_bn.xtb $(LOCAL_PATH)/components/strings/component_strings_ca.xtb $(LOCAL_PATH)/components/strings/component_strings_cs.xtb $(LOCAL_PATH)/components/strings/component_strings_da.xtb $(LOCAL_PATH)/components/strings/component_strings_de.xtb $(LOCAL_PATH)/components/strings/component_strings_el.xtb $(LOCAL_PATH)/components/strings/component_strings_en-GB.xtb $(LOCAL_PATH)/components/strings/component_strings_es-419.xtb $(LOCAL_PATH)/components/strings/component_strings_es.xtb $(LOCAL_PATH)/components/strings/component_strings_et.xtb $(LOCAL_PATH)/components/strings/component_strings_fa.xtb $(LOCAL_PATH)/components/strings/component_strings_fi.xtb $(LOCAL_PATH)/components/strings/component_strings_fil.xtb $(LOCAL_PATH)/components/strings/component_strings_fr.xtb $(LOCAL_PATH)/components/strings/component_strings_gu.xtb $(LOCAL_PATH)/components/strings/component_strings_hi.xtb $(LOCAL_PATH)/components/strings/component_strings_hr.xtb $(LOCAL_PATH)/components/strings/component_strings_hu.xtb $(LOCAL_PATH)/components/strings/component_strings_id.xtb $(LOCAL_PATH)/components/strings/component_strings_it.xtb $(LOCAL_PATH)/components/strings/component_strings_iw.xtb $(LOCAL_PATH)/components/strings/component_strings_ja.xtb $(LOCAL_PATH)/components/strings/component_strings_kn.xtb $(LOCAL_PATH)/components/strings/component_strings_ko.xtb $(LOCAL_PATH)/components/strings/component_strings_lt.xtb $(LOCAL_PATH)/components/strings/component_strings_lv.xtb $(LOCAL_PATH)/components/strings/component_strings_ml.xtb $(LOCAL_PATH)/components/strings/component_strings_mr.xtb $(LOCAL_PATH)/components/strings/component_strings_ms.xtb $(LOCAL_PATH)/components/strings/component_strings_nl.xtb $(LOCAL_PATH)/components/strings/component_strings_no.xtb $(LOCAL_PATH)/components/strings/component_strings_pl.xtb $(LOCAL_PATH)/components/strings/component_strings_pt-BR.xtb $(LOCAL_PATH)/components/strings/component_strings_pt-PT.xtb $(LOCAL_PATH)/components/strings/component_strings_ro.xtb $(LOCAL_PATH)/components/strings/component_strings_ru.xtb $(LOCAL_PATH)/components/strings/component_strings_sk.xtb $(LOCAL_PATH)/components/strings/component_strings_sl.xtb $(LOCAL_PATH)/components/strings/component_strings_sr.xtb $(LOCAL_PATH)/components/strings/component_strings_sv.xtb $(LOCAL_PATH)/components/strings/component_strings_sw.xtb $(LOCAL_PATH)/components/strings/component_strings_ta.xtb $(LOCAL_PATH)/components/strings/component_strings_te.xtb $(LOCAL_PATH)/components/strings/component_strings_th.xtb $(LOCAL_PATH)/components/strings/component_strings_tr.xtb $(LOCAL_PATH)/components/strings/component_strings_uk.xtb $(LOCAL_PATH)/components/strings/component_strings_vi.xtb $(LOCAL_PATH)/components/strings/component_strings_zh-CN.xtb $(LOCAL_PATH)/components/strings/component_strings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from components_strings.grd ($@)"
 	$(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/strings/grit $(gyp_shared_intermediate_dir)/components/strings; python ../tools/grit/grit.py -i components_strings.grd build -f ../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/components/strings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc
 
diff --git a/components/components_strings.target.linux-x86_64.mk b/components/components_strings.target.linux-x86_64.mk
index df34c33..695ba63 100644
--- a/components/components_strings.target.linux-x86_64.mk
+++ b/components/components_strings.target.linux-x86_64.mk
@@ -19,7 +19,7 @@
 $(gyp_shared_intermediate_dir)/components/strings/grit/component_strings.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/components/strings/grit/component_strings.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/components/strings/grit/component_strings.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/components/strings/grit/component_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/components/components_strings.grd $(LOCAL_PATH)/components/autofill_strings.grdp $(LOCAL_PATH)/components/dom_distiller_strings.grdp $(LOCAL_PATH)/components/policy_strings.grdp $(LOCAL_PATH)/components/strings/component_strings_am.xtb $(LOCAL_PATH)/components/strings/component_strings_ar.xtb $(LOCAL_PATH)/components/strings/component_strings_bg.xtb $(LOCAL_PATH)/components/strings/component_strings_bn.xtb $(LOCAL_PATH)/components/strings/component_strings_ca.xtb $(LOCAL_PATH)/components/strings/component_strings_cs.xtb $(LOCAL_PATH)/components/strings/component_strings_da.xtb $(LOCAL_PATH)/components/strings/component_strings_de.xtb $(LOCAL_PATH)/components/strings/component_strings_el.xtb $(LOCAL_PATH)/components/strings/component_strings_en-GB.xtb $(LOCAL_PATH)/components/strings/component_strings_es-419.xtb $(LOCAL_PATH)/components/strings/component_strings_es.xtb $(LOCAL_PATH)/components/strings/component_strings_et.xtb $(LOCAL_PATH)/components/strings/component_strings_fa.xtb $(LOCAL_PATH)/components/strings/component_strings_fi.xtb $(LOCAL_PATH)/components/strings/component_strings_fil.xtb $(LOCAL_PATH)/components/strings/component_strings_fr.xtb $(LOCAL_PATH)/components/strings/component_strings_gu.xtb $(LOCAL_PATH)/components/strings/component_strings_hi.xtb $(LOCAL_PATH)/components/strings/component_strings_hr.xtb $(LOCAL_PATH)/components/strings/component_strings_hu.xtb $(LOCAL_PATH)/components/strings/component_strings_id.xtb $(LOCAL_PATH)/components/strings/component_strings_it.xtb $(LOCAL_PATH)/components/strings/component_strings_iw.xtb $(LOCAL_PATH)/components/strings/component_strings_ja.xtb $(LOCAL_PATH)/components/strings/component_strings_kn.xtb $(LOCAL_PATH)/components/strings/component_strings_ko.xtb $(LOCAL_PATH)/components/strings/component_strings_lt.xtb $(LOCAL_PATH)/components/strings/component_strings_lv.xtb $(LOCAL_PATH)/components/strings/component_strings_ml.xtb $(LOCAL_PATH)/components/strings/component_strings_mr.xtb $(LOCAL_PATH)/components/strings/component_strings_ms.xtb $(LOCAL_PATH)/components/strings/component_strings_nl.xtb $(LOCAL_PATH)/components/strings/component_strings_no.xtb $(LOCAL_PATH)/components/strings/component_strings_pl.xtb $(LOCAL_PATH)/components/strings/component_strings_pt-BR.xtb $(LOCAL_PATH)/components/strings/component_strings_pt-PT.xtb $(LOCAL_PATH)/components/strings/component_strings_ro.xtb $(LOCAL_PATH)/components/strings/component_strings_ru.xtb $(LOCAL_PATH)/components/strings/component_strings_sk.xtb $(LOCAL_PATH)/components/strings/component_strings_sl.xtb $(LOCAL_PATH)/components/strings/component_strings_sr.xtb $(LOCAL_PATH)/components/strings/component_strings_sv.xtb $(LOCAL_PATH)/components/strings/component_strings_sw.xtb $(LOCAL_PATH)/components/strings/component_strings_ta.xtb $(LOCAL_PATH)/components/strings/component_strings_te.xtb $(LOCAL_PATH)/components/strings/component_strings_th.xtb $(LOCAL_PATH)/components/strings/component_strings_tr.xtb $(LOCAL_PATH)/components/strings/component_strings_uk.xtb $(LOCAL_PATH)/components/strings/component_strings_vi.xtb $(LOCAL_PATH)/components/strings/component_strings_zh-CN.xtb $(LOCAL_PATH)/components/strings/component_strings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/components/strings/grit/component_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/components/components_strings.grd $(LOCAL_PATH)/components/autofill_strings.grdp $(LOCAL_PATH)/components/bookmarks_strings.grdp $(LOCAL_PATH)/components/dom_distiller_strings.grdp $(LOCAL_PATH)/components/policy_strings.grdp $(LOCAL_PATH)/components/strings/component_strings_am.xtb $(LOCAL_PATH)/components/strings/component_strings_ar.xtb $(LOCAL_PATH)/components/strings/component_strings_bg.xtb $(LOCAL_PATH)/components/strings/component_strings_bn.xtb $(LOCAL_PATH)/components/strings/component_strings_ca.xtb $(LOCAL_PATH)/components/strings/component_strings_cs.xtb $(LOCAL_PATH)/components/strings/component_strings_da.xtb $(LOCAL_PATH)/components/strings/component_strings_de.xtb $(LOCAL_PATH)/components/strings/component_strings_el.xtb $(LOCAL_PATH)/components/strings/component_strings_en-GB.xtb $(LOCAL_PATH)/components/strings/component_strings_es-419.xtb $(LOCAL_PATH)/components/strings/component_strings_es.xtb $(LOCAL_PATH)/components/strings/component_strings_et.xtb $(LOCAL_PATH)/components/strings/component_strings_fa.xtb $(LOCAL_PATH)/components/strings/component_strings_fi.xtb $(LOCAL_PATH)/components/strings/component_strings_fil.xtb $(LOCAL_PATH)/components/strings/component_strings_fr.xtb $(LOCAL_PATH)/components/strings/component_strings_gu.xtb $(LOCAL_PATH)/components/strings/component_strings_hi.xtb $(LOCAL_PATH)/components/strings/component_strings_hr.xtb $(LOCAL_PATH)/components/strings/component_strings_hu.xtb $(LOCAL_PATH)/components/strings/component_strings_id.xtb $(LOCAL_PATH)/components/strings/component_strings_it.xtb $(LOCAL_PATH)/components/strings/component_strings_iw.xtb $(LOCAL_PATH)/components/strings/component_strings_ja.xtb $(LOCAL_PATH)/components/strings/component_strings_kn.xtb $(LOCAL_PATH)/components/strings/component_strings_ko.xtb $(LOCAL_PATH)/components/strings/component_strings_lt.xtb $(LOCAL_PATH)/components/strings/component_strings_lv.xtb $(LOCAL_PATH)/components/strings/component_strings_ml.xtb $(LOCAL_PATH)/components/strings/component_strings_mr.xtb $(LOCAL_PATH)/components/strings/component_strings_ms.xtb $(LOCAL_PATH)/components/strings/component_strings_nl.xtb $(LOCAL_PATH)/components/strings/component_strings_no.xtb $(LOCAL_PATH)/components/strings/component_strings_pl.xtb $(LOCAL_PATH)/components/strings/component_strings_pt-BR.xtb $(LOCAL_PATH)/components/strings/component_strings_pt-PT.xtb $(LOCAL_PATH)/components/strings/component_strings_ro.xtb $(LOCAL_PATH)/components/strings/component_strings_ru.xtb $(LOCAL_PATH)/components/strings/component_strings_sk.xtb $(LOCAL_PATH)/components/strings/component_strings_sl.xtb $(LOCAL_PATH)/components/strings/component_strings_sr.xtb $(LOCAL_PATH)/components/strings/component_strings_sv.xtb $(LOCAL_PATH)/components/strings/component_strings_sw.xtb $(LOCAL_PATH)/components/strings/component_strings_ta.xtb $(LOCAL_PATH)/components/strings/component_strings_te.xtb $(LOCAL_PATH)/components/strings/component_strings_th.xtb $(LOCAL_PATH)/components/strings/component_strings_tr.xtb $(LOCAL_PATH)/components/strings/component_strings_uk.xtb $(LOCAL_PATH)/components/strings/component_strings_vi.xtb $(LOCAL_PATH)/components/strings/component_strings_zh-CN.xtb $(LOCAL_PATH)/components/strings/component_strings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from components_strings.grd ($@)"
 	$(hide)cd $(gyp_local_path)/components; mkdir -p $(gyp_shared_intermediate_dir)/components/strings/grit $(gyp_shared_intermediate_dir)/components/strings; python ../tools/grit/grit.py -i components_strings.grd build -f ../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/components/strings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc
 
diff --git a/components/components_tests.gyp b/components/components_tests.gyp
index fa07896..24099a5 100644
--- a/components/components_tests.gyp
+++ b/components/components_tests.gyp
@@ -64,7 +64,8 @@
             'autofill/core/common/form_field_data_unittest.cc',
             'autofill/core/common/password_form_fill_data_unittest.cc',
             'autofill/core/common/save_password_progress_logger_unittest.cc',
-            'cloud_devices/printer_description_unittest.cc',
+            'cloud_devices/common/cloud_devices_urls_unittest.cc',
+            'cloud_devices/common/printer_description_unittest.cc',
             'data_reduction_proxy/browser/data_reduction_proxy_metrics_unittest.cc',
             'data_reduction_proxy/browser/data_reduction_proxy_settings_unittest.cc',
             'data_reduction_proxy/browser/http_auth_handler_data_reduction_proxy_unittest.cc',
@@ -78,6 +79,7 @@
             'dom_distiller/core/task_tracker_unittest.cc',
             'dom_distiller/core/url_utils_unittest.cc',
             'dom_distiller/core/viewer_unittest.cc',
+            'domain_reliability/config_unittest.cc',
             'domain_reliability/context_unittest.cc',
             'domain_reliability/dispatcher_unittest.cc',
             'domain_reliability/monitor_unittest.cc',
@@ -110,6 +112,8 @@
             'precache/core/precache_database_unittest.cc',
             'precache/core/precache_fetcher_unittest.cc',
             'precache/core/precache_url_table_unittest.cc',
+            'query_parser/query_parser_unittest.cc',
+            'query_parser/snippet_unittest.cc',
             'rappor/bloom_filter_unittest.cc',
             'rappor/byte_vector_utils_unittest.cc',
             'rappor/log_uploader_unittest.cc',
@@ -129,6 +133,7 @@
             'storage_monitor/storage_monitor_mac_unittest.mm',
             'storage_monitor/storage_monitor_unittest.cc',
             'storage_monitor/storage_monitor_win_unittest.cc',
+            'sync_driver/generic_change_processor_unittest.cc',
             'sync_driver/model_association_manager_unittest.cc',
             'sync_driver/sync_prefs_unittest.cc',
             'sync_driver/system_encryptor_unittest.cc',
@@ -186,7 +191,7 @@
             '../third_party/libphonenumber/libphonenumber.gyp:libphonenumber',
 
             # Dependencies of cloud_devices
-            'components.gyp:cloud_devices',
+            'components.gyp:cloud_devices_common',
 
             # Dependencies of data_reduction_proxy
             'components.gyp:data_reduction_proxy_browser',
@@ -221,6 +226,9 @@
             'components.gyp:password_manager_core_browser',
             'components.gyp:precache_core',
 
+            # Dependencies of query_parser
+            'components.gyp:query_parser',
+
             # Dependencies of rappor
             'components.gyp:rappor',
 
@@ -245,6 +253,7 @@
               'sources': [
                 'autofill/content/renderer/renderer_save_password_progress_logger_unittest.cc',
                 'dom_distiller/content/dom_distiller_viewer_source_unittest.cc',
+                'usb_service/usb_context_unittest.cc',
               ],
               'dependencies': [
                 # Dependencies of autofill
@@ -278,6 +287,10 @@
                 # Dependencies of url_matcher.
                 'components.gyp:url_matcher',
 
+                # Dependencies of usb_service tests.
+                'components.gyp:usb_service',
+                '../third_party/libusb/libusb.gyp:libusb',
+
                 # Dependencies of visitedlink
                 'components.gyp:visitedlink_browser',
                 'components.gyp:visitedlink_renderer',
@@ -345,6 +358,16 @@
                 'nacl.gyp:nacl_common',
               ],
             }],
+            ['disable_nacl==0 and OS=="linux"', {
+              'sources': [
+                'nacl/loader/nonsfi/nonsfi_sandbox_unittest.cc',
+                'nacl/loader/nonsfi/nonsfi_sandbox_sigsys_unittest.cc',
+              ],
+              'dependencies': [
+                'nacl.gyp:nacl_loader',
+                '../sandbox/sandbox.gyp:sandbox_linux_test_utils',
+              ],
+            }],
             ['OS == "mac"', {
               'link_settings': {
                 'libraries': [
@@ -363,13 +386,16 @@
                 'storage_monitor/media_storage_util_unittest.cc',
                 'storage_monitor/storage_info_unittest.cc',
                 'storage_monitor/storage_monitor_unittest.cc',
+                'usb_service/usb_context_unittest.cc',
                 'web_modal/web_contents_modal_dialog_manager_unittest.cc',
               ],
               'dependencies!': [
                 'components.gyp:storage_monitor',
                 'components.gyp:storage_monitor_test_support',
+                'components.gyp:usb_service',
                 'components.gyp:web_modal',
                 'components.gyp:web_modal_test_support',
+                '../third_party/libusb/libusb.gyp:libusb',
               ],
             }],
             ['OS == "android" and gtest_target_type == "shared_library"', {
@@ -537,7 +563,6 @@
               ],
               'variables': {
                 'test_suite_name': 'components_unittests',
-                'input_shlib_path': '<(SHARED_LIB_DIR)/<(SHARED_LIB_PREFIX)components_unittests<(SHARED_LIB_SUFFIX)',
               },
               'includes': [ '../build/apk_test.gypi' ],
             },
diff --git a/components/cronet/android/java/src/org/chromium/net/UrlRequest.java b/components/cronet/android/java/src/org/chromium/net/UrlRequest.java
index 73592e3..3b736cb 100644
--- a/components/cronet/android/java/src/org/chromium/net/UrlRequest.java
+++ b/components/cronet/android/java/src/org/chromium/net/UrlRequest.java
@@ -23,7 +23,7 @@
 /**
  * Network request using the native http stack implementation.
  */
-@JNINamespace("net")
+@JNINamespace("cronet")
 public class UrlRequest {
     private static final class ContextLock {
     }
diff --git a/components/cronet/android/java/src/org/chromium/net/UrlRequestContext.java b/components/cronet/android/java/src/org/chromium/net/UrlRequestContext.java
index 102b5a1..f8abfb8 100644
--- a/components/cronet/android/java/src/org/chromium/net/UrlRequestContext.java
+++ b/components/cronet/android/java/src/org/chromium/net/UrlRequestContext.java
@@ -14,7 +14,7 @@
 /**
  * Provides context for the native HTTP operations.
  */
-@JNINamespace("net")
+@JNINamespace("cronet")
 public class UrlRequestContext {
     protected static final int LOG_NONE = 0;
     protected static final int LOG_DEBUG = 1;
diff --git a/components/cronet/android/org_chromium_net_UrlRequest.cc b/components/cronet/android/org_chromium_net_UrlRequest.cc
index 1373899..7e3d35f 100644
--- a/components/cronet/android/org_chromium_net_UrlRequest.cc
+++ b/components/cronet/android/org_chromium_net_UrlRequest.cc
@@ -12,7 +12,7 @@
 #include "net/base/net_errors.h"
 #include "net/base/request_priority.h"
 
-namespace net {
+namespace cronet {
 namespace {
 
 net::RequestPriority ConvertRequestPriority(jint request_priority) {
@@ -59,12 +59,12 @@
 
   virtual void OnAppendChunkCompleted(URLRequestPeer* request) OVERRIDE {
     JNIEnv* env = base::android::AttachCurrentThread();
-    net::Java_UrlRequest_onAppendChunkCompleted(env, owner_);
+    cronet::Java_UrlRequest_onAppendChunkCompleted(env, owner_);
   }
 
   virtual void OnResponseStarted(URLRequestPeer* request) OVERRIDE {
     JNIEnv* env = base::android::AttachCurrentThread();
-    net::Java_UrlRequest_onResponseStarted(env, owner_);
+    cronet::Java_UrlRequest_onResponseStarted(env, owner_);
   }
 
   virtual void OnBytesRead(URLRequestPeer* request) OVERRIDE {
@@ -72,14 +72,14 @@
     if (bytes_read != 0) {
       JNIEnv* env = base::android::AttachCurrentThread();
       jobject bytebuf = env->NewDirectByteBuffer(request->Data(), bytes_read);
-      net::Java_UrlRequest_onBytesRead(env, owner_, bytebuf);
+      cronet::Java_UrlRequest_onBytesRead(env, owner_, bytebuf);
       env->DeleteLocalRef(bytebuf);
     }
   }
 
   virtual void OnRequestFinished(URLRequestPeer* request) OVERRIDE {
     JNIEnv* env = base::android::AttachCurrentThread();
-    net::Java_UrlRequest_finish(env, owner_);
+    cronet::Java_UrlRequest_finish(env, owner_);
   }
 
  protected:
@@ -298,4 +298,4 @@
   return request->content_length();
 }
 
-}  // namespace net
+}  // namespace cronet
diff --git a/components/cronet/android/org_chromium_net_UrlRequest.h b/components/cronet/android/org_chromium_net_UrlRequest.h
index 25725a6..9a8f3d9 100644
--- a/components/cronet/android/org_chromium_net_UrlRequest.h
+++ b/components/cronet/android/org_chromium_net_UrlRequest.h
@@ -7,7 +7,7 @@
 
 #include <jni.h>
 
-namespace net {
+namespace cronet {
 
 // Define request priority values like REQUEST_PRIORITY_IDLE in a
 // way that ensures they're always the same than their Java counterpart.
@@ -27,6 +27,6 @@
 
 bool UrlRequestRegisterJni(JNIEnv* env);
 
-}  // namespace net
+}  // namespace cronet
 
 #endif  // COMPONENTS_CRONET_ANDROID_URLREQUEST_H_
diff --git a/components/cronet/android/org_chromium_net_UrlRequestContext.cc b/components/cronet/android/org_chromium_net_UrlRequestContext.cc
index 18f5ad0..1cfc989 100644
--- a/components/cronet/android/org_chromium_net_UrlRequestContext.cc
+++ b/components/cronet/android/org_chromium_net_UrlRequestContext.cc
@@ -23,25 +23,26 @@
 const char kVersion[] = CHROMIUM_VERSION "/" CHROMIUM_NET_VERSION;
 
 const base::android::RegistrationMethod kCronetRegisteredMethods[] = {
-  {"BaseAndroid", base::android::RegisterJni},
-  {"NetAndroid", net::android::RegisterJni},
-  {"UrlRequest", net::UrlRequestRegisterJni},
-  {"UrlRequestContext", net::RegisterNativesImpl},
+    {"BaseAndroid", base::android::RegisterJni},
+    {"NetAndroid", net::android::RegisterJni},
+    {"UrlRequest", cronet::UrlRequestRegisterJni},
+    {"UrlRequestContext", cronet::RegisterNativesImpl},
 };
 
 base::AtExitManager* g_at_exit_manager = NULL;
 
 // Delegate of URLRequestContextPeer that delivers callbacks to the Java layer.
 class JniURLRequestContextPeerDelegate
-    : public URLRequestContextPeer::URLRequestContextPeerDelegate {
+    : public cronet::URLRequestContextPeer::URLRequestContextPeerDelegate {
  public:
   JniURLRequestContextPeerDelegate(JNIEnv* env, jobject owner)
       : owner_(env->NewGlobalRef(owner)) {
   }
 
-  virtual void OnContextInitialized(URLRequestContextPeer* context) OVERRIDE {
+  virtual void OnContextInitialized(
+      cronet::URLRequestContextPeer* context) OVERRIDE {
     JNIEnv* env = base::android::AttachCurrentThread();
-    net::Java_UrlRequestContext_initNetworkThread(env, owner_);
+    cronet::Java_UrlRequestContext_initNetworkThread(env, owner_);
     // TODO(dplotnikov): figure out if we need to detach from the thread.
     // The documentation says we should detach just before the thread exits.
   }
@@ -86,7 +87,7 @@
   }
 }
 
-namespace net {
+namespace cronet {
 
 static jstring GetVersion(JNIEnv* env, jclass unused) {
   return env->NewStringUTF(kVersion);
@@ -165,4 +166,4 @@
   peer->StopNetLog();
 }
 
-}  // namespace net
+}  // namespace cronet
diff --git a/components/cronet/android/url_request_context_peer.cc b/components/cronet/android/url_request_context_peer.cc
index d229dc3..a66edb9 100644
--- a/components/cronet/android/url_request_context_peer.cc
+++ b/components/cronet/android/url_request_context_peer.cc
@@ -15,6 +15,7 @@
 #include "net/proxy/proxy_service.h"
 #include "net/ssl/ssl_config_service_defaults.h"
 #include "net/url_request/static_http_user_agent_settings.h"
+#include "net/url_request/url_request_context_builder.h"
 #include "net/url_request/url_request_context_storage.h"
 #include "net/url_request/url_request_job_factory_impl.h"
 
@@ -104,23 +105,10 @@
   DISALLOW_COPY_AND_ASSIGN(BasicNetworkDelegate);
 };
 
-class BasicURLRequestContext : public net::URLRequestContext {
- public:
-  BasicURLRequestContext() : storage_(this) {}
-
-  net::URLRequestContextStorage* storage() { return &storage_; }
-
- protected:
-  virtual ~BasicURLRequestContext() {}
-
- private:
-  net::URLRequestContextStorage storage_;
-
-  DISALLOW_COPY_AND_ASSIGN(BasicURLRequestContext);
-};
-
 }  // namespace
 
+namespace cronet {
+
 URLRequestContextPeer::URLRequestContextPeer(
     URLRequestContextPeerDelegate* delegate,
     std::string user_agent,
@@ -144,63 +132,20 @@
 }
 
 void URLRequestContextPeer::InitializeURLRequestContext() {
-  BasicURLRequestContext* context = new BasicURLRequestContext;
-  net::URLRequestContextStorage* storage = context->storage();
+  net::URLRequestContextBuilder context_builder;
+  context_builder.set_network_delegate(new BasicNetworkDelegate());
+  context_builder.set_proxy_config_service(
+      new net::ProxyConfigServiceFixed(net::ProxyConfig()));
+  context_builder.DisableHttpCache();
 
-  net::NetworkDelegate* network_delegate = new BasicNetworkDelegate;
-  storage->set_network_delegate(network_delegate);
-
-  storage->set_host_resolver(net::HostResolver::CreateDefaultResolver(NULL));
-  storage->set_net_log(new net::NetLog);
-
-  net::ProxyConfigService* proxy_config_service =
-      new net::ProxyConfigServiceFixed(net::ProxyConfig());
-  storage->set_proxy_service(net::ProxyService::CreateUsingSystemProxyResolver(
-      proxy_config_service,
-      4,  // TODO(willchan): Find a better constant somewhere.
-      context->net_log()));
-  storage->set_ssl_config_service(new net::SSLConfigServiceDefaults);
-  storage->set_http_auth_handler_factory(
-      net::HttpAuthHandlerRegistryFactory::CreateDefault(
-          context->host_resolver()));
-  storage->set_transport_security_state(new net::TransportSecurityState());
-  storage->set_http_server_properties(scoped_ptr<net::HttpServerProperties>(
-      new net::HttpServerPropertiesImpl()));
-  storage->set_cert_verifier(net::CertVerifier::CreateDefault());
-
-  net::HttpNetworkSession::Params network_session_params;
-  network_session_params.host_resolver = context->host_resolver();
-  network_session_params.cert_verifier = context->cert_verifier();
-  network_session_params.transport_security_state =
-      context->transport_security_state();
-  network_session_params.proxy_service = context->proxy_service();
-  network_session_params.ssl_config_service = context->ssl_config_service();
-  network_session_params.http_auth_handler_factory =
-      context->http_auth_handler_factory();
-  network_session_params.network_delegate = network_delegate;
-  network_session_params.http_server_properties =
-      context->http_server_properties();
-  network_session_params.net_log = context->net_log();
-
-  scoped_refptr<net::HttpNetworkSession> network_session(
-      new net::HttpNetworkSession(network_session_params));
-
-  net::HttpTransactionFactory* http_transaction_factory =
-      new net::HttpNetworkLayer(network_session.get());
-  storage->set_http_transaction_factory(http_transaction_factory);
-
-  net::URLRequestJobFactoryImpl* job_factory =
-      new net::URLRequestJobFactoryImpl;
-  storage->set_job_factory(job_factory);
+  context_.reset(context_builder.Build());
 
   if (VLOG_IS_ON(2)) {
     net_log_observer_.reset(new NetLogObserver(logging_level_));
-    context->net_log()->AddThreadSafeObserver(net_log_observer_.get(),
-                                              net::NetLog::LOG_ALL_BUT_BYTES);
+    context_->net_log()->AddThreadSafeObserver(net_log_observer_.get(),
+                                               net::NetLog::LOG_ALL_BUT_BYTES);
   }
 
-  context_.reset(context);
-
   net::HttpStreamFactory::EnableNpnSpdy31();
 
   delegate_->OnContextInitialized(this);
@@ -259,3 +204,5 @@
             << ", phase=" << entry.phase();
   }
 }
+
+}  // namespace cronet
diff --git a/components/cronet/android/url_request_context_peer.h b/components/cronet/android/url_request_context_peer.h
index 3e9406c..256a649 100644
--- a/components/cronet/android/url_request_context_peer.h
+++ b/components/cronet/android/url_request_context_peer.h
@@ -21,6 +21,8 @@
 class NetLogLogger;
 }  // namespace net
 
+namespace cronet {
+
 // Implementation of the Chromium NetLog observer interface.
 class NetLogObserver : public net::NetLog::ThreadSafeObserver {
  public:
@@ -89,4 +91,6 @@
   DISALLOW_COPY_AND_ASSIGN(URLRequestContextPeer);
 };
 
+}  // namespace cronet
+
 #endif  // COMPONENTS_CRONET_ANDROID_URL_REQUEST_CONTEXT_PEER_H_
diff --git a/components/cronet/android/url_request_peer.cc b/components/cronet/android/url_request_peer.cc
index b46ed60..a3b4aa7 100644
--- a/components/cronet/android/url_request_peer.cc
+++ b/components/cronet/android/url_request_peer.cc
@@ -8,6 +8,8 @@
 #include "net/base/load_flags.h"
 #include "net/http/http_status_code.h"
 
+namespace cronet {
+
 static const size_t kBufferSizeIncrement = 8192;
 
 // Fragment automatically inserted in the User-Agent header to indicate
@@ -61,8 +63,8 @@
 
   context_->GetNetworkTaskRunner()->PostTask(
       FROM_HERE,
-      base::Bind(&URLRequestPeer::OnAppendChunkWrapper,
-                 this,
+      base::Bind(&URLRequestPeer::OnAppendChunk,
+                 base::Unretained(this),
                  bytes,
                  bytes_len,
                  is_last_chunk));
@@ -71,15 +73,8 @@
 void URLRequestPeer::Start() {
   context_->GetNetworkTaskRunner()->PostTask(
       FROM_HERE,
-      base::Bind(&URLRequestPeer::OnInitiateConnectionWrapper, this));
-}
-
-// static
-void URLRequestPeer::OnAppendChunkWrapper(URLRequestPeer* self,
-                                          const char* bytes,
-                                          int bytes_len,
-                                          bool is_last_chunk) {
-  self->OnAppendChunk(bytes, bytes_len, is_last_chunk);
+      base::Bind(&URLRequestPeer::OnInitiateConnection,
+                 base::Unretained(this)));
 }
 
 void URLRequestPeer::OnAppendChunk(const char* bytes,
@@ -91,11 +86,6 @@
   }
 }
 
-// static
-void URLRequestPeer::OnInitiateConnectionWrapper(URLRequestPeer* self) {
-  self->OnInitiateConnection();
-}
-
 void URLRequestPeer::OnInitiateConnection() {
   if (canceled_) {
     return;
@@ -146,12 +136,8 @@
   canceled_ = true;
 
   context_->GetNetworkTaskRunner()->PostTask(
-      FROM_HERE, base::Bind(&URLRequestPeer::OnCancelRequestWrapper, this));
-}
-
-// static
-void URLRequestPeer::OnCancelRequestWrapper(URLRequestPeer* self) {
-  self->OnCancelRequest();
+      FROM_HERE,
+      base::Bind(&URLRequestPeer::OnCancelRequest, base::Unretained(this)));
 }
 
 void URLRequestPeer::OnCancelRequest() {
@@ -294,3 +280,5 @@
 unsigned char* URLRequestPeer::Data() const {
   return reinterpret_cast<unsigned char*>(read_buffer_->StartOfBuffer());
 }
+
+}  // namespace cronet
diff --git a/components/cronet/android/url_request_peer.h b/components/cronet/android/url_request_peer.h
index 95ac2a3..ddd5e23 100644
--- a/components/cronet/android/url_request_peer.h
+++ b/components/cronet/android/url_request_peer.h
@@ -14,6 +14,8 @@
 #include "net/http/http_request_headers.h"
 #include "net/url_request/url_request.h"
 
+namespace cronet {
+
 // An adapter from the JNI |UrlRequest| object and the Chromium |URLRequest|
 // object.
 class URLRequestPeer : public net::URLRequest::Delegate {
@@ -112,13 +114,7 @@
   int64 expected_size_;
   bool streaming_upload_;
 
-  static void OnInitiateConnectionWrapper(URLRequestPeer* self);
-  static void OnCancelRequestWrapper(URLRequestPeer* self);
   static void OnDestroyRequest(URLRequestPeer* self);
-  static void OnAppendChunkWrapper(URLRequestPeer* self,
-                                   const char* bytes,
-                                   int bytes_len,
-                                   bool is_last_chunk);
 
   void OnInitiateConnection();
   void OnCancelRequest();
@@ -134,4 +130,6 @@
   DISALLOW_COPY_AND_ASSIGN(URLRequestPeer);
 };
 
+}  // namespace cronet
+
 #endif  // COMPONENTS_CRONET_ANDROID_URL_REQUEST_PEER_H_
diff --git a/components/dom_distiller.gypi b/components/dom_distiller.gypi
index 271dd79..fb59ef0 100644
--- a/components/dom_distiller.gypi
+++ b/components/dom_distiller.gypi
@@ -55,6 +55,8 @@
             'dom_distiller/core/article_distillation_update.h',
             'dom_distiller/core/article_entry.cc',
             'dom_distiller/core/article_entry.h',
+            'dom_distiller/core/distilled_content_store.cc',
+            'dom_distiller/core/distilled_content_store.h',
             'dom_distiller/core/distiller.cc',
             'dom_distiller/core/distiller.h',
             'dom_distiller/core/distiller_page.cc',
diff --git a/components/dom_distiller/content/distiller_page_web_contents.cc b/components/dom_distiller/content/distiller_page_web_contents.cc
index 861c776..81bc2e7 100644
--- a/components/dom_distiller/content/distiller_page_web_contents.cc
+++ b/components/dom_distiller/content/distiller_page_web_contents.cc
@@ -27,41 +27,36 @@
 
 DistillerPageWebContents::DistillerPageWebContents(
     content::BrowserContext* browser_context)
-    : browser_context_(browser_context) {}
+    : state_(IDLE), browser_context_(browser_context) {}
 
 DistillerPageWebContents::~DistillerPageWebContents() {}
 
-void DistillerPageWebContents::InitImpl() {
+void DistillerPageWebContents::DistillPageImpl(const GURL& gurl,
+                                               const std::string& script) {
   DCHECK(browser_context_);
+  DCHECK(state_ == IDLE);
+  state_ = LOADING_PAGE;
+  script_ = script;
+
+  // Create new WebContents to use for distilling the content.
   content::WebContents::CreateParams create_params(browser_context_);
   create_params.initially_hidden = true;
   web_contents_.reset(content::WebContents::Create(create_params));
-}
-
-void DistillerPageWebContents::LoadURLImpl(const GURL& gurl) {
   DCHECK(web_contents_.get());
+
+  // Start observing WebContents and load the requested URL.
   content::WebContentsObserver::Observe(web_contents_.get());
   content::NavigationController::LoadURLParams params(gurl);
   web_contents_->GetController().LoadURLWithParams(params);
 }
 
-void DistillerPageWebContents::ExecuteJavaScriptImpl(
-    const std::string& script) {
-  content::RenderFrameHost* frame = web_contents_->GetMainFrame();
-  DCHECK(frame);
-  frame->ExecuteJavaScript(base::UTF8ToUTF16(script),
-                           base::Bind(&DistillerPage::OnExecuteJavaScriptDone,
-                                      base::Unretained(this),
-                                      web_contents_->GetLastCommittedURL()));
-}
-
 void DistillerPageWebContents::DocumentLoadedInFrame(
     int64 frame_id,
     RenderViewHost* render_view_host) {
   if (frame_id == web_contents_->GetMainFrame()->GetRoutingID()) {
     content::WebContentsObserver::Observe(NULL);
     web_contents_->Stop();
-    OnLoadURLDone();
+    ExecuteJavaScript();
   }
 }
 
@@ -74,8 +69,32 @@
     RenderViewHost* render_view_host) {
   if (is_main_frame) {
     content::WebContentsObserver::Observe(NULL);
-    OnLoadURLFailed();
+    DCHECK(state_ == LOADING_PAGE || state_ == EXECUTING_JAVASCRIPT);
+    state_ = PAGELOAD_FAILED;
+    scoped_ptr<base::Value> empty(base::Value::CreateNullValue());
+    OnWebContentsDistillationDone(GURL(), empty.get());
   }
 }
 
+void DistillerPageWebContents::ExecuteJavaScript() {
+  content::RenderFrameHost* frame = web_contents_->GetMainFrame();
+  DCHECK(frame);
+  DCHECK_EQ(LOADING_PAGE, state_);
+  state_ = EXECUTING_JAVASCRIPT;
+  DVLOG(1) << "Beginning distillation";
+  frame->ExecuteJavaScript(
+      base::UTF8ToUTF16(script_),
+      base::Bind(&DistillerPageWebContents::OnWebContentsDistillationDone,
+                 base::Unretained(this),
+                 web_contents_->GetLastCommittedURL()));
+}
+
+void DistillerPageWebContents::OnWebContentsDistillationDone(
+    const GURL& page_url,
+    const base::Value* value) {
+  DCHECK(state_ == PAGELOAD_FAILED || state_ == EXECUTING_JAVASCRIPT);
+  state_ = IDLE;
+  DistillerPage::OnDistillationDone(page_url, value);
+}
+
 }  // namespace dom_distiller
diff --git a/components/dom_distiller/content/distiller_page_web_contents.h b/components/dom_distiller/content/distiller_page_web_contents.h
index cefbec3..3d24c9c 100644
--- a/components/dom_distiller/content/distiller_page_web_contents.h
+++ b/components/dom_distiller/content/distiller_page_web_contents.h
@@ -54,11 +54,36 @@
                            RenderViewHost* render_view_host) OVERRIDE;
 
  protected:
-  virtual void InitImpl() OVERRIDE;
-  virtual void LoadURLImpl(const GURL& gurl) OVERRIDE;
-  virtual void ExecuteJavaScriptImpl(const std::string& script) OVERRIDE;
+  virtual void DistillPageImpl(const GURL& gurl,
+                               const std::string& script) OVERRIDE;
 
  private:
+  enum State {
+    // The page distiller is idle.
+    IDLE,
+    // A page is currently loading.
+    LOADING_PAGE,
+    // There was an error processing the page.
+    PAGELOAD_FAILED,
+    // JavaScript is executing within the context of the page. When the
+    // JavaScript completes, the state will be returned to |IDLE|.
+    EXECUTING_JAVASCRIPT
+  };
+
+  // Injects and executes JavaScript in the context of a loaded page. This
+  // must only be called after the page has successfully loaded.
+  void ExecuteJavaScript();
+
+  // Called when the distillation is done or if the page load failed.
+  void OnWebContentsDistillationDone(const GURL& page_url,
+                                     const base::Value* value);
+
+  // The current state of the |DistillerPage|, initially |IDLE|.
+  State state_;
+
+  // The JavaScript to inject to extract content.
+  std::string script_;
+
   scoped_ptr<content::WebContents> web_contents_;
   content::BrowserContext* browser_context_;
   DISALLOW_COPY_AND_ASSIGN(DistillerPageWebContents);
diff --git a/components/dom_distiller/content/distiller_page_web_contents_browsertest.cc b/components/dom_distiller/content/distiller_page_web_contents_browsertest.cc
index c7faf1d..3d20a9d 100644
--- a/components/dom_distiller/content/distiller_page_web_contents_browsertest.cc
+++ b/components/dom_distiller/content/distiller_page_web_contents_browsertest.cc
@@ -40,9 +40,8 @@
                    this));
   }
 
-  void OnPageDistillationFinished(
-    scoped_ptr<DistilledPageInfo> distilled_page,
-    bool distillation_successful) {
+  void OnPageDistillationFinished(scoped_ptr<DistilledPageInfo> distilled_page,
+                                  bool distillation_successful) {
     page_info_ = distilled_page.Pass();
     quit_closure_.Run();
   }
@@ -57,13 +56,13 @@
         pak_file, ui::SCALE_FACTOR_NONE);
   }
 
-   void SetUpTestServer() {
-     base::FilePath path;
-     PathService::Get(base::DIR_SOURCE_ROOT, &path);
-     path = path.AppendASCII("components/test/data/dom_distiller");
-     embedded_test_server()->ServeFilesFromDirectory(path);
-     ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
-   }
+  void SetUpTestServer() {
+    base::FilePath path;
+    PathService::Get(base::DIR_SOURCE_ROOT, &path);
+    path = path.AppendASCII("components/test/data/dom_distiller");
+    embedded_test_server()->ServeFilesFromDirectory(path);
+    ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
+  }
 
  protected:
   DistillerPageWebContents* distiller_page_;
@@ -75,7 +74,6 @@
   DistillerPageWebContents distiller_page(
       shell()->web_contents()->GetBrowserContext());
   distiller_page_ = &distiller_page;
-  distiller_page.Init();
 
   base::RunLoop run_loop;
   DistillPage(run_loop.QuitClosure(), "/simple_article.html");
@@ -92,7 +90,6 @@
   DistillerPageWebContents distiller_page(
       shell()->web_contents()->GetBrowserContext());
   distiller_page_ = &distiller_page;
-  distiller_page.Init();
 
   base::RunLoop run_loop;
   DistillPage(run_loop.QuitClosure(), "/simple_article.html");
@@ -109,7 +106,6 @@
   DistillerPageWebContents distiller_page(
       shell()->web_contents()->GetBrowserContext());
   distiller_page_ = &distiller_page;
-  distiller_page.Init();
 
   base::RunLoop run_loop;
   DistillPage(run_loop.QuitClosure(), "/simple_article.html");
diff --git a/components/dom_distiller/core/distilled_content_store.cc b/components/dom_distiller/core/distilled_content_store.cc
new file mode 100644
index 0000000..fa7b002
--- /dev/null
+++ b/components/dom_distiller/core/distilled_content_store.cc
@@ -0,0 +1,49 @@
+// 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.
+
+#include "components/dom_distiller/core/distilled_content_store.h"
+
+#include "base/message_loop/message_loop.h"
+
+namespace dom_distiller {
+
+InMemoryContentStore::InMemoryContentStore() {}
+InMemoryContentStore::~InMemoryContentStore() {}
+
+void InMemoryContentStore::SaveContent(
+    const ArticleEntry& entry,
+    const DistilledArticleProto& proto,
+    InMemoryContentStore::SaveCallback callback) {
+  InjectContent(entry, proto);
+  if (!callback.is_null()) {
+    base::MessageLoop::current()->PostTask(FROM_HERE,
+                                           base::Bind(callback, true));
+  }
+}
+
+void InMemoryContentStore::LoadContent(
+    const ArticleEntry& entry,
+    InMemoryContentStore::LoadCallback callback) const {
+  if (callback.is_null())
+    return;
+
+  ContentMap::const_iterator it = cache_.find(entry.entry_id());
+  bool success = it != cache_.end();
+  scoped_ptr<DistilledArticleProto> distilled_article;
+  if (success) {
+    distilled_article.reset(new DistilledArticleProto(it->second));
+  } else {
+    distilled_article.reset(new DistilledArticleProto());
+  }
+  base::MessageLoop::current()->PostTask(
+      FROM_HERE,
+      base::Bind(callback, success, base::Passed(&distilled_article)));
+}
+
+void InMemoryContentStore::InjectContent(const ArticleEntry& entry,
+                                         const DistilledArticleProto& proto) {
+  cache_[entry.entry_id()] = proto;
+}
+
+}  // namespace dom_distiller
diff --git a/components/dom_distiller/core/distilled_content_store.h b/components/dom_distiller/core/distilled_content_store.h
new file mode 100644
index 0000000..4ccacf0
--- /dev/null
+++ b/components/dom_distiller/core/distilled_content_store.h
@@ -0,0 +1,61 @@
+// 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.
+
+#ifndef COMPONENTS_DOM_DISTILLER_CORE_DOM_DISTILLER_CONTENT_STORE_H_
+#define COMPONENTS_DOM_DISTILLER_CORE_DOM_DISTILLER_CONTENT_STORE_H_
+
+#include "base/bind.h"
+#include "base/containers/hash_tables.h"
+#include "components/dom_distiller/core/article_entry.h"
+#include "components/dom_distiller/core/proto/distilled_article.pb.h"
+
+namespace dom_distiller {
+
+// This is a simple interface for saving and loading of distilled content for an
+// ArticleEntry.
+class DistilledContentStore {
+ public:
+  typedef base::Callback<
+      void(bool /* success */, scoped_ptr<DistilledArticleProto>)> LoadCallback;
+  typedef base::Callback<void(bool /* success */)> SaveCallback;
+
+  virtual void SaveContent(const ArticleEntry& entry,
+                           const DistilledArticleProto& proto,
+                           SaveCallback callback) = 0;
+  virtual void LoadContent(const ArticleEntry& entry,
+                           LoadCallback callback) const = 0;
+
+  DistilledContentStore() {};
+  virtual ~DistilledContentStore() {};
+ private:
+  DISALLOW_COPY_AND_ASSIGN(DistilledContentStore);
+};
+
+// This content store keeps anything put in it around forever. Its memory use
+// then may grow very large.
+//
+// TODO(cjhopman): Do something about unbound memory growth.
+class InMemoryContentStore : public DistilledContentStore {
+ public:
+  InMemoryContentStore();
+  virtual ~InMemoryContentStore();
+
+  // DistilledContentStore implementation
+  virtual void SaveContent(const ArticleEntry& entry,
+                           const DistilledArticleProto& proto,
+                           SaveCallback callback) OVERRIDE;
+  virtual void LoadContent(const ArticleEntry& entry,
+                           LoadCallback callback) const OVERRIDE;
+
+  // Synchronously saves the content.
+  void InjectContent(const ArticleEntry& entry,
+                     const DistilledArticleProto& proto);
+
+ private:
+  typedef base::hash_map<std::string, DistilledArticleProto> ContentMap;
+  ContentMap cache_;
+};
+}  // dom_distiller
+
+#endif  // COMPONENTS_DOM_DISTILLER_CORE_DOM_DISTILLER_CONTENT_CACHE_H_
diff --git a/components/dom_distiller/core/distiller.cc b/components/dom_distiller/core/distiller.cc
index acbb68e..d720a5b 100644
--- a/components/dom_distiller/core/distiller.cc
+++ b/components/dom_distiller/core/distiller.cc
@@ -39,7 +39,6 @@
 scoped_ptr<Distiller> DistillerFactoryImpl::CreateDistiller() {
   scoped_ptr<DistillerImpl> distiller(new DistillerImpl(
       *distiller_page_factory_, *distiller_url_fetcher_factory_));
-  distiller->Init();
   return distiller.PassAs<Distiller>();
 }
 
@@ -61,11 +60,6 @@
   DCHECK(destruction_allowed_);
 }
 
-void DistillerImpl::Init() {
-  DCHECK(AreAllPagesFinished());
-  distiller_page_->Init();
-}
-
 void DistillerImpl::SetMaxNumPagesInArticle(size_t max_num_pages) {
   max_pages_in_article_ = max_num_pages;
 }
diff --git a/components/dom_distiller/core/distiller.h b/components/dom_distiller/core/distiller.h
index 249a1b3..8196757 100644
--- a/components/dom_distiller/core/distiller.h
+++ b/components/dom_distiller/core/distiller.h
@@ -73,10 +73,6 @@
       const DistillerURLFetcherFactory& distiller_url_fetcher_factory);
   virtual ~DistillerImpl();
 
-  // Creates an execution context. This must be called once before any calls are
-  // made to distill the page.
-  virtual void Init();
-
   virtual void DistillPage(const GURL& url,
                            const DistillationFinishedCallback& finished_cb,
                            const DistillationUpdateCallback& update_cb)
diff --git a/components/dom_distiller/core/distiller_page.cc b/components/dom_distiller/core/distiller_page.cc
index eed6c2c..a935c7a 100644
--- a/components/dom_distiller/core/distiller_page.cc
+++ b/components/dom_distiller/core/distiller_page.cc
@@ -19,54 +19,27 @@
 
 DistillerPageFactory::~DistillerPageFactory() {}
 
-DistillerPage::DistillerPage() : state_(NO_CONTEXT) {}
+DistillerPage::DistillerPage() : ready_(true) {}
 
 DistillerPage::~DistillerPage() {}
 
-void DistillerPage::Init() {
-  DCHECK_EQ(NO_CONTEXT, state_);
-  InitImpl();
-  state_ = IDLE;
-}
-
 void DistillerPage::DistillPage(const GURL& gurl,
                                 const DistillerPageCallback& callback) {
-  DCHECK(state_ == IDLE || state_ == PAGE_AVAILABLE ||
-         state_ == PAGELOAD_FAILED);
-  state_ = LOADING_PAGE;
+  DCHECK(ready_);
+  // It is only possible to distill one page at a time. |ready_| is reset when
+  // the callback to OnDistillationDone happens.
+  ready_ = false;
   distiller_page_callback_ = callback;
-  LoadURLImpl(gurl);
-}
-
-void DistillerPage::ExecuteJavaScript() {
-  DCHECK_EQ(PAGE_AVAILABLE, state_);
-  state_ = EXECUTING_JAVASCRIPT;
-  DVLOG(1) << "Beginning distillation";
   std::string script = ResourceBundle::GetSharedInstance()
                            .GetRawDataResource(IDR_DISTILLER_JS)
                            .as_string();
-  ExecuteJavaScriptImpl(script);
+  DistillPageImpl(gurl, script);
 }
 
-void DistillerPage::OnLoadURLDone() {
-  DCHECK_EQ(LOADING_PAGE, state_);
-  state_ = PAGE_AVAILABLE;
-  ExecuteJavaScript();
-}
-
-void DistillerPage::OnLoadURLFailed() {
-  state_ = PAGELOAD_FAILED;
-  base::MessageLoop::current()->PostTask(
-      FROM_HERE,
-      base::Bind(distiller_page_callback_,
-                 base::Passed(scoped_ptr<DistilledPageInfo>()),
-                 false));
-}
-
-void DistillerPage::OnExecuteJavaScriptDone(const GURL& page_url,
-                                            const base::Value* value) {
-  DCHECK_EQ(EXECUTING_JAVASCRIPT, state_);
-  state_ = PAGE_AVAILABLE;
+void DistillerPage::OnDistillationDone(const GURL& page_url,
+                                       const base::Value* value) {
+  DCHECK(!ready_);
+  ready_ = true;
   scoped_ptr<DistilledPageInfo> page_info(new DistilledPageInfo());
   std::string result;
   const base::ListValue* result_list = NULL;
diff --git a/components/dom_distiller/core/distiller_page.h b/components/dom_distiller/core/distiller_page.h
index a5c06cb..d0d8222 100644
--- a/components/dom_distiller/core/distiller_page.h
+++ b/components/dom_distiller/core/distiller_page.h
@@ -40,59 +40,26 @@
   DistillerPage();
   virtual ~DistillerPage();
 
-  // Initializes a |DistillerPage|. It must be called before any
-  // other functions, and must only be called once.
-  void Init();
-
-  // Loads a URL. |OnLoadURLDone| is called when the load completes or fails.
-  // May be called when the distiller is idle or a page is available.
+  // Loads a URL. |OnDistillationDone| is called when the load completes or
+  // fails. May be called when the distiller is idle.
   void DistillPage(const GURL& url, const DistillerPageCallback& callback);
-  virtual void OnLoadURLDone();
-  virtual void OnLoadURLFailed();
-
-  // Injects and executes JavaScript in the context of a loaded page. |LoadURL|
-  // must complete before this function is called. May be called only when
-  // a page is available.
-  void ExecuteJavaScript();
 
   // Called when the JavaScript execution completes. |page_url| is the url of
   // the distilled page. |value| contains data returned by the script.
-  virtual void OnExecuteJavaScriptDone(const GURL& page_url,
-                                       const base::Value* value);
+  virtual void OnDistillationDone(const GURL& page_url,
+                                  const base::Value* value);
 
  protected:
-  enum State {
-    // No context has yet been set in which to load or distill a page.
-    NO_CONTEXT,
-    // The page distiller has been initialized and is idle.
-    IDLE,
-    // A page is currently loading.
-    LOADING_PAGE,
-    // A page has loaded within the specified context.
-    PAGE_AVAILABLE,
-    // There was an error processing the page.
-    PAGELOAD_FAILED,
-    // JavaScript is executing within the context of the page. When the
-    // JavaScript completes, the state will be returned to |PAGE_AVAILABLE|.
-    EXECUTING_JAVASCRIPT
-  };
-
-  // Called by |Init| to do plaform-specific initialization work set up an
-  // environment in which a page can be loaded.
-  virtual void InitImpl() = 0;
-
-  // Called by |LoadURL| to carry out platform-specific instructions to load a
-  // page.
-  virtual void LoadURLImpl(const GURL& gurl) = 0;
+  // Called by |DistillPage| to carry out platform-specific instructions to load
+  // a page.
+  virtual void DistillPageImpl(const GURL& gurl, const std::string& script) = 0;
 
   // Called by |ExecuteJavaScript| to carry out platform-specific instructions
   // to inject and execute JavaScript within the context of the loaded page.
-  virtual void ExecuteJavaScriptImpl(const std::string& script) = 0;
-
-  // The current state of the |DistillerPage|, initially |NO_CONTEXT|.
-  State state_;
+  //virtual void ExecuteJavaScriptImpl() = 0;
 
  private:
+  bool ready_;
   DistillerPageCallback distiller_page_callback_;
   DISALLOW_COPY_AND_ASSIGN(DistillerPage);
 };
diff --git a/components/dom_distiller/core/distiller_unittest.cc b/components/dom_distiller/core/distiller_unittest.cc
index d4449d1..1590cfd 100644
--- a/components/dom_distiller/core/distiller_unittest.cc
+++ b/components/dom_distiller/core/distiller_unittest.cc
@@ -233,9 +233,7 @@
 
 class MockDistillerPage : public DistillerPage {
  public:
-  MOCK_METHOD0(InitImpl, void());
-  MOCK_METHOD1(LoadURLImpl, void(const GURL& gurl));
-  MOCK_METHOD1(ExecuteJavaScriptImpl, void(const string& script));
+  MOCK_METHOD2(DistillPageImpl, void(const GURL& gurl, const string& script));
 
   MockDistillerPage() {}
 };
@@ -276,18 +274,15 @@
   TestDistillerURLFetcherFactory url_fetcher_factory_;
 };
 
-ACTION_P3(DistillerPageOnExecuteJavaScriptDone, distiller_page, url, list) {
-  distiller_page->OnExecuteJavaScriptDone(url, list);
+ACTION_P3(DistillerPageOnDistillationDone, distiller_page, url, list) {
+  distiller_page->OnDistillationDone(url, list);
 }
 
 ACTION_P2(CreateMockDistillerPage, list, kurl) {
   MockDistillerPage* distiller_page = new MockDistillerPage();
-  EXPECT_CALL(*distiller_page, InitImpl());
-  EXPECT_CALL(*distiller_page, LoadURLImpl(kurl))
-      .WillOnce(testing::InvokeWithoutArgs(distiller_page,
-                                           &DistillerPage::OnLoadURLDone));
-  EXPECT_CALL(*distiller_page, ExecuteJavaScriptImpl(_)).WillOnce(
-      DistillerPageOnExecuteJavaScriptDone(distiller_page, kurl, list));
+  EXPECT_CALL(*distiller_page, DistillPageImpl(kurl, _))
+      .WillOnce(
+          DistillerPageOnDistillationDone(distiller_page, kurl, list));
   return distiller_page;
 }
 
@@ -296,11 +291,7 @@
           kurl) {
   MockDistillerPage* distiller_page = new MockDistillerPage();
   *distiller_page_ptr = distiller_page;
-  EXPECT_CALL(*distiller_page, InitImpl());
-  EXPECT_CALL(*distiller_page, LoadURLImpl(kurl))
-      .WillOnce(testing::InvokeWithoutArgs(distiller_page,
-                                           &DistillerPage::OnLoadURLDone));
-  EXPECT_CALL(*distiller_page, ExecuteJavaScriptImpl(_));
+  EXPECT_CALL(*distiller_page, DistillPageImpl(kurl, _));
   return distiller_page;
 }
 
@@ -309,18 +300,14 @@
           pages_size,
           start_page_num) {
   MockDistillerPage* distiller_page = new MockDistillerPage();
-  EXPECT_CALL(*distiller_page, InitImpl());
   {
     testing::InSequence s;
     vector<int> page_nums = GetPagesInSequence(start_page_num, pages_size);
     for (size_t page_num = 0; page_num < pages_size; ++page_num) {
       int page = page_nums[page_num];
       GURL url = GURL(distiller_data->page_urls[page]);
-      EXPECT_CALL(*distiller_page, LoadURLImpl(url))
-          .WillOnce(testing::InvokeWithoutArgs(distiller_page,
-                                               &DistillerPage::OnLoadURLDone));
-      EXPECT_CALL(*distiller_page, ExecuteJavaScriptImpl(_))
-          .WillOnce(DistillerPageOnExecuteJavaScriptDone(
+      EXPECT_CALL(*distiller_page, DistillPageImpl(url, _))
+          .WillOnce(DistillerPageOnDistillationDone(
               distiller_page, url, distiller_data->distilled_values[page]));
     }
   }
@@ -334,7 +321,6 @@
   EXPECT_CALL(page_factory_, CreateDistillerPageMock())
       .WillOnce(CreateMockDistillerPage(list.get(), GURL(kURL)));
   distiller_.reset(new DistillerImpl(page_factory_, url_fetcher_factory_));
-  distiller_->Init();
   DistillPage(kURL);
   base::MessageLoop::current()->RunUntilIdle();
   EXPECT_EQ(kTitle, article_proto_->title());
@@ -354,7 +340,6 @@
   EXPECT_CALL(page_factory_, CreateDistillerPageMock())
       .WillOnce(CreateMockDistillerPage(list.get(), GURL(kURL)));
   distiller_.reset(new DistillerImpl(page_factory_, url_fetcher_factory_));
-  distiller_->Init();
   DistillPage(kURL);
   base::MessageLoop::current()->RunUntilIdle();
   EXPECT_EQ(kTitle, article_proto_->title());
@@ -392,7 +377,6 @@
       .WillOnce(CreateMockDistillerPages(distiller_data.get(), kNumPages, 0));
 
   distiller_.reset(new DistillerImpl(page_factory_, url_fetcher_factory_));
-  distiller_->Init();
   DistillPage(distiller_data->page_urls[0]);
   base::MessageLoop::current()->RunUntilIdle();
   VerifyArticleProtoMatchesMultipageData(
@@ -408,7 +392,6 @@
   EXPECT_CALL(page_factory_, CreateDistillerPageMock())
       .WillOnce(CreateMockDistillerPage(list.get(), GURL(kURL)));
   distiller_.reset(new DistillerImpl(page_factory_, url_fetcher_factory_));
-  distiller_->Init();
   DistillPage(kURL);
   base::MessageLoop::current()->RunUntilIdle();
   EXPECT_EQ(kTitle, article_proto_->title());
@@ -441,7 +424,6 @@
 
   distiller_->SetMaxNumPagesInArticle(kMaxPagesInArticle);
 
-  distiller_->Init();
   DistillPage(distiller_data->page_urls[0]);
   base::MessageLoop::current()->RunUntilIdle();
   EXPECT_EQ(kTitle, article_proto_->title());
@@ -462,8 +444,6 @@
   // Check if distilling an article with exactly the page limit works.
   distiller_->SetMaxNumPagesInArticle(kMaxPagesInArticle);
 
-  distiller_->Init();
-
   DistillPage(distiller_data->page_urls[0]);
   base::MessageLoop::current()->RunUntilIdle();
   EXPECT_EQ(kTitle, article_proto_->title());
@@ -478,7 +458,6 @@
   EXPECT_CALL(page_factory_, CreateDistillerPageMock())
       .WillOnce(CreateMockDistillerPage(nullValue.get(), GURL(kURL)));
   distiller_.reset(new DistillerImpl(page_factory_, url_fetcher_factory_));
-  distiller_->Init();
   DistillPage(kURL);
   base::MessageLoop::current()->RunUntilIdle();
   EXPECT_EQ("", article_proto_->title());
@@ -504,7 +483,6 @@
       CreateMockDistillerPages(distiller_data.get(), failed_page_num + 1, 0));
 
   distiller_.reset(new DistillerImpl(page_factory_, url_fetcher_factory_));
-  distiller_->Init();
   DistillPage(distiller_data->page_urls[0]);
   base::MessageLoop::current()->RunUntilIdle();
   EXPECT_EQ(kTitle, article_proto_->title());
@@ -526,7 +504,6 @@
           distiller_data.get(), kNumPages, start_page_num));
 
   distiller_.reset(new DistillerImpl(page_factory_, url_fetcher_factory_));
-  distiller_->Init();
   DistillPage(distiller_data->page_urls[start_page_num]);
   base::MessageLoop::current()->RunUntilIdle();
   VerifyArticleProtoMatchesMultipageData(
@@ -547,7 +524,6 @@
           distiller_data.get(), kNumPages, start_page_num));
 
   distiller_.reset(new DistillerImpl(page_factory_, url_fetcher_factory_));
-  distiller_->Init();
   DistillPage(distiller_data->page_urls[start_page_num]);
   base::MessageLoop::current()->RunUntilIdle();
   EXPECT_EQ(kTitle, article_proto_->title());
@@ -570,7 +546,6 @@
           distiller_data.get(), kNumPages, start_page_num));
 
   distiller_.reset(new DistillerImpl(page_factory_, url_fetcher_factory_));
-  distiller_->Init();
   DistillPage(distiller_data->page_urls[start_page_num]);
   base::MessageLoop::current()->RunUntilIdle();
   EXPECT_EQ(kNumPages, in_sequence_updates_.size());
@@ -595,7 +570,6 @@
           distiller_data.get(), kNumPages, start_page_num));
 
   distiller_.reset(new DistillerImpl(page_factory_, url_fetcher_factory_));
-  distiller_->Init();
   DistillPage(distiller_data->page_urls[start_page_num]);
   base::MessageLoop::current()->RunUntilIdle();
   EXPECT_EQ(kNumPages, in_sequence_updates_.size());
@@ -622,7 +596,6 @@
   EXPECT_CALL(url_fetcher_factory, CreateDistillerURLFetcher())
       .WillOnce(Return(delayed_fetcher));
   distiller_.reset(new DistillerImpl(page_factory_, url_fetcher_factory));
-  distiller_->Init();
   DistillPage(kURL);
   base::MessageLoop::current()->RunUntilIdle();
 
@@ -642,13 +615,12 @@
       .WillOnce(CreateMockDistillerPageWithPendingJSCallback(&distiller_page,
                                                              GURL(kURL)));
   distiller_.reset(new DistillerImpl(page_factory_, url_fetcher_factory_));
-  distiller_->Init();
   DistillPage(kURL);
   base::MessageLoop::current()->RunUntilIdle();
 
   ASSERT_TRUE(distiller_page);
   // Post the task to execute javascript and then delete the distiller.
-  distiller_page->OnExecuteJavaScriptDone(GURL(kURL), distilled_value.get());
+  distiller_page->OnDistillationDone(GURL(kURL), distilled_value.get());
   distiller_.reset();
 
   base::MessageLoop::current()->RunUntilIdle();
diff --git a/components/dom_distiller/core/dom_distiller_service.cc b/components/dom_distiller/core/dom_distiller_service.cc
index 0661f6e..6683da5 100644
--- a/components/dom_distiller/core/dom_distiller_service.cc
+++ b/components/dom_distiller/core/dom_distiller_service.cc
@@ -6,6 +6,7 @@
 
 #include "base/guid.h"
 #include "base/message_loop/message_loop.h"
+#include "components/dom_distiller/core/distilled_content_store.h"
 #include "components/dom_distiller/core/dom_distiller_store.h"
 #include "components/dom_distiller/core/proto/distilled_article.pb.h"
 #include "components/dom_distiller/core/task_tracker.h"
@@ -38,7 +39,9 @@
 DomDistillerService::DomDistillerService(
     scoped_ptr<DomDistillerStoreInterface> store,
     scoped_ptr<DistillerFactory> distiller_factory)
-    : store_(store.Pass()), distiller_factory_(distiller_factory.Pass()) {}
+    : store_(store.Pass()),
+      content_store_(new InMemoryContentStore()),
+      distiller_factory_(distiller_factory.Pass()) {}
 
 DomDistillerService::~DomDistillerService() {}
 
@@ -79,6 +82,7 @@
     task_tracker->AddSaveCallback(base::Bind(
         &DomDistillerService::AddDistilledPageToList, base::Unretained(this)));
     task_tracker->StartDistiller(distiller_factory_.get());
+    task_tracker->StartBlobFetcher();
   }
 
   return task_tracker->GetEntryId();
@@ -118,6 +122,7 @@
   TaskTracker* task_tracker = GetOrCreateTaskTrackerForEntry(entry);
   scoped_ptr<ViewerHandle> viewer_handle = task_tracker->AddViewer(delegate);
   task_tracker->StartDistiller(distiller_factory_.get());
+  task_tracker->StartBlobFetcher();
 
   return viewer_handle.Pass();
 }
@@ -132,6 +137,7 @@
   TaskTracker* task_tracker = GetOrCreateTaskTrackerForUrl(url);
   scoped_ptr<ViewerHandle> viewer_handle = task_tracker->AddViewer(delegate);
   task_tracker->StartDistiller(distiller_factory_.get());
+  task_tracker->StartBlobFetcher();
 
   return viewer_handle.Pass();
 }
@@ -177,7 +183,8 @@
 TaskTracker* DomDistillerService::CreateTaskTracker(const ArticleEntry& entry) {
   TaskTracker::CancelCallback cancel_callback =
       base::Bind(&DomDistillerService::CancelTask, base::Unretained(this));
-  TaskTracker* tracker = new TaskTracker(entry, cancel_callback);
+  TaskTracker* tracker =
+      new TaskTracker(entry, cancel_callback, content_store_.get());
   tasks_.push_back(tracker);
   return tracker;
 }
diff --git a/components/dom_distiller/core/dom_distiller_service.h b/components/dom_distiller/core/dom_distiller_service.h
index 8f4ea70..221af72 100644
--- a/components/dom_distiller/core/dom_distiller_service.h
+++ b/components/dom_distiller/core/dom_distiller_service.h
@@ -23,6 +23,7 @@
 namespace dom_distiller {
 
 class DistilledArticleProto;
+class DistilledContentStore;
 class DistillerFactory;
 class DomDistillerObserver;
 class DomDistillerStoreInterface;
@@ -115,6 +116,7 @@
   TaskTracker* GetOrCreateTaskTrackerForEntry(const ArticleEntry& entry);
 
   scoped_ptr<DomDistillerStoreInterface> store_;
+  scoped_ptr<DistilledContentStore> content_store_;
   scoped_ptr<DistillerFactory> distiller_factory_;
 
   typedef ScopedVector<TaskTracker> TaskList;
diff --git a/components/dom_distiller/core/task_tracker.cc b/components/dom_distiller/core/task_tracker.cc
index 5dd17d3..957fd13 100644
--- a/components/dom_distiller/core/task_tracker.cc
+++ b/components/dom_distiller/core/task_tracker.cc
@@ -6,6 +6,7 @@
 
 #include "base/auto_reset.h"
 #include "base/message_loop/message_loop.h"
+#include "components/dom_distiller/core/distilled_content_store.h"
 #include "components/dom_distiller/core/proto/distilled_article.pb.h"
 #include "components/dom_distiller/core/proto/distilled_page.pb.h"
 
@@ -20,8 +21,12 @@
   }
 }
 
-TaskTracker::TaskTracker(const ArticleEntry& entry, CancelCallback callback)
+TaskTracker::TaskTracker(const ArticleEntry& entry,
+                         CancelCallback callback,
+                         DistilledContentStore* content_store)
     : cancel_callback_(callback),
+      content_store_(content_store),
+      blob_fetcher_running_(false),
       entry_(entry),
       distilled_article_(),
       content_ready_(false),
@@ -40,7 +45,6 @@
   if (entry_.pages_size() == 0) {
     return;
   }
-
   GURL url(entry_.pages(0).url());
   DCHECK(url.is_valid());
 
@@ -53,9 +57,11 @@
 }
 
 void TaskTracker::StartBlobFetcher() {
-  // TODO(cjhopman): There needs to be some local storage for the distilled
-  // blob. When that happens, this should start some task to fetch the blob for
-  // |entry_| and asynchronously notify |this| when it is done.
+  if (content_store_) {
+    content_store_->LoadContent(entry_,
+                                base::Bind(&TaskTracker::OnBlobFetched,
+                                           weak_ptr_factory_.GetWeakPtr()));
+  }
 }
 
 void TaskTracker::AddSaveCallback(const SaveCallback& callback) {
@@ -111,6 +117,8 @@
     return;
   }
 
+  CancelPendingSources();
+
   base::AutoReset<bool> dont_delete_this_in_callback(&destruction_allowed_,
                                                      false);
   cancel_callback_.Run(this);
@@ -126,52 +134,96 @@
                  distillation_succeeded));
 }
 
-void TaskTracker::DoSaveCallbacks(bool distillation_succeeded) {
-  if (!save_callbacks_.empty()) {
-    for (size_t i = 0; i < save_callbacks_.size(); ++i) {
-      DCHECK(!save_callbacks_[i].is_null());
-      save_callbacks_[i].Run(
-          entry_, distilled_article_.get(), distillation_succeeded);
-    }
+void TaskTracker::OnDistillerFinished(
+    scoped_ptr<DistilledArticleProto> distilled_article) {
+  if (content_ready_) {
+    return;
+  }
 
-    save_callbacks_.clear();
-    MaybeCancel();
+  DistilledArticleReady(distilled_article.Pass());
+  if (content_ready_) {
+    AddDistilledContentToStore(*distilled_article_);
+  }
+
+  ContentSourceFinished();
+}
+
+void TaskTracker::CancelPendingSources() {
+  base::MessageLoop::current()->DeleteSoon(FROM_HERE, distiller_.release());
+}
+
+void TaskTracker::OnBlobFetched(
+    bool success,
+    scoped_ptr<DistilledArticleProto> distilled_article) {
+  blob_fetcher_running_ = false;
+
+  if (content_ready_) {
+    return;
+  }
+
+  DistilledArticleReady(distilled_article.Pass());
+
+  ContentSourceFinished();
+}
+
+bool TaskTracker::IsAnySourceRunning() const {
+  return distiller_ || blob_fetcher_running_;
+}
+
+void TaskTracker::ContentSourceFinished() {
+  if (content_ready_) {
+    CancelPendingSources();
+  } else if (!IsAnySourceRunning()) {
+    distilled_article_.reset(new DistilledArticleProto());
+    NotifyViewersAndCallbacks();
   }
 }
 
-void TaskTracker::NotifyViewer(ViewRequestDelegate* delegate) {
-  DCHECK(content_ready_);
-  delegate->OnArticleReady(distilled_article_.get());
-}
-
-void TaskTracker::OnDistillerFinished(
+void TaskTracker::DistilledArticleReady(
     scoped_ptr<DistilledArticleProto> distilled_article) {
-  OnDistilledArticleReady(distilled_article.Pass());
-}
+  DCHECK(!content_ready_);
 
-void TaskTracker::OnDistilledArticleReady(
-    scoped_ptr<DistilledArticleProto> distilled_article) {
-  distilled_article_ = distilled_article.Pass();
-  bool distillation_successful = false;
-  if (distilled_article_->pages_size() > 0) {
-    distillation_successful = true;
-    entry_.set_title(distilled_article_->title());
-    // Reset the pages.
-    entry_.clear_pages();
-    for (int i = 0; i < distilled_article_->pages_size(); ++i) {
-      sync_pb::ArticlePage* page = entry_.add_pages();
-      page->set_url(distilled_article_->pages(i).url());
-    }
+  if (distilled_article->pages_size() == 0) {
+    return;
   }
 
   content_ready_ = true;
 
+  distilled_article_ = distilled_article.Pass();
+  entry_.set_title(distilled_article_->title());
+  entry_.clear_pages();
+  for (int i = 0; i < distilled_article_->pages_size(); ++i) {
+    sync_pb::ArticlePage* page = entry_.add_pages();
+    page->set_url(distilled_article_->pages(i).url());
+  }
+
+  NotifyViewersAndCallbacks();
+}
+
+void TaskTracker::NotifyViewersAndCallbacks() {
   for (size_t i = 0; i < viewers_.size(); ++i) {
     NotifyViewer(viewers_[i]);
   }
 
   // Already inside a callback run SaveCallbacks directly.
-  DoSaveCallbacks(distillation_successful);
+  DoSaveCallbacks(content_ready_);
+}
+
+void TaskTracker::NotifyViewer(ViewRequestDelegate* delegate) {
+  delegate->OnArticleReady(distilled_article_.get());
+}
+
+void TaskTracker::DoSaveCallbacks(bool success) {
+  if (!save_callbacks_.empty()) {
+    for (size_t i = 0; i < save_callbacks_.size(); ++i) {
+      DCHECK(!save_callbacks_[i].is_null());
+      save_callbacks_[i].Run(
+          entry_, distilled_article_.get(), success);
+    }
+
+    save_callbacks_.clear();
+    MaybeCancel();
+  }
 }
 
 void TaskTracker::OnArticleDistillationUpdated(
@@ -181,4 +233,13 @@
   }
 }
 
+void TaskTracker::AddDistilledContentToStore(
+    const DistilledArticleProto& content) {
+  if (content_store_) {
+    content_store_->SaveContent(
+        entry_, content, DistilledContentStore::SaveCallback());
+  }
+}
+
+
 }  // namespace dom_distiller
diff --git a/components/dom_distiller/core/task_tracker.h b/components/dom_distiller/core/task_tracker.h
index dc066be..c8a62d9 100644
--- a/components/dom_distiller/core/task_tracker.h
+++ b/components/dom_distiller/core/task_tracker.h
@@ -21,6 +21,7 @@
 namespace dom_distiller {
 
 class DistilledArticleProto;
+class DistilledContentStore;
 
 // A handle to a request to view a DOM distiller entry or URL. The request will
 // be cancelled when the handle is destroyed.
@@ -75,7 +76,9 @@
       void(const ArticleEntry&, const DistilledArticleProto*, bool)>
       SaveCallback;
 
-  TaskTracker(const ArticleEntry& entry, CancelCallback callback);
+  TaskTracker(const ArticleEntry& entry,
+              CancelCallback callback,
+              DistilledContentStore* content_store);
   ~TaskTracker();
 
   // |factory| will not be stored after this call.
@@ -94,33 +97,47 @@
   bool HasUrl(const GURL& url) const;
 
  private:
-  void OnDistillerFinished(scoped_ptr<DistilledArticleProto> distilled_article);
-
-  void OnDistilledArticleReady(
-      scoped_ptr<DistilledArticleProto> distilled_article);
   void OnArticleDistillationUpdated(
       const ArticleDistillationUpdate& article_update);
+
+  void OnDistillerFinished(scoped_ptr<DistilledArticleProto> distilled_article);
+  void OnBlobFetched(bool success,
+                     scoped_ptr<DistilledArticleProto> distilled_article);
+
+  void RemoveViewer(ViewRequestDelegate* delegate);
+
+  void DistilledArticleReady(
+      scoped_ptr<DistilledArticleProto> distilled_article);
+
   // Posts a task to run DoSaveCallbacks with |distillation_succeeded|.
   void ScheduleSaveCallbacks(bool distillation_succeeded);
 
-  // Runs all callbacks passing |distillation_succeeded| and clears them. Should
-  // be called through ScheduleSaveCallbacks.
+  // Runs all callbacks passing |distillation_succeeded| and clears them.
   void DoSaveCallbacks(bool distillation_succeeded);
 
-  void RemoveViewer(ViewRequestDelegate* delegate);
+  void AddDistilledContentToStore(const DistilledArticleProto& content);
+
+  void NotifyViewersAndCallbacks();
   void NotifyViewer(ViewRequestDelegate* delegate);
 
+  bool IsAnySourceRunning() const;
+  void ContentSourceFinished();
+
+  void CancelPendingSources();
   void MaybeCancel();
 
   CancelCallback cancel_callback_;
+
+  DistilledContentStore* content_store_;
+
   std::vector<SaveCallback> save_callbacks_;
-
-  scoped_ptr<Distiller> distiller_;
-
   // A ViewRequestDelegate will be added to this list when a view request is
   // made and removed when the corresponding ViewerHandle is destroyed.
   std::vector<ViewRequestDelegate*> viewers_;
 
+  scoped_ptr<Distiller> distiller_;
+  bool blob_fetcher_running_;
+
   ArticleEntry entry_;
   scoped_ptr<DistilledArticleProto> distilled_article_;
 
diff --git a/components/dom_distiller/core/task_tracker_unittest.cc b/components/dom_distiller/core/task_tracker_unittest.cc
index c6eef4b..ee90021 100644
--- a/components/dom_distiller/core/task_tracker_unittest.cc
+++ b/components/dom_distiller/core/task_tracker_unittest.cc
@@ -7,6 +7,7 @@
 #include "base/run_loop.h"
 #include "components/dom_distiller/core/article_distillation_update.h"
 #include "components/dom_distiller/core/article_entry.h"
+#include "components/dom_distiller/core/distilled_content_store.h"
 #include "components/dom_distiller/core/fake_distiller.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -25,6 +26,16 @@
                void(ArticleDistillationUpdate article_update));
 };
 
+class MockContentStore : public DistilledContentStore {
+ public:
+  MOCK_CONST_METHOD2(LoadContent,
+                     void(const ArticleEntry& entry, LoadCallback callback));
+  MOCK_METHOD3(SaveContent,
+               void(const ArticleEntry& entry,
+                    const DistilledArticleProto& proto,
+                    SaveCallback callback));
+};
+
 class TestCancelCallback {
  public:
   TestCancelCallback() : cancelled_(false) {}
@@ -73,7 +84,8 @@
 TEST_F(DomDistillerTaskTrackerTest, TestHasEntryId) {
   MockDistillerFactory distiller_factory;
   TestCancelCallback cancel_callback;
-  TaskTracker task_tracker(GetDefaultEntry(), cancel_callback.GetCallback());
+  TaskTracker task_tracker(
+      GetDefaultEntry(), cancel_callback.GetCallback(), NULL);
   EXPECT_TRUE(task_tracker.HasEntryId(entry_id_));
   EXPECT_FALSE(task_tracker.HasEntryId("other_id"));
 }
@@ -81,7 +93,8 @@
 TEST_F(DomDistillerTaskTrackerTest, TestHasUrl) {
   MockDistillerFactory distiller_factory;
   TestCancelCallback cancel_callback;
-  TaskTracker task_tracker(GetDefaultEntry(), cancel_callback.GetCallback());
+  TaskTracker task_tracker(
+      GetDefaultEntry(), cancel_callback.GetCallback(), NULL);
   EXPECT_TRUE(task_tracker.HasUrl(page_0_url_));
   EXPECT_TRUE(task_tracker.HasUrl(page_1_url_));
   EXPECT_FALSE(task_tracker.HasUrl(GURL("http://other.url/")));
@@ -90,7 +103,8 @@
 TEST_F(DomDistillerTaskTrackerTest, TestViewerCancelled) {
   MockDistillerFactory distiller_factory;
   TestCancelCallback cancel_callback;
-  TaskTracker task_tracker(GetDefaultEntry(), cancel_callback.GetCallback());
+  TaskTracker task_tracker(
+      GetDefaultEntry(), cancel_callback.GetCallback(), NULL);
 
   FakeViewRequestDelegate viewer_delegate;
   FakeViewRequestDelegate viewer_delegate2;
@@ -107,7 +121,8 @@
 TEST_F(DomDistillerTaskTrackerTest, TestViewerCancelledWithSaveRequest) {
   MockDistillerFactory distiller_factory;
   TestCancelCallback cancel_callback;
-  TaskTracker task_tracker(GetDefaultEntry(), cancel_callback.GetCallback());
+  TaskTracker task_tracker(
+      GetDefaultEntry(), cancel_callback.GetCallback(), NULL);
 
   FakeViewRequestDelegate viewer_delegate;
   scoped_ptr<ViewerHandle> handle(task_tracker.AddViewer(&viewer_delegate));
@@ -128,7 +143,8 @@
   EXPECT_CALL(distiller_factory, CreateDistillerImpl())
       .WillOnce(Return(distiller));
   TestCancelCallback cancel_callback;
-  TaskTracker task_tracker(GetDefaultEntry(), cancel_callback.GetCallback());
+  TaskTracker task_tracker(
+      GetDefaultEntry(), cancel_callback.GetCallback(), NULL);
 
   FakeViewRequestDelegate viewer_delegate;
   scoped_ptr<ViewerHandle> handle(task_tracker.AddViewer(&viewer_delegate));
@@ -149,7 +165,8 @@
   EXPECT_CALL(distiller_factory, CreateDistillerImpl())
       .WillOnce(Return(distiller));
   TestCancelCallback cancel_callback;
-  TaskTracker task_tracker(GetDefaultEntry(), cancel_callback.GetCallback());
+  TaskTracker task_tracker(
+      GetDefaultEntry(), cancel_callback.GetCallback(), NULL);
 
   MockSaveCallback save_callback;
   task_tracker.AddSaveCallback(
@@ -164,5 +181,192 @@
   EXPECT_TRUE(cancel_callback.Cancelled());
 }
 
+DistilledArticleProto CreateDistilledArticleForEntry(
+    const ArticleEntry& entry) {
+  DistilledArticleProto article;
+  for (int i = 0; i < entry.pages_size(); ++i) {
+    DistilledPageProto* page = article.add_pages();
+    page->set_url(entry.pages(i).url());
+    page->set_html("<div>" + entry.pages(i).url() + "</div>");
+  }
+  return article;
+}
+
+TEST_F(DomDistillerTaskTrackerTest, TestBlobFetcher) {
+  ArticleEntry entry_with_blob = GetDefaultEntry();
+  DistilledArticleProto stored_distilled_article =
+      CreateDistilledArticleForEntry(entry_with_blob);
+  InMemoryContentStore content_store;
+  content_store.InjectContent(entry_with_blob, stored_distilled_article);
+  TestCancelCallback cancel_callback;
+
+  TaskTracker task_tracker(
+      entry_with_blob, cancel_callback.GetCallback(), &content_store);
+
+  FakeViewRequestDelegate viewer_delegate;
+  scoped_ptr<ViewerHandle> handle(task_tracker.AddViewer(&viewer_delegate));
+  base::RunLoop().RunUntilIdle();
+
+  const DistilledArticleProto* distilled_article;
+
+  EXPECT_CALL(viewer_delegate, OnArticleReady(_))
+      .WillOnce(testing::SaveArg<0>(&distilled_article));
+
+  task_tracker.StartBlobFetcher();
+  base::RunLoop().RunUntilIdle();
+
+  EXPECT_EQ(stored_distilled_article.SerializeAsString(),
+            distilled_article->SerializeAsString());
+
+  EXPECT_FALSE(cancel_callback.Cancelled());
+}
+
+TEST_F(DomDistillerTaskTrackerTest, TestBlobFetcherFinishesFirst) {
+  MockDistillerFactory distiller_factory;
+  FakeDistiller* distiller = new FakeDistiller(false);
+  EXPECT_CALL(distiller_factory, CreateDistillerImpl())
+      .WillOnce(Return(distiller));
+
+  ArticleEntry entry_with_blob = GetDefaultEntry();
+  DistilledArticleProto stored_distilled_article =
+      CreateDistilledArticleForEntry(entry_with_blob);
+  InMemoryContentStore content_store;
+  content_store.InjectContent(entry_with_blob, stored_distilled_article);
+  TestCancelCallback cancel_callback;
+  TaskTracker task_tracker(
+      entry_with_blob, cancel_callback.GetCallback(), &content_store);
+
+  FakeViewRequestDelegate viewer_delegate;
+  scoped_ptr<ViewerHandle> handle(task_tracker.AddViewer(&viewer_delegate));
+  base::RunLoop().RunUntilIdle();
+
+  DistilledArticleProto distilled_article;
+
+  EXPECT_CALL(viewer_delegate, OnArticleReady(_))
+      .WillOnce(testing::SaveArgPointee<0>(&distilled_article));
+  bool distiller_destroyed = false;
+  EXPECT_CALL(*distiller, Die())
+      .WillOnce(testing::Assign(&distiller_destroyed, true));
+
+  task_tracker.StartDistiller(&distiller_factory);
+  task_tracker.StartBlobFetcher();
+  base::RunLoop().RunUntilIdle();
+
+  testing::Mock::VerifyAndClearExpectations(&viewer_delegate);
+  EXPECT_EQ(stored_distilled_article.SerializeAsString(),
+            distilled_article.SerializeAsString());
+
+  EXPECT_TRUE(distiller_destroyed);
+  EXPECT_FALSE(cancel_callback.Cancelled());
+  base::RunLoop().RunUntilIdle();
+}
+
+TEST_F(DomDistillerTaskTrackerTest, TestBlobFetcherWithoutBlob) {
+  MockDistillerFactory distiller_factory;
+  FakeDistiller* distiller = new FakeDistiller(false);
+  EXPECT_CALL(distiller_factory, CreateDistillerImpl())
+      .WillOnce(Return(distiller));
+
+  ArticleEntry entry(GetDefaultEntry());
+  InMemoryContentStore content_store;
+  scoped_ptr<DistilledArticleProto> distilled_article(
+      new DistilledArticleProto(CreateDistilledArticleForEntry(entry)));
+
+  TestCancelCallback cancel_callback;
+  TaskTracker task_tracker(
+      GetDefaultEntry(), cancel_callback.GetCallback(), &content_store);
+
+  FakeViewRequestDelegate viewer_delegate;
+  scoped_ptr<ViewerHandle> handle(task_tracker.AddViewer(&viewer_delegate));
+  base::RunLoop().RunUntilIdle();
+
+  task_tracker.StartBlobFetcher();
+  task_tracker.StartDistiller(&distiller_factory);
+
+  // OnArticleReady shouldn't be called until distillation finishes (i.e. the
+  // blob fetcher shouldn't return distilled content).
+  EXPECT_CALL(viewer_delegate, OnArticleReady(_)).Times(0);
+  base::RunLoop().RunUntilIdle();
+
+  EXPECT_CALL(viewer_delegate, OnArticleReady(_));
+  distiller->RunDistillerCallback(distilled_article.Pass());
+  base::RunLoop().RunUntilIdle();
+
+  EXPECT_FALSE(cancel_callback.Cancelled());
+}
+
+TEST_F(DomDistillerTaskTrackerTest, TestDistillerFailsFirst) {
+  MockDistillerFactory distiller_factory;
+  FakeDistiller* distiller = new FakeDistiller(false);
+  EXPECT_CALL(distiller_factory, CreateDistillerImpl())
+      .WillOnce(Return(distiller));
+
+  ArticleEntry entry(GetDefaultEntry());
+  MockContentStore content_store;
+
+  TestCancelCallback cancel_callback;
+  TaskTracker task_tracker(
+      GetDefaultEntry(), cancel_callback.GetCallback(), &content_store);
+
+  FakeViewRequestDelegate viewer_delegate;
+  scoped_ptr<ViewerHandle> handle(task_tracker.AddViewer(&viewer_delegate));
+
+  DistilledContentStore::LoadCallback content_store_load_callback;
+  EXPECT_CALL(content_store, LoadContent(_, _)).WillOnce(
+      testing::SaveArg<1>(&content_store_load_callback));
+
+  task_tracker.StartDistiller(&distiller_factory);
+  task_tracker.StartBlobFetcher();
+
+  EXPECT_CALL(viewer_delegate, OnArticleReady(_)).Times(0);
+  distiller->RunDistillerCallback(
+      scoped_ptr<DistilledArticleProto>(new DistilledArticleProto));
+  base::RunLoop().RunUntilIdle();
+
+  EXPECT_CALL(viewer_delegate, OnArticleReady(_));
+  content_store_load_callback.Run(
+      true,
+      scoped_ptr<DistilledArticleProto>(
+          new DistilledArticleProto(CreateDistilledArticleForEntry(entry))));
+  base::RunLoop().RunUntilIdle();
+
+  EXPECT_FALSE(cancel_callback.Cancelled());
+}
+
+TEST_F(DomDistillerTaskTrackerTest, ContentIsSaved) {
+  MockDistillerFactory distiller_factory;
+  FakeDistiller* distiller = new FakeDistiller(false);
+  EXPECT_CALL(distiller_factory, CreateDistillerImpl())
+      .WillOnce(Return(distiller));
+
+  ArticleEntry entry(GetDefaultEntry());
+  DistilledArticleProto distilled_article =
+      CreateDistilledArticleForEntry(entry);
+
+  MockContentStore content_store;
+  TestCancelCallback cancel_callback;
+  TaskTracker task_tracker(
+      GetDefaultEntry(), cancel_callback.GetCallback(), &content_store);
+
+  FakeViewRequestDelegate viewer_delegate;
+  scoped_ptr<ViewerHandle> handle(task_tracker.AddViewer(&viewer_delegate));
+
+  DistilledArticleProto stored_distilled_article;
+  DistilledContentStore::LoadCallback content_store_load_callback;
+  EXPECT_CALL(content_store, SaveContent(_, _, _))
+      .WillOnce(testing::SaveArg<1>(&stored_distilled_article));
+
+  task_tracker.StartDistiller(&distiller_factory);
+
+  EXPECT_CALL(viewer_delegate, OnArticleReady(_));
+  distiller->RunDistillerCallback(scoped_ptr<DistilledArticleProto>(
+      new DistilledArticleProto(distilled_article)));
+  base::RunLoop().RunUntilIdle();
+
+  ASSERT_EQ(stored_distilled_article.SerializeAsString(),
+            distilled_article.SerializeAsString());
+  EXPECT_FALSE(cancel_callback.Cancelled());
+}
+
 }  // namespace test
 }  // namespace dom_distiller
diff --git a/components/domain_reliability.gypi b/components/domain_reliability.gypi
index 447f35a..7a2430a 100644
--- a/components/domain_reliability.gypi
+++ b/components/domain_reliability.gypi
@@ -20,6 +20,7 @@
         'DOMAIN_RELIABILITY_IMPLEMENTATION',
       ],
       'sources': [
+        'domain_reliability/baked_in_configs.h',
         'domain_reliability/beacon.cc',
         'domain_reliability/beacon.h',
         'domain_reliability/config.cc',
@@ -38,6 +39,36 @@
         'domain_reliability/util.cc',
         'domain_reliability/util.h',
       ],
+      'actions': [
+        {
+          'action_name': 'bake_in_configs',
+          'variables': {
+            'bake_in_configs_script': 'domain_reliability/bake_in_configs.py',
+            'baked_in_configs_cc':
+                '<(INTERMEDIATE_DIR)/domain_reliability/baked_in_configs.cc',
+            'baked_in_configs': [
+              'domain_reliability/baked_in_configs/apis_google_com.json',
+              'domain_reliability/baked_in_configs/ddm_google_com.json',
+              'domain_reliability/baked_in_configs/ssl_gstatic_com.json',
+              'domain_reliability/baked_in_configs/www_google_com.json',
+              'domain_reliability/baked_in_configs/www_youtube_com.json',
+            ],
+          },
+          'inputs': [
+            '<(bake_in_configs_script)',
+            '<@(baked_in_configs)',
+          ],
+          'outputs': [
+            '<(baked_in_configs_cc)'
+          ],
+          'action': ['python',
+                     '<(bake_in_configs_script)',
+                     '<@(baked_in_configs)',
+                     '<(baked_in_configs_cc)'],
+          'process_outputs_as_sources': 1,
+          'message': 'Baking in Domain Reliability configs',
+        },
+      ],
     },
   ],
 }
diff --git a/components/domain_reliability/bake_in_configs.py b/components/domain_reliability/bake_in_configs.py
new file mode 100755
index 0000000..65f8a0a
--- /dev/null
+++ b/components/domain_reliability/bake_in_configs.py
@@ -0,0 +1,106 @@
+#!/usr/bin/env python
+# 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.
+
+
+"""Takes the JSON files in components/domain_reliability/baked_in_configs and
+encodes their contents as an array of C strings that gets compiled in to Chrome
+and loaded at runtime."""
+
+
+import json
+import os
+import sys
+
+
+# A whitelist of domains that the script will accept when baking configs in to
+# Chrome, to ensure incorrect ones are not added accidentally. Subdomains of
+# whitelist entries are also allowed (e.g. maps.google.com, ssl.gstatic.com).
+DOMAIN_WHITELIST = ('google.com', 'gstatic.com', 'youtube.com')
+
+
+CC_HEADER = """// Copyright (C) 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.
+
+// AUTOGENERATED FILE. DO NOT EDIT.
+//
+// (Update configs in components/domain_reliability/baked_in_configs and list
+// configs in components/domain_reliability.gypi instead.)
+
+#include "components/domain_reliability/baked_in_configs.h"
+
+#include <stdlib.h>
+
+namespace domain_reliability {
+
+const char* const kBakedInJsonConfigs[] = {
+"""
+
+
+CC_FOOTER = """  NULL
+};
+
+}  // namespace domain_reliability
+"""
+
+
+def domain_is_whitelisted(domain):
+  return any(domain == e or domain.endswith('.' + e)  for e in DOMAIN_WHITELIST)
+
+
+def quote_and_wrap_text(text, width=79, prefix='  "', suffix='"'):
+  max_length = width - len(prefix) - len(suffix)
+  output = prefix
+  line_length = 0
+  for c in text:
+    if c == "\"":
+      c = "\\\""
+    elif c == "\n":
+      c = "\\n"
+    elif c == "\\":
+      c = "\\\\"
+    if line_length + len(c) > max_length:
+      output += suffix + "\n" + prefix
+      line_length = 0
+    output += c
+    line_length += len(c)
+  output += suffix
+  return output
+
+
+def main():
+  if len(sys.argv) < 3:
+    print >> sys.stderr, ('Usage: %s <JSON files...> <output C++ file>' %
+                          sys.argv[0])
+    print >> sys.stderr, sys.modules[__name__].__doc__
+    return 1
+
+  cpp_code = CC_HEADER
+  cpp_file = sys.argv[-1]
+  for json_file in sys.argv[1:-1]:
+    with open(json_file, 'r') as f:
+      json_text = f.read()
+    config = json.loads(json_text)
+    if 'monitored_domain' not in config:
+      print >> sys.stderr ('%s: no monitored_domain found' % json_file)
+      return 1
+    domain = config['monitored_domain']
+    if not domain_is_whitelisted(domain):
+      print >> sys.stderr ('%s: monitored_domain "%s" not in whitelist' %
+                           (json_file, domain))
+      return 1
+    cpp_code += "  // " + json_file + ":\n"
+    cpp_code += quote_and_wrap_text(json_text) + ",\n"
+    cpp_code += "\n"
+  cpp_code += CC_FOOTER
+
+  with open(cpp_file, 'wb') as f:
+    f.write(cpp_code)
+
+  return 0
+
+
+if __name__ == '__main__':
+  sys.exit(main())
diff --git a/components/domain_reliability/baked_in_configs.h b/components/domain_reliability/baked_in_configs.h
new file mode 100644
index 0000000..1e6fe82
--- /dev/null
+++ b/components/domain_reliability/baked_in_configs.h
@@ -0,0 +1,16 @@
+// 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.
+
+#ifndef COMPONENTS_DOMAIN_RELIABILITY_BAKED_IN_CONFIGS_H_
+#define COMPONENTS_DOMAIN_RELIABILITY_BAKED_IN_CONFIGS_H_
+
+#include "components/domain_reliability/domain_reliability_export.h"
+
+namespace domain_reliability {
+
+DOMAIN_RELIABILITY_EXPORT extern const char* const kBakedInJsonConfigs[];
+
+}  // namespace domain_reliability
+
+#endif  // COMPONENTS_DOMAIN_RELIABILITY_BAKED_IN_CONFIGS_H_
diff --git a/components/domain_reliability/baked_in_configs/apis_google_com.json b/components/domain_reliability/baked_in_configs/apis_google_com.json
new file mode 100644
index 0000000..c1d5e69
--- /dev/null
+++ b/components/domain_reliability/baked_in_configs/apis_google_com.json
@@ -0,0 +1,18 @@
+{
+  "config_version": "apis-google-com-v1",
+  "config_valid_until": 1405382400.0,
+  "monitored_domain": "apis.google.com",
+  "collectors": [
+    {
+      "upload_url": "https://clients2.google.com/domainreliability/upload"
+    }
+  ],
+  "monitored_resources": [
+    {
+      "resource_name": "apis",
+      "url_patterns": ["http*://apis.google.com/*"],
+      "success_sample_rate": 0.05,
+      "failure_sample_rate": 0.50
+    }
+  ]
+}
diff --git a/components/domain_reliability/baked_in_configs/ddm_google_com.json b/components/domain_reliability/baked_in_configs/ddm_google_com.json
new file mode 100644
index 0000000..f8b50ab
--- /dev/null
+++ b/components/domain_reliability/baked_in_configs/ddm_google_com.json
@@ -0,0 +1,18 @@
+{
+  "config_version": "ddm-google-com-v1",
+  "config_valid_until": 1405382400.0,
+  "monitored_domain": "ddm.google.com",
+  "collectors": [
+    {
+      "upload_url": "https://clients2.google.com/domainreliability/upload"
+    }
+  ],
+  "monitored_resources": [
+    {
+      "resource_name": "ddm",
+      "url_patterns": ["http*://ddm.google.com/*"],
+      "success_sample_rate": 0.05,
+      "failure_sample_rate": 0.50
+    }
+  ]
+}
diff --git a/components/domain_reliability/baked_in_configs/ssl_gstatic_com.json b/components/domain_reliability/baked_in_configs/ssl_gstatic_com.json
new file mode 100644
index 0000000..e0045b0
--- /dev/null
+++ b/components/domain_reliability/baked_in_configs/ssl_gstatic_com.json
@@ -0,0 +1,36 @@
+{
+  "config_version": "ssl-gstatic-com-v1",
+  "config_valid_until": 1405382400.0,
+  "monitored_domain": "ssl.gstatic.com",
+  "collectors": [
+    {
+      "upload_url": "https://clients2.google.com/domainreliability/upload"
+    }
+  ],
+  "monitored_resources": [
+    {
+      "resource_name": "accounts",
+      "url_patterns": ["http*://ssl.gstatic.com/accounts/*"],
+      "success_sample_rate": 0.05,
+      "failure_sample_rate": 1.00
+    },
+    {
+      "resource_name": "analytics",
+      "url_patterns": ["http*://ssl.gstatic.com/analytics/*"],
+      "success_sample_rate": 0.10,
+      "failure_sample_rate": 0.50
+    },
+    {
+      "resource_name": "images",
+      "url_patterns": ["http*://ssl.gstatic.com/images/*"],
+      "success_sample_rate": 0.05,
+      "failure_sample_rate": 0.25
+    },
+    {
+      "resource_name": "other",
+      "url_patterns": ["http*://ssl.gstatic.com/*"],
+      "success_sample_rate": 0.05,
+      "failure_sample_rate": 0.50
+    }
+  ]
+}
diff --git a/components/domain_reliability/baked_in_configs/www_google_com.json b/components/domain_reliability/baked_in_configs/www_google_com.json
new file mode 100644
index 0000000..dfe5e2a
--- /dev/null
+++ b/components/domain_reliability/baked_in_configs/www_google_com.json
@@ -0,0 +1,42 @@
+{
+  "config_version": "www-google-com-v1",
+  "config_valid_until": 1405382400.0,
+  "monitored_domain": "www.google.com",
+  "collectors": [
+    {
+      "upload_url": "https://clients2.google.com/domainreliability/upload"
+    }
+  ],
+  "monitored_resources": [
+    {
+      "resource_name": "search",
+      "url_patterns": ["http*://www.google.com/search?*"],
+      "success_sample_rate": 0.05,
+      "failure_sample_rate": 1.00
+    },
+    {
+      "resource_name": "maps",
+      "url_patterns": ["http*://www.google.com/maps/*"],
+      "success_sample_rate": 0.05,
+      "failure_sample_rate": 0.50
+    },
+    {
+      "resource_name": "calendar",
+      "url_patterns": ["http*://www.google.com/calendar/*"],
+      "success_sample_rate": 0.05,
+      "failure_sample_rate": 0.50
+    },
+    {
+      "resource_name": "home",
+      "url_patterns": ["http*://www.google.com/"],
+      "success_sample_rate": 0.05,
+      "failure_sample_rate": 0.50
+    },
+    {
+      "resource_name": "other",
+      "url_patterns": ["http*://www.google.com/*"],
+      "success_sample_rate": 0.05,
+      "failure_sample_rate": 0.50
+    }
+  ]
+}
diff --git a/components/domain_reliability/baked_in_configs/www_youtube_com.json b/components/domain_reliability/baked_in_configs/www_youtube_com.json
new file mode 100644
index 0000000..ea386d7
--- /dev/null
+++ b/components/domain_reliability/baked_in_configs/www_youtube_com.json
@@ -0,0 +1,18 @@
+{
+  "config_version": "www-youtube-com-v1",
+  "config_valid_until": 1405382400.0,
+  "monitored_domain": "www.youtube.com",
+  "collectors": [
+    {
+      "upload_url": "https://clients2.google.com/domainreliability/upload"
+    }
+  ],
+  "monitored_resources": [
+    {
+      "resource_name": "ytfe",
+      "url_patterns": ["http*://www.youtube.com/*"],
+      "success_sample_rate": 0.10,
+      "failure_sample_rate": 1.00
+    }
+  ]
+}
diff --git a/components/domain_reliability/config.cc b/components/domain_reliability/config.cc
index 0df2ea9..675f319 100644
--- a/components/domain_reliability/config.cc
+++ b/components/domain_reliability/config.cc
@@ -83,7 +83,7 @@
 // static
 scoped_ptr<const DomainReliabilityConfig> DomainReliabilityConfig::FromJSON(
     const base::StringPiece& json) {
-  base::Value* value = base::JSONReader::Read(json);
+  scoped_ptr<base::Value> value(base::JSONReader::Read(json));
   if (!value)
     return scoped_ptr<const DomainReliabilityConfig>();
 
@@ -100,8 +100,8 @@
 }
 
 bool DomainReliabilityConfig::IsValid() const {
-  if (valid_until == 0.0 || domain.empty() || resources.empty() ||
-      collectors.empty()) {
+  if (valid_until == 0.0 || domain.empty() || version.empty() ||
+      resources.empty() || collectors.empty()) {
     return false;
   }
 
@@ -119,7 +119,8 @@
 }
 
 bool DomainReliabilityConfig::IsExpired(base::Time now) const {
-  return now < base::Time::FromDoubleT(valid_until);
+  base::Time valid_until_time = base::Time::FromDoubleT(valid_until);
+  return now > valid_until_time;
 }
 
 int DomainReliabilityConfig::GetResourceIndexForUrl(const GURL& url) const {
diff --git a/components/domain_reliability/config_unittest.cc b/components/domain_reliability/config_unittest.cc
new file mode 100644
index 0000000..6d58efa
--- /dev/null
+++ b/components/domain_reliability/config_unittest.cc
@@ -0,0 +1,169 @@
+// 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.
+
+#include "components/domain_reliability/config.h"
+
+#include <string>
+
+#include "base/memory/scoped_ptr.h"
+#include "base/time/time.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace domain_reliability {
+
+namespace {
+
+scoped_ptr<DomainReliabilityConfig> MakeValidConfig() {
+  DomainReliabilityConfig* config = new DomainReliabilityConfig();
+  config->domain = "example";
+  config->valid_until = 1234567890.0;
+  config->version = "1";
+
+  DomainReliabilityConfig::Resource* resource =
+      new DomainReliabilityConfig::Resource();
+  resource->name = "home";
+  resource->url_patterns.push_back(
+      new std::string("http://example/"));
+  resource->success_sample_rate = 0.0;
+  resource->failure_sample_rate = 1.0;
+  config->resources.push_back(resource);
+
+  resource = new DomainReliabilityConfig::Resource();
+  resource->name = "static";
+  resource->url_patterns.push_back(new std::string("http://example/css/*"));
+  resource->url_patterns.push_back(new std::string("http://example/js/*"));
+  resource->success_sample_rate = 0.0;
+  resource->failure_sample_rate = 1.0;
+  config->resources.push_back(resource);
+
+  resource = new DomainReliabilityConfig::Resource();
+  resource->name = "html";
+  resource->url_patterns.push_back(
+      new std::string("http://example/*.html"));
+  resource->success_sample_rate = 0.0;
+  resource->failure_sample_rate = 1.0;
+  config->resources.push_back(resource);
+
+  DomainReliabilityConfig::Collector* collector =
+      new DomainReliabilityConfig::Collector();
+  collector->upload_url = GURL("https://example/upload");
+  config->collectors.push_back(collector);
+
+  EXPECT_TRUE(config->IsValid());
+  return scoped_ptr<DomainReliabilityConfig>(config);
+}
+
+int GetIndex(DomainReliabilityConfig* config, const char* url_string) {
+  return config->GetResourceIndexForUrl(GURL(url_string));
+}
+
+}  // namespace
+
+class DomainReliabilityConfigTest : public testing::Test { };
+
+TEST_F(DomainReliabilityConfigTest, IsValid) {
+  scoped_ptr<DomainReliabilityConfig> config;
+
+  config = MakeValidConfig();
+  EXPECT_TRUE(config->IsValid());
+
+  config = MakeValidConfig();
+  config->domain = "";
+  EXPECT_FALSE(config->IsValid());
+
+  config = MakeValidConfig();
+  config->valid_until = 0.0;
+  EXPECT_FALSE(config->IsValid());
+
+  config = MakeValidConfig();
+  config->version = "";
+  EXPECT_FALSE(config->IsValid());
+
+  config = MakeValidConfig();
+  config->resources.clear();
+  EXPECT_FALSE(config->IsValid());
+
+  config = MakeValidConfig();
+  config->resources[0]->name.clear();
+  EXPECT_FALSE(config->IsValid());
+
+  config = MakeValidConfig();
+  config->resources[0]->url_patterns.clear();
+  EXPECT_FALSE(config->IsValid());
+
+  config = MakeValidConfig();
+  config->resources[0]->success_sample_rate = 2.0;
+  EXPECT_FALSE(config->IsValid());
+
+  config = MakeValidConfig();
+  config->resources[0]->failure_sample_rate = 2.0;
+  EXPECT_FALSE(config->IsValid());
+
+  config = MakeValidConfig();
+  config->collectors.clear();
+  EXPECT_FALSE(config->IsValid());
+
+  config = MakeValidConfig();
+  config->collectors[0]->upload_url = GURL();
+  EXPECT_FALSE(config->IsValid());
+}
+
+TEST_F(DomainReliabilityConfigTest, IsExpired) {
+  base::Time now = base::Time::Now();
+  base::TimeDelta one_day = base::TimeDelta::FromDays(1);
+
+  DomainReliabilityConfig unexpired_config;
+  unexpired_config.valid_until = (now + one_day).ToDoubleT();
+  EXPECT_FALSE(unexpired_config.IsExpired(now));
+
+  DomainReliabilityConfig expired_config;
+  expired_config.valid_until = (now - one_day).ToDoubleT();
+  EXPECT_TRUE(expired_config.IsExpired(now));
+}
+
+TEST_F(DomainReliabilityConfigTest, GetResourceIndexForUrl) {
+  scoped_ptr<DomainReliabilityConfig> config = MakeValidConfig();
+
+  EXPECT_EQ(0, GetIndex(&*config, "http://example/"));
+  EXPECT_EQ(1, GetIndex(&*config, "http://example/css/foo.css"));
+  EXPECT_EQ(1, GetIndex(&*config, "http://example/js/bar.js"));
+  EXPECT_EQ(2, GetIndex(&*config, "http://example/test.html"));
+  EXPECT_EQ(-1, GetIndex(&*config, "http://example/no-resource"));
+}
+
+TEST_F(DomainReliabilityConfigTest, FromJSON) {
+  std::string config_json =
+    "{ \"config_version\": \"1\","
+    "  \"config_valid_until\": 1234567890.0,"
+    "  \"monitored_domain\": \"test.example\","
+    "  \"monitored_resources\": [ {"
+    "    \"resource_name\": \"home\","
+    "    \"url_patterns\": [ \"http://test.example/\" ],"
+    "    \"success_sample_rate\": 0.01,"
+    "    \"failure_sample_rate\": 0.10"
+    "  } ],"
+    "  \"collectors\": [ {"
+    "    \"upload_url\": \"https://test.example/domrel/upload\""
+    "  } ]"
+    "}";
+
+  scoped_ptr<const DomainReliabilityConfig> config(
+      DomainReliabilityConfig::FromJSON(config_json));
+
+  EXPECT_TRUE(config);
+  EXPECT_EQ("1", config->version);
+  EXPECT_EQ(1234567890.0, config->valid_until);
+  EXPECT_EQ("test.example", config->domain);
+  EXPECT_EQ(1u, config->resources.size());
+  EXPECT_EQ("home", config->resources[0]->name);
+  EXPECT_EQ(1u, config->resources[0]->url_patterns.size());
+  EXPECT_EQ("http://test.example/", *(config->resources[0]->url_patterns[0]));
+  EXPECT_EQ(0.01, config->resources[0]->success_sample_rate);
+  EXPECT_EQ(0.10, config->resources[0]->failure_sample_rate);
+  EXPECT_EQ(1u, config->collectors.size());
+  EXPECT_EQ(GURL("https://test.example/domrel/upload"),
+      config->collectors[0]->upload_url);
+}
+
+}  // namespace domain_reliability
diff --git a/components/domain_reliability/monitor.cc b/components/domain_reliability/monitor.cc
index ba8083e..c57c16b 100644
--- a/components/domain_reliability/monitor.cc
+++ b/components/domain_reliability/monitor.cc
@@ -5,10 +5,13 @@
 #include "components/domain_reliability/monitor.h"
 
 #include "base/command_line.h"
+#include "base/logging.h"
 #include "base/message_loop/message_loop.h"
 #include "base/single_thread_task_runner.h"
 #include "base/time/time.h"
+#include "components/domain_reliability/baked_in_configs.h"
 #include "content/public/browser/browser_thread.h"
+#include "net/base/load_flags.h"
 #include "net/url_request/url_request.h"
 #include "net/url_request/url_request_context.h"
 #include "net/url_request/url_request_context_getter.h"
@@ -89,6 +92,21 @@
       contexts_.begin(), contexts_.end());
 }
 
+void DomainReliabilityMonitor::AddBakedInConfigs() {
+  base::Time now = base::Time::Now();
+  for (size_t i = 0; kBakedInJsonConfigs[i]; ++i) {
+    std::string json(kBakedInJsonConfigs[i]);
+    scoped_ptr<const DomainReliabilityConfig> config =
+        DomainReliabilityConfig::FromJSON(json);
+    if (config && config->IsExpired(now)) {
+      LOG(WARNING) << "Baked-in Domain Reliability config for "
+                   << config->domain << " is expired.";
+      continue;
+    }
+    AddContext(config.Pass());
+  }
+}
+
 void DomainReliabilityMonitor::OnBeforeRedirect(net::URLRequest* request) {
   DCHECK(OnIOThread());
   RequestInfo request_info(*request);
@@ -112,15 +130,7 @@
 
 DomainReliabilityContext* DomainReliabilityMonitor::AddContextForTesting(
     scoped_ptr<const DomainReliabilityConfig> config) {
-  DomainReliabilityContext*& context_ref = contexts_[config->domain];
-  DCHECK(!context_ref);
-  context_ref = new DomainReliabilityContext(
-      time_.get(),
-      scheduler_params_,
-      &dispatcher_,
-      uploader_.get(),
-      config.Pass());
-  return context_ref;
+  return AddContext(config.Pass());
 }
 
 DomainReliabilityMonitor::RequestInfo::RequestInfo() {}
@@ -131,7 +141,8 @@
       status(request.status()),
       response_code(-1),
       socket_address(request.GetSocketAddress()),
-      was_cached(request.was_cached()) {
+      was_cached(request.was_cached()),
+      load_flags(request.load_flags()) {
   request.GetLoadTimingInfo(&load_timing_info);
   // Can't get response code of a canceled request -- there's no transaction.
   if (status.status() != net::URLRequestStatus::CANCELED)
@@ -144,13 +155,41 @@
   return status.status() != net::URLRequestStatus::CANCELED && !was_cached;
 }
 
+DomainReliabilityContext* DomainReliabilityMonitor::AddContext(
+    scoped_ptr<const DomainReliabilityConfig> config) {
+  DCHECK(config);
+  DCHECK(config->IsValid());
+
+  // Grab domain before we config.Pass().
+  std::string domain = config->domain;
+
+  DomainReliabilityContext* context = new DomainReliabilityContext(
+      time_.get(),
+      scheduler_params_,
+      &dispatcher_,
+      uploader_.get(),
+      config.Pass());
+
+  std::pair<ContextMap::iterator, bool> map_it =
+      contexts_.insert(make_pair(domain, context));
+  // Make sure the domain wasn't already in the map.
+  DCHECK(map_it.second);
+
+  return map_it.first->second;
+}
+
 void DomainReliabilityMonitor::OnRequestLegComplete(
     const RequestInfo& request) {
   if (!request.DefinitelyReachedNetwork())
     return;
 
-  std::map<std::string, DomainReliabilityContext*>::iterator it =
-      contexts_.find(request.url.host());
+  // Don't monitor requests that are not sending cookies, since sending a beacon
+  // for such requests may allow the server to correlate that request with the
+  // user (by correlating a particular config).
+  if (request.load_flags & net::LOAD_DO_NOT_SEND_COOKIES)
+    return;
+
+  ContextMap::iterator it = contexts_.find(request.url.host());
   if (it == contexts_.end())
     return;
   DomainReliabilityContext* context = it->second;
diff --git a/components/domain_reliability/monitor.h b/components/domain_reliability/monitor.h
index cc3d48b..01ef843 100644
--- a/components/domain_reliability/monitor.h
+++ b/components/domain_reliability/monitor.h
@@ -43,19 +43,24 @@
       scoped_ptr<MockableTime> time);
   ~DomainReliabilityMonitor();
 
+  // Adds the "baked-in" configuration(s) for Google sites.
+  void AddBakedInConfigs();
+
   // Should be called from the profile's NetworkDelegate on the corresponding
   // events:
   void OnBeforeRedirect(net::URLRequest* request);
   void OnCompleted(net::URLRequest* request, bool started);
 
-  // Creates a context for testing, adds it to the monitor, and returns a
-  // pointer to it. (The pointer is only valid until the MOnitor is destroyed.)
   DomainReliabilityContext* AddContextForTesting(
       scoped_ptr<const DomainReliabilityConfig> config);
 
+  size_t contexts_size_for_testing() const { return contexts_.size(); }
+
  private:
   friend class DomainReliabilityMonitorTest;
 
+  typedef std::map<std::string, DomainReliabilityContext*> ContextMap;
+
   struct DOMAIN_RELIABILITY_EXPORT RequestInfo {
     RequestInfo();
     RequestInfo(const net::URLRequest& request);
@@ -69,8 +74,13 @@
     net::HostPortPair socket_address;
     net::LoadTimingInfo load_timing_info;
     bool was_cached;
+    int load_flags;
   };
 
+  // Creates a context, adds it to the monitor, and returns a pointer to it.
+  // (The pointer is only valid until the Monitor is destroyed.)
+  DomainReliabilityContext* AddContext(
+      scoped_ptr<const DomainReliabilityConfig> config);
   void OnRequestLegComplete(const RequestInfo& info);
 
   scoped_ptr<MockableTime> time_;
@@ -78,7 +88,7 @@
   DomainReliabilityScheduler::Params scheduler_params_;
   DomainReliabilityDispatcher dispatcher_;
   scoped_ptr<DomainReliabilityUploader> uploader_;
-  std::map<std::string, DomainReliabilityContext*> contexts_;
+  ContextMap contexts_;
 
   DISALLOW_COPY_AND_ASSIGN(DomainReliabilityMonitor);
 };
diff --git a/components/domain_reliability/monitor_unittest.cc b/components/domain_reliability/monitor_unittest.cc
index 59da34b..9ff82c3 100644
--- a/components/domain_reliability/monitor_unittest.cc
+++ b/components/domain_reliability/monitor_unittest.cc
@@ -11,10 +11,12 @@
 #include "base/bind.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/message_loop/message_loop_proxy.h"
+#include "components/domain_reliability/baked_in_configs.h"
 #include "components/domain_reliability/beacon.h"
 #include "components/domain_reliability/config.h"
 #include "components/domain_reliability/test_util.h"
 #include "content/public/test/test_browser_thread_bundle.h"
+#include "net/base/load_flags.h"
 #include "net/url_request/url_request_context_getter.h"
 #include "net/url_request/url_request_status.h"
 #include "net/url_request/url_request_test_util.h"
@@ -39,6 +41,7 @@
 
   static scoped_ptr<const DomainReliabilityConfig> CreateConfig() {
     DomainReliabilityConfig* config = new DomainReliabilityConfig();
+
     DomainReliabilityConfig::Resource* resource;
 
     resource = new DomainReliabilityConfig::Resource();
@@ -47,6 +50,7 @@
         new std::string("http://example/always_report"));
     resource->success_sample_rate = 1.0;
     resource->failure_sample_rate = 1.0;
+    EXPECT_TRUE(resource->IsValid());
     config->resources.push_back(resource);
 
     resource = new DomainReliabilityConfig::Resource();
@@ -55,14 +59,20 @@
         new std::string("http://example/never_report"));
     resource->success_sample_rate = 0.0;
     resource->failure_sample_rate = 0.0;
+    EXPECT_TRUE(resource->IsValid());
     config->resources.push_back(resource);
 
     DomainReliabilityConfig::Collector* collector;
     collector = new DomainReliabilityConfig::Collector();
     collector->upload_url = GURL("https://example/upload");
-    config->domain = "example";
+    EXPECT_TRUE(collector->IsValid());
     config->collectors.push_back(collector);
 
+    config->version = "1";
+    config->valid_until = 1234567890.0;
+    config->domain = "example";
+    EXPECT_TRUE(config->IsValid());
+
     return scoped_ptr<const DomainReliabilityConfig>(config);
   }
 
@@ -71,6 +81,7 @@
     request.status = net::URLRequestStatus();
     request.response_code = 200;
     request.was_cached = false;
+    request.load_flags = 0;
     return request;
   }
 
@@ -118,4 +129,29 @@
   EXPECT_TRUE(CheckNoBeacons(1));
 }
 
+TEST_F(DomainReliabilityMonitorTest, ContextRequestWithDoNotSendCookies) {
+  RequestInfo request = MakeRequestInfo();
+  request.url = GURL("http://example/always_report");
+  request.load_flags = net::LOAD_DO_NOT_SEND_COOKIES;
+  OnRequestLegComplete(request);
+
+  EXPECT_TRUE(CheckNoBeacons(0));
+  EXPECT_TRUE(CheckNoBeacons(1));
+}
+
+TEST_F(DomainReliabilityMonitorTest, AddBakedInConfigs) {
+  // AddBakedInConfigs DCHECKs that the baked-in configs parse correctly, so
+  // this unittest will fail if someone tries to add an invalid config to the
+  // source tree.
+  monitor_.AddBakedInConfigs();
+
+  size_t num_baked_in_configs = 0;
+  for (const char* const* p = kBakedInJsonConfigs; *p; ++p)
+    ++num_baked_in_configs;
+
+  // The monitor should have contexts for all of the baked-in configs, plus the
+  // test one added in the test constructor.
+  EXPECT_EQ(num_baked_in_configs + 1, monitor_.contexts_size_for_testing());
+}
+
 }  // namespace domain_reliability
diff --git a/components/favicon/core/browser/favicon_client.h b/components/favicon/core/browser/favicon_client.h
index fef4723..34cb815b 100644
--- a/components/favicon/core/browser/favicon_client.h
+++ b/components/favicon/core/browser/favicon_client.h
@@ -6,13 +6,18 @@
 #define COMPONENTS_FAVICON_CORE_BROWSER_FAVICON_CLIENT_H_
 
 class FaviconService;
+class GURL;
 
 // This class abstracts operations that depend on the embedder's environment,
-// e.g.
-// Chrome.
+// e.g. Chrome.
 class FaviconClient {
  public:
+  virtual ~FaviconClient() {};
+
   virtual FaviconService* GetFaviconService() = 0;
+
+  // Returns true if the specified URL is bookmarked.
+  virtual bool IsBookmarked(const GURL& url) = 0;
 };
 
 #endif  // COMPONENTS_FAVICON_CORE_BROWSER_FAVICON_CLIENT_H_
diff --git a/components/favicon_base.gypi b/components/favicon_base.gypi
new file mode 100644
index 0000000..105b356
--- /dev/null
+++ b/components/favicon_base.gypi
@@ -0,0 +1,24 @@
+# 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.
+
+{
+  'targets': [
+    {
+      'target_name': 'favicon_base',
+      'type': 'static_library',
+      'dependencies': [
+        '../base/base.gyp:base',
+        '../ui/gfx/gfx.gyp:gfx',
+        '../url/url.gyp:url_lib',
+      ],
+      'sources': [
+        'favicon_base/favicon_types.cc',
+        'favicon_base/favicon_types.h',
+      ],
+      'include_dirs': [
+        '..',
+      ],
+    },
+  ],
+}
diff --git a/components/favicon_base/DEPS b/components/favicon_base/DEPS
new file mode 100644
index 0000000..b273ae3
--- /dev/null
+++ b/components/favicon_base/DEPS
@@ -0,0 +1,3 @@
+include_rules = [
+  "+ui/gfx",
+]
diff --git a/components/favicon_base/favicon_types.cc b/components/favicon_base/favicon_types.cc
new file mode 100644
index 0000000..837da69
--- /dev/null
+++ b/components/favicon_base/favicon_types.cc
@@ -0,0 +1,22 @@
+// 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.
+
+#include "components/favicon_base/favicon_types.h"
+
+namespace favicon_base {
+
+// FaviconImageResult ---------------------------------------------------------
+
+FaviconImageResult::FaviconImageResult() {}
+
+FaviconImageResult::~FaviconImageResult() {}
+
+// FaviconBitmapResult --------------------------------------------------------
+
+FaviconBitmapResult::FaviconBitmapResult()
+    : expired(false), icon_type(INVALID_ICON) {}
+
+FaviconBitmapResult::~FaviconBitmapResult() {}
+
+}  // namespace chrome
diff --git a/components/favicon_base/favicon_types.h b/components/favicon_base/favicon_types.h
new file mode 100644
index 0000000..7f4a7b2
--- /dev/null
+++ b/components/favicon_base/favicon_types.h
@@ -0,0 +1,77 @@
+// 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.
+
+#ifndef COMPONENTS_FAVICON_BASE_FAVICON_TYPES_H_
+#define COMPONENTS_FAVICON_BASE_FAVICON_TYPES_H_
+
+#include "base/memory/ref_counted_memory.h"
+#include "ui/gfx/image/image.h"
+#include "ui/gfx/size.h"
+#include "url/gurl.h"
+
+namespace favicon_base {
+
+typedef int64 FaviconID;
+
+// Defines the icon types. They are also stored in icon_type field of favicons
+// table.
+// The values of the IconTypes are used to select the priority in which favicon
+// data is returned in HistoryBackend and ThumbnailDatabase. Data for the
+// largest IconType takes priority if data for multiple IconTypes is available.
+enum IconType {
+  INVALID_ICON = 0x0,
+  FAVICON = 1 << 0,
+  TOUCH_ICON = 1 << 1,
+  TOUCH_PRECOMPOSED_ICON = 1 << 2
+};
+
+// Defines a gfx::Image of size desired_size_in_dip composed of image
+// representations for each of the desired scale factors.
+struct FaviconImageResult {
+  FaviconImageResult();
+  ~FaviconImageResult();
+
+  // The resulting image.
+  gfx::Image image;
+
+  // The URL of the favicon which contains all of the image representations of
+  // |image|.
+  // TODO(pkotwicz): Return multiple |icon_urls| to allow |image| to have
+  // representations from several favicons once content::FaviconStatus supports
+  // multiple URLs.
+  GURL icon_url;
+};
+
+// Defines a favicon bitmap which best matches the desired DIP size and one of
+// the desired scale factors.
+struct FaviconBitmapResult {
+  FaviconBitmapResult();
+  ~FaviconBitmapResult();
+
+  // Returns true if |bitmap_data| contains a valid bitmap.
+  bool is_valid() const { return bitmap_data.get() && bitmap_data->size(); }
+
+  // Indicates whether |bitmap_data| is expired.
+  bool expired;
+
+  // The bits of the bitmap.
+  scoped_refptr<base::RefCountedMemory> bitmap_data;
+
+  // The pixel dimensions of |bitmap_data|.
+  gfx::Size pixel_size;
+
+  // The URL of the containing favicon.
+  GURL icon_url;
+
+  // The icon type of the containing favicon.
+  IconType icon_type;
+};
+
+// Define type with same structure as FaviconBitmapResult for passing data to
+// HistoryBackend::SetFavicons().
+typedef FaviconBitmapResult FaviconBitmapData;
+
+}  // namespace chrome
+
+#endif  // COMPONENTS_FAVICON_BASE_FAVICON_TYPES_H_
diff --git a/components/infobars.gypi b/components/infobars.gypi
new file mode 100644
index 0000000..7ca15b5
--- /dev/null
+++ b/components/infobars.gypi
@@ -0,0 +1,32 @@
+# 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.
+
+{
+  'targets': [
+    {
+      'target_name': 'infobars_core',
+      'type': 'static_library',
+      'include_dirs': [
+        '..',
+      ],
+      'dependencies': [
+        '../base/base.gyp:base',
+        '../skia/skia.gyp:skia',
+        '../ui/gfx/gfx.gyp:gfx',
+      ],
+      'sources': [
+        'infobars/core/infobar.cc',
+        'infobars/core/infobar.h',
+        'infobars/core/infobar_container.cc',
+        'infobars/core/infobar_container.h',
+        'infobars/core/infobar_delegate.cc',
+        'infobars/core/infobar_delegate.h',
+        'infobars/core/infobar_manager.cc',
+        'infobars/core/infobar_manager.h',
+        'infobars/core/infobars_switches.cc',
+        'infobars/core/infobars_switches.h',
+      ],
+    },
+  ],
+}
diff --git a/components/infobars/DEPS b/components/infobars/DEPS
new file mode 100644
index 0000000..4f66f6c
--- /dev/null
+++ b/components/infobars/DEPS
@@ -0,0 +1,8 @@
+include_rules = [
+  # Infobars is a layered component; subdirectories must explicitly introduce
+  # the ability to use the content layer as appropriate.
+  "-content",
+
+  "+ui",
+  "+third_party/skia"
+]
diff --git a/components/infobars/OWNERS b/components/infobars/OWNERS
new file mode 100644
index 0000000..bf426d6
--- /dev/null
+++ b/components/infobars/OWNERS
@@ -0,0 +1 @@
+pkasting@chromium.org
diff --git a/components/infobars/README b/components/infobars/README
new file mode 100644
index 0000000..8b736f1
--- /dev/null
+++ b/components/infobars/README
@@ -0,0 +1,7 @@
+- Infobars is a layered component
+(https://sites.google.com/a/chromium.org/dev/developers/design-documents/layered-components-design)
+to enable it to be shared cleanly on iOS.
+
+Directory structure:
+core/: shared code that does not depend on src/content/
+content/: Driver for the shared code based on the content layer.
diff --git a/components/infobars/core/infobar.cc b/components/infobars/core/infobar.cc
new file mode 100644
index 0000000..1ddfffd
--- /dev/null
+++ b/components/infobars/core/infobar.cc
@@ -0,0 +1,179 @@
+// 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.
+
+#include "components/infobars/core/infobar.h"
+
+#include <cmath>
+
+#include "base/logging.h"
+#include "build/build_config.h"
+#include "components/infobars/core/infobar_container.h"
+#include "components/infobars/core/infobar_manager.h"
+#include "ui/gfx/animation/slide_animation.h"
+
+namespace infobars {
+
+InfoBar::InfoBar(scoped_ptr<InfoBarDelegate> delegate)
+    : owner_(NULL),
+      delegate_(delegate.Pass()),
+      container_(NULL),
+      animation_(this),
+      arrow_height_(0),
+      arrow_target_height_(kDefaultArrowTargetHeight),
+      arrow_half_width_(0),
+      bar_height_(0),
+      bar_target_height_(kDefaultBarTargetHeight) {
+  DCHECK(delegate_ != NULL);
+  animation_.SetTweenType(gfx::Tween::LINEAR);
+  delegate_->set_infobar(this);
+}
+
+InfoBar::~InfoBar() {
+  DCHECK(!owner_);
+}
+
+// static
+SkColor InfoBar::GetTopColor(InfoBarDelegate::Type infobar_type) {
+  static const SkColor kWarningBackgroundColorTop =
+      SkColorSetRGB(255, 242, 183);  // Yellow
+  static const SkColor kPageActionBackgroundColorTop =
+      SkColorSetRGB(237, 237, 237);  // Gray
+  return (infobar_type == InfoBarDelegate::WARNING_TYPE) ?
+      kWarningBackgroundColorTop : kPageActionBackgroundColorTop;
+}
+
+// static
+SkColor InfoBar::GetBottomColor(InfoBarDelegate::Type infobar_type) {
+  static const SkColor kWarningBackgroundColorBottom =
+      SkColorSetRGB(250, 230, 145);  // Yellow
+  static const SkColor kPageActionBackgroundColorBottom =
+      SkColorSetRGB(217, 217, 217);  // Gray
+  return (infobar_type == InfoBarDelegate::WARNING_TYPE) ?
+      kWarningBackgroundColorBottom : kPageActionBackgroundColorBottom;
+}
+
+void InfoBar::SetOwner(InfoBarManager* owner) {
+  DCHECK(!owner_);
+  owner_ = owner;
+  delegate_->StoreActiveEntryUniqueID();
+  PlatformSpecificSetOwner();
+}
+
+void InfoBar::Show(bool animate) {
+  PlatformSpecificShow(animate);
+  if (animate) {
+    animation_.Show();
+  } else {
+    animation_.Reset(1.0);
+    RecalculateHeights(true);
+  }
+}
+
+void InfoBar::Hide(bool animate) {
+  PlatformSpecificHide(animate);
+  if (animate) {
+    animation_.Hide();
+  } else {
+    animation_.Reset(0.0);
+    // We want to remove ourselves from the container immediately even if we
+    // still have an owner, which MaybeDelete() won't do.
+    DCHECK(container_);
+    container_->RemoveInfoBar(this);
+    MaybeDelete();  // Necessary if the infobar was already closing.
+  }
+}
+
+void InfoBar::SetArrowTargetHeight(int height) {
+  DCHECK_LE(height, kMaximumArrowTargetHeight);
+  // Once the closing animation starts, we ignore further requests to change the
+  // target height.
+  if ((arrow_target_height_ != height) && !animation_.IsClosing()) {
+    arrow_target_height_ = height;
+    RecalculateHeights(false);
+  }
+}
+
+void InfoBar::CloseSoon() {
+  owner_ = NULL;
+  PlatformSpecificOnCloseSoon();
+  MaybeDelete();
+}
+
+void InfoBar::RemoveSelf() {
+  if (owner_)
+    owner_->RemoveInfoBar(this);
+}
+
+void InfoBar::SetBarTargetHeight(int height) {
+  if (bar_target_height_ != height) {
+    bar_target_height_ = height;
+    RecalculateHeights(false);
+  }
+}
+
+void InfoBar::AnimationProgressed(const gfx::Animation* animation) {
+  RecalculateHeights(false);
+}
+
+void InfoBar::AnimationEnded(const gfx::Animation* animation) {
+  // When the animation ends, we must ensure the container is notified even if
+  // the heights haven't changed, lest it never get an "animation finished"
+  // notification.  (If the browser doesn't get this notification, it will not
+  // bother to re-layout the content area for the new infobar size.)
+  RecalculateHeights(true);
+  MaybeDelete();
+}
+
+void InfoBar::RecalculateHeights(bool force_notify) {
+  int old_arrow_height = arrow_height_;
+  int old_bar_height = bar_height_;
+
+  // Find the desired arrow height/half-width.  The arrow area is
+  // |arrow_height_| * |arrow_half_width_|.  When the bar is opening or closing,
+  // scaling each of these with the square root of the animation value causes a
+  // linear animation of the area, which matches the perception of the animation
+  // of the bar portion.
+  double scale_factor = sqrt(animation_.GetCurrentValue());
+  arrow_height_ = static_cast<int>(arrow_target_height_ * scale_factor);
+  if (animation_.is_animating()) {
+    arrow_half_width_ = static_cast<int>(std::min(arrow_target_height_,
+        kMaximumArrowTargetHalfWidth) * scale_factor);
+  } else {
+    // When the infobar is not animating (i.e. fully open), we set the
+    // half-width to be proportionally the same distance between its default and
+    // maximum values as the height is between its.
+    arrow_half_width_ = kDefaultArrowTargetHalfWidth +
+        ((kMaximumArrowTargetHalfWidth - kDefaultArrowTargetHalfWidth) *
+         ((arrow_height_ - kDefaultArrowTargetHeight) /
+          (kMaximumArrowTargetHeight - kDefaultArrowTargetHeight)));
+  }
+  // Add pixels for the stroke, if the arrow is to be visible at all.  Without
+  // this, changing the arrow height from 0 to kSeparatorLineHeight would
+  // produce no visible effect, because the stroke would paint atop the divider
+  // line above the infobar.
+  if (arrow_height_)
+    arrow_height_ += kSeparatorLineHeight;
+
+  bar_height_ = animation_.CurrentValueBetween(0, bar_target_height_);
+
+  // Don't re-layout if nothing has changed, e.g. because the animation step was
+  // not large enough to actually change the heights by at least a pixel.
+  bool heights_differ =
+      (old_arrow_height != arrow_height_) || (old_bar_height != bar_height_);
+  if (heights_differ)
+    PlatformSpecificOnHeightsRecalculated();
+
+  if (container_ && (heights_differ || force_notify))
+    container_->OnInfoBarStateChanged(animation_.is_animating());
+}
+
+void InfoBar::MaybeDelete() {
+  if (!owner_ && (animation_.GetCurrentValue() == 0.0)) {
+    if (container_)
+      container_->RemoveInfoBar(this);
+    delete this;
+  }
+}
+
+}  // namespace infobars
diff --git a/components/infobars/core/infobar.h b/components/infobars/core/infobar.h
new file mode 100644
index 0000000..9aef299
--- /dev/null
+++ b/components/infobars/core/infobar.h
@@ -0,0 +1,153 @@
+// 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.
+
+#ifndef COMPONENTS_INFOBARS_CORE_INFOBAR_H_
+#define COMPONENTS_INFOBARS_CORE_INFOBAR_H_
+
+#include <utility>
+
+#include "base/memory/scoped_ptr.h"
+#include "components/infobars/core/infobar_delegate.h"
+#include "third_party/skia/include/core/SkColor.h"
+#include "ui/gfx/animation/animation_delegate.h"
+#include "ui/gfx/animation/slide_animation.h"
+#include "ui/gfx/size.h"
+
+namespace infobars {
+
+class InfoBarContainer;
+class InfoBarManager;
+
+// InfoBar is a cross-platform base class for an infobar "view" (in the MVC
+// sense), which owns a corresponding InfoBarDelegate "model".  Typically,
+// a caller will call XYZInfoBarDelegate::Create() and pass in the
+// InfoBarManager for the relevant tab.  This will create an XYZInfoBarDelegate,
+// create a platform-specific subclass of InfoBar to own it, and then call
+// InfoBarManager::AddInfoBar() to give it ownership of the infobar.
+// During its life, the InfoBar may be shown and hidden as the owning tab is
+// switched between the foreground and background.  Eventually, InfoBarManager
+// will instruct the InfoBar to close itself.  At this point, the InfoBar will
+// optionally animate closed; once it's no longer visible, it deletes itself,
+// destroying the InfoBarDelegate in the process.
+//
+// Thus, InfoBarDelegate and InfoBar implementations can assume they share
+// lifetimes, and not NULL-check each other; but if one needs to reach back into
+// the owning InfoBarManager, it must check whether that's still possible.
+class InfoBar : public gfx::AnimationDelegate {
+ public:
+  // These are the types passed as Details for infobar-related notifications.
+  typedef InfoBar AddedDetails;
+  typedef std::pair<InfoBar*, bool> RemovedDetails;
+  typedef std::pair<InfoBar*, InfoBar*> ReplacedDetails;
+
+  // Platforms must define these.
+  static const int kDefaultBarTargetHeight;
+  static const int kSeparatorLineHeight;
+  static const int kDefaultArrowTargetHeight;
+  static const int kMaximumArrowTargetHeight;
+  // The half-width (see comments on |arrow_half_width_| below) scales to its
+  // default and maximum values proportionally to how the height scales to its.
+  static const int kDefaultArrowTargetHalfWidth;
+  static const int kMaximumArrowTargetHalfWidth;
+
+  explicit InfoBar(scoped_ptr<InfoBarDelegate> delegate);
+  virtual ~InfoBar();
+
+  static SkColor GetTopColor(InfoBarDelegate::Type infobar_type);
+  static SkColor GetBottomColor(InfoBarDelegate::Type infobar_type);
+
+  InfoBarManager* owner() { return owner_; }
+  InfoBarDelegate* delegate() { return delegate_.get(); }
+  const InfoBarDelegate* delegate() const { return delegate_.get(); }
+  void set_container(InfoBarContainer* container) { container_ = container; }
+
+  // Sets |owner_|.  This also calls StoreActiveEntryUniqueID() on |delegate_|.
+  // This must only be called once as there's no way to extract an infobar from
+  // its owner without deleting it, for reparenting in another tab.
+  void SetOwner(InfoBarManager* owner);
+
+  // Makes the infobar visible.  If |animate| is true, the infobar is then
+  // animated to full size.
+  void Show(bool animate);
+
+  // Makes the infobar hidden.  If |animate| is false, the infobar is
+  // immediately removed from the container, and, if now unowned, deleted.  If
+  // |animate| is true, the infobar is animated to zero size, ultimately
+  // triggering a call to AnimationEnded().
+  void Hide(bool animate);
+
+  // Changes the target height of the arrow portion of the infobar.  This has no
+  // effect once the infobar is animating closed.
+  void SetArrowTargetHeight(int height);
+
+  // Notifies the infobar that it is no longer owned and should delete itself
+  // once it is invisible.
+  void CloseSoon();
+
+  // Forwards a close request to our owner.  This is a no-op if we're already
+  // unowned.
+  void RemoveSelf();
+
+  // Changes the target height of the main ("bar") portion of the infobar.
+  void SetBarTargetHeight(int height);
+
+  const gfx::SlideAnimation& animation() const { return animation_; }
+  int arrow_height() const { return arrow_height_; }
+  int arrow_target_height() const { return arrow_target_height_; }
+  int arrow_half_width() const { return arrow_half_width_; }
+  int total_height() const { return arrow_height_ + bar_height_; }
+
+ protected:
+  // gfx::AnimationDelegate:
+  virtual void AnimationProgressed(const gfx::Animation* animation) OVERRIDE;
+
+  const InfoBarContainer* container() const { return container_; }
+  InfoBarContainer* container() { return container_; }
+  gfx::SlideAnimation* animation() { return &animation_; }
+  int bar_height() const { return bar_height_; }
+  int bar_target_height() const { return bar_target_height_; }
+
+  // Platforms may optionally override these if they need to do work during
+  // processing of the given calls.
+  virtual void PlatformSpecificSetOwner() {}
+  virtual void PlatformSpecificShow(bool animate) {}
+  virtual void PlatformSpecificHide(bool animate) {}
+  virtual void PlatformSpecificOnCloseSoon() {}
+  virtual void PlatformSpecificOnHeightsRecalculated() {}
+
+ private:
+  // gfx::AnimationDelegate:
+  virtual void AnimationEnded(const gfx::Animation* animation) OVERRIDE;
+
+  // Finds the new desired arrow and bar heights, and if they differ from the
+  // current ones, calls PlatformSpecificOnHeightRecalculated().  Informs our
+  // container our state has changed if either the heights have changed or
+  // |force_notify| is set.
+  void RecalculateHeights(bool force_notify);
+
+  // Checks whether the infobar is unowned and done with all animations.  If so,
+  // notifies the container that it should remove this infobar, and deletes
+  // itself.
+  void MaybeDelete();
+
+  InfoBarManager* owner_;
+  scoped_ptr<InfoBarDelegate> delegate_;
+  InfoBarContainer* container_;
+  gfx::SlideAnimation animation_;
+
+  // The current and target heights of the arrow and bar portions, and half the
+  // current arrow width.  (It's easier to work in half-widths as we draw the
+  // arrow as two halves on either side of a center point.)
+  int arrow_height_;         // Includes both fill and top stroke.
+  int arrow_target_height_;
+  int arrow_half_width_;     // Includes only fill.
+  int bar_height_;           // Includes both fill and bottom separator.
+  int bar_target_height_;
+
+  DISALLOW_COPY_AND_ASSIGN(InfoBar);
+};
+
+}  // namespace infobars
+
+#endif  // COMPONENTS_INFOBARS_CORE_INFOBAR_H_
diff --git a/components/infobars/core/infobar_container.cc b/components/infobars/core/infobar_container.cc
new file mode 100644
index 0000000..f435dd7
--- /dev/null
+++ b/components/infobars/core/infobar_container.cc
@@ -0,0 +1,178 @@
+// 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.
+
+#include "components/infobars/core/infobar_container.h"
+
+#include <algorithm>
+
+#include "base/logging.h"
+#include "build/build_config.h"
+#include "components/infobars/core/infobar.h"
+#include "components/infobars/core/infobar_delegate.h"
+#include "ui/gfx/animation/slide_animation.h"
+
+namespace infobars {
+
+InfoBarContainer::Delegate::~Delegate() {
+}
+
+InfoBarContainer::InfoBarContainer(Delegate* delegate)
+    : delegate_(delegate),
+      infobar_manager_(NULL),
+      top_arrow_target_height_(InfoBar::kDefaultArrowTargetHeight) {
+}
+
+InfoBarContainer::~InfoBarContainer() {
+  // RemoveAllInfoBarsForDestruction() should have already cleared our infobars.
+  DCHECK(infobars_.empty());
+  if (infobar_manager_)
+    infobar_manager_->RemoveObserver(this);
+}
+
+void InfoBarContainer::ChangeInfoBarManager(InfoBarManager* infobar_manager) {
+  if (infobar_manager_)
+    infobar_manager_->RemoveObserver(this);
+
+  // Hides all infobars in this container without animation.
+  while (!infobars_.empty()) {
+    InfoBar* infobar = infobars_.front();
+    // Inform the infobar that it's hidden.  If it was already closing, this
+    // deletes it.  Otherwise, this ensures the infobar will be deleted if it's
+    // closed while it's not in an InfoBarContainer.
+    infobar->Hide(false);
+  }
+
+  infobar_manager_ = infobar_manager;
+  if (infobar_manager_) {
+    infobar_manager_->AddObserver(this);
+
+    for (size_t i = 0; i < infobar_manager_->infobar_count(); ++i) {
+      // As when we removed the infobars above, we prevent callbacks to
+      // OnInfoBarStateChanged() for each infobar.
+      AddInfoBar(infobar_manager_->infobar_at(i), i, false, NO_CALLBACK);
+    }
+  }
+
+  // Now that everything is up to date, signal the delegate to re-layout.
+  OnInfoBarStateChanged(false);
+}
+
+int InfoBarContainer::GetVerticalOverlap(int* total_height) {
+  // Our |total_height| is the sum of the preferred heights of the InfoBars
+  // contained within us plus the |vertical_overlap|.
+  int vertical_overlap = 0;
+  int next_infobar_y = 0;
+
+  for (InfoBars::iterator i(infobars_.begin()); i != infobars_.end(); ++i) {
+    InfoBar* infobar = *i;
+    next_infobar_y -= infobar->arrow_height();
+    vertical_overlap = std::max(vertical_overlap, -next_infobar_y);
+    next_infobar_y += infobar->total_height();
+  }
+
+  if (total_height)
+    *total_height = next_infobar_y + vertical_overlap;
+  return vertical_overlap;
+}
+
+void InfoBarContainer::SetMaxTopArrowHeight(int height) {
+  // Decrease the height by the arrow stroke thickness, which is the separator
+  // line height, because the infobar arrow target heights are without-stroke.
+  top_arrow_target_height_ = std::min(
+      std::max(height - InfoBar::kSeparatorLineHeight, 0),
+      InfoBar::kMaximumArrowTargetHeight);
+  UpdateInfoBarArrowTargetHeights();
+}
+
+void InfoBarContainer::OnInfoBarStateChanged(bool is_animating) {
+  if (delegate_)
+    delegate_->InfoBarContainerStateChanged(is_animating);
+  UpdateInfoBarArrowTargetHeights();
+  PlatformSpecificInfoBarStateChanged(is_animating);
+}
+
+void InfoBarContainer::RemoveInfoBar(InfoBar* infobar) {
+  infobar->set_container(NULL);
+  InfoBars::iterator i(std::find(infobars_.begin(), infobars_.end(), infobar));
+  DCHECK(i != infobars_.end());
+  PlatformSpecificRemoveInfoBar(infobar);
+  infobars_.erase(i);
+}
+
+void InfoBarContainer::RemoveAllInfoBarsForDestruction() {
+  // Before we remove any children, we reset |delegate_|, so that no removals
+  // will result in us trying to call
+  // delegate_->InfoBarContainerStateChanged().  This is important because at
+  // this point |delegate_| may be shutting down, and it's at best unimportant
+  // and at worst disastrous to call that.
+  delegate_ = NULL;
+  ChangeInfoBarManager(NULL);
+}
+
+void InfoBarContainer::OnInfoBarAdded(InfoBar* infobar) {
+  AddInfoBar(infobar, infobars_.size(), true, WANT_CALLBACK);
+}
+
+void InfoBarContainer::OnInfoBarRemoved(InfoBar* infobar, bool animate) {
+  infobar->Hide(animate);
+  UpdateInfoBarArrowTargetHeights();
+}
+
+void InfoBarContainer::OnInfoBarReplaced(InfoBar* old_infobar,
+                                         InfoBar* new_infobar) {
+  PlatformSpecificReplaceInfoBar(old_infobar, new_infobar);
+  InfoBars::const_iterator i(std::find(infobars_.begin(), infobars_.end(),
+                                       old_infobar));
+  DCHECK(i != infobars_.end());
+  size_t position = i - infobars_.begin();
+  old_infobar->Hide(false);
+  AddInfoBar(new_infobar, position, false, WANT_CALLBACK);
+}
+
+void InfoBarContainer::OnManagerShuttingDown(InfoBarManager* manager) {
+  DCHECK_EQ(infobar_manager_, manager);
+  infobar_manager_->RemoveObserver(this);
+  infobar_manager_ = NULL;
+}
+
+void InfoBarContainer::AddInfoBar(InfoBar* infobar,
+                                  size_t position,
+                                  bool animate,
+                                  CallbackStatus callback_status) {
+  DCHECK(std::find(infobars_.begin(), infobars_.end(), infobar) ==
+      infobars_.end());
+  DCHECK_LE(position, infobars_.size());
+  infobars_.insert(infobars_.begin() + position, infobar);
+  UpdateInfoBarArrowTargetHeights();
+  PlatformSpecificAddInfoBar(infobar, position);
+  if (callback_status == WANT_CALLBACK)
+    infobar->set_container(this);
+  infobar->Show(animate);
+  if (callback_status == NO_CALLBACK)
+    infobar->set_container(this);
+}
+
+void InfoBarContainer::UpdateInfoBarArrowTargetHeights() {
+  for (size_t i = 0; i < infobars_.size(); ++i)
+    infobars_[i]->SetArrowTargetHeight(ArrowTargetHeightForInfoBar(i));
+}
+
+int InfoBarContainer::ArrowTargetHeightForInfoBar(size_t infobar_index) const {
+  if (!delegate_ || !delegate_->DrawInfoBarArrows(NULL))
+    return 0;
+  if (infobar_index == 0)
+    return top_arrow_target_height_;
+  const gfx::SlideAnimation& first_infobar_animation =
+      const_cast<const InfoBar*>(infobars_.front())->animation();
+  if ((infobar_index > 1) || first_infobar_animation.IsShowing())
+    return InfoBar::kDefaultArrowTargetHeight;
+  // When the first infobar is animating closed, we animate the second infobar's
+  // arrow target height from the default to the top target height.  Note that
+  // the animation values here are going from 1.0 -> 0.0 as the top bar closes.
+  return top_arrow_target_height_ + static_cast<int>(
+      (InfoBar::kDefaultArrowTargetHeight - top_arrow_target_height_) *
+          first_infobar_animation.GetCurrentValue());
+}
+
+}  // namespace infobars
diff --git a/components/infobars/core/infobar_container.h b/components/infobars/core/infobar_container.h
new file mode 100644
index 0000000..6663821
--- /dev/null
+++ b/components/infobars/core/infobar_container.h
@@ -0,0 +1,137 @@
+// 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.
+
+#ifndef COMPONENTS_INFOBARS_CORE_INFOBAR_CONTAINER_H_
+#define COMPONENTS_INFOBARS_CORE_INFOBAR_CONTAINER_H_
+
+#include <vector>
+
+#include "base/compiler_specific.h"
+#include "base/time/time.h"
+#include "components/infobars/core/infobar_manager.h"
+#include "third_party/skia/include/core/SkColor.h"
+
+namespace infobars {
+
+class InfoBar;
+
+// InfoBarContainer is a cross-platform base class to handle the visibility-
+// related aspects of InfoBars.  While InfoBarManager owns the InfoBars, the
+// InfoBarContainer is responsible for telling particular InfoBars that they
+// should be hidden or visible.
+//
+// Platforms need to subclass this to implement a few platform-specific
+// functions, which are pure virtual here.
+class InfoBarContainer : public InfoBarManager::Observer {
+ public:
+  class Delegate {
+   public:
+    // The separator color may vary depending on where the container is hosted.
+    virtual SkColor GetInfoBarSeparatorColor() const = 0;
+
+    // The delegate is notified each time the infobar container changes height,
+    // as well as when it stops animating.
+    virtual void InfoBarContainerStateChanged(bool is_animating) = 0;
+
+    // The delegate needs to tell us whether "unspoofable" arrows should be
+    // drawn, and if so, at what |x| coordinate.  |x| may be NULL.
+    virtual bool DrawInfoBarArrows(int* x) const = 0;
+
+   protected:
+    virtual ~Delegate();
+  };
+
+  explicit InfoBarContainer(Delegate* delegate);
+  virtual ~InfoBarContainer();
+
+  // Changes the InfoBarManager for which this container is showing infobars.
+  // This will hide all current infobars, remove them from the container, add
+  // the infobars from |infobar_manager|, and show them all.  |infobar_manager|
+  // may be NULL.
+  void ChangeInfoBarManager(InfoBarManager* infobar_manager);
+
+  // Returns the amount by which to overlap the toolbar above, and, when
+  // |total_height| is non-NULL, set it to the height of the InfoBarContainer
+  // (including overlap).
+  int GetVerticalOverlap(int* total_height);
+
+  // Called by the delegate when the distance between what the top infobar's
+  // "unspoofable" arrow would point to and the top infobar itself changes.
+  // This enables the top infobar to show a longer arrow (e.g. because of a
+  // visible bookmark bar) or shorter (e.g. due to being in a popup window) if
+  // desired.
+  //
+  // IMPORTANT: This MUST NOT result in a call back to
+  // Delegate::InfoBarContainerStateChanged() unless it causes an actual
+  // change, lest we infinitely recurse.
+  void SetMaxTopArrowHeight(int height);
+
+  // Called when a contained infobar has animated or by some other means changed
+  // its height, or when it stops animating.  The container is expected to do
+  // anything necessary to respond, e.g. re-layout.
+  void OnInfoBarStateChanged(bool is_animating);
+
+  // Called by |infobar| to request that it be removed from the container.  At
+  // this point, |infobar| should already be hidden.
+  void RemoveInfoBar(InfoBar* infobar);
+
+  const Delegate* delegate() const { return delegate_; }
+
+ protected:
+  // Subclasses must call this during destruction, so that we can remove
+  // infobars (which will call the pure virtual functions below) while the
+  // subclass portion of |this| has not yet been destroyed.
+  void RemoveAllInfoBarsForDestruction();
+
+  // These must be implemented on each platform to e.g. adjust the visible
+  // object hierarchy.  The first two functions should each be called exactly
+  // once during an infobar's life (see comments on RemoveInfoBar() and
+  // AddInfoBar()).
+  virtual void PlatformSpecificAddInfoBar(InfoBar* infobar,
+                                          size_t position) = 0;
+  // TODO(miguelg): Remove this; it is only necessary for Android, and only
+  // until the translate infobar is implemented as three different infobars like
+  // GTK does.
+  virtual void PlatformSpecificReplaceInfoBar(InfoBar* old_infobar,
+                                              InfoBar* new_infobar) {}
+  virtual void PlatformSpecificRemoveInfoBar(InfoBar* infobar) = 0;
+  virtual void PlatformSpecificInfoBarStateChanged(bool is_animating) {}
+
+ private:
+  typedef std::vector<InfoBar*> InfoBars;
+
+  // InfoBarManager::Observer:
+  virtual void OnInfoBarAdded(InfoBar* infobar) OVERRIDE;
+  virtual void OnInfoBarRemoved(InfoBar* infobar, bool animate) OVERRIDE;
+  virtual void OnInfoBarReplaced(InfoBar* old_infobar,
+                                 InfoBar* new_infobar) OVERRIDE;
+  virtual void OnManagerShuttingDown(InfoBarManager* manager) OVERRIDE;
+
+  // Adds |infobar| to this container before the existing infobar at position
+  // |position| and calls Show() on it.  |animate| is passed along to
+  // infobar->Show().  Depending on the value of |callback_status|, this calls
+  // infobar->set_container(this) either before or after the call to Show() so
+  // that OnInfoBarStateChanged() either will or won't be called as a result.
+  enum CallbackStatus { NO_CALLBACK, WANT_CALLBACK };
+  void AddInfoBar(InfoBar* infobar,
+                  size_t position,
+                  bool animate,
+                  CallbackStatus callback_status);
+
+  void UpdateInfoBarArrowTargetHeights();
+  int ArrowTargetHeightForInfoBar(size_t infobar_index) const;
+
+  Delegate* delegate_;
+  InfoBarManager* infobar_manager_;
+  InfoBars infobars_;
+
+  // Calculated in SetMaxTopArrowHeight().
+  int top_arrow_target_height_;
+
+  DISALLOW_COPY_AND_ASSIGN(InfoBarContainer);
+};
+
+}  // namespace infobars
+
+#endif  // COMPONENTS_INFOBARS_CORE_INFOBAR_CONTAINER_H_
diff --git a/components/infobars/core/infobar_delegate.cc b/components/infobars/core/infobar_delegate.cc
new file mode 100644
index 0000000..d3f5165
--- /dev/null
+++ b/components/infobars/core/infobar_delegate.cc
@@ -0,0 +1,111 @@
+// 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.
+
+#include "components/infobars/core/infobar_delegate.h"
+
+#include "base/logging.h"
+#include "build/build_config.h"
+#include "components/infobars/core/infobar.h"
+#include "components/infobars/core/infobar_manager.h"
+#include "ui/base/resource/resource_bundle.h"
+
+namespace infobars {
+
+const int InfoBarDelegate::kNoIconID = 0;
+
+InfoBarDelegate::~InfoBarDelegate() {
+}
+
+InfoBarDelegate::InfoBarAutomationType
+    InfoBarDelegate::GetInfoBarAutomationType() const {
+  return UNKNOWN_INFOBAR;
+}
+
+bool InfoBarDelegate::EqualsDelegate(InfoBarDelegate* delegate) const {
+  return false;
+}
+
+bool InfoBarDelegate::ShouldExpire(const NavigationDetails& details) const {
+  if (!details.is_navigation_to_different_page)
+    return false;
+
+  return ShouldExpireInternal(details);
+}
+
+void InfoBarDelegate::InfoBarDismissed() {
+}
+
+int InfoBarDelegate::GetIconID() const {
+  return kNoIconID;
+}
+
+InfoBarDelegate::Type InfoBarDelegate::GetInfoBarType() const {
+  return WARNING_TYPE;
+}
+
+AutoLoginInfoBarDelegate* InfoBarDelegate::AsAutoLoginInfoBarDelegate() {
+  return NULL;
+}
+
+ConfirmInfoBarDelegate* InfoBarDelegate::AsConfirmInfoBarDelegate() {
+  return NULL;
+}
+
+ExtensionInfoBarDelegate* InfoBarDelegate::AsExtensionInfoBarDelegate() {
+  return NULL;
+}
+
+InsecureContentInfoBarDelegate*
+    InfoBarDelegate::AsInsecureContentInfoBarDelegate() {
+  return NULL;
+}
+
+MediaStreamInfoBarDelegate* InfoBarDelegate::AsMediaStreamInfoBarDelegate() {
+  return NULL;
+}
+
+PopupBlockedInfoBarDelegate* InfoBarDelegate::AsPopupBlockedInfoBarDelegate() {
+  return NULL;
+}
+
+RegisterProtocolHandlerInfoBarDelegate*
+    InfoBarDelegate::AsRegisterProtocolHandlerInfoBarDelegate() {
+  return NULL;
+}
+
+ScreenCaptureInfoBarDelegate*
+    InfoBarDelegate::AsScreenCaptureInfoBarDelegate() {
+  return NULL;
+}
+
+ThemeInstalledInfoBarDelegate*
+    InfoBarDelegate::AsThemePreviewInfobarDelegate() {
+  return NULL;
+}
+
+TranslateInfoBarDelegate* InfoBarDelegate::AsTranslateInfoBarDelegate() {
+  return NULL;
+}
+
+void InfoBarDelegate::StoreActiveEntryUniqueID() {
+  contents_unique_id_ = infobar()->owner()->GetActiveEntryID();
+}
+
+gfx::Image InfoBarDelegate::GetIcon() const {
+  int icon_id = GetIconID();
+  return (icon_id == kNoIconID) ? gfx::Image() :
+      ResourceBundle::GetSharedInstance().GetNativeImageNamed(icon_id);
+}
+
+InfoBarDelegate::InfoBarDelegate() : contents_unique_id_(0) {
+}
+
+bool InfoBarDelegate::ShouldExpireInternal(
+    const NavigationDetails& details) const {
+  // NOTE: If you change this, be sure to check and adjust the behavior of
+  // anyone who overrides this as necessary!
+  return (contents_unique_id_ != details.entry_id) || details.is_reload;
+}
+
+}  // namespace infobars
diff --git a/components/infobars/core/infobar_delegate.h b/components/infobars/core/infobar_delegate.h
new file mode 100644
index 0000000..b6d63ac
--- /dev/null
+++ b/components/infobars/core/infobar_delegate.h
@@ -0,0 +1,148 @@
+// 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.
+
+#ifndef COMPONENTS_INFOBARS_CORE_INFOBAR_DELEGATE_H_
+#define COMPONENTS_INFOBARS_CORE_INFOBAR_DELEGATE_H_
+
+#include "base/basictypes.h"
+#include "base/strings/string16.h"
+#include "ui/base/window_open_disposition.h"
+
+class AutoLoginInfoBarDelegate;
+class ConfirmInfoBarDelegate;
+class ExtensionInfoBarDelegate;
+class InsecureContentInfoBarDelegate;
+class MediaStreamInfoBarDelegate;
+class PopupBlockedInfoBarDelegate;
+class RegisterProtocolHandlerInfoBarDelegate;
+class ScreenCaptureInfoBarDelegate;
+class ThemeInstalledInfoBarDelegate;
+class ThreeDAPIInfoBarDelegate;
+class TranslateInfoBarDelegate;
+
+namespace gfx {
+class Image;
+}
+
+namespace infobars {
+
+class InfoBar;
+
+// An interface implemented by objects wishing to control an InfoBar.
+// Implementing this interface is not sufficient to use an InfoBar, since it
+// does not map to a specific InfoBar type. Instead, you must implement
+// ConfirmInfoBarDelegate, or override with your own delegate for your own
+// InfoBar variety.
+class InfoBarDelegate {
+ public:
+  // The type of the infobar. It controls its appearance, such as its background
+  // color.
+  enum Type {
+    WARNING_TYPE,
+    PAGE_ACTION_TYPE,
+  };
+
+  enum InfoBarAutomationType {
+    CONFIRM_INFOBAR,
+    PASSWORD_INFOBAR,
+    RPH_INFOBAR,
+    UNKNOWN_INFOBAR,
+  };
+
+  // Describes navigation events, used to decide whether infobars should be
+  // dismissed.
+  struct NavigationDetails {
+    // Unique identifier for the entry.
+    int entry_id;
+    // True if it is a navigation to a different page (as opposed to in-page).
+    bool is_navigation_to_different_page;
+    // True if the entry replaced the existing one.
+    bool did_replace_entry;
+    // True for the main frame, false for a sub-frame.
+    bool is_main_frame;
+    bool is_reload;
+    bool is_redirect;
+  };
+
+  // Value to use when the InfoBar has no icon to show.
+  static const int kNoIconID;
+
+  // Called when the InfoBar that owns this delegate is being destroyed.  At
+  // this point nothing is visible onscreen.
+  virtual ~InfoBarDelegate();
+
+  virtual InfoBarAutomationType GetInfoBarAutomationType() const;
+
+  // Returns true if the supplied |delegate| is equal to this one. Equality is
+  // left to the implementation to define. This function is called by the
+  // InfoBarManager when determining whether or not a delegate should be
+  // added because a matching one already exists. If this function returns true,
+  // the InfoBarManager will not add the new delegate because it considers
+  // one to already be present.
+  virtual bool EqualsDelegate(InfoBarDelegate* delegate) const;
+
+  // Returns true if the InfoBar should be closed automatically after the page
+  // is navigated. By default this returns true if the navigation is to a new
+  // page (not including reloads).  Subclasses wishing to change this behavior
+  // can override either this function or ShouldExpireInternal(), depending on
+  // what level of control they need.
+  virtual bool ShouldExpire(const NavigationDetails& details) const;
+
+  // Called when the user clicks on the close button to dismiss the infobar.
+  virtual void InfoBarDismissed();
+
+  // Return the resource ID of the icon to be shown for this InfoBar.  If the
+  // value is equal to |kNoIconID|, no icon is shown.
+  virtual int GetIconID() const;
+
+  // Returns the type of the infobar.  The type determines the appearance (such
+  // as background color) of the infobar.
+  virtual Type GetInfoBarType() const;
+
+  // Type-checking downcast routines:
+  virtual AutoLoginInfoBarDelegate* AsAutoLoginInfoBarDelegate();
+  virtual ConfirmInfoBarDelegate* AsConfirmInfoBarDelegate();
+  virtual ExtensionInfoBarDelegate* AsExtensionInfoBarDelegate();
+  virtual InsecureContentInfoBarDelegate* AsInsecureContentInfoBarDelegate();
+  virtual MediaStreamInfoBarDelegate* AsMediaStreamInfoBarDelegate();
+  virtual PopupBlockedInfoBarDelegate* AsPopupBlockedInfoBarDelegate();
+  virtual RegisterProtocolHandlerInfoBarDelegate*
+      AsRegisterProtocolHandlerInfoBarDelegate();
+  virtual ScreenCaptureInfoBarDelegate* AsScreenCaptureInfoBarDelegate();
+  virtual ThemeInstalledInfoBarDelegate* AsThemePreviewInfobarDelegate();
+  virtual TranslateInfoBarDelegate* AsTranslateInfoBarDelegate();
+
+  void set_infobar(InfoBar* infobar) { infobar_ = infobar; }
+
+  // Store the unique id for the active entry, to be used later upon navigation
+  // to determine if this InfoBarDelegate should be expired.
+  void StoreActiveEntryUniqueID();
+
+  // Return the icon to be shown for this InfoBar. If the returned Image is
+  // empty, no icon is shown.
+  virtual gfx::Image GetIcon() const;
+
+ protected:
+  InfoBarDelegate();
+
+  // Returns true if the navigation is to a new URL or a reload occured.
+  virtual bool ShouldExpireInternal(const NavigationDetails& details) const;
+
+  int contents_unique_id() const { return contents_unique_id_; }
+  InfoBar* infobar() { return infobar_; }
+
+ private:
+  // The unique id of the active NavigationEntry of the WebContents that we were
+  // opened for. Used to help expire on navigations.
+  int contents_unique_id_;
+
+  // The InfoBar associated with us.
+  InfoBar* infobar_;
+
+  DISALLOW_COPY_AND_ASSIGN(InfoBarDelegate);
+};
+
+}  // namespace infobars
+
+#endif  // COMPONENTS_INFOBARS_CORE_INFOBAR_DELEGATE_H_
diff --git a/components/infobars/core/infobar_manager.cc b/components/infobars/core/infobar_manager.cc
new file mode 100644
index 0000000..6afc9c4
--- /dev/null
+++ b/components/infobars/core/infobar_manager.cc
@@ -0,0 +1,161 @@
+// 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.
+
+#include "components/infobars/core/infobar_manager.h"
+
+#include "base/command_line.h"
+#include "components/infobars/core/infobar.h"
+#include "components/infobars/core/infobars_switches.h"
+
+namespace infobars {
+
+
+// InfoBarManager::Observer ---------------------------------------------------
+
+void InfoBarManager::Observer::OnInfoBarAdded(InfoBar* infobar) {
+}
+
+void InfoBarManager::Observer::OnInfoBarRemoved(InfoBar* infobar,
+                                                bool animate) {
+}
+
+void InfoBarManager::Observer::OnInfoBarReplaced(InfoBar* old_infobar,
+                                                 InfoBar* new_infobar) {
+}
+
+void InfoBarManager::Observer::OnManagerShuttingDown(InfoBarManager* manager) {
+}
+
+
+// InfoBarManager --------------------------------------------------------------
+
+InfoBar* InfoBarManager::AddInfoBar(scoped_ptr<InfoBar> infobar) {
+  DCHECK(infobar);
+  if (!infobars_enabled_)
+    return NULL;
+
+  for (InfoBars::const_iterator i(infobars_.begin()); i != infobars_.end();
+       ++i) {
+    if ((*i)->delegate()->EqualsDelegate(infobar->delegate())) {
+      DCHECK_NE((*i)->delegate(), infobar->delegate());
+      return NULL;
+    }
+  }
+
+  InfoBar* infobar_ptr = infobar.release();
+  infobars_.push_back(infobar_ptr);
+  infobar_ptr->SetOwner(this);
+
+  NotifyInfoBarAdded(infobar_ptr);
+
+  return infobar_ptr;
+}
+
+void InfoBarManager::RemoveInfoBar(InfoBar* infobar) {
+  RemoveInfoBarInternal(infobar, true);
+}
+
+void InfoBarManager::RemoveAllInfoBars(bool animate) {
+  while (!infobars_.empty())
+    RemoveInfoBarInternal(infobars_.back(), animate);
+}
+
+InfoBar* InfoBarManager::ReplaceInfoBar(InfoBar* old_infobar,
+                                        scoped_ptr<InfoBar> new_infobar) {
+  DCHECK(old_infobar);
+  if (!infobars_enabled_)
+    return AddInfoBar(new_infobar.Pass());  // Deletes the infobar.
+  DCHECK(new_infobar);
+
+  InfoBars::iterator i(std::find(infobars_.begin(), infobars_.end(),
+                                 old_infobar));
+  DCHECK(i != infobars_.end());
+
+  InfoBar* new_infobar_ptr = new_infobar.release();
+  i = infobars_.insert(i, new_infobar_ptr);
+  new_infobar_ptr->SetOwner(this);
+
+  // Remove the old infobar before notifying, so that if any observers call back
+  // to AddInfoBar() or similar, we don't dupe-check against this infobar.
+  infobars_.erase(++i);
+
+  NotifyInfoBarReplaced(old_infobar, new_infobar_ptr);
+
+  old_infobar->CloseSoon();
+  return new_infobar_ptr;
+}
+
+void InfoBarManager::AddObserver(Observer* obs) {
+  observer_list_.AddObserver(obs);
+}
+
+void InfoBarManager::RemoveObserver(Observer* obs) {
+  observer_list_.RemoveObserver(obs);
+}
+
+InfoBarManager::InfoBarManager()
+    : infobars_enabled_(true) {
+  if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kDisableInfoBars))
+    infobars_enabled_ = false;
+}
+
+InfoBarManager::~InfoBarManager() {}
+
+void InfoBarManager::ShutDown() {
+  // Destroy all remaining InfoBars.  It's important to not animate here so that
+  // we guarantee that we'll delete all delegates before we do anything else.
+  RemoveAllInfoBars(false);
+  FOR_EACH_OBSERVER(Observer, observer_list_, OnManagerShuttingDown(this));
+}
+
+void InfoBarManager::OnNavigation(
+    const InfoBarDelegate::NavigationDetails& details) {
+  // NOTE: It is not safe to change the following code to count upwards or
+  // use iterators, as the RemoveInfoBar() call synchronously modifies our
+  // delegate list.
+  for (size_t i = infobars_.size(); i > 0; --i) {
+    InfoBar* infobar = infobars_[i - 1];
+    if (infobar->delegate()->ShouldExpire(details))
+      RemoveInfoBar(infobar);
+  }
+}
+
+void InfoBarManager::NotifyInfoBarAdded(InfoBar* infobar) {
+  FOR_EACH_OBSERVER(Observer, observer_list_, OnInfoBarAdded(infobar));
+}
+
+void InfoBarManager::NotifyInfoBarRemoved(InfoBar* infobar, bool animate) {
+  FOR_EACH_OBSERVER(Observer, observer_list_,
+                    OnInfoBarRemoved(infobar, animate));
+}
+
+void InfoBarManager::NotifyInfoBarReplaced(InfoBar* old_infobar,
+                                           InfoBar* new_infobar) {
+  FOR_EACH_OBSERVER(Observer,
+                    observer_list_,
+                    OnInfoBarReplaced(old_infobar, new_infobar));
+}
+
+void InfoBarManager::RemoveInfoBarInternal(InfoBar* infobar, bool animate) {
+  DCHECK(infobar);
+  if (!infobars_enabled_) {
+    DCHECK(infobars_.empty());
+    return;
+  }
+
+  InfoBars::iterator i(std::find(infobars_.begin(), infobars_.end(), infobar));
+  DCHECK(i != infobars_.end());
+
+  // Remove the infobar before notifying, so that if any observers call back to
+  // AddInfoBar() or similar, we don't dupe-check against this infobar.
+  infobars_.erase(i);
+
+  // This notification must happen before the call to CloseSoon() below, since
+  // observers may want to access |infobar| and that call can delete it.
+  NotifyInfoBarRemoved(infobar, animate);
+
+  infobar->CloseSoon();
+}
+
+}  // namespace infobars
diff --git a/components/infobars/core/infobar_manager.h b/components/infobars/core/infobar_manager.h
new file mode 100644
index 0000000..845f784
--- /dev/null
+++ b/components/infobars/core/infobar_manager.h
@@ -0,0 +1,124 @@
+// 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.
+
+#ifndef COMPONENTS_INFOBARS_CORE_INFOBAR_MANAGER_H_
+#define COMPONENTS_INFOBARS_CORE_INFOBAR_MANAGER_H_
+
+#include <vector>
+
+#include "base/memory/scoped_ptr.h"
+#include "base/observer_list.h"
+#include "components/infobars/core/infobar_delegate.h"
+
+namespace content {
+class WebContents;
+}
+
+namespace infobars {
+
+class InfoBar;
+
+// Provides access to creating, removing and enumerating info bars
+// attached to a tab.
+class InfoBarManager {
+ public:
+  // Observer class for infobar events.
+  class Observer {
+   public:
+    virtual void OnInfoBarAdded(InfoBar* infobar);
+    virtual void OnInfoBarRemoved(InfoBar* infobar, bool animate);
+    virtual void OnInfoBarReplaced(InfoBar* old_infobar,
+                                   InfoBar* new_infobar);
+    virtual void OnManagerShuttingDown(InfoBarManager* manager);
+  };
+
+  InfoBarManager();
+  virtual ~InfoBarManager();
+
+  // Must be called before destruction.
+  // TODO(droger): Merge this method with the destructor once the virtual calls
+  // for notifications are removed (see http://crbug.com/354380).
+  void ShutDown();
+
+  // Adds the specified |infobar|, which already owns a delegate.
+  //
+  // If infobars are disabled for this tab or the tab already has an infobar
+  // whose delegate returns true for
+  // InfoBarDelegate::EqualsDelegate(infobar->delegate()), |infobar| is deleted
+  // immediately without being added.
+  //
+  // Returns the infobar if it was successfully added.
+  InfoBar* AddInfoBar(scoped_ptr<InfoBar> infobar);
+
+  // Removes the specified |infobar|.  This in turn may close immediately or
+  // animate closed; at the end the infobar will delete itself.
+  //
+  // If infobars are disabled for this tab, this will do nothing, on the
+  // assumption that the matching AddInfoBar() call will have already deleted
+  // the infobar (see above).
+  void RemoveInfoBar(InfoBar* infobar);
+
+  // Removes all the infobars.
+  void RemoveAllInfoBars(bool animate);
+
+  // Replaces one infobar with another, without any animation in between.  This
+  // will result in |old_infobar| being synchronously deleted.
+  //
+  // If infobars are disabled for this tab, |new_infobar| is deleted immediately
+  // without being added, and nothing else happens.
+  //
+  // Returns the new infobar if it was successfully added.
+  //
+  // NOTE: This does not perform any EqualsDelegate() checks like AddInfoBar().
+  InfoBar* ReplaceInfoBar(InfoBar* old_infobar,
+                          scoped_ptr<InfoBar> new_infobar);
+
+  // Returns the number of infobars for this tab.
+  size_t infobar_count() const { return infobars_.size(); }
+
+  // Returns the infobar at the given |index|.  The InfoBarManager retains
+  // ownership.
+  //
+  // Warning: Does not sanity check |index|.
+  InfoBar* infobar_at(size_t index) { return infobars_[index]; }
+
+  // Must be called when a navigation happens.
+  void OnNavigation(const InfoBarDelegate::NavigationDetails& details);
+
+  void AddObserver(Observer* obs);
+  void RemoveObserver(Observer* obs);
+
+  // Returns the active entry ID.
+  virtual int GetActiveEntryID() = 0;
+
+ protected:
+  // Notifies the observer in |observer_list_|.
+  // TODO(droger): Absorb these methods back into their callers once virtual
+  // overrides are removed (see http://crbug.com/354380).
+  virtual void NotifyInfoBarAdded(InfoBar* infobar);
+  virtual void NotifyInfoBarRemoved(InfoBar* infobar, bool animate);
+  virtual void NotifyInfoBarReplaced(InfoBar* old_infobar,
+                                     InfoBar* new_infobar);
+
+ private:
+  // InfoBars associated with this InfoBarManager.  We own these pointers.
+  // However, this is not a ScopedVector, because we don't delete the infobars
+  // directly once they've been added to this; instead, when we're done with an
+  // infobar, we instruct it to delete itself and then orphan it.  See
+  // RemoveInfoBarInternal().
+  typedef std::vector<InfoBar*> InfoBars;
+
+  void RemoveInfoBarInternal(InfoBar* infobar, bool animate);
+
+  InfoBars infobars_;
+  bool infobars_enabled_;
+
+  ObserverList<Observer, true> observer_list_;
+
+  DISALLOW_COPY_AND_ASSIGN(InfoBarManager);
+};
+
+}  // namespace infobars
+
+#endif  // COMPONENTS_INFOBARS_CORE_INFOBAR_MANAGER_H_
diff --git a/components/infobars/core/infobars_switches.cc b/components/infobars/core/infobars_switches.cc
new file mode 100644
index 0000000..deb21a7
--- /dev/null
+++ b/components/infobars/core/infobars_switches.cc
@@ -0,0 +1,14 @@
+// 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.
+
+#include "components/infobars/core/infobars_switches.h"
+
+namespace infobars {
+namespace switches {
+
+// Prevent infobars from appearing.
+const char kDisableInfoBars[] = "disable-infobars";
+
+}  // namespace switches
+}  // namespace infobars
diff --git a/components/infobars/core/infobars_switches.h b/components/infobars/core/infobars_switches.h
new file mode 100644
index 0000000..d24a09a
--- /dev/null
+++ b/components/infobars/core/infobars_switches.h
@@ -0,0 +1,16 @@
+// 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.
+
+#ifndef COMPONENTS_INFOBARS_CORE_INFOBARS_SWITCHES_H_
+#define COMPONENTS_INFOBARS_CORE_INFOBARS_SWITCHES_H_
+
+namespace infobars {
+namespace switches {
+
+extern const char kDisableInfoBars[];
+
+}  // namespace switches
+}  // namespace infobars
+
+#endif  // COMPONENTS_INFOBARS_CORE_INFOBARS_SWITCHES_H_
diff --git a/components/keyed_service/content/browser_context_dependency_manager.cc b/components/keyed_service/content/browser_context_dependency_manager.cc
index 809c220..98e4e29 100644
--- a/components/keyed_service/content/browser_context_dependency_manager.cc
+++ b/components/keyed_service/content/browser_context_dependency_manager.cc
@@ -77,6 +77,8 @@
   MarkBrowserContextLiveForTesting(context);
 #endif
 
+  will_create_browser_context_services_callbacks_.Notify(context);
+
   std::vector<DependencyNode*> construction_order;
   if (!dependency_graph_.GetConstructionOrder(&construction_order)) {
     NOTREACHED();
@@ -127,6 +129,13 @@
   }
 }
 
+scoped_ptr<base::CallbackList<void(content::BrowserContext*)>::Subscription>
+BrowserContextDependencyManager::
+RegisterWillCreateBrowserContextServicesCallbackForTesting(
+    const base::Callback<void(content::BrowserContext*)>& callback) {
+  return will_create_browser_context_services_callbacks_.Add(callback);
+}
+
 #ifndef NDEBUG
 void BrowserContextDependencyManager::AssertBrowserContextWasntDestroyed(
     content::BrowserContext* context) {
diff --git a/components/keyed_service/content/browser_context_dependency_manager.h b/components/keyed_service/content/browser_context_dependency_manager.h
index 50e4a85..f602ee4 100644
--- a/components/keyed_service/content/browser_context_dependency_manager.h
+++ b/components/keyed_service/content/browser_context_dependency_manager.h
@@ -5,6 +5,8 @@
 #ifndef COMPONENTS_KEYED_SERVICE_CONTENT_BROWSER_CONTEXT_DEPENDENCY_MANAGER_H_
 #define COMPONENTS_KEYED_SERVICE_CONTENT_BROWSER_CONTEXT_DEPENDENCY_MANAGER_H_
 
+#include "base/callback_forward.h"
+#include "base/callback_list.h"
 #include "base/memory/singleton.h"
 #include "components/keyed_service/core/dependency_graph.h"
 #include "components/keyed_service/core/keyed_service_export.h"
@@ -63,6 +65,14 @@
   // associated with it.
   void DestroyBrowserContextServices(content::BrowserContext* context);
 
+  // Registers a |callback| that will be called just before executing
+  // CreateBrowserContextServices() or CreateBrowserContextServicesForTest().
+  // This can be useful in browser tests which wish to substitute test or mock
+  // builders for the keyed services.
+  scoped_ptr<base::CallbackList<void(content::BrowserContext*)>::Subscription>
+  RegisterWillCreateBrowserContextServicesCallbackForTesting(
+      const base::Callback<void(content::BrowserContext*)>& callback);
+
 #ifndef NDEBUG
   // Debugging assertion called as part of GetServiceForBrowserContext in debug
   // mode. This will NOTREACHED() whenever the user is trying to access a stale
@@ -96,6 +106,11 @@
 
   DependencyGraph dependency_graph_;
 
+  // A list of callbacks to call just before executing
+  // CreateBrowserContextServices() or CreateBrowserContextServicesForTest().
+  base::CallbackList<void(content::BrowserContext*)>
+      will_create_browser_context_services_callbacks_;
+
 #ifndef NDEBUG
   // A list of context objects that have gone through the Shutdown()
   // phase. These pointers are most likely invalid, but we keep track of their
diff --git a/components/nacl.gyp b/components/nacl.gyp
index b62e8f1..8415280 100644
--- a/components/nacl.gyp
+++ b/components/nacl.gyp
@@ -59,8 +59,6 @@
             'sources': [
               '../components/nacl/common/nacl_paths.cc',
               '../components/nacl/common/nacl_paths.h',
-              '../components/nacl/zygote/nacl_fork_delegate_linux.cc',
-              '../components/nacl/zygote/nacl_fork_delegate_linux.h',
             ],
           },],
         ],
@@ -138,11 +136,25 @@
           ],
           # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
           'msvs_disabled_warnings': [4267, ],
+          'conditions': [
+            ['OS=="linux"', {
+              'sources': [
+                '../components/nacl/zygote/nacl_fork_delegate_linux.cc',
+                '../components/nacl/zygote/nacl_fork_delegate_linux.h',
+              ],
+              'dependencies': [
+                # Required by nacl_fork_delegate_linux.cc.
+                '../sandbox/sandbox.gyp:suid_sandbox_client',
+              ]
+            }],
+          ],
         },
         {
           'target_name': 'nacl_renderer',
           'type': 'static_library',
           'sources': [
+            'nacl/renderer/manifest_service_channel.cc',
+            'nacl/renderer/manifest_service_channel.h',
             'nacl/renderer/nexe_load_manager.cc',
             'nacl/renderer/nexe_load_manager.h',
             'nacl/renderer/pnacl_translation_resource_host.cc',
@@ -181,22 +193,29 @@
               'include_dirs': [
                 '..',
               ],
-              'dependencies': [
-                'nacl',
-                'nacl_common',
-                'nacl_switches',
-                '../components/tracing.gyp:tracing',
-                '../crypto/crypto.gyp:crypto',
-                '../sandbox/sandbox.gyp:libc_urandom_override',
-                '../sandbox/sandbox.gyp:sandbox',
-                '../ppapi/ppapi_internal.gyp:ppapi_proxy',
+              'sources': [
+                'nacl/loader/nacl_helper_linux.cc',
+                'nacl/loader/nacl_helper_linux.h',
               ],
+              'dependencies': [
+                'nacl_loader',
+              ],
+              'cflags': ['-fPIE'],
               'ldflags!': [
                 # Do not pick the default ASan options from
                 # base/debug/sanitizer_options.cc to avoid a conflict with those
                 # in nacl/nacl_helper_linux.cc.
                 '-Wl,-u_sanitizer_options_link_helper',
               ],
+              'link_settings': {
+                'ldflags': ['-pie'],
+              },
+            }, {
+              'target_name': 'nacl_loader',
+              'type': 'static_library',
+              'include_dirs': [
+                '..',
+              ],
               'defines': [
                 '<@(nacl_defines)',
                 # Allow .cc files to know if they're being compiled as part
@@ -204,8 +223,6 @@
                 'IN_NACL_HELPER=1',
               ],
               'sources': [
-                'nacl/loader/nacl_helper_linux.cc',
-                'nacl/loader/nacl_helper_linux.h',
                 'nacl/loader/nacl_sandbox_linux.cc',
                 'nacl/loader/nonsfi/abi_conversion.cc',
                 'nacl/loader/nonsfi/abi_conversion.h',
@@ -224,6 +241,10 @@
                 'nacl/loader/nonsfi/irt_util.h',
                 'nacl/loader/nonsfi/nonsfi_main.cc',
                 'nacl/loader/nonsfi/nonsfi_main.h',
+                'nacl/loader/nonsfi/nonsfi_sandbox.cc',
+                'nacl/loader/nonsfi/nonsfi_sandbox.h',
+                '../ppapi/nacl_irt/manifest_service.cc',
+                '../ppapi/nacl_irt/manifest_service.h',
                 '../ppapi/nacl_irt/plugin_main.cc',
                 '../ppapi/nacl_irt/plugin_main.h',
                 '../ppapi/nacl_irt/plugin_startup.cc',
@@ -231,12 +252,17 @@
                 '../ppapi/nacl_irt/ppapi_dispatcher.cc',
                 '../ppapi/nacl_irt/ppapi_dispatcher.h',
               ],
+              'dependencies': [
+                'nacl',
+                'nacl_common',
+                'nacl_switches',
+                '../components/tracing.gyp:tracing',
+                '../crypto/crypto.gyp:crypto',
+                '../sandbox/sandbox.gyp:libc_urandom_override',
+                '../sandbox/sandbox.gyp:sandbox',
+                '../ppapi/ppapi_internal.gyp:ppapi_proxy',
+              ],
               'conditions': [
-                ['toolkit_uses_gtk == 1', {
-                  'dependencies': [
-                    '../build/linux/system.gyp:gtk',
-                  ],
-                }],
                 ['use_glib == 1', {
                   'dependencies': [
                     '../build/linux/system.gyp:glib',
@@ -262,9 +288,22 @@
                 }],
               ],
               'cflags': ['-fPIE'],
-              'link_settings': {
-                'ldflags': ['-pie'],
-              },
+            }, {
+              'target_name': 'nacl_loader_unittests',
+              'type': '<(gtest_target_type)',
+              'sources': [
+                # TODO(hamaji): Currently, we build them twice. Stop building
+                # them for components_unittests. See crbug.com/364751
+                'nacl/loader/nonsfi/nonsfi_sandbox_unittest.cc',
+                'nacl/loader/nonsfi/nonsfi_sandbox_sigsys_unittest.cc',
+                'nacl/loader/run_all_unittests.cc',
+              ],
+              'dependencies': [
+                'nacl_loader',
+                '../base/base.gyp:test_support_base',
+                '../sandbox/sandbox.gyp:sandbox_linux_test_utils',
+                '../testing/gtest.gyp:gtest',
+              ],
             },
           ],
         }],
diff --git a/components/nacl/browser/nacl_process_host.cc b/components/nacl/browser/nacl_process_host.cc
index 98f3919..dda599b 100644
--- a/components/nacl/browser/nacl_process_host.cc
+++ b/components/nacl/browser/nacl_process_host.cc
@@ -669,7 +669,8 @@
 
 bool NaClProcessHost::ReplyToRenderer(
     const IPC::ChannelHandle& ppapi_channel_handle,
-    const IPC::ChannelHandle& trusted_channel_handle) {
+    const IPC::ChannelHandle& trusted_channel_handle,
+    const IPC::ChannelHandle& manifest_service_channel_handle) {
 #if defined(OS_WIN)
   // If we are on 64-bit Windows, the NaCl process's sandbox is
   // managed by a different process from the renderer's sandbox.  We
@@ -715,6 +716,7 @@
       NaClLaunchResult(imc_handle_for_renderer,
                        ppapi_channel_handle,
                        trusted_channel_handle,
+                       manifest_service_channel_handle,
                        base::GetProcId(data.handle),
                        data.id),
       std::string() /* error_message */);
@@ -854,9 +856,12 @@
 void NaClProcessHost::OnPpapiChannelsCreated(
     const IPC::ChannelHandle& browser_channel_handle,
     const IPC::ChannelHandle& ppapi_renderer_channel_handle,
-    const IPC::ChannelHandle& trusted_renderer_channel_handle) {
+    const IPC::ChannelHandle& trusted_renderer_channel_handle,
+    const IPC::ChannelHandle& manifest_service_channel_handle) {
   if (!enable_ppapi_proxy()) {
-    ReplyToRenderer(IPC::ChannelHandle(), trusted_renderer_channel_handle);
+    ReplyToRenderer(IPC::ChannelHandle(),
+                    trusted_renderer_channel_handle,
+                    manifest_service_channel_handle);
     return;
   }
 
@@ -910,7 +915,8 @@
 
     // Let the renderer know that the IPC channels are established.
     ReplyToRenderer(ppapi_renderer_channel_handle,
-                    trusted_renderer_channel_handle);
+                    trusted_renderer_channel_handle,
+                    manifest_service_channel_handle);
   } else {
     // Attempt to open more than 1 browser channel is not supported.
     // Shut down the NaCl process.
diff --git a/components/nacl/browser/nacl_process_host.h b/components/nacl/browser/nacl_process_host.h
index 370599d..37af81a 100644
--- a/components/nacl/browser/nacl_process_host.h
+++ b/components/nacl/browser/nacl_process_host.h
@@ -125,8 +125,10 @@
 
   // Sends the reply message to the renderer who is waiting for the plugin
   // to load. Returns true on success.
-  bool ReplyToRenderer(const IPC::ChannelHandle& ppapi_channel_handle,
-                       const IPC::ChannelHandle& trusted_channel_handle);
+  bool ReplyToRenderer(
+      const IPC::ChannelHandle& ppapi_channel_handle,
+      const IPC::ChannelHandle& trusted_channel_handle,
+      const IPC::ChannelHandle& manifest_service_channel_handle);
 
   // Sends the reply with error message to the renderer.
   void SendErrorToRenderer(const std::string& error_message);
@@ -168,7 +170,8 @@
   void OnPpapiChannelsCreated(
       const IPC::ChannelHandle& browser_channel_handle,
       const IPC::ChannelHandle& ppapi_renderer_channel_handle,
-      const IPC::ChannelHandle& trusted_renderer_channel_handle);
+      const IPC::ChannelHandle& trusted_renderer_channel_handle,
+      const IPC::ChannelHandle& manifest_service_channel_handle);
 
   GURL manifest_url_;
   ppapi::PpapiPermissions permissions_;
diff --git a/components/nacl/common/nacl_host_messages.h b/components/nacl/common/nacl_host_messages.h
index da7478b..88237da 100644
--- a/components/nacl/common/nacl_host_messages.h
+++ b/components/nacl/common/nacl_host_messages.h
@@ -34,6 +34,7 @@
   IPC_STRUCT_TRAITS_MEMBER(imc_channel_handle)
   IPC_STRUCT_TRAITS_MEMBER(ppapi_ipc_channel_handle)
   IPC_STRUCT_TRAITS_MEMBER(trusted_ipc_channel_handle)
+  IPC_STRUCT_TRAITS_MEMBER(manifest_service_ipc_channel_handle)
   IPC_STRUCT_TRAITS_MEMBER(plugin_pid)
   IPC_STRUCT_TRAITS_MEMBER(plugin_child_id)
 IPC_STRUCT_TRAITS_END()
diff --git a/components/nacl/common/nacl_messages.h b/components/nacl/common/nacl_messages.h
index 77db201..2b1fbba 100644
--- a/components/nacl/common/nacl_messages.h
+++ b/components/nacl/common/nacl_messages.h
@@ -90,7 +90,8 @@
 
 // Notify the browser process that the server side of the PPAPI channel was
 // created successfully.
-IPC_MESSAGE_CONTROL3(NaClProcessHostMsg_PpapiChannelsCreated,
+IPC_MESSAGE_CONTROL4(NaClProcessHostMsg_PpapiChannelsCreated,
                      IPC::ChannelHandle, /* browser_channel_handle */
                      IPC::ChannelHandle, /* ppapi_renderer_channel_handle */
-                     IPC::ChannelHandle /* trusted_renderer_channel_handle */)
+                     IPC::ChannelHandle, /* trusted_renderer_channel_handle */
+                     IPC::ChannelHandle /* manifest_service_channel_handle */)
diff --git a/components/nacl/common/nacl_types.cc b/components/nacl/common/nacl_types.cc
index f7c0888..0dc5a1c 100644
--- a/components/nacl/common/nacl_types.cc
+++ b/components/nacl/common/nacl_types.cc
@@ -71,11 +71,13 @@
     FileDescriptor imc_channel_handle,
     const IPC::ChannelHandle& ppapi_ipc_channel_handle,
     const IPC::ChannelHandle& trusted_ipc_channel_handle,
+    const IPC::ChannelHandle& manifest_service_ipc_channel_handle,
     base::ProcessId plugin_pid,
     int plugin_child_id)
     : imc_channel_handle(imc_channel_handle),
       ppapi_ipc_channel_handle(ppapi_ipc_channel_handle),
       trusted_ipc_channel_handle(trusted_ipc_channel_handle),
+      manifest_service_ipc_channel_handle(manifest_service_ipc_channel_handle),
       plugin_pid(plugin_pid),
       plugin_child_id(plugin_child_id) {
 }
diff --git a/components/nacl/common/nacl_types.h b/components/nacl/common/nacl_types.h
index 84904cc..04a9848 100644
--- a/components/nacl/common/nacl_types.h
+++ b/components/nacl/common/nacl_types.h
@@ -89,11 +89,13 @@
 
 struct NaClLaunchResult {
   NaClLaunchResult();
-  NaClLaunchResult(FileDescriptor imc_channel_handle,
-                   const IPC::ChannelHandle& ppapi_ipc_channel_handle,
-                   const IPC::ChannelHandle& trusted_ipc_channel_handle,
-                   base::ProcessId plugin_pid,
-                   int plugin_child_id);
+  NaClLaunchResult(
+      FileDescriptor imc_channel_handle,
+      const IPC::ChannelHandle& ppapi_ipc_channel_handle,
+      const IPC::ChannelHandle& trusted_ipc_channel_handle,
+      const IPC::ChannelHandle& manifest_service_ipc_channel_handle,
+      base::ProcessId plugin_pid,
+      int plugin_child_id);
   ~NaClLaunchResult();
 
   // For plugin loader <-> renderer IMC communication.
@@ -105,6 +107,10 @@
   // For plugin loader <-> renderer control communication (loading and
   // starting nexe).
   IPC::ChannelHandle trusted_ipc_channel_handle;
+
+  // For plugin <-> renderer ManifestService communication.
+  IPC::ChannelHandle manifest_service_ipc_channel_handle;
+
   base::ProcessId plugin_pid;
   int plugin_child_id;
 };
diff --git a/components/nacl/loader/DEPS b/components/nacl/loader/DEPS
index 34d36eb..f63985c 100644
--- a/components/nacl/loader/DEPS
+++ b/components/nacl/loader/DEPS
@@ -4,6 +4,7 @@
   "+crypto",
   "+sandbox/linux/seccomp-bpf",
   "+sandbox/linux/services",
+  "+sandbox/linux/suid",
   "+sandbox/win/src",
   "+ppapi/c",  # header files only
 
diff --git a/components/nacl/loader/nacl_helper_linux.cc b/components/nacl/loader/nacl_helper_linux.cc
index d3032bf..15f58eb 100644
--- a/components/nacl/loader/nacl_helper_linux.cc
+++ b/components/nacl/loader/nacl_helper_linux.cc
@@ -22,20 +22,26 @@
 #include "base/at_exit.h"
 #include "base/command_line.h"
 #include "base/logging.h"
+#include "base/memory/scoped_ptr.h"
 #include "base/message_loop/message_loop.h"
 #include "base/posix/eintr_wrapper.h"
 #include "base/posix/global_descriptors.h"
 #include "base/posix/unix_domain_socket_linux.h"
 #include "base/process/kill.h"
+#include "base/process/process_handle.h"
 #include "base/rand_util.h"
 #include "components/nacl/common/nacl_switches.h"
 #include "components/nacl/loader/nacl_listener.h"
 #include "components/nacl/loader/nacl_sandbox_linux.h"
+#include "components/nacl/loader/nonsfi/nonsfi_sandbox.h"
 #include "content/public/common/zygote_fork_delegate_linux.h"
 #include "crypto/nss_util.h"
 #include "ipc/ipc_descriptors.h"
 #include "ipc/ipc_switches.h"
+#include "sandbox/linux/services/credentials.h"
 #include "sandbox/linux/services/libc_urandom_override.h"
+#include "sandbox/linux/services/thread_helpers.h"
+#include "sandbox/linux/suid/client/setuid_sandbox_client.h"
 
 namespace {
 
@@ -54,7 +60,30 @@
   return true;
 }
 
-void InitializeSandbox(bool uses_nonsfi_mode) {
+void InitializeLayerOneSandbox() {
+  // Check that IsSandboxed() works. We should not be sandboxed at this point.
+  CHECK(!IsSandboxed()) << "Unexpectedly sandboxed!";
+  scoped_ptr<sandbox::SetuidSandboxClient>
+      setuid_sandbox_client(sandbox::SetuidSandboxClient::Create());
+  PCHECK(0 == IGNORE_EINTR(close(
+                  setuid_sandbox_client->GetUniqueToChildFileDescriptor())));
+  const bool suid_sandbox_child = setuid_sandbox_client->IsSuidSandboxChild();
+  const bool is_init_process = 1 == getpid();
+  CHECK_EQ(is_init_process, suid_sandbox_child);
+
+  if (suid_sandbox_child) {
+    // Make sure that no directory file descriptor is open, as it would bypass
+    // the setuid sandbox model.
+    sandbox::Credentials credentials;
+    CHECK(!credentials.HasOpenDirectory(-1));
+
+    // Get sandboxed.
+    CHECK(setuid_sandbox_client->ChrootMe());
+    CHECK(IsSandboxed());
+  }
+}
+
+void InitializeLayerTwoSandbox(bool uses_nonsfi_mode) {
   if (uses_nonsfi_mode) {
     const bool can_be_no_sandbox = CommandLine::ForCurrentProcess()->HasSwitch(
         switches::kNaClDangerousNoSandboxNonSfi);
@@ -65,7 +94,7 @@
       else
         LOG(FATAL) << "SUID sandbox is mandatory for non-SFI NaCl";
     }
-    const bool bpf_sandbox_initialized = InitializeBPFSandbox();
+    const bool bpf_sandbox_initialized = nacl::nonsfi::InitializeBPFSandbox();
     if (!bpf_sandbox_initialized) {
       if (can_be_no_sandbox) {
         LOG(ERROR)
@@ -94,7 +123,7 @@
   // don't need zygote FD any more
   if (IGNORE_EINTR(close(kNaClZygoteDescriptor)) != 0)
     LOG(ERROR) << "close(kNaClZygoteDescriptor) failed.";
-  InitializeSandbox(uses_nonsfi_mode);
+  InitializeLayerTwoSandbox(uses_nonsfi_mode);
   base::GlobalDescriptors::GetInstance()->Set(
       kPrimaryIPCChannel,
       child_fds[content::ZygoteForkDelegate::kBrowserFDIndex]);
@@ -111,33 +140,34 @@
 // Start the NaCl loader in a child created by the NaCl loader Zygote.
 void ChildNaClLoaderInit(const std::vector<int>& child_fds,
                          const NaClLoaderSystemInfo& system_info,
-                         bool uses_nonsfi_mode) {
+                         bool uses_nonsfi_mode,
+                         const std::string& channel_id) {
   const int parent_fd = child_fds[content::ZygoteForkDelegate::kParentFDIndex];
   const int dummy_fd = child_fds[content::ZygoteForkDelegate::kDummyFDIndex];
+
   bool validack = false;
-  const size_t kMaxReadSize = 1024;
-  char buffer[kMaxReadSize];
+  base::ProcessId real_pid;
   // Wait until the parent process has discovered our PID.  We
   // should not fork any child processes (which the seccomp
   // sandbox does) until then, because that can interfere with the
   // parent's discovery of our PID.
-  const int nread = HANDLE_EINTR(read(parent_fd, buffer, kMaxReadSize));
-  const std::string switch_prefix = std::string("--") +
-      switches::kProcessChannelID + std::string("=");
-  const size_t len = switch_prefix.length();
+  const ssize_t nread =
+      HANDLE_EINTR(read(parent_fd, &real_pid, sizeof(real_pid)));
+  if (static_cast<size_t>(nread) == sizeof(real_pid)) {
+    // Make sure the parent didn't accidentally send us our real PID.
+    // We don't want it to be discoverable anywhere in our address space
+    // when we start running untrusted code.
+    CHECK(real_pid == 0);
 
-  if (nread < 0) {
-    perror("read");
+    CommandLine::ForCurrentProcess()->AppendSwitchASCII(
+        switches::kProcessChannelID, channel_id);
+    validack = true;
+  } else {
+    if (nread < 0)
+      perror("read");
     LOG(ERROR) << "read returned " << nread;
-  } else if (nread > static_cast<int>(len)) {
-    if (switch_prefix.compare(0, len, buffer, 0, len) == 0) {
-      VLOG(1) << "NaCl loader is synchronised with Chrome zygote";
-      CommandLine::ForCurrentProcess()->AppendSwitchASCII(
-          switches::kProcessChannelID,
-          std::string(&buffer[len], nread - len));
-      validack = true;
-    }
   }
+
   if (IGNORE_EINTR(close(dummy_fd)) != 0)
     LOG(ERROR) << "close(dummy_fd) failed";
   if (IGNORE_EINTR(close(parent_fd)) != 0)
@@ -163,6 +193,12 @@
     return false;
   }
 
+  std::string channel_id;
+  if (!input_iter->ReadString(&channel_id)) {
+    LOG(ERROR) << "Could not read channel_id string";
+    return false;
+  }
+
   if (content::ZygoteForkDelegate::kNumPassedFDs != child_fds.size()) {
     LOG(ERROR) << "nacl_helper: unexpected number of fds, got "
         << child_fds.size();
@@ -176,7 +212,7 @@
   }
 
   if (child_pid == 0) {
-    ChildNaClLoaderInit(child_fds, system_info, uses_nonsfi_mode);
+    ChildNaClLoaderInit(child_fds, system_info, uses_nonsfi_mode, channel_id);
     NOTREACHED();
   }
 
@@ -408,8 +444,13 @@
 
   CheckRDebug(argv[0]);
 
-  // Check that IsSandboxed() works. We should not be sandboxed at this point.
-  CHECK(!IsSandboxed()) << "Unexpectedly sandboxed!";
+  // Make sure that the early initialization did not start any spurious
+  // threads.
+#if !defined(THREAD_SANITIZER)
+  CHECK(sandbox::ThreadHelpers::IsSingleThreaded(-1));
+#endif
+
+  InitializeLayerOneSandbox();
 
   const std::vector<int> empty;
   // Send the zygote a message to let it know we are ready to help
diff --git a/components/nacl/loader/nacl_listener.cc b/components/nacl/loader/nacl_listener.cc
index 132eed3..f49e3f3 100644
--- a/components/nacl/loader/nacl_listener.cc
+++ b/components/nacl/loader/nacl_listener.cc
@@ -292,6 +292,7 @@
 
   IPC::ChannelHandle browser_handle;
   IPC::ChannelHandle ppapi_renderer_handle;
+  IPC::ChannelHandle manifest_service_handle;
 
   if (params.enable_ipc_proxy) {
     browser_handle = IPC::Channel::GenerateVerifiedChannelID("nacl");
@@ -299,6 +300,9 @@
 
 #if defined(OS_LINUX)
     if (uses_nonsfi_mode_) {
+      manifest_service_handle =
+          IPC::Channel::GenerateVerifiedChannelID("nacl");
+
       // In non-SFI mode, we neither intercept nor rewrite the message using
       // NaClIPCAdapter, and the channels are connected between the plugin and
       // the hosts directly. So, the IPC::Channel instances will be created in
@@ -311,23 +315,31 @@
       int browser_client_ppapi_fd;
       int renderer_server_ppapi_fd;
       int renderer_client_ppapi_fd;
+      int manifest_service_server_fd;
+      int manifest_service_client_fd;
       if (!IPC::SocketPair(
               &browser_server_ppapi_fd, &browser_client_ppapi_fd) ||
           !IPC::SocketPair(
-              &renderer_server_ppapi_fd, &renderer_client_ppapi_fd)) {
+              &renderer_server_ppapi_fd, &renderer_client_ppapi_fd) ||
+          !IPC::SocketPair(
+              &manifest_service_server_fd, &manifest_service_client_fd)) {
         LOG(ERROR) << "Failed to create sockets for IPC.";
         return;
       }
 
       // Set the plugin IPC channel FDs.
-      ppapi::SetIPCFileDescriptors(
-          browser_server_ppapi_fd, renderer_server_ppapi_fd);
+      ppapi::SetIPCFileDescriptors(browser_server_ppapi_fd,
+                                   renderer_server_ppapi_fd,
+                                   manifest_service_server_fd);
+      ppapi::StartUpPlugin();
 
       // Send back to the client side IPC channel FD to the host.
       browser_handle.socket =
           base::FileDescriptor(browser_client_ppapi_fd, true);
       ppapi_renderer_handle.socket =
           base::FileDescriptor(renderer_client_ppapi_fd, true);
+      manifest_service_handle.socket =
+          base::FileDescriptor(manifest_service_client_fd, true);
     } else {
 #endif
       // Create the PPAPI IPC channels between the NaCl IRT and the host
@@ -355,7 +367,8 @@
       trusted_listener_->TakeClientFileDescriptor(), true);
 #endif
   if (!Send(new NaClProcessHostMsg_PpapiChannelsCreated(
-          browser_handle, ppapi_renderer_handle, trusted_renderer_handle)))
+          browser_handle, ppapi_renderer_handle,
+          trusted_renderer_handle, manifest_service_handle)))
     LOG(ERROR) << "Failed to send IPC channel handle to NaClProcessHost.";
 
   std::vector<nacl::FileDescriptor> handles = params.handles;
@@ -431,7 +444,7 @@
     // with PNaCl.  We can't apply this arbitrary limit outside of
     // PNaCl because it might break existing NaCl apps, and this limit
     // is only useful if the dyncode syscalls are disabled.
-    args->initial_nexe_max_code_bytes = 32 << 20;  // 32 MB
+    args->initial_nexe_max_code_bytes = 64 << 20;  // 64 MB
 
     // Indicate that this is a PNaCl module.
     // TODO(jvoung): Plumb through something indicating that this is PNaCl
diff --git a/components/nacl/loader/nonsfi/DEPS b/components/nacl/loader/nonsfi/DEPS
index fa6de5d..18f97f5 100644
--- a/components/nacl/loader/nonsfi/DEPS
+++ b/components/nacl/loader/nonsfi/DEPS
@@ -1,3 +1,4 @@
 include_rules = [
   "+ppapi/nacl_irt",
+  "+sandbox/linux/seccomp-bpf-helpers",
 ]
diff --git a/components/nacl/loader/nonsfi/irt_memory.cc b/components/nacl/loader/nonsfi/irt_memory.cc
index cd77965..06f76ea 100644
--- a/components/nacl/loader/nonsfi/irt_memory.cc
+++ b/components/nacl/loader/nonsfi/irt_memory.cc
@@ -5,6 +5,7 @@
 #include <errno.h>
 #include <sys/mman.h>
 
+#include "base/logging.h"
 #include "components/nacl/loader/nonsfi/irt_interfaces.h"
 #include "components/nacl/loader/nonsfi/irt_util.h"
 #include "native_client/src/trusted/service_runtime/include/machine/_types.h"
@@ -46,10 +47,20 @@
 
 int IrtMMap(void** addr, size_t len, int prot, int flags,
             int fd, nacl_abi_off_t off) {
-  void* result =
-      mmap(*addr, len, NaClProtToProt(prot), NaClFlagsToFlags(flags), fd, off);
+  const int host_prot = NaClProtToProt(prot);
+  // On Chrome OS, mmap can fail if PROT_EXEC is set in |host_prot|,
+  // but mprotect will allow changing the permissions later.
+  // This is because Chrome OS mounts writable filesystems with "noexec".
+  void* result = mmap(
+      *addr, len, host_prot & ~PROT_EXEC, NaClFlagsToFlags(flags), fd, off);
   if (result == MAP_FAILED)
     return errno;
+  if (host_prot & PROT_EXEC) {
+    if (mprotect(result, len, host_prot) != 0) {
+      // This aborts here because it cannot easily undo the mmap() call.
+      LOG_ERRNO(FATAL) << "IrtMMap: mprotect to turn on PROT_EXEC failed.";
+    }
+  }
 
   *addr = result;
   return 0;
diff --git a/components/nacl/loader/nonsfi/nonsfi_main.cc b/components/nacl/loader/nonsfi/nonsfi_main.cc
index 0d1a3f8..bc420a0 100644
--- a/components/nacl/loader/nonsfi/nonsfi_main.cc
+++ b/components/nacl/loader/nonsfi/nonsfi_main.cc
@@ -43,7 +43,6 @@
     // This will only happen once per process, so we give the permission to
     // create Singletons.
     base::ThreadRestrictions::SetSingletonAllowed(true);
-    ppapi::StartUpPlugin();
     uintptr_t info[] = {
       0,  // Do not use fini.
       0,  // envc.
diff --git a/components/nacl/loader/nonsfi/nonsfi_sandbox.cc b/components/nacl/loader/nonsfi/nonsfi_sandbox.cc
new file mode 100644
index 0000000..a58ba84
--- /dev/null
+++ b/components/nacl/loader/nonsfi/nonsfi_sandbox.cc
@@ -0,0 +1,315 @@
+// 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.
+
+#include "components/nacl/loader/nonsfi/nonsfi_sandbox.h"
+
+#include <errno.h>
+#include <fcntl.h>
+#include <linux/net.h>
+#include <sys/prctl.h>
+#include <sys/ptrace.h>
+#include <sys/mman.h>
+#include <sys/socket.h>
+#include <sys/syscall.h>
+
+#include "base/basictypes.h"
+#include "base/logging.h"
+#include "build/build_config.h"
+#include "content/public/common/sandbox_init.h"
+#include "sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.h"
+#include "sandbox/linux/seccomp-bpf/sandbox_bpf.h"
+#include "sandbox/linux/seccomp-bpf/sandbox_bpf_policy.h"
+#include "sandbox/linux/seccomp-bpf/trap.h"
+#include "sandbox/linux/services/linux_syscalls.h"
+
+#if defined(__arm__) && !defined(MAP_STACK)
+// Chrome OS Daisy (ARM) build environment has old headers.
+#define MAP_STACK 0x20000
+#endif
+
+using sandbox::ErrorCode;
+using sandbox::SandboxBPF;
+
+namespace nacl {
+namespace nonsfi {
+namespace {
+
+ErrorCode RestrictFcntlCommands(SandboxBPF* sb) {
+  ErrorCode::ArgType mask_long_type;
+  if (sizeof(long) == 8) {
+    mask_long_type = ErrorCode::TP_64BIT;
+  } else if (sizeof(long) == 4) {
+    mask_long_type = ErrorCode::TP_32BIT;
+  } else {
+    NOTREACHED();
+  }
+  // We allow following cases:
+  // 1. F_SETFD + FD_CLOEXEC: libevent's epoll_init uses this.
+  // 2. F_GETFL: Used by SetNonBlocking in
+  // message_pump_libevent.cc and Channel::ChannelImpl::CreatePipe
+  // in ipc_channel_posix.cc. Note that the latter does not work
+  // with EPERM.
+  // 3. F_SETFL: Used by evutil_make_socket_nonblocking in
+  // libevent and SetNonBlocking. As the latter mix O_NONBLOCK to
+  // the return value of F_GETFL, so we need to allow O_ACCMODE in
+  // addition to O_NONBLOCK.
+  const unsigned long denied_mask = ~(O_ACCMODE | O_NONBLOCK);
+  return sb->Cond(1, ErrorCode::TP_32BIT,
+                  ErrorCode::OP_EQUAL, F_SETFD,
+                  sb->Cond(2, mask_long_type,
+                           ErrorCode::OP_EQUAL, FD_CLOEXEC,
+                           ErrorCode(ErrorCode::ERR_ALLOWED),
+                  sb->Trap(sandbox::CrashSIGSYS_Handler, NULL)),
+         sb->Cond(1, ErrorCode::TP_32BIT,
+                  ErrorCode::OP_EQUAL, F_GETFL,
+                  ErrorCode(ErrorCode::ERR_ALLOWED),
+         sb->Cond(1, ErrorCode::TP_32BIT,
+                  ErrorCode::OP_EQUAL, F_SETFL,
+                  sb->Cond(2, mask_long_type,
+                           ErrorCode::OP_HAS_ANY_BITS, denied_mask,
+                           sb->Trap(sandbox::CrashSIGSYS_Handler, NULL),
+                           ErrorCode(ErrorCode::ERR_ALLOWED)),
+         sb->Trap(sandbox::CrashSIGSYS_Handler, NULL))));
+}
+
+ErrorCode RestrictClone(SandboxBPF* sb) {
+  // We allow clone only for new thread creation.
+  return sb->Cond(0, ErrorCode::TP_32BIT, ErrorCode::OP_EQUAL,
+                  CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND |
+                  CLONE_THREAD | CLONE_SYSVSEM | CLONE_SETTLS |
+                  CLONE_PARENT_SETTID | CLONE_CHILD_CLEARTID,
+                  ErrorCode(ErrorCode::ERR_ALLOWED),
+         sb->Trap(sandbox::SIGSYSCloneFailure, NULL));
+}
+
+ErrorCode RestrictPrctl(SandboxBPF* sb) {
+  // base::PlatformThread::SetName() uses PR_SET_NAME so we return
+  // EPERM for it. Otherwise, we will raise SIGSYS.
+  return sb->Cond(0, ErrorCode::TP_32BIT, ErrorCode::OP_EQUAL,
+                  PR_SET_NAME, ErrorCode(EPERM),
+         sb->Trap(sandbox::SIGSYSPrctlFailure, NULL));
+}
+
+#if defined(__i386__)
+ErrorCode RestrictSocketcall(SandboxBPF* sb) {
+  // We only allow socketpair, sendmsg, and recvmsg.
+  return sb->Cond(0, ErrorCode::TP_32BIT, ErrorCode::OP_EQUAL,
+                  SYS_SOCKETPAIR,
+                  ErrorCode(ErrorCode::ERR_ALLOWED),
+         sb->Cond(0, ErrorCode::TP_32BIT, ErrorCode::OP_EQUAL,
+                  SYS_SENDMSG,
+                  ErrorCode(ErrorCode::ERR_ALLOWED),
+         sb->Cond(0, ErrorCode::TP_32BIT, ErrorCode::OP_EQUAL,
+                  SYS_RECVMSG,
+                  ErrorCode(ErrorCode::ERR_ALLOWED),
+         sb->Cond(0, ErrorCode::TP_32BIT, ErrorCode::OP_EQUAL,
+                  SYS_SHUTDOWN,
+                  ErrorCode(ErrorCode::ERR_ALLOWED),
+                  sb->Trap(sandbox::CrashSIGSYS_Handler, NULL)))));
+}
+#endif
+
+ErrorCode RestrictMemoryProtection(SandboxBPF* sb, int argno) {
+  // TODO(jln, keescook, drewry): Limit the use of mmap/mprotect by
+  // adding some features to linux kernel.
+  const uint32_t denied_mask = ~(PROT_READ | PROT_WRITE | PROT_EXEC);
+  return sb->Cond(argno, ErrorCode::TP_32BIT,
+                  ErrorCode::OP_HAS_ANY_BITS,
+                  denied_mask,
+         sb->Trap(sandbox::CrashSIGSYS_Handler, NULL),
+                  ErrorCode(ErrorCode::ERR_ALLOWED));
+}
+
+ErrorCode RestrictMmap(SandboxBPF* sb) {
+  const uint32_t denied_flag_mask = ~(MAP_SHARED | MAP_PRIVATE |
+                                      MAP_ANONYMOUS | MAP_STACK | MAP_FIXED);
+  // TODO(hamaji): Disallow RWX mmap.
+  return sb->Cond(3, ErrorCode::TP_32BIT,
+                  ErrorCode::OP_HAS_ANY_BITS,
+                  denied_flag_mask,
+         sb->Trap(sandbox::CrashSIGSYS_Handler, NULL),
+                  RestrictMemoryProtection(sb, 2));
+}
+
+ErrorCode RestrictSocketpair(SandboxBPF* sb) {
+  // Only allow AF_UNIX, PF_UNIX. Crash if anything else is seen.
+  COMPILE_ASSERT(AF_UNIX == PF_UNIX, af_unix_pf_unix_different);
+  return sb->Cond(0, ErrorCode::TP_32BIT,
+                  ErrorCode::OP_EQUAL, AF_UNIX,
+                  ErrorCode(ErrorCode::ERR_ALLOWED),
+         sb->Trap(sandbox::CrashSIGSYS_Handler, NULL));
+}
+
+bool IsGracefullyDenied(int sysno) {
+  switch (sysno) {
+    // third_party/libevent uses them, but we can just return -1 from
+    // them as it is just checking getuid() != geteuid() and
+    // getgid() != getegid()
+#if defined(__i386__) || defined(__arm__)
+    case __NR_getegid32:
+    case __NR_geteuid32:
+    case __NR_getgid32:
+    case __NR_getuid32:
+#elif defined(__x86_64__)
+    case __NR_getegid:
+    case __NR_geteuid:
+    case __NR_getgid:
+    case __NR_getuid:
+#endif
+    // tcmalloc calls madvise in TCMalloc_SystemRelease.
+    case __NR_madvise:
+    // EPERM instead of SIGSYS as glibc tries to open files in /proc.
+    // TODO(hamaji): Remove this when we switch to newlib.
+    case __NR_open:
+    // For RunSandboxSanityChecks().
+    case __NR_ptrace:
+    // glibc uses this for its pthread implementation. If we return
+    // EPERM for this, glibc will stop using this.
+    // TODO(hamaji): newlib does not use this. Make this SIGTRAP once
+    // we have switched to newlib.
+    case __NR_set_robust_list:
+    // This is obsolete in ARM EABI, but x86 glibc indirectly calls
+    // this in sysconf.
+#if defined(__i386__) || defined(__x86_64__)
+    case __NR_time:
+#endif
+      return true;
+
+    default:
+      return false;
+  }
+}
+
+void RunSandboxSanityChecks() {
+  errno = 0;
+  // Make a ptrace request with an invalid PID.
+  long ptrace_ret = ptrace(PTRACE_PEEKUSER, -1 /* pid */, NULL, NULL);
+  CHECK_EQ(-1, ptrace_ret);
+  // Without the sandbox on, this ptrace call would ESRCH instead.
+  CHECK_EQ(EPERM, errno);
+}
+
+}  // namespace
+
+ErrorCode NaClNonSfiBPFSandboxPolicy::EvaluateSyscall(
+    SandboxBPF* sb, int sysno) const {
+  return EvaluateSyscallImpl(sb, sysno, NULL);
+}
+
+ErrorCode NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl(
+    SandboxBPF* sb, int sysno, void*) {
+  switch (sysno) {
+    // Allowed syscalls.
+#if defined(__i386__) || defined(__arm__)
+    case __NR__llseek:
+#elif defined(__x86_64__)
+    case __NR_lseek:
+#endif
+    // NaCl runtime exposes clock_gettime and clock_getres to untrusted code.
+    case __NR_clock_getres:
+    case __NR_clock_gettime:
+    case __NR_close:
+    case __NR_dup:
+    case __NR_dup2:
+    case __NR_epoll_create:
+    case __NR_epoll_ctl:
+    case __NR_epoll_wait:
+    case __NR_exit:
+    case __NR_exit_group:
+#if defined(__i386__) || defined(__arm__)
+    case __NR_fstat64:
+#elif defined(__x86_64__)
+    case __NR_fstat:
+#endif
+    // TODO(hamaji): Allow only FUTEX_PRIVATE_FLAG.
+    case __NR_futex:
+    // TODO(hamaji): Remove the need of gettid. Currently, this is
+    // called from PlatformThread::CurrentId().
+    case __NR_gettid:
+    case __NR_gettimeofday:
+    case __NR_munmap:
+    case __NR_nanosleep:
+    // TODO(hamaji): Remove the need of pipe. Currently, this is
+    // called from base::MessagePumpLibevent::Init().
+    case __NR_pipe:
+    case __NR_pread64:
+    case __NR_pwrite64:
+    case __NR_read:
+    case __NR_restart_syscall:
+    case __NR_sched_yield:
+    // __NR_times needed as clock() is called by CommandBufferHelper, which is
+    // used by NaCl applications that use Pepper's 3D interfaces.
+    // See crbug.com/264856 for details.
+    case __NR_times:
+    case __NR_write:
+#if defined(__arm__)
+    case __ARM_NR_cacheflush:
+#endif
+      return ErrorCode(ErrorCode::ERR_ALLOWED);
+
+    case __NR_clone:
+      return RestrictClone(sb);
+
+#if defined(__x86_64__)
+    case __NR_fcntl:
+#endif
+#if defined(__i386__) || defined(__arm__)
+    case __NR_fcntl64:
+#endif
+      return RestrictFcntlCommands(sb);
+
+#if defined(__x86_64__)
+    case __NR_mmap:
+#endif
+#if defined(__i386__) || defined(__arm__)
+    case __NR_mmap2:
+#endif
+      return RestrictMmap(sb);
+    case __NR_mprotect:
+      return RestrictMemoryProtection(sb, 2);
+
+    case __NR_prctl:
+      return RestrictPrctl(sb);
+
+#if defined(__i386__)
+    case __NR_socketcall:
+      return RestrictSocketcall(sb);
+#endif
+#if defined(__x86_64__) || defined(__arm__)
+    case __NR_recvmsg:
+    case __NR_sendmsg:
+    case __NR_shutdown:
+      return ErrorCode(ErrorCode::ERR_ALLOWED);
+    case __NR_socketpair:
+      return RestrictSocketpair(sb);
+#endif
+
+    case __NR_brk:
+      // The behavior of brk on Linux is different from other system
+      // calls. It does not return errno but the current break on
+      // failure. glibc thinks brk failed if the return value of brk
+      // is less than the requested address (i.e., brk(addr) < addr).
+      // So, glibc thinks brk succeeded if we return -EPERM and we
+      // need to return zero instead.
+      return ErrorCode(0);
+
+    default:
+      if (IsGracefullyDenied(sysno))
+        return ErrorCode(EPERM);
+      return sb->Trap(sandbox::CrashSIGSYS_Handler, NULL);
+  }
+}
+
+bool InitializeBPFSandbox() {
+  bool sandbox_is_initialized = content::InitializeSandbox(
+      scoped_ptr<sandbox::SandboxBPFPolicy>(
+          new nacl::nonsfi::NaClNonSfiBPFSandboxPolicy()));
+  if (!sandbox_is_initialized)
+    return false;
+  RunSandboxSanityChecks();
+  return true;
+}
+
+}  // namespace nonsfi
+}  // namespace nacl
diff --git a/components/nacl/loader/nonsfi/nonsfi_sandbox.h b/components/nacl/loader/nonsfi/nonsfi_sandbox.h
new file mode 100644
index 0000000..28e9cff
--- /dev/null
+++ b/components/nacl/loader/nonsfi/nonsfi_sandbox.h
@@ -0,0 +1,39 @@
+// 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.
+
+#ifndef COMPONENTS_NACL_LOADER_NONSFI_NONSFI_SANDBOX_H_
+#define COMPONENTS_NACL_LOADER_NONSFI_NONSFI_SANDBOX_H_
+
+#include "base/basictypes.h"
+#include "sandbox/linux/seccomp-bpf/sandbox_bpf_policy.h"
+
+namespace nacl {
+namespace nonsfi {
+
+// The seccomp sandbox policy for NaCl non-SFI mode. Note that this
+// policy must be as strong as possible, as non-SFI mode heavily
+// depends on seccomp sandbox.
+class NaClNonSfiBPFSandboxPolicy : public sandbox::SandboxBPFPolicy {
+ public:
+  explicit NaClNonSfiBPFSandboxPolicy() {}
+  virtual ~NaClNonSfiBPFSandboxPolicy() {}
+
+  virtual sandbox::ErrorCode EvaluateSyscall(sandbox::SandboxBPF* sb,
+                                             int sysno) const OVERRIDE;
+
+  static sandbox::ErrorCode EvaluateSyscallImpl(sandbox::SandboxBPF* sb,
+                                                int sysno, void*);
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(NaClNonSfiBPFSandboxPolicy);
+};
+
+// Initializes seccomp-bpf sandbox for non-SFI NaCl. Returns false on
+// failure.
+bool InitializeBPFSandbox();
+
+}  // namespace nonsfi
+}  // namespace nacl
+
+#endif  // COMPONENTS_NACL_LOADER_NONSFI_NONSFI_SANDBOX_H_
diff --git a/components/nacl/loader/nonsfi/nonsfi_sandbox_sigsys_unittest.cc b/components/nacl/loader/nonsfi/nonsfi_sandbox_sigsys_unittest.cc
new file mode 100644
index 0000000..ca0000c
--- /dev/null
+++ b/components/nacl/loader/nonsfi/nonsfi_sandbox_sigsys_unittest.cc
@@ -0,0 +1,615 @@
+// 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.
+
+// ASAN internally uses some syscalls which non-SFI NaCl disallows.
+// Seccomp-BPF tests die under TSAN v2. See http://crbug.com/356588
+#if !defined(ADDRESS_SANITIZER) && !defined(THREAD_SANITIZER)
+
+#include "components/nacl/loader/nonsfi/nonsfi_sandbox.h"
+
+#include "sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.h"
+#include "sandbox/linux/seccomp-bpf/bpf_tests.h"
+
+namespace {
+
+// Test cases in this file just make sure not-whitelisted syscalls
+// are appropriately disallowed. They should raise SIGSYS regardless
+// of arguments. We always pass five zeros not to pass uninitialized
+// values to syscalls.
+#define RESTRICT_SYSCALL_DEATH_TEST_IMPL(name, sysno)                   \
+  BPF_DEATH_TEST(                                                       \
+      NaClNonSfiSandboxSIGSYSTest, name,                                \
+      DEATH_MESSAGE(sandbox::GetErrorMessageContentForTests()),         \
+      nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {  \
+    syscall(sysno, 0, 0, 0, 0, 0);                                      \
+  }
+
+#define RESTRICT_SYSCALL_DEATH_TEST(name)               \
+  RESTRICT_SYSCALL_DEATH_TEST_IMPL(name, __NR_ ## name)
+
+#define RESTRICT_ARM_SYSCALL_DEATH_TEST(name)           \
+  RESTRICT_SYSCALL_DEATH_TEST_IMPL(ARM_ ## name, __ARM_NR_ ## name)
+
+#if defined(__i386__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(_newselect);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(_sysctl);
+#if defined(__x86_64__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(accept);
+#endif
+#if defined(__x86_64__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(accept4);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(access);
+RESTRICT_SYSCALL_DEATH_TEST(acct);
+RESTRICT_SYSCALL_DEATH_TEST(add_key);
+RESTRICT_SYSCALL_DEATH_TEST(adjtimex);
+#if defined(__i386__) || defined(__x86_64__)
+RESTRICT_SYSCALL_DEATH_TEST(afs_syscall);
+#endif
+#if defined(__i386__) || defined(__x86_64__)
+RESTRICT_SYSCALL_DEATH_TEST(alarm);
+#endif
+#if defined(__x86_64__)
+RESTRICT_SYSCALL_DEATH_TEST(arch_prctl);
+#endif
+#if defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(arm_fadvise64_64);
+#endif
+#if defined(__i386__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(bdflush);
+#endif
+#if defined(__x86_64__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(bind);
+#endif
+#if defined(__i386__)
+RESTRICT_SYSCALL_DEATH_TEST(break);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(capget);
+RESTRICT_SYSCALL_DEATH_TEST(capset);
+RESTRICT_SYSCALL_DEATH_TEST(chdir);
+RESTRICT_SYSCALL_DEATH_TEST(chmod);
+RESTRICT_SYSCALL_DEATH_TEST(chown);
+#if defined(__i386__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(chown32);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(chroot);
+RESTRICT_SYSCALL_DEATH_TEST(clock_adjtime);
+RESTRICT_SYSCALL_DEATH_TEST(clock_nanosleep);
+RESTRICT_SYSCALL_DEATH_TEST(clock_settime);
+#if defined(__x86_64__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(connect);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(creat);
+#if defined(__i386__) || defined(__x86_64__)
+RESTRICT_SYSCALL_DEATH_TEST(create_module);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(delete_module);
+RESTRICT_SYSCALL_DEATH_TEST(dup3);
+RESTRICT_SYSCALL_DEATH_TEST(epoll_create1);
+#if defined(__x86_64__)
+RESTRICT_SYSCALL_DEATH_TEST(epoll_ctl_old);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(epoll_pwait);
+#if defined(__x86_64__)
+RESTRICT_SYSCALL_DEATH_TEST(epoll_wait_old);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(eventfd);
+RESTRICT_SYSCALL_DEATH_TEST(eventfd2);
+RESTRICT_SYSCALL_DEATH_TEST(execve);
+RESTRICT_SYSCALL_DEATH_TEST(faccessat);
+#if defined(__i386__) || defined(__x86_64__)
+RESTRICT_SYSCALL_DEATH_TEST(fadvise64);
+#endif
+#if defined(__i386__)
+RESTRICT_SYSCALL_DEATH_TEST(fadvise64_64);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(fallocate);
+RESTRICT_SYSCALL_DEATH_TEST(fanotify_init);
+RESTRICT_SYSCALL_DEATH_TEST(fanotify_mark);
+RESTRICT_SYSCALL_DEATH_TEST(fchdir);
+RESTRICT_SYSCALL_DEATH_TEST(fchmod);
+RESTRICT_SYSCALL_DEATH_TEST(fchmodat);
+RESTRICT_SYSCALL_DEATH_TEST(fchown);
+#if defined(__i386__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(fchown32);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(fchownat);
+#if defined(__i386__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(fcntl);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(fdatasync);
+RESTRICT_SYSCALL_DEATH_TEST(fgetxattr);
+RESTRICT_SYSCALL_DEATH_TEST(flistxattr);
+RESTRICT_SYSCALL_DEATH_TEST(flock);
+RESTRICT_SYSCALL_DEATH_TEST(fork);
+RESTRICT_SYSCALL_DEATH_TEST(fremovexattr);
+RESTRICT_SYSCALL_DEATH_TEST(fsetxattr);
+#if defined(__i386__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(fstat);
+#endif
+#if defined(__i386__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(fstatat64);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(fstatfs);
+#if defined(__i386__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(fstatfs64);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(fsync);
+#if defined(__i386__)
+RESTRICT_SYSCALL_DEATH_TEST(ftime);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(ftruncate);
+#if defined(__i386__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(ftruncate64);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(futimesat);
+#if defined(__i386__) || defined(__x86_64__)
+RESTRICT_SYSCALL_DEATH_TEST(get_kernel_syms);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(get_mempolicy);
+RESTRICT_SYSCALL_DEATH_TEST(get_robust_list);
+#if defined(__i386__) || defined(__x86_64__)
+RESTRICT_SYSCALL_DEATH_TEST(get_thread_area);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(getcpu);
+RESTRICT_SYSCALL_DEATH_TEST(getcwd);
+RESTRICT_SYSCALL_DEATH_TEST(getdents);
+RESTRICT_SYSCALL_DEATH_TEST(getdents64);
+RESTRICT_SYSCALL_DEATH_TEST(getgroups);
+#if defined(__i386__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(getgroups32);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(getitimer);
+#if defined(__x86_64__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(getpeername);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(getpgid);
+RESTRICT_SYSCALL_DEATH_TEST(getpgrp);
+RESTRICT_SYSCALL_DEATH_TEST(getpid);
+#if defined(__i386__) || defined(__x86_64__)
+RESTRICT_SYSCALL_DEATH_TEST(getpmsg);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(getppid);
+RESTRICT_SYSCALL_DEATH_TEST(getpriority);
+RESTRICT_SYSCALL_DEATH_TEST(getresgid);
+#if defined(__i386__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(getresgid32);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(getresuid);
+#if defined(__i386__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(getresuid32);
+#endif
+#if defined(__i386__) || defined(__x86_64__)
+RESTRICT_SYSCALL_DEATH_TEST(getrlimit);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(getrusage);
+RESTRICT_SYSCALL_DEATH_TEST(getsid);
+#if defined(__x86_64__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(getsockname);
+#endif
+#if defined(__x86_64__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(getsockopt);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(getxattr);
+#if defined(__i386__)
+RESTRICT_SYSCALL_DEATH_TEST(gtty);
+#endif
+#if defined(__i386__)
+RESTRICT_SYSCALL_DEATH_TEST(idle);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(init_module);
+RESTRICT_SYSCALL_DEATH_TEST(inotify_add_watch);
+RESTRICT_SYSCALL_DEATH_TEST(inotify_init);
+RESTRICT_SYSCALL_DEATH_TEST(inotify_init1);
+RESTRICT_SYSCALL_DEATH_TEST(inotify_rm_watch);
+RESTRICT_SYSCALL_DEATH_TEST(io_cancel);
+RESTRICT_SYSCALL_DEATH_TEST(io_destroy);
+RESTRICT_SYSCALL_DEATH_TEST(io_getevents);
+RESTRICT_SYSCALL_DEATH_TEST(io_setup);
+RESTRICT_SYSCALL_DEATH_TEST(io_submit);
+RESTRICT_SYSCALL_DEATH_TEST(ioctl);
+#if defined(__i386__) || defined(__x86_64__)
+RESTRICT_SYSCALL_DEATH_TEST(ioperm);
+#endif
+#if defined(__i386__) || defined(__x86_64__)
+RESTRICT_SYSCALL_DEATH_TEST(iopl);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(ioprio_get);
+RESTRICT_SYSCALL_DEATH_TEST(ioprio_set);
+#if defined(__i386__)
+RESTRICT_SYSCALL_DEATH_TEST(ipc);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(kexec_load);
+RESTRICT_SYSCALL_DEATH_TEST(keyctl);
+RESTRICT_SYSCALL_DEATH_TEST(kill);
+RESTRICT_SYSCALL_DEATH_TEST(lchown);
+#if defined(__i386__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(lchown32);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(lgetxattr);
+RESTRICT_SYSCALL_DEATH_TEST(link);
+RESTRICT_SYSCALL_DEATH_TEST(linkat);
+#if defined(__x86_64__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(listen);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(listxattr);
+RESTRICT_SYSCALL_DEATH_TEST(llistxattr);
+#if defined(__i386__)
+RESTRICT_SYSCALL_DEATH_TEST(lock);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(lookup_dcookie);
+RESTRICT_SYSCALL_DEATH_TEST(lremovexattr);
+#if defined(__i386__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(lseek);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(lsetxattr);
+RESTRICT_SYSCALL_DEATH_TEST(lstat);
+#if defined(__i386__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(lstat64);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(mbind);
+#if defined(__i386__) || defined(__x86_64__)
+RESTRICT_SYSCALL_DEATH_TEST(migrate_pages);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(mincore);
+RESTRICT_SYSCALL_DEATH_TEST(mkdir);
+RESTRICT_SYSCALL_DEATH_TEST(mkdirat);
+RESTRICT_SYSCALL_DEATH_TEST(mknod);
+RESTRICT_SYSCALL_DEATH_TEST(mknodat);
+RESTRICT_SYSCALL_DEATH_TEST(mlock);
+RESTRICT_SYSCALL_DEATH_TEST(mlockall);
+#if defined(__i386__)
+RESTRICT_SYSCALL_DEATH_TEST(mmap);
+#endif
+#if defined(__i386__) || defined(__x86_64__)
+RESTRICT_SYSCALL_DEATH_TEST(modify_ldt);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(mount);
+RESTRICT_SYSCALL_DEATH_TEST(move_pages);
+#if defined(__i386__)
+RESTRICT_SYSCALL_DEATH_TEST(mpx);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(mq_getsetattr);
+RESTRICT_SYSCALL_DEATH_TEST(mq_notify);
+RESTRICT_SYSCALL_DEATH_TEST(mq_open);
+RESTRICT_SYSCALL_DEATH_TEST(mq_timedreceive);
+RESTRICT_SYSCALL_DEATH_TEST(mq_timedsend);
+RESTRICT_SYSCALL_DEATH_TEST(mq_unlink);
+RESTRICT_SYSCALL_DEATH_TEST(mremap);
+#if defined(__x86_64__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(msgctl);
+#endif
+#if defined(__x86_64__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(msgget);
+#endif
+#if defined(__x86_64__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(msgrcv);
+#endif
+#if defined(__x86_64__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(msgsnd);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(msync);
+RESTRICT_SYSCALL_DEATH_TEST(munlock);
+RESTRICT_SYSCALL_DEATH_TEST(munlockall);
+RESTRICT_SYSCALL_DEATH_TEST(name_to_handle_at);
+#if defined(__x86_64__)
+RESTRICT_SYSCALL_DEATH_TEST(newfstatat);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(nfsservctl);
+#if defined(__i386__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(nice);
+#endif
+#if defined(__i386__)
+RESTRICT_SYSCALL_DEATH_TEST(oldfstat);
+#endif
+#if defined(__i386__)
+RESTRICT_SYSCALL_DEATH_TEST(oldlstat);
+#endif
+#if defined(__i386__)
+RESTRICT_SYSCALL_DEATH_TEST(oldolduname);
+#endif
+#if defined(__i386__)
+RESTRICT_SYSCALL_DEATH_TEST(oldstat);
+#endif
+#if defined(__i386__)
+RESTRICT_SYSCALL_DEATH_TEST(olduname);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(open_by_handle_at);
+RESTRICT_SYSCALL_DEATH_TEST(openat);
+RESTRICT_SYSCALL_DEATH_TEST(pause);
+#if defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(pciconfig_iobase);
+#endif
+#if defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(pciconfig_read);
+#endif
+#if defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(pciconfig_write);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(perf_event_open);
+RESTRICT_SYSCALL_DEATH_TEST(personality);
+RESTRICT_SYSCALL_DEATH_TEST(pipe2);
+RESTRICT_SYSCALL_DEATH_TEST(pivot_root);
+RESTRICT_SYSCALL_DEATH_TEST(poll);
+RESTRICT_SYSCALL_DEATH_TEST(ppoll);
+RESTRICT_SYSCALL_DEATH_TEST(preadv);
+RESTRICT_SYSCALL_DEATH_TEST(prlimit64);
+RESTRICT_SYSCALL_DEATH_TEST(process_vm_readv);
+RESTRICT_SYSCALL_DEATH_TEST(process_vm_writev);
+#if defined(__i386__)
+RESTRICT_SYSCALL_DEATH_TEST(prof);
+#endif
+#if defined(__i386__)
+RESTRICT_SYSCALL_DEATH_TEST(profil);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(pselect6);
+#if defined(__i386__) || defined(__x86_64__)
+RESTRICT_SYSCALL_DEATH_TEST(putpmsg);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(pwritev);
+#if defined(__i386__) || defined(__x86_64__)
+RESTRICT_SYSCALL_DEATH_TEST(query_module);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(quotactl);
+RESTRICT_SYSCALL_DEATH_TEST(readahead);
+#if defined(__i386__)
+RESTRICT_SYSCALL_DEATH_TEST(readdir);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(readlink);
+RESTRICT_SYSCALL_DEATH_TEST(readlinkat);
+RESTRICT_SYSCALL_DEATH_TEST(readv);
+RESTRICT_SYSCALL_DEATH_TEST(reboot);
+#if defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(recv);
+#endif
+#if defined(__x86_64__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(recvfrom);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(recvmmsg);
+RESTRICT_SYSCALL_DEATH_TEST(remap_file_pages);
+RESTRICT_SYSCALL_DEATH_TEST(removexattr);
+RESTRICT_SYSCALL_DEATH_TEST(rename);
+RESTRICT_SYSCALL_DEATH_TEST(renameat);
+RESTRICT_SYSCALL_DEATH_TEST(request_key);
+RESTRICT_SYSCALL_DEATH_TEST(rmdir);
+RESTRICT_SYSCALL_DEATH_TEST(rt_sigaction);
+RESTRICT_SYSCALL_DEATH_TEST(rt_sigpending);
+RESTRICT_SYSCALL_DEATH_TEST(rt_sigprocmask);
+RESTRICT_SYSCALL_DEATH_TEST(rt_sigqueueinfo);
+RESTRICT_SYSCALL_DEATH_TEST(rt_sigreturn);
+RESTRICT_SYSCALL_DEATH_TEST(rt_sigsuspend);
+RESTRICT_SYSCALL_DEATH_TEST(rt_sigtimedwait);
+RESTRICT_SYSCALL_DEATH_TEST(rt_tgsigqueueinfo);
+RESTRICT_SYSCALL_DEATH_TEST(sched_get_priority_max);
+RESTRICT_SYSCALL_DEATH_TEST(sched_get_priority_min);
+RESTRICT_SYSCALL_DEATH_TEST(sched_getaffinity);
+RESTRICT_SYSCALL_DEATH_TEST(sched_getparam);
+RESTRICT_SYSCALL_DEATH_TEST(sched_getscheduler);
+RESTRICT_SYSCALL_DEATH_TEST(sched_rr_get_interval);
+RESTRICT_SYSCALL_DEATH_TEST(sched_setaffinity);
+RESTRICT_SYSCALL_DEATH_TEST(sched_setparam);
+RESTRICT_SYSCALL_DEATH_TEST(sched_setscheduler);
+#if defined(__x86_64__)
+RESTRICT_SYSCALL_DEATH_TEST(security);
+#endif
+#if defined(__i386__) || defined(__x86_64__)
+RESTRICT_SYSCALL_DEATH_TEST(select);
+#endif
+#if defined(__x86_64__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(semctl);
+#endif
+#if defined(__x86_64__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(semget);
+#endif
+#if defined(__x86_64__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(semop);
+#endif
+#if defined(__x86_64__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(semtimedop);
+#endif
+#if defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(send);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(sendfile);
+#if defined(__i386__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(sendfile64);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(sendmmsg);
+#if defined(__x86_64__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(sendto);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(set_mempolicy);
+#if defined(__i386__) || defined(__x86_64__)
+RESTRICT_SYSCALL_DEATH_TEST(set_thread_area);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(set_tid_address);
+RESTRICT_SYSCALL_DEATH_TEST(setdomainname);
+RESTRICT_SYSCALL_DEATH_TEST(setfsgid);
+#if defined(__i386__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(setfsgid32);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(setfsuid);
+#if defined(__i386__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(setfsuid32);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(setgid);
+#if defined(__i386__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(setgid32);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(setgroups);
+#if defined(__i386__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(setgroups32);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(sethostname);
+RESTRICT_SYSCALL_DEATH_TEST(setitimer);
+RESTRICT_SYSCALL_DEATH_TEST(setns);
+RESTRICT_SYSCALL_DEATH_TEST(setpgid);
+RESTRICT_SYSCALL_DEATH_TEST(setpriority);
+RESTRICT_SYSCALL_DEATH_TEST(setregid);
+#if defined(__i386__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(setregid32);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(setresgid);
+#if defined(__i386__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(setresgid32);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(setresuid);
+#if defined(__i386__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(setresuid32);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(setreuid);
+#if defined(__i386__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(setreuid32);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(setrlimit);
+RESTRICT_SYSCALL_DEATH_TEST(setsid);
+#if defined(__x86_64__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(setsockopt);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(settimeofday);
+RESTRICT_SYSCALL_DEATH_TEST(setuid);
+#if defined(__i386__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(setuid32);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(setxattr);
+#if defined(__i386__)
+RESTRICT_SYSCALL_DEATH_TEST(sgetmask);
+#endif
+#if defined(__x86_64__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(shmat);
+#endif
+#if defined(__x86_64__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(shmctl);
+#endif
+#if defined(__x86_64__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(shmdt);
+#endif
+#if defined(__x86_64__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(shmget);
+#endif
+#if defined(__i386__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(sigaction);
+#endif
+#if defined(__i386__)
+RESTRICT_SYSCALL_DEATH_TEST(signal);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(signalfd);
+RESTRICT_SYSCALL_DEATH_TEST(signalfd4);
+#if defined(__i386__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(sigpending);
+#endif
+#if defined(__i386__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(sigprocmask);
+#endif
+#if defined(__i386__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(sigreturn);
+#endif
+#if defined(__i386__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(sigsuspend);
+#endif
+#if defined(__x86_64__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(socket);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(splice);
+#if defined(__i386__)
+RESTRICT_SYSCALL_DEATH_TEST(ssetmask);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(stat);
+#if defined(__i386__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(stat64);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(statfs);
+#if defined(__i386__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(statfs64);
+#endif
+#if defined(__i386__)
+RESTRICT_SYSCALL_DEATH_TEST(stime);
+#endif
+#if defined(__i386__)
+RESTRICT_SYSCALL_DEATH_TEST(stty);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(swapoff);
+RESTRICT_SYSCALL_DEATH_TEST(swapon);
+RESTRICT_SYSCALL_DEATH_TEST(symlink);
+RESTRICT_SYSCALL_DEATH_TEST(symlinkat);
+RESTRICT_SYSCALL_DEATH_TEST(sync);
+#if defined(__i386__) || defined(__x86_64__)
+RESTRICT_SYSCALL_DEATH_TEST(sync_file_range);
+#endif
+#if defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(sync_file_range2);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(syncfs);
+RESTRICT_SYSCALL_DEATH_TEST(sysfs);
+RESTRICT_SYSCALL_DEATH_TEST(sysinfo);
+RESTRICT_SYSCALL_DEATH_TEST(syslog);
+RESTRICT_SYSCALL_DEATH_TEST(tee);
+RESTRICT_SYSCALL_DEATH_TEST(tgkill);
+RESTRICT_SYSCALL_DEATH_TEST(timer_create);
+RESTRICT_SYSCALL_DEATH_TEST(timer_delete);
+RESTRICT_SYSCALL_DEATH_TEST(timer_getoverrun);
+RESTRICT_SYSCALL_DEATH_TEST(timer_gettime);
+RESTRICT_SYSCALL_DEATH_TEST(timer_settime);
+RESTRICT_SYSCALL_DEATH_TEST(timerfd_create);
+RESTRICT_SYSCALL_DEATH_TEST(timerfd_gettime);
+RESTRICT_SYSCALL_DEATH_TEST(timerfd_settime);
+RESTRICT_SYSCALL_DEATH_TEST(tkill);
+RESTRICT_SYSCALL_DEATH_TEST(truncate);
+#if defined(__i386__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(truncate64);
+#endif
+#if defined(__x86_64__)
+RESTRICT_SYSCALL_DEATH_TEST(tuxcall);
+#endif
+#if defined(__i386__) || defined(__arm__)
+RESTRICT_SYSCALL_DEATH_TEST(ugetrlimit);
+#endif
+#if defined(__i386__)
+RESTRICT_SYSCALL_DEATH_TEST(ulimit);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(umask);
+#if defined(__i386__)
+RESTRICT_SYSCALL_DEATH_TEST(umount);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(umount2);
+RESTRICT_SYSCALL_DEATH_TEST(uname);
+RESTRICT_SYSCALL_DEATH_TEST(unlink);
+RESTRICT_SYSCALL_DEATH_TEST(unlinkat);
+RESTRICT_SYSCALL_DEATH_TEST(unshare);
+RESTRICT_SYSCALL_DEATH_TEST(uselib);
+RESTRICT_SYSCALL_DEATH_TEST(ustat);
+#if defined(__i386__) || defined(__x86_64__)
+RESTRICT_SYSCALL_DEATH_TEST(utime);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(utimensat);
+RESTRICT_SYSCALL_DEATH_TEST(utimes);
+RESTRICT_SYSCALL_DEATH_TEST(vfork);
+RESTRICT_SYSCALL_DEATH_TEST(vhangup);
+#if defined(__i386__)
+RESTRICT_SYSCALL_DEATH_TEST(vm86);
+#endif
+#if defined(__i386__)
+RESTRICT_SYSCALL_DEATH_TEST(vm86old);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(vmsplice);
+RESTRICT_SYSCALL_DEATH_TEST(vserver);
+RESTRICT_SYSCALL_DEATH_TEST(wait4);
+RESTRICT_SYSCALL_DEATH_TEST(waitid);
+#if defined(__i386__)
+RESTRICT_SYSCALL_DEATH_TEST(waitpid);
+#endif
+RESTRICT_SYSCALL_DEATH_TEST(writev);
+
+// ARM specific syscalls.
+#if defined(__arm__)
+RESTRICT_ARM_SYSCALL_DEATH_TEST(breakpoint);
+RESTRICT_ARM_SYSCALL_DEATH_TEST(usr26);
+RESTRICT_ARM_SYSCALL_DEATH_TEST(usr32);
+RESTRICT_ARM_SYSCALL_DEATH_TEST(set_tls);
+#endif
+
+}  // namespace
+
+#endif  // !ADDRESS_SANITIZER && !THREAD_SANITIZER
diff --git a/components/nacl/loader/nonsfi/nonsfi_sandbox_unittest.cc b/components/nacl/loader/nonsfi/nonsfi_sandbox_unittest.cc
new file mode 100644
index 0000000..10eca19
--- /dev/null
+++ b/components/nacl/loader/nonsfi/nonsfi_sandbox_unittest.cc
@@ -0,0 +1,471 @@
+// 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.
+
+// ASan internally uses some syscalls which non-SFI NaCl disallows.
+// Seccomp-BPF tests die under TSan v2. See http://crbug.com/356588
+#if !defined(ADDRESS_SANITIZER) && !defined(THREAD_SANITIZER)
+
+#include "components/nacl/loader/nonsfi/nonsfi_sandbox.h"
+
+#include <errno.h>
+#include <fcntl.h>
+#include <pthread.h>
+#include <sched.h>
+#include <signal.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/mman.h>
+#include <sys/prctl.h>
+#include <sys/ptrace.h>
+#include <sys/socket.h>
+#include <sys/syscall.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <unistd.h>
+
+#include "base/bind.h"
+#include "base/callback.h"
+#include "base/compiler_specific.h"
+#include "base/files/scoped_file.h"
+#include "base/logging.h"
+#include "base/posix/eintr_wrapper.h"
+#include "sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.h"
+#include "sandbox/linux/seccomp-bpf/bpf_tests.h"
+
+// This is a hack. TODO(hamaji), fix crbug.com/364751.
+namespace sandbox {
+extern const bool kAllowForkWithThreads = true;
+}
+
+namespace {
+
+void DoPipe(base::ScopedFD* fds) {
+  int tmp_fds[2];
+  BPF_ASSERT_EQ(0, pipe(tmp_fds));
+  fds[0].reset(tmp_fds[0]);
+  fds[1].reset(tmp_fds[1]);
+}
+
+void DoSocketpair(base::ScopedFD* fds) {
+  int tmp_fds[2];
+  BPF_ASSERT_EQ(0, socketpair(AF_UNIX, SOCK_STREAM, 0, tmp_fds));
+  fds[0].reset(tmp_fds[0]);
+  fds[1].reset(tmp_fds[1]);
+}
+
+TEST(NaClNonSfiSandboxTest, BPFIsSupported) {
+  bool seccomp_bpf_supported = (
+      sandbox::SandboxBPF::SupportsSeccompSandbox(-1) ==
+      sandbox::SandboxBPF::STATUS_AVAILABLE);
+  if (!seccomp_bpf_supported) {
+    LOG(ERROR) << "Seccomp BPF is not supported, these tests "
+               << "will pass without running";
+  }
+}
+
+BPF_DEATH_TEST(NaClNonSfiSandboxTest, invalid_sysno,
+               DEATH_MESSAGE(sandbox::GetErrorMessageContentForTests()),
+               nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  syscall(999);
+}
+
+const int kExpectedValue = 123;
+
+void* SetValueInThread(void* test_val_ptr) {
+  *reinterpret_cast<int*>(test_val_ptr) = kExpectedValue;
+  return NULL;
+}
+
+// To make this test pass, we need to allow sched_getaffinity and
+// mmap. We just disable this test not to complicate the sandbox.
+BPF_TEST(NaClNonSfiSandboxTest, clone_by_pthread_create,
+         nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  // clone call for thread creation is allowed.
+  pthread_t th;
+  int test_val = 42;
+  BPF_ASSERT_EQ(0, pthread_create(&th, NULL, &SetValueInThread, &test_val));
+  BPF_ASSERT_EQ(0, pthread_join(th, NULL));
+  BPF_ASSERT_EQ(kExpectedValue, test_val);
+}
+
+int DoFork() {
+  // Call clone() to do a fork().
+  const int pid = syscall(__NR_clone, SIGCHLD, NULL);
+  if (pid == 0)
+    _exit(0);
+  return pid;
+}
+
+// The sanity check for DoFork without the sandbox.
+TEST(NaClNonSfiSandboxTest, DoFork) {
+  const int pid = DoFork();
+  ASSERT_LT(0, pid);
+  int status;
+  ASSERT_EQ(pid, HANDLE_EINTR(waitpid(pid, &status, 0)));
+  ASSERT_TRUE(WIFEXITED(status));
+  ASSERT_EQ(0, WEXITSTATUS(status));
+}
+
+// Then, try this in the sandbox.
+BPF_DEATH_TEST(NaClNonSfiSandboxTest, clone_for_fork,
+               DEATH_MESSAGE(sandbox::GetCloneErrorMessageContentForTests()),
+               nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  DoFork();
+}
+
+BPF_TEST(NaClNonSfiSandboxTest, prctl_SET_NAME,
+         nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  errno = 0;
+  BPF_ASSERT_EQ(-1, syscall(__NR_prctl, PR_SET_NAME, "foo"));
+  BPF_ASSERT_EQ(EPERM, errno);
+}
+
+BPF_DEATH_TEST(NaClNonSfiSandboxTest, prctl_SET_DUMPABLE,
+               DEATH_MESSAGE(sandbox::GetPrctlErrorMessageContentForTests()),
+               nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  syscall(__NR_prctl, PR_SET_DUMPABLE, 1UL);
+}
+
+BPF_TEST(NaClNonSfiSandboxTest, socketcall_allowed,
+         nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  base::ScopedFD fds[2];
+  struct msghdr msg = {};
+  struct iovec iov;
+  std::string payload("foo");
+  iov.iov_base = &payload[0];
+  iov.iov_len = payload.size();
+  msg.msg_iov = &iov;
+  msg.msg_iovlen = 1;
+  DoSocketpair(fds);
+  BPF_ASSERT_EQ(static_cast<int>(payload.size()),
+                HANDLE_EINTR(sendmsg(fds[1].get(), &msg, 0)));
+  BPF_ASSERT_EQ(static_cast<int>(payload.size()),
+                HANDLE_EINTR(recvmsg(fds[0].get(), &msg, 0)));
+  BPF_ASSERT_EQ(0, shutdown(fds[0].get(), SHUT_RDWR));
+}
+
+BPF_DEATH_TEST(NaClNonSfiSandboxTest, accept,
+               DEATH_MESSAGE(sandbox::GetErrorMessageContentForTests()),
+               nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  accept(0, NULL, NULL);
+}
+
+BPF_DEATH_TEST(NaClNonSfiSandboxTest, bind,
+               DEATH_MESSAGE(sandbox::GetErrorMessageContentForTests()),
+               nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  bind(0, NULL, 0);
+}
+
+BPF_DEATH_TEST(NaClNonSfiSandboxTest, connect,
+               DEATH_MESSAGE(sandbox::GetErrorMessageContentForTests()),
+               nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  connect(0, NULL, 0);
+}
+
+BPF_DEATH_TEST(NaClNonSfiSandboxTest, getpeername,
+               DEATH_MESSAGE(sandbox::GetErrorMessageContentForTests()),
+               nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  getpeername(0, NULL, NULL);
+}
+
+BPF_DEATH_TEST(NaClNonSfiSandboxTest, getsockname,
+               DEATH_MESSAGE(sandbox::GetErrorMessageContentForTests()),
+               nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  struct sockaddr addr;
+  socklen_t addrlen = 0;
+  getsockname(0, &addr, &addrlen);
+}
+
+BPF_DEATH_TEST(NaClNonSfiSandboxTest, getsockopt,
+               DEATH_MESSAGE(sandbox::GetErrorMessageContentForTests()),
+               nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  getsockopt(0, 0, 0, NULL, NULL);
+}
+
+BPF_DEATH_TEST(NaClNonSfiSandboxTest, listen,
+               DEATH_MESSAGE(sandbox::GetErrorMessageContentForTests()),
+               nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  listen(0, 0);
+}
+
+BPF_DEATH_TEST(NaClNonSfiSandboxTest, recv,
+               DEATH_MESSAGE(sandbox::GetErrorMessageContentForTests()),
+               nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  recv(0, NULL, 0, 0);
+}
+
+BPF_DEATH_TEST(NaClNonSfiSandboxTest, recvfrom,
+               DEATH_MESSAGE(sandbox::GetErrorMessageContentForTests()),
+               nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  recvfrom(0, NULL, 0, 0, NULL, NULL);
+}
+
+BPF_DEATH_TEST(NaClNonSfiSandboxTest, send,
+               DEATH_MESSAGE(sandbox::GetErrorMessageContentForTests()),
+               nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  send(0, NULL, 0, 0);
+}
+
+BPF_DEATH_TEST(NaClNonSfiSandboxTest, sendto,
+               DEATH_MESSAGE(sandbox::GetErrorMessageContentForTests()),
+               nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  sendto(0, NULL, 0, 0, NULL, 0);
+}
+
+BPF_DEATH_TEST(NaClNonSfiSandboxTest, setsockopt,
+               DEATH_MESSAGE(sandbox::GetErrorMessageContentForTests()),
+               nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  setsockopt(0, 0, 0, NULL, 0);
+}
+
+BPF_DEATH_TEST(NaClNonSfiSandboxTest, socket,
+               DEATH_MESSAGE(sandbox::GetErrorMessageContentForTests()),
+               nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  socket(0, 0, 0);
+}
+
+#if defined(__x86_64__) || defined(__arm__)
+BPF_DEATH_TEST(NaClNonSfiSandboxTest, socketpair,
+               DEATH_MESSAGE(sandbox::GetErrorMessageContentForTests()),
+               nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  int fds[2];
+  socketpair(AF_INET, SOCK_STREAM, 0, fds);
+}
+#endif
+
+BPF_TEST(NaClNonSfiSandboxTest, fcntl_SETFD_allowed,
+         nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  base::ScopedFD fds[2];
+  DoSocketpair(fds);
+  BPF_ASSERT_EQ(0, fcntl(fds[0].get(), F_SETFD, FD_CLOEXEC));
+}
+
+BPF_DEATH_TEST(NaClNonSfiSandboxTest, fcntl_SETFD,
+               DEATH_MESSAGE(sandbox::GetErrorMessageContentForTests()),
+               nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  base::ScopedFD fds[2];
+  DoSocketpair(fds);
+  fcntl(fds[0].get(), F_SETFD, 99);
+}
+
+BPF_TEST(NaClNonSfiSandboxTest, fcntl_GETFL_SETFL_allowed,
+         nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  base::ScopedFD fds[2];
+  DoPipe(fds);
+  const int fd = fds[0].get();
+  BPF_ASSERT_EQ(0, fcntl(fd, F_GETFL));
+  BPF_ASSERT_EQ(0, fcntl(fd, F_SETFL, O_RDWR | O_NONBLOCK));
+  BPF_ASSERT_EQ(O_NONBLOCK, fcntl(fd, F_GETFL));
+}
+
+BPF_DEATH_TEST(NaClNonSfiSandboxTest, fcntl_GETFL_SETFL,
+               DEATH_MESSAGE(sandbox::GetErrorMessageContentForTests()),
+               nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  base::ScopedFD fds[2];
+  DoSocketpair(fds);
+  fcntl(fds[0].get(), F_SETFL, O_APPEND);
+}
+
+BPF_DEATH_TEST(NaClNonSfiSandboxTest, fcntl_DUPFD,
+               DEATH_MESSAGE(sandbox::GetErrorMessageContentForTests()),
+               nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  fcntl(0, F_DUPFD);
+}
+
+BPF_DEATH_TEST(NaClNonSfiSandboxTest, fcntl_DUPFD_CLOEXEC,
+               DEATH_MESSAGE(sandbox::GetErrorMessageContentForTests()),
+               nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  fcntl(0, F_DUPFD_CLOEXEC);
+}
+
+void* DoAllowedAnonymousMmap() {
+  return mmap(NULL, getpagesize(), PROT_READ | PROT_WRITE,
+              MAP_ANONYMOUS | MAP_SHARED, -1, 0);
+}
+
+BPF_TEST(NaClNonSfiSandboxTest, mmap_allowed,
+         nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  void* ptr = DoAllowedAnonymousMmap();
+  BPF_ASSERT_NE(MAP_FAILED, ptr);
+  BPF_ASSERT_EQ(0, munmap(ptr, getpagesize()));
+}
+
+BPF_DEATH_TEST(NaClNonSfiSandboxTest, mmap_unallowed_flag,
+               DEATH_MESSAGE(sandbox::GetErrorMessageContentForTests()),
+               nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  mmap(NULL, getpagesize(), PROT_READ | PROT_WRITE,
+       MAP_ANONYMOUS | MAP_POPULATE, -1, 0);
+}
+
+BPF_DEATH_TEST(NaClNonSfiSandboxTest, mmap_unallowed_prot,
+               DEATH_MESSAGE(sandbox::GetErrorMessageContentForTests()),
+               nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  mmap(NULL, getpagesize(), PROT_READ | PROT_GROWSDOWN,
+       MAP_ANONYMOUS, -1, 0);
+}
+
+// TODO(hamaji): Disallow RWX mmap.
+#if 0
+BPF_DEATH_TEST(NaClNonSfiSandboxTest, mmap_rwx,
+               DEATH_MESSAGE(sandbox::GetErrorMessageContentForTests()),
+               nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  mmap(NULL, getpagesize(), PROT_READ | PROT_WRITE | PROT_EXEC,
+       MAP_ANONYMOUS, -1, 0);
+}
+#endif
+
+BPF_TEST(NaClNonSfiSandboxTest, mprotect_allowed,
+         nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  void* ptr = DoAllowedAnonymousMmap();
+  BPF_ASSERT_NE(MAP_FAILED, ptr);
+  BPF_ASSERT_EQ(0, mprotect(ptr, getpagesize(), PROT_READ));
+  BPF_ASSERT_EQ(0, munmap(ptr, getpagesize()));
+}
+
+BPF_DEATH_TEST(NaClNonSfiSandboxTest, mprotect_unallowed_prot,
+               DEATH_MESSAGE(sandbox::GetErrorMessageContentForTests()),
+               nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  // We have tested DoAllowedAnonymousMmap is allowed in
+  // mmap_allowed, so we can make sure the following mprotect call
+  // kills the process.
+  void* ptr = DoAllowedAnonymousMmap();
+  BPF_ASSERT_NE(MAP_FAILED, ptr);
+  mprotect(ptr, getpagesize(), PROT_READ | PROT_GROWSDOWN);
+}
+
+BPF_TEST(NaClNonSfiSandboxTest, brk,
+         nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  char* next_brk = static_cast<char*>(sbrk(0)) + getpagesize();
+  // The kernel interface must return zero for brk.
+  BPF_ASSERT_EQ(0, syscall(__NR_brk, next_brk));
+  // The libc wrapper translates it to ENOMEM.
+  errno = 0;
+  BPF_ASSERT_EQ(-1, brk(next_brk));
+  BPF_ASSERT_EQ(ENOMEM, errno);
+}
+
+#if defined(__i386__) || defined(__arm__)
+BPF_TEST(NaClNonSfiSandboxTest, getegid32_EPERM,
+         nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  errno = 0;
+  BPF_ASSERT_EQ(-1, syscall(__NR_getegid32));
+  BPF_ASSERT_EQ(EPERM, errno);
+}
+
+BPF_TEST(NaClNonSfiSandboxTest, geteuid32_EPERM,
+         nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  errno = 0;
+  BPF_ASSERT_EQ(-1, syscall(__NR_geteuid32));
+  BPF_ASSERT_EQ(EPERM, errno);
+}
+
+BPF_TEST(NaClNonSfiSandboxTest, getgid32_EPERM,
+         nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  errno = 0;
+  BPF_ASSERT_EQ(-1, syscall(__NR_getgid32));
+  BPF_ASSERT_EQ(EPERM, errno);
+}
+
+BPF_TEST(NaClNonSfiSandboxTest, getuid32_EPERM,
+         nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  errno = 0;
+  BPF_ASSERT_EQ(-1, syscall(__NR_getuid32));
+  BPF_ASSERT_EQ(EPERM, errno);
+}
+
+BPF_DEATH_TEST(NaClNonSfiSandboxTest, getegid_SIGSYS,
+               DEATH_MESSAGE(sandbox::GetErrorMessageContentForTests()),
+               nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  syscall(__NR_getegid);
+}
+
+BPF_DEATH_TEST(NaClNonSfiSandboxTest, geteuid_SIGSYS,
+               DEATH_MESSAGE(sandbox::GetErrorMessageContentForTests()),
+               nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  syscall(__NR_geteuid);
+}
+
+BPF_DEATH_TEST(NaClNonSfiSandboxTest, getgid_SIGSYS,
+               DEATH_MESSAGE(sandbox::GetErrorMessageContentForTests()),
+               nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  syscall(__NR_getgid);
+}
+
+BPF_DEATH_TEST(NaClNonSfiSandboxTest, getuid_SIGSYS,
+               DEATH_MESSAGE(sandbox::GetErrorMessageContentForTests()),
+               nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  syscall(__NR_getuid);
+}
+#endif
+
+#if defined(__x86_64__)
+BPF_TEST(NaClNonSfiSandboxTest, getegid_EPERM,
+         nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  errno = 0;
+  BPF_ASSERT_EQ(-1, syscall(__NR_getegid));
+  BPF_ASSERT_EQ(EPERM, errno);
+}
+
+BPF_TEST(NaClNonSfiSandboxTest, geteuid_EPERM,
+         nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  errno = 0;
+  BPF_ASSERT_EQ(-1, syscall(__NR_geteuid));
+  BPF_ASSERT_EQ(EPERM, errno);
+}
+
+BPF_TEST(NaClNonSfiSandboxTest, getgid_EPERM,
+         nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  errno = 0;
+  BPF_ASSERT_EQ(-1, syscall(__NR_getgid));
+  BPF_ASSERT_EQ(EPERM, errno);
+}
+
+BPF_TEST(NaClNonSfiSandboxTest, getuid_EPERM,
+         nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  errno = 0;
+  BPF_ASSERT_EQ(-1, syscall(__NR_getuid));
+  BPF_ASSERT_EQ(EPERM, errno);
+}
+#endif
+
+BPF_TEST(NaClNonSfiSandboxTest, madvise_EPERM,
+         nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  errno = 0;
+  BPF_ASSERT_EQ(-1, syscall(__NR_madvise));
+  BPF_ASSERT_EQ(EPERM, errno);
+}
+
+BPF_TEST(NaClNonSfiSandboxTest, open_EPERM,
+         nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  errno = 0;
+  BPF_ASSERT_EQ(-1, syscall(__NR_open));
+  BPF_ASSERT_EQ(EPERM, errno);
+}
+
+BPF_TEST(NaClNonSfiSandboxTest, ptrace_EPERM,
+         nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  errno = 0;
+  BPF_ASSERT_EQ(-1, syscall(__NR_ptrace));
+  BPF_ASSERT_EQ(EPERM, errno);
+}
+
+BPF_TEST(NaClNonSfiSandboxTest, set_robust_list_EPERM,
+         nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  errno = 0;
+  BPF_ASSERT_EQ(-1, syscall(__NR_set_robust_list));
+  BPF_ASSERT_EQ(EPERM, errno);
+}
+
+#if defined(__i386__) || defined(__x86_64__)
+BPF_TEST(NaClNonSfiSandboxTest, time_EPERM,
+         nacl::nonsfi::NaClNonSfiBPFSandboxPolicy::EvaluateSyscallImpl) {
+  errno = 0;
+  BPF_ASSERT_EQ(-1, syscall(__NR_time));
+  BPF_ASSERT_EQ(EPERM, errno);
+}
+#endif
+
+}  // namespace
+
+#endif  // !ADDRESS_SANITIZER && !THREAD_SANITIZER
diff --git a/components/nacl/loader/run_all_unittests.cc b/components/nacl/loader/run_all_unittests.cc
new file mode 100644
index 0000000..555da28
--- /dev/null
+++ b/components/nacl/loader/run_all_unittests.cc
@@ -0,0 +1,15 @@
+// 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.
+
+#include "base/bind.h"
+#include "base/test/launcher/unit_test_launcher.h"
+#include "base/test/test_suite.h"
+
+int main(int argc, char** argv) {
+  base::TestSuite test_suite(argc, argv);
+  return base::LaunchUnitTests(argc,
+                               argv,
+                               base::Bind(&base::TestSuite::Run,
+                                          base::Unretained(&test_suite)));
+}
diff --git a/components/nacl/renderer/DEPS b/components/nacl/renderer/DEPS
index 9f96942..4b95d5a 100644
--- a/components/nacl/renderer/DEPS
+++ b/components/nacl/renderer/DEPS
@@ -1,6 +1,6 @@
 include_rules = [
   "+content/public/renderer",
-  "+net/http",
+  "+net",
   "+ppapi/c",
   "+ppapi/native_client/src/trusted/plugin/nacl_entry_points.h",  # For NaCl registration.
   "+ppapi/proxy",
diff --git a/components/nacl/renderer/manifest_service_channel.cc b/components/nacl/renderer/manifest_service_channel.cc
new file mode 100644
index 0000000..f0f4adb
--- /dev/null
+++ b/components/nacl/renderer/manifest_service_channel.cc
@@ -0,0 +1,60 @@
+// 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.
+
+#include "components/nacl/renderer/manifest_service_channel.h"
+
+#include "base/callback.h"
+#include "base/callback_helpers.h"
+#include "content/public/renderer/render_thread.h"
+#include "ipc/ipc_channel.h"
+#include "ipc/ipc_sync_channel.h"
+#include "ppapi/c/pp_errors.h"
+#include "ppapi/proxy/ppapi_messages.h"
+
+namespace nacl {
+
+ManifestServiceChannel::ManifestServiceChannel(
+    const IPC::ChannelHandle& handle,
+    const base::Callback<void(int32_t)>& connected_callback,
+    scoped_ptr<Delegate> delegate,
+    base::WaitableEvent* waitable_event)
+    : connected_callback_(connected_callback),
+      delegate_(delegate.Pass()),
+      channel_(new IPC::SyncChannel(
+          handle, IPC::Channel::MODE_CLIENT, this,
+          content::RenderThread::Get()->GetIOMessageLoopProxy(),
+          true, waitable_event)) {
+}
+
+ManifestServiceChannel::~ManifestServiceChannel() {
+  if (!connected_callback_.is_null())
+    base::ResetAndReturn(&connected_callback_).Run(PP_ERROR_FAILED);
+}
+
+bool ManifestServiceChannel::OnMessageReceived(const IPC::Message& message) {
+  // TODO(hidehiko): Implement OpenResource.
+  bool handled = true;
+  IPC_BEGIN_MESSAGE_MAP(ManifestServiceChannel, message)
+      IPC_MESSAGE_HANDLER(PpapiHostMsg_StartupInitializationComplete,
+                          OnStartupInitializationComplete)
+      IPC_MESSAGE_UNHANDLED(handled = false)
+  IPC_END_MESSAGE_MAP()
+  return handled;
+}
+
+void ManifestServiceChannel::OnChannelConnected(int32 peer_pid) {
+  if (!connected_callback_.is_null())
+    base::ResetAndReturn(&connected_callback_).Run(PP_OK);
+}
+
+void ManifestServiceChannel::OnChannelError() {
+  if (!connected_callback_.is_null())
+    base::ResetAndReturn(&connected_callback_).Run(PP_ERROR_FAILED);
+}
+
+void ManifestServiceChannel::OnStartupInitializationComplete() {
+  delegate_->StartupInitializationComplete();
+}
+
+}  // namespace nacl
diff --git a/components/nacl/renderer/manifest_service_channel.h b/components/nacl/renderer/manifest_service_channel.h
new file mode 100644
index 0000000..6dc394f
--- /dev/null
+++ b/components/nacl/renderer/manifest_service_channel.h
@@ -0,0 +1,61 @@
+// 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.
+
+#ifndef COMPONENTS_NACL_RENDERER_MANIFEST_SERVICE_CHANNEL_H_
+#define COMPONENTS_NACL_RENDERER_MANIFEST_SERVICE_CHANNEL_H_
+
+#include "base/callback.h"
+#include "base/macros.h"
+#include "base/memory/scoped_ptr.h"
+#include "ipc/ipc_listener.h"
+
+namespace base {
+class WaitableEvent;
+}  // namespace base
+
+namespace IPC {
+struct ChannelHandle;
+class Message;
+class SyncChannel;
+}  // namespace IPC
+
+namespace nacl {
+
+class ManifestServiceChannel : public IPC::Listener {
+ public:
+  class Delegate {
+   public:
+    virtual ~Delegate() {}
+
+    // Called when PPAPI initialization in the NaCl plugin is finished.
+    virtual void StartupInitializationComplete() = 0;
+
+    // TODO(hidehiko): Add OpenResource() here.
+  };
+
+  ManifestServiceChannel(
+      const IPC::ChannelHandle& handle,
+      const base::Callback<void(int32_t)>& connected_callback,
+      scoped_ptr<Delegate> delegate,
+      base::WaitableEvent* waitable_event);
+  virtual ~ManifestServiceChannel();
+
+  // Listener implementation.
+  virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
+  virtual void OnChannelConnected(int32 peer_pid) OVERRIDE;
+  virtual void OnChannelError() OVERRIDE;
+
+ private:
+  void OnStartupInitializationComplete();
+
+  base::Callback<void(int32_t)> connected_callback_;
+  scoped_ptr<Delegate> delegate_;
+  scoped_ptr<IPC::SyncChannel> channel_;
+
+  DISALLOW_COPY_AND_ASSIGN(ManifestServiceChannel);
+};
+
+}  // namespace nacl
+
+#endif  // COMPONENTS_NACL_RENDERER_MANIFEST_SERVICE_CHANNEL_H_
diff --git a/components/nacl/renderer/nexe_load_manager.cc b/components/nacl/renderer/nexe_load_manager.cc
index caa9bd1..942aea0 100644
--- a/components/nacl/renderer/nexe_load_manager.cc
+++ b/components/nacl/renderer/nexe_load_manager.cc
@@ -10,6 +10,7 @@
 #include "base/strings/string_tokenizer.h"
 #include "components/nacl/common/nacl_host_messages.h"
 #include "components/nacl/common/nacl_types.h"
+#include "components/nacl/renderer/manifest_service_channel.h"
 #include "components/nacl/renderer/pnacl_translation_resource_host.h"
 #include "components/nacl/renderer/sandbox_arch.h"
 #include "components/nacl/renderer/trusted_plugin_channel.h"
@@ -33,7 +34,7 @@
 #include "third_party/WebKit/public/web/WebDOMResourceProgressEvent.h"
 #include "third_party/WebKit/public/web/WebDocument.h"
 #include "third_party/WebKit/public/web/WebElement.h"
-#include "third_party/WebKit/public/web/WebFrame.h"
+#include "third_party/WebKit/public/web/WebLocalFrame.h"
 #include "third_party/WebKit/public/web/WebPluginContainer.h"
 #include "third_party/WebKit/public/web/WebView.h"
 #include "v8/include/v8.h"
@@ -201,6 +202,10 @@
   HistogramEnumerate(name, sample, 7);
 }
 
+void HistogramEnumerateManifestIsDataURI(bool is_data_uri) {
+  HistogramEnumerate("NaCl.Manifest.IsDataURI", is_data_uri, 2);
+}
+
 blink::WebString EventTypeToString(PP_NaClEventType event_type) {
   switch (event_type) {
     case PP_NACL_EVENT_LOADSTART:
@@ -248,6 +253,10 @@
       weak_factory_(this) {
   SetLastError("");
   HistogramEnumerateOsArch(GetSandboxArch());
+  if (plugin_instance_) {
+    plugin_base_url_ =
+        plugin_instance_->GetContainer()->element().document().url();
+  }
 }
 
 NexeLoadManager::~NexeLoadManager() {
@@ -457,7 +466,7 @@
   // the DOM (but the PluginInstance is not destroyed yet).
   if (!container)
     return;
-  blink::WebFrame* frame = container->element().document().frame();
+  blink::WebLocalFrame* frame = container->element().document().frame();
   if (!frame)
     return;
   v8::HandleScope handle_scope(plugin_instance_->GetIsolate());
@@ -493,6 +502,11 @@
   trusted_plugin_channel_ = channel.Pass();
 }
 
+void NexeLoadManager::set_manifest_service_channel(
+    scoped_ptr<ManifestServiceChannel> channel) {
+  manifest_service_channel_ = channel.Pass();
+}
+
 PP_NaClReadyState NexeLoadManager::nacl_ready_state() {
   return nacl_ready_state_;
 }
@@ -532,12 +546,55 @@
   SetReadOnlyProperty(exit_status_name_var.get(), PP_MakeInt32(exit_status));
 }
 
+void NexeLoadManager::InitializePlugin() {
+  init_time_ = base::Time::Now();
+}
+
 void NexeLoadManager::ReportStartupOverhead() const {
   base::TimeDelta overhead = base::Time::Now() - init_time_;
   HistogramStartupTimeMedium(
       "NaCl.Perf.StartupTime.NaClOverhead", overhead, nexe_size_);
 }
 
+bool NexeLoadManager::RequestNaClManifest(const std::string& url,
+                                          bool* is_data_uri) {
+  if (plugin_base_url_.is_valid()) {
+    const GURL& resolved_url = plugin_base_url_.Resolve(url);
+    if (resolved_url.is_valid()) {
+      manifest_base_url_ = resolved_url;
+      is_installed_ = manifest_base_url_.SchemeIs("chrome-extension");
+      *is_data_uri = manifest_base_url_.SchemeIs("data");
+      HistogramEnumerateManifestIsDataURI(*is_data_uri);
+
+      set_nacl_ready_state(PP_NACL_READY_STATE_OPENED);
+      ppapi::PpapiGlobals::Get()->GetMainThreadMessageLoop()->PostTask(
+        FROM_HERE,
+        base::Bind(&NexeLoadManager::DispatchEvent,
+                   weak_factory_.GetWeakPtr(),
+                   ProgressEvent(PP_NACL_EVENT_LOADSTART)));
+      return true;
+    }
+  }
+  ReportLoadError(PP_NACL_ERROR_MANIFEST_RESOLVE_URL,
+                  std::string("could not resolve URL \"") + url +
+                  "\" relative to \"" +
+                  plugin_base_url_.possibly_invalid_spec() + "\".");
+  return false;
+}
+
+void NexeLoadManager::ProcessNaClManifest(const std::string& program_url) {
+  GURL gurl(program_url);
+  DCHECK(gurl.is_valid());
+  if (gurl.is_valid())
+    is_installed_ = gurl.SchemeIs("chrome-extension");
+  set_nacl_ready_state(PP_NACL_READY_STATE_LOADING);
+  ppapi::PpapiGlobals::Get()->GetMainThreadMessageLoop()->PostTask(
+      FROM_HERE,
+      base::Bind(&NexeLoadManager::DispatchEvent,
+                 weak_factory_.GetWeakPtr(),
+                 ProgressEvent(PP_NACL_EVENT_PROGRESS)));
+}
+
 void NexeLoadManager::ReportDeadNexe() {
   if (nacl_ready_state_ == PP_NACL_READY_STATE_DONE &&  // After loadEnd
       !nexe_error_reported_) {
diff --git a/components/nacl/renderer/nexe_load_manager.h b/components/nacl/renderer/nexe_load_manager.h
index 0014279..a094f07 100644
--- a/components/nacl/renderer/nexe_load_manager.h
+++ b/components/nacl/renderer/nexe_load_manager.h
@@ -10,8 +10,8 @@
 #include "base/macros.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
-
 #include "ppapi/c/private/ppb_nacl_private.h"
+#include "url/gurl.h"
 
 namespace content {
 class PepperPluginInstance;
@@ -19,6 +19,7 @@
 
 namespace nacl {
 
+class ManifestServiceChannel;
 class TrustedPluginChannel;
 
 // NexeLoadManager provides methods for reporting the progress of loading a
@@ -77,6 +78,8 @@
   };
   void DispatchEvent(const ProgressEvent &event);
   void set_trusted_plugin_channel(scoped_ptr<TrustedPluginChannel> channel);
+  void set_manifest_service_channel(
+      scoped_ptr<ManifestServiceChannel> channel);
 
   PP_NaClReadyState nacl_ready_state();
   void set_nacl_ready_state(PP_NaClReadyState ready_state);
@@ -86,17 +89,28 @@
   void LogToConsole(const std::string& message);
 
   bool is_installed() const { return is_installed_; }
-  void set_is_installed(bool installed) { is_installed_ = installed; }
 
   int32_t exit_status() const { return exit_status_; }
   void set_exit_status(int32_t exit_status);
 
-  void set_init_time() { init_time_ = base::Time::Now(); }
+  void InitializePlugin();
 
   void ReportStartupOverhead() const;
 
   int64_t nexe_size() const { return nexe_size_; }
 
+  bool RequestNaClManifest(const std::string& url, bool* is_data_uri);
+  void ProcessNaClManifest(const std::string& program_url);
+
+  // URL resolution support.
+  // plugin_base_url is the URL used for resolving relative URLs used in
+  // src="...".
+  const GURL& plugin_base_url() const { return plugin_base_url_; }
+
+  // manifest_base_url is the URL used for resolving relative URLs mentioned
+  // in manifest files.  If the manifest is a data URI, this is an empty string
+  const GURL& manifest_base_url() const { return manifest_base_url_; }
+
  private:
   DISALLOW_COPY_AND_ASSIGN(NexeLoadManager);
 
@@ -140,7 +154,13 @@
   // Non-owning.
   content::PepperPluginInstance* plugin_instance_;
 
+  // The URL for the document corresponding to this plugin instance.
+  GURL plugin_base_url_;
+
+  GURL manifest_base_url_;
+
   scoped_ptr<TrustedPluginChannel> trusted_plugin_channel_;
+  scoped_ptr<ManifestServiceChannel> manifest_service_channel_;
   base::WeakPtrFactory<NexeLoadManager> weak_factory_;
 };
 
diff --git a/components/nacl/renderer/ppb_nacl_private_impl.cc b/components/nacl/renderer/ppb_nacl_private_impl.cc
index 9f88e58..8cfca54 100644
--- a/components/nacl/renderer/ppb_nacl_private_impl.cc
+++ b/components/nacl/renderer/ppb_nacl_private_impl.cc
@@ -4,6 +4,8 @@
 
 #include "components/nacl/renderer/ppb_nacl_private_impl.h"
 
+#include "base/bind.h"
+#include "base/bind_helpers.h"
 #include "base/command_line.h"
 #include "base/containers/scoped_ptr_hash_map.h"
 #include "base/lazy_instance.h"
@@ -13,6 +15,7 @@
 #include "components/nacl/common/nacl_messages.h"
 #include "components/nacl/common/nacl_switches.h"
 #include "components/nacl/common/nacl_types.h"
+#include "components/nacl/renderer/manifest_service_channel.h"
 #include "components/nacl/renderer/nexe_load_manager.h"
 #include "components/nacl/renderer/pnacl_translation_resource_host.h"
 #include "components/nacl/renderer/sandbox_arch.h"
@@ -24,6 +27,7 @@
 #include "content/public/renderer/render_thread.h"
 #include "content/public/renderer/render_view.h"
 #include "content/public/renderer/renderer_ppapi_host.h"
+#include "net/base/data_url.h"
 #include "net/http/http_response_headers.h"
 #include "ppapi/c/pp_bool.h"
 #include "ppapi/c/private/pp_file_handle.h"
@@ -34,6 +38,7 @@
 #include "ppapi/shared_impl/var.h"
 #include "ppapi/thunk/enter.h"
 
+namespace nacl {
 namespace {
 
 base::LazyInstance<scoped_refptr<PnaclTranslationResourceHost> >
@@ -66,13 +71,13 @@
 base::LazyInstance<InstanceInfoMap> g_instance_info =
     LAZY_INSTANCE_INITIALIZER;
 
-typedef base::ScopedPtrHashMap<PP_Instance, nacl::NexeLoadManager>
+typedef base::ScopedPtrHashMap<PP_Instance, NexeLoadManager>
     NexeLoadManagerMap;
 
 base::LazyInstance<NexeLoadManagerMap> g_load_manager_map =
     LAZY_INSTANCE_INITIALIZER;
 
-nacl::NexeLoadManager* GetNexeLoadManager(PP_Instance instance) {
+NexeLoadManager* GetNexeLoadManager(PP_Instance instance) {
   NexeLoadManagerMap& map = g_load_manager_map.Get();
   NexeLoadManagerMap::iterator iter = map.find(instance);
   if (iter != map.end())
@@ -105,6 +110,91 @@
   return true;
 }
 
+// Callback invoked when an IPC channel connection is established.
+// As we will establish multiple IPC channels, this takes the number
+// of expected invocations and a callback. When all channels are established,
+// the given callback will be invoked on the main thread. Its argument will be
+// PP_OK if all the connections are successfully established. Otherwise,
+// the first error code will be passed, and remaining errors will be ignored.
+// Note that PP_CompletionCallback is designed to be called exactly once.
+class ChannelConnectedCallback {
+ public:
+  ChannelConnectedCallback(int num_expect_calls,
+                           PP_CompletionCallback callback)
+      : num_remaining_calls_(num_expect_calls),
+        callback_(callback),
+        result_(PP_OK) {
+  }
+
+  ~ChannelConnectedCallback() {
+  }
+
+  void Run(int32_t result) {
+    if (result_ == PP_OK && result != PP_OK) {
+      // This is the first error, so remember it.
+      result_ = result;
+    }
+
+    --num_remaining_calls_;
+    if (num_remaining_calls_ > 0) {
+      // There still are some pending or on-going tasks. Wait for the results.
+      return;
+    }
+
+    ppapi::PpapiGlobals::Get()->GetMainThreadMessageLoop()->PostTask(
+        FROM_HERE,
+        base::Bind(callback_.func, callback_.user_data, result_));
+  }
+
+ private:
+  int num_remaining_calls_;
+  PP_CompletionCallback callback_;
+  int32_t result_;
+
+  DISALLOW_COPY_AND_ASSIGN(ChannelConnectedCallback);
+};
+
+// Thin adapter from PP_ManifestService to ManifestServiceChannel::Delegate.
+// Note that user_data is managed by the caller of LaunchSelLdr. Please see
+// also PP_ManifestService's comment for more details about resource
+// management.
+class ManifestServiceProxy : public ManifestServiceChannel::Delegate {
+ public:
+  ManifestServiceProxy(const PP_ManifestService* manifest_service,
+                       void* user_data)
+      : manifest_service_(*manifest_service),
+        user_data_(user_data) {
+  }
+
+  virtual ~ManifestServiceProxy() {
+    Quit();
+  }
+
+  virtual void StartupInitializationComplete() OVERRIDE {
+    if (!user_data_)
+      return;
+
+    if (!PP_ToBool(
+            manifest_service_.StartupInitializationComplete(user_data_))) {
+      user_data_ = NULL;
+    }
+  }
+
+ private:
+  void Quit() {
+    if (!user_data_)
+      return;
+
+    bool result = PP_ToBool(manifest_service_.Quit(user_data_));
+    DCHECK(!result);
+    user_data_ = NULL;
+  }
+
+  PP_ManifestService manifest_service_;
+  void* user_data_;
+  DISALLOW_COPY_AND_ASSIGN(ManifestServiceProxy);
+};
+
 // Launch NaCl's sel_ldr process.
 void LaunchSelLdr(PP_Instance instance,
                   const char* alleged_url,
@@ -115,13 +205,23 @@
                   PP_Bool enable_dyncode_syscalls,
                   PP_Bool enable_exception_handling,
                   PP_Bool enable_crash_throttling,
+                  const PP_ManifestService* manifest_service_interface,
+                  void* manifest_service_user_data,
                   void* imc_handle,
                   struct PP_Var* error_message,
                   PP_CompletionCallback callback) {
   CHECK(ppapi::PpapiGlobals::Get()->GetMainThreadMessageLoop()->
             BelongsToCurrentThread());
 
-  nacl::FileDescriptor result_socket;
+  // Create the manifest service proxy here, so on error case, it will be
+  // destructed (without passing it to ManifestServiceChannel), and QUIT
+  // will be called in its destructor so that the caller of this function
+  // can free manifest_service_user_data properly.
+  scoped_ptr<ManifestServiceChannel::Delegate> manifest_service_proxy(
+      new ManifestServiceProxy(manifest_service_interface,
+                               manifest_service_user_data));
+
+  FileDescriptor result_socket;
   IPC::Sender* sender = content::RenderThread::Get();
   DCHECK(sender);
   *error_message = PP_MakeUndefined();
@@ -153,17 +253,17 @@
   instance_info.permissions =
       ppapi::PpapiPermissions::GetForCommandLine(perm_bits);
   std::string error_message_string;
-  nacl::NaClLaunchResult launch_result;
+  NaClLaunchResult launch_result;
 
   if (!sender->Send(new NaClHostMsg_LaunchNaCl(
-          nacl::NaClLaunchParams(instance_info.url.spec(),
-                                 routing_id,
-                                 perm_bits,
-                                 PP_ToBool(uses_irt),
-                                 PP_ToBool(uses_nonsfi_mode),
-                                 PP_ToBool(enable_dyncode_syscalls),
-                                 PP_ToBool(enable_exception_handling),
-                                 PP_ToBool(enable_crash_throttling)),
+          NaClLaunchParams(instance_info.url.spec(),
+                           routing_id,
+                           perm_bits,
+                           PP_ToBool(uses_irt),
+                           PP_ToBool(uses_nonsfi_mode),
+                           PP_ToBool(enable_dyncode_syscalls),
+                           PP_ToBool(enable_exception_handling),
+                           PP_ToBool(enable_crash_throttling)),
           &launch_result,
           &error_message_string))) {
     ppapi::PpapiGlobals::Get()->GetMainThreadMessageLoop()->PostTask(
@@ -189,32 +289,50 @@
   if (IsValidChannelHandle(instance_info.channel_handle))
     g_instance_info.Get()[instance] = instance_info;
 
-  *(static_cast<NaClHandle*>(imc_handle)) =
-      nacl::ToNativeHandle(result_socket);
+  *(static_cast<NaClHandle*>(imc_handle)) = ToNativeHandle(result_socket);
 
-  // TODO(hidehiko): We'll add EmbedderServiceChannel here, and it will wait
-  // for the connection in parallel with TrustedPluginChannel.
-  // Thus, the callback will wait for its second invocation to run callback,
-  // then.
-  // Note that PP_CompletionCallback is not designed to be called twice or
-  // more. Thus, it is necessary to create a function to handle multiple
-  // invocation.
-  base::Callback<void(int32_t)> completion_callback =
-      base::Bind(callback.func, callback.user_data);
-  nacl::NexeLoadManager* load_manager = GetNexeLoadManager(instance);
+  // Here after, we starts to establish connections for TrustedPluginChannel
+  // and ManifestServiceChannel in parallel. The invocation of the callback
+  // is delegated to their connection completion callback.
+  base::Callback<void(int32_t)> connected_callback = base::Bind(
+      &ChannelConnectedCallback::Run,
+      base::Owned(new ChannelConnectedCallback(
+          2, // For TrustedPluginChannel and ManifestServiceChannel.
+          callback)));
+
+  NexeLoadManager* load_manager = GetNexeLoadManager(instance);
   DCHECK(load_manager);
 
   // Stash the trusted handle as well.
   if (load_manager &&
       IsValidChannelHandle(launch_result.trusted_ipc_channel_handle)) {
-    scoped_ptr<nacl::TrustedPluginChannel> trusted_plugin_channel(
-        new nacl::TrustedPluginChannel(
+    scoped_ptr<TrustedPluginChannel> trusted_plugin_channel(
+        new TrustedPluginChannel(
             launch_result.trusted_ipc_channel_handle,
-            completion_callback,
+            connected_callback,
             content::RenderThread::Get()->GetShutdownEvent()));
     load_manager->set_trusted_plugin_channel(trusted_plugin_channel.Pass());
   } else {
-    completion_callback.Run(PP_ERROR_FAILED);
+    connected_callback.Run(PP_ERROR_FAILED);
+  }
+
+  // Stash the manifest service handle as well.
+  if (load_manager &&
+      IsValidChannelHandle(
+          launch_result.manifest_service_ipc_channel_handle)) {
+    scoped_ptr<ManifestServiceChannel> manifest_service_channel(
+        new ManifestServiceChannel(
+            launch_result.manifest_service_ipc_channel_handle,
+            connected_callback,
+            manifest_service_proxy.Pass(),
+            content::RenderThread::Get()->GetShutdownEvent()));
+    load_manager->set_manifest_service_channel(
+        manifest_service_channel.Pass());
+  } else {
+    // Currently, manifest service works only on linux/non-SFI mode.
+    // On other platforms, the socket will not be created, and thus this
+    // condition needs to be handled as success.
+    connected_callback.Run(PP_OK);
   }
 }
 
@@ -252,7 +370,7 @@
     // Log the amound of time that has passed between the trusted plugin being
     // initialized and the untrusted plugin being initialized.  This is
     // (roughly) the cost of using NaCl, in terms of startup time.
-    nacl::NexeLoadManager* load_manager = GetNexeLoadManager(instance);
+    NexeLoadManager* load_manager = GetNexeLoadManager(instance);
     if (load_manager)
       load_manager->ReportStartupOverhead();
     return PP_TRUE;
@@ -387,14 +505,14 @@
   // the default-constructed null value.
   base::Time::FromString(last_modified.c_str(), &last_modified_time);
 
-  nacl::PnaclCacheInfo cache_info;
+  PnaclCacheInfo cache_info;
   cache_info.pexe_url = GURL(pexe_url);
   cache_info.abi_version = abi_version;
   cache_info.opt_level = opt_level;
   cache_info.last_modified = last_modified_time;
   cache_info.etag = etag;
   cache_info.has_no_store_header = has_no_store_header;
-  cache_info.sandbox_isa = nacl::GetSandboxArch();
+  cache_info.sandbox_isa = GetSandboxArch();
   cache_info.extra_flags = std::string(extra_flags);
 
   g_pnacl_resource_host.Get()->RequestNexeFd(
@@ -474,12 +592,12 @@
                                PP_Bool length_is_computable,
                                uint64_t loaded_bytes,
                                uint64_t total_bytes) {
-  nacl::NexeLoadManager* load_manager =
+  NexeLoadManager* load_manager =
       GetNexeLoadManager(instance);
   // The instance may have been destroyed after we were scheduled, so do
   // nothing if it's gone.
   if (load_manager) {
-    nacl::NexeLoadManager::ProgressEvent event(event_type);
+    NexeLoadManager::ProgressEvent event(event_type);
     event.resource_url = resource_url;
     event.length_is_computable = PP_ToBool(length_is_computable);
     event.loaded_bytes = loaded_bytes;
@@ -495,7 +613,7 @@
                      int64_t nexe_bytes_read,
                      const char* url,
                      int64_t time_since_open) {
-  nacl::NexeLoadManager* load_manager = GetNexeLoadManager(instance);
+  NexeLoadManager* load_manager = GetNexeLoadManager(instance);
   if (load_manager) {
     load_manager->NexeFileDidOpen(pp_error,
                                   fd,
@@ -511,7 +629,7 @@
                        const char* url,
                        uint64_t loaded_bytes,
                        uint64_t total_bytes) {
-  nacl::NexeLoadManager* load_manager = GetNexeLoadManager(instance);
+  NexeLoadManager* load_manager = GetNexeLoadManager(instance);
   if (load_manager)
     load_manager->ReportLoadSuccess(
         PP_ToBool(is_pnacl), url, loaded_bytes, total_bytes);
@@ -521,26 +639,25 @@
                      PP_NaClError error,
                      const char* error_message,
                      const char* console_message) {
-  nacl::NexeLoadManager* load_manager = GetNexeLoadManager(instance);
+  NexeLoadManager* load_manager = GetNexeLoadManager(instance);
   if (load_manager)
     load_manager->ReportLoadError(error, error_message, console_message);
 }
 
 void ReportLoadAbort(PP_Instance instance) {
-  nacl::NexeLoadManager* load_manager = GetNexeLoadManager(instance);
+  NexeLoadManager* load_manager = GetNexeLoadManager(instance);
   if (load_manager)
     load_manager->ReportLoadAbort();
 }
 
 void NexeDidCrash(PP_Instance instance, const char* crash_log) {
-  nacl::NexeLoadManager* load_manager = GetNexeLoadManager(instance);
+  NexeLoadManager* load_manager = GetNexeLoadManager(instance);
   if (load_manager)
     load_manager->NexeDidCrash(crash_log);
 }
 
 void InstanceCreated(PP_Instance instance) {
-  scoped_ptr<nacl::NexeLoadManager> new_load_manager(
-      new nacl::NexeLoadManager(instance));
+  scoped_ptr<NexeLoadManager> new_load_manager(new NexeLoadManager(instance));
   NexeLoadManagerMap& map = g_load_manager_map.Get();
   DLOG_IF(ERROR, map.count(instance) != 0) << "Instance count should be 0";
   map.add(instance, new_load_manager.Pass());
@@ -554,7 +671,7 @@
   // the NexeLoadManager (e.g., by calling ReportLoadError). Passing out the
   // NexeLoadManager to a local scoped_ptr just ensures that its entry is gone
   // from the map prior to the destructor being invoked.
-  scoped_ptr<nacl::NexeLoadManager> temp(map.take(instance));
+  scoped_ptr<NexeLoadManager> temp(map.take(instance));
   map.erase(instance);
 }
 
@@ -572,10 +689,6 @@
   return PP_FromBool(should_debug);
 }
 
-const char* GetSandboxArch() {
-  return nacl::GetSandboxArch();
-}
-
 PP_UrlSchemeType GetUrlScheme(PP_Var url) {
   scoped_refptr<ppapi::StringVar> url_string = ppapi::StringVar::FromPPVar(url);
   if (!url_string)
@@ -590,44 +703,30 @@
 }
 
 void LogToConsole(PP_Instance instance, const char* message) {
-  nacl::NexeLoadManager* load_manager = GetNexeLoadManager(instance);
+  NexeLoadManager* load_manager = GetNexeLoadManager(instance);
   DCHECK(load_manager);
   if (load_manager)
     load_manager->LogToConsole(std::string(message));
 }
 
 PP_NaClReadyState GetNaClReadyState(PP_Instance instance) {
-  nacl::NexeLoadManager* load_manager = GetNexeLoadManager(instance);
+  NexeLoadManager* load_manager = GetNexeLoadManager(instance);
   DCHECK(load_manager);
   if (load_manager)
     return load_manager->nacl_ready_state();
   return PP_NACL_READY_STATE_UNSENT;
 }
 
-void SetNaClReadyState(PP_Instance instance, PP_NaClReadyState ready_state) {
-  nacl::NexeLoadManager* load_manager = GetNexeLoadManager(instance);
-  DCHECK(load_manager);
-  if (load_manager)
-    load_manager->set_nacl_ready_state(ready_state);
-}
-
 PP_Bool GetIsInstalled(PP_Instance instance) {
-  nacl::NexeLoadManager* load_manager = GetNexeLoadManager(instance);
+  NexeLoadManager* load_manager = GetNexeLoadManager(instance);
   DCHECK(load_manager);
   if (load_manager)
     return PP_FromBool(load_manager->is_installed());
   return PP_FALSE;
 }
 
-void SetIsInstalled(PP_Instance instance, PP_Bool installed) {
-  nacl::NexeLoadManager* load_manager = GetNexeLoadManager(instance);
-  DCHECK(load_manager);
-  if (load_manager)
-    load_manager->set_is_installed(PP_ToBool(installed));
-}
-
 int32_t GetExitStatus(PP_Instance instance) {
-  nacl::NexeLoadManager* load_manager = GetNexeLoadManager(instance);
+  NexeLoadManager* load_manager = GetNexeLoadManager(instance);
   DCHECK(load_manager);
   if (load_manager)
     return load_manager->exit_status();
@@ -635,7 +734,7 @@
 }
 
 void SetExitStatus(PP_Instance instance, int32_t exit_status) {
-  nacl::NexeLoadManager* load_manager = GetNexeLoadManager(instance);
+  NexeLoadManager* load_manager = GetNexeLoadManager(instance);
   DCHECK(load_manager);
   if (load_manager)
     return load_manager->set_exit_status(exit_status);
@@ -645,21 +744,74 @@
   VLOG(1) << message;
 }
 
-void SetInitTime(PP_Instance instance) {
-  nacl::NexeLoadManager* load_manager = GetNexeLoadManager(instance);
+void InitializePlugin(PP_Instance instance) {
+  NexeLoadManager* load_manager = GetNexeLoadManager(instance);
   DCHECK(load_manager);
   if (load_manager)
-    return load_manager->set_init_time();
+    load_manager->InitializePlugin();
 }
 
 int64_t GetNexeSize(PP_Instance instance) {
-  nacl::NexeLoadManager* load_manager = GetNexeLoadManager(instance);
+  NexeLoadManager* load_manager = GetNexeLoadManager(instance);
   DCHECK(load_manager);
   if (load_manager)
     return load_manager->nexe_size();
   return 0;
 }
 
+PP_Bool RequestNaClManifest(PP_Instance instance,
+                            const char* url,
+                            PP_Bool* pp_is_data_uri) {
+  NexeLoadManager* load_manager = GetNexeLoadManager(instance);
+  DCHECK(load_manager);
+  if (load_manager) {
+    bool is_data_uri;
+    bool result = load_manager->RequestNaClManifest(url, &is_data_uri);
+    *pp_is_data_uri = PP_FromBool(is_data_uri);
+    return PP_FromBool(result);
+  }
+  return PP_FALSE;
+}
+
+PP_Var GetManifestBaseURL(PP_Instance instance) {
+  NexeLoadManager* load_manager = GetNexeLoadManager(instance);
+  DCHECK(load_manager);
+  if (!load_manager)
+    return PP_MakeUndefined();
+  const GURL& gurl = load_manager->manifest_base_url();
+  if (!gurl.is_valid())
+    return PP_MakeUndefined();
+  return ppapi::StringVar::StringToPPVar(gurl.spec());
+}
+
+PP_Bool ResolvesRelativeToPluginBaseURL(PP_Instance instance,
+                                        const char *url) {
+  NexeLoadManager* load_manager = GetNexeLoadManager(instance);
+  DCHECK(load_manager);
+  if (!load_manager)
+    return PP_FALSE;
+  const GURL& gurl = load_manager->plugin_base_url().Resolve(url);
+  if (!gurl.is_valid())
+    return PP_FALSE;
+  return PP_TRUE;
+}
+
+PP_Var ParseDataURL(const char* data_url) {
+  GURL gurl(data_url);
+  std::string mime_type;
+  std::string charset;
+  std::string data;
+  if (!net::DataURL::Parse(gurl, &mime_type, &charset, &data))
+    return PP_MakeUndefined();
+  return ppapi::StringVar::StringToPPVar(data);
+}
+
+void ProcessNaClManifest(PP_Instance instance, const char* program_url) {
+  nacl::NexeLoadManager* load_manager = GetNexeLoadManager(instance);
+  if (load_manager)
+    load_manager->ProcessNaClManifest(program_url);
+}
+
 const PPB_NaCl_Private nacl_interface = {
   &LaunchSelLdr,
   &StartPpapiProxy,
@@ -686,20 +838,21 @@
   &GetUrlScheme,
   &LogToConsole,
   &GetNaClReadyState,
-  &SetNaClReadyState,
   &GetIsInstalled,
-  &SetIsInstalled,
   &GetExitStatus,
   &SetExitStatus,
   &Vlog,
-  &SetInitTime,
-  &GetNexeSize
+  &InitializePlugin,
+  &GetNexeSize,
+  &RequestNaClManifest,
+  &GetManifestBaseURL,
+  &ResolvesRelativeToPluginBaseURL,
+  &ParseDataURL,
+  &ProcessNaClManifest
 };
 
 }  // namespace
 
-namespace nacl {
-
 const PPB_NaCl_Private* GetNaClPrivateInterface() {
   return &nacl_interface;
 }
diff --git a/components/nacl/zygote/DEPS b/components/nacl/zygote/DEPS
index d1ab0a9..f8b0a76 100644
--- a/components/nacl/zygote/DEPS
+++ b/components/nacl/zygote/DEPS
@@ -1,4 +1,5 @@
 include_rules = [
   "+sandbox/linux/services",
+  "+sandbox/linux/suid",
   "+crypto",
 ]
diff --git a/components/nacl/zygote/nacl_fork_delegate_linux.cc b/components/nacl/zygote/nacl_fork_delegate_linux.cc
index 57a9e33..e6bb77e 100644
--- a/components/nacl/zygote/nacl_fork_delegate_linux.cc
+++ b/components/nacl/zygote/nacl_fork_delegate_linux.cc
@@ -15,7 +15,9 @@
 #include "base/command_line.h"
 #include "base/cpu.h"
 #include "base/files/file_path.h"
+#include "base/files/scoped_file.h"
 #include "base/logging.h"
+#include "base/memory/scoped_ptr.h"
 #include "base/path_service.h"
 #include "base/pickle.h"
 #include "base/posix/eintr_wrapper.h"
@@ -29,6 +31,7 @@
 #include "components/nacl/loader/nacl_helper_linux.h"
 #include "content/public/common/content_descriptors.h"
 #include "content/public/common/content_switches.h"
+#include "sandbox/linux/suid/client/setuid_sandbox_client.h"
 
 namespace {
 
@@ -108,10 +111,14 @@
     : status_(kNaClHelperUnused),
       fd_(-1) {}
 
-void NaClForkDelegate::Init(const int sandboxdesc) {
+void NaClForkDelegate::Init(const int sandboxdesc,
+                            const bool enable_layer1_sandbox) {
   VLOG(1) << "NaClForkDelegate::Init()";
   int fds[2];
 
+  scoped_ptr<sandbox::SetuidSandboxClient> setuid_sandbox_client(
+      sandbox::SetuidSandboxClient::Create());
+
   // For communications between the NaCl loader process and
   // the SUID sandbox.
   int nacl_sandbox_descriptor =
@@ -124,6 +131,14 @@
   fds_to_map.push_back(std::make_pair(fds[1], kNaClZygoteDescriptor));
   fds_to_map.push_back(std::make_pair(sandboxdesc, nacl_sandbox_descriptor));
 
+  // Make sure that nacl_loader is started with a dummy file descriptor. This
+  // is required because the setuid sandbox will always try to close a
+  // hard-wired file descriptor.
+  base::ScopedFD dummy_fd(socket(PF_UNIX, SOCK_DGRAM, 0));
+  CHECK(dummy_fd.is_valid());
+  fds_to_map.push_back(std::make_pair(
+      dummy_fd.get(), setuid_sandbox_client->GetUniqueToChildFileDescriptor()));
+
   // Using nacl_helper_bootstrap is not necessary on x86-64 because
   // NaCl's x86-64 sandbox is not zero-address-based.  Starting
   // nacl_helper through nacl_helper_bootstrap works on x86-64, but it
@@ -189,9 +204,19 @@
                             bootstrap_prepend.begin(),
                             bootstrap_prepend.end());
     }
+
     base::LaunchOptions options;
+    if (enable_layer1_sandbox) {
+      // NaCl needs to keep tight control of the cmd_line, so
+      // pass NULL and prepend the setuid sandbox wrapper manually.
+      setuid_sandbox_client->PrependWrapper(NULL /* cmd_line */, &options);
+      base::FilePath sandbox_path =
+          setuid_sandbox_client->GetSandboxBinaryPath();
+      argv_to_launch.insert(argv_to_launch.begin(), sandbox_path.value());
+      setuid_sandbox_client->SetupLaunchEnvironment();
+    }
+
     options.fds_to_remap = &fds_to_map;
-    options.clone_flags = CLONE_FS | SIGCHLD;
 
     // The NaCl processes spawned may need to exceed the ambient soft limit
     // on RLIMIT_AS to allocate the untrusted address space and its guard
@@ -263,7 +288,8 @@
 }
 
 pid_t NaClForkDelegate::Fork(const std::string& process_type,
-                             const std::vector<int>& fds) {
+                             const std::vector<int>& fds,
+                             const std::string& channel_id) {
   VLOG(1) << "NaClForkDelegate::Fork";
 
   DCHECK(fds.size() == kNumPassedFDs);
@@ -281,6 +307,7 @@
   const bool uses_nonsfi_mode =
     process_type == switches::kNaClLoaderNonSfiProcess;
   write_pickle.WriteBool(uses_nonsfi_mode);
+  write_pickle.WriteString(channel_id);
 
   char reply_buf[kNaClMaxIPCMessageLength];
   ssize_t reply_size = 0;
@@ -304,16 +331,6 @@
   return nacl_child;
 }
 
-bool NaClForkDelegate::AckChild(const int fd,
-                                const std::string& channel_switch) {
-  int nwritten = HANDLE_EINTR(write(fd, channel_switch.c_str(),
-                                    channel_switch.length()));
-  if (nwritten != static_cast<int>(channel_switch.length())) {
-    return false;
-  }
-  return true;
-}
-
 bool NaClForkDelegate::GetTerminationStatus(pid_t pid, bool known_dead,
                                             base::TerminationStatus* status,
                                             int* exit_code) {
diff --git a/components/nacl/zygote/nacl_fork_delegate_linux.h b/components/nacl/zygote/nacl_fork_delegate_linux.h
index 5b085b2..4cc105c 100644
--- a/components/nacl/zygote/nacl_fork_delegate_linux.h
+++ b/components/nacl/zygote/nacl_fork_delegate_linux.h
@@ -22,16 +22,15 @@
   NaClForkDelegate();
   virtual ~NaClForkDelegate();
 
-  virtual void Init(int sandboxdesc) OVERRIDE;
+  virtual void Init(int sandboxdesc, bool enable_layer1_sandbox) OVERRIDE;
   virtual void InitialUMA(std::string* uma_name,
                           int* uma_sample,
                           int* uma_boundary_value) OVERRIDE;
   virtual bool CanHelp(const std::string& process_type, std::string* uma_name,
                           int* uma_sample, int* uma_boundary_value) OVERRIDE;
   virtual pid_t Fork(const std::string& process_type,
-                     const std::vector<int>& fds) OVERRIDE;
-  virtual bool AckChild(int fd,
-                        const std::string& channel_switch) OVERRIDE;
+                     const std::vector<int>& fds,
+                     const std::string& channel_id) OVERRIDE;
   virtual bool GetTerminationStatus(pid_t pid, bool known_dead,
                                     base::TerminationStatus* status,
                                     int* exit_code) OVERRIDE;
diff --git a/components/navigation_interception.target.darwin-arm.mk b/components/navigation_interception.target.darwin-arm.mk
index 8f0b84f..b58d4b8 100644
--- a/components/navigation_interception.target.darwin-arm.mk
+++ b/components/navigation_interception.target.darwin-arm.mk
@@ -247,7 +247,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/navigation_interception.target.darwin-mips.mk b/components/navigation_interception.target.darwin-mips.mk
index af81621..51bf790 100644
--- a/components/navigation_interception.target.darwin-mips.mk
+++ b/components/navigation_interception.target.darwin-mips.mk
@@ -243,7 +243,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/navigation_interception.target.darwin-x86.mk b/components/navigation_interception.target.darwin-x86.mk
index 4eb9f61..7bb7e1b 100644
--- a/components/navigation_interception.target.darwin-x86.mk
+++ b/components/navigation_interception.target.darwin-x86.mk
@@ -243,7 +243,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/navigation_interception.target.darwin-x86_64.mk b/components/navigation_interception.target.darwin-x86_64.mk
index 2f9c630..917565b 100644
--- a/components/navigation_interception.target.darwin-x86_64.mk
+++ b/components/navigation_interception.target.darwin-x86_64.mk
@@ -245,7 +245,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/navigation_interception.target.linux-arm.mk b/components/navigation_interception.target.linux-arm.mk
index 8f0b84f..b58d4b8 100644
--- a/components/navigation_interception.target.linux-arm.mk
+++ b/components/navigation_interception.target.linux-arm.mk
@@ -247,7 +247,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/navigation_interception.target.linux-mips.mk b/components/navigation_interception.target.linux-mips.mk
index af81621..51bf790 100644
--- a/components/navigation_interception.target.linux-mips.mk
+++ b/components/navigation_interception.target.linux-mips.mk
@@ -243,7 +243,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/navigation_interception.target.linux-x86.mk b/components/navigation_interception.target.linux-x86.mk
index 4eb9f61..7bb7e1b 100644
--- a/components/navigation_interception.target.linux-x86.mk
+++ b/components/navigation_interception.target.linux-x86.mk
@@ -243,7 +243,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/navigation_interception.target.linux-x86_64.mk b/components/navigation_interception.target.linux-x86_64.mk
index 2f9c630..917565b 100644
--- a/components/navigation_interception.target.linux-x86_64.mk
+++ b/components/navigation_interception.target.linux-x86_64.mk
@@ -245,7 +245,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/navigation_interception/intercept_navigation_delegate.h b/components/navigation_interception/intercept_navigation_delegate.h
index c70beef..fc3eef9 100644
--- a/components/navigation_interception/intercept_navigation_delegate.h
+++ b/components/navigation_interception/intercept_navigation_delegate.h
@@ -5,7 +5,7 @@
 #ifndef COMPONENTS_NAVIGATION_INTERCEPTION_INTERCEPT_NAVIGATION_DELEGATE_H_
 #define COMPONENTS_NAVIGATION_INTERCEPTION_INTERCEPT_NAVIGATION_DELEGATE_H_
 
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/supports_user_data.h"
 #include "content/public/common/page_transition_types.h"
diff --git a/components/onc/onc_constants.cc b/components/onc/onc_constants.cc
index 68b8755..753eff5 100644
--- a/components/onc/onc_constants.cc
+++ b/components/onc/onc_constants.cc
@@ -46,6 +46,19 @@
 const char kType[] = "Type";
 const char kVPN[] = "VPN";
 const char kWiFi[] = "WiFi";
+
+std::string CellularProperty(const std::string& property) {
+  return std::string(kCellular) + "." + property;
+}
+
+std::string VpnProperty(const std::string& property) {
+  return std::string(kVPN) + "." + property;
+}
+
+std::string WifiProperty(const std::string& property) {
+  return std::string(kWiFi) + "." + property;
+}
+
 }  // namespace network_config
 
 namespace network_type {
@@ -310,4 +323,3 @@
 }  // global_network_config
 
 }  // namespace onc
-
diff --git a/components/onc/onc_constants.h b/components/onc/onc_constants.h
index 400b340..c28ec52 100644
--- a/components/onc/onc_constants.h
+++ b/components/onc/onc_constants.h
@@ -4,6 +4,8 @@
 #ifndef COMPONENTS_ONC_ONC_CONSTANTS_H_
 #define COMPONENTS_ONC_ONC_CONSTANTS_H_
 
+#include <string>
+
 #include "components/onc/onc_export.h"
 
 // Constants for ONC properties.
@@ -68,6 +70,11 @@
 ONC_EXPORT extern const char kType[];
 ONC_EXPORT extern const char kVPN[];
 ONC_EXPORT extern const char kWiFi[];
+
+ONC_EXPORT extern std::string CellularProperty(const std::string& property);
+ONC_EXPORT extern std::string VpnProperty(const std::string& property);
+ONC_EXPORT extern std::string WifiProperty(const std::string& property);
+
 }  // namespace network_config
 
 namespace network_type {
@@ -334,4 +341,3 @@
 }  // namespace onc
 
 #endif  // COMPONENTS_ONC_ONC_CONSTANTS_H_
-
diff --git a/components/os_crypt.target.darwin-arm.mk b/components/os_crypt.target.darwin-arm.mk
index 5d4b14f..16ac652 100644
--- a/components/os_crypt.target.darwin-arm.mk
+++ b/components/os_crypt.target.darwin-arm.mk
@@ -220,7 +220,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/os_crypt.target.darwin-mips.mk b/components/os_crypt.target.darwin-mips.mk
index 26771f0..204e1f8 100644
--- a/components/os_crypt.target.darwin-mips.mk
+++ b/components/os_crypt.target.darwin-mips.mk
@@ -216,7 +216,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/os_crypt.target.darwin-x86.mk b/components/os_crypt.target.darwin-x86.mk
index 432e9c2..deebdd3 100644
--- a/components/os_crypt.target.darwin-x86.mk
+++ b/components/os_crypt.target.darwin-x86.mk
@@ -218,7 +218,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/os_crypt.target.darwin-x86_64.mk b/components/os_crypt.target.darwin-x86_64.mk
index 1360c5f..8fd3d88 100644
--- a/components/os_crypt.target.darwin-x86_64.mk
+++ b/components/os_crypt.target.darwin-x86_64.mk
@@ -218,7 +218,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/os_crypt.target.linux-arm.mk b/components/os_crypt.target.linux-arm.mk
index 5d4b14f..16ac652 100644
--- a/components/os_crypt.target.linux-arm.mk
+++ b/components/os_crypt.target.linux-arm.mk
@@ -220,7 +220,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/os_crypt.target.linux-mips.mk b/components/os_crypt.target.linux-mips.mk
index 26771f0..204e1f8 100644
--- a/components/os_crypt.target.linux-mips.mk
+++ b/components/os_crypt.target.linux-mips.mk
@@ -216,7 +216,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/os_crypt.target.linux-x86.mk b/components/os_crypt.target.linux-x86.mk
index 432e9c2..deebdd3 100644
--- a/components/os_crypt.target.linux-x86.mk
+++ b/components/os_crypt.target.linux-x86.mk
@@ -218,7 +218,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/os_crypt.target.linux-x86_64.mk b/components/os_crypt.target.linux-x86_64.mk
index 1360c5f..8fd3d88 100644
--- a/components/os_crypt.target.linux-x86_64.mk
+++ b/components/os_crypt.target.linux-x86_64.mk
@@ -218,7 +218,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/os_crypt/BUILD.gn b/components/os_crypt/BUILD.gn
new file mode 100644
index 0000000..dc9d675
--- /dev/null
+++ b/components/os_crypt/BUILD.gn
@@ -0,0 +1,36 @@
+# 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.
+
+source_set("os_crypt") {
+  sources = [
+    "ie7_password_win.cc",
+    "ie7_password_win.h",
+    "keychain_password_mac.h",
+    "keychain_password_mac.mm",
+    "os_crypt.h",
+    "os_crypt_mac.mm",
+    "os_crypt_posix.cc",
+    "os_crypt_switches.cc",
+    "os_crypt_switches.h",
+    "os_crypt_win.cc",
+  ]
+
+  deps = [
+    "//base",
+    "//crypto",
+    # TODO(tfarina): Remove this dep when http://crbug.com/363749 is fixed.
+    "//crypto:platform",
+  ]
+
+  if (is_mac) {
+    sources -= [ "os_crypt_posix.cc" ]
+  }
+
+  if (is_ios) {
+    sources += [
+      "keychain_password_mac.mm",
+      "os_crypt_mac.mm",
+    ]
+  }
+}
diff --git a/components/password_manager/core/browser/password_manager_metrics_util.cc b/components/password_manager/core/browser/password_manager_metrics_util.cc
index b955ff9..bc2b317 100644
--- a/components/password_manager/core/browser/password_manager_metrics_util.cc
+++ b/components/password_manager/core/browser/password_manager_metrics_util.cc
@@ -145,6 +145,12 @@
                             NUM_UI_RESPONSES);
 }
 
+void LogUIDisplayDisposition(UIDisplayDisposition disposition) {
+  UMA_HISTOGRAM_ENUMERATION("PasswordBubble.DisplayDisposition",
+                            disposition,
+                            NUM_DISPLAY_DISPOSITIONS);
+}
+
 }  // namespace metrics_util
 
 }  // namespace password_manager
diff --git a/components/password_manager/core/browser/password_manager_metrics_util.h b/components/password_manager/core/browser/password_manager_metrics_util.h
index f42cd9c..3ae22d4 100644
--- a/components/password_manager/core/browser/password_manager_metrics_util.h
+++ b/components/password_manager/core/browser/password_manager_metrics_util.h
@@ -22,7 +22,15 @@
   NUM_RESPONSE_TYPES,
 };
 
-// Metrics: "PasswordManager.UIResponse"
+// Metrics: "PasswordBubble.DisplayDisposition"
+enum UIDisplayDisposition {
+  AUTOMATIC_WITH_PASSWORD_PENDING = 0,
+  MANUAL_WITH_PASSWORD_PENDING,
+  MANUAL_MANAGE_PASSWORDS,
+  NUM_DISPLAY_DISPOSITIONS
+};
+
+// Metrics: "PasswordManager.UIDismissalReason"
 enum UIDismissalReason {
   // We use this to mean both "Bubble lost focus" and "No interaction with the
   // infobar", depending on which experiment is active.
@@ -82,6 +90,9 @@
 // has rolled out to stable.
 void LogUIDismissalReason(ResponseType type);
 
+// Log the appropriate display disposition.
+void LogUIDisplayDisposition(UIDisplayDisposition disposition);
+
 }  // namespace metrics_util
 
 }  // namespace password_manager
diff --git a/components/password_manager/core/browser/password_syncable_service.cc b/components/password_manager/core/browser/password_syncable_service.cc
index 2a7e0db..5d2f674 100644
--- a/components/password_manager/core/browser/password_syncable_service.cc
+++ b/components/password_manager/core/browser/password_syncable_service.cc
@@ -49,7 +49,9 @@
       password_form.preferred == password_specifics.preferred() &&
       password_form.date_created.ToInternalValue() ==
           password_specifics.date_created() &&
-      password_form.blacklisted_by_user == password_specifics.blacklisted()) {
+      password_form.blacklisted_by_user == password_specifics.blacklisted() &&
+      password_form.type == password_specifics.type() &&
+      password_form.times_used == password_specifics.times_used()) {
     return IDENTICAL;
   }
 
@@ -417,6 +419,8 @@
   password_specifics->set_date_created(
       password_form.date_created.ToInternalValue());
   password_specifics->set_blacklisted(password_form.blacklisted_by_user);
+  password_specifics->set_type(password_form.type);
+  password_specifics->set_times_used(password_form.times_used);
 
   std::string tag = MakePasswordSyncTag(*password_specifics);
   return syncer::SyncData::CreateLocalData(tag, tag, password_data);
@@ -440,6 +444,9 @@
   new_password->date_created =
       base::Time::FromInternalValue(password.date_created());
   new_password->blacklisted_by_user = password.blacklisted();
+  new_password->type =
+      static_cast<autofill::PasswordForm::Type>(password.type());
+  new_password->times_used = password.times_used();
 }
 
 std::string MakePasswordSyncTag(
diff --git a/components/password_manager/core/browser/password_syncable_service_unittest.cc b/components/password_manager/core/browser/password_syncable_service_unittest.cc
index 2c72433..d39bc73 100644
--- a/components/password_manager/core/browser/password_syncable_service_unittest.cc
+++ b/components/password_manager/core/browser/password_syncable_service_unittest.cc
@@ -58,6 +58,8 @@
   EXPECT_EQ(expected_password.preferred(), actual_password.preferred());
   EXPECT_EQ(expected_password.date_created(), actual_password.date_created());
   EXPECT_EQ(expected_password.blacklisted(), actual_password.blacklisted());
+  EXPECT_EQ(expected_password.type(), actual_password.type());
+  EXPECT_EQ(expected_password.times_used(), actual_password.times_used());
 }
 
 // Creates a sync data consisting of password specifics. The sign on realm is
@@ -67,6 +69,8 @@
   sync_pb::PasswordSpecificsData* password_specifics =
       password_data.mutable_password()->mutable_client_only_encrypted_data();
   password_specifics->set_signon_realm(signon_realm);
+  password_specifics->set_type(autofill::PasswordForm::TYPE_GENERATED);
+  password_specifics->set_times_used(3);
 
   std::string tag = MakePasswordSyncTag(*password_specifics);
   return syncer::SyncData::CreateLocalData(tag, tag, password_data);
@@ -401,6 +405,8 @@
 TEST_F(PasswordSyncableServiceTest, AdditionOnlyInPasswordStore) {
   scoped_ptr<autofill::PasswordForm> form1(new autofill::PasswordForm);
   form1->signon_realm = "abc";
+  form1->times_used = 2;
+  form1->type = autofill::PasswordForm::TYPE_GENERATED;
   std::vector<autofill::PasswordForm*> forms;
   forms.push_back(form1.release());
   SetPasswordStoreData(forms, std::vector<autofill::PasswordForm*>());
@@ -424,6 +430,8 @@
 TEST_F(PasswordSyncableServiceTest, BothInSync) {
   scoped_ptr<autofill::PasswordForm> form1(new autofill::PasswordForm);
   form1->signon_realm = "abc";
+  form1->times_used = 3;
+  form1->type = autofill::PasswordForm::TYPE_GENERATED;
   std::vector<autofill::PasswordForm*> forms;
   forms.push_back(form1.release());
   SetPasswordStoreData(forms, std::vector<autofill::PasswordForm*>());
@@ -546,6 +554,8 @@
   scoped_ptr<autofill::PasswordForm> form1(new autofill::PasswordForm);
   form1->signon_realm = "abc";
   form1->action = GURL("http://foo.com");
+  form1->times_used = 5;
+  form1->type = autofill::PasswordForm::TYPE_GENERATED;
   scoped_ptr<autofill::PasswordForm> form2(new autofill::PasswordForm);
   form2->signon_realm = "xyz";
   form2->action = GURL("http://bar.com");
diff --git a/components/plugins/renderer/plugin_placeholder.cc b/components/plugins/renderer/plugin_placeholder.cc
index 21e268b..8e01b78 100644
--- a/components/plugins/renderer/plugin_placeholder.cc
+++ b/components/plugins/renderer/plugin_placeholder.cc
@@ -19,6 +19,7 @@
 #include "third_party/WebKit/public/web/WebDocument.h"
 #include "third_party/WebKit/public/web/WebElement.h"
 #include "third_party/WebKit/public/web/WebInputEvent.h"
+#include "third_party/WebKit/public/web/WebLocalFrame.h"
 #include "third_party/WebKit/public/web/WebPluginContainer.h"
 #include "third_party/WebKit/public/web/WebScriptSource.h"
 #include "third_party/WebKit/public/web/WebView.h"
diff --git a/components/plugins/renderer/webview_plugin.cc b/components/plugins/renderer/webview_plugin.cc
index 6095e2b..b1df67c 100644
--- a/components/plugins/renderer/webview_plugin.cc
+++ b/components/plugins/renderer/webview_plugin.cc
@@ -219,6 +219,10 @@
   web_view_->dragSourceSystemDragEnded();
 }
 
+bool WebViewPlugin::allowsBrokenNullLayerTreeView() const {
+  return true;
+}
+
 void WebViewPlugin::didInvalidateRect(const WebRect& rect) {
   if (container_)
     container_->invalidateRect(rect);
diff --git a/components/plugins/renderer/webview_plugin.h b/components/plugins/renderer/webview_plugin.h
index af352ec..8c17c51 100644
--- a/components/plugins/renderer/webview_plugin.h
+++ b/components/plugins/renderer/webview_plugin.h
@@ -116,6 +116,10 @@
                              const blink::WebImage& image,
                              const blink::WebPoint& point);
 
+  // TODO(ojan): Remove this override and have this class use a non-null
+  // layerTreeView.
+  virtual bool allowsBrokenNullLayerTreeView() const;
+
   // WebWidgetClient methods:
   virtual void didInvalidateRect(const blink::WebRect&);
   virtual void didChangeCursor(const blink::WebCursorInfo& cursor);
diff --git a/components/policy/core/common/cloud/cloud_policy_manager.cc b/components/policy/core/common/cloud/cloud_policy_manager.cc
index 73d121a..b68d97d 100644
--- a/components/policy/core/common/cloud/cloud_policy_manager.cc
+++ b/components/policy/core/common/cloud/cloud_policy_manager.cc
@@ -93,14 +93,18 @@
   if (IsInitializationComplete(POLICY_DOMAIN_CHROME) &&
       !waiting_for_policy_refresh_) {
     scoped_ptr<PolicyBundle> bundle(new PolicyBundle);
-    bundle->Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()))
-        .CopyFrom(store()->policy_map());
+    GetChromePolicy(
+        &bundle->Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())));
     if (component_policy_service_)
       bundle->MergeFrom(component_policy_service_->policy());
     UpdatePolicy(bundle.Pass());
   }
 }
 
+void CloudPolicyManager::GetChromePolicy(PolicyMap* policy_map) {
+  policy_map->CopyFrom(store()->policy_map());
+}
+
 void CloudPolicyManager::CreateComponentCloudPolicyService(
     const base::FilePath& policy_cache_path,
     const scoped_refptr<net::URLRequestContextGetter>& request_context) {
diff --git a/components/policy/core/common/cloud/cloud_policy_manager.h b/components/policy/core/common/cloud/cloud_policy_manager.h
index 0a04414..c029e67 100644
--- a/components/policy/core/common/cloud/cloud_policy_manager.h
+++ b/components/policy/core/common/cloud/cloud_policy_manager.h
@@ -30,6 +30,8 @@
 
 namespace policy {
 
+class PolicyMap;
+
 // CloudPolicyManager is the main switching central between cloud policy and the
 // upper layers of the policy stack. It wires up a CloudPolicyCore to the
 // ConfigurationPolicyProvider interface.
@@ -75,6 +77,11 @@
   // ConfigurationPolicyStore::UpdatePolicy().
   void CheckAndPublishPolicy();
 
+  // Writes Chrome policy into |policy_map|. This is intended to be overridden
+  // by subclasses that want to post-process policy before publishing it. The
+  // default implementation just copies over |store()->policy_map()|.
+  virtual void GetChromePolicy(PolicyMap* policy_map);
+
   void CreateComponentCloudPolicyService(
       const base::FilePath& policy_cache_path,
       const scoped_refptr<net::URLRequestContextGetter>& request_context);
diff --git a/components/policy/proto/device_management_backend.proto b/components/policy/proto/device_management_backend.proto
index 5f2f0f4..1ed8222 100644
--- a/components/policy/proto/device_management_backend.proto
+++ b/components/policy/proto/device_management_backend.proto
@@ -274,6 +274,21 @@
   // by the client when requesting Policy Posture assertion through an API
   // call or SAML flow.
   optional string policy_token = 15;
+
+  // Indicates the management mode of the device. Note that old policies do not
+  // have this field.
+  enum ManagementMode {
+    // The device is not managed. The policies are set locally by the owner of
+    // the device.
+    NOT_MANAGED = 0;
+    // The device is enterprise-managed. The policies come from the enterprise
+    // server.
+    ENTERPRISE_MANAGED = 1;
+    // The device is consumer-managed. The policies currently can only be set
+    // locally by the owner of the device.
+    CONSUMER_MANAGED = 2;
+  }
+  optional ManagementMode management_mode = 16;
 }
 
 message PolicyFetchResponse {
diff --git a/components/policy/resources/policy_templates.json b/components/policy/resources/policy_templates.json
index 6042bfe..b491930 100644
--- a/components/policy/resources/policy_templates.json
+++ b/components/policy/resources/policy_templates.json
@@ -3020,7 +3020,7 @@
 
       If the setting is changed while the user is signed into a multiprofile session, all users in the session will be checked against their corresponding settings. The session will be closed if any one of the users is no longer allowed to be in the session.
 
-      If the policy is left not set, the default value 'MultiProfileUserBehaviorUnrestricted' will be used.''',
+      If the policy is left not set, the default value 'MultiProfileUserBehaviorMustBePrimary' applies for enterprise-managed users and 'MultiProfileUserBehaviorUnrestricted' will be used for non-managed users.''',
     },
     {
       'name': 'InstantEnabled',
@@ -3496,16 +3496,19 @@
       'name': 'EnableOriginBoundCerts',
       'type': 'main',
       'schema': { 'type': 'boolean' },
-      'supported_on': ['chrome.*:17-'],
+      'supported_on': ['chrome.*:17-35'],
       'features': {
         'dynamic_refresh': True,
         'per_profile': False,
       },
+      'deprecated': True,
       'future': True,
       'example_value': True,
       'id': 114,
-      'caption': '''Enable TLS domain-bound certificates extension''',
-      'desc': '''Specifies whether the TLS domain-bound certificates extension should be enabled.
+      'caption': '''Enable TLS domain-bound certificates extension (deprecated)''',
+      'desc': '''This policy has been retired as of <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> version 36.
+
+      Specifies whether the TLS domain-bound certificates extension should be enabled.
 
       This setting is used to enable the TLS domain-bound certificates extension for testing.  This experimental setting will be removed in the future.''',
     },
diff --git a/components/policy/resources/policy_templates_sw.xtb b/components/policy/resources/policy_templates_sw.xtb
index ddeec9a..8f5b27d 100644
--- a/components/policy/resources/policy_templates_sw.xtb
+++ b/components/policy/resources/policy_templates_sw.xtb
@@ -21,14 +21,14 @@
 Sera hii huathiri aina zote za vifaa vya kuingiza sauti na si tu maikrofoni iliyojengewa ndani.</translation>
 <translation id="7267809745244694722">Vitufe vya media huelekeza kwenye vitufe vya vitendo kwa chaguo-msingi</translation>
 <translation id="9150416707757015439">Sera hii imepitwa na wakati. Tafadhali, tumia IncognitoModeAvailability badala yake.
-      Huwasha modi fiche katika <ph name="PRODUCT_NAME"/>.
+      Huwasha hali fiche katika <ph name="PRODUCT_NAME"/>.
 
-      Ikiwa mpangilio huu umewashwa au haujasanidiwa, watumiaji wanaweza kufungua kurasa za wavuti katika modi fiche.
+      Ikiwa mpangilio huu umewashwa au haujasanidiwa, watumiaji wanaweza kufungua kurasa za wavuti katika hali fiche.
 
-      Ikiwa mpangilio huu umezimwa, watumiaji hawawezi kufungua kurasa za wavuti katika modi fiche.
+      Ikiwa mpangilio huu umezimwa, watumiaji hawawezi kufungua kurasa za wavuti katika hali fiche.
 
 
-       Ikiwa sera hii itawachwa ikiwa haijawekwa, hii itawashwa na mtumiaji ataweza kutumia modi fiche.</translation>
+       Ikiwa sera hii itawachwa ikiwa haijawekwa, hii itawashwa na mtumiaji ataweza kutumia hali fiche.</translation>
 <translation id="4203389617541558220">Pima muda wa kuwaka wa kifaa kwa kuratibu kuwasha tena kiotomatiki.
 Sera hii inapowekwa, inabainisha urefu wa muda wa kuwaka wa kifaa baada ya upi uwashaji tena kiotomatiki utaratibiwa.
 
@@ -885,7 +885,7 @@
 
     Iwapo sera hii haitawekwamu itawekwa kuwa uongo, amri za kuchapisha zitachochea skrini ya ukakiki ya kuchapisha.</translation>
 <translation id="7933141401888114454">Washa uundaji wa watumiaji wanaosimamiwa</translation>
-<translation id="2824715612115726353">Washa modi Fiche</translation>
+<translation id="2824715612115726353">Washa hali Fiche</translation>
 <translation id="1057535219415338480">Inawezesha ubashiri wa mtandao kwenye <ph name="PRODUCT_NAME"/> na kuzuia watumiaji kubadilisha mpangilio huu.
 
       Hii haidhibiti tu uletaji awali wa DNL lakini pia unganishaji awali na uonyeshaji awali wa kurasa za wavuti za TCP na SSL. Jina la sera linarejelea uletaji awali wa DNS kwa sababu za kihistoria.
@@ -1037,7 +1037,7 @@
 <translation id="1349276916170108723">Huzima usawazishaji wa Hifadhi ya Google  kwenye programu ya faili za OS za Chrome inapowekwa kwenye Kweli. Katika hali hiyo, hakuna data inayopakiwa kwenye Hifadhi ya Google.
 
           Iwapo haijawekwa au imewekwa kwenye Uongo, basi watumiaji wataweza kuhamisha faili kwenye Hifadhi ya Google.</translation>
-<translation id="1964634611280150550">Modi ya chini kwa chini imezimwa</translation>
+<translation id="1964634611280150550">Hali fiche imezimwa</translation>
 <translation id="5971128524642832825">Huzima Hifadhi katika programu ya Faili za OS za Chrome</translation>
 <translation id="1847960418907100918">Hubainisha vigezo vinavyotumika wakati wa kufanya utafutaji wa papo hapo kwa kutumia POST. Ina vikundi vya jina/thamani vinavyotenganishwa na koma. Kama thamani ni kigezo cha kiolezo, kama {Hoja za utafutaji} katika mfano hapo juu, 
 itabadilishwa na data ya hoja za utafutaji za kweli.
@@ -1076,13 +1076,13 @@
       Sera hii bado haijakuwa tayari kwa matumizi, tafadhali usiitumie.</translation>
 <translation id="8344454543174932833">Leta alamisho kutoka kwenye kivinjari chaguo-msingi wakati wa uendeshaji wa kwanza</translation>
 <translation id="1019101089073227242">Weka saraka ya data ya mtumiaji</translation>
-<translation id="5826047473100157858">Hubainisha iwapo mtumiaji anaweza kufungua kurasa kwenye modi Fiche katika <ph name="PRODUCT_NAME"/>.
+<translation id="5826047473100157858">Hubainisha iwapo mtumiaji anaweza kufungua kurasa katika hali Fiche kwenye <ph name="PRODUCT_NAME"/>.
 
-      Ikiwa hiari ya 'Imewashwa' imechaguliwa au sera haijawekwa, huenda kurasa zikafunguliwa katika modi Fiche.
+      Ikiwa hiari ya 'Imewashwa' imechaguliwa au sera haijawekwa, huenda kurasa zikafunguliwa katika hali Fiche.
 
-      Ikiwa hiari ya 'Imezimwa' imechaguliwa, huenda kurasa zisifunguliwe katika modi Fiche.
+      Ikiwa hiari ya 'Imezimwa' imechaguliwa, huenda kurasa zisifunguliwe katika hali Fiche.
 
-     Ikiwa hiari ya 'Imelazimishwa' imechaguliwa, huenda kurasa zikafunguliwa TU katika modi Fiche.</translation>
+     Ikiwa hiari ya 'Imelazimishwa' imechaguliwa, huenda kurasa zikafunguliwa TU katika hali Fiche.</translation>
 <translation id="2988031052053447965">Ficha programu ya Duka la Wavuti la Chrome na kiungo cha tanbihi kutoka kwa Ukurasa Mpya wa Kichupo na kizindua programu cha Chrome OS.
 
       Sera hii inapowekwa kwenye ndivyo, ikoni hufichwa.
@@ -1598,7 +1598,7 @@
           Sera hii ni ya hiari. Isipowekwa, ombi la utafutaji litatumwa kutumia mbinu ya GET.
 
           Sera hii inatumika endapo sera ya 'DefaultSearchProviderEnabled' imewashwa.</translation>
-<translation id="5307432759655324440">Upatikanaji wa modi ya chini kwa chini</translation>
+<translation id="5307432759655324440">Upatikanaji wa hali fiche</translation>
 <translation id="4056910949759281379">Lemaza itifaki ya SPDY</translation>
 <translation id="3808945828600697669">Bainisha orodha ya programu jalizi zilizolemazwa</translation>
 <translation id="4525521128313814366">Inakuruhusu kuweka orodha ya ruwaza za url ambazo zinabainisha tovuti ambazo haziruhusiwi kuonyesha picha.
@@ -1730,7 +1730,7 @@
           <ph name="PROXY_HELP_URL"/></translation>
 <translation id="1509692106376861764">Sera hii imeondolewa kutoka toleo la 29 la <ph name="PRODUCT_NAME"/></translation>
 <translation id="5464816904705580310">Sanidi mipangilio ya watumiaji waliodhibitiwa.</translation>
-<translation id="3219421230122020860">Modi chini kwa chini inapatikana</translation>
+<translation id="3219421230122020860">Hali fiche inapatikana</translation>
 <translation id="7690740696284155549">Inasanidi saraka ambayo <ph name="PRODUCT_NAME"/> itatumia kwa kupakua faili.
 
       Ukiweka sera hii, <ph name="PRODUCT_NAME"/> itatumia saraka iliyotolewa bila kujali iwapo mtumiaji amebainisha moja au amewasha alamisho ya kuchochewa kwa eneo la upakuaji kila wakati.
@@ -1891,7 +1891,7 @@
       Ikiwa mpangilio huu utawezeshwa au hautasanidiwa, watumiaji wanaweza kuchapisha kwenye <ph name="CLOUD_PRINT_NAME"/> kutoka kwenye <ph name="PRODUCT_NAME"/> kidadisi cha kuchapisha.
 
       Ikiwa mpangilio huu utalemazwa, watumiaji hawawezi kuchapisha kwenye <ph name="CLOUD_PRINT_NAME"/> kutoka kwenye <ph name="PRODUCT_NAME"/> kidadisi cha kuchapisha</translation>
-<translation id="4088589230932595924">Modi ya chini kwa chini imelazimishwa</translation>
+<translation id="4088589230932595924">Hali fiche imelazimishwa</translation>
 <translation id="5862253018042179045">Weka hali ya chaguo msingi ya kipengee cha ufikiaji cha maoni yaliyotamkwa kwenye skrini ya kuingi. 
         Iwapo sera hii imewekwa kuwa kweli, maoni yaliyosemwa yatawashwa skrini ya kuingina katika akaunti itakapoonyeshwa. 
        Iwapo sera hii imewekwa kwa haitumiki, maoni yaliyosemwa yatazimwa skrini ya kuingina katika akaunti itakapoonyeshwa. 
diff --git a/components/policy/resources/policy_templates_th.xtb b/components/policy/resources/policy_templates_th.xtb
index e42d333..c029d07 100644
--- a/components/policy/resources/policy_templates_th.xtb
+++ b/components/policy/resources/policy_templates_th.xtb
@@ -533,9 +533,9 @@
 <translation id="8493645415242333585">ปิดใช้งานการบันทึกประวัติเบราว์เซอร์</translation>
 <translation id="2747783890942882652">กำหนดค่าชื่อโดเมนของโฮสต์ที่จำเป็นซึ่งจะถูกกำหนดให้กับโฮสต์การเข้าถึงระยะไกลและป้องกันไม่ให้ผู้ใช้ทำการเปลี่ยนแปลง
 
-          หากการตั้งค่านี้เปิดใช้งานอยู่ จะสามารถแบ่งปันโฮสต์ได้โดยใช้บัญชีที่ลงทะเบียนในชื่อโดเมนที่ระบุเท่านั้น
+          หากการตั้งค่านี้เปิดใช้งานอยู่ จะสามารถแชร์โฮสต์ได้โดยใช้บัญชีที่ลงทะเบียนในชื่อโดเมนที่ระบุเท่านั้น
 
-          หากการตั้งค่านี้ปิดใช้งานอยู่หรือไม่ได้ตั้งค่า จะไม่สามารถแบ่งปันโฮสต์โดยใช้บัญชีใดๆ ได้เลย</translation>
+          หากการตั้งค่านี้ปิดใช้งานอยู่หรือไม่ได้ตั้งค่า จะไม่สามารถแชร์โฮสต์โดยใช้บัญชีใดๆ ได้เลย</translation>
 <translation id="6417861582779909667">ช่วยให้คุณกำหนดรายการของรูปแบบ URL ที่ระบุไซต์ที่ไม่ได้รับอนุญาตให้ตั้งค่าคุกกี้ หากนโยบายนี้ไม่มีการตั้งค่าไว้ จะใช้ค่าเริ่มต้นของทั่วโลกสำหรับไซต์ทั้งหมด ทั้งจากนโยบาย &quot;DefaultCookiesSetting&quot; หากมีการตั้งค่าไว้ หรือจากการกำหนดค่าส่วนบุคคลของผู้ใช้</translation>
 <translation id="5776485039795852974">ถามทุกครั้งที่ไซต์ต้องการแสดงการแจ้งเตือนของเดสก์ท็อป</translation>
 <translation id="5047604665028708335">อนุญาตการเข้าถึงเว็บไซต์ที่อยู่นอกชุดเนื้อหา</translation>
@@ -817,11 +817,11 @@
 <translation id="8731693562790917685">การตั้งค่าเนื้อหาช่วยให้คุณระบุวิธีจัดการเนื้อหาบางประเภท (เช่น คุกกี้ รูปภาพ หรือ JavaScript)</translation>
 <translation id="2411919772666155530">บล็อกการแจ้งเตือนในไซต์เหล่านี้</translation>
 <translation id="6923366716660828830">ระบุชื่อของผู้ให้บริการการค้นหาเริ่มต้น หากปล่อยว่างหรือไม่ได้กำหนดไว้ จะใช้ชื่อโฮสต์ที่ระบุไว้โดย URL ค้นหา นโยบายนี้จะใช้เฉพาะในกรณีที่มีการเปิดใช้งานนโยบาย &quot;DefaultSearchProviderEnabled&quot; เท่านั้น</translation>
-<translation id="4869787217450099946">ระบุว่าอนุญาตล็อกปลุกหน้าจอหรือไม่ สามารถส่งคำขอล็อกปลุกหน้าจอได้โดยใช้ส่วนขยายผ่านทาง API ส่วนขยายการจัดการพลังงาน
+<translation id="4869787217450099946">ระบุว่าอนุญาตให้ล็อกหน้าจอให้เปิดค้างหรือไม่ สามารถส่งคำขอล็อกหน้าจอให้เปิดค้างได้โดยใช้ส่วนขยายผ่านทาง API ส่วนขยายการจัดการพลังงาน
 
-          หากตั้งค่านโยบายนี้เป็น True หรือไม่ตั้งค่า ล็อกปลุกหน้าจอจะยึดตามการจัดการพลังงาน
+          หากตั้งค่านโยบายนี้เป็น True หรือไม่ตั้งค่า การล็อกหน้าจอให้เปิดค้างจะยึดตามการจัดการพลังงาน
 
-          หากตั้งค่านโยบายนี้เป็น False คำขอล็อกปลุกหน้าจอจะถูกละเว้น</translation>
+          หากตั้งค่านโยบายนี้เป็น False คำขอล็อกหน้าจอให้เปิดค้างจะถูกละเว้น</translation>
 <translation id="467236746355332046">คุณลักษณะที่ได้รับการสนับสนุน:</translation>
 <translation id="5447306928176905178">เปิดการรายงานข้อมูลหน่วยความจำ (JS ขนาดใหญ่) บนหน้า (กำหนดให้เลิกใช้แล้ว)</translation>
 <translation id="7632724434767231364">ชื่อไลบรารี GSSAPI</translation>
@@ -1018,7 +1018,7 @@
 
       หากมีการเปิดการตั้งค่านี้หรือไม่ได้กำหนดค่าไว้ ผู้ใช้จะสามารถเปิดใช้งานพร็อกซี Cloud Print โดยการตรวจสอบสิทธิ์กับบัญชี Google ของตน
 
-      หากปิดการตั้งค่านี้ ผู้ใช้จะไม่สามารถเปิดใช้งานพร็อกซีและเครื่องจะไม่ได้รับอนุญาตให้แบ่งปันเครื่องพิมพ์กับ <ph name="CLOUD_PRINT_NAME"/></translation>
+      หากปิดการตั้งค่านี้ ผู้ใช้จะไม่สามารถเปิดใช้งานพร็อกซีและเครื่องจะไม่ได้รับอนุญาตให้แชร์เครื่องพิมพ์กับ <ph name="CLOUD_PRINT_NAME"/></translation>
 <translation id="6373222873250380826">ปิดใช้งานการอัปเดตอัตโนมัติเมื่อตั้งค่าเป็น &quot;จริง&quot;
 
       อุปกรณ์ของ <ph name="PRODUCT_OS_NAME"/> จะตรวจหาการอัปเดตอัตโนมัติเมื่อไม่ได้ตั้งค่านโยบายนี้หรือตั้งค่าเป็น &quot;เท็จ&quot;</translation>
diff --git a/components/policy_strings.grdp b/components/policy_strings.grdp
index 5b1896a..502b5b7 100644
--- a/components/policy_strings.grdp
+++ b/components/policy_strings.grdp
@@ -188,21 +188,20 @@
   <message name="IDS_POLICY_VALUE_DEPRECATED" desc="The text displayed in the status column when a specific value for a policy is deprecated.">
     This value is deprecated for this policy.
   </message>
-  <message name="IDS_POLICY_NETWORK_CONFIG_PARSE_FAILED" desc="The text displayed in the status column when the corresponding network configuration policy failed to parse.">
-    Network configuration failed to be parsed.
-  </message>
-  <message name="IDS_POLICY_NETWORK_CONFIG_IMPORT_PARTIAL" desc="The text displayed in the status column when the corresponding network configuration policy is not standard conform and was imported partially.">
-    The network configuration doesn't comply to the ONC standard. Parts of the configuration may not be imported.
-  </message>
-  <message name="IDS_POLICY_NETWORK_CONFIG_IMPORT_FAILED" desc="The text displayed in the status column when the corresponding network configuration policy is invalid.">
-    The network configuration is invalid and couldn't be imported.
-  </message>
-  <message name="IDS_POLICY_JSON_PARSE_ERROR" desc="The text displayed in the status column when a policy that should have been specified in JSON format could not be parsed.">
-    Failed to parse JSON format: <ph name="JSON_PARSE_ERROR">$1<ex>Unexpected token.</ex></ph>
-  </message>
-  <message name="IDS_POLICY_SCOPE_ERROR" desc="Text displayed in the status column when a policy is set in an unsupported scope.">
-    Policy scope is not supported.
-  </message>
+  <if expr="chromeos">
+    <message name="IDS_POLICY_NETWORK_CONFIG_PARSE_FAILED" desc="The text displayed in the status column when the corresponding network configuration policy failed to parse.">
+      Network configuration failed to be parsed.
+    </message>
+    <message name="IDS_POLICY_NETWORK_CONFIG_IMPORT_PARTIAL" desc="The text displayed in the status column when the corresponding network configuration policy is not standard conform and was imported partially.">
+      The network configuration doesn't comply to the ONC standard. Parts of the configuration may not be imported.
+    </message>
+    <message name="IDS_POLICY_NETWORK_CONFIG_IMPORT_FAILED" desc="The text displayed in the status column when the corresponding network configuration policy is invalid.">
+      The network configuration is invalid and couldn't be imported.
+    </message>
+    <message name="IDS_POLICY_SCOPE_ERROR" desc="Text displayed in the status column when a policy is set in an unsupported scope.">
+      Policy scope is not supported.
+    </message>
+  </if>
   <message name="IDS_POLICY_OK" desc="Text displayed in the status column when a valid value is set for a policy.">
     OK
   </message>
@@ -212,9 +211,6 @@
   <message name="IDS_POLICY_UNKNOWN" desc="Text displayed in the status column when a policy name is not recognized.">
     Unknown policy.
   </message>
-  <message name="IDS_POLICY_INVALID_BOOKMARK" desc="Text displayed in the status column when an entry of the ManagedBookmarks policy is not a valid bookmark.">
-    Ignored invalid bookmark at index <ph name="ENTRY_INDEX">$1<ex>3</ex></ph>
-  </message>
 
   <!-- chrome://policy -->
   <message name="IDS_POLICY_TITLE" desc="Page title and the title of the section that lists policies.">
@@ -310,5 +306,8 @@
     <message name="IDS_POLICY_MANAGED_BOOKMARKS_DEFAULT_NAME" desc="Mobile: name of the managed bookmarks folder when the management domain can't be determined.">
       Managed bookmarks
     </message>
+    <message name="IDS_POLICY_INVALID_BOOKMARK" desc="Text displayed in the status column when an entry of the ManagedBookmarks policy is not a valid bookmark.">
+      Ignored invalid bookmark at index <ph name="ENTRY_INDEX">$1<ex>3</ex></ph>
+    </message>
   </if>
 </grit-part>
diff --git a/components/query_parser.gypi b/components/query_parser.gypi
new file mode 100644
index 0000000..0b7f189
--- /dev/null
+++ b/components/query_parser.gypi
@@ -0,0 +1,26 @@
+# 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.
+
+{
+  'targets': [
+    {
+      'target_name': 'query_parser',
+      'type': 'static_library',
+      'include_dirs': [
+        '..',
+      ],
+      'dependencies': [
+        '../base/base.gyp:base',
+        '../base/base.gyp:base_i18n',
+        '../third_party/icu/icu.gyp:icuuc',
+      ],
+      'sources': [
+        'query_parser/query_parser.cc',
+        'query_parser/query_parser.h',
+        'query_parser/snippet.cc',
+        'query_parser/snippet.h',
+      ],
+    },
+  ],
+}
diff --git a/components/query_parser/DEPS b/components/query_parser/DEPS
new file mode 100644
index 0000000..0faa0bf
--- /dev/null
+++ b/components/query_parser/DEPS
@@ -0,0 +1,5 @@
+include_rules = [
+  # query_parser is a component that is not allowed to uses content/ so that it
+  # can be shared on iOS.
+  "-content",
+]
diff --git a/components/query_parser/OWNERS b/components/query_parser/OWNERS
new file mode 100644
index 0000000..5b65cff
--- /dev/null
+++ b/components/query_parser/OWNERS
@@ -0,0 +1,8 @@
+brettw@chromium.org
+sky@chromium.org
+
+# Temporary owner, for refactoring changes only.
+blundell@chromium.org
+
+# Temporary owner, for refactoring changes only.
+droger@chromium.org
diff --git a/components/query_parser/README b/components/query_parser/README
new file mode 100644
index 0000000..1331523
--- /dev/null
+++ b/components/query_parser/README
@@ -0,0 +1,9 @@
+query_parser is a components used by both history and bookmarks to avoid having
+a cyclic dependencies between the two components. It only exports types used to
+parse and normalize queries into the history search.
+
+query_parser is not allowed to depend on content/, because it is used by iOS.
+If dependences on content/ need to be added to query_parser, it will have to be
+made into a layered component. See [1] for more information.
+
+1: http://www.chromium.org/developers/design-documents/layered-components-design
diff --git a/components/query_parser/query_parser.cc b/components/query_parser/query_parser.cc
new file mode 100644
index 0000000..d09edff
--- /dev/null
+++ b/components/query_parser/query_parser.cc
@@ -0,0 +1,472 @@
+// 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.
+
+#include "components/query_parser/query_parser.h"
+
+#include <algorithm>
+
+#include "base/compiler_specific.h"
+#include "base/i18n/break_iterator.h"
+#include "base/i18n/case_conversion.h"
+#include "base/logging.h"
+#include "base/stl_util.h"
+#include "base/strings/utf_string_conversions.h"
+
+namespace query_parser {
+namespace {
+
+// Returns true if |mp1.first| is less than |mp2.first|. This is used to
+// sort match positions.
+int CompareMatchPosition(const Snippet::MatchPosition& mp1,
+                         const Snippet::MatchPosition& mp2) {
+  return mp1.first < mp2.first;
+}
+
+// Returns true if |mp2| intersects |mp1|. This is intended for use by
+// CoalesceMatchesFrom and isn't meant as a general intersection comparison
+// function.
+bool SnippetIntersects(const Snippet::MatchPosition& mp1,
+                       const Snippet::MatchPosition& mp2) {
+  return mp2.first >= mp1.first && mp2.first <= mp1.second;
+}
+
+// Coalesces match positions in |matches| after index that intersect the match
+// position at |index|.
+void CoalesceMatchesFrom(size_t index, Snippet::MatchPositions* matches) {
+  Snippet::MatchPosition& mp = (*matches)[index];
+  for (Snippet::MatchPositions::iterator i = matches->begin() + index + 1;
+       i != matches->end(); ) {
+    if (SnippetIntersects(mp, *i)) {
+      mp.second = std::max(mp.second, i->second);
+      i = matches->erase(i);
+    } else {
+      return;
+    }
+  }
+}
+
+// Returns true if the character is considered a quote.
+bool IsQueryQuote(wchar_t ch) {
+  return ch == '"' ||
+         ch == 0xab ||    // left pointing double angle bracket
+         ch == 0xbb ||    // right pointing double angle bracket
+         ch == 0x201c ||  // left double quotation mark
+         ch == 0x201d ||  // right double quotation mark
+         ch == 0x201e;    // double low-9 quotation mark
+}
+
+}  // namespace
+
+// Inheritance structure:
+// Queries are represented as trees of QueryNodes.
+// QueryNodes are either a collection of subnodes (a QueryNodeList)
+// or a single word (a QueryNodeWord).
+
+// A QueryNodeWord is a single word in the query.
+class QueryNodeWord : public QueryNode {
+ public:
+  explicit QueryNodeWord(const base::string16& word);
+  virtual ~QueryNodeWord();
+
+  const base::string16& word() const { return word_; }
+
+  void set_literal(bool literal) { literal_ = literal; }
+
+  // QueryNode:
+  virtual int AppendToSQLiteQuery(base::string16* query) const OVERRIDE;
+  virtual bool IsWord() const OVERRIDE;
+  virtual bool Matches(const base::string16& word, bool exact) const OVERRIDE;
+  virtual bool HasMatchIn(
+      const QueryWordVector& words,
+      Snippet::MatchPositions* match_positions) const OVERRIDE;
+  virtual bool HasMatchIn(
+      const QueryWordVector& words) const OVERRIDE;
+  virtual void AppendWords(std::vector<base::string16>* words) const OVERRIDE;
+
+ private:
+  base::string16 word_;
+  bool literal_;
+
+  DISALLOW_COPY_AND_ASSIGN(QueryNodeWord);
+};
+
+QueryNodeWord::QueryNodeWord(const base::string16& word)
+    : word_(word),
+      literal_(false) {}
+
+QueryNodeWord::~QueryNodeWord() {}
+
+int QueryNodeWord::AppendToSQLiteQuery(base::string16* query) const {
+  query->append(word_);
+
+  // Use prefix search if we're not literal and long enough.
+  if (!literal_ && QueryParser::IsWordLongEnoughForPrefixSearch(word_))
+    *query += L'*';
+  return 1;
+}
+
+bool QueryNodeWord::IsWord() const {
+  return true;
+}
+
+bool QueryNodeWord::Matches(const base::string16& word, bool exact) const {
+  if (exact || !QueryParser::IsWordLongEnoughForPrefixSearch(word_))
+    return word == word_;
+  return word.size() >= word_.size() &&
+         (word_.compare(0, word_.size(), word, 0, word_.size()) == 0);
+}
+
+bool QueryNodeWord::HasMatchIn(const QueryWordVector& words,
+                               Snippet::MatchPositions* match_positions) const {
+  bool matched = false;
+  for (size_t i = 0; i < words.size(); ++i) {
+    if (Matches(words[i].word, false)) {
+      size_t match_start = words[i].position;
+      match_positions->push_back(
+          Snippet::MatchPosition(match_start,
+                                 match_start + static_cast<int>(word_.size())));
+      matched = true;
+    }
+  }
+  return matched;
+}
+
+bool QueryNodeWord::HasMatchIn(const QueryWordVector& words) const {
+  for (size_t i = 0; i < words.size(); ++i) {
+    if (Matches(words[i].word, false))
+      return true;
+  }
+  return false;
+}
+
+void QueryNodeWord::AppendWords(std::vector<base::string16>* words) const {
+  words->push_back(word_);
+}
+
+// A QueryNodeList has a collection of QueryNodes which are deleted in the end.
+class QueryNodeList : public QueryNode {
+ public:
+  QueryNodeList();
+  virtual ~QueryNodeList();
+
+  QueryNodeStarVector* children() { return &children_; }
+
+  void AddChild(QueryNode* node);
+
+  // Remove empty subnodes left over from other parsing.
+  void RemoveEmptySubnodes();
+
+  // QueryNode:
+  virtual int AppendToSQLiteQuery(base::string16* query) const OVERRIDE;
+  virtual bool IsWord() const OVERRIDE;
+  virtual bool Matches(const base::string16& word, bool exact) const OVERRIDE;
+  virtual bool HasMatchIn(
+      const QueryWordVector& words,
+      Snippet::MatchPositions* match_positions) const OVERRIDE;
+  virtual bool HasMatchIn(const QueryWordVector& words) const OVERRIDE;
+  virtual void AppendWords(std::vector<base::string16>* words) const OVERRIDE;
+
+ protected:
+  int AppendChildrenToString(base::string16* query) const;
+
+  QueryNodeStarVector children_;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(QueryNodeList);
+};
+
+QueryNodeList::QueryNodeList() {}
+
+QueryNodeList::~QueryNodeList() {
+  STLDeleteElements(&children_);
+}
+
+void QueryNodeList::AddChild(QueryNode* node) {
+  children_.push_back(node);
+}
+
+void QueryNodeList::RemoveEmptySubnodes() {
+  for (size_t i = 0; i < children_.size(); ++i) {
+    if (children_[i]->IsWord())
+      continue;
+
+    QueryNodeList* list_node = static_cast<QueryNodeList*>(children_[i]);
+    list_node->RemoveEmptySubnodes();
+    if (list_node->children()->empty()) {
+      children_.erase(children_.begin() + i);
+      --i;
+      delete list_node;
+    }
+  }
+}
+
+int QueryNodeList::AppendToSQLiteQuery(base::string16* query) const {
+  return AppendChildrenToString(query);
+}
+
+bool QueryNodeList::IsWord() const {
+  return false;
+}
+
+bool QueryNodeList::Matches(const base::string16& word, bool exact) const {
+  NOTREACHED();
+  return false;
+}
+
+bool QueryNodeList::HasMatchIn(const QueryWordVector& words,
+                               Snippet::MatchPositions* match_positions) const {
+  NOTREACHED();
+  return false;
+}
+
+bool QueryNodeList::HasMatchIn(const QueryWordVector& words) const {
+  NOTREACHED();
+  return false;
+}
+
+void QueryNodeList::AppendWords(std::vector<base::string16>* words) const {
+  for (size_t i = 0; i < children_.size(); ++i)
+    children_[i]->AppendWords(words);
+}
+
+int QueryNodeList::AppendChildrenToString(base::string16* query) const {
+  int num_words = 0;
+  for (QueryNodeStarVector::const_iterator node = children_.begin();
+       node != children_.end(); ++node) {
+    if (node != children_.begin())
+      query->push_back(L' ');
+    num_words += (*node)->AppendToSQLiteQuery(query);
+  }
+  return num_words;
+}
+
+// A QueryNodePhrase is a phrase query ("quoted").
+class QueryNodePhrase : public QueryNodeList {
+ public:
+  QueryNodePhrase();
+  virtual ~QueryNodePhrase();
+
+  // QueryNodeList:
+  virtual int AppendToSQLiteQuery(base::string16* query) const OVERRIDE;
+  virtual bool HasMatchIn(
+      const QueryWordVector& words,
+      Snippet::MatchPositions* match_positions) const OVERRIDE;
+  virtual bool HasMatchIn(const QueryWordVector& words) const OVERRIDE;
+
+ private:
+  bool MatchesAll(const QueryWordVector& words,
+                  const QueryWord** first_word,
+                  const QueryWord** last_word) const;
+  DISALLOW_COPY_AND_ASSIGN(QueryNodePhrase);
+};
+
+QueryNodePhrase::QueryNodePhrase() {}
+
+QueryNodePhrase::~QueryNodePhrase() {}
+
+int QueryNodePhrase::AppendToSQLiteQuery(base::string16* query) const {
+  query->push_back(L'"');
+  int num_words = AppendChildrenToString(query);
+  query->push_back(L'"');
+  return num_words;
+}
+
+bool QueryNodePhrase::MatchesAll(const QueryWordVector& words,
+                                 const QueryWord** first_word,
+                                 const QueryWord** last_word) const {
+  if (words.size() < children_.size())
+    return false;
+
+  for (size_t i = 0, max = words.size() - children_.size() + 1; i < max; ++i) {
+    bool matched_all = true;
+    for (size_t j = 0; j < children_.size(); ++j) {
+      if (!children_[j]->Matches(words[i + j].word, true)) {
+        matched_all = false;
+        break;
+      }
+    }
+    if (matched_all) {
+      *first_word = &words[i];
+      *last_word = &words[i + children_.size() - 1];
+      return true;
+    }
+  }
+  return false;
+}
+
+bool QueryNodePhrase::HasMatchIn(
+    const QueryWordVector& words,
+    Snippet::MatchPositions* match_positions) const {
+  const QueryWord* first_word;
+  const QueryWord* last_word;
+
+  if (MatchesAll(words, &first_word, &last_word)) {
+    match_positions->push_back(
+        Snippet::MatchPosition(first_word->position,
+                               last_word->position + last_word->word.length()));
+      return true;
+  }
+  return false;
+}
+
+bool QueryNodePhrase::HasMatchIn(const QueryWordVector& words) const {
+  const QueryWord* first_word;
+  const QueryWord* last_word;
+  return MatchesAll(words, &first_word, &last_word);
+}
+
+QueryParser::QueryParser() {}
+
+// static
+bool QueryParser::IsWordLongEnoughForPrefixSearch(const base::string16& word) {
+  DCHECK(!word.empty());
+  size_t minimum_length = 3;
+  // We intentionally exclude Hangul Jamos (both Conjoining and compatibility)
+  // because they 'behave like' Latin letters. Moreover, we should
+  // normalize the former before reaching here.
+  if (0xAC00 <= word[0] && word[0] <= 0xD7A3)
+    minimum_length = 2;
+  return word.size() >= minimum_length;
+}
+
+int QueryParser::ParseQuery(const base::string16& query,
+                            base::string16* sqlite_query) {
+  QueryNodeList root;
+  if (!ParseQueryImpl(query, &root))
+    return 0;
+  return root.AppendToSQLiteQuery(sqlite_query);
+}
+
+void QueryParser::ParseQueryWords(const base::string16& query,
+                                  std::vector<base::string16>* words) {
+  QueryNodeList root;
+  if (!ParseQueryImpl(query, &root))
+    return;
+  root.AppendWords(words);
+}
+
+void QueryParser::ParseQueryNodes(const base::string16& query,
+                                  QueryNodeStarVector* nodes) {
+  QueryNodeList root;
+  if (ParseQueryImpl(base::i18n::ToLower(query), &root))
+    nodes->swap(*root.children());
+}
+
+bool QueryParser::DoesQueryMatch(const base::string16& text,
+                                 const QueryNodeStarVector& query_nodes,
+                                 Snippet::MatchPositions* match_positions) {
+  if (query_nodes.empty())
+    return false;
+
+  QueryWordVector query_words;
+  base::string16 lower_text = base::i18n::ToLower(text);
+  ExtractQueryWords(lower_text, &query_words);
+
+  if (query_words.empty())
+    return false;
+
+  Snippet::MatchPositions matches;
+  for (size_t i = 0; i < query_nodes.size(); ++i) {
+    if (!query_nodes[i]->HasMatchIn(query_words, &matches))
+      return false;
+  }
+  if (lower_text.length() != text.length()) {
+    // The lower case string differs from the original string. The matches are
+    // meaningless.
+    // TODO(sky): we need a better way to align the positions so that we don't
+    // completely punt here.
+    match_positions->clear();
+  } else {
+    SortAndCoalesceMatchPositions(&matches);
+    match_positions->swap(matches);
+  }
+  return true;
+}
+
+bool QueryParser::DoesQueryMatch(const QueryWordVector& query_words,
+                                 const QueryNodeStarVector& query_nodes) {
+  if (query_nodes.empty() || query_words.empty())
+    return false;
+
+  for (size_t i = 0; i < query_nodes.size(); ++i) {
+    if (!query_nodes[i]->HasMatchIn(query_words))
+      return false;
+  }
+  return true;
+}
+
+bool QueryParser::ParseQueryImpl(const base::string16& query,
+                                 QueryNodeList* root) {
+  base::i18n::BreakIterator iter(query, base::i18n::BreakIterator::BREAK_WORD);
+  // TODO(evanm): support a locale here
+  if (!iter.Init())
+    return false;
+
+  // To handle nesting, we maintain a stack of QueryNodeLists.
+  // The last element (back) of the stack contains the current, deepest node.
+  std::vector<QueryNodeList*> query_stack;
+  query_stack.push_back(root);
+
+  bool in_quotes = false;  // whether we're currently in a quoted phrase
+  while (iter.Advance()) {
+    // Just found a span between 'prev' (inclusive) and 'pos' (exclusive). It
+    // is not necessarily a word, but could also be a sequence of punctuation
+    // or whitespace.
+    if (iter.IsWord()) {
+      QueryNodeWord* word_node = new QueryNodeWord(iter.GetString());
+      if (in_quotes)
+        word_node->set_literal(true);
+      query_stack.back()->AddChild(word_node);
+    } else {  // Punctuation.
+      if (IsQueryQuote(query[iter.prev()])) {
+        if (!in_quotes) {
+          QueryNodeList* quotes_node = new QueryNodePhrase;
+          query_stack.back()->AddChild(quotes_node);
+          query_stack.push_back(quotes_node);
+          in_quotes = true;
+        } else {
+          query_stack.pop_back();  // Stop adding to the quoted phrase.
+          in_quotes = false;
+        }
+      }
+    }
+  }
+
+  root->RemoveEmptySubnodes();
+  return true;
+}
+
+void QueryParser::ExtractQueryWords(const base::string16& text,
+                                    QueryWordVector* words) {
+  base::i18n::BreakIterator iter(text, base::i18n::BreakIterator::BREAK_WORD);
+  // TODO(evanm): support a locale here
+  if (!iter.Init())
+    return;
+
+  while (iter.Advance()) {
+    // Just found a span between 'prev' (inclusive) and 'pos' (exclusive). It
+    // is not necessarily a word, but could also be a sequence of punctuation
+    // or whitespace.
+    if (iter.IsWord()) {
+      base::string16 word = iter.GetString();
+      if (!word.empty()) {
+        words->push_back(QueryWord());
+        words->back().word = word;
+        words->back().position = iter.prev();
+     }
+    }
+  }
+}
+
+// static
+void QueryParser::SortAndCoalesceMatchPositions(
+    Snippet::MatchPositions* matches) {
+  std::sort(matches->begin(), matches->end(), &CompareMatchPosition);
+  // WARNING: we don't use iterator here as CoalesceMatchesFrom may remove
+  // from matches.
+  for (size_t i = 0; i < matches->size(); ++i)
+    CoalesceMatchesFrom(i, matches);
+}
+
+}  // namespace query_parser
diff --git a/components/query_parser/query_parser.h b/components/query_parser/query_parser.h
new file mode 100644
index 0000000..cc3f94b
--- /dev/null
+++ b/components/query_parser/query_parser.h
@@ -0,0 +1,124 @@
+// 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.
+
+#ifndef COMPONENTS_QUERY_PARSER_QUERY_PARSER_H_
+#define COMPONENTS_QUERY_PARSER_QUERY_PARSER_H_
+
+#include <vector>
+
+#include "base/basictypes.h"
+#include "base/strings/string16.h"
+#include "components/query_parser/snippet.h"
+
+namespace query_parser {
+
+class QueryNodeList;
+
+// Used by HasMatchIn.
+struct QueryWord {
+  // The work to match against.
+  base::string16 word;
+
+  // The starting position of the word in the original text.
+  size_t position;
+};
+
+typedef std::vector<query_parser::QueryWord> QueryWordVector;
+
+// QueryNode is used by QueryParser to represent the elements that constitute a
+// query. While QueryNode is exposed by way of ParseQuery, it really isn't meant
+// for external usage.
+class QueryNode {
+ public:
+  virtual ~QueryNode() {}
+
+  // Serialize ourselves out to a string that can be passed to SQLite. Returns
+  // the number of words in this node.
+  virtual int AppendToSQLiteQuery(base::string16* query) const = 0;
+
+  // Return true if this is a QueryNodeWord, false if it's a QueryNodeList.
+  virtual bool IsWord() const = 0;
+
+  // Returns true if this node matches |word|. If |exact| is true, the string
+  // must exactly match. Otherwise, this uses a starts with comparison.
+  virtual bool Matches(const base::string16& word, bool exact) const = 0;
+
+  // Returns true if this node matches at least one of the words in |words|. An
+  // entry is added to |match_positions| for all matching words giving the
+  // matching regions.
+  virtual bool HasMatchIn(const QueryWordVector& words,
+                          Snippet::MatchPositions* match_positions) const = 0;
+
+  // Returns true if this node matches at least one of the words in |words|.
+  virtual bool HasMatchIn(const QueryWordVector& words) const = 0;
+
+  // Appends the words that make up this node in |words|.
+  virtual void AppendWords(std::vector<base::string16>* words) const = 0;
+};
+
+typedef std::vector<query_parser::QueryNode*> QueryNodeStarVector;
+
+// This class is used to parse queries entered into the history search into more
+// normalized queries that can be passed to the SQLite backend.
+class QueryParser {
+ public:
+  QueryParser();
+
+  // For CJK ideographs and Korean Hangul, even a single character
+  // can be useful in prefix matching, but that may give us too many
+  // false positives. Moreover, the current ICU word breaker gives us
+  // back every single Chinese character as a word so that there's no
+  // point doing anything for them and we only adjust the minimum length
+  // to 2 for Korean Hangul while using 3 for others. This is a temporary
+  // hack until we have a segmentation support.
+  static bool IsWordLongEnoughForPrefixSearch(const base::string16& word);
+
+  // Parse a query into a SQLite query. The resulting query is placed in
+  // |sqlite_query| and the number of words is returned.
+  int ParseQuery(const base::string16& query, base::string16* sqlite_query);
+
+  // Parses |query|, returning the words that make up it. Any words in quotes
+  // are put in |words| without the quotes. For example, the query text
+  // "foo bar" results in two entries being added to words, one for foo and one
+  // for bar.
+  void ParseQueryWords(const base::string16& query,
+                       std::vector<base::string16>* words);
+
+  // Parses |query|, returning the nodes that constitute the valid words in the
+  // query. This is intended for later usage with DoesQueryMatch. Ownership of
+  // the nodes passes to the caller.
+  void ParseQueryNodes(const base::string16& query,
+                       QueryNodeStarVector* nodes);
+
+  // Returns true if the string text matches the query nodes created by a call
+  // to ParseQuery. If the query does match, each of the matching positions in
+  // the text is added to |match_positions|.
+  bool DoesQueryMatch(const base::string16& text,
+                      const QueryNodeStarVector& nodes,
+                      Snippet::MatchPositions* match_positions);
+
+  // Returns true if all of the |words| match the query |nodes| created by a
+  // call to ParseQuery.
+  bool DoesQueryMatch(const QueryWordVector& words,
+                      const QueryNodeStarVector& nodes);
+
+  // Extracts the words from |text|, placing each word into |words|.
+  void ExtractQueryWords(const base::string16& text,
+                         QueryWordVector* words);
+
+  // Sorts the match positions in |matches| by their first index, then
+  // coalesces any match positions that intersect each other.
+  static void SortAndCoalesceMatchPositions(Snippet::MatchPositions* matches);
+
+ private:
+  // Does the work of parsing |query|; creates nodes in |root| as appropriate.
+  // This is invoked from both of the ParseQuery methods.
+  bool ParseQueryImpl(const base::string16& query, QueryNodeList* root);
+
+  DISALLOW_COPY_AND_ASSIGN(QueryParser);
+};
+
+}  // namespace query_parser
+
+#endif  // COMPONENTS_QUERY_PARSER_QUERY_PARSER_H_
diff --git a/components/query_parser/query_parser_unittest.cc b/components/query_parser/query_parser_unittest.cc
new file mode 100644
index 0000000..0ec1412
--- /dev/null
+++ b/components/query_parser/query_parser_unittest.cc
@@ -0,0 +1,170 @@
+// 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.
+
+#include "base/basictypes.h"
+#include "base/memory/scoped_vector.h"
+#include "base/strings/utf_string_conversions.h"
+#include "components/query_parser/query_parser.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace query_parser {
+
+class QueryParserTest : public testing::Test {
+ public:
+  struct TestData {
+    const char* input;
+    const int expected_word_count;
+  };
+
+  std::string QueryToString(const std::string& query);
+
+ protected:
+  QueryParser query_parser_;
+};
+
+// Test helper: Convert a user query string in 8-bit (for hardcoding
+// convenience) to a SQLite query string.
+std::string QueryParserTest::QueryToString(const std::string& query) {
+  base::string16 sqlite_query;
+  query_parser_.ParseQuery(base::UTF8ToUTF16(query), &sqlite_query);
+  return base::UTF16ToUTF8(sqlite_query);
+}
+
+// Basic multi-word queries, including prefix matching.
+TEST_F(QueryParserTest, SimpleQueries) {
+  EXPECT_EQ("", QueryToString(" "));
+  EXPECT_EQ("singleword*", QueryToString("singleword"));
+  EXPECT_EQ("spacedout*", QueryToString("  spacedout "));
+  EXPECT_EQ("foo* bar*", QueryToString("foo bar"));
+  // Short words aren't prefix matches. For Korean Hangul
+  // the minimum is 2 while for other scripts, it's 3.
+  EXPECT_EQ("f b", QueryToString(" f b"));
+  // KA JANG
+  EXPECT_EQ(base::WideToUTF8(L"\xAC00 \xC7A5"),
+            QueryToString(base::WideToUTF8(L" \xAC00 \xC7A5")));
+  EXPECT_EQ("foo* bar*", QueryToString(" foo   bar "));
+  // KA-JANG BICH-GO
+  EXPECT_EQ(base::WideToUTF8(L"\xAC00\xC7A5* \xBE5B\xACE0*"),
+            QueryToString(base::WideToUTF8(L"\xAC00\xC7A5 \xBE5B\xACE0")));
+}
+
+// Quoted substring parsing.
+TEST_F(QueryParserTest, Quoted) {
+  // ASCII quotes
+  EXPECT_EQ("\"Quoted\"", QueryToString("\"Quoted\""));
+  // Missing end quotes
+  EXPECT_EQ("\"miss end\"", QueryToString("\"miss end"));
+  // Missing begin quotes
+  EXPECT_EQ("miss* beg*", QueryToString("miss beg\""));
+  // Weird formatting
+  EXPECT_EQ("\"Many\" \"quotes\"", QueryToString("\"Many   \"\"quotes"));
+}
+
+// Apostrophes within words should be preserved, but otherwise stripped.
+TEST_F(QueryParserTest, Apostrophes) {
+  EXPECT_EQ("foo* bar's*", QueryToString("foo bar's"));
+  EXPECT_EQ("l'foo*", QueryToString("l'foo"));
+  EXPECT_EQ("foo*", QueryToString("'foo"));
+}
+
+// Special characters.
+TEST_F(QueryParserTest, SpecialChars) {
+  EXPECT_EQ("foo* the* bar*", QueryToString("!#:/*foo#$*;'* the!#:/*bar"));
+}
+
+TEST_F(QueryParserTest, NumWords) {
+  TestData data[] = {
+    { "blah",                  1 },
+    { "foo \"bar baz\"",       3 },
+    { "foo \"baz\"",           2 },
+    { "foo \"bar baz\"  blah", 4 },
+  };
+
+  for (size_t i = 0; i < arraysize(data); ++i) {
+    base::string16 query_string;
+    EXPECT_EQ(data[i].expected_word_count,
+              query_parser_.ParseQuery(base::UTF8ToUTF16(data[i].input),
+                                       &query_string));
+  }
+}
+
+TEST_F(QueryParserTest, ParseQueryNodesAndMatch) {
+  struct TestData2 {
+    const std::string query;
+    const std::string text;
+    const bool matches;
+    const size_t m1_start;
+    const size_t m1_end;
+    const size_t m2_start;
+    const size_t m2_end;
+  } data[] = {
+    { "foo",           "fooey foo",        true,  0, 3, 6, 9 },
+    { "foo foo",       "foo",              true,  0, 3, 0, 0 },
+    { "foo fooey",     "fooey",            true,  0, 5, 0, 0 },
+    { "fooey foo",     "fooey",            true,  0, 5, 0, 0 },
+    { "foo fooey bar", "bar fooey",        true,  0, 3, 4, 9 },
+    { "blah",          "blah",             true,  0, 4, 0, 0 },
+    { "blah",          "foo",              false, 0, 0, 0, 0 },
+    { "blah",          "blahblah",         true,  0, 4, 0, 0 },
+    { "blah",          "foo blah",         true,  4, 8, 0, 0 },
+    { "foo blah",      "blah",             false, 0, 0, 0, 0 },
+    { "foo blah",      "blahx foobar",     true,  0, 4, 6, 9 },
+    { "\"foo blah\"",  "foo blah",         true,  0, 8, 0, 0 },
+    { "\"foo blah\"",  "foox blahx",       false, 0, 0, 0, 0 },
+    { "\"foo blah\"",  "foo blah",         true,  0, 8, 0, 0 },
+    { "\"foo blah\"",  "\"foo blah\"",     true,  1, 9, 0, 0 },
+    { "foo blah",      "\"foo bar blah\"", true,  1, 4, 9, 13 },
+  };
+  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(data); ++i) {
+    QueryParser parser;
+    ScopedVector<QueryNode> query_nodes;
+    parser.ParseQueryNodes(base::UTF8ToUTF16(data[i].query),
+                           &query_nodes.get());
+    Snippet::MatchPositions match_positions;
+    ASSERT_EQ(data[i].matches,
+              parser.DoesQueryMatch(base::UTF8ToUTF16(data[i].text),
+                                    query_nodes.get(),
+                                    &match_positions));
+    size_t offset = 0;
+    if (data[i].m1_start != 0 || data[i].m1_end != 0) {
+      ASSERT_TRUE(match_positions.size() >= 1);
+      EXPECT_EQ(data[i].m1_start, match_positions[0].first);
+      EXPECT_EQ(data[i].m1_end, match_positions[0].second);
+      offset++;
+    }
+    if (data[i].m2_start != 0 || data[i].m2_end != 0) {
+      ASSERT_TRUE(match_positions.size() == 1 + offset);
+      EXPECT_EQ(data[i].m2_start, match_positions[offset].first);
+      EXPECT_EQ(data[i].m2_end, match_positions[offset].second);
+    }
+  }
+}
+
+TEST_F(QueryParserTest, ParseQueryWords) {
+  struct TestData2 {
+    const std::string text;
+    const std::string w1;
+    const std::string w2;
+    const std::string w3;
+    const size_t word_count;
+  } data[] = {
+    { "foo",           "foo", "",    "",  1 },
+    { "foo bar",       "foo", "bar", "",  2 },
+    { "\"foo bar\"",   "foo", "bar", "",  2 },
+    { "\"foo bar\" a", "foo", "bar", "a", 3 },
+  };
+  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(data); ++i) {
+    std::vector<base::string16> results;
+    QueryParser parser;
+    parser.ParseQueryWords(base::UTF8ToUTF16(data[i].text), &results);
+    ASSERT_EQ(data[i].word_count, results.size());
+    EXPECT_EQ(data[i].w1, base::UTF16ToUTF8(results[0]));
+    if (results.size() == 2)
+      EXPECT_EQ(data[i].w2, base::UTF16ToUTF8(results[1]));
+    if (results.size() == 3)
+      EXPECT_EQ(data[i].w3, base::UTF16ToUTF8(results[2]));
+  }
+}
+
+}  // namespace query_parser
diff --git a/components/query_parser/snippet.cc b/components/query_parser/snippet.cc
new file mode 100644
index 0000000..e393d60
--- /dev/null
+++ b/components/query_parser/snippet.cc
@@ -0,0 +1,302 @@
+// 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.
+
+#include "components/query_parser/snippet.h"
+
+#include <algorithm>
+
+#include "base/logging.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/strings/string_split.h"
+#include "base/strings/string_util.h"
+#include "base/strings/utf_string_conversions.h"
+#include "third_party/icu/source/common/unicode/brkiter.h"
+#include "third_party/icu/source/common/unicode/utext.h"
+#include "third_party/icu/source/common/unicode/utf8.h"
+
+namespace query_parser {
+namespace {
+
+bool PairFirstLessThan(const Snippet::MatchPosition& a,
+                       const Snippet::MatchPosition& b) {
+  return a.first < b.first;
+}
+
+// Combines all pairs after offset in match_positions that are contained
+// or touch the pair at offset.
+void CoalescePositionsFrom(size_t offset,
+                           Snippet::MatchPositions* match_positions) {
+  DCHECK(offset < match_positions->size());
+  Snippet::MatchPosition& pair((*match_positions)[offset]);
+  ++offset;
+  while (offset < match_positions->size() &&
+         pair.second >= (*match_positions)[offset].first) {
+    pair.second = std::max(pair.second, (*match_positions)[offset].second);
+    match_positions->erase(match_positions->begin() + offset);
+  }
+}
+
+// Makes sure there is a pair in match_positions that contains the specified
+// range. This keeps the pairs ordered in match_positions by first, and makes
+// sure none of the pairs in match_positions touch each other.
+void AddMatch(size_t start,
+              size_t end,
+              Snippet::MatchPositions* match_positions) {
+  DCHECK(start < end);
+  DCHECK(match_positions);
+  Snippet::MatchPosition pair(start, end);
+  if (match_positions->empty()) {
+    match_positions->push_back(pair);
+    return;
+  }
+  // There's at least one match. Find the position of the new match,
+  // potentially extending pairs around it.
+  Snippet::MatchPositions::iterator i =
+      std::lower_bound(match_positions->begin(), match_positions->end(),
+                       pair, &PairFirstLessThan);
+  if (i != match_positions->end() && i->first == start) {
+    // Match not at the end and there is already a pair with the same
+    // start.
+    if (end > i->second) {
+      // New pair extends beyond existing pair. Extend existing pair and
+      // coalesce matches after it.
+      i->second = end;
+      CoalescePositionsFrom(i - match_positions->begin(), match_positions);
+    }  // else case, new pair completely contained in existing pair, nothing
+       // to do.
+  } else if (i == match_positions->begin()) {
+    // Match at the beginning and the first pair doesn't have the same
+    // start. Insert new pair and coalesce matches after it.
+    match_positions->insert(i, pair);
+    CoalescePositionsFrom(0, match_positions);
+  } else {
+    // Not at the beginning (but may be at the end).
+    --i;
+    if (start <= i->second && end > i->second) {
+      // Previous element contains match. Extend it and coalesce.
+      i->second = end;
+      CoalescePositionsFrom(i - match_positions->begin(), match_positions);
+    } else if (end > i->second) {
+      // Region doesn't touch previous element. See if region touches current
+      // element.
+      ++i;
+      if (i == match_positions->end() || end < i->first) {
+        match_positions->insert(i, pair);
+      } else {
+        i->first = start;
+        i->second = end;
+        CoalescePositionsFrom(i - match_positions->begin(), match_positions);
+      }
+    }
+  }
+}
+
+// Converts an index in a utf8 string into the index in the corresponding utf16
+// string and returns the utf16 index. This is intended to be called in a loop
+// iterating through a utf8 string.
+//
+// utf8_string: the utf8 string.
+// utf8_length: length of the utf8 string.
+// offset: the utf8 offset to convert.
+// utf8_pos: current offset in the utf8 string. This is modified and on return
+//           matches offset.
+// wide_pos: current index in the wide string. This is the same as the return
+//           value.
+size_t AdvanceAndReturnUTF16Pos(const char* utf8_string,
+                                int32_t utf8_length,
+                                int32_t offset,
+                                int32_t* utf8_pos,
+                                size_t* utf16_pos) {
+  DCHECK(offset >= *utf8_pos && offset <= utf8_length);
+
+  UChar32 wide_char;
+  while (*utf8_pos < offset) {
+    U8_NEXT(utf8_string, *utf8_pos, utf8_length, wide_char);
+    *utf16_pos += (wide_char <= 0xFFFF) ? 1 : 2;
+  }
+  return *utf16_pos;
+}
+
+// Given a character break iterator over a UTF-8 string, set the iterator
+// position to |*utf8_pos| and move by |count| characters. |count| can
+// be either positive or negative.
+void MoveByNGraphemes(icu::BreakIterator* bi, int count, size_t* utf8_pos) {
+  // Ignore the return value. A side effect of the current position
+  // being set at or following |*utf8_pos| is exploited here.
+  // It's simpler than calling following(n) and then previous().
+  // isBoundary() is not very fast, but should be good enough for the
+  // snippet generation. If not, revisit the way we scan in ComputeSnippet.
+  bi->isBoundary(static_cast<int32_t>(*utf8_pos));
+  bi->next(count);
+  *utf8_pos = static_cast<size_t>(bi->current());
+}
+
+// The amount of context to include for a given hit. Note that it's counted
+// in terms of graphemes rather than bytes.
+const int kSnippetContext = 50;
+
+// Returns true if next match falls within a snippet window
+// from the previous match. The window size is counted in terms
+// of graphemes rather than bytes in UTF-8.
+bool IsNextMatchWithinSnippetWindow(icu::BreakIterator* bi,
+                                    size_t previous_match_end,
+                                    size_t next_match_start) {
+  // If it's within a window in terms of bytes, it's certain
+  // that it's within a window in terms of graphemes as well.
+  if (next_match_start < previous_match_end + kSnippetContext)
+    return true;
+  bi->isBoundary(static_cast<int32_t>(previous_match_end));
+  // An alternative to this is to call |bi->next()| at most
+  // kSnippetContext times, compare |bi->current()| with |next_match_start|
+  // after each call and return early if possible. There are other
+  // heuristics to speed things up if necessary, but it's not likely that
+  // we need to bother.
+  bi->next(kSnippetContext);
+  int64 current = bi->current();
+  return (next_match_start < static_cast<uint64>(current) ||
+          current == icu::BreakIterator::DONE);
+}
+
+}  // namespace
+
+// static
+void Snippet::ExtractMatchPositions(const std::string& offsets_str,
+                                    const std::string& column_num,
+                                    MatchPositions* match_positions) {
+  DCHECK(match_positions);
+  if (offsets_str.empty())
+    return;
+  std::vector<std::string> offsets;
+  base::SplitString(offsets_str, ' ', &offsets);
+  // SQLite offsets are sets of four integers:
+  //   column, query term, match offset, match length
+  // Matches within a string are marked by (start, end) pairs.
+  for (size_t i = 0; i < offsets.size() - 3; i += 4) {
+    if (offsets[i] != column_num)
+      continue;
+    const size_t start = atoi(offsets[i + 2].c_str());
+    const size_t end = start + atoi(offsets[i + 3].c_str());
+    // Switch to DCHECK after debugging http://crbug.com/15261.
+    CHECK(end >= start);
+    AddMatch(start, end, match_positions);
+  }
+}
+
+// static
+void Snippet::ConvertMatchPositionsToWide(
+    const std::string& utf8_string,
+    Snippet::MatchPositions* match_positions) {
+  DCHECK(match_positions);
+  int32_t utf8_pos = 0;
+  size_t utf16_pos = 0;
+  const char* utf8_cstring = utf8_string.c_str();
+  const int32_t utf8_length = static_cast<int32_t>(utf8_string.size());
+  for (Snippet::MatchPositions::iterator i = match_positions->begin();
+       i != match_positions->end(); ++i) {
+    i->first = AdvanceAndReturnUTF16Pos(utf8_cstring, utf8_length,
+                                        static_cast<int32_t>(i->first),
+                                        &utf8_pos, &utf16_pos);
+    i->second = AdvanceAndReturnUTF16Pos(utf8_cstring, utf8_length,
+                                         static_cast<int32_t>(i->second),
+                                         &utf8_pos, &utf16_pos);
+  }
+}
+
+Snippet::Snippet() {
+}
+
+Snippet::~Snippet() {
+}
+
+void Snippet::ComputeSnippet(const MatchPositions& match_positions,
+                             const std::string& document) {
+  // The length of snippets we try to produce.
+  // We can generate longer snippets but stop once we cross kSnippetMaxLength.
+  const size_t kSnippetMaxLength = 200;
+  const base::string16 kEllipsis = base::ASCIIToUTF16(" ... ");
+
+  UText* document_utext = NULL;
+  UErrorCode status = U_ZERO_ERROR;
+  document_utext = utext_openUTF8(document_utext, document.data(),
+                                  document.size(), &status);
+  // Locale does not matter because there's no per-locale customization
+  // for character iterator.
+  scoped_ptr<icu::BreakIterator> bi(icu::BreakIterator::createCharacterInstance(
+      icu::Locale::getDefault(), status));
+  bi->setText(document_utext, status);
+  DCHECK(U_SUCCESS(status));
+
+  // We build the snippet by iterating through the matches and then grabbing
+  // context around each match.  If matches are near enough each other (within
+  // kSnippetContext), we skip the "..." between them.
+  base::string16 snippet;
+  size_t start = 0;
+  for (size_t i = 0; i < match_positions.size(); ++i) {
+    // Some shorter names for the current match.
+    const size_t match_start = match_positions[i].first;
+    const size_t match_end = match_positions[i].second;
+
+    // Switch to DCHECK after debugging http://crbug.com/15261.
+    CHECK(match_end > match_start);
+    CHECK(match_end <= document.size());
+
+    // Add the context, if any, to show before the match.
+    size_t context_start = match_start;
+    MoveByNGraphemes(bi.get(), -kSnippetContext, &context_start);
+    start = std::max(start, context_start);
+    if (start < match_start) {
+      if (start > 0)
+        snippet += kEllipsis;
+      // Switch to DCHECK after debugging http://crbug.com/15261.
+      CHECK(start < document.size());
+      snippet += base::UTF8ToUTF16(document.substr(start, match_start - start));
+    }
+
+    // Add the match.
+    const size_t first = snippet.size();
+    snippet += base::UTF8ToUTF16(document.substr(match_start,
+                                                 match_end - match_start));
+    matches_.push_back(std::make_pair(first, snippet.size()));
+
+    // Compute the context, if any, to show after the match.
+    size_t end;
+    // Check if the next match falls within our snippet window.
+    if (i + 1 < match_positions.size() &&
+        IsNextMatchWithinSnippetWindow(bi.get(), match_end,
+            match_positions[i + 1].first)) {
+      // Yes, it's within the window.  Make the end context extend just up
+      // to the next match.
+      end = match_positions[i + 1].first;
+      // Switch to DCHECK after debugging http://crbug.com/15261.
+      CHECK(end >= match_end);
+      CHECK(end <= document.size());
+      snippet += base::UTF8ToUTF16(document.substr(match_end, end - match_end));
+    } else {
+      // No, there's either no next match or the next match is too far away.
+      end = match_end;
+      MoveByNGraphemes(bi.get(), kSnippetContext, &end);
+      // Switch to DCHECK after debugging http://crbug.com/15261.
+      CHECK(end >= match_end);
+      CHECK(end <= document.size());
+      snippet += base::UTF8ToUTF16(document.substr(match_end, end - match_end));
+      if (end < document.size())
+        snippet += kEllipsis;
+    }
+    start = end;
+
+    // Stop here if we have enough snippet computed.
+    if (snippet.size() >= kSnippetMaxLength)
+      break;
+  }
+
+  utext_close(document_utext);
+  swap(text_, snippet);
+}
+
+void Snippet::Swap(Snippet* other) {
+  text_.swap(other->text_);
+  matches_.swap(other->matches_);
+}
+
+}  // namespace query_parser
diff --git a/components/query_parser/snippet.h b/components/query_parser/snippet.h
new file mode 100644
index 0000000..5ddb56f
--- /dev/null
+++ b/components/query_parser/snippet.h
@@ -0,0 +1,73 @@
+// 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.
+
+// This module computes snippets of queries based on hits in the documents
+// for display in history search results.
+
+#ifndef COMPONENTS_QUERY_PARSER_SNIPPET_H__
+#define COMPONENTS_QUERY_PARSER_SNIPPET_H__
+
+#include <vector>
+
+#include "base/strings/string16.h"
+
+namespace query_parser {
+
+class Snippet {
+ public:
+  // Each MatchPosition is the [begin, end) positions of a match within a
+  // string.
+  typedef std::pair<size_t, size_t> MatchPosition;
+  typedef std::vector<MatchPosition> MatchPositions;
+
+  // Parses an offsets string as returned from a sqlite full text index. An
+  // offsets string encodes information about why a row matched a text query.
+  // The information is encoded in the string as a set of matches, where each
+  // match consists of the column, term-number, location, and length of the
+  // match. Each element of the match is separated by a space, as is each match
+  // from other matches.
+  //
+  // This method adds the start and end of each match whose column is
+  // column_num to match_positions. The pairs are ordered based on first,
+  // with no overlapping elements.
+  //
+  // NOTE: the positions returned are in terms of UTF8 encoding. To convert the
+  // offsets to wide, use ConvertMatchPositionsToWide.
+  static void ExtractMatchPositions(const std::string& offsets_str,
+                                    const std::string& column_num,
+                                    MatchPositions* match_positions);
+
+  // Converts match positions as returned from ExtractMatchPositions to be in
+  // terms of a wide string.
+  static void ConvertMatchPositionsToWide(
+      const std::string& utf8_string,
+      Snippet::MatchPositions* match_positions);
+
+  Snippet();
+  ~Snippet();
+
+  // Given |matches|, the match positions within |document|, compute the snippet
+  // for the document.
+  // Note that |document| is UTF-8 and the offsets in |matches| are byte
+  // offsets.
+  void ComputeSnippet(const MatchPositions& matches,
+                      const std::string& document);
+
+  const base::string16& text() const { return text_; }
+  const MatchPositions& matches() const { return matches_; }
+
+  // Efficiently swaps the contents of this snippet with the other.
+  void Swap(Snippet* other);
+
+ private:
+  // The text of the snippet.
+  base::string16 text_;
+
+  // The matches within text_.
+  MatchPositions matches_;
+};
+
+}  // namespace query_parser
+
+#endif  // COMPONENTS_QUERY_PARSER_SNIPPET_H__
diff --git a/components/query_parser/snippet_unittest.cc b/components/query_parser/snippet_unittest.cc
new file mode 100644
index 0000000..bbdf182
--- /dev/null
+++ b/components/query_parser/snippet_unittest.cc
@@ -0,0 +1,255 @@
+// 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.
+
+#include "components/query_parser/snippet.h"
+
+#include <algorithm>
+
+#include "base/strings/string_split.h"
+#include "base/strings/string_util.h"
+#include "base/strings/utf_string_conversions.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace query_parser {
+namespace {
+
+// A sample document to compute snippets of.
+// The \x bits after the first "Google" are UTF-8 of U+2122 TRADE MARK SIGN,
+// and are useful for verifying we don't screw up in UTF-8/UTF-16 conversion.
+const char* kSampleDocument = "Google\xe2\x84\xa2 Terms of Service "
+"Welcome to Google! "
+"1. Your relationship with Google "
+"1.1 Your use of Google's products, software, services and web sites "
+"(referred to collectively as the \"Services\" in this document and excluding "
+"any services provided to you by Google under a separate written agreement) "
+"is subject to the terms of a legal agreement between you and Google. "
+"\"Google\" means Google Inc., whose principal place of business is at 1600 "
+"Amphitheatre Parkway, Mountain View, CA 94043, United States. This document "
+"explains how the agreement is made up, and sets out some of the terms of "
+"that agreement.";
+};
+
+// Thai sample taken from http://www.google.co.th/intl/th/privacy.html
+// TODO(jungshik) : Add more samples (e.g. Hindi) after porting
+// ICU 4.0's character iterator changes to our copy of ICU 3.8 to get
+// grapheme clusters in Indic scripts handled more reasonably.
+const char* kThaiSample = "Google \xE0\xB9\x80\xE0\xB8\x81\xE0\xB9\x87"
+"\xE0\xB8\x9A\xE0\xB8\xA3\xE0\xB8\xA7\xE0\xB8\x9A\xE0\xB8\xA3\xE0\xB8\xA7"
+"\xE0\xB8\xA1 \xE0\xB8\x82\xE0\xB9\x89\xE0\xB8\xAD\xE0\xB8\xA1\xE0\xB8\xB9"
+"\xE0\xB8\xA5\xE0\xB8\xAA\xE0\xB9\x88\xE0\xB8\xA7\xE0\xB8\x99\xE0\xB8\x9A"
+"\xE0\xB8\xB8\xE0\xB8\x84\xE0\xB8\x84\xE0\xB8\xA5 \xE0\xB9\x80\xE0\xB8\xA1"
+"\xE0\xB8\xB7\xE0\xB9\x88\xE0\xB8\xAD\xE0\xB8\x84\xE0\xB8\xB8\xE0\xB8\x93"
+"\xE0\xB8\xA5\xE0\xB8\x87\xE0\xB8\x97\xE0\xB8\xB0\xE0\xB9\x80\xE0\xB8\x9A"
+"\xE0\xB8\xB5\xE0\xB8\xA2\xE0\xB8\x99\xE0\xB9\x80\xE0\xB8\x9E\xE0\xB8\xB7"
+"\xE0\xB9\x88\xE0\xB8\xAD\xE0\xB9\x83\xE0\xB8\x8A\xE0\xB9\x89\xE0\xB8\x9A"
+"\xE0\xB8\xA3\xE0\xB8\xB4\xE0\xB8\x81\xE0\xB8\xB2\xE0\xB8\xA3\xE0\xB8\x82"
+"\xE0\xB8\xAD\xE0\xB8\x87 Google \xE0\xB8\xAB\xE0\xB8\xA3\xE0\xB8\xB7"
+"\xE0\xB8\xAD\xE0\xB9\x83\xE0\xB8\xAB\xE0\xB9\x89\xE0\xB8\x82\xE0\xB9\x89"
+"\xE0\xB8\xAD\xE0\xB8\xA1\xE0\xB8\xB9\xE0\xB8\xA5\xE0\xB8\x94\xE0\xB8\xB1"
+"\xE0\xB8\x87\xE0\xB8\x81\xE0\xB8\xA5\xE0\xB9\x88\xE0\xB8\xB2\xE0\xB8\xA7"
+"\xE0\xB9\x82\xE0\xB8\x94\xE0\xB8\xA2\xE0\xB8\xAA\xE0\xB8\xA1\xE0\xB8\xB1"
+"\xE0\xB8\x84\xE0\xB8\xA3\xE0\xB9\x83\xE0\xB8\x88 \xE0\xB9\x80\xE0\xB8\xA3"
+"\xE0\xB8\xB2\xE0\xB8\xAD\xE0\xB8\xB2\xE0\xB8\x88\xE0\xB8\xA3\xE0\xB8\xA7"
+"\xE0\xB8\xA1\xE0\xB8\x82\xE0\xB9\x89\xE0\xB8\xAD\xE0\xB8\xA1\xE0\xB8\xB9"
+"\xE0\xB8\xA5\xE0\xB8\xAA\xE0\xB9\x88\xE0\xB8\xA7\xE0\xB8\x99\xE0\xB8\x9A"
+"\xE0\xB8\xB8\xE0\xB8\x84\xE0\xB8\x84\xE0\xB8\xA5\xE0\xB8\x97\xE0\xB8\xB5"
+"\xE0\xB9\x88\xE0\xB9\x80\xE0\xB8\x81\xE0\xB9\x87\xE0\xB8\x9A\xE0\xB8\xA3"
+"\xE0\xB8\xA7\xE0\xB8\x9A\xE0\xB8\xA3\xE0\xB8\xA7\xE0\xB8\xA1\xE0\xB8\x88"
+"\xE0\xB8\xB2\xE0\xB8\x81\xE0\xB8\x84\xE0\xB8\xB8\xE0\xB8\x93\xE0\xB9\x80"
+"\xE0\xB8\x82\xE0\xB9\x89\xE0\xB8\xB2\xE0\xB8\x81\xE0\xB8\xB1\xE0\xB8\x9A"
+"\xE0\xB8\x82\xE0\xB9\x89\xE0\xB8\xAD\xE0\xB8\xA1\xE0\xB8\xB9\xE0\xB8\xA5"
+"\xE0\xB8\x88\xE0\xB8\xB2\xE0\xB8\x81\xE0\xB8\x9A\xE0\xB8\xA3\xE0\xB8\xB4"
+"\xE0\xB8\x81\xE0\xB8\xB2\xE0\xB8\xA3\xE0\xB8\xAD\xE0\xB8\xB7\xE0\xB9\x88"
+"\xE0\xB8\x99\xE0\xB8\x82\xE0\xB8\xAD\xE0\xB8\x87 Google \xE0\xB8\xAB"
+"\xE0\xB8\xA3\xE0\xB8\xB7\xE0\xB8\xAD\xE0\xB8\x9A\xE0\xB8\xB8\xE0\xB8\x84"
+"\xE0\xB8\x84\xE0\xB8\xA5\xE0\xB8\x97\xE0\xB8\xB5\xE0\xB9\x88\xE0\xB8\xAA"
+"\xE0\xB8\xB2\xE0\xB8\xA1 \xE0\xB9\x80\xE0\xB8\x9E\xE0\xB8\xB7\xE0\xB9\x88"
+"\xE0\xB8\xAD\xE0\xB9\x83\xE0\xB8\xAB\xE0\xB9\x89\xE0\xB8\x9C\xE0\xB8\xB9"
+"\xE0\xB9\x89\xE0\xB9\x83\xE0\xB8\x8A\xE0\xB9\x89\xE0\xB9\x84\xE0\xB8\x94"
+"\xE0\xB9\x89\xE0\xB8\xA3\xE0\xB8\xB1\xE0\xB8\x9A\xE0\xB8\x9B\xE0\xB8\xA3"
+"\xE0\xB8\xB0\xE0\xB8\xAA\xE0\xB8\x9A\xE0\xB8\x81\xE0\xB8\xB2\xE0\xB8\xA3"
+"\xE0\xB8\x93\xE0\xB9\x8C\xE0\xB8\x97\xE0\xB8\xB5\xE0\xB9\x88\xE0\xB8\x94"
+"\xE0\xB8\xB5\xE0\xB8\x82\xE0\xB8\xB6\xE0\xB9\x89\xE0\xB8\x99 \xE0\xB8\xA3"
+"\xE0\xB8\xA7\xE0\xB8\xA1\xE0\xB8\x97\xE0\xB8\xB1\xE0\xB9\x89\xE0\xB8\x87"
+"\xE0\xB8\x9B\xE0\xB8\xA3\xE0\xB8\xB1\xE0\xB8\x9A\xE0\xB9\x81\xE0\xB8\x95"
+"\xE0\xB9\x88\xE0\xB8\x87\xE0\xB9\x80\xE0\xB8\x99\xE0\xB8\xB7\xE0\xB9\x89"
+"\xE0\xB8\xAD\xE0\xB8\xAB\xE0\xB8\xB2\xE0\xB9\x83\xE0\xB8\xAB\xE0\xB9\x89"
+"\xE0\xB9\x80\xE0\xB8\xAB\xE0\xB8\xA1\xE0\xB8\xB2\xE0\xB8\xB0\xE0\xB8\xAA"
+"\xE0\xB8\xB3\xE0\xB8\xAB\xE0\xB8\xA3\xE0\xB8\xB1\xE0\xB8\x9A\xE0\xB8\x84"
+"\xE0\xB8\xB8\xE0\xB8\x93";
+
+// Comparator for sorting by the first element in a pair.
+bool ComparePair1st(const Snippet::MatchPosition& a,
+                    const Snippet::MatchPosition& b) {
+  return a.first < b.first;
+}
+
+// For testing, we'll compute the match positions manually instead of using
+// sqlite's FTS matching.  BuildSnippet returns the snippet for matching
+// |query| against |document|.  Matches are surrounded by "**".
+base::string16 BuildSnippet(const std::string& document,
+                            const std::string& query) {
+  // This function assumes that |document| does not contain
+  // any character for which lowercasing changes its length. Further,
+  // it's assumed that lowercasing only the ASCII-portion works for
+  // |document|. We need to add more test cases and change this function
+  // to be more generic depending on how we deal with 'folding for match'
+  // in history.
+  const std::string document_folded = StringToLowerASCII(std::string(document));
+
+  std::vector<std::string> query_words;
+  base::SplitString(query, ' ', &query_words);
+
+  // Manually construct match_positions of the document.
+  Snippet::MatchPositions match_positions;
+  match_positions.clear();
+  for (std::vector<std::string>::iterator qw = query_words.begin();
+       qw != query_words.end(); ++qw) {
+    // Insert all instances of this word into match_pairs.
+    size_t ofs = 0;
+    while ((ofs = document_folded.find(*qw, ofs)) != std::string::npos) {
+      match_positions.push_back(std::make_pair(ofs, ofs + qw->size()));
+      ofs += qw->size();
+    }
+  }
+  // Sort match_positions in order of increasing offset.
+  std::sort(match_positions.begin(), match_positions.end(), ComparePair1st);
+
+  // Compute the snippet.
+  Snippet snippet;
+  snippet.ComputeSnippet(match_positions, document);
+
+  // Now "highlight" all matches in the snippet with **.
+  base::string16 star_snippet;
+  Snippet::MatchPositions::const_iterator match;
+  size_t pos = 0;
+  for (match = snippet.matches().begin();
+       match != snippet.matches().end(); ++match) {
+    star_snippet += snippet.text().substr(pos, match->first - pos);
+    star_snippet += base::UTF8ToUTF16("**");
+    star_snippet += snippet.text().substr(match->first,
+                                          match->second - match->first);
+    star_snippet += base::UTF8ToUTF16("**");
+    pos = match->second;
+  }
+  star_snippet += snippet.text().substr(pos);
+
+  return star_snippet;
+}
+
+TEST(Snippets, SimpleQuery) {
+  ASSERT_EQ(" ... eferred to collectively as the \"Services\" in this "
+            "**document** and excluding any services provided to you by "
+            "Goo ...  ... way, Mountain View, CA 94043, United States. This "
+            "**document** explains how the agreement is made up, and sets "
+            "o ... ",
+            base::UTF16ToUTF8(BuildSnippet(kSampleDocument, "document")));
+}
+
+// Test that two words that are near each other don't produce two elided bits.
+TEST(Snippets, NearbyWords) {
+  ASSERT_EQ(" ... lace of business is at 1600 Amphitheatre Parkway, "
+            "**Mountain** **View**, CA 94043, United States. This "
+            "document explains  ... ",
+            base::UTF16ToUTF8(BuildSnippet(kSampleDocument, "mountain view")));
+}
+
+// The above tests already test that we get byte offsets correct, but here's
+// one that gets the "TM" in its snippet.
+TEST(Snippets, UTF8) {
+  ASSERT_EQ(" ... ogle\xe2\x84\xa2 Terms of Service Welcome to Google! "
+            "1. Your **relationship** with Google 1.1 Your use of Google's "
+            "products, so ... ",
+            base::UTF16ToUTF8(BuildSnippet(kSampleDocument, "relationship")));
+}
+
+TEST(Snippets, ThaiUTF8) {
+  // There are 3 instances of '\u0E43\u0E2B\u0E49'
+  // (\xE0\xB9\x83\xE0\xB8\xAB\xE0\xB9\x89) in kThaiSample.
+  // The 1st is more than |kSniipetContext| graphemes away from the
+  // 2nd while the 2nd and 3rd are within that window. However, with
+  // the 2nd match added, the snippet goes over the size limit so that
+  // the snippet ends right before the 3rd match.
+  ASSERT_EQ(" ... "
+            "\xE0\xB8\xA3\xE0\xB8\xA7\xE0\xB8\x9A\xE0\xB8\xA3\xE0\xB8\xA7"
+            "\xE0\xB8\xA1 \xE0\xB8\x82\xE0\xB9\x89\xE0\xB8\xAD\xE0\xB8"
+            "\xA1\xE0\xB8\xB9\xE0\xB8\xA5\xE0\xB8\xAA\xE0\xB9\x88\xE0\xB8"
+            "\xA7\xE0\xB8\x99\xE0\xB8\x9A\xE0\xB8\xB8\xE0\xB8\x84\xE0\xB8"
+            "\x84\xE0\xB8\xA5 \xE0\xB9\x80\xE0\xB8\xA1\xE0\xB8\xB7\xE0"
+            "\xB9\x88\xE0\xB8\xAD\xE0\xB8\x84\xE0\xB8\xB8\xE0\xB8\x93\xE0"
+            "\xB8\xA5\xE0\xB8\x87\xE0\xB8\x97\xE0\xB8\xB0\xE0\xB9\x80\xE0"
+            "\xB8\x9A\xE0\xB8\xB5\xE0\xB8\xA2\xE0\xB8\x99\xE0\xB9\x80\xE0"
+            "\xB8\x9E\xE0\xB8\xB7\xE0\xB9\x88\xE0\xB8\xAD\xE0\xB9\x83\xE0"
+            "\xB8\x8A\xE0\xB9\x89\xE0\xB8\x9A\xE0\xB8\xA3\xE0\xB8\xB4\xE0"
+            "\xB8\x81\xE0\xB8\xB2\xE0\xB8\xA3\xE0\xB8\x82\xE0\xB8\xAD\xE0"
+            "\xB8\x87 Google \xE0\xB8\xAB\xE0\xB8\xA3\xE0\xB8\xB7\xE0\xB8"
+            "\xAD**\xE0\xB9\x83\xE0\xB8\xAB\xE0\xB9\x89**\xE0\xB8\x82\xE0"
+            "\xB9\x89\xE0\xB8\xAD\xE0\xB8\xA1\xE0\xB8\xB9\xE0\xB8\xA5\xE0"
+            "\xB8\x94\xE0\xB8\xB1\xE0\xB8\x87\xE0\xB8\x81\xE0\xB8\xA5\xE0"
+            "\xB9\x88\xE0\xB8\xB2\xE0\xB8\xA7\xE0\xB9\x82\xE0\xB8\x94\xE0"
+            "\xB8\xA2\xE0\xB8\xAA\xE0\xB8\xA1\xE0\xB8\xB1\xE0\xB8\x84\xE0"
+            "\xB8\xA3\xE0\xB9\x83\xE0\xB8\x88 \xE0\xB9\x80\xE0\xB8\xA3"
+            "\xE0\xB8\xB2\xE0\xB8\xAD\xE0\xB8\xB2\xE0\xB8\x88\xE0\xB8\xA3"
+            "\xE0\xB8\xA7\xE0\xB8\xA1\xE0\xB8\x82\xE0\xB9\x89\xE0\xB8\xAD"
+            "\xE0\xB8\xA1\xE0\xB8\xB9\xE0\xB8\xA5\xE0\xB8\xAA\xE0\xB9\x88"
+            "\xE0\xB8\xA7\xE0\xB8\x99\xE0\xB8\x9A\xE0\xB8\xB8\xE0\xB8\x84"
+            "\xE0\xB8\x84\xE0\xB8\xA5\xE0\xB8\x97\xE0\xB8\xB5\xE0\xB9\x88"
+            "\xE0\xB9\x80\xE0\xB8\x81\xE0\xB9\x87\xE0\xB8\x9A\xE0\xB8\xA3"
+            "\xE0\xB8\xA7\xE0\xB8\x9A\xE0\xB8\xA3\xE0\xB8\xA7\xE0\xB8\xA1"
+            "\xE0\xB8\x88\xE0\xB8\xB2\xE0\xB8\x81\xE0\xB8\x84\xE0\xB8\xB8"
+            "\xE0\xB8\x93\xE0\xB9\x80\xE0\xB8\x82\xE0\xB9\x89\xE0\xB8\xB2"
+            "\xE0\xB8\x81\xE0\xB8\xB1\xE0\xB8\x9A ...  ... \xE0\xB8\x82"
+            "\xE0\xB9\x89\xE0\xB8\xAD\xE0\xB8\xA1\xE0\xB8\xB9\xE0\xB8\xA5"
+            "\xE0\xB8\x88\xE0\xB8\xB2\xE0\xB8\x81\xE0\xB8\x9A\xE0\xB8\xA3"
+            "\xE0\xB8\xB4\xE0\xB8\x81\xE0\xB8\xB2\xE0\xB8\xA3\xE0\xB8\xAD"
+            "\xE0\xB8\xB7\xE0\xB9\x88\xE0\xB8\x99\xE0\xB8\x82\xE0\xB8\xAD"
+            "\xE0\xB8\x87 Google \xE0\xB8\xAB\xE0\xB8\xA3\xE0\xB8\xB7\xE0"
+            "\xB8\xAD\xE0\xB8\x9A\xE0\xB8\xB8\xE0\xB8\x84\xE0\xB8\x84\xE0"
+            "\xB8\xA5\xE0\xB8\x97\xE0\xB8\xB5\xE0\xB9\x88\xE0\xB8\xAA\xE0"
+            "\xB8\xB2\xE0\xB8\xA1 \xE0\xB9\x80\xE0\xB8\x9E\xE0\xB8\xB7"
+            "\xE0\xB9\x88\xE0\xB8\xAD**\xE0\xB9\x83\xE0\xB8\xAB\xE0\xB9"
+            "\x89**\xE0\xB8\x9C\xE0\xB8\xB9\xE0\xB9\x89\xE0\xB9\x83\xE0"
+            "\xB8\x8A\xE0\xB9\x89\xE0\xB9\x84\xE0\xB8\x94\xE0\xB9\x89\xE0"
+            "\xB8\xA3\xE0\xB8\xB1\xE0\xB8\x9A\xE0\xB8\x9B\xE0\xB8\xA3\xE0"
+            "\xB8\xB0\xE0\xB8\xAA\xE0\xB8\x9A\xE0\xB8\x81\xE0\xB8\xB2\xE0"
+            "\xB8\xA3\xE0\xB8\x93\xE0\xB9\x8C\xE0\xB8\x97\xE0\xB8\xB5\xE0"
+            "\xB9\x88\xE0\xB8\x94\xE0\xB8\xB5\xE0\xB8\x82\xE0\xB8\xB6\xE0"
+            "\xB9\x89\xE0\xB8\x99 \xE0\xB8\xA3\xE0\xB8\xA7\xE0\xB8\xA1"
+            "\xE0\xB8\x97\xE0\xB8\xB1\xE0\xB9\x89\xE0\xB8\x87\xE0\xB8\x9B"
+            "\xE0\xB8\xA3\xE0\xB8\xB1\xE0\xB8\x9A\xE0\xB9\x81\xE0\xB8\x95"
+            "\xE0\xB9\x88\xE0\xB8\x87\xE0\xB9\x80\xE0\xB8\x99\xE0\xB8\xB7"
+            "\xE0\xB9\x89\xE0\xB8\xAD\xE0\xB8\xAB\xE0\xB8\xB2",
+            base::UTF16ToUTF8(BuildSnippet(kThaiSample,
+                                     "\xE0\xB9\x83\xE0\xB8\xAB\xE0\xB9\x89")));
+}
+
+TEST(Snippets, ExtractMatchPositions) {
+  struct TestData {
+    const std::string offsets_string;
+    const size_t expected_match_count;
+    const size_t expected_matches[10];
+  } data[] = {
+    { "0 0 1 2 0 0 4 1 0 0 1 5",            1,     { 1, 6 } },
+    { "0 0 1 4 0 0 2 1",                    1,     { 1, 5 } },
+    { "0 0 4 1 0 0 2 1",                    2,     { 2, 3, 4, 5 } },
+    { "0 0 0 1",                            1,     { 0, 1 } },
+    { "0 0 0 1 0 0 0 2",                    1,     { 0, 2 } },
+    { "0 0 1 1 0 0 1 2",                    1,     { 1, 3 } },
+    { "0 0 1 2 0 0 4 3 0 0 3 1",            1,     { 1, 7 } },
+    { "0 0 1 4 0 0 2 5",                    1,     { 1, 7 } },
+    { "0 0 1 2 0 0 1 1",                    1,     { 1, 3 } },
+    { "0 0 1 1 0 0 5 2 0 0 10 1 0 0 3 10",  2,     { 1, 2, 3, 13 } },
+  };
+  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(data); ++i) {
+    Snippet::MatchPositions matches;
+    Snippet::ExtractMatchPositions(data[i].offsets_string, "0", &matches);
+    EXPECT_EQ(data[i].expected_match_count, matches.size());
+    for (size_t j = 0; j < data[i].expected_match_count; ++j) {
+      EXPECT_EQ(data[i].expected_matches[2 * j], matches[j].first);
+      EXPECT_EQ(data[i].expected_matches[2 * j + 1], matches[j].second);
+    }
+  }
+}
+
+}  // namespace query_parser
diff --git a/components/resources/BUILD.gn b/components/resources/BUILD.gn
new file mode 100644
index 0000000..2208865
--- /dev/null
+++ b/components/resources/BUILD.gn
@@ -0,0 +1,9 @@
+# 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("//tools/grit/grit_rule.gni")
+
+grit("components_resources") {
+  source = "components_resources.grd"
+}
diff --git a/components/sessions/serialized_navigation_entry.cc b/components/sessions/serialized_navigation_entry.cc
index 45f3cf0..5b5a8c4 100644
--- a/components/sessions/serialized_navigation_entry.cc
+++ b/components/sessions/serialized_navigation_entry.cc
@@ -57,6 +57,7 @@
   if (entry.GetFavicon().valid)
     navigation.favicon_url_ = entry.GetFavicon().url;
   navigation.http_status_code_ = entry.GetHttpStatusCode();
+  navigation.redirect_chain_ = entry.GetRedirectChain();
 
   return navigation;
 }
@@ -363,6 +364,7 @@
   entry->SetTimestamp(timestamp_);
   entry->SetExtraData(kSearchTermsKey, search_terms_);
   entry->SetHttpStatusCode(http_status_code_);
+  entry->SetRedirectChain(redirect_chain_);
 
   // These fields should have default values.
   DCHECK_EQ(STATE_INVALID, blocked_state_);
@@ -477,6 +479,22 @@
     sync_data.add_content_pack_categories(*it);
   }
 
+  // Copy all redirect chain entries except the last URL (which should match
+  // the virtual_url).
+  if (redirect_chain_.size() > 1) {  // Single entry chains have no redirection.
+    size_t last_entry = redirect_chain_.size() - 1;
+    for (size_t i = 0; i < last_entry; i++) {
+      sync_pb::NavigationRedirect* navigation_redirect =
+          sync_data.add_navigation_redirect();
+      navigation_redirect->set_url(redirect_chain_[i].spec());
+    }
+    // If the last URL didn't match the virtual_url, record it separately.
+    if (sync_data.virtual_url() != redirect_chain_[last_entry].spec()) {
+      sync_data.set_last_navigation_redirect_url(
+          redirect_chain_[last_entry].spec());
+    }
+  }
+
   sync_data.set_is_restored(is_restored_);
 
   return sync_data;
diff --git a/components/sessions/serialized_navigation_entry.h b/components/sessions/serialized_navigation_entry.h
index 859d39f..0582c7e 100644
--- a/components/sessions/serialized_navigation_entry.h
+++ b/components/sessions/serialized_navigation_entry.h
@@ -122,6 +122,7 @@
       const std::set<std::string>& content_pack_categories) {
     content_pack_categories_ = content_pack_categories;
   }
+  const std::vector<GURL>& redirect_chain() const { return redirect_chain_; }
 
   // Converts a set of SerializedNavigationEntrys into a list of
   // NavigationEntrys with sequential page IDs and the given context. The caller
@@ -156,6 +157,7 @@
   GURL favicon_url_;
   int http_status_code_;
   bool is_restored_;    // Not persisted.
+  std::vector<GURL> redirect_chain_;  // Not persisted.
 
   // Additional information.
   BlockedState blocked_state_;
diff --git a/components/sessions/serialized_navigation_entry_unittest.cc b/components/sessions/serialized_navigation_entry_unittest.cc
index bfc51c0..2dcf3ad 100644
--- a/components/sessions/serialized_navigation_entry_unittest.cc
+++ b/components/sessions/serialized_navigation_entry_unittest.cc
@@ -49,6 +49,9 @@
 const base::string16 kSearchTerms = base::ASCIIToUTF16("my search terms");
 const GURL kFaviconURL("http://virtual-url.com/favicon.ico");
 const int kHttpStatusCode = 404;
+const GURL kRedirectURL0("http://go/redirect0");
+const GURL kRedirectURL1("http://go/redirect1");
+const GURL kOtherURL("http://other.com");
 
 const int kPageID = 10;
 
@@ -70,6 +73,11 @@
   navigation_entry->GetFavicon().valid = true;
   navigation_entry->GetFavicon().url = kFaviconURL;
   navigation_entry->SetHttpStatusCode(kHttpStatusCode);
+  std::vector<GURL> redirect_chain;
+  redirect_chain.push_back(kRedirectURL0);
+  redirect_chain.push_back(kRedirectURL1);
+  redirect_chain.push_back(kVirtualURL);
+  navigation_entry->SetRedirectChain(redirect_chain);
   return navigation_entry.Pass();
 }
 
@@ -90,6 +98,7 @@
   sync_data.set_search_terms(base::UTF16ToUTF8(kSearchTerms));
   sync_data.set_favicon_url(kFaviconURL.spec());
   sync_data.set_http_status_code(kHttpStatusCode);
+  // The redirect chain only syncs one way.
   return sync_data;
 }
 
@@ -113,6 +122,7 @@
   EXPECT_TRUE(navigation.search_terms().empty());
   EXPECT_FALSE(navigation.favicon_url().is_valid());
   EXPECT_EQ(0, navigation.http_status_code());
+  EXPECT_EQ(0U, navigation.redirect_chain().size());
 }
 
 // Create a SerializedNavigationEntry from a NavigationEntry.  All its fields
@@ -140,6 +150,10 @@
   EXPECT_EQ(kTimestamp, navigation.timestamp());
   EXPECT_EQ(kFaviconURL, navigation.favicon_url());
   EXPECT_EQ(kHttpStatusCode, navigation.http_status_code());
+  ASSERT_EQ(3U, navigation.redirect_chain().size());
+  EXPECT_EQ(kRedirectURL0, navigation.redirect_chain()[0]);
+  EXPECT_EQ(kRedirectURL1, navigation.redirect_chain()[1]);
+  EXPECT_EQ(kVirtualURL, navigation.redirect_chain()[2]);
 }
 
 // Create a SerializedNavigationEntry from a sync_pb::TabNavigation.  All its
@@ -167,6 +181,7 @@
   EXPECT_EQ(kSearchTerms, navigation.search_terms());
   EXPECT_EQ(kFaviconURL, navigation.favicon_url());
   EXPECT_EQ(kHttpStatusCode, navigation.http_status_code());
+  // The redirect chain only syncs one way.
 }
 
 // Create a SerializedNavigationEntry, pickle it, then create another one by
@@ -200,6 +215,7 @@
   EXPECT_EQ(kTimestamp, new_navigation.timestamp());
   EXPECT_EQ(kSearchTerms, new_navigation.search_terms());
   EXPECT_EQ(kHttpStatusCode, new_navigation.http_status_code());
+  EXPECT_EQ(0U, new_navigation.redirect_chain().size());
 }
 
 // Create a NavigationEntry, then create another one by converting to
@@ -235,6 +251,10 @@
   new_navigation_entry->GetExtraData(kSearchTermsKey, &search_terms);
   EXPECT_EQ(kSearchTerms, search_terms);
   EXPECT_EQ(kHttpStatusCode, new_navigation_entry->GetHttpStatusCode());
+  ASSERT_EQ(3U, new_navigation_entry->GetRedirectChain().size());
+  EXPECT_EQ(kRedirectURL0, new_navigation_entry->GetRedirectChain()[0]);
+  EXPECT_EQ(kRedirectURL1, new_navigation_entry->GetRedirectChain()[1]);
+  EXPECT_EQ(kVirtualURL, new_navigation_entry->GetRedirectChain()[2]);
 }
 
 // Create a NavigationEntry, convert it to a SerializedNavigationEntry, then
@@ -261,6 +281,41 @@
   EXPECT_EQ(kTimestamp.ToInternalValue(), sync_data.global_id());
   EXPECT_EQ(kFaviconURL.spec(), sync_data.favicon_url());
   EXPECT_EQ(kHttpStatusCode, sync_data.http_status_code());
+  // The proto navigation redirects don't include the final chain entry
+  // (because it didn't redirect) so the lengths should differ by 1.
+  ASSERT_EQ(3, sync_data.navigation_redirect_size() + 1);
+  EXPECT_EQ(navigation_entry->GetRedirectChain()[0].spec(),
+            sync_data.navigation_redirect(0).url());
+  EXPECT_EQ(navigation_entry->GetRedirectChain()[1].spec(),
+            sync_data.navigation_redirect(1).url());
+  EXPECT_FALSE(sync_data.has_last_navigation_redirect_url());
+}
+
+// Test that the last_navigation_redirect_url is set when needed.
+// This test is just like the above, but with a different virtual_url.
+// Create a NavigationEntry, convert it to a SerializedNavigationEntry, then
+// create a sync protocol buffer from it.  The protocol buffer should
+// have a last_navigation_redirect_url.
+TEST(SerializedNavigationEntryTest, LastNavigationRedirectUrl) {
+  const scoped_ptr<content::NavigationEntry> navigation_entry(
+      MakeNavigationEntryForTest());
+
+  navigation_entry->SetVirtualURL(kOtherURL);
+
+  const SerializedNavigationEntry& navigation =
+      SerializedNavigationEntry::FromNavigationEntry(kIndex, *navigation_entry);
+
+  const sync_pb::TabNavigation sync_data = navigation.ToSyncData();
+
+  EXPECT_TRUE(sync_data.has_last_navigation_redirect_url());
+  EXPECT_EQ(kVirtualURL.spec(), sync_data.last_navigation_redirect_url());
+
+  // The redirect chain should be the same as in the above test.
+  ASSERT_EQ(3, sync_data.navigation_redirect_size() + 1);
+  EXPECT_EQ(navigation_entry->GetRedirectChain()[0].spec(),
+            sync_data.navigation_redirect(0).url());
+  EXPECT_EQ(navigation_entry->GetRedirectChain()[1].spec(),
+            sync_data.navigation_redirect(1).url());
 }
 
 // Ensure all transition types and qualifiers are converted to/from the sync
diff --git a/components/signin.gypi b/components/signin.gypi
index 5473b57..56e2a63 100644
--- a/components/signin.gypi
+++ b/components/signin.gypi
@@ -15,6 +15,8 @@
         'signin/core/common/signin_pref_names.h',
         'signin/core/common/signin_switches.cc',
         'signin/core/common/signin_switches.h',
+        'signin/core/common/profile_management_switches.cc',
+        'signin/core/common/profile_management_switches.h',
       ],
     },
     {
@@ -81,7 +83,6 @@
           ],
         }],
       ],
-      
       # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
       'msvs_disabled_warnings': [4267, ],
     },
diff --git a/components/signin/core/browser/about_signin_internals.cc b/components/signin/core/browser/about_signin_internals.cc
index 5d2d0f9..8fd0386 100644
--- a/components/signin/core/browser/about_signin_internals.cc
+++ b/components/signin/core/browser/about_signin_internals.cc
@@ -4,6 +4,7 @@
 
 #include "components/signin/core/browser/about_signin_internals.h"
 
+#include "base/command_line.h"
 #include "base/debug/trace_event.h"
 #include "base/hash.h"
 #include "base/i18n/time_formatting.h"
@@ -15,6 +16,8 @@
 #include "components/signin/core/browser/signin_client.h"
 #include "components/signin/core/browser/signin_internals_util.h"
 #include "components/signin/core/browser/signin_manager.h"
+#include "components/signin/core/common/profile_management_switches.h"
+#include "components/signin/core/common/signin_switches.h"
 #include "google_apis/gaia/gaia_constants.h"
 
 using base::Time;
@@ -345,6 +348,16 @@
           : "Signed In";
   AddSectionEntry(basic_info, "Chrome Version", product_version);
   AddSectionEntry(basic_info, "Signin Status", signin_status_string);
+  AddSectionEntry(basic_info, "Web Based Signin Enabled?",
+      switches::IsEnableWebBasedSignin() == true ? "True" : "False");
+  AddSectionEntry(basic_info, "New Profile Management Enabled?",
+      switches::IsNewProfileManagement() == true ? "True" : "False");
+  AddSectionEntry(basic_info, "New Avatar Menu Enabled?",
+      switches::IsNewAvatarMenu() == true ? "True" : "False");
+  bool new_avatar_menu_flag =
+      CommandLine::ForCurrentProcess()->HasSwitch(switches::kNewAvatarMenu);
+  AddSectionEntry(basic_info, "New Avatar Menu Flag Set?",
+      new_avatar_menu_flag ? "True" : "False");
 
   // Only add username.  SID and LSID have moved to tokens section.
   const std::string field =
diff --git a/components/signin/core/common/profile_management_switches.cc b/components/signin/core/common/profile_management_switches.cc
new file mode 100644
index 0000000..176aab2
--- /dev/null
+++ b/components/signin/core/common/profile_management_switches.cc
@@ -0,0 +1,76 @@
+// 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.
+
+#include "components/signin/core/common/profile_management_switches.h"
+
+#include "base/command_line.h"
+#include "base/metrics/field_trial.h"
+#include "components/signin/core/common/signin_switches.h"
+
+namespace {
+
+const char kNewProfileManagementFieldTrialName[] = "NewProfileManagement";
+
+bool CheckProfileManagementFlag(std::string command_switch, bool active_state) {
+  // Individiual flag settings take precedence.
+  if (CommandLine::ForCurrentProcess()->HasSwitch(command_switch)) {
+    return true;
+  }
+
+  // --new-profile-management flag always affects all switches.
+  if (CommandLine::ForCurrentProcess()->HasSwitch(
+        switches::kNewProfileManagement)) {
+    return active_state;
+  }
+
+  // NewProfileManagement experiment acts like above flag.
+  std::string trial_type =
+      base::FieldTrialList::FindFullName(kNewProfileManagementFieldTrialName);
+  if (!trial_type.empty()) {
+    if (trial_type == "Enabled")
+      return active_state;
+    if (trial_type == "Disabled")
+      return !active_state;
+  }
+
+  return false;
+}
+
+}  // namespace
+
+namespace switches {
+
+bool IsEnableWebBasedSignin() {
+  return CheckProfileManagementFlag(switches::kEnableWebBasedSignin, false);
+}
+
+bool IsFastUserSwitching() {
+  bool use_mirror_promo_menu =
+      CommandLine::ForCurrentProcess()->HasSwitch(switches::kNewAvatarMenu) &&
+      !IsNewProfileManagement();
+  return CommandLine::ForCurrentProcess()->HasSwitch(
+      switches::kFastUserSwitching) || use_mirror_promo_menu;
+}
+
+bool IsGoogleProfileInfo() {
+  return CheckProfileManagementFlag(switches::kGoogleProfileInfo, true);
+}
+
+bool IsNewAvatarMenu() {
+  bool is_new_avatar_menu =
+      CommandLine::ForCurrentProcess()->HasSwitch(switches::kNewAvatarMenu);
+  return is_new_avatar_menu || IsNewProfileManagement();
+}
+
+bool IsNewProfileManagement() {
+  return CheckProfileManagementFlag(switches::kNewProfileManagement, true);
+}
+
+bool IsNewProfileManagementPreviewEnabled() {
+  bool is_new_avatar_menu =
+      CommandLine::ForCurrentProcess()->HasSwitch(switches::kNewAvatarMenu);
+  return is_new_avatar_menu && IsNewProfileManagement();
+}
+
+}  // namespace switches
diff --git a/components/signin/core/common/profile_management_switches.h b/components/signin/core/common/profile_management_switches.h
new file mode 100644
index 0000000..f4fa439
--- /dev/null
+++ b/components/signin/core/common/profile_management_switches.h
@@ -0,0 +1,36 @@
+// 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.
+
+// These are functions to access various profile-management flags but with
+// possible overrides from Experiements.  This is done inside chrome/common
+// because it is accessed by files through the chrome/ directory tree.
+
+#ifndef CHROME_COMMON_PROFILE_MANAGEMENT_SWITCHES_H_
+#define CHROME_COMMON_PROFILE_MANAGEMENT_SWITCHES_H_
+
+namespace switches {
+
+// Enables the web-based sign in flow on Chrome desktop.
+bool IsEnableWebBasedSignin();
+
+// Checks whether the flag for fast user switching is enabled.
+bool IsFastUserSwitching();
+
+// Enables using GAIA information to populate profile name and icon.
+bool IsGoogleProfileInfo();
+
+// Whether the new avatar menu is enabled, either because new profile management
+// is enabled or because the new profile management preview UI is enabled.
+bool IsNewAvatarMenu();
+
+// Use new profile management system, including profile sign-out and new
+// choosers.
+bool IsNewProfileManagement();
+
+// Whether the new profile management preview has been enabled.
+bool IsNewProfileManagementPreviewEnabled();
+
+}  // namespace switches
+
+#endif  // CHROME_COMMON_PROFILE_MANAGEMENT_SWITCHES_H_
diff --git a/components/signin/core/common/signin_switches.cc b/components/signin/core/common/signin_switches.cc
index a6d5b03..2154245 100644
--- a/components/signin/core/common/signin_switches.cc
+++ b/components/signin/core/common/signin_switches.cc
@@ -10,4 +10,25 @@
 // expiration of credentials during testing.
 const char kClearTokenService[] = "clear-token-service";
 
+// Enables the pure web-based flow for sign in on first run/NTP/wrench menu/
+// settings page.
+const char kEnableWebBasedSignin[]            = "enable-web-based-signin";
+
+// Allows displaying the list of existing profiles in the avatar bubble for
+// fast switching between profiles.
+const char kFastUserSwitching[]             = "fast-user-switching";
+
+// Enables using GAIA information to populate profile name and icon.
+const char kGoogleProfileInfo[]             = "google-profile-info";
+
+// Use new avatar menu. When combined with new-profile-management, it simply
+// shows the new profile management avatar menu. Otherwise it shows a redesigned
+// avatar menu with the same functionality as the old one, plus a tutorial card
+// at the top prompting the user to try out the new profile management UI.
+const char kNewAvatarMenu[]                 = "new-avatar-menu";
+
+// Use new profile management system, including profile sign-out and new
+// choosers.
+const char kNewProfileManagement[]          = "new-profile-management";
+
 }  // namespace switches
diff --git a/components/signin/core/common/signin_switches.h b/components/signin/core/common/signin_switches.h
index 30bd8d3..d7dbd8a 100644
--- a/components/signin/core/common/signin_switches.h
+++ b/components/signin/core/common/signin_switches.h
@@ -10,6 +10,11 @@
 // All switches in alphabetical order. The switches should be documented
 // alongside the definition of their values in the .cc file.
 extern const char kClearTokenService[];
+extern const char kEnableWebBasedSignin[];
+extern const char kFastUserSwitching[];
+extern const char kGoogleProfileInfo[];
+extern const char kNewAvatarMenu[];
+extern const char kNewProfileManagement[];
 
 }  // namespace switches
 
diff --git a/components/sync_driver.gypi b/components/sync_driver.gypi
index 28a3b3d..364274d 100644
--- a/components/sync_driver.gypi
+++ b/components/sync_driver.gypi
@@ -18,6 +18,8 @@
       'sources': [
         'sync_driver/backend_data_type_configurer.cc',
         'sync_driver/backend_data_type_configurer.h',
+        'sync_driver/change_processor.cc',
+        'sync_driver/change_processor.h',
         'sync_driver/data_type_controller.cc',
         'sync_driver/data_type_controller.h',
         'sync_driver/data_type_encryption_handler.cc',
@@ -28,6 +30,8 @@
         'sync_driver/data_type_manager_observer.h',
         'sync_driver/failed_data_types_handler.cc',
         'sync_driver/failed_data_types_handler.h',
+        'sync_driver/generic_change_processor.cc',
+        'sync_driver/generic_change_processor.h',
         'sync_driver/model_association_manager.cc',
         'sync_driver/model_association_manager.h',
         'sync_driver/model_associator.h',
@@ -35,6 +39,7 @@
         'sync_driver/pref_names.h',
         'sync_driver/proxy_data_type_controller.cc',
         'sync_driver/proxy_data_type_controller.h',
+        'sync_driver/sync_api_component_factory.h',
         'sync_driver/sync_frontend.cc',
         'sync_driver/sync_frontend.h',
         'sync_driver/sync_prefs.cc',
@@ -51,6 +56,7 @@
         'sync_driver',
         '../base/base.gyp:base',
         '../sync/sync.gyp:sync',
+        '../sync/sync.gyp:test_support_sync_internal_api',
         '../testing/gmock.gyp:gmock',
         '../testing/gtest.gyp:gtest',
       ],
@@ -58,6 +64,8 @@
         '..',
       ],
       'sources': [
+        'sync_driver/change_processor_mock.cc',
+        'sync_driver/change_processor_mock.h',
         'sync_driver/data_type_controller_mock.cc',
         'sync_driver/data_type_controller_mock.h',
         'sync_driver/data_type_error_handler_mock.cc',
@@ -66,6 +74,8 @@
         'sync_driver/data_type_manager_mock.h',
         'sync_driver/fake_data_type_controller.cc',
         'sync_driver/fake_data_type_controller.h',
+        'sync_driver/fake_generic_change_processor.cc',
+        'sync_driver/fake_generic_change_processor.h',
         'sync_driver/model_associator_mock.cc',
         'sync_driver/model_associator_mock.h',
       ],
diff --git a/components/sync_driver/OWNERS b/components/sync_driver/OWNERS
index a027317..683c334 100644
--- a/components/sync_driver/OWNERS
+++ b/components/sync_driver/OWNERS
@@ -2,3 +2,4 @@
 rlarocque@chromium.org
 tim@chromium.org
 zea@chromium.org
+pavely@chromium.org
diff --git a/components/sync_driver/change_processor.cc b/components/sync_driver/change_processor.cc
new file mode 100644
index 0000000..872851e
--- /dev/null
+++ b/components/sync_driver/change_processor.cc
@@ -0,0 +1,33 @@
+// 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.
+
+#include "components/sync_driver/change_processor.h"
+
+namespace browser_sync {
+
+ChangeProcessor::ChangeProcessor(DataTypeErrorHandler* error_handler)
+    : error_handler_(error_handler),
+      share_handle_(NULL) {}
+
+ChangeProcessor::~ChangeProcessor() {
+}
+
+void ChangeProcessor::Start(syncer::UserShare* share_handle) {
+  DCHECK(!share_handle_);
+  share_handle_ = share_handle;
+  StartImpl();
+}
+
+// Not implemented by default.
+void ChangeProcessor::CommitChangesFromSyncModel() {}
+
+DataTypeErrorHandler* ChangeProcessor::error_handler() const {
+  return error_handler_;
+}
+
+syncer::UserShare* ChangeProcessor::share_handle() const {
+  return share_handle_;
+}
+
+}  // namespace browser_sync
diff --git a/components/sync_driver/change_processor.h b/components/sync_driver/change_processor.h
new file mode 100644
index 0000000..efefea9
--- /dev/null
+++ b/components/sync_driver/change_processor.h
@@ -0,0 +1,88 @@
+// 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.
+
+#ifndef COMPONENTS_SYNC_DRIVER_CHANGE_PROCESSOR_H_
+#define COMPONENTS_SYNC_DRIVER_CHANGE_PROCESSOR_H_
+
+#include "components/sync_driver/data_type_error_handler.h"
+#include "sync/internal_api/public/base_transaction.h"
+#include "sync/internal_api/public/change_record.h"
+#include "sync/internal_api/public/user_share.h"
+
+namespace syncer {
+class UnrecoverableErrorHandler;
+}  // namespace syncer
+
+namespace browser_sync {
+
+class ModelAssociator;
+
+// An interface used to apply changes from the sync model to the browser's
+// native model.  This does not currently distinguish between model data types.
+class ChangeProcessor {
+ public:
+  explicit ChangeProcessor(DataTypeErrorHandler* error_handler);
+  virtual ~ChangeProcessor();
+
+  // Call when the processor should accept changes from either provided model
+  // and apply them to the other.  Both the native model and sync_api are
+  // expected to be initialized and loaded.  You must have set a valid
+  // ModelAssociator and UnrecoverableErrorHandler before using this method, and
+  // the two models should be associated w.r.t the ModelAssociator provided.
+  void Start(syncer::UserShare* share_handle);
+
+  // Changes have been applied to the backend model and are ready to be
+  // applied to the frontend model.
+  virtual void ApplyChangesFromSyncModel(
+      const syncer::BaseTransaction* trans,
+      int64 model_version,
+      const syncer::ImmutableChangeRecordList& changes) = 0;
+
+  // The changes found in ApplyChangesFromSyncModel may be too slow to be
+  // performed while holding a [Read/Write]Transaction lock or may interact
+  // with another thread, which might itself be waiting on the transaction lock,
+  // putting us at risk of deadlock.
+  // This function is called once the transactional lock is released and it is
+  // safe to perform inter-thread or slow I/O operations. Note that not all
+  // datatypes need this, so we provide an empty default version.
+  virtual void CommitChangesFromSyncModel();
+
+  // This ensures that startobserving gets called after stopobserving even
+  // if there is an early return in the function.
+  template <class T>
+  class ScopedStopObserving {
+   public:
+    explicit ScopedStopObserving(T* processor)
+        : processor_(processor) {
+      processor_->StopObserving();
+    }
+    ~ScopedStopObserving() {
+      processor_->StartObserving();
+    }
+
+   private:
+    ScopedStopObserving() {}
+    T* processor_;
+  };
+
+ protected:
+  // These methods are invoked by Start() and Stop() to do
+  // implementation-specific work.
+  virtual void StartImpl() = 0;
+
+  DataTypeErrorHandler* error_handler() const;
+  virtual syncer::UserShare* share_handle() const;
+
+ private:
+  DataTypeErrorHandler* error_handler_;  // Guaranteed to outlive us.
+
+  // The sync model we are processing changes from.
+  syncer::UserShare* share_handle_;
+
+  DISALLOW_COPY_AND_ASSIGN(ChangeProcessor);
+};
+
+}  // namespace browser_sync
+
+#endif  // COMPONENTS_SYNC_DRIVER_CHANGE_PROCESSOR_H_
diff --git a/components/sync_driver/change_processor_mock.cc b/components/sync_driver/change_processor_mock.cc
new file mode 100644
index 0000000..a3b84c5
--- /dev/null
+++ b/components/sync_driver/change_processor_mock.cc
@@ -0,0 +1,16 @@
+// 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.
+
+#include "components/sync_driver/change_processor_mock.h"
+
+#include "base/compiler_specific.h"
+
+namespace browser_sync {
+
+ChangeProcessorMock::ChangeProcessorMock()
+    : ChangeProcessor(this) {}
+
+ChangeProcessorMock::~ChangeProcessorMock() {}
+
+}  // namespace browser_sync
diff --git a/components/sync_driver/change_processor_mock.h b/components/sync_driver/change_processor_mock.h
new file mode 100644
index 0000000..7e064a8
--- /dev/null
+++ b/components/sync_driver/change_processor_mock.h
@@ -0,0 +1,40 @@
+// 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.
+
+#ifndef COMPONENTS_SYNC_DRIVER_CHANGE_PROCESSOR_MOCK_H_
+#define COMPONENTS_SYNC_DRIVER_CHANGE_PROCESSOR_MOCK_H_
+
+#include "components/sync_driver/change_processor.h"
+#include "sync/internal_api/public/base/model_type.h"
+#include "sync/internal_api/public/util/unrecoverable_error_handler.h"
+#include "testing/gmock/include/gmock/gmock.h"
+
+namespace browser_sync {
+
+class ChangeProcessorMock
+    : public ChangeProcessor, public DataTypeErrorHandler{
+ public:
+  ChangeProcessorMock();
+  virtual ~ChangeProcessorMock();
+  MOCK_METHOD3(ApplyChangesFromSyncModel,
+               void(const syncer::BaseTransaction*, int64,
+                    const syncer::ImmutableChangeRecordList&));
+  MOCK_METHOD0(CommitChangesFromSyncModel, void());
+  MOCK_METHOD0(StartImpl, void());
+  MOCK_CONST_METHOD0(IsRunning, bool());
+  MOCK_METHOD2(OnUnrecoverableError, void(const tracked_objects::Location&,
+                                          const std::string&));
+  MOCK_METHOD2(OnSingleDatatypeUnrecoverableError,
+                     void(const tracked_objects::Location&,
+                          const std::string&));
+  MOCK_METHOD3(CreateAndUploadError,
+                   syncer::SyncError(const tracked_objects::Location&,
+                             const std::string&,
+                             syncer::ModelType));
+
+};
+
+}  // namespace browser_sync
+
+#endif  // COMPONENTS_SYNC_DRIVER_CHANGE_PROCESSOR_MOCK_H_
diff --git a/components/sync_driver/fake_generic_change_processor.cc b/components/sync_driver/fake_generic_change_processor.cc
new file mode 100644
index 0000000..8f7aff2
--- /dev/null
+++ b/components/sync_driver/fake_generic_change_processor.cc
@@ -0,0 +1,79 @@
+// 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.
+
+#include "components/sync_driver/fake_generic_change_processor.h"
+
+#include "base/location.h"
+#include "base/memory/weak_ptr.h"
+#include "sync/api/attachments/fake_attachment_service.h"
+#include "sync/api/syncable_service.h"
+
+namespace browser_sync {
+
+FakeGenericChangeProcessor::FakeGenericChangeProcessor()
+    : GenericChangeProcessor(NULL,
+                             base::WeakPtr<syncer::SyncableService>(),
+                             base::WeakPtr<syncer::SyncMergeResult>(),
+                             NULL,
+                             syncer::FakeAttachmentService::CreateForTest()),
+      sync_model_has_user_created_nodes_(true),
+      sync_model_has_user_created_nodes_success_(true),
+      crypto_ready_if_necessary_(true) {}
+
+FakeGenericChangeProcessor::~FakeGenericChangeProcessor() {}
+
+void FakeGenericChangeProcessor::set_process_sync_changes_error(
+    const syncer::SyncError& error) {
+  process_sync_changes_error_ = error;
+}
+void FakeGenericChangeProcessor::set_get_sync_data_for_type_error(
+    const syncer::SyncError& error) {
+  get_sync_data_for_type_error_ = error;
+}
+void FakeGenericChangeProcessor::set_sync_model_has_user_created_nodes(
+    bool has_nodes) {
+  sync_model_has_user_created_nodes_ = has_nodes;
+}
+void FakeGenericChangeProcessor::set_sync_model_has_user_created_nodes_success(
+    bool success) {
+  sync_model_has_user_created_nodes_success_ = success;
+}
+void FakeGenericChangeProcessor::set_crypto_ready_if_necessary(
+    bool crypto_ready) {
+  crypto_ready_if_necessary_ = crypto_ready;
+}
+
+syncer::SyncError FakeGenericChangeProcessor::ProcessSyncChanges(
+    const tracked_objects::Location& from_here,
+    const syncer::SyncChangeList& change_list) {
+  return process_sync_changes_error_;
+}
+
+syncer::SyncError FakeGenericChangeProcessor::GetAllSyncDataReturnError(
+    syncer::ModelType type, syncer::SyncDataList* current_sync_data) const {
+  return get_sync_data_for_type_error_;
+}
+
+bool FakeGenericChangeProcessor::GetDataTypeContext(
+    syncer::ModelType type,
+    std::string* context) const {
+  return false;
+}
+
+int FakeGenericChangeProcessor::GetSyncCountForType(syncer::ModelType type) {
+  return 0;
+}
+
+bool FakeGenericChangeProcessor::SyncModelHasUserCreatedNodes(
+    syncer::ModelType type, bool* has_nodes) {
+  *has_nodes = sync_model_has_user_created_nodes_;
+  return sync_model_has_user_created_nodes_success_;
+}
+
+bool FakeGenericChangeProcessor::CryptoReadyIfNecessary(
+    syncer::ModelType type) {
+  return crypto_ready_if_necessary_;
+}
+
+}  // namespace browser_sync
diff --git a/components/sync_driver/fake_generic_change_processor.h b/components/sync_driver/fake_generic_change_processor.h
new file mode 100644
index 0000000..ae8117f
--- /dev/null
+++ b/components/sync_driver/fake_generic_change_processor.h
@@ -0,0 +1,51 @@
+// 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.
+
+#ifndef COMPONENTS_SYNC_DRIVER_FAKE_GENERIC_CHANGE_PROCESSOR_H_
+#define COMPONENTS_SYNC_DRIVER_FAKE_GENERIC_CHANGE_PROCESSOR_H_
+
+#include "components/sync_driver/generic_change_processor.h"
+
+#include "sync/api/sync_error.h"
+
+namespace browser_sync {
+
+// A fake GenericChangeProcessor that can return arbitrary values.
+class FakeGenericChangeProcessor : public GenericChangeProcessor {
+ public:
+  FakeGenericChangeProcessor();
+  virtual ~FakeGenericChangeProcessor();
+
+  // Setters for GenericChangeProcessor implementation results.
+  void set_process_sync_changes_error(const syncer::SyncError& error);
+  void set_get_sync_data_for_type_error(const syncer::SyncError& error);
+  void set_sync_model_has_user_created_nodes(bool has_nodes);
+  void set_sync_model_has_user_created_nodes_success(bool success);
+  void set_crypto_ready_if_necessary(bool crypto_ready);
+
+  // GenericChangeProcessor implementations.
+  virtual syncer::SyncError ProcessSyncChanges(
+      const tracked_objects::Location& from_here,
+      const syncer::SyncChangeList& change_list) OVERRIDE;
+  virtual syncer::SyncError GetAllSyncDataReturnError(
+      syncer::ModelType type,
+      syncer::SyncDataList* data) const OVERRIDE;
+  virtual bool GetDataTypeContext(syncer::ModelType type,
+                                  std::string* context) const OVERRIDE;
+  virtual int GetSyncCountForType(syncer::ModelType type) OVERRIDE;
+  virtual bool SyncModelHasUserCreatedNodes(syncer::ModelType type,
+                                            bool* has_nodes) OVERRIDE;
+  virtual bool CryptoReadyIfNecessary(syncer::ModelType type) OVERRIDE;
+
+ private:
+  syncer::SyncError process_sync_changes_error_;
+  syncer::SyncError get_sync_data_for_type_error_;
+  bool sync_model_has_user_created_nodes_;
+  bool sync_model_has_user_created_nodes_success_;
+  bool crypto_ready_if_necessary_;
+};
+
+}  // namespace browser_sync
+
+#endif  // COMPONENTS_SYNC_DRIVER_FAKE_GENERIC_CHANGE_PROCESSOR_H_
diff --git a/components/sync_driver/generic_change_processor.cc b/components/sync_driver/generic_change_processor.cc
new file mode 100644
index 0000000..adc4c90
--- /dev/null
+++ b/components/sync_driver/generic_change_processor.cc
@@ -0,0 +1,664 @@
+// 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.
+
+#include "components/sync_driver/generic_change_processor.h"
+
+#include "base/location.h"
+#include "base/strings/string_number_conversions.h"
+#include "base/strings/utf_string_conversions.h"
+#include "sync/api/sync_change.h"
+#include "sync/api/sync_error.h"
+#include "sync/api/syncable_service.h"
+#include "sync/internal_api/public/base_node.h"
+#include "sync/internal_api/public/change_record.h"
+#include "sync/internal_api/public/read_node.h"
+#include "sync/internal_api/public/read_transaction.h"
+#include "sync/internal_api/public/util/unrecoverable_error_handler.h"
+#include "sync/internal_api/public/write_node.h"
+#include "sync/internal_api/public/write_transaction.h"
+#include "sync/syncable/entry.h"  // TODO(tim): Bug 123674.
+
+namespace browser_sync {
+
+namespace {
+
+const int kContextSizeLimit = 1024;  // Datatype context size limit.
+
+void SetNodeSpecifics(const sync_pb::EntitySpecifics& entity_specifics,
+                      syncer::WriteNode* write_node) {
+  if (syncer::GetModelTypeFromSpecifics(entity_specifics) ==
+          syncer::PASSWORDS) {
+    write_node->SetPasswordSpecifics(
+        entity_specifics.password().client_only_encrypted_data());
+  } else {
+    write_node->SetEntitySpecifics(entity_specifics);
+  }
+}
+
+syncer::SyncData BuildRemoteSyncData(
+    int64 sync_id,
+    const syncer::BaseNode& read_node,
+    const syncer::AttachmentServiceProxy& attachment_service_proxy) {
+  const syncer::AttachmentIdList& attachment_ids = read_node.GetAttachmentIds();
+  // Use the specifics of non-password datatypes directly (encryption has
+  // already been handled).
+  if (read_node.GetModelType() != syncer::PASSWORDS) {
+    return syncer::SyncData::CreateRemoteData(sync_id,
+                                              read_node.GetEntitySpecifics(),
+                                              read_node.GetModificationTime(),
+                                              attachment_ids,
+                                              attachment_service_proxy);
+  }
+
+  // Passwords must be accessed differently, to account for their encryption,
+  // and stored into a temporary EntitySpecifics.
+  sync_pb::EntitySpecifics password_holder;
+  password_holder.mutable_password()->mutable_client_only_encrypted_data()->
+      CopyFrom(read_node.GetPasswordSpecifics());
+  return syncer::SyncData::CreateRemoteData(sync_id,
+                                            password_holder,
+                                            read_node.GetModificationTime(),
+                                            attachment_ids,
+                                            attachment_service_proxy);
+}
+
+}  // namespace
+
+GenericChangeProcessor::GenericChangeProcessor(
+    DataTypeErrorHandler* error_handler,
+    const base::WeakPtr<syncer::SyncableService>& local_service,
+    const base::WeakPtr<syncer::SyncMergeResult>& merge_result,
+    syncer::UserShare* user_share,
+    scoped_ptr<syncer::AttachmentService> attachment_service)
+    : ChangeProcessor(error_handler),
+      local_service_(local_service),
+      merge_result_(merge_result),
+      share_handle_(user_share),
+      attachment_service_(attachment_service.Pass()),
+      attachment_service_weak_ptr_factory_(attachment_service_.get()),
+      attachment_service_proxy_(
+          base::MessageLoopProxy::current(),
+          attachment_service_weak_ptr_factory_.GetWeakPtr()) {
+  DCHECK(CalledOnValidThread());
+  DCHECK(attachment_service_);
+}
+
+GenericChangeProcessor::~GenericChangeProcessor() {
+  DCHECK(CalledOnValidThread());
+}
+
+void GenericChangeProcessor::ApplyChangesFromSyncModel(
+    const syncer::BaseTransaction* trans,
+    int64 model_version,
+    const syncer::ImmutableChangeRecordList& changes) {
+  DCHECK(CalledOnValidThread());
+  DCHECK(syncer_changes_.empty());
+  for (syncer::ChangeRecordList::const_iterator it =
+           changes.Get().begin(); it != changes.Get().end(); ++it) {
+    if (it->action == syncer::ChangeRecord::ACTION_DELETE) {
+      scoped_ptr<sync_pb::EntitySpecifics> specifics;
+      if (it->specifics.has_password()) {
+        DCHECK(it->extra.get());
+        specifics.reset(new sync_pb::EntitySpecifics(it->specifics));
+        specifics->mutable_password()->mutable_client_only_encrypted_data()->
+            CopyFrom(it->extra->unencrypted());
+      }
+      const syncer::AttachmentIdList empty_list_of_attachment_ids;
+      syncer_changes_.push_back(
+          syncer::SyncChange(FROM_HERE,
+                             syncer::SyncChange::ACTION_DELETE,
+                             syncer::SyncData::CreateRemoteData(
+                                 it->id,
+                                 specifics ? *specifics : it->specifics,
+                                 base::Time(),
+                                 empty_list_of_attachment_ids,
+                                 attachment_service_proxy_)));
+    } else {
+      syncer::SyncChange::SyncChangeType action =
+          (it->action == syncer::ChangeRecord::ACTION_ADD) ?
+          syncer::SyncChange::ACTION_ADD : syncer::SyncChange::ACTION_UPDATE;
+      // Need to load specifics from node.
+      syncer::ReadNode read_node(trans);
+      if (read_node.InitByIdLookup(it->id) != syncer::BaseNode::INIT_OK) {
+        error_handler()->OnSingleDatatypeUnrecoverableError(
+            FROM_HERE,
+            "Failed to look up data for received change with id " +
+                base::Int64ToString(it->id));
+        return;
+      }
+      syncer_changes_.push_back(syncer::SyncChange(
+          FROM_HERE,
+          action,
+          BuildRemoteSyncData(it->id, read_node, attachment_service_proxy_)));
+    }
+  }
+}
+
+void GenericChangeProcessor::CommitChangesFromSyncModel() {
+  DCHECK(CalledOnValidThread());
+  if (syncer_changes_.empty())
+    return;
+  if (!local_service_.get()) {
+    syncer::ModelType type = syncer_changes_[0].sync_data().GetDataType();
+    syncer::SyncError error(FROM_HERE,
+                            syncer::SyncError::DATATYPE_ERROR,
+                            "Local service destroyed.",
+                            type);
+    error_handler()->OnSingleDatatypeUnrecoverableError(error.location(),
+                                                        error.message());
+    return;
+  }
+  syncer::SyncError error = local_service_->ProcessSyncChanges(FROM_HERE,
+                                                       syncer_changes_);
+  syncer_changes_.clear();
+  if (error.IsSet()) {
+    error_handler()->OnSingleDatatypeUnrecoverableError(
+        error.location(), error.message());
+  }
+}
+
+syncer::SyncDataList GenericChangeProcessor::GetAllSyncData(
+    syncer::ModelType type) const {
+  // This is slow / memory intensive.  Should be used sparingly by datatypes.
+  syncer::SyncDataList data;
+  GetAllSyncDataReturnError(type, &data);
+  return data;
+}
+
+syncer::SyncError GenericChangeProcessor::UpdateDataTypeContext(
+    syncer::ModelType type,
+    syncer::SyncChangeProcessor::ContextRefreshStatus refresh_status,
+    const std::string& context) {
+  DCHECK(syncer::ProtocolTypes().Has(type));
+
+  if (context.size() > static_cast<size_t>(kContextSizeLimit)) {
+    return syncer::SyncError(FROM_HERE,
+                             syncer::SyncError::DATATYPE_ERROR,
+                             "Context size limit exceeded.",
+                             type);
+  }
+
+  syncer::WriteTransaction trans(FROM_HERE, share_handle());
+  trans.SetDataTypeContext(type, refresh_status, context);
+
+  // TODO(zea): plumb a pointer to the PSS or SyncManagerImpl here so we can
+  // trigger a datatype nudge if |refresh_status == REFRESH_NEEDED|.
+
+  return syncer::SyncError();
+}
+
+syncer::SyncError GenericChangeProcessor::GetAllSyncDataReturnError(
+    syncer::ModelType type,
+    syncer::SyncDataList* current_sync_data) const {
+  DCHECK(CalledOnValidThread());
+  std::string type_name = syncer::ModelTypeToString(type);
+  syncer::ReadTransaction trans(FROM_HERE, share_handle());
+  syncer::ReadNode root(&trans);
+  if (root.InitByTagLookup(syncer::ModelTypeToRootTag(type)) !=
+          syncer::BaseNode::INIT_OK) {
+    syncer::SyncError error(FROM_HERE,
+                            syncer::SyncError::DATATYPE_ERROR,
+                            "Server did not create the top-level " + type_name +
+                                " node. We might be running against an out-of-"
+                                "date server.",
+                            type);
+    return error;
+  }
+
+  // TODO(akalin): We'll have to do a tree traversal for bookmarks.
+  DCHECK_NE(type, syncer::BOOKMARKS);
+
+  std::vector<int64> child_ids;
+  root.GetChildIds(&child_ids);
+
+  for (std::vector<int64>::iterator it = child_ids.begin();
+       it != child_ids.end(); ++it) {
+    syncer::ReadNode sync_child_node(&trans);
+    if (sync_child_node.InitByIdLookup(*it) !=
+            syncer::BaseNode::INIT_OK) {
+      syncer::SyncError error(FROM_HERE,
+                              syncer::SyncError::DATATYPE_ERROR,
+                              "Failed to fetch child node for type " +
+                                  type_name + ".",
+                              type);
+      return error;
+    }
+    current_sync_data->push_back(BuildRemoteSyncData(
+        sync_child_node.GetId(), sync_child_node, attachment_service_proxy_));
+  }
+  return syncer::SyncError();
+}
+
+bool GenericChangeProcessor::GetDataTypeContext(syncer::ModelType type,
+                                                std::string* context) const {
+  syncer::ReadTransaction trans(FROM_HERE, share_handle());
+  sync_pb::DataTypeContext context_proto;
+  trans.GetDataTypeContext(type, &context_proto);
+  if (!context_proto.has_context())
+    return false;
+
+  DCHECK_EQ(type,
+            syncer::GetModelTypeFromSpecificsFieldNumber(
+                context_proto.data_type_id()));
+  *context = context_proto.context();
+  return true;
+}
+
+int GenericChangeProcessor::GetSyncCountForType(syncer::ModelType type) {
+  syncer::ReadTransaction trans(FROM_HERE, share_handle());
+  syncer::ReadNode root(&trans);
+  if (root.InitByTagLookup(syncer::ModelTypeToRootTag(type)) !=
+      syncer::BaseNode::INIT_OK)
+    return 0;
+
+  // Subtract one to account for type's root node.
+  return root.GetTotalNodeCount() - 1;
+}
+
+namespace {
+
+// TODO(isherman): Investigating http://crbug.com/121592
+// WARNING: this code is sensitive to compiler optimizations. Be careful
+// modifying any code around an OnSingleDatatypeUnrecoverableError call, else
+// the compiler attempts to merge it with other calls, losing useful information
+// in breakpad uploads.
+syncer::SyncError LogLookupFailure(
+    syncer::BaseNode::InitByLookupResult lookup_result,
+    const tracked_objects::Location& from_here,
+    const std::string& error_prefix,
+    syncer::ModelType type,
+    DataTypeErrorHandler* error_handler) {
+  switch (lookup_result) {
+    case syncer::BaseNode::INIT_FAILED_ENTRY_NOT_GOOD: {
+      syncer::SyncError error;
+      error.Reset(from_here,
+                  error_prefix +
+                      "could not find entry matching the lookup criteria.",
+                  type);
+      error_handler->OnSingleDatatypeUnrecoverableError(FROM_HERE,
+                                                        error.message());
+      LOG(ERROR) << "Delete: Bad entry.";
+      return error;
+    }
+    case syncer::BaseNode::INIT_FAILED_ENTRY_IS_DEL: {
+      syncer::SyncError error;
+      error.Reset(from_here, error_prefix + "entry is already deleted.", type);
+      error_handler->OnSingleDatatypeUnrecoverableError(FROM_HERE,
+                                                        error.message());
+      LOG(ERROR) << "Delete: Deleted entry.";
+      return error;
+    }
+    case syncer::BaseNode::INIT_FAILED_DECRYPT_IF_NECESSARY: {
+      syncer::SyncError error;
+      error.Reset(from_here, error_prefix + "unable to decrypt", type);
+      error_handler->OnSingleDatatypeUnrecoverableError(FROM_HERE,
+                                                        error.message());
+      LOG(ERROR) << "Delete: Undecryptable entry.";
+      return error;
+    }
+    case syncer::BaseNode::INIT_FAILED_PRECONDITION: {
+      syncer::SyncError error;
+      error.Reset(from_here,
+                  error_prefix + "a precondition was not met for calling init.",
+                  type);
+      error_handler->OnSingleDatatypeUnrecoverableError(FROM_HERE,
+                                                        error.message());
+      LOG(ERROR) << "Delete: Failed precondition.";
+      return error;
+    }
+    default: {
+      syncer::SyncError error;
+      // Should have listed all the possible error cases above.
+      error.Reset(from_here, error_prefix + "unknown error", type);
+      error_handler->OnSingleDatatypeUnrecoverableError(FROM_HERE,
+                                                        error.message());
+      LOG(ERROR) << "Delete: Unknown error.";
+      return error;
+    }
+  }
+}
+
+syncer::SyncError AttemptDelete(
+    const syncer::SyncChange& change,
+    syncer::ModelType type,
+    const std::string& type_str,
+    syncer::WriteNode* node,
+    DataTypeErrorHandler* error_handler) {
+  DCHECK_EQ(change.change_type(), syncer::SyncChange::ACTION_DELETE);
+  if (change.sync_data().IsLocal()) {
+    const std::string& tag = syncer::SyncDataLocal(change.sync_data()).GetTag();
+    if (tag.empty()) {
+      syncer::SyncError error(
+          FROM_HERE,
+          syncer::SyncError::DATATYPE_ERROR,
+          "Failed to delete " + type_str + " node. Local data, empty tag. " +
+              change.location().ToString(),
+          type);
+      error_handler->OnSingleDatatypeUnrecoverableError(error.location(),
+                                                        error.message());
+      NOTREACHED();
+      return error;
+    }
+
+    syncer::BaseNode::InitByLookupResult result =
+        node->InitByClientTagLookup(change.sync_data().GetDataType(), tag);
+    if (result != syncer::BaseNode::INIT_OK) {
+      return LogLookupFailure(
+          result, FROM_HERE,
+          "Failed to delete " + type_str + " node. Local data. " +
+              change.location().ToString(),
+          type, error_handler);
+    }
+  } else {
+    syncer::BaseNode::InitByLookupResult result = node->InitByIdLookup(
+        syncer::SyncDataRemote(change.sync_data()).GetId());
+    if (result != syncer::BaseNode::INIT_OK) {
+      return LogLookupFailure(
+          result, FROM_HERE,
+          "Failed to delete " + type_str + " node. Non-local data. " +
+              change.location().ToString(),
+          type, error_handler);
+    }
+  }
+  if (IsActOnceDataType(type))
+    node->Drop();
+  else
+    node->Tombstone();
+  return syncer::SyncError();
+}
+
+}  // namespace
+
+syncer::SyncError GenericChangeProcessor::ProcessSyncChanges(
+    const tracked_objects::Location& from_here,
+    const syncer::SyncChangeList& list_of_changes) {
+  DCHECK(CalledOnValidThread());
+  syncer::WriteTransaction trans(from_here, share_handle());
+
+  for (syncer::SyncChangeList::const_iterator iter = list_of_changes.begin();
+       iter != list_of_changes.end();
+       ++iter) {
+    const syncer::SyncChange& change = *iter;
+    DCHECK_NE(change.sync_data().GetDataType(), syncer::UNSPECIFIED);
+    syncer::ModelType type = change.sync_data().GetDataType();
+    std::string type_str = syncer::ModelTypeToString(type);
+    syncer::WriteNode sync_node(&trans);
+    if (change.change_type() == syncer::SyncChange::ACTION_DELETE) {
+      syncer::SyncError error =
+          AttemptDelete(change, type, type_str, &sync_node, error_handler());
+      if (error.IsSet()) {
+        NOTREACHED();
+        return error;
+      }
+      attachment_service_->OnSyncDataDelete(change.sync_data());
+      if (merge_result_.get()) {
+        merge_result_->set_num_items_deleted(
+            merge_result_->num_items_deleted() + 1);
+      }
+    } else if (change.change_type() == syncer::SyncChange::ACTION_ADD) {
+      syncer::SyncError error =
+          HandleActionAdd(change, type_str, type, trans, &sync_node);
+      if (error.IsSet()) {
+        return error;
+      }
+    } else if (change.change_type() == syncer::SyncChange::ACTION_UPDATE) {
+      syncer::SyncError error =
+          HandleActionUpdate(change, type_str, type, trans, &sync_node);
+      if (error.IsSet()) {
+        return error;
+      }
+    } else {
+      syncer::SyncError error(
+          FROM_HERE,
+          syncer::SyncError::DATATYPE_ERROR,
+          "Received unset SyncChange in the change processor, " +
+              change.location().ToString(),
+          type);
+      error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE,
+                                                          error.message());
+      NOTREACHED();
+      LOG(ERROR) << "Unset sync change.";
+      return error;
+    }
+  }
+  return syncer::SyncError();
+}
+
+// WARNING: this code is sensitive to compiler optimizations. Be careful
+// modifying any code around an OnSingleDatatypeUnrecoverableError call, else
+// the compiler attempts to merge it with other calls, losing useful information
+// in breakpad uploads.
+syncer::SyncError GenericChangeProcessor::HandleActionAdd(
+    const syncer::SyncChange& change,
+    const std::string& type_str,
+    const syncer::ModelType& type,
+    const syncer::WriteTransaction& trans,
+    syncer::WriteNode* sync_node) {
+  // TODO(sync): Handle other types of creation (custom parents, folders,
+  // etc.).
+  syncer::ReadNode root_node(&trans);
+  if (root_node.InitByTagLookup(syncer::ModelTypeToRootTag(
+          change.sync_data().GetDataType())) != syncer::BaseNode::INIT_OK) {
+    syncer::SyncError error(FROM_HERE,
+                            syncer::SyncError::DATATYPE_ERROR,
+                            "Failed to look up root node for type " + type_str,
+                            type);
+    error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE,
+                                                        error.message());
+    NOTREACHED();
+    LOG(ERROR) << "Create: no root node.";
+    return error;
+  }
+  syncer::WriteNode::InitUniqueByCreationResult result =
+      sync_node->InitUniqueByCreation(
+          change.sync_data().GetDataType(),
+          root_node,
+          syncer::SyncDataLocal(change.sync_data()).GetTag());
+  if (result != syncer::WriteNode::INIT_SUCCESS) {
+    std::string error_prefix = "Failed to create " + type_str + " node: " +
+                               change.location().ToString() + ", ";
+    switch (result) {
+      case syncer::WriteNode::INIT_FAILED_EMPTY_TAG: {
+        syncer::SyncError error;
+        error.Reset(FROM_HERE, error_prefix + "empty tag", type);
+        error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE,
+                                                            error.message());
+        LOG(ERROR) << "Create: Empty tag.";
+        return error;
+      }
+      case syncer::WriteNode::INIT_FAILED_ENTRY_ALREADY_EXISTS: {
+        syncer::SyncError error;
+        error.Reset(FROM_HERE, error_prefix + "entry already exists", type);
+        error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE,
+                                                            error.message());
+        LOG(ERROR) << "Create: Entry exists.";
+        return error;
+      }
+      case syncer::WriteNode::INIT_FAILED_COULD_NOT_CREATE_ENTRY: {
+        syncer::SyncError error;
+        error.Reset(FROM_HERE, error_prefix + "failed to create entry", type);
+        error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE,
+                                                            error.message());
+        LOG(ERROR) << "Create: Could not create entry.";
+        return error;
+      }
+      case syncer::WriteNode::INIT_FAILED_SET_PREDECESSOR: {
+        syncer::SyncError error;
+        error.Reset(
+            FROM_HERE, error_prefix + "failed to set predecessor", type);
+        error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE,
+                                                            error.message());
+        LOG(ERROR) << "Create: Bad predecessor.";
+        return error;
+      }
+      default: {
+        syncer::SyncError error;
+        error.Reset(FROM_HERE, error_prefix + "unknown error", type);
+        error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE,
+                                                            error.message());
+        LOG(ERROR) << "Create: Unknown error.";
+        return error;
+      }
+    }
+  }
+  sync_node->SetTitle(change.sync_data().GetTitle());
+  SetNodeSpecifics(change.sync_data().GetSpecifics(), sync_node);
+  attachment_service_->OnSyncDataAdd(change.sync_data());
+  if (merge_result_.get()) {
+    merge_result_->set_num_items_added(merge_result_->num_items_added() + 1);
+  }
+  return syncer::SyncError();
+}
+// WARNING: this code is sensitive to compiler optimizations. Be careful
+// modifying any code around an OnSingleDatatypeUnrecoverableError call, else
+// the compiler attempts to merge it with other calls, losing useful information
+// in breakpad uploads.
+syncer::SyncError GenericChangeProcessor::HandleActionUpdate(
+    const syncer::SyncChange& change,
+    const std::string& type_str,
+    const syncer::ModelType& type,
+    const syncer::WriteTransaction& trans,
+    syncer::WriteNode* sync_node) {
+  // TODO(zea): consider having this logic for all possible changes?
+  syncer::BaseNode::InitByLookupResult result =
+      sync_node->InitByClientTagLookup(
+          change.sync_data().GetDataType(),
+          syncer::SyncDataLocal(change.sync_data()).GetTag());
+  if (result != syncer::BaseNode::INIT_OK) {
+    std::string error_prefix = "Failed to load " + type_str + " node. " +
+                               change.location().ToString() + ", ";
+    if (result == syncer::BaseNode::INIT_FAILED_PRECONDITION) {
+      syncer::SyncError error;
+      error.Reset(FROM_HERE, error_prefix + "empty tag", type);
+      error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE,
+                                                          error.message());
+      LOG(ERROR) << "Update: Empty tag.";
+      return error;
+    } else if (result == syncer::BaseNode::INIT_FAILED_ENTRY_NOT_GOOD) {
+      syncer::SyncError error;
+      error.Reset(FROM_HERE, error_prefix + "bad entry", type);
+      error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE,
+                                                          error.message());
+      LOG(ERROR) << "Update: bad entry.";
+      return error;
+    } else if (result == syncer::BaseNode::INIT_FAILED_ENTRY_IS_DEL) {
+      syncer::SyncError error;
+      error.Reset(FROM_HERE, error_prefix + "deleted entry", type);
+      error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE,
+                                                          error.message());
+      LOG(ERROR) << "Update: deleted entry.";
+      return error;
+    } else {
+      syncer::Cryptographer* crypto = trans.GetCryptographer();
+      syncer::ModelTypeSet encrypted_types(trans.GetEncryptedTypes());
+      const sync_pb::EntitySpecifics& specifics =
+          sync_node->GetEntry()->GetSpecifics();
+      CHECK(specifics.has_encrypted());
+      const bool can_decrypt = crypto->CanDecrypt(specifics.encrypted());
+      const bool agreement = encrypted_types.Has(type);
+      if (!agreement && !can_decrypt) {
+        syncer::SyncError error;
+        error.Reset(FROM_HERE,
+                    "Failed to load encrypted entry, missing key and "
+                    "nigori mismatch for " +
+                        type_str + ".",
+                    type);
+        error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE,
+                                                            error.message());
+        LOG(ERROR) << "Update: encr case 1.";
+        return error;
+      } else if (agreement && can_decrypt) {
+        syncer::SyncError error;
+        error.Reset(FROM_HERE,
+                    "Failed to load encrypted entry, we have the key "
+                    "and the nigori matches (?!) for " +
+                        type_str + ".",
+                    type);
+        error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE,
+                                                            error.message());
+        LOG(ERROR) << "Update: encr case 2.";
+        return error;
+      } else if (agreement) {
+        syncer::SyncError error;
+        error.Reset(FROM_HERE,
+                    "Failed to load encrypted entry, missing key and "
+                    "the nigori matches for " +
+                        type_str + ".",
+                    type);
+        error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE,
+                                                            error.message());
+        LOG(ERROR) << "Update: encr case 3.";
+        return error;
+      } else {
+        syncer::SyncError error;
+        error.Reset(FROM_HERE,
+                    "Failed to load encrypted entry, we have the key"
+                    "(?!) and nigori mismatch for " +
+                        type_str + ".",
+                    type);
+        error_handler()->OnSingleDatatypeUnrecoverableError(FROM_HERE,
+                                                            error.message());
+        LOG(ERROR) << "Update: encr case 4.";
+        return error;
+      }
+    }
+  }
+
+  sync_node->SetTitle(change.sync_data().GetTitle());
+  SetNodeSpecifics(change.sync_data().GetSpecifics(), sync_node);
+  attachment_service_->OnSyncDataUpdate(sync_node->GetAttachmentIds(),
+                                        change.sync_data());
+  if (merge_result_.get()) {
+    merge_result_->set_num_items_modified(merge_result_->num_items_modified() +
+                                          1);
+  }
+  // TODO(sync): Support updating other parts of the sync node (title,
+  // successor, parent, etc.).
+  return syncer::SyncError();
+}
+
+bool GenericChangeProcessor::SyncModelHasUserCreatedNodes(
+    syncer::ModelType type,
+    bool* has_nodes) {
+  DCHECK(CalledOnValidThread());
+  DCHECK(has_nodes);
+  DCHECK_NE(type, syncer::UNSPECIFIED);
+  std::string type_name = syncer::ModelTypeToString(type);
+  std::string err_str = "Server did not create the top-level " + type_name +
+      " node. We might be running against an out-of-date server.";
+  *has_nodes = false;
+  syncer::ReadTransaction trans(FROM_HERE, share_handle());
+  syncer::ReadNode type_root_node(&trans);
+  if (type_root_node.InitByTagLookup(syncer::ModelTypeToRootTag(type)) !=
+          syncer::BaseNode::INIT_OK) {
+    LOG(ERROR) << err_str;
+    return false;
+  }
+
+  // The sync model has user created nodes if the type's root node has any
+  // children.
+  *has_nodes = type_root_node.HasChildren();
+  return true;
+}
+
+bool GenericChangeProcessor::CryptoReadyIfNecessary(syncer::ModelType type) {
+  DCHECK(CalledOnValidThread());
+  DCHECK_NE(type, syncer::UNSPECIFIED);
+  // We only access the cryptographer while holding a transaction.
+  syncer::ReadTransaction trans(FROM_HERE, share_handle());
+  const syncer::ModelTypeSet encrypted_types = trans.GetEncryptedTypes();
+  return !encrypted_types.Has(type) ||
+         trans.GetCryptographer()->is_ready();
+}
+
+void GenericChangeProcessor::StartImpl() {
+  DCHECK(CalledOnValidThread());
+}
+
+syncer::UserShare* GenericChangeProcessor::share_handle() const {
+  DCHECK(CalledOnValidThread());
+  return share_handle_;
+}
+
+}  // namespace browser_sync
diff --git a/components/sync_driver/generic_change_processor.h b/components/sync_driver/generic_change_processor.h
new file mode 100644
index 0000000..a5e33cb
--- /dev/null
+++ b/components/sync_driver/generic_change_processor.h
@@ -0,0 +1,148 @@
+// 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.
+
+#ifndef COMPONENTS_SYNC_DRIVER_GENERIC_CHANGE_PROCESSOR_H_
+#define COMPONENTS_SYNC_DRIVER_GENERIC_CHANGE_PROCESSOR_H_
+
+#include <vector>
+
+#include "base/compiler_specific.h"
+#include "base/memory/weak_ptr.h"
+#include "base/threading/non_thread_safe.h"
+#include "components/sync_driver/change_processor.h"
+#include "components/sync_driver/data_type_controller.h"
+#include "components/sync_driver/data_type_error_handler.h"
+#include "sync/api/attachments/attachment_service.h"
+#include "sync/api/attachments/attachment_service_proxy.h"
+#include "sync/api/sync_change_processor.h"
+#include "sync/api/sync_merge_result.h"
+
+namespace syncer {
+class SyncData;
+class SyncableService;
+class WriteNode;
+class WriteTransaction;
+
+typedef std::vector<syncer::SyncData> SyncDataList;
+}  // namespace syncer
+
+namespace browser_sync {
+
+// Datatype agnostic change processor. One instance of GenericChangeProcessor
+// is created for each datatype and lives on the datatype's thread. It then
+// handles all interaction with the sync api, both translating pushes from the
+// local service into transactions and receiving changes from the sync model,
+// which then get converted into SyncChange's and sent to the local service.
+//
+// As a rule, the GenericChangeProcessor is not thread safe, and should only
+// be used on the same thread in which it was created.
+class GenericChangeProcessor : public ChangeProcessor,
+                               public syncer::SyncChangeProcessor,
+                               public base::NonThreadSafe {
+ public:
+  // Create a change processor and connect it to the syncer.
+  GenericChangeProcessor(
+      DataTypeErrorHandler* error_handler,
+      const base::WeakPtr<syncer::SyncableService>& local_service,
+      const base::WeakPtr<syncer::SyncMergeResult>& merge_result,
+      syncer::UserShare* user_share,
+      scoped_ptr<syncer::AttachmentService> attachment_service);
+  virtual ~GenericChangeProcessor();
+
+  // ChangeProcessor interface.
+  // Build and store a list of all changes into |syncer_changes_|.
+  virtual void ApplyChangesFromSyncModel(
+      const syncer::BaseTransaction* trans,
+      int64 version,
+      const syncer::ImmutableChangeRecordList& changes) OVERRIDE;
+  // Passes |syncer_changes_|, built in ApplyChangesFromSyncModel, onto
+  // |local_service_| by way of its ProcessSyncChanges method.
+  virtual void CommitChangesFromSyncModel() OVERRIDE;
+
+  // syncer::SyncChangeProcessor implementation.
+  virtual syncer::SyncError ProcessSyncChanges(
+      const tracked_objects::Location& from_here,
+      const syncer::SyncChangeList& change_list) OVERRIDE;
+  virtual syncer::SyncDataList GetAllSyncData(syncer::ModelType type)
+      const OVERRIDE;
+  virtual syncer::SyncError UpdateDataTypeContext(
+      syncer::ModelType type,
+      syncer::SyncChangeProcessor::ContextRefreshStatus refresh_status,
+      const std::string& context) OVERRIDE;
+
+  // Similar to above, but returns a SyncError for use by direct clients
+  // of GenericChangeProcessor that may need more error visibility.
+  virtual syncer::SyncError GetAllSyncDataReturnError(
+      syncer::ModelType type,
+      syncer::SyncDataList* data) const;
+
+  // If a datatype context associated with |type| exists, fills |context| and
+  // returns true. Otheriwse, if there has not been a context set, returns
+  // false.
+  virtual bool GetDataTypeContext(syncer::ModelType type,
+                                  std::string* context) const;
+
+  // Returns the number of items for this type.
+  virtual int GetSyncCountForType(syncer::ModelType type);
+
+  // Generic versions of AssociatorInterface methods. Called by
+  // syncer::SyncableServiceAdapter or the DataTypeController.
+  virtual bool SyncModelHasUserCreatedNodes(syncer::ModelType type,
+                                            bool* has_nodes);
+  virtual bool CryptoReadyIfNecessary(syncer::ModelType type);
+
+ protected:
+  // ChangeProcessor interface.
+  virtual void StartImpl() OVERRIDE;  // Does nothing.
+  virtual syncer::UserShare* share_handle() const OVERRIDE;
+
+ private:
+  // Helper methods for acting on changes coming from the datatype. These are
+  // logically part of ProcessSyncChanges.
+  syncer::SyncError HandleActionAdd(const syncer::SyncChange& change,
+                                    const std::string& type_str,
+                                    const syncer::ModelType& type,
+                                    const syncer::WriteTransaction& trans,
+                                    syncer::WriteNode* sync_node);
+  syncer::SyncError HandleActionUpdate(const syncer::SyncChange& change,
+                                       const std::string& type_str,
+                                       const syncer::ModelType& type,
+                                       const syncer::WriteTransaction& trans,
+                                       syncer::WriteNode* sync_node);
+
+  // The SyncableService this change processor will forward changes on to.
+  const base::WeakPtr<syncer::SyncableService> local_service_;
+
+  // A SyncMergeResult used to track the changes made during association. The
+  // owner will invalidate the weak pointer when association is complete. While
+  // the pointer is valid though, we increment it with any changes received
+  // via ProcessSyncChanges.
+  const base::WeakPtr<syncer::SyncMergeResult> merge_result_;
+
+  // The current list of changes received from the syncer. We buffer because
+  // we must ensure no syncapi transaction is held when we pass it on to
+  // |local_service_|.
+  // Set in ApplyChangesFromSyncModel, consumed in CommitChangesFromSyncModel.
+  syncer::SyncChangeList syncer_changes_;
+
+  // Our handle to the sync model. Unlike normal ChangeProcessors, we need to
+  // be able to access the sync model before the change processor begins
+  // listening to changes (the local_service_ will be interacting with us
+  // when it starts up). As such we can't wait until Start(_) has been called,
+  // and have to keep a local pointer to the user_share.
+  syncer::UserShare* const share_handle_;
+
+  scoped_ptr<syncer::AttachmentService> attachment_service_;
+  // Must be destroyed before attachment_service_ to ensure WeakPtrs are
+  // invalidated before attachment_service_ is destroyed.
+  base::WeakPtrFactory<syncer::AttachmentService>
+      attachment_service_weak_ptr_factory_;
+  syncer::AttachmentServiceProxy attachment_service_proxy_;
+
+  DISALLOW_COPY_AND_ASSIGN(GenericChangeProcessor);
+};
+
+}  // namespace browser_sync
+
+#endif  // COMPONENTS_SYNC_DRIVER_GENERIC_CHANGE_PROCESSOR_H_
diff --git a/components/sync_driver/generic_change_processor_unittest.cc b/components/sync_driver/generic_change_processor_unittest.cc
new file mode 100644
index 0000000..0fcce29
--- /dev/null
+++ b/components/sync_driver/generic_change_processor_unittest.cc
@@ -0,0 +1,247 @@
+// 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.
+
+#include "components/sync_driver/generic_change_processor.h"
+
+#include "base/memory/scoped_ptr.h"
+#include "base/memory/weak_ptr.h"
+#include "base/message_loop/message_loop.h"
+#include "base/strings/stringprintf.h"
+#include "components/sync_driver/data_type_error_handler_mock.h"
+#include "sync/api/attachments/fake_attachment_service.h"
+#include "sync/api/fake_syncable_service.h"
+#include "sync/api/sync_change.h"
+#include "sync/api/sync_merge_result.h"
+#include "sync/internal_api/public/base/model_type.h"
+#include "sync/internal_api/public/read_node.h"
+#include "sync/internal_api/public/read_transaction.h"
+#include "sync/internal_api/public/sync_encryption_handler.h"
+#include "sync/internal_api/public/test/test_user_share.h"
+#include "sync/internal_api/public/user_share.h"
+#include "sync/internal_api/public/write_node.h"
+#include "sync/internal_api/public/write_transaction.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace browser_sync {
+
+namespace {
+
+class SyncGenericChangeProcessorTest : public testing::Test {
+ public:
+  // It doesn't matter which type we use.  Just pick one.
+  static const syncer::ModelType kType = syncer::PREFERENCES;
+
+  SyncGenericChangeProcessorTest() :
+      sync_merge_result_(kType),
+      merge_result_ptr_factory_(&sync_merge_result_),
+      syncable_service_ptr_factory_(&fake_syncable_service_) {
+  }
+
+  virtual void SetUp() OVERRIDE {
+    test_user_share_.SetUp();
+    syncer::ModelTypeSet types = syncer::ProtocolTypes();
+    for (syncer::ModelTypeSet::Iterator iter = types.First(); iter.Good();
+         iter.Inc()) {
+      syncer::TestUserShare::CreateRoot(iter.Get(),
+                                        test_user_share_.user_share());
+    }
+    test_user_share_.encryption_handler()->Init();
+    change_processor_.reset(new GenericChangeProcessor(
+        &data_type_error_handler_,
+        syncable_service_ptr_factory_.GetWeakPtr(),
+        merge_result_ptr_factory_.GetWeakPtr(),
+        test_user_share_.user_share(),
+        syncer::FakeAttachmentService::CreateForTest()));
+  }
+
+  virtual void TearDown() OVERRIDE {
+    test_user_share_.TearDown();
+  }
+
+  void BuildChildNodes(int n) {
+    syncer::WriteTransaction trans(FROM_HERE, user_share());
+    syncer::ReadNode root(&trans);
+    ASSERT_EQ(syncer::BaseNode::INIT_OK,
+              root.InitByTagLookup(syncer::ModelTypeToRootTag(kType)));
+    for (int i = 0; i < n; ++i) {
+      syncer::WriteNode node(&trans);
+      node.InitUniqueByCreation(kType, root, base::StringPrintf("node%05d", i));
+    }
+  }
+
+  GenericChangeProcessor* change_processor() {
+    return change_processor_.get();
+  }
+
+  syncer::UserShare* user_share() {
+    return test_user_share_.user_share();
+  }
+
+ private:
+  base::MessageLoopForUI loop_;
+
+  syncer::SyncMergeResult sync_merge_result_;
+  base::WeakPtrFactory<syncer::SyncMergeResult> merge_result_ptr_factory_;
+
+  syncer::FakeSyncableService fake_syncable_service_;
+  base::WeakPtrFactory<syncer::FakeSyncableService>
+      syncable_service_ptr_factory_;
+
+  DataTypeErrorHandlerMock data_type_error_handler_;
+  syncer::TestUserShare test_user_share_;
+
+  scoped_ptr<GenericChangeProcessor> change_processor_;
+};
+
+// Similar to above, but focused on the method that implements sync/api
+// interfaces and is hence exposed to datatypes directly.
+TEST_F(SyncGenericChangeProcessorTest, StressGetAllSyncData) {
+  const int kNumChildNodes = 1000;
+  const int kRepeatCount = 1;
+
+  ASSERT_NO_FATAL_FAILURE(BuildChildNodes(kNumChildNodes));
+
+  for (int i = 0; i < kRepeatCount; ++i) {
+    syncer::SyncDataList sync_data =
+        change_processor()->GetAllSyncData(kType);
+
+    // Start with a simple test.  We can add more in-depth testing later.
+    EXPECT_EQ(static_cast<size_t>(kNumChildNodes), sync_data.size());
+  }
+}
+
+TEST_F(SyncGenericChangeProcessorTest, SetGetPasswords) {
+  const int kNumPasswords = 10;
+  sync_pb::PasswordSpecificsData password_data;
+  password_data.set_username_value("user");
+
+  sync_pb::EntitySpecifics password_holder;
+
+  syncer::SyncChangeList change_list;
+  for (int i = 0; i < kNumPasswords; ++i) {
+    password_data.set_password_value(
+        base::StringPrintf("password%i", i));
+    password_holder.mutable_password()->mutable_client_only_encrypted_data()->
+        CopyFrom(password_data);
+    change_list.push_back(
+        syncer::SyncChange(FROM_HERE,
+                           syncer::SyncChange::ACTION_ADD,
+                           syncer::SyncData::CreateLocalData(
+                               base::StringPrintf("tag%i", i),
+                               base::StringPrintf("title%i", i),
+                               password_holder)));
+  }
+
+  ASSERT_FALSE(
+      change_processor()->ProcessSyncChanges(FROM_HERE, change_list).IsSet());
+
+  syncer::SyncDataList password_list(
+      change_processor()->GetAllSyncData(syncer::PASSWORDS));
+
+  ASSERT_EQ(password_list.size(), change_list.size());
+  for (int i = 0; i < kNumPasswords; ++i) {
+    // Verify the password is returned properly.
+    ASSERT_TRUE(password_list[i].GetSpecifics().has_password());
+    ASSERT_TRUE(password_list[i].GetSpecifics().password().
+                    has_client_only_encrypted_data());
+    ASSERT_FALSE(password_list[i].GetSpecifics().password().has_encrypted());
+    const sync_pb::PasswordSpecificsData& sync_password =
+        password_list[i].GetSpecifics().password().client_only_encrypted_data();
+    const sync_pb::PasswordSpecificsData& change_password =
+        change_list[i].sync_data().GetSpecifics().password().
+            client_only_encrypted_data();
+    ASSERT_EQ(sync_password.password_value(), change_password.password_value());
+    ASSERT_EQ(sync_password.username_value(), change_password.username_value());
+
+    // Verify the raw sync data was stored securely.
+    syncer::ReadTransaction read_transaction(FROM_HERE, user_share());
+    syncer::ReadNode node(&read_transaction);
+    ASSERT_EQ(node.InitByClientTagLookup(syncer::PASSWORDS,
+                                         base::StringPrintf("tag%i", i)),
+              syncer::BaseNode::INIT_OK);
+    ASSERT_EQ(node.GetTitle(), "encrypted");
+    const sync_pb::EntitySpecifics& raw_specifics = node.GetEntitySpecifics();
+    ASSERT_TRUE(raw_specifics.has_password());
+    ASSERT_TRUE(raw_specifics.password().has_encrypted());
+    ASSERT_FALSE(raw_specifics.password().has_client_only_encrypted_data());
+  }
+}
+
+TEST_F(SyncGenericChangeProcessorTest, UpdatePasswords) {
+  const int kNumPasswords = 10;
+  sync_pb::PasswordSpecificsData password_data;
+  password_data.set_username_value("user");
+
+  sync_pb::EntitySpecifics password_holder;
+
+  syncer::SyncChangeList change_list;
+  syncer::SyncChangeList change_list2;
+  for (int i = 0; i < kNumPasswords; ++i) {
+    password_data.set_password_value(
+        base::StringPrintf("password%i", i));
+    password_holder.mutable_password()->mutable_client_only_encrypted_data()->
+        CopyFrom(password_data);
+    change_list.push_back(
+        syncer::SyncChange(FROM_HERE,
+                           syncer::SyncChange::ACTION_ADD,
+                           syncer::SyncData::CreateLocalData(
+                               base::StringPrintf("tag%i", i),
+                               base::StringPrintf("title%i", i),
+                               password_holder)));
+    password_data.set_password_value(
+        base::StringPrintf("password_m%i", i));
+    password_holder.mutable_password()->mutable_client_only_encrypted_data()->
+        CopyFrom(password_data);
+    change_list2.push_back(
+        syncer::SyncChange(FROM_HERE,
+                           syncer::SyncChange::ACTION_UPDATE,
+                           syncer::SyncData::CreateLocalData(
+                               base::StringPrintf("tag%i", i),
+                               base::StringPrintf("title_m%i", i),
+                               password_holder)));
+  }
+
+  ASSERT_FALSE(
+      change_processor()->ProcessSyncChanges(FROM_HERE, change_list).IsSet());
+  ASSERT_FALSE(
+      change_processor()->ProcessSyncChanges(FROM_HERE, change_list2).IsSet());
+
+  syncer::SyncDataList password_list(
+      change_processor()->GetAllSyncData(syncer::PASSWORDS));
+
+  ASSERT_EQ(password_list.size(), change_list2.size());
+  for (int i = 0; i < kNumPasswords; ++i) {
+    // Verify the password is returned properly.
+    ASSERT_TRUE(password_list[i].GetSpecifics().has_password());
+    ASSERT_TRUE(password_list[i].GetSpecifics().password().
+                    has_client_only_encrypted_data());
+    ASSERT_FALSE(password_list[i].GetSpecifics().password().has_encrypted());
+    const sync_pb::PasswordSpecificsData& sync_password =
+        password_list[i].GetSpecifics().password().client_only_encrypted_data();
+    const sync_pb::PasswordSpecificsData& change_password =
+        change_list2[i].sync_data().GetSpecifics().password().
+            client_only_encrypted_data();
+    ASSERT_EQ(sync_password.password_value(), change_password.password_value());
+    ASSERT_EQ(sync_password.username_value(), change_password.username_value());
+
+    // Verify the raw sync data was stored securely.
+    syncer::ReadTransaction read_transaction(FROM_HERE, user_share());
+    syncer::ReadNode node(&read_transaction);
+    ASSERT_EQ(node.InitByClientTagLookup(syncer::PASSWORDS,
+                                         base::StringPrintf("tag%i", i)),
+              syncer::BaseNode::INIT_OK);
+    ASSERT_EQ(node.GetTitle(), "encrypted");
+    const sync_pb::EntitySpecifics& raw_specifics = node.GetEntitySpecifics();
+    ASSERT_TRUE(raw_specifics.has_password());
+    ASSERT_TRUE(raw_specifics.password().has_encrypted());
+    ASSERT_FALSE(raw_specifics.password().has_client_only_encrypted_data());
+  }
+}
+
+// TODO(maniscalco): Add test cases that verify GenericChangeProcessor calls the
+// right methods on its AttachmentService at the right times (bug 353303).
+
+}  // namespace
+
+}  // namespace browser_sync
diff --git a/components/sync_driver/sync_api_component_factory.h b/components/sync_driver/sync_api_component_factory.h
new file mode 100644
index 0000000..cdb5a42
--- /dev/null
+++ b/components/sync_driver/sync_api_component_factory.h
@@ -0,0 +1,35 @@
+// 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.
+
+#ifndef COMPONENTS_SYNC_DRIVER_SYNC_API_COMPONENT_FACTORY_H_
+#define COMPONENTS_SYNC_DRIVER_SYNC_API_COMPONENT_FACTORY_H_
+
+#include "base/memory/scoped_ptr.h"
+#include "base/memory/weak_ptr.h"
+#include "sync/api/attachments/attachment_store.h"
+#include "sync/api/syncable_service.h"
+#include "sync/internal_api/public/base/model_type.h"
+
+namespace browser_sync {
+
+// This factory provides sync driver code with the model type specific sync/api
+// service (like SyncableService) implementations.
+class SyncApiComponentFactory {
+ public:
+  // Returns a weak pointer to the syncable service specified by |type|.
+  // Weak pointer may be unset if service is already destroyed.
+  // Note: Should only be called from the model type thread.
+  virtual base::WeakPtr<syncer::SyncableService> GetSyncableServiceForType(
+      syncer::ModelType type) = 0;
+
+  // Returns the custom attachment store for a model type, if there is one.
+  // May return NULL, which implies sync should use a default implementation.
+  // Note: Should only be called from the model type thread.
+  virtual scoped_ptr<syncer::AttachmentStore>
+      CreateCustomAttachmentStoreForType(syncer::ModelType type) = 0;
+};
+
+}  // namespace browser_sync
+
+#endif  // COMPONENTS_SYNC_DRIVER_SYNC_API_COMPONENT_FACTORY_H_
diff --git a/components/tracing.target.darwin-arm.mk b/components/tracing.target.darwin-arm.mk
index c31cecd..0827c37 100644
--- a/components/tracing.target.darwin-arm.mk
+++ b/components/tracing.target.darwin-arm.mk
@@ -220,7 +220,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/tracing.target.darwin-mips.mk b/components/tracing.target.darwin-mips.mk
index d0df402..a6e6969 100644
--- a/components/tracing.target.darwin-mips.mk
+++ b/components/tracing.target.darwin-mips.mk
@@ -216,7 +216,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/tracing.target.darwin-x86.mk b/components/tracing.target.darwin-x86.mk
index 9ccd062..711274b 100644
--- a/components/tracing.target.darwin-x86.mk
+++ b/components/tracing.target.darwin-x86.mk
@@ -218,7 +218,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/tracing.target.darwin-x86_64.mk b/components/tracing.target.darwin-x86_64.mk
index 017cd7d..d907902 100644
--- a/components/tracing.target.darwin-x86_64.mk
+++ b/components/tracing.target.darwin-x86_64.mk
@@ -218,7 +218,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/tracing.target.linux-arm.mk b/components/tracing.target.linux-arm.mk
index c31cecd..0827c37 100644
--- a/components/tracing.target.linux-arm.mk
+++ b/components/tracing.target.linux-arm.mk
@@ -220,7 +220,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/tracing.target.linux-mips.mk b/components/tracing.target.linux-mips.mk
index d0df402..a6e6969 100644
--- a/components/tracing.target.linux-mips.mk
+++ b/components/tracing.target.linux-mips.mk
@@ -216,7 +216,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/tracing.target.linux-x86.mk b/components/tracing.target.linux-x86.mk
index 9ccd062..711274b 100644
--- a/components/tracing.target.linux-x86.mk
+++ b/components/tracing.target.linux-x86.mk
@@ -218,7 +218,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/tracing.target.linux-x86_64.mk b/components/tracing.target.linux-x86_64.mk
index 017cd7d..d907902 100644
--- a/components/tracing.target.linux-x86_64.mk
+++ b/components/tracing.target.linux-x86_64.mk
@@ -218,7 +218,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/url_matcher/BUILD.gn b/components/url_matcher/BUILD.gn
new file mode 100644
index 0000000..83f95d3
--- /dev/null
+++ b/components/url_matcher/BUILD.gn
@@ -0,0 +1,32 @@
+# 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.
+
+component("url_matcher") {
+  sources = [
+    "regex_set_matcher.cc",
+    "regex_set_matcher.h",
+    "string_pattern.cc",
+    "string_pattern.h",
+    "substring_set_matcher.cc",
+    "substring_set_matcher.h",
+    "url_matcher.cc",
+    "url_matcher.h",
+    "url_matcher_constants.cc",
+    "url_matcher_constants.h",
+    "url_matcher_export.h",
+    "url_matcher_factory.cc",
+    "url_matcher_factory.h",
+    "url_matcher_helpers.cc",
+    "url_matcher_helpers.h",
+  ]
+
+  defines = [ "URL_MATCHER_IMPLEMENTATION" ]
+
+  deps = [
+    "//base",
+    "//base/third_party/dynamic_annotations",
+    "//third_party/re2",
+    "//url",
+  ]
+}
diff --git a/components/usb_service.gypi b/components/usb_service.gypi
new file mode 100644
index 0000000..97f4a61
--- /dev/null
+++ b/components/usb_service.gypi
@@ -0,0 +1,35 @@
+# 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.
+
+{
+  'targets': [{
+    'target_name': 'usb_service',
+    'type': '<(component)',
+    'dependencies': [
+      '../base/base.gyp:base',
+      '../base/third_party/dynamic_annotations/dynamic_annotations.gyp:dynamic_annotations',
+      '../content/content.gyp:content_browser',
+      '../net/net.gyp:net',
+      '../third_party/libusb/libusb.gyp:libusb',
+    ],
+    'defines': [
+      'USB_SERVICE_IMPLEMENTATION',
+    ],
+    'include_dirs': [
+      '..',
+    ],
+    'sources': [
+      'usb_service/usb_context.cc',
+      'usb_service/usb_context.h',
+      'usb_service/usb_device.cc',
+      'usb_service/usb_device.h',
+      'usb_service/usb_device_handle.cc',
+      'usb_service/usb_device_handle.h',
+      'usb_service/usb_interface.cc',
+      'usb_service/usb_interface.h',
+      'usb_service/usb_service.cc',
+      'usb_service/usb_service.h',
+    ]
+  }],
+}
diff --git a/components/usb_service/DEPS b/components/usb_service/DEPS
new file mode 100644
index 0000000..9013632
--- /dev/null
+++ b/components/usb_service/DEPS
@@ -0,0 +1,11 @@
+include_rules = [
+  "+chromeos",
+
+  "-content",
+  "+content/public/browser",
+
+  "-net",
+  "+net/base",
+
+  "+third_party/libusb",
+]
diff --git a/chrome/browser/usb/OWNERS b/components/usb_service/OWNERS
similarity index 100%
rename from chrome/browser/usb/OWNERS
rename to components/usb_service/OWNERS
diff --git a/components/usb_service/usb_context.cc b/components/usb_service/usb_context.cc
new file mode 100644
index 0000000..be8313e
--- /dev/null
+++ b/components/usb_service/usb_context.cc
@@ -0,0 +1,77 @@
+// 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.
+
+#include "components/usb_service/usb_context.h"
+
+#include "base/logging.h"
+#include "base/synchronization/waitable_event.h"
+#include "base/threading/platform_thread.h"
+#include "third_party/libusb/src/libusb/interrupt.h"
+#include "third_party/libusb/src/libusb/libusb.h"
+
+namespace usb_service {
+
+// The UsbEventHandler works around a design flaw in the libusb interface. There
+// is currently no way to signal to libusb that any caller into one of the event
+// handler calls should return without handling any events.
+class UsbContext::UsbEventHandler : public base::PlatformThread::Delegate {
+ public:
+  explicit UsbEventHandler(libusb_context* context);
+  virtual ~UsbEventHandler();
+
+  // base::PlatformThread::Delegate
+  virtual void ThreadMain() OVERRIDE;
+
+ private:
+  volatile bool running_;
+  libusb_context* context_;
+  base::PlatformThreadHandle thread_handle_;
+  base::WaitableEvent start_polling_;
+  DISALLOW_COPY_AND_ASSIGN(UsbEventHandler);
+};
+
+UsbContext::UsbEventHandler::UsbEventHandler(libusb_context* context)
+    : running_(true),
+      context_(context),
+      thread_handle_(0),
+      start_polling_(false, false) {
+  bool success = base::PlatformThread::Create(0, this, &thread_handle_);
+  DCHECK(success) << "Failed to create USB IO handling thread.";
+  start_polling_.Wait();
+}
+
+UsbContext::UsbEventHandler::~UsbEventHandler() {
+  running_ = false;
+  // Spreading running_ to the UsbEventHandler thread.
+  base::subtle::MemoryBarrier();
+  libusb_interrupt_handle_event(context_);
+  base::PlatformThread::Join(thread_handle_);
+}
+
+void UsbContext::UsbEventHandler::ThreadMain() {
+  base::PlatformThread::SetName("UsbEventHandler");
+  VLOG(1) << "UsbEventHandler started.";
+  if (running_) {
+    start_polling_.Signal();
+    libusb_handle_events(context_);
+  }
+  while (running_)
+    libusb_handle_events(context_);
+  VLOG(1) << "UsbEventHandler shutting down.";
+}
+
+UsbContext::UsbContext(PlatformUsbContext context) : context_(context) {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  event_handler_ = new UsbEventHandler(context_);
+}
+
+UsbContext::~UsbContext() {
+  // destruction of UsbEventHandler is a blocking operation.
+  DCHECK(thread_checker_.CalledOnValidThread());
+  delete event_handler_;
+  event_handler_ = NULL;
+  libusb_exit(context_);
+}
+
+}  // namespace usb_service
diff --git a/components/usb_service/usb_context.h b/components/usb_service/usb_context.h
new file mode 100644
index 0000000..432617b
--- /dev/null
+++ b/components/usb_service/usb_context.h
@@ -0,0 +1,47 @@
+// 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.
+
+#ifndef COMPONENTS_USB_SERVICE_USB_CONTEXT_H_
+#define COMPONENTS_USB_SERVICE_USB_CONTEXT_H_
+
+#include "base/basictypes.h"
+#include "base/memory/ref_counted.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/threading/thread_checker.h"
+#include "components/usb_service/usb_service_export.h"
+
+struct libusb_context;
+
+namespace usb_service {
+
+typedef libusb_context* PlatformUsbContext;
+
+// Ref-counted wrapper for libusb_context*.
+// It also manages the life-cycle of UsbEventHandler.
+// It is a blocking operation to delete UsbContext.
+// Destructor must be called on FILE thread.
+class USB_SERVICE_EXPORT UsbContext
+    : public base::RefCountedThreadSafe<UsbContext> {
+ public:
+  PlatformUsbContext context() const { return context_; }
+
+ protected:
+  friend class UsbService;
+  friend class base::RefCountedThreadSafe<UsbContext>;
+
+  explicit UsbContext(PlatformUsbContext context);
+  virtual ~UsbContext();
+
+ private:
+  class UsbEventHandler;
+  PlatformUsbContext context_;
+  UsbEventHandler* event_handler_;
+  base::ThreadChecker thread_checker_;
+
+  DISALLOW_COPY_AND_ASSIGN(UsbContext);
+};
+
+}  // namespace usb_service
+
+#endif  // COMPONENTS_USB_SERVICE_USB_CONTEXT_H_
diff --git a/components/usb_service/usb_context_unittest.cc b/components/usb_service/usb_context_unittest.cc
new file mode 100644
index 0000000..2722cc5
--- /dev/null
+++ b/components/usb_service/usb_context_unittest.cc
@@ -0,0 +1,53 @@
+// 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.
+
+#include "base/threading/platform_thread.h"
+#include "build/build_config.h"
+#include "components/usb_service/usb_context.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/libusb/src/libusb/libusb.h"
+
+using usb_service::UsbContext;
+using usb_service::PlatformUsbContext;
+
+namespace {
+
+class UsbContextTest : public testing::Test {
+ protected:
+  class UsbContextForTest : public UsbContext {
+   public:
+    explicit UsbContextForTest(PlatformUsbContext context)
+        : UsbContext(context) {}
+
+   private:
+    virtual ~UsbContextForTest() {}
+    DISALLOW_COPY_AND_ASSIGN(UsbContextForTest);
+  };
+};
+
+}  // namespace
+
+#if defined(OS_LINUX)
+// Linux trybot does not support usb.
+#define MAYBE_GracefulShutdown DISABLED_GracefulShutdown
+#elif defined(OS_ANDROID)
+// Android build does not include usb support.
+#define MAYBE_GracefulShutdown DISABLED_GracefulShutdown
+#else
+#define MAYBE_GracefulShutdown GracefulShutdown
+#endif
+
+TEST_F(UsbContextTest, MAYBE_GracefulShutdown) {
+  base::TimeTicks start = base::TimeTicks::Now();
+  {
+    PlatformUsbContext platform_context;
+    ASSERT_EQ(LIBUSB_SUCCESS, libusb_init(&platform_context));
+    scoped_refptr<UsbContextForTest> context(
+        new UsbContextForTest(platform_context));
+  }
+  base::TimeDelta elapse = base::TimeTicks::Now() - start;
+  if (elapse > base::TimeDelta::FromSeconds(2)) {
+    FAIL();
+  }
+}
diff --git a/components/usb_service/usb_device.cc b/components/usb_service/usb_device.cc
new file mode 100644
index 0000000..301e2e3
--- /dev/null
+++ b/components/usb_service/usb_device.cc
@@ -0,0 +1,156 @@
+// 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.
+
+#include "components/usb_service/usb_device.h"
+
+#include <algorithm>
+
+#include "base/stl_util.h"
+#include "components/usb_service/usb_context.h"
+#include "components/usb_service/usb_device_handle.h"
+#include "content/public/browser/browser_thread.h"
+#include "third_party/libusb/src/libusb/libusb.h"
+
+#if defined(OS_CHROMEOS)
+#include "base/sys_info.h"
+#include "chromeos/dbus/dbus_thread_manager.h"
+#include "chromeos/dbus/permission_broker_client.h"
+#endif  // defined(OS_CHROMEOS)
+
+using content::BrowserThread;
+
+namespace {
+
+#if defined(OS_CHROMEOS)
+void OnRequestUsbAccessReplied(
+    const base::Callback<void(bool success)>& callback,
+    bool success) {
+  BrowserThread::PostTask(
+      BrowserThread::FILE, FROM_HERE, base::Bind(callback, success));
+}
+#endif  // defined(OS_CHROMEOS)
+
+}  // namespace
+
+namespace usb_service {
+
+UsbDevice::UsbDevice(scoped_refptr<UsbContext> context,
+                     PlatformUsbDevice platform_device,
+                     uint16 vendor_id,
+                     uint16 product_id,
+                     uint32 unique_id)
+    : platform_device_(platform_device),
+      vendor_id_(vendor_id),
+      product_id_(product_id),
+      unique_id_(unique_id),
+      context_(context) {
+  CHECK(platform_device) << "platform_device cannot be NULL";
+  libusb_ref_device(platform_device);
+}
+
+UsbDevice::UsbDevice()
+    : platform_device_(NULL),
+      vendor_id_(0),
+      product_id_(0),
+      unique_id_(0),
+      context_(NULL) {
+}
+
+UsbDevice::~UsbDevice() {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  for (HandlesVector::iterator it = handles_.begin(); it != handles_.end();
+       ++it) {
+    (*it)->InternalClose();
+  }
+  STLClearObject(&handles_);
+  libusb_unref_device(platform_device_);
+}
+
+#if defined(OS_CHROMEOS)
+
+void UsbDevice::RequestUsbAcess(
+    int interface_id,
+    const base::Callback<void(bool success)>& callback) {
+  DCHECK(thread_checker_.CalledOnValidThread());
+
+  // ChromeOS builds on non-ChromeOS machines (dev) should not attempt to
+  // use permission broker.
+  if (base::SysInfo::IsRunningOnChromeOS()) {
+    chromeos::PermissionBrokerClient* client =
+        chromeos::DBusThreadManager::Get()->GetPermissionBrokerClient();
+    DCHECK(client) << "Could not get permission broker client.";
+    if (!client) {
+      callback.Run(false);
+      return;
+    }
+
+    BrowserThread::PostTask(
+        BrowserThread::UI,
+        FROM_HERE,
+        base::Bind(&chromeos::PermissionBrokerClient::RequestUsbAccess,
+                   base::Unretained(client),
+                   this->vendor_id_,
+                   this->product_id_,
+                   interface_id,
+                   base::Bind(&OnRequestUsbAccessReplied, callback)));
+  }
+}
+
+#endif
+
+scoped_refptr<UsbDeviceHandle> UsbDevice::Open() {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  PlatformUsbDeviceHandle handle;
+  int rv = libusb_open(platform_device_, &handle);
+  if (LIBUSB_SUCCESS == rv) {
+    scoped_refptr<UsbConfigDescriptor> interfaces = ListInterfaces();
+    if (!interfaces)
+      return NULL;
+    scoped_refptr<UsbDeviceHandle> device_handle =
+        new UsbDeviceHandle(context_, this, handle, interfaces);
+    handles_.push_back(device_handle);
+    return device_handle;
+  }
+  return NULL;
+}
+
+bool UsbDevice::Close(scoped_refptr<UsbDeviceHandle> handle) {
+  DCHECK(thread_checker_.CalledOnValidThread());
+
+  for (HandlesVector::iterator it = handles_.begin(); it != handles_.end();
+       ++it) {
+    if (*it == handle) {
+      (*it)->InternalClose();
+      handles_.erase(it);
+      return true;
+    }
+  }
+  return false;
+}
+
+scoped_refptr<UsbConfigDescriptor> UsbDevice::ListInterfaces() {
+  DCHECK(thread_checker_.CalledOnValidThread());
+
+  PlatformUsbConfigDescriptor platform_config;
+  const int list_result =
+      libusb_get_active_config_descriptor(platform_device_, &platform_config);
+  if (list_result == 0)
+    return new UsbConfigDescriptor(platform_config);
+
+  return NULL;
+}
+
+void UsbDevice::OnDisconnect() {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  HandlesVector handles;
+  swap(handles, handles_);
+  for (std::vector<scoped_refptr<UsbDeviceHandle> >::iterator it =
+           handles.begin();
+       it != handles.end();
+       ++it) {
+    (*it)->InternalClose();
+  }
+}
+
+}  // namespace usb_service
diff --git a/components/usb_service/usb_device.h b/components/usb_service/usb_device.h
new file mode 100644
index 0000000..2de4193
--- /dev/null
+++ b/components/usb_service/usb_device.h
@@ -0,0 +1,101 @@
+// 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.
+
+#ifndef COMPONENTS_USB_SERVICE_USB_DEVICE_H_
+#define COMPONENTS_USB_SERVICE_USB_DEVICE_H_
+
+#include <vector>
+
+#include "base/basictypes.h"
+#include "base/callback.h"
+#include "base/memory/ref_counted.h"
+#include "base/threading/thread_checker.h"
+#include "components/usb_service/usb_interface.h"
+#include "components/usb_service/usb_service_export.h"
+
+struct libusb_device;
+
+namespace usb_service {
+
+class UsbDeviceHandle;
+class UsbContext;
+
+typedef libusb_device* PlatformUsbDevice;
+
+// A UsbDevice object represents a detected USB device, providing basic
+// information about it. For further manipulation of the device, a
+// UsbDeviceHandle must be created from Open() method.
+class USB_SERVICE_EXPORT UsbDevice
+    : public base::RefCountedThreadSafe<UsbDevice> {
+ public:
+  // Accessors to basic information.
+  PlatformUsbDevice platform_device() const { return platform_device_; }
+  uint16 vendor_id() const { return vendor_id_; }
+  uint16 product_id() const { return product_id_; }
+  uint32 unique_id() const { return unique_id_; }
+
+#if defined(OS_CHROMEOS)
+  // On ChromeOS, if an interface of a claimed device is not claimed, the
+  // permission broker can change the owner of the device so that the unclaimed
+  // interfaces can be used. If this argument is missing, permission broker will
+  // not be used and this method fails if the device is claimed.
+  virtual void RequestUsbAcess(
+      int interface_id,
+      const base::Callback<void(bool success)>& callback);
+#endif  // OS_CHROMEOS
+
+  // Creates a UsbDeviceHandle for further manipulation.
+  // Blocking method. Must be called on FILE thread.
+  virtual scoped_refptr<UsbDeviceHandle> Open();
+
+  // Explicitly closes a device handle. This method will be automatically called
+  // by the destructor of a UsbDeviceHandle as well.
+  // Closing a closed handle is a safe
+  // Blocking method. Must be called on FILE thread.
+  virtual bool Close(scoped_refptr<UsbDeviceHandle> handle);
+
+  // Lists the interfaces provided by the device and fills the given
+  // UsbConfigDescriptor.
+  // Blocking method. Must be called on FILE thread.
+  virtual scoped_refptr<UsbConfigDescriptor> ListInterfaces();
+
+ protected:
+  friend class UsbService;
+  friend class base::RefCountedThreadSafe<UsbDevice>;
+
+  // Called by UsbService only;
+  UsbDevice(scoped_refptr<UsbContext> context,
+            PlatformUsbDevice platform_device,
+            uint16 vendor_id,
+            uint16 product_id,
+            uint32 unique_id);
+
+  // Constructor called in test only.
+  UsbDevice();
+  virtual ~UsbDevice();
+
+  // Called only be UsbService.
+  virtual void OnDisconnect();
+
+ private:
+  PlatformUsbDevice platform_device_;
+  uint16 vendor_id_;
+  uint16 product_id_;
+  uint32 unique_id_;
+
+  // Retain the context so that it will not be released before UsbDevice.
+  scoped_refptr<UsbContext> context_;
+
+  // Opened handles.
+  typedef std::vector<scoped_refptr<UsbDeviceHandle> > HandlesVector;
+  HandlesVector handles_;
+
+  base::ThreadChecker thread_checker_;
+
+  DISALLOW_COPY_AND_ASSIGN(UsbDevice);
+};
+
+}  // namespace usb_service
+
+#endif  // COMPONENTS_USB_SERVICE_USB_DEVICE_H_
diff --git a/components/usb_service/usb_device_handle.cc b/components/usb_service/usb_device_handle.cc
new file mode 100644
index 0000000..e9b9fcc
--- /dev/null
+++ b/components/usb_service/usb_device_handle.cc
@@ -0,0 +1,658 @@
+// 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.
+
+#include "components/usb_service/usb_device_handle.h"
+
+#include <algorithm>
+#include <vector>
+
+#include "base/message_loop/message_loop.h"
+#include "base/stl_util.h"
+#include "base/strings/string16.h"
+#include "base/synchronization/lock.h"
+#include "components/usb_service/usb_context.h"
+#include "components/usb_service/usb_device.h"
+#include "components/usb_service/usb_interface.h"
+#include "components/usb_service/usb_service.h"
+#include "content/public/browser/browser_thread.h"
+#include "third_party/libusb/src/libusb/libusb.h"
+
+using content::BrowserThread;
+
+namespace usb_service {
+
+void HandleTransferCompletion(usb_service::PlatformUsbTransferHandle transfer);
+
+namespace {
+
+static uint8 ConvertTransferDirection(const UsbEndpointDirection direction) {
+  switch (direction) {
+    case USB_DIRECTION_INBOUND:
+      return LIBUSB_ENDPOINT_IN;
+    case USB_DIRECTION_OUTBOUND:
+      return LIBUSB_ENDPOINT_OUT;
+    default:
+      NOTREACHED();
+      return LIBUSB_ENDPOINT_IN;
+  }
+}
+
+static uint8 CreateRequestType(
+    const UsbEndpointDirection direction,
+    const UsbDeviceHandle::TransferRequestType request_type,
+    const UsbDeviceHandle::TransferRecipient recipient) {
+  uint8 result = ConvertTransferDirection(direction);
+
+  switch (request_type) {
+    case UsbDeviceHandle::STANDARD:
+      result |= LIBUSB_REQUEST_TYPE_STANDARD;
+      break;
+    case UsbDeviceHandle::CLASS:
+      result |= LIBUSB_REQUEST_TYPE_CLASS;
+      break;
+    case UsbDeviceHandle::VENDOR:
+      result |= LIBUSB_REQUEST_TYPE_VENDOR;
+      break;
+    case UsbDeviceHandle::RESERVED:
+      result |= LIBUSB_REQUEST_TYPE_RESERVED;
+      break;
+  }
+
+  switch (recipient) {
+    case UsbDeviceHandle::DEVICE:
+      result |= LIBUSB_RECIPIENT_DEVICE;
+      break;
+    case UsbDeviceHandle::INTERFACE:
+      result |= LIBUSB_RECIPIENT_INTERFACE;
+      break;
+    case UsbDeviceHandle::ENDPOINT:
+      result |= LIBUSB_RECIPIENT_ENDPOINT;
+      break;
+    case UsbDeviceHandle::OTHER:
+      result |= LIBUSB_RECIPIENT_OTHER;
+      break;
+  }
+
+  return result;
+}
+
+static UsbTransferStatus ConvertTransferStatus(
+    const libusb_transfer_status status) {
+  switch (status) {
+    case LIBUSB_TRANSFER_COMPLETED:
+      return USB_TRANSFER_COMPLETED;
+    case LIBUSB_TRANSFER_ERROR:
+      return USB_TRANSFER_ERROR;
+    case LIBUSB_TRANSFER_TIMED_OUT:
+      return USB_TRANSFER_TIMEOUT;
+    case LIBUSB_TRANSFER_STALL:
+      return USB_TRANSFER_STALLED;
+    case LIBUSB_TRANSFER_NO_DEVICE:
+      return USB_TRANSFER_DISCONNECT;
+    case LIBUSB_TRANSFER_OVERFLOW:
+      return USB_TRANSFER_OVERFLOW;
+    case LIBUSB_TRANSFER_CANCELLED:
+      return USB_TRANSFER_CANCELLED;
+    default:
+      NOTREACHED();
+      return USB_TRANSFER_ERROR;
+  }
+}
+
+static void LIBUSB_CALL
+PlatformTransferCompletionCallback(PlatformUsbTransferHandle transfer) {
+  BrowserThread::PostTask(BrowserThread::FILE,
+                          FROM_HERE,
+                          base::Bind(HandleTransferCompletion, transfer));
+}
+
+}  // namespace
+
+void HandleTransferCompletion(PlatformUsbTransferHandle transfer) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
+  UsbDeviceHandle* const device_handle =
+      reinterpret_cast<UsbDeviceHandle*>(transfer->user_data);
+  CHECK(device_handle) << "Device handle is closed before transfer finishes.";
+  device_handle->TransferComplete(transfer);
+  libusb_free_transfer(transfer);
+}
+
+class UsbDeviceHandle::InterfaceClaimer
+    : public base::RefCountedThreadSafe<UsbDeviceHandle::InterfaceClaimer> {
+ public:
+  InterfaceClaimer(const scoped_refptr<UsbDeviceHandle> handle,
+                   const int interface_number);
+
+  bool Claim() const;
+
+  int alternate_setting() const { return alternate_setting_; }
+  void set_alternate_setting(const int alternate_setting) {
+    alternate_setting_ = alternate_setting;
+  }
+
+ private:
+  friend class UsbDevice;
+  friend class base::RefCountedThreadSafe<InterfaceClaimer>;
+  ~InterfaceClaimer();
+
+  const scoped_refptr<UsbDeviceHandle> handle_;
+  const int interface_number_;
+  int alternate_setting_;
+
+  DISALLOW_COPY_AND_ASSIGN(InterfaceClaimer);
+};
+
+UsbDeviceHandle::InterfaceClaimer::InterfaceClaimer(
+    const scoped_refptr<UsbDeviceHandle> handle,
+    const int interface_number)
+    : handle_(handle),
+      interface_number_(interface_number),
+      alternate_setting_(0) {
+}
+
+UsbDeviceHandle::InterfaceClaimer::~InterfaceClaimer() {
+  libusb_release_interface(handle_->handle(), interface_number_);
+}
+
+bool UsbDeviceHandle::InterfaceClaimer::Claim() const {
+  return libusb_claim_interface(handle_->handle(), interface_number_) == 0;
+}
+
+struct UsbDeviceHandle::Transfer {
+  Transfer();
+  ~Transfer();
+
+  UsbTransferType transfer_type;
+  scoped_refptr<net::IOBuffer> buffer;
+  scoped_refptr<UsbDeviceHandle::InterfaceClaimer> claimed_interface;
+  scoped_refptr<base::MessageLoopProxy> message_loop_proxy;
+  size_t length;
+  UsbTransferCallback callback;
+};
+
+UsbDeviceHandle::Transfer::Transfer()
+    : transfer_type(USB_TRANSFER_CONTROL), length(0) {
+}
+
+UsbDeviceHandle::Transfer::~Transfer() {
+}
+
+UsbDeviceHandle::UsbDeviceHandle(scoped_refptr<UsbContext> context,
+                                 UsbDevice* device,
+                                 PlatformUsbDeviceHandle handle,
+                                 scoped_refptr<UsbConfigDescriptor> interfaces)
+    : device_(device),
+      handle_(handle),
+      interfaces_(interfaces),
+      context_(context) {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  DCHECK(handle) << "Cannot create device with NULL handle.";
+  DCHECK(interfaces_) << "Unabled to list interfaces";
+}
+
+UsbDeviceHandle::UsbDeviceHandle() : device_(NULL), handle_(NULL) {
+}
+
+UsbDeviceHandle::~UsbDeviceHandle() {
+  DCHECK(thread_checker_.CalledOnValidThread());
+
+  libusb_close(handle_);
+  handle_ = NULL;
+}
+
+scoped_refptr<UsbDevice> UsbDeviceHandle::device() const {
+  return device_;
+}
+
+void UsbDeviceHandle::Close() {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  if (device_)
+    device_->Close(this);
+}
+
+void UsbDeviceHandle::TransferComplete(PlatformUsbTransferHandle handle) {
+  DCHECK(ContainsKey(transfers_, handle)) << "Missing transfer completed";
+
+  Transfer transfer = transfers_[handle];
+  transfers_.erase(handle);
+
+  DCHECK_GE(handle->actual_length, 0) << "Negative actual length received";
+  size_t actual_length =
+      static_cast<size_t>(std::max(handle->actual_length, 0));
+
+  DCHECK(transfer.length >= actual_length)
+      << "data too big for our buffer (libusb failure?)";
+
+  scoped_refptr<net::IOBuffer> buffer = transfer.buffer;
+  switch (transfer.transfer_type) {
+    case USB_TRANSFER_CONTROL:
+      // If the transfer is a control transfer we do not expose the control
+      // setup header to the caller. This logic strips off the header if
+      // present before invoking the callback provided with the transfer.
+      if (actual_length > 0) {
+        CHECK(transfer.length >= LIBUSB_CONTROL_SETUP_SIZE)
+            << "buffer was not correctly set: too small for the control header";
+
+        if (transfer.length >= actual_length &&
+            actual_length >= LIBUSB_CONTROL_SETUP_SIZE) {
+          // If the payload is zero bytes long, pad out the allocated buffer
+          // size to one byte so that an IOBuffer of that size can be allocated.
+          scoped_refptr<net::IOBuffer> resized_buffer =
+              new net::IOBuffer(static_cast<int>(
+                  std::max(actual_length, static_cast<size_t>(1))));
+          memcpy(resized_buffer->data(),
+                 buffer->data() + LIBUSB_CONTROL_SETUP_SIZE,
+                 actual_length);
+          buffer = resized_buffer;
+        }
+      }
+      break;
+
+    case USB_TRANSFER_ISOCHRONOUS:
+      // Isochronous replies might carry data in the different isoc packets even
+      // if the transfer actual_data value is zero. Furthermore, not all of the
+      // received packets might contain data, so we need to calculate how many
+      // data bytes we are effectively providing and pack the results.
+      if (actual_length == 0) {
+        size_t packet_buffer_start = 0;
+        for (int i = 0; i < handle->num_iso_packets; ++i) {
+          PlatformUsbIsoPacketDescriptor packet = &handle->iso_packet_desc[i];
+          if (packet->actual_length > 0) {
+            // We don't need to copy as long as all packets until now provide
+            // all the data the packet can hold.
+            if (actual_length < packet_buffer_start) {
+              CHECK(packet_buffer_start + packet->actual_length <=
+                    transfer.length);
+              memmove(buffer->data() + actual_length,
+                      buffer->data() + packet_buffer_start,
+                      packet->actual_length);
+            }
+            actual_length += packet->actual_length;
+          }
+
+          packet_buffer_start += packet->length;
+        }
+      }
+      break;
+
+    case USB_TRANSFER_BULK:
+    case USB_TRANSFER_INTERRUPT:
+      break;
+
+    default:
+      NOTREACHED() << "Invalid usb transfer type";
+      break;
+  }
+
+  transfer.message_loop_proxy->PostTask(
+      FROM_HERE,
+      base::Bind(transfer.callback,
+                 ConvertTransferStatus(handle->status),
+                 buffer,
+                 actual_length));
+
+  // Must release interface first before actually delete this.
+  transfer.claimed_interface = NULL;
+}
+
+bool UsbDeviceHandle::ClaimInterface(const int interface_number) {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  if (!device_)
+    return false;
+  if (ContainsKey(claimed_interfaces_, interface_number))
+    return true;
+
+  scoped_refptr<InterfaceClaimer> claimer =
+      new InterfaceClaimer(this, interface_number);
+
+  if (claimer->Claim()) {
+    claimed_interfaces_[interface_number] = claimer;
+    RefreshEndpointMap();
+    return true;
+  }
+  return false;
+}
+
+bool UsbDeviceHandle::ReleaseInterface(const int interface_number) {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  if (!device_)
+    return false;
+  if (!ContainsKey(claimed_interfaces_, interface_number))
+    return false;
+
+  // Cancel all the transfers on that interface.
+  InterfaceClaimer* interface_claimer =
+      claimed_interfaces_[interface_number].get();
+  for (TransferMap::iterator it = transfers_.begin(); it != transfers_.end();
+       ++it) {
+    if (it->second.claimed_interface.get() == interface_claimer)
+      libusb_cancel_transfer(it->first);
+  }
+  claimed_interfaces_.erase(interface_number);
+
+  RefreshEndpointMap();
+  return true;
+}
+
+bool UsbDeviceHandle::SetInterfaceAlternateSetting(
+    const int interface_number,
+    const int alternate_setting) {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  if (!device_)
+    return false;
+  if (!ContainsKey(claimed_interfaces_, interface_number))
+    return false;
+  const int rv = libusb_set_interface_alt_setting(
+      handle_, interface_number, alternate_setting);
+  if (rv == 0) {
+    claimed_interfaces_[interface_number]->set_alternate_setting(
+        alternate_setting);
+    RefreshEndpointMap();
+    return true;
+  }
+  return false;
+}
+
+bool UsbDeviceHandle::ResetDevice() {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  if (!device_)
+    return false;
+
+  return libusb_reset_device(handle_) == 0;
+}
+
+bool UsbDeviceHandle::GetSerial(base::string16* serial) {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  PlatformUsbDevice device = libusb_get_device(handle_);
+  libusb_device_descriptor desc;
+
+  if (libusb_get_device_descriptor(device, &desc) != LIBUSB_SUCCESS)
+    return false;
+
+  if (desc.iSerialNumber == 0)
+    return false;
+
+  // Getting supported language ID.
+  uint16 langid[128] = {0};
+
+  int size =
+      libusb_get_string_descriptor(handle_,
+                                   0,
+                                   0,
+                                   reinterpret_cast<unsigned char*>(&langid[0]),
+                                   sizeof(langid));
+  if (size < 0)
+    return false;
+
+  int language_count = (size - 2) / 2;
+
+  for (int i = 1; i <= language_count; ++i) {
+    // Get the string using language ID.
+    base::char16 text[256] = {0};
+    size =
+        libusb_get_string_descriptor(handle_,
+                                     desc.iSerialNumber,
+                                     langid[i],
+                                     reinterpret_cast<unsigned char*>(&text[0]),
+                                     sizeof(text));
+    if (size <= 2)
+      continue;
+    if ((text[0] >> 8) != LIBUSB_DT_STRING)
+      continue;
+    if ((text[0] & 255) > size)
+      continue;
+
+    size = size / 2 - 1;
+    *serial = base::string16(text + 1, size);
+    return true;
+  }
+  return false;
+}
+
+void UsbDeviceHandle::ControlTransfer(const UsbEndpointDirection direction,
+                                      const TransferRequestType request_type,
+                                      const TransferRecipient recipient,
+                                      const uint8 request,
+                                      const uint16 value,
+                                      const uint16 index,
+                                      net::IOBuffer* buffer,
+                                      const size_t length,
+                                      const unsigned int timeout,
+                                      const UsbTransferCallback& callback) {
+  if (!device_) {
+    callback.Run(USB_TRANSFER_DISCONNECT, buffer, 0);
+    return;
+  }
+
+  const size_t resized_length = LIBUSB_CONTROL_SETUP_SIZE + length;
+  scoped_refptr<net::IOBuffer> resized_buffer(
+      new net::IOBufferWithSize(static_cast<int>(resized_length)));
+  if (!resized_buffer) {
+    callback.Run(USB_TRANSFER_ERROR, buffer, 0);
+    return;
+  }
+  memcpy(resized_buffer->data() + LIBUSB_CONTROL_SETUP_SIZE,
+         buffer->data(),
+         static_cast<int>(length));
+
+  PlatformUsbTransferHandle const transfer = libusb_alloc_transfer(0);
+  const uint8 converted_type =
+      CreateRequestType(direction, request_type, recipient);
+  libusb_fill_control_setup(reinterpret_cast<uint8*>(resized_buffer->data()),
+                            converted_type,
+                            request,
+                            value,
+                            index,
+                            static_cast<int16>(length));
+  libusb_fill_control_transfer(transfer,
+                               handle_,
+                               reinterpret_cast<uint8*>(resized_buffer->data()),
+                               PlatformTransferCompletionCallback,
+                               this,
+                               timeout);
+
+  BrowserThread::PostTask(BrowserThread::FILE,
+                          FROM_HERE,
+                          base::Bind(&UsbDeviceHandle::SubmitTransfer,
+                                     this,
+                                     transfer,
+                                     USB_TRANSFER_CONTROL,
+                                     resized_buffer,
+                                     resized_length,
+                                     base::MessageLoopProxy::current(),
+                                     callback));
+}
+
+void UsbDeviceHandle::BulkTransfer(const UsbEndpointDirection direction,
+                                   const uint8 endpoint,
+                                   net::IOBuffer* buffer,
+                                   const size_t length,
+                                   const unsigned int timeout,
+                                   const UsbTransferCallback& callback) {
+  if (!device_) {
+    callback.Run(USB_TRANSFER_DISCONNECT, buffer, 0);
+    return;
+  }
+
+  PlatformUsbTransferHandle const transfer = libusb_alloc_transfer(0);
+  const uint8 new_endpoint = ConvertTransferDirection(direction) | endpoint;
+  libusb_fill_bulk_transfer(transfer,
+                            handle_,
+                            new_endpoint,
+                            reinterpret_cast<uint8*>(buffer->data()),
+                            static_cast<int>(length),
+                            PlatformTransferCompletionCallback,
+                            this,
+                            timeout);
+
+  BrowserThread::PostTask(BrowserThread::FILE,
+                          FROM_HERE,
+                          base::Bind(&UsbDeviceHandle::SubmitTransfer,
+                                     this,
+                                     transfer,
+                                     USB_TRANSFER_BULK,
+                                     make_scoped_refptr(buffer),
+                                     length,
+                                     base::MessageLoopProxy::current(),
+                                     callback));
+}
+
+void UsbDeviceHandle::InterruptTransfer(const UsbEndpointDirection direction,
+                                        const uint8 endpoint,
+                                        net::IOBuffer* buffer,
+                                        const size_t length,
+                                        const unsigned int timeout,
+                                        const UsbTransferCallback& callback) {
+  if (!device_) {
+    callback.Run(USB_TRANSFER_DISCONNECT, buffer, 0);
+    return;
+  }
+
+  PlatformUsbTransferHandle const transfer = libusb_alloc_transfer(0);
+  const uint8 new_endpoint = ConvertTransferDirection(direction) | endpoint;
+  libusb_fill_interrupt_transfer(transfer,
+                                 handle_,
+                                 new_endpoint,
+                                 reinterpret_cast<uint8*>(buffer->data()),
+                                 static_cast<int>(length),
+                                 PlatformTransferCompletionCallback,
+                                 this,
+                                 timeout);
+  BrowserThread::PostTask(BrowserThread::FILE,
+                          FROM_HERE,
+                          base::Bind(&UsbDeviceHandle::SubmitTransfer,
+                                     this,
+                                     transfer,
+                                     USB_TRANSFER_INTERRUPT,
+                                     make_scoped_refptr(buffer),
+                                     length,
+                                     base::MessageLoopProxy::current(),
+                                     callback));
+}
+
+void UsbDeviceHandle::IsochronousTransfer(const UsbEndpointDirection direction,
+                                          const uint8 endpoint,
+                                          net::IOBuffer* buffer,
+                                          const size_t length,
+                                          const unsigned int packets,
+                                          const unsigned int packet_length,
+                                          const unsigned int timeout,
+                                          const UsbTransferCallback& callback) {
+  if (!device_) {
+    callback.Run(USB_TRANSFER_DISCONNECT, buffer, 0);
+    return;
+  }
+
+  const uint64 total_length = packets * packet_length;
+  CHECK(packets <= length && total_length <= length)
+      << "transfer length is too small";
+
+  PlatformUsbTransferHandle const transfer = libusb_alloc_transfer(packets);
+  const uint8 new_endpoint = ConvertTransferDirection(direction) | endpoint;
+  libusb_fill_iso_transfer(transfer,
+                           handle_,
+                           new_endpoint,
+                           reinterpret_cast<uint8*>(buffer->data()),
+                           static_cast<int>(length),
+                           packets,
+                           PlatformTransferCompletionCallback,
+                           this,
+                           timeout);
+  libusb_set_iso_packet_lengths(transfer, packet_length);
+
+  BrowserThread::PostTask(BrowserThread::FILE,
+                          FROM_HERE,
+                          base::Bind(&UsbDeviceHandle::SubmitTransfer,
+                                     this,
+                                     transfer,
+                                     USB_TRANSFER_ISOCHRONOUS,
+                                     make_scoped_refptr(buffer),
+                                     length,
+                                     base::MessageLoopProxy::current(),
+                                     callback));
+}
+
+void UsbDeviceHandle::RefreshEndpointMap() {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  endpoint_map_.clear();
+  for (ClaimedInterfaceMap::iterator it = claimed_interfaces_.begin();
+       it != claimed_interfaces_.end();
+       ++it) {
+    scoped_refptr<const UsbInterfaceAltSettingDescriptor> interface_desc =
+        interfaces_->GetInterface(it->first)
+            ->GetAltSetting(it->second->alternate_setting());
+    for (size_t i = 0; i < interface_desc->GetNumEndpoints(); i++) {
+      scoped_refptr<const UsbEndpointDescriptor> endpoint =
+          interface_desc->GetEndpoint(i);
+      endpoint_map_[endpoint->GetAddress()] = it->first;
+    }
+  }
+}
+
+scoped_refptr<UsbDeviceHandle::InterfaceClaimer>
+UsbDeviceHandle::GetClaimedInterfaceForEndpoint(unsigned char endpoint) {
+  unsigned char address = endpoint & LIBUSB_ENDPOINT_ADDRESS_MASK;
+  if (ContainsKey(endpoint_map_, address))
+    return claimed_interfaces_[endpoint_map_[address]];
+  return NULL;
+}
+
+void UsbDeviceHandle::SubmitTransfer(
+    PlatformUsbTransferHandle handle,
+    UsbTransferType transfer_type,
+    net::IOBuffer* buffer,
+    const size_t length,
+    scoped_refptr<base::MessageLoopProxy> message_loop_proxy,
+    const UsbTransferCallback& callback) {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  if (!device_) {
+    message_loop_proxy->PostTask(
+        FROM_HERE,
+        base::Bind(
+            callback, USB_TRANSFER_DISCONNECT, make_scoped_refptr(buffer), 0));
+  }
+
+  Transfer transfer;
+  transfer.transfer_type = transfer_type;
+  transfer.buffer = buffer;
+  transfer.length = length;
+  transfer.callback = callback;
+  transfer.message_loop_proxy = message_loop_proxy;
+
+  // It's OK for this method to return NULL. libusb_submit_transfer will fail if
+  // it requires an interface we didn't claim.
+  transfer.claimed_interface = GetClaimedInterfaceForEndpoint(handle->endpoint);
+
+  if (libusb_submit_transfer(handle) == LIBUSB_SUCCESS) {
+    transfers_[handle] = transfer;
+  } else {
+    message_loop_proxy->PostTask(
+        FROM_HERE,
+        base::Bind(
+            callback, USB_TRANSFER_ERROR, make_scoped_refptr(buffer), 0));
+  }
+}
+
+void UsbDeviceHandle::InternalClose() {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  if (!device_)
+    return;
+
+  // Cancel all the transfers.
+  for (TransferMap::iterator it = transfers_.begin(); it != transfers_.end();
+       ++it) {
+    // The callback will be called some time later.
+    libusb_cancel_transfer(it->first);
+  }
+
+  // Attempt-release all the interfaces.
+  // It will be retained until the transfer cancellation is finished.
+  claimed_interfaces_.clear();
+
+  // Cannot close device handle here. Need to wait for libusb_cancel_transfer to
+  // finish.
+  device_ = NULL;
+}
+
+}  // namespace usb_service
diff --git a/components/usb_service/usb_device_handle.h b/components/usb_service/usb_device_handle.h
new file mode 100644
index 0000000..60b7c64
--- /dev/null
+++ b/components/usb_service/usb_device_handle.h
@@ -0,0 +1,186 @@
+// 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.
+
+#ifndef COMPONENTS_USB_SERVICE_USB_DEVICE_HANDLE_H_
+#define COMPONENTS_USB_SERVICE_USB_DEVICE_HANDLE_H_
+
+#include <map>
+#include <vector>
+
+#include "base/callback.h"
+#include "base/memory/ref_counted.h"
+#include "base/strings/string16.h"
+#include "base/threading/thread_checker.h"
+#include "components/usb_service/usb_interface.h"
+#include "components/usb_service/usb_service_export.h"
+#include "net/base/io_buffer.h"
+
+struct libusb_device_handle;
+struct libusb_iso_packet_descriptor;
+struct libusb_transfer;
+
+namespace base {
+class MessageLoopProxy;
+}
+
+namespace usb_service {
+
+class UsbContext;
+class UsbConfigDescriptor;
+class UsbDevice;
+
+typedef libusb_device_handle* PlatformUsbDeviceHandle;
+typedef libusb_iso_packet_descriptor* PlatformUsbIsoPacketDescriptor;
+typedef libusb_transfer* PlatformUsbTransferHandle;
+
+enum UsbTransferStatus {
+  USB_TRANSFER_COMPLETED = 0,
+  USB_TRANSFER_ERROR,
+  USB_TRANSFER_TIMEOUT,
+  USB_TRANSFER_CANCELLED,
+  USB_TRANSFER_STALLED,
+  USB_TRANSFER_DISCONNECT,
+  USB_TRANSFER_OVERFLOW,
+  USB_TRANSFER_LENGTH_SHORT,
+};
+
+typedef base::Callback<
+    void(UsbTransferStatus, scoped_refptr<net::IOBuffer>, size_t)>
+    UsbTransferCallback;
+
+// UsbDeviceHandle class provides basic I/O related functionalities.
+class USB_SERVICE_EXPORT UsbDeviceHandle
+    : public base::RefCountedThreadSafe<UsbDeviceHandle> {
+ public:
+  enum TransferRequestType { STANDARD, CLASS, VENDOR, RESERVED };
+  enum TransferRecipient { DEVICE, INTERFACE, ENDPOINT, OTHER };
+
+  scoped_refptr<UsbDevice> device() const;
+  PlatformUsbDeviceHandle handle() const { return handle_; }
+
+  // Notifies UsbDevice to drop the reference of this object; cancels all the
+  // flying transfers.
+  // It is possible that the object has no other reference after this call. So
+  // if it is called using a raw pointer, it could be invalidated.
+  // The platform device handle will be closed when UsbDeviceHandle destructs.
+  virtual void Close();
+
+  // Device manipulation operations. These methods are blocking and must be
+  // called on FILE thread.
+  virtual bool ClaimInterface(const int interface_number);
+  virtual bool ReleaseInterface(const int interface_number);
+  virtual bool SetInterfaceAlternateSetting(const int interface_number,
+                                            const int alternate_setting);
+  virtual bool ResetDevice();
+  virtual bool GetSerial(base::string16* serial);
+
+  // Async IO. Can be called on any thread.
+  virtual void ControlTransfer(const UsbEndpointDirection direction,
+                               const TransferRequestType request_type,
+                               const TransferRecipient recipient,
+                               const uint8 request,
+                               const uint16 value,
+                               const uint16 index,
+                               net::IOBuffer* buffer,
+                               const size_t length,
+                               const unsigned int timeout,
+                               const UsbTransferCallback& callback);
+
+  virtual void BulkTransfer(const UsbEndpointDirection direction,
+                            const uint8 endpoint,
+                            net::IOBuffer* buffer,
+                            const size_t length,
+                            const unsigned int timeout,
+                            const UsbTransferCallback& callback);
+
+  virtual void InterruptTransfer(const UsbEndpointDirection direction,
+                                 const uint8 endpoint,
+                                 net::IOBuffer* buffer,
+                                 const size_t length,
+                                 const unsigned int timeout,
+                                 const UsbTransferCallback& callback);
+
+  virtual void IsochronousTransfer(const UsbEndpointDirection direction,
+                                   const uint8 endpoint,
+                                   net::IOBuffer* buffer,
+                                   const size_t length,
+                                   const unsigned int packets,
+                                   const unsigned int packet_length,
+                                   const unsigned int timeout,
+                                   const UsbTransferCallback& callback);
+
+ protected:
+  friend class base::RefCountedThreadSafe<UsbDeviceHandle>;
+  friend class UsbDevice;
+
+  // This constructor is called by UsbDevice.
+  UsbDeviceHandle(scoped_refptr<UsbContext> context,
+                  UsbDevice* device,
+                  PlatformUsbDeviceHandle handle,
+                  scoped_refptr<UsbConfigDescriptor> interfaces);
+
+  // This constructor variant is for use in testing only.
+  UsbDeviceHandle();
+  virtual ~UsbDeviceHandle();
+
+  UsbDevice* device_;
+
+ private:
+  friend void HandleTransferCompletion(PlatformUsbTransferHandle handle);
+
+  class InterfaceClaimer;
+  struct Transfer;
+
+  // Refresh endpoint_map_ after ClaimInterface, ReleaseInterface and
+  // SetInterfaceAlternateSetting.
+  void RefreshEndpointMap();
+
+  // Look up the claimed interface by endpoint. Return NULL if the interface
+  // of the endpoint is not found.
+  scoped_refptr<InterfaceClaimer> GetClaimedInterfaceForEndpoint(
+      unsigned char endpoint);
+
+  // Submits a transfer and starts tracking it. Retains the buffer and copies
+  // the completion callback until the transfer finishes, whereupon it invokes
+  // the callback then releases the buffer.
+  void SubmitTransfer(PlatformUsbTransferHandle handle,
+                      UsbTransferType transfer_type,
+                      net::IOBuffer* buffer,
+                      const size_t length,
+                      scoped_refptr<base::MessageLoopProxy> message_loop_proxy,
+                      const UsbTransferCallback& callback);
+
+  // Invokes the callbacks associated with a given transfer, and removes it from
+  // the in-flight transfer set.
+  void TransferComplete(PlatformUsbTransferHandle transfer);
+
+  // Informs the object to drop internal references.
+  void InternalClose();
+
+  PlatformUsbDeviceHandle handle_;
+
+  scoped_refptr<UsbConfigDescriptor> interfaces_;
+
+  typedef std::map<int, scoped_refptr<InterfaceClaimer> > ClaimedInterfaceMap;
+  ClaimedInterfaceMap claimed_interfaces_;
+
+  typedef std::map<PlatformUsbTransferHandle, Transfer> TransferMap;
+  TransferMap transfers_;
+
+  // A map from endpoints to interfaces
+  typedef std::map<int, int> EndpointMap;
+  EndpointMap endpoint_map_;
+
+  // Retain the UsbContext so that the platform context will not be destroyed
+  // before this handle.
+  scoped_refptr<UsbContext> context_;
+
+  base::ThreadChecker thread_checker_;
+
+  DISALLOW_COPY_AND_ASSIGN(UsbDeviceHandle);
+};
+
+}  // namespace usb_service
+
+#endif  // COMPONENTS_USB_SERVICE_USB_DEVICE_HANDLE_H_
diff --git a/components/usb_service/usb_interface.cc b/components/usb_service/usb_interface.cc
new file mode 100644
index 0000000..67f1a9d
--- /dev/null
+++ b/components/usb_service/usb_interface.cc
@@ -0,0 +1,168 @@
+// 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.
+
+#include "components/usb_service/usb_interface.h"
+
+#include "base/logging.h"
+#include "third_party/libusb/src/libusb/libusb.h"
+
+namespace usb_service {
+
+UsbEndpointDescriptor::UsbEndpointDescriptor(
+    scoped_refptr<const UsbConfigDescriptor> config,
+    PlatformUsbEndpointDescriptor descriptor)
+    : config_(config), descriptor_(descriptor) {
+}
+
+UsbEndpointDescriptor::~UsbEndpointDescriptor() {
+}
+
+int UsbEndpointDescriptor::GetAddress() const {
+  return descriptor_->bEndpointAddress & LIBUSB_ENDPOINT_ADDRESS_MASK;
+}
+
+UsbEndpointDirection UsbEndpointDescriptor::GetDirection() const {
+  switch (descriptor_->bEndpointAddress & LIBUSB_ENDPOINT_DIR_MASK) {
+    case LIBUSB_ENDPOINT_IN:
+      return USB_DIRECTION_INBOUND;
+    case LIBUSB_ENDPOINT_OUT:
+      return USB_DIRECTION_OUTBOUND;
+    default:
+      NOTREACHED();
+      return USB_DIRECTION_INBOUND;
+  }
+}
+
+int UsbEndpointDescriptor::GetMaximumPacketSize() const {
+  return descriptor_->wMaxPacketSize;
+}
+
+UsbSynchronizationType UsbEndpointDescriptor::GetSynchronizationType() const {
+  switch (descriptor_->bmAttributes & LIBUSB_ISO_SYNC_TYPE_MASK) {
+    case LIBUSB_ISO_SYNC_TYPE_NONE:
+      return USB_SYNCHRONIZATION_NONE;
+    case LIBUSB_ISO_SYNC_TYPE_ASYNC:
+      return USB_SYNCHRONIZATION_ASYNCHRONOUS;
+    case LIBUSB_ISO_SYNC_TYPE_ADAPTIVE:
+      return USB_SYNCHRONIZATION_ADAPTIVE;
+    case LIBUSB_ISO_SYNC_TYPE_SYNC:
+      return USB_SYNCHRONIZATION_SYNCHRONOUS;
+    default:
+      NOTREACHED();
+      return USB_SYNCHRONIZATION_NONE;
+  }
+}
+
+UsbTransferType UsbEndpointDescriptor::GetTransferType() const {
+  switch (descriptor_->bmAttributes & LIBUSB_TRANSFER_TYPE_MASK) {
+    case LIBUSB_TRANSFER_TYPE_CONTROL:
+      return USB_TRANSFER_CONTROL;
+    case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS:
+      return USB_TRANSFER_ISOCHRONOUS;
+    case LIBUSB_TRANSFER_TYPE_BULK:
+      return USB_TRANSFER_BULK;
+    case LIBUSB_TRANSFER_TYPE_INTERRUPT:
+      return USB_TRANSFER_INTERRUPT;
+    default:
+      NOTREACHED();
+      return USB_TRANSFER_CONTROL;
+  }
+}
+
+UsbUsageType UsbEndpointDescriptor::GetUsageType() const {
+  switch (descriptor_->bmAttributes & LIBUSB_ISO_USAGE_TYPE_MASK) {
+    case LIBUSB_ISO_USAGE_TYPE_DATA:
+      return USB_USAGE_DATA;
+    case LIBUSB_ISO_USAGE_TYPE_FEEDBACK:
+      return USB_USAGE_FEEDBACK;
+    case LIBUSB_ISO_USAGE_TYPE_IMPLICIT:
+      return USB_USAGE_EXPLICIT_FEEDBACK;
+    default:
+      NOTREACHED();
+      return USB_USAGE_DATA;
+  }
+}
+
+int UsbEndpointDescriptor::GetPollingInterval() const {
+  return descriptor_->bInterval;
+}
+
+UsbInterfaceAltSettingDescriptor::UsbInterfaceAltSettingDescriptor(
+    scoped_refptr<const UsbConfigDescriptor> config,
+    PlatformUsbInterfaceDescriptor descriptor)
+    : config_(config), descriptor_(descriptor) {
+}
+
+UsbInterfaceAltSettingDescriptor::~UsbInterfaceAltSettingDescriptor() {
+}
+
+size_t UsbInterfaceAltSettingDescriptor::GetNumEndpoints() const {
+  return descriptor_->bNumEndpoints;
+}
+
+scoped_refptr<const UsbEndpointDescriptor>
+UsbInterfaceAltSettingDescriptor::GetEndpoint(size_t index) const {
+  return new UsbEndpointDescriptor(config_, &descriptor_->endpoint[index]);
+}
+
+int UsbInterfaceAltSettingDescriptor::GetInterfaceNumber() const {
+  return descriptor_->bInterfaceNumber;
+}
+
+int UsbInterfaceAltSettingDescriptor::GetAlternateSetting() const {
+  return descriptor_->bAlternateSetting;
+}
+
+int UsbInterfaceAltSettingDescriptor::GetInterfaceClass() const {
+  return descriptor_->bInterfaceClass;
+}
+
+int UsbInterfaceAltSettingDescriptor::GetInterfaceSubclass() const {
+  return descriptor_->bInterfaceSubClass;
+}
+
+int UsbInterfaceAltSettingDescriptor::GetInterfaceProtocol() const {
+  return descriptor_->bInterfaceProtocol;
+}
+
+UsbInterfaceDescriptor::UsbInterfaceDescriptor(
+    scoped_refptr<const UsbConfigDescriptor> config,
+    PlatformUsbInterface usbInterface)
+    : config_(config), interface_(usbInterface) {
+}
+
+UsbInterfaceDescriptor::~UsbInterfaceDescriptor() {
+}
+
+size_t UsbInterfaceDescriptor::GetNumAltSettings() const {
+  return interface_->num_altsetting;
+}
+
+scoped_refptr<const UsbInterfaceAltSettingDescriptor>
+UsbInterfaceDescriptor::GetAltSetting(size_t index) const {
+  return new UsbInterfaceAltSettingDescriptor(config_,
+                                              &interface_->altsetting[index]);
+}
+
+UsbConfigDescriptor::UsbConfigDescriptor(PlatformUsbConfigDescriptor config)
+    : config_(config) {
+}
+
+UsbConfigDescriptor::~UsbConfigDescriptor() {
+  if (config_ != NULL) {
+    libusb_free_config_descriptor(config_);
+    config_ = NULL;
+  }
+}
+
+size_t UsbConfigDescriptor::GetNumInterfaces() const {
+  return config_->bNumInterfaces;
+}
+
+scoped_refptr<const UsbInterfaceDescriptor> UsbConfigDescriptor::GetInterface(
+    size_t index) const {
+  return new UsbInterfaceDescriptor(this, &config_->interface[index]);
+}
+
+}  // namespace usb_service
diff --git a/components/usb_service/usb_interface.h b/components/usb_service/usb_interface.h
new file mode 100644
index 0000000..31e58a2
--- /dev/null
+++ b/components/usb_service/usb_interface.h
@@ -0,0 +1,146 @@
+// 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.
+
+#ifndef COMPONENTS_USB_SERVICE_USB_INTERFACE_H_
+#define COMPONENTS_USB_SERVICE_USB_INTERFACE_H_
+
+#include "base/memory/ref_counted.h"
+#include "components/usb_service/usb_service_export.h"
+
+struct libusb_config_descriptor;
+struct libusb_endpoint_descriptor;
+struct libusb_interface;
+struct libusb_interface_descriptor;
+
+namespace usb_service {
+
+typedef libusb_config_descriptor* PlatformUsbConfigDescriptor;
+typedef const libusb_endpoint_descriptor* PlatformUsbEndpointDescriptor;
+typedef const libusb_interface* PlatformUsbInterface;
+typedef const libusb_interface_descriptor* PlatformUsbInterfaceDescriptor;
+
+enum UsbTransferType {
+  USB_TRANSFER_CONTROL = 0,
+  USB_TRANSFER_ISOCHRONOUS,
+  USB_TRANSFER_BULK,
+  USB_TRANSFER_INTERRUPT,
+};
+
+enum UsbEndpointDirection {
+  USB_DIRECTION_INBOUND = 0,
+  USB_DIRECTION_OUTBOUND,
+};
+
+enum UsbSynchronizationType {
+  USB_SYNCHRONIZATION_NONE = 0,
+  USB_SYNCHRONIZATION_ASYNCHRONOUS,
+  USB_SYNCHRONIZATION_ADAPTIVE,
+  USB_SYNCHRONIZATION_SYNCHRONOUS,
+};
+
+enum UsbUsageType {
+  USB_USAGE_DATA = 0,
+  USB_USAGE_FEEDBACK,
+  USB_USAGE_EXPLICIT_FEEDBACK
+};
+
+class UsbDevice;
+class UsbConfigDescriptor;
+class UsbInterfaceDescriptor;
+class UsbInterfaceAltSettingDescriptor;
+
+class USB_SERVICE_EXPORT UsbEndpointDescriptor
+    : public base::RefCounted<const UsbEndpointDescriptor> {
+ public:
+  int GetAddress() const;
+  UsbEndpointDirection GetDirection() const;
+  int GetMaximumPacketSize() const;
+  UsbSynchronizationType GetSynchronizationType() const;
+  UsbTransferType GetTransferType() const;
+  UsbUsageType GetUsageType() const;
+  int GetPollingInterval() const;
+
+ private:
+  friend class base::RefCounted<const UsbEndpointDescriptor>;
+  friend class UsbInterfaceAltSettingDescriptor;
+
+  UsbEndpointDescriptor(scoped_refptr<const UsbConfigDescriptor> config,
+                        PlatformUsbEndpointDescriptor descriptor);
+  ~UsbEndpointDescriptor();
+
+  scoped_refptr<const UsbConfigDescriptor> config_;
+  PlatformUsbEndpointDescriptor descriptor_;
+
+  DISALLOW_COPY_AND_ASSIGN(UsbEndpointDescriptor);
+};
+
+class USB_SERVICE_EXPORT UsbInterfaceAltSettingDescriptor
+    : public base::RefCounted<const UsbInterfaceAltSettingDescriptor> {
+ public:
+  size_t GetNumEndpoints() const;
+  scoped_refptr<const UsbEndpointDescriptor> GetEndpoint(size_t index) const;
+
+  int GetInterfaceNumber() const;
+  int GetAlternateSetting() const;
+  int GetInterfaceClass() const;
+  int GetInterfaceSubclass() const;
+  int GetInterfaceProtocol() const;
+
+ private:
+  friend class base::RefCounted<const UsbInterfaceAltSettingDescriptor>;
+  friend class UsbInterfaceDescriptor;
+
+  UsbInterfaceAltSettingDescriptor(
+      scoped_refptr<const UsbConfigDescriptor> config,
+      PlatformUsbInterfaceDescriptor descriptor);
+  ~UsbInterfaceAltSettingDescriptor();
+
+  scoped_refptr<const UsbConfigDescriptor> config_;
+  PlatformUsbInterfaceDescriptor descriptor_;
+
+  DISALLOW_COPY_AND_ASSIGN(UsbInterfaceAltSettingDescriptor);
+};
+
+class USB_SERVICE_EXPORT UsbInterfaceDescriptor
+    : public base::RefCounted<const UsbInterfaceDescriptor> {
+ public:
+  size_t GetNumAltSettings() const;
+  scoped_refptr<const UsbInterfaceAltSettingDescriptor> GetAltSetting(
+      size_t index) const;
+
+ private:
+  friend class base::RefCounted<const UsbInterfaceDescriptor>;
+  friend class UsbConfigDescriptor;
+
+  UsbInterfaceDescriptor(scoped_refptr<const UsbConfigDescriptor> config,
+                         PlatformUsbInterface usbInterface);
+  ~UsbInterfaceDescriptor();
+
+  scoped_refptr<const UsbConfigDescriptor> config_;
+  PlatformUsbInterface interface_;
+
+  DISALLOW_COPY_AND_ASSIGN(UsbInterfaceDescriptor);
+};
+
+class USB_SERVICE_EXPORT UsbConfigDescriptor
+    : public base::RefCounted<UsbConfigDescriptor> {
+ public:
+  size_t GetNumInterfaces() const;
+  scoped_refptr<const UsbInterfaceDescriptor> GetInterface(size_t index) const;
+
+ private:
+  friend class base::RefCounted<UsbConfigDescriptor>;
+  friend class UsbDevice;
+
+  explicit UsbConfigDescriptor(PlatformUsbConfigDescriptor config);
+  ~UsbConfigDescriptor();
+
+  PlatformUsbConfigDescriptor config_;
+
+  DISALLOW_COPY_AND_ASSIGN(UsbConfigDescriptor);
+};
+
+}  // namespace usb_service;
+
+#endif  // COMPONENTS_USB_SERVICE_USB_INTERFACE_H_
diff --git a/components/usb_service/usb_service.cc b/components/usb_service/usb_service.cc
new file mode 100644
index 0000000..89b884f
--- /dev/null
+++ b/components/usb_service/usb_service.cc
@@ -0,0 +1,126 @@
+// 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.
+
+#include "components/usb_service/usb_service.h"
+
+#include <set>
+#include <vector>
+
+#include "base/lazy_instance.h"
+#include "base/stl_util.h"
+#include "components/usb_service/usb_context.h"
+#include "components/usb_service/usb_device.h"
+#include "content/public/browser/browser_thread.h"
+#include "third_party/libusb/src/libusb/libusb.h"
+
+namespace usb_service {
+
+namespace {
+
+base::LazyInstance<scoped_ptr<UsbService> >::Leaky g_usb_service_instance =
+    LAZY_INSTANCE_INITIALIZER;
+
+}  // namespace
+
+// static
+UsbService* UsbService::GetInstance() {
+  DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::FILE));
+  UsbService* instance = g_usb_service_instance.Get().get();
+  if (!instance) {
+    PlatformUsbContext context = NULL;
+    if (libusb_init(&context) != LIBUSB_SUCCESS)
+      return NULL;
+    if (!context)
+      return NULL;
+
+    instance = new UsbService(context);
+    g_usb_service_instance.Get().reset(instance);
+  }
+  return instance;
+}
+
+scoped_refptr<UsbDevice> UsbService::GetDeviceById(uint32 unique_id) {
+  DCHECK(CalledOnValidThread());
+  RefreshDevices();
+  for (DeviceMap::iterator it = devices_.begin(); it != devices_.end(); ++it) {
+    if (it->second->unique_id() == unique_id)
+      return it->second;
+  }
+  return NULL;
+}
+
+void UsbService::GetDevices(std::vector<scoped_refptr<UsbDevice> >* devices) {
+  DCHECK(CalledOnValidThread());
+  STLClearObject(devices);
+  RefreshDevices();
+
+  for (DeviceMap::iterator it = devices_.begin(); it != devices_.end(); ++it) {
+    devices->push_back(it->second);
+  }
+}
+
+void UsbService::WillDestroyCurrentMessageLoop() {
+  DCHECK(CalledOnValidThread());
+  g_usb_service_instance.Get().reset(NULL);
+}
+
+UsbService::UsbService(PlatformUsbContext context)
+    : context_(new UsbContext(context)), next_unique_id_(0) {
+  base::MessageLoop::current()->AddDestructionObserver(this);
+}
+
+UsbService::~UsbService() {
+  base::MessageLoop::current()->RemoveDestructionObserver(this);
+  for (DeviceMap::iterator it = devices_.begin(); it != devices_.end(); ++it) {
+    it->second->OnDisconnect();
+  }
+}
+
+void UsbService::RefreshDevices() {
+  DCHECK(CalledOnValidThread());
+
+  libusb_device** platform_devices = NULL;
+  const ssize_t device_count =
+      libusb_get_device_list(context_->context(), &platform_devices);
+
+  std::set<UsbDevice*> connected_devices;
+  std::vector<PlatformUsbDevice> disconnected_devices;
+
+  // Populates new devices.
+  for (ssize_t i = 0; i < device_count; ++i) {
+    if (!ContainsKey(devices_, platform_devices[i])) {
+      libusb_device_descriptor descriptor;
+      // This test is needed. A valid vendor/produce pair is required.
+      if (0 != libusb_get_device_descriptor(platform_devices[i], &descriptor))
+        continue;
+      UsbDevice* new_device = new UsbDevice(context_,
+                                            platform_devices[i],
+                                            descriptor.idVendor,
+                                            descriptor.idProduct,
+                                            ++next_unique_id_);
+      devices_[platform_devices[i]] = new_device;
+      connected_devices.insert(new_device);
+    } else {
+      connected_devices.insert(devices_[platform_devices[i]].get());
+    }
+  }
+
+  // Find disconnected devices.
+  for (DeviceMap::iterator it = devices_.begin(); it != devices_.end(); ++it) {
+    if (!ContainsKey(connected_devices, it->second)) {
+      disconnected_devices.push_back(it->first);
+    }
+  }
+
+  // Remove disconnected devices from devices_.
+  for (size_t i = 0; i < disconnected_devices.size(); ++i) {
+    // UsbDevice will be destroyed after this. The corresponding
+    // PlatformUsbDevice will be unref'ed during this process.
+    devices_.erase(disconnected_devices[i]);
+  }
+
+  libusb_free_device_list(platform_devices, true);
+}
+
+}  // namespace usb_service
diff --git a/components/usb_service/usb_service.h b/components/usb_service/usb_service.h
new file mode 100644
index 0000000..3bf0a40
--- /dev/null
+++ b/components/usb_service/usb_service.h
@@ -0,0 +1,78 @@
+// 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.
+
+#ifndef COMPONENTS_USB_SERVICE_USB_SERVICE_H_
+#define COMPONENTS_USB_SERVICE_USB_SERVICE_H_
+
+#include <map>
+#include <utility>
+#include <vector>
+
+#include "base/basictypes.h"
+#include "base/memory/ref_counted.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/message_loop/message_loop.h"
+#include "base/threading/non_thread_safe.h"
+#include "components/usb_service/usb_service_export.h"
+
+struct libusb_device;
+struct libusb_context;
+
+namespace usb_service {
+
+typedef struct libusb_device* PlatformUsbDevice;
+typedef struct libusb_context* PlatformUsbContext;
+
+class UsbContext;
+class UsbDevice;
+
+// The USB service handles creating and managing an event handler thread that is
+// used to manage and dispatch USB events. It is also responsible for device
+// discovery on the system, which allows it to re-use device handles to prevent
+// competition for the same USB device.
+class USB_SERVICE_EXPORT UsbService
+    : public base::MessageLoop::DestructionObserver,
+      public base::NonThreadSafe {
+ public:
+  typedef scoped_ptr<std::vector<scoped_refptr<UsbDevice> > >
+      ScopedDeviceVector;
+
+  // Must be called on FILE thread.
+  // Returns NULL when failed to initialized.
+  static UsbService* GetInstance();
+
+  scoped_refptr<UsbDevice> GetDeviceById(uint32 unique_id);
+
+  // Get all of the devices attached to the system, inserting them into
+  // |devices|. Clears |devices| before use. The result will be sorted by id
+  // in increasing order. Must be called on FILE thread.
+  void GetDevices(std::vector<scoped_refptr<UsbDevice> >* devices);
+
+  // base::MessageLoop::DestructionObserver implementation.
+  virtual void WillDestroyCurrentMessageLoop() OVERRIDE;
+
+ private:
+  friend struct base::DefaultDeleter<UsbService>;
+
+  explicit UsbService(PlatformUsbContext context);
+  virtual ~UsbService();
+
+  // Enumerate USB devices from OS and Update devices_ map.
+  void RefreshDevices();
+
+  scoped_refptr<UsbContext> context_;
+
+  // TODO(ikarienator): Figure out a better solution.
+  uint32 next_unique_id_;
+
+  // The map from PlatformUsbDevices to UsbDevices.
+  typedef std::map<PlatformUsbDevice, scoped_refptr<UsbDevice> > DeviceMap;
+  DeviceMap devices_;
+
+  DISALLOW_COPY_AND_ASSIGN(UsbService);
+};
+
+}  // namespace usb_service
+
+#endif  // COMPONENTS_USB_SERVICE_USB_SERVICE_H_
diff --git a/components/usb_service/usb_service_export.h b/components/usb_service/usb_service_export.h
new file mode 100644
index 0000000..7465597
--- /dev/null
+++ b/components/usb_service/usb_service_export.h
@@ -0,0 +1,29 @@
+// 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.
+
+#ifndef COMPONENTS_USB_SERVICE_USB_SERVICE_EXPORT_H_
+#define COMPONENTS_USB_SERVICE_USB_SERVICE_EXPORT_H_
+
+#if defined(COMPONENT_BUILD)
+#if defined(WIN32)
+
+#if defined(USB_SERVICE_IMPLEMENTATION)
+#define USB_SERVICE_EXPORT __declspec(dllexport)
+#else
+#define USB_SERVICE_EXPORT __declspec(dllimport)
+#endif  // defined(USB_SERVICE_EXPORT)
+
+#else  // defined(WIN32)
+#if defined(USB_SERVICE_IMPLEMENTATION)
+#define USB_SERVICE_EXPORT __attribute__((visibility("default")))
+#else
+#define USB_SERVICE_EXPORT
+#endif
+#endif
+
+#else  // defined(COMPONENT_BUILD)
+#define USB_SERVICE_EXPORT
+#endif
+
+#endif  // COMPONENTS_USB_SERVICE_USB_SERVICE_EXPORT_H_
diff --git a/components/user_prefs.target.darwin-arm.mk b/components/user_prefs.target.darwin-arm.mk
index ea5f70e..904d1ae 100644
--- a/components/user_prefs.target.darwin-arm.mk
+++ b/components/user_prefs.target.darwin-arm.mk
@@ -96,12 +96,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -223,12 +226,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -305,7 +311,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/user_prefs.target.darwin-mips.mk b/components/user_prefs.target.darwin-mips.mk
index 57998a1..7c6baf2 100644
--- a/components/user_prefs.target.darwin-mips.mk
+++ b/components/user_prefs.target.darwin-mips.mk
@@ -95,12 +95,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -221,12 +224,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -301,7 +307,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/user_prefs.target.darwin-x86.mk b/components/user_prefs.target.darwin-x86.mk
index 6df95f7..b2ca8bf 100644
--- a/components/user_prefs.target.darwin-x86.mk
+++ b/components/user_prefs.target.darwin-x86.mk
@@ -96,12 +96,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -222,12 +225,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -301,7 +307,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/user_prefs.target.darwin-x86_64.mk b/components/user_prefs.target.darwin-x86_64.mk
index 41e9932..83d6fb5 100644
--- a/components/user_prefs.target.darwin-x86_64.mk
+++ b/components/user_prefs.target.darwin-x86_64.mk
@@ -97,12 +97,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -224,12 +227,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -303,7 +309,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/user_prefs.target.linux-arm.mk b/components/user_prefs.target.linux-arm.mk
index ea5f70e..904d1ae 100644
--- a/components/user_prefs.target.linux-arm.mk
+++ b/components/user_prefs.target.linux-arm.mk
@@ -96,12 +96,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -223,12 +226,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -305,7 +311,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/user_prefs.target.linux-mips.mk b/components/user_prefs.target.linux-mips.mk
index 57998a1..7c6baf2 100644
--- a/components/user_prefs.target.linux-mips.mk
+++ b/components/user_prefs.target.linux-mips.mk
@@ -95,12 +95,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -221,12 +224,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -301,7 +307,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/user_prefs.target.linux-x86.mk b/components/user_prefs.target.linux-x86.mk
index 6df95f7..b2ca8bf 100644
--- a/components/user_prefs.target.linux-x86.mk
+++ b/components/user_prefs.target.linux-x86.mk
@@ -96,12 +96,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -222,12 +225,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -301,7 +307,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/user_prefs.target.linux-x86_64.mk b/components/user_prefs.target.linux-x86_64.mk
index 41e9932..83d6fb5 100644
--- a/components/user_prefs.target.linux-x86_64.mk
+++ b/components/user_prefs.target.linux-x86_64.mk
@@ -97,12 +97,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -224,12 +227,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -303,7 +309,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/variations/proto/study.proto b/components/variations/proto/study.proto
index 265b274..384c0ec 100644
--- a/components/variations/proto/study.proto
+++ b/components/variations/proto/study.proto
@@ -43,7 +43,7 @@
 
   // An experiment within the study.
   //
-  // Next tag: 7
+  // Next tag: 8
   message Experiment {
     // A named parameter value for this experiment.
     //
@@ -79,6 +79,30 @@
 
     // Parameter values for this experiment.
     repeated Param param = 6;
+
+    enum Type {
+      // Regular experiment group. This is the default value and can be omitted.
+      NORMAL = 0;
+
+      // Changes to this experiment group are ignored for the purposes of
+      // kill-switch triggering. Included to allow the flexibility to not
+      // trigger this logic for specific cases (e.g. a group rename without
+      // any functionality changes).
+      IGNORE_CHANGE = 1;
+
+      // This is a kill-switch group that should be killed at "best effort"
+      // priority, e.g. with a hot dog menu badge. The experiment must have a
+      // probability_weight of 0.
+      KILL_BEST_EFFORT = 2;
+
+      // This is a kill-switch group that should be killed with "critical"
+      // priority. Depending on platform this may result in showing a
+      // non-dismissible restart prompt with a timer. This should only be used
+      // in very serious emergency circumstances. The experiment must have a
+      // probability_weight of 0.
+      KILL_CRITICAL = 3;
+    }
+    optional Type type = 7 [default = NORMAL];
   }
 
   // List of experiments in this study. This list should include the default /
diff --git a/components/variations/variations_seed_simulator.cc b/components/variations/variations_seed_simulator.cc
index c0ecf43..94e4fbb 100644
--- a/components/variations/variations_seed_simulator.cc
+++ b/components/variations/variations_seed_simulator.cc
@@ -9,6 +9,7 @@
 #include "base/metrics/field_trial.h"
 #include "components/variations/processed_study.h"
 #include "components/variations/proto/study.pb.h"
+#include "components/variations/study_filtering.h"
 #include "components/variations/variations_associated_data.h"
 
 namespace chrome_variations {
@@ -90,6 +91,15 @@
 
 }  // namespace
 
+VariationsSeedSimulator::Result::Result()
+    : normal_group_change_count(0),
+      kill_best_effort_group_change_count(0),
+      kill_critical_group_change_count(0) {
+}
+
+VariationsSeedSimulator::Result::~Result() {
+}
+
 VariationsSeedSimulator::VariationsSeedSimulator(
     const base::FieldTrial::EntropyProvider& entropy_provider)
     : entropy_provider_(entropy_provider) {
@@ -98,12 +108,26 @@
 VariationsSeedSimulator::~VariationsSeedSimulator() {
 }
 
-int VariationsSeedSimulator::ComputeDifferences(
+VariationsSeedSimulator::Result VariationsSeedSimulator::SimulateSeedStudies(
+    const VariationsSeed& seed,
+    const std::string& locale,
+    const base::Time& reference_date,
+    const base::Version& version,
+    Study_Channel channel,
+    Study_FormFactor form_factor) {
+  std::vector<ProcessedStudy> filtered_studies;
+  FilterAndValidateStudies(seed, locale, reference_date, version, channel,
+                           form_factor, &filtered_studies);
+
+  return ComputeDifferences(filtered_studies);
+}
+
+VariationsSeedSimulator::Result VariationsSeedSimulator::ComputeDifferences(
     const std::vector<ProcessedStudy>& processed_studies) {
   std::map<std::string, std::string> current_state;
   GetCurrentTrialState(&current_state);
-  int group_change_count = 0;
 
+  Result result;
   for (size_t i = 0; i < processed_studies.size(); ++i) {
     const Study& study = *processed_studies[i].study();
     std::map<std::string, std::string>::const_iterator it =
@@ -124,12 +148,27 @@
     // Note: The logic below does the right thing if study consistency changes,
     // as it doesn't rely on the previous study consistency.
     const std::string& selected_group = it->second;
+    ChangeType change_type = NO_CHANGE;
     if (study.consistency() == Study_Consistency_PERMANENT) {
-      if (PermanentStudyGroupChanged(processed_studies[i], selected_group))
-        ++group_change_count;
+      change_type = PermanentStudyGroupChanged(processed_studies[i],
+                                               selected_group);
     } else if (study.consistency() == Study_Consistency_SESSION) {
-      if (SessionStudyGroupChanged(processed_studies[i], selected_group))
-        ++group_change_count;
+      change_type = SessionStudyGroupChanged(processed_studies[i],
+                                             selected_group);
+    }
+
+    switch (change_type) {
+      case NO_CHANGE:
+        break;
+      case CHANGED:
+        ++result.normal_group_change_count;
+        break;
+      case CHANGED_KILL_BEST_EFFORT:
+        ++result.kill_best_effort_group_change_count;
+        break;
+      case CHANGED_KILL_CRITICAL:
+        ++result.kill_critical_group_change_count;
+        break;
     }
   }
 
@@ -137,10 +176,27 @@
   // old seed, but were removed). This will require tracking the set of studies
   // that were created from the original seed.
 
-  return group_change_count;
+  return result;
 }
 
-bool VariationsSeedSimulator::PermanentStudyGroupChanged(
+VariationsSeedSimulator::ChangeType
+VariationsSeedSimulator::ConvertExperimentTypeToChangeType(
+    Study_Experiment_Type type) {
+  switch (type) {
+    case Study_Experiment_Type_NORMAL:
+      return CHANGED;
+    case Study_Experiment_Type_IGNORE_CHANGE:
+      return NO_CHANGE;
+    case Study_Experiment_Type_KILL_BEST_EFFORT:
+      return CHANGED_KILL_BEST_EFFORT;
+    case Study_Experiment_Type_KILL_CRITICAL:
+      return CHANGED_KILL_CRITICAL;
+  }
+  return CHANGED;
+}
+
+VariationsSeedSimulator::ChangeType
+VariationsSeedSimulator::PermanentStudyGroupChanged(
     const ProcessedStudy& processed_study,
     const std::string& selected_group) {
   const Study& study = *processed_study.study();
@@ -148,40 +204,48 @@
 
   const std::string simulated_group = SimulateGroupAssignment(entropy_provider_,
                                                               processed_study);
-  // TODO(asvitkine): Sometimes group names are changed without changing any
-  // behavior (e.g. if the behavior is controlled entirely via params). Support
-  // a mechanism to bypass this check.
-  if (simulated_group != selected_group)
-    return true;
-
   const Study_Experiment* experiment = FindExperiment(study, selected_group);
+  if (simulated_group != selected_group) {
+    if (experiment)
+      return ConvertExperimentTypeToChangeType(experiment->type());
+    return CHANGED;
+  }
+
+  // Current group exists in the study - check whether its params changed.
   DCHECK(experiment);
-  return !VariationParamsAreEqual(study, *experiment);
+  if (!VariationParamsAreEqual(study, *experiment))
+    return ConvertExperimentTypeToChangeType(experiment->type());
+  return NO_CHANGE;
 }
 
-bool VariationsSeedSimulator::SessionStudyGroupChanged(
+VariationsSeedSimulator::ChangeType
+VariationsSeedSimulator::SessionStudyGroupChanged(
     const ProcessedStudy& processed_study,
     const std::string& selected_group) {
   const Study& study = *processed_study.study();
   DCHECK_EQ(Study_Consistency_SESSION, study.consistency());
 
+  const Study_Experiment* experiment = FindExperiment(study, selected_group);
   if (processed_study.is_expired() &&
       selected_group != study.default_experiment_name()) {
     // An expired study will result in the default group being selected - mark
     // it as changed if the current group differs from the default.
-    return true;
+    if (experiment)
+      return ConvertExperimentTypeToChangeType(experiment->type());
+    return CHANGED;
   }
 
-  const Study_Experiment* experiment = FindExperiment(study, selected_group);
   if (!experiment)
-    return true;
+    return CHANGED;
   if (experiment->probability_weight() == 0 &&
       !experiment->has_forcing_flag()) {
-    return true;
+    return ConvertExperimentTypeToChangeType(experiment->type());
   }
 
   // Current group exists in the study - check whether its params changed.
-  return !VariationParamsAreEqual(study, *experiment);
+  if (!VariationParamsAreEqual(study, *experiment))
+    return ConvertExperimentTypeToChangeType(experiment->type());
+  return NO_CHANGE;
 }
 
 }  // namespace chrome_variations
diff --git a/components/variations/variations_seed_simulator.h b/components/variations/variations_seed_simulator.h
index 3ecec98..ef9207b 100644
--- a/components/variations/variations_seed_simulator.h
+++ b/components/variations/variations_seed_simulator.h
@@ -11,41 +11,88 @@
 #include "base/compiler_specific.h"
 #include "base/gtest_prod_util.h"
 #include "base/metrics/field_trial.h"
+#include "base/version.h"
+#include "components/variations/proto/study.pb.h"
+#include "components/variations/proto/variations_seed.pb.h"
 
 namespace chrome_variations {
 
 class ProcessedStudy;
+class VariationsSeed;
 
 // VariationsSeedSimulator simulates the result of creating a set of studies
 // and detecting which studies would result in group changes.
 class VariationsSeedSimulator {
  public:
+  // The result of variations seed simulation, counting the number of experiment
+  // group changes of each type that are expected to occur on a restart with the
+  // seed.
+  struct Result {
+    // The number of expected group changes that do not fall into any special
+    // category. This is a lower bound due to session randomized studies.
+    int normal_group_change_count;
+
+    // The number of expected group changes that fall in the category of killed
+    // experiments that should trigger the "best effort" restart mechanism.
+    int kill_best_effort_group_change_count;
+
+    // The number of expected group changes that fall in the category of killed
+    // experiments that should trigger the "critical" restart mechanism.
+    int kill_critical_group_change_count;
+
+    Result();
+    ~Result();
+  };
+
   // Creates the simulator with the given entropy |provider|.
   explicit VariationsSeedSimulator(
       const base::FieldTrial::EntropyProvider& provider);
   virtual ~VariationsSeedSimulator();
 
   // Computes differences between the current process' field trial state and
-  // the result of evaluating the |processed_studies| list. It is expected that
-  // |processed_studies| have already been filtered and only contain studies
-  // that apply to the configuration being simulated. Returns a lower bound on
-  // the number of studies that are expected to change groups (lower bound due
-  // to session randomized studies).
-  int ComputeDifferences(
-      const std::vector<ProcessedStudy>& processed_studies);
+  // the result of evaluating |seed| with the given parameters. Returns the
+  // results of the simulation as a set of expected group change counts of each
+  // type.
+  Result SimulateSeedStudies(const VariationsSeed& seed,
+                             const std::string& locale,
+                             const base::Time& reference_date,
+                             const base::Version& version,
+                             Study_Channel channel,
+                             Study_FormFactor form_factor);
 
  private:
+  friend class VariationsSeedSimulatorTest;
+
+  enum ChangeType {
+    NO_CHANGE,
+    CHANGED,
+    CHANGED_KILL_BEST_EFFORT,
+    CHANGED_KILL_CRITICAL,
+  };
+
+  // Computes differences between the current process' field trial state and
+  // the result of evaluating the |processed_studies| list. It is expected that
+  // |processed_studies| have already been filtered and only contain studies
+  // that apply to the configuration being simulated. Returns the results of the
+  // simulation as a set of expected group change counts of each type.
+  Result ComputeDifferences(
+      const std::vector<ProcessedStudy>& processed_studies);
+
+  // Maps proto enum |type| to a ChangeType.
+  ChangeType ConvertExperimentTypeToChangeType(Study_Experiment_Type type);
+
   // For the given |processed_study| with PERMANENT consistency, simulates group
-  // assignment and returns true if the result differs from that study's group
-  // in the current process.
-  bool PermanentStudyGroupChanged(const ProcessedStudy& processed_study,
-                                  const std::string& selected_group);
+  // assignment and returns a corresponding ChangeType if the result differs
+  // from that study's group in the current process.
+  ChangeType PermanentStudyGroupChanged(const ProcessedStudy& processed_study,
+                                        const std::string& selected_group);
 
   // For the given |processed_study| with SESSION consistency, determines if
   // there are enough changes in the study config that restarting will result
-  // in a guaranteed different group assignment (or different params).
-  bool SessionStudyGroupChanged(const ProcessedStudy& filtered_study,
-                                const std::string& selected_group);
+  // in a guaranteed different group assignment (or different params) and
+  // returns the corresponding ChangeType.
+  ChangeType SessionStudyGroupChanged(const ProcessedStudy& filtered_study,
+                                      const std::string& selected_group);
 
   const base::FieldTrial::EntropyProvider& entropy_provider_;
 
diff --git a/components/variations/variations_seed_simulator_unittest.cc b/components/variations/variations_seed_simulator_unittest.cc
index b6537ea..fd378b0 100644
--- a/components/variations/variations_seed_simulator_unittest.cc
+++ b/components/variations/variations_seed_simulator_unittest.cc
@@ -6,6 +6,7 @@
 
 #include <map>
 
+#include "base/strings/stringprintf.h"
 #include "components/variations/processed_study.h"
 #include "components/variations/proto/study.pb.h"
 #include "components/variations/variations_associated_data.h"
@@ -77,13 +78,7 @@
   return param;
 }
 
-// Uses a VariationsSeedSimulator to simulate the differences between |studies|
-// and the current field trial state.
-int SimulateDifferences(const std::vector<ProcessedStudy>& studies) {
-  TestEntropyProvider provider(0.5);
-  VariationsSeedSimulator seed_simulator(provider);
-  return seed_simulator.ComputeDifferences(studies);
-}
+}  // namespace
 
 class VariationsSeedSimulatorTest : public ::testing::Test {
  public:
@@ -97,69 +92,137 @@
     testing::ClearAllVariationParams();
   }
 
+  // Uses a VariationsSeedSimulator to simulate the differences between
+  // |studies| and the current field trial state.
+  VariationsSeedSimulator::Result SimulateDifferences(
+      const std::vector<ProcessedStudy>& studies) {
+    TestEntropyProvider provider(0.5);
+    VariationsSeedSimulator seed_simulator(provider);
+    return seed_simulator.ComputeDifferences(studies);
+  }
+
+  // Simulates the differences between |study| and the current field trial
+  // state, returning a string like "1 2 3", where 1 is the number of regular
+  // group changes, 2 is the number of "kill best effort" group changes and 3
+  // is the number of "kill critical" group changes.
+  std::string SimulateStudyDifferences(const Study* study) {
+    std::vector<ProcessedStudy> studies;
+    if (!ProcessedStudy::ValidateAndAppendStudy(study, false, &studies))
+      return "invalid study";
+    return ConvertSimulationResultToString(SimulateDifferences(studies));
+
+  }
+
+  // Simulates the differences between expired |study| and the current field
+  // trial state, returning a string like "1 2 3", where 1 is the number of
+  // regular group changes, 2 is the number of "kill best effort" group changes
+  // and 3 is the number of "kill critical" group changes.
+  std::string SimulateStudyDifferencesExpired(const Study* study) {
+    std::vector<ProcessedStudy> studies;
+    if (!ProcessedStudy::ValidateAndAppendStudy(study, true, &studies))
+      return "invalid study";
+    if (!studies[0].is_expired())
+      return "not expired";
+    return ConvertSimulationResultToString(SimulateDifferences(studies));
+  }
+
+  // Formats |result| as a string with format "1 2 3", where 1 is the number of
+  // regular group changes, 2 is the number of "kill best effort" group changes
+  // and 3 is the number of "kill critical" group changes.
+  std::string ConvertSimulationResultToString(
+      const VariationsSeedSimulator::Result& result) {
+    return base::StringPrintf("%d %d %d",
+                              result.normal_group_change_count,
+                              result.kill_best_effort_group_change_count,
+                              result.kill_critical_group_change_count);
+  }
+
  private:
   base::FieldTrialList field_trial_list_;
 
   DISALLOW_COPY_AND_ASSIGN(VariationsSeedSimulatorTest);
 };
 
-}  // namespace
-
 TEST_F(VariationsSeedSimulatorTest, PermanentNoChanges) {
   CreateTrial("A", "B", NULL);
 
   std::vector<ProcessedStudy> processed_studies;
   Study study = CreateStudy("A", Study_Consistency_PERMANENT);
-  AddExperiment("B", 100, &study);
+  Study_Experiment* experiment = AddExperiment("B", 100, &study);
 
-  std::vector<ProcessedStudy> studies;
-  EXPECT_TRUE(ProcessedStudy::ValidateAndAppendStudy(&study, false, &studies));
+  EXPECT_EQ("0 0 0", SimulateStudyDifferences(&study));
 
-  EXPECT_EQ(0, SimulateDifferences(studies));
+  experiment->set_type(Study_Experiment_Type_NORMAL);
+  EXPECT_EQ("0 0 0", SimulateStudyDifferences(&study));
+  experiment->set_type(Study_Experiment_Type_IGNORE_CHANGE);
+  EXPECT_EQ("0 0 0", SimulateStudyDifferences(&study));
+  experiment->set_type(Study_Experiment_Type_KILL_BEST_EFFORT);
+  EXPECT_EQ("0 0 0", SimulateStudyDifferences(&study));
+  experiment->set_type(Study_Experiment_Type_KILL_CRITICAL);
+  EXPECT_EQ("0 0 0", SimulateStudyDifferences(&study));
 }
 
 TEST_F(VariationsSeedSimulatorTest, PermanentGroupChange) {
   CreateTrial("A", "B", NULL);
 
   Study study = CreateStudy("A", Study_Consistency_PERMANENT);
-  AddExperiment("C", 100, &study);
+  Study_Experiment* experiment = AddExperiment("C", 100, &study);
 
-  std::vector<ProcessedStudy> studies;
-  EXPECT_TRUE(ProcessedStudy::ValidateAndAppendStudy(&study, false, &studies));
+  EXPECT_EQ("1 0 0", SimulateStudyDifferences(&study));
 
-  EXPECT_EQ(1, SimulateDifferences(studies));
+  // Changing "C" group type should not affect the type of change. (Since the
+  // type is evaluated for the "old" group.)
+  experiment->set_type(Study_Experiment_Type_NORMAL);
+  EXPECT_EQ("1 0 0", SimulateStudyDifferences(&study));
+  experiment->set_type(Study_Experiment_Type_IGNORE_CHANGE);
+  EXPECT_EQ("1 0 0", SimulateStudyDifferences(&study));
+  experiment->set_type(Study_Experiment_Type_KILL_BEST_EFFORT);
+  EXPECT_EQ("1 0 0", SimulateStudyDifferences(&study));
+  experiment->set_type(Study_Experiment_Type_KILL_CRITICAL);
+  EXPECT_EQ("1 0 0", SimulateStudyDifferences(&study));
 }
 
 TEST_F(VariationsSeedSimulatorTest, PermanentExpired) {
   CreateTrial("A", "B", NULL);
 
   Study study = CreateStudy("A", Study_Consistency_PERMANENT);
-  AddExperiment("B", 1, &study);
+  Study_Experiment* experiment = AddExperiment("B", 1, &study);
   AddExperiment("C", 0, &study);
 
-  std::vector<ProcessedStudy> studies;
-  EXPECT_TRUE(ProcessedStudy::ValidateAndAppendStudy(&study, true, &studies));
-  EXPECT_TRUE(studies[0].is_expired());
-
   // There should be a difference because the study is expired, which should
-  // result in the default group "D" being chosen.
-  EXPECT_EQ(1, SimulateDifferences(studies));
+  // result in the default group "C" being chosen.
+  EXPECT_EQ("1 0 0", SimulateStudyDifferencesExpired(&study));
+
+  experiment->set_type(Study_Experiment_Type_NORMAL);
+  EXPECT_EQ("1 0 0", SimulateStudyDifferencesExpired(&study));
+  experiment->set_type(Study_Experiment_Type_IGNORE_CHANGE);
+  EXPECT_EQ("0 0 0", SimulateStudyDifferencesExpired(&study));
+  experiment->set_type(Study_Experiment_Type_KILL_BEST_EFFORT);
+  EXPECT_EQ("0 1 0", SimulateStudyDifferencesExpired(&study));
+  experiment->set_type(Study_Experiment_Type_KILL_CRITICAL);
+  EXPECT_EQ("0 0 1", SimulateStudyDifferencesExpired(&study));
 }
 
 TEST_F(VariationsSeedSimulatorTest, SessionRandomized) {
   CreateTrial("A", "B", NULL);
 
   Study study = CreateStudy("A", Study_Consistency_SESSION);
-  AddExperiment("B", 1, &study);
+  Study_Experiment* experiment = AddExperiment("B", 1, &study);
   AddExperiment("C", 1, &study);
   AddExperiment("D", 1, &study);
 
-  std::vector<ProcessedStudy> studies;
-  EXPECT_TRUE(ProcessedStudy::ValidateAndAppendStudy(&study, false, &studies));
-
   // There should be no differences, since a session randomized study can result
   // in any of the groups being chosen on startup.
-  EXPECT_EQ(0, SimulateDifferences(studies));
+  EXPECT_EQ("0 0 0", SimulateStudyDifferences(&study));
+
+  experiment->set_type(Study_Experiment_Type_NORMAL);
+  EXPECT_EQ("0 0 0", SimulateStudyDifferences(&study));
+  experiment->set_type(Study_Experiment_Type_IGNORE_CHANGE);
+  EXPECT_EQ("0 0 0", SimulateStudyDifferences(&study));
+  experiment->set_type(Study_Experiment_Type_KILL_BEST_EFFORT);
+  EXPECT_EQ("0 0 0", SimulateStudyDifferences(&study));
+  experiment->set_type(Study_Experiment_Type_KILL_CRITICAL);
+  EXPECT_EQ("0 0 0", SimulateStudyDifferences(&study));
 }
 
 TEST_F(VariationsSeedSimulatorTest, SessionRandomizedGroupRemoved) {
@@ -169,43 +232,51 @@
   AddExperiment("C", 1, &study);
   AddExperiment("D", 1, &study);
 
-  std::vector<ProcessedStudy> studies;
-  EXPECT_TRUE(ProcessedStudy::ValidateAndAppendStudy(&study, false, &studies));
-
   // There should be a difference since there is no group "B" in the new config.
-  EXPECT_EQ(1, SimulateDifferences(studies));
+  EXPECT_EQ("1 0 0", SimulateStudyDifferences(&study));
 }
 
 TEST_F(VariationsSeedSimulatorTest, SessionRandomizedGroupProbabilityZero) {
   CreateTrial("A", "B", NULL);
 
   Study study = CreateStudy("A", Study_Consistency_SESSION);
-  AddExperiment("B", 0, &study);
+  Study_Experiment* experiment = AddExperiment("B", 0, &study);
   AddExperiment("C", 1, &study);
   AddExperiment("D", 1, &study);
 
-  std::vector<ProcessedStudy> studies;
-  EXPECT_TRUE(ProcessedStudy::ValidateAndAppendStudy(&study, false, &studies));
+  // There should be a difference since group "B" has probability 0.
+  EXPECT_EQ("1 0 0", SimulateStudyDifferences(&study));
 
-  // There should be a difference since there is group "B" has probability 0.
-  EXPECT_EQ(1, SimulateDifferences(studies));
+  experiment->set_type(Study_Experiment_Type_NORMAL);
+  EXPECT_EQ("1 0 0", SimulateStudyDifferences(&study));
+  experiment->set_type(Study_Experiment_Type_IGNORE_CHANGE);
+  EXPECT_EQ("0 0 0", SimulateStudyDifferences(&study));
+  experiment->set_type(Study_Experiment_Type_KILL_BEST_EFFORT);
+  EXPECT_EQ("0 1 0", SimulateStudyDifferences(&study));
+  experiment->set_type(Study_Experiment_Type_KILL_CRITICAL);
+  EXPECT_EQ("0 0 1", SimulateStudyDifferences(&study));
 }
 
 TEST_F(VariationsSeedSimulatorTest, SessionRandomizedExpired) {
   CreateTrial("A", "B", NULL);
 
   Study study = CreateStudy("A", Study_Consistency_SESSION);
-  AddExperiment("B", 1, &study);
+  Study_Experiment* experiment = AddExperiment("B", 1, &study);
   AddExperiment("C", 1, &study);
   AddExperiment("D", 1, &study);
 
-  std::vector<ProcessedStudy> studies;
-  EXPECT_TRUE(ProcessedStudy::ValidateAndAppendStudy(&study, true, &studies));
-  EXPECT_TRUE(studies[0].is_expired());
-
   // There should be a difference because the study is expired, which should
   // result in the default group "D" being chosen.
-  EXPECT_EQ(1, SimulateDifferences(studies));
+  EXPECT_EQ("1 0 0", SimulateStudyDifferencesExpired(&study));
+
+  experiment->set_type(Study_Experiment_Type_NORMAL);
+  EXPECT_EQ("1 0 0", SimulateStudyDifferencesExpired(&study));
+  experiment->set_type(Study_Experiment_Type_IGNORE_CHANGE);
+  EXPECT_EQ("0 0 0", SimulateStudyDifferencesExpired(&study));
+  experiment->set_type(Study_Experiment_Type_KILL_BEST_EFFORT);
+  EXPECT_EQ("0 1 0", SimulateStudyDifferencesExpired(&study));
+  experiment->set_type(Study_Experiment_Type_KILL_CRITICAL);
+  EXPECT_EQ("0 0 1", SimulateStudyDifferencesExpired(&study));
 }
 
 TEST_F(VariationsSeedSimulatorTest, ParamsUnchanged) {
@@ -222,10 +293,16 @@
   AddExperimentParam("p1", "x", experiment);
   AddExperimentParam("p3", "z", experiment);
 
-  std::vector<ProcessedStudy> studies;
-  EXPECT_TRUE(ProcessedStudy::ValidateAndAppendStudy(&study, false, &studies));
+  EXPECT_EQ("0 0 0", SimulateStudyDifferences(&study));
 
-  EXPECT_EQ(0, SimulateDifferences(studies));
+  experiment->set_type(Study_Experiment_Type_NORMAL);
+  EXPECT_EQ("0 0 0", SimulateStudyDifferences(&study));
+  experiment->set_type(Study_Experiment_Type_IGNORE_CHANGE);
+  EXPECT_EQ("0 0 0", SimulateStudyDifferences(&study));
+  experiment->set_type(Study_Experiment_Type_KILL_BEST_EFFORT);
+  EXPECT_EQ("0 0 0", SimulateStudyDifferences(&study));
+  experiment->set_type(Study_Experiment_Type_KILL_CRITICAL);
+  EXPECT_EQ("0 0 0", SimulateStudyDifferences(&study));
 }
 
 TEST_F(VariationsSeedSimulatorTest, ParamsChanged) {
@@ -242,11 +319,17 @@
   AddExperimentParam("p1", "x", experiment);
   AddExperimentParam("p3", "z", experiment);
 
-  std::vector<ProcessedStudy> studies;
-  EXPECT_TRUE(ProcessedStudy::ValidateAndAppendStudy(&study, false, &studies));
-
   // The param lists differ.
-  EXPECT_EQ(1, SimulateDifferences(studies));
+  EXPECT_EQ("1 0 0", SimulateStudyDifferences(&study));
+
+  experiment->set_type(Study_Experiment_Type_NORMAL);
+  EXPECT_EQ("1 0 0", SimulateStudyDifferences(&study));
+  experiment->set_type(Study_Experiment_Type_IGNORE_CHANGE);
+  EXPECT_EQ("0 0 0", SimulateStudyDifferences(&study));
+  experiment->set_type(Study_Experiment_Type_KILL_BEST_EFFORT);
+  EXPECT_EQ("0 1 0", SimulateStudyDifferences(&study));
+  experiment->set_type(Study_Experiment_Type_KILL_CRITICAL);
+  EXPECT_EQ("0 0 1", SimulateStudyDifferences(&study));
 }
 
 TEST_F(VariationsSeedSimulatorTest, ParamsRemoved) {
@@ -258,13 +341,19 @@
 
   std::vector<ProcessedStudy> processed_studies;
   Study study = CreateStudy("A", Study_Consistency_PERMANENT);
-  AddExperiment("B", 100, &study);
-
-  std::vector<ProcessedStudy> studies;
-  EXPECT_TRUE(ProcessedStudy::ValidateAndAppendStudy(&study, false, &studies));
+  Study_Experiment* experiment = AddExperiment("B", 100, &study);
 
   // The current group has params, but the new config doesn't have any.
-  EXPECT_EQ(1, SimulateDifferences(studies));
+  EXPECT_EQ("1 0 0", SimulateStudyDifferences(&study));
+
+  experiment->set_type(Study_Experiment_Type_NORMAL);
+  EXPECT_EQ("1 0 0", SimulateStudyDifferences(&study));
+  experiment->set_type(Study_Experiment_Type_IGNORE_CHANGE);
+  EXPECT_EQ("0 0 0", SimulateStudyDifferences(&study));
+  experiment->set_type(Study_Experiment_Type_KILL_BEST_EFFORT);
+  EXPECT_EQ("0 1 0", SimulateStudyDifferences(&study));
+  experiment->set_type(Study_Experiment_Type_KILL_CRITICAL);
+  EXPECT_EQ("0 0 1", SimulateStudyDifferences(&study));
 }
 
 TEST_F(VariationsSeedSimulatorTest, ParamsAdded) {
@@ -277,11 +366,17 @@
   AddExperimentParam("p1", "x", experiment);
   AddExperimentParam("p3", "z", experiment);
 
-  std::vector<ProcessedStudy> studies;
-  EXPECT_TRUE(ProcessedStudy::ValidateAndAppendStudy(&study, false, &studies));
-
   // The current group has no params, but the config has added some.
-  EXPECT_EQ(1, SimulateDifferences(studies));
+  EXPECT_EQ("1 0 0", SimulateStudyDifferences(&study));
+
+  experiment->set_type(Study_Experiment_Type_NORMAL);
+  EXPECT_EQ("1 0 0", SimulateStudyDifferences(&study));
+  experiment->set_type(Study_Experiment_Type_IGNORE_CHANGE);
+  EXPECT_EQ("0 0 0", SimulateStudyDifferences(&study));
+  experiment->set_type(Study_Experiment_Type_KILL_BEST_EFFORT);
+  EXPECT_EQ("0 1 0", SimulateStudyDifferences(&study));
+  experiment->set_type(Study_Experiment_Type_KILL_CRITICAL);
+  EXPECT_EQ("0 0 1", SimulateStudyDifferences(&study));
 }
 
 }  // namespace chrome_variations
diff --git a/components/visitedlink/test/visitedlink_unittest.cc b/components/visitedlink/test/visitedlink_unittest.cc
index 3a029b9..a631785 100644
--- a/components/visitedlink/test/visitedlink_unittest.cc
+++ b/components/visitedlink/test/visitedlink_unittest.cc
@@ -686,7 +686,7 @@
 TEST_F(VisitedLinkEventsTest, Basics) {
   RenderViewHostTester::For(rvh())->CreateRenderView(base::string16(),
                                  MSG_ROUTING_NONE,
-                                 -1);
+                                 -1, false);
 
   // Add a few URLs.
   master()->AddURL(GURL("http://acidtests.org/"));
@@ -711,7 +711,7 @@
 TEST_F(VisitedLinkEventsTest, TabVisibility) {
   RenderViewHostTester::For(rvh())->CreateRenderView(base::string16(),
                                  MSG_ROUTING_NONE,
-                                 -1);
+                                 -1, false);
 
   // Simulate tab becoming inactive.
   RenderViewHostTester::For(rvh())->SimulateWasHidden();
diff --git a/components/visitedlink_browser.target.darwin-arm.mk b/components/visitedlink_browser.target.darwin-arm.mk
index 90303ba..0beac38 100644
--- a/components/visitedlink_browser.target.darwin-arm.mk
+++ b/components/visitedlink_browser.target.darwin-arm.mk
@@ -239,7 +239,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/visitedlink_browser.target.darwin-mips.mk b/components/visitedlink_browser.target.darwin-mips.mk
index 8210d30..c3a789d 100644
--- a/components/visitedlink_browser.target.darwin-mips.mk
+++ b/components/visitedlink_browser.target.darwin-mips.mk
@@ -235,7 +235,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/visitedlink_browser.target.darwin-x86.mk b/components/visitedlink_browser.target.darwin-x86.mk
index 92b11f0..974197b 100644
--- a/components/visitedlink_browser.target.darwin-x86.mk
+++ b/components/visitedlink_browser.target.darwin-x86.mk
@@ -237,7 +237,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/visitedlink_browser.target.darwin-x86_64.mk b/components/visitedlink_browser.target.darwin-x86_64.mk
index 19ee53b..0a40c9b 100644
--- a/components/visitedlink_browser.target.darwin-x86_64.mk
+++ b/components/visitedlink_browser.target.darwin-x86_64.mk
@@ -237,7 +237,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/visitedlink_browser.target.linux-arm.mk b/components/visitedlink_browser.target.linux-arm.mk
index 90303ba..0beac38 100644
--- a/components/visitedlink_browser.target.linux-arm.mk
+++ b/components/visitedlink_browser.target.linux-arm.mk
@@ -239,7 +239,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/visitedlink_browser.target.linux-mips.mk b/components/visitedlink_browser.target.linux-mips.mk
index 8210d30..c3a789d 100644
--- a/components/visitedlink_browser.target.linux-mips.mk
+++ b/components/visitedlink_browser.target.linux-mips.mk
@@ -235,7 +235,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/visitedlink_browser.target.linux-x86.mk b/components/visitedlink_browser.target.linux-x86.mk
index 92b11f0..974197b 100644
--- a/components/visitedlink_browser.target.linux-x86.mk
+++ b/components/visitedlink_browser.target.linux-x86.mk
@@ -237,7 +237,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/visitedlink_browser.target.linux-x86_64.mk b/components/visitedlink_browser.target.linux-x86_64.mk
index 19ee53b..0a40c9b 100644
--- a/components/visitedlink_browser.target.linux-x86_64.mk
+++ b/components/visitedlink_browser.target.linux-x86_64.mk
@@ -237,7 +237,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/visitedlink_common.target.darwin-arm.mk b/components/visitedlink_common.target.darwin-arm.mk
index eaa7a98..71b3566 100644
--- a/components/visitedlink_common.target.darwin-arm.mk
+++ b/components/visitedlink_common.target.darwin-arm.mk
@@ -236,7 +236,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/visitedlink_common.target.darwin-mips.mk b/components/visitedlink_common.target.darwin-mips.mk
index 16f3159..63590ad 100644
--- a/components/visitedlink_common.target.darwin-mips.mk
+++ b/components/visitedlink_common.target.darwin-mips.mk
@@ -232,7 +232,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/visitedlink_common.target.darwin-x86.mk b/components/visitedlink_common.target.darwin-x86.mk
index 5a38d85..53a70db 100644
--- a/components/visitedlink_common.target.darwin-x86.mk
+++ b/components/visitedlink_common.target.darwin-x86.mk
@@ -234,7 +234,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/visitedlink_common.target.darwin-x86_64.mk b/components/visitedlink_common.target.darwin-x86_64.mk
index a527ae8..e188731 100644
--- a/components/visitedlink_common.target.darwin-x86_64.mk
+++ b/components/visitedlink_common.target.darwin-x86_64.mk
@@ -234,7 +234,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/visitedlink_common.target.linux-arm.mk b/components/visitedlink_common.target.linux-arm.mk
index eaa7a98..71b3566 100644
--- a/components/visitedlink_common.target.linux-arm.mk
+++ b/components/visitedlink_common.target.linux-arm.mk
@@ -236,7 +236,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/visitedlink_common.target.linux-mips.mk b/components/visitedlink_common.target.linux-mips.mk
index 16f3159..63590ad 100644
--- a/components/visitedlink_common.target.linux-mips.mk
+++ b/components/visitedlink_common.target.linux-mips.mk
@@ -232,7 +232,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/visitedlink_common.target.linux-x86.mk b/components/visitedlink_common.target.linux-x86.mk
index 5a38d85..53a70db 100644
--- a/components/visitedlink_common.target.linux-x86.mk
+++ b/components/visitedlink_common.target.linux-x86.mk
@@ -234,7 +234,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/visitedlink_common.target.linux-x86_64.mk b/components/visitedlink_common.target.linux-x86_64.mk
index a527ae8..e188731 100644
--- a/components/visitedlink_common.target.linux-x86_64.mk
+++ b/components/visitedlink_common.target.linux-x86_64.mk
@@ -234,7 +234,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/visitedlink_renderer.target.darwin-arm.mk b/components/visitedlink_renderer.target.darwin-arm.mk
index 8d71a9e..c04d851 100644
--- a/components/visitedlink_renderer.target.darwin-arm.mk
+++ b/components/visitedlink_renderer.target.darwin-arm.mk
@@ -93,12 +93,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -233,12 +236,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -329,7 +335,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/visitedlink_renderer.target.darwin-mips.mk b/components/visitedlink_renderer.target.darwin-mips.mk
index db9fb25..0b79e6e 100644
--- a/components/visitedlink_renderer.target.darwin-mips.mk
+++ b/components/visitedlink_renderer.target.darwin-mips.mk
@@ -92,12 +92,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -231,12 +234,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -325,7 +331,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/visitedlink_renderer.target.darwin-x86.mk b/components/visitedlink_renderer.target.darwin-x86.mk
index 2cbc64d..717ff1a 100644
--- a/components/visitedlink_renderer.target.darwin-x86.mk
+++ b/components/visitedlink_renderer.target.darwin-x86.mk
@@ -94,12 +94,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -234,12 +237,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -327,7 +333,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/visitedlink_renderer.target.darwin-x86_64.mk b/components/visitedlink_renderer.target.darwin-x86_64.mk
index 6b0f482..be4ad7b 100644
--- a/components/visitedlink_renderer.target.darwin-x86_64.mk
+++ b/components/visitedlink_renderer.target.darwin-x86_64.mk
@@ -94,12 +94,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -234,12 +237,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -327,7 +333,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/visitedlink_renderer.target.linux-arm.mk b/components/visitedlink_renderer.target.linux-arm.mk
index 8d71a9e..c04d851 100644
--- a/components/visitedlink_renderer.target.linux-arm.mk
+++ b/components/visitedlink_renderer.target.linux-arm.mk
@@ -93,12 +93,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -233,12 +236,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -329,7 +335,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/visitedlink_renderer.target.linux-mips.mk b/components/visitedlink_renderer.target.linux-mips.mk
index db9fb25..0b79e6e 100644
--- a/components/visitedlink_renderer.target.linux-mips.mk
+++ b/components/visitedlink_renderer.target.linux-mips.mk
@@ -92,12 +92,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -231,12 +234,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -325,7 +331,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/visitedlink_renderer.target.linux-x86.mk b/components/visitedlink_renderer.target.linux-x86.mk
index 2cbc64d..717ff1a 100644
--- a/components/visitedlink_renderer.target.linux-x86.mk
+++ b/components/visitedlink_renderer.target.linux-x86.mk
@@ -94,12 +94,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -234,12 +237,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -327,7 +333,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/visitedlink_renderer.target.linux-x86_64.mk b/components/visitedlink_renderer.target.linux-x86_64.mk
index 6b0f482..be4ad7b 100644
--- a/components/visitedlink_renderer.target.linux-x86_64.mk
+++ b/components/visitedlink_renderer.target.linux-x86_64.mk
@@ -94,12 +94,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -234,12 +237,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -327,7 +333,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/web_contents_delegate_android.target.darwin-arm.mk b/components/web_contents_delegate_android.target.darwin-arm.mk
index 8376d32..c0e0aa6 100644
--- a/components/web_contents_delegate_android.target.darwin-arm.mk
+++ b/components/web_contents_delegate_android.target.darwin-arm.mk
@@ -99,12 +99,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -226,12 +229,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -309,7 +315,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/web_contents_delegate_android.target.darwin-mips.mk b/components/web_contents_delegate_android.target.darwin-mips.mk
index f94a53c..5736d56 100644
--- a/components/web_contents_delegate_android.target.darwin-mips.mk
+++ b/components/web_contents_delegate_android.target.darwin-mips.mk
@@ -98,12 +98,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -224,12 +227,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -305,7 +311,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/web_contents_delegate_android.target.darwin-x86.mk b/components/web_contents_delegate_android.target.darwin-x86.mk
index 6a7da3c..d770ba8 100644
--- a/components/web_contents_delegate_android.target.darwin-x86.mk
+++ b/components/web_contents_delegate_android.target.darwin-x86.mk
@@ -99,12 +99,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -225,12 +228,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -305,7 +311,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/web_contents_delegate_android.target.darwin-x86_64.mk b/components/web_contents_delegate_android.target.darwin-x86_64.mk
index e524444..7f0d085 100644
--- a/components/web_contents_delegate_android.target.darwin-x86_64.mk
+++ b/components/web_contents_delegate_android.target.darwin-x86_64.mk
@@ -100,12 +100,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -227,12 +230,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -307,7 +313,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/web_contents_delegate_android.target.linux-arm.mk b/components/web_contents_delegate_android.target.linux-arm.mk
index 8376d32..c0e0aa6 100644
--- a/components/web_contents_delegate_android.target.linux-arm.mk
+++ b/components/web_contents_delegate_android.target.linux-arm.mk
@@ -99,12 +99,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -226,12 +229,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -309,7 +315,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/web_contents_delegate_android.target.linux-mips.mk b/components/web_contents_delegate_android.target.linux-mips.mk
index f94a53c..5736d56 100644
--- a/components/web_contents_delegate_android.target.linux-mips.mk
+++ b/components/web_contents_delegate_android.target.linux-mips.mk
@@ -98,12 +98,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -224,12 +227,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -305,7 +311,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/web_contents_delegate_android.target.linux-x86.mk b/components/web_contents_delegate_android.target.linux-x86.mk
index 6a7da3c..d770ba8 100644
--- a/components/web_contents_delegate_android.target.linux-x86.mk
+++ b/components/web_contents_delegate_android.target.linux-x86.mk
@@ -99,12 +99,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -225,12 +228,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -305,7 +311,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/web_contents_delegate_android.target.linux-x86_64.mk b/components/web_contents_delegate_android.target.linux-x86_64.mk
index e524444..7f0d085 100644
--- a/components/web_contents_delegate_android.target.linux-x86_64.mk
+++ b/components/web_contents_delegate_android.target.linux-x86_64.mk
@@ -100,12 +100,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -227,12 +230,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -307,7 +313,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/web_contents_delegate_android/web_contents_delegate_android.h b/components/web_contents_delegate_android/web_contents_delegate_android.h
index 4c3568a..50e1dd1 100644
--- a/components/web_contents_delegate_android/web_contents_delegate_android.h
+++ b/components/web_contents_delegate_android/web_contents_delegate_android.h
@@ -5,7 +5,7 @@
 #ifndef COMPONENTS_WEB_CONTENTS_DELEGATE_ANDROID_WEB_CONTENTS_DELEGATE_ANDROID_H_
 #define COMPONENTS_WEB_CONTENTS_DELEGATE_ANDROID_WEB_CONTENTS_DELEGATE_ANDROID_H_
 
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/android/scoped_java_ref.h"
 #include "base/compiler_specific.h"
 #include "base/memory/scoped_ptr.h"
diff --git a/components/web_modal/single_web_contents_dialog_manager.h b/components/web_modal/single_web_contents_dialog_manager.h
index 5df90e8..35ef0e3 100644
--- a/components/web_modal/single_web_contents_dialog_manager.h
+++ b/components/web_modal/single_web_contents_dialog_manager.h
@@ -33,37 +33,40 @@
 };
 
 // Provides an interface for platform-specific UI implementation for the web
-// contents modal dialog.
+// contents modal dialog. Each object will manage a single
+// NativeWebContentsModalDialog during its lifecycle.
+//
+// Implementation classes should accept a NativeWebContentsModalDialog at
+// construction time and register to be notified when the dialog is closing,
+// so that it can notify its delegate (WillClose method).
 class SingleWebContentsDialogManager {
  public:
   virtual ~SingleWebContentsDialogManager() {}
 
-  // Starts management of the modal aspects of the dialog.  This function should
-  // also register to be notified when the dialog is closing, so that it can
-  // notify the manager.
-  virtual void ManageDialog(NativeWebContentsModalDialog dialog) = 0;
-
   // Makes the web contents modal dialog visible. Only one web contents modal
   // dialog is shown at a time per tab.
-  virtual void ShowDialog(NativeWebContentsModalDialog dialog) = 0;
+  virtual void Show() = 0;
 
   // Hides the web contents modal dialog without closing it.
-  virtual void HideDialog(NativeWebContentsModalDialog dialog) = 0;
+  virtual void Hide() = 0;
 
   // Closes the web contents modal dialog.
   // If this method causes a WillClose() call to the delegate, the manager
   // will be deleted at the close of that invocation.
-  virtual void CloseDialog(NativeWebContentsModalDialog dialog) = 0;
+  virtual void Close() = 0;
 
   // Sets focus on the web contents modal dialog.
-  virtual void FocusDialog(NativeWebContentsModalDialog dialog) = 0;
+  virtual void Focus() = 0;
 
   // Runs a pulse animation for the web contents modal dialog.
-  virtual void PulseDialog(NativeWebContentsModalDialog dialog) = 0;
+  virtual void Pulse() = 0;
 
   // Called when the host view for the dialog has changed.
   virtual void HostChanged(WebContentsModalDialogHost* new_host) = 0;
 
+  // Return the dialog under management by this object.
+  virtual NativeWebContentsModalDialog dialog() = 0;
+
  protected:
   SingleWebContentsDialogManager() {}
 
diff --git a/components/web_modal/web_contents_modal_dialog_manager.cc b/components/web_modal/web_contents_modal_dialog_manager.cc
index 99fd4e4..a182acb 100644
--- a/components/web_modal/web_contents_modal_dialog_manager.cc
+++ b/components/web_modal/web_contents_modal_dialog_manager.cc
@@ -36,7 +36,7 @@
 void WebContentsModalDialogManager::ShowModalDialog(
     NativeWebContentsModalDialog dialog) {
   scoped_ptr<SingleWebContentsDialogManager> mgr(
-      CreateNativeWebModalManager(this));
+      CreateNativeWebModalManager(dialog, this));
   ShowDialogWithManager(dialog, mgr.Pass());
 }
 
@@ -48,12 +48,10 @@
     manager->HostChanged(delegate_->GetWebContentsModalDialogHost());
   child_dialogs_.push_back(new DialogState(dialog, manager.Pass()));
 
-  child_dialogs_.back()->manager->ManageDialog(dialog);
-
   if (child_dialogs_.size() == 1) {
     BlockWebContentsInteraction(true);
     if (delegate_ && delegate_->IsWebContentsVisible(web_contents()))
-      child_dialogs_.back()->manager->ShowDialog(dialog);
+      child_dialogs_.back()->manager->Show();
   }
 }
 
@@ -63,7 +61,7 @@
 
 void WebContentsModalDialogManager::FocusTopmostDialog() {
   DCHECK(!child_dialogs_.empty());
-  child_dialogs_.front()->manager->FocusDialog(child_dialogs_.front()->dialog);
+  child_dialogs_.front()->manager->Focus();
 }
 
 void WebContentsModalDialogManager::SetCloseOnInterstitialPage(
@@ -92,7 +90,7 @@
   child_dialogs_.erase(dlg);
   if (!child_dialogs_.empty() && removed_topmost_dialog &&
       !closing_all_dialogs_) {
-    child_dialogs_.front()->manager->ShowDialog(child_dialogs_.front()->dialog);
+    child_dialogs_.front()->manager->Show();
   }
 
   BlockWebContentsInteraction(!child_dialogs_.empty());
@@ -134,7 +132,7 @@
   return i;
 }
 
-// TODO(gbillock): Move this to Views impl within ShowDialog? It would
+// TODO(gbillock): Move this to Views impl within Show()? It would
 // call WebContents* contents = native_delegate_->GetWebContents(); and
 // then set the block state. Advantage: could restrict some of the
 // WCMDM delegate methods, then, and pass them behind the scenes.
@@ -158,8 +156,7 @@
 
   // Clear out any dialogs since we are leaving this page entirely.
   while (!child_dialogs_.empty()) {
-    child_dialogs_.front()->manager->CloseDialog(
-        child_dialogs_.front()->dialog);
+    child_dialogs_.front()->manager->Close();
   }
 
   closing_all_dialogs_ = false;
@@ -177,19 +174,18 @@
 
 void WebContentsModalDialogManager::DidGetIgnoredUIEvent() {
   if (!child_dialogs_.empty()) {
-    child_dialogs_.front()->manager->FocusDialog(
-        child_dialogs_.front()->dialog);
+    child_dialogs_.front()->manager->Focus();
   }
 }
 
 void WebContentsModalDialogManager::WasShown() {
   if (!child_dialogs_.empty())
-    child_dialogs_.front()->manager->ShowDialog(child_dialogs_.front()->dialog);
+    child_dialogs_.front()->manager->Show();
 }
 
 void WebContentsModalDialogManager::WasHidden() {
   if (!child_dialogs_.empty())
-    child_dialogs_.front()->manager->HideDialog(child_dialogs_.front()->dialog);
+    child_dialogs_.front()->manager->Hide();
 }
 
 void WebContentsModalDialogManager::WebContentsDestroyed(WebContents* tab) {
@@ -207,7 +203,7 @@
   for (WebContentsModalDialogList::iterator it = dialogs.begin();
        it != dialogs.end(); ++it) {
     if ((*it)->close_on_interstitial_webui)
-      (*it)->manager->CloseDialog((*it)->dialog);
+      (*it)->manager->Close();
   }
 }
 
diff --git a/components/web_modal/web_contents_modal_dialog_manager.h b/components/web_modal/web_contents_modal_dialog_manager.h
index 72ae4bb..fd2d925 100644
--- a/components/web_modal/web_contents_modal_dialog_manager.h
+++ b/components/web_modal/web_contents_modal_dialog_manager.h
@@ -29,6 +29,7 @@
   void SetDelegate(WebContentsModalDialogManagerDelegate* d);
 
   static SingleWebContentsDialogManager* CreateNativeWebModalManager(
+      NativeWebContentsModalDialog dialog,
       SingleWebContentsDialogManagerDelegate* native_delegate);
 
   // Shows the dialog as a web contents modal dialog. The dialog will notify via
diff --git a/components/web_modal/web_contents_modal_dialog_manager_unittest.cc b/components/web_modal/web_contents_modal_dialog_manager_unittest.cc
index 7497455..b73d617 100644
--- a/components/web_modal/web_contents_modal_dialog_manager_unittest.cc
+++ b/components/web_modal/web_contents_modal_dialog_manager_unittest.cc
@@ -43,34 +43,38 @@
     : public SingleWebContentsDialogManager {
  public:
   TestNativeWebContentsModalDialogManager(
+      NativeWebContentsModalDialog dialog,
       SingleWebContentsDialogManagerDelegate* delegate,
       NativeManagerTracker* tracker)
       : delegate_(delegate),
-        tracker_(tracker) {}
-
-  virtual void ManageDialog(NativeWebContentsModalDialog dialog) OVERRIDE {
+        dialog_(dialog),
+        tracker_(tracker) {
     if (tracker_)
       tracker_->SetState(NativeManagerTracker::NOT_SHOWN);
   }
-  virtual void ShowDialog(NativeWebContentsModalDialog dialog) OVERRIDE {
+
+  virtual void Show() OVERRIDE {
     if (tracker_)
       tracker_->SetState(NativeManagerTracker::SHOWN);
   }
-  virtual void HideDialog(NativeWebContentsModalDialog dialog) OVERRIDE {
+  virtual void Hide() OVERRIDE {
     if (tracker_)
       tracker_->SetState(NativeManagerTracker::HIDDEN);
   }
-  virtual void CloseDialog(NativeWebContentsModalDialog dialog) OVERRIDE {
+  virtual void Close() OVERRIDE {
     if (tracker_)
       tracker_->SetState(NativeManagerTracker::CLOSED);
-    delegate_->WillClose(dialog);
+    delegate_->WillClose(dialog_);
   }
-  virtual void FocusDialog(NativeWebContentsModalDialog dialog) OVERRIDE {
+  virtual void Focus() OVERRIDE {
   }
-  virtual void PulseDialog(NativeWebContentsModalDialog dialog) OVERRIDE {
+  virtual void Pulse() OVERRIDE {
   }
   virtual void HostChanged(WebContentsModalDialogHost* new_host) OVERRIDE {
   }
+  virtual NativeWebContentsModalDialog dialog() OVERRIDE {
+      return dialog_;
+  }
 
   void StopTracking() {
     tracker_ = NULL;
@@ -78,6 +82,7 @@
 
  private:
   SingleWebContentsDialogManagerDelegate* delegate_;
+  NativeWebContentsModalDialog dialog_;
   NativeManagerTracker* tracker_;
 
   DISALLOW_COPY_AND_ASSIGN(TestNativeWebContentsModalDialogManager);
@@ -124,10 +129,13 @@
 
 SingleWebContentsDialogManager*
 WebContentsModalDialogManager::CreateNativeWebModalManager(
+    NativeWebContentsModalDialog dialog,
     SingleWebContentsDialogManagerDelegate* native_delegate) {
   NOTREACHED();
-  return new TestNativeWebContentsModalDialogManager(native_delegate,
-                                                     &unused_tracker);
+  return new TestNativeWebContentsModalDialogManager(
+      dialog,
+      native_delegate,
+      &unused_tracker);
 }
 
 // Test that the dialog is shown immediately when the delegate indicates the web
@@ -138,7 +146,7 @@
 
   NativeManagerTracker tracker;
   TestNativeWebContentsModalDialogManager* native_manager =
-      new TestNativeWebContentsModalDialogManager(manager, &tracker);
+      new TestNativeWebContentsModalDialogManager(dialog, manager, &tracker);
   manager->ShowDialogWithManager(dialog,
       scoped_ptr<SingleWebContentsDialogManager>(native_manager).Pass());
 
@@ -160,7 +168,7 @@
 
   NativeManagerTracker tracker;
   TestNativeWebContentsModalDialogManager* native_manager =
-      new TestNativeWebContentsModalDialogManager(manager, &tracker);
+      new TestNativeWebContentsModalDialogManager(dialog, manager, &tracker);
   manager->ShowDialogWithManager(dialog,
       scoped_ptr<SingleWebContentsDialogManager>(native_manager).Pass());
 
@@ -182,11 +190,11 @@
   NativeManagerTracker tracker2;
   NativeManagerTracker tracker3;
   TestNativeWebContentsModalDialogManager* native_manager1 =
-      new TestNativeWebContentsModalDialogManager(manager, &tracker1);
+      new TestNativeWebContentsModalDialogManager(dialog1, manager, &tracker1);
   TestNativeWebContentsModalDialogManager* native_manager2 =
-      new TestNativeWebContentsModalDialogManager(manager, &tracker2);
+      new TestNativeWebContentsModalDialogManager(dialog2, manager, &tracker2);
   TestNativeWebContentsModalDialogManager* native_manager3 =
-      new TestNativeWebContentsModalDialogManager(manager, &tracker3);
+      new TestNativeWebContentsModalDialogManager(dialog3, manager, &tracker3);
   manager->ShowDialogWithManager(dialog1,
       scoped_ptr<SingleWebContentsDialogManager>(native_manager1).Pass());
   manager->ShowDialogWithManager(dialog2,
@@ -210,7 +218,7 @@
 
   NativeManagerTracker tracker;
   TestNativeWebContentsModalDialogManager* native_manager =
-      new TestNativeWebContentsModalDialogManager(manager, &tracker);
+      new TestNativeWebContentsModalDialogManager(dialog, manager, &tracker);
   manager->ShowDialogWithManager(dialog,
       scoped_ptr<SingleWebContentsDialogManager>(native_manager).Pass());
 
@@ -243,11 +251,11 @@
   NativeManagerTracker tracker2;
   NativeManagerTracker tracker3;
   TestNativeWebContentsModalDialogManager* native_manager1 =
-      new TestNativeWebContentsModalDialogManager(manager, &tracker1);
+      new TestNativeWebContentsModalDialogManager(dialog1, manager, &tracker1);
   TestNativeWebContentsModalDialogManager* native_manager2 =
-      new TestNativeWebContentsModalDialogManager(manager, &tracker2);
+      new TestNativeWebContentsModalDialogManager(dialog2, manager, &tracker2);
   TestNativeWebContentsModalDialogManager* native_manager3 =
-      new TestNativeWebContentsModalDialogManager(manager, &tracker3);
+      new TestNativeWebContentsModalDialogManager(dialog3, manager, &tracker3);
   manager->ShowDialogWithManager(dialog1,
       scoped_ptr<SingleWebContentsDialogManager>(native_manager1).Pass());
   manager->ShowDialogWithManager(dialog2,
@@ -291,13 +299,13 @@
   NativeManagerTracker tracker3;
   NativeManagerTracker tracker4;
   TestNativeWebContentsModalDialogManager* native_manager1 =
-      new TestNativeWebContentsModalDialogManager(manager, &tracker1);
+      new TestNativeWebContentsModalDialogManager(dialog1, manager, &tracker1);
   TestNativeWebContentsModalDialogManager* native_manager2 =
-      new TestNativeWebContentsModalDialogManager(manager, &tracker2);
+      new TestNativeWebContentsModalDialogManager(dialog2, manager, &tracker2);
   TestNativeWebContentsModalDialogManager* native_manager3 =
-      new TestNativeWebContentsModalDialogManager(manager, &tracker3);
+      new TestNativeWebContentsModalDialogManager(dialog3, manager, &tracker3);
   TestNativeWebContentsModalDialogManager* native_manager4 =
-      new TestNativeWebContentsModalDialogManager(manager, &tracker4);
+      new TestNativeWebContentsModalDialogManager(dialog4, manager, &tracker4);
   manager->ShowDialogWithManager(dialog1,
       scoped_ptr<SingleWebContentsDialogManager>(native_manager1).Pass());
   manager->ShowDialogWithManager(dialog2,
@@ -307,7 +315,7 @@
   manager->ShowDialogWithManager(dialog4,
       scoped_ptr<SingleWebContentsDialogManager>(native_manager4).Pass());
 
-  native_manager1->CloseDialog(dialog1);
+  native_manager1->Close();
 
   EXPECT_TRUE(manager->IsDialogActive());
   EXPECT_TRUE(delegate->web_contents_blocked());
@@ -316,7 +324,7 @@
   EXPECT_EQ(NativeManagerTracker::NOT_SHOWN, tracker3.state_);
   EXPECT_EQ(NativeManagerTracker::NOT_SHOWN, tracker4.state_);
 
-  native_manager3->CloseDialog(dialog3);
+  native_manager3->Close();
 
   EXPECT_TRUE(manager->IsDialogActive());
   EXPECT_TRUE(delegate->web_contents_blocked());
@@ -326,7 +334,7 @@
   EXPECT_EQ(NativeManagerTracker::NOT_SHOWN, tracker4.state_);
   EXPECT_FALSE(tracker3.was_shown_);
 
-  native_manager2->CloseDialog(dialog2);
+  native_manager2->Close();
 
   EXPECT_TRUE(manager->IsDialogActive());
   EXPECT_TRUE(delegate->web_contents_blocked());
@@ -336,7 +344,7 @@
   EXPECT_EQ(NativeManagerTracker::SHOWN, tracker4.state_);
   EXPECT_FALSE(tracker3.was_shown_);
 
-  native_manager4->CloseDialog(dialog4);
+  native_manager4->Close();
 
   EXPECT_FALSE(manager->IsDialogActive());
   EXPECT_FALSE(delegate->web_contents_blocked());
@@ -356,9 +364,11 @@
   NativeManagerTracker trackers[kWindowCount];
   TestNativeWebContentsModalDialogManager* native_managers[kWindowCount];
   for (int i = 0; i < kWindowCount; i++) {
+    const NativeWebContentsModalDialog dialog = MakeFakeDialog();
     native_managers[i] =
-        new TestNativeWebContentsModalDialogManager(manager, &(trackers[i]));
-    manager->ShowDialogWithManager(MakeFakeDialog(),
+        new TestNativeWebContentsModalDialogManager(
+            dialog, manager, &(trackers[i]));
+    manager->ShowDialogWithManager(dialog,
     scoped_ptr<SingleWebContentsDialogManager>(
         native_managers[i]).Pass());
   }
diff --git a/components/webdata_common.target.darwin-arm.mk b/components/webdata_common.target.darwin-arm.mk
index 1516f28..e1b3638 100644
--- a/components/webdata_common.target.darwin-arm.mk
+++ b/components/webdata_common.target.darwin-arm.mk
@@ -246,7 +246,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/webdata_common.target.darwin-mips.mk b/components/webdata_common.target.darwin-mips.mk
index 7a0b0e0..f1c69eb 100644
--- a/components/webdata_common.target.darwin-mips.mk
+++ b/components/webdata_common.target.darwin-mips.mk
@@ -242,7 +242,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/webdata_common.target.darwin-x86.mk b/components/webdata_common.target.darwin-x86.mk
index b9fb871..d81cf0b 100644
--- a/components/webdata_common.target.darwin-x86.mk
+++ b/components/webdata_common.target.darwin-x86.mk
@@ -244,7 +244,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/webdata_common.target.darwin-x86_64.mk b/components/webdata_common.target.darwin-x86_64.mk
index 3f04b0b..2175b29 100644
--- a/components/webdata_common.target.darwin-x86_64.mk
+++ b/components/webdata_common.target.darwin-x86_64.mk
@@ -244,7 +244,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/webdata_common.target.linux-arm.mk b/components/webdata_common.target.linux-arm.mk
index 1516f28..e1b3638 100644
--- a/components/webdata_common.target.linux-arm.mk
+++ b/components/webdata_common.target.linux-arm.mk
@@ -246,7 +246,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/webdata_common.target.linux-mips.mk b/components/webdata_common.target.linux-mips.mk
index 7a0b0e0..f1c69eb 100644
--- a/components/webdata_common.target.linux-mips.mk
+++ b/components/webdata_common.target.linux-mips.mk
@@ -242,7 +242,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/webdata_common.target.linux-x86.mk b/components/webdata_common.target.linux-x86.mk
index b9fb871..d81cf0b 100644
--- a/components/webdata_common.target.linux-x86.mk
+++ b/components/webdata_common.target.linux-x86.mk
@@ -244,7 +244,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/webdata_common.target.linux-x86_64.mk b/components/webdata_common.target.linux-x86_64.mk
index 3f04b0b..2175b29 100644
--- a/components/webdata_common.target.linux-x86_64.mk
+++ b/components/webdata_common.target.linux-x86_64.mk
@@ -244,7 +244,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/components/wifi/wifi_service_mac.mm b/components/wifi/wifi_service_mac.mm
index fabc974..eb83e17 100644
--- a/components/wifi/wifi_service_mac.mm
+++ b/components/wifi/wifi_service_mac.mm
@@ -242,8 +242,16 @@
     const std::string& network_guid,
     scoped_ptr<base::DictionaryValue> properties,
     std::string* error) {
-  network_properties_.SetWithoutPathExpansion(network_guid,
-                                              properties.release());
+  base::DictionaryValue* existing_properties;
+  // If the network properties already exist, don't override previously set
+  // properties, unless they are set in |properties|.
+  if (network_properties_.GetDictionaryWithoutPathExpansion(
+          network_guid, &existing_properties)) {
+    existing_properties->MergeDictionary(properties.get());
+  } else {
+    network_properties_.SetWithoutPathExpansion(network_guid,
+                                                properties.release());
+  }
 }
 
 void WiFiServiceMac::CreateNetwork(
diff --git a/components/wifi/wifi_service_win.cc b/components/wifi/wifi_service_win.cc
index 8b69e1a..130c142 100644
--- a/components/wifi/wifi_service_win.cc
+++ b/components/wifi/wifi_service_win.cc
@@ -57,9 +57,9 @@
 const char kWlanSetProfile[] = "WlanSetProfile";
 
 // WlanApi function definitions
-typedef DWORD (WINAPI* WlanConnectFunction)(
+typedef DWORD(WINAPI* WlanConnectFunction)(
     HANDLE hClientHandle,
-    CONST GUID *pInterfaceGuid,
+    CONST GUID* pInterfaceGuid,
     CONST PWLAN_CONNECTION_PARAMETERS pConnectionParameters,
     PVOID pReserved);
 
@@ -67,31 +67,29 @@
     HANDLE hClientHandle,
     PVOID pReserved);
 
-typedef DWORD (WINAPI* WlanDeleteProfileFunction)(
-    HANDLE hClientHandle,
-    const GUID *pInterfaceGuid,
-    LPCWSTR strProfileName,
-    PVOID pReserved);
+typedef DWORD(WINAPI* WlanDeleteProfileFunction)(HANDLE hClientHandle,
+                                                 const GUID* pInterfaceGuid,
+                                                 LPCWSTR strProfileName,
+                                                 PVOID pReserved);
 
-typedef DWORD (WINAPI* WlanDisconnectFunction)(
-    HANDLE hClientHandle,
-    CONST GUID *pInterfaceGuid,
-    PVOID pReserved);
+typedef DWORD(WINAPI* WlanDisconnectFunction)(HANDLE hClientHandle,
+                                              CONST GUID* pInterfaceGuid,
+                                              PVOID pReserved);
 
-typedef DWORD (WINAPI* WlanEnumInterfacesFunction)(
+typedef DWORD(WINAPI* WlanEnumInterfacesFunction)(
     HANDLE hClientHandle,
     PVOID pReserved,
-    PWLAN_INTERFACE_INFO_LIST *ppInterfaceList);
+    PWLAN_INTERFACE_INFO_LIST* ppInterfaceList);
 
 typedef VOID (WINAPI* WlanFreeMemoryFunction)(
     _In_ PVOID pMemory);
 
-typedef DWORD (WINAPI* WlanGetAvailableNetworkListFunction)(
+typedef DWORD(WINAPI* WlanGetAvailableNetworkListFunction)(
     HANDLE hClientHandle,
-    CONST GUID *pInterfaceGuid,
+    CONST GUID* pInterfaceGuid,
     DWORD dwFlags,
     PVOID pReserved,
-    PWLAN_AVAILABLE_NETWORK_LIST *ppAvailableNetworkList);
+    PWLAN_AVAILABLE_NETWORK_LIST* ppAvailableNetworkList);
 
 typedef DWORD (WINAPI* WlanGetNetworkBssListFunction)(
     HANDLE hClientHandle,
@@ -102,14 +100,13 @@
     PVOID pReserved,
     PWLAN_BSS_LIST* ppWlanBssList);
 
-typedef DWORD (WINAPI* WlanGetProfileFunction)(
-    HANDLE hClientHandle,
-    CONST GUID *pInterfaceGuid,
-    LPCWSTR strProfileName,
-    PVOID pReserved,
-    LPWSTR *pstrProfileXml,
-    DWORD *pdwFlags,
-    DWORD *pdwGrantedAccess);
+typedef DWORD(WINAPI* WlanGetProfileFunction)(HANDLE hClientHandle,
+                                              CONST GUID* pInterfaceGuid,
+                                              LPCWSTR strProfileName,
+                                              PVOID pReserved,
+                                              LPWSTR* pstrProfileXml,
+                                              DWORD* pdwFlags,
+                                              DWORD* pdwGrantedAccess);
 
 typedef DWORD (WINAPI* WlanOpenHandleFunction)(
     DWORD dwClientVersion,
@@ -117,13 +114,13 @@
     PDWORD pdwNegotiatedVersion,
     PHANDLE phClientHandle);
 
-typedef DWORD (WINAPI* WlanQueryInterfaceFunction)(
+typedef DWORD(WINAPI* WlanQueryInterfaceFunction)(
     HANDLE hClientHandle,
-    const GUID *pInterfaceGuid,
+    const GUID* pInterfaceGuid,
     WLAN_INTF_OPCODE OpCode,
     PVOID pReserved,
     PDWORD pdwDataSize,
-    PVOID *ppData,
+    PVOID* ppData,
     PWLAN_OPCODE_VALUE_TYPE pWlanOpcodeValueType);
 
 typedef DWORD (WINAPI* WlanRegisterNotificationFunction)(
@@ -144,22 +141,20 @@
     BOOL bOverWrite,
     PVOID pReserved);
 
-typedef DWORD (WINAPI* WlanScanFunction)(
-    HANDLE hClientHandle,
-    CONST GUID *pInterfaceGuid,
-    CONST PDOT11_SSID pDot11Ssid,
-    CONST PWLAN_RAW_DATA pIeData,
-    PVOID pReserved);
+typedef DWORD(WINAPI* WlanScanFunction)(HANDLE hClientHandle,
+                                        CONST GUID* pInterfaceGuid,
+                                        CONST PDOT11_SSID pDot11Ssid,
+                                        CONST PWLAN_RAW_DATA pIeData,
+                                        PVOID pReserved);
 
-typedef DWORD (WINAPI* WlanSetProfileFunction)(
-    HANDLE hClientHandle,
-    const GUID *pInterfaceGuid,
-    DWORD dwFlags,
-    LPCWSTR strProfileXml,
-    LPCWSTR strAllUserProfileSecurity,
-    BOOL bOverwrite,
-    PVOID pReserved,
-    DWORD* pdwReasonCode);
+typedef DWORD(WINAPI* WlanSetProfileFunction)(HANDLE hClientHandle,
+                                              const GUID* pInterfaceGuid,
+                                              DWORD dwFlags,
+                                              LPCWSTR strProfileXml,
+                                              LPCWSTR strAllUserProfileSecurity,
+                                              BOOL bOverwrite,
+                                              PVOID pReserved,
+                                              DWORD* pdwReasonCode);
 
 // Values for WLANProfile XML.
 const char kAuthenticationOpen[] = "open";
@@ -331,6 +326,10 @@
   // Deduce |onc::wifi| security from |alg|.
   std::string SecurityFromDot11AuthAlg(DOT11_AUTH_ALGORITHM alg) const;
 
+  // Deduce |onc::connection_state| from |wlan_state|.
+  std::string ConnectionStateFromInterfaceState(
+      WLAN_INTERFACE_STATE wlan_state) const;
+
   // Convert |EncryptionType| into WPA(2) encryption type string.
   std::string WpaEncryptionFromEncryptionType(
       EncryptionType encryption_type) const;
@@ -342,18 +341,23 @@
                                   std::string* encryption,
                                   std::string* key_type) const;
 
-  // Populate |properties| based on |wlan| and its corresponding bss info from
-  // |wlan_bss_list|.
+  // Populate |properties| based on |wlan|.
   void NetworkPropertiesFromAvailableNetwork(const WLAN_AVAILABLE_NETWORK& wlan,
-                                             const WLAN_BSS_LIST& wlan_bss_list,
                                              NetworkProperties* properties);
 
+  // Update |properties| based on bss info from |wlan_bss_list|. If |bssid| in
+  // |properties| is not empty, then it is not changed and |frequency| is set
+  // based on that bssid.
+  void UpdateNetworkPropertiesFromBssList(const std::string& network_guid,
+                                          const WLAN_BSS_LIST& wlan_bss_list,
+                                          NetworkProperties* properties);
+
   // Get the list of visible wireless networks.
   DWORD GetVisibleNetworkList(NetworkList* network_list);
 
-  // Find currently connected network if any. Populate |connected_network_guid|
-  // on success.
-  DWORD FindConnectedNetwork(std::string* connected_network_guid);
+  // Get properties of the network currently used (connected or in transition)
+  // by interface. Populate |current_properties| on success.
+  DWORD GetCurrentProperties(NetworkProperties* current_properties);
 
   // Connect to network |network_guid| using previosly stored profile if exists,
   // or just network sid. If |frequency| is not |kFrequencyUnknown| then
@@ -364,10 +368,6 @@
   // Disconnect from currently connected network if any.
   DWORD Disconnect();
 
-  // Get Frequency of currently connected network |network_guid|. If network is
-  // not connected, then return |kFrequencyUnknown|.
-  Frequency GetConnectedFrequency(const std::string& network_guid);
-
   // Get desired connection freqency if it was set using |SetProperties|.
   // Default to |kFrequencyAny|.
   Frequency GetFrequencyToConnect(const std::string& network_guid) const;
@@ -511,20 +511,28 @@
                                     base::DictionaryValue* properties,
                                     std::string* error) {
   DWORD error_code = EnsureInitialized();
+  if (CheckError(error_code, kWiFiServiceError, error))
+    return;
+
+  NetworkProperties connected_properties;
+  error_code = GetCurrentProperties(&connected_properties);
+  if (error_code == ERROR_SUCCESS &&
+      connected_properties.guid == network_guid) {
+    properties->Swap(connected_properties.ToValue(false).get());
+    return;
+  }
+
+  NetworkList network_list;
+  error_code = GetVisibleNetworkList(&network_list);
   if (error_code == ERROR_SUCCESS) {
-    NetworkList network_list;
-    error_code = GetVisibleNetworkList(&network_list);
-    if (error_code == ERROR_SUCCESS && !network_list.empty()) {
-      NetworkList::const_iterator it = FindNetwork(network_list, network_guid);
-      if (it != network_list.end()) {
-        DVLOG(1) << "Get Properties: " << network_guid << ":"
-                   << it->connection_state;
-        properties->Swap(it->ToValue(false).get());
-        return;
-      } else {
-        error_code = ERROR_NOT_FOUND;
-      }
+    NetworkList::const_iterator it = FindNetwork(network_list, network_guid);
+    if (it != network_list.end()) {
+      DVLOG(1) << "Get Properties: " << network_guid << ":"
+                  << it->connection_state;
+      properties->Swap(it->ToValue(false).get());
+      return;
     }
+    error_code = ERROR_NOT_FOUND;
   }
 
   CheckError(error_code, kWiFiServiceError, error);
@@ -555,8 +563,17 @@
     *error = kWiFiServiceError;
     return;
   }
-  connect_properties_.SetWithoutPathExpansion(network_guid,
-                                              properties.release());
+
+  base::DictionaryValue* existing_properties;
+  // If the network properties already exist, don't override previously set
+  // properties, unless they are set in |properties|.
+  if (connect_properties_.GetDictionaryWithoutPathExpansion(
+          network_guid, &existing_properties)) {
+    existing_properties->MergeDictionary(properties.get());
+  } else {
+    connect_properties_.SetWithoutPathExpansion(network_guid,
+                                                properties.release());
+  }
 }
 
 void WiFiServiceImpl::CreateNetwork(
@@ -652,8 +669,13 @@
       bool already_connected = (network_guid == connected_network_guid);
       Frequency frequency = GetFrequencyToConnect(network_guid);
       if (already_connected && frequency != kFrequencyAny) {
-        Frequency connected_frequency = GetConnectedFrequency(network_guid);
-        already_connected = (frequency == connected_frequency);
+        NetworkProperties current_properties;
+        if (GetCurrentProperties(&current_properties) == ERROR_SUCCESS) {
+          already_connected = current_properties.connection_state ==
+                                  onc::connection_state::kConnected &&
+                              frequency == current_properties.frequency &&
+                              network_guid == current_properties.guid;
+        }
       }
       // Connect only if network |network_guid| is not connected already.
       if (!already_connected)
@@ -874,9 +896,11 @@
     RestoreNwCategoryWizard();
     return;
   }
-  std::string connected_network_guid;
-  DWORD error = FindConnectedNetwork(&connected_network_guid);
-  if (network_guid == connected_network_guid) {
+  NetworkProperties current_properties;
+  DWORD error = GetCurrentProperties(&current_properties);
+  if (network_guid == current_properties.guid &&
+      current_properties.connection_state ==
+          onc::connection_state::kConnected) {
     DVLOG(1) << "WiFi Connected, Reset DHCP: " << network_guid;
     // Even though wireless network is now connected, it may still be unusable,
     // e.g. after Chromecast device reset. Reset DHCP on wireless network to
@@ -925,15 +949,17 @@
 DWORD WiFiServiceImpl::SaveCurrentConnectedNetwork(
     std::string* connected_network_guid) {
   // Find currently connected network.
-  DWORD error = FindConnectedNetwork(connected_network_guid);
-  if (error == ERROR_SUCCESS && !connected_network_guid->empty()) {
+  NetworkProperties current_properties;
+  DWORD error = GetCurrentProperties(&current_properties);
+  if (error == ERROR_SUCCESS && !current_properties.guid.empty() &&
+      current_properties.connection_state ==
+          onc::connection_state::kConnected) {
+    *connected_network_guid = current_properties.guid;
+    SaveTempProfile(*connected_network_guid);
+    std::string profile_xml;
+    error = GetProfile(*connected_network_guid, false, &profile_xml);
     if (error == ERROR_SUCCESS) {
-      SaveTempProfile(*connected_network_guid);
-      std::string profile_xml;
-      error = GetProfile(*connected_network_guid, false, &profile_xml);
-      if (error == ERROR_SUCCESS) {
-        saved_profiles_xml_[*connected_network_guid] = profile_xml;
-      }
+      saved_profiles_xml_[*connected_network_guid] = profile_xml;
     }
   }
   return error;
@@ -1228,10 +1254,27 @@
   }
 }
 
+std::string WiFiServiceImpl::ConnectionStateFromInterfaceState(
+    WLAN_INTERFACE_STATE wlan_state) const {
+  switch (wlan_state) {
+    case wlan_interface_state_connected:
+      // TODO(mef): Even if |wlan_state| is connected, the network may still
+      // not be reachable, and should be resported as |kConnecting|.
+      return onc::connection_state::kConnected;
+    case wlan_interface_state_associating:
+    case wlan_interface_state_discovering:
+    case wlan_interface_state_authenticating:
+      return onc::connection_state::kConnecting;
+    default:
+      return onc::connection_state::kNotConnected;
+  }
+}
+
 void WiFiServiceImpl::NetworkPropertiesFromAvailableNetwork(
     const WLAN_AVAILABLE_NETWORK& wlan,
-    const WLAN_BSS_LIST& wlan_bss_list,
     NetworkProperties* properties) {
+  // TODO(mef): It would be nice for the connection states in
+  // getVisibleNetworks and getProperties results to be consistent.
   if (wlan.dwFlags & WLAN_AVAILABLE_NETWORK_CONNECTED) {
     properties->connection_state = onc::connection_state::kConnected;
   } else {
@@ -1242,25 +1285,38 @@
   properties->name = properties->ssid;
   properties->guid = GUIDFromWLAN(wlan);
   properties->type = onc::network_type::kWiFi;
-
-  for (size_t bss = 0; bss < wlan_bss_list.dwNumberOfItems; ++bss) {
-    const WLAN_BSS_ENTRY& bss_entry(wlan_bss_list.wlanBssEntries[bss]);
-    if (bss_entry.dot11Ssid.uSSIDLength == wlan.dot11Ssid.uSSIDLength &&
-        0 == memcmp(bss_entry.dot11Ssid.ucSSID,
-                    wlan.dot11Ssid.ucSSID,
-                    bss_entry.dot11Ssid.uSSIDLength)) {
-      properties->frequency = GetNormalizedFrequency(
-          bss_entry.ulChCenterFrequency / 1000);
-      properties->frequency_set.insert(properties->frequency);
-      properties->bssid = NetworkProperties::MacAddressAsString(
-          bss_entry.dot11Bssid);
-    }
-  }
   properties->security =
       SecurityFromDot11AuthAlg(wlan.dot11DefaultAuthAlgorithm);
   properties->signal_strength = wlan.wlanSignalQuality;
 }
 
+void WiFiServiceImpl::UpdateNetworkPropertiesFromBssList(
+    const std::string& network_guid,
+    const WLAN_BSS_LIST& wlan_bss_list,
+    NetworkProperties* properties) {
+  if (network_guid.empty())
+    return;
+
+  DOT11_SSID ssid = SSIDFromGUID(network_guid);
+  for (size_t bss = 0; bss < wlan_bss_list.dwNumberOfItems; ++bss) {
+    const WLAN_BSS_ENTRY& bss_entry(wlan_bss_list.wlanBssEntries[bss]);
+    if (bss_entry.dot11Ssid.uSSIDLength == ssid.uSSIDLength &&
+        0 == memcmp(bss_entry.dot11Ssid.ucSSID,
+                    ssid.ucSSID,
+                    bss_entry.dot11Ssid.uSSIDLength)) {
+      std::string bssid = NetworkProperties::MacAddressAsString(
+          bss_entry.dot11Bssid);
+      Frequency frequency = GetNormalizedFrequency(
+          bss_entry.ulChCenterFrequency / 1000);
+      properties->frequency_set.insert(frequency);
+      if (properties->bssid.empty() || properties->bssid == bssid) {
+        properties->frequency = frequency;
+        properties->bssid = bssid;
+      }
+    }
+  }
+}
+
 // Get the list of visible wireless networks
 DWORD WiFiServiceImpl::GetVisibleNetworkList(NetworkList* network_list) {
   if (client_ == NULL) {
@@ -1299,8 +1355,10 @@
         NetworkProperties network_properties;
         NetworkPropertiesFromAvailableNetwork(
             available_network_list->Network[i],
-            *bss_list,
             &network_properties);
+        UpdateNetworkPropertiesFromBssList(network_properties.guid,
+                                           *bss_list,
+                                           &network_properties);
         // Check for duplicate network guids.
         if (network_guids.count(network_properties.guid)) {
           // There should be no difference between properties except for
@@ -1331,51 +1389,18 @@
   return error;
 }
 
-// Find currently connected network.
-DWORD WiFiServiceImpl::FindConnectedNetwork(
-    std::string* connected_network_guid) {
+DWORD WiFiServiceImpl::GetCurrentProperties(NetworkProperties* properties) {
   if (client_ == NULL) {
     NOTREACHED();
     return ERROR_NOINTERFACE;
   }
 
-  DWORD error = ERROR_SUCCESS;
-  PWLAN_AVAILABLE_NETWORK_LIST available_network_list = NULL;
-  error = WlanGetAvailableNetworkList_function_(
-      client_, &interface_guid_, 0, NULL, &available_network_list);
-
-  if (error == ERROR_SUCCESS && NULL != available_network_list) {
-    for (DWORD i = 0; i < available_network_list->dwNumberOfItems; ++i) {
-      const WLAN_AVAILABLE_NETWORK& wlan = available_network_list->Network[i];
-      if (wlan.dwFlags & WLAN_AVAILABLE_NETWORK_CONNECTED) {
-        *connected_network_guid = GUIDFromWLAN(wlan);
-        break;
-      }
-    }
-  }
-
-  // Clean up.
-  if (available_network_list != NULL) {
-    WlanFreeMemory_function_(available_network_list);
-  }
-
-  return error;
-}
-
-WiFiService::Frequency WiFiServiceImpl::GetConnectedFrequency(
-    const std::string& network_guid) {
-  if (client_ == NULL) {
-    NOTREACHED();
-    return kFrequencyUnknown;
-  }
-
   // TODO(mef): WlanGetNetworkBssList is not available on XP. If XP support is
   // needed, then different method of getting BSS (e.g. OID query) will have
   // to be used.
   if (WlanGetNetworkBssList_function_ == NULL)
-    return kFrequencyUnknown;
+    return ERROR_NOINTERFACE;
 
-  Frequency frequency = kFrequencyUnknown;
   DWORD error = ERROR_SUCCESS;
   DWORD data_size = 0;
   PWLAN_CONNECTION_ATTRIBUTES wlan_connection_attributes = NULL;
@@ -1389,46 +1414,44 @@
       reinterpret_cast<PVOID*>(&wlan_connection_attributes),
       NULL);
   if (error == ERROR_SUCCESS &&
-      wlan_connection_attributes != NULL &&
-      wlan_connection_attributes->isState == wlan_interface_state_connected) {
+      wlan_connection_attributes != NULL) {
     WLAN_ASSOCIATION_ATTRIBUTES& connected_wlan =
         wlan_connection_attributes->wlanAssociationAttributes;
-    // Try to find connected frequency based on bss.
-    if (GUIDFromSSID(connected_wlan.dot11Ssid) == network_guid &&
-        WlanGetNetworkBssList_function_ != NULL) {
-      error = WlanGetNetworkBssList_function_(client_,
-                                              &interface_guid_,
-                                              &connected_wlan.dot11Ssid,
-                                              connected_wlan.dot11BssType,
-                                              FALSE,
-                                              NULL,
-                                              &bss_list);
-      if (error == ERROR_SUCCESS && NULL != bss_list) {
-        // Go through bss_list and find matching BSSID.
-        for (size_t bss = 0; bss < bss_list->dwNumberOfItems; ++bss) {
-          const WLAN_BSS_ENTRY& bss_entry(bss_list->wlanBssEntries[bss]);
-          if (0 == memcmp(bss_entry.dot11Bssid,
-                          connected_wlan.dot11Bssid,
-                          sizeof(bss_entry.dot11Bssid))) {
-            frequency = GetNormalizedFrequency(
-                bss_entry.ulChCenterFrequency / 1000);
-            break;
-          }
-        }
-      }
+
+    properties->connection_state = ConnectionStateFromInterfaceState(
+        wlan_connection_attributes->isState);
+    properties->ssid = GUIDFromSSID(connected_wlan.dot11Ssid);
+    properties->name = properties->ssid;
+    properties->guid = GUIDFromSSID(connected_wlan.dot11Ssid);
+    properties->type = onc::network_type::kWiFi;
+    properties->bssid = NetworkProperties::MacAddressAsString(
+        connected_wlan.dot11Bssid);
+    properties->security = SecurityFromDot11AuthAlg(
+        wlan_connection_attributes->wlanSecurityAttributes.dot11AuthAlgorithm);
+    properties->signal_strength = connected_wlan.wlanSignalQuality;
+
+    error = WlanGetNetworkBssList_function_(client_,
+                                            &interface_guid_,
+                                            &connected_wlan.dot11Ssid,
+                                            connected_wlan.dot11BssType,
+                                            FALSE,
+                                            NULL,
+                                            &bss_list);
+    if (error == ERROR_SUCCESS && NULL != bss_list) {
+      UpdateNetworkPropertiesFromBssList(properties->guid,
+                                         *bss_list,
+                                         properties);
     }
   }
 
   // Clean up.
-  if (wlan_connection_attributes != NULL) {
+  if (wlan_connection_attributes != NULL)
     WlanFreeMemory_function_(wlan_connection_attributes);
-  }
 
-  if (bss_list != NULL) {
+  if (bss_list != NULL)
     WlanFreeMemory_function_(bss_list);
-  }
 
-  return frequency;
+  return error;
 }
 
 WiFiService::Frequency WiFiServiceImpl::GetFrequencyToConnect(
diff --git a/content/DEPS b/content/DEPS
index 56a4ab6..11f13d0 100644
--- a/content/DEPS
+++ b/content/DEPS
@@ -37,6 +37,7 @@
   "+gpu",
   "+mojo/public",
   "+mojo/bindings/js",
+  "+mojo/common",
   "+mojo/embedder",
   "+mojo/service_manager",
   "+net",
diff --git a/content/app/content_main_runner.cc b/content/app/content_main_runner.cc
index 2276f1a..71da1a5 100644
--- a/content/app/content_main_runner.cc
+++ b/content/app/content_main_runner.cc
@@ -27,6 +27,8 @@
 #include "base/strings/stringprintf.h"
 #include "content/browser/browser_main.h"
 #include "content/browser/gpu/gpu_process_host.h"
+#include "content/browser/renderer_host/render_process_host_impl.h"
+#include "content/browser/utility_process_host_impl.h"
 #include "content/common/set_process_title.h"
 #include "content/common/url_schemes.h"
 #include "content/gpu/in_process_gpu_thread.h"
@@ -34,8 +36,6 @@
 #include "content/public/app/content_main_delegate.h"
 #include "content/public/app/startup_helper_win.h"
 #include "content/public/browser/content_browser_client.h"
-#include "content/public/browser/render_process_host.h"
-#include "content/public/browser/utility_process_host.h"
 #include "content/public/common/content_client.h"
 #include "content/public/common/content_constants.h"
 #include "content/public/common/content_paths.h"
@@ -117,64 +117,6 @@
 extern int WorkerMain(const MainFunctionParams&);
 }  // namespace content
 
-namespace {
-#if defined(OS_WIN)
-// In order to have Theme support, we need to connect to the theme service.
-// This needs to be done before we lock down the process. Officially this
-// can be done with OpenThemeData() but it fails unless you pass a valid
-// window at least the first time. Interestingly, the very act of creating a
-// window also sets the connection to the theme service.
-void EnableThemeSupportOnAllWindowStations() {
-  HDESK desktop_handle = ::OpenInputDesktop(0, FALSE, READ_CONTROL);
-  if (desktop_handle) {
-    // This means we are running in an input desktop, which implies WinSta0.
-    ::CloseDesktop(desktop_handle);
-    return;
-  }
-
-  HWINSTA current_station = ::GetProcessWindowStation();
-  DCHECK(current_station);
-
-  HWINSTA winsta0 = ::OpenWindowStationA("WinSta0", FALSE, GENERIC_READ);
-  if (!winsta0) {
-    DVLOG(0) << "Unable to open to WinSta0, we: "<< ::GetLastError();
-    return;
-  }
-  if (!::SetProcessWindowStation(winsta0)) {
-    // Could not set the alternate window station. There is a possibility
-    // that the theme wont be correctly initialized.
-    NOTREACHED() << "Unable to switch to WinSta0, we: "<< ::GetLastError();
-    ::CloseWindowStation(winsta0);
-    return;
-  }
-
-  HWND window = ::CreateWindowExW(0, L"Static", L"", WS_POPUP | WS_DISABLED,
-                                  CW_USEDEFAULT, 0, 0, 0,  HWND_MESSAGE, NULL,
-                                  ::GetModuleHandleA(NULL), NULL);
-  if (!window) {
-    DLOG(WARNING) << "failed to enable theme support";
-  } else {
-    ::DestroyWindow(window);
-    window = NULL;
-  }
-
-  // Revert the window station.
-  if (!::SetProcessWindowStation(current_station)) {
-    // We failed to switch back to the secure window station. This might
-    // confuse the process enough that we should kill it now.
-    LOG(FATAL) << "Failed to restore alternate window station";
-  }
-
-  if (!::CloseWindowStation(winsta0)) {
-    // We might be leaking a winsta0 handle.  This is a security risk, but
-    // since we allow fail over to no desktop protection in low memory
-    // condition, this is not a big risk.
-    NOTREACHED();
-  }
-}
-#endif  // defined(OS_WIN)
-}  // namespace
-
 namespace content {
 
 base::LazyInstance<ContentBrowserClient>
@@ -403,9 +345,9 @@
 #if !defined(OS_IOS)
 static void RegisterMainThreadFactories() {
 #if !defined(CHROME_MULTIPLE_DLL_BROWSER)
-  UtilityProcessHost::RegisterUtilityMainThreadFactory(
+  UtilityProcessHostImpl::RegisterUtilityMainThreadFactory(
       CreateInProcessUtilityThread);
-  RenderProcessHost::RegisterRendererMainThreadFactory(
+  RenderProcessHostImpl::RegisterRendererMainThreadFactory(
       CreateInProcessRendererThread);
   GpuProcessHost::RegisterGpuMainThreadFactory(
       CreateInProcessGpuThread);
@@ -715,9 +657,6 @@
     if (command_line.HasSwitch(switches::kEnableHighResolutionTime))
       base::TimeTicks::SetNowIsHighResNowIfSupported();
 
-    // This must be done early enough since some helper functions like
-    // IsTouchEnabled, needed to load resources, may call into the theme dll.
-    EnableThemeSupportOnAllWindowStations();
     SetupCRT(command_line);
 #endif
 
diff --git a/content/browser/DEPS b/content/browser/DEPS
index 11d591c..2a51c22 100644
--- a/content/browser/DEPS
+++ b/content/browser/DEPS
@@ -38,7 +38,8 @@
   "+third_party/WebKit/public/platform/WebIDBDatabaseException.h",
   "+third_party/WebKit/public/platform/WebIDBTypes.h",
   "+third_party/WebKit/public/platform/WebReferrerPolicy.h",
-  "+third_party/WebKit/public/platform/WebScreenOrientation.h",
+  "+third_party/WebKit/public/platform/WebScreenOrientationLockType.h",
+  "+third_party/WebKit/public/platform/WebScreenOrientationType.h",
   "+third_party/WebKit/public/platform/WebScreenInfo.h",
   "+third_party/WebKit/public/platform/WebServiceWorkerError.h",
   "+third_party/WebKit/public/platform/WebServiceWorkerState.h",
diff --git a/content/browser/accessibility/accessibility_ui.cc b/content/browser/accessibility/accessibility_ui.cc
index a052982..6f63a0e 100644
--- a/content/browser/accessibility/accessibility_ui.cc
+++ b/content/browser/accessibility/accessibility_ui.cc
@@ -89,18 +89,60 @@
                                accessibility_mode);
 }
 
-void SendTargetsData(
+}  // namespace
+
+AccessibilityUI::AccessibilityUI(WebUI* web_ui) : WebUIController(web_ui) {
+  // Set up the chrome://accessibility source.
+  WebUIDataSource* html_source =
+      WebUIDataSource::Create(kChromeUIAccessibilityHost);
+  html_source->SetUseJsonJSFormatV2();
+
+  web_ui->RegisterMessageCallback(
+      "toggleAccessibility",
+      base::Bind(&AccessibilityUI::ToggleAccessibility,
+                 base::Unretained(this)));
+  web_ui->RegisterMessageCallback(
+      "toggleGlobalAccessibility",
+      base::Bind(&AccessibilityUI::ToggleGlobalAccessibility,
+                 base::Unretained(this)));
+  web_ui->RegisterMessageCallback(
+      "requestAccessibilityTree",
+      base::Bind(&AccessibilityUI::RequestAccessibilityTree,
+                 base::Unretained(this)));
+
+  // Add required resources.
+  html_source->SetJsonPath("strings.js");
+  html_source->AddResourcePath("accessibility.css", IDR_ACCESSIBILITY_CSS);
+  html_source->AddResourcePath("accessibility.js", IDR_ACCESSIBILITY_JS);
+  html_source->SetDefaultResource(IDR_ACCESSIBILITY_HTML);
+  html_source->SetRequestFilter(base::Bind(
+      &AccessibilityUI::HandleRequestCallback, base::Unretained(this)));
+
+  BrowserContext* browser_context =
+      web_ui->GetWebContents()->GetBrowserContext();
+  WebUIDataSource::Add(browser_context, html_source);
+}
+
+AccessibilityUI::~AccessibilityUI() {}
+
+void AccessibilityUI::SendTargetsData(
     const WebUIDataSource::GotDataCallback& callback) {
   scoped_ptr<base::ListValue> rvh_list(new base::ListValue());
 
   scoped_ptr<RenderWidgetHostIterator> widgets(
       RenderWidgetHost::GetRenderWidgetHosts());
+  BrowserContext* current_context =
+      web_ui()->GetWebContents()->GetBrowserContext();
   while (RenderWidgetHost* widget = widgets->GetNextHost()) {
     // Ignore processes that don't have a connection, such as crashed tabs.
     if (!widget->GetProcess()->HasConnection())
       continue;
     if (!widget->IsRenderView())
         continue;
+    RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget);
+    BrowserContext* context = rwhi->GetProcess()->GetBrowserContext();
+    if (context != current_context)
+      continue;
 
     RenderViewHost* rvh = RenderViewHost::From(widget);
     rvh_list->Append(BuildTargetDescriptor(rvh));
@@ -118,7 +160,7 @@
   callback.Run(base::RefCountedString::TakeString(&json_string));
 }
 
-bool HandleRequestCallback(
+bool AccessibilityUI::HandleRequestCallback(
     const std::string& path,
     const WebUIDataSource::GotDataCallback& callback) {
   if (path != kDataFile)
@@ -128,43 +170,6 @@
   return true;
 }
 
-}  // namespace
-
-AccessibilityUI::AccessibilityUI(WebUI* web_ui)
-  : WebUIController(web_ui) {
-  // Set up the chrome://accessibility source.
-  WebUIDataSource* html_source =
-      WebUIDataSource::Create(kChromeUIAccessibilityHost);
-  html_source->SetUseJsonJSFormatV2();
-
-  web_ui->RegisterMessageCallback(
-      "toggleAccessibility",
-      base::Bind(&AccessibilityUI::ToggleAccessibility,
-               base::Unretained(this)));
-  web_ui->RegisterMessageCallback(
-      "toggleGlobalAccessibility",
-      base::Bind(&AccessibilityUI::ToggleGlobalAccessibility,
-               base::Unretained(this)));
-  web_ui->RegisterMessageCallback(
-      "requestAccessibilityTree",
-      base::Bind(&AccessibilityUI::RequestAccessibilityTree,
-                 base::Unretained(this)));
-
-  // Add required resources.
-  html_source->SetJsonPath("strings.js");
-  html_source->AddResourcePath("accessibility.css", IDR_ACCESSIBILITY_CSS);
-  html_source->AddResourcePath("accessibility.js", IDR_ACCESSIBILITY_JS);
-  html_source->SetDefaultResource(IDR_ACCESSIBILITY_HTML);
-  html_source->SetRequestFilter(base::Bind(&HandleRequestCallback));
-
-  BrowserContext* browser_context =
-    web_ui->GetWebContents()->GetBrowserContext();
-  WebUIDataSource::Add(browser_context, html_source);
-}
-
-AccessibilityUI::~AccessibilityUI() {
-}
-
 void AccessibilityUI::ToggleAccessibility(const base::ListValue* args) {
   std::string process_id_str;
   std::string route_id_str;
diff --git a/content/browser/accessibility/accessibility_ui.h b/content/browser/accessibility/accessibility_ui.h
index 1b239f8..bdf022d 100644
--- a/content/browser/accessibility/accessibility_ui.h
+++ b/content/browser/accessibility/accessibility_ui.h
@@ -6,6 +6,7 @@
 #define CHROME_BROWSER_UI_WEBUI_ACCESSIBILITY_UI_H_
 
 #include "content/public/browser/web_ui_controller.h"
+#include "content/public/browser/web_ui_data_source.h"
 
 namespace base {
   class ListValue;
@@ -19,6 +20,9 @@
   virtual ~AccessibilityUI();
 
  private:
+  void SendTargetsData(const WebUIDataSource::GotDataCallback& callback);
+  bool HandleRequestCallback(const std::string& path,
+                             const WebUIDataSource::GotDataCallback& callback);
   void ToggleAccessibility(const base::ListValue* args);
   void ToggleGlobalAccessibility(const base::ListValue* args);
   void RequestAccessibilityTree(const base::ListValue* args);
diff --git a/content/browser/accessibility/browser_accessibility.cc b/content/browser/accessibility/browser_accessibility.cc
index 5e1f94e..fe71fef 100644
--- a/content/browser/accessibility/browser_accessibility.cc
+++ b/content/browser/accessibility/browser_accessibility.cc
@@ -26,17 +26,23 @@
 
 BrowserAccessibility::BrowserAccessibility()
     : manager_(NULL),
-      deprecated_parent_(NULL),
-      deprecated_index_in_parent_(0),
-      instance_active_(false) {
-  data_.id = 0;
-  data_.role = ui::AX_ROLE_UNKNOWN;
-  data_.state = 0;
+      node_(NULL) {
 }
 
 BrowserAccessibility::~BrowserAccessibility() {
 }
 
+void BrowserAccessibility::Init(BrowserAccessibilityManager* manager,
+    ui::AXNode* node) {
+  manager_ = manager;
+  node_ = node;
+}
+
+void BrowserAccessibility::OnDataChanged() {
+  GetStringAttribute(ui::AX_ATTR_NAME, &name_);
+  GetStringAttribute(ui::AX_ATTR_VALUE, &value_);
+}
+
 bool BrowserAccessibility::PlatformIsLeaf() const {
   if (InternalChildCount() == 0)
     return true;
@@ -60,56 +66,10 @@
   return PlatformIsLeaf() ? 0 : InternalChildCount();
 }
 
-void BrowserAccessibility::DetachTree(
-    std::vector<BrowserAccessibility*>* nodes) {
-  nodes->push_back(this);
-  for (size_t i = 0; i < InternalChildCount(); ++i)
-    InternalGetChild(i)->DetachTree(nodes);
-  deprecated_children_.clear();
-  deprecated_parent_ = NULL;
-}
-
-void BrowserAccessibility::InitializeTreeStructure(
-    BrowserAccessibilityManager* manager,
-    BrowserAccessibility* parent,
-    int32 id,
-    int32 index_in_parent) {
-  manager_ = manager;
-  deprecated_parent_ = parent;
-  data_.id = id;
-  deprecated_index_in_parent_ = index_in_parent;
-}
-
-void BrowserAccessibility::InitializeData(const ui::AXNodeData& src) {
-  DCHECK_EQ(data_.id, src.id);
-  data_ = src;
-  instance_active_ = true;
-
-  GetStringAttribute(ui::AX_ATTR_NAME, &name_);
-  GetStringAttribute(ui::AX_ATTR_VALUE, &value_);
-
-  PreInitialize();
-}
-
 bool BrowserAccessibility::IsNative() const {
   return false;
 }
 
-void BrowserAccessibility::SwapChildren(
-    std::vector<BrowserAccessibility*>& children) {
-  children.swap(deprecated_children_);
-}
-
-void BrowserAccessibility::UpdateParent(BrowserAccessibility* parent,
-                                        int index_in_parent) {
-  deprecated_parent_ = parent;
-  deprecated_index_in_parent_ = index_in_parent;
-}
-
-void BrowserAccessibility::SetLocation(const gfx::Rect& new_location) {
-  data_.location = new_location;
-}
-
 bool BrowserAccessibility::IsDescendantOf(
     BrowserAccessibility* ancestor) {
   if (this == ancestor) {
@@ -145,6 +105,59 @@
   return NULL;
 }
 
+uint32 BrowserAccessibility::InternalChildCount() const {
+  if (!node_ || !manager_)
+    return 0;
+  return static_cast<uint32>(node_->child_count());
+}
+
+BrowserAccessibility* BrowserAccessibility::InternalGetChild(
+    uint32 child_index) const {
+  if (!node_ || !manager_)
+    return NULL;
+  return manager_->GetFromAXNode(node_->children()[child_index]);
+}
+
+BrowserAccessibility* BrowserAccessibility::GetParent() const {
+  if (!node_ || !manager_)
+    return NULL;
+  ui::AXNode* parent = node_->parent();
+  return parent ? manager_->GetFromAXNode(parent) : NULL;
+}
+
+int32 BrowserAccessibility::GetIndexInParent() const {
+  return node_ ? node_->index_in_parent() : -1;
+}
+
+int32 BrowserAccessibility::GetId() const {
+  return node_ ? node_->id() : -1;
+}
+
+const ui::AXNodeData& BrowserAccessibility::GetData() const {
+  CR_DEFINE_STATIC_LOCAL(ui::AXNodeData, empty_data, ());
+  if (node_)
+    return node_->data();
+  else
+    return empty_data;
+}
+
+gfx::Rect BrowserAccessibility::GetLocation() const {
+  return GetData().location;
+}
+
+int32 BrowserAccessibility::GetRole() const {
+  return GetData().role;
+}
+
+int32 BrowserAccessibility::GetState() const {
+  return GetData().state;
+}
+
+const std::vector<std::pair<std::string, std::string> >&
+BrowserAccessibility::GetHtmlAttributes() const {
+  return GetData().html_attributes;
+}
+
 gfx::Rect BrowserAccessibility::GetLocalBoundsRect() const {
   gfx::Rect bounds = GetLocation();
 
@@ -350,19 +363,14 @@
 }
 
 void BrowserAccessibility::Destroy() {
-  for (uint32 i = 0; i < InternalChildCount(); i++)
-    InternalGetChild(i)->Destroy();
-  deprecated_children_.clear();
-
   // Allow the object to fire a TextRemoved notification.
   name_.clear();
   value_.clear();
-  PostInitialize();
 
   manager_->NotifyAccessibilityEvent(ui::AX_EVENT_HIDE, this);
+  node_ = NULL;
+  manager_ = NULL;
 
-  instance_active_ = false;
-  manager_->RemoveNode(this);
   NativeReleaseReference();
 }
 
@@ -372,8 +380,9 @@
 
 bool BrowserAccessibility::HasBoolAttribute(
     ui::AXBoolAttribute attribute) const {
-  for (size_t i = 0; i < data_.bool_attributes.size(); ++i) {
-    if (data_.bool_attributes[i].first == attribute)
+  const ui::AXNodeData& data = GetData();
+  for (size_t i = 0; i < data.bool_attributes.size(); ++i) {
+    if (data.bool_attributes[i].first == attribute)
       return true;
   }
 
@@ -383,9 +392,10 @@
 
 bool BrowserAccessibility::GetBoolAttribute(
     ui::AXBoolAttribute attribute) const {
-  for (size_t i = 0; i < data_.bool_attributes.size(); ++i) {
-    if (data_.bool_attributes[i].first == attribute)
-      return data_.bool_attributes[i].second;
+  const ui::AXNodeData& data = GetData();
+  for (size_t i = 0; i < data.bool_attributes.size(); ++i) {
+    if (data.bool_attributes[i].first == attribute)
+      return data.bool_attributes[i].second;
   }
 
   return false;
@@ -393,9 +403,10 @@
 
 bool BrowserAccessibility::GetBoolAttribute(
     ui::AXBoolAttribute attribute, bool* value) const {
-  for (size_t i = 0; i < data_.bool_attributes.size(); ++i) {
-    if (data_.bool_attributes[i].first == attribute) {
-      *value = data_.bool_attributes[i].second;
+  const ui::AXNodeData& data = GetData();
+  for (size_t i = 0; i < data.bool_attributes.size(); ++i) {
+    if (data.bool_attributes[i].first == attribute) {
+      *value = data.bool_attributes[i].second;
       return true;
     }
   }
@@ -405,8 +416,9 @@
 
 bool BrowserAccessibility::HasFloatAttribute(
     ui::AXFloatAttribute attribute) const {
-  for (size_t i = 0; i < data_.float_attributes.size(); ++i) {
-    if (data_.float_attributes[i].first == attribute)
+  const ui::AXNodeData& data = GetData();
+  for (size_t i = 0; i < data.float_attributes.size(); ++i) {
+    if (data.float_attributes[i].first == attribute)
       return true;
   }
 
@@ -415,9 +427,10 @@
 
 float BrowserAccessibility::GetFloatAttribute(
     ui::AXFloatAttribute attribute) const {
-  for (size_t i = 0; i < data_.float_attributes.size(); ++i) {
-    if (data_.float_attributes[i].first == attribute)
-      return data_.float_attributes[i].second;
+  const ui::AXNodeData& data = GetData();
+  for (size_t i = 0; i < data.float_attributes.size(); ++i) {
+    if (data.float_attributes[i].first == attribute)
+      return data.float_attributes[i].second;
   }
 
   return 0.0;
@@ -425,9 +438,10 @@
 
 bool BrowserAccessibility::GetFloatAttribute(
     ui::AXFloatAttribute attribute, float* value) const {
-  for (size_t i = 0; i < data_.float_attributes.size(); ++i) {
-    if (data_.float_attributes[i].first == attribute) {
-      *value = data_.float_attributes[i].second;
+  const ui::AXNodeData& data = GetData();
+  for (size_t i = 0; i < data.float_attributes.size(); ++i) {
+    if (data.float_attributes[i].first == attribute) {
+      *value = data.float_attributes[i].second;
       return true;
     }
   }
@@ -437,8 +451,9 @@
 
 bool BrowserAccessibility::HasIntAttribute(
     ui::AXIntAttribute attribute) const {
-  for (size_t i = 0; i < data_.int_attributes.size(); ++i) {
-    if (data_.int_attributes[i].first == attribute)
+  const ui::AXNodeData& data = GetData();
+  for (size_t i = 0; i < data.int_attributes.size(); ++i) {
+    if (data.int_attributes[i].first == attribute)
       return true;
   }
 
@@ -446,9 +461,10 @@
 }
 
 int BrowserAccessibility::GetIntAttribute(ui::AXIntAttribute attribute) const {
-  for (size_t i = 0; i < data_.int_attributes.size(); ++i) {
-    if (data_.int_attributes[i].first == attribute)
-      return data_.int_attributes[i].second;
+  const ui::AXNodeData& data = GetData();
+  for (size_t i = 0; i < data.int_attributes.size(); ++i) {
+    if (data.int_attributes[i].first == attribute)
+      return data.int_attributes[i].second;
   }
 
   return 0;
@@ -456,9 +472,10 @@
 
 bool BrowserAccessibility::GetIntAttribute(
     ui::AXIntAttribute attribute, int* value) const {
-  for (size_t i = 0; i < data_.int_attributes.size(); ++i) {
-    if (data_.int_attributes[i].first == attribute) {
-      *value = data_.int_attributes[i].second;
+  const ui::AXNodeData& data = GetData();
+  for (size_t i = 0; i < data.int_attributes.size(); ++i) {
+    if (data.int_attributes[i].first == attribute) {
+      *value = data.int_attributes[i].second;
       return true;
     }
   }
@@ -468,8 +485,9 @@
 
 bool BrowserAccessibility::HasStringAttribute(
     ui::AXStringAttribute attribute) const {
-  for (size_t i = 0; i < data_.string_attributes.size(); ++i) {
-    if (data_.string_attributes[i].first == attribute)
+  const ui::AXNodeData& data = GetData();
+  for (size_t i = 0; i < data.string_attributes.size(); ++i) {
+    if (data.string_attributes[i].first == attribute)
       return true;
   }
 
@@ -478,10 +496,11 @@
 
 const std::string& BrowserAccessibility::GetStringAttribute(
     ui::AXStringAttribute attribute) const {
+  const ui::AXNodeData& data = GetData();
   CR_DEFINE_STATIC_LOCAL(std::string, empty_string, ());
-  for (size_t i = 0; i < data_.string_attributes.size(); ++i) {
-    if (data_.string_attributes[i].first == attribute)
-      return data_.string_attributes[i].second;
+  for (size_t i = 0; i < data.string_attributes.size(); ++i) {
+    if (data.string_attributes[i].first == attribute)
+      return data.string_attributes[i].second;
   }
 
   return empty_string;
@@ -489,9 +508,10 @@
 
 bool BrowserAccessibility::GetStringAttribute(
     ui::AXStringAttribute attribute, std::string* value) const {
-  for (size_t i = 0; i < data_.string_attributes.size(); ++i) {
-    if (data_.string_attributes[i].first == attribute) {
-      *value = data_.string_attributes[i].second;
+  const ui::AXNodeData& data = GetData();
+  for (size_t i = 0; i < data.string_attributes.size(); ++i) {
+    if (data.string_attributes[i].first == attribute) {
+      *value = data.string_attributes[i].second;
       return true;
     }
   }
@@ -519,20 +539,27 @@
 
 void BrowserAccessibility::SetStringAttribute(
     ui::AXStringAttribute attribute, const std::string& value) {
-  for (size_t i = 0; i < data_.string_attributes.size(); ++i) {
-    if (data_.string_attributes[i].first == attribute) {
-      data_.string_attributes[i].second = value;
+  if (!node_)
+    return;
+  ui::AXNodeData data = GetData();
+  for (size_t i = 0; i < data.string_attributes.size(); ++i) {
+    if (data.string_attributes[i].first == attribute) {
+      data.string_attributes[i].second = value;
+      node_->SetData(data);
       return;
     }
   }
-  if (!value.empty())
-    data_.string_attributes.push_back(std::make_pair(attribute, value));
+  if (!value.empty()) {
+    data.string_attributes.push_back(std::make_pair(attribute, value));
+    node_->SetData(data);
+  }
 }
 
 bool BrowserAccessibility::HasIntListAttribute(
     ui::AXIntListAttribute attribute) const {
-  for (size_t i = 0; i < data_.intlist_attributes.size(); ++i) {
-    if (data_.intlist_attributes[i].first == attribute)
+  const ui::AXNodeData& data = GetData();
+  for (size_t i = 0; i < data.intlist_attributes.size(); ++i) {
+    if (data.intlist_attributes[i].first == attribute)
       return true;
   }
 
@@ -541,10 +568,11 @@
 
 const std::vector<int32>& BrowserAccessibility::GetIntListAttribute(
     ui::AXIntListAttribute attribute) const {
+  const ui::AXNodeData& data = GetData();
   CR_DEFINE_STATIC_LOCAL(std::vector<int32>, empty_vector, ());
-  for (size_t i = 0; i < data_.intlist_attributes.size(); ++i) {
-    if (data_.intlist_attributes[i].first == attribute)
-      return data_.intlist_attributes[i].second;
+  for (size_t i = 0; i < data.intlist_attributes.size(); ++i) {
+    if (data.intlist_attributes[i].first == attribute)
+      return data.intlist_attributes[i].second;
   }
 
   return empty_vector;
@@ -553,9 +581,10 @@
 bool BrowserAccessibility::GetIntListAttribute(
     ui::AXIntListAttribute attribute,
     std::vector<int32>* value) const {
-  for (size_t i = 0; i < data_.intlist_attributes.size(); ++i) {
-    if (data_.intlist_attributes[i].first == attribute) {
-      *value = data_.intlist_attributes[i].second;
+  const ui::AXNodeData& data = GetData();
+  for (size_t i = 0; i < data.intlist_attributes.size(); ++i) {
+    if (data.intlist_attributes[i].first == attribute) {
+      *value = data.intlist_attributes[i].second;
       return true;
     }
   }
diff --git a/content/browser/accessibility/browser_accessibility.h b/content/browser/accessibility/browser_accessibility.h
index 5ea3748..17f70ca 100644
--- a/content/browser/accessibility/browser_accessibility.h
+++ b/content/browser/accessibility/browser_accessibility.h
@@ -14,6 +14,7 @@
 #include "build/build_config.h"
 #include "content/common/content_export.h"
 #include "third_party/WebKit/public/web/WebAXEnums.h"
+#include "ui/accessibility/ax_node.h"
 #include "ui/accessibility/ax_node_data.h"
 
 #if defined(OS_MACOSX) && __OBJC__
@@ -46,37 +47,25 @@
 
   virtual ~BrowserAccessibility();
 
-  // Detach all descendants of this subtree and push all of the node pointers,
-  // including this node, onto the end of |nodes|.
-  virtual void DetachTree(std::vector<BrowserAccessibility*>* nodes);
+  // Called only once, immediately after construction. The constructor doesn't
+  // take any arguments because in the Windows subclass we use a special
+  // function to construct a COM object.
+  virtual void Init(BrowserAccessibilityManager* manager, ui::AXNode* node);
 
-  // Perform platform-specific initialization. This can be called multiple times
-  // during the lifetime of this instance after the members of this base object
-  // have been reset with new values from the renderer process.
-  // Child dependent initialization can be done here.
-  virtual void PostInitialize() {}
+  // Called after the object is first initialized and again every time
+  // its data changes.
+  virtual void OnDataChanged();
+
+  // Called after an atomic update to the tree finished and this object
+  // was created or changed in this update.
+  virtual void OnUpdateFinished() {}
 
   // Returns true if this is a native platform-specific object, vs a
   // cross-platform generic object.
   virtual bool IsNative() const;
 
-  // Initialize the tree structure of this object.
-  void InitializeTreeStructure(
-      BrowserAccessibilityManager* manager,
-      BrowserAccessibility* parent,
-      int32 id,
-      int32 index_in_parent);
-
-  // Initialize this object's data.
-  void InitializeData(const ui::AXNodeData& src);
-
-  virtual void SwapChildren(std::vector<BrowserAccessibility*>& children);
-
-  // Update the parent and index in parent if this node has been moved.
-  void UpdateParent(BrowserAccessibility* parent, int index_in_parent);
-
-  // Update this node's location, leaving everything else the same.
-  virtual void SetLocation(const gfx::Rect& new_location);
+  // Called when the location changed.
+  virtual void OnLocationChanged() const {}
 
   // Return true if this object is equal to or a descendant of |ancestor|.
   bool IsDescendantOf(BrowserAccessibility* ancestor);
@@ -126,14 +115,14 @@
   BrowserAccessibility* BrowserAccessibilityForPoint(const gfx::Point& point);
 
   // Marks this object for deletion, releases our reference to it, and
-  // recursively calls Destroy() on its children.  May not delete
-  // immediately due to reference counting.
+  // nulls out the pointer to the underlying AXNode.  May not delete
+  // the object immediately due to reference counting.
   //
   // Reference counting is used on some platforms because the
   // operating system may hold onto a reference to a BrowserAccessibility
   // object even after we're through with it. When a BrowserAccessibility
   // has had Destroy() called but its reference count is not yet zero,
-  // queries on this object return failure
+  // instance_active() returns false and queries on this object return failure.
   virtual void Destroy();
 
   // Subclasses should override this to support platform reference counting.
@@ -147,36 +136,31 @@
   //
 
   BrowserAccessibilityManager* manager() const { return manager_; }
-  bool instance_active() const { return instance_active_; }
+  bool instance_active() const { return node_ != NULL; }
+  ui::AXNode* node() const { return node_; }
   const std::string& name() const { return name_; }
   const std::string& value() const { return value_; }
   void set_name(const std::string& name) { name_ = name; }
   void set_value(const std::string& value) { value_ = value; }
 
-  std::vector<BrowserAccessibility*>& deprecated_children() {
-    return deprecated_children_;
-  }
-
   // These access the internal accessibility tree, which doesn't necessarily
   // reflect the accessibility tree that should be exposed on each platform.
   // Use PlatformChildCount and PlatformGetChild to implement platform
   // accessibility APIs.
-  uint32 InternalChildCount() const { return deprecated_children_.size(); }
-  BrowserAccessibility* InternalGetChild(uint32 child_index) const {
-    return deprecated_children_[child_index];
-  }
+  uint32 InternalChildCount() const;
+  BrowserAccessibility* InternalGetChild(uint32 child_index) const;
 
-  BrowserAccessibility* GetParent() const { return deprecated_parent_; }
-  int32 GetIndexInParent() const { return deprecated_index_in_parent_; }
+  BrowserAccessibility* GetParent() const;
+  int32 GetIndexInParent() const;
 
-  int32 GetId() const { return data_.id; }
-  gfx::Rect GetLocation() const { return data_.location; }
-  int32 GetRole() const { return data_.role; }
-  int32 GetState() const { return data_.state; }
-  const std::vector<std::pair<std::string, std::string> >& GetHtmlAttributes()
-      const {
-    return data_.html_attributes;
-  }
+  int32 GetId() const;
+  const ui::AXNodeData& GetData() const;
+  gfx::Rect GetLocation() const;
+  int32 GetRole() const;
+  int32 GetState() const;
+
+  typedef std::vector<std::pair<std::string, std::string> > HtmlAttributes;
+  const HtmlAttributes& GetHtmlAttributes() const;
 
 #if defined(OS_MACOSX) && __OBJC__
   BrowserAccessibilityCocoa* ToBrowserAccessibilityCocoa();
@@ -262,43 +246,21 @@
   std::string GetTextRecursive() const;
 
  protected:
-  // Perform platform specific initialization. This can be called multiple times
-  // during the lifetime of this instance after the members of this base object
-  // have been reset with new values from the renderer process.
-  // Perform child independent initialization in this method.
-  virtual void PreInitialize() {}
-
   BrowserAccessibility();
 
-  // The manager of this tree of accessibility objects; needed for
-  // global operations like focus tracking.
+  // The manager of this tree of accessibility objects.
   BrowserAccessibilityManager* manager_;
 
-  // The parent of this object, may be NULL if we're the root object.
-  BrowserAccessibility* deprecated_parent_;
+  // The underlying node.
+  ui::AXNode* node_;
 
  private:
   // Return the sum of the lengths of all static text descendants,
   // including this object if it's static text.
   int GetStaticTextLenRecursive() const;
 
-  // The index of this within its parent object.
-  int32 deprecated_index_in_parent_;
-
-  // The children of this object.
-  std::vector<BrowserAccessibility*> deprecated_children_;
-
-  // Accessibility metadata from the renderer
   std::string name_;
   std::string value_;
-  ui::AXNodeData data_;
-
-  // BrowserAccessibility objects are reference-counted on some platforms.
-  // When we're done with this object and it's removed from our accessibility
-  // tree, a client may still be holding onto a pointer to this object, so
-  // we mark it as inactive so that calls to any of this object's methods
-  // immediately return failure.
-  bool instance_active_;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(BrowserAccessibility);
diff --git a/content/browser/accessibility/browser_accessibility_android.cc b/content/browser/accessibility/browser_accessibility_android.cc
index 6e26ef9..cec0a66 100644
--- a/content/browser/accessibility/browser_accessibility_android.cc
+++ b/content/browser/accessibility/browser_accessibility_android.cc
@@ -268,8 +268,7 @@
     return base::string16();
   }
 
-  base::string16 description = GetString16Attribute(
-      ui::AX_ATTR_DESCRIPTION);
+  base::string16 description = GetString16Attribute(ui::AX_ATTR_DESCRIPTION);
   base::string16 text;
   if (!name().empty())
     text = base::UTF8ToUTF16(name());
@@ -295,6 +294,26 @@
       break;
   }
 
+  if (text.empty() && IsLink()) {
+    base::string16 url = GetString16Attribute(ui::AX_ATTR_URL);
+    // Given a url like http://foo.com/bar/baz.png, just return the
+    // base name, e.g., "baz".
+    int trailing_slashes = 0;
+    while (url.size() - trailing_slashes > 0 &&
+           url[url.size() - trailing_slashes - 1] == '/') {
+      trailing_slashes++;
+    }
+    if (trailing_slashes)
+      url = url.substr(0, url.size() - trailing_slashes);
+    size_t slash_index = url.rfind('/');
+    if (slash_index != std::string::npos)
+      url = url.substr(slash_index + 1);
+    size_t dot_index = url.rfind('.');
+    if (dot_index != std::string::npos)
+      url = url.substr(0, dot_index);
+    text = url;
+  }
+
   return text;
 }
 
@@ -566,8 +585,8 @@
   return html_tag == base::ASCIIToUTF16("iframe");
 }
 
-void BrowserAccessibilityAndroid::PostInitialize() {
-  BrowserAccessibility::PostInitialize();
+void BrowserAccessibilityAndroid::OnDataChanged() {
+  BrowserAccessibility::OnDataChanged();
 
   if (IsEditableText()) {
     if (base::UTF8ToUTF16(value()) != new_value_) {
diff --git a/content/browser/accessibility/browser_accessibility_android.h b/content/browser/accessibility/browser_accessibility_android.h
index a01b35e..d0eb478 100644
--- a/content/browser/accessibility/browser_accessibility_android.h
+++ b/content/browser/accessibility/browser_accessibility_android.h
@@ -13,7 +13,7 @@
 class BrowserAccessibilityAndroid : public BrowserAccessibility {
  public:
   // Overrides from BrowserAccessibility.
-  virtual void PostInitialize() OVERRIDE;
+  virtual void OnDataChanged() OVERRIDE;
   virtual bool IsNative() const OVERRIDE;
 
   virtual bool PlatformIsLeaf() const OVERRIDE;
diff --git a/content/browser/accessibility/browser_accessibility_cocoa.h b/content/browser/accessibility/browser_accessibility_cocoa.h
index 11b44ac..479c362 100644
--- a/content/browser/accessibility/browser_accessibility_cocoa.h
+++ b/content/browser/accessibility/browser_accessibility_cocoa.h
@@ -97,7 +97,7 @@
 @property(nonatomic, readonly) NSArray* tabs;
 @property(nonatomic, readonly) NSString* title;
 @property(nonatomic, readonly) id titleUIElement;
-@property(nonatomic, readonly) NSString* url;
+@property(nonatomic, readonly) NSURL* url;
 @property(nonatomic, readonly) NSString* value;
 @property(nonatomic, readonly) NSString* valueDescription;
 @property(nonatomic, readonly) NSValue* visibleCharacterRange;
diff --git a/content/browser/accessibility/browser_accessibility_cocoa.mm b/content/browser/accessibility/browser_accessibility_cocoa.mm
index 7a3a44b..3b9cb92 100644
--- a/content/browser/accessibility/browser_accessibility_cocoa.mm
+++ b/content/browser/accessibility/browser_accessibility_cocoa.mm
@@ -373,7 +373,7 @@
     for (uint32 i = 0; i < indirectChildIds.size(); ++i) {
       int32 child_id = indirectChildIds[i];
       BrowserAccessibility* child =
-          browserAccessibility_->manager()->GetFromRendererID(child_id);
+          browserAccessibility_->manager()->GetFromID(child_id);
 
       // This only became necessary as a result of crbug.com/93095. It should be
       // a DCHECK in the future.
@@ -409,7 +409,7 @@
   for (size_t i = 0; i < uniqueCellIds.size(); ++i) {
     int id = uniqueCellIds[i];
     BrowserAccessibility* cell =
-        browserAccessibility_->manager()->GetFromRendererID(id);
+        browserAccessibility_->manager()->GetFromID(id);
     if (cell && cell->GetRole() == ui::AX_ROLE_COLUMN_HEADER)
       [ret addObject:cell->ToBrowserAccessibilityCocoa()];
   }
@@ -537,7 +537,7 @@
 
   if (headerElementId > 0) {
     BrowserAccessibility* headerObject =
-        browserAccessibility_->manager()->GetFromRendererID(headerElementId);
+        browserAccessibility_->manager()->GetFromID(headerElementId);
     if (headerObject)
       return headerObject->ToBrowserAccessibilityCocoa();
   }
@@ -587,7 +587,7 @@
       browserAccessibility_->GetIntListAttribute(attribute);
   for (size_t i = 0; i < attributeValues.size(); ++i) {
     BrowserAccessibility* element =
-        browserAccessibility_->manager()->GetFromRendererID(attributeValues[i]);
+        browserAccessibility_->manager()->GetFromID(attributeValues[i]);
     if (element)
       [outArray addObject:element->ToBrowserAccessibilityCocoa()];
   }
@@ -770,7 +770,7 @@
   for (size_t i = 0; i < uniqueCellIds.size(); ++i) {
     int id = uniqueCellIds[i];
     BrowserAccessibility* cell =
-        browserAccessibility_->manager()->GetFromRendererID(id);
+        browserAccessibility_->manager()->GetFromID(id);
     if (cell && cell->GetRole() == ui::AX_ROLE_ROW_HEADER)
       [ret addObject:cell->ToBrowserAccessibilityCocoa()];
   }
@@ -808,7 +808,7 @@
     for (uint32 i = 0; i < indirectChildIds.size(); ++i) {
       int id = indirectChildIds[i];
       BrowserAccessibility* rowElement =
-          browserAccessibility_->manager()->GetFromRendererID(id);
+          browserAccessibility_->manager()->GetFromID(id);
       if (rowElement)
         [ret addObject:rowElement->ToBrowserAccessibilityCocoa()];
     }
@@ -872,7 +872,7 @@
   if (browserAccessibility_->GetIntAttribute(
           ui::AX_ATTR_TITLE_UI_ELEMENT, &titleElementId)) {
     BrowserAccessibility* titleElement =
-        browserAccessibility_->manager()->GetFromRendererID(titleElementId);
+        browserAccessibility_->manager()->GetFromID(titleElementId);
     if (titleElement)
       return titleElement->ToBrowserAccessibilityCocoa();
   }
@@ -880,7 +880,7 @@
       browserAccessibility_->GetIntListAttribute(ui::AX_ATTR_LABELLEDBY_IDS);
   if (labelledby_ids.size() == 1) {
     BrowserAccessibility* titleElement =
-        browserAccessibility_->manager()->GetFromRendererID(labelledby_ids[0]);
+        browserAccessibility_->manager()->GetFromID(labelledby_ids[0]);
     if (titleElement)
       return titleElement->ToBrowserAccessibilityCocoa();
   }
@@ -888,12 +888,17 @@
   return nil;
 }
 
-- (NSString*)url {
+- (NSURL*)url {
   StringAttribute urlAttribute =
       [[self role] isEqualToString:@"AXWebArea"] ?
           ui::AX_ATTR_DOC_URL :
           ui::AX_ATTR_URL;
-  return NSStringForStringAttribute(browserAccessibility_, urlAttribute);
+
+  std::string urlStr = browserAccessibility_->GetStringAttribute(urlAttribute);
+  if (urlStr.empty())
+    return nil;
+
+  return [NSURL URLWithString:(base::SysUTF8ToNSString(urlStr))];
 }
 
 - (id)value {
@@ -979,7 +984,7 @@
   for (size_t i = 0; i < uniqueCellIds.size(); ++i) {
     int id = uniqueCellIds[i];
     BrowserAccessibility* cell =
-        browserAccessibility_->manager()->GetFromRendererID(id);
+        browserAccessibility_->manager()->GetFromID(id);
     if (cell)
       [ret addObject:cell->ToBrowserAccessibilityCocoa()];
   }
@@ -1287,7 +1292,6 @@
       NSAccessibilityTopLevelUIElementAttribute,
       NSAccessibilityValueAttribute,
       NSAccessibilityWindowAttribute,
-      NSAccessibilityURLAttribute,
       @"AXAccessKey",
       @"AXInvalid",
       @"AXRequired",
@@ -1374,6 +1378,13 @@
     }
   }
 
+  // Add the url attribute only if it has a valid url.
+  if ([self url] != nil) {
+    [ret addObjectsFromArray:[NSArray arrayWithObjects:
+        NSAccessibilityURLAttribute,
+        nil]];
+  }
+
   // Live regions.
   if (browserAccessibility_->HasStringAttribute(
           ui::AX_ATTR_LIVE_STATUS)) {
diff --git a/content/browser/accessibility/browser_accessibility_mac.h b/content/browser/accessibility/browser_accessibility_mac.h
index 63a9d00..dc04484 100644
--- a/content/browser/accessibility/browser_accessibility_mac.h
+++ b/content/browser/accessibility/browser_accessibility_mac.h
@@ -17,15 +17,10 @@
 
 class BrowserAccessibilityMac : public BrowserAccessibility {
  public:
-  // Implementation of BrowserAccessibility.
-  virtual void PreInitialize() OVERRIDE;
+  // BrowserAccessibility overrides.
   virtual void NativeReleaseReference() OVERRIDE;
   virtual bool IsNative() const OVERRIDE;
-
-  // Overrides from BrowserAccessibility.
-  virtual void DetachTree(std::vector<BrowserAccessibility*>* nodes) OVERRIDE;
-  virtual void SwapChildren(std::vector<BrowserAccessibility*>& children)
-      OVERRIDE;
+  virtual void OnDataChanged() OVERRIDE;
 
   // The BrowserAccessibilityCocoa associated with us.
   BrowserAccessibilityCocoa* native_view() const {
diff --git a/content/browser/accessibility/browser_accessibility_mac.mm b/content/browser/accessibility/browser_accessibility_mac.mm
index 11595a1..33b36ce 100644
--- a/content/browser/accessibility/browser_accessibility_mac.mm
+++ b/content/browser/accessibility/browser_accessibility_mac.mm
@@ -21,11 +21,13 @@
     : browser_accessibility_cocoa_(NULL) {
 }
 
-void BrowserAccessibilityMac::PreInitialize() {
-  BrowserAccessibility::PreInitialize();
+void BrowserAccessibilityMac::OnDataChanged() {
+  BrowserAccessibility::OnDataChanged();
 
-  if (browser_accessibility_cocoa_)
+  if (browser_accessibility_cocoa_) {
+    [browser_accessibility_cocoa_ childrenChanged];
     return;
+  }
 
   // We take ownership of the cocoa obj here.
   BrowserAccessibilityManagerMac* manager =
@@ -51,18 +53,6 @@
   return true;
 }
 
-void BrowserAccessibilityMac::DetachTree(
-    std::vector<BrowserAccessibility*>* nodes) {
-  [browser_accessibility_cocoa_ childrenChanged];
-  BrowserAccessibility::DetachTree(nodes);
-}
-
-void BrowserAccessibilityMac::SwapChildren(
-    std::vector<BrowserAccessibility*>& children) {
-  [browser_accessibility_cocoa_ childrenChanged];
-  BrowserAccessibility::SwapChildren(children);
-}
-
 BrowserAccessibilityCocoa* BrowserAccessibility::ToBrowserAccessibilityCocoa() {
   return static_cast<BrowserAccessibilityMac*>(this)->
       native_view();
diff --git a/content/browser/accessibility/browser_accessibility_mac_unittest.mm b/content/browser/accessibility/browser_accessibility_mac_unittest.mm
index c28ad6a..4dd8e30 100644
--- a/content/browser/accessibility/browser_accessibility_mac_unittest.mm
+++ b/content/browser/accessibility/browser_accessibility_mac_unittest.mm
@@ -89,8 +89,10 @@
 
     delegate_.reset([[MockAccessibilityDelegate alloc] init]);
     manager_.reset(
-        new BrowserAccessibilityManagerMac(delegate_, root, NULL));
-    manager_->UpdateNodesForTesting(child1, child2);
+        new BrowserAccessibilityManagerMac(
+            delegate_,
+            MakeAXTreeUpdate(root, child1, child2),
+            NULL));
     accessibility_.reset([manager_->GetRoot()->ToBrowserAccessibilityCocoa()
         retain]);
   }
diff --git a/content/browser/accessibility/browser_accessibility_manager.cc b/content/browser/accessibility/browser_accessibility_manager.cc
index b91f3c1..abc5884 100644
--- a/content/browser/accessibility/browser_accessibility_manager.cc
+++ b/content/browser/accessibility/browser_accessibility_manager.cc
@@ -10,6 +10,40 @@
 
 namespace content {
 
+ui::AXTreeUpdate MakeAXTreeUpdate(
+    const ui::AXNodeData& node1,
+    const ui::AXNodeData& node2 /* = ui::AXNodeData() */,
+    const ui::AXNodeData& node3 /* = ui::AXNodeData() */,
+    const ui::AXNodeData& node4 /* = ui::AXNodeData() */,
+    const ui::AXNodeData& node5 /* = ui::AXNodeData() */,
+    const ui::AXNodeData& node6 /* = ui::AXNodeData() */,
+    const ui::AXNodeData& node7 /* = ui::AXNodeData() */,
+    const ui::AXNodeData& node8 /* = ui::AXNodeData() */,
+    const ui::AXNodeData& node9 /* = ui::AXNodeData() */) {
+  CR_DEFINE_STATIC_LOCAL(ui::AXNodeData, empty_data, ());
+  int32 no_id = empty_data.id;
+
+  ui::AXTreeUpdate update;
+  update.nodes.push_back(node1);
+  if (node2.id != no_id)
+    update.nodes.push_back(node2);
+  if (node3.id != no_id)
+    update.nodes.push_back(node3);
+  if (node4.id != no_id)
+    update.nodes.push_back(node4);
+  if (node5.id != no_id)
+    update.nodes.push_back(node5);
+  if (node6.id != no_id)
+    update.nodes.push_back(node6);
+  if (node7.id != no_id)
+    update.nodes.push_back(node7);
+  if (node8.id != no_id)
+    update.nodes.push_back(node8);
+  if (node9.id != no_id)
+    update.nodes.push_back(node9);
+  return update;
+}
+
 BrowserAccessibility* BrowserAccessibilityFactory::Create() {
   return BrowserAccessibility::Create();
 }
@@ -21,10 +55,10 @@
 // other platform, instantiate the base class.
 // static
 BrowserAccessibilityManager* BrowserAccessibilityManager::Create(
-    const ui::AXNodeData& src,
+    const ui::AXTreeUpdate& initial_tree,
     BrowserAccessibilityDelegate* delegate,
     BrowserAccessibilityFactory* factory) {
-  return new BrowserAccessibilityManager(src, delegate, factory);
+  return new BrowserAccessibilityManager(initial_tree, delegate, factory);
 }
 #endif
 
@@ -33,71 +67,84 @@
     BrowserAccessibilityFactory* factory)
     : delegate_(delegate),
       factory_(factory),
-      root_(NULL),
+      tree_(new ui::AXTree()),
       focus_(NULL),
       osk_state_(OSK_ALLOWED) {
+  tree_->SetDelegate(this);
 }
 
 BrowserAccessibilityManager::BrowserAccessibilityManager(
-    const ui::AXNodeData& src,
+    const ui::AXTreeUpdate& initial_tree,
     BrowserAccessibilityDelegate* delegate,
     BrowserAccessibilityFactory* factory)
     : delegate_(delegate),
       factory_(factory),
-      root_(NULL),
+      tree_(new ui::AXTree()),
       focus_(NULL),
       osk_state_(OSK_ALLOWED) {
-  Initialize(src);
+  tree_->SetDelegate(this);
+  Initialize(initial_tree);
 }
 
 BrowserAccessibilityManager::~BrowserAccessibilityManager() {
-  if (root_)
-    root_->Destroy();
+  tree_.reset(NULL);
 }
 
-void BrowserAccessibilityManager::Initialize(const ui::AXNodeData src) {
-  std::vector<ui::AXNodeData> nodes;
-  nodes.push_back(src);
-  if (!UpdateNodes(nodes))
-    return;
+void BrowserAccessibilityManager::Initialize(
+    const ui::AXTreeUpdate& initial_tree) {
+  if (!tree_->Unserialize(initial_tree)) {
+    if (delegate_) {
+      LOG(ERROR) << tree_->error();
+      delegate_->FatalAccessibilityTreeError();
+    } else {
+      LOG(FATAL) << tree_->error();
+    }
+  }
+
   if (!focus_)
-    SetFocus(root_, false);
+    SetFocus(tree_->GetRoot(), false);
 }
 
 // static
-ui::AXNodeData BrowserAccessibilityManager::GetEmptyDocument() {
+ui::AXTreeUpdate BrowserAccessibilityManager::GetEmptyDocument() {
   ui::AXNodeData empty_document;
   empty_document.id = 0;
   empty_document.role = ui::AX_ROLE_ROOT_WEB_AREA;
-  return empty_document;
+  ui::AXTreeUpdate update;
+  update.nodes.push_back(empty_document);
+  return update;
 }
 
 BrowserAccessibility* BrowserAccessibilityManager::GetRoot() {
-  return root_;
+  return GetFromAXNode(tree_->GetRoot());
 }
 
-BrowserAccessibility* BrowserAccessibilityManager::GetFromRendererID(
-    int32 renderer_id) {
+BrowserAccessibility* BrowserAccessibilityManager::GetFromAXNode(
+    ui::AXNode* node) {
+  return GetFromID(node->id());
+}
+
+BrowserAccessibility* BrowserAccessibilityManager::GetFromID(int32 id) {
   base::hash_map<int32, BrowserAccessibility*>::iterator iter =
-      renderer_id_map_.find(renderer_id);
-  if (iter != renderer_id_map_.end())
+      id_wrapper_map_.find(id);
+  if (iter != id_wrapper_map_.end())
     return iter->second;
   return NULL;
 }
 
 void BrowserAccessibilityManager::OnWindowFocused() {
   if (focus_)
-    NotifyAccessibilityEvent(ui::AX_EVENT_FOCUS, focus_);
+    NotifyAccessibilityEvent(ui::AX_EVENT_FOCUS, GetFromAXNode(focus_));
 }
 
 void BrowserAccessibilityManager::OnWindowBlurred() {
   if (focus_)
-    NotifyAccessibilityEvent(ui::AX_EVENT_BLUR, focus_);
+    NotifyAccessibilityEvent(ui::AX_EVENT_BLUR, GetFromAXNode(focus_));
 }
 
 void BrowserAccessibilityManager::GotMouseDown() {
   osk_state_ = OSK_ALLOWED_WITHIN_FOCUSED_OBJECT;
-  NotifyAccessibilityEvent(ui::AX_EVENT_FOCUS, focus_);
+  NotifyAccessibilityEvent(ui::AX_EVENT_FOCUS, GetFromAXNode(focus_));
 }
 
 bool BrowserAccessibilityManager::IsOSKAllowed(const gfx::Rect& bounds) {
@@ -112,13 +159,6 @@
   return true;
 }
 
-void BrowserAccessibilityManager::RemoveNode(BrowserAccessibility* node) {
-  if (node == focus_)
-    SetFocus(root_, false);
-  int renderer_id = node->GetId();
-  renderer_id_map_.erase(renderer_id);
-}
-
 void BrowserAccessibilityManager::OnAccessibilityEvents(
     const std::vector<AccessibilityHostMsg_EventParams>& params) {
   bool should_send_initial_focus = false;
@@ -126,22 +166,26 @@
   // Process all changes to the accessibility tree first.
   for (uint32 index = 0; index < params.size(); index++) {
     const AccessibilityHostMsg_EventParams& param = params[index];
-    if (!UpdateNodes(param.update.nodes))
-      return;
-
-    // Set initial focus when a page is loaded.
-    ui::AXEvent event_type = param.event_type;
-    if (event_type == ui::AX_EVENT_LOAD_COMPLETE) {
-      if (!focus_) {
-        SetFocus(root_, false);
-        should_send_initial_focus = true;
+    if (!tree_->Unserialize(param.update)) {
+      if (delegate_) {
+        LOG(ERROR) << tree_->error();
+        delegate_->FatalAccessibilityTreeError();
+      } else {
+        CHECK(false) << tree_->error();
       }
+      return;
+    }
+
+    // Set focus to the root if it's not anywhere else.
+    if (!focus_) {
+      SetFocus(tree_->GetRoot(), false);
+      should_send_initial_focus = true;
     }
   }
 
   if (should_send_initial_focus &&
       (!delegate_ || delegate_->HasFocus())) {
-    NotifyAccessibilityEvent(ui::AX_EVENT_FOCUS, focus_);
+    NotifyAccessibilityEvent(ui::AX_EVENT_FOCUS, GetFromAXNode(focus_));
   }
 
   // Now iterate over the events again and fire the events.
@@ -150,7 +194,7 @@
 
     // Find the node corresponding to the id that's the target of the
     // event (which may not be the root of the update tree).
-    BrowserAccessibility* node = GetFromRendererID(param.id);
+    ui::AXNode* node = tree_->GetFromId(param.id);
     if (!node)
       continue;
 
@@ -170,39 +214,42 @@
     }
 
     // Send the event event to the operating system.
-    NotifyAccessibilityEvent(event_type, node);
+    NotifyAccessibilityEvent(event_type, GetFromAXNode(node));
   }
 }
 
 void BrowserAccessibilityManager::OnLocationChanges(
     const std::vector<AccessibilityHostMsg_LocationChangeParams>& params) {
   for (size_t i = 0; i < params.size(); ++i) {
-    BrowserAccessibility* node = GetFromRendererID(params[i].id);
-    if (node)
-      node->SetLocation(params[i].new_location);
+    BrowserAccessibility* obj = GetFromID(params[i].id);
+    if (!obj)
+      continue;
+    ui::AXNode* node = obj->node();
+    node->SetLocation(params[i].new_location);
+    obj->OnLocationChanged();
   }
 }
 
 BrowserAccessibility* BrowserAccessibilityManager::GetFocus(
     BrowserAccessibility* root) {
-  if (focus_ && (!root || focus_->IsDescendantOf(root)))
-    return focus_;
+  if (focus_ && (!root || focus_->IsDescendantOf(root->node())))
+    return GetFromAXNode(focus_);
 
   return NULL;
 }
 
-void BrowserAccessibilityManager::SetFocus(
-    BrowserAccessibility* node, bool notify) {
+void BrowserAccessibilityManager::SetFocus(ui::AXNode* node, bool notify) {
   if (focus_ != node)
     focus_ = node;
 
   if (notify && node && delegate_)
-    delegate_->SetAccessibilityFocus(node->GetId());
+    delegate_->SetAccessibilityFocus(node->id());
 }
 
-void BrowserAccessibilityManager::SetRoot(BrowserAccessibility* node) {
-  root_ = node;
-  OnRootChanged();
+void BrowserAccessibilityManager::SetFocus(
+    BrowserAccessibility* obj, bool notify) {
+  if (obj->node())
+    SetFocus(obj->node(), notify);
 }
 
 void BrowserAccessibilityManager::DoDefaultAction(
@@ -273,191 +320,36 @@
   return node->GetParent();
 }
 
-void BrowserAccessibilityManager::UpdateNodesForTesting(
-    const ui::AXNodeData& node1,
-    const ui::AXNodeData& node2 /* = ui::AXNodeData() */,
-    const ui::AXNodeData& node3 /* = ui::AXNodeData() */,
-    const ui::AXNodeData& node4 /* = ui::AXNodeData() */,
-    const ui::AXNodeData& node5 /* = ui::AXNodeData() */,
-    const ui::AXNodeData& node6 /* = ui::AXNodeData() */,
-    const ui::AXNodeData& node7 /* = ui::AXNodeData() */) {
-  std::vector<ui::AXNodeData> nodes;
-  nodes.push_back(node1);
-  if (node2.id != ui::AXNodeData().id)
-    nodes.push_back(node2);
-  if (node3.id != ui::AXNodeData().id)
-    nodes.push_back(node3);
-  if (node4.id != ui::AXNodeData().id)
-    nodes.push_back(node4);
-  if (node5.id != ui::AXNodeData().id)
-    nodes.push_back(node5);
-  if (node6.id != ui::AXNodeData().id)
-    nodes.push_back(node6);
-  if (node7.id != ui::AXNodeData().id)
-    nodes.push_back(node7);
-  UpdateNodes(nodes);
-}
-
-bool BrowserAccessibilityManager::UpdateNodes(
-    const std::vector<ui::AXNodeData>& nodes) {
-  bool success = true;
-
-  // First, update all of the nodes in the tree.
-  for (size_t i = 0; i < nodes.size() && success; i++) {
-    if (!UpdateNode(nodes[i]))
-      success = false;
-  }
-
-  // In a second pass, call PostInitialize on each one - this must
-  // be called after all of each node's children are initialized too.
-  for (size_t i = 0; i < nodes.size() && success; i++) {
-    // Note: it's not a bug for nodes[i].id to not be found in the tree.
-    // Consider this example:
-    // Before:
-    // A
-    //   B
-    //     C
-    //   D
-    //     E
-    //       F
-    // After:
-    // A
-    //   B
-    //     C
-    //       F
-    //   D
-    // In this example, F is being reparented. The renderer scans the tree
-    // in order. If can't update "C" to add "F" as a child, when "F" is still
-    // a child of "E". So it first updates "E", to remove "F" as a child.
-    // Later, it ends up deleting "E". So when we get here, "E" was updated as
-    // part of this sequence but it no longer exists in the final tree, so
-    // there's nothing to postinitialize.
-    BrowserAccessibility* instance = GetFromRendererID(nodes[i].id);
-    if (instance)
-      instance->PostInitialize();
-  }
-
-  if (!success) {
-    // A bad accessibility tree could lead to memory corruption.
-    // Ask the delegate to crash the renderer, or if not available,
-    // crash the browser.
-    if (delegate_)
-      delegate_->FatalAccessibilityTreeError();
+void BrowserAccessibilityManager::OnNodeWillBeDeleted(ui::AXNode* node) {
+  if (node == focus_ && tree_) {
+    if (node != tree_->GetRoot())
+      SetFocus(tree_->GetRoot(), false);
     else
-      CHECK(false);
+      focus_ = NULL;
   }
-
-  return success;
+  if (id_wrapper_map_.find(node->id()) == id_wrapper_map_.end())
+    return;
+  GetFromAXNode(node)->Destroy();
+  id_wrapper_map_.erase(node->id());
 }
 
-BrowserAccessibility* BrowserAccessibilityManager::CreateNode(
-    BrowserAccessibility* parent,
-    int32 renderer_id,
-    int32 index_in_parent) {
-  BrowserAccessibility* node = factory_->Create();
-  node->InitializeTreeStructure(
-      this, parent, renderer_id, index_in_parent);
-  AddNodeToMap(node);
-  return node;
+void BrowserAccessibilityManager::OnNodeCreated(ui::AXNode* node) {
+  BrowserAccessibility* wrapper = factory_->Create();
+  wrapper->Init(this, node);
+  id_wrapper_map_[node->id()] = wrapper;
+  wrapper->OnDataChanged();
 }
 
-void BrowserAccessibilityManager::AddNodeToMap(BrowserAccessibility* node) {
-  renderer_id_map_[node->GetId()] = node;
+void BrowserAccessibilityManager::OnNodeChanged(ui::AXNode* node) {
+  GetFromAXNode(node)->OnDataChanged();
 }
 
-bool BrowserAccessibilityManager::UpdateNode(const ui::AXNodeData& src) {
-  // This method updates one node in the tree based on serialized data
-  // received from the renderer.
+void BrowserAccessibilityManager::OnNodeCreationFinished(ui::AXNode* node) {
+  GetFromAXNode(node)->OnUpdateFinished();
+}
 
-  // Create a set of child ids in |src| for fast lookup. If a duplicate id is
-  // found, exit now with a fatal error before changing anything else.
-  std::set<int32> new_child_ids;
-  for (size_t i = 0; i < src.child_ids.size(); ++i) {
-    if (new_child_ids.find(src.child_ids[i]) != new_child_ids.end())
-      return false;
-    new_child_ids.insert(src.child_ids[i]);
-  }
-
-  // Look up the node by id. If it's not found, then either the root
-  // of the tree is being swapped, or we're out of sync with the renderer
-  // and this is a serious error.
-  BrowserAccessibility* instance = GetFromRendererID(src.id);
-  if (!instance) {
-    if (src.role != ui::AX_ROLE_ROOT_WEB_AREA)
-      return false;
-    instance = CreateNode(NULL, src.id, 0);
-  }
-
-  // Update all of the node-specific data, like its role, state, name, etc.
-  instance->InitializeData(src);
-
-  //
-  // Update the children in three steps:
-  //
-  // 1. Iterate over the old children and delete nodes that are no longer
-  //    in the tree.
-  // 2. Build up a vector of new children, reusing children that haven't
-  //    changed (but may have been reordered) and adding new empty
-  //    objects for new children.
-  // 3. Swap in the new children vector for the old one.
-
-  // Delete any previous children of this instance that are no longer
-  // children first. We make a deletion-only pass first to prevent a
-  // node that's being reparented from being the child of both its old
-  // parent and new parent, which could lead to a double-free.
-  // If a node is reparented, the renderer will always send us a fresh
-  // copy of the node.
-  const std::vector<BrowserAccessibility*>& old_children =
-      instance->deprecated_children();
-  for (size_t i = 0; i < old_children.size(); ++i) {
-    int old_id = old_children[i]->GetId();
-    if (new_child_ids.find(old_id) == new_child_ids.end())
-      old_children[i]->Destroy();
-  }
-
-  // Now build a vector of new children, reusing objects that were already
-  // children of this node before.
-  std::vector<BrowserAccessibility*> new_children;
-  bool success = true;
-  for (size_t i = 0; i < src.child_ids.size(); i++) {
-    int32 child_renderer_id = src.child_ids[i];
-    int32 index_in_parent = static_cast<int32>(i);
-    BrowserAccessibility* child = GetFromRendererID(child_renderer_id);
-    if (child) {
-      if (child->GetParent() != instance) {
-        // This is a serious error - nodes should never be reparented.
-        // If this case occurs, continue so this node isn't left in an
-        // inconsistent state, but return failure at the end.
-        success = false;
-        continue;
-      }
-      child->UpdateParent(instance, index_in_parent);
-    } else {
-      child = CreateNode(instance, child_renderer_id, index_in_parent);
-    }
-    new_children.push_back(child);
-  }
-
-  // Finally, swap in the new children vector for the old.
-  instance->SwapChildren(new_children);
-
-  // Handle the case where this node is the new root of the tree.
-  if (src.role == ui::AX_ROLE_ROOT_WEB_AREA &&
-      (!root_ || root_->GetId() != src.id)) {
-    if (root_)
-      root_->Destroy();
-    if (focus_ == root_)
-      SetFocus(instance, false);
-    SetRoot(instance);
-  }
-
-  // Keep track of what node is focused.
-  if (src.role != ui::AX_ROLE_ROOT_WEB_AREA &&
-      src.role != ui::AX_ROLE_WEB_AREA &&
-      (src.state >> ui::AX_STATE_FOCUSED & 1)) {
-    SetFocus(instance, false);
-  }
-  return success;
+void BrowserAccessibilityManager::OnNodeChangeFinished(ui::AXNode* node) {
+  GetFromAXNode(node)->OnUpdateFinished();
 }
 
 }  // namespace content
diff --git a/content/browser/accessibility/browser_accessibility_manager.h b/content/browser/accessibility/browser_accessibility_manager.h
index 3dafaab..a5926c7 100644
--- a/content/browser/accessibility/browser_accessibility_manager.h
+++ b/content/browser/accessibility/browser_accessibility_manager.h
@@ -13,6 +13,8 @@
 #include "content/common/content_export.h"
 #include "third_party/WebKit/public/web/WebAXEnums.h"
 #include "ui/accessibility/ax_node_data.h"
+#include "ui/accessibility/ax_tree.h"
+#include "ui/accessibility/ax_tree_update.h"
 #include "ui/gfx/native_widget_types.h"
 
 struct AccessibilityHostMsg_EventParams;
@@ -27,6 +29,18 @@
 class BrowserAccessibilityManagerWin;
 #endif
 
+// For testing.
+CONTENT_EXPORT ui::AXTreeUpdate MakeAXTreeUpdate(
+    const ui::AXNodeData& node,
+    const ui::AXNodeData& node2 = ui::AXNodeData(),
+    const ui::AXNodeData& node3 = ui::AXNodeData(),
+    const ui::AXNodeData& node4 = ui::AXNodeData(),
+    const ui::AXNodeData& node5 = ui::AXNodeData(),
+    const ui::AXNodeData& node6 = ui::AXNodeData(),
+    const ui::AXNodeData& node7 = ui::AXNodeData(),
+    const ui::AXNodeData& node8 = ui::AXNodeData(),
+    const ui::AXNodeData& node9 = ui::AXNodeData());
+
 // Class that can perform actions on behalf of the BrowserAccessibilityManager.
 class CONTENT_EXPORT BrowserAccessibilityDelegate {
  public:
@@ -55,20 +69,20 @@
 };
 
 // Manages a tree of BrowserAccessibility objects.
-class CONTENT_EXPORT BrowserAccessibilityManager {
+class CONTENT_EXPORT BrowserAccessibilityManager : public ui::AXTreeDelegate {
  public:
   // Creates the platform-specific BrowserAccessibilityManager, but
   // with no parent window pointer. Only useful for unit tests.
   static BrowserAccessibilityManager* Create(
-      const ui::AXNodeData& src,
+      const ui::AXTreeUpdate& initial_tree,
       BrowserAccessibilityDelegate* delegate,
       BrowserAccessibilityFactory* factory = new BrowserAccessibilityFactory());
 
   virtual ~BrowserAccessibilityManager();
 
-  void Initialize(const ui::AXNodeData src);
+  void Initialize(const ui::AXTreeUpdate& initial_tree);
 
-  static ui::AXNodeData GetEmptyDocument();
+  static ui::AXTreeUpdate GetEmptyDocument();
 
   virtual void NotifyAccessibilityEvent(
       ui::AXEvent event_type, BrowserAccessibility* node) { }
@@ -76,12 +90,12 @@
   // Return a pointer to the root of the tree, does not make a new reference.
   BrowserAccessibility* GetRoot();
 
-  // Removes a node from the manager.
-  virtual void RemoveNode(BrowserAccessibility* node);
+  // Returns a pointer to the BrowserAccessibility object for a given AXNode.
+  BrowserAccessibility* GetFromAXNode(ui::AXNode* node);
 
-  // Return a pointer to the object corresponding to the given renderer_id,
+  // Return a pointer to the object corresponding to the given id,
   // does not make a new reference.
-  BrowserAccessibility* GetFromRendererID(int32 renderer_id);
+  BrowserAccessibility* GetFromID(int32 id);
 
   // Called to notify the accessibility manager that its associated native
   // view got focused.
@@ -98,6 +112,7 @@
   // Update the focused node to |node|, which may be null.
   // If |notify| is true, send a message to the renderer to set focus
   // to this node.
+  void SetFocus(ui::AXNode* node, bool notify);
   void SetFocus(BrowserAccessibility* node, bool notify);
 
   // Tell the renderer to do the default action for this node.
@@ -155,18 +170,13 @@
   BrowserAccessibility* NextInTreeOrder(BrowserAccessibility* node);
   BrowserAccessibility* PreviousInTreeOrder(BrowserAccessibility* node);
 
-  // For testing only: update the given nodes as if they were
-  // received from the renderer process in OnAccessibilityEvents.
-  // Takes up to 7 nodes at once so tests don't need to create a vector
-  // each time.
-  void UpdateNodesForTesting(
-      const ui::AXNodeData& node,
-      const ui::AXNodeData& node2 = ui::AXNodeData(),
-      const ui::AXNodeData& node3 = ui::AXNodeData(),
-      const ui::AXNodeData& node4 = ui::AXNodeData(),
-      const ui::AXNodeData& node5 = ui::AXNodeData(),
-      const ui::AXNodeData& node6 = ui::AXNodeData(),
-      const ui::AXNodeData& node7 = ui::AXNodeData());
+  // AXTreeDelegate implementation.
+  virtual void OnNodeWillBeDeleted(ui::AXNode* node) OVERRIDE;
+  virtual void OnNodeCreated(ui::AXNode* node) OVERRIDE;
+  virtual void OnNodeChanged(ui::AXNode* node) OVERRIDE;
+  virtual void OnNodeCreationFinished(ui::AXNode* node) OVERRIDE;
+  virtual void OnNodeChangeFinished(ui::AXNode* node) OVERRIDE;
+  virtual void OnRootChanged(ui::AXNode* new_root) OVERRIDE {}
 
  protected:
   BrowserAccessibilityManager(
@@ -174,14 +184,10 @@
       BrowserAccessibilityFactory* factory);
 
   BrowserAccessibilityManager(
-      const ui::AXNodeData& src,
+      const ui::AXTreeUpdate& initial_tree,
       BrowserAccessibilityDelegate* delegate,
       BrowserAccessibilityFactory* factory);
 
-  virtual void AddNodeToMap(BrowserAccessibility* node);
-
-  virtual void OnRootChanged() {}
-
  private:
   // The following states keep track of whether or not the
   // on-screen keyboard is allowed to be shown.
@@ -217,7 +223,7 @@
 
   BrowserAccessibility* CreateNode(
       BrowserAccessibility* parent,
-      int32 renderer_id,
+      int32 id,
       int32 index_in_parent);
 
  protected:
@@ -227,17 +233,18 @@
   // Factory to create BrowserAccessibility objects (for dependency injection).
   scoped_ptr<BrowserAccessibilityFactory> factory_;
 
-  // The root of the tree of accessible objects and the element that
-  // currently has focus, if any.
-  BrowserAccessibility* root_;
-  BrowserAccessibility* focus_;
+  // The underlying tree of accessibility objects.
+  scoped_ptr<ui::AXTree> tree_;
+
+  // The node that currently has focus.
+  ui::AXNode* focus_;
+
+  // A mapping from a node id to its wrapper of type BrowserAccessibility.
+  base::hash_map<int32, BrowserAccessibility*> id_wrapper_map_;
 
   // The on-screen keyboard state.
   OnScreenKeyboardState osk_state_;
 
-  // A mapping from renderer IDs to BrowserAccessibility objects.
-  base::hash_map<int32, BrowserAccessibility*> renderer_id_map_;
-
   DISALLOW_COPY_AND_ASSIGN(BrowserAccessibilityManager);
 };
 
diff --git a/content/browser/accessibility/browser_accessibility_manager_android.cc b/content/browser/accessibility/browser_accessibility_manager_android.cc
index 3d349e4..21c29c0 100644
--- a/content/browser/accessibility/browser_accessibility_manager_android.cc
+++ b/content/browser/accessibility/browser_accessibility_manager_android.cc
@@ -62,11 +62,11 @@
 
 // static
 BrowserAccessibilityManager* BrowserAccessibilityManager::Create(
-    const ui::AXNodeData& src,
+    const ui::AXTreeUpdate& initial_tree,
     BrowserAccessibilityDelegate* delegate,
     BrowserAccessibilityFactory* factory) {
-  return new BrowserAccessibilityManagerAndroid(ScopedJavaLocalRef<jobject>(),
-                                                src, delegate, factory);
+  return new BrowserAccessibilityManagerAndroid(
+      ScopedJavaLocalRef<jobject>(), initial_tree, delegate, factory);
 }
 
 BrowserAccessibilityManagerAndroid*
@@ -76,10 +76,10 @@
 
 BrowserAccessibilityManagerAndroid::BrowserAccessibilityManagerAndroid(
     ScopedJavaLocalRef<jobject> content_view_core,
-    const ui::AXNodeData& src,
+    const ui::AXTreeUpdate& initial_tree,
     BrowserAccessibilityDelegate* delegate,
     BrowserAccessibilityFactory* factory)
-    : BrowserAccessibilityManager(src, delegate, factory) {
+    : BrowserAccessibilityManager(initial_tree, delegate, factory) {
   SetContentViewCore(content_view_core);
 }
 
@@ -93,12 +93,15 @@
 }
 
 // static
-ui::AXNodeData BrowserAccessibilityManagerAndroid::GetEmptyDocument() {
+ui::AXTreeUpdate BrowserAccessibilityManagerAndroid::GetEmptyDocument() {
   ui::AXNodeData empty_document;
   empty_document.id = 0;
   empty_document.role = ui::AX_ROLE_ROOT_WEB_AREA;
   empty_document.state = 1 << ui::AX_STATE_READ_ONLY;
-  return empty_document;
+
+  ui::AXTreeUpdate update;
+  update.nodes.push_back(empty_document);
+  return update;
 }
 
 void BrowserAccessibilityManagerAndroid::SetContentViewCore(
@@ -133,7 +136,7 @@
   switch (event_type) {
     case ui::AX_EVENT_LOAD_COMPLETE:
       Java_BrowserAccessibilityManager_handlePageLoaded(
-          env, obj.obj(), focus_->GetId());
+          env, obj.obj(), focus_->id());
       break;
     case ui::AX_EVENT_FOCUS:
       Java_BrowserAccessibilityManager_handleFocusChanged(
@@ -185,22 +188,22 @@
 }
 
 jint BrowserAccessibilityManagerAndroid::GetRootId(JNIEnv* env, jobject obj) {
-  return static_cast<jint>(root_->GetId());
+  return static_cast<jint>(GetRoot()->GetId());
 }
 
 jboolean BrowserAccessibilityManagerAndroid::IsNodeValid(
     JNIEnv* env, jobject obj, jint id) {
-  return GetFromRendererID(id) != NULL;
+  return GetFromID(id) != NULL;
 }
 
 jint BrowserAccessibilityManagerAndroid::HitTest(
     JNIEnv* env, jobject obj, jint x, jint y) {
   BrowserAccessibilityAndroid* result =
       static_cast<BrowserAccessibilityAndroid*>(
-          root_->BrowserAccessibilityForPoint(gfx::Point(x, y)));
+          GetRoot()->BrowserAccessibilityForPoint(gfx::Point(x, y)));
 
   if (!result)
-    return root_->GetId();
+    return GetRoot()->GetId();
 
   if (result->IsFocusable())
     return result->GetId();
@@ -211,13 +214,13 @@
   if (nearest_node)
     return nearest_node->GetId();
 
-  return root_->GetId();
+  return GetRoot()->GetId();
 }
 
 jboolean BrowserAccessibilityManagerAndroid::PopulateAccessibilityNodeInfo(
     JNIEnv* env, jobject obj, jobject info, jint id) {
   BrowserAccessibilityAndroid* node = static_cast<BrowserAccessibilityAndroid*>(
-      GetFromRendererID(id));
+      GetFromID(id));
   if (!node)
     return false;
 
@@ -304,7 +307,7 @@
 jboolean BrowserAccessibilityManagerAndroid::PopulateAccessibilityEvent(
     JNIEnv* env, jobject obj, jobject event, jint id, jint event_type) {
   BrowserAccessibilityAndroid* node = static_cast<BrowserAccessibilityAndroid*>(
-      GetFromRendererID(id));
+      GetFromID(id));
   if (!node)
     return false;
 
@@ -390,25 +393,25 @@
 
 void BrowserAccessibilityManagerAndroid::Click(
     JNIEnv* env, jobject obj, jint id) {
-  BrowserAccessibility* node = GetFromRendererID(id);
+  BrowserAccessibility* node = GetFromID(id);
   if (node)
     DoDefaultAction(*node);
 }
 
 void BrowserAccessibilityManagerAndroid::Focus(
     JNIEnv* env, jobject obj, jint id) {
-  BrowserAccessibility* node = GetFromRendererID(id);
+  BrowserAccessibility* node = GetFromID(id);
   if (node)
     SetFocus(node, true);
 }
 
 void BrowserAccessibilityManagerAndroid::Blur(JNIEnv* env, jobject obj) {
-  SetFocus(root_, true);
+  SetFocus(GetRoot(), true);
 }
 
 void BrowserAccessibilityManagerAndroid::ScrollToMakeNodeVisible(
     JNIEnv* env, jobject obj, jint id) {
-  BrowserAccessibility* node = GetFromRendererID(id);
+  BrowserAccessibility* node = GetFromID(id);
   if (node)
     ScrollToMakeVisible(*node, gfx::Rect(node->GetLocation().size()));
 }
@@ -467,7 +470,7 @@
 jint BrowserAccessibilityManagerAndroid::FindElementType(
     JNIEnv* env, jobject obj, jint start_id, jstring element_type_str,
     jboolean forwards) {
-  BrowserAccessibility* node = GetFromRendererID(start_id);
+  BrowserAccessibility* node = GetFromID(start_id);
   if (!node)
     return 0;
 
@@ -521,7 +524,7 @@
   return 0;
 }
 
-void BrowserAccessibilityManagerAndroid::OnRootChanged() {
+void BrowserAccessibilityManagerAndroid::OnRootChanged(ui::AXNode* new_root) {
   JNIEnv* env = AttachCurrentThread();
   ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
   if (obj.is_null())
diff --git a/content/browser/accessibility/browser_accessibility_manager_android.h b/content/browser/accessibility/browser_accessibility_manager_android.h
index 146567a..cc2757c 100644
--- a/content/browser/accessibility/browser_accessibility_manager_android.h
+++ b/content/browser/accessibility/browser_accessibility_manager_android.h
@@ -21,13 +21,13 @@
  public:
   BrowserAccessibilityManagerAndroid(
       base::android::ScopedJavaLocalRef<jobject> content_view_core,
-      const ui::AXNodeData& src,
+      const ui::AXTreeUpdate& initial_tree,
       BrowserAccessibilityDelegate* delegate,
       BrowserAccessibilityFactory* factory = new BrowserAccessibilityFactory());
 
   virtual ~BrowserAccessibilityManagerAndroid();
 
-  static ui::AXNodeData GetEmptyDocument();
+  static ui::AXTreeUpdate GetEmptyDocument();
 
   void SetContentViewCore(
       base::android::ScopedJavaLocalRef<jobject> content_view_core);
@@ -66,7 +66,8 @@
                        jstring element_type, jboolean forwards);
 
  protected:
-  virtual void OnRootChanged() OVERRIDE;
+  // AXTreeDelegate overrides.
+  virtual void OnRootChanged(ui::AXNode* new_root) OVERRIDE;
 
   virtual bool UseRootScrollOffsetsWhenComputingBounds() OVERRIDE;
 
diff --git a/content/browser/accessibility/browser_accessibility_manager_mac.h b/content/browser/accessibility/browser_accessibility_manager_mac.h
index 2b501d6..c057619 100644
--- a/content/browser/accessibility/browser_accessibility_manager_mac.h
+++ b/content/browser/accessibility/browser_accessibility_manager_mac.h
@@ -16,11 +16,11 @@
  public:
   BrowserAccessibilityManagerMac(
       NSView* parent_view,
-      const ui::AXNodeData& src,
+      const ui::AXTreeUpdate& initial_tree,
       BrowserAccessibilityDelegate* delegate,
       BrowserAccessibilityFactory* factory = new BrowserAccessibilityFactory());
 
-  static ui::AXNodeData GetEmptyDocument();
+  static ui::AXTreeUpdate GetEmptyDocument();
 
   // Implementation of BrowserAccessibilityManager.
   virtual void NotifyAccessibilityEvent(
diff --git a/content/browser/accessibility/browser_accessibility_manager_mac.mm b/content/browser/accessibility/browser_accessibility_manager_mac.mm
index 2a2f331..266f8fb 100644
--- a/content/browser/accessibility/browser_accessibility_manager_mac.mm
+++ b/content/browser/accessibility/browser_accessibility_manager_mac.mm
@@ -12,29 +12,32 @@
 
 // static
 BrowserAccessibilityManager* BrowserAccessibilityManager::Create(
-    const ui::AXNodeData& src,
+    const ui::AXTreeUpdate& initial_tree,
     BrowserAccessibilityDelegate* delegate,
     BrowserAccessibilityFactory* factory) {
-  return new BrowserAccessibilityManagerMac(NULL, src, delegate, factory);
+  return new BrowserAccessibilityManagerMac(
+      NULL, initial_tree, delegate, factory);
 }
 
 BrowserAccessibilityManagerMac::BrowserAccessibilityManagerMac(
     NSView* parent_view,
-    const ui::AXNodeData& src,
+    const ui::AXTreeUpdate& initial_tree,
     BrowserAccessibilityDelegate* delegate,
     BrowserAccessibilityFactory* factory)
-    : BrowserAccessibilityManager(src, delegate, factory),
+    : BrowserAccessibilityManager(initial_tree, delegate, factory),
       parent_view_(parent_view) {
 }
 
 // static
-ui::AXNodeData BrowserAccessibilityManagerMac::GetEmptyDocument() {
+ui::AXTreeUpdate BrowserAccessibilityManagerMac::GetEmptyDocument() {
   ui::AXNodeData empty_document;
   empty_document.id = 0;
   empty_document.role = ui::AX_ROLE_ROOT_WEB_AREA;
   empty_document.state =
       1 << ui::AX_STATE_READ_ONLY;
-  return empty_document;
+  ui::AXTreeUpdate update;
+  update.nodes.push_back(empty_document);
+  return update;
 }
 
 void BrowserAccessibilityManagerMac::NotifyAccessibilityEvent(
diff --git a/content/browser/accessibility/browser_accessibility_manager_unittest.cc b/content/browser/accessibility/browser_accessibility_manager_unittest.cc
index 3cfeb55..dd0b615 100644
--- a/content/browser/accessibility/browser_accessibility_manager_unittest.cc
+++ b/content/browser/accessibility/browser_accessibility_manager_unittest.cc
@@ -128,10 +128,9 @@
   CountedBrowserAccessibility::global_obj_count_ = 0;
   BrowserAccessibilityManager* manager =
       BrowserAccessibilityManager::Create(
-          root,
+          MakeAXTreeUpdate(root, button, checkbox),
           NULL,
           new CountedBrowserAccessibilityFactory());
-  manager->UpdateNodesForTesting(button, checkbox);
 
   ASSERT_EQ(3, CountedBrowserAccessibility::global_obj_count_);
 
@@ -143,10 +142,9 @@
   // the three nodes in the tree.
   manager =
       BrowserAccessibilityManager::Create(
-          root,
+          MakeAXTreeUpdate(root, button, checkbox),
           NULL,
           new CountedBrowserAccessibilityFactory());
-  manager->UpdateNodesForTesting(button, checkbox);
   ASSERT_EQ(3, CountedBrowserAccessibility::global_obj_count_);
 
   CountedBrowserAccessibility* root_accessible =
@@ -234,10 +232,10 @@
   CountedBrowserAccessibility::global_obj_count_ = 0;
   BrowserAccessibilityManager* manager =
       BrowserAccessibilityManager::Create(
-          tree1_root,
+          MakeAXTreeUpdate(tree1_root,
+                           tree1_child1, tree1_child2, tree1_child3),
           NULL,
           new CountedBrowserAccessibilityFactory());
-  manager->UpdateNodesForTesting(tree1_child1, tree1_child2, tree1_child3);
   ASSERT_EQ(4, CountedBrowserAccessibility::global_obj_count_);
 
   // Save references to all of the objects.
@@ -408,13 +406,12 @@
   CountedBrowserAccessibility::global_obj_count_ = 0;
   BrowserAccessibilityManager* manager =
       BrowserAccessibilityManager::Create(
-          tree1_root,
+          MakeAXTreeUpdate(tree1_root, tree1_container,
+                           tree1_child1, tree1_grandchild1,
+                           tree1_child2, tree1_grandchild2,
+                           tree1_child3, tree1_grandchild3),
           NULL,
           new CountedBrowserAccessibilityFactory());
-  manager->UpdateNodesForTesting(tree1_container,
-                                 tree1_child1, tree1_grandchild1,
-                                 tree1_child2, tree1_grandchild2,
-                                 tree1_child3, tree1_grandchild3);
   ASSERT_EQ(8, CountedBrowserAccessibility::global_obj_count_);
 
   // Save references to some objects.
@@ -540,10 +537,9 @@
   CountedBrowserAccessibility::global_obj_count_ = 0;
   BrowserAccessibilityManager* manager =
       BrowserAccessibilityManager::Create(
-          tree1_1,
+          MakeAXTreeUpdate(tree1_1, tree1_2, tree1_3, tree1_4),
           NULL,
           new CountedBrowserAccessibilityFactory());
-  manager->UpdateNodesForTesting(tree1_2, tree1_3, tree1_4);
   ASSERT_EQ(4, CountedBrowserAccessibility::global_obj_count_);
 
   // Process a notification containing the changed subtree.
@@ -566,13 +562,7 @@
   ASSERT_EQ(0, CountedBrowserAccessibility::global_obj_count_);
 }
 
-// Crashes on Windows. http://crbug.com/304130
-#if defined(OS_WIN)
-#define MAYBE_TestFatalError DISABLED_TestFatalError
-#else
-#define MAYBE_TestFatalError TestFatalError
-#endif
-TEST(BrowserAccessibilityManagerTest, MAYBE_TestFatalError) {
+TEST(BrowserAccessibilityManagerTest, TestFatalError) {
   // Test that BrowserAccessibilityManager raises a fatal error
   // (which will crash the renderer) if the same id is used in
   // two places in the tree.
@@ -590,7 +580,7 @@
   scoped_ptr<BrowserAccessibilityManager> manager;
   ASSERT_FALSE(delegate->got_fatal_error());
   manager.reset(BrowserAccessibilityManager::Create(
-      root,
+      MakeAXTreeUpdate(root),
       delegate.get(),
       factory));
   ASSERT_TRUE(delegate->got_fatal_error());
@@ -611,14 +601,22 @@
   child2.child_ids.push_back(6);
   child2.child_ids.push_back(5);  // Duplicate
 
+  ui::AXNodeData grandchild4;
+  grandchild4.id = 4;
+
+  ui::AXNodeData grandchild5;
+  grandchild5.id = 5;
+
+  ui::AXNodeData grandchild6;
+  grandchild6.id = 6;
+
   delegate->reset_got_fatal_error();
   factory = new CountedBrowserAccessibilityFactory();
   manager.reset(BrowserAccessibilityManager::Create(
-      root2,
+      MakeAXTreeUpdate(root2, child1, child2,
+                       grandchild4, grandchild5, grandchild6),
       delegate.get(),
       factory));
-  ASSERT_FALSE(delegate->got_fatal_error());
-  manager->UpdateNodesForTesting(child1, child2);
   ASSERT_TRUE(delegate->got_fatal_error());
 }
 
@@ -673,10 +671,9 @@
 
   scoped_ptr<BrowserAccessibilityManager> manager(
       BrowserAccessibilityManager::Create(
-          root,
+          MakeAXTreeUpdate(root, static_text, inline_text1, inline_text2),
           NULL,
           new CountedBrowserAccessibilityFactory()));
-  manager->UpdateNodesForTesting(static_text, inline_text1, inline_text2);
 
   BrowserAccessibility* root_accessible = manager->GetRoot();
   BrowserAccessibility* static_text_accessible =
@@ -762,10 +759,9 @@
 
   scoped_ptr<BrowserAccessibilityManager> manager(
       BrowserAccessibilityManager::Create(
-          root,
+          MakeAXTreeUpdate(root, static_text, inline_text1, inline_text2),
           NULL,
           new CountedBrowserAccessibilityFactory()));
-  manager->UpdateNodesForTesting(static_text, inline_text1, inline_text2);
 
   BrowserAccessibility* root_accessible = manager->GetRoot();
   BrowserAccessibility* static_text_accessible =
@@ -859,12 +855,11 @@
 
   scoped_ptr<BrowserAccessibilityManager> manager(
       BrowserAccessibilityManager::Create(
-          root,
+          MakeAXTreeUpdate(
+              root, div, static_text1, img,
+              static_text2, inline_text1, inline_text2),
           NULL,
           new CountedBrowserAccessibilityFactory()));
-  manager->UpdateNodesForTesting(
-      div, static_text1, img, static_text2, inline_text1, inline_text2);
-
   BrowserAccessibility* root_accessible = manager->GetRoot();
 
   EXPECT_EQ(gfx::Rect(100, 100, 20, 20).ToString(),
@@ -909,10 +904,9 @@
 
   scoped_ptr<BrowserAccessibilityManager> manager(
       BrowserAccessibilityManager::Create(
-          root,
+          MakeAXTreeUpdate(root, node2, node3, node4, node5),
           NULL,
           new CountedBrowserAccessibilityFactory()));
-  manager->UpdateNodesForTesting(node2, node3, node4, node5);
 
   BrowserAccessibility* root_accessible = manager->GetRoot();
   BrowserAccessibility* node2_accessible = root_accessible->PlatformGetChild(0);
diff --git a/content/browser/accessibility/browser_accessibility_manager_win.cc b/content/browser/accessibility/browser_accessibility_manager_win.cc
index 795fe04..31f9d8a 100644
--- a/content/browser/accessibility/browser_accessibility_manager_win.cc
+++ b/content/browser/accessibility/browser_accessibility_manager_win.cc
@@ -16,12 +16,12 @@
 
 // static
 BrowserAccessibilityManager* BrowserAccessibilityManager::Create(
-    const ui::AXNodeData& src,
+    const ui::AXTreeUpdate& initial_tree,
     BrowserAccessibilityDelegate* delegate,
     BrowserAccessibilityFactory* factory) {
   return new BrowserAccessibilityManagerWin(
       content::LegacyRenderWidgetHostHWND::Create(GetDesktopWindow()).get(),
-      NULL, src, delegate, factory);
+      NULL, initial_tree, delegate, factory);
 }
 
 BrowserAccessibilityManagerWin*
@@ -32,10 +32,10 @@
 BrowserAccessibilityManagerWin::BrowserAccessibilityManagerWin(
     LegacyRenderWidgetHostHWND* accessible_hwnd,
     IAccessible* parent_iaccessible,
-    const ui::AXNodeData& src,
+    const ui::AXTreeUpdate& initial_tree,
     BrowserAccessibilityDelegate* delegate,
     BrowserAccessibilityFactory* factory)
-    : BrowserAccessibilityManager(src, delegate, factory),
+    : BrowserAccessibilityManager(initial_tree, delegate, factory),
       parent_hwnd_(accessible_hwnd->GetParent()),
       parent_iaccessible_(parent_iaccessible),
       tracked_scroll_object_(NULL),
@@ -53,7 +53,7 @@
 }
 
 // static
-ui::AXNodeData BrowserAccessibilityManagerWin::GetEmptyDocument() {
+ui::AXTreeUpdate BrowserAccessibilityManagerWin::GetEmptyDocument() {
   ui::AXNodeData empty_document;
   empty_document.id = 0;
   empty_document.role = ui::AX_ROLE_ROOT_WEB_AREA;
@@ -61,7 +61,10 @@
       (1 << ui::AX_STATE_ENABLED) |
       (1 << ui::AX_STATE_READ_ONLY) |
       (1 << ui::AX_STATE_BUSY);
-  return empty_document;
+
+  ui::AXTreeUpdate update;
+  update.nodes.push_back(empty_document);
+  return update;
 }
 
 void BrowserAccessibilityManagerWin::MaybeCallNotifyWinEvent(DWORD event,
@@ -81,17 +84,22 @@
   ::NotifyWinEvent(event, parent_hwnd(), OBJID_CLIENT, child_id);
 }
 
-void BrowserAccessibilityManagerWin::AddNodeToMap(BrowserAccessibility* node) {
-  BrowserAccessibilityManager::AddNodeToMap(node);
-  LONG unique_id_win = node->ToBrowserAccessibilityWin()->unique_id_win();
-  unique_id_to_renderer_id_map_[unique_id_win] = node->GetId();
+
+void BrowserAccessibilityManagerWin::OnNodeCreated(ui::AXNode* node) {
+  BrowserAccessibilityManager::OnNodeCreated(node);
+  BrowserAccessibility* obj = GetFromAXNode(node);
+  LONG unique_id_win = obj->ToBrowserAccessibilityWin()->unique_id_win();
+  unique_id_to_ax_id_map_[unique_id_win] = obj->GetId();
 }
 
-void BrowserAccessibilityManagerWin::RemoveNode(BrowserAccessibility* node) {
-  unique_id_to_renderer_id_map_.erase(
-      node->ToBrowserAccessibilityWin()->unique_id_win());
-  BrowserAccessibilityManager::RemoveNode(node);
-  if (node == tracked_scroll_object_) {
+void BrowserAccessibilityManagerWin::OnNodeWillBeDeleted(ui::AXNode* node) {
+  BrowserAccessibilityManager::OnNodeWillBeDeleted(node);
+  BrowserAccessibility* obj = GetFromAXNode(node);
+  if (!obj)
+    return;
+  unique_id_to_ax_id_map_.erase(
+      obj->ToBrowserAccessibilityWin()->unique_id_win());
+  if (obj == tracked_scroll_object_) {
     tracked_scroll_object_->Release();
     tracked_scroll_object_ = NULL;
   }
@@ -99,16 +107,16 @@
 
 void BrowserAccessibilityManagerWin::OnWindowFocused() {
   // Fire a focus event on the root first and then the focused node.
-  if (focus_ != root_)
-    NotifyAccessibilityEvent(ui::AX_EVENT_FOCUS, root_);
+  if (focus_ != tree_->GetRoot())
+    NotifyAccessibilityEvent(ui::AX_EVENT_FOCUS, GetRoot());
   BrowserAccessibilityManager::OnWindowFocused();
 }
 
 void BrowserAccessibilityManagerWin::OnWindowBlurred() {
   // Fire a blur event on the focused node first and then the root.
   BrowserAccessibilityManager::OnWindowBlurred();
-  if (focus_ != root_)
-    NotifyAccessibilityEvent(ui::AX_EVENT_BLUR, root_);
+  if (focus_ != tree_->GetRoot())
+    NotifyAccessibilityEvent(ui::AX_EVENT_BLUR, GetRoot());
 }
 
 void BrowserAccessibilityManagerWin::NotifyAccessibilityEvent(
@@ -149,10 +157,9 @@
       event_id = EVENT_OBJECT_STATECHANGE;
       break;
     case ui::AX_EVENT_LIVE_REGION_CHANGED:
-      // TODO: try not firing a native notification at all, since
-      // on Windows, each individual item in a live region that changes
-      // already gets its own notification.
-      event_id = EVENT_OBJECT_REORDER;
+      if (node->GetBoolAttribute(ui::AX_ATTR_CONTAINER_LIVE_BUSY))
+        return;
+      event_id = EVENT_OBJECT_LIVEREGIONCHANGED;
       break;
     case ui::AX_EVENT_LOAD_COMPLETE:
       event_id = IA2_EVENT_DOCUMENT_LOAD_COMPLETE;
@@ -222,9 +229,9 @@
   }
 }
 
-void BrowserAccessibilityManagerWin::OnRootChanged() {
+void BrowserAccessibilityManagerWin::OnRootChanged(ui::AXNode* new_root) {
   if (delegate_ && delegate_->HasFocus())
-    NotifyAccessibilityEvent(ui::AX_EVENT_FOCUS, root_);
+    NotifyAccessibilityEvent(ui::AX_EVENT_FOCUS, GetRoot());
 }
 
 void BrowserAccessibilityManagerWin::TrackScrollingObject(
@@ -238,9 +245,9 @@
 BrowserAccessibilityWin* BrowserAccessibilityManagerWin::GetFromUniqueIdWin(
     LONG unique_id_win) {
   base::hash_map<LONG, int32>::iterator iter =
-      unique_id_to_renderer_id_map_.find(unique_id_win);
-  if (iter != unique_id_to_renderer_id_map_.end()) {
-    BrowserAccessibility* result = GetFromRendererID(iter->second);
+      unique_id_to_ax_id_map_.find(unique_id_win);
+  if (iter != unique_id_to_ax_id_map_.end()) {
+    BrowserAccessibility* result = GetFromID(iter->second);
     if (result)
       return result->ToBrowserAccessibilityWin();
   }
diff --git a/content/browser/accessibility/browser_accessibility_manager_win.h b/content/browser/accessibility/browser_accessibility_manager_win.h
index 3fbbd3f..18260e4 100644
--- a/content/browser/accessibility/browser_accessibility_manager_win.h
+++ b/content/browser/accessibility/browser_accessibility_manager_win.h
@@ -23,13 +23,13 @@
   BrowserAccessibilityManagerWin(
       content::LegacyRenderWidgetHostHWND* accessible_hwnd,
       IAccessible* parent_iaccessible,
-      const ui::AXNodeData& src,
+      const ui::AXTreeUpdate& initial_tree,
       BrowserAccessibilityDelegate* delegate,
       BrowserAccessibilityFactory* factory = new BrowserAccessibilityFactory());
 
   virtual ~BrowserAccessibilityManagerWin();
 
-  static ui::AXNodeData GetEmptyDocument();
+  static ui::AXTreeUpdate GetEmptyDocument();
 
   // Get the closest containing HWND.
   HWND parent_hwnd() { return parent_hwnd_; }
@@ -43,9 +43,11 @@
   // Calls NotifyWinEvent if the parent window's IAccessible pointer is known.
   void MaybeCallNotifyWinEvent(DWORD event, LONG child_id);
 
+  // AXTree methods
+  virtual void OnNodeWillBeDeleted(ui::AXNode* node) OVERRIDE;
+  virtual void OnNodeCreated(ui::AXNode* node) OVERRIDE;
+
   // BrowserAccessibilityManager methods
-  virtual void AddNodeToMap(BrowserAccessibility* node);
-  virtual void RemoveNode(BrowserAccessibility* node) OVERRIDE;
   virtual void OnWindowFocused() OVERRIDE;
   virtual void OnWindowBlurred() OVERRIDE;
   virtual void NotifyAccessibilityEvent(
@@ -65,7 +67,7 @@
 
  protected:
   // BrowserAccessibilityManager methods
-  virtual void OnRootChanged() OVERRIDE;
+  virtual void OnRootChanged(ui::AXNode* new_root) OVERRIDE;
 
  private:
   // The closest ancestor HWND.
@@ -83,8 +85,8 @@
   BrowserAccessibilityWin* tracked_scroll_object_;
 
   // A mapping from the Windows-specific unique IDs (unique within the
-  // browser process) to renderer ids within this page.
-  base::hash_map<long, int32> unique_id_to_renderer_id_map_;
+  // browser process) to accessibility ids within this page.
+  base::hash_map<long, int32> unique_id_to_ax_id_map_;
 
   // Owned by its parent; OnAccessibleHwndDeleted gets called upon deletion.
   LegacyRenderWidgetHostHWND* accessible_hwnd_;
diff --git a/content/browser/accessibility/browser_accessibility_win.cc b/content/browser/accessibility/browser_accessibility_win.cc
index c96c785..ac2af33 100644
--- a/content/browser/accessibility/browser_accessibility_win.cc
+++ b/content/browser/accessibility/browser_accessibility_win.cc
@@ -114,7 +114,7 @@
 
   BrowserAccessibilityManager* manager = owner_->manager();
   for (long i = *n_targets - 1; i >= 0; --i) {
-    BrowserAccessibility* result = manager->GetFromRendererID(target_ids_[i]);
+    BrowserAccessibility* result = manager->GetFromID(target_ids_[i]);
     if (!result || !result->instance_active()) {
       *n_targets = 0;
       break;
@@ -138,7 +138,7 @@
 
   BrowserAccessibilityManager* manager = owner_->manager();
   BrowserAccessibility* result =
-      manager->GetFromRendererID(target_ids_[target_index]);
+      manager->GetFromID(target_ids_[target_index]);
   if (!result || !result->instance_active())
     return E_FAIL;
 
@@ -471,7 +471,7 @@
     if (target->GetIntAttribute(ui::AX_ATTR_TITLE_UI_ELEMENT,
                                 &title_elem_id)) {
       BrowserAccessibility* title_elem =
-          manager()->GetFromRendererID(title_elem_id);
+          manager()->GetFromID(title_elem_id);
       if (title_elem)
         name_str = title_elem->GetTextRecursive();
     }
@@ -1055,7 +1055,7 @@
   DCHECK_EQ(columns * rows, static_cast<int>(cell_ids.size()));
 
   int cell_id = cell_ids[row * columns + column];
-  BrowserAccessibilityWin* cell = GetFromRendererID(cell_id);
+  BrowserAccessibilityWin* cell = GetFromID(cell_id);
   if (cell) {
     *accessible = static_cast<IAccessible*>(cell->NewReference());
     return S_OK;
@@ -1141,7 +1141,7 @@
   for (int i = 0; i < rows; ++i) {
     int cell_id = cell_ids[i * columns + column];
     BrowserAccessibilityWin* cell = static_cast<BrowserAccessibilityWin*>(
-        manager()->GetFromRendererID(cell_id));
+        manager()->GetFromID(cell_id));
     if (cell && cell->GetRole() == ui::AX_ROLE_COLUMN_HEADER) {
       base::string16 cell_name = cell->GetString16Attribute(
           ui::AX_ATTR_NAME);
@@ -1185,7 +1185,7 @@
       ui::AX_ATTR_CELL_IDS);
   int cell_id = cell_ids[row * columns + column];
   BrowserAccessibilityWin* cell = static_cast<BrowserAccessibilityWin*>(
-      manager()->GetFromRendererID(cell_id));
+      manager()->GetFromID(cell_id));
   int colspan;
   if (cell &&
       cell->GetIntAttribute(
@@ -1223,7 +1223,7 @@
 
   int cell_id = unique_cell_ids[cell_index];
   BrowserAccessibilityWin* cell =
-      manager()->GetFromRendererID(cell_id)->ToBrowserAccessibilityWin();
+      manager()->GetFromID(cell_id)->ToBrowserAccessibilityWin();
   int col_index;
   if (cell &&
       cell->GetIntAttribute(
@@ -1328,7 +1328,7 @@
   for (int i = 0; i < columns; ++i) {
     int cell_id = cell_ids[row * columns + i];
     BrowserAccessibilityWin* cell =
-        manager()->GetFromRendererID(cell_id)->ToBrowserAccessibilityWin();
+        manager()->GetFromID(cell_id)->ToBrowserAccessibilityWin();
     if (cell && cell->GetRole() == ui::AX_ROLE_ROW_HEADER) {
       base::string16 cell_name = cell->GetString16Attribute(
           ui::AX_ATTR_NAME);
@@ -1371,7 +1371,7 @@
       ui::AX_ATTR_CELL_IDS);
   int cell_id = cell_ids[row * columns + column];
   BrowserAccessibilityWin* cell =
-      manager()->GetFromRendererID(cell_id)->ToBrowserAccessibilityWin();
+      manager()->GetFromID(cell_id)->ToBrowserAccessibilityWin();
   int rowspan;
   if (cell &&
       cell->GetIntAttribute(
@@ -1409,7 +1409,7 @@
 
   int cell_id = unique_cell_ids[cell_index];
   BrowserAccessibilityWin* cell =
-      manager()->GetFromRendererID(cell_id)->ToBrowserAccessibilityWin();
+      manager()->GetFromID(cell_id)->ToBrowserAccessibilityWin();
   int cell_row_index;
   if (cell &&
       cell->GetIntAttribute(
@@ -1538,7 +1538,7 @@
 
   int cell_id = unique_cell_ids[index];
   BrowserAccessibilityWin* cell =
-      manager()->GetFromRendererID(cell_id)->ToBrowserAccessibilityWin();
+      manager()->GetFromID(cell_id)->ToBrowserAccessibilityWin();
   int rowspan;
   int colspan;
   if (cell &&
@@ -1676,7 +1676,7 @@
   for (int i = 0; i < rows; ++i) {
     int cell_id = cell_ids[i * columns + column];
     BrowserAccessibilityWin* cell =
-        manager()->GetFromRendererID(cell_id)->ToBrowserAccessibilityWin();
+        manager()->GetFromID(cell_id)->ToBrowserAccessibilityWin();
     if (cell && cell->GetRole() == ui::AX_ROLE_COLUMN_HEADER)
       (*n_column_header_cells)++;
   }
@@ -1686,7 +1686,7 @@
   int index = 0;
   for (int i = 0; i < rows; ++i) {
     int cell_id = cell_ids[i * columns + column];
-    BrowserAccessibility* cell = manager()->GetFromRendererID(cell_id);
+    BrowserAccessibility* cell = manager()->GetFromID(cell_id);
     if (cell && cell->GetRole() == ui::AX_ROLE_COLUMN_HEADER) {
       (*cell_accessibles)[index] = static_cast<IAccessible*>(
           cell->ToBrowserAccessibilityWin()->NewReference());
@@ -1773,7 +1773,7 @@
 
   for (int i = 0; i < columns; ++i) {
     int cell_id = cell_ids[row * columns + i];
-    BrowserAccessibility* cell = manager()->GetFromRendererID(cell_id);
+    BrowserAccessibility* cell = manager()->GetFromID(cell_id);
     if (cell && cell->GetRole() == ui::AX_ROLE_ROW_HEADER)
       (*n_row_header_cells)++;
   }
@@ -1783,7 +1783,7 @@
   int index = 0;
   for (int i = 0; i < columns; ++i) {
     int cell_id = cell_ids[row * columns + i];
-    BrowserAccessibility* cell = manager()->GetFromRendererID(cell_id);
+    BrowserAccessibility* cell = manager()->GetFromID(cell_id);
     if (cell && cell->GetRole() == ui::AX_ROLE_ROW_HEADER) {
       (*cell_accessibles)[index] = static_cast<IAccessible*>(
           cell->ToBrowserAccessibilityWin()->NewReference());
@@ -2897,9 +2897,9 @@
 // Private methods.
 //
 
-// Initialize this object and mark it as active.
-void BrowserAccessibilityWin::PreInitialize() {
-  BrowserAccessibility::PreInitialize();
+// Called every time this node's data changes.
+void BrowserAccessibilityWin::OnDataChanged() {
+  BrowserAccessibility::OnDataChanged();
 
   InitRoleAndState();
 
@@ -3078,9 +3078,7 @@
   }
 }
 
-void BrowserAccessibilityWin::PostInitialize() {
-  BrowserAccessibility::PostInitialize();
-
+void BrowserAccessibilityWin::OnUpdateFinished() {
   // Construct the hypertext for this node.
   hyperlink_offset_to_index_.clear();
   hyperlinks_.clear();
@@ -3174,8 +3172,7 @@
   return true;
 }
 
-void BrowserAccessibilityWin::SetLocation(const gfx::Rect& new_location) {
-  BrowserAccessibility::SetLocation(new_location);
+void BrowserAccessibilityWin::OnLocationChanged() const {
   manager()->ToBrowserAccessibilityManagerWin()->MaybeCallNotifyWinEvent(
       EVENT_OBJECT_LOCATIONCHANGE, unique_id_win());
 }
@@ -3301,9 +3298,8 @@
       text, line_breaks, boundary, start_offset, direction);
 }
 
-BrowserAccessibilityWin* BrowserAccessibilityWin::GetFromRendererID(
-    int32 renderer_id) {
-  return manager()->GetFromRendererID(renderer_id)->ToBrowserAccessibilityWin();
+BrowserAccessibilityWin* BrowserAccessibilityWin::GetFromID(int32 id) {
+  return manager()->GetFromID(id)->ToBrowserAccessibilityWin();
 }
 
 void BrowserAccessibilityWin::InitRoleAndState() {
diff --git a/content/browser/accessibility/browser_accessibility_win.h b/content/browser/accessibility/browser_accessibility_win.h
index 137f8b9..914d5c8 100644
--- a/content/browser/accessibility/browser_accessibility_win.h
+++ b/content/browser/accessibility/browser_accessibility_win.h
@@ -100,13 +100,12 @@
   //
   // BrowserAccessibility methods.
   //
-  CONTENT_EXPORT virtual void PreInitialize() OVERRIDE;
-  CONTENT_EXPORT virtual void PostInitialize() OVERRIDE;
+  CONTENT_EXPORT virtual void OnDataChanged() OVERRIDE;
+  CONTENT_EXPORT virtual void OnUpdateFinished() OVERRIDE;
   CONTENT_EXPORT virtual void NativeAddReference() OVERRIDE;
   CONTENT_EXPORT virtual void NativeReleaseReference() OVERRIDE;
   CONTENT_EXPORT virtual bool IsNative() const OVERRIDE;
-  CONTENT_EXPORT virtual void SetLocation(const gfx::Rect& new_location)
-      OVERRIDE;
+  CONTENT_EXPORT virtual void OnLocationChanged() const OVERRIDE;
 
   //
   // IAccessible methods.
@@ -834,9 +833,9 @@
                     LONG start_offset,
                     ui::TextBoundaryDirection direction);
 
-  // Return a pointer to the object corresponding to the given renderer_id,
+  // Return a pointer to the object corresponding to the given id,
   // does not make a new reference.
-  BrowserAccessibilityWin* GetFromRendererID(int32 renderer_id);
+  BrowserAccessibilityWin* GetFromID(int32 id);
 
   // Windows-specific unique ID (unique within the browser process),
   // used for get_accChild, NotifyWinEvent, and as the unique ID for
diff --git a/content/browser/accessibility/browser_accessibility_win_unittest.cc b/content/browser/accessibility/browser_accessibility_win_unittest.cc
index 09704ea..eca0d91 100644
--- a/content/browser/accessibility/browser_accessibility_win_unittest.cc
+++ b/content/browser/accessibility/browser_accessibility_win_unittest.cc
@@ -141,8 +141,8 @@
   CountedBrowserAccessibility::reset();
   scoped_ptr<BrowserAccessibilityManager> manager(
       BrowserAccessibilityManager::Create(
-          root, NULL, new CountedBrowserAccessibilityFactory()));
-  manager->UpdateNodesForTesting(button, checkbox);
+          MakeAXTreeUpdate(root, button, checkbox),
+          NULL, new CountedBrowserAccessibilityFactory()));
   ASSERT_EQ(3, CountedBrowserAccessibility::num_instances());
 
   // Delete the manager and test that all 3 instances are deleted.
@@ -152,8 +152,8 @@
   // Construct a manager again, and this time use the IAccessible interface
   // to get new references to two of the three nodes in the tree.
   manager.reset(BrowserAccessibilityManager::Create(
-      root, NULL, new CountedBrowserAccessibilityFactory()));
-  manager->UpdateNodesForTesting(button, checkbox);
+      MakeAXTreeUpdate(root, button, checkbox),
+      NULL, new CountedBrowserAccessibilityFactory()));
   ASSERT_EQ(3, CountedBrowserAccessibility::num_instances());
   IAccessible* root_accessible =
       manager->GetRoot()->ToBrowserAccessibilityWin();
@@ -202,8 +202,8 @@
   CountedBrowserAccessibility::reset();
   scoped_ptr<BrowserAccessibilityManager> manager(
       BrowserAccessibilityManager::Create(
-          root, NULL, new CountedBrowserAccessibilityFactory()));
-  manager->UpdateNodesForTesting(text);
+          MakeAXTreeUpdate(root, text),
+          NULL, new CountedBrowserAccessibilityFactory()));
 
   // Query for the text IAccessible and verify that it returns "old text" as its
   // value.
@@ -298,8 +298,8 @@
   CountedBrowserAccessibility::reset();
   scoped_ptr<BrowserAccessibilityManager> manager(
       BrowserAccessibilityManager::Create(
-          root, NULL, new CountedBrowserAccessibilityFactory()));
-  manager->UpdateNodesForTesting(div, text3, text4);
+          MakeAXTreeUpdate(root, div, text3, text4),
+          NULL, new CountedBrowserAccessibilityFactory()));
   ASSERT_EQ(4, CountedBrowserAccessibility::num_instances());
 
   // Notify the BrowserAccessibilityManager that the div node and its children
@@ -342,8 +342,8 @@
   CountedBrowserAccessibility::reset();
   scoped_ptr<BrowserAccessibilityManager> manager(
       BrowserAccessibilityManager::Create(
-          root, NULL, new CountedBrowserAccessibilityFactory()));
-  manager->UpdateNodesForTesting(text1);
+          MakeAXTreeUpdate(root, text1),
+          NULL, new CountedBrowserAccessibilityFactory()));
   ASSERT_EQ(2, CountedBrowserAccessibility::num_instances());
 
   BrowserAccessibilityWin* root_obj =
@@ -442,8 +442,8 @@
   CountedBrowserAccessibility::reset();
   scoped_ptr<BrowserAccessibilityManager> manager(
       BrowserAccessibilityManager::Create(
-          root, NULL, new CountedBrowserAccessibilityFactory()));
-  manager->UpdateNodesForTesting(root, text1, text2);
+          MakeAXTreeUpdate(root, root, text1, text2),
+          NULL, new CountedBrowserAccessibilityFactory()));
   ASSERT_EQ(3, CountedBrowserAccessibility::num_instances());
 
   BrowserAccessibilityWin* root_obj =
@@ -532,11 +532,10 @@
   CountedBrowserAccessibility::reset();
   scoped_ptr<BrowserAccessibilityManager> manager(
       BrowserAccessibilityManager::Create(
-          root, NULL, new CountedBrowserAccessibilityFactory()));
-  manager->UpdateNodesForTesting(root,
-                                 text1, button1, button1_text,
-                                 text2, link1, link1_text);
-
+          MakeAXTreeUpdate(root,
+                           text1, button1, button1_text,
+                           text2, link1, link1_text),
+          NULL, new CountedBrowserAccessibilityFactory()));
   ASSERT_EQ(7, CountedBrowserAccessibility::num_instances());
 
   BrowserAccessibilityWin* root_obj =
@@ -643,7 +642,7 @@
   manager->OnAccessibilityEvents(params);
 
   // Save for later comparison.
-  BrowserAccessibility* acc1_2 = manager->GetFromRendererID(2);
+  BrowserAccessibility* acc1_2 = manager->GetFromID(2);
 
   // Verify the root has changed.
   EXPECT_NE(root, manager->GetRoot());
@@ -670,7 +669,7 @@
   // Fire another load complete.
   manager->OnAccessibilityEvents(params);
 
-  BrowserAccessibility* acc2_2 = manager->GetFromRendererID(3);
+  BrowserAccessibility* acc2_2 = manager->GetFromID(3);
 
   // Verify the root has changed.
   EXPECT_NE(root, manager->GetRoot());
diff --git a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
index 47cb547..37f0cb0 100644
--- a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
+++ b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
@@ -254,6 +254,10 @@
   RunTest(FILE_PATH_LITERAL("a-name.html"));
 }
 
+IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, AccessibilityANoText) {
+  RunTest(FILE_PATH_LITERAL("a-no-text.html"));
+}
+
 IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, AccessibilityAOnclick) {
   RunTest(FILE_PATH_LITERAL("a-onclick.html"));
 }
diff --git a/content/browser/android/browser_jni_registrar.cc b/content/browser/android/browser_jni_registrar.cc
index bf4540e..fca55a9 100644
--- a/content/browser/android/browser_jni_registrar.cc
+++ b/content/browser/android/browser_jni_registrar.cc
@@ -22,7 +22,8 @@
 #include "content/browser/android/surface_texture_peer_browser_impl.h"
 #include "content/browser/android/tracing_controller_android.h"
 #include "content/browser/android/web_contents_observer_android.h"
-#include "content/browser/device_orientation/sensor_manager_android.h"
+#include "content/browser/battery_status/battery_status_manager_android.h"
+#include "content/browser/device_sensors/sensor_manager_android.h"
 #include "content/browser/frame_host/navigation_controller_android.h"
 #include "content/browser/geolocation/location_api_adapter_android.h"
 #include "content/browser/media/android/media_drm_credential_manager.h"
@@ -80,7 +81,9 @@
     {"VibrationProvider", content::VibrationProviderAndroid::Register},
     {"WebContentsAndroid", content::WebContentsAndroid::Register},
     {"WebContentsObserverAndroid", content::RegisterWebContentsObserverAndroid},
-    {"WebViewStatics", content::RegisterWebViewStatics}, };
+    {"WebViewStatics", content::RegisterWebViewStatics},
+    {"BatterStatusManagerAndroid",
+     content::BatteryStatusManagerAndroid::Register}, };
 
 }  // namespace
 
diff --git a/content/browser/android/content_settings.h b/content/browser/android/content_settings.h
index 5c0f9a0..df75727 100644
--- a/content/browser/android/content_settings.h
+++ b/content/browser/android/content_settings.h
@@ -7,7 +7,7 @@
 
 #include <jni.h>
 
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "content/public/browser/web_contents_observer.h"
 
 namespace content {
diff --git a/content/browser/android/content_startup_flags.cc b/content/browser/android/content_startup_flags.cc
index a3c33be..ddcc86c 100644
--- a/content/browser/android/content_startup_flags.cc
+++ b/content/browser/android/content_startup_flags.cc
@@ -56,7 +56,6 @@
       RenderProcessHost::SetMaxRendererProcessCount(max_render_process_count);
   }
 
-  parsed_command_line->AppendSwitch(switches::kForceCompositingMode);
   parsed_command_line->AppendSwitch(switches::kEnableThreadedCompositing);
   parsed_command_line->AppendSwitch(
       switches::kEnableCompositingForFixedPosition);
diff --git a/content/browser/android/content_video_view.h b/content/browser/android/content_video_view.h
index 40a85ce..faea292 100644
--- a/content/browser/android/content_video_view.h
+++ b/content/browser/android/content_video_view.h
@@ -7,7 +7,7 @@
 
 #include <jni.h>
 
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/android/scoped_java_ref.h"
 #include "base/basictypes.h"
 #include "base/memory/ref_counted.h"
diff --git a/content/browser/android/content_view_core_impl.cc b/content/browser/android/content_view_core_impl.cc
index d6d0591..e2f9364 100644
--- a/content/browser/android/content_view_core_impl.cc
+++ b/content/browser/android/content_view_core_impl.cc
@@ -57,7 +57,6 @@
 #include "third_party/WebKit/public/web/WebInputEvent.h"
 #include "ui/base/android/view_android.h"
 #include "ui/base/android/window_android.h"
-#include "ui/events/gesture_detection/gesture_config_helper.h"
 #include "ui/gfx/android/java_bitmap.h"
 #include "ui/gfx/screen.h"
 #include "ui/gfx/size_conversions.h"
@@ -164,13 +163,6 @@
   return display.device_scale_factor();
 }
 
-ui::GestureProvider::Config GetGestureProviderConfig() {
-  ui::GestureProvider::Config config = ui::DefaultGestureProviderConfig();
-  config.disable_click_delay =
-      CommandLine::ForCurrentProcess()->HasSwitch(switches::kDisableClickDelay);
-  return config;
-}
-
 }  // namespace
 
 // Enables a callback when the underlying WebContents is destroyed, to enable
@@ -237,7 +229,6 @@
           kDefaultVSyncIntervalMicros * kDefaultBrowserCompositeVSyncFraction)),
       view_android_(view_android),
       window_android_(window_android),
-      gesture_provider_(GetGestureProviderConfig(), this),
       device_orientation_(0),
       geolocation_needs_pause_(false) {
   CHECK(web_contents) <<
@@ -316,6 +307,12 @@
                 switched_details->first->GetView());
         if (view)
           view->SetContentViewCore(NULL);
+
+        view = static_cast<RenderWidgetHostViewAndroid*>(
+            switched_details->second->GetView());
+
+        if (view)
+          view->SetContentViewCore(this);
       }
       int new_pid = GetRenderProcessIdFromRenderViewHost(
           web_contents_->GetRenderViewHost());
@@ -364,10 +361,6 @@
     SendOrientationChangeEventInternal();
 }
 
-void ContentViewCoreImpl::OnGestureEvent(const ui::GestureEventData& gesture) {
-  SendGestureEvent(CreateWebGestureEventFromGestureEventData(gesture));
-}
-
 RenderWidgetHostViewAndroid*
     ContentViewCoreImpl::GetRenderWidgetHostViewAndroid() {
   RenderWidgetHostView* rwhv = NULL;
@@ -559,11 +552,6 @@
     Java_ContentViewCore_hideSelectPopup(env, j_obj.obj());
 }
 
-void ContentViewCoreImpl::ConfirmTouchEvent(InputEventAckState ack_result) {
-  const bool event_consumed = ack_result == INPUT_EVENT_ACK_STATE_CONSUMED;
-  gesture_provider_.OnTouchEventAck(event_consumed);
-}
-
 void ContentViewCoreImpl::OnGestureEventAck(const blink::WebGestureEvent& event,
                                             InputEventAckState ack_result) {
   JNIEnv* env = AttachCurrentThread();
@@ -798,6 +786,13 @@
     Java_ContentViewCore_onNativeFlingStopped(env, obj.obj());
 }
 
+gfx::Size ContentViewCoreImpl::GetViewSize() const {
+  gfx::Size size = GetViewportSizeDip();
+  gfx::Size offset = GetViewportSizeOffsetDip();
+  size.Enlarge(-offset.width(), -offset.height());
+  return size;
+}
+
 gfx::Size ContentViewCoreImpl::GetPhysicalBackingSize() const {
   JNIEnv* env = AttachCurrentThread();
   ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env);
@@ -928,6 +923,8 @@
     jstring url,
     jint load_url_type,
     jint transition_type,
+    jstring j_referrer_url,
+    jint referrer_policy,
     jint ua_override_option,
     jstring extra_headers,
     jbyteArray post_data,
@@ -966,6 +963,11 @@
   }
 
   params.can_load_local_resources = can_load_local_resources;
+  if (j_referrer_url) {
+    params.referrer = content::Referrer(
+        GURL(ConvertJavaStringToUTF8(env, j_referrer_url)),
+        static_cast<blink::WebReferrerPolicy>(referrer_policy));
+  }
 
   LoadUrl(params);
 }
@@ -975,11 +977,6 @@
   return ConvertUTF8ToJavaString(env, GetWebContents()->GetURL().spec());
 }
 
-ScopedJavaLocalRef<jstring> ContentViewCoreImpl::GetTitle(
-    JNIEnv* env, jobject obj) const {
-  return ConvertUTF16ToJavaString(env, GetWebContents()->GetTitle());
-}
-
 jboolean ContentViewCoreImpl::IsIncognito(JNIEnv* env, jobject obj) {
   return GetWebContents()->GetBrowserContext()->IsOffTheRecord();
 }
@@ -1011,22 +1008,6 @@
   }
 }
 
-void ContentViewCoreImpl::CancelActiveTouchSequenceIfNecessary() {
-  RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid();
-  // Avoid synthesizing a touch cancel event if it cannot be forwarded.
-  if (!rwhv)
-    return;
-
-  const ui::MotionEvent* current_down_event =
-      gesture_provider_.GetCurrentDownEvent();
-  if (!current_down_event)
-    return;
-
-  scoped_ptr<ui::MotionEvent> cancel_event = current_down_event->Cancel();
-  DCHECK(cancel_event);
-  OnMotionEvent(*cancel_event);
-}
-
 jboolean ContentViewCoreImpl::OnTouchEvent(JNIEnv* env,
                                            jobject obj,
                                            jobject motion_event,
@@ -1065,7 +1046,7 @@
                            touch_major_0,
                            touch_major_1);
 
-  return OnMotionEvent(event);
+  return rwhv->OnTouchEvent(event);
 }
 
 float ContentViewCoreImpl::GetDpiScale() const {
@@ -1121,25 +1102,6 @@
       type, time_ms / 1000.0, x / dpi_scale(), y / dpi_scale());
 }
 
-bool ContentViewCoreImpl::OnMotionEvent(const ui::MotionEvent& event) {
-  RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid();
-  if (!rwhv)
-    return false;
-
-  if (!gesture_provider_.OnTouchEvent(event))
-    return false;
-
-  RenderWidgetHostImpl* host = RenderWidgetHostImpl::From(
-      rwhv->GetRenderWidgetHost());
-  if (!host->ShouldForwardTouchEvent()) {
-    ConfirmTouchEvent(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
-    return true;
-  }
-
-  rwhv->SendTouchEvent(CreateWebTouchEventFromMotionEvent(event));
-  return true;
-}
-
 void ContentViewCoreImpl::SendGestureEvent(
     const blink::WebGestureEvent& event) {
   RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid();
@@ -1264,34 +1226,26 @@
   }
 }
 
-void ContentViewCoreImpl::ResetGestureDetectors(JNIEnv* env, jobject obj) {
-  gesture_provider_.ResetGestureDetectors();
-}
-
-void ContentViewCoreImpl::IgnoreRemainingTouchEvents(JNIEnv* env, jobject obj) {
-  CancelActiveTouchSequenceIfNecessary();
-}
-
-void ContentViewCoreImpl::OnWindowFocusLost(JNIEnv* env, jobject obj) {
-  CancelActiveTouchSequenceIfNecessary();
-}
-
-void ContentViewCoreImpl::SetDoubleTapSupportForPageEnabled(JNIEnv* env,
-                                                            jobject obj,
-                                                            jboolean enabled) {
-  gesture_provider_.SetDoubleTapSupportForPageEnabled(enabled);
+void ContentViewCoreImpl::ResetGestureDetection(JNIEnv* env, jobject obj) {
+  RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid();
+  if (rwhv)
+    rwhv->ResetGestureDetection();
 }
 
 void ContentViewCoreImpl::SetDoubleTapSupportEnabled(JNIEnv* env,
                                                      jobject obj,
                                                      jboolean enabled) {
-  gesture_provider_.SetDoubleTapSupportForPlatformEnabled(enabled);
+  RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid();
+  if (rwhv)
+    rwhv->SetDoubleTapSupportEnabled(enabled);
 }
 
 void ContentViewCoreImpl::SetMultiTouchZoomSupportEnabled(JNIEnv* env,
                                                           jobject obj,
                                                           jboolean enabled) {
-  gesture_provider_.SetMultiTouchSupportEnabled(enabled);
+  RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid();
+  if (rwhv)
+    rwhv->SetMultiTouchZoomSupportEnabled(enabled);
 }
 
 void ContentViewCoreImpl::LoadIfNecessary(JNIEnv* env, jobject obj) {
@@ -1302,10 +1256,6 @@
   web_contents_->GetController().SetNeedsReload();
 }
 
-void ContentViewCoreImpl::StopLoading(JNIEnv* env, jobject obj) {
-  web_contents_->Stop();
-}
-
 void ContentViewCoreImpl::Reload(JNIEnv* env,
                                  jobject obj,
                                  jboolean check_for_repost) {
@@ -1431,7 +1381,7 @@
 }
 
 void ContentViewCoreImpl::ShowInterstitialPage(
-    JNIEnv* env, jobject obj, jstring jurl, jint delegate_ptr) {
+    JNIEnv* env, jobject obj, jstring jurl, jlong delegate_ptr) {
   GURL url(base::android::ConvertJavaStringToUTF8(env, jurl));
   InterstitialPageDelegateAndroid* delegate =
       reinterpret_cast<InterstitialPageDelegateAndroid*>(delegate_ptr);
@@ -1558,7 +1508,7 @@
   return ConvertUTF8ToJavaString(env, entry->GetOriginalRequestURL().spec());
 }
 
-int ContentViewCoreImpl::GetNativeImeAdapter(JNIEnv* env, jobject obj) {
+long ContentViewCoreImpl::GetNativeImeAdapter(JNIEnv* env, jobject obj) {
   RenderWidgetHostViewAndroid* rwhva = GetRenderWidgetHostViewAndroid();
   if (!rwhva)
     return 0;
@@ -1708,7 +1658,7 @@
   // TODO(mlamouri): temporary plumbing for Screen Orientation, this will change
   // in the future. It might leave ContentViewCoreImpl or simply replace the
   // SendOrientationChangeEvent call above.
-  blink::WebScreenOrientation orientation =
+  blink::WebScreenOrientationType orientation =
       blink::WebScreenOrientationPortraitPrimary;
 
   switch (device_orientation_) {
diff --git a/content/browser/android/content_view_core_impl.h b/content/browser/android/content_view_core_impl.h
index 652ddc2..f7d75e0 100644
--- a/content/browser/android/content_view_core_impl.h
+++ b/content/browser/android/content_view_core_impl.h
@@ -8,7 +8,7 @@
 #include <vector>
 
 #include "base/android/jni_android.h"
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/basictypes.h"
 #include "base/compiler_specific.h"
 #include "base/i18n/rtl.h"
@@ -21,7 +21,6 @@
 #include "content/public/browser/notification_registrar.h"
 #include "content/public/browser/web_contents_observer.h"
 #include "third_party/WebKit/public/web/WebInputEvent.h"
-#include "ui/events/gesture_detection/filtered_gesture_provider.h"
 #include "ui/gfx/rect.h"
 #include "ui/gfx/rect_f.h"
 #include "url/gurl.h"
@@ -37,7 +36,6 @@
 
 // TODO(jrg): this is a shell.  Upstream the rest.
 class ContentViewCoreImpl : public ContentViewCore,
-                            public ui::GestureProviderClient,
                             public NotificationObserver,
                             public WebContentsObserver {
  public:
@@ -84,6 +82,8 @@
       jstring url,
       jint load_url_type,
       jint transition_type,
+      jstring j_referrer_url,
+      jint referrer_policy,
       jint ua_override_option,
       jstring extra_headers,
       jbyteArray post_data,
@@ -91,8 +91,6 @@
       jstring virtual_url_for_data_url,
       jboolean can_load_local_resources);
   base::android::ScopedJavaLocalRef<jstring> GetURL(JNIEnv* env, jobject) const;
-  base::android::ScopedJavaLocalRef<jstring> GetTitle(
-      JNIEnv* env, jobject obj) const;
   jboolean IsIncognito(JNIEnv* env, jobject obj);
   void SendOrientationChangeEvent(JNIEnv* env, jobject obj, jint orientation);
   jboolean OnTouchEvent(JNIEnv* env,
@@ -145,12 +143,7 @@
                                 jfloat x2, jfloat y2);
   void MoveCaret(JNIEnv* env, jobject obj, jfloat x, jfloat y);
 
-  void ResetGestureDetectors(JNIEnv* env, jobject obj);
-  void IgnoreRemainingTouchEvents(JNIEnv* env, jobject obj);
-  void OnWindowFocusLost(JNIEnv* env, jobject obj);
-  void SetDoubleTapSupportForPageEnabled(JNIEnv* env,
-                                         jobject obj,
-                                         jboolean enabled);
+  void ResetGestureDetection(JNIEnv* env, jobject obj);
   void SetDoubleTapSupportEnabled(JNIEnv* env, jobject obj, jboolean enabled);
   void SetMultiTouchZoomSupportEnabled(JNIEnv* env,
                                        jobject obj,
@@ -158,7 +151,6 @@
 
   void LoadIfNecessary(JNIEnv* env, jobject obj);
   void RequestRestoreLoad(JNIEnv* env, jobject obj);
-  void StopLoading(JNIEnv* env, jobject obj);
   void Reload(JNIEnv* env, jobject obj, jboolean check_for_repost);
   void ReloadIgnoringCache(JNIEnv* env, jobject obj, jboolean check_for_repost);
   void CancelPendingReload(JNIEnv* env, jobject obj);
@@ -169,7 +161,7 @@
                           jstring script,
                           jobject callback,
                           jboolean start_renderer);
-  int GetNativeImeAdapter(JNIEnv* env, jobject obj);
+  long GetNativeImeAdapter(JNIEnv* env, jobject obj);
   void SetFocus(JNIEnv* env, jobject obj, jboolean focused);
   void ScrollFocusedEditableNodeIntoView(JNIEnv* env, jobject obj);
 
@@ -220,7 +212,7 @@
   void ShowInterstitialPage(JNIEnv* env,
                             jobject obj,
                             jstring jurl,
-                            jint delegate);
+                            jlong delegate);
   jboolean IsShowingInterstitialPage(JNIEnv* env, jobject obj);
 
   void SetAccessibilityEnabled(JNIEnv* env, jobject obj, bool enabled);
@@ -271,7 +263,6 @@
   void OnBackgroundColorChanged(SkColor color);
 
   bool HasFocus();
-  void ConfirmTouchEvent(InputEventAckState ack_result);
   void OnGestureEventAck(const blink::WebGestureEvent& event,
                          InputEventAckState ack_result);
   bool FilterInputEvent(const blink::WebInputEvent& event);
@@ -303,6 +294,9 @@
 
   void DidStopFlinging();
 
+  // Returns the viewport size after accounting for the viewport offset.
+  gfx::Size GetViewSize() const;
+
   // --------------------------------------------------------------------------
   // Methods called from native code
   // --------------------------------------------------------------------------
@@ -333,9 +327,6 @@
   virtual void RenderViewReady() OVERRIDE;
   virtual void WebContentsDestroyed(WebContents* web_contents) OVERRIDE;
 
-  // ui::GestureProviderClient implementation.
-  virtual void OnGestureEvent(const ui::GestureEventData& gesture) OVERRIDE;
-
   // --------------------------------------------------------------------------
   // Other private methods and data
   // --------------------------------------------------------------------------
@@ -363,10 +354,6 @@
   // Send device_orientation_ to renderer.
   void SendOrientationChangeEventInternal();
 
-  // Utility method for synthesizing a touch cancel event and dispatching it
-  // through the touch pipeline.
-  void CancelActiveTouchSequenceIfNecessary();
-
   float dpi_scale() const { return dpi_scale_; }
 
   // A weak reference to the Java ContentViewCore object.
@@ -395,10 +382,6 @@
   // The owning window that has a hold of main application activity.
   ui::WindowAndroid* window_android_;
 
-  // Provides gesture synthesis given a stream of touch events (derived from
-  // Android MotionEvent's) and touch event acks.
-  ui::FilteredGestureProvider gesture_provider_;
-
   // The cache of device's current orientation set from Java side, this value
   // will be sent to Renderer once it is ready.
   int device_orientation_;
diff --git a/content/browser/android/content_view_render_view.h b/content/browser/android/content_view_render_view.h
index c0a2fab..9f1ca49 100644
--- a/content/browser/android/content_view_render_view.h
+++ b/content/browser/android/content_view_render_view.h
@@ -5,7 +5,7 @@
 #ifndef CONTENT_BROWSER_ANDROID_CONTENT_VIEW_RENDER_VIEW_H_
 #define CONTENT_BROWSER_ANDROID_CONTENT_VIEW_RENDER_VIEW_H_
 
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/logging.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
diff --git a/content/browser/android/date_time_chooser_android.h b/content/browser/android/date_time_chooser_android.h
index c02ecf5..b47ed5e 100644
--- a/content/browser/android/date_time_chooser_android.h
+++ b/content/browser/android/date_time_chooser_android.h
@@ -8,7 +8,7 @@
 #include <string>
 #include <vector>
 
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/memory/scoped_ptr.h"
 #include "ui/base/ime/text_input_type.h"
 
diff --git a/content/browser/android/download_controller_android_impl.h b/content/browser/android/download_controller_android_impl.h
index db9b9cf..26bc2a0 100644
--- a/content/browser/android/download_controller_android_impl.h
+++ b/content/browser/android/download_controller_android_impl.h
@@ -21,7 +21,7 @@
 
 #include <string>
 
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/android/scoped_java_ref.h"
 #include "base/callback.h"
 #include "base/memory/singleton.h"
diff --git a/content/browser/android/in_process/synchronous_compositor_impl.cc b/content/browser/android/in_process/synchronous_compositor_impl.cc
index beba92d..d4c41ca 100644
--- a/content/browser/android/in_process/synchronous_compositor_impl.cc
+++ b/content/browser/android/in_process/synchronous_compositor_impl.cc
@@ -140,7 +140,7 @@
   DCHECK(CalledOnValidThread());
   DCHECK(output_surface_);
 
-  return output_surface_->SetMemoryPolicy(policy);
+  output_surface_->SetMemoryPolicy(policy);
 }
 
 void SynchronousCompositorImpl::DidChangeRootLayerScrollOffset() {
diff --git a/content/browser/android/interstitial_page_delegate_android.h b/content/browser/android/interstitial_page_delegate_android.h
index f1ce12c..208717e 100644
--- a/content/browser/android/interstitial_page_delegate_android.h
+++ b/content/browser/android/interstitial_page_delegate_android.h
@@ -8,7 +8,7 @@
 #include <jni.h>
 #include <string>
 
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/basictypes.h"
 #include "base/compiler_specific.h"
 #include "content/common/content_export.h"
diff --git a/content/browser/android/tracing_controller_android.h b/content/browser/android/tracing_controller_android.h
index cf56259..98455eb 100644
--- a/content/browser/android/tracing_controller_android.h
+++ b/content/browser/android/tracing_controller_android.h
@@ -5,7 +5,7 @@
 #ifndef CONTENT_BROWSER_ANDROID_TRACING_CONTROLLER_ANDROID_H_
 #define CONTENT_BROWSER_ANDROID_TRACING_CONTROLLER_ANDROID_H_
 
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/files/file_path.h"
 #include "base/memory/weak_ptr.h"
 
diff --git a/content/browser/android/web_contents_observer_android.cc b/content/browser/android/web_contents_observer_android.cc
index 9ab3284..9a0d56a 100644
--- a/content/browser/android/web_contents_observer_android.cc
+++ b/content/browser/android/web_contents_observer_android.cc
@@ -133,11 +133,7 @@
   // See http://crbug.com/251330 for why it's determined this way.
   bool in_page_navigation =
       details.type == NAVIGATION_TYPE_IN_PAGE || details.is_in_page;
-  // TODO(mkosiba): delete once downstream rolls.
-  Java_WebContentsObserverAndroid_didNavigateMainFrameV_JLS_JLS_Z(
-      env, obj.obj(), jstring_url.obj(), jstring_base_url.obj(),
-      details.is_navigation_to_different_page());
-  Java_WebContentsObserverAndroid_didNavigateMainFrameV_JLS_JLS_Z_Z(
+  Java_WebContentsObserverAndroid_didNavigateMainFrame(
       env, obj.obj(), jstring_url.obj(), jstring_base_url.obj(),
       details.is_navigation_to_different_page(), in_page_navigation);
 }
diff --git a/content/browser/android/web_contents_observer_android.h b/content/browser/android/web_contents_observer_android.h
index 1651247..6ff1093 100644
--- a/content/browser/android/web_contents_observer_android.h
+++ b/content/browser/android/web_contents_observer_android.h
@@ -7,7 +7,7 @@
 
 #include <jni.h>
 
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/basictypes.h"
 #include "base/process/kill.h"
 #include "content/browser/web_contents/web_contents_impl.h"
diff --git a/content/browser/appcache/appcache_group_unittest.cc b/content/browser/appcache/appcache_group_unittest.cc
index f7ab73a..fee6c63 100644
--- a/content/browser/appcache/appcache_group_unittest.cc
+++ b/content/browser/appcache/appcache_group_unittest.cc
@@ -5,12 +5,12 @@
 #include <string>
 
 #include "base/message_loop/message_loop.h"
+#include "content/browser/appcache/mock_appcache_service.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "webkit/browser/appcache/appcache.h"
 #include "webkit/browser/appcache/appcache_group.h"
 #include "webkit/browser/appcache/appcache_host.h"
 #include "webkit/browser/appcache/appcache_update_job.h"
-#include "webkit/browser/appcache/mock_appcache_service.h"
 #include "webkit/common/appcache/appcache_interfaces.h"
 
 using appcache::AppCache;
@@ -19,7 +19,6 @@
 using appcache::AppCacheHost;
 using appcache::AppCacheService;
 using appcache::AppCacheUpdateJob;
-using appcache::MockAppCacheService;
 
 namespace {
 
diff --git a/content/browser/appcache/appcache_host_unittest.cc b/content/browser/appcache/appcache_host_unittest.cc
index 1b00944..1129913 100644
--- a/content/browser/appcache/appcache_host_unittest.cc
+++ b/content/browser/appcache/appcache_host_unittest.cc
@@ -7,13 +7,13 @@
 #include "base/memory/scoped_ptr.h"
 #include "base/message_loop/message_loop.h"
 #include "content/browser/appcache/mock_appcache_policy.h"
+#include "content/browser/appcache/mock_appcache_service.h"
 #include "net/url_request/url_request.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "webkit/browser/appcache/appcache.h"
 #include "webkit/browser/appcache/appcache_backend_impl.h"
 #include "webkit/browser/appcache/appcache_group.h"
 #include "webkit/browser/appcache/appcache_host.h"
-#include "webkit/browser/appcache/mock_appcache_service.h"
 #include "webkit/browser/quota/quota_manager.h"
 
 using appcache::AppCache;
@@ -23,7 +23,6 @@
 using appcache::AppCacheGroup;
 using appcache::AppCacheHost;
 using appcache::kNoCacheId;
-using appcache::MockAppCacheService;
 using appcache::ERROR_EVENT;
 using appcache::OBSOLETE;
 using appcache::OBSOLETE_EVENT;
diff --git a/content/browser/appcache/appcache_quota_client_unittest.cc b/content/browser/appcache/appcache_quota_client_unittest.cc
index 7c581b4..0bfed08 100644
--- a/content/browser/appcache/appcache_quota_client_unittest.cc
+++ b/content/browser/appcache/appcache_quota_client_unittest.cc
@@ -8,13 +8,12 @@
 #include "base/bind.h"
 #include "base/message_loop/message_loop_proxy.h"
 #include "base/run_loop.h"
+#include "content/browser/appcache/mock_appcache_service.h"
 #include "net/base/net_errors.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "webkit/browser/appcache/appcache_quota_client.h"
-#include "webkit/browser/appcache/mock_appcache_service.h"
 
 using appcache::AppCacheQuotaClient;
-using appcache::MockAppCacheService;
 
 namespace content {
 
diff --git a/content/browser/appcache/appcache_request_handler_unittest.cc b/content/browser/appcache/appcache_request_handler_unittest.cc
index c453b1f..17175cb 100644
--- a/content/browser/appcache/appcache_request_handler_unittest.cc
+++ b/content/browser/appcache/appcache_request_handler_unittest.cc
@@ -13,6 +13,7 @@
 #include "base/synchronization/waitable_event.h"
 #include "base/threading/thread.h"
 #include "content/browser/appcache/mock_appcache_policy.h"
+#include "content/browser/appcache/mock_appcache_service.h"
 #include "net/base/net_errors.h"
 #include "net/base/request_priority.h"
 #include "net/http/http_response_headers.h"
@@ -24,7 +25,6 @@
 #include "webkit/browser/appcache/appcache_backend_impl.h"
 #include "webkit/browser/appcache/appcache_request_handler.h"
 #include "webkit/browser/appcache/appcache_url_request_job.h"
-#include "webkit/browser/appcache/mock_appcache_service.h"
 
 using appcache::AppCache;
 using appcache::AppCacheBackendImpl;
@@ -36,8 +36,6 @@
 using appcache::AppCacheRequestHandler;
 using appcache::AppCacheURLRequestJob;
 using appcache::kNoCacheId;
-using appcache::MockAppCacheService;
-using appcache::MockAppCacheStorage;
 
 namespace content {
 
diff --git a/content/browser/appcache/appcache_response_unittest.cc b/content/browser/appcache/appcache_response_unittest.cc
index 10b07ca..935fd7c 100644
--- a/content/browser/appcache/appcache_response_unittest.cc
+++ b/content/browser/appcache/appcache_response_unittest.cc
@@ -13,19 +13,18 @@
 #include "base/pickle.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/threading/thread.h"
+#include "content/browser/appcache/mock_appcache_service.h"
 #include "net/base/io_buffer.h"
 #include "net/base/net_errors.h"
 #include "net/http/http_response_headers.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "webkit/browser/appcache/appcache_response.h"
-#include "webkit/browser/appcache/mock_appcache_service.h"
 
 using appcache::AppCacheStorage;
 using appcache::AppCacheResponseInfo;
 using appcache::AppCacheResponseReader;
 using appcache::AppCacheResponseWriter;
 using appcache::HttpResponseInfoIOBuffer;
-using appcache::MockAppCacheService;
 using net::IOBuffer;
 using net::WrappedIOBuffer;
 
diff --git a/content/browser/appcache/appcache_service_unittest.cc b/content/browser/appcache/appcache_service_unittest.cc
index ff7b9a4..f965cb3 100644
--- a/content/browser/appcache/appcache_service_unittest.cc
+++ b/content/browser/appcache/appcache_service_unittest.cc
@@ -8,13 +8,13 @@
 #include "base/bind_helpers.h"
 #include "base/pickle.h"
 #include "base/run_loop.h"
+#include "content/browser/appcache/mock_appcache_storage.h"
 #include "net/base/completion_callback.h"
 #include "net/base/io_buffer.h"
 #include "net/http/http_response_headers.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "webkit/browser/appcache/appcache_response.h"
 #include "webkit/browser/appcache/appcache_service.h"
-#include "webkit/browser/appcache/mock_appcache_storage.h"
 
 using appcache::AppCache;
 using appcache::AppCacheEntry;
@@ -25,7 +25,6 @@
 using appcache::AppCacheResponseReader;
 using appcache::AppCacheService;
 using appcache::HttpResponseInfoIOBuffer;
-using appcache::MockAppCacheStorage;
 
 namespace content {
 namespace {
diff --git a/content/browser/appcache/appcache_storage_unittest.cc b/content/browser/appcache/appcache_storage_unittest.cc
index f1b7d14..fa69696 100644
--- a/content/browser/appcache/appcache_storage_unittest.cc
+++ b/content/browser/appcache/appcache_storage_unittest.cc
@@ -3,20 +3,19 @@
 // found in the LICENSE file.
 
 #include "base/message_loop/message_loop.h"
+#include "content/browser/appcache/mock_appcache_service.h"
 #include "content/browser/quota/mock_quota_manager_proxy.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "webkit/browser/appcache/appcache.h"
 #include "webkit/browser/appcache/appcache_group.h"
 #include "webkit/browser/appcache/appcache_response.h"
 #include "webkit/browser/appcache/appcache_storage.h"
-#include "webkit/browser/appcache/mock_appcache_service.h"
 
 using appcache::AppCache;
 using appcache::AppCacheGroup;
 using appcache::AppCacheResponseInfo;
 using appcache::AppCacheStorage;
 using appcache::kUnkownResponseDataSize;
-using appcache::MockAppCacheService;
 
 namespace content {
 
diff --git a/content/browser/appcache/appcache_unittest.cc b/content/browser/appcache/appcache_unittest.cc
index 1c3dcb7..d1e4b6e 100644
--- a/content/browser/appcache/appcache_unittest.cc
+++ b/content/browser/appcache/appcache_unittest.cc
@@ -2,10 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "content/browser/appcache/mock_appcache_service.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "webkit/browser/appcache/appcache.h"
 #include "webkit/browser/appcache/appcache_host.h"
-#include "webkit/browser/appcache/mock_appcache_service.h"
 
 using appcache::AppCache;
 using appcache::AppCacheDatabase;
@@ -20,7 +20,6 @@
 using appcache::INTERCEPT_NAMESPACE;
 using appcache::LogLevel;
 using appcache::Manifest;
-using appcache::MockAppCacheService;
 using appcache::Namespace;
 using appcache::NamespaceVector;
 using appcache::NETWORK_NAMESPACE;
diff --git a/content/browser/appcache/appcache_update_job_unittest.cc b/content/browser/appcache/appcache_update_job_unittest.cc
index b19625d..25ab0d4 100644
--- a/content/browser/appcache/appcache_update_job_unittest.cc
+++ b/content/browser/appcache/appcache_update_job_unittest.cc
@@ -7,6 +7,7 @@
 #include "base/stl_util.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/threading/thread.h"
+#include "content/browser/appcache/mock_appcache_service.h"
 #include "net/base/net_errors.h"
 #include "net/http/http_response_headers.h"
 #include "net/url_request/url_request_error_job.h"
@@ -18,7 +19,6 @@
 #include "webkit/browser/appcache/appcache_host.h"
 #include "webkit/browser/appcache/appcache_response.h"
 #include "webkit/browser/appcache/appcache_update_job.h"
-#include "webkit/browser/appcache/mock_appcache_service.h"
 
 using appcache::AppCache;
 using appcache::AppCacheEntry;
@@ -37,8 +37,6 @@
 using appcache::HttpResponseInfoIOBuffer;
 using appcache::kNoCacheId;
 using appcache::kNoResponseId;
-using appcache::MockAppCacheService;
-using appcache::MockAppCacheStorage;
 using appcache::Namespace;
 using appcache::NETWORK_NAMESPACE;
 using appcache::NO_UPDATE_EVENT;
diff --git a/content/browser/appcache/appcache_url_request_job_unittest.cc b/content/browser/appcache/appcache_url_request_job_unittest.cc
index 2a389cc..5636aac 100644
--- a/content/browser/appcache/appcache_url_request_job_unittest.cc
+++ b/content/browser/appcache/appcache_url_request_job_unittest.cc
@@ -12,6 +12,7 @@
 #include "base/pickle.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/threading/thread.h"
+#include "content/browser/appcache/mock_appcache_service.h"
 #include "net/base/io_buffer.h"
 #include "net/base/net_errors.h"
 #include "net/base/request_priority.h"
@@ -22,7 +23,6 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "webkit/browser/appcache/appcache_response.h"
 #include "webkit/browser/appcache/appcache_url_request_job.h"
-#include "webkit/browser/appcache/mock_appcache_service.h"
 
 using appcache::AppCacheEntry;
 using appcache::AppCacheStorage;
@@ -32,7 +32,6 @@
 using appcache::AppCacheURLRequestJob;
 using appcache::HttpResponseInfoIOBuffer;
 using appcache::kNoCacheId;
-using appcache::MockAppCacheService;
 using net::IOBuffer;
 using net::WrappedIOBuffer;
 
diff --git a/content/browser/appcache/mock_appcache_service.cc b/content/browser/appcache/mock_appcache_service.cc
new file mode 100644
index 0000000..549d20b
--- /dev/null
+++ b/content/browser/appcache/mock_appcache_service.cc
@@ -0,0 +1,27 @@
+// 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.
+
+#include "content/browser/appcache/mock_appcache_service.h"
+
+#include "base/bind.h"
+#include "base/message_loop/message_loop.h"
+
+namespace content {
+
+static void DeferredCallCallback(
+    const net::CompletionCallback& callback, int rv) {
+  callback.Run(rv);
+}
+
+void MockAppCacheService::DeleteAppCachesForOrigin(
+    const GURL& origin, const net::CompletionCallback& callback) {
+  ++delete_called_count_;
+  base::MessageLoop::current()->PostTask(
+      FROM_HERE,
+      base::Bind(&DeferredCallCallback,
+                 callback,
+                 mock_delete_appcaches_for_origin_result_));
+}
+
+}  // namespace content
diff --git a/content/browser/appcache/mock_appcache_service.h b/content/browser/appcache/mock_appcache_service.h
new file mode 100644
index 0000000..9b10598
--- /dev/null
+++ b/content/browser/appcache/mock_appcache_service.h
@@ -0,0 +1,50 @@
+// 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.
+
+#ifndef CONTENT_BROWSER_APPCACHE_MOCK_APPCACHE_SERVICE_H_
+#define CONTENT_BROWSER_APPCACHE_MOCK_APPCACHE_SERVICE_H_
+
+#include "base/compiler_specific.h"
+#include "content/browser/appcache/mock_appcache_storage.h"
+#include "webkit/browser/appcache/appcache_service.h"
+#include "webkit/browser/quota/quota_manager.h"
+
+using appcache::AppCacheService;
+
+namespace content {
+
+// For use by unit tests.
+class MockAppCacheService : public AppCacheService {
+ public:
+  MockAppCacheService()
+    : AppCacheService(NULL),
+      mock_delete_appcaches_for_origin_result_(net::OK),
+      delete_called_count_(0) {
+    storage_.reset(new MockAppCacheStorage(this));
+  }
+
+  // Just returns a canned completion code without actually
+  // removing groups and caches in our mock storage instance.
+  virtual void DeleteAppCachesForOrigin(
+      const GURL& origin,
+      const net::CompletionCallback& callback) OVERRIDE;
+
+  void set_quota_manager_proxy(quota::QuotaManagerProxy* proxy) {
+    quota_manager_proxy_ = proxy;
+  }
+
+  void set_mock_delete_appcaches_for_origin_result(int rv) {
+    mock_delete_appcaches_for_origin_result_ = rv;
+  }
+
+  int delete_called_count() const { return delete_called_count_; }
+
+ private:
+  int mock_delete_appcaches_for_origin_result_;
+  int delete_called_count_;
+};
+
+}  // namespace content
+
+#endif  // CONTENT_BROWSER_APPCACHE_MOCK_APPCACHE_SERVICE_H_
diff --git a/content/browser/appcache/mock_appcache_storage.cc b/content/browser/appcache/mock_appcache_storage.cc
new file mode 100644
index 0000000..ab233b0
--- /dev/null
+++ b/content/browser/appcache/mock_appcache_storage.cc
@@ -0,0 +1,550 @@
+// 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.
+
+#include "content/browser/appcache/mock_appcache_storage.h"
+
+#include "base/bind.h"
+#include "base/logging.h"
+#include "base/memory/ref_counted.h"
+#include "base/message_loop/message_loop.h"
+#include "base/stl_util.h"
+#include "webkit/browser/appcache/appcache.h"
+#include "webkit/browser/appcache/appcache_entry.h"
+#include "webkit/browser/appcache/appcache_group.h"
+#include "webkit/browser/appcache/appcache_response.h"
+#include "webkit/browser/appcache/appcache_service.h"
+
+// This is a quick and easy 'mock' implementation of the storage interface
+// that doesn't put anything to disk.
+//
+// We simply add an extra reference to objects when they're put in storage,
+// and remove the extra reference when they are removed from storage.
+// Responses are never really removed from the in-memory disk cache.
+// Delegate callbacks are made asyncly to appropiately mimic what will
+// happen with a real disk-backed storage impl that involves IO on a
+// background thread.
+
+using appcache::AppCacheResponseWriter;
+using appcache::AppCacheService;
+using appcache::FALLBACK_NAMESPACE;
+using appcache::INTERCEPT_NAMESPACE;
+using appcache::kNoCacheId;
+using appcache::NamespaceType;
+
+namespace content {
+
+MockAppCacheStorage::MockAppCacheStorage(AppCacheService* service)
+    : AppCacheStorage(service),
+      simulate_make_group_obsolete_failure_(false),
+      simulate_store_group_and_newest_cache_failure_(false),
+      simulate_find_main_resource_(false),
+      simulate_find_sub_resource_(false),
+      simulated_found_cache_id_(kNoCacheId),
+      simulated_found_group_id_(0),
+      simulated_found_network_namespace_(false),
+      weak_factory_(this) {
+  last_cache_id_ = 0;
+  last_group_id_ = 0;
+  last_response_id_ = 0;
+}
+
+MockAppCacheStorage::~MockAppCacheStorage() {
+}
+
+void MockAppCacheStorage::GetAllInfo(Delegate* delegate) {
+  ScheduleTask(
+      base::Bind(&MockAppCacheStorage::ProcessGetAllInfo,
+                 weak_factory_.GetWeakPtr(),
+                 make_scoped_refptr(GetOrCreateDelegateReference(delegate))));
+}
+
+void MockAppCacheStorage::LoadCache(int64 id, Delegate* delegate) {
+  DCHECK(delegate);
+  AppCache* cache = working_set_.GetCache(id);
+  if (ShouldCacheLoadAppearAsync(cache)) {
+    ScheduleTask(
+        base::Bind(&MockAppCacheStorage::ProcessLoadCache,
+                   weak_factory_.GetWeakPtr(), id,
+                   make_scoped_refptr(GetOrCreateDelegateReference(delegate))));
+    return;
+  }
+  ProcessLoadCache(id, GetOrCreateDelegateReference(delegate));
+}
+
+void MockAppCacheStorage::LoadOrCreateGroup(
+    const GURL& manifest_url, Delegate* delegate) {
+  DCHECK(delegate);
+  AppCacheGroup* group = working_set_.GetGroup(manifest_url);
+  if (ShouldGroupLoadAppearAsync(group)) {
+    ScheduleTask(
+        base::Bind(&MockAppCacheStorage::ProcessLoadOrCreateGroup,
+                   weak_factory_.GetWeakPtr(), manifest_url,
+                   make_scoped_refptr(GetOrCreateDelegateReference(delegate))));
+    return;
+  }
+  ProcessLoadOrCreateGroup(
+      manifest_url, GetOrCreateDelegateReference(delegate));
+}
+
+void MockAppCacheStorage::StoreGroupAndNewestCache(
+    AppCacheGroup* group, AppCache* newest_cache, Delegate* delegate) {
+  DCHECK(group && delegate && newest_cache);
+
+  // Always make this operation look async.
+  ScheduleTask(
+      base::Bind(&MockAppCacheStorage::ProcessStoreGroupAndNewestCache,
+                 weak_factory_.GetWeakPtr(), make_scoped_refptr(group),
+                 make_scoped_refptr(newest_cache),
+                 make_scoped_refptr(GetOrCreateDelegateReference(delegate))));
+}
+
+void MockAppCacheStorage::FindResponseForMainRequest(
+    const GURL& url, const GURL& preferred_manifest_url, Delegate* delegate) {
+  DCHECK(delegate);
+
+  // Note: MockAppCacheStorage does not respect the preferred_manifest_url.
+
+  // Always make this operation look async.
+  ScheduleTask(
+      base::Bind(&MockAppCacheStorage::ProcessFindResponseForMainRequest,
+                 weak_factory_.GetWeakPtr(), url,
+                 make_scoped_refptr(GetOrCreateDelegateReference(delegate))));
+}
+
+void MockAppCacheStorage::FindResponseForSubRequest(
+    AppCache* cache, const GURL& url,
+    AppCacheEntry* found_entry, AppCacheEntry* found_fallback_entry,
+    bool* found_network_namespace) {
+  DCHECK(cache && cache->is_complete());
+
+  // This layer of indirection is here to facilitate testing.
+  if (simulate_find_sub_resource_) {
+    *found_entry = simulated_found_entry_;
+    *found_fallback_entry = simulated_found_fallback_entry_;
+    *found_network_namespace = simulated_found_network_namespace_;
+    simulate_find_sub_resource_ = false;
+    return;
+  }
+
+  GURL fallback_namespace_not_used;
+  GURL intercept_namespace_not_used;
+  cache->FindResponseForRequest(
+      url, found_entry, &intercept_namespace_not_used,
+      found_fallback_entry,  &fallback_namespace_not_used,
+      found_network_namespace);
+}
+
+void MockAppCacheStorage::MarkEntryAsForeign(
+    const GURL& entry_url, int64 cache_id) {
+  AppCache* cache = working_set_.GetCache(cache_id);
+  if (cache) {
+    AppCacheEntry* entry = cache->GetEntry(entry_url);
+    DCHECK(entry);
+    if (entry)
+      entry->add_types(AppCacheEntry::FOREIGN);
+  }
+}
+
+void MockAppCacheStorage::MakeGroupObsolete(AppCacheGroup* group,
+                                            Delegate* delegate,
+                                            int response_code) {
+  DCHECK(group && delegate);
+
+  // Always make this method look async.
+  ScheduleTask(
+      base::Bind(&MockAppCacheStorage::ProcessMakeGroupObsolete,
+                 weak_factory_.GetWeakPtr(),
+                 make_scoped_refptr(group),
+                 make_scoped_refptr(GetOrCreateDelegateReference(delegate)),
+                 response_code));
+}
+
+AppCacheResponseReader* MockAppCacheStorage::CreateResponseReader(
+    const GURL& manifest_url, int64 group_id, int64 response_id) {
+  if (simulated_reader_)
+    return simulated_reader_.release();
+  return new AppCacheResponseReader(response_id, group_id, disk_cache());
+}
+
+AppCacheResponseWriter* MockAppCacheStorage::CreateResponseWriter(
+    const GURL& manifest_url, int64 group_id) {
+  return new AppCacheResponseWriter(NewResponseId(),  group_id, disk_cache());
+}
+
+void MockAppCacheStorage::DoomResponses(
+    const GURL& manifest_url, const std::vector<int64>& response_ids) {
+  DeleteResponses(manifest_url, response_ids);
+}
+
+void MockAppCacheStorage::DeleteResponses(
+    const GURL& manifest_url, const std::vector<int64>& response_ids) {
+  // We don't bother with actually removing responses from the disk-cache,
+  // just keep track of which ids have been doomed or deleted
+  std::vector<int64>::const_iterator it = response_ids.begin();
+  while (it != response_ids.end()) {
+    doomed_response_ids_.insert(*it);
+    ++it;
+  }
+}
+
+void MockAppCacheStorage::ProcessGetAllInfo(
+    scoped_refptr<DelegateReference> delegate_ref) {
+  if (delegate_ref->delegate)
+    delegate_ref->delegate->OnAllInfo(simulated_appcache_info_.get());
+}
+
+void MockAppCacheStorage::ProcessLoadCache(
+    int64 id, scoped_refptr<DelegateReference> delegate_ref) {
+  AppCache* cache = working_set_.GetCache(id);
+  if (delegate_ref->delegate)
+    delegate_ref->delegate->OnCacheLoaded(cache, id);
+}
+
+void MockAppCacheStorage::ProcessLoadOrCreateGroup(
+    const GURL& manifest_url, scoped_refptr<DelegateReference> delegate_ref) {
+  scoped_refptr<AppCacheGroup> group(working_set_.GetGroup(manifest_url));
+
+  // Newly created groups are not put in the stored_groups collection
+  // until StoreGroupAndNewestCache is called.
+  if (!group.get())
+    group = new AppCacheGroup(service_->storage(), manifest_url, NewGroupId());
+
+  if (delegate_ref->delegate)
+    delegate_ref->delegate->OnGroupLoaded(group.get(), manifest_url);
+}
+
+void MockAppCacheStorage::ProcessStoreGroupAndNewestCache(
+    scoped_refptr<AppCacheGroup> group,
+    scoped_refptr<AppCache> newest_cache,
+    scoped_refptr<DelegateReference> delegate_ref) {
+  Delegate* delegate = delegate_ref->delegate;
+  if (simulate_store_group_and_newest_cache_failure_) {
+    if (delegate)
+      delegate->OnGroupAndNewestCacheStored(
+          group.get(), newest_cache.get(), false, false);
+    return;
+  }
+
+  AddStoredGroup(group.get());
+  if (newest_cache.get() != group->newest_complete_cache()) {
+    newest_cache->set_complete(true);
+    group->AddCache(newest_cache.get());
+    AddStoredCache(newest_cache.get());
+
+    // Copy the collection prior to removal, on final release
+    // of a cache the group's collection will change.
+    AppCacheGroup::Caches copy = group->old_caches();
+    RemoveStoredCaches(copy);
+  }
+
+  if (delegate)
+    delegate->OnGroupAndNewestCacheStored(
+        group.get(), newest_cache.get(), true, false);
+}
+
+namespace {
+
+struct FoundCandidate {
+  GURL namespace_entry_url;
+  AppCacheEntry entry;
+  int64 cache_id;
+  int64 group_id;
+  GURL manifest_url;
+  bool is_cache_in_use;
+
+  FoundCandidate()
+      : cache_id(kNoCacheId), group_id(0), is_cache_in_use(false) {}
+};
+
+void MaybeTakeNewNamespaceEntry(
+    NamespaceType namespace_type,
+    const AppCacheEntry &entry,
+    const GURL& namespace_url,
+    bool cache_is_in_use,
+    FoundCandidate* best_candidate,
+    GURL* best_candidate_namespace,
+    AppCache* cache,
+    AppCacheGroup* group) {
+  DCHECK(entry.has_response_id());
+
+  bool take_new_entry = true;
+
+  // Does the new candidate entry trump our current best candidate?
+  if (best_candidate->entry.has_response_id()) {
+    // Longer namespace prefix matches win.
+    size_t candidate_length =
+        namespace_url.spec().length();
+    size_t best_length =
+        best_candidate_namespace->spec().length();
+
+    if (candidate_length > best_length) {
+      take_new_entry = true;
+    } else if (candidate_length == best_length &&
+               cache_is_in_use && !best_candidate->is_cache_in_use) {
+      take_new_entry = true;
+    } else {
+      take_new_entry = false;
+    }
+  }
+
+  if (take_new_entry) {
+    if (namespace_type == FALLBACK_NAMESPACE) {
+      best_candidate->namespace_entry_url =
+          cache->GetFallbackEntryUrl(namespace_url);
+    } else {
+      best_candidate->namespace_entry_url =
+          cache->GetInterceptEntryUrl(namespace_url);
+    }
+    best_candidate->entry = entry;
+    best_candidate->cache_id = cache->cache_id();
+    best_candidate->group_id = group->group_id();
+    best_candidate->manifest_url = group->manifest_url();
+    best_candidate->is_cache_in_use = cache_is_in_use;
+    *best_candidate_namespace = namespace_url;
+  }
+}
+}  // namespace
+
+void MockAppCacheStorage::ProcessFindResponseForMainRequest(
+    const GURL& url, scoped_refptr<DelegateReference> delegate_ref) {
+  if (simulate_find_main_resource_) {
+    simulate_find_main_resource_ = false;
+    if (delegate_ref->delegate) {
+      delegate_ref->delegate->OnMainResponseFound(
+          url, simulated_found_entry_,
+          simulated_found_fallback_url_, simulated_found_fallback_entry_,
+          simulated_found_cache_id_, simulated_found_group_id_,
+          simulated_found_manifest_url_);
+    }
+    return;
+  }
+
+  // This call has no persistent side effects, if the delegate has gone
+  // away, we can just bail out early.
+  if (!delegate_ref->delegate)
+    return;
+
+  // TODO(michaeln): The heuristics around choosing amoungst
+  // multiple candidates is under specified, and just plain
+  // not fully understood. Refine these over time. In particular,
+  // * prefer candidates from newer caches
+  // * take into account the cache associated with the document
+  //   that initiated the navigation
+  // * take into account the cache associated with the document
+  //   currently residing in the frame being navigated
+  FoundCandidate found_candidate;
+  GURL found_intercept_candidate_namespace;
+  FoundCandidate found_fallback_candidate;
+  GURL found_fallback_candidate_namespace;
+
+  for (StoredGroupMap::const_iterator it = stored_groups_.begin();
+       it != stored_groups_.end(); ++it) {
+    AppCacheGroup* group = it->second.get();
+    AppCache* cache = group->newest_complete_cache();
+    if (group->is_obsolete() || !cache ||
+        (url.GetOrigin() != group->manifest_url().GetOrigin())) {
+      continue;
+    }
+
+    AppCacheEntry found_entry;
+    AppCacheEntry found_fallback_entry;
+    GURL found_intercept_namespace;
+    GURL found_fallback_namespace;
+    bool ignore_found_network_namespace = false;
+    bool found = cache->FindResponseForRequest(
+                            url, &found_entry, &found_intercept_namespace,
+                            &found_fallback_entry, &found_fallback_namespace,
+                            &ignore_found_network_namespace);
+
+    // 6.11.1 Navigating across documents, Step 10.
+    // Network namespacing doesn't apply to main resource loads,
+    // and foreign entries are excluded.
+    if (!found || ignore_found_network_namespace ||
+        (found_entry.has_response_id() && found_entry.IsForeign()) ||
+        (found_fallback_entry.has_response_id() &&
+         found_fallback_entry.IsForeign())) {
+      continue;
+    }
+
+    // We have a bias for hits from caches that are in use.
+    bool is_in_use = IsCacheStored(cache) && !cache->HasOneRef();
+
+    if (found_entry.has_response_id() &&
+        found_intercept_namespace.is_empty()) {
+      found_candidate.namespace_entry_url = GURL();
+      found_candidate.entry = found_entry;
+      found_candidate.cache_id = cache->cache_id();
+      found_candidate.group_id = group->group_id();
+      found_candidate.manifest_url = group->manifest_url();
+      found_candidate.is_cache_in_use = is_in_use;
+      if (is_in_use)
+        break;  // We break out of the loop with this direct hit.
+    } else if (found_entry.has_response_id() &&
+               !found_intercept_namespace.is_empty()) {
+      MaybeTakeNewNamespaceEntry(
+          INTERCEPT_NAMESPACE,
+          found_entry, found_intercept_namespace, is_in_use,
+          &found_candidate, &found_intercept_candidate_namespace,
+          cache, group);
+    } else {
+      DCHECK(found_fallback_entry.has_response_id());
+      MaybeTakeNewNamespaceEntry(
+          FALLBACK_NAMESPACE,
+          found_fallback_entry, found_fallback_namespace, is_in_use,
+          &found_fallback_candidate, &found_fallback_candidate_namespace,
+          cache, group);
+    }
+  }
+
+  // Found a direct hit or an intercept namespace hit.
+  if (found_candidate.entry.has_response_id()) {
+    delegate_ref->delegate->OnMainResponseFound(
+        url, found_candidate.entry, found_candidate.namespace_entry_url,
+        AppCacheEntry(),  found_candidate.cache_id, found_candidate.group_id,
+        found_candidate.manifest_url);
+    return;
+  }
+
+  // Found a fallback namespace.
+  if (found_fallback_candidate.entry.has_response_id()) {
+    delegate_ref->delegate->OnMainResponseFound(
+        url, AppCacheEntry(),
+        found_fallback_candidate.namespace_entry_url,
+        found_fallback_candidate.entry,
+        found_fallback_candidate.cache_id,
+        found_fallback_candidate.group_id,
+        found_fallback_candidate.manifest_url);
+    return;
+  }
+
+  // Didn't find anything.
+  delegate_ref->delegate->OnMainResponseFound(
+      url, AppCacheEntry(), GURL(), AppCacheEntry(), kNoCacheId, 0, GURL());
+}
+
+void MockAppCacheStorage::ProcessMakeGroupObsolete(
+    scoped_refptr<AppCacheGroup> group,
+    scoped_refptr<DelegateReference> delegate_ref,
+    int response_code) {
+  if (simulate_make_group_obsolete_failure_) {
+    if (delegate_ref->delegate)
+      delegate_ref->delegate->OnGroupMadeObsolete(
+          group.get(), false, response_code);
+    return;
+  }
+
+  RemoveStoredGroup(group.get());
+  if (group->newest_complete_cache())
+    RemoveStoredCache(group->newest_complete_cache());
+
+  // Copy the collection prior to removal, on final release
+  // of a cache the group's collection will change.
+  AppCacheGroup::Caches copy = group->old_caches();
+  RemoveStoredCaches(copy);
+
+  group->set_obsolete(true);
+
+  // Also remove from the working set, caches for an 'obsolete' group
+  // may linger in use, but the group itself cannot be looked up by
+  // 'manifest_url' in the working set any longer.
+  working_set()->RemoveGroup(group.get());
+
+  if (delegate_ref->delegate)
+    delegate_ref->delegate->OnGroupMadeObsolete(
+        group.get(), true, response_code);
+}
+
+void MockAppCacheStorage::ScheduleTask(const base::Closure& task) {
+  pending_tasks_.push_back(task);
+  base::MessageLoop::current()->PostTask(
+      FROM_HERE,
+      base::Bind(&MockAppCacheStorage::RunOnePendingTask,
+                 weak_factory_.GetWeakPtr()));
+}
+
+void MockAppCacheStorage::RunOnePendingTask() {
+  DCHECK(!pending_tasks_.empty());
+  base::Closure task = pending_tasks_.front();
+  pending_tasks_.pop_front();
+  task.Run();
+}
+
+void MockAppCacheStorage::AddStoredCache(AppCache* cache) {
+  int64 cache_id = cache->cache_id();
+  if (stored_caches_.find(cache_id) == stored_caches_.end()) {
+    stored_caches_.insert(
+        StoredCacheMap::value_type(cache_id, make_scoped_refptr(cache)));
+  }
+}
+
+void MockAppCacheStorage::RemoveStoredCache(AppCache* cache) {
+  // Do not remove from the working set, active caches are still usable
+  // and may be looked up by id until they fall out of use.
+  stored_caches_.erase(cache->cache_id());
+}
+
+void MockAppCacheStorage::RemoveStoredCaches(
+    const AppCacheGroup::Caches& caches) {
+  AppCacheGroup::Caches::const_iterator it = caches.begin();
+  while (it != caches.end()) {
+    RemoveStoredCache(*it);
+    ++it;
+  }
+}
+
+void MockAppCacheStorage::AddStoredGroup(AppCacheGroup* group) {
+  const GURL& url = group->manifest_url();
+  if (stored_groups_.find(url) == stored_groups_.end()) {
+    stored_groups_.insert(
+        StoredGroupMap::value_type(url, make_scoped_refptr(group)));
+  }
+}
+
+void MockAppCacheStorage::RemoveStoredGroup(AppCacheGroup* group) {
+  stored_groups_.erase(group->manifest_url());
+}
+
+bool MockAppCacheStorage::ShouldGroupLoadAppearAsync(
+    const AppCacheGroup* group) {
+  // We'll have to query the database to see if a group for the
+  // manifest_url exists on disk. So return true for async.
+  if (!group)
+    return true;
+
+  // Groups without a newest cache can't have been put to disk yet, so
+  // we can synchronously return a reference we have in the working set.
+  if (!group->newest_complete_cache())
+    return false;
+
+  // The LoadGroup interface implies also loading the newest cache, so
+  // if loading the newest cache should appear async, so too must the
+  // loading of this group.
+  if (!ShouldCacheLoadAppearAsync(group->newest_complete_cache()))
+    return false;
+
+
+  // If any of the old caches are "in use", then the group must also
+  // be memory resident and not require async loading.
+  const AppCacheGroup::Caches& old_caches = group->old_caches();
+  AppCacheGroup::Caches::const_iterator it = old_caches.begin();
+  while (it != old_caches.end()) {
+    // "in use" caches don't require async loading
+    if (!ShouldCacheLoadAppearAsync(*it))
+      return false;
+    ++it;
+  }
+
+  return true;
+}
+
+bool MockAppCacheStorage::ShouldCacheLoadAppearAsync(const AppCache* cache) {
+  if (!cache)
+    return true;
+
+  // If the 'stored' ref is the only ref, real storage will have to load from
+  // the database.
+  return IsCacheStored(cache) && cache->HasOneRef();
+}
+
+}  // namespace content
diff --git a/content/browser/appcache/mock_appcache_storage.h b/content/browser/appcache/mock_appcache_storage.h
new file mode 100644
index 0000000..6875b5d
--- /dev/null
+++ b/content/browser/appcache/mock_appcache_storage.h
@@ -0,0 +1,254 @@
+// 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.
+
+#ifndef CONTENT_BROWSER_APPCACHE_MOCK_APPCACHE_STORAGE_H_
+#define CONTENT_BROWSER_APPCACHE_MOCK_APPCACHE_STORAGE_H_
+
+#include <deque>
+#include <map>
+#include <vector>
+
+#include "base/callback.h"
+#include "base/containers/hash_tables.h"
+#include "base/gtest_prod_util.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/memory/weak_ptr.h"
+#include "webkit/browser/appcache/appcache.h"
+#include "webkit/browser/appcache/appcache_disk_cache.h"
+#include "webkit/browser/appcache/appcache_group.h"
+#include "webkit/browser/appcache/appcache_response.h"
+#include "webkit/browser/appcache/appcache_storage.h"
+
+using appcache::AppCache;
+using appcache::AppCacheDiskCache;
+using appcache::AppCacheEntry;
+using appcache::AppCacheGroup;
+using appcache::AppCacheInfoCollection;
+using appcache::AppCacheResponseReader;
+using appcache::AppCacheResponseWriter;
+using appcache::AppCacheService;
+using appcache::AppCacheStorage;
+using appcache::kNoCacheId;
+
+namespace content {
+FORWARD_DECLARE_TEST(AppCacheServiceTest, DeleteAppCachesForOrigin);
+FORWARD_DECLARE_TEST(MockAppCacheStorageTest, BasicFindMainResponse);
+FORWARD_DECLARE_TEST(MockAppCacheStorageTest,
+                     BasicFindMainFallbackResponse);
+FORWARD_DECLARE_TEST(MockAppCacheStorageTest, CreateGroup);
+FORWARD_DECLARE_TEST(MockAppCacheStorageTest, FindMainResponseExclusions);
+FORWARD_DECLARE_TEST(MockAppCacheStorageTest,
+                     FindMainResponseWithMultipleCandidates);
+FORWARD_DECLARE_TEST(MockAppCacheStorageTest, LoadCache_FarHit);
+FORWARD_DECLARE_TEST(MockAppCacheStorageTest, LoadGroupAndCache_FarHit);
+FORWARD_DECLARE_TEST(MockAppCacheStorageTest, MakeGroupObsolete);
+FORWARD_DECLARE_TEST(MockAppCacheStorageTest, StoreNewGroup);
+FORWARD_DECLARE_TEST(MockAppCacheStorageTest, StoreExistingGroup);
+FORWARD_DECLARE_TEST(MockAppCacheStorageTest,
+                     StoreExistingGroupExistingCache);
+class AppCacheRequestHandlerTest;
+class AppCacheServiceTest;
+class MockAppCacheStorageTest;
+
+// For use in unit tests.
+// Note: This class is also being used to bootstrap our development efforts.
+// We can get layout tests up and running, and back fill with real storage
+// somewhat in parallel.
+class MockAppCacheStorage : public AppCacheStorage {
+ public:
+  explicit MockAppCacheStorage(AppCacheService* service);
+  virtual ~MockAppCacheStorage();
+
+  virtual void GetAllInfo(Delegate* delegate) OVERRIDE;
+  virtual void LoadCache(int64 id, Delegate* delegate) OVERRIDE;
+  virtual void LoadOrCreateGroup(const GURL& manifest_url,
+                                 Delegate* delegate) OVERRIDE;
+  virtual void StoreGroupAndNewestCache(AppCacheGroup* group,
+                                        AppCache* newest_cache,
+                                        Delegate* delegate) OVERRIDE;
+  virtual void FindResponseForMainRequest(const GURL& url,
+                                          const GURL& preferred_manifest_url,
+                                          Delegate* delegate) OVERRIDE;
+  virtual void FindResponseForSubRequest(
+      AppCache* cache, const GURL& url,
+      AppCacheEntry* found_entry, AppCacheEntry* found_fallback_entry,
+      bool * found_network_namespace) OVERRIDE;
+  virtual void MarkEntryAsForeign(const GURL& entry_url,
+                                  int64 cache_id) OVERRIDE;
+  virtual void MakeGroupObsolete(AppCacheGroup* group,
+                                 Delegate* delegate,
+                                 int response_code) OVERRIDE;
+  virtual AppCacheResponseReader* CreateResponseReader(
+      const GURL& manifest_url, int64 group_id, int64 response_id) OVERRIDE;
+  virtual AppCacheResponseWriter* CreateResponseWriter(
+      const GURL& manifest_url, int64 group_id) OVERRIDE;
+  virtual void DoomResponses(
+      const GURL& manifest_url,
+      const std::vector<int64>& response_ids) OVERRIDE;
+  virtual void DeleteResponses(
+      const GURL& manifest_url,
+      const std::vector<int64>& response_ids) OVERRIDE;
+
+ private:
+  friend class AppCacheRequestHandlerTest;
+  friend class AppCacheServiceTest;
+  friend class AppCacheUpdateJobTest;
+  friend class MockAppCacheStorageTest;
+
+  typedef base::hash_map<int64, scoped_refptr<AppCache> > StoredCacheMap;
+  typedef std::map<GURL, scoped_refptr<AppCacheGroup> > StoredGroupMap;
+  typedef std::set<int64> DoomedResponseIds;
+
+  void ProcessGetAllInfo(scoped_refptr<DelegateReference> delegate_ref);
+  void ProcessLoadCache(
+      int64 id, scoped_refptr<DelegateReference> delegate_ref);
+  void ProcessLoadOrCreateGroup(
+      const GURL& manifest_url, scoped_refptr<DelegateReference> delegate_ref);
+  void ProcessStoreGroupAndNewestCache(
+      scoped_refptr<AppCacheGroup> group, scoped_refptr<AppCache> newest_cache,
+      scoped_refptr<DelegateReference> delegate_ref);
+  void ProcessMakeGroupObsolete(scoped_refptr<AppCacheGroup> group,
+                                scoped_refptr<DelegateReference> delegate_ref,
+                                int response_code);
+  void ProcessFindResponseForMainRequest(
+      const GURL& url, scoped_refptr<DelegateReference> delegate_ref);
+
+  void ScheduleTask(const base::Closure& task);
+  void RunOnePendingTask();
+
+  void AddStoredCache(AppCache* cache);
+  void RemoveStoredCache(AppCache* cache);
+  void RemoveStoredCaches(const AppCacheGroup::Caches& caches);
+  bool IsCacheStored(const AppCache* cache) {
+    return stored_caches_.find(cache->cache_id()) != stored_caches_.end();
+  }
+
+  void AddStoredGroup(AppCacheGroup* group);
+  void RemoveStoredGroup(AppCacheGroup* group);
+  bool IsGroupStored(const AppCacheGroup* group) {
+    return IsGroupForManifestStored(group->manifest_url());
+  }
+  bool IsGroupForManifestStored(const GURL& manifest_url) {
+    return stored_groups_.find(manifest_url) != stored_groups_.end();
+  }
+
+  // These helpers determine when certain operations should complete
+  // asynchronously vs synchronously to faithfully mimic, or mock,
+  // the behavior of the real implemenation of the AppCacheStorage
+  // interface.
+  bool ShouldGroupLoadAppearAsync(const AppCacheGroup* group);
+  bool ShouldCacheLoadAppearAsync(const AppCache* cache);
+
+  // Lazily constructed in-memory disk cache.
+  AppCacheDiskCache* disk_cache() {
+    if (!disk_cache_) {
+      const int kMaxCacheSize = 10 * 1024 * 1024;
+      disk_cache_.reset(new AppCacheDiskCache);
+      disk_cache_->InitWithMemBackend(kMaxCacheSize, net::CompletionCallback());
+    }
+    return disk_cache_.get();
+  }
+
+  // Simulate failures for testing. Once set all subsequent calls
+  // to MakeGroupObsolete or StorageGroupAndNewestCache will fail.
+  void SimulateMakeGroupObsoleteFailure() {
+    simulate_make_group_obsolete_failure_ = true;
+  }
+  void SimulateStoreGroupAndNewestCacheFailure() {
+    simulate_store_group_and_newest_cache_failure_ = true;
+  }
+
+  // Simulate FindResponseFor results for testing. These
+  // provided values will be return on the next call to
+  // the corresponding Find method, subsequent calls are
+  // unaffected.
+  void SimulateFindMainResource(
+      const AppCacheEntry& entry,
+      const GURL& fallback_url,
+      const AppCacheEntry& fallback_entry,
+      int64 cache_id,
+      int64 group_id,
+      const GURL& manifest_url) {
+    simulate_find_main_resource_ = true;
+    simulate_find_sub_resource_ = false;
+    simulated_found_entry_ = entry;
+    simulated_found_fallback_url_ = fallback_url;
+    simulated_found_fallback_entry_ = fallback_entry;
+    simulated_found_cache_id_ = cache_id;
+    simulated_found_group_id_ = group_id;
+    simulated_found_manifest_url_ = manifest_url,
+    simulated_found_network_namespace_ = false;  // N/A to main resource loads
+  }
+  void SimulateFindSubResource(
+      const AppCacheEntry& entry,
+      const AppCacheEntry& fallback_entry,
+      bool network_namespace) {
+    simulate_find_main_resource_ = false;
+    simulate_find_sub_resource_ = true;
+    simulated_found_entry_ = entry;
+    simulated_found_fallback_entry_ = fallback_entry;
+    simulated_found_cache_id_ = kNoCacheId;  // N/A to sub resource loads
+    simulated_found_manifest_url_ = GURL();  // N/A to sub resource loads
+    simulated_found_group_id_ = 0;  // N/A to sub resource loads
+    simulated_found_network_namespace_ = network_namespace;
+  }
+
+  void SimulateGetAllInfo(AppCacheInfoCollection* info) {
+    simulated_appcache_info_ = info;
+  }
+
+  void SimulateResponseReader(AppCacheResponseReader* reader) {
+    simulated_reader_.reset(reader);
+  }
+
+  StoredCacheMap stored_caches_;
+  StoredGroupMap stored_groups_;
+  DoomedResponseIds doomed_response_ids_;
+  scoped_ptr<AppCacheDiskCache> disk_cache_;
+  std::deque<base::Closure> pending_tasks_;
+
+  bool simulate_make_group_obsolete_failure_;
+  bool simulate_store_group_and_newest_cache_failure_;
+
+  bool simulate_find_main_resource_;
+  bool simulate_find_sub_resource_;
+  AppCacheEntry simulated_found_entry_;
+  AppCacheEntry simulated_found_fallback_entry_;
+  int64 simulated_found_cache_id_;
+  int64 simulated_found_group_id_;
+  GURL simulated_found_fallback_url_;
+  GURL simulated_found_manifest_url_;
+  bool simulated_found_network_namespace_;
+  scoped_refptr<AppCacheInfoCollection> simulated_appcache_info_;
+  scoped_ptr<AppCacheResponseReader> simulated_reader_;
+
+  base::WeakPtrFactory<MockAppCacheStorage> weak_factory_;
+
+  FRIEND_TEST_ALL_PREFIXES(MockAppCacheStorageTest,
+                           BasicFindMainResponse);
+  FRIEND_TEST_ALL_PREFIXES(MockAppCacheStorageTest,
+                           BasicFindMainFallbackResponse);
+  FRIEND_TEST_ALL_PREFIXES(MockAppCacheStorageTest, CreateGroup);
+  FRIEND_TEST_ALL_PREFIXES(MockAppCacheStorageTest,
+                           FindMainResponseExclusions);
+  FRIEND_TEST_ALL_PREFIXES(MockAppCacheStorageTest,
+                           FindMainResponseWithMultipleCandidates);
+  FRIEND_TEST_ALL_PREFIXES(MockAppCacheStorageTest, LoadCache_FarHit);
+  FRIEND_TEST_ALL_PREFIXES(MockAppCacheStorageTest,
+                           LoadGroupAndCache_FarHit);
+  FRIEND_TEST_ALL_PREFIXES(MockAppCacheStorageTest, MakeGroupObsolete);
+  FRIEND_TEST_ALL_PREFIXES(MockAppCacheStorageTest, StoreNewGroup);
+  FRIEND_TEST_ALL_PREFIXES(MockAppCacheStorageTest,
+                           StoreExistingGroup);
+  FRIEND_TEST_ALL_PREFIXES(MockAppCacheStorageTest,
+                           StoreExistingGroupExistingCache);
+  FRIEND_TEST_ALL_PREFIXES(AppCacheServiceTest,
+                           DeleteAppCachesForOrigin);
+
+  DISALLOW_COPY_AND_ASSIGN(MockAppCacheStorage);
+};
+
+}  // namespace content
+
+#endif  // CONTENT_BROWSER_APPCACHE_MOCK_APPCACHE_STORAGE_H_
diff --git a/content/browser/appcache/mock_appcache_storage_unittest.cc b/content/browser/appcache/mock_appcache_storage_unittest.cc
index 12b2c5d..e3e6df0 100644
--- a/content/browser/appcache/mock_appcache_storage_unittest.cc
+++ b/content/browser/appcache/mock_appcache_storage_unittest.cc
@@ -3,12 +3,12 @@
 // found in the LICENSE file.
 
 #include "base/run_loop.h"
+#include "content/browser/appcache/mock_appcache_service.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "webkit/browser/appcache/appcache.h"
 #include "webkit/browser/appcache/appcache_group.h"
 #include "webkit/browser/appcache/appcache_response.h"
 #include "webkit/browser/appcache/appcache_storage.h"
-#include "webkit/browser/appcache/mock_appcache_service.h"
 
 using appcache::AppCache;
 using appcache::AppCacheEntry;
@@ -19,8 +19,6 @@
 using appcache::kNoCacheId;
 using appcache::kNoResponseId;
 using appcache::Manifest;
-using appcache::MockAppCacheService;
-using appcache::MockAppCacheStorage;
 using appcache::Namespace;
 using appcache::NETWORK_NAMESPACE;
 
diff --git a/content/browser/battery_status/OWNERS b/content/browser/battery_status/OWNERS
new file mode 100644
index 0000000..1fd89e0
--- /dev/null
+++ b/content/browser/battery_status/OWNERS
@@ -0,0 +1 @@
+timvolodine@chromium.org
diff --git a/content/browser/battery_status/battery_status_manager_android.cc b/content/browser/battery_status/battery_status_manager_android.cc
new file mode 100644
index 0000000..e7769ca
--- /dev/null
+++ b/content/browser/battery_status/battery_status_manager_android.cc
@@ -0,0 +1,47 @@
+// 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.
+
+#include "content/browser/battery_status/battery_status_manager_android.h"
+
+#include <string.h>
+
+#include "base/android/jni_android.h"
+#include "jni/BatteryStatusManager_jni.h"
+
+using base::android::AttachCurrentThread;
+
+namespace content {
+
+BatteryStatusManagerAndroid::BatteryStatusManagerAndroid() {
+  j_manager_.Reset(
+      Java_BatteryStatusManager_getInstance(
+          AttachCurrentThread(), base::android::GetApplicationContext()));
+}
+
+BatteryStatusManagerAndroid::~BatteryStatusManagerAndroid() {
+  StopListeningBatteryChange();
+}
+
+bool BatteryStatusManagerAndroid::Register(JNIEnv* env) {
+  return RegisterNativesImpl(env);
+}
+
+void BatteryStatusManagerAndroid::GotBatteryStatus(JNIEnv*, jobject,
+    jboolean charging, jdouble chargingTime, jdouble dischargingTime,
+    jdouble level) {
+  NOTIMPLEMENTED();
+}
+
+bool BatteryStatusManagerAndroid::StartListeningBatteryChange() {
+  return Java_BatteryStatusManager_start(
+      AttachCurrentThread(), j_manager_.obj(),
+      reinterpret_cast<intptr_t>(this));
+}
+
+void BatteryStatusManagerAndroid::StopListeningBatteryChange() {
+  Java_BatteryStatusManager_stop(
+      AttachCurrentThread(), j_manager_.obj());
+}
+
+}  // namespace content
diff --git a/content/browser/battery_status/battery_status_manager_android.h b/content/browser/battery_status/battery_status_manager_android.h
new file mode 100644
index 0000000..04746de
--- /dev/null
+++ b/content/browser/battery_status/battery_status_manager_android.h
@@ -0,0 +1,40 @@
+// 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.
+
+#ifndef CHROME_BROWSER_BATTERY_STATUS_BATTERY_STATUS_MANAGER_ANDROID_H_
+#define CHROME_BROWSER_BATTERY_STATUS_BATTERY_STATUS_MANAGER_ANDROID_H_
+
+#include "base/android/scoped_java_ref.h"
+#include "content/common/content_export.h"
+
+namespace content {
+
+// Android implementation of Battery Status API.
+class CONTENT_EXPORT BatteryStatusManagerAndroid {
+ public:
+  // Must be called at startup.
+  static bool Register(JNIEnv* env);
+
+  // Called from Java via JNI.
+  void GotBatteryStatus(JNIEnv*, jobject, jboolean charging,
+                        jdouble chargingTime, jdouble dischargingTime,
+                        jdouble level);
+
+  bool StartListeningBatteryChange();
+  void StopListeningBatteryChange();
+
+ protected:
+  BatteryStatusManagerAndroid();
+  virtual ~BatteryStatusManagerAndroid();
+
+ private:
+  // Java provider of battery status info.
+  base::android::ScopedJavaGlobalRef<jobject> j_manager_;
+
+  DISALLOW_COPY_AND_ASSIGN(BatteryStatusManagerAndroid);
+};
+
+}  // namespace content
+
+#endif  // CHROME_BROWSER_BATTERY_STATUS_BATTERY_STATUS_MANAGER_ANDROID_H_
diff --git a/content/browser/browser_main_loop.cc b/content/browser/browser_main_loop.cc
index 8080013..0153179 100644
--- a/content/browser/browser_main_loop.cc
+++ b/content/browser/browser_main_loop.cc
@@ -24,7 +24,7 @@
 #include "base/threading/thread_restrictions.h"
 #include "base/timer/hi_res_timer_manager.h"
 #include "content/browser/browser_thread_impl.h"
-#include "content/browser/device_orientation/device_inertial_sensor_service.h"
+#include "content/browser/device_sensors/device_inertial_sensor_service.h"
 #include "content/browser/download/save_file_manager.h"
 #include "content/browser/gamepad/gamepad_service.h"
 #include "content/browser/gpu/browser_gpu_channel_host_factory.h"
@@ -62,10 +62,14 @@
 #include "net/ssl/ssl_config_service.h"
 #include "ui/base/clipboard/clipboard.h"
 
-#if defined(USE_AURA)
+#if defined(USE_AURA) || (defined(OS_MACOSX) && !defined(OS_IOS))
 #include "content/browser/compositor/image_transport_factory.h"
 #endif
 
+#if defined(USE_AURA)
+#include "ui/aura/env.h"
+#endif
+
 #if defined(OS_ANDROID)
 #include "base/android/jni_android.h"
 #include "content/browser/android/browser_startup_controller.h"
@@ -115,6 +119,7 @@
 
 #if defined(USE_OZONE)
 #include "ui/ozone/ozone_platform.h"
+#include "ui/events/ozone/event_factory_ozone.h"
 #endif
 
 // One of the linux specific headers defines this as a macro.
@@ -182,8 +187,6 @@
   } else if (strstr(message, "Unable to create Ubuntu Menu Proxy") &&
              strstr(log_domain, "<unknown>")) {
     LOG(ERROR) << "GTK menu proxy create failed";
-  } else if (strstr(message, "gtk_drag_dest_leave: assertion")) {
-    LOG(ERROR) << "Drag destination deleted: http://crbug.com/18557";
   } else if (strstr(message, "Out of memory") &&
              strstr(log_domain, "<unknown>")) {
     LOG(ERROR) << "DBus call timeout or out of memory: "
@@ -222,6 +225,16 @@
   VLOG(0) << "Completed startup tracing to " << trace_file.value();
 }
 
+#if defined(USE_AURA)
+bool ShouldInitializeBrowserGpuChannelAndTransportSurface() {
+  return true;
+}
+#elif defined(OS_MACOSX) && !defined(OS_IOS)
+bool ShouldInitializeBrowserGpuChannelAndTransportSurface() {
+  return IsDelegatedRendererEnabled();
+}
+#endif
+
 }  // namespace
 
 // The currently-running BrowserMainLoop.  There can be one or zero.
@@ -916,20 +929,21 @@
   // otherwise we'll trigger the assertion about doing IO on the UI thread.
   GpuDataManagerImpl::GetInstance()->Initialize();
 
-  bool always_uses_gpu = IsForceCompositingModeEnabled();
+  bool always_uses_gpu = true;
   bool established_gpu_channel = false;
-#if defined(USE_AURA) || defined(OS_ANDROID)
-  established_gpu_channel = true;
-#if defined(USE_AURA)
-  if (!GpuDataManagerImpl::GetInstance()->CanUseGpuBrowserCompositor()) {
-    established_gpu_channel = always_uses_gpu = false;
+#if defined(USE_AURA) || defined(OS_MACOSX)
+  if (ShouldInitializeBrowserGpuChannelAndTransportSurface()) {
+    established_gpu_channel = true;
+    if (!GpuDataManagerImpl::GetInstance()->CanUseGpuBrowserCompositor()) {
+      established_gpu_channel = always_uses_gpu = false;
+    }
+    BrowserGpuChannelHostFactory::Initialize(established_gpu_channel);
+    ImageTransportFactory::Initialize();
   }
-  BrowserGpuChannelHostFactory::Initialize(established_gpu_channel);
-  ImageTransportFactory::Initialize();
 #elif defined(OS_ANDROID)
+  established_gpu_channel = true;
   BrowserGpuChannelHostFactory::Initialize(established_gpu_channel);
 #endif
-#endif
 
 #if defined(OS_LINUX) && defined(USE_UDEV)
   device_monitor_linux_.reset(new DeviceMonitorLinux());
@@ -1033,6 +1047,12 @@
     LOG_GETLASTERROR(FATAL);
 #endif
 
+#if defined(USE_AURA)
+  // Env creates the compositor. Aura widgets need the compositor to be created
+  // before they can be initialized by the browser.
+  aura::Env::CreateInstance();
+#endif
+
   if (parts_)
     parts_->ToolkitInitialized();
 }
diff --git a/content/browser/browser_plugin/browser_plugin_guest.cc b/content/browser/browser_plugin/browser_plugin_guest.cc
index 0d47f0c..89f4a6b 100644
--- a/content/browser/browser_plugin/browser_plugin_guest.cc
+++ b/content/browser/browser_plugin/browser_plugin_guest.cc
@@ -88,58 +88,6 @@
   base::WeakPtr<BrowserPluginGuest> guest_;
 };
 
-class BrowserPluginGuest::DownloadRequest : public PermissionRequest {
- public:
-  DownloadRequest(const base::WeakPtr<BrowserPluginGuest>& guest,
-                  const base::Callback<void(bool)>& callback)
-      : PermissionRequest(guest),
-        callback_(callback) {
-    RecordAction(
-        base::UserMetricsAction("BrowserPlugin.Guest.PermissionRequest.Download"));
-  }
-  virtual void RespondImpl(bool should_allow,
-                           const std::string& user_input) OVERRIDE {
-    callback_.Run(should_allow);
-  }
-
- private:
-  virtual ~DownloadRequest() {}
-  base::Callback<void(bool)> callback_;
-};
-
-class BrowserPluginGuest::MediaRequest : public PermissionRequest {
- public:
-  MediaRequest(const base::WeakPtr<BrowserPluginGuest>& guest,
-               const MediaStreamRequest& request,
-               const MediaResponseCallback& callback)
-               : PermissionRequest(guest),
-                 request_(request),
-                 callback_(callback) {
-    RecordAction(
-        base::UserMetricsAction("BrowserPlugin.Guest.PermissionRequest.Media"));
-  }
-
-  virtual void RespondImpl(bool should_allow,
-                           const std::string& user_input) OVERRIDE {
-    WebContentsImpl* web_contents = guest_->embedder_web_contents();
-    if (should_allow && web_contents) {
-      // Re-route the request to the embedder's WebContents; the guest gets the
-      // permission this way.
-      web_contents->RequestMediaAccessPermission(request_, callback_);
-    } else {
-      // Deny the request.
-      callback_.Run(MediaStreamDevices(),
-                    MEDIA_DEVICE_INVALID_STATE,
-                    scoped_ptr<MediaStreamUI>());
-    }
-  }
-
- private:
-  virtual ~MediaRequest() {}
-  MediaStreamRequest request_;
-  MediaResponseCallback callback_;
-};
-
 class BrowserPluginGuest::NewWindowRequest : public PermissionRequest {
  public:
   NewWindowRequest(const base::WeakPtr<BrowserPluginGuest>& guest,
@@ -172,44 +120,6 @@
   int instance_id_;
 };
 
-class BrowserPluginGuest::JavaScriptDialogRequest : public PermissionRequest {
- public:
-  JavaScriptDialogRequest(const base::WeakPtr<BrowserPluginGuest>& guest,
-                          const DialogClosedCallback& callback)
-      : PermissionRequest(guest),
-        callback_(callback) {
-    RecordAction(
-        base::UserMetricsAction("BrowserPlugin.Guest.PermissionRequest.JSDialog"));
-  }
-
-  virtual void RespondImpl(bool should_allow,
-                           const std::string& user_input) OVERRIDE {
-    callback_.Run(should_allow, base::UTF8ToUTF16(user_input));
-  }
-
- private:
-  virtual ~JavaScriptDialogRequest() {}
-  DialogClosedCallback callback_;
-};
-
-class BrowserPluginGuest::PointerLockRequest : public PermissionRequest {
- public:
-  explicit PointerLockRequest(const base::WeakPtr<BrowserPluginGuest>& guest)
-      : PermissionRequest(guest) {
-    RecordAction(
-        base::UserMetricsAction("BrowserPlugin.Guest.PermissionRequest.PointerLock"));
-  }
-
-  virtual void RespondImpl(bool should_allow,
-                           const std::string& user_input) OVERRIDE {
-    guest_->SendMessageToEmbedder(
-        new BrowserPluginMsg_SetMouseLock(guest_->instance_id(), should_allow));
-  }
-
- private:
-  virtual ~PointerLockRequest() {}
-};
-
 namespace {
 std::string WindowOpenDispositionToString(
   WindowOpenDisposition window_open_disposition) {
@@ -234,33 +144,18 @@
   }
 }
 
-std::string JavaScriptMessageTypeToString(JavaScriptMessageType message_type) {
-  switch (message_type) {
-    case JAVASCRIPT_MESSAGE_TYPE_ALERT:
-      return "alert";
-    case JAVASCRIPT_MESSAGE_TYPE_CONFIRM:
-      return "confirm";
-    case JAVASCRIPT_MESSAGE_TYPE_PROMPT:
-      return "prompt";
-    default:
-      NOTREACHED() << "Unknown JavaScript Message Type.";
-      return "unknown";
-  }
-}
-
 // Called on IO thread.
-static std::string RetrieveDownloadURLFromRequestId(
-    RenderViewHost* render_view_host,
+static GURL RetrieveDownloadURLFromRequestId(
+    int render_process_id,
     int url_request_id) {
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
 
-  int render_process_id = render_view_host->GetProcess()->GetID();
   GlobalRequestID global_id(render_process_id, url_request_id);
   net::URLRequest* url_request =
       ResourceDispatcherHostImpl::Get()->GetURLRequest(global_id);
   if (url_request)
-    return url_request->url().possibly_invalid_spec();
-  return "";
+    return url_request->url();
+  return GURL();
 }
 
 }  // namespace
@@ -705,10 +600,15 @@
     int request_id,
     const std::string& request_method,
     const base::Callback<void(bool)>& callback) {
+  if (!delegate_) {
+    callback.Run(false);
+    return;
+  }
+
   BrowserThread::PostTaskAndReplyWithResult(
       BrowserThread::IO, FROM_HERE,
       base::Bind(&RetrieveDownloadURLFromRequestId,
-                 render_view_host, request_id),
+                 render_view_host->GetProcess()->GetID(), request_id),
       base::Bind(&BrowserPluginGuest::DidRetrieveDownloadURLFromRequestId,
                  weak_ptr_factory_.GetWeakPtr(),
                  request_method,
@@ -729,7 +629,9 @@
 }
 
 JavaScriptDialogManager* BrowserPluginGuest::GetJavaScriptDialogManager() {
-  return this;
+  if (!delegate_)
+    return NULL;
+  return delegate_->GetJavaScriptDialogManager();
 }
 
 ColorChooser* BrowserPluginGuest::OpenColorChooser(
@@ -779,6 +681,11 @@
     delegate_->SetZoom(zoom_factor);
 }
 
+void BrowserPluginGuest::PointerLockPermissionResponse(bool allow) {
+  SendMessageToEmbedder(
+      new BrowserPluginMsg_SetMouseLock(instance_id(), allow));
+}
+
 void BrowserPluginGuest::FindReply(WebContents* contents,
                                    int request_id,
                                    int number_of_matches,
@@ -1333,19 +1240,17 @@
     Send(new ViewMsg_LockMouse_ACK(routing_id(), false));
     return;
   }
-  pending_lock_request_ = true;
-  base::DictionaryValue request_info;
-  request_info.Set(browser_plugin::kUserGesture,
-                   base::Value::CreateBooleanValue(user_gesture));
-  request_info.Set(browser_plugin::kLastUnlockedBySelf,
-                   base::Value::CreateBooleanValue(last_unlocked_by_target));
-  request_info.Set(browser_plugin::kURL,
-                   base::Value::CreateStringValue(
-                       web_contents()->GetLastCommittedURL().spec()));
 
-  RequestPermission(BROWSER_PLUGIN_PERMISSION_TYPE_POINTER_LOCK,
-                    new PointerLockRequest(weak_ptr_factory_.GetWeakPtr()),
-                    request_info);
+  if (!delegate_)
+    return;
+
+  pending_lock_request_ = true;
+
+  delegate_->RequestPointerLockPermission(
+      user_gesture,
+      last_unlocked_by_target,
+      base::Bind(&BrowserPluginGuest::PointerLockPermissionResponse,
+                 weak_ptr_factory_.GetWeakPtr()));
 }
 
 void BrowserPluginGuest::OnLockMouseAck(int instance_id, bool succeeded) {
@@ -1526,12 +1431,8 @@
 
 void BrowserPluginGuest::OnUpdateRectACK(
     int instance_id,
-    bool needs_ack,
     const BrowserPluginHostMsg_AutoSize_Params& auto_size_params,
     const BrowserPluginHostMsg_ResizeGuest_Params& resize_guest_params) {
-  // Only the software path expects an ACK.
-  if (needs_ack)
-    Send(new ViewMsg_UpdateRect_ACK(routing_id()));
   OnSetSize(instance_id_, auto_size_params, resize_guest_params);
 }
 
@@ -1609,16 +1510,14 @@
     WebContents* web_contents,
     const MediaStreamRequest& request,
     const MediaResponseCallback& callback) {
-  base::DictionaryValue request_info;
-  request_info.Set(
-      browser_plugin::kURL,
-      base::Value::CreateStringValue(request.security_origin.spec()));
+  if (!delegate_) {
+    callback.Run(MediaStreamDevices(),
+                 MEDIA_DEVICE_INVALID_STATE,
+                 scoped_ptr<MediaStreamUI>());
+    return;
+  }
 
-  RequestPermission(BROWSER_PLUGIN_PERMISSION_TYPE_MEDIA,
-                    new MediaRequest(weak_ptr_factory_.GetWeakPtr(),
-                                     request,
-                                     callback),
-                    request_info);
+  delegate_->RequestMediaAccessPermission(request, callback);
 }
 
 bool BrowserPluginGuest::PreHandleGestureEvent(
@@ -1628,60 +1527,6 @@
       event.type == blink::WebGestureEvent::GesturePinchEnd;
 }
 
-void BrowserPluginGuest::RunJavaScriptDialog(
-    WebContents* web_contents,
-    const GURL& origin_url,
-    const std::string& accept_lang,
-    JavaScriptMessageType javascript_message_type,
-    const base::string16& message_text,
-    const base::string16& default_prompt_text,
-    const DialogClosedCallback& callback,
-    bool* did_suppress_message) {
-  base::DictionaryValue request_info;
-  request_info.Set(
-      browser_plugin::kDefaultPromptText,
-      base::Value::CreateStringValue(base::UTF16ToUTF8(default_prompt_text)));
-  request_info.Set(
-      browser_plugin::kMessageText,
-      base::Value::CreateStringValue(base::UTF16ToUTF8(message_text)));
-  request_info.Set(
-      browser_plugin::kMessageType,
-      base::Value::CreateStringValue(
-          JavaScriptMessageTypeToString(javascript_message_type)));
-  request_info.Set(
-      browser_plugin::kURL,
-      base::Value::CreateStringValue(origin_url.spec()));
-
-  RequestPermission(BROWSER_PLUGIN_PERMISSION_TYPE_JAVASCRIPT_DIALOG,
-                    new JavaScriptDialogRequest(weak_ptr_factory_.GetWeakPtr(),
-                                                callback),
-                    request_info);
-}
-
-void BrowserPluginGuest::RunBeforeUnloadDialog(
-    WebContents* web_contents,
-    const base::string16& message_text,
-    bool is_reload,
-    const DialogClosedCallback& callback) {
-  // This is called if the guest has a beforeunload event handler.
-  // This callback allows navigation to proceed.
-  callback.Run(true, base::string16());
-}
-
-bool BrowserPluginGuest::HandleJavaScriptDialog(
-    WebContents* web_contents,
-    bool accept,
-    const base::string16* prompt_override) {
-  return false;
-}
-
-void BrowserPluginGuest::CancelActiveAndPendingDialogs(
-    WebContents* web_contents) {
-}
-
-void BrowserPluginGuest::WebContentsDestroyed(WebContents* web_contents) {
-}
-
 void BrowserPluginGuest::OnUpdateRect(
     const ViewHostMsg_UpdateRect_Params& params) {
   BrowserPluginMsg_UpdateRect_Params relay_params;
@@ -1689,7 +1534,7 @@
   relay_params.scale_factor = params.scale_factor;
   relay_params.is_resize_ack = ViewHostMsg_UpdateRect_Flags::is_resize_ack(
       params.flags);
-  relay_params.needs_ack = params.needs_ack;
+  relay_params.needs_ack = false;
 
   bool size_changed = last_seen_view_size_ != params.view_size;
   gfx::Size old_size = last_seen_view_size_;
@@ -1701,47 +1546,7 @@
   }
   last_seen_auto_size_enabled_ = auto_size_enabled_;
 
-  // HW accelerated case, acknowledge resize only
-  if (!params.needs_ack || !damage_buffer_) {
-    relay_params.damage_buffer_sequence_id = 0;
-    SendMessageToEmbedder(
-        new BrowserPluginMsg_UpdateRect(instance_id(), relay_params));
-    return;
-  }
-
-  // Only copy damage if the guest is in autosize mode and the guest's view size
-  // is less than the maximum size or the guest's view size is equal to the
-  // damage buffer's size and the guest's scale factor is equal to the damage
-  // buffer's scale factor.
-  // The scaling change can happen due to asynchronous updates of the DPI on a
-  // resolution change.
-  if (((auto_size_enabled_ && InAutoSizeBounds(params.view_size)) ||
-      (params.view_size == damage_view_size())) &&
-       params.scale_factor == damage_buffer_scale_factor()) {
-    TransportDIB* dib = GetWebContents()->GetRenderProcessHost()->
-        GetTransportDIB(params.bitmap);
-    if (dib) {
-      size_t guest_damage_buffer_size =
-#if defined(OS_WIN)
-          params.bitmap_rect.width() *
-          params.bitmap_rect.height() * 4;
-#else
-          dib->size();
-#endif
-      size_t embedder_damage_buffer_size = damage_buffer_size_;
-      void* guest_memory = dib->memory();
-      void* embedder_memory = damage_buffer_->memory();
-      size_t size = std::min(guest_damage_buffer_size,
-                             embedder_damage_buffer_size);
-      memcpy(embedder_memory, guest_memory, size);
-    }
-  }
-  relay_params.damage_buffer_sequence_id = damage_buffer_sequence_id_;
-  relay_params.bitmap_rect = params.bitmap_rect;
-  relay_params.scroll_delta = params.scroll_delta;
-  relay_params.scroll_rect = params.scroll_rect;
-  relay_params.copy_rects = params.copy_rects;
-
+  relay_params.damage_buffer_sequence_id = 0;
   SendMessageToEmbedder(
       new BrowserPluginMsg_UpdateRect(instance_id(), relay_params));
 }
@@ -1777,21 +1582,13 @@
 void BrowserPluginGuest::DidRetrieveDownloadURLFromRequestId(
     const std::string& request_method,
     const base::Callback<void(bool)>& callback,
-    const std::string& url) {
-  if (url.empty()) {
+    const GURL& url) {
+  if (!url.is_valid()) {
     callback.Run(false);
     return;
   }
 
-  base::DictionaryValue request_info;
-  request_info.Set(browser_plugin::kRequestMethod,
-                   base::Value::CreateStringValue(request_method));
-  request_info.Set(browser_plugin::kURL, base::Value::CreateStringValue(url));
-
-  RequestPermission(BROWSER_PLUGIN_PERMISSION_TYPE_DOWNLOAD,
-                    new DownloadRequest(weak_ptr_factory_.GetWeakPtr(),
-                                        callback),
-                    request_info);
+  delegate_->CanDownload(request_method, url, callback);
 }
 
 }  // namespace content
diff --git a/content/browser/browser_plugin/browser_plugin_guest.h b/content/browser/browser_plugin/browser_plugin_guest.h
index b5dae6d..4fc63db 100644
--- a/content/browser/browser_plugin/browser_plugin_guest.h
+++ b/content/browser/browser_plugin/browser_plugin_guest.h
@@ -29,7 +29,6 @@
 #include "content/common/edit_command.h"
 #include "content/port/common/input_event_ack_state.h"
 #include "content/public/browser/browser_plugin_guest_delegate.h"
-#include "content/public/browser/javascript_dialog_manager.h"
 #include "content/public/browser/web_contents_delegate.h"
 #include "content/public/browser/web_contents_observer.h"
 #include "content/public/common/browser_plugin_permission_type.h"
@@ -93,8 +92,7 @@
 // CreateNewWindow. The newly created guest will live in the same partition,
 // which means it can share storage and can script this guest.
 class CONTENT_EXPORT BrowserPluginGuest
-    : public JavaScriptDialogManager,
-      public WebContentsDelegate,
+    : public WebContentsDelegate,
       public WebContentsObserver {
  public:
   virtual ~BrowserPluginGuest();
@@ -237,29 +235,6 @@
       content::WebContents* source,
       const blink::WebGestureEvent& event) OVERRIDE;
 
-  // JavaScriptDialogManager implementation.
-  virtual void RunJavaScriptDialog(
-      WebContents* web_contents,
-      const GURL& origin_url,
-      const std::string& accept_lang,
-      JavaScriptMessageType javascript_message_type,
-      const base::string16& message_text,
-      const base::string16& default_prompt_text,
-      const DialogClosedCallback& callback,
-      bool* did_suppress_message) OVERRIDE;
-  virtual void RunBeforeUnloadDialog(
-      WebContents* web_contents,
-      const base::string16& message_text,
-      bool is_reload,
-      const DialogClosedCallback& callback) OVERRIDE;
-  virtual bool HandleJavaScriptDialog(
-      WebContents* web_contents,
-      bool accept,
-      const base::string16* prompt_override) OVERRIDE;
-  virtual void CancelActiveAndPendingDialogs(
-      WebContents* web_contents) OVERRIDE;
-  virtual void WebContentsDestroyed(WebContents* web_contents) OVERRIDE;
-
   // Exposes the protected web_contents() from WebContentsObserver.
   WebContentsImpl* GetWebContents();
 
@@ -314,17 +289,15 @@
 
   void SetZoom(double zoom_factor);
 
+  void PointerLockPermissionResponse(bool allow);
+
  private:
   class EmbedderWebContentsObserver;
   friend class TestBrowserPluginGuest;
 
   class DownloadRequest;
-  class JavaScriptDialogRequest;
-  // MediaRequest because of naming conflicts with MediaStreamRequest.
-  class MediaRequest;
   class NewWindowRequest;
   class PermissionRequest;
-  class PointerLockRequest;
 
   // Tracks the name, and target URL of the new window and whether or not it has
   // changed since the WebContents has been created and before the new window
@@ -458,7 +431,6 @@
   void OnUpdateGeometry(int instance_id, const gfx::Rect& view_rect);
   void OnUpdateRectACK(
       int instance_id,
-      bool needs_ack,
       const BrowserPluginHostMsg_AutoSize_Params& auto_size_params,
       const BrowserPluginHostMsg_ResizeGuest_Params& resize_guest_params);
 
@@ -510,7 +482,7 @@
   void DidRetrieveDownloadURLFromRequestId(
       const std::string& request_method,
       const base::Callback<void(bool)>& callback,
-      const std::string& url);
+      const GURL& url);
 
   // Forwards all messages from the |pending_messages_| queue to the embedder.
   void SendQueuedMessages();
diff --git a/content/browser/browser_plugin/browser_plugin_host_browsertest.cc b/content/browser/browser_plugin/browser_plugin_host_browsertest.cc
index f3415cb..3c75048 100644
--- a/content/browser/browser_plugin/browser_plugin_host_browsertest.cc
+++ b/content/browser/browser_plugin/browser_plugin_host_browsertest.cc
@@ -363,9 +363,13 @@
   const char kEmbedderURL[] = "/browser_plugin_embedder.html";
   StartBrowserPluginTest(kEmbedderURL, kHTMLForGuest, true, embedder_code);
 
+  // Wait for the guest to be resized to 100x200.
+  test_guest()->WaitForViewSize(nxt_size);
+
+  // TODO(lazyboy): Instead do the following once it's not flaky.
   // Wait for the guest to receive a damage buffer of size 100x200.
   // This means the guest will be painted properly at that size.
-  test_guest()->WaitForDamageBufferWithSize(nxt_size);
+  // test_guest()->WaitForDamageBufferWithSize(nxt_size);
 }
 
 IN_PROC_BROWSER_TEST_F(BrowserPluginHostTest, AdvanceFocus) {
diff --git a/content/browser/browser_thread_impl.cc b/content/browser/browser_thread_impl.cc
index 326778e..7b118d6 100644
--- a/content/browser/browser_thread_impl.cc
+++ b/content/browser/browser_thread_impl.cc
@@ -69,7 +69,7 @@
 
 BrowserThreadImpl::BrowserThreadImpl(ID identifier,
                                      base::MessageLoop* message_loop)
-    : Thread(message_loop->thread_name().c_str()), identifier_(identifier) {
+    : Thread(message_loop->thread_name()), identifier_(identifier) {
   set_message_loop(message_loop);
   Initialize();
 }
diff --git a/content/browser/device_orientation/data_fetcher_shared_memory.h b/content/browser/device_orientation/data_fetcher_shared_memory.h
deleted file mode 100644
index 16a55fe..0000000
--- a/content/browser/device_orientation/data_fetcher_shared_memory.h
+++ /dev/null
@@ -1,66 +0,0 @@
-// Copyright 2013 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 CONTENT_BROWSER_DEVICE_ORIENTATION_DATA_FETCHER_SHARED_MEMORY_H_
-#define CONTENT_BROWSER_DEVICE_ORIENTATION_DATA_FETCHER_SHARED_MEMORY_H_
-
-#include "content/browser/device_orientation/data_fetcher_shared_memory_base.h"
-
-#if !defined(OS_ANDROID)
-#include "content/common/device_orientation/device_motion_hardware_buffer.h"
-#include "content/common/device_orientation/device_orientation_hardware_buffer.h"
-#endif
-
-#if defined(OS_MACOSX)
-class SuddenMotionSensor;
-#elif defined(OS_WIN)
-#include <SensorsApi.h>
-#include "base/win/scoped_comptr.h"
-#endif
-
-namespace content {
-
-class CONTENT_EXPORT DataFetcherSharedMemory
-    : public DataFetcherSharedMemoryBase {
-
- public:
-  DataFetcherSharedMemory();
-  virtual ~DataFetcherSharedMemory();
-
- private:
-  virtual bool Start(ConsumerType consumer_type, void* buffer) OVERRIDE;
-  virtual bool Stop(ConsumerType consumer_type) OVERRIDE;
-
-#if !defined(OS_ANDROID)
-  DeviceMotionHardwareBuffer* motion_buffer_;
-  DeviceOrientationHardwareBuffer* orientation_buffer_;
-#endif
-#if defined(OS_MACOSX)
-  virtual void Fetch(unsigned consumer_bitmask) OVERRIDE;
-  virtual FetcherType GetType() const OVERRIDE;
-
-  scoped_ptr<SuddenMotionSensor> sudden_motion_sensor_;
-#elif defined(OS_WIN)
-  class SensorEventSink;
-  class SensorEventSinkMotion;
-  class SensorEventSinkOrientation;
-
-  virtual FetcherType GetType() const OVERRIDE;
-
-  bool RegisterForSensor(REFSENSOR_TYPE_ID sensor_type, ISensor** sensor,
-      scoped_refptr<SensorEventSink> event_sink);
-  void DisableSensors(ConsumerType consumer_type);
-  void SetBufferAvailableState(ConsumerType consumer_type, bool enabled);
-
-  base::win::ScopedComPtr<ISensor> sensor_inclinometer_;
-  base::win::ScopedComPtr<ISensor> sensor_accelerometer_;
-  base::win::ScopedComPtr<ISensor> sensor_gyrometer_;
-#endif
-
-  DISALLOW_COPY_AND_ASSIGN(DataFetcherSharedMemory);
-};
-
-}  // namespace content
-
-#endif  // CONTENT_BROWSER_DEVICE_ORIENTATION_DATA_FETCHER_SHARED_MEMORY_H_
diff --git a/content/browser/device_orientation/data_fetcher_shared_memory_android.cc b/content/browser/device_orientation/data_fetcher_shared_memory_android.cc
deleted file mode 100644
index 8a4f52d..0000000
--- a/content/browser/device_orientation/data_fetcher_shared_memory_android.cc
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright 2013 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 "content/browser/device_orientation/data_fetcher_shared_memory.h"
-
-#include "base/logging.h"
-#include "content/browser/device_orientation/sensor_manager_android.h"
-#include "content/common/device_orientation/device_motion_hardware_buffer.h"
-#include "content/common/device_orientation/device_orientation_hardware_buffer.h"
-
-namespace content {
-
-DataFetcherSharedMemory::DataFetcherSharedMemory() {
-}
-
-DataFetcherSharedMemory::~DataFetcherSharedMemory() {
-}
-
-bool DataFetcherSharedMemory::Start(ConsumerType consumer_type, void* buffer) {
-  DCHECK(buffer);
-
-  switch (consumer_type) {
-    case CONSUMER_TYPE_MOTION:
-      return SensorManagerAndroid::GetInstance()->
-          StartFetchingDeviceMotionData(
-              static_cast<DeviceMotionHardwareBuffer*>(buffer));
-    case CONSUMER_TYPE_ORIENTATION:
-      return SensorManagerAndroid::GetInstance()->
-          StartFetchingDeviceOrientationData(
-              static_cast<DeviceOrientationHardwareBuffer*>(buffer));
-    default:
-      NOTREACHED();
-  }
-  return false;
-}
-
-bool DataFetcherSharedMemory::Stop(ConsumerType consumer_type) {
-  switch (consumer_type) {
-    case CONSUMER_TYPE_MOTION:
-      SensorManagerAndroid::GetInstance()->StopFetchingDeviceMotionData();
-      return true;
-    case CONSUMER_TYPE_ORIENTATION:
-      SensorManagerAndroid::GetInstance()->StopFetchingDeviceOrientationData();
-      return true;
-    default:
-      NOTREACHED();
-  }
-  return false;
-}
-
-}  // namespace content
diff --git a/content/browser/device_orientation/data_fetcher_shared_memory_base.cc b/content/browser/device_orientation/data_fetcher_shared_memory_base.cc
deleted file mode 100644
index 690d1f8..0000000
--- a/content/browser/device_orientation/data_fetcher_shared_memory_base.cc
+++ /dev/null
@@ -1,245 +0,0 @@
-// Copyright 2013 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 "content/browser/device_orientation/data_fetcher_shared_memory_base.h"
-
-#include "base/bind.h"
-#include "base/logging.h"
-#include "base/stl_util.h"
-#include "base/threading/thread.h"
-#include "base/timer/timer.h"
-#include "content/common/device_orientation/device_motion_hardware_buffer.h"
-#include "content/common/device_orientation/device_orientation_hardware_buffer.h"
-
-namespace content {
-
-namespace {
-
-static size_t GetConsumerSharedMemoryBufferSize(ConsumerType consumer_type) {
-  switch (consumer_type) {
-    case CONSUMER_TYPE_MOTION:
-      return sizeof(DeviceMotionHardwareBuffer);
-    case CONSUMER_TYPE_ORIENTATION:
-      return sizeof(DeviceOrientationHardwareBuffer);
-    default:
-      NOTREACHED();
-  }
-  return 0;
-}
-
-}
-
-class DataFetcherSharedMemoryBase::PollingThread : public base::Thread {
- public:
-  PollingThread(const char* name, DataFetcherSharedMemoryBase* fetcher);
-  virtual ~PollingThread();
-
-  void AddConsumer(ConsumerType consumer_type, void* buffer);
-  void RemoveConsumer(ConsumerType consumer_type);
-
-  unsigned GetConsumersBitmask() const { return consumers_bitmask_; }
-  bool IsTimerRunning() const { return timer_ ? timer_->IsRunning() : false; }
-
- private:
-
-  void DoPoll();
-
-  unsigned consumers_bitmask_;
-  DataFetcherSharedMemoryBase* fetcher_;
-  scoped_ptr<base::RepeatingTimer<PollingThread> > timer_;
-
-  DISALLOW_COPY_AND_ASSIGN(PollingThread);
-};
-
-// --- PollingThread methods
-
-DataFetcherSharedMemoryBase::PollingThread::PollingThread(
-    const char* name, DataFetcherSharedMemoryBase* fetcher)
-    : base::Thread(name),
-      consumers_bitmask_(0),
-      fetcher_(fetcher) {
-}
-
-DataFetcherSharedMemoryBase::PollingThread::~PollingThread() {
-}
-
-void DataFetcherSharedMemoryBase::PollingThread::AddConsumer(
-    ConsumerType consumer_type, void* buffer) {
-  DCHECK(fetcher_);
-  if (!fetcher_->Start(consumer_type, buffer))
-    return;
-
-  consumers_bitmask_ |= consumer_type;
-
-  if (!timer_ && fetcher_->GetType() == FETCHER_TYPE_POLLING_CALLBACK) {
-    timer_.reset(new base::RepeatingTimer<PollingThread>());
-    timer_->Start(FROM_HERE,
-                  fetcher_->GetInterval(),
-                  this, &PollingThread::DoPoll);
-  }
-}
-
-void DataFetcherSharedMemoryBase::PollingThread::RemoveConsumer(
-    ConsumerType consumer_type) {
-  DCHECK(fetcher_);
-  if (!fetcher_->Stop(consumer_type))
-    return;
-
-  consumers_bitmask_ ^= consumer_type;
-
-  if (!consumers_bitmask_)
-    timer_.reset(); // will also stop the timer.
-}
-
-void DataFetcherSharedMemoryBase::PollingThread::DoPoll() {
-  DCHECK(fetcher_);
-  DCHECK(consumers_bitmask_);
-  fetcher_->Fetch(consumers_bitmask_);
-}
-
-// --- end of PollingThread methods
-
-DataFetcherSharedMemoryBase::DataFetcherSharedMemoryBase()
-    : started_consumers_(0) {
-}
-
-DataFetcherSharedMemoryBase::~DataFetcherSharedMemoryBase() {
-  StopFetchingDeviceData(CONSUMER_TYPE_MOTION);
-  StopFetchingDeviceData(CONSUMER_TYPE_ORIENTATION);
-
-  // make sure polling thread stops asap.
-  if (polling_thread_)
-    polling_thread_->Stop();
-
-  STLDeleteContainerPairSecondPointers(shared_memory_map_.begin(),
-      shared_memory_map_.end());
-}
-
-bool DataFetcherSharedMemoryBase::StartFetchingDeviceData(
-    ConsumerType consumer_type) {
-  if (started_consumers_ & consumer_type)
-    return true;
-
-  void* buffer = GetSharedMemoryBuffer(consumer_type);
-  if (!buffer)
-    return false;
-
-  if (GetType() != FETCHER_TYPE_DEFAULT) {
-    if (!InitAndStartPollingThreadIfNecessary())
-      return false;
-    polling_thread_->message_loop()->PostTask(
-        FROM_HERE,
-        base::Bind(&PollingThread::AddConsumer,
-                   base::Unretained(polling_thread_.get()),
-                   consumer_type, buffer));
-  } else {
-    if (!Start(consumer_type, buffer))
-      return false;
-  }
-
-  started_consumers_ |= consumer_type;
-
-  return true;
-}
-
-bool DataFetcherSharedMemoryBase::StopFetchingDeviceData(
-    ConsumerType consumer_type) {
-  if (!(started_consumers_ & consumer_type))
-    return true;
-
-  if (GetType() != FETCHER_TYPE_DEFAULT) {
-    polling_thread_->message_loop()->PostTask(
-        FROM_HERE,
-        base::Bind(&PollingThread::RemoveConsumer,
-                   base::Unretained(polling_thread_.get()),
-                   consumer_type));
-  } else {
-    if (!Stop(consumer_type))
-      return false;
-  }
-
-  started_consumers_ ^= consumer_type;
-
-  return true;
-}
-
-base::SharedMemoryHandle
-DataFetcherSharedMemoryBase::GetSharedMemoryHandleForProcess(
-    ConsumerType consumer_type, base::ProcessHandle process) {
-  SharedMemoryMap::const_iterator it = shared_memory_map_.find(consumer_type);
-  if (it == shared_memory_map_.end())
-    return base::SharedMemory::NULLHandle();
-
-  base::SharedMemoryHandle renderer_handle;
-  it->second->ShareToProcess(process, &renderer_handle);
-  return renderer_handle;
-}
-
-bool DataFetcherSharedMemoryBase::InitAndStartPollingThreadIfNecessary() {
-  if (polling_thread_)
-    return true;
-
-  polling_thread_.reset(
-      new PollingThread("Inertial Device Sensor poller", this));
-
-  if (!polling_thread_->Start()) {
-      LOG(ERROR) << "Failed to start inertial sensor data polling thread";
-      return false;
-  }
-  return true;
-}
-
-void DataFetcherSharedMemoryBase::Fetch(unsigned consumer_bitmask) {
-  NOTIMPLEMENTED();
-}
-
-DataFetcherSharedMemoryBase::FetcherType
-DataFetcherSharedMemoryBase::GetType() const {
-  return FETCHER_TYPE_DEFAULT;
-}
-
-base::TimeDelta DataFetcherSharedMemoryBase::GetInterval() const {
-  return base::TimeDelta::FromMilliseconds(kInertialSensorIntervalMillis);
-}
-
-base::SharedMemory* DataFetcherSharedMemoryBase::GetSharedMemory(
-    ConsumerType consumer_type) {
-  SharedMemoryMap::const_iterator it = shared_memory_map_.find(consumer_type);
-  if (it != shared_memory_map_.end())
-    return it->second;
-
-  size_t buffer_size = GetConsumerSharedMemoryBufferSize(consumer_type);
-  if (buffer_size == 0)
-    return NULL;
-
-  scoped_ptr<base::SharedMemory> new_shared_mem(new base::SharedMemory);
-  if (new_shared_mem->CreateAndMapAnonymous(buffer_size)) {
-    if (void* mem = new_shared_mem->memory()) {
-      memset(mem, 0, buffer_size);
-      base::SharedMemory* shared_mem = new_shared_mem.release();
-      shared_memory_map_[consumer_type] = shared_mem;
-      return shared_mem;
-    }
-  }
-  LOG(ERROR) << "Failed to initialize shared memory";
-  return NULL;
-}
-
-void* DataFetcherSharedMemoryBase::GetSharedMemoryBuffer(
-    ConsumerType consumer_type) {
-  if (base::SharedMemory* shared_memory = GetSharedMemory(consumer_type))
-    return shared_memory->memory();
-  return NULL;
-}
-
-base::MessageLoop* DataFetcherSharedMemoryBase::GetPollingMessageLoop() const {
-  return polling_thread_ ? polling_thread_->message_loop() : NULL;
-}
-
-bool DataFetcherSharedMemoryBase::IsPollingTimerRunningForTesting() const {
-  return polling_thread_ ? polling_thread_->IsTimerRunning() : false;
-}
-
-
-}  // namespace content
diff --git a/content/browser/device_orientation/data_fetcher_shared_memory_base.h b/content/browser/device_orientation/data_fetcher_shared_memory_base.h
deleted file mode 100644
index e0ac543..0000000
--- a/content/browser/device_orientation/data_fetcher_shared_memory_base.h
+++ /dev/null
@@ -1,99 +0,0 @@
-// Copyright 2013 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 CONTENT_BROWSER_DEVICE_ORIENTATION_DATA_FETCHER_SHARED_MEMORY_BASE_H_
-#define CONTENT_BROWSER_DEVICE_ORIENTATION_DATA_FETCHER_SHARED_MEMORY_BASE_H_
-
-#include <map>
-
-#include "base/memory/scoped_ptr.h"
-#include "base/memory/shared_memory.h"
-#include "base/message_loop/message_loop.h"
-#include "content/browser/device_orientation/inertial_sensor_consts.h"
-#include "content/common/content_export.h"
-
-namespace content {
-
-// Sensor data fetchers should derive from this base class and implement
-// the abstract Start() and Stop() methods.
-// If the fetcher requires polling it should also implement IsPolling()
-// to return true and the Fetch() method which will be called from the
-// polling thread to fetch data at regular intervals.
-class CONTENT_EXPORT DataFetcherSharedMemoryBase {
- public:
-
-  // Starts updating the shared memory buffer with sensor data at
-  // regular intervals. Returns true if the relevant sensors could
-  // be successfully activated.
-  bool StartFetchingDeviceData(ConsumerType consumer_type);
-
-  // Stops updating the shared memory buffer. Returns true if the
-  // relevant sensors could be successfully deactivated.
-  bool StopFetchingDeviceData(ConsumerType consumer_type);
-
-  // Returns the shared memory handle of the device sensor data
-  // duplicated into the given process. This method should only be
-  // called after a call to StartFetchingDeviceData method with
-  // corresponding |consumer_type| parameter.
-  base::SharedMemoryHandle GetSharedMemoryHandleForProcess(
-      ConsumerType consumer_type, base::ProcessHandle process);
-
-  enum FetcherType {
-    // Fetcher runs on the same thread as its creator.
-    FETCHER_TYPE_DEFAULT,
-    // Fetcher runs on a separate thread calling |Fetch()| at regular intervals.
-    FETCHER_TYPE_POLLING_CALLBACK,
-    // Fetcher runs on a separate thread, but no callbacks are executed.
-    FETCHER_TYPE_SEPARATE_THREAD
-  };
-
- protected:
-  class PollingThread;
-
-  DataFetcherSharedMemoryBase();
-  virtual ~DataFetcherSharedMemoryBase();
-
-  // Returns the message loop of the polling thread.
-  // Returns NULL if there is no polling thread.
-  base::MessageLoop* GetPollingMessageLoop() const;
-
-  // If IsPolling() is true this method is called from the |polling_thread_|
-  // at regular intervals.
-  virtual void Fetch(unsigned consumer_bitmask);
-
-  // Returns the type of thread this fetcher runs on.
-  virtual FetcherType GetType() const;
-
-  // Returns the sensor sampling interval. In particular if this fetcher
-  // GetType() == FETCHER_TYPE_POLLING_CALLBACK the interval between
-  // successive calls to Fetch().
-  virtual base::TimeDelta GetInterval() const;
-
-  // Start() method should call InitSharedMemoryBuffer() to get the shared
-  // memory pointer. If IsPolling() is true both Start() and Stop() methods
-  // are called from the |polling_thread_|.
-  virtual bool Start(ConsumerType consumer_type, void* buffer) = 0;
-  virtual bool Stop(ConsumerType consumer_type) = 0;
-
-  bool IsPollingTimerRunningForTesting() const;
-
- private:
-  bool InitAndStartPollingThreadIfNecessary();
-  base::SharedMemory* GetSharedMemory(ConsumerType consumer_type);
-  void* GetSharedMemoryBuffer(ConsumerType consumer_type);
-
-  unsigned started_consumers_;
-
-  scoped_ptr<PollingThread> polling_thread_;
-
-  // Owning pointers. Objects in the map are deleted in dtor.
-  typedef std::map<ConsumerType, base::SharedMemory*> SharedMemoryMap;
-  SharedMemoryMap shared_memory_map_;
-
-  DISALLOW_COPY_AND_ASSIGN(DataFetcherSharedMemoryBase);
-};
-
-}
-
-#endif  // CONTENT_BROWSER_DEVICE_ORIENTATION_DATA_FETCHER_SHARED_MEMORY_BASE_H_
diff --git a/content/browser/device_orientation/data_fetcher_shared_memory_base_unittest.cc b/content/browser/device_orientation/data_fetcher_shared_memory_base_unittest.cc
deleted file mode 100644
index dd452a0..0000000
--- a/content/browser/device_orientation/data_fetcher_shared_memory_base_unittest.cc
+++ /dev/null
@@ -1,404 +0,0 @@
-// Copyright 2013 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 "content/browser/device_orientation/data_fetcher_shared_memory_base.h"
-
-#include "base/logging.h"
-#include "base/process/process_handle.h"
-#include "base/synchronization/waitable_event.h"
-#include "base/threading/thread.h"
-#include "content/common/device_orientation/device_motion_hardware_buffer.h"
-#include "content/common/device_orientation/device_orientation_hardware_buffer.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace content {
-
-namespace {
-
-class FakeDataFetcher : public DataFetcherSharedMemoryBase {
- public:
-  FakeDataFetcher()
-      : start_motion_(false, false),
-        start_orientation_(false, false),
-        stop_motion_(false, false),
-        stop_orientation_(false, false),
-        updated_motion_(false, false),
-        updated_orientation_(false, false),
-        motion_buffer_(NULL),
-        orientation_buffer_(NULL) {
-  }
-  virtual ~FakeDataFetcher() { }
-
-  bool Init(ConsumerType consumer_type, void* buffer) {
-    EXPECT_TRUE(buffer);
-
-    switch (consumer_type) {
-      case CONSUMER_TYPE_MOTION:
-        motion_buffer_ = static_cast<DeviceMotionHardwareBuffer*>(buffer);
-        break;
-      case CONSUMER_TYPE_ORIENTATION:
-        orientation_buffer_ =
-            static_cast<DeviceOrientationHardwareBuffer*>(buffer);
-        break;
-      default:
-        return false;
-    }
-    return true;
-  }
-
-  void UpdateMotion() {
-    DeviceMotionHardwareBuffer* buffer = GetMotionBuffer();
-    ASSERT_TRUE(buffer);
-    buffer->seqlock.WriteBegin();
-    buffer->data.interval = kInertialSensorIntervalMillis;
-    buffer->seqlock.WriteEnd();
-    updated_motion_.Signal();
-  }
-
-  void UpdateOrientation() {
-    DeviceOrientationHardwareBuffer* buffer = GetOrientationBuffer();
-    ASSERT_TRUE(buffer);
-    buffer->seqlock.WriteBegin();
-    buffer->data.alpha = 1;
-    buffer->seqlock.WriteEnd();
-    updated_orientation_.Signal();
-  }
-
-  DeviceMotionHardwareBuffer* GetMotionBuffer() const {
-    return motion_buffer_;
-  }
-
-  DeviceOrientationHardwareBuffer* GetOrientationBuffer() const {
-    return orientation_buffer_;
-  }
-
-  void WaitForStart(ConsumerType consumer_type) {
-    switch (consumer_type) {
-      case CONSUMER_TYPE_MOTION:
-        start_motion_.Wait();
-        break;
-      case CONSUMER_TYPE_ORIENTATION:
-        start_orientation_.Wait();
-        break;
-    }
-  }
-
-  void WaitForStop(ConsumerType consumer_type) {
-    switch (consumer_type) {
-      case CONSUMER_TYPE_MOTION:
-        stop_motion_.Wait();
-        break;
-      case CONSUMER_TYPE_ORIENTATION:
-        stop_orientation_.Wait();
-        break;
-    }
-  }
-
-  void WaitForUpdate(ConsumerType consumer_type) {
-    switch (consumer_type) {
-      case CONSUMER_TYPE_MOTION:
-        updated_motion_.Wait();
-        break;
-      case CONSUMER_TYPE_ORIENTATION:
-        updated_orientation_.Wait();
-        break;
-    }
-  }
-
- protected:
-  base::WaitableEvent start_motion_;
-  base::WaitableEvent start_orientation_;
-  base::WaitableEvent stop_motion_;
-  base::WaitableEvent stop_orientation_;
-  base::WaitableEvent updated_motion_;
-  base::WaitableEvent updated_orientation_;
-
- private:
-  DeviceMotionHardwareBuffer* motion_buffer_;
-  DeviceOrientationHardwareBuffer* orientation_buffer_;
-
-  DISALLOW_COPY_AND_ASSIGN(FakeDataFetcher);
-};
-
-class FakeNonPollingDataFetcher : public FakeDataFetcher {
- public:
-  FakeNonPollingDataFetcher() { }
-  virtual ~FakeNonPollingDataFetcher() { }
-
-  virtual bool Start(ConsumerType consumer_type, void* buffer) OVERRIDE {
-    Init(consumer_type, buffer);
-    switch (consumer_type) {
-      case CONSUMER_TYPE_MOTION:
-        UpdateMotion();
-        start_motion_.Signal();
-        break;
-      case CONSUMER_TYPE_ORIENTATION:
-        UpdateOrientation();
-        start_orientation_.Signal();
-        break;
-      default:
-        return false;
-    }
-    return true;
-  }
-
-  virtual bool Stop(ConsumerType consumer_type) OVERRIDE {
-    switch (consumer_type) {
-      case CONSUMER_TYPE_MOTION:
-        stop_motion_.Signal();
-        break;
-      case CONSUMER_TYPE_ORIENTATION:
-        stop_orientation_.Signal();
-        break;
-      default:
-        return false;
-    }
-    return true;
-  }
-
-  virtual void Fetch(unsigned consumer_bitmask) OVERRIDE {
-    FAIL() << "fetch should not be called, "
-        << "because this is a non-polling fetcher";
-  }
-
-  virtual FetcherType GetType() const OVERRIDE {
-    return FakeDataFetcher::GetType();
-  }
-
- private:
-
-  DISALLOW_COPY_AND_ASSIGN(FakeNonPollingDataFetcher);
-};
-
-class FakePollingDataFetcher : public FakeDataFetcher {
- public:
-  FakePollingDataFetcher() { }
-  virtual ~FakePollingDataFetcher() { }
-
-  virtual bool Start(ConsumerType consumer_type, void* buffer) OVERRIDE {
-    EXPECT_TRUE(base::MessageLoop::current() == GetPollingMessageLoop());
-
-    Init(consumer_type, buffer);
-    switch (consumer_type) {
-      case CONSUMER_TYPE_MOTION:
-        start_motion_.Signal();
-        break;
-      case CONSUMER_TYPE_ORIENTATION:
-        start_orientation_.Signal();
-        break;
-      default:
-        return false;
-    }
-    return true;
-  }
-
-  virtual bool Stop(ConsumerType consumer_type) OVERRIDE {
-    EXPECT_TRUE(base::MessageLoop::current() == GetPollingMessageLoop());
-
-    switch (consumer_type) {
-      case CONSUMER_TYPE_MOTION:
-        stop_motion_.Signal();
-        break;
-      case CONSUMER_TYPE_ORIENTATION:
-        stop_orientation_.Signal();
-        break;
-      default:
-        return false;
-    }
-    return true;
-  }
-
-  virtual void Fetch(unsigned consumer_bitmask) OVERRIDE {
-    EXPECT_TRUE(base::MessageLoop::current() == GetPollingMessageLoop());
-    EXPECT_TRUE(consumer_bitmask & CONSUMER_TYPE_ORIENTATION ||
-                consumer_bitmask & CONSUMER_TYPE_MOTION);
-
-    if (consumer_bitmask & CONSUMER_TYPE_ORIENTATION)
-      UpdateOrientation();
-    if (consumer_bitmask & CONSUMER_TYPE_MOTION)
-      UpdateMotion();
-  }
-
-  virtual FetcherType GetType() const OVERRIDE {
-    return FETCHER_TYPE_POLLING_CALLBACK;
-  }
-
- private:
-
-  DISALLOW_COPY_AND_ASSIGN(FakePollingDataFetcher);
-};
-
-class FakeZeroDelayPollingDataFetcher : public FakeDataFetcher {
- public:
-  FakeZeroDelayPollingDataFetcher() { }
-  virtual ~FakeZeroDelayPollingDataFetcher() { }
-
-  virtual bool Start(ConsumerType consumer_type, void* buffer) OVERRIDE {
-    EXPECT_TRUE(base::MessageLoop::current() == GetPollingMessageLoop());
-
-    Init(consumer_type, buffer);
-    switch (consumer_type) {
-      case CONSUMER_TYPE_MOTION:
-        start_motion_.Signal();
-        break;
-      case CONSUMER_TYPE_ORIENTATION:
-        start_orientation_.Signal();
-        break;
-      default:
-        return false;
-    }
-    return true;
-  }
-
-  virtual bool Stop(ConsumerType consumer_type) OVERRIDE {
-    EXPECT_TRUE(base::MessageLoop::current() == GetPollingMessageLoop());
-
-    switch (consumer_type) {
-      case CONSUMER_TYPE_MOTION:
-        stop_motion_.Signal();
-        break;
-      case CONSUMER_TYPE_ORIENTATION:
-        stop_orientation_.Signal();
-        break;
-      default:
-        return false;
-    }
-    return true;
-  }
-
-  virtual void Fetch(unsigned consumer_bitmask) OVERRIDE {
-    FAIL() << "fetch should not be called";
-  }
-
-  virtual FetcherType GetType() const OVERRIDE {
-    return FETCHER_TYPE_SEPARATE_THREAD;
-  }
-
-  bool IsPollingTimerRunningForTesting() const {
-    return FakeDataFetcher::IsPollingTimerRunningForTesting();
-  }
-
- private:
-
-  DISALLOW_COPY_AND_ASSIGN(FakeZeroDelayPollingDataFetcher);
-};
-
-
-TEST(DataFetcherSharedMemoryBaseTest, DoesStartMotion) {
-  FakeNonPollingDataFetcher fake_data_fetcher;
-  EXPECT_EQ(DataFetcherSharedMemoryBase::FETCHER_TYPE_DEFAULT,
-      fake_data_fetcher.GetType());
-
-  EXPECT_TRUE(fake_data_fetcher.StartFetchingDeviceData(CONSUMER_TYPE_MOTION));
-  fake_data_fetcher.WaitForStart(CONSUMER_TYPE_MOTION);
-
-  EXPECT_EQ(kInertialSensorIntervalMillis,
-      fake_data_fetcher.GetMotionBuffer()->data.interval);
-
-  fake_data_fetcher.StopFetchingDeviceData(CONSUMER_TYPE_MOTION);
-  fake_data_fetcher.WaitForStop(CONSUMER_TYPE_MOTION);
-}
-
-TEST(DataFetcherSharedMemoryBaseTest, DoesStartOrientation) {
-  FakeNonPollingDataFetcher fake_data_fetcher;
-  EXPECT_EQ(DataFetcherSharedMemoryBase::FETCHER_TYPE_DEFAULT,
-      fake_data_fetcher.GetType());
-
-  EXPECT_TRUE(fake_data_fetcher.StartFetchingDeviceData(
-      CONSUMER_TYPE_ORIENTATION));
-  fake_data_fetcher.WaitForStart(CONSUMER_TYPE_ORIENTATION);
-
-  EXPECT_EQ(1, fake_data_fetcher.GetOrientationBuffer()->data.alpha);
-
-  fake_data_fetcher.StopFetchingDeviceData(CONSUMER_TYPE_ORIENTATION);
-  fake_data_fetcher.WaitForStop(CONSUMER_TYPE_ORIENTATION);
-}
-
-TEST(DataFetcherSharedMemoryBaseTest, DoesPollMotion) {
-  FakePollingDataFetcher fake_data_fetcher;
-  EXPECT_EQ(DataFetcherSharedMemoryBase::FETCHER_TYPE_POLLING_CALLBACK,
-      fake_data_fetcher.GetType());
-
-  EXPECT_TRUE(fake_data_fetcher.StartFetchingDeviceData(CONSUMER_TYPE_MOTION));
-  fake_data_fetcher.WaitForStart(CONSUMER_TYPE_MOTION);
-  fake_data_fetcher.WaitForUpdate(CONSUMER_TYPE_MOTION);
-
-  EXPECT_EQ(kInertialSensorIntervalMillis,
-      fake_data_fetcher.GetMotionBuffer()->data.interval);
-
-  fake_data_fetcher.StopFetchingDeviceData(CONSUMER_TYPE_MOTION);
-  fake_data_fetcher.WaitForStop(CONSUMER_TYPE_MOTION);
-}
-
-TEST(DataFetcherSharedMemoryBaseTest, DoesPollOrientation) {
-  FakePollingDataFetcher fake_data_fetcher;
-  EXPECT_EQ(DataFetcherSharedMemoryBase::FETCHER_TYPE_POLLING_CALLBACK,
-      fake_data_fetcher.GetType());
-
-  EXPECT_TRUE(fake_data_fetcher.StartFetchingDeviceData(
-      CONSUMER_TYPE_ORIENTATION));
-  fake_data_fetcher.WaitForStart(CONSUMER_TYPE_ORIENTATION);
-  fake_data_fetcher.WaitForUpdate(CONSUMER_TYPE_ORIENTATION);
-
-  EXPECT_EQ(1, fake_data_fetcher.GetOrientationBuffer()->data.alpha);
-
-  fake_data_fetcher.StopFetchingDeviceData(CONSUMER_TYPE_ORIENTATION);
-  fake_data_fetcher.WaitForStop(CONSUMER_TYPE_ORIENTATION);
-}
-
-TEST(DataFetcherSharedMemoryBaseTest, DoesPollMotionAndOrientation) {
-  FakePollingDataFetcher fake_data_fetcher;
-  EXPECT_EQ(DataFetcherSharedMemoryBase::FETCHER_TYPE_POLLING_CALLBACK,
-      fake_data_fetcher.GetType());
-
-  EXPECT_TRUE(fake_data_fetcher.StartFetchingDeviceData(
-      CONSUMER_TYPE_ORIENTATION));
-  base::SharedMemoryHandle handle_orientation =
-      fake_data_fetcher.GetSharedMemoryHandleForProcess(
-          CONSUMER_TYPE_ORIENTATION, base::GetCurrentProcessHandle());
-  EXPECT_TRUE(base::SharedMemory::IsHandleValid(handle_orientation));
-
-  EXPECT_TRUE(fake_data_fetcher.StartFetchingDeviceData(
-      CONSUMER_TYPE_MOTION));
-  base::SharedMemoryHandle handle_motion =
-      fake_data_fetcher.GetSharedMemoryHandleForProcess(
-          CONSUMER_TYPE_MOTION, base::GetCurrentProcessHandle());
-  EXPECT_TRUE(base::SharedMemory::IsHandleValid(handle_motion));
-
-  fake_data_fetcher.WaitForStart(CONSUMER_TYPE_ORIENTATION);
-  fake_data_fetcher.WaitForStart(CONSUMER_TYPE_MOTION);
-
-  fake_data_fetcher.WaitForUpdate(CONSUMER_TYPE_ORIENTATION);
-  fake_data_fetcher.WaitForUpdate(CONSUMER_TYPE_MOTION);
-
-  EXPECT_EQ(1, fake_data_fetcher.GetOrientationBuffer()->data.alpha);
-  EXPECT_EQ(kInertialSensorIntervalMillis,
-      fake_data_fetcher.GetMotionBuffer()->data.interval);
-
-  fake_data_fetcher.StopFetchingDeviceData(CONSUMER_TYPE_ORIENTATION);
-  fake_data_fetcher.StopFetchingDeviceData(CONSUMER_TYPE_MOTION);
-  fake_data_fetcher.WaitForStop(CONSUMER_TYPE_ORIENTATION);
-  fake_data_fetcher.WaitForStop(CONSUMER_TYPE_MOTION);
-}
-
-TEST(DataFetcherSharedMemoryBaseTest, DoesNotPollZeroDelay) {
-  FakeZeroDelayPollingDataFetcher fake_data_fetcher;
-  EXPECT_EQ(DataFetcherSharedMemoryBase::FETCHER_TYPE_SEPARATE_THREAD,
-      fake_data_fetcher.GetType());
-
-  EXPECT_TRUE(fake_data_fetcher.StartFetchingDeviceData(
-      CONSUMER_TYPE_ORIENTATION));
-  fake_data_fetcher.WaitForStart(CONSUMER_TYPE_ORIENTATION);
-
-  EXPECT_FALSE(fake_data_fetcher.IsPollingTimerRunningForTesting());
-  EXPECT_EQ(0, fake_data_fetcher.GetOrientationBuffer()->data.alpha);
-
-  fake_data_fetcher.StopFetchingDeviceData(CONSUMER_TYPE_ORIENTATION);
-  fake_data_fetcher.WaitForStop(CONSUMER_TYPE_ORIENTATION);
-}
-
-
-}  // namespace
-
-}  // namespace content
diff --git a/content/browser/device_orientation/data_fetcher_shared_memory_default.cc b/content/browser/device_orientation/data_fetcher_shared_memory_default.cc
deleted file mode 100644
index ce7b567..0000000
--- a/content/browser/device_orientation/data_fetcher_shared_memory_default.cc
+++ /dev/null
@@ -1,76 +0,0 @@
-// Copyright 2013 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 "data_fetcher_shared_memory.h"
-
-#include "base/logging.h"
-#include "base/metrics/histogram.h"
-
-namespace {
-
-static bool SetMotionBuffer(content::DeviceMotionHardwareBuffer* buffer,
-    bool enabled) {
-  if (!buffer)
-    return false;
-  buffer->seqlock.WriteBegin();
-  buffer->data.allAvailableSensorsAreActive = enabled;
-  buffer->seqlock.WriteEnd();
-  return true;
-}
-
-static bool SetOrientationBuffer(
-    content::DeviceOrientationHardwareBuffer* buffer, bool enabled) {
-  if (!buffer)
-    return false;
-  buffer->seqlock.WriteBegin();
-  buffer->data.allAvailableSensorsAreActive = enabled;
-  buffer->seqlock.WriteEnd();
-  return true;
-}
-
-}
-
-namespace content {
-
-DataFetcherSharedMemory::DataFetcherSharedMemory()
-    : motion_buffer_(NULL), orientation_buffer_(NULL) {
-}
-
-DataFetcherSharedMemory::~DataFetcherSharedMemory() {
-}
-
-bool DataFetcherSharedMemory::Start(ConsumerType consumer_type, void* buffer) {
-  DCHECK(buffer);
-
-  switch (consumer_type) {
-    case CONSUMER_TYPE_MOTION:
-      motion_buffer_ = static_cast<DeviceMotionHardwareBuffer*>(buffer);
-      UMA_HISTOGRAM_BOOLEAN("InertialSensor.MotionDefaultAvailable", false);
-      return SetMotionBuffer(motion_buffer_, true);
-    case CONSUMER_TYPE_ORIENTATION:
-      orientation_buffer_ =
-          static_cast<DeviceOrientationHardwareBuffer*>(buffer);
-      UMA_HISTOGRAM_BOOLEAN("InertialSensor.OrientationDefaultAvailable",
-          false);
-      return SetOrientationBuffer(orientation_buffer_, true);
-    default:
-      NOTREACHED();
-  }
-  return false;
-}
-
-bool DataFetcherSharedMemory::Stop(ConsumerType consumer_type) {
-
-  switch (consumer_type) {
-    case CONSUMER_TYPE_MOTION:
-      return SetMotionBuffer(motion_buffer_, false);
-    case CONSUMER_TYPE_ORIENTATION:
-      return SetOrientationBuffer(orientation_buffer_, false);
-    default:
-      NOTREACHED();
-  }
-  return false;
-}
-
-}  // namespace content
diff --git a/content/browser/device_orientation/data_fetcher_shared_memory_mac.cc b/content/browser/device_orientation/data_fetcher_shared_memory_mac.cc
deleted file mode 100644
index 2fb4ec3..0000000
--- a/content/browser/device_orientation/data_fetcher_shared_memory_mac.cc
+++ /dev/null
@@ -1,186 +0,0 @@
-// Copyright 2013 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 "data_fetcher_shared_memory.h"
-
-#include "base/logging.h"
-#include "base/metrics/histogram.h"
-#include "third_party/sudden_motion_sensor/sudden_motion_sensor_mac.h"
-
-namespace {
-
-const double kMeanGravity = 9.80665;
-
-void FetchMotion(SuddenMotionSensor* sensor,
-    content::DeviceMotionHardwareBuffer* buffer) {
-  DCHECK(buffer);
-
-  float axis_value[3];
-  if (!sensor->ReadSensorValues(axis_value))
-    return;
-
-  buffer->seqlock.WriteBegin();
-  buffer->data.accelerationIncludingGravityX = axis_value[0] * kMeanGravity;
-  buffer->data.hasAccelerationIncludingGravityX = true;
-  buffer->data.accelerationIncludingGravityY = axis_value[1] * kMeanGravity;
-  buffer->data.hasAccelerationIncludingGravityY = true;
-  buffer->data.accelerationIncludingGravityZ = axis_value[2] * kMeanGravity;
-  buffer->data.hasAccelerationIncludingGravityZ = true;
-  buffer->data.allAvailableSensorsAreActive = true;
-  buffer->seqlock.WriteEnd();
-}
-
-void FetchOrientation(SuddenMotionSensor* sensor,
-    content::DeviceOrientationHardwareBuffer* buffer) {
-  DCHECK(buffer);
-
-  // Retrieve per-axis calibrated values.
-  float axis_value[3];
-  if (!sensor->ReadSensorValues(axis_value))
-    return;
-
-  // Transform the accelerometer values to W3C draft angles.
-  //
-  // Accelerometer values are just dot products of the sensor axes
-  // by the gravity vector 'g' with the result for the z axis inverted.
-  //
-  // To understand this transformation calculate the 3rd row of the z-x-y
-  // Euler angles rotation matrix (because of the 'g' vector, only 3rd row
-  // affects to the result). Note that z-x-y matrix means R = Ry * Rx * Rz.
-  // Then, assume alpha = 0 and you get this:
-  //
-  // x_acc = sin(gamma)
-  // y_acc = - cos(gamma) * sin(beta)
-  // z_acc = cos(beta) * cos(gamma)
-  //
-  // After that the rest is just a bit of trigonometry.
-  //
-  // Also note that alpha can't be provided but it's assumed to be always zero.
-  // This is necessary in order to provide enough information to solve
-  // the equations.
-  //
-  const double kRad2deg = 180.0 / M_PI;
-  double beta = kRad2deg * atan2(-axis_value[1], axis_value[2]);
-  double gamma = kRad2deg * asin(axis_value[0]);
-
-  // Make sure that the interval boundaries comply with the specification. At
-  // this point, beta is [-180, 180] and gamma is [-90, 90], but the spec has
-  // the upper bound open on both.
-  if (beta == 180.0)
-    beta = -180;  // -180 == 180 (upside-down)
-  if (gamma == 90.0)
-    gamma = nextafter(90, 0);
-
-  // At this point, DCHECKing is paranoia. Never hurts.
-  DCHECK_GE(beta, -180.0);
-  DCHECK_LT(beta,  180.0);
-  DCHECK_GE(gamma, -90.0);
-  DCHECK_LT(gamma,  90.0);
-
-  buffer->seqlock.WriteBegin();
-  buffer->data.beta = beta;
-  buffer->data.hasBeta = true;
-  buffer->data.gamma = gamma;
-  buffer->data.hasGamma = true;
-  buffer->data.allAvailableSensorsAreActive = true;
-  buffer->seqlock.WriteEnd();
-}
-
-}  // namespace
-
-namespace content {
-
-DataFetcherSharedMemory::DataFetcherSharedMemory() {
-}
-
-DataFetcherSharedMemory::~DataFetcherSharedMemory() {
-}
-
-void DataFetcherSharedMemory::Fetch(unsigned consumer_bitmask) {
-  DCHECK(base::MessageLoop::current() == GetPollingMessageLoop());
-  DCHECK(sudden_motion_sensor_);
-  DCHECK(consumer_bitmask & CONSUMER_TYPE_ORIENTATION ||
-         consumer_bitmask & CONSUMER_TYPE_MOTION);
-
-  if (consumer_bitmask & CONSUMER_TYPE_ORIENTATION)
-    FetchOrientation(sudden_motion_sensor_.get(), orientation_buffer_);
-  if (consumer_bitmask & CONSUMER_TYPE_MOTION)
-    FetchMotion(sudden_motion_sensor_.get(), motion_buffer_);
-}
-
-DataFetcherSharedMemory::FetcherType DataFetcherSharedMemory::GetType() const {
-  return FETCHER_TYPE_POLLING_CALLBACK;
-}
-
-bool DataFetcherSharedMemory::Start(ConsumerType consumer_type, void* buffer) {
-  DCHECK(base::MessageLoop::current() == GetPollingMessageLoop());
-  DCHECK(buffer);
-
-  if (!sudden_motion_sensor_)
-    sudden_motion_sensor_.reset(SuddenMotionSensor::Create());
-  bool sudden_motion_sensor_available = sudden_motion_sensor_.get() != NULL;
-
-  switch (consumer_type) {
-    case CONSUMER_TYPE_MOTION:
-      motion_buffer_ = static_cast<DeviceMotionHardwareBuffer*>(buffer);
-      UMA_HISTOGRAM_BOOLEAN("InertialSensor.MotionMacAvailable",
-          sudden_motion_sensor_available);
-      if (!sudden_motion_sensor_available) {
-        // No motion sensor available, fire an all-null event.
-        motion_buffer_->seqlock.WriteBegin();
-        motion_buffer_->data.allAvailableSensorsAreActive = true;
-        motion_buffer_->seqlock.WriteEnd();
-      }
-      return sudden_motion_sensor_available;
-    case CONSUMER_TYPE_ORIENTATION:
-      orientation_buffer_ =
-          static_cast<DeviceOrientationHardwareBuffer*>(buffer);
-      UMA_HISTOGRAM_BOOLEAN("InertialSensor.OrientationMacAvailable",
-          sudden_motion_sensor_available);
-      if (sudden_motion_sensor_available) {
-        // On Mac we cannot provide absolute orientation.
-        orientation_buffer_->seqlock.WriteBegin();
-        orientation_buffer_->data.absolute = false;
-        orientation_buffer_->data.hasAbsolute = true;
-        orientation_buffer_->seqlock.WriteEnd();
-      } else {
-        // No motion sensor available, fire an all-null event.
-        orientation_buffer_->seqlock.WriteBegin();
-        orientation_buffer_->data.allAvailableSensorsAreActive = true;
-        orientation_buffer_->seqlock.WriteEnd();
-      }
-      return sudden_motion_sensor_available;
-    default:
-      NOTREACHED();
-  }
-  return false;
-}
-
-bool DataFetcherSharedMemory::Stop(ConsumerType consumer_type) {
-  DCHECK(base::MessageLoop::current() == GetPollingMessageLoop());
-
-  switch (consumer_type) {
-    case CONSUMER_TYPE_MOTION:
-      if (motion_buffer_) {
-        motion_buffer_->seqlock.WriteBegin();
-        motion_buffer_->data.allAvailableSensorsAreActive = false;
-        motion_buffer_->seqlock.WriteEnd();
-        motion_buffer_ = NULL;
-      }
-      return true;
-    case CONSUMER_TYPE_ORIENTATION:
-      if (orientation_buffer_) {
-        orientation_buffer_->seqlock.WriteBegin();
-        orientation_buffer_->data.allAvailableSensorsAreActive = false;
-        orientation_buffer_->seqlock.WriteEnd();
-        orientation_buffer_ = NULL;
-      }
-      return true;
-    default:
-      NOTREACHED();
-  }
-  return false;
-}
-
-}  // namespace content
diff --git a/content/browser/device_orientation/data_fetcher_shared_memory_win.cc b/content/browser/device_orientation/data_fetcher_shared_memory_win.cc
deleted file mode 100644
index d5cf46a..0000000
--- a/content/browser/device_orientation/data_fetcher_shared_memory_win.cc
+++ /dev/null
@@ -1,398 +0,0 @@
-// Copyright 2013 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 "data_fetcher_shared_memory.h"
-
-#include <GuidDef.h>
-#include <InitGuid.h>
-#include <PortableDeviceTypes.h>
-#include <Sensors.h>
-
-#include "base/logging.h"
-#include "base/metrics/histogram.h"
-#include "base/win/iunknown_impl.h"
-#include "base/win/windows_version.h"
-
-namespace {
-
-const double kMeanGravity = 9.80665;
-
-}  // namespace
-
-
-namespace content {
-
-class DataFetcherSharedMemory::SensorEventSink
-    : public ISensorEvents, public base::win::IUnknownImpl {
- public:
-  SensorEventSink() {}
-  virtual ~SensorEventSink() {}
-
-  // IUnknown interface
-  virtual ULONG STDMETHODCALLTYPE AddRef() OVERRIDE {
-    return IUnknownImpl::AddRef();
-  }
-
-  virtual ULONG STDMETHODCALLTYPE Release() OVERRIDE {
-    return IUnknownImpl::Release();
-  }
-
-  virtual STDMETHODIMP QueryInterface(REFIID riid, void** ppv) OVERRIDE {
-    if (riid == __uuidof(ISensorEvents)) {
-      *ppv = static_cast<ISensorEvents*>(this);
-      AddRef();
-      return S_OK;
-    }
-    return IUnknownImpl::QueryInterface(riid, ppv);
-  }
-
-  // ISensorEvents interface
-  STDMETHODIMP OnEvent(ISensor* sensor,
-                       REFGUID event_id,
-                       IPortableDeviceValues* event_data) OVERRIDE {
-    return S_OK;
-  }
-
-  STDMETHODIMP OnLeave(REFSENSOR_ID sensor_id) OVERRIDE {
-    return S_OK;
-  }
-
-  STDMETHODIMP OnStateChanged(ISensor* sensor, SensorState state) OVERRIDE {
-    return S_OK;
-  }
-
-  STDMETHODIMP OnDataUpdated(ISensor* sensor,
-                             ISensorDataReport* new_data) OVERRIDE {
-    if (NULL == new_data || NULL == sensor)
-      return E_INVALIDARG;
-    return UpdateSharedMemoryBuffer(sensor, new_data) ? S_OK : E_FAIL;
-  }
-
-protected:
-  virtual bool UpdateSharedMemoryBuffer(
-      ISensor* sensor, ISensorDataReport* new_data) = 0;
-
-  void GetSensorValue(REFPROPERTYKEY property, ISensorDataReport* new_data,
-      double* value, bool* has_value) {
-    PROPVARIANT variant_value = {};
-    if (SUCCEEDED(new_data->GetSensorValue(property, &variant_value))) {
-      if (variant_value.vt == VT_R8)
-        *value = variant_value.dblVal;
-      else if (variant_value.vt == VT_R4)
-        *value = variant_value.fltVal;
-      *has_value = true;
-    } else {
-      *value = 0;
-      *has_value = false;
-    }
-  }
-
- private:
-
-  DISALLOW_COPY_AND_ASSIGN(SensorEventSink);
-};
-
-class DataFetcherSharedMemory::SensorEventSinkOrientation
-    : public DataFetcherSharedMemory::SensorEventSink {
- public:
-  explicit SensorEventSinkOrientation(
-      DeviceOrientationHardwareBuffer* const buffer) : buffer_(buffer) {}
-  virtual ~SensorEventSinkOrientation() {}
-
-protected:
-  virtual bool UpdateSharedMemoryBuffer(
-      ISensor* sensor, ISensorDataReport* new_data) OVERRIDE {
-    double alpha, beta, gamma;
-    bool has_alpha, has_beta, has_gamma;
-
-    GetSensorValue(SENSOR_DATA_TYPE_TILT_X_DEGREES, new_data, &alpha,
-        &has_alpha);
-    GetSensorValue(SENSOR_DATA_TYPE_TILT_Y_DEGREES, new_data, &beta,
-        &has_beta);
-    GetSensorValue(SENSOR_DATA_TYPE_TILT_Z_DEGREES, new_data, &gamma,
-        &has_gamma);
-
-    if (buffer_) {
-      buffer_->seqlock.WriteBegin();
-      buffer_->data.alpha = alpha;
-      buffer_->data.hasAlpha = has_alpha;
-      buffer_->data.beta = beta;
-      buffer_->data.hasBeta = has_beta;
-      buffer_->data.gamma = gamma;
-      buffer_->data.hasGamma = has_gamma;
-      buffer_->data.absolute = true;
-      buffer_->data.hasAbsolute = has_alpha || has_beta || has_gamma;
-      buffer_->data.allAvailableSensorsAreActive = true;
-      buffer_->seqlock.WriteEnd();
-    }
-
-    return true;
-  }
-
- private:
-  DeviceOrientationHardwareBuffer* const buffer_;
-
-  DISALLOW_COPY_AND_ASSIGN(SensorEventSinkOrientation);
-};
-
-class DataFetcherSharedMemory::SensorEventSinkMotion
-    : public DataFetcherSharedMemory::SensorEventSink {
- public:
-  explicit SensorEventSinkMotion(DeviceMotionHardwareBuffer* const buffer)
-      : buffer_(buffer) {}
-  virtual ~SensorEventSinkMotion() {}
-
- protected:
-  virtual bool UpdateSharedMemoryBuffer(
-      ISensor* sensor, ISensorDataReport* new_data) OVERRIDE {
-
-    SENSOR_TYPE_ID sensor_type = GUID_NULL;
-    if (!SUCCEEDED(sensor->GetType(&sensor_type)))
-      return false;
-
-    if (IsEqualIID(sensor_type, SENSOR_TYPE_ACCELEROMETER_3D)) {
-      double acceleration_including_gravity_x;
-      double acceleration_including_gravity_y;
-      double acceleration_including_gravity_z;
-      bool has_acceleration_including_gravity_x;
-      bool has_acceleration_including_gravity_y;
-      bool has_acceleration_including_gravity_z;
-
-      GetSensorValue(SENSOR_DATA_TYPE_ACCELERATION_X_G, new_data,
-          &acceleration_including_gravity_x,
-          &has_acceleration_including_gravity_x);
-      GetSensorValue(SENSOR_DATA_TYPE_ACCELERATION_Y_G, new_data,
-          &acceleration_including_gravity_y,
-          &has_acceleration_including_gravity_y);
-      GetSensorValue(SENSOR_DATA_TYPE_ACCELERATION_Z_G, new_data,
-          &acceleration_including_gravity_z,
-          &has_acceleration_including_gravity_z);
-
-      if (buffer_) {
-        buffer_->seqlock.WriteBegin();
-        buffer_->data.accelerationIncludingGravityX =
-            -acceleration_including_gravity_x * kMeanGravity;
-        buffer_->data.hasAccelerationIncludingGravityX =
-            has_acceleration_including_gravity_x;
-        buffer_->data.accelerationIncludingGravityY =
-            -acceleration_including_gravity_y * kMeanGravity;
-        buffer_->data.hasAccelerationIncludingGravityY =
-            has_acceleration_including_gravity_y;
-        buffer_->data.accelerationIncludingGravityZ =
-            -acceleration_including_gravity_z * kMeanGravity;
-        buffer_->data.hasAccelerationIncludingGravityZ =
-            has_acceleration_including_gravity_z;
-        // TODO(timvolodine): consider setting this after all
-        // sensors have fired.
-        buffer_->data.allAvailableSensorsAreActive = true;
-        buffer_->seqlock.WriteEnd();
-      }
-
-    } else if (IsEqualIID(sensor_type, SENSOR_TYPE_GYROMETER_3D)) {
-      double alpha, beta, gamma;
-      bool has_alpha, has_beta, has_gamma;
-
-      GetSensorValue(SENSOR_DATA_TYPE_ANGULAR_VELOCITY_X_DEGREES_PER_SECOND,
-          new_data, &alpha, &has_alpha);
-      GetSensorValue(SENSOR_DATA_TYPE_ANGULAR_VELOCITY_Y_DEGREES_PER_SECOND,
-          new_data, &beta, &has_beta);
-      GetSensorValue(SENSOR_DATA_TYPE_ANGULAR_VELOCITY_Z_DEGREES_PER_SECOND,
-          new_data, &gamma, &has_gamma);
-
-      if (buffer_) {
-        buffer_->seqlock.WriteBegin();
-        buffer_->data.rotationRateAlpha = alpha;
-        buffer_->data.hasRotationRateAlpha = has_alpha;
-        buffer_->data.rotationRateBeta = beta;
-        buffer_->data.hasRotationRateBeta = has_beta;
-        buffer_->data.rotationRateGamma = gamma;
-        buffer_->data.hasRotationRateGamma = has_gamma;
-        buffer_->data.allAvailableSensorsAreActive = true;
-        buffer_->seqlock.WriteEnd();
-      }
-    }
-
-    return true;
-  }
-
-  private:
-   DeviceMotionHardwareBuffer* const buffer_;
-
-   DISALLOW_COPY_AND_ASSIGN(SensorEventSinkMotion);
- };
-
-
-DataFetcherSharedMemory::DataFetcherSharedMemory()
-    : motion_buffer_(NULL),
-      orientation_buffer_(NULL) {
-}
-
-DataFetcherSharedMemory::~DataFetcherSharedMemory() {
-}
-
-DataFetcherSharedMemory::FetcherType DataFetcherSharedMemory::GetType() const {
-  return FETCHER_TYPE_SEPARATE_THREAD;
-}
-
-bool DataFetcherSharedMemory::Start(ConsumerType consumer_type, void* buffer) {
-  DCHECK(buffer);
-
-  switch (consumer_type) {
-    case CONSUMER_TYPE_ORIENTATION:
-      {
-        orientation_buffer_ =
-            static_cast<DeviceOrientationHardwareBuffer*>(buffer);
-        scoped_refptr<SensorEventSink> sink(
-            new SensorEventSinkOrientation(orientation_buffer_));
-        bool inclinometer_available = RegisterForSensor(
-            SENSOR_TYPE_INCLINOMETER_3D, sensor_inclinometer_.Receive(), sink);
-        UMA_HISTOGRAM_BOOLEAN("InertialSensor.InclinometerWindowsAvailable",
-            inclinometer_available);
-        if (inclinometer_available)
-          return true;
-        // if no sensors are available set buffer to ready, to fire null-events.
-        SetBufferAvailableState(consumer_type, true);
-      }
-      break;
-    case CONSUMER_TYPE_MOTION:
-      {
-        motion_buffer_ = static_cast<DeviceMotionHardwareBuffer*>(buffer);
-        scoped_refptr<SensorEventSink> sink(
-            new SensorEventSinkMotion(motion_buffer_));
-        bool accelerometer_available = RegisterForSensor(
-            SENSOR_TYPE_ACCELEROMETER_3D, sensor_accelerometer_.Receive(),
-            sink);
-        bool gyrometer_available = RegisterForSensor(
-            SENSOR_TYPE_GYROMETER_3D, sensor_gyrometer_.Receive(), sink);
-        UMA_HISTOGRAM_BOOLEAN("InertialSensor.AccelerometerWindowsAvailable",
-            accelerometer_available);
-        UMA_HISTOGRAM_BOOLEAN("InertialSensor.GyrometerWindowsAvailable",
-            gyrometer_available);
-        if (accelerometer_available || gyrometer_available) {
-          motion_buffer_->seqlock.WriteBegin();
-          motion_buffer_->data.interval = GetInterval().InMilliseconds();
-          motion_buffer_->seqlock.WriteEnd();
-          return true;
-        }
-        // if no sensors are available set buffer to ready, to fire null-events.
-        SetBufferAvailableState(consumer_type, true);
-      }
-      break;
-    default:
-      NOTREACHED();
-  }
-  return false;
-}
-
-bool DataFetcherSharedMemory::Stop(ConsumerType consumer_type) {
-  DisableSensors(consumer_type);
-  SetBufferAvailableState(consumer_type, false);
-  switch (consumer_type) {
-    case CONSUMER_TYPE_ORIENTATION:
-      orientation_buffer_ = NULL;
-      return true;
-    case CONSUMER_TYPE_MOTION:
-      motion_buffer_ = NULL;
-      return true;
-    default:
-      NOTREACHED();
-  }
-  return false;
-}
-
-bool DataFetcherSharedMemory::RegisterForSensor(
-    REFSENSOR_TYPE_ID sensor_type,
-    ISensor** sensor,
-    scoped_refptr<SensorEventSink> event_sink) {
-  if (base::win::GetVersion() < base::win::VERSION_WIN7)
-    return false;
-
-  base::win::ScopedComPtr<ISensorManager> sensor_manager;
-  HRESULT hr = sensor_manager.CreateInstance(CLSID_SensorManager);
-  if (FAILED(hr) || !sensor_manager)
-    return false;
-
-  base::win::ScopedComPtr<ISensorCollection> sensor_collection;
-  hr = sensor_manager->GetSensorsByType(
-      sensor_type, sensor_collection.Receive());
-
-  if (FAILED(hr) || !sensor_collection)
-    return false;
-
-  ULONG count = 0;
-  hr = sensor_collection->GetCount(&count);
-  if (FAILED(hr) || !count)
-    return false;
-
-  hr = sensor_collection->GetAt(0, sensor);
-  if (FAILED(hr) || !(*sensor))
-    return false;
-
-  base::win::ScopedComPtr<IPortableDeviceValues> device_values;
-  if (SUCCEEDED(device_values.CreateInstance(CLSID_PortableDeviceValues))) {
-    if (SUCCEEDED(device_values->SetUnsignedIntegerValue(
-        SENSOR_PROPERTY_CURRENT_REPORT_INTERVAL,
-        GetInterval().InMilliseconds()))) {
-      base::win::ScopedComPtr<IPortableDeviceValues> return_values;
-      (*sensor)->SetProperties(device_values.get(), return_values.Receive());
-    }
-  }
-
-  base::win::ScopedComPtr<ISensorEvents> sensor_events;
-  hr = event_sink->QueryInterface(
-      __uuidof(ISensorEvents), sensor_events.ReceiveVoid());
-  if (FAILED(hr) || !sensor_events)
-    return false;
-
-  hr = (*sensor)->SetEventSink(sensor_events);
-  if (FAILED(hr))
-    return false;
-
-  return true;
-}
-
-void DataFetcherSharedMemory::DisableSensors(ConsumerType consumer_type) {
-  switch(consumer_type) {
-    case CONSUMER_TYPE_ORIENTATION:
-      if (sensor_inclinometer_) {
-        sensor_inclinometer_->SetEventSink(NULL);
-        sensor_inclinometer_.Release();
-      }
-      break;
-    case CONSUMER_TYPE_MOTION:
-      if (sensor_accelerometer_) {
-        sensor_accelerometer_->SetEventSink(NULL);
-        sensor_accelerometer_.Release();
-      }
-      if (sensor_gyrometer_) {
-        sensor_gyrometer_->SetEventSink(NULL);
-        sensor_gyrometer_.Release();
-      }
-      break;
-    default:
-      NOTREACHED();
-  }
-}
-
-void DataFetcherSharedMemory::SetBufferAvailableState(
-    ConsumerType consumer_type, bool enabled) {
-  switch(consumer_type) {
-    case CONSUMER_TYPE_ORIENTATION:
-      if (orientation_buffer_) {
-        orientation_buffer_->seqlock.WriteBegin();
-        orientation_buffer_->data.allAvailableSensorsAreActive = enabled;
-        orientation_buffer_->seqlock.WriteEnd();
-      }
-    case CONSUMER_TYPE_MOTION:
-      if (motion_buffer_) {
-        motion_buffer_->seqlock.WriteBegin();
-        motion_buffer_->data.allAvailableSensorsAreActive = enabled;
-        motion_buffer_->seqlock.WriteEnd();
-      }
-    default:
-      NOTREACHED();
-  }
-}
-
-}  // namespace content
diff --git a/content/browser/device_orientation/device_inertial_sensor_browsertest.cc b/content/browser/device_orientation/device_inertial_sensor_browsertest.cc
deleted file mode 100644
index 95e124e..0000000
--- a/content/browser/device_orientation/device_inertial_sensor_browsertest.cc
+++ /dev/null
@@ -1,290 +0,0 @@
-// Copyright 2013 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 "base/command_line.h"
-#include "base/synchronization/waitable_event.h"
-#include "base/threading/platform_thread.h"
-#include "content/browser/device_orientation/data_fetcher_shared_memory.h"
-#include "content/browser/device_orientation/device_inertial_sensor_service.h"
-#include "content/common/device_orientation/device_motion_hardware_buffer.h"
-#include "content/common/device_orientation/device_orientation_hardware_buffer.h"
-#include "content/public/browser/browser_thread.h"
-#include "content/public/browser/web_contents.h"
-#include "content/public/common/content_switches.h"
-#include "content/public/test/content_browser_test.h"
-#include "content/public/test/content_browser_test_utils.h"
-#include "content/public/test/test_navigation_observer.h"
-#include "content/public/test/test_utils.h"
-#include "content/shell/browser/shell.h"
-#include "content/shell/browser/shell_javascript_dialog_manager.h"
-
-namespace content {
-
-namespace {
-
-class FakeDataFetcher : public DataFetcherSharedMemory {
- public:
-  FakeDataFetcher()
-      : started_orientation_(false, false),
-        stopped_orientation_(false, false),
-        started_motion_(false, false),
-        stopped_motion_(false, false),
-        sensor_data_available_(true) {
-  }
-  virtual ~FakeDataFetcher() { }
-
-  virtual bool Start(ConsumerType consumer_type, void* buffer) OVERRIDE {
-    EXPECT_TRUE(buffer);
-
-    switch (consumer_type) {
-      case CONSUMER_TYPE_MOTION:
-        {
-          DeviceMotionHardwareBuffer* motion_buffer =
-              static_cast<DeviceMotionHardwareBuffer*>(buffer);
-          if (sensor_data_available_)
-            UpdateMotion(motion_buffer);
-          SetMotionBufferReady(motion_buffer);
-          started_motion_.Signal();
-        }
-        break;
-      case CONSUMER_TYPE_ORIENTATION:
-        {
-          DeviceOrientationHardwareBuffer* orientation_buffer =
-              static_cast<DeviceOrientationHardwareBuffer*>(buffer);
-          if (sensor_data_available_)
-            UpdateOrientation(orientation_buffer);
-          SetOrientationBufferReady(orientation_buffer);
-          started_orientation_.Signal();
-        }
-        break;
-      default:
-        return false;
-    }
-    return true;
-  }
-
-  virtual bool Stop(ConsumerType consumer_type) OVERRIDE {
-    switch (consumer_type) {
-      case CONSUMER_TYPE_MOTION:
-        stopped_motion_.Signal();
-        break;
-      case CONSUMER_TYPE_ORIENTATION:
-        stopped_orientation_.Signal();
-        break;
-      default:
-        return false;
-    }
-    return true;
-  }
-
-  virtual void Fetch(unsigned consumer_bitmask) OVERRIDE {
-    FAIL() << "fetch should not be called";
-  }
-
-  virtual FetcherType GetType() const OVERRIDE {
-    return FETCHER_TYPE_DEFAULT;
-  }
-
-  void SetSensorDataAvailable(bool available) {
-    sensor_data_available_ = available;
-  }
-
-  void SetMotionBufferReady(DeviceMotionHardwareBuffer* buffer) {
-    buffer->seqlock.WriteBegin();
-    buffer->data.allAvailableSensorsAreActive = true;
-    buffer->seqlock.WriteEnd();
-  }
-
-  void SetOrientationBufferReady(DeviceOrientationHardwareBuffer* buffer) {
-    buffer->seqlock.WriteBegin();
-    buffer->data.allAvailableSensorsAreActive = true;
-    buffer->seqlock.WriteEnd();
-  }
-
-  void UpdateMotion(DeviceMotionHardwareBuffer* buffer) {
-    buffer->seqlock.WriteBegin();
-    buffer->data.accelerationX = 1;
-    buffer->data.hasAccelerationX = true;
-    buffer->data.accelerationY = 2;
-    buffer->data.hasAccelerationY = true;
-    buffer->data.accelerationZ = 3;
-    buffer->data.hasAccelerationZ = true;
-
-    buffer->data.accelerationIncludingGravityX = 4;
-    buffer->data.hasAccelerationIncludingGravityX = true;
-    buffer->data.accelerationIncludingGravityY = 5;
-    buffer->data.hasAccelerationIncludingGravityY = true;
-    buffer->data.accelerationIncludingGravityZ = 6;
-    buffer->data.hasAccelerationIncludingGravityZ = true;
-
-    buffer->data.rotationRateAlpha = 7;
-    buffer->data.hasRotationRateAlpha = true;
-    buffer->data.rotationRateBeta = 8;
-    buffer->data.hasRotationRateBeta = true;
-    buffer->data.rotationRateGamma = 9;
-    buffer->data.hasRotationRateGamma = true;
-
-    buffer->data.interval = 100;
-    buffer->data.allAvailableSensorsAreActive = true;
-    buffer->seqlock.WriteEnd();
-  }
-
-  void UpdateOrientation(DeviceOrientationHardwareBuffer* buffer) {
-    buffer->seqlock.WriteBegin();
-    buffer->data.alpha = 1;
-    buffer->data.hasAlpha = true;
-    buffer->data.beta = 2;
-    buffer->data.hasBeta = true;
-    buffer->data.gamma = 3;
-    buffer->data.hasGamma = true;
-    buffer->data.allAvailableSensorsAreActive = true;
-    buffer->seqlock.WriteEnd();
-  }
-
-  base::WaitableEvent started_orientation_;
-  base::WaitableEvent stopped_orientation_;
-  base::WaitableEvent started_motion_;
-  base::WaitableEvent stopped_motion_;
-  bool sensor_data_available_;
-
- private:
-
-  DISALLOW_COPY_AND_ASSIGN(FakeDataFetcher);
-};
-
-
-class DeviceInertialSensorBrowserTest : public ContentBrowserTest  {
- public:
-  DeviceInertialSensorBrowserTest()
-      : fetcher_(NULL),
-        io_loop_finished_event_(false, false) {
-  }
-
-  virtual void SetUpOnMainThread() OVERRIDE {
-    BrowserThread::PostTask(
-        BrowserThread::IO, FROM_HERE,
-        base::Bind(&DeviceInertialSensorBrowserTest::SetUpOnIOThread, this));
-    io_loop_finished_event_.Wait();
-  }
-
-  void SetUpOnIOThread() {
-    fetcher_ = new FakeDataFetcher();
-    DeviceInertialSensorService::GetInstance()->
-        SetDataFetcherForTests(fetcher_);
-    io_loop_finished_event_.Signal();
-  }
-
-  void DelayAndQuit(base::TimeDelta delay) {
-    base::PlatformThread::Sleep(delay);
-    base::MessageLoop::current()->QuitWhenIdle();
-  }
-
-  void WaitForAlertDialogAndQuitAfterDelay(base::TimeDelta delay) {
-    ShellJavaScriptDialogManager* dialog_manager=
-        static_cast<ShellJavaScriptDialogManager*>(
-            shell()->GetJavaScriptDialogManager());
-
-    scoped_refptr<MessageLoopRunner> runner = new MessageLoopRunner();
-    dialog_manager->set_dialog_request_callback(
-        base::Bind(&DeviceInertialSensorBrowserTest::DelayAndQuit, this,
-            delay));
-    runner->Run();
-  }
-
-  FakeDataFetcher* fetcher_;
-
- private:
-  base::WaitableEvent io_loop_finished_event_;
-};
-
-
-IN_PROC_BROWSER_TEST_F(DeviceInertialSensorBrowserTest, OrientationTest) {
-  // The test page will register an event handler for orientation events,
-  // expects to get an event with fake values, then removes the event
-  // handler and navigates to #pass.
-  GURL test_url = GetTestUrl(
-      "device_orientation", "device_orientation_test.html");
-  NavigateToURLBlockUntilNavigationsComplete(shell(), test_url, 2);
-
-  EXPECT_EQ("pass", shell()->web_contents()->GetLastCommittedURL().ref());
-  fetcher_->started_orientation_.Wait();
-  fetcher_->stopped_orientation_.Wait();
-}
-
-IN_PROC_BROWSER_TEST_F(DeviceInertialSensorBrowserTest, MotionTest) {
-  // The test page will register an event handler for motion events,
-  // expects to get an event with fake values, then removes the event
-  // handler and navigates to #pass.
-  GURL test_url = GetTestUrl(
-      "device_orientation", "device_motion_test.html");
-  NavigateToURLBlockUntilNavigationsComplete(shell(), test_url, 2);
-
-  EXPECT_EQ("pass", shell()->web_contents()->GetLastCommittedURL().ref());
-  fetcher_->started_motion_.Wait();
-  fetcher_->stopped_motion_.Wait();
-}
-
-// Flaking in the android try bot. See http://crbug.com/360578.
-#if defined(OS_ANDROID)
-#define MAYBE_OrientationNullTestWithAlert DISABLED_OrientationNullTestWithAlert
-#else
-#define MAYBE_OrientationNullTestWithAlert OrientationNullTestWithAlert
-#endif
-IN_PROC_BROWSER_TEST_F(DeviceInertialSensorBrowserTest,
-    MAYBE_OrientationNullTestWithAlert) {
-  // The test page will register an event handler for orientation events,
-  // expects to get an event with null values. The test raises a modal alert
-  // dialog with a delay to test that the one-off null-event still propagates
-  // to window after the alert is dismissed and the callback is invoked which
-  // navigates to #pass.
-  fetcher_->SetSensorDataAvailable(false);
-  TestNavigationObserver same_tab_observer(shell()->web_contents(), 2);
-
-  GURL test_url = GetTestUrl(
-      "device_orientation", "device_orientation_null_test_with_alert.html");
-  shell()->LoadURL(test_url);
-
-  // TODO(timvolodine): investigate if it is possible to test this without
-  // delay, crbug.com/360044.
-  WaitForAlertDialogAndQuitAfterDelay(base::TimeDelta::FromMilliseconds(1000));
-
-  fetcher_->started_orientation_.Wait();
-  fetcher_->stopped_orientation_.Wait();
-  same_tab_observer.Wait();
-  EXPECT_EQ("pass", shell()->web_contents()->GetLastCommittedURL().ref());
-}
-
-// Flaking in the android try bot. See http://crbug.com/360578.
-#if defined(OS_ANDROID)
-#define MAYBE_MotionNullTestWithAlert DISABLED_MotionNullTestWithAlert
-#else
-#define MAYBE_MotionNullTestWithAlert MotionNullTestWithAlert
-#endif
-IN_PROC_BROWSER_TEST_F(DeviceInertialSensorBrowserTest,
-    MAYBE_MotionNullTestWithAlert) {
-  // The test page will register an event handler for motion events,
-  // expects to get an event with null values. The test raises a modal alert
-  // dialog with a delay to test that the one-off null-event still propagates
-  // to window after the alert is dismissed and the callback is invoked which
-  // navigates to #pass.
-  fetcher_->SetSensorDataAvailable(false);
-  TestNavigationObserver same_tab_observer(shell()->web_contents(), 2);
-
-  GURL test_url = GetTestUrl(
-      "device_orientation", "device_motion_null_test_with_alert.html");
-  shell()->LoadURL(test_url);
-
-  // TODO(timvolodine): investigate if it is possible to test this without
-  // delay, crbug.com/360044.
-  WaitForAlertDialogAndQuitAfterDelay(base::TimeDelta::FromMilliseconds(1000));
-
-  fetcher_->started_motion_.Wait();
-  fetcher_->stopped_motion_.Wait();
-  same_tab_observer.Wait();
-  EXPECT_EQ("pass", shell()->web_contents()->GetLastCommittedURL().ref());
-}
-
-} //  namespace
-
-} //  namespace content
diff --git a/content/browser/device_orientation/device_inertial_sensor_service.cc b/content/browser/device_orientation/device_inertial_sensor_service.cc
deleted file mode 100644
index cb8bbf3..0000000
--- a/content/browser/device_orientation/device_inertial_sensor_service.cc
+++ /dev/null
@@ -1,99 +0,0 @@
-// Copyright 2013 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 "content/browser/device_orientation/device_inertial_sensor_service.h"
-
-#include "base/bind.h"
-#include "base/logging.h"
-#include "base/memory/singleton.h"
-#include "content/browser/device_orientation/data_fetcher_shared_memory.h"
-#include "content/public/browser/render_process_host.h"
-
-namespace content {
-
-DeviceInertialSensorService::DeviceInertialSensorService()
-    : num_motion_readers_(0),
-      num_orientation_readers_(0),
-      is_shutdown_(false) {
-}
-
-DeviceInertialSensorService::~DeviceInertialSensorService() {
-}
-
-DeviceInertialSensorService* DeviceInertialSensorService::GetInstance() {
-  return Singleton<DeviceInertialSensorService,
-                   LeakySingletonTraits<DeviceInertialSensorService> >::get();
-}
-
-void DeviceInertialSensorService::AddConsumer(ConsumerType consumer_type) {
-  if (!ChangeNumberConsumers(consumer_type, 1))
-    return;
-
-  DCHECK(GetNumberConsumers(consumer_type));
-
-  if (!data_fetcher_)
-    data_fetcher_.reset(new DataFetcherSharedMemory);
-  data_fetcher_->StartFetchingDeviceData(consumer_type);
-}
-
-void DeviceInertialSensorService::RemoveConsumer(ConsumerType consumer_type) {
-  if (!ChangeNumberConsumers(consumer_type, -1))
-    return;
-
-  if (GetNumberConsumers(consumer_type) == 0)
-    data_fetcher_->StopFetchingDeviceData(consumer_type);
-}
-
-bool DeviceInertialSensorService::ChangeNumberConsumers(
-    ConsumerType consumer_type, int delta) {
-  DCHECK(thread_checker_.CalledOnValidThread());
-  if (is_shutdown_)
-    return false;
-
-  switch (consumer_type) {
-    case CONSUMER_TYPE_MOTION:
-      num_motion_readers_ += delta;
-      DCHECK(num_motion_readers_ >= 0);
-      return true;
-    case CONSUMER_TYPE_ORIENTATION:
-      num_orientation_readers_ += delta;
-      DCHECK(num_orientation_readers_ >= 0);
-      return true;
-    default:
-      NOTREACHED();
-  }
-  return false;
-}
-
-int DeviceInertialSensorService::GetNumberConsumers(
-    ConsumerType consumer_type) const {
-  switch (consumer_type) {
-    case CONSUMER_TYPE_MOTION:
-      return num_motion_readers_;
-    case CONSUMER_TYPE_ORIENTATION:
-      return num_orientation_readers_;
-    default:
-      NOTREACHED();
-  }
-  return 0;
-}
-
-base::SharedMemoryHandle
-DeviceInertialSensorService::GetSharedMemoryHandleForProcess(
-    ConsumerType consumer_type, base::ProcessHandle handle) {
-  DCHECK(thread_checker_.CalledOnValidThread());
-  return data_fetcher_->GetSharedMemoryHandleForProcess(consumer_type, handle);
-}
-
-void DeviceInertialSensorService::Shutdown() {
-  data_fetcher_.reset();
-  is_shutdown_ = true;
-}
-
-void DeviceInertialSensorService::SetDataFetcherForTests(
-    DataFetcherSharedMemory* test_data_fetcher) {
-  data_fetcher_.reset(test_data_fetcher);
-}
-
-}  // namespace content
diff --git a/content/browser/device_orientation/device_inertial_sensor_service.h b/content/browser/device_orientation/device_inertial_sensor_service.h
deleted file mode 100644
index 1c7c162..0000000
--- a/content/browser/device_orientation/device_inertial_sensor_service.h
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright 2013 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 CONTENT_BROWSER_DEVICE_ORIENTATION_DEVICE_INERTIAL_SENSOR_SERVICE_H_
-#define CONTENT_BROWSER_DEVICE_ORIENTATION_DEVICE_INERTIAL_SENSOR_SERVICE_H_
-
-#include "base/basictypes.h"
-#include "base/callback_forward.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/memory/shared_memory.h"
-#include "base/memory/singleton.h"
-#include "base/threading/thread_checker.h"
-#include "content/browser/device_orientation/inertial_sensor_consts.h"
-#include "content/common/content_export.h"
-
-namespace content {
-
-class DataFetcherSharedMemory;
-class RenderProcessHost;
-
-// Owns the DeviceMotionProvider (the background polling thread) and keeps
-// track of the number of consumers currently using the data (and pausing
-// the provider when not in use).
-class CONTENT_EXPORT DeviceInertialSensorService {
- public:
-  // Returns the DeviceInertialSensorService singleton.
-  static DeviceInertialSensorService* GetInstance();
-
-  // Increments the number of users of the provider. The Provider is running
-  // when there's > 0 users, and is paused when the count drops to 0.
-  // Must be called on the I/O thread.
-  void AddConsumer(ConsumerType consumer_type);
-
-  // Removes a consumer. Should be matched with an AddConsumer call.
-  // Must be called on the I/O thread.
-  void RemoveConsumer(ConsumerType cosumer_type);
-
-  // Returns the shared memory handle of the device motion data duplicated
-  // into the given process.
-  base::SharedMemoryHandle GetSharedMemoryHandleForProcess(
-      ConsumerType consumer_type, base::ProcessHandle handle);
-
-  // Stop/join with the background polling thread in |provider_|.
-  void Shutdown();
-
-  // Injects a custom data fetcher for testing purposes. This class takes
-  // ownership of the injected object.
-  void SetDataFetcherForTests(DataFetcherSharedMemory* test_data_fetcher);
-
- private:
-  friend struct DefaultSingletonTraits<DeviceInertialSensorService>;
-
-  DeviceInertialSensorService();
-  virtual ~DeviceInertialSensorService();
-
-  bool ChangeNumberConsumers(ConsumerType consumer_type,
-      int delta);
-  int GetNumberConsumers(ConsumerType consumer_type) const;
-
-  int num_motion_readers_;
-  int num_orientation_readers_;
-  bool is_shutdown_;
-  scoped_ptr<DataFetcherSharedMemory> data_fetcher_;
-  base::ThreadChecker thread_checker_;
-
-  DISALLOW_COPY_AND_ASSIGN(DeviceInertialSensorService);
-};
-
-}  // namespace content
-
-#endif  // CONTENT_BROWSER_DEVICE_ORIENTATION_DEVICE_INERTIAL_SENSOR_SERVICE_H_
diff --git a/content/browser/device_orientation/device_motion_message_filter.cc b/content/browser/device_orientation/device_motion_message_filter.cc
deleted file mode 100644
index 99b0bdb..0000000
--- a/content/browser/device_orientation/device_motion_message_filter.cc
+++ /dev/null
@@ -1,66 +0,0 @@
-// Copyright 2013 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 "content/browser/device_orientation/device_motion_message_filter.h"
-
-#include "content/browser/device_orientation/device_inertial_sensor_service.h"
-#include "content/common/device_orientation/device_motion_messages.h"
-
-namespace content {
-
-DeviceMotionMessageFilter::DeviceMotionMessageFilter()
-    : BrowserMessageFilter(DeviceMotionMsgStart),
-      is_started_(false) {
-}
-
-DeviceMotionMessageFilter::~DeviceMotionMessageFilter() {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
-  if (is_started_)
-    DeviceInertialSensorService::GetInstance()->RemoveConsumer(
-        CONSUMER_TYPE_MOTION);
-}
-
-bool DeviceMotionMessageFilter::OnMessageReceived(
-    const IPC::Message& message,
-    bool* message_was_ok) {
-  bool handled = true;
-  IPC_BEGIN_MESSAGE_MAP_EX(DeviceMotionMessageFilter,
-                           message,
-                           *message_was_ok)
-    IPC_MESSAGE_HANDLER(DeviceMotionHostMsg_StartPolling,
-                        OnDeviceMotionStartPolling)
-    IPC_MESSAGE_HANDLER(DeviceMotionHostMsg_StopPolling,
-                        OnDeviceMotionStopPolling)
-    IPC_MESSAGE_UNHANDLED(handled = false)
-  IPC_END_MESSAGE_MAP_EX()
-  return handled;
-}
-
-void DeviceMotionMessageFilter::OnDeviceMotionStartPolling() {
-  DCHECK(!is_started_);
-  if (is_started_)
-    return;
-  is_started_ = true;
-  DeviceInertialSensorService::GetInstance()->AddConsumer(
-      CONSUMER_TYPE_MOTION);
-  DidStartDeviceMotionPolling();
-}
-
-void DeviceMotionMessageFilter::OnDeviceMotionStopPolling() {
-  DCHECK(is_started_);
-  if (!is_started_)
-    return;
-  is_started_ = false;
-  DeviceInertialSensorService::GetInstance()->RemoveConsumer(
-      CONSUMER_TYPE_MOTION);
-}
-
-void DeviceMotionMessageFilter::DidStartDeviceMotionPolling() {
-  Send(new DeviceMotionMsg_DidStartPolling(
-      DeviceInertialSensorService::GetInstance()->
-          GetSharedMemoryHandleForProcess(
-              CONSUMER_TYPE_MOTION, PeerHandle())));
-}
-
-}  // namespace content
diff --git a/content/browser/device_orientation/device_motion_message_filter.h b/content/browser/device_orientation/device_motion_message_filter.h
deleted file mode 100644
index 3d078e3..0000000
--- a/content/browser/device_orientation/device_motion_message_filter.h
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright 2013 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 CONTENT_BROWSER_RENDERER_HOST_DEVICE_MOTION_MESSAGE_FILTER_H_
-#define CONTENT_BROWSER_RENDERER_HOST_DEVICE_MOTION_MESSAGE_FILTER_H_
-
-#include "base/compiler_specific.h"
-#include "content/public/browser/browser_message_filter.h"
-
-namespace content {
-
-class DeviceMotionService;
-class RenderProcessHost;
-
-class DeviceMotionMessageFilter : public BrowserMessageFilter {
- public:
-  DeviceMotionMessageFilter();
-
-  // BrowserMessageFilter implementation.
-  virtual bool OnMessageReceived(const IPC::Message& message,
-                                 bool* message_was_ok) OVERRIDE;
-
- private:
-  virtual ~DeviceMotionMessageFilter();
-
-  void OnDeviceMotionStartPolling();
-  void OnDeviceMotionStopPolling();
-  void DidStartDeviceMotionPolling();
-
-  bool is_started_;
-
-  DISALLOW_COPY_AND_ASSIGN(DeviceMotionMessageFilter);
-};
-
-}  // namespace content
-
-#endif  // CONTENT_BROWSER_RENDERER_HOST_DEVICE_MOTION_MESSAGE_FILTER_H_
diff --git a/content/browser/device_orientation/device_orientation_message_filter.cc b/content/browser/device_orientation/device_orientation_message_filter.cc
deleted file mode 100644
index dbbb0ce..0000000
--- a/content/browser/device_orientation/device_orientation_message_filter.cc
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright 2013 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 "content/browser/device_orientation/device_orientation_message_filter.h"
-
-#include "content/browser/device_orientation/device_inertial_sensor_service.h"
-#include "content/common/device_orientation/device_orientation_messages.h"
-
-namespace content {
-
-DeviceOrientationMessageFilter::DeviceOrientationMessageFilter()
-    : BrowserMessageFilter(DeviceOrientationMsgStart),
-      is_started_(false) {
-}
-
-DeviceOrientationMessageFilter::~DeviceOrientationMessageFilter() {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
-  if (is_started_)
-    DeviceInertialSensorService::GetInstance()->RemoveConsumer(
-        CONSUMER_TYPE_ORIENTATION);
-}
-
-bool DeviceOrientationMessageFilter::OnMessageReceived(
-    const IPC::Message& message,
-    bool* message_was_ok) {
-  bool handled = true;
-  IPC_BEGIN_MESSAGE_MAP_EX(DeviceOrientationMessageFilter,
-                           message,
-                           *message_was_ok)
-    IPC_MESSAGE_HANDLER(DeviceOrientationHostMsg_StartPolling,
-                        OnDeviceOrientationStartPolling)
-    IPC_MESSAGE_HANDLER(DeviceOrientationHostMsg_StopPolling,
-                        OnDeviceOrientationStopPolling)
-    IPC_MESSAGE_UNHANDLED(handled = false)
-  IPC_END_MESSAGE_MAP_EX()
-  return handled;
-}
-
-void DeviceOrientationMessageFilter::OnDeviceOrientationStartPolling() {
-  DCHECK(!is_started_);
-  if (is_started_)
-    return;
-  is_started_ = true;
-  DeviceInertialSensorService::GetInstance()->AddConsumer(
-      CONSUMER_TYPE_ORIENTATION);
-  DidStartDeviceOrientationPolling();
-}
-
-void DeviceOrientationMessageFilter::OnDeviceOrientationStopPolling() {
-  DCHECK(is_started_);
-  if (!is_started_)
-    return;
-  is_started_ = false;
-  DeviceInertialSensorService::GetInstance()->RemoveConsumer(
-      CONSUMER_TYPE_ORIENTATION);
-}
-
-void DeviceOrientationMessageFilter::DidStartDeviceOrientationPolling() {
-  Send(new DeviceOrientationMsg_DidStartPolling(
-      DeviceInertialSensorService::GetInstance()->
-          GetSharedMemoryHandleForProcess(
-              CONSUMER_TYPE_ORIENTATION,
-              PeerHandle())));
-}
-
-}  // namespace content
diff --git a/content/browser/device_orientation/device_orientation_message_filter.h b/content/browser/device_orientation/device_orientation_message_filter.h
deleted file mode 100644
index b8ccb84..0000000
--- a/content/browser/device_orientation/device_orientation_message_filter.h
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2013 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 CONTENT_BROWSER_DEVICE_ORIENTATION_DEVICE_ORIENTATION_MESSAGE_FILTER_H_
-#define CONTENT_BROWSER_DEVICE_ORIENTATION_DEVICE_ORIENTATION_MESSAGE_FILTER_H_
-
-#include "base/compiler_specific.h"
-#include "content/public/browser/browser_message_filter.h"
-
-namespace content {
-
-class RenderProcessHost;
-
-class DeviceOrientationMessageFilter : public BrowserMessageFilter {
- public:
-  DeviceOrientationMessageFilter();
-
-  // BrowserMessageFilter implementation.
-  virtual bool OnMessageReceived(const IPC::Message& message,
-                                 bool* message_was_ok) OVERRIDE;
-
- private:
-  virtual ~DeviceOrientationMessageFilter();
-
-  void OnDeviceOrientationStartPolling();
-  void OnDeviceOrientationStopPolling();
-  void DidStartDeviceOrientationPolling();
-
-  bool is_started_;
-
-  DISALLOW_COPY_AND_ASSIGN(DeviceOrientationMessageFilter);
-};
-
-}  // namespace content
-
-#endif  // CONTENT_BROWSER_DEVICE_ORIENTATION_DEVICE_ORIENTATION_MESSAGE_FILTER_H_
diff --git a/content/browser/device_orientation/inertial_sensor_consts.h b/content/browser/device_orientation/inertial_sensor_consts.h
deleted file mode 100644
index 6a37fc8..0000000
--- a/content/browser/device_orientation/inertial_sensor_consts.h
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright 2013 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 CONTENT_BROWSER_DEVICE_ORIENTATION_INERTIAL_SENSOR_CONSTS_H_
-#define CONTENT_BROWSER_DEVICE_ORIENTATION_INERTIAL_SENSOR_CONSTS_H_
-
-namespace content {
-
-// Constants related to the Device Motion/Device Orientation APIs.
-
-enum ConsumerType {
-  CONSUMER_TYPE_MOTION = 1 << 0,
-  CONSUMER_TYPE_ORIENTATION = 1 << 1,
-};
-
-// Specifies the minimal interval between subsequent sensor data updates.
-// Note that when changing this value it is desirable to have an adequate
-// matching value |DeviceSensorEventPump::kDefaultPumpDelayMillis| in
-// content/renderer/device_orientation/device_sensor_event_pump.cc.
-const int kInertialSensorIntervalMillis = 50;
-
-}  // namespace content
-
-#endif  // CONTENT_BROWSER_DEVICE_ORIENTATION_INERTIAL_SENSOR_CONSTS_H_
diff --git a/content/browser/device_orientation/sensor_manager_android.cc b/content/browser/device_orientation/sensor_manager_android.cc
deleted file mode 100644
index cec2c5e..0000000
--- a/content/browser/device_orientation/sensor_manager_android.cc
+++ /dev/null
@@ -1,276 +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.
-
-#include "content/browser/device_orientation/sensor_manager_android.h"
-
-#include <string.h>
-
-#include "base/android/jni_android.h"
-#include "base/memory/singleton.h"
-#include "base/metrics/histogram.h"
-#include "content/browser/device_orientation/inertial_sensor_consts.h"
-#include "jni/DeviceMotionAndOrientation_jni.h"
-
-using base::android::AttachCurrentThread;
-
-namespace {
-
-static void updateRotationVectorHistogram(bool value) {
-  UMA_HISTOGRAM_BOOLEAN("InertialSensor.RotationVectorAndroidAvailable", value);
-}
-
-}
-
-namespace content {
-
-SensorManagerAndroid::SensorManagerAndroid()
-    : number_active_device_motion_sensors_(0),
-      device_motion_buffer_(NULL),
-      device_orientation_buffer_(NULL),
-      is_motion_buffer_ready_(false),
-      is_orientation_buffer_ready_(false) {
-  memset(received_motion_data_, 0, sizeof(received_motion_data_));
-  device_orientation_.Reset(
-      Java_DeviceMotionAndOrientation_getInstance(
-          AttachCurrentThread(),
-          base::android::GetApplicationContext()));
-}
-
-SensorManagerAndroid::~SensorManagerAndroid() {
-}
-
-bool SensorManagerAndroid::Register(JNIEnv* env) {
-  return RegisterNativesImpl(env);
-}
-
-SensorManagerAndroid* SensorManagerAndroid::GetInstance() {
-  return Singleton<SensorManagerAndroid,
-                   LeakySingletonTraits<SensorManagerAndroid> >::get();
-}
-
-void SensorManagerAndroid::GotOrientation(
-    JNIEnv*, jobject, double alpha, double beta, double gamma) {
-  base::AutoLock autolock(orientation_buffer_lock_);
-
-  if (!device_orientation_buffer_)
-    return;
-
-  device_orientation_buffer_->seqlock.WriteBegin();
-  device_orientation_buffer_->data.alpha = alpha;
-  device_orientation_buffer_->data.hasAlpha = true;
-  device_orientation_buffer_->data.beta = beta;
-  device_orientation_buffer_->data.hasBeta = true;
-  device_orientation_buffer_->data.gamma = gamma;
-  device_orientation_buffer_->data.hasGamma = true;
-  device_orientation_buffer_->seqlock.WriteEnd();
-
-  if (!is_orientation_buffer_ready_) {
-    SetOrientationBufferReadyStatus(true);
-    updateRotationVectorHistogram(true);
-  }
-}
-
-void SensorManagerAndroid::GotAcceleration(
-    JNIEnv*, jobject, double x, double y, double z) {
-  base::AutoLock autolock(motion_buffer_lock_);
-
-  if (!device_motion_buffer_)
-    return;
-
-  device_motion_buffer_->seqlock.WriteBegin();
-  device_motion_buffer_->data.accelerationX = x;
-  device_motion_buffer_->data.hasAccelerationX = true;
-  device_motion_buffer_->data.accelerationY = y;
-  device_motion_buffer_->data.hasAccelerationY = true;
-  device_motion_buffer_->data.accelerationZ = z;
-  device_motion_buffer_->data.hasAccelerationZ = true;
-  device_motion_buffer_->seqlock.WriteEnd();
-
-  if (!is_motion_buffer_ready_) {
-    received_motion_data_[RECEIVED_MOTION_DATA_ACCELERATION] = 1;
-    CheckMotionBufferReadyToRead();
-  }
-}
-
-void SensorManagerAndroid::GotAccelerationIncludingGravity(
-    JNIEnv*, jobject, double x, double y, double z) {
-  base::AutoLock autolock(motion_buffer_lock_);
-
-  if (!device_motion_buffer_)
-    return;
-
-  device_motion_buffer_->seqlock.WriteBegin();
-  device_motion_buffer_->data.accelerationIncludingGravityX = x;
-  device_motion_buffer_->data.hasAccelerationIncludingGravityX = true;
-  device_motion_buffer_->data.accelerationIncludingGravityY = y;
-  device_motion_buffer_->data.hasAccelerationIncludingGravityY = true;
-  device_motion_buffer_->data.accelerationIncludingGravityZ = z;
-  device_motion_buffer_->data.hasAccelerationIncludingGravityZ = true;
-  device_motion_buffer_->seqlock.WriteEnd();
-
-  if (!is_motion_buffer_ready_) {
-    received_motion_data_[RECEIVED_MOTION_DATA_ACCELERATION_INCL_GRAVITY] = 1;
-    CheckMotionBufferReadyToRead();
-  }
-}
-
-void SensorManagerAndroid::GotRotationRate(
-    JNIEnv*, jobject, double alpha, double beta, double gamma) {
-  base::AutoLock autolock(motion_buffer_lock_);
-
-  if (!device_motion_buffer_)
-    return;
-
-  device_motion_buffer_->seqlock.WriteBegin();
-  device_motion_buffer_->data.rotationRateAlpha = alpha;
-  device_motion_buffer_->data.hasRotationRateAlpha = true;
-  device_motion_buffer_->data.rotationRateBeta = beta;
-  device_motion_buffer_->data.hasRotationRateBeta = true;
-  device_motion_buffer_->data.rotationRateGamma = gamma;
-  device_motion_buffer_->data.hasRotationRateGamma = true;
-  device_motion_buffer_->seqlock.WriteEnd();
-
-  if (!is_motion_buffer_ready_) {
-    received_motion_data_[RECEIVED_MOTION_DATA_ROTATION_RATE] = 1;
-    CheckMotionBufferReadyToRead();
-  }
-}
-
-bool SensorManagerAndroid::Start(EventType event_type) {
-  DCHECK(!device_orientation_.is_null());
-  return Java_DeviceMotionAndOrientation_start(
-      AttachCurrentThread(), device_orientation_.obj(),
-      reinterpret_cast<intptr_t>(this), static_cast<jint>(event_type),
-      kInertialSensorIntervalMillis);
-}
-
-void SensorManagerAndroid::Stop(EventType event_type) {
-  DCHECK(!device_orientation_.is_null());
-  Java_DeviceMotionAndOrientation_stop(
-      AttachCurrentThread(), device_orientation_.obj(),
-      static_cast<jint>(event_type));
-}
-
-int SensorManagerAndroid::GetNumberActiveDeviceMotionSensors() {
-  DCHECK(!device_orientation_.is_null());
-  return Java_DeviceMotionAndOrientation_getNumberActiveDeviceMotionSensors(
-      AttachCurrentThread(), device_orientation_.obj());
-}
-
-
-// ----- Shared memory API methods
-
-// --- Device Motion
-
-bool SensorManagerAndroid::StartFetchingDeviceMotionData(
-    DeviceMotionHardwareBuffer* buffer) {
-  DCHECK(buffer);
-  {
-    base::AutoLock autolock(motion_buffer_lock_);
-    device_motion_buffer_ = buffer;
-    ClearInternalMotionBuffers();
-  }
-  bool success = Start(kTypeMotion);
-
-  // If no motion data can ever be provided, the number of active device motion
-  // sensors will be zero. In that case flag the shared memory buffer
-  // as ready to read, as it will not change anyway.
-  number_active_device_motion_sensors_ = GetNumberActiveDeviceMotionSensors();
-  {
-    base::AutoLock autolock(motion_buffer_lock_);
-    CheckMotionBufferReadyToRead();
-  }
-  return success;
-}
-
-void SensorManagerAndroid::StopFetchingDeviceMotionData() {
-  Stop(kTypeMotion);
-  {
-    base::AutoLock autolock(motion_buffer_lock_);
-    if (device_motion_buffer_) {
-      ClearInternalMotionBuffers();
-      device_motion_buffer_ = NULL;
-    }
-  }
-}
-
-void SensorManagerAndroid::CheckMotionBufferReadyToRead() {
-  if (received_motion_data_[RECEIVED_MOTION_DATA_ACCELERATION] +
-      received_motion_data_[RECEIVED_MOTION_DATA_ACCELERATION_INCL_GRAVITY] +
-      received_motion_data_[RECEIVED_MOTION_DATA_ROTATION_RATE] ==
-      number_active_device_motion_sensors_) {
-    device_motion_buffer_->seqlock.WriteBegin();
-    device_motion_buffer_->data.interval = kInertialSensorIntervalMillis;
-    device_motion_buffer_->seqlock.WriteEnd();
-    SetMotionBufferReadyStatus(true);
-
-    UMA_HISTOGRAM_BOOLEAN("InertialSensor.AccelerometerAndroidAvailable",
-        received_motion_data_[RECEIVED_MOTION_DATA_ACCELERATION] > 0);
-    UMA_HISTOGRAM_BOOLEAN(
-        "InertialSensor.AccelerometerIncGravityAndroidAvailable",
-        received_motion_data_[RECEIVED_MOTION_DATA_ACCELERATION_INCL_GRAVITY]
-        > 0);
-    UMA_HISTOGRAM_BOOLEAN("InertialSensor.GyroscopeAndroidAvailable",
-        received_motion_data_[RECEIVED_MOTION_DATA_ROTATION_RATE] > 0);
-  }
-}
-
-void SensorManagerAndroid::SetMotionBufferReadyStatus(bool ready) {
-  device_motion_buffer_->seqlock.WriteBegin();
-  device_motion_buffer_->data.allAvailableSensorsAreActive = ready;
-  device_motion_buffer_->seqlock.WriteEnd();
-  is_motion_buffer_ready_ = ready;
-}
-
-void SensorManagerAndroid::ClearInternalMotionBuffers() {
-  memset(received_motion_data_, 0, sizeof(received_motion_data_));
-  number_active_device_motion_sensors_ = 0;
-  SetMotionBufferReadyStatus(false);
-}
-
-// --- Device Orientation
-
-void SensorManagerAndroid::SetOrientationBufferReadyStatus(bool ready) {
-  device_orientation_buffer_->seqlock.WriteBegin();
-  device_orientation_buffer_->data.absolute = ready;
-  device_orientation_buffer_->data.hasAbsolute = ready;
-  device_orientation_buffer_->data.allAvailableSensorsAreActive = ready;
-  device_orientation_buffer_->seqlock.WriteEnd();
-  is_orientation_buffer_ready_ = ready;
-}
-
-bool SensorManagerAndroid::StartFetchingDeviceOrientationData(
-    DeviceOrientationHardwareBuffer* buffer) {
-  DCHECK(buffer);
-  {
-    base::AutoLock autolock(orientation_buffer_lock_);
-    device_orientation_buffer_ = buffer;
-  }
-  bool success = Start(kTypeOrientation);
-
-  {
-    base::AutoLock autolock(orientation_buffer_lock_);
-    // If Start() was unsuccessful then set the buffer ready flag to true
-    // to start firing all-null events.
-    SetOrientationBufferReadyStatus(!success);
-  }
-
-  if (!success)
-    updateRotationVectorHistogram(false);
-
-  return success;
-}
-
-void SensorManagerAndroid::StopFetchingDeviceOrientationData() {
-  Stop(kTypeOrientation);
-  {
-    base::AutoLock autolock(orientation_buffer_lock_);
-    if (device_orientation_buffer_) {
-      SetOrientationBufferReadyStatus(false);
-      device_orientation_buffer_ = NULL;
-    }
-  }
-}
-
-}  // namespace content
diff --git a/content/browser/device_orientation/sensor_manager_android.h b/content/browser/device_orientation/sensor_manager_android.h
deleted file mode 100644
index 6276065..0000000
--- a/content/browser/device_orientation/sensor_manager_android.h
+++ /dev/null
@@ -1,99 +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.
-
-#ifndef CHROME_BROWSER_DEVICE_ORIENTATION_SENSOR_MANAGER_ANDROID_H_
-#define CHROME_BROWSER_DEVICE_ORIENTATION_SENSOR_MANAGER_ANDROID_H_
-
-#include "base/android/scoped_java_ref.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/synchronization/lock.h"
-#include "content/common/content_export.h"
-#include "content/common/device_orientation/device_motion_hardware_buffer.h"
-#include "content/common/device_orientation/device_orientation_hardware_buffer.h"
-
-template<typename T> struct DefaultSingletonTraits;
-
-namespace content {
-
-// Android implementation of Device Orientation API.
-//
-// Android's SensorManager has a push API, so when Got*() methods are called
-// by the system the browser process puts the received data into a shared
-// memory buffer, which is read by the renderer processes.
-class CONTENT_EXPORT SensorManagerAndroid {
- public:
-  // Must be called at startup, before GetInstance().
-  static bool Register(JNIEnv* env);
-
-  // Needs to be thread-safe, because accessed from different threads.
-  static SensorManagerAndroid* GetInstance();
-
-  // Called from Java via JNI.
-  void GotOrientation(JNIEnv*, jobject,
-                      double alpha, double beta, double gamma);
-  void GotAcceleration(JNIEnv*, jobject,
-                       double x, double y, double z);
-  void GotAccelerationIncludingGravity(JNIEnv*, jobject,
-                                       double x, double y, double z);
-  void GotRotationRate(JNIEnv*, jobject,
-                       double alpha, double beta, double gamma);
-
-  // Shared memory related methods.
-  bool StartFetchingDeviceMotionData(DeviceMotionHardwareBuffer* buffer);
-  void StopFetchingDeviceMotionData();
-
-  bool StartFetchingDeviceOrientationData(
-      DeviceOrientationHardwareBuffer* buffer);
-  void StopFetchingDeviceOrientationData();
-
- protected:
-  enum EventType {
-    // These constants should match DEVICE_ORIENTATION and DEVICE_MOTION
-    // constants in content/public/android/java/src/org/chromium/content/
-    // browser/DeviceMotionAndOrientation.java
-    kTypeOrientation = 0,
-    kTypeMotion = 1
-  };
-
-  SensorManagerAndroid();
-  virtual ~SensorManagerAndroid();
-
-  virtual bool Start(EventType event_type);
-  virtual void Stop(EventType event_type);
-  virtual int GetNumberActiveDeviceMotionSensors();
-
- private:
-  friend struct DefaultSingletonTraits<SensorManagerAndroid>;
-
-  enum {
-    RECEIVED_MOTION_DATA_ACCELERATION = 0,
-    RECEIVED_MOTION_DATA_ACCELERATION_INCL_GRAVITY = 1,
-    RECEIVED_MOTION_DATA_ROTATION_RATE = 2,
-    RECEIVED_MOTION_DATA_MAX = 3,
-  };
-
-  void CheckMotionBufferReadyToRead();
-  void SetMotionBufferReadyStatus(bool ready);
-  void ClearInternalMotionBuffers();
-
-  void SetOrientationBufferReadyStatus(bool ready);
-
-  // The Java provider of orientation info.
-  base::android::ScopedJavaGlobalRef<jobject> device_orientation_;
-  int number_active_device_motion_sensors_;
-  int received_motion_data_[RECEIVED_MOTION_DATA_MAX];
-  DeviceMotionHardwareBuffer* device_motion_buffer_;
-  DeviceOrientationHardwareBuffer* device_orientation_buffer_;
-  bool is_motion_buffer_ready_;
-  bool is_orientation_buffer_ready_;
-
-  base::Lock motion_buffer_lock_;
-  base::Lock orientation_buffer_lock_;
-
-  DISALLOW_COPY_AND_ASSIGN(SensorManagerAndroid);
-};
-
-}  // namespace content
-
-#endif  // CHROME_BROWSER_DEVICE_ORIENTATION_SENSOR_MANAGER_ANDROID_H_
diff --git a/content/browser/device_orientation/sensor_manager_android_unittest.cc b/content/browser/device_orientation/sensor_manager_android_unittest.cc
deleted file mode 100644
index 99d27eb..0000000
--- a/content/browser/device_orientation/sensor_manager_android_unittest.cc
+++ /dev/null
@@ -1,148 +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.
-
-#include "content/browser/device_orientation/sensor_manager_android.h"
-
-#include "base/android/jni_android.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/memory/weak_ptr.h"
-#include "content/browser/device_orientation/inertial_sensor_consts.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace content {
-
-namespace {
-
-class FakeSensorManagerAndroid : public SensorManagerAndroid {
- public:
-  FakeSensorManagerAndroid() { }
-  virtual ~FakeSensorManagerAndroid() { }
-
-  virtual int GetNumberActiveDeviceMotionSensors() OVERRIDE {
-    return number_active_sensors_;
-  }
-
-  void SetNumberActiveDeviceMotionSensors(int number_active_sensors) {
-    number_active_sensors_ = number_active_sensors;
-  }
-
- protected:
-  virtual bool Start(EventType event_type) OVERRIDE {
-    return true;
-  }
-
-  virtual void Stop(EventType event_type) OVERRIDE {
-  }
-
- private:
-  int number_active_sensors_;
-};
-
-class AndroidSensorManagerTest : public testing::Test {
- protected:
-  AndroidSensorManagerTest() {
-    motion_buffer_.reset(new DeviceMotionHardwareBuffer);
-    orientation_buffer_.reset(new DeviceOrientationHardwareBuffer);
-  }
-
-  scoped_ptr<DeviceMotionHardwareBuffer> motion_buffer_;
-  scoped_ptr<DeviceOrientationHardwareBuffer> orientation_buffer_;
-};
-
-TEST_F(AndroidSensorManagerTest, ThreeDeviceMotionSensorsActive) {
-  FakeSensorManagerAndroid::Register(base::android::AttachCurrentThread());
-  FakeSensorManagerAndroid sensorManager;
-  sensorManager.SetNumberActiveDeviceMotionSensors(3);
-
-  sensorManager.StartFetchingDeviceMotionData(motion_buffer_.get());
-  ASSERT_FALSE(motion_buffer_->data.allAvailableSensorsAreActive);
-
-  sensorManager.GotAcceleration(0, 0, 1, 2, 3);
-  ASSERT_FALSE(motion_buffer_->data.allAvailableSensorsAreActive);
-  ASSERT_EQ(1, motion_buffer_->data.accelerationX);
-  ASSERT_TRUE(motion_buffer_->data.hasAccelerationX);
-  ASSERT_EQ(2, motion_buffer_->data.accelerationY);
-  ASSERT_TRUE(motion_buffer_->data.hasAccelerationY);
-  ASSERT_EQ(3, motion_buffer_->data.accelerationZ);
-  ASSERT_TRUE(motion_buffer_->data.hasAccelerationZ);
-
-  sensorManager.GotAccelerationIncludingGravity(0, 0, 4, 5, 6);
-  ASSERT_FALSE(motion_buffer_->data.allAvailableSensorsAreActive);
-  ASSERT_EQ(4, motion_buffer_->data.accelerationIncludingGravityX);
-  ASSERT_TRUE(motion_buffer_->data.hasAccelerationIncludingGravityX);
-  ASSERT_EQ(5, motion_buffer_->data.accelerationIncludingGravityY);
-  ASSERT_TRUE(motion_buffer_->data.hasAccelerationIncludingGravityY);
-  ASSERT_EQ(6, motion_buffer_->data.accelerationIncludingGravityZ);
-  ASSERT_TRUE(motion_buffer_->data.hasAccelerationIncludingGravityZ);
-
-  sensorManager.GotRotationRate(0, 0, 7, 8, 9);
-  ASSERT_TRUE(motion_buffer_->data.allAvailableSensorsAreActive);
-  ASSERT_EQ(7, motion_buffer_->data.rotationRateAlpha);
-  ASSERT_TRUE(motion_buffer_->data.hasRotationRateAlpha);
-  ASSERT_EQ(8, motion_buffer_->data.rotationRateBeta);
-  ASSERT_TRUE(motion_buffer_->data.hasRotationRateBeta);
-  ASSERT_EQ(9, motion_buffer_->data.rotationRateGamma);
-  ASSERT_TRUE(motion_buffer_->data.hasRotationRateGamma);
-  ASSERT_EQ(kInertialSensorIntervalMillis, motion_buffer_->data.interval);
-
-  sensorManager.StopFetchingDeviceMotionData();
-  ASSERT_FALSE(motion_buffer_->data.allAvailableSensorsAreActive);
-}
-
-TEST_F(AndroidSensorManagerTest, TwoDeviceMotionSensorsActive) {
-  FakeSensorManagerAndroid::Register(base::android::AttachCurrentThread());
-  FakeSensorManagerAndroid sensorManager;
-  sensorManager.SetNumberActiveDeviceMotionSensors(2);
-
-  sensorManager.StartFetchingDeviceMotionData(motion_buffer_.get());
-  ASSERT_FALSE(motion_buffer_->data.allAvailableSensorsAreActive);
-
-  sensorManager.GotAcceleration(0, 0, 1, 2, 3);
-  ASSERT_FALSE(motion_buffer_->data.allAvailableSensorsAreActive);
-
-  sensorManager.GotAccelerationIncludingGravity(0, 0, 1, 2, 3);
-  ASSERT_TRUE(motion_buffer_->data.allAvailableSensorsAreActive);
-  ASSERT_EQ(kInertialSensorIntervalMillis, motion_buffer_->data.interval);
-
-  sensorManager.StopFetchingDeviceMotionData();
-  ASSERT_FALSE(motion_buffer_->data.allAvailableSensorsAreActive);
-}
-
-TEST_F(AndroidSensorManagerTest, ZeroDeviceMotionSensorsActive) {
-  FakeSensorManagerAndroid::Register(base::android::AttachCurrentThread());
-  FakeSensorManagerAndroid sensorManager;
-  sensorManager.SetNumberActiveDeviceMotionSensors(0);
-
-  sensorManager.StartFetchingDeviceMotionData(motion_buffer_.get());
-  ASSERT_TRUE(motion_buffer_->data.allAvailableSensorsAreActive);
-  ASSERT_EQ(kInertialSensorIntervalMillis, motion_buffer_->data.interval);
-
-  sensorManager.StopFetchingDeviceMotionData();
-  ASSERT_FALSE(motion_buffer_->data.allAvailableSensorsAreActive);
-}
-
-TEST_F(AndroidSensorManagerTest, DeviceOrientationSensorsActive) {
-  FakeSensorManagerAndroid::Register(base::android::AttachCurrentThread());
-  FakeSensorManagerAndroid sensorManager;
-
-  sensorManager.StartFetchingDeviceOrientationData(orientation_buffer_.get());
-  ASSERT_FALSE(orientation_buffer_->data.allAvailableSensorsAreActive);
-
-  sensorManager.GotOrientation(0, 0, 1, 2, 3);
-  ASSERT_TRUE(orientation_buffer_->data.allAvailableSensorsAreActive);
-  ASSERT_EQ(1, orientation_buffer_->data.alpha);
-  ASSERT_TRUE(orientation_buffer_->data.hasAlpha);
-  ASSERT_EQ(2, orientation_buffer_->data.beta);
-  ASSERT_TRUE(orientation_buffer_->data.hasBeta);
-  ASSERT_EQ(3, orientation_buffer_->data.gamma);
-  ASSERT_TRUE(orientation_buffer_->data.hasGamma);
-
-  sensorManager.StopFetchingDeviceOrientationData();
-  ASSERT_FALSE(orientation_buffer_->data.allAvailableSensorsAreActive);
-}
-
-
-}  // namespace
-
-}  // namespace content
diff --git a/content/browser/device_orientation/DEPS b/content/browser/device_sensors/DEPS
similarity index 100%
rename from content/browser/device_orientation/DEPS
rename to content/browser/device_sensors/DEPS
diff --git a/content/browser/device_orientation/OWNERS b/content/browser/device_sensors/OWNERS
similarity index 100%
rename from content/browser/device_orientation/OWNERS
rename to content/browser/device_sensors/OWNERS
diff --git a/content/browser/device_sensors/data_fetcher_shared_memory.h b/content/browser/device_sensors/data_fetcher_shared_memory.h
new file mode 100644
index 0000000..ec6e1a2
--- /dev/null
+++ b/content/browser/device_sensors/data_fetcher_shared_memory.h
@@ -0,0 +1,66 @@
+// 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.
+
+#ifndef CONTENT_BROWSER_DEVICE_SENSORS_DATA_FETCHER_SHARED_MEMORY_H_
+#define CONTENT_BROWSER_DEVICE_SENSORS_DATA_FETCHER_SHARED_MEMORY_H_
+
+#include "content/browser/device_sensors/data_fetcher_shared_memory_base.h"
+
+#if !defined(OS_ANDROID)
+#include "content/common/device_sensors/device_motion_hardware_buffer.h"
+#include "content/common/device_sensors/device_orientation_hardware_buffer.h"
+#endif
+
+#if defined(OS_MACOSX)
+class SuddenMotionSensor;
+#elif defined(OS_WIN)
+#include <SensorsApi.h>
+#include "base/win/scoped_comptr.h"
+#endif
+
+namespace content {
+
+class CONTENT_EXPORT DataFetcherSharedMemory
+    : public DataFetcherSharedMemoryBase {
+
+ public:
+  DataFetcherSharedMemory();
+  virtual ~DataFetcherSharedMemory();
+
+ private:
+  virtual bool Start(ConsumerType consumer_type, void* buffer) OVERRIDE;
+  virtual bool Stop(ConsumerType consumer_type) OVERRIDE;
+
+#if !defined(OS_ANDROID)
+  DeviceMotionHardwareBuffer* motion_buffer_;
+  DeviceOrientationHardwareBuffer* orientation_buffer_;
+#endif
+#if defined(OS_MACOSX)
+  virtual void Fetch(unsigned consumer_bitmask) OVERRIDE;
+  virtual FetcherType GetType() const OVERRIDE;
+
+  scoped_ptr<SuddenMotionSensor> sudden_motion_sensor_;
+#elif defined(OS_WIN)
+  class SensorEventSink;
+  class SensorEventSinkMotion;
+  class SensorEventSinkOrientation;
+
+  virtual FetcherType GetType() const OVERRIDE;
+
+  bool RegisterForSensor(REFSENSOR_TYPE_ID sensor_type, ISensor** sensor,
+      scoped_refptr<SensorEventSink> event_sink);
+  void DisableSensors(ConsumerType consumer_type);
+  void SetBufferAvailableState(ConsumerType consumer_type, bool enabled);
+
+  base::win::ScopedComPtr<ISensor> sensor_inclinometer_;
+  base::win::ScopedComPtr<ISensor> sensor_accelerometer_;
+  base::win::ScopedComPtr<ISensor> sensor_gyrometer_;
+#endif
+
+  DISALLOW_COPY_AND_ASSIGN(DataFetcherSharedMemory);
+};
+
+}  // namespace content
+
+#endif  // CONTENT_BROWSER_DEVICE_SENSORS_DATA_FETCHER_SHARED_MEMORY_H_
diff --git a/content/browser/device_sensors/data_fetcher_shared_memory_android.cc b/content/browser/device_sensors/data_fetcher_shared_memory_android.cc
new file mode 100644
index 0000000..2ed5f7f
--- /dev/null
+++ b/content/browser/device_sensors/data_fetcher_shared_memory_android.cc
@@ -0,0 +1,52 @@
+// 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.
+
+#include "content/browser/device_sensors/data_fetcher_shared_memory.h"
+
+#include "base/logging.h"
+#include "content/browser/device_sensors/sensor_manager_android.h"
+#include "content/common/device_sensors/device_motion_hardware_buffer.h"
+#include "content/common/device_sensors/device_orientation_hardware_buffer.h"
+
+namespace content {
+
+DataFetcherSharedMemory::DataFetcherSharedMemory() {
+}
+
+DataFetcherSharedMemory::~DataFetcherSharedMemory() {
+}
+
+bool DataFetcherSharedMemory::Start(ConsumerType consumer_type, void* buffer) {
+  DCHECK(buffer);
+
+  switch (consumer_type) {
+    case CONSUMER_TYPE_MOTION:
+      return SensorManagerAndroid::GetInstance()->
+          StartFetchingDeviceMotionData(
+              static_cast<DeviceMotionHardwareBuffer*>(buffer));
+    case CONSUMER_TYPE_ORIENTATION:
+      return SensorManagerAndroid::GetInstance()->
+          StartFetchingDeviceOrientationData(
+              static_cast<DeviceOrientationHardwareBuffer*>(buffer));
+    default:
+      NOTREACHED();
+  }
+  return false;
+}
+
+bool DataFetcherSharedMemory::Stop(ConsumerType consumer_type) {
+  switch (consumer_type) {
+    case CONSUMER_TYPE_MOTION:
+      SensorManagerAndroid::GetInstance()->StopFetchingDeviceMotionData();
+      return true;
+    case CONSUMER_TYPE_ORIENTATION:
+      SensorManagerAndroid::GetInstance()->StopFetchingDeviceOrientationData();
+      return true;
+    default:
+      NOTREACHED();
+  }
+  return false;
+}
+
+}  // namespace content
diff --git a/content/browser/device_sensors/data_fetcher_shared_memory_base.cc b/content/browser/device_sensors/data_fetcher_shared_memory_base.cc
new file mode 100644
index 0000000..6a9b7d2
--- /dev/null
+++ b/content/browser/device_sensors/data_fetcher_shared_memory_base.cc
@@ -0,0 +1,244 @@
+// 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.
+
+#include "content/browser/device_sensors/data_fetcher_shared_memory_base.h"
+
+#include "base/bind.h"
+#include "base/logging.h"
+#include "base/stl_util.h"
+#include "base/threading/thread.h"
+#include "base/timer/timer.h"
+#include "content/common/device_sensors/device_motion_hardware_buffer.h"
+#include "content/common/device_sensors/device_orientation_hardware_buffer.h"
+
+namespace content {
+
+namespace {
+
+static size_t GetConsumerSharedMemoryBufferSize(ConsumerType consumer_type) {
+  switch (consumer_type) {
+    case CONSUMER_TYPE_MOTION:
+      return sizeof(DeviceMotionHardwareBuffer);
+    case CONSUMER_TYPE_ORIENTATION:
+      return sizeof(DeviceOrientationHardwareBuffer);
+    default:
+      NOTREACHED();
+  }
+  return 0;
+}
+
+}  // namespace
+
+class DataFetcherSharedMemoryBase::PollingThread : public base::Thread {
+ public:
+  PollingThread(const char* name, DataFetcherSharedMemoryBase* fetcher);
+  virtual ~PollingThread();
+
+  void AddConsumer(ConsumerType consumer_type, void* buffer);
+  void RemoveConsumer(ConsumerType consumer_type);
+
+  unsigned GetConsumersBitmask() const { return consumers_bitmask_; }
+  bool IsTimerRunning() const { return timer_ ? timer_->IsRunning() : false; }
+
+ private:
+  void DoPoll();
+
+  unsigned consumers_bitmask_;
+  DataFetcherSharedMemoryBase* fetcher_;
+  scoped_ptr<base::RepeatingTimer<PollingThread> > timer_;
+
+  DISALLOW_COPY_AND_ASSIGN(PollingThread);
+};
+
+// --- PollingThread methods
+
+DataFetcherSharedMemoryBase::PollingThread::PollingThread(
+    const char* name, DataFetcherSharedMemoryBase* fetcher)
+    : base::Thread(name),
+      consumers_bitmask_(0),
+      fetcher_(fetcher) {
+}
+
+DataFetcherSharedMemoryBase::PollingThread::~PollingThread() {
+}
+
+void DataFetcherSharedMemoryBase::PollingThread::AddConsumer(
+    ConsumerType consumer_type, void* buffer) {
+  DCHECK(fetcher_);
+  if (!fetcher_->Start(consumer_type, buffer))
+    return;
+
+  consumers_bitmask_ |= consumer_type;
+
+  if (!timer_ && fetcher_->GetType() == FETCHER_TYPE_POLLING_CALLBACK) {
+    timer_.reset(new base::RepeatingTimer<PollingThread>());
+    timer_->Start(FROM_HERE,
+                  fetcher_->GetInterval(),
+                  this, &PollingThread::DoPoll);
+  }
+}
+
+void DataFetcherSharedMemoryBase::PollingThread::RemoveConsumer(
+    ConsumerType consumer_type) {
+  DCHECK(fetcher_);
+  if (!fetcher_->Stop(consumer_type))
+    return;
+
+  consumers_bitmask_ ^= consumer_type;
+
+  if (!consumers_bitmask_)
+    timer_.reset();  // will also stop the timer.
+}
+
+void DataFetcherSharedMemoryBase::PollingThread::DoPoll() {
+  DCHECK(fetcher_);
+  DCHECK(consumers_bitmask_);
+  fetcher_->Fetch(consumers_bitmask_);
+}
+
+// --- end of PollingThread methods
+
+DataFetcherSharedMemoryBase::DataFetcherSharedMemoryBase()
+    : started_consumers_(0) {
+}
+
+DataFetcherSharedMemoryBase::~DataFetcherSharedMemoryBase() {
+  StopFetchingDeviceData(CONSUMER_TYPE_MOTION);
+  StopFetchingDeviceData(CONSUMER_TYPE_ORIENTATION);
+
+  // make sure polling thread stops asap.
+  if (polling_thread_)
+    polling_thread_->Stop();
+
+  STLDeleteContainerPairSecondPointers(shared_memory_map_.begin(),
+      shared_memory_map_.end());
+}
+
+bool DataFetcherSharedMemoryBase::StartFetchingDeviceData(
+    ConsumerType consumer_type) {
+  if (started_consumers_ & consumer_type)
+    return true;
+
+  void* buffer = GetSharedMemoryBuffer(consumer_type);
+  if (!buffer)
+    return false;
+
+  if (GetType() != FETCHER_TYPE_DEFAULT) {
+    if (!InitAndStartPollingThreadIfNecessary())
+      return false;
+    polling_thread_->message_loop()->PostTask(
+        FROM_HERE,
+        base::Bind(&PollingThread::AddConsumer,
+                   base::Unretained(polling_thread_.get()),
+                   consumer_type, buffer));
+  } else {
+    if (!Start(consumer_type, buffer))
+      return false;
+  }
+
+  started_consumers_ |= consumer_type;
+
+  return true;
+}
+
+bool DataFetcherSharedMemoryBase::StopFetchingDeviceData(
+    ConsumerType consumer_type) {
+  if (!(started_consumers_ & consumer_type))
+    return true;
+
+  if (GetType() != FETCHER_TYPE_DEFAULT) {
+    polling_thread_->message_loop()->PostTask(
+        FROM_HERE,
+        base::Bind(&PollingThread::RemoveConsumer,
+                   base::Unretained(polling_thread_.get()),
+                   consumer_type));
+  } else {
+    if (!Stop(consumer_type))
+      return false;
+  }
+
+  started_consumers_ ^= consumer_type;
+
+  return true;
+}
+
+base::SharedMemoryHandle
+DataFetcherSharedMemoryBase::GetSharedMemoryHandleForProcess(
+    ConsumerType consumer_type, base::ProcessHandle process) {
+  SharedMemoryMap::const_iterator it = shared_memory_map_.find(consumer_type);
+  if (it == shared_memory_map_.end())
+    return base::SharedMemory::NULLHandle();
+
+  base::SharedMemoryHandle renderer_handle;
+  it->second->ShareToProcess(process, &renderer_handle);
+  return renderer_handle;
+}
+
+bool DataFetcherSharedMemoryBase::InitAndStartPollingThreadIfNecessary() {
+  if (polling_thread_)
+    return true;
+
+  polling_thread_.reset(
+      new PollingThread("Inertial Device Sensor poller", this));
+
+  if (!polling_thread_->Start()) {
+      LOG(ERROR) << "Failed to start inertial sensor data polling thread";
+      return false;
+  }
+  return true;
+}
+
+void DataFetcherSharedMemoryBase::Fetch(unsigned consumer_bitmask) {
+  NOTIMPLEMENTED();
+}
+
+DataFetcherSharedMemoryBase::FetcherType
+DataFetcherSharedMemoryBase::GetType() const {
+  return FETCHER_TYPE_DEFAULT;
+}
+
+base::TimeDelta DataFetcherSharedMemoryBase::GetInterval() const {
+  return base::TimeDelta::FromMilliseconds(kInertialSensorIntervalMillis);
+}
+
+base::SharedMemory* DataFetcherSharedMemoryBase::GetSharedMemory(
+    ConsumerType consumer_type) {
+  SharedMemoryMap::const_iterator it = shared_memory_map_.find(consumer_type);
+  if (it != shared_memory_map_.end())
+    return it->second;
+
+  size_t buffer_size = GetConsumerSharedMemoryBufferSize(consumer_type);
+  if (buffer_size == 0)
+    return NULL;
+
+  scoped_ptr<base::SharedMemory> new_shared_mem(new base::SharedMemory);
+  if (new_shared_mem->CreateAndMapAnonymous(buffer_size)) {
+    if (void* mem = new_shared_mem->memory()) {
+      memset(mem, 0, buffer_size);
+      base::SharedMemory* shared_mem = new_shared_mem.release();
+      shared_memory_map_[consumer_type] = shared_mem;
+      return shared_mem;
+    }
+  }
+  LOG(ERROR) << "Failed to initialize shared memory";
+  return NULL;
+}
+
+void* DataFetcherSharedMemoryBase::GetSharedMemoryBuffer(
+    ConsumerType consumer_type) {
+  if (base::SharedMemory* shared_memory = GetSharedMemory(consumer_type))
+    return shared_memory->memory();
+  return NULL;
+}
+
+base::MessageLoop* DataFetcherSharedMemoryBase::GetPollingMessageLoop() const {
+  return polling_thread_ ? polling_thread_->message_loop() : NULL;
+}
+
+bool DataFetcherSharedMemoryBase::IsPollingTimerRunningForTesting() const {
+  return polling_thread_ ? polling_thread_->IsTimerRunning() : false;
+}
+
+
+}  // namespace content
diff --git a/content/browser/device_sensors/data_fetcher_shared_memory_base.h b/content/browser/device_sensors/data_fetcher_shared_memory_base.h
new file mode 100644
index 0000000..c959e82
--- /dev/null
+++ b/content/browser/device_sensors/data_fetcher_shared_memory_base.h
@@ -0,0 +1,98 @@
+// 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.
+
+#ifndef CONTENT_BROWSER_DEVICE_SENSORS_DATA_FETCHER_SHARED_MEMORY_BASE_H_
+#define CONTENT_BROWSER_DEVICE_SENSORS_DATA_FETCHER_SHARED_MEMORY_BASE_H_
+
+#include <map>
+
+#include "base/memory/scoped_ptr.h"
+#include "base/memory/shared_memory.h"
+#include "base/message_loop/message_loop.h"
+#include "content/browser/device_sensors/inertial_sensor_consts.h"
+#include "content/common/content_export.h"
+
+namespace content {
+
+// Sensor data fetchers should derive from this base class and implement
+// the abstract Start() and Stop() methods.
+// If the fetcher requires polling it should also implement IsPolling()
+// to return true and the Fetch() method which will be called from the
+// polling thread to fetch data at regular intervals.
+class CONTENT_EXPORT DataFetcherSharedMemoryBase {
+ public:
+  // Starts updating the shared memory buffer with sensor data at
+  // regular intervals. Returns true if the relevant sensors could
+  // be successfully activated.
+  bool StartFetchingDeviceData(ConsumerType consumer_type);
+
+  // Stops updating the shared memory buffer. Returns true if the
+  // relevant sensors could be successfully deactivated.
+  bool StopFetchingDeviceData(ConsumerType consumer_type);
+
+  // Returns the shared memory handle of the device sensor data
+  // duplicated into the given process. This method should only be
+  // called after a call to StartFetchingDeviceData method with
+  // corresponding |consumer_type| parameter.
+  base::SharedMemoryHandle GetSharedMemoryHandleForProcess(
+      ConsumerType consumer_type, base::ProcessHandle process);
+
+  enum FetcherType {
+    // Fetcher runs on the same thread as its creator.
+    FETCHER_TYPE_DEFAULT,
+    // Fetcher runs on a separate thread calling |Fetch()| at regular intervals.
+    FETCHER_TYPE_POLLING_CALLBACK,
+    // Fetcher runs on a separate thread, but no callbacks are executed.
+    FETCHER_TYPE_SEPARATE_THREAD
+  };
+
+ protected:
+  class PollingThread;
+
+  DataFetcherSharedMemoryBase();
+  virtual ~DataFetcherSharedMemoryBase();
+
+  // Returns the message loop of the polling thread.
+  // Returns NULL if there is no polling thread.
+  base::MessageLoop* GetPollingMessageLoop() const;
+
+  // If IsPolling() is true this method is called from the |polling_thread_|
+  // at regular intervals.
+  virtual void Fetch(unsigned consumer_bitmask);
+
+  // Returns the type of thread this fetcher runs on.
+  virtual FetcherType GetType() const;
+
+  // Returns the sensor sampling interval. In particular if this fetcher
+  // GetType() == FETCHER_TYPE_POLLING_CALLBACK the interval between
+  // successive calls to Fetch().
+  virtual base::TimeDelta GetInterval() const;
+
+  // Start() method should call InitSharedMemoryBuffer() to get the shared
+  // memory pointer. If IsPolling() is true both Start() and Stop() methods
+  // are called from the |polling_thread_|.
+  virtual bool Start(ConsumerType consumer_type, void* buffer) = 0;
+  virtual bool Stop(ConsumerType consumer_type) = 0;
+
+  bool IsPollingTimerRunningForTesting() const;
+
+ private:
+  bool InitAndStartPollingThreadIfNecessary();
+  base::SharedMemory* GetSharedMemory(ConsumerType consumer_type);
+  void* GetSharedMemoryBuffer(ConsumerType consumer_type);
+
+  unsigned started_consumers_;
+
+  scoped_ptr<PollingThread> polling_thread_;
+
+  // Owning pointers. Objects in the map are deleted in dtor.
+  typedef std::map<ConsumerType, base::SharedMemory*> SharedMemoryMap;
+  SharedMemoryMap shared_memory_map_;
+
+  DISALLOW_COPY_AND_ASSIGN(DataFetcherSharedMemoryBase);
+};
+
+}  // namespace content
+
+#endif  // CONTENT_BROWSER_DEVICE_SENSORS_DATA_FETCHER_SHARED_MEMORY_BASE_H_
diff --git a/content/browser/device_sensors/data_fetcher_shared_memory_base_unittest.cc b/content/browser/device_sensors/data_fetcher_shared_memory_base_unittest.cc
new file mode 100644
index 0000000..3a86108
--- /dev/null
+++ b/content/browser/device_sensors/data_fetcher_shared_memory_base_unittest.cc
@@ -0,0 +1,401 @@
+// 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.
+
+#include "content/browser/device_sensors/data_fetcher_shared_memory_base.h"
+
+#include "base/logging.h"
+#include "base/process/process_handle.h"
+#include "base/synchronization/waitable_event.h"
+#include "base/threading/thread.h"
+#include "content/common/device_sensors/device_motion_hardware_buffer.h"
+#include "content/common/device_sensors/device_orientation_hardware_buffer.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace content {
+
+namespace {
+
+class FakeDataFetcher : public DataFetcherSharedMemoryBase {
+ public:
+  FakeDataFetcher()
+      : start_motion_(false, false),
+        start_orientation_(false, false),
+        stop_motion_(false, false),
+        stop_orientation_(false, false),
+        updated_motion_(false, false),
+        updated_orientation_(false, false),
+        motion_buffer_(NULL),
+        orientation_buffer_(NULL) {
+  }
+  virtual ~FakeDataFetcher() { }
+
+  bool Init(ConsumerType consumer_type, void* buffer) {
+    EXPECT_TRUE(buffer);
+
+    switch (consumer_type) {
+      case CONSUMER_TYPE_MOTION:
+        motion_buffer_ = static_cast<DeviceMotionHardwareBuffer*>(buffer);
+        break;
+      case CONSUMER_TYPE_ORIENTATION:
+        orientation_buffer_ =
+            static_cast<DeviceOrientationHardwareBuffer*>(buffer);
+        break;
+      default:
+        return false;
+    }
+    return true;
+  }
+
+  void UpdateMotion() {
+    DeviceMotionHardwareBuffer* buffer = GetMotionBuffer();
+    ASSERT_TRUE(buffer);
+    buffer->seqlock.WriteBegin();
+    buffer->data.interval = kInertialSensorIntervalMillis;
+    buffer->seqlock.WriteEnd();
+    updated_motion_.Signal();
+  }
+
+  void UpdateOrientation() {
+    DeviceOrientationHardwareBuffer* buffer = GetOrientationBuffer();
+    ASSERT_TRUE(buffer);
+    buffer->seqlock.WriteBegin();
+    buffer->data.alpha = 1;
+    buffer->seqlock.WriteEnd();
+    updated_orientation_.Signal();
+  }
+
+  DeviceMotionHardwareBuffer* GetMotionBuffer() const {
+    return motion_buffer_;
+  }
+
+  DeviceOrientationHardwareBuffer* GetOrientationBuffer() const {
+    return orientation_buffer_;
+  }
+
+  void WaitForStart(ConsumerType consumer_type) {
+    switch (consumer_type) {
+      case CONSUMER_TYPE_MOTION:
+        start_motion_.Wait();
+        break;
+      case CONSUMER_TYPE_ORIENTATION:
+        start_orientation_.Wait();
+        break;
+    }
+  }
+
+  void WaitForStop(ConsumerType consumer_type) {
+    switch (consumer_type) {
+      case CONSUMER_TYPE_MOTION:
+        stop_motion_.Wait();
+        break;
+      case CONSUMER_TYPE_ORIENTATION:
+        stop_orientation_.Wait();
+        break;
+    }
+  }
+
+  void WaitForUpdate(ConsumerType consumer_type) {
+    switch (consumer_type) {
+      case CONSUMER_TYPE_MOTION:
+        updated_motion_.Wait();
+        break;
+      case CONSUMER_TYPE_ORIENTATION:
+        updated_orientation_.Wait();
+        break;
+    }
+  }
+
+ protected:
+  base::WaitableEvent start_motion_;
+  base::WaitableEvent start_orientation_;
+  base::WaitableEvent stop_motion_;
+  base::WaitableEvent stop_orientation_;
+  base::WaitableEvent updated_motion_;
+  base::WaitableEvent updated_orientation_;
+
+ private:
+  DeviceMotionHardwareBuffer* motion_buffer_;
+  DeviceOrientationHardwareBuffer* orientation_buffer_;
+
+  DISALLOW_COPY_AND_ASSIGN(FakeDataFetcher);
+};
+
+class FakeNonPollingDataFetcher : public FakeDataFetcher {
+ public:
+  FakeNonPollingDataFetcher() { }
+  virtual ~FakeNonPollingDataFetcher() { }
+
+  virtual bool Start(ConsumerType consumer_type, void* buffer) OVERRIDE {
+    Init(consumer_type, buffer);
+    switch (consumer_type) {
+      case CONSUMER_TYPE_MOTION:
+        UpdateMotion();
+        start_motion_.Signal();
+        break;
+      case CONSUMER_TYPE_ORIENTATION:
+        UpdateOrientation();
+        start_orientation_.Signal();
+        break;
+      default:
+        return false;
+    }
+    return true;
+  }
+
+  virtual bool Stop(ConsumerType consumer_type) OVERRIDE {
+    switch (consumer_type) {
+      case CONSUMER_TYPE_MOTION:
+        stop_motion_.Signal();
+        break;
+      case CONSUMER_TYPE_ORIENTATION:
+        stop_orientation_.Signal();
+        break;
+      default:
+        return false;
+    }
+    return true;
+  }
+
+  virtual void Fetch(unsigned consumer_bitmask) OVERRIDE {
+    FAIL() << "fetch should not be called, "
+        << "because this is a non-polling fetcher";
+  }
+
+  virtual FetcherType GetType() const OVERRIDE {
+    return FakeDataFetcher::GetType();
+  }
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(FakeNonPollingDataFetcher);
+};
+
+class FakePollingDataFetcher : public FakeDataFetcher {
+ public:
+  FakePollingDataFetcher() { }
+  virtual ~FakePollingDataFetcher() { }
+
+  virtual bool Start(ConsumerType consumer_type, void* buffer) OVERRIDE {
+    EXPECT_TRUE(base::MessageLoop::current() == GetPollingMessageLoop());
+
+    Init(consumer_type, buffer);
+    switch (consumer_type) {
+      case CONSUMER_TYPE_MOTION:
+        start_motion_.Signal();
+        break;
+      case CONSUMER_TYPE_ORIENTATION:
+        start_orientation_.Signal();
+        break;
+      default:
+        return false;
+    }
+    return true;
+  }
+
+  virtual bool Stop(ConsumerType consumer_type) OVERRIDE {
+    EXPECT_TRUE(base::MessageLoop::current() == GetPollingMessageLoop());
+
+    switch (consumer_type) {
+      case CONSUMER_TYPE_MOTION:
+        stop_motion_.Signal();
+        break;
+      case CONSUMER_TYPE_ORIENTATION:
+        stop_orientation_.Signal();
+        break;
+      default:
+        return false;
+    }
+    return true;
+  }
+
+  virtual void Fetch(unsigned consumer_bitmask) OVERRIDE {
+    EXPECT_TRUE(base::MessageLoop::current() == GetPollingMessageLoop());
+    EXPECT_TRUE(consumer_bitmask & CONSUMER_TYPE_ORIENTATION ||
+                consumer_bitmask & CONSUMER_TYPE_MOTION);
+
+    if (consumer_bitmask & CONSUMER_TYPE_ORIENTATION)
+      UpdateOrientation();
+    if (consumer_bitmask & CONSUMER_TYPE_MOTION)
+      UpdateMotion();
+  }
+
+  virtual FetcherType GetType() const OVERRIDE {
+    return FETCHER_TYPE_POLLING_CALLBACK;
+  }
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(FakePollingDataFetcher);
+};
+
+class FakeZeroDelayPollingDataFetcher : public FakeDataFetcher {
+ public:
+  FakeZeroDelayPollingDataFetcher() { }
+  virtual ~FakeZeroDelayPollingDataFetcher() { }
+
+  virtual bool Start(ConsumerType consumer_type, void* buffer) OVERRIDE {
+    EXPECT_TRUE(base::MessageLoop::current() == GetPollingMessageLoop());
+
+    Init(consumer_type, buffer);
+    switch (consumer_type) {
+      case CONSUMER_TYPE_MOTION:
+        start_motion_.Signal();
+        break;
+      case CONSUMER_TYPE_ORIENTATION:
+        start_orientation_.Signal();
+        break;
+      default:
+        return false;
+    }
+    return true;
+  }
+
+  virtual bool Stop(ConsumerType consumer_type) OVERRIDE {
+    EXPECT_TRUE(base::MessageLoop::current() == GetPollingMessageLoop());
+
+    switch (consumer_type) {
+      case CONSUMER_TYPE_MOTION:
+        stop_motion_.Signal();
+        break;
+      case CONSUMER_TYPE_ORIENTATION:
+        stop_orientation_.Signal();
+        break;
+      default:
+        return false;
+    }
+    return true;
+  }
+
+  virtual void Fetch(unsigned consumer_bitmask) OVERRIDE {
+    FAIL() << "fetch should not be called";
+  }
+
+  virtual FetcherType GetType() const OVERRIDE {
+    return FETCHER_TYPE_SEPARATE_THREAD;
+  }
+
+  bool IsPollingTimerRunningForTesting() const {
+    return FakeDataFetcher::IsPollingTimerRunningForTesting();
+  }
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(FakeZeroDelayPollingDataFetcher);
+};
+
+
+TEST(DataFetcherSharedMemoryBaseTest, DoesStartMotion) {
+  FakeNonPollingDataFetcher fake_data_fetcher;
+  EXPECT_EQ(DataFetcherSharedMemoryBase::FETCHER_TYPE_DEFAULT,
+      fake_data_fetcher.GetType());
+
+  EXPECT_TRUE(fake_data_fetcher.StartFetchingDeviceData(CONSUMER_TYPE_MOTION));
+  fake_data_fetcher.WaitForStart(CONSUMER_TYPE_MOTION);
+
+  EXPECT_EQ(kInertialSensorIntervalMillis,
+      fake_data_fetcher.GetMotionBuffer()->data.interval);
+
+  fake_data_fetcher.StopFetchingDeviceData(CONSUMER_TYPE_MOTION);
+  fake_data_fetcher.WaitForStop(CONSUMER_TYPE_MOTION);
+}
+
+TEST(DataFetcherSharedMemoryBaseTest, DoesStartOrientation) {
+  FakeNonPollingDataFetcher fake_data_fetcher;
+  EXPECT_EQ(DataFetcherSharedMemoryBase::FETCHER_TYPE_DEFAULT,
+      fake_data_fetcher.GetType());
+
+  EXPECT_TRUE(fake_data_fetcher.StartFetchingDeviceData(
+      CONSUMER_TYPE_ORIENTATION));
+  fake_data_fetcher.WaitForStart(CONSUMER_TYPE_ORIENTATION);
+
+  EXPECT_EQ(1, fake_data_fetcher.GetOrientationBuffer()->data.alpha);
+
+  fake_data_fetcher.StopFetchingDeviceData(CONSUMER_TYPE_ORIENTATION);
+  fake_data_fetcher.WaitForStop(CONSUMER_TYPE_ORIENTATION);
+}
+
+TEST(DataFetcherSharedMemoryBaseTest, DoesPollMotion) {
+  FakePollingDataFetcher fake_data_fetcher;
+  EXPECT_EQ(DataFetcherSharedMemoryBase::FETCHER_TYPE_POLLING_CALLBACK,
+      fake_data_fetcher.GetType());
+
+  EXPECT_TRUE(fake_data_fetcher.StartFetchingDeviceData(CONSUMER_TYPE_MOTION));
+  fake_data_fetcher.WaitForStart(CONSUMER_TYPE_MOTION);
+  fake_data_fetcher.WaitForUpdate(CONSUMER_TYPE_MOTION);
+
+  EXPECT_EQ(kInertialSensorIntervalMillis,
+      fake_data_fetcher.GetMotionBuffer()->data.interval);
+
+  fake_data_fetcher.StopFetchingDeviceData(CONSUMER_TYPE_MOTION);
+  fake_data_fetcher.WaitForStop(CONSUMER_TYPE_MOTION);
+}
+
+TEST(DataFetcherSharedMemoryBaseTest, DoesPollOrientation) {
+  FakePollingDataFetcher fake_data_fetcher;
+  EXPECT_EQ(DataFetcherSharedMemoryBase::FETCHER_TYPE_POLLING_CALLBACK,
+      fake_data_fetcher.GetType());
+
+  EXPECT_TRUE(fake_data_fetcher.StartFetchingDeviceData(
+      CONSUMER_TYPE_ORIENTATION));
+  fake_data_fetcher.WaitForStart(CONSUMER_TYPE_ORIENTATION);
+  fake_data_fetcher.WaitForUpdate(CONSUMER_TYPE_ORIENTATION);
+
+  EXPECT_EQ(1, fake_data_fetcher.GetOrientationBuffer()->data.alpha);
+
+  fake_data_fetcher.StopFetchingDeviceData(CONSUMER_TYPE_ORIENTATION);
+  fake_data_fetcher.WaitForStop(CONSUMER_TYPE_ORIENTATION);
+}
+
+TEST(DataFetcherSharedMemoryBaseTest, DoesPollMotionAndOrientation) {
+  FakePollingDataFetcher fake_data_fetcher;
+  EXPECT_EQ(DataFetcherSharedMemoryBase::FETCHER_TYPE_POLLING_CALLBACK,
+      fake_data_fetcher.GetType());
+
+  EXPECT_TRUE(fake_data_fetcher.StartFetchingDeviceData(
+      CONSUMER_TYPE_ORIENTATION));
+  base::SharedMemoryHandle handle_orientation =
+      fake_data_fetcher.GetSharedMemoryHandleForProcess(
+          CONSUMER_TYPE_ORIENTATION, base::GetCurrentProcessHandle());
+  EXPECT_TRUE(base::SharedMemory::IsHandleValid(handle_orientation));
+
+  EXPECT_TRUE(fake_data_fetcher.StartFetchingDeviceData(
+      CONSUMER_TYPE_MOTION));
+  base::SharedMemoryHandle handle_motion =
+      fake_data_fetcher.GetSharedMemoryHandleForProcess(
+          CONSUMER_TYPE_MOTION, base::GetCurrentProcessHandle());
+  EXPECT_TRUE(base::SharedMemory::IsHandleValid(handle_motion));
+
+  fake_data_fetcher.WaitForStart(CONSUMER_TYPE_ORIENTATION);
+  fake_data_fetcher.WaitForStart(CONSUMER_TYPE_MOTION);
+
+  fake_data_fetcher.WaitForUpdate(CONSUMER_TYPE_ORIENTATION);
+  fake_data_fetcher.WaitForUpdate(CONSUMER_TYPE_MOTION);
+
+  EXPECT_EQ(1, fake_data_fetcher.GetOrientationBuffer()->data.alpha);
+  EXPECT_EQ(kInertialSensorIntervalMillis,
+      fake_data_fetcher.GetMotionBuffer()->data.interval);
+
+  fake_data_fetcher.StopFetchingDeviceData(CONSUMER_TYPE_ORIENTATION);
+  fake_data_fetcher.StopFetchingDeviceData(CONSUMER_TYPE_MOTION);
+  fake_data_fetcher.WaitForStop(CONSUMER_TYPE_ORIENTATION);
+  fake_data_fetcher.WaitForStop(CONSUMER_TYPE_MOTION);
+}
+
+TEST(DataFetcherSharedMemoryBaseTest, DoesNotPollZeroDelay) {
+  FakeZeroDelayPollingDataFetcher fake_data_fetcher;
+  EXPECT_EQ(DataFetcherSharedMemoryBase::FETCHER_TYPE_SEPARATE_THREAD,
+      fake_data_fetcher.GetType());
+
+  EXPECT_TRUE(fake_data_fetcher.StartFetchingDeviceData(
+      CONSUMER_TYPE_ORIENTATION));
+  fake_data_fetcher.WaitForStart(CONSUMER_TYPE_ORIENTATION);
+
+  EXPECT_FALSE(fake_data_fetcher.IsPollingTimerRunningForTesting());
+  EXPECT_EQ(0, fake_data_fetcher.GetOrientationBuffer()->data.alpha);
+
+  fake_data_fetcher.StopFetchingDeviceData(CONSUMER_TYPE_ORIENTATION);
+  fake_data_fetcher.WaitForStop(CONSUMER_TYPE_ORIENTATION);
+}
+
+
+}  // namespace
+
+}  // namespace content
diff --git a/content/browser/device_sensors/data_fetcher_shared_memory_default.cc b/content/browser/device_sensors/data_fetcher_shared_memory_default.cc
new file mode 100644
index 0000000..457fd8d
--- /dev/null
+++ b/content/browser/device_sensors/data_fetcher_shared_memory_default.cc
@@ -0,0 +1,75 @@
+// 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.
+
+#include "data_fetcher_shared_memory.h"
+
+#include "base/logging.h"
+#include "base/metrics/histogram.h"
+
+namespace {
+
+static bool SetMotionBuffer(content::DeviceMotionHardwareBuffer* buffer,
+    bool enabled) {
+  if (!buffer)
+    return false;
+  buffer->seqlock.WriteBegin();
+  buffer->data.allAvailableSensorsAreActive = enabled;
+  buffer->seqlock.WriteEnd();
+  return true;
+}
+
+static bool SetOrientationBuffer(
+    content::DeviceOrientationHardwareBuffer* buffer, bool enabled) {
+  if (!buffer)
+    return false;
+  buffer->seqlock.WriteBegin();
+  buffer->data.allAvailableSensorsAreActive = enabled;
+  buffer->seqlock.WriteEnd();
+  return true;
+}
+
+}  // namespace
+
+namespace content {
+
+DataFetcherSharedMemory::DataFetcherSharedMemory()
+    : motion_buffer_(NULL), orientation_buffer_(NULL) {
+}
+
+DataFetcherSharedMemory::~DataFetcherSharedMemory() {
+}
+
+bool DataFetcherSharedMemory::Start(ConsumerType consumer_type, void* buffer) {
+  DCHECK(buffer);
+
+  switch (consumer_type) {
+    case CONSUMER_TYPE_MOTION:
+      motion_buffer_ = static_cast<DeviceMotionHardwareBuffer*>(buffer);
+      UMA_HISTOGRAM_BOOLEAN("InertialSensor.MotionDefaultAvailable", false);
+      return SetMotionBuffer(motion_buffer_, true);
+    case CONSUMER_TYPE_ORIENTATION:
+      orientation_buffer_ =
+          static_cast<DeviceOrientationHardwareBuffer*>(buffer);
+      UMA_HISTOGRAM_BOOLEAN("InertialSensor.OrientationDefaultAvailable",
+          false);
+      return SetOrientationBuffer(orientation_buffer_, true);
+    default:
+      NOTREACHED();
+  }
+  return false;
+}
+
+bool DataFetcherSharedMemory::Stop(ConsumerType consumer_type) {
+  switch (consumer_type) {
+    case CONSUMER_TYPE_MOTION:
+      return SetMotionBuffer(motion_buffer_, false);
+    case CONSUMER_TYPE_ORIENTATION:
+      return SetOrientationBuffer(orientation_buffer_, false);
+    default:
+      NOTREACHED();
+  }
+  return false;
+}
+
+}  // namespace content
diff --git a/content/browser/device_sensors/data_fetcher_shared_memory_mac.cc b/content/browser/device_sensors/data_fetcher_shared_memory_mac.cc
new file mode 100644
index 0000000..7f4934d
--- /dev/null
+++ b/content/browser/device_sensors/data_fetcher_shared_memory_mac.cc
@@ -0,0 +1,186 @@
+// 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.
+
+#include "data_fetcher_shared_memory.h"
+
+#include "base/logging.h"
+#include "base/metrics/histogram.h"
+#include "third_party/sudden_motion_sensor/sudden_motion_sensor_mac.h"
+
+namespace {
+
+const double kMeanGravity = 9.80665;
+
+void FetchMotion(SuddenMotionSensor* sensor,
+    content::DeviceMotionHardwareBuffer* buffer) {
+  DCHECK(buffer);
+
+  float axis_value[3];
+  if (!sensor->ReadSensorValues(axis_value))
+    return;
+
+  buffer->seqlock.WriteBegin();
+  buffer->data.accelerationIncludingGravityX = axis_value[0] * kMeanGravity;
+  buffer->data.hasAccelerationIncludingGravityX = true;
+  buffer->data.accelerationIncludingGravityY = axis_value[1] * kMeanGravity;
+  buffer->data.hasAccelerationIncludingGravityY = true;
+  buffer->data.accelerationIncludingGravityZ = axis_value[2] * kMeanGravity;
+  buffer->data.hasAccelerationIncludingGravityZ = true;
+  buffer->data.allAvailableSensorsAreActive = true;
+  buffer->seqlock.WriteEnd();
+}
+
+void FetchOrientation(SuddenMotionSensor* sensor,
+    content::DeviceOrientationHardwareBuffer* buffer) {
+  DCHECK(buffer);
+
+  // Retrieve per-axis calibrated values.
+  float axis_value[3];
+  if (!sensor->ReadSensorValues(axis_value))
+    return;
+
+  // Transform the accelerometer values to W3C draft angles.
+  //
+  // Accelerometer values are just dot products of the sensor axes
+  // by the gravity vector 'g' with the result for the z axis inverted.
+  //
+  // To understand this transformation calculate the 3rd row of the z-x-y
+  // Euler angles rotation matrix (because of the 'g' vector, only 3rd row
+  // affects to the result). Note that z-x-y matrix means R = Ry * Rx * Rz.
+  // Then, assume alpha = 0 and you get this:
+  //
+  // x_acc = sin(gamma)
+  // y_acc = - cos(gamma) * sin(beta)
+  // z_acc = cos(beta) * cos(gamma)
+  //
+  // After that the rest is just a bit of trigonometry.
+  //
+  // Also note that alpha can't be provided but it's assumed to be always zero.
+  // This is necessary in order to provide enough information to solve
+  // the equations.
+  //
+  const double kRad2deg = 180.0 / M_PI;
+  double beta = kRad2deg * atan2(-axis_value[1], axis_value[2]);
+  double gamma = kRad2deg * asin(axis_value[0]);
+
+  // Make sure that the interval boundaries comply with the specification. At
+  // this point, beta is [-180, 180] and gamma is [-90, 90], but the spec has
+  // the upper bound open on both.
+  if (beta == 180.0)
+    beta = -180;  // -180 == 180 (upside-down)
+  if (gamma == 90.0)
+    gamma = nextafter(90, 0);
+
+  // At this point, DCHECKing is paranoia. Never hurts.
+  DCHECK_GE(beta, -180.0);
+  DCHECK_LT(beta,  180.0);
+  DCHECK_GE(gamma, -90.0);
+  DCHECK_LT(gamma,  90.0);
+
+  buffer->seqlock.WriteBegin();
+  buffer->data.beta = beta;
+  buffer->data.hasBeta = true;
+  buffer->data.gamma = gamma;
+  buffer->data.hasGamma = true;
+  buffer->data.allAvailableSensorsAreActive = true;
+  buffer->seqlock.WriteEnd();
+}
+
+}  // namespace
+
+namespace content {
+
+DataFetcherSharedMemory::DataFetcherSharedMemory() {
+}
+
+DataFetcherSharedMemory::~DataFetcherSharedMemory() {
+}
+
+void DataFetcherSharedMemory::Fetch(unsigned consumer_bitmask) {
+  DCHECK(base::MessageLoop::current() == GetPollingMessageLoop());
+  DCHECK(sudden_motion_sensor_);
+  DCHECK(consumer_bitmask & CONSUMER_TYPE_ORIENTATION ||
+         consumer_bitmask & CONSUMER_TYPE_MOTION);
+
+  if (consumer_bitmask & CONSUMER_TYPE_ORIENTATION)
+    FetchOrientation(sudden_motion_sensor_.get(), orientation_buffer_);
+  if (consumer_bitmask & CONSUMER_TYPE_MOTION)
+    FetchMotion(sudden_motion_sensor_.get(), motion_buffer_);
+}
+
+DataFetcherSharedMemory::FetcherType DataFetcherSharedMemory::GetType() const {
+  return FETCHER_TYPE_POLLING_CALLBACK;
+}
+
+bool DataFetcherSharedMemory::Start(ConsumerType consumer_type, void* buffer) {
+  DCHECK(base::MessageLoop::current() == GetPollingMessageLoop());
+  DCHECK(buffer);
+
+  if (!sudden_motion_sensor_)
+    sudden_motion_sensor_.reset(SuddenMotionSensor::Create());
+  bool sudden_motion_sensor_available = sudden_motion_sensor_.get() != NULL;
+
+  switch (consumer_type) {
+    case CONSUMER_TYPE_MOTION:
+      motion_buffer_ = static_cast<DeviceMotionHardwareBuffer*>(buffer);
+      UMA_HISTOGRAM_BOOLEAN("InertialSensor.MotionMacAvailable",
+          sudden_motion_sensor_available);
+      if (!sudden_motion_sensor_available) {
+        // No motion sensor available, fire an all-null event.
+        motion_buffer_->seqlock.WriteBegin();
+        motion_buffer_->data.allAvailableSensorsAreActive = true;
+        motion_buffer_->seqlock.WriteEnd();
+      }
+      return sudden_motion_sensor_available;
+    case CONSUMER_TYPE_ORIENTATION:
+      orientation_buffer_ =
+          static_cast<DeviceOrientationHardwareBuffer*>(buffer);
+      UMA_HISTOGRAM_BOOLEAN("InertialSensor.OrientationMacAvailable",
+          sudden_motion_sensor_available);
+      if (sudden_motion_sensor_available) {
+        // On Mac we cannot provide absolute orientation.
+        orientation_buffer_->seqlock.WriteBegin();
+        orientation_buffer_->data.absolute = false;
+        orientation_buffer_->data.hasAbsolute = true;
+        orientation_buffer_->seqlock.WriteEnd();
+      } else {
+        // No motion sensor available, fire an all-null event.
+        orientation_buffer_->seqlock.WriteBegin();
+        orientation_buffer_->data.allAvailableSensorsAreActive = true;
+        orientation_buffer_->seqlock.WriteEnd();
+      }
+      return sudden_motion_sensor_available;
+    default:
+      NOTREACHED();
+  }
+  return false;
+}
+
+bool DataFetcherSharedMemory::Stop(ConsumerType consumer_type) {
+  DCHECK(base::MessageLoop::current() == GetPollingMessageLoop());
+
+  switch (consumer_type) {
+    case CONSUMER_TYPE_MOTION:
+      if (motion_buffer_) {
+        motion_buffer_->seqlock.WriteBegin();
+        motion_buffer_->data.allAvailableSensorsAreActive = false;
+        motion_buffer_->seqlock.WriteEnd();
+        motion_buffer_ = NULL;
+      }
+      return true;
+    case CONSUMER_TYPE_ORIENTATION:
+      if (orientation_buffer_) {
+        orientation_buffer_->seqlock.WriteBegin();
+        orientation_buffer_->data.allAvailableSensorsAreActive = false;
+        orientation_buffer_->seqlock.WriteEnd();
+        orientation_buffer_ = NULL;
+      }
+      return true;
+    default:
+      NOTREACHED();
+  }
+  return false;
+}
+
+}  // namespace content
diff --git a/content/browser/device_sensors/data_fetcher_shared_memory_win.cc b/content/browser/device_sensors/data_fetcher_shared_memory_win.cc
new file mode 100644
index 0000000..b4112ae
--- /dev/null
+++ b/content/browser/device_sensors/data_fetcher_shared_memory_win.cc
@@ -0,0 +1,398 @@
+// 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.
+
+#include "data_fetcher_shared_memory.h"
+
+#include <GuidDef.h>
+#include <InitGuid.h>
+#include <PortableDeviceTypes.h>
+#include <Sensors.h>
+
+#include "base/logging.h"
+#include "base/metrics/histogram.h"
+#include "base/win/iunknown_impl.h"
+#include "base/win/windows_version.h"
+
+namespace {
+
+const double kMeanGravity = 9.80665;
+
+}  // namespace
+
+
+namespace content {
+
+class DataFetcherSharedMemory::SensorEventSink
+    : public ISensorEvents, public base::win::IUnknownImpl {
+ public:
+  SensorEventSink() {}
+  virtual ~SensorEventSink() {}
+
+  // IUnknown interface
+  virtual ULONG STDMETHODCALLTYPE AddRef() OVERRIDE {
+    return IUnknownImpl::AddRef();
+  }
+
+  virtual ULONG STDMETHODCALLTYPE Release() OVERRIDE {
+    return IUnknownImpl::Release();
+  }
+
+  virtual STDMETHODIMP QueryInterface(REFIID riid, void** ppv) OVERRIDE {
+    if (riid == __uuidof(ISensorEvents)) {
+      *ppv = static_cast<ISensorEvents*>(this);
+      AddRef();
+      return S_OK;
+    }
+    return IUnknownImpl::QueryInterface(riid, ppv);
+  }
+
+  // ISensorEvents interface
+  STDMETHODIMP OnEvent(ISensor* sensor,
+                       REFGUID event_id,
+                       IPortableDeviceValues* event_data) OVERRIDE {
+    return S_OK;
+  }
+
+  STDMETHODIMP OnLeave(REFSENSOR_ID sensor_id) OVERRIDE {
+    return S_OK;
+  }
+
+  STDMETHODIMP OnStateChanged(ISensor* sensor, SensorState state) OVERRIDE {
+    return S_OK;
+  }
+
+  STDMETHODIMP OnDataUpdated(ISensor* sensor,
+                             ISensorDataReport* new_data) OVERRIDE {
+    if (NULL == new_data || NULL == sensor)
+      return E_INVALIDARG;
+    return UpdateSharedMemoryBuffer(sensor, new_data) ? S_OK : E_FAIL;
+  }
+
+protected:
+  virtual bool UpdateSharedMemoryBuffer(
+      ISensor* sensor, ISensorDataReport* new_data) = 0;
+
+  void GetSensorValue(REFPROPERTYKEY property, ISensorDataReport* new_data,
+      double* value, bool* has_value) {
+    PROPVARIANT variant_value = {};
+    if (SUCCEEDED(new_data->GetSensorValue(property, &variant_value))) {
+      if (variant_value.vt == VT_R8)
+        *value = variant_value.dblVal;
+      else if (variant_value.vt == VT_R4)
+        *value = variant_value.fltVal;
+      *has_value = true;
+    } else {
+      *value = 0;
+      *has_value = false;
+    }
+  }
+
+ private:
+
+  DISALLOW_COPY_AND_ASSIGN(SensorEventSink);
+};
+
+class DataFetcherSharedMemory::SensorEventSinkOrientation
+    : public DataFetcherSharedMemory::SensorEventSink {
+ public:
+  explicit SensorEventSinkOrientation(
+      DeviceOrientationHardwareBuffer* const buffer) : buffer_(buffer) {}
+  virtual ~SensorEventSinkOrientation() {}
+
+protected:
+  virtual bool UpdateSharedMemoryBuffer(
+      ISensor* sensor, ISensorDataReport* new_data) OVERRIDE {
+    double alpha, beta, gamma;
+    bool has_alpha, has_beta, has_gamma;
+
+    GetSensorValue(SENSOR_DATA_TYPE_TILT_X_DEGREES, new_data, &alpha,
+        &has_alpha);
+    GetSensorValue(SENSOR_DATA_TYPE_TILT_Y_DEGREES, new_data, &beta,
+        &has_beta);
+    GetSensorValue(SENSOR_DATA_TYPE_TILT_Z_DEGREES, new_data, &gamma,
+        &has_gamma);
+
+    if (buffer_) {
+      buffer_->seqlock.WriteBegin();
+      buffer_->data.alpha = alpha;
+      buffer_->data.hasAlpha = has_alpha;
+      buffer_->data.beta = beta;
+      buffer_->data.hasBeta = has_beta;
+      buffer_->data.gamma = gamma;
+      buffer_->data.hasGamma = has_gamma;
+      buffer_->data.absolute = true;
+      buffer_->data.hasAbsolute = has_alpha || has_beta || has_gamma;
+      buffer_->data.allAvailableSensorsAreActive = true;
+      buffer_->seqlock.WriteEnd();
+    }
+
+    return true;
+  }
+
+ private:
+  DeviceOrientationHardwareBuffer* const buffer_;
+
+  DISALLOW_COPY_AND_ASSIGN(SensorEventSinkOrientation);
+};
+
+class DataFetcherSharedMemory::SensorEventSinkMotion
+    : public DataFetcherSharedMemory::SensorEventSink {
+ public:
+  explicit SensorEventSinkMotion(DeviceMotionHardwareBuffer* const buffer)
+      : buffer_(buffer) {}
+  virtual ~SensorEventSinkMotion() {}
+
+ protected:
+  virtual bool UpdateSharedMemoryBuffer(
+      ISensor* sensor, ISensorDataReport* new_data) OVERRIDE {
+
+    SENSOR_TYPE_ID sensor_type = GUID_NULL;
+    if (!SUCCEEDED(sensor->GetType(&sensor_type)))
+      return false;
+
+    if (IsEqualIID(sensor_type, SENSOR_TYPE_ACCELEROMETER_3D)) {
+      double acceleration_including_gravity_x;
+      double acceleration_including_gravity_y;
+      double acceleration_including_gravity_z;
+      bool has_acceleration_including_gravity_x;
+      bool has_acceleration_including_gravity_y;
+      bool has_acceleration_including_gravity_z;
+
+      GetSensorValue(SENSOR_DATA_TYPE_ACCELERATION_X_G, new_data,
+          &acceleration_including_gravity_x,
+          &has_acceleration_including_gravity_x);
+      GetSensorValue(SENSOR_DATA_TYPE_ACCELERATION_Y_G, new_data,
+          &acceleration_including_gravity_y,
+          &has_acceleration_including_gravity_y);
+      GetSensorValue(SENSOR_DATA_TYPE_ACCELERATION_Z_G, new_data,
+          &acceleration_including_gravity_z,
+          &has_acceleration_including_gravity_z);
+
+      if (buffer_) {
+        buffer_->seqlock.WriteBegin();
+        buffer_->data.accelerationIncludingGravityX =
+            -acceleration_including_gravity_x * kMeanGravity;
+        buffer_->data.hasAccelerationIncludingGravityX =
+            has_acceleration_including_gravity_x;
+        buffer_->data.accelerationIncludingGravityY =
+            -acceleration_including_gravity_y * kMeanGravity;
+        buffer_->data.hasAccelerationIncludingGravityY =
+            has_acceleration_including_gravity_y;
+        buffer_->data.accelerationIncludingGravityZ =
+            -acceleration_including_gravity_z * kMeanGravity;
+        buffer_->data.hasAccelerationIncludingGravityZ =
+            has_acceleration_including_gravity_z;
+        // TODO(timvolodine): consider setting this after all
+        // sensors have fired.
+        buffer_->data.allAvailableSensorsAreActive = true;
+        buffer_->seqlock.WriteEnd();
+      }
+
+    } else if (IsEqualIID(sensor_type, SENSOR_TYPE_GYROMETER_3D)) {
+      double alpha, beta, gamma;
+      bool has_alpha, has_beta, has_gamma;
+
+      GetSensorValue(SENSOR_DATA_TYPE_ANGULAR_VELOCITY_X_DEGREES_PER_SECOND,
+          new_data, &alpha, &has_alpha);
+      GetSensorValue(SENSOR_DATA_TYPE_ANGULAR_VELOCITY_Y_DEGREES_PER_SECOND,
+          new_data, &beta, &has_beta);
+      GetSensorValue(SENSOR_DATA_TYPE_ANGULAR_VELOCITY_Z_DEGREES_PER_SECOND,
+          new_data, &gamma, &has_gamma);
+
+      if (buffer_) {
+        buffer_->seqlock.WriteBegin();
+        buffer_->data.rotationRateAlpha = alpha;
+        buffer_->data.hasRotationRateAlpha = has_alpha;
+        buffer_->data.rotationRateBeta = beta;
+        buffer_->data.hasRotationRateBeta = has_beta;
+        buffer_->data.rotationRateGamma = gamma;
+        buffer_->data.hasRotationRateGamma = has_gamma;
+        buffer_->data.allAvailableSensorsAreActive = true;
+        buffer_->seqlock.WriteEnd();
+      }
+    }
+
+    return true;
+  }
+
+  private:
+   DeviceMotionHardwareBuffer* const buffer_;
+
+   DISALLOW_COPY_AND_ASSIGN(SensorEventSinkMotion);
+ };
+
+
+DataFetcherSharedMemory::DataFetcherSharedMemory()
+    : motion_buffer_(NULL),
+      orientation_buffer_(NULL) {
+}
+
+DataFetcherSharedMemory::~DataFetcherSharedMemory() {
+}
+
+DataFetcherSharedMemory::FetcherType DataFetcherSharedMemory::GetType() const {
+  return FETCHER_TYPE_SEPARATE_THREAD;
+}
+
+bool DataFetcherSharedMemory::Start(ConsumerType consumer_type, void* buffer) {
+  DCHECK(buffer);
+
+  switch (consumer_type) {
+    case CONSUMER_TYPE_ORIENTATION:
+      {
+        orientation_buffer_ =
+            static_cast<DeviceOrientationHardwareBuffer*>(buffer);
+        scoped_refptr<SensorEventSink> sink(
+            new SensorEventSinkOrientation(orientation_buffer_));
+        bool inclinometer_available = RegisterForSensor(
+            SENSOR_TYPE_INCLINOMETER_3D, sensor_inclinometer_.Receive(), sink);
+        UMA_HISTOGRAM_BOOLEAN("InertialSensor.InclinometerWindowsAvailable",
+            inclinometer_available);
+        if (inclinometer_available)
+          return true;
+        // if no sensors are available set buffer to ready, to fire null-events.
+        SetBufferAvailableState(consumer_type, true);
+      }
+      break;
+    case CONSUMER_TYPE_MOTION:
+      {
+        motion_buffer_ = static_cast<DeviceMotionHardwareBuffer*>(buffer);
+        scoped_refptr<SensorEventSink> sink(
+            new SensorEventSinkMotion(motion_buffer_));
+        bool accelerometer_available = RegisterForSensor(
+            SENSOR_TYPE_ACCELEROMETER_3D, sensor_accelerometer_.Receive(),
+            sink);
+        bool gyrometer_available = RegisterForSensor(
+            SENSOR_TYPE_GYROMETER_3D, sensor_gyrometer_.Receive(), sink);
+        UMA_HISTOGRAM_BOOLEAN("InertialSensor.AccelerometerWindowsAvailable",
+            accelerometer_available);
+        UMA_HISTOGRAM_BOOLEAN("InertialSensor.GyrometerWindowsAvailable",
+            gyrometer_available);
+        if (accelerometer_available || gyrometer_available) {
+          motion_buffer_->seqlock.WriteBegin();
+          motion_buffer_->data.interval = GetInterval().InMilliseconds();
+          motion_buffer_->seqlock.WriteEnd();
+          return true;
+        }
+        // if no sensors are available set buffer to ready, to fire null-events.
+        SetBufferAvailableState(consumer_type, true);
+      }
+      break;
+    default:
+      NOTREACHED();
+  }
+  return false;
+}
+
+bool DataFetcherSharedMemory::Stop(ConsumerType consumer_type) {
+  DisableSensors(consumer_type);
+  SetBufferAvailableState(consumer_type, false);
+  switch (consumer_type) {
+    case CONSUMER_TYPE_ORIENTATION:
+      orientation_buffer_ = NULL;
+      return true;
+    case CONSUMER_TYPE_MOTION:
+      motion_buffer_ = NULL;
+      return true;
+    default:
+      NOTREACHED();
+  }
+  return false;
+}
+
+bool DataFetcherSharedMemory::RegisterForSensor(
+    REFSENSOR_TYPE_ID sensor_type,
+    ISensor** sensor,
+    scoped_refptr<SensorEventSink> event_sink) {
+  if (base::win::GetVersion() < base::win::VERSION_WIN7)
+    return false;
+
+  base::win::ScopedComPtr<ISensorManager> sensor_manager;
+  HRESULT hr = sensor_manager.CreateInstance(CLSID_SensorManager);
+  if (FAILED(hr) || !sensor_manager)
+    return false;
+
+  base::win::ScopedComPtr<ISensorCollection> sensor_collection;
+  hr = sensor_manager->GetSensorsByType(
+      sensor_type, sensor_collection.Receive());
+
+  if (FAILED(hr) || !sensor_collection)
+    return false;
+
+  ULONG count = 0;
+  hr = sensor_collection->GetCount(&count);
+  if (FAILED(hr) || !count)
+    return false;
+
+  hr = sensor_collection->GetAt(0, sensor);
+  if (FAILED(hr) || !(*sensor))
+    return false;
+
+  base::win::ScopedComPtr<IPortableDeviceValues> device_values;
+  if (SUCCEEDED(device_values.CreateInstance(CLSID_PortableDeviceValues))) {
+    if (SUCCEEDED(device_values->SetUnsignedIntegerValue(
+        SENSOR_PROPERTY_CURRENT_REPORT_INTERVAL,
+        GetInterval().InMilliseconds()))) {
+      base::win::ScopedComPtr<IPortableDeviceValues> return_values;
+      (*sensor)->SetProperties(device_values.get(), return_values.Receive());
+    }
+  }
+
+  base::win::ScopedComPtr<ISensorEvents> sensor_events;
+  hr = event_sink->QueryInterface(
+      __uuidof(ISensorEvents), sensor_events.ReceiveVoid());
+  if (FAILED(hr) || !sensor_events)
+    return false;
+
+  hr = (*sensor)->SetEventSink(sensor_events);
+  if (FAILED(hr))
+    return false;
+
+  return true;
+}
+
+void DataFetcherSharedMemory::DisableSensors(ConsumerType consumer_type) {
+  switch(consumer_type) {
+    case CONSUMER_TYPE_ORIENTATION:
+      if (sensor_inclinometer_) {
+        sensor_inclinometer_->SetEventSink(NULL);
+        sensor_inclinometer_.Release();
+      }
+      break;
+    case CONSUMER_TYPE_MOTION:
+      if (sensor_accelerometer_) {
+        sensor_accelerometer_->SetEventSink(NULL);
+        sensor_accelerometer_.Release();
+      }
+      if (sensor_gyrometer_) {
+        sensor_gyrometer_->SetEventSink(NULL);
+        sensor_gyrometer_.Release();
+      }
+      break;
+    default:
+      NOTREACHED();
+  }
+}
+
+void DataFetcherSharedMemory::SetBufferAvailableState(
+    ConsumerType consumer_type, bool enabled) {
+  switch(consumer_type) {
+    case CONSUMER_TYPE_ORIENTATION:
+      if (orientation_buffer_) {
+        orientation_buffer_->seqlock.WriteBegin();
+        orientation_buffer_->data.allAvailableSensorsAreActive = enabled;
+        orientation_buffer_->seqlock.WriteEnd();
+      }
+    case CONSUMER_TYPE_MOTION:
+      if (motion_buffer_) {
+        motion_buffer_->seqlock.WriteBegin();
+        motion_buffer_->data.allAvailableSensorsAreActive = enabled;
+        motion_buffer_->seqlock.WriteEnd();
+      }
+    default:
+      NOTREACHED();
+  }
+}
+
+}  // namespace content
diff --git a/content/browser/device_sensors/device_inertial_sensor_browsertest.cc b/content/browser/device_sensors/device_inertial_sensor_browsertest.cc
new file mode 100644
index 0000000..f76f164
--- /dev/null
+++ b/content/browser/device_sensors/device_inertial_sensor_browsertest.cc
@@ -0,0 +1,289 @@
+// 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.
+
+#include "base/command_line.h"
+#include "base/synchronization/waitable_event.h"
+#include "base/threading/platform_thread.h"
+#include "content/browser/device_sensors/data_fetcher_shared_memory.h"
+#include "content/browser/device_sensors/device_inertial_sensor_service.h"
+#include "content/common/device_sensors/device_motion_hardware_buffer.h"
+#include "content/common/device_sensors/device_orientation_hardware_buffer.h"
+#include "content/public/browser/browser_thread.h"
+#include "content/public/browser/web_contents.h"
+#include "content/public/common/content_switches.h"
+#include "content/public/test/content_browser_test.h"
+#include "content/public/test/content_browser_test_utils.h"
+#include "content/public/test/test_navigation_observer.h"
+#include "content/public/test/test_utils.h"
+#include "content/shell/browser/shell.h"
+#include "content/shell/browser/shell_javascript_dialog_manager.h"
+
+namespace content {
+
+namespace {
+
+class FakeDataFetcher : public DataFetcherSharedMemory {
+ public:
+  FakeDataFetcher()
+      : started_orientation_(false, false),
+        stopped_orientation_(false, false),
+        started_motion_(false, false),
+        stopped_motion_(false, false),
+        sensor_data_available_(true) {
+  }
+  virtual ~FakeDataFetcher() { }
+
+  virtual bool Start(ConsumerType consumer_type, void* buffer) OVERRIDE {
+    EXPECT_TRUE(buffer);
+
+    switch (consumer_type) {
+      case CONSUMER_TYPE_MOTION:
+        {
+          DeviceMotionHardwareBuffer* motion_buffer =
+              static_cast<DeviceMotionHardwareBuffer*>(buffer);
+          if (sensor_data_available_)
+            UpdateMotion(motion_buffer);
+          SetMotionBufferReady(motion_buffer);
+          started_motion_.Signal();
+        }
+        break;
+      case CONSUMER_TYPE_ORIENTATION:
+        {
+          DeviceOrientationHardwareBuffer* orientation_buffer =
+              static_cast<DeviceOrientationHardwareBuffer*>(buffer);
+          if (sensor_data_available_)
+            UpdateOrientation(orientation_buffer);
+          SetOrientationBufferReady(orientation_buffer);
+          started_orientation_.Signal();
+        }
+        break;
+      default:
+        return false;
+    }
+    return true;
+  }
+
+  virtual bool Stop(ConsumerType consumer_type) OVERRIDE {
+    switch (consumer_type) {
+      case CONSUMER_TYPE_MOTION:
+        stopped_motion_.Signal();
+        break;
+      case CONSUMER_TYPE_ORIENTATION:
+        stopped_orientation_.Signal();
+        break;
+      default:
+        return false;
+    }
+    return true;
+  }
+
+  virtual void Fetch(unsigned consumer_bitmask) OVERRIDE {
+    FAIL() << "fetch should not be called";
+  }
+
+  virtual FetcherType GetType() const OVERRIDE {
+    return FETCHER_TYPE_DEFAULT;
+  }
+
+  void SetSensorDataAvailable(bool available) {
+    sensor_data_available_ = available;
+  }
+
+  void SetMotionBufferReady(DeviceMotionHardwareBuffer* buffer) {
+    buffer->seqlock.WriteBegin();
+    buffer->data.allAvailableSensorsAreActive = true;
+    buffer->seqlock.WriteEnd();
+  }
+
+  void SetOrientationBufferReady(DeviceOrientationHardwareBuffer* buffer) {
+    buffer->seqlock.WriteBegin();
+    buffer->data.allAvailableSensorsAreActive = true;
+    buffer->seqlock.WriteEnd();
+  }
+
+  void UpdateMotion(DeviceMotionHardwareBuffer* buffer) {
+    buffer->seqlock.WriteBegin();
+    buffer->data.accelerationX = 1;
+    buffer->data.hasAccelerationX = true;
+    buffer->data.accelerationY = 2;
+    buffer->data.hasAccelerationY = true;
+    buffer->data.accelerationZ = 3;
+    buffer->data.hasAccelerationZ = true;
+
+    buffer->data.accelerationIncludingGravityX = 4;
+    buffer->data.hasAccelerationIncludingGravityX = true;
+    buffer->data.accelerationIncludingGravityY = 5;
+    buffer->data.hasAccelerationIncludingGravityY = true;
+    buffer->data.accelerationIncludingGravityZ = 6;
+    buffer->data.hasAccelerationIncludingGravityZ = true;
+
+    buffer->data.rotationRateAlpha = 7;
+    buffer->data.hasRotationRateAlpha = true;
+    buffer->data.rotationRateBeta = 8;
+    buffer->data.hasRotationRateBeta = true;
+    buffer->data.rotationRateGamma = 9;
+    buffer->data.hasRotationRateGamma = true;
+
+    buffer->data.interval = 100;
+    buffer->data.allAvailableSensorsAreActive = true;
+    buffer->seqlock.WriteEnd();
+  }
+
+  void UpdateOrientation(DeviceOrientationHardwareBuffer* buffer) {
+    buffer->seqlock.WriteBegin();
+    buffer->data.alpha = 1;
+    buffer->data.hasAlpha = true;
+    buffer->data.beta = 2;
+    buffer->data.hasBeta = true;
+    buffer->data.gamma = 3;
+    buffer->data.hasGamma = true;
+    buffer->data.allAvailableSensorsAreActive = true;
+    buffer->seqlock.WriteEnd();
+  }
+
+  base::WaitableEvent started_orientation_;
+  base::WaitableEvent stopped_orientation_;
+  base::WaitableEvent started_motion_;
+  base::WaitableEvent stopped_motion_;
+  bool sensor_data_available_;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(FakeDataFetcher);
+};
+
+
+class DeviceInertialSensorBrowserTest : public ContentBrowserTest  {
+ public:
+  DeviceInertialSensorBrowserTest()
+      : fetcher_(NULL),
+        io_loop_finished_event_(false, false) {
+  }
+
+  virtual void SetUpOnMainThread() OVERRIDE {
+    BrowserThread::PostTask(
+        BrowserThread::IO, FROM_HERE,
+        base::Bind(&DeviceInertialSensorBrowserTest::SetUpOnIOThread, this));
+    io_loop_finished_event_.Wait();
+  }
+
+  void SetUpOnIOThread() {
+    fetcher_ = new FakeDataFetcher();
+    DeviceInertialSensorService::GetInstance()->
+        SetDataFetcherForTests(fetcher_);
+    io_loop_finished_event_.Signal();
+  }
+
+  void DelayAndQuit(base::TimeDelta delay) {
+    base::PlatformThread::Sleep(delay);
+    base::MessageLoop::current()->QuitWhenIdle();
+  }
+
+  void WaitForAlertDialogAndQuitAfterDelay(base::TimeDelta delay) {
+    ShellJavaScriptDialogManager* dialog_manager=
+        static_cast<ShellJavaScriptDialogManager*>(
+            shell()->GetJavaScriptDialogManager());
+
+    scoped_refptr<MessageLoopRunner> runner = new MessageLoopRunner();
+    dialog_manager->set_dialog_request_callback(
+        base::Bind(&DeviceInertialSensorBrowserTest::DelayAndQuit, this,
+            delay));
+    runner->Run();
+  }
+
+  FakeDataFetcher* fetcher_;
+
+ private:
+  base::WaitableEvent io_loop_finished_event_;
+};
+
+
+IN_PROC_BROWSER_TEST_F(DeviceInertialSensorBrowserTest, OrientationTest) {
+  // The test page will register an event handler for orientation events,
+  // expects to get an event with fake values, then removes the event
+  // handler and navigates to #pass.
+  GURL test_url = GetTestUrl(
+      "device_orientation", "device_orientation_test.html");
+  NavigateToURLBlockUntilNavigationsComplete(shell(), test_url, 2);
+
+  EXPECT_EQ("pass", shell()->web_contents()->GetLastCommittedURL().ref());
+  fetcher_->started_orientation_.Wait();
+  fetcher_->stopped_orientation_.Wait();
+}
+
+IN_PROC_BROWSER_TEST_F(DeviceInertialSensorBrowserTest, MotionTest) {
+  // The test page will register an event handler for motion events,
+  // expects to get an event with fake values, then removes the event
+  // handler and navigates to #pass.
+  GURL test_url = GetTestUrl(
+      "device_orientation", "device_motion_test.html");
+  NavigateToURLBlockUntilNavigationsComplete(shell(), test_url, 2);
+
+  EXPECT_EQ("pass", shell()->web_contents()->GetLastCommittedURL().ref());
+  fetcher_->started_motion_.Wait();
+  fetcher_->stopped_motion_.Wait();
+}
+
+// Flaking in the android try bot. See http://crbug.com/360578.
+#if defined(OS_ANDROID)
+#define MAYBE_OrientationNullTestWithAlert DISABLED_OrientationNullTestWithAlert
+#else
+#define MAYBE_OrientationNullTestWithAlert OrientationNullTestWithAlert
+#endif
+IN_PROC_BROWSER_TEST_F(DeviceInertialSensorBrowserTest,
+    MAYBE_OrientationNullTestWithAlert) {
+  // The test page will register an event handler for orientation events,
+  // expects to get an event with null values. The test raises a modal alert
+  // dialog with a delay to test that the one-off null-event still propagates
+  // to window after the alert is dismissed and the callback is invoked which
+  // navigates to #pass.
+  fetcher_->SetSensorDataAvailable(false);
+  TestNavigationObserver same_tab_observer(shell()->web_contents(), 2);
+
+  GURL test_url = GetTestUrl(
+      "device_orientation", "device_orientation_null_test_with_alert.html");
+  shell()->LoadURL(test_url);
+
+  // TODO(timvolodine): investigate if it is possible to test this without
+  // delay, crbug.com/360044.
+  WaitForAlertDialogAndQuitAfterDelay(base::TimeDelta::FromMilliseconds(1000));
+
+  fetcher_->started_orientation_.Wait();
+  fetcher_->stopped_orientation_.Wait();
+  same_tab_observer.Wait();
+  EXPECT_EQ("pass", shell()->web_contents()->GetLastCommittedURL().ref());
+}
+
+// Flaking in the android try bot. See http://crbug.com/360578.
+#if defined(OS_ANDROID)
+#define MAYBE_MotionNullTestWithAlert DISABLED_MotionNullTestWithAlert
+#else
+#define MAYBE_MotionNullTestWithAlert MotionNullTestWithAlert
+#endif
+IN_PROC_BROWSER_TEST_F(DeviceInertialSensorBrowserTest,
+    MAYBE_MotionNullTestWithAlert) {
+  // The test page will register an event handler for motion events,
+  // expects to get an event with null values. The test raises a modal alert
+  // dialog with a delay to test that the one-off null-event still propagates
+  // to window after the alert is dismissed and the callback is invoked which
+  // navigates to #pass.
+  fetcher_->SetSensorDataAvailable(false);
+  TestNavigationObserver same_tab_observer(shell()->web_contents(), 2);
+
+  GURL test_url = GetTestUrl(
+      "device_orientation", "device_motion_null_test_with_alert.html");
+  shell()->LoadURL(test_url);
+
+  // TODO(timvolodine): investigate if it is possible to test this without
+  // delay, crbug.com/360044.
+  WaitForAlertDialogAndQuitAfterDelay(base::TimeDelta::FromMilliseconds(1000));
+
+  fetcher_->started_motion_.Wait();
+  fetcher_->stopped_motion_.Wait();
+  same_tab_observer.Wait();
+  EXPECT_EQ("pass", shell()->web_contents()->GetLastCommittedURL().ref());
+}
+
+}  //  namespace
+
+}  //  namespace content
diff --git a/content/browser/device_sensors/device_inertial_sensor_service.cc b/content/browser/device_sensors/device_inertial_sensor_service.cc
new file mode 100644
index 0000000..4ae9c9d
--- /dev/null
+++ b/content/browser/device_sensors/device_inertial_sensor_service.cc
@@ -0,0 +1,99 @@
+// 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.
+
+#include "content/browser/device_sensors/device_inertial_sensor_service.h"
+
+#include "base/bind.h"
+#include "base/logging.h"
+#include "base/memory/singleton.h"
+#include "content/browser/device_sensors/data_fetcher_shared_memory.h"
+#include "content/public/browser/render_process_host.h"
+
+namespace content {
+
+DeviceInertialSensorService::DeviceInertialSensorService()
+    : num_motion_readers_(0),
+      num_orientation_readers_(0),
+      is_shutdown_(false) {
+}
+
+DeviceInertialSensorService::~DeviceInertialSensorService() {
+}
+
+DeviceInertialSensorService* DeviceInertialSensorService::GetInstance() {
+  return Singleton<DeviceInertialSensorService,
+                   LeakySingletonTraits<DeviceInertialSensorService> >::get();
+}
+
+void DeviceInertialSensorService::AddConsumer(ConsumerType consumer_type) {
+  if (!ChangeNumberConsumers(consumer_type, 1))
+    return;
+
+  DCHECK(GetNumberConsumers(consumer_type));
+
+  if (!data_fetcher_)
+    data_fetcher_.reset(new DataFetcherSharedMemory);
+  data_fetcher_->StartFetchingDeviceData(consumer_type);
+}
+
+void DeviceInertialSensorService::RemoveConsumer(ConsumerType consumer_type) {
+  if (!ChangeNumberConsumers(consumer_type, -1))
+    return;
+
+  if (GetNumberConsumers(consumer_type) == 0)
+    data_fetcher_->StopFetchingDeviceData(consumer_type);
+}
+
+bool DeviceInertialSensorService::ChangeNumberConsumers(
+    ConsumerType consumer_type, int delta) {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  if (is_shutdown_)
+    return false;
+
+  switch (consumer_type) {
+    case CONSUMER_TYPE_MOTION:
+      num_motion_readers_ += delta;
+      DCHECK_GE(num_motion_readers_, 0);
+      return true;
+    case CONSUMER_TYPE_ORIENTATION:
+      num_orientation_readers_ += delta;
+      DCHECK_GE(num_orientation_readers_ , 0);
+      return true;
+    default:
+      NOTREACHED();
+  }
+  return false;
+}
+
+int DeviceInertialSensorService::GetNumberConsumers(
+    ConsumerType consumer_type) const {
+  switch (consumer_type) {
+    case CONSUMER_TYPE_MOTION:
+      return num_motion_readers_;
+    case CONSUMER_TYPE_ORIENTATION:
+      return num_orientation_readers_;
+    default:
+      NOTREACHED();
+  }
+  return 0;
+}
+
+base::SharedMemoryHandle
+DeviceInertialSensorService::GetSharedMemoryHandleForProcess(
+    ConsumerType consumer_type, base::ProcessHandle handle) {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  return data_fetcher_->GetSharedMemoryHandleForProcess(consumer_type, handle);
+}
+
+void DeviceInertialSensorService::Shutdown() {
+  data_fetcher_.reset();
+  is_shutdown_ = true;
+}
+
+void DeviceInertialSensorService::SetDataFetcherForTests(
+    DataFetcherSharedMemory* test_data_fetcher) {
+  data_fetcher_.reset(test_data_fetcher);
+}
+
+}  // namespace content
diff --git a/content/browser/device_sensors/device_inertial_sensor_service.h b/content/browser/device_sensors/device_inertial_sensor_service.h
new file mode 100644
index 0000000..df1df0a
--- /dev/null
+++ b/content/browser/device_sensors/device_inertial_sensor_service.h
@@ -0,0 +1,72 @@
+// 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.
+
+#ifndef CONTENT_BROWSER_DEVICE_SENSORS_DEVICE_INERTIAL_SENSOR_SERVICE_H_
+#define CONTENT_BROWSER_DEVICE_SENSORS_DEVICE_INERTIAL_SENSOR_SERVICE_H_
+
+#include "base/basictypes.h"
+#include "base/callback_forward.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/memory/shared_memory.h"
+#include "base/memory/singleton.h"
+#include "base/threading/thread_checker.h"
+#include "content/browser/device_sensors/inertial_sensor_consts.h"
+#include "content/common/content_export.h"
+
+namespace content {
+
+class DataFetcherSharedMemory;
+class RenderProcessHost;
+
+// Owns the DeviceMotionProvider (the background polling thread) and keeps
+// track of the number of consumers currently using the data (and pausing
+// the provider when not in use).
+class CONTENT_EXPORT DeviceInertialSensorService {
+ public:
+  // Returns the DeviceInertialSensorService singleton.
+  static DeviceInertialSensorService* GetInstance();
+
+  // Increments the number of users of the provider. The Provider is running
+  // when there's > 0 users, and is paused when the count drops to 0.
+  // Must be called on the I/O thread.
+  void AddConsumer(ConsumerType consumer_type);
+
+  // Removes a consumer. Should be matched with an AddConsumer call.
+  // Must be called on the I/O thread.
+  void RemoveConsumer(ConsumerType cosumer_type);
+
+  // Returns the shared memory handle of the device motion data duplicated
+  // into the given process.
+  base::SharedMemoryHandle GetSharedMemoryHandleForProcess(
+      ConsumerType consumer_type, base::ProcessHandle handle);
+
+  // Stop/join with the background polling thread in |provider_|.
+  void Shutdown();
+
+  // Injects a custom data fetcher for testing purposes. This class takes
+  // ownership of the injected object.
+  void SetDataFetcherForTests(DataFetcherSharedMemory* test_data_fetcher);
+
+ private:
+  friend struct DefaultSingletonTraits<DeviceInertialSensorService>;
+
+  DeviceInertialSensorService();
+  virtual ~DeviceInertialSensorService();
+
+  bool ChangeNumberConsumers(ConsumerType consumer_type,
+      int delta);
+  int GetNumberConsumers(ConsumerType consumer_type) const;
+
+  int num_motion_readers_;
+  int num_orientation_readers_;
+  bool is_shutdown_;
+  scoped_ptr<DataFetcherSharedMemory> data_fetcher_;
+  base::ThreadChecker thread_checker_;
+
+  DISALLOW_COPY_AND_ASSIGN(DeviceInertialSensorService);
+};
+
+}  // namespace content
+
+#endif  // CONTENT_BROWSER_DEVICE_SENSORS_DEVICE_INERTIAL_SENSOR_SERVICE_H_
diff --git a/content/browser/device_sensors/device_motion_message_filter.cc b/content/browser/device_sensors/device_motion_message_filter.cc
new file mode 100644
index 0000000..26a3962
--- /dev/null
+++ b/content/browser/device_sensors/device_motion_message_filter.cc
@@ -0,0 +1,66 @@
+// 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.
+
+#include "content/browser/device_sensors/device_motion_message_filter.h"
+
+#include "content/browser/device_sensors/device_inertial_sensor_service.h"
+#include "content/common/device_sensors/device_motion_messages.h"
+
+namespace content {
+
+DeviceMotionMessageFilter::DeviceMotionMessageFilter()
+    : BrowserMessageFilter(DeviceMotionMsgStart),
+      is_started_(false) {
+}
+
+DeviceMotionMessageFilter::~DeviceMotionMessageFilter() {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+  if (is_started_)
+    DeviceInertialSensorService::GetInstance()->RemoveConsumer(
+        CONSUMER_TYPE_MOTION);
+}
+
+bool DeviceMotionMessageFilter::OnMessageReceived(
+    const IPC::Message& message,
+    bool* message_was_ok) {
+  bool handled = true;
+  IPC_BEGIN_MESSAGE_MAP_EX(DeviceMotionMessageFilter,
+                           message,
+                           *message_was_ok)
+    IPC_MESSAGE_HANDLER(DeviceMotionHostMsg_StartPolling,
+                        OnDeviceMotionStartPolling)
+    IPC_MESSAGE_HANDLER(DeviceMotionHostMsg_StopPolling,
+                        OnDeviceMotionStopPolling)
+    IPC_MESSAGE_UNHANDLED(handled = false)
+  IPC_END_MESSAGE_MAP_EX()
+  return handled;
+}
+
+void DeviceMotionMessageFilter::OnDeviceMotionStartPolling() {
+  DCHECK(!is_started_);
+  if (is_started_)
+    return;
+  is_started_ = true;
+  DeviceInertialSensorService::GetInstance()->AddConsumer(
+      CONSUMER_TYPE_MOTION);
+  DidStartDeviceMotionPolling();
+}
+
+void DeviceMotionMessageFilter::OnDeviceMotionStopPolling() {
+  DCHECK(is_started_);
+  if (!is_started_)
+    return;
+  is_started_ = false;
+  DeviceInertialSensorService::GetInstance()->RemoveConsumer(
+      CONSUMER_TYPE_MOTION);
+}
+
+void DeviceMotionMessageFilter::DidStartDeviceMotionPolling() {
+  Send(new DeviceMotionMsg_DidStartPolling(
+      DeviceInertialSensorService::GetInstance()->
+          GetSharedMemoryHandleForProcess(
+              CONSUMER_TYPE_MOTION, PeerHandle())));
+}
+
+}  // namespace content
diff --git a/content/browser/device_sensors/device_motion_message_filter.h b/content/browser/device_sensors/device_motion_message_filter.h
new file mode 100644
index 0000000..5bbce9b
--- /dev/null
+++ b/content/browser/device_sensors/device_motion_message_filter.h
@@ -0,0 +1,38 @@
+// 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.
+
+#ifndef CONTENT_BROWSER_DEVICE_SENSORS_DEVICE_MOTION_MESSAGE_FILTER_H_
+#define CONTENT_BROWSER_DEVICE_SENSORS_DEVICE_MOTION_MESSAGE_FILTER_H_
+
+#include "base/compiler_specific.h"
+#include "content/public/browser/browser_message_filter.h"
+
+namespace content {
+
+class DeviceMotionService;
+class RenderProcessHost;
+
+class DeviceMotionMessageFilter : public BrowserMessageFilter {
+ public:
+  DeviceMotionMessageFilter();
+
+  // BrowserMessageFilter implementation.
+  virtual bool OnMessageReceived(const IPC::Message& message,
+                                 bool* message_was_ok) OVERRIDE;
+
+ private:
+  virtual ~DeviceMotionMessageFilter();
+
+  void OnDeviceMotionStartPolling();
+  void OnDeviceMotionStopPolling();
+  void DidStartDeviceMotionPolling();
+
+  bool is_started_;
+
+  DISALLOW_COPY_AND_ASSIGN(DeviceMotionMessageFilter);
+};
+
+}  // namespace content
+
+#endif  // CONTENT_BROWSER_DEVICE_SENSORS_DEVICE_MOTION_MESSAGE_FILTER_H_
diff --git a/content/browser/device_sensors/device_orientation_message_filter.cc b/content/browser/device_sensors/device_orientation_message_filter.cc
new file mode 100644
index 0000000..622c685
--- /dev/null
+++ b/content/browser/device_sensors/device_orientation_message_filter.cc
@@ -0,0 +1,67 @@
+// 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.
+
+#include "content/browser/device_sensors/device_orientation_message_filter.h"
+
+#include "content/browser/device_sensors/device_inertial_sensor_service.h"
+#include "content/common/device_sensors/device_orientation_messages.h"
+
+namespace content {
+
+DeviceOrientationMessageFilter::DeviceOrientationMessageFilter()
+    : BrowserMessageFilter(DeviceOrientationMsgStart),
+      is_started_(false) {
+}
+
+DeviceOrientationMessageFilter::~DeviceOrientationMessageFilter() {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+  if (is_started_)
+    DeviceInertialSensorService::GetInstance()->RemoveConsumer(
+        CONSUMER_TYPE_ORIENTATION);
+}
+
+bool DeviceOrientationMessageFilter::OnMessageReceived(
+    const IPC::Message& message,
+    bool* message_was_ok) {
+  bool handled = true;
+  IPC_BEGIN_MESSAGE_MAP_EX(DeviceOrientationMessageFilter,
+                           message,
+                           *message_was_ok)
+    IPC_MESSAGE_HANDLER(DeviceOrientationHostMsg_StartPolling,
+                        OnDeviceOrientationStartPolling)
+    IPC_MESSAGE_HANDLER(DeviceOrientationHostMsg_StopPolling,
+                        OnDeviceOrientationStopPolling)
+    IPC_MESSAGE_UNHANDLED(handled = false)
+  IPC_END_MESSAGE_MAP_EX()
+  return handled;
+}
+
+void DeviceOrientationMessageFilter::OnDeviceOrientationStartPolling() {
+  DCHECK(!is_started_);
+  if (is_started_)
+    return;
+  is_started_ = true;
+  DeviceInertialSensorService::GetInstance()->AddConsumer(
+      CONSUMER_TYPE_ORIENTATION);
+  DidStartDeviceOrientationPolling();
+}
+
+void DeviceOrientationMessageFilter::OnDeviceOrientationStopPolling() {
+  DCHECK(is_started_);
+  if (!is_started_)
+    return;
+  is_started_ = false;
+  DeviceInertialSensorService::GetInstance()->RemoveConsumer(
+      CONSUMER_TYPE_ORIENTATION);
+}
+
+void DeviceOrientationMessageFilter::DidStartDeviceOrientationPolling() {
+  Send(new DeviceOrientationMsg_DidStartPolling(
+      DeviceInertialSensorService::GetInstance()->
+          GetSharedMemoryHandleForProcess(
+              CONSUMER_TYPE_ORIENTATION,
+              PeerHandle())));
+}
+
+}  // namespace content
diff --git a/content/browser/device_sensors/device_orientation_message_filter.h b/content/browser/device_sensors/device_orientation_message_filter.h
new file mode 100644
index 0000000..afc3ec2
--- /dev/null
+++ b/content/browser/device_sensors/device_orientation_message_filter.h
@@ -0,0 +1,37 @@
+// 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.
+
+#ifndef CONTENT_BROWSER_DEVICE_SENSORS_DEVICE_ORIENTATION_MESSAGE_FILTER_H_
+#define CONTENT_BROWSER_DEVICE_SENSORS_DEVICE_ORIENTATION_MESSAGE_FILTER_H_
+
+#include "base/compiler_specific.h"
+#include "content/public/browser/browser_message_filter.h"
+
+namespace content {
+
+class RenderProcessHost;
+
+class DeviceOrientationMessageFilter : public BrowserMessageFilter {
+ public:
+  DeviceOrientationMessageFilter();
+
+  // BrowserMessageFilter implementation.
+  virtual bool OnMessageReceived(const IPC::Message& message,
+                                 bool* message_was_ok) OVERRIDE;
+
+ private:
+  virtual ~DeviceOrientationMessageFilter();
+
+  void OnDeviceOrientationStartPolling();
+  void OnDeviceOrientationStopPolling();
+  void DidStartDeviceOrientationPolling();
+
+  bool is_started_;
+
+  DISALLOW_COPY_AND_ASSIGN(DeviceOrientationMessageFilter);
+};
+
+}  // namespace content
+
+#endif  // CONTENT_BROWSER_DEVICE_SENSORS_DEVICE_ORIENTATION_MESSAGE_FILTER_H_
diff --git a/content/browser/device_sensors/inertial_sensor_consts.h b/content/browser/device_sensors/inertial_sensor_consts.h
new file mode 100644
index 0000000..6ca6a98e
--- /dev/null
+++ b/content/browser/device_sensors/inertial_sensor_consts.h
@@ -0,0 +1,25 @@
+// 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.
+
+#ifndef CONTENT_BROWSER_DEVICE_SENSORS_INERTIAL_SENSOR_CONSTS_H_
+#define CONTENT_BROWSER_DEVICE_SENSORS_INERTIAL_SENSOR_CONSTS_H_
+
+namespace content {
+
+// Constants related to the Device Motion/Device Orientation APIs.
+
+enum ConsumerType {
+  CONSUMER_TYPE_MOTION = 1 << 0,
+  CONSUMER_TYPE_ORIENTATION = 1 << 1,
+};
+
+// Specifies the minimal interval between subsequent sensor data updates.
+// Note that when changing this value it is desirable to have an adequate
+// matching value |DeviceSensorEventPump::kDefaultPumpDelayMillis| in
+// content/renderer/device_orientation/device_sensor_event_pump.cc.
+const int kInertialSensorIntervalMillis = 50;
+
+}  // namespace content
+
+#endif  // CONTENT_BROWSER_DEVICE_SENSORS_INERTIAL_SENSOR_CONSTS_H_
diff --git a/content/browser/device_sensors/sensor_manager_android.cc b/content/browser/device_sensors/sensor_manager_android.cc
new file mode 100644
index 0000000..400adfa
--- /dev/null
+++ b/content/browser/device_sensors/sensor_manager_android.cc
@@ -0,0 +1,276 @@
+// 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.
+
+#include "content/browser/device_sensors/sensor_manager_android.h"
+
+#include <string.h>
+
+#include "base/android/jni_android.h"
+#include "base/memory/singleton.h"
+#include "base/metrics/histogram.h"
+#include "content/browser/device_sensors/inertial_sensor_consts.h"
+#include "jni/DeviceSensors_jni.h"
+
+using base::android::AttachCurrentThread;
+
+namespace {
+
+static void updateRotationVectorHistogram(bool value) {
+  UMA_HISTOGRAM_BOOLEAN("InertialSensor.RotationVectorAndroidAvailable", value);
+}
+
+}
+
+namespace content {
+
+SensorManagerAndroid::SensorManagerAndroid()
+    : number_active_device_motion_sensors_(0),
+      device_motion_buffer_(NULL),
+      device_orientation_buffer_(NULL),
+      is_motion_buffer_ready_(false),
+      is_orientation_buffer_ready_(false) {
+  memset(received_motion_data_, 0, sizeof(received_motion_data_));
+  device_orientation_.Reset(
+      Java_DeviceSensors_getInstance(
+          AttachCurrentThread(),
+          base::android::GetApplicationContext()));
+}
+
+SensorManagerAndroid::~SensorManagerAndroid() {
+}
+
+bool SensorManagerAndroid::Register(JNIEnv* env) {
+  return RegisterNativesImpl(env);
+}
+
+SensorManagerAndroid* SensorManagerAndroid::GetInstance() {
+  return Singleton<SensorManagerAndroid,
+                   LeakySingletonTraits<SensorManagerAndroid> >::get();
+}
+
+void SensorManagerAndroid::GotOrientation(
+    JNIEnv*, jobject, double alpha, double beta, double gamma) {
+  base::AutoLock autolock(orientation_buffer_lock_);
+
+  if (!device_orientation_buffer_)
+    return;
+
+  device_orientation_buffer_->seqlock.WriteBegin();
+  device_orientation_buffer_->data.alpha = alpha;
+  device_orientation_buffer_->data.hasAlpha = true;
+  device_orientation_buffer_->data.beta = beta;
+  device_orientation_buffer_->data.hasBeta = true;
+  device_orientation_buffer_->data.gamma = gamma;
+  device_orientation_buffer_->data.hasGamma = true;
+  device_orientation_buffer_->seqlock.WriteEnd();
+
+  if (!is_orientation_buffer_ready_) {
+    SetOrientationBufferReadyStatus(true);
+    updateRotationVectorHistogram(true);
+  }
+}
+
+void SensorManagerAndroid::GotAcceleration(
+    JNIEnv*, jobject, double x, double y, double z) {
+  base::AutoLock autolock(motion_buffer_lock_);
+
+  if (!device_motion_buffer_)
+    return;
+
+  device_motion_buffer_->seqlock.WriteBegin();
+  device_motion_buffer_->data.accelerationX = x;
+  device_motion_buffer_->data.hasAccelerationX = true;
+  device_motion_buffer_->data.accelerationY = y;
+  device_motion_buffer_->data.hasAccelerationY = true;
+  device_motion_buffer_->data.accelerationZ = z;
+  device_motion_buffer_->data.hasAccelerationZ = true;
+  device_motion_buffer_->seqlock.WriteEnd();
+
+  if (!is_motion_buffer_ready_) {
+    received_motion_data_[RECEIVED_MOTION_DATA_ACCELERATION] = 1;
+    CheckMotionBufferReadyToRead();
+  }
+}
+
+void SensorManagerAndroid::GotAccelerationIncludingGravity(
+    JNIEnv*, jobject, double x, double y, double z) {
+  base::AutoLock autolock(motion_buffer_lock_);
+
+  if (!device_motion_buffer_)
+    return;
+
+  device_motion_buffer_->seqlock.WriteBegin();
+  device_motion_buffer_->data.accelerationIncludingGravityX = x;
+  device_motion_buffer_->data.hasAccelerationIncludingGravityX = true;
+  device_motion_buffer_->data.accelerationIncludingGravityY = y;
+  device_motion_buffer_->data.hasAccelerationIncludingGravityY = true;
+  device_motion_buffer_->data.accelerationIncludingGravityZ = z;
+  device_motion_buffer_->data.hasAccelerationIncludingGravityZ = true;
+  device_motion_buffer_->seqlock.WriteEnd();
+
+  if (!is_motion_buffer_ready_) {
+    received_motion_data_[RECEIVED_MOTION_DATA_ACCELERATION_INCL_GRAVITY] = 1;
+    CheckMotionBufferReadyToRead();
+  }
+}
+
+void SensorManagerAndroid::GotRotationRate(
+    JNIEnv*, jobject, double alpha, double beta, double gamma) {
+  base::AutoLock autolock(motion_buffer_lock_);
+
+  if (!device_motion_buffer_)
+    return;
+
+  device_motion_buffer_->seqlock.WriteBegin();
+  device_motion_buffer_->data.rotationRateAlpha = alpha;
+  device_motion_buffer_->data.hasRotationRateAlpha = true;
+  device_motion_buffer_->data.rotationRateBeta = beta;
+  device_motion_buffer_->data.hasRotationRateBeta = true;
+  device_motion_buffer_->data.rotationRateGamma = gamma;
+  device_motion_buffer_->data.hasRotationRateGamma = true;
+  device_motion_buffer_->seqlock.WriteEnd();
+
+  if (!is_motion_buffer_ready_) {
+    received_motion_data_[RECEIVED_MOTION_DATA_ROTATION_RATE] = 1;
+    CheckMotionBufferReadyToRead();
+  }
+}
+
+bool SensorManagerAndroid::Start(EventType event_type) {
+  DCHECK(!device_orientation_.is_null());
+  return Java_DeviceSensors_start(
+      AttachCurrentThread(), device_orientation_.obj(),
+      reinterpret_cast<intptr_t>(this), static_cast<jint>(event_type),
+      kInertialSensorIntervalMillis);
+}
+
+void SensorManagerAndroid::Stop(EventType event_type) {
+  DCHECK(!device_orientation_.is_null());
+  Java_DeviceSensors_stop(
+      AttachCurrentThread(), device_orientation_.obj(),
+      static_cast<jint>(event_type));
+}
+
+int SensorManagerAndroid::GetNumberActiveDeviceMotionSensors() {
+  DCHECK(!device_orientation_.is_null());
+  return Java_DeviceSensors_getNumberActiveDeviceMotionSensors(
+      AttachCurrentThread(), device_orientation_.obj());
+}
+
+
+// ----- Shared memory API methods
+
+// --- Device Motion
+
+bool SensorManagerAndroid::StartFetchingDeviceMotionData(
+    DeviceMotionHardwareBuffer* buffer) {
+  DCHECK(buffer);
+  {
+    base::AutoLock autolock(motion_buffer_lock_);
+    device_motion_buffer_ = buffer;
+    ClearInternalMotionBuffers();
+  }
+  bool success = Start(kTypeMotion);
+
+  // If no motion data can ever be provided, the number of active device motion
+  // sensors will be zero. In that case flag the shared memory buffer
+  // as ready to read, as it will not change anyway.
+  number_active_device_motion_sensors_ = GetNumberActiveDeviceMotionSensors();
+  {
+    base::AutoLock autolock(motion_buffer_lock_);
+    CheckMotionBufferReadyToRead();
+  }
+  return success;
+}
+
+void SensorManagerAndroid::StopFetchingDeviceMotionData() {
+  Stop(kTypeMotion);
+  {
+    base::AutoLock autolock(motion_buffer_lock_);
+    if (device_motion_buffer_) {
+      ClearInternalMotionBuffers();
+      device_motion_buffer_ = NULL;
+    }
+  }
+}
+
+void SensorManagerAndroid::CheckMotionBufferReadyToRead() {
+  if (received_motion_data_[RECEIVED_MOTION_DATA_ACCELERATION] +
+      received_motion_data_[RECEIVED_MOTION_DATA_ACCELERATION_INCL_GRAVITY] +
+      received_motion_data_[RECEIVED_MOTION_DATA_ROTATION_RATE] ==
+      number_active_device_motion_sensors_) {
+    device_motion_buffer_->seqlock.WriteBegin();
+    device_motion_buffer_->data.interval = kInertialSensorIntervalMillis;
+    device_motion_buffer_->seqlock.WriteEnd();
+    SetMotionBufferReadyStatus(true);
+
+    UMA_HISTOGRAM_BOOLEAN("InertialSensor.AccelerometerAndroidAvailable",
+        received_motion_data_[RECEIVED_MOTION_DATA_ACCELERATION] > 0);
+    UMA_HISTOGRAM_BOOLEAN(
+        "InertialSensor.AccelerometerIncGravityAndroidAvailable",
+        received_motion_data_[RECEIVED_MOTION_DATA_ACCELERATION_INCL_GRAVITY]
+        > 0);
+    UMA_HISTOGRAM_BOOLEAN("InertialSensor.GyroscopeAndroidAvailable",
+        received_motion_data_[RECEIVED_MOTION_DATA_ROTATION_RATE] > 0);
+  }
+}
+
+void SensorManagerAndroid::SetMotionBufferReadyStatus(bool ready) {
+  device_motion_buffer_->seqlock.WriteBegin();
+  device_motion_buffer_->data.allAvailableSensorsAreActive = ready;
+  device_motion_buffer_->seqlock.WriteEnd();
+  is_motion_buffer_ready_ = ready;
+}
+
+void SensorManagerAndroid::ClearInternalMotionBuffers() {
+  memset(received_motion_data_, 0, sizeof(received_motion_data_));
+  number_active_device_motion_sensors_ = 0;
+  SetMotionBufferReadyStatus(false);
+}
+
+// --- Device Orientation
+
+void SensorManagerAndroid::SetOrientationBufferReadyStatus(bool ready) {
+  device_orientation_buffer_->seqlock.WriteBegin();
+  device_orientation_buffer_->data.absolute = ready;
+  device_orientation_buffer_->data.hasAbsolute = ready;
+  device_orientation_buffer_->data.allAvailableSensorsAreActive = ready;
+  device_orientation_buffer_->seqlock.WriteEnd();
+  is_orientation_buffer_ready_ = ready;
+}
+
+bool SensorManagerAndroid::StartFetchingDeviceOrientationData(
+    DeviceOrientationHardwareBuffer* buffer) {
+  DCHECK(buffer);
+  {
+    base::AutoLock autolock(orientation_buffer_lock_);
+    device_orientation_buffer_ = buffer;
+  }
+  bool success = Start(kTypeOrientation);
+
+  {
+    base::AutoLock autolock(orientation_buffer_lock_);
+    // If Start() was unsuccessful then set the buffer ready flag to true
+    // to start firing all-null events.
+    SetOrientationBufferReadyStatus(!success);
+  }
+
+  if (!success)
+    updateRotationVectorHistogram(false);
+
+  return success;
+}
+
+void SensorManagerAndroid::StopFetchingDeviceOrientationData() {
+  Stop(kTypeOrientation);
+  {
+    base::AutoLock autolock(orientation_buffer_lock_);
+    if (device_orientation_buffer_) {
+      SetOrientationBufferReadyStatus(false);
+      device_orientation_buffer_ = NULL;
+    }
+  }
+}
+
+}  // namespace content
diff --git a/content/browser/device_sensors/sensor_manager_android.h b/content/browser/device_sensors/sensor_manager_android.h
new file mode 100644
index 0000000..f2a552e
--- /dev/null
+++ b/content/browser/device_sensors/sensor_manager_android.h
@@ -0,0 +1,99 @@
+// 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.
+
+#ifndef CONTENT_BROWSER_DEVICE_SENSORS_SENSOR_MANAGER_ANDROID_H_
+#define CONTENT_BROWSER_DEVICE_SENSORS_SENSOR_MANAGER_ANDROID_H_
+
+#include "base/android/scoped_java_ref.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/synchronization/lock.h"
+#include "content/common/content_export.h"
+#include "content/common/device_sensors/device_motion_hardware_buffer.h"
+#include "content/common/device_sensors/device_orientation_hardware_buffer.h"
+
+template<typename T> struct DefaultSingletonTraits;
+
+namespace content {
+
+// Android implementation of Device Orientation API.
+//
+// Android's SensorManager has a push API, so when Got*() methods are called
+// by the system the browser process puts the received data into a shared
+// memory buffer, which is read by the renderer processes.
+class CONTENT_EXPORT SensorManagerAndroid {
+ public:
+  // Must be called at startup, before GetInstance().
+  static bool Register(JNIEnv* env);
+
+  // Needs to be thread-safe, because accessed from different threads.
+  static SensorManagerAndroid* GetInstance();
+
+  // Called from Java via JNI.
+  void GotOrientation(JNIEnv*, jobject,
+                      double alpha, double beta, double gamma);
+  void GotAcceleration(JNIEnv*, jobject,
+                       double x, double y, double z);
+  void GotAccelerationIncludingGravity(JNIEnv*, jobject,
+                                       double x, double y, double z);
+  void GotRotationRate(JNIEnv*, jobject,
+                       double alpha, double beta, double gamma);
+
+  // Shared memory related methods.
+  bool StartFetchingDeviceMotionData(DeviceMotionHardwareBuffer* buffer);
+  void StopFetchingDeviceMotionData();
+
+  bool StartFetchingDeviceOrientationData(
+      DeviceOrientationHardwareBuffer* buffer);
+  void StopFetchingDeviceOrientationData();
+
+ protected:
+  enum EventType {
+    // These constants should match DEVICE_ORIENTATION and DEVICE_MOTION
+    // constants in content/public/android/java/src/org/chromium/content/
+    // browser/DeviceMotionAndOrientation.java
+    kTypeOrientation = 0,
+    kTypeMotion = 1
+  };
+
+  SensorManagerAndroid();
+  virtual ~SensorManagerAndroid();
+
+  virtual bool Start(EventType event_type);
+  virtual void Stop(EventType event_type);
+  virtual int GetNumberActiveDeviceMotionSensors();
+
+ private:
+  friend struct DefaultSingletonTraits<SensorManagerAndroid>;
+
+  enum {
+    RECEIVED_MOTION_DATA_ACCELERATION = 0,
+    RECEIVED_MOTION_DATA_ACCELERATION_INCL_GRAVITY = 1,
+    RECEIVED_MOTION_DATA_ROTATION_RATE = 2,
+    RECEIVED_MOTION_DATA_MAX = 3,
+  };
+
+  void CheckMotionBufferReadyToRead();
+  void SetMotionBufferReadyStatus(bool ready);
+  void ClearInternalMotionBuffers();
+
+  void SetOrientationBufferReadyStatus(bool ready);
+
+  // The Java provider of orientation info.
+  base::android::ScopedJavaGlobalRef<jobject> device_orientation_;
+  int number_active_device_motion_sensors_;
+  int received_motion_data_[RECEIVED_MOTION_DATA_MAX];
+  DeviceMotionHardwareBuffer* device_motion_buffer_;
+  DeviceOrientationHardwareBuffer* device_orientation_buffer_;
+  bool is_motion_buffer_ready_;
+  bool is_orientation_buffer_ready_;
+
+  base::Lock motion_buffer_lock_;
+  base::Lock orientation_buffer_lock_;
+
+  DISALLOW_COPY_AND_ASSIGN(SensorManagerAndroid);
+};
+
+}  // namespace content
+
+#endif  // CONTENT_BROWSER_DEVICE_SENSORS_SENSOR_MANAGER_ANDROID_H_
diff --git a/content/browser/device_sensors/sensor_manager_android_unittest.cc b/content/browser/device_sensors/sensor_manager_android_unittest.cc
new file mode 100644
index 0000000..8299164
--- /dev/null
+++ b/content/browser/device_sensors/sensor_manager_android_unittest.cc
@@ -0,0 +1,148 @@
+// 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.
+
+#include "content/browser/device_sensors/sensor_manager_android.h"
+
+#include "base/android/jni_android.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/memory/weak_ptr.h"
+#include "content/browser/device_sensors/inertial_sensor_consts.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace content {
+
+namespace {
+
+class FakeSensorManagerAndroid : public SensorManagerAndroid {
+ public:
+  FakeSensorManagerAndroid() { }
+  virtual ~FakeSensorManagerAndroid() { }
+
+  virtual int GetNumberActiveDeviceMotionSensors() OVERRIDE {
+    return number_active_sensors_;
+  }
+
+  void SetNumberActiveDeviceMotionSensors(int number_active_sensors) {
+    number_active_sensors_ = number_active_sensors;
+  }
+
+ protected:
+  virtual bool Start(EventType event_type) OVERRIDE {
+    return true;
+  }
+
+  virtual void Stop(EventType event_type) OVERRIDE {
+  }
+
+ private:
+  int number_active_sensors_;
+};
+
+class AndroidSensorManagerTest : public testing::Test {
+ protected:
+  AndroidSensorManagerTest() {
+    motion_buffer_.reset(new DeviceMotionHardwareBuffer);
+    orientation_buffer_.reset(new DeviceOrientationHardwareBuffer);
+  }
+
+  scoped_ptr<DeviceMotionHardwareBuffer> motion_buffer_;
+  scoped_ptr<DeviceOrientationHardwareBuffer> orientation_buffer_;
+};
+
+TEST_F(AndroidSensorManagerTest, ThreeDeviceMotionSensorsActive) {
+  FakeSensorManagerAndroid::Register(base::android::AttachCurrentThread());
+  FakeSensorManagerAndroid sensorManager;
+  sensorManager.SetNumberActiveDeviceMotionSensors(3);
+
+  sensorManager.StartFetchingDeviceMotionData(motion_buffer_.get());
+  ASSERT_FALSE(motion_buffer_->data.allAvailableSensorsAreActive);
+
+  sensorManager.GotAcceleration(0, 0, 1, 2, 3);
+  ASSERT_FALSE(motion_buffer_->data.allAvailableSensorsAreActive);
+  ASSERT_EQ(1, motion_buffer_->data.accelerationX);
+  ASSERT_TRUE(motion_buffer_->data.hasAccelerationX);
+  ASSERT_EQ(2, motion_buffer_->data.accelerationY);
+  ASSERT_TRUE(motion_buffer_->data.hasAccelerationY);
+  ASSERT_EQ(3, motion_buffer_->data.accelerationZ);
+  ASSERT_TRUE(motion_buffer_->data.hasAccelerationZ);
+
+  sensorManager.GotAccelerationIncludingGravity(0, 0, 4, 5, 6);
+  ASSERT_FALSE(motion_buffer_->data.allAvailableSensorsAreActive);
+  ASSERT_EQ(4, motion_buffer_->data.accelerationIncludingGravityX);
+  ASSERT_TRUE(motion_buffer_->data.hasAccelerationIncludingGravityX);
+  ASSERT_EQ(5, motion_buffer_->data.accelerationIncludingGravityY);
+  ASSERT_TRUE(motion_buffer_->data.hasAccelerationIncludingGravityY);
+  ASSERT_EQ(6, motion_buffer_->data.accelerationIncludingGravityZ);
+  ASSERT_TRUE(motion_buffer_->data.hasAccelerationIncludingGravityZ);
+
+  sensorManager.GotRotationRate(0, 0, 7, 8, 9);
+  ASSERT_TRUE(motion_buffer_->data.allAvailableSensorsAreActive);
+  ASSERT_EQ(7, motion_buffer_->data.rotationRateAlpha);
+  ASSERT_TRUE(motion_buffer_->data.hasRotationRateAlpha);
+  ASSERT_EQ(8, motion_buffer_->data.rotationRateBeta);
+  ASSERT_TRUE(motion_buffer_->data.hasRotationRateBeta);
+  ASSERT_EQ(9, motion_buffer_->data.rotationRateGamma);
+  ASSERT_TRUE(motion_buffer_->data.hasRotationRateGamma);
+  ASSERT_EQ(kInertialSensorIntervalMillis, motion_buffer_->data.interval);
+
+  sensorManager.StopFetchingDeviceMotionData();
+  ASSERT_FALSE(motion_buffer_->data.allAvailableSensorsAreActive);
+}
+
+TEST_F(AndroidSensorManagerTest, TwoDeviceMotionSensorsActive) {
+  FakeSensorManagerAndroid::Register(base::android::AttachCurrentThread());
+  FakeSensorManagerAndroid sensorManager;
+  sensorManager.SetNumberActiveDeviceMotionSensors(2);
+
+  sensorManager.StartFetchingDeviceMotionData(motion_buffer_.get());
+  ASSERT_FALSE(motion_buffer_->data.allAvailableSensorsAreActive);
+
+  sensorManager.GotAcceleration(0, 0, 1, 2, 3);
+  ASSERT_FALSE(motion_buffer_->data.allAvailableSensorsAreActive);
+
+  sensorManager.GotAccelerationIncludingGravity(0, 0, 1, 2, 3);
+  ASSERT_TRUE(motion_buffer_->data.allAvailableSensorsAreActive);
+  ASSERT_EQ(kInertialSensorIntervalMillis, motion_buffer_->data.interval);
+
+  sensorManager.StopFetchingDeviceMotionData();
+  ASSERT_FALSE(motion_buffer_->data.allAvailableSensorsAreActive);
+}
+
+TEST_F(AndroidSensorManagerTest, ZeroDeviceMotionSensorsActive) {
+  FakeSensorManagerAndroid::Register(base::android::AttachCurrentThread());
+  FakeSensorManagerAndroid sensorManager;
+  sensorManager.SetNumberActiveDeviceMotionSensors(0);
+
+  sensorManager.StartFetchingDeviceMotionData(motion_buffer_.get());
+  ASSERT_TRUE(motion_buffer_->data.allAvailableSensorsAreActive);
+  ASSERT_EQ(kInertialSensorIntervalMillis, motion_buffer_->data.interval);
+
+  sensorManager.StopFetchingDeviceMotionData();
+  ASSERT_FALSE(motion_buffer_->data.allAvailableSensorsAreActive);
+}
+
+TEST_F(AndroidSensorManagerTest, DeviceOrientationSensorsActive) {
+  FakeSensorManagerAndroid::Register(base::android::AttachCurrentThread());
+  FakeSensorManagerAndroid sensorManager;
+
+  sensorManager.StartFetchingDeviceOrientationData(orientation_buffer_.get());
+  ASSERT_FALSE(orientation_buffer_->data.allAvailableSensorsAreActive);
+
+  sensorManager.GotOrientation(0, 0, 1, 2, 3);
+  ASSERT_TRUE(orientation_buffer_->data.allAvailableSensorsAreActive);
+  ASSERT_EQ(1, orientation_buffer_->data.alpha);
+  ASSERT_TRUE(orientation_buffer_->data.hasAlpha);
+  ASSERT_EQ(2, orientation_buffer_->data.beta);
+  ASSERT_TRUE(orientation_buffer_->data.hasBeta);
+  ASSERT_EQ(3, orientation_buffer_->data.gamma);
+  ASSERT_TRUE(orientation_buffer_->data.hasGamma);
+
+  sensorManager.StopFetchingDeviceOrientationData();
+  ASSERT_FALSE(orientation_buffer_->data.allAvailableSensorsAreActive);
+}
+
+
+}  // namespace
+
+}  // namespace content
diff --git a/content/browser/devtools/devtools_http_handler_impl.cc b/content/browser/devtools/devtools_http_handler_impl.cc
index 5b04535..35620d4 100644
--- a/content/browser/devtools/devtools_http_handler_impl.cc
+++ b/content/browser/devtools/devtools_http_handler_impl.cc
@@ -48,8 +48,6 @@
 
 namespace {
 
-const char kProtocolVersion[] = "1.0";
-
 const char kDevToolsHandlerThreadName[] = "Chrome_DevToolsHandlerThread";
 
 const char kThumbUrlPrefix[] = "/thumb/";
@@ -135,7 +133,7 @@
 // static
 bool DevToolsHttpHandler::IsSupportedProtocolVersion(
     const std::string& version) {
-  return version == kProtocolVersion;
+  return devtools::IsSupportedProtocolVersion(version);
 }
 
 // static
@@ -450,7 +448,7 @@
 
   if (command == "version") {
     base::DictionaryValue version;
-    version.SetString("Protocol-Version", kProtocolVersion);
+    version.SetString("Protocol-Version", devtools::kProtocolVersion);
     version.SetString("WebKit-Version", GetWebKitVersion());
     version.SetString("Browser", GetContentClient()->GetProduct());
     version.SetString("User-Agent", GetContentClient()->GetUserAgent());
diff --git a/content/browser/devtools/devtools_protocol_constants_generator.py b/content/browser/devtools/devtools_protocol_constants_generator.py
index 96649c2..7339208 100755
--- a/content/browser/devtools/devtools_protocol_constants_generator.py
+++ b/content/browser/devtools/devtools_protocol_constants_generator.py
@@ -21,9 +21,15 @@
 //  third_party/WebKit/Source/devtools/protocol.json and
 //  content/browser/devtools/browser_protocol.json).
 
+#include <string>
+
 namespace content {
 namespace devtools {
 
+extern const char kProtocolVersion[];
+
+bool IsSupportedProtocolVersion(const std::string& version);
+
 extern const char kResult[];
 $contents
 
@@ -44,11 +50,24 @@
 //  third_party/WebKit/Source/devtools/protocol.json and
 //  content/browser/devtools/browser_protocol.json).
 
+#include "base/strings/string_number_conversions.h"
+#include "base/strings/string_util.h"
 #include "content/browser/devtools/devtools_protocol_constants.h"
 
 namespace content {
 namespace devtools {
 
+const char kProtocolVersion[] = "$major.$minor";
+
+bool IsSupportedProtocolVersion(const std::string& version) {
+  std::vector<std::string> tokens;
+  Tokenize(version, ".", &tokens);
+  int major, minor;
+  return tokens.size() == 2 &&
+      base::StringToInt(tokens[0], &major) && major == $major &&
+      base::StringToInt(tokens[1], &minor) && minor <= $minor;
+}
+
 const char kResult[] = "result";
 $contents
 
@@ -113,9 +132,13 @@
   contents = FormatContents(tree, "", "extern const char {0}[];\n")
   output_file.write(template_h.substitute({"contents": contents}))
 
-def CreateBody(tree, output_file):
+def CreateBody(tree, version, output_file):
   contents = FormatContents(tree, "", "const char {0}[] = \"{1}\";\n")
-  output_file.write(template_cc.substitute({"contents": contents}))
+  output_file.write(template_cc.substitute({
+      "major": version["major"],
+      "minor": version["minor"],
+      "contents": contents
+  }))
 
 blink_protocol_data = open(sys.argv[1]).read()
 browser_protocol_data = open(sys.argv[2]).read()
@@ -123,6 +146,8 @@
 blink_protocol = json.loads(blink_protocol_data)
 browser_protocol = json.loads(browser_protocol_data)
 
+blink_version = blink_protocol["version"]
+
 domains = blink_protocol["domains"] + browser_protocol["domains"]
 
 namespace_tree = {}
@@ -168,7 +193,7 @@
   namespace["kName"] = namespace_name
 
 with open(sys.argv[3], "w") as f:
-  CreateBody(namespace_tree, f)
+  CreateBody(namespace_tree, blink_version, f)
 
 with open(sys.argv[4], "w") as f:
   CreateHeader(namespace_tree, f)
diff --git a/content/browser/devtools/devtools_system_info_handler.cc b/content/browser/devtools/devtools_system_info_handler.cc
index b503a50..6e0336d 100644
--- a/content/browser/devtools/devtools_system_info_handler.cc
+++ b/content/browser/devtools/devtools_system_info_handler.cc
@@ -24,6 +24,7 @@
 const char kFeatureStatus[] = "featureStatus";
 const char kGPU[] = "gpu";
 const char kModelName[] = "modelName";
+const char kModelVersion[] = "modelVersion";
 const char kVendorId[] = "vendorId";
 const char kVendorString[] = "vendorString";
 
@@ -122,7 +123,8 @@
   gpu_dict->Set(kDriverBugWorkarounds, GetDriverBugWorkarounds());
 
   base::DictionaryValue* system_dict = new base::DictionaryValue;
-  system_dict->SetString(kModelName, gpu_info.machine_model);
+  system_dict->SetString(kModelName, gpu_info.machine_model_name);
+  system_dict->SetString(kModelVersion, gpu_info.machine_model_version);
   system_dict->Set(kGPU, gpu_dict);
   return command->SuccessResponse(system_dict);
 }
diff --git a/content/browser/fileapi/fileapi_message_filter.cc b/content/browser/fileapi/fileapi_message_filter.cc
index 9e2372e..b900124 100644
--- a/content/browser/fileapi/fileapi_message_filter.cc
+++ b/content/browser/fileapi/fileapi_message_filter.cc
@@ -771,16 +771,22 @@
   // For OpenFileSystem we do not create a new operation, so no unregister here.
 }
 
-void FileAPIMessageFilter::DidResolveURL(int request_id,
-                                         base::File::Error result,
-                                         const fileapi::FileSystemInfo& info,
-                                         const base::FilePath& file_path,
-                                         bool is_directory) {
+void FileAPIMessageFilter::DidResolveURL(
+    int request_id,
+    base::File::Error result,
+    const fileapi::FileSystemInfo& info,
+    const base::FilePath& file_path,
+    fileapi::FileSystemContext::ResolvedEntryType type) {
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+  if (result == base::File::FILE_OK &&
+      type == fileapi::FileSystemContext::RESOLVED_ENTRY_NOT_FOUND)
+    result = base::File::FILE_ERROR_NOT_FOUND;
+
   if (result == base::File::FILE_OK) {
     DCHECK(info.root_url.is_valid());
     Send(new FileSystemMsg_DidResolveURL(
-        request_id, info, file_path, is_directory));
+        request_id, info, file_path,
+        type == fileapi::FileSystemContext::RESOLVED_ENTRY_DIRECTORY));
   } else {
     Send(new FileSystemMsg_DidFail(request_id, result));
   }
diff --git a/content/browser/fileapi/fileapi_message_filter.h b/content/browser/fileapi/fileapi_message_filter.h
index 98a7230..158eb6c 100644
--- a/content/browser/fileapi/fileapi_message_filter.h
+++ b/content/browser/fileapi/fileapi_message_filter.h
@@ -19,6 +19,7 @@
 #include "content/browser/streams/stream_context.h"
 #include "content/common/content_export.h"
 #include "content/public/browser/browser_message_filter.h"
+#include "webkit/browser/fileapi/file_system_context.h"
 #include "webkit/browser/fileapi/file_system_operation_runner.h"
 #include "webkit/common/blob/blob_data.h"
 #include "webkit/common/fileapi/file_system_types.h"
@@ -33,7 +34,6 @@
 
 namespace fileapi {
 class FileSystemURL;
-class FileSystemContext;
 class FileSystemOperationRunner;
 struct DirectoryEntry;
 struct FileSystemInfo;
@@ -187,7 +187,7 @@
                      base::File::Error result,
                      const fileapi::FileSystemInfo& info,
                      const base::FilePath& file_path,
-                     bool is_directory);
+                     fileapi::FileSystemContext::ResolvedEntryType type);
   void DidDeleteFileSystem(int request_id,
                            base::File::Error result);
   void DidCreateSnapshot(
diff --git a/content/browser/frame_host/frame_tree_node.cc b/content/browser/frame_host/frame_tree_node.cc
index c86cde4..ebc542e 100644
--- a/content/browser/frame_host/frame_tree_node.cc
+++ b/content/browser/frame_host/frame_tree_node.cc
@@ -64,8 +64,12 @@
   }
 
   if (iter != children_.end()) {
-    (*iter)->set_parent(NULL);
-    children_.erase(iter);
+    // Subtle: we need to make sure the node is gone from the tree before
+    // observers are notified of its deletion.
+    scoped_ptr<FrameTreeNode> node_to_delete(*iter);
+    children_.weak_erase(iter);
+    node_to_delete->set_parent(NULL);
+    node_to_delete.reset();
   }
 }
 
@@ -75,7 +79,8 @@
   // The children may not have been cleared if a cross-process navigation
   // commits before the old process cleans everything up.  Make sure the child
   // nodes get deleted before swapping to a new process.
-  children_.clear();
+  ScopedVector<FrameTreeNode> old_children = children_.Pass();
+  old_children.clear();  // May notify observers.
 }
 
 }  // namespace content
diff --git a/content/browser/frame_host/frame_tree_unittest.cc b/content/browser/frame_host/frame_tree_unittest.cc
index ee5e3b2..a894061 100644
--- a/content/browser/frame_host/frame_tree_unittest.cc
+++ b/content/browser/frame_host/frame_tree_unittest.cc
@@ -11,16 +11,90 @@
 #include "content/browser/frame_host/render_frame_host_impl.h"
 #include "content/browser/renderer_host/render_view_host_impl.h"
 #include "content/browser/web_contents/web_contents_impl.h"
+#include "content/common/view_messages.h"
+#include "content/public/browser/web_contents_observer.h"
 #include "content/public/test/mock_render_process_host.h"
 #include "content/public/test/test_browser_context.h"
 #include "content/public/test/test_browser_thread_bundle.h"
-#include "content/public/test/test_renderer_host.h"
+#include "content/test/test_render_view_host.h"
+#include "content/test/test_web_contents.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace content {
 namespace {
 
-class FrameTreeTest : public RenderViewHostTestHarness {
+// Appends a description of the structure of the frame tree to |result|.
+void AppendTreeNodeState(FrameTreeNode* node, std::string* result) {
+  result->append(
+      base::Int64ToString(node->current_frame_host()->GetRoutingID()));
+  if (!node->frame_name().empty()) {
+    result->append(" '");
+    result->append(node->frame_name());
+    result->append("'");
+  }
+  result->append(": [");
+  const char* separator = "";
+  for (size_t i = 0; i < node->child_count(); i++) {
+    result->append(separator);
+    AppendTreeNodeState(node->child_at(i), result);
+    separator = ", ";
+  }
+  result->append("]");
+}
+
+// Logs calls to WebContentsObserver along with the state of the frame tree,
+// for later use in EXPECT_EQ().
+class TreeWalkingWebContentsLogger : public WebContentsObserver {
+ public:
+  explicit TreeWalkingWebContentsLogger(WebContents* web_contents)
+      : WebContentsObserver(web_contents) {}
+
+  virtual ~TreeWalkingWebContentsLogger() {
+    EXPECT_EQ("", log_) << "Activity logged that was not expected";
+  }
+
+  // Gets and resets the log, which is a string of what happened.
+  std::string GetLog() {
+    std::string result = log_;
+    log_.clear();
+    return result;
+  }
+
+  // content::WebContentsObserver implementation.
+  virtual void RenderFrameCreated(RenderFrameHost* render_frame_host) OVERRIDE {
+    LogWhatHappened("RenderFrameCreated", render_frame_host);
+  }
+
+  virtual void RenderFrameDeleted(RenderFrameHost* render_frame_host) OVERRIDE {
+    LogWhatHappened("RenderFrameDeleted", render_frame_host);
+  }
+
+  virtual void RenderProcessGone(base::TerminationStatus status) OVERRIDE {
+    LogWhatHappened("RenderProcessGone");
+  }
+
+ private:
+  void LogWhatHappened(const std::string& event_name) {
+    if (!log_.empty()) {
+      log_.append("\n");
+    }
+    log_.append(event_name + " -> ");
+    AppendTreeNodeState(
+        static_cast<WebContentsImpl*>(web_contents())->GetFrameTree()->root(),
+        &log_);
+  }
+
+  void LogWhatHappened(const std::string& event_name, RenderFrameHost* rfh) {
+    LogWhatHappened(
+        base::StringPrintf("%s(%d)", event_name.c_str(), rfh->GetRoutingID()));
+  }
+
+  std::string log_;
+
+  DISALLOW_COPY_AND_ASSIGN(TreeWalkingWebContentsLogger);
+};
+
+class FrameTreeTest : public RenderViewHostImplTestHarness {
  protected:
   // Prints a FrameTree, for easy assertions of the tree hierarchy.
   std::string GetTreeState(FrameTree* frame_tree) {
@@ -28,25 +102,6 @@
     AppendTreeNodeState(frame_tree->root(), &result);
     return result;
   }
-
- private:
-  void AppendTreeNodeState(FrameTreeNode* node, std::string* result) {
-    result->append(base::Int64ToString(
-        node->current_frame_host()->GetRoutingID()));
-    if (!node->frame_name().empty()) {
-      result->append(" '");
-      result->append(node->frame_name());
-      result->append("'");
-    }
-    result->append(": [");
-    const char* separator = "";
-    for (size_t i = 0; i < node->child_count(); i++) {
-      result->append(separator);
-      AppendTreeNodeState(node->child_at(i), result);
-      separator = ", ";
-    }
-    result->append("]");
-  }
 };
 
 // Exercise tree manipulation routines.
@@ -55,8 +110,7 @@
 TEST_F(FrameTreeTest, Shape) {
   // Use the FrameTree of the WebContents so that it has all the delegates it
   // needs.  We may want to consider a test version of this.
-  FrameTree* frame_tree =
-      static_cast<WebContentsImpl*>(web_contents())->GetFrameTree();
+  FrameTree* frame_tree = contents()->GetFrameTree();
   FrameTreeNode* root = frame_tree->root();
 
   std::string no_children_node("no children node");
@@ -125,5 +179,43 @@
             GetTreeState(frame_tree));
 }
 
+// Do some simple manipulations of the frame tree, making sure that
+// WebContentsObservers see a consistent view of the tree as we go.
+TEST_F(FrameTreeTest, ObserverWalksTreeDuringFrameCreation) {
+  TreeWalkingWebContentsLogger activity(contents());
+  FrameTree* frame_tree = contents()->GetFrameTree();
+  FrameTreeNode* root = frame_tree->root();
+
+  // Simulate attaching a series of frames to build the frame tree.
+  main_test_rfh()->OnCreateChildFrame(14, std::string());
+  EXPECT_EQ("RenderFrameCreated(14) -> 1: [14: []]", activity.GetLog());
+  main_test_rfh()->OnCreateChildFrame(18, std::string());
+  EXPECT_EQ("RenderFrameCreated(18) -> 1: [14: [], 18: []]", activity.GetLog());
+  frame_tree->RemoveFrame(root->child_at(0));
+  EXPECT_EQ("RenderFrameDeleted(14) -> 1: [18: []]", activity.GetLog());
+  frame_tree->RemoveFrame(root->child_at(0));
+  EXPECT_EQ("RenderFrameDeleted(18) -> 1: []", activity.GetLog());
+}
+
+// Make sure that WebContentsObservers see a consistent view of the tree after
+// recovery from a render process crash.
+TEST_F(FrameTreeTest, ObserverWalksTreeAfterCrash) {
+  TreeWalkingWebContentsLogger activity(contents());
+
+  main_test_rfh()->OnCreateChildFrame(22, std::string());
+  EXPECT_EQ("RenderFrameCreated(22) -> 1: [22: []]", activity.GetLog());
+  main_test_rfh()->OnCreateChildFrame(23, std::string());
+  EXPECT_EQ("RenderFrameCreated(23) -> 1: [22: [], 23: []]", activity.GetLog());
+
+  // Crash the renderer
+  test_rvh()->OnMessageReceived(ViewHostMsg_RenderProcessGone(
+      0, base::TERMINATION_STATUS_PROCESS_CRASHED, -1));
+  EXPECT_EQ(
+      "RenderFrameDeleted(22) -> 1: []\n"
+      "RenderFrameDeleted(23) -> 1: []\n"
+      "RenderProcessGone -> 1: []",
+      activity.GetLog());
+}
+
 }  // namespace
 }  // namespace content
diff --git a/content/browser/frame_host/interstitial_page_impl.cc b/content/browser/frame_host/interstitial_page_impl.cc
index 52bbde6..10f99b4 100644
--- a/content/browser/frame_host/interstitial_page_impl.cc
+++ b/content/browser/frame_host/interstitial_page_impl.cc
@@ -578,7 +578,8 @@
       GetMaxPageIDForSiteInstance(render_view_host_->GetSiteInstance());
   render_view_host_->CreateRenderView(base::string16(),
                                       MSG_ROUTING_NONE,
-                                      max_page_id);
+                                      max_page_id,
+                                      false);
   controller_->delegate()->RenderFrameForInterstitialPageCreated(
       frame_tree_.root()->current_frame_host());
   view->SetSize(web_contents_view->GetContainerSize());
diff --git a/content/browser/frame_host/navigation_controller_impl.cc b/content/browser/frame_host/navigation_controller_impl.cc
index af19192..b1b3ef3 100644
--- a/content/browser/frame_host/navigation_controller_impl.cc
+++ b/content/browser/frame_host/navigation_controller_impl.cc
@@ -429,17 +429,12 @@
   // long as no other page has tried to access the initial empty document in
   // the new tab.  If another page modifies this blank page, a URL spoof is
   // possible, so we must stop showing the pending entry.
-  RenderViewHostImpl* rvh = static_cast<RenderViewHostImpl*>(
-      delegate_->GetRenderViewHost());
   bool safe_to_show_pending =
       pending_entry_ &&
       // Require a new navigation.
       pending_entry_->GetPageID() == -1 &&
       // Require either browser-initiated or an unmodified new tab.
-      (!pending_entry_->is_renderer_initiated() ||
-       (IsInitialNavigation() &&
-        !GetLastCommittedEntry() &&
-        !rvh->has_accessed_initial_document()));
+      (!pending_entry_->is_renderer_initiated() || IsUnmodifiedBlankTab());
 
   // Also allow showing the pending entry for history navigations in a new tab,
   // such as Ctrl+Back.  In this case, no existing page is visible and no one
@@ -706,7 +701,7 @@
   if (params.frame_tree_node_id != -1)
     entry->set_frame_tree_node_id(params.frame_tree_node_id);
   if (params.redirect_chain.size() > 0)
-    entry->set_redirect_chain(params.redirect_chain);
+    entry->SetRedirectChain(params.redirect_chain);
   if (params.should_replace_current_entry)
     entry->set_should_replace_entry(true);
   entry->set_should_clear_history_list(params.should_clear_history_list);
@@ -827,6 +822,7 @@
   active_entry->SetTimestamp(timestamp);
   active_entry->SetHttpStatusCode(params.http_status_code);
   active_entry->SetPageState(params.page_state);
+  active_entry->SetRedirectChain(params.redirects);
 
   // Once it is committed, we no longer need to track several pieces of state on
   // the entry.
@@ -1408,6 +1404,16 @@
   return max_restored_page_id_;
 }
 
+bool NavigationControllerImpl::IsUnmodifiedBlankTab() const {
+  // TODO(creis): Move has_accessed_initial_document from RenderViewHost to
+  // WebContents and NavigationControllerDelegate.
+  RenderViewHostImpl* rvh = static_cast<RenderViewHostImpl*>(
+      delegate_->GetRenderViewHost());
+  return IsInitialNavigation() &&
+      !GetLastCommittedEntry() &&
+      !rvh->has_accessed_initial_document();
+}
+
 SessionStorageNamespace*
 NavigationControllerImpl::GetSessionStorageNamespace(SiteInstance* instance) {
   std::string partition_id;
diff --git a/content/browser/frame_host/navigation_controller_impl.h b/content/browser/frame_host/navigation_controller_impl.h
index c0465f8..7ec82f3 100644
--- a/content/browser/frame_host/navigation_controller_impl.h
+++ b/content/browser/frame_host/navigation_controller_impl.h
@@ -94,6 +94,10 @@
   virtual void PruneAllButLastCommitted() OVERRIDE;
   virtual void ClearAllScreenshots() OVERRIDE;
 
+  // Whether this is the initial navigation in an unmodified new tab.  In this
+  // case, we know there is no content displayed in the page.
+  bool IsUnmodifiedBlankTab() const;
+
   // The session storage namespace that all child RenderViews belonging to
   // |instance| should use.
   SessionStorageNamespace* GetSessionStorageNamespace(
diff --git a/content/browser/frame_host/navigation_controller_impl_browsertest.cc b/content/browser/frame_host/navigation_controller_impl_browsertest.cc
new file mode 100644
index 0000000..20c00ee
--- /dev/null
+++ b/content/browser/frame_host/navigation_controller_impl_browsertest.cc
@@ -0,0 +1,34 @@
+// 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.
+
+#include "base/bind.h"
+#include "content/browser/frame_host/navigation_controller_impl.h"
+#include "content/browser/frame_host/navigation_entry_impl.h"
+#include "content/public/browser/web_contents.h"
+#include "content/public/test/content_browser_test.h"
+#include "content/public/test/content_browser_test_utils.h"
+#include "content/shell/browser/shell.h"
+
+namespace content {
+
+class NavigationControllerBrowserTest : public ContentBrowserTest {
+};
+
+IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest, LoadDataWithBaseURL) {
+  const GURL base_url("http://baseurl");
+  const GURL history_url("http://historyurl");
+  const std::string data = "<html><body>foo</body></html>";
+
+  const NavigationController& controller =
+      shell()->web_contents()->GetController();
+  // load data. Blocks until it is done.
+  content::LoadDataWithBaseURL(shell(), history_url, data, base_url);
+
+  // We should use history_url instead of the base_url as the original url of
+  // this navigation entry, because base_url is only used for resolving relative
+  // paths in the data, or enforcing same origin policy.
+  EXPECT_EQ(controller.GetVisibleEntry()->GetOriginalRequestURL(), history_url);
+}
+}  // namespace content
+
diff --git a/content/browser/frame_host/navigation_controller_impl_unittest.cc b/content/browser/frame_host/navigation_controller_impl_unittest.cc
index fdedfc2..8003d5a 100644
--- a/content/browser/frame_host/navigation_controller_impl_unittest.cc
+++ b/content/browser/frame_host/navigation_controller_impl_unittest.cc
@@ -1046,7 +1046,7 @@
   EXPECT_EQ(-1, controller.GetPendingEntryIndex());
   EXPECT_FALSE(controller.GetPendingEntry());
   EXPECT_EQ(0, controller.GetLastCommittedEntryIndex());
-  EXPECT_EQ(0, delegate->navigation_state_change_count());
+  EXPECT_EQ(1, delegate->navigation_state_change_count());
 
   // The visible entry should be the last committed URL, not the pending one,
   // so that no spoof is possible.
@@ -1320,13 +1320,11 @@
   pending_entry->set_is_renderer_initiated(true);
   pending_entry->set_transferred_global_request_id(transfer_id);
   pending_entry->set_should_replace_entry(true);
-  pending_entry->set_redirect_chain(redirects);
   pending_entry->set_should_clear_history_list(true);
   EXPECT_EQ(post_data.get(), pending_entry->GetBrowserInitiatedPostData());
   EXPECT_TRUE(pending_entry->is_renderer_initiated());
   EXPECT_EQ(transfer_id, pending_entry->transferred_global_request_id());
   EXPECT_TRUE(pending_entry->should_replace_entry());
-  EXPECT_EQ(1U, pending_entry->redirect_chain().size());
   EXPECT_TRUE(pending_entry->should_clear_history_list());
 
   main_test_rfh()->SendNavigate(0, url1);
@@ -1341,10 +1339,35 @@
   EXPECT_EQ(GlobalRequestID(-1, -1),
             committed_entry->transferred_global_request_id());
   EXPECT_FALSE(committed_entry->should_replace_entry());
-  EXPECT_EQ(0U, committed_entry->redirect_chain().size());
   EXPECT_FALSE(committed_entry->should_clear_history_list());
 }
 
+// Test that Redirects are preserved after a commit.
+TEST_F(NavigationControllerTest, RedirectsAreNotResetByCommit) {
+  NavigationControllerImpl& controller = controller_impl();
+  const GURL url1("http://foo1");
+  controller.LoadURL(url1, Referrer(), PAGE_TRANSITION_TYPED, std::string());
+
+  // Set up some redirect values.
+  std::vector<GURL> redirects;
+  redirects.push_back(GURL("http://foo2"));
+
+  // Set redirects on the pending entry.
+  NavigationEntryImpl* pending_entry =
+      NavigationEntryImpl::FromNavigationEntry(controller.GetPendingEntry());
+  pending_entry->SetRedirectChain(redirects);
+  EXPECT_EQ(1U, pending_entry->GetRedirectChain().size());
+  EXPECT_EQ(GURL("http://foo2"), pending_entry->GetRedirectChain()[0]);
+
+  // Normal navigation will preserve redirects in the committed entry.
+  main_test_rfh()->SendNavigateWithRedirects(0, url1, redirects);
+  NavigationEntryImpl* committed_entry =
+      NavigationEntryImpl::FromNavigationEntry(
+          controller.GetLastCommittedEntry());
+  ASSERT_EQ(1U, committed_entry->GetRedirectChain().size());
+  EXPECT_EQ(GURL("http://foo2"), committed_entry->GetRedirectChain()[0]);
+}
+
 // Tests what happens when we navigate back successfully
 TEST_F(NavigationControllerTest, Back) {
   NavigationControllerImpl& controller = controller_impl();
@@ -2880,6 +2903,110 @@
   notifications.Reset();
 }
 
+// Tests that the URLs for browser-initiated navigations in new tabs are
+// displayed to the user even after they fail, as long as the initial
+// about:blank page has not been modified.  If so, we must revert to showing
+// about:blank. See http://crbug.com/355537.
+TEST_F(NavigationControllerTest, ShowBrowserURLAfterFailUntilModified) {
+  NavigationControllerImpl& controller = controller_impl();
+  TestNotificationTracker notifications;
+  RegisterForAllNavNotifications(&notifications, &controller);
+
+  const GURL url("http://foo");
+
+  // For browser-initiated navigations in new tabs (with no committed entries),
+  // we show the pending entry's URL as long as the about:blank page is not
+  // modified.  This is possible in cases that the user types a URL into a popup
+  // tab created with a slow URL.
+  NavigationController::LoadURLParams load_url_params(url);
+  load_url_params.transition_type = PAGE_TRANSITION_TYPED;
+  load_url_params.is_renderer_initiated = false;
+  controller.LoadURLWithParams(load_url_params);
+  EXPECT_EQ(url, controller.GetVisibleEntry()->GetURL());
+  EXPECT_EQ(url, controller.GetPendingEntry()->GetURL());
+  EXPECT_FALSE(
+      NavigationEntryImpl::FromNavigationEntry(controller.GetPendingEntry())->
+          is_renderer_initiated());
+  EXPECT_TRUE(controller.IsInitialNavigation());
+  EXPECT_FALSE(test_rvh()->has_accessed_initial_document());
+
+  // There should be no title yet.
+  EXPECT_TRUE(contents()->GetTitle().empty());
+
+  // Suppose it aborts before committing, if it's a 204 or download or due to a
+  // stop or a new navigation from the user.  The URL should remain visible.
+  FrameHostMsg_DidFailProvisionalLoadWithError_Params params;
+  params.error_code = net::ERR_ABORTED;
+  params.error_description = base::string16();
+  params.url = url;
+  params.showing_repost_interstitial = false;
+  main_test_rfh()->OnMessageReceived(
+      FrameHostMsg_DidFailProvisionalLoadWithError(0, params));
+  contents()->SetIsLoading(test_rvh(), false, true, NULL);
+  EXPECT_EQ(url, controller.GetVisibleEntry()->GetURL());
+
+  // If something else later modifies the contents of the about:blank page, then
+  // we must revert to showing about:blank to avoid a URL spoof.
+  test_rvh()->OnMessageReceived(
+        ViewHostMsg_DidAccessInitialDocument(0));
+  EXPECT_TRUE(test_rvh()->has_accessed_initial_document());
+  EXPECT_FALSE(controller.GetVisibleEntry());
+  EXPECT_FALSE(controller.GetPendingEntry());
+
+  notifications.Reset();
+}
+
+// Tests that the URLs for renderer-initiated navigations in new tabs are
+// displayed to the user even after they fail, as long as the initial
+// about:blank page has not been modified.  If so, we must revert to showing
+// about:blank. See http://crbug.com/355537.
+TEST_F(NavigationControllerTest, ShowRendererURLAfterFailUntilModified) {
+  NavigationControllerImpl& controller = controller_impl();
+  TestNotificationTracker notifications;
+  RegisterForAllNavNotifications(&notifications, &controller);
+
+  const GURL url("http://foo");
+
+  // For renderer-initiated navigations in new tabs (with no committed entries),
+  // we show the pending entry's URL as long as the about:blank page is not
+  // modified.
+  NavigationController::LoadURLParams load_url_params(url);
+  load_url_params.transition_type = PAGE_TRANSITION_LINK;
+  load_url_params.is_renderer_initiated = true;
+  controller.LoadURLWithParams(load_url_params);
+  EXPECT_EQ(url, controller.GetVisibleEntry()->GetURL());
+  EXPECT_EQ(url, controller.GetPendingEntry()->GetURL());
+  EXPECT_TRUE(
+      NavigationEntryImpl::FromNavigationEntry(controller.GetPendingEntry())->
+          is_renderer_initiated());
+  EXPECT_TRUE(controller.IsInitialNavigation());
+  EXPECT_FALSE(test_rvh()->has_accessed_initial_document());
+
+  // There should be no title yet.
+  EXPECT_TRUE(contents()->GetTitle().empty());
+
+  // Suppose it aborts before committing, if it's a 204 or download or due to a
+  // stop or a new navigation from the user.  The URL should remain visible.
+  FrameHostMsg_DidFailProvisionalLoadWithError_Params params;
+  params.error_code = net::ERR_ABORTED;
+  params.error_description = base::string16();
+  params.url = url;
+  params.showing_repost_interstitial = false;
+  main_test_rfh()->OnMessageReceived(
+      FrameHostMsg_DidFailProvisionalLoadWithError(0, params));
+  EXPECT_EQ(url, controller.GetVisibleEntry()->GetURL());
+
+  // If something else later modifies the contents of the about:blank page, then
+  // we must revert to showing about:blank to avoid a URL spoof.
+  test_rvh()->OnMessageReceived(
+        ViewHostMsg_DidAccessInitialDocument(0));
+  EXPECT_TRUE(test_rvh()->has_accessed_initial_document());
+  EXPECT_FALSE(controller.GetVisibleEntry());
+  EXPECT_EQ(url, controller.GetPendingEntry()->GetURL());
+
+  notifications.Reset();
+}
+
 TEST_F(NavigationControllerTest, DontShowRendererURLInNewTabAfterCommit) {
   NavigationControllerImpl& controller = controller_impl();
   TestNotificationTracker notifications;
diff --git a/content/browser/frame_host/navigation_entry_impl.cc b/content/browser/frame_host/navigation_entry_impl.cc
index 03dfa5a..b021d5e 100644
--- a/content/browser/frame_host/navigation_entry_impl.cc
+++ b/content/browser/frame_host/navigation_entry_impl.cc
@@ -289,6 +289,15 @@
   return http_status_code_;
 }
 
+void NavigationEntryImpl::SetRedirectChain(
+    const std::vector<GURL>& redirect_chain) {
+  redirect_chain_ = redirect_chain;
+}
+
+const std::vector<GURL>& NavigationEntryImpl::GetRedirectChain() const {
+  return redirect_chain_;
+}
+
 bool NavigationEntryImpl::IsRestored() const {
   return restore_type_ != RESTORE_NONE;
 }
@@ -335,7 +344,7 @@
   set_is_renderer_initiated(false);
   set_transferred_global_request_id(GlobalRequestID());
   set_should_replace_entry(false);
-  redirect_chain_.clear();
+
   set_should_clear_history_list(false);
   set_frame_tree_node_id(-1);
 }
diff --git a/content/browser/frame_host/navigation_entry_impl.h b/content/browser/frame_host/navigation_entry_impl.h
index 00287db..613f45e 100644
--- a/content/browser/frame_host/navigation_entry_impl.h
+++ b/content/browser/frame_host/navigation_entry_impl.h
@@ -86,6 +86,8 @@
   virtual void ClearExtraData(const std::string& key) OVERRIDE;
   virtual void SetHttpStatusCode(int http_status_code) OVERRIDE;
   virtual int GetHttpStatusCode() const OVERRIDE;
+  virtual void SetRedirectChain(const std::vector<GURL>& redirects) OVERRIDE;
+  virtual const std::vector<GURL>& GetRedirectChain() const OVERRIDE;
   virtual bool IsRestored() const OVERRIDE;
 
   // Once a navigation entry is committed, we should no longer track several
@@ -193,16 +195,6 @@
     should_replace_entry_ = should_replace_entry;
   }
 
-  // Any redirects present in a pending entry when it is transferred from one
-  // process to another.  Not valid after commit.
-  const std::vector<GURL>& redirect_chain() const {
-    return redirect_chain_;
-  }
-
-  void set_redirect_chain(const std::vector<GURL>& redirect_chain) {
-    redirect_chain_ = redirect_chain;
-  }
-
   void SetScreenshotPNGData(scoped_refptr<base::RefCountedBytes> png_data);
   const scoped_refptr<base::RefCountedBytes> screenshot() const {
     return screenshot_;
@@ -315,7 +307,8 @@
   bool should_replace_entry_;
 
   // This is used when transferring a pending entry from one process to another.
-  // It is cleared in |ResetForCommit| and should not be persisted.
+  // We also send this data through session sync for offline analysis.
+  // It is preserved after commit but should not be persisted.
   std::vector<GURL> redirect_chain_;
 
   // This is set to true when this entry's navigation should clear the session
diff --git a/content/browser/frame_host/navigator_delegate.cc b/content/browser/frame_host/navigator_delegate.cc
index a284c0f..4685c7a 100644
--- a/content/browser/frame_host/navigator_delegate.cc
+++ b/content/browser/frame_host/navigator_delegate.cc
@@ -10,4 +10,8 @@
   return false;
 }
 
+bool NavigatorDelegate::ShouldPreserveAbortedURLs() {
+  return false;
+}
+
 }  // namespace content
diff --git a/content/browser/frame_host/navigator_delegate.h b/content/browser/frame_host/navigator_delegate.h
index e92dbee..369ee8f 100644
--- a/content/browser/frame_host/navigator_delegate.h
+++ b/content/browser/frame_host/navigator_delegate.h
@@ -99,6 +99,10 @@
   // this forwards to.
   virtual void RequestOpenURL(RenderFrameHostImpl* render_frame_host,
                               const OpenURLParams& params) {}
+
+  // Returns whether URLs for aborted browser-initiated navigations should be
+  // preserved in the omnibox.  Defaults to false.
+  virtual bool ShouldPreserveAbortedURLs();
 };
 
 }  // namspace content
diff --git a/content/browser/frame_host/navigator_impl.cc b/content/browser/frame_host/navigator_impl.cc
index 7be5f8c..832c58e 100644
--- a/content/browser/frame_host/navigator_impl.cc
+++ b/content/browser/frame_host/navigator_impl.cc
@@ -108,7 +108,13 @@
             entry.GetBrowserInitiatedPostData()->size());
   }
 
-  params->redirects = entry.redirect_chain();
+  // Set the redirect chain to the navigation's redirects, unless we are
+  // returning to a completed navigation (whose previous redirects don't apply).
+  if (PageTransitionIsNewNavigation(params->transition)) {
+    params->redirects = entry.GetRedirectChain();
+  } else {
+    params->redirects.clear();
+  }
 
   params->can_load_local_resources = entry.GetCanLoadLocalResources();
   params->frame_to_navigate = entry.GetFrameToNavigate();
@@ -169,7 +175,7 @@
         entry->set_transferred_global_request_id(
             pending_entry->transferred_global_request_id());
         entry->set_should_replace_entry(pending_entry->should_replace_entry());
-        entry->set_redirect_chain(pending_entry->redirect_chain());
+        entry->SetRedirectChain(pending_entry->GetRedirectChain());
       }
       controller_->SetPendingEntry(entry);
       if (delegate_)
@@ -230,18 +236,31 @@
     // TODO(creis): Find a way to cancel any pending RFH here.
   }
 
-  // Do not usually clear the pending entry if one exists, so that the user's
-  // typed URL is not lost when a navigation fails or is aborted.  However, in
-  // cases that we don't show the pending entry (e.g., renderer-initiated
-  // navigations in an existing tab), we don't keep it around.  That prevents
-  // spoofs on in-page navigations that don't go through
+  // We usually clear the pending entry when it fails, so that an arbitrary URL
+  // isn't left visible above a committed page.  This must be enforced when
+  // the pending entry isn't visible (e.g., renderer-initiated navigations) to
+  // prevent URL spoofs for in-page navigations that don't go through
   // DidStartProvisionalLoadForFrame.
-  // In general, we allow the view to clear the pending entry and typed URL if
-  // the user requests (e.g., hitting Escape with focus in the address bar).
+  //
+  // However, we do preserve the pending entry in some cases, such as on the
+  // initial navigation of an unmodified blank tab.  We also allow the delegate
+  // to say when it's safe to leave aborted URLs in the omnibox, to let the user
+  // edit the URL and try again.  This may be useful in cases that the committed
+  // page cannot be attacker-controlled.  In these cases, we still allow the
+  // view to clear the pending entry and typed URL if the user requests
+  // (e.g., hitting Escape with focus in the address bar).
+  //
   // Note: don't touch the transient entry, since an interstitial may exist.
-  if (controller_->GetPendingEntry() != controller_->GetVisibleEntry())
+  bool should_preserve_entry = controller_->IsUnmodifiedBlankTab() ||
+      delegate_->ShouldPreserveAbortedURLs();
+  if (controller_->GetPendingEntry() != controller_->GetVisibleEntry() ||
+      !should_preserve_entry) {
     controller_->DiscardPendingEntry();
 
+    // Also force the UI to refresh.
+    controller_->delegate()->NotifyNavigationStateChanged(INVALIDATE_TYPE_URL);
+  }
+
   if (delegate_)
     delegate_->DidFailProvisionalLoadWithError(render_frame_host, params);
 }
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc
index 69c0188..ddda5a6 100644
--- a/content/browser/frame_host/render_frame_host_impl.cc
+++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -4,6 +4,7 @@
 
 #include "content/browser/frame_host/render_frame_host_impl.h"
 
+#include "base/bind.h"
 #include "base/containers/hash_tables.h"
 #include "base/lazy_instance.h"
 #include "base/metrics/user_metrics_action.h"
@@ -17,12 +18,14 @@
 #include "content/browser/renderer_host/input/input_router.h"
 #include "content/browser/renderer_host/input/timeout_monitor.h"
 #include "content/browser/renderer_host/render_view_host_impl.h"
+#include "content/common/desktop_notification_messages.h"
 #include "content/common/frame_messages.h"
 #include "content/common/input_messages.h"
 #include "content/common/inter_process_time_ticks_converter.h"
 #include "content/common/swapped_out_messages.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/content_browser_client.h"
+#include "content/public/browser/desktop_notification_delegate.h"
 #include "content/public/browser/render_process_host.h"
 #include "content/public/browser/render_widget_host_view.h"
 #include "content/public/browser/user_metrics.h"
@@ -34,13 +37,77 @@
 
 namespace content {
 
+namespace {
+
 // The (process id, routing id) pair that identifies one RenderFrame.
 typedef std::pair<int32, int32> RenderFrameHostID;
 typedef base::hash_map<RenderFrameHostID, RenderFrameHostImpl*>
     RoutingIDFrameMap;
-static base::LazyInstance<RoutingIDFrameMap> g_routing_id_frame_map =
+base::LazyInstance<RoutingIDFrameMap> g_routing_id_frame_map =
     LAZY_INSTANCE_INITIALIZER;
 
+class DesktopNotificationDelegateImpl : public DesktopNotificationDelegate {
+ public:
+  DesktopNotificationDelegateImpl(RenderFrameHost* render_frame_host,
+                                  int notification_id)
+      : render_process_id_(render_frame_host->GetProcess()->GetID()),
+        render_frame_id_(render_frame_host->GetRoutingID()),
+        notification_id_(notification_id) {}
+
+  virtual ~DesktopNotificationDelegateImpl() {}
+
+  virtual void NotificationDisplayed() OVERRIDE {
+    RenderFrameHost* rfh =
+        RenderFrameHost::FromID(render_process_id_, render_frame_id_);
+    if (!rfh)
+      return;
+
+    rfh->Send(new DesktopNotificationMsg_PostDisplay(
+        rfh->GetRoutingID(), notification_id_));
+  }
+
+  virtual void NotificationError() OVERRIDE {
+    RenderFrameHost* rfh =
+        RenderFrameHost::FromID(render_process_id_, render_frame_id_);
+    if (!rfh)
+      return;
+
+    rfh->Send(new DesktopNotificationMsg_PostError(
+        rfh->GetRoutingID(), notification_id_));
+    delete this;
+  }
+
+  virtual void NotificationClosed(bool by_user) OVERRIDE {
+    RenderFrameHost* rfh =
+        RenderFrameHost::FromID(render_process_id_, render_frame_id_);
+    if (!rfh)
+      return;
+
+    rfh->Send(new DesktopNotificationMsg_PostClose(
+        rfh->GetRoutingID(), notification_id_, by_user));
+    static_cast<RenderFrameHostImpl*>(rfh)->NotificationClosed(
+        notification_id_);
+    delete this;
+  }
+
+  virtual void NotificationClick() OVERRIDE {
+    RenderFrameHost* rfh =
+        RenderFrameHost::FromID(render_process_id_, render_frame_id_);
+    if (!rfh)
+      return;
+
+    rfh->Send(new DesktopNotificationMsg_PostClick(
+        rfh->GetRoutingID(), notification_id_));
+  }
+
+ private:
+  int render_process_id_;
+  int render_frame_id_;
+  int notification_id_;
+};
+
+}  // namespace
+
 RenderFrameHost* RenderFrameHost::FromID(int render_process_id,
                                          int render_frame_id) {
   return RenderFrameHostImpl::FromID(render_process_id, render_frame_id);
@@ -69,7 +136,8 @@
       frame_tree_(frame_tree),
       frame_tree_node_(frame_tree_node),
       routing_id_(routing_id),
-      is_swapped_out_(is_swapped_out) {
+      is_swapped_out_(is_swapped_out),
+      weak_ptr_factory_(this) {
   frame_tree_->RegisterRenderFrameHost(this);
   GetProcess()->AddRoute(routing_id_, this);
   g_routing_id_frame_map.Get().insert(std::make_pair(
@@ -220,6 +288,12 @@
                                     OnRunJavaScriptMessage)
     IPC_MESSAGE_HANDLER_DELAY_REPLY(FrameHostMsg_RunBeforeUnloadConfirm,
                                     OnRunBeforeUnloadConfirm)
+    IPC_MESSAGE_HANDLER(DesktopNotificationHostMsg_RequestPermission,
+                        OnRequestDesktopNotificationPermission)
+    IPC_MESSAGE_HANDLER(DesktopNotificationHostMsg_Show,
+                        OnShowDesktopNotification)
+    IPC_MESSAGE_HANDLER(DesktopNotificationHostMsg_Cancel,
+                        OnCancelDesktopNotification)
   IPC_END_MESSAGE_MAP_EX()
 
   if (!msg_is_ok) {
@@ -448,9 +522,13 @@
     bool proceed,
     const base::TimeTicks& renderer_before_unload_start_time,
     const base::TimeTicks& renderer_before_unload_end_time) {
-  // TODO(creis): Support beforeunload on subframes.
+  // TODO(creis): Support properly beforeunload on subframes. For now just
+  // pretend that the handler ran and allowed the navigation to proceed.
   if (GetParent()) {
-    NOTREACHED() << "Should only receive BeforeUnload_ACK from the main frame.";
+    render_view_host_->is_waiting_for_beforeunload_ack_ = false;
+    frame_tree_node_->render_manager()->OnBeforeUnloadACK(
+        render_view_host_->unload_ack_is_for_cross_site_transition_, proceed,
+        renderer_before_unload_end_time);
     return;
   }
 
@@ -571,6 +649,35 @@
   delegate_->RunBeforeUnloadConfirm(this, message, is_reload, reply_msg);
 }
 
+void RenderFrameHostImpl::OnRequestDesktopNotificationPermission(
+    const GURL& source_origin, int callback_context) {
+  base::Closure done_callback = base::Bind(
+      &RenderFrameHostImpl::DesktopNotificationPermissionRequestDone,
+      weak_ptr_factory_.GetWeakPtr(), callback_context);
+  GetContentClient()->browser()->RequestDesktopNotificationPermission(
+      source_origin, this, done_callback);
+}
+
+void RenderFrameHostImpl::OnShowDesktopNotification(
+    int notification_id,
+    const ShowDesktopNotificationHostMsgParams& params) {
+  base::Closure cancel_callback;
+  GetContentClient()->browser()->ShowDesktopNotification(
+      params, this,
+      new DesktopNotificationDelegateImpl(this, notification_id),
+      &cancel_callback);
+  cancel_notification_callbacks_[notification_id] = cancel_callback;
+}
+
+void RenderFrameHostImpl::OnCancelDesktopNotification(int notification_id) {
+  if (!cancel_notification_callbacks_.count(notification_id)) {
+    NOTREACHED();
+    return;
+  }
+  cancel_notification_callbacks_[notification_id].Run();
+  cancel_notification_callbacks_.erase(notification_id);
+}
+
 void RenderFrameHostImpl::SetPendingShutdown(const base::Closure& on_swap_out) {
   render_view_host_->SetPendingShutdown(on_swap_out);
 }
@@ -647,9 +754,7 @@
 
 void RenderFrameHostImpl::DispatchBeforeUnload(bool for_cross_site_transition) {
   // TODO(creis): Support subframes.
-  DCHECK(!GetParent());
-
-  if (!render_view_host_->IsRenderViewLive()) {
+  if (!render_view_host_->IsRenderViewLive() || GetParent()) {
     // We don't have a live renderer, so just skip running beforeunload.
     render_view_host_->is_waiting_for_beforeunload_ack_ = true;
     render_view_host_->unload_ack_is_for_cross_site_transition_ =
@@ -729,4 +834,14 @@
         render_view_host_->IsWaitingForUnloadACK());
 }
 
+void RenderFrameHostImpl::NotificationClosed(int notification_id) {
+  cancel_notification_callbacks_.erase(notification_id);
+}
+
+void RenderFrameHostImpl::DesktopNotificationPermissionRequestDone(
+    int callback_context) {
+  Send(new DesktopNotificationMsg_PermissionRequestDone(
+      routing_id_, callback_context));
+}
+
 }  // namespace content
diff --git a/content/browser/frame_host/render_frame_host_impl.h b/content/browser/frame_host/render_frame_host_impl.h
index 882b9a6..8e592a9 100644
--- a/content/browser/frame_host/render_frame_host_impl.h
+++ b/content/browser/frame_host/render_frame_host_impl.h
@@ -10,6 +10,7 @@
 
 #include "base/callback.h"
 #include "base/compiler_specific.h"
+#include "base/memory/weak_ptr.h"
 #include "base/strings/string16.h"
 #include "base/time/time.h"
 #include "content/common/content_export.h"
@@ -39,6 +40,7 @@
 struct ContextMenuParams;
 struct GlobalRequestID;
 struct Referrer;
+struct ShowDesktopNotificationHostMsgParams;
 
 class CONTENT_EXPORT RenderFrameHostImpl : public RenderFrameHost {
  public:
@@ -158,6 +160,9 @@
                               const base::string16& user_input,
                               bool dialog_was_suppressed);
 
+  // Called when an HTML5 notification is closed.
+  void NotificationClosed(int notification_id);
+
  protected:
   friend class RenderFrameHostFactory;
 
@@ -212,12 +217,20 @@
                                 const base::string16& message,
                                 bool is_reload,
                                 IPC::Message* reply_msg);
+  void OnRequestDesktopNotificationPermission(const GURL& origin,
+                                              int callback_id);
+  void OnShowDesktopNotification(
+      int notification_id,
+      const ShowDesktopNotificationHostMsgParams& params);
+  void OnCancelDesktopNotification(int notification_id);
 
   // Returns whether the given URL is allowed to commit in the current process.
   // This is a more conservative check than RenderProcessHost::FilterURL, since
   // it will be used to kill processes that commit unauthorized URLs.
   bool CanCommitURL(const GURL& url);
 
+  void DesktopNotificationPermissionRequestDone(int callback_context);
+
   // For now, RenderFrameHosts indirectly keep RenderViewHosts alive via a
   // refcount that calls Shutdown when it reaches zero.  This allows each
   // RenderFrameHostManager to just care about RenderFrameHosts, while ensuring
@@ -252,12 +265,17 @@
   // ExecuteJavaScript and their corresponding callbacks.
   std::map<int, JavaScriptResultCallback> javascript_callbacks_;
 
+  // Map from notification_id to a callback to cancel them.
+  std::map<int, base::Closure> cancel_notification_callbacks_;
+
   int routing_id_;
   bool is_swapped_out_;
 
   // When the last BeforeUnload message was sent.
   base::TimeTicks send_before_unload_start_time_;
 
+  base::WeakPtrFactory<RenderFrameHostImpl> weak_ptr_factory_;
+
   DISALLOW_COPY_AND_ASSIGN(RenderFrameHostImpl);
 };
 
diff --git a/content/browser/frame_host/render_frame_host_manager_browsertest.cc b/content/browser/frame_host/render_frame_host_manager_browsertest.cc
index cb1901f..2e83028 100644
--- a/content/browser/frame_host/render_frame_host_manager_browsertest.cc
+++ b/content/browser/frame_host/render_frame_host_manager_browsertest.cc
@@ -844,45 +844,33 @@
 IN_PROC_BROWSER_TEST_F(RenderFrameHostManagerTest, ClickLinkAfter204Error) {
   StartServer();
 
-  // Load a page with links that open in a new window.
-  // The links will point to foo.com.
-  std::string replacement_path;
-  ASSERT_TRUE(GetFilePathWithHostAndPortReplacement(
-      "files/click-noreferrer-links.html",
-      foo_host_port_,
-      &replacement_path));
-  NavigateToURL(shell(), test_server()->GetURL(replacement_path));
-
   // Get the original SiteInstance for later comparison.
   scoped_refptr<SiteInstance> orig_site_instance(
       shell()->web_contents()->GetSiteInstance());
   EXPECT_TRUE(orig_site_instance.get() != NULL);
 
   // Load a cross-site page that fails with a 204 error.
-  NavigateToURL(shell(),GetCrossSiteURL("nocontent"));
+  NavigateToURL(shell(), GetCrossSiteURL("nocontent"));
 
-  // We should still be looking at the normal page.  The typed URL will
-  // still be visible until the user clears it manually, but the last
-  // committed URL will be the previous page.
+  // We should still be looking at the normal page.  Because we started from a
+  // blank new tab, the typed URL will still be visible until the user clears it
+  // manually.  The last committed URL will be the previous page.
   scoped_refptr<SiteInstance> post_nav_site_instance(
       shell()->web_contents()->GetSiteInstance());
   EXPECT_EQ(orig_site_instance, post_nav_site_instance);
   EXPECT_EQ("/nocontent",
             shell()->web_contents()->GetVisibleURL().path());
-  EXPECT_EQ("/files/click-noreferrer-links.html",
-            shell()->web_contents()->GetController().
-                GetLastCommittedEntry()->GetVirtualURL().path());
+  EXPECT_FALSE(
+      shell()->web_contents()->GetController().GetLastCommittedEntry());
 
   // Renderer-initiated navigations should work.
-  bool success = false;
-  EXPECT_TRUE(ExecuteScriptAndExtractBool(
+  base::string16 expected_title = ASCIIToUTF16("Title Of Awesomeness");
+  TitleWatcher title_watcher(shell()->web_contents(), expected_title);
+  GURL url = test_server()->GetURL("files/title2.html");
+  EXPECT_TRUE(ExecuteScript(
       shell()->web_contents(),
-      "window.domAutomationController.send(clickNoRefLink());",
-      &success));
-  EXPECT_TRUE(success);
-
-  // Wait for the cross-site transition in the current tab to finish.
-  WaitForLoadStop(shell()->web_contents());
+      base::StringPrintf("location.href = '%s'", url.spec().c_str())));
+  ASSERT_EQ(expected_title, title_watcher.WaitAndGetTitle());
 
   // Opens in same tab.
   EXPECT_EQ(1u, Shell::windows().size());
@@ -890,9 +878,9 @@
             shell()->web_contents()->GetLastCommittedURL().path());
 
   // Should have the same SiteInstance.
-  scoped_refptr<SiteInstance> noref_site_instance(
+  scoped_refptr<SiteInstance> new_site_instance(
       shell()->web_contents()->GetSiteInstance());
-  EXPECT_EQ(orig_site_instance, noref_site_instance);
+  EXPECT_EQ(orig_site_instance, new_site_instance);
 }
 
 // Test for crbug.com/9682.  We should show the URL for a pending renderer-
diff --git a/content/browser/frame_host/render_frame_host_manager_unittest.cc b/content/browser/frame_host/render_frame_host_manager_unittest.cc
index 72e8b3a..c0afa67 100644
--- a/content/browser/frame_host/render_frame_host_manager_unittest.cc
+++ b/content/browser/frame_host/render_frame_host_manager_unittest.cc
@@ -1091,7 +1091,7 @@
   manager1->Init(
       browser_context(), blank_instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE);
   // Test the case that new RVH is considered live.
-  manager1->current_host()->CreateRenderView(base::string16(), -1, -1);
+  manager1->current_host()->CreateRenderView(base::string16(), -1, -1, false);
 
   // Navigate to a WebUI page.
   const GURL kUrl1("chrome://foo");
@@ -1126,7 +1126,7 @@
       browser_context(), webui_instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE);
   // Make sure the new RVH is considered live.  This is usually done in
   // RenderWidgetHost::Init when opening a new tab from a link.
-  manager2->current_host()->CreateRenderView(base::string16(), -1, -1);
+  manager2->current_host()->CreateRenderView(base::string16(), -1, -1, false);
 
   const GURL kUrl2("chrome://foo/bar");
   NavigationEntryImpl entry2(NULL /* instance */, -1 /* page_id */, kUrl2,
@@ -1328,7 +1328,8 @@
   contents()->SetOpener(opener1.get());
 
   // Make sure the new opener RVH is considered live.
-  opener1_manager->current_host()->CreateRenderView(base::string16(), -1, -1);
+  opener1_manager->current_host()->CreateRenderView(
+      base::string16(), -1, -1, false);
 
   // Use a cross-process navigation in the opener to swap out the old RVH.
   EXPECT_FALSE(opener1_manager->GetSwappedOutRenderViewHost(
diff --git a/content/browser/frame_host/render_widget_host_view_child_frame.cc b/content/browser/frame_host/render_widget_host_view_child_frame.cc
index bb23c95..39f0c4e 100644
--- a/content/browser/frame_host/render_widget_host_view_child_frame.cc
+++ b/content/browser/frame_host/render_widget_host_view_child_frame.cc
@@ -301,12 +301,6 @@
 }
 #endif  // defined(OS_ANDROID)
 
-BackingStore* RenderWidgetHostViewChildFrame::AllocBackingStore(
-    const gfx::Size& size) {
-  NOTREACHED();
-  return NULL;
-}
-
 void RenderWidgetHostViewChildFrame::CopyFromCompositingSurface(
     const gfx::Rect& src_subrect,
     const gfx::Size& /* dst_size */,
diff --git a/content/browser/frame_host/render_widget_host_view_child_frame.h b/content/browser/frame_host/render_widget_host_view_child_frame.h
index 43cbc3a..279bafc 100644
--- a/content/browser/frame_host/render_widget_host_view_child_frame.h
+++ b/content/browser/frame_host/render_widget_host_view_child_frame.h
@@ -93,7 +93,6 @@
   virtual void SelectionRootBoundsChanged(const gfx::Rect& bounds) OVERRIDE;
 #endif
   virtual void ScrollOffsetChanged() OVERRIDE;
-  virtual BackingStore* AllocBackingStore(const gfx::Size& size) OVERRIDE;
   virtual void CopyFromCompositingSurface(
       const gfx::Rect& src_subrect,
       const gfx::Size& dst_size,
diff --git a/content/browser/geolocation/location_api_adapter_android.h b/content/browser/geolocation/location_api_adapter_android.h
index f81ac93..d1d2fa5 100644
--- a/content/browser/geolocation/location_api_adapter_android.h
+++ b/content/browser/geolocation/location_api_adapter_android.h
@@ -5,7 +5,7 @@
 #ifndef CONTENT_BROWSER_GEOLOCATION_LOCATION_API_ADAPTER_ANDROID_H_
 #define CONTENT_BROWSER_GEOLOCATION_LOCATION_API_ADAPTER_ANDROID_H_
 
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/android/scoped_java_ref.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/singleton.h"
diff --git a/content/browser/gpu/compositor_util.cc b/content/browser/gpu/compositor_util.cc
index 5b2e591..a9c3318 100644
--- a/content/browser/gpu/compositor_util.cc
+++ b/content/browser/gpu/compositor_util.cc
@@ -41,19 +41,16 @@
           true
       },
       {
-          "compositing",
-          manager->IsFeatureBlacklisted(
-              gpu::GPU_FEATURE_TYPE_ACCELERATED_COMPOSITING),
-          command_line.HasSwitch(switches::kDisableAcceleratedCompositing),
-          "Accelerated compositing has been disabled, either via about:flags or"
-          " command line. This adversely affects performance of all hardware"
-          " accelerated features.",
+          "gpu_compositing",
+          manager->IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_GPU_COMPOSITING),
+          false,
+          "Gpu compositing has been disabled, either via about:flags or"
+          " command line. The browser will fall back to software compositing"
+          " and hardware acceleration will be unavailable.",
           true
       },
       {
           "3d_css",
-          manager->IsFeatureBlacklisted(
-              gpu::GPU_FEATURE_TYPE_ACCELERATED_COMPOSITING) ||
           manager->IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_3D_CSS),
           command_line.HasSwitch(switches::kDisableAcceleratedLayers),
           "Accelerated layers have been disabled at the command line.",
@@ -61,11 +58,8 @@
       },
       {
           "css_animation",
-          manager->IsFeatureBlacklisted(
-              gpu::GPU_FEATURE_TYPE_ACCELERATED_COMPOSITING) ||
           manager->IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_3D_CSS),
           command_line.HasSwitch(cc::switches::kDisableThreadedAnimation) ||
-          command_line.HasSwitch(switches::kDisableAcceleratedCompositing) ||
           command_line.HasSwitch(switches::kDisableAcceleratedLayers),
           "Accelerated CSS animation has been disabled at the command line.",
           true
@@ -127,8 +121,7 @@
           "video",
           manager->IsFeatureBlacklisted(
               gpu::GPU_FEATURE_TYPE_ACCELERATED_VIDEO),
-          command_line.HasSwitch(switches::kDisableAcceleratedVideo) ||
-          command_line.HasSwitch(switches::kDisableAcceleratedCompositing),
+          command_line.HasSwitch(switches::kDisableAcceleratedVideo),
           "Accelerated video presentation has been disabled, either via"
           " about:flags or command line.",
           true
@@ -144,21 +137,13 @@
       },
 #endif
       {
-          "force_compositing_mode",
+          "rasterization",
           manager->IsFeatureBlacklisted(
-              gpu::GPU_FEATURE_TYPE_FORCE_COMPOSITING_MODE) &&
-          !IsForceCompositingModeEnabled(),
-          !IsForceCompositingModeEnabled() &&
-          !manager->IsFeatureBlacklisted(
-              gpu::GPU_FEATURE_TYPE_FORCE_COMPOSITING_MODE),
-          "Force compositing mode is off, either disabled at the command"
-          " line or not supported by the current system.",
-          false
-      },
-      {
-          "raster",
-          false,
+              gpu::GPU_FEATURE_TYPE_GPU_RASTERIZATION) &&
           !IsGpuRasterizationEnabled() && !IsForceGpuRasterizationEnabled(),
+          !IsGpuRasterizationEnabled() && !IsForceGpuRasterizationEnabled() &&
+          !manager->IsFeatureBlacklisted(
+              gpu::GPU_FEATURE_TYPE_GPU_RASTERIZATION),
           "Accelerated rasterization has not been enabled or"
           " is not supported by the current system.",
           true
@@ -169,32 +154,6 @@
   return kGpuFeatureInfo[index];
 }
 
-bool CanDoAcceleratedCompositing() {
-  const GpuDataManagerImpl* manager = GpuDataManagerImpl::GetInstance();
-
-  // Don't use force compositing mode if gpu access has been blocked or
-  // accelerated compositing is blacklisted.
-  if (!manager->GpuAccessAllowed(NULL) ||
-      manager->IsFeatureBlacklisted(
-          gpu::GPU_FEATURE_TYPE_ACCELERATED_COMPOSITING))
-    return false;
-
-  // Check for SwiftShader.
-  if (manager->ShouldUseSwiftShader())
-    return false;
-
-  const CommandLine& command_line = *CommandLine::ForCurrentProcess();
-  if (command_line.HasSwitch(switches::kDisableAcceleratedCompositing))
-    return false;
-
-  return true;
-}
-
-bool IsForceCompositingModeBlacklisted() {
-  return GpuDataManagerImpl::GetInstance()->IsFeatureBlacklisted(
-      gpu::GPU_FEATURE_TYPE_FORCE_COMPOSITING_MODE);
-}
-
 }  // namespace
 
 bool IsThreadedCompositingEnabled() {
@@ -215,30 +174,6 @@
 #endif
 }
 
-bool IsForceCompositingModeEnabled() {
-  // Force compositing mode is a subset of threaded compositing mode.
-  if (IsThreadedCompositingEnabled())
-    return true;
-
-  const CommandLine& command_line = *CommandLine::ForCurrentProcess();
-
-  // Command line switches take precedence over blacklisting.
-  if (command_line.HasSwitch(switches::kForceCompositingMode))
-    return true;
-
-  if (!CanDoAcceleratedCompositing() || IsForceCompositingModeBlacklisted())
-    return false;
-
-#if defined(OS_MACOSX) || defined(OS_WIN)
-  // Windows Vista+ has been shipping with TCM enabled at 100% since M24 and
-  // Mac OSX 10.8+ since M28. The blacklist check above takes care of returning
-  // false before this hits on unsupported Win/Mac versions.
-  return true;
-#else
-  return false;
-#endif
-}
-
 bool IsDelegatedRendererEnabled() {
   const CommandLine& command_line = *CommandLine::ForCurrentProcess();
   bool enabled = false;
@@ -253,8 +188,7 @@
   enabled &= !command_line.HasSwitch(switches::kDisableDelegatedRenderer);
 
   // Needs compositing, and thread.
-  if (enabled &&
-      (!IsForceCompositingModeEnabled() || !IsThreadedCompositingEnabled())) {
+  if (enabled && !IsThreadedCompositingEnabled()) {
     enabled = false;
     LOG(ERROR) << "Disabling delegated-rendering because it needs "
                << "force-compositing-mode and threaded-compositing.";
@@ -289,8 +223,12 @@
   else if (command_line.HasSwitch(switches::kEnableGpuRasterization))
     return true;
 
-  return command_line.HasSwitch(
-      switches::kEnableBleedingEdgeRenderingFastPaths);
+  if (GpuDataManagerImpl::GetInstance()->IsFeatureBlacklisted(
+          gpu::GPU_FEATURE_TYPE_GPU_RASTERIZATION)) {
+    return false;
+  }
+
+  return true;
 }
 
 bool IsForceGpuRasterizationEnabled() {
@@ -303,7 +241,6 @@
 }
 
 base::Value* GetFeatureStatus() {
-  const CommandLine& command_line = *CommandLine::ForCurrentProcess();
   GpuDataManagerImpl* manager = GpuDataManagerImpl::GetInstance();
   std::string gpu_access_blocked_reason;
   bool gpu_access_blocked =
@@ -314,10 +251,6 @@
   bool eof = false;
   for (size_t i = 0; !eof; ++i) {
     const GpuFeatureInfo gpu_feature_info = GetGpuFeatureInfo(i, &eof);
-    // force_compositing_mode status is part of the compositing status.
-    if (gpu_feature_info.name == "force_compositing_mode")
-      continue;
-
     std::string status;
     if (gpu_feature_info.disabled) {
       status = "disabled";
@@ -346,19 +279,10 @@
     } else {
       status = "enabled";
       if (gpu_feature_info.name == "webgl" &&
-          (command_line.HasSwitch(switches::kDisableAcceleratedCompositing) ||
-           manager->IsFeatureBlacklisted(
-               gpu::GPU_FEATURE_TYPE_ACCELERATED_COMPOSITING)))
+          manager->IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_GPU_COMPOSITING))
         status += "_readback";
-      bool has_thread = IsThreadedCompositingEnabled();
-      if (gpu_feature_info.name == "compositing") {
-        bool force_compositing = IsForceCompositingModeEnabled();
-        if (force_compositing)
-          status += "_force";
-        if (has_thread)
-          status += "_threaded";
-      } else if (gpu_feature_info.name == "css_animation") {
-        if (has_thread)
+      if (gpu_feature_info.name == "css_animation") {
+        if (IsThreadedCompositingEnabled())
           status = "accelerated_threaded";
         else
           status = "accelerated";
@@ -367,6 +291,10 @@
           status += "_force";
       }
     }
+    if (gpu_feature_info.name == "gpu_compositing") {
+      if (IsThreadedCompositingEnabled())
+        status += "_threaded";
+    }
     feature_status_dict->SetString(
         gpu_feature_info.name.c_str(), status.c_str());
   }
diff --git a/content/browser/gpu/compositor_util.h b/content/browser/gpu/compositor_util.h
index 555a770..b3cf204 100644
--- a/content/browser/gpu/compositor_util.h
+++ b/content/browser/gpu/compositor_util.h
@@ -16,9 +16,6 @@
 // Returns true if the threaded compositor is on (via flags or field trial).
 CONTENT_EXPORT bool IsThreadedCompositingEnabled();
 
-// Returns true if force-compositing-mode is on (via flags or field trial).
-CONTENT_EXPORT bool IsForceCompositingModeEnabled();
-
 // Returns true if delegated-renderer is on (via flags, or platform default).
 CONTENT_EXPORT bool IsDelegatedRendererEnabled();
 
diff --git a/content/browser/gpu/compositor_util_browsertest.cc b/content/browser/gpu/compositor_util_browsertest.cc
index 7c52007..1f3b9f3 100644
--- a/content/browser/gpu/compositor_util_browsertest.cc
+++ b/content/browser/gpu/compositor_util_browsertest.cc
@@ -41,10 +41,6 @@
     expected_mode = THREADED;
 #endif
 
-  EXPECT_EQ(expected_mode == ENABLED ||
-            expected_mode == THREADED ||
-            expected_mode == DELEGATED,
-            IsForceCompositingModeEnabled());
   EXPECT_EQ(expected_mode == THREADED ||
             expected_mode == DELEGATED,
             IsThreadedCompositingEnabled());
diff --git a/content/browser/gpu/gpu_data_manager_impl.cc b/content/browser/gpu/gpu_data_manager_impl.cc
index d31c1a5..93d15c7 100644
--- a/content/browser/gpu/gpu_data_manager_impl.cc
+++ b/content/browser/gpu/gpu_data_manager_impl.cc
@@ -241,6 +241,11 @@
   return private_->GetDisplayCount();
 }
 
+bool GpuDataManagerImpl::UpdateActiveGpu(uint32 vendor_id, uint32 device_id) {
+  base::AutoLock auto_lock(lock_);
+  return private_->UpdateActiveGpu(vendor_id, device_id);
+}
+
 void GpuDataManagerImpl::Notify3DAPIBlocked(const GURL& url,
                                             int render_process_id,
                                             int render_view_id,
diff --git a/content/browser/gpu/gpu_data_manager_impl.h b/content/browser/gpu/gpu_data_manager_impl.h
index e3e92af..5a783e4 100644
--- a/content/browser/gpu/gpu_data_manager_impl.h
+++ b/content/browser/gpu/gpu_data_manager_impl.h
@@ -166,6 +166,10 @@
   void SetDisplayCount(unsigned int display_count);
   unsigned int GetDisplayCount() const;
 
+  // Set the active gpu.
+  // Return true if it's a different GPU from the previous active one.
+  bool UpdateActiveGpu(uint32 vendor_id, uint32 device_id);
+
   // Called when GPU process initialization failed.
   void OnGpuProcessInitFailure();
 
diff --git a/content/browser/gpu/gpu_data_manager_impl_private.cc b/content/browser/gpu/gpu_data_manager_impl_private.cc
index 42b7db1..f6b39ce 100644
--- a/content/browser/gpu/gpu_data_manager_impl_private.cc
+++ b/content/browser/gpu/gpu_data_manager_impl_private.cc
@@ -145,25 +145,20 @@
 
   const gpu::GpuFeatureType kGpuFeatures[] = {
       gpu::GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS,
-      gpu::GPU_FEATURE_TYPE_ACCELERATED_COMPOSITING,
-      gpu::GPU_FEATURE_TYPE_WEBGL
-  };
+      gpu::GPU_FEATURE_TYPE_GPU_COMPOSITING, gpu::GPU_FEATURE_TYPE_WEBGL};
   const std::string kGpuBlacklistFeatureHistogramNames[] = {
       "GPU.BlacklistFeatureTestResults.Accelerated2dCanvas",
-      "GPU.BlacklistFeatureTestResults.AcceleratedCompositing",
-      "GPU.BlacklistFeatureTestResults.Webgl",
-  };
+      "GPU.BlacklistFeatureTestResults.GpuCompositing",
+      "GPU.BlacklistFeatureTestResults.Webgl", };
   const bool kGpuFeatureUserFlags[] = {
       command_line.HasSwitch(switches::kDisableAccelerated2dCanvas),
-      command_line.HasSwitch(switches::kDisableAcceleratedCompositing),
-      command_line.HasSwitch(switches::kDisableExperimentalWebGL),
-  };
+      command_line.HasSwitch(switches::kDisableGpu),
+      command_line.HasSwitch(switches::kDisableExperimentalWebGL), };
 #if defined(OS_WIN)
   const std::string kGpuBlacklistFeatureHistogramNamesWin[] = {
       "GPU.BlacklistFeatureTestResultsWindows.Accelerated2dCanvas",
-      "GPU.BlacklistFeatureTestResultsWindows.AcceleratedCompositing",
-      "GPU.BlacklistFeatureTestResultsWindows.Webgl",
-  };
+      "GPU.BlacklistFeatureTestResultsWindows.GpuCompositing",
+      "GPU.BlacklistFeatureTestResultsWindows.Webgl", };
 #endif
   const size_t kNumFeatures =
       sizeof(kGpuFeatures) / sizeof(gpu::GpuFeatureType);
@@ -217,17 +212,25 @@
       reinterpret_cast<GpuDataManagerImpl*>(gpu_data_manager);
   DCHECK(manager);
 
+  // Display change.
+  bool display_changed = false;
   uint32_t displayCount;
   CGGetActiveDisplayList(0, NULL, &displayCount);
-
-  bool fireGpuSwitch = flags & kCGDisplayAddFlag;
-
   if (displayCount != manager->GetDisplayCount()) {
     manager->SetDisplayCount(displayCount);
-    fireGpuSwitch = true;
+    display_changed = true;
   }
 
-  if (fireGpuSwitch)
+  // Gpu change.
+  bool gpu_changed = false;
+  if (flags & kCGDisplayAddFlag) {
+    uint32 vendor_id, device_id;
+    if (gpu::CollectGpuID(&vendor_id, &device_id) == gpu::kGpuIDSuccess) {
+      gpu_changed = manager->UpdateActiveGpu(vendor_id, device_id);
+    }
+  }
+
+  if (display_changed || gpu_changed)
     manager->HandleGpuSwitch();
 }
 #endif  // OS_MACOSX
@@ -633,9 +636,6 @@
     CommandLine* command_line) const {
   DCHECK(command_line);
 
-  if (IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_ACCELERATED_COMPOSITING) &&
-      !command_line->HasSwitch(switches::kDisableAcceleratedCompositing))
-    command_line->AppendSwitch(switches::kDisableAcceleratedCompositing);
   if (IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE) &&
       !command_line->HasSwitch(switches::kDisableAcceleratedVideoDecode))
     command_line->AppendSwitch(switches::kDisableAcceleratedVideoDecode);
@@ -645,10 +645,6 @@
     command_line->AppendSwitch(switches::kDisableWebRtcHWEncoding);
 #endif
 
-  if (use_software_compositor_ &&
-      !command_line->HasSwitch(switches::kEnableSoftwareCompositing))
-    command_line->AppendSwitch(switches::kEnableSoftwareCompositing);
-
 #if defined(USE_AURA)
   if (!CanUseGpuBrowserCompositor())
     command_line->AppendSwitch(switches::kDisableGpuCompositing);
@@ -671,11 +667,10 @@
     if (swiftshader_path.empty())
       swiftshader_path = swiftshader_path_;
   } else if ((IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_WEBGL) ||
-              IsFeatureBlacklisted(
-                  gpu::GPU_FEATURE_TYPE_ACCELERATED_COMPOSITING) ||
+              IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_GPU_COMPOSITING) ||
               IsFeatureBlacklisted(
                   gpu::GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS)) &&
-      (use_gl == "any")) {
+             (use_gl == "any")) {
     command_line->AppendSwitchASCII(
         switches::kUseGL, gfx::kGLImplementationOSMesaName);
   } else if (!use_gl.empty()) {
@@ -729,9 +724,7 @@
   // TODO(jbauman): Add proper blacklist support for core animation plugins so
   // special-casing this video card won't be necessary. See
   // http://crbug.com/134015
-  if (IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_ACCELERATED_COMPOSITING) ||
-      CommandLine::ForCurrentProcess()->HasSwitch(
-          switches::kDisableAcceleratedCompositing)) {
+  if (IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_GPU_COMPOSITING)) {
     if (!command_line->HasSwitch(
            switches::kDisableCoreAnimationPlugins))
       command_line->AppendSwitch(
@@ -744,8 +737,6 @@
     WebPreferences* prefs) const {
   DCHECK(prefs);
 
-  if (IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_ACCELERATED_COMPOSITING))
-    prefs->accelerated_compositing_enabled = false;
   if (IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_WEBGL)) {
     prefs->experimental_webgl_enabled = false;
     prefs->pepper_3d_enabled = false;
@@ -764,31 +755,12 @@
       (IsDriverBugWorkaroundActive(gpu::DISABLE_MULTIMONITOR_MULTISAMPLING) &&
           display_count_ > 1))
     prefs->gl_multisampling_enabled = false;
-  if (IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_3D_CSS)) {
-    prefs->accelerated_compositing_for_3d_transforms_enabled = false;
-    prefs->accelerated_compositing_for_animation_enabled = false;
-  }
-  if (IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_ACCELERATED_VIDEO))
-    prefs->accelerated_compositing_for_video_enabled = false;
 
-  // Accelerated video and animation are slower than regular when using
-  // SwiftShader. 3D CSS or Pepper 3D may also be too slow to be worthwhile.
-  if (ShouldUseSwiftShader()) {
-    prefs->accelerated_compositing_for_video_enabled = false;
-    prefs->accelerated_compositing_for_animation_enabled = false;
-    prefs->accelerated_compositing_for_3d_transforms_enabled = false;
-    prefs->accelerated_compositing_for_plugins_enabled = false;
-    prefs->pepper_3d_enabled = false;
-  }
-
-  if (use_software_compositor_) {
-    prefs->force_compositing_mode = true;
-    prefs->accelerated_compositing_enabled = true;
-    prefs->accelerated_compositing_for_3d_transforms_enabled = true;
-    prefs->accelerated_compositing_for_animation_enabled = true;
-    prefs->accelerated_compositing_for_plugins_enabled = true;
-    prefs->accelerated_compositing_for_video_enabled = true;
-  }
+  prefs->accelerated_compositing_enabled = true;
+  prefs->accelerated_compositing_for_3d_transforms_enabled = true;
+  prefs->accelerated_compositing_for_animation_enabled = true;
+  prefs->accelerated_compositing_for_plugins_enabled = true;
+  prefs->accelerated_compositing_for_video_enabled = true;
 
 #if defined(USE_AURA)
   if (!CanUseGpuBrowserCompositor()) {
@@ -882,40 +854,44 @@
 }
 
 void GpuDataManagerImplPrivate::HandleGpuSwitch() {
-  // Check if the active gpu has changed.
-  uint32 vendor_id, device_id;
-  gpu::GPUInfo::GPUDevice* active = NULL;
-  gpu::GPUInfo::GPUDevice* old_active = NULL;
-  if (gpu::CollectGpuID(&vendor_id, &device_id) == gpu::kGpuIDSuccess) {
+  GpuDataManagerImpl::UnlockedSession session(owner_);
+  observer_list_->Notify(&GpuDataManagerObserver::OnGpuSwitching);
+}
+
+bool GpuDataManagerImplPrivate::UpdateActiveGpu(
+    uint32 vendor_id, uint32 device_id) {
+  if (gpu_info_.gpu.vendor_id == vendor_id &&
+      gpu_info_.gpu.device_id == device_id) {
+    // The primary GPU is active.
     if (gpu_info_.gpu.active)
-      old_active = &gpu_info_.gpu;
-    if (gpu_info_.gpu.vendor_id == vendor_id &&
-        gpu_info_.gpu.device_id == device_id)
-      active = &gpu_info_.gpu;
+      return false;
+    gpu_info_.gpu.active = true;
+    for (size_t ii = 0; ii < gpu_info_.secondary_gpus.size(); ++ii)
+      gpu_info_.secondary_gpus[ii].active = false;
+  } else {
+    // A secondary GPU is active.
     for (size_t ii = 0; ii < gpu_info_.secondary_gpus.size(); ++ii) {
-      gpu::GPUInfo::GPUDevice& gpu = gpu_info_.secondary_gpus[ii];
-      if (gpu.active)
-        old_active = &gpu;
-      if (gpu.vendor_id == vendor_id && gpu.device_id == device_id)
-        active = &gpu;
+      if (gpu_info_.secondary_gpus[ii].vendor_id == vendor_id &&
+          gpu_info_.secondary_gpus[ii].device_id == device_id) {
+        if (gpu_info_.secondary_gpus[ii].active)
+          return false;
+        gpu_info_.secondary_gpus[ii].active = true;
+      } else {
+        gpu_info_.secondary_gpus[ii].active = false;
+      }
     }
-    DCHECK(active && old_active);
-    if (active != old_active) {  // A different GPU is used.
-      old_active->active = false;
-      active->active = true;
-      UpdateGpuInfoHelper();
-    }
+    gpu_info_.gpu.active = false;
   }
-  {
-    GpuDataManagerImpl::UnlockedSession session(owner_);
-    observer_list_->Notify(&GpuDataManagerObserver::OnGpuSwitching);
-  }
+  UpdateGpuInfoHelper();
+  return true;
 }
 
 bool GpuDataManagerImplPrivate::CanUseGpuBrowserCompositor() const {
-  return !ShouldUseSwiftShader() &&
-         !IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_ACCELERATED_COMPOSITING) &&
-         !IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_FORCE_COMPOSITING_MODE);
+  if (ShouldUseSwiftShader())
+    return false;
+  if (IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_GPU_COMPOSITING))
+    return false;
+  return true;
 }
 
 void GpuDataManagerImplPrivate::BlockDomainFrom3DAPIs(
@@ -964,21 +940,11 @@
       owner_(owner),
       display_count_(0),
       gpu_process_accessible_(true),
-      use_software_compositor_(false),
       finalized_(false) {
   DCHECK(owner_);
   CommandLine* command_line = CommandLine::ForCurrentProcess();
-  if (command_line->HasSwitch(switches::kDisableAcceleratedCompositing)) {
-    command_line->AppendSwitch(switches::kDisableAccelerated2dCanvas);
-    command_line->AppendSwitch(switches::kDisableAcceleratedLayers);
-  }
   if (command_line->HasSwitch(switches::kDisableGpu))
     DisableHardwareAcceleration();
-  if (command_line->HasSwitch(switches::kEnableSoftwareCompositing))
-    use_software_compositor_ = true;
-#if defined(USE_AURA) || defined(OS_MACOSX)
-  use_software_compositor_ = true;
-#endif
 
 #if defined(OS_MACOSX)
   CGGetActiveDisplayList (0, NULL, &display_count_);
@@ -1034,18 +1000,12 @@
 
 void GpuDataManagerImplPrivate::UpdateBlacklistedFeatures(
     const std::set<int>& features) {
-  CommandLine* command_line = CommandLine::ForCurrentProcess();
   blacklisted_features_ = features;
 
   // Force disable using the GPU for these features, even if they would
   // otherwise be allowed.
-  if (card_blacklisted_ ||
-      command_line->HasSwitch(switches::kBlacklistAcceleratedCompositing)) {
-    blacklisted_features_.insert(
-        gpu::GPU_FEATURE_TYPE_ACCELERATED_COMPOSITING);
-  }
-  if (card_blacklisted_ ||
-      command_line->HasSwitch(switches::kBlacklistWebGL)) {
+  if (card_blacklisted_) {
+    blacklisted_features_.insert(gpu::GPU_FEATURE_TYPE_GPU_COMPOSITING);
     blacklisted_features_.insert(gpu::GPU_FEATURE_TYPE_WEBGL);
   }
 
diff --git a/content/browser/gpu/gpu_data_manager_impl_private.h b/content/browser/gpu/gpu_data_manager_impl_private.h
index 47b88d6..8e5514f 100644
--- a/content/browser/gpu/gpu_data_manager_impl_private.h
+++ b/content/browser/gpu/gpu_data_manager_impl_private.h
@@ -107,6 +107,8 @@
   void SetDisplayCount(unsigned int display_count);
   unsigned int GetDisplayCount() const;
 
+  bool UpdateActiveGpu(uint32 vendor_id, uint32 device_id);
+
   void OnGpuProcessInitFailure();
 
   virtual ~GpuDataManagerImplPrivate();
@@ -252,8 +254,6 @@
 
   bool gpu_process_accessible_;
 
-  bool use_software_compositor_;
-
   // True if all future Initialize calls should be ignored.
   bool finalized_;
 
diff --git a/content/browser/gpu/gpu_data_manager_impl_private_unittest.cc b/content/browser/gpu/gpu_data_manager_impl_private_unittest.cc
index 2d70b73..8955ce1 100644
--- a/content/browser/gpu/gpu_data_manager_impl_private_unittest.cc
+++ b/content/browser/gpu/gpu_data_manager_impl_private_unittest.cc
@@ -8,9 +8,9 @@
 #include "base/time/time.h"
 #include "content/browser/gpu/gpu_data_manager_impl_private.h"
 #include "content/public/browser/gpu_data_manager_observer.h"
-#include "content/public/common/gpu_feature_type.h"
-#include "content/public/common/gpu_info.h"
 #include "gpu/command_buffer/service/gpu_switches.h"
+#include "gpu/config/gpu_feature_type.h"
+#include "gpu/config/gpu_info.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "url/gurl.h"
 
@@ -41,6 +41,11 @@
     video_memory_usage_stats_updated_ = true;
   }
 
+  void Reset() {
+    gpu_info_updated_ = false;
+    video_memory_usage_stats_updated_ = false;
+  }
+
  private:
   bool gpu_info_updated_;
   bool video_memory_usage_stats_updated_;
@@ -165,7 +170,7 @@
       }
   );
 
-  GPUInfo gpu_info;
+  gpu::GPUInfo gpu_info;
   gpu_info.gpu.vendor_id = 0x10de;
   gpu_info.gpu.device_id = 0x0640;
   manager->InitializeForTesting(blacklist_json, gpu_info);
@@ -173,7 +178,7 @@
   EXPECT_TRUE(manager->GpuAccessAllowed(&reason));
   EXPECT_TRUE(reason.empty());
   EXPECT_EQ(1u, manager->GetBlacklistedFeatureCount());
-  EXPECT_TRUE(manager->IsFeatureBlacklisted(GPU_FEATURE_TYPE_WEBGL));
+  EXPECT_TRUE(manager->IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_WEBGL));
 
   gpu_info.gl_vendor = "NVIDIA";
   gpu_info.gl_renderer = "NVIDIA GeForce GT 120";
@@ -181,9 +186,9 @@
   EXPECT_FALSE(manager->GpuAccessAllowed(&reason));
   EXPECT_FALSE(reason.empty());
   EXPECT_EQ(2u, manager->GetBlacklistedFeatureCount());
-  EXPECT_TRUE(manager->IsFeatureBlacklisted(GPU_FEATURE_TYPE_WEBGL));
+  EXPECT_TRUE(manager->IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_WEBGL));
   EXPECT_TRUE(manager->IsFeatureBlacklisted(
-      GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS));
+      gpu::GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS));
 }
 
 TEST_F(GpuDataManagerImplPrivateTest, GpuSideExceptions) {
@@ -213,7 +218,7 @@
         ]
       }
   );
-  GPUInfo gpu_info;
+  gpu::GPUInfo gpu_info;
   gpu_info.gpu.vendor_id = 0x10de;
   gpu_info.gpu.device_id = 0x0640;
   manager->InitializeForTesting(blacklist_json, gpu_info);
@@ -238,7 +243,7 @@
   manager->DisableHardwareAcceleration();
   EXPECT_FALSE(manager->GpuAccessAllowed(&reason));
   EXPECT_FALSE(reason.empty());
-  EXPECT_EQ(static_cast<size_t>(NUMBER_OF_GPU_FEATURE_TYPES),
+  EXPECT_EQ(static_cast<size_t>(gpu::NUMBER_OF_GPU_FEATURE_TYPES),
             manager->GetBlacklistedFeatureCount());
 }
 
@@ -260,8 +265,8 @@
   EXPECT_TRUE(manager->ShouldUseSwiftShader());
   EXPECT_TRUE(manager->GpuAccessAllowed(NULL));
   EXPECT_EQ(1u, manager->GetBlacklistedFeatureCount());
-  EXPECT_TRUE(
-      manager->IsFeatureBlacklisted(GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS));
+  EXPECT_TRUE(manager->IsFeatureBlacklisted(
+      gpu::GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS));
 }
 
 TEST_F(GpuDataManagerImplPrivateTest, SwiftShaderRendering2) {
@@ -281,8 +286,8 @@
   EXPECT_TRUE(manager->GpuAccessAllowed(NULL));
   EXPECT_TRUE(manager->ShouldUseSwiftShader());
   EXPECT_EQ(1u, manager->GetBlacklistedFeatureCount());
-  EXPECT_TRUE(
-      manager->IsFeatureBlacklisted(GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS));
+  EXPECT_TRUE(manager->IsFeatureBlacklisted(
+      gpu::GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS));
 }
 
 TEST_F(GpuDataManagerImplPrivateTest, GpuInfoUpdate) {
@@ -297,7 +302,7 @@
   }
   EXPECT_FALSE(observer.gpu_info_updated());
 
-  GPUInfo gpu_info;
+  gpu::GPUInfo gpu_info;
   manager->UpdateGpuInfo(gpu_info);
   {
     base::RunLoop run_loop;
@@ -328,7 +333,7 @@
   }
   EXPECT_FALSE(observer.gpu_info_updated());
 
-  GPUInfo gpu_info;
+  gpu::GPUInfo gpu_info;
   manager->UpdateGpuInfo(gpu_info);
   {
     base::RunLoop run_loop;
@@ -503,7 +508,7 @@
                 "device_id": ["0x0042"],
                 "driver_version": {
                   "op": ">=",
-                  "number": "8.0.2"
+                  "value": "8.0.2"
                 }
               }
             ],
@@ -514,7 +519,7 @@
         ]
       }
   );
-  GPUInfo gpu_info;
+  gpu::GPUInfo gpu_info;
   gpu_info.gpu.vendor_id = 0x8086;
   gpu_info.gpu.device_id = 0x0042;
   manager->InitializeForTesting(blacklist_json, gpu_info);
@@ -530,7 +535,7 @@
   manager->SetGLStrings(kGLVendorMesa, kGLRendererMesa, kGLVersionMesa801);
   EXPECT_TRUE(manager->GpuAccessAllowed(NULL));
   EXPECT_EQ(1u, manager->GetBlacklistedFeatureCount());
-  EXPECT_TRUE(manager->IsFeatureBlacklisted(GPU_FEATURE_TYPE_WEBGL));
+  EXPECT_TRUE(manager->IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_WEBGL));
 }
 
 TEST_F(GpuDataManagerImplPrivateTest, SetGLStringsNoEffects) {
@@ -556,7 +561,7 @@
                 "device_id": ["0x0042"],
                 "driver_version": {
                   "op": ">=",
-                  "number": "8.0.2"
+                  "value": "8.0.2"
                 }
               }
             ],
@@ -567,7 +572,7 @@
         ]
       }
   );
-  GPUInfo gpu_info;
+  gpu::GPUInfo gpu_info;
   gpu_info.gpu.vendor_id = 0x8086;
   gpu_info.gpu.device_id = 0x0042;
   gpu_info.gl_vendor = kGLVendorMesa;
@@ -580,7 +585,7 @@
   // Full GPUInfo, the entry applies.
   EXPECT_TRUE(manager->GpuAccessAllowed(NULL));
   EXPECT_EQ(1u, manager->GetBlacklistedFeatureCount());
-  EXPECT_TRUE(manager->IsFeatureBlacklisted(GPU_FEATURE_TYPE_WEBGL));
+  EXPECT_TRUE(manager->IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_WEBGL));
 
   // Now assume browser gets GL strings from local state.
   // SetGLStrings() has no effects because GPUInfo already got these strings.
@@ -588,7 +593,7 @@
   manager->SetGLStrings(kGLVendorMesa, kGLRendererMesa, kGLVersionMesa802);
   EXPECT_TRUE(manager->GpuAccessAllowed(NULL));
   EXPECT_EQ(1u, manager->GetBlacklistedFeatureCount());
-  EXPECT_TRUE(manager->IsFeatureBlacklisted(GPU_FEATURE_TYPE_WEBGL));
+  EXPECT_TRUE(manager->IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_WEBGL));
 }
 #endif  // OS_LINUX
 
@@ -641,12 +646,12 @@
       }
   );
 
-  GPUInfo gpu_info;
+  gpu::GPUInfo gpu_info;
   gpu_info.gpu.vendor_id = 0x10de;
   gpu_info.gpu.device_id = 0x0640;
   manager->InitializeForTesting(blacklist_json, gpu_info);
 
-  EXPECT_EQ(static_cast<size_t>(NUMBER_OF_GPU_FEATURE_TYPES),
+  EXPECT_EQ(static_cast<size_t>(gpu::NUMBER_OF_GPU_FEATURE_TYPES),
             manager->GetBlacklistedFeatureCount());
   // TODO(zmo): remove the Linux specific behavior once we fix
   // crbug.com/238466.
@@ -659,4 +664,81 @@
 #endif
 }
 
+TEST_F(GpuDataManagerImplPrivateTest, UpdateActiveGpu) {
+  ScopedGpuDataManagerImpl manager;
+
+  const std::string blacklist_json = LONG_STRING_CONST(
+      {
+        "name": "gpu blacklist",
+        "version": "0.1",
+        "entries": [
+          {
+            "id": 1,
+            "vendor_id": "0x8086",
+            "multi_gpu_category": "active",
+            "features": [
+              "webgl"
+            ]
+          }
+        ]
+      }
+  );
+
+  // Two GPUs, the secondary Intel GPU is active.
+  gpu::GPUInfo gpu_info;
+  gpu_info.gpu.vendor_id = 0x10de;
+  gpu_info.gpu.device_id = 0x0640;
+  gpu_info.gpu.active = false;
+  gpu::GPUInfo::GPUDevice intel_gpu;
+  intel_gpu.vendor_id = 0x8086;
+  intel_gpu.device_id = 0x04a1;
+  intel_gpu.active = true;
+  gpu_info.secondary_gpus.push_back(intel_gpu);
+
+  manager->InitializeForTesting(blacklist_json, gpu_info);
+  TestObserver observer;
+  manager->AddObserver(&observer);
+
+  EXPECT_EQ(1u, manager->GetBlacklistedFeatureCount());
+
+  // Update with the same Intel GPU active.
+  EXPECT_FALSE(manager->UpdateActiveGpu(0x8086, 0x04a1));
+  {
+    base::RunLoop run_loop;
+    run_loop.RunUntilIdle();
+  }
+  EXPECT_FALSE(observer.gpu_info_updated());
+  EXPECT_EQ(1u, manager->GetBlacklistedFeatureCount());
+
+  // Set NVIDIA GPU to be active.
+  EXPECT_TRUE(manager->UpdateActiveGpu(0x10de, 0x0640));
+  {
+    base::RunLoop run_loop;
+    run_loop.RunUntilIdle();
+  }
+  EXPECT_TRUE(observer.gpu_info_updated());
+  EXPECT_EQ(0u, manager->GetBlacklistedFeatureCount());
+
+  observer.Reset();
+  EXPECT_FALSE(observer.gpu_info_updated());
+
+  // Update with the same NVIDIA GPU active.
+  EXPECT_FALSE(manager->UpdateActiveGpu(0x10de, 0x0640));
+  {
+    base::RunLoop run_loop;
+    run_loop.RunUntilIdle();
+  }
+  EXPECT_FALSE(observer.gpu_info_updated());
+  EXPECT_EQ(0u, manager->GetBlacklistedFeatureCount());
+
+  // Set Intel GPU to be active.
+  EXPECT_TRUE(manager->UpdateActiveGpu(0x8086, 0x04a1));
+  {
+    base::RunLoop run_loop;
+    run_loop.RunUntilIdle();
+  }
+  EXPECT_TRUE(observer.gpu_info_updated());
+  EXPECT_EQ(1u, manager->GetBlacklistedFeatureCount());
+}
+
 }  // namespace content
diff --git a/content/browser/gpu/gpu_internals_ui.cc b/content/browser/gpu/gpu_internals_ui.cc
index 7ae9d3c..86f4ce3 100644
--- a/content/browser/gpu/gpu_internals_ui.cc
+++ b/content/browser/gpu/gpu_internals_ui.cc
@@ -139,8 +139,10 @@
                                              gpu_info.pixel_shader_version));
   basic_info->Append(NewDescriptionValuePair("Vertex shader version",
                                              gpu_info.vertex_shader_version));
-  basic_info->Append(NewDescriptionValuePair("Machine model",
-                                             gpu_info.machine_model));
+  basic_info->Append(NewDescriptionValuePair("Machine model name",
+                                             gpu_info.machine_model_name));
+  basic_info->Append(NewDescriptionValuePair("Machine model version",
+                                             gpu_info.machine_model_version));
   basic_info->Append(NewDescriptionValuePair("GL version",
                                              gpu_info.gl_version));
   basic_info->Append(NewDescriptionValuePair("GL_VENDOR",
diff --git a/content/browser/indexed_db/indexed_db_backing_store.cc b/content/browser/indexed_db/indexed_db_backing_store.cc
index 32c53bc..d79407a 100644
--- a/content/browser/indexed_db/indexed_db_backing_store.cc
+++ b/content/browser/indexed_db/indexed_db_backing_store.cc
@@ -12,6 +12,8 @@
 #include "base/metrics/histogram.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
+#include "content/browser/child_process_security_policy_impl.h"
+#include "content/browser/indexed_db/indexed_db_blob_info.h"
 #include "content/browser/indexed_db/indexed_db_database_error.h"
 #include "content/browser/indexed_db/indexed_db_leveldb_coding.h"
 #include "content/browser/indexed_db/indexed_db_metadata.h"
@@ -27,6 +29,7 @@
 #include "third_party/WebKit/public/platform/WebIDBTypes.h"
 #include "third_party/WebKit/public/web/WebSerializedScriptValueVersion.h"
 #include "third_party/leveldatabase/env_chromium.h"
+#include "webkit/browser/blob/blob_data_handle.h"
 #include "webkit/common/database/database_identifier.h"
 
 using base::StringPiece;
@@ -45,6 +48,12 @@
       .AddExtension(FILE_PATH_LITERAL(".indexeddb.leveldb"));
 }
 
+static base::FilePath ComputeBlobPath(const GURL& origin_url) {
+  return base::FilePath()
+      .AppendASCII(webkit_database::GetIdentifierFromOrigin(origin_url))
+      .AddExtension(FILE_PATH_LITERAL(".indexeddb.blob"));
+}
+
 static base::FilePath ComputeCorruptionFileName(const GURL& origin_url) {
   return ComputeFileName(origin_url)
       .Append(FILE_PATH_LITERAL("corruption_info.json"));
@@ -78,6 +87,8 @@
   DELETE_DATABASE,
   TRANSACTION_COMMIT_METHOD,  // TRANSACTION_COMMIT is a WinNT.h macro
   GET_DATABASE_NAMES,
+  DELETE_INDEX,
+  CLEAR_OBJECT_STORE,
   INTERNAL_ERROR_MAX,
 };
 
@@ -323,9 +334,9 @@
       const std::string stop_key =
           DatabaseNameKey::EncodeStopKeyForOrigin(origin_identifier);
       scoped_ptr<LevelDBIterator> it = db->CreateIterator();
-      for (it->Seek(start_key);
-           it->IsValid() && CompareKeys(it->Key(), stop_key) < 0;
-           it->Next()) {
+      for (s = it->Seek(start_key);
+           s.ok() && it->IsValid() && CompareKeys(it->Key(), stop_key) < 0;
+           s = it->Next()) {
         int64 database_id = 0;
         found = false;
         s = GetInt(transaction.get(), it->Key(), &database_id, &found);
@@ -344,7 +355,7 @@
                   IndexedDBDatabaseMetadata::DEFAULT_INT_VERSION);
       }
     }
-    if (db_schema_version < 2) {
+    if (s.ok() && db_schema_version < 2) {
       db_schema_version = 2;
       PutInt(transaction.get(), schema_version_key, db_schema_version);
       db_data_version = blink::kSerializedScriptValueVersion;
@@ -352,6 +363,11 @@
     }
   }
 
+  if (!s.ok()) {
+    INTERNAL_READ_ERROR_UNTESTED(SET_UP_METADATA);
+    return false;
+  }
+
   // All new values will be written using this serialization version.
   found = false;
   s = GetInt(transaction.get(), data_version_key, &db_data_version, &found);
@@ -424,11 +440,13 @@
 IndexedDBBackingStore::IndexedDBBackingStore(
     IndexedDBFactory* indexed_db_factory,
     const GURL& origin_url,
+    const base::FilePath& blob_path,
     scoped_ptr<LevelDBDatabase> db,
     scoped_ptr<LevelDBComparator> comparator,
     base::TaskRunner* task_runner)
     : indexed_db_factory_(indexed_db_factory),
       origin_url_(origin_url),
+      blob_path_(blob_path),
       origin_identifier_(ComputeOriginIdentifier(origin_url)),
       task_runner_(task_runner),
       db_(db.Pass()),
@@ -436,6 +454,16 @@
       active_blob_registry_(this) {}
 
 IndexedDBBackingStore::~IndexedDBBackingStore() {
+  if (!blob_path_.empty() && !child_process_ids_granted_.empty()) {
+    ChildProcessSecurityPolicyImpl* policy =
+        ChildProcessSecurityPolicyImpl::GetInstance();
+    std::set<int>::const_iterator iter;
+    for (iter = child_process_ids_granted_.begin();
+         iter != child_process_ids_granted_.end();
+         ++iter) {
+      policy->RevokeAllPermissionsForFile(*iter, blob_path_);
+    }
+  }
   // db_'s destructor uses comparator_. The order of destruction is important.
   db_.reset();
   comparator_.reset();
@@ -654,6 +682,8 @@
 
   const base::FilePath file_path =
       path_base.Append(ComputeFileName(origin_url));
+  const base::FilePath blob_path =
+      path_base.Append(ComputeBlobPath(origin_url));
 
   if (IsPathTooLong(file_path)) {
     HistogramOpenStatus(INDEXED_DB_BACKING_STORE_OPEN_ORIGIN_TOO_LONG,
@@ -749,6 +779,7 @@
 
   return Create(indexed_db_factory,
                 origin_url,
+                blob_path,
                 db.Pass(),
                 comparator.Pass(),
                 task_runner);
@@ -783,6 +814,7 @@
 
   return Create(NULL /* indexed_db_factory */,
                 origin_url,
+                base::FilePath(),
                 db.Pass(),
                 comparator.Pass(),
                 task_runner);
@@ -792,6 +824,7 @@
 scoped_refptr<IndexedDBBackingStore> IndexedDBBackingStore::Create(
     IndexedDBFactory* indexed_db_factory,
     const GURL& origin_url,
+    const base::FilePath& blob_path,
     scoped_ptr<LevelDBDatabase> db,
     scoped_ptr<LevelDBComparator> comparator,
     base::TaskRunner* task_runner) {
@@ -800,6 +833,7 @@
   scoped_refptr<IndexedDBBackingStore> backing_store(
       new IndexedDBBackingStore(indexed_db_factory,
                                 origin_url,
+                                blob_path,
                                 db.Pass(),
                                 comparator.Pass(),
                                 task_runner));
@@ -810,7 +844,17 @@
   return backing_store;
 }
 
-std::vector<base::string16> IndexedDBBackingStore::GetDatabaseNames() {
+void IndexedDBBackingStore::GrantChildProcessPermissions(int child_process_id) {
+  if (!child_process_ids_granted_.count(child_process_id)) {
+    child_process_ids_granted_.insert(child_process_id);
+    ChildProcessSecurityPolicyImpl::GetInstance()->GrantReadFile(
+        child_process_id, blob_path_);
+  }
+}
+
+std::vector<base::string16> IndexedDBBackingStore::GetDatabaseNames(
+    leveldb::Status* s) {
+  *s = leveldb::Status::OK();
   std::vector<base::string16> found_names;
   const std::string start_key =
       DatabaseNameKey::EncodeMinKeyForOrigin(origin_identifier_);
@@ -820,9 +864,9 @@
   DCHECK(found_names.empty());
 
   scoped_ptr<LevelDBIterator> it = db_->CreateIterator();
-  for (it->Seek(start_key);
-       it->IsValid() && CompareKeys(it->Key(), stop_key) < 0;
-       it->Next()) {
+  for (*s = it->Seek(start_key);
+       s->ok() && it->IsValid() && CompareKeys(it->Key(), stop_key) < 0;
+       *s = it->Next()) {
     StringPiece slice(it->Key());
     DatabaseNameKey database_name_key;
     if (!DatabaseNameKey::Decode(&slice, &database_name_key)) {
@@ -831,6 +875,10 @@
     }
     found_names.push_back(database_name_key.database_name());
   }
+
+  if (!s->ok())
+    INTERNAL_READ_ERROR_UNTESTED(GET_DATABASE_NAMES);
+
   return found_names;
 }
 
@@ -843,7 +891,7 @@
 
   leveldb::Status s = GetInt(db_.get(), key, &metadata->id, found);
   if (!s.ok()) {
-    INTERNAL_READ_ERROR_UNTESTED(GET_IDBDATABASE_METADATA);
+    INTERNAL_READ_ERROR(GET_IDBDATABASE_METADATA);
     return s;
   }
   if (!*found)
@@ -959,13 +1007,16 @@
   return true;
 }
 
-static void DeleteRange(LevelDBTransaction* transaction,
-                        const std::string& begin,
-                        const std::string& end) {
+static leveldb::Status DeleteRange(LevelDBTransaction* transaction,
+                                   const std::string& begin,
+                                   const std::string& end) {
   scoped_ptr<LevelDBIterator> it = transaction->CreateIterator();
-  for (it->Seek(begin); it->IsValid() && CompareKeys(it->Key(), end) < 0;
-       it->Next())
+  leveldb::Status s;
+  for (s = it->Seek(begin);
+       s.ok() && it->IsValid() && CompareKeys(it->Key(), end) < 0;
+       s = it->Next())
     transaction->Remove(it->Key());
+  return s;
 }
 
 leveldb::Status IndexedDBBackingStore::DeleteDatabase(
@@ -987,10 +1038,14 @@
   const std::string stop_key = DatabaseMetaDataKey::Encode(
       metadata.id + 1, DatabaseMetaDataKey::ORIGIN_NAME);
   scoped_ptr<LevelDBIterator> it = db_->CreateIterator();
-  for (it->Seek(start_key);
-       it->IsValid() && CompareKeys(it->Key(), stop_key) < 0;
-       it->Next())
+  for (s = it->Seek(start_key);
+       s.ok() && it->IsValid() && CompareKeys(it->Key(), stop_key) < 0;
+       s = it->Next())
     transaction->Remove(it->Key());
+  if (!s.ok()) {
+    INTERNAL_WRITE_ERROR_UNTESTED(DELETE_DATABASE);
+    return s;
+  }
 
   const std::string key = DatabaseNameKey::Encode(origin_identifier_, name);
   transaction->Remove(key);
@@ -1038,8 +1093,8 @@
   DCHECK(object_stores->empty());
 
   scoped_ptr<LevelDBIterator> it = db_->CreateIterator();
-  it->Seek(start_key);
-  while (it->IsValid() && CompareKeys(it->Key(), stop_key) < 0) {
+  leveldb::Status s = it->Seek(start_key);
+  while (s.ok() && it->IsValid() && CompareKeys(it->Key(), stop_key) < 0) {
     StringPiece slice(it->Key());
     ObjectStoreMetaDataKey meta_data_key;
     bool ok = ObjectStoreMetaDataKey::Decode(&slice, &meta_data_key);
@@ -1047,7 +1102,9 @@
     if (meta_data_key.MetaDataType() != ObjectStoreMetaDataKey::NAME) {
       INTERNAL_CONSISTENCY_ERROR_UNTESTED(GET_OBJECT_STORES);
       // Possible stale metadata, but don't fail the load.
-      it->Next();
+      s = it->Next();
+      if (!s.ok())
+        break;
       continue;
     }
 
@@ -1062,7 +1119,9 @@
         INTERNAL_CONSISTENCY_ERROR_UNTESTED(GET_OBJECT_STORES);
     }
 
-    it->Next();
+    s = it->Next();
+    if (!s.ok())
+      break;
     if (!CheckObjectStoreAndMetaDataType(it.get(),
                                          stop_key,
                                          object_store_id,
@@ -1077,7 +1136,9 @@
         INTERNAL_CONSISTENCY_ERROR_UNTESTED(GET_OBJECT_STORES);
     }
 
-    it->Next();
+    s = it->Next();
+    if (!s.ok())
+      break;
     if (!CheckObjectStoreAndMetaDataType(
              it.get(),
              stop_key,
@@ -1093,7 +1154,9 @@
         INTERNAL_CONSISTENCY_ERROR_UNTESTED(GET_OBJECT_STORES);
     }
 
-    it->Next();  // Is evicatble.
+    s = it->Next();  // Is evictable.
+    if (!s.ok())
+      break;
     if (!CheckObjectStoreAndMetaDataType(it.get(),
                                          stop_key,
                                          object_store_id,
@@ -1102,7 +1165,9 @@
       break;
     }
 
-    it->Next();  // Last version.
+    s = it->Next();  // Last version.
+    if (!s.ok())
+      break;
     if (!CheckObjectStoreAndMetaDataType(
              it.get(),
              stop_key,
@@ -1112,7 +1177,9 @@
       break;
     }
 
-    it->Next();  // Maximum index id allocated.
+    s = it->Next();  // Maximum index id allocated.
+    if (!s.ok())
+      break;
     if (!CheckObjectStoreAndMetaDataType(
              it.get(),
              stop_key,
@@ -1128,7 +1195,9 @@
         INTERNAL_CONSISTENCY_ERROR_UNTESTED(GET_OBJECT_STORES);
     }
 
-    it->Next();  // [optional] has key path (is not null)
+    s = it->Next();  // [optional] has key path (is not null)
+    if (!s.ok())
+      break;
     if (CheckObjectStoreAndMetaDataType(it.get(),
                                         stop_key,
                                         object_store_id,
@@ -1151,7 +1220,9 @@
       }
       if (!has_key_path)
         key_path = IndexedDBKeyPath();
-      it->Next();
+      s = it->Next();
+      if (!s.ok())
+        break;
     }
 
     int64 key_generator_current_number = -1;
@@ -1168,7 +1239,9 @@
       // object store, and write lazily to backing store.  For now,
       // just assert that if it was written it was valid.
       DCHECK_GE(key_generator_current_number, kKeyGeneratorInitialNumber);
-      it->Next();
+      s = it->Next();
+      if (!s.ok())
+        break;
     }
 
     IndexedDBObjectStoreMetadata metadata(object_store_name,
@@ -1176,13 +1249,16 @@
                                           key_path,
                                           auto_increment,
                                           max_index_id);
-    leveldb::Status s =
-        GetIndexes(database_id, object_store_id, &metadata.indexes);
+    s = GetIndexes(database_id, object_store_id, &metadata.indexes);
     if (!s.ok())
-      return s;
+      break;
     (*object_stores)[object_store_id] = metadata;
   }
-  return leveldb::Status::OK();
+
+  if (!s.ok())
+    INTERNAL_READ_ERROR_UNTESTED(GET_OBJECT_STORES);
+
+  return s;
 }
 
 WARN_UNUSED_RESULT static leveldb::Status SetMaxObjectStoreId(
@@ -1286,20 +1362,32 @@
     return InternalInconsistencyStatus();
   }
 
-  DeleteRange(
+  s = DeleteRange(
       leveldb_transaction,
       ObjectStoreMetaDataKey::Encode(database_id, object_store_id, 0),
       ObjectStoreMetaDataKey::EncodeMaxKey(database_id, object_store_id));
 
-  leveldb_transaction->Remove(
-      ObjectStoreNamesKey::Encode(database_id, object_store_name));
+  if (s.ok()) {
+    leveldb_transaction->Remove(
+        ObjectStoreNamesKey::Encode(database_id, object_store_name));
 
-  DeleteRange(leveldb_transaction,
-              IndexFreeListKey::Encode(database_id, object_store_id, 0),
-              IndexFreeListKey::EncodeMaxKey(database_id, object_store_id));
-  DeleteRange(leveldb_transaction,
-              IndexMetaDataKey::Encode(database_id, object_store_id, 0, 0),
-              IndexMetaDataKey::EncodeMaxKey(database_id, object_store_id));
+    s = DeleteRange(
+        leveldb_transaction,
+        IndexFreeListKey::Encode(database_id, object_store_id, 0),
+        IndexFreeListKey::EncodeMaxKey(database_id, object_store_id));
+  }
+
+  if (s.ok()) {
+    s = DeleteRange(
+        leveldb_transaction,
+        IndexMetaDataKey::Encode(database_id, object_store_id, 0, 0),
+        IndexMetaDataKey::EncodeMaxKey(database_id, object_store_id));
+  }
+
+  if (!s.ok()) {
+    INTERNAL_WRITE_ERROR_UNTESTED(DELETE_OBJECT_STORE);
+    return s;
+  }
 
   return ClearObjectStore(transaction, database_id, object_store_id);
 }
@@ -1382,7 +1470,8 @@
     int64 database_id,
     int64 object_store_id,
     const IndexedDBKey& key,
-    const IndexedDBValue& value,
+    IndexedDBValue& value,
+    ScopedVector<webkit_blob::BlobDataHandle>* handles,
     RecordIdentifier* record_identifier) {
   IDB_TRACE("IndexedDBBackingStore::PutRecord");
   if (!KeyPrefix::ValidIds(database_id, object_store_id))
@@ -1404,6 +1493,12 @@
   v.append(value.bits);
 
   leveldb_transaction->Put(object_store_data_key, &v);
+  transaction->PutBlobInfo(database_id,
+                           object_store_id,
+                           object_store_data_key,
+                           &value.blob_info,
+                           handles);
+  DCHECK(!handles->size());
 
   const std::string exists_entry_key =
       ExistsEntryKey::Encode(database_id, object_store_id, key);
@@ -1429,8 +1524,11 @@
   const std::string stop_key =
       KeyPrefix(database_id, object_store_id + 1).Encode();
 
-  DeleteRange(transaction->transaction(), start_key, stop_key);
-  return leveldb::Status::OK();
+  leveldb::Status s =
+      DeleteRange(transaction->transaction(), start_key, stop_key);
+  if (!s.ok())
+    INTERNAL_WRITE_ERROR(CLEAR_OBJECT_STORE);
+  return s;
 }
 
 leveldb::Status IndexedDBBackingStore::DeleteRecord(
@@ -1446,6 +1544,8 @@
   const std::string object_store_data_key = ObjectStoreDataKey::Encode(
       database_id, object_store_id, record_identifier.primary_key());
   leveldb_transaction->Remove(object_store_data_key);
+  transaction->PutBlobInfo(
+      database_id, object_store_id, object_store_data_key, NULL, NULL);
 
   const std::string exists_entry_key = ExistsEntryKey::Encode(
       database_id, object_store_id, record_identifier.primary_key());
@@ -1500,9 +1600,9 @@
   scoped_ptr<LevelDBIterator> it = leveldb_transaction->CreateIterator();
   int64 max_numeric_key = 0;
 
-  for (it->Seek(start_key);
-       it->IsValid() && CompareKeys(it->Key(), stop_key) < 0;
-       it->Next()) {
+  for (s = it->Seek(start_key);
+       s.ok() && it->IsValid() && CompareKeys(it->Key(), stop_key) < 0;
+       s = it->Next()) {
     StringPiece slice(it->Key());
     ObjectStoreDataKey data_key;
     if (!ObjectStoreDataKey::Decode(&slice, &data_key)) {
@@ -1517,7 +1617,11 @@
     }
   }
 
-  *key_generator_current_number = max_numeric_key + 1;
+  if (s.ok())
+    *key_generator_current_number = max_numeric_key + 1;
+  else
+    INTERNAL_READ_ERROR_UNTESTED(GET_KEY_GENERATOR_CURRENT_NUMBER);
+
   return s;
 }
 
@@ -1624,8 +1728,8 @@
   DCHECK(indexes->empty());
 
   scoped_ptr<LevelDBIterator> it = db_->CreateIterator();
-  it->Seek(start_key);
-  while (it->IsValid() && CompareKeys(it->Key(), stop_key) < 0) {
+  leveldb::Status s = it->Seek(start_key);
+  while (s.ok() && it->IsValid() && CompareKeys(it->Key(), stop_key) < 0) {
     StringPiece slice(it->Key());
     IndexMetaDataKey meta_data_key;
     bool ok = IndexMetaDataKey::Decode(&slice, &meta_data_key);
@@ -1634,7 +1738,9 @@
       INTERNAL_CONSISTENCY_ERROR_UNTESTED(GET_INDEXES);
       // Possible stale metadata due to http://webkit.org/b/85557 but don't fail
       // the load.
-      it->Next();
+      s = it->Next();
+      if (!s.ok())
+        break;
       continue;
     }
 
@@ -1648,7 +1754,9 @@
         INTERNAL_CONSISTENCY_ERROR_UNTESTED(GET_INDEXES);
     }
 
-    it->Next();  // unique flag
+    s = it->Next();  // unique flag
+    if (!s.ok())
+      break;
     if (!CheckIndexAndMetaDataKey(
              it.get(), stop_key, index_id, IndexMetaDataKey::UNIQUE)) {
       INTERNAL_CONSISTENCY_ERROR_UNTESTED(GET_INDEXES);
@@ -1661,7 +1769,9 @@
         INTERNAL_CONSISTENCY_ERROR_UNTESTED(GET_INDEXES);
     }
 
-    it->Next();  // key_path
+    s = it->Next();  // key_path
+    if (!s.ok())
+      break;
     if (!CheckIndexAndMetaDataKey(
              it.get(), stop_key, index_id, IndexMetaDataKey::KEY_PATH)) {
       INTERNAL_CONSISTENCY_ERROR_UNTESTED(GET_INDEXES);
@@ -1674,7 +1784,9 @@
         INTERNAL_CONSISTENCY_ERROR_UNTESTED(GET_INDEXES);
     }
 
-    it->Next();  // [optional] multi_entry flag
+    s = it->Next();  // [optional] multi_entry flag
+    if (!s.ok())
+      break;
     bool index_multi_entry = false;
     if (CheckIndexAndMetaDataKey(
             it.get(), stop_key, index_id, IndexMetaDataKey::MULTI_ENTRY)) {
@@ -1682,13 +1794,19 @@
       if (!DecodeBool(&slice, &index_multi_entry) || !slice.empty())
         INTERNAL_CONSISTENCY_ERROR_UNTESTED(GET_INDEXES);
 
-      it->Next();
+      s = it->Next();
+      if (!s.ok())
+        break;
     }
 
     (*indexes)[index_id] = IndexedDBIndexMetadata(
         index_name, index_id, key_path, index_unique, index_multi_entry);
   }
-  return leveldb::Status::OK();
+
+  if (!s.ok())
+    INTERNAL_READ_ERROR_UNTESTED(GET_INDEXES);
+
+  return s;
 }
 
 WARN_UNUSED_RESULT static leveldb::Status SetMaxIndexId(
@@ -1767,14 +1885,21 @@
       IndexMetaDataKey::Encode(database_id, object_store_id, index_id, 0);
   const std::string index_meta_data_end =
       IndexMetaDataKey::EncodeMaxKey(database_id, object_store_id, index_id);
-  DeleteRange(leveldb_transaction, index_meta_data_start, index_meta_data_end);
+  leveldb::Status s = DeleteRange(
+      leveldb_transaction, index_meta_data_start, index_meta_data_end);
 
-  const std::string index_data_start =
-      IndexDataKey::EncodeMinKey(database_id, object_store_id, index_id);
-  const std::string index_data_end =
-      IndexDataKey::EncodeMaxKey(database_id, object_store_id, index_id);
-  DeleteRange(leveldb_transaction, index_data_start, index_data_end);
-  return leveldb::Status::OK();
+  if (s.ok()) {
+    const std::string index_data_start =
+        IndexDataKey::EncodeMinKey(database_id, object_store_id, index_id);
+    const std::string index_data_end =
+        IndexDataKey::EncodeMaxKey(database_id, object_store_id, index_id);
+    s = DeleteRange(leveldb_transaction, index_data_start, index_data_end);
+  }
+
+  if (!s.ok())
+    INTERNAL_WRITE_ERROR_UNTESTED(DELETE_INDEX);
+
+  return s;
 }
 
 leveldb::Status IndexedDBBackingStore::PutIndexDataForRecord(
@@ -1810,19 +1935,22 @@
 
 static bool FindGreatestKeyLessThanOrEqual(LevelDBTransaction* transaction,
                                            const std::string& target,
-                                           std::string* found_key) {
+                                           std::string* found_key,
+                                           leveldb::Status& s) {
   scoped_ptr<LevelDBIterator> it = transaction->CreateIterator();
-  it->Seek(target);
+  s = it->Seek(target);
+  if (!s.ok())
+    return false;
 
   if (!it->IsValid()) {
-    it->SeekToLast();
-    if (!it->IsValid())
+    s = it->SeekToLast();
+    if (!s.ok() || !it->IsValid())
       return false;
   }
 
   while (CompareIndexKeys(it->Key(), target) > 0) {
-    it->Prev();
-    if (!it->IsValid())
+    s = it->Prev();
+    if (!s.ok() || !it->IsValid())
       return false;
   }
 
@@ -1830,8 +1958,8 @@
     *found_key = it->Key().as_string();
 
     // There can be several index keys that compare equal. We want the last one.
-    it->Next();
-  } while (it->IsValid() && !CompareIndexKeys(it->Key(), target));
+    s = it->Next();
+  } while (s.ok() && it->IsValid() && !CompareIndexKeys(it->Key(), target));
 
   return true;
 }
@@ -1880,7 +2008,11 @@
   const std::string leveldb_key =
       IndexDataKey::Encode(database_id, object_store_id, index_id, key);
   scoped_ptr<LevelDBIterator> it = leveldb_transaction->CreateIterator();
-  it->Seek(leveldb_key);
+  leveldb::Status s = it->Seek(leveldb_key);
+  if (!s.ok()) {
+    INTERNAL_READ_ERROR_UNTESTED(FIND_KEY_IN_INDEX);
+    return s;
+  }
 
   for (;;) {
     if (!it->IsValid())
@@ -1898,18 +2030,18 @@
     *found_encoded_primary_key = slice.as_string();
 
     bool exists = false;
-    leveldb::Status s = VersionExists(leveldb_transaction,
-                                      database_id,
-                                      object_store_id,
-                                      version,
-                                      *found_encoded_primary_key,
-                                      &exists);
+    s = VersionExists(leveldb_transaction,
+                      database_id,
+                      object_store_id,
+                      version,
+                      *found_encoded_primary_key,
+                      &exists);
     if (!s.ok())
       return s;
     if (!exists) {
       // Delete stale index data entry and continue.
       leveldb_transaction->Remove(it->Key());
-      it->Next();
+      s = it->Next();
       continue;
     }
     *found = true;
@@ -2008,7 +2140,8 @@
     iterator_ = transaction_->CreateIterator();
 
     if (other->iterator_->IsValid()) {
-      iterator_->Seek(other->iterator_->Key());
+      leveldb::Status s = iterator_->Seek(other->iterator_->Key());
+      // TODO(cmumford): Handle this error (crbug.com/363397)
       DCHECK(iterator_->IsValid());
     }
   }
@@ -2019,19 +2152,22 @@
     : transaction_(transaction), cursor_options_(cursor_options) {}
 IndexedDBBackingStore::Cursor::~Cursor() {}
 
-bool IndexedDBBackingStore::Cursor::FirstSeek() {
+bool IndexedDBBackingStore::Cursor::FirstSeek(leveldb::Status* s) {
   iterator_ = transaction_->CreateIterator();
   if (cursor_options_.forward)
-    iterator_->Seek(cursor_options_.low_key);
+    *s = iterator_->Seek(cursor_options_.low_key);
   else
-    iterator_->Seek(cursor_options_.high_key);
+    *s = iterator_->Seek(cursor_options_.high_key);
+  if (!s->ok())
+    return false;
 
-  return Continue(0, READY);
+  return Continue(0, READY, s);
 }
 
-bool IndexedDBBackingStore::Cursor::Advance(uint32 count) {
+bool IndexedDBBackingStore::Cursor::Advance(uint32 count, leveldb::Status* s) {
+  *s = leveldb::Status::OK();
   while (count--) {
-    if (!Continue())
+    if (!Continue(s))
       return false;
   }
   return true;
@@ -2039,9 +2175,11 @@
 
 bool IndexedDBBackingStore::Cursor::Continue(const IndexedDBKey* key,
                                              const IndexedDBKey* primary_key,
-                                             IteratorState next_state) {
+                                             IteratorState next_state,
+                                             leveldb::Status* s) {
   DCHECK(!key || key->IsValid());
   DCHECK(!primary_key || primary_key->IsValid());
+  *s = leveldb::Status::OK();
 
   // TODO(alecflett): avoid a copy here?
   IndexedDBKey previous_key = current_key_ ? *current_key_ : IndexedDBKey();
@@ -2065,13 +2203,15 @@
         } else {
           leveldb_key = EncodeKey(*key);
         }
-        iterator_->Seek(leveldb_key);
+        *s = iterator_->Seek(leveldb_key);
         first_iteration = false;
       } else if (forward) {
-        iterator_->Next();
+        *s = iterator_->Next();
       } else {
-        iterator_->Prev();
+        *s = iterator_->Prev();
       }
+      if (!s->ok())
+        return false;
     } else {
       next_state = SEEK;  // for subsequent iterations
     }
@@ -2553,6 +2693,8 @@
     cursor_options->low_open = range.lowerOpen();
   }
 
+  leveldb::Status s;
+
   if (!upper_bound) {
     cursor_options->high_key =
         ObjectStoreDataKey::Encode(database_id, object_store_id, MaxIDBKey());
@@ -2561,9 +2703,11 @@
       cursor_options->high_open = true;  // Not included.
     } else {
       // We need a key that exists.
+      // TODO(cmumford): Handle this error (crbug.com/363397)
       if (!FindGreatestKeyLessThanOrEqual(transaction,
                                           cursor_options->high_key,
-                                          &cursor_options->high_key))
+                                          &cursor_options->high_key,
+                                          s))
         return false;
       cursor_options->high_open = false;
     }
@@ -2575,8 +2719,9 @@
     if (!cursor_options->forward) {
       // For reverse cursors, we need a key that exists.
       std::string found_high_key;
+      // TODO(cmumford): Handle this error (crbug.com/363397)
       if (!FindGreatestKeyLessThanOrEqual(
-               transaction, cursor_options->high_key, &found_high_key))
+              transaction, cursor_options->high_key, &found_high_key, s))
         return false;
 
       // If the target key should not be included, but we end up with a smaller
@@ -2626,6 +2771,8 @@
     cursor_options->low_open = range.lowerOpen();
   }
 
+  leveldb::Status s;
+
   if (!upper_bound) {
     cursor_options->high_key =
         IndexDataKey::EncodeMaxKey(database_id, object_store_id, index_id);
@@ -2634,7 +2781,8 @@
     if (!cursor_options->forward) {  // We need a key that exists.
       if (!FindGreatestKeyLessThanOrEqual(transaction,
                                           cursor_options->high_key,
-                                          &cursor_options->high_key))
+                                          &cursor_options->high_key,
+                                          s))
         return false;
       cursor_options->high_open = false;
     }
@@ -2645,8 +2793,9 @@
 
     std::string found_high_key;
     // Seek to the *last* key in the set of non-unique keys
+    // TODO(cmumford): Handle this error (crbug.com/363397)
     if (!FindGreatestKeyLessThanOrEqual(
-             transaction, cursor_options->high_key, &found_high_key))
+            transaction, cursor_options->high_key, &found_high_key, s))
       return false;
 
     // If the target key should not be included, but we end up with a smaller
@@ -2667,8 +2816,10 @@
     int64 database_id,
     int64 object_store_id,
     const IndexedDBKeyRange& range,
-    indexed_db::CursorDirection direction) {
+    indexed_db::CursorDirection direction,
+    leveldb::Status* s) {
   IDB_TRACE("IndexedDBBackingStore::OpenObjectStoreCursor");
+  *s = leveldb::Status::OK();
   LevelDBTransaction* leveldb_transaction = transaction->transaction();
   IndexedDBBackingStore::Cursor::CursorOptions cursor_options;
   if (!ObjectStoreCursorOptions(leveldb_transaction,
@@ -2680,7 +2831,7 @@
     return scoped_ptr<IndexedDBBackingStore::Cursor>();
   scoped_ptr<ObjectStoreCursorImpl> cursor(
       new ObjectStoreCursorImpl(leveldb_transaction, cursor_options));
-  if (!cursor->FirstSeek())
+  if (!cursor->FirstSeek(s))
     return scoped_ptr<IndexedDBBackingStore::Cursor>();
 
   return cursor.PassAs<IndexedDBBackingStore::Cursor>();
@@ -2692,8 +2843,10 @@
     int64 database_id,
     int64 object_store_id,
     const IndexedDBKeyRange& range,
-    indexed_db::CursorDirection direction) {
+    indexed_db::CursorDirection direction,
+    leveldb::Status* s) {
   IDB_TRACE("IndexedDBBackingStore::OpenObjectStoreKeyCursor");
+  *s = leveldb::Status::OK();
   LevelDBTransaction* leveldb_transaction = transaction->transaction();
   IndexedDBBackingStore::Cursor::CursorOptions cursor_options;
   if (!ObjectStoreCursorOptions(leveldb_transaction,
@@ -2705,7 +2858,7 @@
     return scoped_ptr<IndexedDBBackingStore::Cursor>();
   scoped_ptr<ObjectStoreKeyCursorImpl> cursor(
       new ObjectStoreKeyCursorImpl(leveldb_transaction, cursor_options));
-  if (!cursor->FirstSeek())
+  if (!cursor->FirstSeek(s))
     return scoped_ptr<IndexedDBBackingStore::Cursor>();
 
   return cursor.PassAs<IndexedDBBackingStore::Cursor>();
@@ -2718,8 +2871,10 @@
     int64 object_store_id,
     int64 index_id,
     const IndexedDBKeyRange& range,
-    indexed_db::CursorDirection direction) {
+    indexed_db::CursorDirection direction,
+    leveldb::Status* s) {
   IDB_TRACE("IndexedDBBackingStore::OpenIndexKeyCursor");
+  *s = leveldb::Status::OK();
   LevelDBTransaction* leveldb_transaction = transaction->transaction();
   IndexedDBBackingStore::Cursor::CursorOptions cursor_options;
   if (!IndexCursorOptions(leveldb_transaction,
@@ -2732,7 +2887,7 @@
     return scoped_ptr<IndexedDBBackingStore::Cursor>();
   scoped_ptr<IndexKeyCursorImpl> cursor(
       new IndexKeyCursorImpl(leveldb_transaction, cursor_options));
-  if (!cursor->FirstSeek())
+  if (!cursor->FirstSeek(s))
     return scoped_ptr<IndexedDBBackingStore::Cursor>();
 
   return cursor.PassAs<IndexedDBBackingStore::Cursor>();
@@ -2745,7 +2900,8 @@
     int64 object_store_id,
     int64 index_id,
     const IndexedDBKeyRange& range,
-    indexed_db::CursorDirection direction) {
+    indexed_db::CursorDirection direction,
+    leveldb::Status* s) {
   IDB_TRACE("IndexedDBBackingStore::OpenIndexCursor");
   LevelDBTransaction* leveldb_transaction = transaction->transaction();
   IndexedDBBackingStore::Cursor::CursorOptions cursor_options;
@@ -2759,7 +2915,7 @@
     return scoped_ptr<IndexedDBBackingStore::Cursor>();
   scoped_ptr<IndexCursorImpl> cursor(
       new IndexCursorImpl(leveldb_transaction, cursor_options));
-  if (!cursor->FirstSeek())
+  if (!cursor->FirstSeek(s))
     return scoped_ptr<IndexedDBBackingStore::Cursor>();
 
   return cursor.PassAs<IndexedDBBackingStore::Cursor>();
@@ -2767,9 +2923,12 @@
 
 IndexedDBBackingStore::Transaction::Transaction(
     IndexedDBBackingStore* backing_store)
-    : backing_store_(backing_store) {}
+    : backing_store_(backing_store), database_id_(-1) {}
 
-IndexedDBBackingStore::Transaction::~Transaction() {}
+IndexedDBBackingStore::Transaction::~Transaction() {
+  STLDeleteContainerPairSecondPointers(
+      blob_change_map_.begin(), blob_change_map_.end());
+}
 
 void IndexedDBBackingStore::Transaction::Begin() {
   IDB_TRACE("IndexedDBBackingStore::Transaction::Begin");
@@ -2794,4 +2953,55 @@
   transaction_ = NULL;
 }
 
+IndexedDBBackingStore::Transaction::BlobChangeRecord::BlobChangeRecord(
+    const std::string& key, int64 object_store_id)
+    : key_(key), object_store_id_(object_store_id) {
+}
+
+IndexedDBBackingStore::Transaction::BlobChangeRecord::~BlobChangeRecord() {
+}
+
+void IndexedDBBackingStore::Transaction::BlobChangeRecord::SetBlobInfo(
+    std::vector<IndexedDBBlobInfo>* blob_info) {
+  blob_info_.clear();
+  if (blob_info)
+    blob_info_.swap(*blob_info);
+}
+
+void IndexedDBBackingStore::Transaction::BlobChangeRecord::SetHandles(
+    ScopedVector<webkit_blob::BlobDataHandle>* handles) {
+  handles_.clear();
+  if (handles)
+    handles_.swap(*handles);
+}
+
+// This is storing an info, even if empty, even if the previous key had no blob
+// info that we know of.  It duplicates a bunch of information stored in the
+// leveldb transaction, but only w.r.t. the user keys altered--we don't keep the
+// changes to exists or index keys here.
+void IndexedDBBackingStore::Transaction::PutBlobInfo(
+    int64 database_id,
+    int64 object_store_id,
+    const std::string& key,
+    std::vector<IndexedDBBlobInfo>* blob_info,
+    ScopedVector<webkit_blob::BlobDataHandle>* handles) {
+  DCHECK_GT(key.size(), 0UL);
+  if (database_id_ < 0)
+    database_id_ = database_id;
+  DCHECK_EQ(database_id_, database_id);
+
+  BlobChangeMap::iterator it = blob_change_map_.find(key);
+  BlobChangeRecord* record = NULL;
+  if (it == blob_change_map_.end()) {
+    record = new BlobChangeRecord(key, object_store_id);
+    blob_change_map_[key] = record;
+  } else {
+    record = it->second;
+  }
+  DCHECK_EQ(record->object_store_id(), object_store_id);
+  record->SetBlobInfo(blob_info);
+  record->SetHandles(handles);
+  DCHECK(!handles || !handles->size());
+}
+
 }  // namespace content
diff --git a/content/browser/indexed_db/indexed_db_backing_store.h b/content/browser/indexed_db/indexed_db_backing_store.h
index ed2e395..19f476e 100644
--- a/content/browser/indexed_db/indexed_db_backing_store.h
+++ b/content/browser/indexed_db/indexed_db_backing_store.h
@@ -5,6 +5,7 @@
 #ifndef CONTENT_BROWSER_INDEXED_DB_INDEXED_DB_BACKING_STORE_H_
 #define CONTENT_BROWSER_INDEXED_DB_INDEXED_DB_BACKING_STORE_H_
 
+#include <set>
 #include <string>
 #include <vector>
 
@@ -16,6 +17,7 @@
 #include "base/timer/timer.h"
 #include "content/browser/indexed_db/indexed_db.h"
 #include "content/browser/indexed_db/indexed_db_active_blob_registry.h"
+#include "content/browser/indexed_db/indexed_db_blob_info.h"
 #include "content/browser/indexed_db/indexed_db_metadata.h"
 #include "content/browser/indexed_db/leveldb/leveldb_iterator.h"
 #include "content/browser/indexed_db/leveldb/leveldb_transaction.h"
@@ -25,6 +27,7 @@
 #include "content/common/indexed_db/indexed_db_key_range.h"
 #include "third_party/leveldatabase/src/include/leveldb/status.h"
 #include "url/gurl.h"
+#include "webkit/browser/blob/blob_data_handle.h"
 
 namespace base {
 class TaskRunner;
@@ -95,9 +98,11 @@
       LevelDBFactory* level_db_factory,
       base::TaskRunner* task_runner);
 
+  void GrantChildProcessPermissions(int child_process_id);
+
   // Compact is public for testing.
   virtual void Compact();
-  virtual std::vector<base::string16> GetDatabaseNames();
+  virtual std::vector<base::string16> GetDatabaseNames(leveldb::Status*);
   virtual leveldb::Status GetIDBDatabaseMetaData(
       const base::string16& name,
       IndexedDBDatabaseMetadata* metadata,
@@ -166,7 +171,8 @@
       int64 database_id,
       int64 object_store_id,
       const IndexedDBKey& key,
-      const IndexedDBValue& value,
+      IndexedDBValue& value,
+      ScopedVector<webkit_blob::BlobDataHandle>* handles,
       RecordIdentifier* record) WARN_UNUSED_RESULT;
   virtual leveldb::Status ClearObjectStore(
       IndexedDBBackingStore::Transaction* transaction,
@@ -260,15 +266,18 @@
     };
 
     const IndexedDBKey& key() const { return *current_key_; }
-    bool Continue() { return Continue(NULL, NULL, SEEK); }
-    bool Continue(const IndexedDBKey* key, IteratorState state) {
-      return Continue(key, NULL, state);
+    bool Continue(leveldb::Status* s) { return Continue(NULL, NULL, SEEK, s); }
+    bool Continue(const IndexedDBKey* key,
+                  IteratorState state,
+                  leveldb::Status* s) {
+      return Continue(key, NULL, state, s);
     }
     bool Continue(const IndexedDBKey* key,
                   const IndexedDBKey* primary_key,
-                  IteratorState state);
-    bool Advance(uint32 count);
-    bool FirstSeek();
+                  IteratorState state,
+                  leveldb::Status*);
+    bool Advance(uint32 count, leveldb::Status*);
+    bool FirstSeek(leveldb::Status*);
 
     virtual Cursor* Clone() = 0;
     virtual const IndexedDBKey& primary_key() const;
@@ -300,27 +309,31 @@
       int64 database_id,
       int64 object_store_id,
       const IndexedDBKeyRange& key_range,
-      indexed_db::CursorDirection);
+      indexed_db::CursorDirection,
+      leveldb::Status*);
   virtual scoped_ptr<Cursor> OpenObjectStoreCursor(
       IndexedDBBackingStore::Transaction* transaction,
       int64 database_id,
       int64 object_store_id,
       const IndexedDBKeyRange& key_range,
-      indexed_db::CursorDirection);
+      indexed_db::CursorDirection,
+      leveldb::Status*);
   virtual scoped_ptr<Cursor> OpenIndexKeyCursor(
       IndexedDBBackingStore::Transaction* transaction,
       int64 database_id,
       int64 object_store_id,
       int64 index_id,
       const IndexedDBKeyRange& key_range,
-      indexed_db::CursorDirection);
+      indexed_db::CursorDirection,
+      leveldb::Status*);
   virtual scoped_ptr<Cursor> OpenIndexCursor(
       IndexedDBBackingStore::Transaction* transaction,
       int64 database_id,
       int64 object_store_id,
       int64 index_id,
       const IndexedDBKeyRange& key_range,
-      indexed_db::CursorDirection);
+      indexed_db::CursorDirection,
+      leveldb::Status*);
 
   class Transaction {
    public:
@@ -333,17 +346,43 @@
       backing_store_ = NULL;
       transaction_ = NULL;
     }
+    void PutBlobInfo(int64 database_id,
+                     int64 object_store_id,
+                     const std::string& key,
+                     std::vector<IndexedDBBlobInfo>*,
+                     ScopedVector<webkit_blob::BlobDataHandle>* handles);
 
     LevelDBTransaction* transaction() { return transaction_; }
 
    private:
+    class BlobChangeRecord {
+     public:
+      BlobChangeRecord(const std::string& key, int64 object_store_id);
+      ~BlobChangeRecord();
+      const std::string& key() const { return key_; }
+      int64 object_store_id() const { return object_store_id_; }
+      void SetBlobInfo(std::vector<IndexedDBBlobInfo>* blob_info);
+      std::vector<IndexedDBBlobInfo>& mutable_blob_info() { return blob_info_; }
+      void SetHandles(ScopedVector<webkit_blob::BlobDataHandle>* handles);
+
+     private:
+      std::string key_;
+      int64 object_store_id_;
+      std::vector<IndexedDBBlobInfo> blob_info_;
+      ScopedVector<webkit_blob::BlobDataHandle> handles_;
+    };
+    typedef std::map<std::string, BlobChangeRecord*> BlobChangeMap;
+
     IndexedDBBackingStore* backing_store_;
     scoped_refptr<LevelDBTransaction> transaction_;
+    BlobChangeMap blob_change_map_;
+    int64 database_id_;
   };
 
  protected:
   IndexedDBBackingStore(IndexedDBFactory* indexed_db_factory,
                         const GURL& origin_url,
+                        const base::FilePath& blob_path,
                         scoped_ptr<LevelDBDatabase> db,
                         scoped_ptr<LevelDBComparator> comparator,
                         base::TaskRunner* task_runner);
@@ -354,6 +393,7 @@
   static scoped_refptr<IndexedDBBackingStore> Create(
       IndexedDBFactory* indexed_db_factory,
       const GURL& origin_url,
+      const base::FilePath& blob_path,
       scoped_ptr<LevelDBDatabase> db,
       scoped_ptr<LevelDBComparator> comparator,
       base::TaskRunner* task_runner);
@@ -377,6 +417,7 @@
 
   IndexedDBFactory* indexed_db_factory_;
   const GURL origin_url_;
+  base::FilePath blob_path_;
 
   // The origin identifier is a key prefix unique to the origin used in the
   // leveldb backing store to partition data by origin. It is a normalized
@@ -386,6 +427,7 @@
   // provides for future flexibility.
   const std::string origin_identifier_;
   base::TaskRunner* task_runner_;
+  std::set<int> child_process_ids_granted_;
 
   scoped_ptr<LevelDBDatabase> db_;
   scoped_ptr<LevelDBComparator> comparator_;
diff --git a/content/browser/indexed_db/indexed_db_backing_store_unittest.cc b/content/browser/indexed_db/indexed_db_backing_store_unittest.cc
index 6885faa..8d73077 100644
--- a/content/browser/indexed_db/indexed_db_backing_store_unittest.cc
+++ b/content/browser/indexed_db/indexed_db_backing_store_unittest.cc
@@ -51,9 +51,10 @@
   {
     IndexedDBBackingStore::Transaction transaction1(backing_store_);
     transaction1.Begin();
+    ScopedVector<webkit_blob::BlobDataHandle> handles;
     IndexedDBBackingStore::RecordIdentifier record;
     leveldb::Status s = backing_store_->PutRecord(
-        &transaction1, 1, 1, m_key1, m_value1, &record);
+        &transaction1, 1, 1, m_key1, m_value1, &handles, &record);
     EXPECT_TRUE(s.ok());
     transaction1.Commit();
   }
@@ -86,12 +87,14 @@
   {
     IndexedDBBackingStore::Transaction transaction1(backing_store_);
     transaction1.Begin();
+    ScopedVector<webkit_blob::BlobDataHandle> handles;
     IndexedDBBackingStore::RecordIdentifier record;
     leveldb::Status s = backing_store_->PutRecord(&transaction1,
                                                   high_database_id,
                                                   high_object_store_id,
                                                   m_key1,
                                                   m_value1,
+                                                  &handles,
                                                   &record);
     EXPECT_TRUE(s.ok());
 
@@ -163,26 +166,29 @@
   IndexedDBBackingStore::Transaction transaction1(backing_store_);
   transaction1.Begin();
 
+  ScopedVector<webkit_blob::BlobDataHandle> handles;
   IndexedDBBackingStore::RecordIdentifier record;
   leveldb::Status s = backing_store_->PutRecord(&transaction1,
                                                 database_id,
                                                 KeyPrefix::kInvalidId,
                                                 m_key1,
                                                 m_value1,
+                                                &handles,
                                                 &record);
   EXPECT_FALSE(s.ok());
   s = backing_store_->PutRecord(
-      &transaction1, database_id, 0, m_key1, m_value1, &record);
+      &transaction1, database_id, 0, m_key1, m_value1, &handles, &record);
   EXPECT_FALSE(s.ok());
   s = backing_store_->PutRecord(&transaction1,
                                 KeyPrefix::kInvalidId,
                                 object_store_id,
                                 m_key1,
                                 m_value1,
+                                &handles,
                                 &record);
   EXPECT_FALSE(s.ok());
   s = backing_store_->PutRecord(
-      &transaction1, 0, object_store_id, m_key1, m_value1, &record);
+      &transaction1, 0, object_store_id, m_key1, m_value1, &handles, &record);
   EXPECT_FALSE(s.ok());
 
   s = backing_store_->GetRecord(
diff --git a/content/browser/indexed_db/indexed_db_browsertest.cc b/content/browser/indexed_db/indexed_db_browsertest.cc
index 6e8b40a..e69296e 100644
--- a/content/browser/indexed_db/indexed_db_browsertest.cc
+++ b/content/browser/indexed_db/indexed_db_browsertest.cc
@@ -473,7 +473,12 @@
 
 }  // namespace
 
-IN_PROC_BROWSER_TEST_F(IndexedDBBrowserTest, CorruptedOpenDatabase) {
+class IndexedDBBrowserCorruptionTest
+    : public IndexedDBBrowserTest,
+      public ::testing::WithParamInterface<const char*> {};
+
+IN_PROC_BROWSER_TEST_P(IndexedDBBrowserCorruptionTest,
+                       OperationOnCorruptedOpenDatabase) {
   ASSERT_TRUE(embedded_test_server()->Started() ||
               embedded_test_server()->InitializeAndWaitUntilReady());
   const GURL& origin_url = embedded_test_server()->base_url();
@@ -483,14 +488,20 @@
                  origin_url,
                  s_corrupt_db_test_prefix));
 
-  std::string test_file =
-      s_corrupt_db_test_prefix + "corrupted_open_db_detection.html";
+  std::string test_file = s_corrupt_db_test_prefix +
+                          "corrupted_open_db_detection.html#" + GetParam();
   SimpleTest(embedded_test_server()->GetURL(test_file));
 
   test_file = s_corrupt_db_test_prefix + "corrupted_open_db_recovery.html";
   SimpleTest(embedded_test_server()->GetURL(test_file));
 }
 
+INSTANTIATE_TEST_CASE_P(IndexedDBBrowserCorruptionTestInstantiation,
+                        IndexedDBBrowserCorruptionTest,
+                        ::testing::Values("get",
+                                          "iterate",
+                                          "clearObjectStore"));
+
 IN_PROC_BROWSER_TEST_F(IndexedDBBrowserTest, DeleteCompactsBackingStore) {
   const GURL test_url = GetTestUrl("indexeddb", "delete_compact.html");
   SimpleTest(GURL(test_url.spec() + "#fill"));
diff --git a/content/browser/indexed_db/indexed_db_callbacks.cc b/content/browser/indexed_db/indexed_db_callbacks.cc
index f4c3487..ad5551f 100644
--- a/content/browser/indexed_db/indexed_db_callbacks.cc
+++ b/content/browser/indexed_db/indexed_db_callbacks.cc
@@ -6,7 +6,14 @@
 
 #include <algorithm>
 
+#include "base/guid.h"
+#include "base/strings/utf_string_conversions.h"
+#include "base/time/time.h"
+#include "content/browser/child_process_security_policy_impl.h"
+#include "content/browser/fileapi/fileapi_message_filter.h"
+#include "content/browser/indexed_db/indexed_db_blob_info.h"
 #include "content/browser/indexed_db/indexed_db_connection.h"
+#include "content/browser/indexed_db/indexed_db_context_impl.h"
 #include "content/browser/indexed_db/indexed_db_cursor.h"
 #include "content/browser/indexed_db/indexed_db_database_callbacks.h"
 #include "content/browser/indexed_db/indexed_db_database_error.h"
@@ -14,7 +21,12 @@
 #include "content/browser/indexed_db/indexed_db_value.h"
 #include "content/common/indexed_db/indexed_db_constants.h"
 #include "content/common/indexed_db/indexed_db_messages.h"
+#include "webkit/browser/blob/blob_storage_context.h"
 #include "webkit/browser/quota/quota_manager.h"
+#include "webkit/common/blob/blob_data.h"
+#include "webkit/common/blob/shareable_file_reference.h"
+
+using webkit_blob::ShareableFileReference;
 
 namespace content {
 
@@ -169,6 +181,119 @@
   dispatcher_host_ = NULL;
 }
 
+static std::string CreateBlobData(
+    const IndexedDBBlobInfo& blob_info,
+    scoped_refptr<IndexedDBDispatcherHost> dispatcher_host,
+    webkit_blob::BlobStorageContext* blob_storage_context,
+    base::TaskRunner* task_runner) {
+  scoped_refptr<ShareableFileReference> shareable_file =
+      ShareableFileReference::Get(blob_info.file_path());
+  if (!shareable_file.get()) {
+    shareable_file = ShareableFileReference::GetOrCreate(
+        blob_info.file_path(),
+        ShareableFileReference::DONT_DELETE_ON_FINAL_RELEASE,
+        task_runner);
+    shareable_file->AddFinalReleaseCallback(blob_info.release_callback());
+  }
+
+  std::string uuid(base::GenerateGUID());
+  scoped_refptr<webkit_blob::BlobData> blob_data =
+      new webkit_blob::BlobData(uuid);
+  blob_data->AppendFile(
+      blob_info.file_path(), 0, blob_info.size(), blob_info.last_modified());
+  scoped_ptr<webkit_blob::BlobDataHandle> blob_data_handle(
+      blob_storage_context->AddFinishedBlob(blob_data.get()));
+  dispatcher_host->HoldBlobDataHandle(uuid, blob_data_handle);
+
+  return uuid;
+}
+
+static bool CreateAllBlobs(
+    const std::vector<IndexedDBBlobInfo>& blob_info,
+    std::vector<IndexedDBMsg_BlobOrFileInfo>* blob_or_file_info,
+    scoped_refptr<IndexedDBDispatcherHost> dispatcher_host) {
+  DCHECK_EQ(blob_info.size(), blob_or_file_info->size());
+  size_t i;
+  if (!dispatcher_host->blob_storage_context())
+    return false;
+  for (i = 0; i < blob_info.size(); ++i) {
+    (*blob_or_file_info)[i].uuid =
+        CreateBlobData(blob_info[i],
+                       dispatcher_host,
+                       dispatcher_host->blob_storage_context(),
+                       dispatcher_host->Context()->TaskRunner());
+  }
+  return true;
+}
+
+template <class ParamType, class MsgType>
+static void CreateBlobsAndSend(
+    ParamType* params,
+    scoped_refptr<IndexedDBDispatcherHost> dispatcher_host,
+    const std::vector<IndexedDBBlobInfo>& blob_info,
+    std::vector<IndexedDBMsg_BlobOrFileInfo>* blob_or_file_info) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+  if (CreateAllBlobs(blob_info, blob_or_file_info, dispatcher_host))
+    dispatcher_host->Send(new MsgType(*params));
+}
+
+static void BlobLookupForCursorPrefetch(
+    IndexedDBMsg_CallbacksSuccessCursorPrefetch_Params* params,
+    scoped_refptr<IndexedDBDispatcherHost> dispatcher_host,
+    const std::vector<IndexedDBValue>& values,
+    std::vector<std::vector<IndexedDBMsg_BlobOrFileInfo> >*
+        blob_or_file_infos) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+  DCHECK_EQ(values.size(), blob_or_file_infos->size());
+
+  std::vector<IndexedDBValue>::const_iterator value_iter;
+  std::vector<std::vector<IndexedDBMsg_BlobOrFileInfo> >::iterator blob_iter;
+  for (value_iter = values.begin(), blob_iter = blob_or_file_infos->begin();
+       value_iter != values.end();
+       ++value_iter, ++blob_iter) {
+    if (!CreateAllBlobs(value_iter->blob_info, &*blob_iter, dispatcher_host))
+      return;
+  }
+  dispatcher_host->Send(
+      new IndexedDBMsg_CallbacksSuccessCursorPrefetch(*params));
+}
+
+static void FillInBlobData(
+    const std::vector<IndexedDBBlobInfo>& blob_info,
+    std::vector<IndexedDBMsg_BlobOrFileInfo>* blob_or_file_info) {
+  for (std::vector<IndexedDBBlobInfo>::const_iterator iter = blob_info.begin();
+       iter != blob_info.end();
+       ++iter) {
+    if (iter->is_file()) {
+      IndexedDBMsg_BlobOrFileInfo info;
+      info.is_file = true;
+      info.mime_type = iter->type();
+      info.file_name = iter->file_name();
+      info.file_path = iter->file_path().AsUTF16Unsafe();
+      DCHECK_NE(-1, iter->size());
+      info.size = iter->size();
+      info.last_modified = iter->last_modified().ToDoubleT();
+      blob_or_file_info->push_back(info);
+    } else {
+      IndexedDBMsg_BlobOrFileInfo info;
+      info.mime_type = iter->type();
+      info.size = iter->size();
+      blob_or_file_info->push_back(info);
+    }
+  }
+}
+
+void IndexedDBCallbacks::RegisterBlobsAndSend(
+    const std::vector<IndexedDBBlobInfo>& blob_info,
+    const base::Closure& callback) {
+  std::vector<IndexedDBBlobInfo>::const_iterator iter;
+  for (iter = blob_info.begin(); iter != blob_info.end(); ++iter) {
+    iter->mark_used_callback().Run();
+  }
+  DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::IO));
+  BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, callback);
+}
+
 void IndexedDBCallbacks::OnSuccess(scoped_refptr<IndexedDBCursor> cursor,
                                    const IndexedDBKey& key,
                                    const IndexedDBKey& primary_key,
@@ -182,18 +307,32 @@
   DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_);
 
   int32 ipc_object_id = dispatcher_host_->Add(cursor.get());
-  IndexedDBMsg_CallbacksSuccessIDBCursor_Params params;
-  params.ipc_thread_id = ipc_thread_id_;
-  params.ipc_callbacks_id = ipc_callbacks_id_;
-  params.ipc_cursor_id = ipc_object_id;
-  params.key = key;
-  params.primary_key = primary_key;
+  scoped_ptr<IndexedDBMsg_CallbacksSuccessIDBCursor_Params> params(
+      new IndexedDBMsg_CallbacksSuccessIDBCursor_Params());
+  params->ipc_thread_id = ipc_thread_id_;
+  params->ipc_callbacks_id = ipc_callbacks_id_;
+  params->ipc_cursor_id = ipc_object_id;
+  params->key = key;
+  params->primary_key = primary_key;
   if (value && !value->empty())
-    std::swap(params.value, value->bits);
+    std::swap(params->value, value->bits);
   // TODO(alecflett): Avoid a copy here: the whole params object is
   // being copied into the message.
-  dispatcher_host_->Send(new IndexedDBMsg_CallbacksSuccessIDBCursor(params));
-
+  if (!value || value->blob_info.empty()) {
+    dispatcher_host_->Send(new IndexedDBMsg_CallbacksSuccessIDBCursor(*params));
+  } else {
+    IndexedDBMsg_CallbacksSuccessIDBCursor_Params* p = params.get();
+    FillInBlobData(value->blob_info, &p->blob_or_file_info);
+    RegisterBlobsAndSend(
+        value->blob_info,
+        base::Bind(
+            CreateBlobsAndSend<IndexedDBMsg_CallbacksSuccessIDBCursor_Params,
+                               IndexedDBMsg_CallbacksSuccessIDBCursor>,
+            base::Owned(params.release()),
+            dispatcher_host_,
+            value->blob_info,
+            base::Unretained(&p->blob_or_file_info)));
+  }
   dispatcher_host_ = NULL;
 }
 
@@ -214,25 +353,41 @@
   DCHECK(idb_cursor);
   if (!idb_cursor)
     return;
-  IndexedDBMsg_CallbacksSuccessCursorContinue_Params params;
-  params.ipc_thread_id = ipc_thread_id_;
-  params.ipc_callbacks_id = ipc_callbacks_id_;
-  params.ipc_cursor_id = ipc_cursor_id_;
-  params.key = key;
-  params.primary_key = primary_key;
+
+  scoped_ptr<IndexedDBMsg_CallbacksSuccessCursorContinue_Params> params(
+      new IndexedDBMsg_CallbacksSuccessCursorContinue_Params());
+  params->ipc_thread_id = ipc_thread_id_;
+  params->ipc_callbacks_id = ipc_callbacks_id_;
+  params->ipc_cursor_id = ipc_cursor_id_;
+  params->key = key;
+  params->primary_key = primary_key;
   if (value && !value->empty())
-    std::swap(params.value, value->bits);
+    std::swap(params->value, value->bits);
   // TODO(alecflett): Avoid a copy here: the whole params object is
   // being copied into the message.
-  dispatcher_host_->Send(
-      new IndexedDBMsg_CallbacksSuccessCursorContinue(params));
+  if (!value || value->blob_info.empty()) {
+    dispatcher_host_->Send(
+        new IndexedDBMsg_CallbacksSuccessCursorContinue(*params));
+  } else {
+    IndexedDBMsg_CallbacksSuccessCursorContinue_Params* p = params.get();
+    FillInBlobData(value->blob_info, &p->blob_or_file_info);
+    RegisterBlobsAndSend(
+        value->blob_info,
+        base::Bind(CreateBlobsAndSend<
+                       IndexedDBMsg_CallbacksSuccessCursorContinue_Params,
+                       IndexedDBMsg_CallbacksSuccessCursorContinue>,
+                   base::Owned(params.release()),
+                   dispatcher_host_,
+                   value->blob_info,
+                   base::Unretained(&p->blob_or_file_info)));
+  }
   dispatcher_host_ = NULL;
 }
 
 void IndexedDBCallbacks::OnSuccessWithPrefetch(
     const std::vector<IndexedDBKey>& keys,
     const std::vector<IndexedDBKey>& primary_keys,
-    const std::vector<IndexedDBValue>& values) {
+    std::vector<IndexedDBValue>& values) {
   DCHECK_EQ(keys.size(), primary_keys.size());
   DCHECK_EQ(keys.size(), values.size());
 
@@ -252,17 +407,48 @@
     msgPrimaryKeys.push_back(primary_keys[i]);
   }
 
-  IndexedDBMsg_CallbacksSuccessCursorPrefetch_Params params;
-  params.ipc_thread_id = ipc_thread_id_;
-  params.ipc_callbacks_id = ipc_callbacks_id_;
-  params.ipc_cursor_id = ipc_cursor_id_;
-  params.keys = msgKeys;
-  params.primary_keys = msgPrimaryKeys;
-  std::vector<IndexedDBValue>::const_iterator iter;
-  for (iter = values.begin(); iter != values.end(); ++iter)
-    params.values.push_back(iter->bits);
-  dispatcher_host_->Send(
-      new IndexedDBMsg_CallbacksSuccessCursorPrefetch(params));
+  scoped_ptr<IndexedDBMsg_CallbacksSuccessCursorPrefetch_Params> params(
+      new IndexedDBMsg_CallbacksSuccessCursorPrefetch_Params());
+  params->ipc_thread_id = ipc_thread_id_;
+  params->ipc_callbacks_id = ipc_callbacks_id_;
+  params->ipc_cursor_id = ipc_cursor_id_;
+  params->keys = msgKeys;
+  params->primary_keys = msgPrimaryKeys;
+  std::vector<std::string>& values_bits = params->values;
+  values_bits.resize(values.size());
+  std::vector<std::vector<IndexedDBMsg_BlobOrFileInfo> >& values_blob_infos =
+      params->blob_or_file_infos;
+  values_blob_infos.resize(values.size());
+
+  bool found_blob_info = false;
+  std::vector<IndexedDBValue>::iterator iter = values.begin();
+  for (size_t i = 0; iter != values.end(); ++iter, ++i) {
+    values_bits[i].swap(iter->bits);
+    if (iter->blob_info.size()) {
+      found_blob_info = true;
+      FillInBlobData(iter->blob_info, &values_blob_infos[i]);
+      std::vector<IndexedDBBlobInfo>::const_iterator blob_iter;
+      for (blob_iter = iter->blob_info.begin();
+           blob_iter != iter->blob_info.end();
+           ++blob_iter) {
+        blob_iter->mark_used_callback().Run();
+      }
+    }
+  }
+
+  if (found_blob_info) {
+    BrowserThread::PostTask(
+        BrowserThread::IO,
+        FROM_HERE,
+        base::Bind(BlobLookupForCursorPrefetch,
+                   base::Owned(params.release()),
+                   dispatcher_host_,
+                   values,
+                   base::Unretained(&params->blob_or_file_infos)));
+  } else {
+    dispatcher_host_->Send(
+        new IndexedDBMsg_CallbacksSuccessCursorPrefetch(*params.get()));
+  }
   dispatcher_host_ = NULL;
 }
 
@@ -277,34 +463,61 @@
   DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_);
   DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_);
 
-  IndexedDBMsg_CallbacksSuccessValueWithKey_Params params;
-  params.ipc_thread_id = ipc_thread_id_;
-  params.ipc_callbacks_id = ipc_callbacks_id_;
-  params.primary_key = key;
-  params.key_path = key_path;
+  scoped_ptr<IndexedDBMsg_CallbacksSuccessValueWithKey_Params> params(
+      new IndexedDBMsg_CallbacksSuccessValueWithKey_Params());
+  params->ipc_thread_id = ipc_thread_id_;
+  params->ipc_callbacks_id = ipc_callbacks_id_;
+  params->primary_key = key;
+  params->key_path = key_path;
   if (value && !value->empty())
-    std::swap(params.value, value->bits);
-
-  dispatcher_host_->Send(new IndexedDBMsg_CallbacksSuccessValueWithKey(params));
+    std::swap(params->value, value->bits);
+  if (!value || value->blob_info.empty()) {
+    dispatcher_host_->Send(
+        new IndexedDBMsg_CallbacksSuccessValueWithKey(*params));
+  } else {
+    IndexedDBMsg_CallbacksSuccessValueWithKey_Params* p = params.get();
+    FillInBlobData(value->blob_info, &p->blob_or_file_info);
+    RegisterBlobsAndSend(
+        value->blob_info,
+        base::Bind(
+            CreateBlobsAndSend<IndexedDBMsg_CallbacksSuccessValueWithKey_Params,
+                               IndexedDBMsg_CallbacksSuccessValueWithKey>,
+            base::Owned(params.release()),
+            dispatcher_host_,
+            value->blob_info,
+            base::Unretained(&p->blob_or_file_info)));
+  }
   dispatcher_host_ = NULL;
 }
 
 void IndexedDBCallbacks::OnSuccess(IndexedDBValue* value) {
   DCHECK(dispatcher_host_.get());
-
   DCHECK(kNoCursor == ipc_cursor_id_ || value == NULL);
   DCHECK_EQ(kNoTransaction, host_transaction_id_);
   DCHECK_EQ(kNoDatabase, ipc_database_id_);
   DCHECK_EQ(kNoDatabaseCallbacks, ipc_database_callbacks_id_);
   DCHECK_EQ(blink::WebIDBDataLossNone, data_loss_);
 
-  IndexedDBMsg_CallbacksSuccessValue_Params params;
-  params.ipc_thread_id = ipc_thread_id_;
-  params.ipc_callbacks_id = ipc_callbacks_id_;
+  scoped_ptr<IndexedDBMsg_CallbacksSuccessValue_Params> params(
+      new IndexedDBMsg_CallbacksSuccessValue_Params());
+  params->ipc_thread_id = ipc_thread_id_;
+  params->ipc_callbacks_id = ipc_callbacks_id_;
   if (value && !value->empty())
-    std::swap(params.value, value->bits);
-
-  dispatcher_host_->Send(new IndexedDBMsg_CallbacksSuccessValue(params));
+    std::swap(params->value, value->bits);
+  if (!value || value->blob_info.empty()) {
+    dispatcher_host_->Send(new IndexedDBMsg_CallbacksSuccessValue(*params));
+  } else {
+    IndexedDBMsg_CallbacksSuccessValue_Params* p = params.get();
+    FillInBlobData(value->blob_info, &p->blob_or_file_info);
+    RegisterBlobsAndSend(
+        value->blob_info,
+        base::Bind(CreateBlobsAndSend<IndexedDBMsg_CallbacksSuccessValue_Params,
+                                      IndexedDBMsg_CallbacksSuccessValue>,
+                   base::Owned(params.release()),
+                   dispatcher_host_,
+                   value->blob_info,
+                   base::Unretained(&p->blob_or_file_info)));
+  }
   dispatcher_host_ = NULL;
 }
 
diff --git a/content/browser/indexed_db/indexed_db_callbacks.h b/content/browser/indexed_db/indexed_db_callbacks.h
index 03fc615..1bf5c11 100644
--- a/content/browser/indexed_db/indexed_db_callbacks.h
+++ b/content/browser/indexed_db/indexed_db_callbacks.h
@@ -20,6 +20,7 @@
 #include "url/gurl.h"
 
 namespace content {
+class IndexedDBBlobInfo;
 class IndexedDBConnection;
 class IndexedDBCursor;
 class IndexedDBDatabase;
@@ -82,7 +83,7 @@
   virtual void OnSuccessWithPrefetch(
       const std::vector<IndexedDBKey>& keys,
       const std::vector<IndexedDBKey>& primary_keys,
-      const std::vector<IndexedDBValue>& values);
+      std::vector<IndexedDBValue>& values);
 
   // IndexedDBDatabase::Get (with key injection)
   virtual void OnSuccess(IndexedDBValue* value,
@@ -109,6 +110,9 @@
   virtual ~IndexedDBCallbacks();
 
  private:
+  void RegisterBlobsAndSend(const std::vector<IndexedDBBlobInfo>& blob_info,
+                            const base::Closure& callback);
+
   friend class base::RefCounted<IndexedDBCallbacks>;
 
   // Originally from IndexedDBCallbacks:
diff --git a/content/browser/indexed_db/indexed_db_cursor.cc b/content/browser/indexed_db/indexed_db_cursor.cc
index b32c7c2..9caf29d 100644
--- a/content/browser/indexed_db/indexed_db_cursor.cc
+++ b/content/browser/indexed_db/indexed_db_cursor.cc
@@ -60,7 +60,11 @@
     scoped_refptr<IndexedDBCallbacks> callbacks,
     IndexedDBTransaction* /*transaction*/) {
   IDB_TRACE("IndexedDBCursor::CursorAdvanceOperation");
-  if (!cursor_ || !cursor_->Advance(count)) {
+  leveldb::Status s;
+  // TODO(cmumford): Handle this error (crbug.com/363397). Although this will
+  //                 properly fail, caller will not know why, and any corruption
+  //                 will be ignored.
+  if (!cursor_ || !cursor_->Advance(count, &s)) {
     cursor_.reset();
     callbacks->OnSuccess(static_cast<IndexedDBValue*>(NULL));
     return;
@@ -75,9 +79,14 @@
     scoped_refptr<IndexedDBCallbacks> callbacks,
     IndexedDBTransaction* /*transaction*/) {
   IDB_TRACE("IndexedDBCursor::CursorIterationOperation");
-  if (!cursor_ ||
-      !cursor_->Continue(
-           key.get(), primary_key.get(), IndexedDBBackingStore::Cursor::SEEK)) {
+  leveldb::Status s;
+  // TODO(cmumford): Handle this error (crbug.com/363397). Although this will
+  //                 properly fail, caller will not know why, and any corruption
+  //                 will be ignored.
+  if (!cursor_ || !cursor_->Continue(key.get(),
+                                     primary_key.get(),
+                                     IndexedDBBackingStore::Cursor::SEEK,
+                                     &s) || !s.ok()) {
     cursor_.reset();
     callbacks->OnSuccess(static_cast<IndexedDBValue*>(NULL));
     return;
@@ -112,9 +121,13 @@
   saved_cursor_.reset();
   const size_t max_size_estimate = 10 * 1024 * 1024;
   size_t size_estimate = 0;
+  leveldb::Status s;
 
+  // TODO(cmumford): Handle this error (crbug.com/363397). Although this will
+  //                 properly fail, caller will not know why, and any corruption
+  //                 will be ignored.
   for (int i = 0; i < number_to_fetch; ++i) {
-    if (!cursor_ || !cursor_->Continue()) {
+    if (!cursor_ || !cursor_->Continue(&s)) {
       cursor_.reset();
       break;
     }
@@ -158,22 +171,25 @@
       found_keys, found_primary_keys, found_values);
 }
 
-void IndexedDBCursor::PrefetchReset(int used_prefetches,
-                                    int /* unused_prefetches */) {
+leveldb::Status IndexedDBCursor::PrefetchReset(int used_prefetches,
+                                               int /* unused_prefetches */) {
   IDB_TRACE("IndexedDBCursor::PrefetchReset");
   cursor_.swap(saved_cursor_);
   saved_cursor_.reset();
+  leveldb::Status s;
 
   if (closed_)
-    return;
+    return s;
   if (cursor_) {
     // First prefetched result is always used.
     DCHECK_GT(used_prefetches, 0);
     for (int i = 0; i < used_prefetches - 1; ++i) {
-      bool ok = cursor_->Continue();
+      bool ok = cursor_->Continue(&s);
       DCHECK(ok);
     }
   }
+
+  return s;
 }
 
 void IndexedDBCursor::Close() {
diff --git a/content/browser/indexed_db/indexed_db_cursor.h b/content/browser/indexed_db/indexed_db_cursor.h
index d6d1d79..4c1ec0c 100644
--- a/content/browser/indexed_db/indexed_db_cursor.h
+++ b/content/browser/indexed_db/indexed_db_cursor.h
@@ -32,7 +32,7 @@
                 scoped_refptr<IndexedDBCallbacks> callbacks);
   void PrefetchContinue(int number_to_fetch,
                         scoped_refptr<IndexedDBCallbacks> callbacks);
-  void PrefetchReset(int used_prefetches, int unused_prefetches);
+  leveldb::Status PrefetchReset(int used_prefetches, int unused_prefetches);
 
   const IndexedDBKey& key() const { return cursor_->key(); }
   const IndexedDBKey& primary_key() const { return cursor_->primary_key(); }
diff --git a/content/browser/indexed_db/indexed_db_database.cc b/content/browser/indexed_db/indexed_db_database.cc
index 6b090dd..1d9ccbb 100644
--- a/content/browser/indexed_db/indexed_db_database.cc
+++ b/content/browser/indexed_db/indexed_db_database.cc
@@ -10,9 +10,11 @@
 #include "base/auto_reset.h"
 #include "base/logging.h"
 #include "base/memory/scoped_ptr.h"
+#include "base/memory/scoped_vector.h"
 #include "base/stl_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/utf_string_conversions.h"
+#include "content/browser/indexed_db/indexed_db_blob_info.h"
 #include "content/browser/indexed_db/indexed_db_connection.h"
 #include "content/browser/indexed_db/indexed_db_context_impl.h"
 #include "content/browser/indexed_db/indexed_db_cursor.h"
@@ -25,6 +27,7 @@
 #include "content/common/indexed_db/indexed_db_key_path.h"
 #include "content/common/indexed_db/indexed_db_key_range.h"
 #include "third_party/WebKit/public/platform/WebIDBDatabaseException.h"
+#include "webkit/browser/blob/blob_data_handle.h"
 
 using base::ASCIIToUTF16;
 using base::Int64ToString16;
@@ -92,12 +95,15 @@
     const base::string16& name,
     IndexedDBBackingStore* backing_store,
     IndexedDBFactory* factory,
-    const Identifier& unique_identifier) {
+    const Identifier& unique_identifier,
+    leveldb::Status* s) {
   scoped_refptr<IndexedDBDatabase> database =
       new IndexedDBDatabase(name, backing_store, factory, unique_identifier);
-  if (!database->OpenInternal().ok())
-    return 0;
-  return database;
+  *s = database->OpenInternal();
+  if (s->ok())
+    return database;
+  else
+    return NULL;
 }
 
 namespace {
@@ -192,9 +198,7 @@
   scoped_ptr<IndexedDBConnection> connection(
       new IndexedDBConnection(this, database_callbacks));
   connections_.insert(connection.get());
-  /* TODO(ericu):  Grant child process permissions here so that the connection
-   * can create Blobs.
-  */
+  backing_store_->GrantChildProcessPermissions(child_process_id);
   return connection.Pass();
 }
 
@@ -473,6 +477,7 @@
 void IndexedDBDatabase::Abort(int64 transaction_id) {
   // If the transaction is unknown, then it has already been aborted by the
   // backend before this call so it is safe to ignore it.
+  IDB_TRACE("IndexedDBDatabase::Abort");
   IndexedDBTransaction* transaction = GetTransaction(transaction_id);
   if (transaction)
     transaction->Abort();
@@ -480,6 +485,7 @@
 
 void IndexedDBDatabase::Abort(int64 transaction_id,
                               const IndexedDBDatabaseError& error) {
+  IDB_TRACE("IndexedDBDatabase::Abort");
   // If the transaction is unknown, then it has already been aborted by the
   // backend before this call so it is safe to ignore it.
   IndexedDBTransaction* transaction = GetTransaction(transaction_id);
@@ -527,6 +533,7 @@
 
   const IndexedDBKey* key;
 
+  leveldb::Status s;
   scoped_ptr<IndexedDBBackingStore::Cursor> backing_store_cursor;
   if (key_range->IsOnlyKey()) {
     key = &key_range->lower();
@@ -539,7 +546,8 @@
           id(),
           object_store_id,
           *key_range,
-          indexed_db::CURSOR_NEXT);
+          indexed_db::CURSOR_NEXT,
+          &s);
     } else if (cursor_type == indexed_db::CURSOR_KEY_ONLY) {
       // Index Value Retrieval Operation
       backing_store_cursor = backing_store_->OpenIndexKeyCursor(
@@ -548,7 +556,8 @@
           object_store_id,
           index_id,
           *key_range,
-          indexed_db::CURSOR_NEXT);
+          indexed_db::CURSOR_NEXT,
+          &s);
     } else {
       // Index Referenced Value Retrieval Operation
       backing_store_cursor = backing_store_->OpenIndexCursor(
@@ -557,7 +566,18 @@
           object_store_id,
           index_id,
           *key_range,
-          indexed_db::CURSOR_NEXT);
+          indexed_db::CURSOR_NEXT,
+          &s);
+    }
+
+    if (!s.ok()) {
+      DLOG(ERROR) << "Unable to open cursor operation: " << s.ToString();
+      IndexedDBDatabaseError error(blink::WebIDBDatabaseExceptionUnknownError,
+                                   "Internal error deleting data in range");
+      if (s.IsCorruption()) {
+        factory_->HandleBackingStoreCorruption(backing_store_->origin_url(),
+                                               error);
+      }
     }
 
     if (!backing_store_cursor) {
@@ -569,7 +589,6 @@
   }
 
   scoped_ptr<IndexedDBKey> primary_key;
-  leveldb::Status s;
   if (index_id == IndexedDBIndexMetadata::kInvalidId) {
     // Object Store Retrieval Operation
     IndexedDBValue value;
@@ -702,6 +721,7 @@
   PutOperationParams() {}
   int64 object_store_id;
   IndexedDBValue value;
+  ScopedVector<webkit_blob::BlobDataHandle> handles;
   scoped_ptr<IndexedDBKey> key;
   IndexedDBDatabase::PutMode put_mode;
   scoped_refptr<IndexedDBCallbacks> callbacks;
@@ -714,6 +734,7 @@
 void IndexedDBDatabase::Put(int64 transaction_id,
                             int64 object_store_id,
                             IndexedDBValue* value,
+                            ScopedVector<webkit_blob::BlobDataHandle>* handles,
                             scoped_ptr<IndexedDBKey> key,
                             PutMode put_mode,
                             scoped_refptr<IndexedDBCallbacks> callbacks,
@@ -728,9 +749,11 @@
     return;
 
   DCHECK(key);
+  DCHECK(value);
   scoped_ptr<PutOperationParams> params(new PutOperationParams());
   params->object_store_id = object_store_id;
   params->value.swap(*value);
+  params->handles.swap(*handles);
   params->key = key.Pass();
   params->put_mode = put_mode;
   params->callbacks = callbacks;
@@ -830,6 +853,7 @@
                                 params->object_store_id,
                                 *key,
                                 params->value,
+                                &params->handles,
                                 &record_identifier);
   if (!s.ok()) {
     IndexedDBDatabaseError error(
@@ -1030,6 +1054,7 @@
   if (params->task_type == IndexedDBDatabase::PREEMPTIVE_TASK)
     transaction->AddPreemptiveEvent();
 
+  leveldb::Status s;
   scoped_ptr<IndexedDBBackingStore::Cursor> backing_store_cursor;
   if (params->index_id == IndexedDBIndexMetadata::kInvalidId) {
     if (params->cursor_type == indexed_db::CURSOR_KEY_ONLY) {
@@ -1039,14 +1064,16 @@
           id(),
           params->object_store_id,
           *params->key_range,
-          params->direction);
+          params->direction,
+          &s);
     } else {
       backing_store_cursor = backing_store_->OpenObjectStoreCursor(
           transaction->BackingStoreTransaction(),
           id(),
           params->object_store_id,
           *params->key_range,
-        params->direction);
+          params->direction,
+          &s);
     }
   } else {
     DCHECK_EQ(params->task_type, IndexedDBDatabase::NORMAL_TASK);
@@ -1057,7 +1084,8 @@
           params->object_store_id,
           params->index_id,
           *params->key_range,
-          params->direction);
+          params->direction,
+          &s);
     } else {
       backing_store_cursor = backing_store_->OpenIndexCursor(
           transaction->BackingStoreTransaction(),
@@ -1065,11 +1093,23 @@
           params->object_store_id,
           params->index_id,
           *params->key_range,
-          params->direction);
+          params->direction,
+          &s);
+    }
+  }
+
+  if (!s.ok()) {
+    DLOG(ERROR) << "Unable to open cursor operation: " << s.ToString();
+    IndexedDBDatabaseError error(blink::WebIDBDatabaseExceptionUnknownError,
+                                 "Internal error opening cursor operation");
+    if (s.IsCorruption()) {
+      factory_->HandleBackingStoreCorruption(backing_store_->origin_url(),
+                                             error);
     }
   }
 
   if (!backing_store_cursor) {
+    // Why is Success being called?
     params->callbacks->OnSuccess(static_cast<IndexedDBValue*>(NULL));
     return;
   }
@@ -1114,13 +1154,15 @@
   uint32 count = 0;
   scoped_ptr<IndexedDBBackingStore::Cursor> backing_store_cursor;
 
+  leveldb::Status s;
   if (index_id == IndexedDBIndexMetadata::kInvalidId) {
     backing_store_cursor = backing_store_->OpenObjectStoreKeyCursor(
         transaction->BackingStoreTransaction(),
         id(),
         object_store_id,
         *key_range,
-        indexed_db::CURSOR_NEXT);
+        indexed_db::CURSOR_NEXT,
+        &s);
   } else {
     backing_store_cursor = backing_store_->OpenIndexKeyCursor(
         transaction->BackingStoreTransaction(),
@@ -1128,7 +1170,17 @@
         object_store_id,
         index_id,
         *key_range,
-        indexed_db::CURSOR_NEXT);
+        indexed_db::CURSOR_NEXT,
+        &s);
+  }
+  if (!s.ok()) {
+    DLOG(ERROR) << "Unable perform count operation: " << s.ToString();
+    IndexedDBDatabaseError error(blink::WebIDBDatabaseExceptionUnknownError,
+                                 "Internal error performing count operation");
+    if (s.IsCorruption()) {
+      factory_->HandleBackingStoreCorruption(backing_store_->origin_url(),
+                                             error);
+    }
   }
   if (!backing_store_cursor) {
     callbacks->OnSuccess(count);
@@ -1137,7 +1189,9 @@
 
   do {
     ++count;
-  } while (backing_store_cursor->Continue());
+  } while (backing_store_cursor->Continue(&s));
+
+  // TODO(cmumford): Check for database corruption.
 
   callbacks->OnSuccess(count);
 }
@@ -1169,14 +1223,16 @@
     scoped_refptr<IndexedDBCallbacks> callbacks,
     IndexedDBTransaction* transaction) {
   IDB_TRACE("IndexedDBDatabase::DeleteRangeOperation");
+  leveldb::Status s;
   scoped_ptr<IndexedDBBackingStore::Cursor> backing_store_cursor =
       backing_store_->OpenObjectStoreCursor(
           transaction->BackingStoreTransaction(),
           id(),
           object_store_id,
           *key_range,
-          indexed_db::CURSOR_NEXT);
-  if (backing_store_cursor) {
+          indexed_db::CURSOR_NEXT,
+          &s);
+  if (backing_store_cursor && s.ok()) {
     do {
       if (!backing_store_->DeleteRecord(
                                transaction->BackingStoreTransaction(),
@@ -1189,7 +1245,18 @@
                                    "Internal error deleting data in range"));
         return;
       }
-    } while (backing_store_cursor->Continue());
+    } while (backing_store_cursor->Continue(&s));
+  }
+
+  if (!s.ok()) {
+    IndexedDBDatabaseError error(blink::WebIDBDatabaseExceptionUnknownError,
+                                 ASCIIToUTF16("Internal error deleting range"));
+    transaction->Abort(error);
+    if (s.IsCorruption()) {
+      factory_->HandleBackingStoreCorruption(backing_store_->origin_url(),
+                                             error);
+    }
+    return;
   }
 
   callbacks->OnSuccess();
@@ -1216,12 +1283,16 @@
     scoped_refptr<IndexedDBCallbacks> callbacks,
     IndexedDBTransaction* transaction) {
   IDB_TRACE("IndexedDBDatabase::ObjectStoreClearOperation");
-  if (!backing_store_->ClearObjectStore(transaction->BackingStoreTransaction(),
-                                        id(),
-                                        object_store_id).ok()) {
-    callbacks->OnError(
-        IndexedDBDatabaseError(blink::WebIDBDatabaseExceptionUnknownError,
-                               "Internal error clearing object store"));
+  leveldb::Status s = backing_store_->ClearObjectStore(
+      transaction->BackingStoreTransaction(), id(), object_store_id);
+  if (!s.ok()) {
+    IndexedDBDatabaseError error(blink::WebIDBDatabaseExceptionUnknownError,
+                                 "Internal error clearing object store");
+    callbacks->OnError(error);
+    if (s.IsCorruption()) {
+      factory_->HandleBackingStoreCorruption(backing_store_->origin_url(),
+                                             error);
+    }
     return;
   }
   callbacks->OnSuccess();
@@ -1385,6 +1456,7 @@
     const std::vector<int64>& object_store_ids,
     uint16 mode) {
 
+  IDB_TRACE("IndexedDBDatabase::CreateTransaction");
   DCHECK(connections_.count(connection));
   DCHECK(transactions_.find(transaction_id) == transactions_.end());
   if (transactions_.find(transaction_id) != transactions_.end())
@@ -1627,6 +1699,7 @@
   DCHECK(connection->IsConnected());
   DCHECK(connection->database() == this);
 
+  IDB_TRACE("IndexedDBDatabase::Close");
   // Abort outstanding transactions from the closing connection. This
   // can not happen if the close is requested by the connection itself
   // as the front-end defers the close until all transactions are
diff --git a/content/browser/indexed_db/indexed_db_database.h b/content/browser/indexed_db/indexed_db_database.h
index 16fe79f..a6e30f3 100644
--- a/content/browser/indexed_db/indexed_db_database.h
+++ b/content/browser/indexed_db/indexed_db_database.h
@@ -24,6 +24,7 @@
 
 namespace content {
 
+class IndexedDBBlobInfo;
 class IndexedDBConnection;
 class IndexedDBDatabaseCallbacks;
 class IndexedDBFactory;
@@ -60,7 +61,8 @@
       const base::string16& name,
       IndexedDBBackingStore* backing_store,
       IndexedDBFactory* factory,
-      const Identifier& unique_identifier);
+      const Identifier& unique_identifier,
+      leveldb::Status* s);
 
   const Identifier& identifier() const { return identifier_; }
   IndexedDBBackingStore* backing_store() { return backing_store_.get(); }
@@ -128,6 +130,7 @@
   void Put(int64 transaction_id,
            int64 object_store_id,
            IndexedDBValue* value,
+           ScopedVector<webkit_blob::BlobDataHandle>* handles,
            scoped_ptr<IndexedDBKey> key,
            PutMode mode,
            scoped_refptr<IndexedDBCallbacks> callbacks,
diff --git a/content/browser/indexed_db/indexed_db_database_unittest.cc b/content/browser/indexed_db/indexed_db_database_unittest.cc
index 5b1e73c..33ba330 100644
--- a/content/browser/indexed_db/indexed_db_database_unittest.cc
+++ b/content/browser/indexed_db/indexed_db_database_unittest.cc
@@ -35,11 +35,14 @@
   EXPECT_TRUE(backing_store->HasOneRef());
 
   IndexedDBFactory* factory = 0;
-  scoped_refptr<IndexedDBDatabase> db = IndexedDBDatabase::Create(
-      ASCIIToUTF16("db"),
-      backing_store,
-      factory,
-      IndexedDBDatabase::Identifier());
+  leveldb::Status s;
+  scoped_refptr<IndexedDBDatabase> db =
+      IndexedDBDatabase::Create(ASCIIToUTF16("db"),
+                                backing_store,
+                                factory,
+                                IndexedDBDatabase::Identifier(),
+                                &s);
+  ASSERT_TRUE(s.ok());
   EXPECT_FALSE(backing_store->HasOneRef());  // local and db
   db = NULL;
   EXPECT_TRUE(backing_store->HasOneRef());  // local
@@ -51,12 +54,14 @@
   EXPECT_TRUE(backing_store->HasOneRef());  // local
 
   IndexedDBFactory* factory = 0;
+  leveldb::Status s;
   scoped_refptr<IndexedDBDatabase> db =
       IndexedDBDatabase::Create(ASCIIToUTF16("db"),
                                 backing_store,
                                 factory,
-                                IndexedDBDatabase::Identifier());
-
+                                IndexedDBDatabase::Identifier(),
+                                &s);
+  ASSERT_TRUE(s.ok());
   EXPECT_FALSE(backing_store->HasOneRef());  // local and db
 
   scoped_refptr<MockIndexedDBCallbacks> request1(new MockIndexedDBCallbacks());
@@ -107,12 +112,14 @@
   EXPECT_TRUE(backing_store->HasOneRef());
 
   IndexedDBFactory* factory = 0;
+  leveldb::Status s;
   scoped_refptr<IndexedDBDatabase> database =
       IndexedDBDatabase::Create(ASCIIToUTF16("db"),
                                 backing_store,
                                 factory,
-                                IndexedDBDatabase::Identifier());
-
+                                IndexedDBDatabase::Identifier(),
+                                &s);
+  ASSERT_TRUE(s.ok());
   EXPECT_FALSE(backing_store->HasOneRef());  // local and db
 
   scoped_refptr<MockIndexedDBDatabaseCallbacks> callbacks(
@@ -168,12 +175,14 @@
   EXPECT_TRUE(backing_store->HasOneRef());  // local
 
   IndexedDBFactory* factory = 0;
+  leveldb::Status s;
   scoped_refptr<IndexedDBDatabase> db =
       IndexedDBDatabase::Create(ASCIIToUTF16("db"),
                                 backing_store,
                                 factory,
-                                IndexedDBDatabase::Identifier());
-
+                                IndexedDBDatabase::Identifier(),
+                                &s);
+  ASSERT_TRUE(s.ok());
   EXPECT_FALSE(backing_store->HasOneRef());  // local and db
 
   scoped_refptr<MockIndexedDBCallbacks> request1(new MockIndexedDBCallbacks());
diff --git a/content/browser/indexed_db/indexed_db_dispatcher_host.cc b/content/browser/indexed_db/indexed_db_dispatcher_host.cc
index 5366443..1f4c034 100644
--- a/content/browser/indexed_db/indexed_db_dispatcher_host.cc
+++ b/content/browser/indexed_db/indexed_db_dispatcher_host.cc
@@ -7,9 +7,11 @@
 #include "base/bind.h"
 #include "base/command_line.h"
 #include "base/files/file_path.h"
+#include "base/memory/scoped_vector.h"
 #include "base/process/process.h"
 #include "base/stl_util.h"
 #include "base/strings/utf_string_conversions.h"
+#include "content/browser/child_process_security_policy_impl.h"
 #include "content/browser/indexed_db/indexed_db_callbacks.h"
 #include "content/browser/indexed_db/indexed_db_connection.h"
 #include "content/browser/indexed_db/indexed_db_context_impl.h"
@@ -116,7 +118,8 @@
 
 base::TaskRunner* IndexedDBDispatcherHost::OverrideTaskRunnerForMessage(
     const IPC::Message& message) {
-  if (IPC_MESSAGE_CLASS(message) == IndexedDBMsgStart)
+  if (IPC_MESSAGE_CLASS(message) == IndexedDBMsgStart &&
+      message.type() != IndexedDBHostMsg_DatabasePut::ID)
     return indexed_db_context_->TaskRunner();
   return NULL;
 }
@@ -126,7 +129,8 @@
   if (IPC_MESSAGE_CLASS(message) != IndexedDBMsgStart)
     return false;
 
-  DCHECK(indexed_db_context_->TaskRunner()->RunsTasksOnCurrentThread());
+  DCHECK(indexed_db_context_->TaskRunner()->RunsTasksOnCurrentThread() ||
+         message.type() == IndexedDBHostMsg_DatabasePut::ID);
 
   bool handled =
       database_dispatcher_host_->OnMessageReceived(message, message_was_ok) ||
@@ -334,6 +338,14 @@
       indexed_db_path);
 }
 
+// OnPutHelper exists only to allow us to hop threads while holding a reference
+// to the IndexedDBDispatcherHost.
+void IndexedDBDispatcherHost::OnPutHelper(
+    const IndexedDBHostMsg_DatabasePut_Params& params,
+    std::vector<webkit_blob::BlobDataHandle*> handles) {
+  database_dispatcher_host_->OnPut(params, handles);
+}
+
 void IndexedDBDispatcherHost::OnAckReceivedBlobs(
     const std::vector<std::string>& uuids) {
   DCHECK(indexed_db_context_->TaskRunner()->RunsTasksOnCurrentThread());
@@ -451,8 +463,11 @@
 bool IndexedDBDispatcherHost::DatabaseDispatcherHost::OnMessageReceived(
     const IPC::Message& message,
     bool* msg_is_ok) {
+
   DCHECK(
+      (message.type() == IndexedDBHostMsg_DatabasePut::ID) ||
       parent_->indexed_db_context_->TaskRunner()->RunsTasksOnCurrentThread());
+
   bool handled = true;
   IPC_BEGIN_MESSAGE_MAP_EX(
       IndexedDBDispatcherHost::DatabaseDispatcherHost, message, *msg_is_ok)
@@ -465,7 +480,7 @@
     IPC_MESSAGE_HANDLER(IndexedDBHostMsg_DatabaseClose, OnClose)
     IPC_MESSAGE_HANDLER(IndexedDBHostMsg_DatabaseDestroyed, OnDestroyed)
     IPC_MESSAGE_HANDLER(IndexedDBHostMsg_DatabaseGet, OnGet)
-    IPC_MESSAGE_HANDLER(IndexedDBHostMsg_DatabasePut, OnPut)
+    IPC_MESSAGE_HANDLER(IndexedDBHostMsg_DatabasePut, OnPutWrapper)
     IPC_MESSAGE_HANDLER(IndexedDBHostMsg_DatabaseSetIndexKeys, OnSetIndexKeys)
     IPC_MESSAGE_HANDLER(IndexedDBHostMsg_DatabaseSetIndexesReady,
                         OnSetIndexesReady)
@@ -479,6 +494,7 @@
     IPC_MESSAGE_HANDLER(IndexedDBHostMsg_DatabaseCommit, OnCommit)
     IPC_MESSAGE_UNHANDLED(handled = false)
   IPC_END_MESSAGE_MAP()
+
   return handled;
 }
 
@@ -588,11 +604,31 @@
       callbacks);
 }
 
-void IndexedDBDispatcherHost::DatabaseDispatcherHost::OnPut(
+void IndexedDBDispatcherHost::DatabaseDispatcherHost::OnPutWrapper(
     const IndexedDBHostMsg_DatabasePut_Params& params) {
+  std::vector<webkit_blob::BlobDataHandle*> handles;
+  for (size_t i = 0; i < params.blob_or_file_info.size(); ++i) {
+    const IndexedDBMsg_BlobOrFileInfo& info = params.blob_or_file_info[i];
+    handles.push_back(parent_->blob_storage_context_->context()
+                          ->GetBlobDataFromUUID(info.uuid)
+                          .release());
+  }
+  parent_->indexed_db_context_->TaskRunner()->PostTask(
+      FROM_HERE,
+      base::Bind(
+          &IndexedDBDispatcherHost::OnPutHelper, parent_, params, handles));
+}
+
+void IndexedDBDispatcherHost::DatabaseDispatcherHost::OnPut(
+    const IndexedDBHostMsg_DatabasePut_Params& params,
+    std::vector<webkit_blob::BlobDataHandle*> handles) {
+
   DCHECK(
       parent_->indexed_db_context_->TaskRunner()->RunsTasksOnCurrentThread());
 
+  ScopedVector<webkit_blob::BlobDataHandle> scoped_handles;
+  scoped_handles.swap(handles);
+
   IndexedDBConnection* connection =
       parent_->GetOrTerminateProcess(&map_, params.ipc_database_id);
   if (!connection || !connection->IsConnected())
@@ -601,13 +637,35 @@
       parent_, params.ipc_thread_id, params.ipc_callbacks_id));
 
   int64 host_transaction_id = parent_->HostTransactionId(params.transaction_id);
+
+  std::vector<IndexedDBBlobInfo> blob_info(params.blob_or_file_info.size());
+
+  ChildProcessSecurityPolicyImpl* policy =
+      ChildProcessSecurityPolicyImpl::GetInstance();
+
+  for (size_t i = 0; i < params.blob_or_file_info.size(); ++i) {
+    const IndexedDBMsg_BlobOrFileInfo& info = params.blob_or_file_info[i];
+    if (info.is_file) {
+      base::FilePath path = base::FilePath::FromUTF16Unsafe(info.file_path);
+      if (!policy->CanReadFile(parent_->ipc_process_id_, path)) {
+        parent_->BadMessageReceived();
+        return;
+      }
+      blob_info[i] = IndexedDBBlobInfo(path, info.file_name, info.mime_type);
+    } else {
+      blob_info[i] = IndexedDBBlobInfo(info.uuid, info.mime_type, info.size);
+    }
+  }
+
   // TODO(alecflett): Avoid a copy here.
   IndexedDBValue value;
   value.bits = params.value;
+  value.blob_info.swap(blob_info);
   connection->database()->Put(
       host_transaction_id,
       params.object_store_id,
       &value,
+      &scoped_handles,
       make_scoped_ptr(new IndexedDBKey(params.key)),
       static_cast<IndexedDBDatabase::PutMode>(params.put_mode),
       callbacks,
@@ -824,9 +882,6 @@
 bool IndexedDBDispatcherHost::CursorDispatcherHost::OnMessageReceived(
     const IPC::Message& message,
     bool* msg_is_ok) {
-  DCHECK(
-      parent_->indexed_db_context_->TaskRunner()->RunsTasksOnCurrentThread());
-
   bool handled = true;
   IPC_BEGIN_MESSAGE_MAP_EX(
       IndexedDBDispatcherHost::CursorDispatcherHost, message, *msg_is_ok)
@@ -837,6 +892,11 @@
     IPC_MESSAGE_HANDLER(IndexedDBHostMsg_CursorDestroyed, OnDestroyed)
     IPC_MESSAGE_UNHANDLED(handled = false)
   IPC_END_MESSAGE_MAP()
+
+  DCHECK(
+      !handled ||
+      parent_->indexed_db_context_->TaskRunner()->RunsTasksOnCurrentThread());
+
   return handled;
 }
 
@@ -909,7 +969,11 @@
   if (!idb_cursor)
     return;
 
-  idb_cursor->PrefetchReset(used_prefetches, unused_prefetches);
+  leveldb::Status s =
+      idb_cursor->PrefetchReset(used_prefetches, unused_prefetches);
+  // TODO(cmumford): Handle this error (crbug.com/363397)
+  if (!s.ok())
+    DLOG(ERROR) << "Unable to reset prefetch";
 }
 
 void IndexedDBDispatcherHost::CursorDispatcherHost::OnDestroyed(
diff --git a/content/browser/indexed_db/indexed_db_dispatcher_host.h b/content/browser/indexed_db/indexed_db_dispatcher_host.h
index de54ae1..7ce6cff 100644
--- a/content/browser/indexed_db/indexed_db_dispatcher_host.h
+++ b/content/browser/indexed_db/indexed_db_dispatcher_host.h
@@ -116,6 +116,8 @@
       const IndexedDBHostMsg_FactoryDeleteDatabase_Params& p);
 
   void OnAckReceivedBlobs(const std::vector<std::string>& uuids);
+  void OnPutHelper(const IndexedDBHostMsg_DatabasePut_Params& params,
+                   std::vector<webkit_blob::BlobDataHandle*> handles);
 
   void ResetDispatcherHosts();
 
@@ -187,7 +189,11 @@
     void OnDestroyed(int32 ipc_database_id);
 
     void OnGet(const IndexedDBHostMsg_DatabaseGet_Params& params);
-    void OnPut(const IndexedDBHostMsg_DatabasePut_Params& params);
+    // OnPutWrapper starts on the IO thread so that it can grab BlobDataHandles
+    // before posting to the IDB TaskRunner for the rest of the job.
+    void OnPutWrapper(const IndexedDBHostMsg_DatabasePut_Params& params);
+    void OnPut(const IndexedDBHostMsg_DatabasePut_Params& params,
+               std::vector<webkit_blob::BlobDataHandle*> handles);
     void OnSetIndexKeys(
         const IndexedDBHostMsg_DatabaseSetIndexKeys_Params& params);
     void OnSetIndexesReady(int32 ipc_database_id,
diff --git a/content/browser/indexed_db/indexed_db_factory.cc b/content/browser/indexed_db/indexed_db_factory.cc
index e214785..663be9d 100644
--- a/content/browser/indexed_db/indexed_db_factory.cc
+++ b/content/browser/indexed_db/indexed_db_factory.cc
@@ -192,7 +192,13 @@
     return;
   }
 
-  callbacks->OnSuccess(backing_store->GetDatabaseNames());
+  leveldb::Status s;
+  std::vector<base::string16> names = backing_store->GetDatabaseNames(&s);
+  if (!s.ok()) {
+    // TODO(cmumford): Handle this error
+    DLOG(ERROR) << "Internal error getting database names";
+  }
+  callbacks->OnSuccess(names);
   backing_store = NULL;
   ReleaseBackingStore(origin_url, false /* immediate */);
 }
@@ -233,14 +239,18 @@
     return;
   }
 
-  scoped_refptr<IndexedDBDatabase> database =
-      IndexedDBDatabase::Create(name, backing_store, this, unique_identifier);
+  leveldb::Status s;
+  scoped_refptr<IndexedDBDatabase> database = IndexedDBDatabase::Create(
+      name, backing_store, this, unique_identifier, &s);
   if (!database) {
-    callbacks->OnError(IndexedDBDatabaseError(
+    IndexedDBDatabaseError error(
         blink::WebIDBDatabaseExceptionUnknownError,
         ASCIIToUTF16(
             "Internal error creating database backend for "
-            "indexedDB.deleteDatabase.")));
+            "indexedDB.deleteDatabase."));
+    callbacks->OnError(error);
+    if (s.IsCorruption())
+      HandleBackingStoreCorruption(origin_url, error);
     return;
   }
 
@@ -282,9 +292,10 @@
   HandleBackingStoreFailure(saved_origin_url);
   // Note: DestroyBackingStore only deletes LevelDB files, leaving all others,
   //       so our corruption info file will remain.
-  if (!IndexedDBBackingStore::DestroyBackingStore(path_base, saved_origin_url)
-           .ok())
-    DLOG(ERROR) << "Unable to delete backing store";
+  leveldb::Status s =
+      IndexedDBBackingStore::DestroyBackingStore(path_base, saved_origin_url);
+  if (!s.ok())
+    DLOG(ERROR) << "Unable to delete backing store: " << s.ToString();
 }
 
 bool IndexedDBFactory::IsDatabaseOpen(const GURL& origin_url,
@@ -389,13 +400,21 @@
       return;
     }
 
-    database =
-        IndexedDBDatabase::Create(name, backing_store, this, unique_identifier);
+    leveldb::Status s;
+    database = IndexedDBDatabase::Create(
+        name, backing_store, this, unique_identifier, &s);
     if (!database) {
-      connection.callbacks->OnError(IndexedDBDatabaseError(
-          blink::WebIDBDatabaseExceptionUnknownError,
-          ASCIIToUTF16(
-              "Internal error creating database backend for indexedDB.open.")));
+      DLOG(ERROR) << "Unable to create the database";
+      IndexedDBDatabaseError error(blink::WebIDBDatabaseExceptionUnknownError,
+                                   ASCIIToUTF16(
+                                       "Internal error creating "
+                                       "database backend for "
+                                       "indexedDB.open."));
+      connection.callbacks->OnError(error);
+      if (s.IsCorruption()) {
+        backing_store = NULL;  // Closes the LevelDB so that it can be deleted
+        HandleBackingStoreCorruption(origin_url, error);
+      }
       return;
     }
   } else {
diff --git a/content/browser/indexed_db/indexed_db_fake_backing_store.cc b/content/browser/indexed_db/indexed_db_fake_backing_store.cc
index a40e576..b483bb3 100644
--- a/content/browser/indexed_db/indexed_db_fake_backing_store.cc
+++ b/content/browser/indexed_db/indexed_db_fake_backing_store.cc
@@ -4,6 +4,7 @@
 
 #include "content/browser/indexed_db/indexed_db_fake_backing_store.h"
 
+#include "base/files/file_path.h"
 #include "base/memory/scoped_ptr.h"
 
 namespace content {
@@ -11,6 +12,7 @@
 IndexedDBFakeBackingStore::IndexedDBFakeBackingStore()
     : IndexedDBBackingStore(NULL,
                             GURL("http://localhost:81"),
+                            base::FilePath(),
                             scoped_ptr<LevelDBDatabase>(),
                             scoped_ptr<LevelDBComparator>(),
                             NULL) {}
@@ -20,13 +22,16 @@
     base::TaskRunner* task_runner)
     : IndexedDBBackingStore(factory,
                             GURL("http://localhost:81"),
+                            base::FilePath(),
                             scoped_ptr<LevelDBDatabase>(),
                             scoped_ptr<LevelDBComparator>(),
                             task_runner) {}
 
 IndexedDBFakeBackingStore::~IndexedDBFakeBackingStore() {}
 
-std::vector<base::string16> IndexedDBFakeBackingStore::GetDatabaseNames() {
+std::vector<base::string16> IndexedDBFakeBackingStore::GetDatabaseNames(
+    leveldb::Status* s) {
+  *s = leveldb::Status::OK();
   return std::vector<base::string16>();
 }
 leveldb::Status IndexedDBFakeBackingStore::GetIDBDatabaseMetaData(
@@ -138,7 +143,8 @@
     int64 database_id,
     int64 object_store_id,
     const IndexedDBKeyRange& key_range,
-    indexed_db::CursorDirection) {
+    indexed_db::CursorDirection,
+    leveldb::Status* s) {
   return scoped_ptr<IndexedDBBackingStore::Cursor>();
 }
 scoped_ptr<IndexedDBBackingStore::Cursor>
@@ -147,7 +153,8 @@
     int64 database_id,
     int64 object_store_id,
     const IndexedDBKeyRange& key_range,
-    indexed_db::CursorDirection) {
+    indexed_db::CursorDirection,
+    leveldb::Status* s) {
   return scoped_ptr<IndexedDBBackingStore::Cursor>();
 }
 scoped_ptr<IndexedDBBackingStore::Cursor>
@@ -157,7 +164,8 @@
     int64 object_store_id,
     int64 index_id,
     const IndexedDBKeyRange& key_range,
-    indexed_db::CursorDirection) {
+    indexed_db::CursorDirection,
+    leveldb::Status* s) {
   return scoped_ptr<IndexedDBBackingStore::Cursor>();
 }
 scoped_ptr<IndexedDBBackingStore::Cursor>
@@ -167,7 +175,8 @@
     int64 object_store_id,
     int64 index_id,
     const IndexedDBKeyRange& key_range,
-    indexed_db::CursorDirection) {
+    indexed_db::CursorDirection,
+    leveldb::Status* s) {
   return scoped_ptr<IndexedDBBackingStore::Cursor>();
 }
 
diff --git a/content/browser/indexed_db/indexed_db_fake_backing_store.h b/content/browser/indexed_db/indexed_db_fake_backing_store.h
index f4f67d7..5c64370 100644
--- a/content/browser/indexed_db/indexed_db_fake_backing_store.h
+++ b/content/browser/indexed_db/indexed_db_fake_backing_store.h
@@ -22,7 +22,8 @@
   IndexedDBFakeBackingStore();
   IndexedDBFakeBackingStore(IndexedDBFactory* factory,
                             base::TaskRunner* task_runner);
-  virtual std::vector<base::string16> GetDatabaseNames() OVERRIDE;
+  virtual std::vector<base::string16> GetDatabaseNames(leveldb::Status* s)
+      OVERRIDE;
   virtual leveldb::Status GetIDBDatabaseMetaData(const base::string16& name,
                                                  IndexedDBDatabaseMetadata*,
                                                  bool* found) OVERRIDE;
@@ -95,27 +96,30 @@
       int64 database_id,
       int64 object_store_id,
       const IndexedDBKeyRange& key_range,
-      indexed_db::CursorDirection) OVERRIDE;
+      indexed_db::CursorDirection,
+      leveldb::Status*) OVERRIDE;
   virtual scoped_ptr<Cursor> OpenObjectStoreCursor(
       Transaction* transaction,
       int64 database_id,
       int64 object_store_id,
       const IndexedDBKeyRange& key_range,
-      indexed_db::CursorDirection) OVERRIDE;
+      indexed_db::CursorDirection,
+      leveldb::Status*) OVERRIDE;
   virtual scoped_ptr<Cursor> OpenIndexKeyCursor(
       Transaction* transaction,
       int64 database_id,
       int64 object_store_id,
       int64 index_id,
       const IndexedDBKeyRange& key_range,
-      indexed_db::CursorDirection) OVERRIDE;
+      indexed_db::CursorDirection,
+      leveldb::Status*) OVERRIDE;
   virtual scoped_ptr<Cursor> OpenIndexCursor(Transaction* transaction,
                                              int64 database_id,
                                              int64 object_store_id,
                                              int64 index_id,
                                              const IndexedDBKeyRange& key_range,
-                                             indexed_db::CursorDirection)
-      OVERRIDE;
+                                             indexed_db::CursorDirection,
+                                             leveldb::Status*) OVERRIDE;
 
   class FakeTransaction : public IndexedDBBackingStore::Transaction {
    public:
diff --git a/content/browser/indexed_db/indexed_db_transaction.h b/content/browser/indexed_db/indexed_db_transaction.h
index 9b2362b..6c696db 100644
--- a/content/browser/indexed_db/indexed_db_transaction.h
+++ b/content/browser/indexed_db/indexed_db_transaction.h
@@ -89,6 +89,8 @@
   FRIEND_TEST_ALL_PREFIXES(IndexedDBTransactionTest, Timeout);
   FRIEND_TEST_ALL_PREFIXES(IndexedDBTransactionTest,
                            SchedulePreemptiveTask);
+  FRIEND_TEST_ALL_PREFIXES(IndexedDBTransactionTestMode,
+                           ScheduleNormalTask);
 
   friend class base::RefCounted<IndexedDBTransaction>;
   virtual ~IndexedDBTransaction();
diff --git a/content/browser/indexed_db/indexed_db_transaction_unittest.cc b/content/browser/indexed_db/indexed_db_transaction_unittest.cc
index 463ebdc..cf35852 100644
--- a/content/browser/indexed_db/indexed_db_transaction_unittest.cc
+++ b/content/browser/indexed_db/indexed_db_transaction_unittest.cc
@@ -17,12 +17,22 @@
 class IndexedDBTransactionTest : public testing::Test {
  public:
   IndexedDBTransactionTest() {
-    IndexedDBFactory* factory = NULL;
     backing_store_ = new IndexedDBFakeBackingStore();
+    CreateDB();
+  }
+
+  void CreateDB() {
+    // DB is created here instead of the constructor to workaround a
+    // "peculiarity of C++". More info at
+    // https://code.google.com/p/googletest/wiki/FAQ#My_compiler_complains_that_a_constructor_(or_destructor)_cannot
+    IndexedDBFactory* factory = NULL;
+    leveldb::Status s;
     db_ = IndexedDBDatabase::Create(base::ASCIIToUTF16("db"),
                                     backing_store_,
                                     factory,
-                                    IndexedDBDatabase::Identifier());
+                                    IndexedDBDatabase::Identifier(),
+                                    &s);
+    ASSERT_TRUE(s.ok());
   }
 
   void RunPostedTasks() { message_loop_.RunUntilIdle(); }
@@ -137,6 +147,68 @@
   DISALLOW_COPY_AND_ASSIGN(AbortObserver);
 };
 
+TEST_P(IndexedDBTransactionTestMode, ScheduleNormalTask) {
+  const int64 id = 0;
+  const std::set<int64> scope;
+  const bool commit_failure = false;
+  scoped_refptr<IndexedDBTransaction> transaction = new IndexedDBTransaction(
+      id,
+      new MockIndexedDBDatabaseCallbacks(),
+      scope,
+      GetParam(),
+      db_,
+      new IndexedDBFakeBackingStore::FakeTransaction(commit_failure));
+
+  EXPECT_FALSE(transaction->HasPendingTasks());
+  EXPECT_TRUE(transaction->IsTaskQueueEmpty());
+  EXPECT_TRUE(transaction->task_queue_.empty());
+  EXPECT_TRUE(transaction->preemptive_task_queue_.empty());
+  EXPECT_EQ(0, transaction->diagnostics().tasks_scheduled);
+  EXPECT_EQ(0, transaction->diagnostics().tasks_completed);
+
+  db_->TransactionCreated(transaction);
+
+  EXPECT_FALSE(transaction->HasPendingTasks());
+  EXPECT_TRUE(transaction->IsTaskQueueEmpty());
+  EXPECT_TRUE(transaction->task_queue_.empty());
+  EXPECT_TRUE(transaction->preemptive_task_queue_.empty());
+
+  transaction->ScheduleTask(
+      IndexedDBDatabase::NORMAL_TASK,
+      base::Bind(&IndexedDBTransactionTest::DummyOperation,
+                 base::Unretained(this)));
+
+  EXPECT_EQ(1, transaction->diagnostics().tasks_scheduled);
+  EXPECT_EQ(0, transaction->diagnostics().tasks_completed);
+
+  EXPECT_TRUE(transaction->HasPendingTasks());
+  EXPECT_FALSE(transaction->IsTaskQueueEmpty());
+  EXPECT_FALSE(transaction->task_queue_.empty());
+  EXPECT_TRUE(transaction->preemptive_task_queue_.empty());
+
+  // Pump the message loop so that the transaction completes all pending tasks,
+  // otherwise it will defer the commit.
+  base::MessageLoop::current()->RunUntilIdle();
+  EXPECT_FALSE(transaction->HasPendingTasks());
+  EXPECT_TRUE(transaction->IsTaskQueueEmpty());
+  EXPECT_TRUE(transaction->task_queue_.empty());
+  EXPECT_TRUE(transaction->preemptive_task_queue_.empty());
+  EXPECT_EQ(IndexedDBTransaction::STARTED, transaction->state());
+  EXPECT_EQ(1, transaction->diagnostics().tasks_scheduled);
+  EXPECT_EQ(1, transaction->diagnostics().tasks_completed);
+
+  transaction->Commit();
+
+  EXPECT_EQ(IndexedDBTransaction::FINISHED, transaction->state());
+  EXPECT_FALSE(transaction->HasPendingTasks());
+  EXPECT_FALSE(transaction->IsTimeoutTimerRunning());
+  EXPECT_TRUE(transaction->IsTaskQueueEmpty());
+  EXPECT_TRUE(transaction->task_queue_.empty());
+  EXPECT_TRUE(transaction->preemptive_task_queue_.empty());
+  EXPECT_EQ(1, transaction->diagnostics().tasks_scheduled);
+  EXPECT_EQ(1, transaction->diagnostics().tasks_completed);
+}
+
 TEST_F(IndexedDBTransactionTest, SchedulePreemptiveTask) {
   const int64 id = 0;
   const std::set<int64> scope;
diff --git a/content/browser/indexed_db/leveldb/leveldb_database.cc b/content/browser/indexed_db/leveldb/leveldb_database.cc
index 96218b3..0efbcd1 100644
--- a/content/browser/indexed_db/leveldb/leveldb_database.cc
+++ b/content/browser/indexed_db/leveldb/leveldb_database.cc
@@ -378,10 +378,10 @@
   virtual ~IteratorImpl() {}
 
   virtual bool IsValid() const OVERRIDE;
-  virtual void SeekToLast() OVERRIDE;
-  virtual void Seek(const StringPiece& target) OVERRIDE;
-  virtual void Next() OVERRIDE;
-  virtual void Prev() OVERRIDE;
+  virtual leveldb::Status SeekToLast() OVERRIDE;
+  virtual leveldb::Status Seek(const StringPiece& target) OVERRIDE;
+  virtual leveldb::Status Next() OVERRIDE;
+  virtual leveldb::Status Prev() OVERRIDE;
   virtual StringPiece Key() const OVERRIDE;
   virtual StringPiece Value() const OVERRIDE;
 
@@ -398,33 +398,37 @@
     : iterator_(it.Pass()) {}
 
 void IteratorImpl::CheckStatus() {
-  const leveldb::Status s = iterator_->status();
+  const leveldb::Status& s = iterator_->status();
   if (!s.ok())
     LOG(ERROR) << "LevelDB iterator error: " << s.ToString();
 }
 
 bool IteratorImpl::IsValid() const { return iterator_->Valid(); }
 
-void IteratorImpl::SeekToLast() {
+leveldb::Status IteratorImpl::SeekToLast() {
   iterator_->SeekToLast();
   CheckStatus();
+  return iterator_->status();
 }
 
-void IteratorImpl::Seek(const StringPiece& target) {
+leveldb::Status IteratorImpl::Seek(const StringPiece& target) {
   iterator_->Seek(MakeSlice(target));
   CheckStatus();
+  return iterator_->status();
 }
 
-void IteratorImpl::Next() {
+leveldb::Status IteratorImpl::Next() {
   DCHECK(IsValid());
   iterator_->Next();
   CheckStatus();
+  return iterator_->status();
 }
 
-void IteratorImpl::Prev() {
+leveldb::Status IteratorImpl::Prev() {
   DCHECK(IsValid());
   iterator_->Prev();
   CheckStatus();
+  return iterator_->status();
 }
 
 StringPiece IteratorImpl::Key() const {
diff --git a/content/browser/indexed_db/leveldb/leveldb_iterator.h b/content/browser/indexed_db/leveldb/leveldb_iterator.h
index 96cd6b9..1069a8b 100644
--- a/content/browser/indexed_db/leveldb/leveldb_iterator.h
+++ b/content/browser/indexed_db/leveldb/leveldb_iterator.h
@@ -6,6 +6,7 @@
 #define CONTENT_BROWSER_INDEXED_DB_LEVELDB_LEVELDB_ITERATOR_H_
 
 #include "base/strings/string_piece.h"
+#include "third_party/leveldatabase/src/include/leveldb/status.h"
 
 namespace content {
 
@@ -13,10 +14,10 @@
  public:
   virtual ~LevelDBIterator() {}
   virtual bool IsValid() const = 0;
-  virtual void SeekToLast() = 0;
-  virtual void Seek(const base::StringPiece& target) = 0;
-  virtual void Next() = 0;
-  virtual void Prev() = 0;
+  virtual leveldb::Status SeekToLast() = 0;
+  virtual leveldb::Status Seek(const base::StringPiece& target) = 0;
+  virtual leveldb::Status Next() = 0;
+  virtual leveldb::Status Prev() = 0;
   virtual base::StringPiece Key() const = 0;
   virtual base::StringPiece Value() const = 0;
 };
diff --git a/content/browser/indexed_db/leveldb/leveldb_transaction.cc b/content/browser/indexed_db/leveldb/leveldb_transaction.cc
index 88839a5..e20d404 100644
--- a/content/browser/indexed_db/leveldb/leveldb_transaction.cc
+++ b/content/browser/indexed_db/leveldb/leveldb_transaction.cc
@@ -130,27 +130,32 @@
   return iterator_ != data_->end();
 }
 
-void LevelDBTransaction::DataIterator::SeekToLast() {
+leveldb::Status LevelDBTransaction::DataIterator::SeekToLast() {
   iterator_ = data_->end();
   if (iterator_ != data_->begin())
     --iterator_;
+  return leveldb::Status::OK();
 }
 
-void LevelDBTransaction::DataIterator::Seek(const StringPiece& target) {
+leveldb::Status LevelDBTransaction::DataIterator::Seek(
+    const StringPiece& target) {
   iterator_ = data_->lower_bound(target);
+  return leveldb::Status::OK();
 }
 
-void LevelDBTransaction::DataIterator::Next() {
+leveldb::Status LevelDBTransaction::DataIterator::Next() {
   DCHECK(IsValid());
   ++iterator_;
+  return leveldb::Status::OK();
 }
 
-void LevelDBTransaction::DataIterator::Prev() {
+leveldb::Status LevelDBTransaction::DataIterator::Prev() {
   DCHECK(IsValid());
   if (iterator_ != data_->begin())
     --iterator_;
   else
     iterator_ = data_->end();
+  return leveldb::Status::OK();
 }
 
 StringPiece LevelDBTransaction::DataIterator::Key() const {
@@ -201,29 +206,39 @@
   return !!current_;
 }
 
-void LevelDBTransaction::TransactionIterator::SeekToLast() {
-  data_iterator_->SeekToLast();
-  db_iterator_->SeekToLast();
+leveldb::Status LevelDBTransaction::TransactionIterator::SeekToLast() {
+  leveldb::Status s = data_iterator_->SeekToLast();
+  DCHECK(s.ok());
+  s = db_iterator_->SeekToLast();
+  if (!s.ok())
+    return s;
   direction_ = REVERSE;
 
   HandleConflictsAndDeletes();
   SetCurrentIteratorToLargestKey();
+  return s;
 }
 
-void LevelDBTransaction::TransactionIterator::Seek(const StringPiece& target) {
-  data_iterator_->Seek(target);
-  db_iterator_->Seek(target);
+leveldb::Status LevelDBTransaction::TransactionIterator::Seek(
+    const StringPiece& target) {
+  leveldb::Status s = data_iterator_->Seek(target);
+  DCHECK(s.ok());
+  s = db_iterator_->Seek(target);
+  if (!s.ok())
+    return s;
   direction_ = FORWARD;
 
   HandleConflictsAndDeletes();
   SetCurrentIteratorToSmallestKey();
+  return s;
 }
 
-void LevelDBTransaction::TransactionIterator::Next() {
+leveldb::Status LevelDBTransaction::TransactionIterator::Next() {
   DCHECK(IsValid());
   if (data_changed_)
     RefreshDataIterator();
 
+  leveldb::Status s;
   if (direction_ != FORWARD) {
     // Ensure the non-current iterator is positioned after Key().
 
@@ -236,7 +251,9 @@
         !comparator_->Compare(non_current->Key(), Key())) {
       // Take an extra step so the non-current key is
       // strictly greater than Key().
-      non_current->Next();
+      s = non_current->Next();
+      if (!s.ok())
+        return s;
     }
     DCHECK(!non_current->IsValid() ||
            comparator_->Compare(non_current->Key(), Key()) > 0);
@@ -244,13 +261,17 @@
     direction_ = FORWARD;
   }
 
-  current_->Next();
+  s = current_->Next();
+  if (!s.ok())
+    return s;
   HandleConflictsAndDeletes();
   SetCurrentIteratorToSmallestKey();
+  return leveldb::Status::OK();
 }
 
-void LevelDBTransaction::TransactionIterator::Prev() {
+leveldb::Status LevelDBTransaction::TransactionIterator::Prev() {
   DCHECK(IsValid());
+  leveldb::Status s;
   if (data_changed_)
     RefreshDataIterator();
 
@@ -261,7 +282,9 @@
                                        ? data_iterator_.get()
                                        : db_iterator_.get();
 
-    non_current->Seek(Key());
+    s = non_current->Seek(Key());
+    if (!s.ok())
+      return s;
     if (non_current->IsValid()) {
       // Iterator is at first entry >= Key().
       // Step back once to entry < key.
@@ -278,9 +301,12 @@
     direction_ = REVERSE;
   }
 
-  current_->Prev();
+  s = current_->Prev();
+  if (!s.ok())
+    return s;
   HandleConflictsAndDeletes();
   SetCurrentIteratorToLargestKey();
+  return leveldb::Status::OK();
 }
 
 StringPiece LevelDBTransaction::TransactionIterator::Key() const {
diff --git a/content/browser/indexed_db/leveldb/leveldb_transaction.h b/content/browser/indexed_db/leveldb/leveldb_transaction.h
index 8827db8..1102651 100644
--- a/content/browser/indexed_db/leveldb/leveldb_transaction.h
+++ b/content/browser/indexed_db/leveldb/leveldb_transaction.h
@@ -68,10 +68,10 @@
     virtual ~DataIterator();
 
     virtual bool IsValid() const OVERRIDE;
-    virtual void SeekToLast() OVERRIDE;
-    virtual void Seek(const base::StringPiece& slice) OVERRIDE;
-    virtual void Next() OVERRIDE;
-    virtual void Prev() OVERRIDE;
+    virtual leveldb::Status SeekToLast() OVERRIDE;
+    virtual leveldb::Status Seek(const base::StringPiece& slice) OVERRIDE;
+    virtual leveldb::Status Next() OVERRIDE;
+    virtual leveldb::Status Prev() OVERRIDE;
     virtual base::StringPiece Key() const OVERRIDE;
     virtual base::StringPiece Value() const OVERRIDE;
     bool IsDeleted() const;
@@ -89,10 +89,10 @@
         scoped_refptr<LevelDBTransaction> transaction);
 
     virtual bool IsValid() const OVERRIDE;
-    virtual void SeekToLast() OVERRIDE;
-    virtual void Seek(const base::StringPiece& target) OVERRIDE;
-    virtual void Next() OVERRIDE;
-    virtual void Prev() OVERRIDE;
+    virtual leveldb::Status SeekToLast() OVERRIDE;
+    virtual leveldb::Status Seek(const base::StringPiece& target) OVERRIDE;
+    virtual leveldb::Status Next() OVERRIDE;
+    virtual leveldb::Status Prev() OVERRIDE;
     virtual base::StringPiece Key() const OVERRIDE;
     virtual base::StringPiece Value() const OVERRIDE;
     void DataChanged();
diff --git a/content/browser/loader/detachable_resource_handler.cc b/content/browser/loader/detachable_resource_handler.cc
index 88e402b..42c7d1f 100644
--- a/content/browser/loader/detachable_resource_handler.cc
+++ b/content/browser/loader/detachable_resource_handler.cc
@@ -5,7 +5,6 @@
 #include "content/browser/loader/detachable_resource_handler.h"
 
 #include "base/logging.h"
-#include "base/metrics/histogram.h"
 #include "base/time/time.h"
 #include "content/browser/loader/resource_request_info_impl.h"
 #include "net/base/io_buffer.h"
@@ -13,29 +12,9 @@
 #include "net/url_request/url_request_status.h"
 
 namespace {
-
 // This matches the maximum allocation size of AsyncResourceHandler.
 const int kReadBufSize = 32 * 1024;
-
-// Enum type for <a ping> result histograms. Only add new values to the end.
-enum UMAPingResultType {
-  // The ping request completed successfully.
-  UMA_PING_RESULT_TYPE_SUCCESS = 0,
-  // The ping request received a response, but did not consume the entire body.
-  UMA_PING_RESULT_TYPE_RESPONSE_STARTED = 1,
-  // The ping request was canceled due to the internal timeout.
-  UMA_PING_RESULT_TYPE_TIMEDOUT = 2,
-  // The ping request was canceled for some other reason.
-  UMA_PING_RESULT_TYPE_CANCELED = 3,
-  // The ping request failed for some reason.
-  UMA_PING_RESULT_TYPE_FAILED = 4,
-  // The ping request was deleted before OnResponseCompleted.
-  UMA_PING_RESULT_TYPE_UNCOMPLETED = 5,
-
-  UMA_PING_RESULT_TYPE_MAX,
-};
-
-}  // namespace
+}
 
 namespace content {
 
@@ -47,51 +26,13 @@
       next_handler_(next_handler.Pass()),
       cancel_delay_(cancel_delay),
       is_deferred_(false),
-      is_finished_(false),
-      timed_out_(false),
-      response_started_(false),
-      status_(net::URLRequestStatus::IO_PENDING) {
+      is_finished_(false) {
   GetRequestInfo()->set_detachable_handler(this);
 }
 
 DetachableResourceHandler::~DetachableResourceHandler() {
   // Cleanup back-pointer stored on the request info.
   GetRequestInfo()->set_detachable_handler(NULL);
-
-  // Record the status of <a ping> requests.
-  // http://crbug.com/302816
-  if (GetRequestInfo()->GetResourceType() == ResourceType::PING) {
-    UMAPingResultType result_type = UMA_PING_RESULT_TYPE_MAX;
-
-    if (status_ == net::URLRequestStatus::SUCCESS) {
-      result_type = UMA_PING_RESULT_TYPE_SUCCESS;
-    } else if (response_started_) {
-      // However the request ended, bucket this under RESPONSE_STARTED because
-      // OnResponseStarted was received. Note: OnResponseCompleted is also sent
-      // when a request is canceled before completion, so it is possible to
-      // receive OnResponseCompleted without OnResponseStarted.
-      result_type = UMA_PING_RESULT_TYPE_RESPONSE_STARTED;
-    } else if (status_ == net::URLRequestStatus::IO_PENDING) {
-      // The request was deleted without OnResponseCompleted and before any
-      // response was received.
-      result_type = UMA_PING_RESULT_TYPE_UNCOMPLETED;
-    } else if (status_ == net::URLRequestStatus::CANCELED) {
-      if (timed_out_) {
-        result_type = UMA_PING_RESULT_TYPE_TIMEDOUT;
-      } else {
-        result_type = UMA_PING_RESULT_TYPE_CANCELED;
-      }
-    } else if (status_ == net::URLRequestStatus::FAILED) {
-      result_type = UMA_PING_RESULT_TYPE_FAILED;
-    }
-
-    if (result_type < UMA_PING_RESULT_TYPE_MAX) {
-      UMA_HISTOGRAM_ENUMERATION("Net.Ping_Result", result_type,
-                                UMA_PING_RESULT_TYPE_MAX);
-    } else {
-      NOTREACHED();
-    }
-  }
 }
 
 void DetachableResourceHandler::Detach() {
@@ -124,7 +65,7 @@
   // Time the request out if it takes too long.
   detached_timer_.reset(new base::OneShotTimer<DetachableResourceHandler>());
   detached_timer_->Start(
-      FROM_HERE, cancel_delay_, this, &DetachableResourceHandler::TimedOut);
+      FROM_HERE, cancel_delay_, this, &DetachableResourceHandler::Cancel);
 
   // Resume if necessary. The request may have been deferred, say, waiting on a
   // full buffer in AsyncResourceHandler. Now that it has been detached, resume
@@ -170,15 +111,6 @@
                                                   ResourceResponse* response,
                                                   bool* defer) {
   DCHECK(!is_deferred_);
-  DCHECK(!response_started_);
-  response_started_ = true;
-
-  // Record how long it takes for <a ping> to respond.
-  // http://crbug.com/302816
-  if (GetRequestInfo()->GetResourceType() == ResourceType::PING) {
-    UMA_HISTOGRAM_MEDIUM_TIMES("Net.Ping_ResponseStartedTime",
-                               time_since_start_.Elapsed());
-  }
 
   if (!next_handler_)
     return true;
@@ -252,9 +184,6 @@
   // No DCHECK(!is_deferred_) as the request may have been cancelled while
   // deferred.
 
-  status_ = status.status();
-  DCHECK_NE(net::URLRequestStatus::IO_PENDING, status_);
-
   if (!next_handler_)
     return;
 
@@ -291,9 +220,4 @@
   controller()->CancelWithError(error_code);
 }
 
-void DetachableResourceHandler::TimedOut() {
-  timed_out_ = true;
-  controller()->Cancel();
-}
-
 }  // namespace content
diff --git a/content/browser/loader/detachable_resource_handler.h b/content/browser/loader/detachable_resource_handler.h
index 25235b6..2482270 100644
--- a/content/browser/loader/detachable_resource_handler.h
+++ b/content/browser/loader/detachable_resource_handler.h
@@ -10,11 +10,9 @@
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/time/time.h"
-#include "base/timer/elapsed_timer.h"
 #include "base/timer/timer.h"
 #include "content/browser/loader/resource_handler.h"
 #include "content/public/browser/resource_controller.h"
-#include "net/url_request/url_request_status.h"
 
 namespace net {
 class IOBuffer;
@@ -82,8 +80,6 @@
   virtual void CancelWithError(int error_code) OVERRIDE;
 
  private:
-  void TimedOut();
-
   scoped_ptr<ResourceHandler> next_handler_;
   scoped_refptr<net::IOBuffer> read_buffer_;
 
@@ -92,14 +88,6 @@
 
   bool is_deferred_;
   bool is_finished_;
-  bool timed_out_;
-
-  bool response_started_;
-  base::ElapsedTimer time_since_start_;
-
-  // The status recorded from OnResponseCompleted. Value is
-  // net::URLRequestStatus::IO_PENDING if OnResponseCompleted is never received.
-  net::URLRequestStatus::Status status_;
 
   DISALLOW_COPY_AND_ASSIGN(DetachableResourceHandler);
 };
diff --git a/content/browser/loader/resource_loader.cc b/content/browser/loader/resource_loader.cc
index fde1697..251fc2e 100644
--- a/content/browser/loader/resource_loader.cc
+++ b/content/browser/loader/resource_loader.cc
@@ -355,6 +355,8 @@
     return;
   }
 
+  CompleteRead(bytes_read);
+
   // If the handler cancelled or deferred the request, do not continue
   // processing the read. If cancelled, the URLRequest has already been
   // cancelled and will schedule an erroring OnReadCompleted later. If deferred,
@@ -362,11 +364,9 @@
   //
   // Note: if bytes_read is 0 (EOF) and the handler defers, resumption will call
   // Read() on the URLRequest again and get a second EOF.
-  if (!CompleteRead(bytes_read))
+  if (is_deferred() || !request_->status().is_success())
     return;
 
-  DCHECK(request_->status().is_success());
-  DCHECK(!is_deferred());
   if (bytes_read > 0) {
     StartReading(true);  // Read the next chunk.
   } else {
@@ -612,7 +612,7 @@
   // inspecting the URLRequest's status.
 }
 
-bool ResourceLoader::CompleteRead(int bytes_read) {
+void ResourceLoader::CompleteRead(int bytes_read) {
   DCHECK(bytes_read >= 0);
   DCHECK(request_->status().is_success());
 
@@ -621,12 +621,14 @@
   bool defer = false;
   if (!handler_->OnReadCompleted(info->GetRequestID(), bytes_read, &defer)) {
     Cancel();
-    return false;
   } else if (defer) {
     deferred_stage_ = DEFERRED_READ;  // Read next chunk when resumed.
-    return false;
   }
-  return true;
+
+  // Note: the request may still have been cancelled while OnReadCompleted
+  // returns true if OnReadCompleted caused request to get cancelled
+  // out-of-band. (In AwResourceDispatcherHostDelegate::DownloadStarting, for
+  // instance.)
 }
 
 void ResourceLoader::ResponseCompleted() {
diff --git a/content/browser/loader/resource_loader.h b/content/browser/loader/resource_loader.h
index 806b526..79dcf60 100644
--- a/content/browser/loader/resource_loader.h
+++ b/content/browser/loader/resource_loader.h
@@ -98,9 +98,8 @@
   void StartReading(bool is_continuation);
   void ResumeReading();
   void ReadMore(int* bytes_read);
-  // Passes a read result to the handler. Returns true to continue processing
-  // and false if the handler deferred or cancelled the request.
-  bool CompleteRead(int bytes_read);
+  // Passes a read result to the handler.
+  void CompleteRead(int bytes_read);
   void ResponseCompleted();
   void CallDidFinishLoading();
   void RecordHistograms();
diff --git a/content/browser/loader/resource_loader_unittest.cc b/content/browser/loader/resource_loader_unittest.cc
index dc5d027..0d2629d 100644
--- a/content/browser/loader/resource_loader_unittest.cc
+++ b/content/browser/loader/resource_loader_unittest.cc
@@ -515,7 +515,7 @@
 
     // Create mock file streams and a ShareableFileReference.
     scoped_ptr<net::testing::MockFileStream> file_stream(
-        new net::testing::MockFileStream(file.Pass(), NULL,
+        new net::testing::MockFileStream(file.Pass(),
                                          base::MessageLoopProxy::current()));
     file_stream_ = file_stream.get();
     deletable_file_ = ShareableFileReference::GetOrCreate(
diff --git a/content/browser/loader/temporary_file_stream.cc b/content/browser/loader/temporary_file_stream.cc
index 1d23ae9..5979bd9 100644
--- a/content/browser/loader/temporary_file_stream.cc
+++ b/content/browser/loader/temporary_file_stream.cc
@@ -40,8 +40,7 @@
 
   scoped_ptr<net::FileStream> file_stream(new net::FileStream(
       file_handle.ReleaseValue(),
-      base::PLATFORM_FILE_WRITE | base::PLATFORM_FILE_ASYNC,
-      NULL));
+      base::PLATFORM_FILE_WRITE | base::PLATFORM_FILE_ASYNC));
 
   callback.Run(error_code, file_stream.Pass(), deletable_file);
 }
diff --git a/content/browser/media/android/browser_media_player_manager.cc b/content/browser/media/android/browser_media_player_manager.cc
index 61b8b98..ccc548e 100644
--- a/content/browser/media/android/browser_media_player_manager.cc
+++ b/content/browser/media/android/browser_media_player_manager.cc
@@ -127,7 +127,6 @@
     RenderViewHost* render_view_host)
     : WebContentsObserver(WebContents::FromRenderViewHost(render_view_host)),
       fullscreen_player_id_(-1),
-      pending_fullscreen_player_id_(-1),
       fullscreen_player_is_released_(false),
       web_contents_(WebContents::FromRenderViewHost(render_view_host)),
       weak_ptr_factory_(this) {
@@ -355,7 +354,7 @@
   }
 }
 
-void BrowserMediaPlayerManager::OnProtectedSurfaceRequested(int player_id) {
+void BrowserMediaPlayerManager::RequestFullScreen(int player_id) {
   if (fullscreen_player_id_ == player_id)
     return;
 
@@ -365,20 +364,9 @@
     return;
   }
 
-  // If the player is pending approval, wait for the approval to happen.
-  if (cdm_ids_pending_approval_.end() !=
-      cdm_ids_pending_approval_.find(player_id)) {
-    pending_fullscreen_player_id_ = player_id;
-    return;
-  }
-
   // Send an IPC to the render process to request the video element to enter
   // fullscreen. OnEnterFullscreen() will be called later on success.
   // This guarantees the fullscreen video will be rendered correctly.
-  // During the process, DisableFullscreenEncryptedMediaPlayback() may get
-  // called before or after OnEnterFullscreen(). If it is called before
-  // OnEnterFullscreen(), the player will not enter fullscreen. And it will
-  // retry the process once CreateSession() is allowed to proceed.
   // TODO(qinmin): make this flag default on android.
   if (CommandLine::ForCurrentProcess()->HasSwitch(
       switches::kDisableGestureRequirementForMediaFullscreen)) {
@@ -477,26 +465,8 @@
 }
 #endif  // defined(VIDEO_HOLE)
 
-void BrowserMediaPlayerManager::DisableFullscreenEncryptedMediaPlayback() {
-  if (fullscreen_player_id_ == -1)
-    return;
-
-  // If the fullscreen player is not playing back encrypted video, do nothing.
-  MediaDrmBridge* drm_bridge = GetDrmBridge(fullscreen_player_id_);
-  if (!drm_bridge)
-    return;
-
-  // Exit fullscreen.
-  pending_fullscreen_player_id_ = fullscreen_player_id_;
-  OnExitFullscreen(fullscreen_player_id_);
-}
-
 void BrowserMediaPlayerManager::OnEnterFullscreen(int player_id) {
   DCHECK_EQ(fullscreen_player_id_, -1);
-  if (cdm_ids_pending_approval_.find(player_id) !=
-      cdm_ids_pending_approval_.end()) {
-    return;
-  }
 
 #if defined(VIDEO_HOLE)
   if (external_video_surface_container_)
@@ -548,8 +518,13 @@
 
 void BrowserMediaPlayerManager::OnStart(int player_id) {
   MediaPlayerAndroid* player = GetPlayer(player_id);
-  if (player)
-    player->Start();
+  if (!player)
+    return;
+  player->Start();
+  if (fullscreen_player_id_ == player_id && fullscreen_player_is_released_) {
+    video_view_->OpenVideo();
+    fullscreen_player_is_released_ = false;
+  }
 }
 
 void BrowserMediaPlayerManager::OnSeek(
@@ -652,10 +627,6 @@
     return;
   }
 
-  if (cdm_ids_approved_.find(cdm_id) == cdm_ids_approved_.end()) {
-    cdm_ids_pending_approval_.insert(cdm_id);
-  }
-
   BrowserContext* context =
       web_contents()->GetRenderProcessHost()->GetBrowserContext();
 
@@ -826,26 +797,10 @@
     OnSessionError(cdm_id, session_id, media::MediaKeys::kUnknownError, 0);
     return;
   }
-  cdm_ids_pending_approval_.erase(cdm_id);
-  cdm_ids_approved_.insert(cdm_id);
 
-  if (!drm_bridge->CreateSession(
-           session_id, content_type, &init_data[0], init_data.size())) {
-    return;
-  }
-
-  // TODO(xhwang): Move the following code to OnSessionReady.
-
-  // TODO(qinmin): For prefixed EME implementation, |cdm_id| and player_id are
-  // identical. This will not be the case for unpredixed EME. See:
-  // http://crbug.com/338910
-  if (pending_fullscreen_player_id_ != cdm_id)
-    return;
-
-  pending_fullscreen_player_id_ = -1;
-  MediaPlayerAndroid* player = GetPlayer(cdm_id);
-  if (player->IsPlaying())
-    OnProtectedSurfaceRequested(cdm_id);
+  // This could fail, in which case a SessionError will be fired.
+  drm_bridge->CreateSession(
+      session_id, content_type, &init_data[0], init_data.size());
 }
 
 void BrowserMediaPlayerManager::ReleaseFullscreenPlayer(
diff --git a/content/browser/media/android/browser_media_player_manager.h b/content/browser/media/android/browser_media_player_manager.h
index 902ec47..591a445 100644
--- a/content/browser/media/android/browser_media_player_manager.h
+++ b/content/browser/media/android/browser_media_player_manager.h
@@ -91,7 +91,7 @@
   virtual media::MediaPlayerAndroid* GetPlayer(int player_id) OVERRIDE;
   virtual media::MediaDrmBridge* GetDrmBridge(int cdm_id) OVERRIDE;
   virtual void DestroyAllMediaPlayers() OVERRIDE;
-  virtual void OnProtectedSurfaceRequested(int player_id) OVERRIDE;
+  virtual void RequestFullScreen(int player_id) OVERRIDE;
   virtual void OnSessionCreated(int cdm_id,
                                 uint32 session_id,
                                 const std::string& web_session_id) OVERRIDE;
@@ -112,10 +112,6 @@
   void OnFrameInfoUpdated();
 #endif  // defined(VIDEO_HOLE)
 
-  // Called to disble the current fullscreen playback if the video is encrypted.
-  // TODO(qinmin): remove this once we have the new fullscreen mode.
-  void DisableFullscreenEncryptedMediaPlayback();
-
  protected:
   // Clients must use Create() or subclass constructor.
   explicit BrowserMediaPlayerManager(RenderViewHost* render_view_host);
@@ -222,13 +218,6 @@
   // An array of managed media DRM bridges.
   ScopedVector<media::MediaDrmBridge> drm_bridges_;
 
-  // A set of media keys IDs that are pending approval or approved to access
-  // device DRM credentials.
-  // These 2 sets does not cover all the EME videos. If a video only streams
-  // clear data, it will not be included in either set.
-  std::set<int> cdm_ids_pending_approval_;
-  std::set<int> cdm_ids_approved_;
-
   // The fullscreen video view object or NULL if video is not played in
   // fullscreen.
   scoped_ptr<ContentVideoView> video_view_;
@@ -240,9 +229,6 @@
   // Player ID of the fullscreen media player.
   int fullscreen_player_id_;
 
-  // The player ID pending to enter fullscreen.
-  int pending_fullscreen_player_id_;
-
   // Whether the fullscreen player has been Release()-d.
   bool fullscreen_player_is_released_;
 
diff --git a/content/browser/media/media_canplaytype_browsertest.cc b/content/browser/media/media_canplaytype_browsertest.cc
index f9f98bf..398039a 100644
--- a/content/browser/media/media_canplaytype_browsertest.cc
+++ b/content/browser/media/media_canplaytype_browsertest.cc
@@ -16,11 +16,9 @@
 #if defined(USE_PROPRIETARY_CODECS)
 const char* kPropProbably = "probably";
 const char* kPropMaybe = "maybe";
-const char* kPropProbablyElseMaybe = "probably";
 #else
 const char* kPropProbably = "";
 const char* kPropMaybe = "";
-const char* kPropProbablyElseMaybe = "maybe";
 #endif  // USE_PROPRIETARY_CODECS
 
 // TODO(amogh.bihani): Change the opus tests when opus is  on
@@ -358,159 +356,145 @@
   EXPECT_EQ(kNot, CanPlay("'video/mpeg'"));
   EXPECT_EQ(kNot, CanPlay("'video/x-mp3'"));
 
-  EXPECT_EQ(kPropMaybe, CanPlay("'audio/mpeg'"));
+  // audio/mpeg does not allow any codecs parameter
+  EXPECT_EQ(kPropProbably, CanPlay("'audio/mpeg'"));
 
-  // audio/mpeg and audio/mp3 do not allow any codecs parameter
-  // TODO(amogh.bihani): Change these tests when bug 53193 is fixed.
-  // http://crbug.com/53193 ----------------------------------------------------
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/mpeg; codecs=\"avc1\"'"));
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/mpeg; codecs=\"avc3\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"avc1\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"avc3\"'"));
 
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/mpeg; codecs=\"avc1.4D401E\"'"));
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/mpeg; codecs=\"avc3.64001F\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"avc1.4D401E\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"avc3.64001F\"'"));
 
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/mpeg; codecs=\"mp4a\"'"));
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/mpeg; codecs=\"mp4a.40.2\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"mp4a\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"mp4a.40.2\"'"));
 
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/mpeg; codecs=\"avc1.unknown\"'"));
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/mpeg; codecs=\"avc3.unknown\"'"));
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/mpeg; codecs=\"mp4a.unknown\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"avc1.unknown\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"avc3.unknown\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"mp4a.unknown\"'"));
 
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/mpeg; codecs=\"avc1.\"'"));
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/mpeg; codecs=\"avc3.\"'"));
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/mpeg; codecs=\"mp4a.\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"avc1.\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"avc3.\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"mp4a.\"'"));
 
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/mpeg; codecs=\"vorbis\"'"));
-  EXPECT_EQ(kOpusAndPropProbably, CanPlay("'audio/mpeg; codecs=\"opus\"'"));
-  EXPECT_EQ(kTheoraAndPropProbably, CanPlay("'audio/mpeg; codecs=\"theora\"'"));
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/mpeg; codecs=\"vp8\"'"));
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/mpeg; codecs=\"vp8.0\"'"));
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/mpeg; codecs=\"vp9\"'"));
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/mpeg; codecs=\"vp9.0\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"vorbis\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"opus\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"theora\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"vp8\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"vp8.0\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"vp9\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"vp9.0\"'"));
 
-  EXPECT_EQ(kPropMaybe, CanPlay("'audio/mpeg; codecs=\"AVC1\"'"));
-  EXPECT_EQ(kPropMaybe, CanPlay("'audio/mpeg; codecs=\"AVC1.4d401e\"'"));
-  EXPECT_EQ(kPropMaybe, CanPlay("'audio/mpeg; codecs=\"AVC3\"'"));
-  EXPECT_EQ(kPropMaybe, CanPlay("'audio/mpeg; codecs=\"AVC3.64001f\"'"));
-  EXPECT_EQ(kPropMaybe, CanPlay("'audio/mpeg; codecs=\"MP4A\"'"));
-  EXPECT_EQ(kPropMaybe, CanPlay("'audio/mpeg; codecs=\"MP4A.40.2\"'"));
-  EXPECT_EQ(kPropMaybe, CanPlay("'audio/mpeg; codecs=\"AVC1, MP4\"'"));
-  EXPECT_EQ(kPropMaybe, CanPlay("'audio/mpeg; codecs=\"AVC3, MP4\"'"));
-  EXPECT_EQ(kPropMaybe,
-            CanPlay("'audio/mpeg; codecs=\", AVC1.4D401E, MP4.40.2\"'"));
-  EXPECT_EQ(kPropMaybe,
-            CanPlay("'audio/mpeg; codecs=\", AVC3.64001F, MP4.40.2\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"AVC1\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"AVC1.4d401e\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"AVC3\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"AVC3.64001f\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"MP4A\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"MP4A.40.2\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"AVC1, MP4\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"AVC3, MP4\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\", AVC1.4D401E, MP4.40.2\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\", AVC3.64001F, MP4.40.2\"'"));
 
-  EXPECT_EQ(kPropMaybe, CanPlay("'audio/mpeg; codecs=\"avc2\"'"));
-  EXPECT_EQ(kPropMaybe, CanPlay("'audio/mpeg; codecs=\"avc4\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"avc2\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"avc4\"'"));
 
-  EXPECT_EQ(kPropMaybe, CanPlay("'audio/mpeg; codecs=\"avc1x\"'"));
-  EXPECT_EQ(kPropMaybe, CanPlay("'audio/mpeg; codecs=\"avc3x\"'"));
-  EXPECT_EQ(kPropMaybe, CanPlay("'audio/mpeg; codecs=\"mp4ax\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"avc1x\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"avc3x\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"mp4ax\"'"));
 
-  EXPECT_EQ(kPropMaybe, CanPlay("'audio/mpeg; codecs=\"unknown\"'"));
-  // ---------------------------------------------------------------------------
+  EXPECT_EQ(kNot, CanPlay("'audio/mpeg; codecs=\"unknown\"'"));
 
-  EXPECT_EQ(kPropMaybe, CanPlay("'audio/mp3'"));
+  // audio/mp3 does not allow any codecs parameter
+  EXPECT_EQ(kPropProbably, CanPlay("'audio/mp3'"));
 
-  // TODO(amogh.bihani): Change these tests when bug 53193 is fixed.
-  // http://crbug.com/53193 ----------------------------------------------------
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/mp3; codecs=\"avc1\"'"));
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/mp3; codecs=\"avc3\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"avc1\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"avc3\"'"));
 
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/mp3; codecs=\"avc1.4D401E\"'"));
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/mp3; codecs=\"avc3.64001F\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"avc1.4D401E\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"avc3.64001F\"'"));
 
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/mp3; codecs=\"mp4a\"'"));
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/mp3; codecs=\"mp4a.40.2\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"mp4a\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"mp4a.40.2\"'"));
 
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/mp3; codecs=\"avc1.unknown\"'"));
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/mp3; codecs=\"avc3.unknown\"'"));
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/mp3; codecs=\"mp4a.unknown\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"avc1.unknown\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"avc3.unknown\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"mp4a.unknown\"'"));
 
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/mp3; codecs=\"avc1.\"'"));
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/mp3; codecs=\"avc3.\"'"));
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/mp3; codecs=\"mp4a.\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"avc1.\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"avc3.\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"mp4a.\"'"));
 
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/mp3; codecs=\"vorbis\"'"));
-  EXPECT_EQ(kOpusAndPropProbably, CanPlay("'audio/mp3; codecs=\"opus\"'"));
-  EXPECT_EQ(kTheoraAndPropProbably, CanPlay("'audio/mp3; codecs=\"theora\"'"));
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/mp3; codecs=\"vp8\"'"));
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/mp3; codecs=\"vp8.0\"'"));
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/mp3; codecs=\"vp9\"'"));
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/mp3; codecs=\"vp9.0\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"vorbis\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"opus\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"theora\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"vp8\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"vp8.0\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"vp9\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"vp9.0\"'"));
 
-  EXPECT_EQ(kPropMaybe, CanPlay("'audio/mp3; codecs=\"AVC1\"'"));
-  EXPECT_EQ(kPropMaybe, CanPlay("'audio/mp3; codecs=\"AVC1.4d401e\"'"));
-  EXPECT_EQ(kPropMaybe, CanPlay("'audio/mp3; codecs=\"AVC3\"'"));
-  EXPECT_EQ(kPropMaybe, CanPlay("'audio/mp3; codecs=\"AVC3.64001f\"'"));
-  EXPECT_EQ(kPropMaybe, CanPlay("'audio/mp3; codecs=\"MP4A\"'"));
-  EXPECT_EQ(kPropMaybe, CanPlay("'audio/mp3; codecs=\"MP4A.40.2\"'"));
-  EXPECT_EQ(kPropMaybe, CanPlay("'audio/mp3; codecs=\"AVC1, MP4\"'"));
-  EXPECT_EQ(kPropMaybe, CanPlay("'audio/mp3; codecs=\"AVC3, MP4\"'"));
-  EXPECT_EQ(kPropMaybe,
-            CanPlay("'audio/mp3; codecs=\", AVC1.4D401E, MP4.40.2\"'"));
-  EXPECT_EQ(kPropMaybe,
-            CanPlay("'audio/mp3; codecs=\", AVC3.64001F, MP4.40.2\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"AVC1\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"AVC1.4d401e\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"AVC3\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"AVC3.64001f\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"MP4A\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"MP4A.40.2\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"AVC1, MP4\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"AVC3, MP4\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\", AVC1.4D401E, MP4.40.2\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\", AVC3.64001F, MP4.40.2\"'"));
 
-  EXPECT_EQ(kPropMaybe, CanPlay("'audio/mp3; codecs=\"avc2\"'"));
-  EXPECT_EQ(kPropMaybe, CanPlay("'audio/mp3; codecs=\"avc4\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"avc2\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"avc4\"'"));
 
-  EXPECT_EQ(kPropMaybe, CanPlay("'audio/mp3; codecs=\"avc1x\"'"));
-  EXPECT_EQ(kPropMaybe, CanPlay("'audio/mp3; codecs=\"avc3x\"'"));
-  EXPECT_EQ(kPropMaybe, CanPlay("'audio/mp3; codecs=\"mp4ax\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"avc1x\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"avc3x\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"mp4ax\"'"));
 
-  EXPECT_EQ(kPropMaybe, CanPlay("'audio/mp3; codecs=\"unknown\"'"));
-  // ---------------------------------------------------------------------------
+  EXPECT_EQ(kNot, CanPlay("'audio/mp3; codecs=\"unknown\"'"));
 
-  EXPECT_EQ(kPropMaybe, CanPlay("'audio/x-mp3'"));
+  // audio/x-mp3 does not allow any codecs parameter
+  EXPECT_EQ(kPropProbably, CanPlay("'audio/x-mp3'"));
 
-  // TODO(amogh.bihani): Change these tests when bug 53193 is fixed.
-  // http://crbug.com/53193 ----------------------------------------------------
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/x-mp3; codecs=\"avc1\"'"));
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/x-mp3; codecs=\"avc3\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"avc1\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"avc3\"'"));
 
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/x-mp3; codecs=\"avc1.4D401E\"'"));
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/x-mp3; codecs=\"avc3.64001F\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"avc1.4D401E\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"avc3.64001F\"'"));
 
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/x-mp3; codecs=\"mp4a\"'"));
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/x-mp3; codecs=\"mp4a.40.2\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"mp4a\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"mp4a.40.2\"'"));
 
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/x-mp3; codecs=\"avc1.unknown\"'"));
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/x-mp3; codecs=\"avc3.unknown\"'"));
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/x-mp3; codecs=\"mp4a.unknown\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"avc1.unknown\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"avc3.unknown\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"mp4a.unknown\"'"));
 
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/x-mp3; codecs=\"vorbis\"'"));
-  EXPECT_EQ(kOpusAndPropProbably, CanPlay("'audio/x-mp3; codecs=\"opus\"'"));
-  EXPECT_EQ(kTheoraAndPropProbably,
-            CanPlay("'audio/x-mp3; codecs=\"theora\"'"));
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/x-mp3; codecs=\"vp8\"'"));
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/x-mp3; codecs=\"vp8.0\"'"));
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/x-mp3; codecs=\"vp9\"'"));
-  EXPECT_EQ(kPropProbably, CanPlay("'audio/x-mp3; codecs=\"vp9.0\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"vorbis\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"opus\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"theora\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"vp8\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"vp8.0\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"vp9\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"vp9.0\"'"));
 
-  EXPECT_EQ(kPropMaybe, CanPlay("'audio/x-mp3; codecs=\"AVC1\"'"));
-  EXPECT_EQ(kPropMaybe, CanPlay("'audio/x-mp3; codecs=\"AVC1.4d401e\"'"));
-  EXPECT_EQ(kPropMaybe, CanPlay("'audio/x-mp3; codecs=\"AVC3\"'"));
-  EXPECT_EQ(kPropMaybe, CanPlay("'audio/x-mp3; codecs=\"AVC3.64001f\"'"));
-  EXPECT_EQ(kPropMaybe, CanPlay("'audio/x-mp3; codecs=\"MP4A\"'"));
-  EXPECT_EQ(kPropMaybe, CanPlay("'audio/x-mp3; codecs=\"MP4A.40.2\"'"));
-  EXPECT_EQ(kPropMaybe, CanPlay("'audio/x-mp3; codecs=\"AVC1, MP4\"'"));
-  EXPECT_EQ(kPropMaybe, CanPlay("'audio/x-mp3; codecs=\"AVC3, MP4\"'"));
-  EXPECT_EQ(kPropMaybe,
-            CanPlay("'audio/x-mp3; codecs=\", AVC1.4D401E, MP4.40.2\"'"));
-  EXPECT_EQ(kPropMaybe,
-            CanPlay("'audio/x-mp3; codecs=\", AVC3.64001F, MP4.40.2\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"AVC1\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"AVC1.4d401e\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"AVC3\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"AVC3.64001f\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"MP4A\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"MP4A.40.2\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"AVC1, MP4\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"AVC3, MP4\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\", AVC1.4D401E, MP4.40.2\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\", AVC3.64001F, MP4.40.2\"'"));
 
-  EXPECT_EQ(kPropMaybe, CanPlay("'audio/x-mp3; codecs=\"avc2\"'"));
-  EXPECT_EQ(kPropMaybe, CanPlay("'audio/x-mp3; codecs=\"avc4\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"avc2\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"avc4\"'"));
 
-  EXPECT_EQ(kPropMaybe, CanPlay("'audio/x-mp3; codecs=\"avc1x\"'"));
-  EXPECT_EQ(kPropMaybe, CanPlay("'audio/x-mp3; codecs=\"avc3x\"'"));
-  EXPECT_EQ(kPropMaybe, CanPlay("'audio/x-mp3; codecs=\"mp4ax\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"avc1x\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"avc3x\"'"));
+  EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"mp4ax\"'"));
 
-  EXPECT_EQ(kPropMaybe, CanPlay("'audio/x-mp3; codecs=\"unknown\"'"));
-  // ---------------------------------------------------------------------------
+  EXPECT_EQ(kNot, CanPlay("'audio/x-mp3; codecs=\"unknown\"'"));
 }
 
 IN_PROC_BROWSER_TEST_F(MediaCanPlayTypeTest, CodecSupportTest_mp4) {
diff --git a/content/browser/media/webrtc_browsertest.cc b/content/browser/media/webrtc_browsertest.cc
index 9f1d522..d67f173 100644
--- a/content/browser/media/webrtc_browsertest.cc
+++ b/content/browser/media/webrtc_browsertest.cc
@@ -20,6 +20,14 @@
 #include "base/win/windows_version.h"
 #endif
 
+#if defined (OS_ANDROID) || defined(THREAD_SANITIZER)
+// Just do the bare minimum of audio checking on Android and under TSAN since
+// it's a bit sensitive to device performance.
+static const char kUseLenientAudioChecking[] = "true";
+#else
+static const char kUseLenientAudioChecking[] = "false";
+#endif
+
 namespace content {
 
 class WebRtcBrowserTest : public WebRtcContentBrowserTest,
@@ -305,16 +313,14 @@
           << "Must run with fake devices since the test will explicitly look "
           << "for the fake device signal.";
 
-  MakeTypicalPeerConnectionCall("callAndEnsureAudioIsPlaying();");
+  MakeTypicalPeerConnectionCall(base::StringPrintf(
+      "callAndEnsureAudioIsPlaying(%s);", kUseLenientAudioChecking));
 }
 
 IN_PROC_BROWSER_TEST_P(WebRtcBrowserTest,
                        EstablishAudioVideoCallAndVerifyMutingWorks) {
   if (!media::AudioManager::Get()->HasAudioOutputDevices()) {
-    // Bots with no output devices will force the audio code into a different
-    // path where it doesn't manage to set either the low or high latency path.
-    // This test will compute useless values in that case, so skip running on
-    // such bots (see crbug.com/326338).
+    // See comment on EstablishAudioVideoCallAndMeasureOutputLevel.
     LOG(INFO) << "Missing output devices: skipping test...";
     return;
   }
@@ -324,13 +330,14 @@
           << "Must run with fake devices since the test will explicitly look "
           << "for the fake device signal.";
 
-  MakeTypicalPeerConnectionCall("callAndEnsureAudioTrackMutingWorks();");
+  MakeTypicalPeerConnectionCall(base::StringPrintf(
+      "callAndEnsureAudioTrackMutingWorks(%s);", kUseLenientAudioChecking));
 }
 
 IN_PROC_BROWSER_TEST_P(WebRtcBrowserTest,
                        EstablishAudioVideoCallAndVerifyUnmutingWorks) {
   if (!media::AudioManager::Get()->HasAudioOutputDevices()) {
-    // See comment on EstablishAudioVideoCallAndVerifyMutingWorks.
+    // See comment on EstablishAudioVideoCallAndMeasureOutputLevel.
     LOG(INFO) << "Missing output devices: skipping test...";
     return;
   }
@@ -340,7 +347,8 @@
           << "Must run with fake devices since the test will explicitly look "
           << "for the fake device signal.";
 
-  MakeTypicalPeerConnectionCall("callAndEnsureAudioTrackUnmutingWorks();");
+  MakeTypicalPeerConnectionCall(base::StringPrintf(
+      "callAndEnsureAudioTrackUnmutingWorks(%s);", kUseLenientAudioChecking));
 }
 
 IN_PROC_BROWSER_TEST_P(WebRtcBrowserTest, CallAndVerifyVideoMutingWorks) {
diff --git a/content/browser/power_save_blocker_android.cc b/content/browser/power_save_blocker_android.cc
index ad9b24c..79da1a9 100644
--- a/content/browser/power_save_blocker_android.cc
+++ b/content/browser/power_save_blocker_android.cc
@@ -5,7 +5,7 @@
 #include "content/browser/power_save_blocker_android.h"
 
 #include "base/android/jni_android.h"
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/logging.h"
 #include "content/browser/power_save_blocker_impl.h"
 #include "content/public/browser/android/content_view_core.h"
diff --git a/content/browser/quota/mock_quota_manager_unittest.cc b/content/browser/quota/mock_quota_manager_unittest.cc
index 9deef8d..a66477c 100644
--- a/content/browser/quota/mock_quota_manager_unittest.cc
+++ b/content/browser/quota/mock_quota_manager_unittest.cc
@@ -11,9 +11,9 @@
 #include "base/message_loop/message_loop_proxy.h"
 #include "base/run_loop.h"
 #include "content/browser/quota/mock_quota_manager.h"
+#include "content/public/test/mock_storage_client.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "webkit/browser/quota/mock_special_storage_policy.h"
-#include "webkit/browser/quota/mock_storage_client.h"
 
 using quota::kQuotaStatusOk;
 using quota::kStorageTypePersistent;
diff --git a/content/browser/quota/quota_database_unittest.cc b/content/browser/quota/quota_database_unittest.cc
new file mode 100644
index 0000000..9055436
--- /dev/null
+++ b/content/browser/quota/quota_database_unittest.cc
@@ -0,0 +1,568 @@
+// 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.
+
+#include <algorithm>
+#include <iterator>
+#include <set>
+
+#include "base/bind.h"
+#include "base/callback.h"
+#include "base/file_util.h"
+#include "base/files/scoped_temp_dir.h"
+#include "base/message_loop/message_loop.h"
+#include "sql/connection.h"
+#include "sql/meta_table.h"
+#include "sql/statement.h"
+#include "sql/transaction.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "url/gurl.h"
+#include "webkit/browser/quota/mock_special_storage_policy.h"
+#include "webkit/browser/quota/quota_database.h"
+
+using quota::kStorageTypePersistent;
+using quota::kStorageTypeTemporary;
+using quota::MockSpecialStoragePolicy;
+using quota::QuotaDatabase;
+
+namespace content {
+namespace {
+
+const base::Time kZeroTime;
+
+const char kDBFileName[] = "quota_manager.db";
+
+}  // namespace
+
+class QuotaDatabaseTest : public testing::Test {
+ protected:
+  typedef QuotaDatabase::QuotaTableEntry QuotaTableEntry;
+  typedef QuotaDatabase::QuotaTableCallback QuotaTableCallback;
+  typedef QuotaDatabase::OriginInfoTableCallback
+      OriginInfoTableCallback;
+
+  void LazyOpen(const base::FilePath& kDbFile) {
+    QuotaDatabase db(kDbFile);
+    EXPECT_FALSE(db.LazyOpen(false));
+    ASSERT_TRUE(db.LazyOpen(true));
+    EXPECT_TRUE(db.db_.get());
+    EXPECT_TRUE(kDbFile.empty() || base::PathExists(kDbFile));
+  }
+
+  void UpgradeSchemaV2toV3(const base::FilePath& kDbFile) {
+    const QuotaTableEntry entries[] = {
+      QuotaTableEntry("a", kStorageTypeTemporary,  1),
+      QuotaTableEntry("b", kStorageTypeTemporary,  2),
+      QuotaTableEntry("c", kStorageTypePersistent, 3),
+    };
+
+    CreateV2Database(kDbFile, entries, ARRAYSIZE_UNSAFE(entries));
+
+    QuotaDatabase db(kDbFile);
+    EXPECT_TRUE(db.LazyOpen(true));
+    EXPECT_TRUE(db.db_.get());
+
+    typedef EntryVerifier<QuotaTableEntry> Verifier;
+    Verifier verifier(entries, entries + ARRAYSIZE_UNSAFE(entries));
+    EXPECT_TRUE(db.DumpQuotaTable(
+        base::Bind(&Verifier::Run, base::Unretained(&verifier))));
+    EXPECT_TRUE(verifier.table.empty());
+  }
+
+  void HostQuota(const base::FilePath& kDbFile) {
+    QuotaDatabase db(kDbFile);
+    ASSERT_TRUE(db.LazyOpen(true));
+
+    const char* kHost = "foo.com";
+    const int kQuota1 = 13579;
+    const int kQuota2 = kQuota1 + 1024;
+
+    int64 quota = -1;
+    EXPECT_FALSE(db.GetHostQuota(kHost, kStorageTypeTemporary, &quota));
+    EXPECT_FALSE(db.GetHostQuota(kHost, kStorageTypePersistent, &quota));
+
+    // Insert quota for temporary.
+    EXPECT_TRUE(db.SetHostQuota(kHost, kStorageTypeTemporary, kQuota1));
+    EXPECT_TRUE(db.GetHostQuota(kHost, kStorageTypeTemporary, &quota));
+    EXPECT_EQ(kQuota1, quota);
+
+    // Update quota for temporary.
+    EXPECT_TRUE(db.SetHostQuota(kHost, kStorageTypeTemporary, kQuota2));
+    EXPECT_TRUE(db.GetHostQuota(kHost, kStorageTypeTemporary, &quota));
+    EXPECT_EQ(kQuota2, quota);
+
+    // Quota for persistent must not be updated.
+    EXPECT_FALSE(db.GetHostQuota(kHost, kStorageTypePersistent, &quota));
+
+    // Delete temporary storage quota.
+    EXPECT_TRUE(db.DeleteHostQuota(kHost, kStorageTypeTemporary));
+    EXPECT_FALSE(db.GetHostQuota(kHost, kStorageTypeTemporary, &quota));
+  }
+
+  void GlobalQuota(const base::FilePath& kDbFile) {
+    QuotaDatabase db(kDbFile);
+    ASSERT_TRUE(db.LazyOpen(true));
+
+    const char* kTempQuotaKey = QuotaDatabase::kTemporaryQuotaOverrideKey;
+    const char* kAvailSpaceKey = QuotaDatabase::kDesiredAvailableSpaceKey;
+
+    int64 value = 0;
+    const int64 kValue1 = 456;
+    const int64 kValue2 = 123000;
+    EXPECT_FALSE(db.GetQuotaConfigValue(kTempQuotaKey, &value));
+    EXPECT_FALSE(db.GetQuotaConfigValue(kAvailSpaceKey, &value));
+
+    EXPECT_TRUE(db.SetQuotaConfigValue(kTempQuotaKey, kValue1));
+    EXPECT_TRUE(db.GetQuotaConfigValue(kTempQuotaKey, &value));
+    EXPECT_EQ(kValue1, value);
+
+    EXPECT_TRUE(db.SetQuotaConfigValue(kTempQuotaKey, kValue2));
+    EXPECT_TRUE(db.GetQuotaConfigValue(kTempQuotaKey, &value));
+    EXPECT_EQ(kValue2, value);
+
+    EXPECT_TRUE(db.SetQuotaConfigValue(kAvailSpaceKey, kValue1));
+    EXPECT_TRUE(db.GetQuotaConfigValue(kAvailSpaceKey, &value));
+    EXPECT_EQ(kValue1, value);
+
+    EXPECT_TRUE(db.SetQuotaConfigValue(kAvailSpaceKey, kValue2));
+    EXPECT_TRUE(db.GetQuotaConfigValue(kAvailSpaceKey, &value));
+    EXPECT_EQ(kValue2, value);
+  }
+
+  void OriginLastAccessTimeLRU(const base::FilePath& kDbFile) {
+    QuotaDatabase db(kDbFile);
+    ASSERT_TRUE(db.LazyOpen(true));
+
+    std::set<GURL> exceptions;
+    GURL origin;
+    EXPECT_TRUE(db.GetLRUOrigin(kStorageTypeTemporary, exceptions,
+                                NULL, &origin));
+    EXPECT_TRUE(origin.is_empty());
+
+    const GURL kOrigin1("http://a/");
+    const GURL kOrigin2("http://b/");
+    const GURL kOrigin3("http://c/");
+    const GURL kOrigin4("http://p/");
+
+    // Adding three temporary storages, and
+    EXPECT_TRUE(db.SetOriginLastAccessTime(
+        kOrigin1, kStorageTypeTemporary, base::Time::FromInternalValue(10)));
+    EXPECT_TRUE(db.SetOriginLastAccessTime(
+        kOrigin2, kStorageTypeTemporary, base::Time::FromInternalValue(20)));
+    EXPECT_TRUE(db.SetOriginLastAccessTime(
+        kOrigin3, kStorageTypeTemporary, base::Time::FromInternalValue(30)));
+
+    // one persistent.
+    EXPECT_TRUE(db.SetOriginLastAccessTime(
+        kOrigin4, kStorageTypePersistent, base::Time::FromInternalValue(40)));
+
+    EXPECT_TRUE(db.GetLRUOrigin(kStorageTypeTemporary, exceptions,
+                                NULL, &origin));
+    EXPECT_EQ(kOrigin1.spec(), origin.spec());
+
+    // Test that unlimited origins are exluded from eviction, but
+    // protected origins are not excluded.
+    scoped_refptr<MockSpecialStoragePolicy> policy(
+        new MockSpecialStoragePolicy);
+    policy->AddUnlimited(kOrigin1);
+    policy->AddProtected(kOrigin2);
+    EXPECT_TRUE(db.GetLRUOrigin(
+        kStorageTypeTemporary, exceptions, policy.get(), &origin));
+    EXPECT_EQ(kOrigin2.spec(), origin.spec());
+
+    exceptions.insert(kOrigin1);
+    EXPECT_TRUE(db.GetLRUOrigin(kStorageTypeTemporary, exceptions,
+                                NULL, &origin));
+    EXPECT_EQ(kOrigin2.spec(), origin.spec());
+
+    exceptions.insert(kOrigin2);
+    EXPECT_TRUE(db.GetLRUOrigin(kStorageTypeTemporary, exceptions,
+                                NULL, &origin));
+    EXPECT_EQ(kOrigin3.spec(), origin.spec());
+
+    exceptions.insert(kOrigin3);
+    EXPECT_TRUE(db.GetLRUOrigin(kStorageTypeTemporary, exceptions,
+                                NULL, &origin));
+    EXPECT_TRUE(origin.is_empty());
+
+    EXPECT_TRUE(db.SetOriginLastAccessTime(
+        kOrigin1, kStorageTypeTemporary, base::Time::Now()));
+
+    // Delete origin/type last access time information.
+    EXPECT_TRUE(db.DeleteOriginInfo(kOrigin3, kStorageTypeTemporary));
+
+    // Querying again to see if the deletion has worked.
+    exceptions.clear();
+    EXPECT_TRUE(db.GetLRUOrigin(kStorageTypeTemporary, exceptions,
+                                NULL, &origin));
+    EXPECT_EQ(kOrigin2.spec(), origin.spec());
+
+    exceptions.insert(kOrigin1);
+    exceptions.insert(kOrigin2);
+    EXPECT_TRUE(db.GetLRUOrigin(kStorageTypeTemporary, exceptions,
+                                NULL, &origin));
+    EXPECT_TRUE(origin.is_empty());
+  }
+
+  void OriginLastModifiedSince(const base::FilePath& kDbFile) {
+    QuotaDatabase db(kDbFile);
+    ASSERT_TRUE(db.LazyOpen(true));
+
+    std::set<GURL> origins;
+    EXPECT_TRUE(db.GetOriginsModifiedSince(
+        kStorageTypeTemporary, &origins, base::Time()));
+    EXPECT_TRUE(origins.empty());
+
+    const GURL kOrigin1("http://a/");
+    const GURL kOrigin2("http://b/");
+    const GURL kOrigin3("http://c/");
+
+    // Report last mod time for the test origins.
+    EXPECT_TRUE(db.SetOriginLastModifiedTime(
+        kOrigin1, kStorageTypeTemporary, base::Time::FromInternalValue(0)));
+    EXPECT_TRUE(db.SetOriginLastModifiedTime(
+        kOrigin2, kStorageTypeTemporary, base::Time::FromInternalValue(10)));
+    EXPECT_TRUE(db.SetOriginLastModifiedTime(
+        kOrigin3, kStorageTypeTemporary, base::Time::FromInternalValue(20)));
+
+    EXPECT_TRUE(db.GetOriginsModifiedSince(
+        kStorageTypeTemporary, &origins, base::Time()));
+    EXPECT_EQ(3U, origins.size());
+    EXPECT_EQ(1U, origins.count(kOrigin1));
+    EXPECT_EQ(1U, origins.count(kOrigin2));
+    EXPECT_EQ(1U, origins.count(kOrigin3));
+
+    EXPECT_TRUE(db.GetOriginsModifiedSince(
+        kStorageTypeTemporary, &origins, base::Time::FromInternalValue(5)));
+    EXPECT_EQ(2U, origins.size());
+    EXPECT_EQ(0U, origins.count(kOrigin1));
+    EXPECT_EQ(1U, origins.count(kOrigin2));
+    EXPECT_EQ(1U, origins.count(kOrigin3));
+
+    EXPECT_TRUE(db.GetOriginsModifiedSince(
+        kStorageTypeTemporary, &origins, base::Time::FromInternalValue(15)));
+    EXPECT_EQ(1U, origins.size());
+    EXPECT_EQ(0U, origins.count(kOrigin1));
+    EXPECT_EQ(0U, origins.count(kOrigin2));
+    EXPECT_EQ(1U, origins.count(kOrigin3));
+
+    EXPECT_TRUE(db.GetOriginsModifiedSince(
+        kStorageTypeTemporary, &origins, base::Time::FromInternalValue(25)));
+    EXPECT_TRUE(origins.empty());
+
+    // Update origin1's mod time but for persistent storage.
+    EXPECT_TRUE(db.SetOriginLastModifiedTime(
+        kOrigin1, kStorageTypePersistent, base::Time::FromInternalValue(30)));
+
+    // Must have no effects on temporary origins info.
+    EXPECT_TRUE(db.GetOriginsModifiedSince(
+        kStorageTypeTemporary, &origins, base::Time::FromInternalValue(5)));
+    EXPECT_EQ(2U, origins.size());
+    EXPECT_EQ(0U, origins.count(kOrigin1));
+    EXPECT_EQ(1U, origins.count(kOrigin2));
+    EXPECT_EQ(1U, origins.count(kOrigin3));
+
+    // One more update for persistent origin2.
+    EXPECT_TRUE(db.SetOriginLastModifiedTime(
+        kOrigin2, kStorageTypePersistent, base::Time::FromInternalValue(40)));
+
+    EXPECT_TRUE(db.GetOriginsModifiedSince(
+        kStorageTypePersistent, &origins, base::Time::FromInternalValue(25)));
+    EXPECT_EQ(2U, origins.size());
+    EXPECT_EQ(1U, origins.count(kOrigin1));
+    EXPECT_EQ(1U, origins.count(kOrigin2));
+    EXPECT_EQ(0U, origins.count(kOrigin3));
+
+    EXPECT_TRUE(db.GetOriginsModifiedSince(
+        kStorageTypePersistent, &origins, base::Time::FromInternalValue(35)));
+    EXPECT_EQ(1U, origins.size());
+    EXPECT_EQ(0U, origins.count(kOrigin1));
+    EXPECT_EQ(1U, origins.count(kOrigin2));
+    EXPECT_EQ(0U, origins.count(kOrigin3));
+  }
+
+  void RegisterInitialOriginInfo(const base::FilePath& kDbFile) {
+    QuotaDatabase db(kDbFile);
+
+    const GURL kOrigins[] = {
+      GURL("http://a/"),
+      GURL("http://b/"),
+      GURL("http://c/") };
+    std::set<GURL> origins(kOrigins, kOrigins + ARRAYSIZE_UNSAFE(kOrigins));
+
+    EXPECT_TRUE(db.RegisterInitialOriginInfo(origins, kStorageTypeTemporary));
+
+    int used_count = -1;
+    EXPECT_TRUE(db.FindOriginUsedCount(GURL("http://a/"),
+                                       kStorageTypeTemporary,
+                                       &used_count));
+    EXPECT_EQ(0, used_count);
+
+    EXPECT_TRUE(db.SetOriginLastAccessTime(
+        GURL("http://a/"), kStorageTypeTemporary,
+        base::Time::FromDoubleT(1.0)));
+    used_count = -1;
+    EXPECT_TRUE(db.FindOriginUsedCount(GURL("http://a/"),
+                                       kStorageTypeTemporary,
+                                       &used_count));
+    EXPECT_EQ(1, used_count);
+
+    EXPECT_TRUE(db.RegisterInitialOriginInfo(origins, kStorageTypeTemporary));
+
+    used_count = -1;
+    EXPECT_TRUE(db.FindOriginUsedCount(GURL("http://a/"),
+                                       kStorageTypeTemporary,
+                                       &used_count));
+    EXPECT_EQ(1, used_count);
+  }
+
+  template <typename EntryType>
+  struct EntryVerifier {
+    std::set<EntryType> table;
+
+    template <typename Iterator>
+    EntryVerifier(Iterator itr, Iterator end)
+        : table(itr, end) {}
+
+    bool Run(const EntryType& entry) {
+      EXPECT_EQ(1u, table.erase(entry));
+      return true;
+    }
+  };
+
+  void DumpQuotaTable(const base::FilePath& kDbFile) {
+    QuotaTableEntry kTableEntries[] = {
+      QuotaTableEntry("http://go/", kStorageTypeTemporary, 1),
+      QuotaTableEntry("http://oo/", kStorageTypeTemporary, 2),
+      QuotaTableEntry("http://gle/", kStorageTypePersistent, 3)
+    };
+    QuotaTableEntry* begin = kTableEntries;
+    QuotaTableEntry* end = kTableEntries + ARRAYSIZE_UNSAFE(kTableEntries);
+
+    QuotaDatabase db(kDbFile);
+    EXPECT_TRUE(db.LazyOpen(true));
+    AssignQuotaTable(db.db_.get(), begin, end);
+    db.Commit();
+
+    typedef EntryVerifier<QuotaTableEntry> Verifier;
+    Verifier verifier(begin, end);
+    EXPECT_TRUE(db.DumpQuotaTable(
+        base::Bind(&Verifier::Run, base::Unretained(&verifier))));
+    EXPECT_TRUE(verifier.table.empty());
+  }
+
+  void DumpOriginInfoTable(const base::FilePath& kDbFile) {
+    base::Time now(base::Time::Now());
+    typedef QuotaDatabase::OriginInfoTableEntry Entry;
+    Entry kTableEntries[] = {
+      Entry(GURL("http://go/"), kStorageTypeTemporary, 2147483647, now, now),
+      Entry(GURL("http://oo/"), kStorageTypeTemporary, 0, now, now),
+      Entry(GURL("http://gle/"), kStorageTypeTemporary, 1, now, now),
+    };
+    Entry* begin = kTableEntries;
+    Entry* end = kTableEntries + ARRAYSIZE_UNSAFE(kTableEntries);
+
+    QuotaDatabase db(kDbFile);
+    EXPECT_TRUE(db.LazyOpen(true));
+    AssignOriginInfoTable(db.db_.get(), begin, end);
+    db.Commit();
+
+    typedef EntryVerifier<Entry> Verifier;
+    Verifier verifier(begin, end);
+    EXPECT_TRUE(db.DumpOriginInfoTable(
+        base::Bind(&Verifier::Run, base::Unretained(&verifier))));
+    EXPECT_TRUE(verifier.table.empty());
+  }
+
+ private:
+  template <typename Iterator>
+  void AssignQuotaTable(sql::Connection* db, Iterator itr, Iterator end) {
+    ASSERT_NE(db, (sql::Connection*)NULL);
+    for (; itr != end; ++itr) {
+      const char* kSql =
+          "INSERT INTO HostQuotaTable"
+          " (host, type, quota)"
+          " VALUES (?, ?, ?)";
+      sql::Statement statement;
+      statement.Assign(db->GetCachedStatement(SQL_FROM_HERE, kSql));
+      ASSERT_TRUE(statement.is_valid());
+
+      statement.BindString(0, itr->host);
+      statement.BindInt(1, static_cast<int>(itr->type));
+      statement.BindInt64(2, itr->quota);
+      EXPECT_TRUE(statement.Run());
+    }
+  }
+
+  template <typename Iterator>
+  void AssignOriginInfoTable(sql::Connection* db, Iterator itr, Iterator end) {
+    ASSERT_NE(db, (sql::Connection*)NULL);
+    for (; itr != end; ++itr) {
+      const char* kSql =
+          "INSERT INTO OriginInfoTable"
+          " (origin, type, used_count, last_access_time, last_modified_time)"
+          " VALUES (?, ?, ?, ?, ?)";
+      sql::Statement statement;
+      statement.Assign(db->GetCachedStatement(SQL_FROM_HERE, kSql));
+      ASSERT_TRUE(statement.is_valid());
+
+      statement.BindString(0, itr->origin.spec());
+      statement.BindInt(1, static_cast<int>(itr->type));
+      statement.BindInt(2, itr->used_count);
+      statement.BindInt64(3, itr->last_access_time.ToInternalValue());
+      statement.BindInt64(4, itr->last_modified_time.ToInternalValue());
+      EXPECT_TRUE(statement.Run());
+    }
+  }
+
+  bool OpenDatabase(sql::Connection* db, const base::FilePath& kDbFile) {
+    if (kDbFile.empty()) {
+      return db->OpenInMemory();
+    }
+    if (!base::CreateDirectory(kDbFile.DirName()))
+      return false;
+    if (!db->Open(kDbFile))
+      return false;
+    db->Preload();
+    return true;
+  }
+
+  // Create V2 database and populate some data.
+  void CreateV2Database(
+      const base::FilePath& kDbFile,
+      const QuotaTableEntry* entries,
+      size_t entries_size) {
+    scoped_ptr<sql::Connection> db(new sql::Connection);
+    scoped_ptr<sql::MetaTable> meta_table(new sql::MetaTable);
+
+    // V2 schema definitions.
+    static const int kCurrentVersion = 2;
+    static const int kCompatibleVersion = 2;
+    static const char kHostQuotaTable[] = "HostQuotaTable";
+    static const char kOriginLastAccessTable[] = "OriginLastAccessTable";
+    static const QuotaDatabase::TableSchema kTables[] = {
+      { kHostQuotaTable,
+        "(host TEXT NOT NULL,"
+        " type INTEGER NOT NULL,"
+        " quota INTEGER,"
+        " UNIQUE(host, type))" },
+      { kOriginLastAccessTable,
+        "(origin TEXT NOT NULL,"
+        " type INTEGER NOT NULL,"
+        " used_count INTEGER,"
+        " last_access_time INTEGER,"
+        " UNIQUE(origin, type))" },
+    };
+    static const QuotaDatabase::IndexSchema kIndexes[] = {
+      { "HostIndex",
+        kHostQuotaTable,
+        "(host)",
+        false },
+      { "OriginLastAccessIndex",
+        kOriginLastAccessTable,
+        "(origin, last_access_time)",
+        false },
+    };
+
+    ASSERT_TRUE(OpenDatabase(db.get(), kDbFile));
+    EXPECT_TRUE(QuotaDatabase::CreateSchema(
+            db.get(), meta_table.get(),
+            kCurrentVersion, kCompatibleVersion,
+            kTables, ARRAYSIZE_UNSAFE(kTables),
+            kIndexes, ARRAYSIZE_UNSAFE(kIndexes)));
+
+    // V2 and V3 QuotaTable are compatible, so we can simply use
+    // AssignQuotaTable to poplulate v2 database here.
+    db->BeginTransaction();
+    AssignQuotaTable(db.get(), entries, entries + entries_size);
+    db->CommitTransaction();
+  }
+
+  base::MessageLoop message_loop_;
+};
+
+TEST_F(QuotaDatabaseTest, LazyOpen) {
+  base::ScopedTempDir data_dir;
+  ASSERT_TRUE(data_dir.CreateUniqueTempDir());
+  const base::FilePath kDbFile = data_dir.path().AppendASCII(kDBFileName);
+  LazyOpen(kDbFile);
+  LazyOpen(base::FilePath());
+}
+
+TEST_F(QuotaDatabaseTest, UpgradeSchema) {
+  base::ScopedTempDir data_dir;
+  ASSERT_TRUE(data_dir.CreateUniqueTempDir());
+  const base::FilePath kDbFile = data_dir.path().AppendASCII(kDBFileName);
+  UpgradeSchemaV2toV3(kDbFile);
+}
+
+TEST_F(QuotaDatabaseTest, HostQuota) {
+  base::ScopedTempDir data_dir;
+  ASSERT_TRUE(data_dir.CreateUniqueTempDir());
+  const base::FilePath kDbFile = data_dir.path().AppendASCII(kDBFileName);
+  HostQuota(kDbFile);
+  HostQuota(base::FilePath());
+}
+
+TEST_F(QuotaDatabaseTest, GlobalQuota) {
+  base::ScopedTempDir data_dir;
+  ASSERT_TRUE(data_dir.CreateUniqueTempDir());
+  const base::FilePath kDbFile = data_dir.path().AppendASCII(kDBFileName);
+  GlobalQuota(kDbFile);
+  GlobalQuota(base::FilePath());
+}
+
+TEST_F(QuotaDatabaseTest, OriginLastAccessTimeLRU) {
+  base::ScopedTempDir data_dir;
+  ASSERT_TRUE(data_dir.CreateUniqueTempDir());
+  const base::FilePath kDbFile = data_dir.path().AppendASCII(kDBFileName);
+  OriginLastAccessTimeLRU(kDbFile);
+  OriginLastAccessTimeLRU(base::FilePath());
+}
+
+TEST_F(QuotaDatabaseTest, OriginLastModifiedSince) {
+  base::ScopedTempDir data_dir;
+  ASSERT_TRUE(data_dir.CreateUniqueTempDir());
+  const base::FilePath kDbFile = data_dir.path().AppendASCII(kDBFileName);
+  OriginLastModifiedSince(kDbFile);
+  OriginLastModifiedSince(base::FilePath());
+}
+
+TEST_F(QuotaDatabaseTest, BootstrapFlag) {
+  base::ScopedTempDir data_dir;
+  ASSERT_TRUE(data_dir.CreateUniqueTempDir());
+
+  const base::FilePath kDbFile = data_dir.path().AppendASCII(kDBFileName);
+  QuotaDatabase db(kDbFile);
+
+  EXPECT_FALSE(db.IsOriginDatabaseBootstrapped());
+  EXPECT_TRUE(db.SetOriginDatabaseBootstrapped(true));
+  EXPECT_TRUE(db.IsOriginDatabaseBootstrapped());
+  EXPECT_TRUE(db.SetOriginDatabaseBootstrapped(false));
+  EXPECT_FALSE(db.IsOriginDatabaseBootstrapped());
+}
+
+TEST_F(QuotaDatabaseTest, RegisterInitialOriginInfo) {
+  base::ScopedTempDir data_dir;
+  ASSERT_TRUE(data_dir.CreateUniqueTempDir());
+  const base::FilePath kDbFile = data_dir.path().AppendASCII(kDBFileName);
+  RegisterInitialOriginInfo(kDbFile);
+  RegisterInitialOriginInfo(base::FilePath());
+}
+
+TEST_F(QuotaDatabaseTest, DumpQuotaTable) {
+  base::ScopedTempDir data_dir;
+  ASSERT_TRUE(data_dir.CreateUniqueTempDir());
+  const base::FilePath kDbFile = data_dir.path().AppendASCII(kDBFileName);
+  DumpQuotaTable(kDbFile);
+  DumpQuotaTable(base::FilePath());
+}
+
+TEST_F(QuotaDatabaseTest, DumpOriginInfoTable) {
+  base::ScopedTempDir data_dir;
+  ASSERT_TRUE(data_dir.CreateUniqueTempDir());
+  const base::FilePath kDbFile = data_dir.path().AppendASCII(kDBFileName);
+  DumpOriginInfoTable(kDbFile);
+  DumpOriginInfoTable(base::FilePath());
+}
+}  // namespace content
diff --git a/content/browser/quota/quota_manager_unittest.cc b/content/browser/quota/quota_manager_unittest.cc
new file mode 100644
index 0000000..0badd80
--- /dev/null
+++ b/content/browser/quota/quota_manager_unittest.cc
@@ -0,0 +1,2191 @@
+// 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.
+
+#include <algorithm>
+#include <set>
+#include <sstream>
+#include <vector>
+
+#include "base/bind.h"
+#include "base/file_util.h"
+#include "base/files/scoped_temp_dir.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/memory/weak_ptr.h"
+#include "base/message_loop/message_loop_proxy.h"
+#include "base/run_loop.h"
+#include "base/stl_util.h"
+#include "base/sys_info.h"
+#include "base/time/time.h"
+#include "content/public/test/mock_storage_client.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "url/gurl.h"
+#include "webkit/browser/quota/mock_special_storage_policy.h"
+#include "webkit/browser/quota/quota_database.h"
+#include "webkit/browser/quota/quota_manager.h"
+#include "webkit/browser/quota/quota_manager_proxy.h"
+
+using base::MessageLoopProxy;
+using quota::kQuotaErrorAbort;
+using quota::kQuotaErrorInvalidModification;
+using quota::kQuotaErrorNotSupported;
+using quota::kQuotaStatusOk;
+using quota::kQuotaStatusUnknown;
+using quota::kStorageTypePersistent;
+using quota::kStorageTypeSyncable;
+using quota::kStorageTypeTemporary;
+using quota::kStorageTypeUnknown;
+using quota::MockSpecialStoragePolicy;
+using quota::QuotaClient;
+using quota::QuotaManager;
+using quota::QuotaStatusCode;
+using quota::StorageType;
+using quota::UsageAndQuota;
+using quota::UsageInfo;
+using quota::UsageInfoEntries;
+
+namespace content {
+
+namespace {
+
+// For shorter names.
+const StorageType kTemp = kStorageTypeTemporary;
+const StorageType kPerm = kStorageTypePersistent;
+const StorageType kSync = kStorageTypeSyncable;
+
+const int kAllClients = QuotaClient::kAllClientsMask;
+
+const int64 kAvailableSpaceForApp = 13377331U;
+
+const int64 kMinimumPreserveForSystem = QuotaManager::kMinimumPreserveForSystem;
+const int kPerHostTemporaryPortion = QuotaManager::kPerHostTemporaryPortion;
+
+// Returns a deterministic value for the amount of available disk space.
+int64 GetAvailableDiskSpaceForTest(const base::FilePath&) {
+  return kAvailableSpaceForApp + kMinimumPreserveForSystem;
+}
+
+}  // namespace
+
+class QuotaManagerTest : public testing::Test {
+ protected:
+  typedef QuotaManager::QuotaTableEntry QuotaTableEntry;
+  typedef QuotaManager::QuotaTableEntries QuotaTableEntries;
+  typedef QuotaManager::OriginInfoTableEntries OriginInfoTableEntries;
+
+ public:
+  QuotaManagerTest()
+      : mock_time_counter_(0),
+        weak_factory_(this) {
+  }
+
+  virtual void SetUp() {
+    ASSERT_TRUE(data_dir_.CreateUniqueTempDir());
+    mock_special_storage_policy_ = new MockSpecialStoragePolicy;
+    ResetQuotaManager(false /* is_incognito */);
+  }
+
+  virtual void TearDown() {
+    // Make sure the quota manager cleans up correctly.
+    quota_manager_ = NULL;
+    base::RunLoop().RunUntilIdle();
+  }
+
+ protected:
+  void ResetQuotaManager(bool is_incognito) {
+    quota_manager_ = new QuotaManager(is_incognito,
+                                      data_dir_.path(),
+                                      MessageLoopProxy::current().get(),
+                                      MessageLoopProxy::current().get(),
+                                      mock_special_storage_policy_.get());
+    // Don't (automatically) start the eviction for testing.
+    quota_manager_->eviction_disabled_ = true;
+    // Don't query the hard disk for remaining capacity.
+    quota_manager_->get_disk_space_fn_ = &GetAvailableDiskSpaceForTest;
+    additional_callback_count_ = 0;
+  }
+
+  MockStorageClient* CreateClient(
+      const MockOriginData* mock_data,
+      size_t mock_data_size,
+      QuotaClient::ID id) {
+    return new MockStorageClient(quota_manager_->proxy(),
+                                 mock_data, id, mock_data_size);
+  }
+
+  void RegisterClient(MockStorageClient* client) {
+    quota_manager_->proxy()->RegisterClient(client);
+  }
+
+  void GetUsageInfo() {
+    usage_info_.clear();
+    quota_manager_->GetUsageInfo(
+        base::Bind(&QuotaManagerTest::DidGetUsageInfo,
+                   weak_factory_.GetWeakPtr()));
+  }
+
+  void GetUsageAndQuotaForWebApps(const GURL& origin,
+                                  StorageType type) {
+    quota_status_ = kQuotaStatusUnknown;
+    usage_ = -1;
+    quota_ = -1;
+    quota_manager_->GetUsageAndQuotaForWebApps(
+        origin, type, base::Bind(&QuotaManagerTest::DidGetUsageAndQuota,
+                                 weak_factory_.GetWeakPtr()));
+  }
+
+  void GetUsageAndQuotaForStorageClient(const GURL& origin,
+                                        StorageType type) {
+    quota_status_ = kQuotaStatusUnknown;
+    usage_ = -1;
+    quota_ = -1;
+    quota_manager_->GetUsageAndQuota(
+        origin, type, base::Bind(&QuotaManagerTest::DidGetUsageAndQuota,
+                                 weak_factory_.GetWeakPtr()));
+  }
+
+  void GetTemporaryGlobalQuota() {
+    quota_status_ = kQuotaStatusUnknown;
+    quota_ = -1;
+    quota_manager_->GetTemporaryGlobalQuota(
+        base::Bind(&QuotaManagerTest::DidGetQuota,
+                   weak_factory_.GetWeakPtr()));
+  }
+
+  void SetTemporaryGlobalQuota(int64 new_quota) {
+    quota_status_ = kQuotaStatusUnknown;
+    quota_ = -1;
+    quota_manager_->SetTemporaryGlobalOverrideQuota(
+        new_quota,
+        base::Bind(&QuotaManagerTest::DidGetQuota,
+                   weak_factory_.GetWeakPtr()));
+  }
+
+  void GetPersistentHostQuota(const std::string& host) {
+    quota_status_ = kQuotaStatusUnknown;
+    quota_ = -1;
+    quota_manager_->GetPersistentHostQuota(
+        host,
+        base::Bind(&QuotaManagerTest::DidGetHostQuota,
+                   weak_factory_.GetWeakPtr()));
+  }
+
+  void SetPersistentHostQuota(const std::string& host, int64 new_quota) {
+    quota_status_ = kQuotaStatusUnknown;
+    quota_ = -1;
+    quota_manager_->SetPersistentHostQuota(
+        host, new_quota,
+        base::Bind(&QuotaManagerTest::DidGetHostQuota,
+                   weak_factory_.GetWeakPtr()));
+  }
+
+  void GetGlobalUsage(StorageType type) {
+    usage_ = -1;
+    unlimited_usage_ = -1;
+    quota_manager_->GetGlobalUsage(
+        type,
+        base::Bind(&QuotaManagerTest::DidGetGlobalUsage,
+                   weak_factory_.GetWeakPtr()));
+  }
+
+  void GetHostUsage(const std::string& host, StorageType type) {
+    usage_ = -1;
+    quota_manager_->GetHostUsage(
+        host, type,
+        base::Bind(&QuotaManagerTest::DidGetHostUsage,
+                   weak_factory_.GetWeakPtr()));
+  }
+
+  void RunAdditionalUsageAndQuotaTask(const GURL& origin, StorageType type) {
+    quota_manager_->GetUsageAndQuota(
+        origin, type,
+        base::Bind(&QuotaManagerTest::DidGetUsageAndQuotaAdditional,
+                   weak_factory_.GetWeakPtr()));
+  }
+
+  void DeleteClientOriginData(QuotaClient* client,
+                              const GURL& origin,
+                              StorageType type) {
+    DCHECK(client);
+    quota_status_ = kQuotaStatusUnknown;
+    client->DeleteOriginData(
+        origin, type,
+        base::Bind(&QuotaManagerTest::StatusCallback,
+                   weak_factory_.GetWeakPtr()));
+  }
+
+  void EvictOriginData(const GURL& origin,
+                       StorageType type) {
+    quota_status_ = kQuotaStatusUnknown;
+    quota_manager_->EvictOriginData(
+        origin, type,
+        base::Bind(&QuotaManagerTest::StatusCallback,
+                   weak_factory_.GetWeakPtr()));
+  }
+
+  void DeleteOriginData(const GURL& origin,
+                        StorageType type,
+                        int quota_client_mask) {
+    quota_status_ = kQuotaStatusUnknown;
+    quota_manager_->DeleteOriginData(
+        origin, type, quota_client_mask,
+        base::Bind(&QuotaManagerTest::StatusCallback,
+                   weak_factory_.GetWeakPtr()));
+  }
+
+  void DeleteHostData(const std::string& host,
+                      StorageType type,
+                      int quota_client_mask) {
+    quota_status_ = kQuotaStatusUnknown;
+    quota_manager_->DeleteHostData(
+        host, type, quota_client_mask,
+        base::Bind(&QuotaManagerTest::StatusCallback,
+                   weak_factory_.GetWeakPtr()));
+  }
+
+  void GetAvailableSpace() {
+    quota_status_ = kQuotaStatusUnknown;
+    available_space_ = -1;
+    quota_manager_->GetAvailableSpace(
+        base::Bind(&QuotaManagerTest::DidGetAvailableSpace,
+                   weak_factory_.GetWeakPtr()));
+  }
+
+  void GetUsageAndQuotaForEviction() {
+    quota_status_ = kQuotaStatusUnknown;
+    usage_ = -1;
+    unlimited_usage_ = -1;
+    quota_ = -1;
+    available_space_ = -1;
+    quota_manager_->GetUsageAndQuotaForEviction(
+        base::Bind(&QuotaManagerTest::DidGetUsageAndQuotaForEviction,
+                   weak_factory_.GetWeakPtr()));
+  }
+
+  void GetCachedOrigins(StorageType type, std::set<GURL>* origins) {
+    ASSERT_TRUE(origins != NULL);
+    origins->clear();
+    quota_manager_->GetCachedOrigins(type, origins);
+  }
+
+  void NotifyStorageAccessed(QuotaClient* client,
+                             const GURL& origin,
+                             StorageType type) {
+    DCHECK(client);
+    quota_manager_->NotifyStorageAccessedInternal(
+        client->id(), origin, type, IncrementMockTime());
+  }
+
+  void DeleteOriginFromDatabase(const GURL& origin, StorageType type) {
+    quota_manager_->DeleteOriginFromDatabase(origin, type);
+  }
+
+  void GetLRUOrigin(StorageType type) {
+    lru_origin_ = GURL();
+    quota_manager_->GetLRUOrigin(
+        type,
+        base::Bind(&QuotaManagerTest::DidGetLRUOrigin,
+                   weak_factory_.GetWeakPtr()));
+  }
+
+  void NotifyOriginInUse(const GURL& origin) {
+    quota_manager_->NotifyOriginInUse(origin);
+  }
+
+  void NotifyOriginNoLongerInUse(const GURL& origin) {
+    quota_manager_->NotifyOriginNoLongerInUse(origin);
+  }
+
+  void GetOriginsModifiedSince(StorageType type, base::Time modified_since) {
+    modified_origins_.clear();
+    modified_origins_type_ = kStorageTypeUnknown;
+    quota_manager_->GetOriginsModifiedSince(
+        type, modified_since,
+        base::Bind(&QuotaManagerTest::DidGetModifiedOrigins,
+                   weak_factory_.GetWeakPtr()));
+  }
+
+  void DumpQuotaTable() {
+    quota_entries_.clear();
+    quota_manager_->DumpQuotaTable(
+        base::Bind(&QuotaManagerTest::DidDumpQuotaTable,
+                   weak_factory_.GetWeakPtr()));
+  }
+
+  void DumpOriginInfoTable() {
+    origin_info_entries_.clear();
+    quota_manager_->DumpOriginInfoTable(
+        base::Bind(&QuotaManagerTest::DidDumpOriginInfoTable,
+                   weak_factory_.GetWeakPtr()));
+  }
+
+  void DidGetUsageInfo(const UsageInfoEntries& entries) {
+    usage_info_.insert(usage_info_.begin(), entries.begin(), entries.end());
+  }
+
+  void DidGetUsageAndQuota(QuotaStatusCode status, int64 usage, int64 quota) {
+    quota_status_ = status;
+    usage_ = usage;
+    quota_ = quota;
+  }
+
+  void DidGetQuota(QuotaStatusCode status,
+                   int64 quota) {
+    quota_status_ = status;
+    quota_ = quota;
+  }
+
+  void DidGetAvailableSpace(QuotaStatusCode status, int64 available_space) {
+    quota_status_ = status;
+    available_space_ = available_space;
+  }
+
+  void DidGetHostQuota(QuotaStatusCode status,
+                       int64 quota) {
+    quota_status_ = status;
+    quota_ = quota;
+  }
+
+  void DidGetGlobalUsage(int64 usage,
+                         int64 unlimited_usage) {
+    usage_ = usage;
+    unlimited_usage_ = unlimited_usage;
+  }
+
+  void DidGetHostUsage(int64 usage) {
+    usage_ = usage;
+  }
+
+  void StatusCallback(QuotaStatusCode status) {
+    ++status_callback_count_;
+    quota_status_ = status;
+  }
+
+  void DidGetUsageAndQuotaForEviction(QuotaStatusCode status,
+                                      const UsageAndQuota& usage_and_quota) {
+    quota_status_ = status;
+    limited_usage_ = usage_and_quota.global_limited_usage;
+    quota_ = usage_and_quota.quota;
+    available_space_ = usage_and_quota.available_disk_space;
+  }
+
+  void DidGetLRUOrigin(const GURL& origin) {
+    lru_origin_ = origin;
+  }
+
+  void DidGetModifiedOrigins(const std::set<GURL>& origins, StorageType type) {
+    modified_origins_ = origins;
+    modified_origins_type_ = type;
+  }
+
+  void DidDumpQuotaTable(const QuotaTableEntries& entries) {
+    quota_entries_ = entries;
+  }
+
+  void DidDumpOriginInfoTable(const OriginInfoTableEntries& entries) {
+    origin_info_entries_ = entries;
+  }
+
+  void GetUsage_WithModifyTestBody(const StorageType type);
+
+  void set_additional_callback_count(int c) { additional_callback_count_ = c; }
+  int additional_callback_count() const { return additional_callback_count_; }
+  void DidGetUsageAndQuotaAdditional(
+      QuotaStatusCode status, int64 usage, int64 quota) {
+    ++additional_callback_count_;
+  }
+
+  QuotaManager* quota_manager() const { return quota_manager_.get(); }
+  void set_quota_manager(QuotaManager* quota_manager) {
+    quota_manager_ = quota_manager;
+  }
+
+  MockSpecialStoragePolicy* mock_special_storage_policy() const {
+    return mock_special_storage_policy_.get();
+  }
+
+  QuotaStatusCode status() const { return quota_status_; }
+  const UsageInfoEntries& usage_info() const { return usage_info_; }
+  int64 usage() const { return usage_; }
+  int64 limited_usage() const { return limited_usage_; }
+  int64 unlimited_usage() const { return unlimited_usage_; }
+  int64 quota() const { return quota_; }
+  int64 available_space() const { return available_space_; }
+  const GURL& lru_origin() const { return lru_origin_; }
+  const std::set<GURL>& modified_origins() const { return modified_origins_; }
+  StorageType modified_origins_type() const { return modified_origins_type_; }
+  const QuotaTableEntries& quota_entries() const { return quota_entries_; }
+  const OriginInfoTableEntries& origin_info_entries() const {
+    return origin_info_entries_;
+  }
+  base::FilePath profile_path() const { return data_dir_.path(); }
+  int status_callback_count() const { return status_callback_count_; }
+  void reset_status_callback_count() { status_callback_count_ = 0; }
+
+ private:
+  base::Time IncrementMockTime() {
+    ++mock_time_counter_;
+    return base::Time::FromDoubleT(mock_time_counter_ * 10.0);
+  }
+
+  base::MessageLoop message_loop_;
+  base::ScopedTempDir data_dir_;
+
+  scoped_refptr<QuotaManager> quota_manager_;
+  scoped_refptr<MockSpecialStoragePolicy> mock_special_storage_policy_;
+
+  QuotaStatusCode quota_status_;
+  UsageInfoEntries usage_info_;
+  int64 usage_;
+  int64 limited_usage_;
+  int64 unlimited_usage_;
+  int64 quota_;
+  int64 available_space_;
+  GURL lru_origin_;
+  std::set<GURL> modified_origins_;
+  StorageType modified_origins_type_;
+  QuotaTableEntries quota_entries_;
+  OriginInfoTableEntries origin_info_entries_;
+  int status_callback_count_;
+
+  int additional_callback_count_;
+
+  int mock_time_counter_;
+
+  base::WeakPtrFactory<QuotaManagerTest> weak_factory_;
+
+  DISALLOW_COPY_AND_ASSIGN(QuotaManagerTest);
+};
+
+TEST_F(QuotaManagerTest, GetUsageInfo) {
+  static const MockOriginData kData1[] = {
+    { "http://foo.com/",       kTemp,  10 },
+    { "http://foo.com:8080/",  kTemp,  15 },
+    { "http://bar.com/",       kTemp,  20 },
+    { "http://bar.com/",       kPerm,  50 },
+  };
+  static const MockOriginData kData2[] = {
+    { "https://foo.com/",      kTemp,  30 },
+    { "https://foo.com:8081/", kTemp,  35 },
+    { "http://bar.com/",       kPerm,  40 },
+    { "http://example.com/",   kPerm,  40 },
+  };
+  RegisterClient(CreateClient(kData1, ARRAYSIZE_UNSAFE(kData1),
+      QuotaClient::kFileSystem));
+  RegisterClient(CreateClient(kData2, ARRAYSIZE_UNSAFE(kData2),
+      QuotaClient::kDatabase));
+
+  GetUsageInfo();
+  base::RunLoop().RunUntilIdle();
+
+  EXPECT_EQ(4U, usage_info().size());
+  for (size_t i = 0; i < usage_info().size(); ++i) {
+    const UsageInfo& info = usage_info()[i];
+    if (info.host == "foo.com" && info.type == kTemp) {
+      EXPECT_EQ(10 + 15 + 30 + 35, info.usage);
+    } else if (info.host == "bar.com" && info.type == kTemp) {
+      EXPECT_EQ(20, info.usage);
+    } else if (info.host == "bar.com" && info.type == kPerm) {
+      EXPECT_EQ(50 + 40, info.usage);
+    } else if (info.host == "example.com" && info.type == kPerm) {
+      EXPECT_EQ(40, info.usage);
+    } else {
+      ADD_FAILURE()
+          << "Unexpected host, type: " << info.host << ", " << info.type;
+    }
+  }
+}
+
+TEST_F(QuotaManagerTest, GetUsageAndQuota_Simple) {
+  static const MockOriginData kData[] = {
+    { "http://foo.com/", kTemp, 10 },
+    { "http://foo.com/", kPerm, 80 },
+  };
+  RegisterClient(CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
+      QuotaClient::kFileSystem));
+
+  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(80, usage());
+  EXPECT_EQ(0, quota());
+
+  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(10, usage());
+  EXPECT_LE(0, quota());
+  int64 quota_returned_for_foo = quota();
+
+  GetUsageAndQuotaForWebApps(GURL("http://bar.com/"), kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(0, usage());
+  EXPECT_EQ(quota_returned_for_foo, quota());
+}
+
+TEST_F(QuotaManagerTest, GetUsage_NoClient) {
+  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(0, usage());
+
+  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(0, usage());
+
+  GetHostUsage("foo.com", kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(0, usage());
+
+  GetHostUsage("foo.com", kPerm);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(0, usage());
+
+  GetGlobalUsage(kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(0, usage());
+  EXPECT_EQ(0, unlimited_usage());
+
+  GetGlobalUsage(kPerm);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(0, usage());
+  EXPECT_EQ(0, unlimited_usage());
+}
+
+TEST_F(QuotaManagerTest, GetUsage_EmptyClient) {
+  RegisterClient(CreateClient(NULL, 0, QuotaClient::kFileSystem));
+  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(0, usage());
+
+  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(0, usage());
+
+  GetHostUsage("foo.com", kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(0, usage());
+
+  GetHostUsage("foo.com", kPerm);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(0, usage());
+
+  GetGlobalUsage(kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(0, usage());
+  EXPECT_EQ(0, unlimited_usage());
+
+  GetGlobalUsage(kPerm);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(0, usage());
+  EXPECT_EQ(0, unlimited_usage());
+}
+
+TEST_F(QuotaManagerTest, GetTemporaryUsageAndQuota_MultiOrigins) {
+  static const MockOriginData kData[] = {
+    { "http://foo.com/",        kTemp,  10 },
+    { "http://foo.com:8080/",   kTemp,  20 },
+    { "http://bar.com/",        kTemp,   5 },
+    { "https://bar.com/",       kTemp,   7 },
+    { "http://baz.com/",        kTemp,  30 },
+    { "http://foo.com/",        kPerm,  40 },
+  };
+  RegisterClient(CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
+      QuotaClient::kFileSystem));
+
+  // This time explicitly sets a temporary global quota.
+  SetTemporaryGlobalQuota(100);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(100, quota());
+
+  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(10 + 20, usage());
+
+  const int kPerHostQuota = 100 / kPerHostTemporaryPortion;
+
+  // The host's quota should be its full portion of the global quota
+  // since global usage is under the global quota.
+  EXPECT_EQ(kPerHostQuota, quota());
+
+  GetUsageAndQuotaForWebApps(GURL("http://bar.com/"), kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(5 + 7, usage());
+  EXPECT_EQ(kPerHostQuota, quota());
+}
+
+TEST_F(QuotaManagerTest, GetUsage_MultipleClients) {
+  static const MockOriginData kData1[] = {
+    { "http://foo.com/",              kTemp, 1 },
+    { "http://bar.com/",              kTemp, 2 },
+    { "http://bar.com/",              kPerm, 4 },
+    { "http://unlimited/",            kPerm, 8 },
+    { "http://installed/",            kPerm, 16 },
+  };
+  static const MockOriginData kData2[] = {
+    { "https://foo.com/",             kTemp, 128 },
+    { "http://example.com/",          kPerm, 256 },
+    { "http://unlimited/",            kTemp, 512 },
+    { "http://installed/",            kTemp, 1024 },
+  };
+  mock_special_storage_policy()->AddUnlimited(GURL("http://unlimited/"));
+  mock_special_storage_policy()->GrantQueryDiskSize(GURL("http://installed/"));
+  RegisterClient(CreateClient(kData1, ARRAYSIZE_UNSAFE(kData1),
+      QuotaClient::kFileSystem));
+  RegisterClient(CreateClient(kData2, ARRAYSIZE_UNSAFE(kData2),
+      QuotaClient::kDatabase));
+
+  const int64 kTempQuotaBase =
+      GetAvailableDiskSpaceForTest(base::FilePath()) / kPerHostTemporaryPortion;
+
+  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(1 + 128, usage());
+
+  GetUsageAndQuotaForWebApps(GURL("http://bar.com/"), kPerm);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(4, usage());
+
+  GetUsageAndQuotaForWebApps(GURL("http://unlimited/"), kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(512, usage());
+  EXPECT_EQ(std::min(kAvailableSpaceForApp, kTempQuotaBase) + usage(), quota());
+
+  GetUsageAndQuotaForWebApps(GURL("http://unlimited/"), kPerm);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(8, usage());
+  EXPECT_EQ(kAvailableSpaceForApp + usage(), quota());
+
+  GetAvailableSpace();
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_LE(0, available_space());
+
+  GetUsageAndQuotaForWebApps(GURL("http://installed/"), kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(1024, usage());
+  EXPECT_EQ(std::min(kAvailableSpaceForApp, kTempQuotaBase) + usage(), quota());
+
+  GetUsageAndQuotaForWebApps(GURL("http://installed/"), kPerm);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(16, usage());
+  EXPECT_EQ(usage(), quota());  // Over-budget case.
+
+  GetGlobalUsage(kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(1 + 2 + 128 + 512 + 1024, usage());
+  EXPECT_EQ(512, unlimited_usage());
+
+  GetGlobalUsage(kPerm);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(4 + 8 + 16 + 256, usage());
+  EXPECT_EQ(8, unlimited_usage());
+}
+
+void QuotaManagerTest::GetUsage_WithModifyTestBody(const StorageType type) {
+  const MockOriginData data[] = {
+    { "http://foo.com/",   type,  10 },
+    { "http://foo.com:1/", type,  20 },
+  };
+  MockStorageClient* client = CreateClient(data, ARRAYSIZE_UNSAFE(data),
+      QuotaClient::kFileSystem);
+  RegisterClient(client);
+
+  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), type);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(10 + 20, usage());
+
+  client->ModifyOriginAndNotify(GURL("http://foo.com/"), type, 30);
+  client->ModifyOriginAndNotify(GURL("http://foo.com:1/"), type, -5);
+  client->AddOriginAndNotify(GURL("https://foo.com/"), type, 1);
+
+  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), type);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(10 + 20 + 30 - 5 + 1, usage());
+  int foo_usage = usage();
+
+  client->AddOriginAndNotify(GURL("http://bar.com/"), type, 40);
+  GetUsageAndQuotaForWebApps(GURL("http://bar.com/"), type);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(40, usage());
+
+  GetGlobalUsage(type);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(foo_usage + 40, usage());
+  EXPECT_EQ(0, unlimited_usage());
+}
+
+TEST_F(QuotaManagerTest, GetTemporaryUsage_WithModify) {
+  GetUsage_WithModifyTestBody(kTemp);
+}
+
+TEST_F(QuotaManagerTest, GetTemporaryUsageAndQuota_WithAdditionalTasks) {
+  static const MockOriginData kData[] = {
+    { "http://foo.com/",        kTemp, 10 },
+    { "http://foo.com:8080/",   kTemp, 20 },
+    { "http://bar.com/",        kTemp, 13 },
+    { "http://foo.com/",        kPerm, 40 },
+  };
+  RegisterClient(CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
+      QuotaClient::kFileSystem));
+  SetTemporaryGlobalQuota(100);
+  base::RunLoop().RunUntilIdle();
+
+  const int kPerHostQuota = 100 / QuotaManager::kPerHostTemporaryPortion;
+
+  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp);
+  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp);
+  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(10 + 20, usage());
+  EXPECT_EQ(kPerHostQuota, quota());
+
+  set_additional_callback_count(0);
+  RunAdditionalUsageAndQuotaTask(GURL("http://foo.com/"),
+                                 kTemp);
+  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp);
+  RunAdditionalUsageAndQuotaTask(GURL("http://bar.com/"), kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(10 + 20, usage());
+  EXPECT_EQ(kPerHostQuota, quota());
+  EXPECT_EQ(2, additional_callback_count());
+}
+
+TEST_F(QuotaManagerTest, GetTemporaryUsageAndQuota_NukeManager) {
+  static const MockOriginData kData[] = {
+    { "http://foo.com/",        kTemp, 10 },
+    { "http://foo.com:8080/",   kTemp, 20 },
+    { "http://bar.com/",        kTemp, 13 },
+    { "http://foo.com/",        kPerm, 40 },
+  };
+  RegisterClient(CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
+      QuotaClient::kFileSystem));
+  SetTemporaryGlobalQuota(100);
+  base::RunLoop().RunUntilIdle();
+
+  set_additional_callback_count(0);
+  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp);
+  RunAdditionalUsageAndQuotaTask(GURL("http://foo.com/"),
+                                 kTemp);
+  RunAdditionalUsageAndQuotaTask(GURL("http://bar.com/"),
+                                 kTemp);
+
+  DeleteOriginData(GURL("http://foo.com/"), kTemp, kAllClients);
+  DeleteOriginData(GURL("http://bar.com/"), kTemp, kAllClients);
+
+  // Nuke before waiting for callbacks.
+  set_quota_manager(NULL);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaErrorAbort, status());
+}
+
+TEST_F(QuotaManagerTest, GetTemporaryUsageAndQuota_Overbudget) {
+  static const MockOriginData kData[] = {
+    { "http://usage1/",    kTemp,   1 },
+    { "http://usage10/",   kTemp,  10 },
+    { "http://usage200/",  kTemp, 200 },
+  };
+  RegisterClient(CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
+      QuotaClient::kFileSystem));
+  SetTemporaryGlobalQuota(100);
+  base::RunLoop().RunUntilIdle();
+
+  const int kPerHostQuota = 100 / QuotaManager::kPerHostTemporaryPortion;
+
+  GetUsageAndQuotaForWebApps(GURL("http://usage1/"), kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(1, usage());
+  EXPECT_EQ(1, quota());  // should be clamped to our current usage
+
+  GetUsageAndQuotaForWebApps(GURL("http://usage10/"), kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(10, usage());
+  EXPECT_EQ(10, quota());
+
+  GetUsageAndQuotaForWebApps(GURL("http://usage200/"), kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(200, usage());
+  EXPECT_EQ(kPerHostQuota, quota());  // should be clamped to the nominal quota
+}
+
+TEST_F(QuotaManagerTest, GetTemporaryUsageAndQuota_Unlimited) {
+  static const MockOriginData kData[] = {
+    { "http://usage10/",   kTemp,    10 },
+    { "http://usage50/",   kTemp,    50 },
+    { "http://unlimited/", kTemp,  4000 },
+  };
+  mock_special_storage_policy()->AddUnlimited(GURL("http://unlimited/"));
+  MockStorageClient* client = CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
+      QuotaClient::kFileSystem);
+  RegisterClient(client);
+
+  // Test when not overbugdet.
+  SetTemporaryGlobalQuota(1000);
+  base::RunLoop().RunUntilIdle();
+
+  GetGlobalUsage(kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(10 + 50 + 4000, usage());
+  EXPECT_EQ(4000, unlimited_usage());
+
+  const int kPerHostQuotaFor1000 =
+      1000 / QuotaManager::kPerHostTemporaryPortion;
+
+  GetUsageAndQuotaForWebApps(GURL("http://usage10/"), kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(10, usage());
+  EXPECT_EQ(kPerHostQuotaFor1000, quota());
+
+  GetUsageAndQuotaForWebApps(GURL("http://usage50/"), kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(50, usage());
+  EXPECT_EQ(kPerHostQuotaFor1000, quota());
+
+  GetUsageAndQuotaForWebApps(GURL("http://unlimited/"), kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(4000, usage());
+  EXPECT_EQ(kAvailableSpaceForApp + usage(), quota());
+
+  GetUsageAndQuotaForStorageClient(GURL("http://unlimited/"), kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(0, usage());
+  EXPECT_EQ(QuotaManager::kNoLimit, quota());
+
+  // Test when overbugdet.
+  SetTemporaryGlobalQuota(100);
+  base::RunLoop().RunUntilIdle();
+
+  const int kPerHostQuotaFor100 =
+      100 / QuotaManager::kPerHostTemporaryPortion;
+
+  GetUsageAndQuotaForWebApps(GURL("http://usage10/"), kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(10, usage());
+  EXPECT_EQ(kPerHostQuotaFor100, quota());
+
+  GetUsageAndQuotaForWebApps(GURL("http://usage50/"), kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(50, usage());
+  EXPECT_EQ(kPerHostQuotaFor100, quota());
+
+  GetUsageAndQuotaForWebApps(GURL("http://unlimited/"), kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(4000, usage());
+  EXPECT_EQ(kAvailableSpaceForApp + usage(), quota());
+
+  GetUsageAndQuotaForStorageClient(GURL("http://unlimited/"), kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(0, usage());
+  EXPECT_EQ(QuotaManager::kNoLimit, quota());
+
+  // Revoke the unlimited rights and make sure the change is noticed.
+  mock_special_storage_policy()->Reset();
+  mock_special_storage_policy()->NotifyCleared();
+
+  GetGlobalUsage(kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(10 + 50 + 4000, usage());
+  EXPECT_EQ(0, unlimited_usage());
+
+  GetUsageAndQuotaForWebApps(GURL("http://usage10/"), kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(10, usage());
+  EXPECT_EQ(10, quota());  // should be clamped to our current usage
+
+  GetUsageAndQuotaForWebApps(GURL("http://usage50/"), kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(50, usage());
+  EXPECT_EQ(kPerHostQuotaFor100, quota());
+
+  GetUsageAndQuotaForWebApps(GURL("http://unlimited/"), kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(4000, usage());
+  EXPECT_EQ(kPerHostQuotaFor100, quota());
+
+  GetUsageAndQuotaForStorageClient(GURL("http://unlimited/"), kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(4000, usage());
+  EXPECT_EQ(kPerHostQuotaFor100, quota());
+}
+
+TEST_F(QuotaManagerTest, OriginInUse) {
+  const GURL kFooOrigin("http://foo.com/");
+  const GURL kBarOrigin("http://bar.com/");
+
+  EXPECT_FALSE(quota_manager()->IsOriginInUse(kFooOrigin));
+  quota_manager()->NotifyOriginInUse(kFooOrigin);  // count of 1
+  EXPECT_TRUE(quota_manager()->IsOriginInUse(kFooOrigin));
+  quota_manager()->NotifyOriginInUse(kFooOrigin);  // count of 2
+  EXPECT_TRUE(quota_manager()->IsOriginInUse(kFooOrigin));
+  quota_manager()->NotifyOriginNoLongerInUse(kFooOrigin);  // count of 1
+  EXPECT_TRUE(quota_manager()->IsOriginInUse(kFooOrigin));
+
+  EXPECT_FALSE(quota_manager()->IsOriginInUse(kBarOrigin));
+  quota_manager()->NotifyOriginInUse(kBarOrigin);
+  EXPECT_TRUE(quota_manager()->IsOriginInUse(kBarOrigin));
+  quota_manager()->NotifyOriginNoLongerInUse(kBarOrigin);
+  EXPECT_FALSE(quota_manager()->IsOriginInUse(kBarOrigin));
+
+  quota_manager()->NotifyOriginNoLongerInUse(kFooOrigin);
+  EXPECT_FALSE(quota_manager()->IsOriginInUse(kFooOrigin));
+}
+
+TEST_F(QuotaManagerTest, GetAndSetPerststentHostQuota) {
+  RegisterClient(CreateClient(NULL, 0, QuotaClient::kFileSystem));
+
+  GetPersistentHostQuota("foo.com");
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(0, quota());
+
+  SetPersistentHostQuota("foo.com", 100);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(100, quota());
+
+  GetPersistentHostQuota("foo.com");
+  SetPersistentHostQuota("foo.com", 200);
+  GetPersistentHostQuota("foo.com");
+  SetPersistentHostQuota("foo.com", QuotaManager::kPerHostPersistentQuotaLimit);
+  GetPersistentHostQuota("foo.com");
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(QuotaManager::kPerHostPersistentQuotaLimit, quota());
+
+  // Persistent quota should be capped at the per-host quota limit.
+  SetPersistentHostQuota("foo.com",
+                         QuotaManager::kPerHostPersistentQuotaLimit + 100);
+  GetPersistentHostQuota("foo.com");
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(QuotaManager::kPerHostPersistentQuotaLimit, quota());
+}
+
+TEST_F(QuotaManagerTest, GetAndSetPersistentUsageAndQuota) {
+  RegisterClient(CreateClient(NULL, 0, QuotaClient::kFileSystem));
+
+  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(0, usage());
+  EXPECT_EQ(0, quota());
+
+  SetPersistentHostQuota("foo.com", 100);
+  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(0, usage());
+  EXPECT_EQ(100, quota());
+
+  // For installed app GetUsageAndQuotaForWebApps returns the capped quota.
+  mock_special_storage_policy()->GrantQueryDiskSize(GURL("http://installed/"));
+  SetPersistentHostQuota("installed", kAvailableSpaceForApp + 100);
+  GetUsageAndQuotaForWebApps(GURL("http://installed/"), kPerm);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kAvailableSpaceForApp, quota());
+
+  // Ditto for unlimited apps.
+  mock_special_storage_policy()->AddUnlimited(GURL("http://unlimited/"));
+  GetUsageAndQuotaForWebApps(GURL("http://unlimited/"), kPerm);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kAvailableSpaceForApp, quota());
+
+  // GetUsageAndQuotaForStorageClient should just return 0 usage and
+  // kNoLimit quota.
+  GetUsageAndQuotaForStorageClient(GURL("http://unlimited/"), kPerm);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(0, usage());
+  EXPECT_EQ(QuotaManager::kNoLimit, quota());
+}
+
+TEST_F(QuotaManagerTest, GetSyncableQuota) {
+  RegisterClient(CreateClient(NULL, 0, QuotaClient::kFileSystem));
+
+  // Pre-condition check: available disk space (for testing) is less than
+  // the default quota for syncable storage.
+  EXPECT_LE(kAvailableSpaceForApp,
+            QuotaManager::kSyncableStorageDefaultHostQuota);
+
+  // For installed apps the quota manager should return
+  // kAvailableSpaceForApp as syncable quota (because of the pre-condition).
+  mock_special_storage_policy()->GrantQueryDiskSize(GURL("http://installed/"));
+  GetUsageAndQuotaForWebApps(GURL("http://installed/"), kSync);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(0, usage());
+  EXPECT_EQ(kAvailableSpaceForApp, quota());
+
+  // If it's not installed (which shouldn't happen in real case) it
+  // should just return the default host quota for syncable.
+  GetUsageAndQuotaForWebApps(GURL("http://foo/"), kSync);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(0, usage());
+  EXPECT_EQ(QuotaManager::kSyncableStorageDefaultHostQuota, quota());
+}
+
+TEST_F(QuotaManagerTest, GetPersistentUsageAndQuota_MultiOrigins) {
+  static const MockOriginData kData[] = {
+    { "http://foo.com/",        kPerm, 10 },
+    { "http://foo.com:8080/",   kPerm, 20 },
+    { "https://foo.com/",       kPerm, 13 },
+    { "https://foo.com:8081/",  kPerm, 19 },
+    { "http://bar.com/",        kPerm,  5 },
+    { "https://bar.com/",       kPerm,  7 },
+    { "http://baz.com/",        kPerm, 30 },
+    { "http://foo.com/",        kTemp, 40 },
+  };
+  RegisterClient(CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
+      QuotaClient::kFileSystem));
+
+  SetPersistentHostQuota("foo.com", 100);
+  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(10 + 20 + 13 + 19, usage());
+  EXPECT_EQ(100, quota());
+}
+
+TEST_F(QuotaManagerTest, GetPersistentUsage_WithModify) {
+  GetUsage_WithModifyTestBody(kPerm);
+}
+
+TEST_F(QuotaManagerTest, GetPersistentUsageAndQuota_WithAdditionalTasks) {
+  static const MockOriginData kData[] = {
+    { "http://foo.com/",        kPerm,  10 },
+    { "http://foo.com:8080/",   kPerm,  20 },
+    { "http://bar.com/",        kPerm,  13 },
+    { "http://foo.com/",        kTemp,  40 },
+  };
+  RegisterClient(CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
+      QuotaClient::kFileSystem));
+  SetPersistentHostQuota("foo.com", 100);
+
+  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm);
+  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm);
+  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(10 + 20, usage());
+  EXPECT_EQ(100, quota());
+
+  set_additional_callback_count(0);
+  RunAdditionalUsageAndQuotaTask(GURL("http://foo.com/"),
+                                 kPerm);
+  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm);
+  RunAdditionalUsageAndQuotaTask(GURL("http://bar.com/"), kPerm);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(10 + 20, usage());
+  EXPECT_EQ(2, additional_callback_count());
+}
+
+TEST_F(QuotaManagerTest, GetPersistentUsageAndQuota_NukeManager) {
+  static const MockOriginData kData[] = {
+    { "http://foo.com/",        kPerm,  10 },
+    { "http://foo.com:8080/",   kPerm,  20 },
+    { "http://bar.com/",        kPerm,  13 },
+    { "http://foo.com/",        kTemp,  40 },
+  };
+  RegisterClient(CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
+      QuotaClient::kFileSystem));
+  SetPersistentHostQuota("foo.com", 100);
+
+  set_additional_callback_count(0);
+  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm);
+  RunAdditionalUsageAndQuotaTask(GURL("http://foo.com/"), kPerm);
+  RunAdditionalUsageAndQuotaTask(GURL("http://bar.com/"), kPerm);
+
+  // Nuke before waiting for callbacks.
+  set_quota_manager(NULL);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaErrorAbort, status());
+}
+
+TEST_F(QuotaManagerTest, GetUsage_Simple) {
+  static const MockOriginData kData[] = {
+    { "http://foo.com/",   kPerm,       1 },
+    { "http://foo.com:1/", kPerm,      20 },
+    { "http://bar.com/",   kTemp,     300 },
+    { "https://buz.com/",  kTemp,    4000 },
+    { "http://buz.com/",   kTemp,   50000 },
+    { "http://bar.com:1/", kPerm,  600000 },
+    { "http://foo.com/",   kTemp, 7000000 },
+  };
+  RegisterClient(CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
+      QuotaClient::kFileSystem));
+
+  GetGlobalUsage(kPerm);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(usage(), 1 + 20 + 600000);
+  EXPECT_EQ(0, unlimited_usage());
+
+  GetGlobalUsage(kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(usage(), 300 + 4000 + 50000 + 7000000);
+  EXPECT_EQ(0, unlimited_usage());
+
+  GetHostUsage("foo.com", kPerm);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(usage(), 1 + 20);
+
+  GetHostUsage("buz.com", kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(usage(), 4000 + 50000);
+}
+
+TEST_F(QuotaManagerTest, GetUsage_WithModification) {
+  static const MockOriginData kData[] = {
+    { "http://foo.com/",   kPerm,       1 },
+    { "http://foo.com:1/", kPerm,      20 },
+    { "http://bar.com/",   kTemp,     300 },
+    { "https://buz.com/",  kTemp,    4000 },
+    { "http://buz.com/",   kTemp,   50000 },
+    { "http://bar.com:1/", kPerm,  600000 },
+    { "http://foo.com/",   kTemp, 7000000 },
+  };
+
+  MockStorageClient* client = CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
+      QuotaClient::kFileSystem);
+  RegisterClient(client);
+
+  GetGlobalUsage(kPerm);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(usage(), 1 + 20 + 600000);
+  EXPECT_EQ(0, unlimited_usage());
+
+  client->ModifyOriginAndNotify(
+      GURL("http://foo.com/"), kPerm, 80000000);
+
+  GetGlobalUsage(kPerm);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(usage(), 1 + 20 + 600000 + 80000000);
+  EXPECT_EQ(0, unlimited_usage());
+
+  GetGlobalUsage(kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(usage(), 300 + 4000 + 50000 + 7000000);
+  EXPECT_EQ(0, unlimited_usage());
+
+  client->ModifyOriginAndNotify(
+      GURL("http://foo.com/"), kTemp, 1);
+
+  GetGlobalUsage(kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(usage(), 300 + 4000 + 50000 + 7000000 + 1);
+  EXPECT_EQ(0, unlimited_usage());
+
+  GetHostUsage("buz.com", kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(usage(), 4000 + 50000);
+
+  client->ModifyOriginAndNotify(
+      GURL("http://buz.com/"), kTemp, 900000000);
+
+  GetHostUsage("buz.com", kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(usage(), 4000 + 50000 + 900000000);
+}
+
+TEST_F(QuotaManagerTest, GetUsage_WithDeleteOrigin) {
+  static const MockOriginData kData[] = {
+    { "http://foo.com/",   kTemp,     1 },
+    { "http://foo.com:1/", kTemp,    20 },
+    { "http://foo.com/",   kPerm,   300 },
+    { "http://bar.com/",   kTemp,  4000 },
+  };
+  MockStorageClient* client = CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
+      QuotaClient::kFileSystem);
+  RegisterClient(client);
+
+  GetGlobalUsage(kTemp);
+  base::RunLoop().RunUntilIdle();
+  int64 predelete_global_tmp = usage();
+
+  GetHostUsage("foo.com", kTemp);
+  base::RunLoop().RunUntilIdle();
+  int64 predelete_host_tmp = usage();
+
+  GetHostUsage("foo.com", kPerm);
+  base::RunLoop().RunUntilIdle();
+  int64 predelete_host_pers = usage();
+
+  DeleteClientOriginData(client, GURL("http://foo.com/"),
+                         kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+
+  GetGlobalUsage(kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(predelete_global_tmp - 1, usage());
+
+  GetHostUsage("foo.com", kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(predelete_host_tmp - 1, usage());
+
+  GetHostUsage("foo.com", kPerm);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(predelete_host_pers, usage());
+}
+
+TEST_F(QuotaManagerTest, GetAvailableSpaceTest) {
+  GetAvailableSpace();
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_LE(0, available_space());
+}
+
+TEST_F(QuotaManagerTest, EvictOriginData) {
+  static const MockOriginData kData1[] = {
+    { "http://foo.com/",   kTemp,     1 },
+    { "http://foo.com:1/", kTemp,    20 },
+    { "http://foo.com/",   kPerm,   300 },
+    { "http://bar.com/",   kTemp,  4000 },
+  };
+  static const MockOriginData kData2[] = {
+    { "http://foo.com/",   kTemp, 50000 },
+    { "http://foo.com:1/", kTemp,  6000 },
+    { "http://foo.com/",   kPerm,   700 },
+    { "https://foo.com/",  kTemp,    80 },
+    { "http://bar.com/",   kTemp,     9 },
+  };
+  MockStorageClient* client1 = CreateClient(kData1, ARRAYSIZE_UNSAFE(kData1),
+      QuotaClient::kFileSystem);
+  MockStorageClient* client2 = CreateClient(kData2, ARRAYSIZE_UNSAFE(kData2),
+      QuotaClient::kDatabase);
+  RegisterClient(client1);
+  RegisterClient(client2);
+
+  GetGlobalUsage(kTemp);
+  base::RunLoop().RunUntilIdle();
+  int64 predelete_global_tmp = usage();
+
+  GetHostUsage("foo.com", kTemp);
+  base::RunLoop().RunUntilIdle();
+  int64 predelete_host_tmp = usage();
+
+  GetHostUsage("foo.com", kPerm);
+  base::RunLoop().RunUntilIdle();
+  int64 predelete_host_pers = usage();
+
+  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kData1); ++i)
+    quota_manager()->NotifyStorageAccessed(QuotaClient::kUnknown,
+        GURL(kData1[i].origin), kData1[i].type);
+  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kData2); ++i)
+    quota_manager()->NotifyStorageAccessed(QuotaClient::kUnknown,
+        GURL(kData2[i].origin), kData2[i].type);
+  base::RunLoop().RunUntilIdle();
+
+  EvictOriginData(GURL("http://foo.com/"), kTemp);
+  base::RunLoop().RunUntilIdle();
+
+  DumpOriginInfoTable();
+  base::RunLoop().RunUntilIdle();
+
+  typedef OriginInfoTableEntries::const_iterator iterator;
+  for (iterator itr(origin_info_entries().begin()),
+                end(origin_info_entries().end());
+       itr != end; ++itr) {
+    if (itr->type == kTemp)
+      EXPECT_NE(std::string("http://foo.com/"), itr->origin.spec());
+  }
+
+  GetGlobalUsage(kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(predelete_global_tmp - (1 + 50000), usage());
+
+  GetHostUsage("foo.com", kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(predelete_host_tmp - (1 + 50000), usage());
+
+  GetHostUsage("foo.com", kPerm);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(predelete_host_pers, usage());
+}
+
+TEST_F(QuotaManagerTest, EvictOriginDataWithDeletionError) {
+  static const MockOriginData kData[] = {
+    { "http://foo.com/",   kTemp,       1 },
+    { "http://foo.com:1/", kTemp,      20 },
+    { "http://foo.com/",   kPerm,     300 },
+    { "http://bar.com/",   kTemp,    4000 },
+  };
+  static const int kNumberOfTemporaryOrigins = 3;
+  MockStorageClient* client = CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
+      QuotaClient::kFileSystem);
+  RegisterClient(client);
+
+  GetGlobalUsage(kTemp);
+  base::RunLoop().RunUntilIdle();
+  int64 predelete_global_tmp = usage();
+
+  GetHostUsage("foo.com", kTemp);
+  base::RunLoop().RunUntilIdle();
+  int64 predelete_host_tmp = usage();
+
+  GetHostUsage("foo.com", kPerm);
+  base::RunLoop().RunUntilIdle();
+  int64 predelete_host_pers = usage();
+
+  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kData); ++i)
+    NotifyStorageAccessed(client, GURL(kData[i].origin), kData[i].type);
+  base::RunLoop().RunUntilIdle();
+
+  client->AddOriginToErrorSet(GURL("http://foo.com/"), kTemp);
+
+  for (int i = 0;
+       i < QuotaManager::kThresholdOfErrorsToBeBlacklisted + 1;
+       ++i) {
+    EvictOriginData(GURL("http://foo.com/"), kTemp);
+    base::RunLoop().RunUntilIdle();
+    EXPECT_EQ(kQuotaErrorInvalidModification, status());
+  }
+
+  DumpOriginInfoTable();
+  base::RunLoop().RunUntilIdle();
+
+  bool found_origin_in_database = false;
+  typedef OriginInfoTableEntries::const_iterator iterator;
+  for (iterator itr(origin_info_entries().begin()),
+                end(origin_info_entries().end());
+       itr != end; ++itr) {
+    if (itr->type == kTemp &&
+        GURL("http://foo.com/") == itr->origin) {
+      found_origin_in_database = true;
+      break;
+    }
+  }
+  // The origin "http://foo.com/" should be in the database.
+  EXPECT_TRUE(found_origin_in_database);
+
+  for (size_t i = 0; i < kNumberOfTemporaryOrigins - 1; ++i) {
+    GetLRUOrigin(kTemp);
+    base::RunLoop().RunUntilIdle();
+    EXPECT_FALSE(lru_origin().is_empty());
+    // The origin "http://foo.com/" should not be in the LRU list.
+    EXPECT_NE(std::string("http://foo.com/"), lru_origin().spec());
+    DeleteOriginFromDatabase(lru_origin(), kTemp);
+    base::RunLoop().RunUntilIdle();
+  }
+
+  // Now the LRU list must be empty.
+  GetLRUOrigin(kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_TRUE(lru_origin().is_empty());
+
+  // Deleting origins from the database should not affect the results of the
+  // following checks.
+  GetGlobalUsage(kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(predelete_global_tmp, usage());
+
+  GetHostUsage("foo.com", kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(predelete_host_tmp, usage());
+
+  GetHostUsage("foo.com", kPerm);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(predelete_host_pers, usage());
+}
+
+TEST_F(QuotaManagerTest, GetUsageAndQuotaForEviction) {
+  static const MockOriginData kData[] = {
+    { "http://foo.com/",   kTemp,       1 },
+    { "http://foo.com:1/", kTemp,      20 },
+    { "http://foo.com/",   kPerm,     300 },
+    { "http://unlimited/", kTemp,    4000 },
+  };
+
+  mock_special_storage_policy()->AddUnlimited(GURL("http://unlimited/"));
+  MockStorageClient* client = CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
+      QuotaClient::kFileSystem);
+  RegisterClient(client);
+
+  SetTemporaryGlobalQuota(10000000);
+  base::RunLoop().RunUntilIdle();
+
+  GetUsageAndQuotaForEviction();
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(21, limited_usage());
+  EXPECT_EQ(10000000, quota());
+  EXPECT_LE(0, available_space());
+}
+
+TEST_F(QuotaManagerTest, DeleteHostDataSimple) {
+  static const MockOriginData kData[] = {
+    { "http://foo.com/",   kTemp,     1 },
+  };
+  MockStorageClient* client = CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
+      QuotaClient::kFileSystem);
+  RegisterClient(client);
+
+  GetGlobalUsage(kTemp);
+  base::RunLoop().RunUntilIdle();
+  const int64 predelete_global_tmp = usage();
+
+  GetHostUsage("foo.com", kTemp);
+  base::RunLoop().RunUntilIdle();
+  int64 predelete_host_tmp = usage();
+
+  GetHostUsage("foo.com", kPerm);
+  base::RunLoop().RunUntilIdle();
+  int64 predelete_host_pers = usage();
+
+  DeleteHostData(std::string(), kTemp, kAllClients);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+
+  GetGlobalUsage(kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(predelete_global_tmp, usage());
+
+  GetHostUsage("foo.com", kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(predelete_host_tmp, usage());
+
+  GetHostUsage("foo.com", kPerm);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(predelete_host_pers, usage());
+
+  DeleteHostData("foo.com", kTemp, kAllClients);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+
+  GetGlobalUsage(kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(predelete_global_tmp - 1, usage());
+
+  GetHostUsage("foo.com", kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(predelete_host_tmp - 1, usage());
+
+  GetHostUsage("foo.com", kPerm);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(predelete_host_pers, usage());
+}
+
+TEST_F(QuotaManagerTest, DeleteHostDataMultiple) {
+  static const MockOriginData kData1[] = {
+    { "http://foo.com/",   kTemp,     1 },
+    { "http://foo.com:1/", kTemp,    20 },
+    { "http://foo.com/",   kPerm,   300 },
+    { "http://bar.com/",   kTemp,  4000 },
+  };
+  static const MockOriginData kData2[] = {
+    { "http://foo.com/",   kTemp, 50000 },
+    { "http://foo.com:1/", kTemp,  6000 },
+    { "http://foo.com/",   kPerm,   700 },
+    { "https://foo.com/",  kTemp,    80 },
+    { "http://bar.com/",   kTemp,     9 },
+  };
+  MockStorageClient* client1 = CreateClient(kData1, ARRAYSIZE_UNSAFE(kData1),
+      QuotaClient::kFileSystem);
+  MockStorageClient* client2 = CreateClient(kData2, ARRAYSIZE_UNSAFE(kData2),
+      QuotaClient::kDatabase);
+  RegisterClient(client1);
+  RegisterClient(client2);
+
+  GetGlobalUsage(kTemp);
+  base::RunLoop().RunUntilIdle();
+  const int64 predelete_global_tmp = usage();
+
+  GetHostUsage("foo.com", kTemp);
+  base::RunLoop().RunUntilIdle();
+  const int64 predelete_foo_tmp = usage();
+
+  GetHostUsage("bar.com", kTemp);
+  base::RunLoop().RunUntilIdle();
+  const int64 predelete_bar_tmp = usage();
+
+  GetHostUsage("foo.com", kPerm);
+  base::RunLoop().RunUntilIdle();
+  const int64 predelete_foo_pers = usage();
+
+  GetHostUsage("bar.com", kPerm);
+  base::RunLoop().RunUntilIdle();
+  const int64 predelete_bar_pers = usage();
+
+  reset_status_callback_count();
+  DeleteHostData("foo.com", kTemp, kAllClients);
+  DeleteHostData("bar.com", kTemp, kAllClients);
+  DeleteHostData("foo.com", kTemp, kAllClients);
+  base::RunLoop().RunUntilIdle();
+
+  EXPECT_EQ(3, status_callback_count());
+
+  DumpOriginInfoTable();
+  base::RunLoop().RunUntilIdle();
+
+  typedef OriginInfoTableEntries::const_iterator iterator;
+  for (iterator itr(origin_info_entries().begin()),
+                end(origin_info_entries().end());
+       itr != end; ++itr) {
+    if (itr->type == kTemp) {
+      EXPECT_NE(std::string("http://foo.com/"), itr->origin.spec());
+      EXPECT_NE(std::string("http://foo.com:1/"), itr->origin.spec());
+      EXPECT_NE(std::string("https://foo.com/"), itr->origin.spec());
+      EXPECT_NE(std::string("http://bar.com/"), itr->origin.spec());
+    }
+  }
+
+  GetGlobalUsage(kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(predelete_global_tmp - (1 + 20 + 4000 + 50000 + 6000 + 80 + 9),
+            usage());
+
+  GetHostUsage("foo.com", kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(predelete_foo_tmp - (1 + 20 + 50000 + 6000 + 80), usage());
+
+  GetHostUsage("bar.com", kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(predelete_bar_tmp - (4000 + 9), usage());
+
+  GetHostUsage("foo.com", kPerm);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(predelete_foo_pers, usage());
+
+  GetHostUsage("bar.com", kPerm);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(predelete_bar_pers, usage());
+}
+
+// Single-run DeleteOriginData cases must be well covered by
+// EvictOriginData tests.
+TEST_F(QuotaManagerTest, DeleteOriginDataMultiple) {
+  static const MockOriginData kData1[] = {
+    { "http://foo.com/",   kTemp,     1 },
+    { "http://foo.com:1/", kTemp,    20 },
+    { "http://foo.com/",   kPerm,   300 },
+    { "http://bar.com/",   kTemp,  4000 },
+  };
+  static const MockOriginData kData2[] = {
+    { "http://foo.com/",   kTemp, 50000 },
+    { "http://foo.com:1/", kTemp,  6000 },
+    { "http://foo.com/",   kPerm,   700 },
+    { "https://foo.com/",  kTemp,    80 },
+    { "http://bar.com/",   kTemp,     9 },
+  };
+  MockStorageClient* client1 = CreateClient(kData1, ARRAYSIZE_UNSAFE(kData1),
+      QuotaClient::kFileSystem);
+  MockStorageClient* client2 = CreateClient(kData2, ARRAYSIZE_UNSAFE(kData2),
+      QuotaClient::kDatabase);
+  RegisterClient(client1);
+  RegisterClient(client2);
+
+  GetGlobalUsage(kTemp);
+  base::RunLoop().RunUntilIdle();
+  const int64 predelete_global_tmp = usage();
+
+  GetHostUsage("foo.com", kTemp);
+  base::RunLoop().RunUntilIdle();
+  const int64 predelete_foo_tmp = usage();
+
+  GetHostUsage("bar.com", kTemp);
+  base::RunLoop().RunUntilIdle();
+  const int64 predelete_bar_tmp = usage();
+
+  GetHostUsage("foo.com", kPerm);
+  base::RunLoop().RunUntilIdle();
+  const int64 predelete_foo_pers = usage();
+
+  GetHostUsage("bar.com", kPerm);
+  base::RunLoop().RunUntilIdle();
+  const int64 predelete_bar_pers = usage();
+
+  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kData1); ++i)
+    quota_manager()->NotifyStorageAccessed(QuotaClient::kUnknown,
+        GURL(kData1[i].origin), kData1[i].type);
+  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kData2); ++i)
+    quota_manager()->NotifyStorageAccessed(QuotaClient::kUnknown,
+        GURL(kData2[i].origin), kData2[i].type);
+  base::RunLoop().RunUntilIdle();
+
+  reset_status_callback_count();
+  DeleteOriginData(GURL("http://foo.com/"), kTemp, kAllClients);
+  DeleteOriginData(GURL("http://bar.com/"), kTemp, kAllClients);
+  DeleteOriginData(GURL("http://foo.com/"), kTemp, kAllClients);
+  base::RunLoop().RunUntilIdle();
+
+  EXPECT_EQ(3, status_callback_count());
+
+  DumpOriginInfoTable();
+  base::RunLoop().RunUntilIdle();
+
+  typedef OriginInfoTableEntries::const_iterator iterator;
+  for (iterator itr(origin_info_entries().begin()),
+                end(origin_info_entries().end());
+       itr != end; ++itr) {
+    if (itr->type == kTemp) {
+      EXPECT_NE(std::string("http://foo.com/"), itr->origin.spec());
+      EXPECT_NE(std::string("http://bar.com/"), itr->origin.spec());
+    }
+  }
+
+  GetGlobalUsage(kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(predelete_global_tmp - (1 + 4000 + 50000 + 9), usage());
+
+  GetHostUsage("foo.com", kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(predelete_foo_tmp - (1 + 50000), usage());
+
+  GetHostUsage("bar.com", kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(predelete_bar_tmp - (4000 + 9), usage());
+
+  GetHostUsage("foo.com", kPerm);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(predelete_foo_pers, usage());
+
+  GetHostUsage("bar.com", kPerm);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(predelete_bar_pers, usage());
+}
+
+TEST_F(QuotaManagerTest, GetCachedOrigins) {
+  static const MockOriginData kData[] = {
+    { "http://a.com/",   kTemp,       1 },
+    { "http://a.com:1/", kTemp,      20 },
+    { "http://b.com/",   kPerm,     300 },
+    { "http://c.com/",   kTemp,    4000 },
+  };
+  MockStorageClient* client = CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
+      QuotaClient::kFileSystem);
+  RegisterClient(client);
+
+  // TODO(kinuko): Be careful when we add cache pruner.
+
+  std::set<GURL> origins;
+  GetCachedOrigins(kTemp, &origins);
+  EXPECT_TRUE(origins.empty());
+
+  // No matter how we make queries the quota manager tries to cache all
+  // the origins at startup.
+  GetHostUsage("a.com", kTemp);
+  base::RunLoop().RunUntilIdle();
+  GetCachedOrigins(kTemp, &origins);
+  EXPECT_EQ(3U, origins.size());
+
+  GetHostUsage("b.com", kTemp);
+  base::RunLoop().RunUntilIdle();
+  GetCachedOrigins(kTemp, &origins);
+  EXPECT_EQ(3U, origins.size());
+
+  GetCachedOrigins(kPerm, &origins);
+  EXPECT_TRUE(origins.empty());
+
+  GetGlobalUsage(kTemp);
+  base::RunLoop().RunUntilIdle();
+  GetCachedOrigins(kTemp, &origins);
+  EXPECT_EQ(3U, origins.size());
+
+  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kData); ++i) {
+    if (kData[i].type == kTemp)
+      EXPECT_TRUE(origins.find(GURL(kData[i].origin)) != origins.end());
+  }
+}
+
+TEST_F(QuotaManagerTest, NotifyAndLRUOrigin) {
+  static const MockOriginData kData[] = {
+    { "http://a.com/",   kTemp,  0 },
+    { "http://a.com:1/", kTemp,  0 },
+    { "https://a.com/",  kTemp,  0 },
+    { "http://b.com/",   kPerm,  0 },  // persistent
+    { "http://c.com/",   kTemp,  0 },
+  };
+  MockStorageClient* client = CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
+      QuotaClient::kFileSystem);
+  RegisterClient(client);
+
+  GURL origin;
+  GetLRUOrigin(kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_TRUE(lru_origin().is_empty());
+
+  NotifyStorageAccessed(client, GURL("http://a.com/"), kTemp);
+  GetLRUOrigin(kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ("http://a.com/", lru_origin().spec());
+
+  NotifyStorageAccessed(client, GURL("http://b.com/"), kPerm);
+  NotifyStorageAccessed(client, GURL("https://a.com/"), kTemp);
+  NotifyStorageAccessed(client, GURL("http://c.com/"), kTemp);
+  GetLRUOrigin(kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ("http://a.com/", lru_origin().spec());
+
+  DeleteOriginFromDatabase(lru_origin(), kTemp);
+  GetLRUOrigin(kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ("https://a.com/", lru_origin().spec());
+
+  DeleteOriginFromDatabase(lru_origin(), kTemp);
+  GetLRUOrigin(kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ("http://c.com/", lru_origin().spec());
+}
+
+TEST_F(QuotaManagerTest, GetLRUOriginWithOriginInUse) {
+  static const MockOriginData kData[] = {
+    { "http://a.com/",   kTemp,  0 },
+    { "http://a.com:1/", kTemp,  0 },
+    { "https://a.com/",  kTemp,  0 },
+    { "http://b.com/",   kPerm,  0 },  // persistent
+    { "http://c.com/",   kTemp,  0 },
+  };
+  MockStorageClient* client = CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
+      QuotaClient::kFileSystem);
+  RegisterClient(client);
+
+  GURL origin;
+  GetLRUOrigin(kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_TRUE(lru_origin().is_empty());
+
+  NotifyStorageAccessed(client, GURL("http://a.com/"), kTemp);
+  NotifyStorageAccessed(client, GURL("http://b.com/"), kPerm);
+  NotifyStorageAccessed(client, GURL("https://a.com/"), kTemp);
+  NotifyStorageAccessed(client, GURL("http://c.com/"), kTemp);
+
+  GetLRUOrigin(kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ("http://a.com/", lru_origin().spec());
+
+  // Notify origin http://a.com is in use.
+  NotifyOriginInUse(GURL("http://a.com/"));
+  GetLRUOrigin(kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ("https://a.com/", lru_origin().spec());
+
+  // Notify origin https://a.com is in use while GetLRUOrigin is running.
+  GetLRUOrigin(kTemp);
+  NotifyOriginInUse(GURL("https://a.com/"));
+  base::RunLoop().RunUntilIdle();
+  // Post-filtering must have excluded the returned origin, so we will
+  // see empty result here.
+  EXPECT_TRUE(lru_origin().is_empty());
+
+  // Notify access for http://c.com while GetLRUOrigin is running.
+  GetLRUOrigin(kTemp);
+  NotifyStorageAccessed(client, GURL("http://c.com/"), kTemp);
+  base::RunLoop().RunUntilIdle();
+  // Post-filtering must have excluded the returned origin, so we will
+  // see empty result here.
+  EXPECT_TRUE(lru_origin().is_empty());
+
+  NotifyOriginNoLongerInUse(GURL("http://a.com/"));
+  NotifyOriginNoLongerInUse(GURL("https://a.com/"));
+  GetLRUOrigin(kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ("http://a.com/", lru_origin().spec());
+}
+
+TEST_F(QuotaManagerTest, GetOriginsModifiedSince) {
+  static const MockOriginData kData[] = {
+    { "http://a.com/",   kTemp,  0 },
+    { "http://a.com:1/", kTemp,  0 },
+    { "https://a.com/",  kTemp,  0 },
+    { "http://b.com/",   kPerm,  0 },  // persistent
+    { "http://c.com/",   kTemp,  0 },
+  };
+  MockStorageClient* client = CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
+      QuotaClient::kFileSystem);
+  RegisterClient(client);
+
+  GetOriginsModifiedSince(kTemp, base::Time());
+  base::RunLoop().RunUntilIdle();
+  EXPECT_TRUE(modified_origins().empty());
+  EXPECT_EQ(modified_origins_type(), kTemp);
+
+  base::Time time1 = client->IncrementMockTime();
+  client->ModifyOriginAndNotify(GURL("http://a.com/"), kTemp, 10);
+  client->ModifyOriginAndNotify(GURL("http://a.com:1/"), kTemp, 10);
+  client->ModifyOriginAndNotify(GURL("http://b.com/"), kPerm, 10);
+  base::Time time2 = client->IncrementMockTime();
+  client->ModifyOriginAndNotify(GURL("https://a.com/"), kTemp, 10);
+  client->ModifyOriginAndNotify(GURL("http://c.com/"), kTemp, 10);
+  base::Time time3 = client->IncrementMockTime();
+
+  GetOriginsModifiedSince(kTemp, time1);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(4U, modified_origins().size());
+  EXPECT_EQ(modified_origins_type(), kTemp);
+  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kData); ++i) {
+    if (kData[i].type == kTemp)
+      EXPECT_EQ(1U, modified_origins().count(GURL(kData[i].origin)));
+  }
+
+  GetOriginsModifiedSince(kTemp, time2);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(2U, modified_origins().size());
+
+  GetOriginsModifiedSince(kTemp, time3);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_TRUE(modified_origins().empty());
+  EXPECT_EQ(modified_origins_type(), kTemp);
+
+  client->ModifyOriginAndNotify(GURL("http://a.com/"), kTemp, 10);
+
+  GetOriginsModifiedSince(kTemp, time3);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(1U, modified_origins().size());
+  EXPECT_EQ(1U, modified_origins().count(GURL("http://a.com/")));
+  EXPECT_EQ(modified_origins_type(), kTemp);
+}
+
+TEST_F(QuotaManagerTest, DumpQuotaTable) {
+  SetPersistentHostQuota("example1.com", 1);
+  SetPersistentHostQuota("example2.com", 20);
+  SetPersistentHostQuota("example3.com", 300);
+  base::RunLoop().RunUntilIdle();
+
+  DumpQuotaTable();
+  base::RunLoop().RunUntilIdle();
+
+  const QuotaTableEntry kEntries[] = {
+    QuotaTableEntry("example1.com", kPerm, 1),
+    QuotaTableEntry("example2.com", kPerm, 20),
+    QuotaTableEntry("example3.com", kPerm, 300),
+  };
+  std::set<QuotaTableEntry> entries
+      (kEntries, kEntries + ARRAYSIZE_UNSAFE(kEntries));
+
+  typedef QuotaTableEntries::const_iterator iterator;
+  for (iterator itr(quota_entries().begin()), end(quota_entries().end());
+       itr != end; ++itr) {
+    SCOPED_TRACE(testing::Message()
+                 << "host = " << itr->host << ", "
+                 << "quota = " << itr->quota);
+    EXPECT_EQ(1u, entries.erase(*itr));
+  }
+  EXPECT_TRUE(entries.empty());
+}
+
+TEST_F(QuotaManagerTest, DumpOriginInfoTable) {
+  using std::make_pair;
+
+  quota_manager()->NotifyStorageAccessed(
+      QuotaClient::kUnknown,
+      GURL("http://example.com/"),
+      kTemp);
+  quota_manager()->NotifyStorageAccessed(
+      QuotaClient::kUnknown,
+      GURL("http://example.com/"),
+      kPerm);
+  quota_manager()->NotifyStorageAccessed(
+      QuotaClient::kUnknown,
+      GURL("http://example.com/"),
+      kPerm);
+  base::RunLoop().RunUntilIdle();
+
+  DumpOriginInfoTable();
+  base::RunLoop().RunUntilIdle();
+
+  typedef std::pair<GURL, StorageType> TypedOrigin;
+  typedef std::pair<TypedOrigin, int> Entry;
+  const Entry kEntries[] = {
+    make_pair(make_pair(GURL("http://example.com/"), kTemp), 1),
+    make_pair(make_pair(GURL("http://example.com/"), kPerm), 2),
+  };
+  std::set<Entry> entries
+      (kEntries, kEntries + ARRAYSIZE_UNSAFE(kEntries));
+
+  typedef OriginInfoTableEntries::const_iterator iterator;
+  for (iterator itr(origin_info_entries().begin()),
+                end(origin_info_entries().end());
+       itr != end; ++itr) {
+    SCOPED_TRACE(testing::Message()
+                 << "host = " << itr->origin << ", "
+                 << "type = " << itr->type << ", "
+                 << "used_count = " << itr->used_count);
+    EXPECT_EQ(1u, entries.erase(
+        make_pair(make_pair(itr->origin, itr->type),
+                  itr->used_count)));
+  }
+  EXPECT_TRUE(entries.empty());
+}
+
+TEST_F(QuotaManagerTest, QuotaForEmptyHost) {
+  GetPersistentHostQuota(std::string());
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(0, quota());
+
+  SetPersistentHostQuota(std::string(), 10);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaErrorNotSupported, status());
+}
+
+TEST_F(QuotaManagerTest, DeleteSpecificClientTypeSingleOrigin) {
+  static const MockOriginData kData1[] = {
+    { "http://foo.com/",   kTemp, 1 },
+  };
+  static const MockOriginData kData2[] = {
+    { "http://foo.com/",   kTemp, 2 },
+  };
+  static const MockOriginData kData3[] = {
+    { "http://foo.com/",   kTemp, 4 },
+  };
+  static const MockOriginData kData4[] = {
+    { "http://foo.com/",   kTemp, 8 },
+  };
+  MockStorageClient* client1 = CreateClient(kData1, ARRAYSIZE_UNSAFE(kData1),
+      QuotaClient::kFileSystem);
+  MockStorageClient* client2 = CreateClient(kData2, ARRAYSIZE_UNSAFE(kData2),
+      QuotaClient::kAppcache);
+  MockStorageClient* client3 = CreateClient(kData3, ARRAYSIZE_UNSAFE(kData3),
+      QuotaClient::kDatabase);
+  MockStorageClient* client4 = CreateClient(kData4, ARRAYSIZE_UNSAFE(kData4),
+      QuotaClient::kIndexedDatabase);
+  RegisterClient(client1);
+  RegisterClient(client2);
+  RegisterClient(client3);
+  RegisterClient(client4);
+
+  GetHostUsage("foo.com", kTemp);
+  base::RunLoop().RunUntilIdle();
+  const int64 predelete_foo_tmp = usage();
+
+  DeleteOriginData(GURL("http://foo.com/"), kTemp, QuotaClient::kFileSystem);
+  base::RunLoop().RunUntilIdle();
+  GetHostUsage("foo.com", kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(predelete_foo_tmp - 1, usage());
+
+  DeleteOriginData(GURL("http://foo.com/"), kTemp, QuotaClient::kAppcache);
+  base::RunLoop().RunUntilIdle();
+  GetHostUsage("foo.com", kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(predelete_foo_tmp - 2 - 1, usage());
+
+  DeleteOriginData(GURL("http://foo.com/"), kTemp, QuotaClient::kDatabase);
+  base::RunLoop().RunUntilIdle();
+  GetHostUsage("foo.com", kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(predelete_foo_tmp - 4 - 2 - 1, usage());
+
+  DeleteOriginData(GURL("http://foo.com/"), kTemp,
+      QuotaClient::kIndexedDatabase);
+  base::RunLoop().RunUntilIdle();
+  GetHostUsage("foo.com", kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(predelete_foo_tmp - 8 - 4 - 2 - 1, usage());
+}
+
+TEST_F(QuotaManagerTest, DeleteSpecificClientTypeSingleHost) {
+  static const MockOriginData kData1[] = {
+    { "http://foo.com:1111/",   kTemp, 1 },
+  };
+  static const MockOriginData kData2[] = {
+    { "http://foo.com:2222/",   kTemp, 2 },
+  };
+  static const MockOriginData kData3[] = {
+    { "http://foo.com:3333/",   kTemp, 4 },
+  };
+  static const MockOriginData kData4[] = {
+    { "http://foo.com:4444/",   kTemp, 8 },
+  };
+  MockStorageClient* client1 = CreateClient(kData1, ARRAYSIZE_UNSAFE(kData1),
+      QuotaClient::kFileSystem);
+  MockStorageClient* client2 = CreateClient(kData2, ARRAYSIZE_UNSAFE(kData2),
+      QuotaClient::kAppcache);
+  MockStorageClient* client3 = CreateClient(kData3, ARRAYSIZE_UNSAFE(kData3),
+      QuotaClient::kDatabase);
+  MockStorageClient* client4 = CreateClient(kData4, ARRAYSIZE_UNSAFE(kData4),
+      QuotaClient::kIndexedDatabase);
+  RegisterClient(client1);
+  RegisterClient(client2);
+  RegisterClient(client3);
+  RegisterClient(client4);
+
+  GetHostUsage("foo.com", kTemp);
+  base::RunLoop().RunUntilIdle();
+  const int64 predelete_foo_tmp = usage();
+
+  DeleteHostData("foo.com", kTemp, QuotaClient::kFileSystem);
+  base::RunLoop().RunUntilIdle();
+  GetHostUsage("foo.com", kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(predelete_foo_tmp - 1, usage());
+
+  DeleteHostData("foo.com", kTemp, QuotaClient::kAppcache);
+  base::RunLoop().RunUntilIdle();
+  GetHostUsage("foo.com", kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(predelete_foo_tmp - 2 - 1, usage());
+
+  DeleteHostData("foo.com", kTemp, QuotaClient::kDatabase);
+  base::RunLoop().RunUntilIdle();
+  GetHostUsage("foo.com", kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(predelete_foo_tmp - 4 - 2 - 1, usage());
+
+  DeleteHostData("foo.com", kTemp, QuotaClient::kIndexedDatabase);
+  base::RunLoop().RunUntilIdle();
+  GetHostUsage("foo.com", kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(predelete_foo_tmp - 8 - 4 - 2 - 1, usage());
+}
+
+TEST_F(QuotaManagerTest, DeleteMultipleClientTypesSingleOrigin) {
+  static const MockOriginData kData1[] = {
+    { "http://foo.com/",   kTemp, 1 },
+  };
+  static const MockOriginData kData2[] = {
+    { "http://foo.com/",   kTemp, 2 },
+  };
+  static const MockOriginData kData3[] = {
+    { "http://foo.com/",   kTemp, 4 },
+  };
+  static const MockOriginData kData4[] = {
+    { "http://foo.com/",   kTemp, 8 },
+  };
+  MockStorageClient* client1 = CreateClient(kData1, ARRAYSIZE_UNSAFE(kData1),
+      QuotaClient::kFileSystem);
+  MockStorageClient* client2 = CreateClient(kData2, ARRAYSIZE_UNSAFE(kData2),
+      QuotaClient::kAppcache);
+  MockStorageClient* client3 = CreateClient(kData3, ARRAYSIZE_UNSAFE(kData3),
+      QuotaClient::kDatabase);
+  MockStorageClient* client4 = CreateClient(kData4, ARRAYSIZE_UNSAFE(kData4),
+      QuotaClient::kIndexedDatabase);
+  RegisterClient(client1);
+  RegisterClient(client2);
+  RegisterClient(client3);
+  RegisterClient(client4);
+
+  GetHostUsage("foo.com", kTemp);
+  base::RunLoop().RunUntilIdle();
+  const int64 predelete_foo_tmp = usage();
+
+  DeleteOriginData(GURL("http://foo.com/"), kTemp,
+      QuotaClient::kFileSystem | QuotaClient::kDatabase);
+  base::RunLoop().RunUntilIdle();
+  GetHostUsage("foo.com", kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(predelete_foo_tmp - 4 - 1, usage());
+
+  DeleteOriginData(GURL("http://foo.com/"), kTemp,
+      QuotaClient::kAppcache | QuotaClient::kIndexedDatabase);
+  base::RunLoop().RunUntilIdle();
+  GetHostUsage("foo.com", kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(predelete_foo_tmp - 8 - 4 - 2 - 1, usage());
+}
+
+TEST_F(QuotaManagerTest, DeleteMultipleClientTypesSingleHost) {
+  static const MockOriginData kData1[] = {
+    { "http://foo.com:1111/",   kTemp, 1 },
+  };
+  static const MockOriginData kData2[] = {
+    { "http://foo.com:2222/",   kTemp, 2 },
+  };
+  static const MockOriginData kData3[] = {
+    { "http://foo.com:3333/",   kTemp, 4 },
+  };
+  static const MockOriginData kData4[] = {
+    { "http://foo.com:4444/",   kTemp, 8 },
+  };
+  MockStorageClient* client1 = CreateClient(kData1, ARRAYSIZE_UNSAFE(kData1),
+      QuotaClient::kFileSystem);
+  MockStorageClient* client2 = CreateClient(kData2, ARRAYSIZE_UNSAFE(kData2),
+      QuotaClient::kAppcache);
+  MockStorageClient* client3 = CreateClient(kData3, ARRAYSIZE_UNSAFE(kData3),
+      QuotaClient::kDatabase);
+  MockStorageClient* client4 = CreateClient(kData4, ARRAYSIZE_UNSAFE(kData4),
+      QuotaClient::kIndexedDatabase);
+  RegisterClient(client1);
+  RegisterClient(client2);
+  RegisterClient(client3);
+  RegisterClient(client4);
+
+  GetHostUsage("foo.com", kTemp);
+  base::RunLoop().RunUntilIdle();
+  const int64 predelete_foo_tmp = usage();
+
+  DeleteHostData("foo.com", kTemp,
+      QuotaClient::kFileSystem | QuotaClient::kAppcache);
+  base::RunLoop().RunUntilIdle();
+  GetHostUsage("foo.com", kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(predelete_foo_tmp - 2 - 1, usage());
+
+  DeleteHostData("foo.com", kTemp,
+      QuotaClient::kDatabase | QuotaClient::kIndexedDatabase);
+  base::RunLoop().RunUntilIdle();
+  GetHostUsage("foo.com", kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(predelete_foo_tmp - 8 - 4 - 2 - 1, usage());
+}
+
+TEST_F(QuotaManagerTest, GetUsageAndQuota_Incognito) {
+  ResetQuotaManager(true);
+
+  static const MockOriginData kData[] = {
+    { "http://foo.com/", kTemp, 10 },
+    { "http://foo.com/", kPerm, 80 },
+  };
+  RegisterClient(CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
+      QuotaClient::kFileSystem));
+
+  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(80, usage());
+  EXPECT_EQ(0, quota());
+
+  SetTemporaryGlobalQuota(100);
+  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(10, usage());
+  EXPECT_LE(std::min(static_cast<int64>(100 / kPerHostTemporaryPortion),
+                     QuotaManager::kIncognitoDefaultQuotaLimit), quota());
+
+  mock_special_storage_policy()->AddUnlimited(GURL("http://foo.com/"));
+  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(80, usage());
+  EXPECT_EQ(QuotaManager::kIncognitoDefaultQuotaLimit, quota());
+
+  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(kQuotaStatusOk, status());
+  EXPECT_EQ(10, usage());
+  EXPECT_EQ(QuotaManager::kIncognitoDefaultQuotaLimit, quota());
+}
+
+}  // namespace content
diff --git a/content/browser/quota/quota_temporary_storage_evictor_unittest.cc b/content/browser/quota/quota_temporary_storage_evictor_unittest.cc
new file mode 100644
index 0000000..a9d93f6
--- /dev/null
+++ b/content/browser/quota/quota_temporary_storage_evictor_unittest.cc
@@ -0,0 +1,414 @@
+// 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.
+
+#include <list>
+#include <map>
+#include <utility>
+
+#include "base/bind.h"
+#include "base/callback.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/memory/weak_ptr.h"
+#include "base/message_loop/message_loop_proxy.h"
+#include "base/run_loop.h"
+#include "content/public/test/mock_storage_client.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "webkit/browser/quota/quota_manager.h"
+#include "webkit/browser/quota/quota_temporary_storage_evictor.h"
+
+using quota::QuotaTemporaryStorageEvictor;
+using quota::StorageType;
+using quota::UsageAndQuota;
+
+namespace content {
+
+class QuotaTemporaryStorageEvictorTest;
+
+namespace {
+
+class MockQuotaEvictionHandler : public quota::QuotaEvictionHandler {
+ public:
+  explicit MockQuotaEvictionHandler(QuotaTemporaryStorageEvictorTest *test)
+      : quota_(0),
+        available_space_(0),
+        error_on_evict_origin_data_(false),
+        error_on_get_usage_and_quota_(false) {}
+
+  virtual void EvictOriginData(
+      const GURL& origin,
+      StorageType type,
+      const EvictOriginDataCallback& callback) OVERRIDE {
+    if (error_on_evict_origin_data_) {
+      callback.Run(quota::kQuotaErrorInvalidModification);
+      return;
+    }
+    int64 origin_usage = EnsureOriginRemoved(origin);
+    if (origin_usage >= 0)
+      available_space_ += origin_usage;
+    callback.Run(quota::kQuotaStatusOk);
+  }
+
+  virtual void GetUsageAndQuotaForEviction(
+      const UsageAndQuotaCallback& callback) OVERRIDE {
+    if (error_on_get_usage_and_quota_) {
+      callback.Run(quota::kQuotaErrorInvalidAccess, UsageAndQuota());
+      return;
+    }
+    if (!task_for_get_usage_and_quota_.is_null())
+      task_for_get_usage_and_quota_.Run();
+    UsageAndQuota quota_and_usage(-1, GetUsage(), quota_, available_space_);
+    callback.Run(quota::kQuotaStatusOk, quota_and_usage);
+  }
+
+  virtual void GetLRUOrigin(
+      StorageType type,
+      const GetLRUOriginCallback& callback) OVERRIDE {
+    if (origin_order_.empty())
+      callback.Run(GURL());
+    else
+      callback.Run(GURL(origin_order_.front()));
+  }
+
+  int64 GetUsage() const {
+    int64 total_usage = 0;
+    for (std::map<GURL, int64>::const_iterator p = origins_.begin();
+         p != origins_.end();
+         ++p)
+      total_usage += p->second;
+    return total_usage;
+  }
+
+  void set_quota(int64 quota) {
+    quota_ = quota;
+  }
+  void set_available_space(int64 available_space) {
+    available_space_ = available_space;
+  }
+  void set_task_for_get_usage_and_quota(const base::Closure& task) {
+    task_for_get_usage_and_quota_= task;
+  }
+  void set_error_on_evict_origin_data(bool error_on_evict_origin_data) {
+    error_on_evict_origin_data_ = error_on_evict_origin_data;
+  }
+  void set_error_on_get_usage_and_quota(bool error_on_get_usage_and_quota) {
+    error_on_get_usage_and_quota_ = error_on_get_usage_and_quota;
+  }
+
+  // Simulates an access to |origin|.  It reorders the internal LRU list.
+  // It internally uses AddOrigin().
+  void AccessOrigin(const GURL& origin) {
+    std::map<GURL, int64>::iterator found = origins_.find(origin);
+    EXPECT_TRUE(origins_.end() != found);
+    AddOrigin(origin, found->second);
+  }
+
+  // Simulates adding or overwriting the |origin| to the internal origin set
+  // with the |usage|.  It also adds or moves the |origin| to the end of the
+  // LRU list.
+  void AddOrigin(const GURL& origin, int64 usage) {
+    EnsureOriginRemoved(origin);
+    origin_order_.push_back(origin);
+    origins_[origin] = usage;
+  }
+
+ private:
+  int64 EnsureOriginRemoved(const GURL& origin) {
+    int64 origin_usage;
+    if (origins_.find(origin) == origins_.end())
+      return -1;
+    else
+      origin_usage = origins_[origin];
+
+    origins_.erase(origin);
+    origin_order_.remove(origin);
+    return origin_usage;
+  }
+
+  int64 quota_;
+  int64 available_space_;
+  std::list<GURL> origin_order_;
+  std::map<GURL, int64> origins_;
+  bool error_on_evict_origin_data_;
+  bool error_on_get_usage_and_quota_;
+
+  base::Closure task_for_get_usage_and_quota_;
+};
+
+}  // namespace
+
+class QuotaTemporaryStorageEvictorTest : public testing::Test {
+ public:
+  QuotaTemporaryStorageEvictorTest()
+      : num_get_usage_and_quota_for_eviction_(0),
+        weak_factory_(this) {}
+
+  virtual void SetUp() {
+    quota_eviction_handler_.reset(new MockQuotaEvictionHandler(this));
+
+    // Run multiple evictions in a single RunUntilIdle() when interval_ms == 0
+    temporary_storage_evictor_.reset(new QuotaTemporaryStorageEvictor(
+        quota_eviction_handler_.get(), 0));
+  }
+
+  virtual void TearDown() {
+    temporary_storage_evictor_.reset();
+    quota_eviction_handler_.reset();
+    base::RunLoop().RunUntilIdle();
+  }
+
+  void TaskForRepeatedEvictionTest(
+      const std::pair<GURL, int64>& origin_to_be_added,
+      const GURL& origin_to_be_accessed,
+      int expected_usage_after_first,
+      int expected_usage_after_second) {
+    EXPECT_GE(4, num_get_usage_and_quota_for_eviction_);
+    switch (num_get_usage_and_quota_for_eviction_) {
+    case 2:
+      EXPECT_EQ(expected_usage_after_first,
+                quota_eviction_handler()->GetUsage());
+      if (!origin_to_be_added.first.is_empty())
+        quota_eviction_handler()->AddOrigin(origin_to_be_added.first,
+                                            origin_to_be_added.second);
+      if (!origin_to_be_accessed.is_empty())
+        quota_eviction_handler()->AccessOrigin(origin_to_be_accessed);
+      break;
+    case 3:
+      EXPECT_EQ(expected_usage_after_second,
+                quota_eviction_handler()->GetUsage());
+      temporary_storage_evictor()->set_repeated_eviction(false);
+      break;
+    }
+    ++num_get_usage_and_quota_for_eviction_;
+  }
+
+ protected:
+  MockQuotaEvictionHandler* quota_eviction_handler() const {
+    return static_cast<MockQuotaEvictionHandler*>(
+        quota_eviction_handler_.get());
+  }
+
+  QuotaTemporaryStorageEvictor* temporary_storage_evictor() const {
+    return temporary_storage_evictor_.get();
+  }
+
+  const QuotaTemporaryStorageEvictor::Statistics& statistics() const {
+    return temporary_storage_evictor()->statistics_;
+  }
+
+  void set_repeated_eviction(bool repeated_eviction) const {
+    return temporary_storage_evictor_->set_repeated_eviction(repeated_eviction);
+  }
+
+  int num_get_usage_and_quota_for_eviction() const {
+    return num_get_usage_and_quota_for_eviction_;
+  }
+
+  int64 default_min_available_disk_space_to_start_eviction() const {
+    return 1000 * 1000 * 500;
+  }
+
+  void set_min_available_disk_space_to_start_eviction(int64 value) const {
+    temporary_storage_evictor_->set_min_available_disk_space_to_start_eviction(
+        value);
+  }
+
+  void reset_min_available_disk_space_to_start_eviction() const {
+    temporary_storage_evictor_->
+        reset_min_available_disk_space_to_start_eviction();
+  }
+
+  base::MessageLoop message_loop_;
+  scoped_ptr<MockQuotaEvictionHandler> quota_eviction_handler_;
+  scoped_ptr<QuotaTemporaryStorageEvictor> temporary_storage_evictor_;
+
+  int num_get_usage_and_quota_for_eviction_;
+
+  base::WeakPtrFactory<QuotaTemporaryStorageEvictorTest> weak_factory_;
+
+  DISALLOW_COPY_AND_ASSIGN(QuotaTemporaryStorageEvictorTest);
+};
+
+TEST_F(QuotaTemporaryStorageEvictorTest, SimpleEvictionTest) {
+  quota_eviction_handler()->AddOrigin(GURL("http://www.z.com"), 3000);
+  quota_eviction_handler()->AddOrigin(GURL("http://www.y.com"), 200);
+  quota_eviction_handler()->AddOrigin(GURL("http://www.x.com"), 500);
+  quota_eviction_handler()->set_quota(4000);
+  quota_eviction_handler()->set_available_space(1000000000);
+  EXPECT_EQ(3000 + 200 + 500, quota_eviction_handler()->GetUsage());
+  set_repeated_eviction(false);
+  temporary_storage_evictor()->Start();
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(200 + 500, quota_eviction_handler()->GetUsage());
+
+  EXPECT_EQ(0, statistics().num_errors_on_evicting_origin);
+  EXPECT_EQ(0, statistics().num_errors_on_getting_usage_and_quota);
+  EXPECT_EQ(1, statistics().num_evicted_origins);
+  EXPECT_EQ(1, statistics().num_eviction_rounds);
+  EXPECT_EQ(0, statistics().num_skipped_eviction_rounds);
+}
+
+TEST_F(QuotaTemporaryStorageEvictorTest, MultipleEvictionTest) {
+  quota_eviction_handler()->AddOrigin(GURL("http://www.z.com"), 20);
+  quota_eviction_handler()->AddOrigin(GURL("http://www.y.com"), 2900);
+  quota_eviction_handler()->AddOrigin(GURL("http://www.x.com"), 450);
+  quota_eviction_handler()->AddOrigin(GURL("http://www.w.com"), 400);
+  quota_eviction_handler()->set_quota(4000);
+  quota_eviction_handler()->set_available_space(1000000000);
+  EXPECT_EQ(20 + 2900 + 450 + 400, quota_eviction_handler()->GetUsage());
+  set_repeated_eviction(false);
+  temporary_storage_evictor()->Start();
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(450 + 400, quota_eviction_handler()->GetUsage());
+
+  EXPECT_EQ(0, statistics().num_errors_on_evicting_origin);
+  EXPECT_EQ(0, statistics().num_errors_on_getting_usage_and_quota);
+  EXPECT_EQ(2, statistics().num_evicted_origins);
+  EXPECT_EQ(1, statistics().num_eviction_rounds);
+  EXPECT_EQ(0, statistics().num_skipped_eviction_rounds);
+}
+
+TEST_F(QuotaTemporaryStorageEvictorTest, RepeatedEvictionTest) {
+  const int64 a_size = 400;
+  const int64 b_size = 150;
+  const int64 c_size = 120;
+  const int64 d_size = 292;
+  const int64 initial_total_size = a_size + b_size + c_size + d_size;
+  const int64 e_size = 275;
+
+  quota_eviction_handler()->AddOrigin(GURL("http://www.d.com"), d_size);
+  quota_eviction_handler()->AddOrigin(GURL("http://www.c.com"), c_size);
+  quota_eviction_handler()->AddOrigin(GURL("http://www.b.com"), b_size);
+  quota_eviction_handler()->AddOrigin(GURL("http://www.a.com"), a_size);
+  quota_eviction_handler()->set_quota(1000);
+  quota_eviction_handler()->set_available_space(1000000000);
+  quota_eviction_handler()->set_task_for_get_usage_and_quota(
+      base::Bind(&QuotaTemporaryStorageEvictorTest::TaskForRepeatedEvictionTest,
+                 weak_factory_.GetWeakPtr(),
+                 std::make_pair(GURL("http://www.e.com"), e_size), GURL(),
+                 initial_total_size - d_size,
+                 initial_total_size - d_size + e_size - c_size));
+  EXPECT_EQ(initial_total_size, quota_eviction_handler()->GetUsage());
+  temporary_storage_evictor()->Start();
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(initial_total_size - d_size + e_size - c_size - b_size,
+            quota_eviction_handler()->GetUsage());
+  EXPECT_EQ(5, num_get_usage_and_quota_for_eviction());
+
+  EXPECT_EQ(0, statistics().num_errors_on_evicting_origin);
+  EXPECT_EQ(0, statistics().num_errors_on_getting_usage_and_quota);
+  EXPECT_EQ(3, statistics().num_evicted_origins);
+  EXPECT_EQ(2, statistics().num_eviction_rounds);
+  EXPECT_EQ(0, statistics().num_skipped_eviction_rounds);
+}
+
+TEST_F(QuotaTemporaryStorageEvictorTest, RepeatedEvictionSkippedTest) {
+  const int64 a_size = 400;
+  const int64 b_size = 150;
+  const int64 c_size = 120;
+  const int64 d_size = 292;
+  const int64 initial_total_size = a_size + b_size + c_size + d_size;
+
+  quota_eviction_handler()->AddOrigin(GURL("http://www.d.com"), d_size);
+  quota_eviction_handler()->AddOrigin(GURL("http://www.c.com"), c_size);
+  quota_eviction_handler()->AddOrigin(GURL("http://www.b.com"), b_size);
+  quota_eviction_handler()->AddOrigin(GURL("http://www.a.com"), a_size);
+  quota_eviction_handler()->set_quota(1000);
+  quota_eviction_handler()->set_available_space(1000000000);
+  quota_eviction_handler()->set_task_for_get_usage_and_quota(
+      base::Bind(&QuotaTemporaryStorageEvictorTest::TaskForRepeatedEvictionTest,
+                 weak_factory_.GetWeakPtr(), std::make_pair(GURL(), 0), GURL(),
+                 initial_total_size - d_size, initial_total_size - d_size));
+  EXPECT_EQ(initial_total_size, quota_eviction_handler()->GetUsage());
+  set_repeated_eviction(true);
+  temporary_storage_evictor()->Start();
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(initial_total_size - d_size, quota_eviction_handler()->GetUsage());
+  EXPECT_EQ(4, num_get_usage_and_quota_for_eviction());
+
+  EXPECT_EQ(0, statistics().num_errors_on_evicting_origin);
+  EXPECT_EQ(0, statistics().num_errors_on_getting_usage_and_quota);
+  EXPECT_EQ(1, statistics().num_evicted_origins);
+  EXPECT_EQ(3, statistics().num_eviction_rounds);
+  EXPECT_EQ(2, statistics().num_skipped_eviction_rounds);
+}
+
+TEST_F(QuotaTemporaryStorageEvictorTest, RepeatedEvictionWithAccessOriginTest) {
+  const int64 a_size = 400;
+  const int64 b_size = 150;
+  const int64 c_size = 120;
+  const int64 d_size = 292;
+  const int64 initial_total_size = a_size + b_size + c_size + d_size;
+  const int64 e_size = 275;
+
+  quota_eviction_handler()->AddOrigin(GURL("http://www.d.com"), d_size);
+  quota_eviction_handler()->AddOrigin(GURL("http://www.c.com"), c_size);
+  quota_eviction_handler()->AddOrigin(GURL("http://www.b.com"), b_size);
+  quota_eviction_handler()->AddOrigin(GURL("http://www.a.com"), a_size);
+  quota_eviction_handler()->set_quota(1000);
+  quota_eviction_handler()->set_available_space(1000000000);
+  quota_eviction_handler()->set_task_for_get_usage_and_quota(
+      base::Bind(&QuotaTemporaryStorageEvictorTest::TaskForRepeatedEvictionTest,
+                 weak_factory_.GetWeakPtr(),
+                 std::make_pair(GURL("http://www.e.com"), e_size),
+                 GURL("http://www.c.com"),
+                 initial_total_size - d_size,
+                 initial_total_size - d_size + e_size - b_size));
+  EXPECT_EQ(initial_total_size, quota_eviction_handler()->GetUsage());
+  temporary_storage_evictor()->Start();
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(initial_total_size - d_size + e_size - b_size - a_size,
+            quota_eviction_handler()->GetUsage());
+  EXPECT_EQ(5, num_get_usage_and_quota_for_eviction());
+
+  EXPECT_EQ(0, statistics().num_errors_on_evicting_origin);
+  EXPECT_EQ(0, statistics().num_errors_on_getting_usage_and_quota);
+  EXPECT_EQ(3, statistics().num_evicted_origins);
+  EXPECT_EQ(2, statistics().num_eviction_rounds);
+  EXPECT_EQ(0, statistics().num_skipped_eviction_rounds);
+}
+
+TEST_F(QuotaTemporaryStorageEvictorTest, DiskSpaceNonEvictionTest) {
+  quota_eviction_handler()->AddOrigin(GURL("http://www.z.com"), 414);
+  quota_eviction_handler()->AddOrigin(GURL("http://www.x.com"), 450);
+  quota_eviction_handler()->set_quota(10000);
+  quota_eviction_handler()->set_available_space(
+      default_min_available_disk_space_to_start_eviction() - 350);
+  EXPECT_EQ(414 + 450, quota_eviction_handler()->GetUsage());
+  reset_min_available_disk_space_to_start_eviction();
+  set_repeated_eviction(false);
+  temporary_storage_evictor()->Start();
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(414 + 450, quota_eviction_handler()->GetUsage());
+
+  EXPECT_EQ(0, statistics().num_errors_on_evicting_origin);
+  EXPECT_EQ(0, statistics().num_errors_on_getting_usage_and_quota);
+  EXPECT_EQ(0, statistics().num_evicted_origins);
+  EXPECT_EQ(1, statistics().num_eviction_rounds);
+  EXPECT_EQ(1, statistics().num_skipped_eviction_rounds);
+}
+
+TEST_F(QuotaTemporaryStorageEvictorTest, DiskSpaceEvictionTest) {
+  quota_eviction_handler()->AddOrigin(GURL("http://www.z.com"), 294);
+  quota_eviction_handler()->AddOrigin(GURL("http://www.y.com"), 120);
+  quota_eviction_handler()->AddOrigin(GURL("http://www.x.com"), 150);
+  quota_eviction_handler()->AddOrigin(GURL("http://www.w.com"), 300);
+  quota_eviction_handler()->set_quota(10000);
+  quota_eviction_handler()->set_available_space(
+      default_min_available_disk_space_to_start_eviction() - 350);
+  EXPECT_EQ(294 + 120 + 150 + 300, quota_eviction_handler()->GetUsage());
+  set_min_available_disk_space_to_start_eviction(
+      default_min_available_disk_space_to_start_eviction());
+  set_repeated_eviction(false);
+  temporary_storage_evictor()->Start();
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(150 + 300, quota_eviction_handler()->GetUsage());
+
+  EXPECT_EQ(0, statistics().num_errors_on_evicting_origin);
+  EXPECT_EQ(0, statistics().num_errors_on_getting_usage_and_quota);
+  EXPECT_EQ(2, statistics().num_evicted_origins);
+  EXPECT_EQ(1, statistics().num_eviction_rounds);
+  EXPECT_EQ(0, statistics().num_skipped_eviction_rounds);
+}
+
+}  // namespace content
diff --git a/content/browser/quota/storage_monitor_unittest.cc b/content/browser/quota/storage_monitor_unittest.cc
new file mode 100644
index 0000000..132fa5f
--- /dev/null
+++ b/content/browser/quota/storage_monitor_unittest.cc
@@ -0,0 +1,708 @@
+// 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.
+
+#include <vector>
+
+#include "base/files/scoped_temp_dir.h"
+#include "base/message_loop/message_loop.h"
+#include "base/message_loop/message_loop_proxy.h"
+#include "base/run_loop.h"
+#include "content/public/test/mock_storage_client.h"
+#include "net/base/net_util.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "webkit/browser/quota/mock_special_storage_policy.h"
+#include "webkit/browser/quota/quota_manager.h"
+#include "webkit/browser/quota/quota_manager_proxy.h"
+#include "webkit/browser/quota/storage_monitor.h"
+#include "webkit/browser/quota/storage_observer.h"
+
+using quota::HostStorageObservers;
+using quota::kQuotaErrorNotSupported;
+using quota::kQuotaStatusOk;
+using quota::kStorageTypePersistent;
+using quota::kStorageTypeTemporary;
+using quota::MockSpecialStoragePolicy;
+using quota::QuotaClient;
+using quota::QuotaManager;
+using quota::QuotaStatusCode;
+using quota::SpecialStoragePolicy;
+using quota::StorageMonitor;
+using quota::StorageObserver;
+using quota::StorageObserverList;
+using quota::StorageType;
+using quota::StorageTypeObservers;
+
+namespace content {
+
+namespace {
+
+const char kDefaultOrigin[] = "http://www.foo.com/";
+const char kAlternativeOrigin[] = "http://www.bar.com/";
+
+class MockObserver : public StorageObserver {
+ public:
+  const StorageObserver::Event& LastEvent() const {
+    CHECK(!events_.empty());
+    return events_.back();
+  }
+
+  int EventCount() const {
+    return events_.size();
+  }
+
+  // StorageObserver implementation:
+  virtual void OnStorageEvent(const StorageObserver::Event& event) OVERRIDE {
+    events_.push_back(event);
+  }
+
+ private:
+  std::vector<StorageObserver::Event> events_;
+};
+
+// A mock quota manager for overriding GetUsageAndQuotaForWebApps().
+class UsageMockQuotaManager : public QuotaManager {
+ public:
+  UsageMockQuotaManager(SpecialStoragePolicy* special_storage_policy)
+      : QuotaManager(
+            false,
+            base::FilePath(),
+            base::MessageLoopProxy::current().get(),
+            base::MessageLoopProxy::current().get(),
+            special_storage_policy),
+        callback_usage_(0),
+        callback_quota_(0),
+        callback_status_(kQuotaStatusOk),
+        initialized_(false) {
+  }
+
+  void SetCallbackParams(int64 usage, int64 quota, QuotaStatusCode status) {
+    initialized_ = true;
+    callback_quota_ = quota;
+    callback_usage_ = usage;
+    callback_status_ = status;
+  }
+
+  void InvokeCallback() {
+    delayed_callback_.Run(callback_status_, callback_usage_, callback_quota_);
+  }
+
+  virtual void GetUsageAndQuotaForWebApps(
+      const GURL& origin,
+      StorageType type,
+      const GetUsageAndQuotaCallback& callback) OVERRIDE {
+    if (initialized_)
+      callback.Run(callback_status_, callback_usage_, callback_quota_);
+    else
+      delayed_callback_ = callback;
+  }
+
+ protected:
+  virtual ~UsageMockQuotaManager() {}
+
+ private:
+  int64 callback_usage_;
+  int64 callback_quota_;
+  QuotaStatusCode callback_status_;
+  bool initialized_;
+  GetUsageAndQuotaCallback delayed_callback_;
+};
+
+}  // namespace
+
+class StorageMonitorTestBase : public testing::Test {
+ protected:
+  void DispatchPendingEvents(StorageObserverList& observer_list) {
+    observer_list.DispatchPendingEvent();
+  }
+
+  const StorageObserver::Event* GetPendingEvent(
+      const StorageObserverList& observer_list) {
+    return observer_list.notification_timer_.IsRunning()
+                ? &observer_list.pending_event_ : NULL;
+  }
+
+  const StorageObserver::Event* GetPendingEvent(
+      const HostStorageObservers& host_observers) {
+    return GetPendingEvent(host_observers.observers_);
+  }
+
+  int GetRequiredUpdatesCount(const StorageObserverList& observer_list) {
+    int count = 0;
+    for (StorageObserverList::StorageObserverStateMap::const_iterator it =
+            observer_list.observers_.begin();
+         it != observer_list.observers_.end(); ++it) {
+      if (it->second.requires_update)
+        ++count;
+    }
+
+    return count;
+  }
+
+  int GetRequiredUpdatesCount(const HostStorageObservers& host_observers) {
+    return GetRequiredUpdatesCount(host_observers.observers_);
+  }
+
+  void SetLastNotificationTime(StorageObserverList& observer_list,
+                               StorageObserver* observer) {
+    ASSERT_TRUE(observer_list.observers_.find(observer) !=
+                observer_list.observers_.end());
+
+    StorageObserverList::ObserverState& state =
+        observer_list.observers_[observer];
+    state.last_notification_time = base::TimeTicks::Now() - state.rate;
+  }
+
+  void SetLastNotificationTime(HostStorageObservers& host_observers,
+                               StorageObserver* observer) {
+    SetLastNotificationTime(host_observers.observers_, observer);
+  }
+
+  int GetObserverCount(const HostStorageObservers& host_observers) {
+    return host_observers.observers_.ObserverCount();
+  }
+};
+
+class StorageTestWithManagerBase : public StorageMonitorTestBase {
+ public:
+  virtual void SetUp() OVERRIDE {
+    storage_policy_ = new MockSpecialStoragePolicy();
+    quota_manager_ = new UsageMockQuotaManager(storage_policy_.get());
+  }
+
+  virtual void TearDown() OVERRIDE {
+    // This ensures the quota manager is destroyed correctly.
+    quota_manager_ = NULL;
+    base::RunLoop().RunUntilIdle();
+  }
+
+ protected:
+  base::MessageLoop message_loop_;
+  scoped_refptr<MockSpecialStoragePolicy> storage_policy_;
+  scoped_refptr<UsageMockQuotaManager> quota_manager_;
+};
+
+// Tests for StorageObserverList:
+
+typedef StorageMonitorTestBase StorageObserverListTest;
+
+// Test dispatching events to one observer.
+TEST_F(StorageObserverListTest, DispatchEventToSingleObserver) {
+  // A message loop is required as StorageObserverList may schedule jobs.
+  base::MessageLoop loop(base::MessageLoop::TYPE_DEFAULT);
+
+  StorageObserver::MonitorParams params(kStorageTypePersistent,
+                                        GURL(kDefaultOrigin),
+                                        base::TimeDelta::FromHours(1),
+                                        false);
+  MockObserver mock_observer;
+  StorageObserverList observer_list;
+  observer_list.AddObserver(&mock_observer, params);
+
+  StorageObserver::Event event;
+  event.filter = params.filter;
+
+  // Verify that the first event is dispatched immediately.
+  event.quota = 1;
+  event.usage = 1;
+  observer_list.OnStorageChange(event);
+  EXPECT_EQ(1, mock_observer.EventCount());
+  EXPECT_EQ(event, mock_observer.LastEvent());
+  EXPECT_EQ(NULL, GetPendingEvent(observer_list));
+  EXPECT_EQ(0, GetRequiredUpdatesCount(observer_list));
+
+  // Verify that the next event is pending.
+  event.quota = 2;
+  event.usage = 2;
+  observer_list.OnStorageChange(event);
+  EXPECT_EQ(1, mock_observer.EventCount());
+  ASSERT_TRUE(GetPendingEvent(observer_list));
+  EXPECT_EQ(event, *GetPendingEvent(observer_list));
+  EXPECT_EQ(1, GetRequiredUpdatesCount(observer_list));
+
+  // Fake the last notification time so that an event will be dispatched.
+  SetLastNotificationTime(observer_list, &mock_observer);
+  event.quota = 3;
+  event.usage = 3;
+  observer_list.OnStorageChange(event);
+  EXPECT_EQ(2, mock_observer.EventCount());
+  EXPECT_EQ(event, mock_observer.LastEvent());
+  EXPECT_EQ(NULL, GetPendingEvent(observer_list));
+  EXPECT_EQ(0, GetRequiredUpdatesCount(observer_list));
+
+  // Remove the observer.
+  event.quota = 4;
+  event.usage = 4;
+  observer_list.RemoveObserver(&mock_observer);
+  observer_list.OnStorageChange(event);
+  EXPECT_EQ(2, mock_observer.EventCount());
+  EXPECT_EQ(NULL, GetPendingEvent(observer_list));
+}
+
+// Test dispatching events to multiple observers.
+TEST_F(StorageObserverListTest, DispatchEventToMultipleObservers) {
+  // A message loop is required as StorageObserverList may schedule jobs.
+  base::MessageLoop loop(base::MessageLoop::TYPE_DEFAULT);
+
+  MockObserver mock_observer1;
+  MockObserver mock_observer2;
+  StorageObserverList observer_list;
+  StorageObserver::Filter filter(kStorageTypePersistent,
+                                 GURL(kDefaultOrigin));
+  observer_list.AddObserver(
+      &mock_observer1,
+      StorageObserver::MonitorParams(
+          filter, base::TimeDelta::FromHours(1), false));
+  observer_list.AddObserver(
+      &mock_observer2,
+      StorageObserver::MonitorParams(
+          filter, base::TimeDelta::FromHours(2), false));
+
+  StorageObserver::Event event;
+  event.filter = filter;
+
+  // Verify that the first event is dispatched immediately.
+  event.quota = 1;
+  event.usage = 1;
+  observer_list.OnStorageChange(event);
+  EXPECT_EQ(1, mock_observer1.EventCount());
+  EXPECT_EQ(1, mock_observer2.EventCount());
+  EXPECT_EQ(event, mock_observer1.LastEvent());
+  EXPECT_EQ(event, mock_observer2.LastEvent());
+  EXPECT_EQ(NULL, GetPendingEvent(observer_list));
+  EXPECT_EQ(0, GetRequiredUpdatesCount(observer_list));
+
+  // Fake the last notification time so that observer1 will receive the next
+  // event, but it will be pending for observer2.
+  SetLastNotificationTime(observer_list, &mock_observer1);
+  event.quota = 2;
+  event.usage = 2;
+  observer_list.OnStorageChange(event);
+  EXPECT_EQ(2, mock_observer1.EventCount());
+  EXPECT_EQ(1, mock_observer2.EventCount());
+  EXPECT_EQ(event, mock_observer1.LastEvent());
+  ASSERT_TRUE(GetPendingEvent(observer_list));
+  EXPECT_EQ(event, *GetPendingEvent(observer_list));
+  EXPECT_EQ(1, GetRequiredUpdatesCount(observer_list));
+
+  // Now dispatch the pending event to observer2.
+  SetLastNotificationTime(observer_list, &mock_observer2);
+  DispatchPendingEvents(observer_list);
+  EXPECT_EQ(2, mock_observer1.EventCount());
+  EXPECT_EQ(2, mock_observer2.EventCount());
+  EXPECT_EQ(event, mock_observer1.LastEvent());
+  EXPECT_EQ(event, mock_observer2.LastEvent());
+  EXPECT_EQ(NULL, GetPendingEvent(observer_list));
+  EXPECT_EQ(0, GetRequiredUpdatesCount(observer_list));
+}
+
+// Ensure that the |origin| field in events match the origin specified by the
+// observer on registration.
+TEST_F(StorageObserverListTest, ReplaceEventOrigin) {
+  StorageObserver::MonitorParams params(kStorageTypePersistent,
+                                        GURL(kDefaultOrigin),
+                                        base::TimeDelta::FromHours(1),
+                                        false);
+  MockObserver mock_observer;
+  StorageObserverList observer_list;
+  observer_list.AddObserver(&mock_observer, params);
+
+  StorageObserver::Event dispatched_event;
+  dispatched_event.filter = params.filter;
+  dispatched_event.filter.origin = GURL("https://www.foo.com/bar");
+  observer_list.OnStorageChange(dispatched_event);
+
+  EXPECT_EQ(params.filter.origin, mock_observer.LastEvent().filter.origin);
+}
+
+// Tests for HostStorageObservers:
+
+typedef StorageTestWithManagerBase HostStorageObserversTest;
+
+// Verify that HostStorageObservers is initialized after the first usage change.
+TEST_F(HostStorageObserversTest, InitializeOnUsageChange) {
+  StorageObserver::MonitorParams params(kStorageTypePersistent,
+                                        GURL(kDefaultOrigin),
+                                        base::TimeDelta::FromHours(1),
+                                        false);
+  const int64 kUsage = 324554;
+  const int64 kQuota = 234354354;
+  quota_manager_->SetCallbackParams(kUsage, kQuota, kQuotaStatusOk);
+
+  MockObserver mock_observer;
+  HostStorageObservers host_observers(quota_manager_.get());
+  host_observers.AddObserver(&mock_observer, params);
+
+  // Verify that HostStorageObservers dispatches the first event correctly.
+  StorageObserver::Event expected_event(params.filter, kUsage, kQuota);
+  host_observers.NotifyUsageChange(params.filter, 87324);
+  EXPECT_EQ(1, mock_observer.EventCount());
+  EXPECT_EQ(expected_event, mock_observer.LastEvent());
+  EXPECT_TRUE(host_observers.is_initialized());
+
+  // Verify that HostStorageObservers handles subsequent usage changes
+  // correctly.
+  const int64 kDelta = 2345;
+  expected_event.usage += kDelta;
+  SetLastNotificationTime(host_observers, &mock_observer);
+  host_observers.NotifyUsageChange(params.filter, kDelta);
+  EXPECT_EQ(2, mock_observer.EventCount());
+  EXPECT_EQ(expected_event, mock_observer.LastEvent());
+}
+
+// Verify that HostStorageObservers is initialized after the adding the first
+// observer that elected to receive the initial state.
+TEST_F(HostStorageObserversTest, InitializeOnObserver) {
+  const int64 kUsage = 74387;
+  const int64 kQuota = 92834743;
+  quota_manager_->SetCallbackParams(kUsage, kQuota, kQuotaStatusOk);
+  HostStorageObservers host_observers(quota_manager_.get());
+
+  // |host_observers| should not be initialized after the first observer is
+  // added because it did not elect to receive the initial state.
+  StorageObserver::MonitorParams params(kStorageTypePersistent,
+                                        GURL(kDefaultOrigin),
+                                        base::TimeDelta::FromHours(1),
+                                        false);
+  MockObserver mock_observer1;
+  host_observers.AddObserver(&mock_observer1, params);
+  EXPECT_FALSE(host_observers.is_initialized());
+  EXPECT_EQ(0, mock_observer1.EventCount());
+
+  // |host_observers| should be initialized after the second observer is
+  // added.
+  MockObserver mock_observer2;
+  params.dispatch_initial_state = true;
+  host_observers.AddObserver(&mock_observer2, params);
+  StorageObserver::Event expected_event(params.filter, kUsage, kQuota);
+  EXPECT_EQ(0, mock_observer1.EventCount());
+  EXPECT_EQ(1, mock_observer2.EventCount());
+  EXPECT_EQ(expected_event, mock_observer2.LastEvent());
+  EXPECT_TRUE(host_observers.is_initialized());
+  EXPECT_EQ(NULL, GetPendingEvent(host_observers));
+  EXPECT_EQ(0, GetRequiredUpdatesCount(host_observers));
+
+  // Verify that both observers will receive events after a usage change.
+  const int64 kDelta = 2345;
+  expected_event.usage += kDelta;
+  SetLastNotificationTime(host_observers, &mock_observer2);
+  host_observers.NotifyUsageChange(params.filter, kDelta);
+  EXPECT_EQ(1, mock_observer1.EventCount());
+  EXPECT_EQ(2, mock_observer2.EventCount());
+  EXPECT_EQ(expected_event, mock_observer1.LastEvent());
+  EXPECT_EQ(expected_event, mock_observer2.LastEvent());
+  EXPECT_EQ(NULL, GetPendingEvent(host_observers));
+  EXPECT_EQ(0, GetRequiredUpdatesCount(host_observers));
+
+  // Verify that the addition of a third observer only causes an event to be
+  // dispatched to the new observer.
+  MockObserver mock_observer3;
+  params.dispatch_initial_state = true;
+  host_observers.AddObserver(&mock_observer3, params);
+  EXPECT_EQ(1, mock_observer1.EventCount());
+  EXPECT_EQ(2, mock_observer2.EventCount());
+  EXPECT_EQ(1, mock_observer3.EventCount());
+  EXPECT_EQ(expected_event, mock_observer3.LastEvent());
+}
+
+// Verify that negative usage and quota is changed to zero.
+TEST_F(HostStorageObserversTest, NegativeUsageAndQuota) {
+  StorageObserver::MonitorParams params(kStorageTypePersistent,
+                                        GURL(kDefaultOrigin),
+                                        base::TimeDelta::FromHours(1),
+                                        false);
+  const int64 kUsage = -324554;
+  const int64 kQuota = -234354354;
+  quota_manager_->SetCallbackParams(kUsage, kQuota, kQuotaStatusOk);
+
+  MockObserver mock_observer;
+  HostStorageObservers host_observers(quota_manager_.get());
+  host_observers.AddObserver(&mock_observer, params);
+
+  StorageObserver::Event expected_event(params.filter, 0, 0);
+  host_observers.NotifyUsageChange(params.filter, -87324);
+  EXPECT_EQ(expected_event, mock_observer.LastEvent());
+}
+
+// Verify that HostStorageObservers can recover from a bad initialization.
+TEST_F(HostStorageObserversTest, RecoverFromBadUsageInit) {
+  StorageObserver::MonitorParams params(kStorageTypePersistent,
+                                        GURL(kDefaultOrigin),
+                                        base::TimeDelta::FromHours(1),
+                                        false);
+  MockObserver mock_observer;
+  HostStorageObservers host_observers(quota_manager_.get());
+  host_observers.AddObserver(&mock_observer, params);
+
+  // Set up the quota manager to return an error status.
+  const int64 kUsage = 6656;
+  const int64 kQuota = 99585556;
+  quota_manager_->SetCallbackParams(kUsage, kQuota, kQuotaErrorNotSupported);
+
+  // Verify that |host_observers| is not initialized and an event has not been
+  // dispatched.
+  host_observers.NotifyUsageChange(params.filter, 9438);
+  EXPECT_EQ(0, mock_observer.EventCount());
+  EXPECT_FALSE(host_observers.is_initialized());
+  EXPECT_EQ(NULL, GetPendingEvent(host_observers));
+  EXPECT_EQ(0, GetRequiredUpdatesCount(host_observers));
+
+  // Now ensure that quota manager returns a good status.
+  quota_manager_->SetCallbackParams(kUsage, kQuota, kQuotaStatusOk);
+  host_observers.NotifyUsageChange(params.filter, 9048543);
+  StorageObserver::Event expected_event(params.filter, kUsage, kQuota);
+  EXPECT_EQ(1, mock_observer.EventCount());
+  EXPECT_EQ(expected_event, mock_observer.LastEvent());
+  EXPECT_TRUE(host_observers.is_initialized());
+}
+
+// Verify that HostStorageObservers handle initialization of the cached usage
+// and quota correctly.
+TEST_F(HostStorageObserversTest, AsyncInitialization) {
+  StorageObserver::MonitorParams params(kStorageTypePersistent,
+                                        GURL(kDefaultOrigin),
+                                        base::TimeDelta::FromHours(1),
+                                        false);
+  MockObserver mock_observer;
+  HostStorageObservers host_observers(quota_manager_.get());
+  host_observers.AddObserver(&mock_observer, params);
+
+  // Trigger initialization. Leave the mock quota manager uninitialized so that
+  // the callback is not invoked.
+  host_observers.NotifyUsageChange(params.filter, 7645);
+  EXPECT_EQ(0, mock_observer.EventCount());
+  EXPECT_FALSE(host_observers.is_initialized());
+  EXPECT_EQ(NULL, GetPendingEvent(host_observers));
+  EXPECT_EQ(0, GetRequiredUpdatesCount(host_observers));
+
+  // Simulate notifying |host_observers| of a usage change before initialization
+  // is complete.
+  const int64 kUsage = 6656;
+  const int64 kQuota = 99585556;
+  const int64 kDelta = 327643;
+  host_observers.NotifyUsageChange(params.filter, kDelta);
+  EXPECT_EQ(0, mock_observer.EventCount());
+  EXPECT_FALSE(host_observers.is_initialized());
+  EXPECT_EQ(NULL, GetPendingEvent(host_observers));
+  EXPECT_EQ(0, GetRequiredUpdatesCount(host_observers));
+
+  // Simulate an asynchronous callback from QuotaManager.
+  quota_manager_->SetCallbackParams(kUsage, kQuota, kQuotaStatusOk);
+  quota_manager_->InvokeCallback();
+  StorageObserver::Event expected_event(params.filter, kUsage + kDelta, kQuota);
+  EXPECT_EQ(1, mock_observer.EventCount());
+  EXPECT_EQ(expected_event, mock_observer.LastEvent());
+  EXPECT_TRUE(host_observers.is_initialized());
+  EXPECT_EQ(NULL, GetPendingEvent(host_observers));
+  EXPECT_EQ(0, GetRequiredUpdatesCount(host_observers));
+}
+
+// Tests for StorageTypeObservers:
+
+typedef StorageTestWithManagerBase StorageTypeObserversTest;
+
+// Test adding and removing observers.
+TEST_F(StorageTypeObserversTest, AddRemoveObservers) {
+  StorageTypeObservers type_observers(quota_manager_.get());
+
+  StorageObserver::MonitorParams params1(kStorageTypePersistent,
+                                         GURL(kDefaultOrigin),
+                                         base::TimeDelta::FromHours(1),
+                                         false);
+  StorageObserver::MonitorParams params2(kStorageTypePersistent,
+                                         GURL(kAlternativeOrigin),
+                                         base::TimeDelta::FromHours(1),
+                                         false);
+  std::string host1 = net::GetHostOrSpecFromURL(params1.filter.origin);
+  std::string host2 = net::GetHostOrSpecFromURL(params2.filter.origin);
+
+  MockObserver mock_observer1;
+  MockObserver mock_observer2;
+  MockObserver mock_observer3;
+  type_observers.AddObserver(&mock_observer1, params1);
+  type_observers.AddObserver(&mock_observer2, params1);
+
+  type_observers.AddObserver(&mock_observer1, params2);
+  type_observers.AddObserver(&mock_observer2, params2);
+  type_observers.AddObserver(&mock_observer3, params2);
+
+  // Verify that the observers have been removed correctly.
+  ASSERT_TRUE(type_observers.GetHostObservers(host1));
+  ASSERT_TRUE(type_observers.GetHostObservers(host2));
+  EXPECT_EQ(2, GetObserverCount(*type_observers.GetHostObservers(host1)));
+  EXPECT_EQ(3, GetObserverCount(*type_observers.GetHostObservers(host2)));
+
+  // Remove an observer for a specific filter.
+  type_observers.RemoveObserverForFilter(&mock_observer1, params1.filter);
+  ASSERT_TRUE(type_observers.GetHostObservers(host1));
+  ASSERT_TRUE(type_observers.GetHostObservers(host2));
+  EXPECT_EQ(1, GetObserverCount(*type_observers.GetHostObservers(host1)));
+  EXPECT_EQ(3, GetObserverCount(*type_observers.GetHostObservers(host2)));
+
+  // Remove all instances of an observer.
+  type_observers.RemoveObserver(&mock_observer2);
+  ASSERT_TRUE(type_observers.GetHostObservers(host2));
+  EXPECT_EQ(2, GetObserverCount(*type_observers.GetHostObservers(host2)));
+  // Observers of host1 has been deleted as it is empty.
+  EXPECT_FALSE(type_observers.GetHostObservers(host1));
+}
+
+// Tests for StorageMonitor:
+
+class StorageMonitorTest : public StorageTestWithManagerBase {
+ public:
+  StorageMonitorTest()
+      : storage_monitor_(NULL),
+        params1_(kStorageTypeTemporary,
+                 GURL(kDefaultOrigin),
+                 base::TimeDelta::FromHours(1),
+                 false),
+        params2_(kStorageTypePersistent,
+                 GURL(kDefaultOrigin),
+                 base::TimeDelta::FromHours(1),
+                 false) {
+  }
+
+ protected:
+  virtual void SetUp() OVERRIDE {
+    StorageTestWithManagerBase::SetUp();
+
+    storage_monitor_ = quota_manager_->storage_monitor_.get();
+    host_ = net::GetHostOrSpecFromURL(params1_.filter.origin);
+
+    storage_monitor_->AddObserver(&mock_observer1_, params1_);
+    storage_monitor_->AddObserver(&mock_observer2_, params1_);
+
+    storage_monitor_->AddObserver(&mock_observer1_, params2_);
+    storage_monitor_->AddObserver(&mock_observer2_, params2_);
+    storage_monitor_->AddObserver(&mock_observer3_, params2_);
+  }
+
+  int GetObserverCount(StorageType storage_type) {
+    const StorageTypeObservers* type_observers =
+        storage_monitor_->GetStorageTypeObservers(storage_type);
+    return StorageMonitorTestBase::GetObserverCount(
+                *type_observers->GetHostObservers(host_));
+  }
+
+  void CheckObserverCount(int expected_temporary, int expected_persistent) {
+    ASSERT_TRUE(storage_monitor_->GetStorageTypeObservers(
+                    kStorageTypeTemporary));
+    ASSERT_TRUE(storage_monitor_->GetStorageTypeObservers(
+                    kStorageTypeTemporary)->GetHostObservers(host_));
+    EXPECT_EQ(expected_temporary, GetObserverCount(kStorageTypeTemporary));
+
+    ASSERT_TRUE(storage_monitor_->GetStorageTypeObservers(
+                    kStorageTypePersistent));
+    ASSERT_TRUE(storage_monitor_->GetStorageTypeObservers(
+                    kStorageTypePersistent)->GetHostObservers(host_));
+    EXPECT_EQ(expected_persistent, GetObserverCount(kStorageTypePersistent));
+  }
+
+  StorageMonitor* storage_monitor_;
+  StorageObserver::MonitorParams params1_;
+  StorageObserver::MonitorParams params2_;
+  MockObserver mock_observer1_;
+  MockObserver mock_observer2_;
+  MockObserver mock_observer3_;
+  std::string host_;
+};
+
+// Test adding storage observers.
+TEST_F(StorageMonitorTest, AddObservers) {
+  // Verify that the observers are added correctly.
+  CheckObserverCount(2, 3);
+}
+
+// Test dispatching events to storage observers.
+TEST_F(StorageMonitorTest, EventDispatch) {
+  // Verify dispatch of events.
+  const int64 kUsage = 5325;
+  const int64 kQuota = 903845;
+  quota_manager_->SetCallbackParams(kUsage, kQuota, kQuotaStatusOk);
+  storage_monitor_->NotifyUsageChange(params1_.filter, 9048543);
+
+  StorageObserver::Event expected_event(params1_.filter, kUsage, kQuota);
+  EXPECT_EQ(1, mock_observer1_.EventCount());
+  EXPECT_EQ(1, mock_observer2_.EventCount());
+  EXPECT_EQ(0, mock_observer3_.EventCount());
+  EXPECT_EQ(expected_event, mock_observer1_.LastEvent());
+  EXPECT_EQ(expected_event, mock_observer2_.LastEvent());
+}
+
+// Test removing all instances of an observer.
+TEST_F(StorageMonitorTest, RemoveObserver) {
+  storage_monitor_->RemoveObserver(&mock_observer1_);
+  CheckObserverCount(1, 2);
+}
+
+// Test removing an observer for a specific filter.
+TEST_F(StorageMonitorTest, RemoveObserverForFilter) {
+  storage_monitor_->RemoveObserverForFilter(&mock_observer1_, params2_.filter);
+  CheckObserverCount(2, 2);
+}
+
+// Integration test for QuotaManager and StorageMonitor:
+
+class StorageMonitorIntegrationTest : public testing::Test {
+ public:
+  virtual void SetUp() OVERRIDE {
+    ASSERT_TRUE(data_dir_.CreateUniqueTempDir());
+    storage_policy_ = new MockSpecialStoragePolicy();
+    quota_manager_ = new QuotaManager(
+        false,
+        data_dir_.path(),
+        base::MessageLoopProxy::current().get(),
+        base::MessageLoopProxy::current().get(),
+        storage_policy_.get());
+
+    client_ = new MockStorageClient(quota_manager_->proxy(),
+                                    NULL,
+                                    QuotaClient::kFileSystem,
+                                    0);
+
+    quota_manager_->proxy()->RegisterClient(client_);
+  }
+
+  virtual void TearDown() OVERRIDE {
+    // This ensures the quota manager is destroyed correctly.
+    quota_manager_ = NULL;
+    base::RunLoop().RunUntilIdle();
+  }
+
+ protected:
+  base::MessageLoop message_loop_;
+  base::ScopedTempDir data_dir_;
+  scoped_refptr<MockSpecialStoragePolicy> storage_policy_;
+  scoped_refptr<QuotaManager> quota_manager_;
+  MockStorageClient* client_;
+};
+
+// This test simulates a usage change in a quota client and verifies that a
+// storage observer will receive a storage event.
+TEST_F(StorageMonitorIntegrationTest, NotifyUsageEvent) {
+  const StorageType kTestStorageType = kStorageTypePersistent;
+  const int64 kTestUsage = 234743;
+
+  // Register the observer.
+  StorageObserver::MonitorParams params(kTestStorageType,
+                                        GURL(kDefaultOrigin),
+                                        base::TimeDelta::FromHours(1),
+                                        false);
+  MockObserver mock_observer;
+  quota_manager_->AddStorageObserver(&mock_observer, params);
+
+  // Fire a usage change.
+  client_->AddOriginAndNotify(GURL(kDefaultOrigin),
+                              kTestStorageType,
+                              kTestUsage);
+  base::RunLoop().RunUntilIdle();
+
+  // Verify that the observer receives it.
+  ASSERT_EQ(1, mock_observer.EventCount());
+  const StorageObserver::Event& event = mock_observer.LastEvent();
+  EXPECT_EQ(params.filter, event.filter);
+  EXPECT_EQ(kTestUsage, event.usage);
+}
+
+}  // namespace content
diff --git a/content/browser/quota/usage_tracker_unittest.cc b/content/browser/quota/usage_tracker_unittest.cc
new file mode 100644
index 0000000..5503b91
--- /dev/null
+++ b/content/browser/quota/usage_tracker_unittest.cc
@@ -0,0 +1,337 @@
+// 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.
+
+#include "base/bind.h"
+#include "base/run_loop.h"
+#include "net/base/net_util.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "webkit/browser/quota/mock_special_storage_policy.h"
+#include "webkit/browser/quota/usage_tracker.h"
+
+using quota::kQuotaStatusOk;
+using quota::kStorageTypeTemporary;
+using quota::MockSpecialStoragePolicy;
+using quota::QuotaClient;
+using quota::QuotaClientList;
+using quota::SpecialStoragePolicy;
+using quota::StorageType;
+using quota::UsageTracker;
+
+namespace content {
+
+namespace {
+
+void DidGetGlobalUsage(bool* done,
+                       int64* usage_out,
+                       int64* unlimited_usage_out,
+                       int64 usage,
+                       int64 unlimited_usage) {
+  EXPECT_FALSE(*done);
+  *done = true;
+  *usage_out = usage;
+  *unlimited_usage_out = unlimited_usage;
+}
+
+void DidGetUsage(bool* done,
+                 int64* usage_out,
+                 int64 usage) {
+  EXPECT_FALSE(*done);
+  *done = true;
+  *usage_out = usage;
+}
+
+}  // namespace
+
+class MockQuotaClient : public QuotaClient {
+ public:
+  MockQuotaClient() {}
+  virtual ~MockQuotaClient() {}
+
+  virtual ID id() const OVERRIDE {
+    return kFileSystem;
+  }
+
+  virtual void OnQuotaManagerDestroyed() OVERRIDE {}
+
+  virtual void GetOriginUsage(const GURL& origin,
+                              StorageType type,
+                              const GetUsageCallback& callback) OVERRIDE {
+    EXPECT_EQ(kStorageTypeTemporary, type);
+    int64 usage = GetUsage(origin);
+    base::MessageLoop::current()->PostTask(FROM_HERE,
+                                           base::Bind(callback, usage));
+  }
+
+  virtual void GetOriginsForType(StorageType type,
+                                 const GetOriginsCallback& callback) OVERRIDE {
+    EXPECT_EQ(kStorageTypeTemporary, type);
+    std::set<GURL> origins;
+    for (UsageMap::const_iterator itr = usage_map_.begin();
+         itr != usage_map_.end(); ++itr) {
+      origins.insert(itr->first);
+    }
+    base::MessageLoop::current()->PostTask(FROM_HERE,
+                                           base::Bind(callback, origins));
+  }
+
+  virtual void GetOriginsForHost(StorageType type,
+                                 const std::string& host,
+                                 const GetOriginsCallback& callback) OVERRIDE {
+    EXPECT_EQ(kStorageTypeTemporary, type);
+    std::set<GURL> origins;
+    for (UsageMap::const_iterator itr = usage_map_.begin();
+         itr != usage_map_.end(); ++itr) {
+      if (net::GetHostOrSpecFromURL(itr->first) == host)
+        origins.insert(itr->first);
+    }
+    base::MessageLoop::current()->PostTask(FROM_HERE,
+                                           base::Bind(callback, origins));
+  }
+
+  virtual void DeleteOriginData(const GURL& origin,
+                                StorageType type,
+                                const DeletionCallback& callback) OVERRIDE {
+    EXPECT_EQ(kStorageTypeTemporary, type);
+    usage_map_.erase(origin);
+    base::MessageLoop::current()->PostTask(
+        FROM_HERE, base::Bind(callback, kQuotaStatusOk));
+  }
+
+  virtual bool DoesSupport(quota::StorageType type) const OVERRIDE {
+    return type == quota::kStorageTypeTemporary;
+  }
+
+  int64 GetUsage(const GURL& origin) {
+    UsageMap::const_iterator found = usage_map_.find(origin);
+    if (found == usage_map_.end())
+      return 0;
+    return found->second;
+  }
+
+  void SetUsage(const GURL& origin, int64 usage) {
+    usage_map_[origin] = usage;
+  }
+
+  int64 UpdateUsage(const GURL& origin, int64 delta) {
+    return usage_map_[origin] += delta;
+  }
+
+ private:
+  typedef std::map<GURL, int64> UsageMap;
+
+  UsageMap usage_map_;
+
+  DISALLOW_COPY_AND_ASSIGN(MockQuotaClient);
+};
+
+class UsageTrackerTest : public testing::Test {
+ public:
+  UsageTrackerTest()
+      : storage_policy_(new MockSpecialStoragePolicy()),
+        usage_tracker_(GetUsageTrackerList(), kStorageTypeTemporary,
+                       storage_policy_.get(), NULL) {
+  }
+
+  virtual ~UsageTrackerTest() {}
+
+  UsageTracker* usage_tracker() {
+    return &usage_tracker_;
+  }
+
+  void UpdateUsage(const GURL& origin, int64 delta) {
+    quota_client_.UpdateUsage(origin, delta);
+    usage_tracker_.UpdateUsageCache(quota_client_.id(), origin, delta);
+    base::RunLoop().RunUntilIdle();
+  }
+
+  void UpdateUsageWithoutNotification(const GURL& origin, int64 delta) {
+    quota_client_.UpdateUsage(origin, delta);
+  }
+
+  void GetGlobalLimitedUsage(int64* limited_usage) {
+    bool done = false;
+    usage_tracker_.GetGlobalLimitedUsage(base::Bind(
+        &DidGetUsage, &done, limited_usage));
+    base::RunLoop().RunUntilIdle();
+
+    EXPECT_TRUE(done);
+  }
+
+  void GetGlobalUsage(int64* usage, int64* unlimited_usage) {
+    bool done = false;
+    usage_tracker_.GetGlobalUsage(base::Bind(
+        &DidGetGlobalUsage,
+        &done, usage, unlimited_usage));
+    base::RunLoop().RunUntilIdle();
+
+    EXPECT_TRUE(done);
+  }
+
+  void GetHostUsage(const std::string& host, int64* usage) {
+    bool done = false;
+    usage_tracker_.GetHostUsage(host, base::Bind(&DidGetUsage, &done, usage));
+    base::RunLoop().RunUntilIdle();
+
+    EXPECT_TRUE(done);
+  }
+
+  void GrantUnlimitedStoragePolicy(const GURL& origin) {
+    if (!storage_policy_->IsStorageUnlimited(origin)) {
+      storage_policy_->AddUnlimited(origin);
+      storage_policy_->NotifyGranted(
+          origin, SpecialStoragePolicy::STORAGE_UNLIMITED);
+    }
+  }
+
+  void RevokeUnlimitedStoragePolicy(const GURL& origin) {
+    if (storage_policy_->IsStorageUnlimited(origin)) {
+      storage_policy_->RemoveUnlimited(origin);
+      storage_policy_->NotifyRevoked(
+          origin, SpecialStoragePolicy::STORAGE_UNLIMITED);
+    }
+  }
+
+  void SetUsageCacheEnabled(const GURL& origin, bool enabled) {
+    usage_tracker_.SetUsageCacheEnabled(
+        quota_client_.id(), origin, enabled);
+  }
+
+ private:
+  QuotaClientList GetUsageTrackerList() {
+    QuotaClientList client_list;
+    client_list.push_back(&quota_client_);
+    return client_list;
+  }
+
+  base::MessageLoop message_loop_;
+
+  scoped_refptr<MockSpecialStoragePolicy> storage_policy_;
+  MockQuotaClient quota_client_;
+  UsageTracker usage_tracker_;
+
+  DISALLOW_COPY_AND_ASSIGN(UsageTrackerTest);
+};
+
+TEST_F(UsageTrackerTest, GrantAndRevokeUnlimitedStorage) {
+  int64 usage = 0;
+  int64 unlimited_usage = 0;
+  int64 host_usage = 0;
+  GetGlobalUsage(&usage, &unlimited_usage);
+  EXPECT_EQ(0, usage);
+  EXPECT_EQ(0, unlimited_usage);
+
+  const GURL origin("http://example.com");
+  const std::string host(net::GetHostOrSpecFromURL(origin));
+
+  UpdateUsage(origin, 100);
+  GetGlobalUsage(&usage, &unlimited_usage);
+  GetHostUsage(host, &host_usage);
+  EXPECT_EQ(100, usage);
+  EXPECT_EQ(0, unlimited_usage);
+  EXPECT_EQ(100, host_usage);
+
+  GrantUnlimitedStoragePolicy(origin);
+  GetGlobalUsage(&usage, &unlimited_usage);
+  GetHostUsage(host, &host_usage);
+  EXPECT_EQ(100, usage);
+  EXPECT_EQ(100, unlimited_usage);
+  EXPECT_EQ(100, host_usage);
+
+  RevokeUnlimitedStoragePolicy(origin);
+  GetGlobalUsage(&usage, &unlimited_usage);
+  GetHostUsage(host, &host_usage);
+  EXPECT_EQ(100, usage);
+  EXPECT_EQ(0, unlimited_usage);
+  EXPECT_EQ(100, host_usage);
+}
+
+TEST_F(UsageTrackerTest, CacheDisabledClientTest) {
+  int64 usage = 0;
+  int64 unlimited_usage = 0;
+  int64 host_usage = 0;
+
+  const GURL origin("http://example.com");
+  const std::string host(net::GetHostOrSpecFromURL(origin));
+
+  UpdateUsage(origin, 100);
+  GetGlobalUsage(&usage, &unlimited_usage);
+  GetHostUsage(host, &host_usage);
+  EXPECT_EQ(100, usage);
+  EXPECT_EQ(0, unlimited_usage);
+  EXPECT_EQ(100, host_usage);
+
+  UpdateUsageWithoutNotification(origin, 100);
+  GetGlobalUsage(&usage, &unlimited_usage);
+  GetHostUsage(host, &host_usage);
+  EXPECT_EQ(100, usage);
+  EXPECT_EQ(0, unlimited_usage);
+  EXPECT_EQ(100, host_usage);
+
+  GrantUnlimitedStoragePolicy(origin);
+  UpdateUsageWithoutNotification(origin, 100);
+  SetUsageCacheEnabled(origin, false);
+  UpdateUsageWithoutNotification(origin, 100);
+
+  GetGlobalUsage(&usage, &unlimited_usage);
+  GetHostUsage(host, &host_usage);
+  EXPECT_EQ(400, usage);
+  EXPECT_EQ(400, unlimited_usage);
+  EXPECT_EQ(400, host_usage);
+
+  RevokeUnlimitedStoragePolicy(origin);
+  GetGlobalUsage(&usage, &unlimited_usage);
+  GetHostUsage(host, &host_usage);
+  EXPECT_EQ(400, usage);
+  EXPECT_EQ(0, unlimited_usage);
+  EXPECT_EQ(400, host_usage);
+
+  SetUsageCacheEnabled(origin, true);
+  UpdateUsage(origin, 100);
+
+  GetGlobalUsage(&usage, &unlimited_usage);
+  GetHostUsage(host, &host_usage);
+  EXPECT_EQ(500, usage);
+  EXPECT_EQ(0, unlimited_usage);
+  EXPECT_EQ(500, host_usage);
+}
+
+TEST_F(UsageTrackerTest, LimitedGlobalUsageTest) {
+  const GURL kNormal("http://normal");
+  const GURL kUnlimited("http://unlimited");
+  const GURL kNonCached("http://non_cached");
+  const GURL kNonCachedUnlimited("http://non_cached-unlimited");
+
+  GrantUnlimitedStoragePolicy(kUnlimited);
+  GrantUnlimitedStoragePolicy(kNonCachedUnlimited);
+
+  SetUsageCacheEnabled(kNonCached, false);
+  SetUsageCacheEnabled(kNonCachedUnlimited, false);
+
+  UpdateUsageWithoutNotification(kNormal, 1);
+  UpdateUsageWithoutNotification(kUnlimited, 2);
+  UpdateUsageWithoutNotification(kNonCached, 4);
+  UpdateUsageWithoutNotification(kNonCachedUnlimited, 8);
+
+  int64 limited_usage = 0;
+  int64 total_usage = 0;
+  int64 unlimited_usage = 0;
+
+  GetGlobalLimitedUsage(&limited_usage);
+  GetGlobalUsage(&total_usage, &unlimited_usage);
+  EXPECT_EQ(1 + 4, limited_usage);
+  EXPECT_EQ(1 + 2 + 4 + 8, total_usage);
+  EXPECT_EQ(2 + 8, unlimited_usage);
+
+  UpdateUsageWithoutNotification(kNonCached, 16 - 4);
+  UpdateUsageWithoutNotification(kNonCachedUnlimited, 32 - 8);
+
+  GetGlobalLimitedUsage(&limited_usage);
+  GetGlobalUsage(&total_usage, &unlimited_usage);
+  EXPECT_EQ(1 + 16, limited_usage);
+  EXPECT_EQ(1 + 2 + 16 + 32, total_usage);
+  EXPECT_EQ(2 + 32, unlimited_usage);
+}
+
+
+}  // namespace content
diff --git a/content/browser/renderer_host/backing_store.cc b/content/browser/renderer_host/backing_store.cc
deleted file mode 100644
index 8557437..0000000
--- a/content/browser/renderer_host/backing_store.cc
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright (c) 2012 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 "content/browser/renderer_host/backing_store.h"
-
-namespace content {
-
-BackingStore::BackingStore(RenderWidgetHost* widget, const gfx::Size& size)
-    : render_widget_host_(widget),
-      size_(size) {
-}
-
-BackingStore::~BackingStore() {
-}
-
-size_t BackingStore::MemorySize() {
-  return size_.GetArea() * 4;
-}
-
-}  // namespace content
diff --git a/content/browser/renderer_host/backing_store.h b/content/browser/renderer_host/backing_store.h
deleted file mode 100644
index ba36920..0000000
--- a/content/browser/renderer_host/backing_store.h
+++ /dev/null
@@ -1,93 +0,0 @@
-// Copyright (c) 2012 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 CONTENT_BROWSER_RENDERER_HOST_BACKING_STORE_H_
-#define CONTENT_BROWSER_RENDERER_HOST_BACKING_STORE_H_
-
-#include <vector>
-
-#include "base/basictypes.h"
-#include "base/callback_forward.h"
-#include "content/common/content_export.h"
-#include "ui/gfx/size.h"
-#include "ui/gfx/vector2d.h"
-#include "ui/surface/transport_dib.h"
-
-class RenderProcessHost;
-
-namespace gfx {
-class Rect;
-}
-
-namespace skia {
-class PlatformBitmap;
-}
-
-namespace content {
-class RenderProcessHost;
-class RenderWidgetHost;
-
-// Represents a backing store for the pixels in a RenderWidgetHost.
-class CONTENT_EXPORT BackingStore {
- public:
-  virtual ~BackingStore();
-
-  RenderWidgetHost* render_widget_host() const {
-    return render_widget_host_;
-  }
-  const gfx::Size& size() { return size_; }
-
-  // The number of bytes that this backing store consumes. The default
-  // implementation just assumes there's 32 bits per pixel over the current
-  // size of the screen. Implementations may override this if they have more
-  // information about the color depth.
-  virtual size_t MemorySize();
-
-  // Paints the bitmap from the renderer onto the backing store. bitmap_rect
-  // gives the location of bitmap, and copy_rects specifies the subregion(s) of
-  // the backingstore to be painted from the bitmap. All coordinates are in
-  // DIPs. |scale_factor| contains the expected device scale factor of the
-  // backing store.
-  //
-  // PaintToBackingStore does not need to guarantee that this has happened by
-  // the time it returns, in which case it will set |scheduled_callback| to
-  // true and will call |callback| when completed.
-  virtual void PaintToBackingStore(
-      RenderProcessHost* process,
-      TransportDIB::Id bitmap,
-      const gfx::Rect& bitmap_rect,
-      const std::vector<gfx::Rect>& copy_rects,
-      float scale_factor,
-      const base::Closure& completion_callback,
-      bool* scheduled_completion_callback) = 0;
-
-  // Extracts the gives subset of the backing store and copies it to the given
-  // PlatformCanvas. The PlatformCanvas should not be initialized. This function
-  // will call initialize() with the correct size. The return value indicates
-  // success.
-  virtual bool CopyFromBackingStore(const gfx::Rect& rect,
-                                    skia::PlatformBitmap* output) = 0;
-
-  // Scrolls the contents of clip_rect in the backing store by |delta| (but
-  // |delta|.x() and |delta|.y() cannot both be non-zero).
-  virtual void ScrollBackingStore(const gfx::Vector2d& delta,
-                                  const gfx::Rect& clip_rect,
-                                  const gfx::Size& view_size) = 0;
- protected:
-  // Can only be constructed via subclasses.
-  BackingStore(RenderWidgetHost* widget, const gfx::Size& size);
-
- private:
-  // The owner of this backing store.
-  RenderWidgetHost* render_widget_host_;
-
-  // The size of the backing store.
-  gfx::Size size_;
-
-  DISALLOW_COPY_AND_ASSIGN(BackingStore);
-};
-
-}  // namespace content
-
-#endif  // CONTENT_BROWSER_RENDERER_HOST_BACKING_STORE_H_
diff --git a/content/browser/renderer_host/backing_store_aura.cc b/content/browser/renderer_host/backing_store_aura.cc
deleted file mode 100644
index 105bf44..0000000
--- a/content/browser/renderer_host/backing_store_aura.cc
+++ /dev/null
@@ -1,176 +0,0 @@
-// Copyright (c) 2012 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 "content/browser/renderer_host/backing_store_aura.h"
-
-#include "content/browser/renderer_host/dip_util.h"
-#include "content/browser/renderer_host/render_process_host_impl.h"
-#include "content/public/browser/render_widget_host.h"
-#include "skia/ext/platform_canvas.h"
-#include "third_party/skia/include/core/SkCanvas.h"
-#include "ui/gfx/canvas.h"
-#include "ui/gfx/image/image_skia.h"
-#include "ui/gfx/rect.h"
-#include "ui/gfx/rect_conversions.h"
-#include "ui/gfx/size_conversions.h"
-#include "ui/gfx/vector2d_conversions.h"
-
-namespace {
-
-gfx::Size ToPixelSize(gfx::Size dipSize, float scale) {
-  return gfx::ToCeiledSize(gfx::ScaleSize(dipSize, scale));
-}
-
-}  // namespace
-
-
-namespace content {
-
-// Assume that somewhere along the line, someone will do width * height * 4
-// with signed numbers. If the maximum value is 2**31, then 2**31 / 4 =
-// 2**29 and floor(sqrt(2**29)) = 23170.
-
-// Max height and width for layers
-static const int kMaxVideoLayerSize = 23170;
-
-BackingStoreAura::BackingStoreAura(RenderWidgetHost* widget,
-                                   const gfx::Size& size)
-    : BackingStore(widget, size) {
-  device_scale_factor_ =
-      ui::GetImageScale(GetScaleFactorForView(widget->GetView()));
-  gfx::Size pixel_size = ToPixelSize(size, device_scale_factor_);
-  bitmap_.setConfig(SkBitmap::kARGB_8888_Config,
-      pixel_size.width(), pixel_size.height());
-  bitmap_.allocPixels();
-  canvas_.reset(new SkCanvas(bitmap_));
-}
-
-BackingStoreAura::~BackingStoreAura() {
-}
-
-void BackingStoreAura::SkiaShowRect(const gfx::Point& point,
-                                    gfx::Canvas* canvas) {
-  gfx::ImageSkia image = gfx::ImageSkia(gfx::ImageSkiaRep(bitmap_,
-      device_scale_factor_));
-  canvas->DrawImageInt(image, point.x(), point.y());
-}
-
-void BackingStoreAura::ScaleFactorChanged(float device_scale_factor) {
-  if (device_scale_factor == device_scale_factor_)
-    return;
-
-  gfx::Size old_pixel_size = ToPixelSize(size(), device_scale_factor_);
-  device_scale_factor_ = device_scale_factor;
-
-  gfx::Size pixel_size = ToPixelSize(size(), device_scale_factor_);
-  SkBitmap new_bitmap;
-  new_bitmap.setConfig(SkBitmap::kARGB_8888_Config,
-      pixel_size.width(), pixel_size.height());
-  new_bitmap.allocPixels();
-  scoped_ptr<SkCanvas> new_canvas(new SkCanvas(new_bitmap));
-
-  // Copy old contents; a low-res flash is better than a black flash.
-  SkPaint copy_paint;
-  copy_paint.setXfermodeMode(SkXfermode::kSrc_Mode);
-  SkIRect src_rect = SkIRect::MakeWH(old_pixel_size.width(),
-                                     old_pixel_size.height());
-  SkRect dst_rect = SkRect::MakeWH(pixel_size.width(), pixel_size.height());
-  new_canvas.get()->drawBitmapRect(bitmap_, &src_rect, dst_rect, &copy_paint);
-
-  canvas_.swap(new_canvas);
-  bitmap_ = new_bitmap;
-}
-
-size_t BackingStoreAura::MemorySize() {
-  // NOTE: The computation may be different when the canvas is a subrectangle of
-  // a larger bitmap.
-  return ToPixelSize(size(), device_scale_factor_).GetArea() * 4;
-}
-
-void BackingStoreAura::PaintToBackingStore(
-    RenderProcessHost* process,
-    TransportDIB::Id bitmap,
-    const gfx::Rect& bitmap_rect,
-    const std::vector<gfx::Rect>& copy_rects,
-    float scale_factor,
-    const base::Closure& completion_callback,
-    bool* scheduled_completion_callback) {
-  *scheduled_completion_callback = false;
-  if (bitmap_rect.IsEmpty())
-    return;
-
-  gfx::Rect pixel_bitmap_rect = gfx::ToEnclosingRect(
-      gfx::ScaleRect(bitmap_rect, scale_factor));
-
-  const int width = pixel_bitmap_rect.width();
-  const int height = pixel_bitmap_rect.height();
-
-  if (width <= 0 || width > kMaxVideoLayerSize ||
-      height <= 0 || height > kMaxVideoLayerSize)
-    return;
-
-  TransportDIB* dib = process->GetTransportDIB(bitmap);
-  if (!dib)
-    return;
-
-  SkPaint copy_paint;
-  copy_paint.setXfermodeMode(SkXfermode::kSrc_Mode);
-
-  SkBitmap sk_bitmap;
-  sk_bitmap.setConfig(SkBitmap::kARGB_8888_Config, width, height);
-  sk_bitmap.setPixels(dib->memory());
-  for (size_t i = 0; i < copy_rects.size(); i++) {
-    const gfx::Rect pixel_copy_rect = gfx::ToEnclosingRect(
-        gfx::ScaleRect(copy_rects[i], scale_factor));
-    int x = pixel_copy_rect.x() - pixel_bitmap_rect.x();
-    int y = pixel_copy_rect.y() - pixel_bitmap_rect.y();
-    SkIRect srcrect = SkIRect::MakeXYWH(x, y,
-        pixel_copy_rect.width(),
-        pixel_copy_rect.height());
-
-    const gfx::Rect pixel_copy_dst_rect = gfx::ToEnclosingRect(
-        gfx::ScaleRect(copy_rects[i], device_scale_factor_));
-    SkRect dstrect = SkRect::MakeXYWH(
-        SkIntToScalar(pixel_copy_dst_rect.x()),
-        SkIntToScalar(pixel_copy_dst_rect.y()),
-        SkIntToScalar(pixel_copy_dst_rect.width()),
-        SkIntToScalar(pixel_copy_dst_rect.height()));
-    canvas_.get()->drawBitmapRect(sk_bitmap, &srcrect, dstrect, &copy_paint);
-  }
-}
-
-void BackingStoreAura::ScrollBackingStore(const gfx::Vector2d& delta,
-                                          const gfx::Rect& clip_rect,
-                                          const gfx::Size& view_size) {
-  gfx::Rect pixel_rect = gfx::ToEnclosingRect(
-      gfx::ScaleRect(clip_rect, device_scale_factor_));
-  gfx::Vector2d pixel_delta = gfx::ToFlooredVector2d(
-      gfx::ScaleVector2d(delta, device_scale_factor_));
-
-  int x = std::min(pixel_rect.x(), pixel_rect.x() - pixel_delta.x());
-  int y = std::min(pixel_rect.y(), pixel_rect.y() - pixel_delta.y());
-  int w = pixel_rect.width() + abs(pixel_delta.x());
-  int h = pixel_rect.height() + abs(pixel_delta.y());
-  SkIRect rect = SkIRect::MakeXYWH(x, y, w, h);
-  bitmap_.scrollRect(&rect, pixel_delta.x(), pixel_delta.y());
-}
-
-bool BackingStoreAura::CopyFromBackingStore(const gfx::Rect& rect,
-                                            skia::PlatformBitmap* output) {
-  const int width =
-      std::min(size().width(), rect.width()) * device_scale_factor_;
-  const int height =
-      std::min(size().height(), rect.height()) * device_scale_factor_;
-  if (!output->Allocate(width, height, true))
-    return false;
-
-  SkIRect skrect = SkIRect::MakeXYWH(rect.x(), rect.y(), width, height);
-  SkBitmap b;
-  if (!canvas_->readPixels(skrect, &b))
-    return false;
-  SkCanvas(output->GetBitmap()).writePixels(b, rect.x(), rect.y());
-  return true;
-}
-
-}  // namespace content
diff --git a/content/browser/renderer_host/backing_store_aura.h b/content/browser/renderer_host/backing_store_aura.h
deleted file mode 100644
index 0b8e072..0000000
--- a/content/browser/renderer_host/backing_store_aura.h
+++ /dev/null
@@ -1,66 +0,0 @@
-// Copyright (c) 2012 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 CONTENT_BROWSER_RENDERER_HOST_BACKING_STORE_AURA_H_
-#define CONTENT_BROWSER_RENDERER_HOST_BACKING_STORE_AURA_H_
-
-#include "base/memory/scoped_ptr.h"
-#include "content/browser/renderer_host/backing_store.h"
-#include "content/common/content_export.h"
-#include "third_party/skia/include/core/SkBitmap.h"
-
-class SkCanvas;
-
-namespace gfx {
-class Point;
-class Canvas;
-}
-
-namespace content {
-class RenderProcessHost;
-
-// A backing store that uses skia. This is the backing store used by
-// RenderWidgetHostViewAura.
-class BackingStoreAura : public BackingStore {
- public:
-  CONTENT_EXPORT BackingStoreAura(
-      RenderWidgetHost* widget,
-      const gfx::Size& size);
-
-  virtual ~BackingStoreAura();
-
-  CONTENT_EXPORT void SkiaShowRect(const gfx::Point& point,
-                                   gfx::Canvas* canvas);
-
-  // Called when the view's backing scale factor changes.
-  void ScaleFactorChanged(float device_scale_factor);
-
-  // BackingStore implementation.
-  virtual size_t MemorySize() OVERRIDE;
-  virtual void PaintToBackingStore(
-      RenderProcessHost* process,
-      TransportDIB::Id bitmap,
-      const gfx::Rect& bitmap_rect,
-      const std::vector<gfx::Rect>& copy_rects,
-      float scale_factor,
-      const base::Closure& completion_callback,
-      bool* scheduled_completion_callback) OVERRIDE;
-  virtual bool CopyFromBackingStore(const gfx::Rect& rect,
-                                    skia::PlatformBitmap* output) OVERRIDE;
-  virtual void ScrollBackingStore(const gfx::Vector2d& delta,
-                                  const gfx::Rect& clip_rect,
-                                  const gfx::Size& view_size) OVERRIDE;
-
- private:
-  SkBitmap bitmap_;
-
-  scoped_ptr<SkCanvas> canvas_;
-  float device_scale_factor_;
-
-  DISALLOW_COPY_AND_ASSIGN(BackingStoreAura);
-};
-
-}  // namespace content
-
-#endif  // CONTENT_BROWSER_RENDERER_HOST_BACKING_STORE_AURA_H_
diff --git a/content/browser/renderer_host/backing_store_mac.h b/content/browser/renderer_host/backing_store_mac.h
deleted file mode 100644
index 698ca3d..0000000
--- a/content/browser/renderer_host/backing_store_mac.h
+++ /dev/null
@@ -1,76 +0,0 @@
-// Copyright (c) 2012 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 CONTENT_BROWSER_RENDERER_HOST_BACKING_STORE_MAC_H_
-#define CONTENT_BROWSER_RENDERER_HOST_BACKING_STORE_MAC_H_
-
-#include "base/basictypes.h"
-#include "base/mac/scoped_cftyperef.h"
-#include "content/browser/renderer_host/backing_store.h"
-
-namespace content {
-
-class BackingStoreMac : public BackingStore {
- public:
-  // |size| is in view units, |device_scale_factor| is the backingScaleFactor.
-  // The pixel size of the backing store is size.Scale(device_scale_factor).
-  BackingStoreMac(RenderWidgetHost* widget,
-                  const gfx::Size& size,
-                  float device_scale_factor);
-  virtual ~BackingStoreMac();
-
-  // A CGLayer that stores the contents of the backing store, cached in GPU
-  // memory if possible.
-  CGLayerRef cg_layer() { return cg_layer_; }
-
-  // A CGBitmapContext that stores the contents of the backing store if the
-  // corresponding Cocoa view has not been inserted into an NSWindow yet.
-  CGContextRef cg_bitmap() { return cg_bitmap_; }
-
-  // Called when the view's backing scale factor changes.
-  void ScaleFactorChanged(float device_scale_factor);
-
-  // BackingStore implementation.
-  virtual size_t MemorySize() OVERRIDE;
-  virtual void PaintToBackingStore(
-      RenderProcessHost* process,
-      TransportDIB::Id bitmap,
-      const gfx::Rect& bitmap_rect,
-      const std::vector<gfx::Rect>& copy_rects,
-      float scale_factor,
-      const base::Closure& completion_callback,
-      bool* scheduled_completion_callback) OVERRIDE;
-  virtual bool CopyFromBackingStore(const gfx::Rect& rect,
-                                    skia::PlatformBitmap* output) OVERRIDE;
-  virtual void ScrollBackingStore(const gfx::Vector2d& delta,
-                                  const gfx::Rect& clip_rect,
-                                  const gfx::Size& view_size) OVERRIDE;
-
-  void CopyFromBackingStoreToCGContext(const CGRect& dest_rect,
-                                       CGContextRef context);
-
- private:
-  // Creates a CGLayer associated with its owner view's window's graphics
-  // context, sized properly for the backing store.  Returns NULL if the owner
-  // is not in a window with a CGContext.  cg_layer_ is assigned this method's
-  // result.
-  CGLayerRef CreateCGLayer();
-
-  // Creates a CGBitmapContext sized properly for the backing store.  The
-  // owner view need not be in a window.  cg_bitmap_ is assigned this method's
-  // result.
-  CGContextRef CreateCGBitmapContext();
-
-  base::ScopedCFTypeRef<CGContextRef> cg_bitmap_;
-  base::ScopedCFTypeRef<CGLayerRef> cg_layer_;
-
-  // Number of physical pixels per view unit. This is 1 or 2 in practice.
-  float device_scale_factor_;
-
-  DISALLOW_COPY_AND_ASSIGN(BackingStoreMac);
-};
-
-}  // namespace content
-
-#endif  // CONTENT_BROWSER_RENDERER_HOST_BACKING_STORE_MAC_H_
diff --git a/content/browser/renderer_host/backing_store_mac.mm b/content/browser/renderer_host/backing_store_mac.mm
deleted file mode 100644
index 8b3fda9..0000000
--- a/content/browser/renderer_host/backing_store_mac.mm
+++ /dev/null
@@ -1,297 +0,0 @@
-// Copyright (c) 2012 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 <Cocoa/Cocoa.h>
-
-#include "content/browser/renderer_host/backing_store_mac.h"
-
-#include <cmath>
-
-#include "base/logging.h"
-#include "base/mac/mac_util.h"
-#include "base/mac/scoped_cftyperef.h"
-#include "content/browser/renderer_host/render_process_host_impl.h"
-#include "content/browser/renderer_host/render_widget_host_impl.h"
-#include "content/public/browser/render_widget_host_view.h"
-#include "skia/ext/platform_canvas.h"
-#include "third_party/skia/include/core/SkBitmap.h"
-#include "third_party/skia/include/core/SkCanvas.h"
-#include "ui/gfx/rect.h"
-#include "ui/gfx/rect_conversions.h"
-#include "ui/gfx/size_conversions.h"
-#include "ui/gfx/scoped_cg_context_save_gstate_mac.h"
-#include "ui/surface/transport_dib.h"
-
-namespace content {
-
-// Mac Backing Stores:
-//
-// Since backing stores are only ever written to or drawn into windows, we keep
-// our backing store in a CGLayer that can get cached in GPU memory.  This
-// allows acclerated drawing into the layer and lets scrolling and such happen
-// all or mostly on the GPU, which is good for performance.
-
-BackingStoreMac::BackingStoreMac(RenderWidgetHost* widget,
-                                 const gfx::Size& size,
-                                 float device_scale_factor)
-    : BackingStore(widget, size), device_scale_factor_(device_scale_factor) {
-  cg_layer_.reset(CreateCGLayer());
-  if (!cg_layer_) {
-    // The view isn't in a window yet.  Use a CGBitmapContext for now.
-    cg_bitmap_.reset(CreateCGBitmapContext());
-    CGContextScaleCTM(cg_bitmap_, device_scale_factor_, device_scale_factor_);
-  }
-}
-
-BackingStoreMac::~BackingStoreMac() {
-}
-
-void BackingStoreMac::ScaleFactorChanged(float device_scale_factor) {
-  if (device_scale_factor == device_scale_factor_)
-    return;
-
-  device_scale_factor_ = device_scale_factor;
-
-  base::ScopedCFTypeRef<CGLayerRef> new_layer(CreateCGLayer());
-  // If we have a layer, copy the old contents. A pixelated flash is better
-  // than a white flash.
-  if (new_layer && cg_layer_) {
-    CGContextRef layer = CGLayerGetContext(new_layer);
-    CGContextDrawLayerAtPoint(layer, CGPointMake(0, 0), cg_layer_);
-  }
-
-  cg_layer_.swap(new_layer);
-  if (!cg_layer_) {
-    // The view isn't in a window yet.  Use a CGBitmapContext for now.
-    cg_bitmap_.reset(CreateCGBitmapContext());
-    CGContextScaleCTM(cg_bitmap_, device_scale_factor_, device_scale_factor_);
-  }
-}
-
-size_t BackingStoreMac::MemorySize() {
-  return gfx::ToFlooredSize(
-      gfx::ScaleSize(size(), device_scale_factor_)).GetArea() * 4;
-}
-
-void BackingStoreMac::PaintToBackingStore(
-    RenderProcessHost* process,
-    TransportDIB::Id bitmap,
-    const gfx::Rect& bitmap_rect,
-    const std::vector<gfx::Rect>& copy_rects,
-    float scale_factor,
-    const base::Closure& completion_callback,
-    bool* scheduled_completion_callback) {
-  *scheduled_completion_callback = false;
-  DCHECK_NE(static_cast<bool>(cg_layer()), static_cast<bool>(cg_bitmap()));
-
-  TransportDIB* dib = process->GetTransportDIB(bitmap);
-  if (!dib)
-    return;
-
-  gfx::Size pixel_size = gfx::ToFlooredSize(
-      gfx::ScaleSize(size(), device_scale_factor_));
-  gfx::Rect pixel_bitmap_rect = ToFlooredRectDeprecated(
-      gfx::ScaleRect(bitmap_rect, scale_factor));
-
-  size_t bitmap_byte_count =
-      pixel_bitmap_rect.width() * pixel_bitmap_rect.height() * 4;
-  DCHECK_GE(dib->size(), bitmap_byte_count);
-
-  base::ScopedCFTypeRef<CGDataProviderRef> data_provider(
-      CGDataProviderCreateWithData(
-          NULL, dib->memory(), bitmap_byte_count, NULL));
-
-  base::ScopedCFTypeRef<CGImageRef> bitmap_image(
-      CGImageCreate(pixel_bitmap_rect.width(),
-                    pixel_bitmap_rect.height(),
-                    8,
-                    32,
-                    4 * pixel_bitmap_rect.width(),
-                    base::mac::GetSystemColorSpace(),
-                    kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Host,
-                    data_provider,
-                    NULL,
-                    false,
-                    kCGRenderingIntentDefault));
-
-  for (size_t i = 0; i < copy_rects.size(); i++) {
-    const gfx::Rect& copy_rect = copy_rects[i];
-    gfx::Rect pixel_copy_rect = ToFlooredRectDeprecated(
-        gfx::ScaleRect(copy_rect, scale_factor));
-
-    // Only the subpixels given by copy_rect have pixels to copy.
-    base::ScopedCFTypeRef<CGImageRef> image(CGImageCreateWithImageInRect(
-        bitmap_image,
-        CGRectMake(pixel_copy_rect.x() - pixel_bitmap_rect.x(),
-                   pixel_copy_rect.y() - pixel_bitmap_rect.y(),
-                   pixel_copy_rect.width(),
-                   pixel_copy_rect.height())));
-
-    if (!cg_layer()) {
-      // The view may have moved to a window.  Try to get a CGLayer.
-      cg_layer_.reset(CreateCGLayer());
-      if (cg_layer()) {
-        // Now that we have a layer, copy the cached image into it.
-        base::ScopedCFTypeRef<CGImageRef> bitmap_image(
-            CGBitmapContextCreateImage(cg_bitmap_));
-        CGContextDrawImage(CGLayerGetContext(cg_layer()),
-                           CGRectMake(0, 0, size().width(), size().height()),
-                           bitmap_image);
-        // Discard the cache bitmap, since we no longer need it.
-        cg_bitmap_.reset(NULL);
-      }
-    }
-
-    DCHECK_NE(static_cast<bool>(cg_layer()), static_cast<bool>(cg_bitmap()));
-
-    if (cg_layer()) {
-      // The CGLayer's origin is in the lower left, but flipping the CTM would
-      // cause the image to get drawn upside down.  So we move the rectangle
-      // to the right position before drawing the image.
-      CGContextRef layer = CGLayerGetContext(cg_layer());
-      gfx::Rect paint_rect = copy_rect;
-      paint_rect.set_y(size().height() - copy_rect.bottom());
-      CGContextDrawImage(layer, paint_rect.ToCGRect(), image);
-    } else {
-      // The layer hasn't been created yet, so draw into the cache bitmap.
-      gfx::Rect paint_rect = copy_rect;
-      paint_rect.set_y(size().height() - copy_rect.bottom());
-      CGContextDrawImage(cg_bitmap_, paint_rect.ToCGRect(), image);
-    }
-  }
-}
-
-bool BackingStoreMac::CopyFromBackingStore(const gfx::Rect& rect,
-                                           skia::PlatformBitmap* output) {
-  // TODO(thakis): Make sure this works with HiDPI backing stores.
-  if (!output->Allocate(rect.width(), rect.height(), true))
-    return false;
-
-  CGContextRef temp_context = output->GetSurface();
-  gfx::ScopedCGContextSaveGState save_gstate(temp_context);
-  CGContextTranslateCTM(temp_context, 0.0, size().height());
-  CGContextScaleCTM(temp_context, 1.0, -1.0);
-  if (cg_layer()) {
-    CGContextDrawLayerAtPoint(temp_context, CGPointMake(-rect.x(), -rect.y()),
-                              cg_layer());
-  } else {
-    base::ScopedCFTypeRef<CGImageRef> bitmap_image(
-        CGBitmapContextCreateImage(cg_bitmap_));
-    CGContextDrawImage(
-        temp_context,
-        CGRectMake(-rect.x(), -rect.y(), rect.width(), rect.height()),
-        bitmap_image);
-  }
-
-  return true;
-}
-
-// Scroll the contents of our CGLayer
-void BackingStoreMac::ScrollBackingStore(const gfx::Vector2d& delta,
-                                         const gfx::Rect& clip_rect,
-                                         const gfx::Size& view_size) {
-  DCHECK_NE(static_cast<bool>(cg_layer()), static_cast<bool>(cg_bitmap()));
-
-  // "Scroll" the contents of the layer by creating a new CGLayer,
-  // copying the contents of the old one into the new one offset by the scroll
-  // amount, swapping in the new CGLayer, and then painting in the new data.
-  //
-  // The Windows code always sets the whole backing store as the source of the
-  // scroll. Thus, we only have to worry about pixels which will end up inside
-  // the clipping rectangle. (Note that the clipping rectangle is not
-  // translated by the scroll.)
-
-  // We assume |clip_rect| is contained within the backing store.
-  DCHECK(clip_rect.bottom() <= size().height());
-  DCHECK(clip_rect.right() <= size().width());
-
-  if ((delta.x() || delta.y()) &&
-       abs(delta.x()) < size().width() && abs(delta.y()) < size().height()) {
-    if (cg_layer()) {
-      CGContextRef layer = CGLayerGetContext(cg_layer());
-      gfx::ScopedCGContextSaveGState save_gstate(layer);
-      CGContextClipToRect(layer,
-                          CGRectMake(clip_rect.x(),
-                                     size().height() - clip_rect.bottom(),
-                                     clip_rect.width(),
-                                     clip_rect.height()));
-      CGContextDrawLayerAtPoint(layer,
-                                CGPointMake(delta.x(), -delta.y()), cg_layer());
-    } else {
-      // We don't have a layer, so scroll the contents of the CGBitmapContext.
-      base::ScopedCFTypeRef<CGImageRef> bitmap_image(
-          CGBitmapContextCreateImage(cg_bitmap_));
-      gfx::ScopedCGContextSaveGState save_gstate(cg_bitmap_);
-      CGContextClipToRect(cg_bitmap_,
-                          CGRectMake(clip_rect.x(),
-                                     size().height() - clip_rect.bottom(),
-                                     clip_rect.width(),
-                                     clip_rect.height()));
-      CGContextDrawImage(cg_bitmap_,
-                         CGRectMake(delta.x(), -delta.y(),
-                                    size().width(), size().height()),
-                         bitmap_image);
-    }
-  }
-}
-
-void BackingStoreMac::CopyFromBackingStoreToCGContext(const CGRect& dest_rect,
-                                                      CGContextRef context) {
-  gfx::ScopedCGContextSaveGState save_gstate(context);
-  CGContextSetInterpolationQuality(context, kCGInterpolationHigh);
-  if (cg_layer_) {
-    CGContextDrawLayerInRect(context, dest_rect, cg_layer_);
-  } else {
-    base::ScopedCFTypeRef<CGImageRef> image(
-        CGBitmapContextCreateImage(cg_bitmap_));
-    CGContextDrawImage(context, dest_rect, image);
-  }
-}
-
-CGLayerRef BackingStoreMac::CreateCGLayer() {
-  // The CGLayer should be optimized for drawing into the containing window,
-  // so extract a CGContext corresponding to the window to be passed to
-  // CGLayerCreateWithContext.
-  NSWindow* window = [render_widget_host()->GetView()->GetNativeView() window];
-  if ([window windowNumber] <= 0) {
-    // This catches a nil |window|, as well as windows that exist but that
-    // aren't yet connected to WindowServer.
-    return NULL;
-  }
-
-  NSGraphicsContext* ns_context = [window graphicsContext];
-  DCHECK(ns_context);
-
-  CGContextRef cg_context = static_cast<CGContextRef>(
-      [ns_context graphicsPort]);
-  DCHECK(cg_context);
-
-  // Note: This takes the backingScaleFactor of cg_context into account. The
-  // bitmap backing |layer| will be size() * 2 in HiDPI mode automatically.
-  CGLayerRef layer = CGLayerCreateWithContext(cg_context,
-                                              size().ToCGSize(),
-                                              NULL);
-  DCHECK(layer);
-
-  return layer;
-}
-
-CGContextRef BackingStoreMac::CreateCGBitmapContext() {
-  gfx::Size pixel_size = gfx::ToFlooredSize(
-      gfx::ScaleSize(size(), device_scale_factor_));
-  // A CGBitmapContext serves as a stand-in for the layer before the view is
-  // in a containing window.
-  CGContextRef context = CGBitmapContextCreate(NULL,
-                                               pixel_size.width(),
-                                               pixel_size.height(),
-                                               8, pixel_size.width() * 4,
-                                               base::mac::GetSystemColorSpace(),
-                                               kCGImageAlphaPremultipliedFirst |
-                                                   kCGBitmapByteOrder32Host);
-  DCHECK(context);
-
-  return context;
-}
-
-}  // namespace content
diff --git a/content/browser/renderer_host/backing_store_manager.cc b/content/browser/renderer_host/backing_store_manager.cc
deleted file mode 100644
index 78f2cc2..0000000
--- a/content/browser/renderer_host/backing_store_manager.cc
+++ /dev/null
@@ -1,274 +0,0 @@
-// Copyright (c) 2012 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 "content/browser/renderer_host/backing_store_manager.h"
-
-#include "base/bind.h"
-#include "base/command_line.h"
-#include "base/containers/mru_cache.h"
-#include "base/sys_info.h"
-#include "content/browser/renderer_host/backing_store.h"
-#include "content/browser/renderer_host/render_widget_host_impl.h"
-#include "content/public/common/content_switches.h"
-
-namespace content {
-namespace {
-
-// There are two separate caches, |large_cache| and |small_cache|.  large_cache
-// is meant for large items (tabs, popup windows), while small_cache is meant
-// for small items (extension popups, HTML5 notifications). The idea is that
-// we'll almost always try to evict from large_cache first since small_cache
-// items will tend to be visible more of the time.
-typedef base::OwningMRUCache<RenderWidgetHost*, BackingStore*>
-    BackingStoreCache;
-BackingStoreCache* large_cache = NULL;
-BackingStoreCache* small_cache = NULL;
-
-// Threshold is based on a single large-monitor-width toolstrip.
-// (32bpp, 32 pixels high, 1920 pixels wide)
-// TODO(aa): The extension system no longer supports toolstrips, but we think
-// this might be helping for other examples of small HTML views in Chrome.
-// Maybe this cache should be redesigned to simply prefer smaller objects to
-// larger ones, rather than having a fixed threshold.
-// For more background, see: crbug.com/100506.
-const size_t kSmallThreshold = 4 * 32 * 1920;
-
-// Pick a large monitor size to use as a multiplier.  This is multiplied by the
-// max number of large backing stores (usually tabs) to pick a ceiling on the
-// max memory to use.
-// TODO(erikkay) Perhaps we should actually use monitor size?  That way we
-// could make an assertion like "worse case, there are two tabs in the cache".
-// However, the small_cache might mess up these calculations a bit.
-// TODO(erikkay) 32bpp assumption isn't great.
-const size_t kMemoryMultiplier = 4 * 1920 * 1200;  // ~9MB
-
-// The maximum number of large BackingStoreCache objects (tabs) to use.
-// Use a minimum of 2, and add one for each 256MB of physical memory you have.
-// Cap at 5, the thinking being that even if you have a gigantic amount of
-// RAM, there's a limit to how much caching helps beyond a certain number
-// of tabs. If users *really* want unlimited stores, allow it via the
-// --disable-backing-store-limit flag.
-static size_t MaxNumberOfBackingStores() {
-  static bool unlimited = false;
-  const CommandLine& command = *CommandLine::ForCurrentProcess();
-  unlimited = command.HasSwitch(switches::kDisableBackingStoreLimit);
-
-
-  if (unlimited) {
-    // 100 isn't truly unlimited, but given that backing stores count against
-    // GDI memory, it's well past any reasonable number. Many systems will
-    // begin to fail in strange ways well before they hit 100 stores.
-    return 100;
-  } else {
-    return std::min(5, 2 + (base::SysInfo::AmountOfPhysicalMemoryMB() / 256));
-  }
-}
-
-// The maximum about of memory to use for all BackingStoreCache object combined.
-static size_t MaxBackingStoreMemory() {
-  // Compute in terms of the number of large monitor's worth of backing-store.
-  return MaxNumberOfBackingStores() * kMemoryMultiplier;
-}
-
-// Expires the given |backing_store| from |cache|.
-void ExpireBackingStoreAt(BackingStoreCache* cache,
-                          BackingStoreCache::iterator backing_store) {
-  cache->Erase(backing_store);
-}
-
-size_t ExpireLastBackingStore(BackingStoreCache* cache) {
-  if (cache->size() < 1)
-    return 0;
-
-  // Crazy C++ alert: rbegin.base() is a forward iterator pointing to end(),
-  // so we need to do -- to move one back to the actual last item.
-  BackingStoreCache::iterator entry = --cache->rbegin().base();
-  size_t entry_size = entry->second->MemorySize();
-  ExpireBackingStoreAt(cache, entry);
-  return entry_size;
-}
-
-void CreateCacheSpace(size_t size) {
-  // Given a request for |size|, first free from the large cache (until there's
-  // only one item left) and then do the same from the small cache if we still
-  // don't have enough.
-  while (size > 0 && (large_cache->size() > 1 || small_cache->size() > 1)) {
-    BackingStoreCache* cache =
-        (large_cache->size() > 1) ? large_cache : small_cache;
-    while (size > 0 && cache->size() > 1) {
-      size_t entry_size = ExpireLastBackingStore(cache);
-      if (size > entry_size)
-        size -= entry_size;
-      else
-        size = 0;
-    }
-  }
-  DCHECK(size == 0);
-}
-
-// Creates the backing store for the host based on the dimensions passed in.
-// Removes the existing backing store if there is one.
-BackingStore* CreateBackingStore(RenderWidgetHost* host,
-                                 const gfx::Size& backing_store_size) {
-  // Remove any existing backing store in case we're replacing it.
-  BackingStoreManager::RemoveBackingStore(host);
-
-  if (!large_cache) {
-    large_cache = new BackingStoreCache(BackingStoreCache::NO_AUTO_EVICT);
-    small_cache = new BackingStoreCache(BackingStoreCache::NO_AUTO_EVICT);
-  }
-
-  // TODO(erikkay) 32bpp is not always accurate
-  size_t new_mem = backing_store_size.GetArea() * 4;
-  size_t current_mem = BackingStoreManager::MemorySize();
-  size_t max_mem = MaxBackingStoreMemory();
-  DCHECK(new_mem < max_mem);
-  if (current_mem + new_mem > max_mem) {
-    // Need to remove old backing stores to make room for the new one. We
-    // don't want to do this when the backing store is being replace by a new
-    // one for the same WebContents, but this case won't get called then: we'll
-    // have removed the old one in the RemoveBackingStore above, and the cache
-    // won't be over-sized.
-    CreateCacheSpace((current_mem + new_mem) - max_mem);
-  }
-  DCHECK((BackingStoreManager::MemorySize() + new_mem) <= max_mem);
-
-  BackingStoreCache* cache;
-  if (new_mem > kSmallThreshold) {
-    // Limit the number of large backing stores (tabs) to the memory tier number
-    // (between 2-5). While we allow a larger amount of memory for people who
-    // have large windows, this means that those who use small browser windows
-    // won't ever cache more than 5 tabs, so they pay a smaller memory cost.
-    if (large_cache->size() >= MaxNumberOfBackingStores())
-      ExpireLastBackingStore(large_cache);
-    cache = large_cache;
-  } else {
-    cache = small_cache;
-  }
-  BackingStore* backing_store = RenderWidgetHostImpl::From(
-      host)->AllocBackingStore(backing_store_size);
-  if (backing_store)
-    cache->Put(host, backing_store);
-  return backing_store;
-}
-
-int ComputeTotalArea(const std::vector<gfx::Rect>& rects) {
-  // We assume that the given rects are non-overlapping, which is a property of
-  // the paint rects generated by the PaintAggregator.
-#ifndef NDEBUG
-  for (size_t i = 0; i < rects.size(); ++i) {
-    for (size_t j = 0; j < rects.size(); ++j) {
-      if (i != j)
-        DCHECK(!rects[i].Intersects(rects[j]));
-    }
-  }
-#endif
-  int area = 0;
-  for (size_t i = 0; i < rects.size(); ++i)
-    area += rects[i].size().GetArea();
-  return area;
-}
-
-}  // namespace
-
-// BackingStoreManager ---------------------------------------------------------
-
-// static
-BackingStore* BackingStoreManager::GetBackingStore(
-    RenderWidgetHost* host,
-    const gfx::Size& desired_size) {
-  BackingStore* backing_store = Lookup(host);
-  if (backing_store) {
-    // If we already have a backing store, then make sure it is the correct
-    // size.
-    if (backing_store->size() == desired_size)
-      return backing_store;
-    backing_store = NULL;
-  }
-
-  return backing_store;
-}
-
-// static
-void BackingStoreManager::PrepareBackingStore(
-    RenderWidgetHost* host,
-    const gfx::Size& backing_store_size,
-    TransportDIB::Id bitmap,
-    const gfx::Rect& bitmap_rect,
-    const std::vector<gfx::Rect>& copy_rects,
-    float scale_factor,
-    const base::Closure& completion_callback,
-    bool* needs_full_paint,
-    bool* scheduled_completion_callback) {
-  BackingStore* backing_store = GetBackingStore(host, backing_store_size);
-  if (!backing_store) {
-    // We need to get Webkit to generate a new paint here, as we
-    // don't have a previous snapshot.
-    if (bitmap_rect.size() != backing_store_size ||
-        bitmap_rect.x() != 0 || bitmap_rect.y() != 0 ||
-        ComputeTotalArea(copy_rects) != backing_store_size.GetArea() ||
-        !(backing_store = CreateBackingStore(host, backing_store_size))) {
-      DCHECK(needs_full_paint != NULL);
-      *needs_full_paint = true;
-      *scheduled_completion_callback = false;
-      // Makes no sense to paint the transport dib if we are going
-      // to request a full paint.
-      return;
-    }
-  }
-
-  backing_store->PaintToBackingStore(host->GetProcess(), bitmap,
-                                     bitmap_rect, copy_rects, scale_factor,
-                                     completion_callback,
-                                     scheduled_completion_callback);
-}
-
-// static
-BackingStore* BackingStoreManager::Lookup(RenderWidgetHost* host) {
-  if (large_cache) {
-    BackingStoreCache::iterator it = large_cache->Get(host);
-    if (it != large_cache->end())
-      return it->second;
-
-    // This moves host to the front of the MRU.
-    it = small_cache->Get(host);
-    if (it != small_cache->end())
-      return it->second;
-  }
-  return NULL;
-}
-
-// static
-void BackingStoreManager::RemoveBackingStore(RenderWidgetHost* host) {
-  if (!large_cache)
-    return;
-
-  BackingStoreCache* cache = large_cache;
-  BackingStoreCache::iterator it = cache->Peek(host);
-  if (it == cache->end()) {
-    cache = small_cache;
-    it = cache->Peek(host);
-    if (it == cache->end())
-      return;
-  }
-  cache->Erase(it);
-}
-
-// static
-size_t BackingStoreManager::MemorySize() {
-  if (!large_cache)
-    return 0;
-
-  size_t mem = 0;
-  BackingStoreCache::iterator it;
-  for (it = large_cache->begin(); it != large_cache->end(); ++it)
-    mem += it->second->MemorySize();
-
-  for (it = small_cache->begin(); it != small_cache->end(); ++it)
-    mem += it->second->MemorySize();
-
-  return mem;
-}
-
-}  // namespace content
diff --git a/content/browser/renderer_host/backing_store_manager.h b/content/browser/renderer_host/backing_store_manager.h
deleted file mode 100644
index ae96769..0000000
--- a/content/browser/renderer_host/backing_store_manager.h
+++ /dev/null
@@ -1,83 +0,0 @@
-// Copyright (c) 2012 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 CONTENT_BROWSER_RENDERER_HOST_BACKING_STORE_MANAGER_H_
-#define CONTENT_BROWSER_RENDERER_HOST_BACKING_STORE_MANAGER_H_
-
-#include <vector>
-
-#include "base/basictypes.h"
-#include "base/callback_forward.h"
-#include "base/process/process.h"
-#include "ui/gfx/rect.h"
-#include "ui/gfx/size.h"
-#include "ui/surface/transport_dib.h"
-
-namespace content {
-class BackingStore;
-class RenderWidgetHost;
-
-// This class manages backing stores in the browsr. Every RenderWidgetHost is
-// associated with a backing store which it requests from this class.  The
-// hosts don't maintain any references to the backing stores.  These backing
-// stores are maintained in a cache which can be trimmed as needed.
-class BackingStoreManager {
- public:
-  // Returns a backing store which matches the desired dimensions.
-  //
-  // backing_store_rect
-  //   The desired backing store dimensions.
-  // Returns a pointer to the backing store on success, NULL on failure.
-  static BackingStore* GetBackingStore(RenderWidgetHost* host,
-                                       const gfx::Size& desired_size);
-
-  // Makes a backing store which is fully ready for consumption, i.e. the
-  // bitmap from the renderer has been copied into the backing store.
-  //
-  // backing_store_size
-  //   The desired backing store dimensions, in DIPs.
-  // bitmap_section
-  //   The bitmap section from the renderer.
-  // bitmap_rect
-  //   The rect to be painted into the backing store, in DIPs.
-  // scale_factor
-  //   The device scale factor the backing store is expected to be at.
-  //   If the backing store's device scale factor doesn't match, it will need
-  //   to scale |bitmap| at paint time. This will only be out of sync with the
-  //   backing store scale factor for a few frames, right after device scale
-  //   changes.
-  // needs_full_paint
-  //   Set if we need to send out a request to paint the view
-  //   to the renderer.
-  static void PrepareBackingStore(
-      RenderWidgetHost* host,
-      const gfx::Size& backing_store_size,
-      TransportDIB::Id bitmap,
-      const gfx::Rect& bitmap_rect,
-      const std::vector<gfx::Rect>& copy_rects,
-      float scale_factor,
-      const base::Closure& completion_callback,
-      bool* needs_full_paint,
-      bool* scheduled_completion_callback);
-
-  // Returns a matching backing store for the host.
-  // Returns NULL if we fail to find one.
-  static BackingStore* Lookup(RenderWidgetHost* host);
-
-  // Removes the backing store for the host.
-  static void RemoveBackingStore(RenderWidgetHost* host);
-
-  // Current size in bytes of the backing store cache.
-  static size_t MemorySize();
-
- private:
-  // Not intended for instantiation.
-  BackingStoreManager() {}
-
-  DISALLOW_COPY_AND_ASSIGN(BackingStoreManager);
-};
-
-}  // namespace content
-
-#endif  // CONTENT_BROWSER_RENDERER_HOST_BACKING_STORE_MANAGER_H_
diff --git a/content/browser/renderer_host/gpu_message_filter.cc b/content/browser/renderer_host/gpu_message_filter.cc
index 87163cf..3c8a177 100644
--- a/content/browser/renderer_host/gpu_message_filter.cc
+++ b/content/browser/renderer_host/gpu_message_filter.cc
@@ -57,22 +57,9 @@
     : BrowserMessageFilter(GpuMsgStart),
       gpu_process_id_(0),
       render_process_id_(render_process_id),
-      share_contexts_(false),
       render_widget_helper_(render_widget_helper),
       weak_ptr_factory_(this) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
-
-#if defined(USE_AURA) || defined(OS_ANDROID)
-  // We use the GPU process for UI on Aura, and we need to share renderer GL
-  // contexts with the compositor context.
-  share_contexts_ = true;
-#else
-  // Share contexts when compositing webview plugin or using share groups
-  // for asynchronous texture uploads.
-  if (CommandLine::ForCurrentProcess()->HasSwitch(
-          switches::kEnableShareGroupAsyncTextureUpload))
-    share_contexts_ = true;
-#endif
 }
 
 GpuMessageFilter::~GpuMessageFilter() {
@@ -145,9 +132,10 @@
     BeginAllFrameSubscriptions();
   }
 
+  bool share_contexts = true;
   host->EstablishGpuChannel(
       render_process_id_,
-      share_contexts_,
+      share_contexts,
       base::Bind(&GpuMessageFilter::EstablishChannelCallback,
                  weak_ptr_factory_.GetWeakPtr(),
                  base::Passed(&reply)));
diff --git a/content/browser/renderer_host/gpu_message_filter.h b/content/browser/renderer_host/gpu_message_filter.h
index 4a240f5..1d42fb2 100644
--- a/content/browser/renderer_host/gpu_message_filter.h
+++ b/content/browser/renderer_host/gpu_message_filter.h
@@ -78,7 +78,6 @@
 
   int gpu_process_id_;
   int render_process_id_;
-  bool share_contexts_;
 
   scoped_refptr<RenderWidgetHelper> render_widget_helper_;
 
diff --git a/content/browser/renderer_host/ime_adapter_android.h b/content/browser/renderer_host/ime_adapter_android.h
index ef355d2..e920c03 100644
--- a/content/browser/renderer_host/ime_adapter_android.h
+++ b/content/browser/renderer_host/ime_adapter_android.h
@@ -7,7 +7,7 @@
 
 #include <jni.h>
 
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 
 namespace content {
 
diff --git a/content/browser/renderer_host/input/gesture_event_queue.cc b/content/browser/renderer_host/input/gesture_event_queue.cc
index b9cabbb..2fb46b6 100644
--- a/content/browser/renderer_host/input/gesture_event_queue.cc
+++ b/content/browser/renderer_host/input/gesture_event_queue.cc
@@ -32,7 +32,6 @@
        fling_in_progress_(false),
        scrolling_in_progress_(false),
        ignore_next_ack_(false),
-       combined_scroll_pinch_(gfx::Transform()),
        touchpad_tap_suppression_controller_(
            new TouchpadTapSuppressionController(touchpad_client)),
        touchscreen_tap_suppression_controller_(
@@ -164,7 +163,7 @@
     default:
       break;
   }
-  EnqueueEvent(gesture_event);
+  coalesced_gesture_events_.push_back(gesture_event);
   return ShouldHandleEventNow();
 }
 
@@ -278,25 +277,24 @@
 
 void GestureEventQueue::MergeOrInsertScrollAndPinchEvent(
     const GestureEventWithLatencyInfo& gesture_event) {
-  if (coalesced_gesture_events_.size() <= 1) {
-    EnqueueEvent(gesture_event);
+  const size_t unsent_events_count =
+      coalesced_gesture_events_.size() - EventsInFlightCount();
+  if (!unsent_events_count) {
+    coalesced_gesture_events_.push_back(gesture_event);
     return;
   }
+
   GestureEventWithLatencyInfo* last_event = &coalesced_gesture_events_.back();
   if (last_event->CanCoalesceWith(gesture_event)) {
     last_event->CoalesceWith(gesture_event);
-    if (!combined_scroll_pinch_.IsIdentity()) {
-      combined_scroll_pinch_.ConcatTransform(
-          GetTransformForEvent(gesture_event));
-    }
     return;
   }
-  if (coalesced_gesture_events_.size() == 2 ||
-      (coalesced_gesture_events_.size() == 3 && ignore_next_ack_) ||
-      !ShouldTryMerging(gesture_event, *last_event)) {
-    EnqueueEvent(gesture_event);
+
+  if (!ShouldTryMerging(gesture_event, *last_event)) {
+    coalesced_gesture_events_.push_back(gesture_event);
     return;
   }
+
   GestureEventWithLatencyInfo scroll_event;
   GestureEventWithLatencyInfo pinch_event;
   scroll_event.event.modifiers |= gesture_event.event.modifiers;
@@ -315,28 +313,32 @@
       WebInputEvent::GesturePinchUpdate ?
           gesture_event.event.y : last_event->event.y;
 
-  combined_scroll_pinch_.ConcatTransform(GetTransformForEvent(gesture_event));
-  GestureEventWithLatencyInfo* second_last_event = &coalesced_gesture_events_
-      [coalesced_gesture_events_.size() - 2];
-  if (ShouldTryMerging(gesture_event, *second_last_event)) {
-    // Keep the oldest LatencyInfo.
-    DCHECK_LE(second_last_event->latency.trace_id,
-              scroll_event.latency.trace_id);
-    scroll_event.latency = second_last_event->latency;
-    pinch_event.latency = second_last_event->latency;
-    coalesced_gesture_events_.pop_back();
-  } else {
-    DCHECK(combined_scroll_pinch_ == GetTransformForEvent(gesture_event));
-    combined_scroll_pinch_.
-        PreconcatTransform(GetTransformForEvent(*last_event));
+  gfx::Transform combined_scroll_pinch = GetTransformForEvent(*last_event);
+  // Only include the second-to-last event in the coalesced pair if it exists
+  // and can be combined with the new event.
+  if (unsent_events_count > 1) {
+    const GestureEventWithLatencyInfo& second_last_event =
+        coalesced_gesture_events_[coalesced_gesture_events_.size() - 2];
+    if (ShouldTryMerging(gesture_event, second_last_event)) {
+      // Keep the oldest LatencyInfo.
+      DCHECK_LE(second_last_event.latency.trace_id,
+                scroll_event.latency.trace_id);
+      scroll_event.latency = second_last_event.latency;
+      pinch_event.latency = second_last_event.latency;
+      combined_scroll_pinch.PreconcatTransform(
+          GetTransformForEvent(second_last_event));
+      coalesced_gesture_events_.pop_back();
+    }
   }
+  combined_scroll_pinch.ConcatTransform(GetTransformForEvent(gesture_event));
   coalesced_gesture_events_.pop_back();
+
   float combined_scale =
-      SkMScalarToFloat(combined_scroll_pinch_.matrix().get(0, 0));
+      SkMScalarToFloat(combined_scroll_pinch.matrix().get(0, 0));
   float combined_scroll_pinch_x =
-      SkMScalarToFloat(combined_scroll_pinch_.matrix().get(0, 3));
+      SkMScalarToFloat(combined_scroll_pinch.matrix().get(0, 3));
   float combined_scroll_pinch_y =
-      SkMScalarToFloat(combined_scroll_pinch_.matrix().get(1, 3));
+      SkMScalarToFloat(combined_scroll_pinch.matrix().get(1, 3));
   scroll_event.event.data.scrollUpdate.deltaX =
       (combined_scroll_pinch_x + pinch_event.event.x) / combined_scale -
       pinch_event.event.x;
@@ -363,7 +365,7 @@
 
 gfx::Transform GestureEventQueue::GetTransformForEvent(
     const GestureEventWithLatencyInfo& gesture_event) const {
-  gfx::Transform gesture_transform = gfx::Transform();
+  gfx::Transform gesture_transform;
   if (gesture_event.event.type == WebInputEvent::GestureScrollUpdate) {
     gesture_transform.Translate(gesture_event.event.data.scrollUpdate.deltaX,
                                 gesture_event.event.data.scrollUpdate.deltaY);
@@ -376,12 +378,15 @@
   return gesture_transform;
 }
 
-void GestureEventQueue::EnqueueEvent(
-    const GestureEventWithLatencyInfo& gesture_event) {
-  coalesced_gesture_events_.push_back(gesture_event);
-  // Scroll and pinch events contributing to |combined_scroll_pinch_| will be
-  // manually added to the queue in |MergeOrInsertScrollAndPinchEvent()|.
-  combined_scroll_pinch_ = gfx::Transform();
+size_t GestureEventQueue::EventsInFlightCount() const {
+  if (coalesced_gesture_events_.empty())
+    return 0;
+
+  if (!ignore_next_ack_)
+    return 1;
+
+  DCHECK_GT(coalesced_gesture_events_.size(), 1U);
+  return 2;
 }
 
 }  // namespace content
diff --git a/content/browser/renderer_host/input/gesture_event_queue.h b/content/browser/renderer_host/input/gesture_event_queue.h
index e02d507..ca7f648 100644
--- a/content/browser/renderer_host/input/gesture_event_queue.h
+++ b/content/browser/renderer_host/input/gesture_event_queue.h
@@ -165,9 +165,9 @@
   gfx::Transform GetTransformForEvent(
       const GestureEventWithLatencyInfo& gesture_event) const;
 
-  // Adds |gesture_event| to the |coalesced_gesture_events_|, resetting the
-  // accumulation of |combined_scroll_pinch_|.
-  void EnqueueEvent(const GestureEventWithLatencyInfo& gesture_event);
+  // The number of sent events for which we're awaiting an ack.  These events
+  // remain at the head of the queue until ack'ed.
+  size_t EventsInFlightCount() const;
 
   // The receiver of all forwarded gesture events.
   GestureEventQueueClient* client_;
@@ -183,10 +183,6 @@
   // for an ACK, so the next gesture ACK should be ignored.
   bool ignore_next_ack_;
 
-  // Transform that holds the combined transform matrix for the current
-  // scroll-pinch sequence at the end of the queue.
-  gfx::Transform combined_scroll_pinch_;
-
   // An object tracking the state of touchpad on the delivery of mouse events to
   // the renderer to filter mouse immediately after a touchpad fling canceling
   // tap.
diff --git a/content/browser/renderer_host/input/gesture_event_queue_unittest.cc b/content/browser/renderer_host/input/gesture_event_queue_unittest.cc
index f13248e..412dae9 100644
--- a/content/browser/renderer_host/input/gesture_event_queue_unittest.cc
+++ b/content/browser/renderer_host/input/gesture_event_queue_unittest.cc
@@ -663,6 +663,224 @@
   EXPECT_EQ(1, merged_event.modifiers);
 }
 
+TEST_F(GestureEventQueueTest, CoalescesPinchSequencesWithEarlyAck) {
+  // Turn off debounce handling for test isolation.
+  DisableDebounce();
+
+  SimulateGestureEvent(WebInputEvent::GestureScrollBegin,
+                       WebGestureEvent::Touchscreen);
+  SendInputEventACK(WebInputEvent::GestureScrollBegin,
+                    INPUT_EVENT_ACK_STATE_CONSUMED);
+
+  SimulateGestureEvent(WebInputEvent::GesturePinchBegin,
+                       WebGestureEvent::Touchscreen);
+  SendInputEventACK(WebInputEvent::GesturePinchBegin,
+                    INPUT_EVENT_ACK_STATE_CONSUMED);
+  // ScrollBegin and PinchBegin have been sent
+  EXPECT_EQ(2U, GetAndResetSentGestureEventCount());
+  EXPECT_EQ(0U, GestureEventQueueSize());
+
+  SimulateGestureScrollUpdateEvent(5, 5, 1);
+  EXPECT_EQ(1U, GetAndResetSentGestureEventCount());
+  EXPECT_EQ(WebInputEvent::GestureScrollUpdate,
+            GestureEventLastQueueEvent().type);
+  EXPECT_EQ(1U, GestureEventQueueSize());
+
+
+  SimulateGesturePinchUpdateEvent(2, 60, 60, 1);
+  EXPECT_EQ(0U, GetAndResetSentGestureEventCount());
+  EXPECT_EQ(WebInputEvent::GesturePinchUpdate,
+            GestureEventLastQueueEvent().type);
+  EXPECT_EQ(2U, GestureEventQueueSize());
+
+  SimulateGesturePinchUpdateEvent(3, 60, 60, 1);
+  EXPECT_EQ(0U, GetAndResetSentGestureEventCount());
+  EXPECT_EQ(WebInputEvent::GesturePinchUpdate,
+            GestureEventLastQueueEvent().type);
+  EXPECT_EQ(2U, GestureEventQueueSize());
+
+  SimulateGestureScrollUpdateEvent(5, 5, 1);
+  EXPECT_EQ(0U, GetAndResetSentGestureEventCount());
+  // The coalesced pinch/scroll pair will have been re-arranged, with the
+  // pinch following the scroll.
+  EXPECT_EQ(WebInputEvent::GesturePinchUpdate,
+            GestureEventLastQueueEvent().type);
+  EXPECT_EQ(3U, GestureEventQueueSize());
+
+  SimulateGesturePinchUpdateEvent(4, 60, 60, 1);
+  EXPECT_EQ(0U, GetAndResetSentGestureEventCount());
+  EXPECT_EQ(3U, GestureEventQueueSize());
+
+  SendInputEventACK(WebInputEvent::GestureScrollUpdate,
+                    INPUT_EVENT_ACK_STATE_CONSUMED);
+  EXPECT_EQ(2U, GetAndResetSentGestureEventCount());
+  EXPECT_EQ(2U, GestureEventQueueSize());
+
+  SendInputEventACK(WebInputEvent::GestureScrollUpdate,
+                    INPUT_EVENT_ACK_STATE_CONSUMED);
+  EXPECT_EQ(WebInputEvent::GestureScrollUpdate, last_acked_event().type);
+
+  SendInputEventACK(WebInputEvent::GesturePinchUpdate,
+                    INPUT_EVENT_ACK_STATE_CONSUMED);
+  EXPECT_EQ(WebInputEvent::GesturePinchUpdate, last_acked_event().type);
+  EXPECT_EQ(2.f * 3.f * 4.f, last_acked_event().data.pinchUpdate.scale);
+
+  EXPECT_EQ(0U, GestureEventQueueSize());
+}
+
+TEST_F(GestureEventQueueTest,
+       DoesNotCoalescePinchGestureEventsWithDifferentModifiers) {
+  // Turn off debounce handling for test isolation.
+  DisableDebounce();
+
+  // Insert an event to force queueing of gestures.
+  SimulateGestureEvent(WebInputEvent::GestureTapCancel,
+                       WebGestureEvent::Touchscreen);
+  EXPECT_EQ(1U, GetAndResetSentGestureEventCount());
+  EXPECT_EQ(1U, GestureEventQueueSize());
+
+  SimulateGestureScrollUpdateEvent(5, 5, 1);
+  EXPECT_EQ(0U, GetAndResetSentGestureEventCount());
+  EXPECT_EQ(2U, GestureEventQueueSize());
+
+  SimulateGesturePinchUpdateEvent(3, 60, 60, 1);
+  EXPECT_EQ(0U, GetAndResetSentGestureEventCount());
+  EXPECT_EQ(3U, GestureEventQueueSize());
+
+  SimulateGestureScrollUpdateEvent(10, 15, 1);
+  EXPECT_EQ(0U, GetAndResetSentGestureEventCount());
+  EXPECT_EQ(3U, GestureEventQueueSize());
+
+  SimulateGesturePinchUpdateEvent(4, 60, 60, 1);
+  EXPECT_EQ(0U, GetAndResetSentGestureEventCount());
+  EXPECT_EQ(3U, GestureEventQueueSize());
+
+  // Using different modifiers should prevent coalescing.
+  SimulateGesturePinchUpdateEvent(5, 60, 60, 2);
+  EXPECT_EQ(0U, GetAndResetSentGestureEventCount());
+  EXPECT_EQ(4U, GestureEventQueueSize());
+
+  SimulateGesturePinchUpdateEvent(6, 60, 60, 3);
+  EXPECT_EQ(0U, GetAndResetSentGestureEventCount());
+  EXPECT_EQ(5U, GestureEventQueueSize());
+
+  SendInputEventACK(WebInputEvent::GestureTapCancel,
+                    INPUT_EVENT_ACK_STATE_CONSUMED);
+  EXPECT_EQ(2U, GetAndResetSentGestureEventCount());
+  EXPECT_EQ(4U, GestureEventQueueSize());
+
+  SendInputEventACK(WebInputEvent::GestureScrollUpdate,
+                    INPUT_EVENT_ACK_STATE_CONSUMED);
+  EXPECT_EQ(WebInputEvent::GestureScrollUpdate, last_acked_event().type);
+  EXPECT_EQ(3U, GestureEventQueueSize());
+
+  SendInputEventACK(WebInputEvent::GesturePinchUpdate,
+                    INPUT_EVENT_ACK_STATE_CONSUMED);
+  EXPECT_EQ(WebInputEvent::GesturePinchUpdate, last_acked_event().type);
+  EXPECT_EQ(3.f * 4.f, last_acked_event().data.pinchUpdate.scale);
+  EXPECT_EQ(2U, GestureEventQueueSize());
+  EXPECT_EQ(1U, GetAndResetSentGestureEventCount());
+
+  SendInputEventACK(WebInputEvent::GesturePinchUpdate,
+                    INPUT_EVENT_ACK_STATE_CONSUMED);
+  EXPECT_EQ(WebInputEvent::GesturePinchUpdate, last_acked_event().type);
+  EXPECT_EQ(5.f, last_acked_event().data.pinchUpdate.scale);
+  EXPECT_EQ(1U, GestureEventQueueSize());
+  EXPECT_EQ(1U, GetAndResetSentGestureEventCount());
+
+  SendInputEventACK(WebInputEvent::GesturePinchUpdate,
+                    INPUT_EVENT_ACK_STATE_CONSUMED);
+  EXPECT_EQ(WebInputEvent::GesturePinchUpdate, last_acked_event().type);
+  EXPECT_EQ(6.f, last_acked_event().data.pinchUpdate.scale);
+  EXPECT_EQ(0U, GestureEventQueueSize());
+}
+
+TEST_F(GestureEventQueueTest, CoalescesScrollAndPinchEventsIdentity) {
+  // Turn off debounce handling for test isolation.
+  DisableDebounce();
+
+  // Insert an event to force queueing of gestures.
+  SimulateGestureEvent(WebInputEvent::GestureTapCancel,
+                       WebGestureEvent::Touchscreen);
+  EXPECT_EQ(1U, GetAndResetSentGestureEventCount());
+  EXPECT_EQ(1U, GestureEventQueueSize());
+
+  // Ensure that coalescing yields an identity transform for any pinch/scroll
+  // pair combined with its inverse.
+  SimulateGestureScrollUpdateEvent(5, 5, 1);
+  EXPECT_EQ(0U, GetAndResetSentGestureEventCount());
+  EXPECT_EQ(2U, GestureEventQueueSize());
+
+  SimulateGesturePinchUpdateEvent(5, 10, 10, 1);
+  EXPECT_EQ(0U, GetAndResetSentGestureEventCount());
+  EXPECT_EQ(3U, GestureEventQueueSize());
+
+  SimulateGesturePinchUpdateEvent(.2f, 10, 10, 1);
+  EXPECT_EQ(0U, GetAndResetSentGestureEventCount());
+  EXPECT_EQ(3U, GestureEventQueueSize());
+
+  SimulateGestureScrollUpdateEvent(-5, -5, 1);
+  EXPECT_EQ(0U, GetAndResetSentGestureEventCount());
+  EXPECT_EQ(3U, GestureEventQueueSize());
+
+  SendInputEventACK(WebInputEvent::GestureTapCancel,
+                    INPUT_EVENT_ACK_STATE_CONSUMED);
+  EXPECT_EQ(2U, GetAndResetSentGestureEventCount());
+  EXPECT_EQ(2U, GestureEventQueueSize());
+
+  SendInputEventACK(WebInputEvent::GestureScrollUpdate,
+                    INPUT_EVENT_ACK_STATE_CONSUMED);
+  EXPECT_EQ(WebInputEvent::GestureScrollUpdate, last_acked_event().type);
+  EXPECT_EQ(0.f, last_acked_event().data.scrollUpdate.deltaX);
+  EXPECT_EQ(0.f, last_acked_event().data.scrollUpdate.deltaY);
+
+  SendInputEventACK(WebInputEvent::GesturePinchUpdate,
+                    INPUT_EVENT_ACK_STATE_CONSUMED);
+  EXPECT_EQ(WebInputEvent::GesturePinchUpdate, last_acked_event().type);
+  EXPECT_EQ(1.f, last_acked_event().data.pinchUpdate.scale);
+  EXPECT_EQ(0U, GestureEventQueueSize());
+
+  // Insert an event to force queueing of gestures.
+  SimulateGestureEvent(WebInputEvent::GestureTapCancel,
+                       WebGestureEvent::Touchscreen);
+  EXPECT_EQ(1U, GetAndResetSentGestureEventCount());
+  EXPECT_EQ(1U, GestureEventQueueSize());
+
+  // Ensure that coalescing yields an identity transform for any pinch/scroll
+  // pair combined with its inverse.
+  SimulateGesturePinchUpdateEvent(2, 10, 10, 1);
+  EXPECT_EQ(0U, GetAndResetSentGestureEventCount());
+  EXPECT_EQ(2U, GestureEventQueueSize());
+
+  SimulateGestureScrollUpdateEvent(20, 20, 1);
+  EXPECT_EQ(0U, GetAndResetSentGestureEventCount());
+  EXPECT_EQ(3U, GestureEventQueueSize());
+
+  SimulateGesturePinchUpdateEvent(0.5f, 20, 20, 1);
+  EXPECT_EQ(0U, GetAndResetSentGestureEventCount());
+  EXPECT_EQ(3U, GestureEventQueueSize());
+
+  SimulateGestureScrollUpdateEvent(-5, -5, 1);
+  EXPECT_EQ(0U, GetAndResetSentGestureEventCount());
+  EXPECT_EQ(3U, GestureEventQueueSize());
+
+  SendInputEventACK(WebInputEvent::GestureTapCancel,
+                    INPUT_EVENT_ACK_STATE_CONSUMED);
+  EXPECT_EQ(2U, GetAndResetSentGestureEventCount());
+  EXPECT_EQ(2U, GestureEventQueueSize());
+
+  SendInputEventACK(WebInputEvent::GestureScrollUpdate,
+                    INPUT_EVENT_ACK_STATE_CONSUMED);
+  EXPECT_EQ(WebInputEvent::GestureScrollUpdate, last_acked_event().type);
+  EXPECT_EQ(0.f, last_acked_event().data.scrollUpdate.deltaX);
+  EXPECT_EQ(0.f, last_acked_event().data.scrollUpdate.deltaY);
+
+  SendInputEventACK(WebInputEvent::GesturePinchUpdate,
+                    INPUT_EVENT_ACK_STATE_CONSUMED);
+  EXPECT_EQ(WebInputEvent::GesturePinchUpdate, last_acked_event().type);
+  EXPECT_EQ(1.f, last_acked_event().data.pinchUpdate.scale);
+}
+
 // Tests a single event with an synchronous ack.
 TEST_F(GestureEventQueueTest, SimpleSyncAck) {
   set_synchronous_ack(INPUT_EVENT_ACK_STATE_CONSUMED);
diff --git a/content/browser/renderer_host/input/synthetic_gesture.h b/content/browser/renderer_host/input/synthetic_gesture.h
index 0f49c8e..1d605ff 100644
--- a/content/browser/renderer_host/input/synthetic_gesture.h
+++ b/content/browser/renderer_host/input/synthetic_gesture.h
@@ -37,8 +37,7 @@
     GESTURE_RUNNING,
     GESTURE_FINISHED,
     GESTURE_SOURCE_TYPE_NOT_IMPLEMENTED,
-    GESTURE_SOURCE_TYPE_NOT_SUPPORTED_BY_PLATFORM,
-    GESTURE_RESULT_MAX = GESTURE_SOURCE_TYPE_NOT_SUPPORTED_BY_PLATFORM
+    GESTURE_RESULT_MAX = GESTURE_SOURCE_TYPE_NOT_IMPLEMENTED
   };
 
   // Update the state of the gesture and forward the appropriate events to the
diff --git a/content/browser/renderer_host/input/synthetic_gesture_controller_unittest.cc b/content/browser/renderer_host/input/synthetic_gesture_controller_unittest.cc
index 550e5a2..d9cdbf4 100644
--- a/content/browser/renderer_host/input/synthetic_gesture_controller_unittest.cc
+++ b/content/browser/renderer_host/input/synthetic_gesture_controller_unittest.cc
@@ -88,11 +88,6 @@
   GetDefaultSyntheticGestureSourceType() const OVERRIDE {
     return SyntheticGestureParams::TOUCH_INPUT;
   }
-  virtual bool SupportsSyntheticGestureSourceType(
-      SyntheticGestureParams::GestureSourceType gesture_source_type)
-      const OVERRIDE {
-    return true;
-  }
 
   virtual base::TimeDelta PointerAssumedStoppedTime() const OVERRIDE {
     return base::TimeDelta::FromMilliseconds(pointer_assumed_stopped_time_ms_);
diff --git a/content/browser/renderer_host/input/synthetic_gesture_target.h b/content/browser/renderer_host/input/synthetic_gesture_target.h
index b7bf7d9..b7bb2ba 100644
--- a/content/browser/renderer_host/input/synthetic_gesture_target.h
+++ b/content/browser/renderer_host/input/synthetic_gesture_target.h
@@ -36,10 +36,6 @@
   virtual SyntheticGestureParams::GestureSourceType
       GetDefaultSyntheticGestureSourceType() const = 0;
 
-  // Check if a particular gesture type is supported by the target.
-  virtual bool SupportsSyntheticGestureSourceType(
-      SyntheticGestureParams::GestureSourceType gesture_source_type) const = 0;
-
   // After how much time of inaction does the target assume that a pointer has
   // stopped moving.
   virtual base::TimeDelta PointerAssumedStoppedTime() const = 0;
diff --git a/content/browser/renderer_host/input/synthetic_gesture_target_android.cc b/content/browser/renderer_host/input/synthetic_gesture_target_android.cc
index f8aeabb..91792c2 100644
--- a/content/browser/renderer_host/input/synthetic_gesture_target_android.cc
+++ b/content/browser/renderer_host/input/synthetic_gesture_target_android.cc
@@ -77,16 +77,21 @@
               static_cast<int64>(web_touch.timeStampSeconds * 1000.0));
 }
 
+void SyntheticGestureTargetAndroid::DispatchWebMouseWheelEventToPlatform(
+    const blink::WebMouseWheelEvent& web_wheel, const ui::LatencyInfo&) {
+  CHECK(false);
+}
+
+void SyntheticGestureTargetAndroid::DispatchWebMouseEventToPlatform(
+    const blink::WebMouseEvent& web_mouse, const ui::LatencyInfo&) {
+  CHECK(false);
+}
+
 SyntheticGestureParams::GestureSourceType
 SyntheticGestureTargetAndroid::GetDefaultSyntheticGestureSourceType() const {
   return SyntheticGestureParams::TOUCH_INPUT;
 }
 
-bool SyntheticGestureTargetAndroid::SupportsSyntheticGestureSourceType(
-    SyntheticGestureParams::GestureSourceType gesture_source_type) const {
-  return gesture_source_type == SyntheticGestureParams::TOUCH_INPUT;
-}
-
 int SyntheticGestureTargetAndroid::GetTouchSlopInDips() const {
   float device_scale_factor =
       gfx::Screen::GetNativeScreen()->GetPrimaryDisplay().device_scale_factor();
diff --git a/content/browser/renderer_host/input/synthetic_gesture_target_android.h b/content/browser/renderer_host/input/synthetic_gesture_target_android.h
index d5c47aa..0ec427b 100644
--- a/content/browser/renderer_host/input/synthetic_gesture_target_android.h
+++ b/content/browser/renderer_host/input/synthetic_gesture_target_android.h
@@ -22,16 +22,20 @@
 
   static bool RegisterTouchEventSynthesizer(JNIEnv* env);
 
+  // SyntheticGestureTargetBase:
   virtual void DispatchWebTouchEventToPlatform(
       const blink::WebTouchEvent& web_touch,
       const ui::LatencyInfo& latency_info) OVERRIDE;
+  virtual void DispatchWebMouseWheelEventToPlatform(
+      const blink::WebMouseWheelEvent& web_wheel,
+      const ui::LatencyInfo& latency_info) OVERRIDE;
+  virtual void DispatchWebMouseEventToPlatform(
+      const blink::WebMouseEvent& web_mouse,
+      const ui::LatencyInfo& latency_info) OVERRIDE;
 
   // SyntheticGestureTarget:
   virtual SyntheticGestureParams::GestureSourceType
       GetDefaultSyntheticGestureSourceType() const OVERRIDE;
-  virtual bool SupportsSyntheticGestureSourceType(
-      SyntheticGestureParams::GestureSourceType gesture_source_type) const
-      OVERRIDE;
 
   virtual int GetTouchSlopInDips() const OVERRIDE;
 
diff --git a/content/browser/renderer_host/input/synthetic_gesture_target_aura.cc b/content/browser/renderer_host/input/synthetic_gesture_target_aura.cc
index 1fd1e43..9825cb5 100644
--- a/content/browser/renderer_host/input/synthetic_gesture_target_aura.cc
+++ b/content/browser/renderer_host/input/synthetic_gesture_target_aura.cc
@@ -132,12 +132,6 @@
   return SyntheticGestureParams::TOUCH_INPUT;
 }
 
-bool SyntheticGestureTargetAura::SupportsSyntheticGestureSourceType(
-    SyntheticGestureParams::GestureSourceType gesture_source_type) const {
-  return gesture_source_type == SyntheticGestureParams::TOUCH_INPUT ||
-      gesture_source_type == SyntheticGestureParams::MOUSE_INPUT;
-}
-
 int SyntheticGestureTargetAura::GetTouchSlopInDips() const {
   // - 1 because Aura considers a pointer to be moving if it has moved at least
   // 'max_touch_move_in_pixels_for_click' pixels.
diff --git a/content/browser/renderer_host/input/synthetic_gesture_target_aura.h b/content/browser/renderer_host/input/synthetic_gesture_target_aura.h
index ea08d00..b28d0be 100644
--- a/content/browser/renderer_host/input/synthetic_gesture_target_aura.h
+++ b/content/browser/renderer_host/input/synthetic_gesture_target_aura.h
@@ -39,9 +39,6 @@
   // SyntheticGestureTarget:
   virtual SyntheticGestureParams::GestureSourceType
       GetDefaultSyntheticGestureSourceType() const OVERRIDE;
-  virtual bool SupportsSyntheticGestureSourceType(
-      SyntheticGestureParams::GestureSourceType gesture_source_type) const
-      OVERRIDE;
 
   virtual int GetTouchSlopInDips() const OVERRIDE;
 
diff --git a/content/browser/renderer_host/input/synthetic_gesture_target_base.cc b/content/browser/renderer_host/input/synthetic_gesture_target_base.cc
index 5f2bb2d..778afb0 100644
--- a/content/browser/renderer_host/input/synthetic_gesture_target_base.cc
+++ b/content/browser/renderer_host/input/synthetic_gesture_target_base.cc
@@ -50,23 +50,14 @@
   latency_info.AddLatencyNumber(ui::INPUT_EVENT_LATENCY_UI_COMPONENT, 0, 0);
 
   if (WebInputEvent::isTouchEventType(event.type)) {
-    DCHECK(SupportsSyntheticGestureSourceType(
-            SyntheticGestureParams::TOUCH_INPUT));
-
     const WebTouchEvent& web_touch =
         static_cast<const WebTouchEvent&>(event);
     DispatchWebTouchEventToPlatform(web_touch, latency_info);
   } else if (event.type == WebInputEvent::MouseWheel) {
-    DCHECK(SupportsSyntheticGestureSourceType(
-            SyntheticGestureParams::MOUSE_INPUT));
-
     const WebMouseWheelEvent& web_wheel =
         static_cast<const WebMouseWheelEvent&>(event);
     DispatchWebMouseWheelEventToPlatform(web_wheel, latency_info);
   } else if (WebInputEvent::isMouseEventType(event.type)) {
-    DCHECK(SupportsSyntheticGestureSourceType(
-            SyntheticGestureParams::MOUSE_INPUT));
-
     const WebMouseEvent& web_mouse =
         static_cast<const WebMouseEvent&>(event);
     DispatchWebMouseEventToPlatform(web_mouse, latency_info);
@@ -78,7 +69,10 @@
 void SyntheticGestureTargetBase::DispatchWebTouchEventToPlatform(
       const blink::WebTouchEvent& web_touch,
       const ui::LatencyInfo& latency_info) {
-  host_->ForwardTouchEventWithLatencyInfo(web_touch, latency_info);
+  // We assume that platforms supporting touch have their own implementation of
+  // SyntheticGestureTarget to route the events through their respective input
+  // stack.
+  CHECK(false);
 }
 
 void SyntheticGestureTargetBase::DispatchWebMouseWheelEventToPlatform(
@@ -102,12 +96,6 @@
   return SyntheticGestureParams::MOUSE_INPUT;
 }
 
-bool SyntheticGestureTargetBase::SupportsSyntheticGestureSourceType(
-    SyntheticGestureParams::GestureSourceType gesture_source_type) const {
-  return gesture_source_type == SyntheticGestureParams::MOUSE_INPUT ||
-      gesture_source_type == SyntheticGestureParams::TOUCH_INPUT;
-}
-
 base::TimeDelta SyntheticGestureTargetBase::PointerAssumedStoppedTime()
     const {
   return base::TimeDelta::FromMilliseconds(kPointerAssumedStoppedTimeMs);
diff --git a/content/browser/renderer_host/input/synthetic_gesture_target_base.h b/content/browser/renderer_host/input/synthetic_gesture_target_base.h
index 7219d5d..e669719 100644
--- a/content/browser/renderer_host/input/synthetic_gesture_target_base.h
+++ b/content/browser/renderer_host/input/synthetic_gesture_target_base.h
@@ -47,9 +47,6 @@
 
   virtual SyntheticGestureParams::GestureSourceType
       GetDefaultSyntheticGestureSourceType() const OVERRIDE;
-  virtual bool SupportsSyntheticGestureSourceType(
-      SyntheticGestureParams::GestureSourceType gesture_source_type) const
-      OVERRIDE;
 
   virtual base::TimeDelta PointerAssumedStoppedTime() const OVERRIDE;
 
diff --git a/content/browser/renderer_host/input/synthetic_pinch_gesture.cc b/content/browser/renderer_host/input/synthetic_pinch_gesture.cc
index a461268..7a72dfd 100644
--- a/content/browser/renderer_host/input/synthetic_pinch_gesture.cc
+++ b/content/browser/renderer_host/input/synthetic_pinch_gesture.cc
@@ -30,9 +30,6 @@
     if (gesture_source_type_ == SyntheticGestureParams::DEFAULT_INPUT)
       gesture_source_type_ = target->GetDefaultSyntheticGestureSourceType();
 
-    if (!target->SupportsSyntheticGestureSourceType(gesture_source_type_))
-      return SyntheticGesture::GESTURE_SOURCE_TYPE_NOT_SUPPORTED_BY_PLATFORM;
-
     state_ = STARTED;
     start_time_ = timestamp;
   }
diff --git a/content/browser/renderer_host/input/synthetic_smooth_scroll_gesture.cc b/content/browser/renderer_host/input/synthetic_smooth_scroll_gesture.cc
index 1af3dca..2866f2b 100644
--- a/content/browser/renderer_host/input/synthetic_smooth_scroll_gesture.cc
+++ b/content/browser/renderer_host/input/synthetic_smooth_scroll_gesture.cc
@@ -44,9 +44,6 @@
     if (gesture_source_type_ == SyntheticGestureParams::DEFAULT_INPUT)
       gesture_source_type_ = target->GetDefaultSyntheticGestureSourceType();
 
-    if (!target->SupportsSyntheticGestureSourceType(gesture_source_type_))
-      return SyntheticGesture::GESTURE_SOURCE_TYPE_NOT_SUPPORTED_BY_PLATFORM;
-
     state_ = STARTED;
     current_scroll_segment_ = -1;
     current_scroll_segment_stop_time_ = timestamp;
diff --git a/content/browser/renderer_host/input/synthetic_tap_gesture.cc b/content/browser/renderer_host/input/synthetic_tap_gesture.cc
index 11a1afb..e20412a 100644
--- a/content/browser/renderer_host/input/synthetic_tap_gesture.cc
+++ b/content/browser/renderer_host/input/synthetic_tap_gesture.cc
@@ -27,9 +27,6 @@
     if (gesture_source_type_ == SyntheticGestureParams::DEFAULT_INPUT)
       gesture_source_type_ = target->GetDefaultSyntheticGestureSourceType();
 
-    if (!target->SupportsSyntheticGestureSourceType(gesture_source_type_))
-      return SyntheticGesture::GESTURE_SOURCE_TYPE_NOT_SUPPORTED_BY_PLATFORM;
-
     state_ = PRESS;
   }
 
diff --git a/content/browser/renderer_host/input/touch_action_browsertest.cc b/content/browser/renderer_host/input/touch_action_browsertest.cc
index 46d693e..6275f47 100644
--- a/content/browser/renderer_host/input/touch_action_browsertest.cc
+++ b/content/browser/renderer_host/input/touch_action_browsertest.cc
@@ -165,8 +165,8 @@
 // http://crbug.com/348539 and is flaky on XP, see
 // http://crbug.com/354763
 //
-// Mac and Linux GTK don't yet have a gesture recognizer, so can't support
-// turning touch events into scroll gestures.
+// Mac doesn't yet have a gesture recognizer, so can't support turning touch
+// events into scroll gestures.
 // Will be fixed with http://crbug.com/337142
 //
 // Verify the test infrastructure works - we can touch-scroll the page and get a
@@ -191,7 +191,13 @@
 
 // Verify that touching a touch-action: none region disables scrolling and
 // enables all touch events to be sent.
-IN_PROC_BROWSER_TEST_F(TouchActionBrowserTest, TouchActionNone) {
+// Disabled on MacOS because it doesn't support touch input.
+#if defined(OS_MACOSX)
+#define MAYBE_TouchActionNone DISABLED_TouchActionNone
+#else
+#define MAYBE_TouchActionNone TouchActionNone
+#endif
+IN_PROC_BROWSER_TEST_F(TouchActionBrowserTest, MAYBE_TouchActionNone) {
   LoadURL();
 
   bool scrolled = DoTouchScroll(gfx::Point(50, 150), gfx::Vector2d(0, 45));
diff --git a/content/browser/renderer_host/input/touch_emulator.cc b/content/browser/renderer_host/input/touch_emulator.cc
index b0d43e2..785935f 100644
--- a/content/browser/renderer_host/input/touch_emulator.cc
+++ b/content/browser/renderer_host/input/touch_emulator.cc
@@ -12,6 +12,7 @@
 #include "third_party/WebKit/public/platform/WebCursorInfo.h"
 #include "ui/events/gesture_detection/gesture_config_helper.h"
 #include "ui/gfx/image/image.h"
+#include "ui/gfx/screen.h"
 
 using blink::WebGestureEvent;
 using blink::WebInputEvent;
@@ -47,15 +48,24 @@
   DCHECK(client_);
   ResetState();
 
-  InitCursorFromResource(&touch_cursor_, IDR_DEVTOOLS_TOUCH_CURSOR_ICON);
-  InitCursorFromResource(&pinch_cursor_, IDR_DEVTOOLS_PINCH_CURSOR_ICON);
+  bool use_2x = gfx::Screen::GetNativeScreen()->
+      GetPrimaryDisplay().device_scale_factor() > 1.5f;
+  float cursor_scale_factor = use_2x ? 2.f : 1.f;
+  InitCursorFromResource(&touch_cursor_,
+      cursor_scale_factor,
+      use_2x ? IDR_DEVTOOLS_TOUCH_CURSOR_ICON_2X :
+          IDR_DEVTOOLS_TOUCH_CURSOR_ICON);
+  InitCursorFromResource(&pinch_cursor_,
+      cursor_scale_factor,
+      use_2x ? IDR_DEVTOOLS_PINCH_CURSOR_ICON_2X :
+          IDR_DEVTOOLS_PINCH_CURSOR_ICON);
 
   WebCursor::CursorInfo cursor_info;
   cursor_info.type = blink::WebCursorInfo::TypePointer;
   pointer_cursor_.InitFromCursorInfo(cursor_info);
 
   // TODO(dgozman): Use synthetic secondary touch to support multi-touch.
-  gesture_provider_.SetMultiTouchSupportEnabled(false);
+  gesture_provider_.SetMultiTouchZoomSupportEnabled(false);
   // TODO(dgozman): Enable double tap if requested by the renderer.
   // TODO(dgozman): Don't break double-tap-based pinch with shift handling.
   gesture_provider_.SetDoubleTapSupportForPlatformEnabled(false);
@@ -96,13 +106,13 @@
   CancelTouch();
 }
 
-void TouchEmulator::InitCursorFromResource(WebCursor* cursor, int resource_id) {
+void TouchEmulator::InitCursorFromResource(
+    WebCursor* cursor, float scale, int resource_id) {
   gfx::Image& cursor_image =
       content::GetContentClient()->GetNativeImageNamed(resource_id);
   WebCursor::CursorInfo cursor_info;
   cursor_info.type = blink::WebCursorInfo::TypeCustom;
-  // TODO(dgozman): Add HiDPI cursors.
-  cursor_info.image_scale_factor = 1.f;
+  cursor_info.image_scale_factor = scale;
   cursor_info.custom_image = cursor_image.AsBitmap();
   cursor_info.hotspot =
       gfx::Point(cursor_image.Width() / 2, cursor_image.Height() / 2);
diff --git a/content/browser/renderer_host/input/touch_emulator.h b/content/browser/renderer_host/input/touch_emulator.h
index b4b9e93..9ee6500 100644
--- a/content/browser/renderer_host/input/touch_emulator.h
+++ b/content/browser/renderer_host/input/touch_emulator.h
@@ -39,7 +39,7 @@
   // ui::GestureProviderClient implementation.
   virtual void OnGestureEvent(const ui::GestureEventData& gesture) OVERRIDE;
 
-  void InitCursorFromResource(WebCursor* cursor, int resource_id);
+  void InitCursorFromResource(WebCursor* cursor, float scale, int resource_id);
   void ResetState();
   void UpdateCursor();
   bool UpdateShiftPressed(bool shift_pressed);
diff --git a/content/browser/renderer_host/input/web_input_event_util.cc b/content/browser/renderer_host/input/web_input_event_util.cc
index 8a7fd92..8bce2c6 100644
--- a/content/browser/renderer_host/input/web_input_event_util.cc
+++ b/content/browser/renderer_host/input/web_input_event_util.cc
@@ -287,8 +287,6 @@
       gesture.type = WebInputEvent::GestureScrollUpdate;
       gesture.data.scrollUpdate.deltaX = data.details.scroll_x();
       gesture.data.scrollUpdate.deltaY = data.details.scroll_y();
-      gesture.data.scrollUpdate.velocityX = data.details.velocity_x();
-      gesture.data.scrollUpdate.velocityY = data.details.velocity_y();
       break;
     case ui::ET_GESTURE_SCROLL_END:
       gesture.type = WebInputEvent::GestureScrollEnd;
diff --git a/content/browser/renderer_host/java/java_bound_object.h b/content/browser/renderer_host/java/java_bound_object.h
index 9b357ba..68c2821 100644
--- a/content/browser/renderer_host/java/java_bound_object.h
+++ b/content/browser/renderer_host/java/java_bound_object.h
@@ -9,7 +9,7 @@
 #include <map>
 #include <string>
 
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/android/scoped_java_ref.h"
 #include "base/memory/linked_ptr.h"
 #include "base/memory/weak_ptr.h"
diff --git a/content/browser/renderer_host/java/java_bridge_dispatcher_host_manager.cc b/content/browser/renderer_host/java/java_bridge_dispatcher_host_manager.cc
index 25f31de..8d587bd 100644
--- a/content/browser/renderer_host/java/java_bridge_dispatcher_host_manager.cc
+++ b/content/browser/renderer_host/java/java_bridge_dispatcher_host_manager.cc
@@ -5,7 +5,7 @@
 #include "content/browser/renderer_host/java/java_bridge_dispatcher_host_manager.h"
 
 #include "base/android/jni_android.h"
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/android/scoped_java_ref.h"
 #include "base/bind.h"
 #include "base/logging.h"
diff --git a/content/browser/renderer_host/java/java_bridge_dispatcher_host_manager.h b/content/browser/renderer_host/java/java_bridge_dispatcher_host_manager.h
index 92bfe7b..3ada0d0 100644
--- a/content/browser/renderer_host/java/java_bridge_dispatcher_host_manager.h
+++ b/content/browser/renderer_host/java/java_bridge_dispatcher_host_manager.h
@@ -7,7 +7,7 @@
 
 #include <map>
 
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/android/scoped_java_ref.h"
 #include "base/compiler_specific.h"
 #include "base/memory/ref_counted.h"
diff --git a/content/browser/renderer_host/media/media_stream_manager.cc b/content/browser/renderer_host/media/media_stream_manager.cc
index af543fc..56bc43a 100644
--- a/content/browser/renderer_host/media/media_stream_manager.cc
+++ b/content/browser/renderer_host/media/media_stream_manager.cc
@@ -1825,8 +1825,6 @@
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
   MediaObserver* media_observer =
       GetContentClient()->browser()->GetMediaObserver();
-  if (media_observer == NULL)
-    return;
 
   // Map the devices to MediaStreamDevices.
   MediaStreamDevices new_devices;
@@ -1838,11 +1836,13 @@
   if (IsAudioMediaType(stream_type)) {
     MediaCaptureDevicesImpl::GetInstance()->OnAudioCaptureDevicesChanged(
         new_devices);
-    media_observer->OnAudioCaptureDevicesChanged();
+    if (media_observer)
+      media_observer->OnAudioCaptureDevicesChanged();
   } else if (IsVideoMediaType(stream_type)) {
     MediaCaptureDevicesImpl::GetInstance()->OnVideoCaptureDevicesChanged(
         new_devices);
-    media_observer->OnVideoCaptureDevicesChanged();
+    if (media_observer)
+      media_observer->OnVideoCaptureDevicesChanged();
   } else {
     NOTREACHED();
   }
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc
index e313d27..2b6ebf1 100644
--- a/content/browser/renderer_host/render_process_host_impl.cc
+++ b/content/browser/renderer_host/render_process_host_impl.cc
@@ -42,8 +42,8 @@
 #include "content/browser/browser_main_loop.h"
 #include "content/browser/browser_plugin/browser_plugin_message_filter.h"
 #include "content/browser/child_process_security_policy_impl.h"
-#include "content/browser/device_orientation/device_motion_message_filter.h"
-#include "content/browser/device_orientation/device_orientation_message_filter.h"
+#include "content/browser/device_sensors/device_motion_message_filter.h"
+#include "content/browser/device_sensors/device_orientation_message_filter.h"
 #include "content/browser/dom_storage/dom_storage_context_wrapper.h"
 #include "content/browser/dom_storage/dom_storage_message_filter.h"
 #include "content/browser/download/mhtml_generation_manager.h"
@@ -324,11 +324,6 @@
 
 RendererMainThreadFactoryFunction g_renderer_main_thread_factory = NULL;
 
-void RenderProcessHost::RegisterRendererMainThreadFactory(
-    RendererMainThreadFactoryFunction create) {
-  g_renderer_main_thread_factory = create;
-}
-
 base::MessageLoop* g_in_process_thread;
 
 base::MessageLoop*
@@ -467,6 +462,11 @@
   }
 }
 
+void RenderProcessHostImpl::RegisterRendererMainThreadFactory(
+    RendererMainThreadFactoryFunction create) {
+  g_renderer_main_thread_factory = create;
+}
+
 RenderProcessHostImpl::~RenderProcessHostImpl() {
 #ifndef NDEBUG
   DCHECK(is_self_deleted_)
@@ -941,9 +941,6 @@
   if (IsThreadedCompositingEnabled())
     command_line->AppendSwitch(switches::kEnableThreadedCompositing);
 
-  if (IsForceCompositingModeEnabled())
-    command_line->AppendSwitch(switches::kForceCompositingMode);
-
   if (IsDelegatedRendererEnabled())
     command_line->AppendSwitch(switches::kEnableDelegatedRenderer);
 
@@ -1011,7 +1008,6 @@
     switches::kDefaultTileWidth,
     switches::kDefaultTileHeight,
     switches::kDisable3DAPIs,
-    switches::kDisableAcceleratedCompositing,
     switches::kDisableAcceleratedFixedRootBackground,
     switches::kDisableAcceleratedVideoDecode,
     switches::kDisableApplicationCache,
@@ -1024,7 +1020,6 @@
     switches::kDisableFastTextAutosizing,
     switches::kDisableFileSystem,
     switches::kDisableFiltersOverIPC,
-    switches::kDisableGpu,
     switches::kDisableGpuCompositing,
     switches::kDisableGpuVsync,
     switches::kDisableLowResTiling,
@@ -1082,7 +1077,6 @@
     switches::kEnableSeccompFilterSandbox,
     switches::kEnableServiceWorker,
     switches::kEnableSkiaBenchmarking,
-    switches::kEnableSoftwareCompositing,
     switches::kEnableSpeechSynthesis,
     switches::kEnableStatsTable,
     switches::kEnableStrictSiteIsolation,
@@ -1097,6 +1091,7 @@
     switches::kEnableWebAnimationsSVG,
     switches::kEnableWebGLDraftExtensions,
     switches::kEnableWebMIDI,
+    switches::kForceCompositingMode,
     switches::kForceDeviceScaleFactor,
     switches::kFullMemoryCrashReport,
     switches::kJavaScriptFlags,
diff --git a/content/browser/renderer_host/render_process_host_impl.h b/content/browser/renderer_host/render_process_host_impl.h
index cb59320..284332f 100644
--- a/content/browser/renderer_host/render_process_host_impl.h
+++ b/content/browser/renderer_host/render_process_host_impl.h
@@ -52,6 +52,9 @@
 class StoragePartition;
 class StoragePartitionImpl;
 
+typedef base::Thread* (*RendererMainThreadFactoryFunction)(
+    const std::string& id);
+
 // Implements a concrete RenderProcessHost for the browser process for talking
 // to actual renderer processes (as opposed to mocks).
 //
@@ -214,6 +217,9 @@
   // This forces a renderer that is running "in process" to shut down.
   static void ShutDownInProcessRenderer();
 
+  static void RegisterRendererMainThreadFactory(
+      RendererMainThreadFactoryFunction create);
+
 #if defined(OS_ANDROID)
   const scoped_refptr<BrowserDemuxerAndroid>& browser_demuxer_android() {
     return browser_demuxer_android_;
diff --git a/content/browser/renderer_host/render_process_host_mojo_impl.cc b/content/browser/renderer_host/render_process_host_mojo_impl.cc
index 16348a6..1adb4a1 100644
--- a/content/browser/renderer_host/render_process_host_mojo_impl.cc
+++ b/content/browser/renderer_host/render_process_host_mojo_impl.cc
@@ -5,10 +5,10 @@
 #include "content/browser/renderer_host/render_process_host_mojo_impl.h"
 
 #include "base/platform_file.h"
-#include "content/common/mojo/mojo_channel_init.h"
 #include "content/common/mojo/mojo_messages.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/render_process_host.h"
+#include "mojo/common/mojo_channel_init.h"
 #include "mojo/embedder/platform_channel_pair.h"
 
 namespace content {
@@ -73,7 +73,7 @@
     return;
 
   mojo::embedder::PlatformChannelPair channel_pair;
-  mojo_channel_init_.reset(new MojoChannelInit);
+  mojo_channel_init_.reset(new mojo::common::MojoChannelInit);
   mojo_channel_init_->Init(
       PlatformFileFromScopedPlatformHandle(channel_pair.PassServerHandle()),
       BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO));
diff --git a/content/browser/renderer_host/render_process_host_mojo_impl.h b/content/browser/renderer_host/render_process_host_mojo_impl.h
index e9ce29a..f55268d 100644
--- a/content/browser/renderer_host/render_process_host_mojo_impl.h
+++ b/content/browser/renderer_host/render_process_host_mojo_impl.h
@@ -10,9 +10,14 @@
 #include "content/common/mojo/render_process.mojom.h"
 #include "mojo/public/cpp/bindings/remote_ptr.h"
 
+namespace mojo {
+namespace common {
+class MojoChannelInit;
+}
+}
+
 namespace content {
 
-class MojoChannelInit;
 class RenderProcessHost;
 
 // RenderProcessHostMojoImpl is responsible for initiating and maintaining the
@@ -37,7 +42,7 @@
   RenderProcessHost* host_;
 
   // Used to establish the connection.
-  scoped_ptr<MojoChannelInit> mojo_channel_init_;
+  scoped_ptr<mojo::common::MojoChannelInit> mojo_channel_init_;
 
   mojo::RemotePtr<content::RenderProcessMojo> render_process_mojo_;
 
diff --git a/content/browser/renderer_host/render_sandbox_host_linux.cc b/content/browser/renderer_host/render_sandbox_host_linux.cc
index 2aea9ed..b0ef6f0 100644
--- a/content/browser/renderer_host/render_sandbox_host_linux.cc
+++ b/content/browser/renderer_host/render_sandbox_host_linux.cc
@@ -724,17 +724,10 @@
   // We use SOCK_SEQPACKET rather than SOCK_DGRAM to prevent the renderer from
   // sending datagrams to other sockets on the system. The sandbox may prevent
   // the renderer from calling socket() to create new sockets, but it'll still
-  // inherit some sockets. With PF_UNIX+SOCK_DGRAM, it can call sendmsg to send
+  // inherit some sockets. With AF_UNIX+SOCK_DGRAM, it can call sendmsg to send
   // a datagram to any (abstract) socket on the same system. With
   // SOCK_SEQPACKET, this is prevented.
-#if defined(OS_FREEBSD) || defined(OS_OPENBSD)
-  // The BSDs often don't support SOCK_SEQPACKET yet, so fall back to
-  // SOCK_DGRAM if necessary.
-  if (socketpair(AF_UNIX, SOCK_SEQPACKET, 0, fds) != 0)
-    CHECK(socketpair(AF_UNIX, SOCK_DGRAM, 0, fds) == 0);
-#else
   CHECK(socketpair(AF_UNIX, SOCK_SEQPACKET, 0, fds) == 0);
-#endif
 
   renderer_socket_ = fds[0];
   const int browser_socket = fds[1];
diff --git a/content/browser/renderer_host/render_view_host_delegate.cc b/content/browser/renderer_host/render_view_host_delegate.cc
index 6d19fa9..84bbba8 100644
--- a/content/browser/renderer_host/render_view_host_delegate.cc
+++ b/content/browser/renderer_host/render_view_host_delegate.cc
@@ -39,4 +39,8 @@
   return NULL;
 }
 
+bool RenderViewHostDelegate::IsNeverVisible() {
+  return false;
+}
+
 }  // namespace content
diff --git a/content/browser/renderer_host/render_view_host_delegate.h b/content/browser/renderer_host/render_view_host_delegate.h
index 6bf3651..93db55f 100644
--- a/content/browser/renderer_host/render_view_host_delegate.h
+++ b/content/browser/renderer_host/render_view_host_delegate.h
@@ -308,6 +308,9 @@
   virtual SessionStorageNamespace* GetSessionStorageNamespace(
       SiteInstance* instance);
 
+  // Returns true if the RenderViewHost will never be visible.
+  virtual bool IsNeverVisible();
+
   // Returns the FrameTree the render view should use. Guaranteed to be constant
   // for the lifetime of the render view.
   //
diff --git a/content/browser/renderer_host/render_view_host_impl.cc b/content/browser/renderer_host/render_view_host_impl.cc
index 55b863e..ac03ecc 100644
--- a/content/browser/renderer_host/render_view_host_impl.cc
+++ b/content/browser/renderer_host/render_view_host_impl.cc
@@ -42,7 +42,6 @@
 #include "content/common/accessibility_messages.h"
 #include "content/common/browser_plugin/browser_plugin_messages.h"
 #include "content/common/content_switches_internal.h"
-#include "content/common/desktop_notification_messages.h"
 #include "content/common/drag_messages.h"
 #include "content/common/frame_messages.h"
 #include "content/common/input_messages.h"
@@ -63,6 +62,7 @@
 #include "content/public/browser/notification_types.h"
 #include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/render_widget_host_iterator.h"
+#include "content/public/browser/storage_partition.h"
 #include "content/public/browser/user_metrics.h"
 #include "content/public/common/bindings_policy.h"
 #include "content/public/common/content_constants.h"
@@ -275,7 +275,8 @@
 bool RenderViewHostImpl::CreateRenderView(
     const base::string16& frame_name,
     int opener_route_id,
-    int32 max_page_id) {
+    int32 max_page_id,
+    bool window_was_created_with_opener) {
   TRACE_EVENT0("renderer_host", "RenderViewHostImpl::CreateRenderView");
   DCHECK(!IsRenderViewLive()) << "Creating view twice";
 
@@ -313,6 +314,8 @@
   params.opener_route_id = opener_route_id;
   params.swapped_out = !IsRVHStateActive(rvh_state_);
   params.hidden = is_hidden();
+  params.never_visible = delegate_->IsNeverVisible();
+  params.window_was_created_with_opener = window_was_created_with_opener;
   params.next_page_id = next_page_id;
   GetWebScreenInfo(&params.screen_info);
   params.accessibility_mode = accessibility_mode();
@@ -401,7 +404,7 @@
   prefs.allow_file_access_from_file_urls =
       command_line.HasSwitch(switches::kAllowFileAccessFromFiles);
 
-  prefs.layer_squashing_enabled = false;
+  prefs.layer_squashing_enabled = true;
   if (command_line.HasSwitch(switches::kEnableLayerSquashing))
       prefs.layer_squashing_enabled = true;
   if (command_line.HasSwitch(switches::kDisableLayerSquashing))
@@ -409,10 +412,7 @@
 
   prefs.show_paint_rects =
       command_line.HasSwitch(switches::kShowPaintRects);
-  prefs.accelerated_compositing_enabled =
-      GpuProcessHost::gpu_enabled() &&
-      !command_line.HasSwitch(switches::kDisableAcceleratedCompositing);
-  prefs.force_compositing_mode = content::IsForceCompositingModeEnabled();
+  prefs.accelerated_compositing_enabled = GpuProcessHost::gpu_enabled();
   prefs.accelerated_2d_canvas_enabled =
       GpuProcessHost::gpu_enabled() &&
       !command_line.HasSwitch(switches::kDisableAccelerated2dCanvas);
@@ -473,9 +473,6 @@
   if (command_line.HasSwitch(switches::kDisableSmoothScrolling))
     prefs.enable_scroll_animator = false;
 
-  prefs.visual_word_movement_enabled =
-      command_line.HasSwitch(switches::kEnableVisualWordMovement);
-
   // Certain GPU features might have been blacklisted.
   GpuDataManagerImpl::GetInstance()->UpdateRendererWebPrefs(&prefs);
 
@@ -713,10 +710,6 @@
 void RenderViewHostImpl::RequestFindMatchRects(int current_version) {
   Send(new ViewMsg_FindMatchRects(GetRoutingID(), current_version));
 }
-
-void RenderViewHostImpl::DisableFullscreenEncryptedMediaPlayback() {
-  media_player_manager_->DisableFullscreenEncryptedMediaPlayback();
-}
 #endif
 
 void RenderViewHostImpl::DragTargetDragEnter(
@@ -783,6 +776,28 @@
   }
   filtered_data.filesystem_id = base::UTF8ToUTF16(filesystem_id);
 
+  fileapi::FileSystemContext* file_system_context =
+      BrowserContext::GetStoragePartition(
+          GetProcess()->GetBrowserContext(),
+          GetSiteInstance())->GetFileSystemContext();
+  for (size_t i = 0; i < filtered_data.file_system_files.size(); ++i) {
+    fileapi::FileSystemURL file_system_url =
+        file_system_context->CrackURL(filtered_data.file_system_files[i].url);
+
+    std::string register_name;
+    std::string filesystem_id = isolated_context->RegisterFileSystemForPath(
+        file_system_url.type(), file_system_url.path(), &register_name);
+    policy->GrantReadFileSystem(renderer_id, filesystem_id);
+
+    // Note: We are using the origin URL provided by the sender here. It may be
+    // different from the receiver's.
+    filtered_data.file_system_files[i].url = GURL(
+        fileapi::GetIsolatedFileSystemRootURIString(
+            file_system_url.origin(),
+            filesystem_id,
+            std::string()).append(register_name));
+  }
+
   Send(new DragMsg_TargetDragEnter(GetRoutingID(), filtered_data, client_pt,
                                    screen_pt, operations_allowed,
                                    key_modifiers));
@@ -809,34 +824,6 @@
                               key_modifiers));
 }
 
-void RenderViewHostImpl::DesktopNotificationPermissionRequestDone(
-    int callback_context) {
-  Send(new DesktopNotificationMsg_PermissionRequestDone(
-      GetRoutingID(), callback_context));
-}
-
-void RenderViewHostImpl::DesktopNotificationPostDisplay(int callback_context) {
-  Send(new DesktopNotificationMsg_PostDisplay(GetRoutingID(),
-                                              callback_context));
-}
-
-void RenderViewHostImpl::DesktopNotificationPostError(
-    int notification_id,
-    const base::string16& message) {
-  Send(new DesktopNotificationMsg_PostError(
-      GetRoutingID(), notification_id, message));
-}
-
-void RenderViewHostImpl::DesktopNotificationPostClose(int notification_id,
-                                                      bool by_user) {
-  Send(new DesktopNotificationMsg_PostClose(
-      GetRoutingID(), notification_id, by_user));
-}
-
-void RenderViewHostImpl::DesktopNotificationPostClick(int notification_id) {
-  Send(new DesktopNotificationMsg_PostClick(GetRoutingID(), notification_id));
-}
-
 void RenderViewHostImpl::DragSourceEndedAt(
     int client_x, int client_y, int screen_x, int screen_y,
     WebDragOperation operation) {
@@ -1050,12 +1037,6 @@
                         OnSelectionRootBoundsChanged)
 #endif
     IPC_MESSAGE_HANDLER(ViewHostMsg_DidZoomURL, OnDidZoomURL)
-    IPC_MESSAGE_HANDLER(DesktopNotificationHostMsg_RequestPermission,
-                        OnRequestDesktopNotificationPermission)
-    IPC_MESSAGE_HANDLER(DesktopNotificationHostMsg_Show,
-                        OnShowDesktopNotification)
-    IPC_MESSAGE_HANDLER(DesktopNotificationHostMsg_Cancel,
-                        OnCancelDesktopNotification)
 #if defined(OS_MACOSX) || defined(OS_ANDROID)
     IPC_MESSAGE_HANDLER(ViewHostMsg_ShowPopup, OnShowPopup)
     IPC_MESSAGE_HANDLER(ViewHostMsg_HidePopup, OnHidePopup)
@@ -1366,6 +1347,19 @@
     if (policy->CanReadFile(GetProcess()->GetID(), it->path))
       filtered_data.filenames.push_back(*it);
   }
+
+  fileapi::FileSystemContext* file_system_context =
+      BrowserContext::GetStoragePartition(
+          GetProcess()->GetBrowserContext(),
+          GetSiteInstance())->GetFileSystemContext();
+  filtered_data.file_system_files.clear();
+  for (size_t i = 0; i < drop_data.file_system_files.size(); ++i) {
+    fileapi::FileSystemURL file_system_url =
+        file_system_context->CrackURL(drop_data.file_system_files[i].url);
+    if (policy->CanReadFileSystemFile(GetProcess()->GetID(), file_system_url))
+      filtered_data.file_system_files.push_back(drop_data.file_system_files[i]);
+  }
+
   float scale = ui::GetImageScale(GetScaleFactorForView(GetView()));
   gfx::ImageSkia image(gfx::ImageSkiaRep(bitmap, scale));
   view->StartDragging(filtered_data, drag_operations_mask, image,
@@ -1684,23 +1678,6 @@
   }
 }
 
-void RenderViewHostImpl::OnRequestDesktopNotificationPermission(
-    const GURL& source_origin, int callback_context) {
-  GetContentClient()->browser()->RequestDesktopNotificationPermission(
-      source_origin, callback_context, GetProcess()->GetID(), GetRoutingID());
-}
-
-void RenderViewHostImpl::OnShowDesktopNotification(
-    const ShowDesktopNotificationHostMsgParams& params) {
-  GetContentClient()->browser()->ShowDesktopNotification(
-      params, GetProcess()->GetID(), GetRoutingID(), false);
-}
-
-void RenderViewHostImpl::OnCancelDesktopNotification(int notification_id) {
-  GetContentClient()->browser()->CancelDesktopNotification(
-      GetProcess()->GetID(), GetRoutingID(), notification_id);
-}
-
 void RenderViewHostImpl::OnRunFileChooser(const FileChooserParams& params) {
   delegate_->RunFileChooser(this, params);
 }
diff --git a/content/browser/renderer_host/render_view_host_impl.h b/content/browser/renderer_host/render_view_host_impl.h
index 5579cd7..f04cde5 100644
--- a/content/browser/renderer_host/render_view_host_impl.h
+++ b/content/browser/renderer_host/render_view_host_impl.h
@@ -63,7 +63,6 @@
 class TestRenderViewHost;
 class TimeoutMonitor;
 struct FileChooserParams;
-struct ShowDesktopNotificationHostMsgParams;
 
 #if defined(COMPILER_MSVC)
 // RenderViewHostImpl is the bottom of a diamond-shaped hierarchy,
@@ -158,15 +157,6 @@
   virtual void ClearFocusedElement() OVERRIDE;
   virtual void ClosePage() OVERRIDE;
   virtual void CopyImageAt(int x, int y) OVERRIDE;
-  virtual void DesktopNotificationPermissionRequestDone(
-      int callback_context) OVERRIDE;
-  virtual void DesktopNotificationPostDisplay(int callback_context) OVERRIDE;
-  virtual void DesktopNotificationPostError(
-      int notification_id,
-      const base::string16& message) OVERRIDE;
-  virtual void DesktopNotificationPostClose(int notification_id,
-                                            bool by_user) OVERRIDE;
-  virtual void DesktopNotificationPostClick(int notification_id) OVERRIDE;
   virtual void DirectoryEnumerationFinished(
       int request_id,
       const std::vector<base::FilePath>& files) OVERRIDE;
@@ -226,7 +216,6 @@
                                          float x,
                                          float y) OVERRIDE;
   virtual void RequestFindMatchRects(int current_version) OVERRIDE;
-  virtual void DisableFullscreenEncryptedMediaPlayback() OVERRIDE;
 #endif
 
   void set_delegate(RenderViewHostDelegate* d) {
@@ -240,9 +229,12 @@
   // The |opener_route_id| parameter indicates which RenderView created this
   // (MSG_ROUTING_NONE if none). If |max_page_id| is larger than -1, the
   // RenderView is told to start issuing page IDs at |max_page_id| + 1.
+  // |window_was_created_with_opener| is true if this top-level frame was
+  // created with an opener. (The opener may have been closed since.)
   virtual bool CreateRenderView(const base::string16& frame_name,
                                 int opener_route_id,
-                                int32 max_page_id);
+                                int32 max_page_id,
+                                bool window_was_created_with_opener);
 
   base::TerminationStatus render_view_termination_status() const {
     return render_view_termination_status_;
@@ -541,11 +533,6 @@
   void OnAccessibilityLocationChanges(
       const std::vector<AccessibilityHostMsg_LocationChangeParams>& params);
   void OnDidZoomURL(double zoom_level, bool remember, const GURL& url);
-  void OnRequestDesktopNotificationPermission(const GURL& origin,
-                                              int callback_id);
-  void OnShowDesktopNotification(
-      const ShowDesktopNotificationHostMsgParams& params);
-  void OnCancelDesktopNotification(int notification_id);
   void OnRunFileChooser(const FileChooserParams& params);
   void OnDidAccessInitialDocument();
   void OnFocusedNodeTouched(bool editable);
diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc
index fc2b0ae..72d4654 100644
--- a/content/browser/renderer_host/render_widget_host_impl.cc
+++ b/content/browser/renderer_host/render_widget_host_impl.cc
@@ -30,8 +30,6 @@
 #include "content/browser/gpu/gpu_process_host.h"
 #include "content/browser/gpu/gpu_process_host_ui_shim.h"
 #include "content/browser/gpu/gpu_surface_tracker.h"
-#include "content/browser/renderer_host/backing_store.h"
-#include "content/browser/renderer_host/backing_store_manager.h"
 #include "content/browser/renderer_host/dip_util.h"
 #include "content/browser/renderer_host/input/input_router_impl.h"
 #include "content/browser/renderer_host/input/synthetic_gesture.h"
@@ -48,6 +46,7 @@
 #include "content/common/content_constants_internal.h"
 #include "content/common/cursors/webcursor.h"
 #include "content/common/gpu/gpu_messages.h"
+#include "content/common/host_shared_bitmap_manager.h"
 #include "content/common/input_messages.h"
 #include "content/common/view_messages.h"
 #include "content/port/browser/render_widget_host_view_port.h"
@@ -70,9 +69,7 @@
 #include "ui/snapshot/snapshot.h"
 #include "webkit/common/webpreferences.h"
 
-#if defined(OS_MACOSX)
-#include "content/browser/renderer_host/backing_store_mac.h"
-#elif defined(OS_WIN)
+#if defined(OS_WIN)
 #include "content/common/plugin_constants_win.h"
 #endif
 
@@ -156,12 +153,6 @@
 
 }  // namespace
 
-
-// static
-size_t RenderWidgetHost::BackingStoreMemorySize() {
-  return BackingStoreManager::MemorySize();
-}
-
 ///////////////////////////////////////////////////////////////////////////////
 // RenderWidgetHostImpl
 
@@ -259,9 +250,6 @@
 RenderWidgetHostImpl::~RenderWidgetHostImpl() {
   SetView(NULL);
 
-  // Clear our current or cached backing store if either remains.
-  BackingStoreManager::RemoveBackingStore(this);
-
   GpuSurfaceTracker::Get()->RemoveSurface(surface_id_);
   surface_id_ = 0;
 
@@ -566,19 +554,9 @@
 
   SendScreenRects();
 
-  BackingStore* backing_store = BackingStoreManager::Lookup(this);
-  // If we already have a backing store for this widget, then we don't need to
-  // repaint on restore _unless_ we know that our backing store is invalid.
-  // When accelerated compositing is on, we must always repaint, even when
-  // the backing store exists.
-  bool needs_repainting;
-  if (needs_repainting_on_restore_ || !backing_store ||
-      is_accelerated_compositing_active()) {
-    needs_repainting = true;
-    needs_repainting_on_restore_ = false;
-  } else {
-    needs_repainting = false;
-  }
+  // Always repaint on restore.
+  bool needs_repainting = true;
+  needs_repainting_on_restore_ = false;
   Send(new ViewMsg_WasShown(routing_id_, needs_repainting));
 
   process_->WidgetRestored();
@@ -733,21 +711,7 @@
     return;
   }
 
-  BackingStore* backing_store = GetBackingStore(false);
-  if (!backing_store) {
-    callback.Run(false, SkBitmap());
-    return;
-  }
-
-  TRACE_EVENT0("browser",
-      "RenderWidgetHostImpl::CopyFromBackingStore::FromBackingStore");
-  gfx::Rect copy_rect = src_subrect.IsEmpty() ?
-      gfx::Rect(backing_store->size()) : src_subrect;
-  // When the result size is equal to the backing store size, copy from the
-  // backing store directly to the output canvas.
-  skia::PlatformBitmap output;
-  bool result = backing_store->CopyFromBackingStore(copy_rect, &output);
-  callback.Run(result, output.GetBitmap());
+  callback.Run(false, SkBitmap());
 }
 
 bool RenderWidgetHostImpl::CanCopyFromBackingStore() {
@@ -768,23 +732,6 @@
 }
 #endif
 
-#if defined(OS_MACOSX)
-gfx::Size RenderWidgetHostImpl::GetBackingStoreSize() {
-  BackingStore* backing_store = GetBackingStore(false);
-  return backing_store ? backing_store->size() : gfx::Size();
-}
-
-bool RenderWidgetHostImpl::CopyFromBackingStoreToCGContext(
-    const CGRect& dest_rect, CGContextRef target) {
-  BackingStore* backing_store = GetBackingStore(false);
-  if (!backing_store)
-    return false;
-  (static_cast<BackingStoreMac*>(backing_store))->
-      CopyFromBackingStoreToCGContext(dest_rect, target);
-  return true;
-}
-#endif
-
 void RenderWidgetHostImpl::PauseForPendingResizeOrRepaints() {
   TRACE_EVENT0("browser",
       "RenderWidgetHostImpl::PauseForPendingResizeOrRepaints");
@@ -792,8 +739,7 @@
   if (!CanPauseForPendingResizeOrRepaints())
     return;
 
-  // Waiting for a backing store will do the wait for us.
-  ignore_result(GetBackingStore(true));
+  WaitForSurface();
 }
 
 bool RenderWidgetHostImpl::CanPauseForPendingResizeOrRepaints() {
@@ -808,25 +754,11 @@
   return true;
 }
 
-bool RenderWidgetHostImpl::TryGetBackingStore(const gfx::Size& desired_size,
-                                              BackingStore** backing_store) {
-  // Check if the view has an accelerated surface of the desired size.
-  if (view_->HasAcceleratedSurface(desired_size)) {
-    *backing_store = NULL;
-    return true;
-  }
-
-  // Check for a software backing store of the desired size.
-  *backing_store = BackingStoreManager::GetBackingStore(this, desired_size);
-  return !!*backing_store;
-}
-
-BackingStore* RenderWidgetHostImpl::GetBackingStore(bool force_create) {
-  TRACE_EVENT1("browser", "RenderWidgetHostImpl::GetBackingStore",
-               "force_create", force_create);
+void RenderWidgetHostImpl::WaitForSurface() {
+  TRACE_EVENT0("browser", "RenderWidgetHostImpl::WaitForSurface");
 
   if (!view_)
-    return NULL;
+    return;
 
   // The view_size will be current_size_ for auto-sized views and otherwise the
   // size of the view_. (For auto-sized views, current_size_ is updated during
@@ -836,31 +768,32 @@
     // Get the desired size from the current view bounds.
     gfx::Rect view_rect = view_->GetViewBounds();
     if (view_rect.IsEmpty())
-      return NULL;
+      return;
     view_size = view_rect.size();
   }
 
-  TRACE_EVENT2("renderer_host", "RenderWidgetHostImpl::GetBackingStore",
-               "width", base::IntToString(view_size.width()),
-               "height", base::IntToString(view_size.height()));
+  TRACE_EVENT2("renderer_host",
+               "RenderWidgetHostImpl::WaitForBackingStore",
+               "width",
+               base::IntToString(view_size.width()),
+               "height",
+               base::IntToString(view_size.height()));
 
   // We should not be asked to paint while we are hidden.  If we are hidden,
   // then it means that our consumer failed to call WasShown. If we're not
   // force creating the backing store, it's OK since we can feel free to give
   // out our cached one if we have it.
-  DCHECK(!is_hidden_ || !force_create) <<
-      "GetBackingStore called while hidden!";
+  DCHECK(!is_hidden_) << "WaitForSurface called while hidden!";
 
   // We should never be called recursively; this can theoretically lead to
   // infinite recursion and almost certainly leads to lower performance.
-  DCHECK(!in_get_backing_store_) << "GetBackingStore called recursively!";
+  DCHECK(!in_get_backing_store_) << "WaitForSurface called recursively!";
   base::AutoReset<bool> auto_reset_in_get_backing_store(
       &in_get_backing_store_, true);
 
-  // We might have a cached backing store that we can reuse!
-  BackingStore* backing_store = NULL;
-  if (TryGetBackingStore(view_size, &backing_store) || !force_create)
-    return backing_store;
+  // We might have a surface that we can use!
+  if (view_->HasAcceleratedSurface(view_size))
+    return;
 
   // We do not have a suitable backing store in the cache, so send out a
   // request to the renderer to paint the view if required.
@@ -875,7 +808,7 @@
   TimeDelta max_delay = TimeDelta::FromMilliseconds(kPaintMsgTimeoutMS);
   TimeTicks end_time = TimeTicks::Now() + max_delay;
   do {
-    TRACE_EVENT0("renderer_host", "GetBackingStore::WaitForUpdate");
+    TRACE_EVENT0("renderer_host", "WaitForSurface::WaitForUpdate");
 
     // When we have asked the RenderWidget to resize, and we are still waiting
     // on a response, block for a little while to see if we can't get a response
@@ -891,13 +824,12 @@
 
       // Break now if we got a backing store or accelerated surface of the
       // correct size.
-      if (TryGetBackingStore(view_size, &backing_store) ||
-          abort_get_backing_store_) {
+      if (view_->HasAcceleratedSurface(view_size) || abort_get_backing_store_) {
         abort_get_backing_store_ = false;
-        return backing_store;
+        return;
       }
     } else {
-      TRACE_EVENT0("renderer_host", "GetBackingStore::Timeout");
+      TRACE_EVENT0("renderer_host", "WaitForSurface::Timeout");
       break;
     }
 
@@ -907,22 +839,6 @@
     // BackingStore messages to get to the latest.
     max_delay = end_time - TimeTicks::Now();
   } while (max_delay > TimeDelta::FromSeconds(0));
-
-  // We have failed to get a backing store of view_size. Fall back on
-  // current_size_ to avoid a white flash while resizing slow pages.
-  if (view_size != current_size_)
-    TryGetBackingStore(current_size_, &backing_store);
-  return backing_store;
-}
-
-BackingStore* RenderWidgetHostImpl::AllocBackingStore(const gfx::Size& size) {
-  if (!view_)
-    return NULL;
-  return view_->AllocBackingStore(size);
-}
-
-void RenderWidgetHostImpl::DonePaintingToBackingStore() {
-  Send(new ViewMsg_UpdateRect_ACK(GetRoutingID()));
 }
 
 bool RenderWidgetHostImpl::ScheduleComposite() {
@@ -1362,8 +1278,6 @@
     view_ = NULL;  // The View should be deleted by RenderProcessGone.
   }
 
-  BackingStoreManager::RemoveBackingStore(this);
-
   synthetic_gesture_controller_.reset();
 }
 
@@ -1680,47 +1594,7 @@
 
   DCHECK(!params.view_size.IsEmpty());
 
-  bool was_async = false;
-
-  // If this is a GPU UpdateRect, params.bitmap is invalid and dib will be NULL.
-  TransportDIB* dib = process_->GetTransportDIB(params.bitmap);
-
-  // If gpu process does painting, scroll_rect and copy_rects are always empty
-  // and backing store is never used.
-  if (dib) {
-    DCHECK(!params.bitmap_rect.IsEmpty());
-    gfx::Size pixel_size = gfx::ToFlooredSize(
-        gfx::ScaleSize(params.bitmap_rect.size(), params.scale_factor));
-    const size_t size = pixel_size.height() * pixel_size.width() * 4;
-    if (dib->size() < size) {
-      DLOG(WARNING) << "Transport DIB too small for given rectangle";
-      RecordAction(base::UserMetricsAction("BadMessageTerminate_RWH1"));
-      GetProcess()->ReceivedBadMessage();
-    } else {
-      // Scroll the backing store.
-      if (!params.scroll_rect.IsEmpty()) {
-        ScrollBackingStoreRect(params.scroll_delta,
-                               params.scroll_rect,
-                               params.view_size);
-      }
-
-      // Paint the backing store. This will update it with the
-      // renderer-supplied bits. The view will read out of the backing store
-      // later to actually draw to the screen.
-      was_async = PaintBackingStoreRect(
-          params.bitmap,
-          params.bitmap_rect,
-          params.copy_rects,
-          params.view_size,
-          params.scale_factor,
-          base::Bind(&RenderWidgetHostImpl::DidUpdateBackingStore,
-                     weak_factory_.GetWeakPtr(), params, paint_start));
-    }
-  }
-
-  if (!was_async) {
-    DidUpdateBackingStore(params, paint_start);
-  }
+  DidUpdateBackingStore(params, paint_start);
 
   if (should_auto_resize_) {
     bool post_callback = new_auto_size_.IsEmpty();
@@ -1751,14 +1625,6 @@
   TRACE_EVENT0("renderer_host", "RenderWidgetHostImpl::DidUpdateBackingStore");
   TimeTicks update_start = TimeTicks::Now();
 
-  if (params.needs_ack) {
-    // ACK early so we can prefetch the next PaintRect if there is a next one.
-    // This must be done AFTER we're done painting with the bitmap supplied by
-    // the renderer. This ACK is a signal to the renderer that the backing store
-    // can be re-used, so the bitmap may be invalid after this call.
-    Send(new ViewMsg_UpdateRect_ACK(routing_id_));
-  }
-
   // Move the plugins if the view hasn't already been destroyed.  Plugin moves
   // will not be re-issued, so must move them now, regardless of whether we
   // paint or not.  MovePluginWindows attempts to move the plugin windows and
@@ -1920,25 +1786,24 @@
 void RenderWidgetHostImpl::OnShowDisambiguationPopup(
     const gfx::Rect& rect,
     const gfx::Size& size,
-    const TransportDIB::Id& id) {
+    const cc::SharedBitmapId& id) {
   DCHECK(!rect.IsEmpty());
   DCHECK(!size.IsEmpty());
 
-  TransportDIB* dib = process_->GetTransportDIB(id);
-  if (!dib) {
+  scoped_ptr<cc::SharedBitmap> bitmap =
+      HostSharedBitmapManager::current()->GetSharedBitmapFromId(size, id);
+  if (!bitmap) {
     RecordAction(base::UserMetricsAction("BadMessageTerminate_RWH6"));
     GetProcess()->ReceivedBadMessage();
     return;
   }
 
-  DCHECK(dib->memory());
-  DCHECK(dib->size() == SkBitmap::ComputeSize(SkBitmap::kARGB_8888_Config,
-                                              size.width(), size.height()));
+  DCHECK(bitmap->pixels());
 
   SkBitmap zoomed_bitmap;
   zoomed_bitmap.setConfig(SkBitmap::kARGB_8888_Config,
       size.width(), size.height());
-  zoomed_bitmap.setPixels(dib->memory());
+  zoomed_bitmap.setPixels(bitmap->pixels());
 
 #if defined(OS_ANDROID)
   if (view_)
@@ -1948,8 +1813,7 @@
 #endif
 
   zoomed_bitmap.setPixels(0);
-  Send(new ViewMsg_ReleaseDisambiguationPopupDIB(GetRoutingID(),
-                                                 dib->handle()));
+  Send(new ViewMsg_ReleaseDisambiguationPopupBitmap(GetRoutingID(), id));
 }
 
 #if defined(OS_WIN)
@@ -1989,64 +1853,6 @@
 }
 #endif
 
-bool RenderWidgetHostImpl::PaintBackingStoreRect(
-    TransportDIB::Id bitmap,
-    const gfx::Rect& bitmap_rect,
-    const std::vector<gfx::Rect>& copy_rects,
-    const gfx::Size& view_size,
-    float scale_factor,
-    const base::Closure& completion_callback) {
-  // The view may be destroyed already.
-  if (!view_)
-    return false;
-
-  if (is_hidden_) {
-    // Don't bother updating the backing store when we're hidden. Just mark it
-    // as being totally invalid. This will cause a complete repaint when the
-    // view is restored.
-    needs_repainting_on_restore_ = true;
-    return false;
-  }
-
-  bool needs_full_paint = false;
-  bool scheduled_completion_callback = false;
-  BackingStoreManager::PrepareBackingStore(this, view_size, bitmap, bitmap_rect,
-                                           copy_rects, scale_factor,
-                                           completion_callback,
-                                           &needs_full_paint,
-                                           &scheduled_completion_callback);
-  if (needs_full_paint) {
-    repaint_start_time_ = TimeTicks::Now();
-    DCHECK(!repaint_ack_pending_);
-    repaint_ack_pending_ = true;
-    TRACE_EVENT_ASYNC_BEGIN0(
-        "renderer_host", "RenderWidgetHostImpl::repaint_ack_pending_", this);
-    Send(new ViewMsg_Repaint(routing_id_, view_size));
-  }
-
-  return scheduled_completion_callback;
-}
-
-void RenderWidgetHostImpl::ScrollBackingStoreRect(const gfx::Vector2d& delta,
-                                                  const gfx::Rect& clip_rect,
-                                                  const gfx::Size& view_size) {
-  if (is_hidden_) {
-    // Don't bother updating the backing store when we're hidden. Just mark it
-    // as being totally invalid. This will cause a complete repaint when the
-    // view is restored.
-    needs_repainting_on_restore_ = true;
-    return;
-  }
-
-  // TODO(darin): do we need to do something else if our backing store is not
-  // the same size as the advertised view?  maybe we just assume there is a
-  // full paint on its way?
-  BackingStore* backing_store = BackingStoreManager::Lookup(this);
-  if (!backing_store || (backing_store->size() != view_size))
-    return;
-  backing_store->ScrollBackingStore(delta, clip_rect, view_size);
-}
-
 void RenderWidgetHostImpl::SetIgnoreInputEvents(bool ignore_input_events) {
   ignore_input_events_ = ignore_input_events;
 }
@@ -2152,13 +1958,10 @@
         ui::INPUT_EVENT_LATENCY_TERMINATED_MOUSE_COMPONENT, 0, 0);
   }
 
-  bool consumed = (INPUT_EVENT_ACK_STATE_CONSUMED == ack_result);
-  if (!is_hidden() && view_) {
-    // If the renderer did not consume the event, give the delegate a chance
-    // to consume it.
-    if (!consumed)
-      consumed = delegate_->HandleWheelEvent(wheel_event.event);
-    view_->HandledWheelEvent(wheel_event.event, consumed);
+  const bool processed = (INPUT_EVENT_ACK_STATE_CONSUMED == ack_result);
+  if (!processed && !is_hidden() && view_) {
+    if (!delegate_->HandleWheelEvent(wheel_event.event))
+      view_->UnhandledWheelEvent(wheel_event.event);
   }
 }
 
diff --git a/content/browser/renderer_host/render_widget_host_impl.h b/content/browser/renderer_host/render_widget_host_impl.h
index 6fb3203..1811b10 100644
--- a/content/browser/renderer_host/render_widget_host_impl.h
+++ b/content/browser/renderer_host/render_widget_host_impl.h
@@ -23,6 +23,7 @@
 #include "base/time/time.h"
 #include "base/timer/timer.h"
 #include "build/build_config.h"
+#include "cc/resources/shared_bitmap.h"
 #include "content/browser/renderer_host/input/input_ack_handler.h"
 #include "content/browser/renderer_host/input/input_router_client.h"
 #include "content/browser/renderer_host/input/synthetic_gesture.h"
@@ -77,7 +78,6 @@
 #endif
 
 namespace content {
-class BackingStore;
 class InputRouter;
 class MockRenderWidgetHost;
 class OverscrollController;
@@ -140,11 +140,6 @@
   virtual void LockBackingStore() OVERRIDE;
   virtual void UnlockBackingStore() OVERRIDE;
 #endif
-#if defined(OS_MACOSX)
-  virtual gfx::Size GetBackingStoreSize() OVERRIDE;
-  virtual bool CopyFromBackingStoreToCGContext(const CGRect& dest_rect,
-                                               CGContextRef target) OVERRIDE;
-#endif
   virtual void EnableFullAccessibilityMode() OVERRIDE;
   virtual bool IsFullAccessibilityModeForTesting() OVERRIDE;
   virtual void EnableTreeOnlyAccessibilityMode() OVERRIDE;
@@ -259,31 +254,9 @@
   // Whether pausing may be useful.
   bool CanPauseForPendingResizeOrRepaints();
 
-  // Check for the existance of a BackingStore of the given |desired_size| and
-  // return it if it exists. If the BackingStore is GPU, true is returned and
-  // |*backing_store| is set to NULL.
-  bool TryGetBackingStore(const gfx::Size& desired_size,
-                          BackingStore** backing_store);
-
-  // Get access to the widget's backing store matching the size of the widget's
-  // view. If you pass |force_create| as true, then GetBackingStore may block
-  // for the renderer to send a new frame. Otherwise, NULL will be returned if
-  // the backing store doesn't already exist. It will also return NULL if the
-  // backing store could not be created.
-  //
-  // Mac only: NULL may also be returned if the last frame was GPU accelerated.
-  // Call GetView()->HasAcceleratedSurface to determine if the last frame was
-  // accelerated.
-  BackingStore* GetBackingStore(bool force_create);
-
-  // Allocate a new backing store of the given size. Returns NULL on failure
-  // (for example, if we don't currently have a RenderWidgetHostView.)
-  BackingStore* AllocBackingStore(const gfx::Size& size);
-
-  // When a backing store does asynchronous painting, it will call this function
-  // when it is done with the DIB. We will then forward a message to the
-  // renderer to send another paint.
-  void DonePaintingToBackingStore();
+  // Wait for a surface matching the size of the widget's view, possibly
+  // blocking until the renderer sends a new frame.
+  void WaitForSurface();
 
   // GPU accelerated version of GetBackingStore function. This will
   // trigger a re-composite to the view. It may fail if a resize is pending, or
@@ -684,7 +657,7 @@
   void OnUnlockMouse();
   void OnShowDisambiguationPopup(const gfx::Rect& rect,
                                  const gfx::Size& size,
-                                 const TransportDIB::Id& id);
+                                 const cc::SharedBitmapId& id);
 #if defined(OS_WIN)
   void OnWindowlessPluginDummyWindowCreated(
       gfx::NativeViewId dummy_activation_window);
@@ -704,24 +677,6 @@
   void DidUpdateBackingStore(const ViewHostMsg_UpdateRect_Params& params,
                              const base::TimeTicks& paint_start);
 
-  // Paints the given bitmap to the current backing store at the given
-  // location.  Returns true if the passed callback was asynchronously
-  // scheduled in the future (and thus the caller must manually synchronously
-  // call the callback function).
-  bool PaintBackingStoreRect(TransportDIB::Id bitmap,
-                             const gfx::Rect& bitmap_rect,
-                             const std::vector<gfx::Rect>& copy_rects,
-                             const gfx::Size& view_size,
-                             float scale_factor,
-                             const base::Closure& completion_callback);
-
-  // Scrolls the given |clip_rect| in the backing by the given dx/dy amount. The
-  // |dib| and its corresponding location |bitmap_rect| in the backing store
-  // is the newly painted pixels by the renderer.
-  void ScrollBackingStoreRect(const gfx::Vector2d& delta,
-                              const gfx::Rect& clip_rect,
-                              const gfx::Size& view_size);
-
   // Give key press listeners a chance to handle this key press. This allow
   // widgets that don't have focus to still handle key presses.
   bool KeyPressListenersHandleEvent(const NativeWebKeyboardEvent& event);
diff --git a/content/browser/renderer_host/render_widget_host_unittest.cc b/content/browser/renderer_host/render_widget_host_unittest.cc
index 08a26e8..1253c7e 100644
--- a/content/browser/renderer_host/render_widget_host_unittest.cc
+++ b/content/browser/renderer_host/render_widget_host_unittest.cc
@@ -9,7 +9,6 @@
 #include "base/memory/shared_memory.h"
 #include "base/timer/timer.h"
 #include "content/browser/browser_thread_impl.h"
-#include "content/browser/renderer_host/backing_store.h"
 #include "content/browser/renderer_host/input/gesture_event_queue.h"
 #include "content/browser/renderer_host/input/input_router_impl.h"
 #include "content/browser/renderer_host/input/tap_suppression_controller.h"
@@ -408,7 +407,6 @@
   params->copy_rects.push_back(params->bitmap_rect);
   params->view_size = gfx::Size(w, h);
   params->flags = update_msg_reply_flags_;
-  params->needs_ack = true;
   params->scale_factor = 1;
 }
 
@@ -481,12 +479,9 @@
     acked_event_ = touch.event;
     ++acked_event_count_;
   }
-  virtual void HandledWheelEvent(const blink::WebMouseWheelEvent& event,
-                                 bool consumed) OVERRIDE {
-    if (!consumed) {
-      unhandled_wheel_event_count_++;
-      unhandled_wheel_event_ = event;
-    }
+  virtual void UnhandledWheelEvent(const WebMouseWheelEvent& event) OVERRIDE {
+    unhandled_wheel_event_count_++;
+    unhandled_wheel_event_ = event;
   }
   virtual void GestureEventAck(const WebGestureEvent& event,
                                InputEventAckState ack_result) OVERRIDE {
@@ -1042,68 +1037,6 @@
   // since windows HDC structures are opaque.
 }
 
-// Tests getting the backing store with the renderer not setting repaint ack
-// flags.
-TEST_F(RenderWidgetHostTest, GetBackingStore_NoRepaintAck) {
-  // First set the view size to match what the renderer is rendering.
-  ViewHostMsg_UpdateRect_Params params;
-  process_->InitUpdateRectParams(&params);
-  view_->set_bounds(gfx::Rect(params.view_size));
-
-  // We don't currently have a backing store, and if the renderer doesn't send
-  // one in time, we should get nothing.
-  process_->set_update_msg_should_reply(false);
-  BackingStore* backing = host_->GetBackingStore(true);
-  EXPECT_FALSE(backing);
-  // The widget host should have sent a request for a repaint, and there should
-  // be no paint ACK.
-  EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(ViewMsg_Repaint::ID));
-  EXPECT_FALSE(process_->sink().GetUniqueMessageMatching(
-      ViewMsg_UpdateRect_ACK::ID));
-
-  // Allowing the renderer to reply in time should give is a backing store.
-  process_->sink().ClearMessages();
-  process_->set_update_msg_should_reply(true);
-  process_->set_update_msg_reply_flags(0);
-  backing = host_->GetBackingStore(true);
-  EXPECT_TRUE(backing);
-  // The widget host should NOT have sent a request for a repaint, since there
-  // was an ACK already pending.
-  EXPECT_FALSE(process_->sink().GetUniqueMessageMatching(ViewMsg_Repaint::ID));
-  EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(
-      ViewMsg_UpdateRect_ACK::ID));
-}
-
-// Tests getting the backing store with the renderer sending a repaint ack.
-TEST_F(RenderWidgetHostTest, GetBackingStore_RepaintAck) {
-  // First set the view size to match what the renderer is rendering.
-  ViewHostMsg_UpdateRect_Params params;
-  process_->InitUpdateRectParams(&params);
-  view_->set_bounds(gfx::Rect(params.view_size));
-
-  // Doing a request request with the update message allowed should work and
-  // the repaint ack should work.
-  process_->set_update_msg_should_reply(true);
-  process_->set_update_msg_reply_flags(
-      ViewHostMsg_UpdateRect_Flags::IS_REPAINT_ACK);
-  BackingStore* backing = host_->GetBackingStore(true);
-  EXPECT_TRUE(backing);
-  // We still should not have sent out a repaint request since the last flags
-  // didn't have the repaint ack set, and the pending flag will still be set.
-  EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(ViewMsg_Repaint::ID));
-  EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(
-      ViewMsg_UpdateRect_ACK::ID));
-
-  // Asking again for the backing store should just re-use the existing one
-  // and not send any messagse.
-  process_->sink().ClearMessages();
-  backing = host_->GetBackingStore(true);
-  EXPECT_TRUE(backing);
-  EXPECT_FALSE(process_->sink().GetUniqueMessageMatching(ViewMsg_Repaint::ID));
-  EXPECT_FALSE(process_->sink().GetUniqueMessageMatching(
-      ViewMsg_UpdateRect_ACK::ID));
-}
-
 // Test that we don't paint when we're hidden, but we still send the ACK. Most
 // of the rest of the painting is tested in the GetBackingStore* ones.
 TEST_F(RenderWidgetHostTest, HiddenPaint) {
@@ -1120,10 +1053,6 @@
   process_->InitUpdateRectParams(&params);
   host_->OnUpdateRect(params);
 
-  // It should have sent out the ACK.
-  EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(
-      ViewMsg_UpdateRect_ACK::ID));
-
   // Now unhide.
   process_->sink().ClearMessages();
   host_->WasShown();
@@ -1330,20 +1259,6 @@
   EXPECT_TRUE(host_->unresponsive_timer_fired());
 }
 
-// This test is not valid for Windows because getting the shared memory
-// size doesn't work.
-#if !defined(OS_WIN)
-TEST_F(RenderWidgetHostTest, IncorrectBitmapScaleFactor) {
-  ViewHostMsg_UpdateRect_Params params;
-  process_->InitUpdateRectParams(&params);
-  params.scale_factor = params.scale_factor * 2;
-
-  EXPECT_EQ(0, process_->bad_msg_count());
-  host_->OnUpdateRect(params);
-  EXPECT_EQ(1, process_->bad_msg_count());
-}
-#endif
-
 // Tests that scroll ACKs are correctly handled by the overscroll-navigation
 // controller.
 TEST_F(RenderWidgetHostTest, WheelScrollEventOverscrolls) {
diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc
index 0f14c99..51e5af0 100644
--- a/content/browser/renderer_host/render_widget_host_view_android.cc
+++ b/content/browser/renderer_host/render_widget_host_view_android.cc
@@ -40,6 +40,7 @@
 #include "content/browser/renderer_host/dip_util.h"
 #include "content/browser/renderer_host/image_transport_factory_android.h"
 #include "content/browser/renderer_host/input/synthetic_gesture_target_android.h"
+#include "content/browser/renderer_host/input/web_input_event_util.h"
 #include "content/browser/renderer_host/render_process_host_impl.h"
 #include "content/browser/renderer_host/render_view_host_impl.h"
 #include "content/browser/renderer_host/render_widget_host_impl.h"
@@ -58,6 +59,8 @@
 #include "third_party/skia/include/core/SkCanvas.h"
 #include "ui/base/android/window_android.h"
 #include "ui/base/android/window_android_compositor.h"
+#include "ui/events/gesture_detection/gesture_config_helper.h"
+#include "ui/events/gesture_detection/motion_event.h"
 #include "ui/gfx/android/device_display_info.h"
 #include "ui/gfx/android/java_bitmap.h"
 #include "ui/gfx/display.h"
@@ -69,6 +72,12 @@
 namespace {
 
 const int kUndefinedOutputSurfaceId = -1;
+
+// Used to accomodate finite precision when comparing scaled viewport and
+// content widths. While this value may seem large, width=device-width on an N7
+// V1 saw errors of ~0.065 between computed window and content widths.
+const float kMobileViewportWidthEpsilon = 0.15f;
+
 static const char kAsyncReadBackString[] = "Compositing.CopyFromSurfaceTime";
 
 // Sends an acknowledgement to the renderer of a processed IME event.
@@ -133,6 +142,25 @@
   return params;
 }
 
+ui::GestureProvider::Config CreateGestureProviderConfig() {
+  ui::GestureProvider::Config config = ui::DefaultGestureProviderConfig();
+  config.disable_click_delay =
+      CommandLine::ForCurrentProcess()->HasSwitch(switches::kDisableClickDelay);
+  return config;
+}
+
+bool HasFixedPageScale(const cc::CompositorFrameMetadata& frame_metadata) {
+  return frame_metadata.min_page_scale_factor ==
+         frame_metadata.max_page_scale_factor;
+}
+
+bool HasMobileViewport(const cc::CompositorFrameMetadata& frame_metadata) {
+  float window_width_dip =
+      frame_metadata.page_scale_factor * frame_metadata.viewport_size.width();
+  float content_width_css = frame_metadata.root_layer_size.width();
+  return content_width_css <= window_width_dip + kMobileViewportWidthEpsilon;
+}
+
 }  // anonymous namespace
 
 RenderWidgetHostViewAndroid::LastFrameInfo::LastFrameInfo(
@@ -156,6 +184,7 @@
       overscroll_effect_enabled_(!CommandLine::ForCurrentProcess()->HasSwitch(
           switches::kDisableOverscrollEdgeEffect)),
       overscroll_effect_(OverscrollGlow::Create(overscroll_effect_enabled_)),
+      gesture_provider_(CreateGestureProviderConfig(), this),
       flush_input_requested_(false),
       accelerated_surface_route_id_(0),
       using_synchronous_compositor_(SynchronousCompositorImpl::FromID(
@@ -163,7 +192,7 @@
                                         widget_host->GetRoutingID()) != NULL),
       frame_evictor_(new DelegatedFrameEvictor(this)),
       locks_on_frame_count_(0),
-      root_window_destroyed_(false) {
+      observing_root_window_(false) {
   host_->SetView(this);
   SetContentViewCore(content_view_core);
   ImageTransportFactoryAndroid::AddObserver(this);
@@ -221,8 +250,10 @@
 
   host_->WasShown();
 
-  if (content_view_core_ && !using_synchronous_compositor_)
+  if (content_view_core_ && !using_synchronous_compositor_) {
     content_view_core_->GetWindowAndroid()->AddObserver(this);
+    observing_root_window_ = true;
+  }
 }
 
 void RenderWidgetHostViewAndroid::WasHidden() {
@@ -235,8 +266,10 @@
   // utilization.
   host_->WasHidden();
 
-  if (content_view_core_ && !using_synchronous_compositor_)
+  if (content_view_core_ && !using_synchronous_compositor_) {
     content_view_core_->GetWindowAndroid()->RemoveObserver(this);
+    observing_root_window_ = false;
+  }
 }
 
 void RenderWidgetHostViewAndroid::WasResized() {
@@ -247,7 +280,6 @@
   // Ignore the given size as only the Java code has the power to
   // resize the view on Android.
   default_size_ = size;
-  WasResized();
 }
 
 void RenderWidgetHostViewAndroid::SetBounds(const gfx::Rect& rect) {
@@ -416,11 +448,7 @@
   if (!content_view_core_)
     return gfx::Rect(default_size_);
 
-  gfx::Size size = content_view_core_->GetViewportSizeDip();
-  gfx::Size offset = content_view_core_->GetViewportSizeOffsetDip();
-  size.Enlarge(-offset.width(), -offset.height());
-
-  return gfx::Rect(size);
+  return gfx::Rect(content_view_core_->GetViewSize());
 }
 
 gfx::Size RenderWidgetHostViewAndroid::GetPhysicalBackingSize() const {
@@ -535,6 +563,45 @@
     content_view_core_->OnSmartClipDataExtracted(result);
 }
 
+bool RenderWidgetHostViewAndroid::OnTouchEvent(
+    const ui::MotionEvent& event) {
+  if (!host_)
+    return false;
+
+  if (!gesture_provider_.OnTouchEvent(event))
+    return false;
+
+  // Short-circuit touch forwarding if no touch handlers exist.
+  if (!host_->ShouldForwardTouchEvent()) {
+    const bool event_consumed = false;
+    gesture_provider_.OnTouchEventAck(event_consumed);
+    return true;
+  }
+
+  SendTouchEvent(CreateWebTouchEventFromMotionEvent(event));
+  return true;
+}
+
+void RenderWidgetHostViewAndroid::ResetGestureDetection() {
+  const ui::MotionEvent* current_down_event =
+      gesture_provider_.GetCurrentDownEvent();
+  if (!current_down_event)
+    return;
+
+  scoped_ptr<ui::MotionEvent> cancel_event = current_down_event->Cancel();
+  DCHECK(cancel_event);
+  OnTouchEvent(*cancel_event);
+}
+
+void RenderWidgetHostViewAndroid::SetDoubleTapSupportEnabled(bool enabled) {
+  gesture_provider_.SetDoubleTapSupportForPlatformEnabled(enabled);
+}
+
+void RenderWidgetHostViewAndroid::SetMultiTouchZoomSupportEnabled(
+    bool enabled) {
+  gesture_provider_.SetMultiTouchZoomSupportEnabled(enabled);
+}
+
 void RenderWidgetHostViewAndroid::ImeCancelComposition() {
   ime_adapter_android_.CancelComposition();
 }
@@ -609,12 +676,6 @@
 void RenderWidgetHostViewAndroid::ScrollOffsetChanged() {
 }
 
-BackingStore* RenderWidgetHostViewAndroid::AllocBackingStore(
-    const gfx::Size& size) {
-  NOTIMPLEMENTED();
-  return NULL;
-}
-
 void RenderWidgetHostViewAndroid::SetBackground(const SkBitmap& background) {
   RenderWidgetHostViewBase::SetBackground(background);
   host_->Send(new ViewMsg_SetBackground(host_->GetRoutingID(), background));
@@ -837,7 +898,7 @@
 
   // Always let ContentViewCore know about the new frame first, so it can decide
   // to schedule a Draw immediately when it sees the texture layer invalidation.
-  UpdateContentViewCoreFrameMetadata(frame->metadata);
+  OnFrameMetadataUpdated(frame->metadata);
 
   if (layer_ && layer_->layer_tree_host()) {
     for (size_t i = 0; i < frame->metadata.latency_info.size(); i++) {
@@ -889,7 +950,7 @@
     const cc::CompositorFrameMetadata& frame_metadata) {
   // This is a subset of OnSwapCompositorFrame() used in the synchronous
   // compositor flow.
-  UpdateContentViewCoreFrameMetadata(frame_metadata);
+  OnFrameMetadataUpdated(frame_metadata);
   ComputeContentsSize(frame_metadata);
 
   // DevTools ScreenCast support for Android WebView.
@@ -936,8 +997,18 @@
   callback.Run(true, bitmap);
 }
 
-void RenderWidgetHostViewAndroid::UpdateContentViewCoreFrameMetadata(
+void RenderWidgetHostViewAndroid::OnFrameMetadataUpdated(
     const cc::CompositorFrameMetadata& frame_metadata) {
+
+  // Disable double tap zoom for pages that have a width=device-width or
+  // narrower viewport (indicating that this is a mobile-optimized or responsive
+  // web design, so text will be legible without zooming). Also disable
+  // double tap and pinch for pages that prevent zooming in or out.
+  bool has_mobile_viewport = HasMobileViewport(frame_metadata);
+  bool has_fixed_page_scale = HasFixedPageScale(frame_metadata);
+  gesture_provider_.SetDoubleTapSupportForPageEnabled(
+      !has_fixed_page_scale && !has_mobile_viewport);
+
   if (!content_view_core_)
     return;
   // All offsets and sizes are in CSS pixels.
@@ -1046,8 +1117,8 @@
 
 void RenderWidgetHostViewAndroid::ProcessAckedTouchEvent(
     const TouchEventWithLatencyInfo& touch, InputEventAckState ack_result) {
-  if (content_view_core_)
-    content_view_core_->ConfirmTouchEvent(ack_result);
+  const bool event_consumed = ack_result == INPUT_EVENT_ACK_STATE_CONSUMED;
+  gesture_provider_.OnTouchEventAck(event_consumed);
 }
 
 void RenderWidgetHostViewAndroid::SetHasHorizontalScrollbar(
@@ -1060,6 +1131,11 @@
   // intentionally empty, like RenderWidgetHostViewViews
 }
 
+void RenderWidgetHostViewAndroid::UnhandledWheelEvent(
+    const blink::WebMouseWheelEvent& event) {
+  // intentionally empty, like RenderWidgetHostViewViews
+}
+
 void RenderWidgetHostViewAndroid::GestureEventAck(
     const blink::WebGestureEvent& event,
     InputEventAckState ack_result) {
@@ -1247,17 +1323,16 @@
 void RenderWidgetHostViewAndroid::SetContentViewCore(
     ContentViewCoreImpl* content_view_core) {
   RemoveLayers();
-  // TODO: crbug.com/324341
-  // WindowAndroid and Compositor should outlive all WebContents.
-  // Allowing this here at runtime is a bandaid.
-  DCHECK(!root_window_destroyed_);
-  if (content_view_core_ && !root_window_destroyed_ &&
-      !using_synchronous_compositor_) {
+  if (observing_root_window_ && content_view_core_) {
     content_view_core_->GetWindowAndroid()->RemoveObserver(this);
+    observing_root_window_ = false;
   }
 
-  if (content_view_core != content_view_core_)
+  bool resize = false;
+  if (content_view_core != content_view_core_) {
     ReleaseLocksOnSurface();
+    resize = true;
+  }
 
   content_view_core_ = content_view_core;
 
@@ -1270,10 +1345,13 @@
   }
 
   AttachLayers();
-  if (content_view_core_ && !root_window_destroyed_ &&
-      !using_synchronous_compositor_) {
+  if (content_view_core_ && !using_synchronous_compositor_) {
     content_view_core_->GetWindowAndroid()->AddObserver(this);
+    observing_root_window_ = true;
   }
+
+  if (resize && content_view_core_)
+    WasResized();
 }
 
 void RenderWidgetHostViewAndroid::RunAckCallbacks() {
@@ -1283,6 +1361,11 @@
   }
 }
 
+void RenderWidgetHostViewAndroid::OnGestureEvent(
+    const ui::GestureEventData& gesture) {
+  SendGestureEvent(CreateWebGestureEventFromGestureEventData(gesture));
+}
+
 void RenderWidgetHostViewAndroid::OnCompositingDidCommit() {
   RunAckCallbacks();
 }
@@ -1294,7 +1377,10 @@
 }
 
 void RenderWidgetHostViewAndroid::OnWillDestroyWindow() {
-  root_window_destroyed_ = true;
+  // crbug.com/324341
+  // WindowAndroid and Compositor should outlive all WebContents.
+  NOTREACHED();
+  observing_root_window_ = false;
 }
 
 void RenderWidgetHostViewAndroid::OnLostResources() {
@@ -1405,6 +1491,7 @@
   // TODO(husky): Remove any system controls from availableRect.
   results->availableRect = display.work_area();
   results->deviceScaleFactor = display.device_scale_factor();
+  results->orientationAngle = display.RotationAsDegree();
   gfx::DeviceDisplayInfo info;
   results->depth = info.GetBitsPerPixel();
   results->depthPerComponent = info.GetBitsPerComponent();
diff --git a/content/browser/renderer_host/render_widget_host_view_android.h b/content/browser/renderer_host/render_widget_host_view_android.h
index 274edba..9c68da9 100644
--- a/content/browser/renderer_host/render_widget_host_view_android.h
+++ b/content/browser/renderer_host/render_widget_host_view_android.h
@@ -25,6 +25,7 @@
 #include "third_party/skia/include/core/SkColor.h"
 #include "third_party/WebKit/public/platform/WebGraphicsContext3D.h"
 #include "ui/base/android/window_android_observer.h"
+#include "ui/events/gesture_detection/filtered_gesture_provider.h"
 #include "ui/gfx/size.h"
 #include "ui/gfx/vector2d_f.h"
 
@@ -61,6 +62,7 @@
       public BrowserAccessibilityDelegate,
       public cc::DelegatedFrameResourceCollectionClient,
       public ImageTransportFactoryAndroidObserver,
+      public ui::GestureProviderClient,
       public ui::WindowAndroidObserver,
       public DelegatedFrameEvictorClient {
  public:
@@ -119,7 +121,6 @@
       const ViewHostMsg_SelectionBounds_Params& params) OVERRIDE;
   virtual void SelectionRootBoundsChanged(const gfx::Rect& bounds) OVERRIDE;
   virtual void ScrollOffsetChanged() OVERRIDE;
-  virtual BackingStore* AllocBackingStore(const gfx::Size& size) OVERRIDE;
   virtual void OnAcceleratedCompositingStateChange() OVERRIDE;
   virtual void AcceleratedSurfaceInitialized(int host_id,
                                              int route_id) OVERRIDE;
@@ -152,6 +153,8 @@
       bool has_horizontal_scrollbar) OVERRIDE;
   virtual void SetScrollOffsetPinning(
       bool is_pinned_to_left, bool is_pinned_to_right) OVERRIDE;
+  virtual void UnhandledWheelEvent(
+      const blink::WebMouseWheelEvent& event) OVERRIDE;
   virtual InputEventAckState FilterInputEvent(
       const blink::WebInputEvent& input_event) OVERRIDE;
   virtual void OnSetNeedsFlushInput() OVERRIDE;
@@ -188,6 +191,9 @@
   // cc::DelegatedFrameResourceCollectionClient implementation.
   virtual void UnusedResourcesAreAvailable() OVERRIDE;
 
+  // ui::GestureProviderClient implementation.
+  virtual void OnGestureEvent(const ui::GestureEventData& gesture) OVERRIDE;
+
   // ui::WindowAndroidObserver implementation.
   virtual void OnCompositingDidCommit() OVERRIDE;
   virtual void OnAttachCompositor() OVERRIDE {}
@@ -218,6 +224,11 @@
   void OnSetNeedsBeginFrame(bool enabled);
   void OnSmartClipDataExtracted(const base::string16& result);
 
+  bool OnTouchEvent(const ui::MotionEvent& event);
+  void ResetGestureDetection();
+  void SetDoubleTapSupportEnabled(bool enabled);
+  void SetMultiTouchZoomSupportEnabled(bool enabled);
+
   long GetNativeImeAdapter();
 
   void WasResized();
@@ -250,7 +261,7 @@
   void SendDelegatedFrameAck(uint32 output_surface_id);
   void SendReturnedDelegatedResources(uint32 output_surface_id);
 
-  void UpdateContentViewCoreFrameMetadata(
+  void OnFrameMetadataUpdated(
       const cc::CompositorFrameMetadata& frame_metadata);
   void ComputeContentsSize(const cc::CompositorFrameMetadata& frame_metadata);
   void ResetClipping();
@@ -335,6 +346,10 @@
   // Note: |overscroll_effect_| will never be NULL, even if it's never enabled.
   scoped_ptr<OverscrollGlow> overscroll_effect_;
 
+  // Provides gesture synthesis given a stream of touch events (derived from
+  // Android MotionEvent's) and touch event acks.
+  ui::FilteredGestureProvider gesture_provider_;
+
   bool flush_input_requested_;
 
   int accelerated_surface_route_id_;
@@ -347,7 +362,7 @@
   scoped_ptr<DelegatedFrameEvictor> frame_evictor_;
 
   size_t locks_on_frame_count_;
-  bool root_window_destroyed_;
+  bool observing_root_window_;
 
   struct LastFrameInfo {
     LastFrameInfo(uint32 output_id,
diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc
index cc0763d..ad37424 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura.cc
+++ b/content/browser/renderer_host/render_widget_host_view_aura.cc
@@ -26,7 +26,6 @@
 #include "content/browser/frame_host/frame_tree_node.h"
 #include "content/browser/frame_host/render_frame_host_impl.h"
 #include "content/browser/gpu/compositor_util.h"
-#include "content/browser/renderer_host/backing_store_aura.h"
 #include "content/browser/renderer_host/compositor_resize_lock_aura.h"
 #include "content/browser/renderer_host/dip_util.h"
 #include "content/browser/renderer_host/input/synthetic_gesture_target_aura.h"
@@ -311,6 +310,7 @@
   results->depth = 24;
   results->depthPerComponent = 8;
   results->deviceScaleFactor = display.device_scale_factor();
+  results->orientationAngle = display.RotationAsDegree();
 }
 
 bool PointerEventActivates(const ui::Event& event) {
@@ -833,7 +833,7 @@
 }
 
 bool RenderWidgetHostViewAura::IsSurfaceAvailableForCopy() const {
-  return CanCopyToBitmap() || !!host_->GetBackingStore(false);
+  return CanCopyToBitmap();
 }
 
 void RenderWidgetHostViewAura::Show() {
@@ -1053,11 +1053,6 @@
     cursor_client->DisableMouseEvents();
 }
 
-BackingStore* RenderWidgetHostViewAura::AllocBackingStore(
-    const gfx::Size& size) {
-  return new BackingStoreAura(host_, size);
-}
-
 void RenderWidgetHostViewAura::CopyFromCompositingSurface(
     const gfx::Rect& src_subrect,
     const gfx::Size& dst_size,
@@ -1787,32 +1782,13 @@
 }
 
 gfx::Rect RenderWidgetHostViewAura::GetBoundsInRootWindow() {
+  gfx::Rect rect = window_->GetToplevelWindow()->GetBoundsInScreen();
+
 #if defined(OS_WIN)
-  // aura::Window::GetBoundsInScreen doesn't take non-client area into
-  // account.
-  RECT window_rect = {0};
-
-  aura::Window* top_level = window_->GetToplevelWindow();
-  aura::WindowTreeHost* host = top_level->GetHost();
-  if (!host)
-    return top_level->GetBoundsInScreen();
-  HWND hwnd = host->GetAcceleratedWidget();
-  ::GetWindowRect(hwnd, &window_rect);
-  gfx::Rect rect(window_rect);
-
-  // Maximized windows are outdented from the work area by the frame thickness
-  // even though this "frame" is not painted.  This confuses code (and people)
-  // that think of a maximized window as corresponding exactly to the work area.
-  // Correct for this by subtracting the frame thickness back off.
-  if (::IsZoomed(hwnd)) {
-    rect.Inset(GetSystemMetrics(SM_CXSIZEFRAME),
-               GetSystemMetrics(SM_CYSIZEFRAME));
-  }
-
-  return gfx::win::ScreenToDIPRect(rect);
-#else
-  return window_->GetToplevelWindow()->GetBoundsInScreen();
+  rect = gfx::win::ScreenToDIPRect(rect);
 #endif
+
+  return rect;
 }
 
 void RenderWidgetHostViewAura::GestureEventAck(
@@ -2266,27 +2242,11 @@
 }
 
 void RenderWidgetHostViewAura::OnPaint(gfx::Canvas* canvas) {
-  bool has_backing_store = !!host_->GetBackingStore(false);
-  if (has_backing_store) {
-    paint_canvas_ = canvas;
-    BackingStoreAura* backing_store = static_cast<BackingStoreAura*>(
-        host_->GetBackingStore(true));
-    paint_canvas_ = NULL;
-    backing_store->SkiaShowRect(gfx::Point(), canvas);
-
-    ui::Compositor* compositor = GetCompositor();
-    if (compositor) {
-      for (size_t i = 0; i < software_latency_info_.size(); i++)
-        compositor->SetLatencyInfo(software_latency_info_[i]);
-    }
-    software_latency_info_.clear();
-  } else {
-    // For non-opaque windows, we don't draw anything, since we depend on the
-    // canvas coming from the compositor to already be initialized as
-    // transparent.
-    if (window_->layer()->fills_bounds_opaquely())
-      canvas->DrawColor(SK_ColorWHITE);
-  }
+  // For non-opaque windows, we don't draw anything, since we depend on the
+  // canvas coming from the compositor to already be initialized as
+  // transparent.
+  if (window_->layer()->fills_bounds_opaquely())
+    canvas->DrawColor(SK_ColorWHITE);
 }
 
 void RenderWidgetHostViewAura::OnDeviceScaleFactorChanged(
@@ -2294,11 +2254,6 @@
   if (!host_)
     return;
 
-  BackingStoreAura* backing_store = static_cast<BackingStoreAura*>(
-      host_->GetBackingStore(false));
-  if (backing_store)  // NULL in hardware path.
-    backing_store->ScaleFactorChanged(device_scale_factor);
-
   UpdateScreenInfo(window_);
 
   const gfx::Display display = gfx::Screen::GetScreenFor(window_)->
diff --git a/content/browser/renderer_host/render_widget_host_view_aura.h b/content/browser/renderer_host/render_widget_host_view_aura.h
index b74f7f3..3e68f2b 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura.h
+++ b/content/browser/renderer_host/render_widget_host_view_aura.h
@@ -194,7 +194,6 @@
   virtual void SelectionBoundsChanged(
       const ViewHostMsg_SelectionBounds_Params& params) OVERRIDE;
   virtual void ScrollOffsetChanged() OVERRIDE;
-  virtual BackingStore* AllocBackingStore(const gfx::Size& size) OVERRIDE;
   virtual void CopyFromCompositingSurface(
       const gfx::Rect& src_subrect,
       const gfx::Size& dst_size,
diff --git a/content/browser/renderer_host/render_widget_host_view_base.cc b/content/browser/renderer_host/render_widget_host_view_base.cc
index 197960f..a5d44ff 100644
--- a/content/browser/renderer_host/render_widget_host_view_base.cc
+++ b/content/browser/renderer_host/render_widget_host_view_base.cc
@@ -446,9 +446,8 @@
   return mouse_locked_;
 }
 
-void RenderWidgetHostViewBase::HandledWheelEvent(
-    const blink::WebMouseWheelEvent& event,
-    bool consumed) {
+void RenderWidgetHostViewBase::UnhandledWheelEvent(
+    const blink::WebMouseWheelEvent& event) {
   // Most implementations don't need to do anything here.
 }
 
diff --git a/content/browser/renderer_host/render_widget_host_view_base.h b/content/browser/renderer_host/render_widget_host_view_base.h
index 5947681..284874c 100644
--- a/content/browser/renderer_host/render_widget_host_view_base.h
+++ b/content/browser/renderer_host/render_widget_host_view_base.h
@@ -54,8 +54,8 @@
   virtual void SetShowingContextMenu(bool showing_menu) OVERRIDE;
   virtual base::string16 GetSelectedText() const OVERRIDE;
   virtual bool IsMouseLocked() OVERRIDE;
-  virtual void HandledWheelEvent(const blink::WebMouseWheelEvent& event,
-                                 bool consumed) OVERRIDE;
+  virtual void UnhandledWheelEvent(
+      const blink::WebMouseWheelEvent& event) OVERRIDE;
   virtual InputEventAckState FilterInputEvent(
       const blink::WebInputEvent& input_event) OVERRIDE;
   virtual void OnSetNeedsFlushInput() OVERRIDE;
diff --git a/content/browser/renderer_host/render_widget_host_view_browsertest.cc b/content/browser/renderer_host/render_widget_host_view_browsertest.cc
index 7101e9d..4721e54c 100644
--- a/content/browser/renderer_host/render_widget_host_view_browsertest.cc
+++ b/content/browser/renderer_host/render_widget_host_view_browsertest.cc
@@ -228,24 +228,12 @@
     RenderWidgetHostViewBrowserTest::SetUp();
   }
 
-  virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
-    // Note: Not appending kForceCompositingMode switch here, since not all bots
-    // support compositing.  Some bots will run with compositing on, and others
-    // won't.  Therefore, the call to SetUpSourceSurface() later on will detect
-    // whether compositing mode is actually on or not.  If not, the tests will
-    // pass blindly, logging a warning message, since we cannot test what the
-    // platform/implementation does not support.
-    RenderWidgetHostViewBrowserTest::SetUpCommandLine(command_line);
-  }
-
   virtual GURL TestUrl() {
     return net::FilePathToFileURL(
         test_dir().AppendASCII("rwhv_compositing_animation.html"));
   }
 
   virtual bool SetUpSourceSurface(const char* wait_message) OVERRIDE {
-    if (!IsForceCompositingModeEnabled())
-      return false;  // See comment in SetUpCommandLine().
 #if defined(OS_MACOSX)
     CHECK(IOSurfaceSupport::Initialize());
 #endif
@@ -277,49 +265,6 @@
   DISALLOW_COPY_AND_ASSIGN(CompositingRenderWidgetHostViewBrowserTest);
 };
 
-class NonCompositingRenderWidgetHostViewBrowserTest
-    : public RenderWidgetHostViewBrowserTest {
- public:
-  NonCompositingRenderWidgetHostViewBrowserTest() {}
-
-  virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
-    // Note: Appending the kDisableAcceleratedCompositing switch here, but there
-    // are some builds that only use compositing and will ignore this switch.
-    // Therefore, the call to SetUpSourceSurface() later on will detect whether
-    // compositing mode is actually off.  If it's on, the tests will pass
-    // blindly, logging a warning message, since we cannot test what the
-    // platform/implementation does not support.
-    command_line->AppendSwitch(switches::kDisableAcceleratedCompositing);
-    RenderWidgetHostViewBrowserTest::SetUpCommandLine(command_line);
-  }
-
-  virtual GURL TestUrl() {
-    return GURL(kAboutBlankURL);
-  }
-
-  virtual bool SetUpSourceSurface(const char* wait_message) OVERRIDE {
-    if (IsForceCompositingModeEnabled())
-      return false;  // See comment in SetUpCommandLine().
-
-    content::DOMMessageQueue message_queue;
-    NavigateToURL(shell(), TestUrl());
-    if (wait_message != NULL) {
-      std::string result(wait_message);
-      if (!message_queue.WaitForMessage(&result)) {
-        EXPECT_TRUE(false) << "WaitForMessage " << result << " failed.";
-        return false;
-      }
-    }
-
-    WaitForCopySourceReady();
-    // Return whether the renderer left accelerated compositing turned off.
-    return !GetRenderWidgetHost()->is_accelerated_compositing_active();
-  }
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(NonCompositingRenderWidgetHostViewBrowserTest);
-};
-
 class FakeFrameSubscriber : public RenderWidgetHostViewFrameSubscriber {
  public:
   FakeFrameSubscriber(
@@ -358,13 +303,6 @@
   RunBasicCopyFromBackingStoreTest();
 }
 
-// The CopyFromBackingStore() API should work on all platforms when compositing
-// is disabled.
-IN_PROC_BROWSER_TEST_F(NonCompositingRenderWidgetHostViewBrowserTest,
-                       CopyFromBackingStore) {
-  RunBasicCopyFromBackingStoreTest();
-}
-
 // Tests that the callback passed to CopyFromBackingStore is always called,
 // even when the RenderWidgetHost is deleting in the middle of an async copy.
 IN_PROC_BROWSER_TEST_P(CompositingRenderWidgetHostViewBrowserTest,
@@ -423,14 +361,6 @@
   EXPECT_EQ(1, callback_invoke_count());
 }
 
-// With compositing turned off, no platforms should support the
-// CopyFromCompositingSurfaceToVideoFrame() API.
-IN_PROC_BROWSER_TEST_F(NonCompositingRenderWidgetHostViewBrowserTest,
-                       CopyFromCompositingSurfaceToVideoFrameCallbackTest) {
-  SET_UP_SURFACE_OR_PASS_TEST(NULL);
-  EXPECT_FALSE(GetRenderWidgetHostViewPort()->CanCopyToVideoFrame());
-}
-
 // Test basic frame subscription functionality.  We subscribe, and then run
 // until at least one DeliverFrameCallback has been invoked.
 IN_PROC_BROWSER_TEST_P(CompositingRenderWidgetHostViewBrowserTest,
diff --git a/content/browser/renderer_host/render_widget_host_view_mac.h b/content/browser/renderer_host/render_widget_host_view_mac.h
index b634a35..bf17125 100644
--- a/content/browser/renderer_host/render_widget_host_view_mac.h
+++ b/content/browser/renderer_host/render_widget_host_view_mac.h
@@ -291,7 +291,6 @@
   virtual void SelectionBoundsChanged(
       const ViewHostMsg_SelectionBounds_Params& params) OVERRIDE;
   virtual void ScrollOffsetChanged() OVERRIDE;
-  virtual BackingStore* AllocBackingStore(const gfx::Size& size) OVERRIDE;
   virtual void CopyFromCompositingSurface(
       const gfx::Rect& src_subrect,
       const gfx::Size& dst_size,
@@ -334,8 +333,8 @@
       bool is_pinned_to_left, bool is_pinned_to_right) OVERRIDE;
   virtual bool LockMouse() OVERRIDE;
   virtual void UnlockMouse() OVERRIDE;
-  virtual void HandledWheelEvent(const blink::WebMouseWheelEvent& event,
-                                 bool consumed) OVERRIDE;
+  virtual void UnhandledWheelEvent(
+      const blink::WebMouseWheelEvent& event) OVERRIDE;
 
   // IPC::Sender implementation.
   virtual bool Send(IPC::Message* message) OVERRIDE;
diff --git a/content/browser/renderer_host/render_widget_host_view_mac.mm b/content/browser/renderer_host/render_widget_host_view_mac.mm
index 122226b..6fcbd6f 100644
--- a/content/browser/renderer_host/render_widget_host_view_mac.mm
+++ b/content/browser/renderer_host/render_widget_host_view_mac.mm
@@ -30,8 +30,6 @@
 #include "content/browser/frame_host/frame_tree.h"
 #include "content/browser/frame_host/frame_tree_node.h"
 #include "content/browser/frame_host/render_frame_host_impl.h"
-#include "content/browser/renderer_host/backing_store_mac.h"
-#include "content/browser/renderer_host/backing_store_manager.h"
 #include "content/browser/renderer_host/compositing_iosurface_context_mac.h"
 #include "content/browser/renderer_host/compositing_iosurface_layer_mac.h"
 #include "content/browser/renderer_host/compositing_iosurface_mac.h"
@@ -72,7 +70,6 @@
 #include "ui/gl/gl_switches.h"
 #include "ui/gl/io_surface_support_mac.h"
 
-using content::BackingStoreMac;
 using content::BrowserAccessibility;
 using content::BrowserAccessibilityManager;
 using content::EditCommand;
@@ -145,13 +142,14 @@
 
 + (BOOL)shouldAutohideCursorForEvent:(NSEvent*)event;
 - (id)initWithRenderWidgetHostViewMac:(RenderWidgetHostViewMac*)r;
-- (void)gotWheelEventConsumed:(BOOL)consumed;
+- (void)gotUnhandledWheelEvent;
+- (void)scrollOffsetPinnedToLeft:(BOOL)left toRight:(BOOL)right;
+- (void)setHasHorizontalScrollbar:(BOOL)has_horizontal_scrollbar;
 - (void)keyEvent:(NSEvent*)theEvent wasKeyEquivalent:(BOOL)equiv;
 - (void)windowDidChangeBackingProperties:(NSNotification*)notification;
 - (void)windowChangedGlobalFrame:(NSNotification*)notification;
-- (void)drawBackingStore:(BackingStoreMac*)backingStore
-               dirtyRect:(CGRect)dirtyRect
-               inContext:(CGContextRef)context;
+- (void)drawWithDirtyRect:(CGRect)dirtyRect
+                inContext:(CGContextRef)context;
 - (void)checkForPluginImeCancellation;
 - (void)updateScreenProperties;
 - (void)setResponderDelegate:
@@ -378,6 +376,8 @@
       [[screen colorSpace] colorSpaceModel] == NSGrayColorSpaceModel;
   results.rect = display.bounds();
   results.availableRect = display.work_area();
+  results.orientationAngle = display.RotationAsDegree();
+
   return results;
 }
 
@@ -784,11 +784,6 @@
     return;
   backing_store_scale_factor_ = new_scale_factor;
 
-  BackingStoreMac* backing_store = static_cast<BackingStoreMac*>(
-      render_widget_host_->GetBackingStore(false));
-  if (backing_store)
-    backing_store->ScaleFactorChanged(backing_store_scale_factor_);
-
   render_widget_host_->NotifyScreenInfoChanged();
 }
 
@@ -931,8 +926,7 @@
 
 bool RenderWidgetHostViewMac::IsSurfaceAvailableForCopy() const {
   return software_frame_manager_->HasCurrentFrame() ||
-         (compositing_iosurface_ && compositing_iosurface_->HasIOSurface()) ||
-         !!render_widget_host_->GetBackingStore(false);
+         (compositing_iosurface_ && compositing_iosurface_->HasIOSurface());
 }
 
 void RenderWidgetHostViewMac::Show() {
@@ -1182,12 +1176,6 @@
   return popup_type_ != blink::WebPopupTypeNone;
 }
 
-BackingStore* RenderWidgetHostViewMac::AllocBackingStore(
-    const gfx::Size& size) {
-  float scale = ScaleFactorForView(cocoa_view_);
-  return new BackingStoreMac(render_widget_host_, size, scale);
-}
-
 void RenderWidgetHostViewMac::CopyFromCompositingSurface(
     const gfx::Rect& src_subrect,
     const gfx::Size& dst_size,
@@ -1278,8 +1266,7 @@
 }
 
 bool RenderWidgetHostViewMac::CanCopyToVideoFrame() const {
-  return (!render_widget_host_->GetBackingStore(false) &&
-          !software_frame_manager_->HasCurrentFrame() &&
+  return (!software_frame_manager_->HasCurrentFrame() &&
           render_widget_host_->is_accelerated_compositing_active() &&
           compositing_iosurface_ &&
           compositing_iosurface_->HasIOSurface());
@@ -1882,10 +1869,13 @@
 
 void RenderWidgetHostViewMac::SetHasHorizontalScrollbar(
     bool has_horizontal_scrollbar) {
+  [cocoa_view_ setHasHorizontalScrollbar:has_horizontal_scrollbar];
 }
 
 void RenderWidgetHostViewMac::SetScrollOffsetPinning(
     bool is_pinned_to_left, bool is_pinned_to_right) {
+  [cocoa_view_ scrollOffsetPinnedToLeft:is_pinned_to_left
+                                toRight:is_pinned_to_right];
 }
 
 bool RenderWidgetHostViewMac::LockMouse() {
@@ -1917,11 +1907,12 @@
     render_widget_host_->LostMouseLock();
 }
 
-void RenderWidgetHostViewMac::HandledWheelEvent(
-    const blink::WebMouseWheelEvent& event,
-    bool consumed) {
+void RenderWidgetHostViewMac::UnhandledWheelEvent(
+    const blink::WebMouseWheelEvent& event) {
+  // Only record a wheel event as unhandled if JavaScript handlers got a chance
+  // to see it (no-op wheel events are ignored by the event dispatcher)
   if (event.deltaX || event.deltaY)
-    [cocoa_view_ gotWheelEventConsumed:consumed];
+    [cocoa_view_ gotUnhandledWheelEvent];
 }
 
 bool RenderWidgetHostViewMac::Send(IPC::Message* message) {
@@ -1967,7 +1958,6 @@
     }
 
     // Delete software backingstore and layer.
-    BackingStoreManager::RemoveBackingStore(render_widget_host_);
     software_frame_manager_->DiscardCurrentFrame();
     DestroySoftwareLayer();
   }
@@ -2387,8 +2377,28 @@
   }
 }
 
-- (void)gotWheelEventConsumed:(BOOL)consumed {
-  [responderDelegate_ gotWheelEventConsumed:consumed];
+- (void)gotUnhandledWheelEvent {
+  if (responderDelegate_ &&
+      [responderDelegate_
+          respondsToSelector:@selector(gotUnhandledWheelEvent)]) {
+    [responderDelegate_ gotUnhandledWheelEvent];
+  }
+}
+
+- (void)scrollOffsetPinnedToLeft:(BOOL)left toRight:(BOOL)right {
+  if (responderDelegate_ &&
+      [responderDelegate_
+          respondsToSelector:@selector(scrollOffsetPinnedToLeft:toRight:)]) {
+    [responderDelegate_ scrollOffsetPinnedToLeft:left toRight:right];
+  }
+}
+
+- (void)setHasHorizontalScrollbar:(BOOL)has_horizontal_scrollbar {
+  if (responderDelegate_ &&
+      [responderDelegate_
+          respondsToSelector:@selector(setHasHorizontalScrollbar:)]) {
+    [responderDelegate_ setHasHorizontalScrollbar:has_horizontal_scrollbar];
+  }
 }
 
 - (BOOL)respondsToSelector:(SEL)selector {
@@ -3135,9 +3145,6 @@
     return;
   }
 
-  BackingStoreMac* backingStore = static_cast<BackingStoreMac*>(
-      renderWidgetHostView_->render_widget_host_->GetBackingStore(false));
-
   const gfx::Rect damagedRect([self flipNSRectToRect:dirtyRect]);
 
   if (renderWidgetHostView_->last_frame_was_accelerated_ &&
@@ -3164,26 +3171,18 @@
 
   CGContextRef context = static_cast<CGContextRef>(
       [[NSGraphicsContext currentContext] graphicsPort]);
-  [self drawBackingStore:backingStore
-               dirtyRect:NSRectToCGRect(dirtyRect)
-               inContext:context];
+  [self drawWithDirtyRect:NSRectToCGRect(dirtyRect)
+                inContext:context];
 }
 
-- (void)drawBackingStore:(BackingStoreMac*)backingStore
-               dirtyRect:(CGRect)dirtyRect
-               inContext:(CGContextRef)context {
+- (void)drawWithDirtyRect:(CGRect)dirtyRect
+                inContext:(CGContextRef)context {
   content::SoftwareFrameManager* software_frame_manager =
       renderWidgetHostView_->software_frame_manager_.get();
-  // There should never be both a legacy software and software composited
-  // frame.
-  DCHECK(!backingStore || !software_frame_manager->HasCurrentFrame());
-
-  if (backingStore || software_frame_manager->HasCurrentFrame()) {
+  if (software_frame_manager->HasCurrentFrame()) {
     // Note: All coordinates are in view units, not pixels.
     gfx::Rect bitmapRect(
-        software_frame_manager->HasCurrentFrame() ?
-            software_frame_manager->GetCurrentFrameSizeInDIP() :
-            backingStore->size());
+            software_frame_manager->GetCurrentFrameSizeInDIP());
 
     // Specify the proper y offset to ensure that the view is rooted to the
     // upper left corner.  This can be negative, if the window was resized
@@ -3195,47 +3194,30 @@
 
     gfx::Rect paintRect = gfx::IntersectRects(bitmapRect, damagedRect);
     if (!paintRect.IsEmpty()) {
-      if (software_frame_manager->HasCurrentFrame()) {
-        // If a software compositor framebuffer is present, draw using that.
-        gfx::Size sizeInPixels =
-            software_frame_manager->GetCurrentFrameSizeInPixels();
-        base::ScopedCFTypeRef<CGDataProviderRef> dataProvider(
-            CGDataProviderCreateWithData(
-                NULL,
-                software_frame_manager->GetCurrentFramePixels(),
-                4 * sizeInPixels.width() * sizeInPixels.height(),
-                NULL));
-        base::ScopedCFTypeRef<CGImageRef> image(
-            CGImageCreate(
-                sizeInPixels.width(),
-                sizeInPixels.height(),
-                8,
-                32,
-                4 * sizeInPixels.width(),
-                base::mac::GetSystemColorSpace(),
-                kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Host,
-                dataProvider,
-                NULL,
-                false,
-                kCGRenderingIntentDefault));
-        CGRect imageRect = bitmapRect.ToCGRect();
-        imageRect.origin.y = yOffset;
-        CGContextDrawImage(context, imageRect, image);
-      } else if (backingStore->cg_layer()) {
-        // If we have a CGLayer, draw that into the window
-        // TODO: add clipping to dirtyRect if it improves drawing performance.
-        CGContextDrawLayerAtPoint(context, CGPointMake(0.0, yOffset),
-                                  backingStore->cg_layer());
-      } else {
-        // If we haven't created a layer yet, draw the cached bitmap into
-        // the window.  The CGLayer will be created the next time the renderer
-        // paints.
-        base::ScopedCFTypeRef<CGImageRef> image(
-            CGBitmapContextCreateImage(backingStore->cg_bitmap()));
-        CGRect imageRect = bitmapRect.ToCGRect();
-        imageRect.origin.y = yOffset;
-        CGContextDrawImage(context, imageRect, image);
-      }
+      gfx::Size sizeInPixels =
+          software_frame_manager->GetCurrentFrameSizeInPixels();
+      base::ScopedCFTypeRef<CGDataProviderRef> dataProvider(
+          CGDataProviderCreateWithData(
+              NULL,
+              software_frame_manager->GetCurrentFramePixels(),
+              4 * sizeInPixels.width() * sizeInPixels.height(),
+              NULL));
+      base::ScopedCFTypeRef<CGImageRef> image(
+          CGImageCreate(
+              sizeInPixels.width(),
+              sizeInPixels.height(),
+              8,
+              32,
+              4 * sizeInPixels.width(),
+              base::mac::GetSystemColorSpace(),
+              kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Host,
+              dataProvider,
+              NULL,
+              false,
+              kCGRenderingIntentDefault));
+      CGRect imageRect = bitmapRect.ToCGRect();
+      imageRect.origin.y = yOffset;
+      CGContextDrawImage(context, imageRect, image);
     }
 
     renderWidgetHostView_->SendPendingLatencyInfoToHost();
@@ -3511,7 +3493,7 @@
     // method returns.
     BrowserAccessibilityManager* manager =
         renderWidgetHostView_->GetBrowserAccessibilityManager();
-    manager->SetFocus(manager->GetFromRendererID(accessibilityObjectId), false);
+    manager->SetFocus(manager->GetFromID(accessibilityObjectId), false);
   }
 }
 
@@ -4312,11 +4294,8 @@
 
   CGRect clipRect = CGContextGetClipBoundingBox(context);
   if (renderWidgetHostView_) {
-    BackingStoreMac* backingStore = static_cast<BackingStoreMac*>(
-        renderWidgetHostView_->render_widget_host_->GetBackingStore(false));
-    [renderWidgetHostView_->cocoa_view() drawBackingStore:backingStore
-                                                dirtyRect:clipRect
-                                                inContext:context];
+    [renderWidgetHostView_->cocoa_view() drawWithDirtyRect:clipRect
+                                                 inContext:context];
   } else {
     CGContextSetFillColorWithColor(context,
                                    CGColorGetConstantColor(kCGColorWhite));
diff --git a/content/browser/renderer_host/render_widget_host_view_mac_unittest.mm b/content/browser/renderer_host/render_widget_host_view_mac_unittest.mm
index 297f1ae..dfdc127 100644
--- a/content/browser/renderer_host/render_widget_host_view_mac_unittest.mm
+++ b/content/browser/renderer_host/render_widget_host_view_mac_unittest.mm
@@ -72,15 +72,16 @@
 }
 
 @property(nonatomic) BOOL unhandledWheelEventReceived;
+
+- (void)gotUnhandledWheelEvent;
 @end
 
 @implementation MockRenderWidgetHostViewMacDelegate
 
 @synthesize unhandledWheelEventReceived = unhandledWheelEventReceived_;
 
-- (void)gotWheelEventConsumed:(BOOL)consumed {
-  if (!consumed)
-    unhandledWheelEventReceived_ = true;
+- (void)gotUnhandledWheelEvent {
+  unhandledWheelEventReceived_ = true;
 }
 - (void)touchesBeganWithEvent:(NSEvent*)event{}
 - (void)touchesMovedWithEvent:(NSEvent*)event{}
diff --git a/content/browser/resources/accessibility/accessibility.js b/content/browser/resources/accessibility/accessibility.js
index 035bc39..37af8e7 100644
--- a/content/browser/resources/accessibility/accessibility.js
+++ b/content/browser/resources/accessibility/accessibility.js
@@ -8,14 +8,19 @@
   // Keep in sync with view_message_enums.h
   var AccessibilityModeFlag = {
     Platform: 1 << 0,
-    PlatformFullTree: 1 << 1
+    FullTree: 1 << 1
   }
 
   var AccessibilityMode = {
     Off: 0,
     Complete:
-        AccessibilityModeFlag.Platform | AccessibilityModeFlag.PlatformFullTree,
-    EditableTextOnly: AccessibilityModeFlag.Platform
+        AccessibilityModeFlag.Platform | AccessibilityModeFlag.FullTree,
+    EditableTextOnly: AccessibilityModeFlag.Platform,
+    TreeOnly: AccessibilityModeFlag.FullTree
+  }
+
+  function isAccessibilityComplete(mode) {
+    return ((mode & AccessibilityMode.Complete) == AccessibilityMode.Complete);
   }
 
   function requestData() {
@@ -73,9 +78,8 @@
   }
 
   function addGlobalAccessibilityModeToggle(global_a11y_mode) {
-    var full_a11y_on = ((global_a11y_mode & AccessibilityMode.Complete)
-        == AccessibilityMode.Complete);
-    $('toggle_global').textContent = (full_a11y_on == 0 ? 'off' : 'on');
+    var full_a11y_on = isAccessibilityComplete(global_a11y_mode);
+    $('toggle_global').textContent = (full_a11y_on ? 'on' : 'off');
     $('toggle_global').addEventListener('click',
                                         toggleGlobalAccessibility);
   }
@@ -107,7 +111,7 @@
       row.appendChild(formatValue(data, properties[j]));
 
     row.appendChild(createToggleAccessibilityElement(data));
-    if (data['a11y_mode'] != 0) {
+    if (isAccessibilityComplete(data['a11y_mode'])) {
       row.appendChild(document.createTextNode(' | '));
       if ('tree' in data) {
         row.appendChild(createShowAccessibilityTreeElement(data, row, true));
@@ -147,8 +151,8 @@
   function createToggleAccessibilityElement(data) {
     var link = document.createElement('a');
     link.setAttribute('href', '#');
-    var a11y_mode = data['a11y_mode'];
-    link.textContent = 'accessibility ' + (a11y_mode == 0 ? 'off' : 'on');
+    var full_a11y_on = isAccessibilityComplete(data['a11y_mode']);
+    link.textContent = 'accessibility ' + (full_a11y_on ? 'on' : 'off');
     link.addEventListener('click',
                           toggleAccessibility.bind(this, data, link));
     return link;
diff --git a/content/browser/resources/devtools/devtools_pinch_cursor.png b/content/browser/resources/devtools/devtools_pinch_cursor.png
index 8f057f0..2d82272 100644
--- a/content/browser/resources/devtools/devtools_pinch_cursor.png
+++ b/content/browser/resources/devtools/devtools_pinch_cursor.png
Binary files differ
diff --git a/content/browser/resources/devtools/devtools_pinch_cursor_2x.png b/content/browser/resources/devtools/devtools_pinch_cursor_2x.png
new file mode 100644
index 0000000..23dd68d
--- /dev/null
+++ b/content/browser/resources/devtools/devtools_pinch_cursor_2x.png
Binary files differ
diff --git a/content/browser/resources/devtools/devtools_touch_cursor.png b/content/browser/resources/devtools/devtools_touch_cursor.png
index f8d8a01..a6e0e80 100644
--- a/content/browser/resources/devtools/devtools_touch_cursor.png
+++ b/content/browser/resources/devtools/devtools_touch_cursor.png
Binary files differ
diff --git a/content/browser/resources/devtools/devtools_touch_cursor_2x.png b/content/browser/resources/devtools/devtools_touch_cursor_2x.png
new file mode 100644
index 0000000..f769f12
--- /dev/null
+++ b/content/browser/resources/devtools/devtools_touch_cursor_2x.png
Binary files differ
diff --git a/content/browser/resources/gpu/info_view.js b/content/browser/resources/gpu/info_view.js
index a680d57..74b13ab 100644
--- a/content/browser/resources/gpu/info_view.js
+++ b/content/browser/resources/gpu/info_view.js
@@ -84,7 +84,7 @@
         '2d_canvas': 'Canvas',
         '3d_css': '3D CSS',
         'css_animation': 'CSS Animation',
-        'compositing': 'Compositing',
+        'gpu_compositing': 'Compositing',
         'webgl': 'WebGL',
         'multisampling': 'WebGL multisampling',
         'flash_3d': 'Flash 3D',
@@ -97,22 +97,22 @@
         // GPU Switching
         'gpu_switching': 'GPU Switching',
         'panel_fitting': 'Panel Fitting',
-        'force_compositing_mode': 'Force Compositing Mode',
-        'raster': 'Rasterization',
+        'rasterization': 'Rasterization',
       };
       var statusLabelMap = {
         'disabled_software': 'Software only. Hardware acceleration disabled.',
         'disabled_software_animated': 'Software animated.',
+        'disabled_software_multithreaded': 'Software only, multi-threaded',
         'disabled_off': 'Unavailable. Hardware acceleration disabled.',
         'software': 'Software rendered. Hardware acceleration not enabled.',
         'unavailable_off': 'Unavailable. Hardware acceleration unavailable',
         'unavailable_software':
             'Software only, hardware acceleration unavailable',
+        'unavailable_software_threaded':
+            'Software only and threaded. Hardware acceleration unavailable.',
         'enabled_readback': 'Hardware accelerated, but at reduced performance',
-        'enabled_force': 'Hardware accelerated on all pages',
-        'enabled_threaded': 'Hardware accelerated on demand and threaded',
-        'enabled_force_threaded':
-            'Hardware accelerated on all pages and threaded',
+        'enabled_force': 'Hardware accelerated',
+        'enabled_threaded': 'Hardware accelerated and threaded.',
         'enabled': 'Hardware accelerated',
         'accelerated': 'Accelerated',
         'accelerated_threaded': 'Accelerated and threaded',
@@ -120,20 +120,20 @@
         'gpu_switching_automatic': 'Automatic switching',
         'gpu_switching_force_discrete': 'Always on discrete GPU',
         'gpu_switching_force_integrated': 'Always on integrated GPU',
-        'disabled_software_multithreaded': 'Software only, multi-threaded',
       };
 
       var statusClassMap = {
         'disabled_software': 'feature-yellow',
         'disabled_software_animated': 'feature-yellow',
+        'disabled_software_multithreaded': 'feature-yellow',
         'disabled_off': 'feature-red',
         'software': 'feature-yellow',
         'unavailable_off': 'feature-red',
         'unavailable_software': 'feature-yellow',
+        'unavailable_software_threaded': 'feature-yellow',
         'enabled_force': 'feature-green',
         'enabled_readback': 'feature-yellow',
         'enabled_threaded': 'feature-green',
-        'enabled_force_threaded': 'feature-green',
         'enabled': 'feature-green',
         'accelerated': 'feature-green',
         'accelerated_threaded': 'feature-green',
@@ -141,7 +141,6 @@
         'gpu_switching_automatic': 'feature-green',
         'gpu_switching_force_discrete': 'feature-red',
         'gpu_switching_force_integrated': 'feature-red',
-        'disabled_software_multithreaded': 'feature-yellow',
       };
 
       // GPU info, basic
diff --git a/content/browser/resources/service_worker/serviceworker_internals.html b/content/browser/resources/service_worker/serviceworker_internals.html
index 0030378..ae85468 100644
--- a/content/browser/resources/service_worker/serviceworker_internals.html
+++ b/content/browser/resources/service_worker/serviceworker_internals.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html>
+﻿<!DOCTYPE html>
 <html i18n-values="dir:textdirection;">
 <head>
   <meta charset="utf-8">
@@ -19,6 +19,10 @@
                 <span>Running Status:</span>
                 <span jscontent="$this.running_status"></span>
             </div>
+            <div class="serviceworker-vid">
+                <span>Version ID:</span>
+                <span jscontent="$this.version_id"></span>
+            </div>
             <div class="serviceworker-pid">
                 <span>Renderer process ID:</span>
                 <span jscontent="$this.process_id"></span>
@@ -27,9 +31,15 @@
                 <span>Renderer thread ID:</span>
                 <span jscontent="$this.thread_id"></span>
             </div>
+            <div>
+                <div>Log:</div>
+                <textarea class="serviceworker-log"
+                  jsvalues=".partition_id:$partition_id;.version_id:$this.version_id"
+                  rows="10" cols="120" readonly jscontent="$this.log"></textarea>
+            </div>
         </div>
         <div id="serviceworker-list-template"
-             jsvalues="$partition_path:$this.partition_path;.partition_path:$this.partition_path">
+             jsvalues="$partition_id:$this.partition_id;$partition_path:$this.partition_path;.partition_path:$this.partition_path">
             <div class="serviceworker-summary">
                 <span>Instances in: </span>
                 <span jscontent="$this.partition_path"></span>
@@ -68,7 +78,7 @@
     </div>
     <h1>ServiceWorker registrations</h1>
     <div class="content">
-        <div id="serviceworker-list">
+        <div id="serviceworker-list"></div>
     </div>
     <script src="chrome://resources/js/util.js"></script>
     <script src="chrome://resources/js/cr.js"></script>
diff --git a/content/browser/resources/service_worker/serviceworker_internals.js b/content/browser/resources/service_worker/serviceworker_internals.js
index 0ce30ef..7ffa11f 100644
--- a/content/browser/resources/service_worker/serviceworker_internals.js
+++ b/content/browser/resources/service_worker/serviceworker_internals.js
@@ -46,8 +46,10 @@
         update();
     }
 
+    var allLogMessages = {};
+
     // Fired once per partition from the backend.
-    function onPartitionData(registrations, partition_path) {
+    function onPartitionData(registrations, partition_id, partition_path) {
         var template;
         var container = $('serviceworker-list');
 
@@ -66,7 +68,25 @@
             container.appendChild(template);
         }
 
+        // Set log for each worker versions.
+        if (!(partition_id in allLogMessages)) {
+            allLogMessages[partition_id] = {};
+        }
+        var logMessages = allLogMessages[partition_id];
+        registrations.forEach(function (worker) {
+            [worker.active, worker.pending].forEach(function (version) {
+                if (version) {
+                    if (version.version_id in logMessages) {
+                        version.log = logMessages[version.version_id];
+                    } else {
+                        version.log = '';
+                    }
+                }
+            });
+        });
+
         jstProcess(new JsEvalContext({ registrations: registrations,
+                                       partition_id: partition_id,
                                        partition_path: partition_path}),
                    template);
         for (var i = 0; i < COMMANDS.length; ++i) {
@@ -81,10 +101,69 @@
         }
     }
 
+    function onWorkerStarted(partition_id, version_id, process_id, thread_id) {
+        update();
+    }
+
+    function onWorkerStopped(partition_id, version_id, process_id, thread_id) {
+        update();
+    }
+
+    function onErrorReported(partition_id,
+                             version_id,
+                             process_id,
+                             thread_id,
+                             error_info) {
+        outputLogMessage(partition_id,
+                         version_id,
+                         'Error: ' + JSON.stringify(error_info) + '\n');
+    }
+
+    function onConsoleMessageReported(partition_id,
+                             version_id,
+                             process_id,
+                             thread_id,
+                             message) {
+        outputLogMessage(partition_id,
+                         version_id,
+                         'Console: ' + JSON.stringify(message) + '\n');
+    }
+
+    function onVersionStateChanged(partition_id, version_id) {
+        update();
+    }
+
+    function outputLogMessage(partition_id, version_id, message) {
+        if (!(partition_id in allLogMessages)) {
+            allLogMessages[partition_id] = {};
+        }
+        var logMessages = allLogMessages[partition_id];
+        if (version_id in logMessages) {
+            logMessages[version_id] += message;
+        } else {
+            logMessages[version_id] = message;
+        }
+
+        var logAreas =
+            document.querySelectorAll('textarea.serviceworker-log');
+        for (var i = 0; i < logAreas.length; ++i) {
+            var logArea = logAreas[i];
+            if (logArea.partition_id == partition_id &&
+                logArea.version_id == version_id) {
+                logArea.value += message;
+            }
+        }
+    }
+
     return {
         update: update,
         onOperationComplete: onOperationComplete,
         onPartitionData: onPartitionData,
+        onWorkerStarted: onWorkerStarted,
+        onWorkerStopped: onWorkerStopped,
+        onErrorReported: onErrorReported,
+        onConsoleMessageReported: onConsoleMessageReported,
+        onVersionStateChanged: onVersionStateChanged,
     };
 });
 
diff --git a/content/browser/screen_orientation/screen_orientation_dispatcher_host.cc b/content/browser/screen_orientation/screen_orientation_dispatcher_host.cc
index 5127c78..fc443ec 100644
--- a/content/browser/screen_orientation/screen_orientation_dispatcher_host.cc
+++ b/content/browser/screen_orientation/screen_orientation_dispatcher_host.cc
@@ -34,7 +34,7 @@
 }
 
 void ScreenOrientationDispatcherHost::OnOrientationChange(
-    blink::WebScreenOrientation orientation) {
+    blink::WebScreenOrientationType orientation) {
   Send(new ScreenOrientationMsg_OrientationChange(orientation));
 }
 
@@ -44,11 +44,11 @@
 }
 
 void ScreenOrientationDispatcherHost::OnLockRequest(
-    blink::WebScreenOrientations orientations) {
+    blink::WebScreenOrientationLockType orientation) {
   if (!provider_.get())
     return;
 
-  provider_->LockOrientation(orientations);
+  provider_->LockOrientation(orientation);
 }
 
 void ScreenOrientationDispatcherHost::OnUnlockRequest() {
diff --git a/content/browser/screen_orientation/screen_orientation_dispatcher_host.h b/content/browser/screen_orientation/screen_orientation_dispatcher_host.h
index 2047e4e..28cd75d 100644
--- a/content/browser/screen_orientation/screen_orientation_dispatcher_host.h
+++ b/content/browser/screen_orientation/screen_orientation_dispatcher_host.h
@@ -6,7 +6,8 @@
 #define CONTENT_BROWSER_SCREEN_ORIENTATION_SCREEN_ORIENTATION_DISPATCHER_HOST_H_
 
 #include "content/public/browser/browser_message_filter.h"
-#include "third_party/WebKit/public/platform/WebScreenOrientation.h"
+#include "third_party/WebKit/public/platform/WebScreenOrientationLockType.h"
+#include "third_party/WebKit/public/platform/WebScreenOrientationType.h"
 
 namespace content {
 
@@ -23,14 +24,14 @@
   // BrowserMessageFilter
   virtual bool OnMessageReceived(const IPC::Message&, bool*) OVERRIDE;
 
-  void OnOrientationChange(blink::WebScreenOrientation orientation);
+  void OnOrientationChange(blink::WebScreenOrientationType orientation);
 
   void SetProviderForTests(ScreenOrientationProvider* provider);
 
  private:
   virtual ~ScreenOrientationDispatcherHost();
 
-  void OnLockRequest(blink::WebScreenOrientations orientations);
+  void OnLockRequest(blink::WebScreenOrientationLockType orientations);
   void OnUnlockRequest();
 
   static ScreenOrientationProvider* CreateProvider();
diff --git a/content/browser/screen_orientation/screen_orientation_dispatcher_host_unittest.cc b/content/browser/screen_orientation/screen_orientation_dispatcher_host_unittest.cc
index af1f595..3c50ca8 100644
--- a/content/browser/screen_orientation/screen_orientation_dispatcher_host_unittest.cc
+++ b/content/browser/screen_orientation/screen_orientation_dispatcher_host_unittest.cc
@@ -14,11 +14,13 @@
 
 class MockScreenOrientationProvider : public ScreenOrientationProvider {
  public:
-  MockScreenOrientationProvider() : orientations_(0), unlock_called_(false) {}
+  MockScreenOrientationProvider()
+      : orientation_(blink::WebScreenOrientationLockPortraitPrimary),
+        unlock_called_(false) {}
 
-  virtual void LockOrientation(blink::WebScreenOrientations orientations)
+  virtual void LockOrientation(blink::WebScreenOrientationLockType orientation)
       OVERRIDE {
-    orientations_ = orientations;
+    orientation_ = orientation;
 
   }
 
@@ -26,8 +28,8 @@
     unlock_called_ = true;
   }
 
-  blink::WebScreenOrientations orientations() const {
-    return orientations_;
+  blink::WebScreenOrientationLockType orientation() const {
+    return orientation_;
   }
 
   bool unlock_called() const {
@@ -37,7 +39,7 @@
   virtual ~MockScreenOrientationProvider() {}
 
  private:
-  blink::WebScreenOrientations orientations_;
+  blink::WebScreenOrientationLockType orientation_;
   bool unlock_called_;
 
   DISALLOW_COPY_AND_ASSIGN(MockScreenOrientationProvider);
@@ -63,8 +65,8 @@
 
   bool message_was_ok = false;
   bool message_was_handled = dispatcher_->OnMessageReceived(
-      ScreenOrientationHostMsg_Lock(blink::WebScreenOrientationPortraitPrimary),
-          &message_was_ok);
+      ScreenOrientationHostMsg_Lock(
+          blink::WebScreenOrientationLockPortraitPrimary), &message_was_ok);
 
   EXPECT_TRUE(message_was_ok);
   EXPECT_TRUE(message_was_handled);
@@ -74,43 +76,32 @@
 // ScreenOrientationProvider.
 TEST_F(ScreenOrientationDispatcherHostTest, ProviderLock) {
   // If we change this array, update |orientationsToTestCount| below.
-  blink::WebScreenOrientations orientationsToTest[] = {
-    // The basic types.
-    blink::WebScreenOrientationPortraitPrimary,
-    blink::WebScreenOrientationPortraitSecondary,
-    blink::WebScreenOrientationLandscapePrimary,
-    blink::WebScreenOrientationLandscapeSecondary,
-    // Some unions.
-    blink::WebScreenOrientationLandscapePrimary |
-        blink::WebScreenOrientationPortraitPrimary,
-    blink::WebScreenOrientationLandscapePrimary |
-        blink::WebScreenOrientationPortraitSecondary,
-    blink::WebScreenOrientationPortraitPrimary |
-        blink::WebScreenOrientationPortraitSecondary |
-        blink::WebScreenOrientationLandscapePrimary |
-        blink::WebScreenOrientationLandscapeSecondary,
-    // Garbage values.
-    0,
-    100,
-    42
+  blink::WebScreenOrientationLockType orientationsToTest[] = {
+    blink::WebScreenOrientationLockPortraitPrimary,
+    blink::WebScreenOrientationLockPortraitSecondary,
+    blink::WebScreenOrientationLockLandscapePrimary,
+    blink::WebScreenOrientationLockLandscapeSecondary,
+    blink::WebScreenOrientationLockPortrait,
+    blink::WebScreenOrientationLockLandscapePrimary,
+    blink::WebScreenOrientationLockAny
   };
 
   // Unfortunately, initializer list constructor for std::list is not yet
   // something we can use.
   // Keep this in sync with |orientationsToTest|.
-  int orientationsToTestCount = 10;
+  int orientationsToTestCount = 7;
 
   for (int i = 0; i < orientationsToTestCount; ++i) {
     bool message_was_ok = false;
     bool message_was_handled = false;
-    blink::WebScreenOrientations orientations = orientationsToTest[i];
+    blink::WebScreenOrientationLockType orientation = orientationsToTest[i];
 
     message_was_handled = dispatcher_->OnMessageReceived(
-        ScreenOrientationHostMsg_Lock(orientations), &message_was_ok);
+        ScreenOrientationHostMsg_Lock(orientation), &message_was_ok);
 
     EXPECT_TRUE(message_was_ok);
     EXPECT_TRUE(message_was_handled);
-    EXPECT_EQ(orientations, provider_->orientations());
+    EXPECT_EQ(orientation, provider_->orientation());
   }
 }
 
diff --git a/content/browser/screen_orientation/screen_orientation_provider.h b/content/browser/screen_orientation/screen_orientation_provider.h
index 74296c1..4ae8588 100644
--- a/content/browser/screen_orientation/screen_orientation_provider.h
+++ b/content/browser/screen_orientation/screen_orientation_provider.h
@@ -5,7 +5,7 @@
 #ifndef CONTENT_BROWSER_SCREEN_ORIENTATION_SCREEN_ORIENTATION_PROVIDER_H_
 #define CONTENT_BROWSER_SCREEN_ORIENTATION_SCREEN_ORIENTATION_PROVIDER_H_
 
-#include "third_party/WebKit/public/platform/WebScreenOrientation.h"
+#include "third_party/WebKit/public/platform/WebScreenOrientationLockType.h"
 
 namespace content {
 
@@ -14,7 +14,8 @@
 class ScreenOrientationProvider {
  public:
   // Lock the screen orientation to |orientations|.
-  virtual void LockOrientation(blink::WebScreenOrientations orientations) = 0;
+  virtual void LockOrientation(
+      blink::WebScreenOrientationLockType orientations) = 0;
 
   // Unlock the screen orientation.
   virtual void UnlockOrientation() = 0;
diff --git a/content/browser/screen_orientation/screen_orientation_provider_android.cc b/content/browser/screen_orientation/screen_orientation_provider_android.cc
index a95d69a..e8961bc 100644
--- a/content/browser/screen_orientation/screen_orientation_provider_android.cc
+++ b/content/browser/screen_orientation/screen_orientation_provider_android.cc
@@ -21,7 +21,7 @@
 }
 
 void ScreenOrientationProviderAndroid::LockOrientation(
-    blink::WebScreenOrientations orientations) {
+    blink::WebScreenOrientationLockType orientation) {
   if (j_screen_orientation_provider_.is_null()) {
     j_screen_orientation_provider_.Reset(Java_ScreenOrientationProvider_create(
         base::android::AttachCurrentThread()));
@@ -29,7 +29,7 @@
 
   Java_ScreenOrientationProvider_lockOrientation(
       base::android::AttachCurrentThread(),
-      j_screen_orientation_provider_.obj(), orientations);
+      j_screen_orientation_provider_.obj(), orientation);
 }
 
 void ScreenOrientationProviderAndroid::UnlockOrientation() {
diff --git a/content/browser/screen_orientation/screen_orientation_provider_android.h b/content/browser/screen_orientation/screen_orientation_provider_android.h
index 69bfba3..a526e24 100644
--- a/content/browser/screen_orientation/screen_orientation_provider_android.h
+++ b/content/browser/screen_orientation/screen_orientation_provider_android.h
@@ -18,7 +18,7 @@
   static bool Register(JNIEnv* env);
 
   // ScreenOrientationProvider
-  virtual void LockOrientation(blink::WebScreenOrientations) OVERRIDE;
+  virtual void LockOrientation(blink::WebScreenOrientationLockType) OVERRIDE;
   virtual void UnlockOrientation() OVERRIDE;
 
  private:
diff --git a/content/browser/service_worker/DEPS b/content/browser/service_worker/DEPS
new file mode 100644
index 0000000..743a2f3
--- /dev/null
+++ b/content/browser/service_worker/DEPS
@@ -0,0 +1,3 @@
+include_rules = [
+  "+third_party/leveldatabase",
+]
diff --git a/content/browser/service_worker/embedded_worker_instance.cc b/content/browser/service_worker/embedded_worker_instance.cc
index eaa8b46..bc82f7a 100644
--- a/content/browser/service_worker/embedded_worker_instance.cc
+++ b/content/browser/service_worker/embedded_worker_instance.cc
@@ -17,16 +17,18 @@
 
 ServiceWorkerStatusCode EmbeddedWorkerInstance::Start(
     int64 service_worker_version_id,
+    const GURL& scope,
     const GURL& script_url) {
   DCHECK(status_ == STOPPED);
   if (!ChooseProcess())
     return SERVICE_WORKER_ERROR_PROCESS_NOT_FOUND;
   status_ = STARTING;
-  ServiceWorkerStatusCode status = registry_->StartWorker(
-      process_id_,
-      embedded_worker_id_,
-      service_worker_version_id,
-      script_url);
+  ServiceWorkerStatusCode status =
+      registry_->StartWorker(process_id_,
+                             embedded_worker_id_,
+                             service_worker_version_id,
+                             scope,
+                             script_url);
   if (status != SERVICE_WORKER_OK) {
     status_ = STOPPED;
     process_id_ = -1;
@@ -48,7 +50,7 @@
     const IPC::Message& message) {
   DCHECK(status_ == RUNNING);
   return registry_->Send(process_id_,
-                         new EmbeddedWorkerContextMsg_SendMessageToWorker(
+                         new EmbeddedWorkerContextMsg_MessageToWorker(
                              thread_id_, embedded_worker_id_,
                              request_id, message));
 }
@@ -87,28 +89,65 @@
   DCHECK(status_ == STARTING);
   status_ = RUNNING;
   thread_id_ = thread_id;
-  FOR_EACH_OBSERVER(Observer, observer_list_, OnStarted());
+  FOR_EACH_OBSERVER(Listener, listener_list_, OnStarted());
 }
 
 void EmbeddedWorkerInstance::OnStopped() {
   status_ = STOPPED;
   process_id_ = -1;
   thread_id_ = -1;
-  FOR_EACH_OBSERVER(Observer, observer_list_, OnStopped());
+  FOR_EACH_OBSERVER(Listener, listener_list_, OnStopped());
 }
 
-void EmbeddedWorkerInstance::OnMessageReceived(int request_id,
-                                               const IPC::Message& message) {
-  FOR_EACH_OBSERVER(Observer, observer_list_,
-                    OnMessageReceived(request_id, message));
+bool EmbeddedWorkerInstance::OnMessageReceived(const IPC::Message& message) {
+  ListenerList::Iterator it(listener_list_);
+  while (Listener* listener = it.GetNext()) {
+    if (listener->OnMessageReceived(message))
+      return true;
+  }
+  return false;
 }
 
-void EmbeddedWorkerInstance::AddObserver(Observer* observer) {
-  observer_list_.AddObserver(observer);
+bool EmbeddedWorkerInstance::OnReplyReceived(int request_id,
+                                             const IPC::Message& message) {
+  ListenerList::Iterator it(listener_list_);
+  while (Listener* listener = it.GetNext()) {
+    if (listener->OnReplyReceived(request_id, message))
+      return true;
+  }
+  return false;
 }
 
-void EmbeddedWorkerInstance::RemoveObserver(Observer* observer) {
-  observer_list_.RemoveObserver(observer);
+void EmbeddedWorkerInstance::OnReportException(
+    const base::string16& error_message,
+    int line_number,
+    int column_number,
+    const GURL& source_url) {
+  FOR_EACH_OBSERVER(
+      Listener,
+      listener_list_,
+      OnReportException(error_message, line_number, column_number, source_url));
+}
+
+void EmbeddedWorkerInstance::OnReportConsoleMessage(
+    int source_identifier,
+    int message_level,
+    const base::string16& message,
+    int line_number,
+    const GURL& source_url) {
+  FOR_EACH_OBSERVER(
+      Listener,
+      listener_list_,
+      OnReportConsoleMessage(
+          source_identifier, message_level, message, line_number, source_url));
+}
+
+void EmbeddedWorkerInstance::AddListener(Listener* listener) {
+  listener_list_.AddObserver(listener);
+}
+
+void EmbeddedWorkerInstance::RemoveListener(Listener* listener) {
+  listener_list_.RemoveObserver(listener);
 }
 
 bool EmbeddedWorkerInstance::ChooseProcess() {
diff --git a/content/browser/service_worker/embedded_worker_instance.h b/content/browser/service_worker/embedded_worker_instance.h
index e332419..7eec2be 100644
--- a/content/browser/service_worker/embedded_worker_instance.h
+++ b/content/browser/service_worker/embedded_worker_instance.h
@@ -13,6 +13,7 @@
 #include "base/logging.h"
 #include "base/memory/ref_counted.h"
 #include "base/observer_list.h"
+#include "base/strings/string16.h"
 #include "content/common/content_export.h"
 #include "content/common/service_worker/service_worker_status_code.h"
 
@@ -39,13 +40,26 @@
     STOPPING,
   };
 
-  class Observer {
+  class Listener {
    public:
-    virtual ~Observer() {}
+    virtual ~Listener() {}
     virtual void OnStarted() = 0;
     virtual void OnStopped() = 0;
-    virtual void OnMessageReceived(int request_id,
-                                   const IPC::Message& message) = 0;
+    virtual void OnReportException(const base::string16& error_message,
+                                   int line_number,
+                                   int column_number,
+                                   const GURL& source_url) {}
+    virtual void OnReportConsoleMessage(int source_identifier,
+                                        int message_level,
+                                        const base::string16& message,
+                                        int line_number,
+                                        const GURL& source_url) {}
+    // These should return false if the message is not handled by this
+    // listener. (TODO(kinuko): consider using IPC::Listener interface)
+    // TODO(kinuko): Deprecate OnReplyReceived.
+    virtual bool OnMessageReceived(const IPC::Message& message) = 0;
+    virtual bool OnReplyReceived(int request_id,
+                                 const IPC::Message& message) = 0;
   };
 
   ~EmbeddedWorkerInstance();
@@ -53,6 +67,7 @@
   // Starts the worker. It is invalid to call this when the worker is
   // not in STOPPED status.
   ServiceWorkerStatusCode Start(int64 service_worker_version_id,
+                                const GURL& scope,
                                 const GURL& script_url);
 
   // Stops the worker. It is invalid to call this when the worker is
@@ -80,10 +95,12 @@
   int process_id() const { return process_id_; }
   int thread_id() const { return thread_id_; }
 
-  void AddObserver(Observer* observer);
-  void RemoveObserver(Observer* observer);
+  void AddListener(Listener* listener);
+  void RemoveListener(Listener* listener);
 
  private:
+  typedef ObserverList<Listener> ListenerList;
+
   friend class EmbeddedWorkerRegistry;
   FRIEND_TEST_ALL_PREFIXES(EmbeddedWorkerInstanceTest, StartAndStop);
 
@@ -108,7 +125,22 @@
 
   // Called back from Registry when the worker instance sends message
   // to the browser (i.e. EmbeddedWorker observers).
-  void OnMessageReceived(int request_id, const IPC::Message& message);
+  // Returns false if the message is not handled.
+  bool OnMessageReceived(const IPC::Message& message);
+  bool OnReplyReceived(int request_id, const IPC::Message& message);
+
+  // Called back from Registry when the worker instance reports the exception.
+  void OnReportException(const base::string16& error_message,
+                         int line_number,
+                         int column_number,
+                         const GURL& source_url);
+
+  // Called back from Registry when the worker instance reports to the console.
+  void OnReportConsoleMessage(int source_identifier,
+                              int message_level,
+                              const base::string16& message,
+                              int line_number,
+                              const GURL& source_url);
 
   // Chooses a process to start this worker and populate process_id_.
   // Returns false when no process is available.
@@ -123,7 +155,7 @@
   int thread_id_;
 
   ProcessRefMap process_refs_;
-  ObserverList<Observer> observer_list_;
+  ListenerList listener_list_;
 
   DISALLOW_COPY_AND_ASSIGN(EmbeddedWorkerInstance);
 };
diff --git a/content/browser/service_worker/embedded_worker_instance_unittest.cc b/content/browser/service_worker/embedded_worker_instance_unittest.cc
index 3aaf820..f78ba81 100644
--- a/content/browser/service_worker/embedded_worker_instance_unittest.cc
+++ b/content/browser/service_worker/embedded_worker_instance_unittest.cc
@@ -23,7 +23,7 @@
       : thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP) {}
 
   virtual void SetUp() OVERRIDE {
-    context_.reset(new ServiceWorkerContextCore(base::FilePath(), NULL));
+    context_.reset(new ServiceWorkerContextCore(base::FilePath(), NULL, NULL));
     helper_.reset(new EmbeddedWorkerTestHelper(
         context_.get(), kRenderProcessId));
   }
@@ -54,11 +54,12 @@
 
   const int embedded_worker_id = worker->embedded_worker_id();
   const int64 service_worker_version_id = 55L;
+  const GURL scope("http://example.com/*");
   const GURL url("http://example.com/worker.js");
 
   // This fails as we have no available process yet.
   EXPECT_EQ(SERVICE_WORKER_ERROR_PROCESS_NOT_FOUND,
-            worker->Start(service_worker_version_id, url));
+            worker->Start(service_worker_version_id, scope, url));
   EXPECT_EQ(EmbeddedWorkerInstance::STOPPED, worker->status());
 
   // Simulate adding one process to the worker.
@@ -66,7 +67,7 @@
 
   // Start should succeed.
   EXPECT_EQ(SERVICE_WORKER_OK,
-            worker->Start(service_worker_version_id, url));
+            worker->Start(service_worker_version_id, scope, url));
   EXPECT_EQ(EmbeddedWorkerInstance::STARTING, worker->status());
   base::RunLoop().RunUntilIdle();
 
@@ -106,7 +107,9 @@
 
   // Process 3 has the biggest # of references and it should be chosen.
   EXPECT_EQ(SERVICE_WORKER_OK,
-            worker->Start(1L, GURL("http://example.com/worker.js")));
+            worker->Start(1L,
+                          GURL("http://example.com/*"),
+                          GURL("http://example.com/worker.js")));
   EXPECT_EQ(EmbeddedWorkerInstance::STARTING, worker->status());
   EXPECT_EQ(3, worker->process_id());
 
diff --git a/content/browser/service_worker/embedded_worker_registry.cc b/content/browser/service_worker/embedded_worker_registry.cc
index 3902fee..0937e68 100644
--- a/content/browser/service_worker/embedded_worker_registry.cc
+++ b/content/browser/service_worker/embedded_worker_registry.cc
@@ -8,7 +8,6 @@
 #include "content/browser/service_worker/embedded_worker_instance.h"
 #include "content/browser/service_worker/service_worker_context_core.h"
 #include "content/common/service_worker/embedded_worker_messages.h"
-#include "content/common/service_worker/service_worker_messages.h"
 #include "ipc/ipc_message.h"
 #include "ipc/ipc_sender.h"
 
@@ -30,11 +29,12 @@
     int process_id,
     int embedded_worker_id,
     int64 service_worker_version_id,
+    const GURL& scope,
     const GURL& script_url) {
-  return Send(process_id,
-              new EmbeddedWorkerMsg_StartWorker(embedded_worker_id,
-                                               service_worker_version_id,
-                                               script_url));
+  return Send(
+      process_id,
+      new EmbeddedWorkerMsg_StartWorker(
+          embedded_worker_id, service_worker_version_id, scope, script_url));
 }
 
 ServiceWorkerStatusCode EmbeddedWorkerRegistry::StopWorker(
@@ -43,6 +43,18 @@
               new EmbeddedWorkerMsg_StopWorker(embedded_worker_id));
 }
 
+bool EmbeddedWorkerRegistry::OnMessageReceived(const IPC::Message& message) {
+  // TODO(kinuko): Move all EmbeddedWorker message handling from
+  // ServiceWorkerDispatcherHost.
+
+  WorkerInstanceMap::iterator found = worker_map_.find(message.routing_id());
+  if (found == worker_map_.end()) {
+    LOG(ERROR) << "Worker " << message.routing_id() << " not registered";
+    return false;
+  }
+  return found->second->OnMessageReceived(message);
+}
+
 void EmbeddedWorkerRegistry::OnWorkerStarted(
     int process_id, int thread_id, int embedded_worker_id) {
   DCHECK(!ContainsKey(worker_process_map_, process_id) ||
@@ -69,24 +81,45 @@
   found->second->OnStopped();
 }
 
-void EmbeddedWorkerRegistry::OnSendMessageToBrowser(
+bool EmbeddedWorkerRegistry::OnReplyToBrowser(
     int embedded_worker_id, int request_id, const IPC::Message& message) {
   WorkerInstanceMap::iterator found = worker_map_.find(embedded_worker_id);
   if (found == worker_map_.end()) {
     LOG(ERROR) << "Worker " << embedded_worker_id << " not registered";
+    return false;
+  }
+  return found->second->OnReplyReceived(request_id, message);
+}
+
+void EmbeddedWorkerRegistry::OnReportException(
+    int embedded_worker_id,
+    const base::string16& error_message,
+    int line_number,
+    int column_number,
+    const GURL& source_url) {
+  WorkerInstanceMap::iterator found = worker_map_.find(embedded_worker_id);
+  if (found == worker_map_.end()) {
+    LOG(ERROR) << "Worker " << embedded_worker_id << " not registered";
     return;
   }
-  // Perform security check to filter out any unexpected (and non-test)
-  // messages. This must list up all message types that can go through here.
-  if (message.type() == ServiceWorkerHostMsg_ActivateEventFinished::ID ||
-      message.type() == ServiceWorkerHostMsg_InstallEventFinished::ID ||
-      message.type() == ServiceWorkerHostMsg_FetchEventFinished::ID ||
-      message.type() == ServiceWorkerHostMsg_SyncEventFinished::ID ||
-      IPC_MESSAGE_CLASS(message) == TestMsgStart) {
-    found->second->OnMessageReceived(request_id, message);
+  found->second->OnReportException(
+      error_message, line_number, column_number, source_url);
+}
+
+void EmbeddedWorkerRegistry::OnReportConsoleMessage(
+    int embedded_worker_id,
+    int source_identifier,
+    int message_level,
+    const base::string16& message,
+    int line_number,
+    const GURL& source_url) {
+  WorkerInstanceMap::iterator found = worker_map_.find(embedded_worker_id);
+  if (found == worker_map_.end()) {
+    LOG(ERROR) << "Worker " << embedded_worker_id << " not registered";
     return;
   }
-  NOTREACHED() << "Got unexpected message: " << message.type();
+  found->second->OnReportConsoleMessage(
+      source_identifier, message_level, message, line_number, source_url);
 }
 
 void EmbeddedWorkerRegistry::AddChildProcessSender(
diff --git a/content/browser/service_worker/embedded_worker_registry.h b/content/browser/service_worker/embedded_worker_registry.h
index eb2e97d..7637b66 100644
--- a/content/browser/service_worker/embedded_worker_registry.h
+++ b/content/browser/service_worker/embedded_worker_registry.h
@@ -12,6 +12,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/strings/string16.h"
 #include "content/common/content_export.h"
 #include "content/common/service_worker/service_worker_status_code.h"
 
@@ -38,6 +39,8 @@
   explicit EmbeddedWorkerRegistry(
       base::WeakPtr<ServiceWorkerContextCore> context);
 
+  bool OnMessageReceived(const IPC::Message& message);
+
   // Creates and removes a new worker instance entry for bookkeeping.
   // This doesn't actually start or stop the worker.
   scoped_ptr<EmbeddedWorkerInstance> CreateWorker();
@@ -46,6 +49,7 @@
   ServiceWorkerStatusCode StartWorker(int process_id,
                                       int embedded_worker_id,
                                       int64 service_worker_version_id,
+                                      const GURL& scope,
                                       const GURL& script_url);
   ServiceWorkerStatusCode StopWorker(int process_id,
                                      int embedded_worker_id);
@@ -54,11 +58,21 @@
   // ServiceWorkerDispatcherHost.
   void OnWorkerStarted(int process_id, int thread_id, int embedded_worker_id);
   void OnWorkerStopped(int process_id, int embedded_worker_id);
-  // FIXME(dominicc): Rename this. The name leads to confusion that
-  // this sends a message to the browser itself.
-  void OnSendMessageToBrowser(int embedded_worker_id,
-                              int request_id,
-                              const IPC::Message& message);
+  bool OnReplyToBrowser(int embedded_worker_id,
+                        int request_id,
+                        const IPC::Message& message);
+
+  void OnReportException(int embedded_worker_id,
+                         const base::string16& error_message,
+                         int line_number,
+                         int column_number,
+                         const GURL& source_url);
+  void OnReportConsoleMessage(int embedded_worker_id,
+                              int source_identifier,
+                              int message_level,
+                              const base::string16& message,
+                              int line_number,
+                              const GURL& source_url);
 
   // Keeps a map from process_id to sender information.
   void AddChildProcessSender(int process_id, IPC::Sender* sender);
diff --git a/content/browser/service_worker/embedded_worker_test_helper.cc b/content/browser/service_worker/embedded_worker_test_helper.cc
index 4b940df..44d2709 100644
--- a/content/browser/service_worker/embedded_worker_test_helper.cc
+++ b/content/browser/service_worker/embedded_worker_test_helper.cc
@@ -46,8 +46,8 @@
   IPC_BEGIN_MESSAGE_MAP(EmbeddedWorkerTestHelper, message)
     IPC_MESSAGE_HANDLER(EmbeddedWorkerMsg_StartWorker, OnStartWorkerStub)
     IPC_MESSAGE_HANDLER(EmbeddedWorkerMsg_StopWorker, OnStopWorkerStub)
-    IPC_MESSAGE_HANDLER(EmbeddedWorkerContextMsg_SendMessageToWorker,
-                        OnSendMessageToWorkerStub)
+    IPC_MESSAGE_HANDLER(EmbeddedWorkerContextMsg_MessageToWorker,
+                        OnMessageToWorkerStub)
     IPC_MESSAGE_UNHANDLED(handled = false)
   IPC_END_MESSAGE_MAP()
 
@@ -61,6 +61,7 @@
 void EmbeddedWorkerTestHelper::OnStartWorker(
     int embedded_worker_id,
     int64 service_worker_version_id,
+    const GURL& scope,
     const GURL& script_url) {
   // By default just notify the sender that the worker is started.
   SimulateWorkerStarted(next_thread_id_++, embedded_worker_id);
@@ -71,7 +72,7 @@
   SimulateWorkerStopped(embedded_worker_id);
 }
 
-bool EmbeddedWorkerTestHelper::OnSendMessageToWorker(
+bool EmbeddedWorkerTestHelper::OnMessageToWorker(
     int thread_id,
     int embedded_worker_id,
     int request_id,
@@ -92,7 +93,7 @@
 
 void EmbeddedWorkerTestHelper::OnActivateEvent(int embedded_worker_id,
                                                int request_id) {
-  SimulateSendMessageToBrowser(
+  SimulateSendReplyToBrowser(
       embedded_worker_id,
       request_id,
       ServiceWorkerHostMsg_ActivateEventFinished(
@@ -102,7 +103,7 @@
 void EmbeddedWorkerTestHelper::OnInstallEvent(int embedded_worker_id,
                                               int request_id,
                                               int active_version_id) {
-  SimulateSendMessageToBrowser(
+  SimulateSendReplyToBrowser(
       embedded_worker_id,
       request_id,
       ServiceWorkerHostMsg_InstallEventFinished(
@@ -113,7 +114,7 @@
     int embedded_worker_id,
     int request_id,
     const ServiceWorkerFetchRequest& request) {
-  SimulateSendMessageToBrowser(
+  SimulateSendReplyToBrowser(
       embedded_worker_id,
       request_id,
       ServiceWorkerHostMsg_FetchEventFinished(
@@ -139,14 +140,21 @@
   registry()->OnWorkerStopped(worker->process_id(), embedded_worker_id);
 }
 
-void EmbeddedWorkerTestHelper::SimulateSendMessageToBrowser(
+void EmbeddedWorkerTestHelper::SimulateSend(
+    IPC::Message* message) {
+  registry()->OnMessageReceived(*message);
+  delete message;
+}
+
+void EmbeddedWorkerTestHelper::SimulateSendReplyToBrowser(
     int embedded_worker_id, int request_id, const IPC::Message& message) {
-  registry()->OnSendMessageToBrowser(embedded_worker_id, request_id, message);
+  registry()->OnReplyToBrowser(embedded_worker_id, request_id, message);
 }
 
 void EmbeddedWorkerTestHelper::OnStartWorkerStub(
     int embedded_worker_id,
     int64 service_worker_version_id,
+    const GURL& scope,
     const GURL& script_url) {
   EmbeddedWorkerInstance* worker = registry()->GetWorker(embedded_worker_id);
   ASSERT_TRUE(worker != NULL);
@@ -157,6 +165,7 @@
                  weak_factory_.GetWeakPtr(),
                  embedded_worker_id,
                  service_worker_version_id,
+                 scope,
                  script_url));
 }
 
@@ -170,7 +179,7 @@
                  embedded_worker_id));
 }
 
-void EmbeddedWorkerTestHelper::OnSendMessageToWorkerStub(
+void EmbeddedWorkerTestHelper::OnMessageToWorkerStub(
     int thread_id,
     int embedded_worker_id,
     int request_id,
@@ -181,7 +190,7 @@
   base::MessageLoopProxy::current()->PostTask(
       FROM_HERE,
       base::Bind(
-          base::IgnoreResult(&EmbeddedWorkerTestHelper::OnSendMessageToWorker),
+          base::IgnoreResult(&EmbeddedWorkerTestHelper::OnMessageToWorker),
           weak_factory_.GetWeakPtr(),
           thread_id,
           embedded_worker_id,
diff --git a/content/browser/service_worker/embedded_worker_test_helper.h b/content/browser/service_worker/embedded_worker_test_helper.h
index 0fe5f5e..a7424bc 100644
--- a/content/browser/service_worker/embedded_worker_test_helper.h
+++ b/content/browser/service_worker/embedded_worker_test_helper.h
@@ -70,17 +70,18 @@
   // - OnSendMessageToWorker calls the message's respective On*Event handler
   virtual void OnStartWorker(int embedded_worker_id,
                              int64 service_worker_version_id,
+                             const GURL& scope,
                              const GURL& script_url);
   virtual void OnStopWorker(int embedded_worker_id);
-  virtual bool OnSendMessageToWorker(int thread_id,
-                                     int embedded_worker_id,
-                                     int request_id,
-                                     const IPC::Message& message);
+  virtual bool OnMessageToWorker(int thread_id,
+                                 int embedded_worker_id,
+                                 int request_id,
+                                 const IPC::Message& message);
 
   // On*Event handlers. Called by the default implementation of
-  // OnSendMessageToWorker when events are sent to the embedded
+  // OnMessageToWorker when events are sent to the embedded
   // worker. By default they just return success via
-  // SimulateSendMessageToBrowser.
+  // SimulateSendReplyToBrowser.
   virtual void OnActivateEvent(int embedded_worker_id, int request_id);
   virtual void OnInstallEvent(int embedded_worker_id,
                               int request_id,
@@ -89,13 +90,14 @@
                             int request_id,
                             const ServiceWorkerFetchRequest& request);
 
-  // Call this to simulate sending WorkerStarted, WorkerStopped and
-  // SendMessageToBrowser to the browser.
+  // These functions simulate sending an EmbeddedHostMsg message to the
+  // browser.
   void SimulateWorkerStarted(int thread_id, int embedded_worker_id);
   void SimulateWorkerStopped(int embedded_worker_id);
-  void SimulateSendMessageToBrowser(int embedded_worker_id,
-                                    int request_id,
-                                    const IPC::Message& message);
+  void SimulateSend(IPC::Message* message);
+  void SimulateSendReplyToBrowser(int embedded_worker_id,
+                                  int request_id,
+                                  const IPC::Message& message);
 
  protected:
   EmbeddedWorkerRegistry* registry();
@@ -103,12 +105,13 @@
  private:
   void OnStartWorkerStub(int embedded_worker_id,
                          int64 service_worker_version_id,
+                         const GURL& scope,
                          const GURL& script_url);
   void OnStopWorkerStub(int embedded_worker_id);
-  void OnSendMessageToWorkerStub(int thread_id,
-                                 int embedded_worker_id,
-                                 int request_id,
-                                 const IPC::Message& message);
+  void OnMessageToWorkerStub(int thread_id,
+                             int embedded_worker_id,
+                             int request_id,
+                             const IPC::Message& message);
   void OnActivateEventStub();
   void OnInstallEventStub(int active_version_id);
   void OnFetchEventStub(const ServiceWorkerFetchRequest& request);
@@ -120,7 +123,7 @@
 
   int next_thread_id_;
 
-  // Updated each time SendMessageToWorker message is received.
+  // Updated each time MessageToWorker message is received.
   int current_embedded_worker_id_;
   int current_request_id_;
 
diff --git a/content/browser/service_worker/service_worker_browsertest.cc b/content/browser/service_worker/service_worker_browsertest.cc
index 77fd21a..6feea38 100644
--- a/content/browser/service_worker/service_worker_browsertest.cc
+++ b/content/browser/service_worker/service_worker_browsertest.cc
@@ -137,7 +137,7 @@
 };
 
 class EmbeddedWorkerBrowserTest : public ServiceWorkerBrowserTest,
-                                  public EmbeddedWorkerInstance::Observer {
+                                  public EmbeddedWorkerInstance::Listener {
  public:
   typedef EmbeddedWorkerBrowserTest self;
 
@@ -147,7 +147,7 @@
 
   virtual void TearDownOnIOThread() OVERRIDE {
     if (worker_) {
-      worker_->RemoveObserver(this);
+      worker_->RemoveListener(this);
       worker_.reset();
     }
   }
@@ -156,15 +156,16 @@
     ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO));
     worker_ = wrapper()->context()->embedded_worker_registry()->CreateWorker();
     EXPECT_EQ(EmbeddedWorkerInstance::STOPPED, worker_->status());
-    worker_->AddObserver(this);
+    worker_->AddListener(this);
 
     AssociateRendererProcessToWorker(worker_.get());
 
     const int64 service_worker_version_id = 33L;
+    const GURL scope = embedded_test_server()->GetURL("/*");
     const GURL script_url = embedded_test_server()->GetURL(
         "/service_worker/worker.js");
     ServiceWorkerStatusCode status = worker_->Start(
-        service_worker_version_id, script_url);
+        service_worker_version_id, scope, script_url);
 
     last_worker_status_ = worker_->status();
     EXPECT_EQ(SERVICE_WORKER_OK, status);
@@ -202,9 +203,21 @@
     last_worker_status_ = worker_->status();
     BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, done_closure_);
   }
-  virtual void OnMessageReceived(
-      int request_id, const IPC::Message& message) OVERRIDE {
-    NOTREACHED();
+  virtual void OnReportException(const base::string16& error_message,
+                                 int line_number,
+                                 int column_number,
+                                 const GURL& source_url) OVERRIDE {}
+  virtual void OnReportConsoleMessage(int source_identifier,
+                                      int message_level,
+                                      const base::string16& message,
+                                      int line_number,
+                                      const GURL& source_url) OVERRIDE {}
+  virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE {
+    return false;
+  }
+  virtual bool OnReplyReceived(int request_id,
+                               const IPC::Message& message) OVERRIDE {
+    return false;
   }
 
   scoped_ptr<EmbeddedWorkerInstance> worker_;
@@ -219,7 +232,6 @@
  public:
   typedef ServiceWorkerVersionBrowserTest self;
 
-  ServiceWorkerVersionBrowserTest() : next_registration_id_(1) {}
   virtual ~ServiceWorkerVersionBrowserTest() {}
 
   virtual void TearDownOnIOThread() OVERRIDE {
@@ -297,15 +309,14 @@
   }
 
   void SetUpRegistrationOnIOThread(const std::string& worker_url) {
-    const int64 version_id = 1L;
     registration_ = new ServiceWorkerRegistration(
         embedded_test_server()->GetURL("/*"),
         embedded_test_server()->GetURL(worker_url),
-        next_registration_id_++,
+        wrapper()->context()->storage()->NewRegistrationId(),
         wrapper()->context()->AsWeakPtr());
     version_ = new ServiceWorkerVersion(
         registration_,
-        version_id,
+        wrapper()->context()->storage()->NewVersionId(),
         wrapper()->context()->AsWeakPtr());
     AssociateRendererProcessToWorker(version_->embedded_worker());
   }
@@ -357,7 +368,6 @@
   }
 
  protected:
-  int64 next_registration_id_;
   scoped_refptr<ServiceWorkerRegistration> registration_;
   scoped_refptr<ServiceWorkerVersion> version_;
 };
@@ -571,6 +581,20 @@
 
 IN_PROC_BROWSER_TEST_F(ServiceWorkerBlackBoxBrowserTest, Registration) {
   const std::string kWorkerUrl = "/service_worker/fetch_event.js";
+
+  // Unregistering nothing should return true.
+  {
+    base::RunLoop run_loop;
+    public_context()->UnregisterServiceWorker(
+        embedded_test_server()->GetURL("/*"),
+        RenderProcessID(),
+        base::Bind(&ServiceWorkerBlackBoxBrowserTest::ExpectResultAndRun,
+                   true,
+                   run_loop.QuitClosure()));
+    run_loop.Run();
+  }
+
+  // Register returns when the promise would be resolved.
   {
     base::RunLoop run_loop;
     public_context()->RegisterServiceWorker(
@@ -582,18 +606,26 @@
                    run_loop.QuitClosure()));
     run_loop.Run();
   }
+
+  // Registering again should succeed, although the algo still
+  // might not be complete.
   {
-    ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
-    GURL script_url;
-    RunOnIOThread(
-        base::Bind(&ServiceWorkerBlackBoxBrowserTest::FindRegistrationOnIO,
-                   this,
-                   embedded_test_server()->GetURL("/service_worker/empty.html"),
-                   &status,
-                   &script_url));
-    EXPECT_EQ(SERVICE_WORKER_OK, status);
-    EXPECT_EQ(embedded_test_server()->GetURL(kWorkerUrl), script_url);
+    base::RunLoop run_loop;
+    public_context()->RegisterServiceWorker(
+        embedded_test_server()->GetURL("/*"),
+        embedded_test_server()->GetURL(kWorkerUrl),
+        RenderProcessID(),
+        base::Bind(&ServiceWorkerBlackBoxBrowserTest::ExpectResultAndRun,
+                   true,
+                   run_loop.QuitClosure()));
+    run_loop.Run();
   }
+
+  // The registration algo might not be far enough along to have
+  // stored the registration data, so it may not be findable
+  // at this point.
+
+  // Unregistering something should return true.
   {
     base::RunLoop run_loop;
     public_context()->UnregisterServiceWorker(
@@ -604,6 +636,8 @@
                    run_loop.QuitClosure()));
     run_loop.Run();
   }
+
+  // Should not be able to find it.
   {
     ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
     GURL script_url;
diff --git a/content/browser/service_worker/service_worker_context_core.cc b/content/browser/service_worker/service_worker_context_core.cc
index fd2cf16..9b8a17a 100644
--- a/content/browser/service_worker/service_worker_context_core.cc
+++ b/content/browser/service_worker/service_worker_context_core.cc
@@ -7,6 +7,7 @@
 #include "base/files/file_path.h"
 #include "base/strings/string_util.h"
 #include "content/browser/service_worker/embedded_worker_registry.h"
+#include "content/browser/service_worker/service_worker_context_observer.h"
 #include "content/browser/service_worker/service_worker_info.h"
 #include "content/browser/service_worker/service_worker_job_coordinator.h"
 #include "content/browser/service_worker/service_worker_provider_host.h"
@@ -18,16 +19,77 @@
 
 namespace content {
 
+ServiceWorkerContextCore::ProviderHostIterator::~ProviderHostIterator() {}
+
+ServiceWorkerProviderHost*
+ServiceWorkerContextCore::ProviderHostIterator::GetProviderHost() {
+  DCHECK(!IsAtEnd());
+  return provider_host_iterator_->GetCurrentValue();
+}
+
+void ServiceWorkerContextCore::ProviderHostIterator::Advance() {
+  DCHECK(!IsAtEnd());
+  DCHECK(!provider_host_iterator_->IsAtEnd());
+  DCHECK(!provider_iterator_->IsAtEnd());
+
+  // Advance the inner iterator. If an element is reached, we're done.
+  provider_host_iterator_->Advance();
+  if (!provider_host_iterator_->IsAtEnd())
+    return;
+
+  // Advance the outer iterator until an element is reached, or end is hit.
+  while (true) {
+    provider_iterator_->Advance();
+    if (provider_iterator_->IsAtEnd())
+      return;
+    ProviderMap* provider_map = provider_iterator_->GetCurrentValue();
+    provider_host_iterator_.reset(new ProviderMap::iterator(provider_map));
+    if (!provider_host_iterator_->IsAtEnd())
+      return;
+  }
+}
+
+bool ServiceWorkerContextCore::ProviderHostIterator::IsAtEnd() {
+  return provider_iterator_->IsAtEnd() &&
+         (!provider_host_iterator_ || provider_host_iterator_->IsAtEnd());
+}
+
+ServiceWorkerContextCore::ProviderHostIterator::ProviderHostIterator(
+    ProcessToProviderMap* map)
+    : map_(map) {
+  DCHECK(map);
+  Initialize();
+}
+
+void ServiceWorkerContextCore::ProviderHostIterator::Initialize() {
+  provider_iterator_.reset(new ProcessToProviderMap::iterator(map_));
+  // Advance to the first element.
+  while (!provider_iterator_->IsAtEnd()) {
+    ProviderMap* provider_map = provider_iterator_->GetCurrentValue();
+    provider_host_iterator_.reset(new ProviderMap::iterator(provider_map));
+    if (!provider_host_iterator_->IsAtEnd())
+      return;
+    provider_iterator_->Advance();
+  }
+}
+
 ServiceWorkerContextCore::ServiceWorkerContextCore(
     const base::FilePath& path,
-    quota::QuotaManagerProxy* quota_manager_proxy)
-    : storage_(new ServiceWorkerStorage(path, quota_manager_proxy)),
+    quota::QuotaManagerProxy* quota_manager_proxy,
+    ObserverListThreadSafe<ServiceWorkerContextObserver>* observer_list)
+    : storage_(new ServiceWorkerStorage(
+          path, AsWeakPtr(), quota_manager_proxy)),
       embedded_worker_registry_(new EmbeddedWorkerRegistry(AsWeakPtr())),
-      job_coordinator_(
-          new ServiceWorkerJobCoordinator(AsWeakPtr())),
-      next_handle_id_(0) {}
+      job_coordinator_(new ServiceWorkerJobCoordinator(AsWeakPtr())),
+      next_handle_id_(0),
+      observer_list_(observer_list) {}
 
 ServiceWorkerContextCore::~ServiceWorkerContextCore() {
+  for (VersionMap::iterator it = live_versions_.begin();
+       it != live_versions_.end();
+       ++it) {
+    it->second->RemoveListener(this);
+  }
   providers_.Clear();
   storage_.reset();
   job_coordinator_.reset();
@@ -66,6 +128,11 @@
     providers_.Remove(process_id);
 }
 
+scoped_ptr<ServiceWorkerContextCore::ProviderHostIterator>
+ServiceWorkerContextCore::GetProviderHostIterator() {
+  return make_scoped_ptr(new ProviderHostIterator(&providers_));
+}
+
 void ServiceWorkerContextCore::RegisterServiceWorker(
     const GURL& pattern,
     const GURL& script_url,
@@ -144,6 +211,7 @@
 void ServiceWorkerContextCore::AddLiveVersion(ServiceWorkerVersion* version) {
   DCHECK(!GetLiveVersion(version->version_id()));
   live_versions_[version->version_id()] = version;
+  version->AddListener(this);
 }
 
 void ServiceWorkerContextCore::RemoveLiveVersion(int64 id) {
@@ -154,4 +222,65 @@
   return next_handle_id_++;
 }
 
+void ServiceWorkerContextCore::OnWorkerStarted(ServiceWorkerVersion* version) {
+  if (!observer_list_)
+    return;
+  observer_list_->Notify(&ServiceWorkerContextObserver::OnWorkerStarted,
+                         version->version_id(),
+                         version->embedded_worker()->process_id(),
+                         version->embedded_worker()->thread_id());
+}
+
+void ServiceWorkerContextCore::OnWorkerStopped(ServiceWorkerVersion* version) {
+  if (!observer_list_)
+    return;
+  observer_list_->Notify(&ServiceWorkerContextObserver::OnWorkerStopped,
+                         version->version_id(),
+                         version->embedded_worker()->process_id(),
+                         version->embedded_worker()->thread_id());
+}
+
+void ServiceWorkerContextCore::OnVersionStateChanged(
+    ServiceWorkerVersion* version) {
+  if (!observer_list_)
+    return;
+  observer_list_->Notify(&ServiceWorkerContextObserver::OnVersionStateChanged,
+                         version->version_id());
+}
+
+void ServiceWorkerContextCore::OnErrorReported(
+    ServiceWorkerVersion* version,
+    const base::string16& error_message,
+    int line_number,
+    int column_number,
+    const GURL& source_url) {
+  if (!observer_list_)
+    return;
+  observer_list_->Notify(
+      &ServiceWorkerContextObserver::OnErrorReported,
+      version->version_id(),
+      version->embedded_worker()->process_id(),
+      version->embedded_worker()->thread_id(),
+      ServiceWorkerContextObserver::ErrorInfo(
+          error_message, line_number, column_number, source_url));
+}
+
+void ServiceWorkerContextCore::OnReportConsoleMessage(
+    ServiceWorkerVersion* version,
+    int source_identifier,
+    int message_level,
+    const base::string16& message,
+    int line_number,
+    const GURL& source_url) {
+  if (!observer_list_)
+    return;
+  observer_list_->Notify(
+      &ServiceWorkerContextObserver::OnReportConsoleMessage,
+      version->version_id(),
+      version->embedded_worker()->process_id(),
+      version->embedded_worker()->thread_id(),
+      ServiceWorkerContextObserver::ConsoleMessage(
+          source_identifier, message_level, message, line_number, source_url));
+}
+
 }  // namespace content
diff --git a/content/browser/service_worker/service_worker_context_core.h b/content/browser/service_worker/service_worker_context_core.h
index c6b0726..2fae441 100644
--- a/content/browser/service_worker/service_worker_context_core.h
+++ b/content/browser/service_worker/service_worker_context_core.h
@@ -13,6 +13,7 @@
 #include "base/id_map.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/observer_list_threadsafe.h"
 #include "content/browser/service_worker/service_worker_info.h"
 #include "content/browser/service_worker/service_worker_provider_host.h"
 #include "content/browser/service_worker/service_worker_registration_status.h"
@@ -32,6 +33,8 @@
 namespace content {
 
 class EmbeddedWorkerRegistry;
+class ServiceWorkerContextObserver;
+class ServiceWorkerHandle;
 class ServiceWorkerJobCoordinator;
 class ServiceWorkerProviderHost;
 class ServiceWorkerRegistration;
@@ -43,21 +46,64 @@
 // is the root of the containment hierarchy for service worker data
 // associated with a particular partition.
 class CONTENT_EXPORT ServiceWorkerContextCore
-    : NON_EXPORTED_BASE(
-          public base::SupportsWeakPtr<ServiceWorkerContextCore>) {
+    : NON_EXPORTED_BASE(public base::SupportsWeakPtr<ServiceWorkerContextCore>),
+      public ServiceWorkerVersion::Listener {
  public:
   typedef base::Callback<void(ServiceWorkerStatusCode status,
                               int64 registration_id,
                               int64 version_id)> RegistrationCallback;
   typedef base::Callback<
       void(ServiceWorkerStatusCode status)> UnregistrationCallback;
+  typedef IDMap<ServiceWorkerProviderHost, IDMapOwnPointer> ProviderMap;
+  typedef IDMap<ProviderMap, IDMapOwnPointer> ProcessToProviderMap;
+
+  // Iterates over ServiceWorkerProviderHost objects in a ProcessToProviderMap.
+  class ProviderHostIterator {
+   public:
+    ~ProviderHostIterator();
+    ServiceWorkerProviderHost* GetProviderHost();
+    void Advance();
+    bool IsAtEnd();
+
+   private:
+    friend class ServiceWorkerContextCore;
+    explicit ProviderHostIterator(ProcessToProviderMap* map);
+    void Initialize();
+
+    ProcessToProviderMap* map_;
+    scoped_ptr<ProcessToProviderMap::iterator> provider_iterator_;
+    scoped_ptr<ProviderMap::iterator> provider_host_iterator_;
+
+    DISALLOW_COPY_AND_ASSIGN(ProviderHostIterator);
+  };
 
   // This is owned by the StoragePartition, which will supply it with
   // the local path on disk. Given an empty |user_data_directory|,
-  // nothing will be stored on disk.
-  ServiceWorkerContextCore(const base::FilePath& user_data_directory,
-                           quota::QuotaManagerProxy* quota_manager_proxy);
-  ~ServiceWorkerContextCore();
+  // nothing will be stored on disk. |observer_list| is created in
+  // ServiceWorkerContextWrapper. When Notify() of |observer_list| is called in
+  // ServiceWorkerContextCore, the methods of ServiceWorkerContextObserver will
+  // be called on the thread which called AddObserver() of |observer_list|.
+  ServiceWorkerContextCore(
+      const base::FilePath& user_data_directory,
+      quota::QuotaManagerProxy* quota_manager_proxy,
+      ObserverListThreadSafe<ServiceWorkerContextObserver>* observer_list);
+  virtual ~ServiceWorkerContextCore();
+
+  // ServiceWorkerVersion::Listener overrides.
+  virtual void OnWorkerStarted(ServiceWorkerVersion* version) OVERRIDE;
+  virtual void OnWorkerStopped(ServiceWorkerVersion* version) OVERRIDE;
+  virtual void OnVersionStateChanged(ServiceWorkerVersion* version) OVERRIDE;
+  virtual void OnErrorReported(ServiceWorkerVersion* version,
+                               const base::string16& error_message,
+                               int line_number,
+                               int column_number,
+                               const GURL& source_url) OVERRIDE;
+  virtual void OnReportConsoleMessage(ServiceWorkerVersion* version,
+                                      int source_identifier,
+                                      int message_level,
+                                      const base::string16& message,
+                                      int line_number,
+                                      const GURL& source_url) OVERRIDE;
 
   ServiceWorkerStorage* storage() { return storage_.get(); }
   EmbeddedWorkerRegistry* embedded_worker_registry() {
@@ -72,6 +118,7 @@
   void AddProviderHost(scoped_ptr<ServiceWorkerProviderHost> provider_host);
   void RemoveProviderHost(int process_id, int provider_id);
   void RemoveAllProviderHostsForProcess(int process_id);
+  scoped_ptr<ProviderHostIterator> GetProviderHostIterator();
 
   // The callback will be called on the IO thread.
   // A child process of |source_process_id| may be used to run the created
@@ -103,8 +150,6 @@
   int GetNewServiceWorkerHandleId();
 
  private:
-  typedef IDMap<ServiceWorkerProviderHost, IDMapOwnPointer> ProviderMap;
-  typedef IDMap<ProviderMap, IDMapOwnPointer> ProcessToProviderMap;
   typedef std::map<int64, ServiceWorkerRegistration*> RegistrationsMap;
   typedef std::map<int64, ServiceWorkerVersion*> VersionMap;
 
@@ -126,6 +171,9 @@
   std::map<int64, ServiceWorkerVersion*> live_versions_;
   int next_handle_id_;
 
+  scoped_refptr<ObserverListThreadSafe<ServiceWorkerContextObserver> >
+      observer_list_;
+
   DISALLOW_COPY_AND_ASSIGN(ServiceWorkerContextCore);
 };
 
diff --git a/content/browser/service_worker/service_worker_context_observer.h b/content/browser/service_worker/service_worker_context_observer.h
new file mode 100644
index 0000000..8bf5e99
--- /dev/null
+++ b/content/browser/service_worker/service_worker_context_observer.h
@@ -0,0 +1,68 @@
+// 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.
+
+#ifndef CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_CONTEXT_OBSERVER_H_
+#define CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_CONTEXT_OBSERVER_H_
+
+#include "base/strings/string16.h"
+#include "url/gurl.h"
+
+namespace content {
+
+class ServiceWorkerContextObserver {
+ public:
+  struct ErrorInfo {
+    ErrorInfo(const base::string16& message,
+              int line,
+              int column,
+              const GURL& url)
+        : error_message(message),
+          line_number(line),
+          column_number(column),
+          source_url(url) {}
+    const base::string16 error_message;
+    const int line_number;
+    const int column_number;
+    const GURL source_url;
+  };
+  struct ConsoleMessage {
+    ConsoleMessage(int source_identifier,
+                   int message_level,
+                   const base::string16& message,
+                   int line_number,
+                   const GURL& source_url)
+        : source_identifier(source_identifier),
+          message_level(message_level),
+          message(message),
+          line_number(line_number),
+          source_url(source_url) {}
+    const int source_identifier;
+    const int message_level;
+    const base::string16 message;
+    const int line_number;
+    const GURL source_url;
+  };
+  virtual void OnWorkerStarted(int64 version_id,
+                               int process_id,
+                               int thread_id) {}
+  virtual void OnWorkerStopped(int64 version_id,
+                               int process_id,
+                               int thread_id) {}
+  virtual void OnVersionStateChanged(int64 version_id) {}
+  virtual void OnErrorReported(int64 version_id,
+                               int process_id,
+                               int thread_id,
+                               const ErrorInfo& info) {}
+  virtual void OnReportConsoleMessage(int64 version_id,
+                                      int process_id,
+                                      int thread_id,
+                                      const ConsoleMessage& message) {}
+
+ protected:
+  virtual ~ServiceWorkerContextObserver() {}
+};
+
+}  // namespace content
+
+#endif  // CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_CONTEXT_OBSERVER_H_
diff --git a/content/browser/service_worker/service_worker_context_unittest.cc b/content/browser/service_worker/service_worker_context_unittest.cc
index 445ebb5..12e3bff 100644
--- a/content/browser/service_worker/service_worker_context_unittest.cc
+++ b/content/browser/service_worker/service_worker_context_unittest.cc
@@ -90,7 +90,7 @@
   virtual void OnInstallEvent(int embedded_worker_id,
                               int request_id,
                               int active_version_id) OVERRIDE {
-    SimulateSendMessageToBrowser(
+    SimulateSendReplyToBrowser(
         embedded_worker_id,
         request_id,
         ServiceWorkerHostMsg_InstallEventFinished(
@@ -106,7 +106,7 @@
 
   virtual void OnActivateEvent(int embedded_worker_id,
                                int request_id) OVERRIDE {
-    SimulateSendMessageToBrowser(
+    SimulateSendReplyToBrowser(
         embedded_worker_id,
         request_id,
         ServiceWorkerHostMsg_ActivateEventFinished(
@@ -123,7 +123,7 @@
         render_process_id_(99) {}
 
   virtual void SetUp() OVERRIDE {
-    context_.reset(new ServiceWorkerContextCore(base::FilePath(), NULL));
+    context_.reset(new ServiceWorkerContextCore(base::FilePath(), NULL, NULL));
     helper_.reset(new EmbeddedWorkerTestHelper(
         context_.get(), render_process_id_));
   }
@@ -205,7 +205,7 @@
   context_->storage()->FindRegistrationForId(
       registration_id,
       base::Bind(&ExpectRegisteredWorkers,
-                 SERVICE_WORKER_OK,
+                 SERVICE_WORKER_ERROR_NOT_FOUND,
                  kInvalidServiceWorkerVersionId,
                  false /* expect_pending */,
                  false /* expect_active */));
@@ -243,56 +243,13 @@
   context_->storage()->FindRegistrationForId(
       registration_id,
       base::Bind(&ExpectRegisteredWorkers,
-                 SERVICE_WORKER_OK,
+                 SERVICE_WORKER_ERROR_NOT_FOUND,
                  kInvalidServiceWorkerVersionId,
                  false /* expect_pending */,
                  false /* expect_active */));
   base::RunLoop().RunUntilIdle();
 }
 
-// Test registration when there is an existing registration with no pending or
-// active worker.
-TEST_F(ServiceWorkerContextTest, Register_DuplicateScriptNoActiveWorker) {
-  helper_.reset(
-      new RejectInstallTestHelper(context_.get(), render_process_id_));
-  int64 old_registration_id = kInvalidServiceWorkerRegistrationId;
-  int64 old_version_id = kInvalidServiceWorkerVersionId;
-  bool called = false;
-  context_->RegisterServiceWorker(
-      GURL("http://www.example.com/*"),
-      GURL("http://www.example.com/service_worker.js"),
-      render_process_id_,
-      NULL,
-      MakeRegisteredCallback(&called, &old_registration_id, &old_version_id));
-
-  ASSERT_FALSE(called);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_TRUE(called);
-  EXPECT_NE(kInvalidServiceWorkerRegistrationId, old_registration_id);
-  EXPECT_NE(kInvalidServiceWorkerVersionId, old_version_id);
-
-  EXPECT_EQ(2UL, helper_->ipc_sink()->message_count());
-
-  int64 new_registration_id = kInvalidServiceWorkerRegistrationId;
-  int64 new_version_id = kInvalidServiceWorkerVersionId;
-  called = false;
-  context_->RegisterServiceWorker(
-      GURL("http://www.example.com/*"),
-      GURL("http://www.example.com/service_worker.js"),
-      render_process_id_,
-      NULL,
-      MakeRegisteredCallback(&called, &new_registration_id, &new_version_id));
-
-  ASSERT_FALSE(called);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_TRUE(called);
-
-  EXPECT_EQ(old_registration_id, new_registration_id);
-  // Our current implementation does the full registration flow on re-register,
-  // so the worker receives another start message and install message.
-  EXPECT_EQ(4UL, helper_->ipc_sink()->message_count());
-}
-
 // Make sure registrations are cleaned up when they are unregistered.
 TEST_F(ServiceWorkerContextTest, Unregister) {
   GURL pattern("http://www.example.com/*");
diff --git a/content/browser/service_worker/service_worker_context_wrapper.cc b/content/browser/service_worker/service_worker_context_wrapper.cc
index f186006..2ccffa1 100644
--- a/content/browser/service_worker/service_worker_context_wrapper.cc
+++ b/content/browser/service_worker/service_worker_context_wrapper.cc
@@ -6,13 +6,15 @@
 
 #include "base/files/file_path.h"
 #include "content/browser/service_worker/service_worker_context_core.h"
+#include "content/browser/service_worker/service_worker_context_observer.h"
 #include "content/public/browser/browser_thread.h"
 #include "webkit/browser/quota/quota_manager_proxy.h"
 
 namespace content {
 
-ServiceWorkerContextWrapper::ServiceWorkerContextWrapper() {
-}
+ServiceWorkerContextWrapper::ServiceWorkerContextWrapper()
+    : observer_list_(
+          new ObserverListThreadSafe<ServiceWorkerContextObserver>()) {}
 
 ServiceWorkerContextWrapper::~ServiceWorkerContextWrapper() {
 }
@@ -29,9 +31,8 @@
     return;
   }
   DCHECK(!context_core_);
-  context_core_.reset(
-      new ServiceWorkerContextCore(
-          user_data_directory, quota_manager_proxy));
+  context_core_.reset(new ServiceWorkerContextCore(
+      user_data_directory, quota_manager_proxy, observer_list_));
 }
 
 void ServiceWorkerContextWrapper::Shutdown() {
@@ -120,4 +121,14 @@
       base::Bind(&FinishUnregistrationOnIO, continuation));
 }
 
+void ServiceWorkerContextWrapper::AddObserver(
+    ServiceWorkerContextObserver* observer) {
+  observer_list_->AddObserver(observer);
+}
+
+void ServiceWorkerContextWrapper::RemoveObserver(
+    ServiceWorkerContextObserver* observer) {
+  observer_list_->RemoveObserver(observer);
+}
+
 }  // namespace content
diff --git a/content/browser/service_worker/service_worker_context_wrapper.h b/content/browser/service_worker/service_worker_context_wrapper.h
index 450538c..cea9c06 100644
--- a/content/browser/service_worker/service_worker_context_wrapper.h
+++ b/content/browser/service_worker/service_worker_context_wrapper.h
@@ -22,7 +22,7 @@
 
 namespace content {
 
-class ServiceWorkerContextCore;
+class ServiceWorkerContextObserver;
 
 // A refcounted wrapper class for our core object. Higher level content lib
 // classes keep references to this class on mutliple threads. The inner core
@@ -55,11 +55,16 @@
                                        const ResultCallback& continuation)
       OVERRIDE;
 
+  void AddObserver(ServiceWorkerContextObserver* observer);
+  void RemoveObserver(ServiceWorkerContextObserver* observer);
+
  private:
   friend class base::RefCountedThreadSafe<ServiceWorkerContextWrapper>;
   virtual ~ServiceWorkerContextWrapper();
 
   scoped_ptr<ServiceWorkerContextCore> context_core_;
+  scoped_refptr<ObserverListThreadSafe<ServiceWorkerContextObserver> >
+      observer_list_;
 };
 
 }  // namespace content
diff --git a/content/browser/service_worker/service_worker_database.cc b/content/browser/service_worker/service_worker_database.cc
new file mode 100644
index 0000000..77e3347
--- /dev/null
+++ b/content/browser/service_worker/service_worker_database.cc
@@ -0,0 +1,206 @@
+// 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.
+
+#include "content/browser/service_worker/service_worker_database.h"
+
+#include <string>
+
+#include "base/file_util.h"
+#include "base/logging.h"
+#include "base/strings/string_number_conversions.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"
+
+// LevelDB database schema
+// =======================
+//
+// Version 1 (in sorted order)
+//   key: "DB_VERSION"
+//   value: <int64 serialized as a string>
+//
+//   key: "NEXT_REGISTRATION_ID"
+//   value: <int64 serialized as a string>
+//
+//   key: "NEXT_RESOURCE_ID"
+//   value: <int64 serialized as a string>
+//
+//   key: "NEXT_VERSION_ID"
+//   value: <int64 serialized as a string>
+
+namespace content {
+
+namespace {
+
+const char kDatabaseVersionKey[] = "DB_VERSION";
+const char kNextRegIdKey[] = "NEXT_REGISTRATION_ID";
+const char kNextResIdKey[] = "NEXT_RESOURCE_ID";
+const char kNextVerIdKey[] = "NEXT_VERSION_ID";
+
+const int64 kCurrentSchemaVersion = 1;
+
+}  // namespace
+
+ServiceWorkerDatabase::RegistrationData::RegistrationData()
+    : registration_id(-1),
+      version_id(-1),
+      is_active(false),
+      has_fetch_handler(false) {
+}
+
+ServiceWorkerDatabase::RegistrationData::~RegistrationData() {
+}
+
+ServiceWorkerDatabase::ServiceWorkerDatabase(const base::FilePath& path)
+    : path_(path),
+      is_disabled_(false),
+      was_corruption_detected_(false) {
+}
+
+ServiceWorkerDatabase::~ServiceWorkerDatabase() {
+  DCHECK(sequence_checker_.CalledOnValidSequencedThread());
+  db_.reset();
+}
+
+bool ServiceWorkerDatabase::GetNextAvailableIds(
+    int64* next_avail_registration_id,
+    int64* next_avail_version_id,
+    int64* next_avail_resource_id) {
+  DCHECK(sequence_checker_.CalledOnValidSequencedThread());
+  DCHECK(next_avail_registration_id);
+  DCHECK(next_avail_version_id);
+  DCHECK(next_avail_resource_id);
+
+  if (!LazyOpen(false) || is_disabled_)
+    return false;
+
+  int64 reg_id = -1;
+  int64 ver_id = -1;
+  int64 res_id = -1;
+
+  if (!ReadInt64(kNextRegIdKey, &reg_id) ||
+      !ReadInt64(kNextVerIdKey, &ver_id) ||
+      !ReadInt64(kNextResIdKey, &res_id))
+    return false;
+
+  *next_avail_registration_id = reg_id;
+  *next_avail_version_id = ver_id;
+  *next_avail_resource_id = res_id;
+  return true;
+}
+
+bool ServiceWorkerDatabase::LazyOpen(bool create_if_needed) {
+  DCHECK(sequence_checker_.CalledOnValidSequencedThread());
+  if (IsOpen())
+    return true;
+
+  // Do not try to open a database if we tried and failed once.
+  if (is_disabled_)
+    return false;
+
+  // When |path_| is empty, open a database in-memory.
+  bool use_in_memory_db = path_.empty();
+
+  if (!create_if_needed) {
+    // Avoid opening a database if it does not exist at the |path_|.
+    if (use_in_memory_db ||
+        !base::PathExists(path_) ||
+        base::IsDirectoryEmpty(path_)) {
+      return false;
+    }
+  }
+
+  leveldb::Options options;
+  options.create_if_missing = create_if_needed;
+  if (use_in_memory_db) {
+    env_.reset(leveldb::NewMemEnv(leveldb::Env::Default()));
+    options.env = env_.get();
+  }
+
+  leveldb::DB* db = NULL;
+  leveldb::Status status =
+      leveldb::DB::Open(options, path_.AsUTF8Unsafe(), &db);
+  if (!status.ok()) {
+    DCHECK(!db);
+    // TODO(nhiroki): Should we retry to open the database?
+    DLOG(ERROR) << "Failed to open LevelDB database: " << status.ToString();
+    is_disabled_ = true;
+    return false;
+  }
+  db_.reset(db);
+
+  if (IsEmpty() && !PopulateInitialData()) {
+    DLOG(ERROR) << "Failed to populate the database.";
+    is_disabled_ = true;
+    db_.reset();
+    return false;
+  }
+  return true;
+}
+
+bool ServiceWorkerDatabase::PopulateInitialData() {
+  scoped_ptr<leveldb::WriteBatch> batch(new leveldb::WriteBatch);
+  batch->Put(kDatabaseVersionKey, base::Int64ToString(kCurrentSchemaVersion));
+  batch->Put(kNextRegIdKey, "0");
+  batch->Put(kNextResIdKey, "0");
+  batch->Put(kNextVerIdKey, "0");
+  return WriteBatch(batch.Pass());
+}
+
+bool ServiceWorkerDatabase::ReadInt64(
+    const leveldb::Slice& key,
+    int64* value_out) {
+  DCHECK(value_out);
+
+  std::string value;
+  leveldb::Status status = db_->Get(leveldb::ReadOptions(), key, &value);
+  if (!status.ok()) {
+    DLOG(ERROR) << "Failed to read data keyed by "
+                << key.ToString() << ": " << status.ToString();
+    is_disabled_ = true;
+    if (status.IsCorruption())
+      was_corruption_detected_ = true;
+    return false;
+  }
+
+  int64 parsed = -1;
+  if (!base::StringToInt64(value, &parsed)) {
+    DLOG(ERROR) << "Database might be corrupted: "
+                << key.ToString() << ", " << value;
+    is_disabled_ = true;
+    was_corruption_detected_ = true;
+    return false;
+  }
+
+  *value_out = parsed;
+  return true;
+}
+
+bool ServiceWorkerDatabase::WriteBatch(scoped_ptr<leveldb::WriteBatch> batch) {
+  if (!batch)
+    return true;
+
+  leveldb::Status status = db_->Write(leveldb::WriteOptions(), batch.get());
+  if (status.ok())
+    return true;
+
+  DLOG(ERROR) << "Failed to write the batch: " << status.ToString();
+  is_disabled_ = true;
+  if (status.IsCorruption())
+    was_corruption_detected_ = true;
+  return false;
+}
+
+bool ServiceWorkerDatabase::IsOpen() {
+  return db_.get() != NULL;
+}
+
+bool ServiceWorkerDatabase::IsEmpty() {
+  scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions()));
+  itr->SeekToFirst();
+  return !itr->Valid();
+}
+
+}  // namespace content
diff --git a/content/browser/service_worker/service_worker_database.h b/content/browser/service_worker/service_worker_database.h
new file mode 100644
index 0000000..dc21acb
--- /dev/null
+++ b/content/browser/service_worker/service_worker_database.h
@@ -0,0 +1,108 @@
+// 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.
+
+#ifndef CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_DATABASE_H_
+#define CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_DATABASE_H_
+
+#include "base/files/file_path.h"
+#include "base/macros.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/sequence_checker.h"
+#include "base/time/time.h"
+#include "content/browser/service_worker/service_worker_version.h"
+#include "content/common/content_export.h"
+#include "url/gurl.h"
+
+namespace leveldb {
+class DB;
+class Env;
+class Slice;
+class WriteBatch;
+}
+
+namespace content {
+
+// Class to persist serviceworker regitration data in a database.
+// Should NOT be used on the IO thread since this does blocking
+// file io. The ServiceWorkerStorage class owns this class and
+// is responsible for only calling it serially on background
+// nonIO threads (ala SequencedWorkerPool).
+class CONTENT_EXPORT ServiceWorkerDatabase {
+ public:
+  // We do leveldb stuff in |path| or in memory if |path| is empty.
+  explicit ServiceWorkerDatabase(const base::FilePath& path);
+  ~ServiceWorkerDatabase();
+
+  struct RegistrationData {
+    // These values are immutable for the life of a registration.
+    int64 registration_id;
+    GURL scope;
+    GURL script;
+
+    // Versions are first stored once they successfully install and become
+    // the waiting version. Then transition to the active version. The stored
+    // version may be in the ACTIVE state or in the INSTALLED state.
+    int64 version_id;
+    bool is_active;
+    bool has_fetch_handler;
+    base::Time last_update_check;
+
+    ServiceWorkerVersion::Status GetVersionStatus() const {
+      if (is_active)
+        return ServiceWorkerVersion::ACTIVE;
+      return ServiceWorkerVersion::INSTALLED;
+    }
+
+    RegistrationData();
+    ~RegistrationData();
+  };
+
+  // For use during initialization.
+  bool GetNextAvailableIds(int64* next_avail_registration_id,
+                           int64* next_avail_version_id,
+                           int64* next_avail_resource_id);
+
+  bool is_disabled() const { return is_disabled_; }
+  bool was_corruption_detected() const { return was_corruption_detected_; }
+
+ private:
+  // Opens the database at the |path_|. This is lazily called when the first
+  // database API is called. Returns true if the database was opened. Returns
+  // false if the opening failed or was not neccessary, that is, the database
+  // does not exist and |create_if_needed| is false.
+  bool LazyOpen(bool create_if_needed);
+
+  // Populates the database with initial data, namely, database schema version
+  // and next available IDs.
+  bool PopulateInitialData();
+
+  bool ReadInt64(const leveldb::Slice& key, int64* value_out);
+  bool WriteBatch(scoped_ptr<leveldb::WriteBatch> batch);
+
+  bool IsOpen();
+  bool IsEmpty();
+
+  base::FilePath path_;
+  scoped_ptr<leveldb::Env> env_;
+  scoped_ptr<leveldb::DB> db_;
+
+  // True if a database error has occurred (e.g. cannot read data).
+  // If true, all database accesses will fail.
+  bool is_disabled_;
+
+  // True if a database corruption was detected.
+  bool was_corruption_detected_;
+
+  base::SequenceChecker sequence_checker_;
+
+  FRIEND_TEST_ALL_PREFIXES(ServiceWorkerDatabaseTest, OpenDatabase);
+  FRIEND_TEST_ALL_PREFIXES(ServiceWorkerDatabaseTest, OpenDatabase_InMemory);
+  FRIEND_TEST_ALL_PREFIXES(ServiceWorkerDatabaseTest, GetNextAvailableIds);
+
+  DISALLOW_COPY_AND_ASSIGN(ServiceWorkerDatabase);
+};
+
+}  // namespace content
+
+#endif  // CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_DATABASE_H_
diff --git a/content/browser/service_worker/service_worker_database_unittest.cc b/content/browser/service_worker/service_worker_database_unittest.cc
new file mode 100644
index 0000000..f5fca2d
--- /dev/null
+++ b/content/browser/service_worker/service_worker_database_unittest.cc
@@ -0,0 +1,79 @@
+// 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.
+
+#include "content/browser/service_worker/service_worker_database.h"
+
+#include "base/files/scoped_temp_dir.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace content {
+
+namespace {
+
+struct AvailableIds {
+  int64 reg_id;
+  int64 res_id;
+  int64 ver_id;
+
+  AvailableIds() : reg_id(-1), res_id(-1), ver_id(-1) {}
+  ~AvailableIds() {}
+};
+
+ServiceWorkerDatabase* CreateDatabase(const base::FilePath& path) {
+  return new ServiceWorkerDatabase(path);
+}
+
+ServiceWorkerDatabase* CreateDatabaseInMemory() {
+  return new ServiceWorkerDatabase(base::FilePath());
+}
+
+}  // namespace
+
+TEST(ServiceWorkerDatabaseTest, OpenDatabase) {
+  base::ScopedTempDir database_dir;
+  ASSERT_TRUE(database_dir.CreateUniqueTempDir());
+  scoped_ptr<ServiceWorkerDatabase> database(
+      CreateDatabase(database_dir.path()));
+
+  // Should be false because the database does not exist at the path.
+  EXPECT_FALSE(database->LazyOpen(false));
+
+  EXPECT_TRUE(database->LazyOpen(true));
+
+  database.reset(CreateDatabase(database_dir.path()));
+  EXPECT_TRUE(database->LazyOpen(false));
+}
+
+TEST(ServiceWorkerDatabaseTest, OpenDatabase_InMemory) {
+  scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
+
+  // Should be false because the database does not exist in memory.
+  EXPECT_FALSE(database->LazyOpen(false));
+
+  EXPECT_TRUE(database->LazyOpen(true));
+  database.reset(CreateDatabaseInMemory());
+
+  // Should be false because the database is not persistent.
+  EXPECT_FALSE(database->LazyOpen(false));
+}
+
+TEST(ServiceWorkerDatabaseTest, GetNextAvailableIds) {
+  scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
+  AvailableIds ids;
+
+  // Should be false because the database hasn't been opened.
+  EXPECT_FALSE(database->GetNextAvailableIds(
+      &ids.reg_id, &ids.ver_id, &ids.res_id));
+
+  ASSERT_TRUE(database->LazyOpen(true));
+  EXPECT_TRUE(database->GetNextAvailableIds(
+      &ids.reg_id, &ids.ver_id, &ids.res_id));
+  EXPECT_EQ(0, ids.reg_id);
+  EXPECT_EQ(0, ids.ver_id);
+  EXPECT_EQ(0, ids.res_id);
+
+  // TODO(nhiroki): Test GetNextAvailableIds() after update these ids.
+}
+
+}  // namespace content
diff --git a/content/browser/service_worker/service_worker_dispatcher_host.cc b/content/browser/service_worker/service_worker_dispatcher_host.cc
index 8458f58..a8d5de7 100644
--- a/content/browser/service_worker/service_worker_dispatcher_host.cc
+++ b/content/browser/service_worker/service_worker_dispatcher_host.cc
@@ -98,15 +98,23 @@
                         OnWorkerStarted)
     IPC_MESSAGE_HANDLER(EmbeddedWorkerHostMsg_WorkerStopped,
                         OnWorkerStopped)
-    IPC_MESSAGE_HANDLER(EmbeddedWorkerHostMsg_SendMessageToBrowser,
-                        OnSendMessageToBrowser)
+    IPC_MESSAGE_HANDLER(EmbeddedWorkerHostMsg_ReplyToBrowser,
+                        OnReplyToBrowser)
     IPC_MESSAGE_HANDLER(EmbeddedWorkerHostMsg_ReportException,
                         OnReportException)
+    IPC_MESSAGE_HANDLER(EmbeddedWorkerHostMsg_ReportConsoleMessage,
+                        OnReportConsoleMessage)
     IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_ServiceWorkerObjectDestroyed,
                         OnServiceWorkerObjectDestroyed)
     IPC_MESSAGE_UNHANDLED(handled = false)
   IPC_END_MESSAGE_MAP()
 
+  if (!handled && context_) {
+    handled = context_->embedded_worker_registry()->OnMessageReceived(message);
+    if (!handled)
+      BadMessageReceived();
+  }
+
   return handled;
 }
 
@@ -318,14 +326,16 @@
       render_process_id_, embedded_worker_id);
 }
 
-void ServiceWorkerDispatcherHost::OnSendMessageToBrowser(
+void ServiceWorkerDispatcherHost::OnReplyToBrowser(
     int embedded_worker_id,
     int request_id,
     const IPC::Message& message) {
   if (!context_)
     return;
-  context_->embedded_worker_registry()->OnSendMessageToBrowser(
-      embedded_worker_id, request_id, message);
+  if (!context_->embedded_worker_registry()->OnReplyToBrowser(
+      embedded_worker_id, request_id, message)) {
+    BadMessageReceived();
+  }
 }
 
 void ServiceWorkerDispatcherHost::OnReportException(
@@ -334,10 +344,27 @@
     int line_number,
     int column_number,
     const GURL& source_url) {
-  // TODO(horo, nhiroki): Show the error on serviceworker-internals
-  // (http://crbug.com/359517).
-  DVLOG(2) << "[Error] " << error_message << " (" << source_url
-           << ":" << line_number << "," << column_number << ")";
+  if (!context_)
+    return;
+  context_->embedded_worker_registry()->OnReportException(embedded_worker_id,
+                                                          error_message,
+                                                          line_number,
+                                                          column_number,
+                                                          source_url);
+}
+
+void ServiceWorkerDispatcherHost::OnReportConsoleMessage(
+    int embedded_worker_id,
+    const EmbeddedWorkerHostMsg_ReportConsoleMessage_Params& params) {
+  if (!context_)
+    return;
+  context_->embedded_worker_registry()->OnReportConsoleMessage(
+      embedded_worker_id,
+      params.source_identifier,
+      params.message_level,
+      params.message,
+      params.line_number,
+      params.source_url);
 }
 
 void ServiceWorkerDispatcherHost::OnServiceWorkerObjectDestroyed(
diff --git a/content/browser/service_worker/service_worker_dispatcher_host.h b/content/browser/service_worker/service_worker_dispatcher_host.h
index 6cf0de0..b2b4296 100644
--- a/content/browser/service_worker/service_worker_dispatcher_host.h
+++ b/content/browser/service_worker/service_worker_dispatcher_host.h
@@ -12,6 +12,7 @@
 #include "content/public/browser/browser_message_filter.h"
 
 class GURL;
+struct EmbeddedWorkerHostMsg_ReportConsoleMessage_Params;
 
 namespace content {
 
@@ -63,14 +64,17 @@
   void OnWorkerStarted(int thread_id,
                        int embedded_worker_id);
   void OnWorkerStopped(int embedded_worker_id);
-  void OnSendMessageToBrowser(int embedded_worker_id,
-                              int request_id,
-                              const IPC::Message& message);
+  void OnReplyToBrowser(int embedded_worker_id,
+                        int request_id,
+                        const IPC::Message& message);
   void OnReportException(int embedded_worker_id,
                          const base::string16& error_message,
                          int line_number,
                          int column_number,
                          const GURL& source_url);
+  void OnReportConsoleMessage(
+      int embedded_worker_id,
+      const EmbeddedWorkerHostMsg_ReportConsoleMessage_Params& params);
   void OnPostMessage(int handle_id,
                      const base::string16& message,
                      const std::vector<int>& sent_message_port_ids);
diff --git a/content/browser/service_worker/service_worker_handle.cc b/content/browser/service_worker/service_worker_handle.cc
index 221afaa..cc57b6f 100644
--- a/content/browser/service_worker/service_worker_handle.cc
+++ b/content/browser/service_worker/service_worker_handle.cc
@@ -77,9 +77,30 @@
   // need to re-load the same registration from disk over and over.
 }
 
+void ServiceWorkerHandle::OnWorkerStarted(ServiceWorkerVersion* version) {
+}
+
+void ServiceWorkerHandle::OnWorkerStopped(ServiceWorkerVersion* version) {
+}
+
+void ServiceWorkerHandle::OnErrorReported(ServiceWorkerVersion* version,
+                                          const base::string16& error_message,
+                                          int line_number,
+                                          int column_number,
+                                          const GURL& source_url) {
+}
+
+void ServiceWorkerHandle::OnReportConsoleMessage(ServiceWorkerVersion* version,
+                                                 int source_identifier,
+                                                 int message_level,
+                                                 const base::string16& message,
+                                                 int line_number,
+                                                 const GURL& source_url) {
+}
+
 void ServiceWorkerHandle::OnVersionStateChanged(ServiceWorkerVersion* version) {
   sender_->Send(new ServiceWorkerMsg_ServiceWorkerStateChanged(
-      handle_id_, GetWebServiceWorkerState(version)));
+      thread_id_, handle_id_, GetWebServiceWorkerState(version)));
 }
 
 ServiceWorkerObjectInfo ServiceWorkerHandle::GetObjectInfo() {
diff --git a/content/browser/service_worker/service_worker_handle.h b/content/browser/service_worker/service_worker_handle.h
index d68f1a9..2aa7cc0 100644
--- a/content/browser/service_worker/service_worker_handle.h
+++ b/content/browser/service_worker/service_worker_handle.h
@@ -50,6 +50,19 @@
   virtual ~ServiceWorkerHandle();
 
   // ServiceWorkerVersion::Listener overrides.
+  virtual void OnWorkerStarted(ServiceWorkerVersion* version) OVERRIDE;
+  virtual void OnWorkerStopped(ServiceWorkerVersion* version) OVERRIDE;
+  virtual void OnErrorReported(ServiceWorkerVersion* version,
+                               const base::string16& error_message,
+                               int line_number,
+                               int column_number,
+                               const GURL& source_url) OVERRIDE;
+  virtual void OnReportConsoleMessage(ServiceWorkerVersion* version,
+                                      int source_identifier,
+                                      int message_level,
+                                      const base::string16& message,
+                                      int line_number,
+                                      const GURL& source_url) OVERRIDE;
   virtual void OnVersionStateChanged(ServiceWorkerVersion* version) OVERRIDE;
 
   ServiceWorkerObjectInfo GetObjectInfo();
diff --git a/content/browser/service_worker/service_worker_handle_unittest.cc b/content/browser/service_worker/service_worker_handle_unittest.cc
index b17798b..ebc3c74 100644
--- a/content/browser/service_worker/service_worker_handle_unittest.cc
+++ b/content/browser/service_worker/service_worker_handle_unittest.cc
@@ -32,8 +32,8 @@
   ServiceWorkerMsg_ServiceWorkerStateChanged::Param param;
   ASSERT_TRUE(ServiceWorkerMsg_ServiceWorkerStateChanged::Read(
       message, &param));
-  EXPECT_EQ(expected_handle_id, param.a);
-  EXPECT_EQ(expected_state, param.b);
+  EXPECT_EQ(expected_handle_id, param.b);
+  EXPECT_EQ(expected_state, param.c);
 }
 
 }  // namespace
@@ -44,7 +44,7 @@
       : browser_thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP) {}
 
   virtual void SetUp() OVERRIDE {
-    context_.reset(new ServiceWorkerContextCore(base::FilePath(), NULL));
+    context_.reset(new ServiceWorkerContextCore(base::FilePath(), NULL, NULL));
     helper_.reset(new EmbeddedWorkerTestHelper(context_.get(),
                                                kRenderProcessId));
 
@@ -104,7 +104,7 @@
                             blink::WebServiceWorkerStateInstalling,
                             ipc_sink()->GetMessageAt(1));
   // 3. SendMessageToWorker (to send InstallEvent), and
-  EXPECT_EQ(EmbeddedWorkerContextMsg_SendMessageToWorker::ID,
+  EXPECT_EQ(EmbeddedWorkerContextMsg_MessageToWorker::ID,
             ipc_sink()->GetMessageAt(2)->type());
   // 4. StateChanged (state == Installed).
   VerifyStateChangedMessage(handle->handle_id(),
diff --git a/content/browser/service_worker/service_worker_info.cc b/content/browser/service_worker/service_worker_info.cc
index 225f73f..64d12fd 100644
--- a/content/browser/service_worker/service_worker_info.cc
+++ b/content/browser/service_worker/service_worker_info.cc
@@ -4,27 +4,34 @@
 
 #include "content/browser/service_worker/service_worker_info.h"
 
+#include "content/common/service_worker/service_worker_types.h"
+
 namespace content {
 
 ServiceWorkerVersionInfo::ServiceWorkerVersionInfo()
     : is_null(true),
       running_status(ServiceWorkerVersion::STOPPED),
       status(ServiceWorkerVersion::NEW),
+      version_id(kInvalidServiceWorkerVersionId),
       process_id(-1),
       thread_id(-1) {}
 
 ServiceWorkerVersionInfo::ServiceWorkerVersionInfo(
     ServiceWorkerVersion::RunningStatus running_status,
     ServiceWorkerVersion::Status status,
+    int64 version_id,
     int process_id,
     int thread_id)
     : is_null(false),
       running_status(running_status),
       status(status),
+      version_id(version_id),
       process_id(process_id),
       thread_id(thread_id) {}
 ServiceWorkerVersionInfo::~ServiceWorkerVersionInfo() {}
 
+ServiceWorkerRegistrationInfo::ServiceWorkerRegistrationInfo() {}
+
 ServiceWorkerRegistrationInfo::ServiceWorkerRegistrationInfo(
     const GURL& script_url,
     const GURL& pattern,
diff --git a/content/browser/service_worker/service_worker_info.h b/content/browser/service_worker/service_worker_info.h
index fe85d77..9d1a617 100644
--- a/content/browser/service_worker/service_worker_info.h
+++ b/content/browser/service_worker/service_worker_info.h
@@ -8,15 +8,17 @@
 #include <vector>
 
 #include "content/browser/service_worker/service_worker_version.h"
+#include "content/common/content_export.h"
 #include "url/gurl.h"
 
 namespace content {
 
-class ServiceWorkerVersionInfo {
+class CONTENT_EXPORT ServiceWorkerVersionInfo {
  public:
   ServiceWorkerVersionInfo();
   ServiceWorkerVersionInfo(ServiceWorkerVersion::RunningStatus running_status,
                            ServiceWorkerVersion::Status status,
+                           int64 version_id,
                            int process_id,
                            int thread_id);
   ~ServiceWorkerVersionInfo();
@@ -24,12 +26,14 @@
   bool is_null;
   ServiceWorkerVersion::RunningStatus running_status;
   ServiceWorkerVersion::Status status;
+  int64 version_id;
   int process_id;
   int thread_id;
 };
 
-class ServiceWorkerRegistrationInfo {
+class CONTENT_EXPORT ServiceWorkerRegistrationInfo {
  public:
+  ServiceWorkerRegistrationInfo();
   ServiceWorkerRegistrationInfo(
       const GURL& script_url,
       const GURL& pattern,
@@ -39,7 +43,6 @@
 
   GURL script_url;
   GURL pattern;
-
   ServiceWorkerVersionInfo active_version;
   ServiceWorkerVersionInfo pending_version;
 };
diff --git a/content/browser/service_worker/service_worker_internals_ui.cc b/content/browser/service_worker/service_worker_internals_ui.cc
index 746f699..950816c 100644
--- a/content/browser/service_worker/service_worker_internals_ui.cc
+++ b/content/browser/service_worker/service_worker_internals_ui.cc
@@ -8,8 +8,10 @@
 #include <vector>
 
 #include "base/bind.h"
+#include "base/memory/scoped_vector.h"
+#include "base/strings/string_number_conversions.h"
 #include "base/values.h"
-#include "content/browser/service_worker/service_worker_context_core.h"
+#include "content/browser/service_worker/service_worker_context_observer.h"
 #include "content/browser/service_worker/service_worker_context_wrapper.h"
 #include "content/browser/service_worker/service_worker_registration.h"
 #include "content/browser/service_worker/service_worker_version.h"
@@ -41,7 +43,8 @@
                  scoped_ptr<ListValue> original_args)
       : internals_(internals), original_args_(original_args.Pass()) {}
 
-  void GetRegistrationsOnIOThread(ServiceWorkerContextWrapper* context,
+  void GetRegistrationsOnIOThread(int partition_id,
+                                  ServiceWorkerContextWrapper* context,
                                   const base::FilePath& context_path);
   void UnregisterOnIOThread(scoped_refptr<ServiceWorkerContextWrapper> context,
                             const GURL& scope);
@@ -57,6 +60,7 @@
   friend class base::RefCountedThreadSafe<OperationProxy>;
   ~OperationProxy() {}
   void OnHaveRegistrations(
+      int partition_id,
       const base::FilePath& context_path,
       const std::vector<ServiceWorkerRegistrationInfo>& registrations);
 
@@ -78,8 +82,90 @@
   scoped_ptr<ListValue> original_args_;
 };
 
+class ServiceWorkerInternalsUI::PartitionObserver
+    : public ServiceWorkerContextObserver {
+ public:
+  PartitionObserver(int partition_id, WebUI* web_ui)
+      : partition_id_(partition_id), web_ui_(web_ui) {}
+  virtual ~PartitionObserver() {}
+  // ServiceWorkerContextObserver overrides:
+  virtual void OnWorkerStarted(int64 version_id,
+                               int process_id,
+                               int thread_id) OVERRIDE {
+    DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+    web_ui_->CallJavascriptFunction(
+        "serviceworker.onWorkerStarted",
+        FundamentalValue(partition_id_),
+        StringValue(base::Int64ToString(version_id)),
+        FundamentalValue(process_id),
+        FundamentalValue(thread_id));
+  }
+  virtual void OnWorkerStopped(int64 version_id,
+                               int process_id,
+                               int thread_id) OVERRIDE {
+    DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+    web_ui_->CallJavascriptFunction(
+        "serviceworker.onWorkerStopped",
+        FundamentalValue(partition_id_),
+        StringValue(base::Int64ToString(version_id)),
+        FundamentalValue(process_id),
+        FundamentalValue(thread_id));
+  }
+  virtual void OnVersionStateChanged(int64 version_id) OVERRIDE {
+    DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+    web_ui_->CallJavascriptFunction(
+        "serviceworker.onVersionStateChanged",
+        FundamentalValue(partition_id_),
+        StringValue(base::Int64ToString(version_id)));
+  }
+  virtual void OnErrorReported(int64 version_id,
+                               int process_id,
+                               int thread_id,
+                               const ErrorInfo& info) OVERRIDE {
+    DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+    ScopedVector<const Value> args;
+    args.push_back(new FundamentalValue(partition_id_));
+    args.push_back(new StringValue(base::Int64ToString(version_id)));
+    args.push_back(new FundamentalValue(process_id));
+    args.push_back(new FundamentalValue(thread_id));
+    scoped_ptr<DictionaryValue> value(new DictionaryValue());
+    value->SetString("message", info.error_message);
+    value->SetInteger("lineNumber", info.line_number);
+    value->SetInteger("columnNumber", info.column_number);
+    value->SetString("sourceURL", info.source_url.spec());
+    args.push_back(value.release());
+    web_ui_->CallJavascriptFunction("serviceworker.onErrorReported",
+                                    args.get());
+  }
+  virtual void OnReportConsoleMessage(int64 version_id,
+                                      int process_id,
+                                      int thread_id,
+                                      const ConsoleMessage& message) OVERRIDE {
+    DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+    ScopedVector<const Value> args;
+    args.push_back(new FundamentalValue(partition_id_));
+    args.push_back(new StringValue(base::Int64ToString(version_id)));
+    args.push_back(new FundamentalValue(process_id));
+    args.push_back(new FundamentalValue(thread_id));
+    scoped_ptr<DictionaryValue> value(new DictionaryValue());
+    value->SetInteger("sourceIdentifier", message.source_identifier);
+    value->SetInteger("message_level", message.message_level);
+    value->SetString("message", message.message);
+    value->SetInteger("lineNumber", message.line_number);
+    value->SetString("sourceURL", message.source_url.spec());
+    args.push_back(value.release());
+    web_ui_->CallJavascriptFunction("serviceworker.onConsoleMessageReported",
+                                    args.get());
+  }
+  int partition_id() const { return partition_id_; }
+
+ private:
+  const int partition_id_;
+  WebUI* const web_ui_;
+};
+
 ServiceWorkerInternalsUI::ServiceWorkerInternalsUI(WebUI* web_ui)
-    : WebUIController(web_ui) {
+    : WebUIController(web_ui), next_partition_id_(0) {
   WebUIDataSource* source =
       WebUIDataSource::Create(kChromeUIServiceWorkerInternalsHost);
   source->SetUseJsonJSFormatV2();
@@ -116,7 +202,16 @@
                  base::Unretained(this)));
 }
 
-ServiceWorkerInternalsUI::~ServiceWorkerInternalsUI() {}
+ServiceWorkerInternalsUI::~ServiceWorkerInternalsUI() {
+  BrowserContext* browser_context =
+      web_ui()->GetWebContents()->GetBrowserContext();
+  // Safe to use base::Unretained(this) because
+  // ForEachStoragePartition is synchronous.
+  BrowserContext::StoragePartitionCallback remove_observer_cb =
+      base::Bind(&ServiceWorkerInternalsUI::RemoveObserverFromStoragePartition,
+                 base::Unretained(this));
+  BrowserContext::ForEachStoragePartition(browser_context, remove_observer_cb);
+}
 
 void ServiceWorkerInternalsUI::GetAllRegistrations(const ListValue* args) {
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
@@ -126,27 +221,51 @@
 
   // Safe to use base::Unretained(this) because
   // ForEachStoragePartition is synchronous.
-  BrowserContext::StoragePartitionCallback cb =
+  BrowserContext::StoragePartitionCallback add_context_cb =
       base::Bind(&ServiceWorkerInternalsUI::AddContextFromStoragePartition,
                  base::Unretained(this));
-  BrowserContext::ForEachStoragePartition(browser_context, cb);
+  BrowserContext::ForEachStoragePartition(browser_context, add_context_cb);
 }
 
 void ServiceWorkerInternalsUI::AddContextFromStoragePartition(
     StoragePartition* partition) {
+  int partition_id = 0;
   scoped_refptr<ServiceWorkerContextWrapper> context =
       static_cast<ServiceWorkerContextWrapper*>(
           partition->GetServiceWorkerContext());
+  if (PartitionObserver* observer =
+          observers_.get(reinterpret_cast<uintptr_t>(partition))) {
+    partition_id = observer->partition_id();
+  } else {
+    partition_id = next_partition_id_++;
+    scoped_ptr<PartitionObserver> new_observer(
+        new PartitionObserver(partition_id, web_ui()));
+    context->AddObserver(new_observer.get());
+    observers_.set(reinterpret_cast<uintptr_t>(partition), new_observer.Pass());
+  }
   BrowserThread::PostTask(
       BrowserThread::IO,
       FROM_HERE,
       base::Bind(
           &ServiceWorkerInternalsUI::OperationProxy::GetRegistrationsOnIOThread,
           new OperationProxy(AsWeakPtr(), scoped_ptr<ListValue>()),
+          partition_id,
           context,
           partition->GetPath()));
 }
 
+void ServiceWorkerInternalsUI::RemoveObserverFromStoragePartition(
+    StoragePartition* partition) {
+  scoped_ptr<PartitionObserver> observer(
+      observers_.take_and_erase(reinterpret_cast<uintptr_t>(partition)));
+  if (!observer.get())
+    return;
+  scoped_refptr<ServiceWorkerContextWrapper> context =
+      static_cast<ServiceWorkerContextWrapper*>(
+          partition->GetServiceWorkerContext());
+  context->RemoveObserver(observer.get());
+}
+
 namespace {
 void FindContext(const base::FilePath& partition_path,
                  StoragePartition** result_partition,
@@ -179,9 +298,9 @@
       web_ui()->GetWebContents()->GetBrowserContext();
 
   StoragePartition* result_partition(NULL);
-  BrowserContext::StoragePartitionCallback cb =
+  BrowserContext::StoragePartitionCallback find_context_cb =
       base::Bind(&FindContext, *partition_path, &result_partition, context);
-  BrowserContext::ForEachStoragePartition(browser_context, cb);
+  BrowserContext::ForEachStoragePartition(browser_context, find_context_cb);
 
   if (!result_partition || !(*context))
     return false;
@@ -267,6 +386,7 @@
 }
 
 void ServiceWorkerInternalsUI::OperationProxy::GetRegistrationsOnIOThread(
+    int partition_id,
     ServiceWorkerContextWrapper* context,
     const base::FilePath& context_path) {
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
@@ -274,6 +394,7 @@
   context->context()->storage()->GetAllRegistrations(
       base::Bind(&ServiceWorkerInternalsUI::OperationProxy::OnHaveRegistrations,
                  this,
+                 partition_id,
                  context_path));
 }
 
@@ -363,13 +484,14 @@
       info->SetString("status", "DEACTIVATED");
       break;
   }
-
+  info->SetString("version_id", base::Int64ToString(version.version_id));
   info->SetInteger("process_id", version.process_id);
   info->SetInteger("thread_id", version.thread_id);
 }
 }  // namespace
 
 void ServiceWorkerInternalsUI::OperationProxy::OnHaveRegistrations(
+    int partition_id,
     const base::FilePath& context_path,
     const std::vector<ServiceWorkerRegistrationInfo>& registrations) {
   if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
@@ -379,6 +501,7 @@
         base::Bind(
             &ServiceWorkerInternalsUI::OperationProxy::OnHaveRegistrations,
             this,
+            partition_id,
             context_path,
             registrations));
     return;
@@ -403,7 +526,7 @@
 
     if (!registration.pending_version.is_null) {
       DictionaryValue* pending_info = new DictionaryValue();
-      UpdateVersionInfo(registration.active_version, pending_info);
+      UpdateVersionInfo(registration.pending_version, pending_info);
       registration_info->Set("pending", pending_info);
     }
 
@@ -414,6 +537,7 @@
     internals_->web_ui()->CallJavascriptFunction(
         "serviceworker.onPartitionData",
         result,
+        FundamentalValue(partition_id),
         StringValue(context_path.value()));
 }
 
diff --git a/content/browser/service_worker/service_worker_internals_ui.h b/content/browser/service_worker/service_worker_internals_ui.h
index faa3f98..715fe70 100644
--- a/content/browser/service_worker/service_worker_internals_ui.h
+++ b/content/browser/service_worker/service_worker_internals_ui.h
@@ -5,10 +5,14 @@
 #ifndef CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_INTERNALS_UI_H_
 #define CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_INTERNALS_UI_H_
 
+#include <set>
+
+#include "base/containers/scoped_ptr_hash_map.h"
 #include "base/files/file_path.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
+#include "content/browser/service_worker/service_worker_context_observer.h"
 #include "content/common/service_worker/service_worker_status_code.h"
 #include "content/public/browser/web_ui_controller.h"
 
@@ -32,10 +36,13 @@
 
  private:
   class OperationProxy;
+  class PartitionObserver;
 
   virtual ~ServiceWorkerInternalsUI();
   void AddContextFromStoragePartition(StoragePartition* partition);
 
+  void RemoveObserverFromStoragePartition(StoragePartition* partition);
+
   // Called from Javascript.
   void GetAllRegistrations(const base::ListValue* args);
   void StartWorker(const base::ListValue* args);
@@ -48,6 +55,9 @@
       base::FilePath* partition_path,
       GURL* scope,
       scoped_refptr<ServiceWorkerContextWrapper>* context) const;
+
+  base::ScopedPtrHashMap<uintptr_t, PartitionObserver> observers_;
+  int next_partition_id_;
 };
 
 }  // namespace content
diff --git a/content/browser/service_worker/service_worker_job_unittest.cc b/content/browser/service_worker/service_worker_job_unittest.cc
index fb1ab63..de5e612 100644
--- a/content/browser/service_worker/service_worker_job_unittest.cc
+++ b/content/browser/service_worker/service_worker_job_unittest.cc
@@ -94,7 +94,7 @@
         render_process_id_(88) {}
 
   virtual void SetUp() OVERRIDE {
-    context_.reset(new ServiceWorkerContextCore(base::FilePath(), NULL));
+    context_.reset(new ServiceWorkerContextCore(base::FilePath(), NULL, NULL));
     helper_.reset(new EmbeddedWorkerTestHelper(context_.get(),
                                                render_process_id_));
   }
@@ -137,16 +137,10 @@
   storage()->FindRegistrationForDocument(
       GURL("http://www.example.com/"),
       SaveFoundRegistration(SERVICE_WORKER_OK, &called, &registration2));
-
-  ServiceWorkerRegistration* null_registration(NULL);
-  ASSERT_EQ(null_registration, registration1);
-  ASSERT_EQ(null_registration, registration2);
-  EXPECT_FALSE(called);
   base::RunLoop().RunUntilIdle();
   EXPECT_TRUE(called);
-  ASSERT_NE(null_registration, registration1);
-  ASSERT_NE(null_registration, registration2);
-
+  ASSERT_TRUE(registration1);
+  ASSERT_EQ(registration1, original_registration);
   ASSERT_EQ(registration1, registration2);
 }
 
@@ -168,8 +162,6 @@
   storage()->FindRegistrationForDocument(
       GURL("http://www.example.com/one"),
       SaveFoundRegistration(SERVICE_WORKER_OK, &called, &registration1));
-
-  EXPECT_FALSE(called);
   base::RunLoop().RunUntilIdle();
   EXPECT_TRUE(called);
 
@@ -177,10 +169,9 @@
   storage()->FindRegistrationForDocument(
       GURL("http://www.example.com/two"),
       SaveFoundRegistration(SERVICE_WORKER_OK, &called, &registration2));
-  EXPECT_FALSE(called);
   base::RunLoop().RunUntilIdle();
   EXPECT_TRUE(called);
-
+  ASSERT_EQ(registration1, original_registration);
   ASSERT_EQ(registration1, registration2);
 }
 
@@ -216,12 +207,9 @@
       GURL("http://www.example.com/two/"),
       SaveFoundRegistration(SERVICE_WORKER_OK, &called2, &registration2));
 
-  EXPECT_FALSE(called1);
-  EXPECT_FALSE(called2);
   base::RunLoop().RunUntilIdle();
   EXPECT_TRUE(called2);
   EXPECT_TRUE(called1);
-
   ASSERT_NE(registration1, registration2);
 }
 
@@ -280,6 +268,19 @@
   ASSERT_EQ(scoped_refptr<ServiceWorkerRegistration>(NULL), registration);
 }
 
+TEST_F(ServiceWorkerJobTest, Unregister_NothingRegistered) {
+  GURL pattern("http://www.example.com/*");
+
+  bool called;
+  job_coordinator()->Unregister(pattern,
+                                render_process_id_,
+                                SaveUnregistration(SERVICE_WORKER_OK, &called));
+
+  ASSERT_FALSE(called);
+  base::RunLoop().RunUntilIdle();
+  ASSERT_TRUE(called);
+}
+
 // Make sure that when a new registration replaces an existing
 // registration, that the old one is cleaned up.
 TEST_F(ServiceWorkerJobTest, RegisterNewScript) {
@@ -403,6 +404,7 @@
 
   virtual void OnStartWorker(int embedded_worker_id,
                              int64 service_worker_version_id,
+                             const GURL& scope,
                              const GURL& script_url) OVERRIDE {
     // Simulate failure by sending worker stopped instead of started.
     EmbeddedWorkerInstance* worker = registry()->GetWorker(embedded_worker_id);
diff --git a/content/browser/service_worker/service_worker_provider_host.cc b/content/browser/service_worker/service_worker_provider_host.cc
index 5582e64..df789a3 100644
--- a/content/browser/service_worker/service_worker_provider_host.cc
+++ b/content/browser/service_worker/service_worker_provider_host.cc
@@ -10,6 +10,7 @@
 #include "content/browser/service_worker/service_worker_handle.h"
 #include "content/browser/service_worker/service_worker_utils.h"
 #include "content/browser/service_worker/service_worker_version.h"
+#include "content/common/service_worker/service_worker_messages.h"
 
 namespace content {
 
@@ -57,10 +58,15 @@
   for (std::set<int>::iterator it = script_client_thread_ids_.begin();
        it != script_client_thread_ids_.end();
        ++it) {
-    dispatcher_host_->RegisterServiceWorkerHandle(
-        ServiceWorkerHandle::Create(context_, dispatcher_host_,
-                                    *it, version));
-    // TODO(kinuko): dispatch activechange event to the script clients.
+    ServiceWorkerObjectInfo info;
+    if (context_ && version) {
+      scoped_ptr<ServiceWorkerHandle> handle =
+          ServiceWorkerHandle::Create(context_, dispatcher_host_, *it, version);
+      info = handle->GetObjectInfo();
+      dispatcher_host_->RegisterServiceWorkerHandle(handle.Pass());
+    }
+    dispatcher_host_->Send(
+        new ServiceWorkerMsg_SetCurrentServiceWorker(*it, provider_id(), info));
   }
 }
 
@@ -81,9 +87,6 @@
   for (std::set<int>::iterator it = script_client_thread_ids_.begin();
        it != script_client_thread_ids_.end();
        ++it) {
-    dispatcher_host_->RegisterServiceWorkerHandle(
-        ServiceWorkerHandle::Create(context_, dispatcher_host_,
-                                    *it, version));
     // TODO(kinuko): dispatch pendingchange event to the script clients.
   }
 }
diff --git a/content/browser/service_worker/service_worker_provider_host.h b/content/browser/service_worker/service_worker_provider_host.h
index be18d7a..1ca21b0 100644
--- a/content/browser/service_worker/service_worker_provider_host.h
+++ b/content/browser/service_worker/service_worker_provider_host.h
@@ -48,6 +48,12 @@
     return active_version_.get();
   }
 
+  // The service worker version that corresponds with
+  // navigate.serviceWorker.pending for our document.
+  ServiceWorkerVersion* pending_version() const {
+    return pending_version_.get();
+  }
+
   // The version, if any, that this provider is providing resource loads for.
   // This host observes resource loads made by the serviceworker itself.
   ServiceWorkerVersion* hosted_version() const {
diff --git a/content/browser/service_worker/service_worker_provider_host_unittest.cc b/content/browser/service_worker/service_worker_provider_host_unittest.cc
index 79260d2..5a60295 100644
--- a/content/browser/service_worker/service_worker_provider_host_unittest.cc
+++ b/content/browser/service_worker/service_worker_provider_host_unittest.cc
@@ -6,6 +6,7 @@
 #include "base/memory/weak_ptr.h"
 #include "content/browser/service_worker/service_worker_context_core.h"
 #include "content/browser/service_worker/service_worker_provider_host.h"
+#include "content/browser/service_worker/service_worker_register_job.h"
 #include "content/browser/service_worker/service_worker_registration.h"
 #include "content/browser/service_worker/service_worker_version.h"
 #include "content/public/test/test_browser_thread_bundle.h"
@@ -22,27 +23,32 @@
   virtual ~ServiceWorkerProviderHostTest() {}
 
   virtual void SetUp() OVERRIDE {
-    context_.reset(new ServiceWorkerContextCore(base::FilePath(), NULL));
+    context_.reset(new ServiceWorkerContextCore(base::FilePath(), NULL, NULL));
 
+    scope_ = GURL("http://www.example.com/*");
+    script_url_ = GURL("http://www.example.com/service_worker.js");
     registration_ = new ServiceWorkerRegistration(
-        GURL("http://www.example.com/*"),
-        GURL("http://www.example.com/service_worker.js"),
-        1L, context_->AsWeakPtr());
+        scope_, script_url_, 1L, context_->AsWeakPtr());
     version_ = new ServiceWorkerVersion(
         registration_,
         1L, context_->AsWeakPtr());
 
-    // Preparing two provider hosts (for the same process).
+    // Prepare provider hosts (for the same process).
     scoped_ptr<ServiceWorkerProviderHost> host1(new ServiceWorkerProviderHost(
         kRenderProcessId, 1 /* provider_id */,
         context_->AsWeakPtr(), NULL));
     scoped_ptr<ServiceWorkerProviderHost> host2(new ServiceWorkerProviderHost(
         kRenderProcessId, 2 /* provider_id */,
         context_->AsWeakPtr(), NULL));
+    scoped_ptr<ServiceWorkerProviderHost> host3(new ServiceWorkerProviderHost(
+        kRenderProcessId, 3 /* provider_id */,
+        context_->AsWeakPtr(), NULL));
     provider_host1_ = host1->AsWeakPtr();
     provider_host2_ = host2->AsWeakPtr();
+    provider_host3_ = host3->AsWeakPtr();
     context_->AddProviderHost(make_scoped_ptr(host1.release()));
     context_->AddProviderHost(make_scoped_ptr(host2.release()));
+    context_->AddProviderHost(make_scoped_ptr(host3.release()));
   }
 
   virtual void TearDown() OVERRIDE {
@@ -57,6 +63,9 @@
   scoped_refptr<ServiceWorkerVersion> version_;
   base::WeakPtr<ServiceWorkerProviderHost> provider_host1_;
   base::WeakPtr<ServiceWorkerProviderHost> provider_host2_;
+  base::WeakPtr<ServiceWorkerProviderHost> provider_host3_;
+  GURL scope_;
+  GURL script_url_;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(ServiceWorkerProviderHostTest);
@@ -136,4 +145,44 @@
   ASSERT_FALSE(version_->HasProcessToRun());
 }
 
+class ServiceWorkerRegisterJobAndProviderHostTest
+    : public ServiceWorkerProviderHostTest {
+ protected:
+  ServiceWorkerRegisterJobAndProviderHostTest() {}
+  virtual ~ServiceWorkerRegisterJobAndProviderHostTest() {}
+
+  virtual void SetUp() OVERRIDE {
+    ServiceWorkerProviderHostTest::SetUp();
+    register_job_.reset(new ServiceWorkerRegisterJob(
+        context_->AsWeakPtr(), scope_, script_url_));
+    provider_host1_->set_document_url(GURL("http://www.example.com/foo"));
+    provider_host2_->set_document_url(GURL("http://www.example.com/bar"));
+    provider_host3_->set_document_url(GURL("http://www.example.ca/foo"));
+  }
+
+  virtual void TearDown() OVERRIDE {
+    ServiceWorkerProviderHostTest::TearDown();
+    register_job_.reset();
+  }
+
+  scoped_ptr<ServiceWorkerRegisterJob> register_job_;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(ServiceWorkerRegisterJobAndProviderHostTest);
+};
+
+// Test for ServiceWorkerRegisterJob::AssociatePendingVersionToDocuments.
+TEST_F(ServiceWorkerRegisterJobAndProviderHostTest,
+       AssociatePendingVersionToDocuments) {
+  register_job_->AssociatePendingVersionToDocuments(version_.get());
+  EXPECT_EQ(version_.get(), provider_host1_->pending_version());
+  EXPECT_EQ(version_.get(), provider_host2_->pending_version());
+  EXPECT_EQ(NULL, provider_host3_->pending_version());
+
+  register_job_->AssociatePendingVersionToDocuments(NULL);
+  EXPECT_EQ(NULL, provider_host1_->pending_version());
+  EXPECT_EQ(NULL, provider_host2_->pending_version());
+  EXPECT_EQ(NULL, provider_host3_->pending_version());
+}
+
 }  // namespace content
diff --git a/content/browser/service_worker/service_worker_register_job.cc b/content/browser/service_worker/service_worker_register_job.cc
index 227d78c..27b687e 100644
--- a/content/browser/service_worker/service_worker_register_job.cc
+++ b/content/browser/service_worker/service_worker_register_job.cc
@@ -6,13 +6,23 @@
 
 #include <vector>
 
+#include "base/message_loop/message_loop.h"
 #include "content/browser/service_worker/service_worker_context_core.h"
 #include "content/browser/service_worker/service_worker_job_coordinator.h"
 #include "content/browser/service_worker/service_worker_registration.h"
 #include "content/browser/service_worker/service_worker_storage.h"
+#include "content/browser/service_worker/service_worker_utils.h"
 
 namespace content {
 
+namespace {
+
+void RunSoon(const base::Closure& closure) {
+  base::MessageLoop::current()->PostTask(FROM_HERE, closure);
+}
+
+}
+
 typedef ServiceWorkerRegisterJobBase::RegistrationJobType RegistrationJobType;
 
 ServiceWorkerRegisterJob::ServiceWorkerRegisterJob(
@@ -23,21 +33,29 @@
       pattern_(pattern),
       script_url_(script_url),
       phase_(INITIAL),
+      is_promise_resolved_(false),
+      promise_resolved_status_(SERVICE_WORKER_OK),
       weak_factory_(this) {}
 
-ServiceWorkerRegisterJob::~ServiceWorkerRegisterJob() {}
+ServiceWorkerRegisterJob::~ServiceWorkerRegisterJob() {
+  DCHECK(phase_ == INITIAL || phase_ == COMPLETE);
+}
 
 void ServiceWorkerRegisterJob::AddCallback(const RegistrationCallback& callback,
                                            int process_id) {
-  // If we've created a pending version, associate source_provider it with that,
-  // otherwise queue it up.
-  callbacks_.push_back(callback);
   DCHECK_NE(-1, process_id);
-  if (phase_ >= UPDATE && pending_version()) {
+  if (phase_ >= UPDATE && pending_version())
     pending_version()->AddProcessToWorker(process_id);
-  } else {
+  else
     pending_process_ids_.push_back(process_id);
+
+  if (!is_promise_resolved_) {
+    callbacks_.push_back(callback);
+    return;
   }
+  RunSoon(base::Bind(
+      callback, promise_resolved_status_,
+      promise_resolved_registration_, promise_resolved_version_));
 }
 
 void ServiceWorkerRegisterJob::Start() {
@@ -108,9 +126,12 @@
     case INSTALL:
       DCHECK(phase_ == UPDATE) << phase_;
       break;
-    case ACTIVATE:
+    case STORE:
       DCHECK(phase_ == INSTALL) << phase_;
       break;
+    case ACTIVATE:
+      DCHECK(phase_ == STORE) << phase_;
+      break;
     case COMPLETE:
       DCHECK(phase_ != INITIAL && phase_ != COMPLETE) << phase_;
       break;
@@ -144,7 +165,7 @@
       UpdateAndContinue(status);
       return;
     }
-    RunCallbacks(
+    ResolvePromise(
         status, existing_registration, existing_registration->active_version());
     Complete(SERVICE_WORKER_OK);
     return;
@@ -161,13 +182,16 @@
   // registering a new one.
   // TODO(falken): Match the spec. We now throw away the active_version_ and
   // pending_version_ of the existing registration, which isn't in the spec.
+  // TODO(michaeln): Deactivate the live existing_registration object and
+  // eventually call storage->DeleteVersionResources()
+  // when it no longer has any controllees.
   context_->storage()->DeleteRegistration(
-      pattern_,
+      existing_registration->id(),
       base::Bind(&ServiceWorkerRegisterJob::RegisterAndContinue,
                  weak_factory_.GetWeakPtr()));
 }
 
-// Registers a new ServiceWorkerRegistration.
+// Creates a new ServiceWorkerRegistration.
 void ServiceWorkerRegisterJob::RegisterAndContinue(
     ServiceWorkerStatusCode status) {
   SetPhase(REGISTER);
@@ -180,10 +204,8 @@
   set_registration(new ServiceWorkerRegistration(
       pattern_, script_url_, context_->storage()->NewRegistrationId(),
       context_));
-  context_->storage()->StoreRegistration(
-      registration(),
-      base::Bind(&ServiceWorkerRegisterJob::UpdateAndContinue,
-                 weak_factory_.GetWeakPtr()));
+  context_->storage()->NotifyInstallingRegistration(registration());
+  UpdateAndContinue(SERVICE_WORKER_OK);
 }
 
 // This function corresponds to the spec's _Update algorithm.
@@ -202,18 +224,18 @@
   // no pending worker at this point.
   DCHECK(!registration()->pending_version());
 
-  // TODO(michaeln,falken): Script fetching and comparing the old and new
-  // script belongs here.
-
   // "Let serviceWorker be a newly-created ServiceWorker object..." and start
   // the worker.
   set_pending_version(new ServiceWorkerVersion(
       registration(), context_->storage()->NewVersionId(), context_));
   for (std::vector<int>::const_iterator it = pending_process_ids_.begin();
        it != pending_process_ids_.end();
-       ++it)
+       ++it) {
     pending_version()->AddProcessToWorker(*it);
+  }
 
+  // TODO(michaeln): Start the worker into a paused state where the
+  // script resource is downloaded but not yet evaluated.
   pending_version()->StartWorker(
       base::Bind(&ServiceWorkerRegisterJob::OnStartWorkerFinished,
                  weak_factory_.GetWeakPtr()));
@@ -228,16 +250,21 @@
     return;
   }
 
+  // TODO(michaeln): Compare the old and new script.
+  // If different unpause the worker and continue with
+  // the job. If the same ResolvePromise with the current
+  // version and complete the job, throwing away the new version
+  // since there's nothing new.
+
   // "Resolve promise with serviceWorker."
   // Although the spec doesn't set pendingWorker until after resolving the
   // promise, our system's resolving works by passing ServiceWorkerRegistration
   // to the callbacks, so pendingWorker must be set first.
   DCHECK(!registration()->pending_version());
   registration()->set_pending_version(pending_version());
-  RunCallbacks(status, registration(), pending_version());
+  ResolvePromise(status, registration(), pending_version());
 
-  // TODO(kinuko): Iterate over all provider hosts and call SetPendingVersion()
-  // for documents that are in-scope.
+  AssociatePendingVersionToDocuments(pending_version());
 
   InstallAndContinue();
 }
@@ -260,7 +287,21 @@
   // TODO(kinuko,falken): For some error cases (e.g. ServiceWorker is
   // unexpectedly terminated) we may want to retry sending the event again.
   if (status != SERVICE_WORKER_OK) {
-    registration()->set_pending_version(NULL);
+    Complete(status);
+    return;
+  }
+
+  SetPhase(STORE);
+  context_->storage()->StoreRegistration(
+      registration(),
+      pending_version(),
+      base::Bind(&ServiceWorkerRegisterJob::OnStoreRegistrationComplete,
+                 weak_factory_.GetWeakPtr()));
+}
+
+void ServiceWorkerRegisterJob::OnStoreRegistrationComplete(
+    ServiceWorkerStatusCode status) {
+  if (status != SERVICE_WORKER_OK) {
     Complete(status);
     return;
   }
@@ -272,8 +313,6 @@
 void ServiceWorkerRegisterJob::ActivateAndContinue() {
   SetPhase(ACTIVATE);
 
-  // TODO(michaeln): Persist the newly ACTIVE version.
-
   // "If existingWorker is not null, then: wait for exitingWorker to finish
   // handling any in-progress requests."
   // See if we already have an active_version for the scope and it has
@@ -295,6 +334,7 @@
   // "Set serviceWorkerRegistration.pendingWorker to null."
   // "Set serviceWorkerRegistration.activeWorker to activatingWorker."
   registration()->set_pending_version(NULL);
+  AssociatePendingVersionToDocuments(NULL);
   DCHECK(!registration()->active_version());
   registration()->set_active_version(pending_version());
 
@@ -317,26 +357,43 @@
     Complete(status);
     return;
   }
-
-  set_pending_version(NULL);
+  context_->storage()->UpdateToActiveState(
+      registration(),
+      base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
   Complete(SERVICE_WORKER_OK);
 }
 
 void ServiceWorkerRegisterJob::Complete(ServiceWorkerStatusCode status) {
   SetPhase(COMPLETE);
-  // In success case the callbacks must have been dispatched already
-  // (so this is no-op), otherwise we must have come here for abort case,
-  // so dispatch callbacks with NULL.
-  DCHECK(callbacks_.empty() || status != SERVICE_WORKER_OK);
-  RunCallbacks(status, NULL, NULL);
-
+  if (status != SERVICE_WORKER_OK) {
+    if (registration() && registration()->pending_version()) {
+      AssociatePendingVersionToDocuments(NULL);
+      registration()->set_pending_version(NULL);
+      // TODO(michaeln): Take care of deleteting the version's
+      // script resources too.
+    }
+    if (registration() && !registration()->active_version()) {
+      context_->storage()->DeleteRegistration(
+          registration()->id(),
+          base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
+    }
+    if (!is_promise_resolved_)
+      ResolvePromise(status, NULL, NULL);
+  }
+  DCHECK(callbacks_.empty());
+  context_->storage()->NotifyDoneInstallingRegistration(registration());
   context_->job_coordinator()->FinishJob(pattern_, this);
 }
 
-void ServiceWorkerRegisterJob::RunCallbacks(
+void ServiceWorkerRegisterJob::ResolvePromise(
     ServiceWorkerStatusCode status,
     ServiceWorkerRegistration* registration,
     ServiceWorkerVersion* version) {
+  DCHECK(!is_promise_resolved_);
+  is_promise_resolved_ = true;
+  promise_resolved_status_ = status;
+  promise_resolved_registration_ = registration;
+  promise_resolved_version_ = version;
   for (std::vector<RegistrationCallback>::iterator it = callbacks_.begin();
        it != callbacks_.end();
        ++it) {
@@ -345,4 +402,20 @@
   callbacks_.clear();
 }
 
+void ServiceWorkerRegisterJob::AssociatePendingVersionToDocuments(
+    ServiceWorkerVersion* version) {
+  // TODO(michaeln): This needs to respect the longest prefix wins
+  // when it comes to finding a registration for a document url.
+  // This should should utilize storage->FindRegistrationForDocument().
+  for (scoped_ptr<ServiceWorkerContextCore::ProviderHostIterator> it =
+           context_->GetProviderHostIterator();
+       !it->IsAtEnd();
+       it->Advance()) {
+    ServiceWorkerProviderHost* provider_host = it->GetProviderHost();
+    if (ServiceWorkerUtils::ScopeMatches(pattern_,
+                                         provider_host->document_url()))
+      provider_host->SetPendingVersion(version);
+  }
+}
+
 }  // namespace content
diff --git a/content/browser/service_worker/service_worker_register_job.h b/content/browser/service_worker/service_worker_register_job.h
index 4faf63e..5b02039 100644
--- a/content/browser/service_worker/service_worker_register_job.h
+++ b/content/browser/service_worker/service_worker_register_job.h
@@ -38,12 +38,13 @@
                               ServiceWorkerVersion* version)>
       RegistrationCallback;
 
-  ServiceWorkerRegisterJob(base::WeakPtr<ServiceWorkerContextCore> context,
-                           const GURL& pattern,
-                           const GURL& script_url);
+  CONTENT_EXPORT ServiceWorkerRegisterJob(
+      base::WeakPtr<ServiceWorkerContextCore> context,
+      const GURL& pattern,
+      const GURL& script_url);
   virtual ~ServiceWorkerRegisterJob();
 
-  // Registers a callback to be called when the job completes (whether
+  // Registers a callback to be called when the promise would resolve (whether
   // successfully or not). Multiple callbacks may be registered. |process_id| is
   // added via AddProcessToWorker to the ServiceWorkerVersion created by the
   // registration job.
@@ -55,12 +56,16 @@
   virtual RegistrationJobType GetType() OVERRIDE;
 
  private:
+  FRIEND_TEST_ALL_PREFIXES(ServiceWorkerRegisterJobAndProviderHostTest,
+                           AssociatePendingVersionToDocuments);
+
   enum Phase {
      INITIAL,
      START,
      REGISTER,
      UPDATE,
      INSTALL,
+     STORE,
      ACTIVATE,
      COMPLETE
   };
@@ -87,15 +92,19 @@
   void RegisterAndContinue(ServiceWorkerStatusCode status);
   void UpdateAndContinue(ServiceWorkerStatusCode status);
   void OnStartWorkerFinished(ServiceWorkerStatusCode status);
+  void OnStoreRegistrationComplete(ServiceWorkerStatusCode status);
   void InstallAndContinue();
   void OnInstallFinished(ServiceWorkerStatusCode status);
   void ActivateAndContinue();
   void OnActivateFinished(ServiceWorkerStatusCode status);
   void Complete(ServiceWorkerStatusCode status);
 
-  void RunCallbacks(ServiceWorkerStatusCode status,
-                    ServiceWorkerRegistration* registration,
-                    ServiceWorkerVersion* version);
+  void ResolvePromise(ServiceWorkerStatusCode status,
+                      ServiceWorkerRegistration* registration,
+                      ServiceWorkerVersion* version);
+
+  CONTENT_EXPORT void AssociatePendingVersionToDocuments(
+      ServiceWorkerVersion* version);
 
   // The ServiceWorkerContextCore object should always outlive this.
   base::WeakPtr<ServiceWorkerContextCore> context_;
@@ -106,6 +115,10 @@
   std::vector<int> pending_process_ids_;
   Phase phase_;
   Internal internal_;
+  bool is_promise_resolved_;
+  ServiceWorkerStatusCode promise_resolved_status_;
+  scoped_refptr<ServiceWorkerRegistration> promise_resolved_registration_;
+  scoped_refptr<ServiceWorkerVersion> promise_resolved_version_;
   base::WeakPtrFactory<ServiceWorkerRegisterJob> weak_factory_;
 
   DISALLOW_COPY_AND_ASSIGN(ServiceWorkerRegisterJob);
diff --git a/content/browser/service_worker/service_worker_registration_status.cc b/content/browser/service_worker/service_worker_registration_status.cc
index 4d91960..43f1c5d 100644
--- a/content/browser/service_worker/service_worker_registration_status.cc
+++ b/content/browser/service_worker/service_worker_registration_status.cc
@@ -31,11 +31,14 @@
       *error_type = WebServiceWorkerError::ActivateError;
       return;
 
+    case SERVICE_WORKER_ERROR_NOT_FOUND:
+      *error_type = WebServiceWorkerError::NotFoundError;
+      return;
+
     case SERVICE_WORKER_ERROR_ABORT:
     case SERVICE_WORKER_ERROR_IPC_FAILED:
     case SERVICE_WORKER_ERROR_FAILED:
     case SERVICE_WORKER_ERROR_PROCESS_NOT_FOUND:
-    case SERVICE_WORKER_ERROR_NOT_FOUND:
     case SERVICE_WORKER_ERROR_EXISTS:
       // Unexpected, or should have bailed out before calling this, or we don't
       // have a corresponding blink error code yet.
diff --git a/content/browser/service_worker/service_worker_registration_unittest.cc b/content/browser/service_worker/service_worker_registration_unittest.cc
index efbf4df..23f190e 100644
--- a/content/browser/service_worker/service_worker_registration_unittest.cc
+++ b/content/browser/service_worker/service_worker_registration_unittest.cc
@@ -21,7 +21,7 @@
       : io_thread_(BrowserThread::IO, &message_loop_) {}
 
   virtual void SetUp() OVERRIDE {
-    context_.reset(new ServiceWorkerContextCore(base::FilePath(), NULL));
+    context_.reset(new ServiceWorkerContextCore(base::FilePath(), NULL, NULL));
     context_ptr_ = context_->AsWeakPtr();
   }
 
diff --git a/content/browser/service_worker/service_worker_storage.cc b/content/browser/service_worker/service_worker_storage.cc
index 1f38e20..d2d3aa1 100644
--- a/content/browser/service_worker/service_worker_storage.cc
+++ b/content/browser/service_worker/service_worker_storage.cc
@@ -6,9 +6,11 @@
 
 #include <string>
 #include "base/message_loop/message_loop.h"
+#include "content/browser/service_worker/service_worker_context_core.h"
 #include "content/browser/service_worker/service_worker_info.h"
 #include "content/browser/service_worker/service_worker_registration.h"
 #include "content/browser/service_worker/service_worker_utils.h"
+#include "content/browser/service_worker/service_worker_version.h"
 #include "content/public/browser/browser_thread.h"
 #include "webkit/browser/quota/quota_manager_proxy.h"
 
@@ -20,6 +22,20 @@
   base::MessageLoop::current()->PostTask(FROM_HERE, closure);
 }
 
+void CompleteFindNow(
+    const scoped_refptr<ServiceWorkerRegistration>& registration,
+    ServiceWorkerStatusCode status,
+    const ServiceWorkerStorage::FindRegistrationCallback& callback) {
+  callback.Run(status, registration);
+}
+
+void CompleteFindSoon(
+    const scoped_refptr<ServiceWorkerRegistration>& registration,
+    ServiceWorkerStatusCode status,
+    const ServiceWorkerStorage::FindRegistrationCallback& callback) {
+  RunSoon(base::Bind(callback, status, registration));
+}
+
 const base::FilePath::CharType kServiceWorkerDirectory[] =
     FILE_PATH_LITERAL("ServiceWorker");
 
@@ -27,126 +43,374 @@
 
 ServiceWorkerStorage::ServiceWorkerStorage(
     const base::FilePath& path,
+    base::WeakPtr<ServiceWorkerContextCore> context,
     quota::QuotaManagerProxy* quota_manager_proxy)
-    : last_registration_id_(0),  // TODO(kinuko): this should be read from disk.
-      last_version_id_(0),       // TODO(kinuko): this should be read from disk.
+    : last_registration_id_(0),
+      last_version_id_(0),
+      last_resource_id_(0),
+      simulated_lazy_initted_(false),
+      context_(context),
       quota_manager_proxy_(quota_manager_proxy) {
   if (!path.empty())
     path_ = path.Append(kServiceWorkerDirectory);
 }
 
 ServiceWorkerStorage::~ServiceWorkerStorage() {
-  registration_by_pattern_.clear();
 }
 
 void ServiceWorkerStorage::FindRegistrationForPattern(
-    const GURL& pattern,
+    const GURL& scope,
     const FindRegistrationCallback& callback) {
-  ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NOT_FOUND;
-  scoped_refptr<ServiceWorkerRegistration> found;
-  PatternToRegistrationMap::const_iterator match =
-      registration_by_pattern_.find(pattern);
-  if (match != registration_by_pattern_.end()) {
-    status = SERVICE_WORKER_OK;
-    found = match->second;
+  simulated_lazy_initted_ = true;
+  scoped_refptr<ServiceWorkerRegistration> null_registration;
+  if (!context_) {
+    CompleteFindSoon(null_registration, SERVICE_WORKER_ERROR_FAILED, callback);
+    return;
   }
-  // Always simulate asynchronous call for now.
-  RunSoon(base::Bind(callback, status, found));
+
+  scoped_refptr<ServiceWorkerRegistration> installing_registration =
+      FindInstallingRegistrationForPattern(scope);
+  if (installing_registration) {
+    CompleteFindSoon(installing_registration, SERVICE_WORKER_OK, callback);
+    return;
+  }
+
+  // See if there are any registrations for the origin.
+  OriginRegistrationsMap::const_iterator
+      found = stored_registrations_.find(scope.GetOrigin());
+  if (found == stored_registrations_.end()) {
+    CompleteFindSoon(null_registration, SERVICE_WORKER_ERROR_NOT_FOUND,
+                     callback);
+    return;
+  }
+
+  // Find one with a matching scope.
+  for (RegistrationsMap::const_iterator it = found->second.begin();
+       it != found->second.end(); ++it) {
+    if (scope == it->second.scope) {
+      const ServiceWorkerDatabase::RegistrationData* data = &(it->second);
+      scoped_refptr<ServiceWorkerRegistration> registration =
+          context_->GetLiveRegistration(data->registration_id);
+      if (registration) {
+        CompleteFindSoon(registration, SERVICE_WORKER_OK, callback);
+        return;
+      }
+
+      registration = CreateRegistration(data);
+      CompleteFindSoon(registration, SERVICE_WORKER_OK, callback);
+      return;
+    }
+  }
+
+  CompleteFindSoon(null_registration, SERVICE_WORKER_ERROR_NOT_FOUND, callback);
 }
 
 void ServiceWorkerStorage::FindRegistrationForDocument(
     const GURL& document_url,
     const FindRegistrationCallback& callback) {
-  // TODO(alecflett): This needs to be synchronous in the fast path,
-  // but asynchronous in the slow path (when the patterns have to be
-  // loaded from disk). For now it is always pessimistically async.
-  ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NOT_FOUND;
-  scoped_refptr<ServiceWorkerRegistration> found;
-  for (PatternToRegistrationMap::const_iterator it =
-           registration_by_pattern_.begin();
-       it != registration_by_pattern_.end();
-       ++it) {
-    if (ServiceWorkerUtils::ScopeMatches(it->first, document_url)) {
-      status = SERVICE_WORKER_OK;
-      found = it->second;
-      break;
+  simulated_lazy_initted_ = true;
+  scoped_refptr<ServiceWorkerRegistration> null_registration;
+  if (!context_) {
+    CompleteFindNow(null_registration, SERVICE_WORKER_ERROR_FAILED, callback);
+    return;
+  }
+
+  // See if there are any registrations for the origin.
+  OriginRegistrationsMap::const_iterator
+      found = stored_registrations_.find(document_url.GetOrigin());
+  if (found == stored_registrations_.end()) {
+    // Look for something currently being installed.
+    scoped_refptr<ServiceWorkerRegistration> installing_registration =
+        FindInstallingRegistrationForDocument(document_url);
+    if (installing_registration) {
+      CompleteFindNow(installing_registration, SERVICE_WORKER_OK, callback);
+      return;
+    }
+
+    // Return syncly to simulate this class having an in memory map of
+    // origins with registrations.
+    CompleteFindNow(null_registration, SERVICE_WORKER_ERROR_NOT_FOUND,
+                    callback);
+    return;
+  }
+
+  // Find one with a pattern match.
+  for (RegistrationsMap::const_iterator it = found->second.begin();
+       it != found->second.end(); ++it) {
+    // TODO(michaeln): if there are multiple matches the one with
+    // the longest scope should win.
+    if (ServiceWorkerUtils::ScopeMatches(it->second.scope, document_url)) {
+      const ServiceWorkerDatabase::RegistrationData* data = &(it->second);
+
+      // If its in the live map, return syncly to simulate this class having
+      // iterated over the values in that map instead of reading the db.
+      scoped_refptr<ServiceWorkerRegistration> registration =
+          context_->GetLiveRegistration(data->registration_id);
+      if (registration) {
+        CompleteFindNow(registration, SERVICE_WORKER_OK, callback);
+        return;
+      }
+
+      // If we have to create a new instance, return it asyncly to simulate
+      // having had to retreive the RegistrationData from the db.
+      registration = CreateRegistration(data);
+      CompleteFindSoon(registration, SERVICE_WORKER_OK, callback);
+      return;
     }
   }
-  // Always simulate asynchronous call for now.
-  RunSoon(base::Bind(callback, status, found));
-}
 
-void ServiceWorkerStorage::GetAllRegistrations(
-    const GetAllRegistrationInfosCallback& callback) {
-  std::vector<ServiceWorkerRegistrationInfo> registrations;
-  for (PatternToRegistrationMap::const_iterator it =
-           registration_by_pattern_.begin();
-       it != registration_by_pattern_.end();
-       ++it) {
-    ServiceWorkerRegistration* registration(it->second.get());
-    registrations.push_back(registration->GetInfo());
+  // Look for something currently being installed.
+  // TODO(michaeln): Should be mixed in with the stored registrations
+  // for this test.
+  scoped_refptr<ServiceWorkerRegistration> installing_registration =
+      FindInstallingRegistrationForDocument(document_url);
+  if (installing_registration) {
+    CompleteFindSoon(installing_registration, SERVICE_WORKER_OK, callback);
+    return;
   }
 
-  BrowserThread::PostTask(
-      BrowserThread::IO, FROM_HERE, base::Bind(callback, registrations));
+  // Return asyncly to simulate having had to look in the db since this
+  // origin does have some registations.
+  CompleteFindSoon(installing_registration, SERVICE_WORKER_OK, callback);
 }
 
 void ServiceWorkerStorage::FindRegistrationForId(
     int64 registration_id,
     const FindRegistrationCallback& callback) {
-  ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NOT_FOUND;
-  scoped_refptr<ServiceWorkerRegistration> found;
-  for (PatternToRegistrationMap::const_iterator it =
-           registration_by_pattern_.begin();
-       it != registration_by_pattern_.end();
-       ++it) {
-    if (registration_id == it->second->id()) {
-      status = SERVICE_WORKER_OK;
-      found = it->second;
-      break;
-    }
+  simulated_lazy_initted_ = true;
+  scoped_refptr<ServiceWorkerRegistration> null_registration;
+  if (!context_) {
+    CompleteFindNow(null_registration, SERVICE_WORKER_ERROR_FAILED, callback);
+    return;
   }
-  RunSoon(base::Bind(callback, status, found));
+  scoped_refptr<ServiceWorkerRegistration> installing_registration =
+      FindInstallingRegistrationForId(registration_id);
+  if (installing_registration) {
+    CompleteFindNow(installing_registration, SERVICE_WORKER_OK, callback);
+    return;
+  }
+  RegistrationPtrMap::const_iterator found =
+      registrations_by_id_.find(registration_id);
+  if (found == registrations_by_id_.end()) {
+    CompleteFindNow(null_registration, SERVICE_WORKER_ERROR_NOT_FOUND,
+                    callback);
+    return;
+  }
+  scoped_refptr<ServiceWorkerRegistration> registration =
+      context_->GetLiveRegistration(registration_id);
+  if (registration) {
+    CompleteFindNow(registration, SERVICE_WORKER_OK, callback);
+    return;
+  }
+  registration = CreateRegistration(found->second);
+  CompleteFindSoon(registration, SERVICE_WORKER_OK, callback);
+}
+
+void ServiceWorkerStorage::GetAllRegistrations(
+    const GetAllRegistrationInfosCallback& callback) {
+  simulated_lazy_initted_ = true;
+  std::vector<ServiceWorkerRegistrationInfo> registrations;
+  if (!context_) {
+    RunSoon(base::Bind(callback, registrations));
+    return;
+  }
+
+  // Add all stored registrations.
+  for (RegistrationPtrMap::const_iterator it = registrations_by_id_.begin();
+       it != registrations_by_id_.end(); ++it) {
+    ServiceWorkerRegistration* registration =
+        context_->GetLiveRegistration(it->first);
+    if (registration) {
+      registrations.push_back(registration->GetInfo());
+      continue;
+    }
+    ServiceWorkerRegistrationInfo info;
+    info.pattern = it->second->scope;
+    info.script_url = it->second->script;
+    info.active_version.is_null = false;
+    if (it->second->is_active)
+      info.active_version.status = ServiceWorkerVersion::ACTIVE;
+    else
+      info.active_version.status = ServiceWorkerVersion::INSTALLED;
+    registrations.push_back(info);
+  }
+
+  // Add unstored registrations that are being installed.
+  for (RegistrationRefsById::const_iterator it =
+           installing_registrations_.begin();
+       it != installing_registrations_.end(); ++it) {
+    if (registrations_by_id_.find(it->first) == registrations_by_id_.end())
+      registrations.push_back(it->second->GetInfo());
+  }
+
+  RunSoon(base::Bind(callback, registrations));
 }
 
 void ServiceWorkerStorage::StoreRegistration(
     ServiceWorkerRegistration* registration,
+    ServiceWorkerVersion* version,
     const StatusCallback& callback) {
   DCHECK(registration);
-
-  PatternToRegistrationMap::const_iterator current(
-      registration_by_pattern_.find(registration->pattern()));
-  if (current != registration_by_pattern_.end() &&
-      current->second->script_url() != registration->script_url()) {
-    RunSoon(base::Bind(callback, SERVICE_WORKER_ERROR_EXISTS));
+  DCHECK(version);
+  DCHECK(simulated_lazy_initted_);
+  if (!context_) {
+    RunSoon(base::Bind(callback, SERVICE_WORKER_ERROR_FAILED));
     return;
   }
 
-  // This may update the existing registration information.
-  registration_by_pattern_[registration->pattern()] = registration;
+  // Keep a database struct in the storage map.
+  RegistrationsMap& storage_map =
+      stored_registrations_[registration->script_url().GetOrigin()];
+  ServiceWorkerDatabase::RegistrationData& data =
+      storage_map[registration->id()];
+  data.registration_id = registration->id();
+  data.scope = registration->pattern();
+  data.script = registration->script_url();
+  data.has_fetch_handler = true;
+  data.version_id = version->version_id();
+  data.last_update_check = base::Time::Now();
+  data.is_active = false;  // initially stored in the waiting state
 
+  // Keep a seperate map of ptrs keyed by id only.
+  registrations_by_id_[registration->id()] = &storage_map[registration->id()];
+
+  RunSoon(base::Bind(callback, SERVICE_WORKER_OK));
+}
+
+ void ServiceWorkerStorage::UpdateToActiveState(
+      ServiceWorkerRegistration* registration,
+      const StatusCallback& callback) {
+  DCHECK(simulated_lazy_initted_);
+  if (!context_) {
+    RunSoon(base::Bind(callback, SERVICE_WORKER_ERROR_FAILED));
+    return;
+  }
+
+  RegistrationPtrMap::const_iterator
+       found = registrations_by_id_.find(registration->id());
+  if (found == registrations_by_id_.end()) {
+    RunSoon(base::Bind(callback, SERVICE_WORKER_ERROR_NOT_FOUND));
+    return;
+  }
+  DCHECK(!found->second->is_active);
+  found->second->is_active = true;
   RunSoon(base::Bind(callback, SERVICE_WORKER_OK));
 }
 
 void ServiceWorkerStorage::DeleteRegistration(
-    const GURL& pattern,
+    int64 registration_id,
     const StatusCallback& callback) {
-  PatternToRegistrationMap::iterator match =
-      registration_by_pattern_.find(pattern);
-  if (match == registration_by_pattern_.end()) {
+  DCHECK(simulated_lazy_initted_);
+  RegistrationPtrMap::iterator
+      found = registrations_by_id_.find(registration_id);
+  if (found == registrations_by_id_.end()) {
     RunSoon(base::Bind(callback, SERVICE_WORKER_ERROR_NOT_FOUND));
     return;
   }
-  registration_by_pattern_.erase(match);
+
+  GURL origin = found->second->script.GetOrigin();
+  stored_registrations_[origin].erase(registration_id);
+  if (stored_registrations_[origin].empty())
+    stored_registrations_.erase(origin);
+
+  registrations_by_id_.erase(found);
+
   RunSoon(base::Bind(callback, SERVICE_WORKER_OK));
+  // TODO(michaeln): Either its instance should also be
+  // removed from liveregistrations map or the live object
+  // should marked as deleted in some way and not 'findable'
+  // thereafter.
 }
 
 int64 ServiceWorkerStorage::NewRegistrationId() {
+  DCHECK(simulated_lazy_initted_);
   return ++last_registration_id_;
 }
 
 int64 ServiceWorkerStorage::NewVersionId() {
+  DCHECK(simulated_lazy_initted_);
   return ++last_version_id_;
 }
 
+int64 ServiceWorkerStorage::NewResourceId() {
+  DCHECK(simulated_lazy_initted_);
+  return ++last_resource_id_;
+}
+
+void ServiceWorkerStorage::NotifyInstallingRegistration(
+      ServiceWorkerRegistration* registration) {
+  installing_registrations_[registration->id()] = registration;
+}
+
+void ServiceWorkerStorage::NotifyDoneInstallingRegistration(
+      ServiceWorkerRegistration* registration) {
+  installing_registrations_.erase(registration->id());
+}
+
+scoped_refptr<ServiceWorkerRegistration>
+ServiceWorkerStorage::CreateRegistration(
+    const ServiceWorkerDatabase::RegistrationData* data) {
+  scoped_refptr<ServiceWorkerRegistration> registration(
+      new ServiceWorkerRegistration(
+          data->scope, data->script, data->registration_id, context_));
+
+  scoped_refptr<ServiceWorkerVersion> version =
+      context_->GetLiveVersion(data->version_id);
+  if (!version) {
+    version = new ServiceWorkerVersion(
+        registration, data->version_id, context_);
+    version->SetStatus(data->GetVersionStatus());
+  }
+
+  if (version->status() == ServiceWorkerVersion::ACTIVE)
+    registration->set_active_version(version);
+  else if (version->status() == ServiceWorkerVersion::INSTALLED)
+    registration->set_pending_version(version);
+  else
+    NOTREACHED();
+  // TODO(michaeln): Hmmm, what if DeleteReg was invoked after
+  // the Find result we're returning here? NOTREACHED condition?
+
+  return registration;
+}
+
+ServiceWorkerRegistration*
+ServiceWorkerStorage::FindInstallingRegistrationForDocument(
+    const GURL& document_url) {
+  // TODO(michaeln): if there are multiple matches the one with
+  // the longest scope should win, and these should on equal footing
+  // with the stored registrations in FindRegistrationForDocument().
+  for (RegistrationRefsById::const_iterator it =
+           installing_registrations_.begin();
+       it != installing_registrations_.end(); ++it) {
+    if (ServiceWorkerUtils::ScopeMatches(
+            it->second->pattern(), document_url)) {
+      return it->second;
+    }
+  }
+  return NULL;
+}
+
+ServiceWorkerRegistration*
+ServiceWorkerStorage::FindInstallingRegistrationForPattern(
+    const GURL& scope) {
+  for (RegistrationRefsById::const_iterator it =
+           installing_registrations_.begin();
+       it != installing_registrations_.end(); ++it) {
+    if (it->second->pattern() == scope)
+      return it->second;
+  }
+  return NULL;
+}
+
+ServiceWorkerRegistration*
+ServiceWorkerStorage::FindInstallingRegistrationForId(
+    int64 registration_id) {
+  RegistrationRefsById::const_iterator found =
+      installing_registrations_.find(registration_id);
+  if (found == installing_registrations_.end())
+    return NULL;
+  return found->second;
+}
+
 }  // namespace content
diff --git a/content/browser/service_worker/service_worker_storage.h b/content/browser/service_worker/service_worker_storage.h
index 3606146..3932a72 100644
--- a/content/browser/service_worker/service_worker_storage.h
+++ b/content/browser/service_worker/service_worker_storage.h
@@ -12,6 +12,8 @@
 #include "base/files/file_path.h"
 #include "base/gtest_prod_util.h"
 #include "base/memory/scoped_vector.h"
+#include "base/memory/weak_ptr.h"
+#include "content/browser/service_worker/service_worker_database.h"
 #include "content/common/content_export.h"
 #include "content/common/service_worker/service_worker_status_code.h"
 #include "url/gurl.h"
@@ -22,67 +24,120 @@
 
 namespace content {
 
+class ServiceWorkerContextCore;
 class ServiceWorkerRegistration;
 class ServiceWorkerRegistrationInfo;
+class ServiceWorkerVersion;
 
-// This class provides an interface to load registration data and
-// instantiate ServiceWorkerRegistration objects.
+// This class provides an interface to store and retrieve ServiceWorker
+// registration data.
 class CONTENT_EXPORT ServiceWorkerStorage {
  public:
   typedef base::Callback<void(ServiceWorkerStatusCode status)> StatusCallback;
   typedef base::Callback<void(ServiceWorkerStatusCode status,
                               const scoped_refptr<ServiceWorkerRegistration>&
                                   registration)> FindRegistrationCallback;
+  typedef base::Callback<
+      void(const std::vector<ServiceWorkerRegistrationInfo>& registrations)>
+          GetAllRegistrationInfosCallback;
+  typedef base::Callback<
+      void(ServiceWorkerStatusCode status, int result)>
+          CompareCallback;
 
   ServiceWorkerStorage(const base::FilePath& path,
+                       base::WeakPtr<ServiceWorkerContextCore> context,
                        quota::QuotaManagerProxy* quota_manager_proxy);
   ~ServiceWorkerStorage();
 
   // Finds registration for |document_url| or |pattern| or |registration_id|.
+  // The Find methods will find stored and initially installing registrations.
   // Returns SERVICE_WORKER_OK with non-null registration if registration
   // is found, or returns SERVICE_WORKER_ERROR_NOT_FOUND if no matching
-  // registration is found.
+  // registration is found.  The FindRegistrationForPattern method is
+  // guaranteed to return asynchronously. However, the methods to find
+  // for |document_url| or |registration_id| may complete immediately
+  // (the callback may be called prior to the method returning) or
+  // asynchronously.
   void FindRegistrationForDocument(const GURL& document_url,
                                    const FindRegistrationCallback& callback);
-  void FindRegistrationForPattern(const GURL& pattern,
+  void FindRegistrationForPattern(const GURL& scope,
                                   const FindRegistrationCallback& callback);
   void FindRegistrationForId(int64 registration_id,
                              const FindRegistrationCallback& callback);
 
-  typedef base::Callback<
-      void(const std::vector<ServiceWorkerRegistrationInfo>& registrations)>
-      GetAllRegistrationInfosCallback;
+  // Returns info about all stored and initially installing registrations.
   void GetAllRegistrations(const GetAllRegistrationInfosCallback& callback);
 
-  // Stores |registration|. Returns SERVICE_WORKER_ERROR_EXISTS if
-  // conflicting registration (which has different script_url) is
-  // already registered for the |registration|->pattern().
-  void StoreRegistration(ServiceWorkerRegistration* registration,
-                         const StatusCallback& callback);
+  // Commits |registration| with the installed but not activated |version|
+  // to storage, overwritting any pre-existing registration data for the scope.
+  // A pre-existing version's script resources will remain available until
+  // either a browser restart or DeleteVersionResources is called.
+  void StoreRegistration(
+      ServiceWorkerRegistration* registration,
+      ServiceWorkerVersion* version,
+      const StatusCallback& callback);
 
-  // Deletes |registration|. This may return SERVICE_WORKER_ERROR_NOT_FOUND
-  // if no matching registration is found.
-  void DeleteRegistration(const GURL& pattern,
+  // Updates the state of the registration's stored version to active.
+  void UpdateToActiveState(
+      ServiceWorkerRegistration* registration,
+      const StatusCallback& callback);
+
+  // Deletes the registration data for |registration_id|, the
+  // script resources for the registration's stored version
+  // will remain available until either a browser restart or
+  // DeleteVersionResources is called.
+  void DeleteRegistration(int64 registration_id,
                           const StatusCallback& callback);
 
   // Returns new IDs which are guaranteed to be unique in the storage.
   int64 NewRegistrationId();
   int64 NewVersionId();
+  int64 NewResourceId();
+
+  // Intended for use only by ServiceWorkerRegisterJob.
+  void NotifyInstallingRegistration(
+      ServiceWorkerRegistration* registration);
+  void NotifyDoneInstallingRegistration(
+      ServiceWorkerRegistration* registration);
 
  private:
-  // TODO(michaeln,kinuko): Make this not own ServiceWorkerRegistration.
-  typedef std::map<GURL, scoped_refptr<ServiceWorkerRegistration> >
-      PatternToRegistrationMap;
+  friend class ServiceWorkerStorageTest;
 
-  // This is the in-memory registration. Eventually the registration will be
-  // persisted to disk.
-  PatternToRegistrationMap registration_by_pattern_;
+  scoped_refptr<ServiceWorkerRegistration> CreateRegistration(
+      const ServiceWorkerDatabase::RegistrationData* data);
+  ServiceWorkerRegistration* FindInstallingRegistrationForDocument(
+      const GURL& document_url);
+  ServiceWorkerRegistration* FindInstallingRegistrationForPattern(
+      const GURL& scope);
+  ServiceWorkerRegistration* FindInstallingRegistrationForId(
+      int64 registration_id);
 
-  int last_registration_id_;
-  int last_version_id_;
+  // TODO(michaeln): Store these structs in a database.
+  typedef std::map<int64, ServiceWorkerDatabase::RegistrationData>
+      RegistrationsMap;
+  typedef std::map<GURL, RegistrationsMap>
+      OriginRegistrationsMap;
+  OriginRegistrationsMap stored_registrations_;
 
-  scoped_refptr<quota::QuotaManagerProxy> quota_manager_proxy_;
+  // For iterating and lookup based on id only, this map holds
+  // pointers to the values stored in the OriginRegistrationsMap.
+  typedef std::map<int64, ServiceWorkerDatabase::RegistrationData*>
+      RegistrationPtrMap;
+  RegistrationPtrMap registrations_by_id_;
+
+  // For finding registrations being installed.
+  typedef std::map<int64, scoped_refptr<ServiceWorkerRegistration> >
+      RegistrationRefsById;
+  RegistrationRefsById installing_registrations_;
+
+  int64 last_registration_id_;
+  int64 last_version_id_;
+  int64 last_resource_id_;
+  bool simulated_lazy_initted_;
+
   base::FilePath path_;
+  base::WeakPtr<ServiceWorkerContextCore> context_;
+  scoped_refptr<quota::QuotaManagerProxy> quota_manager_proxy_;
 
   DISALLOW_COPY_AND_ASSIGN(ServiceWorkerStorage);
 };
diff --git a/content/browser/service_worker/service_worker_storage_unittest.cc b/content/browser/service_worker/service_worker_storage_unittest.cc
index 9e8340a..ed2268a 100644
--- a/content/browser/service_worker/service_worker_storage_unittest.cc
+++ b/content/browser/service_worker/service_worker_storage_unittest.cc
@@ -4,25 +4,428 @@
 
 #include "content/browser/service_worker/service_worker_storage.h"
 
-#include "base/files/scoped_temp_dir.h"
 #include "base/logging.h"
+#include "base/message_loop/message_loop.h"
+#include "base/run_loop.h"
+#include "content/browser/browser_thread_impl.h"
+#include "content/browser/service_worker/service_worker_context_core.h"
 #include "content/browser/service_worker/service_worker_registration.h"
+#include "content/browser/service_worker/service_worker_version.h"
+#include "content/public/test/test_browser_thread_bundle.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace content {
 
+namespace {
+
+void StatusCallback(bool* was_called,
+                    ServiceWorkerStatusCode* result,
+                    ServiceWorkerStatusCode status) {
+  *was_called = true;
+  *result = status;
+}
+
+ServiceWorkerStorage::StatusCallback MakeStatusCallback(
+    bool* was_called,
+    ServiceWorkerStatusCode* result) {
+  return base::Bind(&StatusCallback, was_called, result);
+}
+
+void FindCallback(
+    bool* was_called,
+    ServiceWorkerStatusCode* result,
+    scoped_refptr<ServiceWorkerRegistration>* found,
+    ServiceWorkerStatusCode status,
+    const scoped_refptr<ServiceWorkerRegistration>& registration) {
+  *was_called = true;
+  *result = status;
+  *found = registration;
+}
+
+ServiceWorkerStorage::FindRegistrationCallback MakeFindCallback(
+    bool* was_called,
+    ServiceWorkerStatusCode* result,
+    scoped_refptr<ServiceWorkerRegistration>* found) {
+  return base::Bind(&FindCallback, was_called, result, found);
+}
+
+void GetAllCallback(
+    bool* was_called,
+    std::vector<ServiceWorkerRegistrationInfo>* all_out,
+    const std::vector<ServiceWorkerRegistrationInfo>& all) {
+  *was_called = true;
+  *all_out = all;
+}
+
+ServiceWorkerStorage::GetAllRegistrationInfosCallback MakeGetAllCallback(
+    bool* was_called,
+    std::vector<ServiceWorkerRegistrationInfo>* all) {
+  return base::Bind(&GetAllCallback, was_called, all);
+}
+
+}  // namespace
+
 class ServiceWorkerStorageTest : public testing::Test {
  public:
-  ServiceWorkerStorageTest() {}
-
-  virtual void SetUp() OVERRIDE {
-    storage_.reset(new ServiceWorkerStorage(base::FilePath(), NULL));
+  ServiceWorkerStorageTest()
+      : browser_thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP) {
   }
 
-  virtual void TearDown() OVERRIDE { storage_.reset(); }
+  virtual void SetUp() OVERRIDE {
+    context_.reset(new ServiceWorkerContextCore(base::FilePath(), NULL, NULL));
+    context_ptr_ = context_->AsWeakPtr();
+    storage()->simulated_lazy_initted_ = true;
+  }
+
+  virtual void TearDown() OVERRIDE {
+    context_.reset();
+  }
+
+  ServiceWorkerStorage* storage() { return context_->storage(); }
 
  protected:
-  scoped_ptr<ServiceWorkerStorage> storage_;
+  scoped_ptr<ServiceWorkerContextCore> context_;
+  base::WeakPtr<ServiceWorkerContextCore> context_ptr_;
+  TestBrowserThreadBundle browser_thread_bundle_;
 };
 
+TEST_F(ServiceWorkerStorageTest, StoreFindUpdateDeleteRegistration) {
+  const GURL kScope("http://www.test.com/scope/*");
+  const GURL kScript("http://www.test.com/script.js");
+  const GURL kDocumentUrl("http://www.test.com/scope/document.html");
+  const int64 kRegistrationId = storage()->NewRegistrationId();
+  const int64 kVersionId = storage()->NewVersionId();
+
+  bool was_called = false;
+  ServiceWorkerStatusCode result = SERVICE_WORKER_OK;
+  scoped_refptr<ServiceWorkerRegistration> found_registration;
+
+  // We shouldn't find anything without having stored anything.
+  storage()->FindRegistrationForDocument(
+      kDocumentUrl,
+      MakeFindCallback(&was_called, &result, &found_registration));
+  base::RunLoop().RunUntilIdle();
+  ASSERT_TRUE(was_called);
+  EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND, result);
+  EXPECT_FALSE(found_registration);
+  was_called = false;
+  storage()->FindRegistrationForPattern(
+      kScope,
+      MakeFindCallback(&was_called, &result, &found_registration));
+  base::RunLoop().RunUntilIdle();
+  ASSERT_TRUE(was_called);
+  EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND, result);
+  EXPECT_FALSE(found_registration);
+  was_called = false;
+  storage()->FindRegistrationForId(
+      kRegistrationId,
+      MakeFindCallback(&was_called, &result, &found_registration));
+  base::RunLoop().RunUntilIdle();
+  ASSERT_TRUE(was_called);
+  EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND, result);
+  EXPECT_FALSE(found_registration);
+  was_called = false;
+
+  // Store something.
+  scoped_refptr<ServiceWorkerRegistration> live_registration =
+      new ServiceWorkerRegistration(
+          kScope, kScript, kRegistrationId, context_ptr_);
+  scoped_refptr<ServiceWorkerVersion> live_version =
+      new ServiceWorkerVersion(
+          live_registration, kVersionId, context_ptr_);
+  live_version->SetStatus(ServiceWorkerVersion::INSTALLED);
+  live_registration->set_pending_version(live_version);
+  storage()->StoreRegistration(live_registration, live_version,
+                               MakeStatusCallback(&was_called, &result));
+  EXPECT_FALSE(was_called);  // always async
+  base::RunLoop().RunUntilIdle();
+  ASSERT_TRUE(was_called);
+  EXPECT_EQ(SERVICE_WORKER_OK, result);
+  was_called = false;
+
+  // Now we should find it and get the live ptr back immediately.
+  storage()->FindRegistrationForDocument(
+      kDocumentUrl,
+      MakeFindCallback(&was_called, &result, &found_registration));
+  ASSERT_TRUE(was_called);
+  EXPECT_EQ(SERVICE_WORKER_OK, result);
+  EXPECT_EQ(live_registration, found_registration);
+  was_called = false;
+  found_registration = NULL;
+
+  // But FindRegistrationForPattern is always async.
+  storage()->FindRegistrationForPattern(
+      kScope,
+      MakeFindCallback(&was_called, &result, &found_registration));
+  EXPECT_FALSE(was_called);
+  base::RunLoop().RunUntilIdle();
+  ASSERT_TRUE(was_called);
+  EXPECT_EQ(SERVICE_WORKER_OK, result);
+  EXPECT_EQ(live_registration, found_registration);
+  was_called = false;
+  found_registration = NULL;
+
+  // Can be found by id too.
+  storage()->FindRegistrationForId(
+      kRegistrationId,
+      MakeFindCallback(&was_called, &result, &found_registration));
+  base::RunLoop().RunUntilIdle();
+  ASSERT_TRUE(was_called);
+  EXPECT_EQ(SERVICE_WORKER_OK, result);
+  ASSERT_TRUE(found_registration);
+  EXPECT_EQ(kRegistrationId, found_registration->id());
+  EXPECT_EQ(live_registration, found_registration);
+  was_called = false;
+  found_registration = NULL;
+
+  // Drop the live registration, but keep the version live.
+  live_registration = NULL;
+
+  // Now FindRegistrationForDocument should be async.
+  storage()->FindRegistrationForDocument(
+      kDocumentUrl,
+      MakeFindCallback(&was_called, &result, &found_registration));
+  EXPECT_FALSE(was_called);
+  base::RunLoop().RunUntilIdle();
+  ASSERT_TRUE(was_called);
+  EXPECT_EQ(SERVICE_WORKER_OK, result);
+  ASSERT_TRUE(found_registration);
+  EXPECT_EQ(kRegistrationId, found_registration->id());
+  EXPECT_TRUE(found_registration->HasOneRef());
+  EXPECT_EQ(live_version,
+            found_registration->pending_version());
+  was_called = false;
+  found_registration = NULL;
+
+  // Drop the live version too.
+  live_version = NULL;
+
+  // And FindRegistrationForPattern is always async.
+  storage()->FindRegistrationForPattern(
+      kScope,
+      MakeFindCallback(&was_called, &result, &found_registration));
+  EXPECT_FALSE(was_called);
+  base::RunLoop().RunUntilIdle();
+  ASSERT_TRUE(was_called);
+  EXPECT_EQ(SERVICE_WORKER_OK, result);
+  ASSERT_TRUE(found_registration);
+  EXPECT_EQ(kRegistrationId, found_registration->id());
+  EXPECT_TRUE(found_registration->HasOneRef());
+  EXPECT_FALSE(found_registration->active_version());
+  ASSERT_TRUE(found_registration->pending_version());
+  EXPECT_EQ(ServiceWorkerVersion::INSTALLED,
+            found_registration->pending_version()->status());
+  was_called = false;
+
+  // Update to active.
+  scoped_refptr<ServiceWorkerVersion> temp_version =
+      found_registration->pending_version();
+  found_registration->set_pending_version(NULL);
+  temp_version->SetStatus(ServiceWorkerVersion::ACTIVE);
+  found_registration->set_active_version(temp_version);
+  temp_version = NULL;
+  storage()->UpdateToActiveState(
+        found_registration,
+        MakeStatusCallback(&was_called, &result));
+  EXPECT_FALSE(was_called);
+  base::RunLoop().RunUntilIdle();
+  ASSERT_TRUE(was_called);
+  EXPECT_EQ(SERVICE_WORKER_OK, result);
+  was_called = false;
+  found_registration = NULL;
+
+  // Trying to update a unstored registration to active should fail.
+  scoped_refptr<ServiceWorkerRegistration> unstored_registration =
+      new ServiceWorkerRegistration(
+          kScope, kScript, kRegistrationId + 1, context_ptr_);
+  storage()->UpdateToActiveState(
+        unstored_registration,
+        MakeStatusCallback(&was_called, &result));
+  EXPECT_FALSE(was_called);
+  base::RunLoop().RunUntilIdle();
+  ASSERT_TRUE(was_called);
+  EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND, result);
+  was_called = false;
+  unstored_registration = NULL;
+
+  // The Find methods should return a registration with an active version.
+  storage()->FindRegistrationForDocument(
+      kDocumentUrl,
+      MakeFindCallback(&was_called, &result, &found_registration));
+  EXPECT_FALSE(was_called);
+  base::RunLoop().RunUntilIdle();
+  ASSERT_TRUE(was_called);
+  EXPECT_EQ(SERVICE_WORKER_OK, result);
+  ASSERT_TRUE(found_registration);
+  EXPECT_EQ(kRegistrationId, found_registration->id());
+  EXPECT_TRUE(found_registration->HasOneRef());
+  EXPECT_FALSE(found_registration->pending_version());
+  ASSERT_TRUE(found_registration->active_version());
+  EXPECT_EQ(ServiceWorkerVersion::ACTIVE,
+            found_registration->active_version()->status());
+  was_called = false;
+
+  // Delete from storage but with a instance still live.
+  EXPECT_TRUE(context_->GetLiveVersion(kRegistrationId));
+  storage()->DeleteRegistration(
+      kRegistrationId,
+      MakeStatusCallback(&was_called, &result));
+  EXPECT_FALSE(was_called);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_TRUE(was_called);
+  EXPECT_EQ(SERVICE_WORKER_OK, result);
+  EXPECT_TRUE(context_->GetLiveVersion(kRegistrationId));
+  was_called = false;
+
+  // Should no longer be found.
+  storage()->FindRegistrationForId(
+      kRegistrationId,
+      MakeFindCallback(&was_called, &result, &found_registration));
+  base::RunLoop().RunUntilIdle();
+  ASSERT_TRUE(was_called);
+  EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND, result);
+  EXPECT_FALSE(found_registration);
+  was_called = false;
+
+  // Deleting an unstored registration should fail.
+  storage()->DeleteRegistration(
+      kRegistrationId + 1,
+      MakeStatusCallback(&was_called, &result));
+  EXPECT_FALSE(was_called);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_TRUE(was_called);
+  EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND, result);
+  was_called = false;
+}
+
+TEST_F(ServiceWorkerStorageTest, InstallingRegistrationsAreFindable) {
+  const GURL kScope("http://www.test.com/scope/*");
+  const GURL kScript("http://www.test.com/script.js");
+  const GURL kDocumentUrl("http://www.test.com/scope/document.html");
+  const int64 kRegistrationId = storage()->NewRegistrationId();
+  const int64 kVersionId = storage()->NewVersionId();
+
+  bool was_called = false;
+  ServiceWorkerStatusCode result = SERVICE_WORKER_OK;
+  scoped_refptr<ServiceWorkerRegistration> found_registration;
+
+  // Create an unstored registration.
+  scoped_refptr<ServiceWorkerRegistration> live_registration =
+      new ServiceWorkerRegistration(
+          kScope, kScript, kRegistrationId, context_ptr_);
+  scoped_refptr<ServiceWorkerVersion> live_version =
+      new ServiceWorkerVersion(
+          live_registration, kVersionId, context_ptr_);
+  live_version->SetStatus(ServiceWorkerVersion::INSTALLING);
+  live_registration->set_pending_version(live_version);
+
+  // Should not be findable, including by GetAllRegistrations.
+  storage()->FindRegistrationForId(
+      kRegistrationId,
+      MakeFindCallback(&was_called, &result, &found_registration));
+  base::RunLoop().RunUntilIdle();
+  ASSERT_TRUE(was_called);
+  EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND, result);
+  EXPECT_FALSE(found_registration);
+  was_called = false;
+  storage()->FindRegistrationForDocument(
+      kDocumentUrl,
+      MakeFindCallback(&was_called, &result, &found_registration));
+  base::RunLoop().RunUntilIdle();
+  ASSERT_TRUE(was_called);
+  EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND, result);
+  EXPECT_FALSE(found_registration);
+  was_called = false;
+  storage()->FindRegistrationForPattern(
+      kScope,
+      MakeFindCallback(&was_called, &result, &found_registration));
+  base::RunLoop().RunUntilIdle();
+  ASSERT_TRUE(was_called);
+  EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND, result);
+  EXPECT_FALSE(found_registration);
+  was_called = false;
+  std::vector<ServiceWorkerRegistrationInfo> all_registrations;
+  storage()->GetAllRegistrations(
+      MakeGetAllCallback(&was_called, &all_registrations));
+  base::RunLoop().RunUntilIdle();
+  ASSERT_TRUE(was_called);
+  EXPECT_TRUE(all_registrations.empty());
+  was_called = false;
+
+  // Notify storage of it being installed.
+  storage()->NotifyInstallingRegistration(live_registration);
+
+  // Now should be findable.
+  storage()->FindRegistrationForId(
+      kRegistrationId,
+      MakeFindCallback(&was_called, &result, &found_registration));
+  base::RunLoop().RunUntilIdle();
+  ASSERT_TRUE(was_called);
+  EXPECT_EQ(SERVICE_WORKER_OK, result);
+  EXPECT_EQ(live_registration, found_registration);
+  was_called = false;
+  found_registration = NULL;
+  storage()->FindRegistrationForDocument(
+      kDocumentUrl,
+      MakeFindCallback(&was_called, &result, &found_registration));
+  base::RunLoop().RunUntilIdle();
+  ASSERT_TRUE(was_called);
+  EXPECT_EQ(SERVICE_WORKER_OK, result);
+  EXPECT_EQ(live_registration, found_registration);
+  was_called = false;
+  found_registration = NULL;
+  storage()->FindRegistrationForPattern(
+      kScope,
+      MakeFindCallback(&was_called, &result, &found_registration));
+  base::RunLoop().RunUntilIdle();
+  ASSERT_TRUE(was_called);
+  EXPECT_EQ(SERVICE_WORKER_OK, result);
+  EXPECT_EQ(live_registration, found_registration);
+  was_called = false;
+  found_registration = NULL;
+  storage()->GetAllRegistrations(
+      MakeGetAllCallback(&was_called, &all_registrations));
+  base::RunLoop().RunUntilIdle();
+  ASSERT_TRUE(was_called);
+  EXPECT_EQ(1u, all_registrations.size());
+  was_called = false;
+  all_registrations.clear();
+
+  // Notify storage of installation no longer happening.
+  storage()->NotifyDoneInstallingRegistration(live_registration);
+
+  // Once again, should not be findable.
+  storage()->FindRegistrationForId(
+      kRegistrationId,
+      MakeFindCallback(&was_called, &result, &found_registration));
+  base::RunLoop().RunUntilIdle();
+  ASSERT_TRUE(was_called);
+  EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND, result);
+  EXPECT_FALSE(found_registration);
+  was_called = false;
+  storage()->FindRegistrationForDocument(
+      kDocumentUrl,
+      MakeFindCallback(&was_called, &result, &found_registration));
+  base::RunLoop().RunUntilIdle();
+  ASSERT_TRUE(was_called);
+  EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND, result);
+  EXPECT_FALSE(found_registration);
+  was_called = false;
+  storage()->FindRegistrationForPattern(
+      kScope,
+      MakeFindCallback(&was_called, &result, &found_registration));
+  base::RunLoop().RunUntilIdle();
+  ASSERT_TRUE(was_called);
+  EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND, result);
+  EXPECT_FALSE(found_registration);
+  was_called = false;
+
+  storage()->GetAllRegistrations(
+      MakeGetAllCallback(&was_called, &all_registrations));
+  base::RunLoop().RunUntilIdle();
+  ASSERT_TRUE(was_called);
+  EXPECT_TRUE(all_registrations.empty());
+  was_called = false;
+}
+
 }  // namespace content
diff --git a/content/browser/service_worker/service_worker_unregister_job.cc b/content/browser/service_worker/service_worker_unregister_job.cc
index f7165f1..5866c78 100644
--- a/content/browser/service_worker/service_worker_unregister_job.cc
+++ b/content/browser/service_worker/service_worker_unregister_job.cc
@@ -48,15 +48,19 @@
     ServiceWorkerStatusCode status,
     const scoped_refptr<ServiceWorkerRegistration>& registration) {
   if (status == SERVICE_WORKER_OK) {
+    DCHECK(registration);
+    // TODO(michaeln): Deactivate the live registration object and
+    // eventually call storage->DeleteVersionResources()
+    // when the version no longer has any controllees.
     context_->storage()->DeleteRegistration(
-        pattern_,
+        registration->id(),
         base::Bind(&ServiceWorkerUnregisterJob::Complete,
                    weak_factory_.GetWeakPtr()));
     return;
   }
 
   if (status == SERVICE_WORKER_ERROR_NOT_FOUND) {
-    // The previous registration does not exist, which is ok.
+    DCHECK(!registration);
     Complete(SERVICE_WORKER_OK);
     return;
   }
diff --git a/content/browser/service_worker/service_worker_url_request_job_unittest.cc b/content/browser/service_worker/service_worker_url_request_job_unittest.cc
index 21f3a95..60eff7b 100644
--- a/content/browser/service_worker/service_worker_url_request_job_unittest.cc
+++ b/content/browser/service_worker/service_worker_url_request_job_unittest.cc
@@ -89,7 +89,7 @@
   virtual ~ServiceWorkerURLRequestJobTest() {}
 
   virtual void SetUp() OVERRIDE {
-    context_.reset(new ServiceWorkerContextCore(base::FilePath(), NULL));
+    context_.reset(new ServiceWorkerContextCore(base::FilePath(), NULL, NULL));
     helper_.reset(new EmbeddedWorkerTestHelper(context_.get(), kProcessID));
 
     registration_ = new ServiceWorkerRegistration(
diff --git a/content/browser/service_worker/service_worker_version.cc b/content/browser/service_worker/service_worker_version.cc
index 90eee44..5b2732c 100644
--- a/content/browser/service_worker/service_worker_version.cc
+++ b/content/browser/service_worker/service_worker_version.cc
@@ -177,15 +177,16 @@
   if (registration) {
     registration_id_ = registration->id();
     script_url_ = registration->script_url();
+    scope_ = registration->pattern();
   }
   context_->AddLiveVersion(this);
   embedded_worker_ = context_->embedded_worker_registry()->CreateWorker();
-  embedded_worker_->AddObserver(this);
+  embedded_worker_->AddListener(this);
 }
 
 ServiceWorkerVersion::~ServiceWorkerVersion() {
   if (embedded_worker_) {
-    embedded_worker_->RemoveObserver(this);
+    embedded_worker_->RemoveListener(this);
     embedded_worker_.reset();
   }
   if (context_)
@@ -217,6 +218,7 @@
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
   return ServiceWorkerVersionInfo(running_status(),
                                   status(),
+                                  version_id(),
                                   embedded_worker()->process_id(),
                                   embedded_worker()->thread_id());
 }
@@ -233,8 +235,7 @@
   }
   if (start_callbacks_.empty()) {
     ServiceWorkerStatusCode status = embedded_worker_->Start(
-        version_id_,
-        script_url_);
+        version_id_, scope_, script_url_);
     if (status != SERVICE_WORKER_OK) {
       RunSoon(base::Bind(callback, status));
       return;
@@ -375,19 +376,25 @@
 
 void ServiceWorkerVersion::AddControllee(
     ServiceWorkerProviderHost* provider_host) {
-  DCHECK(!ContainsKey(controllee_providers_, provider_host));
-  controllee_providers_.insert(provider_host);
+  DCHECK(!ContainsKey(controllee_map_, provider_host));
+  int controllee_id = controllee_by_id_.Add(provider_host);
+  controllee_map_[provider_host] = controllee_id;
   AddProcessToWorker(provider_host->process_id());
 }
 
 void ServiceWorkerVersion::RemoveControllee(
     ServiceWorkerProviderHost* provider_host) {
-  DCHECK(ContainsKey(controllee_providers_, provider_host));
-  controllee_providers_.erase(provider_host);
+  ControlleeMap::iterator found = controllee_map_.find(provider_host);
+  DCHECK(found != controllee_map_.end());
+  controllee_by_id_.Remove(found->second);
+  controllee_map_.erase(found);
   RemoveProcessFromWorker(provider_host->process_id());
   // TODO(kinuko): Fire NoControllees notification when the # of controllees
   // reaches 0, so that a new pending version can be activated (which will
   // deactivate this version).
+  // TODO(michaeln): On no controllees call storage DeleteVersionResources
+  // if this version has been deactivated. Probably storage can listen for
+  // NoControllees for versions that have been deleted.
 }
 
 void ServiceWorkerVersion::AddPendingControllee(
@@ -412,6 +419,7 @@
   DCHECK_EQ(RUNNING, running_status());
   // Fire all start callbacks.
   RunCallbacks(this, &start_callbacks_, SERVICE_WORKER_OK);
+  FOR_EACH_OBSERVER(Listener, listeners_, OnWorkerStarted(this));
 }
 
 void ServiceWorkerVersion::OnStopped() {
@@ -434,20 +442,85 @@
     iter.Advance();
   }
   message_callbacks_.Clear();
+  FOR_EACH_OBSERVER(Listener, listeners_, OnWorkerStopped(this));
 }
 
-void ServiceWorkerVersion::OnMessageReceived(
+void ServiceWorkerVersion::OnReportException(
+    const base::string16& error_message,
+    int line_number,
+    int column_number,
+    const GURL& source_url) {
+  FOR_EACH_OBSERVER(
+      Listener,
+      listeners_,
+      OnErrorReported(
+          this, error_message, line_number, column_number, source_url));
+}
+
+void ServiceWorkerVersion::OnReportConsoleMessage(int source_identifier,
+                                                  int message_level,
+                                                  const base::string16& message,
+                                                  int line_number,
+                                                  const GURL& source_url) {
+  FOR_EACH_OBSERVER(Listener,
+                    listeners_,
+                    OnReportConsoleMessage(this,
+                                           source_identifier,
+                                           message_level,
+                                           message,
+                                           line_number,
+                                           source_url));
+}
+
+bool ServiceWorkerVersion::OnMessageReceived(const IPC::Message& message) {
+  bool handled = true;
+  IPC_BEGIN_MESSAGE_MAP(ServiceWorkerVersion, message)
+    IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_GetClientDocuments,
+                        OnGetClientDocuments)
+    IPC_MESSAGE_UNHANDLED(handled = false)
+  IPC_END_MESSAGE_MAP()
+  return handled;
+}
+
+bool ServiceWorkerVersion::OnReplyReceived(
     int request_id, const IPC::Message& message) {
+  // Perform security check to filter out any unexpected (and non-test)
+  // messages. This must list up all message types that can go through here.
+  // TODO(kinuko): Merge this into OnMessageReceived as we're deprecating
+  // this ReplyToBrowser.
+  if (message.type() != ServiceWorkerHostMsg_ActivateEventFinished::ID &&
+      message.type() != ServiceWorkerHostMsg_InstallEventFinished::ID &&
+      message.type() != ServiceWorkerHostMsg_FetchEventFinished::ID &&
+      message.type() != ServiceWorkerHostMsg_SyncEventFinished::ID &&
+      IPC_MESSAGE_CLASS(message) != TestMsgStart)
+    return false;
+
   MessageCallback* callback = message_callbacks_.Lookup(request_id);
   if (callback) {
     // Protect since a callback could destroy |this|.
     scoped_refptr<ServiceWorkerVersion> protect(this);
     callback->Run(SERVICE_WORKER_OK, message);
     message_callbacks_.Remove(request_id);
-    return;
+    return true;
   }
   NOTREACHED() << "Got unexpected message: " << request_id
                << " " << message.type();
+  return false;
+}
+
+void ServiceWorkerVersion::OnGetClientDocuments(int request_id) {
+  std::vector<int> client_ids;
+  ControlleeByIDMap::iterator it(&controllee_by_id_);
+  while (!it.IsAtEnd()) {
+    client_ids.push_back(it.GetCurrentKey());
+    it.Advance();
+  }
+  // Don't bother if it's no longer running.
+  if (running_status() == RUNNING) {
+    embedded_worker_->SendMessage(
+        kInvalidServiceWorkerRequestId,
+        ServiceWorkerMsg_DidGetClientDocuments(request_id, client_ids));
+  }
 }
 
 }  // namespace content
diff --git a/content/browser/service_worker/service_worker_version.h b/content/browser/service_worker/service_worker_version.h
index ca6a9d5..44850f5 100644
--- a/content/browser/service_worker/service_worker_version.h
+++ b/content/browser/service_worker/service_worker_version.h
@@ -40,7 +40,7 @@
 // This happens when a version is replaced as well as at browser shutdown.
 class CONTENT_EXPORT ServiceWorkerVersion
     : NON_EXPORTED_BASE(public base::RefCounted<ServiceWorkerVersion>),
-      public EmbeddedWorkerInstance::Observer {
+      public EmbeddedWorkerInstance::Listener {
  public:
   typedef base::Callback<void(ServiceWorkerStatusCode)> StatusCallback;
   typedef base::Callback<void(ServiceWorkerStatusCode,
@@ -71,7 +71,20 @@
 
   class Listener {
    public:
+    virtual void OnWorkerStarted(ServiceWorkerVersion* version) = 0;
+    virtual void OnWorkerStopped(ServiceWorkerVersion* version) = 0;
     virtual void OnVersionStateChanged(ServiceWorkerVersion* version) = 0;
+    virtual void OnErrorReported(ServiceWorkerVersion* version,
+                                 const base::string16& error_message,
+                                 int line_number,
+                                 int column_number,
+                                 const GURL& source_url) = 0;
+    virtual void OnReportConsoleMessage(ServiceWorkerVersion* version,
+                                        int source_identifier,
+                                        int message_level,
+                                        const base::string16& message,
+                                        int line_number,
+                                        const GURL& source_url) = 0;
   };
 
   ServiceWorkerVersion(
@@ -172,14 +185,14 @@
   // Returns true if this has at least one process to run.
   bool HasProcessToRun() const;
 
-  // Adds and removes a controllee's |provider_host|.
+  // Adds and removes |provider_host| as a controllee of this ServiceWorker.
   void AddControllee(ServiceWorkerProviderHost* provider_host);
   void RemoveControllee(ServiceWorkerProviderHost* provider_host);
   void AddPendingControllee(ServiceWorkerProviderHost* provider_host);
   void RemovePendingControllee(ServiceWorkerProviderHost* provider_host);
 
   // Returns if it has (non-pending) controllee.
-  bool HasControllee() const { return !controllee_providers_.empty(); }
+  bool HasControllee() const { return !controllee_map_.empty(); }
 
   // Adds and removes Listeners.
   void AddListener(Listener* listener);
@@ -187,29 +200,45 @@
 
   EmbeddedWorkerInstance* embedded_worker() { return embedded_worker_.get(); }
 
-  // EmbeddedWorkerInstance::Observer overrides:
+  // EmbeddedWorkerInstance::Listener overrides:
   virtual void OnStarted() OVERRIDE;
   virtual void OnStopped() OVERRIDE;
-  virtual void OnMessageReceived(int request_id,
-                                 const IPC::Message& message) OVERRIDE;
+  virtual void OnReportException(const base::string16& error_message,
+                                 int line_number,
+                                 int column_number,
+                                 const GURL& source_url) OVERRIDE;
+  virtual void OnReportConsoleMessage(int source_identifier,
+                                      int message_level,
+                                      const base::string16& message,
+                                      int line_number,
+                                      const GURL& source_url) OVERRIDE;
+  virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
+  virtual bool OnReplyReceived(int request_id,
+                               const IPC::Message& message) OVERRIDE;
 
  private:
   typedef ServiceWorkerVersion self;
-  typedef std::set<ServiceWorkerProviderHost*> ProviderHostSet;
+  typedef std::map<ServiceWorkerProviderHost*, int> ControlleeMap;
+  typedef IDMap<ServiceWorkerProviderHost> ControlleeByIDMap;
   friend class base::RefCounted<ServiceWorkerVersion>;
 
   virtual ~ServiceWorkerVersion();
 
+  // Message handlers.
+  void OnGetClientDocuments(int request_id);
+
   const int64 version_id_;
   int64 registration_id_;
   GURL script_url_;
+  GURL scope_;
   Status status_;
   scoped_ptr<EmbeddedWorkerInstance> embedded_worker_;
   std::vector<StatusCallback> start_callbacks_;
   std::vector<StatusCallback> stop_callbacks_;
   std::vector<base::Closure> status_change_callbacks_;
   IDMap<MessageCallback, IDMapOwnPointer> message_callbacks_;
-  ProviderHostSet controllee_providers_;
+  ControlleeMap controllee_map_;
+  ControlleeByIDMap controllee_by_id_;
   base::WeakPtr<ServiceWorkerContextCore> context_;
   ObserverList<Listener> listeners_;
 
diff --git a/content/browser/service_worker/service_worker_version_unittest.cc b/content/browser/service_worker/service_worker_version_unittest.cc
index e9f39d7..9270d92 100644
--- a/content/browser/service_worker/service_worker_version_unittest.cc
+++ b/content/browser/service_worker/service_worker_version_unittest.cc
@@ -21,6 +21,7 @@
 #define IPC_MESSAGE_START TestMsgStart
 
 IPC_MESSAGE_CONTROL0(TestMsg_Message);
+IPC_MESSAGE_ROUTED1(TestMsg_MessageFromWorker, int);
 IPC_MESSAGE_CONTROL1(TestMsg_Request, int);
 IPC_MESSAGE_CONTROL1(TestMsg_Response, int);
 
@@ -40,11 +41,11 @@
         current_request_id_(0) {}
   virtual ~MessageReceiver() {}
 
-  virtual bool OnSendMessageToWorker(int thread_id,
-                                     int embedded_worker_id,
-                                     int request_id,
-                                     const IPC::Message& message) OVERRIDE {
-    if (EmbeddedWorkerTestHelper::OnSendMessageToWorker(
+  virtual bool OnMessageToWorker(int thread_id,
+                                 int embedded_worker_id,
+                                 int request_id,
+                                 const IPC::Message& message) OVERRIDE {
+    if (EmbeddedWorkerTestHelper::OnMessageToWorker(
             thread_id, embedded_worker_id, request_id, message)) {
       return true;
     }
@@ -59,6 +60,10 @@
     return handled;
   }
 
+  void SimulateSendValueToBrowser(int embedded_worker_id, int value) {
+    SimulateSend(new TestMsg_MessageFromWorker(embedded_worker_id, value));
+  }
+
  private:
   void OnMessage() {
     // Do nothing.
@@ -66,9 +71,9 @@
 
   void OnRequest(int value) {
     // Double the given value and send back the response.
-    SimulateSendMessageToBrowser(current_embedded_worker_id_,
-                                 current_request_id_,
-                                 TestMsg_Response(value * 2));
+    SimulateSendReplyToBrowser(current_embedded_worker_id_,
+                               current_request_id_,
+                               TestMsg_Response(value * 2));
   }
 
   int current_embedded_worker_id_;
@@ -97,6 +102,42 @@
       base::Bind(&ObserveStatusChanges, base::Unretained(version), statuses));
 }
 
+// A specialized listener class to receive test messages from a worker.
+class MessageReceiverFromWorker : public EmbeddedWorkerInstance::Listener {
+ public:
+  explicit MessageReceiverFromWorker(EmbeddedWorkerInstance* instance)
+      : instance_(instance) {
+    instance_->AddListener(this);
+  }
+  virtual ~MessageReceiverFromWorker() {
+    instance_->RemoveListener(this);
+  }
+
+  virtual void OnStarted() OVERRIDE { NOTREACHED(); }
+  virtual void OnStopped() OVERRIDE { NOTREACHED(); }
+  virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE {
+    bool handled = true;
+    IPC_BEGIN_MESSAGE_MAP(MessageReceiverFromWorker, message)
+      IPC_MESSAGE_HANDLER(TestMsg_MessageFromWorker, OnMessageFromWorker)
+      IPC_MESSAGE_UNHANDLED(handled = false)
+    IPC_END_MESSAGE_MAP()
+    return handled;
+  }
+  virtual bool OnReplyReceived(int request_id,
+                               const IPC::Message& message) OVERRIDE {
+    NOTREACHED();
+    return false;
+  }
+
+  void OnMessageFromWorker(int value) { received_values_.push_back(value); }
+  const std::vector<int>& received_values() const { return received_values_; }
+
+ private:
+  EmbeddedWorkerInstance* instance_;
+  std::vector<int> received_values_;
+  DISALLOW_COPY_AND_ASSIGN(MessageReceiverFromWorker);
+};
+
 }  // namespace
 
 class ServiceWorkerVersionTest : public testing::Test {
@@ -105,7 +146,7 @@
       : thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP) {}
 
   virtual void SetUp() OVERRIDE {
-    context_.reset(new ServiceWorkerContextCore(base::FilePath(), NULL));
+    context_.reset(new ServiceWorkerContextCore(base::FilePath(), NULL, NULL));
     helper_.reset(new MessageReceiver(context_.get()));
 
     registration_ = new ServiceWorkerRegistration(
@@ -131,7 +172,7 @@
 
   TestBrowserThreadBundle thread_bundle_;
   scoped_ptr<ServiceWorkerContextCore> context_;
-  scoped_ptr<EmbeddedWorkerTestHelper> helper_;
+  scoped_ptr<MessageReceiver> helper_;
   scoped_refptr<ServiceWorkerRegistration> registration_;
   scoped_refptr<ServiceWorkerVersion> version_;
   DISALLOW_COPY_AND_ASSIGN(ServiceWorkerVersionTest);
@@ -256,6 +297,21 @@
   EXPECT_EQ(333 * 2, value2);
 }
 
+TEST_F(ServiceWorkerVersionTest, ReceiveMessageFromWorker) {
+  MessageReceiverFromWorker receiver(version_->embedded_worker());
+
+  // Simulate sending some dummy values from the worker.
+  helper_->SimulateSendValueToBrowser(
+      version_->embedded_worker()->embedded_worker_id(), 555);
+  helper_->SimulateSendValueToBrowser(
+      version_->embedded_worker()->embedded_worker_id(), 777);
+
+  // Verify the receiver received the values.
+  ASSERT_EQ(2U, receiver.received_values().size());
+  EXPECT_EQ(555, receiver.received_values()[0]);
+  EXPECT_EQ(777, receiver.received_values()[1]);
+}
+
 TEST_F(ServiceWorkerVersionTest, InstallAndWaitCompletion) {
   EXPECT_EQ(ServiceWorkerVersion::NEW, version_->status());
 
diff --git a/content/browser/shared_worker/shared_worker_host.cc b/content/browser/shared_worker/shared_worker_host.cc
index acca666..61632cb 100644
--- a/content/browser/shared_worker/shared_worker_host.cc
+++ b/content/browser/shared_worker/shared_worker_host.cc
@@ -46,14 +46,16 @@
 }  // namespace
 
 SharedWorkerHost::SharedWorkerHost(SharedWorkerInstance* instance,
-                                   SharedWorkerMessageFilter* filter)
+                                   SharedWorkerMessageFilter* filter,
+                                   int worker_route_id)
     : instance_(instance),
       worker_document_set_(new WorkerDocumentSet()),
       container_render_filter_(filter),
       worker_process_id_(filter->render_process_id()),
-      worker_route_id_(filter->GetNextRoutingID()),
+      worker_route_id_(worker_route_id),
       load_failed_(false),
       closed_(false),
+      fast_shutdown_detected_(false),
       creation_time_(base::TimeTicks::Now()) {
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
 }
@@ -77,11 +79,17 @@
                                          parent_iter->render_frame_id()));
     }
   }
-  BrowserThread::PostTask(
-      BrowserThread::UI,
-      FROM_HERE,
-      base::Bind(
-          &NotifyWorkerDestroyedOnUI, worker_process_id_, worker_route_id_));
+  // If |fast_shutdown_detected_| is true,
+  // SharedWorkerDevToolsManager::GetInstance()->WorkerDestroyed was already
+  // called when the fast shutdown was detected while SharedWorkerServiceImpl
+  // was reserving the rendere process.
+  if (!fast_shutdown_detected_) {
+    BrowserThread::PostTask(
+        BrowserThread::UI,
+        FROM_HERE,
+        base::Bind(
+            &NotifyWorkerDestroyedOnUI, worker_process_id_, worker_route_id_));
+  }
   SharedWorkerServiceImpl::GetInstance()->NotifyWorkerDestroyed(
       worker_process_id_, worker_route_id_);
 }
diff --git a/content/browser/shared_worker/shared_worker_host.h b/content/browser/shared_worker/shared_worker_host.h
index 5b2a27b..06572f7 100644
--- a/content/browser/shared_worker/shared_worker_host.h
+++ b/content/browser/shared_worker/shared_worker_host.h
@@ -29,7 +29,8 @@
 class SharedWorkerHost {
  public:
   SharedWorkerHost(SharedWorkerInstance* instance,
-                   SharedWorkerMessageFilter* filter);
+                   SharedWorkerMessageFilter* filter,
+                   int worker_route_id);
   ~SharedWorkerHost();
 
   // Sends |message| to the SharedWorker.
@@ -84,6 +85,7 @@
   int worker_route_id() const { return worker_route_id_; }
   bool load_failed() const { return load_failed_; }
   bool closed() const { return closed_; }
+  void set_fast_shutdown_detected() { fast_shutdown_detected_ = true; }
 
  private:
   // Unique identifier for a worker client.
@@ -126,6 +128,7 @@
   int worker_route_id_;
   bool load_failed_;
   bool closed_;
+  bool fast_shutdown_detected_;
   const base::TimeTicks creation_time_;
   DISALLOW_COPY_AND_ASSIGN(SharedWorkerHost);
 };
diff --git a/content/browser/shared_worker/shared_worker_service_impl.cc b/content/browser/shared_worker/shared_worker_service_impl.cc
index 0d0e0c6..8019549 100644
--- a/content/browser/shared_worker/shared_worker_service_impl.cc
+++ b/content/browser/shared_worker/shared_worker_service_impl.cc
@@ -9,6 +9,8 @@
 #include <set>
 #include <vector>
 
+#include "base/callback.h"
+#include "base/memory/ref_counted.h"
 #include "content/browser/devtools/shared_worker_devtools_manager.h"
 #include "content/browser/renderer_host/render_process_host_impl.h"
 #include "content/browser/shared_worker/shared_worker_host.h"
@@ -27,10 +29,18 @@
  public:
   explicit ScopedWorkerDependencyChecker(SharedWorkerServiceImpl* service)
       : service_(service) {}
-  ~ScopedWorkerDependencyChecker() { service_->CheckWorkerDependency(); }
+  ScopedWorkerDependencyChecker(SharedWorkerServiceImpl* service,
+                                base::Closure done_closure)
+      : service_(service), done_closure_(done_closure) {}
+  ~ScopedWorkerDependencyChecker() {
+    service_->CheckWorkerDependency();
+    if (!done_closure_.is_null())
+      done_closure_.Run();
+  }
 
  private:
   SharedWorkerServiceImpl* service_;
+  base::Closure done_closure_;
   DISALLOW_COPY_AND_ASSIGN(ScopedWorkerDependencyChecker);
 };
 
@@ -62,38 +72,161 @@
       base::Bind(&UpdateWorkerDependencyOnUI, added_ids, removed_ids));
 }
 
-void WorkerCreatedResultCallbackOnIO(int worker_process_id,
-                                     int worker_route_id,
-                                     bool pause_on_start) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
-  SharedWorkerServiceImpl::GetInstance()->WorkerCreatedResultCallback(
-      worker_process_id, worker_route_id, pause_on_start);
+void DecrementWorkerRefCount(int process_id) {
+  if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
+    BrowserThread::PostTask(BrowserThread::UI,
+                            FROM_HERE,
+                            base::Bind(&DecrementWorkerRefCount, process_id));
+    return;
+  }
+  RenderProcessHostImpl* render_process_host_impl =
+      static_cast<RenderProcessHostImpl*>(
+          RenderProcessHost::FromID(process_id));
+  if (render_process_host_impl)
+    render_process_host_impl->DecrementWorkerRefCount();
 }
 
-void NotifyWorkerCreatedOnUI(int worker_process_id,
-                             int worker_route_id,
-                             const SharedWorkerInstance& instance) {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-  bool pause_on_start =
-      SharedWorkerDevToolsManager::GetInstance()->WorkerCreated(
-          worker_process_id, worker_route_id, instance);
-  BrowserThread::PostTask(BrowserThread::IO,
-                          FROM_HERE,
-                          base::Bind(&WorkerCreatedResultCallbackOnIO,
-                                     worker_process_id,
-                                     worker_route_id,
-                                     pause_on_start));
+bool TryIncrementWorkerRefCount(int worker_process_id) {
+  RenderProcessHostImpl* render_process = static_cast<RenderProcessHostImpl*>(
+      RenderProcessHost::FromID(worker_process_id));
+  if (!render_process || render_process->FastShutdownStarted()) {
+    return false;
+  }
+  render_process->IncrementWorkerRefCount();
+  return true;
 }
 
 }  // namespace
 
+class SharedWorkerServiceImpl::SharedWorkerPendingInstance {
+ public:
+  struct SharedWorkerPendingRequest {
+    SharedWorkerPendingRequest(SharedWorkerMessageFilter* filter,
+                               int route_id,
+                               unsigned long long document_id,
+                               int render_process_id,
+                               int render_frame_route_id)
+        : filter(filter),
+          route_id(route_id),
+          document_id(document_id),
+          render_process_id(render_process_id),
+          render_frame_route_id(render_frame_route_id) {}
+    SharedWorkerMessageFilter* const filter;
+    const int route_id;
+    const unsigned long long document_id;
+    const int render_process_id;
+    const int render_frame_route_id;
+  };
+
+  typedef ScopedVector<SharedWorkerPendingRequest> SharedWorkerPendingRequests;
+
+  explicit SharedWorkerPendingInstance(
+      scoped_ptr<SharedWorkerInstance> instance)
+      : instance_(instance.Pass()) {}
+  ~SharedWorkerPendingInstance() {}
+  SharedWorkerInstance* instance() { return instance_.get(); }
+  SharedWorkerInstance* release_instance() { return instance_.release(); }
+  SharedWorkerPendingRequests* requests() { return &requests_; }
+  SharedWorkerMessageFilter* FindFilter(int process_id) {
+    for (size_t i = 0; i < requests_.size(); ++i) {
+      if (requests_[i]->render_process_id == process_id)
+        return requests_[i]->filter;
+    }
+    return NULL;
+  }
+  void AddRequest(scoped_ptr<SharedWorkerPendingRequest> request_info) {
+    requests_.push_back(request_info.release());
+  }
+  void RemoveRequest(int process_id) {
+    for (SharedWorkerPendingRequests::iterator request_itr = requests_.begin();
+         request_itr != requests_.end();) {
+      if ((*request_itr)->render_process_id == process_id)
+        request_itr = requests_.erase(request_itr);
+      else
+        ++request_itr;
+    }
+  }
+  void RegisterToSharedWorkerHost(SharedWorkerHost* host) {
+    for (size_t i = 0; i < requests_.size(); ++i) {
+      SharedWorkerPendingRequest* request = requests_[i];
+      host->AddFilter(request->filter, request->route_id);
+      host->worker_document_set()->Add(request->filter,
+                                       request->document_id,
+                                       request->render_process_id,
+                                       request->render_frame_route_id);
+    }
+  }
+  void SendWorkerCreatedMessages() {
+    for (size_t i = 0; i < requests_.size(); ++i) {
+      SharedWorkerPendingRequest* request = requests_[i];
+      request->filter->Send(new ViewMsg_WorkerCreated(request->route_id));
+    }
+  }
+
+ private:
+  scoped_ptr<SharedWorkerInstance> instance_;
+  SharedWorkerPendingRequests requests_;
+  DISALLOW_COPY_AND_ASSIGN(SharedWorkerPendingInstance);
+};
+
+class SharedWorkerServiceImpl::SharedWorkerReserver
+    : public base::RefCountedThreadSafe<SharedWorkerReserver> {
+ public:
+  SharedWorkerReserver(int pending_instance_id,
+                       int worker_process_id,
+                       int worker_route_id,
+                       bool is_new_worker,
+                       const SharedWorkerInstance& instance)
+      : worker_process_id_(worker_process_id),
+        worker_route_id_(worker_route_id),
+        is_new_worker_(is_new_worker),
+        instance_(instance) {}
+
+  void TryReserve(const base::Callback<void(bool)>& success_cb,
+                  const base::Closure& failure_cb,
+                  bool (*try_increment_worker_ref_count)(int)) {
+    DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+    if (!try_increment_worker_ref_count(worker_process_id_)) {
+      if (!is_new_worker_) {
+        SharedWorkerDevToolsManager::GetInstance()->WorkerDestroyed(
+            worker_process_id_, worker_route_id_);
+      }
+      BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, failure_cb);
+      return;
+    }
+    bool pause_on_start = false;
+    if (is_new_worker_) {
+      pause_on_start =
+          SharedWorkerDevToolsManager::GetInstance()->WorkerCreated(
+              worker_process_id_, worker_route_id_, instance_);
+    }
+    BrowserThread::PostTask(
+        BrowserThread::IO, FROM_HERE, base::Bind(success_cb, pause_on_start));
+  }
+
+ private:
+  friend class base::RefCountedThreadSafe<SharedWorkerReserver>;
+  ~SharedWorkerReserver() {}
+
+  const int worker_process_id_;
+  const int worker_route_id_;
+  const bool is_new_worker_;
+  const SharedWorkerInstance instance_;
+};
+
+// static
+bool (*SharedWorkerServiceImpl::s_try_increment_worker_ref_count_)(int) =
+    TryIncrementWorkerRefCount;
+
 SharedWorkerServiceImpl* SharedWorkerServiceImpl::GetInstance() {
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
   return Singleton<SharedWorkerServiceImpl>::get();
 }
 
 SharedWorkerServiceImpl::SharedWorkerServiceImpl()
-    : update_worker_dependency_(UpdateWorkerDependency) {}
+    : update_worker_dependency_(UpdateWorkerDependency),
+      next_pending_instance_id_(0) {
+}
 
 SharedWorkerServiceImpl::~SharedWorkerServiceImpl() {}
 
@@ -102,6 +235,7 @@
   worker_hosts_.clear();
   observers_.Clear();
   update_worker_dependency_ = UpdateWorkerDependency;
+  s_try_increment_worker_ref_count_ = TryIncrementWorkerRefCount;
 }
 
 bool SharedWorkerServiceImpl::TerminateWorker(int process_id, int route_id) {
@@ -151,88 +285,33 @@
     const WorkerStoragePartition& partition,
     bool* url_mismatch) {
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
-  ScopedWorkerDependencyChecker checker(this);
   *url_mismatch = false;
-  SharedWorkerHost* existing_host = FindSharedWorkerHost(
-      worker_hosts_, params.url, params.name, partition, resource_context);
-  if (existing_host) {
-    if (params.url != existing_host->instance()->url()) {
+  scoped_ptr<SharedWorkerInstance> instance(
+      new SharedWorkerInstance(params.url,
+                               params.name,
+                               params.content_security_policy,
+                               params.security_policy_type,
+                               resource_context,
+                               partition));
+  scoped_ptr<SharedWorkerPendingInstance::SharedWorkerPendingRequest> request(
+      new SharedWorkerPendingInstance::SharedWorkerPendingRequest(
+          filter,
+          route_id,
+          params.document_id,
+          filter->render_process_id(),
+          params.render_frame_route_id));
+  if (SharedWorkerPendingInstance* pending = FindPendingInstance(*instance)) {
+    if (params.url != pending->instance()->url()) {
       *url_mismatch = true;
       return;
     }
-    if (existing_host->load_failed()) {
-      filter->Send(new ViewMsg_WorkerScriptLoadFailed(route_id));
-      return;
-    }
-    existing_host->AddFilter(filter, route_id);
-    existing_host->worker_document_set()->Add(filter,
-                                              params.document_id,
-                                              filter->render_process_id(),
-                                              params.render_frame_route_id);
-    filter->Send(new ViewMsg_WorkerCreated(route_id));
+    pending->AddRequest(request.Pass());
     return;
   }
-  SharedWorkerHost* pending_host = FindSharedWorkerHost(pending_worker_hosts_,
-                                                        params.url,
-                                                        params.name,
-                                                        partition,
-                                                        resource_context);
-  if (pending_host) {
-    if (params.url != pending_host->instance()->url()) {
-      *url_mismatch = true;
-      return;
-    }
-    pending_host->AddFilter(filter, route_id);
-    pending_host->worker_document_set()->Add(filter,
-                                             params.document_id,
-                                             filter->render_process_id(),
-                                             params.render_frame_route_id);
-    return;
-  }
-
-  scoped_ptr<SharedWorkerInstance> instance(new SharedWorkerInstance(
-      params.url,
-      params.name,
-      params.content_security_policy,
-      params.security_policy_type,
-      resource_context,
-      partition));
-  scoped_ptr<SharedWorkerHost> host(
-      new SharedWorkerHost(instance.release(), filter));
-  host->AddFilter(filter, route_id);
-  host->worker_document_set()->Add(filter,
-                                   params.document_id,
-                                   filter->render_process_id(),
-                                   params.render_frame_route_id);
-  const int worker_route_id = host->worker_route_id();
-  // We need to call SharedWorkerDevToolsManager::WorkerCreated() on UI thread
-  // to know whether the worker should be paused on start or not.
-  // WorkerCreatedResultCallback() will be called with the result.
-  BrowserThread::PostTask(BrowserThread::UI,
-                          FROM_HERE,
-                          base::Bind(&NotifyWorkerCreatedOnUI,
-                                     filter->render_process_id(),
-                                     worker_route_id,
-                                     *host->instance()));
-  pending_worker_hosts_.set(
-      std::make_pair(filter->render_process_id(), worker_route_id),
-      host.Pass());
-}
-
-void SharedWorkerServiceImpl::WorkerCreatedResultCallback(int worker_process_id,
-                                                          int worker_route_id,
-                                                          bool pause_on_start) {
-  scoped_ptr<SharedWorkerHost> host = pending_worker_hosts_.take_and_erase(
-      std::make_pair(worker_process_id, worker_route_id));
-  const GURL url = host->instance()->url();
-  const base::string16 name = host->instance()->name();
-  host->Start(pause_on_start);
-  worker_hosts_.set(std::make_pair(worker_process_id, worker_route_id),
-                    host.Pass());
-  FOR_EACH_OBSERVER(
-      WorkerServiceObserver,
-      observers_,
-      WorkerCreated(url, name, worker_process_id, worker_route_id));
+  scoped_ptr<SharedWorkerPendingInstance> pending_instance(
+      new SharedWorkerPendingInstance(instance.Pass()));
+  pending_instance->AddRequest(request.Pass());
+  ReserveRenderProcessToCreateWorker(pending_instance.Pass(), url_mismatch);
 }
 
 void SharedWorkerServiceImpl::ForwardToWorker(
@@ -350,6 +429,17 @@
     scoped_ptr<SharedWorkerHost> host =
         worker_hosts_.take_and_erase(remove_list[i]);
   }
+
+  std::vector<int> remove_pending_instance_list;
+  for (PendingInstaneMap::iterator iter = pending_instances_.begin();
+       iter != pending_instances_.end();
+       ++iter) {
+    iter->second->RemoveRequest(filter->render_process_id());
+    if (!iter->second->requests()->size())
+      remove_pending_instance_list.push_back(iter->first);
+  }
+  for (size_t i = 0; i < remove_pending_instance_list.size(); ++i)
+    pending_instances_.take_and_erase(remove_pending_instance_list[i]);
 }
 
 void SharedWorkerServiceImpl::NotifyWorkerDestroyed(int worker_process_id,
@@ -359,6 +449,135 @@
                     WorkerDestroyed(worker_process_id, worker_route_id));
 }
 
+void SharedWorkerServiceImpl::ReserveRenderProcessToCreateWorker(
+    scoped_ptr<SharedWorkerPendingInstance> pending_instance,
+    bool* url_mismatch) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+  DCHECK(!FindPendingInstance(*pending_instance->instance()));
+  if (url_mismatch)
+    *url_mismatch = false;
+  if (!pending_instance->requests()->size())
+    return;
+  int worker_process_id = -1;
+  int worker_route_id = MSG_ROUTING_NONE;
+  bool is_new_worker = true;
+  SharedWorkerHost* host = FindSharedWorkerHost(*pending_instance->instance());
+  if (host) {
+    if (pending_instance->instance()->url() != host->instance()->url()) {
+      if (url_mismatch)
+        *url_mismatch = true;
+      return;
+    }
+    worker_process_id = host->process_id();
+    worker_route_id = host->worker_route_id();
+    is_new_worker = false;
+  } else {
+    SharedWorkerMessageFilter* first_filter =
+        (*pending_instance->requests()->begin())->filter;
+    worker_process_id = first_filter->render_process_id();
+    worker_route_id = first_filter->GetNextRoutingID();
+  }
+  const int pending_instance_id = next_pending_instance_id_++;
+  scoped_refptr<SharedWorkerReserver> reserver(
+      new SharedWorkerReserver(pending_instance_id,
+                               worker_process_id,
+                               worker_route_id,
+                               is_new_worker,
+                               *pending_instance->instance()));
+  BrowserThread::PostTask(
+      BrowserThread::UI,
+      FROM_HERE,
+      base::Bind(
+          &SharedWorkerReserver::TryReserve,
+          reserver,
+          base::Bind(&SharedWorkerServiceImpl::RenderProcessReservedCallback,
+                     base::Unretained(this),
+                     pending_instance_id,
+                     worker_process_id,
+                     worker_route_id,
+                     is_new_worker),
+          base::Bind(
+              &SharedWorkerServiceImpl::RenderProcessReserveFailedCallback,
+              base::Unretained(this),
+              pending_instance_id,
+              worker_process_id,
+              worker_route_id,
+              is_new_worker),
+          s_try_increment_worker_ref_count_));
+  pending_instances_.set(pending_instance_id, pending_instance.Pass());
+}
+
+void SharedWorkerServiceImpl::RenderProcessReservedCallback(
+    int pending_instance_id,
+    int worker_process_id,
+    int worker_route_id,
+    bool is_new_worker,
+    bool pause_on_start) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+  // To offset the TryIncrementWorkerRefCount called for the reservation,
+  // calls DecrementWorkerRefCount after CheckWorkerDependency in
+  // ScopeWorkerDependencyChecker's destructor.
+  ScopedWorkerDependencyChecker checker(
+      this, base::Bind(&DecrementWorkerRefCount, worker_process_id));
+  scoped_ptr<SharedWorkerPendingInstance> pending_instance =
+      pending_instances_.take_and_erase(pending_instance_id);
+  if (!pending_instance)
+    return;
+  if (!is_new_worker) {
+    SharedWorkerHost* existing_host =
+        worker_hosts_.get(std::make_pair(worker_process_id, worker_route_id));
+    if (!existing_host) {
+      // Retry reserving a renderer process if the existed Shared Worker was
+      // destroyed on IO thread while reserving the renderer process on UI
+      // thread.
+      ReserveRenderProcessToCreateWorker(pending_instance.Pass(), NULL);
+      return;
+    }
+    pending_instance->RegisterToSharedWorkerHost(existing_host);
+    pending_instance->SendWorkerCreatedMessages();
+    return;
+  }
+  SharedWorkerMessageFilter* filter =
+      pending_instance->FindFilter(worker_process_id);
+  if (!filter) {
+    pending_instance->RemoveRequest(worker_process_id);
+    // Retry reserving a renderer process if the requested renderer process was
+    // destroyed on IO thread while reserving the renderer process on UI thread.
+    ReserveRenderProcessToCreateWorker(pending_instance.Pass(), NULL);
+    return;
+  }
+  scoped_ptr<SharedWorkerHost> host(new SharedWorkerHost(
+      pending_instance->release_instance(), filter, worker_route_id));
+  pending_instance->RegisterToSharedWorkerHost(host.get());
+  const GURL url = host->instance()->url();
+  const base::string16 name = host->instance()->name();
+  host->Start(pause_on_start);
+  worker_hosts_.set(std::make_pair(worker_process_id, worker_route_id),
+                    host.Pass());
+  FOR_EACH_OBSERVER(
+      WorkerServiceObserver,
+      observers_,
+      WorkerCreated(url, name, worker_process_id, worker_route_id));
+}
+
+void SharedWorkerServiceImpl::RenderProcessReserveFailedCallback(
+    int pending_instance_id,
+    int worker_process_id,
+    int worker_route_id,
+    bool is_new_worker) {
+  if (scoped_ptr<SharedWorkerHost> host = worker_hosts_.take_and_erase(
+          std::make_pair(worker_process_id, worker_route_id))) {
+    host->set_fast_shutdown_detected();
+  }
+  scoped_ptr<SharedWorkerPendingInstance> pending_instance =
+      pending_instances_.take_and_erase(pending_instance_id);
+  if (!pending_instance)
+    return;
+  pending_instance->RemoveRequest(worker_process_id);
+  // Retry reserving a renderer process.
+  ReserveRenderProcessToCreateWorker(pending_instance.Pass(), NULL);
+}
+
 SharedWorkerHost* SharedWorkerServiceImpl::FindSharedWorkerHost(
     SharedWorkerMessageFilter* filter,
     int worker_route_id) {
@@ -366,18 +585,27 @@
                                           worker_route_id));
 }
 
-// static
 SharedWorkerHost* SharedWorkerServiceImpl::FindSharedWorkerHost(
-    const WorkerHostMap& hosts,
-    const GURL& url,
-    const base::string16& name,
-    const WorkerStoragePartition& partition,
-    ResourceContext* resource_context) {
-  for (WorkerHostMap::const_iterator iter = hosts.begin(); iter != hosts.end();
+    const SharedWorkerInstance& instance) {
+  for (WorkerHostMap::const_iterator iter = worker_hosts_.begin();
+       iter != worker_hosts_.end();
        ++iter) {
-    SharedWorkerInstance* instance = iter->second->instance();
-    if (instance && !iter->second->closed() &&
-        instance->Matches(url, name, partition, resource_context))
+    SharedWorkerHost* host = iter->second;
+    if (host->instance() && !host->closed() &&
+        host->instance()->Matches(instance)) {
+      return iter->second;
+    }
+  }
+  return NULL;
+}
+
+SharedWorkerServiceImpl::SharedWorkerPendingInstance*
+SharedWorkerServiceImpl::FindPendingInstance(
+    const SharedWorkerInstance& instance) {
+  for (PendingInstaneMap::iterator iter = pending_instances_.begin();
+       iter != pending_instances_.end();
+       ++iter) {
+    if (iter->second->instance()->Matches(instance))
       return iter->second;
   }
   return NULL;
@@ -427,4 +655,9 @@
   update_worker_dependency_ = new_func;
 }
 
+void SharedWorkerServiceImpl::ChangeTryIncrementWorkerRefCountFuncForTesting(
+    bool (*new_func)(int)) {
+  s_try_increment_worker_ref_count_ = new_func;
+}
+
 }  // namespace content
diff --git a/content/browser/shared_worker/shared_worker_service_impl.h b/content/browser/shared_worker/shared_worker_service_impl.h
index 7abf452..50e7106 100644
--- a/content/browser/shared_worker/shared_worker_service_impl.h
+++ b/content/browser/shared_worker/shared_worker_service_impl.h
@@ -9,6 +9,7 @@
 
 #include "base/compiler_specific.h"
 #include "base/containers/scoped_ptr_hash_map.h"
+#include "base/memory/scoped_vector.h"
 #include "base/memory/singleton.h"
 #include "base/observer_list.h"
 #include "content/public/browser/notification_observer.h"
@@ -92,37 +93,59 @@
   // RenderProcessHostImpl on UI thread if necessary.
   void CheckWorkerDependency();
 
-  void WorkerCreatedResultCallback(int worker_process_id,
-                                   int worker_route_id,
-                                   bool pause_on_start);
   void NotifyWorkerDestroyed(int worker_process_id, int worker_route_id);
 
  private:
+  class SharedWorkerPendingInstance;
+  class SharedWorkerReserver;
+
   friend struct DefaultSingletonTraits<SharedWorkerServiceImpl>;
   friend class SharedWorkerServiceImplTest;
 
   typedef void (*UpdateWorkerDependencyFunc)(const std::vector<int>&,
                                              const std::vector<int>&);
+  typedef bool (*TryIncrementWorkerRefCountFunc)(bool);
   // Pair of render_process_id and worker_route_id.
   typedef std::pair<int, int> ProcessRouteIdPair;
   typedef base::ScopedPtrHashMap<ProcessRouteIdPair, SharedWorkerHost>
       WorkerHostMap;
+  typedef base::ScopedPtrHashMap<int, SharedWorkerPendingInstance>
+      PendingInstaneMap;
 
   SharedWorkerServiceImpl();
   virtual ~SharedWorkerServiceImpl();
 
   void ResetForTesting();
 
+  // Reserves the render process to create Shared Worker. This reservation
+  // procedure will be executed on UI thread and
+  // RenderProcessReservedCallback() or RenderProcessReserveFailedCallback()
+  // will be called on IO thread.
+  void ReserveRenderProcessToCreateWorker(
+      scoped_ptr<SharedWorkerPendingInstance> pending_instance,
+      bool* url_mismatch);
+
+  // Called after the render process is reserved to create Shared Worker in it.
+  void RenderProcessReservedCallback(int pending_instance_id,
+                                     int worker_process_id,
+                                     int worker_route_id,
+                                     bool is_new_worker,
+                                     bool pause_on_start);
+
+  // Called after the fast shutdown is detected while reserving the render
+  // process to create Shared Worker in it.
+  void RenderProcessReserveFailedCallback(int pending_instance_id,
+                                          int worker_process_id,
+                                          int worker_route_id,
+                                          bool is_new_worker);
+
   SharedWorkerHost* FindSharedWorkerHost(
       SharedWorkerMessageFilter* filter,
       int worker_route_id);
 
-  static SharedWorkerHost* FindSharedWorkerHost(
-      const WorkerHostMap& hosts,
-      const GURL& url,
-      const base::string16& name,
-      const WorkerStoragePartition& worker_partition,
-      ResourceContext* resource_context);
+  SharedWorkerHost* FindSharedWorkerHost(const SharedWorkerInstance& instance);
+  SharedWorkerPendingInstance* FindPendingInstance(
+      const SharedWorkerInstance& instance);
 
   // Returns the IDs of the renderer processes which are executing
   // SharedWorkers connected to other renderer processes.
@@ -130,12 +153,18 @@
 
   void ChangeUpdateWorkerDependencyFuncForTesting(
       UpdateWorkerDependencyFunc new_func);
+  void ChangeTryIncrementWorkerRefCountFuncForTesting(bool (*new_func)(int));
 
   std::set<int> last_worker_depended_renderers_;
+  // Function ptr to update worker dependency, tests may override this.
   UpdateWorkerDependencyFunc update_worker_dependency_;
 
+  // Function ptr to increment worker ref count, tests may override this.
+  static bool (*s_try_increment_worker_ref_count_)(int);
+
   WorkerHostMap worker_hosts_;
-  WorkerHostMap pending_worker_hosts_;
+  PendingInstaneMap pending_instances_;
+  int next_pending_instance_id_;
 
   ObserverList<WorkerServiceObserver> observers_;
 
diff --git a/content/browser/shared_worker/shared_worker_service_impl_unittest.cc b/content/browser/shared_worker/shared_worker_service_impl_unittest.cc
index 7c226d6..878d3bc 100644
--- a/content/browser/shared_worker/shared_worker_service_impl_unittest.cc
+++ b/content/browser/shared_worker/shared_worker_service_impl_unittest.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include <map>
+#include <set>
 #include <vector>
 
 #include "base/atomic_sequence_num.h"
@@ -11,6 +12,7 @@
 #include "base/memory/scoped_vector.h"
 #include "base/strings/string16.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/synchronization/lock.h"
 #include "content/browser/message_port_message_filter.h"
 #include "content/browser/shared_worker/shared_worker_message_filter.h"
 #include "content/browser/shared_worker/shared_worker_service_impl.h"
@@ -25,8 +27,83 @@
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace content {
+
+class SharedWorkerServiceImplTest : public testing::Test {
+ public:
+  static void RegisterRunningProcessID(int process_id) {
+    base::AutoLock lock(s_lock_);
+    s_running_process_id_set_.insert(process_id);
+  }
+  static void UnregisterRunningProcessID(int process_id) {
+    base::AutoLock lock(s_lock_);
+    s_running_process_id_set_.erase(process_id);
+  }
+
+ protected:
+  SharedWorkerServiceImplTest()
+      : browser_thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP),
+        browser_context_(new TestBrowserContext()),
+        partition_(
+            new WorkerStoragePartition(browser_context_->GetRequestContext(),
+                                       NULL,
+                                       NULL,
+                                       NULL,
+                                       NULL,
+                                       NULL,
+                                       NULL,
+                                       NULL)) {
+    SharedWorkerServiceImpl::GetInstance()
+        ->ChangeUpdateWorkerDependencyFuncForTesting(
+            &SharedWorkerServiceImplTest::MockUpdateWorkerDependency);
+    SharedWorkerServiceImpl::GetInstance()
+        ->ChangeTryIncrementWorkerRefCountFuncForTesting(
+            &SharedWorkerServiceImplTest::MockTryIncrementWorkerRefCount);
+  }
+
+  virtual void SetUp() OVERRIDE {}
+  virtual void TearDown() OVERRIDE {
+    s_update_worker_dependency_call_count_ = 0;
+    s_worker_dependency_added_ids_.clear();
+    s_worker_dependency_removed_ids_.clear();
+    s_running_process_id_set_.clear();
+    SharedWorkerServiceImpl::GetInstance()->ResetForTesting();
+  }
+  static void MockUpdateWorkerDependency(const std::vector<int>& added_ids,
+                                         const std::vector<int>& removed_ids) {
+    ++s_update_worker_dependency_call_count_;
+    s_worker_dependency_added_ids_ = added_ids;
+    s_worker_dependency_removed_ids_ = removed_ids;
+  }
+  static bool MockTryIncrementWorkerRefCount(int worker_process_id) {
+    base::AutoLock lock(s_lock_);
+    return s_running_process_id_set_.find(worker_process_id) !=
+           s_running_process_id_set_.end();
+  }
+
+  TestBrowserThreadBundle browser_thread_bundle_;
+  scoped_ptr<TestBrowserContext> browser_context_;
+  scoped_ptr<WorkerStoragePartition> partition_;
+  static int s_update_worker_dependency_call_count_;
+  static std::vector<int> s_worker_dependency_added_ids_;
+  static std::vector<int> s_worker_dependency_removed_ids_;
+  static base::Lock s_lock_;
+  static std::set<int> s_running_process_id_set_;
+  DISALLOW_COPY_AND_ASSIGN(SharedWorkerServiceImplTest);
+};
+
+// static
+int SharedWorkerServiceImplTest::s_update_worker_dependency_call_count_;
+std::vector<int> SharedWorkerServiceImplTest::s_worker_dependency_added_ids_;
+std::vector<int> SharedWorkerServiceImplTest::s_worker_dependency_removed_ids_;
+base::Lock SharedWorkerServiceImplTest::s_lock_;
+std::set<int> SharedWorkerServiceImplTest::s_running_process_id_set_;
+
 namespace {
 
+static const int kProcessIDs[] = {100, 101, 102};
+static const unsigned long long kDocumentIDs[] = {200, 201, 202};
+static const int kRenderFrameRouteIDs[] = {300, 301, 302};
+
 class MockMessagePortMessageFilter : public MessagePortMessageFilter {
  public:
   MockMessagePortMessageFilter(const NextRoutingIDCallback& callback,
@@ -89,7 +166,8 @@
   MockRendererProcessHost(int process_id,
                           ResourceContext* resource_context,
                           const WorkerStoragePartition& partition)
-      : message_filter_(new MockMessagePortMessageFilter(
+      : process_id_(process_id),
+        message_filter_(new MockMessagePortMessageFilter(
             base::Bind(&base::AtomicSequenceNumber::GetNext,
                        base::Unretained(&next_routing_id_)),
             &queued_messages_)),
@@ -97,9 +175,12 @@
                                                          resource_context,
                                                          partition,
                                                          message_filter_.get(),
-                                                         &queued_messages_)) {}
+                                                         &queued_messages_)) {
+    SharedWorkerServiceImplTest::RegisterRunningProcessID(process_id);
+  }
 
   ~MockRendererProcessHost() {
+    SharedWorkerServiceImplTest::UnregisterRunningProcessID(process_id_);
     message_filter_->Close();
     worker_filter_->Close();
   }
@@ -132,7 +213,12 @@
     return msg.Pass();
   }
 
+  void FastShutdownIfPossible() {
+    SharedWorkerServiceImplTest::UnregisterRunningProcessID(process_id_);
+  }
+
  private:
+  const int process_id_;
   ScopedVector<IPC::Message> queued_messages_;
   base::AtomicSequenceNumber next_routing_id_;
   scoped_refptr<MockMessagePortMessageFilter> message_filter_;
@@ -299,56 +385,11 @@
 
 }  // namespace
 
-class SharedWorkerServiceImplTest : public testing::Test {
- protected:
-  SharedWorkerServiceImplTest()
-      : browser_thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP),
-        browser_context_(new TestBrowserContext()),
-        partition_(
-            new WorkerStoragePartition(browser_context_->GetRequestContext(),
-                                       NULL,
-                                       NULL,
-                                       NULL,
-                                       NULL,
-                                       NULL,
-                                       NULL,
-                                       NULL)) {
-    SharedWorkerServiceImpl::GetInstance()
-        ->ChangeUpdateWorkerDependencyFuncForTesting(
-            &SharedWorkerServiceImplTest::MockUpdateWorkerDependency);
-  }
-
-  virtual void SetUp() OVERRIDE {}
-  virtual void TearDown() OVERRIDE {
-    s_update_worker_dependency_call_count_ = 0;
-    s_worker_dependency_added_ids_.clear();
-    s_worker_dependency_removed_ids_.clear();
-    SharedWorkerServiceImpl::GetInstance()->ResetForTesting();
-  }
-  static void MockUpdateWorkerDependency(const std::vector<int>& added_ids,
-                                         const std::vector<int>& removed_ids) {
-    ++s_update_worker_dependency_call_count_;
-    s_worker_dependency_added_ids_ = added_ids;
-    s_worker_dependency_removed_ids_ = removed_ids;
-  }
-
-  TestBrowserThreadBundle browser_thread_bundle_;
-  scoped_ptr<TestBrowserContext> browser_context_;
-  scoped_ptr<WorkerStoragePartition> partition_;
-  static int s_update_worker_dependency_call_count_;
-  static std::vector<int> s_worker_dependency_added_ids_;
-  static std::vector<int> s_worker_dependency_removed_ids_;
-  DISALLOW_COPY_AND_ASSIGN(SharedWorkerServiceImplTest);
-};
-
-// static
-int SharedWorkerServiceImplTest::s_update_worker_dependency_call_count_;
-std::vector<int> SharedWorkerServiceImplTest::s_worker_dependency_added_ids_;
-std::vector<int> SharedWorkerServiceImplTest::s_worker_dependency_removed_ids_;
-
 TEST_F(SharedWorkerServiceImplTest, BasicTest) {
-  scoped_ptr<MockRendererProcessHost> renderer_host(new MockRendererProcessHost(
-      100, browser_context_->GetResourceContext(), *partition_.get()));
+  scoped_ptr<MockRendererProcessHost> renderer_host(
+      new MockRendererProcessHost(kProcessIDs[0],
+                                  browser_context_->GetResourceContext(),
+                                  *partition_.get()));
   scoped_ptr<MockSharedWorkerConnector> connector(
       new MockSharedWorkerConnector(renderer_host.get()));
   int worker_route_id;
@@ -356,9 +397,11 @@
 
   // SharedWorkerConnector creates two message ports and sends
   // ViewHostMsg_CreateWorker.
-  connector->Create("http://example.com/w.js", "name", 200, 300);
-  // We need to go to UI thread to call
-  // SharedWorkerDevToolsManager::WorkerCreated().
+  connector->Create("http://example.com/w.js",
+                    "name",
+                    kDocumentIDs[0],
+                    kRenderFrameRouteIDs[0]);
+  // We need to go to UI thread to call ReserveRenderProcessOnUI().
   RunAllPendingInMessageLoop();
   EXPECT_EQ(2U, renderer_host->QueuedMessageCount());
   // WorkerProcessMsg_CreateWorker should be sent to the renderer in which
@@ -434,94 +477,98 @@
 
 TEST_F(SharedWorkerServiceImplTest, TwoRendererTest) {
   // The first renderer host.
-  scoped_ptr<MockRendererProcessHost> renderer_host1(
-      new MockRendererProcessHost(
-          100, browser_context_->GetResourceContext(), *partition_.get()));
-  scoped_ptr<MockSharedWorkerConnector> connector1(
-      new MockSharedWorkerConnector(renderer_host1.get()));
+  scoped_ptr<MockRendererProcessHost> renderer_host0(
+      new MockRendererProcessHost(kProcessIDs[0],
+                                  browser_context_->GetResourceContext(),
+                                  *partition_.get()));
+  scoped_ptr<MockSharedWorkerConnector> connector0(
+      new MockSharedWorkerConnector(renderer_host0.get()));
   int worker_route_id;
   int worker_msg_port_route_id1;
 
   // SharedWorkerConnector creates two message ports and sends
   // ViewHostMsg_CreateWorker.
-  connector1->Create("http://example.com/w.js", "name", 200, 300);
-  // We need to go to UI thread to call
-  // SharedWorkerDevToolsManager::WorkerCreated().
+  connector0->Create("http://example.com/w.js",
+                     "name",
+                     kDocumentIDs[0],
+                     kRenderFrameRouteIDs[0]);
+  // We need to go to UI thread to call ReserveRenderProcessOnUI().
   RunAllPendingInMessageLoop();
-  EXPECT_EQ(2U, renderer_host1->QueuedMessageCount());
+  EXPECT_EQ(2U, renderer_host0->QueuedMessageCount());
   // WorkerProcessMsg_CreateWorker should be sent to the renderer in which
   // SharedWorker will be created.
-  CheckWorkerProcessMsgCreateWorker(renderer_host1.get(),
+  CheckWorkerProcessMsgCreateWorker(renderer_host0.get(),
                                     "http://example.com/w.js",
                                     "name",
                                     blink::WebContentSecurityPolicyTypeReport,
                                     &worker_route_id);
   // ViewMsg_WorkerCreated(1) should be sent back to SharedWorkerConnector side.
-  CheckViewMsgWorkerCreated(renderer_host1.get(), connector1.get());
+  CheckViewMsgWorkerCreated(renderer_host0.get(), connector0.get());
 
   // SharedWorkerConnector side sends MessagePortHostMsg_QueueMessages in
   // WebSharedWorkerProxy::connect.
-  connector1->SendQueueMessages();
-  EXPECT_EQ(1U, renderer_host1->QueuedMessageCount());
+  connector0->SendQueueMessages();
+  EXPECT_EQ(1U, renderer_host0->QueuedMessageCount());
   // MessagePortMsg_MessagesQueued(2) should be sent back to
   // SharedWorkerConnector side.
-  CheckMessagePortMsgMessagesQueued(renderer_host1.get(), connector1.get());
+  CheckMessagePortMsgMessagesQueued(renderer_host0.get(), connector0.get());
 
   // When SharedWorkerConnector receives ViewMsg_WorkerCreated(1), it sends
   // WorkerMsg_Connect wrapped in ViewHostMsg_ForwardToWorker.
-  connector1->SendConnect();
-  EXPECT_EQ(1U, renderer_host1->QueuedMessageCount());
+  connector0->SendConnect();
+  EXPECT_EQ(1U, renderer_host0->QueuedMessageCount());
   // WorkerMsg_Connect should be sent to SharedWorker side.
-  CheckWorkerMsgConnect(renderer_host1.get(),
+  CheckWorkerMsgConnect(renderer_host0.get(),
                         worker_route_id,
-                        connector1->remote_port_id(),
+                        connector0->remote_port_id(),
                         &worker_msg_port_route_id1);
 
   // When SharedWorkerConnector receives MessagePortMsg_MessagesQueued(2), it
   // sends MessagePortHostMsg_SendQueuedMessages.
   std::vector<QueuedMessage> empty_messages;
-  connector1->SendSendQueuedMessages(empty_messages);
-  EXPECT_EQ(0U, renderer_host1->QueuedMessageCount());
+  connector0->SendSendQueuedMessages(empty_messages);
+  EXPECT_EQ(0U, renderer_host0->QueuedMessageCount());
 
   // SharedWorker sends WorkerHostMsg_WorkerScriptLoaded in
   // EmbeddedSharedWorkerStub::workerScriptLoaded().
-  EXPECT_TRUE(renderer_host1->OnMessageReceived(
+  EXPECT_TRUE(renderer_host0->OnMessageReceived(
       new WorkerHostMsg_WorkerScriptLoaded(worker_route_id)));
-  EXPECT_EQ(0U, renderer_host1->QueuedMessageCount());
+  EXPECT_EQ(0U, renderer_host0->QueuedMessageCount());
 
   // SharedWorker sends WorkerHostMsg_WorkerConnected in
   // EmbeddedSharedWorkerStub::workerScriptLoaded().
   EXPECT_TRUE(
-      renderer_host1->OnMessageReceived(new WorkerHostMsg_WorkerConnected(
-          connector1->remote_port_id(), worker_route_id)));
-  EXPECT_EQ(1U, renderer_host1->QueuedMessageCount());
+      renderer_host0->OnMessageReceived(new WorkerHostMsg_WorkerConnected(
+          connector0->remote_port_id(), worker_route_id)));
+  EXPECT_EQ(1U, renderer_host0->QueuedMessageCount());
   // ViewMsg_WorkerConnected should be sent to SharedWorkerConnector side.
-  CheckViewMsgWorkerConnected(renderer_host1.get(), connector1.get());
+  CheckViewMsgWorkerConnected(renderer_host0.get(), connector0.get());
 
   // When SharedWorkerConnector side sends MessagePortHostMsg_PostMessage,
   // SharedWorker side shuold receive MessagePortMsg_Message.
-  connector1->SendPostMessage("test1");
-  EXPECT_EQ(1U, renderer_host1->QueuedMessageCount());
+  connector0->SendPostMessage("test1");
+  EXPECT_EQ(1U, renderer_host0->QueuedMessageCount());
   CheckMessagePortMsgMessage(
-      renderer_host1.get(), worker_msg_port_route_id1, "test1");
+      renderer_host0.get(), worker_msg_port_route_id1, "test1");
 
   // When SharedWorker side sends MessagePortHostMsg_PostMessage,
   // SharedWorkerConnector side shuold receive MessagePortMsg_Message.
   const std::vector<int> empty_ids;
-  EXPECT_TRUE(renderer_host1->OnMessageReceived(
-      new MessagePortHostMsg_PostMessage(connector1->remote_port_id(),
+  EXPECT_TRUE(renderer_host0->OnMessageReceived(
+      new MessagePortHostMsg_PostMessage(connector0->remote_port_id(),
                                          base::ASCIIToUTF16("test2"),
                                          empty_ids)));
-  EXPECT_EQ(1U, renderer_host1->QueuedMessageCount());
+  EXPECT_EQ(1U, renderer_host0->QueuedMessageCount());
   CheckMessagePortMsgMessage(
-      renderer_host1.get(), connector1->local_port_route_id(), "test2");
+      renderer_host0.get(), connector0->local_port_route_id(), "test2");
 
   // The second renderer host.
-  scoped_ptr<MockRendererProcessHost> renderer_host2(
-      new MockRendererProcessHost(
-          400, browser_context_->GetResourceContext(), *partition_.get()));
-  scoped_ptr<MockSharedWorkerConnector> connector2(
-      new MockSharedWorkerConnector(renderer_host2.get()));
+  scoped_ptr<MockRendererProcessHost> renderer_host1(
+      new MockRendererProcessHost(kProcessIDs[1],
+                                  browser_context_->GetResourceContext(),
+                                  *partition_.get()));
+  scoped_ptr<MockSharedWorkerConnector> connector1(
+      new MockSharedWorkerConnector(renderer_host1.get()));
   int worker_msg_port_route_id2;
 
   // UpdateWorkerDependency should not be called yet.
@@ -529,73 +576,332 @@
 
   // SharedWorkerConnector creates two message ports and sends
   // ViewHostMsg_CreateWorker.
-  connector2->Create("http://example.com/w.js", "name", 500, 600);
-  EXPECT_EQ(1U, renderer_host2->QueuedMessageCount());
+  connector1->Create("http://example.com/w.js",
+                     "name",
+                     kDocumentIDs[1],
+                     kRenderFrameRouteIDs[1]);
+  // We need to go to UI thread to call ReserveRenderProcessOnUI().
+  RunAllPendingInMessageLoop();
+  EXPECT_EQ(1U, renderer_host1->QueuedMessageCount());
   // ViewMsg_WorkerCreated(3) should be sent back to SharedWorkerConnector side.
-  CheckViewMsgWorkerCreated(renderer_host2.get(), connector2.get());
+  CheckViewMsgWorkerCreated(renderer_host1.get(), connector1.get());
 
   // UpdateWorkerDependency should be called.
   EXPECT_EQ(1, s_update_worker_dependency_call_count_);
   EXPECT_EQ(1U, s_worker_dependency_added_ids_.size());
-  EXPECT_EQ(100, s_worker_dependency_added_ids_[0]);
+  EXPECT_EQ(kProcessIDs[0], s_worker_dependency_added_ids_[0]);
   EXPECT_EQ(0U, s_worker_dependency_removed_ids_.size());
 
   // SharedWorkerConnector side sends MessagePortHostMsg_QueueMessages in
   // WebSharedWorkerProxy::connect.
-  connector2->SendQueueMessages();
-  EXPECT_EQ(1U, renderer_host2->QueuedMessageCount());
+  connector1->SendQueueMessages();
+  EXPECT_EQ(1U, renderer_host1->QueuedMessageCount());
   // MessagePortMsg_MessagesQueued(4) should be sent back to
   // SharedWorkerConnector side.
-  CheckMessagePortMsgMessagesQueued(renderer_host2.get(), connector2.get());
+  CheckMessagePortMsgMessagesQueued(renderer_host1.get(), connector1.get());
 
   // When SharedWorkerConnector receives ViewMsg_WorkerCreated(3), it sends
   // WorkerMsg_Connect wrapped in ViewHostMsg_ForwardToWorker.
-  connector2->SendConnect();
-  EXPECT_EQ(1U, renderer_host1->QueuedMessageCount());
+  connector1->SendConnect();
+  EXPECT_EQ(1U, renderer_host0->QueuedMessageCount());
   // WorkerMsg_Connect should be sent to SharedWorker side.
-  CheckWorkerMsgConnect(renderer_host1.get(),
+  CheckWorkerMsgConnect(renderer_host0.get(),
                         worker_route_id,
-                        connector2->remote_port_id(),
+                        connector1->remote_port_id(),
                         &worker_msg_port_route_id2);
 
   // When SharedWorkerConnector receives MessagePortMsg_MessagesQueued(4), it
   // sends MessagePortHostMsg_SendQueuedMessages.
-  connector2->SendSendQueuedMessages(empty_messages);
-  EXPECT_EQ(0U, renderer_host2->QueuedMessageCount());
+  connector1->SendSendQueuedMessages(empty_messages);
+  EXPECT_EQ(0U, renderer_host1->QueuedMessageCount());
 
   // SharedWorker sends WorkerHostMsg_WorkerConnected in
   // EmbeddedSharedWorkerStub::OnConnect().
   EXPECT_TRUE(
-      renderer_host1->OnMessageReceived(new WorkerHostMsg_WorkerConnected(
-          connector2->remote_port_id(), worker_route_id)));
-  EXPECT_EQ(1U, renderer_host2->QueuedMessageCount());
+      renderer_host0->OnMessageReceived(new WorkerHostMsg_WorkerConnected(
+          connector1->remote_port_id(), worker_route_id)));
+  EXPECT_EQ(1U, renderer_host1->QueuedMessageCount());
   // ViewMsg_WorkerConnected should be sent to SharedWorkerConnector side.
-  CheckViewMsgWorkerConnected(renderer_host2.get(), connector2.get());
+  CheckViewMsgWorkerConnected(renderer_host1.get(), connector1.get());
 
   // When SharedWorkerConnector side sends MessagePortHostMsg_PostMessage,
   // SharedWorker side shuold receive MessagePortMsg_Message.
-  connector2->SendPostMessage("test3");
-  EXPECT_EQ(1U, renderer_host1->QueuedMessageCount());
+  connector1->SendPostMessage("test3");
+  EXPECT_EQ(1U, renderer_host0->QueuedMessageCount());
   CheckMessagePortMsgMessage(
-      renderer_host1.get(), worker_msg_port_route_id2, "test3");
+      renderer_host0.get(), worker_msg_port_route_id2, "test3");
 
   // When SharedWorker side sends MessagePortHostMsg_PostMessage,
   // SharedWorkerConnector side shuold receive MessagePortMsg_Message.
-  EXPECT_TRUE(renderer_host1->OnMessageReceived(
-      new MessagePortHostMsg_PostMessage(connector2->remote_port_id(),
+  EXPECT_TRUE(renderer_host0->OnMessageReceived(
+      new MessagePortHostMsg_PostMessage(connector1->remote_port_id(),
                                          base::ASCIIToUTF16("test4"),
                                          empty_ids)));
-  EXPECT_EQ(1U, renderer_host2->QueuedMessageCount());
+  EXPECT_EQ(1U, renderer_host1->QueuedMessageCount());
   CheckMessagePortMsgMessage(
-      renderer_host2.get(), connector2->local_port_route_id(), "test4");
+      renderer_host1.get(), connector1->local_port_route_id(), "test4");
 
   EXPECT_EQ(1, s_update_worker_dependency_call_count_);
-  renderer_host2.reset();
+  renderer_host1.reset();
   // UpdateWorkerDependency should be called.
   EXPECT_EQ(2, s_update_worker_dependency_call_count_);
   EXPECT_EQ(0U, s_worker_dependency_added_ids_.size());
   EXPECT_EQ(1U, s_worker_dependency_removed_ids_.size());
-  EXPECT_EQ(100, s_worker_dependency_removed_ids_[0]);
+  EXPECT_EQ(kProcessIDs[0], s_worker_dependency_removed_ids_[0]);
+}
+
+TEST_F(SharedWorkerServiceImplTest, CreateWorkerTest) {
+  // The first renderer host.
+  scoped_ptr<MockRendererProcessHost> renderer_host0(
+      new MockRendererProcessHost(kProcessIDs[0],
+                                  browser_context_->GetResourceContext(),
+                                  *partition_.get()));
+  // The second renderer host.
+  scoped_ptr<MockRendererProcessHost> renderer_host1(
+      new MockRendererProcessHost(kProcessIDs[1],
+                                  browser_context_->GetResourceContext(),
+                                  *partition_.get()));
+  int worker_route_id;
+
+  // Normal case.
+  {
+    scoped_ptr<MockSharedWorkerConnector> connector0(
+        new MockSharedWorkerConnector(renderer_host0.get()));
+    scoped_ptr<MockSharedWorkerConnector> connector1(
+        new MockSharedWorkerConnector(renderer_host1.get()));
+    connector0->Create("http://example.com/w1.js",
+                       "name1",
+                       kDocumentIDs[0],
+                       kRenderFrameRouteIDs[0]);
+    EXPECT_NE(MSG_ROUTING_NONE, connector0->route_id());
+    EXPECT_EQ(0U, renderer_host0->QueuedMessageCount());
+    RunAllPendingInMessageLoop();
+    EXPECT_EQ(2U, renderer_host0->QueuedMessageCount());
+    CheckWorkerProcessMsgCreateWorker(renderer_host0.get(),
+                                      "http://example.com/w1.js",
+                                      "name1",
+                                      blink::WebContentSecurityPolicyTypeReport,
+                                      &worker_route_id);
+    CheckViewMsgWorkerCreated(renderer_host0.get(), connector0.get());
+    connector1->Create("http://example.com/w1.js",
+                       "name1",
+                       kDocumentIDs[1],
+                       kRenderFrameRouteIDs[1]);
+    EXPECT_NE(MSG_ROUTING_NONE, connector1->route_id());
+    EXPECT_EQ(0U, renderer_host1->QueuedMessageCount());
+    RunAllPendingInMessageLoop();
+    EXPECT_EQ(1U, renderer_host1->QueuedMessageCount());
+    CheckViewMsgWorkerCreated(renderer_host1.get(), connector1.get());
+  }
+
+  // Normal case (URL mismatch).
+  {
+    scoped_ptr<MockSharedWorkerConnector> connector0(
+        new MockSharedWorkerConnector(renderer_host0.get()));
+    scoped_ptr<MockSharedWorkerConnector> connector1(
+        new MockSharedWorkerConnector(renderer_host1.get()));
+    connector0->Create("http://example.com/w2.js",
+                       "name2",
+                       kDocumentIDs[0],
+                       kRenderFrameRouteIDs[0]);
+    EXPECT_NE(MSG_ROUTING_NONE, connector0->route_id());
+    EXPECT_EQ(0U, renderer_host0->QueuedMessageCount());
+    RunAllPendingInMessageLoop();
+    EXPECT_EQ(2U, renderer_host0->QueuedMessageCount());
+    CheckWorkerProcessMsgCreateWorker(renderer_host0.get(),
+                                      "http://example.com/w2.js",
+                                      "name2",
+                                      blink::WebContentSecurityPolicyTypeReport,
+                                      &worker_route_id);
+    CheckViewMsgWorkerCreated(renderer_host0.get(), connector0.get());
+    connector1->Create("http://example.com/w2x.js",
+                       "name2",
+                       kDocumentIDs[1],
+                       kRenderFrameRouteIDs[1]);
+    EXPECT_EQ(MSG_ROUTING_NONE, connector1->route_id());
+    EXPECT_EQ(0U, renderer_host1->QueuedMessageCount());
+    RunAllPendingInMessageLoop();
+    EXPECT_EQ(0U, renderer_host1->QueuedMessageCount());
+  }
+
+  // Pending case.
+  {
+    scoped_ptr<MockSharedWorkerConnector> connector0(
+        new MockSharedWorkerConnector(renderer_host0.get()));
+    scoped_ptr<MockSharedWorkerConnector> connector1(
+        new MockSharedWorkerConnector(renderer_host1.get()));
+    connector0->Create("http://example.com/w3.js",
+                       "name3",
+                       kDocumentIDs[0],
+                       kRenderFrameRouteIDs[0]);
+    EXPECT_NE(MSG_ROUTING_NONE, connector0->route_id());
+    EXPECT_EQ(0U, renderer_host0->QueuedMessageCount());
+    connector1->Create("http://example.com/w3.js",
+                       "name3",
+                       kDocumentIDs[1],
+                       kRenderFrameRouteIDs[1]);
+    EXPECT_NE(MSG_ROUTING_NONE, connector1->route_id());
+    EXPECT_EQ(0U, renderer_host1->QueuedMessageCount());
+    RunAllPendingInMessageLoop();
+    EXPECT_EQ(2U, renderer_host0->QueuedMessageCount());
+    CheckWorkerProcessMsgCreateWorker(renderer_host0.get(),
+                                      "http://example.com/w3.js",
+                                      "name3",
+                                      blink::WebContentSecurityPolicyTypeReport,
+                                      &worker_route_id);
+    CheckViewMsgWorkerCreated(renderer_host0.get(), connector0.get());
+    EXPECT_EQ(1U, renderer_host1->QueuedMessageCount());
+    CheckViewMsgWorkerCreated(renderer_host1.get(), connector1.get());
+  }
+
+  // Pending case (URL mismatch).
+  {
+    scoped_ptr<MockSharedWorkerConnector> connector0(
+        new MockSharedWorkerConnector(renderer_host0.get()));
+    scoped_ptr<MockSharedWorkerConnector> connector1(
+        new MockSharedWorkerConnector(renderer_host1.get()));
+    connector0->Create("http://example.com/w4.js",
+                       "name4",
+                       kDocumentIDs[0],
+                       kRenderFrameRouteIDs[0]);
+    EXPECT_NE(MSG_ROUTING_NONE, connector0->route_id());
+    EXPECT_EQ(0U, renderer_host0->QueuedMessageCount());
+    connector1->Create("http://example.com/w4x.js",
+                       "name4",
+                       kDocumentIDs[1],
+                       kRenderFrameRouteIDs[1]);
+    EXPECT_EQ(MSG_ROUTING_NONE, connector1->route_id());
+    EXPECT_EQ(0U, renderer_host1->QueuedMessageCount());
+    RunAllPendingInMessageLoop();
+    EXPECT_EQ(2U, renderer_host0->QueuedMessageCount());
+    CheckWorkerProcessMsgCreateWorker(renderer_host0.get(),
+                                      "http://example.com/w4.js",
+                                      "name4",
+                                      blink::WebContentSecurityPolicyTypeReport,
+                                      &worker_route_id);
+    CheckViewMsgWorkerCreated(renderer_host0.get(), connector0.get());
+    EXPECT_EQ(0U, renderer_host1->QueuedMessageCount());
+  }
+}
+
+TEST_F(SharedWorkerServiceImplTest, CreateWorkerRaceTest) {
+  // Create three renderer hosts.
+  scoped_ptr<MockRendererProcessHost> renderer_host0(
+      new MockRendererProcessHost(kProcessIDs[0],
+                                  browser_context_->GetResourceContext(),
+                                  *partition_.get()));
+  scoped_ptr<MockRendererProcessHost> renderer_host1(
+      new MockRendererProcessHost(kProcessIDs[1],
+                                  browser_context_->GetResourceContext(),
+                                  *partition_.get()));
+  scoped_ptr<MockRendererProcessHost> renderer_host2(
+      new MockRendererProcessHost(kProcessIDs[2],
+                                  browser_context_->GetResourceContext(),
+                                  *partition_.get()));
+  int worker_route_id;
+
+  scoped_ptr<MockSharedWorkerConnector> connector0(
+      new MockSharedWorkerConnector(renderer_host0.get()));
+  scoped_ptr<MockSharedWorkerConnector> connector1(
+      new MockSharedWorkerConnector(renderer_host1.get()));
+  scoped_ptr<MockSharedWorkerConnector> connector2(
+      new MockSharedWorkerConnector(renderer_host2.get()));
+  connector0->Create("http://example.com/w1.js",
+                     "name1",
+                     kDocumentIDs[0],
+                     kRenderFrameRouteIDs[0]);
+  EXPECT_NE(MSG_ROUTING_NONE, connector0->route_id());
+  EXPECT_EQ(0U, renderer_host0->QueuedMessageCount());
+  RunAllPendingInMessageLoop();
+  EXPECT_EQ(2U, renderer_host0->QueuedMessageCount());
+  CheckWorkerProcessMsgCreateWorker(renderer_host0.get(),
+                                    "http://example.com/w1.js",
+                                    "name1",
+                                    blink::WebContentSecurityPolicyTypeReport,
+                                    &worker_route_id);
+  CheckViewMsgWorkerCreated(renderer_host0.get(), connector0.get());
+  renderer_host0->FastShutdownIfPossible();
+
+  connector1->Create("http://example.com/w1.js",
+                     "name1",
+                     kDocumentIDs[1],
+                     kRenderFrameRouteIDs[1]);
+  EXPECT_NE(MSG_ROUTING_NONE, connector1->route_id());
+  EXPECT_EQ(0U, renderer_host1->QueuedMessageCount());
+  RunAllPendingInMessageLoop();
+  EXPECT_EQ(2U, renderer_host1->QueuedMessageCount());
+  CheckWorkerProcessMsgCreateWorker(renderer_host1.get(),
+                                    "http://example.com/w1.js",
+                                    "name1",
+                                    blink::WebContentSecurityPolicyTypeReport,
+                                    &worker_route_id);
+  CheckViewMsgWorkerCreated(renderer_host1.get(), connector1.get());
+
+  connector2->Create("http://example.com/w1.js",
+                     "name1",
+                     kDocumentIDs[2],
+                     kRenderFrameRouteIDs[2]);
+  EXPECT_NE(MSG_ROUTING_NONE, connector2->route_id());
+  EXPECT_EQ(0U, renderer_host2->QueuedMessageCount());
+  RunAllPendingInMessageLoop();
+  EXPECT_EQ(1U, renderer_host2->QueuedMessageCount());
+  CheckViewMsgWorkerCreated(renderer_host2.get(), connector2.get());
+}
+
+TEST_F(SharedWorkerServiceImplTest, CreateWorkerRaceTest2) {
+  // Create three renderer hosts.
+  scoped_ptr<MockRendererProcessHost> renderer_host0(
+      new MockRendererProcessHost(kProcessIDs[0],
+                                  browser_context_->GetResourceContext(),
+                                  *partition_.get()));
+  scoped_ptr<MockRendererProcessHost> renderer_host1(
+      new MockRendererProcessHost(kProcessIDs[1],
+                                  browser_context_->GetResourceContext(),
+                                  *partition_.get()));
+  scoped_ptr<MockRendererProcessHost> renderer_host2(
+      new MockRendererProcessHost(kProcessIDs[2],
+                                  browser_context_->GetResourceContext(),
+                                  *partition_.get()));
+  int worker_route_id;
+
+  scoped_ptr<MockSharedWorkerConnector> connector0(
+      new MockSharedWorkerConnector(renderer_host0.get()));
+  scoped_ptr<MockSharedWorkerConnector> connector1(
+      new MockSharedWorkerConnector(renderer_host1.get()));
+  scoped_ptr<MockSharedWorkerConnector> connector2(
+      new MockSharedWorkerConnector(renderer_host2.get()));
+  connector0->Create("http://example.com/w1.js",
+                     "name1",
+                     kDocumentIDs[0],
+                     kRenderFrameRouteIDs[0]);
+  EXPECT_NE(MSG_ROUTING_NONE, connector0->route_id());
+  EXPECT_EQ(0U, renderer_host0->QueuedMessageCount());
+  renderer_host0->FastShutdownIfPossible();
+
+  connector1->Create("http://example.com/w1.js",
+                     "name1",
+                     kDocumentIDs[1],
+                     kRenderFrameRouteIDs[1]);
+  EXPECT_NE(MSG_ROUTING_NONE, connector1->route_id());
+  EXPECT_EQ(0U, renderer_host1->QueuedMessageCount());
+  RunAllPendingInMessageLoop();
+  EXPECT_EQ(2U, renderer_host1->QueuedMessageCount());
+  CheckWorkerProcessMsgCreateWorker(renderer_host1.get(),
+                                    "http://example.com/w1.js",
+                                    "name1",
+                                    blink::WebContentSecurityPolicyTypeReport,
+                                    &worker_route_id);
+  CheckViewMsgWorkerCreated(renderer_host1.get(), connector1.get());
+
+  connector2->Create("http://example.com/w1.js",
+                     "name1",
+                     kDocumentIDs[2],
+                     kRenderFrameRouteIDs[2]);
+  EXPECT_NE(MSG_ROUTING_NONE, connector2->route_id());
+  EXPECT_EQ(0U, renderer_host2->QueuedMessageCount());
+  RunAllPendingInMessageLoop();
+  EXPECT_EQ(1U, renderer_host2->QueuedMessageCount());
+  CheckViewMsgWorkerCreated(renderer_host2.get(), connector2.get());
 }
 
 }  // namespace content
diff --git a/content/browser/site_per_process_browsertest.cc b/content/browser/site_per_process_browsertest.cc
index e90ec66..9a47b4b 100644
--- a/content/browser/site_per_process_browsertest.cc
+++ b/content/browser/site_per_process_browsertest.cc
@@ -193,9 +193,6 @@
 
   virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
     command_line->AppendSwitch(switches::kSitePerProcess);
-
-    // TODO(creis): Remove this when GTK is no longer a supported platform.
-    command_line->AppendSwitch(switches::kForceCompositingMode);
   }
 };
 
diff --git a/content/browser/speech/proto/speech_proto.target.darwin-arm.mk b/content/browser/speech/proto/speech_proto.target.darwin-arm.mk
index 3b36fde..041a249 100644
--- a/content/browser/speech/proto/speech_proto.target.darwin-arm.mk
+++ b/content/browser/speech/proto/speech_proto.target.darwin-arm.mk
@@ -255,7 +255,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/browser/speech/proto/speech_proto.target.darwin-mips.mk b/content/browser/speech/proto/speech_proto.target.darwin-mips.mk
index 54af315..4e14901 100644
--- a/content/browser/speech/proto/speech_proto.target.darwin-mips.mk
+++ b/content/browser/speech/proto/speech_proto.target.darwin-mips.mk
@@ -253,7 +253,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/browser/speech/proto/speech_proto.target.darwin-x86.mk b/content/browser/speech/proto/speech_proto.target.darwin-x86.mk
index bfdfb75..2b96537 100644
--- a/content/browser/speech/proto/speech_proto.target.darwin-x86.mk
+++ b/content/browser/speech/proto/speech_proto.target.darwin-x86.mk
@@ -253,7 +253,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/browser/speech/proto/speech_proto.target.darwin-x86_64.mk b/content/browser/speech/proto/speech_proto.target.darwin-x86_64.mk
index 7659336..909d011 100644
--- a/content/browser/speech/proto/speech_proto.target.darwin-x86_64.mk
+++ b/content/browser/speech/proto/speech_proto.target.darwin-x86_64.mk
@@ -253,7 +253,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/browser/speech/proto/speech_proto.target.linux-arm.mk b/content/browser/speech/proto/speech_proto.target.linux-arm.mk
index 3b36fde..041a249 100644
--- a/content/browser/speech/proto/speech_proto.target.linux-arm.mk
+++ b/content/browser/speech/proto/speech_proto.target.linux-arm.mk
@@ -255,7 +255,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/browser/speech/proto/speech_proto.target.linux-mips.mk b/content/browser/speech/proto/speech_proto.target.linux-mips.mk
index 54af315..4e14901 100644
--- a/content/browser/speech/proto/speech_proto.target.linux-mips.mk
+++ b/content/browser/speech/proto/speech_proto.target.linux-mips.mk
@@ -253,7 +253,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/browser/speech/proto/speech_proto.target.linux-x86.mk b/content/browser/speech/proto/speech_proto.target.linux-x86.mk
index bfdfb75..2b96537 100644
--- a/content/browser/speech/proto/speech_proto.target.linux-x86.mk
+++ b/content/browser/speech/proto/speech_proto.target.linux-x86.mk
@@ -253,7 +253,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/browser/speech/proto/speech_proto.target.linux-x86_64.mk b/content/browser/speech/proto/speech_proto.target.linux-x86_64.mk
index 7659336..909d011 100644
--- a/content/browser/speech/proto/speech_proto.target.linux-x86_64.mk
+++ b/content/browser/speech/proto/speech_proto.target.linux-x86_64.mk
@@ -253,7 +253,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/browser/utility_process_host_impl.cc b/content/browser/utility_process_host_impl.cc
index e7110ce..ddc41a7 100644
--- a/content/browser/utility_process_host_impl.cc
+++ b/content/browser/utility_process_host_impl.cc
@@ -91,7 +91,7 @@
   return new UtilityProcessHostImpl(client, client_task_runner);
 }
 
-void UtilityProcessHost::RegisterUtilityMainThreadFactory(
+void UtilityProcessHostImpl::RegisterUtilityMainThreadFactory(
     UtilityMainThreadFactoryFunction create) {
   g_utility_main_thread_factory = create;
 }
diff --git a/content/browser/utility_process_host_impl.h b/content/browser/utility_process_host_impl.h
index 413dab0..8486655 100644
--- a/content/browser/utility_process_host_impl.h
+++ b/content/browser/utility_process_host_impl.h
@@ -25,10 +25,16 @@
 namespace content {
 class BrowserChildProcessHostImpl;
 
+typedef base::Thread* (*UtilityMainThreadFactoryFunction)(
+    const std::string& id);
+
 class CONTENT_EXPORT UtilityProcessHostImpl
     : public NON_EXPORTED_BASE(UtilityProcessHost),
       public BrowserChildProcessHostDelegate {
  public:
+  static void RegisterUtilityMainThreadFactory(
+      UtilityMainThreadFactoryFunction create);
+
   UtilityProcessHostImpl(UtilityProcessHostClient* client,
                          base::SequencedTaskRunner* client_task_runner);
   virtual ~UtilityProcessHostImpl();
diff --git a/content/browser/web_contents/aura/overscroll_navigation_overlay.cc b/content/browser/web_contents/aura/overscroll_navigation_overlay.cc
index bc8fcea..28ae712 100644
--- a/content/browser/web_contents/aura/overscroll_navigation_overlay.cc
+++ b/content/browser/web_contents/aura/overscroll_navigation_overlay.cc
@@ -173,9 +173,8 @@
     return;
 
   scoped_ptr<ui::Layer> layer;
-  if (window_.get()) {
-    layer.reset(window_->AcquireLayer());
-  }
+  if (window_.get())
+    layer = window_->AcquireLayer();
   Observe(NULL);
   window_slider_.reset();
   window_.reset();
diff --git a/content/browser/web_contents/aura/overscroll_navigation_overlay_unittest.cc b/content/browser/web_contents/aura/overscroll_navigation_overlay_unittest.cc
index c72dcb9..c3b9c35 100644
--- a/content/browser/web_contents/aura/overscroll_navigation_overlay_unittest.cc
+++ b/content/browser/web_contents/aura/overscroll_navigation_overlay_unittest.cc
@@ -86,7 +86,6 @@
     params.view_size = gfx::Size(10, 10);
     params.bitmap_rect = gfx::Rect(params.view_size);
     params.scroll_rect = gfx::Rect();
-    params.needs_ack = false;
     ViewHostMsg_UpdateRect rect(test_rvh()->GetRoutingID(), params);
     RenderViewHostTester::TestOnMessageReceived(test_rvh(), rect);
 
@@ -167,7 +166,6 @@
   params.view_size = gfx::Size(10, 10);
   params.bitmap_rect = gfx::Rect(params.view_size);
   params.scroll_rect = gfx::Rect();
-  params.needs_ack = false;
   params.flags = ViewHostMsg_UpdateRect_Flags::IS_REPAINT_ACK;
   ViewHostMsg_UpdateRect rect(test_rvh()->GetRoutingID(), params);
   RenderViewHostTester::TestOnMessageReceived(test_rvh(), rect);
diff --git a/content/browser/web_contents/opened_by_dom_browsertest.cc b/content/browser/web_contents/opened_by_dom_browsertest.cc
new file mode 100644
index 0000000..1c2d940
--- /dev/null
+++ b/content/browser/web_contents/opened_by_dom_browsertest.cc
@@ -0,0 +1,139 @@
+// 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.
+
+#include "base/command_line.h"
+#include "base/strings/stringprintf.h"
+#include "content/public/browser/web_contents.h"
+#include "content/public/browser/web_contents_delegate.h"
+#include "content/public/common/content_switches.h"
+#include "content/public/test/browser_test_utils.h"
+#include "content/public/test/content_browser_test.h"
+#include "content/public/test/content_browser_test_utils.h"
+#include "content/public/test/test_navigation_observer.h"
+#include "content/shell/browser/shell.h"
+#include "net/dns/mock_host_resolver.h"
+#include "url/gurl.h"
+
+namespace content {
+
+namespace {
+
+// A dummy WebContentsDelegate which tracks whether CloseContents() has been
+// called. It refuses the actual close but keeps track of whether the renderer
+// requested it.
+class CloseTrackingDelegate : public WebContentsDelegate {
+ public:
+  CloseTrackingDelegate() : close_contents_called_(false) {}
+
+  bool close_contents_called() const { return close_contents_called_; }
+
+  virtual void CloseContents(WebContents* source) OVERRIDE {
+    close_contents_called_ = true;
+  }
+
+ private:
+  bool close_contents_called_;
+
+  DISALLOW_COPY_AND_ASSIGN(CloseTrackingDelegate);
+};
+
+}  // namespace
+
+class OpenedByDOMTest : public ContentBrowserTest {
+ protected:
+  virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
+    // Use --site-per-process to force process swaps on cross-site navigations.
+    command_line->AppendSwitch(switches::kSitePerProcess);
+  }
+
+  bool AttemptCloseFromJavaScript(WebContents* web_contents) {
+    CloseTrackingDelegate close_tracking_delegate;
+    WebContentsDelegate* old_delegate = web_contents->GetDelegate();
+    web_contents->SetDelegate(&close_tracking_delegate);
+
+    const char kCloseWindowScript[] =
+        // Close the window.
+        "window.close();"
+        // Report back after an event loop iteration; the close IPC isn't sent
+        // immediately.
+        "setTimeout(function() {"
+        "window.domAutomationController.send(0);"
+        "});";
+    int dummy;
+    CHECK(ExecuteScriptAndExtractInt(web_contents, kCloseWindowScript, &dummy));
+
+    web_contents->SetDelegate(old_delegate);
+    return close_tracking_delegate.close_contents_called();
+  }
+
+  Shell* OpenWindowFromJavaScript(Shell* shell, const GURL& url) {
+    // Wait for the popup to be created and for it to have navigated.
+    ShellAddedObserver new_shell_observer;
+    TestNavigationObserver nav_observer(NULL);
+    nav_observer.StartWatchingNewWebContents();
+    CHECK(ExecuteScript(
+        shell->web_contents(),
+        base::StringPrintf("window.open('%s')", url.spec().c_str())));
+    nav_observer.Wait();
+    return new_shell_observer.GetShell();
+  }
+};
+
+// Tests that window.close() does not work on a normal window that has navigated
+// a few times.
+IN_PROC_BROWSER_TEST_F(OpenedByDOMTest, NormalWindow) {
+  ASSERT_TRUE(test_server()->Start());
+
+  // window.close is allowed if the window was opened by DOM OR the back/forward
+  // list has only one element. Navigate a bit so the second condition is false.
+  GURL url1 = test_server()->GetURL("files/site_isolation/blank.html?1");
+  GURL url2 = test_server()->GetURL("files/site_isolation/blank.html?2");
+  NavigateToURL(shell(), url1);
+  NavigateToURL(shell(), url2);
+
+  // This window was not opened by DOM, so close does not reach the browser
+  // process.
+  EXPECT_FALSE(AttemptCloseFromJavaScript(shell()->web_contents()));
+}
+
+// Tests that window.close() works in a popup window that has navigated a few
+// times.
+IN_PROC_BROWSER_TEST_F(OpenedByDOMTest, Popup) {
+  ASSERT_TRUE(test_server()->Start());
+
+  GURL url1 = test_server()->GetURL("files/site_isolation/blank.html?1");
+  GURL url2 = test_server()->GetURL("files/site_isolation/blank.html?2");
+  GURL url3 = test_server()->GetURL("files/site_isolation/blank.html?3");
+  NavigateToURL(shell(), url1);
+
+  Shell* popup = OpenWindowFromJavaScript(shell(), url2);
+  NavigateToURL(popup, url3);
+  EXPECT_TRUE(AttemptCloseFromJavaScript(popup->web_contents()));
+}
+
+// Tests that window.close() works in a popup window that has navigated a few
+// times and swapped processes.
+IN_PROC_BROWSER_TEST_F(OpenedByDOMTest, CrossProcessPopup) {
+  host_resolver()->AddRule("*", "127.0.0.1");
+  ASSERT_TRUE(test_server()->Start());
+
+  GURL url1 = test_server()->GetURL("files/site_isolation/blank.html?1");
+
+  GURL url2 = test_server()->GetURL("files/site_isolation/blank.html?2");
+  GURL::Replacements replace_host;
+  std::string foo_com("foo.com");
+  replace_host.SetHostStr(foo_com);
+  url2 = url2.ReplaceComponents(replace_host);
+
+  GURL url3 = test_server()->GetURL("files/site_isolation/blank.html?3");
+  url3 = url3.ReplaceComponents(replace_host);
+
+  NavigateToURL(shell(), url1);
+
+  Shell* popup = OpenWindowFromJavaScript(shell(), url2);
+  NavigateToURL(popup, url3);
+  EXPECT_TRUE(AttemptCloseFromJavaScript(popup->web_contents()));
+}
+
+}  // namespace content
diff --git a/content/browser/web_contents/touch_editable_impl_aura.cc b/content/browser/web_contents/touch_editable_impl_aura.cc
index 590afac..be0addf 100644
--- a/content/browser/web_contents/touch_editable_impl_aura.cc
+++ b/content/browser/web_contents/touch_editable_impl_aura.cc
@@ -51,14 +51,6 @@
   if (!rwhva_ || !rwhva_->HasFocus())
     return;
 
-  // If touch editing handles were not visible, we bring them up only if
-  // there is non-zero selection on the page. And the current event is a
-  // gesture event (we dont want to show handles if the user is selecting
-  // using mouse or keyboard).
-  if (selection_gesture_in_process_ && !scroll_in_progress_ &&
-      selection_anchor_rect_ != selection_focus_rect_)
-    StartTouchEditing();
-
   if (text_input_type_ != ui::TEXT_INPUT_TYPE_NONE ||
       selection_anchor_rect_ != selection_focus_rect_) {
     if (touch_selection_controller_)
@@ -122,6 +114,18 @@
                                                        const gfx::Rect& focus) {
   selection_anchor_rect_ = anchor;
   selection_focus_rect_ = focus;
+
+  // If touch editing handles were not visible, we bring them up only if
+  // there is non-zero selection on the page. And the current event is a
+  // gesture event (we dont want to show handles if the user is selecting
+  // using mouse or keyboard).
+  if (selection_gesture_in_process_ && !scroll_in_progress_ &&
+      !overscroll_in_progress_ &&
+      selection_anchor_rect_ != selection_focus_rect_) {
+    StartTouchEditing();
+    selection_gesture_in_process_ = false;
+  }
+
   UpdateEditingController();
 }
 
@@ -135,6 +139,7 @@
     return false;
 
   if (!event->IsGestureEvent()) {
+    selection_gesture_in_process_ = false;
     EndTouchEditing(false);
     return false;
   }
@@ -143,7 +148,6 @@
       static_cast<const ui::GestureEvent*>(event);
   switch (event->type()) {
     case ui::ET_GESTURE_TAP:
-      tap_gesture_tap_count_queue_.push(gesture_event->details().tap_count());
       if (gesture_event->details().tap_count() > 1)
         selection_gesture_in_process_ = true;
       // When the user taps, we want to show touch editing handles if user
@@ -162,10 +166,10 @@
       }
       // For single taps, not inside selected region, we want to show handles
       // only when the tap is on an already focused textfield.
-      is_tap_on_focused_textfield_ = false;
+      textfield_was_focused_on_tap_ = false;
       if (gesture_event->details().tap_count() == 1 &&
           text_input_type_ != ui::TEXT_INPUT_TYPE_NONE)
-        is_tap_on_focused_textfield_ = true;
+        textfield_was_focused_on_tap_ = true;
       break;
     case ui::ET_GESTURE_LONG_PRESS:
       selection_gesture_in_process_ = true;
@@ -173,8 +177,7 @@
     case ui::ET_GESTURE_SCROLL_BEGIN:
       // If selection handles are currently visible, we want to get them back up
       // when scrolling ends. So we set |handles_hidden_due_to_scroll_| so that
-      // we can re-start touch editing when we call |UpdateEditingController()|
-      // on scroll end gesture.
+      // we can re-start touch editing on scroll end gesture.
       scroll_in_progress_ = true;
       handles_hidden_due_to_scroll_ = false;
       if (touch_selection_controller_)
@@ -204,18 +207,9 @@
   DCHECK(rwhva_);
   if (gesture_event_type == blink::WebInputEvent::GestureTap &&
       text_input_type_ != ui::TEXT_INPUT_TYPE_NONE &&
-      is_tap_on_focused_textfield_) {
+      textfield_was_focused_on_tap_) {
     StartTouchEditing();
-    if (touch_selection_controller_)
-      touch_selection_controller_->SelectionChanged();
-  }
-
-  if (gesture_event_type == blink::WebInputEvent::GestureLongPress)
-    selection_gesture_in_process_ = false;
-  if (gesture_event_type == blink::WebInputEvent::GestureTap) {
-    if (tap_gesture_tap_count_queue_.front() > 1)
-      selection_gesture_in_process_ = false;
-    tap_gesture_tap_count_queue_.pop();
+    UpdateEditingController();
   }
 }
 
@@ -369,7 +363,7 @@
       handles_hidden_due_to_scroll_(false),
       scroll_in_progress_(false),
       overscroll_in_progress_(false),
-      is_tap_on_focused_textfield_(false) {
+      textfield_was_focused_on_tap_(false) {
 }
 
 void TouchEditableImplAura::Cleanup() {
@@ -379,6 +373,7 @@
   }
   text_input_type_ = ui::TEXT_INPUT_TYPE_NONE;
   EndTouchEditing(true);
+  selection_gesture_in_process_ = false;
   handles_hidden_due_to_scroll_ = false;
   scroll_in_progress_ = false;
   overscroll_in_progress_ = false;
diff --git a/content/browser/web_contents/touch_editable_impl_aura.h b/content/browser/web_contents/touch_editable_impl_aura.h
index 8190b7c..1d4a56d 100644
--- a/content/browser/web_contents/touch_editable_impl_aura.h
+++ b/content/browser/web_contents/touch_editable_impl_aura.h
@@ -101,14 +101,9 @@
   // Set to true when the page starts an overscroll.
   bool overscroll_in_progress_;
 
-  // Used to track if the current tap gesture is on a focused textfield.
-  bool is_tap_on_focused_textfield_;
-
-  // When we receive ack for a ET_GESTURE_TAP, we do not know if the ack is for
-  // a tap or a double tap (we only get the event type in the ack). So we have
-  // this queue to keep track of the the tap count so that we can distinguish
-  // between double and single tap when we get the ack.
-  std::queue<int> tap_gesture_tap_count_queue_;
+  // Used to track if a textfield was focused when the current tap gesture
+  // happened.
+  bool textfield_was_focused_on_tap_;
 
   DISALLOW_COPY_AND_ASSIGN(TouchEditableImplAura);
 };
diff --git a/content/browser/web_contents/touch_editable_impl_aura_browsertest.cc b/content/browser/web_contents/touch_editable_impl_aura_browsertest.cc
index 2a42dda..f9c84a6 100644
--- a/content/browser/web_contents/touch_editable_impl_aura_browsertest.cc
+++ b/content/browser/web_contents/touch_editable_impl_aura_browsertest.cc
@@ -117,6 +117,7 @@
  public:
   TouchEditableImplAuraTest() {}
 
+ protected:
   virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
     command_line->AppendSwitch(switches::kEnableTouchEditing);
   }
@@ -140,221 +141,18 @@
     content->GetHost()->SetBounds(gfx::Rect(800, 600));
   }
 
-  void TestTouchSelectionOriginatingFromWebpage() {
-    ASSERT_NO_FATAL_FAILURE(
-        StartTestWithPage("files/touch_selection.html"));
-    WebContentsImpl* web_contents =
-        static_cast<WebContentsImpl*>(shell()->web_contents());
-    RenderFrameHost* main_frame = web_contents->GetMainFrame();
-    WebContentsViewAura* view_aura = static_cast<WebContentsViewAura*>(
-        web_contents->GetView());
-    TestTouchEditableImplAura* touch_editable =
-        new TestTouchEditableImplAuraIgnoreMouseMovement;
-    view_aura->SetTouchEditableForTest(touch_editable);
-    RenderWidgetHostViewAura* rwhva = static_cast<RenderWidgetHostViewAura*>(
-        web_contents->GetRenderWidgetHostView());
-    aura::Window* content = web_contents->GetView()->GetContentNativeView();
-    aura::test::EventGenerator generator(content->GetRootWindow(), content);
-    gfx::Rect bounds = content->GetBoundsInRootWindow();
-
-    touch_editable->Reset();
-    ExecuteSyncJSFunction(main_frame, "select_all_text()");
-    touch_editable->WaitForSelectionChangeCallback();
-
-    // Tap inside selection to bring up selection handles.
-    generator.GestureTapAt(gfx::Point(bounds.x() + 10, bounds.y() + 10));
-    EXPECT_EQ(touch_editable->rwhva_, rwhva);
-
-    scoped_ptr<base::Value> value =
-        content::ExecuteScriptAndGetValue(main_frame, "get_selection()");
-    std::string selection;
-    value->GetAsString(&selection);
-
-    // Check if selection handles are showing.
-    EXPECT_TRUE(touch_editable->touch_selection_controller_.get());
-    EXPECT_STREQ("Some text we can select", selection.c_str());
-
-    // Lets move the handles a bit to modify the selection
-    touch_editable->Reset();
-    generator.GestureScrollSequence(
-        gfx::Point(10, 47),
-        gfx::Point(30, 47),
-        base::TimeDelta::FromMilliseconds(20),
-        5);
-    touch_editable->WaitForSelectionChangeCallback();
-
-    EXPECT_TRUE(touch_editable->touch_selection_controller_.get());
-    value = content::ExecuteScriptAndGetValue(main_frame, "get_selection()");
-    value->GetAsString(&selection);
-
-    // It is hard to tell what exactly the selection would be now. But it would
-    // definitely be less than whatever was selected before.
-    EXPECT_GT(std::strlen("Some text we can select"), selection.size());
+  RenderWidgetHostViewAura* GetRenderWidgetHostViewAura(
+      TouchEditableImplAura* touch_editable) {
+    return touch_editable->rwhva_;
   }
 
-  void TestTouchSelectionOnLongPress() {
-    ASSERT_NO_FATAL_FAILURE(
-        StartTestWithPage("files/touch_selection.html"));
-    WebContentsImpl* web_contents =
-        static_cast<WebContentsImpl*>(shell()->web_contents());
-    RenderFrameHost* main_frame = web_contents->GetMainFrame();
-    WebContentsViewAura* view_aura = static_cast<WebContentsViewAura*>(
-        web_contents->GetView());
-    TestTouchEditableImplAura* touch_editable = new TestTouchEditableImplAura;
-    view_aura->SetTouchEditableForTest(touch_editable);
-    RenderWidgetHostViewAura* rwhva = static_cast<RenderWidgetHostViewAura*>(
-        web_contents->GetRenderWidgetHostView());
-    aura::Window* content = web_contents->GetView()->GetContentNativeView();
-    aura::test::EventGenerator generator(content->GetRootWindow(), content);
-    gfx::Rect bounds = content->GetBoundsInRootWindow();
-    EXPECT_EQ(touch_editable->rwhva_, rwhva);
-
-    // Long press to select word.
-    ui::GestureEvent long_press(ui::ET_GESTURE_LONG_PRESS,
-                                10,
-                                10,
-                                0,
-                                ui::EventTimeForNow(),
-                                ui::GestureEventDetails(
-                                    ui::ET_GESTURE_LONG_PRESS, 0, 0),
-                                1);
-    touch_editable->Reset();
-    rwhva->OnGestureEvent(&long_press);
-    touch_editable->WaitForSelectionChangeCallback();
-
-    // Check if selection handles are showing.
-    ui::TouchSelectionController* controller =
-        touch_editable->touch_selection_controller_.get();
-    EXPECT_TRUE(controller);
-
-    scoped_ptr<base::Value> value =
-        content::ExecuteScriptAndGetValue(main_frame, "get_selection()");
-    std::string selection;
-    value->GetAsString(&selection);
-    EXPECT_STREQ("Some", selection.c_str());
+  ui::TouchSelectionController* GetTouchSelectionController(
+      TouchEditableImplAura* touch_editable) {
+    return touch_editable->touch_selection_controller_.get();
   }
 
-  void TestTouchSelectionHiddenWhenScrolling() {
-    ASSERT_NO_FATAL_FAILURE(
-        StartTestWithPage("files/touch_selection.html"));
-    WebContentsImpl* web_contents =
-        static_cast<WebContentsImpl*>(shell()->web_contents());
-    RenderFrameHost* main_frame = web_contents->GetMainFrame();
-    WebContentsViewAura* view_aura = static_cast<WebContentsViewAura*>(
-        web_contents->GetView());
-    TestTouchEditableImplAura* touch_editable = new TestTouchEditableImplAura;
-    view_aura->SetTouchEditableForTest(touch_editable);
-    RenderWidgetHostViewAura* rwhva = static_cast<RenderWidgetHostViewAura*>(
-        web_contents->GetRenderWidgetHostView());
-    aura::Window* content = web_contents->GetView()->GetContentNativeView();
-    aura::test::EventGenerator generator(content->GetRootWindow(), content);
-    gfx::Rect bounds = content->GetBoundsInRootWindow();
-    EXPECT_EQ(touch_editable->rwhva_, rwhva);
-
-    // Long press to select word.
-    ui::GestureEvent long_press(ui::ET_GESTURE_LONG_PRESS,
-                                10,
-                                10,
-                                0,
-                                ui::EventTimeForNow(),
-                                ui::GestureEventDetails(
-                                    ui::ET_GESTURE_LONG_PRESS, 0, 0),
-                                1);
-    touch_editable->Reset();
-    rwhva->OnGestureEvent(&long_press);
-    touch_editable->WaitForSelectionChangeCallback();
-
-    // Check if selection handles are showing.
-    ui::TouchSelectionController* controller =
-        touch_editable->touch_selection_controller_.get();
-    EXPECT_TRUE(controller);
-
-    scoped_ptr<base::Value> value =
-        content::ExecuteScriptAndGetValue(main_frame, "get_selection()");
-    std::string selection;
-    value->GetAsString(&selection);
-    EXPECT_STREQ("Some", selection.c_str());
-
-    // Start scrolling. Handles should get hidden.
-    ui::GestureEvent scroll_begin(ui::ET_GESTURE_SCROLL_BEGIN,
-                                  10,
-                                  10,
-                                  0,
-                                  ui::EventTimeForNow(),
-                                  ui::GestureEventDetails(
-                                      ui::ET_GESTURE_SCROLL_BEGIN, 0, 0),
-                                  1);
-    rwhva->OnGestureEvent(&scroll_begin);
-    EXPECT_FALSE(touch_editable->touch_selection_controller_.get());
-
-    // Handles should come back after scroll ends.
-    ui::GestureEvent scroll_end(ui::ET_GESTURE_SCROLL_END,
-                                10,
-                                10,
-                                0,
-                                ui::EventTimeForNow(),
-                                ui::GestureEventDetails(
-                                    ui::ET_GESTURE_SCROLL_END, 0, 0),
-                                1);
-    rwhva->OnGestureEvent(&scroll_end);
-    EXPECT_TRUE(touch_editable->touch_selection_controller_.get());
-  }
-
-  void TestTouchCursorInTextfield() {
-    ASSERT_NO_FATAL_FAILURE(
-        StartTestWithPage("files/touch_selection.html"));
-    WebContentsImpl* web_contents =
-        static_cast<WebContentsImpl*>(shell()->web_contents());
-    RenderFrameHost* main_frame = web_contents->GetMainFrame();
-    WebContentsViewAura* view_aura = static_cast<WebContentsViewAura*>(
-        web_contents->GetView());
-    TestTouchEditableImplAura* touch_editable =
-        new TestTouchEditableImplAuraIgnoreMouseMovement;
-    view_aura->SetTouchEditableForTest(touch_editable);
-    RenderWidgetHostViewAura* rwhva = static_cast<RenderWidgetHostViewAura*>(
-        web_contents->GetRenderWidgetHostView());
-    aura::Window* content = web_contents->GetView()->GetContentNativeView();
-    aura::test::EventGenerator generator(content->GetRootWindow(), content);
-    gfx::Rect bounds = content->GetBoundsInRootWindow();
-    EXPECT_EQ(touch_editable->rwhva_, rwhva);
-
-    ExecuteSyncJSFunction(main_frame, "focus_textfield()");
-    touch_editable->WaitForSelectionChangeCallback();
-
-    // Tap textfield
-    touch_editable->Reset();
-    generator.GestureTapAt(gfx::Point(bounds.x() + 50, bounds.y() + 40));
-    // Tap Down and Tap acks are sent synchronously.
-    touch_editable->WaitForSelectionChangeCallback();
-    touch_editable->Reset();
-
-    // Check if cursor handle is showing.
-    ui::TouchSelectionController* controller =
-        touch_editable->touch_selection_controller_.get();
-    EXPECT_NE(ui::TEXT_INPUT_TYPE_NONE, touch_editable->text_input_type_);
-    EXPECT_TRUE(controller);
-
-    scoped_ptr<base::Value> value =
-        content::ExecuteScriptAndGetValue(main_frame, "get_cursor_position()");
-    int cursor_pos = -1;
-    value->GetAsInteger(&cursor_pos);
-    EXPECT_NE(-1, cursor_pos);
-
-    // Move the cursor handle.
-    generator.GestureScrollSequence(
-        gfx::Point(50, 59),
-        gfx::Point(10, 59),
-        base::TimeDelta::FromMilliseconds(20),
-        1);
-    touch_editable->WaitForSelectionChangeCallback();
-    EXPECT_TRUE(touch_editable->touch_selection_controller_.get());
-    value = content::ExecuteScriptAndGetValue(main_frame,
-                                              "get_cursor_position()");
-    int new_cursor_pos = -1;
-    value->GetAsInteger(&new_cursor_pos);
-    EXPECT_NE(-1, new_cursor_pos);
-    // Cursor should have moved.
-    EXPECT_NE(new_cursor_pos, cursor_pos);
+  ui::TextInputType GetTextInputType(TouchEditableImplAura* touch_editable) {
+    return touch_editable->text_input_type_;
   }
 
  private:
@@ -363,22 +161,243 @@
 
 IN_PROC_BROWSER_TEST_F(TouchEditableImplAuraTest,
                        TouchSelectionOriginatingFromWebpageTest) {
-  TestTouchSelectionOriginatingFromWebpage();
+  ASSERT_NO_FATAL_FAILURE(StartTestWithPage("files/touch_selection.html"));
+  WebContentsImpl* web_contents =
+      static_cast<WebContentsImpl*>(shell()->web_contents());
+  RenderFrameHost* main_frame = web_contents->GetMainFrame();
+  WebContentsViewAura* view_aura = static_cast<WebContentsViewAura*>(
+      web_contents->GetView());
+  TestTouchEditableImplAura* touch_editable =
+      new TestTouchEditableImplAuraIgnoreMouseMovement;
+  view_aura->SetTouchEditableForTest(touch_editable);
+  RenderWidgetHostViewAura* rwhva = static_cast<RenderWidgetHostViewAura*>(
+      web_contents->GetRenderWidgetHostView());
+  aura::Window* content = web_contents->GetView()->GetContentNativeView();
+  aura::test::EventGenerator generator(content->GetRootWindow(), content);
+  gfx::Rect bounds = content->GetBoundsInRootWindow();
+
+  touch_editable->Reset();
+  ExecuteSyncJSFunction(main_frame, "select_all_text()");
+  touch_editable->WaitForSelectionChangeCallback();
+
+  // Tap inside selection to bring up selection handles.
+  generator.GestureTapAt(gfx::Point(bounds.x() + 10, bounds.y() + 10));
+  EXPECT_EQ(GetRenderWidgetHostViewAura(touch_editable), rwhva);
+
+  scoped_ptr<base::Value> value =
+      content::ExecuteScriptAndGetValue(main_frame, "get_selection()");
+  std::string selection;
+  value->GetAsString(&selection);
+
+  // Check if selection handles are showing.
+  EXPECT_TRUE(GetTouchSelectionController(touch_editable));
+  EXPECT_STREQ("Some text we can select", selection.c_str());
+
+  // Lets move the handles a bit to modify the selection
+  touch_editable->Reset();
+  generator.GestureScrollSequence(
+      gfx::Point(10, 47),
+      gfx::Point(30, 47),
+      base::TimeDelta::FromMilliseconds(20),
+      5);
+  touch_editable->WaitForSelectionChangeCallback();
+
+  EXPECT_TRUE(GetTouchSelectionController(touch_editable));
+  value = content::ExecuteScriptAndGetValue(main_frame, "get_selection()");
+  value->GetAsString(&selection);
+
+  // It is hard to tell what exactly the selection would be now. But it would
+  // definitely be less than whatever was selected before.
+  EXPECT_GT(std::strlen("Some text we can select"), selection.size());
 }
 
 IN_PROC_BROWSER_TEST_F(TouchEditableImplAuraTest,
                        TestTouchSelectionHiddenWhenScrolling) {
-  TestTouchSelectionHiddenWhenScrolling();
+  ASSERT_NO_FATAL_FAILURE(StartTestWithPage("files/touch_selection.html"));
+  WebContentsImpl* web_contents =
+      static_cast<WebContentsImpl*>(shell()->web_contents());
+  RenderFrameHost* main_frame = web_contents->GetMainFrame();
+  WebContentsViewAura* view_aura = static_cast<WebContentsViewAura*>(
+      web_contents->GetView());
+  TestTouchEditableImplAura* touch_editable = new TestTouchEditableImplAura;
+  view_aura->SetTouchEditableForTest(touch_editable);
+  RenderWidgetHostViewAura* rwhva = static_cast<RenderWidgetHostViewAura*>(
+      web_contents->GetRenderWidgetHostView());
+  EXPECT_EQ(GetRenderWidgetHostViewAura(touch_editable), rwhva);
+
+  // Long press to select word.
+  ui::GestureEvent long_press(ui::ET_GESTURE_LONG_PRESS,
+                              10,
+                              10,
+                              0,
+                              ui::EventTimeForNow(),
+                              ui::GestureEventDetails(
+                                  ui::ET_GESTURE_LONG_PRESS, 0, 0),
+                              1);
+  touch_editable->Reset();
+  rwhva->OnGestureEvent(&long_press);
+  touch_editable->WaitForSelectionChangeCallback();
+
+  // Check if selection handles are showing.
+  EXPECT_TRUE(GetTouchSelectionController(touch_editable));
+
+  scoped_ptr<base::Value> value =
+      content::ExecuteScriptAndGetValue(main_frame, "get_selection()");
+  std::string selection;
+  value->GetAsString(&selection);
+  EXPECT_STREQ("Some", selection.c_str());
+
+  // Start scrolling. Handles should get hidden.
+  ui::GestureEvent scroll_begin(ui::ET_GESTURE_SCROLL_BEGIN,
+                                10,
+                                10,
+                                0,
+                                ui::EventTimeForNow(),
+                                ui::GestureEventDetails(
+                                    ui::ET_GESTURE_SCROLL_BEGIN, 0, 0),
+                                1);
+  rwhva->OnGestureEvent(&scroll_begin);
+  EXPECT_FALSE(GetTouchSelectionController(touch_editable));
+
+  // Handles should come back after scroll ends.
+  ui::GestureEvent scroll_end(ui::ET_GESTURE_SCROLL_END,
+                              10,
+                              10,
+                              0,
+                              ui::EventTimeForNow(),
+                              ui::GestureEventDetails(
+                                  ui::ET_GESTURE_SCROLL_END, 0, 0),
+                              1);
+  rwhva->OnGestureEvent(&scroll_end);
+  EXPECT_TRUE(GetTouchSelectionController(touch_editable));
 }
 
 IN_PROC_BROWSER_TEST_F(TouchEditableImplAuraTest,
                        TouchSelectionOnLongPressTest) {
-  TestTouchSelectionOnLongPress();
+  ASSERT_NO_FATAL_FAILURE(StartTestWithPage("files/touch_selection.html"));
+  WebContentsImpl* web_contents =
+      static_cast<WebContentsImpl*>(shell()->web_contents());
+  RenderFrameHost* main_frame = web_contents->GetMainFrame();
+  WebContentsViewAura* view_aura = static_cast<WebContentsViewAura*>(
+      web_contents->GetView());
+  TestTouchEditableImplAura* touch_editable = new TestTouchEditableImplAura;
+  view_aura->SetTouchEditableForTest(touch_editable);
+  RenderWidgetHostViewAura* rwhva = static_cast<RenderWidgetHostViewAura*>(
+      web_contents->GetRenderWidgetHostView());
+  EXPECT_EQ(GetRenderWidgetHostViewAura(touch_editable), rwhva);
+
+  // Long press to select word.
+  ui::GestureEvent long_press(ui::ET_GESTURE_LONG_PRESS,
+                              10,
+                              10,
+                              0,
+                              ui::EventTimeForNow(),
+                              ui::GestureEventDetails(
+                                  ui::ET_GESTURE_LONG_PRESS, 0, 0),
+                              1);
+  touch_editable->Reset();
+  rwhva->OnGestureEvent(&long_press);
+  touch_editable->WaitForSelectionChangeCallback();
+
+  // Check if selection handles are showing.
+  EXPECT_TRUE(GetTouchSelectionController(touch_editable));
+
+  scoped_ptr<base::Value> value =
+      content::ExecuteScriptAndGetValue(main_frame, "get_selection()");
+  std::string selection;
+  value->GetAsString(&selection);
+  EXPECT_STREQ("Some", selection.c_str());
+}
+
+IN_PROC_BROWSER_TEST_F(TouchEditableImplAuraTest,
+                       TouchSelectionOnDoubleTapTest) {
+  ASSERT_NO_FATAL_FAILURE(StartTestWithPage("files/touch_selection.html"));
+  WebContentsImpl* web_contents =
+      static_cast<WebContentsImpl*>(shell()->web_contents());
+  RenderFrameHost* main_frame = web_contents->GetMainFrame();
+  WebContentsViewAura* view_aura =
+      static_cast<WebContentsViewAura*>(web_contents->GetView());
+  TestTouchEditableImplAura* touch_editable = new TestTouchEditableImplAura;
+  view_aura->SetTouchEditableForTest(touch_editable);
+  RenderWidgetHostViewAura* rwhva = static_cast<RenderWidgetHostViewAura*>(
+      web_contents->GetRenderWidgetHostView());
+  EXPECT_EQ(GetRenderWidgetHostViewAura(touch_editable), rwhva);
+
+  // Double-tap to select word.
+  ui::GestureEvent double_tap(ui::ET_GESTURE_TAP,
+                              10,
+                              10,
+                              0,
+                              ui::EventTimeForNow(),
+                              ui::GestureEventDetails(ui::ET_GESTURE_TAP, 2, 0),
+                              1);
+  touch_editable->Reset();
+  rwhva->OnGestureEvent(&double_tap);
+  touch_editable->WaitForSelectionChangeCallback();
+
+  // Check if selection handles are showing.
+  EXPECT_TRUE(GetTouchSelectionController(touch_editable));
+
+  scoped_ptr<base::Value> value =
+      content::ExecuteScriptAndGetValue(main_frame, "get_selection()");
+  std::string selection;
+  value->GetAsString(&selection);
+  EXPECT_STREQ("Some", selection.c_str());
 }
 
 IN_PROC_BROWSER_TEST_F(TouchEditableImplAuraTest,
                        TouchCursorInTextfieldTest) {
-  TestTouchCursorInTextfield();
+  ASSERT_NO_FATAL_FAILURE(StartTestWithPage("files/touch_selection.html"));
+  WebContentsImpl* web_contents =
+      static_cast<WebContentsImpl*>(shell()->web_contents());
+  RenderFrameHost* main_frame = web_contents->GetMainFrame();
+  WebContentsViewAura* view_aura = static_cast<WebContentsViewAura*>(
+      web_contents->GetView());
+  TestTouchEditableImplAura* touch_editable =
+      new TestTouchEditableImplAuraIgnoreMouseMovement;
+  view_aura->SetTouchEditableForTest(touch_editable);
+  RenderWidgetHostViewAura* rwhva = static_cast<RenderWidgetHostViewAura*>(
+      web_contents->GetRenderWidgetHostView());
+  aura::Window* content = web_contents->GetView()->GetContentNativeView();
+  aura::test::EventGenerator generator(content->GetRootWindow(), content);
+  gfx::Rect bounds = content->GetBoundsInRootWindow();
+  EXPECT_EQ(GetRenderWidgetHostViewAura(touch_editable), rwhva);
+
+  ExecuteSyncJSFunction(main_frame, "focus_textfield()");
+  touch_editable->WaitForSelectionChangeCallback();
+
+  // Tap textfield
+  touch_editable->Reset();
+  generator.GestureTapAt(gfx::Point(bounds.x() + 50, bounds.y() + 40));
+  // Tap Down and Tap acks are sent synchronously.
+  touch_editable->WaitForSelectionChangeCallback();
+  touch_editable->Reset();
+
+  // Check if cursor handle is showing.
+  EXPECT_NE(ui::TEXT_INPUT_TYPE_NONE, GetTextInputType(touch_editable));
+  EXPECT_TRUE(GetTouchSelectionController(touch_editable));
+
+  scoped_ptr<base::Value> value =
+      content::ExecuteScriptAndGetValue(main_frame, "get_cursor_position()");
+  int cursor_pos = -1;
+  value->GetAsInteger(&cursor_pos);
+  EXPECT_NE(-1, cursor_pos);
+
+  // Move the cursor handle.
+  generator.GestureScrollSequence(
+      gfx::Point(50, 59),
+      gfx::Point(10, 59),
+      base::TimeDelta::FromMilliseconds(20),
+      1);
+  touch_editable->WaitForSelectionChangeCallback();
+  EXPECT_TRUE(GetTouchSelectionController(touch_editable));
+  value = content::ExecuteScriptAndGetValue(main_frame,
+                                            "get_cursor_position()");
+  int new_cursor_pos = -1;
+  value->GetAsInteger(&new_cursor_pos);
+  EXPECT_NE(-1, new_cursor_pos);
+  // Cursor should have moved.
+  EXPECT_NE(new_cursor_pos, cursor_pos);
 }
 
 }  // namespace content
diff --git a/content/browser/web_contents/web_contents_android.cc b/content/browser/web_contents/web_contents_android.cc
index 88922b1..fb8c0db 100644
--- a/content/browser/web_contents/web_contents_android.cc
+++ b/content/browser/web_contents/web_contents_android.cc
@@ -5,6 +5,7 @@
 #include "content/browser/web_contents/web_contents_android.h"
 
 #include "base/android/jni_android.h"
+#include "base/android/jni_string.h"
 #include "base/logging.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/web_contents.h"
@@ -55,4 +56,14 @@
   return base::android::ScopedJavaLocalRef<jobject>(obj_);
 }
 
+ScopedJavaLocalRef<jstring> WebContentsAndroid::GetTitle(
+    JNIEnv* env, jobject obj) const {
+  return base::android::ConvertUTF16ToJavaString(env,
+                                                 web_contents_->GetTitle());
+}
+
+void WebContentsAndroid::Stop(JNIEnv* env, jobject obj) {
+  web_contents_->Stop();
+}
+
 }  // namespace content
diff --git a/content/browser/web_contents/web_contents_android.h b/content/browser/web_contents/web_contents_android.h
index a9595e2..eec6127 100644
--- a/content/browser/web_contents/web_contents_android.h
+++ b/content/browser/web_contents/web_contents_android.h
@@ -33,6 +33,11 @@
 
   base::android::ScopedJavaLocalRef<jobject> GetJavaObject();
 
+  // Methods called from Java
+  base::android::ScopedJavaLocalRef<jstring> GetTitle(JNIEnv* env,
+                                                      jobject obj) const;
+  void Stop(JNIEnv* env, jobject obj);
+
  private:
   WebContents* web_contents_;
   NavigationControllerAndroid navigation_controller_;
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index 879f9c8..bddc8de 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -321,6 +321,7 @@
       controller_(this, browser_context),
       render_view_host_delegate_view_(NULL),
       opener_(opener),
+      created_with_opener_(!!opener),
 #if defined(OS_WIN)
       accessible_parent_(NULL),
 #endif
@@ -1222,7 +1223,10 @@
   //      with control key set which isn't what the user wants
   if (delegate_ &&
       event.wheelTicksY &&
-      (event.modifiers & blink::WebInputEvent::ControlKey)) {
+      (event.modifiers & blink::WebInputEvent::ControlKey) &&
+      // Avoid adjusting the zoom in response to two-finger-scrolling touchpad
+      // gestures, which are regrettably easy to trigger accidentally.
+      !event.hasPreciseScrollingDeltas) {
     delegate_->ContentsZoomChange(event.wheelTicksY > 0);
     return true;
   }
@@ -1262,10 +1266,12 @@
     totalPinchGestureAmount_ += event.data.pinchUpdate.scale;
     if (totalPinchGestureAmount_ > zoomInThreshold) {
       currentPinchZoomStepDelta_++;
-      delegate_->ContentsZoomChange(true);
+      if (delegate_)
+        delegate_->ContentsZoomChange(true);
     } else if (totalPinchGestureAmount_ < zoomOutThreshold) {
       currentPinchZoomStepDelta_--;
-      delegate_->ContentsZoomChange(false);
+      if (delegate_)
+        delegate_->ContentsZoomChange(false);
     }
     return true;
   }
@@ -2371,6 +2377,12 @@
   }
 }
 
+bool WebContentsImpl::ShouldPreserveAbortedURLs() {
+  if (!delegate_)
+    return false;
+  return delegate_->ShouldPreserveAbortedURLs(this);
+}
+
 void WebContentsImpl::DidRedirectProvisionalLoad(
     RenderFrameHostImpl* render_frame_host,
     const GURL& validated_target_url) {
@@ -2684,8 +2696,9 @@
     int color_chooser_id,
     SkColor color,
     const std::vector<ColorSuggestion>& suggestions) {
-  ColorChooser* new_color_chooser =
-      delegate_->OpenColorChooser(this, color, suggestions);
+  ColorChooser* new_color_chooser = delegate_ ?
+      delegate_->OpenColorChooser(this, color, suggestions) :
+      NULL;
   if (!new_color_chooser)
     return;
   if (color_chooser_info_.get())
@@ -3116,6 +3129,12 @@
   return this;
 }
 
+bool WebContentsImpl::IsNeverVisible() {
+  if (!delegate_)
+    return false;
+  return delegate_->IsNeverVisible(this);
+}
+
 RenderViewHostDelegateView* WebContentsImpl::GetDelegateView() {
   return render_view_host_delegate_view_;
 }
@@ -3395,6 +3414,12 @@
 }
 
 void WebContentsImpl::DidAccessInitialDocument() {
+  // We may have left a failed browser-initiated navigation in the address bar
+  // to let the user edit it and try again.  Clear it now that content might
+  // show up underneath it.
+  if (!IsLoading() && controller_.GetPendingEntry())
+    controller_.DiscardPendingEntry();
+
   // Update the URL display.
   NotifyNavigationStateChanged(content::INVALIDATE_TYPE_URL);
 }
@@ -3567,7 +3592,7 @@
     // close. Otherwise, pretend the unload listeners have all fired and close
     // the tab.
     bool close = true;
-    if (is_during_beforeunload) {
+    if (is_during_beforeunload && delegate_) {
       delegate_->BeforeUnloadFired(this, true, &close);
     }
     if (close)
@@ -3733,7 +3758,8 @@
   if (!static_cast<RenderViewHostImpl*>(
           render_view_host)->CreateRenderView(base::string16(),
                                               opener_route_id,
-                                              max_page_id)) {
+                                              max_page_id,
+                                              created_with_opener_)) {
     return false;
   }
 
diff --git a/content/browser/web_contents/web_contents_impl.h b/content/browser/web_contents/web_contents_impl.h
index f3236c9..d00938e 100644
--- a/content/browser/web_contents/web_contents_impl.h
+++ b/content/browser/web_contents/web_contents_impl.h
@@ -340,6 +340,7 @@
                                       bool is_reload,
                                       IPC::Message* reply_msg) OVERRIDE;
   virtual WebContents* GetAsWebContents() OVERRIDE;
+  virtual bool IsNeverVisible() OVERRIDE;
 
   // RenderViewHostDelegate ----------------------------------------------------
   virtual RenderViewHostDelegateView* GetDelegateView() OVERRIDE;
@@ -489,6 +490,7 @@
       NavigationController::ReloadType reload_type) OVERRIDE;
   virtual void RequestOpenURL(RenderFrameHostImpl* render_frame_host,
                               const OpenURLParams& params) OVERRIDE;
+  virtual bool ShouldPreserveAbortedURLs() OVERRIDE;
 
   // RenderWidgetHostDelegate --------------------------------------------------
 
@@ -895,6 +897,10 @@
   // is closed.
   WebContentsImpl* opener_;
 
+  // True if this tab was opened by another tab. This is not unset if the opener
+  // is closed.
+  bool created_with_opener_;
+
 #if defined(OS_WIN)
   gfx::NativeViewAccessible accessible_parent_;
 #endif
diff --git a/content/browser/web_contents/web_contents_impl_unittest.cc b/content/browser/web_contents/web_contents_impl_unittest.cc
index 9cc1ac2..3d607c2 100644
--- a/content/browser/web_contents/web_contents_impl_unittest.cc
+++ b/content/browser/web_contents/web_contents_impl_unittest.cc
@@ -2430,22 +2430,21 @@
   contents()->SetDelegate(delegate.get());
 
   int modifiers = 0;
-  float dy = 1;
   // Verify that normal mouse wheel events do nothing to change the zoom level.
   blink::WebMouseWheelEvent event =
-      SyntheticWebMouseWheelEventBuilder::Build(0, dy, modifiers, false);
+      SyntheticWebMouseWheelEventBuilder::Build(0, 1, modifiers, false);
   EXPECT_FALSE(contents()->HandleWheelEvent(event));
   EXPECT_EQ(0, delegate->GetAndResetContentsZoomChangedCallCount());
 
   modifiers = WebInputEvent::ShiftKey | WebInputEvent::AltKey;
-  event = SyntheticWebMouseWheelEventBuilder::Build(0, dy, modifiers, false);
+  event = SyntheticWebMouseWheelEventBuilder::Build(0, 1, modifiers, false);
   EXPECT_FALSE(contents()->HandleWheelEvent(event));
   EXPECT_EQ(0, delegate->GetAndResetContentsZoomChangedCallCount());
 
   // But whenever the ctrl modifier is applied, they can increase/decrease zoom.
   // Except on MacOS where we never want to adjust zoom with mousewheel.
   modifiers = WebInputEvent::ControlKey;
-  event = SyntheticWebMouseWheelEventBuilder::Build(0, dy, modifiers, false);
+  event = SyntheticWebMouseWheelEventBuilder::Build(0, 1, modifiers, false);
   bool handled = contents()->HandleWheelEvent(event);
 #if defined(OS_MACOSX)
   EXPECT_FALSE(handled);
@@ -2458,8 +2457,7 @@
 
   modifiers = WebInputEvent::ControlKey | WebInputEvent::ShiftKey |
       WebInputEvent::AltKey;
-  dy = -5;
-  event = SyntheticWebMouseWheelEventBuilder::Build(2, dy, modifiers, false);
+  event = SyntheticWebMouseWheelEventBuilder::Build(2, -5, modifiers, false);
   handled = contents()->HandleWheelEvent(event);
 #if defined(OS_MACOSX)
   EXPECT_FALSE(handled);
@@ -2471,12 +2469,19 @@
 #endif
 
   // Unless there is no vertical movement.
-  dy = 0;
-  event = SyntheticWebMouseWheelEventBuilder::Build(2, dy, modifiers, false);
+  event = SyntheticWebMouseWheelEventBuilder::Build(2, 0, modifiers, false);
   EXPECT_FALSE(contents()->HandleWheelEvent(event));
   EXPECT_EQ(0, delegate->GetAndResetContentsZoomChangedCallCount());
 
-  // Ensure pointers to the delegate aren't kept beyond it's lifetime.
+  // Events containing precise scrolling deltas also shouldn't result in the
+  // zoom being adjusted, to avoid accidental adjustments caused by
+  // two-finger-scrolling on a touchpad.
+  modifiers = WebInputEvent::ControlKey;
+  event = SyntheticWebMouseWheelEventBuilder::Build(0, 5, modifiers, true);
+  EXPECT_FALSE(contents()->HandleWheelEvent(event));
+  EXPECT_EQ(0, delegate->GetAndResetContentsZoomChangedCallCount());
+
+  // Ensure pointers to the delegate aren't kept beyond its lifetime.
   contents()->SetDelegate(NULL);
 }
 
diff --git a/content/browser/web_contents/web_contents_view_android.cc b/content/browser/web_contents/web_contents_view_android.cc
index 70a9fcf..2c177a8 100644
--- a/content/browser/web_contents/web_contents_view_android.cc
+++ b/content/browser/web_contents/web_contents_view_android.cc
@@ -67,9 +67,8 @@
 }
 
 void WebContentsViewAndroid::GetContainerBounds(gfx::Rect* out) const {
-  RenderWidgetHostView* rwhv = web_contents_->GetRenderWidgetHostView();
-  if (rwhv)
-    *out = rwhv->GetViewBounds();
+  *out = content_view_core_ ? gfx::Rect(content_view_core_->GetViewSize())
+                            : gfx::Rect();
 }
 
 void WebContentsViewAndroid::SetPageTitle(const base::string16& title) {
@@ -122,11 +121,10 @@
 }
 
 gfx::Rect WebContentsViewAndroid::GetViewBounds() const {
-  RenderWidgetHostView* rwhv = web_contents_->GetRenderWidgetHostView();
-  if (rwhv)
-    return rwhv->GetViewBounds();
-  else
-    return gfx::Rect();
+  if (content_view_core_)
+    return gfx::Rect(content_view_core_->GetViewSize());
+
+  return gfx::Rect();
 }
 
 void WebContentsViewAndroid::CreateView(
diff --git a/content/browser/web_contents/web_contents_view_aura.cc b/content/browser/web_contents/web_contents_view_aura.cc
index 9062d5d..2d77af7 100644
--- a/content/browser/web_contents/web_contents_view_aura.cc
+++ b/content/browser/web_contents/web_contents_view_aura.cc
@@ -294,6 +294,54 @@
 }
 #endif  // defined(OS_WIN)
 
+// Returns the CustomFormat to store file system files.
+const ui::OSExchangeData::CustomFormat& GetFileSystemFileCustomFormat() {
+  static const char kFormatString[] = "chromium/x-file-system-files";
+  CR_DEFINE_STATIC_LOCAL(ui::OSExchangeData::CustomFormat,
+                         format,
+                         (ui::Clipboard::GetFormatType(kFormatString)));
+  return format;
+}
+
+// Writes file system files to the pickle.
+void WriteFileSystemFilesToPickle(
+    const std::vector<DropData::FileSystemFileInfo>& file_system_files,
+    Pickle* pickle) {
+  pickle->WriteUInt64(file_system_files.size());
+  for (size_t i = 0; i < file_system_files.size(); ++i) {
+    pickle->WriteString(file_system_files[i].url.spec());
+    pickle->WriteInt64(file_system_files[i].size);
+  }
+}
+
+// Reads file system files from the pickle.
+bool ReadFileSystemFilesFromPickle(
+    const Pickle& pickle,
+    std::vector<DropData::FileSystemFileInfo>* file_system_files) {
+  PickleIterator iter(pickle);
+
+  uint64 num_files = 0;
+  if (!pickle.ReadUInt64(&iter, &num_files))
+    return false;
+  file_system_files->resize(num_files);
+
+  for (uint64 i = 0; i < num_files; ++i) {
+    std::string url_string;
+    int64 size = 0;
+    if (!pickle.ReadString(&iter, &url_string) ||
+        !pickle.ReadInt64(&iter, &size))
+      return false;
+
+    GURL url(url_string);
+    if (!url.is_valid())
+      return false;
+
+    (*file_system_files)[i].url = url;
+    (*file_system_files)[i].size = size;
+  }
+  return true;
+}
+
 // Utility to fill a ui::OSExchangeDataProvider object from DropData.
 void PrepareDragData(const DropData& drop_data,
                      ui::OSExchangeData::Provider* provider,
@@ -320,6 +368,11 @@
     provider->SetHtml(drop_data.html.string(), drop_data.html_base_url);
   if (!drop_data.filenames.empty())
     provider->SetFilenames(drop_data.filenames);
+  if (!drop_data.file_system_files.empty()) {
+    Pickle pickle;
+    WriteFileSystemFilesToPickle(drop_data.file_system_files, &pickle);
+    provider->SetPickledData(GetFileSystemFileCustomFormat(), pickle);
+  }
   if (!drop_data.custom_data.empty()) {
     Pickle pickle;
     ui::WriteCustomDataToPickle(drop_data.custom_data, &pickle);
@@ -357,6 +410,11 @@
   data.GetFilenames(&drop_data->filenames);
 
   Pickle pickle;
+  std::vector<DropData::FileSystemFileInfo> file_system_files;
+  if (data.GetPickledData(GetFileSystemFileCustomFormat(), &pickle) &&
+      ReadFileSystemFilesFromPickle(pickle, &file_system_files))
+    drop_data->file_system_files = file_system_files;
+
   if (data.GetPickledData(ui::Clipboard::GetWebCustomDataFormatType(), &pickle))
     ui::ReadCustomDataIntoMap(
         pickle.data(), pickle.size(), &drop_data->custom_data);
diff --git a/content/browser/webkit_browsertest.cc b/content/browser/webkit_browsertest.cc
index d4b6015..4202eec 100644
--- a/content/browser/webkit_browsertest.cc
+++ b/content/browser/webkit_browsertest.cc
@@ -76,19 +76,4 @@
   EXPECT_FALSE(shell()->web_contents()->IsCrashed());
 }
 
-// This is a browser test because DumpRenderTree doesn't run nested message
-// loops. The failure case was that a nested message triggered from an element
-// that has signalled an error but had an open request would receive a body for
-// the request and crash/fail an assertion.
-const char kErrorBodyNoCrash[] =
-    "files/error-body-no-crash.html";
-IN_PROC_BROWSER_TEST_F(WebKitBrowserTest, ErrorBodyNoCrash) {
-  ASSERT_TRUE(test_server()->Start());
-  GURL url = test_server()->GetURL(kErrorBodyNoCrash);
-
-  NavigateToURL(shell(), url);
-
-  EXPECT_FALSE(shell()->web_contents()->IsCrashed());
-}
-
 }  // namespace content
diff --git a/content/browser/webui/web_ui_mojo_browsertest.cc b/content/browser/webui/web_ui_mojo_browsertest.cc
index 22c2777..5a1fb3a 100644
--- a/content/browser/webui/web_ui_mojo_browsertest.cc
+++ b/content/browser/webui/web_ui_mojo_browsertest.cc
@@ -9,7 +9,6 @@
 #include "base/run_loop.h"
 #include "base/strings/string_util.h"
 #include "content/browser/webui/web_ui_controller_factory_registry.h"
-#include "content/common/mojo/mojo_channel_init.h"
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/render_view_host.h"
 #include "content/public/browser/web_contents.h"
@@ -31,7 +30,22 @@
 
 bool got_message = false;
 int message_count = 0;
-const int kExpectedMessageCount = 1000;
+
+const int kExpectedMessageCount = 100;
+
+// Negative numbers with different values in each byte, the last of
+// which can survive promotion to double and back.
+const int8  kExpectedInt8Value = -65;
+const int16 kExpectedInt16Value = -16961;
+const int32 kExpectedInt32Value = -1145258561;
+const int64 kExpectedInt64Value = -77263311946305LL;
+
+// Positive numbers with different values in each byte, the last of
+// which can survive promotion to double and back.
+const uint8  kExpectedUInt8Value = 65;
+const uint16 kExpectedUInt16Value = 16961;
+const uint32 kExpectedUInt32Value = 1145258561;
+const uint64 kExpectedUInt64Value = 77263311946305LL;
 
 // Returns the path to the mojom js bindings file.
 base::FilePath GetFilePathForJSResource(const std::string& path) {
@@ -59,7 +73,7 @@
 
   std::string contents;
   CHECK(base::ReadFileToString(GetFilePathForJSResource(id), &contents,
-                               std::string::npos));
+                               std::string::npos)) << id;
   base::RefCountedString* ref_contents = new base::RefCountedString;
   ref_contents->data() = contents;
   callback.Run(ref_contents);
@@ -122,8 +136,14 @@
       : BrowserTargetImpl(handle, run_loop) {
     mojo::AllocationScope scope;
     mojo::EchoArgs::Builder builder;
-    builder.set_x(1900);
-    builder.set_y(42);
+    builder.set_si64(kExpectedInt64Value);
+    builder.set_si32(kExpectedInt32Value);
+    builder.set_si16(kExpectedInt16Value);
+    builder.set_si8(kExpectedInt8Value);
+    builder.set_ui64(kExpectedUInt64Value);
+    builder.set_ui32(kExpectedUInt32Value);
+    builder.set_ui16(kExpectedUInt16Value);
+    builder.set_ui8(kExpectedUInt8Value);
     builder.set_name("coming");
     client_->Echo(builder.Finish());
   }
@@ -134,12 +154,20 @@
   // Check the response, and quit the RunLoop after N calls.
   virtual void EchoResponse(const mojo::EchoArgs& arg1,
                             const mojo::EchoArgs& arg2) OVERRIDE {
-    EXPECT_EQ(1900, arg1.x());
-    EXPECT_EQ(42, arg1.y());
+    EXPECT_EQ(kExpectedInt64Value, arg1.si64());
+    EXPECT_EQ(kExpectedInt32Value, arg1.si32());
+    EXPECT_EQ(kExpectedInt16Value, arg1.si16());
+    EXPECT_EQ(kExpectedInt8Value, arg1.si8());
+    EXPECT_EQ(kExpectedUInt64Value, arg1.ui64());
+    EXPECT_EQ(kExpectedUInt32Value, arg1.ui32());
+    EXPECT_EQ(kExpectedUInt16Value, arg1.ui16());
+    EXPECT_EQ(kExpectedUInt8Value, arg1.ui8());
     EXPECT_EQ(std::string("coming"), arg1.name().To<std::string>());
 
-    EXPECT_EQ(-1, arg2.x());
-    EXPECT_EQ(-1, arg2.y());
+    EXPECT_EQ(-1, arg2.si64());
+    EXPECT_EQ(-1, arg2.si32());
+    EXPECT_EQ(-1, arg2.si16());
+    EXPECT_EQ(-1, arg2.si8());
     EXPECT_EQ(std::string("going"), arg2.name().To<std::string>());
 
     message_count += 1;
diff --git a/content/browser/worker_host/test/worker_browsertest.cc b/content/browser/worker_host/test/worker_browsertest.cc
index fd352eb..861977c 100644
--- a/content/browser/worker_host/test/worker_browsertest.cc
+++ b/content/browser/worker_host/test/worker_browsertest.cc
@@ -141,13 +141,16 @@
   NavigateAndWaitForAuth(url);
 }
 
-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
+#if defined(OS_LINUX)
 // This test is flaky inside the Linux SUID sandbox.
 // http://crbug.com/130116
 IN_PROC_BROWSER_TEST_F(WorkerTest, DISABLED_LimitPerPage) {
 #else
 IN_PROC_BROWSER_TEST_F(WorkerTest, LimitPerPage) {
 #endif
+  // There is no limitation of SharedWorker if EmbeddedSharedWorker is enabled.
+  if (WorkerService::EmbeddedSharedWorkerEnabled())
+    return;
   int max_workers_per_tab = WorkerServiceImpl::kMaxWorkersPerFrameWhenSeparate;
   std::string query = base::StringPrintf("?count=%d", max_workers_per_tab + 1);
 
@@ -157,7 +160,7 @@
 }
 
 
-#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_MACOSX)
+#if defined(OS_LINUX) || defined(OS_MACOSX)
 // This test is flaky inside the Linux SUID sandbox: http://crbug.com/130116
 // Also flaky on Mac: http://crbug.com/295193
 IN_PROC_BROWSER_TEST_F(WorkerTest, DISABLED_LimitTotal) {
@@ -165,6 +168,9 @@
 // http://crbug.com/36800
 IN_PROC_BROWSER_TEST_F(WorkerTest, LimitTotal) {
 #endif
+  // There is no limitation of SharedWorker if EmbeddedSharedWorker is enabled.
+  if (WorkerService::EmbeddedSharedWorkerEnabled())
+    return;
   if (base::SysInfo::AmountOfPhysicalMemoryMB() < 8192) {
     VLOG(0) << "WorkerTest.LimitTotal not running because it needs 8 GB RAM.";
     return;
diff --git a/content/browser/worker_host/worker_process_host.cc b/content/browser/worker_host/worker_process_host.cc
index d8f7afc..88bd70a 100644
--- a/content/browser/worker_host/worker_process_host.cc
+++ b/content/browser/worker_host/worker_process_host.cc
@@ -227,18 +227,6 @@
       debugging_child = true;
     }
   }
-
-  if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kDebugChildren)) {
-    // Look to pass-on the kDebugOnStart flag.
-    std::string value = CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
-        switches::kDebugChildren);
-    if (value.empty() || value == switches::kWorkerProcess) {
-      // launches a new xterm, and runs the worker process in gdb, reading
-      // optional commands from gdb_chrome file in the working directory.
-      cmd_line->PrependWrapper("xterm -e gdb -x gdb_chrome --args");
-      debugging_child = true;
-    }
-  }
 #endif
 
   process_->Launch(
diff --git a/content/browser/worker_host/worker_service_impl.cc b/content/browser/worker_host/worker_service_impl.cc
index 5064544..4636777 100644
--- a/content/browser/worker_host/worker_service_impl.cc
+++ b/content/browser/worker_host/worker_service_impl.cc
@@ -236,9 +236,9 @@
 }
 
 bool WorkerService::EmbeddedSharedWorkerEnabled() {
-  static bool enabled = CommandLine::ForCurrentProcess()->HasSwitch(
-      switches::kEnableEmbeddedSharedWorker);
-  return enabled;
+  static bool disabled = CommandLine::ForCurrentProcess()->HasSwitch(
+      switches::kDisableEmbeddedSharedWorker);
+  return !disabled;
 }
 
 WorkerServiceImpl* WorkerServiceImpl::GetInstance() {
diff --git a/content/browser/zygote_host/zygote_host_impl_linux.cc b/content/browser/zygote_host/zygote_host_impl_linux.cc
index 20cd39f..0da7da7 100644
--- a/content/browser/zygote_host/zygote_host_impl_linux.cc
+++ b/content/browser/zygote_host/zygote_host_impl_linux.cc
@@ -82,17 +82,11 @@
   cmd_line.AppendSwitchASCII(switches::kProcessType, switches::kZygoteProcess);
 
   int fds[2];
-#if defined(OS_FREEBSD) || defined(OS_OPENBSD)
-  // The BSDs often don't support SOCK_SEQPACKET yet, so fall back to
-  // SOCK_DGRAM if necessary.
-  if (socketpair(PF_UNIX, SOCK_SEQPACKET, 0, fds) != 0)
-    CHECK(socketpair(PF_UNIX, SOCK_DGRAM, 0, fds) == 0);
-#else
-  CHECK(socketpair(PF_UNIX, SOCK_SEQPACKET, 0, fds) == 0);
-#endif
+  CHECK(socketpair(AF_UNIX, SOCK_SEQPACKET, 0, fds) == 0);
   base::FileHandleMappingVector fds_to_map;
   fds_to_map.push_back(std::make_pair(fds[1], kZygoteSocketPairFd));
 
+  base::LaunchOptions options;
   const CommandLine& browser_command_line = *CommandLine::ForCurrentProcess();
   if (browser_command_line.HasSwitch(switches::kZygoteCmdPrefix)) {
     cmd_line.PrependWrapper(
@@ -127,13 +121,6 @@
   // A non empty sandbox_cmd means we want a SUID sandbox.
   using_suid_sandbox_ = !sandbox_cmd.empty();
 
-  if (using_suid_sandbox_) {
-    scoped_ptr<sandbox::SetuidSandboxClient>
-        sandbox_client(sandbox::SetuidSandboxClient::Create());
-    sandbox_client->PrependWrapper(&cmd_line);
-    sandbox_client->SetupLaunchEnvironment();
-  }
-
   // Start up the sandbox host process and get the file descriptor for the
   // renderers to talk to it.
   const int sfd = RenderSandboxHostLinux::GetInstance()->GetRendererSocket();
@@ -141,15 +128,19 @@
 
   int dummy_fd = -1;
   if (using_suid_sandbox_) {
-    dummy_fd = socket(PF_UNIX, SOCK_DGRAM, 0);
+    scoped_ptr<sandbox::SetuidSandboxClient>
+        sandbox_client(sandbox::SetuidSandboxClient::Create());
+    sandbox_client->PrependWrapper(&cmd_line, &options);
+    sandbox_client->SetupLaunchEnvironment();
+
+    CHECK_EQ(kZygoteIdFd, sandbox_client->GetUniqueToChildFileDescriptor());
+    dummy_fd = socket(AF_UNIX, SOCK_DGRAM, 0);
     CHECK(dummy_fd >= 0);
     fds_to_map.push_back(std::make_pair(dummy_fd, kZygoteIdFd));
   }
 
   base::ProcessHandle process = -1;
-  base::LaunchOptions options;
   options.fds_to_remap = &fds_to_map;
-  options.allow_new_privs = using_suid_sandbox_;  // Don't PR_SET_NO_NEW_PRIVS.
   base::LaunchProcess(cmd_line.argv(), options, &process);
   CHECK(process != -1) << "Failed to launch zygote process";
 
@@ -163,25 +154,28 @@
     char buf[kExpectedLength];
     const ssize_t len = UnixDomainSocket::RecvMsg(fds[0], buf, sizeof(buf),
                                                   &fds_vec);
-    CHECK(len == kExpectedLength) << "Incorrect zygote magic length";
-    CHECK(0 == strcmp(buf, kZygoteHelloMessage))
-        << "Incorrect zygote hello";
+    CHECK_EQ(kExpectedLength, len) << "Incorrect zygote magic length";
+    CHECK(0 == strcmp(buf, kZygoteHelloMessage)) << "Incorrect zygote hello";
 
     std::string inode_output;
     ino_t inode = 0;
     // Figure out the inode for |dummy_fd|, close |dummy_fd| on our end,
     // and find the zygote process holding |dummy_fd|.
-    if (base::FileDescriptorGetInode(&inode, dummy_fd)) {
-      close(dummy_fd);
-      std::vector<std::string> get_inode_cmdline;
-      get_inode_cmdline.push_back(sandbox_binary_);
-      get_inode_cmdline.push_back(base::kFindInodeSwitch);
-      get_inode_cmdline.push_back(base::Int64ToString(inode));
-      CommandLine get_inode_cmd(get_inode_cmdline);
-      if (base::GetAppOutput(get_inode_cmd, &inode_output)) {
-        base::StringToInt(inode_output, &pid_);
-      }
-    }
+    CHECK(base::FileDescriptorGetInode(&inode, dummy_fd))
+        << "Cannot get inode for dummy_fd " << dummy_fd;
+    close(dummy_fd);
+
+    std::vector<std::string> get_inode_cmdline;
+    get_inode_cmdline.push_back(sandbox_binary_);
+    get_inode_cmdline.push_back(base::kFindInodeSwitch);
+    get_inode_cmdline.push_back(base::Int64ToString(inode));
+    CommandLine get_inode_cmd(get_inode_cmdline);
+    CHECK(base::GetAppOutput(get_inode_cmd, &inode_output))
+        << "Find inode command failed for inode " << inode;
+
+    base::TrimWhitespaceASCII(inode_output, base::TRIM_ALL, &inode_output);
+    CHECK(base::StringToInt(inode_output, &pid_))
+        << "Invalid find inode output: " << inode_output;
     CHECK(pid_ > 0) << "Did not find zygote process (using sandbox binary "
         << sandbox_binary_ << ")";
 
diff --git a/content/child/blink_platform_impl.cc b/content/child/blink_platform_impl.cc
index 237d2c8..a86c0db 100644
--- a/content/child/blink_platform_impl.cc
+++ b/content/child/blink_platform_impl.cc
@@ -43,6 +43,7 @@
 #include "net/base/data_url.h"
 #include "net/base/mime_util.h"
 #include "net/base/net_errors.h"
+#include "third_party/WebKit/public/platform/WebConvertableToTraceFormat.h"
 #include "third_party/WebKit/public/platform/WebData.h"
 #include "third_party/WebKit/public/platform/WebString.h"
 #include "third_party/WebKit/public/platform/WebWaitableEvent.h"
@@ -137,6 +138,22 @@
   base::Lock lock_;
 };
 
+class ConvertableToTraceFormatWrapper
+    : public base::debug::ConvertableToTraceFormat {
+ public:
+  explicit ConvertableToTraceFormatWrapper(
+      const blink::WebConvertableToTraceFormat& convertable)
+      : convertable_(convertable) {}
+  virtual void AppendAsTraceFormat(std::string* out) const OVERRIDE {
+    *out += convertable_.asTraceFormat().utf8();
+  }
+
+ private:
+  virtual ~ConvertableToTraceFormatWrapper() {}
+
+  blink::WebConvertableToTraceFormat convertable_;
+};
+
 }  // namespace
 
 static int ToMessageID(WebLocalizedString::Name name) {
@@ -533,6 +550,44 @@
   return result;
 }
 
+blink::Platform::TraceEventHandle BlinkPlatformImpl::addTraceEvent(
+    char phase,
+    const unsigned char* category_group_enabled,
+    const char* name,
+    unsigned long long id,
+    int num_args,
+    const char** arg_names,
+    const unsigned char* arg_types,
+    const unsigned long long* arg_values,
+    const blink::WebConvertableToTraceFormat* convertable_values,
+    unsigned char flags) {
+  scoped_refptr<base::debug::ConvertableToTraceFormat> convertable_wrappers[2];
+  if (convertable_values) {
+    size_t size = std::min(static_cast<size_t>(num_args),
+                           arraysize(convertable_wrappers));
+    for (size_t i = 0; i < size; ++i) {
+      if (arg_types[i] == TRACE_VALUE_TYPE_CONVERTABLE) {
+        convertable_wrappers[i] =
+            new ConvertableToTraceFormatWrapper(convertable_values[i]);
+      }
+    }
+  }
+  base::debug::TraceEventHandle handle =
+      TRACE_EVENT_API_ADD_TRACE_EVENT(phase,
+                                      category_group_enabled,
+                                      name,
+                                      id,
+                                      num_args,
+                                      arg_names,
+                                      arg_types,
+                                      arg_values,
+                                      convertable_wrappers,
+                                      flags);
+  blink::Platform::TraceEventHandle result;
+  memcpy(&result, &handle, sizeof(result));
+  return result;
+}
+
 void BlinkPlatformImpl::updateTraceEventDuration(
     const unsigned char* category_group_enabled,
     const char* name,
@@ -701,9 +756,6 @@
   { "generatePassword", IDR_PASSWORD_GENERATION_ICON, ui::SCALE_FACTOR_100P },
   { "generatePasswordHover",
     IDR_PASSWORD_GENERATION_ICON_HOVER, ui::SCALE_FACTOR_100P },
-  // TODO(dgozman): remove this after moving to content-based touch emulation.
-  { "syntheticTouchCursor",
-    IDR_SYNTHETIC_TOUCH_CURSOR, ui::SCALE_FACTOR_100P },
 };
 
 }  // namespace
diff --git a/content/child/blink_platform_impl.h b/content/child/blink_platform_impl.h
index 5290a0d..863d9f7 100644
--- a/content/child/blink_platform_impl.h
+++ b/content/child/blink_platform_impl.h
@@ -106,6 +106,17 @@
       const unsigned char* arg_types,
       const unsigned long long* arg_values,
       unsigned char flags);
+  virtual TraceEventHandle addTraceEvent(
+      char phase,
+      const unsigned char* category_group_enabled,
+      const char* name,
+      unsigned long long id,
+      int num_args,
+      const char** arg_names,
+      const unsigned char* arg_types,
+      const unsigned long long* arg_values,
+      const blink::WebConvertableToTraceFormat* convertable_values,
+      unsigned char flags);
   virtual void updateTraceEventDuration(
       const unsigned char* category_group_enabled,
       const char* name,
diff --git a/content/child/child_process.cc b/content/child/child_process.cc
index 94341d7..42eff93 100644
--- a/content/child/child_process.cc
+++ b/content/child/child_process.cc
@@ -69,6 +69,7 @@
   }
 
   g_lazy_tls.Pointer()->Set(NULL);
+  io_thread_.Stop();
 }
 
 ChildThread* ChildProcess::main_thread() {
diff --git a/content/child/child_process.h b/content/child/child_process.h
index 7904067..af2d913 100644
--- a/content/child/child_process.h
+++ b/content/child/child_process.h
@@ -16,6 +16,18 @@
 
 // Base class for child processes of the browser process (i.e. renderer and
 // plugin host). This is a singleton object for each child process.
+//
+// During process shutdown the following sequence of actions happens in
+// order.
+//
+// 1. ChildProcess::~ChildProcess() is called.
+//   2. Shutdown event is fired. Background threads should stop.
+//   3. ChildThread::Shutdown() is called. ChildThread is also deleted.
+//   4. IO thread is stopped.
+// 5. Main message loop exits.
+// 6. Child process is now fully stopped.
+//
+// Note: IO thread outlives the ChildThread object.
 class CONTENT_EXPORT ChildProcess {
  public:
   // Child processes should have an object that derives from this class.
diff --git a/content/child/npapi/plugin_host.cc b/content/child/npapi/plugin_host.cc
index 6a9a0d1..c48819d 100644
--- a/content/child/npapi/plugin_host.cc
+++ b/content/child/npapi/plugin_host.cc
@@ -6,6 +6,7 @@
 
 #include "base/command_line.h"
 #include "base/file_util.h"
+#include "base/lazy_instance.h"
 #include "base/logging.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/strings/string_piece.h"
@@ -599,7 +600,13 @@
         "Gecko/20061103 Firefox/2.0a1";
 #endif
 
-  return content::GetContentClient()->GetUserAgent().c_str();
+  // Provide a consistent user-agent string with memory that lasts
+  // long enough for the caller to read it.
+  static base::LazyInstance<std::string>::Leaky leaky_user_agent =
+    LAZY_INSTANCE_INITIALIZER;
+  if (leaky_user_agent == NULL)
+    leaky_user_agent.Get() = content::GetContentClient()->GetUserAgent();
+  return leaky_user_agent.Get().c_str();
 }
 
 void NPN_Status(NPP id, const char* message) {
diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc
index fef86ba..fa6346c 100644
--- a/content/child/runtime_features.cc
+++ b/content/child/runtime_features.cc
@@ -25,6 +25,7 @@
   if (!media::MediaCodecBridge::IsAvailable()) {
     WebRuntimeFeatures::enableMediaSource(false);
     WebRuntimeFeatures::enablePrefixedEncryptedMedia(false);
+    WebRuntimeFeatures::enableEncryptedMedia(false);
   }
   // WebAudio is enabled by default on ARM and X86 and only when the
   // MediaCodec API is available.
diff --git a/content/child/service_worker/service_worker_dispatcher.cc b/content/child/service_worker/service_worker_dispatcher.cc
index b58aafe..100693b 100644
--- a/content/child/service_worker/service_worker_dispatcher.cc
+++ b/content/child/service_worker/service_worker_dispatcher.cc
@@ -39,6 +39,13 @@
 }
 
 ServiceWorkerDispatcher::~ServiceWorkerDispatcher() {
+  for (ScriptClientMap::iterator it = script_clients_.begin();
+       it != script_clients_.end();
+       ++it) {
+    Send(new ServiceWorkerHostMsg_RemoveScriptClient(
+        CurrentWorkerId(), it->first));
+  }
+
   g_dispatcher_tls.Pointer()->Set(kHasBeenDeleted);
 }
 
@@ -52,6 +59,8 @@
                         OnRegistrationError)
     IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerStateChanged,
                         OnServiceWorkerStateChanged)
+    IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SetCurrentServiceWorker,
+                        OnSetCurrentServiceWorker)
     IPC_MESSAGE_UNHANDLED(handled = false)
   IPC_END_MESSAGE_MAP()
   DCHECK(handled) << "Unhandled message:" << msg.type();
@@ -183,6 +192,7 @@
 }
 
 void ServiceWorkerDispatcher::OnServiceWorkerStateChanged(
+    int thread_id,
     int handle_id,
     blink::WebServiceWorkerState state) {
   ServiceWorkerMap::iterator found = service_workers_.find(handle_id);
@@ -191,6 +201,23 @@
   found->second->SetState(state);
 }
 
+void ServiceWorkerDispatcher::OnSetCurrentServiceWorker(
+    int thread_id,
+    int provider_id,
+    const ServiceWorkerObjectInfo& info) {
+  scoped_ptr<WebServiceWorkerImpl> worker(
+      new WebServiceWorkerImpl(info, thread_safe_sender_));
+  ScriptClientMap::iterator found = script_clients_.find(provider_id);
+  if (found == script_clients_.end()) {
+    // Note that |worker|'s destructor sends a ServiceWorkerObjectDestroyed
+    // message so the browser-side can clean up the ServiceWorkerHandle it
+    // created when sending us this message.
+    return;
+  }
+  // TODO(falken): Call client->setCurrentServiceWorker(worker) when the Blink
+  // change to add that function rolls in.
+}
+
 void ServiceWorkerDispatcher::AddServiceWorker(
     int handle_id, WebServiceWorkerImpl* worker) {
   DCHECK(!ContainsKey(service_workers_, handle_id));
diff --git a/content/child/service_worker/service_worker_dispatcher.h b/content/child/service_worker/service_worker_dispatcher.h
index 775cdc0..c1d8a75 100644
--- a/content/child/service_worker/service_worker_dispatcher.h
+++ b/content/child/service_worker/service_worker_dispatcher.h
@@ -90,8 +90,12 @@
                            int request_id,
                            blink::WebServiceWorkerError::ErrorType error_type,
                            const base::string16& message);
-  void OnServiceWorkerStateChanged(int handle_id,
+  void OnServiceWorkerStateChanged(int thread_id,
+                                   int handle_id,
                                    blink::WebServiceWorkerState state);
+  void OnSetCurrentServiceWorker(int thread_id,
+                                 int provider_id,
+                                 const ServiceWorkerObjectInfo& info);
 
   // Keeps map from handle_id to ServiceWorker object.
   void AddServiceWorker(int handle_id, WebServiceWorkerImpl* worker);
diff --git a/content/child/service_worker/service_worker_message_filter.cc b/content/child/service_worker/service_worker_message_filter.cc
index 6a89a6e..8ba89df 100644
--- a/content/child/service_worker/service_worker_message_filter.cc
+++ b/content/child/service_worker/service_worker_message_filter.cc
@@ -13,6 +13,21 @@
 
 namespace content {
 
+namespace {
+
+// Sends a ServiceWorkerObjectDestroyed message to the browser so it can delete
+// the ServiceWorker handle.
+void SendServiceWorkerObjectDestroyed(
+    scoped_refptr<ThreadSafeSender> sender,
+    int handle_id) {
+  if (handle_id == kInvalidServiceWorkerHandleId)
+    return;
+  sender->Send(
+      new ServiceWorkerHostMsg_ServiceWorkerObjectDestroyed(handle_id));
+}
+
+}  // namespace
+
 ServiceWorkerMessageFilter::ServiceWorkerMessageFilter(ThreadSafeSender* sender)
     : main_thread_loop_proxy_(base::MessageLoopProxy::current()),
       thread_safe_sender_(sender) {}
@@ -46,17 +61,23 @@
   IPC_BEGIN_MESSAGE_MAP(ServiceWorkerMessageFilter, msg)
     IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerRegistered,
                         OnStaleRegistered)
+    IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SetCurrentServiceWorker,
+                        OnStaleSetCurrentServiceWorker)
   IPC_END_MESSAGE_MAP()
 }
 
 void ServiceWorkerMessageFilter::OnStaleRegistered(
-    int32 thread_id,
-    int32 request_id,
+    int thread_id,
+    int request_id,
     const ServiceWorkerObjectInfo& info) {
-  // Inform the browser that the context seems to have been destroyed
-  // (so that it can delete the corresponding ServiceWorker handle).
-  thread_safe_sender_->Send(
-      new ServiceWorkerHostMsg_ServiceWorkerObjectDestroyed(info.handle_id));
+  SendServiceWorkerObjectDestroyed(thread_safe_sender_, info.handle_id);
+}
+
+void ServiceWorkerMessageFilter::OnStaleSetCurrentServiceWorker(
+    int thread_id,
+    int provider_id,
+    const ServiceWorkerObjectInfo& info) {
+  SendServiceWorkerObjectDestroyed(thread_safe_sender_, info.handle_id);
 }
 
 }  // namespace content
diff --git a/content/child/service_worker/service_worker_message_filter.h b/content/child/service_worker/service_worker_message_filter.h
index 8d6fbf0..fcd39be 100644
--- a/content/child/service_worker/service_worker_message_filter.h
+++ b/content/child/service_worker/service_worker_message_filter.h
@@ -33,9 +33,12 @@
   virtual void OnStaleMessageReceived(const IPC::Message& msg) OVERRIDE;
 
   // Message handlers for stale messages.
-  void OnStaleRegistered(int32 thread_id,
-                         int32 request_id,
+  void OnStaleRegistered(int thread_id,
+                         int request_id,
                          const ServiceWorkerObjectInfo& info);
+  void OnStaleSetCurrentServiceWorker(int thread_id,
+                                      int provider_id,
+                                      const ServiceWorkerObjectInfo& info);
 
   scoped_refptr<base::MessageLoopProxy> main_thread_loop_proxy_;
   scoped_refptr<ThreadSafeSender> thread_safe_sender_;
diff --git a/content/child/service_worker/web_service_worker_impl.cc b/content/child/service_worker/web_service_worker_impl.cc
index aebc099..626aa0b 100644
--- a/content/child/service_worker/web_service_worker_impl.cc
+++ b/content/child/service_worker/web_service_worker_impl.cc
@@ -34,6 +34,8 @@
 }
 
 WebServiceWorkerImpl::~WebServiceWorkerImpl() {
+  if (handle_id_ == kInvalidServiceWorkerHandleId)
+    return;
   thread_safe_sender_->Send(
       new ServiceWorkerHostMsg_ServiceWorkerObjectDestroyed(handle_id_));
   ServiceWorkerDispatcher* dispatcher =
diff --git a/content/child/service_worker/web_service_worker_provider_impl.cc b/content/child/service_worker/web_service_worker_provider_impl.cc
index e1bcfb5..99f9738 100644
--- a/content/child/service_worker/web_service_worker_provider_impl.cc
+++ b/content/child/service_worker/web_service_worker_provider_impl.cc
@@ -24,7 +24,7 @@
 
 WebServiceWorkerProviderImpl::~WebServiceWorkerProviderImpl() {
   // Make sure the script client is removed.
-  GetDispatcher()->RemoveScriptClient(provider_id_);
+  RemoveScriptClient();
 }
 
 void WebServiceWorkerProviderImpl::setClient(
@@ -32,7 +32,7 @@
   if (client)
     GetDispatcher()->AddScriptClient(provider_id_, client);
   else
-    GetDispatcher()->RemoveScriptClient(provider_id_);
+    RemoveScriptClient();
 }
 
 void WebServiceWorkerProviderImpl::registerServiceWorker(
@@ -50,6 +50,15 @@
       provider_id_, pattern, callbacks);
 }
 
+void WebServiceWorkerProviderImpl::RemoveScriptClient() {
+  // Remove the script client, but only if the dispatcher is still there.
+  // (For cleanup path we don't need to bother creating a new dispatcher)
+  ServiceWorkerDispatcher* dispatcher =
+      ServiceWorkerDispatcher::GetThreadSpecificInstance();
+  if (dispatcher)
+    dispatcher->RemoveScriptClient(provider_id_);
+}
+
 ServiceWorkerDispatcher* WebServiceWorkerProviderImpl::GetDispatcher() {
   return ServiceWorkerDispatcher::GetOrCreateThreadSpecificInstance(
       thread_safe_sender_);
diff --git a/content/child/service_worker/web_service_worker_provider_impl.h b/content/child/service_worker/web_service_worker_provider_impl.h
index d0a641f..69aeed6 100644
--- a/content/child/service_worker/web_service_worker_provider_impl.h
+++ b/content/child/service_worker/web_service_worker_provider_impl.h
@@ -37,6 +37,7 @@
                                        WebServiceWorkerCallbacks*);
 
  private:
+  void RemoveScriptClient();
   ServiceWorkerDispatcher* GetDispatcher();
 
   scoped_refptr<ThreadSafeSender> thread_safe_sender_;
diff --git a/content/child/webmessageportchannel_impl.cc b/content/child/webmessageportchannel_impl.cc
index e0fe126..6e40b1c 100644
--- a/content/child/webmessageportchannel_impl.cc
+++ b/content/child/webmessageportchannel_impl.cc
@@ -109,10 +109,6 @@
   child_thread_loop_->ReleaseSoon(FROM_HERE, this);
 }
 
-void WebMessagePortChannelImpl::entangle(WebMessagePortChannel* channel) {
-  NOTREACHED();  // DEPRECATED
-}
-
 void WebMessagePortChannelImpl::postMessage(
     const WebString& message,
     WebMessagePortChannelArray* channels) {
diff --git a/content/child/webmessageportchannel_impl.h b/content/child/webmessageportchannel_impl.h
index 3098d62..01cd927 100644
--- a/content/child/webmessageportchannel_impl.h
+++ b/content/child/webmessageportchannel_impl.h
@@ -54,7 +54,6 @@
   // WebMessagePortChannel implementation.
   virtual void setClient(blink::WebMessagePortChannelClient* client);
   virtual void destroy();
-  virtual void entangle(blink::WebMessagePortChannel* channel);
   virtual void postMessage(const blink::WebString& message,
                            blink::WebMessagePortChannelArray* channels);
   virtual bool tryGetMessage(blink::WebString* message,
diff --git a/content/common/DEPS b/content/common/DEPS
index 8c83034..2e419da 100644
--- a/content/common/DEPS
+++ b/content/common/DEPS
@@ -20,7 +20,8 @@
   "+third_party/WebKit/public/platform/WebIDBDatabase.h",
   "+third_party/WebKit/public/platform/WebIDBTypes.h",
   "+third_party/WebKit/public/platform/WebReferrerPolicy.h",
-  "+third_party/WebKit/public/platform/WebScreenOrientation.h",
+  "+third_party/WebKit/public/platform/WebScreenOrientationLockType.h",
+  "+third_party/WebKit/public/platform/WebScreenOrientationType.h",
   "+third_party/WebKit/public/platform/WebScreenInfo.h",
   "+third_party/WebKit/public/platform/WebServiceWorkerError.h",
   "+third_party/WebKit/public/platform/WebServiceWorkerEventResult.h",
diff --git a/content/common/android/device_telephony_info.cc b/content/common/android/device_telephony_info.cc
index 1fc10ac..f861fe0 100644
--- a/content/common/android/device_telephony_info.cc
+++ b/content/common/android/device_telephony_info.cc
@@ -31,6 +31,13 @@
   return ConvertJavaStringToUTF8(result);
 }
 
+std::string DeviceTelephonyInfo::GetNetworkOperator() {
+  JNIEnv* env = AttachCurrentThread();
+  ScopedJavaLocalRef<jstring> result =
+      Java_DeviceTelephonyInfo_getNetworkOperator(env, j_device_info_.obj());
+  return ConvertJavaStringToUTF8(result);
+}
+
 // static
 bool DeviceTelephonyInfo::RegisterDeviceTelephonyInfo(JNIEnv* env) {
   return RegisterNativesImpl(env);
diff --git a/content/common/android/device_telephony_info.h b/content/common/android/device_telephony_info.h
index 84922d0..58ff03e 100644
--- a/content/common/android/device_telephony_info.h
+++ b/content/common/android/device_telephony_info.h
@@ -23,6 +23,10 @@
   // Returns the ISO country code equivalent of the current MCC.
   std::string GetNetworkCountryIso();
 
+  // Returns MCC+MNC (mobile country code + mobile network code) as
+  // the numeric name of the current registered operator.
+  std::string GetNetworkOperator();
+
   // Registers methods with JNI and returns true if succeeded.
   static bool RegisterDeviceTelephonyInfo(JNIEnv* env);
 
diff --git a/content/common/browser_plugin/browser_plugin_constants.cc b/content/common/browser_plugin/browser_plugin_constants.cc
index ea3925d..4b413d3 100644
--- a/content/common/browser_plugin/browser_plugin_constants.cc
+++ b/content/common/browser_plugin/browser_plugin_constants.cc
@@ -44,13 +44,10 @@
 const char kAttributeSrc[] = "src";
 
 // Parameters/properties on events.
-const char kDefaultPromptText[] = "defaultPromptText";
 const char kId[] = "id";
 const char kInitialHeight[] = "initialHeight";
 const char kInitialWidth[] = "initialWidth";
 const char kLastUnlockedBySelf[] = "lastUnlockedBySelf";
-const char kMessageText[] = "messageText";
-const char kMessageType[] = "messageType";
 const char kName[] = "name";
 const char kPermission[] = "permission";
 const char kPermissionTypeDialog[] = "dialog";
@@ -67,7 +64,6 @@
 const char kURL[] = "url";
 const char kWindowID[] = "windowId";
 const char kWindowOpenDisposition[] = "windowOpenDisposition";
-const char kUserGesture[] = "userGesture";
 
 // Error messages.
 const char kErrorAlreadyNavigated[] =
diff --git a/content/common/browser_plugin/browser_plugin_constants.h b/content/common/browser_plugin/browser_plugin_constants.h
index f870c48..efcc8be 100644
--- a/content/common/browser_plugin/browser_plugin_constants.h
+++ b/content/common/browser_plugin/browser_plugin_constants.h
@@ -44,13 +44,10 @@
 extern const char kAttributeSrc[];
 
 // Parameters/properties on events.
-extern const char kDefaultPromptText[];
 extern const char kId[];
 extern const char kInitialHeight[];
 extern const char kInitialWidth[];
 extern const char kLastUnlockedBySelf[];
-extern const char kMessageText[];
-extern const char kMessageType[];
 extern const char kName[];
 extern const char kPermission[];
 extern const char kPermissionTypeDialog[];
@@ -65,7 +62,6 @@
 extern const char kRequestMethod[];
 extern const char kTargetURL[];
 extern const char kURL[];
-extern const char kUserGesture[];
 extern const char kWindowID[];
 extern const char kWindowOpenDisposition[];
 
diff --git a/content/common/browser_plugin/browser_plugin_messages.h b/content/common/browser_plugin/browser_plugin_messages.h
index 50f1504..d84f3b8 100644
--- a/content/common/browser_plugin/browser_plugin_messages.h
+++ b/content/common/browser_plugin/browser_plugin_messages.h
@@ -206,9 +206,8 @@
 // the previous frame and is ready for the next frame. If the guest sent the
 // embedder a bitmap that does not match the size of the BrowserPlugin's
 // container, the BrowserPlugin requests a new size as well.
-IPC_MESSAGE_ROUTED4(BrowserPluginHostMsg_UpdateRect_ACK,
+IPC_MESSAGE_ROUTED3(BrowserPluginHostMsg_UpdateRect_ACK,
     int /* instance_id */,
-    bool /* needs_ack */,
     BrowserPluginHostMsg_AutoSize_Params /* auto_size_params */,
     BrowserPluginHostMsg_ResizeGuest_Params /* resize_guest_params */)
 
diff --git a/content/common/cc_messages.cc b/content/common/cc_messages.cc
index 6bca4e4..079cb2a 100644
--- a/content/common/cc_messages.cc
+++ b/content/common/cc_messages.cc
@@ -47,6 +47,9 @@
     case cc::FilterOperation::REFERENCE:
       WriteParam(m, p.image_filter());
       break;
+    case cc::FilterOperation::ALPHA_THRESHOLD:
+      NOTREACHED();
+      break;
   }
 }
 
@@ -122,6 +125,8 @@
       success = true;
       break;
     }
+    case cc::FilterOperation::ALPHA_THRESHOLD:
+      break;
   }
   return success;
 }
@@ -167,6 +172,9 @@
     case cc::FilterOperation::REFERENCE:
       LogParam(p.image_filter(), l);
       break;
+    case cc::FilterOperation::ALPHA_THRESHOLD:
+      NOTREACHED();
+      break;
   }
   l->append(")");
 }
diff --git a/content/common/content_message_generator.h b/content/common/content_message_generator.h
index f22c658..ca2dda1 100644
--- a/content/common/content_message_generator.h
+++ b/content/common/content_message_generator.h
@@ -13,8 +13,8 @@
 #include "content/common/clipboard_messages.h"
 #include "content/common/database_messages.h"
 #include "content/common/desktop_notification_messages.h"
-#include "content/common/device_orientation/device_motion_messages.h"
-#include "content/common/device_orientation/device_orientation_messages.h"
+#include "content/common/device_sensors/device_motion_messages.h"
+#include "content/common/device_sensors/device_orientation_messages.h"
 #include "content/common/devtools_messages.h"
 #include "content/common/dom_storage/dom_storage_messages.h"
 #include "content/common/drag_messages.h"
diff --git a/content/common/desktop_notification_messages.h b/content/common/desktop_notification_messages.h
index 6f1f0c4..48506dd 100644
--- a/content/common/desktop_notification_messages.h
+++ b/content/common/desktop_notification_messages.h
@@ -17,7 +17,6 @@
   IPC_STRUCT_TRAITS_MEMBER(body)
   IPC_STRUCT_TRAITS_MEMBER(direction)
   IPC_STRUCT_TRAITS_MEMBER(replace_id)
-  IPC_STRUCT_TRAITS_MEMBER(notification_id)
 IPC_STRUCT_TRAITS_END()
 
 // Messages sent from the browser to the renderer.
@@ -29,9 +28,8 @@
 
 // Used to inform the renderer that the browser has encountered an error
 // trying to display a notification.
-IPC_MESSAGE_ROUTED2(DesktopNotificationMsg_PostError,
-                    int /* notification_id */,
-                    base::string16 /* message */)
+IPC_MESSAGE_ROUTED1(DesktopNotificationMsg_PostError,
+                    int /* notification_id */)
 
 // Informs the renderer that the one if its notifications has closed.
 IPC_MESSAGE_ROUTED2(DesktopNotificationMsg_PostClose,
@@ -48,8 +46,9 @@
 
 // Messages sent from the renderer to the browser.
 
-IPC_MESSAGE_ROUTED1(DesktopNotificationHostMsg_Show,
-                    content::ShowDesktopNotificationHostMsgParams)
+IPC_MESSAGE_ROUTED2(DesktopNotificationHostMsg_Show,
+                    int /* notification_id */,
+                    content::ShowDesktopNotificationHostMsgParams /* params */)
 
 IPC_MESSAGE_ROUTED1(DesktopNotificationHostMsg_Cancel,
                     int /* notification_id */)
diff --git a/content/common/device_orientation/device_motion_hardware_buffer.h b/content/common/device_orientation/device_motion_hardware_buffer.h
deleted file mode 100644
index 7128229..0000000
--- a/content/common/device_orientation/device_motion_hardware_buffer.h
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright 2013 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 CONTENT_COMMON_DEVICE_ORIENTATION_DEVICE_MOTION_HARDWARE_BUFFER_H_
-#define CONTENT_COMMON_DEVICE_ORIENTATION_DEVICE_MOTION_HARDWARE_BUFFER_H_
-
-#include "content/common/shared_memory_seqlock_buffer.h"
-#include "third_party/WebKit/public/platform/WebDeviceMotionData.h"
-
-namespace content {
-
-typedef SharedMemorySeqLockBuffer<blink::WebDeviceMotionData>
-    DeviceMotionHardwareBuffer;
-
-}  // namespace content
-
-#endif  // CONTENT_COMMON_DEVICE_ORIENTATION_DEVICE_MOTION_HARDWARE_BUFFER_H_
diff --git a/content/common/device_orientation/device_motion_messages.h b/content/common/device_orientation/device_motion_messages.h
deleted file mode 100644
index 4f8435d..0000000
--- a/content/common/device_orientation/device_motion_messages.h
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2013 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.
-
-// IPC messages for device motion.
-// Multiply-included message file, hence no include guard.
-
-#include "base/memory/shared_memory.h"
-#include "ipc/ipc_message_macros.h"
-#include "ipc/ipc_param_traits.h"
-#include "ipc/ipc_platform_file.h"
-
-#define IPC_MESSAGE_START DeviceMotionMsgStart
-
-// Asks the browser process to activate Device Motion sensors if necessary.
-IPC_MESSAGE_CONTROL0(DeviceMotionHostMsg_StartPolling)
-
-// The browser process asynchronously returns the shared memory handle that will
-// hold the data from the hardware sensors.
-// See device_motion_hardware_buffer.h for a description of how
-// synchronization is handled.
-IPC_MESSAGE_CONTROL1(DeviceMotionMsg_DidStartPolling,
-                     base::SharedMemoryHandle /* handle */)
-
-// Notifies the browser process that the renderer process is not using the
-// Device Motion data anymore. The number of Starts should match the number
-// of Stops.
-IPC_MESSAGE_CONTROL0(DeviceMotionHostMsg_StopPolling)
diff --git a/content/common/device_orientation/device_orientation_hardware_buffer.h b/content/common/device_orientation/device_orientation_hardware_buffer.h
deleted file mode 100644
index 0d43bb5..0000000
--- a/content/common/device_orientation/device_orientation_hardware_buffer.h
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright 2013 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 CONTENT_COMMON_DEVICE_ORIENTATION_DEVICE_ORIENTATION_HARDWARE_BUFFER_H_
-#define CONTENT_COMMON_DEVICE_ORIENTATION_DEVICE_ORIENTATION_HARDWARE_BUFFER_H_
-
-#include "content/common/shared_memory_seqlock_buffer.h"
-#include "third_party/WebKit/public/platform/WebDeviceOrientationData.h"
-
-namespace content {
-
-typedef SharedMemorySeqLockBuffer<blink::WebDeviceOrientationData>
-    DeviceOrientationHardwareBuffer;
-
-}  // namespace content
-
-#endif  // CONTENT_COMMON_DEVICE_ORIENTATION_DEVICE_ORIENTATION_HARDWARE_BUFFER_H_
diff --git a/content/common/device_orientation/device_orientation_messages.h b/content/common/device_orientation/device_orientation_messages.h
deleted file mode 100644
index 43406c6..0000000
--- a/content/common/device_orientation/device_orientation_messages.h
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright 2013 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.
-
-// IPC messages for device orientation.
-// Multiply-included message file, hence no include guard.
-
-#include "base/memory/shared_memory.h"
-#include "ipc/ipc_message_macros.h"
-
-#define IPC_MESSAGE_START DeviceOrientationMsgStart
-
-// Asks the browser process to activate Device Orientation sensors if necessary.
-IPC_MESSAGE_CONTROL0(DeviceOrientationHostMsg_StartPolling)
-
-// The browser process asynchronously returns the shared memory handle that will
-// hold the data from the hardware sensors.
-// See device_orientation_hardware_buffer.h for a description of how
-// synchronization is handled.
-IPC_MESSAGE_CONTROL1(DeviceOrientationMsg_DidStartPolling,
-                     base::SharedMemoryHandle /* handle */)
-
-// Notifies the browser process that the renderer process is not using the
-// Device Orientation data anymore. The number of Starts should match the
-// number of Stops.
-IPC_MESSAGE_CONTROL0(DeviceOrientationHostMsg_StopPolling)
diff --git a/content/common/device_orientation/OWNERS b/content/common/device_sensors/OWNERS
similarity index 100%
rename from content/common/device_orientation/OWNERS
rename to content/common/device_sensors/OWNERS
diff --git a/content/common/device_sensors/device_motion_hardware_buffer.h b/content/common/device_sensors/device_motion_hardware_buffer.h
new file mode 100644
index 0000000..b025972
--- /dev/null
+++ b/content/common/device_sensors/device_motion_hardware_buffer.h
@@ -0,0 +1,18 @@
+// 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.
+
+#ifndef CONTENT_COMMON_DEVICE_SENSORS_DEVICE_MOTION_HARDWARE_BUFFER_H_
+#define CONTENT_COMMON_DEVICE_SENSORS_DEVICE_MOTION_HARDWARE_BUFFER_H_
+
+#include "content/common/shared_memory_seqlock_buffer.h"
+#include "third_party/WebKit/public/platform/WebDeviceMotionData.h"
+
+namespace content {
+
+typedef SharedMemorySeqLockBuffer<blink::WebDeviceMotionData>
+    DeviceMotionHardwareBuffer;
+
+}  // namespace content
+
+#endif  // CONTENT_COMMON_DEVICE_SENSORS_DEVICE_MOTION_HARDWARE_BUFFER_H_
diff --git a/content/common/device_sensors/device_motion_messages.h b/content/common/device_sensors/device_motion_messages.h
new file mode 100644
index 0000000..4b17d10
--- /dev/null
+++ b/content/common/device_sensors/device_motion_messages.h
@@ -0,0 +1,28 @@
+// 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.
+
+// IPC messages for device motion.
+// Multiply-included message file, hence no include guard.
+
+#include "base/memory/shared_memory.h"
+#include "ipc/ipc_message_macros.h"
+#include "ipc/ipc_param_traits.h"
+#include "ipc/ipc_platform_file.h"
+
+#define IPC_MESSAGE_START DeviceMotionMsgStart
+
+// Asks the browser process to activate Device Motion sensors if necessary.
+IPC_MESSAGE_CONTROL0(DeviceMotionHostMsg_StartPolling)
+
+// The browser process asynchronously returns the shared memory handle that will
+// hold the data from the hardware sensors.
+// See device_motion_hardware_buffer.h for a description of how
+// synchronization is handled.
+IPC_MESSAGE_CONTROL1(DeviceMotionMsg_DidStartPolling,
+                     base::SharedMemoryHandle /* handle */)
+
+// Notifies the browser process that the renderer process is not using the
+// Device Motion data anymore. The number of Starts should match the number
+// of Stops.
+IPC_MESSAGE_CONTROL0(DeviceMotionHostMsg_StopPolling)
diff --git a/content/common/device_sensors/device_orientation_hardware_buffer.h b/content/common/device_sensors/device_orientation_hardware_buffer.h
new file mode 100644
index 0000000..92b705d
--- /dev/null
+++ b/content/common/device_sensors/device_orientation_hardware_buffer.h
@@ -0,0 +1,18 @@
+// 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.
+
+#ifndef CONTENT_COMMON_DEVICE_SENSORS_DEVICE_ORIENTATION_HARDWARE_BUFFER_H_
+#define CONTENT_COMMON_DEVICE_SENSORS_DEVICE_ORIENTATION_HARDWARE_BUFFER_H_
+
+#include "content/common/shared_memory_seqlock_buffer.h"
+#include "third_party/WebKit/public/platform/WebDeviceOrientationData.h"
+
+namespace content {
+
+typedef SharedMemorySeqLockBuffer<blink::WebDeviceOrientationData>
+    DeviceOrientationHardwareBuffer;
+
+}  // namespace content
+
+#endif  // CONTENT_COMMON_DEVICE_SENSORS_DEVICE_ORIENTATION_HARDWARE_BUFFER_H_
diff --git a/content/common/device_sensors/device_orientation_messages.h b/content/common/device_sensors/device_orientation_messages.h
new file mode 100644
index 0000000..f75b70a
--- /dev/null
+++ b/content/common/device_sensors/device_orientation_messages.h
@@ -0,0 +1,26 @@
+// 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.
+
+// IPC messages for device orientation.
+// Multiply-included message file, hence no include guard.
+
+#include "base/memory/shared_memory.h"
+#include "ipc/ipc_message_macros.h"
+
+#define IPC_MESSAGE_START DeviceOrientationMsgStart
+
+// Asks the browser process to activate Device Orientation sensors if necessary.
+IPC_MESSAGE_CONTROL0(DeviceOrientationHostMsg_StartPolling)
+
+// The browser process asynchronously returns the shared memory handle that will
+// hold the data from the hardware sensors.
+// See device_orientation_hardware_buffer.h for a description of how
+// synchronization is handled.
+IPC_MESSAGE_CONTROL1(DeviceOrientationMsg_DidStartPolling,
+                     base::SharedMemoryHandle /* handle */)
+
+// Notifies the browser process that the renderer process is not using the
+// Device Orientation data anymore. The number of Starts should match the
+// number of Stops.
+IPC_MESSAGE_CONTROL0(DeviceOrientationHostMsg_StopPolling)
diff --git a/content/common/drag_traits.h b/content/common/drag_traits.h
index 5b78528..fa8d358 100644
--- a/content/common/drag_traits.h
+++ b/content/common/drag_traits.h
@@ -27,6 +27,7 @@
   IPC_STRUCT_TRAITS_MEMBER(referrer_policy)
   IPC_STRUCT_TRAITS_MEMBER(filenames)
   IPC_STRUCT_TRAITS_MEMBER(filesystem_id)
+  IPC_STRUCT_TRAITS_MEMBER(file_system_files)
   IPC_STRUCT_TRAITS_MEMBER(text)
   IPC_STRUCT_TRAITS_MEMBER(html)
   IPC_STRUCT_TRAITS_MEMBER(html_base_url)
@@ -35,6 +36,11 @@
   IPC_STRUCT_TRAITS_MEMBER(custom_data)
 IPC_STRUCT_TRAITS_END()
 
+IPC_STRUCT_TRAITS_BEGIN(content::DropData::FileSystemFileInfo)
+  IPC_STRUCT_TRAITS_MEMBER(url)
+  IPC_STRUCT_TRAITS_MEMBER(size)
+IPC_STRUCT_TRAITS_END()
+
 IPC_STRUCT_TRAITS_BEGIN(content::DragEventSourceInfo)
   IPC_STRUCT_TRAITS_MEMBER(event_location)
   IPC_STRUCT_TRAITS_MEMBER(event_source)
diff --git a/content/common/gpu/client/gpu_video_decode_accelerator_host.cc b/content/common/gpu/client/gpu_video_decode_accelerator_host.cc
index 51c606d..8b714b9 100644
--- a/content/common/gpu/client/gpu_video_decode_accelerator_host.cc
+++ b/content/common/gpu/client/gpu_video_decode_accelerator_host.cc
@@ -17,10 +17,6 @@
 #include "content/public/common/sandbox_init.h"
 #endif  // OS_WIN
 
-#define NOTIFY_ERROR(error) \
-  PostNotifyError(error);   \
-  DLOG(ERROR)
-
 using media::VideoDecodeAccelerator;
 namespace content {
 
@@ -79,7 +75,8 @@
       channel_->RemoveRoute(decoder_route_id_);
     channel_ = NULL;
   }
-  NOTIFY_ERROR(PLATFORM_FAILURE) << "OnChannelError()";
+  DLOG(ERROR) << "OnChannelError()";
+  PostNotifyError(PLATFORM_FAILURE);
 }
 
 bool GpuVideoDecodeAcceleratorHost::Initialize(media::VideoCodecProfile profile,
@@ -98,8 +95,8 @@
       impl_->GetRouteID(), profile, route_id, &succeeded));
 
   if (!succeeded) {
-    NOTIFY_ERROR(PLATFORM_FAILURE)
-        << "Send(GpuCommandBufferMsg_CreateVideoDecoder()) failed";
+    DLOG(ERROR) << "Send(GpuCommandBufferMsg_CreateVideoDecoder()) failed";
+    PostNotifyError(PLATFORM_FAILURE);
     channel_->RemoveRoute(route_id);
     return false;
   }
@@ -136,9 +133,10 @@
   for (uint32 i = 0; i < buffers.size(); i++) {
     const media::PictureBuffer& buffer = buffers[i];
     if (buffer.size() != picture_buffer_dimensions_) {
-      NOTIFY_ERROR(INVALID_ARGUMENT) << "buffer.size() invalid: expected "
-                                     << picture_buffer_dimensions_.ToString()
-                                     << ", got " << buffer.size().ToString();
+      DLOG(ERROR) << "buffer.size() invalid: expected "
+                  << picture_buffer_dimensions_.ToString()
+                  << ", got " << buffer.size().ToString();
+      PostNotifyError(INVALID_ARGUMENT);
       return;
     }
     texture_ids.push_back(buffer.texture_id());
@@ -200,8 +198,10 @@
 void GpuVideoDecodeAcceleratorHost::Send(IPC::Message* message) {
   DCHECK(CalledOnValidThread());
   uint32 message_type = message->type();
-  if (!channel_->Send(message))
-    NOTIFY_ERROR(PLATFORM_FAILURE) << "Send(" << message_type << ") failed";
+  if (!channel_->Send(message)) {
+    DLOG(ERROR) << "Send(" << message_type << ") failed";
+    PostNotifyError(PLATFORM_FAILURE);
+  }
 }
 
 void GpuVideoDecodeAcceleratorHost::OnBitstreamBufferProcessed(
diff --git a/content/common/gpu/gpu_messages.h b/content/common/gpu/gpu_messages.h
index 246b7bc..454739c 100644
--- a/content/common/gpu/gpu_messages.h
+++ b/content/common/gpu/gpu_messages.h
@@ -165,7 +165,8 @@
   IPC_STRUCT_TRAITS_MEMBER(driver_date)
   IPC_STRUCT_TRAITS_MEMBER(pixel_shader_version)
   IPC_STRUCT_TRAITS_MEMBER(vertex_shader_version)
-  IPC_STRUCT_TRAITS_MEMBER(machine_model)
+  IPC_STRUCT_TRAITS_MEMBER(machine_model_name)
+  IPC_STRUCT_TRAITS_MEMBER(machine_model_version)
   IPC_STRUCT_TRAITS_MEMBER(gl_version)
   IPC_STRUCT_TRAITS_MEMBER(gl_version_string)
   IPC_STRUCT_TRAITS_MEMBER(gl_vendor)
diff --git a/content/common/gpu/media/exynos_video_encode_accelerator.cc b/content/common/gpu/media/exynos_video_encode_accelerator.cc
index 4f96372..c8bddd0 100644
--- a/content/common/gpu/media/exynos_video_encode_accelerator.cc
+++ b/content/common/gpu/media/exynos_video_encode_accelerator.cc
@@ -1306,11 +1306,11 @@
   IOCTL_OR_ERROR_RETURN_FALSE(mfc_fd_, VIDIOC_S_FMT, &format);
   // We read direct from GSC, so we rely on the HW not changing our set
   // size/stride.
-  DCHECK_EQ(format.fmt.pix_mp.plane_fmt[0].sizeimage,
+  DCHECK_GT(format.fmt.pix_mp.plane_fmt[0].sizeimage,
             static_cast<__u32>(input_allocated_size_.GetArea()));
   DCHECK_EQ(format.fmt.pix_mp.plane_fmt[0].bytesperline,
             static_cast<__u32>(input_allocated_size_.width()));
-  DCHECK_EQ(format.fmt.pix_mp.plane_fmt[1].sizeimage,
+  DCHECK_GT(format.fmt.pix_mp.plane_fmt[1].sizeimage,
             static_cast<__u32>(input_allocated_size_.GetArea() / 2));
   DCHECK_EQ(format.fmt.pix_mp.plane_fmt[1].bytesperline,
             static_cast<__u32>(input_allocated_size_.width()));
diff --git a/content/common/gpu/media/video_decode_accelerator_unittest.cc b/content/common/gpu/media/video_decode_accelerator_unittest.cc
index 01d8878..87a899f 100644
--- a/content/common/gpu/media/video_decode_accelerator_unittest.cc
+++ b/content/common/gpu/media/video_decode_accelerator_unittest.cc
@@ -945,8 +945,6 @@
 
 double GLRenderingVDAClient::frames_per_second() {
   base::TimeDelta delta = frame_delivery_times_.back() - initialize_done_ticks_;
-  if (delta.InSecondsF() == 0)
-    return 0;
   return num_decoded_frames() / delta.InSecondsF();
 }
 
@@ -1326,7 +1324,7 @@
       EXPECT_EQ(client->num_done_bitstream_buffers(),
                 client->num_queued_fragments());
     }
-    VLOG(0) << "Decoder " << i << " fps: " << client->frames_per_second();
+    LOG(INFO) << "Decoder " << i << " fps: " << client->frames_per_second();
     if (!render_as_thumbnails) {
       int min_fps = suppress_rendering ?
           video_file->min_fps_no_render : video_file->min_fps_render;
@@ -1513,7 +1511,7 @@
   std::string output_string =
       base::StringPrintf("Decode time median: %" PRId64 " us",
                          decode_time_median.InMicroseconds());
-  VLOG(0) << output_string;
+  LOG(INFO) << output_string;
 
   if (g_output_log != NULL)
     OutputLogFile(g_output_log, output_string);
diff --git a/content/common/gpu/media/video_encode_accelerator_unittest.cc b/content/common/gpu/media/video_encode_accelerator_unittest.cc
index f28fe67..ecebcef 100644
--- a/content/common/gpu/media/video_encode_accelerator_unittest.cc
+++ b/content/common/gpu/media/video_encode_accelerator_unittest.cc
@@ -12,6 +12,7 @@
 #include "base/process/process.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_split.h"
+#include "base/time/time.h"
 #include "content/common/gpu/media/exynos_video_encode_accelerator.h"
 #include "content/common/gpu/media/video_accelerator_unittest_helpers.h"
 #include "media/base/bind_to_current_loop.h"
@@ -37,27 +38,49 @@
 // Value to use as max frame number for keyframe detection.
 const unsigned int kMaxFrameNum =
     std::numeric_limits<unsigned int>::max() - kMaxKeyframeDelay;
+// Default initial bitrate.
 const uint32 kDefaultBitrate = 2000000;
+// Default ratio of requested_subsequent_bitrate to initial_bitrate
+// (see test parameters below) if one is not provided.
+const double kDefaultSubsequentBitrateRatio = 2.0;
+// Default initial framerate.
+const uint32 kDefaultFramerate = 30;
+// Default ratio of requested_subsequent_framerate to initial_framerate
+// (see test parameters below) if one is not provided.
+const double kDefaultSubsequentFramerateRatio = 0.1;
 // Tolerance factor for how encoded bitrate can differ from requested bitrate.
 const double kBitrateTolerance = 0.1;
-const uint32 kDefaultFPS = 30;
+// Minimum required FPS throughput for the basic performance test.
+const uint32 kMinPerfFPS = 30;
 
 // The syntax of each test stream is:
-// "in_filename:width:height:out_filename:requested_bitrate"
+// "in_filename:width:height:out_filename:requested_bitrate:requested_framerate
+//  :requested_subsequent_bitrate:requested_subsequent_framerate"
 // - |in_filename| must be an I420 (YUV planar) raw stream
 //   (see http://www.fourcc.org/yuv.php#IYUV).
 // - |width| and |height| are in pixels.
 // - |profile| to encode into (values of media::VideoCodecProfile).
 // - |out_filename| filename to save the encoded stream to (optional).
 //   Output stream is saved for the simple encode test only.
-// - |requested_bitrate| requested bitrate in bits per second (optional).
+// Further parameters are optional (need to provide preceding positional
+// parameters if a specific subsequent parameter is required):
+// - |requested_bitrate| requested bitrate in bits per second.
+// - |requested_framerate| requested initial framerate.
+// - |requested_subsequent_bitrate| bitrate to switch to in the middle of the
+//                                  stream.
+// - |requested_subsequent_framerate| framerate to switch to in the middle
+//                                    of the stream.
 //   Bitrate is only forced for tests that test bitrate.
 const char* g_default_in_filename = "sync_192p20_frames.yuv";
 const char* g_default_in_parameters = ":320:192:1:out.h264:200000";
 base::FilePath::StringType* g_test_stream_data;
 
 struct TestStream {
-  TestStream() : requested_bitrate(0) {}
+  TestStream()
+      : requested_bitrate(0),
+        requested_framerate(0),
+        requested_subsequent_bitrate(0),
+        requested_subsequent_framerate(0) {}
   ~TestStream() {}
 
   gfx::Size size;
@@ -65,6 +88,9 @@
   media::VideoCodecProfile requested_profile;
   std::string out_filename;
   unsigned int requested_bitrate;
+  unsigned int requested_framerate;
+  unsigned int requested_subsequent_bitrate;
+  unsigned int requested_subsequent_framerate;
 };
 
 static void ParseAndReadTestStreamData(const base::FilePath::StringType& data,
@@ -72,7 +98,7 @@
   std::vector<base::FilePath::StringType> fields;
   base::SplitString(data, ':', &fields);
   CHECK_GE(fields.size(), 4U) << data;
-  CHECK_LE(fields.size(), 6U) << data;
+  CHECK_LE(fields.size(), 9U) << data;
 
   base::FilePath::StringType filename = fields[0];
   int width, height;
@@ -86,11 +112,26 @@
   CHECK_LE(profile, media::VIDEO_CODEC_PROFILE_MAX);
   test_stream->requested_profile =
       static_cast<media::VideoCodecProfile>(profile);
+
   if (fields.size() >= 5 && !fields[4].empty())
     test_stream->out_filename = fields[4];
+
   if (fields.size() >= 6 && !fields[5].empty())
     CHECK(base::StringToUint(fields[5], &test_stream->requested_bitrate));
 
+  if (fields.size() >= 7 && !fields[6].empty()) {
+    CHECK(base::StringToUint(fields[6],
+                             &test_stream->requested_subsequent_bitrate));
+  }
+
+  if (fields.size() >= 8 && !fields[7].empty())
+    CHECK(base::StringToUint(fields[7], &test_stream->requested_framerate));
+
+  if (fields.size() >= 9 && !fields[8].empty()) {
+    CHECK(base::StringToUint(fields[8],
+                             &test_stream->requested_subsequent_framerate));
+  }
+
   CHECK(test_stream->input_file.Initialize(base::FilePath(filename)));
 }
 
@@ -243,11 +284,15 @@
             ClientStateNotification<ClientState>* note,
             bool save_to_file,
             unsigned int keyframe_period,
-            bool force_bitrate);
+            bool force_bitrate,
+            bool test_perf);
   virtual ~VEAClient();
   void CreateEncoder();
   void DestroyEncoder();
 
+  // Return the number of encoded frames per second.
+  double frames_per_second();
+
   // VideoDecodeAccelerator::Client implementation.
   void RequireBitstreamBuffers(unsigned int input_count,
                                const gfx::Size& input_coded_size,
@@ -261,15 +306,20 @@
   bool has_encoder() { return encoder_.get(); }
 
   void SetState(ClientState new_state);
-  // Called before starting encode to set initial configuration of the encoder.
-  void SetInitialConfiguration();
+
+  // Set current stream parameters to given |bitrate| at |framerate|.
+  void SetStreamParameters(unsigned int bitrate, unsigned int framerate);
+
   // Called when encoder is done with a VideoFrame.
   void InputNoLongerNeededCallback(int32 input_id);
+
   // Ensure encoder has at least as many inputs as it asked for
   // via RequireBitstreamBuffers().
   void FeedEncoderWithInputs();
+
   // Provide the encoder with a new output buffer.
   void FeedEncoderWithOutput(base::SharedMemory* shm);
+
   // Feed the encoder with num_required_input_buffers_ of black frames to force
   // it to encode and return all inputs that came before this, effectively
   // flushing it.
@@ -280,9 +330,15 @@
   // and accounting. Returns false once we have collected all frames we needed.
   bool HandleEncodedFrame(bool keyframe);
 
-  // Perform any checks required at the end of the stream, called after
-  // receiving the last frame from the encoder.
-  void ChecksAtFinish();
+  // Verify that stream bitrate has been close to current_requested_bitrate_,
+  // assuming current_framerate_ since the last time VerifyStreamProperties()
+  // was called. Fail the test if |force_bitrate_| is true and the bitrate
+  // is not within kBitrateTolerance.
+  void VerifyStreamProperties();
+
+  // Test codec performance, failing the test if we are currently running
+  // the performance test.
+  void VerifyPerf();
 
   // Prepare and return a frame wrapping the data at |position| bytes in
   // the input stream, ready to be sent to encoder.
@@ -316,9 +372,13 @@
 
   // Precalculated number of frames in the stream.
   unsigned int num_frames_in_stream_;
+
   // Number of encoded frames we've got from the encoder thus far.
   unsigned int num_encoded_frames_;
 
+  // Frames since last bitrate verification.
+  unsigned int num_frames_since_last_check_;
+
   // True if received a keyframe while processing current bitstream buffer.
   bool seen_keyframe_in_this_buffer_;
 
@@ -334,11 +394,27 @@
   // True if we are asking encoder for a particular bitrate.
   bool force_bitrate_;
 
-  // Byte size of the encoded stream (for bitrate calculation).
-  size_t encoded_stream_size_;
+  // Current requested bitrate.
+  unsigned int current_requested_bitrate_;
+
+  // Current expected framerate.
+  unsigned int current_framerate_;
+
+  // Byte size of the encoded stream (for bitrate calculation) since last
+  // time we checked bitrate.
+  size_t encoded_stream_size_since_last_check_;
+
+  // If true, verify performance at the end of the test.
+  bool test_perf_;
 
   scoped_ptr<StreamValidator> validator_;
 
+  // The time when the encoder has initialized.
+  base::TimeTicks encoder_initialized_time_;
+
+  // The time when the last encoded frame is ready.
+  base::TimeTicks last_frame_ready_time_;
+
   // All methods of this class should be run on the same thread.
   base::ThreadChecker thread_checker_;
 };
@@ -347,7 +423,8 @@
                      ClientStateNotification<ClientState>* note,
                      bool save_to_file,
                      unsigned int keyframe_period,
-                     bool force_bitrate)
+                     bool force_bitrate,
+                     bool test_perf)
     : state_(CS_CREATED),
       test_stream_(test_stream),
       note_(note),
@@ -359,12 +436,16 @@
       output_buffer_size_(0),
       num_frames_in_stream_(0),
       num_encoded_frames_(0),
+      num_frames_since_last_check_(0),
       seen_keyframe_in_this_buffer_(false),
       save_to_file_(save_to_file),
       keyframe_period_(keyframe_period),
       keyframe_requested_at_(kMaxFrameNum),
       force_bitrate_(force_bitrate),
-      encoded_stream_size_(0) {
+      current_requested_bitrate_(0),
+      current_framerate_(0),
+      encoded_stream_size_since_last_check_(0),
+      test_perf_(test_perf) {
   if (keyframe_period_)
     CHECK_LT(kMaxKeyframeDelay, keyframe_period_);
 
@@ -395,7 +476,7 @@
   SetState(CS_ENCODER_SET);
 
   DVLOG(1) << "Profile: " << test_stream_.requested_profile
-           << ", requested bitrate: " << test_stream_.requested_bitrate;
+           << ", initial bitrate: " << test_stream_.requested_bitrate;
   if (!encoder_->Initialize(kInputFormat,
                             test_stream_.size,
                             test_stream_.requested_profile,
@@ -405,8 +486,11 @@
     SetState(CS_ERROR);
     return;
   }
-  SetInitialConfiguration();
+
+  SetStreamParameters(test_stream_.requested_bitrate,
+                      test_stream_.requested_framerate);
   SetState(CS_INITIALIZED);
+  encoder_initialized_time_ = base::TimeTicks::Now();
 }
 
 void VEAClient::DestroyEncoder() {
@@ -416,6 +500,11 @@
   encoder_.release()->Destroy();
 }
 
+double VEAClient::frames_per_second() {
+  base::TimeDelta duration = last_frame_ready_time_ - encoder_initialized_time_;
+  return num_encoded_frames_ / duration.InSecondsF();
+}
+
 void VEAClient::RequireBitstreamBuffers(unsigned int input_count,
                                         const gfx::Size& input_coded_size,
                                         size_t output_size) {
@@ -486,7 +575,7 @@
   if (state_ == CS_FINISHED)
     return;
 
-  encoded_stream_size_ += payload_size;
+  encoded_stream_size_since_last_check_ += payload_size;
 
   const uint8* stream_ptr = static_cast<const uint8*>(shm->memory());
   if (payload_size > 0)
@@ -517,12 +606,16 @@
   state_ = new_state;
 }
 
-void VEAClient::SetInitialConfiguration() {
-  if (force_bitrate_) {
-    CHECK_GT(test_stream_.requested_bitrate, 0UL);
-    encoder_->RequestEncodingParametersChange(test_stream_.requested_bitrate,
-                                              kDefaultFPS);
-  }
+void VEAClient::SetStreamParameters(unsigned int bitrate,
+                                    unsigned int framerate) {
+  current_requested_bitrate_ = bitrate;
+  current_framerate_ = framerate;
+  CHECK_GT(current_requested_bitrate_, 0UL);
+  CHECK_GT(current_framerate_, 0UL);
+  encoder_->RequestEncodingParametersChange(current_requested_bitrate_,
+                                            current_framerate_);
+  DVLOG(1) << "Switched parameters to " << current_requested_bitrate_
+           << " bps @ " << current_framerate_ << " FPS";
 }
 
 void VEAClient::InputNoLongerNeededCallback(int32 input_id) {
@@ -628,6 +721,9 @@
   CHECK_LE(num_encoded_frames_, num_frames_in_stream_);
 
   ++num_encoded_frames_;
+  ++num_frames_since_last_check_;
+
+  last_frame_ready_time_ = base::TimeTicks::Now();
   if (keyframe) {
     // Got keyframe, reset keyframe detection regardless of whether we
     // got a frame in time or not.
@@ -647,8 +743,17 @@
   // it, comes back encoded.
   EXPECT_LE(num_encoded_frames_, keyframe_requested_at_ + kMaxKeyframeDelay);
 
-  if (num_encoded_frames_ == num_frames_in_stream_) {
-    ChecksAtFinish();
+  if (num_encoded_frames_ == num_frames_in_stream_ / 2) {
+    VerifyStreamProperties();
+    if (test_stream_.requested_subsequent_bitrate !=
+        current_requested_bitrate_ ||
+        test_stream_.requested_subsequent_framerate != current_framerate_) {
+      SetStreamParameters(test_stream_.requested_subsequent_bitrate,
+                          test_stream_.requested_subsequent_framerate);
+    }
+  } else if (num_encoded_frames_ == num_frames_in_stream_) {
+    VerifyPerf();
+    VerifyStreamProperties();
     SetState(CS_FINISHED);
     return false;
   }
@@ -656,15 +761,30 @@
   return true;
 }
 
-void VEAClient::ChecksAtFinish() {
-  unsigned int bitrate =
-      encoded_stream_size_ * 8 * kDefaultFPS / num_frames_in_stream_;
-  DVLOG(1) << "Final bitrate: " << bitrate
-           << " num frames: " << num_frames_in_stream_;
+void VEAClient::VerifyPerf() {
+  double measured_fps = frames_per_second();
+  LOG(INFO) << "Measured encoder FPS: " << measured_fps;
+  if (test_perf_)
+    EXPECT_GE(measured_fps, kMinPerfFPS);
+}
+
+void VEAClient::VerifyStreamProperties() {
+  CHECK_GT(num_frames_since_last_check_, 0UL);
+  CHECK_GT(encoded_stream_size_since_last_check_, 0UL);
+  unsigned int bitrate = encoded_stream_size_since_last_check_ * 8 *
+                         current_framerate_ / num_frames_since_last_check_;
+  DVLOG(1) << "Current chunk's bitrate: " << bitrate
+           << " (expected: " << current_requested_bitrate_
+           << " @ " << current_framerate_ << " FPS,"
+           << " num frames in chunk: " << num_frames_since_last_check_;
+
+  num_frames_since_last_check_ = 0;
+  encoded_stream_size_since_last_check_ = 0;
+
   if (force_bitrate_) {
     EXPECT_NEAR(bitrate,
-                test_stream_.requested_bitrate,
-                kBitrateTolerance * test_stream_.requested_bitrate);
+                current_requested_bitrate_,
+                kBitrateTolerance * current_requested_bitrate_);
   }
 }
 
@@ -673,12 +793,19 @@
 // - Force a keyframe every n frames.
 // - Force bitrate; the actual required value is provided as a property
 //   of the input stream, because it depends on stream type/resolution/etc.
+// - If true, measure performance.
+// - If true, switch bitrate mid-stream.
+// - If true, switch framerate mid-stream.
 class VideoEncodeAcceleratorTest
-    : public ::testing::TestWithParam<Tuple3<bool, int, bool> > {};
+    : public ::testing::TestWithParam<
+         Tuple6<bool, int, bool, bool, bool, bool> > {};
 
 TEST_P(VideoEncodeAcceleratorTest, TestSimpleEncode) {
   const unsigned int keyframe_period = GetParam().b;
   const bool force_bitrate = GetParam().c;
+  const bool test_perf = GetParam().d;
+  const bool mid_stream_bitrate_switch = GetParam().e;
+  const bool mid_stream_framerate_switch = GetParam().f;
 
   TestStream test_stream;
   ParseAndReadTestStreamData(*g_test_stream_data, &test_stream);
@@ -686,9 +813,40 @@
   // Disregard save_to_file if we didn't get an output filename.
   const bool save_to_file = GetParam().a && !test_stream.out_filename.empty();
 
+  // Use defaults for bitrate/framerate if they are not provided.
   if (test_stream.requested_bitrate == 0)
     test_stream.requested_bitrate = kDefaultBitrate;
 
+  if (test_stream.requested_framerate == 0)
+    test_stream.requested_framerate = kDefaultFramerate;
+
+  // If bitrate/framerate switch is requested, use the subsequent values if
+  // provided, or, if not, calculate them from their initial values using
+  // the default ratios.
+  // Otherwise, if a switch is not requested, keep the initial values.
+  if (mid_stream_bitrate_switch) {
+    if (test_stream.requested_subsequent_bitrate == 0) {
+      test_stream.requested_subsequent_bitrate =
+          test_stream.requested_bitrate * kDefaultSubsequentBitrateRatio;
+    }
+  } else {
+    test_stream.requested_subsequent_bitrate = test_stream.requested_bitrate;
+  }
+  if (test_stream.requested_subsequent_bitrate == 0)
+    test_stream.requested_subsequent_bitrate = 1;
+
+  if (mid_stream_framerate_switch) {
+    if (test_stream.requested_subsequent_framerate == 0) {
+      test_stream.requested_subsequent_framerate =
+          test_stream.requested_framerate * kDefaultSubsequentFramerateRatio;
+    }
+  } else {
+    test_stream.requested_subsequent_framerate =
+        test_stream.requested_framerate;
+  }
+  if (test_stream.requested_subsequent_framerate == 0)
+    test_stream.requested_subsequent_framerate = 1;
+
   base::Thread encoder_thread("EncoderThread");
   encoder_thread.Start();
 
@@ -697,7 +855,8 @@
                                              &note,
                                              save_to_file,
                                              keyframe_period,
-                                             force_bitrate));
+                                             force_bitrate,
+                                             test_perf));
 
   encoder_thread.message_loop()->PostTask(
       FROM_HERE,
@@ -718,20 +877,42 @@
 
 INSTANTIATE_TEST_CASE_P(SimpleEncode,
                         VideoEncodeAcceleratorTest,
-                        ::testing::Values(MakeTuple(true, 0, false)));
+                        ::testing::Values(MakeTuple(
+                            true, 0, false, false, false, false)));
+
+INSTANTIATE_TEST_CASE_P(EncoderPerf,
+                        VideoEncodeAcceleratorTest,
+                        ::testing::Values(MakeTuple(
+                            false, 0, false, true, false, false)));
 
 INSTANTIATE_TEST_CASE_P(ForceKeyframes,
                         VideoEncodeAcceleratorTest,
-                        ::testing::Values(MakeTuple(false, 10, false)));
+                        ::testing::Values(MakeTuple(
+                            false, 10, false, false, false, false)));
 
 INSTANTIATE_TEST_CASE_P(ForceBitrate,
                         VideoEncodeAcceleratorTest,
-                        ::testing::Values(MakeTuple(false, 0, true)));
+                        ::testing::Values(MakeTuple(
+                            false, 0, true, false, false, false)));
+
+INSTANTIATE_TEST_CASE_P(MidStreamParamSwitchBitrate,
+                        VideoEncodeAcceleratorTest,
+                        ::testing::Values(MakeTuple(
+                            false, 0, true, false, true, false)));
+
+INSTANTIATE_TEST_CASE_P(MidStreamParamSwitchFPS,
+                        VideoEncodeAcceleratorTest,
+                        ::testing::Values(MakeTuple(
+                            false, 0, true, false, false, true)));
+
+INSTANTIATE_TEST_CASE_P(MidStreamParamSwitchBitrateAndFPS,
+                        VideoEncodeAcceleratorTest,
+                        ::testing::Values(MakeTuple(
+                            false, 0, true, false, true, true)));
 
 // TODO(posciak): more tests:
 // - async FeedEncoderWithOutput
 // - out-of-order return of outputs to encoder
-// - dynamic, runtime bitrate changes
 // - multiple encoders
 // - multiple encoders + decoders
 // - mid-stream encoder_->Destroy()
diff --git a/content/common/input/synthetic_gesture_params.cc b/content/common/input/synthetic_gesture_params.cc
index 68ba38c..6d24237 100644
--- a/content/common/input/synthetic_gesture_params.cc
+++ b/content/common/input/synthetic_gesture_params.cc
@@ -15,4 +15,21 @@
 
 SyntheticGestureParams::~SyntheticGestureParams() {}
 
+bool SyntheticGestureParams::IsGestureSourceTypeSupported(
+    GestureSourceType gesture_source_type) {
+  if (gesture_source_type == DEFAULT_INPUT)
+    return true;
+
+  // These values should change very rarely. We thus hard-code them here rather
+  // than having to query the brower's SyntheticGestureTarget.
+#if defined(USE_AURA)
+  return gesture_source_type == TOUCH_INPUT ||
+         gesture_source_type == MOUSE_INPUT;
+#elif defined(OS_ANDROID)
+  return gesture_source_type == TOUCH_INPUT;
+#else
+  return gesture_source_type == MOUSE_INPUT;
+#endif
+}
+
 }  // namespace content
diff --git a/content/common/input/synthetic_gesture_params.h b/content/common/input/synthetic_gesture_params.h
index 323bc7d..3607bcd 100644
--- a/content/common/input/synthetic_gesture_params.h
+++ b/content/common/input/synthetic_gesture_params.h
@@ -50,6 +50,11 @@
     SYNTHETIC_GESTURE_TYPE_MAX = TAP_GESTURE
   };
   virtual GestureType GetGestureType() const = 0;
+
+  // Returns true if the specific gesture source type is supported on this
+  // platform.
+  static bool IsGestureSourceTypeSupported(
+      GestureSourceType gesture_source_type);
 };
 
 }  // namespace content
diff --git a/content/common/input/synthetic_web_input_event_builders.h b/content/common/input/synthetic_web_input_event_builders.h
index 3bf3019..622199d 100644
--- a/content/common/input/synthetic_web_input_event_builders.h
+++ b/content/common/input/synthetic_web_input_event_builders.h
@@ -17,9 +17,9 @@
  public:
   static blink::WebMouseEvent Build(blink::WebInputEvent::Type type);
   static blink::WebMouseEvent Build(blink::WebInputEvent::Type type,
-                                     int window_x,
-                                     int window_y,
-                                     int modifiers);
+                                    int window_x,
+                                    int window_y,
+                                    int modifiers);
 };
 
 class CONTENT_EXPORT SyntheticWebMouseWheelEventBuilder {
@@ -27,9 +27,9 @@
   static blink::WebMouseWheelEvent Build(
       blink::WebMouseWheelEvent::Phase phase);
   static blink::WebMouseWheelEvent Build(float dx,
-                                          float dy,
-                                          int modifiers,
-                                          bool precise);
+                                         float dy,
+                                         int modifiers,
+                                         bool precise);
 };
 
 class CONTENT_EXPORT SyntheticWebKeyboardEventBuilder {
@@ -43,14 +43,14 @@
       blink::WebInputEvent::Type type,
       blink::WebGestureEvent::SourceDevice sourceDevice);
   static blink::WebGestureEvent BuildScrollBegin(float dx_hint,
-                                                  float dy_hint);
+                                                 float dy_hint);
   static blink::WebGestureEvent BuildScrollUpdate(float dx,
-                                                   float dy,
-                                                   int modifiers);
-  static blink::WebGestureEvent BuildPinchUpdate(float scale,
-                                                  float anchor_x,
-                                                  float anchor_y,
+                                                  float dy,
                                                   int modifiers);
+  static blink::WebGestureEvent BuildPinchUpdate(float scale,
+                                                 float anchor_x,
+                                                 float anchor_y,
+                                                 int modifiers);
   static blink::WebGestureEvent BuildFling(
       float velocity_x,
       float velocity_y,
diff --git a/content/common/media/media_param_traits.cc b/content/common/media/media_param_traits.cc
index be53c94..9116b97 100644
--- a/content/common/media/media_param_traits.cc
+++ b/content/common/media/media_param_traits.cc
@@ -61,7 +61,6 @@
 void ParamTraits<VideoCaptureFormat>::Write(Message* m,
                                             const VideoCaptureFormat& p) {
   // Crash during Send rather than have a failure at the message handler.
-  CHECK(p.IsValid());
   m->WriteInt(p.frame_size.width());
   m->WriteInt(p.frame_size.height());
   m->WriteInt(p.frame_rate);
diff --git a/content/common/media/media_player_messages_android.h b/content/common/media/media_player_messages_android.h
index 60fb274..40dd56e 100644
--- a/content/common/media/media_player_messages_android.h
+++ b/content/common/media/media_player_messages_android.h
@@ -36,7 +36,7 @@
   IPC_STRUCT_TRAITS_MEMBER(is_video_encrypted)
   IPC_STRUCT_TRAITS_MEMBER(video_extra_data)
 
-  IPC_STRUCT_TRAITS_MEMBER(duration_ms)
+  IPC_STRUCT_TRAITS_MEMBER(duration)
 IPC_STRUCT_TRAITS_END()
 
 IPC_STRUCT_TRAITS_BEGIN(media::DemuxerData)
diff --git a/content/common/mojo/mojo_channel_init.cc b/content/common/mojo/mojo_channel_init.cc
deleted file mode 100644
index 16661ab..0000000
--- a/content/common/mojo/mojo_channel_init.cc
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 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.
-
-#include "content/common/mojo/mojo_channel_init.h"
-
-#include "base/bind.h"
-#include "base/message_loop/message_loop.h"
-#include "mojo/embedder/embedder.h"
-
-namespace content {
-
-MojoChannelInit::MojoChannelInit()
-    : channel_info_(NULL),
-      weak_factory_(this) {
-}
-
-MojoChannelInit::~MojoChannelInit() {
-  bootstrap_message_pipe_.reset();
-  if (channel_info_) {
-    io_thread_task_runner_->PostTask(
-        FROM_HERE,
-        base::Bind(&mojo::embedder::DestroyChannelOnIOThread, channel_info_));
-  }
-}
-
-void MojoChannelInit::Init(
-    base::PlatformFile file,
-    scoped_refptr<base::TaskRunner> io_thread_task_runner) {
-  DCHECK(!io_thread_task_runner_.get());  // Should only init once.
-  io_thread_task_runner_ = io_thread_task_runner;
-  bootstrap_message_pipe_ = mojo::embedder::CreateChannel(
-      mojo::embedder::ScopedPlatformHandle(
-          mojo::embedder::PlatformHandle(file)),
-      io_thread_task_runner,
-      base::Bind(&MojoChannelInit::OnCreatedChannel, weak_factory_.GetWeakPtr(),
-                 io_thread_task_runner),
-      base::MessageLoop::current()->message_loop_proxy()).Pass();
-}
-
-// static
-void MojoChannelInit::OnCreatedChannel(
-    base::WeakPtr<MojoChannelInit> host,
-    scoped_refptr<base::TaskRunner> io_thread,
-    mojo::embedder::ChannelInfo* channel) {
-  // By the time we get here |host| may have been destroyed. If so, shutdown the
-  // channel.
-  if (!host.get()) {
-    io_thread->PostTask(
-        FROM_HERE,
-        base::Bind(&mojo::embedder::DestroyChannelOnIOThread, channel));
-    return;
-  }
-  host->channel_info_ = channel;
-}
-
-
-}  // namespace content
diff --git a/content/common/mojo/mojo_channel_init.h b/content/common/mojo/mojo_channel_init.h
deleted file mode 100644
index 05b4e0c..0000000
--- a/content/common/mojo/mojo_channel_init.h
+++ /dev/null
@@ -1,66 +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.
-
-#ifndef CONTENT_COMMON_MOJO_MOJO_CHANNEL_INIT_H_
-#define CONTENT_COMMON_MOJO_MOJO_CHANNEL_INIT_H_
-
-#include "base/memory/ref_counted.h"
-#include "base/memory/weak_ptr.h"
-#include "base/platform_file.h"
-#include "content/common/content_export.h"
-#include "mojo/public/cpp/system/core.h"
-
-namespace base {
-class MessageLoopProxy;
-class TaskRunner;
-}
-
-namespace mojo {
-namespace embedder {
-struct ChannelInfo;
-}
-}
-
-namespace content {
-
-// MojoChannelInit handle creation (and destruction) of the mojo channel. It is
-// expected that this class is created and destroyed on the main thread.
-class CONTENT_EXPORT MojoChannelInit {
- public:
-  MojoChannelInit();
-  ~MojoChannelInit();
-
-  // Inits the channel. This takes ownership of |file|.
-  void Init(base::PlatformFile file,
-            scoped_refptr<base::TaskRunner> io_thread_task_runner);
-
-  bool is_handle_valid() const { return bootstrap_message_pipe_.is_valid(); }
-
-  mojo::ScopedMessagePipeHandle bootstrap_message_pipe() {
-    return bootstrap_message_pipe_.Pass();
-  }
-
- private:
-  // Invoked on the main thread once the channel has been established.
-  static void OnCreatedChannel(
-      base::WeakPtr<MojoChannelInit> host,
-      scoped_refptr<base::TaskRunner> io_thread,
-      mojo::embedder::ChannelInfo* channel);
-
-  scoped_refptr<base::TaskRunner> io_thread_task_runner_;
-
-  // If non-null the channel has been established.
-  mojo::embedder::ChannelInfo* channel_info_;
-
-  // The handle from channel creation.
-  mojo::ScopedMessagePipeHandle bootstrap_message_pipe_;
-
-  base::WeakPtrFactory<MojoChannelInit> weak_factory_;
-
-  DISALLOW_COPY_AND_ASSIGN(MojoChannelInit);
-};
-
-}  // namespace content
-
-#endif  // CONTENT_COMMON_MOJO_MOJO_CHANNEL_INIT_H_
diff --git a/content/common/sandbox_win.cc b/content/common/sandbox_win.cc
index 6f063d7..7c3048a 100644
--- a/content/common/sandbox_win.cc
+++ b/content/common/sandbox_win.cc
@@ -8,7 +8,6 @@
 
 #include "base/base_switches.h"
 #include "base/command_line.h"
-#include "base/debug/debugger.h"
 #include "base/debug/profiler.h"
 #include "base/debug/trace_event.h"
 #include "base/file_util.h"
@@ -25,7 +24,6 @@
 #include "content/public/common/content_switches.h"
 #include "content/public/common/sandbox_init.h"
 #include "content/public/common/sandboxed_process_launcher_delegate.h"
-#include "ipc/ipc_switches.h"
 #include "sandbox/win/src/process_mitigations.h"
 #include "sandbox/win/src/sandbox.h"
 #include "sandbox/win/src/sandbox_nt_util.h"
@@ -368,25 +366,11 @@
 
 // Updates the command line arguments with debug-related flags. If debug flags
 // have been used with this process, they will be filtered and added to
-// command_line as needed. is_in_sandbox must be true if the child process will
-// be in a sandbox.
-//
-// Returns true if the caller should "help" the child process by calling the JIT
-// debugger on it. It may only happen if is_in_sandbox is true.
-bool ProcessDebugFlags(CommandLine* command_line, bool is_in_sandbox) {
-  bool should_help_child = false;
+// command_line as needed.
+void ProcessDebugFlags(CommandLine* command_line) {
   const CommandLine& current_cmd_line = *CommandLine::ForCurrentProcess();
   std::string type = command_line->GetSwitchValueASCII(switches::kProcessType);
-  if (current_cmd_line.HasSwitch(switches::kDebugChildren)) {
-    // Look to pass-on the kDebugOnStart flag.
-    std::string value = current_cmd_line.GetSwitchValueASCII(
-        switches::kDebugChildren);
-    if (value.empty() || value == type) {
-      command_line->AppendSwitch(switches::kDebugOnStart);
-      should_help_child = true;
-    }
-    command_line->AppendSwitchASCII(switches::kDebugChildren, value);
-  } else if (current_cmd_line.HasSwitch(switches::kWaitForDebuggerChildren)) {
+  if (current_cmd_line.HasSwitch(switches::kWaitForDebuggerChildren)) {
     // Look to pass-on the kWaitForDebugger flag.
     std::string value = current_cmd_line.GetSwitchValueASCII(
         switches::kWaitForDebuggerChildren);
@@ -395,7 +379,6 @@
     }
     command_line->AppendSwitchASCII(switches::kWaitForDebuggerChildren, value);
   }
-  return should_help_child;
 }
 
 // This code is test only, and attempts to catch unsafe uses of
@@ -589,31 +572,22 @@
 
   TRACE_EVENT_BEGIN_ETW("StartProcessWithAccess", 0, type_str);
 
-  bool in_sandbox = true;
-  if (delegate)
-    in_sandbox = delegate->ShouldSandbox();
-
-  if (browser_command_line.HasSwitch(switches::kNoSandbox) ||
-      cmd_line->HasSwitch(switches::kNoSandbox)) {
-    // The user or the caller has explicity opted-out from all sandboxing.
-    in_sandbox = false;
-  }
-
-
   // Propagate the --allow-no-job flag if present.
   if (browser_command_line.HasSwitch(switches::kAllowNoSandboxJob) &&
       !cmd_line->HasSwitch(switches::kAllowNoSandboxJob)) {
     cmd_line->AppendSwitch(switches::kAllowNoSandboxJob);
   }
 
-  bool child_needs_help = ProcessDebugFlags(cmd_line, in_sandbox);
+  ProcessDebugFlags(cmd_line);
 
   // Prefetch hints on windows:
   // Using a different prefetch profile per process type will allow Windows
   // to create separate pretetch settings for browser, renderer etc.
   cmd_line->AppendArg(base::StringPrintf("/prefetch:%d", base::Hash(type_str)));
 
-  if (!in_sandbox) {
+  if ((delegate && !delegate->ShouldSandbox()) ||
+      browser_command_line.HasSwitch(switches::kNoSandbox) ||
+      cmd_line->HasSwitch(switches::kNoSandbox)) {
     base::ProcessHandle process = 0;
     base::LaunchProcess(*cmd_line, base::LaunchOptions(), &process);
     g_broker_services->AddTargetPeer(process);
@@ -721,12 +695,6 @@
     delegate->PostSpawnTarget(target.process_handle());
 
   ResumeThread(target.thread_handle());
-
-  // Help the process a little. It can't start the debugger by itself if
-  // the process is in a sandbox.
-  if (child_needs_help)
-    base::debug::SpawnDebuggerOnProcess(target.process_id());
-
   return target.TakeProcessHandle();
 }
 
diff --git a/content/common/sandbox_win.h b/content/common/sandbox_win.h
index e01cfe5..1703d7a 100644
--- a/content/common/sandbox_win.h
+++ b/content/common/sandbox_win.h
@@ -5,6 +5,7 @@
 #ifndef CONTENT_COMMON_SANDBOX_WIN_H_
 #define CONTENT_COMMON_SANDBOX_WIN_H_
 
+#include "content/common/content_export.h"
 #include "sandbox/win/src/security_level.h"
 
 namespace base {
@@ -34,7 +35,7 @@
 bool InitTargetServices(sandbox::TargetServices* target_services);
 
 // Returns whether DirectWrite font rendering should be used.
-bool ShouldUseDirectWrite();
+CONTENT_EXPORT bool ShouldUseDirectWrite();
 
 }  // namespace content
 
diff --git a/content/common/screen_orientation_messages.h b/content/common/screen_orientation_messages.h
index 6a8f4a8..b4aee2a 100644
--- a/content/common/screen_orientation_messages.h
+++ b/content/common/screen_orientation_messages.h
@@ -7,24 +7,30 @@
 
 #include "content/common/content_export.h"
 #include "ipc/ipc_message_macros.h"
-#include "third_party/WebKit/public/platform/WebScreenOrientation.h"
+#include "third_party/WebKit/public/platform/WebScreenOrientationLockType.h"
+#include "third_party/WebKit/public/platform/WebScreenOrientationType.h"
 
 #undef IPC_MESSAGE_EXPORT
 #define IPC_MESSAGE_EXPORT CONTENT_EXPORT
 
 #define IPC_MESSAGE_START ScreenOrientationMsgStart
 
-IPC_ENUM_TRAITS(blink::WebScreenOrientation)
+IPC_ENUM_TRAITS_MIN_MAX_VALUE(blink::WebScreenOrientationType,
+                              blink::WebScreenOrientationPortraitPrimary,
+                              blink::WebScreenOrientationLandscapeSecondary)
+IPC_ENUM_TRAITS_MIN_MAX_VALUE(blink::WebScreenOrientationLockType,
+                              blink::WebScreenOrientationLockDefault,
+                              blink::WebScreenOrientationLockPortrait)
 
 // The browser process informs the renderer process that the screen orientation
 // has changed. |orientation| contains the new screen orientation in degrees.
 IPC_MESSAGE_CONTROL1(ScreenOrientationMsg_OrientationChange,
-                     blink::WebScreenOrientation /* orientation */ )
+                     blink::WebScreenOrientationType /* orientation */ )
 
 // The renderer process requests the browser process to lock the screen
 // orientation to the specified |orientations|.
 IPC_MESSAGE_CONTROL1(ScreenOrientationHostMsg_Lock,
-                     blink::WebScreenOrientations /* orientations */ )
+                     blink::WebScreenOrientationLockType /* orientations */ )
 
 // The renderer process requests the browser process to unlock the screen
 // orientation.
diff --git a/content/common/service_worker/embedded_worker_messages.h b/content/common/service_worker/embedded_worker_messages.h
index 9d1a1f3..e3157f5 100644
--- a/content/common/service_worker/embedded_worker_messages.h
+++ b/content/common/service_worker/embedded_worker_messages.h
@@ -16,10 +16,22 @@
 
 #define IPC_MESSAGE_START EmbeddedWorkerMsgStart
 
+// Parameters structure for EmbeddedWorkerHostMsg_ReportConsoleMessage.
+// The data members directly correspond to parameters of
+// WorkerMessagingProxy::reportConsoleMessage()
+IPC_STRUCT_BEGIN(EmbeddedWorkerHostMsg_ReportConsoleMessage_Params)
+IPC_STRUCT_MEMBER(int, source_identifier)
+IPC_STRUCT_MEMBER(int, message_level)
+IPC_STRUCT_MEMBER(base::string16, message)
+IPC_STRUCT_MEMBER(int, line_number)
+IPC_STRUCT_MEMBER(GURL, source_url)
+IPC_STRUCT_END()
+
 // Browser -> Renderer message to create a new embedded worker context.
-IPC_MESSAGE_CONTROL3(EmbeddedWorkerMsg_StartWorker,
+IPC_MESSAGE_CONTROL4(EmbeddedWorkerMsg_StartWorker,
                      int /* embedded_worker_id */,
                      int64 /* service_worker_version_id */,
+                     GURL /* scope */,
                      GURL /* script_url */)
 
 // Browser -> Renderer message to stop (terminate) the embedded worker.
@@ -35,9 +47,9 @@
 IPC_MESSAGE_CONTROL1(EmbeddedWorkerHostMsg_WorkerStopped,
                      int /* embedded_worker_id */)
 
-// Renderer -> Browser message to send message.
-// |request_id| might be used for bi-directional messaging.
-IPC_MESSAGE_CONTROL3(EmbeddedWorkerHostMsg_SendMessageToBrowser,
+// Renderer -> Browser message to send reply message for |request_id|.
+// TODO(kinuko): Deprecate this.
+IPC_MESSAGE_CONTROL3(EmbeddedWorkerHostMsg_ReplyToBrowser,
                      int /* embedded_worker_id */,
                      int /* request_id */,
                      IPC::Message /* message */)
@@ -50,6 +62,12 @@
                      int /* column_number */,
                      GURL /* source_url */)
 
+// Renderer -> Browser message to report console message.
+IPC_MESSAGE_CONTROL2(
+    EmbeddedWorkerHostMsg_ReportConsoleMessage,
+    int /* embedded_worker_id */,
+    EmbeddedWorkerHostMsg_ReportConsoleMessage_Params /* params */)
+
 // ---------------------------------------------------------------------------
 // For EmbeddedWorkerContext related messages, which are directly sent from
 // browser to the worker thread in the child process. We use a new message class
@@ -59,8 +77,10 @@
 #define IPC_MESSAGE_START EmbeddedWorkerContextMsgStart
 
 // Browser -> Renderer message to send message.
-// |request_id| might be used for bi-directional messaging.
-IPC_MESSAGE_CONTROL4(EmbeddedWorkerContextMsg_SendMessageToWorker,
+// |request_id| might be used for bi-directional messaging (in the case where
+// browser side expects a corresponding EmbeddedWorkerHostMsg_ReplyToBrowser
+// message for the |request_id|.
+IPC_MESSAGE_CONTROL4(EmbeddedWorkerContextMsg_MessageToWorker,
                      int /* thread_id */,
                      int /* embedded_worker_id */,
                      int /* request_id */,
diff --git a/content/common/service_worker/service_worker_messages.h b/content/common/service_worker/service_worker_messages.h
index 3e40c62..93500a4 100644
--- a/content/common/service_worker/service_worker_messages.h
+++ b/content/common/service_worker/service_worker_messages.h
@@ -50,6 +50,7 @@
   IPC_STRUCT_TRAITS_MEMBER(state)
 IPC_STRUCT_TRAITS_END()
 
+//---------------------------------------------------------------------------
 // Messages sent from the child process to the browser.
 
 IPC_MESSAGE_CONTROL5(ServiceWorkerHostMsg_RegisterServiceWorker,
@@ -112,7 +113,18 @@
                      content::ServiceWorkerResponse)
 IPC_MESSAGE_CONTROL0(ServiceWorkerHostMsg_SyncEventFinished)
 
+// Asks the browser to retrieve documents controlled by the sender
+// ServiceWorker.
+IPC_MESSAGE_ROUTED1(ServiceWorkerHostMsg_GetClientDocuments,
+                    int /* request_id */)
+
+//---------------------------------------------------------------------------
 // Messages sent from the browser to the child process.
+//
+// NOTE: All ServiceWorkerMsg messages not sent via EmbeddedWorker must have
+// a thread_id as their first field so that ServiceWorkerMessageFilter can
+// extract it and dispatch the message to the correct ServiceWorkerDispatcher
+// on the correct thread.
 
 // Response to ServiceWorkerMsg_RegisterServiceWorker.
 IPC_MESSAGE_CONTROL3(ServiceWorkerMsg_ServiceWorkerRegistered,
@@ -133,11 +145,19 @@
                      blink::WebServiceWorkerError::ErrorType /* code */,
                      base::string16 /* message */)
 
-// Informs the browser that the ServiceWorker's state has changed.
-IPC_MESSAGE_CONTROL2(ServiceWorkerMsg_ServiceWorkerStateChanged,
+// Informs the child process that the ServiceWorker's state has changed.
+IPC_MESSAGE_CONTROL3(ServiceWorkerMsg_ServiceWorkerStateChanged,
+                     int /* thread_id */,
                      int /* handle_id */,
                      blink::WebServiceWorkerState)
 
+// Tells the child process to set the current ServiceWorker for the given
+// provider.
+IPC_MESSAGE_CONTROL3(ServiceWorkerMsg_SetCurrentServiceWorker,
+                     int /* thread_id */,
+                     int /* provider_id */,
+                     content::ServiceWorkerObjectInfo)
+
 // Sent via EmbeddedWorker to dispatch events.
 IPC_MESSAGE_CONTROL1(ServiceWorkerMsg_InstallEvent,
                      int /* active_version_id */)
@@ -149,3 +169,8 @@
                      std::vector<int> /* sent_message_port_ids */,
                      std::vector<int> /* new_routing_ids */)
 IPC_MESSAGE_CONTROL0(ServiceWorkerMsg_SyncEvent)
+
+// Sent via EmbeddedWorker as a response of GetClientDocuments.
+IPC_MESSAGE_CONTROL2(ServiceWorkerMsg_DidGetClientDocuments,
+                     int /* request_id */,
+                     std::vector<int> /* client_ids */)
diff --git a/content/common/service_worker/service_worker_types.cc b/content/common/service_worker/service_worker_types.cc
index 1f0f3e6..343c524 100644
--- a/content/common/service_worker/service_worker_types.cc
+++ b/content/common/service_worker/service_worker_types.cc
@@ -33,4 +33,8 @@
 
 ServiceWorkerResponse::~ServiceWorkerResponse() {}
 
+ServiceWorkerObjectInfo::ServiceWorkerObjectInfo()
+    : handle_id(kInvalidServiceWorkerHandleId),
+      state(blink::WebServiceWorkerStateUnknown) {}
+
 }  // namespace content
diff --git a/content/common/service_worker/service_worker_types.h b/content/common/service_worker/service_worker_types.h
index e9f06d4..b69c6e4 100644
--- a/content/common/service_worker/service_worker_types.h
+++ b/content/common/service_worker/service_worker_types.h
@@ -24,6 +24,7 @@
 const static int kInvalidServiceWorkerRequestId = -1;
 
 // Constants for invalid identifiers.
+const static int kInvalidServiceWorkerHandleId = -1;
 const static int kInvalidServiceWorkerProviderId = -1;
 const static int64 kInvalidServiceWorkerRegistrationId = -1;
 const static int64 kInvalidServiceWorkerVersionId = -1;
@@ -70,6 +71,7 @@
 
 // Represents initialization info for a WebServiceWorker object.
 struct CONTENT_EXPORT ServiceWorkerObjectInfo {
+  ServiceWorkerObjectInfo();
   int handle_id;
   GURL scope;
   GURL url;
diff --git a/content/common/view_messages.h b/content/common/view_messages.h
index 5bb763a..376fe24 100644
--- a/content/common/view_messages.h
+++ b/content/common/view_messages.h
@@ -440,10 +440,6 @@
   // request messages.
   IPC_STRUCT_MEMBER(int, flags)
 
-  // Whether or not the renderer expects a ViewMsg_UpdateRect_ACK for this
-  // update. True for 2D painting, but false for accelerated compositing.
-  IPC_STRUCT_MEMBER(bool, needs_ack)
-
   // All the above coordinates are in DIP. This is the scale factor needed
   // to convert them to pixels.
   IPC_STRUCT_MEMBER(float, scale_factor)
@@ -485,6 +481,12 @@
   // Whether the RenderView should initially be hidden.
   IPC_STRUCT_MEMBER(bool, hidden)
 
+  // Whether the RenderView will never be visible.
+  IPC_STRUCT_MEMBER(bool, never_visible)
+
+  // Whether the window associated with this view was created with an opener.
+  IPC_STRUCT_MEMBER(bool, window_was_created_with_opener)
+
   // The initial page ID to use for this view, which must be larger than any
   // existing navigation that might be loaded in the view.  Page IDs are unique
   // to a view and are only updated by the renderer after this initial value.
@@ -631,10 +633,6 @@
 // exit if no other views are using it.
 IPC_MESSAGE_ROUTED0(ViewMsg_WasSwappedOut)
 
-// Tells the render view that a ViewHostMsg_UpdateRect message was processed.
-// This signals the render view that it can send another UpdateRect message.
-IPC_MESSAGE_ROUTED0(ViewMsg_UpdateRect_ACK)
-
 // Tells the renderer to focus the first (last if reverse is true) focusable
 // node.
 IPC_MESSAGE_ROUTED1(ViewMsg_SetInitialFocus,
@@ -907,8 +905,8 @@
 
 // An acknowledge to ViewHostMsg_MultipleTargetsTouched to notify the renderer
 // process to release the magnified image.
-IPC_MESSAGE_ROUTED1(ViewMsg_ReleaseDisambiguationPopupDIB,
-                    TransportDIB::Handle /* DIB handle */)
+IPC_MESSAGE_ROUTED1(ViewMsg_ReleaseDisambiguationPopupBitmap,
+                    cc::SharedBitmapId /* id */)
 
 // Notifies the renderer that a snapshot has been retrieved.
 IPC_MESSAGE_ROUTED3(ViewMsg_WindowSnapshotCompleted,
@@ -1667,7 +1665,7 @@
 IPC_MESSAGE_ROUTED3(ViewHostMsg_ShowDisambiguationPopup,
                     gfx::Rect, /* Border of touched targets */
                     gfx::Size, /* Size of zoomed image */
-                    TransportDIB::Id /* DIB of zoomed image */)
+                    cc::SharedBitmapId /* id */)
 
 // Sent by the renderer process to check whether client 3D APIs
 // (Pepper 3D, WebGL) are explicitly blocked.
diff --git a/content/content.gyp b/content/content.gyp
index d4cacf7..5cc8747 100644
--- a/content/content.gyp
+++ b/content/content.gyp
@@ -6,7 +6,7 @@
   'variables': {
     'chromium_code': 1,  # Use higher warning level.
     'chromium_enable_vtune_jit_for_v8%': 0,  # enable the vtune support for V8 engine.
-    'directxsdk_exists': '<!(python <(DEPTH)/build/dir_exists.py ../third_party/directxsdk)',
+    'directxsdk_exists': '<!pymod_do_main(dir_exists ../third_party/directxsdk)',
   },
   'target_defaults': {
     'defines': ['CONTENT_IMPLEMENTATION'],
diff --git a/content/content_app_both.target.darwin-arm.mk b/content/content_app_both.target.darwin-arm.mk
index c4f0af4..0c38eb6 100644
--- a/content/content_app_both.target.darwin-arm.mk
+++ b/content/content_app_both.target.darwin-arm.mk
@@ -104,12 +104,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -232,12 +235,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -314,7 +320,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_app_both.target.darwin-mips.mk b/content/content_app_both.target.darwin-mips.mk
index eea2527..e62897f 100644
--- a/content/content_app_both.target.darwin-mips.mk
+++ b/content/content_app_both.target.darwin-mips.mk
@@ -103,12 +103,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -230,12 +233,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -310,7 +316,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_app_both.target.darwin-x86.mk b/content/content_app_both.target.darwin-x86.mk
index 98f9eb5..44da8e2 100644
--- a/content/content_app_both.target.darwin-x86.mk
+++ b/content/content_app_both.target.darwin-x86.mk
@@ -104,12 +104,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -231,12 +234,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -310,7 +316,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_app_both.target.darwin-x86_64.mk b/content/content_app_both.target.darwin-x86_64.mk
index 8858d4f..fe5c5df 100644
--- a/content/content_app_both.target.darwin-x86_64.mk
+++ b/content/content_app_both.target.darwin-x86_64.mk
@@ -105,12 +105,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -233,12 +236,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -312,7 +318,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_app_both.target.linux-arm.mk b/content/content_app_both.target.linux-arm.mk
index c4f0af4..0c38eb6 100644
--- a/content/content_app_both.target.linux-arm.mk
+++ b/content/content_app_both.target.linux-arm.mk
@@ -104,12 +104,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -232,12 +235,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -314,7 +320,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_app_both.target.linux-mips.mk b/content/content_app_both.target.linux-mips.mk
index eea2527..e62897f 100644
--- a/content/content_app_both.target.linux-mips.mk
+++ b/content/content_app_both.target.linux-mips.mk
@@ -103,12 +103,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -230,12 +233,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -310,7 +316,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_app_both.target.linux-x86.mk b/content/content_app_both.target.linux-x86.mk
index 98f9eb5..44da8e2 100644
--- a/content/content_app_both.target.linux-x86.mk
+++ b/content/content_app_both.target.linux-x86.mk
@@ -104,12 +104,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -231,12 +234,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -310,7 +316,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_app_both.target.linux-x86_64.mk b/content/content_app_both.target.linux-x86_64.mk
index 8858d4f..fe5c5df 100644
--- a/content/content_app_both.target.linux-x86_64.mk
+++ b/content/content_app_both.target.linux-x86_64.mk
@@ -105,12 +105,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -233,12 +236,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -312,7 +318,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_browser.gypi b/content/content_browser.gypi
index ed39d95..e767477 100644
--- a/content/content_browser.gypi
+++ b/content/content_browser.gypi
@@ -88,6 +88,7 @@
     'public/browser/cookie_store_factory.h',
     'public/browser/desktop_media_id.cc',
     'public/browser/desktop_media_id.h',
+    'public/browser/desktop_notification_delegate.h',
     'public/browser/devtools_agent_host.h',
     'public/browser/devtools_client_host.h',
     'public/browser/devtools_external_agent_proxy.h',
@@ -309,6 +310,8 @@
     'browser/appcache/chrome_appcache_service.h',
     'browser/appcache/view_appcache_internals_job.h',
     'browser/appcache/view_appcache_internals_job.cc',
+    'browser/battery_status/battery_status_manager_android.cc',
+    'browser/battery_status/battery_status_manager_android.h',
     'browser/browser_child_process_host_impl.cc',
     'browser/browser_child_process_host_impl.h',
     'browser/browser_context.cc',
@@ -417,22 +420,22 @@
     'browser/device_monitor_mac.mm',
     'browser/device_monitor_udev.cc',
     'browser/device_monitor_udev.h',
-    'browser/device_orientation/data_fetcher_shared_memory.h',
-    'browser/device_orientation/data_fetcher_shared_memory_android.cc',
-    'browser/device_orientation/data_fetcher_shared_memory_base.cc',
-    'browser/device_orientation/data_fetcher_shared_memory_base.h',
-    'browser/device_orientation/data_fetcher_shared_memory_default.cc',
-    'browser/device_orientation/data_fetcher_shared_memory_mac.cc',
-    'browser/device_orientation/data_fetcher_shared_memory_win.cc',
-    'browser/device_orientation/device_inertial_sensor_service.cc',
-    'browser/device_orientation/device_inertial_sensor_service.h',
-    'browser/device_orientation/device_motion_message_filter.cc',
-    'browser/device_orientation/device_motion_message_filter.h',
-    'browser/device_orientation/device_orientation_message_filter.cc',
-    'browser/device_orientation/device_orientation_message_filter.h',
-    'browser/device_orientation/inertial_sensor_consts.h',
-    'browser/device_orientation/sensor_manager_android.cc',
-    'browser/device_orientation/sensor_manager_android.h',
+    'browser/device_sensors/data_fetcher_shared_memory.h',
+    'browser/device_sensors/data_fetcher_shared_memory_android.cc',
+    'browser/device_sensors/data_fetcher_shared_memory_base.cc',
+    'browser/device_sensors/data_fetcher_shared_memory_base.h',
+    'browser/device_sensors/data_fetcher_shared_memory_default.cc',
+    'browser/device_sensors/data_fetcher_shared_memory_mac.cc',
+    'browser/device_sensors/data_fetcher_shared_memory_win.cc',
+    'browser/device_sensors/device_inertial_sensor_service.cc',
+    'browser/device_sensors/device_inertial_sensor_service.h',
+    'browser/device_sensors/device_motion_message_filter.cc',
+    'browser/device_sensors/device_motion_message_filter.h',
+    'browser/device_sensors/device_orientation_message_filter.cc',
+    'browser/device_sensors/device_orientation_message_filter.h',
+    'browser/device_sensors/inertial_sensor_consts.h',
+    'browser/device_sensors/sensor_manager_android.cc',
+    'browser/device_sensors/sensor_manager_android.h',
     'browser/dom_storage/dom_storage_area.cc',
     'browser/dom_storage/dom_storage_area.h',
     'browser/dom_storage/dom_storage_context_impl.cc',
@@ -854,14 +857,6 @@
     'browser/quota_dispatcher_host.cc',
     'browser/quota_dispatcher_host.h',
     'browser/renderer_data_memoizing_store.h',
-    'browser/renderer_host/backing_store.cc',
-    'browser/renderer_host/backing_store.h',
-    'browser/renderer_host/backing_store_aura.cc',
-    'browser/renderer_host/backing_store_aura.h',
-    'browser/renderer_host/backing_store_mac.h',
-    'browser/renderer_host/backing_store_mac.mm',
-    'browser/renderer_host/backing_store_manager.cc',
-    'browser/renderer_host/backing_store_manager.h',
     'browser/renderer_host/clipboard_message_filter.cc',
     'browser/renderer_host/clipboard_message_filter.h',
     'browser/renderer_host/clipboard_message_filter_mac.mm',
@@ -1149,8 +1144,11 @@
     'browser/service_worker/embedded_worker_registry.h',
     'browser/service_worker/service_worker_context_core.cc',
     'browser/service_worker/service_worker_context_core.h',
+    'browser/service_worker/service_worker_context_observer.h',
     'browser/service_worker/service_worker_context_wrapper.cc',
     'browser/service_worker/service_worker_context_wrapper.h',
+    'browser/service_worker/service_worker_database.cc',
+    'browser/service_worker/service_worker_database.h',
     'browser/service_worker/service_worker_dispatcher_host.cc',
     'browser/service_worker/service_worker_dispatcher_host.h',
     'browser/service_worker/service_worker_fetch_dispatcher.cc',
@@ -1474,6 +1472,11 @@
         'browser/renderer_host/p2p/socket_dispatcher_host.h',
       ],
     }],
+    ['enable_webrtc==1 and OS=="linux"', {
+      'dependencies': [
+        '../third_party/libjingle/libjingle.gyp:libjingle_webrtc',
+      ],
+    }],
     ['enable_webrtc==1 and (OS=="linux" or OS=="mac" or OS=="win")', {
       'sources': [
         'browser/media/capture/desktop_capture_device.cc',
@@ -1493,10 +1496,9 @@
         # For accessibility
         '../third_party/iaccessible2/iaccessible2.gyp:iaccessible2',
         '../third_party/isimpledom/isimpledom.gyp:isimpledom',
-        '../win8/win8.gyp:win8_util',
       ],
       'sources/': [
-        ['exclude', '^browser/device_orientation/data_fetcher_shared_memory_default.cc$'],
+        ['exclude', '^browser/device_sensors/data_fetcher_shared_memory_default.cc$'],
       ],
       'defines': [
         # This prevents the inclusion of atlhost.h which paired
@@ -1570,7 +1572,7 @@
         ],
       },
       'sources/': [
-        ['exclude', '^browser/device_orientation/data_fetcher_shared_memory_default.cc$'],
+        ['exclude', '^browser/device_sensors/data_fetcher_shared_memory_default.cc$'],
         ['exclude', '^browser/geolocation/network_location_provider\\.(cc|h)$'],
         ['exclude', '^browser/geolocation/network_location_request\\.(cc|h)$'],
         ['exclude', '^browser/tracing/tracing_ui'],
@@ -1596,7 +1598,7 @@
     }],
     ['OS=="mac"', {
       'sources/': [
-        ['exclude', '^browser/device_orientation/data_fetcher_shared_memory_default.cc$'],
+        ['exclude', '^browser/device_sensors/data_fetcher_shared_memory_default.cc$'],
       ],
       'sources!': [
         'browser/geolocation/empty_wifi_data_provider.cc',
diff --git a/content/content_browser.target.darwin-arm.mk b/content/content_browser.target.darwin-arm.mk
index ecf5bc5..83ecfde 100644
--- a/content/content_browser.target.darwin-arm.mk
+++ b/content/content_browser.target.darwin-arm.mk
@@ -122,6 +122,7 @@
 	content/browser/appcache/appcache_interceptor.cc \
 	content/browser/appcache/chrome_appcache_service.cc \
 	content/browser/appcache/view_appcache_internals_job.cc \
+	content/browser/battery_status/battery_status_manager_android.cc \
 	content/browser/browser_child_process_host_impl.cc \
 	content/browser/browser_context.cc \
 	content/browser/browser_main.cc \
@@ -159,12 +160,12 @@
 	content/browser/devtools/tethering_handler.cc \
 	content/browser/devtools/worker_devtools_manager.cc \
 	content/browser/devtools/worker_devtools_message_filter.cc \
-	content/browser/device_orientation/data_fetcher_shared_memory_android.cc \
-	content/browser/device_orientation/data_fetcher_shared_memory_base.cc \
-	content/browser/device_orientation/device_inertial_sensor_service.cc \
-	content/browser/device_orientation/device_motion_message_filter.cc \
-	content/browser/device_orientation/device_orientation_message_filter.cc \
-	content/browser/device_orientation/sensor_manager_android.cc \
+	content/browser/device_sensors/data_fetcher_shared_memory_android.cc \
+	content/browser/device_sensors/data_fetcher_shared_memory_base.cc \
+	content/browser/device_sensors/device_inertial_sensor_service.cc \
+	content/browser/device_sensors/device_motion_message_filter.cc \
+	content/browser/device_sensors/device_orientation_message_filter.cc \
+	content/browser/device_sensors/sensor_manager_android.cc \
 	content/browser/dom_storage/dom_storage_area.cc \
 	content/browser/dom_storage/dom_storage_context_impl.cc \
 	content/browser/dom_storage/dom_storage_context_wrapper.cc \
@@ -337,8 +338,6 @@
 	content/browser/profiler_message_filter.cc \
 	content/browser/push_messaging_message_filter.cc \
 	content/browser/quota_dispatcher_host.cc \
-	content/browser/renderer_host/backing_store.cc \
-	content/browser/renderer_host/backing_store_manager.cc \
 	content/browser/renderer_host/clipboard_message_filter.cc \
 	content/browser/renderer_host/compositor_impl_android.cc \
 	content/browser/renderer_host/database_message_filter.cc \
@@ -425,6 +424,7 @@
 	content/browser/service_worker/embedded_worker_registry.cc \
 	content/browser/service_worker/service_worker_context_core.cc \
 	content/browser/service_worker/service_worker_context_wrapper.cc \
+	content/browser/service_worker/service_worker_database.cc \
 	content/browser/service_worker/service_worker_dispatcher_host.cc \
 	content/browser/service_worker/service_worker_fetch_dispatcher.cc \
 	content/browser/service_worker/service_worker_handle.cc \
@@ -570,12 +570,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DPROTOBUF_USE_DLLS' \
 	'-DGOOGLE_PROTOBUF_NO_RTTI' \
@@ -742,12 +745,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DPROTOBUF_USE_DLLS' \
 	'-DGOOGLE_PROTOBUF_NO_RTTI' \
@@ -868,7 +874,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_browser.target.darwin-mips.mk b/content/content_browser.target.darwin-mips.mk
index c37f4f3..f30a6df 100644
--- a/content/content_browser.target.darwin-mips.mk
+++ b/content/content_browser.target.darwin-mips.mk
@@ -122,6 +122,7 @@
 	content/browser/appcache/appcache_interceptor.cc \
 	content/browser/appcache/chrome_appcache_service.cc \
 	content/browser/appcache/view_appcache_internals_job.cc \
+	content/browser/battery_status/battery_status_manager_android.cc \
 	content/browser/browser_child_process_host_impl.cc \
 	content/browser/browser_context.cc \
 	content/browser/browser_main.cc \
@@ -159,12 +160,12 @@
 	content/browser/devtools/tethering_handler.cc \
 	content/browser/devtools/worker_devtools_manager.cc \
 	content/browser/devtools/worker_devtools_message_filter.cc \
-	content/browser/device_orientation/data_fetcher_shared_memory_android.cc \
-	content/browser/device_orientation/data_fetcher_shared_memory_base.cc \
-	content/browser/device_orientation/device_inertial_sensor_service.cc \
-	content/browser/device_orientation/device_motion_message_filter.cc \
-	content/browser/device_orientation/device_orientation_message_filter.cc \
-	content/browser/device_orientation/sensor_manager_android.cc \
+	content/browser/device_sensors/data_fetcher_shared_memory_android.cc \
+	content/browser/device_sensors/data_fetcher_shared_memory_base.cc \
+	content/browser/device_sensors/device_inertial_sensor_service.cc \
+	content/browser/device_sensors/device_motion_message_filter.cc \
+	content/browser/device_sensors/device_orientation_message_filter.cc \
+	content/browser/device_sensors/sensor_manager_android.cc \
 	content/browser/dom_storage/dom_storage_area.cc \
 	content/browser/dom_storage/dom_storage_context_impl.cc \
 	content/browser/dom_storage/dom_storage_context_wrapper.cc \
@@ -337,8 +338,6 @@
 	content/browser/profiler_message_filter.cc \
 	content/browser/push_messaging_message_filter.cc \
 	content/browser/quota_dispatcher_host.cc \
-	content/browser/renderer_host/backing_store.cc \
-	content/browser/renderer_host/backing_store_manager.cc \
 	content/browser/renderer_host/clipboard_message_filter.cc \
 	content/browser/renderer_host/compositor_impl_android.cc \
 	content/browser/renderer_host/database_message_filter.cc \
@@ -425,6 +424,7 @@
 	content/browser/service_worker/embedded_worker_registry.cc \
 	content/browser/service_worker/service_worker_context_core.cc \
 	content/browser/service_worker/service_worker_context_wrapper.cc \
+	content/browser/service_worker/service_worker_database.cc \
 	content/browser/service_worker/service_worker_dispatcher_host.cc \
 	content/browser/service_worker/service_worker_fetch_dispatcher.cc \
 	content/browser/service_worker/service_worker_handle.cc \
@@ -569,12 +569,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DPROTOBUF_USE_DLLS' \
 	'-DGOOGLE_PROTOBUF_NO_RTTI' \
@@ -740,12 +743,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DPROTOBUF_USE_DLLS' \
 	'-DGOOGLE_PROTOBUF_NO_RTTI' \
@@ -864,7 +870,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_browser.target.darwin-x86.mk b/content/content_browser.target.darwin-x86.mk
index 7f78201..310a93e 100644
--- a/content/content_browser.target.darwin-x86.mk
+++ b/content/content_browser.target.darwin-x86.mk
@@ -122,6 +122,7 @@
 	content/browser/appcache/appcache_interceptor.cc \
 	content/browser/appcache/chrome_appcache_service.cc \
 	content/browser/appcache/view_appcache_internals_job.cc \
+	content/browser/battery_status/battery_status_manager_android.cc \
 	content/browser/browser_child_process_host_impl.cc \
 	content/browser/browser_context.cc \
 	content/browser/browser_main.cc \
@@ -159,12 +160,12 @@
 	content/browser/devtools/tethering_handler.cc \
 	content/browser/devtools/worker_devtools_manager.cc \
 	content/browser/devtools/worker_devtools_message_filter.cc \
-	content/browser/device_orientation/data_fetcher_shared_memory_android.cc \
-	content/browser/device_orientation/data_fetcher_shared_memory_base.cc \
-	content/browser/device_orientation/device_inertial_sensor_service.cc \
-	content/browser/device_orientation/device_motion_message_filter.cc \
-	content/browser/device_orientation/device_orientation_message_filter.cc \
-	content/browser/device_orientation/sensor_manager_android.cc \
+	content/browser/device_sensors/data_fetcher_shared_memory_android.cc \
+	content/browser/device_sensors/data_fetcher_shared_memory_base.cc \
+	content/browser/device_sensors/device_inertial_sensor_service.cc \
+	content/browser/device_sensors/device_motion_message_filter.cc \
+	content/browser/device_sensors/device_orientation_message_filter.cc \
+	content/browser/device_sensors/sensor_manager_android.cc \
 	content/browser/dom_storage/dom_storage_area.cc \
 	content/browser/dom_storage/dom_storage_context_impl.cc \
 	content/browser/dom_storage/dom_storage_context_wrapper.cc \
@@ -337,8 +338,6 @@
 	content/browser/profiler_message_filter.cc \
 	content/browser/push_messaging_message_filter.cc \
 	content/browser/quota_dispatcher_host.cc \
-	content/browser/renderer_host/backing_store.cc \
-	content/browser/renderer_host/backing_store_manager.cc \
 	content/browser/renderer_host/clipboard_message_filter.cc \
 	content/browser/renderer_host/compositor_impl_android.cc \
 	content/browser/renderer_host/database_message_filter.cc \
@@ -425,6 +424,7 @@
 	content/browser/service_worker/embedded_worker_registry.cc \
 	content/browser/service_worker/service_worker_context_core.cc \
 	content/browser/service_worker/service_worker_context_wrapper.cc \
+	content/browser/service_worker/service_worker_database.cc \
 	content/browser/service_worker/service_worker_dispatcher_host.cc \
 	content/browser/service_worker/service_worker_fetch_dispatcher.cc \
 	content/browser/service_worker/service_worker_handle.cc \
@@ -570,12 +570,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DPROTOBUF_USE_DLLS' \
 	'-DGOOGLE_PROTOBUF_NO_RTTI' \
@@ -741,12 +744,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DPROTOBUF_USE_DLLS' \
 	'-DGOOGLE_PROTOBUF_NO_RTTI' \
@@ -864,7 +870,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_browser.target.darwin-x86_64.mk b/content/content_browser.target.darwin-x86_64.mk
index c2c0e63..8f440f0 100644
--- a/content/content_browser.target.darwin-x86_64.mk
+++ b/content/content_browser.target.darwin-x86_64.mk
@@ -122,6 +122,7 @@
 	content/browser/appcache/appcache_interceptor.cc \
 	content/browser/appcache/chrome_appcache_service.cc \
 	content/browser/appcache/view_appcache_internals_job.cc \
+	content/browser/battery_status/battery_status_manager_android.cc \
 	content/browser/browser_child_process_host_impl.cc \
 	content/browser/browser_context.cc \
 	content/browser/browser_main.cc \
@@ -159,12 +160,12 @@
 	content/browser/devtools/tethering_handler.cc \
 	content/browser/devtools/worker_devtools_manager.cc \
 	content/browser/devtools/worker_devtools_message_filter.cc \
-	content/browser/device_orientation/data_fetcher_shared_memory_android.cc \
-	content/browser/device_orientation/data_fetcher_shared_memory_base.cc \
-	content/browser/device_orientation/device_inertial_sensor_service.cc \
-	content/browser/device_orientation/device_motion_message_filter.cc \
-	content/browser/device_orientation/device_orientation_message_filter.cc \
-	content/browser/device_orientation/sensor_manager_android.cc \
+	content/browser/device_sensors/data_fetcher_shared_memory_android.cc \
+	content/browser/device_sensors/data_fetcher_shared_memory_base.cc \
+	content/browser/device_sensors/device_inertial_sensor_service.cc \
+	content/browser/device_sensors/device_motion_message_filter.cc \
+	content/browser/device_sensors/device_orientation_message_filter.cc \
+	content/browser/device_sensors/sensor_manager_android.cc \
 	content/browser/dom_storage/dom_storage_area.cc \
 	content/browser/dom_storage/dom_storage_context_impl.cc \
 	content/browser/dom_storage/dom_storage_context_wrapper.cc \
@@ -337,8 +338,6 @@
 	content/browser/profiler_message_filter.cc \
 	content/browser/push_messaging_message_filter.cc \
 	content/browser/quota_dispatcher_host.cc \
-	content/browser/renderer_host/backing_store.cc \
-	content/browser/renderer_host/backing_store_manager.cc \
 	content/browser/renderer_host/clipboard_message_filter.cc \
 	content/browser/renderer_host/compositor_impl_android.cc \
 	content/browser/renderer_host/database_message_filter.cc \
@@ -425,6 +424,7 @@
 	content/browser/service_worker/embedded_worker_registry.cc \
 	content/browser/service_worker/service_worker_context_core.cc \
 	content/browser/service_worker/service_worker_context_wrapper.cc \
+	content/browser/service_worker/service_worker_database.cc \
 	content/browser/service_worker/service_worker_dispatcher_host.cc \
 	content/browser/service_worker/service_worker_fetch_dispatcher.cc \
 	content/browser/service_worker/service_worker_handle.cc \
@@ -571,12 +571,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DPROTOBUF_USE_DLLS' \
 	'-DGOOGLE_PROTOBUF_NO_RTTI' \
@@ -743,12 +746,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DPROTOBUF_USE_DLLS' \
 	'-DGOOGLE_PROTOBUF_NO_RTTI' \
@@ -866,7 +872,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_browser.target.linux-arm.mk b/content/content_browser.target.linux-arm.mk
index ecf5bc5..83ecfde 100644
--- a/content/content_browser.target.linux-arm.mk
+++ b/content/content_browser.target.linux-arm.mk
@@ -122,6 +122,7 @@
 	content/browser/appcache/appcache_interceptor.cc \
 	content/browser/appcache/chrome_appcache_service.cc \
 	content/browser/appcache/view_appcache_internals_job.cc \
+	content/browser/battery_status/battery_status_manager_android.cc \
 	content/browser/browser_child_process_host_impl.cc \
 	content/browser/browser_context.cc \
 	content/browser/browser_main.cc \
@@ -159,12 +160,12 @@
 	content/browser/devtools/tethering_handler.cc \
 	content/browser/devtools/worker_devtools_manager.cc \
 	content/browser/devtools/worker_devtools_message_filter.cc \
-	content/browser/device_orientation/data_fetcher_shared_memory_android.cc \
-	content/browser/device_orientation/data_fetcher_shared_memory_base.cc \
-	content/browser/device_orientation/device_inertial_sensor_service.cc \
-	content/browser/device_orientation/device_motion_message_filter.cc \
-	content/browser/device_orientation/device_orientation_message_filter.cc \
-	content/browser/device_orientation/sensor_manager_android.cc \
+	content/browser/device_sensors/data_fetcher_shared_memory_android.cc \
+	content/browser/device_sensors/data_fetcher_shared_memory_base.cc \
+	content/browser/device_sensors/device_inertial_sensor_service.cc \
+	content/browser/device_sensors/device_motion_message_filter.cc \
+	content/browser/device_sensors/device_orientation_message_filter.cc \
+	content/browser/device_sensors/sensor_manager_android.cc \
 	content/browser/dom_storage/dom_storage_area.cc \
 	content/browser/dom_storage/dom_storage_context_impl.cc \
 	content/browser/dom_storage/dom_storage_context_wrapper.cc \
@@ -337,8 +338,6 @@
 	content/browser/profiler_message_filter.cc \
 	content/browser/push_messaging_message_filter.cc \
 	content/browser/quota_dispatcher_host.cc \
-	content/browser/renderer_host/backing_store.cc \
-	content/browser/renderer_host/backing_store_manager.cc \
 	content/browser/renderer_host/clipboard_message_filter.cc \
 	content/browser/renderer_host/compositor_impl_android.cc \
 	content/browser/renderer_host/database_message_filter.cc \
@@ -425,6 +424,7 @@
 	content/browser/service_worker/embedded_worker_registry.cc \
 	content/browser/service_worker/service_worker_context_core.cc \
 	content/browser/service_worker/service_worker_context_wrapper.cc \
+	content/browser/service_worker/service_worker_database.cc \
 	content/browser/service_worker/service_worker_dispatcher_host.cc \
 	content/browser/service_worker/service_worker_fetch_dispatcher.cc \
 	content/browser/service_worker/service_worker_handle.cc \
@@ -570,12 +570,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DPROTOBUF_USE_DLLS' \
 	'-DGOOGLE_PROTOBUF_NO_RTTI' \
@@ -742,12 +745,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DPROTOBUF_USE_DLLS' \
 	'-DGOOGLE_PROTOBUF_NO_RTTI' \
@@ -868,7 +874,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_browser.target.linux-mips.mk b/content/content_browser.target.linux-mips.mk
index c37f4f3..f30a6df 100644
--- a/content/content_browser.target.linux-mips.mk
+++ b/content/content_browser.target.linux-mips.mk
@@ -122,6 +122,7 @@
 	content/browser/appcache/appcache_interceptor.cc \
 	content/browser/appcache/chrome_appcache_service.cc \
 	content/browser/appcache/view_appcache_internals_job.cc \
+	content/browser/battery_status/battery_status_manager_android.cc \
 	content/browser/browser_child_process_host_impl.cc \
 	content/browser/browser_context.cc \
 	content/browser/browser_main.cc \
@@ -159,12 +160,12 @@
 	content/browser/devtools/tethering_handler.cc \
 	content/browser/devtools/worker_devtools_manager.cc \
 	content/browser/devtools/worker_devtools_message_filter.cc \
-	content/browser/device_orientation/data_fetcher_shared_memory_android.cc \
-	content/browser/device_orientation/data_fetcher_shared_memory_base.cc \
-	content/browser/device_orientation/device_inertial_sensor_service.cc \
-	content/browser/device_orientation/device_motion_message_filter.cc \
-	content/browser/device_orientation/device_orientation_message_filter.cc \
-	content/browser/device_orientation/sensor_manager_android.cc \
+	content/browser/device_sensors/data_fetcher_shared_memory_android.cc \
+	content/browser/device_sensors/data_fetcher_shared_memory_base.cc \
+	content/browser/device_sensors/device_inertial_sensor_service.cc \
+	content/browser/device_sensors/device_motion_message_filter.cc \
+	content/browser/device_sensors/device_orientation_message_filter.cc \
+	content/browser/device_sensors/sensor_manager_android.cc \
 	content/browser/dom_storage/dom_storage_area.cc \
 	content/browser/dom_storage/dom_storage_context_impl.cc \
 	content/browser/dom_storage/dom_storage_context_wrapper.cc \
@@ -337,8 +338,6 @@
 	content/browser/profiler_message_filter.cc \
 	content/browser/push_messaging_message_filter.cc \
 	content/browser/quota_dispatcher_host.cc \
-	content/browser/renderer_host/backing_store.cc \
-	content/browser/renderer_host/backing_store_manager.cc \
 	content/browser/renderer_host/clipboard_message_filter.cc \
 	content/browser/renderer_host/compositor_impl_android.cc \
 	content/browser/renderer_host/database_message_filter.cc \
@@ -425,6 +424,7 @@
 	content/browser/service_worker/embedded_worker_registry.cc \
 	content/browser/service_worker/service_worker_context_core.cc \
 	content/browser/service_worker/service_worker_context_wrapper.cc \
+	content/browser/service_worker/service_worker_database.cc \
 	content/browser/service_worker/service_worker_dispatcher_host.cc \
 	content/browser/service_worker/service_worker_fetch_dispatcher.cc \
 	content/browser/service_worker/service_worker_handle.cc \
@@ -569,12 +569,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DPROTOBUF_USE_DLLS' \
 	'-DGOOGLE_PROTOBUF_NO_RTTI' \
@@ -740,12 +743,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DPROTOBUF_USE_DLLS' \
 	'-DGOOGLE_PROTOBUF_NO_RTTI' \
@@ -864,7 +870,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_browser.target.linux-x86.mk b/content/content_browser.target.linux-x86.mk
index 7f78201..310a93e 100644
--- a/content/content_browser.target.linux-x86.mk
+++ b/content/content_browser.target.linux-x86.mk
@@ -122,6 +122,7 @@
 	content/browser/appcache/appcache_interceptor.cc \
 	content/browser/appcache/chrome_appcache_service.cc \
 	content/browser/appcache/view_appcache_internals_job.cc \
+	content/browser/battery_status/battery_status_manager_android.cc \
 	content/browser/browser_child_process_host_impl.cc \
 	content/browser/browser_context.cc \
 	content/browser/browser_main.cc \
@@ -159,12 +160,12 @@
 	content/browser/devtools/tethering_handler.cc \
 	content/browser/devtools/worker_devtools_manager.cc \
 	content/browser/devtools/worker_devtools_message_filter.cc \
-	content/browser/device_orientation/data_fetcher_shared_memory_android.cc \
-	content/browser/device_orientation/data_fetcher_shared_memory_base.cc \
-	content/browser/device_orientation/device_inertial_sensor_service.cc \
-	content/browser/device_orientation/device_motion_message_filter.cc \
-	content/browser/device_orientation/device_orientation_message_filter.cc \
-	content/browser/device_orientation/sensor_manager_android.cc \
+	content/browser/device_sensors/data_fetcher_shared_memory_android.cc \
+	content/browser/device_sensors/data_fetcher_shared_memory_base.cc \
+	content/browser/device_sensors/device_inertial_sensor_service.cc \
+	content/browser/device_sensors/device_motion_message_filter.cc \
+	content/browser/device_sensors/device_orientation_message_filter.cc \
+	content/browser/device_sensors/sensor_manager_android.cc \
 	content/browser/dom_storage/dom_storage_area.cc \
 	content/browser/dom_storage/dom_storage_context_impl.cc \
 	content/browser/dom_storage/dom_storage_context_wrapper.cc \
@@ -337,8 +338,6 @@
 	content/browser/profiler_message_filter.cc \
 	content/browser/push_messaging_message_filter.cc \
 	content/browser/quota_dispatcher_host.cc \
-	content/browser/renderer_host/backing_store.cc \
-	content/browser/renderer_host/backing_store_manager.cc \
 	content/browser/renderer_host/clipboard_message_filter.cc \
 	content/browser/renderer_host/compositor_impl_android.cc \
 	content/browser/renderer_host/database_message_filter.cc \
@@ -425,6 +424,7 @@
 	content/browser/service_worker/embedded_worker_registry.cc \
 	content/browser/service_worker/service_worker_context_core.cc \
 	content/browser/service_worker/service_worker_context_wrapper.cc \
+	content/browser/service_worker/service_worker_database.cc \
 	content/browser/service_worker/service_worker_dispatcher_host.cc \
 	content/browser/service_worker/service_worker_fetch_dispatcher.cc \
 	content/browser/service_worker/service_worker_handle.cc \
@@ -570,12 +570,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DPROTOBUF_USE_DLLS' \
 	'-DGOOGLE_PROTOBUF_NO_RTTI' \
@@ -741,12 +744,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DPROTOBUF_USE_DLLS' \
 	'-DGOOGLE_PROTOBUF_NO_RTTI' \
@@ -864,7 +870,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_browser.target.linux-x86_64.mk b/content/content_browser.target.linux-x86_64.mk
index c2c0e63..8f440f0 100644
--- a/content/content_browser.target.linux-x86_64.mk
+++ b/content/content_browser.target.linux-x86_64.mk
@@ -122,6 +122,7 @@
 	content/browser/appcache/appcache_interceptor.cc \
 	content/browser/appcache/chrome_appcache_service.cc \
 	content/browser/appcache/view_appcache_internals_job.cc \
+	content/browser/battery_status/battery_status_manager_android.cc \
 	content/browser/browser_child_process_host_impl.cc \
 	content/browser/browser_context.cc \
 	content/browser/browser_main.cc \
@@ -159,12 +160,12 @@
 	content/browser/devtools/tethering_handler.cc \
 	content/browser/devtools/worker_devtools_manager.cc \
 	content/browser/devtools/worker_devtools_message_filter.cc \
-	content/browser/device_orientation/data_fetcher_shared_memory_android.cc \
-	content/browser/device_orientation/data_fetcher_shared_memory_base.cc \
-	content/browser/device_orientation/device_inertial_sensor_service.cc \
-	content/browser/device_orientation/device_motion_message_filter.cc \
-	content/browser/device_orientation/device_orientation_message_filter.cc \
-	content/browser/device_orientation/sensor_manager_android.cc \
+	content/browser/device_sensors/data_fetcher_shared_memory_android.cc \
+	content/browser/device_sensors/data_fetcher_shared_memory_base.cc \
+	content/browser/device_sensors/device_inertial_sensor_service.cc \
+	content/browser/device_sensors/device_motion_message_filter.cc \
+	content/browser/device_sensors/device_orientation_message_filter.cc \
+	content/browser/device_sensors/sensor_manager_android.cc \
 	content/browser/dom_storage/dom_storage_area.cc \
 	content/browser/dom_storage/dom_storage_context_impl.cc \
 	content/browser/dom_storage/dom_storage_context_wrapper.cc \
@@ -337,8 +338,6 @@
 	content/browser/profiler_message_filter.cc \
 	content/browser/push_messaging_message_filter.cc \
 	content/browser/quota_dispatcher_host.cc \
-	content/browser/renderer_host/backing_store.cc \
-	content/browser/renderer_host/backing_store_manager.cc \
 	content/browser/renderer_host/clipboard_message_filter.cc \
 	content/browser/renderer_host/compositor_impl_android.cc \
 	content/browser/renderer_host/database_message_filter.cc \
@@ -425,6 +424,7 @@
 	content/browser/service_worker/embedded_worker_registry.cc \
 	content/browser/service_worker/service_worker_context_core.cc \
 	content/browser/service_worker/service_worker_context_wrapper.cc \
+	content/browser/service_worker/service_worker_database.cc \
 	content/browser/service_worker/service_worker_dispatcher_host.cc \
 	content/browser/service_worker/service_worker_fetch_dispatcher.cc \
 	content/browser/service_worker/service_worker_handle.cc \
@@ -571,12 +571,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DPROTOBUF_USE_DLLS' \
 	'-DGOOGLE_PROTOBUF_NO_RTTI' \
@@ -743,12 +746,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DPROTOBUF_USE_DLLS' \
 	'-DGOOGLE_PROTOBUF_NO_RTTI' \
@@ -866,7 +872,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_child.target.darwin-arm.mk b/content/content_child.target.darwin-arm.mk
index 87f4f81..9b68c2b 100644
--- a/content/content_child.target.darwin-arm.mk
+++ b/content/content_child.target.darwin-arm.mk
@@ -174,12 +174,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
@@ -317,12 +320,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
@@ -417,7 +423,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_child.target.darwin-mips.mk b/content/content_child.target.darwin-mips.mk
index 81dc7ed..da78e1a 100644
--- a/content/content_child.target.darwin-mips.mk
+++ b/content/content_child.target.darwin-mips.mk
@@ -173,12 +173,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
@@ -315,12 +318,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
@@ -413,7 +419,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_child.target.darwin-x86.mk b/content/content_child.target.darwin-x86.mk
index 92899b5..84a0788 100644
--- a/content/content_child.target.darwin-x86.mk
+++ b/content/content_child.target.darwin-x86.mk
@@ -175,12 +175,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -317,12 +320,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -413,7 +419,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_child.target.darwin-x86_64.mk b/content/content_child.target.darwin-x86_64.mk
index c6a30fd..5928d59 100644
--- a/content/content_child.target.darwin-x86_64.mk
+++ b/content/content_child.target.darwin-x86_64.mk
@@ -175,12 +175,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
@@ -319,12 +322,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
@@ -417,7 +423,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_child.target.linux-arm.mk b/content/content_child.target.linux-arm.mk
index 87f4f81..9b68c2b 100644
--- a/content/content_child.target.linux-arm.mk
+++ b/content/content_child.target.linux-arm.mk
@@ -174,12 +174,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
@@ -317,12 +320,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
@@ -417,7 +423,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_child.target.linux-mips.mk b/content/content_child.target.linux-mips.mk
index 81dc7ed..da78e1a 100644
--- a/content/content_child.target.linux-mips.mk
+++ b/content/content_child.target.linux-mips.mk
@@ -173,12 +173,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
@@ -315,12 +318,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
@@ -413,7 +419,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_child.target.linux-x86.mk b/content/content_child.target.linux-x86.mk
index 92899b5..84a0788 100644
--- a/content/content_child.target.linux-x86.mk
+++ b/content/content_child.target.linux-x86.mk
@@ -175,12 +175,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -317,12 +320,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -413,7 +419,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_child.target.linux-x86_64.mk b/content/content_child.target.linux-x86_64.mk
index c6a30fd..5928d59 100644
--- a/content/content_child.target.linux-x86_64.mk
+++ b/content/content_child.target.linux-x86_64.mk
@@ -175,12 +175,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
@@ -319,12 +322,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
@@ -417,7 +423,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_common.gypi b/content/content_common.gypi
index 24b95d1..a4d16c3 100644
--- a/content/content_common.gypi
+++ b/content/content_common.gypi
@@ -178,10 +178,10 @@
     'common/database_messages.h',
     'common/date_time_suggestion.h',
     'common/desktop_notification_messages.h',
-    'common/device_orientation/device_motion_hardware_buffer.h',
-    'common/device_orientation/device_motion_messages.h',
-    'common/device_orientation/device_orientation_hardware_buffer.h',
-    'common/device_orientation/device_orientation_messages.h',
+    'common/device_sensors/device_motion_hardware_buffer.h',
+    'common/device_sensors/device_motion_messages.h',
+    'common/device_sensors/device_orientation_hardware_buffer.h',
+    'common/device_sensors/device_orientation_messages.h',
     'common/devtools_messages.h',
     'common/dom_storage/dom_storage_map.cc',
     'common/dom_storage/dom_storage_map.h',
@@ -351,8 +351,6 @@
     'common/message_router.cc',
     'common/message_router.h',
     'common/mime_registry_messages.h',
-    'common/mojo/mojo_channel_init.cc',
-    'common/mojo/mojo_channel_init.h',
     'common/mojo/mojo_messages.h',
     'common/navigation_gesture.h',
     'common/net/url_fetcher.cc',
@@ -504,6 +502,9 @@
         '../gpu/gpu.gyp:command_buffer_service',
         '../gpu/gpu.gyp:gles2_c_lib',
         '../gpu/gpu.gyp:gles2_implementation',
+        # TODO: the dependency on gl_in_process_context should be decoupled from
+        # content and moved to android_webview. See crbug.com/365797.
+        '../gpu/gpu.gyp:gl_in_process_context',
         '../gpu/gpu.gyp:gpu_ipc',
         '../gpu/skia_bindings/skia_bindings.gyp:gpu_skia_bindings',
         '../ipc/ipc.gyp:ipc',
diff --git a/content/content_common.target.darwin-arm.mk b/content/content_common.target.darwin-arm.mk
index 6d1d9a4..38fd4ef 100644
--- a/content/content_common.target.darwin-arm.mk
+++ b/content/content_common.target.darwin-arm.mk
@@ -140,7 +140,6 @@
 	content/common/media/media_param_traits.cc \
 	content/common/media/media_stream_options.cc \
 	content/common/message_router.cc \
-	content/common/mojo/mojo_channel_init.cc \
 	content/common/net/url_fetcher.cc \
 	content/common/net/url_request_user_data.cc \
 	content/common/one_writer_seqlock.cc \
@@ -182,7 +181,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-fno-tree-sra \
 	-fuse-ld=gold \
 	-Wno-psabi \
@@ -236,12 +234,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -347,7 +348,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-fno-tree-sra \
 	-fuse-ld=gold \
 	-Wno-psabi \
@@ -401,12 +401,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -519,7 +522,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_common.target.darwin-mips.mk b/content/content_common.target.darwin-mips.mk
index 362048c..498fc1e 100644
--- a/content/content_common.target.darwin-mips.mk
+++ b/content/content_common.target.darwin-mips.mk
@@ -140,7 +140,6 @@
 	content/common/media/media_param_traits.cc \
 	content/common/media/media_stream_options.cc \
 	content/common/message_router.cc \
-	content/common/mojo/mojo_channel_init.cc \
 	content/common/net/url_fetcher.cc \
 	content/common/net/url_request_user_data.cc \
 	content/common/one_writer_seqlock.cc \
@@ -180,7 +179,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-EL \
 	-mhard-float \
 	-ffunction-sections \
@@ -232,12 +230,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -343,7 +344,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-EL \
 	-mhard-float \
 	-ffunction-sections \
@@ -395,12 +395,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -511,7 +514,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_common.target.darwin-x86.mk b/content/content_common.target.darwin-x86.mk
index 647a2f6..22421bf 100644
--- a/content/content_common.target.darwin-x86.mk
+++ b/content/content_common.target.darwin-x86.mk
@@ -140,7 +140,6 @@
 	content/common/media/media_param_traits.cc \
 	content/common/media/media_stream_options.cc \
 	content/common/message_router.cc \
-	content/common/mojo/mojo_channel_init.cc \
 	content/common/net/url_fetcher.cc \
 	content/common/net/url_request_user_data.cc \
 	content/common/one_writer_seqlock.cc \
@@ -181,7 +180,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-msse2 \
 	-mfpmath=sse \
 	-mmmx \
@@ -236,12 +234,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -345,7 +346,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-msse2 \
 	-mfpmath=sse \
 	-mmmx \
@@ -400,12 +400,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -515,7 +518,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_common.target.darwin-x86_64.mk b/content/content_common.target.darwin-x86_64.mk
index a3be7eb..4b31f01 100644
--- a/content/content_common.target.darwin-x86_64.mk
+++ b/content/content_common.target.darwin-x86_64.mk
@@ -140,7 +140,6 @@
 	content/common/media/media_param_traits.cc \
 	content/common/media/media_stream_options.cc \
 	content/common/message_router.cc \
-	content/common/mojo/mojo_channel_init.cc \
 	content/common/net/url_fetcher.cc \
 	content/common/net/url_request_user_data.cc \
 	content/common/one_writer_seqlock.cc \
@@ -183,7 +182,6 @@
 	-pipe \
 	-fPIC \
 	-Wno-unused-local-typedefs \
-	-Wno-unknown-pragmas \
 	-m64 \
 	-march=x86-64 \
 	-fuse-ld=gold \
@@ -237,12 +235,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -348,7 +349,6 @@
 	-pipe \
 	-fPIC \
 	-Wno-unused-local-typedefs \
-	-Wno-unknown-pragmas \
 	-m64 \
 	-march=x86-64 \
 	-fuse-ld=gold \
@@ -402,12 +402,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -517,7 +520,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_common.target.linux-arm.mk b/content/content_common.target.linux-arm.mk
index 6d1d9a4..38fd4ef 100644
--- a/content/content_common.target.linux-arm.mk
+++ b/content/content_common.target.linux-arm.mk
@@ -140,7 +140,6 @@
 	content/common/media/media_param_traits.cc \
 	content/common/media/media_stream_options.cc \
 	content/common/message_router.cc \
-	content/common/mojo/mojo_channel_init.cc \
 	content/common/net/url_fetcher.cc \
 	content/common/net/url_request_user_data.cc \
 	content/common/one_writer_seqlock.cc \
@@ -182,7 +181,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-fno-tree-sra \
 	-fuse-ld=gold \
 	-Wno-psabi \
@@ -236,12 +234,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -347,7 +348,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-fno-tree-sra \
 	-fuse-ld=gold \
 	-Wno-psabi \
@@ -401,12 +401,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -519,7 +522,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_common.target.linux-mips.mk b/content/content_common.target.linux-mips.mk
index 362048c..498fc1e 100644
--- a/content/content_common.target.linux-mips.mk
+++ b/content/content_common.target.linux-mips.mk
@@ -140,7 +140,6 @@
 	content/common/media/media_param_traits.cc \
 	content/common/media/media_stream_options.cc \
 	content/common/message_router.cc \
-	content/common/mojo/mojo_channel_init.cc \
 	content/common/net/url_fetcher.cc \
 	content/common/net/url_request_user_data.cc \
 	content/common/one_writer_seqlock.cc \
@@ -180,7 +179,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-EL \
 	-mhard-float \
 	-ffunction-sections \
@@ -232,12 +230,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -343,7 +344,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-EL \
 	-mhard-float \
 	-ffunction-sections \
@@ -395,12 +395,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -511,7 +514,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_common.target.linux-x86.mk b/content/content_common.target.linux-x86.mk
index 647a2f6..22421bf 100644
--- a/content/content_common.target.linux-x86.mk
+++ b/content/content_common.target.linux-x86.mk
@@ -140,7 +140,6 @@
 	content/common/media/media_param_traits.cc \
 	content/common/media/media_stream_options.cc \
 	content/common/message_router.cc \
-	content/common/mojo/mojo_channel_init.cc \
 	content/common/net/url_fetcher.cc \
 	content/common/net/url_request_user_data.cc \
 	content/common/one_writer_seqlock.cc \
@@ -181,7 +180,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-msse2 \
 	-mfpmath=sse \
 	-mmmx \
@@ -236,12 +234,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -345,7 +346,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-msse2 \
 	-mfpmath=sse \
 	-mmmx \
@@ -400,12 +400,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -515,7 +518,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_common.target.linux-x86_64.mk b/content/content_common.target.linux-x86_64.mk
index a3be7eb..4b31f01 100644
--- a/content/content_common.target.linux-x86_64.mk
+++ b/content/content_common.target.linux-x86_64.mk
@@ -140,7 +140,6 @@
 	content/common/media/media_param_traits.cc \
 	content/common/media/media_stream_options.cc \
 	content/common/message_router.cc \
-	content/common/mojo/mojo_channel_init.cc \
 	content/common/net/url_fetcher.cc \
 	content/common/net/url_request_user_data.cc \
 	content/common/one_writer_seqlock.cc \
@@ -183,7 +182,6 @@
 	-pipe \
 	-fPIC \
 	-Wno-unused-local-typedefs \
-	-Wno-unknown-pragmas \
 	-m64 \
 	-march=x86-64 \
 	-fuse-ld=gold \
@@ -237,12 +235,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -348,7 +349,6 @@
 	-pipe \
 	-fPIC \
 	-Wno-unused-local-typedefs \
-	-Wno-unknown-pragmas \
 	-m64 \
 	-march=x86-64 \
 	-fuse-ld=gold \
@@ -402,12 +402,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DFEATURE_ENABLE_SSL' \
 	'-DFEATURE_ENABLE_VOICEMAIL' \
@@ -517,7 +520,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_common_mojo_bindings.target.darwin-arm.mk b/content/content_common_mojo_bindings.target.darwin-arm.mk
index a5cf9ad..f171618 100644
--- a/content/content_common_mojo_bindings.target.darwin-arm.mk
+++ b/content/content_common_mojo_bindings.target.darwin-arm.mk
@@ -15,12 +15,12 @@
 
 
 ### Generated for rule "content_content_gyp_content_common_mojo_bindings_target_Generate_C___source_files_from_mojom_files":
-# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/parse/__init__.py', '../mojo/public/tools/bindings/pylib/parse/mojo_lexer.py', '../mojo/public/tools/bindings/pylib/parse/mojo_parser.py', '../mojo/public/tools/bindings/pylib/parse/mojo_translate.py', '../mojo/public/tools/bindings/pylib/generate/__init__.py', '../mojo/public/tools/bindings/pylib/generate/mojom.py', '../mojo/public/tools/bindings/pylib/generate/mojom_data.py', '../mojo/public/tools/bindings/pylib/generate/mojom_generator.py', '../mojo/public/tools/bindings/pylib/generate/mojom_pack.py', '../mojo/public/tools/bindings/pylib/generate/template_expander.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['common/mojo/render_process.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', '%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
+# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/generate/data.py', '../mojo/public/tools/bindings/pylib/mojom/generate/generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/module.py', '../mojo/public/tools/bindings/pylib/mojom/generate/pack.py', '../mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py', '../mojo/public/tools/bindings/pylib/mojom/parse/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/parse/ast.py', '../mojo/public/tools/bindings/pylib/mojom/parse/lexer.py', '../mojo/public/tools/bindings/pylib/mojom/parse/parser.py', '../mojo/public/tools/bindings/pylib/mojom/parse/translate.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['common/mojo/render_process.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', '%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
 $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: $(LOCAL_PATH)/content/common/mojo/render_process.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_translate.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/template_expander.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: $(LOCAL_PATH)/content/common/mojo/render_process.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/module.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/ast.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/translate.py $(GYP_TARGET_DEPENDENCIES)
 	mkdir -p $(gyp_shared_intermediate_dir)/content/common/mojo; cd $(gyp_local_path)/content; python ../mojo/public/tools/bindings/mojom_bindings_generator.py common/mojo/render_process.mojom -d .. -o "$(gyp_shared_intermediate_dir)/content/common/mojo"
 
 $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.h: $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc ;
@@ -250,7 +250,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_common_mojo_bindings.target.darwin-mips.mk b/content/content_common_mojo_bindings.target.darwin-mips.mk
index 6db26d8..32bd821 100644
--- a/content/content_common_mojo_bindings.target.darwin-mips.mk
+++ b/content/content_common_mojo_bindings.target.darwin-mips.mk
@@ -15,12 +15,12 @@
 
 
 ### Generated for rule "content_content_gyp_content_common_mojo_bindings_target_Generate_C___source_files_from_mojom_files":
-# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/parse/__init__.py', '../mojo/public/tools/bindings/pylib/parse/mojo_lexer.py', '../mojo/public/tools/bindings/pylib/parse/mojo_parser.py', '../mojo/public/tools/bindings/pylib/parse/mojo_translate.py', '../mojo/public/tools/bindings/pylib/generate/__init__.py', '../mojo/public/tools/bindings/pylib/generate/mojom.py', '../mojo/public/tools/bindings/pylib/generate/mojom_data.py', '../mojo/public/tools/bindings/pylib/generate/mojom_generator.py', '../mojo/public/tools/bindings/pylib/generate/mojom_pack.py', '../mojo/public/tools/bindings/pylib/generate/template_expander.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['common/mojo/render_process.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', '%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
+# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/generate/data.py', '../mojo/public/tools/bindings/pylib/mojom/generate/generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/module.py', '../mojo/public/tools/bindings/pylib/mojom/generate/pack.py', '../mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py', '../mojo/public/tools/bindings/pylib/mojom/parse/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/parse/ast.py', '../mojo/public/tools/bindings/pylib/mojom/parse/lexer.py', '../mojo/public/tools/bindings/pylib/mojom/parse/parser.py', '../mojo/public/tools/bindings/pylib/mojom/parse/translate.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['common/mojo/render_process.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', '%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
 $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: $(LOCAL_PATH)/content/common/mojo/render_process.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_translate.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/template_expander.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: $(LOCAL_PATH)/content/common/mojo/render_process.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/module.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/ast.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/translate.py $(GYP_TARGET_DEPENDENCIES)
 	mkdir -p $(gyp_shared_intermediate_dir)/content/common/mojo; cd $(gyp_local_path)/content; python ../mojo/public/tools/bindings/mojom_bindings_generator.py common/mojo/render_process.mojom -d .. -o "$(gyp_shared_intermediate_dir)/content/common/mojo"
 
 $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.h: $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc ;
@@ -246,7 +246,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_common_mojo_bindings.target.darwin-x86.mk b/content/content_common_mojo_bindings.target.darwin-x86.mk
index e142ce3..2923d71 100644
--- a/content/content_common_mojo_bindings.target.darwin-x86.mk
+++ b/content/content_common_mojo_bindings.target.darwin-x86.mk
@@ -15,12 +15,12 @@
 
 
 ### Generated for rule "content_content_gyp_content_common_mojo_bindings_target_Generate_C___source_files_from_mojom_files":
-# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/parse/__init__.py', '../mojo/public/tools/bindings/pylib/parse/mojo_lexer.py', '../mojo/public/tools/bindings/pylib/parse/mojo_parser.py', '../mojo/public/tools/bindings/pylib/parse/mojo_translate.py', '../mojo/public/tools/bindings/pylib/generate/__init__.py', '../mojo/public/tools/bindings/pylib/generate/mojom.py', '../mojo/public/tools/bindings/pylib/generate/mojom_data.py', '../mojo/public/tools/bindings/pylib/generate/mojom_generator.py', '../mojo/public/tools/bindings/pylib/generate/mojom_pack.py', '../mojo/public/tools/bindings/pylib/generate/template_expander.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['common/mojo/render_process.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', '%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
+# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/generate/data.py', '../mojo/public/tools/bindings/pylib/mojom/generate/generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/module.py', '../mojo/public/tools/bindings/pylib/mojom/generate/pack.py', '../mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py', '../mojo/public/tools/bindings/pylib/mojom/parse/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/parse/ast.py', '../mojo/public/tools/bindings/pylib/mojom/parse/lexer.py', '../mojo/public/tools/bindings/pylib/mojom/parse/parser.py', '../mojo/public/tools/bindings/pylib/mojom/parse/translate.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['common/mojo/render_process.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', '%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
 $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: $(LOCAL_PATH)/content/common/mojo/render_process.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_translate.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/template_expander.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: $(LOCAL_PATH)/content/common/mojo/render_process.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/module.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/ast.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/translate.py $(GYP_TARGET_DEPENDENCIES)
 	mkdir -p $(gyp_shared_intermediate_dir)/content/common/mojo; cd $(gyp_local_path)/content; python ../mojo/public/tools/bindings/mojom_bindings_generator.py common/mojo/render_process.mojom -d .. -o "$(gyp_shared_intermediate_dir)/content/common/mojo"
 
 $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.h: $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc ;
@@ -248,7 +248,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_common_mojo_bindings.target.darwin-x86_64.mk b/content/content_common_mojo_bindings.target.darwin-x86_64.mk
index 8574721..ee78952 100644
--- a/content/content_common_mojo_bindings.target.darwin-x86_64.mk
+++ b/content/content_common_mojo_bindings.target.darwin-x86_64.mk
@@ -15,12 +15,12 @@
 
 
 ### Generated for rule "content_content_gyp_content_common_mojo_bindings_target_Generate_C___source_files_from_mojom_files":
-# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/parse/__init__.py', '../mojo/public/tools/bindings/pylib/parse/mojo_lexer.py', '../mojo/public/tools/bindings/pylib/parse/mojo_parser.py', '../mojo/public/tools/bindings/pylib/parse/mojo_translate.py', '../mojo/public/tools/bindings/pylib/generate/__init__.py', '../mojo/public/tools/bindings/pylib/generate/mojom.py', '../mojo/public/tools/bindings/pylib/generate/mojom_data.py', '../mojo/public/tools/bindings/pylib/generate/mojom_generator.py', '../mojo/public/tools/bindings/pylib/generate/mojom_pack.py', '../mojo/public/tools/bindings/pylib/generate/template_expander.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['common/mojo/render_process.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', '%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
+# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/generate/data.py', '../mojo/public/tools/bindings/pylib/mojom/generate/generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/module.py', '../mojo/public/tools/bindings/pylib/mojom/generate/pack.py', '../mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py', '../mojo/public/tools/bindings/pylib/mojom/parse/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/parse/ast.py', '../mojo/public/tools/bindings/pylib/mojom/parse/lexer.py', '../mojo/public/tools/bindings/pylib/mojom/parse/parser.py', '../mojo/public/tools/bindings/pylib/mojom/parse/translate.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['common/mojo/render_process.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', '%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
 $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: $(LOCAL_PATH)/content/common/mojo/render_process.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_translate.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/template_expander.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: $(LOCAL_PATH)/content/common/mojo/render_process.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/module.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/ast.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/translate.py $(GYP_TARGET_DEPENDENCIES)
 	mkdir -p $(gyp_shared_intermediate_dir)/content/common/mojo; cd $(gyp_local_path)/content; python ../mojo/public/tools/bindings/mojom_bindings_generator.py common/mojo/render_process.mojom -d .. -o "$(gyp_shared_intermediate_dir)/content/common/mojo"
 
 $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.h: $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc ;
@@ -248,7 +248,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_common_mojo_bindings.target.linux-arm.mk b/content/content_common_mojo_bindings.target.linux-arm.mk
index a5cf9ad..f171618 100644
--- a/content/content_common_mojo_bindings.target.linux-arm.mk
+++ b/content/content_common_mojo_bindings.target.linux-arm.mk
@@ -15,12 +15,12 @@
 
 
 ### Generated for rule "content_content_gyp_content_common_mojo_bindings_target_Generate_C___source_files_from_mojom_files":
-# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/parse/__init__.py', '../mojo/public/tools/bindings/pylib/parse/mojo_lexer.py', '../mojo/public/tools/bindings/pylib/parse/mojo_parser.py', '../mojo/public/tools/bindings/pylib/parse/mojo_translate.py', '../mojo/public/tools/bindings/pylib/generate/__init__.py', '../mojo/public/tools/bindings/pylib/generate/mojom.py', '../mojo/public/tools/bindings/pylib/generate/mojom_data.py', '../mojo/public/tools/bindings/pylib/generate/mojom_generator.py', '../mojo/public/tools/bindings/pylib/generate/mojom_pack.py', '../mojo/public/tools/bindings/pylib/generate/template_expander.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['common/mojo/render_process.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', '%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
+# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/generate/data.py', '../mojo/public/tools/bindings/pylib/mojom/generate/generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/module.py', '../mojo/public/tools/bindings/pylib/mojom/generate/pack.py', '../mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py', '../mojo/public/tools/bindings/pylib/mojom/parse/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/parse/ast.py', '../mojo/public/tools/bindings/pylib/mojom/parse/lexer.py', '../mojo/public/tools/bindings/pylib/mojom/parse/parser.py', '../mojo/public/tools/bindings/pylib/mojom/parse/translate.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['common/mojo/render_process.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', '%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
 $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: $(LOCAL_PATH)/content/common/mojo/render_process.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_translate.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/template_expander.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: $(LOCAL_PATH)/content/common/mojo/render_process.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/module.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/ast.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/translate.py $(GYP_TARGET_DEPENDENCIES)
 	mkdir -p $(gyp_shared_intermediate_dir)/content/common/mojo; cd $(gyp_local_path)/content; python ../mojo/public/tools/bindings/mojom_bindings_generator.py common/mojo/render_process.mojom -d .. -o "$(gyp_shared_intermediate_dir)/content/common/mojo"
 
 $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.h: $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc ;
@@ -250,7 +250,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_common_mojo_bindings.target.linux-mips.mk b/content/content_common_mojo_bindings.target.linux-mips.mk
index 6db26d8..32bd821 100644
--- a/content/content_common_mojo_bindings.target.linux-mips.mk
+++ b/content/content_common_mojo_bindings.target.linux-mips.mk
@@ -15,12 +15,12 @@
 
 
 ### Generated for rule "content_content_gyp_content_common_mojo_bindings_target_Generate_C___source_files_from_mojom_files":
-# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/parse/__init__.py', '../mojo/public/tools/bindings/pylib/parse/mojo_lexer.py', '../mojo/public/tools/bindings/pylib/parse/mojo_parser.py', '../mojo/public/tools/bindings/pylib/parse/mojo_translate.py', '../mojo/public/tools/bindings/pylib/generate/__init__.py', '../mojo/public/tools/bindings/pylib/generate/mojom.py', '../mojo/public/tools/bindings/pylib/generate/mojom_data.py', '../mojo/public/tools/bindings/pylib/generate/mojom_generator.py', '../mojo/public/tools/bindings/pylib/generate/mojom_pack.py', '../mojo/public/tools/bindings/pylib/generate/template_expander.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['common/mojo/render_process.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', '%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
+# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/generate/data.py', '../mojo/public/tools/bindings/pylib/mojom/generate/generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/module.py', '../mojo/public/tools/bindings/pylib/mojom/generate/pack.py', '../mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py', '../mojo/public/tools/bindings/pylib/mojom/parse/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/parse/ast.py', '../mojo/public/tools/bindings/pylib/mojom/parse/lexer.py', '../mojo/public/tools/bindings/pylib/mojom/parse/parser.py', '../mojo/public/tools/bindings/pylib/mojom/parse/translate.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['common/mojo/render_process.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', '%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
 $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: $(LOCAL_PATH)/content/common/mojo/render_process.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_translate.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/template_expander.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: $(LOCAL_PATH)/content/common/mojo/render_process.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/module.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/ast.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/translate.py $(GYP_TARGET_DEPENDENCIES)
 	mkdir -p $(gyp_shared_intermediate_dir)/content/common/mojo; cd $(gyp_local_path)/content; python ../mojo/public/tools/bindings/mojom_bindings_generator.py common/mojo/render_process.mojom -d .. -o "$(gyp_shared_intermediate_dir)/content/common/mojo"
 
 $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.h: $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc ;
@@ -246,7 +246,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_common_mojo_bindings.target.linux-x86.mk b/content/content_common_mojo_bindings.target.linux-x86.mk
index e142ce3..2923d71 100644
--- a/content/content_common_mojo_bindings.target.linux-x86.mk
+++ b/content/content_common_mojo_bindings.target.linux-x86.mk
@@ -15,12 +15,12 @@
 
 
 ### Generated for rule "content_content_gyp_content_common_mojo_bindings_target_Generate_C___source_files_from_mojom_files":
-# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/parse/__init__.py', '../mojo/public/tools/bindings/pylib/parse/mojo_lexer.py', '../mojo/public/tools/bindings/pylib/parse/mojo_parser.py', '../mojo/public/tools/bindings/pylib/parse/mojo_translate.py', '../mojo/public/tools/bindings/pylib/generate/__init__.py', '../mojo/public/tools/bindings/pylib/generate/mojom.py', '../mojo/public/tools/bindings/pylib/generate/mojom_data.py', '../mojo/public/tools/bindings/pylib/generate/mojom_generator.py', '../mojo/public/tools/bindings/pylib/generate/mojom_pack.py', '../mojo/public/tools/bindings/pylib/generate/template_expander.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['common/mojo/render_process.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', '%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
+# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/generate/data.py', '../mojo/public/tools/bindings/pylib/mojom/generate/generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/module.py', '../mojo/public/tools/bindings/pylib/mojom/generate/pack.py', '../mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py', '../mojo/public/tools/bindings/pylib/mojom/parse/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/parse/ast.py', '../mojo/public/tools/bindings/pylib/mojom/parse/lexer.py', '../mojo/public/tools/bindings/pylib/mojom/parse/parser.py', '../mojo/public/tools/bindings/pylib/mojom/parse/translate.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['common/mojo/render_process.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', '%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
 $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: $(LOCAL_PATH)/content/common/mojo/render_process.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_translate.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/template_expander.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: $(LOCAL_PATH)/content/common/mojo/render_process.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/module.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/ast.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/translate.py $(GYP_TARGET_DEPENDENCIES)
 	mkdir -p $(gyp_shared_intermediate_dir)/content/common/mojo; cd $(gyp_local_path)/content; python ../mojo/public/tools/bindings/mojom_bindings_generator.py common/mojo/render_process.mojom -d .. -o "$(gyp_shared_intermediate_dir)/content/common/mojo"
 
 $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.h: $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc ;
@@ -248,7 +248,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_common_mojo_bindings.target.linux-x86_64.mk b/content/content_common_mojo_bindings.target.linux-x86_64.mk
index 8574721..ee78952 100644
--- a/content/content_common_mojo_bindings.target.linux-x86_64.mk
+++ b/content/content_common_mojo_bindings.target.linux-x86_64.mk
@@ -15,12 +15,12 @@
 
 
 ### Generated for rule "content_content_gyp_content_common_mojo_bindings_target_Generate_C___source_files_from_mojom_files":
-# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/parse/__init__.py', '../mojo/public/tools/bindings/pylib/parse/mojo_lexer.py', '../mojo/public/tools/bindings/pylib/parse/mojo_parser.py', '../mojo/public/tools/bindings/pylib/parse/mojo_translate.py', '../mojo/public/tools/bindings/pylib/generate/__init__.py', '../mojo/public/tools/bindings/pylib/generate/mojom.py', '../mojo/public/tools/bindings/pylib/generate/mojom_data.py', '../mojo/public/tools/bindings/pylib/generate/mojom_generator.py', '../mojo/public/tools/bindings/pylib/generate/mojom_pack.py', '../mojo/public/tools/bindings/pylib/generate/template_expander.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['common/mojo/render_process.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', '%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
+# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/generate/data.py', '../mojo/public/tools/bindings/pylib/mojom/generate/generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/module.py', '../mojo/public/tools/bindings/pylib/mojom/generate/pack.py', '../mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py', '../mojo/public/tools/bindings/pylib/mojom/parse/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/parse/ast.py', '../mojo/public/tools/bindings/pylib/mojom/parse/lexer.py', '../mojo/public/tools/bindings/pylib/mojom/parse/parser.py', '../mojo/public/tools/bindings/pylib/mojom/parse/translate.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['common/mojo/render_process.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', '%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/content/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
 $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: $(LOCAL_PATH)/content/common/mojo/render_process.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_translate.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/template_expander.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc: $(LOCAL_PATH)/content/common/mojo/render_process.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/module.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/ast.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/translate.py $(GYP_TARGET_DEPENDENCIES)
 	mkdir -p $(gyp_shared_intermediate_dir)/content/common/mojo; cd $(gyp_local_path)/content; python ../mojo/public/tools/bindings/mojom_bindings_generator.py common/mojo/render_process.mojom -d .. -o "$(gyp_shared_intermediate_dir)/content/common/mojo"
 
 $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.h: $(gyp_shared_intermediate_dir)/content/common/mojo/render_process.mojom.cc ;
@@ -248,7 +248,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_gpu.target.darwin-arm.mk b/content/content_gpu.target.darwin-arm.mk
index b370bb3..ef428f8 100644
--- a/content/content_gpu.target.darwin-arm.mk
+++ b/content/content_gpu.target.darwin-arm.mk
@@ -47,7 +47,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-fno-tree-sra \
 	-fuse-ld=gold \
 	-Wno-psabi \
@@ -99,12 +98,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -173,7 +175,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-fno-tree-sra \
 	-fuse-ld=gold \
 	-Wno-psabi \
@@ -225,12 +226,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -306,7 +310,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_gpu.target.darwin-mips.mk b/content/content_gpu.target.darwin-mips.mk
index fe2a4cd..5e970fb 100644
--- a/content/content_gpu.target.darwin-mips.mk
+++ b/content/content_gpu.target.darwin-mips.mk
@@ -47,7 +47,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-EL \
 	-mhard-float \
 	-ffunction-sections \
@@ -98,12 +97,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -172,7 +174,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-EL \
 	-mhard-float \
 	-ffunction-sections \
@@ -223,12 +224,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -302,7 +306,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_gpu.target.darwin-x86.mk b/content/content_gpu.target.darwin-x86.mk
index 70af363..5c30d60 100644
--- a/content/content_gpu.target.darwin-x86.mk
+++ b/content/content_gpu.target.darwin-x86.mk
@@ -46,7 +46,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-msse2 \
 	-mfpmath=sse \
 	-mmmx \
@@ -100,12 +99,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -172,7 +174,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-msse2 \
 	-mfpmath=sse \
 	-mmmx \
@@ -226,12 +227,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -304,7 +308,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_gpu.target.darwin-x86_64.mk b/content/content_gpu.target.darwin-x86_64.mk
index d238aa5..c405e5a 100644
--- a/content/content_gpu.target.darwin-x86_64.mk
+++ b/content/content_gpu.target.darwin-x86_64.mk
@@ -48,7 +48,6 @@
 	-pipe \
 	-fPIC \
 	-Wno-unused-local-typedefs \
-	-Wno-unknown-pragmas \
 	-m64 \
 	-march=x86-64 \
 	-fuse-ld=gold \
@@ -100,12 +99,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -174,7 +176,6 @@
 	-pipe \
 	-fPIC \
 	-Wno-unused-local-typedefs \
-	-Wno-unknown-pragmas \
 	-m64 \
 	-march=x86-64 \
 	-fuse-ld=gold \
@@ -226,12 +227,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -304,7 +308,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_gpu.target.linux-arm.mk b/content/content_gpu.target.linux-arm.mk
index b370bb3..ef428f8 100644
--- a/content/content_gpu.target.linux-arm.mk
+++ b/content/content_gpu.target.linux-arm.mk
@@ -47,7 +47,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-fno-tree-sra \
 	-fuse-ld=gold \
 	-Wno-psabi \
@@ -99,12 +98,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -173,7 +175,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-fno-tree-sra \
 	-fuse-ld=gold \
 	-Wno-psabi \
@@ -225,12 +226,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -306,7 +310,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_gpu.target.linux-mips.mk b/content/content_gpu.target.linux-mips.mk
index fe2a4cd..5e970fb 100644
--- a/content/content_gpu.target.linux-mips.mk
+++ b/content/content_gpu.target.linux-mips.mk
@@ -47,7 +47,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-EL \
 	-mhard-float \
 	-ffunction-sections \
@@ -98,12 +97,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -172,7 +174,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-EL \
 	-mhard-float \
 	-ffunction-sections \
@@ -223,12 +224,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -302,7 +306,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_gpu.target.linux-x86.mk b/content/content_gpu.target.linux-x86.mk
index 70af363..5c30d60 100644
--- a/content/content_gpu.target.linux-x86.mk
+++ b/content/content_gpu.target.linux-x86.mk
@@ -46,7 +46,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-msse2 \
 	-mfpmath=sse \
 	-mmmx \
@@ -100,12 +99,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -172,7 +174,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-msse2 \
 	-mfpmath=sse \
 	-mmmx \
@@ -226,12 +227,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -304,7 +308,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_gpu.target.linux-x86_64.mk b/content/content_gpu.target.linux-x86_64.mk
index d238aa5..c405e5a 100644
--- a/content/content_gpu.target.linux-x86_64.mk
+++ b/content/content_gpu.target.linux-x86_64.mk
@@ -48,7 +48,6 @@
 	-pipe \
 	-fPIC \
 	-Wno-unused-local-typedefs \
-	-Wno-unknown-pragmas \
 	-m64 \
 	-march=x86-64 \
 	-fuse-ld=gold \
@@ -100,12 +99,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -174,7 +176,6 @@
 	-pipe \
 	-fPIC \
 	-Wno-unused-local-typedefs \
-	-Wno-unknown-pragmas \
 	-m64 \
 	-march=x86-64 \
 	-fuse-ld=gold \
@@ -226,12 +227,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -304,7 +308,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_jni.gypi b/content/content_jni.gypi
index ef9bb62..9393929 100644
--- a/content/content_jni.gypi
+++ b/content/content_jni.gypi
@@ -11,6 +11,7 @@
     'public/android/java/src/org/chromium/content/app/ChildProcessService.java',
     'public/android/java/src/org/chromium/content/app/ContentMain.java',
     'public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java',
+    'public/android/java/src/org/chromium/content/browser/BatteryStatusManager.java',
     'public/android/java/src/org/chromium/content/browser/BrowserStartupController.java',
     'public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java',
     'public/android/java/src/org/chromium/content/browser/ContentSettings.java',
@@ -18,7 +19,7 @@
     'public/android/java/src/org/chromium/content/browser/ContentViewCore.java',
     'public/android/java/src/org/chromium/content/browser/ContentViewRenderView.java',
     'public/android/java/src/org/chromium/content/browser/ContentViewStatics.java',
-    'public/android/java/src/org/chromium/content/browser/DeviceMotionAndOrientation.java',
+    'public/android/java/src/org/chromium/content/browser/DeviceSensors.java',
     'public/android/java/src/org/chromium/content/browser/DownloadController.java',
     'public/android/java/src/org/chromium/content/browser/input/ImeAdapter.java',
     'public/android/java/src/org/chromium/content/browser/input/DateTimeChooserAndroid.java',
diff --git a/content/content_jni_headers.target.darwin-arm.mk b/content/content_jni_headers.target.darwin-arm.mk
index 5400f5d..010c712 100644
--- a/content/content_jni_headers.target.darwin-arm.mk
+++ b/content/content_jni_headers.target.darwin-arm.mk
@@ -18,7 +18,7 @@
 
 
 ### Generated for rule "content_content_gyp_content_jni_headers_target_generate_jni_headers":
-# "{'inputs': ['../base/android/jni_generator/jni_generator.py', '../android_webview/build/jarjar-rules.txt'], 'process_outputs_as_sources': '1', 'extension': 'java', 'outputs': ['$(gyp_shared_intermediate_dir)/content/jni/%(INPUT_ROOT)s_jni.h'], 'rule_name': 'generate_jni_headers', 'rule_sources': ['public/android/java/src/org/chromium/content/app/ChildProcessService.java', 'public/android/java/src/org/chromium/content/app/ContentMain.java', 'public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java', 'public/android/java/src/org/chromium/content/browser/BrowserStartupController.java', 'public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java', 'public/android/java/src/org/chromium/content/browser/ContentSettings.java', 'public/android/java/src/org/chromium/content/browser/ContentVideoView.java', 'public/android/java/src/org/chromium/content/browser/ContentViewCore.java', 'public/android/java/src/org/chromium/content/browser/ContentViewRenderView.java', 'public/android/java/src/org/chromium/content/browser/ContentViewStatics.java', 'public/android/java/src/org/chromium/content/browser/DeviceMotionAndOrientation.java', 'public/android/java/src/org/chromium/content/browser/DownloadController.java', 'public/android/java/src/org/chromium/content/browser/input/ImeAdapter.java', 'public/android/java/src/org/chromium/content/browser/input/DateTimeChooserAndroid.java', 'public/android/java/src/org/chromium/content/browser/InterstitialPageDelegateAndroid.java', 'public/android/java/src/org/chromium/content/browser/LoadUrlParams.java', 'public/android/java/src/org/chromium/content/browser/LocationProviderAdapter.java', 'public/android/java/src/org/chromium/content/browser/MediaDrmCredentialManager.java', 'public/android/java/src/org/chromium/content/browser/MediaResourceGetter.java', 'public/android/java/src/org/chromium/content/browser/PowerSaveBlocker.java', 'public/android/java/src/org/chromium/content/browser/ScreenOrientationProvider.java', 'public/android/java/src/org/chromium/content/browser/SpeechRecognition.java', 'public/android/java/src/org/chromium/content/browser/TouchEventSynthesizer.java', 'public/android/java/src/org/chromium/content/browser/TracingControllerAndroid.java', 'public/android/java/src/org/chromium/content/browser/VibrationProvider.java', 'public/android/java/src/org/chromium/content/browser/WebContentsObserverAndroid.java', 'public/android/java/src/org/chromium/content/browser/framehost/NavigationControllerImpl.java', 'public/android/java/src/org/chromium/content/browser/webcontents/WebContentsImpl.java', 'public/android/java/src/org/chromium/content/common/DeviceTelephonyInfo.java'], 'action': ['../base/android/jni_generator/jni_generator.py', '--input_file', '$(RULE_SOURCES)', '--output_dir', '$(gyp_shared_intermediate_dir)/content/jni', '--includes', 'base/android/jni_generator/jni_generator_helper.h', '--optimize_generation', '0', '--jarjar', '../android_webview/build/jarjar-rules.txt', '--ptr_type', 'long'], 'message': 'Generating JNI bindings from $(RULE_SOURCES)'}":
+# "{'inputs': ['../base/android/jni_generator/jni_generator.py', '../android_webview/build/jarjar-rules.txt'], 'process_outputs_as_sources': '1', 'extension': 'java', 'outputs': ['$(gyp_shared_intermediate_dir)/content/jni/%(INPUT_ROOT)s_jni.h'], 'rule_name': 'generate_jni_headers', 'rule_sources': ['public/android/java/src/org/chromium/content/app/ChildProcessService.java', 'public/android/java/src/org/chromium/content/app/ContentMain.java', 'public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java', 'public/android/java/src/org/chromium/content/browser/BatteryStatusManager.java', 'public/android/java/src/org/chromium/content/browser/BrowserStartupController.java', 'public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java', 'public/android/java/src/org/chromium/content/browser/ContentSettings.java', 'public/android/java/src/org/chromium/content/browser/ContentVideoView.java', 'public/android/java/src/org/chromium/content/browser/ContentViewCore.java', 'public/android/java/src/org/chromium/content/browser/ContentViewRenderView.java', 'public/android/java/src/org/chromium/content/browser/ContentViewStatics.java', 'public/android/java/src/org/chromium/content/browser/DeviceSensors.java', 'public/android/java/src/org/chromium/content/browser/DownloadController.java', 'public/android/java/src/org/chromium/content/browser/input/ImeAdapter.java', 'public/android/java/src/org/chromium/content/browser/input/DateTimeChooserAndroid.java', 'public/android/java/src/org/chromium/content/browser/InterstitialPageDelegateAndroid.java', 'public/android/java/src/org/chromium/content/browser/LoadUrlParams.java', 'public/android/java/src/org/chromium/content/browser/LocationProviderAdapter.java', 'public/android/java/src/org/chromium/content/browser/MediaDrmCredentialManager.java', 'public/android/java/src/org/chromium/content/browser/MediaResourceGetter.java', 'public/android/java/src/org/chromium/content/browser/PowerSaveBlocker.java', 'public/android/java/src/org/chromium/content/browser/ScreenOrientationProvider.java', 'public/android/java/src/org/chromium/content/browser/SpeechRecognition.java', 'public/android/java/src/org/chromium/content/browser/TouchEventSynthesizer.java', 'public/android/java/src/org/chromium/content/browser/TracingControllerAndroid.java', 'public/android/java/src/org/chromium/content/browser/VibrationProvider.java', 'public/android/java/src/org/chromium/content/browser/WebContentsObserverAndroid.java', 'public/android/java/src/org/chromium/content/browser/framehost/NavigationControllerImpl.java', 'public/android/java/src/org/chromium/content/browser/webcontents/WebContentsImpl.java', 'public/android/java/src/org/chromium/content/common/DeviceTelephonyInfo.java'], 'action': ['../base/android/jni_generator/jni_generator.py', '--input_file', '$(RULE_SOURCES)', '--output_dir', '$(gyp_shared_intermediate_dir)/content/jni', '--includes', 'base/android/jni_generator/jni_generator_helper.h', '--optimize_generation', '0', '--jarjar', '../android_webview/build/jarjar-rules.txt', '--ptr_type', 'long'], 'message': 'Generating JNI bindings from $(RULE_SOURCES)'}":
 $(gyp_shared_intermediate_dir)/content/jni/ChildProcessService_jni.h: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/content/jni/ChildProcessService_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/jni/ChildProcessService_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
@@ -43,6 +43,14 @@
 	mkdir -p $(gyp_shared_intermediate_dir)/content/jni; cd $(gyp_local_path)/content; ../base/android/jni_generator/jni_generator.py --input_file public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java --output_dir "$(gyp_shared_intermediate_dir)/content/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../android_webview/build/jarjar-rules.txt --ptr_type long
 
 
+$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h: $(LOCAL_PATH)/content/public/android/java/src/org/chromium/content/browser/BatteryStatusManager.java $(LOCAL_PATH)/base/android/jni_generator/jni_generator.py $(LOCAL_PATH)/android_webview/build/jarjar-rules.txt $(GYP_TARGET_DEPENDENCIES)
+	mkdir -p $(gyp_shared_intermediate_dir)/content/jni; cd $(gyp_local_path)/content; ../base/android/jni_generator/jni_generator.py --input_file public/android/java/src/org/chromium/content/browser/BatteryStatusManager.java --output_dir "$(gyp_shared_intermediate_dir)/content/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../android_webview/build/jarjar-rules.txt --ptr_type long
+
+
 $(gyp_shared_intermediate_dir)/content/jni/BrowserStartupController_jni.h: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/content/jni/BrowserStartupController_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/jni/BrowserStartupController_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
@@ -99,12 +107,12 @@
 	mkdir -p $(gyp_shared_intermediate_dir)/content/jni; cd $(gyp_local_path)/content; ../base/android/jni_generator/jni_generator.py --input_file public/android/java/src/org/chromium/content/browser/ContentViewStatics.java --output_dir "$(gyp_shared_intermediate_dir)/content/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../android_webview/build/jarjar-rules.txt --ptr_type long
 
 
-$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h: gyp_local_path := $(LOCAL_PATH)
-$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
-$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
-$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h: $(LOCAL_PATH)/content/public/android/java/src/org/chromium/content/browser/DeviceMotionAndOrientation.java $(LOCAL_PATH)/base/android/jni_generator/jni_generator.py $(LOCAL_PATH)/android_webview/build/jarjar-rules.txt $(GYP_TARGET_DEPENDENCIES)
-	mkdir -p $(gyp_shared_intermediate_dir)/content/jni; cd $(gyp_local_path)/content; ../base/android/jni_generator/jni_generator.py --input_file public/android/java/src/org/chromium/content/browser/DeviceMotionAndOrientation.java --output_dir "$(gyp_shared_intermediate_dir)/content/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../android_webview/build/jarjar-rules.txt --ptr_type long
+$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h: $(LOCAL_PATH)/content/public/android/java/src/org/chromium/content/browser/DeviceSensors.java $(LOCAL_PATH)/base/android/jni_generator/jni_generator.py $(LOCAL_PATH)/android_webview/build/jarjar-rules.txt $(GYP_TARGET_DEPENDENCIES)
+	mkdir -p $(gyp_shared_intermediate_dir)/content/jni; cd $(gyp_local_path)/content; ../base/android/jni_generator/jni_generator.py --input_file public/android/java/src/org/chromium/content/browser/DeviceSensors.java --output_dir "$(gyp_shared_intermediate_dir)/content/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../android_webview/build/jarjar-rules.txt --ptr_type long
 
 
 $(gyp_shared_intermediate_dir)/content/jni/DownloadController_jni.h: gyp_local_path := $(LOCAL_PATH)
@@ -256,6 +264,7 @@
 	$(gyp_shared_intermediate_dir)/content/jni/ChildProcessService_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentMain_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/BrowserAccessibilityManager_jni.h \
+	$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/BrowserStartupController_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ChildProcessLauncher_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentSettings_jni.h \
@@ -263,7 +272,7 @@
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewCore_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewRenderView_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewStatics_jni.h \
-	$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h \
+	$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/DownloadController_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ImeAdapter_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/DateTimeChooserAndroid_jni.h \
@@ -290,6 +299,7 @@
 	$(gyp_shared_intermediate_dir)/content/jni/ChildProcessService_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentMain_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/BrowserAccessibilityManager_jni.h \
+	$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/BrowserStartupController_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ChildProcessLauncher_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentSettings_jni.h \
@@ -297,7 +307,7 @@
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewCore_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewRenderView_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewStatics_jni.h \
-	$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h \
+	$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/DownloadController_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ImeAdapter_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/DateTimeChooserAndroid_jni.h \
diff --git a/content/content_jni_headers.target.darwin-mips.mk b/content/content_jni_headers.target.darwin-mips.mk
index 7be0843..d83d3ce 100644
--- a/content/content_jni_headers.target.darwin-mips.mk
+++ b/content/content_jni_headers.target.darwin-mips.mk
@@ -18,7 +18,7 @@
 
 
 ### Generated for rule "content_content_gyp_content_jni_headers_target_generate_jni_headers":
-# "{'inputs': ['../base/android/jni_generator/jni_generator.py', '../android_webview/build/jarjar-rules.txt'], 'process_outputs_as_sources': '1', 'extension': 'java', 'outputs': ['$(gyp_shared_intermediate_dir)/content/jni/%(INPUT_ROOT)s_jni.h'], 'rule_name': 'generate_jni_headers', 'rule_sources': ['public/android/java/src/org/chromium/content/app/ChildProcessService.java', 'public/android/java/src/org/chromium/content/app/ContentMain.java', 'public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java', 'public/android/java/src/org/chromium/content/browser/BrowserStartupController.java', 'public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java', 'public/android/java/src/org/chromium/content/browser/ContentSettings.java', 'public/android/java/src/org/chromium/content/browser/ContentVideoView.java', 'public/android/java/src/org/chromium/content/browser/ContentViewCore.java', 'public/android/java/src/org/chromium/content/browser/ContentViewRenderView.java', 'public/android/java/src/org/chromium/content/browser/ContentViewStatics.java', 'public/android/java/src/org/chromium/content/browser/DeviceMotionAndOrientation.java', 'public/android/java/src/org/chromium/content/browser/DownloadController.java', 'public/android/java/src/org/chromium/content/browser/input/ImeAdapter.java', 'public/android/java/src/org/chromium/content/browser/input/DateTimeChooserAndroid.java', 'public/android/java/src/org/chromium/content/browser/InterstitialPageDelegateAndroid.java', 'public/android/java/src/org/chromium/content/browser/LoadUrlParams.java', 'public/android/java/src/org/chromium/content/browser/LocationProviderAdapter.java', 'public/android/java/src/org/chromium/content/browser/MediaDrmCredentialManager.java', 'public/android/java/src/org/chromium/content/browser/MediaResourceGetter.java', 'public/android/java/src/org/chromium/content/browser/PowerSaveBlocker.java', 'public/android/java/src/org/chromium/content/browser/ScreenOrientationProvider.java', 'public/android/java/src/org/chromium/content/browser/SpeechRecognition.java', 'public/android/java/src/org/chromium/content/browser/TouchEventSynthesizer.java', 'public/android/java/src/org/chromium/content/browser/TracingControllerAndroid.java', 'public/android/java/src/org/chromium/content/browser/VibrationProvider.java', 'public/android/java/src/org/chromium/content/browser/WebContentsObserverAndroid.java', 'public/android/java/src/org/chromium/content/browser/framehost/NavigationControllerImpl.java', 'public/android/java/src/org/chromium/content/browser/webcontents/WebContentsImpl.java', 'public/android/java/src/org/chromium/content/common/DeviceTelephonyInfo.java'], 'action': ['../base/android/jni_generator/jni_generator.py', '--input_file', '$(RULE_SOURCES)', '--output_dir', '$(gyp_shared_intermediate_dir)/content/jni', '--includes', 'base/android/jni_generator/jni_generator_helper.h', '--optimize_generation', '0', '--jarjar', '../android_webview/build/jarjar-rules.txt', '--ptr_type', 'long'], 'message': 'Generating JNI bindings from $(RULE_SOURCES)'}":
+# "{'inputs': ['../base/android/jni_generator/jni_generator.py', '../android_webview/build/jarjar-rules.txt'], 'process_outputs_as_sources': '1', 'extension': 'java', 'outputs': ['$(gyp_shared_intermediate_dir)/content/jni/%(INPUT_ROOT)s_jni.h'], 'rule_name': 'generate_jni_headers', 'rule_sources': ['public/android/java/src/org/chromium/content/app/ChildProcessService.java', 'public/android/java/src/org/chromium/content/app/ContentMain.java', 'public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java', 'public/android/java/src/org/chromium/content/browser/BatteryStatusManager.java', 'public/android/java/src/org/chromium/content/browser/BrowserStartupController.java', 'public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java', 'public/android/java/src/org/chromium/content/browser/ContentSettings.java', 'public/android/java/src/org/chromium/content/browser/ContentVideoView.java', 'public/android/java/src/org/chromium/content/browser/ContentViewCore.java', 'public/android/java/src/org/chromium/content/browser/ContentViewRenderView.java', 'public/android/java/src/org/chromium/content/browser/ContentViewStatics.java', 'public/android/java/src/org/chromium/content/browser/DeviceSensors.java', 'public/android/java/src/org/chromium/content/browser/DownloadController.java', 'public/android/java/src/org/chromium/content/browser/input/ImeAdapter.java', 'public/android/java/src/org/chromium/content/browser/input/DateTimeChooserAndroid.java', 'public/android/java/src/org/chromium/content/browser/InterstitialPageDelegateAndroid.java', 'public/android/java/src/org/chromium/content/browser/LoadUrlParams.java', 'public/android/java/src/org/chromium/content/browser/LocationProviderAdapter.java', 'public/android/java/src/org/chromium/content/browser/MediaDrmCredentialManager.java', 'public/android/java/src/org/chromium/content/browser/MediaResourceGetter.java', 'public/android/java/src/org/chromium/content/browser/PowerSaveBlocker.java', 'public/android/java/src/org/chromium/content/browser/ScreenOrientationProvider.java', 'public/android/java/src/org/chromium/content/browser/SpeechRecognition.java', 'public/android/java/src/org/chromium/content/browser/TouchEventSynthesizer.java', 'public/android/java/src/org/chromium/content/browser/TracingControllerAndroid.java', 'public/android/java/src/org/chromium/content/browser/VibrationProvider.java', 'public/android/java/src/org/chromium/content/browser/WebContentsObserverAndroid.java', 'public/android/java/src/org/chromium/content/browser/framehost/NavigationControllerImpl.java', 'public/android/java/src/org/chromium/content/browser/webcontents/WebContentsImpl.java', 'public/android/java/src/org/chromium/content/common/DeviceTelephonyInfo.java'], 'action': ['../base/android/jni_generator/jni_generator.py', '--input_file', '$(RULE_SOURCES)', '--output_dir', '$(gyp_shared_intermediate_dir)/content/jni', '--includes', 'base/android/jni_generator/jni_generator_helper.h', '--optimize_generation', '0', '--jarjar', '../android_webview/build/jarjar-rules.txt', '--ptr_type', 'long'], 'message': 'Generating JNI bindings from $(RULE_SOURCES)'}":
 $(gyp_shared_intermediate_dir)/content/jni/ChildProcessService_jni.h: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/content/jni/ChildProcessService_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/jni/ChildProcessService_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
@@ -43,6 +43,14 @@
 	mkdir -p $(gyp_shared_intermediate_dir)/content/jni; cd $(gyp_local_path)/content; ../base/android/jni_generator/jni_generator.py --input_file public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java --output_dir "$(gyp_shared_intermediate_dir)/content/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../android_webview/build/jarjar-rules.txt --ptr_type long
 
 
+$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h: $(LOCAL_PATH)/content/public/android/java/src/org/chromium/content/browser/BatteryStatusManager.java $(LOCAL_PATH)/base/android/jni_generator/jni_generator.py $(LOCAL_PATH)/android_webview/build/jarjar-rules.txt $(GYP_TARGET_DEPENDENCIES)
+	mkdir -p $(gyp_shared_intermediate_dir)/content/jni; cd $(gyp_local_path)/content; ../base/android/jni_generator/jni_generator.py --input_file public/android/java/src/org/chromium/content/browser/BatteryStatusManager.java --output_dir "$(gyp_shared_intermediate_dir)/content/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../android_webview/build/jarjar-rules.txt --ptr_type long
+
+
 $(gyp_shared_intermediate_dir)/content/jni/BrowserStartupController_jni.h: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/content/jni/BrowserStartupController_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/jni/BrowserStartupController_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
@@ -99,12 +107,12 @@
 	mkdir -p $(gyp_shared_intermediate_dir)/content/jni; cd $(gyp_local_path)/content; ../base/android/jni_generator/jni_generator.py --input_file public/android/java/src/org/chromium/content/browser/ContentViewStatics.java --output_dir "$(gyp_shared_intermediate_dir)/content/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../android_webview/build/jarjar-rules.txt --ptr_type long
 
 
-$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h: gyp_local_path := $(LOCAL_PATH)
-$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
-$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
-$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h: $(LOCAL_PATH)/content/public/android/java/src/org/chromium/content/browser/DeviceMotionAndOrientation.java $(LOCAL_PATH)/base/android/jni_generator/jni_generator.py $(LOCAL_PATH)/android_webview/build/jarjar-rules.txt $(GYP_TARGET_DEPENDENCIES)
-	mkdir -p $(gyp_shared_intermediate_dir)/content/jni; cd $(gyp_local_path)/content; ../base/android/jni_generator/jni_generator.py --input_file public/android/java/src/org/chromium/content/browser/DeviceMotionAndOrientation.java --output_dir "$(gyp_shared_intermediate_dir)/content/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../android_webview/build/jarjar-rules.txt --ptr_type long
+$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h: $(LOCAL_PATH)/content/public/android/java/src/org/chromium/content/browser/DeviceSensors.java $(LOCAL_PATH)/base/android/jni_generator/jni_generator.py $(LOCAL_PATH)/android_webview/build/jarjar-rules.txt $(GYP_TARGET_DEPENDENCIES)
+	mkdir -p $(gyp_shared_intermediate_dir)/content/jni; cd $(gyp_local_path)/content; ../base/android/jni_generator/jni_generator.py --input_file public/android/java/src/org/chromium/content/browser/DeviceSensors.java --output_dir "$(gyp_shared_intermediate_dir)/content/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../android_webview/build/jarjar-rules.txt --ptr_type long
 
 
 $(gyp_shared_intermediate_dir)/content/jni/DownloadController_jni.h: gyp_local_path := $(LOCAL_PATH)
@@ -256,6 +264,7 @@
 	$(gyp_shared_intermediate_dir)/content/jni/ChildProcessService_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentMain_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/BrowserAccessibilityManager_jni.h \
+	$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/BrowserStartupController_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ChildProcessLauncher_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentSettings_jni.h \
@@ -263,7 +272,7 @@
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewCore_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewRenderView_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewStatics_jni.h \
-	$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h \
+	$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/DownloadController_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ImeAdapter_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/DateTimeChooserAndroid_jni.h \
@@ -290,6 +299,7 @@
 	$(gyp_shared_intermediate_dir)/content/jni/ChildProcessService_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentMain_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/BrowserAccessibilityManager_jni.h \
+	$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/BrowserStartupController_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ChildProcessLauncher_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentSettings_jni.h \
@@ -297,7 +307,7 @@
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewCore_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewRenderView_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewStatics_jni.h \
-	$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h \
+	$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/DownloadController_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ImeAdapter_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/DateTimeChooserAndroid_jni.h \
diff --git a/content/content_jni_headers.target.darwin-x86.mk b/content/content_jni_headers.target.darwin-x86.mk
index 7480579..3714c9c 100644
--- a/content/content_jni_headers.target.darwin-x86.mk
+++ b/content/content_jni_headers.target.darwin-x86.mk
@@ -18,7 +18,7 @@
 
 
 ### Generated for rule "content_content_gyp_content_jni_headers_target_generate_jni_headers":
-# "{'inputs': ['../base/android/jni_generator/jni_generator.py', '../android_webview/build/jarjar-rules.txt'], 'process_outputs_as_sources': '1', 'extension': 'java', 'outputs': ['$(gyp_shared_intermediate_dir)/content/jni/%(INPUT_ROOT)s_jni.h'], 'rule_name': 'generate_jni_headers', 'rule_sources': ['public/android/java/src/org/chromium/content/app/ChildProcessService.java', 'public/android/java/src/org/chromium/content/app/ContentMain.java', 'public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java', 'public/android/java/src/org/chromium/content/browser/BrowserStartupController.java', 'public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java', 'public/android/java/src/org/chromium/content/browser/ContentSettings.java', 'public/android/java/src/org/chromium/content/browser/ContentVideoView.java', 'public/android/java/src/org/chromium/content/browser/ContentViewCore.java', 'public/android/java/src/org/chromium/content/browser/ContentViewRenderView.java', 'public/android/java/src/org/chromium/content/browser/ContentViewStatics.java', 'public/android/java/src/org/chromium/content/browser/DeviceMotionAndOrientation.java', 'public/android/java/src/org/chromium/content/browser/DownloadController.java', 'public/android/java/src/org/chromium/content/browser/input/ImeAdapter.java', 'public/android/java/src/org/chromium/content/browser/input/DateTimeChooserAndroid.java', 'public/android/java/src/org/chromium/content/browser/InterstitialPageDelegateAndroid.java', 'public/android/java/src/org/chromium/content/browser/LoadUrlParams.java', 'public/android/java/src/org/chromium/content/browser/LocationProviderAdapter.java', 'public/android/java/src/org/chromium/content/browser/MediaDrmCredentialManager.java', 'public/android/java/src/org/chromium/content/browser/MediaResourceGetter.java', 'public/android/java/src/org/chromium/content/browser/PowerSaveBlocker.java', 'public/android/java/src/org/chromium/content/browser/ScreenOrientationProvider.java', 'public/android/java/src/org/chromium/content/browser/SpeechRecognition.java', 'public/android/java/src/org/chromium/content/browser/TouchEventSynthesizer.java', 'public/android/java/src/org/chromium/content/browser/TracingControllerAndroid.java', 'public/android/java/src/org/chromium/content/browser/VibrationProvider.java', 'public/android/java/src/org/chromium/content/browser/WebContentsObserverAndroid.java', 'public/android/java/src/org/chromium/content/browser/framehost/NavigationControllerImpl.java', 'public/android/java/src/org/chromium/content/browser/webcontents/WebContentsImpl.java', 'public/android/java/src/org/chromium/content/common/DeviceTelephonyInfo.java'], 'action': ['../base/android/jni_generator/jni_generator.py', '--input_file', '$(RULE_SOURCES)', '--output_dir', '$(gyp_shared_intermediate_dir)/content/jni', '--includes', 'base/android/jni_generator/jni_generator_helper.h', '--optimize_generation', '0', '--jarjar', '../android_webview/build/jarjar-rules.txt', '--ptr_type', 'long'], 'message': 'Generating JNI bindings from $(RULE_SOURCES)'}":
+# "{'inputs': ['../base/android/jni_generator/jni_generator.py', '../android_webview/build/jarjar-rules.txt'], 'process_outputs_as_sources': '1', 'extension': 'java', 'outputs': ['$(gyp_shared_intermediate_dir)/content/jni/%(INPUT_ROOT)s_jni.h'], 'rule_name': 'generate_jni_headers', 'rule_sources': ['public/android/java/src/org/chromium/content/app/ChildProcessService.java', 'public/android/java/src/org/chromium/content/app/ContentMain.java', 'public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java', 'public/android/java/src/org/chromium/content/browser/BatteryStatusManager.java', 'public/android/java/src/org/chromium/content/browser/BrowserStartupController.java', 'public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java', 'public/android/java/src/org/chromium/content/browser/ContentSettings.java', 'public/android/java/src/org/chromium/content/browser/ContentVideoView.java', 'public/android/java/src/org/chromium/content/browser/ContentViewCore.java', 'public/android/java/src/org/chromium/content/browser/ContentViewRenderView.java', 'public/android/java/src/org/chromium/content/browser/ContentViewStatics.java', 'public/android/java/src/org/chromium/content/browser/DeviceSensors.java', 'public/android/java/src/org/chromium/content/browser/DownloadController.java', 'public/android/java/src/org/chromium/content/browser/input/ImeAdapter.java', 'public/android/java/src/org/chromium/content/browser/input/DateTimeChooserAndroid.java', 'public/android/java/src/org/chromium/content/browser/InterstitialPageDelegateAndroid.java', 'public/android/java/src/org/chromium/content/browser/LoadUrlParams.java', 'public/android/java/src/org/chromium/content/browser/LocationProviderAdapter.java', 'public/android/java/src/org/chromium/content/browser/MediaDrmCredentialManager.java', 'public/android/java/src/org/chromium/content/browser/MediaResourceGetter.java', 'public/android/java/src/org/chromium/content/browser/PowerSaveBlocker.java', 'public/android/java/src/org/chromium/content/browser/ScreenOrientationProvider.java', 'public/android/java/src/org/chromium/content/browser/SpeechRecognition.java', 'public/android/java/src/org/chromium/content/browser/TouchEventSynthesizer.java', 'public/android/java/src/org/chromium/content/browser/TracingControllerAndroid.java', 'public/android/java/src/org/chromium/content/browser/VibrationProvider.java', 'public/android/java/src/org/chromium/content/browser/WebContentsObserverAndroid.java', 'public/android/java/src/org/chromium/content/browser/framehost/NavigationControllerImpl.java', 'public/android/java/src/org/chromium/content/browser/webcontents/WebContentsImpl.java', 'public/android/java/src/org/chromium/content/common/DeviceTelephonyInfo.java'], 'action': ['../base/android/jni_generator/jni_generator.py', '--input_file', '$(RULE_SOURCES)', '--output_dir', '$(gyp_shared_intermediate_dir)/content/jni', '--includes', 'base/android/jni_generator/jni_generator_helper.h', '--optimize_generation', '0', '--jarjar', '../android_webview/build/jarjar-rules.txt', '--ptr_type', 'long'], 'message': 'Generating JNI bindings from $(RULE_SOURCES)'}":
 $(gyp_shared_intermediate_dir)/content/jni/ChildProcessService_jni.h: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/content/jni/ChildProcessService_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/jni/ChildProcessService_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
@@ -43,6 +43,14 @@
 	mkdir -p $(gyp_shared_intermediate_dir)/content/jni; cd $(gyp_local_path)/content; ../base/android/jni_generator/jni_generator.py --input_file public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java --output_dir "$(gyp_shared_intermediate_dir)/content/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../android_webview/build/jarjar-rules.txt --ptr_type long
 
 
+$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h: $(LOCAL_PATH)/content/public/android/java/src/org/chromium/content/browser/BatteryStatusManager.java $(LOCAL_PATH)/base/android/jni_generator/jni_generator.py $(LOCAL_PATH)/android_webview/build/jarjar-rules.txt $(GYP_TARGET_DEPENDENCIES)
+	mkdir -p $(gyp_shared_intermediate_dir)/content/jni; cd $(gyp_local_path)/content; ../base/android/jni_generator/jni_generator.py --input_file public/android/java/src/org/chromium/content/browser/BatteryStatusManager.java --output_dir "$(gyp_shared_intermediate_dir)/content/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../android_webview/build/jarjar-rules.txt --ptr_type long
+
+
 $(gyp_shared_intermediate_dir)/content/jni/BrowserStartupController_jni.h: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/content/jni/BrowserStartupController_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/jni/BrowserStartupController_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
@@ -99,12 +107,12 @@
 	mkdir -p $(gyp_shared_intermediate_dir)/content/jni; cd $(gyp_local_path)/content; ../base/android/jni_generator/jni_generator.py --input_file public/android/java/src/org/chromium/content/browser/ContentViewStatics.java --output_dir "$(gyp_shared_intermediate_dir)/content/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../android_webview/build/jarjar-rules.txt --ptr_type long
 
 
-$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h: gyp_local_path := $(LOCAL_PATH)
-$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
-$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
-$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h: $(LOCAL_PATH)/content/public/android/java/src/org/chromium/content/browser/DeviceMotionAndOrientation.java $(LOCAL_PATH)/base/android/jni_generator/jni_generator.py $(LOCAL_PATH)/android_webview/build/jarjar-rules.txt $(GYP_TARGET_DEPENDENCIES)
-	mkdir -p $(gyp_shared_intermediate_dir)/content/jni; cd $(gyp_local_path)/content; ../base/android/jni_generator/jni_generator.py --input_file public/android/java/src/org/chromium/content/browser/DeviceMotionAndOrientation.java --output_dir "$(gyp_shared_intermediate_dir)/content/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../android_webview/build/jarjar-rules.txt --ptr_type long
+$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h: $(LOCAL_PATH)/content/public/android/java/src/org/chromium/content/browser/DeviceSensors.java $(LOCAL_PATH)/base/android/jni_generator/jni_generator.py $(LOCAL_PATH)/android_webview/build/jarjar-rules.txt $(GYP_TARGET_DEPENDENCIES)
+	mkdir -p $(gyp_shared_intermediate_dir)/content/jni; cd $(gyp_local_path)/content; ../base/android/jni_generator/jni_generator.py --input_file public/android/java/src/org/chromium/content/browser/DeviceSensors.java --output_dir "$(gyp_shared_intermediate_dir)/content/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../android_webview/build/jarjar-rules.txt --ptr_type long
 
 
 $(gyp_shared_intermediate_dir)/content/jni/DownloadController_jni.h: gyp_local_path := $(LOCAL_PATH)
@@ -256,6 +264,7 @@
 	$(gyp_shared_intermediate_dir)/content/jni/ChildProcessService_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentMain_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/BrowserAccessibilityManager_jni.h \
+	$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/BrowserStartupController_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ChildProcessLauncher_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentSettings_jni.h \
@@ -263,7 +272,7 @@
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewCore_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewRenderView_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewStatics_jni.h \
-	$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h \
+	$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/DownloadController_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ImeAdapter_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/DateTimeChooserAndroid_jni.h \
@@ -290,6 +299,7 @@
 	$(gyp_shared_intermediate_dir)/content/jni/ChildProcessService_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentMain_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/BrowserAccessibilityManager_jni.h \
+	$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/BrowserStartupController_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ChildProcessLauncher_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentSettings_jni.h \
@@ -297,7 +307,7 @@
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewCore_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewRenderView_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewStatics_jni.h \
-	$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h \
+	$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/DownloadController_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ImeAdapter_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/DateTimeChooserAndroid_jni.h \
diff --git a/content/content_jni_headers.target.darwin-x86_64.mk b/content/content_jni_headers.target.darwin-x86_64.mk
index 38b76b7..e80c128 100644
--- a/content/content_jni_headers.target.darwin-x86_64.mk
+++ b/content/content_jni_headers.target.darwin-x86_64.mk
@@ -18,7 +18,7 @@
 
 
 ### Generated for rule "content_content_gyp_content_jni_headers_target_generate_jni_headers":
-# "{'inputs': ['../base/android/jni_generator/jni_generator.py', '../android_webview/build/jarjar-rules.txt'], 'process_outputs_as_sources': '1', 'extension': 'java', 'outputs': ['$(gyp_shared_intermediate_dir)/content/jni/%(INPUT_ROOT)s_jni.h'], 'rule_name': 'generate_jni_headers', 'rule_sources': ['public/android/java/src/org/chromium/content/app/ChildProcessService.java', 'public/android/java/src/org/chromium/content/app/ContentMain.java', 'public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java', 'public/android/java/src/org/chromium/content/browser/BrowserStartupController.java', 'public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java', 'public/android/java/src/org/chromium/content/browser/ContentSettings.java', 'public/android/java/src/org/chromium/content/browser/ContentVideoView.java', 'public/android/java/src/org/chromium/content/browser/ContentViewCore.java', 'public/android/java/src/org/chromium/content/browser/ContentViewRenderView.java', 'public/android/java/src/org/chromium/content/browser/ContentViewStatics.java', 'public/android/java/src/org/chromium/content/browser/DeviceMotionAndOrientation.java', 'public/android/java/src/org/chromium/content/browser/DownloadController.java', 'public/android/java/src/org/chromium/content/browser/input/ImeAdapter.java', 'public/android/java/src/org/chromium/content/browser/input/DateTimeChooserAndroid.java', 'public/android/java/src/org/chromium/content/browser/InterstitialPageDelegateAndroid.java', 'public/android/java/src/org/chromium/content/browser/LoadUrlParams.java', 'public/android/java/src/org/chromium/content/browser/LocationProviderAdapter.java', 'public/android/java/src/org/chromium/content/browser/MediaDrmCredentialManager.java', 'public/android/java/src/org/chromium/content/browser/MediaResourceGetter.java', 'public/android/java/src/org/chromium/content/browser/PowerSaveBlocker.java', 'public/android/java/src/org/chromium/content/browser/ScreenOrientationProvider.java', 'public/android/java/src/org/chromium/content/browser/SpeechRecognition.java', 'public/android/java/src/org/chromium/content/browser/TouchEventSynthesizer.java', 'public/android/java/src/org/chromium/content/browser/TracingControllerAndroid.java', 'public/android/java/src/org/chromium/content/browser/VibrationProvider.java', 'public/android/java/src/org/chromium/content/browser/WebContentsObserverAndroid.java', 'public/android/java/src/org/chromium/content/browser/framehost/NavigationControllerImpl.java', 'public/android/java/src/org/chromium/content/browser/webcontents/WebContentsImpl.java', 'public/android/java/src/org/chromium/content/common/DeviceTelephonyInfo.java'], 'action': ['../base/android/jni_generator/jni_generator.py', '--input_file', '$(RULE_SOURCES)', '--output_dir', '$(gyp_shared_intermediate_dir)/content/jni', '--includes', 'base/android/jni_generator/jni_generator_helper.h', '--optimize_generation', '0', '--jarjar', '../android_webview/build/jarjar-rules.txt', '--ptr_type', 'long'], 'message': 'Generating JNI bindings from $(RULE_SOURCES)'}":
+# "{'inputs': ['../base/android/jni_generator/jni_generator.py', '../android_webview/build/jarjar-rules.txt'], 'process_outputs_as_sources': '1', 'extension': 'java', 'outputs': ['$(gyp_shared_intermediate_dir)/content/jni/%(INPUT_ROOT)s_jni.h'], 'rule_name': 'generate_jni_headers', 'rule_sources': ['public/android/java/src/org/chromium/content/app/ChildProcessService.java', 'public/android/java/src/org/chromium/content/app/ContentMain.java', 'public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java', 'public/android/java/src/org/chromium/content/browser/BatteryStatusManager.java', 'public/android/java/src/org/chromium/content/browser/BrowserStartupController.java', 'public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java', 'public/android/java/src/org/chromium/content/browser/ContentSettings.java', 'public/android/java/src/org/chromium/content/browser/ContentVideoView.java', 'public/android/java/src/org/chromium/content/browser/ContentViewCore.java', 'public/android/java/src/org/chromium/content/browser/ContentViewRenderView.java', 'public/android/java/src/org/chromium/content/browser/ContentViewStatics.java', 'public/android/java/src/org/chromium/content/browser/DeviceSensors.java', 'public/android/java/src/org/chromium/content/browser/DownloadController.java', 'public/android/java/src/org/chromium/content/browser/input/ImeAdapter.java', 'public/android/java/src/org/chromium/content/browser/input/DateTimeChooserAndroid.java', 'public/android/java/src/org/chromium/content/browser/InterstitialPageDelegateAndroid.java', 'public/android/java/src/org/chromium/content/browser/LoadUrlParams.java', 'public/android/java/src/org/chromium/content/browser/LocationProviderAdapter.java', 'public/android/java/src/org/chromium/content/browser/MediaDrmCredentialManager.java', 'public/android/java/src/org/chromium/content/browser/MediaResourceGetter.java', 'public/android/java/src/org/chromium/content/browser/PowerSaveBlocker.java', 'public/android/java/src/org/chromium/content/browser/ScreenOrientationProvider.java', 'public/android/java/src/org/chromium/content/browser/SpeechRecognition.java', 'public/android/java/src/org/chromium/content/browser/TouchEventSynthesizer.java', 'public/android/java/src/org/chromium/content/browser/TracingControllerAndroid.java', 'public/android/java/src/org/chromium/content/browser/VibrationProvider.java', 'public/android/java/src/org/chromium/content/browser/WebContentsObserverAndroid.java', 'public/android/java/src/org/chromium/content/browser/framehost/NavigationControllerImpl.java', 'public/android/java/src/org/chromium/content/browser/webcontents/WebContentsImpl.java', 'public/android/java/src/org/chromium/content/common/DeviceTelephonyInfo.java'], 'action': ['../base/android/jni_generator/jni_generator.py', '--input_file', '$(RULE_SOURCES)', '--output_dir', '$(gyp_shared_intermediate_dir)/content/jni', '--includes', 'base/android/jni_generator/jni_generator_helper.h', '--optimize_generation', '0', '--jarjar', '../android_webview/build/jarjar-rules.txt', '--ptr_type', 'long'], 'message': 'Generating JNI bindings from $(RULE_SOURCES)'}":
 $(gyp_shared_intermediate_dir)/content/jni/ChildProcessService_jni.h: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/content/jni/ChildProcessService_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/jni/ChildProcessService_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
@@ -43,6 +43,14 @@
 	mkdir -p $(gyp_shared_intermediate_dir)/content/jni; cd $(gyp_local_path)/content; ../base/android/jni_generator/jni_generator.py --input_file public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java --output_dir "$(gyp_shared_intermediate_dir)/content/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../android_webview/build/jarjar-rules.txt --ptr_type long
 
 
+$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h: $(LOCAL_PATH)/content/public/android/java/src/org/chromium/content/browser/BatteryStatusManager.java $(LOCAL_PATH)/base/android/jni_generator/jni_generator.py $(LOCAL_PATH)/android_webview/build/jarjar-rules.txt $(GYP_TARGET_DEPENDENCIES)
+	mkdir -p $(gyp_shared_intermediate_dir)/content/jni; cd $(gyp_local_path)/content; ../base/android/jni_generator/jni_generator.py --input_file public/android/java/src/org/chromium/content/browser/BatteryStatusManager.java --output_dir "$(gyp_shared_intermediate_dir)/content/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../android_webview/build/jarjar-rules.txt --ptr_type long
+
+
 $(gyp_shared_intermediate_dir)/content/jni/BrowserStartupController_jni.h: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/content/jni/BrowserStartupController_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/jni/BrowserStartupController_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
@@ -99,12 +107,12 @@
 	mkdir -p $(gyp_shared_intermediate_dir)/content/jni; cd $(gyp_local_path)/content; ../base/android/jni_generator/jni_generator.py --input_file public/android/java/src/org/chromium/content/browser/ContentViewStatics.java --output_dir "$(gyp_shared_intermediate_dir)/content/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../android_webview/build/jarjar-rules.txt --ptr_type long
 
 
-$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h: gyp_local_path := $(LOCAL_PATH)
-$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
-$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
-$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h: $(LOCAL_PATH)/content/public/android/java/src/org/chromium/content/browser/DeviceMotionAndOrientation.java $(LOCAL_PATH)/base/android/jni_generator/jni_generator.py $(LOCAL_PATH)/android_webview/build/jarjar-rules.txt $(GYP_TARGET_DEPENDENCIES)
-	mkdir -p $(gyp_shared_intermediate_dir)/content/jni; cd $(gyp_local_path)/content; ../base/android/jni_generator/jni_generator.py --input_file public/android/java/src/org/chromium/content/browser/DeviceMotionAndOrientation.java --output_dir "$(gyp_shared_intermediate_dir)/content/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../android_webview/build/jarjar-rules.txt --ptr_type long
+$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h: $(LOCAL_PATH)/content/public/android/java/src/org/chromium/content/browser/DeviceSensors.java $(LOCAL_PATH)/base/android/jni_generator/jni_generator.py $(LOCAL_PATH)/android_webview/build/jarjar-rules.txt $(GYP_TARGET_DEPENDENCIES)
+	mkdir -p $(gyp_shared_intermediate_dir)/content/jni; cd $(gyp_local_path)/content; ../base/android/jni_generator/jni_generator.py --input_file public/android/java/src/org/chromium/content/browser/DeviceSensors.java --output_dir "$(gyp_shared_intermediate_dir)/content/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../android_webview/build/jarjar-rules.txt --ptr_type long
 
 
 $(gyp_shared_intermediate_dir)/content/jni/DownloadController_jni.h: gyp_local_path := $(LOCAL_PATH)
@@ -256,6 +264,7 @@
 	$(gyp_shared_intermediate_dir)/content/jni/ChildProcessService_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentMain_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/BrowserAccessibilityManager_jni.h \
+	$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/BrowserStartupController_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ChildProcessLauncher_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentSettings_jni.h \
@@ -263,7 +272,7 @@
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewCore_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewRenderView_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewStatics_jni.h \
-	$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h \
+	$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/DownloadController_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ImeAdapter_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/DateTimeChooserAndroid_jni.h \
@@ -290,6 +299,7 @@
 	$(gyp_shared_intermediate_dir)/content/jni/ChildProcessService_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentMain_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/BrowserAccessibilityManager_jni.h \
+	$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/BrowserStartupController_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ChildProcessLauncher_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentSettings_jni.h \
@@ -297,7 +307,7 @@
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewCore_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewRenderView_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewStatics_jni.h \
-	$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h \
+	$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/DownloadController_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ImeAdapter_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/DateTimeChooserAndroid_jni.h \
diff --git a/content/content_jni_headers.target.linux-arm.mk b/content/content_jni_headers.target.linux-arm.mk
index 5400f5d..010c712 100644
--- a/content/content_jni_headers.target.linux-arm.mk
+++ b/content/content_jni_headers.target.linux-arm.mk
@@ -18,7 +18,7 @@
 
 
 ### Generated for rule "content_content_gyp_content_jni_headers_target_generate_jni_headers":
-# "{'inputs': ['../base/android/jni_generator/jni_generator.py', '../android_webview/build/jarjar-rules.txt'], 'process_outputs_as_sources': '1', 'extension': 'java', 'outputs': ['$(gyp_shared_intermediate_dir)/content/jni/%(INPUT_ROOT)s_jni.h'], 'rule_name': 'generate_jni_headers', 'rule_sources': ['public/android/java/src/org/chromium/content/app/ChildProcessService.java', 'public/android/java/src/org/chromium/content/app/ContentMain.java', 'public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java', 'public/android/java/src/org/chromium/content/browser/BrowserStartupController.java', 'public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java', 'public/android/java/src/org/chromium/content/browser/ContentSettings.java', 'public/android/java/src/org/chromium/content/browser/ContentVideoView.java', 'public/android/java/src/org/chromium/content/browser/ContentViewCore.java', 'public/android/java/src/org/chromium/content/browser/ContentViewRenderView.java', 'public/android/java/src/org/chromium/content/browser/ContentViewStatics.java', 'public/android/java/src/org/chromium/content/browser/DeviceMotionAndOrientation.java', 'public/android/java/src/org/chromium/content/browser/DownloadController.java', 'public/android/java/src/org/chromium/content/browser/input/ImeAdapter.java', 'public/android/java/src/org/chromium/content/browser/input/DateTimeChooserAndroid.java', 'public/android/java/src/org/chromium/content/browser/InterstitialPageDelegateAndroid.java', 'public/android/java/src/org/chromium/content/browser/LoadUrlParams.java', 'public/android/java/src/org/chromium/content/browser/LocationProviderAdapter.java', 'public/android/java/src/org/chromium/content/browser/MediaDrmCredentialManager.java', 'public/android/java/src/org/chromium/content/browser/MediaResourceGetter.java', 'public/android/java/src/org/chromium/content/browser/PowerSaveBlocker.java', 'public/android/java/src/org/chromium/content/browser/ScreenOrientationProvider.java', 'public/android/java/src/org/chromium/content/browser/SpeechRecognition.java', 'public/android/java/src/org/chromium/content/browser/TouchEventSynthesizer.java', 'public/android/java/src/org/chromium/content/browser/TracingControllerAndroid.java', 'public/android/java/src/org/chromium/content/browser/VibrationProvider.java', 'public/android/java/src/org/chromium/content/browser/WebContentsObserverAndroid.java', 'public/android/java/src/org/chromium/content/browser/framehost/NavigationControllerImpl.java', 'public/android/java/src/org/chromium/content/browser/webcontents/WebContentsImpl.java', 'public/android/java/src/org/chromium/content/common/DeviceTelephonyInfo.java'], 'action': ['../base/android/jni_generator/jni_generator.py', '--input_file', '$(RULE_SOURCES)', '--output_dir', '$(gyp_shared_intermediate_dir)/content/jni', '--includes', 'base/android/jni_generator/jni_generator_helper.h', '--optimize_generation', '0', '--jarjar', '../android_webview/build/jarjar-rules.txt', '--ptr_type', 'long'], 'message': 'Generating JNI bindings from $(RULE_SOURCES)'}":
+# "{'inputs': ['../base/android/jni_generator/jni_generator.py', '../android_webview/build/jarjar-rules.txt'], 'process_outputs_as_sources': '1', 'extension': 'java', 'outputs': ['$(gyp_shared_intermediate_dir)/content/jni/%(INPUT_ROOT)s_jni.h'], 'rule_name': 'generate_jni_headers', 'rule_sources': ['public/android/java/src/org/chromium/content/app/ChildProcessService.java', 'public/android/java/src/org/chromium/content/app/ContentMain.java', 'public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java', 'public/android/java/src/org/chromium/content/browser/BatteryStatusManager.java', 'public/android/java/src/org/chromium/content/browser/BrowserStartupController.java', 'public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java', 'public/android/java/src/org/chromium/content/browser/ContentSettings.java', 'public/android/java/src/org/chromium/content/browser/ContentVideoView.java', 'public/android/java/src/org/chromium/content/browser/ContentViewCore.java', 'public/android/java/src/org/chromium/content/browser/ContentViewRenderView.java', 'public/android/java/src/org/chromium/content/browser/ContentViewStatics.java', 'public/android/java/src/org/chromium/content/browser/DeviceSensors.java', 'public/android/java/src/org/chromium/content/browser/DownloadController.java', 'public/android/java/src/org/chromium/content/browser/input/ImeAdapter.java', 'public/android/java/src/org/chromium/content/browser/input/DateTimeChooserAndroid.java', 'public/android/java/src/org/chromium/content/browser/InterstitialPageDelegateAndroid.java', 'public/android/java/src/org/chromium/content/browser/LoadUrlParams.java', 'public/android/java/src/org/chromium/content/browser/LocationProviderAdapter.java', 'public/android/java/src/org/chromium/content/browser/MediaDrmCredentialManager.java', 'public/android/java/src/org/chromium/content/browser/MediaResourceGetter.java', 'public/android/java/src/org/chromium/content/browser/PowerSaveBlocker.java', 'public/android/java/src/org/chromium/content/browser/ScreenOrientationProvider.java', 'public/android/java/src/org/chromium/content/browser/SpeechRecognition.java', 'public/android/java/src/org/chromium/content/browser/TouchEventSynthesizer.java', 'public/android/java/src/org/chromium/content/browser/TracingControllerAndroid.java', 'public/android/java/src/org/chromium/content/browser/VibrationProvider.java', 'public/android/java/src/org/chromium/content/browser/WebContentsObserverAndroid.java', 'public/android/java/src/org/chromium/content/browser/framehost/NavigationControllerImpl.java', 'public/android/java/src/org/chromium/content/browser/webcontents/WebContentsImpl.java', 'public/android/java/src/org/chromium/content/common/DeviceTelephonyInfo.java'], 'action': ['../base/android/jni_generator/jni_generator.py', '--input_file', '$(RULE_SOURCES)', '--output_dir', '$(gyp_shared_intermediate_dir)/content/jni', '--includes', 'base/android/jni_generator/jni_generator_helper.h', '--optimize_generation', '0', '--jarjar', '../android_webview/build/jarjar-rules.txt', '--ptr_type', 'long'], 'message': 'Generating JNI bindings from $(RULE_SOURCES)'}":
 $(gyp_shared_intermediate_dir)/content/jni/ChildProcessService_jni.h: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/content/jni/ChildProcessService_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/jni/ChildProcessService_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
@@ -43,6 +43,14 @@
 	mkdir -p $(gyp_shared_intermediate_dir)/content/jni; cd $(gyp_local_path)/content; ../base/android/jni_generator/jni_generator.py --input_file public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java --output_dir "$(gyp_shared_intermediate_dir)/content/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../android_webview/build/jarjar-rules.txt --ptr_type long
 
 
+$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h: $(LOCAL_PATH)/content/public/android/java/src/org/chromium/content/browser/BatteryStatusManager.java $(LOCAL_PATH)/base/android/jni_generator/jni_generator.py $(LOCAL_PATH)/android_webview/build/jarjar-rules.txt $(GYP_TARGET_DEPENDENCIES)
+	mkdir -p $(gyp_shared_intermediate_dir)/content/jni; cd $(gyp_local_path)/content; ../base/android/jni_generator/jni_generator.py --input_file public/android/java/src/org/chromium/content/browser/BatteryStatusManager.java --output_dir "$(gyp_shared_intermediate_dir)/content/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../android_webview/build/jarjar-rules.txt --ptr_type long
+
+
 $(gyp_shared_intermediate_dir)/content/jni/BrowserStartupController_jni.h: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/content/jni/BrowserStartupController_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/jni/BrowserStartupController_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
@@ -99,12 +107,12 @@
 	mkdir -p $(gyp_shared_intermediate_dir)/content/jni; cd $(gyp_local_path)/content; ../base/android/jni_generator/jni_generator.py --input_file public/android/java/src/org/chromium/content/browser/ContentViewStatics.java --output_dir "$(gyp_shared_intermediate_dir)/content/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../android_webview/build/jarjar-rules.txt --ptr_type long
 
 
-$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h: gyp_local_path := $(LOCAL_PATH)
-$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
-$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
-$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h: $(LOCAL_PATH)/content/public/android/java/src/org/chromium/content/browser/DeviceMotionAndOrientation.java $(LOCAL_PATH)/base/android/jni_generator/jni_generator.py $(LOCAL_PATH)/android_webview/build/jarjar-rules.txt $(GYP_TARGET_DEPENDENCIES)
-	mkdir -p $(gyp_shared_intermediate_dir)/content/jni; cd $(gyp_local_path)/content; ../base/android/jni_generator/jni_generator.py --input_file public/android/java/src/org/chromium/content/browser/DeviceMotionAndOrientation.java --output_dir "$(gyp_shared_intermediate_dir)/content/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../android_webview/build/jarjar-rules.txt --ptr_type long
+$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h: $(LOCAL_PATH)/content/public/android/java/src/org/chromium/content/browser/DeviceSensors.java $(LOCAL_PATH)/base/android/jni_generator/jni_generator.py $(LOCAL_PATH)/android_webview/build/jarjar-rules.txt $(GYP_TARGET_DEPENDENCIES)
+	mkdir -p $(gyp_shared_intermediate_dir)/content/jni; cd $(gyp_local_path)/content; ../base/android/jni_generator/jni_generator.py --input_file public/android/java/src/org/chromium/content/browser/DeviceSensors.java --output_dir "$(gyp_shared_intermediate_dir)/content/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../android_webview/build/jarjar-rules.txt --ptr_type long
 
 
 $(gyp_shared_intermediate_dir)/content/jni/DownloadController_jni.h: gyp_local_path := $(LOCAL_PATH)
@@ -256,6 +264,7 @@
 	$(gyp_shared_intermediate_dir)/content/jni/ChildProcessService_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentMain_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/BrowserAccessibilityManager_jni.h \
+	$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/BrowserStartupController_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ChildProcessLauncher_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentSettings_jni.h \
@@ -263,7 +272,7 @@
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewCore_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewRenderView_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewStatics_jni.h \
-	$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h \
+	$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/DownloadController_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ImeAdapter_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/DateTimeChooserAndroid_jni.h \
@@ -290,6 +299,7 @@
 	$(gyp_shared_intermediate_dir)/content/jni/ChildProcessService_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentMain_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/BrowserAccessibilityManager_jni.h \
+	$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/BrowserStartupController_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ChildProcessLauncher_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentSettings_jni.h \
@@ -297,7 +307,7 @@
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewCore_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewRenderView_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewStatics_jni.h \
-	$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h \
+	$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/DownloadController_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ImeAdapter_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/DateTimeChooserAndroid_jni.h \
diff --git a/content/content_jni_headers.target.linux-mips.mk b/content/content_jni_headers.target.linux-mips.mk
index 7be0843..d83d3ce 100644
--- a/content/content_jni_headers.target.linux-mips.mk
+++ b/content/content_jni_headers.target.linux-mips.mk
@@ -18,7 +18,7 @@
 
 
 ### Generated for rule "content_content_gyp_content_jni_headers_target_generate_jni_headers":
-# "{'inputs': ['../base/android/jni_generator/jni_generator.py', '../android_webview/build/jarjar-rules.txt'], 'process_outputs_as_sources': '1', 'extension': 'java', 'outputs': ['$(gyp_shared_intermediate_dir)/content/jni/%(INPUT_ROOT)s_jni.h'], 'rule_name': 'generate_jni_headers', 'rule_sources': ['public/android/java/src/org/chromium/content/app/ChildProcessService.java', 'public/android/java/src/org/chromium/content/app/ContentMain.java', 'public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java', 'public/android/java/src/org/chromium/content/browser/BrowserStartupController.java', 'public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java', 'public/android/java/src/org/chromium/content/browser/ContentSettings.java', 'public/android/java/src/org/chromium/content/browser/ContentVideoView.java', 'public/android/java/src/org/chromium/content/browser/ContentViewCore.java', 'public/android/java/src/org/chromium/content/browser/ContentViewRenderView.java', 'public/android/java/src/org/chromium/content/browser/ContentViewStatics.java', 'public/android/java/src/org/chromium/content/browser/DeviceMotionAndOrientation.java', 'public/android/java/src/org/chromium/content/browser/DownloadController.java', 'public/android/java/src/org/chromium/content/browser/input/ImeAdapter.java', 'public/android/java/src/org/chromium/content/browser/input/DateTimeChooserAndroid.java', 'public/android/java/src/org/chromium/content/browser/InterstitialPageDelegateAndroid.java', 'public/android/java/src/org/chromium/content/browser/LoadUrlParams.java', 'public/android/java/src/org/chromium/content/browser/LocationProviderAdapter.java', 'public/android/java/src/org/chromium/content/browser/MediaDrmCredentialManager.java', 'public/android/java/src/org/chromium/content/browser/MediaResourceGetter.java', 'public/android/java/src/org/chromium/content/browser/PowerSaveBlocker.java', 'public/android/java/src/org/chromium/content/browser/ScreenOrientationProvider.java', 'public/android/java/src/org/chromium/content/browser/SpeechRecognition.java', 'public/android/java/src/org/chromium/content/browser/TouchEventSynthesizer.java', 'public/android/java/src/org/chromium/content/browser/TracingControllerAndroid.java', 'public/android/java/src/org/chromium/content/browser/VibrationProvider.java', 'public/android/java/src/org/chromium/content/browser/WebContentsObserverAndroid.java', 'public/android/java/src/org/chromium/content/browser/framehost/NavigationControllerImpl.java', 'public/android/java/src/org/chromium/content/browser/webcontents/WebContentsImpl.java', 'public/android/java/src/org/chromium/content/common/DeviceTelephonyInfo.java'], 'action': ['../base/android/jni_generator/jni_generator.py', '--input_file', '$(RULE_SOURCES)', '--output_dir', '$(gyp_shared_intermediate_dir)/content/jni', '--includes', 'base/android/jni_generator/jni_generator_helper.h', '--optimize_generation', '0', '--jarjar', '../android_webview/build/jarjar-rules.txt', '--ptr_type', 'long'], 'message': 'Generating JNI bindings from $(RULE_SOURCES)'}":
+# "{'inputs': ['../base/android/jni_generator/jni_generator.py', '../android_webview/build/jarjar-rules.txt'], 'process_outputs_as_sources': '1', 'extension': 'java', 'outputs': ['$(gyp_shared_intermediate_dir)/content/jni/%(INPUT_ROOT)s_jni.h'], 'rule_name': 'generate_jni_headers', 'rule_sources': ['public/android/java/src/org/chromium/content/app/ChildProcessService.java', 'public/android/java/src/org/chromium/content/app/ContentMain.java', 'public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java', 'public/android/java/src/org/chromium/content/browser/BatteryStatusManager.java', 'public/android/java/src/org/chromium/content/browser/BrowserStartupController.java', 'public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java', 'public/android/java/src/org/chromium/content/browser/ContentSettings.java', 'public/android/java/src/org/chromium/content/browser/ContentVideoView.java', 'public/android/java/src/org/chromium/content/browser/ContentViewCore.java', 'public/android/java/src/org/chromium/content/browser/ContentViewRenderView.java', 'public/android/java/src/org/chromium/content/browser/ContentViewStatics.java', 'public/android/java/src/org/chromium/content/browser/DeviceSensors.java', 'public/android/java/src/org/chromium/content/browser/DownloadController.java', 'public/android/java/src/org/chromium/content/browser/input/ImeAdapter.java', 'public/android/java/src/org/chromium/content/browser/input/DateTimeChooserAndroid.java', 'public/android/java/src/org/chromium/content/browser/InterstitialPageDelegateAndroid.java', 'public/android/java/src/org/chromium/content/browser/LoadUrlParams.java', 'public/android/java/src/org/chromium/content/browser/LocationProviderAdapter.java', 'public/android/java/src/org/chromium/content/browser/MediaDrmCredentialManager.java', 'public/android/java/src/org/chromium/content/browser/MediaResourceGetter.java', 'public/android/java/src/org/chromium/content/browser/PowerSaveBlocker.java', 'public/android/java/src/org/chromium/content/browser/ScreenOrientationProvider.java', 'public/android/java/src/org/chromium/content/browser/SpeechRecognition.java', 'public/android/java/src/org/chromium/content/browser/TouchEventSynthesizer.java', 'public/android/java/src/org/chromium/content/browser/TracingControllerAndroid.java', 'public/android/java/src/org/chromium/content/browser/VibrationProvider.java', 'public/android/java/src/org/chromium/content/browser/WebContentsObserverAndroid.java', 'public/android/java/src/org/chromium/content/browser/framehost/NavigationControllerImpl.java', 'public/android/java/src/org/chromium/content/browser/webcontents/WebContentsImpl.java', 'public/android/java/src/org/chromium/content/common/DeviceTelephonyInfo.java'], 'action': ['../base/android/jni_generator/jni_generator.py', '--input_file', '$(RULE_SOURCES)', '--output_dir', '$(gyp_shared_intermediate_dir)/content/jni', '--includes', 'base/android/jni_generator/jni_generator_helper.h', '--optimize_generation', '0', '--jarjar', '../android_webview/build/jarjar-rules.txt', '--ptr_type', 'long'], 'message': 'Generating JNI bindings from $(RULE_SOURCES)'}":
 $(gyp_shared_intermediate_dir)/content/jni/ChildProcessService_jni.h: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/content/jni/ChildProcessService_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/jni/ChildProcessService_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
@@ -43,6 +43,14 @@
 	mkdir -p $(gyp_shared_intermediate_dir)/content/jni; cd $(gyp_local_path)/content; ../base/android/jni_generator/jni_generator.py --input_file public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java --output_dir "$(gyp_shared_intermediate_dir)/content/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../android_webview/build/jarjar-rules.txt --ptr_type long
 
 
+$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h: $(LOCAL_PATH)/content/public/android/java/src/org/chromium/content/browser/BatteryStatusManager.java $(LOCAL_PATH)/base/android/jni_generator/jni_generator.py $(LOCAL_PATH)/android_webview/build/jarjar-rules.txt $(GYP_TARGET_DEPENDENCIES)
+	mkdir -p $(gyp_shared_intermediate_dir)/content/jni; cd $(gyp_local_path)/content; ../base/android/jni_generator/jni_generator.py --input_file public/android/java/src/org/chromium/content/browser/BatteryStatusManager.java --output_dir "$(gyp_shared_intermediate_dir)/content/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../android_webview/build/jarjar-rules.txt --ptr_type long
+
+
 $(gyp_shared_intermediate_dir)/content/jni/BrowserStartupController_jni.h: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/content/jni/BrowserStartupController_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/jni/BrowserStartupController_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
@@ -99,12 +107,12 @@
 	mkdir -p $(gyp_shared_intermediate_dir)/content/jni; cd $(gyp_local_path)/content; ../base/android/jni_generator/jni_generator.py --input_file public/android/java/src/org/chromium/content/browser/ContentViewStatics.java --output_dir "$(gyp_shared_intermediate_dir)/content/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../android_webview/build/jarjar-rules.txt --ptr_type long
 
 
-$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h: gyp_local_path := $(LOCAL_PATH)
-$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
-$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
-$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h: $(LOCAL_PATH)/content/public/android/java/src/org/chromium/content/browser/DeviceMotionAndOrientation.java $(LOCAL_PATH)/base/android/jni_generator/jni_generator.py $(LOCAL_PATH)/android_webview/build/jarjar-rules.txt $(GYP_TARGET_DEPENDENCIES)
-	mkdir -p $(gyp_shared_intermediate_dir)/content/jni; cd $(gyp_local_path)/content; ../base/android/jni_generator/jni_generator.py --input_file public/android/java/src/org/chromium/content/browser/DeviceMotionAndOrientation.java --output_dir "$(gyp_shared_intermediate_dir)/content/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../android_webview/build/jarjar-rules.txt --ptr_type long
+$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h: $(LOCAL_PATH)/content/public/android/java/src/org/chromium/content/browser/DeviceSensors.java $(LOCAL_PATH)/base/android/jni_generator/jni_generator.py $(LOCAL_PATH)/android_webview/build/jarjar-rules.txt $(GYP_TARGET_DEPENDENCIES)
+	mkdir -p $(gyp_shared_intermediate_dir)/content/jni; cd $(gyp_local_path)/content; ../base/android/jni_generator/jni_generator.py --input_file public/android/java/src/org/chromium/content/browser/DeviceSensors.java --output_dir "$(gyp_shared_intermediate_dir)/content/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../android_webview/build/jarjar-rules.txt --ptr_type long
 
 
 $(gyp_shared_intermediate_dir)/content/jni/DownloadController_jni.h: gyp_local_path := $(LOCAL_PATH)
@@ -256,6 +264,7 @@
 	$(gyp_shared_intermediate_dir)/content/jni/ChildProcessService_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentMain_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/BrowserAccessibilityManager_jni.h \
+	$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/BrowserStartupController_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ChildProcessLauncher_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentSettings_jni.h \
@@ -263,7 +272,7 @@
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewCore_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewRenderView_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewStatics_jni.h \
-	$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h \
+	$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/DownloadController_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ImeAdapter_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/DateTimeChooserAndroid_jni.h \
@@ -290,6 +299,7 @@
 	$(gyp_shared_intermediate_dir)/content/jni/ChildProcessService_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentMain_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/BrowserAccessibilityManager_jni.h \
+	$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/BrowserStartupController_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ChildProcessLauncher_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentSettings_jni.h \
@@ -297,7 +307,7 @@
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewCore_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewRenderView_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewStatics_jni.h \
-	$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h \
+	$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/DownloadController_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ImeAdapter_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/DateTimeChooserAndroid_jni.h \
diff --git a/content/content_jni_headers.target.linux-x86.mk b/content/content_jni_headers.target.linux-x86.mk
index 7480579..3714c9c 100644
--- a/content/content_jni_headers.target.linux-x86.mk
+++ b/content/content_jni_headers.target.linux-x86.mk
@@ -18,7 +18,7 @@
 
 
 ### Generated for rule "content_content_gyp_content_jni_headers_target_generate_jni_headers":
-# "{'inputs': ['../base/android/jni_generator/jni_generator.py', '../android_webview/build/jarjar-rules.txt'], 'process_outputs_as_sources': '1', 'extension': 'java', 'outputs': ['$(gyp_shared_intermediate_dir)/content/jni/%(INPUT_ROOT)s_jni.h'], 'rule_name': 'generate_jni_headers', 'rule_sources': ['public/android/java/src/org/chromium/content/app/ChildProcessService.java', 'public/android/java/src/org/chromium/content/app/ContentMain.java', 'public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java', 'public/android/java/src/org/chromium/content/browser/BrowserStartupController.java', 'public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java', 'public/android/java/src/org/chromium/content/browser/ContentSettings.java', 'public/android/java/src/org/chromium/content/browser/ContentVideoView.java', 'public/android/java/src/org/chromium/content/browser/ContentViewCore.java', 'public/android/java/src/org/chromium/content/browser/ContentViewRenderView.java', 'public/android/java/src/org/chromium/content/browser/ContentViewStatics.java', 'public/android/java/src/org/chromium/content/browser/DeviceMotionAndOrientation.java', 'public/android/java/src/org/chromium/content/browser/DownloadController.java', 'public/android/java/src/org/chromium/content/browser/input/ImeAdapter.java', 'public/android/java/src/org/chromium/content/browser/input/DateTimeChooserAndroid.java', 'public/android/java/src/org/chromium/content/browser/InterstitialPageDelegateAndroid.java', 'public/android/java/src/org/chromium/content/browser/LoadUrlParams.java', 'public/android/java/src/org/chromium/content/browser/LocationProviderAdapter.java', 'public/android/java/src/org/chromium/content/browser/MediaDrmCredentialManager.java', 'public/android/java/src/org/chromium/content/browser/MediaResourceGetter.java', 'public/android/java/src/org/chromium/content/browser/PowerSaveBlocker.java', 'public/android/java/src/org/chromium/content/browser/ScreenOrientationProvider.java', 'public/android/java/src/org/chromium/content/browser/SpeechRecognition.java', 'public/android/java/src/org/chromium/content/browser/TouchEventSynthesizer.java', 'public/android/java/src/org/chromium/content/browser/TracingControllerAndroid.java', 'public/android/java/src/org/chromium/content/browser/VibrationProvider.java', 'public/android/java/src/org/chromium/content/browser/WebContentsObserverAndroid.java', 'public/android/java/src/org/chromium/content/browser/framehost/NavigationControllerImpl.java', 'public/android/java/src/org/chromium/content/browser/webcontents/WebContentsImpl.java', 'public/android/java/src/org/chromium/content/common/DeviceTelephonyInfo.java'], 'action': ['../base/android/jni_generator/jni_generator.py', '--input_file', '$(RULE_SOURCES)', '--output_dir', '$(gyp_shared_intermediate_dir)/content/jni', '--includes', 'base/android/jni_generator/jni_generator_helper.h', '--optimize_generation', '0', '--jarjar', '../android_webview/build/jarjar-rules.txt', '--ptr_type', 'long'], 'message': 'Generating JNI bindings from $(RULE_SOURCES)'}":
+# "{'inputs': ['../base/android/jni_generator/jni_generator.py', '../android_webview/build/jarjar-rules.txt'], 'process_outputs_as_sources': '1', 'extension': 'java', 'outputs': ['$(gyp_shared_intermediate_dir)/content/jni/%(INPUT_ROOT)s_jni.h'], 'rule_name': 'generate_jni_headers', 'rule_sources': ['public/android/java/src/org/chromium/content/app/ChildProcessService.java', 'public/android/java/src/org/chromium/content/app/ContentMain.java', 'public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java', 'public/android/java/src/org/chromium/content/browser/BatteryStatusManager.java', 'public/android/java/src/org/chromium/content/browser/BrowserStartupController.java', 'public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java', 'public/android/java/src/org/chromium/content/browser/ContentSettings.java', 'public/android/java/src/org/chromium/content/browser/ContentVideoView.java', 'public/android/java/src/org/chromium/content/browser/ContentViewCore.java', 'public/android/java/src/org/chromium/content/browser/ContentViewRenderView.java', 'public/android/java/src/org/chromium/content/browser/ContentViewStatics.java', 'public/android/java/src/org/chromium/content/browser/DeviceSensors.java', 'public/android/java/src/org/chromium/content/browser/DownloadController.java', 'public/android/java/src/org/chromium/content/browser/input/ImeAdapter.java', 'public/android/java/src/org/chromium/content/browser/input/DateTimeChooserAndroid.java', 'public/android/java/src/org/chromium/content/browser/InterstitialPageDelegateAndroid.java', 'public/android/java/src/org/chromium/content/browser/LoadUrlParams.java', 'public/android/java/src/org/chromium/content/browser/LocationProviderAdapter.java', 'public/android/java/src/org/chromium/content/browser/MediaDrmCredentialManager.java', 'public/android/java/src/org/chromium/content/browser/MediaResourceGetter.java', 'public/android/java/src/org/chromium/content/browser/PowerSaveBlocker.java', 'public/android/java/src/org/chromium/content/browser/ScreenOrientationProvider.java', 'public/android/java/src/org/chromium/content/browser/SpeechRecognition.java', 'public/android/java/src/org/chromium/content/browser/TouchEventSynthesizer.java', 'public/android/java/src/org/chromium/content/browser/TracingControllerAndroid.java', 'public/android/java/src/org/chromium/content/browser/VibrationProvider.java', 'public/android/java/src/org/chromium/content/browser/WebContentsObserverAndroid.java', 'public/android/java/src/org/chromium/content/browser/framehost/NavigationControllerImpl.java', 'public/android/java/src/org/chromium/content/browser/webcontents/WebContentsImpl.java', 'public/android/java/src/org/chromium/content/common/DeviceTelephonyInfo.java'], 'action': ['../base/android/jni_generator/jni_generator.py', '--input_file', '$(RULE_SOURCES)', '--output_dir', '$(gyp_shared_intermediate_dir)/content/jni', '--includes', 'base/android/jni_generator/jni_generator_helper.h', '--optimize_generation', '0', '--jarjar', '../android_webview/build/jarjar-rules.txt', '--ptr_type', 'long'], 'message': 'Generating JNI bindings from $(RULE_SOURCES)'}":
 $(gyp_shared_intermediate_dir)/content/jni/ChildProcessService_jni.h: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/content/jni/ChildProcessService_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/jni/ChildProcessService_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
@@ -43,6 +43,14 @@
 	mkdir -p $(gyp_shared_intermediate_dir)/content/jni; cd $(gyp_local_path)/content; ../base/android/jni_generator/jni_generator.py --input_file public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java --output_dir "$(gyp_shared_intermediate_dir)/content/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../android_webview/build/jarjar-rules.txt --ptr_type long
 
 
+$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h: $(LOCAL_PATH)/content/public/android/java/src/org/chromium/content/browser/BatteryStatusManager.java $(LOCAL_PATH)/base/android/jni_generator/jni_generator.py $(LOCAL_PATH)/android_webview/build/jarjar-rules.txt $(GYP_TARGET_DEPENDENCIES)
+	mkdir -p $(gyp_shared_intermediate_dir)/content/jni; cd $(gyp_local_path)/content; ../base/android/jni_generator/jni_generator.py --input_file public/android/java/src/org/chromium/content/browser/BatteryStatusManager.java --output_dir "$(gyp_shared_intermediate_dir)/content/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../android_webview/build/jarjar-rules.txt --ptr_type long
+
+
 $(gyp_shared_intermediate_dir)/content/jni/BrowserStartupController_jni.h: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/content/jni/BrowserStartupController_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/jni/BrowserStartupController_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
@@ -99,12 +107,12 @@
 	mkdir -p $(gyp_shared_intermediate_dir)/content/jni; cd $(gyp_local_path)/content; ../base/android/jni_generator/jni_generator.py --input_file public/android/java/src/org/chromium/content/browser/ContentViewStatics.java --output_dir "$(gyp_shared_intermediate_dir)/content/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../android_webview/build/jarjar-rules.txt --ptr_type long
 
 
-$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h: gyp_local_path := $(LOCAL_PATH)
-$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
-$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
-$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h: $(LOCAL_PATH)/content/public/android/java/src/org/chromium/content/browser/DeviceMotionAndOrientation.java $(LOCAL_PATH)/base/android/jni_generator/jni_generator.py $(LOCAL_PATH)/android_webview/build/jarjar-rules.txt $(GYP_TARGET_DEPENDENCIES)
-	mkdir -p $(gyp_shared_intermediate_dir)/content/jni; cd $(gyp_local_path)/content; ../base/android/jni_generator/jni_generator.py --input_file public/android/java/src/org/chromium/content/browser/DeviceMotionAndOrientation.java --output_dir "$(gyp_shared_intermediate_dir)/content/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../android_webview/build/jarjar-rules.txt --ptr_type long
+$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h: $(LOCAL_PATH)/content/public/android/java/src/org/chromium/content/browser/DeviceSensors.java $(LOCAL_PATH)/base/android/jni_generator/jni_generator.py $(LOCAL_PATH)/android_webview/build/jarjar-rules.txt $(GYP_TARGET_DEPENDENCIES)
+	mkdir -p $(gyp_shared_intermediate_dir)/content/jni; cd $(gyp_local_path)/content; ../base/android/jni_generator/jni_generator.py --input_file public/android/java/src/org/chromium/content/browser/DeviceSensors.java --output_dir "$(gyp_shared_intermediate_dir)/content/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../android_webview/build/jarjar-rules.txt --ptr_type long
 
 
 $(gyp_shared_intermediate_dir)/content/jni/DownloadController_jni.h: gyp_local_path := $(LOCAL_PATH)
@@ -256,6 +264,7 @@
 	$(gyp_shared_intermediate_dir)/content/jni/ChildProcessService_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentMain_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/BrowserAccessibilityManager_jni.h \
+	$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/BrowserStartupController_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ChildProcessLauncher_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentSettings_jni.h \
@@ -263,7 +272,7 @@
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewCore_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewRenderView_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewStatics_jni.h \
-	$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h \
+	$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/DownloadController_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ImeAdapter_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/DateTimeChooserAndroid_jni.h \
@@ -290,6 +299,7 @@
 	$(gyp_shared_intermediate_dir)/content/jni/ChildProcessService_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentMain_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/BrowserAccessibilityManager_jni.h \
+	$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/BrowserStartupController_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ChildProcessLauncher_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentSettings_jni.h \
@@ -297,7 +307,7 @@
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewCore_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewRenderView_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewStatics_jni.h \
-	$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h \
+	$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/DownloadController_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ImeAdapter_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/DateTimeChooserAndroid_jni.h \
diff --git a/content/content_jni_headers.target.linux-x86_64.mk b/content/content_jni_headers.target.linux-x86_64.mk
index 38b76b7..e80c128 100644
--- a/content/content_jni_headers.target.linux-x86_64.mk
+++ b/content/content_jni_headers.target.linux-x86_64.mk
@@ -18,7 +18,7 @@
 
 
 ### Generated for rule "content_content_gyp_content_jni_headers_target_generate_jni_headers":
-# "{'inputs': ['../base/android/jni_generator/jni_generator.py', '../android_webview/build/jarjar-rules.txt'], 'process_outputs_as_sources': '1', 'extension': 'java', 'outputs': ['$(gyp_shared_intermediate_dir)/content/jni/%(INPUT_ROOT)s_jni.h'], 'rule_name': 'generate_jni_headers', 'rule_sources': ['public/android/java/src/org/chromium/content/app/ChildProcessService.java', 'public/android/java/src/org/chromium/content/app/ContentMain.java', 'public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java', 'public/android/java/src/org/chromium/content/browser/BrowserStartupController.java', 'public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java', 'public/android/java/src/org/chromium/content/browser/ContentSettings.java', 'public/android/java/src/org/chromium/content/browser/ContentVideoView.java', 'public/android/java/src/org/chromium/content/browser/ContentViewCore.java', 'public/android/java/src/org/chromium/content/browser/ContentViewRenderView.java', 'public/android/java/src/org/chromium/content/browser/ContentViewStatics.java', 'public/android/java/src/org/chromium/content/browser/DeviceMotionAndOrientation.java', 'public/android/java/src/org/chromium/content/browser/DownloadController.java', 'public/android/java/src/org/chromium/content/browser/input/ImeAdapter.java', 'public/android/java/src/org/chromium/content/browser/input/DateTimeChooserAndroid.java', 'public/android/java/src/org/chromium/content/browser/InterstitialPageDelegateAndroid.java', 'public/android/java/src/org/chromium/content/browser/LoadUrlParams.java', 'public/android/java/src/org/chromium/content/browser/LocationProviderAdapter.java', 'public/android/java/src/org/chromium/content/browser/MediaDrmCredentialManager.java', 'public/android/java/src/org/chromium/content/browser/MediaResourceGetter.java', 'public/android/java/src/org/chromium/content/browser/PowerSaveBlocker.java', 'public/android/java/src/org/chromium/content/browser/ScreenOrientationProvider.java', 'public/android/java/src/org/chromium/content/browser/SpeechRecognition.java', 'public/android/java/src/org/chromium/content/browser/TouchEventSynthesizer.java', 'public/android/java/src/org/chromium/content/browser/TracingControllerAndroid.java', 'public/android/java/src/org/chromium/content/browser/VibrationProvider.java', 'public/android/java/src/org/chromium/content/browser/WebContentsObserverAndroid.java', 'public/android/java/src/org/chromium/content/browser/framehost/NavigationControllerImpl.java', 'public/android/java/src/org/chromium/content/browser/webcontents/WebContentsImpl.java', 'public/android/java/src/org/chromium/content/common/DeviceTelephonyInfo.java'], 'action': ['../base/android/jni_generator/jni_generator.py', '--input_file', '$(RULE_SOURCES)', '--output_dir', '$(gyp_shared_intermediate_dir)/content/jni', '--includes', 'base/android/jni_generator/jni_generator_helper.h', '--optimize_generation', '0', '--jarjar', '../android_webview/build/jarjar-rules.txt', '--ptr_type', 'long'], 'message': 'Generating JNI bindings from $(RULE_SOURCES)'}":
+# "{'inputs': ['../base/android/jni_generator/jni_generator.py', '../android_webview/build/jarjar-rules.txt'], 'process_outputs_as_sources': '1', 'extension': 'java', 'outputs': ['$(gyp_shared_intermediate_dir)/content/jni/%(INPUT_ROOT)s_jni.h'], 'rule_name': 'generate_jni_headers', 'rule_sources': ['public/android/java/src/org/chromium/content/app/ChildProcessService.java', 'public/android/java/src/org/chromium/content/app/ContentMain.java', 'public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java', 'public/android/java/src/org/chromium/content/browser/BatteryStatusManager.java', 'public/android/java/src/org/chromium/content/browser/BrowserStartupController.java', 'public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java', 'public/android/java/src/org/chromium/content/browser/ContentSettings.java', 'public/android/java/src/org/chromium/content/browser/ContentVideoView.java', 'public/android/java/src/org/chromium/content/browser/ContentViewCore.java', 'public/android/java/src/org/chromium/content/browser/ContentViewRenderView.java', 'public/android/java/src/org/chromium/content/browser/ContentViewStatics.java', 'public/android/java/src/org/chromium/content/browser/DeviceSensors.java', 'public/android/java/src/org/chromium/content/browser/DownloadController.java', 'public/android/java/src/org/chromium/content/browser/input/ImeAdapter.java', 'public/android/java/src/org/chromium/content/browser/input/DateTimeChooserAndroid.java', 'public/android/java/src/org/chromium/content/browser/InterstitialPageDelegateAndroid.java', 'public/android/java/src/org/chromium/content/browser/LoadUrlParams.java', 'public/android/java/src/org/chromium/content/browser/LocationProviderAdapter.java', 'public/android/java/src/org/chromium/content/browser/MediaDrmCredentialManager.java', 'public/android/java/src/org/chromium/content/browser/MediaResourceGetter.java', 'public/android/java/src/org/chromium/content/browser/PowerSaveBlocker.java', 'public/android/java/src/org/chromium/content/browser/ScreenOrientationProvider.java', 'public/android/java/src/org/chromium/content/browser/SpeechRecognition.java', 'public/android/java/src/org/chromium/content/browser/TouchEventSynthesizer.java', 'public/android/java/src/org/chromium/content/browser/TracingControllerAndroid.java', 'public/android/java/src/org/chromium/content/browser/VibrationProvider.java', 'public/android/java/src/org/chromium/content/browser/WebContentsObserverAndroid.java', 'public/android/java/src/org/chromium/content/browser/framehost/NavigationControllerImpl.java', 'public/android/java/src/org/chromium/content/browser/webcontents/WebContentsImpl.java', 'public/android/java/src/org/chromium/content/common/DeviceTelephonyInfo.java'], 'action': ['../base/android/jni_generator/jni_generator.py', '--input_file', '$(RULE_SOURCES)', '--output_dir', '$(gyp_shared_intermediate_dir)/content/jni', '--includes', 'base/android/jni_generator/jni_generator_helper.h', '--optimize_generation', '0', '--jarjar', '../android_webview/build/jarjar-rules.txt', '--ptr_type', 'long'], 'message': 'Generating JNI bindings from $(RULE_SOURCES)'}":
 $(gyp_shared_intermediate_dir)/content/jni/ChildProcessService_jni.h: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/content/jni/ChildProcessService_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/jni/ChildProcessService_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
@@ -43,6 +43,14 @@
 	mkdir -p $(gyp_shared_intermediate_dir)/content/jni; cd $(gyp_local_path)/content; ../base/android/jni_generator/jni_generator.py --input_file public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java --output_dir "$(gyp_shared_intermediate_dir)/content/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../android_webview/build/jarjar-rules.txt --ptr_type long
 
 
+$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h: $(LOCAL_PATH)/content/public/android/java/src/org/chromium/content/browser/BatteryStatusManager.java $(LOCAL_PATH)/base/android/jni_generator/jni_generator.py $(LOCAL_PATH)/android_webview/build/jarjar-rules.txt $(GYP_TARGET_DEPENDENCIES)
+	mkdir -p $(gyp_shared_intermediate_dir)/content/jni; cd $(gyp_local_path)/content; ../base/android/jni_generator/jni_generator.py --input_file public/android/java/src/org/chromium/content/browser/BatteryStatusManager.java --output_dir "$(gyp_shared_intermediate_dir)/content/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../android_webview/build/jarjar-rules.txt --ptr_type long
+
+
 $(gyp_shared_intermediate_dir)/content/jni/BrowserStartupController_jni.h: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/content/jni/BrowserStartupController_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/jni/BrowserStartupController_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
@@ -99,12 +107,12 @@
 	mkdir -p $(gyp_shared_intermediate_dir)/content/jni; cd $(gyp_local_path)/content; ../base/android/jni_generator/jni_generator.py --input_file public/android/java/src/org/chromium/content/browser/ContentViewStatics.java --output_dir "$(gyp_shared_intermediate_dir)/content/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../android_webview/build/jarjar-rules.txt --ptr_type long
 
 
-$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h: gyp_local_path := $(LOCAL_PATH)
-$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
-$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
-$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h: $(LOCAL_PATH)/content/public/android/java/src/org/chromium/content/browser/DeviceMotionAndOrientation.java $(LOCAL_PATH)/base/android/jni_generator/jni_generator.py $(LOCAL_PATH)/android_webview/build/jarjar-rules.txt $(GYP_TARGET_DEPENDENCIES)
-	mkdir -p $(gyp_shared_intermediate_dir)/content/jni; cd $(gyp_local_path)/content; ../base/android/jni_generator/jni_generator.py --input_file public/android/java/src/org/chromium/content/browser/DeviceMotionAndOrientation.java --output_dir "$(gyp_shared_intermediate_dir)/content/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../android_webview/build/jarjar-rules.txt --ptr_type long
+$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h: $(LOCAL_PATH)/content/public/android/java/src/org/chromium/content/browser/DeviceSensors.java $(LOCAL_PATH)/base/android/jni_generator/jni_generator.py $(LOCAL_PATH)/android_webview/build/jarjar-rules.txt $(GYP_TARGET_DEPENDENCIES)
+	mkdir -p $(gyp_shared_intermediate_dir)/content/jni; cd $(gyp_local_path)/content; ../base/android/jni_generator/jni_generator.py --input_file public/android/java/src/org/chromium/content/browser/DeviceSensors.java --output_dir "$(gyp_shared_intermediate_dir)/content/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../android_webview/build/jarjar-rules.txt --ptr_type long
 
 
 $(gyp_shared_intermediate_dir)/content/jni/DownloadController_jni.h: gyp_local_path := $(LOCAL_PATH)
@@ -256,6 +264,7 @@
 	$(gyp_shared_intermediate_dir)/content/jni/ChildProcessService_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentMain_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/BrowserAccessibilityManager_jni.h \
+	$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/BrowserStartupController_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ChildProcessLauncher_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentSettings_jni.h \
@@ -263,7 +272,7 @@
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewCore_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewRenderView_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewStatics_jni.h \
-	$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h \
+	$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/DownloadController_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ImeAdapter_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/DateTimeChooserAndroid_jni.h \
@@ -290,6 +299,7 @@
 	$(gyp_shared_intermediate_dir)/content/jni/ChildProcessService_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentMain_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/BrowserAccessibilityManager_jni.h \
+	$(gyp_shared_intermediate_dir)/content/jni/BatteryStatusManager_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/BrowserStartupController_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ChildProcessLauncher_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentSettings_jni.h \
@@ -297,7 +307,7 @@
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewCore_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewRenderView_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ContentViewStatics_jni.h \
-	$(gyp_shared_intermediate_dir)/content/jni/DeviceMotionAndOrientation_jni.h \
+	$(gyp_shared_intermediate_dir)/content/jni/DeviceSensors_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/DownloadController_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/ImeAdapter_jni.h \
 	$(gyp_shared_intermediate_dir)/content/jni/DateTimeChooserAndroid_jni.h \
diff --git a/content/content_renderer.gypi b/content/content_renderer.gypi
index a4126a0..8f86f8b 100644
--- a/content/content_renderer.gypi
+++ b/content/content_renderer.gypi
@@ -113,12 +113,12 @@
     'renderer/cursor_utils.h',
     'renderer/date_time_suggestion_builder.cc',
     'renderer/date_time_suggestion_builder.h',
-    'renderer/device_orientation/device_motion_event_pump.cc',
-    'renderer/device_orientation/device_motion_event_pump.h',
-    'renderer/device_orientation/device_orientation_event_pump.cc',
-    'renderer/device_orientation/device_orientation_event_pump.h',
-    'renderer/device_orientation/device_sensor_event_pump.cc',
-    'renderer/device_orientation/device_sensor_event_pump.h',
+    'renderer/device_sensors/device_motion_event_pump.cc',
+    'renderer/device_sensors/device_motion_event_pump.h',
+    'renderer/device_sensors/device_orientation_event_pump.cc',
+    'renderer/device_sensors/device_orientation_event_pump.h',
+    'renderer/device_sensors/device_sensor_event_pump.cc',
+    'renderer/device_sensors/device_sensor_event_pump.h',
     'renderer/devtools/devtools_agent.cc',
     'renderer/devtools/devtools_agent.h',
     'renderer/devtools/devtools_agent_filter.cc',
@@ -166,6 +166,8 @@
     'renderer/gpu/stream_texture_host_android.h',
     'renderer/history_controller.cc',
     'renderer/history_controller.h',
+    'renderer/history_entry.cc',
+    'renderer/history_entry.h',
     'renderer/idle_user_detector.cc',
     'renderer/idle_user_detector.h',
     'renderer/image_loading_helper.cc',
@@ -323,8 +325,6 @@
     'renderer/npapi/webplugin_delegate_proxy.h',
     'renderer/npapi/webplugin_impl.cc',
     'renderer/npapi/webplugin_impl.h',
-    'renderer/paint_aggregator.cc',
-    'renderer/paint_aggregator.h',
     'renderer/pepper/audio_helper.cc',
     'renderer/pepper/audio_helper.h',
     'renderer/pepper/common.h',
@@ -661,8 +661,6 @@
         'renderer/media/native_handle_impl.h',
         'renderer/media/peer_connection_audio_sink_owner.cc',
         'renderer/media/peer_connection_audio_sink_owner.h',
-        'renderer/media/peer_connection_handler_base.cc',
-        'renderer/media/peer_connection_handler_base.h',
         'renderer/media/peer_connection_identity_service.cc',
         'renderer/media/peer_connection_identity_service.h',
         'renderer/media/peer_connection_tracker.cc',
@@ -691,6 +689,8 @@
         'renderer/media/video_source_handler.h',
         'renderer/media/webaudio_capturer_source.cc',
         'renderer/media/webaudio_capturer_source.h',
+        'renderer/media/webrtc/webrtc_video_track_adapter.cc',
+        'renderer/media/webrtc/webrtc_video_track_adapter.h',
         'renderer/media/webrtc/media_stream_remote_video_source.cc',
         'renderer/media/webrtc/media_stream_remote_video_source.h', 
         'renderer/media/webrtc/media_stream_track_metrics.cc',
@@ -701,6 +701,8 @@
         'renderer/media/webrtc/webrtc_audio_sink_adapter.h',
         'renderer/media/webrtc/webrtc_local_audio_track_adapter.cc',
         'renderer/media/webrtc/webrtc_local_audio_track_adapter.h',
+        'renderer/media/webrtc/webrtc_media_stream_adapter.cc',
+        'renderer/media/webrtc/webrtc_media_stream_adapter.h',
         'renderer/media/webrtc/webrtc_video_capturer_adapter.cc',
         'renderer/media/webrtc/webrtc_video_capturer_adapter.h',
         'renderer/media/webrtc_audio_capturer.cc',
diff --git a/content/content_renderer.target.darwin-arm.mk b/content/content_renderer.target.darwin-arm.mk
index 6c76f7f..82b0079 100644
--- a/content/content_renderer.target.darwin-arm.mk
+++ b/content/content_renderer.target.darwin-arm.mk
@@ -68,9 +68,9 @@
 	content/renderer/context_menu_params_builder.cc \
 	content/renderer/cursor_utils.cc \
 	content/renderer/date_time_suggestion_builder.cc \
-	content/renderer/device_orientation/device_motion_event_pump.cc \
-	content/renderer/device_orientation/device_orientation_event_pump.cc \
-	content/renderer/device_orientation/device_sensor_event_pump.cc \
+	content/renderer/device_sensors/device_motion_event_pump.cc \
+	content/renderer/device_sensors/device_orientation_event_pump.cc \
+	content/renderer/device_sensors/device_sensor_event_pump.cc \
 	content/renderer/devtools/devtools_agent.cc \
 	content/renderer/devtools/devtools_agent_filter.cc \
 	content/renderer/devtools/devtools_client.cc \
@@ -94,6 +94,7 @@
 	content/renderer/gpu/render_widget_compositor.cc \
 	content/renderer/gpu/stream_texture_host_android.cc \
 	content/renderer/history_controller.cc \
+	content/renderer/history_entry.cc \
 	content/renderer/idle_user_detector.cc \
 	content/renderer/image_loading_helper.cc \
 	content/renderer/ime_event_guard.cc \
@@ -159,7 +160,6 @@
 	content/renderer/mhtml_generator.cc \
 	content/renderer/mojo/mojo_render_process_observer.cc \
 	content/renderer/mouse_lock_dispatcher.cc \
-	content/renderer/paint_aggregator.cc \
 	content/renderer/push_messaging_dispatcher.cc \
 	content/renderer/render_frame_impl.cc \
 	content/renderer/render_process_impl.cc \
@@ -226,7 +226,6 @@
 	content/renderer/media/media_stream_video_track.cc \
 	content/renderer/media/native_handle_impl.cc \
 	content/renderer/media/peer_connection_audio_sink_owner.cc \
-	content/renderer/media/peer_connection_handler_base.cc \
 	content/renderer/media/peer_connection_identity_service.cc \
 	content/renderer/media/peer_connection_tracker.cc \
 	content/renderer/media/remote_media_stream_impl.cc \
@@ -241,10 +240,12 @@
 	content/renderer/media/rtc_video_renderer.cc \
 	content/renderer/media/video_source_handler.cc \
 	content/renderer/media/webaudio_capturer_source.cc \
+	content/renderer/media/webrtc/webrtc_video_track_adapter.cc \
 	content/renderer/media/webrtc/media_stream_remote_video_source.cc \
 	content/renderer/media/webrtc/media_stream_track_metrics.cc \
 	content/renderer/media/webrtc/webrtc_audio_sink_adapter.cc \
 	content/renderer/media/webrtc/webrtc_local_audio_track_adapter.cc \
+	content/renderer/media/webrtc/webrtc_media_stream_adapter.cc \
 	content/renderer/media/webrtc/webrtc_video_capturer_adapter.cc \
 	content/renderer/media/webrtc_audio_capturer.cc \
 	content/renderer/media/webrtc_audio_device_impl.cc \
@@ -331,12 +332,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
 	'-DCHROME_PNG_READ_PACK_SUPPORT' \
@@ -506,12 +510,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
 	'-DCHROME_PNG_READ_PACK_SUPPORT' \
@@ -634,7 +641,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_renderer.target.darwin-mips.mk b/content/content_renderer.target.darwin-mips.mk
index a9fa096..f88a77c 100644
--- a/content/content_renderer.target.darwin-mips.mk
+++ b/content/content_renderer.target.darwin-mips.mk
@@ -68,9 +68,9 @@
 	content/renderer/context_menu_params_builder.cc \
 	content/renderer/cursor_utils.cc \
 	content/renderer/date_time_suggestion_builder.cc \
-	content/renderer/device_orientation/device_motion_event_pump.cc \
-	content/renderer/device_orientation/device_orientation_event_pump.cc \
-	content/renderer/device_orientation/device_sensor_event_pump.cc \
+	content/renderer/device_sensors/device_motion_event_pump.cc \
+	content/renderer/device_sensors/device_orientation_event_pump.cc \
+	content/renderer/device_sensors/device_sensor_event_pump.cc \
 	content/renderer/devtools/devtools_agent.cc \
 	content/renderer/devtools/devtools_agent_filter.cc \
 	content/renderer/devtools/devtools_client.cc \
@@ -94,6 +94,7 @@
 	content/renderer/gpu/render_widget_compositor.cc \
 	content/renderer/gpu/stream_texture_host_android.cc \
 	content/renderer/history_controller.cc \
+	content/renderer/history_entry.cc \
 	content/renderer/idle_user_detector.cc \
 	content/renderer/image_loading_helper.cc \
 	content/renderer/ime_event_guard.cc \
@@ -159,7 +160,6 @@
 	content/renderer/mhtml_generator.cc \
 	content/renderer/mojo/mojo_render_process_observer.cc \
 	content/renderer/mouse_lock_dispatcher.cc \
-	content/renderer/paint_aggregator.cc \
 	content/renderer/push_messaging_dispatcher.cc \
 	content/renderer/render_frame_impl.cc \
 	content/renderer/render_process_impl.cc \
@@ -226,7 +226,6 @@
 	content/renderer/media/media_stream_video_track.cc \
 	content/renderer/media/native_handle_impl.cc \
 	content/renderer/media/peer_connection_audio_sink_owner.cc \
-	content/renderer/media/peer_connection_handler_base.cc \
 	content/renderer/media/peer_connection_identity_service.cc \
 	content/renderer/media/peer_connection_tracker.cc \
 	content/renderer/media/remote_media_stream_impl.cc \
@@ -241,10 +240,12 @@
 	content/renderer/media/rtc_video_renderer.cc \
 	content/renderer/media/video_source_handler.cc \
 	content/renderer/media/webaudio_capturer_source.cc \
+	content/renderer/media/webrtc/webrtc_video_track_adapter.cc \
 	content/renderer/media/webrtc/media_stream_remote_video_source.cc \
 	content/renderer/media/webrtc/media_stream_track_metrics.cc \
 	content/renderer/media/webrtc/webrtc_audio_sink_adapter.cc \
 	content/renderer/media/webrtc/webrtc_local_audio_track_adapter.cc \
+	content/renderer/media/webrtc/webrtc_media_stream_adapter.cc \
 	content/renderer/media/webrtc/webrtc_video_capturer_adapter.cc \
 	content/renderer/media/webrtc_audio_capturer.cc \
 	content/renderer/media/webrtc_audio_device_impl.cc \
@@ -330,12 +331,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
 	'-DCHROME_PNG_READ_PACK_SUPPORT' \
@@ -504,12 +508,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
 	'-DCHROME_PNG_READ_PACK_SUPPORT' \
@@ -630,7 +637,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_renderer.target.darwin-x86.mk b/content/content_renderer.target.darwin-x86.mk
index 09c0cbd..fa81810 100644
--- a/content/content_renderer.target.darwin-x86.mk
+++ b/content/content_renderer.target.darwin-x86.mk
@@ -68,9 +68,9 @@
 	content/renderer/context_menu_params_builder.cc \
 	content/renderer/cursor_utils.cc \
 	content/renderer/date_time_suggestion_builder.cc \
-	content/renderer/device_orientation/device_motion_event_pump.cc \
-	content/renderer/device_orientation/device_orientation_event_pump.cc \
-	content/renderer/device_orientation/device_sensor_event_pump.cc \
+	content/renderer/device_sensors/device_motion_event_pump.cc \
+	content/renderer/device_sensors/device_orientation_event_pump.cc \
+	content/renderer/device_sensors/device_sensor_event_pump.cc \
 	content/renderer/devtools/devtools_agent.cc \
 	content/renderer/devtools/devtools_agent_filter.cc \
 	content/renderer/devtools/devtools_client.cc \
@@ -94,6 +94,7 @@
 	content/renderer/gpu/render_widget_compositor.cc \
 	content/renderer/gpu/stream_texture_host_android.cc \
 	content/renderer/history_controller.cc \
+	content/renderer/history_entry.cc \
 	content/renderer/idle_user_detector.cc \
 	content/renderer/image_loading_helper.cc \
 	content/renderer/ime_event_guard.cc \
@@ -159,7 +160,6 @@
 	content/renderer/mhtml_generator.cc \
 	content/renderer/mojo/mojo_render_process_observer.cc \
 	content/renderer/mouse_lock_dispatcher.cc \
-	content/renderer/paint_aggregator.cc \
 	content/renderer/push_messaging_dispatcher.cc \
 	content/renderer/render_frame_impl.cc \
 	content/renderer/render_process_impl.cc \
@@ -226,7 +226,6 @@
 	content/renderer/media/media_stream_video_track.cc \
 	content/renderer/media/native_handle_impl.cc \
 	content/renderer/media/peer_connection_audio_sink_owner.cc \
-	content/renderer/media/peer_connection_handler_base.cc \
 	content/renderer/media/peer_connection_identity_service.cc \
 	content/renderer/media/peer_connection_tracker.cc \
 	content/renderer/media/remote_media_stream_impl.cc \
@@ -241,10 +240,12 @@
 	content/renderer/media/rtc_video_renderer.cc \
 	content/renderer/media/video_source_handler.cc \
 	content/renderer/media/webaudio_capturer_source.cc \
+	content/renderer/media/webrtc/webrtc_video_track_adapter.cc \
 	content/renderer/media/webrtc/media_stream_remote_video_source.cc \
 	content/renderer/media/webrtc/media_stream_track_metrics.cc \
 	content/renderer/media/webrtc/webrtc_audio_sink_adapter.cc \
 	content/renderer/media/webrtc/webrtc_local_audio_track_adapter.cc \
+	content/renderer/media/webrtc/webrtc_media_stream_adapter.cc \
 	content/renderer/media/webrtc/webrtc_video_capturer_adapter.cc \
 	content/renderer/media/webrtc_audio_capturer.cc \
 	content/renderer/media/webrtc_audio_device_impl.cc \
@@ -331,12 +332,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
 	'-DCHROME_PNG_READ_PACK_SUPPORT' \
@@ -505,12 +509,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
 	'-DCHROME_PNG_READ_PACK_SUPPORT' \
@@ -630,7 +637,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_renderer.target.darwin-x86_64.mk b/content/content_renderer.target.darwin-x86_64.mk
index fbfb81a..48679a1 100644
--- a/content/content_renderer.target.darwin-x86_64.mk
+++ b/content/content_renderer.target.darwin-x86_64.mk
@@ -68,9 +68,9 @@
 	content/renderer/context_menu_params_builder.cc \
 	content/renderer/cursor_utils.cc \
 	content/renderer/date_time_suggestion_builder.cc \
-	content/renderer/device_orientation/device_motion_event_pump.cc \
-	content/renderer/device_orientation/device_orientation_event_pump.cc \
-	content/renderer/device_orientation/device_sensor_event_pump.cc \
+	content/renderer/device_sensors/device_motion_event_pump.cc \
+	content/renderer/device_sensors/device_orientation_event_pump.cc \
+	content/renderer/device_sensors/device_sensor_event_pump.cc \
 	content/renderer/devtools/devtools_agent.cc \
 	content/renderer/devtools/devtools_agent_filter.cc \
 	content/renderer/devtools/devtools_client.cc \
@@ -94,6 +94,7 @@
 	content/renderer/gpu/render_widget_compositor.cc \
 	content/renderer/gpu/stream_texture_host_android.cc \
 	content/renderer/history_controller.cc \
+	content/renderer/history_entry.cc \
 	content/renderer/idle_user_detector.cc \
 	content/renderer/image_loading_helper.cc \
 	content/renderer/ime_event_guard.cc \
@@ -159,7 +160,6 @@
 	content/renderer/mhtml_generator.cc \
 	content/renderer/mojo/mojo_render_process_observer.cc \
 	content/renderer/mouse_lock_dispatcher.cc \
-	content/renderer/paint_aggregator.cc \
 	content/renderer/push_messaging_dispatcher.cc \
 	content/renderer/render_frame_impl.cc \
 	content/renderer/render_process_impl.cc \
@@ -226,7 +226,6 @@
 	content/renderer/media/media_stream_video_track.cc \
 	content/renderer/media/native_handle_impl.cc \
 	content/renderer/media/peer_connection_audio_sink_owner.cc \
-	content/renderer/media/peer_connection_handler_base.cc \
 	content/renderer/media/peer_connection_identity_service.cc \
 	content/renderer/media/peer_connection_tracker.cc \
 	content/renderer/media/remote_media_stream_impl.cc \
@@ -241,10 +240,12 @@
 	content/renderer/media/rtc_video_renderer.cc \
 	content/renderer/media/video_source_handler.cc \
 	content/renderer/media/webaudio_capturer_source.cc \
+	content/renderer/media/webrtc/webrtc_video_track_adapter.cc \
 	content/renderer/media/webrtc/media_stream_remote_video_source.cc \
 	content/renderer/media/webrtc/media_stream_track_metrics.cc \
 	content/renderer/media/webrtc/webrtc_audio_sink_adapter.cc \
 	content/renderer/media/webrtc/webrtc_local_audio_track_adapter.cc \
+	content/renderer/media/webrtc/webrtc_media_stream_adapter.cc \
 	content/renderer/media/webrtc/webrtc_video_capturer_adapter.cc \
 	content/renderer/media/webrtc_audio_capturer.cc \
 	content/renderer/media/webrtc_audio_device_impl.cc \
@@ -332,12 +333,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
 	'-DCHROME_PNG_READ_PACK_SUPPORT' \
@@ -507,12 +511,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
 	'-DCHROME_PNG_READ_PACK_SUPPORT' \
@@ -632,7 +639,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_renderer.target.linux-arm.mk b/content/content_renderer.target.linux-arm.mk
index 6c76f7f..82b0079 100644
--- a/content/content_renderer.target.linux-arm.mk
+++ b/content/content_renderer.target.linux-arm.mk
@@ -68,9 +68,9 @@
 	content/renderer/context_menu_params_builder.cc \
 	content/renderer/cursor_utils.cc \
 	content/renderer/date_time_suggestion_builder.cc \
-	content/renderer/device_orientation/device_motion_event_pump.cc \
-	content/renderer/device_orientation/device_orientation_event_pump.cc \
-	content/renderer/device_orientation/device_sensor_event_pump.cc \
+	content/renderer/device_sensors/device_motion_event_pump.cc \
+	content/renderer/device_sensors/device_orientation_event_pump.cc \
+	content/renderer/device_sensors/device_sensor_event_pump.cc \
 	content/renderer/devtools/devtools_agent.cc \
 	content/renderer/devtools/devtools_agent_filter.cc \
 	content/renderer/devtools/devtools_client.cc \
@@ -94,6 +94,7 @@
 	content/renderer/gpu/render_widget_compositor.cc \
 	content/renderer/gpu/stream_texture_host_android.cc \
 	content/renderer/history_controller.cc \
+	content/renderer/history_entry.cc \
 	content/renderer/idle_user_detector.cc \
 	content/renderer/image_loading_helper.cc \
 	content/renderer/ime_event_guard.cc \
@@ -159,7 +160,6 @@
 	content/renderer/mhtml_generator.cc \
 	content/renderer/mojo/mojo_render_process_observer.cc \
 	content/renderer/mouse_lock_dispatcher.cc \
-	content/renderer/paint_aggregator.cc \
 	content/renderer/push_messaging_dispatcher.cc \
 	content/renderer/render_frame_impl.cc \
 	content/renderer/render_process_impl.cc \
@@ -226,7 +226,6 @@
 	content/renderer/media/media_stream_video_track.cc \
 	content/renderer/media/native_handle_impl.cc \
 	content/renderer/media/peer_connection_audio_sink_owner.cc \
-	content/renderer/media/peer_connection_handler_base.cc \
 	content/renderer/media/peer_connection_identity_service.cc \
 	content/renderer/media/peer_connection_tracker.cc \
 	content/renderer/media/remote_media_stream_impl.cc \
@@ -241,10 +240,12 @@
 	content/renderer/media/rtc_video_renderer.cc \
 	content/renderer/media/video_source_handler.cc \
 	content/renderer/media/webaudio_capturer_source.cc \
+	content/renderer/media/webrtc/webrtc_video_track_adapter.cc \
 	content/renderer/media/webrtc/media_stream_remote_video_source.cc \
 	content/renderer/media/webrtc/media_stream_track_metrics.cc \
 	content/renderer/media/webrtc/webrtc_audio_sink_adapter.cc \
 	content/renderer/media/webrtc/webrtc_local_audio_track_adapter.cc \
+	content/renderer/media/webrtc/webrtc_media_stream_adapter.cc \
 	content/renderer/media/webrtc/webrtc_video_capturer_adapter.cc \
 	content/renderer/media/webrtc_audio_capturer.cc \
 	content/renderer/media/webrtc_audio_device_impl.cc \
@@ -331,12 +332,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
 	'-DCHROME_PNG_READ_PACK_SUPPORT' \
@@ -506,12 +510,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
 	'-DCHROME_PNG_READ_PACK_SUPPORT' \
@@ -634,7 +641,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_renderer.target.linux-mips.mk b/content/content_renderer.target.linux-mips.mk
index a9fa096..f88a77c 100644
--- a/content/content_renderer.target.linux-mips.mk
+++ b/content/content_renderer.target.linux-mips.mk
@@ -68,9 +68,9 @@
 	content/renderer/context_menu_params_builder.cc \
 	content/renderer/cursor_utils.cc \
 	content/renderer/date_time_suggestion_builder.cc \
-	content/renderer/device_orientation/device_motion_event_pump.cc \
-	content/renderer/device_orientation/device_orientation_event_pump.cc \
-	content/renderer/device_orientation/device_sensor_event_pump.cc \
+	content/renderer/device_sensors/device_motion_event_pump.cc \
+	content/renderer/device_sensors/device_orientation_event_pump.cc \
+	content/renderer/device_sensors/device_sensor_event_pump.cc \
 	content/renderer/devtools/devtools_agent.cc \
 	content/renderer/devtools/devtools_agent_filter.cc \
 	content/renderer/devtools/devtools_client.cc \
@@ -94,6 +94,7 @@
 	content/renderer/gpu/render_widget_compositor.cc \
 	content/renderer/gpu/stream_texture_host_android.cc \
 	content/renderer/history_controller.cc \
+	content/renderer/history_entry.cc \
 	content/renderer/idle_user_detector.cc \
 	content/renderer/image_loading_helper.cc \
 	content/renderer/ime_event_guard.cc \
@@ -159,7 +160,6 @@
 	content/renderer/mhtml_generator.cc \
 	content/renderer/mojo/mojo_render_process_observer.cc \
 	content/renderer/mouse_lock_dispatcher.cc \
-	content/renderer/paint_aggregator.cc \
 	content/renderer/push_messaging_dispatcher.cc \
 	content/renderer/render_frame_impl.cc \
 	content/renderer/render_process_impl.cc \
@@ -226,7 +226,6 @@
 	content/renderer/media/media_stream_video_track.cc \
 	content/renderer/media/native_handle_impl.cc \
 	content/renderer/media/peer_connection_audio_sink_owner.cc \
-	content/renderer/media/peer_connection_handler_base.cc \
 	content/renderer/media/peer_connection_identity_service.cc \
 	content/renderer/media/peer_connection_tracker.cc \
 	content/renderer/media/remote_media_stream_impl.cc \
@@ -241,10 +240,12 @@
 	content/renderer/media/rtc_video_renderer.cc \
 	content/renderer/media/video_source_handler.cc \
 	content/renderer/media/webaudio_capturer_source.cc \
+	content/renderer/media/webrtc/webrtc_video_track_adapter.cc \
 	content/renderer/media/webrtc/media_stream_remote_video_source.cc \
 	content/renderer/media/webrtc/media_stream_track_metrics.cc \
 	content/renderer/media/webrtc/webrtc_audio_sink_adapter.cc \
 	content/renderer/media/webrtc/webrtc_local_audio_track_adapter.cc \
+	content/renderer/media/webrtc/webrtc_media_stream_adapter.cc \
 	content/renderer/media/webrtc/webrtc_video_capturer_adapter.cc \
 	content/renderer/media/webrtc_audio_capturer.cc \
 	content/renderer/media/webrtc_audio_device_impl.cc \
@@ -330,12 +331,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
 	'-DCHROME_PNG_READ_PACK_SUPPORT' \
@@ -504,12 +508,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
 	'-DCHROME_PNG_READ_PACK_SUPPORT' \
@@ -630,7 +637,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_renderer.target.linux-x86.mk b/content/content_renderer.target.linux-x86.mk
index 09c0cbd..fa81810 100644
--- a/content/content_renderer.target.linux-x86.mk
+++ b/content/content_renderer.target.linux-x86.mk
@@ -68,9 +68,9 @@
 	content/renderer/context_menu_params_builder.cc \
 	content/renderer/cursor_utils.cc \
 	content/renderer/date_time_suggestion_builder.cc \
-	content/renderer/device_orientation/device_motion_event_pump.cc \
-	content/renderer/device_orientation/device_orientation_event_pump.cc \
-	content/renderer/device_orientation/device_sensor_event_pump.cc \
+	content/renderer/device_sensors/device_motion_event_pump.cc \
+	content/renderer/device_sensors/device_orientation_event_pump.cc \
+	content/renderer/device_sensors/device_sensor_event_pump.cc \
 	content/renderer/devtools/devtools_agent.cc \
 	content/renderer/devtools/devtools_agent_filter.cc \
 	content/renderer/devtools/devtools_client.cc \
@@ -94,6 +94,7 @@
 	content/renderer/gpu/render_widget_compositor.cc \
 	content/renderer/gpu/stream_texture_host_android.cc \
 	content/renderer/history_controller.cc \
+	content/renderer/history_entry.cc \
 	content/renderer/idle_user_detector.cc \
 	content/renderer/image_loading_helper.cc \
 	content/renderer/ime_event_guard.cc \
@@ -159,7 +160,6 @@
 	content/renderer/mhtml_generator.cc \
 	content/renderer/mojo/mojo_render_process_observer.cc \
 	content/renderer/mouse_lock_dispatcher.cc \
-	content/renderer/paint_aggregator.cc \
 	content/renderer/push_messaging_dispatcher.cc \
 	content/renderer/render_frame_impl.cc \
 	content/renderer/render_process_impl.cc \
@@ -226,7 +226,6 @@
 	content/renderer/media/media_stream_video_track.cc \
 	content/renderer/media/native_handle_impl.cc \
 	content/renderer/media/peer_connection_audio_sink_owner.cc \
-	content/renderer/media/peer_connection_handler_base.cc \
 	content/renderer/media/peer_connection_identity_service.cc \
 	content/renderer/media/peer_connection_tracker.cc \
 	content/renderer/media/remote_media_stream_impl.cc \
@@ -241,10 +240,12 @@
 	content/renderer/media/rtc_video_renderer.cc \
 	content/renderer/media/video_source_handler.cc \
 	content/renderer/media/webaudio_capturer_source.cc \
+	content/renderer/media/webrtc/webrtc_video_track_adapter.cc \
 	content/renderer/media/webrtc/media_stream_remote_video_source.cc \
 	content/renderer/media/webrtc/media_stream_track_metrics.cc \
 	content/renderer/media/webrtc/webrtc_audio_sink_adapter.cc \
 	content/renderer/media/webrtc/webrtc_local_audio_track_adapter.cc \
+	content/renderer/media/webrtc/webrtc_media_stream_adapter.cc \
 	content/renderer/media/webrtc/webrtc_video_capturer_adapter.cc \
 	content/renderer/media/webrtc_audio_capturer.cc \
 	content/renderer/media/webrtc_audio_device_impl.cc \
@@ -331,12 +332,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
 	'-DCHROME_PNG_READ_PACK_SUPPORT' \
@@ -505,12 +509,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
 	'-DCHROME_PNG_READ_PACK_SUPPORT' \
@@ -630,7 +637,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_renderer.target.linux-x86_64.mk b/content/content_renderer.target.linux-x86_64.mk
index fbfb81a..48679a1 100644
--- a/content/content_renderer.target.linux-x86_64.mk
+++ b/content/content_renderer.target.linux-x86_64.mk
@@ -68,9 +68,9 @@
 	content/renderer/context_menu_params_builder.cc \
 	content/renderer/cursor_utils.cc \
 	content/renderer/date_time_suggestion_builder.cc \
-	content/renderer/device_orientation/device_motion_event_pump.cc \
-	content/renderer/device_orientation/device_orientation_event_pump.cc \
-	content/renderer/device_orientation/device_sensor_event_pump.cc \
+	content/renderer/device_sensors/device_motion_event_pump.cc \
+	content/renderer/device_sensors/device_orientation_event_pump.cc \
+	content/renderer/device_sensors/device_sensor_event_pump.cc \
 	content/renderer/devtools/devtools_agent.cc \
 	content/renderer/devtools/devtools_agent_filter.cc \
 	content/renderer/devtools/devtools_client.cc \
@@ -94,6 +94,7 @@
 	content/renderer/gpu/render_widget_compositor.cc \
 	content/renderer/gpu/stream_texture_host_android.cc \
 	content/renderer/history_controller.cc \
+	content/renderer/history_entry.cc \
 	content/renderer/idle_user_detector.cc \
 	content/renderer/image_loading_helper.cc \
 	content/renderer/ime_event_guard.cc \
@@ -159,7 +160,6 @@
 	content/renderer/mhtml_generator.cc \
 	content/renderer/mojo/mojo_render_process_observer.cc \
 	content/renderer/mouse_lock_dispatcher.cc \
-	content/renderer/paint_aggregator.cc \
 	content/renderer/push_messaging_dispatcher.cc \
 	content/renderer/render_frame_impl.cc \
 	content/renderer/render_process_impl.cc \
@@ -226,7 +226,6 @@
 	content/renderer/media/media_stream_video_track.cc \
 	content/renderer/media/native_handle_impl.cc \
 	content/renderer/media/peer_connection_audio_sink_owner.cc \
-	content/renderer/media/peer_connection_handler_base.cc \
 	content/renderer/media/peer_connection_identity_service.cc \
 	content/renderer/media/peer_connection_tracker.cc \
 	content/renderer/media/remote_media_stream_impl.cc \
@@ -241,10 +240,12 @@
 	content/renderer/media/rtc_video_renderer.cc \
 	content/renderer/media/video_source_handler.cc \
 	content/renderer/media/webaudio_capturer_source.cc \
+	content/renderer/media/webrtc/webrtc_video_track_adapter.cc \
 	content/renderer/media/webrtc/media_stream_remote_video_source.cc \
 	content/renderer/media/webrtc/media_stream_track_metrics.cc \
 	content/renderer/media/webrtc/webrtc_audio_sink_adapter.cc \
 	content/renderer/media/webrtc/webrtc_local_audio_track_adapter.cc \
+	content/renderer/media/webrtc/webrtc_media_stream_adapter.cc \
 	content/renderer/media/webrtc/webrtc_video_capturer_adapter.cc \
 	content/renderer/media/webrtc_audio_capturer.cc \
 	content/renderer/media/webrtc_audio_device_impl.cc \
@@ -332,12 +333,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
 	'-DCHROME_PNG_READ_PACK_SUPPORT' \
@@ -507,12 +511,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
 	'-DCHROME_PNG_READ_PACK_SUPPORT' \
@@ -632,7 +639,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_resources.grd b/content/content_resources.grd
index 408aa66..2792bbd 100644
--- a/content/content_resources.grd
+++ b/content/content_resources.grd
@@ -15,7 +15,9 @@
       <include name="IDR_ACCESSIBILITY_CSS" file="browser/resources/accessibility/accessibility.css" type="BINDATA" />
       <include name="IDR_ACCESSIBILITY_JS" file="browser/resources/accessibility/accessibility.js" flattenhtml="true" type="BINDATA" />
       <include name="IDR_DEVTOOLS_PINCH_CURSOR_ICON" file="browser/resources/devtools/devtools_pinch_cursor.png" type="BINDATA" />
+      <include name="IDR_DEVTOOLS_PINCH_CURSOR_ICON_2X" file="browser/resources/devtools/devtools_pinch_cursor_2x.png" type="BINDATA" />
       <include name="IDR_DEVTOOLS_TOUCH_CURSOR_ICON" file="browser/resources/devtools/devtools_touch_cursor.png" type="BINDATA" />
+      <include name="IDR_DEVTOOLS_TOUCH_CURSOR_ICON_2X" file="browser/resources/devtools/devtools_touch_cursor_2x.png" type="BINDATA" />
       <include name="IDR_GPU_INTERNALS_HTML" file="browser/resources/gpu/gpu_internals.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" />
       <include name="IDR_GPU_INTERNALS_JS" file="browser/resources/gpu/gpu_internals.js" flattenhtml="true" type="BINDATA" />
       <include name="IDR_INDEXED_DB_INTERNALS_HTML" file="browser/resources/indexed_db/indexeddb_internals.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" />
diff --git a/content/content_resources.target.darwin-arm.mk b/content/content_resources.target.darwin-arm.mk
index a2cd13d..6a55087 100644
--- a/content/content_resources.target.darwin-arm.mk
+++ b/content/content_resources.target.darwin-arm.mk
@@ -19,7 +19,7 @@
 $(gyp_shared_intermediate_dir)/content/grit/content_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/grit/content_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/grit/content_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/grit/content_resources.h: $(LOCAL_PATH)/mojo/public/js/bindings/codec.js $(LOCAL_PATH)/content/content_resources.grd $(LOCAL_PATH)/mojo/public/js/bindings/connection.js $(LOCAL_PATH)/mojo/public/js/bindings/connector.js $(LOCAL_PATH)/mojo/public/js/bindings/router.js $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.css $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.html $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.js $(LOCAL_PATH)/content/browser/resources/devtools/devtools_pinch_cursor.png $(LOCAL_PATH)/content/browser/resources/devtools/devtools_touch_cursor.png $(LOCAL_PATH)/content/browser/resources/gpu/browser_bridge.js $(LOCAL_PATH)/content/browser/resources/gpu/gpu_internals.html $(LOCAL_PATH)/content/browser/resources/gpu/gpu_internals.js $(LOCAL_PATH)/content/browser/resources/gpu/info_view.css $(LOCAL_PATH)/content/browser/resources/gpu/info_view.html $(LOCAL_PATH)/content/browser/resources/gpu/info_view.js $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.css $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.html $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.js $(LOCAL_PATH)/content/browser/resources/media/cache_entry.js $(LOCAL_PATH)/content/browser/resources/media/client_renderer.js $(LOCAL_PATH)/content/browser/resources/media/data_series.js $(LOCAL_PATH)/content/browser/resources/media/disjoint_range_set.js $(LOCAL_PATH)/content/browser/resources/media/dump_creator.js $(LOCAL_PATH)/content/browser/resources/media/main.js $(LOCAL_PATH)/content/browser/resources/media/manager.js $(LOCAL_PATH)/content/browser/resources/media/media_internals.css $(LOCAL_PATH)/content/browser/resources/media/media_internals.html $(LOCAL_PATH)/content/browser/resources/media/media_internals.js $(LOCAL_PATH)/content/browser/resources/media/peer_connection_update_table.js $(LOCAL_PATH)/content/browser/resources/media/player_info.js $(LOCAL_PATH)/content/browser/resources/media/ssrc_info_manager.js $(LOCAL_PATH)/content/browser/resources/media/stats_graph_helper.js $(LOCAL_PATH)/content/browser/resources/media/stats_table.js $(LOCAL_PATH)/content/browser/resources/media/tab_view.js $(LOCAL_PATH)/content/browser/resources/media/timeline_graph_view.js $(LOCAL_PATH)/content/browser/resources/media/util.js $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.css $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.html $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.js $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.css $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.html $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.js $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/grit/content_resources.h: $(LOCAL_PATH)/mojo/public/js/bindings/codec.js $(LOCAL_PATH)/content/content_resources.grd $(LOCAL_PATH)/mojo/public/js/bindings/connection.js $(LOCAL_PATH)/mojo/public/js/bindings/connector.js $(LOCAL_PATH)/mojo/public/js/bindings/router.js $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.css $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.html $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.js $(LOCAL_PATH)/content/browser/resources/devtools/devtools_pinch_cursor.png $(LOCAL_PATH)/content/browser/resources/devtools/devtools_pinch_cursor_2x.png $(LOCAL_PATH)/content/browser/resources/devtools/devtools_touch_cursor.png $(LOCAL_PATH)/content/browser/resources/devtools/devtools_touch_cursor_2x.png $(LOCAL_PATH)/content/browser/resources/gpu/browser_bridge.js $(LOCAL_PATH)/content/browser/resources/gpu/gpu_internals.html $(LOCAL_PATH)/content/browser/resources/gpu/gpu_internals.js $(LOCAL_PATH)/content/browser/resources/gpu/info_view.css $(LOCAL_PATH)/content/browser/resources/gpu/info_view.html $(LOCAL_PATH)/content/browser/resources/gpu/info_view.js $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.css $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.html $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.js $(LOCAL_PATH)/content/browser/resources/media/cache_entry.js $(LOCAL_PATH)/content/browser/resources/media/client_renderer.js $(LOCAL_PATH)/content/browser/resources/media/data_series.js $(LOCAL_PATH)/content/browser/resources/media/disjoint_range_set.js $(LOCAL_PATH)/content/browser/resources/media/dump_creator.js $(LOCAL_PATH)/content/browser/resources/media/main.js $(LOCAL_PATH)/content/browser/resources/media/manager.js $(LOCAL_PATH)/content/browser/resources/media/media_internals.css $(LOCAL_PATH)/content/browser/resources/media/media_internals.html $(LOCAL_PATH)/content/browser/resources/media/media_internals.js $(LOCAL_PATH)/content/browser/resources/media/peer_connection_update_table.js $(LOCAL_PATH)/content/browser/resources/media/player_info.js $(LOCAL_PATH)/content/browser/resources/media/ssrc_info_manager.js $(LOCAL_PATH)/content/browser/resources/media/stats_graph_helper.js $(LOCAL_PATH)/content/browser/resources/media/stats_table.js $(LOCAL_PATH)/content/browser/resources/media/tab_view.js $(LOCAL_PATH)/content/browser/resources/media/timeline_graph_view.js $(LOCAL_PATH)/content/browser/resources/media/util.js $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.css $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.html $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.js $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.css $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.html $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.js $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from content_resources.grd ($@)"
 	$(hide)cd $(gyp_local_path)/content; mkdir -p $(gyp_shared_intermediate_dir)/content/grit $(gyp_shared_intermediate_dir)/content; python ../tools/grit/grit.py -i content_resources.grd build -f ../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/content" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc
 
diff --git a/content/content_resources.target.darwin-mips.mk b/content/content_resources.target.darwin-mips.mk
index a2cd13d..6a55087 100644
--- a/content/content_resources.target.darwin-mips.mk
+++ b/content/content_resources.target.darwin-mips.mk
@@ -19,7 +19,7 @@
 $(gyp_shared_intermediate_dir)/content/grit/content_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/grit/content_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/grit/content_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/grit/content_resources.h: $(LOCAL_PATH)/mojo/public/js/bindings/codec.js $(LOCAL_PATH)/content/content_resources.grd $(LOCAL_PATH)/mojo/public/js/bindings/connection.js $(LOCAL_PATH)/mojo/public/js/bindings/connector.js $(LOCAL_PATH)/mojo/public/js/bindings/router.js $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.css $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.html $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.js $(LOCAL_PATH)/content/browser/resources/devtools/devtools_pinch_cursor.png $(LOCAL_PATH)/content/browser/resources/devtools/devtools_touch_cursor.png $(LOCAL_PATH)/content/browser/resources/gpu/browser_bridge.js $(LOCAL_PATH)/content/browser/resources/gpu/gpu_internals.html $(LOCAL_PATH)/content/browser/resources/gpu/gpu_internals.js $(LOCAL_PATH)/content/browser/resources/gpu/info_view.css $(LOCAL_PATH)/content/browser/resources/gpu/info_view.html $(LOCAL_PATH)/content/browser/resources/gpu/info_view.js $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.css $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.html $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.js $(LOCAL_PATH)/content/browser/resources/media/cache_entry.js $(LOCAL_PATH)/content/browser/resources/media/client_renderer.js $(LOCAL_PATH)/content/browser/resources/media/data_series.js $(LOCAL_PATH)/content/browser/resources/media/disjoint_range_set.js $(LOCAL_PATH)/content/browser/resources/media/dump_creator.js $(LOCAL_PATH)/content/browser/resources/media/main.js $(LOCAL_PATH)/content/browser/resources/media/manager.js $(LOCAL_PATH)/content/browser/resources/media/media_internals.css $(LOCAL_PATH)/content/browser/resources/media/media_internals.html $(LOCAL_PATH)/content/browser/resources/media/media_internals.js $(LOCAL_PATH)/content/browser/resources/media/peer_connection_update_table.js $(LOCAL_PATH)/content/browser/resources/media/player_info.js $(LOCAL_PATH)/content/browser/resources/media/ssrc_info_manager.js $(LOCAL_PATH)/content/browser/resources/media/stats_graph_helper.js $(LOCAL_PATH)/content/browser/resources/media/stats_table.js $(LOCAL_PATH)/content/browser/resources/media/tab_view.js $(LOCAL_PATH)/content/browser/resources/media/timeline_graph_view.js $(LOCAL_PATH)/content/browser/resources/media/util.js $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.css $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.html $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.js $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.css $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.html $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.js $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/grit/content_resources.h: $(LOCAL_PATH)/mojo/public/js/bindings/codec.js $(LOCAL_PATH)/content/content_resources.grd $(LOCAL_PATH)/mojo/public/js/bindings/connection.js $(LOCAL_PATH)/mojo/public/js/bindings/connector.js $(LOCAL_PATH)/mojo/public/js/bindings/router.js $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.css $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.html $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.js $(LOCAL_PATH)/content/browser/resources/devtools/devtools_pinch_cursor.png $(LOCAL_PATH)/content/browser/resources/devtools/devtools_pinch_cursor_2x.png $(LOCAL_PATH)/content/browser/resources/devtools/devtools_touch_cursor.png $(LOCAL_PATH)/content/browser/resources/devtools/devtools_touch_cursor_2x.png $(LOCAL_PATH)/content/browser/resources/gpu/browser_bridge.js $(LOCAL_PATH)/content/browser/resources/gpu/gpu_internals.html $(LOCAL_PATH)/content/browser/resources/gpu/gpu_internals.js $(LOCAL_PATH)/content/browser/resources/gpu/info_view.css $(LOCAL_PATH)/content/browser/resources/gpu/info_view.html $(LOCAL_PATH)/content/browser/resources/gpu/info_view.js $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.css $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.html $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.js $(LOCAL_PATH)/content/browser/resources/media/cache_entry.js $(LOCAL_PATH)/content/browser/resources/media/client_renderer.js $(LOCAL_PATH)/content/browser/resources/media/data_series.js $(LOCAL_PATH)/content/browser/resources/media/disjoint_range_set.js $(LOCAL_PATH)/content/browser/resources/media/dump_creator.js $(LOCAL_PATH)/content/browser/resources/media/main.js $(LOCAL_PATH)/content/browser/resources/media/manager.js $(LOCAL_PATH)/content/browser/resources/media/media_internals.css $(LOCAL_PATH)/content/browser/resources/media/media_internals.html $(LOCAL_PATH)/content/browser/resources/media/media_internals.js $(LOCAL_PATH)/content/browser/resources/media/peer_connection_update_table.js $(LOCAL_PATH)/content/browser/resources/media/player_info.js $(LOCAL_PATH)/content/browser/resources/media/ssrc_info_manager.js $(LOCAL_PATH)/content/browser/resources/media/stats_graph_helper.js $(LOCAL_PATH)/content/browser/resources/media/stats_table.js $(LOCAL_PATH)/content/browser/resources/media/tab_view.js $(LOCAL_PATH)/content/browser/resources/media/timeline_graph_view.js $(LOCAL_PATH)/content/browser/resources/media/util.js $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.css $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.html $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.js $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.css $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.html $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.js $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from content_resources.grd ($@)"
 	$(hide)cd $(gyp_local_path)/content; mkdir -p $(gyp_shared_intermediate_dir)/content/grit $(gyp_shared_intermediate_dir)/content; python ../tools/grit/grit.py -i content_resources.grd build -f ../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/content" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc
 
diff --git a/content/content_resources.target.darwin-x86.mk b/content/content_resources.target.darwin-x86.mk
index a2cd13d..6a55087 100644
--- a/content/content_resources.target.darwin-x86.mk
+++ b/content/content_resources.target.darwin-x86.mk
@@ -19,7 +19,7 @@
 $(gyp_shared_intermediate_dir)/content/grit/content_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/grit/content_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/grit/content_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/grit/content_resources.h: $(LOCAL_PATH)/mojo/public/js/bindings/codec.js $(LOCAL_PATH)/content/content_resources.grd $(LOCAL_PATH)/mojo/public/js/bindings/connection.js $(LOCAL_PATH)/mojo/public/js/bindings/connector.js $(LOCAL_PATH)/mojo/public/js/bindings/router.js $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.css $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.html $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.js $(LOCAL_PATH)/content/browser/resources/devtools/devtools_pinch_cursor.png $(LOCAL_PATH)/content/browser/resources/devtools/devtools_touch_cursor.png $(LOCAL_PATH)/content/browser/resources/gpu/browser_bridge.js $(LOCAL_PATH)/content/browser/resources/gpu/gpu_internals.html $(LOCAL_PATH)/content/browser/resources/gpu/gpu_internals.js $(LOCAL_PATH)/content/browser/resources/gpu/info_view.css $(LOCAL_PATH)/content/browser/resources/gpu/info_view.html $(LOCAL_PATH)/content/browser/resources/gpu/info_view.js $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.css $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.html $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.js $(LOCAL_PATH)/content/browser/resources/media/cache_entry.js $(LOCAL_PATH)/content/browser/resources/media/client_renderer.js $(LOCAL_PATH)/content/browser/resources/media/data_series.js $(LOCAL_PATH)/content/browser/resources/media/disjoint_range_set.js $(LOCAL_PATH)/content/browser/resources/media/dump_creator.js $(LOCAL_PATH)/content/browser/resources/media/main.js $(LOCAL_PATH)/content/browser/resources/media/manager.js $(LOCAL_PATH)/content/browser/resources/media/media_internals.css $(LOCAL_PATH)/content/browser/resources/media/media_internals.html $(LOCAL_PATH)/content/browser/resources/media/media_internals.js $(LOCAL_PATH)/content/browser/resources/media/peer_connection_update_table.js $(LOCAL_PATH)/content/browser/resources/media/player_info.js $(LOCAL_PATH)/content/browser/resources/media/ssrc_info_manager.js $(LOCAL_PATH)/content/browser/resources/media/stats_graph_helper.js $(LOCAL_PATH)/content/browser/resources/media/stats_table.js $(LOCAL_PATH)/content/browser/resources/media/tab_view.js $(LOCAL_PATH)/content/browser/resources/media/timeline_graph_view.js $(LOCAL_PATH)/content/browser/resources/media/util.js $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.css $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.html $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.js $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.css $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.html $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.js $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/grit/content_resources.h: $(LOCAL_PATH)/mojo/public/js/bindings/codec.js $(LOCAL_PATH)/content/content_resources.grd $(LOCAL_PATH)/mojo/public/js/bindings/connection.js $(LOCAL_PATH)/mojo/public/js/bindings/connector.js $(LOCAL_PATH)/mojo/public/js/bindings/router.js $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.css $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.html $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.js $(LOCAL_PATH)/content/browser/resources/devtools/devtools_pinch_cursor.png $(LOCAL_PATH)/content/browser/resources/devtools/devtools_pinch_cursor_2x.png $(LOCAL_PATH)/content/browser/resources/devtools/devtools_touch_cursor.png $(LOCAL_PATH)/content/browser/resources/devtools/devtools_touch_cursor_2x.png $(LOCAL_PATH)/content/browser/resources/gpu/browser_bridge.js $(LOCAL_PATH)/content/browser/resources/gpu/gpu_internals.html $(LOCAL_PATH)/content/browser/resources/gpu/gpu_internals.js $(LOCAL_PATH)/content/browser/resources/gpu/info_view.css $(LOCAL_PATH)/content/browser/resources/gpu/info_view.html $(LOCAL_PATH)/content/browser/resources/gpu/info_view.js $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.css $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.html $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.js $(LOCAL_PATH)/content/browser/resources/media/cache_entry.js $(LOCAL_PATH)/content/browser/resources/media/client_renderer.js $(LOCAL_PATH)/content/browser/resources/media/data_series.js $(LOCAL_PATH)/content/browser/resources/media/disjoint_range_set.js $(LOCAL_PATH)/content/browser/resources/media/dump_creator.js $(LOCAL_PATH)/content/browser/resources/media/main.js $(LOCAL_PATH)/content/browser/resources/media/manager.js $(LOCAL_PATH)/content/browser/resources/media/media_internals.css $(LOCAL_PATH)/content/browser/resources/media/media_internals.html $(LOCAL_PATH)/content/browser/resources/media/media_internals.js $(LOCAL_PATH)/content/browser/resources/media/peer_connection_update_table.js $(LOCAL_PATH)/content/browser/resources/media/player_info.js $(LOCAL_PATH)/content/browser/resources/media/ssrc_info_manager.js $(LOCAL_PATH)/content/browser/resources/media/stats_graph_helper.js $(LOCAL_PATH)/content/browser/resources/media/stats_table.js $(LOCAL_PATH)/content/browser/resources/media/tab_view.js $(LOCAL_PATH)/content/browser/resources/media/timeline_graph_view.js $(LOCAL_PATH)/content/browser/resources/media/util.js $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.css $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.html $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.js $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.css $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.html $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.js $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from content_resources.grd ($@)"
 	$(hide)cd $(gyp_local_path)/content; mkdir -p $(gyp_shared_intermediate_dir)/content/grit $(gyp_shared_intermediate_dir)/content; python ../tools/grit/grit.py -i content_resources.grd build -f ../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/content" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc
 
diff --git a/content/content_resources.target.darwin-x86_64.mk b/content/content_resources.target.darwin-x86_64.mk
index a2cd13d..6a55087 100644
--- a/content/content_resources.target.darwin-x86_64.mk
+++ b/content/content_resources.target.darwin-x86_64.mk
@@ -19,7 +19,7 @@
 $(gyp_shared_intermediate_dir)/content/grit/content_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/grit/content_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/grit/content_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/grit/content_resources.h: $(LOCAL_PATH)/mojo/public/js/bindings/codec.js $(LOCAL_PATH)/content/content_resources.grd $(LOCAL_PATH)/mojo/public/js/bindings/connection.js $(LOCAL_PATH)/mojo/public/js/bindings/connector.js $(LOCAL_PATH)/mojo/public/js/bindings/router.js $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.css $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.html $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.js $(LOCAL_PATH)/content/browser/resources/devtools/devtools_pinch_cursor.png $(LOCAL_PATH)/content/browser/resources/devtools/devtools_touch_cursor.png $(LOCAL_PATH)/content/browser/resources/gpu/browser_bridge.js $(LOCAL_PATH)/content/browser/resources/gpu/gpu_internals.html $(LOCAL_PATH)/content/browser/resources/gpu/gpu_internals.js $(LOCAL_PATH)/content/browser/resources/gpu/info_view.css $(LOCAL_PATH)/content/browser/resources/gpu/info_view.html $(LOCAL_PATH)/content/browser/resources/gpu/info_view.js $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.css $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.html $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.js $(LOCAL_PATH)/content/browser/resources/media/cache_entry.js $(LOCAL_PATH)/content/browser/resources/media/client_renderer.js $(LOCAL_PATH)/content/browser/resources/media/data_series.js $(LOCAL_PATH)/content/browser/resources/media/disjoint_range_set.js $(LOCAL_PATH)/content/browser/resources/media/dump_creator.js $(LOCAL_PATH)/content/browser/resources/media/main.js $(LOCAL_PATH)/content/browser/resources/media/manager.js $(LOCAL_PATH)/content/browser/resources/media/media_internals.css $(LOCAL_PATH)/content/browser/resources/media/media_internals.html $(LOCAL_PATH)/content/browser/resources/media/media_internals.js $(LOCAL_PATH)/content/browser/resources/media/peer_connection_update_table.js $(LOCAL_PATH)/content/browser/resources/media/player_info.js $(LOCAL_PATH)/content/browser/resources/media/ssrc_info_manager.js $(LOCAL_PATH)/content/browser/resources/media/stats_graph_helper.js $(LOCAL_PATH)/content/browser/resources/media/stats_table.js $(LOCAL_PATH)/content/browser/resources/media/tab_view.js $(LOCAL_PATH)/content/browser/resources/media/timeline_graph_view.js $(LOCAL_PATH)/content/browser/resources/media/util.js $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.css $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.html $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.js $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.css $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.html $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.js $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/grit/content_resources.h: $(LOCAL_PATH)/mojo/public/js/bindings/codec.js $(LOCAL_PATH)/content/content_resources.grd $(LOCAL_PATH)/mojo/public/js/bindings/connection.js $(LOCAL_PATH)/mojo/public/js/bindings/connector.js $(LOCAL_PATH)/mojo/public/js/bindings/router.js $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.css $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.html $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.js $(LOCAL_PATH)/content/browser/resources/devtools/devtools_pinch_cursor.png $(LOCAL_PATH)/content/browser/resources/devtools/devtools_pinch_cursor_2x.png $(LOCAL_PATH)/content/browser/resources/devtools/devtools_touch_cursor.png $(LOCAL_PATH)/content/browser/resources/devtools/devtools_touch_cursor_2x.png $(LOCAL_PATH)/content/browser/resources/gpu/browser_bridge.js $(LOCAL_PATH)/content/browser/resources/gpu/gpu_internals.html $(LOCAL_PATH)/content/browser/resources/gpu/gpu_internals.js $(LOCAL_PATH)/content/browser/resources/gpu/info_view.css $(LOCAL_PATH)/content/browser/resources/gpu/info_view.html $(LOCAL_PATH)/content/browser/resources/gpu/info_view.js $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.css $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.html $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.js $(LOCAL_PATH)/content/browser/resources/media/cache_entry.js $(LOCAL_PATH)/content/browser/resources/media/client_renderer.js $(LOCAL_PATH)/content/browser/resources/media/data_series.js $(LOCAL_PATH)/content/browser/resources/media/disjoint_range_set.js $(LOCAL_PATH)/content/browser/resources/media/dump_creator.js $(LOCAL_PATH)/content/browser/resources/media/main.js $(LOCAL_PATH)/content/browser/resources/media/manager.js $(LOCAL_PATH)/content/browser/resources/media/media_internals.css $(LOCAL_PATH)/content/browser/resources/media/media_internals.html $(LOCAL_PATH)/content/browser/resources/media/media_internals.js $(LOCAL_PATH)/content/browser/resources/media/peer_connection_update_table.js $(LOCAL_PATH)/content/browser/resources/media/player_info.js $(LOCAL_PATH)/content/browser/resources/media/ssrc_info_manager.js $(LOCAL_PATH)/content/browser/resources/media/stats_graph_helper.js $(LOCAL_PATH)/content/browser/resources/media/stats_table.js $(LOCAL_PATH)/content/browser/resources/media/tab_view.js $(LOCAL_PATH)/content/browser/resources/media/timeline_graph_view.js $(LOCAL_PATH)/content/browser/resources/media/util.js $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.css $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.html $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.js $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.css $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.html $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.js $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from content_resources.grd ($@)"
 	$(hide)cd $(gyp_local_path)/content; mkdir -p $(gyp_shared_intermediate_dir)/content/grit $(gyp_shared_intermediate_dir)/content; python ../tools/grit/grit.py -i content_resources.grd build -f ../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/content" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc
 
diff --git a/content/content_resources.target.linux-arm.mk b/content/content_resources.target.linux-arm.mk
index a2cd13d..6a55087 100644
--- a/content/content_resources.target.linux-arm.mk
+++ b/content/content_resources.target.linux-arm.mk
@@ -19,7 +19,7 @@
 $(gyp_shared_intermediate_dir)/content/grit/content_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/grit/content_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/grit/content_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/grit/content_resources.h: $(LOCAL_PATH)/mojo/public/js/bindings/codec.js $(LOCAL_PATH)/content/content_resources.grd $(LOCAL_PATH)/mojo/public/js/bindings/connection.js $(LOCAL_PATH)/mojo/public/js/bindings/connector.js $(LOCAL_PATH)/mojo/public/js/bindings/router.js $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.css $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.html $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.js $(LOCAL_PATH)/content/browser/resources/devtools/devtools_pinch_cursor.png $(LOCAL_PATH)/content/browser/resources/devtools/devtools_touch_cursor.png $(LOCAL_PATH)/content/browser/resources/gpu/browser_bridge.js $(LOCAL_PATH)/content/browser/resources/gpu/gpu_internals.html $(LOCAL_PATH)/content/browser/resources/gpu/gpu_internals.js $(LOCAL_PATH)/content/browser/resources/gpu/info_view.css $(LOCAL_PATH)/content/browser/resources/gpu/info_view.html $(LOCAL_PATH)/content/browser/resources/gpu/info_view.js $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.css $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.html $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.js $(LOCAL_PATH)/content/browser/resources/media/cache_entry.js $(LOCAL_PATH)/content/browser/resources/media/client_renderer.js $(LOCAL_PATH)/content/browser/resources/media/data_series.js $(LOCAL_PATH)/content/browser/resources/media/disjoint_range_set.js $(LOCAL_PATH)/content/browser/resources/media/dump_creator.js $(LOCAL_PATH)/content/browser/resources/media/main.js $(LOCAL_PATH)/content/browser/resources/media/manager.js $(LOCAL_PATH)/content/browser/resources/media/media_internals.css $(LOCAL_PATH)/content/browser/resources/media/media_internals.html $(LOCAL_PATH)/content/browser/resources/media/media_internals.js $(LOCAL_PATH)/content/browser/resources/media/peer_connection_update_table.js $(LOCAL_PATH)/content/browser/resources/media/player_info.js $(LOCAL_PATH)/content/browser/resources/media/ssrc_info_manager.js $(LOCAL_PATH)/content/browser/resources/media/stats_graph_helper.js $(LOCAL_PATH)/content/browser/resources/media/stats_table.js $(LOCAL_PATH)/content/browser/resources/media/tab_view.js $(LOCAL_PATH)/content/browser/resources/media/timeline_graph_view.js $(LOCAL_PATH)/content/browser/resources/media/util.js $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.css $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.html $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.js $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.css $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.html $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.js $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/grit/content_resources.h: $(LOCAL_PATH)/mojo/public/js/bindings/codec.js $(LOCAL_PATH)/content/content_resources.grd $(LOCAL_PATH)/mojo/public/js/bindings/connection.js $(LOCAL_PATH)/mojo/public/js/bindings/connector.js $(LOCAL_PATH)/mojo/public/js/bindings/router.js $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.css $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.html $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.js $(LOCAL_PATH)/content/browser/resources/devtools/devtools_pinch_cursor.png $(LOCAL_PATH)/content/browser/resources/devtools/devtools_pinch_cursor_2x.png $(LOCAL_PATH)/content/browser/resources/devtools/devtools_touch_cursor.png $(LOCAL_PATH)/content/browser/resources/devtools/devtools_touch_cursor_2x.png $(LOCAL_PATH)/content/browser/resources/gpu/browser_bridge.js $(LOCAL_PATH)/content/browser/resources/gpu/gpu_internals.html $(LOCAL_PATH)/content/browser/resources/gpu/gpu_internals.js $(LOCAL_PATH)/content/browser/resources/gpu/info_view.css $(LOCAL_PATH)/content/browser/resources/gpu/info_view.html $(LOCAL_PATH)/content/browser/resources/gpu/info_view.js $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.css $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.html $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.js $(LOCAL_PATH)/content/browser/resources/media/cache_entry.js $(LOCAL_PATH)/content/browser/resources/media/client_renderer.js $(LOCAL_PATH)/content/browser/resources/media/data_series.js $(LOCAL_PATH)/content/browser/resources/media/disjoint_range_set.js $(LOCAL_PATH)/content/browser/resources/media/dump_creator.js $(LOCAL_PATH)/content/browser/resources/media/main.js $(LOCAL_PATH)/content/browser/resources/media/manager.js $(LOCAL_PATH)/content/browser/resources/media/media_internals.css $(LOCAL_PATH)/content/browser/resources/media/media_internals.html $(LOCAL_PATH)/content/browser/resources/media/media_internals.js $(LOCAL_PATH)/content/browser/resources/media/peer_connection_update_table.js $(LOCAL_PATH)/content/browser/resources/media/player_info.js $(LOCAL_PATH)/content/browser/resources/media/ssrc_info_manager.js $(LOCAL_PATH)/content/browser/resources/media/stats_graph_helper.js $(LOCAL_PATH)/content/browser/resources/media/stats_table.js $(LOCAL_PATH)/content/browser/resources/media/tab_view.js $(LOCAL_PATH)/content/browser/resources/media/timeline_graph_view.js $(LOCAL_PATH)/content/browser/resources/media/util.js $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.css $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.html $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.js $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.css $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.html $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.js $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from content_resources.grd ($@)"
 	$(hide)cd $(gyp_local_path)/content; mkdir -p $(gyp_shared_intermediate_dir)/content/grit $(gyp_shared_intermediate_dir)/content; python ../tools/grit/grit.py -i content_resources.grd build -f ../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/content" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc
 
diff --git a/content/content_resources.target.linux-mips.mk b/content/content_resources.target.linux-mips.mk
index a2cd13d..6a55087 100644
--- a/content/content_resources.target.linux-mips.mk
+++ b/content/content_resources.target.linux-mips.mk
@@ -19,7 +19,7 @@
 $(gyp_shared_intermediate_dir)/content/grit/content_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/grit/content_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/grit/content_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/grit/content_resources.h: $(LOCAL_PATH)/mojo/public/js/bindings/codec.js $(LOCAL_PATH)/content/content_resources.grd $(LOCAL_PATH)/mojo/public/js/bindings/connection.js $(LOCAL_PATH)/mojo/public/js/bindings/connector.js $(LOCAL_PATH)/mojo/public/js/bindings/router.js $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.css $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.html $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.js $(LOCAL_PATH)/content/browser/resources/devtools/devtools_pinch_cursor.png $(LOCAL_PATH)/content/browser/resources/devtools/devtools_touch_cursor.png $(LOCAL_PATH)/content/browser/resources/gpu/browser_bridge.js $(LOCAL_PATH)/content/browser/resources/gpu/gpu_internals.html $(LOCAL_PATH)/content/browser/resources/gpu/gpu_internals.js $(LOCAL_PATH)/content/browser/resources/gpu/info_view.css $(LOCAL_PATH)/content/browser/resources/gpu/info_view.html $(LOCAL_PATH)/content/browser/resources/gpu/info_view.js $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.css $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.html $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.js $(LOCAL_PATH)/content/browser/resources/media/cache_entry.js $(LOCAL_PATH)/content/browser/resources/media/client_renderer.js $(LOCAL_PATH)/content/browser/resources/media/data_series.js $(LOCAL_PATH)/content/browser/resources/media/disjoint_range_set.js $(LOCAL_PATH)/content/browser/resources/media/dump_creator.js $(LOCAL_PATH)/content/browser/resources/media/main.js $(LOCAL_PATH)/content/browser/resources/media/manager.js $(LOCAL_PATH)/content/browser/resources/media/media_internals.css $(LOCAL_PATH)/content/browser/resources/media/media_internals.html $(LOCAL_PATH)/content/browser/resources/media/media_internals.js $(LOCAL_PATH)/content/browser/resources/media/peer_connection_update_table.js $(LOCAL_PATH)/content/browser/resources/media/player_info.js $(LOCAL_PATH)/content/browser/resources/media/ssrc_info_manager.js $(LOCAL_PATH)/content/browser/resources/media/stats_graph_helper.js $(LOCAL_PATH)/content/browser/resources/media/stats_table.js $(LOCAL_PATH)/content/browser/resources/media/tab_view.js $(LOCAL_PATH)/content/browser/resources/media/timeline_graph_view.js $(LOCAL_PATH)/content/browser/resources/media/util.js $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.css $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.html $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.js $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.css $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.html $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.js $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/grit/content_resources.h: $(LOCAL_PATH)/mojo/public/js/bindings/codec.js $(LOCAL_PATH)/content/content_resources.grd $(LOCAL_PATH)/mojo/public/js/bindings/connection.js $(LOCAL_PATH)/mojo/public/js/bindings/connector.js $(LOCAL_PATH)/mojo/public/js/bindings/router.js $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.css $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.html $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.js $(LOCAL_PATH)/content/browser/resources/devtools/devtools_pinch_cursor.png $(LOCAL_PATH)/content/browser/resources/devtools/devtools_pinch_cursor_2x.png $(LOCAL_PATH)/content/browser/resources/devtools/devtools_touch_cursor.png $(LOCAL_PATH)/content/browser/resources/devtools/devtools_touch_cursor_2x.png $(LOCAL_PATH)/content/browser/resources/gpu/browser_bridge.js $(LOCAL_PATH)/content/browser/resources/gpu/gpu_internals.html $(LOCAL_PATH)/content/browser/resources/gpu/gpu_internals.js $(LOCAL_PATH)/content/browser/resources/gpu/info_view.css $(LOCAL_PATH)/content/browser/resources/gpu/info_view.html $(LOCAL_PATH)/content/browser/resources/gpu/info_view.js $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.css $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.html $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.js $(LOCAL_PATH)/content/browser/resources/media/cache_entry.js $(LOCAL_PATH)/content/browser/resources/media/client_renderer.js $(LOCAL_PATH)/content/browser/resources/media/data_series.js $(LOCAL_PATH)/content/browser/resources/media/disjoint_range_set.js $(LOCAL_PATH)/content/browser/resources/media/dump_creator.js $(LOCAL_PATH)/content/browser/resources/media/main.js $(LOCAL_PATH)/content/browser/resources/media/manager.js $(LOCAL_PATH)/content/browser/resources/media/media_internals.css $(LOCAL_PATH)/content/browser/resources/media/media_internals.html $(LOCAL_PATH)/content/browser/resources/media/media_internals.js $(LOCAL_PATH)/content/browser/resources/media/peer_connection_update_table.js $(LOCAL_PATH)/content/browser/resources/media/player_info.js $(LOCAL_PATH)/content/browser/resources/media/ssrc_info_manager.js $(LOCAL_PATH)/content/browser/resources/media/stats_graph_helper.js $(LOCAL_PATH)/content/browser/resources/media/stats_table.js $(LOCAL_PATH)/content/browser/resources/media/tab_view.js $(LOCAL_PATH)/content/browser/resources/media/timeline_graph_view.js $(LOCAL_PATH)/content/browser/resources/media/util.js $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.css $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.html $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.js $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.css $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.html $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.js $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from content_resources.grd ($@)"
 	$(hide)cd $(gyp_local_path)/content; mkdir -p $(gyp_shared_intermediate_dir)/content/grit $(gyp_shared_intermediate_dir)/content; python ../tools/grit/grit.py -i content_resources.grd build -f ../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/content" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc
 
diff --git a/content/content_resources.target.linux-x86.mk b/content/content_resources.target.linux-x86.mk
index a2cd13d..6a55087 100644
--- a/content/content_resources.target.linux-x86.mk
+++ b/content/content_resources.target.linux-x86.mk
@@ -19,7 +19,7 @@
 $(gyp_shared_intermediate_dir)/content/grit/content_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/grit/content_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/grit/content_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/grit/content_resources.h: $(LOCAL_PATH)/mojo/public/js/bindings/codec.js $(LOCAL_PATH)/content/content_resources.grd $(LOCAL_PATH)/mojo/public/js/bindings/connection.js $(LOCAL_PATH)/mojo/public/js/bindings/connector.js $(LOCAL_PATH)/mojo/public/js/bindings/router.js $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.css $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.html $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.js $(LOCAL_PATH)/content/browser/resources/devtools/devtools_pinch_cursor.png $(LOCAL_PATH)/content/browser/resources/devtools/devtools_touch_cursor.png $(LOCAL_PATH)/content/browser/resources/gpu/browser_bridge.js $(LOCAL_PATH)/content/browser/resources/gpu/gpu_internals.html $(LOCAL_PATH)/content/browser/resources/gpu/gpu_internals.js $(LOCAL_PATH)/content/browser/resources/gpu/info_view.css $(LOCAL_PATH)/content/browser/resources/gpu/info_view.html $(LOCAL_PATH)/content/browser/resources/gpu/info_view.js $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.css $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.html $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.js $(LOCAL_PATH)/content/browser/resources/media/cache_entry.js $(LOCAL_PATH)/content/browser/resources/media/client_renderer.js $(LOCAL_PATH)/content/browser/resources/media/data_series.js $(LOCAL_PATH)/content/browser/resources/media/disjoint_range_set.js $(LOCAL_PATH)/content/browser/resources/media/dump_creator.js $(LOCAL_PATH)/content/browser/resources/media/main.js $(LOCAL_PATH)/content/browser/resources/media/manager.js $(LOCAL_PATH)/content/browser/resources/media/media_internals.css $(LOCAL_PATH)/content/browser/resources/media/media_internals.html $(LOCAL_PATH)/content/browser/resources/media/media_internals.js $(LOCAL_PATH)/content/browser/resources/media/peer_connection_update_table.js $(LOCAL_PATH)/content/browser/resources/media/player_info.js $(LOCAL_PATH)/content/browser/resources/media/ssrc_info_manager.js $(LOCAL_PATH)/content/browser/resources/media/stats_graph_helper.js $(LOCAL_PATH)/content/browser/resources/media/stats_table.js $(LOCAL_PATH)/content/browser/resources/media/tab_view.js $(LOCAL_PATH)/content/browser/resources/media/timeline_graph_view.js $(LOCAL_PATH)/content/browser/resources/media/util.js $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.css $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.html $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.js $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.css $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.html $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.js $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/grit/content_resources.h: $(LOCAL_PATH)/mojo/public/js/bindings/codec.js $(LOCAL_PATH)/content/content_resources.grd $(LOCAL_PATH)/mojo/public/js/bindings/connection.js $(LOCAL_PATH)/mojo/public/js/bindings/connector.js $(LOCAL_PATH)/mojo/public/js/bindings/router.js $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.css $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.html $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.js $(LOCAL_PATH)/content/browser/resources/devtools/devtools_pinch_cursor.png $(LOCAL_PATH)/content/browser/resources/devtools/devtools_pinch_cursor_2x.png $(LOCAL_PATH)/content/browser/resources/devtools/devtools_touch_cursor.png $(LOCAL_PATH)/content/browser/resources/devtools/devtools_touch_cursor_2x.png $(LOCAL_PATH)/content/browser/resources/gpu/browser_bridge.js $(LOCAL_PATH)/content/browser/resources/gpu/gpu_internals.html $(LOCAL_PATH)/content/browser/resources/gpu/gpu_internals.js $(LOCAL_PATH)/content/browser/resources/gpu/info_view.css $(LOCAL_PATH)/content/browser/resources/gpu/info_view.html $(LOCAL_PATH)/content/browser/resources/gpu/info_view.js $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.css $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.html $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.js $(LOCAL_PATH)/content/browser/resources/media/cache_entry.js $(LOCAL_PATH)/content/browser/resources/media/client_renderer.js $(LOCAL_PATH)/content/browser/resources/media/data_series.js $(LOCAL_PATH)/content/browser/resources/media/disjoint_range_set.js $(LOCAL_PATH)/content/browser/resources/media/dump_creator.js $(LOCAL_PATH)/content/browser/resources/media/main.js $(LOCAL_PATH)/content/browser/resources/media/manager.js $(LOCAL_PATH)/content/browser/resources/media/media_internals.css $(LOCAL_PATH)/content/browser/resources/media/media_internals.html $(LOCAL_PATH)/content/browser/resources/media/media_internals.js $(LOCAL_PATH)/content/browser/resources/media/peer_connection_update_table.js $(LOCAL_PATH)/content/browser/resources/media/player_info.js $(LOCAL_PATH)/content/browser/resources/media/ssrc_info_manager.js $(LOCAL_PATH)/content/browser/resources/media/stats_graph_helper.js $(LOCAL_PATH)/content/browser/resources/media/stats_table.js $(LOCAL_PATH)/content/browser/resources/media/tab_view.js $(LOCAL_PATH)/content/browser/resources/media/timeline_graph_view.js $(LOCAL_PATH)/content/browser/resources/media/util.js $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.css $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.html $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.js $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.css $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.html $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.js $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from content_resources.grd ($@)"
 	$(hide)cd $(gyp_local_path)/content; mkdir -p $(gyp_shared_intermediate_dir)/content/grit $(gyp_shared_intermediate_dir)/content; python ../tools/grit/grit.py -i content_resources.grd build -f ../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/content" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc
 
diff --git a/content/content_resources.target.linux-x86_64.mk b/content/content_resources.target.linux-x86_64.mk
index a2cd13d..6a55087 100644
--- a/content/content_resources.target.linux-x86_64.mk
+++ b/content/content_resources.target.linux-x86_64.mk
@@ -19,7 +19,7 @@
 $(gyp_shared_intermediate_dir)/content/grit/content_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/grit/content_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/content/grit/content_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/content/grit/content_resources.h: $(LOCAL_PATH)/mojo/public/js/bindings/codec.js $(LOCAL_PATH)/content/content_resources.grd $(LOCAL_PATH)/mojo/public/js/bindings/connection.js $(LOCAL_PATH)/mojo/public/js/bindings/connector.js $(LOCAL_PATH)/mojo/public/js/bindings/router.js $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.css $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.html $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.js $(LOCAL_PATH)/content/browser/resources/devtools/devtools_pinch_cursor.png $(LOCAL_PATH)/content/browser/resources/devtools/devtools_touch_cursor.png $(LOCAL_PATH)/content/browser/resources/gpu/browser_bridge.js $(LOCAL_PATH)/content/browser/resources/gpu/gpu_internals.html $(LOCAL_PATH)/content/browser/resources/gpu/gpu_internals.js $(LOCAL_PATH)/content/browser/resources/gpu/info_view.css $(LOCAL_PATH)/content/browser/resources/gpu/info_view.html $(LOCAL_PATH)/content/browser/resources/gpu/info_view.js $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.css $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.html $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.js $(LOCAL_PATH)/content/browser/resources/media/cache_entry.js $(LOCAL_PATH)/content/browser/resources/media/client_renderer.js $(LOCAL_PATH)/content/browser/resources/media/data_series.js $(LOCAL_PATH)/content/browser/resources/media/disjoint_range_set.js $(LOCAL_PATH)/content/browser/resources/media/dump_creator.js $(LOCAL_PATH)/content/browser/resources/media/main.js $(LOCAL_PATH)/content/browser/resources/media/manager.js $(LOCAL_PATH)/content/browser/resources/media/media_internals.css $(LOCAL_PATH)/content/browser/resources/media/media_internals.html $(LOCAL_PATH)/content/browser/resources/media/media_internals.js $(LOCAL_PATH)/content/browser/resources/media/peer_connection_update_table.js $(LOCAL_PATH)/content/browser/resources/media/player_info.js $(LOCAL_PATH)/content/browser/resources/media/ssrc_info_manager.js $(LOCAL_PATH)/content/browser/resources/media/stats_graph_helper.js $(LOCAL_PATH)/content/browser/resources/media/stats_table.js $(LOCAL_PATH)/content/browser/resources/media/tab_view.js $(LOCAL_PATH)/content/browser/resources/media/timeline_graph_view.js $(LOCAL_PATH)/content/browser/resources/media/util.js $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.css $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.html $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.js $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.css $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.html $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.js $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/content/grit/content_resources.h: $(LOCAL_PATH)/mojo/public/js/bindings/codec.js $(LOCAL_PATH)/content/content_resources.grd $(LOCAL_PATH)/mojo/public/js/bindings/connection.js $(LOCAL_PATH)/mojo/public/js/bindings/connector.js $(LOCAL_PATH)/mojo/public/js/bindings/router.js $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.css $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.html $(LOCAL_PATH)/content/browser/resources/accessibility/accessibility.js $(LOCAL_PATH)/content/browser/resources/devtools/devtools_pinch_cursor.png $(LOCAL_PATH)/content/browser/resources/devtools/devtools_pinch_cursor_2x.png $(LOCAL_PATH)/content/browser/resources/devtools/devtools_touch_cursor.png $(LOCAL_PATH)/content/browser/resources/devtools/devtools_touch_cursor_2x.png $(LOCAL_PATH)/content/browser/resources/gpu/browser_bridge.js $(LOCAL_PATH)/content/browser/resources/gpu/gpu_internals.html $(LOCAL_PATH)/content/browser/resources/gpu/gpu_internals.js $(LOCAL_PATH)/content/browser/resources/gpu/info_view.css $(LOCAL_PATH)/content/browser/resources/gpu/info_view.html $(LOCAL_PATH)/content/browser/resources/gpu/info_view.js $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.css $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.html $(LOCAL_PATH)/content/browser/resources/indexed_db/indexeddb_internals.js $(LOCAL_PATH)/content/browser/resources/media/cache_entry.js $(LOCAL_PATH)/content/browser/resources/media/client_renderer.js $(LOCAL_PATH)/content/browser/resources/media/data_series.js $(LOCAL_PATH)/content/browser/resources/media/disjoint_range_set.js $(LOCAL_PATH)/content/browser/resources/media/dump_creator.js $(LOCAL_PATH)/content/browser/resources/media/main.js $(LOCAL_PATH)/content/browser/resources/media/manager.js $(LOCAL_PATH)/content/browser/resources/media/media_internals.css $(LOCAL_PATH)/content/browser/resources/media/media_internals.html $(LOCAL_PATH)/content/browser/resources/media/media_internals.js $(LOCAL_PATH)/content/browser/resources/media/peer_connection_update_table.js $(LOCAL_PATH)/content/browser/resources/media/player_info.js $(LOCAL_PATH)/content/browser/resources/media/ssrc_info_manager.js $(LOCAL_PATH)/content/browser/resources/media/stats_graph_helper.js $(LOCAL_PATH)/content/browser/resources/media/stats_table.js $(LOCAL_PATH)/content/browser/resources/media/tab_view.js $(LOCAL_PATH)/content/browser/resources/media/timeline_graph_view.js $(LOCAL_PATH)/content/browser/resources/media/util.js $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.css $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.html $(LOCAL_PATH)/content/browser/resources/media/webrtc_internals.js $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.css $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.html $(LOCAL_PATH)/content/browser/resources/service_worker/serviceworker_internals.js $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from content_resources.grd ($@)"
 	$(hide)cd $(gyp_local_path)/content; mkdir -p $(gyp_shared_intermediate_dir)/content/grit $(gyp_shared_intermediate_dir)/content; python ../tools/grit/grit.py -i content_resources.grd build -f ../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/content" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc
 
diff --git a/content/content_shell.gypi b/content/content_shell.gypi
index ec76c47..7749729 100644
--- a/content/content_shell.gypi
+++ b/content/content_shell.gypi
@@ -52,7 +52,7 @@
         '../net/net.gyp:net_resources',
         '../skia/skia.gyp:skia',
         '../third_party/WebKit/public/blink.gyp:blink',
-        '../third_party/WebKit/public/blink.gyp:blink_web_test_support',
+        '../third_party/WebKit/public/blink.gyp:blink_test_support',
         '../ui/base/ui_base.gyp:ui_base',
         '../ui/events/events.gyp:events_base',
         '../ui/gfx/gfx.gyp:gfx',
@@ -173,7 +173,6 @@
         'shell/renderer/shell_render_process_observer.h',
         'shell/renderer/shell_render_view_observer.cc',
         'shell/renderer/shell_render_view_observer.h',
-        'shell/renderer/test_runner/key_code_mapping.h',
         'shell/renderer/test_runner/MockColorChooser.cpp',
         'shell/renderer/test_runner/MockColorChooser.h',
         'shell/renderer/test_runner/MockConstraints.cpp',
@@ -323,7 +322,7 @@
                 '../ui/views/controls/webview/webview.gyp:webview',
                 '../ui/views/views.gyp:views',
                 '../ui/views/views.gyp:views_test_support',
-                '../ui/wm/wm.gyp:wm_core',
+                '../ui/wm/wm.gyp:wm',
               ],
               'sources/': [
                 ['exclude', 'shell/browser/shell_aura.cc'],
diff --git a/content/content_tests.gypi b/content/content_tests.gypi
index ddc9d3e..76ff48d 100644
--- a/content/content_tests.gypi
+++ b/content/content_tests.gypi
@@ -16,9 +16,9 @@
         ['OS!="ios"', {
           # layouttest_support_content is not supported nor required on iOS.
           'dependencies': [
+            'webkit_test_support_content',
             '../skia/skia.gyp:skia',
             '../v8/tools/gyp/v8.gyp:v8',
-            '../webkit/common/webkit_common.gyp:webkit_common',
           ],
           'include_dirs': [
             '..',
@@ -60,6 +60,7 @@
         'content.gyp:content_app_both',
         'content.gyp:content_browser',
         'content.gyp:content_common',
+        'webkit_test_support_content',
       ],
       'include_dirs': [
         '..',
@@ -92,6 +93,8 @@
         'public/test/mock_render_thread.h',
         'public/test/mock_resource_context.cc',
         'public/test/mock_resource_context.h',
+        'public/test/mock_storage_client.cc',
+        'public/test/mock_storage_client.h',
         'public/test/render_view_test.cc',
         'public/test/render_view_test.h',
         'public/test/render_widget_test.cc',
@@ -175,8 +178,6 @@
         'test/net/url_request_slow_download_job.h',
         'test/ppapi_unittest.cc',
         'test/ppapi_unittest.h',
-        'test/test_backing_store.cc',
-        'test/test_backing_store.h',
         'test/test_content_browser_client.cc',
         'test/test_content_browser_client.h',
         'test/test_content_client.cc',
@@ -203,6 +204,16 @@
         'test/weburl_loader_mock_factory.h',
       ],
       'conditions': [
+        ['enable_plugins==0', {
+          'sources!': [
+            'test/ppapi_unittest.cc',
+          ],
+        }],
+        ['input_speech==0', {
+          'sources!': [
+            'test/mock_google_streaming_server.cc',
+          ],
+        }],
         ['OS == "ios"', {
           'sources/': [
             # iOS only needs a small portion of content; exclude all the
@@ -249,6 +260,7 @@
             '../ppapi/ppapi_internal.gyp:ppapi_unittest_shared',
             '../third_party/WebKit/public/blink.gyp:blink',
             '../ui/surface/surface.gyp:surface',
+            '../v8/tools/gyp/v8.gyp:v8',
             '../webkit/child/webkit_child.gyp:webkit_child',
             '../webkit/common/gpu/webkit_gpu.gyp:webkit_gpu',
             '../webkit/renderer/compositor_bindings/compositor_bindings.gyp:webkit_compositor_support',
@@ -315,6 +327,23 @@
       ],
     },
     {
+      'target_name': 'webkit_test_support_content',
+      'type': 'static_library',
+      'dependencies': [
+        '../webkit/common/webkit_common.gyp:webkit_common',
+      ],
+      'include_dirs': [
+        '..',
+      ],
+      'export_dependent_settings': [
+        '../webkit/common/webkit_common.gyp:webkit_common',
+      ],
+      'sources': [
+        '../webkit/browser/quota/mock_special_storage_policy.cc',
+        '../webkit/browser/quota/mock_special_storage_policy.h',
+      ],
+    },
+    {
       'target_name': 'content_unittests',
       'type': '<(gtest_target_type)',
       'dependencies': [
@@ -362,6 +391,10 @@
         'browser/appcache/manifest_parser_unittest.cc',
         'browser/appcache/mock_appcache_policy.cc',
         'browser/appcache/mock_appcache_policy.h',
+        'browser/appcache/mock_appcache_service.cc',
+        'browser/appcache/mock_appcache_service.h',
+        'browser/appcache/mock_appcache_storage.cc',
+        'browser/appcache/mock_appcache_storage.h',
         'browser/appcache/mock_appcache_storage_unittest.cc',
         'browser/browser_thread_unittest.cc',
         'browser/browser_url_handler_impl_unittest.cc',
@@ -369,8 +402,8 @@
         'browser/child_process_security_policy_unittest.cc',
         'browser/compositor/software_browser_compositor_output_surface_unittest.cc',
         'browser/compositor/software_output_device_ozone_unittest.cc',
-        'browser/device_orientation/data_fetcher_shared_memory_base_unittest.cc',
-        'browser/device_orientation/sensor_manager_android_unittest.cc',
+        'browser/device_sensors/data_fetcher_shared_memory_base_unittest.cc',
+        'browser/device_sensors/sensor_manager_android_unittest.cc',
         'browser/devtools/devtools_http_handler_unittest.cc',
         'browser/devtools/devtools_manager_unittest.cc',
         'browser/devtools/shared_worker_devtools_manager_unittest.cc',
@@ -426,6 +459,7 @@
         'browser/geolocation/wifi_data_provider_common_unittest.cc',
         'browser/geolocation/wifi_data_provider_linux_unittest.cc',
         'browser/geolocation/wifi_data_provider_unittest_win.cc',
+        'browser/gpu/gpu_data_manager_impl_private_unittest.cc',
         'browser/gpu/shader_disk_cache_unittest.cc',
         'browser/host_zoom_map_impl_unittest.cc',
         'browser/indexed_db/indexed_db_active_blob_registry_unittest.cc',
@@ -469,6 +503,11 @@
         'browser/quota/mock_quota_manager_proxy.cc',
         'browser/quota/mock_quota_manager_proxy.h',
         'browser/quota/mock_quota_manager_unittest.cc',
+        'browser/quota/quota_database_unittest.cc',
+        'browser/quota/quota_manager_unittest.cc',
+        'browser/quota/quota_temporary_storage_evictor_unittest.cc',
+        'browser/quota/storage_monitor_unittest.cc',
+        'browser/quota/usage_tracker_unittest.cc',
         'browser/renderer_host/compositing_iosurface_transformer_mac_unittest.cc',
         'browser/renderer_host/input/gesture_event_queue_unittest.cc',
         'browser/renderer_host/input/input_router_impl_unittest.cc',
@@ -514,12 +553,14 @@
         'browser/service_worker/embedded_worker_test_helper.cc',
         'browser/service_worker/embedded_worker_test_helper.h',
         'browser/service_worker/service_worker_context_unittest.cc',
+        'browser/service_worker/service_worker_database_unittest.cc',
         'browser/service_worker/service_worker_dispatcher_host_unittest.cc',
         'browser/service_worker/service_worker_dispatcher_host_unittest.cc',
         'browser/service_worker/service_worker_handle_unittest.cc',
         'browser/service_worker/service_worker_job_unittest.cc',
         'browser/service_worker/service_worker_provider_host_unittest.cc',
         'browser/service_worker/service_worker_registration_unittest.cc',
+        'browser/service_worker/service_worker_storage_unittest.cc',
         'browser/service_worker/service_worker_url_request_job_unittest.cc',
         'browser/service_worker/service_worker_utils_unittest.cc',
         'browser/service_worker/service_worker_version_unittest.cc',
@@ -585,8 +626,8 @@
         'renderer/android/email_detector_unittest.cc',
         'renderer/android/phone_number_detector_unittest.cc',
         'renderer/bmp_image_decoder_unittest.cc',
-        'renderer/device_orientation/device_motion_event_pump_unittest.cc',
-        'renderer/device_orientation/device_orientation_event_pump_unittest.cc',
+        'renderer/device_sensors/device_motion_event_pump_unittest.cc',
+        'renderer/device_sensors/device_orientation_event_pump_unittest.cc',
         'renderer/disambiguation_popup_helper_unittest.cc',
         'renderer/dom_storage/dom_storage_cached_area_unittest.cc',
         'renderer/ico_image_decoder_unittest.cc',
@@ -610,7 +651,6 @@
         'renderer/media/webaudiosourceprovider_impl_unittest.cc',
         'renderer/media/webrtc/video_destination_handler_unittest.cc',
         'renderer/npapi/webplugin_impl_unittest.cc',
-        'renderer/paint_aggregator_unittest.cc',
         'renderer/pepper/host_var_tracker_unittest.cc',
         'renderer/pepper/mock_resource.h',
         'renderer/pepper/pepper_broker_unittest.cc',
@@ -626,10 +666,6 @@
         'test/image_decoder_test.cc',
         'test/image_decoder_test.h',
         'test/run_all_unittests.cc',
-        '../webkit/browser/appcache/mock_appcache_service.cc',
-        '../webkit/browser/appcache/mock_appcache_service.h',
-        '../webkit/browser/appcache/mock_appcache_storage.cc',
-        '../webkit/browser/appcache/mock_appcache_storage.h',
         '../webkit/browser/blob/local_file_stream_reader_unittest.cc',
         '../webkit/browser/database/database_quota_client_unittest.cc',
         '../webkit/browser/database/database_tracker_unittest.cc',
@@ -655,15 +691,6 @@
         '../webkit/common/database/database_connections_unittest.cc',
         '../webkit/common/database/database_identifier_unittest.cc',
         '../webkit/common/fileapi/file_system_util_unittest.cc',
-        '../webkit/browser/quota/mock_special_storage_policy.cc',
-        '../webkit/browser/quota/mock_special_storage_policy.h',
-        '../webkit/browser/quota/mock_storage_client.cc',
-        '../webkit/browser/quota/mock_storage_client.h',
-        '../webkit/browser/quota/quota_database_unittest.cc',
-        '../webkit/browser/quota/quota_manager_unittest.cc',
-        '../webkit/browser/quota/quota_temporary_storage_evictor_unittest.cc',
-        '../webkit/browser/quota/storage_monitor_unittest.cc',
-        '../webkit/browser/quota/usage_tracker_unittest.cc',
       ],
       'conditions': [
         ['OS == "ios"', {
@@ -698,8 +725,6 @@
             '../third_party/libjingle/libjingle.gyp:libjingle',
             '../ui/compositor/compositor.gyp:compositor_test_support',
             '../ui/gl/gl.gyp:gl',
-            '../v8/tools/gyp/v8.gyp:v8',
-            '../webkit/common/webkit_common.gyp:webkit_common',
             '../webkit/child/webkit_child.gyp:webkit_child',
             '../webkit/storage_browser.gyp:webkit_storage_browser',
             '../webkit/storage_common.gyp:webkit_storage_common',
@@ -747,6 +772,7 @@
             'renderer/media/webrtc/media_stream_remote_video_source_unittest.cc',
             'renderer/media/webrtc/media_stream_track_metrics_unittest.cc',
             'renderer/media/webrtc/webrtc_local_audio_track_adapter_unittest.cc',
+            'renderer/media/webrtc/webrtc_media_stream_adapter_unittest.cc',
             'renderer/media/webrtc/webrtc_video_capturer_adapter_unittest.cc',
             'renderer/media/webrtc_audio_capturer_unittest.cc',
             'renderer/media/webrtc_audio_renderer_unittest.cc',
@@ -818,6 +844,9 @@
           'xcode_settings': {'OTHER_LDFLAGS': ['-Wl,-ObjC']},
         }],
         ['chromeos==1', {
+          'dependencies': [
+            '../chromeos/chromeos.gyp:chromeos',
+          ],
           'sources/': [
             ['exclude', '^browser/geolocation/wifi_data_provider_linux_unittest.cc'],
           ],
@@ -1045,7 +1074,7 @@
             'browser/child_process_security_policy_browsertest.cc',
             'browser/cross_site_transfer_browsertest.cc',
             'browser/database_browsertest.cc',
-            'browser/device_orientation/device_inertial_sensor_browsertest.cc',
+            'browser/device_sensors/device_inertial_sensor_browsertest.cc',
             'browser/devtools/renderer_overrides_handler_browsertest.cc',
             'browser/dom_storage/dom_storage_browsertest.cc',
             'browser/download/download_browsertest.cc',
@@ -1055,6 +1084,7 @@
             'browser/fileapi/file_system_browsertest.cc',
             'browser/frame_host/frame_tree_browsertest.cc',
             'browser/frame_host/render_frame_host_manager_browsertest.cc',
+            'browser/frame_host/navigation_controller_impl_browsertest.cc',
             'browser/gpu/compositor_util_browsertest.cc',
             'browser/gpu/gpu_ipc_browsertests.cc',
             'browser/indexed_db/indexed_db_browsertest.cc',
@@ -1081,6 +1111,7 @@
             'browser/speech/input_tag_speech_browsertest.cc',
             'browser/speech/speech_recognition_browsertest.cc',
             'browser/tracing/tracing_controller_browsertest.cc',
+            'browser/web_contents/opened_by_dom_browsertest.cc',
             'browser/web_contents/touch_editable_impl_aura_browsertest.cc',
             'browser/web_contents/web_contents_impl_browsertest.cc',
             'browser/web_contents/web_contents_view_aura_browsertest.cc',
@@ -1265,11 +1296,12 @@
             '../testing/gtest.gyp:gtest',
             '../third_party/WebKit/public/blink.gyp:blink',
             '../ui/base/ui_base.gyp:ui_base',
+            '../v8/tools/gyp/v8.gyp:v8',
             '../ui/gfx/gfx.gyp:gfx',
             '../ui/gfx/gfx.gyp:gfx_geometry',
             '../ui/gl/gl.gyp:gl',
-            # The following two dependencies provide the missing
-            # symbol HeapProfilerStart in Linux component builds.
+            # The following dependency provides the missing symbol
+            # HeapProfilerStart in Linux component builds.
             '../webkit/child/webkit_child.gyp:webkit_child',
           ],
           'include_dirs': [
@@ -1469,7 +1501,6 @@
           ],
           'variables': {
             'test_suite_name': 'content_gl_tests',
-            'input_shlib_path': '<(SHARED_LIB_DIR)/<(SHARED_LIB_PREFIX)content_gl_tests<(SHARED_LIB_SUFFIX)',
           },
           'includes': [
             '../build/apk_test.gypi',
@@ -1484,7 +1515,6 @@
           ],
           'variables': {
             'test_suite_name': 'content_unittests',
-            'input_shlib_path': '<(SHARED_LIB_DIR)/<(SHARED_LIB_PREFIX)content_unittests<(SHARED_LIB_SUFFIX)',
           },
           'includes': [ '../build/apk_test.gypi' ],
         },
@@ -1524,37 +1554,41 @@
           ],
           'variables': {
             'test_suite_name': 'content_perftests',
-            'input_shlib_path': '<(SHARED_LIB_DIR)/<(SHARED_LIB_PREFIX)content_perftests<(SHARED_LIB_SUFFIX)',
           },
           'includes': [ '../build/apk_test.gypi' ],
         },
         {
           'target_name': 'chromium_linker_test_apk',
           'type': 'none',
-          'dependencies': [
-            'chromium_android_linker_test',
-            'content.gyp:content_icudata',
-            'content.gyp:content_java',
-            'content_shell_java',
-          ],
-          'variables': {
-            'apk_name': 'ChromiumLinkerTest',
-            'java_in_dir': 'shell/android/linker_test_apk',
-            'resource_dir': 'shell/android/linker_test_apk/res',
-            'native_lib_target': 'libchromium_android_linker_test',
-            'additional_input_paths': ['<(PRODUCT_DIR)/content_shell/assets/content_shell.pak'],
-            'asset_location': '<(PRODUCT_DIR)/content_shell/assets',
-            'use_chromium_linker': '1',
-            'enable_chromium_linker_tests': '1',
-            'conditions': [
-              ['icu_use_data_file_flag==1', {
-                'additional_input_paths': [
-                  '<(PRODUCT_DIR)/icudtl.dat',
+          'conditions': [
+            ['target_arch != "x64" and target_arch != "arm64"', {
+              'dependencies': [
+                'chromium_android_linker_test',
+                'content.gyp:content_icudata',
+                'content.gyp:content_java',
+                'content_shell_java',
+              ],
+              'variables': {
+                'apk_name': 'ChromiumLinkerTest',
+                'java_in_dir': 'shell/android/linker_test_apk',
+                'resource_dir': 'shell/android/linker_test_apk/res',
+                'native_lib_target': 'libchromium_android_linker_test',
+                'additional_input_paths': ['<(PRODUCT_DIR)/content_shell/assets/content_shell.pak'],
+                'asset_location': '<(PRODUCT_DIR)/content_shell/assets',
+                'use_chromium_linker': '1',
+                'enable_chromium_linker_tests': '1',
+                'conditions': [
+                  ['icu_use_data_file_flag==1', {
+                    'additional_input_paths': [
+                      '<(PRODUCT_DIR)/icudtl.dat',
+                    ],
+                  }],
                 ],
-              }],
-            ],
-          },
-          'includes': [ '../build/java_apk.gypi' ],
+              },
+              'includes': [ '../build/java_apk.gypi' ],
+            },
+           ],
+          ],
         },
         {
           'target_name': 'chromium_android_linker_test',
@@ -1592,7 +1626,6 @@
           ],
           'variables': {
             'test_suite_name': 'video_decode_accelerator_unittest',
-            'input_shlib_path': '<(SHARED_LIB_DIR)/<(SHARED_LIB_PREFIX)content_unittests<(SHARED_LIB_SUFFIX)',
           },
           'includes': [ '../build/apk_test.gypi' ],
         },
diff --git a/content/content_utility.target.darwin-arm.mk b/content/content_utility.target.darwin-arm.mk
index 5bda365..3440793 100644
--- a/content/content_utility.target.darwin-arm.mk
+++ b/content/content_utility.target.darwin-arm.mk
@@ -241,7 +241,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_utility.target.darwin-mips.mk b/content/content_utility.target.darwin-mips.mk
index b6ac556..34a2c27 100644
--- a/content/content_utility.target.darwin-mips.mk
+++ b/content/content_utility.target.darwin-mips.mk
@@ -237,7 +237,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_utility.target.darwin-x86.mk b/content/content_utility.target.darwin-x86.mk
index 1e28526..4108687 100644
--- a/content/content_utility.target.darwin-x86.mk
+++ b/content/content_utility.target.darwin-x86.mk
@@ -239,7 +239,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_utility.target.darwin-x86_64.mk b/content/content_utility.target.darwin-x86_64.mk
index f400884..deaa3d9 100644
--- a/content/content_utility.target.darwin-x86_64.mk
+++ b/content/content_utility.target.darwin-x86_64.mk
@@ -239,7 +239,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_utility.target.linux-arm.mk b/content/content_utility.target.linux-arm.mk
index 5bda365..3440793 100644
--- a/content/content_utility.target.linux-arm.mk
+++ b/content/content_utility.target.linux-arm.mk
@@ -241,7 +241,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_utility.target.linux-mips.mk b/content/content_utility.target.linux-mips.mk
index b6ac556..34a2c27 100644
--- a/content/content_utility.target.linux-mips.mk
+++ b/content/content_utility.target.linux-mips.mk
@@ -237,7 +237,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_utility.target.linux-x86.mk b/content/content_utility.target.linux-x86.mk
index 1e28526..4108687 100644
--- a/content/content_utility.target.linux-x86.mk
+++ b/content/content_utility.target.linux-x86.mk
@@ -239,7 +239,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/content_utility.target.linux-x86_64.mk b/content/content_utility.target.linux-x86_64.mk
index f400884..deaa3d9 100644
--- a/content/content_utility.target.linux-x86_64.mk
+++ b/content/content_utility.target.linux-x86_64.mk
@@ -239,7 +239,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/content/port/browser/render_widget_host_view_port.h b/content/port/browser/render_widget_host_view_port.h
index 4620629..3b860c7 100644
--- a/content/port/browser/render_widget_host_view_port.h
+++ b/content/port/browser/render_widget_host_view_port.h
@@ -40,7 +40,6 @@
 }
 
 namespace content {
-class BackingStore;
 class RenderWidgetHostViewFrameSubscriber;
 class SyntheticGesture;
 class SyntheticGestureTarget;
@@ -171,9 +170,6 @@
   // Notifies the view that the scroll offset has changed.
   virtual void ScrollOffsetChanged() = 0;
 
-  // Allocate a backing store for this view.
-  virtual BackingStore* AllocBackingStore(const gfx::Size& size) = 0;
-
   // Copies the contents of the compositing surface into the given
   // (uninitialized) PlatformCanvas if any.
   // The rectangle region specified with |src_subrect| is copied from the
@@ -288,12 +284,8 @@
   virtual void SetScrollOffsetPinning(
       bool is_pinned_to_left, bool is_pinned_to_right) = 0;
 
-  // When a wheel event is first received, it is sent to the renderer.  This
-  // method is invoked once the renderer, and |delegate_| have been given a
-  // chance to process the wheel event. |consumed| indicates whether either
-  // chose to process the |event|. At most one entity should consume an event.
-  virtual void HandledWheelEvent(const blink::WebMouseWheelEvent& event,
-                                 bool consumed) = 0;
+  // Called when a mousewheel event was not processed by the renderer.
+  virtual void UnhandledWheelEvent(const blink::WebMouseWheelEvent& event) = 0;
 
   // Called prior to forwarding input event messages to the renderer, giving
   // the view a chance to perform in-process event filtering or processing.
diff --git a/content/ppapi_plugin/ppapi_thread.cc b/content/ppapi_plugin/ppapi_thread.cc
index e2f6a9b..cb0abde 100644
--- a/content/ppapi_plugin/ppapi_thread.cc
+++ b/content/ppapi_plugin/ppapi_thread.cc
@@ -53,11 +53,6 @@
 #endif
 
 #if defined(OS_WIN)
-
-// TODO(xhwang): Remove after http://crbug.com/345852 is fixed.
-const char kWidevineCdmFileName[] = "widevinecdm.dll";
-const char kWidevineCdmAdapterFileName[] = "widevinecdmadapter.dll";
-
 extern sandbox::TargetServices* g_target_services;
 
 // Used by EnumSystemLocales for warming up.
@@ -283,18 +278,6 @@
       ReportLoadResult(path, LOAD_FAILED);
       // Report detailed reason for load failure.
       ReportLoadErrorCode(path, error);
-#if defined(OW_WIN)
-      // Extra check to help investigate http://crbug.com/345852. This should
-      // never fail because the paths are checked before registering the
-      // adapter.
-      // TODO(xhwang): Remove this after the issue is fixed. See
-      // http://crbug.com/356331
-      if (path.BaseName().MaybeAsASCII() == kWidevineCdmAdapterFileName) {
-        CHECK(base::PathExists(path));
-        CHECK(
-            base::PathExists(path.DirName().AppendASCII(kWidevineCdmFileName)));
-      }
-#endif
       return;
     }
 
diff --git a/content/public/android/OWNERS b/content/public/android/OWNERS
index 11d36ee..0e99ab7 100644
--- a/content/public/android/OWNERS
+++ b/content/public/android/OWNERS
@@ -2,3 +2,7 @@
 bulach@chromium.org
 tedchoc@chromium.org
 yfriedman@chromium.org
+
+per-file *.aidl=set noparent
+per-file *.aidl=palmer@chromium.org
+per-file *.aidl=cdn@chromium.org
diff --git a/content/public/android/java/src/org/chromium/content/browser/BatteryStatusManager.java b/content/public/android/java/src/org/chromium/content/browser/BatteryStatusManager.java
new file mode 100644
index 0000000..f4357fa
--- /dev/null
+++ b/content/public/android/java/src/org/chromium/content/browser/BatteryStatusManager.java
@@ -0,0 +1,116 @@
+// 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.
+
+package org.chromium.content.browser;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.os.BatteryManager;
+import android.util.Log;
+
+import org.chromium.base.CalledByNative;
+import org.chromium.base.JNINamespace;
+
+/**
+ * Android implementation of the battery status APIs.
+ */
+@JNINamespace("content")
+class BatteryStatusManager extends BroadcastReceiver {
+
+    private static final String TAG = "BatteryStatusManager";
+
+    // A reference to the application context in order to acquire the SensorService.
+    private final Context mAppContext;
+    private final IntentFilter mFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
+
+    // Non-zero if and only if we're listening for events.
+    // To avoid race conditions on the C++ side, access must be synchronized.
+    private long mNativePtr;
+    // The lock to access the mNativePtr.
+    private final Object mNativePtrLock = new Object();
+
+    private boolean mEnabled = false;
+
+    protected BatteryStatusManager(Context context) {
+        mAppContext = context.getApplicationContext();
+    }
+
+    @CalledByNative
+    static BatteryStatusManager getInstance(Context appContext) {
+        return new BatteryStatusManager(appContext);
+    }
+
+    /**
+     * Start listening for intents
+     * @return True on success.
+     */
+    @CalledByNative
+    boolean start(long nativePtr) {
+        synchronized (mNativePtrLock) {
+            if (!mEnabled && mAppContext.registerReceiver(this, mFilter) != null) {
+                // success
+                mNativePtr = nativePtr;
+                mEnabled = true;
+            }
+        }
+        return mEnabled;
+    }
+
+    /**
+     * Stop listening to intents.
+     */
+    @CalledByNative
+    void stop() {
+        synchronized (mNativePtrLock) {
+            if (mEnabled) {
+                mAppContext.unregisterReceiver(this);
+                mNativePtr = 0;
+                mEnabled = false;
+            }
+        }
+    }
+
+    @Override
+    public void onReceive(Context context, Intent intent) {
+       if (!intent.getAction().equals(Intent.ACTION_BATTERY_CHANGED)) {
+           Log.e(TAG, "Unexpected intent.");
+           return;
+       }
+
+       int current = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
+       int max = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
+       double level = (double)current / (double)max;
+
+       int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
+       // by default assume a battery is present
+       boolean present = intent.getBooleanExtra(BatteryManager.EXTRA_PRESENT, true);
+       boolean charging = (present && status == BatteryManager.BATTERY_STATUS_DISCHARGING)
+               ? false : true;
+
+       //TODO(timvolodine) : add proper projection for chargingTime, dischargingTime.
+       double chargingTime = (!present || status == BatteryManager.BATTERY_STATUS_FULL)
+               ? 0 : Double.POSITIVE_INFINITY;
+       double dischargingTime = Double.POSITIVE_INFINITY;
+
+       gotBatteryStatus(charging, chargingTime, dischargingTime, level);
+    }
+
+    protected void gotBatteryStatus(boolean charging, double chargingTime,
+            double dischargingTime, double level) {
+        synchronized (mNativePtrLock) {
+            if (mNativePtr != 0) {
+                nativeGotBatteryStatus(mNativePtr, charging, chargingTime, dischargingTime, level);
+            }
+        }
+    }
+
+    /**
+     * Native JNI call
+     * see content/browser/battery_status/battery_status_manager_android.cc
+     */
+    private native void nativeGotBatteryStatus(long nativeBatteryStatusManagerAndroid,
+            boolean charging, double chargingTime, double dischargingTime, double level);
+}
diff --git a/content/public/android/java/src/org/chromium/content/browser/ContentVideoView.java b/content/public/android/java/src/org/chromium/content/browser/ContentVideoView.java
index 80d09fd..2a23e23 100644
--- a/content/public/android/java/src/org/chromium/content/browser/ContentVideoView.java
+++ b/content/public/android/java/src/org/chromium/content/browser/ContentVideoView.java
@@ -100,9 +100,13 @@
 
         @Override
         protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-            int width = getDefaultSize(mVideoWidth, widthMeasureSpec);
-            int height = getDefaultSize(mVideoHeight, heightMeasureSpec);
+            // set the default surface view size to (1, 1) so that it won't block
+            // the infobar. (0, 0) is not a valid size for surface view.
+            int width = 1;
+            int height = 1;
             if (mVideoWidth > 0 && mVideoHeight > 0) {
+                width = getDefaultSize(mVideoWidth, widthMeasureSpec);
+                height = getDefaultSize(mVideoHeight, heightMeasureSpec);
                 if (mVideoWidth * height  > width * mVideoHeight) {
                     height = width * mVideoHeight / mVideoWidth;
                 } else if (mVideoWidth * height  < width * mVideoHeight) {
@@ -169,8 +173,8 @@
     protected void showContentVideoView() {
         mVideoSurfaceView.getHolder().addCallback(this);
         this.addView(mVideoSurfaceView, new FrameLayout.LayoutParams(
-                ViewGroup.LayoutParams.MATCH_PARENT,
-                ViewGroup.LayoutParams.MATCH_PARENT,
+                ViewGroup.LayoutParams.WRAP_CONTENT,
+                ViewGroup.LayoutParams.WRAP_CONTENT,
                 Gravity.CENTER));
 
         mProgressView = mClient.getVideoLoadingProgressView();
diff --git a/content/public/android/java/src/org/chromium/content/browser/ContentView.java b/content/public/android/java/src/org/chromium/content/browser/ContentView.java
index 9fdd023..db99fe8 100644
--- a/content/public/android/java/src/org/chromium/content/browser/ContentView.java
+++ b/content/public/android/java/src/org/chromium/content/browser/ContentView.java
@@ -18,8 +18,6 @@
 import android.view.inputmethod.InputConnection;
 import android.widget.FrameLayout;
 
-import com.google.common.annotations.VisibleForTesting;
-
 import org.chromium.base.TraceEvent;
 import org.chromium.ui.base.WindowAndroid;
 
@@ -71,13 +69,6 @@
         mContentViewCore.initialize(this, this, nativeWebContents, windowAndroid);
     }
 
-    /**
-     * @return The URL of the page.
-     */
-    public String getUrl() {
-        return mContentViewCore.getUrl();
-    }
-
     // PageInfo implementation.
 
     @Override
@@ -103,100 +94,6 @@
         return mContentViewCore;
     }
 
-    /**
-     * Destroy the internal state of the WebView. This method may only be called
-     * after the WebView has been removed from the view system. No other methods
-     * may be called on this WebView after this method has been called.
-     */
-    public void destroy() {
-        mContentViewCore.destroy();
-    }
-
-    /**
-     * Returns true initially, false after destroy() has been called.
-     * It is illegal to call any other public method after destroy().
-     */
-    public boolean isAlive() {
-        return mContentViewCore.isAlive();
-    }
-
-    @VisibleForTesting
-    public ContentViewClient getContentViewClient() {
-        return mContentViewCore.getContentViewClient();
-    }
-
-    /**
-     * Load url without fixing up the url string. Consumers of ContentView are responsible for
-     * ensuring the URL passed in is properly formatted (i.e. the scheme has been added if left
-     * off during user input).
-     *
-     * @param params Parameters for this load.
-     */
-    public void loadUrl(LoadUrlParams params) {
-        mContentViewCore.loadUrl(params);
-    }
-
-    /**
-     * @return Whether the current WebContents has a previous navigation entry.
-     */
-    public boolean canGoBack() {
-        return mContentViewCore.canGoBack();
-    }
-
-    /**
-     * @return Whether the current WebContents has a navigation entry after the current one.
-     */
-    public boolean canGoForward() {
-        return mContentViewCore.canGoForward();
-    }
-
-    /**
-     * Goes to the navigation entry before the current one.
-     */
-    public void goBack() {
-        mContentViewCore.goBack();
-    }
-
-    /**
-     * Goes to the navigation entry following the current one.
-     */
-    public void goForward() {
-        mContentViewCore.goForward();
-    }
-
-    /**
-     * Fling the ContentView from the current position.
-     * @param x Fling touch starting position
-     * @param y Fling touch starting position
-     * @param velocityX Initial velocity of the fling (X) measured in pixels per second.
-     * @param velocityY Initial velocity of the fling (Y) measured in pixels per second.
-     */
-    @VisibleForTesting
-    public void fling(long timeMs, int x, int y, int velocityX, int velocityY) {
-        mContentViewCore.flingForTest(timeMs, x, y, velocityX, velocityY);
-    }
-
-    /**
-     * To be called when the ContentView is shown.
-     **/
-    public void onShow() {
-        mContentViewCore.onShow();
-    }
-
-    /**
-     * To be called when the ContentView is hidden.
-     **/
-    public void onHide() {
-        mContentViewCore.onHide();
-    }
-
-    /**
-     * Hides the select action bar.
-     */
-    public void hideSelectActionBar() {
-        mContentViewCore.hideSelectActionBar();
-    }
-
     // FrameLayout overrides.
 
     // Needed by ContentViewCore.InternalAccessDelegate
@@ -289,7 +186,7 @@
         MotionEvent offset = createOffsetMotionEvent(event);
         boolean consumed = mContentViewCore.onHoverEvent(offset);
         offset.recycle();
-        super.onHoverEvent(event);
+        if (!mContentViewCore.isTouchExplorationEnabled()) super.onHoverEvent(event);
         return consumed;
     }
 
@@ -385,14 +282,6 @@
         return super.awakenScrollBars();
     }
 
-    public int getSingleTapX()  {
-        return mContentViewCore.getSingleTapX();
-    }
-
-    public int getSingleTapY()  {
-        return mContentViewCore.getSingleTapY();
-    }
-
     @Override
     public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
         super.onInitializeAccessibilityNodeInfo(info);
@@ -428,28 +317,6 @@
     }
 
     /**
-     * Return the current scale of the WebView
-     * @return The current scale.
-     */
-    public float getScale() {
-        return mContentViewCore.getScale();
-    }
-
-    /**
-     * Enable or disable accessibility features.
-     */
-    public void setAccessibilityState(boolean state) {
-        mContentViewCore.setAccessibilityState(state);
-    }
-
-    /**
-     * Inform WebKit that Fullscreen mode has been exited by the user.
-     */
-    public void exitFullscreen() {
-        mContentViewCore.exitFullscreen();
-    }
-
-    /**
      * Return content scroll y.
      *
      * @return The vertical scroll position in pixels.
diff --git a/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java b/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java
index 17f6950..407e8c3 100644
--- a/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java
+++ b/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java
@@ -727,17 +727,20 @@
         mContainerView.setContentDescription(contentDescription);
         mWebContentsObserver = new WebContentsObserverAndroid(this) {
             @Override
-            public void didStartLoading(String url) {
+            public void didNavigateMainFrame(String url, String baseUrl,
+                    boolean isNavigationToDifferentPage, boolean isNavigationInPage) {
+                if (!isNavigationToDifferentPage) return;
                 hidePopupDialog();
                 resetScrollInProgress();
-                resetGestureDetectors();
+                resetGestureDetection();
             }
 
             @Override
             public void renderProcessGone(boolean wasOomProtected) {
                 hidePopupDialog();
                 resetScrollInProgress();
-                resetGestureDetectors();
+                // No need to reset gesture detection as the detector will have
+                // been destroyed in the RenderWidgetHostView.
             }
         };
     }
@@ -771,7 +774,6 @@
         mContainerView.setClickable(true);
 
         mRenderCoordinates.reset();
-        onRenderCoordinatesUpdated();
 
         initPopupZoomer(mContext);
         mImeAdapter = createImeAdapter(mContext);
@@ -889,7 +891,8 @@
         mContentViewClient = client;
     }
 
-    ContentViewClient getContentViewClient() {
+    @VisibleForTesting
+    public ContentViewClient getContentViewClient() {
         if (mContentViewClient == null) {
             // We use the Null Object pattern to avoid having to perform a null check in this class.
             // We create it lazily because most of the time a client will be set almost immediately
@@ -928,6 +931,8 @@
                 params.mUrl,
                 params.mLoadUrlType,
                 params.mTransitionType,
+                params.getReferrer() != null ? params.getReferrer().getUrl() : null,
+                params.getReferrer() != null ? params.getReferrer().getPolicy() : 0,
                 params.mUaOverrideOption,
                 params.getExtraHeadersString(),
                 params.mPostData,
@@ -940,7 +945,7 @@
      * Stops loading the current web contents.
      */
     public void stopLoading() {
-        if (mNativeContentViewCore != 0) nativeStopLoading(mNativeContentViewCore);
+        if (mWebContents != null) mWebContents.stop();
     }
 
     /**
@@ -959,8 +964,7 @@
      * @return The title of the current page.
      */
     public String getTitle() {
-        if (mNativeContentViewCore != 0) return nativeGetTitle(mNativeContentViewCore);
-        return null;
+        return mWebContents == null ? null : mWebContents.getTitle();
     }
 
     /**
@@ -1216,8 +1220,7 @@
     }
 
     public void setIgnoreRemainingTouchEvents() {
-        if (mNativeContentViewCore == 0) return;
-        nativeIgnoreRemainingTouchEvents(mNativeContentViewCore);
+        resetGestureDetection();
     }
 
     public boolean isScrollInProgress() {
@@ -1446,18 +1449,6 @@
         return mContentSettings;
     }
 
-    private void onRenderCoordinatesUpdated() {
-        if (mNativeContentViewCore == 0) return;
-
-        // We disable double tap zoom for pages that have a width=device-width
-        // or narrower viewport (indicating that this is a mobile-optimized or
-        // responsive web design, so text will be legible without zooming).
-        // We also disable it for pages that disallow the user from zooming in
-        // or out (even if they don't have a device-width or narrower viewport).
-        nativeSetDoubleTapSupportForPageEnabled(mNativeContentViewCore,
-                !mRenderCoordinates.hasMobileViewport() && !mRenderCoordinates.hasFixedPageScale());
-    }
-
     private void hidePopupDialog() {
         hideSelectPopup();
         hideHandles();
@@ -1475,9 +1466,9 @@
         return mActionMode != null;
     }
 
-    private void resetGestureDetectors() {
+    private void resetGestureDetection() {
         if (mNativeContentViewCore == 0) return;
-        nativeResetGestureDetectors(mNativeContentViewCore);
+        nativeResetGestureDetection(mNativeContentViewCore);
     }
 
     /**
@@ -1655,10 +1646,7 @@
      * @see View#onWindowFocusChanged(boolean)
      */
     public void onWindowFocusChanged(boolean hasWindowFocus) {
-        if (!hasWindowFocus) {
-            if (mNativeContentViewCore == 0) return;
-            nativeOnWindowFocusLost(mNativeContentViewCore);
-        }
+        if (!hasWindowFocus) resetGestureDetection();
     }
 
     public void onFocusChanged(boolean gainFocus) {
@@ -2334,7 +2322,6 @@
                 viewportWidth, viewportHeight,
                 pageScaleFactor, minPageScaleFactor, maxPageScaleFactor,
                 contentOffsetYPix);
-        onRenderCoordinatesUpdated();
 
         if (scrollChanged || contentOffsetChanged) {
             for (mGestureStateListenersIterator.rewind();
@@ -2914,8 +2901,11 @@
      */
     public boolean isDeviceAccessibilityScriptInjectionEnabled() {
         try {
-            if (!CommandLine.getInstance().hasSwitch(
-                    ContentSwitches.ENABLE_ACCESSIBILITY_SCRIPT_INJECTION)) {
+            // On JellyBean and higher, native accessibility is the default so script
+            // injection is only allowed if enabled via a flag.
+            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN &&
+                    !CommandLine.getInstance().hasSwitch(
+                            ContentSwitches.ENABLE_ACCESSIBILITY_SCRIPT_INJECTION)) {
                 return false;
             }
 
@@ -2965,6 +2955,13 @@
     }
 
     /**
+     * Returns true if accessibility is on and touch exploration is enabled.
+     */
+    public boolean isTouchExplorationEnabled() {
+        return mTouchExplorationEnabled;
+    }
+
+    /**
      * Turns browser accessibility on or off.
      * If |state| is |false|, this turns off both native and injected accessibility.
      * Otherwise, if accessibility script injection is enabled, this will enable the injected
@@ -3178,6 +3175,8 @@
             String url,
             int loadUrlType,
             int transitionType,
+            String referrerUrl,
+            int referrerPolicy,
             int uaOverrideOption,
             String extraHeaders,
             byte[] postData,
@@ -3187,8 +3186,6 @@
 
     private native String nativeGetURL(long nativeContentViewCoreImpl);
 
-    private native String nativeGetTitle(long nativeContentViewCoreImpl);
-
     private native void nativeShowInterstitialPage(
             long nativeContentViewCoreImpl, String url, long nativeInterstitialPageDelegateAndroid);
     private native boolean nativeIsShowingInterstitialPage(long nativeContentViewCoreImpl);
@@ -3251,14 +3248,7 @@
 
     private native void nativeMoveCaret(long nativeContentViewCoreImpl, float x, float y);
 
-    private native void nativeResetGestureDetectors(long nativeContentViewCoreImpl);
-
-    private native void nativeIgnoreRemainingTouchEvents(long nativeContentViewCoreImpl);
-
-    private native void nativeOnWindowFocusLost(long nativeContentViewCoreImpl);
-
-    private native void nativeSetDoubleTapSupportForPageEnabled(
-            long nativeContentViewCoreImpl, boolean enabled);
+    private native void nativeResetGestureDetection(long nativeContentViewCoreImpl);
     private native void nativeSetDoubleTapSupportEnabled(
             long nativeContentViewCoreImpl, boolean enabled);
     private native void nativeSetMultiTouchZoomSupportEnabled(
@@ -3267,8 +3257,6 @@
     private native void nativeLoadIfNecessary(long nativeContentViewCoreImpl);
     private native void nativeRequestRestoreLoad(long nativeContentViewCoreImpl);
 
-    private native void nativeStopLoading(long nativeContentViewCoreImpl);
-
     private native void nativeReload(long nativeContentViewCoreImpl, boolean checkForRepost);
     private native void nativeReloadIgnoringCache(
             long nativeContentViewCoreImpl, boolean checkForRepost);
diff --git a/content/public/android/java/src/org/chromium/content/browser/ContentViewRenderView.java b/content/public/android/java/src/org/chromium/content/browser/ContentViewRenderView.java
index 2e591a8..d18c7f2 100644
--- a/content/public/android/java/src/org/chromium/content/browser/ContentViewRenderView.java
+++ b/content/public/android/java/src/org/chromium/content/browser/ContentViewRenderView.java
@@ -203,16 +203,6 @@
         mNativeContentViewRenderView = 0;
     }
 
-    /**
-     * Makes the passed ContentView the one displayed by this ContentViewRenderView.
-     * TODO(yfriedman): Remove once this rolls downstream and callers are updated.
-     */
-    @Deprecated
-    public void setCurrentContentView(ContentView contentView) {
-        setCurrentContentViewCore(contentView != null ? contentView.getContentViewCore() : null);
-    }
-
-
     public void setCurrentContentViewCore(ContentViewCore contentViewCore) {
         assert mNativeContentViewRenderView != 0;
         mContentViewCore = contentViewCore;
diff --git a/content/public/android/java/src/org/chromium/content/browser/DeviceMotionAndOrientation.java b/content/public/android/java/src/org/chromium/content/browser/DeviceMotionAndOrientation.java
deleted file mode 100644
index be73f8c..0000000
--- a/content/public/android/java/src/org/chromium/content/browser/DeviceMotionAndOrientation.java
+++ /dev/null
@@ -1,520 +0,0 @@
-// Copyright 2013 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.
-
-package org.chromium.content.browser;
-
-import android.content.Context;
-import android.hardware.Sensor;
-import android.hardware.SensorEvent;
-import android.hardware.SensorEventListener;
-import android.hardware.SensorManager;
-import android.os.Handler;
-import android.os.HandlerThread;
-import android.util.Log;
-
-import com.google.common.annotations.VisibleForTesting;
-
-import org.chromium.base.CalledByNative;
-import org.chromium.base.CollectionUtil;
-import org.chromium.base.JNINamespace;
-import org.chromium.base.ThreadUtils;
-
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.concurrent.Callable;
-
-/**
- * Android implementation of the device motion and orientation APIs.
- */
-@JNINamespace("content")
-class DeviceMotionAndOrientation implements SensorEventListener {
-
-    private static final String TAG = "DeviceMotionAndOrientation";
-
-    // These fields are lazily initialized by getHandler().
-    private Thread mThread;
-    private Handler mHandler;
-
-    // A reference to the application context in order to acquire the SensorService.
-    private final Context mAppContext;
-
-    // The lock to access the mHandler.
-    private final Object mHandlerLock = new Object();
-
-    // Non-zero if and only if we're listening for events.
-    // To avoid race conditions on the C++ side, access must be synchronized.
-    private long mNativePtr;
-
-    // The lock to access the mNativePtr.
-    private final Object mNativePtrLock = new Object();
-
-    // Holds a shortened version of the rotation vector for compatibility purposes.
-    private float[] mTruncatedRotationVector;
-
-    // Lazily initialized when registering for notifications.
-    private SensorManagerProxy mSensorManagerProxy;
-
-    // The only instance of that class and its associated lock.
-    private static DeviceMotionAndOrientation sSingleton;
-    private static Object sSingletonLock = new Object();
-
-    /**
-     * constants for using in JNI calls, also see
-     * content/browser/device_orientation/sensor_manager_android.cc
-     */
-    static final int DEVICE_ORIENTATION = 0;
-    static final int DEVICE_MOTION = 1;
-
-    static final Set<Integer> DEVICE_ORIENTATION_SENSORS = CollectionUtil.newHashSet(
-            Sensor.TYPE_ROTATION_VECTOR);
-
-    static final Set<Integer> DEVICE_MOTION_SENSORS = CollectionUtil.newHashSet(
-            Sensor.TYPE_ACCELEROMETER,
-            Sensor.TYPE_LINEAR_ACCELERATION,
-            Sensor.TYPE_GYROSCOPE);
-
-    @VisibleForTesting
-    final Set<Integer> mActiveSensors = new HashSet<Integer>();
-    boolean mDeviceMotionIsActive = false;
-    boolean mDeviceOrientationIsActive = false;
-
-    protected DeviceMotionAndOrientation(Context context) {
-        mAppContext = context.getApplicationContext();
-    }
-
-    /**
-     * Start listening for sensor events. If this object is already listening
-     * for events, the old callback is unregistered first.
-     *
-     * @param nativePtr Value to pass to nativeGotOrientation() for each event.
-     * @param rateInMilliseconds Requested callback rate in milliseconds. The
-     *            actual rate may be higher. Unwanted events should be ignored.
-     * @param eventType Type of event to listen to, can be either DEVICE_ORIENTATION or
-     *                  DEVICE_MOTION.
-     * @return True on success.
-     */
-    @CalledByNative
-    public boolean start(long nativePtr, int eventType, int rateInMilliseconds) {
-        boolean success = false;
-        synchronized (mNativePtrLock) {
-            switch (eventType) {
-                case DEVICE_ORIENTATION:
-                    success = registerSensors(DEVICE_ORIENTATION_SENSORS, rateInMilliseconds,
-                            true);
-                    break;
-                case DEVICE_MOTION:
-                    // note: device motion spec does not require all sensors to be available
-                    success = registerSensors(DEVICE_MOTION_SENSORS, rateInMilliseconds, false);
-                    break;
-                default:
-                    Log.e(TAG, "Unknown event type: " + eventType);
-                    return false;
-            }
-            if (success) {
-                mNativePtr = nativePtr;
-                setEventTypeActive(eventType, true);
-            }
-            return success;
-        }
-    }
-
-    @CalledByNative
-    public int getNumberActiveDeviceMotionSensors() {
-        Set<Integer> deviceMotionSensors = new HashSet<Integer>(DEVICE_MOTION_SENSORS);
-        deviceMotionSensors.removeAll(mActiveSensors);
-        return DEVICE_MOTION_SENSORS.size() - deviceMotionSensors.size();
-    }
-
-    /**
-     * Stop listening to sensors for a given event type. Ensures that sensors are not disabled
-     * if they are still in use by a different event type.
-     *
-     * @param eventType Type of event to listen to, can be either DEVICE_ORIENTATION or
-     *                  DEVICE_MOTION.
-     * We strictly guarantee that the corresponding native*() methods will not be called
-     * after this method returns.
-     */
-    @CalledByNative
-    public void stop(int eventType) {
-        Set<Integer> sensorsToRemainActive = new HashSet<Integer>();
-        synchronized (mNativePtrLock) {
-            switch (eventType) {
-                case DEVICE_ORIENTATION:
-                    if (mDeviceMotionIsActive) {
-                        sensorsToRemainActive.addAll(DEVICE_MOTION_SENSORS);
-                    }
-                    break;
-                case DEVICE_MOTION:
-                    if (mDeviceOrientationIsActive) {
-                        sensorsToRemainActive.addAll(DEVICE_ORIENTATION_SENSORS);
-                    }
-                    break;
-                default:
-                    Log.e(TAG, "Unknown event type: " + eventType);
-                    return;
-            }
-
-            Set<Integer> sensorsToDeactivate = new HashSet<Integer>(mActiveSensors);
-            sensorsToDeactivate.removeAll(sensorsToRemainActive);
-            unregisterSensors(sensorsToDeactivate);
-            setEventTypeActive(eventType, false);
-            if (mActiveSensors.isEmpty()) {
-                mNativePtr = 0;
-            }
-        }
-    }
-
-    @Override
-    public void onAccuracyChanged(Sensor sensor, int accuracy) {
-        // Nothing
-    }
-
-    @Override
-    public void onSensorChanged(SensorEvent event) {
-        sensorChanged(event.sensor.getType(), event.values);
-    }
-
-    @VisibleForTesting
-    void sensorChanged(int type, float[] values) {
-        switch (type) {
-            case Sensor.TYPE_ACCELEROMETER:
-                if (mDeviceMotionIsActive) {
-                    gotAccelerationIncludingGravity(values[0], values[1], values[2]);
-                }
-                break;
-            case Sensor.TYPE_LINEAR_ACCELERATION:
-                if (mDeviceMotionIsActive) {
-                    gotAcceleration(values[0], values[1], values[2]);
-                }
-                break;
-            case Sensor.TYPE_GYROSCOPE:
-                if (mDeviceMotionIsActive) {
-                    gotRotationRate(values[0], values[1], values[2]);
-                }
-                break;
-            case Sensor.TYPE_ROTATION_VECTOR:
-                if (mDeviceOrientationIsActive) {
-                    if (values.length > 4) {
-                        // On some Samsung devices SensorManager.getRotationMatrixFromVector
-                        // appears to throw an exception if rotation vector has length > 4.
-                        // For the purposes of this class the first 4 values of the
-                        // rotation vector are sufficient (see crbug.com/335298 for details).
-                        if (mTruncatedRotationVector == null) {
-                            mTruncatedRotationVector = new float[4];
-                        }
-                        System.arraycopy(values, 0, mTruncatedRotationVector, 0, 4);
-                        getOrientationFromRotationVector(mTruncatedRotationVector);
-                    } else {
-                        getOrientationFromRotationVector(values);
-                    }
-                }
-                break;
-            default:
-                // Unexpected
-                return;
-        }
-    }
-
-    /**
-     * Returns orientation angles from a rotation matrix, such that the angles are according
-     * to spec {@link http://dev.w3.org/geo/api/spec-source-orientation.html}.
-     * <p>
-     * It is assumed the rotation matrix transforms a 3D column vector from device coordinate system
-     * to the world's coordinate system, as e.g. computed by {@see SensorManager.getRotationMatrix}.
-     * <p>
-     * In particular we compute the decomposition of a given rotation matrix R such that <br>
-     * R = Rz(alpha) * Rx(beta) * Ry(gamma), <br>
-     * where Rz, Rx and Ry are rotation matrices around Z, X and Y axes in the world coordinate
-     * reference frame respectively. The reference frame consists of three orthogonal axes X, Y, Z
-     * where X points East, Y points north and Z points upwards perpendicular to the ground plane.
-     * The computed angles alpha, beta and gamma are in radians and clockwise-positive when viewed
-     * along the positive direction of the corresponding axis. Except for the special case when the
-     * beta angle is +-pi/2 these angles uniquely define the orientation of a mobile device in 3D
-     * space. The alpha-beta-gamma representation resembles the yaw-pitch-roll convention used in
-     * vehicle dynamics, however it does not exactly match it. One of the differences is that the
-     * 'pitch' angle beta is allowed to be within [-pi, pi). A mobile device with pitch angle
-     * greater than pi/2 could correspond to a user lying down and looking upward at the screen.
-     *
-     * <p>
-     * Upon return the array values is filled with the result,
-     * <ul>
-     * <li>values[0]: rotation around the Z axis, alpha in [0, 2*pi)</li>
-     * <li>values[1]: rotation around the X axis, beta in [-pi, pi)</li>
-     * <li>values[2]: rotation around the Y axis, gamma in [-pi/2, pi/2)</li>
-     * </ul>
-     * <p>
-     *
-     * @param R
-     *        a 3x3 rotation matrix {@see SensorManager.getRotationMatrix}.
-     *
-     * @param values
-     *        an array of 3 doubles to hold the result.
-     *
-     * @return the array values passed as argument.
-     */
-    @VisibleForTesting
-    public static double[] computeDeviceOrientationFromRotationMatrix(float[] R, double[] values) {
-        /*
-         * 3x3 (length=9) case:
-         *   /  R[ 0]   R[ 1]   R[ 2]  \
-         *   |  R[ 3]   R[ 4]   R[ 5]  |
-         *   \  R[ 6]   R[ 7]   R[ 8]  /
-         *
-         */
-        if (R.length != 9)
-            return values;
-
-        if (R[8] > 0) {  // cos(beta) > 0
-            values[0] = Math.atan2(-R[1], R[4]);
-            values[1] = Math.asin(R[7]);           // beta (-pi/2, pi/2)
-            values[2] = Math.atan2(-R[6], R[8]);   // gamma (-pi/2, pi/2)
-        } else if (R[8] < 0) {  // cos(beta) < 0
-            values[0] = Math.atan2(R[1], -R[4]);
-            values[1] = -Math.asin(R[7]);
-            values[1] += (values[1] >= 0) ? -Math.PI : Math.PI; // beta [-pi,-pi/2) U (pi/2,pi)
-            values[2] = Math.atan2(R[6], -R[8]);   // gamma (-pi/2, pi/2)
-        } else { // R[8] == 0
-            if (R[6] > 0) {  // cos(gamma) == 0, cos(beta) > 0
-                values[0] = Math.atan2(-R[1], R[4]);
-                values[1] = Math.asin(R[7]);       // beta [-pi/2, pi/2]
-                values[2] = -Math.PI / 2;          // gamma = -pi/2
-            } else if (R[6] < 0) { // cos(gamma) == 0, cos(beta) < 0
-                values[0] = Math.atan2(R[1], -R[4]);
-                values[1] = -Math.asin(R[7]);
-                values[1] += (values[1] >= 0) ? -Math.PI : Math.PI; // beta [-pi,-pi/2) U (pi/2,pi)
-                values[2] = -Math.PI / 2;          // gamma = -pi/2
-            } else { // R[6] == 0, cos(beta) == 0
-                // gimbal lock discontinuity
-                values[0] = Math.atan2(R[3], R[0]);
-                values[1] = (R[7] > 0) ? Math.PI / 2 : -Math.PI / 2;  // beta = +-pi/2
-                values[2] = 0;                                        // gamma = 0
-            }
-        }
-
-        // alpha is in [-pi, pi], make sure it is in [0, 2*pi).
-        if (values[0] < 0)
-            values[0] += 2 * Math.PI; // alpha [0, 2*pi)
-
-        return values;
-    }
-
-    private void getOrientationFromRotationVector(float[] rotationVector) {
-        float[] deviceRotationMatrix = new float[9];
-        SensorManager.getRotationMatrixFromVector(deviceRotationMatrix, rotationVector);
-
-        double[] rotationAngles = new double[3];
-        computeDeviceOrientationFromRotationMatrix(deviceRotationMatrix, rotationAngles);
-
-        gotOrientation(Math.toDegrees(rotationAngles[0]),
-                       Math.toDegrees(rotationAngles[1]),
-                       Math.toDegrees(rotationAngles[2]));
-    }
-
-    private SensorManagerProxy getSensorManagerProxy() {
-        if (mSensorManagerProxy != null) {
-            return mSensorManagerProxy;
-        }
-
-        SensorManager sensorManager = ThreadUtils.runOnUiThreadBlockingNoException(
-                new Callable<SensorManager>() {
-            @Override
-            public SensorManager call() {
-                return (SensorManager) mAppContext.getSystemService(Context.SENSOR_SERVICE);
-            }
-        });
-
-        if (sensorManager != null) {
-            mSensorManagerProxy = new SensorManagerProxyImpl(sensorManager);
-        }
-        return mSensorManagerProxy;
-    }
-
-    @VisibleForTesting
-    void setSensorManagerProxy(SensorManagerProxy sensorManagerProxy) {
-        mSensorManagerProxy = sensorManagerProxy;
-    }
-
-    private void setEventTypeActive(int eventType, boolean value) {
-        switch (eventType) {
-            case DEVICE_ORIENTATION:
-                mDeviceOrientationIsActive = value;
-                return;
-            case DEVICE_MOTION:
-                mDeviceMotionIsActive = value;
-                return;
-        }
-    }
-
-    /**
-     * @param sensorTypes List of sensors to activate.
-     * @param rateInMilliseconds Intended delay (in milliseconds) between sensor readings.
-     * @param failOnMissingSensor If true the method returns true only if all sensors could be
-     *                            activated. When false the method return true if at least one
-     *                            sensor in sensorTypes could be activated.
-     */
-    private boolean registerSensors(Set<Integer> sensorTypes, int rateInMilliseconds,
-            boolean failOnMissingSensor) {
-        Set<Integer> sensorsToActivate = new HashSet<Integer>(sensorTypes);
-        sensorsToActivate.removeAll(mActiveSensors);
-        boolean success = false;
-
-        for (Integer sensorType : sensorsToActivate) {
-            boolean result = registerForSensorType(sensorType, rateInMilliseconds);
-            if (!result && failOnMissingSensor) {
-                // restore the previous state upon failure
-                unregisterSensors(sensorsToActivate);
-                return false;
-            }
-            if (result) {
-                mActiveSensors.add(sensorType);
-                success = true;
-            }
-        }
-        return success;
-    }
-
-    private void unregisterSensors(Iterable<Integer> sensorTypes) {
-        for (Integer sensorType : sensorTypes) {
-            if (mActiveSensors.contains(sensorType)) {
-                getSensorManagerProxy().unregisterListener(this, sensorType);
-                mActiveSensors.remove(sensorType);
-            }
-        }
-    }
-
-    private boolean registerForSensorType(int type, int rateInMilliseconds) {
-        SensorManagerProxy sensorManager = getSensorManagerProxy();
-        if (sensorManager == null) {
-            return false;
-        }
-        final int rateInMicroseconds = 1000 * rateInMilliseconds;
-        return sensorManager.registerListener(this, type, rateInMicroseconds, getHandler());
-    }
-
-    protected void gotOrientation(double alpha, double beta, double gamma) {
-        synchronized (mNativePtrLock) {
-            if (mNativePtr != 0) {
-                nativeGotOrientation(mNativePtr, alpha, beta, gamma);
-            }
-        }
-    }
-
-    protected void gotAcceleration(double x, double y, double z) {
-        synchronized (mNativePtrLock) {
-            if (mNativePtr != 0) {
-                nativeGotAcceleration(mNativePtr, x, y, z);
-            }
-        }
-    }
-
-    protected void gotAccelerationIncludingGravity(double x, double y, double z) {
-        synchronized (mNativePtrLock) {
-            if (mNativePtr != 0) {
-                nativeGotAccelerationIncludingGravity(mNativePtr, x, y, z);
-            }
-        }
-    }
-
-    protected void gotRotationRate(double alpha, double beta, double gamma) {
-        synchronized (mNativePtrLock) {
-            if (mNativePtr != 0) {
-                nativeGotRotationRate(mNativePtr, alpha, beta, gamma);
-            }
-        }
-    }
-
-    private Handler getHandler() {
-        // TODO(timvolodine): Remove the mHandlerLock when sure that getHandler is not called
-        // from multiple threads. This will be the case when device motion and device orientation
-        // use the same polling thread (also see crbug/234282).
-        synchronized (mHandlerLock) {
-            if (mHandler == null) {
-                HandlerThread thread = new HandlerThread("DeviceMotionAndOrientation");
-                thread.start();
-                mHandler = new Handler(thread.getLooper());  // blocks on thread start
-            }
-            return mHandler;
-        }
-    }
-
-    @CalledByNative
-    static DeviceMotionAndOrientation getInstance(Context appContext) {
-        synchronized (sSingletonLock) {
-            if (sSingleton == null) {
-                sSingleton = new DeviceMotionAndOrientation(appContext);
-            }
-            return sSingleton;
-        }
-    }
-
-    /**
-     * Native JNI calls,
-     * see content/browser/device_orientation/sensor_manager_android.cc
-     */
-
-    /**
-     * Orientation of the device with respect to its reference frame.
-     */
-    private native void nativeGotOrientation(
-            long nativeSensorManagerAndroid,
-            double alpha, double beta, double gamma);
-
-    /**
-     * Linear acceleration without gravity of the device with respect to its body frame.
-     */
-    private native void nativeGotAcceleration(
-            long nativeSensorManagerAndroid,
-            double x, double y, double z);
-
-    /**
-     * Acceleration including gravity of the device with respect to its body frame.
-     */
-    private native void nativeGotAccelerationIncludingGravity(
-            long nativeSensorManagerAndroid,
-            double x, double y, double z);
-
-    /**
-     * Rotation rate of the device with respect to its body frame.
-     */
-    private native void nativeGotRotationRate(
-            long nativeSensorManagerAndroid,
-            double alpha, double beta, double gamma);
-
-    /**
-     * Need the an interface for SensorManager for testing.
-     */
-    interface SensorManagerProxy {
-        public boolean registerListener(SensorEventListener listener, int sensorType, int rate,
-                Handler handler);
-        public void unregisterListener(SensorEventListener listener, int sensorType);
-    }
-
-    static class SensorManagerProxyImpl implements SensorManagerProxy {
-        private final SensorManager mSensorManager;
-
-        SensorManagerProxyImpl(SensorManager sensorManager) {
-            mSensorManager = sensorManager;
-        }
-
-        @Override
-        public boolean registerListener(SensorEventListener listener, int sensorType, int rate,
-                Handler handler) {
-            List<Sensor> sensors = mSensorManager.getSensorList(sensorType);
-            if (sensors.isEmpty()) {
-                return false;
-            }
-            return mSensorManager.registerListener(listener, sensors.get(0), rate, handler);
-        }
-
-        @Override
-        public void unregisterListener(SensorEventListener listener, int sensorType) {
-            List<Sensor> sensors = mSensorManager.getSensorList(sensorType);
-            if (!sensors.isEmpty()) {
-                mSensorManager.unregisterListener(listener, sensors.get(0));
-            }
-        }
-    }
-
-}
diff --git a/content/public/android/java/src/org/chromium/content/browser/DeviceSensors.java b/content/public/android/java/src/org/chromium/content/browser/DeviceSensors.java
new file mode 100644
index 0000000..bdb7741
--- /dev/null
+++ b/content/public/android/java/src/org/chromium/content/browser/DeviceSensors.java
@@ -0,0 +1,520 @@
+// 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.
+
+package org.chromium.content.browser;
+
+import android.content.Context;
+import android.hardware.Sensor;
+import android.hardware.SensorEvent;
+import android.hardware.SensorEventListener;
+import android.hardware.SensorManager;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.util.Log;
+
+import com.google.common.annotations.VisibleForTesting;
+
+import org.chromium.base.CalledByNative;
+import org.chromium.base.CollectionUtil;
+import org.chromium.base.JNINamespace;
+import org.chromium.base.ThreadUtils;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.Callable;
+
+/**
+ * Android implementation of the device motion and orientation APIs.
+ */
+@JNINamespace("content")
+class DeviceSensors implements SensorEventListener {
+
+    private static final String TAG = "DeviceMotionAndOrientation";
+
+    // These fields are lazily initialized by getHandler().
+    private Thread mThread;
+    private Handler mHandler;
+
+    // A reference to the application context in order to acquire the SensorService.
+    private final Context mAppContext;
+
+    // The lock to access the mHandler.
+    private final Object mHandlerLock = new Object();
+
+    // Non-zero if and only if we're listening for events.
+    // To avoid race conditions on the C++ side, access must be synchronized.
+    private long mNativePtr;
+
+    // The lock to access the mNativePtr.
+    private final Object mNativePtrLock = new Object();
+
+    // Holds a shortened version of the rotation vector for compatibility purposes.
+    private float[] mTruncatedRotationVector;
+
+    // Lazily initialized when registering for notifications.
+    private SensorManagerProxy mSensorManagerProxy;
+
+    // The only instance of that class and its associated lock.
+    private static DeviceSensors sSingleton;
+    private static Object sSingletonLock = new Object();
+
+    /**
+     * constants for using in JNI calls, also see
+     * content/browser/device_sensors/sensor_manager_android.cc
+     */
+    static final int DEVICE_ORIENTATION = 0;
+    static final int DEVICE_MOTION = 1;
+
+    static final Set<Integer> DEVICE_ORIENTATION_SENSORS = CollectionUtil.newHashSet(
+            Sensor.TYPE_ROTATION_VECTOR);
+
+    static final Set<Integer> DEVICE_MOTION_SENSORS = CollectionUtil.newHashSet(
+            Sensor.TYPE_ACCELEROMETER,
+            Sensor.TYPE_LINEAR_ACCELERATION,
+            Sensor.TYPE_GYROSCOPE);
+
+    @VisibleForTesting
+    final Set<Integer> mActiveSensors = new HashSet<Integer>();
+    boolean mDeviceMotionIsActive = false;
+    boolean mDeviceOrientationIsActive = false;
+
+    protected DeviceSensors(Context context) {
+        mAppContext = context.getApplicationContext();
+    }
+
+    /**
+     * Start listening for sensor events. If this object is already listening
+     * for events, the old callback is unregistered first.
+     *
+     * @param nativePtr Value to pass to nativeGotOrientation() for each event.
+     * @param rateInMilliseconds Requested callback rate in milliseconds. The
+     *            actual rate may be higher. Unwanted events should be ignored.
+     * @param eventType Type of event to listen to, can be either DEVICE_ORIENTATION or
+     *                  DEVICE_MOTION.
+     * @return True on success.
+     */
+    @CalledByNative
+    public boolean start(long nativePtr, int eventType, int rateInMilliseconds) {
+        boolean success = false;
+        synchronized (mNativePtrLock) {
+            switch (eventType) {
+                case DEVICE_ORIENTATION:
+                    success = registerSensors(DEVICE_ORIENTATION_SENSORS, rateInMilliseconds,
+                            true);
+                    break;
+                case DEVICE_MOTION:
+                    // note: device motion spec does not require all sensors to be available
+                    success = registerSensors(DEVICE_MOTION_SENSORS, rateInMilliseconds, false);
+                    break;
+                default:
+                    Log.e(TAG, "Unknown event type: " + eventType);
+                    return false;
+            }
+            if (success) {
+                mNativePtr = nativePtr;
+                setEventTypeActive(eventType, true);
+            }
+            return success;
+        }
+    }
+
+    @CalledByNative
+    public int getNumberActiveDeviceMotionSensors() {
+        Set<Integer> deviceMotionSensors = new HashSet<Integer>(DEVICE_MOTION_SENSORS);
+        deviceMotionSensors.removeAll(mActiveSensors);
+        return DEVICE_MOTION_SENSORS.size() - deviceMotionSensors.size();
+    }
+
+    /**
+     * Stop listening to sensors for a given event type. Ensures that sensors are not disabled
+     * if they are still in use by a different event type.
+     *
+     * @param eventType Type of event to listen to, can be either DEVICE_ORIENTATION or
+     *                  DEVICE_MOTION.
+     * We strictly guarantee that the corresponding native*() methods will not be called
+     * after this method returns.
+     */
+    @CalledByNative
+    public void stop(int eventType) {
+        Set<Integer> sensorsToRemainActive = new HashSet<Integer>();
+        synchronized (mNativePtrLock) {
+            switch (eventType) {
+                case DEVICE_ORIENTATION:
+                    if (mDeviceMotionIsActive) {
+                        sensorsToRemainActive.addAll(DEVICE_MOTION_SENSORS);
+                    }
+                    break;
+                case DEVICE_MOTION:
+                    if (mDeviceOrientationIsActive) {
+                        sensorsToRemainActive.addAll(DEVICE_ORIENTATION_SENSORS);
+                    }
+                    break;
+                default:
+                    Log.e(TAG, "Unknown event type: " + eventType);
+                    return;
+            }
+
+            Set<Integer> sensorsToDeactivate = new HashSet<Integer>(mActiveSensors);
+            sensorsToDeactivate.removeAll(sensorsToRemainActive);
+            unregisterSensors(sensorsToDeactivate);
+            setEventTypeActive(eventType, false);
+            if (mActiveSensors.isEmpty()) {
+                mNativePtr = 0;
+            }
+        }
+    }
+
+    @Override
+    public void onAccuracyChanged(Sensor sensor, int accuracy) {
+        // Nothing
+    }
+
+    @Override
+    public void onSensorChanged(SensorEvent event) {
+        sensorChanged(event.sensor.getType(), event.values);
+    }
+
+    @VisibleForTesting
+    void sensorChanged(int type, float[] values) {
+        switch (type) {
+            case Sensor.TYPE_ACCELEROMETER:
+                if (mDeviceMotionIsActive) {
+                    gotAccelerationIncludingGravity(values[0], values[1], values[2]);
+                }
+                break;
+            case Sensor.TYPE_LINEAR_ACCELERATION:
+                if (mDeviceMotionIsActive) {
+                    gotAcceleration(values[0], values[1], values[2]);
+                }
+                break;
+            case Sensor.TYPE_GYROSCOPE:
+                if (mDeviceMotionIsActive) {
+                    gotRotationRate(values[0], values[1], values[2]);
+                }
+                break;
+            case Sensor.TYPE_ROTATION_VECTOR:
+                if (mDeviceOrientationIsActive) {
+                    if (values.length > 4) {
+                        // On some Samsung devices SensorManager.getRotationMatrixFromVector
+                        // appears to throw an exception if rotation vector has length > 4.
+                        // For the purposes of this class the first 4 values of the
+                        // rotation vector are sufficient (see crbug.com/335298 for details).
+                        if (mTruncatedRotationVector == null) {
+                            mTruncatedRotationVector = new float[4];
+                        }
+                        System.arraycopy(values, 0, mTruncatedRotationVector, 0, 4);
+                        getOrientationFromRotationVector(mTruncatedRotationVector);
+                    } else {
+                        getOrientationFromRotationVector(values);
+                    }
+                }
+                break;
+            default:
+                // Unexpected
+                return;
+        }
+    }
+
+    /**
+     * Returns orientation angles from a rotation matrix, such that the angles are according
+     * to spec {@link http://dev.w3.org/geo/api/spec-source-orientation.html}.
+     * <p>
+     * It is assumed the rotation matrix transforms a 3D column vector from device coordinate system
+     * to the world's coordinate system, as e.g. computed by {@see SensorManager.getRotationMatrix}.
+     * <p>
+     * In particular we compute the decomposition of a given rotation matrix R such that <br>
+     * R = Rz(alpha) * Rx(beta) * Ry(gamma), <br>
+     * where Rz, Rx and Ry are rotation matrices around Z, X and Y axes in the world coordinate
+     * reference frame respectively. The reference frame consists of three orthogonal axes X, Y, Z
+     * where X points East, Y points north and Z points upwards perpendicular to the ground plane.
+     * The computed angles alpha, beta and gamma are in radians and clockwise-positive when viewed
+     * along the positive direction of the corresponding axis. Except for the special case when the
+     * beta angle is +-pi/2 these angles uniquely define the orientation of a mobile device in 3D
+     * space. The alpha-beta-gamma representation resembles the yaw-pitch-roll convention used in
+     * vehicle dynamics, however it does not exactly match it. One of the differences is that the
+     * 'pitch' angle beta is allowed to be within [-pi, pi). A mobile device with pitch angle
+     * greater than pi/2 could correspond to a user lying down and looking upward at the screen.
+     *
+     * <p>
+     * Upon return the array values is filled with the result,
+     * <ul>
+     * <li>values[0]: rotation around the Z axis, alpha in [0, 2*pi)</li>
+     * <li>values[1]: rotation around the X axis, beta in [-pi, pi)</li>
+     * <li>values[2]: rotation around the Y axis, gamma in [-pi/2, pi/2)</li>
+     * </ul>
+     * <p>
+     *
+     * @param R
+     *        a 3x3 rotation matrix {@see SensorManager.getRotationMatrix}.
+     *
+     * @param values
+     *        an array of 3 doubles to hold the result.
+     *
+     * @return the array values passed as argument.
+     */
+    @VisibleForTesting
+    public static double[] computeDeviceOrientationFromRotationMatrix(float[] R, double[] values) {
+        /*
+         * 3x3 (length=9) case:
+         *   /  R[ 0]   R[ 1]   R[ 2]  \
+         *   |  R[ 3]   R[ 4]   R[ 5]  |
+         *   \  R[ 6]   R[ 7]   R[ 8]  /
+         *
+         */
+        if (R.length != 9)
+            return values;
+
+        if (R[8] > 0) {  // cos(beta) > 0
+            values[0] = Math.atan2(-R[1], R[4]);
+            values[1] = Math.asin(R[7]);           // beta (-pi/2, pi/2)
+            values[2] = Math.atan2(-R[6], R[8]);   // gamma (-pi/2, pi/2)
+        } else if (R[8] < 0) {  // cos(beta) < 0
+            values[0] = Math.atan2(R[1], -R[4]);
+            values[1] = -Math.asin(R[7]);
+            values[1] += (values[1] >= 0) ? -Math.PI : Math.PI; // beta [-pi,-pi/2) U (pi/2,pi)
+            values[2] = Math.atan2(R[6], -R[8]);   // gamma (-pi/2, pi/2)
+        } else { // R[8] == 0
+            if (R[6] > 0) {  // cos(gamma) == 0, cos(beta) > 0
+                values[0] = Math.atan2(-R[1], R[4]);
+                values[1] = Math.asin(R[7]);       // beta [-pi/2, pi/2]
+                values[2] = -Math.PI / 2;          // gamma = -pi/2
+            } else if (R[6] < 0) { // cos(gamma) == 0, cos(beta) < 0
+                values[0] = Math.atan2(R[1], -R[4]);
+                values[1] = -Math.asin(R[7]);
+                values[1] += (values[1] >= 0) ? -Math.PI : Math.PI; // beta [-pi,-pi/2) U (pi/2,pi)
+                values[2] = -Math.PI / 2;          // gamma = -pi/2
+            } else { // R[6] == 0, cos(beta) == 0
+                // gimbal lock discontinuity
+                values[0] = Math.atan2(R[3], R[0]);
+                values[1] = (R[7] > 0) ? Math.PI / 2 : -Math.PI / 2;  // beta = +-pi/2
+                values[2] = 0;                                        // gamma = 0
+            }
+        }
+
+        // alpha is in [-pi, pi], make sure it is in [0, 2*pi).
+        if (values[0] < 0)
+            values[0] += 2 * Math.PI; // alpha [0, 2*pi)
+
+        return values;
+    }
+
+    private void getOrientationFromRotationVector(float[] rotationVector) {
+        float[] deviceRotationMatrix = new float[9];
+        SensorManager.getRotationMatrixFromVector(deviceRotationMatrix, rotationVector);
+
+        double[] rotationAngles = new double[3];
+        computeDeviceOrientationFromRotationMatrix(deviceRotationMatrix, rotationAngles);
+
+        gotOrientation(Math.toDegrees(rotationAngles[0]),
+                       Math.toDegrees(rotationAngles[1]),
+                       Math.toDegrees(rotationAngles[2]));
+    }
+
+    private SensorManagerProxy getSensorManagerProxy() {
+        if (mSensorManagerProxy != null) {
+            return mSensorManagerProxy;
+        }
+
+        SensorManager sensorManager = ThreadUtils.runOnUiThreadBlockingNoException(
+                new Callable<SensorManager>() {
+            @Override
+            public SensorManager call() {
+                return (SensorManager) mAppContext.getSystemService(Context.SENSOR_SERVICE);
+            }
+        });
+
+        if (sensorManager != null) {
+            mSensorManagerProxy = new SensorManagerProxyImpl(sensorManager);
+        }
+        return mSensorManagerProxy;
+    }
+
+    @VisibleForTesting
+    void setSensorManagerProxy(SensorManagerProxy sensorManagerProxy) {
+        mSensorManagerProxy = sensorManagerProxy;
+    }
+
+    private void setEventTypeActive(int eventType, boolean value) {
+        switch (eventType) {
+            case DEVICE_ORIENTATION:
+                mDeviceOrientationIsActive = value;
+                return;
+            case DEVICE_MOTION:
+                mDeviceMotionIsActive = value;
+                return;
+        }
+    }
+
+    /**
+     * @param sensorTypes List of sensors to activate.
+     * @param rateInMilliseconds Intended delay (in milliseconds) between sensor readings.
+     * @param failOnMissingSensor If true the method returns true only if all sensors could be
+     *                            activated. When false the method return true if at least one
+     *                            sensor in sensorTypes could be activated.
+     */
+    private boolean registerSensors(Set<Integer> sensorTypes, int rateInMilliseconds,
+            boolean failOnMissingSensor) {
+        Set<Integer> sensorsToActivate = new HashSet<Integer>(sensorTypes);
+        sensorsToActivate.removeAll(mActiveSensors);
+        boolean success = false;
+
+        for (Integer sensorType : sensorsToActivate) {
+            boolean result = registerForSensorType(sensorType, rateInMilliseconds);
+            if (!result && failOnMissingSensor) {
+                // restore the previous state upon failure
+                unregisterSensors(sensorsToActivate);
+                return false;
+            }
+            if (result) {
+                mActiveSensors.add(sensorType);
+                success = true;
+            }
+        }
+        return success;
+    }
+
+    private void unregisterSensors(Iterable<Integer> sensorTypes) {
+        for (Integer sensorType : sensorTypes) {
+            if (mActiveSensors.contains(sensorType)) {
+                getSensorManagerProxy().unregisterListener(this, sensorType);
+                mActiveSensors.remove(sensorType);
+            }
+        }
+    }
+
+    private boolean registerForSensorType(int type, int rateInMilliseconds) {
+        SensorManagerProxy sensorManager = getSensorManagerProxy();
+        if (sensorManager == null) {
+            return false;
+        }
+        final int rateInMicroseconds = 1000 * rateInMilliseconds;
+        return sensorManager.registerListener(this, type, rateInMicroseconds, getHandler());
+    }
+
+    protected void gotOrientation(double alpha, double beta, double gamma) {
+        synchronized (mNativePtrLock) {
+            if (mNativePtr != 0) {
+                nativeGotOrientation(mNativePtr, alpha, beta, gamma);
+            }
+        }
+    }
+
+    protected void gotAcceleration(double x, double y, double z) {
+        synchronized (mNativePtrLock) {
+            if (mNativePtr != 0) {
+                nativeGotAcceleration(mNativePtr, x, y, z);
+            }
+        }
+    }
+
+    protected void gotAccelerationIncludingGravity(double x, double y, double z) {
+        synchronized (mNativePtrLock) {
+            if (mNativePtr != 0) {
+                nativeGotAccelerationIncludingGravity(mNativePtr, x, y, z);
+            }
+        }
+    }
+
+    protected void gotRotationRate(double alpha, double beta, double gamma) {
+        synchronized (mNativePtrLock) {
+            if (mNativePtr != 0) {
+                nativeGotRotationRate(mNativePtr, alpha, beta, gamma);
+            }
+        }
+    }
+
+    private Handler getHandler() {
+        // TODO(timvolodine): Remove the mHandlerLock when sure that getHandler is not called
+        // from multiple threads. This will be the case when device motion and device orientation
+        // use the same polling thread (also see crbug/234282).
+        synchronized (mHandlerLock) {
+            if (mHandler == null) {
+                HandlerThread thread = new HandlerThread("DeviceMotionAndOrientation");
+                thread.start();
+                mHandler = new Handler(thread.getLooper());  // blocks on thread start
+            }
+            return mHandler;
+        }
+    }
+
+    @CalledByNative
+    static DeviceSensors getInstance(Context appContext) {
+        synchronized (sSingletonLock) {
+            if (sSingleton == null) {
+                sSingleton = new DeviceSensors(appContext);
+            }
+            return sSingleton;
+        }
+    }
+
+    /**
+     * Native JNI calls,
+     * see content/browser/device_sensors/sensor_manager_android.cc
+     */
+
+    /**
+     * Orientation of the device with respect to its reference frame.
+     */
+    private native void nativeGotOrientation(
+            long nativeSensorManagerAndroid,
+            double alpha, double beta, double gamma);
+
+    /**
+     * Linear acceleration without gravity of the device with respect to its body frame.
+     */
+    private native void nativeGotAcceleration(
+            long nativeSensorManagerAndroid,
+            double x, double y, double z);
+
+    /**
+     * Acceleration including gravity of the device with respect to its body frame.
+     */
+    private native void nativeGotAccelerationIncludingGravity(
+            long nativeSensorManagerAndroid,
+            double x, double y, double z);
+
+    /**
+     * Rotation rate of the device with respect to its body frame.
+     */
+    private native void nativeGotRotationRate(
+            long nativeSensorManagerAndroid,
+            double alpha, double beta, double gamma);
+
+    /**
+     * Need the an interface for SensorManager for testing.
+     */
+    interface SensorManagerProxy {
+        public boolean registerListener(SensorEventListener listener, int sensorType, int rate,
+                Handler handler);
+        public void unregisterListener(SensorEventListener listener, int sensorType);
+    }
+
+    static class SensorManagerProxyImpl implements SensorManagerProxy {
+        private final SensorManager mSensorManager;
+
+        SensorManagerProxyImpl(SensorManager sensorManager) {
+            mSensorManager = sensorManager;
+        }
+
+        @Override
+        public boolean registerListener(SensorEventListener listener, int sensorType, int rate,
+                Handler handler) {
+            List<Sensor> sensors = mSensorManager.getSensorList(sensorType);
+            if (sensors.isEmpty()) {
+                return false;
+            }
+            return mSensorManager.registerListener(listener, sensors.get(0), rate, handler);
+        }
+
+        @Override
+        public void unregisterListener(SensorEventListener listener, int sensorType) {
+            List<Sensor> sensors = mSensorManager.getSensorList(sensorType);
+            if (!sensors.isEmpty()) {
+                mSensorManager.unregisterListener(listener, sensors.get(0));
+            }
+        }
+    }
+
+}
diff --git a/content/public/android/java/src/org/chromium/content/browser/NavigationHistory.java b/content/public/android/java/src/org/chromium/content/browser/NavigationHistory.java
index 43f2074..6e4347b 100644
--- a/content/public/android/java/src/org/chromium/content/browser/NavigationHistory.java
+++ b/content/public/android/java/src/org/chromium/content/browser/NavigationHistory.java
@@ -8,12 +8,12 @@
 
 /**
  * {@link NavigationHistory} captures a snapshot of the navigation history of a
- * {@link ContentView}. It is a copy and will not be updated as navigation
- * occurs on the source {@link ContentView}.
+ * {@link ContentViewCore}. It is a copy and will not be updated as navigation
+ * occurs on the source {@link ContentViewCore}.
  */
 public class NavigationHistory {
 
-    private ArrayList<NavigationEntry> mEntries = new ArrayList<NavigationEntry>();
+    private final ArrayList<NavigationEntry> mEntries = new ArrayList<NavigationEntry>();
     private int mCurrentEntryIndex;
 
     protected void addEntry(NavigationEntry entry) {
@@ -39,7 +39,7 @@
     }
 
     /**
-     * Returns the index of the entry the {@link ContentView} was navigated to
+     * Returns the index of the entry the {@link ContentViewCore} was navigated to
      * when the history was fetched.
      */
     public int getCurrentEntryIndex() {
diff --git a/content/public/android/java/src/org/chromium/content/browser/OWNERS b/content/public/android/java/src/org/chromium/content/browser/OWNERS
index a6e34fb..830b57d 100644
--- a/content/public/android/java/src/org/chromium/content/browser/OWNERS
+++ b/content/public/android/java/src/org/chromium/content/browser/OWNERS
@@ -9,5 +9,8 @@
 # Screen Orientation API related
 per-file ScreenOrientation*.java=mlamouri@chromium.org
 
+# Battery Status API related
+per-file BatteryStatusManager.java=timvolodine@chromium.org
+
 # Input handling related
 jdduke@chromium.org
diff --git a/content/public/android/java/src/org/chromium/content/browser/RenderCoordinates.java b/content/public/android/java/src/org/chromium/content/browser/RenderCoordinates.java
index ecce49e..049f70f 100644
--- a/content/public/android/java/src/org/chromium/content/browser/RenderCoordinates.java
+++ b/content/public/android/java/src/org/chromium/content/browser/RenderCoordinates.java
@@ -14,12 +14,6 @@
  */
 public class RenderCoordinates {
 
-    // Used to accomodate finite precision when comparing scaled viewport and
-    // content widths in {@link #hasMobileViewport()}.  While this value may
-    // seem large, width=device-width on an N7 V1 saw errors of ~0.065 between
-    // computed window and content widths.
-    private static final float MOBILE_VIEWPORT_WIDTH_EPSILON = 0.15f;
-
     // Scroll offset from the native in CSS.
     private float mScrollXCss;
     private float mScrollYCss;
@@ -273,19 +267,6 @@
     public float getDeviceScaleFactor() { return mDeviceScaleFactor; }
 
     /**
-     * @return True if the page doesn't allow zoom-in/zoom-out.
-     */
-    public boolean hasFixedPageScale() { return mMinPageScaleFactor == mMaxPageScaleFactor; }
-
-    /**
-     * @return True if the page has a width=device-width or narrower viewport.
-     */
-    public boolean hasMobileViewport() {
-        final float windowWidthDip = mPageScaleFactor * mLastFrameViewportWidthCss;
-        return mContentWidthCss <= (windowWidthDip + MOBILE_VIEWPORT_WIDTH_EPSILON);
-    }
-
-    /**
      * @return Maximum possible horizontal scroll in physical pixels.
      */
     public float getMaxHorizontalScrollPix() {
diff --git a/content/public/android/java/src/org/chromium/content/browser/ScreenOrientationProvider.java b/content/public/android/java/src/org/chromium/content/browser/ScreenOrientationProvider.java
index 89913ed..47e79e6 100644
--- a/content/public/android/java/src/org/chromium/content/browser/ScreenOrientationProvider.java
+++ b/content/public/android/java/src/org/chromium/content/browser/ScreenOrientationProvider.java
@@ -24,6 +24,8 @@
 
     private int getOrientationFromWebScreenOrientations(byte orientations) {
         switch (orientations) {
+            case ScreenOrientationValues.DEFAULT:
+                return ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
             case ScreenOrientationValues.PORTRAIT_PRIMARY:
                 return ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
             case ScreenOrientationValues.PORTRAIT_SECONDARY:
@@ -32,16 +34,11 @@
                 return ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
             case ScreenOrientationValues.LANDSCAPE_SECONDARY:
                 return ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE;
-            case ScreenOrientationValues.PORTRAIT_PRIMARY |
-                    ScreenOrientationValues.PORTRAIT_SECONDARY:
+            case ScreenOrientationValues.PORTRAIT:
                 return ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT;
-            case ScreenOrientationValues.LANDSCAPE_PRIMARY |
-                    ScreenOrientationValues.LANDSCAPE_SECONDARY:
+            case ScreenOrientationValues.LANDSCAPE:
                 return ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE;
-            case ScreenOrientationValues.PORTRAIT_PRIMARY |
-                    ScreenOrientationValues.PORTRAIT_SECONDARY |
-                    ScreenOrientationValues.LANDSCAPE_PRIMARY |
-                    ScreenOrientationValues.LANDSCAPE_SECONDARY:
+            case ScreenOrientationValues.ANY:
                 return ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR;
             default:
                 Log.w(TAG, "Trying to lock to unsupported orientation!");
diff --git a/content/public/android/java/src/org/chromium/content/browser/TracingControllerAndroid.java b/content/public/android/java/src/org/chromium/content/browser/TracingControllerAndroid.java
index dbd8aa8..f26b274 100644
--- a/content/public/android/java/src/org/chromium/content/browser/TracingControllerAndroid.java
+++ b/content/public/android/java/src/org/chromium/content/browser/TracingControllerAndroid.java
@@ -15,7 +15,6 @@
 
 import org.chromium.base.CalledByNative;
 import org.chromium.base.JNINamespace;
-import org.chromium.base.TraceEvent;
 import org.chromium.content.R;
 
 import java.io.File;
@@ -188,7 +187,6 @@
         }
 
         logAndToastInfo(mContext.getString(R.string.profiler_started_toast) + ": " + categories);
-        TraceEvent.setEnabledToMatchNative();
         mFilename = filename;
         mIsTracing = true;
         return true;
@@ -216,7 +214,6 @@
 
         logAndToastInfo(
                 mContext.getString(R.string.profiler_stopped_toast, mFilename));
-        TraceEvent.setEnabledToMatchNative();
         mIsTracing = false;
         mFilename = null;
     }
diff --git a/content/public/android/java/src/org/chromium/content/browser/WebContentsObserverAndroid.java b/content/public/android/java/src/org/chromium/content/browser/WebContentsObserverAndroid.java
index ef4fe71..e406907 100644
--- a/content/public/android/java/src/org/chromium/content/browser/WebContentsObserverAndroid.java
+++ b/content/public/android/java/src/org/chromium/content/browser/WebContentsObserverAndroid.java
@@ -50,13 +50,6 @@
             boolean isMainFrame, int errorCode, String description, String failingUrl) {
     }
 
-    // TODO(mkosiba): delete once downstream rolls.
-    @Deprecated
-    @CalledByNative
-    public void didNavigateMainFrame(String url, String baseUrl,
-            boolean isNavigationToDifferentPage) {
-    }
-
     /**
      * Called when the main frame of the page has committed.
      * @param url The validated url for the page.
diff --git a/content/public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java b/content/public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java
index 8b6ba15..63deca8 100644
--- a/content/public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java
+++ b/content/public/android/java/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java
@@ -12,6 +12,7 @@
 import android.text.style.URLSpan;
 import android.view.MotionEvent;
 import android.view.View;
+import android.view.ViewGroup;
 import android.view.ViewParent;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityManager;
@@ -45,12 +46,12 @@
     private long mNativeObj;
     private int mAccessibilityFocusId;
     private boolean mIsHovering;
+    private int mLastHoverId = View.NO_ID;
     private int mCurrentRootId;
     private final int[] mTempLocation = new int[2];
-    private final View mView;
+    private final ViewGroup mView;
     private boolean mUserHasTouchExplored;
     private boolean mPendingScrollToMakeNodeVisible;
-    private boolean mFrameInfoInitialized;
 
     /**
      * Create a BrowserAccessibilityManager object, which is owned by the C++
@@ -122,7 +123,7 @@
             return createNodeForHost(rootId);
         }
 
-        if (!mFrameInfoInitialized) {
+        if (!isFrameInfoInitialized()) {
             return null;
         }
 
@@ -252,9 +253,11 @@
         int cssY = (int) (mRenderCoordinates.fromPixToLocalCss(y) +
                           mRenderCoordinates.getScrollY());
         int id = nativeHitTest(mNativeObj, cssX, cssY);
-        if (mAccessibilityFocusId != id) {
-            sendAccessibilityEvent(mAccessibilityFocusId, AccessibilityEvent.TYPE_VIEW_HOVER_EXIT);
+        if (mLastHoverId != id) {
+            // Always send the ENTER and then the EXIT event, to match a standard Android View.
             sendAccessibilityEvent(id, AccessibilityEvent.TYPE_VIEW_HOVER_ENTER);
+            sendAccessibilityEvent(mLastHoverId, AccessibilityEvent.TYPE_VIEW_HOVER_EXIT);
+            mLastHoverId = id;
         }
 
         return true;
@@ -266,11 +269,8 @@
      * web coordinates to screen coordinates.
      */
     public void notifyFrameInfoInitialized() {
-        if (mFrameInfoInitialized) return;
-
-        mFrameInfoInitialized = true;
-        // Invalidate the host, since the chrome accessibility tree is now
-        // ready and listed as the child of the host.
+        // Invalidate the container view, since the chrome accessibility tree is now
+        // ready and listed as the child of the container view.
         mView.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED);
 
         // (Re-) focus focused element, since we weren't able to create an
@@ -292,11 +292,24 @@
     }
 
     private void sendAccessibilityEvent(int virtualViewId, int eventType) {
-        // If mFrameInfoInitialized is false, then the virtual hierarchy
+        // If we don't have any frame info, then the virtual hierarchy
         // doesn't exist in the view of the Android framework, so should
         // never send any events.
         if (!mAccessibilityManager.isEnabled() || mNativeObj == 0
-                || !mFrameInfoInitialized) {
+                || !isFrameInfoInitialized()) {
+            return;
+        }
+
+        // This is currently needed if we want Android to draw the yellow box around
+        // the item that has accessibility focus. In practice, this doesn't seem to slow
+        // things down, because it's only called when the accessibility focus moves.
+        // TODO(dmazzoni): remove this if/when Android framework fixes bug.
+        mView.postInvalidate();
+
+        // The container view is indicated by a virtualViewId of NO_ID; post these events directly
+        // since there's no web-specific information to attach.
+        if (virtualViewId == View.NO_ID) {
+            mView.sendAccessibilityEvent(eventType);
             return;
         }
 
@@ -308,13 +321,7 @@
             return;
         }
 
-        // This is currently needed if we want Android to draw the yellow box around
-        // the item that has accessibility focus. In practice, this doesn't seem to slow
-        // things down, because it's only called when the accessibility focus moves.
-        // TODO(dmazzoni): remove this if/when Android framework fixes bug.
-        mContentViewCore.getContainerView().postInvalidate();
-
-        mContentViewCore.getContainerView().requestSendAccessibilityEvent(mView, event);
+        mView.requestSendAccessibilityEvent(mView, event);
     }
 
     private Bundle getOrCreateBundleForAccessibilityEvent(AccessibilityEvent event) {
@@ -353,13 +360,18 @@
         result.setClassName(source.getClassName());
 
         // Add the Chrome root node.
-        if (mFrameInfoInitialized) {
+        if (isFrameInfoInitialized()) {
             result.addChild(mView, rootId);
         }
 
         return result;
     }
 
+    private boolean isFrameInfoInitialized() {
+        return mRenderCoordinates.getContentWidthCss() != 0.0 ||
+               mRenderCoordinates.getContentHeightCss() != 0.0;
+    }
+
     @CalledByNative
     private void handlePageLoaded(int id) {
         if (mUserHasTouchExplored) return;
@@ -409,7 +421,6 @@
     private void handleNavigate() {
         mAccessibilityFocusId = View.NO_ID;
         mUserHasTouchExplored = false;
-        mFrameInfoInitialized = false;
         // Invalidate the host, since its child is now gone.
         mView.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED);
     }
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/AdapterInputConnection.java b/content/public/android/java/src/org/chromium/content/browser/input/AdapterInputConnection.java
index de89873..6595808 100644
--- a/content/public/android/java/src/org/chromium/content/browser/input/AdapterInputConnection.java
+++ b/content/public/android/java/src/org/chromium/content/browser/input/AdapterInputConnection.java
@@ -101,7 +101,8 @@
         } else if (imeAdapter.getTextInputType() == ImeAdapter.sTextInputTypeNumber) {
             // Number
             outAttrs.inputType = InputType.TYPE_CLASS_NUMBER
-                    | InputType.TYPE_NUMBER_VARIATION_NORMAL;
+                    | InputType.TYPE_NUMBER_VARIATION_NORMAL
+                    | InputType.TYPE_NUMBER_FLAG_DECIMAL;
             outAttrs.imeOptions |= EditorInfo.IME_ACTION_NEXT;
         }
         outAttrs.initialSelStart = Selection.getSelectionStart(mEditable);
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/OWNERS b/content/public/android/java/src/org/chromium/content/browser/input/OWNERS
new file mode 100644
index 0000000..d11cd34
--- /dev/null
+++ b/content/public/android/java/src/org/chromium/content/browser/input/OWNERS
@@ -0,0 +1,2 @@
+aurimas@chromium.org
+cjhopman@chromium.org
\ No newline at end of file
diff --git a/content/public/android/java/src/org/chromium/content/browser/webcontents/WebContentsImpl.java b/content/public/android/java/src/org/chromium/content/browser/webcontents/WebContentsImpl.java
index 77b8e47..3da256e 100644
--- a/content/public/android/java/src/org/chromium/content/browser/webcontents/WebContentsImpl.java
+++ b/content/public/android/java/src/org/chromium/content/browser/webcontents/WebContentsImpl.java
@@ -48,4 +48,17 @@
     public NavigationController getNavigationController() {
         return mNavigationController;
     }
+
+    @Override
+    public String getTitle() {
+        return nativeGetTitle(mNativeWebContentsAndroid);
+    }
+
+    @Override
+    public void stop() {
+        nativeStop(mNativeWebContentsAndroid);
+    }
+
+    private native String nativeGetTitle(long nativeWebContentsAndroid);
+    private native void nativeStop(long nativeWebContentsAndroid);
 }
diff --git a/content/public/android/java/src/org/chromium/content/common/DeviceTelephonyInfo.java b/content/public/android/java/src/org/chromium/content/common/DeviceTelephonyInfo.java
index 64a8fb4..ce55400 100644
--- a/content/public/android/java/src/org/chromium/content/common/DeviceTelephonyInfo.java
+++ b/content/public/android/java/src/org/chromium/content/common/DeviceTelephonyInfo.java
@@ -27,7 +27,22 @@
      */
     @CalledByNative
     public String getNetworkCountryIso() {
-        return mTelManager.getNetworkCountryIso();
+        if (mTelManager != null) {
+            return mTelManager.getNetworkCountryIso();
+        }
+        return "";
+    }
+
+    /**
+     * @return MCC+MNC (mobile country code + mobile network code) as
+     * the numeric name of the current registered operator.
+     */
+    @CalledByNative
+    public String getNetworkOperator() {
+        if (mTelManager != null) {
+            return mTelManager.getNetworkOperator();
+        }
+        return "";
     }
 
     /**
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/WebContents.java b/content/public/android/java/src/org/chromium/content_public/browser/WebContents.java
index 1884718..c68ace6 100644
--- a/content/public/android/java/src/org/chromium/content_public/browser/WebContents.java
+++ b/content/public/android/java/src/org/chromium/content_public/browser/WebContents.java
@@ -12,4 +12,14 @@
      * @return The navigation controller associated with this WebContents.
      */
     NavigationController getNavigationController();
+
+    /**
+     * @return The title for the current visible page.
+     */
+    String getTitle();
+
+    /**
+     * Stop any pending navigation.
+     */
+    void stop();
 }
diff --git a/content/public/android/java/strings/translations/android_content_strings_th.xtb b/content/public/android/java/strings/translations/android_content_strings_th.xtb
index 95a1740..32c80a9 100644
--- a/content/public/android/java/strings/translations/android_content_strings_th.xtb
+++ b/content/public/android/java/strings/translations/android_content_strings_th.xtb
@@ -24,7 +24,7 @@
 <translation id="7096034533295549981">กำลังโหลดวิดีโอ</translation>
 <translation id="1542044944667958430">ค้นเว็บ</translation>
 <translation id="6849295950938417341">ไม่สามารถเริ่มโปรแกรมโปรไฟล์เลอร์</translation>
-<translation id="6527303717912515753">แบ่งปัน</translation>
+<translation id="6527303717912515753">แชร์</translation>
 <translation id="1822429046913737220">ก่อนเที่ยง/หลังเที่ยง</translation>
 <translation id="5789643057113097023">.</translation>
 <translation id="1768717197362323622">มิลลิวินาที</translation>
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/BatteryStatusManagerTest.java b/content/public/android/javatests/src/org/chromium/content/browser/BatteryStatusManagerTest.java
new file mode 100644
index 0000000..e13512a
--- /dev/null
+++ b/content/public/android/javatests/src/org/chromium/content/browser/BatteryStatusManagerTest.java
@@ -0,0 +1,127 @@
+// 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.
+
+package org.chromium.content.browser;
+
+import android.content.Context;
+import android.content.Intent;
+
+import android.os.BatteryManager;
+
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+
+/**
+ * Test suite for BatteryStatusManager.
+ */
+public class BatteryStatusManagerTest extends AndroidTestCase {
+
+    private BatteryStatusManagerForTests mBatteryStatusManager;
+
+    @Override
+    public void setUp() throws Exception {
+        super.setUp();
+        mBatteryStatusManager = BatteryStatusManagerForTests.getInstance(getContext());
+    }
+
+    @SmallTest
+    public void testOnReceiveBatteryDischarging() {
+        Intent intent = new Intent(Intent.ACTION_BATTERY_CHANGED);
+        intent.putExtra(BatteryManager.EXTRA_LEVEL, 10);
+        intent.putExtra(BatteryManager.EXTRA_SCALE, 100);
+        intent.putExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_DISCHARGING);
+
+        mBatteryStatusManager.onReceive(getContext(), intent);
+
+        mBatteryStatusManager.verifyCalls("gotBatteryStatus");
+        mBatteryStatusManager.verifyValues(false, Double.POSITIVE_INFINITY,
+                Double.POSITIVE_INFINITY, 0.1);
+    }
+
+    @SmallTest
+    public void testOnReceiveBatteryCharging() {
+        Intent intent = new Intent(Intent.ACTION_BATTERY_CHANGED);
+        intent.putExtra(BatteryManager.EXTRA_LEVEL, 50);
+        intent.putExtra(BatteryManager.EXTRA_SCALE, 100);
+        intent.putExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_CHARGING);
+
+        mBatteryStatusManager.onReceive(getContext(), intent);
+
+        mBatteryStatusManager.verifyCalls("gotBatteryStatus");
+        mBatteryStatusManager.verifyValues(true, Double.POSITIVE_INFINITY,
+                Double.POSITIVE_INFINITY, 0.5);
+    }
+
+    @SmallTest
+    public void testOnReceiveBatteryFull() {
+        Intent intent = new Intent(Intent.ACTION_BATTERY_CHANGED);
+        intent.putExtra(BatteryManager.EXTRA_LEVEL, 100);
+        intent.putExtra(BatteryManager.EXTRA_SCALE, 100);
+        intent.putExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_FULL);
+
+        mBatteryStatusManager.onReceive(getContext(), intent);
+
+        mBatteryStatusManager.verifyCalls("gotBatteryStatus");
+        mBatteryStatusManager.verifyValues(true, 0, Double.POSITIVE_INFINITY, 1);
+    }
+
+    @SmallTest
+    public void testOnReceiveNoBattery() {
+        Intent intent = new Intent(Intent.ACTION_BATTERY_CHANGED);
+        intent.putExtra(BatteryManager.EXTRA_PRESENT, false);
+
+        mBatteryStatusManager.onReceive(getContext(), intent);
+
+        mBatteryStatusManager.verifyCalls("gotBatteryStatus");
+        mBatteryStatusManager.verifyValues(true, 0, Double.POSITIVE_INFINITY, 1);
+    }
+
+    @SmallTest
+    public void testStartStopSucceeds() {
+        assertTrue(mBatteryStatusManager.start(0));
+        mBatteryStatusManager.stop();
+    }
+
+    // Helper class for testing.
+
+    private static class BatteryStatusManagerForTests extends BatteryStatusManager {
+
+        private boolean mCharging = false;
+        private double mChargingTime = 0;
+        private double mDischargingTime = 0;
+        private double mLevel = 0;
+        private String mCalls = "";
+
+        private BatteryStatusManagerForTests(Context context) {
+            super(context);
+        }
+
+        static BatteryStatusManagerForTests getInstance(Context context) {
+            return new BatteryStatusManagerForTests(context);
+        }
+
+        private void verifyValues(boolean charging, double chargingTime,
+                double dischargingTime, double level) {
+            assertEquals(charging, mCharging);
+            assertEquals(chargingTime, mChargingTime);
+            assertEquals(dischargingTime, mDischargingTime);
+            assertEquals(level, mLevel);
+        }
+
+        private void verifyCalls(String names) {
+            assertEquals(mCalls, names);
+        }
+
+        @Override
+        protected void gotBatteryStatus(boolean charging, double chargingTime,
+                double dischargingTime, double level) {
+            mCharging = charging;
+            mChargingTime = chargingTime;
+            mDischargingTime = dischargingTime;
+            mLevel = level;
+            mCalls = mCalls.concat("gotBatteryStatus");
+        }
+    }
+
+}
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/ContentDetectionTestBase.java b/content/public/android/javatests/src/org/chromium/content/browser/ContentDetectionTestBase.java
index 8319e2d..6480854 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/ContentDetectionTestBase.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/ContentDetectionTestBase.java
@@ -32,7 +32,7 @@
      */
     protected TestCallbackHelperContainer getTestCallbackHelperContainer() {
         if (mCallbackHelper == null) {
-            mCallbackHelper = new TestCallbackHelperContainer(getContentView());
+            mCallbackHelper = new TestCallbackHelperContainer(getContentViewCore());
         }
         return mCallbackHelper;
     }
@@ -52,7 +52,7 @@
      * @return true if the test url is the current one, false otherwise.
      */
     protected boolean isCurrentTestUrl(String testUrl) {
-        return UrlUtils.getTestFileUrl(testUrl).equals(getContentView().getUrl());
+        return UrlUtils.getTestFileUrl(testUrl).equals(getContentViewCore().getUrl());
     }
 
     /**
@@ -67,7 +67,7 @@
         int currentCallCount = onStartContentIntentHelper.getCallCount();
 
         DOMUtils.scrollNodeIntoView(getContentViewCore(), id);
-        DOMUtils.clickNode(this, getContentView(), id);
+        DOMUtils.clickNode(this, getContentViewCore(), id);
 
         onStartContentIntentHelper.waitForCallback(currentCallCount, 1, WAIT_TIMEOUT_SECONDS,
                 TimeUnit.SECONDS);
@@ -88,7 +88,7 @@
         int currentCallCount = onPageFinishedHelper.getCallCount();
 
         DOMUtils.scrollNodeIntoView(getContentViewCore(), id);
-        DOMUtils.clickNode(this, getContentView(), id);
+        DOMUtils.clickNode(this, getContentViewCore(), id);
 
         onPageFinishedHelper.waitForCallback(currentCallCount, 1, WAIT_TIMEOUT_SECONDS,
                 TimeUnit.SECONDS);
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/ContentViewCoreInputConnectionTest.java b/content/public/android/javatests/src/org/chromium/content/browser/ContentViewCoreInputConnectionTest.java
index 8ef23b1..2036717 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/ContentViewCoreInputConnectionTest.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/ContentViewCoreInputConnectionTest.java
@@ -32,6 +32,7 @@
         }
     }
 
+    @Override
     public void setUp() throws Exception {
         super.setUp();
         mContentViewCore = new ContentViewCore(getActivity());
@@ -40,7 +41,7 @@
         mImeAdapter.setInputMethodManagerWrapper(new TestInputMethodManagerWrapper(
             mContentViewCore));
         mContentViewCore.setImeAdapterForTest(mImeAdapter);
-        mContentViewCore.setContainerViewForTest(getActivity().getActiveContentView());
+        mContentViewCore.setContainerViewForTest(getActivity().getActiveShell().getContentView());
     }
 
     /**
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/ContentViewLocationTest.java b/content/public/android/javatests/src/org/chromium/content/browser/ContentViewLocationTest.java
index 35871dc..041a9a9 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/ContentViewLocationTest.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/ContentViewLocationTest.java
@@ -29,7 +29,7 @@
         getInstrumentation().runOnMainSync(new Runnable() {
                 @Override
                 public void run() {
-                    getContentView().onHide();
+                    getContentViewCore().onHide();
                 }
         });
     }
@@ -38,7 +38,7 @@
         getInstrumentation().runOnMainSync(new Runnable() {
                 @Override
                 public void run() {
-                    getContentView().onShow();
+                    getContentViewCore().onShow();
                 }
         });
     }
@@ -91,7 +91,7 @@
             fail();
         }
 
-        mTestCallbackHelperContainer = new TestCallbackHelperContainer(getContentView());
+        mTestCallbackHelperContainer = new TestCallbackHelperContainer(getContentViewCore());
         mJavascriptHelper = new OnEvaluateJavaScriptResultHelper();
 
         ensureGeolocationRunning(false);
@@ -125,7 +125,8 @@
         ensureGeolocationRunning(true);
 
         // Navigate away and ensure that geolocation stops.
-        loadUrl(getContentView(), mTestCallbackHelperContainer, new LoadUrlParams("about:blank"));
+        loadUrl(getContentViewCore(), mTestCallbackHelperContainer,
+              new LoadUrlParams("about:blank"));
         ensureGeolocationRunning(false);
     }
 
@@ -167,7 +168,8 @@
         startGeolocationWatchPosition();
         ensureGeolocationRunning(false);
 
-        loadUrl(getContentView(), mTestCallbackHelperContainer, new LoadUrlParams("about:blank"));
+        loadUrl(getContentViewCore(), mTestCallbackHelperContainer,
+                new LoadUrlParams("about:blank"));
         showContentViewOnUiThread();
         ensureGeolocationRunning(false);
     }
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/ContentViewPopupZoomerTest.java b/content/public/android/javatests/src/org/chromium/content/browser/ContentViewPopupZoomerTest.java
index 858cc08..50f70f6 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/ContentViewPopupZoomerTest.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/ContentViewPopupZoomerTest.java
@@ -5,19 +5,19 @@
 package org.chromium.content.browser;
 
 import android.view.View;
+import android.view.ViewGroup;
 
 import org.chromium.base.test.util.DisabledTest;
 import org.chromium.base.test.util.UrlUtils;
 import org.chromium.content.browser.test.util.Criteria;
 import org.chromium.content.browser.test.util.CriteriaHelper;
 import org.chromium.content.browser.test.util.DOMUtils;
-import org.chromium.content.browser.test.util.TestCallbackHelperContainer;
 import org.chromium.content_shell_apk.ContentShellTestBase;
 
 import java.util.concurrent.TimeoutException;
 
 public class ContentViewPopupZoomerTest extends ContentShellTestBase {
-    private static PopupZoomer findPopupZoomer(ContentView view) {
+    private static PopupZoomer findPopupZoomer(ViewGroup view) {
         assert view != null;
         for (int i = 0; i < view.getChildCount(); i++) {
             View child = view.getChildAt(i);
@@ -27,9 +27,9 @@
     }
 
     private static class PopupShowingCriteria implements Criteria {
-        private final ContentView mView;
+        private final ViewGroup mView;
         private final boolean mShouldBeShown;
-        public PopupShowingCriteria(ContentView view, boolean shouldBeShown) {
+        public PopupShowingCriteria(ViewGroup view, boolean shouldBeShown) {
             mView = view;
             mShouldBeShown = shouldBeShown;
         }
@@ -42,8 +42,8 @@
     }
 
     private static class PopupHasNonZeroDimensionsCriteria implements Criteria {
-        private final ContentView mView;
-        public PopupHasNonZeroDimensionsCriteria(ContentView view) {
+        private final ViewGroup mView;
+        public PopupHasNonZeroDimensionsCriteria(ViewGroup view) {
             mView = view;
         }
         @Override
@@ -83,16 +83,15 @@
         launchContentShellWithUrl(generateTestUrl(100, 15, "clickme"));
         assertTrue("Page failed to load", waitForActiveShellToBeDoneLoading());
 
-        final ContentView view = getActivity().getActiveContentView();
-        final TestCallbackHelperContainer viewClient =
-                new TestCallbackHelperContainer(view);
+        final ContentViewCore viewCore = getContentViewCore();
+        final ViewGroup view = viewCore.getContainerView();
 
         // The popup should be hidden before the click.
         assertTrue("The zoomer popup is shown after load.",
                 CriteriaHelper.pollForCriteria(new PopupShowingCriteria(view, false)));
 
         // Once clicked, the popup should show up.
-        DOMUtils.clickNode(this, view, "clickme");
+        DOMUtils.clickNode(this, viewCore, "clickme");
         assertTrue("The zoomer popup did not show up on click.",
                 CriteriaHelper.pollForCriteria(new PopupShowingCriteria(view, true)));
 
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/ContentViewScrollingTest.java b/content/public/android/javatests/src/org/chromium/content/browser/ContentViewScrollingTest.java
index 6da349b..7396a97 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/ContentViewScrollingTest.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/ContentViewScrollingTest.java
@@ -123,7 +123,7 @@
         runTestOnUiThread(new Runnable() {
             @Override
             public void run() {
-                getContentView().fling(SystemClock.uptimeMillis(), 0, 0, vx, vy);
+                getContentViewCore().flingForTest(SystemClock.uptimeMillis(), 0, 0, vx, vy);
             }
         });
     }
@@ -132,7 +132,7 @@
         runTestOnUiThread(new Runnable() {
             @Override
             public void run() {
-                getContentView().scrollTo(x, y);
+                getContentViewCore().getContainerView().scrollTo(x, y);
             }
         });
     }
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/ContentViewTestBase.java b/content/public/android/javatests/src/org/chromium/content/browser/ContentViewTestBase.java
index fb34e84..ec32f16 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/ContentViewTestBase.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/ContentViewTestBase.java
@@ -31,15 +31,13 @@
             runTestOnUiThread(new Runnable() {
                 @Override
                 public void run() {
-                    ContentView contentView = activity.getActiveContentView();
-                    contentView.getContentViewCore().addPossiblyUnsafeJavascriptInterface(object,
-                            name, null);
-                    mTestCallbackHelperContainer =
-                            new TestCallbackHelperContainer(contentView);
+                    ContentViewCore viewCore = activity.getActiveContentViewCore();
+                    viewCore.addPossiblyUnsafeJavascriptInterface(object, name, null);
+                    mTestCallbackHelperContainer = new TestCallbackHelperContainer(viewCore);
                 }
             });
 
-            loadDataSync(activity.getActiveContentView(),
+            loadDataSync(activity.getActiveContentViewCore(),
                     "<!DOCTYPE html><title></title>", "text/html", false);
         } catch (Throwable e) {
             throw new RuntimeException(
@@ -51,9 +49,9 @@
      * Loads data on the UI thread and blocks until onPageFinished is called.
      * TODO(cramya): Move method to a separate util file once UiUtils.java moves into base.
      */
-    protected void loadDataSync(final ContentView contentView, final String data,
+    protected void loadDataSync(final ContentViewCore contentViewCore, final String data,
             final String mimeType, final boolean isBase64Encoded) throws Throwable {
-        loadUrl(contentView, mTestCallbackHelperContainer, LoadUrlParams.createLoadDataParams(
+        loadUrl(contentViewCore, mTestCallbackHelperContainer, LoadUrlParams.createLoadDataParams(
                 data, mimeType, isBase64Encoded));
     }
 }
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/DeviceMotionAndOrientationTest.java b/content/public/android/javatests/src/org/chromium/content/browser/DeviceMotionAndOrientationTest.java
deleted file mode 100644
index 95a28ab..0000000
--- a/content/public/android/javatests/src/org/chromium/content/browser/DeviceMotionAndOrientationTest.java
+++ /dev/null
@@ -1,402 +0,0 @@
-// Copyright 2013 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.
-
-package org.chromium.content.browser;
-
-import android.content.Context;
-import android.hardware.Sensor;
-import android.hardware.SensorEventListener;
-import android.hardware.SensorManager;
-import android.os.Handler;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.SmallTest;
-
-import java.util.HashSet;
-import java.util.Set;
-
-/**
- * Test suite for DeviceMotionAndOrientation.
- */
-public class DeviceMotionAndOrientationTest extends AndroidTestCase {
-
-    private DeviceMotionAndOrientationForTests mDeviceMotionAndOrientation;
-    private MockSensorManager mMockSensorManager;
-
-    @Override
-    public void setUp() throws Exception {
-        super.setUp();
-        mMockSensorManager = new MockSensorManager();
-        mDeviceMotionAndOrientation = DeviceMotionAndOrientationForTests.getInstance(getContext());
-        mDeviceMotionAndOrientation.setSensorManagerProxy(mMockSensorManager);
-    }
-
-    @SmallTest
-    public void testRegisterSensorsDeviceMotion() {
-        boolean start = mDeviceMotionAndOrientation.start(0,
-                DeviceMotionAndOrientation.DEVICE_MOTION, 100);
-
-        assertTrue(start);
-        assertTrue("should contain all motion sensors",
-                mDeviceMotionAndOrientation.mActiveSensors.containsAll(
-                        DeviceMotionAndOrientation.DEVICE_MOTION_SENSORS));
-        assertTrue(mDeviceMotionAndOrientation.mDeviceMotionIsActive);
-        assertFalse(mDeviceMotionAndOrientation.mDeviceOrientationIsActive);
-
-        assertEquals(DeviceMotionAndOrientation.DEVICE_MOTION_SENSORS.size(),
-                mMockSensorManager.numRegistered);
-        assertEquals(0, mMockSensorManager.numUnRegistered);
-        assertEquals(DeviceMotionAndOrientation.DEVICE_MOTION_SENSORS.size(),
-                mDeviceMotionAndOrientation.getNumberActiveDeviceMotionSensors());
-    }
-
-    @SmallTest
-    public void testRegisterSensorsDeviceOrientation() {
-        boolean start = mDeviceMotionAndOrientation.start(0,
-                DeviceMotionAndOrientation.DEVICE_ORIENTATION, 100);
-
-        assertTrue(start);
-        assertTrue("should contain all orientation sensors",
-                mDeviceMotionAndOrientation.mActiveSensors.containsAll(
-                        DeviceMotionAndOrientation.DEVICE_ORIENTATION_SENSORS));
-        assertFalse(mDeviceMotionAndOrientation.mDeviceMotionIsActive);
-        assertTrue(mDeviceMotionAndOrientation.mDeviceOrientationIsActive);
-
-        assertEquals(DeviceMotionAndOrientation.DEVICE_ORIENTATION_SENSORS.size(),
-                mMockSensorManager.numRegistered);
-        assertEquals(0, mMockSensorManager.numUnRegistered);
-    }
-
-    @SmallTest
-    public void testRegisterSensorsDeviceMotionAndOrientation() {
-        boolean startOrientation = mDeviceMotionAndOrientation.start(0,
-                DeviceMotionAndOrientation.DEVICE_ORIENTATION, 100);
-        boolean startMotion = mDeviceMotionAndOrientation.start(0,
-                DeviceMotionAndOrientation.DEVICE_MOTION, 100);
-
-        assertTrue(startOrientation);
-        assertTrue(startMotion);
-        assertTrue("should contain all motion sensors",
-                mDeviceMotionAndOrientation.mActiveSensors.containsAll(
-                        DeviceMotionAndOrientation.DEVICE_MOTION_SENSORS));
-        assertTrue("should contain all orientation sensors",
-                mDeviceMotionAndOrientation.mActiveSensors.containsAll(
-                        DeviceMotionAndOrientation.DEVICE_ORIENTATION_SENSORS));
-
-        Set<Integer> union = new HashSet<Integer>(
-            DeviceMotionAndOrientation.DEVICE_ORIENTATION_SENSORS);
-        union.addAll(DeviceMotionAndOrientation.DEVICE_MOTION_SENSORS);
-
-        assertEquals(union.size(), mDeviceMotionAndOrientation.mActiveSensors.size());
-        assertTrue(mDeviceMotionAndOrientation.mDeviceMotionIsActive);
-        assertTrue(mDeviceMotionAndOrientation.mDeviceOrientationIsActive);
-        assertEquals(union.size(), mMockSensorManager.numRegistered);
-        assertEquals(0, mMockSensorManager.numUnRegistered);
-        assertEquals(DeviceMotionAndOrientation.DEVICE_MOTION_SENSORS.size(),
-                mDeviceMotionAndOrientation.getNumberActiveDeviceMotionSensors());
-    }
-
-    @SmallTest
-    public void testUnregisterSensorsDeviceMotion() {
-        mDeviceMotionAndOrientation.start(0, DeviceMotionAndOrientation.DEVICE_MOTION, 100);
-        mDeviceMotionAndOrientation.stop(DeviceMotionAndOrientation.DEVICE_MOTION);
-
-        assertTrue("should contain no sensors",
-                mDeviceMotionAndOrientation.mActiveSensors.isEmpty());
-        assertFalse(mDeviceMotionAndOrientation.mDeviceMotionIsActive);
-        assertFalse(mDeviceMotionAndOrientation.mDeviceOrientationIsActive);
-        assertEquals(DeviceMotionAndOrientation.DEVICE_MOTION_SENSORS.size(),
-                mMockSensorManager.numUnRegistered);
-        assertEquals(0, mDeviceMotionAndOrientation.getNumberActiveDeviceMotionSensors());
-    }
-
-    @SmallTest
-    public void testUnregisterSensorsDeviceOrientation() {
-        mDeviceMotionAndOrientation.start(0, DeviceMotionAndOrientation.DEVICE_ORIENTATION, 100);
-        mDeviceMotionAndOrientation.stop(DeviceMotionAndOrientation.DEVICE_ORIENTATION);
-
-        assertTrue("should contain no sensors",
-                mDeviceMotionAndOrientation.mActiveSensors.isEmpty());
-        assertFalse(mDeviceMotionAndOrientation.mDeviceMotionIsActive);
-        assertFalse(mDeviceMotionAndOrientation.mDeviceOrientationIsActive);
-        assertEquals(DeviceMotionAndOrientation.DEVICE_ORIENTATION_SENSORS.size(),
-                mMockSensorManager.numUnRegistered);
-    }
-
-    @SmallTest
-    public void testUnRegisterSensorsDeviceMotionAndOrientation() {
-        mDeviceMotionAndOrientation.start(0, DeviceMotionAndOrientation.DEVICE_ORIENTATION, 100);
-        mDeviceMotionAndOrientation.start(0, DeviceMotionAndOrientation.DEVICE_MOTION, 100);
-        mDeviceMotionAndOrientation.stop(DeviceMotionAndOrientation.DEVICE_MOTION);
-
-        assertTrue("should contain all orientation sensors",
-                mDeviceMotionAndOrientation.mActiveSensors.containsAll(
-                        DeviceMotionAndOrientation.DEVICE_ORIENTATION_SENSORS));
-
-        Set<Integer> diff = new HashSet<Integer>(DeviceMotionAndOrientation.DEVICE_MOTION_SENSORS);
-        diff.removeAll(DeviceMotionAndOrientation.DEVICE_ORIENTATION_SENSORS);
-
-        assertEquals(diff.size(), mMockSensorManager.numUnRegistered);
-
-        mDeviceMotionAndOrientation.stop(DeviceMotionAndOrientation.DEVICE_ORIENTATION);
-
-        assertTrue("should contain no sensors",
-                mDeviceMotionAndOrientation.mActiveSensors.isEmpty());
-        assertEquals(diff.size() + DeviceMotionAndOrientation.DEVICE_ORIENTATION_SENSORS.size(),
-                mMockSensorManager.numUnRegistered);
-        assertEquals(0, mDeviceMotionAndOrientation.getNumberActiveDeviceMotionSensors());
-    }
-
-    @SmallTest
-    public void testSensorChangedgotOrientation() {
-        boolean startOrientation = mDeviceMotionAndOrientation.start(0,
-                DeviceMotionAndOrientation.DEVICE_ORIENTATION, 100);
-
-        assertTrue(startOrientation);
-        assertTrue(mDeviceMotionAndOrientation.mDeviceOrientationIsActive);
-
-        float alpha = (float) Math.PI / 4;
-        float[] values = {0, 0, (float) Math.sin(alpha / 2), (float) Math.cos(alpha / 2), -1};
-        mDeviceMotionAndOrientation.sensorChanged(Sensor.TYPE_ROTATION_VECTOR, values);
-        mDeviceMotionAndOrientation.verifyCalls("gotOrientation");
-        mDeviceMotionAndOrientation.verifyValuesEpsilon(Math.toDegrees(alpha), 0, 0);
-    }
-
-    @SmallTest
-    public void testSensorChangedgotAccelerationIncludingGravity() {
-        mDeviceMotionAndOrientation.start(0, DeviceMotionAndOrientation.DEVICE_MOTION, 100);
-
-        float[] values = {1, 2, 3};
-        mDeviceMotionAndOrientation.sensorChanged(Sensor.TYPE_ACCELEROMETER, values);
-        mDeviceMotionAndOrientation.verifyCalls("gotAccelerationIncludingGravity");
-        mDeviceMotionAndOrientation.verifyValues(1, 2, 3);
-    }
-
-    @SmallTest
-    public void testSensorChangedgotAcceleration() {
-        mDeviceMotionAndOrientation.start(0, DeviceMotionAndOrientation.DEVICE_MOTION, 100);
-
-        float[] values = {1, 2, 3};
-        mDeviceMotionAndOrientation.sensorChanged(Sensor.TYPE_LINEAR_ACCELERATION, values);
-        mDeviceMotionAndOrientation.verifyCalls("gotAcceleration");
-        mDeviceMotionAndOrientation.verifyValues(1, 2, 3);
-    }
-
-    @SmallTest
-    public void testSensorChangedgotRotationRate() {
-        mDeviceMotionAndOrientation.start(0, DeviceMotionAndOrientation.DEVICE_MOTION, 100);
-
-        float[] values = {1, 2, 3};
-        mDeviceMotionAndOrientation.sensorChanged(Sensor.TYPE_GYROSCOPE, values);
-        mDeviceMotionAndOrientation.verifyCalls("gotRotationRate");
-        mDeviceMotionAndOrientation.verifyValues(1, 2, 3);
-    }
-
-    @SmallTest
-    public void testSensorChangedgotOrientationAndAcceleration() {
-        boolean startOrientation = mDeviceMotionAndOrientation.start(0,
-                DeviceMotionAndOrientation.DEVICE_ORIENTATION, 100);
-        boolean startMotion = mDeviceMotionAndOrientation.start(0,
-                DeviceMotionAndOrientation.DEVICE_MOTION, 100);
-
-        assertTrue(startOrientation);
-        assertTrue(startMotion);
-        assertTrue(mDeviceMotionAndOrientation.mDeviceMotionIsActive);
-        assertTrue(mDeviceMotionAndOrientation.mDeviceOrientationIsActive);
-
-        float alpha = (float) Math.PI / 4;
-        float[] values = {0, 0, (float) Math.sin(alpha / 2), (float) Math.cos(alpha / 2), -1};
-        mDeviceMotionAndOrientation.sensorChanged(Sensor.TYPE_ROTATION_VECTOR, values);
-        mDeviceMotionAndOrientation.verifyCalls("gotOrientation");
-        mDeviceMotionAndOrientation.verifyValuesEpsilon(Math.toDegrees(alpha), 0, 0);
-
-        float[] values2 = {1, 2, 3};
-        mDeviceMotionAndOrientation.sensorChanged(Sensor.TYPE_ACCELEROMETER, values2);
-        mDeviceMotionAndOrientation.verifyCalls("gotOrientation" +
-                "gotAccelerationIncludingGravity");
-        mDeviceMotionAndOrientation.verifyValues(1, 2, 3);
-    }
-
-
-    // Tests for correct Device Orientation angles.
-
-    @SmallTest
-    public void testOrientationAnglesFromRotationMatrixIdentity() {
-        float[] gravity = {0, 0, 1};
-        float[] magnetic = {0, 1, 0};
-        double[] expectedAngles = {0, 0, 0};
-
-        verifyOrientationAngles(gravity, magnetic, expectedAngles);
-    }
-
-    @SmallTest
-    public void testOrientationAnglesFromRotationMatrix45DegreesX() {
-        float[] gravity = {0, (float) Math.sin(Math.PI / 4), (float) Math.cos(Math.PI / 4)};
-        float[] magnetic = {0, 1, 0};
-        double[] expectedAngles = {0, Math.PI / 4, 0};
-
-        verifyOrientationAngles(gravity, magnetic, expectedAngles);
-    }
-
-    @SmallTest
-    public void testOrientationAnglesFromRotationMatrix45DegreesY() {
-        float[] gravity = {-(float) Math.sin(Math.PI / 4), 0, (float) Math.cos(Math.PI / 4)};
-        float[] magnetic = {0, 1, 0};
-        double[] expectedAngles = {0, 0, Math.PI / 4};
-
-        verifyOrientationAngles(gravity, magnetic, expectedAngles);
-    }
-
-    @SmallTest
-    public void testOrientationAnglesFromRotationMatrix45DegreesZ() {
-        float[] gravity = {0, 0, 1};
-        float[] magnetic = {(float) Math.sin(Math.PI / 4), (float) Math.cos(Math.PI / 4), 0};
-        double[] expectedAngles = {Math.PI / 4, 0, 0};
-
-        verifyOrientationAngles(gravity, magnetic, expectedAngles);
-    }
-
-    @SmallTest
-    public void testOrientationAnglesFromRotationMatrixGimbalLock() {
-        float[] gravity = {0, 1, 0};
-        float[] magnetic = {(float) Math.sin(Math.PI / 4), 0, -(float) Math.cos(Math.PI / 4)};
-        double[] expectedAngles = {Math.PI / 4, Math.PI / 2, 0};  // favor yaw instead of roll
-
-        verifyOrientationAngles(gravity, magnetic, expectedAngles);
-    }
-
-    @SmallTest
-    public void testOrientationAnglesFromRotationMatrixPitchGreaterThan90() {
-        final double largePitchAngle = Math.PI / 2 + Math.PI / 4;
-        float[] gravity = {0, (float) Math.cos(largePitchAngle - Math.PI / 2),
-                -(float) Math.sin(largePitchAngle - Math.PI / 2)};
-        float[] magnetic = {0, 0, -1};
-        double[] expectedAngles = {0, largePitchAngle, 0};
-
-        verifyOrientationAngles(gravity, magnetic, expectedAngles);
-    }
-
-    @SmallTest
-    public void testOrientationAnglesFromRotationMatrixRoll90() {
-        float[] gravity = {-1, 0, 0};
-        float[] magnetic = {0, 1, 0};
-        double[] expectedAngles = {Math.PI, -Math.PI, -Math.PI / 2};
-
-        verifyOrientationAngles(gravity, magnetic, expectedAngles);
-    }
-
-    /**
-     * Helper method for verifying angles obtained from rotation matrix.
-     *
-     * @param gravity
-     *        gravity vector in the device frame
-     * @param magnetic
-     *        magnetic field vector in the device frame
-     * @param expectedAngles
-     *        expectedAngles[0] rotation angle in radians around the Z-axis
-     *        expectedAngles[1] rotation angle in radians around the X-axis
-     *        expectedAngles[2] rotation angle in radians around the Y-axis
-     */
-    private void verifyOrientationAngles(float[] gravity, float[] magnetic,
-            double[] expectedAngles) {
-        float[] R = new float[9];
-        double[] values = new double[3];
-        SensorManager.getRotationMatrix(R, null, gravity, magnetic);
-        mDeviceMotionAndOrientation.computeDeviceOrientationFromRotationMatrix(R, values);
-
-        assertEquals(expectedAngles.length, values.length);
-        final double epsilon = 0.001;
-        for (int i = 0; i < expectedAngles.length; ++i) {
-            assertEquals(expectedAngles[i], values[i], epsilon);
-        }
-
-    }
-
-    // -- End Tests for correct Device Orientation angles.
-
-    private static class DeviceMotionAndOrientationForTests extends DeviceMotionAndOrientation {
-
-        private double value1 = 0;
-        private double value2 = 0;
-        private double value3 = 0;
-        private String mCalls = "";
-
-        private DeviceMotionAndOrientationForTests(Context context) {
-            super(context);
-        }
-
-        static DeviceMotionAndOrientationForTests getInstance(Context context) {
-            return new DeviceMotionAndOrientationForTests(context);
-        }
-
-        private void verifyValues(double v1, double v2, double v3) {
-            assertEquals(v1, value1);
-            assertEquals(v2, value2);
-            assertEquals(v3, value3);
-        }
-
-        private void verifyValuesEpsilon(double v1, double v2, double v3) {
-            assertEquals(v1, value1, 0.1);
-            assertEquals(v2, value2, 0.1);
-            assertEquals(v3, value3, 0.1);
-        }
-
-        private void verifyCalls(String names) {
-            assertEquals(mCalls, names);
-        }
-
-        @Override
-        protected void gotOrientation(double alpha, double beta, double gamma) {
-            value1 = alpha;
-            value2 = beta;
-            value3 = gamma;
-            mCalls = mCalls.concat("gotOrientation");
-        }
-
-        @Override
-        protected void gotAcceleration(double x, double y, double z) {
-            value1 = x;
-            value2 = y;
-            value3 = z;
-            mCalls = mCalls.concat("gotAcceleration");
-        }
-
-        @Override
-        protected void gotAccelerationIncludingGravity(double x, double y, double z) {
-            value1 = x;
-            value2 = y;
-            value3 = z;
-            mCalls = mCalls.concat("gotAccelerationIncludingGravity");
-        }
-
-        @Override
-        protected void gotRotationRate(double alpha, double beta, double gamma) {
-            value1 = alpha;
-            value2 = beta;
-            value3 = gamma;
-            mCalls = mCalls.concat("gotRotationRate");
-        }
-    }
-
-    private static class MockSensorManager implements
-            DeviceMotionAndOrientation.SensorManagerProxy {
-
-        private int numRegistered = 0;
-        private int numUnRegistered = 0;
-
-        private MockSensorManager() {
-        }
-
-        @Override
-        public boolean registerListener(SensorEventListener listener, int sensorType, int rate,
-                Handler handler) {
-            numRegistered++;
-            return true;
-        }
-
-        @Override
-        public void unregisterListener(SensorEventListener listener, int sensorType) {
-            numUnRegistered++;
-        }
-    }
-}
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/DeviceSensorsTest.java b/content/public/android/javatests/src/org/chromium/content/browser/DeviceSensorsTest.java
new file mode 100644
index 0000000..2b143cc
--- /dev/null
+++ b/content/public/android/javatests/src/org/chromium/content/browser/DeviceSensorsTest.java
@@ -0,0 +1,402 @@
+// 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.
+
+package org.chromium.content.browser;
+
+import android.content.Context;
+import android.hardware.Sensor;
+import android.hardware.SensorEventListener;
+import android.hardware.SensorManager;
+import android.os.Handler;
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * Test suite for DeviceSensors.
+ */
+public class DeviceSensorsTest extends AndroidTestCase {
+
+    private DeviceSensorsForTests mDeviceSensors;
+    private MockSensorManager mMockSensorManager;
+
+    @Override
+    public void setUp() throws Exception {
+        super.setUp();
+        mMockSensorManager = new MockSensorManager();
+        mDeviceSensors = DeviceSensorsForTests.getInstance(getContext());
+        mDeviceSensors.setSensorManagerProxy(mMockSensorManager);
+    }
+
+    @SmallTest
+    public void testRegisterSensorsDeviceMotion() {
+        boolean start = mDeviceSensors.start(0,
+                DeviceSensors.DEVICE_MOTION, 100);
+
+        assertTrue(start);
+        assertTrue("should contain all motion sensors",
+                mDeviceSensors.mActiveSensors.containsAll(
+                        DeviceSensors.DEVICE_MOTION_SENSORS));
+        assertTrue(mDeviceSensors.mDeviceMotionIsActive);
+        assertFalse(mDeviceSensors.mDeviceOrientationIsActive);
+
+        assertEquals(DeviceSensors.DEVICE_MOTION_SENSORS.size(),
+                mMockSensorManager.numRegistered);
+        assertEquals(0, mMockSensorManager.numUnRegistered);
+        assertEquals(DeviceSensors.DEVICE_MOTION_SENSORS.size(),
+                mDeviceSensors.getNumberActiveDeviceMotionSensors());
+    }
+
+    @SmallTest
+    public void testRegisterSensorsDeviceOrientation() {
+        boolean start = mDeviceSensors.start(0,
+                DeviceSensors.DEVICE_ORIENTATION, 100);
+
+        assertTrue(start);
+        assertTrue("should contain all orientation sensors",
+                mDeviceSensors.mActiveSensors.containsAll(
+                        DeviceSensors.DEVICE_ORIENTATION_SENSORS));
+        assertFalse(mDeviceSensors.mDeviceMotionIsActive);
+        assertTrue(mDeviceSensors.mDeviceOrientationIsActive);
+
+        assertEquals(DeviceSensors.DEVICE_ORIENTATION_SENSORS.size(),
+                mMockSensorManager.numRegistered);
+        assertEquals(0, mMockSensorManager.numUnRegistered);
+    }
+
+    @SmallTest
+    public void testRegisterSensorsDeviceMotionAndOrientation() {
+        boolean startOrientation = mDeviceSensors.start(0,
+                DeviceSensors.DEVICE_ORIENTATION, 100);
+        boolean startMotion = mDeviceSensors.start(0,
+                DeviceSensors.DEVICE_MOTION, 100);
+
+        assertTrue(startOrientation);
+        assertTrue(startMotion);
+        assertTrue("should contain all motion sensors",
+                mDeviceSensors.mActiveSensors.containsAll(
+                        DeviceSensors.DEVICE_MOTION_SENSORS));
+        assertTrue("should contain all orientation sensors",
+                mDeviceSensors.mActiveSensors.containsAll(
+                        DeviceSensors.DEVICE_ORIENTATION_SENSORS));
+
+        Set<Integer> union = new HashSet<Integer>(
+            DeviceSensors.DEVICE_ORIENTATION_SENSORS);
+        union.addAll(DeviceSensors.DEVICE_MOTION_SENSORS);
+
+        assertEquals(union.size(), mDeviceSensors.mActiveSensors.size());
+        assertTrue(mDeviceSensors.mDeviceMotionIsActive);
+        assertTrue(mDeviceSensors.mDeviceOrientationIsActive);
+        assertEquals(union.size(), mMockSensorManager.numRegistered);
+        assertEquals(0, mMockSensorManager.numUnRegistered);
+        assertEquals(DeviceSensors.DEVICE_MOTION_SENSORS.size(),
+                mDeviceSensors.getNumberActiveDeviceMotionSensors());
+    }
+
+    @SmallTest
+    public void testUnregisterSensorsDeviceMotion() {
+        mDeviceSensors.start(0, DeviceSensors.DEVICE_MOTION, 100);
+        mDeviceSensors.stop(DeviceSensors.DEVICE_MOTION);
+
+        assertTrue("should contain no sensors",
+                mDeviceSensors.mActiveSensors.isEmpty());
+        assertFalse(mDeviceSensors.mDeviceMotionIsActive);
+        assertFalse(mDeviceSensors.mDeviceOrientationIsActive);
+        assertEquals(DeviceSensors.DEVICE_MOTION_SENSORS.size(),
+                mMockSensorManager.numUnRegistered);
+        assertEquals(0, mDeviceSensors.getNumberActiveDeviceMotionSensors());
+    }
+
+    @SmallTest
+    public void testUnregisterSensorsDeviceOrientation() {
+        mDeviceSensors.start(0, DeviceSensors.DEVICE_ORIENTATION, 100);
+        mDeviceSensors.stop(DeviceSensors.DEVICE_ORIENTATION);
+
+        assertTrue("should contain no sensors",
+                mDeviceSensors.mActiveSensors.isEmpty());
+        assertFalse(mDeviceSensors.mDeviceMotionIsActive);
+        assertFalse(mDeviceSensors.mDeviceOrientationIsActive);
+        assertEquals(DeviceSensors.DEVICE_ORIENTATION_SENSORS.size(),
+                mMockSensorManager.numUnRegistered);
+    }
+
+    @SmallTest
+    public void testUnRegisterSensorsDeviceMotionAndOrientation() {
+        mDeviceSensors.start(0, DeviceSensors.DEVICE_ORIENTATION, 100);
+        mDeviceSensors.start(0, DeviceSensors.DEVICE_MOTION, 100);
+        mDeviceSensors.stop(DeviceSensors.DEVICE_MOTION);
+
+        assertTrue("should contain all orientation sensors",
+                mDeviceSensors.mActiveSensors.containsAll(
+                        DeviceSensors.DEVICE_ORIENTATION_SENSORS));
+
+        Set<Integer> diff = new HashSet<Integer>(DeviceSensors.DEVICE_MOTION_SENSORS);
+        diff.removeAll(DeviceSensors.DEVICE_ORIENTATION_SENSORS);
+
+        assertEquals(diff.size(), mMockSensorManager.numUnRegistered);
+
+        mDeviceSensors.stop(DeviceSensors.DEVICE_ORIENTATION);
+
+        assertTrue("should contain no sensors",
+                mDeviceSensors.mActiveSensors.isEmpty());
+        assertEquals(diff.size() + DeviceSensors.DEVICE_ORIENTATION_SENSORS.size(),
+                mMockSensorManager.numUnRegistered);
+        assertEquals(0, mDeviceSensors.getNumberActiveDeviceMotionSensors());
+    }
+
+    @SmallTest
+    public void testSensorChangedgotOrientation() {
+        boolean startOrientation = mDeviceSensors.start(0,
+                DeviceSensors.DEVICE_ORIENTATION, 100);
+
+        assertTrue(startOrientation);
+        assertTrue(mDeviceSensors.mDeviceOrientationIsActive);
+
+        float alpha = (float) Math.PI / 4;
+        float[] values = {0, 0, (float) Math.sin(alpha / 2), (float) Math.cos(alpha / 2), -1};
+        mDeviceSensors.sensorChanged(Sensor.TYPE_ROTATION_VECTOR, values);
+        mDeviceSensors.verifyCalls("gotOrientation");
+        mDeviceSensors.verifyValuesEpsilon(Math.toDegrees(alpha), 0, 0);
+    }
+
+    @SmallTest
+    public void testSensorChangedgotAccelerationIncludingGravity() {
+        mDeviceSensors.start(0, DeviceSensors.DEVICE_MOTION, 100);
+
+        float[] values = {1, 2, 3};
+        mDeviceSensors.sensorChanged(Sensor.TYPE_ACCELEROMETER, values);
+        mDeviceSensors.verifyCalls("gotAccelerationIncludingGravity");
+        mDeviceSensors.verifyValues(1, 2, 3);
+    }
+
+    @SmallTest
+    public void testSensorChangedgotAcceleration() {
+        mDeviceSensors.start(0, DeviceSensors.DEVICE_MOTION, 100);
+
+        float[] values = {1, 2, 3};
+        mDeviceSensors.sensorChanged(Sensor.TYPE_LINEAR_ACCELERATION, values);
+        mDeviceSensors.verifyCalls("gotAcceleration");
+        mDeviceSensors.verifyValues(1, 2, 3);
+    }
+
+    @SmallTest
+    public void testSensorChangedgotRotationRate() {
+        mDeviceSensors.start(0, DeviceSensors.DEVICE_MOTION, 100);
+
+        float[] values = {1, 2, 3};
+        mDeviceSensors.sensorChanged(Sensor.TYPE_GYROSCOPE, values);
+        mDeviceSensors.verifyCalls("gotRotationRate");
+        mDeviceSensors.verifyValues(1, 2, 3);
+    }
+
+    @SmallTest
+    public void testSensorChangedgotOrientationAndAcceleration() {
+        boolean startOrientation = mDeviceSensors.start(0,
+                DeviceSensors.DEVICE_ORIENTATION, 100);
+        boolean startMotion = mDeviceSensors.start(0,
+                DeviceSensors.DEVICE_MOTION, 100);
+
+        assertTrue(startOrientation);
+        assertTrue(startMotion);
+        assertTrue(mDeviceSensors.mDeviceMotionIsActive);
+        assertTrue(mDeviceSensors.mDeviceOrientationIsActive);
+
+        float alpha = (float) Math.PI / 4;
+        float[] values = {0, 0, (float) Math.sin(alpha / 2), (float) Math.cos(alpha / 2), -1};
+        mDeviceSensors.sensorChanged(Sensor.TYPE_ROTATION_VECTOR, values);
+        mDeviceSensors.verifyCalls("gotOrientation");
+        mDeviceSensors.verifyValuesEpsilon(Math.toDegrees(alpha), 0, 0);
+
+        float[] values2 = {1, 2, 3};
+        mDeviceSensors.sensorChanged(Sensor.TYPE_ACCELEROMETER, values2);
+        mDeviceSensors.verifyCalls("gotOrientation" +
+                "gotAccelerationIncludingGravity");
+        mDeviceSensors.verifyValues(1, 2, 3);
+    }
+
+
+    // Tests for correct Device Orientation angles.
+
+    @SmallTest
+    public void testOrientationAnglesFromRotationMatrixIdentity() {
+        float[] gravity = {0, 0, 1};
+        float[] magnetic = {0, 1, 0};
+        double[] expectedAngles = {0, 0, 0};
+
+        verifyOrientationAngles(gravity, magnetic, expectedAngles);
+    }
+
+    @SmallTest
+    public void testOrientationAnglesFromRotationMatrix45DegreesX() {
+        float[] gravity = {0, (float) Math.sin(Math.PI / 4), (float) Math.cos(Math.PI / 4)};
+        float[] magnetic = {0, 1, 0};
+        double[] expectedAngles = {0, Math.PI / 4, 0};
+
+        verifyOrientationAngles(gravity, magnetic, expectedAngles);
+    }
+
+    @SmallTest
+    public void testOrientationAnglesFromRotationMatrix45DegreesY() {
+        float[] gravity = {-(float) Math.sin(Math.PI / 4), 0, (float) Math.cos(Math.PI / 4)};
+        float[] magnetic = {0, 1, 0};
+        double[] expectedAngles = {0, 0, Math.PI / 4};
+
+        verifyOrientationAngles(gravity, magnetic, expectedAngles);
+    }
+
+    @SmallTest
+    public void testOrientationAnglesFromRotationMatrix45DegreesZ() {
+        float[] gravity = {0, 0, 1};
+        float[] magnetic = {(float) Math.sin(Math.PI / 4), (float) Math.cos(Math.PI / 4), 0};
+        double[] expectedAngles = {Math.PI / 4, 0, 0};
+
+        verifyOrientationAngles(gravity, magnetic, expectedAngles);
+    }
+
+    @SmallTest
+    public void testOrientationAnglesFromRotationMatrixGimbalLock() {
+        float[] gravity = {0, 1, 0};
+        float[] magnetic = {(float) Math.sin(Math.PI / 4), 0, -(float) Math.cos(Math.PI / 4)};
+        double[] expectedAngles = {Math.PI / 4, Math.PI / 2, 0};  // favor yaw instead of roll
+
+        verifyOrientationAngles(gravity, magnetic, expectedAngles);
+    }
+
+    @SmallTest
+    public void testOrientationAnglesFromRotationMatrixPitchGreaterThan90() {
+        final double largePitchAngle = Math.PI / 2 + Math.PI / 4;
+        float[] gravity = {0, (float) Math.cos(largePitchAngle - Math.PI / 2),
+                -(float) Math.sin(largePitchAngle - Math.PI / 2)};
+        float[] magnetic = {0, 0, -1};
+        double[] expectedAngles = {0, largePitchAngle, 0};
+
+        verifyOrientationAngles(gravity, magnetic, expectedAngles);
+    }
+
+    @SmallTest
+    public void testOrientationAnglesFromRotationMatrixRoll90() {
+        float[] gravity = {-1, 0, 0};
+        float[] magnetic = {0, 1, 0};
+        double[] expectedAngles = {Math.PI, -Math.PI, -Math.PI / 2};
+
+        verifyOrientationAngles(gravity, magnetic, expectedAngles);
+    }
+
+    /**
+     * Helper method for verifying angles obtained from rotation matrix.
+     *
+     * @param gravity
+     *        gravity vector in the device frame
+     * @param magnetic
+     *        magnetic field vector in the device frame
+     * @param expectedAngles
+     *        expectedAngles[0] rotation angle in radians around the Z-axis
+     *        expectedAngles[1] rotation angle in radians around the X-axis
+     *        expectedAngles[2] rotation angle in radians around the Y-axis
+     */
+    private void verifyOrientationAngles(float[] gravity, float[] magnetic,
+            double[] expectedAngles) {
+        float[] R = new float[9];
+        double[] values = new double[3];
+        SensorManager.getRotationMatrix(R, null, gravity, magnetic);
+        mDeviceSensors.computeDeviceOrientationFromRotationMatrix(R, values);
+
+        assertEquals(expectedAngles.length, values.length);
+        final double epsilon = 0.001;
+        for (int i = 0; i < expectedAngles.length; ++i) {
+            assertEquals(expectedAngles[i], values[i], epsilon);
+        }
+
+    }
+
+    // -- End Tests for correct Device Orientation angles.
+
+    private static class DeviceSensorsForTests extends DeviceSensors {
+
+        private double value1 = 0;
+        private double value2 = 0;
+        private double value3 = 0;
+        private String mCalls = "";
+
+        private DeviceSensorsForTests(Context context) {
+            super(context);
+        }
+
+        static DeviceSensorsForTests getInstance(Context context) {
+            return new DeviceSensorsForTests(context);
+        }
+
+        private void verifyValues(double v1, double v2, double v3) {
+            assertEquals(v1, value1);
+            assertEquals(v2, value2);
+            assertEquals(v3, value3);
+        }
+
+        private void verifyValuesEpsilon(double v1, double v2, double v3) {
+            assertEquals(v1, value1, 0.1);
+            assertEquals(v2, value2, 0.1);
+            assertEquals(v3, value3, 0.1);
+        }
+
+        private void verifyCalls(String names) {
+            assertEquals(mCalls, names);
+        }
+
+        @Override
+        protected void gotOrientation(double alpha, double beta, double gamma) {
+            value1 = alpha;
+            value2 = beta;
+            value3 = gamma;
+            mCalls = mCalls.concat("gotOrientation");
+        }
+
+        @Override
+        protected void gotAcceleration(double x, double y, double z) {
+            value1 = x;
+            value2 = y;
+            value3 = z;
+            mCalls = mCalls.concat("gotAcceleration");
+        }
+
+        @Override
+        protected void gotAccelerationIncludingGravity(double x, double y, double z) {
+            value1 = x;
+            value2 = y;
+            value3 = z;
+            mCalls = mCalls.concat("gotAccelerationIncludingGravity");
+        }
+
+        @Override
+        protected void gotRotationRate(double alpha, double beta, double gamma) {
+            value1 = alpha;
+            value2 = beta;
+            value3 = gamma;
+            mCalls = mCalls.concat("gotRotationRate");
+        }
+    }
+
+    private static class MockSensorManager implements
+            DeviceSensors.SensorManagerProxy {
+
+        private int numRegistered = 0;
+        private int numUnRegistered = 0;
+
+        private MockSensorManager() {
+        }
+
+        @Override
+        public boolean registerListener(SensorEventListener listener, int sensorType, int rate,
+                Handler handler) {
+            numRegistered++;
+            return true;
+        }
+
+        @Override
+        public void unregisterListener(SensorEventListener listener, int sensorType) {
+            numUnRegistered++;
+        }
+    }
+}
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/GestureDetectorResetTest.java b/content/public/android/javatests/src/org/chromium/content/browser/GestureDetectorResetTest.java
index 808af37..7e42be7 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/GestureDetectorResetTest.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/GestureDetectorResetTest.java
@@ -61,20 +61,20 @@
 
     private void verifyClicksAreRegistered(
             String disambiguation,
-            ContentView view)
+            ContentViewCore contentViewCore)
                     throws InterruptedException, Exception, Throwable {
         // Initially the text on the page should say "not clicked".
         assertTrue("The page contents is invalid " + disambiguation,
                 CriteriaHelper.pollForCriteria(new NodeContentsIsEqualToCriteria(
-                        view.getContentViewCore(), "test", "not clicked")));
+                        contentViewCore, "test", "not clicked")));
 
         // Click the button.
-        DOMUtils.clickNode(this, view, "button");
+        DOMUtils.clickNode(this, contentViewCore, "button");
 
         // After the click, the text on the page should say "clicked".
         assertTrue("The page contents didn't change after a click " + disambiguation,
                 CriteriaHelper.pollForCriteria(new NodeContentsIsEqualToCriteria(
-                        view.getContentViewCore(), "test", "clicked")));
+                        contentViewCore, "test", "clicked")));
     }
 
     /**
@@ -92,14 +92,14 @@
         launchContentShellWithUrl(CLICK_TEST_URL);
         assertTrue("Page failed to load", waitForActiveShellToBeDoneLoading());
 
-        final ContentView view = getActivity().getActiveContentView();
+        final ContentViewCore viewCore = getContentViewCore();
         final TestCallbackHelperContainer viewClient =
-                new TestCallbackHelperContainer(view);
+                new TestCallbackHelperContainer(viewCore);
         final OnPageFinishedHelper onPageFinishedHelper =
                 viewClient.getOnPageFinishedHelper();
 
         // Test that the button click works.
-        verifyClicksAreRegistered("on initial load", view);
+        verifyClicksAreRegistered("on initial load", viewCore);
 
         // Reload the test page.
         int currentCallCount = onPageFinishedHelper.getCallCount();
@@ -113,14 +113,14 @@
                 WAIT_TIMEOUT_SECONDS, TimeUnit.SECONDS);
 
         // Test that the button click still works.
-        verifyClicksAreRegistered("after reload", view);
+        verifyClicksAreRegistered("after reload", viewCore);
 
         // Directly navigate to the test page.
         currentCallCount = onPageFinishedHelper.getCallCount();
         getInstrumentation().runOnMainSync(new Runnable() {
             @Override
             public void run() {
-                getActivity().getActiveShell().getContentView().loadUrl(
+                getActivity().getActiveShell().getContentViewCore().loadUrl(
                         new LoadUrlParams(CLICK_TEST_URL));
             }
         });
@@ -128,6 +128,6 @@
                 WAIT_TIMEOUT_SECONDS, TimeUnit.SECONDS);
 
         // Test that the button click still works.
-        verifyClicksAreRegistered("after direct navigation", view);
+        verifyClicksAreRegistered("after direct navigation", viewCore);
     }
 }
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/InterstitialPageTest.java b/content/public/android/javatests/src/org/chromium/content/browser/InterstitialPageTest.java
index a337d6f..8fda4f5 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/InterstitialPageTest.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/InterstitialPageTest.java
@@ -61,10 +61,6 @@
         waitForActiveShellToBeDoneLoading();
     }
 
-    private ContentViewCore getActiveContentViewCore() {
-        return getActivity().getActiveContentView().getContentViewCore();
-    }
-
     private boolean waitForInterstitial(final boolean shouldBeShown) throws InterruptedException {
         return CriteriaHelper.pollForCriteria(new Criteria() {
             @Override
@@ -74,7 +70,7 @@
                         @Override
                         public Boolean call() throws Exception {
                             return shouldBeShown
-                                    == getActiveContentViewCore().isShowingInterstitialPage();
+                                    == getContentViewCore().isShowingInterstitialPage();
                         }
                     });
                 } catch (ExecutionException e) {
@@ -118,8 +114,8 @@
                 new Callable<TestWebContentsObserverAndroid>() {
                     @Override
                     public TestWebContentsObserverAndroid call() throws Exception {
-                        getActiveContentViewCore().showInterstitialPage(URL, delegate);
-                        return new TestWebContentsObserverAndroid(getActiveContentViewCore());
+                        getContentViewCore().showInterstitialPage(URL, delegate);
+                        return new TestWebContentsObserverAndroid(getContentViewCore());
                     }
                 });
 
@@ -127,7 +123,7 @@
         assertTrue("WebContentsObserver not notified of interstitial showing",
                 observer.isInterstitialShowing());
         TouchCommon touchCommon = new TouchCommon(this);
-        touchCommon.singleClickViewRelative(getActivity().getActiveContentView(), 10, 10);
+        touchCommon.singleClickViewRelative(getContentViewCore().getContainerView(), 10, 10);
         assertTrue("Interstitial never hidden.", waitForInterstitial(false));
         assertTrue("WebContentsObserver not notified of interstitial hiding",
                 !observer.isInterstitialShowing());
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeBasicsTest.java b/content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeBasicsTest.java
index 27cf1d6..b6d98c6 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeBasicsTest.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeBasicsTest.java
@@ -118,9 +118,9 @@
         runTestOnUiThread(new Runnable() {
             @Override
             public void run() {
-                getContentView().getContentViewCore().addPossiblyUnsafeJavascriptInterface(object,
+                getContentViewCore().addPossiblyUnsafeJavascriptInterface(object,
                         name, requiredAnnotation);
-                getContentView().getContentViewCore().reload(true);
+                getContentViewCore().reload(true);
             }
         });
         onPageFinishedHelper.waitForCallback(currentCallCount);
@@ -133,7 +133,7 @@
         runTestOnUiThread(new Runnable() {
             @Override
             public void run() {
-                getContentView().getContentViewCore().reload(true);
+                getContentViewCore().reload(true);
             }
         });
         onPageFinishedHelper.waitForCallback(currentCallCount);
@@ -163,7 +163,7 @@
         runTestOnUiThread(new Runnable() {
             @Override
             public void run() {
-                getContentView().getContentViewCore().addPossiblyUnsafeJavascriptInterface(
+                getContentViewCore().addPossiblyUnsafeJavascriptInterface(
                         new Object(), "testObject", null);
             }
         });
@@ -180,7 +180,7 @@
         runTestOnUiThread(new Runnable() {
             @Override
             public void run() {
-                getContentView().getContentViewCore().removeJavascriptInterface("testObject");
+                getContentViewCore().removeJavascriptInterface("testObject");
             }
         });
         assertEquals("object", executeJavaScriptAndGetStringResult("typeof testObject"));
@@ -197,8 +197,8 @@
         runTestOnUiThread(new Runnable() {
             @Override
             public void run() {
-                getContentView().getContentViewCore().removeJavascriptInterface("foo");
-                getContentView().getContentViewCore().reload(true);
+                getContentViewCore().removeJavascriptInterface("foo");
+                getContentViewCore().reload(true);
             }
         });
         onPageFinishedHelper.waitForCallback(currentCallCount);
@@ -355,11 +355,11 @@
         runTestOnUiThread(new Runnable() {
             @Override
             public void run() {
-                getContentView().getContentViewCore().addPossiblyUnsafeJavascriptInterface(
+                getContentViewCore().addPossiblyUnsafeJavascriptInterface(
                         testObject, "testObject1", null);
-                getContentView().getContentViewCore().addPossiblyUnsafeJavascriptInterface(
+                getContentViewCore().addPossiblyUnsafeJavascriptInterface(
                         testObject, "testObject2", null);
-                getContentView().getContentViewCore().reload(true);
+                getContentViewCore().reload(true);
             }
         });
         onPageFinishedHelper.waitForCallback(currentCallCount);
@@ -402,11 +402,11 @@
         runTestOnUiThread(new Runnable() {
             @Override
             public void run() {
-                getContentView().getContentViewCore().addPossiblyUnsafeJavascriptInterface(
+                getContentViewCore().addPossiblyUnsafeJavascriptInterface(
                         object, "testObject", null);
-                getContentView().getContentViewCore().addPossiblyUnsafeJavascriptInterface(
+                getContentViewCore().addPossiblyUnsafeJavascriptInterface(
                         innerObject, "innerObject", null);
-                getContentView().getContentViewCore().reload(true);
+                getContentViewCore().reload(true);
             }
         });
         onPageFinishedHelper.waitForCallback(currentCallCount);
@@ -785,9 +785,9 @@
         runTestOnUiThread(new Runnable() {
             @Override
             public void run() {
-                getContentView().getContentViewCore().addJavascriptInterface(new Test(),
+                getContentViewCore().addJavascriptInterface(new Test(),
                         "testObject");
-                getContentView().getContentViewCore().reload(true);
+                getContentViewCore().reload(true);
             }
         });
         onPageFinishedHelper.waitForCallback(currentCallCount);
@@ -835,7 +835,7 @@
         runTestOnUiThread(new Runnable() {
             @Override
             public void run() {
-                getContentView().getContentViewCore().setAllowJavascriptInterfacesInspection(false);
+                getContentViewCore().setAllowJavascriptInterfacesInspection(false);
             }
         });
 
@@ -874,7 +874,7 @@
         runTestOnUiThread(new Runnable() {
             @Override
             public void run() {
-                getContentView().loadUrl(new LoadUrlParams("javascript:(function() { " +
+                getContentViewCore().loadUrl(new LoadUrlParams("javascript:(function() { " +
                                 "testController.setStringValue(" + script + ") })()"));
                 do {
                     final Boolean[] deactivateExitLoopTask = new Boolean[1];
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeChildFrameTest.java b/content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeChildFrameTest.java
index b8b098c..8e0b424 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeChildFrameTest.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeChildFrameTest.java
@@ -18,7 +18,8 @@
     private class TestController extends Controller {
         private String mStringValue;
 
-       public synchronized void setStringValue(String x) {
+    @SuppressWarnings("unused")  // Called via reflection
+    public synchronized void setStringValue(String x) {
             mStringValue = x;
             notifyResultIsReady();
         }
@@ -43,7 +44,7 @@
         // In the case that the test fails (i.e. the child frame doesn't get the injected object,
         // the call to testController.setStringValue in the child frame's onload handler will
         // not be made.
-        loadDataSync(getContentView(),
+        loadDataSync(getContentViewCore(),
                 "<html><head></head><body>" +
                 "<iframe id=\"childFrame\" onload=\"testController.setStringValue('PASS');\" />" +
                 "</body></html>", "text/html", false);
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeTestBase.java b/content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeTestBase.java
index 846512e..68f65eb 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeTestBase.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeTestBase.java
@@ -41,7 +41,7 @@
                 // converted to a string and used as the new document for the
                 // frame. We don't want this behaviour, so wrap the script in
                 // an anonymous function.
-                getContentView().loadUrl(new LoadUrlParams(
+                getContentViewCore().loadUrl(new LoadUrlParams(
                         "javascript:(function() { " + script + " })()"));
             }
         });
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/NavigationTest.java b/content/public/android/javatests/src/org/chromium/content/browser/NavigationTest.java
index 6f8e56f..f15c4e6 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/NavigationTest.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/NavigationTest.java
@@ -26,26 +26,26 @@
     private static final String URL_6 = UrlUtils.encodeHtmlDataUri("<html>6</html>");
     private static final String URL_7 = UrlUtils.encodeHtmlDataUri("<html>7</html>");
 
-    private void goBack(final ContentView contentView,
+    private void goBack(final ContentViewCore contentViewCore,
             TestCallbackHelperContainer testCallbackHelperContainer) throws Throwable {
         handleBlockingCallbackAction(
                 testCallbackHelperContainer.getOnPageFinishedHelper(),
                 new Runnable() {
                     @Override
                     public void run() {
-                        contentView.goBack();
+                        contentViewCore.goBack();
                     }
                 });
     }
 
-    private void reload(final ContentView contentView,
+    private void reload(final ContentViewCore contentViewCore,
             TestCallbackHelperContainer testCallbackHelperContainer) throws Throwable {
         handleBlockingCallbackAction(
                 testCallbackHelperContainer.getOnPageFinishedHelper(),
                 new Runnable() {
                     @Override
                     public void run() {
-                        contentView.getContentViewCore().reload(true);
+                        contentViewCore.reload(true);
                     }
                 });
     }
@@ -55,32 +55,29 @@
     public void testDirectedNavigationHistory() throws Throwable {
         ContentShellActivity activity = launchContentShellWithUrl(URL_1);
         waitForActiveShellToBeDoneLoading();
-        ContentView contentView = activity.getActiveContentView();
+        ContentViewCore contentViewCore = activity.getActiveContentViewCore();
         TestCallbackHelperContainer testCallbackHelperContainer =
-                new TestCallbackHelperContainer(contentView);
+                new TestCallbackHelperContainer(contentViewCore);
 
-        loadUrl(contentView, testCallbackHelperContainer, new LoadUrlParams(URL_2));
-        loadUrl(contentView, testCallbackHelperContainer, new LoadUrlParams(URL_3));
-        loadUrl(contentView, testCallbackHelperContainer, new LoadUrlParams(URL_4));
-        loadUrl(contentView, testCallbackHelperContainer, new LoadUrlParams(URL_5));
-        loadUrl(contentView, testCallbackHelperContainer, new LoadUrlParams(URL_6));
-        loadUrl(contentView, testCallbackHelperContainer, new LoadUrlParams(URL_7));
+        loadUrl(contentViewCore, testCallbackHelperContainer, new LoadUrlParams(URL_2));
+        loadUrl(contentViewCore, testCallbackHelperContainer, new LoadUrlParams(URL_3));
+        loadUrl(contentViewCore, testCallbackHelperContainer, new LoadUrlParams(URL_4));
+        loadUrl(contentViewCore, testCallbackHelperContainer, new LoadUrlParams(URL_5));
+        loadUrl(contentViewCore, testCallbackHelperContainer, new LoadUrlParams(URL_6));
+        loadUrl(contentViewCore, testCallbackHelperContainer, new LoadUrlParams(URL_7));
 
-        ContentViewCore contentViewCore = contentView.getContentViewCore();
-        NavigationHistory history = contentViewCore
-                .getDirectedNavigationHistory(false, 3);
+        NavigationHistory history = contentViewCore.getDirectedNavigationHistory(false, 3);
         assertEquals(3, history.getEntryCount());
         assertEquals(URL_6, history.getEntryAtIndex(0).getUrl());
         assertEquals(URL_5, history.getEntryAtIndex(1).getUrl());
         assertEquals(URL_4, history.getEntryAtIndex(2).getUrl());
 
-        history = contentView.getContentViewCore()
-                .getDirectedNavigationHistory(true, 3);
+        history = contentViewCore.getDirectedNavigationHistory(true, 3);
         assertEquals(history.getEntryCount(), 0);
 
-        goBack(contentView, testCallbackHelperContainer);
-        goBack(contentView, testCallbackHelperContainer);
-        goBack(contentView, testCallbackHelperContainer);
+        goBack(contentViewCore, testCallbackHelperContainer);
+        goBack(contentViewCore, testCallbackHelperContainer);
+        goBack(contentViewCore, testCallbackHelperContainer);
 
         history = contentViewCore.getDirectedNavigationHistory(false, 4);
         assertEquals(3, history.getEntryCount());
@@ -110,20 +107,20 @@
 
         ContentShellActivity activity = launchContentShellWithUrl(URL_LOADTIME);
         waitForActiveShellToBeDoneLoading();
-        ContentView contentView = activity.getActiveContentView();
+        ContentViewCore contentViewCore = activity.getActiveContentViewCore();
         TestCallbackHelperContainer testCallbackHelperContainer =
-                new TestCallbackHelperContainer(contentView);
+                new TestCallbackHelperContainer(contentViewCore);
         OnEvaluateJavaScriptResultHelper javascriptHelper = new OnEvaluateJavaScriptResultHelper();
 
         // Grab the first timestamp.
-        javascriptHelper.evaluateJavaScript(contentView.getContentViewCore(), "getLoadtime();");
+        javascriptHelper.evaluateJavaScript(contentViewCore, "getLoadtime();");
         javascriptHelper.waitUntilHasValue();
         String firstTimestamp = javascriptHelper.getJsonResultAndClear();
         assertNotNull("Timestamp was null.", firstTimestamp);
 
         // Grab the timestamp after a reload and make sure they don't match.
-        reload(contentView, testCallbackHelperContainer);
-        javascriptHelper.evaluateJavaScript(contentView.getContentViewCore(), "getLoadtime();");
+        reload(contentViewCore, testCallbackHelperContainer);
+        javascriptHelper.evaluateJavaScript(contentViewCore, "getLoadtime();");
         javascriptHelper.waitUntilHasValue();
         String secondTimestamp = javascriptHelper.getJsonResultAndClear();
         assertNotNull("Timestamp was null.", secondTimestamp);
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/OWNERS b/content/public/android/javatests/src/org/chromium/content/browser/OWNERS
index bec75bf..836737f 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/OWNERS
+++ b/content/public/android/javatests/src/org/chromium/content/browser/OWNERS
@@ -1,6 +1,6 @@
 # Device Motion / Orientation API related
-per-file DeviceMotionAndOrientationTest.java=mvanouwerkerk@chromium.org
-per-file DeviceMotionAndOrientationTest.java=timvolodine@chromium.org
+per-file DeviceSensorsTest.java=mvanouwerkerk@chromium.org
+per-file DeviceSensorsTest.java=timvolodine@chromium.org
 
 # Geolocation API related
 per-file LocationProviderTest.java=mvanouwerkerk@chromium.org
@@ -9,5 +9,8 @@
 # Screen Orientation API related
 per-file ScreenOrientation*.java=mlamouri@chromium.org
 
+# Battery Status API related
+per-file BatteryStatusManagerTest.java=timvolodine@chromium.org
+
 # Input handling related
 jdduke@chromium.org
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/ScreenOrientationIntegrationTest.java b/content/public/android/javatests/src/org/chromium/content/browser/ScreenOrientationIntegrationTest.java
index 2b5ee2a..36f089d 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/ScreenOrientationIntegrationTest.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/ScreenOrientationIntegrationTest.java
@@ -24,7 +24,7 @@
             "<body onorientationchange='changes++;'>foo</body>" +
             "</html>");
 
-    private ContentView mContentView;
+    private ContentViewCore mContentViewCore;
 
     /**
      * Returns the screen orientation as seen by |window.orientation|.
@@ -33,7 +33,7 @@
             throws InterruptedException, TimeoutException {
         return Integer.parseInt(
             JavaScriptUtils.executeJavaScriptAndWaitForResult(
-                    mContentView.getContentViewCore(),
+                    mContentViewCore,
                     "window.orientation"));
     }
 
@@ -45,7 +45,7 @@
             throws InterruptedException, TimeoutException {
         return Integer.parseInt(
             JavaScriptUtils.executeJavaScriptAndWaitForResult(
-                    mContentView.getContentViewCore(),
+                    mContentViewCore,
                     "changes"));
     }
 
@@ -53,7 +53,7 @@
      * Simulate a screen orientation change for the web content.
      */
     private void updateScreenOrientationForContent(int orientation) {
-        mContentView.getContentViewCore().sendOrientationChangeEvent(orientation);
+        mContentViewCore.sendOrientationChangeEvent(orientation);
     }
 
     @Override
@@ -63,7 +63,7 @@
         ContentShellActivity activity = launchContentShellWithUrl(DEFAULT_URL);
         waitForActiveShellToBeDoneLoading();
 
-        mContentView = activity.getActiveContentView();
+        mContentViewCore = activity.getActiveContentViewCore();
     }
 
     @SmallTest
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/ScreenOrientationProviderTest.java b/content/public/android/javatests/src/org/chromium/content/browser/ScreenOrientationProviderTest.java
index 8e70da6..5f14424 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/ScreenOrientationProviderTest.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/ScreenOrientationProviderTest.java
@@ -42,16 +42,11 @@
                 return mObserver.mOrientation == 90;
             case ScreenOrientationValues.LANDSCAPE_SECONDARY:
                 return mObserver.mOrientation == -90;
-            case ScreenOrientationValues.PORTRAIT_PRIMARY |
-                    ScreenOrientationValues.PORTRAIT_SECONDARY:
+            case ScreenOrientationValues.PORTRAIT:
                 return mObserver.mOrientation == 0 || mObserver.mOrientation == 180;
-            case ScreenOrientationValues.LANDSCAPE_PRIMARY |
-                    ScreenOrientationValues.LANDSCAPE_SECONDARY:
+            case ScreenOrientationValues.LANDSCAPE:
                 return mObserver.mOrientation == 90 || mObserver.mOrientation == -90;
-            case ScreenOrientationValues.PORTRAIT_PRIMARY |
-                    ScreenOrientationValues.PORTRAIT_SECONDARY |
-                    ScreenOrientationValues.LANDSCAPE_PRIMARY |
-                    ScreenOrientationValues.LANDSCAPE_SECONDARY:
+            case ScreenOrientationValues.ANY:
                 // The orientation should not change but might and the value could be anything.
                 return true;
             default:
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/TestsJavaScriptEvalTest.java b/content/public/android/javatests/src/org/chromium/content/browser/TestsJavaScriptEvalTest.java
index 94dd854..dc61d4c 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/TestsJavaScriptEvalTest.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/TestsJavaScriptEvalTest.java
@@ -32,15 +32,15 @@
         launchContentShellWithUrl(JSTEST_URL);
         assertTrue("Page failed to load", waitForActiveShellToBeDoneLoading());
 
-        final ContentView view = getActivity().getActiveContentView();
+        final ContentViewCore contentViewCore = getContentViewCore();
         for (int i = 0; i < 30; ++i) {
             for (int j = 0; j < 10; ++j) {
                 // Start evaluation of a JavaScript script -- we don't need a result.
-                view.getContentViewCore().evaluateJavaScript("foobar();", null);
+                contentViewCore.evaluateJavaScript("foobar();", null);
             }
             // DOMUtils does need to evaluate a JavaScript and get its result to get DOM bounds.
             assertNotNull("Failed to get bounds",
-                    DOMUtils.getNodeBounds(view.getContentViewCore(), "test"));
+                    DOMUtils.getNodeBounds(contentViewCore, "test"));
         }
     }
 }
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/input/AdapterInputConnectionTest.java b/content/public/android/javatests/src/org/chromium/content/browser/input/AdapterInputConnectionTest.java
index a0b5346..ad643a5 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/input/AdapterInputConnectionTest.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/input/AdapterInputConnectionTest.java
@@ -39,7 +39,7 @@
         EditorInfo info = new EditorInfo();
         mEditable = Editable.Factory.getInstance().newEditable("");
         mConnection = new AdapterInputConnection(
-                getActivity().getActiveContentView(), imeAdapter, mEditable, info);
+                getContentViewCore().getContainerView(), imeAdapter, mEditable, info);
     }
 
     @MediumTest
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/input/ImeTest.java b/content/public/android/javatests/src/org/chromium/content/browser/input/ImeTest.java
index bd4167d..bd9d98d 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/input/ImeTest.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/input/ImeTest.java
@@ -19,7 +19,6 @@
 import org.chromium.base.ThreadUtils;
 import org.chromium.base.test.util.Feature;
 import org.chromium.base.test.util.UrlUtils;
-import org.chromium.content.browser.ContentView;
 import org.chromium.content.browser.ContentViewCore;
 import org.chromium.content.browser.test.util.Criteria;
 import org.chromium.content.browser.test.util.CriteriaHelper;
@@ -48,7 +47,6 @@
     private TestAdapterInputConnection mConnection;
     private ImeAdapter mImeAdapter;
 
-    private ContentView mContentView;
     private ContentViewCore mContentViewCore;
     private TestCallbackHelperContainer mCallbackContainer;
     private TestInputMethodManagerWrapper mInputMethodManagerWrapper;
@@ -59,7 +57,6 @@
 
         launchContentShellWithUrl(DATA_URL);
         assertTrue("Page failed to load", waitForActiveShellToBeDoneLoading());
-        mContentView = getContentView();
         mContentViewCore = getContentViewCore();
 
         mInputMethodManagerWrapper = new TestInputMethodManagerWrapper(mContentViewCore);
@@ -68,12 +65,12 @@
         mContentViewCore.setAdapterInputConnectionFactory(
                 new TestAdapterInputConnectionFactory());
 
-        mCallbackContainer = new TestCallbackHelperContainer(getContentView());
+        mCallbackContainer = new TestCallbackHelperContainer(mContentViewCore);
         // TODO(aurimas) remove this wait once crbug.com/179511 is fixed.
         assertWaitForPageScaleFactorMatch(2);
         assertTrue(DOMUtils.waitForNonZeroNodeBounds(
                 mContentViewCore, "input_text"));
-        DOMUtils.clickNode(this, mContentView, "input_text");
+        DOMUtils.clickNode(this, mContentViewCore, "input_text");
         assertWaitForKeyboardStatus(true);
 
         mConnection = (TestAdapterInputConnection) getAdapterInputConnection();
@@ -136,10 +133,10 @@
         commitText(mConnection, "hello", 1);
         waitAndVerifyEditableCallback(mConnection.mImeUpdateQueue, 1, "hello", 5, 5, -1, -1);
 
-        DOMUtils.clickNode(this, mContentView, "input_radio");
+        DOMUtils.clickNode(this, mContentViewCore, "input_radio");
         assertWaitForKeyboardStatus(false);
 
-        DOMUtils.clickNode(this, mContentView, "input_text");
+        DOMUtils.clickNode(this, mContentViewCore, "input_text");
         assertWaitForKeyboardStatus(true);
         assertEquals(5, mInputMethodManagerWrapper.getEditorInfo().initialSelStart);
         assertEquals(5, mInputMethodManagerWrapper.getEditorInfo().initialSelEnd);
@@ -207,13 +204,13 @@
     @SmallTest
     @Feature({"TextInput", "Main"})
     public void testShowImeIfNeeded() throws Throwable {
-        DOMUtils.focusNode(this, mContentViewCore, "input_radio");
+        DOMUtils.focusNode(mContentViewCore, "input_radio");
         assertWaitForKeyboardStatus(false);
 
         performShowImeIfNeeded();
         assertWaitForKeyboardStatus(false);
 
-        DOMUtils.focusNode(this, mContentViewCore, "input_text");
+        DOMUtils.focusNode(mContentViewCore, "input_text");
         assertWaitForKeyboardStatus(false);
 
         performShowImeIfNeeded();
@@ -224,9 +221,9 @@
     @Feature({"TextInput", "Main"})
     public void testFinishComposingText() throws Throwable {
         // Focus the textarea. We need to do the following steps because we are focusing using JS.
-        DOMUtils.focusNode(this, mContentViewCore, "input_radio");
+        DOMUtils.focusNode(mContentViewCore, "input_radio");
         assertWaitForKeyboardStatus(false);
-        DOMUtils.focusNode(this, mContentViewCore, "textarea");
+        DOMUtils.focusNode(mContentViewCore, "textarea");
         assertWaitForKeyboardStatus(false);
         performShowImeIfNeeded();
         assertWaitForKeyboardStatus(true);
@@ -257,9 +254,9 @@
     @Feature({"TextInput", "Main"})
     public void testEnterKeyEventWhileComposingText() throws Throwable {
         // Focus the textarea. We need to do the following steps because we are focusing using JS.
-        DOMUtils.focusNode(this, mContentViewCore, "input_radio");
+        DOMUtils.focusNode(mContentViewCore, "input_radio");
         assertWaitForKeyboardStatus(false);
-        DOMUtils.focusNode(this, mContentViewCore, "textarea");
+        DOMUtils.focusNode(mContentViewCore, "textarea");
         assertWaitForKeyboardStatus(false);
         performShowImeIfNeeded();
         assertWaitForKeyboardStatus(true);
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/input/InsertionHandleTest.java b/content/public/android/javatests/src/org/chromium/content/browser/input/InsertionHandleTest.java
index e49f87d..b9284cb 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/input/InsertionHandleTest.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/input/InsertionHandleTest.java
@@ -12,11 +12,11 @@
 import android.text.Editable;
 import android.text.Selection;
 import android.view.KeyEvent;
+import android.view.View;
 
 import org.chromium.base.test.util.DisabledTest;
 import org.chromium.base.test.util.Feature;
 import org.chromium.base.test.util.UrlUtils;
-import org.chromium.content.browser.ContentView;
 import org.chromium.content.browser.RenderCoordinates;
 import org.chromium.content.browser.test.util.Criteria;
 import org.chromium.content.browser.test.util.CriteriaHelper;
@@ -203,7 +203,7 @@
 
         // The input box does not go to the edge of the screen, and neither should the insertion
         // handle.
-        dragToX = getContentView().getWidth();
+        dragToX = getContentViewCore().getContainerView().getWidth();
         dragHandleTo(dragToX, dragToY);
         assertTrue(handle.getPositionX() < dragToX - 100);
     }
@@ -260,7 +260,7 @@
         float bottom = renderCoordinates.fromLocalCssToPix(nodeBounds.bottom) + offsetY;
 
         TouchCommon touchCommon = new TouchCommon(this);
-        touchCommon.singleClickView(getContentView(),
+        touchCommon.singleClickView(getContentViewCore().getContainerView(),
                 (int)(left + 3 * (right - left) / 4), (int)(top + (bottom - top) / 2));
 
 
@@ -268,7 +268,7 @@
         assertTrue(waitForHasSelectionPosition());
 
         // TODO(cjhopman): Wait for keyboard display finished?
-        touchCommon.singleClickView(getContentView(),
+        touchCommon.singleClickView(getContentViewCore().getContainerView(),
                 (int)(left + (right - left) / 4), (int)(top + (bottom - top) / 2));
         assertTrue(waitForHandleShowingEquals(true));
         assertTrue(waitForHandleViewStopped());
@@ -322,7 +322,7 @@
         HandleView handle = ihc.getHandleViewForTest();
         int initialX = handle.getPositionX();
         int initialY = handle.getPositionY();
-        ContentView view = getContentView();
+        View view = getContentViewCore().getContainerView();
 
         int fromLocation[] = TestTouchUtils.getAbsoluteLocationFromRelative(view, initialX,
                 initialY + VERTICAL_OFFSET);
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/input/SelectPopupTest.java b/content/public/android/javatests/src/org/chromium/content/browser/input/SelectPopupTest.java
index 51e4a9a..24842fa 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/input/SelectPopupTest.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/input/SelectPopupTest.java
@@ -10,7 +10,6 @@
 
 import org.chromium.base.test.util.Feature;
 import org.chromium.base.test.util.UrlUtils;
-import org.chromium.content.browser.ContentView;
 import org.chromium.content.browser.ContentViewCore;
 import org.chromium.content.browser.test.util.Criteria;
 import org.chromium.content.browser.test.util.CriteriaHelper;
@@ -41,18 +40,14 @@
     private class PopupShowingCriteria implements Criteria {
         @Override
         public boolean isSatisfied() {
-            ContentViewCore contentViewCore
-                    = getActivity().getActiveContentView().getContentViewCore();
-            return contentViewCore.getSelectPopupForTest() != null;
+           return getContentViewCore().getSelectPopupForTest() != null;
         }
     }
 
     private class PopupHiddenCriteria implements Criteria {
         @Override
         public boolean isSatisfied() {
-            ContentViewCore contentViewCore
-                    = getActivity().getActiveContentView().getContentViewCore();
-            return contentViewCore.getSelectPopupForTest() == null;
+            return getContentViewCore().getSelectPopupForTest() == null;
         }
     }
 
@@ -76,14 +71,12 @@
         assertTrue("The select popup is shown after load.",
                 CriteriaHelper.pollForCriteria(new PopupHiddenCriteria()));
 
-        final ContentView view = getActivity().getActiveContentView();
-        final TestCallbackHelperContainer viewClient =
-                new TestCallbackHelperContainer(view);
-        final OnPageFinishedHelper onPageFinishedHelper =
-                viewClient.getOnPageFinishedHelper();
+        final ContentViewCore viewCore = getContentViewCore();
+        final TestCallbackHelperContainer viewClient = new TestCallbackHelperContainer(viewCore);
+        final OnPageFinishedHelper onPageFinishedHelper = viewClient.getOnPageFinishedHelper();
 
         // Once clicked, the popup should show up.
-        DOMUtils.clickNode(this, view, "select");
+        DOMUtils.clickNode(this, viewCore, "select");
         assertTrue("The select popup did not show up on click.",
                 CriteriaHelper.pollForCriteria(new PopupShowingCriteria()));
 
@@ -104,7 +97,7 @@
                 CriteriaHelper.pollForCriteria(new PopupHiddenCriteria()));
 
         // Click the select and wait for the popup to show.
-        DOMUtils.clickNode(this, view, "select");
+        DOMUtils.clickNode(this, viewCore, "select");
         assertTrue("The select popup did not show on click after reload.",
                 CriteriaHelper.pollForCriteria(new PopupShowingCriteria()));
     }
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/input/SelectionHandleTest.java b/content/public/android/javatests/src/org/chromium/content/browser/input/SelectionHandleTest.java
index a0adce4..29b5631 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/input/SelectionHandleTest.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/input/SelectionHandleTest.java
@@ -13,11 +13,11 @@
 import android.text.Editable;
 import android.text.Selection;
 import android.view.MotionEvent;
+import android.view.ViewGroup;
 
 import org.chromium.base.ThreadUtils;
 import org.chromium.base.test.util.Feature;
 import org.chromium.base.test.util.UrlUtils;
-import org.chromium.content.browser.ContentView;
 import org.chromium.content.browser.RenderCoordinates;
 import org.chromium.content.browser.test.util.Criteria;
 import org.chromium.content.browser.test.util.CriteriaHelper;
@@ -403,7 +403,6 @@
 
     private void dragHandleTo(final HandleView handle, final int dragToX, final int dragToY,
             final int steps) throws Throwable {
-        ContentView view = getContentView();
         assertTrue(ThreadUtils.runOnUiThreadBlocking(new Callable<Boolean>() {
             @Override
             public Boolean call() {
@@ -415,7 +414,7 @@
                 int realDragToX = dragToX + (realX - adjustedX);
                 int realDragToY = dragToY + (realY - adjustedY);
 
-                ContentView view = getContentView();
+                ViewGroup view = getContentViewCore().getContainerView();
                 int[] fromLocation = TestTouchUtils.getAbsoluteLocationFromRelative(
                         view, realX, realY);
                 int[] toLocation = TestTouchUtils.getAbsoluteLocationFromRelative(
@@ -468,7 +467,7 @@
         TouchCommon touchCommon = new TouchCommon(this);
         int centerX = nodeWindowBounds.centerX();
         int centerY = nodeWindowBounds.centerY();
-        touchCommon.longPressView(getContentView(), centerX, centerY);
+        touchCommon.longPressView(getContentViewCore().getContainerView(), centerX, centerY);
 
         assertWaitForHandlesShowingEquals(true);
         assertWaitForHandleViewStopped(getStartHandle());
@@ -480,7 +479,7 @@
 
     private void clickToDismissHandles() throws Throwable {
         TestTouchUtils.sleepForDoubleTapTimeout(getInstrumentation());
-        new TouchCommon(this).singleClickView(getContentView(), 0, 0);
+        new TouchCommon(this).singleClickView(getContentViewCore().getContainerView(), 0, 0);
         assertWaitForHandlesShowingEquals(false);
     }
 
diff --git a/content/public/browser/ax_event_notification_details.h b/content/public/browser/ax_event_notification_details.h
index d85fe98..3065e59 100644
--- a/content/public/browser/ax_event_notification_details.h
+++ b/content/public/browser/ax_event_notification_details.h
@@ -7,6 +7,7 @@
 
 #include <vector>
 
+#include "content/common/content_export.h"
 #include "ui/accessibility/ax_enums.h"
 #include "ui/accessibility/ax_node_data.h"
 
@@ -14,7 +15,7 @@
 
 // Use this object in conjunction with the
 // |WebContentsObserver::AccessibilityEventReceived| method.
-struct AXEventNotificationDetails {
+struct CONTENT_EXPORT AXEventNotificationDetails {
  public:
   AXEventNotificationDetails(const std::vector<ui::AXNodeData>& nodes,
                              ui::AXEvent event_type,
diff --git a/content/public/browser/browser_plugin_guest_delegate.cc b/content/public/browser/browser_plugin_guest_delegate.cc
index 40f6dc8..d1b821d 100644
--- a/content/public/browser/browser_plugin_guest_delegate.cc
+++ b/content/public/browser/browser_plugin_guest_delegate.cc
@@ -4,6 +4,8 @@
 
 #include "content/public/browser/browser_plugin_guest_delegate.h"
 
+#include "base/callback.h"
+
 namespace content {
 
 bool BrowserPluginGuestDelegate::HandleKeyboardEvent(
@@ -23,4 +25,24 @@
   return GURL(src);
 }
 
+void BrowserPluginGuestDelegate::RequestMediaAccessPermission(
+    const MediaStreamRequest& request,
+    const MediaResponseCallback& callback) {
+  callback.Run(MediaStreamDevices(),
+               MEDIA_DEVICE_INVALID_STATE,
+               scoped_ptr<MediaStreamUI>());
+}
+
+void BrowserPluginGuestDelegate::CanDownload(
+    const std::string& request_method,
+    const GURL& url,
+    const base::Callback<void(bool)>& callback) {
+  callback.Run(true);
+}
+
+JavaScriptDialogManager*
+BrowserPluginGuestDelegate::GetJavaScriptDialogManager() {
+  return NULL;
+}
+
 }  // namespace content
diff --git a/content/public/browser/browser_plugin_guest_delegate.h b/content/public/browser/browser_plugin_guest_delegate.h
index 01deb00..efb036c 100644
--- a/content/public/browser/browser_plugin_guest_delegate.h
+++ b/content/public/browser/browser_plugin_guest_delegate.h
@@ -11,12 +11,14 @@
 #include "base/values.h"
 #include "content/common/content_export.h"
 #include "content/public/common/browser_plugin_permission_type.h"
+#include "content/public/common/media_stream_request.h"
 #include "ui/gfx/geometry/rect.h"
 #include "ui/gfx/size.h"
 #include "url/gurl.h"
 
 namespace content {
 
+class JavaScriptDialogManager;
 struct NativeWebKeyboardEvent;
 
 // Objects implement this interface to get notified about changes in the guest
@@ -99,6 +101,32 @@
   // Notifies that the content size of the guest has changed in autosize mode.
   virtual void SizeChanged(const gfx::Size& old_size,
                            const gfx::Size& new_size) {}
+
+  // Asks permission to use the camera and/or microphone. If permission is
+  // granted, a call should be made to |callback| with the devices. If the
+  // request is denied, a call should be made to |callback| with an empty list
+  // of devices. |request| has the details of the request (e.g. which of audio
+  // and/or video devices are requested, and lists of available devices).
+  virtual void RequestMediaAccessPermission(
+      const MediaStreamRequest& request,
+      const MediaResponseCallback& callback);
+
+  // Asks the delegate if the given guest can download.
+  // Invoking the |callback| synchronously is OK.
+  virtual void CanDownload(const std::string& request_method,
+                           const GURL& url,
+                           const base::Callback<void(bool)>& callback);
+
+  // Asks the delegate if the given guest can lock the pointer.
+  // Invoking the |callback| synchronously is OK.
+  virtual void RequestPointerLockPermission(
+      bool user_gesture,
+      bool last_unlocked_by_target,
+      const base::Callback<void(bool)>& callback) {}
+
+  // Returns a pointer to a service to manage JavaScript dialogs. May return
+  // NULL in which case dialogs aren't shown.
+  virtual JavaScriptDialogManager* GetJavaScriptDialogManager();
 };
 
 }  // namespace content
diff --git a/content/public/browser/content_browser_client.h b/content/public/browser/content_browser_client.h
index 3abafe5..ac40ae2 100644
--- a/content/public/browser/content_browser_client.h
+++ b/content/public/browser/content_browser_client.h
@@ -87,10 +87,12 @@
 class BrowserPluginGuestDelegate;
 class BrowserPpapiHost;
 class BrowserURLHandler;
+class DesktopNotificationDelegate;
 class ExternalVideoSurfaceContainer;
 class LocationProvider;
 class MediaObserver;
 class QuotaPermissionContext;
+class RenderFrameHost;
 class RenderProcessHost;
 class RenderViewHost;
 class RenderViewHostDelegateView;
@@ -448,12 +450,12 @@
   // return NULL if they're not interested.
   virtual MediaObserver* GetMediaObserver();
 
-  // Asks permission to show desktop notifications.
+  // Asks permission to show desktop notifications. |callback| needs to be run
+  // when the user approves the request.
   virtual void RequestDesktopNotificationPermission(
       const GURL& source_origin,
-      int callback_context,
-      int render_process_id,
-      int render_view_id) {}
+      RenderFrameHost* render_frame_host,
+      base::Closure& callback) {}
 
   // Checks if the given page has permission to show desktop notifications.
   // This is called on the IO thread.
@@ -463,19 +465,13 @@
           ResourceContext* context,
           int render_process_id);
 
-  // Show a desktop notification.  If |worker| is true, the request came from an
-  // HTML5 web worker, otherwise, it came from a renderer.
+  // Show a desktop notification. If |cancel_callback| is non-null, it's set to
+  // a callback which can be used to cancel the notification.
   virtual void ShowDesktopNotification(
       const ShowDesktopNotificationHostMsgParams& params,
-      int render_process_id,
-      int render_view_id,
-      bool worker) {}
-
-  // Cancels a displayed desktop notification.
-  virtual void CancelDesktopNotification(
-      int render_process_id,
-      int render_view_id,
-      int notification_id) {}
+      RenderFrameHost* render_frame_host,
+      DesktopNotificationDelegate* delegate,
+      base::Closure* cancel_callback) {}
 
   // Returns true if the given page is allowed to open a window of the given
   // type. If true is returned, |no_javascript_access| will indicate whether
diff --git a/content/public/browser/desktop_notification_delegate.h b/content/public/browser/desktop_notification_delegate.h
new file mode 100644
index 0000000..27c5fd7
--- /dev/null
+++ b/content/public/browser/desktop_notification_delegate.h
@@ -0,0 +1,31 @@
+// 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.
+
+#ifndef CONTENT_PUBLIC_BROWSER_DESKTOP_NOTIFICATION_DELEGATE_H_
+#define CONTENT_PUBLIC_BROWSER_DESKTOP_NOTIFICATION_DELEGATE_H_
+
+namespace content {
+
+// A delegate used by ContentBrowserClient::ShowDesktopNotification to report
+// the result of a desktop notification.
+class DesktopNotificationDelegate {
+ public:
+  virtual ~DesktopNotificationDelegate() {}
+
+  // The notification was shown.
+  virtual void NotificationDisplayed() = 0;
+
+  // The notification couldn't be shown due to an error.
+  virtual void NotificationError() = 0;
+
+  // The notification was closed.
+  virtual void NotificationClosed(bool by_user) = 0;
+
+  // The user clicked on the notification.
+  virtual void NotificationClick() = 0;
+};
+
+}  // namespace content
+
+#endif  // CONTENT_PUBLIC_BROWSER_DESKTOP_NOTIFICATION_DELEGATE_H_
diff --git a/content/public/browser/navigation_entry.h b/content/public/browser/navigation_entry.h
index f573a2a..6d69b0d 100644
--- a/content/public/browser/navigation_entry.h
+++ b/content/public/browser/navigation_entry.h
@@ -210,6 +210,11 @@
   virtual void SetHttpStatusCode(int http_status_code) = 0;
   virtual int GetHttpStatusCode() const = 0;
 
+  // The redirect chain traversed during this navigation, from the initial
+  // redirecting URL to the final non-redirecting current URL.
+  virtual void SetRedirectChain(const std::vector<GURL>& redirects) = 0;
+  virtual const std::vector<GURL>& GetRedirectChain() const = 0;
+
   // True if this entry is restored and hasn't been loaded.
   virtual bool IsRestored() const = 0;
 };
diff --git a/content/public/browser/render_process_host.h b/content/public/browser/render_process_host.h
index c22d449..6424099 100644
--- a/content/public/browser/render_process_host.h
+++ b/content/public/browser/render_process_host.h
@@ -31,9 +31,6 @@
 class StoragePartition;
 struct GlobalRequestID;
 
-typedef base::Thread* (*RendererMainThreadFactoryFunction)(
-    const std::string& id);
-
 // Interface that represents the browser side of the browser <-> renderer
 // communication channel. There will generally be one RenderProcessHost per
 // renderer process.
@@ -285,9 +282,6 @@
   // Returns the current max number of renderer processes used by the content
   // module.
   static size_t GetMaxRendererProcessCount();
-
-  static void RegisterRendererMainThreadFactory(
-      RendererMainThreadFactoryFunction create);
 };
 
 }  // namespace content.
diff --git a/content/public/browser/render_view_host.h b/content/public/browser/render_view_host.h
index 74a2909..6a6b349 100644
--- a/content/public/browser/render_view_host.h
+++ b/content/public/browser/render_view_host.h
@@ -91,16 +91,6 @@
   // image at that location).
   virtual void CopyImageAt(int x, int y) = 0;
 
-  // Notifies the renderer about the result of a desktop notification.
-  virtual void DesktopNotificationPermissionRequestDone(
-      int callback_context) = 0;
-  virtual void DesktopNotificationPostDisplay(int callback_context) = 0;
-  virtual void DesktopNotificationPostError(int notification_id,
-                                    const base::string16& message) = 0;
-  virtual void DesktopNotificationPostClose(int notification_id,
-                                            bool by_user) = 0;
-  virtual void DesktopNotificationPostClick(int notification_id) = 0;
-
   // Notifies the listener that a directory enumeration is complete.
   virtual void DirectoryEnumerationFinished(
       int request_id,
@@ -225,9 +215,6 @@
 
   // Asks the renderer to send the rects of the current find matches.
   virtual void RequestFindMatchRects(int current_version) = 0;
-
-  // Disables fullscreen media playback for encrypted video.
-  virtual void DisableFullscreenEncryptedMediaPlayback() = 0;
 #endif
 
  private:
diff --git a/content/public/browser/render_widget_host.h b/content/public/browser/render_widget_host.h
index 70ba230..0e71ac8 100644
--- a/content/public/browser/render_widget_host.h
+++ b/content/public/browser/render_widget_host.h
@@ -106,9 +106,6 @@
 // the RenderWidgetHost's IPC message map.
 class CONTENT_EXPORT RenderWidgetHost : public IPC::Sender {
  public:
-  // Returns the size of all the backing stores used for rendering
-  static size_t BackingStoreMemorySize();
-
   // Returns the RenderWidgetHost given its ID and the ID of its render process.
   // Returns NULL if the IDs do not correspond to a live RenderWidgetHost.
   static RenderWidgetHost* FromID(int32 process_id, int32 routing_id);
@@ -191,11 +188,6 @@
   virtual void LockBackingStore() = 0;
   virtual void UnlockBackingStore() = 0;
 #endif
-#if defined(OS_MACOSX)
-  virtual gfx::Size GetBackingStoreSize() = 0;
-  virtual bool CopyFromBackingStoreToCGContext(const CGRect& dest_rect,
-                                               CGContextRef target) = 0;
-#endif
 
   // Send a command to the renderer to turn on full accessibility.
   virtual void EnableFullAccessibilityMode() = 0;
diff --git a/content/public/browser/render_widget_host_view_mac_delegate.h b/content/public/browser/render_widget_host_view_mac_delegate.h
index d5ddd80..06af825 100644
--- a/content/public/browser/render_widget_host_view_mac_delegate.h
+++ b/content/public/browser/render_widget_host_view_mac_delegate.h
@@ -27,6 +27,15 @@
 // normal processing should take place.
 - (BOOL)handleEvent:(NSEvent*)event;
 
+// Notification that a wheel event was unhandled.
+- (void)gotUnhandledWheelEvent;
+
+// Notification of scroll offset pinning.
+- (void)scrollOffsetPinnedToLeft:(BOOL)left toRight:(BOOL)right;
+
+// Notification of whether the view has a horizontal scrollbar.
+- (void)setHasHorizontalScrollbar:(BOOL)has_horizontal_scrollbar;
+
 // Provides validation of user interface items. If the return value is NO, then
 // the delegate is unaware of that item and |valid| is undefined.  Otherwise,
 // |valid| contains the validity of the specified item.
@@ -51,11 +60,6 @@
 // 2-finger history swipe in the given direction.
 - (BOOL)canRubberbandLeft:(NSView*)view;
 - (BOOL)canRubberbandRight:(NSView*)view;
-
-// Notification that a wheel event was received.
-// |consumed| indicates whether the renderer or the render_widget_host_view
-// delegate consumed the event.
-- (void)gotWheelEventConsumed:(BOOL)consumed;
 @end
 
 #endif  // CONTENT_PUBLIC_BROWSER_RENDER_WIDGET_HOST_VIEW_MAC_DELEGATE_H_
diff --git a/content/public/browser/utility_process_host.h b/content/public/browser/utility_process_host.h
index c39c76e..756d50f 100644
--- a/content/public/browser/utility_process_host.h
+++ b/content/public/browser/utility_process_host.h
@@ -20,9 +20,6 @@
 class UtilityProcessHostClient;
 struct ChildProcessData;
 
-typedef base::Thread* (*UtilityMainThreadFactoryFunction)(
-    const std::string& id);
-
 // This class acts as the browser-side host to a utility child process.  A
 // utility process is a short-lived process that is created to run a specific
 // task.  This class lives solely on the IO thread.
@@ -72,9 +69,6 @@
 #if defined(OS_POSIX)
   virtual void SetEnv(const base::EnvironmentMap& env) = 0;
 #endif
-
-  CONTENT_EXPORT static void RegisterUtilityMainThreadFactory(
-      UtilityMainThreadFactoryFunction create);
 };
 
 };  // namespace content
diff --git a/content/public/browser/web_contents_delegate.cc b/content/public/browser/web_contents_delegate.cc
index b85daab..5346c2a 100644
--- a/content/public/browser/web_contents_delegate.cc
+++ b/content/public/browser/web_contents_delegate.cc
@@ -37,6 +37,10 @@
   return false;
 }
 
+bool WebContentsDelegate::ShouldPreserveAbortedURLs(WebContents* source) {
+  return false;
+}
+
 bool WebContentsDelegate::AddMessageToConsole(WebContents* source,
                                               int32 level,
                                               const base::string16& message,
@@ -196,4 +200,8 @@
   return gfx::Size();
 }
 
+bool WebContentsDelegate::IsNeverVisible(WebContents* web_contents) {
+  return false;
+}
+
 }  // namespace content
diff --git a/content/public/browser/web_contents_delegate.h b/content/public/browser/web_contents_delegate.h
index b869a52..d22d7c7 100644
--- a/content/public/browser/web_contents_delegate.h
+++ b/content/public/browser/web_contents_delegate.h
@@ -173,6 +173,11 @@
   // Default is false.
   virtual bool ShouldSuppressDialogs();
 
+  // Returns whether pending NavigationEntries for aborted browser-initiated
+  // navigations should be preserved (and thus returned from GetVisibleURL).
+  // Defaults to false.
+  virtual bool ShouldPreserveAbortedURLs(WebContents* source);
+
   // Add a message to the console. Returning true indicates that the delegate
   // handled the message. If false is returned the default logging mechanism
   // will be used for the message.
@@ -461,6 +466,9 @@
   virtual void MoveValidationMessage(WebContents* web_contents,
                                      const gfx::Rect& anchor_in_root_view) {}
 
+  // Returns true if the WebContents is never visible.
+  virtual bool IsNeverVisible(WebContents* web_contents);
+
  protected:
   virtual ~WebContentsDelegate();
 
diff --git a/content/public/common/assert_matching_enums.cc b/content/public/common/assert_matching_enums.cc
index 92c7ed5..9a0e898 100644
--- a/content/public/common/assert_matching_enums.cc
+++ b/content/public/common/assert_matching_enums.cc
@@ -7,21 +7,28 @@
 
 #include "base/macros.h"
 #include "content/public/common/screen_orientation_values.h"
-#include "third_party/WebKit/public/platform/WebScreenOrientation.h"
+#include "third_party/WebKit/public/platform/WebScreenOrientationLockType.h"
 
 namespace content {
 
 #define COMPILE_ASSERT_MATCHING_ENUM(expected, actual) \
   COMPILE_ASSERT(int(expected) == int(actual), mismatching_enums)
 
-// TODO(mlamouri): this is temporary to allow to change the enum in Blink.
-// COMPILE_ASSERT_MATCHING_ENUM(blink::WebScreenOrientationPortraitPrimary,
-//     PORTRAIT_PRIMARY);
-// COMPILE_ASSERT_MATCHING_ENUM(blink::WebScreenOrientationLandscapePrimary,
-//     LANDSCAPE_PRIMARY);
-// COMPILE_ASSERT_MATCHING_ENUM(blink::WebScreenOrientationPortraitSecondary,
-//     PORTRAIT_SECONDARY);
-// COMPILE_ASSERT_MATCHING_ENUM(blink::WebScreenOrientationLandscapeSecondary,
-//     LANDSCAPE_SECONDARY);
+COMPILE_ASSERT_MATCHING_ENUM(blink::WebScreenOrientationLockDefault,
+    DEFAULT);
+COMPILE_ASSERT_MATCHING_ENUM(blink::WebScreenOrientationLockPortraitPrimary,
+    PORTRAIT_PRIMARY);
+COMPILE_ASSERT_MATCHING_ENUM(blink::WebScreenOrientationLockPortraitSecondary,
+    PORTRAIT_SECONDARY);
+COMPILE_ASSERT_MATCHING_ENUM(blink::WebScreenOrientationLockLandscapePrimary,
+    LANDSCAPE_PRIMARY);
+COMPILE_ASSERT_MATCHING_ENUM(blink::WebScreenOrientationLockLandscapeSecondary,
+    LANDSCAPE_SECONDARY);
+COMPILE_ASSERT_MATCHING_ENUM(blink::WebScreenOrientationLockAny,
+    ANY);
+COMPILE_ASSERT_MATCHING_ENUM(blink::WebScreenOrientationLockLandscape,
+    LANDSCAPE);
+COMPILE_ASSERT_MATCHING_ENUM(blink::WebScreenOrientationLockPortrait,
+    PORTRAIT);
 
 } // namespace content
diff --git a/content/public/common/browser_plugin_permission_type.h b/content/public/common/browser_plugin_permission_type.h
index 9a17ef6..d046d16 100644
--- a/content/public/common/browser_plugin_permission_type.h
+++ b/content/public/common/browser_plugin_permission_type.h
@@ -9,24 +9,12 @@
   // Unknown type of permission request.
   BROWSER_PLUGIN_PERMISSION_TYPE_UNKNOWN,
 
-  BROWSER_PLUGIN_PERMISSION_TYPE_DOWNLOAD,
-  // Media access (audio/video) permission request type.
-  BROWSER_PLUGIN_PERMISSION_TYPE_MEDIA,
-
-  BROWSER_PLUGIN_PERMISSION_TYPE_POINTER_LOCK,
-
   // New window requests.
   // Note: Even though new windows don't use the permission API, the new window
   // API is sufficiently similar that it's convenient to consider it a
   // permission type for code reuse.
   BROWSER_PLUGIN_PERMISSION_TYPE_NEW_WINDOW,
 
-  // JavaScript Dialogs: prompt, alert, confirm
-  // Note: Even through dialogs do not use the permission API, the dialog API
-  // is sufficiently similiar that it's convenient to consider it a permission
-  // type for code reuse.
-  BROWSER_PLUGIN_PERMISSION_TYPE_JAVASCRIPT_DIALOG,
-
   BROWSER_PLUGIN_PERMISSION_TYPE_CONTENT_END,
 };
 
diff --git a/content/public/common/common_param_traits_macros.h b/content/public/common/common_param_traits_macros.h
index 37c88cb..c08534d 100644
--- a/content/public/common/common_param_traits_macros.h
+++ b/content/public/common/common_param_traits_macros.h
@@ -159,7 +159,6 @@
   IPC_STRUCT_TRAITS_MEMBER(allow_displaying_insecure_content)
   IPC_STRUCT_TRAITS_MEMBER(allow_running_insecure_content)
   IPC_STRUCT_TRAITS_MEMBER(enable_scroll_animator)
-  IPC_STRUCT_TRAITS_MEMBER(visual_word_movement_enabled)
   IPC_STRUCT_TRAITS_MEMBER(password_echo_enabled)
   IPC_STRUCT_TRAITS_MEMBER(should_clear_document_background)
   IPC_STRUCT_TRAITS_MEMBER(lazy_layout_enabled)
diff --git a/content/public/common/content_switches.cc b/content/public/common/content_switches.cc
index 478ba4b..c1fc1c0 100644
--- a/content/public/common/content_switches.cc
+++ b/content/public/common/content_switches.cc
@@ -38,13 +38,6 @@
 // is terminated.
 const char kAuditHandles[]                  = "enable-handle-auditing";
 
-// Blacklist the GPU for accelerated compositing.
-const char kBlacklistAcceleratedCompositing[] =
-    "blacklist-accelerated-compositing";
-
-// Blacklist the GPU for WebGL.
-const char kBlacklistWebGL[]                = "blacklist-webgl";
-
 // Choose which logging channels in blink platform to activate.  See
 // Logging.cpp in blink's Source/platform for a list of available channels.
 const char kBlinkPlatformLogChannels[]      = "blink-platform-log-channels";
@@ -83,9 +76,6 @@
 // Disable gpu-accelerated 2d canvas.
 const char kDisableAccelerated2dCanvas[]    = "disable-accelerated-2d-canvas";
 
-// Disables accelerated compositing.
-const char kDisableAcceleratedCompositing[] = "disable-accelerated-compositing";
-
 // Disables accelerated compositing for backgrounds of root layers with
 // background-attachment: fixed.
 const char kDisableAcceleratedFixedRootBackground[] =
@@ -148,6 +138,9 @@
 extern const char kDisableDomainBlockingFor3DAPIs[] =
     "disable-domain-blocking-for-3d-apis";
 
+// Disable running the SharedWorker inside the renderer process.
+const char kDisableEmbeddedSharedWorker[]    = "disable-embedded-shared-worker";
+
 // Disable experimental WebGL support.
 const char kDisableExperimentalWebGL[]      = "disable-webgl";
 
@@ -336,7 +329,7 @@
 const char kEnableDeferredFilters[]         = "enable-deferred-filters";
 
 // Enables accelerated compositing for backgrounds of root layers with
-// background-attachment: fixed. Requires kForceCompositingMode.
+// background-attachment: fixed.
 const char kEnableAcceleratedFixedRootBackground[] =
     "enable-accelerated-fixed-root-background";
 
@@ -398,9 +391,6 @@
 // Enables restarting interrupted downloads.
 const char kEnableDownloadResumption[]      = "enable-download-resumption";
 
-// Enables running the SharedWorker inside the renderer process.
-const char kEnableEmbeddedSharedWorker[]    = "enable-embedded-shared-worker";
-
 // Enables support for Encrypted Media Extensions (e.g. MediaKeys).
 const char kEnableEncryptedMedia[] = "enable-encrypted-media";
 
@@ -530,9 +520,6 @@
 // On platforms that support it, enables smooth scroll animation.
 const char kEnableSmoothScrolling[]         = "enable-smooth-scrolling";
 
-// Allow the compositor to use its software implementation if GL fails.
-const char kEnableSoftwareCompositing[]     = "enable-software-compositing";
-
 // Enable spatial navigation
 const char kEnableSpatialNavigation[]       = "enable-spatial-navigation";
 
@@ -590,9 +577,6 @@
 const char kMainFrameResizesAreOrientationChanges[] =
     "main-frame-resizes-are-orientation-changes";
 
-// Enables moving cursor by word in visual order.
-const char kEnableVisualWordMovement[]      = "enable-visual-word-movement";
-
 // Enable the Vtune profiler support.
 const char kEnableVtune[]                   = "enable-vtune-support";
 
@@ -608,8 +592,7 @@
 // Load NPAPI plugins from the specified directory.
 const char kExtraPluginDir[]                = "extra-plugin-dir";
 
-// If accelerated compositing is supported, always enter compositing mode for
-// the base layer even when compositing is not strictly required.
+// Enable force_compositing_mode in layout tests.
 const char kForceCompositingMode[]          = "force-compositing-mode";
 
 // Some field trials may be randomized in the browser, and the randomly selected
@@ -1016,6 +999,10 @@
 // Enable the recognition part of the Web Speech API.
 const char kEnableSpeechRecognition[]       = "enable-speech-recognition";
 
+// Always use the video overlay for the embedded video.
+// This switch is intended only for tests.
+const char kForceUseOverlayEmbeddedVideo[] = "force-use-overlay-embedded-video";
+
 // The telephony region (ISO country code) to use in phone number detection.
 const char kNetworkCountryIso[] = "network-country-iso";
 
diff --git a/content/public/common/content_switches.h b/content/public/common/content_switches.h
index 65ef3f1..03248aa 100644
--- a/content/public/common/content_switches.h
+++ b/content/public/common/content_switches.h
@@ -21,8 +21,6 @@
 extern const char kAllowSandboxDebugging[];
 extern const char kAuditAllHandles[];
 extern const char kAuditHandles[];
-CONTENT_EXPORT extern const char kBlacklistAcceleratedCompositing[];
-CONTENT_EXPORT extern const char kBlacklistWebGL[];
 CONTENT_EXPORT extern const char kBlinkPlatformLogChannels[];
 CONTENT_EXPORT extern const char kBlockCrossSiteDocuments[];
 CONTENT_EXPORT extern const char kBrowserAssertTest[];
@@ -34,7 +32,6 @@
 CONTENT_EXPORT extern const char kDisable2dCanvasAntialiasing[];
 CONTENT_EXPORT extern const char kDisable3DAPIs[];
 CONTENT_EXPORT extern const char kDisableAccelerated2dCanvas[];
-CONTENT_EXPORT extern const char kDisableAcceleratedCompositing[];
 CONTENT_EXPORT extern const char kDisableAcceleratedFixedRootBackground[];
 CONTENT_EXPORT extern const char kDisableAcceleratedLayers[];
 CONTENT_EXPORT extern const char kDisableAcceleratedOverflowScroll[];
@@ -51,6 +48,7 @@
 extern const char kDisableDesktopNotifications[];
 extern const char kDisableDirectNPAPIRequests[];
 extern const char kDisableDomainBlockingFor3DAPIs[];
+CONTENT_EXPORT extern const char kDisableEmbeddedSharedWorker[];
 CONTENT_EXPORT extern const char kDisableExperimentalWebGL[];
 CONTENT_EXPORT extern const char kDisableFastTextAutosizing[];
 CONTENT_EXPORT extern const char kDisableFileSystem[];
@@ -118,7 +116,6 @@
 CONTENT_EXPORT extern const char kEnableDeferredImageDecoding[];
 CONTENT_EXPORT extern const char kEnableDelegatedRenderer[];
 CONTENT_EXPORT extern const char kEnableDownloadResumption[];
-CONTENT_EXPORT extern const char kEnableEmbeddedSharedWorker[];
 CONTENT_EXPORT extern const char kEnableEncryptedMedia[];
 CONTENT_EXPORT extern const char kEnableExperimentalCanvasFeatures[];
 CONTENT_EXPORT extern const char kEnableExperimentalWebPlatformFeatures[];
@@ -156,7 +153,6 @@
 extern const char kEnableSharedWorkerMemoryInfo[];
 extern const char kEnableSkiaBenchmarking[];
 CONTENT_EXPORT extern const char kEnableSmoothScrolling[];
-CONTENT_EXPORT extern const char kEnableSoftwareCompositing[];
 CONTENT_EXPORT extern const char kEnableSpatialNavigation[];
 CONTENT_EXPORT extern const char kEnableSpeechSynthesis[];
 CONTENT_EXPORT extern const char kEnableStatsTable[];
@@ -171,7 +167,6 @@
 CONTENT_EXPORT extern const char kEnableViewport[];
 CONTENT_EXPORT extern const char kEnableViewportMeta[];
 CONTENT_EXPORT extern const char kMainFrameResizesAreOrientationChanges[];
-extern const char kEnableVisualWordMovement[];
 CONTENT_EXPORT extern const char kEnableVtune[];
 extern const char kEnableWebAnimationsSVG[];
 CONTENT_EXPORT extern const char kEnableWebGLDraftExtensions[];
@@ -290,6 +285,7 @@
 CONTENT_EXPORT extern const char kDisableOverscrollEdgeEffect[];
 CONTENT_EXPORT extern const char kDisableWebRTC[];
 CONTENT_EXPORT extern const char kEnableSpeechRecognition[];
+CONTENT_EXPORT extern const char kForceUseOverlayEmbeddedVideo[];
 CONTENT_EXPORT extern const char kHideScrollbars[];
 extern const char kNetworkCountryIso[];
 CONTENT_EXPORT extern const char kRemoteDebuggingSocketName[];
diff --git a/content/public/common/drop_data.h b/content/public/common/drop_data.h
index 91628bf..3bc08df 100644
--- a/content/public/common/drop_data.h
+++ b/content/public/common/drop_data.h
@@ -22,6 +22,14 @@
 namespace content {
 
 struct CONTENT_EXPORT DropData {
+  struct FileSystemFileInfo {
+    FileSystemFileInfo() : size(0) {}
+    ~FileSystemFileInfo() {}
+
+    GURL url;
+    int64 size;
+  };
+
   DropData();
   ~DropData();
 
@@ -47,6 +55,9 @@
   // Isolated filesystem ID for the files being dragged on the webview.
   base::string16 filesystem_id;
 
+  // User is dragging files specified with filesystem: URLs.
+  std::vector<FileSystemFileInfo> file_system_files;
+
   // User is dragging plain text into the webview.
   base::NullableString16 text;
 
diff --git a/content/public/common/favicon_url.h b/content/public/common/favicon_url.h
index 81b6680..141925b 100644
--- a/content/public/common/favicon_url.h
+++ b/content/public/common/favicon_url.h
@@ -15,7 +15,8 @@
 
 // The favicon url from the render.
 struct CONTENT_EXPORT FaviconURL {
-  // The icon type in a page. The definition must be same as chrome::IconType.
+  // The icon type in a page. The definition must be same as
+  // favicon_base::IconType.
   enum IconType {
     INVALID_ICON = 0x0,
     FAVICON = 1 << 0,
diff --git a/content/public/common/page_transition_types.cc b/content/public/common/page_transition_types.cc
index 52a0561..bf95ea0 100644
--- a/content/public/common/page_transition_types.cc
+++ b/content/public/common/page_transition_types.cc
@@ -47,6 +47,11 @@
   return (type & PAGE_TRANSITION_IS_REDIRECT_MASK) != 0;
 }
 
+bool PageTransitionIsNewNavigation(PageTransition type) {
+  return (type & PAGE_TRANSITION_FORWARD_BACK) == 0 &&
+      !PageTransitionCoreTypeIs(type, content::PAGE_TRANSITION_RELOAD);
+}
+
 int32 PageTransitionGetQualifier(PageTransition type) {
   return type & PAGE_TRANSITION_QUALIFIER_MASK;
 }
diff --git a/content/public/common/page_transition_types.h b/content/public/common/page_transition_types.h
index acb894b..1b1f801 100644
--- a/content/public/common/page_transition_types.h
+++ b/content/public/common/page_transition_types.h
@@ -38,6 +38,10 @@
 // Returns whether a transition involves a redirection
 CONTENT_EXPORT bool PageTransitionIsRedirect(PageTransition type);
 
+// Returns whether a transition is a new navigation (rather than a return
+// to a previously committed navigation).
+CONTENT_EXPORT bool PageTransitionIsNewNavigation(PageTransition type);
+
 // Return the qualifier
 CONTENT_EXPORT int32 PageTransitionGetQualifier(PageTransition type);
 
diff --git a/content/public/common/screen_orientation_values_list.h b/content/public/common/screen_orientation_values_list.h
index 64c27e9..9cc6f92 100644
--- a/content/public/common/screen_orientation_values_list.h
+++ b/content/public/common/screen_orientation_values_list.h
@@ -11,9 +11,13 @@
 
 // These values are defined with macros so that a Java class can be generated
 // for them.
-DEFINE_SCREEN_ORIENTATION_VALUE(PORTRAIT_PRIMARY, 1 << 0)
-DEFINE_SCREEN_ORIENTATION_VALUE(LANDSCAPE_PRIMARY, 1 << 1)
-DEFINE_SCREEN_ORIENTATION_VALUE(PORTRAIT_SECONDARY, 1 << 2)
-DEFINE_SCREEN_ORIENTATION_VALUE(LANDSCAPE_SECONDARY, 1 << 3)
+DEFINE_SCREEN_ORIENTATION_VALUE(DEFAULT, 0)
+DEFINE_SCREEN_ORIENTATION_VALUE(PORTRAIT_PRIMARY, 1)
+DEFINE_SCREEN_ORIENTATION_VALUE(PORTRAIT_SECONDARY, 2)
+DEFINE_SCREEN_ORIENTATION_VALUE(LANDSCAPE_PRIMARY, 3)
+DEFINE_SCREEN_ORIENTATION_VALUE(LANDSCAPE_SECONDARY, 4)
+DEFINE_SCREEN_ORIENTATION_VALUE(ANY, 5)
+DEFINE_SCREEN_ORIENTATION_VALUE(LANDSCAPE, 6)
+DEFINE_SCREEN_ORIENTATION_VALUE(PORTRAIT, 7)
 
 #endif  // CONTENT_PUBLIC_COMMON_SCREEN_ORIENTATION_VALUES_LIST_H_
diff --git a/content/public/common/show_desktop_notification_params.cc b/content/public/common/show_desktop_notification_params.cc
index 4914cb0..f001f79 100644
--- a/content/public/common/show_desktop_notification_params.cc
+++ b/content/public/common/show_desktop_notification_params.cc
@@ -7,8 +7,7 @@
 namespace content {
 
 ShowDesktopNotificationHostMsgParams::ShowDesktopNotificationHostMsgParams()
-    : direction(blink::WebTextDirectionDefault),
-      notification_id(0) {
+    : direction(blink::WebTextDirectionDefault) {
 }
 
 ShowDesktopNotificationHostMsgParams::~ShowDesktopNotificationHostMsgParams() {
diff --git a/content/public/common/show_desktop_notification_params.h b/content/public/common/show_desktop_notification_params.h
index 5ff4511..327f91c 100644
--- a/content/public/common/show_desktop_notification_params.h
+++ b/content/public/common/show_desktop_notification_params.h
@@ -30,9 +30,6 @@
   // ReplaceID if this notification should replace an existing one; may be
   // empty if no replacement is called for.
   base::string16 replace_id;
-
-  // Notification ID for sending events back for this notification.
-  int notification_id;
 };
 
 }  // namespace content
diff --git a/content/public/common/zygote_fork_delegate_linux.h b/content/public/common/zygote_fork_delegate_linux.h
index e4fee5f..39833c5 100644
--- a/content/public/common/zygote_fork_delegate_linux.h
+++ b/content/public/common/zygote_fork_delegate_linux.h
@@ -29,7 +29,9 @@
 
   // Initialization happens in the zygote after it has been
   // started by ZygoteMain.
-  virtual void Init(int sandboxdesc) = 0;
+  // If |enable_layer1_sandbox| is true, the delegate must enable a
+  // layer-1 sandbox such as the setuid sandbox.
+  virtual void Init(int sandboxdesc, bool enable_layer1_sandbox) = 0;
 
   // After Init, supply a UMA_HISTOGRAM_ENUMERATION the delegate
   // would like to supply on the first fork.
@@ -59,13 +61,11 @@
   // suid sandbox, Fork() returns the Linux process ID.
   // This method is not aware of any potential pid namespaces, so it'll
   // return a raw pid just like fork() would.
+  // Delegate is responsible for communicating the channel ID to the
+  // newly created child process.
   virtual pid_t Fork(const std::string& process_type,
-                     const std::vector<int>& fds) = 0;
-
-  // After a successful fork, signal the child to indicate that
-  // the child's PID has been received. Also communicate the
-  // channel switch as a part of acknowledgement message.
-  virtual bool AckChild(int fd, const std::string& channel_switch) = 0;
+                     const std::vector<int>& fds,
+                     const std::string& channel_id) = 0;
 
   // The fork delegate must also assume the role of waiting for its children
   // since the caller will not be their parents and cannot do it. |pid| here
diff --git a/content/public/renderer/content_renderer_client.h b/content/public/renderer/content_renderer_client.h
index 485bb10..5f17054 100644
--- a/content/public/renderer/content_renderer_client.h
+++ b/content/public/renderer/content_renderer_client.h
@@ -13,7 +13,6 @@
 #include "content/public/common/content_client.h"
 #include "content/public/common/page_transition_types.h"
 #include "ipc/ipc_message.h"
-#include "third_party/WebKit/public/web/WebLocalFrame.h"
 #include "third_party/WebKit/public/web/WebNavigationPolicy.h"
 #include "third_party/WebKit/public/web/WebNavigationType.h"
 #include "third_party/WebKit/public/web/WebPageVisibilityState.h"
@@ -30,6 +29,8 @@
 namespace blink {
 class WebAudioDevice;
 class WebClipboard;
+class WebFrame;
+class WebLocalFrame;
 class WebMIDIAccessor;
 class WebMIDIAccessorClient;
 class WebMediaStreamCenter;
diff --git a/content/public/renderer/key_system_info.h b/content/public/renderer/key_system_info.h
index a67e89a..3cafa51 100644
--- a/content/public/renderer/key_system_info.h
+++ b/content/public/renderer/key_system_info.h
@@ -5,11 +5,11 @@
 #ifndef CONTENT_PUBLIC_RENDERER_KEY_SYSTEM_INFO_H_
 #define CONTENT_PUBLIC_RENDERER_KEY_SYSTEM_INFO_H_
 
+#include <map>
 #include <string>
-#include <utility>
-#include <vector>
 
 #include "base/basictypes.h"
+#include "base/containers/hash_tables.h"
 #include "content/common/content_export.h"
 
 // Definitions:
@@ -32,9 +32,12 @@
 // Contains information about an EME key system as well as how to instantiate
 // the corresponding CDM.
 struct CONTENT_EXPORT KeySystemInfo {
-  // Represents container-codec combinations. The second string may contain zero
-  // or more codecs separated by commas.
-  typedef std::pair<std::string, std::string> ContainerCodecsPair;
+  // Represents the set of codecs supported within a container.
+  typedef base::hash_set<std::string> CodecSet;
+
+  // Represents container-codec combinations. The CodecSet may contain zero
+  // or more codecs.
+  typedef std::map<std::string, CodecSet> ContainerCodecsMap;
 
   explicit KeySystemInfo(const std::string& key_system);
   ~KeySystemInfo();
@@ -44,7 +47,7 @@
   // Specifies container and codec combinations supported by |key_system|.
   // Multiple codecs may be listed for each container.
   // In all cases, the container without a codec is also always supported.
-  std::vector<ContainerCodecsPair> supported_types;
+  ContainerCodecsMap supported_types;
 
   // A hierarchical parent for |key_system|. This value can be used to check
   // supported types but cannot be used to instantiate a MediaKeys object.
diff --git a/content/public/renderer/render_frame.h b/content/public/renderer/render_frame.h
index 19feb7d..5ecf430 100644
--- a/content/public/renderer/render_frame.h
+++ b/content/public/renderer/render_frame.h
@@ -9,14 +9,13 @@
 #include "content/common/content_export.h"
 #include "ipc/ipc_listener.h"
 #include "ipc/ipc_sender.h"
-// TODO(dcheng): Convert back to a forward declare.
-#include "third_party/WebKit/public/web/WebLocalFrame.h"
 #include "third_party/WebKit/public/web/WebNavigationPolicy.h"
 
 struct WebPreferences;
 
 namespace blink {
 class WebFrame;
+class WebLocalFrame;
 class WebNode;
 class WebPlugin;
 class WebURLRequest;
diff --git a/content/public/renderer/render_view.h b/content/public/renderer/render_view.h
index cf16901..6a5943a 100644
--- a/content/public/renderer/render_view.h
+++ b/content/public/renderer/render_view.h
@@ -12,8 +12,6 @@
 #include "content/common/content_export.h"
 #include "content/public/common/top_controls_state.h"
 #include "ipc/ipc_sender.h"
-// TODO(dcheng): Convert back to a forward declare.
-#include "third_party/WebKit/public/web/WebLocalFrame.h"
 #include "third_party/WebKit/public/web/WebPageVisibilityState.h"
 #include "ui/gfx/native_widget_types.h"
 
@@ -22,6 +20,7 @@
 namespace blink {
 class WebElement;
 class WebFrame;
+class WebLocalFrame;
 class WebNode;
 class WebString;
 class WebURLRequest;
diff --git a/content/public/renderer/render_view_observer.h b/content/public/renderer/render_view_observer.h
index e0a4ee2..0f09571 100644
--- a/content/public/renderer/render_view_observer.h
+++ b/content/public/renderer/render_view_observer.h
@@ -12,8 +12,6 @@
 #include "ipc/ipc_sender.h"
 #include "third_party/WebKit/public/platform/WebVector.h"
 #include "third_party/WebKit/public/web/WebIconURL.h"
-// TODO(dcheng): Temporary. Convert back to a forward declare.
-#include "third_party/WebKit/public/web/WebLocalFrame.h"
 
 class GURL;
 
@@ -28,6 +26,7 @@
 class WebFrame;
 class WebFormElement;
 class WebGestureEvent;
+class WebLocalFrame;
 class WebMediaPlayerClient;
 class WebMouseEvent;
 class WebNode;
@@ -94,9 +93,6 @@
   virtual void DidHandleMouseEvent(const blink::WebMouseEvent& event) {}
   virtual void DidHandleTouchEvent(const blink::WebTouchEvent& event) {}
 
-  // This matches the RenderWidget method.
-  virtual void WillProcessUserGesture() {}
-
   // Called when we receive a console message from WebKit for which we requested
   // extra details (like the stack trace). |message| is the error message,
   // |source| is the WebKit-reported source of the error (either external or
diff --git a/content/public/renderer/v8_value_converter.h b/content/public/renderer/v8_value_converter.h
index 2b10113..cac1247 100644
--- a/content/public/renderer/v8_value_converter.h
+++ b/content/public/renderer/v8_value_converter.h
@@ -5,6 +5,7 @@
 #ifndef CONTENT_PUBLIC_RENDERER_V8_VALUE_CONVERTER_H_
 #define CONTENT_PUBLIC_RENDERER_V8_VALUE_CONVERTER_H_
 
+#include "base/callback.h"
 #include "content/common/content_export.h"
 #include "v8/include/v8.h"
 
@@ -27,17 +28,28 @@
   // Extends the default behaviour of V8ValueConverter.
   class CONTENT_EXPORT Strategy {
    public:
+    typedef base::Callback<base::Value*(
+        v8::Handle<v8::Value>, v8::Isolate* isolate)> FromV8ValueCallback;
+
     virtual ~Strategy() {}
+
     // If false is returned, V8ValueConverter proceeds with the default
     // behavior.
+    // Use |callback| to convert any child values, as this will retain
+    // the ValueConverter's internal checks for depth and cycles.
     virtual bool FromV8Object(v8::Handle<v8::Object> value,
                               base::Value** out,
-                              v8::Isolate* isolate) const = 0;
+                              v8::Isolate* isolate,
+                              const FromV8ValueCallback& callback) const = 0;
+
     // If false is returned, V8ValueConverter proceeds with the default
     // behavior.
+    // Use |callback| to convert any child values, as this will retain
+    // the ValueConverter's internal checks for depth and cycles.
     virtual bool FromV8Array(v8::Handle<v8::Array> value,
                              base::Value** out,
-                             v8::Isolate* isolate) const = 0;
+                             v8::Isolate* isolate,
+                             const FromV8ValueCallback& callback) const = 0;
   };
 
   static V8ValueConverter* create();
diff --git a/content/public/test/android/javatests/src/org/chromium/content/browser/test/util/DOMUtils.java b/content/public/test/android/javatests/src/org/chromium/content/browser/test/util/DOMUtils.java
index aec49bb..f8b5cf1 100644
--- a/content/public/test/android/javatests/src/org/chromium/content/browser/test/util/DOMUtils.java
+++ b/content/public/test/android/javatests/src/org/chromium/content/browser/test/util/DOMUtils.java
@@ -10,7 +10,6 @@
 
 import junit.framework.Assert;
 
-import org.chromium.content.browser.ContentView;
 import org.chromium.content.browser.ContentViewCore;
 
 import java.io.IOException;
@@ -70,8 +69,7 @@
     /**
      * Focus a DOM node by its id.
      */
-    public static void focusNode(ActivityInstrumentationTestCase2 activityTestCase,
-            final ContentViewCore viewCore, String nodeId)
+    public static void focusNode(final ContentViewCore viewCore, String nodeId)
             throws InterruptedException, TimeoutException {
         StringBuilder sb = new StringBuilder();
         sb.append("(function() {");
@@ -86,22 +84,22 @@
      * Click a DOM node by its id.
      */
     public static void clickNode(ActivityInstrumentationTestCase2 activityTestCase,
-            final ContentView view, String nodeId)
+            final ContentViewCore viewCore, String nodeId)
             throws InterruptedException, TimeoutException {
-        int[] clickTarget = getClickTargetForNode(view.getContentViewCore(), nodeId);
+        int[] clickTarget = getClickTargetForNode(viewCore, nodeId);
         TouchCommon touchCommon = new TouchCommon(activityTestCase);
-        touchCommon.singleClickView(view, clickTarget[0], clickTarget[1]);
+        touchCommon.singleClickView(viewCore.getContainerView(), clickTarget[0], clickTarget[1]);
     }
 
     /**
      * Long-press a DOM node by its id.
      */
     public static void longPressNode(ActivityInstrumentationTestCase2 activityTestCase,
-            final ContentView view, String nodeId)
+            final ContentViewCore viewCore, String nodeId)
             throws InterruptedException, TimeoutException {
-        int[] clickTarget = getClickTargetForNode(view.getContentViewCore(), nodeId);
+        int[] clickTarget = getClickTargetForNode(viewCore, nodeId);
         TouchCommon touchCommon = new TouchCommon(activityTestCase);
-        touchCommon.longPressView(view, clickTarget[0], clickTarget[1]);
+        touchCommon.longPressView(viewCore.getContainerView(), clickTarget[0], clickTarget[1]);
     }
 
     /**
diff --git a/content/public/test/android/javatests/src/org/chromium/content/browser/test/util/HistoryUtils.java b/content/public/test/android/javatests/src/org/chromium/content/browser/test/util/HistoryUtils.java
index 21392a9..7fe2568 100644
--- a/content/public/test/android/javatests/src/org/chromium/content/browser/test/util/HistoryUtils.java
+++ b/content/public/test/android/javatests/src/org/chromium/content/browser/test/util/HistoryUtils.java
@@ -9,7 +9,6 @@
 import android.app.Instrumentation;
 
 import org.chromium.base.test.util.InstrumentationUtils;
-import org.chromium.content.browser.ContentView;
 import org.chromium.content.browser.ContentViewCore;
 
 import java.util.concurrent.Callable;
@@ -24,11 +23,11 @@
     protected static final long WAIT_TIMEOUT_SECONDS = scaleTimeout(15);
 
     /**
-     * Calls {@link ContentView#canGoBack()} on UI thread.
+     * Calls {@link ContentViewCore#canGoBack()} on UI thread.
      *
      * @param instrumentation an Instrumentation instance.
      * @param contentViewCore a ContentViewCore instance.
-     * @return result of {@link ContentView#canGoBack()}
+     * @return result of {@link ContentViewCore#canGoBack()}
      * @throws Throwable
      */
     public static boolean canGoBackOnUiThread(Instrumentation instrumentation,
@@ -64,11 +63,11 @@
     }
 
     /**
-     * Calls {@link ContentView#canGoForward()} on UI thread.
+     * Calls {@link ContentViewCore#canGoForward()} on UI thread.
      *
      * @param instrumentation an Instrumentation instance.
      * @param contentViewCore a ContentViewCore instance.
-     * @return result of {@link ContentView#canGoForward()}
+     * @return result of {@link ContentViewCore#canGoForward()}
      * @throws Throwable
      */
     public static boolean canGoForwardOnUiThread(Instrumentation instrumentation,
@@ -100,7 +99,7 @@
     }
 
     /**
-     * Calls {@link ContentView#getUrl()} on UI Thread to get the current URL.
+     * Calls {@link ContentViewCore#getUrl()} on UI Thread to get the current URL.
      *
      * @param instrumentation an Instrumentation instance.
      * @param contentViewCore a ContentViewCore instance.
diff --git a/content/public/test/android/javatests/src/org/chromium/content/browser/test/util/TestCallbackHelperContainer.java b/content/public/test/android/javatests/src/org/chromium/content/browser/test/util/TestCallbackHelperContainer.java
index 463e8ba..f02ba51 100644
--- a/content/public/test/android/javatests/src/org/chromium/content/browser/test/util/TestCallbackHelperContainer.java
+++ b/content/public/test/android/javatests/src/org/chromium/content/browser/test/util/TestCallbackHelperContainer.java
@@ -5,7 +5,6 @@
 package org.chromium.content.browser.test.util;
 
 
-import org.chromium.content.browser.ContentView;
 import org.chromium.content.browser.ContentViewCore;
 
 import java.util.concurrent.TimeUnit;
@@ -18,10 +17,10 @@
     private final TestContentViewClient mTestContentViewClient;
     private final TestWebContentsObserver mTestWebContentsObserver;
 
-    public TestCallbackHelperContainer(ContentView contentView) {
+    public TestCallbackHelperContainer(ContentViewCore contentViewCore) {
         mTestContentViewClient = new TestContentViewClient();
-        contentView.getContentViewCore().setContentViewClient(mTestContentViewClient);
-        mTestWebContentsObserver = new TestWebContentsObserver(contentView.getContentViewCore());
+        contentViewCore.setContentViewClient(mTestContentViewClient);
+        mTestWebContentsObserver = new TestWebContentsObserver(contentViewCore);
     }
 
     protected TestCallbackHelperContainer(
diff --git a/content/public/test/browser_test_base.cc b/content/public/test/browser_test_base.cc
index d5843ed..d0a33f0 100644
--- a/content/public/test/browser_test_base.cc
+++ b/content/public/test/browser_test_base.cc
@@ -40,6 +40,9 @@
 
 #if defined(USE_AURA)
 #include "content/browser/compositor/image_transport_factory.h"
+#if defined(USE_X11)
+#include "ui/aura/window_tree_host_x11.h"
+#endif
 #endif
 
 namespace content {
@@ -125,6 +128,10 @@
   base::mac::SetOverrideAmIBundled(true);
 #endif
 
+#if defined(USE_AURA) && defined(USE_X11)
+  aura::test::SetUseOverrideRedirectWindowByDefault(true);
+#endif
+
 #if defined(OS_POSIX)
   handle_sigterm_ = true;
 #endif
@@ -159,7 +166,6 @@
 
   if (use_software_compositing_) {
     command_line->AppendSwitch(switches::kDisableGpu);
-    command_line->AppendSwitch(switches::kEnableSoftwareCompositing);
 #if defined(USE_AURA)
     command_line->AppendSwitch(switches::kUIDisableThreadedCompositing);
 #endif
diff --git a/content/public/test/content_browser_test_utils.cc b/content/public/test/content_browser_test_utils.cc
index c2de314..d9448f0 100644
--- a/content/public/test/content_browser_test_utils.cc
+++ b/content/public/test/content_browser_test_utils.cc
@@ -43,6 +43,15 @@
   same_tab_observer.Wait();
 }
 
+void LoadDataWithBaseURL(Shell* window, const GURL& url,
+    const std::string data, const GURL& base_url) {
+  WaitForLoadStop(window->web_contents());
+  TestNavigationObserver same_tab_observer(window->web_contents(), 1);
+
+  window->LoadDataWithBaseURL(url, data, base_url);
+  same_tab_observer.Wait();
+}
+
 void NavigateToURL(Shell* window, const GURL& url) {
   NavigateToURLBlockUntilNavigationsComplete(window, url, 1);
 }
diff --git a/content/public/test/content_browser_test_utils.h b/content/public/test/content_browser_test_utils.h
index 2afc936..8c6d7bd 100644
--- a/content/public/test/content_browser_test_utils.h
+++ b/content/public/test/content_browser_test_utils.h
@@ -42,6 +42,10 @@
 // Navigates the selected tab of |window| to |url|, blocking until the
 // navigation finishes.
 void NavigateToURL(Shell* window, const GURL& url);
+void LoadDataWithBaseURL(Shell* window,
+                         const GURL& url,
+                         const std::string data,
+                         const GURL& base_url);
 
 // Navigates the selected tab of |window| to |url|, blocking until the given
 // number of navigations finishes.
diff --git a/content/public/test/content_test_suite_base.cc b/content/public/test/content_test_suite_base.cc
index 53e5693..9f9be53 100644
--- a/content/public/test/content_test_suite_base.cc
+++ b/content/public/test/content_test_suite_base.cc
@@ -11,10 +11,10 @@
 #include "base/threading/sequenced_worker_pool.h"
 #include "content/browser/browser_thread_impl.h"
 #include "content/browser/gpu/gpu_process_host.h"
+#include "content/browser/renderer_host/render_process_host_impl.h"
+#include "content/browser/utility_process_host_impl.h"
 #include "content/common/url_schemes.h"
 #include "content/gpu/in_process_gpu_thread.h"
-#include "content/public/browser/render_process_host.h"
-#include "content/public/browser/utility_process_host.h"
 #include "content/public/common/content_client.h"
 #include "content/renderer/in_process_renderer_thread.h"
 #include "content/utility/in_process_utility_thread.h"
@@ -78,9 +78,9 @@
 
 void ContentTestSuiteBase::RegisterInProcessThreads() {
 #if !defined(OS_IOS)
-  UtilityProcessHost::RegisterUtilityMainThreadFactory(
+  UtilityProcessHostImpl::RegisterUtilityMainThreadFactory(
       CreateInProcessUtilityThread);
-  RenderProcessHost::RegisterRendererMainThreadFactory(
+  RenderProcessHostImpl::RegisterRendererMainThreadFactory(
       CreateInProcessRendererThread);
   GpuProcessHost::RegisterGpuMainThreadFactory(CreateInProcessGpuThread);
 #endif
diff --git a/content/public/test/layouttest_support.h b/content/public/test/layouttest_support.h
index 6c7e847..3b3ab3b 100644
--- a/content/public/test/layouttest_support.h
+++ b/content/public/test/layouttest_support.h
@@ -6,7 +6,7 @@
 #define CONTENT_PUBLIC_TEST_LAYOUTTEST_SUPPORT_H_
 
 #include "base/callback_forward.h"
-#include "third_party/WebKit/public/platform/WebScreenOrientation.h"
+#include "third_party/WebKit/public/platform/WebScreenOrientationType.h"
 
 namespace blink {
 class WebDeviceMotionData;
@@ -16,13 +16,10 @@
 struct WebSize;
 }
 
-namespace WebTestRunner {
-class WebTestProxyBase;
-}
-
 namespace content {
 
 class RenderView;
+class WebTestProxyBase;
 
 // Turn the browser process into layout test mode.
 void EnableBrowserLayoutTestMode();
@@ -36,8 +33,8 @@
 // Enable injecting of a WebTestProxy between WebViews and RenderViews.
 // |callback| is invoked with a pointer to WebTestProxyBase for each created
 // WebTestProxy.
-void EnableWebTestProxyCreation(const base::Callback<
-    void(RenderView*, WebTestRunner::WebTestProxyBase*)>& callback);
+void EnableWebTestProxyCreation(
+    const base::Callback<void(RenderView*, WebTestProxyBase*)>& callback);
 
 // Sets the WebGamepads that should be returned by
 // WebKitPlatformSupport::sampleGamepads().
@@ -57,9 +54,9 @@
 // a listener through WebKitPlatformSupport::setDeviceOrientationListener().
 void SetMockDeviceOrientationData(const blink::WebDeviceOrientationData& data);
 
-// Sets WebScreenOrientation that should be used when registering a listener
-// through WebKitPlatformSupport::setScreenOrientationListener().
-void SetMockScreenOrientation(const blink::WebScreenOrientation& orientation);
+// Sets WebScreenOrientationType that should be used as a mock orientation.
+void SetMockScreenOrientation(
+    const blink::WebScreenOrientationType& orientation);
 
 // Returns the length of the local session history of a render view.
 int GetLocalSessionHistoryLength(RenderView* render_view);
diff --git a/content/public/test/mock_storage_client.cc b/content/public/test/mock_storage_client.cc
new file mode 100644
index 0000000..f93cd1d
--- /dev/null
+++ b/content/public/test/mock_storage_client.cc
@@ -0,0 +1,189 @@
+// 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.
+
+#include "content/public/test/mock_storage_client.h"
+
+#include "base/basictypes.h"
+#include "base/bind.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/memory/singleton.h"
+#include "base/message_loop/message_loop_proxy.h"
+#include "base/stl_util.h"
+#include "net/base/net_util.h"
+#include "webkit/browser/quota/quota_manager_proxy.h"
+
+using quota::kQuotaErrorInvalidModification;
+using quota::kQuotaStatusOk;
+
+namespace content {
+
+using std::make_pair;
+
+MockStorageClient::MockStorageClient(
+    QuotaManagerProxy* quota_manager_proxy,
+    const MockOriginData* mock_data, QuotaClient::ID id, size_t mock_data_size)
+    : quota_manager_proxy_(quota_manager_proxy),
+      id_(id),
+      mock_time_counter_(0),
+      weak_factory_(this) {
+  Populate(mock_data, mock_data_size);
+}
+
+void MockStorageClient::Populate(
+    const MockOriginData* mock_data,
+    size_t mock_data_size) {
+  for (size_t i = 0; i < mock_data_size; ++i) {
+    origin_data_[make_pair(GURL(mock_data[i].origin), mock_data[i].type)] =
+        mock_data[i].usage;
+  }
+}
+
+MockStorageClient::~MockStorageClient() {}
+
+void MockStorageClient::AddOriginAndNotify(
+    const GURL& origin_url, StorageType type, int64 size) {
+  DCHECK(origin_data_.find(make_pair(origin_url, type)) == origin_data_.end());
+  DCHECK_GE(size, 0);
+  origin_data_[make_pair(origin_url, type)] = size;
+  quota_manager_proxy_->quota_manager()->NotifyStorageModifiedInternal(
+      id(), origin_url, type, size, IncrementMockTime());
+}
+
+void MockStorageClient::ModifyOriginAndNotify(
+    const GURL& origin_url, StorageType type, int64 delta) {
+  OriginDataMap::iterator find = origin_data_.find(make_pair(origin_url, type));
+  DCHECK(find != origin_data_.end());
+  find->second += delta;
+  DCHECK_GE(find->second, 0);
+
+  // TODO(tzik): Check quota to prevent usage exceed
+  quota_manager_proxy_->quota_manager()->NotifyStorageModifiedInternal(
+      id(), origin_url, type, delta, IncrementMockTime());
+}
+
+void MockStorageClient::TouchAllOriginsAndNotify() {
+  for (OriginDataMap::const_iterator itr = origin_data_.begin();
+       itr != origin_data_.end();
+       ++itr) {
+    quota_manager_proxy_->quota_manager()->NotifyStorageModifiedInternal(
+        id(), itr->first.first, itr->first.second, 0, IncrementMockTime());
+  }
+}
+
+void MockStorageClient::AddOriginToErrorSet(
+    const GURL& origin_url, StorageType type) {
+  error_origins_.insert(make_pair(origin_url, type));
+}
+
+base::Time MockStorageClient::IncrementMockTime() {
+  ++mock_time_counter_;
+  return base::Time::FromDoubleT(mock_time_counter_ * 10.0);
+}
+
+QuotaClient::ID MockStorageClient::id() const {
+  return id_;
+}
+
+void MockStorageClient::OnQuotaManagerDestroyed() {
+  delete this;
+}
+
+void MockStorageClient::GetOriginUsage(const GURL& origin_url,
+                                       StorageType type,
+                                       const GetUsageCallback& callback) {
+  base::MessageLoopProxy::current()->PostTask(
+      FROM_HERE,
+      base::Bind(&MockStorageClient::RunGetOriginUsage,
+                 weak_factory_.GetWeakPtr(), origin_url, type, callback));
+}
+
+void MockStorageClient::GetOriginsForType(
+    StorageType type, const GetOriginsCallback& callback) {
+  base::MessageLoopProxy::current()->PostTask(
+      FROM_HERE,
+      base::Bind(&MockStorageClient::RunGetOriginsForType,
+                 weak_factory_.GetWeakPtr(), type, callback));
+}
+
+void MockStorageClient::GetOriginsForHost(
+    StorageType type, const std::string& host,
+    const GetOriginsCallback& callback) {
+  base::MessageLoopProxy::current()->PostTask(
+      FROM_HERE,
+      base::Bind(&MockStorageClient::RunGetOriginsForHost,
+                 weak_factory_.GetWeakPtr(), type, host, callback));
+}
+
+void MockStorageClient::DeleteOriginData(
+    const GURL& origin, StorageType type,
+    const DeletionCallback& callback) {
+  base::MessageLoopProxy::current()->PostTask(
+      FROM_HERE,
+      base::Bind(&MockStorageClient::RunDeleteOriginData,
+                 weak_factory_.GetWeakPtr(), origin, type, callback));
+}
+
+bool MockStorageClient::DoesSupport(quota::StorageType type) const {
+  return true;
+}
+
+void MockStorageClient::RunGetOriginUsage(
+    const GURL& origin_url, StorageType type,
+    const GetUsageCallback& callback) {
+  OriginDataMap::iterator find = origin_data_.find(make_pair(origin_url, type));
+  if (find == origin_data_.end()) {
+    callback.Run(0);
+  } else {
+    callback.Run(find->second);
+  }
+}
+
+void MockStorageClient::RunGetOriginsForType(
+    StorageType type, const GetOriginsCallback& callback) {
+  std::set<GURL> origins;
+  for (OriginDataMap::iterator iter = origin_data_.begin();
+       iter != origin_data_.end(); ++iter) {
+    if (type == iter->first.second)
+      origins.insert(iter->first.first);
+  }
+  callback.Run(origins);
+}
+
+void MockStorageClient::RunGetOriginsForHost(
+    StorageType type, const std::string& host,
+    const GetOriginsCallback& callback) {
+  std::set<GURL> origins;
+  for (OriginDataMap::iterator iter = origin_data_.begin();
+       iter != origin_data_.end(); ++iter) {
+    std::string host_or_spec = net::GetHostOrSpecFromURL(iter->first.first);
+    if (type == iter->first.second && host == host_or_spec)
+      origins.insert(iter->first.first);
+  }
+  callback.Run(origins);
+}
+
+void MockStorageClient::RunDeleteOriginData(
+    const GURL& origin_url,
+    StorageType type,
+    const DeletionCallback& callback) {
+  ErrorOriginSet::iterator itr_error =
+      error_origins_.find(make_pair(origin_url, type));
+  if (itr_error != error_origins_.end()) {
+    callback.Run(kQuotaErrorInvalidModification);
+    return;
+  }
+
+  OriginDataMap::iterator itr =
+      origin_data_.find(make_pair(origin_url, type));
+  if (itr != origin_data_.end()) {
+    int64 delta = itr->second;
+    quota_manager_proxy_->
+        NotifyStorageModified(id(), origin_url, type, -delta);
+    origin_data_.erase(itr);
+  }
+
+  callback.Run(kQuotaStatusOk);
+}
+
+}  // namespace content
diff --git a/content/public/test/mock_storage_client.h b/content/public/test/mock_storage_client.h
new file mode 100644
index 0000000..12715f5
--- /dev/null
+++ b/content/public/test/mock_storage_client.h
@@ -0,0 +1,102 @@
+// 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.
+
+#ifndef CONTENT_PUBLIC_TEST_MOCK_STORAGE_CLIENT_H_
+#define CONTENT_PUBLIC_TEST_MOCK_STORAGE_CLIENT_H_
+
+#include <map>
+#include <set>
+#include <string>
+#include <utility>
+
+#include "base/compiler_specific.h"
+#include "base/memory/weak_ptr.h"
+#include "base/time/time.h"
+#include "url/gurl.h"
+#include "webkit/browser/quota/quota_client.h"
+
+namespace quota {
+class QuotaManagerProxy;
+}
+
+using quota::QuotaClient;
+using quota::QuotaManagerProxy;
+using quota::StorageType;
+
+namespace content {
+
+struct MockOriginData {
+  const char* origin;
+  StorageType type;
+  int64 usage;
+};
+
+// Mock storage class for testing.
+class MockStorageClient : public QuotaClient {
+ public:
+  MockStorageClient(QuotaManagerProxy* quota_manager_proxy,
+                    const MockOriginData* mock_data,
+                    QuotaClient::ID id,
+                    size_t mock_data_size);
+  virtual ~MockStorageClient();
+
+  // To add or modify mock data in this client.
+  void AddOriginAndNotify(
+      const GURL& origin_url, StorageType type, int64 size);
+  void ModifyOriginAndNotify(
+      const GURL& origin_url, StorageType type, int64 delta);
+  void TouchAllOriginsAndNotify();
+
+  void AddOriginToErrorSet(const GURL& origin_url, StorageType type);
+
+  base::Time IncrementMockTime();
+
+  // QuotaClient methods.
+  virtual QuotaClient::ID id() const OVERRIDE;
+  virtual void OnQuotaManagerDestroyed() OVERRIDE;
+  virtual void GetOriginUsage(const GURL& origin_url,
+                              StorageType type,
+                              const GetUsageCallback& callback) OVERRIDE;
+  virtual void GetOriginsForType(StorageType type,
+                                 const GetOriginsCallback& callback) OVERRIDE;
+  virtual void GetOriginsForHost(StorageType type, const std::string& host,
+                                 const GetOriginsCallback& callback) OVERRIDE;
+  virtual void DeleteOriginData(const GURL& origin,
+                                StorageType type,
+                                const DeletionCallback& callback) OVERRIDE;
+  virtual bool DoesSupport(quota::StorageType type) const OVERRIDE;
+
+ private:
+  void RunGetOriginUsage(const GURL& origin_url,
+                         StorageType type,
+                         const GetUsageCallback& callback);
+  void RunGetOriginsForType(StorageType type,
+                            const GetOriginsCallback& callback);
+  void RunGetOriginsForHost(StorageType type,
+                            const std::string& host,
+                            const GetOriginsCallback& callback);
+  void RunDeleteOriginData(const GURL& origin_url,
+                           StorageType type,
+                           const DeletionCallback& callback);
+
+  void Populate(const MockOriginData* mock_data, size_t mock_data_size);
+
+  scoped_refptr<QuotaManagerProxy> quota_manager_proxy_;
+  const ID id_;
+
+  typedef std::map<std::pair<GURL, StorageType>, int64> OriginDataMap;
+  OriginDataMap origin_data_;
+  typedef std::set<std::pair<GURL, StorageType> > ErrorOriginSet;
+  ErrorOriginSet error_origins_;
+
+  int mock_time_counter_;
+
+  base::WeakPtrFactory<MockStorageClient> weak_factory_;
+
+  DISALLOW_COPY_AND_ASSIGN(MockStorageClient);
+};
+
+}  // namespace content
+
+#endif  // CONTENT_PUBLIC_TEST_MOCK_STORAGE_CLIENT_H_
diff --git a/content/public/test/render_view_test.cc b/content/public/test/render_view_test.cc
index d507dff..94d7b63 100644
--- a/content/public/test/render_view_test.cc
+++ b/content/public/test/render_view_test.cc
@@ -23,10 +23,10 @@
 #include "content/test/mock_render_process.h"
 #include "third_party/WebKit/public/platform/WebScreenInfo.h"
 #include "third_party/WebKit/public/platform/WebURLRequest.h"
-#include "third_party/WebKit/public/web/WebFrame.h"
 #include "third_party/WebKit/public/web/WebHistoryItem.h"
 #include "third_party/WebKit/public/web/WebInputEvent.h"
 #include "third_party/WebKit/public/web/WebKit.h"
+#include "third_party/WebKit/public/web/WebLocalFrame.h"
 #include "third_party/WebKit/public/web/WebScriptSource.h"
 #include "third_party/WebKit/public/web/WebView.h"
 #include "ui/base/resource/resource_bundle.h"
@@ -185,6 +185,7 @@
   // This needs to pass the mock render thread to the view.
   RenderViewImpl* view =
       RenderViewImpl::Create(kOpenerId,
+                             false,  // window_was_created_with_opener
                              RendererPreferences(),
                              WebPreferences(),
                              kRouteId,
@@ -195,6 +196,7 @@
                              false,  // is_renderer_created
                              false,  // swapped_out
                              false,  // hidden
+                             false,  // never_visible
                              1,      // next_page_id
                              blink::WebScreenInfo(),
                              AccessibilityModeOff);
diff --git a/content/public/test/render_widget_test.cc b/content/public/test/render_widget_test.cc
index 211a24f..66c4aba 100644
--- a/content/public/test/render_widget_test.cc
+++ b/content/public/test/render_widget_test.cc
@@ -59,21 +59,11 @@
   resize_params.physical_backing_size = size;
   widget->OnResize(resize_params);
   EXPECT_TRUE(widget->next_paint_is_resize_ack());
-  widget->DoDeferredUpdate();
-  ProcessPendingMessages();
 
-  const ViewHostMsg_UpdateRect* msg =
-      static_cast<const ViewHostMsg_UpdateRect*>(
-          render_thread_->sink().GetUniqueMessageMatching(
-              ViewHostMsg_UpdateRect::ID));
-  ASSERT_TRUE(msg);
-  ViewHostMsg_UpdateRect::Schema::Param update_rect_params;
-  EXPECT_TRUE(ViewHostMsg_UpdateRect::Read(msg, &update_rect_params));
-  EXPECT_TRUE(ViewHostMsg_UpdateRect_Flags::is_resize_ack(
-      update_rect_params.a.flags));
-  EXPECT_EQ(size,
-      update_rect_params.a.view_size);
-  render_thread_->sink().ClearMessages();
+  // Clear the flag.
+  // TODO(danakj): How real is this test any more? This flag is only existing
+  // for DCHECKs now.
+  widget->didCompleteSwapBuffers();
 
   // Setting the same size again should not send the ack.
   widget->OnResize(resize_params);
diff --git a/content/public/test/test_renderer_host.h b/content/public/test/test_renderer_host.h
index 5a285ca..49f63ef 100644
--- a/content/public/test/test_renderer_host.h
+++ b/content/public/test/test_renderer_host.h
@@ -72,7 +72,8 @@
   // Gives tests access to RenderViewHostImpl::CreateRenderView.
   virtual bool CreateRenderView(const base::string16& frame_name,
                                 int opener_route_id,
-                                int32 max_page_id) = 0;
+                                int32 max_page_id,
+                                bool created_with_opener) = 0;
 
   // Calls OnMsgNavigate on the RenderViewHost with the given information,
   // setting the rest of the parameters in the message to the "typical" values.
diff --git a/content/renderer/accessibility/blink_ax_tree_source.cc b/content/renderer/accessibility/blink_ax_tree_source.cc
index e7d6b08..2ba5be4 100644
--- a/content/renderer/accessibility/blink_ax_tree_source.cc
+++ b/content/renderer/accessibility/blink_ax_tree_source.cc
@@ -21,8 +21,8 @@
 #include "third_party/WebKit/public/web/WebDocumentType.h"
 #include "third_party/WebKit/public/web/WebElement.h"
 #include "third_party/WebKit/public/web/WebFormControlElement.h"
-#include "third_party/WebKit/public/web/WebFrame.h"
 #include "third_party/WebKit/public/web/WebInputElement.h"
+#include "third_party/WebKit/public/web/WebLocalFrame.h"
 #include "third_party/WebKit/public/web/WebNode.h"
 #include "third_party/WebKit/public/web/WebView.h"
 
@@ -32,7 +32,7 @@
 using blink::WebDocument;
 using blink::WebDocumentType;
 using blink::WebElement;
-using blink::WebFrame;
+using blink::WebLocalFrame;
 using blink::WebNode;
 using blink::WebVector;
 using blink::WebView;
@@ -541,7 +541,8 @@
 
 blink::WebDocument BlinkAXTreeSource::GetMainDocument() const {
   WebView* view = render_view_->GetWebView();
-  WebFrame* main_frame = view ? view->mainFrame() : NULL;
+  WebLocalFrame* main_frame =
+      view ? view->mainFrame()->toWebLocalFrame() : NULL;
 
   if (main_frame)
     return main_frame->document();
diff --git a/content/renderer/accessibility/renderer_accessibility_complete.cc b/content/renderer/accessibility/renderer_accessibility_complete.cc
index e5dd980..4a9de8f 100644
--- a/content/renderer/accessibility/renderer_accessibility_complete.cc
+++ b/content/renderer/accessibility/renderer_accessibility_complete.cc
@@ -12,15 +12,14 @@
 #include "content/renderer/render_view_impl.h"
 #include "third_party/WebKit/public/web/WebAXObject.h"
 #include "third_party/WebKit/public/web/WebDocument.h"
-#include "third_party/WebKit/public/web/WebFrame.h"
 #include "third_party/WebKit/public/web/WebInputElement.h"
+#include "third_party/WebKit/public/web/WebLocalFrame.h"
 #include "third_party/WebKit/public/web/WebNode.h"
 #include "third_party/WebKit/public/web/WebView.h"
 #include "ui/accessibility/ax_tree.h"
 
 using blink::WebAXObject;
 using blink::WebDocument;
-using blink::WebFrame;
 using blink::WebNode;
 using blink::WebPoint;
 using blink::WebRect;
@@ -196,10 +195,6 @@
       serializer_.DeleteClientSubtree(obj);
     }
 
-    // Allow Blink to cache intermediate results since we're doing a bunch
-    // of read-only queries at once.
-    obj.startCachingComputedObjectAttributesUntilTreeMutates();
-
     AccessibilityHostMsg_EventParams event_msg;
     event_msg.event_type = event.event_type;
     event_msg.id = event.id;
@@ -207,13 +202,11 @@
     event_msgs.push_back(event_msg);
 
 #ifndef NDEBUG
-    ui::AXTree tree;
-    tree.Unserialize(event_msg.update);
     VLOG(0) << "Accessibility update: \n"
             << "routing id=" << routing_id()
             << " event="
             << AccessibilityEventToString(event.event_type)
-            << "\n" << tree.ToString();
+            << "\n" << event_msg.update.ToString();
 #endif
   }
 
diff --git a/content/renderer/accessibility/renderer_accessibility_focus_only.cc b/content/renderer/accessibility/renderer_accessibility_focus_only.cc
index 972916c..bda3e8f 100644
--- a/content/renderer/accessibility/renderer_accessibility_focus_only.cc
+++ b/content/renderer/accessibility/renderer_accessibility_focus_only.cc
@@ -7,14 +7,13 @@
 #include "content/renderer/render_view_impl.h"
 #include "third_party/WebKit/public/web/WebDocument.h"
 #include "third_party/WebKit/public/web/WebElement.h"
-#include "third_party/WebKit/public/web/WebFrame.h"
+#include "third_party/WebKit/public/web/WebLocalFrame.h"
 #include "third_party/WebKit/public/web/WebNode.h"
 #include "third_party/WebKit/public/web/WebView.h"
 #include "ui/accessibility/ax_node_data.h"
 
 using blink::WebDocument;
 using blink::WebElement;
-using blink::WebFrame;
 using blink::WebNode;
 using blink::WebView;
 
diff --git a/content/renderer/browser_plugin/browser_plugin.cc b/content/renderer/browser_plugin/browser_plugin.cc
index faf2e00..b4cbebe 100644
--- a/content/renderer/browser_plugin/browser_plugin.cc
+++ b/content/renderer/browser_plugin/browser_plugin.cc
@@ -31,8 +31,8 @@
 #include "third_party/WebKit/public/web/WebDOMCustomEvent.h"
 #include "third_party/WebKit/public/web/WebDocument.h"
 #include "third_party/WebKit/public/web/WebElement.h"
-#include "third_party/WebKit/public/web/WebFrame.h"
 #include "third_party/WebKit/public/web/WebInputEvent.h"
+#include "third_party/WebKit/public/web/WebLocalFrame.h"
 #include "third_party/WebKit/public/web/WebPluginContainer.h"
 #include "third_party/WebKit/public/web/WebPluginParams.h"
 #include "third_party/WebKit/public/web/WebScriptSource.h"
@@ -610,7 +610,6 @@
     browser_plugin_manager()->Send(new BrowserPluginHostMsg_UpdateRect_ACK(
         render_view_routing_id_,
         guest_instance_id_,
-        true,
         auto_size_params,
         resize_guest_params));
     return;
@@ -666,7 +665,6 @@
   browser_plugin_manager()->Send(new BrowserPluginHostMsg_UpdateRect_ACK(
       render_view_routing_id_,
       guest_instance_id_,
-      UsesDamageBuffer(params),
       auto_size_params,
       resize_guest_params));
 }
@@ -839,7 +837,7 @@
   if (!container())
     return;
 
-  blink::WebFrame* frame = container()->element().document().frame();
+  blink::WebLocalFrame* frame = container()->element().document().frame();
   if (!frame)
     return;
 
diff --git a/content/renderer/browser_plugin/browser_plugin_browsertest.cc b/content/renderer/browser_plugin/browser_plugin_browsertest.cc
index 7524313..f759b75 100644
--- a/content/renderer/browser_plugin/browser_plugin_browsertest.cc
+++ b/content/renderer/browser_plugin/browser_plugin_browsertest.cc
@@ -20,6 +20,7 @@
 #include "skia/ext/platform_canvas.h"
 #include "third_party/WebKit/public/platform/WebCursorInfo.h"
 #include "third_party/WebKit/public/web/WebInputEvent.h"
+#include "third_party/WebKit/public/web/WebLocalFrame.h"
 #include "third_party/WebKit/public/web/WebScriptSource.h"
 
 namespace content {
@@ -626,12 +627,10 @@
     ASSERT_TRUE(auto_size_msg);
 
     int instance_id = 0;
-    bool needs_ack = false;
     BrowserPluginHostMsg_AutoSize_Params auto_size_params;
     BrowserPluginHostMsg_ResizeGuest_Params resize_params;
     BrowserPluginHostMsg_UpdateRect_ACK::Read(auto_size_msg,
                                               &instance_id,
-                                              &needs_ack,
                                               &auto_size_params,
                                               &resize_params);
     EXPECT_FALSE(auto_size_params.enable);
diff --git a/content/renderer/device_orientation/device_motion_event_pump.cc b/content/renderer/device_orientation/device_motion_event_pump.cc
deleted file mode 100644
index c60bd7a..0000000
--- a/content/renderer/device_orientation/device_motion_event_pump.cc
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright 2013 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 "device_motion_event_pump.h"
-
-#include "content/common/device_orientation/device_motion_messages.h"
-#include "content/public/renderer/render_thread.h"
-#include "third_party/WebKit/public/platform/WebDeviceMotionListener.h"
-
-namespace content {
-
-DeviceMotionEventPump::DeviceMotionEventPump()
-    : DeviceSensorEventPump(), listener_(0) {
-}
-
-DeviceMotionEventPump::DeviceMotionEventPump(int pump_delay_millis)
-    : DeviceSensorEventPump(pump_delay_millis), listener_(0) {
-}
-
-DeviceMotionEventPump::~DeviceMotionEventPump() {
-}
-
-bool DeviceMotionEventPump::SetListener(
-    blink::WebDeviceMotionListener* listener) {
-  listener_ = listener;
-  return listener_ ? RequestStart() : Stop();
-}
-
-bool DeviceMotionEventPump::OnControlMessageReceived(
-    const IPC::Message& message) {
-  bool handled = true;
-  IPC_BEGIN_MESSAGE_MAP(DeviceMotionEventPump, message)
-    IPC_MESSAGE_HANDLER(DeviceMotionMsg_DidStartPolling, OnDidStart)
-    IPC_MESSAGE_UNHANDLED(handled = false)
-  IPC_END_MESSAGE_MAP()
-  return handled;
-}
-
-void DeviceMotionEventPump::FireEvent() {
-  DCHECK(listener_);
-  blink::WebDeviceMotionData data;
-  if (reader_->GetLatestData(&data) && data.allAvailableSensorsAreActive)
-    listener_->didChangeDeviceMotion(data);
-}
-
-bool DeviceMotionEventPump::InitializeReader(base::SharedMemoryHandle handle) {
-  if (!reader_)
-    reader_.reset(new DeviceMotionSharedMemoryReader());
-  return reader_->Initialize(handle);
-}
-
-bool DeviceMotionEventPump::SendStartMessage() {
-  return RenderThread::Get()->Send(new DeviceMotionHostMsg_StartPolling());
-}
-
-
-bool DeviceMotionEventPump::SendStopMessage() {
-  return RenderThread::Get()->Send(new DeviceMotionHostMsg_StopPolling());
-}
-
-}  // namespace content
diff --git a/content/renderer/device_orientation/device_motion_event_pump.h b/content/renderer/device_orientation/device_motion_event_pump.h
deleted file mode 100644
index f262ad4..0000000
--- a/content/renderer/device_orientation/device_motion_event_pump.h
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright 2013 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 CONTENT_RENDERER_DEVICE_MOTION_EVENT_PUMP_H_
-#define CONTENT_RENDERER_DEVICE_MOTION_EVENT_PUMP_H_
-
-#include "base/memory/scoped_ptr.h"
-#include "content/renderer/device_orientation/device_sensor_event_pump.h"
-#include "content/renderer/shared_memory_seqlock_reader.h"
-#include "third_party/WebKit/public/platform/WebDeviceMotionData.h"
-
-namespace blink {
-class WebDeviceMotionListener;
-}
-
-namespace content {
-
-typedef SharedMemorySeqLockReader<blink::WebDeviceMotionData>
-    DeviceMotionSharedMemoryReader;
-
-class CONTENT_EXPORT DeviceMotionEventPump : public DeviceSensorEventPump {
- public:
-  DeviceMotionEventPump();
-  explicit DeviceMotionEventPump(int pump_delay_millis);
-  virtual ~DeviceMotionEventPump();
-
-  // Sets the listener to receive updates for device motion data at
-  // regular intervals. Returns true if the registration was successful.
-  bool SetListener(blink::WebDeviceMotionListener* listener);
-
-  // RenderProcessObserver implementation.
-  virtual bool OnControlMessageReceived(const IPC::Message& message) OVERRIDE;
-
- protected:
-  virtual void FireEvent() OVERRIDE;
-  virtual bool InitializeReader(base::SharedMemoryHandle handle) OVERRIDE;
-  virtual bool SendStartMessage() OVERRIDE;
-  virtual bool SendStopMessage() OVERRIDE;
-
-  blink::WebDeviceMotionListener* listener_;
-  scoped_ptr<DeviceMotionSharedMemoryReader> reader_;
-};
-
-}  // namespace content
-
-#endif  // CONTENT_RENDERER_DEVICE_MOTION_EVENT_PUMP_H_
diff --git a/content/renderer/device_orientation/device_motion_event_pump_unittest.cc b/content/renderer/device_orientation/device_motion_event_pump_unittest.cc
deleted file mode 100644
index 290d85e..0000000
--- a/content/renderer/device_orientation/device_motion_event_pump_unittest.cc
+++ /dev/null
@@ -1,144 +0,0 @@
-// Copyright 2013 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 "device_motion_event_pump.h"
-
-#include "base/logging.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/message_loop/message_loop.h"
-#include "content/common/device_orientation/device_motion_hardware_buffer.h"
-#include "content/public/test/test_utils.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/WebKit/public/platform/WebDeviceMotionListener.h"
-
-namespace content {
-
-class MockDeviceMotionListener : public blink::WebDeviceMotionListener {
- public:
-  MockDeviceMotionListener();
-  virtual ~MockDeviceMotionListener() { }
-  virtual void didChangeDeviceMotion(
-      const blink::WebDeviceMotionData&) OVERRIDE;
-  bool did_change_device_motion_;
-  blink::WebDeviceMotionData data_;
-};
-
-MockDeviceMotionListener::MockDeviceMotionListener()
-    : did_change_device_motion_(false) {
-  memset(&data_, 0, sizeof(data_));
-}
-
-void MockDeviceMotionListener::didChangeDeviceMotion(
-    const blink::WebDeviceMotionData& data) {
-  memcpy(&data_, &data, sizeof(data));
-  did_change_device_motion_ = true;
-}
-
-class DeviceMotionEventPumpForTesting : public DeviceMotionEventPump {
- public:
-  DeviceMotionEventPumpForTesting() { }
-  virtual ~DeviceMotionEventPumpForTesting() { }
-
-  void OnDidStart(base::SharedMemoryHandle renderer_handle) {
-    DeviceMotionEventPump::OnDidStart(renderer_handle);
-  }
-  virtual bool SendStartMessage() OVERRIDE { return true; }
-  virtual bool SendStopMessage() OVERRIDE { return true; }
-  virtual void FireEvent() OVERRIDE {
-    DeviceMotionEventPump::FireEvent();
-    Stop();
-    base::MessageLoop::current()->QuitWhenIdle();
-  }
-};
-
-class DeviceMotionEventPumpTest : public testing::Test {
- public:
-  DeviceMotionEventPumpTest() {
-    EXPECT_TRUE(shared_memory_.CreateAndMapAnonymous(
-        sizeof(DeviceMotionHardwareBuffer)));
-  }
-
- protected:
-  virtual void SetUp() OVERRIDE {
-    const DeviceMotionHardwareBuffer* null_buffer = NULL;
-    listener_.reset(new MockDeviceMotionListener);
-    motion_pump_.reset(new DeviceMotionEventPumpForTesting);
-    buffer_ = static_cast<DeviceMotionHardwareBuffer*>(shared_memory_.memory());
-    ASSERT_NE(null_buffer, buffer_);
-    memset(buffer_, 0, sizeof(DeviceMotionHardwareBuffer));
-    ASSERT_TRUE(shared_memory_.ShareToProcess(base::GetCurrentProcessHandle(),
-        &handle_));
-  }
-
-  void InitBuffer(bool allAvailableSensorsActive) {
-    blink::WebDeviceMotionData& data = buffer_->data;
-    data.accelerationX = 1;
-    data.hasAccelerationX = true;
-    data.accelerationY = 2;
-    data.hasAccelerationY = true;
-    data.accelerationZ = 3;
-    data.hasAccelerationZ = true;
-    data.allAvailableSensorsAreActive = allAvailableSensorsActive;
-  }
-
-  scoped_ptr<MockDeviceMotionListener> listener_;
-  scoped_ptr<DeviceMotionEventPumpForTesting> motion_pump_;
-  base::SharedMemoryHandle handle_;
-  base::SharedMemory shared_memory_;
-  DeviceMotionHardwareBuffer* buffer_;
-};
-
-TEST_F(DeviceMotionEventPumpTest, DidStartPolling) {
-  base::MessageLoopForUI loop;
-
-  InitBuffer(true);
-
-  motion_pump_->SetListener(listener_.get());
-  motion_pump_->OnDidStart(handle_);
-
-  base::MessageLoop::current()->Run();
-
-  blink::WebDeviceMotionData& received_data = listener_->data_;
-  EXPECT_TRUE(listener_->did_change_device_motion_);
-  EXPECT_TRUE(received_data.hasAccelerationX);
-  EXPECT_EQ(1, (double)received_data.accelerationX);
-  EXPECT_TRUE(received_data.hasAccelerationX);
-  EXPECT_EQ(2, (double)received_data.accelerationY);
-  EXPECT_TRUE(received_data.hasAccelerationY);
-  EXPECT_EQ(3, (double)received_data.accelerationZ);
-  EXPECT_TRUE(received_data.hasAccelerationZ);
-  EXPECT_FALSE(received_data.hasAccelerationIncludingGravityX);
-  EXPECT_FALSE(received_data.hasAccelerationIncludingGravityY);
-  EXPECT_FALSE(received_data.hasAccelerationIncludingGravityZ);
-  EXPECT_FALSE(received_data.hasRotationRateAlpha);
-  EXPECT_FALSE(received_data.hasRotationRateBeta);
-  EXPECT_FALSE(received_data.hasRotationRateGamma);
-}
-
-TEST_F(DeviceMotionEventPumpTest, DidStartPollingNotAllSensorsActive) {
-  base::MessageLoopForUI loop;
-
-  InitBuffer(false);
-
-  motion_pump_->SetListener(listener_.get());
-  motion_pump_->OnDidStart(handle_);
-
-  base::MessageLoop::current()->Run();
-
-  blink::WebDeviceMotionData& received_data = listener_->data_;
-  // No change in device motion because allAvailableSensorsAreActive is false.
-  EXPECT_FALSE(listener_->did_change_device_motion_);
-  EXPECT_FALSE(received_data.hasAccelerationX);
-  EXPECT_FALSE(received_data.hasAccelerationX);
-  EXPECT_FALSE(received_data.hasAccelerationY);
-  EXPECT_FALSE(received_data.hasAccelerationZ);
-  EXPECT_FALSE(received_data.hasAccelerationIncludingGravityX);
-  EXPECT_FALSE(received_data.hasAccelerationIncludingGravityY);
-  EXPECT_FALSE(received_data.hasAccelerationIncludingGravityZ);
-  EXPECT_FALSE(received_data.hasRotationRateAlpha);
-  EXPECT_FALSE(received_data.hasRotationRateBeta);
-  EXPECT_FALSE(received_data.hasRotationRateGamma);
-}
-
-}  // namespace content
diff --git a/content/renderer/device_orientation/device_orientation_event_pump.cc b/content/renderer/device_orientation/device_orientation_event_pump.cc
deleted file mode 100644
index 2ee6d21..0000000
--- a/content/renderer/device_orientation/device_orientation_event_pump.cc
+++ /dev/null
@@ -1,95 +0,0 @@
-// Copyright 2013 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 "device_orientation_event_pump.h"
-
-#include <cmath>
-
-#include "content/common/device_orientation/device_orientation_messages.h"
-#include "content/public/renderer/render_thread.h"
-#include "third_party/WebKit/public/platform/WebDeviceOrientationListener.h"
-
-namespace content {
-
-const double DeviceOrientationEventPump::kOrientationThreshold = 0.1;
-
-DeviceOrientationEventPump::DeviceOrientationEventPump()
-    : DeviceSensorEventPump(), listener_(0) {
-}
-
-DeviceOrientationEventPump::DeviceOrientationEventPump(int pump_delay_millis)
-    : DeviceSensorEventPump(pump_delay_millis), listener_(0) {
-}
-
-DeviceOrientationEventPump::~DeviceOrientationEventPump() {
-}
-
-bool DeviceOrientationEventPump::SetListener(
-    blink::WebDeviceOrientationListener* listener) {
-  listener_ = listener;
-  return listener_ ? RequestStart() : Stop();
-}
-
-bool DeviceOrientationEventPump::OnControlMessageReceived(
-    const IPC::Message& message) {
-  bool handled = true;
-  IPC_BEGIN_MESSAGE_MAP(DeviceOrientationEventPump, message)
-    IPC_MESSAGE_HANDLER(DeviceOrientationMsg_DidStartPolling, OnDidStart)
-    IPC_MESSAGE_UNHANDLED(handled = false)
-  IPC_END_MESSAGE_MAP()
-  return handled;
-}
-
-void DeviceOrientationEventPump::FireEvent() {
-  DCHECK(listener_);
-  blink::WebDeviceOrientationData data;
-  if (reader_->GetLatestData(&data) && ShouldFireEvent(data)) {
-    memcpy(&data_, &data, sizeof(data));
-    listener_->didChangeDeviceOrientation(data);
-  }
-}
-
-static bool IsSignificantlyDifferent(bool hasAngle1, double angle1,
-    bool hasAngle2, double angle2) {
-  if (hasAngle1 != hasAngle2)
-    return true;
-  return (hasAngle1 && std::fabs(angle1 - angle2) >=
-          DeviceOrientationEventPump::kOrientationThreshold);
-}
-
-bool DeviceOrientationEventPump::ShouldFireEvent(
-    const blink::WebDeviceOrientationData& data) const {
-  if (!data.allAvailableSensorsAreActive)
-    return false;
-
-  if (!data.hasAlpha && !data.hasBeta && !data.hasGamma) {
-    // no data can be provided, this is an all-null event.
-    return true;
-  }
-
-  return IsSignificantlyDifferent(
-             data_.hasAlpha, data_.alpha, data.hasAlpha, data.alpha) ||
-         IsSignificantlyDifferent(
-             data_.hasBeta, data_.beta, data.hasBeta, data.beta) ||
-         IsSignificantlyDifferent(
-             data_.hasGamma, data_.gamma, data.hasGamma, data.gamma);
-}
-
-bool DeviceOrientationEventPump::InitializeReader(
-    base::SharedMemoryHandle handle) {
-  memset(&data_, 0, sizeof(data_));
-  if (!reader_)
-    reader_.reset(new DeviceOrientationSharedMemoryReader());
-  return reader_->Initialize(handle);
-}
-
-bool DeviceOrientationEventPump::SendStartMessage() {
-  return RenderThread::Get()->Send(new DeviceOrientationHostMsg_StartPolling());
-}
-
-bool DeviceOrientationEventPump::SendStopMessage() {
-  return RenderThread::Get()->Send(new DeviceOrientationHostMsg_StopPolling());
-}
-
-}  // namespace content
diff --git a/content/renderer/device_orientation/device_orientation_event_pump.h b/content/renderer/device_orientation/device_orientation_event_pump.h
deleted file mode 100644
index ac7f31c..0000000
--- a/content/renderer/device_orientation/device_orientation_event_pump.h
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright 2013 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 CONTENT_RENDERER_DEVICE_ORIENTATION_EVENT_PUMP_H_
-#define CONTENT_RENDERER_DEVICE_ORIENTATION_EVENT_PUMP_H_
-
-#include "base/memory/scoped_ptr.h"
-#include "content/renderer/device_orientation/device_sensor_event_pump.h"
-#include "content/renderer/shared_memory_seqlock_reader.h"
-#include "third_party/WebKit/public/platform/WebDeviceOrientationData.h"
-
-namespace blink {
-class WebDeviceOrientationListener;
-}
-
-namespace content {
-
-typedef SharedMemorySeqLockReader<blink::WebDeviceOrientationData>
-    DeviceOrientationSharedMemoryReader;
-
-class CONTENT_EXPORT DeviceOrientationEventPump : public DeviceSensorEventPump {
- public:
-  // Angle threshold beyond which two orientation events are considered
-  // sufficiently different.
-  static const double kOrientationThreshold;
-
-  DeviceOrientationEventPump();
-  explicit DeviceOrientationEventPump(int pump_delay_millis);
-  virtual ~DeviceOrientationEventPump();
-
-  // Sets the listener to receive updates for device orientation data at
-  // regular intervals. Returns true if the registration was successful.
-  bool SetListener(blink::WebDeviceOrientationListener* listener);
-
-  // RenderProcessObserver implementation.
-  virtual bool OnControlMessageReceived(const IPC::Message& message) OVERRIDE;
-
- protected:
-  virtual void FireEvent() OVERRIDE;
-  virtual bool InitializeReader(base::SharedMemoryHandle handle) OVERRIDE;
-  virtual bool SendStartMessage() OVERRIDE;
-  virtual bool SendStopMessage() OVERRIDE;
-
-  bool ShouldFireEvent(const blink::WebDeviceOrientationData& data) const;
-
-  blink::WebDeviceOrientationListener* listener_;
-  blink::WebDeviceOrientationData data_;
-  scoped_ptr<DeviceOrientationSharedMemoryReader> reader_;
-};
-
-}  // namespace content
-
-#endif  // CONTENT_RENDERER_DEVICE_ORIENTATION_EVENT_PUMP_H_
diff --git a/content/renderer/device_orientation/device_orientation_event_pump_unittest.cc b/content/renderer/device_orientation/device_orientation_event_pump_unittest.cc
deleted file mode 100644
index b5c86bf..0000000
--- a/content/renderer/device_orientation/device_orientation_event_pump_unittest.cc
+++ /dev/null
@@ -1,209 +0,0 @@
-// Copyright 2013 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 "device_orientation_event_pump.h"
-
-#include "base/logging.h"
-#include "base/message_loop/message_loop.h"
-#include "content/common/device_orientation/device_orientation_hardware_buffer.h"
-#include "content/public/test/test_utils.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/WebKit/public/platform/WebDeviceOrientationListener.h"
-
-namespace content {
-
-class MockDeviceOrientationListener
-    : public blink::WebDeviceOrientationListener {
- public:
-  MockDeviceOrientationListener();
-  virtual ~MockDeviceOrientationListener() { }
-  virtual void didChangeDeviceOrientation(
-      const blink::WebDeviceOrientationData&) OVERRIDE;
-  void ResetDidChangeOrientation();
-  bool did_change_device_orientation_;
-  blink::WebDeviceOrientationData data_;
-};
-
-MockDeviceOrientationListener::MockDeviceOrientationListener()
-    : did_change_device_orientation_(false) {
-  memset(&data_, 0, sizeof(data_));
-}
-
-void MockDeviceOrientationListener::didChangeDeviceOrientation(
-    const blink::WebDeviceOrientationData& data) {
-  memcpy(&data_, &data, sizeof(data));
-  did_change_device_orientation_ = true;
-}
-
-void MockDeviceOrientationListener::ResetDidChangeOrientation() {
-  did_change_device_orientation_ = false;
-}
-
-class DeviceOrientationEventPumpForTesting : public DeviceOrientationEventPump {
- public:
-  DeviceOrientationEventPumpForTesting() { }
-  virtual ~DeviceOrientationEventPumpForTesting() { }
-
-  void OnDidStart(base::SharedMemoryHandle renderer_handle) {
-    DeviceOrientationEventPump::OnDidStart(renderer_handle);
-  }
-  virtual bool SendStartMessage() OVERRIDE { return true; }
-  virtual bool SendStopMessage() OVERRIDE { return true; }
-  virtual void FireEvent() OVERRIDE {
-    DeviceOrientationEventPump::FireEvent();
-    Stop();
-    base::MessageLoop::current()->QuitWhenIdle();
-  }
-};
-
-class DeviceOrientationEventPumpTest : public testing::Test {
- public:
-  DeviceOrientationEventPumpTest() {
-      EXPECT_TRUE(shared_memory_.CreateAndMapAnonymous(
-          sizeof(DeviceOrientationHardwareBuffer)));
-  }
-
- protected:
-  virtual void SetUp() OVERRIDE {
-    listener_.reset(new MockDeviceOrientationListener);
-    orientation_pump_.reset(new DeviceOrientationEventPumpForTesting);
-    buffer_ = static_cast<DeviceOrientationHardwareBuffer*>(
-        shared_memory_.memory());
-    memset(buffer_, 0, sizeof(DeviceOrientationHardwareBuffer));
-    shared_memory_.ShareToProcess(base::kNullProcessHandle, &handle_);
-  }
-
-  void InitBuffer() {
-    blink::WebDeviceOrientationData& data = buffer_->data;
-    data.alpha = 1;
-    data.hasAlpha = true;
-    data.beta = 2;
-    data.hasBeta = true;
-    data.gamma = 3;
-    data.hasGamma = true;
-    data.allAvailableSensorsAreActive = true;
-  }
-
-  void InitBufferNoData() {
-    blink::WebDeviceOrientationData& data = buffer_->data;
-    data.allAvailableSensorsAreActive = true;
-  }
-
-  scoped_ptr<MockDeviceOrientationListener> listener_;
-  scoped_ptr<DeviceOrientationEventPumpForTesting> orientation_pump_;
-  base::SharedMemoryHandle handle_;
-  base::SharedMemory shared_memory_;
-  DeviceOrientationHardwareBuffer* buffer_;
-};
-
-// Always failing in the win try bot. See http://crbug.com/256782.
-#if defined(OS_WIN)
-#define MAYBE_DidStartPolling DISABLED_DidStartPolling
-#else
-#define MAYBE_DidStartPolling DidStartPolling
-#endif
-TEST_F(DeviceOrientationEventPumpTest, MAYBE_DidStartPolling) {
-  base::MessageLoop loop;
-
-  InitBuffer();
-  orientation_pump_->SetListener(listener_.get());
-  orientation_pump_->OnDidStart(handle_);
-
-  base::MessageLoop::current()->Run();
-
-  blink::WebDeviceOrientationData& received_data = listener_->data_;
-  EXPECT_TRUE(listener_->did_change_device_orientation_);
-  EXPECT_TRUE(received_data.allAvailableSensorsAreActive);
-  EXPECT_EQ(1, (double)received_data.alpha);
-  EXPECT_TRUE(received_data.hasAlpha);
-  EXPECT_EQ(2, (double)received_data.beta);
-  EXPECT_TRUE(received_data.hasBeta);
-  EXPECT_EQ(3, (double)received_data.gamma);
-  EXPECT_TRUE(received_data.hasGamma);
-}
-
-// Always failing in the win try bot. See http://crbug.com/256782.
-#if defined(OS_WIN)
-#define MAYBE_FireAllNullEvent DISABLED_FireAllNullEvent
-#else
-#define MAYBE_FireAllNullEvent FireAllNullEvent
-#endif
-TEST_F(DeviceOrientationEventPumpTest, MAYBE_FireAllNullEvent) {
-  base::MessageLoop loop;
-
-  InitBufferNoData();
-  orientation_pump_->SetListener(listener_.get());
-  orientation_pump_->OnDidStart(handle_);
-
-  base::MessageLoop::current()->Run();
-
-  blink::WebDeviceOrientationData& received_data = listener_->data_;
-  EXPECT_TRUE(listener_->did_change_device_orientation_);
-  EXPECT_TRUE(received_data.allAvailableSensorsAreActive);
-  EXPECT_FALSE(received_data.hasAlpha);
-  EXPECT_FALSE(received_data.hasBeta);
-  EXPECT_FALSE(received_data.hasGamma);
-}
-
-// Always failing in the win try bot. See http://crbug.com/256782.
-#if defined(OS_WIN)
-#define MAYBE_UpdateRespectsOrientationThreshold \
-    DISABLED_UpdateRespectsOrientationThreshold
-#else
-#define MAYBE_UpdateRespectsOrientationThreshold \
-    UpdateRespectsOrientationThreshold
-#endif
-TEST_F(DeviceOrientationEventPumpTest,
-    MAYBE_UpdateRespectsOrientationThreshold) {
-  base::MessageLoop loop;
-
-  InitBuffer();
-  orientation_pump_->SetListener(listener_.get());
-  orientation_pump_->OnDidStart(handle_);
-
-  base::MessageLoop::current()->Run();
-
-  blink::WebDeviceOrientationData& received_data = listener_->data_;
-  EXPECT_TRUE(listener_->did_change_device_orientation_);
-  EXPECT_TRUE(received_data.allAvailableSensorsAreActive);
-  EXPECT_EQ(1, (double)received_data.alpha);
-  EXPECT_TRUE(received_data.hasAlpha);
-  EXPECT_EQ(2, (double)received_data.beta);
-  EXPECT_TRUE(received_data.hasBeta);
-  EXPECT_EQ(3, (double)received_data.gamma);
-  EXPECT_TRUE(received_data.hasGamma);
-
-  buffer_->data.alpha =
-      1 + DeviceOrientationEventPump::kOrientationThreshold / 2.0;
-  listener_->ResetDidChangeOrientation();
-
-  base::MessageLoop::current()->PostTask(FROM_HERE,
-      base::Bind(&DeviceOrientationEventPumpForTesting::FireEvent,
-                 base::Unretained(orientation_pump_.get())));
-  base::MessageLoop::current()->Run();
-
-  EXPECT_FALSE(listener_->did_change_device_orientation_);
-  EXPECT_TRUE(received_data.allAvailableSensorsAreActive);
-  EXPECT_EQ(1, (double)received_data.alpha);
-  EXPECT_TRUE(received_data.hasAlpha);
-  EXPECT_EQ(2, (double)received_data.beta);
-  EXPECT_TRUE(received_data.hasBeta);
-  EXPECT_EQ(3, (double)received_data.gamma);
-  EXPECT_TRUE(received_data.hasGamma);
-
-  buffer_->data.alpha =
-      1 + DeviceOrientationEventPump::kOrientationThreshold;
-  listener_->ResetDidChangeOrientation();
-
-  base::MessageLoop::current()->PostTask(FROM_HERE,
-      base::Bind(&DeviceOrientationEventPumpForTesting::FireEvent,
-                 base::Unretained(orientation_pump_.get())));
-  base::MessageLoop::current()->Run();
-
-  EXPECT_TRUE(listener_->did_change_device_orientation_);
-  EXPECT_EQ(1 + DeviceOrientationEventPump::kOrientationThreshold,
-      (double)received_data.alpha);
-}
-
-}  // namespace content
diff --git a/content/renderer/device_orientation/device_sensor_event_pump.cc b/content/renderer/device_orientation/device_sensor_event_pump.cc
deleted file mode 100644
index 8e82d8f..0000000
--- a/content/renderer/device_orientation/device_sensor_event_pump.cc
+++ /dev/null
@@ -1,87 +0,0 @@
-// Copyright 2013 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 "device_sensor_event_pump.h"
-
-#include "base/logging.h"
-#include "content/public/renderer/render_thread.h"
-
-namespace content {
-
-// Default interval between successive polls, should take into account the
-// value of |kInertialSensorIntervalMillis| in
-// content/browser/device_orientation/inertial_sensor_consts.h.
-const int DeviceSensorEventPump::kDefaultPumpDelayMillis = 50;
-
-int DeviceSensorEventPump::GetDelayMillis() const {
-  return pump_delay_millis_;
-}
-
-DeviceSensorEventPump::DeviceSensorEventPump()
-    : pump_delay_millis_(kDefaultPumpDelayMillis),
-      state_(STOPPED) {
-}
-
-DeviceSensorEventPump::DeviceSensorEventPump(int pump_delay_millis)
-    : pump_delay_millis_(pump_delay_millis),
-      state_(STOPPED) {
-  DCHECK(pump_delay_millis_ > 0);
-}
-
-DeviceSensorEventPump::~DeviceSensorEventPump() {
-}
-
-bool DeviceSensorEventPump::RequestStart() {
-  DVLOG(2) << "requested start";
-
-  if (state_ != STOPPED)
-    return false;
-
-  DCHECK(!timer_.IsRunning());
-
-  if (SendStartMessage()) {
-    state_ = PENDING_START;
-    return true;
-  }
-  return false;
-}
-
-bool DeviceSensorEventPump::Stop() {
-  DVLOG(2) << "stop";
-
-  if (state_ == STOPPED)
-    return true;
-
-  DCHECK((state_ == PENDING_START && !timer_.IsRunning()) ||
-      (state_ == RUNNING && timer_.IsRunning()));
-
-  if (timer_.IsRunning())
-    timer_.Stop();
-  SendStopMessage();
-  state_ = STOPPED;
-  return true;
-}
-
-void DeviceSensorEventPump::Attach(RenderThread* thread) {
-  if (!thread)
-    return;
-  thread->AddObserver(this);
-}
-
-void DeviceSensorEventPump::OnDidStart(base::SharedMemoryHandle handle) {
-  DVLOG(2) << "did start sensor event pump";
-
-  if (state_ != PENDING_START)
-    return;
-
-  DCHECK(!timer_.IsRunning());
-
-  if (InitializeReader(handle)) {
-    timer_.Start(FROM_HERE, base::TimeDelta::FromMilliseconds(GetDelayMillis()),
-                 this, &DeviceSensorEventPump::FireEvent);
-    state_ = RUNNING;
-  }
-}
-
-}  // namespace content
diff --git a/content/renderer/device_orientation/device_sensor_event_pump.h b/content/renderer/device_orientation/device_sensor_event_pump.h
deleted file mode 100644
index 8f0e37e..0000000
--- a/content/renderer/device_orientation/device_sensor_event_pump.h
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright 2013 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 CONTENT_RENDERER_DEVICE_SENSOR_EVENT_PUMP_H_
-#define CONTENT_RENDERER_DEVICE_SENSOR_EVENT_PUMP_H_
-
-#include "base/memory/shared_memory.h"
-#include "base/timer/timer.h"
-#include "content/public/renderer/render_process_observer.h"
-
-namespace content {
-class RenderThread;
-
-class CONTENT_EXPORT DeviceSensorEventPump : public RenderProcessObserver {
- public:
-  // Default delay between subsequent firing of events.
-  static const int kDefaultPumpDelayMillis;
-
-  int GetDelayMillis() const;
-
-  void Attach(RenderThread* thread);
-  virtual bool OnControlMessageReceived(const IPC::Message& message) = 0;
-
- protected:
-  // Constructor for a pump with default delay.
-  DeviceSensorEventPump();
-
-  // Constructor for a pump with a given delay.
-  explicit DeviceSensorEventPump(int pump_delay_millis);
-  virtual ~DeviceSensorEventPump();
-
-  // The pump is a tri-state automaton with allowed transitions as follows:
-  // STOPPED -> PENDING_START
-  // PENDING_START -> RUNNING
-  // PENDING_START -> STOPPED
-  // RUNNING -> STOPPED
-  enum PumpState {
-      STOPPED,
-      RUNNING,
-      PENDING_START
-  };
-
-  bool RequestStart();
-  void OnDidStart(base::SharedMemoryHandle handle);
-  bool Stop();
-
-  virtual void FireEvent() = 0;
-  virtual bool InitializeReader(base::SharedMemoryHandle handle) = 0;
-  virtual bool SendStartMessage() = 0;
-  virtual bool SendStopMessage() = 0;
-
-  int pump_delay_millis_;
-  PumpState state_;
-  base::RepeatingTimer<DeviceSensorEventPump> timer_;
-};
-
-}  // namespace content
-
-#endif  // CONTENT_RENDERER_DEVICE_SENSOR_EVENT_PUMP_H_
diff --git a/content/renderer/device_orientation/OWNERS b/content/renderer/device_sensors/OWNERS
similarity index 100%
rename from content/renderer/device_orientation/OWNERS
rename to content/renderer/device_sensors/OWNERS
diff --git a/content/renderer/device_sensors/device_motion_event_pump.cc b/content/renderer/device_sensors/device_motion_event_pump.cc
new file mode 100644
index 0000000..0143d19
--- /dev/null
+++ b/content/renderer/device_sensors/device_motion_event_pump.cc
@@ -0,0 +1,62 @@
+// 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.
+
+#include "device_motion_event_pump.h"
+
+#include "content/common/device_sensors/device_motion_messages.h"
+#include "content/public/renderer/render_thread.h"
+#include "third_party/WebKit/public/platform/WebDeviceMotionListener.h"
+
+namespace content {
+
+DeviceMotionEventPump::DeviceMotionEventPump()
+    : DeviceSensorEventPump(), listener_(0) {
+}
+
+DeviceMotionEventPump::DeviceMotionEventPump(int pump_delay_millis)
+    : DeviceSensorEventPump(pump_delay_millis), listener_(0) {
+}
+
+DeviceMotionEventPump::~DeviceMotionEventPump() {
+}
+
+bool DeviceMotionEventPump::SetListener(
+    blink::WebDeviceMotionListener* listener) {
+  listener_ = listener;
+  return listener_ ? RequestStart() : Stop();
+}
+
+bool DeviceMotionEventPump::OnControlMessageReceived(
+    const IPC::Message& message) {
+  bool handled = true;
+  IPC_BEGIN_MESSAGE_MAP(DeviceMotionEventPump, message)
+    IPC_MESSAGE_HANDLER(DeviceMotionMsg_DidStartPolling, OnDidStart)
+    IPC_MESSAGE_UNHANDLED(handled = false)
+  IPC_END_MESSAGE_MAP()
+  return handled;
+}
+
+void DeviceMotionEventPump::FireEvent() {
+  DCHECK(listener_);
+  blink::WebDeviceMotionData data;
+  if (reader_->GetLatestData(&data) && data.allAvailableSensorsAreActive)
+    listener_->didChangeDeviceMotion(data);
+}
+
+bool DeviceMotionEventPump::InitializeReader(base::SharedMemoryHandle handle) {
+  if (!reader_)
+    reader_.reset(new DeviceMotionSharedMemoryReader());
+  return reader_->Initialize(handle);
+}
+
+bool DeviceMotionEventPump::SendStartMessage() {
+  return RenderThread::Get()->Send(new DeviceMotionHostMsg_StartPolling());
+}
+
+
+bool DeviceMotionEventPump::SendStopMessage() {
+  return RenderThread::Get()->Send(new DeviceMotionHostMsg_StopPolling());
+}
+
+}  // namespace content
diff --git a/content/renderer/device_sensors/device_motion_event_pump.h b/content/renderer/device_sensors/device_motion_event_pump.h
new file mode 100644
index 0000000..c02f814
--- /dev/null
+++ b/content/renderer/device_sensors/device_motion_event_pump.h
@@ -0,0 +1,47 @@
+// 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.
+
+#ifndef CONTENT_RENDERER_DEVICE_SENSORS_DEVICE_MOTION_EVENT_PUMP_H_
+#define CONTENT_RENDERER_DEVICE_SENSORS_DEVICE_MOTION_EVENT_PUMP_H_
+
+#include "base/memory/scoped_ptr.h"
+#include "content/renderer/device_sensors/device_sensor_event_pump.h"
+#include "content/renderer/shared_memory_seqlock_reader.h"
+#include "third_party/WebKit/public/platform/WebDeviceMotionData.h"
+
+namespace blink {
+class WebDeviceMotionListener;
+}
+
+namespace content {
+
+typedef SharedMemorySeqLockReader<blink::WebDeviceMotionData>
+    DeviceMotionSharedMemoryReader;
+
+class CONTENT_EXPORT DeviceMotionEventPump : public DeviceSensorEventPump {
+ public:
+  DeviceMotionEventPump();
+  explicit DeviceMotionEventPump(int pump_delay_millis);
+  virtual ~DeviceMotionEventPump();
+
+  // Sets the listener to receive updates for device motion data at
+  // regular intervals. Returns true if the registration was successful.
+  bool SetListener(blink::WebDeviceMotionListener* listener);
+
+  // RenderProcessObserver implementation.
+  virtual bool OnControlMessageReceived(const IPC::Message& message) OVERRIDE;
+
+ protected:
+  virtual void FireEvent() OVERRIDE;
+  virtual bool InitializeReader(base::SharedMemoryHandle handle) OVERRIDE;
+  virtual bool SendStartMessage() OVERRIDE;
+  virtual bool SendStopMessage() OVERRIDE;
+
+  blink::WebDeviceMotionListener* listener_;
+  scoped_ptr<DeviceMotionSharedMemoryReader> reader_;
+};
+
+}  // namespace content
+
+#endif  // CONTENT_RENDERER_DEVICE_SENSORS_DEVICE_MOTION_EVENT_PUMP_H_
diff --git a/content/renderer/device_sensors/device_motion_event_pump_unittest.cc b/content/renderer/device_sensors/device_motion_event_pump_unittest.cc
new file mode 100644
index 0000000..baca081
--- /dev/null
+++ b/content/renderer/device_sensors/device_motion_event_pump_unittest.cc
@@ -0,0 +1,144 @@
+// 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.
+
+#include "device_motion_event_pump.h"
+
+#include "base/logging.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/message_loop/message_loop.h"
+#include "content/common/device_sensors/device_motion_hardware_buffer.h"
+#include "content/public/test/test_utils.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/WebKit/public/platform/WebDeviceMotionListener.h"
+
+namespace content {
+
+class MockDeviceMotionListener : public blink::WebDeviceMotionListener {
+ public:
+  MockDeviceMotionListener();
+  virtual ~MockDeviceMotionListener() { }
+  virtual void didChangeDeviceMotion(
+      const blink::WebDeviceMotionData&) OVERRIDE;
+  bool did_change_device_motion_;
+  blink::WebDeviceMotionData data_;
+};
+
+MockDeviceMotionListener::MockDeviceMotionListener()
+    : did_change_device_motion_(false) {
+  memset(&data_, 0, sizeof(data_));
+}
+
+void MockDeviceMotionListener::didChangeDeviceMotion(
+    const blink::WebDeviceMotionData& data) {
+  memcpy(&data_, &data, sizeof(data));
+  did_change_device_motion_ = true;
+}
+
+class DeviceMotionEventPumpForTesting : public DeviceMotionEventPump {
+ public:
+  DeviceMotionEventPumpForTesting() { }
+  virtual ~DeviceMotionEventPumpForTesting() { }
+
+  void OnDidStart(base::SharedMemoryHandle renderer_handle) {
+    DeviceMotionEventPump::OnDidStart(renderer_handle);
+  }
+  virtual bool SendStartMessage() OVERRIDE { return true; }
+  virtual bool SendStopMessage() OVERRIDE { return true; }
+  virtual void FireEvent() OVERRIDE {
+    DeviceMotionEventPump::FireEvent();
+    Stop();
+    base::MessageLoop::current()->QuitWhenIdle();
+  }
+};
+
+class DeviceMotionEventPumpTest : public testing::Test {
+ public:
+  DeviceMotionEventPumpTest() {
+    EXPECT_TRUE(shared_memory_.CreateAndMapAnonymous(
+        sizeof(DeviceMotionHardwareBuffer)));
+  }
+
+ protected:
+  virtual void SetUp() OVERRIDE {
+    const DeviceMotionHardwareBuffer* null_buffer = NULL;
+    listener_.reset(new MockDeviceMotionListener);
+    motion_pump_.reset(new DeviceMotionEventPumpForTesting);
+    buffer_ = static_cast<DeviceMotionHardwareBuffer*>(shared_memory_.memory());
+    ASSERT_NE(null_buffer, buffer_);
+    memset(buffer_, 0, sizeof(DeviceMotionHardwareBuffer));
+    ASSERT_TRUE(shared_memory_.ShareToProcess(base::GetCurrentProcessHandle(),
+        &handle_));
+  }
+
+  void InitBuffer(bool allAvailableSensorsActive) {
+    blink::WebDeviceMotionData& data = buffer_->data;
+    data.accelerationX = 1;
+    data.hasAccelerationX = true;
+    data.accelerationY = 2;
+    data.hasAccelerationY = true;
+    data.accelerationZ = 3;
+    data.hasAccelerationZ = true;
+    data.allAvailableSensorsAreActive = allAvailableSensorsActive;
+  }
+
+  scoped_ptr<MockDeviceMotionListener> listener_;
+  scoped_ptr<DeviceMotionEventPumpForTesting> motion_pump_;
+  base::SharedMemoryHandle handle_;
+  base::SharedMemory shared_memory_;
+  DeviceMotionHardwareBuffer* buffer_;
+};
+
+TEST_F(DeviceMotionEventPumpTest, DidStartPolling) {
+  base::MessageLoopForUI loop;
+
+  InitBuffer(true);
+
+  motion_pump_->SetListener(listener_.get());
+  motion_pump_->OnDidStart(handle_);
+
+  base::MessageLoop::current()->Run();
+
+  blink::WebDeviceMotionData& received_data = listener_->data_;
+  EXPECT_TRUE(listener_->did_change_device_motion_);
+  EXPECT_TRUE(received_data.hasAccelerationX);
+  EXPECT_EQ(1, static_cast<double>(received_data.accelerationX));
+  EXPECT_TRUE(received_data.hasAccelerationX);
+  EXPECT_EQ(2, static_cast<double>(received_data.accelerationY));
+  EXPECT_TRUE(received_data.hasAccelerationY);
+  EXPECT_EQ(3, static_cast<double>(received_data.accelerationZ));
+  EXPECT_TRUE(received_data.hasAccelerationZ);
+  EXPECT_FALSE(received_data.hasAccelerationIncludingGravityX);
+  EXPECT_FALSE(received_data.hasAccelerationIncludingGravityY);
+  EXPECT_FALSE(received_data.hasAccelerationIncludingGravityZ);
+  EXPECT_FALSE(received_data.hasRotationRateAlpha);
+  EXPECT_FALSE(received_data.hasRotationRateBeta);
+  EXPECT_FALSE(received_data.hasRotationRateGamma);
+}
+
+TEST_F(DeviceMotionEventPumpTest, DidStartPollingNotAllSensorsActive) {
+  base::MessageLoopForUI loop;
+
+  InitBuffer(false);
+
+  motion_pump_->SetListener(listener_.get());
+  motion_pump_->OnDidStart(handle_);
+
+  base::MessageLoop::current()->Run();
+
+  blink::WebDeviceMotionData& received_data = listener_->data_;
+  // No change in device motion because allAvailableSensorsAreActive is false.
+  EXPECT_FALSE(listener_->did_change_device_motion_);
+  EXPECT_FALSE(received_data.hasAccelerationX);
+  EXPECT_FALSE(received_data.hasAccelerationX);
+  EXPECT_FALSE(received_data.hasAccelerationY);
+  EXPECT_FALSE(received_data.hasAccelerationZ);
+  EXPECT_FALSE(received_data.hasAccelerationIncludingGravityX);
+  EXPECT_FALSE(received_data.hasAccelerationIncludingGravityY);
+  EXPECT_FALSE(received_data.hasAccelerationIncludingGravityZ);
+  EXPECT_FALSE(received_data.hasRotationRateAlpha);
+  EXPECT_FALSE(received_data.hasRotationRateBeta);
+  EXPECT_FALSE(received_data.hasRotationRateGamma);
+}
+
+}  // namespace content
diff --git a/content/renderer/device_sensors/device_orientation_event_pump.cc b/content/renderer/device_sensors/device_orientation_event_pump.cc
new file mode 100644
index 0000000..ec159b0
--- /dev/null
+++ b/content/renderer/device_sensors/device_orientation_event_pump.cc
@@ -0,0 +1,95 @@
+// 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.
+
+#include "device_orientation_event_pump.h"
+
+#include <cmath>
+
+#include "content/common/device_sensors/device_orientation_messages.h"
+#include "content/public/renderer/render_thread.h"
+#include "third_party/WebKit/public/platform/WebDeviceOrientationListener.h"
+
+namespace content {
+
+const double DeviceOrientationEventPump::kOrientationThreshold = 0.1;
+
+DeviceOrientationEventPump::DeviceOrientationEventPump()
+    : DeviceSensorEventPump(), listener_(0) {
+}
+
+DeviceOrientationEventPump::DeviceOrientationEventPump(int pump_delay_millis)
+    : DeviceSensorEventPump(pump_delay_millis), listener_(0) {
+}
+
+DeviceOrientationEventPump::~DeviceOrientationEventPump() {
+}
+
+bool DeviceOrientationEventPump::SetListener(
+    blink::WebDeviceOrientationListener* listener) {
+  listener_ = listener;
+  return listener_ ? RequestStart() : Stop();
+}
+
+bool DeviceOrientationEventPump::OnControlMessageReceived(
+    const IPC::Message& message) {
+  bool handled = true;
+  IPC_BEGIN_MESSAGE_MAP(DeviceOrientationEventPump, message)
+    IPC_MESSAGE_HANDLER(DeviceOrientationMsg_DidStartPolling, OnDidStart)
+    IPC_MESSAGE_UNHANDLED(handled = false)
+  IPC_END_MESSAGE_MAP()
+  return handled;
+}
+
+void DeviceOrientationEventPump::FireEvent() {
+  DCHECK(listener_);
+  blink::WebDeviceOrientationData data;
+  if (reader_->GetLatestData(&data) && ShouldFireEvent(data)) {
+    memcpy(&data_, &data, sizeof(data));
+    listener_->didChangeDeviceOrientation(data);
+  }
+}
+
+static bool IsSignificantlyDifferent(bool hasAngle1, double angle1,
+    bool hasAngle2, double angle2) {
+  if (hasAngle1 != hasAngle2)
+    return true;
+  return (hasAngle1 && std::fabs(angle1 - angle2) >=
+          DeviceOrientationEventPump::kOrientationThreshold);
+}
+
+bool DeviceOrientationEventPump::ShouldFireEvent(
+    const blink::WebDeviceOrientationData& data) const {
+  if (!data.allAvailableSensorsAreActive)
+    return false;
+
+  if (!data.hasAlpha && !data.hasBeta && !data.hasGamma) {
+    // no data can be provided, this is an all-null event.
+    return true;
+  }
+
+  return IsSignificantlyDifferent(
+             data_.hasAlpha, data_.alpha, data.hasAlpha, data.alpha) ||
+         IsSignificantlyDifferent(
+             data_.hasBeta, data_.beta, data.hasBeta, data.beta) ||
+         IsSignificantlyDifferent(
+             data_.hasGamma, data_.gamma, data.hasGamma, data.gamma);
+}
+
+bool DeviceOrientationEventPump::InitializeReader(
+    base::SharedMemoryHandle handle) {
+  memset(&data_, 0, sizeof(data_));
+  if (!reader_)
+    reader_.reset(new DeviceOrientationSharedMemoryReader());
+  return reader_->Initialize(handle);
+}
+
+bool DeviceOrientationEventPump::SendStartMessage() {
+  return RenderThread::Get()->Send(new DeviceOrientationHostMsg_StartPolling());
+}
+
+bool DeviceOrientationEventPump::SendStopMessage() {
+  return RenderThread::Get()->Send(new DeviceOrientationHostMsg_StopPolling());
+}
+
+}  // namespace content
diff --git a/content/renderer/device_sensors/device_orientation_event_pump.h b/content/renderer/device_sensors/device_orientation_event_pump.h
new file mode 100644
index 0000000..b35ac33
--- /dev/null
+++ b/content/renderer/device_sensors/device_orientation_event_pump.h
@@ -0,0 +1,54 @@
+// 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.
+
+#ifndef CONTENT_RENDERER_DEVICE_SENSORS_DEVICE_ORIENTATION_EVENT_PUMP_H_
+#define CONTENT_RENDERER_DEVICE_SENSORS_DEVICE_ORIENTATION_EVENT_PUMP_H_
+
+#include "base/memory/scoped_ptr.h"
+#include "content/renderer/device_sensors/device_sensor_event_pump.h"
+#include "content/renderer/shared_memory_seqlock_reader.h"
+#include "third_party/WebKit/public/platform/WebDeviceOrientationData.h"
+
+namespace blink {
+class WebDeviceOrientationListener;
+}
+
+namespace content {
+
+typedef SharedMemorySeqLockReader<blink::WebDeviceOrientationData>
+    DeviceOrientationSharedMemoryReader;
+
+class CONTENT_EXPORT DeviceOrientationEventPump : public DeviceSensorEventPump {
+ public:
+  // Angle threshold beyond which two orientation events are considered
+  // sufficiently different.
+  static const double kOrientationThreshold;
+
+  DeviceOrientationEventPump();
+  explicit DeviceOrientationEventPump(int pump_delay_millis);
+  virtual ~DeviceOrientationEventPump();
+
+  // Sets the listener to receive updates for device orientation data at
+  // regular intervals. Returns true if the registration was successful.
+  bool SetListener(blink::WebDeviceOrientationListener* listener);
+
+  // RenderProcessObserver implementation.
+  virtual bool OnControlMessageReceived(const IPC::Message& message) OVERRIDE;
+
+ protected:
+  virtual void FireEvent() OVERRIDE;
+  virtual bool InitializeReader(base::SharedMemoryHandle handle) OVERRIDE;
+  virtual bool SendStartMessage() OVERRIDE;
+  virtual bool SendStopMessage() OVERRIDE;
+
+  bool ShouldFireEvent(const blink::WebDeviceOrientationData& data) const;
+
+  blink::WebDeviceOrientationListener* listener_;
+  blink::WebDeviceOrientationData data_;
+  scoped_ptr<DeviceOrientationSharedMemoryReader> reader_;
+};
+
+}  // namespace content
+
+#endif  // CONTENT_RENDERER_DEVICE_SENSORS_DEVICE_ORIENTATION_EVENT_PUMP_H_
diff --git a/content/renderer/device_sensors/device_orientation_event_pump_unittest.cc b/content/renderer/device_sensors/device_orientation_event_pump_unittest.cc
new file mode 100644
index 0000000..12c1c17
--- /dev/null
+++ b/content/renderer/device_sensors/device_orientation_event_pump_unittest.cc
@@ -0,0 +1,209 @@
+// 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.
+
+#include "device_orientation_event_pump.h"
+
+#include "base/logging.h"
+#include "base/message_loop/message_loop.h"
+#include "content/common/device_sensors/device_orientation_hardware_buffer.h"
+#include "content/public/test/test_utils.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/WebKit/public/platform/WebDeviceOrientationListener.h"
+
+namespace content {
+
+class MockDeviceOrientationListener
+    : public blink::WebDeviceOrientationListener {
+ public:
+  MockDeviceOrientationListener();
+  virtual ~MockDeviceOrientationListener() { }
+  virtual void didChangeDeviceOrientation(
+      const blink::WebDeviceOrientationData&) OVERRIDE;
+  void ResetDidChangeOrientation();
+  bool did_change_device_orientation_;
+  blink::WebDeviceOrientationData data_;
+};
+
+MockDeviceOrientationListener::MockDeviceOrientationListener()
+    : did_change_device_orientation_(false) {
+  memset(&data_, 0, sizeof(data_));
+}
+
+void MockDeviceOrientationListener::didChangeDeviceOrientation(
+    const blink::WebDeviceOrientationData& data) {
+  memcpy(&data_, &data, sizeof(data));
+  did_change_device_orientation_ = true;
+}
+
+void MockDeviceOrientationListener::ResetDidChangeOrientation() {
+  did_change_device_orientation_ = false;
+}
+
+class DeviceOrientationEventPumpForTesting : public DeviceOrientationEventPump {
+ public:
+  DeviceOrientationEventPumpForTesting() { }
+  virtual ~DeviceOrientationEventPumpForTesting() { }
+
+  void OnDidStart(base::SharedMemoryHandle renderer_handle) {
+    DeviceOrientationEventPump::OnDidStart(renderer_handle);
+  }
+  virtual bool SendStartMessage() OVERRIDE { return true; }
+  virtual bool SendStopMessage() OVERRIDE { return true; }
+  virtual void FireEvent() OVERRIDE {
+    DeviceOrientationEventPump::FireEvent();
+    Stop();
+    base::MessageLoop::current()->QuitWhenIdle();
+  }
+};
+
+class DeviceOrientationEventPumpTest : public testing::Test {
+ public:
+  DeviceOrientationEventPumpTest() {
+      EXPECT_TRUE(shared_memory_.CreateAndMapAnonymous(
+          sizeof(DeviceOrientationHardwareBuffer)));
+  }
+
+ protected:
+  virtual void SetUp() OVERRIDE {
+    listener_.reset(new MockDeviceOrientationListener);
+    orientation_pump_.reset(new DeviceOrientationEventPumpForTesting);
+    buffer_ = static_cast<DeviceOrientationHardwareBuffer*>(
+        shared_memory_.memory());
+    memset(buffer_, 0, sizeof(DeviceOrientationHardwareBuffer));
+    shared_memory_.ShareToProcess(base::kNullProcessHandle, &handle_);
+  }
+
+  void InitBuffer() {
+    blink::WebDeviceOrientationData& data = buffer_->data;
+    data.alpha = 1;
+    data.hasAlpha = true;
+    data.beta = 2;
+    data.hasBeta = true;
+    data.gamma = 3;
+    data.hasGamma = true;
+    data.allAvailableSensorsAreActive = true;
+  }
+
+  void InitBufferNoData() {
+    blink::WebDeviceOrientationData& data = buffer_->data;
+    data.allAvailableSensorsAreActive = true;
+  }
+
+  scoped_ptr<MockDeviceOrientationListener> listener_;
+  scoped_ptr<DeviceOrientationEventPumpForTesting> orientation_pump_;
+  base::SharedMemoryHandle handle_;
+  base::SharedMemory shared_memory_;
+  DeviceOrientationHardwareBuffer* buffer_;
+};
+
+// Always failing in the win try bot. See http://crbug.com/256782.
+#if defined(OS_WIN)
+#define MAYBE_DidStartPolling DISABLED_DidStartPolling
+#else
+#define MAYBE_DidStartPolling DidStartPolling
+#endif
+TEST_F(DeviceOrientationEventPumpTest, MAYBE_DidStartPolling) {
+  base::MessageLoop loop;
+
+  InitBuffer();
+  orientation_pump_->SetListener(listener_.get());
+  orientation_pump_->OnDidStart(handle_);
+
+  base::MessageLoop::current()->Run();
+
+  blink::WebDeviceOrientationData& received_data = listener_->data_;
+  EXPECT_TRUE(listener_->did_change_device_orientation_);
+  EXPECT_TRUE(received_data.allAvailableSensorsAreActive);
+  EXPECT_EQ(1, static_cast<double>(received_data.alpha));
+  EXPECT_TRUE(received_data.hasAlpha);
+  EXPECT_EQ(2, static_cast<double>(received_data.beta));
+  EXPECT_TRUE(received_data.hasBeta);
+  EXPECT_EQ(3, static_cast<double>(received_data.gamma));
+  EXPECT_TRUE(received_data.hasGamma);
+}
+
+// Always failing in the win try bot. See http://crbug.com/256782.
+#if defined(OS_WIN)
+#define MAYBE_FireAllNullEvent DISABLED_FireAllNullEvent
+#else
+#define MAYBE_FireAllNullEvent FireAllNullEvent
+#endif
+TEST_F(DeviceOrientationEventPumpTest, MAYBE_FireAllNullEvent) {
+  base::MessageLoop loop;
+
+  InitBufferNoData();
+  orientation_pump_->SetListener(listener_.get());
+  orientation_pump_->OnDidStart(handle_);
+
+  base::MessageLoop::current()->Run();
+
+  blink::WebDeviceOrientationData& received_data = listener_->data_;
+  EXPECT_TRUE(listener_->did_change_device_orientation_);
+  EXPECT_TRUE(received_data.allAvailableSensorsAreActive);
+  EXPECT_FALSE(received_data.hasAlpha);
+  EXPECT_FALSE(received_data.hasBeta);
+  EXPECT_FALSE(received_data.hasGamma);
+}
+
+// Always failing in the win try bot. See http://crbug.com/256782.
+#if defined(OS_WIN)
+#define MAYBE_UpdateRespectsOrientationThreshold \
+    DISABLED_UpdateRespectsOrientationThreshold
+#else
+#define MAYBE_UpdateRespectsOrientationThreshold \
+    UpdateRespectsOrientationThreshold
+#endif
+TEST_F(DeviceOrientationEventPumpTest,
+    MAYBE_UpdateRespectsOrientationThreshold) {
+  base::MessageLoop loop;
+
+  InitBuffer();
+  orientation_pump_->SetListener(listener_.get());
+  orientation_pump_->OnDidStart(handle_);
+
+  base::MessageLoop::current()->Run();
+
+  blink::WebDeviceOrientationData& received_data = listener_->data_;
+  EXPECT_TRUE(listener_->did_change_device_orientation_);
+  EXPECT_TRUE(received_data.allAvailableSensorsAreActive);
+  EXPECT_EQ(1, static_cast<double>(received_data.alpha));
+  EXPECT_TRUE(received_data.hasAlpha);
+  EXPECT_EQ(2, static_cast<double>(received_data.beta));
+  EXPECT_TRUE(received_data.hasBeta);
+  EXPECT_EQ(3, static_cast<double>(received_data.gamma));
+  EXPECT_TRUE(received_data.hasGamma);
+
+  buffer_->data.alpha =
+      1 + DeviceOrientationEventPump::kOrientationThreshold / 2.0;
+  listener_->ResetDidChangeOrientation();
+
+  base::MessageLoop::current()->PostTask(FROM_HERE,
+      base::Bind(&DeviceOrientationEventPumpForTesting::FireEvent,
+                 base::Unretained(orientation_pump_.get())));
+  base::MessageLoop::current()->Run();
+
+  EXPECT_FALSE(listener_->did_change_device_orientation_);
+  EXPECT_TRUE(received_data.allAvailableSensorsAreActive);
+  EXPECT_EQ(1, static_cast<double>(received_data.alpha));
+  EXPECT_TRUE(received_data.hasAlpha);
+  EXPECT_EQ(2, static_cast<double>(received_data.beta));
+  EXPECT_TRUE(received_data.hasBeta);
+  EXPECT_EQ(3, static_cast<double>(received_data.gamma));
+  EXPECT_TRUE(received_data.hasGamma);
+
+  buffer_->data.alpha =
+      1 + DeviceOrientationEventPump::kOrientationThreshold;
+  listener_->ResetDidChangeOrientation();
+
+  base::MessageLoop::current()->PostTask(FROM_HERE,
+      base::Bind(&DeviceOrientationEventPumpForTesting::FireEvent,
+                 base::Unretained(orientation_pump_.get())));
+  base::MessageLoop::current()->Run();
+
+  EXPECT_TRUE(listener_->did_change_device_orientation_);
+  EXPECT_EQ(1 + DeviceOrientationEventPump::kOrientationThreshold,
+      static_cast<double>(received_data.alpha));
+}
+
+}  // namespace content
diff --git a/content/renderer/device_sensors/device_sensor_event_pump.cc b/content/renderer/device_sensors/device_sensor_event_pump.cc
new file mode 100644
index 0000000..eed3af2
--- /dev/null
+++ b/content/renderer/device_sensors/device_sensor_event_pump.cc
@@ -0,0 +1,87 @@
+// 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.
+
+#include "device_sensor_event_pump.h"
+
+#include "base/logging.h"
+#include "content/public/renderer/render_thread.h"
+
+namespace content {
+
+// Default interval between successive polls, should take into account the
+// value of |kInertialSensorIntervalMillis| in
+// content/browser/device_sensors/inertial_sensor_consts.h.
+const int DeviceSensorEventPump::kDefaultPumpDelayMillis = 50;
+
+int DeviceSensorEventPump::GetDelayMillis() const {
+  return pump_delay_millis_;
+}
+
+DeviceSensorEventPump::DeviceSensorEventPump()
+    : pump_delay_millis_(kDefaultPumpDelayMillis),
+      state_(STOPPED) {
+}
+
+DeviceSensorEventPump::DeviceSensorEventPump(int pump_delay_millis)
+    : pump_delay_millis_(pump_delay_millis),
+      state_(STOPPED) {
+  DCHECK_GE(pump_delay_millis_, 0);
+}
+
+DeviceSensorEventPump::~DeviceSensorEventPump() {
+}
+
+bool DeviceSensorEventPump::RequestStart() {
+  DVLOG(2) << "requested start";
+
+  if (state_ != STOPPED)
+    return false;
+
+  DCHECK(!timer_.IsRunning());
+
+  if (SendStartMessage()) {
+    state_ = PENDING_START;
+    return true;
+  }
+  return false;
+}
+
+bool DeviceSensorEventPump::Stop() {
+  DVLOG(2) << "stop";
+
+  if (state_ == STOPPED)
+    return true;
+
+  DCHECK((state_ == PENDING_START && !timer_.IsRunning()) ||
+      (state_ == RUNNING && timer_.IsRunning()));
+
+  if (timer_.IsRunning())
+    timer_.Stop();
+  SendStopMessage();
+  state_ = STOPPED;
+  return true;
+}
+
+void DeviceSensorEventPump::Attach(RenderThread* thread) {
+  if (!thread)
+    return;
+  thread->AddObserver(this);
+}
+
+void DeviceSensorEventPump::OnDidStart(base::SharedMemoryHandle handle) {
+  DVLOG(2) << "did start sensor event pump";
+
+  if (state_ != PENDING_START)
+    return;
+
+  DCHECK(!timer_.IsRunning());
+
+  if (InitializeReader(handle)) {
+    timer_.Start(FROM_HERE, base::TimeDelta::FromMilliseconds(GetDelayMillis()),
+                 this, &DeviceSensorEventPump::FireEvent);
+    state_ = RUNNING;
+  }
+}
+
+}  // namespace content
diff --git a/content/renderer/device_sensors/device_sensor_event_pump.h b/content/renderer/device_sensors/device_sensor_event_pump.h
new file mode 100644
index 0000000..0c66e54
--- /dev/null
+++ b/content/renderer/device_sensors/device_sensor_event_pump.h
@@ -0,0 +1,60 @@
+// 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.
+
+#ifndef CONTENT_RENDERER_DEVICE_SENSORS_DEVICE_SENSOR_EVENT_PUMP_H_
+#define CONTENT_RENDERER_DEVICE_SENSORS_DEVICE_SENSOR_EVENT_PUMP_H_
+
+#include "base/memory/shared_memory.h"
+#include "base/timer/timer.h"
+#include "content/public/renderer/render_process_observer.h"
+
+namespace content {
+class RenderThread;
+
+class CONTENT_EXPORT DeviceSensorEventPump : public RenderProcessObserver {
+ public:
+  // Default delay between subsequent firing of events.
+  static const int kDefaultPumpDelayMillis;
+
+  int GetDelayMillis() const;
+
+  void Attach(RenderThread* thread);
+  virtual bool OnControlMessageReceived(const IPC::Message& message) = 0;
+
+ protected:
+  // Constructor for a pump with default delay.
+  DeviceSensorEventPump();
+
+  // Constructor for a pump with a given delay.
+  explicit DeviceSensorEventPump(int pump_delay_millis);
+  virtual ~DeviceSensorEventPump();
+
+  // The pump is a tri-state automaton with allowed transitions as follows:
+  // STOPPED -> PENDING_START
+  // PENDING_START -> RUNNING
+  // PENDING_START -> STOPPED
+  // RUNNING -> STOPPED
+  enum PumpState {
+      STOPPED,
+      RUNNING,
+      PENDING_START
+  };
+
+  bool RequestStart();
+  void OnDidStart(base::SharedMemoryHandle handle);
+  bool Stop();
+
+  virtual void FireEvent() = 0;
+  virtual bool InitializeReader(base::SharedMemoryHandle handle) = 0;
+  virtual bool SendStartMessage() = 0;
+  virtual bool SendStopMessage() = 0;
+
+  int pump_delay_millis_;
+  PumpState state_;
+  base::RepeatingTimer<DeviceSensorEventPump> timer_;
+};
+
+}  // namespace content
+
+#endif  // CONTENT_RENDERER_DEVICE_SENSORS_DEVICE_SENSOR_EVENT_PUMP_H_
diff --git a/content/renderer/dom_serializer_browsertest.cc b/content/renderer/dom_serializer_browsertest.cc
index 5b3a444..5f5ebfe 100644
--- a/content/renderer/dom_serializer_browsertest.cc
+++ b/content/renderer/dom_serializer_browsertest.cc
@@ -174,7 +174,7 @@
     command_line->AppendSwitch(switches::kSingleProcess);
 #if defined(OS_WIN)
     // Don't want to try to create a GPU process.
-    command_line->AppendSwitch(switches::kDisableAcceleratedCompositing);
+    command_line->AppendSwitch(switches::kDisableGpu);
 #endif
   }
 
diff --git a/content/renderer/drop_data_builder.cc b/content/renderer/drop_data_builder.cc
index 14b4dcd..395c2b5 100644
--- a/content/renderer/drop_data_builder.cc
+++ b/content/renderer/drop_data_builder.cc
@@ -59,8 +59,13 @@
             base::FilePath::FromUTF16Unsafe(item.filenameData),
             base::FilePath::FromUTF16Unsafe(item.displayNameData)));
         break;
-      default:  // TODO(hashimoto): Remove this "default".
-        NOTREACHED();
+      case WebDragData::Item::StorageTypeFileSystemFile: {
+        DropData::FileSystemFileInfo info;
+        info.url = item.fileSystemURL;
+        info.size = item.fileSystemFileSize;
+        result.file_system_files.push_back(info);
+        break;
+      }
     }
   }
 
diff --git a/content/renderer/gpu/gpu_benchmarking_extension.cc b/content/renderer/gpu/gpu_benchmarking_extension.cc
index 69b6162..d57ab44 100644
--- a/content/renderer/gpu/gpu_benchmarking_extension.cc
+++ b/content/renderer/gpu/gpu_benchmarking_extension.cc
@@ -235,6 +235,11 @@
           "chrome.gpuBenchmarking.DEFAULT_INPUT = 0;"
           "chrome.gpuBenchmarking.TOUCH_INPUT = 1;"
           "chrome.gpuBenchmarking.MOUSE_INPUT = 2;"
+          "chrome.gpuBenchmarking.gestureSourceTypeSupported = "
+          "    function(gesture_source_type) {"
+          "  native function GestureSourceTypeSupported();"
+          "  return GestureSourceTypeSupported(gesture_source_type);"
+          "};"
           "chrome.gpuBenchmarking.smoothScrollBy = "
           "    function(pixels_to_scroll, opt_callback, opt_start_x,"
           "             opt_start_y, opt_gesture_source_type,"
@@ -251,10 +256,6 @@
           "                           speed_in_pixels_s, true,"
           "                           opt_start_x, opt_start_y);"
           "};"
-          "chrome.gpuBenchmarking.smoothScrollBySendsTouch = function() {"
-          "  native function SmoothScrollSendsTouch();"
-          "  return SmoothScrollSendsTouch();"
-          "};"
           "chrome.gpuBenchmarking.swipe = "
           "    function(direction, distance, opt_callback,"
           "             opt_start_x, opt_start_y,"
@@ -337,11 +338,11 @@
       return v8::FunctionTemplate::New(isolate, SetRasterizeOnlyVisibleContent);
     if (name->Equals(v8::String::NewFromUtf8(isolate, "PrintToSkPicture")))
       return v8::FunctionTemplate::New(isolate, PrintToSkPicture);
+    if (name->Equals(
+            v8::String::NewFromUtf8(isolate, "GestureSourceTypeSupported")))
+      return v8::FunctionTemplate::New(isolate, GestureSourceTypeSupported);
     if (name->Equals(v8::String::NewFromUtf8(isolate, "BeginSmoothScroll")))
       return v8::FunctionTemplate::New(isolate, BeginSmoothScroll);
-    if (name->Equals(
-            v8::String::NewFromUtf8(isolate, "SmoothScrollSendsTouch")))
-      return v8::FunctionTemplate::New(isolate, SmoothScrollSendsTouch);
     if (name->Equals(v8::String::NewFromUtf8(isolate, "BeginScrollBounce")))
       return v8::FunctionTemplate::New(isolate, BeginScrollBounce);
     if (name->Equals(v8::String::NewFromUtf8(isolate, "BeginPinch")))
@@ -428,14 +429,24 @@
     }
   }
 
-  static void SmoothScrollSendsTouch(
+  static void GestureSourceTypeSupported(
       const v8::FunctionCallbackInfo<v8::Value>& args) {
-    // TODO(epenner): Should other platforms emulate touch events?
-#if defined(OS_ANDROID) || defined(OS_CHROMEOS)
-    args.GetReturnValue().Set(true);
-#else
-    args.GetReturnValue().Set(false);
-#endif
+    if (args.Length() != 1 || !args[0]->IsNumber()) {
+      args.GetReturnValue().Set(false);
+      return;
+    }
+
+    int gesture_source_type = args[0]->IntegerValue();
+    if (gesture_source_type < 0 ||
+        gesture_source_type > SyntheticGestureParams::GESTURE_SOURCE_TYPE_MAX) {
+      args.GetReturnValue().Set(false);
+      return;
+    }
+
+    bool is_supported = SyntheticGestureParams::IsGestureSourceTypeSupported(
+        static_cast<SyntheticGestureParams::GestureSourceType>(
+            gesture_source_type));
+    args.GetReturnValue().Set(is_supported);
   }
 
   static void BeginSmoothScroll(
diff --git a/content/renderer/history_controller.cc b/content/renderer/history_controller.cc
index 23e74de..b47930e 100644
--- a/content/renderer/history_controller.cc
+++ b/content/renderer/history_controller.cc
@@ -50,133 +50,6 @@
 
 namespace content {
 
-const int kInvalidFrameRoutingID = -1;
-
-HistoryNode* HistoryNode::AddChild(const WebHistoryItem& item,
-                                   int64_t frame_id) {
-  children_->push_back(new HistoryNode(entry_, item, frame_id));
-  return children_->back();
-}
-
-HistoryNode* HistoryNode::CloneAndReplace(HistoryEntry* new_entry,
-                                          const WebHistoryItem& new_item,
-                                          bool clone_children_of_target,
-                                          RenderFrameImpl* target_frame,
-                                          RenderFrameImpl* current_frame) {
-  bool is_target_frame = target_frame == current_frame;
-  const WebHistoryItem& item_for_create = is_target_frame ? new_item : item_;
-  HistoryNode* new_history_node = new HistoryNode(
-      new_entry, item_for_create, current_frame->GetRoutingID());
-
-  if (is_target_frame && clone_children_of_target && !item_.isNull()) {
-    new_history_node->item().setDocumentSequenceNumber(
-        item_.documentSequenceNumber());
-  }
-
-  if (clone_children_of_target || !is_target_frame) {
-    for (WebFrame* child = current_frame->GetWebFrame()->firstChild(); child;
-         child = child->nextSibling()) {
-      RenderFrameImpl* child_render_frame =
-          RenderFrameImpl::FromWebFrame(child);
-      HistoryNode* child_history_node =
-          entry_->GetHistoryNodeForFrame(child_render_frame);
-      if (!child_history_node)
-        continue;
-      HistoryNode* new_child_node =
-          child_history_node->CloneAndReplace(new_entry,
-                                              new_item,
-                                              clone_children_of_target,
-                                              target_frame,
-                                              child_render_frame);
-      new_history_node->children_->push_back(new_child_node);
-    }
-  }
-  return new_history_node;
-}
-
-HistoryNode::HistoryNode(HistoryEntry* entry,
-                         const WebHistoryItem& item,
-                         int64_t frame_id)
-    : entry_(entry), item_(item) {
-  if (frame_id != kInvalidFrameRoutingID)
-    entry_->frames_to_items_[frame_id] = this;
-  entry_->unique_names_to_items_[item.target().utf8()] = this;
-  children_.reset(new ScopedVector<HistoryNode>);
-}
-
-HistoryNode::~HistoryNode() {
-}
-
-void HistoryNode::RemoveChildren() {
-  // TODO(japhet): This is inefficient. Figure out a cleaner way to ensure
-  // this HistoryNode isn't cached anywhere.
-  std::vector<uint64_t> frames_to_remove;
-  std::vector<std::string> unique_names_to_remove;
-  for (size_t i = 0; i < children().size(); i++) {
-    children().at(i)->RemoveChildren();
-
-    HistoryEntry::FramesToItems::iterator frames_end =
-        entry_->frames_to_items_.end();
-    HistoryEntry::UniqueNamesToItems::iterator unique_names_end =
-        entry_->unique_names_to_items_.end();
-    for (HistoryEntry::FramesToItems::iterator it =
-             entry_->frames_to_items_.begin();
-         it != frames_end;
-         ++it) {
-      if (it->second == children().at(i))
-        frames_to_remove.push_back(it->first);
-    }
-    for (HistoryEntry::UniqueNamesToItems::iterator it =
-             entry_->unique_names_to_items_.begin();
-         it != unique_names_end;
-         ++it) {
-      if (it->second == children().at(i))
-        unique_names_to_remove.push_back(it->first);
-    }
-  }
-  for (unsigned i = 0; i < frames_to_remove.size(); i++)
-    entry_->frames_to_items_.erase(frames_to_remove[i]);
-  for (unsigned i = 0; i < unique_names_to_remove.size(); i++)
-    entry_->unique_names_to_items_.erase(unique_names_to_remove[i]);
-  children_.reset(new ScopedVector<HistoryNode>);
-}
-
-HistoryEntry::HistoryEntry() {
-}
-
-HistoryEntry::~HistoryEntry() {
-}
-
-HistoryEntry::HistoryEntry(const WebHistoryItem& root, int64_t frame_id) {
-  root_.reset(new HistoryNode(this, root, frame_id));
-}
-
-HistoryEntry* HistoryEntry::CloneAndReplace(const WebHistoryItem& new_item,
-                                            bool clone_children_of_target,
-                                            RenderFrameImpl* target_frame,
-                                            RenderViewImpl* render_view) {
-  HistoryEntry* new_entry = new HistoryEntry();
-  new_entry->root_.reset(
-      root_->CloneAndReplace(new_entry,
-                             new_item,
-                             clone_children_of_target,
-                             target_frame,
-                             render_view->main_render_frame()));
-  return new_entry;
-}
-
-HistoryNode* HistoryEntry::GetHistoryNodeForFrame(RenderFrameImpl* frame) {
-  if (HistoryNode* history_node = frames_to_items_[frame->GetRoutingID()])
-    return history_node;
-  return unique_names_to_items_[frame->GetWebFrame()->uniqueName().utf8()];
-}
-
-WebHistoryItem HistoryEntry::GetItemForFrame(RenderFrameImpl* frame) {
-  if (HistoryNode* history_node = GetHistoryNodeForFrame(frame))
-    return history_node->item();
-  return WebHistoryItem();
-}
-
 HistoryController::HistoryController(RenderViewImpl* render_view)
     : render_view_(render_view) {
 }
@@ -267,18 +140,18 @@
   // ensure they don't accidentally match a potentially random frame.
   HistoryEntry* new_entry = new HistoryEntry(
       target_item, render_view_->main_render_frame()->GetRoutingID());
-  std::deque<HistoryNode*> history_nodes;
+  std::deque<HistoryEntry::HistoryNode*> history_nodes;
   history_nodes.push_back(new_entry->root_history_node());
   while (!history_nodes.empty()) {
     // For each item, read the children (if any) off the WebHistoryItem,
     // create a new HistoryNode for each child and attach it,
     // then clear the children on the WebHistoryItem.
-    HistoryNode* history_node = history_nodes.front();
+    HistoryEntry::HistoryNode* history_node = history_nodes.front();
     history_nodes.pop_front();
 
     WebVector<WebHistoryItem> children = history_node->item().children();
     for (size_t i = 0; i < children.size(); i++) {
-      HistoryNode* child_history_node =
+      HistoryEntry::HistoryNode* child_history_node =
           history_node->AddChild(children[i], kInvalidFrameRoutingID);
       history_nodes.push_back(child_history_node);
     }
@@ -293,14 +166,14 @@
   DCHECK_NE(frame->GetWebFrame()->top(), frame->GetWebFrame());
   if (!current_entry_)
     return;
-  if (HistoryNode* existing_node =
-      current_entry_->GetHistoryNodeForFrame(frame)) {
+  if (HistoryEntry::HistoryNode* existing_node =
+          current_entry_->GetHistoryNodeForFrame(frame)) {
     existing_node->set_item(item);
     return;
   }
   RenderFrameImpl* parent =
       RenderFrameImpl::FromWebFrame(frame->GetWebFrame()->parent());
-  if (HistoryNode* parent_history_node =
+  if (HistoryEntry::HistoryNode* parent_history_node =
           current_entry_->GetHistoryNodeForFrame(parent)) {
     parent_history_node->AddChild(item, frame->GetRoutingID());
   }
@@ -322,11 +195,12 @@
   }
 }
 
-static WebHistoryItem ItemForExport(HistoryNode* history_node) {
+static WebHistoryItem ItemForExport(HistoryEntry::HistoryNode* history_node) {
   DCHECK(history_node);
   WebHistoryItem item = history_node->item();
   item.setChildren(WebVector<WebHistoryItem>());
-  std::vector<HistoryNode*>& child_nodes = history_node->children();
+  std::vector<HistoryEntry::HistoryNode*>& child_nodes =
+      history_node->children();
   for (size_t i = 0; i < child_nodes.size(); i++)
     item.appendToChildren(ItemForExport(child_nodes.at(i)));
   return item;
@@ -354,7 +228,8 @@
 void HistoryController::RemoveChildrenForRedirect(RenderFrameImpl* frame) {
   if (!provisional_entry_)
     return;
-  if (HistoryNode* node = provisional_entry_->GetHistoryNodeForFrame(frame))
+  if (HistoryEntry::HistoryNode* node =
+          provisional_entry_->GetHistoryNodeForFrame(frame))
     node->RemoveChildren();
 }
 
diff --git a/content/renderer/history_controller.h b/content/renderer/history_controller.h
index 8b1ba9f..0118b0b 100644
--- a/content/renderer/history_controller.h
+++ b/content/renderer/history_controller.h
@@ -39,6 +39,7 @@
 #include "base/memory/scoped_ptr.h"
 #include "base/memory/scoped_vector.h"
 #include "content/common/content_export.h"
+#include "content/renderer/history_entry.h"
 #include "third_party/WebKit/public/platform/WebURLRequest.h"
 #include "third_party/WebKit/public/web/WebHistoryCommitType.h"
 #include "third_party/WebKit/public/web/WebHistoryItem.h"
@@ -48,7 +49,6 @@
 }
 
 namespace content {
-class HistoryEntry;
 class RenderFrameImpl;
 class RenderViewImpl;
 
@@ -104,60 +104,6 @@
 //            HistoryNode 2_3: (WebHistoryItem H (url: bar.com/f))
 //         HistoryNode 2_2: (WebHistoryItem E (url: bar.com/c)) *REUSED*
 //
-
-class HistoryNode {
- public:
-  HistoryNode(HistoryEntry* entry,
-              const blink::WebHistoryItem& item,
-              int64_t frame_id);
-  ~HistoryNode();
-
-  HistoryNode* AddChild(const blink::WebHistoryItem& item, int64_t frame_id);
-  HistoryNode* CloneAndReplace(HistoryEntry* new_entry,
-                               const blink::WebHistoryItem& new_item,
-                               bool clone_children_of_target,
-                               RenderFrameImpl* target_frame,
-                               RenderFrameImpl* current_frame);
-  blink::WebHistoryItem& item() { return item_; }
-  void set_item(const blink::WebHistoryItem& item) { item_ = item; }
-  std::vector<HistoryNode*>& children() const { return children_->get(); }
-  void RemoveChildren();
-
- private:
-  HistoryEntry* entry_;
-  scoped_ptr<ScopedVector<HistoryNode> > children_;
-  blink::WebHistoryItem item_;
-};
-
-class HistoryEntry {
- public:
-  HistoryEntry(const blink::WebHistoryItem& root, int64_t frame_id);
-  ~HistoryEntry();
-
-  HistoryEntry* CloneAndReplace(const blink::WebHistoryItem& newItem,
-                                bool clone_children_of_target,
-                                RenderFrameImpl* target_frame,
-                                RenderViewImpl* render_view);
-
-  HistoryNode* GetHistoryNodeForFrame(RenderFrameImpl* frame);
-  blink::WebHistoryItem GetItemForFrame(RenderFrameImpl* frame);
-  const blink::WebHistoryItem& root() const { return root_->item(); }
-  HistoryNode* root_history_node() const { return root_.get(); }
-
- private:
-  friend class HistoryNode;
-
-  HistoryEntry();
-
-  scoped_ptr<HistoryNode> root_;
-
-  typedef base::hash_map<uint64_t, HistoryNode*> FramesToItems;
-  FramesToItems frames_to_items_;
-
-  typedef base::hash_map<std::string, HistoryNode*> UniqueNamesToItems;
-  UniqueNamesToItems unique_names_to_items_;
-};
-
 class CONTENT_EXPORT HistoryController {
  public:
   explicit HistoryController(RenderViewImpl* render_view);
diff --git a/content/renderer/history_entry.cc b/content/renderer/history_entry.cc
new file mode 100644
index 0000000..8d168ee
--- /dev/null
+++ b/content/renderer/history_entry.cc
@@ -0,0 +1,177 @@
+// 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.
+
+/*
+ * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+ * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
+ * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved.
+ *     (http://www.torchmobile.com/)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+ *     its contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "content/renderer/history_entry.h"
+
+#include <deque>
+
+#include "content/renderer/render_frame_impl.h"
+#include "content/renderer/render_view_impl.h"
+#include "third_party/WebKit/public/web/WebFrame.h"
+
+using blink::WebFrame;
+using blink::WebHistoryItem;
+
+namespace content {
+
+HistoryEntry::HistoryNode* HistoryEntry::HistoryNode::AddChild(
+    const WebHistoryItem& item,
+    int64_t frame_id) {
+  children_->push_back(new HistoryNode(entry_, item, frame_id));
+  return children_->back();
+}
+
+HistoryEntry::HistoryNode* HistoryEntry::HistoryNode::CloneAndReplace(
+    HistoryEntry* new_entry,
+    const WebHistoryItem& new_item,
+    bool clone_children_of_target,
+    RenderFrameImpl* target_frame,
+    RenderFrameImpl* current_frame) {
+  bool is_target_frame = target_frame == current_frame;
+  const WebHistoryItem& item_for_create = is_target_frame ? new_item : item_;
+  HistoryNode* new_history_node = new HistoryNode(
+      new_entry, item_for_create, current_frame->GetRoutingID());
+
+  if (is_target_frame && clone_children_of_target && !item_.isNull()) {
+    new_history_node->item().setDocumentSequenceNumber(
+        item_.documentSequenceNumber());
+  }
+
+  if (clone_children_of_target || !is_target_frame) {
+    for (WebFrame* child = current_frame->GetWebFrame()->firstChild(); child;
+         child = child->nextSibling()) {
+      RenderFrameImpl* child_render_frame =
+          RenderFrameImpl::FromWebFrame(child);
+      HistoryNode* child_history_node =
+          entry_->GetHistoryNodeForFrame(child_render_frame);
+      if (!child_history_node)
+        continue;
+      HistoryNode* new_child_node =
+          child_history_node->CloneAndReplace(new_entry,
+                                              new_item,
+                                              clone_children_of_target,
+                                              target_frame,
+                                              child_render_frame);
+      new_history_node->children_->push_back(new_child_node);
+    }
+  }
+  return new_history_node;
+}
+
+HistoryEntry::HistoryNode::HistoryNode(HistoryEntry* entry,
+                                       const WebHistoryItem& item,
+                                       int64_t frame_id)
+    : entry_(entry), item_(item) {
+  if (frame_id != kInvalidFrameRoutingID)
+    entry_->frames_to_items_[frame_id] = this;
+  entry_->unique_names_to_items_[item.target().utf8()] = this;
+  children_.reset(new ScopedVector<HistoryNode>);
+}
+
+HistoryEntry::HistoryNode::~HistoryNode() {
+}
+
+void HistoryEntry::HistoryNode::RemoveChildren() {
+  // TODO(japhet): This is inefficient. Figure out a cleaner way to ensure
+  // this HistoryNode isn't cached anywhere.
+  std::vector<uint64_t> frames_to_remove;
+  std::vector<std::string> unique_names_to_remove;
+  for (size_t i = 0; i < children().size(); i++) {
+    children().at(i)->RemoveChildren();
+
+    HistoryEntry::FramesToItems::iterator frames_end =
+        entry_->frames_to_items_.end();
+    HistoryEntry::UniqueNamesToItems::iterator unique_names_end =
+        entry_->unique_names_to_items_.end();
+    for (HistoryEntry::FramesToItems::iterator it =
+             entry_->frames_to_items_.begin();
+         it != frames_end;
+         ++it) {
+      if (it->second == children().at(i))
+        frames_to_remove.push_back(it->first);
+    }
+    for (HistoryEntry::UniqueNamesToItems::iterator it =
+             entry_->unique_names_to_items_.begin();
+         it != unique_names_end;
+         ++it) {
+      if (it->second == children().at(i))
+        unique_names_to_remove.push_back(it->first);
+    }
+  }
+  for (unsigned i = 0; i < frames_to_remove.size(); i++)
+    entry_->frames_to_items_.erase(frames_to_remove[i]);
+  for (unsigned i = 0; i < unique_names_to_remove.size(); i++)
+    entry_->unique_names_to_items_.erase(unique_names_to_remove[i]);
+  children_.reset(new ScopedVector<HistoryNode>);
+}
+
+HistoryEntry::HistoryEntry() {
+}
+
+HistoryEntry::~HistoryEntry() {
+}
+
+HistoryEntry::HistoryEntry(const WebHistoryItem& root, int64_t frame_id) {
+  root_.reset(new HistoryNode(this, root, frame_id));
+}
+
+HistoryEntry* HistoryEntry::CloneAndReplace(const WebHistoryItem& new_item,
+                                            bool clone_children_of_target,
+                                            RenderFrameImpl* target_frame,
+                                            RenderViewImpl* render_view) {
+  HistoryEntry* new_entry = new HistoryEntry();
+  new_entry->root_.reset(
+      root_->CloneAndReplace(new_entry,
+                             new_item,
+                             clone_children_of_target,
+                             target_frame,
+                             render_view->main_render_frame()));
+  return new_entry;
+}
+
+HistoryEntry::HistoryNode* HistoryEntry::GetHistoryNodeForFrame(
+    RenderFrameImpl* frame) {
+  if (HistoryNode* history_node = frames_to_items_[frame->GetRoutingID()])
+    return history_node;
+  return unique_names_to_items_[frame->GetWebFrame()->uniqueName().utf8()];
+}
+
+WebHistoryItem HistoryEntry::GetItemForFrame(RenderFrameImpl* frame) {
+  if (HistoryNode* history_node = GetHistoryNodeForFrame(frame))
+    return history_node->item();
+  return WebHistoryItem();
+}
+
+}  // namespace content
diff --git a/content/renderer/history_entry.h b/content/renderer/history_entry.h
new file mode 100644
index 0000000..f8cc14d
--- /dev/null
+++ b/content/renderer/history_entry.h
@@ -0,0 +1,107 @@
+// 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.
+
+/*
+ * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+ * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved.
+ *     (http://www.torchmobile.com/)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+ *     its contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef CONTENT_RENDERER_HISTORY_ENTRY_H_
+#define CONTENT_RENDERER_HISTORY_ENTRY_H_
+
+#include "base/containers/hash_tables.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/memory/scoped_vector.h"
+#include "third_party/WebKit/public/platform/WebURLRequest.h"
+#include "third_party/WebKit/public/web/WebHistoryItem.h"
+
+namespace blink {
+class WebFrame;
+}
+
+namespace content {
+class RenderFrameImpl;
+class RenderViewImpl;
+
+const int kInvalidFrameRoutingID = -1;
+
+class HistoryEntry {
+ public:
+  class HistoryNode {
+   public:
+    HistoryNode(HistoryEntry* entry,
+                const blink::WebHistoryItem& item,
+                int64_t frame_id);
+    ~HistoryNode();
+
+    HistoryNode* AddChild(const blink::WebHistoryItem& item, int64_t frame_id);
+    HistoryNode* CloneAndReplace(HistoryEntry* new_entry,
+                                 const blink::WebHistoryItem& new_item,
+                                 bool clone_children_of_target,
+                                 RenderFrameImpl* target_frame,
+                                 RenderFrameImpl* current_frame);
+    blink::WebHistoryItem& item() { return item_; }
+    void set_item(const blink::WebHistoryItem& item) { item_ = item; }
+    std::vector<HistoryNode*>& children() const { return children_->get(); }
+    void RemoveChildren();
+
+   private:
+    HistoryEntry* entry_;
+    scoped_ptr<ScopedVector<HistoryNode> > children_;
+    blink::WebHistoryItem item_;
+  };
+
+  HistoryEntry(const blink::WebHistoryItem& root, int64_t frame_id);
+  ~HistoryEntry();
+
+  HistoryEntry* CloneAndReplace(const blink::WebHistoryItem& newItem,
+                                bool clone_children_of_target,
+                                RenderFrameImpl* target_frame,
+                                RenderViewImpl* render_view);
+
+  HistoryNode* GetHistoryNodeForFrame(RenderFrameImpl* frame);
+  blink::WebHistoryItem GetItemForFrame(RenderFrameImpl* frame);
+  const blink::WebHistoryItem& root() const { return root_->item(); }
+  HistoryNode* root_history_node() const { return root_.get(); }
+
+ private:
+  HistoryEntry();
+
+  scoped_ptr<HistoryNode> root_;
+
+  typedef base::hash_map<uint64_t, HistoryNode*> FramesToItems;
+  FramesToItems frames_to_items_;
+
+  typedef base::hash_map<std::string, HistoryNode*> UniqueNamesToItems;
+  UniqueNamesToItems unique_names_to_items_;
+};
+
+}  // namespace content
+
+#endif  // CONTENT_RENDERER_HISTORY_ENTRY_H_
diff --git a/content/renderer/input/input_handler_proxy.cc b/content/renderer/input/input_handler_proxy.cc
index 3af2938..d7b594d 100644
--- a/content/renderer/input/input_handler_proxy.cc
+++ b/content/renderer/input/input_handler_proxy.cc
@@ -160,8 +160,12 @@
         // main thread. Change back to DROP_EVENT once we have synchronization
         // bugs sorted out.
         return DID_NOT_HANDLE;
+      case cc::InputHandler::ScrollUnknown:
       case cc::InputHandler::ScrollOnMainThread:
         return DID_NOT_HANDLE;
+      case cc::InputHandler::ScrollStatusCount:
+        NOTREACHED();
+        break;
     }
   } else if (event.type == WebInputEvent::GestureScrollBegin) {
     DCHECK(!gesture_scroll_on_impl_thread_);
@@ -174,6 +178,9 @@
     cc::InputHandler::ScrollStatus scroll_status = input_handler_->ScrollBegin(
         gfx::Point(gesture_event.x, gesture_event.y),
         cc::InputHandler::Gesture);
+    UMA_HISTOGRAM_ENUMERATION("Renderer4.CompositorScrollHitTestResult",
+                              scroll_status,
+                              cc::InputHandler::ScrollStatusCount);
     switch (scroll_status) {
       case cc::InputHandler::ScrollStarted:
         TRACE_EVENT_INSTANT0("input",
@@ -181,10 +188,14 @@
                              TRACE_EVENT_SCOPE_THREAD);
         gesture_scroll_on_impl_thread_ = true;
         return DID_HANDLE;
+      case cc::InputHandler::ScrollUnknown:
       case cc::InputHandler::ScrollOnMainThread:
         return DID_NOT_HANDLE;
       case cc::InputHandler::ScrollIgnored:
         return DROP_EVENT;
+      case cc::InputHandler::ScrollStatusCount:
+        NOTREACHED();
+        break;
     }
   } else if (event.type == WebInputEvent::GestureScrollUpdate) {
 #ifndef NDEBUG
@@ -330,6 +341,7 @@
       input_handler_->ScheduleAnimation();
       return DID_HANDLE;
     }
+    case cc::InputHandler::ScrollUnknown:
     case cc::InputHandler::ScrollOnMainThread: {
       TRACE_EVENT_INSTANT0("input",
                            "InputHandlerProxy::HandleGestureFling::"
@@ -351,6 +363,9 @@
       }
       return DROP_EVENT;
     }
+    case cc::InputHandler::ScrollStatusCount:
+      NOTREACHED();
+      break;
   }
   return DID_NOT_HANDLE;
 }
diff --git a/content/renderer/media/android/media_source_delegate.cc b/content/renderer/media/android/media_source_delegate.cc
index 58514be..324ee80 100644
--- a/content/renderer/media/android/media_source_delegate.cc
+++ b/content/renderer/media/android/media_source_delegate.cc
@@ -677,7 +677,7 @@
     configs->video_extra_data = std::vector<uint8>(
         config.extra_data(), config.extra_data() + config.extra_data_size());
   }
-  configs->duration_ms = GetDurationMs();
+  configs->duration = GetDuration();
 
   if (demuxer_client_)
     demuxer_client_->DemuxerReady(demuxer_client_id_, *configs);
@@ -686,18 +686,16 @@
   is_video_encrypted_ = configs->is_video_encrypted;
 }
 
-int MediaSourceDelegate::GetDurationMs() {
+base::TimeDelta MediaSourceDelegate::GetDuration() const {
   DCHECK(media_loop_->BelongsToCurrentThread());
   if (!chunk_demuxer_)
-    return -1;
+    return media::kNoTimestamp();
 
-  double duration_ms = chunk_demuxer_->GetDuration() * 1000;
-  if (duration_ms > std::numeric_limits<int32>::max()) {
-    LOG(WARNING) << "Duration from ChunkDemuxer is too large; probably "
-                    "something has gone wrong.";
-    return std::numeric_limits<int32>::max();
-  }
-  return duration_ms;
+  double duration = chunk_demuxer_->GetDuration();
+  if (duration == std::numeric_limits<double>::infinity())
+    return media::kInfiniteDuration();
+
+  return ConvertSecondsToTimestamp(duration);
 }
 
 void MediaSourceDelegate::OnDemuxerOpened() {
diff --git a/content/renderer/media/android/media_source_delegate.h b/content/renderer/media/android/media_source_delegate.h
index a572b1e..d7e6ddc 100644
--- a/content/renderer/media/android/media_source_delegate.h
+++ b/content/renderer/media/android/media_source_delegate.h
@@ -168,7 +168,7 @@
                      const scoped_refptr<media::DecoderBuffer>& buffer);
 
   // Helper function for calculating duration.
-  int GetDurationMs();
+  base::TimeDelta GetDuration() const;
 
   bool IsSeeking() const;
 
diff --git a/content/renderer/media/android/webmediaplayer_android.cc b/content/renderer/media/android/webmediaplayer_android.cc
index 5e0d668..ff4f62f 100644
--- a/content/renderer/media/android/webmediaplayer_android.cc
+++ b/content/renderer/media/android/webmediaplayer_android.cc
@@ -17,6 +17,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "cc/layers/video_layer.h"
 #include "content/public/common/content_client.h"
+#include "content/public/common/content_switches.h"
 #include "content/public/renderer/render_frame.h"
 #include "content/renderer/media/android/renderer_demuxer_android.h"
 #include "content/renderer/media/android/renderer_media_player_manager.h"
@@ -130,6 +131,8 @@
   // Defer stream texture creation until we are sure it's necessary.
   needs_establish_peer_ = false;
   current_frame_ = VideoFrame::CreateBlackFrame(gfx::Size(1, 1));
+  force_use_overlay_embedded_video_ = CommandLine::ForCurrentProcess()->
+      HasSwitch(switches::kForceUseOverlayEmbeddedVideo);
 #endif  // defined(VIDEO_HOLE)
   TryCreateStreamTextureProxyIfNeeded();
 }
@@ -262,7 +265,9 @@
 #endif  // defined(VIDEO_HOLE)
 
   TryCreateStreamTextureProxyIfNeeded();
-  if (hasVideo() && needs_establish_peer_)
+  // There is no need to establish the surface texture peer for fullscreen
+  // video.
+  if (hasVideo() && needs_establish_peer_ && !manager_->IsInFullscreen(frame_))
     EstablishSurfaceTexturePeer();
 
   if (paused())
@@ -422,10 +427,7 @@
   if (ready_state_ < WebMediaPlayer::ReadyStateHaveMetadata)
     return 0.0;
 
-  if (duration() == std::numeric_limits<double>::infinity())
-    return 0.0;
-
-  return std::min(std::numeric_limits<int32>::max() / 1000.0, duration());
+  return duration();
 }
 
 bool WebMediaPlayerAndroid::didLoadingProgress() const {
@@ -673,7 +675,8 @@
 #if defined(VIDEO_HOLE)
   // Use H/W surface for encrypted video.
   // TODO(qinmin): Change this so that only EME needs the H/W surface
-  if (media_source_delegate_ && media_source_delegate_->IsVideoEncrypted()) {
+  if (force_use_overlay_embedded_video_ ||
+      (media_source_delegate_ && media_source_delegate_->IsVideoEncrypted())) {
     needs_external_surface_ = true;
     if (!paused() && !manager_->IsInFullscreen(frame_))
       manager_->RequestExternalSurface(player_id_, last_computed_rect_);
diff --git a/content/renderer/media/android/webmediaplayer_android.h b/content/renderer/media/android/webmediaplayer_android.h
index caca767..1dcadb4 100644
--- a/content/renderer/media/android/webmediaplayer_android.h
+++ b/content/renderer/media/android/webmediaplayer_android.h
@@ -393,6 +393,10 @@
   // A rectangle represents the geometry of video frame, when computed last
   // time.
   gfx::RectF last_computed_rect_;
+
+  // Whether to use the video overlay for all embedded video.
+  // True only for testing.
+  bool force_use_overlay_embedded_video_;
 #endif  // defined(VIDEO_HOLE)
 
   scoped_ptr<MediaSourceDelegate,
diff --git a/content/renderer/media/audio_renderer_mixer_manager.cc b/content/renderer/media/audio_renderer_mixer_manager.cc
index 9fc2e59..935fe76 100644
--- a/content/renderer/media/audio_renderer_mixer_manager.cc
+++ b/content/renderer/media/audio_renderer_mixer_manager.cc
@@ -67,7 +67,7 @@
   // know that works well for WebAudio and WebRTC.
   media::AudioParameters output_params(
       media::AudioParameters::AUDIO_PCM_LOW_LATENCY, params.channel_layout(),
-      sample_rate, 16, hardware_config_->GetOutputBufferSize());
+      sample_rate, 16, hardware_config_->GetHighLatencyBufferSize());
 
   // If we've created invalid output parameters, simply pass on the input params
   // and let the browser side handle automatic fallback.
diff --git a/content/renderer/media/crypto/content_decryption_module_factory.cc b/content/renderer/media/crypto/content_decryption_module_factory.cc
index 4792e49..82d6b0f 100644
--- a/content/renderer/media/crypto/content_decryption_module_factory.cc
+++ b/content/renderer/media/crypto/content_decryption_module_factory.cc
@@ -52,6 +52,7 @@
 #if defined(ENABLE_PEPPER_CDMS)
   return scoped_ptr<media::MediaKeys>(
       PpapiDecryptor::Create(key_system,
+                             security_origin,
                              create_pepper_cdm_cb,
                              session_created_cb,
                              session_message_cb,
diff --git a/content/renderer/media/crypto/key_systems.cc b/content/renderer/media/crypto/key_systems.cc
index d3adbe2..354dcea 100644
--- a/content/renderer/media/crypto/key_systems.cc
+++ b/content/renderer/media/crypto/key_systems.cc
@@ -14,7 +14,10 @@
 #include "content/public/renderer/content_renderer_client.h"
 #include "content/public/renderer/key_system_info.h"
 #include "content/renderer/media/crypto/key_systems_support_uma.h"
-#include "net/base/mime_util.h"
+
+#if defined(OS_ANDROID)
+#include "media/base/android/media_codec_bridge.h"
+#endif
 
 #include "widevine_cdm_version.h" // In SHARED_INTERMEDIATE_DIR.
 
@@ -27,23 +30,33 @@
 const char kAudioWebM[] = "audio/webm";
 const char kVideoWebM[] = "video/webm";
 const char kVorbis[] = "vorbis";
-const char kVorbisVP8[] = "vorbis,vp8,vp8.0";
+const char kVP8[] = "vp8";
+const char kVP80[] = "vp8.0";
 
 #if defined(USE_PROPRIETARY_CODECS)
 const char kAudioMp4[] = "audio/mp4";
 const char kVideoMp4[] = "video/mp4";
 const char kMp4a[] = "mp4a";
-const char kMp4aAvc1Avc3[] = "mp4a,avc1,avc3";
+const char kAvc1[] = "avc1";
+const char kAvc3[] = "avc3";
 #endif  // defined(USE_PROPRIETARY_CODECS)
 
 static void AddClearKey(std::vector<KeySystemInfo>* concrete_key_systems) {
   KeySystemInfo info(kClearKeyKeySystem);
 
-  info.supported_types.push_back(std::make_pair(kAudioWebM, kVorbis));
-  info.supported_types.push_back(std::make_pair(kVideoWebM, kVorbisVP8));
+  // On Android, Vorbis, VP8, AAC and AVC1 are supported in all MediaCodec
+  // implementations:
+  // http://developer.android.com/guide/appendix/media-formats.html
+
+  info.supported_types[kAudioWebM].insert(kVorbis);
+  info.supported_types[kVideoWebM] = info.supported_types[kAudioWebM];
+  info.supported_types[kVideoWebM].insert(kVP8);
+  info.supported_types[kVideoWebM].insert(kVP80);
 #if defined(USE_PROPRIETARY_CODECS)
-  info.supported_types.push_back(std::make_pair(kAudioMp4, kMp4a));
-  info.supported_types.push_back(std::make_pair(kVideoMp4, kMp4aAvc1Avc3));
+  info.supported_types[kAudioMp4].insert(kMp4a);
+  info.supported_types[kVideoMp4] = info.supported_types[kAudioMp4];
+  info.supported_types[kVideoMp4].insert(kAvc1);
+  info.supported_types[kVideoMp4].insert(kAvc3);
 #endif  // defined(USE_PROPRIETARY_CODECS)
 
   info.use_aes_decryptor = true;
@@ -69,6 +82,9 @@
 #endif
 
  private:
+  typedef KeySystemInfo::CodecSet CodecSet;
+  typedef KeySystemInfo::ContainerCodecsMap ContainerCodecsMap;
+
   void AddConcreteSupportedKeySystems(
       const std::vector<KeySystemInfo>& concrete_key_systems);
 
@@ -78,14 +94,11 @@
 #if defined(ENABLE_PEPPER_CDMS)
       const std::string& pepper_type,
 #endif
-      const std::vector<KeySystemInfo::ContainerCodecsPair>& supported_types,
+      const ContainerCodecsMap& supported_types,
       const std::string& parent_key_system);
 
   friend struct base::DefaultLazyInstanceTraits<KeySystems>;
 
-  typedef base::hash_set<std::string> CodecSet;
-  typedef std::map<std::string, CodecSet> MimeTypeMap;
-
   struct KeySystemProperties {
     KeySystemProperties() : use_aes_decryptor(false) {}
 
@@ -93,7 +106,7 @@
 #if defined(ENABLE_PEPPER_CDMS)
     std::string pepper_type;
 #endif
-    MimeTypeMap types;
+    ContainerCodecsMap supported_types;
   };
 
   typedef std::map<std::string, KeySystemProperties> KeySystemPropertiesMap;
@@ -103,10 +116,6 @@
   KeySystems();
   ~KeySystems() {}
 
-  void AddSupportedType(const std::string& mime_type,
-                        const std::string& codecs_list,
-                        KeySystemProperties* properties);
-
   bool IsSupportedKeySystemWithContainerAndCodec(const std::string& mime_type,
                                                  const std::string& codec,
                                                  const std::string& key_system);
@@ -162,7 +171,7 @@
 #if defined(ENABLE_PEPPER_CDMS)
     const std::string& pepper_type,
 #endif
-    const std::vector<KeySystemInfo::ContainerCodecsPair>& supported_types,
+    const ContainerCodecsMap& supported_types,
     const std::string& parent_key_system) {
   DCHECK(!IsConcreteSupportedKeySystem(concrete_key_system))
       << "Key system '" << concrete_key_system << "' already registered";
@@ -177,12 +186,7 @@
   properties.pepper_type = pepper_type;
 #endif
 
-  for (size_t i = 0; i < supported_types.size(); ++i) {
-    const KeySystemInfo::ContainerCodecsPair& pair = supported_types[i];
-    const std::string& mime_type = pair.first;
-    const std::string& codecs_list = pair.second;
-    AddSupportedType(mime_type, codecs_list, &properties);
-  }
+  properties.supported_types = supported_types;
 
   concrete_key_system_map_[concrete_key_system] = properties;
 
@@ -196,20 +200,6 @@
   }
 }
 
-void KeySystems::AddSupportedType(const std::string& mime_type,
-                                  const std::string& codecs_list,
-                                  KeySystemProperties* properties) {
-  std::vector<std::string> mime_type_codecs;
-  net::ParseCodecString(codecs_list, &mime_type_codecs, false);
-
-  CodecSet codecs(mime_type_codecs.begin(), mime_type_codecs.end());
-
-  MimeTypeMap& mime_types_map = properties->types;
-  // mime_types_map must not be repeated for a given key system.
-  DCHECK(mime_types_map.find(mime_type) == mime_types_map.end());
-  mime_types_map[mime_type] = codecs;
-}
-
 bool KeySystems::IsConcreteSupportedKeySystem(const std::string& key_system) {
   return concrete_key_system_map_.find(key_system) !=
       concrete_key_system_map_.end();
@@ -234,8 +224,9 @@
   if (mime_type.empty())
     return true;
 
-  const MimeTypeMap& mime_types_map = key_system_iter->second.types;
-  MimeTypeMap::const_iterator mime_iter = mime_types_map.find(mime_type);
+  const ContainerCodecsMap& mime_types_map =
+      key_system_iter->second.supported_types;
+  ContainerCodecsMap::const_iterator mime_iter = mime_types_map.find(mime_type);
   if (mime_iter == mime_types_map.end())
     return false;
 
diff --git a/content/renderer/media/crypto/key_systems_unittest.cc b/content/renderer/media/crypto/key_systems_unittest.cc
index df16ff0..88c9999 100644
--- a/content/renderer/media/crypto/key_systems_unittest.cc
+++ b/content/renderer/media/crypto/key_systems_unittest.cc
@@ -38,24 +38,25 @@
 // These are the (fake) key systems that are registered for these tests.
 // kUsesAes uses the AesDecryptor like Clear Key.
 // kExternal uses an external CDM, such as Pepper-based or Android platform CDM.
-static const char kUsesAes[] = "org.example.clear";
-static const char kUsesAesParent[] = "org.example";  // Not registered.
-static const char kExternal[] = "com.example.test";
-static const char kExternalParent[] = "com.example";
+const char kUsesAes[] = "org.example.clear";
+const char kUsesAesParent[] = "org.example";  // Not registered.
+const char kExternal[] = "com.example.test";
+const char kExternalParent[] = "com.example";
 
-static const char kClearKey[] = "org.w3.clearkey";
-static const char kPrefixedClearKey[] = "webkit-org.w3.clearkey";
-static const char kExternalClearKey[] = "org.chromium.externalclearkey";
+const char kClearKey[] = "org.w3.clearkey";
+const char kPrefixedClearKey[] = "webkit-org.w3.clearkey";
+const char kExternalClearKey[] = "org.chromium.externalclearkey";
 
-static const char kAudioWebM[] = "audio/webm";
-static const char kVideoWebM[] = "video/webm";
-static const char kWebMAudioCodecs[] = "vorbis";
-static const char kWebMVideoCodecs[] = "vorbis,vp8,vp8.0";
+const char kAudioWebM[] = "audio/webm";
+const char kVideoWebM[] = "video/webm";
+const char kVorbis[] = "vorbis";
+const char kVP8[] = "vp8";
+const char kVP80[] = "vp8.0";
 
-static const char kAudioFoo[] = "audio/foo";
-static const char kVideoFoo[] = "video/foo";
-static const char kFooAudioCodecs[] = "fooaudio";
-static const char kFooVideoCodecs[] = "fooaudio,foovideo";
+const char kAudioFoo[] = "audio/foo";
+const char kVideoFoo[] = "video/foo";
+const char kFooAudioCodec[] = "fooaudio";
+const char kFooVideoCodec[] = "foovideo";
 
 namespace content {
 
@@ -68,11 +69,13 @@
     std::vector<content::KeySystemInfo>* key_systems) {
   KeySystemInfo aes(kUsesAes);
 
-  aes.supported_types.push_back(std::make_pair(kAudioWebM, kWebMAudioCodecs));
-  aes.supported_types.push_back(std::make_pair(kVideoWebM, kWebMVideoCodecs));
-
-  aes.supported_types.push_back(std::make_pair(kAudioFoo, kFooAudioCodecs));
-  aes.supported_types.push_back(std::make_pair(kVideoFoo, kFooVideoCodecs));
+  aes.supported_types[kAudioWebM].insert(kVorbis);
+  aes.supported_types[kVideoWebM] = aes.supported_types[kAudioWebM];
+  aes.supported_types[kVideoWebM].insert(kVP8);
+  aes.supported_types[kVideoWebM].insert(kVP80);
+  aes.supported_types[kAudioFoo].insert(kFooAudioCodec);
+  aes.supported_types[kVideoFoo] = aes.supported_types[kAudioFoo];
+  aes.supported_types[kVideoFoo].insert(kFooVideoCodec);
 
   aes.use_aes_decryptor = true;
 
@@ -80,11 +83,13 @@
 
   KeySystemInfo ext(kExternal);
 
-  ext.supported_types.push_back(std::make_pair(kAudioWebM, kWebMAudioCodecs));
-  ext.supported_types.push_back(std::make_pair(kVideoWebM, kWebMVideoCodecs));
-
-  ext.supported_types.push_back(std::make_pair(kAudioFoo, kFooAudioCodecs));
-  ext.supported_types.push_back(std::make_pair(kVideoFoo, kFooVideoCodecs));
+  ext.supported_types[kAudioWebM].insert(kVorbis);
+  ext.supported_types[kVideoWebM] = ext.supported_types[kAudioWebM];
+  ext.supported_types[kVideoWebM].insert(kVP8);
+  ext.supported_types[kVideoWebM].insert(kVP80);
+  ext.supported_types[kAudioFoo].insert(kFooAudioCodec);
+  ext.supported_types[kVideoFoo] = ext.supported_types[kAudioFoo];
+  ext.supported_types[kVideoFoo].insert(kFooVideoCodec);
 
   ext.parent_key_system = kExternalParent;
 
diff --git a/content/renderer/media/crypto/pepper_cdm_wrapper.h b/content/renderer/media/crypto/pepper_cdm_wrapper.h
index 01f0f0a..13ec9e9 100644
--- a/content/renderer/media/crypto/pepper_cdm_wrapper.h
+++ b/content/renderer/media/crypto/pepper_cdm_wrapper.h
@@ -13,6 +13,8 @@
 
 #include "base/callback.h"
 
+class GURL;
+
 namespace content {
 class ContentDecryptorDelegate;
 
@@ -34,7 +36,8 @@
 // Callback used to create a PepperCdmWrapper. This may return null if the
 // Pepper CDM can not be created.
 typedef base::Callback<scoped_ptr<PepperCdmWrapper>(
-    const std::string& pluginType)> CreatePepperCdmCB;
+    const std::string& pluginType,
+    const GURL& security_origin)> CreatePepperCdmCB;
 
 }  // namespace content
 
diff --git a/content/renderer/media/crypto/pepper_cdm_wrapper_impl.cc b/content/renderer/media/crypto/pepper_cdm_wrapper_impl.cc
index 73de599..c443e03 100644
--- a/content/renderer/media/crypto/pepper_cdm_wrapper_impl.cc
+++ b/content/renderer/media/crypto/pepper_cdm_wrapper_impl.cc
@@ -9,9 +9,11 @@
 #include "content/renderer/pepper/pepper_webplugin_impl.h"
 #include "third_party/WebKit/public/platform/WebString.h"
 #include "third_party/WebKit/public/web/WebDocument.h"
+#include "third_party/WebKit/public/web/WebElement.h"
 #include "third_party/WebKit/public/web/WebFrame.h"
 #include "third_party/WebKit/public/web/WebHelperPlugin.h"
 #include "third_party/WebKit/public/web/WebPlugin.h"
+#include "third_party/WebKit/public/web/WebPluginContainer.h"
 #include "third_party/WebKit/public/web/WebView.h"
 
 namespace content {
@@ -22,7 +24,8 @@
 
 scoped_ptr<PepperCdmWrapper> PepperCdmWrapperImpl::Create(
     blink::WebLocalFrame* frame,
-    const std::string& pluginType) {
+    const std::string& pluginType,
+    const GURL& security_origin) {
   DCHECK(frame);
   ScopedHelperPlugin helper_plugin(blink::WebHelperPlugin::create(
       blink::WebString::fromUTF8(pluginType), frame));
@@ -39,6 +42,10 @@
   if (!plugin_instance)
     return scoped_ptr<PepperCdmWrapper>();
 
+  GURL url(plugin_instance->container()->element().document().url());
+  CHECK_EQ(security_origin.GetOrigin(), url.GetOrigin())
+      << "Pepper instance has a different origin than the EME call.";
+
   if (!plugin_instance->GetContentDecryptorDelegate())
     return scoped_ptr<PepperCdmWrapper>();
 
diff --git a/content/renderer/media/crypto/pepper_cdm_wrapper_impl.h b/content/renderer/media/crypto/pepper_cdm_wrapper_impl.h
index 75009a2..7f54f0c 100644
--- a/content/renderer/media/crypto/pepper_cdm_wrapper_impl.h
+++ b/content/renderer/media/crypto/pepper_cdm_wrapper_impl.h
@@ -13,11 +13,10 @@
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_ptr.h"
 #include "content/renderer/media/crypto/pepper_cdm_wrapper.h"
-// TODO(dcheng): Temporary. Convert back to a forward declare.
-#include "third_party/WebKit/public/web/WebLocalFrame.h"
 
 namespace blink {
 class WebHelperPlugin;
+class WebLocalFrame;
 }
 
 namespace content {
@@ -42,7 +41,8 @@
 class PepperCdmWrapperImpl : public PepperCdmWrapper {
  public:
   static scoped_ptr<PepperCdmWrapper> Create(blink::WebLocalFrame* frame,
-                                             const std::string& pluginType);
+                                             const std::string& pluginType,
+                                             const GURL& security_origin);
 
   virtual ~PepperCdmWrapperImpl();
 
diff --git a/content/renderer/media/crypto/ppapi_decryptor.cc b/content/renderer/media/crypto/ppapi_decryptor.cc
index 4ac3cd8..76d0203 100644
--- a/content/renderer/media/crypto/ppapi_decryptor.cc
+++ b/content/renderer/media/crypto/ppapi_decryptor.cc
@@ -25,6 +25,7 @@
 
 scoped_ptr<PpapiDecryptor> PpapiDecryptor::Create(
     const std::string& key_system,
+    const GURL& security_origin,
     const CreatePepperCdmCB& create_pepper_cdm_cb,
     const media::SessionCreatedCB& session_created_cb,
     const media::SessionMessageCB& session_message_cb,
@@ -34,7 +35,7 @@
   std::string plugin_type = GetPepperType(key_system);
   DCHECK(!plugin_type.empty());
   scoped_ptr<PepperCdmWrapper> pepper_cdm_wrapper =
-      create_pepper_cdm_cb.Run(plugin_type);
+      create_pepper_cdm_cb.Run(plugin_type, security_origin);
   if (!pepper_cdm_wrapper) {
     DLOG(ERROR) << "Plugin instance creation failed.";
     return scoped_ptr<PpapiDecryptor>();
diff --git a/content/renderer/media/crypto/ppapi_decryptor.h b/content/renderer/media/crypto/ppapi_decryptor.h
index 12ef4fe..430c361 100644
--- a/content/renderer/media/crypto/ppapi_decryptor.h
+++ b/content/renderer/media/crypto/ppapi_decryptor.h
@@ -16,6 +16,8 @@
 #include "media/base/media_keys.h"
 #include "media/base/video_decoder_config.h"
 
+class GURL;
+
 namespace base {
 class MessageLoopProxy;
 }
@@ -31,6 +33,7 @@
  public:
   static scoped_ptr<PpapiDecryptor> Create(
       const std::string& key_system,
+      const GURL& security_origin,
       const CreatePepperCdmCB& create_pepper_cdm_cb,
       const media::SessionCreatedCB& session_created_cb,
       const media::SessionMessageCB& session_message_cb,
diff --git a/content/renderer/media/media_stream.cc b/content/renderer/media/media_stream.cc
index 9a8f143..b555a75 100644
--- a/content/renderer/media/media_stream.cc
+++ b/content/renderer/media/media_stream.cc
@@ -5,7 +5,6 @@
 #include "content/renderer/media/media_stream.h"
 
 #include "base/logging.h"
-#include "content/renderer/media/media_stream_dependency_factory.h"
 #include "third_party/WebKit/public/platform/WebString.h"
 #include "third_party/libjingle/source/talk/app/webrtc/mediastreaminterface.h"
 
@@ -25,60 +24,58 @@
   return native_stream->GetWebRtcAdapter(stream);
 }
 
-MediaStream::MediaStream(MediaStreamDependencyFactory* factory,
-                         StreamStopCallback stream_stop,
-                         const blink::WebMediaStream& stream)
-    : stream_stop_callback_(stream_stop),
-      stream_adapter_(NULL),
-      is_local_(true),
-      label_(stream.id().utf8()),
-      factory_(factory) {
-  DCHECK(factory_);
+MediaStream::MediaStream(const blink::WebMediaStream& stream)
+    : is_local_(true),
+      webrtc_media_stream_(NULL) {
 }
 
-MediaStream::MediaStream(webrtc::MediaStreamInterface* stream)
-    : stream_adapter_(stream),
-      is_local_(false),
-      factory_(NULL) {
-  DCHECK(stream);
+MediaStream::MediaStream(webrtc::MediaStreamInterface* webrtc_stream)
+    : is_local_(false),
+      webrtc_media_stream_(webrtc_stream) {
 }
 
 MediaStream::~MediaStream() {
-}
-
-void MediaStream::OnStreamStopped() {
-  if (!stream_stop_callback_.is_null())
-    stream_stop_callback_.Run(label_);
+  DCHECK(observers_.empty());
 }
 
 webrtc::MediaStreamInterface* MediaStream::GetWebRtcAdapter(
     const blink::WebMediaStream& stream) {
-  if (!stream_adapter_) {
-    DCHECK(is_local_);
-    stream_adapter_ = factory_->CreateNativeLocalMediaStream(stream);
+  DCHECK(webrtc_media_stream_);
+  DCHECK(thread_checker_.CalledOnValidThread());
+  return webrtc_media_stream_.get();
+}
+
+void MediaStream::AddObserver(MediaStreamObserver* observer) {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  DCHECK(std::find(observers_.begin(), observers_.end(), observer) ==
+      observers_.end());
+  observers_.push_back(observer);
+}
+
+void MediaStream::RemoveObserver(MediaStreamObserver* observer) {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  std::vector<MediaStreamObserver*>::iterator it =
+      std::find(observers_.begin(), observers_.end(), observer);
+  DCHECK(it != observers_.end());
+  observers_.erase(it);
+}
+
+bool MediaStream::AddTrack(const blink::WebMediaStreamTrack& track) {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  for (std::vector<MediaStreamObserver*>::iterator it = observers_.begin();
+       it != observers_.end(); ++it) {
+    (*it)->TrackAdded(track);
   }
-  DCHECK(stream_adapter_);
-  return stream_adapter_.get();
+  return true;
 }
 
-bool MediaStream::AddTrack(const blink::WebMediaStream& stream,
-                           const blink::WebMediaStreamTrack& track) {
-  // If the libjingle representation of the stream has not been created, it
-  // does not matter if the tracks are added or removed. Once the
-  // libjingle representation is created, a libjingle track representation will
-  // be created for all blink tracks.
-  if (!stream_adapter_)
-    return true;
-  return factory_->AddNativeMediaStreamTrack(stream, track);
-}
-
-bool MediaStream::RemoveTrack(const blink::WebMediaStream& stream,
-                              const blink::WebMediaStreamTrack& track) {
-  // If the libjingle representation of the stream has not been created, it
-  // does not matter if the tracks are added or removed.
-  if (!stream_adapter_)
-    return true;
-  return factory_->RemoveNativeMediaStreamTrack(stream, track);
+bool MediaStream::RemoveTrack(const blink::WebMediaStreamTrack& track) {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  for (std::vector<MediaStreamObserver*>::iterator it = observers_.begin();
+       it != observers_.end(); ++it) {
+    (*it)->TrackRemoved(track);
+  }
+  return true;
 }
 
 }  // namespace content
diff --git a/content/renderer/media/media_stream.h b/content/renderer/media/media_stream.h
index 2281043..6a43cfc 100644
--- a/content/renderer/media/media_stream.h
+++ b/content/renderer/media/media_stream.h
@@ -6,34 +6,46 @@
 #define CONTENT_RENDERER_MEDIA_MEDIA_STREAM_H_
 
 #include <string>
+#include <vector>
 
 #include "base/callback.h"
 #include "base/compiler_specific.h"
-#include "base/memory/ref_counted.h"
+#include "base/threading/thread_checker.h"
 #include "content/common/content_export.h"
 #include "third_party/WebKit/public/platform/WebMediaStream.h"
 
 namespace webrtc {
 class MediaStreamInterface;
-}  // namespace webrtc
+}
 
 namespace content {
 
-class MediaStreamDependencyFactory;
+// MediaStreamObserver can be used to get notifications of when a track is
+// added or removed from a MediaStream.
+class MediaStreamObserver {
+ public:
+  // TrackAdded is called |track| is added to the observed MediaStream.
+  virtual void TrackAdded(const blink::WebMediaStreamTrack& track)  = 0;
+  // TrackRemoved is called |track| is added to the observed MediaStream.
+  virtual void TrackRemoved(const blink::WebMediaStreamTrack& track) = 0;
+
+ protected:
+  virtual ~MediaStreamObserver() {}
+};
 
 // MediaStream is the Chrome representation of blink::WebMediaStream.
 // It is owned by blink::WebMediaStream as blink::WebMediaStream::ExtraData.
+// Its lifetime is the same as the blink::WebMediaStream instance it belongs to.
 class CONTENT_EXPORT MediaStream
     : NON_EXPORTED_BASE(public blink::WebMediaStream::ExtraData) {
  public:
-  typedef base::Callback<void(const std::string& label)> StreamStopCallback;
-
   // Constructor for local MediaStreams.
-  MediaStream(MediaStreamDependencyFactory* factory,
-              StreamStopCallback stream_stop,
-              const blink::WebMediaStream& stream);
+  MediaStream(const blink::WebMediaStream& stream);
+
   // Constructor for remote MediaStreams.
-  explicit MediaStream(webrtc::MediaStreamInterface* stream);
+  // TODO(xians): Remove once the audio renderer don't separate between local
+  // and remotely generated streams.
+  explicit MediaStream(webrtc::MediaStreamInterface* webrtc_stream);
 
   virtual ~MediaStream();
 
@@ -41,45 +53,40 @@
   static MediaStream* GetMediaStream(
       const blink::WebMediaStream& stream);
 
-  // Returns a libjingle representation of a MediaStream. If a representation
-  // does not exist- the libjingle stream is created. This method will never
-  // return NULL.
+  // Returns a libjingle representation of a remote MediaStream.
+  // TODO(xians): Remove once the audio renderer don't separate between local
+  // and remotely generated streams.
   static webrtc::MediaStreamInterface* GetAdapter(
       const blink::WebMediaStream& stream);
 
+  // Adds an observer to this MediaStream. Its the callers responsibility to
+  // remove the observer before the destruction of the MediaStream.
+  void AddObserver(MediaStreamObserver* observer);
+  void RemoveObserver(MediaStreamObserver* observer);
+
   // TODO(xians): Remove |is_local| once AudioTracks can be rendered the same
   // way regardless if they are local or remote.
   bool is_local() const { return is_local_; }
 
-  // Called by MediaStreamCenter when a stream has been stopped
-  // from JavaScript. Triggers |stream_stop_callback_|.
-  void OnStreamStopped();
-
   // Called by MediaStreamCenter when a track has been added to a stream stream.
-  // If a libjingle representation of |stream| exist, the track is added to
-  // the libjingle MediaStream.
-  bool AddTrack(const blink::WebMediaStream& stream,
-                const blink::WebMediaStreamTrack& track);
+  bool AddTrack(const blink::WebMediaStreamTrack& track);
 
-  // Called by MediaStreamCenter when a track has been removed from |stream|
-  // If a libjingle representation or |stream| exist, the track is removed
-  // from the libjingle MediaStream.
-  bool RemoveTrack(const blink::WebMediaStream& stream,
-                   const blink::WebMediaStreamTrack& track);
+  // Called by MediaStreamCenter when a track has been removed from |stream|.
+  bool RemoveTrack(const blink::WebMediaStreamTrack& track);
 
  protected:
   virtual webrtc::MediaStreamInterface* GetWebRtcAdapter(
       const blink::WebMediaStream& stream);
 
  private:
-  StreamStopCallback stream_stop_callback_;
-  scoped_refptr<webrtc::MediaStreamInterface> stream_adapter_;
+  base::ThreadChecker thread_checker_;
   const bool is_local_;
   const std::string label_;
+  std::vector<MediaStreamObserver*> observers_;
 
-  // Weak ref to a MediaStreamDependencyFactory, owned by the RenderThread.
-  // It's valid for the lifetime of RenderThread.
-  MediaStreamDependencyFactory* factory_;
+  // TODO(xians): Remove once the audio renderer don't separate between local
+  // and remotely generated streams.
+  scoped_refptr<webrtc::MediaStreamInterface> webrtc_media_stream_;
 
   DISALLOW_COPY_AND_ASSIGN(MediaStream);
 };
diff --git a/content/renderer/media/media_stream_audio_processor.cc b/content/renderer/media/media_stream_audio_processor.cc
index dcd9d40..01cee0c 100644
--- a/content/renderer/media/media_stream_audio_processor.cc
+++ b/content/renderer/media/media_stream_audio_processor.cc
@@ -155,6 +155,13 @@
   scoped_ptr<media::AudioFifo> fifo_;
 };
 
+bool MediaStreamAudioProcessor::IsAudioTrackProcessingEnabled() {
+  const std::string group_name =
+      base::FieldTrialList::FindFullName("MediaStreamAudioTrackProcessing");
+  return group_name == "Enabled" || CommandLine::ForCurrentProcess()->HasSwitch(
+      switches::kEnableAudioTrackProcessing);
+}
+
 MediaStreamAudioProcessor::MediaStreamAudioProcessor(
     const blink::WebMediaConstraints& constraints,
     int effects,
@@ -228,10 +235,10 @@
   return capture_converter_->sink_parameters();
 }
 
-void MediaStreamAudioProcessor::StartAecDump(
-    const base::PlatformFile& aec_dump_file) {
+void MediaStreamAudioProcessor::StartAecDump(base::File aec_dump_file) {
   if (audio_processing_)
-    StartEchoCancellationDump(audio_processing_.get(), aec_dump_file);
+    StartEchoCancellationDump(audio_processing_.get(),
+                              aec_dump_file.TakePlatformFile());
 }
 
 void MediaStreamAudioProcessor::StopAecDump() {
@@ -345,6 +352,10 @@
 
   // Create and configure the webrtc::AudioProcessing.
   audio_processing_.reset(webrtc::AudioProcessing::Create(0));
+  // TODO(ajm): Replace with AudioProcessing::Initialize() when this rolls to
+  // Chromium: http://review.webrtc.org/9919004/
+  CHECK_EQ(0,
+           audio_processing_->set_sample_rate_hz(kAudioProcessingSampleRate));
 
   // Enable the audio processing components.
   if (enable_aec) {
@@ -375,13 +386,6 @@
   if (enable_agc)
     EnableAutomaticGainControl(audio_processing_.get());
 
-  // Configure the audio format the audio processing is running on. This
-  // has to be done after all the needed components are enabled.
-  CHECK_EQ(0,
-           audio_processing_->set_sample_rate_hz(kAudioProcessingSampleRate));
-  CHECK_EQ(0, audio_processing_->set_num_channels(
-      kAudioProcessingNumberOfChannels, kAudioProcessingNumberOfChannels));
-
   RecordProcessingState(AUDIO_PROCESSING_ENABLED);
 }
 
@@ -511,11 +515,4 @@
   audio_processing_.reset();
 }
 
-bool MediaStreamAudioProcessor::IsAudioTrackProcessingEnabled() const {
-  const std::string group_name =
-      base::FieldTrialList::FindFullName("MediaStreamAudioTrackProcessing");
-  return group_name == "Enabled" || CommandLine::ForCurrentProcess()->HasSwitch(
-      switches::kEnableAudioTrackProcessing);
-}
-
 }  // namespace content
diff --git a/content/renderer/media/media_stream_audio_processor.h b/content/renderer/media/media_stream_audio_processor.h
index 0c80514..2233007 100644
--- a/content/renderer/media/media_stream_audio_processor.h
+++ b/content/renderer/media/media_stream_audio_processor.h
@@ -6,7 +6,7 @@
 #define CONTENT_RENDERER_MEDIA_MEDIA_STREAM_AUDIO_PROCESSOR_H_
 
 #include "base/atomicops.h"
-#include "base/platform_file.h"
+#include "base/files/file.h"
 #include "base/synchronization/lock.h"
 #include "base/threading/thread_checker.h"
 #include "base/time/time.h"
@@ -47,6 +47,10 @@
     NON_EXPORTED_BASE(public WebRtcPlayoutDataSource::Sink),
     NON_EXPORTED_BASE(public AudioProcessorInterface) {
  public:
+  // Returns true if |kEnableAudioTrackProcessing| is on or if the
+  // |MediaStreamAudioTrackProcessing| finch experiment is enabled.
+  static bool IsAudioTrackProcessingEnabled();
+
   // |playout_data_source| is used to register this class as a sink to the
   // WebRtc playout data for processing AEC. If clients do not enable AEC,
   // |playout_data_source| won't be used.
@@ -85,8 +89,6 @@
                              int* new_volume,
                              int16** out);
 
-  bool IsAudioTrackProcessingEnabled() const;
-
   // The audio format of the input to the processor.
   const media::AudioParameters& InputFormat() const;
 
@@ -99,7 +101,7 @@
   // Starts/Stops the Aec dump on the |audio_processing_|.
   // Called on the main render thread.
   // This method takes the ownership of |aec_dump_file|.
-  void StartAecDump(const base::PlatformFile& aec_dump_file);
+  void StartAecDump(base::File aec_dump_file);
   void StopAecDump();
 
  protected:
diff --git a/content/renderer/media/media_stream_audio_source.cc b/content/renderer/media/media_stream_audio_source.cc
index 34f3087..a8aa7d6 100644
--- a/content/renderer/media/media_stream_audio_source.cc
+++ b/content/renderer/media/media_stream_audio_source.cc
@@ -34,18 +34,23 @@
     const blink::WebMediaConstraints& constraints,
     const ConstraintsCallback& callback) {
   // TODO(xians): Properly implement for audio sources.
-  if (!factory_)
-    callback.Run(this, false);
-
-  bool result = true;
   if (!local_audio_source_) {
-    result = factory_->InitializeMediaStreamAudioSource(render_view_id_,
-                                                        constraints,
-                                                        this);
+    if (!factory_->InitializeMediaStreamAudioSource(render_view_id_,
+                                                    constraints,
+                                                    this)) {
+      // The source failed to start.
+      // MediaStreamImpl rely on the |stop_callback| to be triggered when the
+      // last track is removed from the source. But in this case, the source is
+      // is not even started. So we need to fail both adding the track and
+      // trigger |stop_callback|.
+      callback.Run(this, false);
+      StopSource();
+      return;
+    }
   }
-  if (result)
-    factory_->CreateLocalAudioTrack(track);
-  callback.Run(this, result);
+
+  factory_->CreateLocalAudioTrack(track);
+  callback.Run(this, true);
 }
 
 }  // namespace content
diff --git a/content/renderer/media/media_stream_center.cc b/content/renderer/media/media_stream_center.cc
index e568567..934790e 100644
--- a/content/renderer/media/media_stream_center.cc
+++ b/content/renderer/media/media_stream_center.cc
@@ -45,8 +45,7 @@
 }
 
 void CreateNativeVideoMediaStreamTrack(
-    const blink::WebMediaStreamTrack& track,
-    MediaStreamDependencyFactory* factory) {
+    const blink::WebMediaStreamTrack& track) {
   DCHECK(track.extraData() == NULL);
   blink::WebMediaStreamSource source = track.source();
   DCHECK_EQ(source.type(), blink::WebMediaStreamSource::TypeVideo);
@@ -57,7 +56,7 @@
   writable_track.setExtraData(
       new MediaStreamVideoTrack(native_source, source.constraints(),
                                 MediaStreamVideoSource::ConstraintsCallback(),
-                                track.isEnabled(), factory));
+                                track.isEnabled()));
 }
 
 void CreateNativeMediaStreamTrack(const blink::WebMediaStreamTrack& track,
@@ -70,7 +69,7 @@
       CreateNativeAudioMediaStreamTrack(track, factory);
       break;
     case blink::WebMediaStreamSource::TypeVideo:
-      CreateNativeVideoMediaStreamTrack(track, factory);
+      CreateNativeVideoMediaStreamTrack(track);
       break;
   }
 }
@@ -121,15 +120,8 @@
 bool MediaStreamCenter::didStopMediaStreamTrack(
     const blink::WebMediaStreamTrack& track) {
   DVLOG(1) << "MediaStreamCenter::didStopMediaStreamTrack";
-  blink::WebMediaStreamSource source = track.source();
-  MediaStreamSource* extra_data =
-      static_cast<MediaStreamSource*>(source.extraData());
-  if (!extra_data) {
-    DVLOG(1) << "didStopMediaStreamTrack called on a remote track.";
-    return false;
-  }
-
-  extra_data->StopSource();
+  MediaStreamTrack* native_track = MediaStreamTrack::GetTrack(track);
+  native_track->Stop();
   return true;
 }
 
@@ -163,31 +155,23 @@
   }
 
   // TODO(perkj): MediaStream::Stop is being deprecated. But for the moment we
-  // need to support the old behavior and the new. Since we only create one
-  // source object per actual device- we need to fake stopping a
-  // MediaStreamTrack by disabling it if the same device is used as source by
-  // multiple tracks. Note that disabling a track here, don't affect the
-  // enabled property in JS.
+  // need to support both MediaStream::Stop and MediaStreamTrack::Stop.
   blink::WebVector<blink::WebMediaStreamTrack> audio_tracks;
   stream.audioTracks(audio_tracks);
   for (size_t i = 0; i < audio_tracks.size(); ++i)
-    didDisableMediaStreamTrack(audio_tracks[i]);
+    didStopMediaStreamTrack(audio_tracks[i]);
 
   blink::WebVector<blink::WebMediaStreamTrack> video_tracks;
   stream.videoTracks(video_tracks);
   for (size_t i = 0; i < video_tracks.size(); ++i)
-    didDisableMediaStreamTrack(video_tracks[i]);
-
-  native_stream->OnStreamStopped();
+    didStopMediaStreamTrack(video_tracks[i]);
 }
 
 void MediaStreamCenter::didCreateMediaStream(blink::WebMediaStream& stream) {
   DVLOG(1) << "MediaStreamCenter::didCreateMediaStream";
   blink::WebMediaStream writable_stream(stream);
   MediaStream* native_stream(
-      new MediaStream(rtc_factory_,
-                      MediaStream::StreamStopCallback(),
-                      stream));
+      new MediaStream(stream));
   writable_stream.setExtraData(native_stream);
 
   blink::WebVector<blink::WebMediaStreamTrack> video_tracks;
@@ -204,7 +188,7 @@
     const blink::WebMediaStreamTrack& track) {
   DVLOG(1) << "MediaStreamCenter::didAddMediaStreamTrack";
   MediaStream* native_stream = MediaStream::GetMediaStream(stream);
-  return native_stream->AddTrack(stream, track);
+  return native_stream->AddTrack(track);
 }
 
 bool MediaStreamCenter::didRemoveMediaStreamTrack(
@@ -212,7 +196,7 @@
     const blink::WebMediaStreamTrack& track) {
   DVLOG(1) << "MediaStreamCenter::didRemoveMediaStreamTrack";
   MediaStream* native_stream = MediaStream::GetMediaStream(stream);
-  return native_stream->RemoveTrack(stream, track);
+  return native_stream->RemoveTrack(track);
 }
 
 bool MediaStreamCenter::OnControlMessageReceived(const IPC::Message& message) {
diff --git a/content/renderer/media/media_stream_dependency_factory.cc b/content/renderer/media/media_stream_dependency_factory.cc
index 70f3d06..0b13677 100644
--- a/content/renderer/media/media_stream_dependency_factory.cc
+++ b/content/renderer/media/media_stream_dependency_factory.cc
@@ -166,14 +166,11 @@
       p2p_socket_dispatcher_(p2p_socket_dispatcher),
       signaling_thread_(NULL),
       worker_thread_(NULL),
-      chrome_worker_thread_("Chrome_libJingle_WorkerThread"),
-      aec_dump_file_(base::kInvalidPlatformFileValue) {
+      chrome_worker_thread_("Chrome_libJingle_WorkerThread") {
 }
 
 MediaStreamDependencyFactory::~MediaStreamDependencyFactory() {
   CleanupPeerConnectionFactory();
-  if (aec_dump_file_ != base::kInvalidPlatformFileValue)
-    base::ClosePlatformFile(aec_dump_file_);
 }
 
 blink::WebRTCPeerConnectionHandler*
@@ -205,7 +202,8 @@
                                  &device_info.device.input.effects);
 
   scoped_refptr<WebRtcAudioCapturer> capturer(
-      CreateAudioCapturer(render_view_id, device_info, audio_constraints));
+      CreateAudioCapturer(render_view_id, device_info, audio_constraints,
+                          source_data));
   if (!capturer.get()) {
     DLOG(WARNING) << "Failed to create the capturer for device "
         << device_info.device.id;
@@ -243,97 +241,6 @@
   return new WebRtcVideoCapturerAdapter(is_screeencast);
 }
 
-scoped_refptr<webrtc::MediaStreamInterface>
-MediaStreamDependencyFactory::CreateNativeLocalMediaStream(
-    const blink::WebMediaStream& web_stream) {
-  DCHECK(web_stream.extraData());
-  DVLOG(1) << "MediaStreamDependencyFactory::CreateNativeLocalMediaStream()";
-
-  std::string label = web_stream.id().utf8();
-  scoped_refptr<webrtc::MediaStreamInterface> native_stream =
-      CreateLocalMediaStream(label);
-
-  // Add audio tracks.
-  blink::WebVector<blink::WebMediaStreamTrack> audio_tracks;
-  web_stream.audioTracks(audio_tracks);
-  for (size_t i = 0; i < audio_tracks.size(); ++i) {
-    MediaStreamTrack* native_track =
-        MediaStreamTrack::GetTrack(audio_tracks[i]);
-    if (!native_track) {
-      // TODO(perkj): Implement.
-      // This can happen if the blink track uses a source from a remote track.
-      NOTIMPLEMENTED();
-      continue;
-    }
-    native_stream->AddTrack(native_track->GetAudioAdapter());
-  }
-
-  // Add video tracks.
-  blink::WebVector<blink::WebMediaStreamTrack> video_tracks;
-  web_stream.videoTracks(video_tracks);
-  for (size_t i = 0; i < video_tracks.size(); ++i) {
-    MediaStreamTrack* native_track =
-        MediaStreamTrack::GetTrack(video_tracks[i]);
-    if (!native_track) {
-      // TODO(perkj): Implement.
-      // This can happen if the blink track uses a source from a remote track.
-      NOTIMPLEMENTED();
-      continue;
-    }
-    native_stream->AddTrack(native_track->GetVideoAdapter());
-  }
-  return native_stream;
-}
-
-bool MediaStreamDependencyFactory::AddNativeMediaStreamTrack(
-    const blink::WebMediaStream& stream,
-    const blink::WebMediaStreamTrack& track) {
-  DVLOG(1) << "AddNativeMediaStreamTrack";
-  webrtc::MediaStreamInterface* webrtc_stream =
-      MediaStream::GetAdapter(stream);
-
-  MediaStreamTrack* native_track =
-      MediaStreamTrack::GetTrack(track);
-  if (!native_track) {
-    // TODO(perkj): Implement.
-    // This can happen if the blink track uses a source from a remote track.
-    NOTIMPLEMENTED();
-    return false;
-  }
-
-  switch (track.source().type()) {
-    case blink::WebMediaStreamSource::TypeAudio: {
-      webrtc::AudioTrackInterface* webrtc_audio_track =
-          native_track->GetAudioAdapter();
-      return webrtc_audio_track && webrtc_stream->AddTrack(webrtc_audio_track);
-    }
-    case blink::WebMediaStreamSource::TypeVideo: {
-      webrtc::VideoTrackInterface* webrtc_video_track =
-          native_track->GetVideoAdapter();
-      return webrtc_video_track && webrtc_stream->AddTrack(webrtc_video_track);
-    }
-  }
-  return false;
-}
-
-bool MediaStreamDependencyFactory::RemoveNativeMediaStreamTrack(
-    const blink::WebMediaStream& stream,
-    const blink::WebMediaStreamTrack& track) {
-  webrtc::MediaStreamInterface* native_stream =
-      MediaStream::GetAdapter(stream);
-  DCHECK(native_stream);
-  std::string track_id = track.id().utf8();
-  switch (track.source().type()) {
-    case blink::WebMediaStreamSource::TypeAudio:
-      return native_stream->RemoveTrack(
-          native_stream->FindAudioTrack(track_id));
-    case blink::WebMediaStreamSource::TypeVideo:
-      return native_stream->RemoveTrack(
-          native_stream->FindVideoTrack(track_id));
-  }
-  return false;
-}
-
 scoped_refptr<webrtc::VideoSourceInterface>
 MediaStreamDependencyFactory::CreateVideoSource(
     cricket::VideoCapturer* capturer,
@@ -439,10 +346,8 @@
   pc_factory_->SetOptions(factory_options);
 
   // |aec_dump_file| will be invalid when dump is not enabled.
-  if (aec_dump_file_ != base::kInvalidPlatformFileValue) {
-    StartAecDump(aec_dump_file_);
-    aec_dump_file_ = base::kInvalidPlatformFileValue;
-  }
+  if (aec_dump_file_.IsValid())
+    StartAecDump(aec_dump_file_.Pass());
 }
 
 bool MediaStreamDependencyFactory::PeerConnectionFactoryCreated() {
@@ -666,7 +571,8 @@
 MediaStreamDependencyFactory::CreateAudioCapturer(
     int render_view_id,
     const StreamDeviceInfo& device_info,
-    const blink::WebMediaConstraints& constraints) {
+    const blink::WebMediaConstraints& constraints,
+    MediaStreamAudioSource* audio_source) {
   // TODO(xians): Handle the cases when gUM is called without a proper render
   // view, for example, by an extension.
   DCHECK_GE(render_view_id, 0);
@@ -675,7 +581,8 @@
   DCHECK(GetWebRtcAudioDevice());
   return WebRtcAudioCapturer::CreateCapturer(render_view_id, device_info,
                                              constraints,
-                                             GetWebRtcAudioDevice());
+                                             GetWebRtcAudioDevice(),
+                                             audio_source);
 }
 
 void MediaStreamDependencyFactory::AddNativeAudioTrackToBlinkTrack(
@@ -707,24 +614,23 @@
 
 void MediaStreamDependencyFactory::OnAecDumpFile(
     IPC::PlatformFileForTransit file_handle) {
-  DCHECK_EQ(aec_dump_file_, base::kInvalidPlatformFileValue);
-  base::PlatformFile file =
-      IPC::PlatformFileForTransitToPlatformFile(file_handle);
-  DCHECK_NE(file, base::kInvalidPlatformFileValue);
+  DCHECK(!aec_dump_file_.IsValid());
+  base::File file = IPC::PlatformFileForTransitToFile(file_handle);
+  DCHECK(file.IsValid());
 
   if (CommandLine::ForCurrentProcess()->HasSwitch(
           switches::kEnableAudioTrackProcessing)) {
     EnsureWebRtcAudioDeviceImpl();
-    GetWebRtcAudioDevice()->EnableAecDump(file);
+    GetWebRtcAudioDevice()->EnableAecDump(file.Pass());
     return;
   }
 
   // TODO(xians): Remove the following code after kEnableAudioTrackProcessing
   // is removed.
   if (PeerConnectionFactoryCreated())
-    StartAecDump(file);
+    StartAecDump(file.Pass());
   else
-    aec_dump_file_ = file;
+    aec_dump_file_ = file.Pass();
 }
 
 void MediaStreamDependencyFactory::OnDisableAecDump() {
@@ -736,16 +642,14 @@
 
   // TODO(xians): Remove the following code after kEnableAudioTrackProcessing
   // is removed.
-  if (aec_dump_file_ != base::kInvalidPlatformFileValue)
-    base::ClosePlatformFile(aec_dump_file_);
-  aec_dump_file_ = base::kInvalidPlatformFileValue;
+  if (aec_dump_file_.IsValid())
+    aec_dump_file_.Close();
 }
 
-void MediaStreamDependencyFactory::StartAecDump(
-    const base::PlatformFile& aec_dump_file) {
+void MediaStreamDependencyFactory::StartAecDump(base::File aec_dump_file) {
   // |pc_factory_| always takes ownership of |aec_dump_file|. If StartAecDump()
   // fails, |aec_dump_file| will be closed.
-  if (!GetPcFactory()->StartAecDump(aec_dump_file))
+  if (!GetPcFactory()->StartAecDump(aec_dump_file.TakePlatformFile()))
     VLOG(1) << "Could not start AEC dump.";
 }
 
diff --git a/content/renderer/media/media_stream_dependency_factory.h b/content/renderer/media/media_stream_dependency_factory.h
index 5986abb..4c42ff4 100644
--- a/content/renderer/media/media_stream_dependency_factory.h
+++ b/content/renderer/media/media_stream_dependency_factory.h
@@ -8,8 +8,8 @@
 #include <string>
 
 #include "base/basictypes.h"
+#include "base/files/file.h"
 #include "base/memory/ref_counted.h"
-#include "base/platform_file.h"
 #include "base/threading/thread.h"
 #include "content/common/content_export.h"
 #include "content/public/renderer/render_process_observer.h"
@@ -70,6 +70,10 @@
   blink::WebRTCPeerConnectionHandler* CreateRTCPeerConnectionHandler(
       blink::WebRTCPeerConnectionHandlerClient* client);
 
+  // Asks the PeerConnection factory to create a Local MediaStream object.
+  virtual scoped_refptr<webrtc::MediaStreamInterface>
+      CreateLocalMediaStream(const std::string& label);
+
   // InitializeMediaStreamAudioSource initialize a MediaStream source object
   // for audio input.
   bool InitializeMediaStreamAudioSource(
@@ -82,10 +86,6 @@
   virtual WebRtcVideoCapturerAdapter* CreateVideoCapturer(
       bool is_screen_capture);
 
-  // Creates a libjingle representation of a MediaStream.
-  scoped_refptr<webrtc::MediaStreamInterface> CreateNativeLocalMediaStream(
-      const blink::WebMediaStream& web_stream);
-
   // Create an instance of WebRtcLocalAudioTrack and store it
   // in the extraData field of |track|.
   void CreateLocalAudioTrack(const blink::WebMediaStreamTrack& track);
@@ -95,16 +95,6 @@
       CreateLocalVideoTrack(const std::string& id,
                             webrtc::VideoSourceInterface* source);
 
-  // Adds a libjingle representation of a MediaStreamTrack to the libjingle
-  // Representation of |stream|.
-  bool AddNativeMediaStreamTrack(const blink::WebMediaStream& stream,
-                                 const blink::WebMediaStreamTrack& track);
-
-  // Removes a libjingle MediaStreamTrack from the libjingle representation of
-  // |stream|.
-  bool RemoveNativeMediaStreamTrack(const blink::WebMediaStream& stream,
-                                    const blink::WebMediaStreamTrack& track);
-
   // Asks the PeerConnection factory to create a Video Source.
   // The video source takes ownership of |capturer|.
   virtual scoped_refptr<webrtc::VideoSourceInterface>
@@ -142,10 +132,6 @@
       bool is_local_track);
 
  protected:
-  // Asks the PeerConnection factory to create a Local MediaStream object.
-  virtual scoped_refptr<webrtc::MediaStreamInterface>
-      CreateLocalMediaStream(const std::string& label);
-
   // Asks the PeerConnection factory to create a Local Audio Source.
   virtual scoped_refptr<webrtc::AudioSourceInterface>
       CreateLocalAudioSource(
@@ -173,7 +159,8 @@
   // it reuses existing capture if any; otherwise it creates a new capturer.
   virtual scoped_refptr<WebRtcAudioCapturer> CreateAudioCapturer(
       int render_view_id, const StreamDeviceInfo& device_info,
-      const blink::WebMediaConstraints& constraints);
+      const blink::WebMediaConstraints& constraints,
+      MediaStreamAudioSource* audio_source);
 
   // Adds the audio device as a sink to the audio track and starts the local
   // audio track. This is virtual for test purposes since no real audio device
@@ -198,7 +185,7 @@
   void OnAecDumpFile(IPC::PlatformFileForTransit file_handle);
   void OnDisableAecDump();
 
-  void StartAecDump(const base::PlatformFile& aec_dump_file);
+  void StartAecDump(base::File aec_dump_file);
 
   // Helper method to create a WebRtcAudioDeviceImpl.
   void EnsureWebRtcAudioDeviceImpl();
@@ -219,7 +206,7 @@
   talk_base::Thread* worker_thread_;
   base::Thread chrome_worker_thread_;
 
-  base::PlatformFile aec_dump_file_;
+  base::File aec_dump_file_;
 
   DISALLOW_COPY_AND_ASSIGN(MediaStreamDependencyFactory);
 };
diff --git a/content/renderer/media/media_stream_dependency_factory_unittest.cc b/content/renderer/media/media_stream_dependency_factory_unittest.cc
index 9236c23..e0e71ab 100644
--- a/content/renderer/media/media_stream_dependency_factory_unittest.cc
+++ b/content/renderer/media/media_stream_dependency_factory_unittest.cc
@@ -2,145 +2,21 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "base/memory/scoped_ptr.h"
-#include "content/common/media/media_stream_options.h"
-#include "content/renderer/media/media_stream.h"
-#include "content/renderer/media/media_stream_audio_source.h"
-#include "content/renderer/media/media_stream_video_source.h"
-#include "content/renderer/media/media_stream_video_track.h"
 #include "content/renderer/media/mock_media_stream_dependency_factory.h"
-#include "content/renderer/media/mock_media_stream_video_source.h"
 #include "content/renderer/media/mock_web_rtc_peer_connection_handler_client.h"
-#include "content/renderer/media/webrtc/webrtc_local_audio_track_adapter.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/WebKit/public/platform/WebMediaConstraints.h"
-#include "third_party/WebKit/public/platform/WebMediaStream.h"
-#include "third_party/WebKit/public/platform/WebMediaStreamSource.h"
-#include "third_party/WebKit/public/platform/WebMediaStreamTrack.h"
 #include "third_party/WebKit/public/platform/WebRTCPeerConnectionHandler.h"
-#include "third_party/WebKit/public/platform/WebVector.h"
 
 namespace content {
 
-class MediaSourceCreatedObserver {
- public:
-  MediaSourceCreatedObserver()
-     : result_(false),
-       description_(NULL) {
-  }
-
-  void OnCreateNativeSourcesComplete(
-      blink::WebMediaStream* description,
-      bool request_succeeded) {
-    result_ = request_succeeded;
-    description_ = description;
-  }
-
-  blink::WebMediaStream* description() const {
-    return description_;
-  }
-  bool result() const { return result_; }
-
- private:
-  bool result_;
-  blink::WebMediaStream* description_;
-};
-
 class MediaStreamDependencyFactoryTest : public ::testing::Test {
  public:
   virtual void SetUp() {
     dependency_factory_.reset(new MockMediaStreamDependencyFactory());
   }
 
-  blink::WebMediaStream CreateWebKitMediaStream(bool audio, bool video) {
-    blink::WebVector<blink::WebMediaStreamSource> audio_sources(
-        audio ? static_cast<size_t>(1) : 0);
-    blink::WebVector<blink::WebMediaStreamSource> video_sources(
-        video ? static_cast<size_t>(1) : 0);
-    MediaStreamSource::SourceStoppedCallback dummy_callback;
-
-    if (audio) {
-      StreamDeviceInfo info;
-      info.device.type = MEDIA_DEVICE_AUDIO_CAPTURE;
-      info.device.name = "audio";
-      info.session_id = 99;
-      audio_sources[0].initialize("audio",
-                                  blink::WebMediaStreamSource::TypeAudio,
-                                  "audio");
-      audio_sources[0].setExtraData(
-          new MediaStreamAudioSource());
-
-      audio_sources_.assign(audio_sources);
-    }
-    if (video) {
-      StreamDeviceInfo info;
-      info.device.type = MEDIA_DEVICE_VIDEO_CAPTURE;
-      info.device.name = "video";
-      info.session_id = 98;
-      video_sources[0].initialize("video",
-                                  blink::WebMediaStreamSource::TypeVideo,
-                                  "video");
-
-      video_sources[0].setExtraData(
-          new MockMediaStreamVideoSource(dependency_factory_.get(), false));
-      video_sources_.assign(video_sources);
-    }
-    blink::WebMediaStream stream_desc;
-    blink::WebVector<blink::WebMediaStreamTrack> audio_track_vector(
-        audio_sources.size());
-    for (size_t i = 0; i < audio_track_vector.size(); ++i) {
-      audio_track_vector[i].initialize(audio_sources[i].id(),
-                                       audio_sources[i]);
-      MediaStreamTrack* native_track =
-          new MediaStreamTrack(
-              WebRtcLocalAudioTrackAdapter::Create(
-                  audio_track_vector[i].id().utf8(), NULL),
-                  true);
-
-      audio_track_vector[i].setExtraData(native_track);
-    }
-
-    blink::WebMediaConstraints constraints;
-    constraints.initialize();
-    blink::WebVector<blink::WebMediaStreamTrack> video_track_vector(
-        video_sources.size());
-    for (size_t i = 0; i < video_track_vector.size(); ++i) {
-      MediaStreamVideoSource* native_source =
-             MediaStreamVideoSource::GetVideoSource(video_sources[i]);
-      video_track_vector[i] = MediaStreamVideoTrack::CreateVideoTrack(
-          native_source, constraints,
-          MediaStreamVideoSource::ConstraintsCallback(), true,
-          dependency_factory_.get());
-    }
-
-    stream_desc.initialize("media stream", audio_track_vector,
-                           video_track_vector);
-    stream_desc.setExtraData(
-        new content::MediaStream(dependency_factory_.get(),
-                                 content::MediaStream::StreamStopCallback(),
-                                 stream_desc));
-    return stream_desc;
-  }
-
-  void VerifyMediaStream(const blink::WebMediaStream& stream_desc,
-                         size_t num_audio_tracks,
-                         size_t num_video_tracks) {
-    content::MediaStream* native_stream =
-            content::MediaStream::GetMediaStream(stream_desc);
-    ASSERT_TRUE(native_stream);
-    EXPECT_TRUE(native_stream->is_local());
-
-    webrtc::MediaStreamInterface* webrtc_stream =
-        MediaStream::GetAdapter(stream_desc);
-    ASSERT_TRUE(webrtc_stream);
-    EXPECT_EQ(num_audio_tracks, webrtc_stream->GetAudioTracks().size());
-    EXPECT_EQ(num_video_tracks, webrtc_stream->GetVideoTracks().size());
-  }
-
  protected:
   scoped_ptr<MockMediaStreamDependencyFactory> dependency_factory_;
-  blink::WebVector<blink::WebMediaStreamSource> audio_sources_;
-  blink::WebVector<blink::WebMediaStreamSource> video_sources_;
 };
 
 TEST_F(MediaStreamDependencyFactoryTest, CreateRTCPeerConnectionHandler) {
@@ -150,67 +26,4 @@
   EXPECT_TRUE(pc_handler.get() != NULL);
 }
 
-TEST_F(MediaStreamDependencyFactoryTest, CreateNativeMediaStream) {
-  blink::WebMediaStream stream_desc = CreateWebKitMediaStream(true, true);
-
-  VerifyMediaStream(stream_desc, 1, 1);
-}
-
-// Test that we don't crash if a MediaStream is created in WebKit with unknown
-// sources. This can for example happen if a MediaStream is created with
-// remote tracks.
-TEST_F(MediaStreamDependencyFactoryTest, CreateNativeMediaStreamWithoutSource) {
-  // Create a WebKit MediaStream description.
-  blink::WebMediaStreamSource audio_source;
-  audio_source.initialize("audio source",
-                          blink::WebMediaStreamSource::TypeAudio,
-                          "something");
-  blink::WebMediaStreamSource video_source;
-  video_source.initialize("video source",
-                          blink::WebMediaStreamSource::TypeVideo,
-                          "something");
-
-  blink::WebVector<blink::WebMediaStreamTrack> audio_tracks(
-      static_cast<size_t>(1));
-  audio_tracks[0].initialize(audio_source.id(), audio_source);
-  blink::WebVector<blink::WebMediaStreamTrack> video_tracks(
-      static_cast<size_t>(1));
-  video_tracks[0].initialize(video_source.id(), video_source);
-
-  blink::WebMediaStream stream_desc;
-  stream_desc.initialize("new stream", audio_tracks, video_tracks);
-  stream_desc.setExtraData(
-      new content::MediaStream(dependency_factory_.get(),
-                               content::MediaStream::StreamStopCallback(),
-                               stream_desc));
-
-  VerifyMediaStream(stream_desc, 0, 0);
-}
-
-TEST_F(MediaStreamDependencyFactoryTest, AddAndRemoveNativeTrack) {
-  blink::WebMediaStream stream_desc = CreateWebKitMediaStream(true, true);
-
-  VerifyMediaStream(stream_desc, 1, 1);
-
-  blink::WebVector<blink::WebMediaStreamTrack> audio_tracks;
-  stream_desc.audioTracks(audio_tracks);
-  EXPECT_TRUE(dependency_factory_->RemoveNativeMediaStreamTrack(
-      stream_desc, audio_tracks[0]));
-  VerifyMediaStream(stream_desc, 0, 1);
-
-  EXPECT_TRUE(dependency_factory_->AddNativeMediaStreamTrack(
-      stream_desc, audio_tracks[0]));
-  VerifyMediaStream(stream_desc, 1, 1);
-
-  blink::WebVector<blink::WebMediaStreamTrack> video_tracks;
-  stream_desc.videoTracks(video_tracks);
-  EXPECT_TRUE(dependency_factory_->RemoveNativeMediaStreamTrack(
-      stream_desc, video_tracks[0]));
-  VerifyMediaStream(stream_desc, 1, 0);
-
-  EXPECT_TRUE(dependency_factory_->AddNativeMediaStreamTrack(
-      stream_desc, video_tracks[0]));
-  VerifyMediaStream(stream_desc, 1, 1);
-}
-
 }  // namespace content
diff --git a/content/renderer/media/media_stream_impl.cc b/content/renderer/media/media_stream_impl.cc
index 9c6d33b..1f09817 100644
--- a/content/renderer/media/media_stream_impl.cc
+++ b/content/renderer/media/media_stream_impl.cc
@@ -29,7 +29,7 @@
 #include "third_party/WebKit/public/platform/WebMediaConstraints.h"
 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h"
 #include "third_party/WebKit/public/web/WebDocument.h"
-#include "third_party/WebKit/public/web/WebFrame.h"
+#include "third_party/WebKit/public/web/WebLocalFrame.h"
 #include "third_party/WebKit/public/web/WebMediaStreamRegistry.h"
 
 namespace content {
@@ -95,7 +95,7 @@
 
   int request_id = g_next_request_id++;
   StreamOptions options;
-  blink::WebFrame* frame = NULL;
+  blink::WebLocalFrame* frame = NULL;
   GURL security_origin;
   bool enable_automatic_output_device_selection = false;
 
@@ -341,8 +341,6 @@
                          video_track_vector);
   web_stream->setExtraData(
       new MediaStream(
-          dependency_factory_,
-          base::Bind(&MediaStreamImpl::OnLocalMediaStreamStop, AsWeakPtr()),
           *web_stream));
 
   // Wait for the tracks to be started successfully or to fail.
@@ -365,9 +363,8 @@
     DVLOG(1) << "Request ID not found";
     return;
   }
-  CompleteGetUserMediaRequest(request_info->web_stream,
-                              &request_info->request,
-                              result);
+
+  GetUserMediaRequestFailed(&request_info->request, result);
   DeleteUserMediaRequestInfo(request_info);
 }
 
@@ -399,19 +396,6 @@
       break;
     }
   }
-
-  // Remove the reference to this source from all |user_media_requests_|.
-  // TODO(perkj): The below is not necessary once we don't need to support
-  // MediaStream::Stop().
-  UserMediaRequests::iterator it = user_media_requests_.begin();
-  while (it != user_media_requests_.end()) {
-    (*it)->RemoveSource(source);
-    if ((*it)->AreAllSourcesRemoved()) {
-      it = user_media_requests_.erase(it);
-    } else {
-      ++it;
-    }
-  }
 }
 
 void MediaStreamImpl::InitializeSourceObject(
@@ -462,8 +446,7 @@
   return new content::MediaStreamVideoCapturerSource(
       device,
       stop_callback,
-      new VideoCapturerDelegate(device),
-      dependency_factory_);
+      new VideoCapturerDelegate(device));
 }
 
 void MediaStreamImpl::CreateVideoTracks(
@@ -533,14 +516,12 @@
   DVLOG(1) << "MediaStreamImpl::OnCreateNativeTracksComplete("
            << "{request_id = " << request->request_id << "} "
            << "{result = " << result << "})";
-  CompleteGetUserMediaRequest(request->web_stream, &request->request,
-                              result);
-  if (result != MEDIA_DEVICE_OK) {
-    // TODO(perkj): Once we don't support MediaStream::Stop the |request_info|
-    // can be deleted even if the request succeeds.
-    DeleteUserMediaRequestInfo(request);
-    StopUnreferencedSources(true);
-  }
+  if (result == content::MEDIA_DEVICE_OK)
+    GetUserMediaRequestSucceeded(request->web_stream, &request->request);
+  else
+    GetUserMediaRequestFailed(&request->request, result);
+
+  DeleteUserMediaRequestInfo(request);
 }
 
 void MediaStreamImpl::OnDevicesEnumerated(
@@ -566,17 +547,19 @@
   NOTIMPLEMENTED();
 }
 
-void MediaStreamImpl::CompleteGetUserMediaRequest(
+void MediaStreamImpl::GetUserMediaRequestSucceeded(
     const blink::WebMediaStream& stream,
+    blink::WebUserMediaRequest* request_info) {
+  DVLOG(1) << "MediaStreamImpl::GetUserMediaRequestSucceeded";
+  request_info->requestSucceeded(stream);
+}
+
+void MediaStreamImpl::GetUserMediaRequestFailed(
     blink::WebUserMediaRequest* request_info,
     content::MediaStreamRequestResult result) {
-
-  DVLOG(1) << "MediaStreamImpl::CompleteGetUserMediaRequest("
-           << "result=" << result;
-
   switch (result) {
     case MEDIA_DEVICE_OK:
-      request_info->requestSucceeded(stream);
+      NOTREACHED();
       break;
     case MEDIA_DEVICE_PERMISSION_DENIED:
       request_info->requestDenied();
@@ -627,16 +610,6 @@
   return NULL;
 }
 
-bool MediaStreamImpl::IsSourceInRequests(
-    const blink::WebMediaStreamSource& source) const {
-  for (UserMediaRequests::const_iterator req_it = user_media_requests_.begin();
-       req_it != user_media_requests_.end(); ++req_it) {
-    if ((*req_it)->IsSourceUsed(source))
-      return true;
-  }
-  return false;
-}
-
 MediaStreamImpl::UserMediaRequestInfo*
 MediaStreamImpl::FindUserMediaRequestInfo(int request_id) {
   UserMediaRequests::iterator it = user_media_requests_.begin();
@@ -658,16 +631,6 @@
   return NULL;
 }
 
-MediaStreamImpl::UserMediaRequestInfo*
-MediaStreamImpl::FindUserMediaRequestInfo(const std::string& label) {
-  UserMediaRequests::iterator it = user_media_requests_.begin();
-  for (; it != user_media_requests_.end(); ++it) {
-    if ((*it)->generated && (*it)->web_stream.id() == base::UTF8ToUTF16(label))
-      return (*it);
-  }
-  return NULL;
-}
-
 void MediaStreamImpl::DeleteUserMediaRequestInfo(
     UserMediaRequestInfo* request) {
   UserMediaRequests::iterator it = user_media_requests_.begin();
@@ -720,20 +683,10 @@
   }
 }
 
-void MediaStreamImpl::OnLocalMediaStreamStop(
-    const std::string& label) {
-  DVLOG(1) << "MediaStreamImpl::OnLocalMediaStreamStop(" << label << ")";
-
-  UserMediaRequestInfo* user_media_request = FindUserMediaRequestInfo(label);
-  if (user_media_request) {
-    DeleteUserMediaRequestInfo(user_media_request);
-  }
-  StopUnreferencedSources(true);
-}
-
 void MediaStreamImpl::OnLocalSourceStopped(
     const blink::WebMediaStreamSource& source) {
   DCHECK(CalledOnValidThread());
+  DVLOG(1) << "MediaStreamImpl::OnLocalSourceStopped";
 
   bool device_found = false;
   for (LocalStreamSources::iterator device_it = local_sources_.begin();
@@ -746,19 +699,6 @@
   }
   CHECK(device_found);
 
-  // Remove the reference to this source from all |user_media_requests_|.
-  // TODO(perkj): The below is not necessary once we don't need to support
-  // MediaStream::Stop().
-  UserMediaRequests::iterator it = user_media_requests_.begin();
-  while (it != user_media_requests_.end()) {
-    (*it)->RemoveSource(source);
-    if ((*it)->AreAllSourcesRemoved()) {
-      it = user_media_requests_.erase(it);
-    } else {
-      ++it;
-    }
-  }
-
   MediaStreamSource* source_impl =
       static_cast<MediaStreamSource*> (source.extraData());
   media_stream_dispatcher_->StopStreamDevice(source_impl->device_info());
@@ -779,18 +719,6 @@
   source_impl->StopSource();
 }
 
-void MediaStreamImpl::StopUnreferencedSources(bool notify_dispatcher) {
-  LocalStreamSources::iterator source_it = local_sources_.begin();
-  while (source_it != local_sources_.end()) {
-    if (!IsSourceInRequests(source_it->source)) {
-      StopLocalSource(source_it->source, notify_dispatcher);
-      source_it = local_sources_.erase(source_it);
-    } else {
-      ++source_it;
-    }
-  }
-}
-
 scoped_refptr<WebRtcAudioRenderer> MediaStreamImpl::CreateRemoteAudioRenderer(
     webrtc::MediaStreamInterface* stream,
     int render_frame_id) {
@@ -900,7 +828,7 @@
       native_source, constraints, base::Bind(
           &MediaStreamImpl::UserMediaRequestInfo::OnTrackStarted,
           AsWeakPtr()),
-      true, factory);
+      true);
 }
 
 void MediaStreamImpl::UserMediaRequestInfo::CallbackOnTracksStarted(
@@ -912,7 +840,7 @@
 
 void MediaStreamImpl::UserMediaRequestInfo::OnTrackStarted(
     MediaStreamSource* source, bool success) {
-  DVLOG(1) << "OnTrackStarted";
+  DVLOG(1) << "OnTrackStarted result " << success;
   std::vector<MediaStreamSource*>::iterator it =
       std::find(sources_waiting_for_callback_.begin(),
                 sources_waiting_for_callback_.end(),
diff --git a/content/renderer/media/media_stream_impl.h b/content/renderer/media/media_stream_impl.h
index 12de8de..af9e135 100644
--- a/content/renderer/media/media_stream_impl.h
+++ b/content/renderer/media/media_stream_impl.h
@@ -99,22 +99,17 @@
   // Called when |source| has been stopped from JavaScript.
   void OnLocalSourceStopped(const blink::WebMediaStreamSource& source);
 
-  // Called when a MediaStream with label |label| has been ordered to stop from
-  // JavaScript. The implementation must stop all sources that are not used by
-  // other MediaStreams.
-  // TODO(perkj): MediaStream::Stop has been deprecated from the spec and all
-  // applications should move to use MediaStreamTrack::Stop instead and this
-  // method be removed.
-  void OnLocalMediaStreamStop(const std::string& label);
-
-  // This function is virtual for test purposes. A test can override this to
+  // These methods are virtual for test purposes. A test can override them to
   // test requesting local media streams. The function notifies WebKit that the
-  // |request| have completed and generated the MediaStream |stream|.
-  virtual void CompleteGetUserMediaRequest(
-      const blink::WebMediaStream& stream,
+  // |request| have completed.
+  virtual void GetUserMediaRequestSucceeded(
+       const blink::WebMediaStream& stream,
+       blink::WebUserMediaRequest* request_info);
+  virtual void GetUserMediaRequestFailed(
       blink::WebUserMediaRequest* request_info,
       content::MediaStreamRequestResult result);
 
+
   // Returns the WebKit representation of a MediaStream given an URL.
   // This is virtual for test purposes.
   virtual blink::WebMediaStream GetMediaStream(const GURL& url);
@@ -220,7 +215,6 @@
   UserMediaRequestInfo* FindUserMediaRequestInfo(int request_id);
   UserMediaRequestInfo* FindUserMediaRequestInfo(
       const blink::WebUserMediaRequest& request);
-  UserMediaRequestInfo* FindUserMediaRequestInfo(const std::string& label);
   void DeleteUserMediaRequestInfo(UserMediaRequestInfo* request);
 
   // Returns the source that use a device with |device.session_id|
@@ -228,14 +222,8 @@
   const blink::WebMediaStreamSource* FindLocalSource(
       const StreamDeviceInfo& device) const;
 
-  // Returns true if |source| exists in |user_media_requests_|
-  bool IsSourceInRequests(const blink::WebMediaStreamSource& source) const;
-
   void StopLocalSource(const blink::WebMediaStreamSource& source,
                        bool notify_dispatcher);
-  // Stops all local sources that don't exist in exist in
-  // |user_media_requests_|.
-  void StopUnreferencedSources(bool notify_dispatcher);
 
   scoped_refptr<WebRtcAudioRenderer> CreateRemoteAudioRenderer(
       webrtc::MediaStreamInterface* stream, int render_frame_id);
@@ -261,10 +249,10 @@
   // valid for the lifetime of RenderView.
   MediaStreamDispatcher* media_stream_dispatcher_;
 
-  UserMediaRequests user_media_requests_;
-
   LocalStreamSources local_sources_;
 
+  UserMediaRequests user_media_requests_;
+
   DISALLOW_COPY_AND_ASSIGN(MediaStreamImpl);
 };
 
diff --git a/content/renderer/media/media_stream_impl_unittest.cc b/content/renderer/media/media_stream_impl_unittest.cc
index 16b464b..bc0fbaf 100644
--- a/content/renderer/media/media_stream_impl_unittest.cc
+++ b/content/renderer/media/media_stream_impl_unittest.cc
@@ -6,6 +6,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "content/renderer/media/media_stream.h"
 #include "content/renderer/media/media_stream_impl.h"
+#include "content/renderer/media/media_stream_track.h"
 #include "content/renderer/media/mock_media_stream_dependency_factory.h"
 #include "content/renderer/media/mock_media_stream_dispatcher.h"
 #include "content/renderer/media/mock_media_stream_video_source.h"
@@ -24,7 +25,7 @@
       const StreamDeviceInfo& device,
       const SourceStoppedCallback& stop_callback,
       MediaStreamDependencyFactory* factory)
-  : MockMediaStreamVideoSource(factory, false) {
+  : MockMediaStreamVideoSource(false) {
     SetDeviceInfo(device);
     SetStopCallback(stop_callback);
   }
@@ -43,6 +44,7 @@
                            MediaStreamDependencyFactory* dependency_factory)
       : MediaStreamImpl(NULL, media_stream_dispatcher, dependency_factory),
         state_(REQUEST_NOT_STARTED),
+        result_(NUM_MEDIA_REQUEST_RESULTS),
         factory_(dependency_factory),
         video_source_(NULL) {
   }
@@ -53,18 +55,19 @@
     requestUserMedia(user_media_request);
   }
 
-  virtual void CompleteGetUserMediaRequest(
+  virtual void GetUserMediaRequestSucceeded(
       const blink::WebMediaStream& stream,
-      blink::WebUserMediaRequest* request_info,
-      content::MediaStreamRequestResult result) OVERRIDE {
+      blink::WebUserMediaRequest* request_info) OVERRIDE {
     last_generated_stream_ = stream;
-    result_ = result;
-    state_ = (result == MEDIA_DEVICE_OK ? REQUEST_SUCCEEDED : REQUEST_FAILED);
+    state_ = REQUEST_SUCCEEDED;
   }
 
-  virtual blink::WebMediaStream GetMediaStream(
-      const GURL& url) OVERRIDE {
-    return last_generated_stream_;
+  virtual void GetUserMediaRequestFailed(
+      blink::WebUserMediaRequest* request_info,
+      content::MediaStreamRequestResult result) OVERRIDE {
+    last_generated_stream_.reset();
+    state_ = REQUEST_FAILED;
+    result_ = result;
   }
 
   virtual MediaStreamVideoSource* CreateVideoSource(
@@ -76,13 +79,14 @@
     return video_source_;
   }
 
-  using MediaStreamImpl::OnLocalMediaStreamStop;
-  using MediaStreamImpl::OnLocalSourceStopped;
-
   const blink::WebMediaStream& last_generated_stream() {
     return last_generated_stream_;
   }
 
+  void ClearLastGeneratedStream() {
+    last_generated_stream_.reset();
+  }
+
   MockMediaStreamVideoCapturerSource* last_created_video_source() const {
     return video_source_;
   }
@@ -156,6 +160,10 @@
       video_source->FailToStartMockedSource();
   }
 
+  void FailToCreateNextAudioCapturer() {
+    dependency_factory_->FailToCreateNextAudioCapturer();
+  }
+
  protected:
   scoped_ptr<MockMediaStreamDispatcher> ms_dispatcher_;
   scoped_ptr<MediaStreamImplUnderTest> ms_impl_;
@@ -224,51 +232,65 @@
             desc2_audio_tracks[0].source().extraData());
 }
 
-TEST_F(MediaStreamImplTest, StopLocalMediaStream) {
+TEST_F(MediaStreamImplTest, StopLocalTracks) {
   // Generate a stream with both audio and video.
   blink::WebMediaStream mixed_desc = RequestLocalMediaStream();
 
-  // Stop generated local streams.
-  ms_impl_->OnLocalMediaStreamStop(mixed_desc.id().utf8());
+  blink::WebVector<blink::WebMediaStreamTrack> audio_tracks;
+  mixed_desc.audioTracks(audio_tracks);
+  MediaStreamTrack* audio_track = MediaStreamTrack::GetTrack(audio_tracks[0]);
+  audio_track->Stop();
   EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter());
+
+  blink::WebVector<blink::WebMediaStreamTrack> video_tracks;
+  mixed_desc.videoTracks(video_tracks);
+  MediaStreamTrack* video_track = MediaStreamTrack::GetTrack(video_tracks[0]);
+  video_track->Stop();
   EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter());
 }
 
-// This test that a source is not stopped even if the MediaStream is stopped if
-// there are two MediaStreams using the same device. The source is stopped
-// if there are no more MediaStreams using the device.
-TEST_F(MediaStreamImplTest, StopLocalMediaStreamWhenTwoStreamUseSameDevices) {
+// This test that a source is not stopped even if the tracks in a
+// MediaStream is stopped if there are two MediaStreams with tracks using the
+// same device. The source is stopped
+// if there are no more MediaStream tracks using the device.
+TEST_F(MediaStreamImplTest, StopLocalTracksWhenTwoStreamUseSameDevices) {
   // Generate a stream with both audio and video.
   blink::WebMediaStream desc1 = RequestLocalMediaStream();
   blink::WebMediaStream desc2 = RequestLocalMediaStream();
 
-  ms_impl_->OnLocalMediaStreamStop(desc2.id().utf8());
+  blink::WebVector<blink::WebMediaStreamTrack> audio_tracks1;
+  desc1.audioTracks(audio_tracks1);
+  MediaStreamTrack* audio_track1 = MediaStreamTrack::GetTrack(audio_tracks1[0]);
+  audio_track1->Stop();
   EXPECT_EQ(0, ms_dispatcher_->stop_audio_device_counter());
+
+  blink::WebVector<blink::WebMediaStreamTrack> audio_tracks2;
+  desc2.audioTracks(audio_tracks2);
+  MediaStreamTrack* audio_track2 = MediaStreamTrack::GetTrack(audio_tracks2[0]);
+  audio_track2->Stop();
+  EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter());
+
+  blink::WebVector<blink::WebMediaStreamTrack> video_tracks1;
+  desc1.videoTracks(video_tracks1);
+  MediaStreamTrack* video_track1 = MediaStreamTrack::GetTrack(video_tracks1[0]);
+  video_track1->Stop();
   EXPECT_EQ(0, ms_dispatcher_->stop_video_device_counter());
 
-  ms_impl_->OnLocalMediaStreamStop(desc1.id().utf8());
-  EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter());
+  blink::WebVector<blink::WebMediaStreamTrack> video_tracks2;
+  desc2.videoTracks(video_tracks2);
+  MediaStreamTrack* video_track2 = MediaStreamTrack::GetTrack(video_tracks2[0]);
+  video_track2->Stop();
   EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter());
 }
 
-// Test that the source is stopped even if there are two MediaStreams using
-// the same source.
-TEST_F(MediaStreamImplTest, StopSource) {
+TEST_F(MediaStreamImplTest, StopSourceWhenMediaStreamGoesOutOfScope) {
   // Generate a stream with both audio and video.
-  blink::WebMediaStream desc1 = RequestLocalMediaStream();
-  blink::WebMediaStream desc2 = RequestLocalMediaStream();
+  RequestLocalMediaStream();
+  // Makes sure the test itself don't hold a reference to the created
+  // MediaStream.
+  ms_impl_->ClearLastGeneratedStream();
 
-  // Stop the video source.
-  blink::WebVector<blink::WebMediaStreamTrack> video_tracks;
-  desc1.videoTracks(video_tracks);
-  ms_impl_->OnLocalSourceStopped(video_tracks[0].source());
-  EXPECT_EQ(0, ms_dispatcher_->stop_audio_device_counter());
-  EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter());
-
-  // Stop the audio source.
-  blink::WebVector<blink::WebMediaStreamTrack> audio_tracks;
-  desc1.audioTracks(audio_tracks);
-  ms_impl_->OnLocalSourceStopped(audio_tracks[0].source());
+  // Expect the sources to be stopped when the MediaStream goes out of scope.
   EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter());
   EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter());
 }
@@ -278,6 +300,7 @@
 TEST_F(MediaStreamImplTest, FrameWillClose) {
   // Test a stream with both audio and video.
   blink::WebMediaStream mixed_desc = RequestLocalMediaStream();
+  blink::WebMediaStream desc2 = RequestLocalMediaStream();
 
   // Test that the MediaStreams are deleted if the owning WebFrame is deleted.
   // In the unit test the owning frame is NULL.
@@ -286,8 +309,8 @@
   EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter());
 }
 
-// This test what happens if a source to a MediaSteam fails to start.
-TEST_F(MediaStreamImplTest, MediaSourceFailToStart) {
+// This test what happens if a video source to a MediaSteam fails to start.
+TEST_F(MediaStreamImplTest, MediaVideoSourceFailToStart) {
   ms_impl_->RequestUserMedia();
   FakeMediaStreamDispatcherComplete();
   FailToStartMockedVideoSource();
@@ -300,22 +323,30 @@
   EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter());
 }
 
-// This test what happens if MediaStreamImpl is deleted while the sources of a
-// MediaStream is being started.
+// This test what happens if an audio source fail to initialize.
+TEST_F(MediaStreamImplTest, MediaAudioSourceFailToInitialize) {
+  FailToCreateNextAudioCapturer();
+  ms_impl_->RequestUserMedia();
+  FakeMediaStreamDispatcherComplete();
+  StartMockedVideoSource();
+  EXPECT_EQ(MediaStreamImplUnderTest::REQUEST_FAILED,
+            ms_impl_->request_state());
+  EXPECT_EQ(MEDIA_DEVICE_TRACK_START_FAILURE,
+            ms_impl_->error_reason());
+  EXPECT_EQ(1, ms_dispatcher_->request_stream_counter());
+  EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter());
+  EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter());
+}
+
+// This test what happens if MediaStreamImpl is deleted before a source has
+// started.
 TEST_F(MediaStreamImplTest, MediaStreamImplShutDown) {
   ms_impl_->RequestUserMedia();
   FakeMediaStreamDispatcherComplete();
   EXPECT_EQ(1, ms_dispatcher_->request_stream_counter());
   EXPECT_EQ(MediaStreamImplUnderTest::REQUEST_NOT_COMPLETE,
             ms_impl_->request_state());
-
-  MockMediaStreamVideoCapturerSource* video_source =
-      ms_impl_->last_created_video_source();
-  // Hold on to a blink reference to the source to guarantee that its not
-  // deleted when MediaStreamImpl is deleted.
-  blink::WebMediaStreamSource blink_source = video_source->owner();
   ms_impl_.reset();
-  video_source->StartMockedSource();
 }
 
 // This test what happens if the WebFrame is closed while the MediaStream is
@@ -343,16 +374,25 @@
             ms_impl_->request_state());
 }
 
-// This test what happens if stop is called on a stream after the frame has
+// This test what happens if stop is called on a track after the frame has
 // been reloaded.
-TEST_F(MediaStreamImplTest, StopStreamAfterReload) {
+TEST_F(MediaStreamImplTest, StopTrackAfterReload) {
   blink::WebMediaStream mixed_desc = RequestLocalMediaStream();
   EXPECT_EQ(1, ms_dispatcher_->request_stream_counter());
   ms_impl_->FrameWillClose(NULL);
   EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter());
   EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter());
-  ms_impl_->OnLocalMediaStreamStop(mixed_desc.id().utf8());
+
+  blink::WebVector<blink::WebMediaStreamTrack> audio_tracks;
+  mixed_desc.audioTracks(audio_tracks);
+  MediaStreamTrack* audio_track = MediaStreamTrack::GetTrack(audio_tracks[0]);
+  audio_track->Stop();
   EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter());
+
+  blink::WebVector<blink::WebMediaStreamTrack> video_tracks;
+  mixed_desc.videoTracks(video_tracks);
+  MediaStreamTrack* video_track = MediaStreamTrack::GetTrack(video_tracks[0]);
+  video_track->Stop();
   EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter());
 }
 
diff --git a/content/renderer/media/media_stream_track.cc b/content/renderer/media/media_stream_track.cc
index 1846b17..529bc38 100644
--- a/content/renderer/media/media_stream_track.cc
+++ b/content/renderer/media/media_stream_track.cc
@@ -31,13 +31,17 @@
     track_->set_enabled(enabled);
 }
 
-webrtc::AudioTrackInterface* MediaStreamTrack::GetAudioAdapter() {
-  return static_cast<webrtc::AudioTrackInterface*>(track_.get());
+void MediaStreamTrack::Stop() {
+  // Stop means that a track should be stopped permanently. But
+  // since there is no proper way of doing that on a remote track, we can
+  // at least disable the track. Blink will not call down to the content layer
+  // after a track has been stopped.
+  if (track_)
+    track_->set_enabled(false);
 }
 
-webrtc::VideoTrackInterface* MediaStreamTrack::GetVideoAdapter() {
-  NOTREACHED();
-  return NULL;
+webrtc::AudioTrackInterface* MediaStreamTrack::GetAudioAdapter() {
+  return static_cast<webrtc::AudioTrackInterface*>(track_.get());
 }
 
 }  // namespace content
diff --git a/content/renderer/media/media_stream_track.h b/content/renderer/media/media_stream_track.h
index e1e2e4f..456005d 100644
--- a/content/renderer/media/media_stream_track.h
+++ b/content/renderer/media/media_stream_track.h
@@ -13,7 +13,6 @@
 
 namespace webrtc {
 class AudioTrackInterface;
-class VideoTrackInterface;
 class MediaStreamTrackInterface;
 }  // namespace webrtc
 
@@ -35,8 +34,11 @@
   // If a subclass overrides this method it has to call the base class.
   virtual void SetEnabled(bool enabled);
 
+  // TODO(xians): Make this pure virtual when Stop[Track] has been
+  // implemented for remote audio tracks.
+  virtual void Stop();
+
   virtual webrtc::AudioTrackInterface* GetAudioAdapter();
-  virtual webrtc::VideoTrackInterface* GetVideoAdapter();
 
   bool is_local_track () const { return is_local_track_; }
 
diff --git a/content/renderer/media/media_stream_video_capture_source_unittest.cc b/content/renderer/media/media_stream_video_capture_source_unittest.cc
index 0a29e76..ea203a2 100644
--- a/content/renderer/media/media_stream_video_capture_source_unittest.cc
+++ b/content/renderer/media/media_stream_video_capture_source_unittest.cc
@@ -2,11 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "base/bind.h"
 #include "base/strings/utf_string_conversions.h"
 #include "content/renderer/media/media_stream_video_capturer_source.h"
 #include "content/renderer/media/media_stream_video_track.h"
 #include "content/renderer/media/mock_media_constraint_factory.h"
-#include "content/renderer/media/mock_media_stream_dependency_factory.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -21,6 +21,7 @@
                void(const media::VideoCaptureParams& params,
                     const NewFrameCallback& new_frame_callback,
                     const StartedCallback& started_callback));
+  MOCK_METHOD0(StopDeliver,void());
 
  private:
   virtual ~MockVideoCapturerDelegate() {}
@@ -33,8 +34,7 @@
     source_ = new MediaStreamVideoCapturerSource(
         device_info,
         MediaStreamSource::SourceStoppedCallback(),
-        delegate_,
-        &factory_);
+        delegate_);
 
     webkit_source_.initialize(base::UTF8ToUTF16("dummy_source_id"),
                               blink::WebMediaStreamSource::TypeVideo,
@@ -42,24 +42,22 @@
     webkit_source_.setExtraData(source_);
   }
 
-  void StartSource() {
+  blink::WebMediaStreamTrack StartSource() {
     MockMediaConstraintFactory factory;
     bool enabled = true;
-    MediaStreamDependencyFactory* dependency_factory = NULL;
-    // CreateVideoTrack will trigger OnSupportedFormats.
-    MediaStreamVideoTrack::CreateVideoTrack(
+    // CreateVideoTrack will trigger OnConstraintsApplied.
+    return MediaStreamVideoTrack::CreateVideoTrack(
         source_, factory.CreateWebMediaConstraints(),
         base::Bind(
             &MediaStreamVideoCapturerSourceTest::OnConstraintsApplied,
             base::Unretained(this)),
-            enabled, dependency_factory);
+            enabled);
   }
 
  protected:
   void OnConstraintsApplied(MediaStreamSource* source, bool success) {
   }
 
-  MockMediaStreamDependencyFactory factory_;
   blink::WebMediaStreamSource webkit_source_;
   MediaStreamVideoCapturerSource* source_;  // owned by webkit_source.
   scoped_refptr<MockVideoCapturerDelegate> delegate_;
@@ -74,7 +72,9 @@
       testing::Field(&media::VideoCaptureParams::allow_resolution_change, true),
       testing::_,
       testing::_)).Times(1);
-  StartSource();
+  blink::WebMediaStreamTrack track = StartSource();
+  // When the track goes out of scope, the source will be stopped.
+  EXPECT_CALL(*delegate_, StopDeliver());
 }
 
 TEST_F(MediaStreamVideoCapturerSourceTest,
@@ -87,7 +87,9 @@
       testing::Field(&media::VideoCaptureParams::allow_resolution_change, true),
       testing::_,
       testing::_)).Times(1);
-  StartSource();
+  blink::WebMediaStreamTrack track = StartSource();
+  // When the track goes out of scope, the source will be stopped.
+  EXPECT_CALL(*delegate_, StopDeliver());
 }
 
 }  // namespace content
diff --git a/content/renderer/media/media_stream_video_capturer_source.cc b/content/renderer/media/media_stream_video_capturer_source.cc
index ccb1e4c..b6bc73a 100644
--- a/content/renderer/media/media_stream_video_capturer_source.cc
+++ b/content/renderer/media/media_stream_video_capturer_source.cc
@@ -99,7 +99,7 @@
 
 void VideoCapturerDelegate::StopDeliver() {
   // Immediately make sure we don't provide more frames.
-  DVLOG(3) << "VideoCapturerDelegate::StopCapture()";
+  DVLOG(3) << "VideoCapturerDelegate::StopDeliver()";
   DCHECK(message_loop_proxy_->BelongsToCurrentThread());
   capture_engine_->StopCapture(this);
   new_frame_callback_.Reset();
@@ -219,9 +219,8 @@
 MediaStreamVideoCapturerSource::MediaStreamVideoCapturerSource(
     const StreamDeviceInfo& device_info,
     const SourceStoppedCallback& stop_callback,
-    const scoped_refptr<VideoCapturerDelegate>& delegate,
-    MediaStreamDependencyFactory* factory)
-    : MediaStreamVideoSource(factory),
+    const scoped_refptr<VideoCapturerDelegate>& delegate)
+    : MediaStreamVideoSource(),
       delegate_(delegate) {
   SetDeviceInfo(device_info);
   SetStopCallback(stop_callback);
diff --git a/content/renderer/media/media_stream_video_capturer_source.h b/content/renderer/media/media_stream_video_capturer_source.h
index 6fff76c..b719887 100644
--- a/content/renderer/media/media_stream_video_capturer_source.h
+++ b/content/renderer/media/media_stream_video_capturer_source.h
@@ -110,8 +110,7 @@
   MediaStreamVideoCapturerSource(
       const StreamDeviceInfo& device_info,
       const SourceStoppedCallback& stop_callback,
-      const scoped_refptr<VideoCapturerDelegate>& delegate,
-      MediaStreamDependencyFactory* factory);
+      const scoped_refptr<VideoCapturerDelegate>& delegate);
 
   virtual ~MediaStreamVideoCapturerSource();
 
diff --git a/content/renderer/media/media_stream_video_source.cc b/content/renderer/media/media_stream_video_source.cc
index 28d47d2..28cc3e2 100644
--- a/content/renderer/media/media_stream_video_source.cc
+++ b/content/renderer/media/media_stream_video_source.cc
@@ -27,14 +27,14 @@
 const char MediaStreamVideoSource::kMinFrameRate[] = "minFrameRate";
 
 const char* kSupportedConstraints[] = {
-    MediaStreamVideoSource::kMaxAspectRatio,
-    MediaStreamVideoSource::kMinAspectRatio,
-    MediaStreamVideoSource::kMaxWidth,
-    MediaStreamVideoSource::kMinWidth,
-    MediaStreamVideoSource::kMaxHeight,
-    MediaStreamVideoSource::kMinHeight,
-    MediaStreamVideoSource::kMaxFrameRate,
-    MediaStreamVideoSource::kMinFrameRate,
+  MediaStreamVideoSource::kMaxAspectRatio,
+  MediaStreamVideoSource::kMinAspectRatio,
+  MediaStreamVideoSource::kMaxWidth,
+  MediaStreamVideoSource::kMinWidth,
+  MediaStreamVideoSource::kMaxHeight,
+  MediaStreamVideoSource::kMinHeight,
+  MediaStreamVideoSource::kMaxFrameRate,
+  MediaStreamVideoSource::kMinFrameRate,
 };
 
 const int MediaStreamVideoSource::kDefaultWidth = 640;
@@ -300,11 +300,8 @@
   return false;
 }
 
-MediaStreamVideoSource::MediaStreamVideoSource(
-    MediaStreamDependencyFactory* factory)
-    : state_(NEW),
-      factory_(factory),
-      capture_adapter_(NULL) {
+MediaStreamVideoSource::MediaStreamVideoSource()
+    : state_(NEW) {
 }
 
 MediaStreamVideoSource::~MediaStreamVideoSource() {
@@ -353,35 +350,17 @@
 }
 
 void MediaStreamVideoSource::RemoveTrack(MediaStreamVideoTrack* video_track) {
+  DCHECK(CalledOnValidThread());
   std::vector<MediaStreamVideoTrack*>::iterator it =
       std::find(tracks_.begin(), tracks_.end(), video_track);
   DCHECK(it != tracks_.end());
   tracks_.erase(it);
-}
-
-void MediaStreamVideoSource::InitAdapter() {
-  if (adapter_)
-    return;
-  // Create the webrtc::MediaStreamVideoSourceInterface adapter.
-  // It needs the constraints so that constraints used by a PeerConnection
-  // will be available such as constraints for CPU adaptation and a tab
-  // capture.
-  bool is_screencast =
-      device_info().device.type == MEDIA_TAB_VIDEO_CAPTURE ||
-      device_info().device.type == MEDIA_DESKTOP_VIDEO_CAPTURE;
-  capture_adapter_ = factory_->CreateVideoCapturer(is_screencast);
-  adapter_ = factory_->CreateVideoSource(capture_adapter_,
-                                         current_constraints_);
-}
-
-webrtc::VideoSourceInterface* MediaStreamVideoSource::GetAdapter() {
-  if (!adapter_) {
-    InitAdapter();
-  }
-  return adapter_;
+  if (tracks_.empty())
+    StopSource();
 }
 
 void MediaStreamVideoSource::DoStopSource() {
+  DCHECK(CalledOnValidThread());
   DVLOG(3) << "DoStopSource()";
   StopSourceImpl();
   state_ = ENDED;
@@ -411,12 +390,6 @@
     }
   }
 
-  if ((frame->format() == media::VideoFrame::I420 ||
-       frame->format() == media::VideoFrame::YV12) &&
-      capture_adapter_) {
-    capture_adapter_->OnFrameCaptured(video_frame);
-  }
-
   for (std::vector<MediaStreamVideoTrack*>::iterator it = tracks_.begin();
        it != tracks_.end(); ++it) {
     (*it)->OnVideoFrame(video_frame);
@@ -433,8 +406,10 @@
                                      &current_format_,
                                      &max_frame_output_size_,
                                      &current_constraints_)) {
-    FinalizeAddTrack();
     SetReadyState(blink::WebMediaStreamSource::ReadyStateEnded);
+    // This object can be deleted after calling FinalizeAddTrack. See comment
+    // in the header file.
+    FinalizeAddTrack();
     return;
   }
 
@@ -489,6 +464,8 @@
     StopSourceImpl();
   }
 
+  // This object can be deleted after calling FinalizeAddTrack. See comment in
+  // the header file.
   FinalizeAddTrack();
 }
 
diff --git a/content/renderer/media/media_stream_video_source.h b/content/renderer/media/media_stream_video_source.h
index bd0af43..5c5289d 100644
--- a/content/renderer/media/media_stream_video_source.h
+++ b/content/renderer/media/media_stream_video_source.h
@@ -8,25 +8,18 @@
 #include <vector>
 
 #include "base/compiler_specific.h"
+#include "base/threading/non_thread_safe.h"
 #include "content/common/content_export.h"
-#include "content/renderer/media/media_stream_dependency_factory.h"
 #include "content/renderer/media/media_stream_source.h"
 #include "media/base/video_frame.h"
-#include "media/base/video_frame_pool.h"
 #include "media/video/capture/video_capture_types.h"
 #include "third_party/WebKit/public/platform/WebMediaConstraints.h"
 #include "third_party/WebKit/public/platform/WebMediaStreamSource.h"
 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h"
 
-namespace media {
-class VideoFrame;
-}
-
 namespace content {
 
-class MediaStreamDependencyFactory;
 class MediaStreamVideoTrack;
-class WebRtcVideoCapturerAdapter;
 
 // MediaStreamVideoSource is an interface used for sending video frames to a
 // MediaStreamVideoTrack.
@@ -47,7 +40,7 @@
     : public MediaStreamSource,
       NON_EXPORTED_BASE(public base::NonThreadSafe) {
  public:
-  explicit MediaStreamVideoSource(MediaStreamDependencyFactory* factory);
+  MediaStreamVideoSource();
   virtual ~MediaStreamVideoSource();
 
   // Returns the MediaStreamVideoSource object owned by |source|.
@@ -60,12 +53,6 @@
                 const ConstraintsCallback& callback);
   void RemoveTrack(MediaStreamVideoTrack* track);
 
-  // TODO(ronghuawu): Remove webrtc::VideoSourceInterface from the public
-  // interface of this class.
-  // This creates a VideoSourceInterface implementation if it does not already
-  // exist.
-  virtual webrtc::VideoSourceInterface* GetAdapter();
-
   // Return true if |name| is a constraint supported by MediaStreamVideoSource.
   static bool IsConstraintSupported(const std::string& name);
 
@@ -89,8 +76,6 @@
  protected:
   virtual void DoStopSource() OVERRIDE;
 
-  MediaStreamDependencyFactory* factory() { return factory_; }
-
   // Sets ready state and notifies the ready state to all registered tracks.
   virtual void SetReadyState(blink::WebMediaStreamSource::ReadyState state);
 
@@ -150,6 +135,10 @@
   // Trigger all cached callbacks from AddTrack. AddTrack is successful
   // if the capture delegate has started and the constraints provided in
   // AddTrack match the format that was used to start the device.
+  // Note that it must be ok to delete the MediaStreamVideoSource object
+  // in the context of the callback. If gUM fail, the implementation will
+  // simply drop the references to the blink source and track which will lead
+  // to that this object is deleted.
   void FinalizeAddTrack();
 
   State state_;
@@ -175,12 +164,6 @@
   // Tracks that currently are receiving video frames.
   std::vector<MediaStreamVideoTrack*> tracks_;
 
-  // TODO(perkj): The below classes use webrtc/libjingle types. The goal is to
-  // get rid of them as far as possible.
-  MediaStreamDependencyFactory* factory_;
-  scoped_refptr<webrtc::VideoSourceInterface> adapter_;
-  WebRtcVideoCapturerAdapter* capture_adapter_;
-
   DISALLOW_COPY_AND_ASSIGN(MediaStreamVideoSource);
 };
 
diff --git a/content/renderer/media/media_stream_video_source_unittest.cc b/content/renderer/media/media_stream_video_source_unittest.cc
index 2dae490..c6e4bf8 100644
--- a/content/renderer/media/media_stream_video_source_unittest.cc
+++ b/content/renderer/media/media_stream_video_source_unittest.cc
@@ -5,12 +5,13 @@
 #include <string>
 #include <vector>
 
+#include "base/bind.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "content/renderer/media/media_stream_video_source.h"
 #include "content/renderer/media/media_stream_video_track.h"
 #include "content/renderer/media/mock_media_constraint_factory.h"
-#include "content/renderer/media/mock_media_stream_dependency_factory.h"
+#include "content/renderer/media/mock_media_stream_video_sink.h"
 #include "content/renderer/media/mock_media_stream_video_sink.h"
 #include "content/renderer/media/mock_media_stream_video_source.h"
 #include "media/base/video_frame.h"
@@ -24,7 +25,7 @@
   MediaStreamVideoSourceTest()
       : number_of_successful_constraints_applied_(0),
         number_of_failed_constraints_applied_(0),
-        mock_source_(new MockMediaStreamVideoSource(&factory_, true)) {
+        mock_source_(new MockMediaStreamVideoSource(true)) {
     media::VideoCaptureFormats formats;
     formats.push_back(media::VideoCaptureFormat(
         gfx::Size(1280, 720), 30, media::PIXEL_FORMAT_I420));
@@ -47,13 +48,12 @@
       const std::string& id,
       const blink::WebMediaConstraints& constraints) {
     bool enabled = true;
-    MediaStreamDependencyFactory* factory = NULL;
     return MediaStreamVideoTrack::CreateVideoTrack(
         mock_source_, constraints,
         base::Bind(
             &MediaStreamVideoSourceTest::OnConstraintsApplied,
             base::Unretained(this)),
-        enabled, factory);
+        enabled);
   }
 
   blink::WebMediaStreamTrack CreateTrackAndStartSource(
@@ -69,10 +69,6 @@
     EXPECT_EQ(expected_height, format.requested_format.frame_size.height());
     EXPECT_EQ(expected_frame_rate, format.requested_format.frame_rate);
 
-    MediaStreamVideoSource* source =
-        static_cast<MediaStreamVideoSource*>(track.source().extraData());
-    EXPECT_TRUE(source->GetAdapter() != NULL);
-
     EXPECT_EQ(0, NumberOfSuccessConstraintsCallbacks());
     mock_source_->StartMockedSource();
     // Once the source has started successfully we expect that the
@@ -93,30 +89,35 @@
 
   // Test that the source crops to the requested max width and
   // height even though the camera delivers a larger frame.
-  // TODO(perkj): Frame resolution should be verified in MediaStreamVideoTrack
-  // and not in the adapter.
   void TestSourceCropFrame(int capture_width,
                            int capture_height,
                            const blink::WebMediaConstraints& constraints,
-                           int expected_height,
-                           int expected_width) {
+                           int expected_width,
+                           int expected_height) {
     // Expect the source to start capture with the supported resolution.
-    CreateTrackAndStartSource(constraints, capture_width, capture_height , 30);
+    blink::WebMediaStreamTrack track =
+        CreateTrackAndStartSource(constraints, capture_width, capture_height ,
+                                  30);
 
-    ASSERT_TRUE(mock_source()->GetAdapter());
-    MockVideoSource* adapter = static_cast<MockVideoSource*>(
-        mock_source()->GetAdapter());
-    EXPECT_EQ(0, adapter->GetFrameNum());
+    MockMediaStreamVideoSink sink;
+    MediaStreamVideoSink::AddToVideoTrack(&sink, track);
+    EXPECT_EQ(0, sink.number_of_frames());
 
     scoped_refptr<media::VideoFrame> frame =
         media::VideoFrame::CreateBlackFrame(gfx::Size(capture_width,
                                                       capture_height));
     mock_source()->DeliverVideoFrame(frame);
-    EXPECT_EQ(1, adapter->GetFrameNum());
+    EXPECT_EQ(1, sink.number_of_frames());
 
     // Expect the delivered frame to be cropped.
-    EXPECT_EQ(expected_height, adapter->GetLastFrameWidth());
-    EXPECT_EQ(expected_width, adapter->GetLastFrameHeight());
+    EXPECT_EQ(expected_height, sink.frame_size().height());
+    EXPECT_EQ(expected_width, sink.frame_size().width());
+    MediaStreamVideoSink::RemoveFromVideoTrack(&sink, track);
+  }
+
+  void ReleaseTrackAndSourceOnAddTrackCallback(
+      const blink::WebMediaStreamTrack& track_to_release) {
+    track_to_release_ = track_to_release;
   }
 
  private:
@@ -127,11 +128,17 @@
       ++number_of_successful_constraints_applied_;
     else
       ++number_of_failed_constraints_applied_;
+
+    if (!track_to_release_.isNull()) {
+      mock_source_ = NULL;
+      webkit_source_.reset();
+      track_to_release_.reset();
+    }
   }
 
+  blink::WebMediaStreamTrack track_to_release_;
   int number_of_successful_constraints_applied_;
   int number_of_failed_constraints_applied_;
-  MockMediaStreamDependencyFactory factory_;
   blink::WebMediaStreamSource webkit_source_;
   // |mock_source_| is owned by |webkit_source_|.
   MockMediaStreamVideoSource* mock_source_;
@@ -140,7 +147,7 @@
 TEST_F(MediaStreamVideoSourceTest, AddTrackAndStartSource) {
   blink::WebMediaConstraints constraints;
   constraints.initialize();
-  CreateTrack("123", constraints);
+  blink::WebMediaStreamTrack track = CreateTrack("123", constraints);
   mock_source()->CompleteGetSupportedFormats();
   mock_source()->StartMockedSource();
   EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks());
@@ -160,18 +167,18 @@
 TEST_F(MediaStreamVideoSourceTest, AddTrackAfterSourceStarts) {
   blink::WebMediaConstraints constraints;
   constraints.initialize();
-  CreateTrack("123", constraints);
+  blink::WebMediaStreamTrack track1 = CreateTrack("123", constraints);
   mock_source()->CompleteGetSupportedFormats();
   mock_source()->StartMockedSource();
   EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks());
-  CreateTrack("123", constraints);
+  blink::WebMediaStreamTrack track2 = CreateTrack("123", constraints);
   EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks());
 }
 
 TEST_F(MediaStreamVideoSourceTest, AddTrackAndFailToStartSource) {
   blink::WebMediaConstraints constraints;
   constraints.initialize();
-  CreateTrack("123", constraints);
+  blink::WebMediaStreamTrack track = CreateTrack("123", constraints);
   mock_source()->CompleteGetSupportedFormats();
   mock_source()->FailToStartMockedSource();
   EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks());
@@ -180,8 +187,8 @@
 TEST_F(MediaStreamVideoSourceTest, AddTwoTracksBeforeGetSupportedFormats) {
   blink::WebMediaConstraints constraints;
   constraints.initialize();
-  CreateTrack("123", constraints);
-  CreateTrack("123", constraints);
+  blink::WebMediaStreamTrack track1 = CreateTrack("123", constraints);
+  blink::WebMediaStreamTrack track2 = CreateTrack("123", constraints);
   mock_source()->CompleteGetSupportedFormats();
   mock_source()->StartMockedSource();
   EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks());
@@ -230,7 +237,36 @@
 TEST_F(MediaStreamVideoSourceTest, MandatoryAspectRatioTooHigh) {
   MockMediaConstraintFactory factory;
   factory.AddMandatory(MediaStreamVideoSource::kMinAspectRatio, 2);
-  CreateTrack("123", factory.CreateWebMediaConstraints());
+  blink::WebMediaStreamTrack track = CreateTrack(
+      "123", factory.CreateWebMediaConstraints());
+  mock_source()->CompleteGetSupportedFormats();
+  EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks());
+}
+
+// Test that its safe to release the last reference of a blink track and the
+// source during the callback if adding a track succeeds.
+TEST_F(MediaStreamVideoSourceTest, ReleaseTrackAndSourceOnSuccessCallBack) {
+  MockMediaConstraintFactory factory;
+  {
+    blink::WebMediaStreamTrack track =
+        CreateTrack("123", factory.CreateWebMediaConstraints());
+    ReleaseTrackAndSourceOnAddTrackCallback(track);
+  }
+  mock_source()->CompleteGetSupportedFormats();
+  mock_source()->StartMockedSource();
+  EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks());
+}
+
+// Test that its safe to release the last reference of a blink track and the
+// source during the callback if adding a track fails.
+TEST_F(MediaStreamVideoSourceTest, ReleaseTrackAndSourceOnFailureCallBack) {
+  MockMediaConstraintFactory factory;
+  factory.AddMandatory(MediaStreamVideoSource::kMinAspectRatio, 2);
+  {
+    blink::WebMediaStreamTrack track =
+        CreateTrack("123", factory.CreateWebMediaConstraints());
+    ReleaseTrackAndSourceOnAddTrackCallback(track);
+  }
   mock_source()->CompleteGetSupportedFormats();
   EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks());
 }
@@ -240,7 +276,8 @@
 TEST_F(MediaStreamVideoSourceTest, OptionalAspectRatioTooHigh) {
   MockMediaConstraintFactory factory;
   factory.AddOptional(MediaStreamVideoSource::kMinAspectRatio, 2);
-  CreateTrack("123", factory.CreateWebMediaConstraints());
+  blink::WebMediaStreamTrack track = CreateTrack(
+      "123", factory.CreateWebMediaConstraints());
   mock_source()->CompleteGetSupportedFormats();
 
   const media::VideoCaptureParams& params = mock_source()->start_params();
@@ -272,7 +309,8 @@
 TEST_F(MediaStreamVideoSourceTest, InvalidMandatoryConstraint) {
   MockMediaConstraintFactory factory;
   factory.AddMandatory("weird key", 640);
-  CreateTrack("123", factory.CreateWebMediaConstraints());
+  blink::WebMediaStreamTrack track = CreateTrack(
+      "123", factory.CreateWebMediaConstraints());
   mock_source()->CompleteGetSupportedFormats();
   EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks());
 }
@@ -299,7 +337,8 @@
   factory.AddMandatory(MediaStreamVideoSource::kMaxWidth, 480);
   factory.AddMandatory(MediaStreamVideoSource::kMaxHeight, 270);
 
-  CreateTrackAndStartSource(factory.CreateWebMediaConstraints(), 480, 270, 30);
+  blink::WebMediaStreamTrack track = CreateTrackAndStartSource(
+      factory.CreateWebMediaConstraints(), 480, 270, 30);
   EXPECT_EQ(480, mock_source()->max_requested_height());
   EXPECT_EQ(270, mock_source()->max_requested_width());
 }
@@ -315,31 +354,6 @@
   CreateTrackAndStartSource(factory.CreateWebMediaConstraints(), 1280, 720, 30);
 }
 
-// Test that the webrtc video adapter can be created and that it received
-// video frames if the source deliver video frames.
-TEST_F(MediaStreamVideoSourceTest, AdapterReceiveVideoFrame) {
-  MockMediaConstraintFactory factory;
-  CreateTrackAndStartSource(factory.CreateWebMediaConstraints(),
-                            MediaStreamVideoSource::kDefaultWidth,
-                            MediaStreamVideoSource::kDefaultHeight,
-                            MediaStreamVideoSource::kDefaultFrameRate);
-  ASSERT_TRUE(mock_source()->GetAdapter());
-  MockVideoSource* adapter = static_cast<MockVideoSource*>(
-      mock_source()->GetAdapter());
-  EXPECT_EQ(0, adapter->GetFrameNum());
-
-  scoped_refptr<media::VideoFrame> frame =
-      media::VideoFrame::CreateBlackFrame(
-          gfx::Size(MediaStreamVideoSource::kDefaultWidth,
-                    MediaStreamVideoSource::kDefaultHeight));
-   mock_source()->DeliverVideoFrame(frame);
-   EXPECT_EQ(1, adapter->GetFrameNum());
-   EXPECT_EQ(MediaStreamVideoSource::kDefaultWidth,
-             adapter->GetLastFrameWidth());
-   EXPECT_EQ(MediaStreamVideoSource::kDefaultHeight,
-             adapter->GetLastFrameHeight());
-}
-
 // Test that the source crops to the requested max width and
 // height even though the camera delivers a larger frame.
 TEST_F(MediaStreamVideoSourceTest, DeliverCroppedVideoFrameOptional640360) {
@@ -455,7 +469,7 @@
       MediaStreamVideoSource::kMinAspectRatio));
 
   EXPECT_FALSE(MediaStreamVideoSource::IsConstraintSupported(
-      "googCpuAdaptation"));
+      "something unsupported"));
 }
 
 }  // namespace content
diff --git a/content/renderer/media/media_stream_video_track.cc b/content/renderer/media/media_stream_video_track.cc
index 8d4b83d..f5cea67 100644
--- a/content/renderer/media/media_stream_video_track.cc
+++ b/content/renderer/media/media_stream_video_track.cc
@@ -4,8 +4,6 @@
 
 #include "content/renderer/media/media_stream_video_track.h"
 
-#include "content/renderer/media/media_stream_dependency_factory.h"
-
 namespace content {
 
 //static
@@ -13,15 +11,13 @@
     MediaStreamVideoSource* source,
     const blink::WebMediaConstraints& constraints,
     const MediaStreamVideoSource::ConstraintsCallback& callback,
-    bool enabled,
-    MediaStreamDependencyFactory* factory) {
+    bool enabled) {
   blink::WebMediaStreamTrack track;
   track.initialize(source->owner());
   track.setExtraData(new MediaStreamVideoTrack(source,
                                                constraints,
                                                callback,
-                                               enabled,
-                                               factory));
+                                               enabled));
   return track;
 }
 
@@ -35,18 +31,17 @@
     MediaStreamVideoSource* source,
     const blink::WebMediaConstraints& constraints,
     const MediaStreamVideoSource::ConstraintsCallback& callback,
-    bool enabled,
-    MediaStreamDependencyFactory* factory)
+    bool enabled)
     : MediaStreamTrack(NULL, true),
       enabled_(enabled),
-      source_(source),
-      factory_(factory) {
+      constraints_(constraints),
+      source_(source) {
   source->AddTrack(this, constraints, callback);
 }
 
 MediaStreamVideoTrack::~MediaStreamVideoTrack() {
   DCHECK(sinks_.empty());
-  source_->RemoveTrack(this);
+  Stop();
 }
 
 void MediaStreamVideoTrack::AddSink(MediaStreamVideoSink* sink) {
@@ -63,21 +58,6 @@
   sinks_.erase(it);
 }
 
-webrtc::VideoTrackInterface* MediaStreamVideoTrack::GetVideoAdapter() {
-  DCHECK(thread_checker_.CalledOnValidThread());
-  DCHECK_EQ(owner().source().type(), blink::WebMediaStreamSource::TypeVideo);
-  if (!track_.get()) {
-    MediaStreamVideoSource* source =
-          static_cast<MediaStreamVideoSource*>(owner().source().extraData());
-    scoped_refptr<webrtc::VideoTrackInterface> video_track(
-        factory_->CreateLocalVideoTrack(owner().id().utf8(),
-                                        source->GetAdapter()));
-    video_track->set_enabled(owner().isEnabled());
-    track_ = video_track;
-  }
-  return static_cast<webrtc::VideoTrackInterface*>(track_.get());
-}
-
 void MediaStreamVideoTrack::SetEnabled(bool enabled) {
   DCHECK(thread_checker_.CalledOnValidThread());
   enabled_ = enabled;
@@ -88,6 +68,15 @@
   }
 }
 
+void MediaStreamVideoTrack::Stop() {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  if (source_) {
+    source_->RemoveTrack(this);
+    source_ = NULL;
+  }
+  OnReadyStateChanged(blink::WebMediaStreamSource::ReadyStateEnded);
+}
+
 void MediaStreamVideoTrack::OnVideoFrame(
     const scoped_refptr<media::VideoFrame>& frame) {
   DCHECK(thread_checker_.CalledOnValidThread());
diff --git a/content/renderer/media/media_stream_video_track.h b/content/renderer/media/media_stream_video_track.h
index 07307ae..c28ebb1 100644
--- a/content/renderer/media/media_stream_video_track.h
+++ b/content/renderer/media/media_stream_video_track.h
@@ -15,14 +15,8 @@
 #include "content/renderer/media/media_stream_track.h"
 #include "content/renderer/media/media_stream_video_source.h"
 
-namespace webrtc {
-class VideoTrackInterface;
-}
-
 namespace content {
 
-class MediaStreamDependencyFactory;
-
 // MediaStreamVideoTrack is a video specific representation of a
 // blink::WebMediaStreamTrack in content. It is owned by the blink object
 // and can be retrieved from a blink object using
@@ -41,8 +35,7 @@
       MediaStreamVideoSource* source,
       const blink::WebMediaConstraints& constraints,
       const MediaStreamVideoSource::ConstraintsCallback& callback,
-      bool enabled,
-      MediaStreamDependencyFactory* factory);
+      bool enabled);
 
   static MediaStreamVideoTrack* GetVideoTrack(
       const blink::WebMediaStreamTrack& track);
@@ -52,20 +45,21 @@
        MediaStreamVideoSource* source,
        const blink::WebMediaConstraints& constraints,
        const MediaStreamVideoSource::ConstraintsCallback& callback,
-       bool enabled,
-       MediaStreamDependencyFactory* factory);
+       bool enabled);
   virtual ~MediaStreamVideoTrack();
   virtual void AddSink(MediaStreamVideoSink* sink);
   virtual void RemoveSink(MediaStreamVideoSink* sink);
 
-  // TODO(perkj): GetVideoAdapter is webrtc specific. Move GetVideoAdapter to
-  // where the track is added to a RTCPeerConnection. crbug/323223.
-  virtual webrtc::VideoTrackInterface* GetVideoAdapter() OVERRIDE;
   virtual void SetEnabled(bool enabled) OVERRIDE;
+  virtual void Stop() OVERRIDE;
 
   void OnVideoFrame(const scoped_refptr<media::VideoFrame>& frame);
   void OnReadyStateChanged(blink::WebMediaStreamSource::ReadyState state);
 
+  const blink::WebMediaConstraints& constraints() const {
+    return constraints_;
+  }
+
  protected:
   // Used to DCHECK that we are called on the correct thread.
   base::ThreadChecker thread_checker_;
@@ -73,16 +67,13 @@
  private:
   bool enabled_;
   std::vector<MediaStreamVideoSink*> sinks_;
+  blink::WebMediaConstraints constraints_;
 
   // Weak ref to the source this tracks is connected to.  |source_| is owned
   // by the blink::WebMediaStreamSource and is guaranteed to outlive the
   // track.
   MediaStreamVideoSource* source_;
 
-  // Weak ref to a MediaStreamDependencyFactory, owned by the RenderThread.
-  // It's valid for the lifetime of RenderThread.
-  MediaStreamDependencyFactory* factory_;
-
   DISALLOW_COPY_AND_ASSIGN(MediaStreamVideoTrack);
 };
 
diff --git a/content/renderer/media/media_stream_video_track_unittest.cc b/content/renderer/media/media_stream_video_track_unittest.cc
index d2e8482..c10fba2 100644
--- a/content/renderer/media/media_stream_video_track_unittest.cc
+++ b/content/renderer/media/media_stream_video_track_unittest.cc
@@ -4,7 +4,6 @@
 
 #include "base/strings/utf_string_conversions.h"
 #include "content/renderer/media/media_stream_video_track.h"
-#include "content/renderer/media/mock_media_stream_dependency_factory.h"
 #include "content/renderer/media/mock_media_stream_video_sink.h"
 #include "content/renderer/media/mock_media_stream_video_source.h"
 #include "media/base/video_frame.h"
@@ -15,11 +14,12 @@
 class MediaStreamVideoTrackTest : public ::testing::Test {
  public:
   MediaStreamVideoTrackTest()
-      : mock_source_(new MockMediaStreamVideoSource(&factory_, false)) {
-    webkit_source_.initialize(base::UTF8ToUTF16("dummy_source_id"),
+      : mock_source_(new MockMediaStreamVideoSource(false)),
+        source_started_(false) {
+    blink_source_.initialize(base::UTF8ToUTF16("dummy_source_id"),
                               blink::WebMediaStreamSource::TypeVideo,
                               base::UTF8ToUTF16("dummy_source_name"));
-    webkit_source_.setExtraData(mock_source_);
+    blink_source_.setExtraData(mock_source_);
   }
 
  protected:
@@ -31,28 +31,26 @@
     blink::WebMediaStreamTrack track =
         MediaStreamVideoTrack::CreateVideoTrack(
             mock_source_, constraints,
-            MediaStreamSource::ConstraintsCallback(), enabled, &factory_);
-    mock_source_->StartMockedSource();
-
+            MediaStreamSource::ConstraintsCallback(), enabled);
+    if (!source_started_) {
+      mock_source_->StartMockedSource();
+      source_started_ = true;
+    }
     return track;
   }
 
   MockMediaStreamVideoSource* mock_source() { return mock_source_; }
+  const blink::WebMediaStreamSource& blink_source() const {
+    return blink_source_;
+  }
 
  private:
-  MockMediaStreamDependencyFactory factory_;
-  blink::WebMediaStreamSource webkit_source_;
+  blink::WebMediaStreamSource blink_source_;
   // |mock_source_| is owned by |webkit_source_|.
   MockMediaStreamVideoSource* mock_source_;
+  bool source_started_;
 };
 
-TEST_F(MediaStreamVideoTrackTest, GetAdapter) {
-  blink::WebMediaStreamTrack track = CreateTrack();
-  MediaStreamVideoTrack* video_track =
-      MediaStreamVideoTrack::GetVideoTrack(track);
-  EXPECT_TRUE(video_track->GetVideoAdapter() != NULL);
-}
-
 TEST_F(MediaStreamVideoTrackTest, AddAndRemoveSink) {
   MockMediaStreamVideoSink sink;
   blink::WebMediaStreamTrack track = CreateTrack();
@@ -111,4 +109,35 @@
   MediaStreamVideoSink::RemoveFromVideoTrack(&sink, track);
 }
 
+TEST_F(MediaStreamVideoTrackTest, StopLastTrack) {
+  MockMediaStreamVideoSink sink1;
+  blink::WebMediaStreamTrack track1 = CreateTrack();
+  MediaStreamVideoSink::AddToVideoTrack(&sink1, track1);
+  EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive, sink1.state());
+
+  EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive,
+            blink_source().readyState());
+
+  MockMediaStreamVideoSink sink2;
+  blink::WebMediaStreamTrack track2 = CreateTrack();
+  MediaStreamVideoSink::AddToVideoTrack(&sink2, track2);
+  EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive, sink2.state());
+
+  MediaStreamVideoTrack* native_track1 =
+      MediaStreamVideoTrack::GetVideoTrack(track1);
+  native_track1->Stop();
+  EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateEnded, sink1.state());
+  EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive,
+              blink_source().readyState());
+  MediaStreamVideoSink::RemoveFromVideoTrack(&sink1, track1);
+
+  MediaStreamVideoTrack* native_track2 =
+        MediaStreamVideoTrack::GetVideoTrack(track2);
+  native_track2->Stop();
+  EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateEnded, sink2.state());
+  EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateEnded,
+            blink_source().readyState());
+  MediaStreamVideoSink::RemoveFromVideoTrack(&sink2, track2);
+}
+
 }  // namespace content
diff --git a/content/renderer/media/mock_media_stream_dependency_factory.cc b/content/renderer/media/mock_media_stream_dependency_factory.cc
index d07cb3a..9816113 100644
--- a/content/renderer/media/mock_media_stream_dependency_factory.cc
+++ b/content/renderer/media/mock_media_stream_dependency_factory.cc
@@ -11,6 +11,7 @@
 #include "content/renderer/media/webrtc/webrtc_local_audio_track_adapter.h"
 #include "content/renderer/media/webrtc/webrtc_video_capturer_adapter.h"
 #include "content/renderer/media/webrtc_audio_capturer.h"
+#include "content/renderer/media/webrtc_local_audio_track.h"
 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h"
 #include "third_party/libjingle/source/talk/app/webrtc/mediastreaminterface.h"
 #include "third_party/libjingle/source/talk/base/scoped_ref_ptr.h"
@@ -284,7 +285,7 @@
 }
 
 MockWebRtcVideoTrack::MockWebRtcVideoTrack(
-    std::string id,
+    const std::string& id,
     webrtc::VideoSourceInterface* source)
     : enabled_(false),
       id_(id),
@@ -430,7 +431,8 @@
 };
 
 MockMediaStreamDependencyFactory::MockMediaStreamDependencyFactory()
-    : MediaStreamDependencyFactory(NULL) {
+    : MediaStreamDependencyFactory(NULL),
+      fail_to_create_next_audio_capturer_(false) {
 }
 
 MockMediaStreamDependencyFactory::~MockMediaStreamDependencyFactory() {}
@@ -520,14 +522,20 @@
 scoped_refptr<WebRtcAudioCapturer>
 MockMediaStreamDependencyFactory::CreateAudioCapturer(
     int render_view_id, const StreamDeviceInfo& device_info,
-    const blink::WebMediaConstraints& constraints) {
+    const blink::WebMediaConstraints& constraints,
+    MediaStreamAudioSource* audio_source) {
+  if (fail_to_create_next_audio_capturer_) {
+    fail_to_create_next_audio_capturer_ = false;
+    return NULL;
+  }
+  DCHECK(audio_source);
   return WebRtcAudioCapturer::CreateCapturer(-1, device_info,
-                                             constraints, NULL);
+                                             constraints, NULL, audio_source);
 }
 
 void MockMediaStreamDependencyFactory::StartLocalAudioTrack(
       WebRtcLocalAudioTrack* audio_track) {
-  return;
+  audio_track->Start();
 }
 
 }  // namespace content
diff --git a/content/renderer/media/mock_media_stream_dependency_factory.h b/content/renderer/media/mock_media_stream_dependency_factory.h
index a2cce87..4bbad2a 100644
--- a/content/renderer/media/mock_media_stream_dependency_factory.h
+++ b/content/renderer/media/mock_media_stream_dependency_factory.h
@@ -106,7 +106,7 @@
 
 class MockWebRtcVideoTrack : public webrtc::VideoTrackInterface {
  public:
-  MockWebRtcVideoTrack(std::string id,
+  MockWebRtcVideoTrack(const std::string& id,
                       webrtc::VideoSourceInterface* source);
   virtual void AddRenderer(webrtc::VideoRendererInterface* renderer) OVERRIDE;
   virtual void RemoveRenderer(
@@ -207,7 +207,11 @@
 
   virtual scoped_refptr<WebRtcAudioCapturer> CreateAudioCapturer(
       int render_view_id, const StreamDeviceInfo& device_info,
-      const blink::WebMediaConstraints& constraints) OVERRIDE;
+      const blink::WebMediaConstraints& constraints,
+      MediaStreamAudioSource* audio_source) OVERRIDE;
+  void FailToCreateNextAudioCapturer() {
+    fail_to_create_next_audio_capturer_ = true;
+  }
 
   virtual void StartLocalAudioTrack(
       WebRtcLocalAudioTrack* audio_track) OVERRIDE;
@@ -216,6 +220,7 @@
   MockVideoSource* last_video_source() { return last_video_source_.get(); }
 
  private:
+  bool fail_to_create_next_audio_capturer_;
   scoped_refptr <MockAudioSource> last_audio_source_;
   scoped_refptr <MockVideoSource> last_video_source_;
 
diff --git a/content/renderer/media/mock_media_stream_registry.cc b/content/renderer/media/mock_media_stream_registry.cc
index 6b990bc..53bf948 100644
--- a/content/renderer/media/mock_media_stream_registry.cc
+++ b/content/renderer/media/mock_media_stream_registry.cc
@@ -28,9 +28,7 @@
   blink::WebVector<blink::WebMediaStreamTrack> webkit_video_tracks;
   blink::WebString label(kTestStreamLabel);
   test_stream_.initialize(label, webkit_audio_tracks, webkit_video_tracks);
-  test_stream_.setExtraData(new MediaStream(&dependency_factory_,
-                                            MediaStream::StreamStopCallback(),
-                                            test_stream_));
+  test_stream_.setExtraData(new MediaStream(test_stream_));
 }
 
 void MockMediaStreamRegistry::AddVideoTrack(const std::string& track_id) {
@@ -39,7 +37,7 @@
                           blink::WebMediaStreamSource::TypeVideo,
                           "mock video source name");
   MockMediaStreamVideoSource* native_source =
-      new MockMediaStreamVideoSource(&dependency_factory_, false);
+      new MockMediaStreamVideoSource(false);
   blink_source.setExtraData(native_source);
   blink::WebMediaStreamTrack blink_track;
   blink_track.initialize(base::UTF8ToUTF16(track_id), blink_source);
@@ -50,8 +48,7 @@
       new MediaStreamVideoTrack(native_source,
                                 constraints,
                                 MediaStreamVideoSource::ConstraintsCallback(),
-                                true,
-                                &dependency_factory_);
+                                true);
   blink_track.setExtraData(native_track);
   test_stream_.addTrack(blink_track);
 }
diff --git a/content/renderer/media/mock_media_stream_registry.h b/content/renderer/media/mock_media_stream_registry.h
index 1435cb5..ac0ffa1 100644
--- a/content/renderer/media/mock_media_stream_registry.h
+++ b/content/renderer/media/mock_media_stream_registry.h
@@ -7,8 +7,8 @@
 
 #include <string>
 
+#include "base/compiler_specific.h"
 #include "content/renderer/media/media_stream_registry_interface.h"
-#include "content/renderer/media/mock_media_stream_dependency_factory.h"
 
 namespace content {
 
@@ -20,10 +20,10 @@
   void AddVideoTrack(const std::string& track_id);
   virtual blink::WebMediaStream GetMediaStream(
       const std::string& url) OVERRIDE;
+
   const blink::WebMediaStream test_stream() const;
 
  private:
-  MockMediaStreamDependencyFactory dependency_factory_;
   blink::WebMediaStream test_stream_;
   std::string stream_url_;
 };
diff --git a/content/renderer/media/mock_media_stream_video_sink.cc b/content/renderer/media/mock_media_stream_video_sink.cc
index 16483ef..ce9222f 100644
--- a/content/renderer/media/mock_media_stream_video_sink.cc
+++ b/content/renderer/media/mock_media_stream_video_sink.cc
@@ -17,7 +17,7 @@
     const scoped_refptr<media::VideoFrame>& frame) {
   ++number_of_frames_;
   format_ = frame->format();
-  frame_size_ = frame->visible_rect().size();
+  frame_size_ = frame->natural_size();
 }
 
 void MockMediaStreamVideoSink::OnReadyStateChanged(
diff --git a/content/renderer/media/mock_media_stream_video_sink.h b/content/renderer/media/mock_media_stream_video_sink.h
index a5ff93f..9511a0a 100644
--- a/content/renderer/media/mock_media_stream_video_sink.h
+++ b/content/renderer/media/mock_media_stream_video_sink.h
@@ -23,9 +23,10 @@
 
   int number_of_frames() const { return number_of_frames_; }
   media::VideoFrame::Format format() const { return format_; }
+  gfx::Size frame_size() const { return frame_size_; }
+
   bool enabled() const { return enabled_; }
   blink::WebMediaStreamSource::ReadyState state() const { return state_; }
-  gfx::Size frame_size() const { return frame_size_; }
 
  private:
   int number_of_frames_;
diff --git a/content/renderer/media/mock_media_stream_video_source.cc b/content/renderer/media/mock_media_stream_video_source.cc
index f88473b..84a4479 100644
--- a/content/renderer/media/mock_media_stream_video_source.cc
+++ b/content/renderer/media/mock_media_stream_video_source.cc
@@ -7,9 +7,8 @@
 namespace content {
 
 MockMediaStreamVideoSource::MockMediaStreamVideoSource(
-    MediaStreamDependencyFactory* factory,
     bool manual_get_supported_formats)
-    : MediaStreamVideoSource(factory),
+    : MediaStreamVideoSource(),
       manual_get_supported_formats_(manual_get_supported_formats),
       max_requested_height_(0),
       max_requested_width_(0),
diff --git a/content/renderer/media/mock_media_stream_video_source.h b/content/renderer/media/mock_media_stream_video_source.h
index c1e5452..33d3f70 100644
--- a/content/renderer/media/mock_media_stream_video_source.h
+++ b/content/renderer/media/mock_media_stream_video_source.h
@@ -12,8 +12,7 @@
 class MockMediaStreamVideoSource
     : public MediaStreamVideoSource {
  public:
-  MockMediaStreamVideoSource(MediaStreamDependencyFactory* factory,
-                             bool manual_get_supported_formats);
+  MockMediaStreamVideoSource(bool manual_get_supported_formats);
   virtual ~MockMediaStreamVideoSource();
 
   // Simulate that the underlying source start successfully.
diff --git a/content/renderer/media/peer_connection_handler_base.cc b/content/renderer/media/peer_connection_handler_base.cc
deleted file mode 100644
index 4aeb6e6..0000000
--- a/content/renderer/media/peer_connection_handler_base.cc
+++ /dev/null
@@ -1,41 +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.
-
-#include "content/renderer/media/peer_connection_handler_base.h"
-
-#include "base/logging.h"
-#include "base/strings/utf_string_conversions.h"
-#include "content/renderer/media/media_stream.h"
-#include "third_party/WebKit/public/platform/WebMediaStream.h"
-#include "third_party/WebKit/public/platform/WebMediaStreamSource.h"
-#include "third_party/WebKit/public/platform/WebMediaStreamTrack.h"
-#include "third_party/WebKit/public/platform/WebString.h"
-
-namespace content {
-
-PeerConnectionHandlerBase::PeerConnectionHandlerBase(
-    MediaStreamDependencyFactory* dependency_factory)
-    : dependency_factory_(dependency_factory),
-      message_loop_proxy_(base::MessageLoopProxy::current()) {
-}
-
-PeerConnectionHandlerBase::~PeerConnectionHandlerBase() {
-}
-
-bool PeerConnectionHandlerBase::AddStream(
-    const blink::WebMediaStream& stream,
-    const webrtc::MediaConstraintsInterface* constraints) {
-  webrtc::MediaStreamInterface* native_stream =
-      MediaStream::GetMediaStream(stream)->GetAdapter(stream);
-  return native_peer_connection_->AddStream(native_stream, constraints);
-}
-
-void PeerConnectionHandlerBase::RemoveStream(
-    const blink::WebMediaStream& stream) {
-  webrtc::MediaStreamInterface* native_stream =
-      MediaStream::GetMediaStream(stream)->GetAdapter(stream);
-  native_peer_connection_->RemoveStream(native_stream);
-}
-
-}  // namespace content
diff --git a/content/renderer/media/peer_connection_handler_base.h b/content/renderer/media/peer_connection_handler_base.h
deleted file mode 100644
index df02721..0000000
--- a/content/renderer/media/peer_connection_handler_base.h
+++ /dev/null
@@ -1,61 +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.
-
-#ifndef CONTENT_RENDERER_MEDIA_PEER_CONNECTION_HANDLER_BASE_H_
-#define CONTENT_RENDERER_MEDIA_PEER_CONNECTION_HANDLER_BASE_H_
-
-#include <map>
-#include <string>
-
-#include "base/memory/ref_counted.h"
-#include "base/message_loop/message_loop_proxy.h"
-#include "content/common/content_export.h"
-#include "third_party/WebKit/public/platform/WebMediaStream.h"
-#include "third_party/WebKit/public/platform/WebMediaStreamTrack.h"
-#include "third_party/libjingle/source/talk/app/webrtc/mediastream.h"
-#include "third_party/libjingle/source/talk/app/webrtc/peerconnectioninterface.h"
-
-namespace content {
-class MediaStreamDependencyFactory;
-class RemoteMediaStreamImpl;
-
-// PeerConnectionHandlerBase is the base class of a delegate for the
-// PeerConnection API messages going between WebKit and native
-// PeerConnection in libjingle.
-class CONTENT_EXPORT PeerConnectionHandlerBase
-    : NON_EXPORTED_BASE(public webrtc::PeerConnectionObserver) {
- public:
-  PeerConnectionHandlerBase(
-      MediaStreamDependencyFactory* dependency_factory);
-
- protected:
-  virtual ~PeerConnectionHandlerBase();
-
-  void AddStream(const blink::WebMediaStream& stream);
-  bool AddStream(const blink::WebMediaStream& stream,
-                 const webrtc::MediaConstraintsInterface* constraints);
-  void RemoveStream(const blink::WebMediaStream& stream);
-
-  // dependency_factory_ is a raw pointer, and is valid for the lifetime of
-  // MediaStreamImpl.
-  MediaStreamDependencyFactory* dependency_factory_;
-
-  // native_peer_connection_ is the native PeerConnection object,
-  // it handles the ICE processing and media engine.
-  scoped_refptr<webrtc::PeerConnectionInterface> native_peer_connection_;
-
-  typedef std::map<webrtc::MediaStreamInterface*,
-      content::RemoteMediaStreamImpl*> RemoteStreamMap;
-  RemoteStreamMap remote_streams_;
-
-  // The message loop we are created on and on which to make calls to WebKit.
-  // This should be the render thread message loop.
-  scoped_refptr<base::MessageLoopProxy> message_loop_proxy_;
-
-  DISALLOW_COPY_AND_ASSIGN(PeerConnectionHandlerBase);
-};
-
-}  // namespace content
-
-#endif  // CONTENT_RENDERER_MEDIA_PEER_CONNECTION_HANDLER_BASE_H_
diff --git a/content/renderer/media/remote_media_stream_impl.cc b/content/renderer/media/remote_media_stream_impl.cc
index 1510607b..f61830d 100644
--- a/content/renderer/media/remote_media_stream_impl.cc
+++ b/content/renderer/media/remote_media_stream_impl.cc
@@ -12,7 +12,6 @@
 #include "content/renderer/media/media_stream_dependency_factory.h"
 #include "content/renderer/media/media_stream_video_track.h"
 #include "content/renderer/media/webrtc/media_stream_remote_video_source.h"
-#include "content/renderer/render_thread_impl.h"
 #include "third_party/WebKit/public/platform/WebString.h"
 
 namespace content {
@@ -28,12 +27,6 @@
   webkit_source.initialize(webkit_track_id, type, webkit_track_id);
   webkit_track->initialize(webkit_track_id, webkit_source);
 
-  MediaStreamDependencyFactory* factory = NULL;
-  // RenderThreadImpl::current() may be NULL in unit tests.
-  RenderThreadImpl* render_thread = RenderThreadImpl::current();
-  if (render_thread)
-    factory = render_thread->GetMediaStreamDependencyFactory();
-
   if (type == blink::WebMediaStreamSource::TypeVideo) {
     MediaStreamRemoteVideoSource* video_source =
         new MediaStreamRemoteVideoSource(
@@ -46,7 +39,7 @@
     webkit_track->setExtraData(
         new MediaStreamVideoTrack(video_source, constraints,
                                   MediaStreamVideoSource::ConstraintsCallback(),
-                                  track->enabled(), factory));
+                                  track->enabled()));
   } else {
     DCHECK(type == blink::WebMediaStreamSource::TypeAudio);
     content::MediaStreamDependencyFactory::AddNativeAudioTrackToBlinkTrack(
@@ -79,7 +72,6 @@
  private:
   scoped_refptr<webrtc::MediaStreamTrackInterface> webrtc_track_;
   blink::WebMediaStreamTrack webkit_track_;
-  bool sent_ended_message_;
 
   DISALLOW_COPY_AND_ASSIGN(RemoteMediaStreamTrackAdapter);
 };
diff --git a/content/renderer/media/rtc_peer_connection_handler.cc b/content/renderer/media/rtc_peer_connection_handler.cc
index 3b94de7..1171c28 100644
--- a/content/renderer/media/rtc_peer_connection_handler.cc
+++ b/content/renderer/media/rtc_peer_connection_handler.cc
@@ -16,8 +16,6 @@
 #include "base/stl_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "content/public/common/content_switches.h"
-#include "content/renderer/media/media_stream.h"
-#include "content/renderer/media/media_stream_audio_source.h"
 #include "content/renderer/media/media_stream_dependency_factory.h"
 #include "content/renderer/media/media_stream_track.h"
 #include "content/renderer/media/peer_connection_tracker.h"
@@ -25,6 +23,7 @@
 #include "content/renderer/media/rtc_data_channel_handler.h"
 #include "content/renderer/media/rtc_dtmf_sender_handler.h"
 #include "content/renderer/media/rtc_media_constraints.h"
+#include "content/renderer/media/webrtc/webrtc_media_stream_adapter.h"
 #include "content/renderer/media/webrtc_audio_capturer.h"
 #include "content/renderer/media/webrtc_audio_device_impl.h"
 #include "content/renderer/media/webrtc_uma_histograms.h"
@@ -320,8 +319,8 @@
 RTCPeerConnectionHandler::RTCPeerConnectionHandler(
     blink::WebRTCPeerConnectionHandlerClient* client,
     MediaStreamDependencyFactory* dependency_factory)
-    : PeerConnectionHandlerBase(dependency_factory),
-      client_(client),
+    : client_(client),
+      dependency_factory_(dependency_factory),
       frame_(NULL),
       peer_connection_tracker_(NULL),
       num_data_channels_created_(0) {
@@ -548,7 +547,16 @@
 bool RTCPeerConnectionHandler::addStream(
     const blink::WebMediaStream& stream,
     const blink::WebMediaConstraints& options) {
-  RTCMediaConstraints constraints(options);
+
+  for (ScopedVector<WebRtcMediaStreamAdapter>::iterator adapter_it =
+      local_streams_.begin(); adapter_it != local_streams_.end();
+      ++adapter_it) {
+    if ((*adapter_it)->IsEqual(stream)) {
+      DVLOG(1) << "RTCPeerConnectionHandler::addStream called with the same "
+               << "stream twice. id=" << stream.id().utf8();
+      return false;
+    }
+  }
 
   if (peer_connection_tracker_)
     peer_connection_tracker_->TrackAddStream(
@@ -556,47 +564,40 @@
 
   PerSessionWebRTCAPIMetrics::GetInstance()->IncrementStreamCounter();
 
+  WebRtcMediaStreamAdapter* adapter =
+      new WebRtcMediaStreamAdapter(stream, dependency_factory_);
+  local_streams_.push_back(adapter);
+
+  webrtc::MediaStreamInterface* webrtc_stream = adapter->webrtc_media_stream();
   track_metrics_.AddStream(MediaStreamTrackMetrics::SENT_STREAM,
-                           MediaStream::GetAdapter(stream));
+                           webrtc_stream);
 
-  // A media stream is connected to a peer connection, enable the
-  // peer connection mode for the sources.
-  blink::WebVector<blink::WebMediaStreamTrack> audio_tracks;
-  stream.audioTracks(audio_tracks);
-  for (size_t i = 0; i < audio_tracks.size(); ++i) {
-    MediaStreamTrack* native_track =
-        MediaStreamTrack::GetTrack(audio_tracks[i]);
-    if (!native_track || !native_track->is_local_track()) {
-      // We don't support connecting remote audio tracks to PeerConnection yet.
-      // See issue http://crbug/344303.
-      // TODO(xians): Remove this after we support connecting remote audio track
-      // to PeerConnection.
-      DLOG(ERROR) << "addStream() failed because we don't support connecting"
-                  << " remote audio track to PeerConnection";
-      NOTIMPLEMENTED();
-      return false;
-    }
-
-    // This is a local audio track.
-    const blink::WebMediaStreamSource& source = audio_tracks[i].source();
-    MediaStreamAudioSource* audio_source =
-        static_cast<MediaStreamAudioSource*>(source.extraData());
-    if (audio_source && audio_source->GetAudioCapturer())
-      audio_source->GetAudioCapturer()->EnablePeerConnectionMode();
-  }
-
-  return AddStream(stream, &constraints);
+  RTCMediaConstraints constraints(options);
+  return native_peer_connection_->AddStream(webrtc_stream, &constraints);
 }
 
 void RTCPeerConnectionHandler::removeStream(
     const blink::WebMediaStream& stream) {
-  RemoveStream(stream);
+  // Find the webrtc stream.
+  scoped_refptr<webrtc::MediaStreamInterface> webrtc_stream;
+  for (ScopedVector<WebRtcMediaStreamAdapter>::iterator adapter_it =
+           local_streams_.begin(); adapter_it != local_streams_.end();
+       ++adapter_it) {
+    if ((*adapter_it)->IsEqual(stream)) {
+      webrtc_stream = (*adapter_it)->webrtc_media_stream();
+      local_streams_.erase(adapter_it);
+      break;
+    }
+  }
+  DCHECK(webrtc_stream);
+  native_peer_connection_->RemoveStream(webrtc_stream);
+
   if (peer_connection_tracker_)
     peer_connection_tracker_->TrackRemoveStream(
         this, stream, PeerConnectionTracker::SOURCE_LOCAL);
   PerSessionWebRTCAPIMetrics::GetInstance()->DecrementStreamCounter();
   track_metrics_.RemoveStream(MediaStreamTrackMetrics::SENT_STREAM,
-                              MediaStream::GetAdapter(stream));
+                              webrtc_stream);
 }
 
 void RTCPeerConnectionHandler::getStats(
@@ -611,16 +612,23 @@
       new talk_base::RefCountedObject<StatsResponse>(request));
   webrtc::MediaStreamTrackInterface* track = NULL;
   if (request->hasSelector()) {
-    MediaStreamTrack* native_track =
-        MediaStreamTrack::GetTrack(request->component());
-    if (native_track) {
-      blink::WebMediaStreamSource::Type type =
-          request->component().source().type();
-      if (type == blink::WebMediaStreamSource::TypeAudio)
-        track = native_track->GetAudioAdapter();
-      else {
-        DCHECK_EQ(blink::WebMediaStreamSource::TypeVideo, type);
-        track = native_track->GetVideoAdapter();
+    blink::WebMediaStreamSource::Type type =
+        request->component().source().type();
+    std::string track_id = request->component().id().utf8();
+    if (type == blink::WebMediaStreamSource::TypeAudio) {
+      track =
+          native_peer_connection_->local_streams()->FindAudioTrack(track_id);
+      if (!track) {
+        track =
+            native_peer_connection_->remote_streams()->FindAudioTrack(track_id);
+      }
+    } else {
+      DCHECK_EQ(blink::WebMediaStreamSource::TypeVideo, type);
+      track =
+          native_peer_connection_->local_streams()->FindVideoTrack(track_id);
+      if (!track) {
+        track =
+            native_peer_connection_->remote_streams()->FindVideoTrack(track_id);
       }
     }
     if (!track) {
diff --git a/content/renderer/media/rtc_peer_connection_handler.h b/content/renderer/media/rtc_peer_connection_handler.h
index 3944376..2634224 100644
--- a/content/renderer/media/rtc_peer_connection_handler.h
+++ b/content/renderer/media/rtc_peer_connection_handler.h
@@ -5,10 +5,13 @@
 #ifndef CONTENT_RENDERER_MEDIA_RTC_PEER_CONNECTION_HANDLER_H_
 #define CONTENT_RENDERER_MEDIA_RTC_PEER_CONNECTION_HANDLER_H_
 
+#include <map>
+#include <string>
+
 #include "base/basictypes.h"
 #include "base/compiler_specific.h"
+#include "base/memory/ref_counted.h"
 #include "content/common/content_export.h"
-#include "content/renderer/media/peer_connection_handler_base.h"
 #include "content/renderer/media/webrtc/media_stream_track_metrics.h"
 #include "third_party/WebKit/public/platform/WebRTCPeerConnectionHandler.h"
 #include "third_party/WebKit/public/platform/WebRTCStatsRequest.h"
@@ -21,7 +24,10 @@
 
 namespace content {
 
+class MediaStreamDependencyFactory;
 class PeerConnectionTracker;
+class RemoteMediaStreamImpl;
+class WebRtcMediaStreamAdapter;
 
 // Mockable wrapper for blink::WebRTCStatsResponse
 class CONTENT_EXPORT LocalRTCStatsResponse
@@ -74,8 +80,8 @@
 // Callbacks to the webrtc::PeerConnectionObserver implementation also occur on
 // the main render thread.
 class CONTENT_EXPORT RTCPeerConnectionHandler
-    : public PeerConnectionHandlerBase,
-      NON_EXPORTED_BASE(public blink::WebRTCPeerConnectionHandler) {
+    : NON_EXPORTED_BASE(public blink::WebRTCPeerConnectionHandler),
+      NON_EXPORTED_BASE(public webrtc::PeerConnectionObserver) {
  public:
   RTCPeerConnectionHandler(
       blink::WebRTCPeerConnectionHandlerClient* client,
@@ -168,6 +174,11 @@
 
   PeerConnectionTracker* peer_connection_tracker();
 
+ protected:
+  webrtc::PeerConnectionInterface* native_peer_connection() {
+    return native_peer_connection_.get();
+  }
+
  private:
   webrtc::SessionDescriptionInterface* CreateNativeSessionDescription(
       const blink::WebRTCSessionDescription& description,
@@ -176,8 +187,14 @@
   // |client_| is a weak pointer, and is valid until stop() has returned.
   blink::WebRTCPeerConnectionHandlerClient* client_;
 
+  // |dependency_factory_| is a raw pointer, and is valid for the lifetime of
+  // RenderThreadImpl.
+  MediaStreamDependencyFactory* dependency_factory_;
+
   blink::WebFrame* frame_;
 
+  ScopedVector<WebRtcMediaStreamAdapter> local_streams_;
+
   PeerConnectionTracker* peer_connection_tracker_;
 
   MediaStreamTrackMetrics track_metrics_;
@@ -185,6 +202,13 @@
   // Counter for a UMA stat reported at destruction time.
   int num_data_channels_created_;
 
+  // |native_peer_connection_| is the libjingle native PeerConnection object.
+  scoped_refptr<webrtc::PeerConnectionInterface> native_peer_connection_;
+
+  typedef std::map<webrtc::MediaStreamInterface*,
+      content::RemoteMediaStreamImpl*> RemoteStreamMap;
+  RemoteStreamMap remote_streams_;
+
   DISALLOW_COPY_AND_ASSIGN(RTCPeerConnectionHandler);
 };
 
diff --git a/content/renderer/media/rtc_peer_connection_handler_unittest.cc b/content/renderer/media/rtc_peer_connection_handler_unittest.cc
index 17cf4e8..1544020 100644
--- a/content/renderer/media/rtc_peer_connection_handler_unittest.cc
+++ b/content/renderer/media/rtc_peer_connection_handler_unittest.cc
@@ -190,7 +190,8 @@
   }
 
   MockPeerConnectionImpl* native_peer_connection() {
-    return static_cast<MockPeerConnectionImpl*>(native_peer_connection_.get());
+    return static_cast<MockPeerConnectionImpl*>(
+        RTCPeerConnectionHandler::native_peer_connection());
   }
 };
 
@@ -231,11 +232,9 @@
                             blink::WebMediaStreamSource::TypeVideo,
                             blink::WebString::fromUTF8("video_track"));
     MockMediaStreamVideoSource* native_video_source =
-        new MockMediaStreamVideoSource(mock_dependency_factory_.get(),
-                                       false);
+        new MockMediaStreamVideoSource(false);
     video_source.setExtraData(native_video_source);
 
-
     blink::WebVector<blink::WebMediaStreamTrack> audio_tracks(
         static_cast<size_t>(1));
     audio_tracks[0].initialize(audio_source.id(), audio_source);
@@ -250,16 +249,13 @@
     constraints.initialize();
     video_tracks[0] = MediaStreamVideoTrack::CreateVideoTrack(
         native_video_source, constraints,
-        MediaStreamVideoSource::ConstraintsCallback(), true,
-        mock_dependency_factory_.get());
+        MediaStreamVideoSource::ConstraintsCallback(), true);
 
     blink::WebMediaStream local_stream;
     local_stream.initialize(base::UTF8ToUTF16(stream_label), audio_tracks,
                             video_tracks);
     local_stream.setExtraData(
-        new MediaStream(mock_dependency_factory_.get(),
-                        MediaStream::StreamStopCallback(),
-                        local_stream));
+        new MediaStream(local_stream));
     return local_stream;
   }
 
@@ -422,6 +418,8 @@
   EXPECT_EQ(1u,
       mock_peer_connection_->local_streams()->at(0)->GetVideoTracks().size());
 
+  EXPECT_FALSE(pc_handler_->addStream(local_stream, constraints));
+
   pc_handler_->removeStream(local_stream);
   EXPECT_EQ(0u, mock_peer_connection_->local_streams()->count());
 }
diff --git a/content/renderer/media/webcontentdecryptionmodule_impl.cc b/content/renderer/media/webcontentdecryptionmodule_impl.cc
index e99859f..38fe7a0 100644
--- a/content/renderer/media/webcontentdecryptionmodule_impl.cc
+++ b/content/renderer/media/webcontentdecryptionmodule_impl.cc
@@ -49,6 +49,12 @@
   if (!IsConcreteSupportedKeySystem(key_system_ascii))
     return NULL;
 
+  // If unique security origin, don't try to create the CDM.
+  if (security_origin.isUnique() || security_origin.toString() == "null") {
+    DLOG(ERROR) << "CDM use not allowed for unique security origin.";
+    return NULL;
+  }
+
   scoped_refptr<CdmSessionAdapter> adapter(new CdmSessionAdapter());
   GURL security_origin_as_gurl(security_origin.toString());
 
diff --git a/content/renderer/media/webcontentdecryptionmodule_impl.h b/content/renderer/media/webcontentdecryptionmodule_impl.h
index ca9c218..63d6de8 100644
--- a/content/renderer/media/webcontentdecryptionmodule_impl.h
+++ b/content/renderer/media/webcontentdecryptionmodule_impl.h
@@ -11,10 +11,9 @@
 #include "base/memory/scoped_ptr.h"
 #include "base/strings/string16.h"
 #include "third_party/WebKit/public/platform/WebContentDecryptionModule.h"
-// TODO(dcheng): Remove and convert back to a forward declare.
-#include "third_party/WebKit/public/web/WebLocalFrame.h"
 
 namespace blink {
+class WebLocalFrame;
 class WebSecurityOrigin;
 }
 
diff --git a/content/renderer/media/webmediaplayer_impl.cc b/content/renderer/media/webmediaplayer_impl.cc
index 919f636..ea68fc7 100644
--- a/content/renderer/media/webmediaplayer_impl.cc
+++ b/content/renderer/media/webmediaplayer_impl.cc
@@ -66,6 +66,7 @@
 #include "third_party/WebKit/public/platform/WebString.h"
 #include "third_party/WebKit/public/platform/WebURL.h"
 #include "third_party/WebKit/public/web/WebDocument.h"
+#include "third_party/WebKit/public/web/WebLocalFrame.h"
 #include "third_party/WebKit/public/web/WebRuntimeFeatures.h"
 #include "third_party/WebKit/public/web/WebSecurityOrigin.h"
 #include "third_party/WebKit/public/web/WebView.h"
@@ -482,6 +483,15 @@
   return GetPipelineDuration();
 }
 
+double WebMediaPlayerImpl::timelineOffset() const {
+  DCHECK(main_loop_->BelongsToCurrentThread());
+
+  if (pipeline_metadata_.timeline_offset.is_null())
+    return std::numeric_limits<double>::quiet_NaN();
+
+  return pipeline_metadata_.timeline_offset.ToJsTime();
+}
+
 double WebMediaPlayerImpl::currentTime() const {
   DCHECK(main_loop_->BelongsToCurrentThread());
   return (paused_ ? paused_time_ : pipeline_.GetMediaTime()).InSecondsF();
@@ -983,11 +993,8 @@
     DCHECK(!video_weblayer_);
     video_weblayer_.reset(new webkit::WebLayerImpl(
         cc::VideoLayer::Create(compositor_.GetVideoFrameProvider())));
-
-    client_->setWebLayer(video_weblayer_.get());
-    // TODO(scherkus): Remove once plumbing from HTMLMediaElement is removed.
-    client_->setOpaque(opaque_);
     video_weblayer_->setOpaque(opaque_);
+    client_->setWebLayer(video_weblayer_.get());
   }
 
   // TODO(scherkus): This should be handled by HTMLMediaElement and controls
@@ -1296,8 +1303,6 @@
   DCHECK_NE(ready_state_, WebMediaPlayer::ReadyStateHaveNothing);
 
   opaque_ = opaque;
-  // TODO(scherkus): Remove once plumbing from HTMLMediaElement is removed.
-  client_->setOpaque(opaque);
   if (video_weblayer_)
     video_weblayer_->setOpaque(opaque_);
 }
diff --git a/content/renderer/media/webmediaplayer_impl.h b/content/renderer/media/webmediaplayer_impl.h
index ed089a2..1c3cb51 100644
--- a/content/renderer/media/webmediaplayer_impl.h
+++ b/content/renderer/media/webmediaplayer_impl.h
@@ -28,14 +28,13 @@
 #include "third_party/WebKit/public/platform/WebGraphicsContext3D.h"
 #include "third_party/WebKit/public/platform/WebMediaPlayer.h"
 #include "third_party/WebKit/public/platform/WebMediaPlayerClient.h"
-// TODO(dcheng): Convert back to forward declare.
-#include "third_party/WebKit/public/web/WebLocalFrame.h"
 #include "url/gurl.h"
 
 class RenderAudioSourceProvider;
 
 namespace blink {
 class WebContentDecryptionModule;
+class WebLocalFrame;
 }
 
 namespace base {
@@ -107,6 +106,7 @@
   virtual bool paused() const;
   virtual bool seeking() const;
   virtual double duration() const;
+  virtual double timelineOffset() const;
   virtual double currentTime() const;
 
   // Internal states of loading and network.
diff --git a/content/renderer/media/webmediaplayer_ms.cc b/content/renderer/media/webmediaplayer_ms.cc
index d4d4d4a..f2a3e70 100644
--- a/content/renderer/media/webmediaplayer_ms.cc
+++ b/content/renderer/media/webmediaplayer_ms.cc
@@ -152,8 +152,6 @@
     RenderFrame::FromWebFrame(frame_)->GetRoutingID());
 
   if (video_frame_provider_.get() || audio_renderer_.get()) {
-    // TODO(scherkus): Remove once plumbing from HTMLMediaElement is removed.
-    GetClient()->setOpaque(true);
     if (audio_renderer_.get())
       audio_renderer_->Start();
 
diff --git a/content/renderer/media/webrtc/media_stream_remote_video_source.cc b/content/renderer/media/webrtc/media_stream_remote_video_source.cc
index 70446e4..39865aa 100644
--- a/content/renderer/media/webrtc/media_stream_remote_video_source.cc
+++ b/content/renderer/media/webrtc/media_stream_remote_video_source.cc
@@ -6,6 +6,7 @@
 
 #include "base/bind.h"
 #include "base/location.h"
+#include "base/message_loop/message_loop_proxy.h"
 #include "content/renderer/media/native_handle_impl.h"
 #include "media/base/video_frame.h"
 #include "media/base/video_util.h"
@@ -15,7 +16,7 @@
 
 MediaStreamRemoteVideoSource::MediaStreamRemoteVideoSource(
     webrtc::VideoTrackInterface* remote_track)
-    : MediaStreamVideoSource(NULL),
+    : MediaStreamVideoSource(),
       message_loop_proxy_(base::MessageLoopProxy::current()),
       remote_track_(remote_track),
       last_state_(remote_track_->state()),
@@ -47,13 +48,10 @@
 
 void MediaStreamRemoteVideoSource::StopSourceImpl() {
   DCHECK(message_loop_proxy_->BelongsToCurrentThread());
-  remote_track_->RemoveRenderer(this);
-  remote_track_->UnregisterObserver(this);
-}
-
-webrtc::VideoSourceInterface* MediaStreamRemoteVideoSource::GetAdapter() {
-  DCHECK(message_loop_proxy_->BelongsToCurrentThread());
-  return remote_track_->GetSource();
+  if (state() != MediaStreamVideoSource::ENDED) {
+    remote_track_->RemoveRenderer(this);
+    remote_track_->UnregisterObserver(this);
+  }
 }
 
 void MediaStreamRemoteVideoSource::SetSize(int width, int height) {
diff --git a/content/renderer/media/webrtc/media_stream_remote_video_source.h b/content/renderer/media/webrtc/media_stream_remote_video_source.h
index 2d5be61..a409271 100644
--- a/content/renderer/media/webrtc/media_stream_remote_video_source.h
+++ b/content/renderer/media/webrtc/media_stream_remote_video_source.h
@@ -39,8 +39,6 @@
 
   virtual void StopSourceImpl() OVERRIDE;
 
-  virtual webrtc::VideoSourceInterface* GetAdapter() OVERRIDE;
-
   // Implements webrtc::VideoRendererInterface used for receiving video frames
   // from the PeerConnection video track. May be called on
   // a different thread.
diff --git a/content/renderer/media/webrtc/media_stream_remote_video_source_unittest.cc b/content/renderer/media/webrtc/media_stream_remote_video_source_unittest.cc
index 068320f..0b6b327 100644
--- a/content/renderer/media/webrtc/media_stream_remote_video_source_unittest.cc
+++ b/content/renderer/media/webrtc/media_stream_remote_video_source_unittest.cc
@@ -75,14 +75,13 @@
    bool enabled = true;
    blink::WebMediaConstraints constraints;
    constraints.initialize();
-   MediaStreamDependencyFactory* factory = NULL;
    return new MediaStreamVideoTrack(
        source(),
        constraints,
        base::Bind(
            &MediaStreamRemoteVideoSourceTest::OnConstraintsApplied,
            base::Unretained(this)),
-       enabled, factory);
+       enabled);
   }
 
   int NumberOfSuccessConstraintsCallbacks() const {
diff --git a/content/renderer/media/webrtc/video_destination_handler.cc b/content/renderer/media/webrtc/video_destination_handler.cc
index 2da6c09..ac16f1e 100644
--- a/content/renderer/media/webrtc/video_destination_handler.cc
+++ b/content/renderer/media/webrtc/video_destination_handler.cc
@@ -11,7 +11,6 @@
 #include "base/rand_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "content/renderer/media/media_stream.h"
-#include "content/renderer/media/media_stream_dependency_factory.h"
 #include "content/renderer/media/media_stream_registry_interface.h"
 #include "content/renderer/media/media_stream_video_track.h"
 #include "content/renderer/pepper/ppb_image_data_impl.h"
@@ -25,8 +24,8 @@
 
 namespace content {
 
-PpFrameWriter::PpFrameWriter(MediaStreamDependencyFactory* factory)
-    : MediaStreamVideoSource(factory), first_frame_received_(false) {
+PpFrameWriter::PpFrameWriter()
+    : MediaStreamVideoSource(), first_frame_received_(false) {
   DVLOG(3) << "PpFrameWriter ctor";
 }
 
@@ -96,8 +95,8 @@
   if (state() != MediaStreamVideoSource::STARTED)
     return;
 
-  const base::TimeDelta timestamp = base::TimeDelta::FromMilliseconds(
-      time_stamp_ns / talk_base::kNumNanosecsPerMillisec);
+  const base::TimeDelta timestamp = base::TimeDelta::FromMicroseconds(
+      time_stamp_ns / base::Time::kNanosecondsPerMicrosecond);
 
   // TODO(perkj): It would be more efficient to use I420 here. Using YV12 will
   // force a copy into a tightly packed I420 frame in
@@ -144,15 +143,10 @@
 };
 
 bool VideoDestinationHandler::Open(
-    MediaStreamDependencyFactory* factory,
     MediaStreamRegistryInterface* registry,
     const std::string& url,
     FrameWriterInterface** frame_writer) {
   DVLOG(3) << "VideoDestinationHandler::Open";
-  if (!factory) {
-    factory = RenderThreadImpl::current()->GetMediaStreamDependencyFactory();
-    DCHECK(factory != NULL);
-  }
   blink::WebMediaStream stream;
   if (registry) {
     stream = registry->GetMediaStream(url);
@@ -173,7 +167,7 @@
   // theoretically it's possible we can get an id that's duplicated with the
   // existing sources.
   base::Base64Encode(base::RandBytesAsString(64), &track_id);
-  PpFrameWriter* writer = new PpFrameWriter(factory);
+  PpFrameWriter* writer = new PpFrameWriter();
 
   // Create a new webkit video track.
   blink::WebMediaStreamSource webkit_source;
@@ -189,7 +183,7 @@
 
   stream.addTrack(MediaStreamVideoTrack::CreateVideoTrack(
       writer, constraints, MediaStreamVideoSource::ConstraintsCallback(),
-      track_enabled, factory));
+      track_enabled));
 
   *frame_writer = new PpFrameWriterProxy(writer->AsWeakPtr());
   return true;
diff --git a/content/renderer/media/webrtc/video_destination_handler.h b/content/renderer/media/webrtc/video_destination_handler.h
index e490002..b13d26d 100644
--- a/content/renderer/media/webrtc/video_destination_handler.h
+++ b/content/renderer/media/webrtc/video_destination_handler.h
@@ -40,7 +40,7 @@
       public FrameWriterInterface,
       NON_EXPORTED_BASE(public base::SupportsWeakPtr<PpFrameWriter>) {
  public:
-  explicit PpFrameWriter(MediaStreamDependencyFactory* factory);
+  PpFrameWriter();
   virtual ~PpFrameWriter();
 
   // FrameWriterInterface implementation.
@@ -71,14 +71,11 @@
   // Instantiates and adds a new video track to the MediaStream specified by
   // |url|. Returns a handler for delivering frames to the new video track as
   // |frame_writer|.
-  // If |factory| is NULL the MediaStreamDependencyFactory owned by
-  // RenderThreadImpl::current() will be used.
   // If |registry| is NULL the global blink::WebMediaStreamRegistry will be
   // used to look up the media stream.
   // The caller of the function takes the ownership of |frame_writer|.
   // Returns true on success and false on failure.
-  static bool Open(MediaStreamDependencyFactory* factory,
-                   MediaStreamRegistryInterface* registry,
+  static bool Open(MediaStreamRegistryInterface* registry,
                    const std::string& url,
                    FrameWriterInterface** frame_writer);
 
diff --git a/content/renderer/media/webrtc/video_destination_handler_unittest.cc b/content/renderer/media/webrtc/video_destination_handler_unittest.cc
index d99f9f2..fb3d863 100644
--- a/content/renderer/media/webrtc/video_destination_handler_unittest.cc
+++ b/content/renderer/media/webrtc/video_destination_handler_unittest.cc
@@ -7,7 +7,6 @@
 #include "base/strings/utf_string_conversions.h"
 #include "content/renderer/media/media_stream.h"
 #include "content/renderer/media/media_stream_video_track.h"
-#include "content/renderer/media/mock_media_stream_dependency_factory.h"
 #include "content/renderer/media/mock_media_stream_registry.h"
 #include "content/renderer/media/mock_media_stream_video_sink.h"
 #include "content/renderer/media/webrtc/video_destination_handler.h"
@@ -30,16 +29,15 @@
   }
 
  protected:
-  MockMediaStreamDependencyFactory factory_;
   MockMediaStreamRegistry registry_;
 };
 
 TEST_F(VideoDestinationHandlerTest, Open) {
   FrameWriterInterface* frame_writer = NULL;
   // Unknow url will return false.
-  EXPECT_FALSE(VideoDestinationHandler::Open(&factory_, &registry_,
+  EXPECT_FALSE(VideoDestinationHandler::Open(&registry_,
                                              kUnknownStreamUrl, &frame_writer));
-  EXPECT_TRUE(VideoDestinationHandler::Open(&factory_, &registry_,
+  EXPECT_TRUE(VideoDestinationHandler::Open(&registry_,
                                             kTestStreamUrl, &frame_writer));
   // The |frame_writer| is a proxy and is owned by who call Open.
   delete frame_writer;
@@ -47,7 +45,7 @@
 
 TEST_F(VideoDestinationHandlerTest, PutFrame) {
   FrameWriterInterface* frame_writer = NULL;
-  EXPECT_TRUE(VideoDestinationHandler::Open(&factory_, &registry_,
+  EXPECT_TRUE(VideoDestinationHandler::Open(&registry_,
                                             kTestStreamUrl, &frame_writer));
   ASSERT_TRUE(frame_writer);
 
diff --git a/content/renderer/media/webrtc/webrtc_local_audio_track_adapter.cc b/content/renderer/media/webrtc/webrtc_local_audio_track_adapter.cc
index b1bde99..95958a8 100644
--- a/content/renderer/media/webrtc/webrtc_local_audio_track_adapter.cc
+++ b/content/renderer/media/webrtc/webrtc_local_audio_track_adapter.cc
@@ -86,6 +86,14 @@
 
 bool WebRtcLocalAudioTrackAdapter::GetSignalLevel(int* level) {
   base::AutoLock auto_lock(lock_);
+  // It is required to provide the signal level after audio processing. In
+  // case the audio processing is not enabled for the track, we return
+  // false here in order not to overwrite the value from WebRTC.
+  // TODO(xians): Remove this after we turn on the APM in Chrome by default.
+  // http://crbug/365672 .
+  if (!MediaStreamAudioProcessor::IsAudioTrackProcessingEnabled())
+    return false;
+
   *level = signal_level_;
   return true;
 }
diff --git a/content/renderer/media/webrtc/webrtc_local_audio_track_adapter_unittest.cc b/content/renderer/media/webrtc/webrtc_local_audio_track_adapter_unittest.cc
index a937d6d..d798b31 100644
--- a/content/renderer/media/webrtc/webrtc_local_audio_track_adapter_unittest.cc
+++ b/content/renderer/media/webrtc/webrtc_local_audio_track_adapter_unittest.cc
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "base/command_line.h"
+#include "content/public/common/content_switches.h"
 #include "content/renderer/media/webrtc/webrtc_local_audio_track_adapter.h"
 #include "content/renderer/media/webrtc_local_audio_track.h"
 #include "testing/gmock/include/gmock/gmock.h"
@@ -36,7 +38,7 @@
         adapter_(WebRtcLocalAudioTrackAdapter::Create(std::string(), NULL)),
         capturer_(WebRtcAudioCapturer::CreateCapturer(
             -1, StreamDeviceInfo(MEDIA_DEVICE_AUDIO_CAPTURE, "", ""),
-            blink::WebMediaConstraints(), NULL)),
+            blink::WebMediaConstraints(), NULL, NULL)),
         track_(new WebRtcLocalAudioTrack(adapter_, capturer_, NULL)) {}
 
  protected:
@@ -79,4 +81,16 @@
   track_->Capture(data.get(), base::TimeDelta(), 255, false, false);
 }
 
+TEST_F(WebRtcLocalAudioTrackAdapterTest, GetSignalLevel) {
+  webrtc::AudioTrackInterface* webrtc_track =
+      static_cast<webrtc::AudioTrackInterface*>(adapter_.get());
+  int signal_level = 0;
+  EXPECT_FALSE(webrtc_track->GetSignalLevel(&signal_level));
+
+  // Enable the audio processing in the audio track.
+  CommandLine::ForCurrentProcess()->AppendSwitch(
+      switches::kEnableAudioTrackProcessing);
+  EXPECT_TRUE(webrtc_track->GetSignalLevel(&signal_level));
+}
+
 }  // namespace content
diff --git a/content/renderer/media/webrtc/webrtc_media_stream_adapter.cc b/content/renderer/media/webrtc/webrtc_media_stream_adapter.cc
new file mode 100644
index 0000000..9a7f8b5
--- /dev/null
+++ b/content/renderer/media/webrtc/webrtc_media_stream_adapter.cc
@@ -0,0 +1,111 @@
+// 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.
+
+#include "content/renderer/media/webrtc/webrtc_media_stream_adapter.h"
+
+#include "base/logging.h"
+#include "content/renderer/media/media_stream_audio_source.h"
+#include "content/renderer/media/media_stream_dependency_factory.h"
+#include "content/renderer/media/media_stream_track.h"
+#include "third_party/WebKit/public/platform/WebMediaStreamSource.h"
+#include "third_party/WebKit/public/platform/WebMediaStreamTrack.h"
+#include "third_party/WebKit/public/platform/WebString.h"
+
+namespace content {
+
+WebRtcMediaStreamAdapter::WebRtcMediaStreamAdapter(
+    const blink::WebMediaStream& web_stream,
+    MediaStreamDependencyFactory* factory)
+    : web_stream_(web_stream),
+      factory_(factory) {
+  webrtc_media_stream_ =
+      factory_->CreateLocalMediaStream(web_stream.id().utf8());
+
+  blink::WebVector<blink::WebMediaStreamTrack> audio_tracks;
+  web_stream_.audioTracks(audio_tracks);
+  for (size_t i = 0; i < audio_tracks.size(); ++i)
+    CreateAudioTrack(audio_tracks[i]);
+
+  blink::WebVector<blink::WebMediaStreamTrack> video_tracks;
+  web_stream_.videoTracks(video_tracks);
+  for (size_t i = 0; i < video_tracks.size(); ++i)
+    CreateVideoTrack(video_tracks[i]);
+
+  MediaStream* native_stream = MediaStream::GetMediaStream(web_stream_);
+  native_stream->AddObserver(this);
+}
+
+WebRtcMediaStreamAdapter::~WebRtcMediaStreamAdapter() {
+  MediaStream* native_stream = MediaStream::GetMediaStream(web_stream_);
+  native_stream->RemoveObserver(this);
+}
+
+void WebRtcMediaStreamAdapter::TrackAdded(
+    const blink::WebMediaStreamTrack& track) {
+  if (track.source().type() == blink::WebMediaStreamSource::TypeAudio) {
+    CreateAudioTrack(track);
+  } else {
+    CreateVideoTrack(track);
+  }
+}
+
+void WebRtcMediaStreamAdapter::TrackRemoved(
+    const blink::WebMediaStreamTrack& track) {
+  const std::string track_id = track.id().utf8();
+  if (track.source().type() == blink::WebMediaStreamSource::TypeAudio) {
+    webrtc_media_stream_->RemoveTrack(
+        webrtc_media_stream_->FindAudioTrack(track_id));
+  } else {
+    DCHECK_EQ(track.source().type(), blink::WebMediaStreamSource::TypeVideo);
+    scoped_refptr<webrtc::VideoTrackInterface> webrtc_track =
+        webrtc_media_stream_->FindVideoTrack(track_id).get();
+    webrtc_media_stream_->RemoveTrack(webrtc_track.get());
+
+    for (ScopedVector<WebRtcVideoTrackAdapter>::iterator it =
+             video_adapters_.begin(); it != video_adapters_.end(); ++it) {
+      if ((*it)->webrtc_video_track() == webrtc_track) {
+        video_adapters_.erase(it);
+        break;
+      }
+    }
+  }
+}
+
+void WebRtcMediaStreamAdapter::CreateAudioTrack(
+    const blink::WebMediaStreamTrack& track) {
+  DCHECK_EQ(track.source().type(), blink::WebMediaStreamSource::TypeAudio);
+  // A media stream is connected to a peer connection, enable the
+  // peer connection mode for the sources.
+  MediaStreamTrack* native_track = MediaStreamTrack::GetTrack(track);
+  if (!native_track || !native_track->is_local_track()) {
+    // We don't support connecting remote audio tracks to PeerConnection yet.
+    // See issue http://crbug/344303.
+    // TODO(xians): Remove this after we support connecting remote audio track
+    // to PeerConnection.
+    DLOG(ERROR) << "webrtc audio track can not be created from a remote audio"
+        << " track.";
+    NOTIMPLEMENTED();
+    return;
+  }
+
+  // This is a local audio track.
+  const blink::WebMediaStreamSource& source = track.source();
+  MediaStreamAudioSource* audio_source =
+      static_cast<MediaStreamAudioSource*>(source.extraData());
+  if (audio_source && audio_source->GetAudioCapturer())
+    audio_source->GetAudioCapturer()->EnablePeerConnectionMode();
+
+  webrtc_media_stream_->AddTrack(native_track->GetAudioAdapter());
+}
+
+void WebRtcMediaStreamAdapter::CreateVideoTrack(
+    const blink::WebMediaStreamTrack& track) {
+  DCHECK_EQ(track.source().type(), blink::WebMediaStreamSource::TypeVideo);
+  WebRtcVideoTrackAdapter* adapter =
+      new WebRtcVideoTrackAdapter(track, factory_);
+  video_adapters_.push_back(adapter);
+  webrtc_media_stream_->AddTrack(adapter->webrtc_video_track());
+}
+
+}  // namespace content
diff --git a/content/renderer/media/webrtc/webrtc_media_stream_adapter.h b/content/renderer/media/webrtc/webrtc_media_stream_adapter.h
new file mode 100644
index 0000000..9c64b44
--- /dev/null
+++ b/content/renderer/media/webrtc/webrtc_media_stream_adapter.h
@@ -0,0 +1,67 @@
+// 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.
+
+#ifndef CONTENT_RENDERER_MEDIA_WEBRTC_WEBRTC_MEDIA_STREAM_ADAPTER_H_
+#define CONTENT_RENDERER_MEDIA_WEBRTC_WEBRTC_MEDIA_STREAM_ADAPTER_H_
+
+#include "base/macros.h"
+#include "base/memory/ref_counted.h"
+#include "base/memory/scoped_vector.h"
+#include "content/common/content_export.h"
+#include "content/renderer/media/media_stream.h"
+#include "content/renderer/media/webrtc/webrtc_video_track_adapter.h"
+#include "third_party/WebKit/public/platform/WebMediaStream.h"
+#include "third_party/libjingle/source/talk/app/webrtc/mediastreaminterface.h"
+
+namespace content {
+
+class MediaStreamDependencyFactory;
+
+// WebRtcMediaStreamAdapter is an adapter between a blink::WebMediaStream
+// object and a webrtc MediaStreams that is currently sent on a PeerConnection.
+// The responsibility of the class is to create and own a representation of a
+// webrtc MediaStream that can be added and removed from a RTCPeerConnection.
+// An instance of WebRtcMediaStreamAdapter is created when a MediaStream is
+// added to an RTCPeerConnection object
+// Instances of this class is owned by the RTCPeerConnectionHandler object that
+// created it.
+class CONTENT_EXPORT WebRtcMediaStreamAdapter
+    : NON_EXPORTED_BASE(public MediaStreamObserver) {
+ public:
+  WebRtcMediaStreamAdapter(const blink::WebMediaStream& web_stream,
+                           MediaStreamDependencyFactory* factory);
+  virtual ~WebRtcMediaStreamAdapter();
+
+  bool IsEqual(const blink::WebMediaStream& web_stream) {
+    return web_stream_.extraData() == web_stream.extraData();
+  }
+
+  webrtc::MediaStreamInterface* webrtc_media_stream() {
+    return webrtc_media_stream_.get();
+  }
+
+ protected:
+  // MediaStreamObserver implementation.
+  virtual void TrackAdded(const blink::WebMediaStreamTrack& track) OVERRIDE;
+  virtual void TrackRemoved(const blink::WebMediaStreamTrack& track) OVERRIDE;
+
+ private:
+  void CreateAudioTrack(const blink::WebMediaStreamTrack& track);
+  void CreateVideoTrack(const blink::WebMediaStreamTrack& track);
+
+  blink::WebMediaStream web_stream_;
+
+  // Pointer to a MediaStreamDependencyFactory, owned by the RenderThread.
+  // It's valid for the lifetime of RenderThread.
+  MediaStreamDependencyFactory* factory_;
+
+  scoped_refptr<webrtc::MediaStreamInterface> webrtc_media_stream_;
+  ScopedVector<WebRtcVideoTrackAdapter> video_adapters_;
+
+  DISALLOW_COPY_AND_ASSIGN (WebRtcMediaStreamAdapter);
+};
+
+}  // namespace content
+
+#endif  // CONTENT_RENDERER_MEDIA_WEBRTC_WEBRTC_MEDIA_STREAM_ADAPTER_H_
diff --git a/content/renderer/media/webrtc/webrtc_media_stream_adapter_unittest.cc b/content/renderer/media/webrtc/webrtc_media_stream_adapter_unittest.cc
new file mode 100644
index 0000000..8cbceff
--- /dev/null
+++ b/content/renderer/media/webrtc/webrtc_media_stream_adapter_unittest.cc
@@ -0,0 +1,150 @@
+// 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.
+
+#include "base/memory/scoped_ptr.h"
+#include "content/renderer/media/media_stream.h"
+#include "content/renderer/media/media_stream_audio_source.h"
+#include "content/renderer/media/media_stream_video_source.h"
+#include "content/renderer/media/media_stream_video_track.h"
+#include "content/renderer/media/mock_media_stream_dependency_factory.h"
+#include "content/renderer/media/mock_media_stream_video_source.h"
+#include "content/renderer/media/webrtc/webrtc_local_audio_track_adapter.h"
+#include "content/renderer/media/webrtc/webrtc_media_stream_adapter.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/WebKit/public/platform/WebMediaStream.h"
+#include "third_party/WebKit/public/platform/WebMediaStreamSource.h"
+#include "third_party/WebKit/public/platform/WebMediaStreamTrack.h"
+#include "third_party/WebKit/public/platform/WebVector.h"
+
+namespace content {
+
+class WebRtcMediaStreamAdapterTest : public ::testing::Test {
+ public:
+  virtual void SetUp() {
+    dependency_factory_.reset(new MockMediaStreamDependencyFactory());
+  }
+
+  blink::WebMediaStream CreateBlinkMediaStream(bool audio, bool video) {
+    blink::WebVector<blink::WebMediaStreamTrack> audio_track_vector(
+        audio ? static_cast<size_t>(1) : 0);
+    if (audio) {
+      blink::WebMediaStreamSource audio_source;
+      audio_source.initialize("audio",
+                              blink::WebMediaStreamSource::TypeAudio,
+                              "audio");
+      audio_source.setExtraData(new MediaStreamAudioSource());
+
+      audio_track_vector[0].initialize(audio_source);
+      MediaStreamTrack* native_track =
+          new MediaStreamTrack(
+              WebRtcLocalAudioTrackAdapter::Create(
+                  audio_track_vector[0].id().utf8(), NULL),
+                  true);
+      audio_track_vector[0].setExtraData(native_track);
+    }
+
+    blink::WebVector<blink::WebMediaStreamTrack> video_track_vector(
+        video ? static_cast<size_t>(1) : 0);
+    MediaStreamSource::SourceStoppedCallback dummy_callback;
+    if (video) {
+      blink::WebMediaStreamSource video_source;
+      video_source.initialize("video",
+                              blink::WebMediaStreamSource::TypeVideo,
+                              "video");
+      MediaStreamVideoSource* native_source =
+          new MockMediaStreamVideoSource(false);
+      video_source.setExtraData(native_source);
+      blink::WebMediaConstraints constraints;
+      constraints.initialize();
+      video_track_vector[0] = MediaStreamVideoTrack::CreateVideoTrack(
+          native_source, constraints,
+          MediaStreamVideoSource::ConstraintsCallback(), true);
+    }
+
+    blink::WebMediaStream stream_desc;
+    stream_desc.initialize("media stream",
+                           audio_track_vector,
+                           video_track_vector);
+    stream_desc.setExtraData(new MediaStream(stream_desc));
+    return stream_desc;
+  }
+
+  void CreateWebRtcMediaStream(const blink::WebMediaStream& blink_stream,
+                               size_t expected_number_of_audio_tracks,
+                               size_t expected_number_of_video_tracks) {
+    adapter_.reset(new WebRtcMediaStreamAdapter(
+        blink_stream, dependency_factory_.get()));
+
+    EXPECT_EQ(expected_number_of_audio_tracks,
+              adapter_->webrtc_media_stream()->GetAudioTracks().size());
+    EXPECT_EQ(expected_number_of_video_tracks,
+              adapter_->webrtc_media_stream()->GetVideoTracks().size());
+    EXPECT_EQ(blink_stream.id().utf8(),
+              adapter_->webrtc_media_stream()->label());
+  }
+
+  webrtc::MediaStreamInterface* webrtc_stream() {
+    return adapter_->webrtc_media_stream();
+  }
+
+ protected:
+  scoped_ptr<MockMediaStreamDependencyFactory> dependency_factory_;
+  scoped_ptr<WebRtcMediaStreamAdapter> adapter_;
+};
+
+TEST_F(WebRtcMediaStreamAdapterTest, CreateWebRtcMediaStream) {
+  blink::WebMediaStream blink_stream = CreateBlinkMediaStream(true, true);
+  CreateWebRtcMediaStream(blink_stream, 1, 1);
+}
+
+// Test that we don't crash if a MediaStream is created in Blink with an unknown
+// audio sources. This can happen if a MediaStream is created with
+// remote audio track.
+TEST_F(WebRtcMediaStreamAdapterTest,
+       CreateWebRtcMediaStreamWithoutAudioSource) {
+  // Create a blink MediaStream description.
+  blink::WebMediaStreamSource audio_source;
+  audio_source.initialize("audio source",
+                          blink::WebMediaStreamSource::TypeAudio,
+                          "something");
+
+  blink::WebVector<blink::WebMediaStreamTrack> audio_tracks(
+      static_cast<size_t>(1));
+  audio_tracks[0].initialize(audio_source.id(), audio_source);
+  blink::WebVector<blink::WebMediaStreamTrack> video_tracks(
+      static_cast<size_t>(0));
+
+  blink::WebMediaStream blink_stream;
+  blink_stream.initialize("new stream", audio_tracks, video_tracks);
+  blink_stream.setExtraData(
+      new content::MediaStream(blink_stream));
+  CreateWebRtcMediaStream(blink_stream, 0, 0);
+}
+
+TEST_F(WebRtcMediaStreamAdapterTest, RemoveAndAddTrack) {
+  blink::WebMediaStream blink_stream = CreateBlinkMediaStream(true, true);
+  CreateWebRtcMediaStream(blink_stream, 1, 1);
+
+  MediaStream* native_stream = MediaStream::GetMediaStream(blink_stream);
+
+  blink::WebVector<blink::WebMediaStreamTrack> audio_tracks;
+  blink_stream.audioTracks(audio_tracks);
+
+  native_stream->RemoveTrack(audio_tracks[0]);
+  EXPECT_TRUE(webrtc_stream()->GetAudioTracks().empty());
+
+  blink::WebVector<blink::WebMediaStreamTrack> video_tracks;
+  blink_stream.videoTracks(video_tracks);
+
+  native_stream->RemoveTrack(video_tracks[0]);
+  EXPECT_TRUE(webrtc_stream()->GetVideoTracks().empty());
+
+  native_stream->AddTrack(audio_tracks[0]);
+  EXPECT_EQ(1u, webrtc_stream()->GetAudioTracks().size());
+
+  native_stream->AddTrack(video_tracks[0]);
+  EXPECT_EQ(1u, webrtc_stream()->GetVideoTracks().size());
+}
+
+}  // namespace content
diff --git a/content/renderer/media/webrtc/webrtc_video_track_adapter.cc b/content/renderer/media/webrtc/webrtc_video_track_adapter.cc
new file mode 100644
index 0000000..023aba1
--- /dev/null
+++ b/content/renderer/media/webrtc/webrtc_video_track_adapter.cc
@@ -0,0 +1,68 @@
+// 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.
+
+#include "content/renderer/media/webrtc/webrtc_video_track_adapter.h"
+
+#include "base/strings/utf_string_conversions.h"
+#include "content/common/media/media_stream_options.h"
+#include "content/renderer/media/media_stream_video_source.h"
+#include "content/renderer/media/media_stream_video_track.h"
+
+namespace {
+
+bool ConstraintKeyExists(const blink::WebMediaConstraints& constraints,
+                         const blink::WebString& name) {
+  blink::WebString value_str;
+  return constraints.getMandatoryConstraintValue(name, value_str) ||
+      constraints.getOptionalConstraintValue(name, value_str);
+}
+
+}  // anonymouse namespace
+
+namespace content {
+
+WebRtcVideoTrackAdapter::WebRtcVideoTrackAdapter(
+    const blink::WebMediaStreamTrack& track,
+    MediaStreamDependencyFactory* factory)
+    : web_track_(track) {
+  MediaStreamVideoSink::AddToVideoTrack(this, web_track_);
+
+  const blink::WebMediaConstraints& constraints =
+      MediaStreamVideoTrack::GetVideoTrack(track)->constraints();
+
+  bool is_screencast = ConstraintKeyExists(
+      constraints, base::UTF8ToUTF16(kMediaStreamSource));
+  capture_adapter_ = factory->CreateVideoCapturer(is_screencast);
+
+  // |video_source| owns |capture_adapter|
+  video_source_ = factory->CreateVideoSource(capture_adapter_,
+                                             track.source().constraints());
+
+  video_track_ = factory->CreateLocalVideoTrack(web_track_.id().utf8(),
+                                                video_source_);
+  video_track_->set_enabled(web_track_.isEnabled());
+
+  DVLOG(3) << "WebRtcVideoTrackAdapter ctor() : is_screencast "
+           << is_screencast;
+}
+
+WebRtcVideoTrackAdapter::~WebRtcVideoTrackAdapter() {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  DVLOG(3) << "WebRtcVideoTrackAdapter dtor().";
+  MediaStreamVideoSink::RemoveFromVideoTrack(this, web_track_);
+}
+
+void WebRtcVideoTrackAdapter::OnEnabledChanged(bool enabled) {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  video_track_->set_enabled(enabled);
+}
+
+void WebRtcVideoTrackAdapter::OnVideoFrame(
+    const scoped_refptr<media::VideoFrame>& frame) {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  capture_adapter_->OnFrameCaptured(frame);
+}
+
+}  // namespace content
+
diff --git a/content/renderer/media/webrtc/webrtc_video_track_adapter.h b/content/renderer/media/webrtc/webrtc_video_track_adapter.h
new file mode 100644
index 0000000..b2cff0a
--- /dev/null
+++ b/content/renderer/media/webrtc/webrtc_video_track_adapter.h
@@ -0,0 +1,61 @@
+// 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.
+
+#ifndef CONTENT_RENDERER_MEDIA_WEBRTC_WEBRTC_VIDEO_TRACK_ADAPTER_H_
+#define CONTENT_RENDERER_MEDIA_WEBRTC_WEBRTC_VIDEO_TRACK_ADAPTER_H_
+
+#include "base/macros.h"
+#include "base/threading/thread_checker.h"
+#include "content/public/renderer/media_stream_video_sink.h"
+#include "content/renderer/media/media_stream_dependency_factory.h"
+#include "content/renderer/media/webrtc/webrtc_video_capturer_adapter.h"
+#include "third_party/WebKit/public/platform/WebMediaStreamTrack.h"
+#include "third_party/libjingle/source/talk/app/webrtc/mediastreaminterface.h"
+#include "third_party/libjingle/source/talk/app/webrtc/videosourceinterface.h"
+
+namespace content {
+
+// WebRtcVideoTrackAdapter is an adapter between a
+// content::MediaStreamVideoTrack object and a webrtc VideoTrack that is
+// currently sent on a PeerConnection.
+// The responsibility of the class is to create and own a representation of a
+// webrtc VideoTrack that can be added and removed from a RTCPeerConnection.
+// An instance of WebRtcVideoTrackAdapter is created when a VideoTrack is
+// added to an RTCPeerConnection object.
+// Instances of this class is owned by the WebRtcMediaStreamAdapter object that
+// created it.
+class WebRtcVideoTrackAdapter : public MediaStreamVideoSink {
+ public:
+  WebRtcVideoTrackAdapter(const blink::WebMediaStreamTrack& track,
+                          MediaStreamDependencyFactory* factory);
+  virtual ~WebRtcVideoTrackAdapter();
+
+  webrtc::VideoTrackInterface* webrtc_video_track() {
+    return video_track_.get();
+  }
+
+ protected:
+  // Implements MediaStreamVideoSink
+  virtual void OnVideoFrame(
+      const scoped_refptr<media::VideoFrame>& frame) OVERRIDE;
+  virtual void OnEnabledChanged(bool enabled) OVERRIDE;
+
+ private:
+  // Used to DCHECK that we are called on the correct thread.
+  base::ThreadChecker thread_checker_;
+
+  scoped_refptr<webrtc::VideoSourceInterface> video_source_;
+  scoped_refptr<webrtc::VideoTrackInterface> video_track_;
+
+  blink::WebMediaStreamTrack web_track_;
+
+  // |capture_adapter_| is owned by |video_source_|
+  WebRtcVideoCapturerAdapter* capture_adapter_;
+
+  DISALLOW_COPY_AND_ASSIGN (WebRtcVideoTrackAdapter);
+};
+
+}  // namespace content
+
+#endif  // CONTENT_RENDERER_MEDIA_WEBRTC_WEBRTC_VIDEO_TRACK_ADAPTER_H_
diff --git a/content/renderer/media/webrtc_audio_capturer.cc b/content/renderer/media/webrtc_audio_capturer.cc
index 67882a1..5ad35a2 100644
--- a/content/renderer/media/webrtc_audio_capturer.cc
+++ b/content/renderer/media/webrtc_audio_capturer.cc
@@ -13,6 +13,7 @@
 #include "content/renderer/media/audio_device_factory.h"
 #include "content/renderer/media/media_stream_audio_processor.h"
 #include "content/renderer/media/media_stream_audio_processor_options.h"
+#include "content/renderer/media/media_stream_audio_source.h"
 #include "content/renderer/media/webrtc_audio_device_impl.h"
 #include "content/renderer/media/webrtc_local_audio_track.h"
 #include "content/renderer/media/webrtc_logging.h"
@@ -131,9 +132,10 @@
 scoped_refptr<WebRtcAudioCapturer> WebRtcAudioCapturer::CreateCapturer(
     int render_view_id, const StreamDeviceInfo& device_info,
     const blink::WebMediaConstraints& constraints,
-    WebRtcAudioDeviceImpl* audio_device) {
+    WebRtcAudioDeviceImpl* audio_device,
+    MediaStreamAudioSource* audio_source) {
   scoped_refptr<WebRtcAudioCapturer> capturer = new WebRtcAudioCapturer(
-      render_view_id, device_info, constraints, audio_device);
+      render_view_id, device_info, constraints, audio_device, audio_source);
   if (capturer->Initialize())
     return capturer;
 
@@ -216,7 +218,8 @@
     int render_view_id,
     const StreamDeviceInfo& device_info,
     const blink::WebMediaConstraints& constraints,
-    WebRtcAudioDeviceImpl* audio_device)
+    WebRtcAudioDeviceImpl* audio_device,
+    MediaStreamAudioSource* audio_source)
     : constraints_(constraints),
       audio_processor_(
           new talk_base::RefCountedObject<MediaStreamAudioProcessor>(
@@ -230,6 +233,7 @@
       key_pressed_(false),
       need_audio_processing_(false),
       audio_device_(audio_device),
+      audio_source_(audio_source),
       audio_power_monitor_(
           device_info_.device.input.sample_rate,
           base::TimeDelta::FromMilliseconds(kPowerMonitorTimeConstantMs)) {
@@ -239,8 +243,8 @@
 WebRtcAudioCapturer::~WebRtcAudioCapturer() {
   DCHECK(thread_checker_.CalledOnValidThread());
   DCHECK(tracks_.IsEmpty());
-  DCHECK(!running_);
   DVLOG(1) << "WebRtcAudioCapturer::~WebRtcAudioCapturer()";
+  Stop();
 }
 
 void WebRtcAudioCapturer::AddTrack(WebRtcLocalAudioTrack* track) {
@@ -257,25 +261,34 @@
     scoped_refptr<TrackOwner> track_owner(new TrackOwner(track));
     tracks_.AddAndTag(track_owner);
   }
-
-  // Start the source if the first audio track is connected to the capturer.
-  // Start() will do nothing if the capturer has already been started.
-  Start();
-
 }
 
 void WebRtcAudioCapturer::RemoveTrack(WebRtcLocalAudioTrack* track) {
   DCHECK(thread_checker_.CalledOnValidThread());
-  base::AutoLock auto_lock(lock_);
+  DVLOG(1) << "WebRtcAudioCapturer::RemoveTrack()";
+  bool stop_source = false;
+  {
+    base::AutoLock auto_lock(lock_);
 
-  scoped_refptr<TrackOwner> removed_item =
-      tracks_.Remove(TrackOwner::TrackWrapper(track));
+    scoped_refptr<TrackOwner> removed_item =
+        tracks_.Remove(TrackOwner::TrackWrapper(track));
 
-  // Clear the delegate to ensure that no more capture callbacks will
-  // be sent to this sink. Also avoids a possible crash which can happen
-  // if this method is called while capturing is active.
-  if (removed_item.get())
-    removed_item->Reset();
+    // Clear the delegate to ensure that no more capture callbacks will
+    // be sent to this sink. Also avoids a possible crash which can happen
+    // if this method is called while capturing is active.
+    if (removed_item.get()) {
+      removed_item->Reset();
+      stop_source = tracks_.IsEmpty();
+    }
+  }
+  if (stop_source) {
+    // Since WebRtcAudioCapturer does not inherit MediaStreamAudioSource,
+    // and instead MediaStreamAudioSource is composed of a WebRtcAudioCapturer,
+    // we have to call StopSource on the MediaStreamSource. This will call
+    // MediaStreamAudioSource::DoStopSource which in turn call
+    // WebRtcAudioCapturerer::Stop();
+    audio_source_->StopSource();
+  }
 }
 
 void WebRtcAudioCapturer::SetCapturerSource(
@@ -286,7 +299,6 @@
   DVLOG(1) << "SetCapturerSource(channel_layout=" << channel_layout << ","
            << "sample_rate=" << sample_rate << ")";
   scoped_refptr<media::AudioCapturerSource> old_source;
-  bool restart_source = false;
   {
     base::AutoLock auto_lock(lock_);
     if (source_.get() == source.get())
@@ -296,7 +308,6 @@
     source_ = source;
 
     // Reset the flag to allow starting the new source.
-    restart_source = running_;
     running_ = false;
   }
 
@@ -329,8 +340,7 @@
   if (source.get())
     source->Initialize(params, this, session_id());
 
-  if (restart_source)
-    Start();
+  Start();
 }
 
 void WebRtcAudioCapturer::EnablePeerConnectionMode() {
@@ -475,7 +485,7 @@
     // Note that, we turn off the audio processing in PeerConnection if the
     // processor has already processed the data.
     need_audio_processing = need_audio_processing_ ?
-        !audio_processor_->IsAudioTrackProcessingEnabled() : false;
+        !MediaStreamAudioProcessor::IsAudioTrackProcessingEnabled() : false;
   }
 
   DCHECK(audio_processor_->InputFormat().IsValid());
@@ -599,11 +609,10 @@
                     static_cast<float>(params.sample_rate()));
 }
 
-void WebRtcAudioCapturer::StartAecDump(
-    const base::PlatformFile& aec_dump_file) {
+void WebRtcAudioCapturer::StartAecDump(base::File aec_dump_file) {
   DCHECK(thread_checker_.CalledOnValidThread());
-  DCHECK_NE(aec_dump_file, base::kInvalidPlatformFileValue);
-  audio_processor_->StartAecDump(aec_dump_file);
+  DCHECK(aec_dump_file.IsValid());
+  audio_processor_->StartAecDump(aec_dump_file.Pass());
 }
 
 void WebRtcAudioCapturer::StopAecDump() {
diff --git a/content/renderer/media/webrtc_audio_capturer.h b/content/renderer/media/webrtc_audio_capturer.h
index 63c846f..f433a1a 100644
--- a/content/renderer/media/webrtc_audio_capturer.h
+++ b/content/renderer/media/webrtc_audio_capturer.h
@@ -9,8 +9,8 @@
 #include <string>
 
 #include "base/callback.h"
+#include "base/files/file.h"
 #include "base/memory/ref_counted.h"
-#include "base/platform_file.h"
 #include "base/synchronization/lock.h"
 #include "base/threading/thread_checker.h"
 #include "base/time/time.h"
@@ -28,6 +28,7 @@
 namespace content {
 
 class MediaStreamAudioProcessor;
+class MediaStreamAudioSource;
 class WebRtcAudioDeviceImpl;
 class WebRtcLocalAudioRenderer;
 class WebRtcLocalAudioTrack;
@@ -57,7 +58,8 @@
       int render_view_id,
       const StreamDeviceInfo& device_info,
       const blink::WebMediaConstraints& constraints,
-      WebRtcAudioDeviceImpl* audio_device);
+      WebRtcAudioDeviceImpl* audio_device,
+      MediaStreamAudioSource* audio_source);
 
 
   // Add a audio track to the sinks of the capturer.
@@ -100,8 +102,8 @@
 
   // Stops recording audio. This method will empty its track lists since
   // stopping the capturer will implicitly invalidate all its tracks.
-  // This method is exposed to the public because the media stream track can
-  // call Stop() on its source.
+  // This method is exposed to the public because the MediaStreamAudioSource can
+  // call Stop()
   void Stop();
 
   // Called by the WebAudioCapturerSource to get the audio processing params.
@@ -115,7 +117,7 @@
       const scoped_refptr<media::AudioCapturerSource>& source,
       media::AudioParameters params);
 
-  void StartAecDump(const base::PlatformFile& aec_dump_file);
+  void StartAecDump(base::File aec_dump_file);
   void StopAecDump();
 
  protected:
@@ -129,7 +131,8 @@
   WebRtcAudioCapturer(int render_view_id,
                       const StreamDeviceInfo& device_info,
                       const blink::WebMediaConstraints& constraints,
-                      WebRtcAudioDeviceImpl* audio_device);
+                      WebRtcAudioDeviceImpl* audio_device,
+                      MediaStreamAudioSource* audio_source);
 
   // AudioCapturerSource::CaptureCallback implementation.
   // Called on the AudioInputDevice audio thread.
@@ -208,7 +211,16 @@
   // of RenderThread.
   WebRtcAudioDeviceImpl* audio_device_;
 
-  // Audio power monitor for logging audio power level.
+  // Raw pointer to the MediaStreamAudioSource object that holds a reference
+  // to this WebRtcAudioCapturer.
+  // Since |audio_source_| is owned by a blink::WebMediaStreamSource object and
+  // blink guarantees that the blink::WebMediaStreamSource outlives any
+  // blink::WebMediaStreamTrack connected to the source, |audio_source_| is
+  // guaranteed to exist as long as a WebRtcLocalAudioTrack is connected to this
+  // WebRtcAudioCapturer.
+  MediaStreamAudioSource* const audio_source_;
+
+    // Audio power monitor for logging audio power level.
   media::AudioPowerMonitor audio_power_monitor_;
 
   // Records when the last time audio power level is logged.
diff --git a/content/renderer/media/webrtc_audio_capturer_unittest.cc b/content/renderer/media/webrtc_audio_capturer_unittest.cc
index d0bcf29..8b67aea 100644
--- a/content/renderer/media/webrtc_audio_capturer_unittest.cc
+++ b/content/renderer/media/webrtc_audio_capturer_unittest.cc
@@ -96,13 +96,13 @@
                              "", "", params_.sample_rate(),
                              params_.channel_layout(),
                              params_.frames_per_buffer()),
-        constraints, NULL);
+        constraints, NULL, NULL);
     capturer_source_ = new MockCapturerSource();
     EXPECT_CALL(*capturer_source_.get(), Initialize(_, capturer_.get(), -1));
-    capturer_->SetCapturerSourceForTesting(capturer_source_, params_);
-
     EXPECT_CALL(*capturer_source_.get(), SetAutomaticGainControl(true));
     EXPECT_CALL(*capturer_source_.get(), Start());
+    capturer_->SetCapturerSourceForTesting(capturer_source_, params_);
+
     scoped_refptr<WebRtcLocalAudioTrackAdapter> adapter(
         WebRtcLocalAudioTrackAdapter::Create(std::string(), NULL));
     track_.reset(new WebRtcLocalAudioTrack(adapter, capturer_, NULL));
diff --git a/content/renderer/media/webrtc_audio_device_impl.cc b/content/renderer/media/webrtc_audio_device_impl.cc
index e1aea4d..97d5d09 100644
--- a/content/renderer/media/webrtc_audio_device_impl.cc
+++ b/content/renderer/media/webrtc_audio_device_impl.cc
@@ -6,7 +6,6 @@
 
 #include "base/bind.h"
 #include "base/metrics/histogram.h"
-#include "base/platform_file.h"
 #include "base/strings/string_util.h"
 #include "base/win/windows_version.h"
 #include "content/renderer/media/webrtc_audio_capturer.h"
@@ -28,8 +27,7 @@
       initialized_(false),
       playing_(false),
       recording_(false),
-      microphone_volume_(0),
-      aec_dump_file_(base::kInvalidPlatformFileValue) {
+      microphone_volume_(0) {
   DVLOG(1) << "WebRtcAudioDeviceImpl::WebRtcAudioDeviceImpl()";
 }
 
@@ -444,7 +442,7 @@
 
   // Start the Aec dump if the Aec dump has been enabled and has not been
   // started.
-  if (aec_dump_file_ != base::kInvalidPlatformFileValue)
+  if (aec_dump_file_.IsValid())
     MaybeStartAecDump();
 }
 
@@ -497,12 +495,11 @@
       session_id, output_sample_rate, output_frames_per_buffer);
 }
 
-void WebRtcAudioDeviceImpl::EnableAecDump(
-    const base::PlatformFile& aec_dump_file) {
+void WebRtcAudioDeviceImpl::EnableAecDump(base::File aec_dump_file) {
   DCHECK(thread_checker_.CalledOnValidThread());
-  DCHECK_NE(aec_dump_file, base::kInvalidPlatformFileValue);
-  DCHECK_EQ(aec_dump_file_, base::kInvalidPlatformFileValue);
-  aec_dump_file_ = aec_dump_file;
+  DCHECK(aec_dump_file.IsValid());
+  DCHECK(!aec_dump_file_.IsValid());
+  aec_dump_file_ = aec_dump_file.Pass();
   MaybeStartAecDump();
 }
 
@@ -510,9 +507,8 @@
   DCHECK(thread_checker_.CalledOnValidThread());
   // Simply invalidate the |aec_dump_file_| if we have not pass the ownership
   // to WebRtc.
-  if (aec_dump_file_ != base::kInvalidPlatformFileValue) {
-    base::ClosePlatformFile(aec_dump_file_);
-    aec_dump_file_ = base::kInvalidPlatformFileValue;
+  if (aec_dump_file_.IsValid()) {
+    aec_dump_file_.Close();
     return;
   }
 
@@ -526,18 +522,14 @@
 
 void WebRtcAudioDeviceImpl::MaybeStartAecDump() {
   DCHECK(thread_checker_.CalledOnValidThread());
-  DCHECK_NE(aec_dump_file_, base::kInvalidPlatformFileValue);
+  DCHECK(aec_dump_file_.IsValid());
 
   // Start the Aec dump on the current default capturer.
   scoped_refptr<WebRtcAudioCapturer> default_capturer(GetDefaultCapturer());
   if (!default_capturer)
     return;
 
-  default_capturer->StartAecDump(aec_dump_file_);
-
-  // Invalidate the |aec_dump_file_| since the ownership of the file has been
-  // passed to WebRtc.
-  aec_dump_file_ = base::kInvalidPlatformFileValue;
+  default_capturer->StartAecDump(aec_dump_file_.Pass());
 }
 
 }  // namespace content
diff --git a/content/renderer/media/webrtc_audio_device_impl.h b/content/renderer/media/webrtc_audio_device_impl.h
index 5691aed..4cf36d4 100644
--- a/content/renderer/media/webrtc_audio_device_impl.h
+++ b/content/renderer/media/webrtc_audio_device_impl.h
@@ -10,6 +10,7 @@
 
 #include "base/basictypes.h"
 #include "base/compiler_specific.h"
+#include "base/files/file.h"
 #include "base/logging.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_ptr.h"
@@ -354,7 +355,7 @@
   // Enables the Aec dump.  If the default capturer exists, it will call
   // StartAecDump() on the capturer and pass the ownership of the file to
   // WebRtc. Otherwise it will hold the file until a capturer is added.
-  void EnableAecDump(const base::PlatformFile& aec_dump_file);
+  void EnableAecDump(base::File aec_dump_file);
 
   // Disables the Aec dump.  When this method is called, the ongoing Aec dump
   // on WebRtc will be stopped.
@@ -450,7 +451,7 @@
   std::vector<int16> render_buffer_;
 
   // Used for start the Aec dump on the default capturer.
-  base::PlatformFile aec_dump_file_;
+  base::File aec_dump_file_;
 
   DISALLOW_COPY_AND_ASSIGN(WebRtcAudioDeviceImpl);
 };
diff --git a/content/renderer/media/webrtc_local_audio_source_provider_unittest.cc b/content/renderer/media/webrtc_local_audio_source_provider_unittest.cc
index 8b0fd6b..4a85903 100644
--- a/content/renderer/media/webrtc_local_audio_source_provider_unittest.cc
+++ b/content/renderer/media/webrtc_local_audio_source_provider_unittest.cc
@@ -32,7 +32,7 @@
     blink::WebMediaConstraints constraints;
     scoped_refptr<WebRtcAudioCapturer> capturer(
         WebRtcAudioCapturer::CreateCapturer(-1, StreamDeviceInfo(),
-                                            constraints, NULL));
+                                            constraints, NULL, NULL));
     scoped_refptr<WebRtcLocalAudioTrackAdapter> adapter(
         WebRtcLocalAudioTrackAdapter::Create(std::string(), NULL));
     scoped_ptr<WebRtcLocalAudioTrack> native_track(
diff --git a/content/renderer/media/webrtc_local_audio_track.h b/content/renderer/media/webrtc_local_audio_track.h
index c6ba35c..c2cb81b 100644
--- a/content/renderer/media/webrtc_local_audio_track.h
+++ b/content/renderer/media/webrtc_local_audio_track.h
@@ -62,7 +62,7 @@
 
   // Stops the local audio track. Called on the main render thread and
   // should be called only once when audio track going away.
-  void Stop();
+  virtual void Stop() OVERRIDE;
 
   // Method called by the capturer to deliver the capture data.
   // Called on the capture audio thread.
diff --git a/content/renderer/media/webrtc_local_audio_track_unittest.cc b/content/renderer/media/webrtc_local_audio_track_unittest.cc
index a30786b..9bc9ff4 100644
--- a/content/renderer/media/webrtc_local_audio_track_unittest.cc
+++ b/content/renderer/media/webrtc_local_audio_track_unittest.cc
@@ -4,6 +4,7 @@
 
 #include "base/synchronization/waitable_event.h"
 #include "base/test/test_timeouts.h"
+#include "content/renderer/media/media_stream_audio_source.h"
 #include "content/renderer/media/mock_media_constraint_factory.h"
 #include "content/renderer/media/webrtc/webrtc_local_audio_track_adapter.h"
 #include "content/renderer/media/webrtc_audio_capturer.h"
@@ -34,12 +35,12 @@
 // the |WebRtcAudioCapturer|.
 class FakeAudioThread : public base::PlatformThread::Delegate {
  public:
-  FakeAudioThread(const scoped_refptr<WebRtcAudioCapturer>& capturer,
+  FakeAudioThread(WebRtcAudioCapturer* capturer,
                   const media::AudioParameters& params)
     : capturer_(capturer),
       thread_(),
       closure_(false, false) {
-    DCHECK(capturer.get());
+    DCHECK(capturer);
     audio_bus_ = media::AudioBus::Create(params);
   }
 
@@ -53,7 +54,7 @@
 
       media::AudioCapturerSource::CaptureCallback* callback =
           static_cast<media::AudioCapturerSource::CaptureCallback*>(
-              capturer_.get());
+              capturer_);
       audio_bus_->Zero();
       callback->Capture(audio_bus_.get(), 0, 0, false);
 
@@ -76,7 +77,7 @@
 
  private:
   scoped_ptr<media::AudioBus> audio_bus_;
-  scoped_refptr<WebRtcAudioCapturer> capturer_;
+  WebRtcAudioCapturer* capturer_;
   base::PlatformThreadHandle thread_;
   base::WaitableEvent closure_;
   DISALLOW_COPY_AND_ASSIGN(FakeAudioThread);
@@ -170,17 +171,27 @@
     params_.Reset(media::AudioParameters::AUDIO_PCM_LOW_LATENCY,
                   media::CHANNEL_LAYOUT_STEREO, 2, 0, 48000, 16, 480);
     blink::WebMediaConstraints constraints;
+    blink_source_.initialize("dummy", blink::WebMediaStreamSource::TypeAudio,
+                             "dummy");
+    MediaStreamAudioSource* audio_source = new MediaStreamAudioSource();
+    blink_source_.setExtraData(audio_source);
+
     StreamDeviceInfo device(MEDIA_DEVICE_AUDIO_CAPTURE,
                             std::string(), std::string());
     capturer_ = WebRtcAudioCapturer::CreateCapturer(-1, device,
-                                                    constraints, NULL);
+                                                    constraints, NULL,
+                                                    audio_source);
+    audio_source->SetAudioCapturer(capturer_);
     capturer_source_ = new MockCapturerSource(capturer_.get());
     EXPECT_CALL(*capturer_source_.get(), OnInitialize(_, capturer_.get(), -1))
         .WillOnce(Return());
+    EXPECT_CALL(*capturer_source_.get(), SetAutomaticGainControl(true));
+    EXPECT_CALL(*capturer_source_.get(), OnStart());
     capturer_->SetCapturerSourceForTesting(capturer_source_, params_);
   }
 
   media::AudioParameters params_;
+  blink::WebMediaStreamSource blink_source_;
   scoped_refptr<MockCapturerSource> capturer_source_;
   scoped_refptr<WebRtcAudioCapturer> capturer_;
 };
@@ -190,8 +201,6 @@
 // get data callback when the track is connected to the capturer but not when
 // the track is disconnected from the capturer.
 TEST_F(WebRtcLocalAudioTrackTest, ConnectAndDisconnectOneSink) {
-  EXPECT_CALL(*capturer_source_.get(), SetAutomaticGainControl(true));
-  EXPECT_CALL(*capturer_source_.get(), OnStart());
   scoped_refptr<WebRtcLocalAudioTrackAdapter> adapter(
       WebRtcLocalAudioTrackAdapter::Create(std::string(), NULL));
   scoped_ptr<WebRtcLocalAudioTrack> track(
@@ -269,8 +278,6 @@
 // callbacks appear/disappear.
 // Flaky due to a data race, see http://crbug.com/295418
 TEST_F(WebRtcLocalAudioTrackTest, DISABLED_MultipleAudioTracks) {
-  EXPECT_CALL(*capturer_source_.get(), SetAutomaticGainControl(true));
-  EXPECT_CALL(*capturer_source_.get(), OnStart());
   scoped_refptr<WebRtcLocalAudioTrackAdapter> adapter_1(
       WebRtcLocalAudioTrackAdapter::Create(std::string(), NULL));
   scoped_ptr<WebRtcLocalAudioTrack> track_1(
@@ -326,16 +333,12 @@
   track_2->RemoveSink(sink_2.get());
   track_2->Stop();
   track_2.reset();
-
-  capturer_->Stop();
 }
 
 
 // Start one track and verify the capturer is correctly starting its source.
 // And it should be fine to not to call Stop() explicitly.
 TEST_F(WebRtcLocalAudioTrackTest, StartOneAudioTrack) {
-  EXPECT_CALL(*capturer_source_.get(), SetAutomaticGainControl(true));
-  EXPECT_CALL(*capturer_source_.get(), OnStart());
   scoped_refptr<WebRtcLocalAudioTrackAdapter> adapter(
       WebRtcLocalAudioTrackAdapter::Create(std::string(), NULL));
   scoped_ptr<WebRtcLocalAudioTrack> track(
@@ -345,17 +348,36 @@
   // When the track goes away, it will automatically stop the
   // |capturer_source_|.
   EXPECT_CALL(*capturer_source_.get(), OnStop());
-  capturer_->Stop();
   track.reset();
 }
 
+// Start two tracks and verify the capturer is correctly starting its source.
+// When the last track connected to the capturer is stopped, the source is
+// stopped.
+TEST_F(WebRtcLocalAudioTrackTest, StartTwoAudioTracks) {
+  scoped_refptr<WebRtcLocalAudioTrackAdapter> adapter1(
+      WebRtcLocalAudioTrackAdapter::Create(std::string(), NULL));
+  scoped_ptr<WebRtcLocalAudioTrack> track1(
+      new WebRtcLocalAudioTrack(adapter1, capturer_, NULL));
+  track1->Start();
+
+  scoped_refptr<WebRtcLocalAudioTrackAdapter> adapter2(
+        WebRtcLocalAudioTrackAdapter::Create(std::string(), NULL));
+  scoped_ptr<WebRtcLocalAudioTrack> track2(
+      new WebRtcLocalAudioTrack(adapter2, capturer_, NULL));
+  track2->Start();
+
+  track1->Stop();
+  // When the last track is stopped, it will automatically stop the
+  // |capturer_source_|.
+  EXPECT_CALL(*capturer_source_.get(), OnStop());
+  track2->Stop();
+}
+
 // Start/Stop tracks and verify the capturer is correctly starting/stopping
 // its source.
 TEST_F(WebRtcLocalAudioTrackTest, StartAndStopAudioTracks) {
-  // Starting the first audio track will start the |capturer_source_|.
   base::WaitableEvent event(false, false);
-  EXPECT_CALL(*capturer_source_.get(), SetAutomaticGainControl(true));
-  EXPECT_CALL(*capturer_source_.get(), OnStart()).WillOnce(SignalEvent(&event));
   scoped_refptr<WebRtcLocalAudioTrackAdapter> adapter_1(
       WebRtcLocalAudioTrackAdapter::Create(std::string(), NULL));
   scoped_ptr<WebRtcLocalAudioTrack> track_1(
@@ -363,7 +385,6 @@
   static_cast<webrtc::AudioTrackInterface*>(
       adapter_1.get())->GetRenderer()->AddChannel(0);
   track_1->Start();
-  EXPECT_TRUE(event.TimedWait(TestTimeouts::tiny_timeout()));
 
   // Verify the data flow by connecting the sink to |track_1|.
   scoped_ptr<MockMediaStreamAudioSink> sink(new MockMediaStreamAudioSink());
@@ -403,8 +424,6 @@
 // Create a new capturer with new source, connect it to a new audio track.
 TEST_F(WebRtcLocalAudioTrackTest, ConnectTracksToDifferentCapturers) {
   // Setup the first audio track and start it.
-  EXPECT_CALL(*capturer_source_.get(), SetAutomaticGainControl(true));
-  EXPECT_CALL(*capturer_source_.get(), OnStart());
   scoped_refptr<WebRtcLocalAudioTrackAdapter> adapter_1(
       WebRtcLocalAudioTrackAdapter::Create(std::string(), NULL));
   scoped_ptr<WebRtcLocalAudioTrack> track_1(
@@ -431,18 +450,19 @@
   StreamDeviceInfo device(MEDIA_DEVICE_AUDIO_CAPTURE,
                           std::string(), std::string());
   scoped_refptr<WebRtcAudioCapturer> new_capturer(
-      WebRtcAudioCapturer::CreateCapturer(-1, device, constraints, NULL));
+      WebRtcAudioCapturer::CreateCapturer(-1, device, constraints, NULL, NULL));
   scoped_refptr<MockCapturerSource> new_source(
       new MockCapturerSource(new_capturer.get()));
   EXPECT_CALL(*new_source.get(), OnInitialize(_, new_capturer.get(), -1));
+  EXPECT_CALL(*new_source.get(), SetAutomaticGainControl(true));
+  EXPECT_CALL(*new_source.get(), OnStart());
+
   media::AudioParameters new_param(
       media::AudioParameters::AUDIO_PCM_LOW_LATENCY,
       media::CHANNEL_LAYOUT_MONO, 44100, 16, 441);
   new_capturer->SetCapturerSourceForTesting(new_source, new_param);
 
   // Setup the second audio track, connect it to the new capturer and start it.
-  EXPECT_CALL(*new_source.get(), SetAutomaticGainControl(true));
-  EXPECT_CALL(*new_source.get(), OnStart());
   scoped_refptr<WebRtcLocalAudioTrackAdapter> adapter_2(
       WebRtcLocalAudioTrackAdapter::Create(std::string(), NULL));
   scoped_ptr<WebRtcLocalAudioTrack> track_2(
@@ -477,7 +497,6 @@
   capturer_->Stop();
 }
 
-
 // Make sure a audio track can deliver packets with a buffer size smaller than
 // 10ms when it is not connected with a peer connection.
 TEST_F(WebRtcLocalAudioTrackTest, TrackWorkWithSmallBufferSize) {
@@ -496,15 +515,15 @@
                            params.channel_layout(),
                            params.frames_per_buffer()),
           factory.CreateWebMediaConstraints(),
-          NULL));
+          NULL, NULL));
   scoped_refptr<MockCapturerSource> source(
       new MockCapturerSource(capturer.get()));
   EXPECT_CALL(*source.get(), OnInitialize(_, capturer.get(), -1));
+  EXPECT_CALL(*source.get(), SetAutomaticGainControl(true));
+  EXPECT_CALL(*source.get(), OnStart());
   capturer->SetCapturerSourceForTesting(source, params);
 
   // Setup a audio track, connect it to the capturer and start it.
-  EXPECT_CALL(*source.get(), SetAutomaticGainControl(true));
-  EXPECT_CALL(*source.get(), OnStart());
   scoped_refptr<WebRtcLocalAudioTrackAdapter> adapter(
       WebRtcLocalAudioTrackAdapter::Create(std::string(), NULL));
   scoped_ptr<WebRtcLocalAudioTrack> track(
@@ -531,6 +550,10 @@
   // Stopping the new source will stop the second track.
   EXPECT_CALL(*source, OnStop()).Times(1);
   capturer->Stop();
+
+  // Even though this test don't use |capturer_source_| it will be stopped
+  // during teardown of the test harness.
+  EXPECT_CALL(*capturer_source_.get(), OnStop());
 }
 
 }  // namespace content
diff --git a/content/renderer/mojo/mojo_render_process_observer.cc b/content/renderer/mojo/mojo_render_process_observer.cc
index 7f01d3f..9790787 100644
--- a/content/renderer/mojo/mojo_render_process_observer.cc
+++ b/content/renderer/mojo/mojo_render_process_observer.cc
@@ -6,11 +6,11 @@
 
 #include "base/message_loop/message_loop.h"
 #include "content/child/child_process.h"
-#include "content/common/mojo/mojo_channel_init.h"
 #include "content/common/mojo/mojo_messages.h"
 #include "content/public/renderer/render_thread.h"
 #include "content/public/renderer/render_view.h"
 #include "content/renderer/web_ui_mojo.h"
+#include "mojo/common/mojo_channel_init.h"
 
 namespace content {
 
@@ -46,7 +46,7 @@
   base::PlatformFile handle = file;
 #endif
   DCHECK(!channel_init_.get());
-  channel_init_.reset(new MojoChannelInit);
+  channel_init_.reset(new mojo::common::MojoChannelInit);
   channel_init_->Init(handle, ChildProcess::current()->io_message_loop_proxy());
   if (!channel_init_->is_handle_valid())
     return;
diff --git a/content/renderer/mojo/mojo_render_process_observer.h b/content/renderer/mojo/mojo_render_process_observer.h
index 2bee59d..a66a98d 100644
--- a/content/renderer/mojo/mojo_render_process_observer.h
+++ b/content/renderer/mojo/mojo_render_process_observer.h
@@ -12,14 +12,16 @@
 #include "mojo/public/cpp/bindings/remote_ptr.h"
 
 namespace mojo {
-namespace embedder{
+namespace common {
+class MojoChannelInit;
+}
+namespace embedder {
 struct ChannelInfo;
 }
 }
 
 namespace content {
 
-class MojoChannelInit;
 class RenderThread;
 
 // RenderProcessObserver implementation that initializes the mojo channel when
@@ -47,7 +49,7 @@
 
   content::RenderThread* render_thread_;
 
-  scoped_ptr<MojoChannelInit> channel_init_;
+  scoped_ptr<mojo::common::MojoChannelInit> channel_init_;
 
   mojo::RemotePtr<content::RenderProcessHostMojo> render_process_host_mojo_;
 
diff --git a/content/renderer/notification_provider.cc b/content/renderer/notification_provider.cc
index 9289398..04f0a4a 100644
--- a/content/renderer/notification_provider.cc
+++ b/content/renderer/notification_provider.cc
@@ -7,13 +7,12 @@
 #include "base/strings/string_util.h"
 #include "content/common/desktop_notification_messages.h"
 #include "content/common/frame_messages.h"
-#include "content/renderer/render_view_impl.h"
+#include "content/renderer/render_frame_impl.h"
 #include "third_party/WebKit/public/platform/WebURL.h"
 #include "third_party/WebKit/public/web/WebDocument.h"
 #include "third_party/WebKit/public/web/WebFrame.h"
 #include "third_party/WebKit/public/web/WebNotificationPermissionCallback.h"
 #include "third_party/WebKit/public/web/WebUserGestureIndicator.h"
-#include "third_party/WebKit/public/web/WebView.h"
 
 using blink::WebDocument;
 using blink::WebNotification;
@@ -27,15 +26,15 @@
 namespace content {
 
 
-NotificationProvider::NotificationProvider(RenderViewImpl* render_view)
-    : RenderViewObserver(render_view) {
+NotificationProvider::NotificationProvider(RenderFrame* render_frame)
+    : RenderFrameObserver(render_frame) {
 }
 
 NotificationProvider::~NotificationProvider() {
 }
 
 bool NotificationProvider::show(const WebNotification& notification) {
-  WebDocument document = render_view()->GetWebView()->mainFrame()->document();
+  WebDocument document = render_frame()->GetWebFrame()->document();
   int notification_id = manager_.RegisterNotification(notification);
 
   ShowDesktopNotificationHostMsgParams params;
@@ -44,9 +43,9 @@
   params.title = notification.title();
   params.body = notification.body();
   params.direction = notification.direction();
-  params.notification_id = notification_id;
   params.replace_id = notification.replaceId();
-  return Send(new DesktopNotificationHostMsg_Show(routing_id(), params));
+  return Send(new DesktopNotificationHostMsg_Show(
+      routing_id(), notification_id, params));
 }
 
 void NotificationProvider::cancel(const WebNotification& notification) {
@@ -116,13 +115,13 @@
     notification.dispatchDisplayEvent();
 }
 
-void NotificationProvider::OnError(int id, const WebString& message) {
+void NotificationProvider::OnError(int id) {
   WebNotification notification;
   bool found = manager_.GetNotification(id, &notification);
   // |found| may be false if the WebNotification went out of scope in
   // the page before the error occurred.
   if (found)
-    notification.dispatchErrorEvent(message);
+    notification.dispatchErrorEvent(WebString());
 }
 
 void NotificationProvider::OnClose(int id, bool by_user) {
diff --git a/content/renderer/notification_provider.h b/content/renderer/notification_provider.h
index 8abafb1..5162c14 100644
--- a/content/renderer/notification_provider.h
+++ b/content/renderer/notification_provider.h
@@ -5,7 +5,7 @@
 #ifndef CONTENT_RENDERER_NOTIFICATION_PROVIDER_H_
 #define CONTENT_RENDERER_NOTIFICATION_PROVIDER_H_
 
-#include "content/public/renderer/render_view_observer.h"
+#include "content/public/renderer/render_frame_observer.h"
 #include "content/renderer/active_notification_tracker.h"
 #include "third_party/WebKit/public/web/WebNotification.h"
 #include "third_party/WebKit/public/web/WebNotificationPresenter.h"
@@ -15,18 +15,17 @@
 }
 
 namespace content {
-class RenderViewImpl;
 
-// NotificationProvider class is owned by the RenderView.  Only
-// to be used on the main thread.
-class NotificationProvider : public RenderViewObserver,
+// NotificationProvider class is owned by the RenderFrame.  Only to be used on
+// the main thread.
+class NotificationProvider : public RenderFrameObserver,
                              public blink::WebNotificationPresenter {
  public:
-  explicit NotificationProvider(RenderViewImpl* render_view);
+  explicit NotificationProvider(RenderFrame* render_frame);
   virtual ~NotificationProvider();
 
  private:
-  // RenderView::Observer implementation.
+  // RenderFrameObserver implementation.
   virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
 
   // blink::WebNotificationPresenter interface.
@@ -40,7 +39,7 @@
 
   // IPC handlers.
   void OnDisplay(int id);
-  void OnError(int id, const blink::WebString& message);
+  void OnError(int id);
   void OnClose(int id, bool by_user);
   void OnClick(int id);
   void OnPermissionRequestComplete(int id);
diff --git a/content/renderer/p2p/socket_client_impl.cc b/content/renderer/p2p/socket_client_impl.cc
index 5f18805..ee7929d 100644
--- a/content/renderer/p2p/socket_client_impl.cc
+++ b/content/renderer/p2p/socket_client_impl.cc
@@ -6,6 +6,7 @@
 
 #include "base/bind.h"
 #include "base/message_loop/message_loop_proxy.h"
+#include "base/time/time.h"
 #include "content/common/p2p_messages.h"
 #include "content/renderer/p2p/socket_client_delegate.h"
 #include "content/renderer/p2p/socket_dispatcher.h"
diff --git a/content/renderer/p2p/socket_client_impl.h b/content/renderer/p2p/socket_client_impl.h
index cf15b28..fb4703d 100644
--- a/content/renderer/p2p/socket_client_impl.h
+++ b/content/renderer/p2p/socket_client_impl.h
@@ -14,6 +14,7 @@
 
 namespace base {
 class MessageLoopProxy;
+class TimeTicks;
 }  // namespace base
 
 namespace content {
diff --git a/content/renderer/paint_aggregator.cc b/content/renderer/paint_aggregator.cc
deleted file mode 100644
index 254a12f..0000000
--- a/content/renderer/paint_aggregator.cc
+++ /dev/null
@@ -1,288 +0,0 @@
-// Copyright (c) 2009 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 "content/renderer/paint_aggregator.h"
-
-#include "base/logging.h"
-#include "base/metrics/histogram.h"
-
-namespace content {
-
-// ----------------------------------------------------------------------------
-// ALGORITHM NOTES
-//
-// We attempt to maintain a scroll rect in the presence of invalidations that
-// are contained within the scroll rect.  If an invalidation crosses a scroll
-// rect, then we just treat the scroll rect as an invalidation rect.
-//
-// For invalidations performed prior to scrolling and contained within the
-// scroll rect, we offset the invalidation rects to account for the fact that
-// the consumer will perform scrolling before painting.
-//
-// We only support scrolling along one axis at a time.  A diagonal scroll will
-// therefore be treated as an invalidation.
-// ----------------------------------------------------------------------------
-
-// If the combined area of paint rects contained within the scroll rect grows
-// too large, then we might as well just treat the scroll rect as a paint rect.
-// This constant sets the max ratio of paint rect area to scroll rect area that
-// we will tolerate before dograding the scroll into a repaint.
-static const float kMaxRedundantPaintToScrollArea = 0.8f;
-
-// The maximum number of paint rects.  If we exceed this limit, then we'll
-// start combining paint rects (see CombinePaintRects).  This limiting is
-// important since the WebKit code associated with deciding what to paint given
-// a paint rect can be significant.
-static const size_t kMaxPaintRects = 5;
-
-// If the combined area of paint rects divided by the area of the union of all
-// paint rects exceeds this threshold, then we will combine the paint rects.
-static const float kMaxPaintRectsAreaRatio = 0.7f;
-
-PaintAggregator::PendingUpdate::PendingUpdate() {}
-
-PaintAggregator::PendingUpdate::~PendingUpdate() {}
-
-gfx::Rect PaintAggregator::PendingUpdate::GetScrollDamage() const {
-  // Should only be scrolling in one direction at a time.
-  DCHECK(!(scroll_delta.x() && scroll_delta.y()));
-
-  gfx::Rect damaged_rect;
-
-  // Compute the region we will expose by scrolling, and paint that into a
-  // shared memory section.
-  if (scroll_delta.x()) {
-    int dx = scroll_delta.x();
-    damaged_rect.set_y(scroll_rect.y());
-    damaged_rect.set_height(scroll_rect.height());
-    if (dx > 0) {
-      damaged_rect.set_x(scroll_rect.x());
-      damaged_rect.set_width(dx);
-    } else {
-      damaged_rect.set_x(scroll_rect.right() + dx);
-      damaged_rect.set_width(-dx);
-    }
-  } else {
-    int dy = scroll_delta.y();
-    damaged_rect.set_x(scroll_rect.x());
-    damaged_rect.set_width(scroll_rect.width());
-    if (dy > 0) {
-      damaged_rect.set_y(scroll_rect.y());
-      damaged_rect.set_height(dy);
-    } else {
-      damaged_rect.set_y(scroll_rect.bottom() + dy);
-      damaged_rect.set_height(-dy);
-    }
-  }
-
-  // In case the scroll offset exceeds the width/height of the scroll rect
-  return gfx::IntersectRects(scroll_rect, damaged_rect);
-}
-
-gfx::Rect PaintAggregator::PendingUpdate::GetPaintBounds() const {
-  gfx::Rect bounds;
-  for (size_t i = 0; i < paint_rects.size(); ++i)
-    bounds.Union(paint_rects[i]);
-  return bounds;
-}
-
-bool PaintAggregator::HasPendingUpdate() const {
-  return !update_.scroll_rect.IsEmpty() || !update_.paint_rects.empty();
-}
-
-void PaintAggregator::ClearPendingUpdate() {
-  update_ = PendingUpdate();
-}
-
-void PaintAggregator::PopPendingUpdate(PendingUpdate* update) {
-  // Combine paint rects if their combined area is not sufficiently less than
-  // the area of the union of all paint rects.  We skip this if there is a
-  // scroll rect since scrolling benefits from smaller paint rects.
-  if (update_.scroll_rect.IsEmpty() && update_.paint_rects.size() > 1) {
-    int paint_area = 0;
-    gfx::Rect union_rect;
-    for (size_t i = 0; i < update_.paint_rects.size(); ++i) {
-      paint_area += update_.paint_rects[i].size().GetArea();
-      union_rect.Union(update_.paint_rects[i]);
-    }
-    int union_area = union_rect.size().GetArea();
-    if (float(paint_area) / float(union_area) > kMaxPaintRectsAreaRatio)
-      CombinePaintRects();
-  }
-  *update = update_;
-  ClearPendingUpdate();
-}
-
-void PaintAggregator::InvalidateRect(const gfx::Rect& rect) {
-  // Combine overlapping paints using smallest bounding box.
-  for (size_t i = 0; i < update_.paint_rects.size(); ++i) {
-    const gfx::Rect& existing_rect = update_.paint_rects[i];
-    if (existing_rect.Contains(rect))  // Optimize out redundancy.
-      return;
-    if (rect.Intersects(existing_rect) || rect.SharesEdgeWith(existing_rect)) {
-      // Re-invalidate in case the union intersects other paint rects.
-      gfx::Rect combined_rect = gfx::UnionRects(existing_rect, rect);
-      update_.paint_rects.erase(update_.paint_rects.begin() + i);
-      InvalidateRect(combined_rect);
-      return;
-    }
-  }
-
-  // Add a non-overlapping paint.
-  update_.paint_rects.push_back(rect);
-
-  // If the new paint overlaps with a scroll, then it forces an invalidation of
-  // the scroll.  If the new paint is contained by a scroll, then trim off the
-  // scroll damage to avoid redundant painting.
-  if (!update_.scroll_rect.IsEmpty()) {
-    if (ShouldInvalidateScrollRect(rect)) {
-      InvalidateScrollRect();
-    } else if (update_.scroll_rect.Contains(rect)) {
-      update_.paint_rects[update_.paint_rects.size() - 1] =
-          gfx::SubtractRects(rect, update_.GetScrollDamage());
-      if (update_.paint_rects[update_.paint_rects.size() - 1].IsEmpty())
-        update_.paint_rects.erase(update_.paint_rects.end() - 1);
-    }
-  }
-
-  if (update_.paint_rects.size() > kMaxPaintRects)
-    CombinePaintRects();
-
-  // Track how large the paint_rects vector grows during an invalidation
-  // sequence.  Note: A subsequent invalidation may end up being combined
-  // with all existing paints, which means that tracking the size of
-  // paint_rects at the time when PopPendingUpdate() is called may mask
-  // certain performance problems.
-  HISTOGRAM_COUNTS_100("MPArch.RW_IntermediatePaintRectCount",
-                       update_.paint_rects.size());
-}
-
-void PaintAggregator::ScrollRect(const gfx::Vector2d& delta,
-                                 const gfx::Rect& clip_rect) {
-  // We only support scrolling along one axis at a time.
-  if (delta.x() != 0 && delta.y() != 0) {
-    InvalidateRect(clip_rect);
-    return;
-  }
-
-  // We can only scroll one rect at a time.
-  if (!update_.scroll_rect.IsEmpty() && update_.scroll_rect != clip_rect) {
-    InvalidateRect(clip_rect);
-    return;
-  }
-
-  // Again, we only support scrolling along one axis at a time.  Make sure this
-  // update doesn't scroll on a different axis than any existing one.
-  if ((delta.x() && update_.scroll_delta.y()) ||
-      (delta.y() && update_.scroll_delta.x())) {
-    InvalidateRect(clip_rect);
-    return;
-  }
-
-  // The scroll rect is new or isn't changing (though the scroll amount may
-  // be changing).
-  update_.scroll_rect = clip_rect;
-  update_.scroll_delta += delta;
-
-  // We might have just wiped out a pre-existing scroll.
-  if (update_.scroll_delta.IsZero()) {
-    update_.scroll_rect = gfx::Rect();
-    return;
-  }
-
-  // Adjust any contained paint rects and check for any overlapping paints.
-  for (size_t i = 0; i < update_.paint_rects.size(); ++i) {
-    if (update_.scroll_rect.Contains(update_.paint_rects[i])) {
-      update_.paint_rects[i] = ScrollPaintRect(update_.paint_rects[i], delta);
-      // The rect may have been scrolled out of view.
-      if (update_.paint_rects[i].IsEmpty()) {
-        update_.paint_rects.erase(update_.paint_rects.begin() + i);
-        i--;
-      }
-    } else if (update_.scroll_rect.Intersects(update_.paint_rects[i])) {
-      InvalidateScrollRect();
-      return;
-    }
-  }
-
-  // If the new scroll overlaps too much with contained paint rects, then force
-  // an invalidation of the scroll.
-  if (ShouldInvalidateScrollRect(gfx::Rect()))
-    InvalidateScrollRect();
-}
-
-gfx::Rect PaintAggregator::ScrollPaintRect(const gfx::Rect& paint_rect,
-                                           const gfx::Vector2d& delta) const {
-  gfx::Rect result = paint_rect + delta;
-  result.Intersect(update_.scroll_rect);
-
-  // Subtract out the scroll damage rect to avoid redundant painting.
-  result.Subtract(update_.GetScrollDamage());
-  return result;
-}
-
-bool PaintAggregator::ShouldInvalidateScrollRect(const gfx::Rect& rect) const {
-  if (!rect.IsEmpty()) {
-    if (!update_.scroll_rect.Intersects(rect))
-      return false;
-
-    if (!update_.scroll_rect.Contains(rect))
-      return true;
-  }
-
-  // Check if the combined area of all contained paint rects plus this new
-  // rect comes too close to the area of the scroll_rect.  If so, then we
-  // might as well invalidate the scroll rect.
-
-  int paint_area = rect.size().GetArea();
-  for (size_t i = 0; i < update_.paint_rects.size(); ++i) {
-    const gfx::Rect& existing_rect = update_.paint_rects[i];
-    if (update_.scroll_rect.Contains(existing_rect))
-      paint_area += existing_rect.size().GetArea();
-  }
-  int scroll_area = update_.scroll_rect.size().GetArea();
-  if (float(paint_area) / float(scroll_area) > kMaxRedundantPaintToScrollArea)
-    return true;
-
-  return false;
-}
-
-void PaintAggregator::InvalidateScrollRect() {
-  gfx::Rect scroll_rect = update_.scroll_rect;
-  update_.scroll_rect = gfx::Rect();
-  update_.scroll_delta = gfx::Vector2d();
-  InvalidateRect(scroll_rect);
-}
-
-void PaintAggregator::CombinePaintRects() {
-  // Combine paint rects do to at most two rects: one inside the scroll_rect
-  // and one outside the scroll_rect.  If there is no scroll_rect, then just
-  // use the smallest bounding box for all paint rects.
-  //
-  // NOTE: This is a fairly simple algorithm.  We could get fancier by only
-  // combining two rects to get us under the kMaxPaintRects limit, but if we
-  // reach this method then it means we're hitting a rare case, so there's no
-  // need to over-optimize it.
-  //
-  if (update_.scroll_rect.IsEmpty()) {
-    gfx::Rect bounds = update_.GetPaintBounds();
-    update_.paint_rects.clear();
-    update_.paint_rects.push_back(bounds);
-  } else {
-    gfx::Rect inner, outer;
-    for (size_t i = 0; i < update_.paint_rects.size(); ++i) {
-      const gfx::Rect& existing_rect = update_.paint_rects[i];
-      if (update_.scroll_rect.Contains(existing_rect)) {
-        inner.Union(existing_rect);
-      } else {
-        outer.Union(existing_rect);
-      }
-    }
-    update_.paint_rects.clear();
-    update_.paint_rects.push_back(inner);
-    update_.paint_rects.push_back(outer);
-  }
-}
-
-}  // namespace content
diff --git a/content/renderer/paint_aggregator.h b/content/renderer/paint_aggregator.h
deleted file mode 100644
index 6bbcd0e..0000000
--- a/content/renderer/paint_aggregator.h
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright (c) 2012 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 CONTENT_RENDERER_PAINT_AGGREGATOR_H_
-#define CONTENT_RENDERER_PAINT_AGGREGATOR_H_
-
-#include <vector>
-
-#include "base/basictypes.h"
-#include "content/common/content_export.h"
-#include "ui/gfx/rect.h"
-#include "ui/gfx/vector2d.h"
-
-namespace content {
-
-// This class is responsible for aggregating multiple invalidation and scroll
-// commands to produce a scroll and repaint sequence.
-class CONTENT_EXPORT PaintAggregator {
- public:
-  // This structure describes an aggregation of InvalidateRect and ScrollRect
-  // calls.  If |scroll_rect| is non-empty, then that rect should be scrolled
-  // by the amount specified by |scroll_delta|.  If |paint_rects| is non-empty,
-  // then those rects should be repainted.  If |scroll_rect| and |paint_rects|
-  // are non-empty, then scrolling should be performed before repainting.
-  // |scroll_delta| can only specify scrolling in one direction (i.e., the x
-  // and y members cannot both be non-zero).
-  struct CONTENT_EXPORT PendingUpdate {
-    PendingUpdate();
-    ~PendingUpdate();
-
-    // Returns the rect damaged by scrolling within |scroll_rect| by
-    // |scroll_delta|.  This rect must be repainted.
-    gfx::Rect GetScrollDamage() const;
-
-    // Returns the smallest rect containing all paint rects.
-    gfx::Rect GetPaintBounds() const;
-
-    gfx::Vector2d scroll_delta;
-    gfx::Rect scroll_rect;
-    std::vector<gfx::Rect> paint_rects;
-  };
-
-  // There is a PendingUpdate if InvalidateRect or ScrollRect were called and
-  // ClearPendingUpdate was not called.
-  bool HasPendingUpdate() const;
-  void ClearPendingUpdate();
-
-  // Fills |update| and clears the pending update.
-  void PopPendingUpdate(PendingUpdate* update);
-
-  // The given rect should be repainted.
-  void InvalidateRect(const gfx::Rect& rect);
-
-  // The given rect should be scrolled by the given amounts.
-  void ScrollRect(const gfx::Vector2d& delta, const gfx::Rect& clip_rect);
-
- private:
-  gfx::Rect ScrollPaintRect(const gfx::Rect& paint_rect,
-                            const gfx::Vector2d& delta) const;
-  bool ShouldInvalidateScrollRect(const gfx::Rect& rect) const;
-  void InvalidateScrollRect();
-  void CombinePaintRects();
-
-  PendingUpdate update_;
-};
-
-}  // namespace content
-
-#endif  // CONTENT_RENDERER_PAINT_AGGREGATOR_H_
diff --git a/content/renderer/paint_aggregator_unittest.cc b/content/renderer/paint_aggregator_unittest.cc
deleted file mode 100644
index dab9286..0000000
--- a/content/renderer/paint_aggregator_unittest.cc
+++ /dev/null
@@ -1,439 +0,0 @@
-// Copyright (c) 2009 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 "content/renderer/paint_aggregator.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace content {
-
-TEST(PaintAggregator, InitialState) {
-  PaintAggregator greg;
-  EXPECT_FALSE(greg.HasPendingUpdate());
-}
-
-TEST(PaintAggregator, SingleInvalidation) {
-  PaintAggregator greg;
-
-  gfx::Rect rect(2, 4, 10, 16);
-  greg.InvalidateRect(rect);
-
-  EXPECT_TRUE(greg.HasPendingUpdate());
-  PaintAggregator::PendingUpdate update;
-  greg.PopPendingUpdate(&update);
-
-  EXPECT_TRUE(update.scroll_rect.IsEmpty());
-  ASSERT_EQ(1U, update.paint_rects.size());
-
-  EXPECT_EQ(rect, update.paint_rects[0]);
-}
-
-TEST(PaintAggregator, DoubleDisjointInvalidation) {
-  PaintAggregator greg;
-
-  gfx::Rect r1(2, 4, 2, 40);
-  gfx::Rect r2(4, 2, 40, 2);
-
-  greg.InvalidateRect(r1);
-  greg.InvalidateRect(r2);
-
-  gfx::Rect expected_bounds = gfx::UnionRects(r1, r2);
-
-  EXPECT_TRUE(greg.HasPendingUpdate());
-  PaintAggregator::PendingUpdate update;
-  greg.PopPendingUpdate(&update);
-
-  EXPECT_TRUE(update.scroll_rect.IsEmpty());
-  EXPECT_EQ(2U, update.paint_rects.size());
-
-  EXPECT_EQ(expected_bounds, update.GetPaintBounds());
-}
-
-TEST(PaintAggregator, DisjointInvalidationsCombined) {
-  PaintAggregator greg;
-
-  // Make the rectangles such that they don't overlap but cover a very large
-  // percentage of the area of covered by their union. This is so we're not
-  // very sensitive to the combining heuristic in the paint aggregator.
-  gfx::Rect r1(2, 4, 2, 1000);
-  gfx::Rect r2(5, 2, 2, 1000);
-
-  greg.InvalidateRect(r1);
-  greg.InvalidateRect(r2);
-
-  gfx::Rect expected_bounds = gfx::UnionRects(r1, r2);
-
-  EXPECT_TRUE(greg.HasPendingUpdate());
-  PaintAggregator::PendingUpdate update;
-  greg.PopPendingUpdate(&update);
-
-  EXPECT_TRUE(update.scroll_rect.IsEmpty());
-  ASSERT_EQ(1U, update.paint_rects.size());
-
-  EXPECT_EQ(expected_bounds, update.paint_rects[0]);
-}
-
-TEST(PaintAggregator, SingleScroll) {
-  PaintAggregator greg;
-
-  gfx::Rect rect(1, 2, 3, 4);
-  gfx::Vector2d delta(1, 0);
-  greg.ScrollRect(delta, rect);
-
-  EXPECT_TRUE(greg.HasPendingUpdate());
-  PaintAggregator::PendingUpdate update;
-  greg.PopPendingUpdate(&update);
-
-  EXPECT_TRUE(update.paint_rects.empty());
-  EXPECT_FALSE(update.scroll_rect.IsEmpty());
-
-  EXPECT_EQ(rect, update.scroll_rect);
-
-  EXPECT_EQ(delta.x(), update.scroll_delta.x());
-  EXPECT_EQ(delta.y(), update.scroll_delta.y());
-
-  gfx::Rect resulting_damage = update.GetScrollDamage();
-  gfx::Rect expected_damage(1, 2, 1, 4);
-  EXPECT_EQ(expected_damage, resulting_damage);
-}
-
-TEST(PaintAggregator, DoubleOverlappingScroll) {
-  PaintAggregator greg;
-
-  gfx::Rect rect(1, 2, 3, 4);
-  gfx::Vector2d delta1(1, 0);
-  gfx::Vector2d delta2(1, 0);
-  greg.ScrollRect(delta1, rect);
-  greg.ScrollRect(delta2, rect);
-
-  EXPECT_TRUE(greg.HasPendingUpdate());
-  PaintAggregator::PendingUpdate update;
-  greg.PopPendingUpdate(&update);
-
-  EXPECT_TRUE(update.paint_rects.empty());
-  EXPECT_FALSE(update.scroll_rect.IsEmpty());
-
-  EXPECT_EQ(rect, update.scroll_rect);
-
-  gfx::Vector2d expected_delta = delta1 + delta2;
-  EXPECT_EQ(expected_delta.ToString(), update.scroll_delta.ToString());
-
-  gfx::Rect resulting_damage = update.GetScrollDamage();
-  gfx::Rect expected_damage(1, 2, 2, 4);
-  EXPECT_EQ(expected_damage, resulting_damage);
-}
-
-TEST(PaintAggregator, NegatingScroll) {
-  PaintAggregator greg;
-
-  // Scroll twice in opposite directions by equal amounts.  The result
-  // should be no scrolling.
-
-  gfx::Rect rect(1, 2, 3, 4);
-  gfx::Vector2d delta1(1, 0);
-  gfx::Vector2d delta2(-1, 0);
-  greg.ScrollRect(delta1, rect);
-  greg.ScrollRect(delta2, rect);
-
-  EXPECT_FALSE(greg.HasPendingUpdate());
-}
-
-TEST(PaintAggregator, DiagonalScroll) {
-  PaintAggregator greg;
-
-  // We don't support optimized diagonal scrolling, so this should result in
-  // repainting.
-
-  gfx::Rect rect(1, 2, 3, 4);
-  gfx::Vector2d delta(1, 1);
-  greg.ScrollRect(delta, rect);
-
-  EXPECT_TRUE(greg.HasPendingUpdate());
-  PaintAggregator::PendingUpdate update;
-  greg.PopPendingUpdate(&update);
-
-  EXPECT_TRUE(update.scroll_rect.IsEmpty());
-  ASSERT_EQ(1U, update.paint_rects.size());
-
-  EXPECT_EQ(rect, update.paint_rects[0]);
-}
-
-TEST(PaintAggregator, ContainedPaintAfterScroll) {
-  PaintAggregator greg;
-
-  gfx::Rect scroll_rect(0, 0, 10, 10);
-  greg.ScrollRect(gfx::Vector2d(2, 0), scroll_rect);
-
-  gfx::Rect paint_rect(4, 4, 2, 2);
-  greg.InvalidateRect(paint_rect);
-
-  EXPECT_TRUE(greg.HasPendingUpdate());
-  PaintAggregator::PendingUpdate update;
-  greg.PopPendingUpdate(&update);
-
-  // expecting a paint rect inside the scroll rect
-  EXPECT_FALSE(update.scroll_rect.IsEmpty());
-  EXPECT_EQ(1U, update.paint_rects.size());
-
-  EXPECT_EQ(scroll_rect, update.scroll_rect);
-  EXPECT_EQ(paint_rect, update.paint_rects[0]);
-}
-
-TEST(PaintAggregator, ContainedPaintBeforeScroll) {
-  PaintAggregator greg;
-
-  gfx::Rect paint_rect(4, 4, 2, 2);
-  greg.InvalidateRect(paint_rect);
-
-  gfx::Rect scroll_rect(0, 0, 10, 10);
-  greg.ScrollRect(gfx::Vector2d(2, 0), scroll_rect);
-
-  EXPECT_TRUE(greg.HasPendingUpdate());
-  PaintAggregator::PendingUpdate update;
-  greg.PopPendingUpdate(&update);
-
-  // Expecting a paint rect inside the scroll rect
-  EXPECT_FALSE(update.scroll_rect.IsEmpty());
-  EXPECT_EQ(1U, update.paint_rects.size());
-
-  paint_rect.Offset(2, 0);
-
-  EXPECT_EQ(scroll_rect, update.scroll_rect);
-  EXPECT_EQ(paint_rect, update.paint_rects[0]);
-}
-
-TEST(PaintAggregator, ContainedPaintsBeforeAndAfterScroll) {
-  PaintAggregator greg;
-
-  gfx::Rect paint_rect1(4, 4, 2, 2);
-  greg.InvalidateRect(paint_rect1);
-
-  gfx::Rect scroll_rect(0, 0, 10, 10);
-  greg.ScrollRect(gfx::Vector2d(2, 0), scroll_rect);
-
-  gfx::Rect paint_rect2(6, 4, 2, 2);
-  greg.InvalidateRect(paint_rect2);
-
-  gfx::Rect expected_paint_rect = paint_rect2;
-
-  EXPECT_TRUE(greg.HasPendingUpdate());
-  PaintAggregator::PendingUpdate update;
-  greg.PopPendingUpdate(&update);
-
-  // Expecting a paint rect inside the scroll rect
-  EXPECT_FALSE(update.scroll_rect.IsEmpty());
-  EXPECT_EQ(1U, update.paint_rects.size());
-
-  EXPECT_EQ(scroll_rect, update.scroll_rect);
-  EXPECT_EQ(expected_paint_rect, update.paint_rects[0]);
-}
-
-TEST(PaintAggregator, LargeContainedPaintAfterScroll) {
-  PaintAggregator greg;
-
-  gfx::Rect scroll_rect(0, 0, 10, 10);
-  greg.ScrollRect(gfx::Vector2d(0, 1), scroll_rect);
-
-  gfx::Rect paint_rect(0, 0, 10, 9);  // Repaint 90%
-  greg.InvalidateRect(paint_rect);
-
-  EXPECT_TRUE(greg.HasPendingUpdate());
-  PaintAggregator::PendingUpdate update;
-  greg.PopPendingUpdate(&update);
-
-  EXPECT_TRUE(update.scroll_rect.IsEmpty());
-  EXPECT_EQ(1U, update.paint_rects.size());
-
-  EXPECT_EQ(scroll_rect, update.paint_rects[0]);
-}
-
-TEST(PaintAggregator, LargeContainedPaintBeforeScroll) {
-  PaintAggregator greg;
-
-  gfx::Rect paint_rect(0, 0, 10, 9);  // Repaint 90%
-  greg.InvalidateRect(paint_rect);
-
-  gfx::Rect scroll_rect(0, 0, 10, 10);
-  greg.ScrollRect(gfx::Vector2d(0, 1), scroll_rect);
-
-  EXPECT_TRUE(greg.HasPendingUpdate());
-  PaintAggregator::PendingUpdate update;
-  greg.PopPendingUpdate(&update);
-
-  EXPECT_TRUE(update.scroll_rect.IsEmpty());
-  EXPECT_EQ(1U, update.paint_rects.size());
-
-  EXPECT_EQ(scroll_rect, update.paint_rects[0]);
-}
-
-TEST(PaintAggregator, OverlappingPaintBeforeScroll) {
-  PaintAggregator greg;
-
-  gfx::Rect paint_rect(4, 4, 10, 2);
-  greg.InvalidateRect(paint_rect);
-
-  gfx::Rect scroll_rect(0, 0, 10, 10);
-  greg.ScrollRect(gfx::Vector2d(2, 0), scroll_rect);
-
-  gfx::Rect expected_paint_rect = gfx::UnionRects(scroll_rect, paint_rect);
-
-  EXPECT_TRUE(greg.HasPendingUpdate());
-  PaintAggregator::PendingUpdate update;
-  greg.PopPendingUpdate(&update);
-
-  EXPECT_TRUE(update.scroll_rect.IsEmpty());
-  EXPECT_EQ(1U, update.paint_rects.size());
-
-  EXPECT_EQ(expected_paint_rect, update.paint_rects[0]);
-}
-
-TEST(PaintAggregator, OverlappingPaintAfterScroll) {
-  PaintAggregator greg;
-
-  gfx::Rect scroll_rect(0, 0, 10, 10);
-  greg.ScrollRect(gfx::Vector2d(2, 0), scroll_rect);
-
-  gfx::Rect paint_rect(4, 4, 10, 2);
-  greg.InvalidateRect(paint_rect);
-
-  gfx::Rect expected_paint_rect = gfx::UnionRects(scroll_rect, paint_rect);
-
-  EXPECT_TRUE(greg.HasPendingUpdate());
-  PaintAggregator::PendingUpdate update;
-  greg.PopPendingUpdate(&update);
-
-  EXPECT_TRUE(update.scroll_rect.IsEmpty());
-  EXPECT_EQ(1U, update.paint_rects.size());
-
-  EXPECT_EQ(expected_paint_rect, update.paint_rects[0]);
-}
-
-TEST(PaintAggregator, DisjointPaintBeforeScroll) {
-  PaintAggregator greg;
-
-  gfx::Rect paint_rect(4, 4, 10, 2);
-  greg.InvalidateRect(paint_rect);
-
-  gfx::Rect scroll_rect(0, 0, 2, 10);
-  greg.ScrollRect(gfx::Vector2d(2, 0), scroll_rect);
-
-  EXPECT_TRUE(greg.HasPendingUpdate());
-  PaintAggregator::PendingUpdate update;
-  greg.PopPendingUpdate(&update);
-
-  EXPECT_FALSE(update.scroll_rect.IsEmpty());
-  EXPECT_EQ(1U, update.paint_rects.size());
-
-  EXPECT_EQ(paint_rect, update.paint_rects[0]);
-  EXPECT_EQ(scroll_rect, update.scroll_rect);
-}
-
-TEST(PaintAggregator, DisjointPaintAfterScroll) {
-  PaintAggregator greg;
-
-  gfx::Rect scroll_rect(0, 0, 2, 10);
-  greg.ScrollRect(gfx::Vector2d(2, 0), scroll_rect);
-
-  gfx::Rect paint_rect(4, 4, 10, 2);
-  greg.InvalidateRect(paint_rect);
-
-  EXPECT_TRUE(greg.HasPendingUpdate());
-  PaintAggregator::PendingUpdate update;
-  greg.PopPendingUpdate(&update);
-
-  EXPECT_FALSE(update.scroll_rect.IsEmpty());
-  EXPECT_EQ(1U, update.paint_rects.size());
-
-  EXPECT_EQ(paint_rect, update.paint_rects[0]);
-  EXPECT_EQ(scroll_rect, update.scroll_rect);
-}
-
-TEST(PaintAggregator, ContainedPaintTrimmedByScroll) {
-  PaintAggregator greg;
-
-  gfx::Rect paint_rect(4, 4, 6, 6);
-  greg.InvalidateRect(paint_rect);
-
-  gfx::Rect scroll_rect(0, 0, 10, 10);
-  greg.ScrollRect(gfx::Vector2d(2, 0), scroll_rect);
-
-  // The paint rect should have become narrower.
-  gfx::Rect expected_paint_rect(6, 4, 4, 6);
-
-  EXPECT_TRUE(greg.HasPendingUpdate());
-  PaintAggregator::PendingUpdate update;
-  greg.PopPendingUpdate(&update);
-
-  EXPECT_FALSE(update.scroll_rect.IsEmpty());
-  EXPECT_EQ(1U, update.paint_rects.size());
-
-  EXPECT_EQ(expected_paint_rect, update.paint_rects[0]);
-  EXPECT_EQ(scroll_rect, update.scroll_rect);
-}
-
-TEST(PaintAggregator, ContainedPaintEliminatedByScroll) {
-  PaintAggregator greg;
-
-  gfx::Rect paint_rect(4, 4, 6, 6);
-  greg.InvalidateRect(paint_rect);
-
-  gfx::Rect scroll_rect(0, 0, 10, 10);
-  greg.ScrollRect(gfx::Vector2d(6, 0), scroll_rect);
-
-  EXPECT_TRUE(greg.HasPendingUpdate());
-  PaintAggregator::PendingUpdate update;
-  greg.PopPendingUpdate(&update);
-
-  EXPECT_FALSE(update.scroll_rect.IsEmpty());
-  EXPECT_TRUE(update.paint_rects.empty());
-
-  EXPECT_EQ(scroll_rect, update.scroll_rect);
-}
-
-TEST(PaintAggregator, ContainedPaintAfterScrollTrimmedByScrollDamage) {
-  PaintAggregator greg;
-
-  gfx::Rect scroll_rect(0, 0, 10, 10);
-  greg.ScrollRect(gfx::Vector2d(4, 0), scroll_rect);
-
-  gfx::Rect paint_rect(2, 0, 4, 10);
-  greg.InvalidateRect(paint_rect);
-
-  gfx::Rect expected_scroll_damage(0, 0, 4, 10);
-  gfx::Rect expected_paint_rect(4, 0, 2, 10);
-
-  EXPECT_TRUE(greg.HasPendingUpdate());
-  PaintAggregator::PendingUpdate update;
-  greg.PopPendingUpdate(&update);
-
-  EXPECT_FALSE(update.scroll_rect.IsEmpty());
-  EXPECT_EQ(1U, update.paint_rects.size());
-
-  EXPECT_EQ(scroll_rect, update.scroll_rect);
-  EXPECT_EQ(expected_scroll_damage, update.GetScrollDamage());
-  EXPECT_EQ(expected_paint_rect, update.paint_rects[0]);
-}
-
-TEST(PaintAggregator, ContainedPaintAfterScrollEliminatedByScrollDamage) {
-  PaintAggregator greg;
-
-  gfx::Rect scroll_rect(0, 0, 10, 10);
-  greg.ScrollRect(gfx::Vector2d(4, 0), scroll_rect);
-
-  gfx::Rect paint_rect(2, 0, 2, 10);
-  greg.InvalidateRect(paint_rect);
-
-  gfx::Rect expected_scroll_damage(0, 0, 4, 10);
-
-  EXPECT_TRUE(greg.HasPendingUpdate());
-  PaintAggregator::PendingUpdate update;
-  greg.PopPendingUpdate(&update);
-
-  EXPECT_FALSE(update.scroll_rect.IsEmpty());
-  EXPECT_TRUE(update.paint_rects.empty());
-
-  EXPECT_EQ(scroll_rect, update.scroll_rect);
-  EXPECT_EQ(expected_scroll_damage, update.GetScrollDamage());
-}
-
-}  // namespace content
diff --git a/content/renderer/pepper/pepper_plugin_instance_impl.cc b/content/renderer/pepper/pepper_plugin_instance_impl.cc
index 3b944f8..d79c9f9 100644
--- a/content/renderer/pepper/pepper_plugin_instance_impl.cc
+++ b/content/renderer/pepper/pepper_plugin_instance_impl.cc
@@ -102,8 +102,8 @@
 #include "third_party/WebKit/public/web/WebDataSource.h"
 #include "third_party/WebKit/public/web/WebDocument.h"
 #include "third_party/WebKit/public/web/WebElement.h"
-#include "third_party/WebKit/public/web/WebFrame.h"
 #include "third_party/WebKit/public/web/WebInputEvent.h"
+#include "third_party/WebKit/public/web/WebLocalFrame.h"
 #include "third_party/WebKit/public/web/WebPluginContainer.h"
 #include "third_party/WebKit/public/web/WebPrintParams.h"
 #include "third_party/WebKit/public/web/WebPrintScalingOption.h"
@@ -164,6 +164,7 @@
 using blink::WebElement;
 using blink::WebFrame;
 using blink::WebInputEvent;
+using blink::WebLocalFrame;
 using blink::WebPlugin;
 using blink::WebPluginContainer;
 using blink::WebPrintParams;
@@ -1796,7 +1797,7 @@
     return false;
 
   WebDocument document = container_->element().document();
-  WebFrame* frame = document.frame();
+  WebLocalFrame* frame = document.frame();
   if (!frame)
     return false;
   WebView* view = frame->view();
@@ -1920,9 +1921,7 @@
     DCHECK_EQ(mailbox.IsZero(), sync_point == 0);
   }
   bool want_3d_layer = !mailbox.IsZero();
-  bool want_2d_layer = bound_graphics_2d_platform_ &&
-                       CommandLine::ForCurrentProcess()->HasSwitch(
-                           switches::kEnableSoftwareCompositing);
+  bool want_2d_layer = !!bound_graphics_2d_platform_;
   bool want_layer = want_3d_layer || want_2d_layer;
 
   if ((want_layer == !!texture_layer_.get()) &&
@@ -2200,7 +2199,7 @@
   if (!container_)
     return PP_MakeUndefined();
 
-  WebFrame* frame = container_->element().document().frame();
+  WebLocalFrame* frame = container_->element().document().frame();
   if (!frame)
     return PP_MakeUndefined();
 
@@ -2235,7 +2234,7 @@
   np_script.UTF8Length = script_string->value().length();
 
   // Get the current frame to pass to the evaluate function.
-  WebFrame* frame = container_->element().document().frame();
+  WebLocalFrame* frame = container_->element().document().frame();
   if (!frame) {
     try_catch.SetException("No frame to execute script in.");
     return PP_MakeUndefined();
@@ -2716,7 +2715,7 @@
   if (!full_frame_)
     return ppapi::PPB_URLUtil_Shared::GenerateURLReturn(document.url(),
                                                         components);
-  WebFrame* frame = document.frame();
+  WebLocalFrame* frame = document.frame();
   if (!frame)
     return PP_MakeUndefined();
   const WebURLRequest& request = frame->dataSource()->originalRequest();
@@ -2901,7 +2900,7 @@
 }
 
 bool PepperPluginInstanceImpl::IsFullPagePlugin() {
-  WebFrame* frame = container()->element().document().frame();
+  WebLocalFrame* frame = container()->element().document().frame();
   return frame->view()->mainFrame()->document().isPluginDocument();
 }
 
@@ -2963,7 +2962,7 @@
     return PP_ERROR_FAILED;
 
   WebDocument document = container_->element().document();
-  WebFrame* frame = document.frame();
+  WebLocalFrame* frame = document.frame();
   if (!frame)
     return PP_ERROR_FAILED;
 
diff --git a/content/renderer/pepper/pepper_url_loader_host.cc b/content/renderer/pepper/pepper_url_loader_host.cc
index f791189..4a327d1 100644
--- a/content/renderer/pepper/pepper_url_loader_host.cc
+++ b/content/renderer/pepper/pepper_url_loader_host.cc
@@ -22,6 +22,7 @@
 #include "third_party/WebKit/public/web/WebDocument.h"
 #include "third_party/WebKit/public/web/WebElement.h"
 #include "third_party/WebKit/public/web/WebKit.h"
+#include "third_party/WebKit/public/web/WebLocalFrame.h"
 #include "third_party/WebKit/public/web/WebPluginContainer.h"
 #include "third_party/WebKit/public/web/WebSecurityOrigin.h"
 #include "third_party/WebKit/public/web/WebURLLoaderOptions.h"
diff --git a/content/renderer/pepper/pepper_url_loader_host.h b/content/renderer/pepper/pepper_url_loader_host.h
index 640011b..e298659 100644
--- a/content/renderer/pepper/pepper_url_loader_host.h
+++ b/content/renderer/pepper/pepper_url_loader_host.h
@@ -15,9 +15,9 @@
 #include "ppapi/shared_impl/url_request_info_data.h"
 #include "ppapi/shared_impl/url_response_info_data.h"
 #include "third_party/WebKit/public/platform/WebURLLoaderClient.h"
-#include "third_party/WebKit/public/web/WebLocalFrame.h"
 
 namespace blink {
+class WebLocalFrame;
 class WebURLLoader;
 }
 
diff --git a/content/renderer/pepper/pepper_video_destination_host.cc b/content/renderer/pepper/pepper_video_destination_host.cc
index 63eb27a..97432a6 100644
--- a/content/renderer/pepper/pepper_video_destination_host.cc
+++ b/content/renderer/pepper/pepper_video_destination_host.cc
@@ -52,7 +52,7 @@
 
   FrameWriterInterface* frame_writer = NULL;
   if (!VideoDestinationHandler::Open(
-          NULL /* factory */, NULL /* registry */, gurl.spec(), &frame_writer))
+          NULL /* registry */, gurl.spec(), &frame_writer))
     return PP_ERROR_FAILED;
   frame_writer_.reset(frame_writer);
 
diff --git a/content/renderer/pepper/ppb_graphics_3d_impl.cc b/content/renderer/pepper/ppb_graphics_3d_impl.cc
index 1460bf0..8213bff 100644
--- a/content/renderer/pepper/ppb_graphics_3d_impl.cc
+++ b/content/renderer/pepper/ppb_graphics_3d_impl.cc
@@ -21,14 +21,14 @@
 #include "third_party/WebKit/public/web/WebConsoleMessage.h"
 #include "third_party/WebKit/public/web/WebDocument.h"
 #include "third_party/WebKit/public/web/WebElement.h"
-#include "third_party/WebKit/public/web/WebFrame.h"
+#include "third_party/WebKit/public/web/WebLocalFrame.h"
 #include "third_party/WebKit/public/web/WebPluginContainer.h"
 #include "webkit/common/webpreferences.h"
 
 using ppapi::thunk::EnterResourceNoLock;
 using ppapi::thunk::PPB_Graphics3D_API;
 using blink::WebConsoleMessage;
-using blink::WebFrame;
+using blink::WebLocalFrame;
 using blink::WebPluginContainer;
 using blink::WebString;
 
@@ -247,7 +247,7 @@
       HostGlobals::Get()->GetInstance(pp_instance())->container();
   if (!container)
     return;
-  WebFrame* frame = container->element().document().frame();
+  WebLocalFrame* frame = container->element().document().frame();
   if (!frame)
     return;
   WebConsoleMessage console_message = WebConsoleMessage(
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index 9286bf4..f406cf2 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -79,8 +79,8 @@
 #include "third_party/WebKit/public/platform/WebVector.h"
 #include "third_party/WebKit/public/web/WebColorSuggestion.h"
 #include "third_party/WebKit/public/web/WebDocument.h"
-#include "third_party/WebKit/public/web/WebFrame.h"
 #include "third_party/WebKit/public/web/WebGlyphCache.h"
+#include "third_party/WebKit/public/web/WebLocalFrame.h"
 #include "third_party/WebKit/public/web/WebNavigationPolicy.h"
 #include "third_party/WebKit/public/web/WebPlugin.h"
 #include "third_party/WebKit/public/web/WebPluginParams.h"
@@ -176,6 +176,25 @@
   }
 }
 
+// Returns the original request url. If there is no redirect, the original
+// url is the same as ds->request()->url(). If the WebDataSource belongs to a
+// frame was loaded by loadData, the original url will be ds->unreachableURL()
+static GURL GetOriginalRequestURL(WebDataSource* ds) {
+  // WebDataSource has unreachable URL means that the frame is loaded through
+  // blink::WebFrame::loadData(), and the base URL will be in the redirect
+  // chain. However, we never visited the baseURL. So in this case, we should
+  // use the unreachable URL as the original URL.
+  if (ds->hasUnreachableURL())
+    return ds->unreachableURL();
+
+  std::vector<GURL> redirects;
+  GetRedirectChain(ds, &redirects);
+  if (!redirects.empty())
+    return redirects.at(0);
+
+  return ds->originalRequest().url();
+}
+
 NOINLINE static void CrashIntentionally() {
   // NOTE(shess): Crash directly rather than using NOTREACHED() so
   // that the signature is easier to triage in crash reports.
@@ -320,12 +339,17 @@
       cookie_jar_(this),
       selection_text_offset_(0),
       selection_range_(gfx::Range::InvalidRange()),
-      handling_select_range_(false) {
+      handling_select_range_(false),
+      notification_provider_(NULL) {
   RenderThread::Get()->AddRoute(routing_id_, this);
 
 #if defined(OS_ANDROID)
   new JavaBridgeDispatcher(this);
 #endif
+
+#if defined(ENABLE_NOTIFICATIONS)
+  notification_provider_ = new NotificationProvider(this);
+#endif
 }
 
 RenderFrameImpl::~RenderFrameImpl() {
@@ -1191,7 +1215,7 @@
                                         const blink::WebURLRequest& request,
                                         blink::WebNavigationPolicy policy) {
   DCHECK(!frame_ || frame_ == frame);
-  loadURLExternally(frame, request, policy);
+  loadURLExternally(frame, request, policy, WebString());
 }
 
 void RenderFrameImpl::ExecuteJavaScript(const base::string16& javascript) {
@@ -1486,13 +1510,6 @@
                                             source_name));
 }
 
-void RenderFrameImpl::loadURLExternally(blink::WebLocalFrame* frame,
-                                        const blink::WebURLRequest& request,
-                                        blink::WebNavigationPolicy policy) {
-  DCHECK(!frame_ || frame_ == frame);
-  loadURLExternally(frame, request, policy, WebString());
-}
-
 void RenderFrameImpl::loadURLExternally(
     blink::WebLocalFrame* frame,
     const blink::WebURLRequest& request,
@@ -2013,7 +2030,7 @@
 }
 
 blink::WebNotificationPresenter* RenderFrameImpl::notificationPresenter() {
-  return render_view_->notification_provider_;
+  return notification_provider_;
 }
 
 void RenderFrameImpl::didChangeSelection(bool is_empty_selection) {
@@ -2642,7 +2659,6 @@
   DCHECK(ds);
 
   const WebURLRequest& request = ds->request();
-  const WebURLRequest& original_request = ds->originalRequest();
   const WebURLResponse& response = ds->response();
 
   DocumentState* document_state = DocumentState::FromDataSource(ds);
@@ -2763,10 +2779,7 @@
     // Track the URL of the original request.  We use the first entry of the
     // redirect chain if it exists because the chain may have started in another
     // process.
-    if (params.redirects.size() > 0)
-      params.original_request_url = params.redirects.at(0);
-    else
-      params.original_request_url = original_request.url();
+    params.original_request_url = GetOriginalRequestURL(ds);
 
     params.history_list_was_cleared =
         navigation_state->history_list_was_cleared();
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h
index 50ad7bd..5ecf686 100644
--- a/content/renderer/render_frame_impl.h
+++ b/content/renderer/render_frame_impl.h
@@ -49,6 +49,7 @@
 namespace content {
 
 class ChildFrameCompositingHelper;
+class NotificationProvider;
 class PepperPluginInstanceImpl;
 class RendererPpapiHost;
 class RenderFrameObserver;
@@ -235,9 +236,6 @@
                                       const blink::WebString& stack_trace);
   virtual void loadURLExternally(blink::WebLocalFrame* frame,
                                  const blink::WebURLRequest& request,
-                                 blink::WebNavigationPolicy policy);
-  virtual void loadURLExternally(blink::WebLocalFrame* frame,
-                                 const blink::WebURLRequest& request,
                                  blink::WebNavigationPolicy policy,
                                  const blink::WebString& suggested_name);
   // The WebDataSource::ExtraData* is assumed to be a DocumentState* subclass.
@@ -516,6 +514,13 @@
   // of handling a InputMsg_SelectRange IPC.
   bool handling_select_range_;
 
+  // The next group of objects all implement RenderFrameObserver, so are deleted
+  // along with the RenderFrame automatically.  This is why we just store weak
+  // references.
+
+  // Holds a reference to the service which provides desktop notifications.
+  NotificationProvider* notification_provider_;
+
   DISALLOW_COPY_AND_ASSIGN(RenderFrameImpl);
 };
 
diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc
index f1a704e..8122735 100644
--- a/content/renderer/render_thread_impl.cc
+++ b/content/renderer/render_thread_impl.cc
@@ -1260,6 +1260,7 @@
   EnsureWebKitInitialized();
   // When bringing in render_view, also bring in webkit's glue and jsbindings.
   RenderViewImpl::Create(params.opener_route_id,
+                         params.window_was_created_with_opener,
                          params.renderer_preferences,
                          params.web_preferences,
                          params.view_id,
@@ -1270,6 +1271,7 @@
                          false,
                          params.swapped_out,
                          params.hidden,
+                         params.never_visible,
                          params.next_page_id,
                          params.screen_info,
                          params.accessibility_mode);
diff --git a/content/renderer/render_view_browsertest.cc b/content/renderer/render_view_browsertest.cc
index 147382d..bb24dfd 100644
--- a/content/renderer/render_view_browsertest.cc
+++ b/content/renderer/render_view_browsertest.cc
@@ -44,8 +44,8 @@
 #include "third_party/WebKit/public/platform/WebString.h"
 #include "third_party/WebKit/public/platform/WebURLResponse.h"
 #include "third_party/WebKit/public/web/WebDataSource.h"
-#include "third_party/WebKit/public/web/WebFrame.h"
 #include "third_party/WebKit/public/web/WebHistoryItem.h"
+#include "third_party/WebKit/public/web/WebLocalFrame.h"
 #include "third_party/WebKit/public/web/WebRuntimeFeatures.h"
 #include "third_party/WebKit/public/web/WebView.h"
 #include "third_party/WebKit/public/web/WebWindowFeatures.h"
@@ -1049,7 +1049,7 @@
 
       case IME_SETCOMPOSITION:
         view()->OnImeSetComposition(
-            base::WideToUTF16Hack(ime_message->ime_string),
+            base::WideToUTF16(ime_message->ime_string),
             std::vector<blink::WebCompositionUnderline>(),
             ime_message->selection_start,
             ime_message->selection_end);
@@ -1057,7 +1057,7 @@
 
       case IME_CONFIRMCOMPOSITION:
         view()->OnImeConfirmComposition(
-            base::WideToUTF16Hack(ime_message->ime_string),
+            base::WideToUTF16(ime_message->ime_string),
             gfx::Range::InvalidRange(),
             false);
         break;
@@ -1080,9 +1080,9 @@
       // Retrieve the content of this page and compare it with the expected
       // result.
       const int kMaxOutputCharacters = 128;
-      std::wstring output = base::UTF16ToWideHack(
-          GetMainFrame()->contentAsText(kMaxOutputCharacters));
-      EXPECT_EQ(output, ime_message->result);
+      base::string16 output =
+          GetMainFrame()->contentAsText(kMaxOutputCharacters);
+      EXPECT_EQ(base::WideToUTF16(ime_message->result), output);
     }
   }
 }
@@ -1129,9 +1129,8 @@
     // Copy the document content to std::wstring and compare with the
     // expected result.
     const int kMaxOutputCharacters = 16;
-    std::wstring output = base::UTF16ToWideHack(
-        GetMainFrame()->contentAsText(kMaxOutputCharacters));
-    EXPECT_EQ(output, kTextDirection[i].expected_result);
+    base::string16 output = GetMainFrame()->contentAsText(kMaxOutputCharacters);
+    EXPECT_EQ(base::WideToUTF16(kTextDirection[i].expected_result), output);
   }
 }
 
@@ -1509,9 +1508,8 @@
     // text created from a virtual-key code, a character code, and the
     // modifier-key status.
     const int kMaxOutputCharacters = 4096;
-    std::wstring output = base::UTF16ToWideHack(
-        GetMainFrame()->contentAsText(kMaxOutputCharacters));
-    EXPECT_EQ(kLayouts[i].expected_result, output);
+    base::string16 output = GetMainFrame()->contentAsText(kMaxOutputCharacters);
+    EXPECT_EQ(base::WideToUTF16(kLayouts[i].expected_result), output);
   }
 #else
   NOTIMPLEMENTED();
@@ -2018,9 +2016,9 @@
   // Copy the document content to std::wstring and compare with the
   // expected result.
   const int kMaxOutputCharacters = 256;
-  std::wstring output = base::UTF16ToWideHack(
+  std::string output = base::UTF16ToUTF8(
       GetMainFrame()->contentAsText(kMaxOutputCharacters));
-  EXPECT_EQ(output, L"hello \n\nworld");
+  EXPECT_EQ(output, "hello \n\nworld");
 }
 
 // This test ensures that a RenderFrame object is created for the top level
@@ -2032,7 +2030,7 @@
 TEST_F(RenderViewImplTest, GetSSLStatusOfFrame) {
   LoadHTML("<!DOCTYPE html><html><body></body></html>");
 
-  WebFrame* frame = GetMainFrame();
+  WebLocalFrame* frame = GetMainFrame();
   SSLStatus ssl_status = view()->GetSSLStatusOfFrame(frame);
   EXPECT_FALSE(net::IsCertStatusError(ssl_status.cert_status));
 
diff --git a/content/renderer/render_view_browsertest_mac.mm b/content/renderer/render_view_browsertest_mac.mm
index 93174c8..b2473c6 100644
--- a/content/renderer/render_view_browsertest_mac.mm
+++ b/content/renderer/render_view_browsertest_mac.mm
@@ -9,6 +9,7 @@
 #include "content/public/test/render_view_test.h"
 #include "content/renderer/render_view_impl.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/WebKit/public/web/WebLocalFrame.h"
 #include "webkit/common/webpreferences.h"
 
 #include <Cocoa/Cocoa.h>
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
index 8cb6d43..48642be 100644
--- a/content/renderer/render_view_impl.cc
+++ b/content/renderer/render_view_impl.cc
@@ -34,6 +34,7 @@
 #include "cc/base/switches.h"
 #include "content/child/appcache/appcache_dispatcher.h"
 #include "content/child/appcache/web_application_cache_host_impl.h"
+#include "content/child/child_shared_bitmap_manager.h"
 #include "content/child/child_thread.h"
 #include "content/child/npapi/webplugin_delegate_impl.h"
 #include "content/child/request_extra_data.h"
@@ -100,7 +101,6 @@
 #include "content/renderer/media/webmediaplayer_params.h"
 #include "content/renderer/memory_benchmarking_extension.h"
 #include "content/renderer/mhtml_generator.h"
-#include "content/renderer/notification_provider.h"
 #include "content/renderer/push_messaging_dispatcher.h"
 #include "content/renderer/render_frame_impl.h"
 #include "content/renderer/render_process.h"
@@ -438,15 +438,6 @@
   return DeviceScaleEnsuresTextQuality(device_scale_factor);
 }
 
-static bool ShouldUseAcceleratedCompositingForScrollableFrames(
-    float device_scale_factor) {
-  if (RenderThreadImpl::current() &&
-      !RenderThreadImpl::current()->is_lcd_text_enabled())
-    return true;
-
-  return DeviceScaleEnsuresTextQuality(device_scale_factor);
-}
-
 static bool ShouldUseCompositedScrollingForFrames(
     float device_scale_factor) {
   if (RenderThreadImpl::current() &&
@@ -519,6 +510,8 @@
 static void ConvertToFaviconSizes(
     const blink::WebVector<blink::WebSize>& web_sizes,
     std::vector<gfx::Size>* sizes) {
+  DCHECK(sizes->empty());
+  sizes->reserve(web_sizes.size());
   for (size_t i = 0; i < web_sizes.size(); ++i)
     sizes->push_back(gfx::Size(web_sizes[i]));
 }
@@ -618,6 +611,17 @@
     item_list.push_back(item);
   }
 
+  for (std::vector<DropData::FileSystemFileInfo>::const_iterator it =
+           drop_data.file_system_files.begin();
+       it != drop_data.file_system_files.end();
+       ++it) {
+    WebDragData::Item item;
+    item.storageType = WebDragData::Item::StorageTypeFileSystemFile;
+    item.fileSystemURL = it->url;
+    item.fileSystemFileSize = it->size;
+    item_list.push_back(item);
+  }
+
   for (std::map<base::string16, base::string16>::const_iterator it =
            drop_data.custom_data.begin();
        it != drop_data.custom_data.end();
@@ -642,7 +646,8 @@
     : RenderWidget(blink::WebPopupTypeNone,
                    params->screen_info,
                    params->swapped_out,
-                   params->hidden),
+                   params->hidden,
+                   params->never_visible),
       webkit_preferences_(params->webkit_prefs),
       send_content_state_immediately_(false),
       enabled_bindings_(0),
@@ -666,7 +671,6 @@
       cached_has_main_frame_horizontal_scrollbar_(false),
       cached_has_main_frame_vertical_scrollbar_(false),
       has_scrolled_focused_editable_node_into_rect_(false),
-      notification_provider_(NULL),
       push_messaging_dispatcher_(NULL),
       geolocation_dispatcher_(NULL),
       input_tag_speech_dispatcher_(NULL),
@@ -710,12 +714,6 @@
   // Ensure we start with a valid next_page_id_ from the browser.
   DCHECK_GE(next_page_id_, 0);
 
-#if defined(ENABLE_NOTIFICATIONS)
-  notification_provider_ = new NotificationProvider(this);
-#else
-  notification_provider_ = NULL;
-#endif
-
   webwidget_ = WebView::create(this);
   webwidget_mouse_lock_target_.reset(new WebWidgetLockTarget(webwidget_));
 
@@ -769,8 +767,6 @@
       ShouldUseTransitionCompositing(device_scale_factor_));
   webview()->settings()->setAcceleratedCompositingForFixedRootBackgroundEnabled(
       ShouldUseAcceleratedFixedRootBackground(device_scale_factor_));
-  webview()->settings()->setAcceleratedCompositingForScrollableFramesEnabled(
-      ShouldUseAcceleratedCompositingForScrollableFrames(device_scale_factor_));
   webview()->settings()->setCompositedScrollingForFramesEnabled(
       ShouldUseCompositedScrollingForFrames(device_scale_factor_));
   webview()->settings()
@@ -792,6 +788,10 @@
   if (!params->frame_name.empty())
     webview()->mainFrame()->setName(params->frame_name);
 
+  // TODO(davidben): Move this state from Blink into content.
+  if (params->window_was_created_with_opener)
+    webview()->setOpenedByDOM();
+
   OnSetRendererPrefs(params->renderer_prefs);
 
 #if defined(ENABLE_WEBRTC)
@@ -847,6 +847,10 @@
 }
 
 RenderViewImpl::~RenderViewImpl() {
+  for (BitmapMap::iterator it = disambiguation_bitmaps_.begin();
+       it != disambiguation_bitmaps_.end();
+       ++it)
+    delete it->second;
   history_page_ids_.clear();
 
   base::debug::TraceLog::GetInstance()->RemoveProcessLabel(routing_id_);
@@ -917,6 +921,7 @@
 /*static*/
 RenderViewImpl* RenderViewImpl::Create(
     int32 opener_id,
+    bool window_was_created_with_opener,
     const RendererPreferences& renderer_prefs,
     const WebPreferences& webkit_prefs,
     int32 routing_id,
@@ -927,11 +932,13 @@
     bool is_renderer_created,
     bool swapped_out,
     bool hidden,
+    bool never_visible,
     int32 next_page_id,
     const blink::WebScreenInfo& screen_info,
     AccessibilityMode accessibility_mode) {
   DCHECK(routing_id != MSG_ROUTING_NONE);
   RenderViewImplParams params(opener_id,
+                              window_was_created_with_opener,
                               renderer_prefs,
                               webkit_prefs,
                               routing_id,
@@ -942,6 +949,7 @@
                               is_renderer_created,
                               swapped_out,
                               hidden,
+                              never_visible,
                               next_page_id,
                               screen_info,
                               accessibility_mode);
@@ -1144,8 +1152,8 @@
     IPC_MESSAGE_HANDLER(ViewMsg_EnableViewSourceMode, OnEnableViewSourceMode)
     IPC_MESSAGE_HANDLER(ViewMsg_SetAccessibilityMode, OnSetAccessibilityMode)
     IPC_MESSAGE_HANDLER(ViewMsg_DisownOpener, OnDisownOpener)
-    IPC_MESSAGE_HANDLER(ViewMsg_ReleaseDisambiguationPopupDIB,
-                        OnReleaseDisambiguationPopupDIB)
+    IPC_MESSAGE_HANDLER(ViewMsg_ReleaseDisambiguationPopupBitmap,
+                        OnReleaseDisambiguationPopupBitmap)
     IPC_MESSAGE_HANDLER(ViewMsg_WindowSnapshotCompleted,
                         OnWindowSnapshotCompleted)
 #if defined(OS_ANDROID)
@@ -1433,8 +1441,6 @@
   if (RenderWidgetCompositor* rwc = compositor()) {
     latency_info_swap_promise_monitor =
         rwc->CreateLatencyInfoSwapPromiseMonitor(&latency_info).Pass();
-  } else {
-    latency_info_.push_back(latency_info);
   }
   ScheduleCompositeWithForcedRedraw();
 }
@@ -1507,19 +1513,11 @@
 
   WebUserGestureIndicator::consumeUserGesture();
 
-  WebPreferences transferred_preferences = webkit_preferences_;
-
-  // Unless accelerated compositing has been explicitly disabled from the
-  // command line (e.g. via the blacklist or about:flags) re-enable it for
-  // new views that get spawned by this view. This gets around the issue that
-  // background extension pages disable accelerated compositing via web prefs
-  // but can themselves spawn a visible render view which should be allowed
-  // use gpu acceleration.
-  if (!webkit_preferences_.accelerated_compositing_enabled) {
-    const CommandLine& command_line = *CommandLine::ForCurrentProcess();
-    if (!command_line.HasSwitch(switches::kDisableAcceleratedCompositing))
-      transferred_preferences.accelerated_compositing_enabled = true;
-  }
+  // While this view may be a background extension page, it can spawn a visible
+  // render view. So we just assume that the new one is not another background
+  // page instead of passing on our own value.
+  // TODO(vangelis): Can we tell if the new view will be a background page?
+  bool never_visible = false;
 
   // The initial hidden state for the RenderViewImpl here has to match what the
   // browser will eventually decide for the given disposition. Since we have to
@@ -1528,8 +1526,9 @@
   // disagrees.
   RenderViewImpl* view = RenderViewImpl::Create(
       routing_id_,
+      true,  // window_was_created_with_opener
       renderer_preferences_,
-      transferred_preferences,
+      webkit_preferences_,
       routing_id,
       main_frame_routing_id,
       surface_id,
@@ -1538,7 +1537,8 @@
       true,              // is_renderer_created
       false,             // swapped_out
       params.disposition == NEW_BACKGROUND_TAB,  // hidden
-      1,                                         // next_page_id
+      never_visible,
+      1,  // next_page_id
       screen_info_,
       accessibility_mode_);
   view->opened_by_user_gesture_ = params.user_gesture;
@@ -1595,10 +1595,6 @@
                     PrintPage(frame, handling_input_event_));
 }
 
-blink::WebNotificationPresenter* RenderViewImpl::notificationPresenter() {
-  return notification_provider_;
-}
-
 bool RenderViewImpl::enumerateChosenDirectory(
     const WebString& path,
     WebFileChooserCompletion* chooser_completion) {
@@ -2001,25 +1997,6 @@
       webwidget_mouse_lock_target_.get());
 }
 
-// FIXME: To be removed as soon as chromium and blink side changes land
-// didActivateCompositor with parameters is still kept in order to land
-// these changes s-chromium - https://codereview.chromium.org/137893025/.
-// s-blink - https://codereview.chromium.org/138523003/
-void RenderViewImpl::didActivateCompositor(int input_handler_identifier) {
-#if !defined(OS_MACOSX)  // many events are unhandled - http://crbug.com/138003
-  InputHandlerManager* input_handler_manager =
-      RenderThreadImpl::current()->input_handler_manager();
-  if (input_handler_manager) {
-     input_handler_manager->AddInputHandler(
-        routing_id_,
-        compositor_->GetInputHandler(),
-        AsWeakPtr());
-  }
-#endif
-
-  RenderWidget::didActivateCompositor(input_handler_identifier);
-}
-
 void RenderViewImpl::didActivateCompositor() {
 #if !defined(OS_MACOSX)  // many events are unhandled - http://crbug.com/138003
   InputHandlerManager* input_handler_manager =
@@ -2427,7 +2404,7 @@
   WebVector<WebIconURL> icon_urls = frame->iconURLs(icon_type);
   std::vector<FaviconURL> urls;
   for (size_t i = 0; i < icon_urls.size(); i++) {
-    std::vector<gfx::Size> sizes(icon_urls[i].sizes().size());
+    std::vector<gfx::Size> sizes;
     ConvertToFaviconSizes(icon_urls[i].sizes(), &sizes);
     urls.push_back(FaviconURL(
         icon_urls[i].iconURL(), ToFaviconType(icon_urls[i].iconType()), sizes));
@@ -2776,7 +2753,7 @@
 }
 
 float RenderViewImpl::GetFilteredTimePerFrame() const {
-  return filtered_time_per_frame();
+  return 0.0f;
 }
 
 blink::WebPageVisibilityState RenderViewImpl::GetVisibilityState() const {
@@ -3659,11 +3636,6 @@
   ClearEditCommands();
 }
 
-void RenderViewImpl::WillProcessUserGesture() {
-  FOR_EACH_OBSERVER(
-      RenderViewObserver, observers_, WillProcessUserGesture());
-}
-
 bool RenderViewImpl::WillHandleMouseEvent(const blink::WebMouseEvent& event) {
   possible_drag_event_info_.event_source =
       ui::DragDropTypes::DRAG_EVENT_SOURCE_MOUSE;
@@ -3893,16 +3865,13 @@
     webview()->setDeviceScaleFactor(device_scale_factor);
     webview()->settings()->setAcceleratedCompositingForFixedPositionEnabled(
         ShouldUseFixedPositionCompositing(device_scale_factor_));
-  webview()->settings()->setAcceleratedCompositingForOverflowScrollEnabled(
-      ShouldUseAcceleratedCompositingForOverflowScroll(device_scale_factor_));
+    webview()->settings()->setAcceleratedCompositingForOverflowScrollEnabled(
+        ShouldUseAcceleratedCompositingForOverflowScroll(device_scale_factor_));
     webview()->settings()->setAcceleratedCompositingForTransitionEnabled(
         ShouldUseTransitionCompositing(device_scale_factor_));
     webview()->settings()->
         setAcceleratedCompositingForFixedRootBackgroundEnabled(
             ShouldUseAcceleratedFixedRootBackground(device_scale_factor_));
-    webview()->settings()->setAcceleratedCompositingForScrollableFramesEnabled(
-        ShouldUseAcceleratedCompositingForScrollableFrames(
-            device_scale_factor_));
     webview()->settings()->setCompositedScrollingForFramesEnabled(
         ShouldUseCompositedScrollingForFrames(device_scale_factor_));
   }
@@ -4395,27 +4364,28 @@
     case TAP_MULTIPLE_TARGETS_STRATEGY_POPUP: {
       gfx::Size canvas_size =
           gfx::ToCeiledSize(gfx::ScaleSize(zoom_rect.size(), new_total_scale));
-      TransportDIB* transport_dib = NULL;
+      cc::SharedBitmapManager* manager =
+          RenderThreadImpl::current()->shared_bitmap_manager();
+      scoped_ptr<cc::SharedBitmap> shared_bitmap =
+          manager->AllocateSharedBitmap(canvas_size);
       {
-        scoped_ptr<skia::PlatformCanvas> canvas(
-            RenderProcess::current()->GetDrawingCanvas(&transport_dib,
-                                                       gfx::Rect(canvas_size)));
-        if (!canvas) {
-          handled = false;
-          break;
-        }
+        SkBitmap bitmap;
+        SkImageInfo info = SkImageInfo::MakeN32Premul(canvas_size.width(),
+                                                      canvas_size.height());
+        bitmap.installPixels(info, shared_bitmap->pixels(), info.minRowBytes());
+        SkCanvas canvas(bitmap);
 
         // TODO(trchen): Cleanup the device scale factor mess.
         // device scale will be applied in WebKit
         // --> zoom_rect doesn't include device scale,
         //     but WebKit will still draw on zoom_rect * device_scale_factor_
-        canvas->scale(new_total_scale / device_scale_factor_,
-                      new_total_scale / device_scale_factor_);
-        canvas->translate(-zoom_rect.x() * device_scale_factor_,
-                          -zoom_rect.y() * device_scale_factor_);
+        canvas.scale(new_total_scale / device_scale_factor_,
+                     new_total_scale / device_scale_factor_);
+        canvas.translate(-zoom_rect.x() * device_scale_factor_,
+                         -zoom_rect.y() * device_scale_factor_);
 
         webwidget_->paint(
-            canvas.get(),
+            &canvas,
             zoom_rect,
             WebWidget::ForceSoftwareRenderingAndIgnoreGPUResidentContent);
       }
@@ -4425,7 +4395,9 @@
       Send(new ViewHostMsg_ShowDisambiguationPopup(routing_id_,
                                                    physical_window_zoom_rect,
                                                    canvas_size,
-                                                   transport_dib->id()));
+                                                   shared_bitmap->id()));
+      cc::SharedBitmapId id = shared_bitmap->id();
+      disambiguation_bitmaps_[id] = shared_bitmap.release();
       handled = true;
       break;
     }
@@ -4497,10 +4469,12 @@
   media_stream_client_ = media_stream_client;
 }
 
-void RenderViewImpl::OnReleaseDisambiguationPopupDIB(
-    TransportDIB::Handle dib_handle) {
-  TransportDIB* dib = TransportDIB::CreateWithHandle(dib_handle);
-  RenderProcess::current()->ReleaseTransportDIB(dib);
+void RenderViewImpl::OnReleaseDisambiguationPopupBitmap(
+    const cc::SharedBitmapId& id) {
+  BitmapMap::iterator it = disambiguation_bitmaps_.find(id);
+  DCHECK(it != disambiguation_bitmaps_.end());
+  delete it->second;
+  disambiguation_bitmaps_.erase(it);
 }
 
 void RenderViewImpl::DidCommitCompositorFrame() {
@@ -4524,7 +4498,7 @@
   std::vector<FaviconURL> urls;
   for (size_t i = 0; i < icon_urls.size(); i++) {
     WebURL url = icon_urls[i].iconURL();
-    std::vector<gfx::Size> sizes(icon_urls[i].sizes().size());
+    std::vector<gfx::Size> sizes;
     ConvertToFaviconSizes(icon_urls[i].sizes(), &sizes);
     if (!url.isEmpty())
       urls.push_back(
diff --git a/content/renderer/render_view_impl.h b/content/renderer/render_view_impl.h
index 167a243..21e6c23 100644
--- a/content/renderer/render_view_impl.h
+++ b/content/renderer/render_view_impl.h
@@ -22,6 +22,7 @@
 #include "base/timer/timer.h"
 #include "build/build_config.h"
 #include "cc/input/top_controls_state.h"
+#include "cc/resources/shared_bitmap.h"
 #include "content/common/content_export.h"
 #include "content/common/drag_event_source_info.h"
 #include "content/common/edit_command.h"
@@ -46,7 +47,6 @@
 #include "third_party/WebKit/public/web/WebConsoleMessage.h"
 #include "third_party/WebKit/public/web/WebDataSource.h"
 #include "third_party/WebKit/public/web/WebElement.h"
-#include "third_party/WebKit/public/web/WebFrameClient.h"
 #include "third_party/WebKit/public/web/WebHistoryItem.h"
 #include "third_party/WebKit/public/web/WebIconURL.h"
 #include "third_party/WebKit/public/web/WebInputEvent.h"
@@ -148,7 +148,6 @@
 class MediaStreamDispatcher;
 class MouseLockDispatcher;
 class NavigationState;
-class NotificationProvider;
 class PepperPluginInstanceImpl;
 class PushMessagingDispatcher;
 class RenderViewObserver;
@@ -175,15 +174,17 @@
 class CONTENT_EXPORT RenderViewImpl
     : public RenderWidget,
       NON_EXPORTED_BASE(public blink::WebViewClient),
-      NON_EXPORTED_BASE(public blink::WebFrameClient),
       NON_EXPORTED_BASE(public blink::WebPageSerializerClient),
       public RenderView,
       NON_EXPORTED_BASE(public WebMediaPlayerDelegate),
       public base::SupportsWeakPtr<RenderViewImpl> {
  public:
   // Creates a new RenderView. |opener_id| is the routing ID of the RenderView
-  // responsible for creating this RenderView.
+  // responsible for creating this RenderView. Note that if the original opener
+  // has been closed, |window_was_created_with_opener| will be true and
+  // |opener_id| will be MSG_ROUTING_NONE.
   static RenderViewImpl* Create(int32 opener_id,
+                                bool window_was_created_with_opener,
                                 const RendererPreferences& renderer_prefs,
                                 const WebPreferences& webkit_prefs,
                                 int32 routing_id,
@@ -194,6 +195,7 @@
                                 bool is_renderer_created,
                                 bool swapped_out,
                                 bool hidden,
+                                bool never_visible,
                                 int32 next_page_id,
                                 const blink::WebScreenInfo& screen_info,
                                 AccessibilityMode accessibility_mode);
@@ -407,11 +409,6 @@
   virtual bool requestPointerLock();
   virtual void requestPointerUnlock();
   virtual bool isPointerLocked();
-  // FIXME: To be removed as soon as chromium and blink side changes land
-  // didActivateCompositor with parameters is still kept in order to land
-  // these changes s-chromium - https://codereview.chromium.org/137893025/.
-  // s-blink - https://codereview.chromium.org/138523003/
-  virtual void didActivateCompositor(int input_handler_identifier);
   virtual void didActivateCompositor() OVERRIDE;
   virtual void didHandleGestureEvent(const blink::WebGestureEvent& event,
                                      bool event_cancelled) OVERRIDE;
@@ -431,7 +428,6 @@
       blink::WebExternalPopupMenuClient* popup_menu_client);
   virtual blink::WebStorageNamespace* createSessionStorageNamespace();
   virtual void printPage(blink::WebLocalFrame* frame);
-  virtual blink::WebNotificationPresenter* notificationPresenter();
   virtual bool enumerateChosenDirectory(
       const blink::WebString& path,
       blink::WebFileChooserCompletion* chooser_completion);
@@ -467,6 +463,7 @@
       const blink::WebGestureEvent& event,
       const blink::WebVector<blink::WebRect>& target_rects);
 #endif
+  virtual blink::WebString acceptLanguages();
   virtual void navigateBackForwardSoon(int offset);
   virtual int historyBackListCount();
   virtual int historyForwardListCount();
@@ -505,49 +502,6 @@
   virtual void didScrollWithKeyboard(const blink::WebSize& delta);
 #endif
 
-  // blink::WebFrameClient implementation -------------------------------------
-
-  virtual void didAccessInitialDocument(blink::WebLocalFrame* frame);
-  virtual void didDisownOpener(blink::WebLocalFrame* frame);
-  virtual void frameDetached(blink::WebFrame* frame);
-  virtual void willClose(blink::WebFrame* frame);
-  virtual void didMatchCSS(
-      blink::WebLocalFrame* frame,
-      const blink::WebVector<blink::WebString>& newly_matching_selectors,
-      const blink::WebVector<blink::WebString>& stopped_matching_selectors);
-  virtual void willSendSubmitEvent(blink::WebLocalFrame* frame,
-                                   const blink::WebFormElement& form);
-  virtual void willSubmitForm(blink::WebLocalFrame* frame,
-                              const blink::WebFormElement& form);
-  virtual void didCreateDataSource(blink::WebLocalFrame* frame,
-                                   blink::WebDataSource* datasource);
-  virtual void didFailProvisionalLoad(blink::WebLocalFrame* frame,
-                                      const blink::WebURLError& error);
-  virtual void didClearWindowObject(blink::WebLocalFrame* frame, int world_id);
-  virtual void didCreateDocumentElement(blink::WebLocalFrame* frame);
-  virtual void didReceiveTitle(blink::WebLocalFrame* frame,
-                               const blink::WebString& title,
-                               blink::WebTextDirection direction);
-  virtual void didChangeIcon(blink::WebLocalFrame*, blink::WebIconURL::Type);
-  virtual void didFinishDocumentLoad(blink::WebLocalFrame* frame);
-  virtual void didHandleOnloadEvents(blink::WebLocalFrame* frame);
-  virtual void didFailLoad(blink::WebLocalFrame* frame,
-                           const blink::WebURLError& error);
-  virtual void didFinishLoad(blink::WebLocalFrame* frame);
-  virtual void didUpdateCurrentHistoryItem(blink::WebLocalFrame* frame);
-  virtual void didFinishResourceLoad(blink::WebLocalFrame* frame,
-                                     unsigned identifier);
-  virtual void didChangeScrollOffset(blink::WebLocalFrame* frame);
-  virtual void didFirstVisuallyNonEmptyLayout(blink::WebLocalFrame*);
-  virtual void didChangeContentsSize(blink::WebLocalFrame* frame,
-                                     const blink::WebSize& size);
-  virtual bool willCheckAndDispatchMessageEvent(
-      blink::WebLocalFrame* sourceFrame,
-      blink::WebFrame* targetFrame,
-      blink::WebSecurityOrigin targetOrigin,
-      blink::WebDOMMessageEvent event);
-  virtual blink::WebString acceptLanguages();
-
   // blink::WebPageSerializerClient implementation ----------------------------
 
   virtual void didSerializeDataForFrame(
@@ -609,7 +563,6 @@
   virtual void DidFlushPaint() OVERRIDE;
   virtual gfx::Vector2d GetScrollOffset() OVERRIDE;
   virtual void DidHandleKeyEvent() OVERRIDE;
-  virtual void WillProcessUserGesture() OVERRIDE;
   virtual bool WillHandleMouseEvent(
       const blink::WebMouseEvent& event) OVERRIDE;
   virtual bool WillHandleGestureEvent(
@@ -725,6 +678,53 @@
     CONNECTION_ERROR,
   };
 
+  // Old WebFrameClient implementations ----------------------------------------
+
+  // RenderViewImpl used to be a WebFrameClient, but now RenderFrameImpl is the
+  // WebFrameClient. However, many implementations of WebFrameClient methods
+  // still live here and are called from RenderFrameImpl. These implementations
+  // are to be moved to RenderFrameImpl <http://crbug.com/361761>.
+
+  void didAccessInitialDocument(blink::WebLocalFrame* frame);
+  void didDisownOpener(blink::WebLocalFrame* frame);
+  void frameDetached(blink::WebFrame* frame);
+  void willClose(blink::WebFrame* frame);
+  void didMatchCSS(
+      blink::WebLocalFrame* frame,
+      const blink::WebVector<blink::WebString>& newly_matching_selectors,
+      const blink::WebVector<blink::WebString>& stopped_matching_selectors);
+  void willSendSubmitEvent(blink::WebLocalFrame* frame,
+                           const blink::WebFormElement& form);
+  void willSubmitForm(blink::WebLocalFrame* frame,
+                      const blink::WebFormElement& form);
+  void didCreateDataSource(blink::WebLocalFrame* frame,
+                           blink::WebDataSource* datasource);
+  void didFailProvisionalLoad(blink::WebLocalFrame* frame,
+                              const blink::WebURLError& error);
+  void didClearWindowObject(blink::WebLocalFrame* frame, int world_id);
+  void didCreateDocumentElement(blink::WebLocalFrame* frame);
+  void didReceiveTitle(blink::WebLocalFrame* frame,
+                       const blink::WebString& title,
+                       blink::WebTextDirection direction);
+  void didChangeIcon(blink::WebLocalFrame*, blink::WebIconURL::Type);
+  void didFinishDocumentLoad(blink::WebLocalFrame* frame);
+  void didHandleOnloadEvents(blink::WebLocalFrame* frame);
+  void didFailLoad(blink::WebLocalFrame* frame,
+                   const blink::WebURLError& error);
+  void didFinishLoad(blink::WebLocalFrame* frame);
+  void didUpdateCurrentHistoryItem(blink::WebLocalFrame* frame);
+  void didFinishResourceLoad(blink::WebLocalFrame* frame,
+                             unsigned identifier);
+  void didChangeScrollOffset(blink::WebLocalFrame* frame);
+  void didFirstVisuallyNonEmptyLayout(blink::WebLocalFrame*);
+  void didChangeContentsSize(blink::WebLocalFrame* frame,
+                             const blink::WebSize& size);
+  bool willCheckAndDispatchMessageEvent(
+      blink::WebLocalFrame* sourceFrame,
+      blink::WebFrame* targetFrame,
+      blink::WebSecurityOrigin targetOrigin,
+      blink::WebDOMMessageEvent event);
+
   static bool IsReload(const FrameMsg_Navigate_Params& params);
 
   static Referrer GetReferrerFromRequest(
@@ -819,7 +819,7 @@
                         const blink::WebPluginAction& action);
   void OnMoveOrResizeStarted();
   void OnPostMessageEvent(const ViewMsg_PostMessage_Params& params);
-  void OnReleaseDisambiguationPopupDIB(TransportDIB::Handle dib_handle);
+  void OnReleaseDisambiguationPopupBitmap(const cc::SharedBitmapId& id);
   void OnResetPageEncodingToDefault();
   void OnSetAccessibilityMode(AccessibilityMode new_mode);
   void OnSetActive(bool active);
@@ -1167,9 +1167,6 @@
   // along with the RenderView automatically.  This is why we just store
   // weak references.
 
-  // Holds a reference to the service which provides desktop notifications.
-  NotificationProvider* notification_provider_;
-
   // The push messaging dispatcher attached to this view, lazily initialized.
   PushMessagingDispatcher* push_messaging_dispatcher_;
 
@@ -1321,6 +1318,9 @@
   // constructors call the AddObservers method of RenderViewImpl.
   scoped_ptr<StatsCollectionObserver> stats_collection_observer_;
 
+  typedef std::map<cc::SharedBitmapId, cc::SharedBitmap*> BitmapMap;
+  BitmapMap disambiguation_bitmaps_;
+
   // ---------------------------------------------------------------------------
   // ADDING NEW DATA? Please see if it fits appropriately in one of the above
   // sections rather than throwing it randomly at the end. If you're adding a
diff --git a/content/renderer/render_view_impl_params.cc b/content/renderer/render_view_impl_params.cc
index 54ef8af..a3f303e 100644
--- a/content/renderer/render_view_impl_params.cc
+++ b/content/renderer/render_view_impl_params.cc
@@ -8,6 +8,7 @@
 
 RenderViewImplParams::RenderViewImplParams(
     int32 opener_id,
+    bool window_was_created_with_opener,
     const RendererPreferences& renderer_prefs,
     const WebPreferences& webkit_prefs,
     int32 routing_id,
@@ -18,10 +19,12 @@
     bool is_renderer_created,
     bool swapped_out,
     bool hidden,
+    bool never_visible,
     int32 next_page_id,
     const blink::WebScreenInfo& screen_info,
     AccessibilityMode accessibility_mode)
     : opener_id(opener_id),
+      window_was_created_with_opener(window_was_created_with_opener),
       renderer_prefs(renderer_prefs),
       webkit_prefs(webkit_prefs),
       routing_id(routing_id),
@@ -32,6 +35,7 @@
       is_renderer_created(is_renderer_created),
       swapped_out(swapped_out),
       hidden(hidden),
+      never_visible(never_visible),
       next_page_id(next_page_id),
       screen_info(screen_info),
       accessibility_mode(accessibility_mode) {}
diff --git a/content/renderer/render_view_impl_params.h b/content/renderer/render_view_impl_params.h
index 6872dc0..4dcd753 100644
--- a/content/renderer/render_view_impl_params.h
+++ b/content/renderer/render_view_impl_params.h
@@ -24,6 +24,7 @@
 // Container for all parameters passed to RenderViewImpl's constructor.
 struct CONTENT_EXPORT RenderViewImplParams {
   RenderViewImplParams(int32 opener_id,
+                       bool window_was_created_with_opener,
                        const RendererPreferences& renderer_prefs,
                        const WebPreferences& webkit_prefs,
                        int32 routing_id,
@@ -34,12 +35,14 @@
                        bool is_renderer_created,
                        bool swapped_out,
                        bool hidden,
+                       bool never_visible,
                        int32 next_page_id,
                        const blink::WebScreenInfo& screen_info,
                        AccessibilityMode accessibility_mode);
   ~RenderViewImplParams();
 
   int32 opener_id;
+  bool window_was_created_with_opener;
   const RendererPreferences& renderer_prefs;
   const WebPreferences& webkit_prefs;
   int32 routing_id;
@@ -50,6 +53,7 @@
   bool is_renderer_created;
   bool swapped_out;
   bool hidden;
+  bool never_visible;
   int32 next_page_id;
   const blink::WebScreenInfo& screen_info;
   AccessibilityMode accessibility_mode;
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc
index c547aad..ba8879e 100644
--- a/content/renderer/render_widget.cc
+++ b/content/renderer/render_widget.cc
@@ -348,23 +348,21 @@
 RenderWidget::RenderWidget(blink::WebPopupType popup_type,
                            const blink::WebScreenInfo& screen_info,
                            bool swapped_out,
-                           bool hidden)
+                           bool hidden,
+                           bool never_visible)
     : routing_id_(MSG_ROUTING_NONE),
       surface_id_(0),
       webwidget_(NULL),
       opener_id_(MSG_ROUTING_NONE),
       init_complete_(false),
-      current_paint_buf_(NULL),
+      has_frame_pending_(false),
       overdraw_bottom_height_(0.f),
       next_paint_flags_(0),
-      filtered_time_per_frame_(0.0f),
-      update_reply_pending_(false),
       auto_resize_mode_(false),
       need_update_rect_for_auto_resize_(false),
-      using_asynchronous_swapbuffers_(false),
-      num_swapbuffers_complete_pending_(0),
       did_show_(false),
       is_hidden_(hidden),
+      never_visible_(never_visible),
       is_fullscreen_(false),
       needs_repainting_on_restore_(false),
       has_focus_(false),
@@ -398,8 +396,6 @@
   if (!swapped_out)
     RenderProcess::current()->AddRefProcess();
   DCHECK(RenderThread::Get());
-  has_disable_gpu_vsync_switch_ = CommandLine::ForCurrentProcess()->HasSwitch(
-      switches::kDisableGpuVsync);
   is_threaded_compositing_enabled_ =
       CommandLine::ForCurrentProcess()->HasSwitch(
           switches::kEnableThreadedCompositing);
@@ -412,15 +408,6 @@
 
 RenderWidget::~RenderWidget() {
   DCHECK(!webwidget_) << "Leaking our WebWidget!";
-  STLDeleteElements(&updates_pending_swap_);
-  if (current_paint_buf_) {
-    if (RenderProcess::current()) {
-      // If the RenderProcess is already gone, it will have released all DIBs
-      // in its destructor anyway.
-      RenderProcess::current()->ReleaseTransportDIB(current_paint_buf_);
-    }
-    current_paint_buf_ = NULL;
-  }
 
   // If we are swapped out, we have released already.
   if (!is_swapped_out_ && RenderProcess::current())
@@ -433,7 +420,7 @@
                                    const blink::WebScreenInfo& screen_info) {
   DCHECK(opener_id != MSG_ROUTING_NONE);
   scoped_refptr<RenderWidget> widget(
-      new RenderWidget(popup_type, screen_info, false, false));
+      new RenderWidget(popup_type, screen_info, false, false, false));
   if (widget->Init(opener_id)) {  // adds reference on success.
     return widget.get();
   }
@@ -497,12 +484,13 @@
 
   init_complete_ = true;
 
-  if (webwidget_ && is_threaded_compositing_enabled_) {
-    webwidget_->enterForceCompositingMode(true);
+  if (webwidget_) {
+    if (is_threaded_compositing_enabled_ || ForceCompositingModeEnabled()) {
+      webwidget_->enterForceCompositingMode(true);
+    }
   }
-  if (compositor_) {
-    compositor_->setSurfaceReady();
-  }
+  if (compositor_)
+    StartCompositor();
   DoDeferredUpdate();
 
   Send(new ViewHostMsg_RenderViewReady(routing_id_));
@@ -602,7 +590,6 @@
     IPC_MESSAGE_HANDLER(ViewMsg_WasHidden, OnWasHidden)
     IPC_MESSAGE_HANDLER(ViewMsg_WasShown, OnWasShown)
     IPC_MESSAGE_HANDLER(ViewMsg_WasSwappedOut, OnWasSwappedOut)
-    IPC_MESSAGE_HANDLER(ViewMsg_UpdateRect_ACK, OnUpdateRectAck)
     IPC_MESSAGE_HANDLER(ViewMsg_SetInputMethodActive, OnSetInputMethodActive)
     IPC_MESSAGE_HANDLER(ViewMsg_CandidateWindowShown, OnCandidateWindowShown)
     IPC_MESSAGE_HANDLER(ViewMsg_CandidateWindowUpdated,
@@ -679,7 +666,7 @@
 
     size_ = new_size;
 
-    paint_aggregator_.ClearPendingUpdate();
+    has_frame_pending_ = false;
 
     // When resizing, we want to wait to paint before ACK'ing the resize.  This
     // ensures that we only resize as fast as we can paint.  We only need to
@@ -689,7 +676,7 @@
     if (resizing_mode_selector_->NeverUsesSynchronousResize()) {
       // Resize should have caused an invalidation of the entire view.
       DCHECK(new_size.IsEmpty() || is_accelerated_compositing_active_ ||
-             paint_aggregator_.HasPendingUpdate());
+             has_frame_pending_);
     }
   } else if (!resizing_mode_selector_->is_synchronous_mode()) {
     resize_ack = NO_RESIZE_ACK;
@@ -775,11 +762,11 @@
 
     gfx::Rect old_damage_rect = gfx::IntersectRects(view_rect, resizer_rect_);
     if (!old_damage_rect.IsEmpty())
-      paint_aggregator_.InvalidateRect(old_damage_rect);
+      has_frame_pending_ = true;
 
     gfx::Rect new_damage_rect = gfx::IntersectRects(view_rect, resizer_rect);
     if (!new_damage_rect.IsEmpty())
-      paint_aggregator_.InvalidateRect(new_damage_rect);
+      has_frame_pending_ = true;
 
     resizer_rect_ = resizer_rect;
 
@@ -834,43 +821,6 @@
   pending_window_rect_count_--;
 }
 
-void RenderWidget::OnUpdateRectAck() {
-  TRACE_EVENT0("renderer", "RenderWidget::OnUpdateRectAck");
-  DCHECK(update_reply_pending_);
-  update_reply_pending_ = false;
-
-  // If we sent an UpdateRect message with a zero-sized bitmap, then we should
-  // have no current paint buffer.
-  if (current_paint_buf_) {
-    RenderProcess::current()->ReleaseTransportDIB(current_paint_buf_);
-    current_paint_buf_ = NULL;
-  }
-
-  // If swapbuffers is still pending, then defer the update until the
-  // swapbuffers occurs.
-  if (num_swapbuffers_complete_pending_ >= kMaxSwapBuffersPending) {
-    TRACE_EVENT0("renderer", "EarlyOut_SwapStillPending");
-    return;
-  }
-
-  // Notify subclasses that software rendering was flushed to the screen.
-  if (!is_accelerated_compositing_active_) {
-    DidFlushPaint();
-  }
-
-  // Continue painting if necessary...
-  DoDeferredUpdateAndSendInputAck();
-}
-
-bool RenderWidget::SupportsAsynchronousSwapBuffers() {
-  // Contexts using the command buffer support asynchronous swapbuffers.
-  // See RenderWidget::CreateOutputSurface().
-  if (RenderThreadImpl::current()->compositor_message_loop_proxy().get())
-    return false;
-
-  return true;
-}
-
 GURL RenderWidget::GetURLForGraphicsContext3D() {
   return GURL();
 }
@@ -880,6 +830,9 @@
 }
 
 scoped_ptr<cc::OutputSurface> RenderWidget::CreateOutputSurface(bool fallback) {
+  // For widgets that are never visible, we don't start the compositor, so we
+  // never get a request for a cc::OutputSurface.
+  DCHECK(!never_visible_);
 
 #if defined(OS_ANDROID)
   if (SynchronousCompositorFactory* factory =
@@ -913,9 +866,6 @@
             context_provider));
   }
   if (!context_provider.get()) {
-    if (!command_line.HasSwitch(switches::kEnableSoftwareCompositing))
-      return scoped_ptr<cc::OutputSurface>();
-
     scoped_ptr<cc::SoftwareOutputDevice> software_device(
         new CompositorSoftwareOutputDevice());
 
@@ -958,35 +908,12 @@
 
 void RenderWidget::OnSwapBuffersAborted() {
   TRACE_EVENT0("renderer", "RenderWidget::OnSwapBuffersAborted");
-  while (!updates_pending_swap_.empty()) {
-    ViewHostMsg_UpdateRect* msg = updates_pending_swap_.front();
-    updates_pending_swap_.pop_front();
-    // msg can be NULL if the swap doesn't correspond to an DoDeferredUpdate
-    // compositing pass, hence doesn't require an UpdateRect message.
-    if (msg)
-      Send(msg);
-  }
-  num_swapbuffers_complete_pending_ = 0;
-  using_asynchronous_swapbuffers_ = false;
   // Schedule another frame so the compositor learns about it.
   scheduleComposite();
 }
 
 void RenderWidget::OnSwapBuffersPosted() {
   TRACE_EVENT0("renderer", "RenderWidget::OnSwapBuffersPosted");
-
-  if (using_asynchronous_swapbuffers_) {
-    ViewHostMsg_UpdateRect* msg = NULL;
-    // pending_update_params_ can be NULL if the swap doesn't correspond to an
-    // DoDeferredUpdate compositing pass, hence doesn't require an UpdateRect
-    // message.
-    if (pending_update_params_) {
-      msg = new ViewHostMsg_UpdateRect(routing_id_, *pending_update_params_);
-      pending_update_params_.reset();
-    }
-    updates_pending_swap_.push_back(msg);
-    num_swapbuffers_complete_pending_++;
-  }
 }
 
 void RenderWidget::OnSwapBuffersComplete() {
@@ -994,49 +921,6 @@
 
   // Notify subclasses that composited rendering was flushed to the screen.
   DidFlushPaint();
-
-  // When compositing deactivates, we reset the swapbuffers pending count.  The
-  // swapbuffers acks may still arrive, however.
-  if (num_swapbuffers_complete_pending_ == 0) {
-    TRACE_EVENT0("renderer", "EarlyOut_ZeroSwapbuffersPending");
-    return;
-  }
-  DCHECK(!updates_pending_swap_.empty());
-  ViewHostMsg_UpdateRect* msg = updates_pending_swap_.front();
-  updates_pending_swap_.pop_front();
-  // msg can be NULL if the swap doesn't correspond to an DoDeferredUpdate
-  // compositing pass, hence doesn't require an UpdateRect message.
-  if (msg)
-    Send(msg);
-  num_swapbuffers_complete_pending_--;
-
-  // If update reply is still pending, then defer the update until that reply
-  // occurs.
-  if (update_reply_pending_) {
-    TRACE_EVENT0("renderer", "EarlyOut_UpdateReplyPending");
-    return;
-  }
-
-  // If we are not accelerated rendering, then this is a stale swapbuffers from
-  // when we were previously rendering. However, if an invalidation task is not
-  // posted, there may be software rendering work pending. In that case, don't
-  // early out.
-  if (!is_accelerated_compositing_active_ && invalidation_task_posted_) {
-    TRACE_EVENT0("renderer", "EarlyOut_AcceleratedCompositingOff");
-    return;
-  }
-
-  // Do not call DoDeferredUpdate unless there's animation work to be done or
-  // a real invalidation. This prevents rendering in response to a swapbuffers
-  // callback coming back after we've navigated away from the page that
-  // generated it.
-  if (!animation_update_pending_ && !paint_aggregator_.HasPendingUpdate()) {
-    TRACE_EVENT0("renderer", "EarlyOut_NoPendingUpdate");
-    return;
-  }
-
-  // Continue painting if necessary...
-  DoDeferredUpdateAndSendInputAck();
 }
 
 void RenderWidget::OnHandleInputEvent(const blink::WebInputEvent* input_event,
@@ -1069,8 +953,6 @@
     latency_info_swap_promise_monitor =
         compositor_->CreateLatencyInfoSwapPromiseMonitor(&swap_latency_info)
             .Pass();
-  } else {
-    latency_info_.push_back(latency_info);
   }
 
   if (base::TimeTicks::IsHighResNowFastAndReliable()) {
@@ -1095,9 +977,6 @@
     counter_for_type->Add(delta);
   }
 
-  if (WebInputEvent::isUserGestureEventType(input_event->type))
-    WillProcessUserGesture();
-
   bool prevent_default = false;
   if (WebInputEvent::isMouseEventType(input_event->type)) {
     const WebMouseEvent& mouse_event =
@@ -1179,7 +1058,7 @@
       input_event->type == WebInputEvent::MouseWheel ||
       input_event->type == WebInputEvent::TouchMove;
 
-  bool frame_pending = paint_aggregator_.HasPendingUpdate();
+  bool frame_pending = has_frame_pending_;
   if (is_accelerated_compositing_active_) {
     frame_pending = compositor_ &&
                     compositor_->BeginMainFrameRequested();
@@ -1357,77 +1236,9 @@
     TRACE_EVENT0("renderer", "EarlyOut_NoAnimationUpdatePending");
     return;
   }
-  if (!animation_floor_time_.is_null() && IsRenderingVSynced()) {
-    // Record when we fired (according to base::Time::Now()) relative to when
-    // we posted the task to quantify how much the base::Time/base::TimeTicks
-    // skew is affecting animations.
-    base::TimeDelta animation_callback_delay = base::Time::Now() -
-        (animation_floor_time_ - base::TimeDelta::FromMilliseconds(16));
-    UMA_HISTOGRAM_CUSTOM_TIMES("Renderer4.AnimationCallbackDelayTime",
-                               animation_callback_delay,
-                               base::TimeDelta::FromMilliseconds(0),
-                               base::TimeDelta::FromMilliseconds(30),
-                               25);
-  }
   DoDeferredUpdateAndSendInputAck();
 }
 
-void RenderWidget::AnimateIfNeeded() {
-  if (!animation_update_pending_)
-    return;
-
-  // Target 60FPS if vsync is on. Go as fast as we can if vsync is off.
-  base::TimeDelta animationInterval = IsRenderingVSynced() ?
-      base::TimeDelta::FromMilliseconds(16) : base::TimeDelta();
-
-  base::Time now = base::Time::Now();
-
-  // animation_floor_time_ is the earliest time that we should animate when
-  // using the dead reckoning software scheduler. If we're using swapbuffers
-  // complete callbacks to rate limit, we can ignore this floor.
-  if (now >= animation_floor_time_ || num_swapbuffers_complete_pending_ > 0) {
-    TRACE_EVENT0("renderer", "RenderWidget::AnimateIfNeeded")
-    animation_floor_time_ = now + animationInterval;
-    // Set a timer to call us back after animationInterval before
-    // running animation callbacks so that if a callback requests another
-    // we'll be sure to run it at the proper time.
-    animation_timer_.Stop();
-    animation_timer_.Start(FROM_HERE, animationInterval, this,
-                           &RenderWidget::AnimationCallback);
-    animation_update_pending_ = false;
-    if (is_accelerated_compositing_active_ && compositor_) {
-      compositor_->UpdateAnimations(base::TimeTicks::Now());
-    } else {
-      double frame_begin_time =
-        (base::TimeTicks::Now() - base::TimeTicks()).InSecondsF();
-      webwidget_->animate(frame_begin_time);
-    }
-    return;
-  }
-  TRACE_EVENT0("renderer", "EarlyOut_AnimatedTooRecently");
-  if (!animation_timer_.IsRunning()) {
-    // This code uses base::Time::Now() to calculate the floor and next fire
-    // time because javascript's Date object uses base::Time::Now().  The
-    // message loop uses base::TimeTicks, which on windows can have a
-    // different granularity than base::Time.
-    // The upshot of all this is that this function might be called before
-    // base::Time::Now() has advanced past the animation_floor_time_.  To
-    // avoid exposing this delay to javascript, we keep posting delayed
-    // tasks until base::Time::Now() has advanced far enough.
-    base::TimeDelta delay = animation_floor_time_ - now;
-    animation_timer_.Start(FROM_HERE, delay, this,
-                           &RenderWidget::AnimationCallback);
-  }
-}
-
-bool RenderWidget::IsRenderingVSynced() {
-  // TODO(nduca): Forcing a driver to disable vsync (e.g. in a control panel) is
-  // not caught by this check. This will lead to artificially low frame rates
-  // for people who force vsync off at a driver level and expect Chrome to speed
-  // up.
-  return !has_disable_gpu_vsync_switch_;
-}
-
 void RenderWidget::InvalidationCallback() {
   TRACE_EVENT0("renderer", "RenderWidget::InvalidationCallback");
   invalidation_task_posted_ = false;
@@ -1445,226 +1256,8 @@
   FlushPendingInputEventAck();
 }
 
+// TODO(danakj): Remove this when everything is ForceCompositingMode.
 void RenderWidget::DoDeferredUpdate() {
-  TRACE_EVENT0("renderer", "RenderWidget::DoDeferredUpdate");
-  TRACE_EVENT_SCOPED_SAMPLING_STATE("Chrome", "Paint");
-
-  if (!webwidget_)
-    return;
-
-  if (!init_complete_) {
-    TRACE_EVENT0("renderer", "EarlyOut_InitNotComplete");
-    return;
-  }
-  if (update_reply_pending_) {
-    TRACE_EVENT0("renderer", "EarlyOut_UpdateReplyPending");
-    return;
-  }
-  if (is_accelerated_compositing_active_ &&
-      num_swapbuffers_complete_pending_ >= kMaxSwapBuffersPending) {
-    TRACE_EVENT0("renderer", "EarlyOut_MaxSwapBuffersPending");
-    return;
-  }
-
-  // Suppress updating when we are hidden.
-  if (is_hidden_ || size_.IsEmpty() || is_swapped_out_) {
-    paint_aggregator_.ClearPendingUpdate();
-    needs_repainting_on_restore_ = true;
-    TRACE_EVENT0("renderer", "EarlyOut_NotVisible");
-    return;
-  }
-
-  // Tracking of frame rate jitter
-  base::TimeTicks frame_begin_ticks = gfx::FrameTime::Now();
-  InstrumentWillBeginFrame(0);
-  AnimateIfNeeded();
-
-  // Layout may generate more invalidation.  It may also enable the
-  // GPU acceleration, so make sure to run layout before we send the
-  // GpuRenderingActivated message.
-  webwidget_->layout();
-
-  // Check for whether we need to track swap buffers. We need to do that after
-  // layout() because it may have switched us to accelerated compositing.
-  if (is_accelerated_compositing_active_)
-    using_asynchronous_swapbuffers_ = SupportsAsynchronousSwapBuffers();
-
-  // The following two can result in further layout and possibly
-  // enable GPU acceleration so they need to be called before any painting
-  // is done.
-  UpdateTextInputType();
-#if defined(OS_ANDROID)
-  UpdateSelectionRootBounds();
-#endif
-  UpdateSelectionBounds();
-
-  // Suppress painting if nothing is dirty.  This has to be done after updating
-  // animations running layout as these may generate further invalidations.
-  if (!paint_aggregator_.HasPendingUpdate()) {
-    TRACE_EVENT0("renderer", "EarlyOut_NoPendingUpdate");
-    InstrumentDidCancelFrame();
-    return;
-  }
-
-  if (!is_accelerated_compositing_active_ &&
-      !is_threaded_compositing_enabled_ &&
-      (ForceCompositingModeEnabled() ||
-          was_accelerated_compositing_ever_active_)) {
-    webwidget_->enterForceCompositingMode(true);
-  }
-
-  if (!last_do_deferred_update_time_.is_null()) {
-    base::TimeDelta delay = frame_begin_ticks - last_do_deferred_update_time_;
-    if (is_accelerated_compositing_active_) {
-      UMA_HISTOGRAM_CUSTOM_TIMES("Renderer4.AccelDoDeferredUpdateDelay",
-                                 delay,
-                                 base::TimeDelta::FromMilliseconds(1),
-                                 base::TimeDelta::FromMilliseconds(120),
-                                 60);
-    } else {
-      UMA_HISTOGRAM_CUSTOM_TIMES("Renderer4.SoftwareDoDeferredUpdateDelay",
-                                 delay,
-                                 base::TimeDelta::FromMilliseconds(1),
-                                 base::TimeDelta::FromMilliseconds(120),
-                                 60);
-    }
-
-    // Calculate filtered time per frame:
-    float frame_time_elapsed = static_cast<float>(delay.InSecondsF());
-    filtered_time_per_frame_ =
-        0.9f * filtered_time_per_frame_ + 0.1f * frame_time_elapsed;
-  }
-  last_do_deferred_update_time_ = frame_begin_ticks;
-
-  if (!is_accelerated_compositing_active_) {
-    legacy_software_mode_stats_->IncrementFrameCount(1, true);
-    cc::BenchmarkInstrumentation::IssueMainThreadRenderingStatsEvent(
-        legacy_software_mode_stats_->main_thread_rendering_stats());
-    legacy_software_mode_stats_->AccumulateAndClearMainThreadStats();
-  }
-
-  // OK, save the pending update to a local since painting may cause more
-  // invalidation.  Some WebCore rendering objects only layout when painted.
-  PaintAggregator::PendingUpdate update;
-  paint_aggregator_.PopPendingUpdate(&update);
-
-  gfx::Rect scroll_damage = update.GetScrollDamage();
-  gfx::Rect bounds = gfx::UnionRects(update.GetPaintBounds(), scroll_damage);
-
-  DCHECK(!pending_update_params_.get());
-  pending_update_params_.reset(new ViewHostMsg_UpdateRect_Params);
-  pending_update_params_->scroll_delta = update.scroll_delta;
-  pending_update_params_->scroll_rect = update.scroll_rect;
-  pending_update_params_->view_size = size_;
-  pending_update_params_->plugin_window_moves.swap(plugin_window_moves_);
-  pending_update_params_->flags = next_paint_flags_;
-  pending_update_params_->scroll_offset = GetScrollOffset();
-  pending_update_params_->needs_ack = true;
-  pending_update_params_->scale_factor = device_scale_factor_;
-  next_paint_flags_ = 0;
-  need_update_rect_for_auto_resize_ = false;
-
-  if (!is_accelerated_compositing_active_)
-    pending_update_params_->latency_info.swap(latency_info_);
-
-  latency_info_.clear();
-
-  if (!is_accelerated_compositing_active_) {
-    // Compute a buffer for painting and cache it.
-
-    bool fractional_scale = device_scale_factor_ -
-        static_cast<int>(device_scale_factor_) != 0;
-    if (fractional_scale) {
-      // Damage might not be DIP aligned. Inflate damage to compensate.
-      bounds.Inset(-1, -1);
-      bounds.Intersect(gfx::Rect(size_));
-    }
-
-    gfx::Rect pixel_bounds = gfx::ToEnclosingRect(
-        gfx::ScaleRect(bounds, device_scale_factor_));
-
-    scoped_ptr<skia::PlatformCanvas> canvas(
-        RenderProcess::current()->GetDrawingCanvas(&current_paint_buf_,
-                                                   pixel_bounds));
-    if (!canvas) {
-      NOTREACHED();
-      return;
-    }
-
-    // We may get back a smaller canvas than we asked for.
-    // TODO(darin): This seems like it could cause painting problems!
-    DCHECK_EQ(pixel_bounds.width(), canvas->getDevice()->width());
-    DCHECK_EQ(pixel_bounds.height(), canvas->getDevice()->height());
-    pixel_bounds.set_width(canvas->getDevice()->width());
-    pixel_bounds.set_height(canvas->getDevice()->height());
-    bounds.set_width(pixel_bounds.width() / device_scale_factor_);
-    bounds.set_height(pixel_bounds.height() / device_scale_factor_);
-
-    HISTOGRAM_COUNTS_100("MPArch.RW_PaintRectCount", update.paint_rects.size());
-
-    pending_update_params_->bitmap = current_paint_buf_->id();
-    pending_update_params_->bitmap_rect = bounds;
-
-    std::vector<gfx::Rect>& copy_rects = pending_update_params_->copy_rects;
-    // The scroll damage is just another rectangle to paint and copy.
-    copy_rects.swap(update.paint_rects);
-    if (!scroll_damage.IsEmpty())
-      copy_rects.push_back(scroll_damage);
-
-    for (size_t i = 0; i < copy_rects.size(); ++i) {
-      gfx::Rect rect = copy_rects[i];
-      if (fractional_scale) {
-        // Damage might not be DPI aligned.  Inflate rect to compensate.
-        rect.Inset(-1, -1);
-      }
-      PaintRect(rect, pixel_bounds.origin(), canvas.get());
-    }
-
-    // Software FPS tick for performance tests. The accelerated path traces the
-    // frame events in didCommitAndDrawCompositorFrame. See
-    // tab_capture_performancetest.cc.
-    // NOTE: Tests may break if this event is renamed or moved.
-    UNSHIPPED_TRACE_EVENT_INSTANT0("test_fps", "TestFrameTickSW",
-                                   TRACE_EVENT_SCOPE_THREAD);
-  } else {  // Accelerated compositing path
-    // Begin painting.
-    // If painting is done via the gpu process then we don't set any damage
-    // rects to save the browser process from doing unecessary work.
-    pending_update_params_->bitmap_rect = bounds;
-    pending_update_params_->scroll_rect = gfx::Rect();
-    // We don't need an ack, because we're not sharing a DIB with the browser.
-    // If it needs to (e.g. composited UI), the GPU process does its own ACK
-    // with the browser for the GPU surface.
-    pending_update_params_->needs_ack = false;
-    Composite(frame_begin_ticks);
-  }
-
-  // If we're holding a pending input event ACK, send the ACK before sending the
-  // UpdateReply message so we can receive another input event before the
-  // UpdateRect_ACK on platforms where the UpdateRect_ACK is sent from within
-  // the UpdateRect IPC message handler.
-  FlushPendingInputEventAck();
-
-  // If Composite() called SwapBuffers, pending_update_params_ will be reset (in
-  // OnSwapBuffersPosted), meaning a message has been added to the
-  // updates_pending_swap_ queue, that will be sent later. Otherwise, we send
-  // the message now.
-  if (pending_update_params_) {
-    // sending an ack to browser process that the paint is complete...
-    update_reply_pending_ = pending_update_params_->needs_ack;
-    Send(new ViewHostMsg_UpdateRect(routing_id_, *pending_update_params_));
-    pending_update_params_.reset();
-  }
-
-  // If we're software rendering then we're done initiating the paint.
-  if (!is_accelerated_compositing_active_)
-    DidInitiatePaint();
-}
-
-void RenderWidget::Composite(base::TimeTicks frame_begin_time) {
-  DCHECK(is_accelerated_compositing_active_);
-  if (compositor_)  // TODO(jamesr): Figure out how this can be null.
-    compositor_->Composite(frame_begin_time);
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -1677,16 +1270,11 @@
   if (damaged_rect.IsEmpty())
     return;
 
-  paint_aggregator_.InvalidateRect(damaged_rect);
+  has_frame_pending_ = true;
 
   // We may not need to schedule another call to DoDeferredUpdate.
   if (invalidation_task_posted_)
     return;
-  if (!paint_aggregator_.HasPendingUpdate())
-    return;
-  if (update_reply_pending_ ||
-      num_swapbuffers_complete_pending_ >= kMaxSwapBuffersPending)
-    return;
 
   // When GPU rendering, combine pending animations and invalidations into
   // a single update.
@@ -1718,16 +1306,11 @@
   if (damaged_rect.IsEmpty())
     return;
 
-  paint_aggregator_.ScrollRect(gfx::Vector2d(dx, dy), damaged_rect);
+  has_frame_pending_ = true;
 
   // We may not need to schedule another call to DoDeferredUpdate.
   if (invalidation_task_posted_)
     return;
-  if (!paint_aggregator_.HasPendingUpdate())
-    return;
-  if (update_reply_pending_ ||
-      num_swapbuffers_complete_pending_ >= kMaxSwapBuffersPending)
-    return;
 
   // When GPU rendering, combine pending animations and invalidations into
   // a single update.
@@ -1750,11 +1333,11 @@
   if (size_.width() != new_size.width || size_.height() != new_size.height) {
     size_ = new_size;
 
-    // If we don't clear PaintAggregator after changing autoResize state, then
-    // we might end up in a situation where bitmap_rect is larger than the
-    // view_size. By clearing PaintAggregator, we ensure that we don't end up
+    // If we don't clear has_frame_pending_ after changing autoResize state,
+    // then we might end up in a situation where bitmap_rect is larger than the
+    // view_size. By clearing has_frame_pending_, we ensure that we don't end up
     // with invalid damage rects.
-    paint_aggregator_.ClearPendingUpdate();
+    has_frame_pending_ = false;
 
     if (resizing_mode_selector_->is_synchronous_mode()) {
       WebRect new_pos(rootWindowRect().x,
@@ -1779,38 +1362,6 @@
     compositor_->setViewportSize(size_, physical_backing_size_);
 }
 
-// FIXME: To be removed as soon as chromium and blink side changes land
-// didActivateCompositor with parameters is still kept in order to land
-// these changes s-chromium - https://codereview.chromium.org/137893025/.
-// s-blink - https://codereview.chromium.org/138523003/
-void RenderWidget::didActivateCompositor(int input_handler_identifier) {
-  TRACE_EVENT0("gpu", "RenderWidget::didActivateCompositor");
-
-#if !defined(OS_MACOSX)
-  if (!is_accelerated_compositing_active_) {
-    // When not in accelerated compositing mode, in certain cases (e.g. waiting
-    // for a resize or if no backing store) the RenderWidgetHost is blocking the
-    // browser's UI thread for some time, waiting for an UpdateRect. If we are
-    // going to switch to accelerated compositing, the GPU process may need
-    // round-trips to the browser's UI thread before finishing the frame,
-    // causing deadlocks if we delay the UpdateRect until we receive the
-    // OnSwapBuffersComplete.  So send a dummy message that will unblock the
-    // browser's UI thread. This is not necessary on Mac, because SwapBuffers
-    // now unblocks GetBackingStore on Mac.
-    Send(new ViewHostMsg_UpdateIsDelayed(routing_id_));
-  }
-#endif
-
-  is_accelerated_compositing_active_ = true;
-  Send(new ViewHostMsg_DidActivateAcceleratedCompositing(
-      routing_id_, is_accelerated_compositing_active_));
-
-  if (!was_accelerated_compositing_ever_active_) {
-    was_accelerated_compositing_ever_active_ = true;
-    webwidget_->enterForceCompositingMode(true);
-  }
-}
-
 void RenderWidget::didActivateCompositor() {
   TRACE_EVENT0("gpu", "RenderWidget::didActivateCompositor");
 
@@ -1846,26 +1397,20 @@
   Send(new ViewHostMsg_DidActivateAcceleratedCompositing(
       routing_id_, is_accelerated_compositing_active_));
 
-  if (using_asynchronous_swapbuffers_)
-    using_asynchronous_swapbuffers_ = false;
-
   // In single-threaded mode, we exit force compositing mode and re-enter in
   // DoDeferredUpdate() if appropriate. In threaded compositing mode,
   // DoDeferredUpdate() is bypassed and WebKit is responsible for exiting and
   // entering force compositing mode at the appropriate times.
-  if (!is_threaded_compositing_enabled_)
+  if (!is_threaded_compositing_enabled_ && !ForceCompositingModeEnabled())
     webwidget_->enterForceCompositingMode(false);
 }
 
 void RenderWidget::initializeLayerTreeView() {
   compositor_ = RenderWidgetCompositor::Create(
       this, is_threaded_compositing_enabled_);
-  if (!compositor_)
-    return;
-
   compositor_->setViewportSize(size_, physical_backing_size_);
   if (init_complete_)
-    compositor_->setSurfaceReady();
+    StartCompositor();
 }
 
 blink::WebLayerTreeView* RenderWidget::layerTreeView() {
@@ -1920,9 +1465,6 @@
   // Notify subclasses threaded composited rendering was flushed to the screen.
   DidFlushPaint();
 
-  if (update_reply_pending_)
-    return;
-
   if (!next_paint_flags_ &&
       !need_update_rect_for_auto_resize_ &&
       !plugin_window_moves_.size()) {
@@ -1934,7 +1476,6 @@
   params.plugin_window_moves.swap(plugin_window_moves_);
   params.flags = next_paint_flags_;
   params.scroll_offset = GetScrollOffset();
-  params.needs_ack = false;
   params.scale_factor = device_scale_factor_;
 
   Send(new ViewHostMsg_UpdateRect(routing_id_, params));
@@ -2658,6 +2199,14 @@
 #endif
 }
 
+void RenderWidget::StartCompositor() {
+  // For widgets that are never visible, we don't need the compositor to run
+  // at all.
+  if (never_visible_)
+    return;
+  compositor_->setSurfaceReady();
+}
+
 void RenderWidget::SchedulePluginMove(const WebPluginGeometry& move) {
   size_t i = 0;
   for (; i < plugin_window_moves_.size(); ++i) {
diff --git a/content/renderer/render_widget.h b/content/renderer/render_widget.h
index 13574d0..b7d74fb 100644
--- a/content/renderer/render_widget.h
+++ b/content/renderer/render_widget.h
@@ -20,7 +20,6 @@
 #include "content/common/cursors/webcursor.h"
 #include "content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.h"
 #include "content/common/input/synthetic_gesture_params.h"
-#include "content/renderer/paint_aggregator.h"
 #include "ipc/ipc_listener.h"
 #include "ipc/ipc_sender.h"
 #include "third_party/WebKit/public/platform/WebRect.h"
@@ -96,7 +95,6 @@
   int32 surface_id() const { return surface_id_; }
   blink::WebWidget* webwidget() const { return webwidget_; }
   gfx::Size size() const { return size_; }
-  float filtered_time_per_frame() const { return filtered_time_per_frame_; }
   bool has_focus() const { return has_focus_; }
   bool is_fullscreen() const { return is_fullscreen_; }
   bool is_hidden() const { return is_hidden_; }
@@ -127,11 +125,6 @@
   virtual void didScrollRect(int dx, int dy,
                              const blink::WebRect& clipRect);
   virtual void didAutoResize(const blink::WebSize& new_size);
-  // FIXME: To be removed as soon as chromium and blink side changes land
-  // didActivateCompositor with parameters is still kept in order to land
-  // these changes s-chromium - https://codereview.chromium.org/137893025/.
-  // s-blink - https://codereview.chromium.org/138523003/
-  virtual void didActivateCompositor(int input_handler_identifier);
   virtual void didActivateCompositor() OVERRIDE;
   virtual void didDeactivateCompositor();
   virtual void initializeLayerTreeView();
@@ -159,6 +152,9 @@
   virtual void didHandleGestureEvent(const blink::WebGestureEvent& event,
                                      bool event_cancelled);
 
+  // Begins the compositor's scheduler to start producing frames.
+  void StartCompositor();
+
   // Called when a plugin is moved.  These events are queued up and sent with
   // the next paint or scroll message to the host.
   void SchedulePluginMove(const WebPluginGeometry& move);
@@ -275,7 +271,8 @@
   RenderWidget(blink::WebPopupType popup_type,
                const blink::WebScreenInfo& screen_info,
                bool swapped_out,
-               bool hidden);
+               bool hidden,
+               bool never_visible);
 
   virtual ~RenderWidget();
 
@@ -306,16 +303,13 @@
   // Paints a border at the given rect for debugging purposes.
   void PaintDebugBorder(const gfx::Rect& rect, SkCanvas* canvas);
 
-  bool IsRenderingVSynced();
   void AnimationCallback();
-  void AnimateIfNeeded();
   void InvalidationCallback();
   void FlushPendingInputEventAck();
   void DoDeferredUpdateAndSendInputAck();
   void DoDeferredUpdate();
   void DoDeferredClose();
   void DoDeferredSetWindowRect(const blink::WebRect& pos);
-  virtual void Composite(base::TimeTicks frame_begin_time);
 
   // Set the background of the render widget to a bitmap. The bitmap will be
   // tiled in both directions if it isn't big enough to fill the area. This is
@@ -354,7 +348,6 @@
   virtual void OnWasHidden();
   virtual void OnWasShown(bool needs_repainting);
   virtual void OnWasSwappedOut();
-  void OnUpdateRectAck();
   void OnCreateVideoAck(int32 video_id);
   void OnUpdateVideoAck(int32 video_id);
   void OnRequestMoveAck();
@@ -407,12 +400,6 @@
   virtual void DidInitiatePaint() {}
   virtual void DidFlushPaint() {}
 
-  // Override and return true when the widget is rendered with a graphics
-  // context that supports asynchronous swapbuffers. When returning true, the
-  // subclass must call OnSwapBuffersPosted() when swap is posted,
-  // OnSwapBuffersComplete() when swaps complete, and OnSwapBuffersAborted if
-  // the context is lost.
-  virtual bool SupportsAsynchronousSwapBuffers();
   virtual GURL GetURLForGraphicsContext3D();
 
   virtual bool ForceCompositingModeEnabled();
@@ -480,10 +467,6 @@
   // just handled.
   virtual void DidHandleKeyEvent() {}
 
-  // Called by OnHandleInputEvent() to notify subclasses that a user gesture
-  // event will be processed.
-  virtual void WillProcessUserGesture() {}
-
   // Called by OnHandleInputEvent() to notify subclasses that a mouse event is
   // about to be handled.
   // Returns true if no further handling is needed. In that case, the event
@@ -563,10 +546,7 @@
   // The size of the RenderWidget.
   gfx::Size size_;
 
-  // The TransportDIB that is being used to transfer an image to the browser.
-  TransportDIB* current_paint_buf_;
-
-  PaintAggregator paint_aggregator_;
+  bool has_frame_pending_;
 
   // The size of the view's backing surface in non-DPI-adjusted pixels.
   gfx::Size physical_backing_size_;
@@ -581,13 +561,6 @@
   // Flags for the next ViewHostMsg_UpdateRect message.
   int next_paint_flags_;
 
-  // Filtered time per frame based on UpdateRect messages.
-  float filtered_time_per_frame_;
-
-  // True if we are expecting an UpdateRect_ACK message (i.e., that a
-  // UpdateRect message has been sent).
-  bool update_reply_pending_;
-
   // Whether the WebWidget is in auto resize mode, which is used for example
   // by extension popups.
   bool auto_resize_mode_;
@@ -596,27 +569,15 @@
   // an already-completed auto-resize.
   bool need_update_rect_for_auto_resize_;
 
-  // True if the underlying graphics context supports asynchronous swap.
-  // Cached on the RenderWidget because determining support is costly.
-  bool using_asynchronous_swapbuffers_;
-
-  // Number of OnSwapBuffersComplete we are expecting. Incremented each time
-  // WebWidget::composite has been been performed when the RenderWidget subclass
-  // SupportsAsynchronousSwapBuffers. Decremented in OnSwapBuffers. Will block
-  // rendering.
-  int num_swapbuffers_complete_pending_;
-
-  // When accelerated rendering is on, is the maximum number of swapbuffers that
-  // can be outstanding before we start throttling based on
-  // OnSwapBuffersComplete callback.
-  static const int kMaxSwapBuffersPending = 2;
-
   // Set to true if we should ignore RenderWidget::Show calls.
   bool did_show_;
 
   // Indicates that we shouldn't bother generated paint events.
   bool is_hidden_;
 
+  // Indicates that we are never visible, so never produce graphical output.
+  bool never_visible_;
+
   // Indicates that we are in fullscreen mode.
   bool is_fullscreen_;
 
@@ -715,27 +676,12 @@
   bool was_accelerated_compositing_ever_active_;
 
   base::OneShotTimer<RenderWidget> animation_timer_;
-  base::Time animation_floor_time_;
   bool animation_update_pending_;
   bool invalidation_task_posted_;
 
-  bool has_disable_gpu_vsync_switch_;
-  base::TimeTicks last_do_deferred_update_time_;
-
   // Stats for legacy software mode
   scoped_ptr<cc::RenderingStatsInstrumentation> legacy_software_mode_stats_;
 
-  // UpdateRect parameters for the current compositing pass. This is used to
-  // pass state between DoDeferredUpdate and OnSwapBuffersPosted.
-  scoped_ptr<ViewHostMsg_UpdateRect_Params> pending_update_params_;
-
-  // Queue of UpdateRect messages corresponding to a SwapBuffers. We want to
-  // delay sending of UpdateRect until the corresponding SwapBuffers has been
-  // executed. Since we can have several in flight, we need to keep them in a
-  // queue. Note: some SwapBuffers may not correspond to an update, in which
-  // case NULL is added to the queue.
-  std::deque<ViewHostMsg_UpdateRect*> updates_pending_swap_;
-
   // Properties of the screen hosting this RenderWidget instance.
   blink::WebScreenInfo screen_info_;
 
@@ -752,10 +698,6 @@
   // Specified whether the compositor will run in its own thread.
   bool is_threaded_compositing_enabled_;
 
-  // The latency information for any current non-accelerated-compositing
-  // frame.
-  std::vector<ui::LatencyInfo> latency_info_;
-
   uint32 next_output_surface_id_;
 
 #if defined(OS_ANDROID)
diff --git a/content/renderer/render_widget_fullscreen.cc b/content/renderer/render_widget_fullscreen.cc
index d6650ae..af2c281 100644
--- a/content/renderer/render_widget_fullscreen.cc
+++ b/content/renderer/render_widget_fullscreen.cc
@@ -25,8 +25,7 @@
 
 RenderWidgetFullscreen::RenderWidgetFullscreen(
     const blink::WebScreenInfo& screen_info)
-    : RenderWidget(blink::WebPopupTypeNone, screen_info, false, false) {
-}
+    : RenderWidget(blink::WebPopupTypeNone, screen_info, false, false, false) {}
 
 RenderWidgetFullscreen::~RenderWidgetFullscreen() {}
 
diff --git a/content/renderer/render_widget_unittest.cc b/content/renderer/render_widget_unittest.cc
index 1af4faf..41dd847 100644
--- a/content/renderer/render_widget_unittest.cc
+++ b/content/renderer/render_widget_unittest.cc
@@ -31,10 +31,12 @@
 
 class TouchableRenderWidget : public RenderWidget {
  public:
-  TouchableRenderWidget() : RenderWidget(blink::WebPopupTypeNone,
-                                         blink::WebScreenInfo(),
-                                         false,
-                                         false) {}
+  TouchableRenderWidget()
+      : RenderWidget(blink::WebPopupTypeNone,
+                     blink::WebScreenInfo(),
+                     false,
+                     false,
+                     false) {}
 
   void SetTouchRegion(const std::vector<gfx::Rect>& rects) {
     rects_ = rects;
diff --git a/content/renderer/renderer_webkitplatformsupport_impl.cc b/content/renderer/renderer_webkitplatformsupport_impl.cc
index 39ddabb..aa46b53 100644
--- a/content/renderer/renderer_webkitplatformsupport_impl.cc
+++ b/content/renderer/renderer_webkitplatformsupport_impl.cc
@@ -38,8 +38,8 @@
 #include "content/public/common/content_switches.h"
 #include "content/public/common/webplugininfo.h"
 #include "content/public/renderer/content_renderer_client.h"
-#include "content/renderer/device_orientation/device_motion_event_pump.h"
-#include "content/renderer/device_orientation/device_orientation_event_pump.h"
+#include "content/renderer/device_sensors/device_motion_event_pump.h"
+#include "content/renderer/device_sensors/device_orientation_event_pump.h"
 #include "content/renderer/dom_storage/webstoragenamespace_impl.h"
 #include "content/renderer/gamepad_shared_memory_reader.h"
 #include "content/renderer/media/audio_decoder.h"
@@ -145,8 +145,8 @@
     g_test_device_motion_data = LAZY_INSTANCE_INITIALIZER;
 base::LazyInstance<blink::WebDeviceOrientationData>::Leaky
     g_test_device_orientation_data = LAZY_INSTANCE_INITIALIZER;
-base::LazyInstance<blink::WebScreenOrientation>::Leaky
-    g_test_screen_orientation_value = LAZY_INSTANCE_INITIALIZER;
+static blink::WebScreenOrientationListener*
+    g_test_screen_orientation_listener = NULL;
 
 //------------------------------------------------------------------------------
 
@@ -432,18 +432,17 @@
 
   // Check list of strict codecs to see if it is supported.
   if (net::IsStrictMediaMimeType(mime_type_ascii)) {
+    // Check if the codecs are a perfect match.
+    std::vector<std::string> strict_codecs;
+    net::ParseCodecString(ToASCIIOrEmpty(codecs), &strict_codecs, false);
+    if (net::IsSupportedStrictMediaMimeType(mime_type_ascii, strict_codecs))
+      return IsSupported;
+
     // We support the container, but no codecs were specified.
     if (codecs.isNull())
       return MayBeSupported;
 
-    // Check if the codecs are a perfect match.
-    std::vector<std::string> strict_codecs;
-    net::ParseCodecString(ToASCIIOrEmpty(codecs), &strict_codecs, false);
-    if (!net::IsSupportedStrictMediaMimeType(mime_type_ascii, strict_codecs))
-      return IsNotSupported;
-
-    // Good to go!
-    return IsSupported;
+    return IsNotSupported;
   }
 
   // If we don't recognize the codec, it's possible we support it.
@@ -1119,18 +1118,13 @@
 
 void RendererWebKitPlatformSupportImpl::setScreenOrientationListener(
     blink::WebScreenOrientationListener* listener) {
-  if (!(g_test_screen_orientation_value == 0)) {
-    if (!listener)
-      return;
-
-    // When testing, we only pretend that the screen orientation is now set to
-    // g_test_screen_orientation_value.
-    base::MessageLoopProxy::current()->PostTask(
-        FROM_HERE,
-        base::Bind(
-            &blink::WebScreenOrientationListener::didChangeScreenOrientation,
-            base::Unretained(listener),
-            g_test_screen_orientation_value.Get()));
+  if (RenderThreadImpl::current() &&
+      RenderThreadImpl::current()->layout_test_mode()) {
+    // If we are in test mode, we want to fully disable the screen orientation
+    // backend in order to let Blink get tested properly, That means that screen
+    // orientation updates have to be done manually instead of from signals sent
+    // by the browser process.
+    g_test_screen_orientation_listener = listener;
     return;
   }
 
@@ -1143,24 +1137,28 @@
 }
 
 void RendererWebKitPlatformSupportImpl::lockOrientation(
-    blink::WebScreenOrientations orientations) {
-  // No-op if we are currently using mock values.
-  if (!(g_test_screen_orientation_value == 0))
+    blink::WebScreenOrientationLockType orientation) {
+  if (RenderThreadImpl::current() &&
+      RenderThreadImpl::current()->layout_test_mode()) {
     return;
-  RenderThread::Get()->Send(new ScreenOrientationHostMsg_Lock(orientations));
+  }
+  RenderThread::Get()->Send(new ScreenOrientationHostMsg_Lock(orientation));
 }
 
 void RendererWebKitPlatformSupportImpl::unlockOrientation() {
-  // No-op if we are currently using mock values.
-  if (!(g_test_screen_orientation_value == 0))
+  if (RenderThreadImpl::current() &&
+      RenderThreadImpl::current()->layout_test_mode()) {
     return;
+  }
   RenderThread::Get()->Send(new ScreenOrientationHostMsg_Unlock);
 }
 
 // static
 void RendererWebKitPlatformSupportImpl::SetMockScreenOrientationForTesting(
-    blink::WebScreenOrientation orientation) {
-  g_test_screen_orientation_value.Get() = orientation;
+    blink::WebScreenOrientationType orientation) {
+  if (!g_test_screen_orientation_listener)
+    return;
+  g_test_screen_orientation_listener->didChangeScreenOrientation(orientation);
 }
 
 //------------------------------------------------------------------------------
diff --git a/content/renderer/renderer_webkitplatformsupport_impl.h b/content/renderer/renderer_webkitplatformsupport_impl.h
index 9fa0115..5e3ba69 100644
--- a/content/renderer/renderer_webkitplatformsupport_impl.h
+++ b/content/renderer/renderer_webkitplatformsupport_impl.h
@@ -13,6 +13,7 @@
 #include "content/renderer/webpublicsuffixlist_impl.h"
 #include "third_party/WebKit/public/platform/WebGraphicsContext3D.h"
 #include "third_party/WebKit/public/platform/WebIDBFactory.h"
+#include "third_party/WebKit/public/platform/WebScreenOrientationType.h"
 #include "webkit/renderer/compositor_bindings/web_compositor_support_impl.h"
 
 namespace base {
@@ -146,7 +147,7 @@
   virtual void cancelVibration();
   virtual void setScreenOrientationListener(
     blink::WebScreenOrientationListener*) OVERRIDE;
-  virtual void lockOrientation(blink::WebScreenOrientations) OVERRIDE;
+  virtual void lockOrientation(blink::WebScreenOrientationLockType) OVERRIDE;
   virtual void unlockOrientation() OVERRIDE;
 
   // Disables the WebSandboxSupport implementation for testing.
@@ -176,9 +177,9 @@
   // is invoked.
   static void SetMockDeviceOrientationDataForTesting(
       const blink::WebDeviceOrientationData& data);
-  // Set WebScreenOrientation to return when setScreenOrientationListener is
-  // invoked.
-  static void SetMockScreenOrientationForTesting(blink::WebScreenOrientation);
+  // Forces the screen orientation for testing purposes.
+  static void SetMockScreenOrientationForTesting(
+      blink::WebScreenOrientationType);
 
   WebDatabaseObserverImpl* web_database_observer_impl() {
     return web_database_observer_impl_.get();
diff --git a/content/renderer/resource_fetcher_browsertest.cc b/content/renderer/resource_fetcher_browsertest.cc
index 667bacf..4769183 100644
--- a/content/renderer/resource_fetcher_browsertest.cc
+++ b/content/renderer/resource_fetcher_browsertest.cc
@@ -135,7 +135,7 @@
     command_line->AppendSwitch(switches::kSingleProcess);
 #if defined(OS_WIN)
     // Don't want to try to create a GPU process.
-    command_line->AppendSwitch(switches::kDisableAcceleratedCompositing);
+    command_line->AppendSwitch(switches::kDisableGpu);
 #endif
   }
 
diff --git a/content/renderer/savable_resources_browsertest.cc b/content/renderer/savable_resources_browsertest.cc
index b80c8af..730b28b 100644
--- a/content/renderer/savable_resources_browsertest.cc
+++ b/content/renderer/savable_resources_browsertest.cc
@@ -22,7 +22,7 @@
     command_line->AppendSwitch(switches::kSingleProcess);
 #if defined(OS_WIN)
     // Don't want to try to create a GPU process.
-    command_line->AppendSwitch(switches::kDisableAcceleratedCompositing);
+    command_line->AppendSwitch(switches::kDisableGpu);
 #endif
   }
 
diff --git a/content/renderer/screen_orientation/screen_orientation_dispatcher.cc b/content/renderer/screen_orientation/screen_orientation_dispatcher.cc
index 46e8d07..3416ec5 100644
--- a/content/renderer/screen_orientation/screen_orientation_dispatcher.cc
+++ b/content/renderer/screen_orientation/screen_orientation_dispatcher.cc
@@ -30,7 +30,7 @@
 }
 
 void ScreenOrientationDispatcher::OnOrientationChange(
-    blink::WebScreenOrientation orientation) {
+    blink::WebScreenOrientationType orientation) {
   if (!listener_)
     return;
 
diff --git a/content/renderer/screen_orientation/screen_orientation_dispatcher.h b/content/renderer/screen_orientation/screen_orientation_dispatcher.h
index 3d15a6f..5aadd6e 100644
--- a/content/renderer/screen_orientation/screen_orientation_dispatcher.h
+++ b/content/renderer/screen_orientation/screen_orientation_dispatcher.h
@@ -7,7 +7,7 @@
 
 #include "base/macros.h"
 #include "content/public/renderer/render_process_observer.h"
-#include "third_party/WebKit/public/platform/WebScreenOrientation.h"
+#include "third_party/WebKit/public/platform/WebScreenOrientationType.h"
 
 namespace blink {
 class WebScreenOrientationListener;
@@ -31,7 +31,7 @@
   void setListener(blink::WebScreenOrientationListener* listener);
 
  private:
-  void OnOrientationChange(blink::WebScreenOrientation orientation);
+  void OnOrientationChange(blink::WebScreenOrientationType orientation);
 
   blink::WebScreenOrientationListener* listener_;
 
diff --git a/content/renderer/screen_orientation/screen_orientation_dispatcher_unittest.cc b/content/renderer/screen_orientation/screen_orientation_dispatcher_unittest.cc
index 966c042..acc12c2 100644
--- a/content/renderer/screen_orientation/screen_orientation_dispatcher_unittest.cc
+++ b/content/renderer/screen_orientation/screen_orientation_dispatcher_unittest.cc
@@ -20,19 +20,20 @@
   MockScreenOrientationListener();
   virtual ~MockScreenOrientationListener() {}
 
-  virtual void didChangeScreenOrientation(blink::WebScreenOrientation) OVERRIDE;
+  virtual void didChangeScreenOrientation(
+      blink::WebScreenOrientationType) OVERRIDE;
 
   bool did_change_screen_orientation() const {
     return did_change_screen_orientation_;
   }
 
-  blink::WebScreenOrientation screen_orientation() const {
+  blink::WebScreenOrientationType screen_orientation() const {
     return screen_orientation_;
   }
 
  private:
   bool did_change_screen_orientation_;
-  blink::WebScreenOrientation screen_orientation_;
+  blink::WebScreenOrientationType screen_orientation_;
 
   DISALLOW_COPY_AND_ASSIGN(MockScreenOrientationListener);
 };
@@ -43,7 +44,7 @@
 }
 
 void MockScreenOrientationListener::didChangeScreenOrientation(
-    blink::WebScreenOrientation orientation) {
+    blink::WebScreenOrientationType orientation) {
   did_change_screen_orientation_ = true;
   screen_orientation_ = orientation;
 }
diff --git a/content/renderer/service_worker/embedded_worker_context_client.cc b/content/renderer/service_worker/embedded_worker_context_client.cc
index 12ea4a7..b515650 100644
--- a/content/renderer/service_worker/embedded_worker_context_client.cc
+++ b/content/renderer/service_worker/embedded_worker_context_client.cc
@@ -82,9 +82,11 @@
 EmbeddedWorkerContextClient::EmbeddedWorkerContextClient(
     int embedded_worker_id,
     int64 service_worker_version_id,
+    const GURL& service_worker_scope,
     const GURL& script_url)
     : embedded_worker_id_(embedded_worker_id),
       service_worker_version_id_(service_worker_version_id),
+      service_worker_scope_(service_worker_scope),
       script_url_(script_url),
       sender_(ChildThread::current()->thread_safe_sender()),
       main_thread_proxy_(base::MessageLoopProxy::current()),
@@ -101,20 +103,34 @@
     const IPC::Message& msg) {
   bool handled = true;
   IPC_BEGIN_MESSAGE_MAP(EmbeddedWorkerContextClient, msg)
-    IPC_MESSAGE_HANDLER(EmbeddedWorkerContextMsg_SendMessageToWorker,
-                        OnSendMessageToWorker)
+    IPC_MESSAGE_HANDLER(EmbeddedWorkerContextMsg_MessageToWorker,
+                        OnMessageToWorker)
     IPC_MESSAGE_UNHANDLED(handled = false)
   IPC_END_MESSAGE_MAP()
   return handled;
 }
 
-void EmbeddedWorkerContextClient::SendMessageToBrowser(
+void EmbeddedWorkerContextClient::Send(IPC::Message* message) {
+  sender_->Send(message);
+}
+
+void EmbeddedWorkerContextClient::SendReplyToBrowser(
     int request_id,
     const IPC::Message& message) {
-  sender_->Send(new EmbeddedWorkerHostMsg_SendMessageToBrowser(
+  Send(new EmbeddedWorkerHostMsg_ReplyToBrowser(
       embedded_worker_id_, request_id, message));
 }
 
+blink::WebURL EmbeddedWorkerContextClient::scope() const {
+  return service_worker_scope_;
+}
+
+void EmbeddedWorkerContextClient::getClients(
+    blink::WebServiceWorkerClientsCallbacks* callbacks) {
+  DCHECK(script_context_);
+  script_context_->GetClientDocuments(callbacks);
+}
+
 void EmbeddedWorkerContextClient::workerContextFailedToStart() {
   DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread());
   DCHECK(!script_context_);
@@ -143,7 +159,7 @@
                  weak_factory_.GetWeakPtr()));
 }
 
-void EmbeddedWorkerContextClient::workerContextDestroyed() {
+void EmbeddedWorkerContextClient::willDestroyWorkerContext() {
   // At this point OnWorkerRunLoopStopped is already called, so
   // worker_task_runner_->RunsTasksOnCurrentThread() returns false
   // (while we're still on the worker thread).
@@ -159,11 +175,28 @@
     int line_number,
     int column_number,
     const blink::WebString& source_url) {
-  sender_->Send(new EmbeddedWorkerHostMsg_ReportException(
+  Send(new EmbeddedWorkerHostMsg_ReportException(
       embedded_worker_id_, error_message, line_number,
       column_number, GURL(source_url)));
 }
 
+void EmbeddedWorkerContextClient::reportConsoleMessage(
+    int source,
+    int level,
+    const blink::WebString& message,
+    int line_number,
+    const blink::WebString& source_url) {
+  EmbeddedWorkerHostMsg_ReportConsoleMessage_Params params;
+  params.source_identifier = source;
+  params.message_level = level;
+  params.message = message;
+  params.line_number = line_number;
+  params.source_url = GURL(source_url);
+
+  Send(new EmbeddedWorkerHostMsg_ReportConsoleMessage(
+      embedded_worker_id_, params));
+}
+
 void EmbeddedWorkerContextClient::didHandleActivateEvent(
     int request_id,
     blink::WebServiceWorkerEventResult result) {
@@ -198,6 +231,11 @@
       request_id, SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, response);
 }
 
+void EmbeddedWorkerContextClient::didHandleSyncEvent(int request_id) {
+  DCHECK(script_context_);
+  script_context_->DidHandleSyncEvent(request_id);
+}
+
 blink::WebServiceWorkerNetworkProvider*
 EmbeddedWorkerContextClient::createServiceWorkerNetworkProvider(
     blink::WebDataSource* data_source) {
@@ -220,12 +258,7 @@
   return new WebServiceWorkerNetworkProviderImpl();
 }
 
-void EmbeddedWorkerContextClient::didHandleSyncEvent(int request_id) {
-  DCHECK(script_context_);
-  script_context_->DidHandleSyncEvent(request_id);
-}
-
-void EmbeddedWorkerContextClient::OnSendMessageToWorker(
+void EmbeddedWorkerContextClient::OnMessageToWorker(
     int thread_id,
     int embedded_worker_id,
     int request_id,
@@ -238,7 +271,7 @@
 
 void EmbeddedWorkerContextClient::SendWorkerStarted() {
   DCHECK(worker_task_runner_->RunsTasksOnCurrentThread());
-  sender_->Send(new EmbeddedWorkerHostMsg_WorkerStarted(
+  Send(new EmbeddedWorkerHostMsg_WorkerStarted(
       WorkerTaskRunner::Instance()->CurrentWorkerId(),
       embedded_worker_id_));
 }
diff --git a/content/renderer/service_worker/embedded_worker_context_client.h b/content/renderer/service_worker/embedded_worker_context_client.h
index 76f5d95..7c86bb1 100644
--- a/content/renderer/service_worker/embedded_worker_context_client.h
+++ b/content/renderer/service_worker/embedded_worker_context_client.h
@@ -10,7 +10,9 @@
 #include "base/strings/string16.h"
 #include "content/common/service_worker/service_worker_types.h"
 #include "ipc/ipc_listener.h"
+#include "third_party/WebKit/public/platform/WebServiceWorkerClientsInfo.h"
 #include "third_party/WebKit/public/platform/WebServiceWorkerEventResult.h"
+#include "third_party/WebKit/public/platform/WebURL.h"
 #include "third_party/WebKit/public/web/WebServiceWorkerContextClient.h"
 #include "url/gurl.h"
 
@@ -48,23 +50,34 @@
 
   EmbeddedWorkerContextClient(int embedded_worker_id,
                               int64 service_worker_version_id,
+                              const GURL& service_worker_scope,
                               const GURL& script_url);
 
   virtual ~EmbeddedWorkerContextClient();
 
   bool OnMessageReceived(const IPC::Message& msg);
 
-  void SendMessageToBrowser(int request_id, const IPC::Message& message);
+  void Send(IPC::Message* message);
+
+  // TODO(kinuko): Deprecate this.
+  void SendReplyToBrowser(int request_id, const IPC::Message& message);
 
   // WebServiceWorkerContextClient overrides, some of them are just dispatched
   // on to script_context_.
+  virtual blink::WebURL scope() const;
+  virtual void getClients(blink::WebServiceWorkerClientsCallbacks*);
   virtual void workerContextFailedToStart();
   virtual void workerContextStarted(blink::WebServiceWorkerContextProxy* proxy);
-  virtual void workerContextDestroyed();
+  virtual void willDestroyWorkerContext();
   virtual void reportException(const blink::WebString& error_message,
                                int line_number,
                                int column_number,
                                const blink::WebString& source_url);
+  virtual void reportConsoleMessage(int source,
+                                    int level,
+                                    const blink::WebString& message,
+                                    int line_number,
+                                    const blink::WebString& source_url);
   virtual void didHandleActivateEvent(int request_id,
                                       blink::WebServiceWorkerEventResult);
   virtual void didHandleInstallEvent(int request_id,
@@ -73,9 +86,9 @@
   virtual void didHandleFetchEvent(
       int request_id,
       const blink::WebServiceWorkerResponse& response);
+  virtual void didHandleSyncEvent(int request_id);
   virtual blink::WebServiceWorkerNetworkProvider*
       createServiceWorkerNetworkProvider(blink::WebDataSource* data_source);
-  virtual void didHandleSyncEvent(int request_id);
 
   // TODO: Implement DevTools related method overrides.
 
@@ -85,14 +98,15 @@
   }
 
  private:
-  void OnSendMessageToWorker(int thread_id,
-                             int embedded_worker_id,
-                             int request_id,
-                             const IPC::Message& message);
+  void OnMessageToWorker(int thread_id,
+                         int embedded_worker_id,
+                         int request_id,
+                         const IPC::Message& message);
   void SendWorkerStarted();
 
   const int embedded_worker_id_;
   const int64 service_worker_version_id_;
+  const GURL service_worker_scope_;
   const GURL script_url_;
   scoped_refptr<ThreadSafeSender> sender_;
   scoped_refptr<base::MessageLoopProxy> main_thread_proxy_;
diff --git a/content/renderer/service_worker/embedded_worker_dispatcher.cc b/content/renderer/service_worker/embedded_worker_dispatcher.cc
index f901db0..82a3d33 100644
--- a/content/renderer/service_worker/embedded_worker_dispatcher.cc
+++ b/content/renderer/service_worker/embedded_worker_dispatcher.cc
@@ -58,16 +58,17 @@
   workers_.Remove(embedded_worker_id);
 }
 
-void EmbeddedWorkerDispatcher::OnStartWorker(
-    int embedded_worker_id,
-    int64 service_worker_version_id,
-    const GURL& script_url) {
+void EmbeddedWorkerDispatcher::OnStartWorker(int embedded_worker_id,
+                                             int64 service_worker_version_id,
+                                             const GURL& service_worker_scope,
+                                             const GURL& script_url) {
   DCHECK(!workers_.Lookup(embedded_worker_id));
   scoped_ptr<WorkerWrapper> wrapper(new WorkerWrapper(
       blink::WebEmbeddedWorker::create(
           new EmbeddedWorkerContextClient(
               embedded_worker_id,
               service_worker_version_id,
+              service_worker_scope,
               script_url),
           NULL)));
 
diff --git a/content/renderer/service_worker/embedded_worker_dispatcher.h b/content/renderer/service_worker/embedded_worker_dispatcher.h
index 6b1ba84..0ef1afd 100644
--- a/content/renderer/service_worker/embedded_worker_dispatcher.h
+++ b/content/renderer/service_worker/embedded_worker_dispatcher.h
@@ -35,6 +35,7 @@
 
   void OnStartWorker(int embedded_worker_id,
                      int64 service_worker_version_id,
+                     const GURL& service_worker_scope,
                      const GURL& script_url);
   void OnStopWorker(int embedded_worker_id);
 
diff --git a/content/renderer/service_worker/service_worker_script_context.cc b/content/renderer/service_worker/service_worker_script_context.cc
index ab95edb..0b19cb0 100644
--- a/content/renderer/service_worker/service_worker_script_context.cc
+++ b/content/renderer/service_worker/service_worker_script_context.cc
@@ -9,6 +9,7 @@
 #include "content/common/service_worker/service_worker_messages.h"
 #include "content/renderer/service_worker/embedded_worker_context_client.h"
 #include "ipc/ipc_message.h"
+#include "third_party/WebKit/public/web/WebServiceWorkerContextClient.h"
 #include "third_party/WebKit/public/web/WebServiceWorkerContextProxy.h"
 
 namespace content {
@@ -35,6 +36,8 @@
     IPC_MESSAGE_HANDLER(ServiceWorkerMsg_InstallEvent, OnInstallEvent)
     IPC_MESSAGE_HANDLER(ServiceWorkerMsg_Message, OnPostMessage)
     IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SyncEvent, OnSyncEvent)
+    IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidGetClientDocuments,
+                        OnDidGetClientDocuments)
     IPC_MESSAGE_UNHANDLED(handled = false)
   IPC_END_MESSAGE_MAP()
   DCHECK(handled);
@@ -44,29 +47,41 @@
 void ServiceWorkerScriptContext::DidHandleActivateEvent(
     int request_id,
     blink::WebServiceWorkerEventResult result) {
-  Send(request_id, ServiceWorkerHostMsg_ActivateEventFinished(result));
+  Reply(request_id, ServiceWorkerHostMsg_ActivateEventFinished(result));
 }
 
 void ServiceWorkerScriptContext::DidHandleInstallEvent(
     int request_id,
     blink::WebServiceWorkerEventResult result) {
-  Send(request_id, ServiceWorkerHostMsg_InstallEventFinished(result));
+  Reply(request_id, ServiceWorkerHostMsg_InstallEventFinished(result));
 }
 
 void ServiceWorkerScriptContext::DidHandleFetchEvent(
     int request_id,
     ServiceWorkerFetchEventResult result,
     const ServiceWorkerResponse& response) {
-  Send(request_id, ServiceWorkerHostMsg_FetchEventFinished(result, response));
+  Reply(request_id, ServiceWorkerHostMsg_FetchEventFinished(result, response));
 }
 
 void ServiceWorkerScriptContext::DidHandleSyncEvent(int request_id) {
-  Send(request_id, ServiceWorkerHostMsg_SyncEventFinished());
+  Reply(request_id, ServiceWorkerHostMsg_SyncEventFinished());
 }
 
-void ServiceWorkerScriptContext::Send(int request_id,
-                                      const IPC::Message& message) {
-  embedded_context_->SendMessageToBrowser(request_id, message);
+void ServiceWorkerScriptContext::GetClientDocuments(
+    blink::WebServiceWorkerClientsCallbacks* callbacks) {
+  DCHECK(callbacks);
+  int request_id = pending_clients_callbacks_.Add(callbacks);
+  Send(new ServiceWorkerHostMsg_GetClientDocuments(
+      GetRoutingID(), request_id));
+}
+
+void ServiceWorkerScriptContext::Send(IPC::Message* message) {
+  embedded_context_->Send(message);
+}
+
+void ServiceWorkerScriptContext::Reply(int request_id,
+                                       const IPC::Message& message) {
+  embedded_context_->SendReplyToBrowser(request_id, message);
 }
 
 void ServiceWorkerScriptContext::OnActivateEvent() {
@@ -104,4 +119,23 @@
   proxy_->dispatchSyncEvent(current_request_id_);
 }
 
+void ServiceWorkerScriptContext::OnDidGetClientDocuments(
+    int request_id, const std::vector<int>& client_ids) {
+  blink::WebServiceWorkerClientsCallbacks* callbacks =
+      pending_clients_callbacks_.Lookup(request_id);
+  if (!callbacks) {
+    NOTREACHED() << "Got stray response: " << request_id;
+    return;
+  }
+  scoped_ptr<blink::WebServiceWorkerClientsInfo> info(
+      new blink::WebServiceWorkerClientsInfo);
+  info->clientIDs = client_ids;
+  callbacks->onSuccess(info.release());
+  pending_clients_callbacks_.Remove(request_id);
+}
+
+int ServiceWorkerScriptContext::GetRoutingID() const {
+  return embedded_context_->embedded_worker_id();
+}
+
 }  // namespace content
diff --git a/content/renderer/service_worker/service_worker_script_context.h b/content/renderer/service_worker/service_worker_script_context.h
index 152fe9b..8d29972 100644
--- a/content/renderer/service_worker/service_worker_script_context.h
+++ b/content/renderer/service_worker/service_worker_script_context.h
@@ -8,9 +8,10 @@
 #include <vector>
 
 #include "base/basictypes.h"
+#include "base/id_map.h"
 #include "base/strings/string16.h"
-
 #include "content/common/service_worker/service_worker_types.h"
+#include "third_party/WebKit/public/platform/WebServiceWorkerClientsInfo.h"
 #include "third_party/WebKit/public/platform/WebServiceWorkerEventResult.h"
 
 namespace blink {
@@ -46,10 +47,19 @@
                            ServiceWorkerFetchEventResult result,
                            const ServiceWorkerResponse& response);
   void DidHandleSyncEvent(int request_id);
+  void GetClientDocuments(
+      blink::WebServiceWorkerClientsCallbacks* callbacks);
 
  private:
-  // Send message back to the browser.
-  void Send(int request_id, const IPC::Message& message);
+  typedef IDMap<blink::WebServiceWorkerClientsCallbacks, IDMapOwnPointer>
+      ClientsCallbacksMap;
+
+  // Send a message to the browser.
+  void Send(IPC::Message* message);
+
+  // Send a reply message (for |request_id|) back to the browser.
+  // TODO(kinuko): Deprecate this.
+  void Reply(int request_id, const IPC::Message& message);
 
   void OnActivateEvent();
   void OnInstallEvent(int active_version_id);
@@ -58,6 +68,12 @@
                      const std::vector<int>& sent_message_port_ids,
                      const std::vector<int>& new_routing_ids);
   void OnSyncEvent();
+  void OnDidGetClientDocuments(
+      int request_id, const std::vector<int>& client_ids);
+
+  // Get routing_id for sending message to the ServiceWorkerVersion
+  // in the browser process.
+  int GetRoutingID() const;
 
   // Not owned; embedded_context_ owns this.
   EmbeddedWorkerContextClient* embedded_context_;
@@ -70,6 +86,9 @@
   // response.
   int current_request_id_;
 
+  // Pending callbacks for GetClientDocuments().
+  ClientsCallbacksMap pending_clients_callbacks_;
+
   DISALLOW_COPY_AND_ASSIGN(ServiceWorkerScriptContext);
 };
 
diff --git a/content/renderer/v8_value_converter_impl.cc b/content/renderer/v8_value_converter_impl.cc
index a7d3bbd..b646c87 100644
--- a/content/renderer/v8_value_converter_impl.cc
+++ b/content/renderer/v8_value_converter_impl.cc
@@ -6,6 +6,8 @@
 
 #include <string>
 
+#include "base/bind.h"
+#include "base/bind_helpers.h"
 #include "base/float_util.h"
 #include "base/logging.h"
 #include "base/memory/scoped_ptr.h"
@@ -126,7 +128,7 @@
   v8::Context::Scope context_scope(context);
   v8::HandleScope handle_scope(context->GetIsolate());
   FromV8ValueState state(avoid_identity_hash_for_testing_);
-  return FromV8ValueImpl(val, &state, context->GetIsolate());
+  return FromV8ValueImpl(&state, val, context->GetIsolate());
 }
 
 v8::Local<v8::Value> V8ValueConverterImpl::ToV8ValueImpl(
@@ -233,8 +235,8 @@
 }
 
 base::Value* V8ValueConverterImpl::FromV8ValueImpl(
-    v8::Handle<v8::Value> val,
     FromV8ValueState* state,
+    v8::Handle<v8::Value> val,
     v8::Isolate* isolate) const {
   CHECK(!val.IsEmpty());
 
@@ -322,8 +324,14 @@
     scope.reset(new v8::Context::Scope(val->CreationContext()));
 
   if (strategy_) {
+    // These base::Unretained's are safe, because Strategy::FromV8Value should
+    // be synchronous, so this object can't be out of scope.
+    V8ValueConverter::Strategy::FromV8ValueCallback callback =
+        base::Bind(&V8ValueConverterImpl::FromV8ValueImpl,
+                   base::Unretained(this),
+                   base::Unretained(state));
     base::Value* out = NULL;
-    if (strategy_->FromV8Array(val, &out, isolate))
+    if (strategy_->FromV8Array(val, &out, isolate, callback))
       return out;
   }
 
@@ -338,10 +346,12 @@
       child_v8 = v8::Null(isolate);
     }
 
-    if (!val->HasRealIndexedProperty(i))
+    if (!val->HasRealIndexedProperty(i)) {
+      result->Append(base::Value::CreateNullValue());
       continue;
+    }
 
-    base::Value* child = FromV8ValueImpl(child_v8, state, isolate);
+    base::Value* child = FromV8ValueImpl(state, child_v8, isolate);
     if (child)
       result->Append(child);
     else
@@ -392,8 +402,14 @@
     scope.reset(new v8::Context::Scope(val->CreationContext()));
 
   if (strategy_) {
+    // These base::Unretained's are safe, because Strategy::FromV8Value should
+    // be synchronous, so this object can't be out of scope.
+    V8ValueConverter::Strategy::FromV8ValueCallback callback =
+        base::Bind(&V8ValueConverterImpl::FromV8ValueImpl,
+                   base::Unretained(this),
+                   base::Unretained(state));
     base::Value* out = NULL;
-    if (strategy_->FromV8Object(val, &out, isolate))
+    if (strategy_->FromV8Object(val, &out, isolate, callback))
       return out;
   }
 
@@ -438,7 +454,7 @@
       child_v8 = v8::Null(isolate);
     }
 
-    scoped_ptr<base::Value> child(FromV8ValueImpl(child_v8, state, isolate));
+    scoped_ptr<base::Value> child(FromV8ValueImpl(state, child_v8, isolate));
     if (!child)
       // JSON.stringify skips properties whose values don't serialize, for
       // example undefined and functions. Emulate that behavior.
diff --git a/content/renderer/v8_value_converter_impl.h b/content/renderer/v8_value_converter_impl.h
index b64b8d8..017ac1d 100644
--- a/content/renderer/v8_value_converter_impl.h
+++ b/content/renderer/v8_value_converter_impl.h
@@ -52,8 +52,8 @@
       const base::DictionaryValue* dictionary) const;
   v8::Handle<v8::Value> ToArrayBuffer(const base::BinaryValue* value) const;
 
-  base::Value* FromV8ValueImpl(v8::Handle<v8::Value> value,
-                               FromV8ValueState* state,
+  base::Value* FromV8ValueImpl(FromV8ValueState* state,
+                               v8::Handle<v8::Value> value,
                                v8::Isolate* isolate) const;
   base::Value* FromV8Array(v8::Handle<v8::Array> array,
                            FromV8ValueState* state,
diff --git a/content/renderer/v8_value_converter_impl_unittest.cc b/content/renderer/v8_value_converter_impl_unittest.cc
index a1a5033..ab092e5 100644
--- a/content/renderer/v8_value_converter_impl_unittest.cc
+++ b/content/renderer/v8_value_converter_impl_unittest.cc
@@ -570,6 +570,17 @@
     ASSERT_FALSE(array.IsEmpty());
   }
 
+  v8::Handle<v8::Array> sparse_array;
+  {
+    const char* source = "(function() {"
+        "return new Array(3);"
+        "})();";
+    v8::Handle<v8::Script> script(
+        v8::Script::Compile(v8::String::NewFromUtf8(isolate_, source)));
+    sparse_array = script->Run().As<v8::Array>();
+    ASSERT_FALSE(sparse_array.IsEmpty());
+  }
+
   V8ValueConverterImpl converter;
 
   scoped_ptr<base::Value> actual_object(
@@ -581,6 +592,12 @@
   scoped_ptr<base::Value> actual_array(converter.FromV8Value(array, context));
   EXPECT_TRUE(base::Value::Equals(
       base::test::ParseJson("[ null, null, null ]").get(), actual_array.get()));
+
+  scoped_ptr<base::Value> actual_sparse_array(
+      converter.FromV8Value(sparse_array, context));
+  EXPECT_TRUE(
+      base::Value::Equals(base::test::ParseJson("[ null, null, null ]").get(),
+                          actual_sparse_array.get()));
 }
 
 TEST_F(V8ValueConverterImplTest, ObjectsWithClashingIdentityHash) {
diff --git a/content/renderer/web_preferences.cc b/content/renderer/web_preferences.cc
index d8bbed3..0142236 100644
--- a/content/renderer/web_preferences.cc
+++ b/content/renderer/web_preferences.cc
@@ -163,12 +163,6 @@
   settings->setCookieEnabled(prefs.cookie_enabled);
   settings->setNavigateOnDragDrop(prefs.navigate_on_drag_drop);
 
-  // This setting affects the behavior of links in an editable region:
-  // clicking the link should select it rather than navigate to it.
-  // Safari uses the same default. It is unlikley an embedder would want to
-  // change this, since it would break existing rich text editors.
-  settings->setEditableLinkBehaviorNeverLive();
-
   settings->setJavaEnabled(prefs.java_enabled);
 
   // By default, allow_universal_access_from_file_urls is set to false and thus
@@ -279,7 +273,6 @@
   settings->setShouldClearDocumentBackground(
       prefs.should_clear_document_background);
   settings->setEnableScrollAnimator(prefs.enable_scroll_animator);
-  settings->setVisualWordMovementEnabled(prefs.visual_word_movement_enabled);
 
   settings->setRegionBasedColumnsEnabled(prefs.region_based_columns_enabled);
 
diff --git a/content/renderer/web_ui_mojo.cc b/content/renderer/web_ui_mojo.cc
index b972c97..37deb22 100644
--- a/content/renderer/web_ui_mojo.cc
+++ b/content/renderer/web_ui_mojo.cc
@@ -9,8 +9,8 @@
 #include "content/public/renderer/render_view.h"
 #include "content/renderer/web_ui_mojo_context_state.h"
 #include "gin/per_context_data.h"
-#include "third_party/WebKit/public/web/WebFrame.h"
 #include "third_party/WebKit/public/web/WebKit.h"
+#include "third_party/WebKit/public/web/WebLocalFrame.h"
 #include "third_party/WebKit/public/web/WebView.h"
 #include "v8/include/v8.h"
 
@@ -65,7 +65,7 @@
 
 void WebUIMojo::CreateContextState() {
   v8::HandleScope handle_scope(blink::mainThreadIsolate());
-  blink::WebFrame* frame =
+  blink::WebLocalFrame* frame =
       render_view()->GetWebView()->mainFrame()->toWebLocalFrame();
   v8::Handle<v8::Context> context = frame->mainWorldScriptContext();
   gin::PerContextData* context_data = gin::PerContextData::From(context);
diff --git a/content/renderer/web_ui_runner.cc b/content/renderer/web_ui_runner.cc
index a091636..78c914a 100644
--- a/content/renderer/web_ui_runner.cc
+++ b/content/renderer/web_ui_runner.cc
@@ -9,6 +9,7 @@
 #include "gin/public/context_holder.h"
 #include "mojo/bindings/js/core.h"
 #include "mojo/bindings/js/support.h"
+#include "mojo/bindings/js/unicode.h"
 #include "third_party/WebKit/public/web/WebFrame.h"
 #include "third_party/WebKit/public/web/WebScriptSource.h"
 
@@ -47,6 +48,10 @@
                              mojo::js::Support::kModuleName,
                              mojo::js::Support::GetModule(
                                  context_holder_->isolate()));
+  registry->AddBuiltinModule(context_holder_->isolate(),
+                             mojo::js::Unicode::kModuleName,
+                             mojo::js::Unicode::GetModule(
+                                 context_holder_->isolate()));
 }
 
 void WebUIRunner::Run(const std::string& source,
diff --git a/content/shell/android/java/src/org/chromium/content_shell/Shell.java b/content/shell/android/java/src/org/chromium/content_shell/Shell.java
index d9fd9f0..99caca8 100644
--- a/content/shell/android/java/src/org/chromium/content_shell/Shell.java
+++ b/content/shell/android/java/src/org/chromium/content_shell/Shell.java
@@ -10,6 +10,7 @@
 import android.util.AttributeSet;
 import android.view.KeyEvent;
 import android.view.View;
+import android.view.ViewGroup;
 import android.view.inputmethod.EditorInfo;
 import android.view.inputmethod.InputMethodManager;
 import android.widget.EditText;
@@ -110,7 +111,7 @@
     private void onNativeDestroyed() {
         mWindow = null;
         mNativeShell = 0;
-        mContentView.destroy();
+        mContentViewCore.destroy();
     }
 
     /**
@@ -266,9 +267,9 @@
     }
 
     /**
-     * @return The {@link ContentView} currently shown by this Shell.
+     * @return The {@link ViewGroup} currently shown by this Shell.
      */
-    public ContentView getContentView() {
+    public ViewGroup getContentView() {
         return mContentView;
     }
 
diff --git a/content/shell/android/javatests/src/org/chromium/content_shell_apk/ContentShellShellManagementTest.java b/content/shell/android/javatests/src/org/chromium/content_shell_apk/ContentShellShellManagementTest.java
index f3a3c36..ddeac73 100644
--- a/content/shell/android/javatests/src/org/chromium/content_shell_apk/ContentShellShellManagementTest.java
+++ b/content/shell/android/javatests/src/org/chromium/content_shell_apk/ContentShellShellManagementTest.java
@@ -25,7 +25,7 @@
     @Feature({"Main"})
     public void testMultipleShellsLaunched() throws InterruptedException {
         final ContentShellActivity activity = launchContentShellWithUrl(TEST_PAGE_1);
-        assertEquals(TEST_PAGE_1, activity.getActiveShell().getContentView().getUrl());
+        assertEquals(TEST_PAGE_1, activity.getActiveShell().getContentViewCore().getUrl());
 
         Shell previousActiveShell = activity.getActiveShell();
         assertFalse(previousActiveShell.isDestroyed());
@@ -37,11 +37,11 @@
             }
         });
         waitForActiveShellToBeDoneLoading();
-        assertEquals(TEST_PAGE_2, activity.getActiveShell().getContentView().getUrl());
+        assertEquals(TEST_PAGE_2, activity.getActiveShell().getContentViewCore().getUrl());
 
         assertNotSame(previousActiveShell, activity.getActiveShell());
         assertTrue(previousActiveShell.isDestroyed());
-        assertFalse(previousActiveShell.getContentView().isAlive());
+        assertFalse(previousActiveShell.getContentViewCore().isAlive());
     }
 
 }
diff --git a/content/shell/android/javatests/src/org/chromium/content_shell_apk/ContentShellTestBase.java b/content/shell/android/javatests/src/org/chromium/content_shell_apk/ContentShellTestBase.java
index 0d3196c..c27c80d 100644
--- a/content/shell/android/javatests/src/org/chromium/content_shell_apk/ContentShellTestBase.java
+++ b/content/shell/android/javatests/src/org/chromium/content_shell_apk/ContentShellTestBase.java
@@ -4,16 +4,15 @@
 
 package org.chromium.content_shell_apk;
 
+import static org.chromium.base.test.util.ScalableTimeout.scaleTimeout;
+
 import android.content.ComponentName;
 import android.content.Intent;
 import android.net.Uri;
 import android.test.ActivityInstrumentationTestCase2;
 import android.text.TextUtils;
 
-import static org.chromium.base.test.util.ScalableTimeout.scaleTimeout;
-
 import org.chromium.base.test.util.UrlUtils;
-import org.chromium.content.browser.ContentView;
 import org.chromium.content.browser.ContentViewCore;
 import org.chromium.content.browser.LoadUrlParams;
 import org.chromium.content.browser.test.util.CallbackHelper;
@@ -79,7 +78,7 @@
         launchContentShellWithUrl(UrlUtils.getTestFileUrl(url));
         assertNotNull(getActivity());
         assertTrue(waitForActiveShellToBeDoneLoading());
-        assertEquals(UrlUtils.getTestFileUrl(url), getContentView().getUrl());
+        assertEquals(UrlUtils.getTestFileUrl(url), getContentViewCore().getUrl());
     }
 
     /**
@@ -98,17 +97,10 @@
     }
 
     /**
-     * Returns the current ContentView.
-     */
-    protected ContentView getContentView() {
-        return getActivity().getActiveShell().getContentView();
-    }
-
-    /**
      * Returns the current ContentViewCore or null if there is no ContentView.
      */
     protected ContentViewCore getContentViewCore() {
-        return getContentView() == null ? null : getContentView().getContentViewCore();
+        return getActivity().getActiveShell().getContentViewCore();
     }
 
     /**
@@ -138,7 +130,7 @@
                                 // loading because it has no URL set yet.  The second is that
                                 // we've set a URL and it actually is loading.
                                 isLoaded.set(!shell.isLoading()
-                                        && !TextUtils.isEmpty(shell.getContentView().getUrl()));
+                                        && !TextUtils.isEmpty(shell.getContentViewCore().getUrl()));
                             } else {
                                 isLoaded.set(false);
                             }
@@ -156,19 +148,19 @@
     /**
      * Loads a URL in the specified content view.
      *
-     * @param contentView The content view to load the URL in.
+     * @param viewCore The content view core to load the URL in.
      * @param callbackHelperContainer The callback helper container used to monitor progress.
      * @param params The URL params to use.
      */
     protected void loadUrl(
-            final ContentView contentView, TestCallbackHelperContainer callbackHelperContainer,
+            final ContentViewCore viewCore, TestCallbackHelperContainer callbackHelperContainer,
             final LoadUrlParams params) throws Throwable {
         handleBlockingCallbackAction(
                 callbackHelperContainer.getOnPageFinishedHelper(),
                 new Runnable() {
                     @Override
                     public void run() {
-                        contentView.loadUrl(params);
+                        viewCore.loadUrl(params);
                     }
                 });
     }
diff --git a/content/shell/android/javatests/src/org/chromium/content_shell_apk/ContentShellUrlTest.java b/content/shell/android/javatests/src/org/chromium/content_shell_apk/ContentShellUrlTest.java
index 4eb55b8..3208390 100644
--- a/content/shell/android/javatests/src/org/chromium/content_shell_apk/ContentShellUrlTest.java
+++ b/content/shell/android/javatests/src/org/chromium/content_shell_apk/ContentShellUrlTest.java
@@ -24,6 +24,6 @@
         assertNotNull(activity);
 
         // Make sure that the URL is set as expected.
-        assertEquals(URL, activity.getActiveShell().getContentView().getUrl());
+        assertEquals(URL, activity.getActiveShell().getContentViewCore().getUrl());
     }
 }
diff --git a/content/shell/android/shell_apk/src/org/chromium/content_shell_apk/ContentShellActivity.java b/content/shell/android/shell_apk/src/org/chromium/content_shell_apk/ContentShellActivity.java
index 0683ebe..1703cf5 100644
--- a/content/shell/android/shell_apk/src/org/chromium/content_shell_apk/ContentShellActivity.java
+++ b/content/shell/android/shell_apk/src/org/chromium/content_shell_apk/ContentShellActivity.java
@@ -18,7 +18,6 @@
 import org.chromium.base.library_loader.LibraryLoader;
 import org.chromium.base.library_loader.ProcessInitException;
 import org.chromium.content.browser.BrowserStartupController;
-import org.chromium.content.browser.ContentView;
 import org.chromium.content.browser.ContentViewCore;
 import org.chromium.content.browser.DeviceUtils;
 import org.chromium.content.common.ContentSwitches;
@@ -218,15 +217,6 @@
     }
 
     /**
-     * @return The {@link ContentView} owned by the currently visible {@link Shell} or null if one
-     *         is not showing.
-     */
-    public ContentView getActiveContentView() {
-        Shell shell = getActiveShell();
-        return shell != null ? shell.getContentView() : null;
-    }
-
-    /**
      * @return The {@link ContentViewCore} owned by the currently visible {@link Shell} or null if
      *         one is not showing.
      */
diff --git a/content/shell/app/webkit_test_platform_support_win.cc b/content/shell/app/webkit_test_platform_support_win.cc
index 5dabcfd..536d22e 100644
--- a/content/shell/app/webkit_test_platform_support_win.cc
+++ b/content/shell/app/webkit_test_platform_support_win.cc
@@ -60,14 +60,10 @@
     return false;
   }
 
-  // TODO(scottmg): http://crbug.com/333029 This changes layout test
-  // expectations even when DirectWrite isn't on.
-#if 0
   // DirectWrite sandbox registration.
   CommandLine& command_line = *base::CommandLine::ForCurrentProcess();
   command_line.AppendSwitchASCII(switches::kRegisterFontFiles,
                                  base::WideToUTF8(font_path.value()));
-#endif
 
   return true;
 }
diff --git a/content/shell/browser/shell.cc b/content/shell/browser/shell.cc
index b19ad1f..e55fb85 100644
--- a/content/shell/browser/shell.cc
+++ b/content/shell/browser/shell.cc
@@ -179,6 +179,18 @@
   web_contents_->GetView()->Focus();
 }
 
+void Shell::LoadDataWithBaseURL(const GURL& url, const std::string& data,
+    const GURL& base_url) {
+  const GURL data_url = GURL("data:text/html;charset=utf-8," + data);
+  NavigationController::LoadURLParams params(data_url);
+  params.load_type = NavigationController::LOAD_TYPE_DATA;
+  params.base_url_for_data_url = base_url;
+  params.virtual_url_for_data_url = url;
+  params.override_user_agent = NavigationController::UA_OVERRIDE_FALSE;
+  web_contents_->GetController().LoadURLWithParams(params);
+  web_contents_->GetView()->Focus();
+}
+
 void Shell::AddNewContents(WebContents* source,
                            WebContents* new_contents,
                            WindowOpenDisposition disposition,
@@ -216,16 +228,17 @@
 }
 
 void Shell::ShowDevTools() {
-  InnerShowDevTools("");
+  InnerShowDevTools("", "");
 }
 
 void Shell::ShowDevToolsForElementAt(int x, int y) {
-  InnerShowDevTools("");
+  InnerShowDevTools("", "");
   devtools_frontend_->InspectElementAt(x, y);
 }
 
-void Shell::ShowDevToolsForTest(const std::string& settings) {
-  InnerShowDevTools(settings);
+void Shell::ShowDevToolsForTest(const std::string& settings,
+                                const std::string& frontend_url) {
+  InnerShowDevTools(settings, frontend_url);
 }
 
 void Shell::CloseDevTools() {
@@ -365,9 +378,11 @@
     PlatformSetTitle(entry->GetTitle());
 }
 
-void Shell::InnerShowDevTools(const std::string& settings) {
+void Shell::InnerShowDevTools(const std::string& settings,
+                              const std::string& frontend_url) {
   if (!devtools_frontend_) {
-    devtools_frontend_ = ShellDevToolsFrontend::Show(web_contents(), settings);
+    devtools_frontend_ = ShellDevToolsFrontend::Show(
+        web_contents(), settings, frontend_url);
     devtools_observer_.reset(new DevToolsWebContentsObserver(
         this, devtools_frontend_->frontend_shell()->web_contents()));
   }
diff --git a/content/shell/browser/shell.h b/content/shell/browser/shell.h
index 8125262..2b0d59e 100644
--- a/content/shell/browser/shell.h
+++ b/content/shell/browser/shell.h
@@ -57,6 +57,9 @@
 
   void LoadURL(const GURL& url);
   void LoadURLForFrame(const GURL& url, const std::string& frame_name);
+  void LoadDataWithBaseURL(const GURL& url,
+                           const std::string& data,
+                           const GURL& base_url);
   void GoBackOrForward(int offset);
   void Reload();
   void Stop();
@@ -64,7 +67,8 @@
   void Close();
   void ShowDevTools();
   void ShowDevToolsForElementAt(int x, int y);
-  void ShowDevToolsForTest(const std::string& settings);
+  void ShowDevToolsForTest(const std::string& settings,
+                           const std::string& frontend_url);
   void CloseDevTools();
 #if defined(OS_MACOSX)
   // Resizes the web content view to the given dimensions.
@@ -209,7 +213,8 @@
   // WebContentsObserver
   virtual void TitleWasSet(NavigationEntry* entry, bool explicit_set) OVERRIDE;
 
-  void InnerShowDevTools(const std::string& settings);
+  void InnerShowDevTools(const std::string& settings,
+                         const std::string& frontend_url);
   void OnDevToolsWebContentsDestroyed();
 
   scoped_ptr<ShellJavaScriptDialogManager> dialog_manager_;
diff --git a/content/shell/browser/shell_android.cc b/content/shell/browser/shell_android.cc
index 21604c9..d18bd5d 100644
--- a/content/shell/browser/shell_android.cc
+++ b/content/shell/browser/shell_android.cc
@@ -22,7 +22,6 @@
 
 void Shell::PlatformInitialize(const gfx::Size& default_window_size) {
   CommandLine* command_line = CommandLine::ForCurrentProcess();
-  DCHECK(command_line->HasSwitch(switches::kForceCompositingMode));
   DCHECK(command_line->HasSwitch(switches::kEnableThreadedCompositing));
 }
 
diff --git a/content/shell/browser/shell_devtools_frontend.cc b/content/shell/browser/shell_devtools_frontend.cc
index c33a25b..a25df91 100644
--- a/content/shell/browser/shell_devtools_frontend.cc
+++ b/content/shell/browser/shell_devtools_frontend.cc
@@ -26,7 +26,10 @@
 namespace content {
 
 // DevTools frontend path for inspector LayoutTests.
-GURL GetDevToolsPathAsURL(const std::string& settings) {
+GURL GetDevToolsPathAsURL(const std::string& settings,
+                          const std::string& frontend_url) {
+  if (!frontend_url.empty())
+    return GURL(frontend_url);
   base::FilePath dir_exe;
   if (!PathService::Get(base::DIR_EXE, &dir_exe)) {
     NOTREACHED();
@@ -52,13 +55,14 @@
 // static
 ShellDevToolsFrontend* ShellDevToolsFrontend::Show(
     WebContents* inspected_contents) {
-  return ShellDevToolsFrontend::Show(inspected_contents, "");
+  return ShellDevToolsFrontend::Show(inspected_contents, "", "");
 }
 
 // static
 ShellDevToolsFrontend* ShellDevToolsFrontend::Show(
     WebContents* inspected_contents,
-    const std::string& settings) {
+    const std::string& settings,
+    const std::string& frontend_url) {
   scoped_refptr<DevToolsAgentHost> agent(
       DevToolsAgentHost::GetOrCreateFor(
           inspected_contents->GetRenderViewHost()));
@@ -74,7 +78,7 @@
   ShellDevToolsDelegate* delegate = ShellContentBrowserClient::Get()->
       shell_browser_main_parts()->devtools_delegate();
   if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kDumpRenderTree))
-    shell->LoadURL(GetDevToolsPathAsURL(settings));
+    shell->LoadURL(GetDevToolsPathAsURL(settings, frontend_url));
   else
     shell->LoadURL(delegate->devtools_http_handler()->GetFrontendURL());
 
diff --git a/content/shell/browser/shell_devtools_frontend.h b/content/shell/browser/shell_devtools_frontend.h
index 62d0368..6244380 100644
--- a/content/shell/browser/shell_devtools_frontend.h
+++ b/content/shell/browser/shell_devtools_frontend.h
@@ -16,7 +16,8 @@
 
 namespace content {
 
-GURL GetDevToolsPathAsURL(const std::string& settings);
+GURL GetDevToolsPathAsURL(const std::string& settings,
+                          const std::string& frontend_url);
 
 class RenderViewHost;
 class Shell;
@@ -27,7 +28,8 @@
  public:
   static ShellDevToolsFrontend* Show(WebContents* inspected_contents);
   static ShellDevToolsFrontend* Show(WebContents* inspected_contents,
-                                     const std::string& settings);
+                                     const std::string& settings,
+                                     const std::string& frontend_url);
   void Activate();
   void Focus();
   void InspectElementAt(int x, int y);
diff --git a/content/shell/browser/shell_platform_data_aura.cc b/content/shell/browser/shell_platform_data_aura.cc
index fdbf634..0a63279 100644
--- a/content/shell/browser/shell_platform_data_aura.cc
+++ b/content/shell/browser/shell_platform_data_aura.cc
@@ -113,7 +113,7 @@
 ShellPlatformDataAura* Shell::platform_ = NULL;
 
 ShellPlatformDataAura::ShellPlatformDataAura(const gfx::Size& initial_size) {
-  aura::Env::CreateInstance();
+  CHECK(aura::Env::GetInstance());
   host_.reset(aura::WindowTreeHost::Create(gfx::Rect(initial_size)));
   host_->InitHost();
   host_->window()->SetLayoutManager(new FillLayout(host_->window()));
diff --git a/content/shell/browser/webkit_test_controller.cc b/content/shell/browser/webkit_test_controller.cc
index fe53946..d16986b 100644
--- a/content/shell/browser/webkit_test_controller.cc
+++ b/content/shell/browser/webkit_test_controller.cc
@@ -328,7 +328,7 @@
     ApplyLayoutTestDefaultPreferences(prefs);
     if (is_compositing_test_) {
       CommandLine& command_line = *CommandLine::ForCurrentProcess();
-      if (!command_line.HasSwitch(switches::kEnableSoftwareCompositing))
+      if (!command_line.HasSwitch(switches::kDisableGpu))
         prefs->accelerated_2d_canvas_enabled = true;
       prefs->accelerated_compositing_for_video_enabled = true;
       prefs->mock_scrollbars_enabled = true;
@@ -570,11 +570,12 @@
   StoragePartition* storage_partition =
       BrowserContext::GetStoragePartition(browser_context, NULL);
   storage_partition->GetDOMStorageContext()->DeleteLocalStorage(
-      content::GetDevToolsPathAsURL("").GetOrigin());
+      content::GetDevToolsPathAsURL("", "").GetOrigin());
 }
 
-void WebKitTestController::OnShowDevTools(const std::string& settings) {
-  main_window_->ShowDevToolsForTest(settings);
+void WebKitTestController::OnShowDevTools(const std::string& settings,
+                                          const std::string& frontend_url) {
+  main_window_->ShowDevToolsForTest(settings, frontend_url);
 }
 
 void WebKitTestController::OnCloseDevTools() {
diff --git a/content/shell/browser/webkit_test_controller.h b/content/shell/browser/webkit_test_controller.h
index 47012ed..f9a7dbd 100644
--- a/content/shell/browser/webkit_test_controller.h
+++ b/content/shell/browser/webkit_test_controller.h
@@ -165,7 +165,8 @@
   void OnOverridePreferences(const WebPreferences& prefs);
   void OnTestFinished();
   void OnClearDevToolsLocalStorage();
-  void OnShowDevTools(const std::string& settings);
+  void OnShowDevTools(const std::string& settings,
+                      const std::string& frontend_url);
   void OnCloseDevTools();
   void OnGoToOffset(int offset);
   void OnReload();
diff --git a/content/shell/common/shell_messages.h b/content/shell/common/shell_messages.h
index 46e43ae..077099a 100644
--- a/content/shell/common/shell_messages.h
+++ b/content/shell/common/shell_messages.h
@@ -84,8 +84,9 @@
 IPC_MESSAGE_ROUTED1(ShellViewHostMsg_PrintMessage,
                     std::string /* message */)
 IPC_MESSAGE_ROUTED0(ShellViewHostMsg_ClearDevToolsLocalStorage)
-IPC_MESSAGE_ROUTED1(ShellViewHostMsg_ShowDevTools,
-                    std::string /* settings */)
+IPC_MESSAGE_ROUTED2(ShellViewHostMsg_ShowDevTools,
+                    std::string /* settings */,
+                    std::string /* frontend_url */)
 IPC_MESSAGE_ROUTED0(ShellViewHostMsg_CloseDevTools)
 IPC_MESSAGE_ROUTED1(ShellViewHostMsg_GoToOffset,
                     int /* offset */)
diff --git a/content/shell/renderer/leak_detector.cc b/content/shell/renderer/leak_detector.cc
index ce280f7..01cbb08 100644
--- a/content/shell/renderer/leak_detector.cc
+++ b/content/shell/renderer/leak_detector.cc
@@ -7,6 +7,7 @@
 #include "base/json/json_writer.h"
 #include "base/logging.h"
 #include "base/values.h"
+#include "content/shell/renderer/webkit_test_runner.h"
 #include "third_party/WebKit/public/web/WebLeakDetector.h"
 
 using blink::WebLeakDetector;
@@ -23,45 +24,46 @@
 const int kInitialNumberOfLiveDocuments = 1;
 const int kInitialNumberOfLiveNodes = 4;
 
-LeakDetector::LeakDetector()
-    : previous_number_of_live_documents_(kInitialNumberOfLiveDocuments),
-      previous_number_of_live_nodes_(kInitialNumberOfLiveNodes) {
+LeakDetector::LeakDetector(WebKitTestRunner* test_runner)
+    : test_runner_(test_runner),
+      web_leak_detector_(blink::WebLeakDetector::create(this)) {
+  previous_result_.numberOfLiveDocuments = kInitialNumberOfLiveDocuments;
+  previous_result_.numberOfLiveNodes = kInitialNumberOfLiveNodes;
 }
 
-LeakDetectionResult LeakDetector::TryLeakDetection(
-    blink::WebLocalFrame* frame) {
-  LeakDetectionResult result;
-  unsigned number_of_live_documents = 0;
-  unsigned number_of_live_nodes = 0;
+LeakDetector::~LeakDetector() {
+}
 
-  WebLeakDetector::collectGarbargeAndGetDOMCounts(
-      frame, &number_of_live_documents, &number_of_live_nodes);
+void LeakDetector::TryLeakDetection(blink::WebLocalFrame* frame) {
+  web_leak_detector_->collectGarbageAndGetDOMCounts(frame);
+}
 
-  result.leaked =
-      (previous_number_of_live_documents_ < number_of_live_documents ||
-       previous_number_of_live_nodes_ < number_of_live_nodes);
+void LeakDetector::onLeakDetectionComplete(
+    const WebLeakDetectorClient::Result& result) {
+  LeakDetectionResult report;
+  report.leaked =
+      (previous_result_.numberOfLiveDocuments < result.numberOfLiveDocuments ||
+       previous_result_.numberOfLiveNodes < result.numberOfLiveNodes);
 
-  if (result.leaked) {
+  if (report.leaked) {
     base::DictionaryValue detail;
     base::ListValue* list = new base::ListValue();
-    list->AppendInteger(previous_number_of_live_documents_);
-    list->AppendInteger(number_of_live_documents);
+    list->AppendInteger(previous_result_.numberOfLiveDocuments);
+    list->AppendInteger(result.numberOfLiveDocuments);
     detail.Set("numberOfLiveDocuments", list);
 
     list = new base::ListValue();
-    list->AppendInteger(previous_number_of_live_nodes_);
-    list->AppendInteger(number_of_live_nodes);
+    list->AppendInteger(previous_result_.numberOfLiveNodes);
+    list->AppendInteger(result.numberOfLiveNodes);
     detail.Set("numberOfLiveNodes", list);
 
     std::string detail_str;
     base::JSONWriter::Write(&detail, &detail_str);
-    result.detail = detail_str;
+    report.detail = detail_str;
   }
 
-  previous_number_of_live_documents_ = number_of_live_documents;
-  previous_number_of_live_nodes_ = number_of_live_nodes;
-
-  return result;
+  previous_result_ = result;
+  test_runner_->ReportLeakDetectionResult(report);
 }
 
 }  // namespace content
diff --git a/content/shell/renderer/leak_detector.h b/content/shell/renderer/leak_detector.h
index 60694f4..fb21c23 100644
--- a/content/shell/renderer/leak_detector.h
+++ b/content/shell/renderer/leak_detector.h
@@ -7,29 +7,36 @@
 
 #include "base/basictypes.h"
 #include "content/shell/common/leak_detection_result.h"
-// TODO(dcheng): Temporary. Convert back to a forward declare.
-#include "third_party/WebKit/public/web/WebLocalFrame.h"
+#include "third_party/WebKit/public/web/WebLeakDetector.h"
+
+namespace blink {
+class WebLocalFrame;
+}  // namespace blink
 
 namespace content {
 
+class WebKitTestRunner;
+
 // LeakDetector counts DOM objects and compare them between two pages.
-class LeakDetector {
+class LeakDetector : public blink::WebLeakDetectorClient {
  public:
-  LeakDetector();
+  explicit LeakDetector(WebKitTestRunner* test_runner);
+  virtual ~LeakDetector();
 
   // Counts DOM objects, compare the previous status and returns the result of
   // leak detection. It is assumed that this method is always called when a
   // specific page, like about:blank is loaded to compare the previous
   // circumstance of DOM objects. If the number of objects increses, there
   // should be a leak.
-  LeakDetectionResult TryLeakDetection(blink::WebLocalFrame* frame);
+  void TryLeakDetection(blink::WebLocalFrame* frame);
+
+  // WebLeakDetectorClient:
+  virtual void onLeakDetectionComplete(const Result& result) OVERRIDE;
 
  private:
-  // The number of the live documents last time.
-  unsigned previous_number_of_live_documents_;
-
-  // The number of the live nodes last time.
-  unsigned previous_number_of_live_nodes_;
+  WebKitTestRunner* test_runner_;
+  scoped_ptr<blink::WebLeakDetector> web_leak_detector_;
+  blink::WebLeakDetectorClient::Result previous_result_;
 
   DISALLOW_COPY_AND_ASSIGN(LeakDetector);
 };
diff --git a/content/shell/renderer/shell_content_renderer_client.cc b/content/shell/renderer/shell_content_renderer_client.cc
index 2c71f29..19448a3 100644
--- a/content/shell/renderer/shell_content_renderer_client.cc
+++ b/content/shell/renderer/shell_content_renderer_client.cc
@@ -7,6 +7,7 @@
 #include "base/callback.h"
 #include "base/command_line.h"
 #include "base/debug/debugger.h"
+#include "content/common/sandbox_win.h"
 #include "content/public/common/content_constants.h"
 #include "content/public/common/content_switches.h"
 #include "content/public/renderer/render_view.h"
@@ -46,7 +47,6 @@
 using blink::WebThemeEngine;
 using WebTestRunner::WebTestDelegate;
 using WebTestRunner::WebTestInterfaces;
-using WebTestRunner::WebTestProxyBase;
 
 namespace content {
 
@@ -77,7 +77,8 @@
   }
 
 #if defined(OS_WIN)
-  RegisterSideloadedTypefaces(GetPreSandboxWarmupFontMgr());
+  if (ShouldUseDirectWrite())
+    RegisterSideloadedTypefaces(GetPreSandboxWarmupFontMgr());
 #endif
 }
 
diff --git a/content/shell/renderer/shell_content_renderer_client.h b/content/shell/renderer/shell_content_renderer_client.h
index cfc56af..9f03471 100644
--- a/content/shell/renderer/shell_content_renderer_client.h
+++ b/content/shell/renderer/shell_content_renderer_client.h
@@ -16,14 +16,11 @@
 struct WebPluginParams;
 }
 
-namespace WebTestRunner {
-class WebTestProxyBase;
-}
-
 namespace content {
 
 class MockWebClipboardImpl;
 class ShellRenderProcessObserver;
+class WebTestProxyBase;
 
 class ShellContentRendererClient : public ContentRendererClient {
  public:
@@ -54,8 +51,7 @@
       blink::WebPluginContainer* container) OVERRIDE;
 
  private:
-   void WebTestProxyCreated(RenderView* render_view,
-                            WebTestRunner::WebTestProxyBase* proxy);
+  void WebTestProxyCreated(RenderView* render_view, WebTestProxyBase* proxy);
 
   scoped_ptr<ShellRenderProcessObserver> shell_observer_;
   scoped_ptr<MockWebClipboardImpl> clipboard_;
diff --git a/content/shell/renderer/test_runner/MockColorChooser.cpp b/content/shell/renderer/test_runner/MockColorChooser.cpp
index ca11f9b..fbd6faa 100644
--- a/content/shell/renderer/test_runner/MockColorChooser.cpp
+++ b/content/shell/renderer/test_runner/MockColorChooser.cpp
@@ -8,6 +8,7 @@
 #include "content/shell/renderer/test_runner/WebTestProxy.h"
 
 using namespace blink;
+using namespace content;
 using namespace std;
 
 namespace WebTestRunner {
diff --git a/content/shell/renderer/test_runner/MockColorChooser.h b/content/shell/renderer/test_runner/MockColorChooser.h
index 6aeef2e..db6a7b1 100644
--- a/content/shell/renderer/test_runner/MockColorChooser.h
+++ b/content/shell/renderer/test_runner/MockColorChooser.h
@@ -11,13 +11,17 @@
 #include "third_party/WebKit/public/web/WebColorChooser.h"
 #include "third_party/WebKit/public/web/WebColorChooserClient.h"
 
+namespace content {
+class WebTestProxyBase;
+}
+
 namespace WebTestRunner {
 
 class WebTestDelegate;
-class WebTestProxyBase;
+
 class MockColorChooser : public blink::WebColorChooser {
 public:
-    MockColorChooser(blink::WebColorChooserClient*, WebTestDelegate*, WebTestProxyBase*);
+    MockColorChooser(blink::WebColorChooserClient*, WebTestDelegate*, content::WebTestProxyBase*);
     virtual ~MockColorChooser();
 
     // blink::WebColorChooser implementation.
@@ -26,10 +30,11 @@
 
     void invokeDidEndChooser();
     WebTaskList* taskList() { return &m_taskList; }
+
 private:
     blink::WebColorChooserClient* m_client;
     WebTestDelegate* m_delegate;
-    WebTestProxyBase* m_proxy;
+    content::WebTestProxyBase* m_proxy;
     WebTaskList m_taskList;
 
     DISALLOW_COPY_AND_ASSIGN(MockColorChooser);
diff --git a/content/shell/renderer/test_runner/SpellCheckClient.cpp b/content/shell/renderer/test_runner/SpellCheckClient.cpp
index a32d272..3be3d0e 100644
--- a/content/shell/renderer/test_runner/SpellCheckClient.cpp
+++ b/content/shell/renderer/test_runner/SpellCheckClient.cpp
@@ -11,6 +11,7 @@
 #include "third_party/WebKit/public/web/WebTextCheckingResult.h"
 
 using namespace blink;
+using namespace content;
 using namespace std;
 
 namespace WebTestRunner {
diff --git a/content/shell/renderer/test_runner/SpellCheckClient.h b/content/shell/renderer/test_runner/SpellCheckClient.h
index 5a22dca..a2b26a7 100644
--- a/content/shell/renderer/test_runner/SpellCheckClient.h
+++ b/content/shell/renderer/test_runner/SpellCheckClient.h
@@ -10,14 +10,17 @@
 #include "content/shell/renderer/test_runner/WebTask.h"
 #include "third_party/WebKit/public/web/WebSpellCheckClient.h"
 
+namespace content {
+class WebTestProxyBase;
+}
+
 namespace WebTestRunner {
 
 class WebTestDelegate;
-class WebTestProxyBase;
 
 class SpellCheckClient : public blink::WebSpellCheckClient {
 public:
-    explicit SpellCheckClient(WebTestProxyBase*);
+    explicit SpellCheckClient(content::WebTestProxyBase*);
     virtual ~SpellCheckClient();
 
     void setDelegate(WebTestDelegate*);
@@ -47,7 +50,7 @@
 
     WebTestDelegate* m_delegate;
 
-    WebTestProxyBase* m_webTestProxy;
+    content::WebTestProxyBase* m_webTestProxy;
 
     DISALLOW_COPY_AND_ASSIGN(SpellCheckClient);
 };
diff --git a/content/shell/renderer/test_runner/TestInterfaces.cpp b/content/shell/renderer/test_runner/TestInterfaces.cpp
index b2a1c0c..dca5d75 100644
--- a/content/shell/renderer/test_runner/TestInterfaces.cpp
+++ b/content/shell/renderer/test_runner/TestInterfaces.cpp
@@ -24,6 +24,7 @@
 #include "third_party/WebKit/public/web/WebView.h"
 
 using namespace blink;
+using namespace content;
 using namespace std;
 
 namespace WebTestRunner {
@@ -133,7 +134,7 @@
                 "{\"lastActivePanel\":\"\\\"%s\\\"\"}",
                 test_path.substr(0, slash_index).c_str());
         }
-        m_testRunner->showDevTools(settings);
+        m_testRunner->showDevTools(settings, string());
     }
     if (spec.find("/viewsource/") != string::npos) {
         m_testRunner->setShouldEnableViewSource(true);
diff --git a/content/shell/renderer/test_runner/TestInterfaces.h b/content/shell/renderer/test_runner/TestInterfaces.h
index 4bc50d9..a287e27 100644
--- a/content/shell/renderer/test_runner/TestInterfaces.h
+++ b/content/shell/renderer/test_runner/TestInterfaces.h
@@ -30,19 +30,19 @@
 class GamepadController;
 class TestRunner;
 class TextInputController;
+class WebTestProxyBase;
 }
 
 namespace WebTestRunner {
 
 class WebTestDelegate;
-class WebTestProxyBase;
 
 class TestInterfaces {
 public:
     TestInterfaces();
     ~TestInterfaces();
 
-    void setWebView(blink::WebView*, WebTestProxyBase*);
+    void setWebView(blink::WebView*, content::WebTestProxyBase*);
     void setDelegate(WebTestDelegate*);
     void bindTo(blink::WebFrame*);
     void resetTestHelperControllers();
@@ -50,15 +50,15 @@
     void setTestIsRunning(bool);
     void configureForTestWithURL(const blink::WebURL&, bool generatePixels);
 
-    void windowOpened(WebTestProxyBase*);
-    void windowClosed(WebTestProxyBase*);
+    void windowOpened(content::WebTestProxyBase*);
+    void windowClosed(content::WebTestProxyBase*);
 
     content::AccessibilityController* accessibilityController();
     content::EventSender* eventSender();
     content::TestRunner* testRunner();
     WebTestDelegate* delegate();
-    WebTestProxyBase* proxy();
-    const std::vector<WebTestProxyBase*>& windowList();
+    content::WebTestProxyBase* proxy();
+    const std::vector<content::WebTestProxyBase*>& windowList();
     blink::WebThemeEngine* themeEngine();
 
 private:
@@ -68,9 +68,9 @@
     scoped_ptr<content::TextInputController> m_textInputController;
     scoped_ptr<content::TestRunner> m_testRunner;
     WebTestDelegate* m_delegate;
-    WebTestProxyBase* m_proxy;
+    content::WebTestProxyBase* m_proxy;
 
-    std::vector<WebTestProxyBase*> m_windowList;
+    std::vector<content::WebTestProxyBase*> m_windowList;
 #if defined(__APPLE__)
     scoped_ptr<WebTestThemeEngineMac> m_themeEngine;
 #else
diff --git a/content/shell/renderer/test_runner/WebFrameTestProxy.h b/content/shell/renderer/test_runner/WebFrameTestProxy.h
index 92c22f6..bdfc42c 100644
--- a/content/shell/renderer/test_runner/WebFrameTestProxy.h
+++ b/content/shell/renderer/test_runner/WebFrameTestProxy.h
@@ -12,7 +12,7 @@
 #include "content/shell/renderer/test_runner/WebTestProxy.h"
 #include "third_party/WebKit/public/platform/WebString.h"
 
-namespace WebTestRunner {
+namespace content {
 
 // Templetized wrapper around RenderFrameImpl objects, which implement
 // the WebFrameClient interface.
@@ -63,6 +63,10 @@
     }
     virtual void didFailProvisionalLoad(blink::WebLocalFrame* frame, const blink::WebURLError& error)
     {
+        // If the test finished, don't notify the embedder of the failed load,
+        // as we already destroyed the document loader.
+        if (m_baseProxy->didFailProvisionalLoad(frame, error))
+            return;
         Base::didFailProvisionalLoad(frame, error);
     }
     virtual void didCommitProvisionalLoad(blink::WebLocalFrame* frame, const blink::WebHistoryItem& item, blink::WebHistoryCommitType commit_type)
@@ -72,26 +76,32 @@
     }
     virtual void didReceiveTitle(blink::WebLocalFrame* frame, const blink::WebString& title, blink::WebTextDirection direction)
     {
+        m_baseProxy->didReceiveTitle(frame, title, direction);
         Base::didReceiveTitle(frame, title, direction);
     }
     virtual void didChangeIcon(blink::WebLocalFrame* frame, blink::WebIconURL::Type iconType)
     {
+        m_baseProxy->didChangeIcon(frame, iconType);
         Base::didChangeIcon(frame, iconType);
     }
     virtual void didFinishDocumentLoad(blink::WebLocalFrame* frame)
     {
+        m_baseProxy->didFinishDocumentLoad(frame);
         Base::didFinishDocumentLoad(frame);
     }
     virtual void didHandleOnloadEvents(blink::WebLocalFrame* frame)
     {
+        m_baseProxy->didHandleOnloadEvents(frame);
         Base::didHandleOnloadEvents(frame);
     }
     virtual void didFailLoad(blink::WebLocalFrame* frame, const blink::WebURLError& error)
     {
+        m_baseProxy->didFailLoad(frame, error);
         Base::didFailLoad(frame, error);
     }
     virtual void didFinishLoad(blink::WebLocalFrame* frame)
     {
+        m_baseProxy->didFinishLoad(frame);
         Base::didFinishLoad(frame);
     }
     virtual blink::WebNotificationPresenter* notificationPresenter()
@@ -171,6 +181,7 @@
     }
     virtual void didFinishResourceLoad(blink::WebLocalFrame* frame, unsigned identifier)
     {
+        m_baseProxy->didFinishResourceLoad(frame, identifier);
         Base::didFinishResourceLoad(frame, identifier);
     }
     virtual blink::WebNavigationPolicy decidePolicyForNavigation(blink::WebLocalFrame* frame, blink::WebDataSource::ExtraData* extraData, const blink::WebURLRequest& request, blink::WebNavigationType type, blink::WebNavigationPolicy defaultPolicy, bool isRedirect)
@@ -204,6 +215,6 @@
     DISALLOW_COPY_AND_ASSIGN(WebFrameTestProxy);
 };
 
-}
+}  // namespace content
 
 #endif // WebTestProxy_h
diff --git a/content/shell/renderer/test_runner/WebTestDelegate.h b/content/shell/renderer/test_runner/WebTestDelegate.h
index f04c1f7..8dbea51 100644
--- a/content/shell/renderer/test_runner/WebTestDelegate.h
+++ b/content/shell/renderer/test_runner/WebTestDelegate.h
@@ -7,7 +7,7 @@
 
 #include <string>
 
-#include "third_party/WebKit/public/platform/WebScreenOrientation.h"
+#include "third_party/WebKit/public/platform/WebScreenOrientationType.h"
 #include "third_party/WebKit/public/platform/WebString.h"
 #include "third_party/WebKit/public/platform/WebURL.h"
 #include "third_party/WebKit/public/platform/WebVector.h"
@@ -27,13 +27,13 @@
 }
 
 namespace content {
+class WebTestProxyBase;
 struct TestPreferences;
 }
 
 namespace WebTestRunner {
 
 class WebTask;
-class WebTestProxyBase;
 
 class WebTestDelegate {
 public:
@@ -57,7 +57,7 @@
     virtual void setDeviceOrientationData(const blink::WebDeviceOrientationData&) = 0;
 
     // Set orientation to set when registering via Platform::setScreenOrientationListener().
-    virtual void setScreenOrientation(const blink::WebScreenOrientation&) = 0;
+    virtual void setScreenOrientation(const blink::WebScreenOrientationType&) = 0;
 
     // Add a message to the text dump for the layout test.
     virtual void printMessage(const std::string& message) = 0;
@@ -103,7 +103,8 @@
     virtual void clearDevToolsLocalStorage() = 0;
 
     // Opens and closes the inspector.
-    virtual void showDevTools(const std::string& settings) = 0;
+    virtual void showDevTools(const std::string& settings,
+                              const std::string& frontend_url) = 0;
     virtual void closeDevTools() = 0;
 
     // Evaluate the given script in the DevTools agent.
@@ -117,7 +118,7 @@
     virtual void setDeviceScaleFactor(float) = 0;
 
     // Controls which WebView should be focused.
-    virtual void setFocus(WebTestProxyBase*, bool) = 0;
+    virtual void setFocus(content::WebTestProxyBase*, bool) = 0;
 
     // Controls whether all cookies should be accepted or writing cookies in a
     // third-party context is blocked.
@@ -151,7 +152,7 @@
 
     // Returns the back/forward history for the WebView associated with the
     // given WebTestProxyBase as well as the index of the current entry.
-    virtual void captureHistoryForWindow(WebTestProxyBase*, blink::WebVector<blink::WebHistoryItem>*, size_t* currentEntryIndex) = 0;
+    virtual void captureHistoryForWindow(content::WebTestProxyBase*, blink::WebVector<blink::WebHistoryItem>*, size_t* currentEntryIndex) = 0;
 };
 
 }
diff --git a/content/shell/renderer/test_runner/WebTestInterfaces.cpp b/content/shell/renderer/test_runner/WebTestInterfaces.cpp
index a1d3483..38a359f 100644
--- a/content/shell/renderer/test_runner/WebTestInterfaces.cpp
+++ b/content/shell/renderer/test_runner/WebTestInterfaces.cpp
@@ -12,6 +12,7 @@
 #include "content/shell/renderer/test_runner/test_runner.h"
 
 using namespace blink;
+using namespace content;
 
 namespace WebTestRunner {
 
diff --git a/content/shell/renderer/test_runner/WebTestInterfaces.h b/content/shell/renderer/test_runner/WebTestInterfaces.h
index 7201186..cfcc146 100644
--- a/content/shell/renderer/test_runner/WebTestInterfaces.h
+++ b/content/shell/renderer/test_runner/WebTestInterfaces.h
@@ -21,11 +21,14 @@
 class WebView;
 }
 
+namespace content {
+class WebTestProxyBase;
+}
+
 namespace WebTestRunner {
 
 class TestInterfaces;
 class WebTestDelegate;
-class WebTestProxyBase;
 class WebTestRunner;
 
 class WebTestInterfaces {
@@ -33,7 +36,7 @@
     WebTestInterfaces();
     ~WebTestInterfaces();
 
-    void setWebView(blink::WebView*, WebTestProxyBase*);
+    void setWebView(blink::WebView*, content::WebTestProxyBase*);
     void setDelegate(WebTestDelegate*);
     void bindTo(blink::WebFrame*);
     void resetAll();
diff --git a/content/shell/renderer/test_runner/WebTestProxy.cpp b/content/shell/renderer/test_runner/WebTestProxy.cpp
index 9838f35..1c4f1b1 100644
--- a/content/shell/renderer/test_runner/WebTestProxy.cpp
+++ b/content/shell/renderer/test_runner/WebTestProxy.cpp
@@ -34,8 +34,8 @@
 #include "third_party/WebKit/public/web/WebDataSource.h"
 #include "third_party/WebKit/public/web/WebDocument.h"
 #include "third_party/WebKit/public/web/WebElement.h"
-#include "third_party/WebKit/public/web/WebFrame.h"
 #include "third_party/WebKit/public/web/WebHistoryItem.h"
+#include "third_party/WebKit/public/web/WebLocalFrame.h"
 #include "third_party/WebKit/public/web/WebMIDIClientMock.h"
 #include "third_party/WebKit/public/web/WebNode.h"
 #include "third_party/WebKit/public/web/WebPluginParams.h"
@@ -44,10 +44,11 @@
 #include "third_party/WebKit/public/web/WebUserGestureIndicator.h"
 #include "third_party/WebKit/public/web/WebView.h"
 
+using namespace WebTestRunner;
 using namespace blink;
 using namespace std;
 
-namespace WebTestRunner {
+namespace content {
 
 namespace {
 
@@ -767,6 +768,13 @@
 
 void WebTestProxyBase::postAccessibilityEvent(const blink::WebAXObject& obj, blink::WebAXEvent event)
 {
+    // Only hook the accessibility events occured during the test run.
+    // This check prevents false positives in WebLeakDetector.
+    // The pending tasks in browser/renderer message queue may trigger accessibility events,
+    // and AccessibilityController will hold on to their target nodes if we don't ignore them here.
+    if (!m_testInterfaces->testRunner()->TestIsRunning())
+        return;
+
     if (event == blink::WebAXEventFocus)
         m_testInterfaces->accessibilityController()->SetFocusedElement(obj);
 
@@ -1350,4 +1358,4 @@
         m_webWidget->confirmComposition();
 }
 
-}
+}  // namespace content
diff --git a/content/shell/renderer/test_runner/WebTestProxy.h b/content/shell/renderer/test_runner/WebTestProxy.h
index 4dea29f..2b8ba26 100644
--- a/content/shell/renderer/test_runner/WebTestProxy.h
+++ b/content/shell/renderer/test_runner/WebTestProxy.h
@@ -22,14 +22,14 @@
 #include "third_party/WebKit/public/web/WebFrame.h"
 #include "third_party/WebKit/public/web/WebHistoryCommitType.h"
 #include "third_party/WebKit/public/web/WebIconURL.h"
-// TODO(dcheng): Temporary. Delete once forward declarable.
-#include "third_party/WebKit/public/web/WebLocalFrame.h"
 #include "third_party/WebKit/public/web/WebNavigationPolicy.h"
 #include "third_party/WebKit/public/web/WebNavigationType.h"
 #include "third_party/WebKit/public/web/WebSecurityOrigin.h"
 #include "third_party/WebKit/public/web/WebTextAffinity.h"
 #include "third_party/WebKit/public/web/WebTextDirection.h"
 
+class SkCanvas;
+
 namespace blink {
 class WebAXObject;
 class WebAudioDevice;
@@ -41,6 +41,7 @@
 class WebFileChooserCompletion;
 class WebFrame;
 class WebImage;
+class WebLocalFrame;
 class WebMIDIAccessor;
 class WebMIDIAccessorClient;
 class WebMIDIClient;
@@ -71,27 +72,24 @@
 typedef unsigned WebColor;
 }
 
-namespace content {
-class RenderFrame;
-}
-
-class SkCanvas;
-
 namespace WebTestRunner {
-
 class MockWebSpeechInputController;
 class MockWebSpeechRecognizer;
 class SpellCheckClient;
 class TestInterfaces;
 class WebTestDelegate;
 class WebTestInterfaces;
-class WebTestRunner;
 class WebUserMediaClientMock;
+}
+
+namespace content {
+
+class RenderFrame;
 
 class WebTestProxyBase {
 public:
-    void setInterfaces(WebTestInterfaces*);
-    void setDelegate(WebTestDelegate*);
+    void setInterfaces(WebTestRunner::WebTestInterfaces*);
+    void setDelegate(WebTestRunner::WebTestDelegate*);
     void setWidget(blink::WebWidget*);
 
     void reset();
@@ -121,10 +119,10 @@
     void discardBackingStore();
 
     blink::WebMIDIClientMock* midiClientMock();
-    MockWebSpeechInputController* speechInputControllerMock();
-    MockWebSpeechRecognizer* speechRecognizerMock();
+    WebTestRunner::MockWebSpeechInputController* speechInputControllerMock();
+    WebTestRunner::MockWebSpeechRecognizer* speechRecognizerMock();
 
-    WebTaskList* taskList() { return &m_taskList; }
+    WebTestRunner::WebTaskList* taskList() { return &m_taskList; }
 
     blink::WebView* webView();
 
@@ -201,14 +199,14 @@
 
     blink::WebWidget* webWidget();
 
-    TestInterfaces* m_testInterfaces;
-    WebTestDelegate* m_delegate;
+    WebTestRunner::TestInterfaces* m_testInterfaces;
+    ::WebTestRunner::WebTestDelegate* m_delegate;
     blink::WebWidget* m_webWidget;
 
-    WebTaskList m_taskList;
+    WebTestRunner::WebTaskList m_taskList;
 
-    scoped_ptr<SpellCheckClient> m_spellcheck;
-    scoped_ptr<WebUserMediaClientMock> m_userMediaClient;
+    scoped_ptr<WebTestRunner::SpellCheckClient> m_spellcheck;
+    scoped_ptr<WebTestRunner::WebUserMediaClientMock> m_userMediaClient;
 
     // Painting.
     scoped_ptr<SkCanvas> m_canvas;
@@ -222,8 +220,9 @@
     int m_chooserCount;
 
     scoped_ptr<blink::WebMIDIClientMock> m_midiClient;
-    scoped_ptr<MockWebSpeechRecognizer> m_speechRecognizer;
-    scoped_ptr<MockWebSpeechInputController> m_speechInputController;
+    scoped_ptr<WebTestRunner::MockWebSpeechRecognizer> m_speechRecognizer;
+    scoped_ptr<WebTestRunner::MockWebSpeechInputController>
+        m_speechInputController;
 
 private:
     DISALLOW_COPY_AND_ASSIGN(WebTestProxyBase);
@@ -311,10 +310,6 @@
     {
         WebTestProxyBase::printPage(frame);
     }
-    virtual blink::WebNotificationPresenter* notificationPresenter()
-    {
-        return WebTestProxyBase::notificationPresenter();
-    }
     virtual blink::WebMIDIClient* webMIDIClient()
     {
         return WebTestProxyBase::webMIDIClient();
@@ -358,90 +353,6 @@
     {
         WebTestProxyBase::resetInputMethod();
     }
-
-    virtual void didReceiveServerRedirectForProvisionalLoad(blink::WebLocalFrame* frame)
-    {
-        WebTestProxyBase::didReceiveServerRedirectForProvisionalLoad(frame);
-        Base::didReceiveServerRedirectForProvisionalLoad(frame);
-    }
-    virtual void didFailProvisionalLoad(blink::WebLocalFrame* frame, const blink::WebURLError& error)
-    {
-        // If the test finished, don't notify the embedder of the failed load,
-        // as we already destroyed the document loader.
-        if (WebTestProxyBase::didFailProvisionalLoad(frame, error))
-            return;
-        Base::didFailProvisionalLoad(frame, error);
-    }
-    virtual void didReceiveTitle(blink::WebLocalFrame* frame, const blink::WebString& title, blink::WebTextDirection direction)
-    {
-        WebTestProxyBase::didReceiveTitle(frame, title, direction);
-        Base::didReceiveTitle(frame, title, direction);
-    }
-    virtual void didChangeIcon(blink::WebLocalFrame* frame, blink::WebIconURL::Type iconType)
-    {
-        WebTestProxyBase::didChangeIcon(frame, iconType);
-        Base::didChangeIcon(frame, iconType);
-    }
-    virtual void didFinishDocumentLoad(blink::WebLocalFrame* frame)
-    {
-        WebTestProxyBase::didFinishDocumentLoad(frame);
-        Base::didFinishDocumentLoad(frame);
-    }
-    virtual void didHandleOnloadEvents(blink::WebLocalFrame* frame)
-    {
-        WebTestProxyBase::didHandleOnloadEvents(frame);
-        Base::didHandleOnloadEvents(frame);
-    }
-    virtual void didFailLoad(blink::WebLocalFrame* frame, const blink::WebURLError& error)
-    {
-        WebTestProxyBase::didFailLoad(frame, error);
-        Base::didFailLoad(frame, error);
-    }
-    virtual void didFinishLoad(blink::WebLocalFrame* frame)
-    {
-        WebTestProxyBase::didFinishLoad(frame);
-        Base::didFinishLoad(frame);
-    }
-    virtual void didDetectXSS(blink::WebLocalFrame* frame, const blink::WebURL& insecureURL, bool didBlockEntirePage)
-    {
-        WebTestProxyBase::didDetectXSS(frame, insecureURL, didBlockEntirePage);
-        Base::didDetectXSS(frame, insecureURL, didBlockEntirePage);
-    }
-    virtual void willRequestResource(blink::WebLocalFrame* frame, const blink::WebCachedURLRequest& request)
-    {
-        WebTestProxyBase::willRequestResource(frame, request);
-        Base::willRequestResource(frame, request);
-    }
-    virtual void willSendRequest(blink::WebLocalFrame* frame, unsigned identifier, blink::WebURLRequest& request, const blink::WebURLResponse& redirectResponse)
-    {
-        WebTestProxyBase::willSendRequest(frame, identifier, request, redirectResponse);
-        Base::willSendRequest(frame, identifier, request, redirectResponse);
-    }
-    virtual void didReceiveResponse(blink::WebLocalFrame* frame, unsigned identifier, const blink::WebURLResponse& response)
-    {
-        WebTestProxyBase::didReceiveResponse(frame, identifier, response);
-        Base::didReceiveResponse(frame, identifier, response);
-    }
-    virtual void didChangeResourcePriority(blink::WebLocalFrame* frame, unsigned identifier, const blink::WebURLRequest::Priority& priority, int intra_priority_value)
-    {
-        WebTestProxyBase::didChangeResourcePriority(frame, identifier, priority, intra_priority_value);
-        Base::didChangeResourcePriority(frame, identifier, priority, intra_priority_value);
-    }
-    virtual void didFinishResourceLoad(blink::WebLocalFrame* frame, unsigned identifier)
-    {
-        WebTestProxyBase::didFinishResourceLoad(frame, identifier);
-        Base::didFinishResourceLoad(frame, identifier);
-    }
-    virtual bool willCheckAndDispatchMessageEvent(blink::WebLocalFrame* sourceFrame, blink::WebFrame* targetFrame, blink::WebSecurityOrigin target, blink::WebDOMMessageEvent event)
-    {
-        if (WebTestProxyBase::willCheckAndDispatchMessageEvent(sourceFrame, targetFrame, target, event))
-            return true;
-        return Base::willCheckAndDispatchMessageEvent(sourceFrame, targetFrame, target, event);
-    }
-    virtual blink::WebColorChooser* createColorChooser(blink::WebColorChooserClient* client, const blink::WebColor& color, const blink::WebVector<blink::WebColorSuggestion>& suggestions)
-    {
-        return WebTestProxyBase::createColorChooser(client, color, suggestions);
-    }
     virtual bool runFileChooser(const blink::WebFileChooserParams& params, blink::WebFileChooserCompletion* completion)
     {
         return WebTestProxyBase::runFileChooser(params, completion);
@@ -467,6 +378,6 @@
     DISALLOW_COPY_AND_ASSIGN(WebTestProxy);
 };
 
-}
+}  // namespace content
 
 #endif  // CONTENT_SHELL_RENDERER_TEST_RUNNER_WEBTESTPROXY_H_
diff --git a/content/shell/renderer/test_runner/event_sender.cc b/content/shell/renderer/test_runner/event_sender.cc
index 53e2f11..164d412 100644
--- a/content/shell/renderer/test_runner/event_sender.cc
+++ b/content/shell/renderer/test_runner/event_sender.cc
@@ -11,7 +11,6 @@
 #include "content/shell/renderer/test_runner/TestInterfaces.h"
 #include "content/shell/renderer/test_runner/WebTestDelegate.h"
 #include "content/shell/renderer/test_runner/WebTestProxy.h"
-#include "content/shell/renderer/test_runner/key_code_mapping.h"
 #include "gin/handle.h"
 #include "gin/object_template_builder.h"
 #include "gin/wrappable.h"
@@ -21,16 +20,9 @@
 #include "third_party/WebKit/public/web/WebFrame.h"
 #include "third_party/WebKit/public/web/WebKit.h"
 #include "third_party/WebKit/public/web/WebView.h"
+#include "ui/events/keycodes/keyboard_codes.h"
 #include "v8/include/v8.h"
 
-#if defined(OS_WIN)
-#include "third_party/WebKit/public/web/win/WebInputEventFactory.h"
-#elif defined(OS_MACOSX)
-#include "third_party/WebKit/public/web/mac/WebInputEventFactory.h"
-#elif defined(OS_ANDROID)
-#include "third_party/WebKit/public/web/android/WebInputEventFactory.h"
-#endif
-
 using blink::WebContextMenuData;
 using blink::WebDragData;
 using blink::WebDragOperationsMask;
@@ -48,10 +40,6 @@
 using blink::WebVector;
 using blink::WebView;
 
-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_ANDROID)
-using blink::WebInputEventFactory;
-#endif
-
 namespace content {
 
 namespace {
@@ -286,16 +274,16 @@
     return false;
 
   switch (event.windowsKeyCode) {
-    case VKEY_LEFT:
+    case ui::VKEY_LEFT:
       *name = "MoveToBeginningOfLine";
       break;
-    case VKEY_RIGHT:
+    case ui::VKEY_RIGHT:
       *name = "MoveToEndOfLine";
       break;
-    case VKEY_UP:
+    case ui::VKEY_UP:
       *name = "MoveToBeginningOfDocument";
       break;
-    case VKEY_DOWN:
+    case ui::VKEY_DOWN:
       *name = "MoveToEndOfDocument";
       break;
     default:
@@ -311,6 +299,16 @@
 #endif
 }
 
+bool IsSystemKeyEvent(const WebKeyboardEvent& event) {
+#if defined(OS_MACOSX)
+  return event.modifiers & WebInputEvent::MetaKey &&
+      event.windowsKeyCode != ui::VKEY_B &&
+      event.windowsKeyCode != ui::VKEY_I;
+#else
+  return !!(event.modifiers & WebInputEvent::AltKey);
+#endif
+}
+
 }  // namespace
 
 class EventSenderBindings : public gin::Wrappable<EventSenderBindings> {
@@ -340,7 +338,7 @@
   void SetPageScaleFactor(gin::Arguments* args);
   void ClearTouchPoints();
   void ReleaseTouchPoint(unsigned index);
-  void UpdateTouchPoint(unsigned index, int x, int y);
+  void UpdateTouchPoint(unsigned index, double x, double y);
   void CancelTouchPoint(unsigned index);
   void SetTouchModifier(const std::string& key_name, bool set_mask);
   void DumpFilenameBeingDragged();
@@ -369,7 +367,6 @@
   void GestureLongTap(gin::Arguments* args);
   void GestureTwoFingerTap(gin::Arguments* args);
   void ContinuousMouseScrollBy(gin::Arguments* args);
-  void DispatchMessage(int msg, int wparam, int lparam);
   void MouseMoveTo(gin::Arguments* args);
   void MouseScrollBy(gin::Arguments* args);
   void MouseMomentumScrollBy(gin::Arguments* args);
@@ -493,7 +490,6 @@
                  &EventSenderBindings::GestureTwoFingerTap)
       .SetMethod("continuousMouseScrollBy",
                  &EventSenderBindings::ContinuousMouseScrollBy)
-      .SetMethod("dispatchMessage", &EventSenderBindings::DispatchMessage)
       .SetMethod("keyDown", &EventSenderBindings::KeyDown)
       .SetMethod("mouseDown", &EventSenderBindings::MouseDown)
       .SetMethod("mouseMoveTo", &EventSenderBindings::MouseMoveTo)
@@ -587,8 +583,8 @@
   if (!sender_)
     return;
   float scale_factor;
-  int x;
-  int y;
+  double x;
+  double y;
   if (args->PeekNext().IsEmpty())
     return;
   args->GetNext(&scale_factor);
@@ -598,7 +594,8 @@
   if (args->PeekNext().IsEmpty())
     return;
   args->GetNext(&y);
-  sender_->SetPageScaleFactor(scale_factor, x, y);
+  sender_->SetPageScaleFactor(scale_factor,
+                              static_cast<int>(x), static_cast<int>(y));
 }
 
 void EventSenderBindings::ClearTouchPoints() {
@@ -611,9 +608,9 @@
     sender_->ReleaseTouchPoint(index);
 }
 
-void EventSenderBindings::UpdateTouchPoint(unsigned index, int x, int y) {
+void EventSenderBindings::UpdateTouchPoint(unsigned index, double x, double y) {
   if (sender_)
-    sender_->UpdateTouchPoint(index, x, y);
+    sender_->UpdateTouchPoint(index, static_cast<int>(x), static_cast<int>(y));
 }
 
 void EventSenderBindings::CancelTouchPoint(unsigned index) {
@@ -762,11 +759,6 @@
     sender_->ContinuousMouseScrollBy(args);
 }
 
-void EventSenderBindings::DispatchMessage(int msg, int wparam, int lparam) {
-  if (sender_)
-    sender_->DispatchMessage(msg, wparam, lparam);
-}
-
 void EventSenderBindings::MouseMoveTo(gin::Arguments* args) {
   if (sender_)
     sender_->MouseMoveTo(args);
@@ -1163,45 +1155,45 @@
 
   if ("\n" == code_str) {
     generate_char = true;
-    text = code = VKEY_RETURN;
+    text = code = ui::VKEY_RETURN;
   } else if ("rightArrow" == code_str) {
-    code = VKEY_RIGHT;
+    code = ui::VKEY_RIGHT;
   } else if ("downArrow" == code_str) {
-    code = VKEY_DOWN;
+    code = ui::VKEY_DOWN;
   } else if ("leftArrow" == code_str) {
-    code = VKEY_LEFT;
+    code = ui::VKEY_LEFT;
   } else if ("upArrow" == code_str) {
-    code = VKEY_UP;
+    code = ui::VKEY_UP;
   } else if ("insert" == code_str) {
-    code = VKEY_INSERT;
+    code = ui::VKEY_INSERT;
   } else if ("delete" == code_str) {
-    code = VKEY_DELETE;
+    code = ui::VKEY_DELETE;
   } else if ("pageUp" == code_str) {
-    code = VKEY_PRIOR;
+    code = ui::VKEY_PRIOR;
   } else if ("pageDown" == code_str) {
-    code = VKEY_NEXT;
+    code = ui::VKEY_NEXT;
   } else if ("home" == code_str) {
-    code = VKEY_HOME;
+    code = ui::VKEY_HOME;
   } else if ("end" == code_str) {
-    code = VKEY_END;
+    code = ui::VKEY_END;
   } else if ("printScreen" == code_str) {
-    code = VKEY_SNAPSHOT;
+    code = ui::VKEY_SNAPSHOT;
   } else if ("menu" == code_str) {
-    code = VKEY_APPS;
+    code = ui::VKEY_APPS;
   } else if ("leftControl" == code_str) {
-    code = VKEY_LCONTROL;
+    code = ui::VKEY_LCONTROL;
   } else if ("rightControl" == code_str) {
-    code = VKEY_RCONTROL;
+    code = ui::VKEY_RCONTROL;
   } else if ("leftShift" == code_str) {
-    code = VKEY_LSHIFT;
+    code = ui::VKEY_LSHIFT;
   } else if ("rightShift" == code_str) {
-    code = VKEY_RSHIFT;
+    code = ui::VKEY_RSHIFT;
   } else if ("leftAlt" == code_str) {
-    code = VKEY_LMENU;
+    code = ui::VKEY_LMENU;
   } else if ("rightAlt" == code_str) {
-    code = VKEY_RMENU;
+    code = ui::VKEY_RMENU;
   } else if ("numLock" == code_str) {
-    code = VKEY_NUMLOCK;
+    code = ui::VKEY_NUMLOCK;
   } else {
     // Compare the input string with the function-key names defined by the
     // DOM spec (i.e. "F1",...,"F24"). If the input string is a function-key
@@ -1209,7 +1201,7 @@
     for (int i = 1; i <= 24; ++i) {
       std::string function_key_name = base::StringPrintf("F%d", i);
       if (function_key_name == code_str) {
-        code = VKEY_F1 + (i - 1);
+        code = ui::VKEY_F1 + (i - 1);
         break;
       }
     }
@@ -1247,10 +1239,8 @@
 
   event_down.setKeyIdentifierFromWindowsKeyCode();
 
-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_ANDROID)
   if (event_down.modifiers != 0)
-    event_down.isSystemKey = WebInputEventFactory::isSystemKeyEvent(event_down);
-#endif
+    event_down.isSystemKey = IsSystemKeyEvent(event_down);
 
   if (needs_shift_key_modifier)
     event_down.modifiers |= WebInputEvent::ShiftKey;
@@ -1278,7 +1268,7 @@
 
   view_->handleInputEvent(event_down);
 
-  if (code == VKEY_ESCAPE && !current_drag_data_.isNull()) {
+  if (code == ui::VKEY_ESCAPE && !current_drag_data_.isNull()) {
     WebMouseEvent event;
     InitMouseEvent(WebInputEvent::MouseDown,
                    pressed_button_,
@@ -1349,7 +1339,9 @@
   pressed_button_= WebMouseEvent::ButtonNone;
 #endif
 
-  return MakeMenuItemStringsFor(last_context_menu_data_.release(), delegate_);
+  std::vector<std::string> menu_items = MakeMenuItemStringsFor(last_context_menu_data_.get(), delegate_);
+  last_context_menu_data_.reset();
+  return menu_items;
 }
 
 void EventSender::TextZoomIn() {
@@ -1361,8 +1353,7 @@
 }
 
 void EventSender::ZoomPageIn() {
-  const std::vector<WebTestRunner::WebTestProxyBase*>& window_list =
-      interfaces_->windowList();
+  const std::vector<WebTestProxyBase*>& window_list = interfaces_->windowList();
 
   for (size_t i = 0; i < window_list.size(); ++i) {
     window_list.at(i)->webView()->setZoomLevel(
@@ -1371,8 +1362,7 @@
 }
 
 void EventSender::ZoomPageOut() {
-  const std::vector<WebTestRunner::WebTestProxyBase*>& window_list =
-      interfaces_->windowList();
+  const std::vector<WebTestProxyBase*>& window_list = interfaces_->windowList();
 
   for (size_t i = 0; i < window_list.size(); ++i) {
     window_list.at(i)->webView()->setZoomLevel(
@@ -1389,15 +1379,27 @@
   touch_points_.clear();
 }
 
+void EventSender::ThrowTouchPointError() {
+  v8::Isolate* isolate = blink::mainThreadIsolate();
+  isolate->ThrowException(v8::Exception::TypeError(
+      gin::StringToV8(isolate, "Invalid touch point.")));
+}
+
 void EventSender::ReleaseTouchPoint(unsigned index) {
-  DCHECK_LT(index, touch_points_.size());
+  if (index >= touch_points_.size()) {
+    ThrowTouchPointError();
+    return;
+  }
 
   WebTouchPoint* touch_point = &touch_points_[index];
   touch_point->state = WebTouchPoint::StateReleased;
 }
 
 void EventSender::UpdateTouchPoint(unsigned index, int x, int y) {
-  DCHECK_LT(index, touch_points_.size());
+  if (index >= touch_points_.size()) {
+    ThrowTouchPointError();
+    return;
+  }
 
   WebTouchPoint* touch_point = &touch_points_[index];
   touch_point->state = WebTouchPoint::StateMoved;
@@ -1406,7 +1408,10 @@
 }
 
 void EventSender::CancelTouchPoint(unsigned index) {
-  DCHECK_LT(index, touch_points_.size());
+  if (index >= touch_points_.size()) {
+    ThrowTouchPointError();
+    return;
+  }
 
   WebTouchPoint* touch_point = &touch_points_[index];
   touch_point->state = WebTouchPoint::StateCancelled;
@@ -1537,24 +1542,25 @@
 }
 
 void EventSender::AddTouchPoint(gin::Arguments* args) {
-  int x;
-  int y;
+  double x;
+  double y;
   args->GetNext(&x);
   args->GetNext(&y);
 
   WebTouchPoint touch_point;
   touch_point.state = WebTouchPoint::StatePressed;
-  touch_point.position = WebFloatPoint(x, y);
+  touch_point.position = WebFloatPoint(static_cast<int>(x),
+                                       static_cast<int>(y));
   touch_point.screenPosition = touch_point.position;
 
   if (!args->PeekNext().IsEmpty()) {
-    int radius_x;
+    double radius_x;
     if (!args->GetNext(&radius_x)) {
       args->ThrowError();
       return;
     }
 
-    int radius_y = radius_x;
+    double radius_y = radius_x;
     if (!args->PeekNext().IsEmpty()) {
       if (!args->GetNext(&radius_y)) {
         args->ThrowError();
@@ -1562,8 +1568,8 @@
       }
     }
 
-    touch_point.radiusX = radius_x;
-    touch_point.radiusY = radius_y;
+    touch_point.radiusX = static_cast<int>(radius_x);
+    touch_point.radiusY = static_cast<int>(radius_y);
   }
 
   int lowest_id = 0;
@@ -1667,31 +1673,15 @@
   view_->handleInputEvent(event);
 }
 
-void EventSender::DispatchMessage(int msg, int wparam, int lparam) {
-#if defined(OS_WIN)
-  // WebKit's version of this function stuffs a MSG struct and uses
-  // TranslateMessage and DispatchMessage. We use a WebKeyboardEvent, which
-  // doesn't need to receive the DeadChar and SysDeadChar messages.
-  if (msg == WM_DEADCHAR || msg == WM_SYSDEADCHAR)
-    return;
-
-  if (force_layout_on_events_)
-    view_->layout();
-
-  view_->handleInputEvent(
-      WebInputEventFactory::keyboardEvent(0, msg, wparam, lparam));
-#endif
-}
-
 void EventSender::MouseMoveTo(gin::Arguments* args) {
   if (force_layout_on_events_)
     view_->layout();
 
-  int x;
-  int y;
+  double x;
+  double y;
   args->GetNext(&x);
   args->GetNext(&y);
-  WebPoint mouse_pos(x, y);
+  WebPoint mouse_pos(static_cast<int>(x), static_cast<int>(y));
 
   int modifiers = 0;
   if (!args->PeekNext().IsEmpty())
diff --git a/content/shell/renderer/test_runner/event_sender.h b/content/shell/renderer/test_runner/event_sender.h
index e1423a5..e942c17 100644
--- a/content/shell/renderer/test_runner/event_sender.h
+++ b/content/shell/renderer/test_runner/event_sender.h
@@ -107,6 +107,7 @@
   void UpdateTouchPoint(unsigned index, int x, int y);
   void CancelTouchPoint(unsigned index);
   void SetTouchModifier(const std::string& key_name, bool set_mask);
+  void ThrowTouchPointError();
 
   void DumpFilenameBeingDragged();
 
@@ -142,7 +143,6 @@
   void GestureTwoFingerTap(gin::Arguments* args);
 
   void ContinuousMouseScrollBy(gin::Arguments* args);
-  void DispatchMessage(int msg, int wparam, int lparam);
   void MouseMoveTo(gin::Arguments* args);
   void MouseScrollBy(gin::Arguments* args);
   void MouseMomentumScrollBy(gin::Arguments* args);
diff --git a/content/shell/renderer/test_runner/key_code_mapping.h b/content/shell/renderer/test_runner/key_code_mapping.h
deleted file mode 100644
index b7cb5ce..0000000
--- a/content/shell/renderer/test_runner/key_code_mapping.h
+++ /dev/null
@@ -1,39 +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.
-
-#ifndef CONTENT_SHELL_RENDERER_TEST_RUNNER_KEY_CODE_MAPPING_H_
-#define CONTENT_SHELL_RENDERER_TEST_RUNNER_KEY_CODE_MAPPING_H_
-
-namespace content {
-
-// The keycodes match the values of the virtual keycodes found here
-// http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx
-enum {
-    VKEY_RETURN   = 0x0D,
-    VKEY_ESCAPE   = 0x1B,
-    VKEY_PRIOR    = 0x21,
-    VKEY_NEXT     = 0x22,
-    VKEY_END      = 0x23,
-    VKEY_HOME     = 0x24,
-    VKEY_LEFT     = 0x25,
-    VKEY_UP       = 0x26,
-    VKEY_RIGHT    = 0x27,
-    VKEY_DOWN     = 0x28,
-    VKEY_SNAPSHOT = 0x2C,
-    VKEY_INSERT   = 0x2D,
-    VKEY_DELETE   = 0x2E,
-    VKEY_APPS     = 0x5D,
-    VKEY_F1       = 0x70,
-    VKEY_NUMLOCK  = 0x90,
-    VKEY_LSHIFT   = 0xA0,
-    VKEY_RSHIFT   = 0xA1,
-    VKEY_LCONTROL = 0xA2,
-    VKEY_RCONTROL = 0xA3,
-    VKEY_LMENU    = 0xA4,
-    VKEY_RMENU    = 0xA5,
-};
-
-}  // namespace content
-
-#endif  // CONTENT_SHELL_RENDERER_TEST_RUNNER_KEY_CODE_MAPPING_H_
diff --git a/content/shell/renderer/test_runner/test_runner.cc b/content/shell/renderer/test_runner/test_runner.cc
index 01235c9..692b4d2 100644
--- a/content/shell/renderer/test_runner/test_runner.cc
+++ b/content/shell/renderer/test_runner/test_runner.cc
@@ -1104,9 +1104,11 @@
 
 void TestRunnerBindings::ShowWebInspector(gin::Arguments* args) {
   if (runner_) {
-    std::string str;
-    args->GetNext(&str);
-    runner_->ShowWebInspector(str);
+    std::string settings;
+    args->GetNext(&settings);
+    std::string frontend_url;
+    args->GetNext(&frontend_url);
+    runner_->ShowWebInspector(settings, frontend_url);
   }
 }
 
@@ -1732,8 +1734,9 @@
   delegate_->clearDevToolsLocalStorage();
 }
 
-void TestRunner::showDevTools(const std::string& settings) {
-  delegate_->showDevTools(settings);
+void TestRunner::showDevTools(const std::string& settings,
+                              const std::string& frontend_url) {
+  delegate_->showDevTools(settings, frontend_url);
 }
 
 class WorkItemBackForward : public TestRunner::WorkItem {
@@ -2202,7 +2205,7 @@
 }
 
 void TestRunner::SetMockScreenOrientation(const std::string& orientation_str) {
-  blink::WebScreenOrientation orientation;
+  blink::WebScreenOrientationType orientation;
 
   if (orientation_str == "portrait-primary") {
     orientation = WebScreenOrientationPortraitPrimary;
@@ -2463,8 +2466,9 @@
   use_mock_theme_ = use;
 }
 
-void TestRunner::ShowWebInspector(const std::string& str) {
-  showDevTools(str);
+void TestRunner::ShowWebInspector(const std::string& str,
+                                  const std::string& frontend_url) {
+  showDevTools(str, frontend_url);
 }
 
 void TestRunner::CloseWebInspector() {
diff --git a/content/shell/renderer/test_runner/test_runner.h b/content/shell/renderer/test_runner/test_runner.h
index d9388ef..4514c94 100644
--- a/content/shell/renderer/test_runner/test_runner.h
+++ b/content/shell/renderer/test_runner/test_runner.h
@@ -32,7 +32,6 @@
 class TestInterfaces;
 class WebPermissions;
 class WebTestDelegate;
-class WebTestProxyBase;
 }
 
 namespace content {
@@ -40,6 +39,7 @@
 class InvokeCallbackTask;
 class NotificationPresenter;
 class TestPageOverlay;
+class WebTestProxyBase;
 
 class TestRunner : public ::WebTestRunner::WebTestRunner,
                    public base::SupportsWeakPtr<TestRunner> {
@@ -50,7 +50,7 @@
   void Install(blink::WebFrame* frame);
 
   void SetDelegate(::WebTestRunner::WebTestDelegate*);
-  void SetWebView(blink::WebView*, ::WebTestRunner::WebTestProxyBase*);
+  void SetWebView(blink::WebView*, WebTestProxyBase*);
 
   void Reset();
 
@@ -81,7 +81,8 @@
   bool shouldDumpAsMarkup();
   bool shouldDumpChildFrameScrollPositions() const;
   bool shouldDumpChildFramesAsText() const;
-  void showDevTools(const std::string& settings);
+  void showDevTools(const std::string& settings,
+                    const std::string& frontend_url);
   void clearDevToolsLocalStorage();
   void setShouldDumpAsText(bool);
   void setShouldDumpAsMarkup(bool);
@@ -449,7 +450,8 @@
   // Methods forwarding to the WebTestDelegate
 
   // Shows DevTools window.
-  void ShowWebInspector(const std::string& str);
+  void ShowWebInspector(const std::string& str,
+                        const std::string& frontend_url);
   void CloseWebInspector();
 
   // Inspect chooser state
@@ -681,7 +683,7 @@
   ::WebTestRunner::WebTestDelegate* delegate_;
   blink::WebView* web_view_;
   TestPageOverlay* page_overlay_;
-  ::WebTestRunner::WebTestProxyBase* proxy_;
+  WebTestProxyBase* proxy_;
 
   // This is non-0 IFF a load is in progress.
   blink::WebFrame* top_loading_frame_;
diff --git a/content/shell/renderer/webkit_test_runner.cc b/content/shell/renderer/webkit_test_runner.cc
index 826d47a..5e96587 100644
--- a/content/shell/renderer/webkit_test_runner.cc
+++ b/content/shell/renderer/webkit_test_runner.cc
@@ -84,13 +84,12 @@
 using blink::WebURL;
 using blink::WebURLError;
 using blink::WebURLRequest;
-using blink::WebScreenOrientation;
+using blink::WebScreenOrientationType;
 using blink::WebTestingSupport;
 using blink::WebVector;
 using blink::WebView;
 using WebTestRunner::WebTask;
 using WebTestRunner::WebTestInterfaces;
-using WebTestRunner::WebTestProxyBase;
 
 namespace content {
 
@@ -214,7 +213,7 @@
       focused_view_(NULL),
       is_main_window_(false),
       focus_on_next_commit_(false),
-      leak_detector_(new LeakDetector())
+      leak_detector_(new LeakDetector(this))
 {
   UseMockMediaStreams(render_view);
 }
@@ -259,7 +258,7 @@
 }
 
 void WebKitTestRunner::setScreenOrientation(
-    const WebScreenOrientation& orientation) {
+    const WebScreenOrientationType& orientation) {
   SetMockScreenOrientation(orientation);
 }
 
@@ -406,8 +405,10 @@
   Send(new ShellViewHostMsg_ClearDevToolsLocalStorage(routing_id()));
 }
 
-void WebKitTestRunner::showDevTools(const std::string& settings) {
-  Send(new ShellViewHostMsg_ShowDevTools(routing_id(), settings));
+void WebKitTestRunner::showDevTools(const std::string& settings,
+                                    const std::string& frontend_url) {
+  Send(new ShellViewHostMsg_ShowDevTools(
+      routing_id(), settings, frontend_url));
 }
 
 void WebKitTestRunner::closeDevTools() {
@@ -731,19 +732,17 @@
 }
 
 void WebKitTestRunner::OnTryLeakDetection() {
-  base::MessageLoop::current()->PostTask(
-      FROM_HERE,
-      base::Bind(&WebKitTestRunner::TryLeakDetection, base::Unretained(this)));
-}
-
-void WebKitTestRunner::TryLeakDetection() {
   WebLocalFrame* main_frame =
       render_view()->GetWebView()->mainFrame()->toWebLocalFrame();
   DCHECK_EQ(GURL(kAboutBlankURL), GURL(main_frame->document().url()));
   DCHECK(!main_frame->isLoading());
 
-  LeakDetectionResult result = leak_detector_->TryLeakDetection(main_frame);
-  Send(new ShellViewHostMsg_LeakDetectionDone(routing_id(), result));
+  leak_detector_->TryLeakDetection(main_frame);
+}
+
+void WebKitTestRunner::ReportLeakDetectionResult(
+    const LeakDetectionResult& report) {
+  Send(new ShellViewHostMsg_LeakDetectionDone(routing_id(), report));
 }
 
 }  // namespace content
diff --git a/content/shell/renderer/webkit_test_runner.h b/content/shell/renderer/webkit_test_runner.h
index 9d9c935..aceb56b 100644
--- a/content/shell/renderer/webkit_test_runner.h
+++ b/content/shell/renderer/webkit_test_runner.h
@@ -15,7 +15,7 @@
 #include "content/shell/common/shell_test_configuration.h"
 #include "content/shell/common/test_runner/test_preferences.h"
 #include "content/shell/renderer/test_runner/WebTestDelegate.h"
-#include "third_party/WebKit/public/platform/WebScreenOrientation.h"
+#include "third_party/WebKit/public/platform/WebScreenOrientationType.h"
 #include "v8/include/v8.h"
 
 class SkCanvas;
@@ -26,13 +26,11 @@
 struct WebRect;
 }
 
-namespace WebTestRunner {
-class WebTestProxyBase;
-}
-
 namespace content {
 
 class LeakDetector;
+class WebTestProxyBase;
+struct LeakDetectionResult;
 
 // This is the renderer side of the webkit test runner.
 class WebKitTestRunner : public RenderViewObserver,
@@ -66,7 +64,7 @@
   virtual void setDeviceOrientationData(
       const blink::WebDeviceOrientationData& data) OVERRIDE;
   virtual void setScreenOrientation(
-      const blink::WebScreenOrientation& orientation) OVERRIDE;
+      const blink::WebScreenOrientationType& orientation) OVERRIDE;
   virtual void printMessage(const std::string& message) OVERRIDE;
   virtual void postTask(::WebTestRunner::WebTask* task) OVERRIDE;
   virtual void postDelayedTask(::WebTestRunner::WebTask* task,
@@ -88,15 +86,15 @@
                                     const blink::WebSize& max_size) OVERRIDE;
   virtual void disableAutoResizeMode(const blink::WebSize& new_size) OVERRIDE;
   virtual void clearDevToolsLocalStorage() OVERRIDE;
-  virtual void showDevTools(const std::string& settings) OVERRIDE;
+  virtual void showDevTools(const std::string& settings,
+                            const std::string& frontend_url) OVERRIDE;
   virtual void closeDevTools() OVERRIDE;
   virtual void evaluateInWebInspector(long call_id,
                                       const std::string& script) OVERRIDE;
   virtual void clearAllDatabases() OVERRIDE;
   virtual void setDatabaseQuota(int quota) OVERRIDE;
   virtual void setDeviceScaleFactor(float factor) OVERRIDE;
-  virtual void setFocus(WebTestRunner::WebTestProxyBase* proxy,
-                        bool focus) OVERRIDE;
+  virtual void setFocus(WebTestProxyBase* proxy, bool focus) OVERRIDE;
   virtual void setAcceptAllCookies(bool accept) OVERRIDE;
   virtual std::string pathToLocalResource(const std::string& resource) OVERRIDE;
   virtual void setLocale(const std::string& locale) OVERRIDE;
@@ -110,14 +108,16 @@
                                const std::string& frame_name) OVERRIDE;
   virtual bool allowExternalPages() OVERRIDE;
   virtual void captureHistoryForWindow(
-      WebTestRunner::WebTestProxyBase* proxy,
+      WebTestProxyBase* proxy,
       blink::WebVector<blink::WebHistoryItem>* history,
       size_t* currentEntryIndex) OVERRIDE;
 
   void Reset();
 
-  void set_proxy(::WebTestRunner::WebTestProxyBase* proxy) { proxy_ = proxy; }
-  ::WebTestRunner::WebTestProxyBase* proxy() const { return proxy_; }
+  void set_proxy(WebTestProxyBase* proxy) { proxy_ = proxy; }
+  WebTestProxyBase* proxy() const { return proxy_; }
+
+  void ReportLeakDetectionResult(const LeakDetectionResult& result);
 
  private:
   // Message handlers.
@@ -134,9 +134,7 @@
   // the TestRunner library and sends them to the browser process.
   void CaptureDump();
 
-  void TryLeakDetection();
-
-  ::WebTestRunner::WebTestProxyBase* proxy_;
+  WebTestProxyBase* proxy_;
 
   RenderView* focused_view_;
 
diff --git a/content/test/data/accessibility/a-no-text-expected-android.txt b/content/test/data/accessibility/a-no-text-expected-android.txt
new file mode 100644
index 0000000..5700350
--- /dev/null
+++ b/content/test/data/accessibility/a-no-text-expected-android.txt
@@ -0,0 +1,10 @@
+android.webkit.WebView focusable focused scrollable
+    android.view.View
+        android.view.View clickable focusable name='dest1'
+        android.view.View clickable focusable name='dest2'
+        android.view.View clickable focusable name='dest3'
+        android.view.View clickable focusable name='dest4'
+        android.view.View clickable focusable name='dest5'
+        android.view.View clickable focusable name='dest6'
+        android.view.View clickable focusable name='dest7'
+        android.view.View clickable focusable name='dest.8'
diff --git a/content/test/data/accessibility/a-no-text-expected-mac.txt b/content/test/data/accessibility/a-no-text-expected-mac.txt
new file mode 100644
index 0000000..81e1652
--- /dev/null
+++ b/content/test/data/accessibility/a-no-text-expected-mac.txt
@@ -0,0 +1 @@
+#<skip -- need to generate>
diff --git a/content/test/data/accessibility/a-no-text-expected-win.txt b/content/test/data/accessibility/a-no-text-expected-win.txt
new file mode 100644
index 0000000..81e1652
--- /dev/null
+++ b/content/test/data/accessibility/a-no-text-expected-win.txt
@@ -0,0 +1 @@
+#<skip -- need to generate>
diff --git a/content/test/data/accessibility/a-no-text.html b/content/test/data/accessibility/a-no-text.html
new file mode 100644
index 0000000..6714b9d
--- /dev/null
+++ b/content/test/data/accessibility/a-no-text.html
@@ -0,0 +1,15 @@
+<!--
+@WIN-ALLOW:LINKED
+-->
+<html>
+<body>
+  <a href="dest1"><img src="#"> </a>
+  <a href="/dest2"><img src="#"> </a>
+  <a href="dest3/"><img src="#"> </a>
+  <a href="http://example.com/dest4"><img src="#"> </a>
+  <a href="http://example.com/dest5/"><img src="#"> </a>
+  <a href="dest6.html"><img src="#"> </a>
+  <a href="http://example.com/dest7.html"><img src="#"> </a>
+  <a href="http://example.com/dest.8.html"><img src="#"> </a>
+</body>
+</html>
diff --git a/content/test/data/error-body-no-crash.html b/content/test/data/error-body-no-crash.html
deleted file mode 100644
index cf0b32c..0000000
--- a/content/test/data/error-body-no-crash.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<!-- The showModalDialog call will force a nested message loop, which will
-     receive the 404 body and crash. -->
-<script src="page404.html"></script>
-<script>
-window.showModalDialog("javascript:window.close();");
-</script>
diff --git a/content/test/data/gpu/pixel_browser_plugin.html b/content/test/data/gpu/pixel_browser_plugin.html
index 1534cec..f8023ca 100644
--- a/content/test/data/gpu/pixel_browser_plugin.html
+++ b/content/test/data/gpu/pixel_browser_plugin.html
@@ -2,7 +2,7 @@
 
 <!-- READ BEFORE UPDATING:
 If this test is updated make sure to increment the "revision" value of the
-associated test in content/test/gpu/page_sets/pixel_tests.json. This will ensure
+associated test in content/test/gpu/page_sets/pixel_tests.py. This will ensure
 that the baseline images are regenerated on the next run.
 -->
 
diff --git a/content/test/data/gpu/pixel_canvas2d.html b/content/test/data/gpu/pixel_canvas2d.html
index 75bfe49..7ebbad9 100644
--- a/content/test/data/gpu/pixel_canvas2d.html
+++ b/content/test/data/gpu/pixel_canvas2d.html
@@ -2,7 +2,7 @@
 
 <!-- READ BEFORE UPDATING:
 If this test is updated make sure to increment the "revision" value of the
-associated test in content/test/gpu/page_sets/pixel_tests.json. This will ensure
+associated test in content/test/gpu/page_sets/pixel_tests.py. This will ensure
 that the baseline images are regenerated on the next run.
 -->
 
diff --git a/content/test/data/gpu/pixel_css3d.html b/content/test/data/gpu/pixel_css3d.html
index 38e4f4e..ebbad4c 100644
--- a/content/test/data/gpu/pixel_css3d.html
+++ b/content/test/data/gpu/pixel_css3d.html
@@ -2,7 +2,7 @@
 
 <!-- READ BEFORE UPDATING:
 If this test is updated make sure to increment the "revision" value of the
-associated test in content/test/gpu/page_sets/pixel_tests.json. This will ensure
+associated test in content/test/gpu/page_sets/pixel_tests.py. This will ensure
 that the baseline images are regenerated on the next run.
 -->
 
diff --git a/content/test/data/gpu/pixel_webgl.html b/content/test/data/gpu/pixel_webgl.html
index b82fa81..68fab9e 100644
--- a/content/test/data/gpu/pixel_webgl.html
+++ b/content/test/data/gpu/pixel_webgl.html
@@ -2,7 +2,7 @@
 
 <!-- READ BEFORE UPDATING:
 If this test is updated make sure to increment the "revision" value of the
-associated test in content/test/gpu/page_sets/pixel_tests.json. This will ensure
+associated test in content/test/gpu/page_sets/pixel_tests.py. This will ensure
 that the baseline images are regenerated on the next run.
 -->
 
diff --git a/content/test/data/indexeddb/corrupted_open_db_detection.html b/content/test/data/indexeddb/corrupted_open_db_detection.html
index 198aed5..b5e8352 100644
--- a/content/test/data/indexeddb/corrupted_open_db_detection.html
+++ b/content/test/data/indexeddb/corrupted_open_db_detection.html
@@ -10,7 +10,14 @@
 <script type="text/javascript" src="common.js"></script>
 <script>
 
+var testType = 'get';
+
 function test() {
+  testType = location.hash.substring(1);
+  if (testType == 'testCommon') {
+    fail('"testCommon" is a reserved test name');
+    return;
+  }
   indexedDBTest(upgradeCallback, openCallback);
 }
 
@@ -59,7 +66,7 @@
   }
 }
 
-function transactionAbort() {
+function transactionAbort(event) {
   if (event.target.error) {
     numTransactionAborts += 1;
   } else {
@@ -80,17 +87,43 @@
   done("Closed as expected");
 }
 
-function getData() {
-  transaction = db.transaction('storeName');
-  db.onclose = databaseClosed;
-  transaction.onabort = transactionAbort;
-  transaction.onerror = transactionError;
-  request.oncomplete = unexpectedCompleteCallback;
-  store = transaction.objectStore('storeName');
-  request = store.get('key-0');
-  request.onsuccess = unexpectedSuccessCallback;
-  request.onerror = requestError;
-}
+var tests = {
+  // Common setup tasks for the other tests in this object
+  testCommon: function(mode) {
+    transaction = db.transaction('storeName', mode);
+    db.onclose = databaseClosed;
+    transaction.onabort = transactionAbort;
+    transaction.onerror = transactionError;
+    objectStore = transaction.objectStore('storeName');
+  },
+  get: function() {
+    tests.testCommon('readonly');
+    request = objectStore.get('key-0');
+    request.onsuccess = unexpectedSuccessCallback;
+    request.onerror = requestError;
+  },
+  iterate: function() {
+    tests.testCommon('readonly');
+    request = objectStore.openCursor();
+    request.onerror = requestError;
+    request.onsuccess = function (event){
+      var cursor = request.result;
+      if (cursor) {
+        // Get an object. Probably shouldn't get this far, but won't call this an error.
+        cursor.continue();
+      } else {
+        // Got the last object. We shouldn't get this far.
+        fail("Should *not* have been able to iterate over database.");
+      }
+    };
+  },
+  clearObjectStore: function() {
+    tests.testCommon('readwrite');
+    request = objectStore.clear();
+    request.onerror = requestError;
+    request.onsuccess = unexpectedSuccessCallback
+  }
+};
 
 function openCallback() {
   var xmlhttp = new window.XMLHttpRequest();
@@ -99,7 +132,11 @@
       if (xmlhttp.readyState === 4) {
         if (xmlhttp.status === 200) {
           // The database is now corrupt.
-          getData();
+          if (testType in tests) {
+            tests[testType]();
+          } else {
+            fail('Unknown test: "' + testType + '"');
+          }
         }
       }
     };
diff --git a/content/test/data/media/getusermedia.html b/content/test/data/media/getusermedia.html
index 7da1175..1ee7b0d 100644
--- a/content/test/data/media/getusermedia.html
+++ b/content/test/data/media/getusermedia.html
@@ -157,9 +157,8 @@
   }
 
   // Creates two MediaStream and renders them locally. When the video of both
-  // streams are detected to be rolling, we stop the local stream. Since both
-  // streams have the same source, both video streams should stop. If they do,
-  // the test succeeds.
+  // streams are detected to be rolling, we stop the local video tracks one at
+  // the time.
   function twoGetUserMediaAndStop(constraints) {
     console.log('Calling Two GetUserMedia');
     navigator.webkitGetUserMedia(
@@ -173,18 +172,20 @@
           constraints,
           function(stream) {
             displayIntoVideoElement(stream,
-                stopStreamAndVerifyAllLocalViewsDontPlayVideo, 'local-view-2');
+                                    function() {
+                                      stopBothVideoTracksAndVerify(stream); 
+                                    },
+                                    'local-view-2');
           },
           failedCallback);
     };
 
-    var stopStreamAndVerifyAllLocalViewsDontPlayVideo = function() {
-      gLocalStream.getVideoTracks()[0].stop();
-
-      // Since local-view and local-view-2 are playing the video from the same
-      // source, both of them should stop.
-      waitForVideoToStop('local-view');
+    var stopBothVideoTracksAndVerify = function(streamPlayingInLocalView2) {
+      streamPlayingInLocalView2.getVideoTracks()[0].stop();
       waitForVideoToStop('local-view-2');
+      // Make sure the video track in gLocalStream is still playing in 
+      // 'local-view1' and then stop it.
+      displayAndDetectVideo(gLocalStream, stopVideoTrack);
     };
   }
 
diff --git a/content/test/data/media/peerconnection-call.html b/content/test/data/media/peerconnection-call.html
index 017d974..1c7b5bf 100644
--- a/content/test/data/media/peerconnection-call.html
+++ b/content/test/data/media/peerconnection-call.html
@@ -300,7 +300,7 @@
     remoteAudioTrack.enabled = enabled;
   }
 
-  function callAndEnsureAudioIsPlaying() {
+  function callAndEnsureAudioIsPlaying(beLenient) {
     createConnections(null);
     navigator.webkitGetUserMedia({audio: true, video: true},
       addStreamToBothConnectionsAndNegotiate, printGetUserMediaError);
@@ -310,7 +310,7 @@
     var onCallEstablished = function() {
       // Gather 50 samples per second for 2 seconds.
       gatherAudioLevelSamples(gSecondConnection, 100, 50, function(samples) {
-        verifyAudioIsPlaying(samples);
+        verifyAudioIsPlaying(samples, beLenient);
         eventOccured();
       });
 
@@ -321,8 +321,8 @@
     detectVideoPlaying('remote-view-2', onCallEstablished);
   }
 
-  function callAndEnsureAudioTrackMutingWorks() {
-    callAndEnsureAudioIsPlaying();
+  function callAndEnsureAudioTrackMutingWorks(beLenient) {
+    callAndEnsureAudioIsPlaying(beLenient);
     setAllEventsOccuredHandler(function() {
       // Call is up, now mute the track and check everything goes silent (give
       // it a small delay though, we don't expect it to happen instantly).
@@ -337,8 +337,8 @@
     });
   }
 
-  function callAndEnsureAudioTrackUnmutingWorks() {
-    callAndEnsureAudioIsPlaying();
+  function callAndEnsureAudioTrackUnmutingWorks(beLenient) {
+    callAndEnsureAudioIsPlaying(beLenient);
     setAllEventsOccuredHandler(function() {
       // Mute, wait a while, unmute, verify audio gets back up.
       enableRemoteAudio(gSecondConnection, false);
@@ -351,7 +351,7 @@
         // Sample for four seconds here; it can take a bit of time for audio to
         // get back up after the unmute.
         gatherAudioLevelSamples(gSecondConnection, 200, 50, function(samples) {
-          verifyAudioIsPlaying(samples);
+          verifyAudioIsPlaying(samples, beLenient);
           reportTestSuccess();
         });
       }, 1500);
diff --git a/content/test/data/media/webrtc_test_audio.js b/content/test/data/media/webrtc_test_audio.js
index 76ca1b3..0cf4ac7 100644
--- a/content/test/data/media/webrtc_test_audio.js
+++ b/content/test/data/media/webrtc_test_audio.js
@@ -29,13 +29,15 @@
 // audio device in media/video/capture/fake_video_capture_device.cc. Fails the
 // test if we can't see a signal. The samples should have been gathered over at
 // least two seconds since we expect to see at least three "peaks" in there
-// (we should see either 3 or 4 depending on how things line up). We are quite
-// generous in what we consider to be a peak since Android devices in particular
-// seem to be flake-prone (they often don't reach anywhere near the max level
-// for some reason).
-function verifyAudioIsPlaying(samples) {
+// (we should see either 3 or 4 depending on how things line up).
+//
+// If |beLenient| is specified, we assume we're running on a slow device or
+// or under TSAN, and relax the checks quite a bit.
+function verifyAudioIsPlaying(samples, beLenient) {
   var numPeaks = 0;
-  var threshold = MAX_AUDIO_OUTPUT_ENERGY * 0.6;
+  var threshold = MAX_AUDIO_OUTPUT_ENERGY * 0.7;
+  if (beLenient)
+    threshold = MAX_AUDIO_OUTPUT_ENERGY * 0.6;
   var currentlyOverThreshold = false;
 
   // Detect when we have been been over the threshold and is going back again
@@ -48,9 +50,14 @@
 
   console.log('Number of peaks identified: ' + numPeaks);
 
-  if (numPeaks < 2)
-    failTest('Expected to see at least two peaks in audio signal, got ' +
-        numPeaks + '. Dumping samples for analysis: "' + samples + '"');
+  var expectedPeaks = 2;
+  if (beLenient)
+    expectedPeaks = 1;
+
+  if (numPeaks < expectedPeaks)
+    failTest('Expected to see at least ' + expectedPeaks + ' peak(s) in ' +
+        'audio signal, got ' + numPeaks + '. Dumping samples for analysis: "' +
+        samples + '"');
 }
 
 // If silent (like when muted), we should get very near zero audio level.
diff --git a/content/test/data/web_ui_mojo.js b/content/test/data/web_ui_mojo.js
index 4c80623..3dc3229 100644
--- a/content/test/data/web_ui_mojo.js
+++ b/content/test/data/web_ui_mojo.js
@@ -5,8 +5,8 @@
 define('main', [
     'mojo/public/js/bindings/connection',
     'content/test/data/web_ui_test_mojo_bindings.mojom',
-], function(connection, bindings) {
-  var retainedConnection, iterations = 1000;
+], function (connection, bindings) {
+  var retainedConnection, kIterations = 100, kBadValue = 13;
 
   function RendererTargetTest(bindings) {
     this.bindings_ = bindings;
@@ -19,16 +19,32 @@
   RendererTargetTest.prototype =
       Object.create(bindings.RendererTargetStub.prototype);
 
-  RendererTargetTest.prototype.ping = function() {
+  RendererTargetTest.prototype.ping = function () {
     this.bindings_.pingResponse();
   };
 
-  RendererTargetTest.prototype.echo = function(arg) {
+  RendererTargetTest.prototype.echo = function (arg) {
     var i;
-    for (i = 0; i < iterations; ++i) {
+
+    // Ensure negative values are negative.
+    if (arg.si64 > 0)
+      arg.si64 = kBadValue;
+
+    if (arg.si32 > 0)
+      arg.si32 = kBadValue;
+
+    if (arg.si16 > 0)
+      arg.si16 = kBadValue;
+
+    if (arg.si8 > 0)
+      arg.si8 = kBadValue;
+
+    for (i = 0; i < kIterations; ++i) {
       arg2 = new bindings.EchoArgs();
-      arg2.x = -1;
-      arg2.y = -1;
+      arg2.si64 = -1;
+      arg2.si32 = -1;
+      arg2.si16 = -1;
+      arg2.si8 = -1;
       arg2.name = "going";
       this.bindings_.echoResponse(arg, arg2);
     }
diff --git a/content/test/data/web_ui_test_mojo_bindings.mojom b/content/test/data/web_ui_test_mojo_bindings.mojom
index 5f799c8..08dbc02 100644
--- a/content/test/data/web_ui_test_mojo_bindings.mojom
+++ b/content/test/data/web_ui_test_mojo_bindings.mojom
@@ -1,8 +1,14 @@
 module mojo {
 
 struct EchoArgs {
-  int32 x;
-  int16 y;
+  int64 si64;
+  int32 si32;
+  int16 si16;
+  int8  si8;
+  uint64 ui64;
+  uint32 ui32;
+  uint16 ui16;
+  uint8  ui8;
   string name;
 };
 
diff --git a/content/test/gpu/gpu_tests/gpu_process.py b/content/test/gpu/gpu_tests/gpu_process.py
index 9c465c21..9b3c12d 100644
--- a/content/test/gpu/gpu_tests/gpu_process.py
+++ b/content/test/gpu/gpu_tests/gpu_process.py
@@ -35,7 +35,7 @@
 class GpuProcess(test.Test):
   """Tests that accelerated content triggers the creation of a GPU process"""
   test = _GpuProcessValidator
-  page_set = 'page_sets/gpu_process_tests.json'
+  page_set = 'page_sets/gpu_process_tests.py'
 
   def CreateExpectations(self, page_set):
     return expectations.GpuProcessExpectations()
diff --git a/content/test/gpu/gpu_tests/gpu_rasterization.py b/content/test/gpu/gpu_tests/gpu_rasterization.py
index 502f0bf..700261d 100644
--- a/content/test/gpu/gpu_tests/gpu_rasterization.py
+++ b/content/test/gpu/gpu_tests/gpu_rasterization.py
@@ -67,7 +67,7 @@
 class GpuRasterization(cloud_storage_test_base.TestBase):
   """Tests that GPU rasterization produces valid content"""
   test = _GpuRasterizationValidator
-  page_set = 'page_sets/gpu_rasterization_tests.json'
+  page_set = 'page_sets/gpu_rasterization_tests.py'
 
   def CreatePageSet(self, options):
     page_set = super(GpuRasterization, self).CreatePageSet(options)
diff --git a/content/test/gpu/gpu_tests/memory.py b/content/test/gpu/gpu_tests/memory.py
index 2b6d9c6..cba46fa 100644
--- a/content/test/gpu/gpu_tests/memory.py
+++ b/content/test/gpu/gpu_tests/memory.py
@@ -81,7 +81,7 @@
 class Memory(test.Test):
   """Tests GPU memory limits"""
   test = _MemoryValidator
-  page_set = 'page_sets/memory_tests.json'
+  page_set = 'page_sets/memory_tests.py'
 
   def CreatePageSet(self, options):
     page_set = super(Memory, self).CreatePageSet(options)
diff --git a/content/test/gpu/gpu_tests/pixel.py b/content/test/gpu/gpu_tests/pixel.py
index fbbb063..7b0e85f 100644
--- a/content/test/gpu/gpu_tests/pixel.py
+++ b/content/test/gpu/gpu_tests/pixel.py
@@ -135,7 +135,7 @@
 
 class Pixel(cloud_storage_test_base.TestBase):
   test = _PixelValidator
-  page_set = 'page_sets/pixel_tests.json'
+  page_set = 'page_sets/pixel_tests.py'
 
   @classmethod
   def AddTestCommandLineArgs(cls, group):
diff --git a/content/test/gpu/gpu_tests/webgl_conformance_expectations.py b/content/test/gpu/gpu_tests/webgl_conformance_expectations.py
index 112174d..653a455 100644
--- a/content/test/gpu/gpu_tests/webgl_conformance_expectations.py
+++ b/content/test/gpu/gpu_tests/webgl_conformance_expectations.py
@@ -28,6 +28,12 @@
     self.Fail('conformance/glsl/misc/shaders-with-mis-matching-uniforms.html',
         bug=351396)
 
+    # Temporary suppressions of failures until bugs are fixed.
+    self.Fail('conformance/context/constants-and-properties.html',
+        bug=363842)
+    self.Fail('conformance/rendering/draw-elements-out-of-bounds.html',
+        bug=363869)
+
     # Win7 / Intel failures
     self.Fail('conformance/rendering/gl-scissor-test.html',
         ['win7', 'intel'], bug=314997)
diff --git a/content/test/gpu/page_sets/gpu_process_tests.json b/content/test/gpu/page_sets/gpu_process_tests.json
deleted file mode 100644
index 67bac7e..0000000
--- a/content/test/gpu/page_sets/gpu_process_tests.json
+++ /dev/null
@@ -1,40 +0,0 @@
-{
-  "description": "Tests that accelerated content triggers the creation of a GPU process",
-  "user_agent_type": "desktop",
-  "serving_dirs": [ "../../data" ],
-  "pages": [
-    {
-      "name": "GpuProcess.canvas2d",
-      "url": "file://../../data/gpu/functional_canvas_demo.html",
-      "navigate_steps": [
-        { "action": "navigate"}
-      ]
-    },
-    {
-      "name": "GpuProcess.css3d",
-      "url": "file://../../data/gpu/functional_3d_css.html",
-      "navigate_steps": [
-        { "action": "navigate"}
-      ]
-    },
-    {
-      "name": "GpuProcess.webgl",
-      "url": "file://../../data/gpu/functional_webgl.html",
-      "navigate_steps": [
-        { "action": "navigate"}
-      ]
-    },
-    {
-      "name": "GpuProcess.video",
-      "url": "file://../../data/gpu/functional_video.html",
-      "navigate_steps": [
-        { "action": "navigate"},
-        {
-          "action": "wait",
-          "javascript": "domAutomationController._finished",
-          "timeout": 30
-        }
-      ]
-    }
-  ]
-}
diff --git a/content/test/gpu/page_sets/gpu_process_tests.py b/content/test/gpu/page_sets/gpu_process_tests.py
new file mode 100644
index 0000000..61ef42c
--- /dev/null
+++ b/content/test/gpu/page_sets/gpu_process_tests.py
@@ -0,0 +1,58 @@
+# 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.
+# pylint: disable=W0401,W0614
+from telemetry.page.actions.all_page_actions import *
+from telemetry.page import page as page_module
+from telemetry.page import page_set as page_set_module
+
+
+class GpuProcessTestsPage(page_module.PageWithDefaultRunNavigate):
+
+  def __init__(self, url, name, page_set):
+    super(GpuProcessTestsPage, self).__init__(url=url, page_set=page_set)
+    self.user_agent_type = 'desktop'
+    self.name = name
+
+  def RunNavigateSteps(self, action_runner):
+    action_runner.RunAction(NavigateAction())
+
+class FunctionalVideoPage(GpuProcessTestsPage):
+
+  def __init__(self, page_set):
+    super(FunctionalVideoPage, self).__init__(
+      url='file://../../data/gpu/functional_video.html',
+      name='GpuProcess.video',
+      page_set=page_set)
+
+  def RunNavigateSteps(self, action_runner):
+    action_runner.RunAction(NavigateAction())
+    action_runner.RunAction(WaitAction(
+      {
+        'javascript': 'domAutomationController._finished',
+        'timeout': 30
+      }))
+
+
+class GpuProcessTestsPageSet(page_set_module.PageSet):
+
+  """ Tests that accelerated content triggers the creation of a GPU process """
+
+  def __init__(self):
+    super(GpuProcessTestsPageSet, self).__init__(
+      serving_dirs=set(['../../../../content/test/data']),
+      user_agent_type='desktop')
+
+    urls_and_names_list = [
+      ('file://../../data/gpu/functional_canvas_demo.html',
+       'GpuProcess.canvas2d'),
+      ('file://../../data/gpu/functional_3d_css.html',
+       'GpuProcess.css3d'),
+      ('file://../../data/gpu/functional_webgl.html',
+       'GpuProcess.webgl')
+    ]
+
+    for url, name in urls_and_names_list:
+      self.AddPage(GpuProcessTestsPage(url, name, self))
+
+    self.AddPage(FunctionalVideoPage(self))
diff --git a/content/test/gpu/page_sets/gpu_rasterization_tests.json b/content/test/gpu/page_sets/gpu_rasterization_tests.json
deleted file mode 100644
index 5823416..0000000
--- a/content/test/gpu/page_sets/gpu_rasterization_tests.json
+++ /dev/null
@@ -1,93 +0,0 @@
-{
-  "description": "Basic test cases for GPU rasterization.",
-  "user_agent_type": "desktop",
-  "pages": [
-    {
-      "name": "GpuRasterization.CSS3DBlueBox",
-      "url": "file://../../data/gpu/pixel_css3d.html",
-      "navigate_steps": [
-        { "action": "navigate"},
-        {
-            "action": "wait",
-            "javascript": "domAutomationController._finished",
-            "timeout": 30
-        }
-      ],
-      "test_rect": [0, 0, 250, 250],
-      "expectations": [
-        {
-          "comment": "body-t",
-          "location": [5, 5],
-          "color": [255, 255, 255],
-          "tolerance": 0
-        },
-        {
-          "comment": "body-r",
-          "location": [245, 5],
-          "color": [255, 255, 255],
-          "tolerance": 0
-        },
-        {
-          "comment": "body-b",
-          "location": [245, 245],
-          "color": [255, 255, 255],
-          "tolerance": 0
-        },
-        {
-          "comment": "body-l",
-          "location": [5, 245],
-          "color": [255, 255, 255],
-          "tolerance": 0
-        },
-        {
-          "comment": "background-t",
-          "location": [30, 30],
-          "color": [0, 0, 0],
-          "tolerance": 0
-        },
-        {
-          "comment": "background-r",
-          "location": [170, 30],
-          "color": [0, 0, 0],
-          "tolerance": 0
-        },
-        {
-          "comment": "background-b",
-          "location": [170, 170],
-          "color": [0, 0, 0],
-          "tolerance": 0
-        },
-        {
-          "comment": "background-l",
-          "location": [30, 170],
-          "color": [0, 0, 0],
-          "tolerance": 0
-        },
-        {
-          "comment": "box-t",
-          "location": [70, 70],
-          "color": [0, 0, 255],
-          "tolerance": 0
-        },
-        {
-          "comment": "box-r",
-          "location": [140, 70],
-          "color": [0, 0, 255],
-          "tolerance": 0
-        },
-        {
-          "comment": "box-b",
-          "location": [140, 120],
-          "color": [0, 0, 255],
-          "tolerance": 0
-        },
-        {
-          "comment": "box-l",
-          "location": [70, 120],
-          "color": [0, 0, 255],
-          "tolerance": 0
-        }
-      ]
-    }
-  ]
-}
diff --git a/content/test/gpu/page_sets/gpu_rasterization_tests.py b/content/test/gpu/page_sets/gpu_rasterization_tests.py
new file mode 100644
index 0000000..886e1a4
--- /dev/null
+++ b/content/test/gpu/page_sets/gpu_rasterization_tests.py
@@ -0,0 +1,88 @@
+# 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.
+# pylint: disable=W0401,W0614
+from telemetry.page.actions.all_page_actions import *
+from telemetry.page import page as page_module
+from telemetry.page import page_set as page_set_module
+
+
+class GpuRasterizationTestsPage(page_module.PageWithDefaultRunNavigate):
+
+  def __init__(self, page_set):
+    super(GpuRasterizationTestsPage, self).__init__(
+      url='file://../../data/gpu/pixel_css3d.html',
+      page_set=page_set)
+
+    self.user_agent_type = 'desktop'
+    self.name = 'GpuRasterization.CSS3DBlueBox'
+    self.expectations = [
+      {'comment': 'body-t',
+       'color': [255, 255, 255],
+       'tolerance': 0,
+       'location': [5, 5]},
+      {'comment': 'body-r',
+       'color': [255, 255, 255],
+       'tolerance': 0,
+       'location': [245, 5]},
+      {'comment': 'body-b',
+       'color': [255, 255, 255],
+       'tolerance': 0,
+       'location': [245, 245]},
+      {'comment': 'body-l',
+       'color': [255, 255, 255],
+       'tolerance': 0,
+       'location': [5, 245]},
+      {'comment': 'background-t',
+       'color': [0, 0, 0],
+       'tolerance': 0,
+       'location': [30, 30]},
+      {'comment': 'background-r',
+       'color': [0, 0, 0],
+       'tolerance': 0,
+       'location': [170, 30]},
+      {'comment': 'background-b',
+       'color': [0, 0, 0],
+       'tolerance': 0,
+       'location': [170, 170]},
+      {'comment': 'background-l',
+       'color': [0, 0, 0],
+       'tolerance': 0,
+       'location': [30, 170]},
+      {'comment': 'box-t',
+       'color': [0, 0, 255],
+       'tolerance': 0,
+       'location': [70, 70]},
+      {'comment': 'box-r',
+       'color': [0, 0, 255],
+       'tolerance': 0,
+       'location': [140, 70]},
+      {'comment': 'box-b',
+       'color': [0, 0, 255],
+       'tolerance': 0,
+       'location': [140, 120]},
+      {'comment': 'box-l',
+       'color': [0, 0, 255],
+       'tolerance': 0,
+       'location': [70, 120]}
+    ]
+    self.test_rect = [0, 0, 250, 250]
+
+  def RunNavigateSteps(self, action_runner):
+    action_runner.RunAction(NavigateAction())
+    action_runner.RunAction(WaitAction(
+      {
+        'javascript': 'domAutomationController._finished',
+        'timeout': 30
+      }))
+
+
+class GpuRasterizationTestsPageSet(page_set_module.PageSet):
+
+  """ Basic test cases for GPU rasterization. """
+
+  def __init__(self):
+    super(GpuRasterizationTestsPageSet, self).__init__(
+      user_agent_type='desktop')
+
+    self.AddPage(GpuRasterizationTestsPage(self))
diff --git a/content/test/gpu/page_sets/memory_tests.json b/content/test/gpu/page_sets/memory_tests.json
deleted file mode 100644
index 9a29aab..0000000
--- a/content/test/gpu/page_sets/memory_tests.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
-  "description": "Tests that validate GPU memory management",
-  "user_agent_type": "desktop",
-  "pages": [
-    {
-      "name": "Memory.CSS3D",
-      "url": "file://../../data/gpu/mem_css3d.html",
-      "navigate_steps": [
-        { "action": "navigate" },
-        {
-          "action": "wait",
-          "javascript": "domAutomationController._finished",
-          "timeout": 60
-        }
-      ]
-    }
-  ]
-}
diff --git a/content/test/gpu/page_sets/memory_tests.py b/content/test/gpu/page_sets/memory_tests.py
new file mode 100644
index 0000000..6ecf722
--- /dev/null
+++ b/content/test/gpu/page_sets/memory_tests.py
@@ -0,0 +1,35 @@
+# 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.
+# pylint: disable=W0401,W0614
+from telemetry.page.actions.all_page_actions import *
+from telemetry.page import page as page_module
+from telemetry.page import page_set as page_set_module
+
+
+class MemoryTestsPage(page_module.PageWithDefaultRunNavigate):
+
+  def __init__(self, page_set):
+    super(MemoryTestsPage, self).__init__(
+      url='file://../../data/gpu/mem_css3d.html', page_set=page_set)
+    self.user_agent_type = 'desktop'
+    self.name = 'Memory.CSS3D'
+
+  def RunNavigateSteps(self, action_runner):
+    action_runner.RunAction(NavigateAction())
+    action_runner.RunAction(WaitAction(
+      {
+        'javascript': 'domAutomationController._finished',
+        'timeout': 60
+      }))
+
+
+class MemoryTestsPageSet(page_set_module.PageSet):
+
+  """ Tests that validate GPU memory management """
+
+  def __init__(self):
+    super(MemoryTestsPageSet, self).__init__(
+      user_agent_type='desktop')
+
+    self.AddPage(MemoryTestsPage(self))
diff --git a/content/test/gpu/page_sets/pixel_tests.json b/content/test/gpu/page_sets/pixel_tests.json
deleted file mode 100644
index 649241c..0000000
--- a/content/test/gpu/page_sets/pixel_tests.json
+++ /dev/null
@@ -1,48 +0,0 @@
-{
-  "description": "Some basic test cases for GPU.",
-  "user_agent_type": "desktop",
-  "pages": [
-    {
-      "name": "Pixel.Canvas2DRedBox",
-      "url": "file://../../data/gpu/pixel_canvas2d.html",
-      "navigate_steps": [
-        { "action": "navigate"},
-        {
-            "action": "wait",
-            "javascript": "domAutomationController._finished",
-            "timeout": 30
-        }
-      ],
-      "revision": 2,
-      "test_rect": [0, 0, 400, 300]
-    },
-    {
-      "name": "Pixel.CSS3DBlueBox",
-      "url": "file://../../data/gpu/pixel_css3d.html",
-      "navigate_steps": [
-        { "action": "navigate"},
-        {
-            "action": "wait",
-            "javascript": "domAutomationController._finished",
-            "timeout": 30
-        }
-      ],
-      "revision": 3,
-      "test_rect": [0, 0, 400, 300]
-    },
-    {
-      "name": "Pixel.WebGLGreenTriangle",
-      "url": "file://../../data/gpu/pixel_webgl.html",
-      "navigate_steps": [
-        { "action": "navigate"},
-        {
-            "action": "wait",
-            "javascript": "domAutomationController._finished",
-            "timeout": 30
-        }
-      ],
-      "revision": 3,
-      "test_rect": [0, 0, 400, 300]
-    }
-  ]
-}
diff --git a/content/test/gpu/page_sets/pixel_tests.py b/content/test/gpu/page_sets/pixel_tests.py
new file mode 100644
index 0000000..e2fa794
--- /dev/null
+++ b/content/test/gpu/page_sets/pixel_tests.py
@@ -0,0 +1,54 @@
+# 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.
+# pylint: disable=W0401,W0614
+from telemetry.page.actions.all_page_actions import *
+from telemetry.page import page as page_module
+from telemetry.page import page_set as page_set_module
+
+
+class PixelTestsPage(page_module.PageWithDefaultRunNavigate):
+
+  def __init__(self, url, name, test_rect, revision, page_set):
+    super(PixelTestsPage, self).__init__(url=url, page_set=page_set)
+    self.user_agent_type = 'desktop'
+    self.name = name
+    self.test_rect = test_rect
+    self.revision = revision
+
+  def RunNavigateSteps(self, action_runner):
+    action_runner.RunAction(NavigateAction())
+    action_runner.RunAction(WaitAction(
+      {
+        'javascript': 'domAutomationController._finished',
+        'timeout': 30
+      }))
+
+
+class PixelTestsPageSet(page_set_module.PageSet):
+
+  """ Some basic test cases for GPU. """
+
+  def __init__(self):
+    super(PixelTestsPageSet, self).__init__(
+      user_agent_type='desktop')
+    self.AddPage(PixelTestsPage(
+      url='file://../../data/gpu/pixel_canvas2d.html',
+      name='Pixel.Canvas2DRedBox',
+      test_rect=[0, 0, 400, 300],
+      revision=2,
+      page_set=self))
+
+    self.AddPage(PixelTestsPage(
+      url='file://../../data/gpu/pixel_css3d.html',
+      name='Pixel.CSS3DBlueBox',
+      test_rect=[0, 0, 400, 300],
+      revision=3,
+      page_set=self))
+
+    self.AddPage(PixelTestsPage(
+      url='file://../../data/gpu/pixel_webgl.html',
+      name='Pixel.WebGLGreenTriangle',
+      test_rect=[0, 0, 400, 300],
+      revision=3,
+      page_set=self))
diff --git a/content/test/layouttest_support.cc b/content/test/layouttest_support.cc
index 4266895..64832d7 100644
--- a/content/test/layouttest_support.cc
+++ b/content/test/layouttest_support.cc
@@ -28,9 +28,6 @@
 using blink::WebGamepads;
 using blink::WebRect;
 using blink::WebSize;
-using WebTestRunner::WebFrameTestProxy;
-using WebTestRunner::WebTestProxy;
-using WebTestRunner::WebTestProxyBase;
 
 namespace content {
 
@@ -41,12 +38,10 @@
 
 RenderViewImpl* CreateWebTestProxy(RenderViewImplParams* params) {
   typedef WebTestProxy<RenderViewImpl, RenderViewImplParams*> ProxyType;
-  ProxyType* render_view_proxy = new ProxyType(
-      reinterpret_cast<RenderViewImplParams*>(params));
+  ProxyType* render_view_proxy = new ProxyType(params);
   if (g_callback == 0)
     return render_view_proxy;
-  g_callback.Get().Run(
-      static_cast<RenderView*>(render_view_proxy), render_view_proxy);
+  g_callback.Get().Run(render_view_proxy, render_view_proxy);
   return render_view_proxy;
 }
 
@@ -99,7 +94,8 @@
       SetMockDeviceOrientationDataForTesting(data);
 }
 
-void SetMockScreenOrientation(const blink::WebScreenOrientation& orientation) {
+void SetMockScreenOrientation(
+    const blink::WebScreenOrientationType& orientation) {
   RendererWebKitPlatformSupportImpl::
       SetMockScreenOrientationForTesting(orientation);
 }
diff --git a/content/test/test_backing_store.cc b/content/test/test_backing_store.cc
deleted file mode 100644
index e9415d2..0000000
--- a/content/test/test_backing_store.cc
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright (c) 2012 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 "content/test/test_backing_store.h"
-
-namespace content {
-
-TestBackingStore::TestBackingStore(RenderWidgetHost* widget,
-                                   const gfx::Size& size)
-    : BackingStore(widget, size) {
-}
-
-TestBackingStore::~TestBackingStore() {
-}
-
-void TestBackingStore::PaintToBackingStore(
-    RenderProcessHost* process,
-    TransportDIB::Id bitmap,
-    const gfx::Rect& bitmap_rect,
-    const std::vector<gfx::Rect>& copy_rects,
-    float scale_factor,
-    const base::Closure& completion_callback,
-    bool* scheduled_completion_callback) {
-  *scheduled_completion_callback = false;
-}
-
-bool TestBackingStore::CopyFromBackingStore(const gfx::Rect& rect,
-                                            skia::PlatformBitmap* output) {
-  return false;
-}
-
-void TestBackingStore::ScrollBackingStore(const gfx::Vector2d& delta,
-                                          const gfx::Rect& clip_rect,
-                                          const gfx::Size& view_size) {
-}
-
-}  // namespace content
diff --git a/content/test/test_backing_store.h b/content/test/test_backing_store.h
deleted file mode 100644
index 0ee09f5..0000000
--- a/content/test/test_backing_store.h
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright (c) 2012 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 CONTENT_TEST_TEST_BACKING_STORE_H_
-#define CONTENT_TEST_TEST_BACKING_STORE_H_
-
-#include "base/basictypes.h"
-#include "base/compiler_specific.h"
-#include "content/browser/renderer_host/backing_store.h"
-
-namespace content {
-
-class TestBackingStore : public BackingStore {
- public:
-  TestBackingStore(RenderWidgetHost* widget, const gfx::Size& size);
-  virtual ~TestBackingStore();
-
-  // BackingStore implementation.
-  virtual void PaintToBackingStore(
-      RenderProcessHost* process,
-      TransportDIB::Id bitmap,
-      const gfx::Rect& bitmap_rect,
-      const std::vector<gfx::Rect>& copy_rects,
-      float scale_factor,
-      const base::Closure& completion_callback,
-      bool* scheduled_completion_callback) OVERRIDE;
-  virtual bool CopyFromBackingStore(const gfx::Rect& rect,
-                                    skia::PlatformBitmap* output) OVERRIDE;
-  virtual void ScrollBackingStore(const gfx::Vector2d& delta,
-                                  const gfx::Rect& clip_rect,
-                                  const gfx::Size& view_size) OVERRIDE;
- private:
-  DISALLOW_COPY_AND_ASSIGN(TestBackingStore);
-};
-
-}  // namespace content
-
-#endif  // CONTENT_TEST_TEST_BACKING_STORE_H_
diff --git a/content/test/test_render_frame_host.cc b/content/test/test_render_frame_host.cc
index 305fc73..9eb1eaa 100644
--- a/content/test/test_render_frame_host.cc
+++ b/content/test/test_render_frame_host.cc
@@ -57,8 +57,8 @@
   // so we keep a copy of it to use in SendNavigateWithParameters.
   GURL url_copy(url);
   OnDidStartProvisionalLoadForFrame(-1, url_copy);
-  SendNavigateWithParameters(
-      page_id, url_copy, transition, url_copy, response_code, 0);
+  SendNavigateWithParameters(page_id, url_copy, transition, url_copy,
+      response_code, 0, std::vector<GURL>());
 }
 
 void TestRenderFrameHost::SendNavigateWithOriginalRequestURL(
@@ -66,16 +66,16 @@
     const GURL& url,
     const GURL& original_request_url) {
   OnDidStartProvisionalLoadForFrame(-1, url);
-  SendNavigateWithParameters(
-      page_id, url, PAGE_TRANSITION_LINK, original_request_url, 200, 0);
+  SendNavigateWithParameters(page_id, url, PAGE_TRANSITION_LINK,
+      original_request_url, 200, 0, std::vector<GURL>());
 }
 
 void TestRenderFrameHost::SendNavigateWithFile(
     int page_id,
     const GURL& url,
     const base::FilePath& file_path) {
-  SendNavigateWithParameters(
-      page_id, url, PAGE_TRANSITION_LINK, url, 200, &file_path);
+  SendNavigateWithParameters(page_id, url, PAGE_TRANSITION_LINK, url, 200,
+      &file_path, std::vector<GURL>());
 }
 
 void TestRenderFrameHost::SendNavigateWithParams(
@@ -84,19 +84,28 @@
   OnNavigate(msg);
 }
 
+void TestRenderFrameHost::SendNavigateWithRedirects(
+    int page_id,
+    const GURL& url,
+    const std::vector<GURL>& redirects) {
+  SendNavigateWithParameters(
+      page_id, url, PAGE_TRANSITION_LINK, url, 200, 0, redirects);
+}
+
 void TestRenderFrameHost::SendNavigateWithParameters(
     int page_id,
     const GURL& url,
     PageTransition transition,
     const GURL& original_request_url,
     int response_code,
-    const base::FilePath* file_path_for_history_item) {
+    const base::FilePath* file_path_for_history_item,
+    const std::vector<GURL>& redirects) {
   FrameHostMsg_DidCommitProvisionalLoad_Params params;
   params.page_id = page_id;
   params.url = url;
   params.referrer = Referrer();
   params.transition = transition;
-  params.redirects = std::vector<GURL>();
+  params.redirects = redirects;
   params.should_update_history = true;
   params.searchable_form_url = GURL();
   params.searchable_form_encoding = std::string();
diff --git a/content/test/test_render_frame_host.h b/content/test/test_render_frame_host.h
index 25caa87..318c78f 100644
--- a/content/test/test_render_frame_host.h
+++ b/content/test/test_render_frame_host.h
@@ -5,6 +5,8 @@
 #ifndef CONTENT_TEST_TEST_RENDER_FRAME_HOST_H_
 #define CONTENT_TEST_TEST_RENDER_FRAME_HOST_H_
 
+#include <vector>
+
 #include "base/basictypes.h"
 #include "content/browser/frame_host/render_frame_host_impl.h"
 #include "content/public/common/page_transition_types.h"
@@ -43,13 +45,18 @@
       const base::FilePath& file_path);
   void SendNavigateWithParams(
       FrameHostMsg_DidCommitProvisionalLoad_Params* params);
+  void SendNavigateWithRedirects(
+      int page_id,
+      const GURL& url,
+      const std::vector<GURL>& redirects);
   void SendNavigateWithParameters(
       int page_id,
       const GURL& url,
       PageTransition transition,
       const GURL& original_request_url,
       int response_code,
-      const base::FilePath* file_path_for_history_item);
+      const base::FilePath* file_path_for_history_item,
+      const std::vector<GURL>& redirects);
 
   void set_contents_mime_type(const std::string& mime_type) {
     contents_mime_type_ = mime_type;
diff --git a/content/test/test_render_view_host.cc b/content/test/test_render_view_host.cc
index 54acf9d..2c8fad9 100644
--- a/content/test/test_render_view_host.cc
+++ b/content/test/test_render_view_host.cc
@@ -16,7 +16,6 @@
 #include "content/public/browser/storage_partition.h"
 #include "content/public/common/content_client.h"
 #include "content/public/common/page_state.h"
-#include "content/test/test_backing_store.h"
 #include "content/test/test_web_contents.h"
 #include "media/base/video_frame.h"
 #include "ui/gfx/rect.h"
@@ -100,11 +99,6 @@
   return gfx::Rect();
 }
 
-BackingStore* TestRenderWidgetHostView::AllocBackingStore(
-    const gfx::Size& size) {
-  return new TestBackingStore(rwh_, size);
-}
-
 void TestRenderWidgetHostView::CopyFromCompositingSurface(
     const gfx::Rect& src_subrect,
     const gfx::Size& dst_size,
@@ -244,7 +238,8 @@
 bool TestRenderViewHost::CreateRenderView(
     const base::string16& frame_name,
     int opener_route_id,
-    int32 max_page_id) {
+    int32 max_page_id,
+    bool window_was_created_with_opener) {
   DCHECK(!render_view_created_);
   render_view_created_ = true;
   opener_route_id_ = opener_route_id;
@@ -313,7 +308,7 @@
 
   main_render_frame_host_->SendNavigateWithParameters(
       page_id, url, transition, original_request_url, response_code,
-      file_path_for_history_item);
+      file_path_for_history_item, std::vector<GURL>());
 }
 
 void TestRenderViewHost::SendBeforeUnloadACK(bool proceed) {
diff --git a/content/test/test_render_view_host.h b/content/test/test_render_view_host.h
index 2bf2e4f..6a40983 100644
--- a/content/test/test_render_view_host.h
+++ b/content/test/test_render_view_host.h
@@ -122,7 +122,6 @@
   virtual void SelectionRootBoundsChanged(const gfx::Rect&) OVERRIDE {}
 #endif
   virtual void ScrollOffsetChanged() OVERRIDE {}
-  virtual BackingStore* AllocBackingStore(const gfx::Size& size) OVERRIDE;
   virtual void CopyFromCompositingSurface(
       const gfx::Rect& src_subrect,
       const gfx::Size& dst_size,
@@ -316,7 +315,8 @@
 
   virtual bool CreateRenderView(const base::string16& frame_name,
                                 int opener_route_id,
-                                int32 max_page_id) OVERRIDE;
+                                int32 max_page_id,
+                                bool window_was_created_with_opener) OVERRIDE;
   virtual bool IsRenderViewLive() const OVERRIDE;
   virtual bool IsFullscreen() const OVERRIDE;
 
diff --git a/content/test/test_web_contents.cc b/content/test/test_web_contents.cc
index 55cab77..d023bd4 100644
--- a/content/test/test_web_contents.cc
+++ b/content/test/test_web_contents.cc
@@ -104,7 +104,7 @@
   static_cast<RenderViewHostImpl*>(
       render_view_host)->CreateRenderView(base::string16(),
                                           opener_route_id,
-                                          -1);
+                                          -1, false);
   return true;
 }
 
diff --git a/content/zygote/zygote_linux.cc b/content/zygote/zygote_linux.cc
index 8ea9714..63c472f 100644
--- a/content/zygote/zygote_linux.cc
+++ b/content/zygote/zygote_linux.cc
@@ -296,7 +296,7 @@
 
 int Zygote::ForkWithRealPid(const std::string& process_type,
                             const base::GlobalDescriptors::Mapping& fd_mapping,
-                            const std::string& channel_switch,
+                            const std::string& channel_id,
                             std::string* uma_name,
                             int* uma_sample,
                             int* uma_boundary_value) {
@@ -333,7 +333,7 @@
     fds.push_back(ipc_channel_fd);  // kBrowserFDIndex
     fds.push_back(dummy_fd);  // kDummyFDIndex
     fds.push_back(pipe_fds[0]);  // kParentFDIndex
-    pid = helper_->Fork(process_type, fds);
+    pid = helper_->Fork(process_type, fds, channel_id);
   } else {
     pid = fork();
   }
@@ -410,18 +410,14 @@
     process_info_map_[real_pid].internal_pid = pid;
     process_info_map_[real_pid].started_from_helper = use_helper;
 
-    if (use_helper) {
-      if (!helper_->AckChild(pipe_fds[1], channel_switch)) {
-        LOG(ERROR) << "Failed to synchronise with zygote fork helper";
-        goto error;
-      }
-    } else {
-      int written =
-          HANDLE_EINTR(write(pipe_fds[1], &real_pid, sizeof(real_pid)));
-      if (written != sizeof(real_pid)) {
-        LOG(ERROR) << "Failed to synchronise with child process";
-        goto error;
-      }
+    // If we're using a helper, we still need to let the child process know
+    // we've discovered its real PID, but we don't actually reveal the PID.
+    const base::ProcessId pid_for_child = use_helper ? 0 : real_pid;
+    ssize_t written =
+        HANDLE_EINTR(write(pipe_fds[1], &pid_for_child, sizeof(pid_for_child)));
+    if (written != sizeof(pid_for_child)) {
+      LOG(ERROR) << "Failed to synchronise with child process";
+      goto error;
     }
     close(pipe_fds[1]);
     return real_pid;
@@ -467,7 +463,7 @@
       return -1;
     args.push_back(arg);
     if (arg.compare(0, channel_id_prefix.length(), channel_id_prefix) == 0)
-      channel_id = arg;
+      channel_id = arg.substr(channel_id_prefix.length());
   }
 
   if (!pickle.ReadInt(&iter, &numfds))
diff --git a/content/zygote/zygote_linux.h b/content/zygote/zygote_linux.h
index 37e89b5..140dfa6 100644
--- a/content/zygote/zygote_linux.h
+++ b/content/zygote/zygote_linux.h
@@ -79,7 +79,7 @@
   // UMA_HISTOGRAM_ENUMERATION.
   int ForkWithRealPid(const std::string& process_type,
                       const base::GlobalDescriptors::Mapping& fd_mapping,
-                      const std::string& channel_switch,
+                      const std::string& channel_id,
                       std::string* uma_name,
                       int* uma_sample,
                       int* uma_boundary_value);
diff --git a/content/zygote/zygote_main_linux.cc b/content/zygote/zygote_main_linux.cc
index bb43b05..0ec9b43 100644
--- a/content/zygote/zygote_main_linux.cc
+++ b/content/zygote/zygote_main_linux.cc
@@ -59,15 +59,6 @@
 
 namespace content {
 
-namespace {
-
-void InitializeForkDelegate(ZygoteForkDelegate* forkdelegate) {
-  DCHECK(forkdelegate);
-  forkdelegate->Init(GetSandboxFD());
-}
-
-}  // namespace
-
 // See http://code.google.com/p/chromium/wiki/LinuxZygote
 
 static void ProxyLocaltimeCallToBrowser(time_t input, struct tm* output,
@@ -437,7 +428,10 @@
   return true;
 }
 
-static void EnterLayerOneSandbox(LinuxSandbox* linux_sandbox) {
+// If |is_suid_sandbox_child|, then make sure that the setuid sandbox is
+// engaged.
+static void EnterLayerOneSandbox(LinuxSandbox* linux_sandbox,
+                                 bool is_suid_sandbox_child) {
   DCHECK(linux_sandbox);
 
   ZygotePreSandboxInit();
@@ -450,7 +444,7 @@
   sandbox::SetuidSandboxClient* setuid_sandbox =
       linux_sandbox->setuid_sandbox_client();
 
-  if (setuid_sandbox->IsSuidSandboxChild()) {
+  if (is_suid_sandbox_child) {
     CHECK(EnterSuidSandbox(setuid_sandbox)) << "Failed to enter setuid sandbox";
   }
 }
@@ -464,17 +458,22 @@
   // This will pre-initialize the various sandboxes that need it.
   linux_sandbox->PreinitializeSandbox();
 
+  const bool must_enable_setuid_sandbox =
+      linux_sandbox->setuid_sandbox_client()->IsSuidSandboxChild();
+
   if (forkdelegate != NULL) {
     VLOG(1) << "ZygoteMain: initializing fork delegate";
-    InitializeForkDelegate(forkdelegate);
+    forkdelegate->Init(GetSandboxFD(), must_enable_setuid_sandbox);
   } else {
     VLOG(1) << "ZygoteMain: fork delegate is NULL";
   }
 
   // Turn on the first layer of the sandbox if the configuration warrants it.
-  EnterLayerOneSandbox(linux_sandbox);
+  EnterLayerOneSandbox(linux_sandbox, must_enable_setuid_sandbox);
 
   int sandbox_flags = linux_sandbox->GetStatus();
+  bool setuid_sandbox_engaged = sandbox_flags & kSandboxLinuxSUID;
+  CHECK_EQ(must_enable_setuid_sandbox, setuid_sandbox_engaged);
 
   Zygote zygote(sandbox_flags, forkdelegate);
   // This function call can return multiple times, once per fork().
diff --git a/courgette/courgette.gyp b/courgette/courgette.gyp
index 591e4e2..00c2088 100644
--- a/courgette/courgette.gyp
+++ b/courgette/courgette.gyp
@@ -129,15 +129,6 @@
             }],
           ],
         }],
-        [ 'toolkit_uses_gtk == 1', {
-          'dependencies': [
-            # Workaround for gyp bug 69.
-            # Needed to handle the #include chain:
-            #   base/test_suite.h
-            #   gtk/gtk.h
-            '../build/linux/system.gyp:gtk',
-          ],
-        }],
       ],
       # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
       'msvs_disabled_warnings': [4267, ],
@@ -157,17 +148,6 @@
         '../base/base.gyp:test_support_base',
         '../testing/gtest.gyp:gtest',
       ],
-      'conditions': [
-        [ 'toolkit_uses_gtk == 1', {
-          'dependencies': [
-            # Workaround for gyp bug 69.
-            # Needed to handle the #include chain:
-            #   base/test_suite.h
-            #   gtk/gtk.h
-            '../build/linux/system.gyp:gtk',
-          ],
-        }],
-      ],
     },
   ],
   'conditions': [
diff --git a/courgette/courgette_lib.target.darwin-arm.mk b/courgette/courgette_lib.target.darwin-arm.mk
index f8e340c..d08dcd4 100644
--- a/courgette/courgette_lib.target.darwin-arm.mk
+++ b/courgette/courgette_lib.target.darwin-arm.mk
@@ -240,7 +240,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/courgette/courgette_lib.target.darwin-mips.mk b/courgette/courgette_lib.target.darwin-mips.mk
index cfb998f..93032e7 100644
--- a/courgette/courgette_lib.target.darwin-mips.mk
+++ b/courgette/courgette_lib.target.darwin-mips.mk
@@ -236,7 +236,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/courgette/courgette_lib.target.darwin-x86.mk b/courgette/courgette_lib.target.darwin-x86.mk
index 8bb1d9b..15d5c23 100644
--- a/courgette/courgette_lib.target.darwin-x86.mk
+++ b/courgette/courgette_lib.target.darwin-x86.mk
@@ -238,7 +238,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/courgette/courgette_lib.target.darwin-x86_64.mk b/courgette/courgette_lib.target.darwin-x86_64.mk
index 934e31a..12fe550 100644
--- a/courgette/courgette_lib.target.darwin-x86_64.mk
+++ b/courgette/courgette_lib.target.darwin-x86_64.mk
@@ -238,7 +238,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/courgette/courgette_lib.target.linux-arm.mk b/courgette/courgette_lib.target.linux-arm.mk
index f8e340c..d08dcd4 100644
--- a/courgette/courgette_lib.target.linux-arm.mk
+++ b/courgette/courgette_lib.target.linux-arm.mk
@@ -240,7 +240,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/courgette/courgette_lib.target.linux-mips.mk b/courgette/courgette_lib.target.linux-mips.mk
index cfb998f..93032e7 100644
--- a/courgette/courgette_lib.target.linux-mips.mk
+++ b/courgette/courgette_lib.target.linux-mips.mk
@@ -236,7 +236,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/courgette/courgette_lib.target.linux-x86.mk b/courgette/courgette_lib.target.linux-x86.mk
index 8bb1d9b..15d5c23 100644
--- a/courgette/courgette_lib.target.linux-x86.mk
+++ b/courgette/courgette_lib.target.linux-x86.mk
@@ -238,7 +238,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/courgette/courgette_lib.target.linux-x86_64.mk b/courgette/courgette_lib.target.linux-x86_64.mk
index 934e31a..12fe550 100644
--- a/courgette/courgette_lib.target.linux-x86_64.mk
+++ b/courgette/courgette_lib.target.linux-x86_64.mk
@@ -238,7 +238,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/crypto/BUILD.gn b/crypto/BUILD.gn
index 110868d..2841b15 100644
--- a/crypto/BUILD.gn
+++ b/crypto/BUILD.gn
@@ -13,7 +13,6 @@
     "capi_util.cc",
     "capi_util.h",
     "crypto_export.h",
-    "crypto_module_blocking_password_delegate.h",
     "cssm_init.cc",
     "cssm_init.h",
     "curve25519.cc",
@@ -106,17 +105,11 @@
     ]
   }
 
-  if (!is_linux) {
+  if (use_openssl || !is_linux) {
     sources -= [
       "openpgp_symmetric_encryption.cc",
       "openpgp_symmetric_encryption.h",
     ]
-    if (use_nss) {  # Removed for non-NSS in all cases below.
-      sources -= [
-        "openpgp_symmetric_encryption.cc",
-        "openpgp_symmetric_encryption.h",
-      ]
-    }
   }
   if (!is_mac) {
     sources -= [
@@ -133,7 +126,8 @@
     ]
   }
 
-  if (!use_nss) {
+  if (use_openssl) {
+    # Remove NSS files when using OpenSSL
     sources -= [
       "ec_private_key_nss.cc",
       "ec_signature_creator_nss.cc",
@@ -153,8 +147,8 @@
       "third_party/nss/rsawrapr.c",
       "third_party/nss/secsign.cc",
     ]
-  }
-  if (!use_openssl) {
+  } else {
+    # Remove OpenSSL when using NSS.
     sources -= [
       "ec_private_key_openssl.cc",
       "ec_signature_creator_openssl.cc",
@@ -179,13 +173,17 @@
   # OpenSSL/NSS but will use Windows APIs for that functionality.
   source_set("crypto_minimal_win") {
     sources = [
+      "crypto_export.h",
       "hmac.cc",
       "hmac.h",
       "hmac_win.cc",
+      "scoped_capi_types.h",
+      "scoped_nss_types.h",
       "secure_util.cc",
       "secure_util.h",
       "symmetric_key.h",
       "symmetric_key_win.cc",
+      "third_party/nss/chromium-blapi.h",
       "third_party/nss/chromium-sha256.h",
       "third_party/nss/sha512.cc",
     ]
@@ -264,8 +262,16 @@
     if (is_linux) {
       # On Linux, we use the system NSS (excepting SSL where we always use our
       # own).
+      #
+      # We always need our SSL header search path to come before the system one
+      # so our versions are used. The libssl target will add the search path we
+      # want, but according to GN's ordering rules, direct_dependent_configs'
+      # search path will get applied before ones inherited from our
+      # dependencies. Therefore, we need to explicitly list our custom libssl's
+      # config here before the system one.
       direct_dependent_configs = [
-        "//third_party/nss:system_nss_no_ssl_config"
+        "//net/third_party/nss/ssl:ssl_config",
+        "//third_party/nss:system_nss_no_ssl_config",
       ]
     } else {
       # Non-Linux platforms use the hermetic NSS from the tree.
diff --git a/crypto/crypto.target.darwin-arm.mk b/crypto/crypto.target.darwin-arm.mk
index b410c5a..3631a95 100644
--- a/crypto/crypto.target.darwin-arm.mk
+++ b/crypto/crypto.target.darwin-arm.mk
@@ -245,7 +245,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/crypto/crypto.target.darwin-mips.mk b/crypto/crypto.target.darwin-mips.mk
index 76e66e3..080fa74 100644
--- a/crypto/crypto.target.darwin-mips.mk
+++ b/crypto/crypto.target.darwin-mips.mk
@@ -241,7 +241,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/crypto/crypto.target.darwin-x86.mk b/crypto/crypto.target.darwin-x86.mk
index 712b055..3a9cc82 100644
--- a/crypto/crypto.target.darwin-x86.mk
+++ b/crypto/crypto.target.darwin-x86.mk
@@ -243,7 +243,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/crypto/crypto.target.darwin-x86_64.mk b/crypto/crypto.target.darwin-x86_64.mk
index e827e06..aab3216 100644
--- a/crypto/crypto.target.darwin-x86_64.mk
+++ b/crypto/crypto.target.darwin-x86_64.mk
@@ -245,7 +245,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/crypto/crypto.target.linux-arm.mk b/crypto/crypto.target.linux-arm.mk
index b410c5a..3631a95 100644
--- a/crypto/crypto.target.linux-arm.mk
+++ b/crypto/crypto.target.linux-arm.mk
@@ -245,7 +245,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/crypto/crypto.target.linux-mips.mk b/crypto/crypto.target.linux-mips.mk
index 76e66e3..080fa74 100644
--- a/crypto/crypto.target.linux-mips.mk
+++ b/crypto/crypto.target.linux-mips.mk
@@ -241,7 +241,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/crypto/crypto.target.linux-x86.mk b/crypto/crypto.target.linux-x86.mk
index 712b055..3a9cc82 100644
--- a/crypto/crypto.target.linux-x86.mk
+++ b/crypto/crypto.target.linux-x86.mk
@@ -243,7 +243,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/crypto/crypto.target.linux-x86_64.mk b/crypto/crypto.target.linux-x86_64.mk
index e827e06..aab3216 100644
--- a/crypto/crypto.target.linux-x86_64.mk
+++ b/crypto/crypto.target.linux-x86_64.mk
@@ -245,7 +245,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/crypto/hmac_unittest.cc b/crypto/hmac_unittest.cc
index 6bcd1bc..174c323 100644
--- a/crypto/hmac_unittest.cc
+++ b/crypto/hmac_unittest.cc
@@ -281,7 +281,7 @@
   const char* kExpectedDigest =
       "\xFB\xDB\x1D\x1B\x18\xAA\x6C\x08\x32\x4B\x7D\x64\xB7\x1F\xB7\x63"
       "\x70\x69\x0E\x1D";
-  base::StringPiece data("", 0u);
+  base::StringPiece data("");
 
   crypto::HMAC hmac(crypto::HMAC::SHA1);
   ASSERT_TRUE(hmac.Init(NULL, 0));
diff --git a/device/bluetooth/OWNERS b/device/bluetooth/OWNERS
index 8b0555a..9226f87 100644
--- a/device/bluetooth/OWNERS
+++ b/device/bluetooth/OWNERS
@@ -1,3 +1,5 @@
+set noparent
+
 keybuk@chromium.org
 armansito@chromium.org
 
diff --git a/device/bluetooth/bluetooth_adapter.cc b/device/bluetooth/bluetooth_adapter.cc
index ffa27ef..58ffcac 100644
--- a/device/bluetooth/bluetooth_adapter.cc
+++ b/device/bluetooth/bluetooth_adapter.cc
@@ -11,6 +11,15 @@
 
 namespace device {
 
+#if !defined(OS_CHROMEOS) && !defined(OS_WIN) && !defined(OS_MACOSX)
+//static
+base::WeakPtr<BluetoothAdapter> BluetoothAdapter::CreateAdapter(
+    const InitCallback& init_callback) {
+  return base::WeakPtr<BluetoothAdapter>();
+}
+#endif  // !defined(OS_CHROMEOS) && !defined(OS_WIN) && !defined(OS_MACOSX)
+
+
 BluetoothAdapter::BluetoothAdapter()
     : weak_ptr_factory_(this) {
 }
diff --git a/device/bluetooth/bluetooth_adapter.h b/device/bluetooth/bluetooth_adapter.h
index f46a477..c2f513c 100644
--- a/device/bluetooth/bluetooth_adapter.h
+++ b/device/bluetooth/bluetooth_adapter.h
@@ -24,7 +24,7 @@
 
 // BluetoothAdapter represents a local Bluetooth adapter which may be used to
 // interact with remote Bluetooth devices. As well as providing support for
-// determining whether an adapter is present, and whether the radio is powered,
+// determining whether an adapter is present and whether the radio is powered,
 // this class also provides support for obtaining the list of remote devices
 // known to the adapter, discovering new devices, and providing notification of
 // updates to device information.
@@ -35,25 +35,25 @@
    public:
     virtual ~Observer() {}
 
-    // Called when the presence of the adapter |adapter| changes, when |present|
+    // Called when the presence of the adapter |adapter| changes. When |present|
     // is true the adapter is now present, false means the adapter has been
     // removed from the system.
     virtual void AdapterPresentChanged(BluetoothAdapter* adapter,
                                        bool present) {}
 
-    // Called when the radio power state of the adapter |adapter| changes, when
+    // Called when the radio power state of the adapter |adapter| changes. When
     // |powered| is true the adapter radio is powered, false means the adapter
     // radio is off.
     virtual void AdapterPoweredChanged(BluetoothAdapter* adapter,
                                        bool powered) {}
 
-    // Called when the discoverability state of the  adapter |adapter| changes,
-    // when |discoverable| is true the adapter is discoverable by other devices,
+    // Called when the discoverability state of the  adapter |adapter| changes.
+    // When |discoverable| is true the adapter is discoverable by other devices,
     // false means the adapter is not discoverable.
     virtual void AdapterDiscoverableChanged(BluetoothAdapter* adapter,
                                            bool discoverable) {}
 
-    // Called when the discovering state of the adapter |adapter| changes, when
+    // Called when the discovering state of the adapter |adapter| changes. When
     // |discovering| is true the adapter is seeking new devices, false means it
     // is not.
     virtual void AdapterDiscoveringChanged(BluetoothAdapter* adapter,
@@ -61,19 +61,20 @@
 
     // Called when a new device |device| is added to the adapter |adapter|,
     // either because it has been discovered or a connection made. |device|
-    // should not be cached, instead copy its address.
+    // should not be cached. Instead, copy its Bluetooth address.
     virtual void DeviceAdded(BluetoothAdapter* adapter,
                              BluetoothDevice* device) {}
 
     // Called when properties of the device |device| known to the adapter
-    // |adapter| change. |device| should not be cached, instead copy its
-    // address.
+    // |adapter| change. |device| should not be cached. Instead, copy its
+    // Bluetooth address.
     virtual void DeviceChanged(BluetoothAdapter* adapter,
                                BluetoothDevice* device) {}
 
     // Called when the device |device| is removed from the adapter |adapter|,
     // either as a result of a discovered device being lost between discovering
-    // phases or pairing information deleted. |device| should not be cached.
+    // phases or pairing information deleted. |device| should not be
+    // cached. Instead, copy its Bluetooth address.
     virtual void DeviceRemoved(BluetoothAdapter* adapter,
                                BluetoothDevice* device) {}
   };
@@ -87,14 +88,27 @@
   typedef base::Callback<void(const BluetoothOutOfBandPairingData& data)>
       BluetoothOutOfBandPairingDataCallback;
 
-  // Adds and removes observers for events on this bluetooth adapter, if
-  // monitoring multiple adapters check the |adapter| parameter of observer
+  // The InitCallback is used to trigger a callback after asynchronous
+  // initialization, if initialization is asynchronous on the platform.
+  typedef base::Callback<void()> InitCallback;
+
+  // Returns a weak pointer to a new adapter.  For platforms with asynchronous
+  // initialization, the returned adapter will run the |init_callback| once
+  // asynchronous initialization is complete.
+  // Caution: The returned pointer also transfers ownership of the adapter.  The
+  // caller is expected to call |AddRef()| on the returned pointer, typically by
+  // storing it into a |scoped_refptr|.
+  static base::WeakPtr<BluetoothAdapter> CreateAdapter(
+      const InitCallback& init_callback);
+
+  // Adds and removes observers for events on this bluetooth adapter. If
+  // monitoring multiple adapters, check the |adapter| parameter of observer
   // methods to determine which adapter is issuing the event.
   virtual void AddObserver(BluetoothAdapter::Observer* observer) = 0;
   virtual void RemoveObserver(
       BluetoothAdapter::Observer* observer) = 0;
 
-  // The address of this adapter.  The address format is "XX:XX:XX:XX:XX:XX",
+  // The address of this adapter. The address format is "XX:XX:XX:XX:XX:XX",
   // where each XX is a hexadecimal number.
   virtual std::string GetAddress() const = 0;
 
@@ -110,17 +124,17 @@
   // Indicates whether the adapter is initialized and ready to use.
   virtual bool IsInitialized() const = 0;
 
-  // Indicates whether the adapter is actually present on the system, for the
-  // default adapter this indicates whether any adapter is present. An adapter
+  // Indicates whether the adapter is actually present on the system. For the
+  // default adapter, this indicates whether any adapter is present. An adapter
   // is only considered present if the address has been obtained.
   virtual bool IsPresent() const = 0;
 
   // Indicates whether the adapter radio is powered.
   virtual bool IsPowered() const = 0;
 
-  // Requests a change to the adapter radio power, setting |powered| to true
-  // will turn on the radio and false will turn it off.  On success, callback
-  // will be called.  On failure, |error_callback| will be called.
+  // Requests a change to the adapter radio power. Setting |powered| to true
+  // will turn on the radio and false will turn it off. On success, |callback|
+  // will be called. On failure, |error_callback| will be called.
   virtual void SetPowered(bool powered,
                           const base::Closure& callback,
                           const ErrorCallback& error_callback) = 0;
@@ -154,16 +168,16 @@
   // device discovery may actually be in progress. Clients can call GetDevices()
   // and check for those with IsPaired() as false to obtain the list of devices
   // that have been discovered so far. Otherwise, clients can be notified of all
-  // new and lost devices can by implementing the Observer methods "DeviceAdded"
-  // and "DeviceRemoved".
+  // new and lost devices by implementing the Observer methods "DeviceAdded" and
+  // "DeviceRemoved".
   typedef base::Callback<void(scoped_ptr<BluetoothDiscoverySession>)>
       DiscoverySessionCallback;
   virtual void StartDiscoverySession(const DiscoverySessionCallback& callback,
                                      const ErrorCallback& error_callback);
 
-  // Requests the list of devices from the adapter, all are returned including
-  // those currently connected and those paired. Use the returned device
-  // pointers to determine which they are.
+  // Requests the list of devices from the adapter. All devices are returned,
+  // including those currently connected and those paired. Use the returned
+  // device pointers to determine which they are.
   typedef std::vector<BluetoothDevice*> DeviceList;
   virtual DeviceList GetDevices();
   typedef std::vector<const BluetoothDevice*> ConstDeviceList;
@@ -172,8 +186,7 @@
   // Returns a pointer to the device with the given address |address| or NULL if
   // no such device is known.
   virtual BluetoothDevice* GetDevice(const std::string& address);
-  virtual const BluetoothDevice* GetDevice(
-      const std::string& address) const;
+  virtual const BluetoothDevice* GetDevice(const std::string& address) const;
 
   // Requests the local Out Of Band pairing data.
   virtual void ReadLocalOutOfBandPairingData(
@@ -187,9 +200,9 @@
     PAIRING_DELEGATE_PRIORITY_HIGH
   };
 
-  // Adds a default pairing delegate with priority |priority|, method calls
+  // Adds a default pairing delegate with priority |priority|. Method calls
   // will be made on |pairing_delegate| for incoming pairing requests if the
-  // priority is higher than any other registered, or for those of the same
+  // priority is higher than any other registered; or for those of the same
   // priority, the first registered.
   //
   // |pairing_delegate| must not be freed without first calling
diff --git a/device/bluetooth/bluetooth_adapter_chromeos.cc b/device/bluetooth/bluetooth_adapter_chromeos.cc
index 2be5528..8d1f1c5 100644
--- a/device/bluetooth/bluetooth_adapter_chromeos.cc
+++ b/device/bluetooth/bluetooth_adapter_chromeos.cc
@@ -42,8 +42,24 @@
 
 }  // namespace
 
+namespace device {
+
+// static
+base::WeakPtr<BluetoothAdapter> BluetoothAdapter::CreateAdapter(
+    const InitCallback& init_callback) {
+  return chromeos::BluetoothAdapterChromeOS::CreateAdapter();
+}
+
+}
+
 namespace chromeos {
 
+// static
+base::WeakPtr<BluetoothAdapter> BluetoothAdapterChromeOS::CreateAdapter() {
+  BluetoothAdapterChromeOS* adapter = new BluetoothAdapterChromeOS();
+  return adapter->weak_ptr_factory_.GetWeakPtr();
+}
+
 BluetoothAdapterChromeOS::BluetoothAdapterChromeOS()
     : num_discovery_sessions_(0),
       discovery_request_pending_(false),
diff --git a/device/bluetooth/bluetooth_adapter_chromeos.h b/device/bluetooth/bluetooth_adapter_chromeos.h
index 8e10c6f..905cbc3 100644
--- a/device/bluetooth/bluetooth_adapter_chromeos.h
+++ b/device/bluetooth/bluetooth_adapter_chromeos.h
@@ -17,12 +17,6 @@
 #include "device/bluetooth/bluetooth_adapter.h"
 #include "device/bluetooth/bluetooth_device.h"
 
-namespace device {
-
-class BluetoothAdapterFactory;
-
-}  // namespace device
-
 namespace chromeos {
 
 class BluetoothChromeOSTest;
@@ -38,7 +32,9 @@
       public chromeos::BluetoothInputClient::Observer,
       public chromeos::BluetoothAgentServiceProvider::Delegate {
  public:
-  // BluetoothAdapter override
+  static base::WeakPtr<BluetoothAdapter> CreateAdapter();
+
+  // BluetoothAdapter:
   virtual void AddObserver(
       device::BluetoothAdapter::Observer* observer) OVERRIDE;
   virtual void RemoveObserver(
@@ -67,12 +63,11 @@
       const ErrorCallback& error_callback) OVERRIDE;
 
  protected:
-  // BluetoothAdapter override
+  // BluetoothAdapter:
   virtual void RemovePairingDelegateInternal(
       device::BluetoothDevice::PairingDelegate* pairing_delegate) OVERRIDE;
 
  private:
-  friend class device::BluetoothAdapterFactory;
   friend class BluetoothChromeOSTest;
   friend class BluetoothDeviceChromeOS;
   friend class BluetoothProfileChromeOS;
@@ -181,7 +176,7 @@
                                  const ErrorCallback& error_callback,
                                  bool success);
 
-  // BluetoothAdapter override.
+  // BluetoothAdapter:
   virtual void AddDiscoverySession(
       const base::Closure& callback,
       const ErrorCallback& error_callback) OVERRIDE;
diff --git a/device/bluetooth/bluetooth_adapter_factory.cc b/device/bluetooth/bluetooth_adapter_factory.cc
index b48d4f9..471ce2f 100644
--- a/device/bluetooth/bluetooth_adapter_factory.cc
+++ b/device/bluetooth/bluetooth_adapter_factory.cc
@@ -12,27 +12,22 @@
 #include "base/memory/weak_ptr.h"
 #include "device/bluetooth/bluetooth_adapter.h"
 
-#if defined(OS_CHROMEOS)
-#include "device/bluetooth/bluetooth_adapter_chromeos.h"
-#elif defined(OS_WIN)
-#include "device/bluetooth/bluetooth_adapter_win.h"
-#elif defined(OS_MACOSX)
+#if defined(OS_MACOSX)
 #include "base/mac/mac_util.h"
-#include "device/bluetooth/bluetooth_adapter_mac.h"
 #endif
 
+namespace device {
+
 namespace {
 
-using device::BluetoothAdapter;
-using device::BluetoothAdapterFactory;
+// Shared default adapter instance.  We don't want to keep this class around
+// if nobody is using it, so use a WeakPtr and create the object when needed.
+// Since Google C++ Style (and clang's static analyzer) forbids us having
+// exit-time destructors, we use a leaky lazy instance for it.
+base::LazyInstance<base::WeakPtr<BluetoothAdapter> >::Leaky default_adapter =
+    LAZY_INSTANCE_INITIALIZER;
 
-// Shared default adapter instance, we don't want to keep this class around
-// if nobody is using it so use a WeakPtr and create the object when needed;
-// since Google C++ Style (and clang's static analyzer) forbids us having
-// exit-time destructors we use a leaky lazy instance for it.
-base::LazyInstance<base::WeakPtr<device::BluetoothAdapter> >::Leaky
-    default_adapter = LAZY_INSTANCE_INITIALIZER;
-
+#if defined(OS_WIN)
 typedef std::vector<BluetoothAdapterFactory::AdapterCallback>
     AdapterCallbackList;
 
@@ -42,9 +37,8 @@
 base::LazyInstance<AdapterCallbackList> adapter_callbacks =
     LAZY_INSTANCE_INITIALIZER;
 
-#if defined(OS_WIN)
 void RunAdapterCallbacks() {
-  CHECK(default_adapter.Get().get());
+  DCHECK(default_adapter.Get());
   scoped_refptr<BluetoothAdapter> adapter(default_adapter.Get().get());
   for (std::vector<BluetoothAdapterFactory::AdapterCallback>::const_iterator
            iter = adapter_callbacks.Get().begin();
@@ -58,8 +52,6 @@
 
 }  // namespace
 
-namespace device {
-
 // static
 bool BluetoothAdapterFactory::IsBluetoothAdapterAvailable() {
 #if defined(OS_CHROMEOS) || defined(OS_WIN)
@@ -73,33 +65,30 @@
 
 // static
 void BluetoothAdapterFactory::GetAdapter(const AdapterCallback& callback) {
-  if (!default_adapter.Get().get()) {
-#if defined(OS_CHROMEOS)
-    chromeos::BluetoothAdapterChromeOS* new_adapter =
-        new chromeos::BluetoothAdapterChromeOS();
-    default_adapter.Get() = new_adapter->weak_ptr_factory_.GetWeakPtr();
-#elif defined(OS_WIN)
-    BluetoothAdapterWin* new_adapter = new BluetoothAdapterWin(
-        base::Bind(&RunAdapterCallbacks));
-    new_adapter->Init();
-    default_adapter.Get() = new_adapter->weak_ptr_factory_.GetWeakPtr();
-#elif defined(OS_MACOSX)
-    BluetoothAdapterMac* new_adapter = new BluetoothAdapterMac();
-    new_adapter->Init();
-    default_adapter.Get() = new_adapter->weak_ptr_factory_.GetWeakPtr();
-#endif
+  DCHECK(IsBluetoothAdapterAvailable());
+
+#if defined(OS_WIN)
+  if (!default_adapter.Get()) {
+    default_adapter.Get() =
+        BluetoothAdapter::CreateAdapter(base::Bind(&RunAdapterCallbacks));
   }
 
-  if (default_adapter.Get()->IsInitialized()) {
-    callback.Run(scoped_refptr<BluetoothAdapter>(default_adapter.Get().get()));
-  } else {
-    adapter_callbacks.Get().push_back(callback);
+  DCHECK(!default_adapter.Get()->IsInitialized());
+  adapter_callbacks.Get().push_back(callback);
+#else  // !defined(OS_WIN)
+  if (!default_adapter.Get()) {
+    default_adapter.Get() =
+        BluetoothAdapter::CreateAdapter(BluetoothAdapter::InitCallback());
   }
+
+  DCHECK(default_adapter.Get()->IsInitialized());
+  callback.Run(scoped_refptr<BluetoothAdapter>(default_adapter.Get().get()));
+#endif  // defined(OS_WIN)
 }
 
 // static
-scoped_refptr<BluetoothAdapter> BluetoothAdapterFactory::MaybeGetAdapter() {
-  return scoped_refptr<BluetoothAdapter>(default_adapter.Get().get());
+bool BluetoothAdapterFactory::HasSharedInstanceForTesting() {
+  return default_adapter.Get();
 }
 
 }  // namespace device
diff --git a/device/bluetooth/bluetooth_adapter_factory.h b/device/bluetooth/bluetooth_adapter_factory.h
index 3b6a2c2..e9dcee4 100644
--- a/device/bluetooth/bluetooth_adapter_factory.h
+++ b/device/bluetooth/bluetooth_adapter_factory.h
@@ -5,17 +5,14 @@
 #ifndef DEVICE_BLUETOOTH_BLUETOOTH_ADAPTER_FACTORY_H_
 #define DEVICE_BLUETOOTH_BLUETOOTH_ADAPTER_FACTORY_H_
 
-#include <string>
-
 #include "base/callback.h"
 #include "base/memory/ref_counted.h"
 #include "device/bluetooth/bluetooth_adapter.h"
 
 namespace device {
 
-// BluetoothAdapterFactory is a class that contains static methods, which
-// instantiate either a specific Bluetooth adapter, or the generic "default
-// adapter" which may change depending on availability.
+// A factory class for building a Bluetooth adapter on platforms where Bluetooth
+// is available.
 class BluetoothAdapterFactory {
  public:
   typedef base::Callback<void(scoped_refptr<BluetoothAdapter> adapter)>
@@ -31,10 +28,9 @@
   // use.
   static void GetAdapter(const AdapterCallback& callback);
 
-  // Returns the shared instance of the adapter that has already been created,
-  // but may or may not have been initialized.
-  // It returns NULL if no adapter has been created at the time.
-  static scoped_refptr<BluetoothAdapter> MaybeGetAdapter();
+  // Returns true iff the implementation has a (non-NULL) shared instance of the
+  // adapter. Exposed for testing.
+  static bool HasSharedInstanceForTesting();
 };
 
 }  // namespace device
diff --git a/device/bluetooth/bluetooth_adapter_mac.h b/device/bluetooth/bluetooth_adapter_mac.h
index 064b6bf..a166aec 100644
--- a/device/bluetooth/bluetooth_adapter_mac.h
+++ b/device/bluetooth/bluetooth_adapter_mac.h
@@ -11,24 +11,17 @@
 #include <vector>
 
 #include "base/containers/hash_tables.h"
+#include "base/mac/scoped_nsobject.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
 #include "base/observer_list.h"
 #include "device/bluetooth/bluetooth_adapter.h"
 
-#ifdef __OBJC__
 @class BluetoothAdapterMacDelegate;
 @class IOBluetoothDevice;
 @class IOBluetoothDeviceInquiry;
 @class NSArray;
 @class NSDate;
-#else
-class BluetoothAdapterMacDelegate;
-class IOBluetoothDevice;
-class IOBluetoothDeviceInquiry;
-class NSArray;
-class NSDate;
-#endif
 
 namespace base {
 
@@ -42,7 +35,9 @@
 
 class BluetoothAdapterMac : public BluetoothAdapter {
  public:
-  // BluetoothAdapter override
+  static base::WeakPtr<BluetoothAdapter> CreateAdapter();
+
+  // BluetoothAdapter:
   virtual void AddObserver(BluetoothAdapter::Observer* observer) OVERRIDE;
   virtual void RemoveObserver(BluetoothAdapter::Observer* observer) OVERRIDE;
   virtual std::string GetAddress() const OVERRIDE;
@@ -76,12 +71,11 @@
                              bool aborted);
 
  protected:
-  // BluetoothAdapter override
+  // BluetoothAdapter:
   virtual void RemovePairingDelegateInternal(
       device::BluetoothDevice::PairingDelegate* pairing_delegate) OVERRIDE;
 
  private:
-  friend class BluetoothAdapterFactory;
   friend class BluetoothAdapterMacTest;
 
   enum DiscoveryStatus {
@@ -94,7 +88,7 @@
   BluetoothAdapterMac();
   virtual ~BluetoothAdapterMac();
 
-  // BluetoothAdapter override.
+  // BluetoothAdapter:
   virtual void AddDiscoverySession(
       const base::Closure& callback,
       const ErrorCallback& error_callback) OVERRIDE;
@@ -126,8 +120,8 @@
   DiscoveryCallbackList on_stop_discovery_callbacks_;
   size_t num_discovery_listeners_;
 
-  BluetoothAdapterMacDelegate* adapter_delegate_;
-  IOBluetoothDeviceInquiry* device_inquiry_;
+  base::scoped_nsobject<BluetoothAdapterMacDelegate> adapter_delegate_;
+  base::scoped_nsobject<IOBluetoothDeviceInquiry> device_inquiry_;
 
   // A list of discovered device addresses.
   // This list is used to check if the same device is discovered twice during
@@ -136,7 +130,7 @@
 
   // Timestamp for the recently accessed device.
   // Used to determine if |devices_| needs an update.
-  NSDate* recently_accessed_device_timestamp_;
+  base::scoped_nsobject<NSDate> recently_accessed_device_timestamp_;
 
   scoped_refptr<base::SequencedTaskRunner> ui_task_runner_;
 
diff --git a/device/bluetooth/bluetooth_adapter_mac.mm b/device/bluetooth/bluetooth_adapter_mac.mm
index f8eba23..5fb53a3 100644
--- a/device/bluetooth/bluetooth_adapter_mac.mm
+++ b/device/bluetooth/bluetooth_adapter_mac.mm
@@ -90,6 +90,19 @@
 
 namespace device {
 
+// static
+base::WeakPtr<BluetoothAdapter> BluetoothAdapter::CreateAdapter(
+    const InitCallback& init_callback) {
+  return BluetoothAdapterMac::CreateAdapter();
+}
+
+// static
+base::WeakPtr<BluetoothAdapter> BluetoothAdapterMac::CreateAdapter() {
+  BluetoothAdapterMac* adapter = new BluetoothAdapterMac();
+  adapter->Init();
+  return adapter->weak_ptr_factory_.GetWeakPtr();
+}
+
 BluetoothAdapterMac::BluetoothAdapterMac()
     : BluetoothAdapter(),
       powered_(false),
@@ -99,14 +112,10 @@
       device_inquiry_(
           [[IOBluetoothDeviceInquiry
               inquiryWithDelegate:adapter_delegate_] retain]),
-      recently_accessed_device_timestamp_(nil),
       weak_ptr_factory_(this) {
 }
 
 BluetoothAdapterMac::~BluetoothAdapterMac() {
-  [device_inquiry_ release];
-  [adapter_delegate_ release];
-  [recently_accessed_device_timestamp_ release];
 }
 
 void BluetoothAdapterMac::AddObserver(BluetoothAdapter::Observer* observer) {
@@ -215,14 +224,16 @@
 
 void BluetoothAdapterMac::PollAdapter() {
   bool was_present = IsPresent();
-  std::string name = "";
-  std::string address = "";
+  std::string name;
+  std::string address;
   bool powered = false;
   IOBluetoothHostController* controller =
       [IOBluetoothHostController defaultController];
 
   if (controller != nil) {
     name = base::SysNSStringToUTF8([controller nameAsString]);
+    // TODO(isherman): Convert the address format to XX:XX:XX:XX:XX:XX rather
+    // than xx-xx-xx-xx-xx-xx.
     address = base::SysNSStringToUTF8([controller addressAsString]);
     powered = ([controller powerState] == kBluetoothHCIPowerStateON);
   }
@@ -249,8 +260,7 @@
       [recently_accessed_device_timestamp_ compare:access_timestamp] ==
           NSOrderedAscending) {
     UpdateDevices([IOBluetoothDevice pairedDevices]);
-    [recently_accessed_device_timestamp_ release];
-    recently_accessed_device_timestamp_ = [access_timestamp copy];
+    recently_accessed_device_timestamp_.reset([access_timestamp copy]);
   }
 
   ui_task_runner_->PostDelayedTask(
@@ -265,13 +275,13 @@
   for (IOBluetoothDevice* device in devices) {
     std::string device_address =
         base::SysNSStringToUTF8([device addressString]);
-    devices_[device_address] = new BluetoothDeviceMac(ui_task_runner_, device);
+    devices_[device_address] = new BluetoothDeviceMac(device);
   }
 }
 
 void BluetoothAdapterMac::DeviceInquiryStarted(
     IOBluetoothDeviceInquiry* inquiry) {
-  DCHECK(device_inquiry_ == inquiry);
+  DCHECK_EQ(device_inquiry_, inquiry);
   if (discovery_status_ == DISCOVERING)
     return;
 
@@ -287,13 +297,12 @@
 
 void BluetoothAdapterMac::DeviceFound(IOBluetoothDeviceInquiry* inquiry,
                                       IOBluetoothDevice* device) {
-  DCHECK(device_inquiry_ == inquiry);
+  DCHECK_EQ(device_inquiry_, inquiry);
   std::string device_address = base::SysNSStringToUTF8([device addressString]);
   if (discovered_devices_.find(device_address) == discovered_devices_.end()) {
-    scoped_ptr<BluetoothDeviceMac> device_mac(
-        new BluetoothDeviceMac(ui_task_runner_, device));
+    BluetoothDeviceMac device_mac(device);
     FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_,
-                      DeviceAdded(this, device_mac.get()));
+                      DeviceAdded(this, &device_mac));
     discovered_devices_.insert(device_address);
   }
 }
@@ -302,7 +311,7 @@
     IOBluetoothDeviceInquiry* inquiry,
     IOReturn error,
     bool aborted) {
-  DCHECK(device_inquiry_ == inquiry);
+  DCHECK_EQ(device_inquiry_, inquiry);
   if (discovery_status_ == DISCOVERING &&
       [device_inquiry_ start] == kIOReturnSuccess) {
     return;
diff --git a/device/bluetooth/bluetooth_adapter_win.cc b/device/bluetooth/bluetooth_adapter_win.cc
index 8f92be8..06877e2 100644
--- a/device/bluetooth/bluetooth_adapter_win.cc
+++ b/device/bluetooth/bluetooth_adapter_win.cc
@@ -19,6 +19,20 @@
 
 namespace device {
 
+// static
+base::WeakPtr<BluetoothAdapter> BluetoothAdapter::CreateAdapter(
+    const InitCallback& init_callback) {
+  return BluetoothAdapterWin::CreateAdapter(init_callback);
+}
+
+// static
+base::WeakPtr<BluetoothAdapter> BluetoothAdapterWin::CreateAdapter(
+    const InitCallback& init_callback) {
+  BluetoothAdapterWin* adapter = new BluetoothAdapterWin(init_callback);
+  adapter->Init();
+  return adapter->weak_ptr_factory_.GetWeakPtr();
+}
+
 BluetoothAdapterWin::BluetoothAdapterWin(const InitCallback& init_callback)
     : BluetoothAdapter(),
       init_callback_(init_callback),
diff --git a/device/bluetooth/bluetooth_adapter_win.h b/device/bluetooth/bluetooth_adapter_win.h
index 2c12fda..388f5e7 100644
--- a/device/bluetooth/bluetooth_adapter_win.h
+++ b/device/bluetooth/bluetooth_adapter_win.h
@@ -24,7 +24,6 @@
 
 namespace device {
 
-class BluetoothAdapterFactory;
 class BluetoothAdapterWinTest;
 class BluetoothDevice;
 class BluetoothSocketThreadWin;
@@ -32,9 +31,10 @@
 class BluetoothAdapterWin : public BluetoothAdapter,
                             public BluetoothTaskManagerWin::Observer {
  public:
-  typedef base::Callback<void()> InitCallback;
+  static base::WeakPtr<BluetoothAdapter> CreateAdapter(
+      const InitCallback& init_callback);
 
-  // BluetoothAdapter override
+  // BluetoothAdapter:
   virtual void AddObserver(BluetoothAdapter::Observer* observer) OVERRIDE;
   virtual void RemoveObserver(BluetoothAdapter::Observer* observer) OVERRIDE;
   virtual std::string GetAddress() const OVERRIDE;
@@ -73,12 +73,11 @@
           OVERRIDE;
 
  protected:
-  // BluetoothAdapter override
+  // BluetoothAdapter:
   virtual void RemovePairingDelegateInternal(
       device::BluetoothDevice::PairingDelegate* pairing_delegate) OVERRIDE;
 
  private:
-  friend class BluetoothAdapterFactory;
   friend class BluetoothAdapterWinTest;
 
   enum DiscoveryStatus {
@@ -91,7 +90,7 @@
   explicit BluetoothAdapterWin(const InitCallback& init_callback);
   virtual ~BluetoothAdapterWin();
 
-  // BluetoothAdapter override.
+  // BluetoothAdapter:
   virtual void AddDiscoverySession(
       const base::Closure& callback,
       const ErrorCallback& error_callback) OVERRIDE;
diff --git a/device/bluetooth/bluetooth_device_mac.h b/device/bluetooth/bluetooth_device_mac.h
index 842a41a..ec87ff7 100644
--- a/device/bluetooth/bluetooth_device_mac.h
+++ b/device/bluetooth/bluetooth_device_mac.h
@@ -8,26 +8,17 @@
 #include <string>
 
 #include "base/basictypes.h"
+#include "base/mac/scoped_nsobject.h"
 #include "base/observer_list.h"
 #include "device/bluetooth/bluetooth_device.h"
 
-#ifdef __OBJC__
 @class IOBluetoothDevice;
-#else
-class IOBluetoothDevice;
-#endif
-
-namespace base {
-class SequencedTaskRunner;
-}  // namespace base
 
 namespace device {
 
 class BluetoothDeviceMac : public BluetoothDevice {
  public:
-  explicit BluetoothDeviceMac(
-      const scoped_refptr<base::SequencedTaskRunner>& ui_task_runner,
-      IOBluetoothDevice* device);
+  explicit BluetoothDeviceMac(IOBluetoothDevice* device);
   virtual ~BluetoothDeviceMac();
 
   // BluetoothDevice override
@@ -84,9 +75,7 @@
   // List of observers interested in event notifications from us.
   ObserverList<Observer> observers_;
 
-  scoped_refptr<base::SequencedTaskRunner> ui_task_runner_;
-  // (retained)
-  IOBluetoothDevice* device_;
+  base::scoped_nsobject<IOBluetoothDevice> device_;
 
   DISALLOW_COPY_AND_ASSIGN(BluetoothDeviceMac);
 };
diff --git a/device/bluetooth/bluetooth_device_mac.mm b/device/bluetooth/bluetooth_device_mac.mm
index 89f154e..24c2b45 100644
--- a/device/bluetooth/bluetooth_device_mac.mm
+++ b/device/bluetooth/bluetooth_device_mac.mm
@@ -37,15 +37,11 @@
 
 namespace device {
 
-BluetoothDeviceMac::BluetoothDeviceMac(
-    const scoped_refptr<base::SequencedTaskRunner>& ui_task_runner,
-    IOBluetoothDevice* device)
-    : BluetoothDevice(),
-      ui_task_runner_(ui_task_runner),
-      device_([device retain]) {}
+BluetoothDeviceMac::BluetoothDeviceMac(IOBluetoothDevice* device)
+    : device_([device retain]) {
+}
 
 BluetoothDeviceMac::~BluetoothDeviceMac() {
-  [device_ release];
 }
 
 void BluetoothDeviceMac::AddObserver(
@@ -72,8 +68,7 @@
   return base::SysNSStringToUTF8([device_ addressString]);
 }
 
-BluetoothDevice::VendorIDSource
-BluetoothDeviceMac::GetVendorIDSource() const {
+BluetoothDevice::VendorIDSource BluetoothDeviceMac::GetVendorIDSource() const {
   return VENDOR_ID_UNKNOWN;
 }
 
@@ -158,9 +153,8 @@
   NOTIMPLEMENTED();
 }
 
-void BluetoothDeviceMac::Disconnect(
-    const base::Closure& callback,
-    const ErrorCallback& error_callback) {
+void BluetoothDeviceMac::Disconnect(const base::Closure& callback,
+                                    const ErrorCallback& error_callback) {
   NOTIMPLEMENTED();
 }
 
@@ -172,9 +166,8 @@
     BluetoothProfile* profile,
     const base::Closure& callback,
     const ConnectToProfileErrorCallback& error_callback) {
-  DCHECK(ui_task_runner_->RunsTasksOnCurrentThread());
   static_cast<BluetoothProfileMac*>(profile)
-      ->Connect(ui_task_runner_, device_, callback, error_callback);
+      ->Connect(device_, callback, error_callback);
 }
 
 void BluetoothDeviceMac::SetOutOfBandPairingData(
diff --git a/device/bluetooth/bluetooth_gatt_chromeos_unittest.cc b/device/bluetooth/bluetooth_gatt_chromeos_unittest.cc
index a3294fb..3022237 100644
--- a/device/bluetooth/bluetooth_gatt_chromeos_unittest.cc
+++ b/device/bluetooth/bluetooth_gatt_chromeos_unittest.cc
@@ -555,7 +555,7 @@
   // This unit test tests that all remote GATT objects are created for D-Bus
   // objects that were already exposed.
   adapter_ = NULL;
-  EXPECT_EQ(NULL, device::BluetoothAdapterFactory::MaybeGetAdapter().get());
+  EXPECT_FALSE(device::BluetoothAdapterFactory::HasSharedInstanceForTesting());
 
   // Create the fake D-Bus objects.
   fake_bluetooth_device_client_->CreateDevice(
diff --git a/device/bluetooth/bluetooth_profile_mac.h b/device/bluetooth/bluetooth_profile_mac.h
index 673abeb..16c50e8 100644
--- a/device/bluetooth/bluetooth_profile_mac.h
+++ b/device/bluetooth/bluetooth_profile_mac.h
@@ -9,7 +9,9 @@
 
 #include "base/basictypes.h"
 #include "base/callback.h"
+#include "base/sequenced_task_runner.h"
 #include "device/bluetooth/bluetooth_profile.h"
+#include "device/bluetooth/bluetooth_socket.h"
 #include "device/bluetooth/bluetooth_uuid.h"
 
 #ifdef __OBJC__
@@ -18,10 +20,6 @@
 class IOBluetoothDevice;
 #endif
 
-namespace base {
-class SequencedTaskRunner;
-}  // namespace base
-
 namespace device {
 
 class BluetoothProfileMac : public BluetoothProfile {
@@ -31,15 +29,12 @@
   virtual void SetConnectionCallback(
       const ConnectionCallback& callback) OVERRIDE;
 
-  typedef base::Callback<void(const std::string&)> ErrorCallback;
-
   // Makes an outgoing connection to |device|, calling |callback| on succes or
   // |error_callback| on error. If successful, this method also calls
   // |connection_callback_| before calling |callback|.
-  void Connect(const scoped_refptr<base::SequencedTaskRunner>& ui_task_runner,
-               IOBluetoothDevice* device,
-               const base::Closure& callback,
-               const ErrorCallback& error_callback);
+  void Connect(IOBluetoothDevice* device,
+               const base::Closure& success_callback,
+               const BluetoothSocket::ErrorCompletionCallback& error_callback);
 
  private:
   friend BluetoothProfile;
diff --git a/device/bluetooth/bluetooth_profile_mac.mm b/device/bluetooth/bluetooth_profile_mac.mm
index b666877..8d676ec 100644
--- a/device/bluetooth/bluetooth_profile_mac.mm
+++ b/device/bluetooth/bluetooth_profile_mac.mm
@@ -8,7 +8,6 @@
 #import <IOBluetooth/objc/IOBluetoothSDPServiceRecord.h>
 #import <IOBluetooth/objc/IOBluetoothSDPUUID.h>
 
-#include <string>
 #include <vector>
 
 #include "base/basictypes.h"
@@ -18,7 +17,6 @@
 #include "base/memory/ref_counted.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/sys_string_conversions.h"
-#include "base/thread_task_runner_handle.h"
 #include "device/bluetooth/bluetooth_adapter_factory.h"
 #include "device/bluetooth/bluetooth_device_mac.h"
 #include "device/bluetooth/bluetooth_socket_mac.h"
@@ -60,23 +58,12 @@
                                     length:uuid_bytes_vector.size()];
 }
 
-void OnSocketConnectUI(
-    scoped_refptr<base::SequencedTaskRunner> ui_task_runner,
-    scoped_refptr<device::BluetoothSocketMac> socket,
-    const base::Closure& success_callback,
-    const device::BluetoothProfileMac::ErrorCallback& error_callback) {
-  DCHECK(ui_task_runner->RunsTasksOnCurrentThread());
-  socket->Connect(success_callback, error_callback);
-}
-
-void OnConnectSuccessUIWithAdapter(
-    scoped_refptr<base::SequencedTaskRunner> ui_task_runner,
+void OnConnectSuccessWithAdapter(
     const base::Closure& callback,
     const device::BluetoothProfileMac::ConnectionCallback& connection_callback,
     const std::string& device_address,
     scoped_refptr<device::BluetoothSocketMac> socket,
     scoped_refptr<device::BluetoothAdapter> adapter) {
-  DCHECK(ui_task_runner->RunsTasksOnCurrentThread());
   const device::BluetoothDevice* device = adapter->GetDevice(device_address);
   if (device) {
     connection_callback.Run(device, socket);
@@ -84,30 +71,19 @@
   }
 }
 
-void OnConnectSuccessUI(
-    scoped_refptr<base::SequencedTaskRunner> ui_task_runner,
+void OnConnectSuccess(
     const base::Closure& callback,
     const device::BluetoothProfileMac::ConnectionCallback& connection_callback,
     const std::string& device_address,
     scoped_refptr<device::BluetoothSocketMac> socket) {
-  DCHECK(ui_task_runner->RunsTasksOnCurrentThread());
   device::BluetoothAdapterFactory::GetAdapter(
-      base::Bind(&OnConnectSuccessUIWithAdapter,
-                 ui_task_runner,
+      base::Bind(&OnConnectSuccessWithAdapter,
                  callback,
                  connection_callback,
                  device_address,
                  socket));
 }
 
-void OnConnectErrorUI(
-    scoped_refptr<base::SequencedTaskRunner> ui_task_runner,
-    const device::BluetoothProfileMac::ErrorCallback& error_callback,
-    const std::string& error) {
-  DCHECK(ui_task_runner->RunsTasksOnCurrentThread());
-  error_callback.Run(error);
-}
-
 }  // namespace
 
 namespace device {
@@ -130,11 +106,9 @@
 }
 
 void BluetoothProfileMac::Connect(
-    const scoped_refptr<base::SequencedTaskRunner>& ui_task_runner,
     IOBluetoothDevice* device,
     const base::Closure& success_callback,
-    const ErrorCallback& error_callback) {
-  DCHECK(ui_task_runner->RunsTasksOnCurrentThread());
+    const BluetoothSocket::ErrorCompletionCallback& error_callback) {
   if (connection_callback_.is_null()) {
     error_callback.Run(kNoConnectionCallback);
     return;
@@ -149,17 +123,14 @@
 
   std::string device_address = base::SysNSStringToUTF8([device addressString]);
   scoped_refptr<BluetoothSocketMac> socket(
-      BluetoothSocketMac::CreateBluetoothSocket(ui_task_runner, record));
-  OnSocketConnectUI(
-      ui_task_runner,
-      socket,
-      base::Bind(OnConnectSuccessUI,
-                 ui_task_runner,
+      BluetoothSocketMac::CreateBluetoothSocket(record));
+  socket->Connect(
+      base::Bind(OnConnectSuccess,
                  success_callback,
                  connection_callback_,
                  device_address,
                  socket),
-      base::Bind(OnConnectErrorUI, ui_task_runner, error_callback));
+      error_callback);
 }
 
 }  // namespace device
diff --git a/device/bluetooth/bluetooth_socket.h b/device/bluetooth/bluetooth_socket.h
index 8aaa086..a23efa3 100644
--- a/device/bluetooth/bluetooth_socket.h
+++ b/device/bluetooth/bluetooth_socket.h
@@ -21,7 +21,7 @@
 // both the BluetoothDevice and BluetoothAdapter that were involved in their
 // creation.  In terms of threading, platform specific implementations may
 // differ slightly, but platform independent consumers must guarantee calling
-// various instances methods on the same thread as the thread used at
+// various instance methods on the same thread as the thread used at
 // construction time -- platform specific implementation are resonsible for
 // marshalling calls to a different thread if required.
 class BluetoothSocket : public base::RefCountedThreadSafe<BluetoothSocket> {
@@ -46,10 +46,11 @@
   virtual void Disconnect(const base::Closure& callback) = 0;
 
   // Receives data from the socket and calls |success_callback| when data is
-  // available. |count| is maximum amount of bytes received. If an error occurs,
-  // calls |error_callback| with a reason and an error message.
+  // available. |buffer_size| specifies the maximum number of bytes that can be
+  // received. If an error occurs, calls |error_callback| with a reason and an
+  // error message.
   virtual void Receive(
-      int count,
+      int buffer_size,
       const ReceiveCompletionCallback& success_callback,
       const ReceiveErrorCompletionCallback& error_callback) = 0;
 
diff --git a/device/bluetooth/bluetooth_socket_chromeos.cc b/device/bluetooth/bluetooth_socket_chromeos.cc
index 7725b6d..60f8888 100644
--- a/device/bluetooth/bluetooth_socket_chromeos.cc
+++ b/device/bluetooth/bluetooth_socket_chromeos.cc
@@ -54,7 +54,7 @@
 }
 
 void BluetoothSocketChromeOS::Receive(
-    int count,
+    int buffer_size,
     const ReceiveCompletionCallback& success_callback,
     const ReceiveErrorCompletionCallback& error_callback) {
   NOTIMPLEMENTED();
diff --git a/device/bluetooth/bluetooth_socket_chromeos.h b/device/bluetooth/bluetooth_socket_chromeos.h
index 5cfefba..58141b8 100644
--- a/device/bluetooth/bluetooth_socket_chromeos.h
+++ b/device/bluetooth/bluetooth_socket_chromeos.h
@@ -30,7 +30,7 @@
   // Overriden from BluetoothSocket:
   virtual void Close() OVERRIDE;
   virtual void Disconnect(const base::Closure& callback) OVERRIDE;
-  virtual void Receive(int count,
+  virtual void Receive(int buffer_size,
                        const ReceiveCompletionCallback& success_callback,
                        const ReceiveErrorCompletionCallback& error_callback)
       OVERRIDE;
diff --git a/device/bluetooth/bluetooth_socket_mac.h b/device/bluetooth/bluetooth_socket_mac.h
index 76e197d..40e0fb8 100644
--- a/device/bluetooth/bluetooth_socket_mac.h
+++ b/device/bluetooth/bluetooth_socket_mac.h
@@ -8,23 +8,17 @@
 #include <queue>
 #include <string>
 
-#include <IOKit/IOreturn.h>
+#include <IOKit/IOReturn.h>
 
+#include "base/mac/scoped_nsobject.h"
 #include "base/memory/linked_ptr.h"
 #include "base/memory/ref_counted.h"
-#include "base/sequenced_task_runner.h"
 #include "base/threading/thread_checker.h"
 #include "device/bluetooth/bluetooth_socket.h"
 
-#ifdef __OBJC__
 @class BluetoothRFCOMMChannelDelegate;
 @class IOBluetoothRFCOMMChannel;
 @class IOBluetoothSDPServiceRecord;
-#else
-class BluetoothRFCOMMChannelDelegate;
-class IOBluetoothRFCOMMChannel;
-class IOBluetoothSDPServiceRecord;
-#endif
 
 namespace net {
 class IOBuffer;
@@ -35,46 +29,37 @@
 
 class BluetoothServiceRecord;
 
-// This class is an implementation of BluetoothSocket class for OSX platform.
-// All methods of this class must all be called on the UI thread, as per Chrome
-// guidelines on performing Async IO on UI thread on MacOS.
+// Implements the BluetoothSocket class for the Mac OS X platform.
 class BluetoothSocketMac : public BluetoothSocket {
  public:
   static scoped_refptr<BluetoothSocketMac> CreateBluetoothSocket(
-      const scoped_refptr<base::SequencedTaskRunner>& ui_task_runner,
       IOBluetoothSDPServiceRecord* record);
 
-  // Connect to the peer device and calls |success_callback| when the
+  // Connects to the peer device and calls |success_callback| when the
   // connection has been established successfully. If an error occurs, calls
   // |error_callback| with a system error message.
   void Connect(const base::Closure& success_callback,
                const ErrorCompletionCallback& error_callback);
 
-  // Overriden from BluetoothSocket:
+  // BluetoothSocket:
   virtual void Close() OVERRIDE;
   virtual void Disconnect(const base::Closure& callback) OVERRIDE;
-  virtual void Receive(int count,
-                       const ReceiveCompletionCallback& success_callback,
-                       const ReceiveErrorCompletionCallback& error_callback)
-      OVERRIDE;
+  virtual void Receive(
+      int /* buffer_size */,
+      const ReceiveCompletionCallback& success_callback,
+      const ReceiveErrorCompletionCallback& error_callback) OVERRIDE;
   virtual void Send(scoped_refptr<net::IOBuffer> buffer,
                     int buffer_size,
                     const SendCompletionCallback& success_callback,
                     const ErrorCompletionCallback& error_callback) OVERRIDE;
 
-  // called by BluetoothRFCOMMChannelDelegate.
+  // Called by BluetoothRFCOMMChannelDelegate.
   void OnChannelOpened(IOBluetoothRFCOMMChannel* rfcomm_channel,
                        IOReturn status);
-
-  // called by BluetoothRFCOMMChannelDelegate.
   void OnChannelClosed(IOBluetoothRFCOMMChannel* rfcomm_channel);
-
-  // called by BluetoothRFCOMMChannelDelegate.
   void OnChannelDataReceived(IOBluetoothRFCOMMChannel* rfcomm_channel,
                              void* data,
                              size_t length);
-
-  // called by BluetoothRFCOMMChannelDelegate.
   void OnChannelWriteComplete(IOBluetoothRFCOMMChannel* rfcomm_channel,
                               void* refcon,
                               IOReturn status);
@@ -83,9 +68,7 @@
   virtual ~BluetoothSocketMac();
 
  private:
-  BluetoothSocketMac(
-      const scoped_refptr<base::SequencedTaskRunner>& ui_task_runner,
-      IOBluetoothSDPServiceRecord* record);
+  BluetoothSocketMac(IOBluetoothSDPServiceRecord* record);
 
   struct SendRequest {
     SendRequest();
@@ -116,22 +99,27 @@
 
   bool connecting() const { return connect_callbacks_; }
 
-  // Used to verify all methods are called on the same thread.
+  // Used to verify that all methods are called on the same thread.
   base::ThreadChecker thread_checker_;
-  // Task Runner for the UI thread, used to post tasks.
-  scoped_refptr<base::SequencedTaskRunner> ui_task_runner_;
-  // (retained) The Bluetooth Service definition.
-  IOBluetoothSDPServiceRecord* record_;
-  // (weak) The RFCOMM channel delegate. Released when the channel is closed.
-  BluetoothRFCOMMChannelDelegate* delegate_;
-  // (retained) The IOBluetooth RFCOMM channel used to issue commands.
-  IOBluetoothRFCOMMChannel* rfcomm_channel_;
+
+  // The Bluetooth Service definition.
+  base::scoped_nsobject<IOBluetoothSDPServiceRecord> record_;
+
+  // The RFCOMM channel delegate.
+  base::scoped_nsobject<BluetoothRFCOMMChannelDelegate> delegate_;
+
+  // The IOBluetooth RFCOMM channel used to issue commands.
+  base::scoped_nsobject<IOBluetoothRFCOMMChannel> rfcomm_channel_;
+
   // Connection callbacks -- when a pending async connection is active.
   scoped_ptr<ConnectCallbacks> connect_callbacks_;
+
   // Packets received while there is no pending "receive" callback.
   std::queue<scoped_refptr<net::IOBufferWithSize> > receive_queue_;
+
   // Receive callbacks -- when a receive call is active.
   scoped_ptr<ReceiveCallbacks> receive_callbacks_;
+
   // Send queue -- one entry per pending send operation.
   std::queue<linked_ptr<SendRequest> > send_queue_;
 
diff --git a/device/bluetooth/bluetooth_socket_mac.mm b/device/bluetooth/bluetooth_socket_mac.mm
index cee05a5..2eb4ff4 100644
--- a/device/bluetooth/bluetooth_socket_mac.mm
+++ b/device/bluetooth/bluetooth_socket_mac.mm
@@ -15,6 +15,7 @@
 #include "base/basictypes.h"
 #include "base/callback_helpers.h"
 #include "base/memory/ref_counted.h"
+#include "base/numerics/safe_conversions.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/threading/thread_restrictions.h"
@@ -107,45 +108,34 @@
 
 // static
 scoped_refptr<BluetoothSocketMac> BluetoothSocketMac::CreateBluetoothSocket(
-    const scoped_refptr<base::SequencedTaskRunner>& ui_task_runner,
     IOBluetoothSDPServiceRecord* record) {
-  return new BluetoothSocketMac(ui_task_runner, record);
+  return new BluetoothSocketMac(record);
 }
 
 BluetoothSocketMac::BluetoothSocketMac(
-    const scoped_refptr<base::SequencedTaskRunner>& ui_task_runner,
     IOBluetoothSDPServiceRecord* record)
-    : ui_task_runner_(ui_task_runner),
-      record_(record),
-      delegate_([[BluetoothRFCOMMChannelDelegate alloc] initWithSocket:this]),
-      rfcomm_channel_(nil) {
+    : record_([record retain]),
+      delegate_([[BluetoothRFCOMMChannelDelegate alloc] initWithSocket:this]) {
   DCHECK(thread_checker_.CalledOnValidThread());
-  DCHECK(ui_task_runner_->RunsTasksOnCurrentThread());
-  [record_ retain];
 }
 
 BluetoothSocketMac::~BluetoothSocketMac() {
   DCHECK(thread_checker_.CalledOnValidThread());
-  DCHECK(ui_task_runner_->RunsTasksOnCurrentThread());
   ReleaseChannel();
-  [delegate_ release];
-  [record_ release];
 }
 
 void BluetoothSocketMac::ReleaseChannel() {
   DCHECK(thread_checker_.CalledOnValidThread());
-  DCHECK(ui_task_runner_->RunsTasksOnCurrentThread());
-  if (rfcomm_channel_ != nil) {
+  if (rfcomm_channel_) {
     [rfcomm_channel_ setDelegate:nil];
     [rfcomm_channel_ closeChannel];
-    [rfcomm_channel_ release];
-    rfcomm_channel_ = nil;
+    rfcomm_channel_.reset();
   }
 
   // Closing the channel above prevents the callback delegate from being called
   // so it is now safe to release all callback state.
-  connect_callbacks_.reset(NULL);
-  receive_callbacks_.reset(NULL);
+  connect_callbacks_.reset();
+  receive_callbacks_.reset();
   empty_queue(receive_queue_);
   empty_queue(send_queue_);
 }
@@ -154,14 +144,13 @@
     const base::Closure& success_callback,
     const ErrorCompletionCallback& error_callback) {
   DCHECK(thread_checker_.CalledOnValidThread());
-  DCHECK(ui_task_runner_->RunsTasksOnCurrentThread());
 
   if (connecting()) {
     error_callback.Run(kSocketConnecting);
     return;
   }
 
-  if (rfcomm_channel_ != nil) {
+  if (rfcomm_channel_) {
     error_callback.Run(kSocketAlreadyConnected);
     return;
   }
@@ -181,9 +170,9 @@
                                  delegate:delegate_];
   if (status != kIOReturnSuccess) {
     std::stringstream error;
-    error << std::string("Failed to connect bluetooth socket (")
+    error << "Failed to connect bluetooth socket ("
           << base::SysNSStringToUTF8([device addressString]) << "): (" << status
-          << std::string(")");
+          << ")";
     error_callback.Run(error.str());
     return;
   }
@@ -191,7 +180,7 @@
   connect_callbacks_.reset(new ConnectCallbacks());
   connect_callbacks_->success_callback = success_callback;
   connect_callbacks_->error_callback = error_callback;
-  rfcomm_channel_ = rfcomm_channel;
+  rfcomm_channel_.reset(rfcomm_channel);
   [rfcomm_channel_ setDelegate:delegate_];
 }
 
@@ -199,8 +188,7 @@
     IOBluetoothRFCOMMChannel* rfcomm_channel,
     IOReturn status) {
   DCHECK(thread_checker_.CalledOnValidThread());
-  DCHECK(ui_task_runner_->RunsTasksOnCurrentThread());
-  DCHECK(rfcomm_channel_ == rfcomm_channel);
+  DCHECK_EQ(rfcomm_channel_, rfcomm_channel);
   DCHECK(connecting());
 
   scoped_ptr<ConnectCallbacks> temp = connect_callbacks_.Pass();
@@ -219,32 +207,29 @@
 
 void BluetoothSocketMac::Close() {
   DCHECK(thread_checker_.CalledOnValidThread());
-  DCHECK(ui_task_runner_->RunsTasksOnCurrentThread());
 
   ReleaseChannel();
 }
 
 void BluetoothSocketMac::Disconnect(const base::Closure& callback) {
   DCHECK(thread_checker_.CalledOnValidThread());
-  DCHECK(ui_task_runner_->RunsTasksOnCurrentThread());
 
   ReleaseChannel();
   callback.Run();
 }
 
 void BluetoothSocketMac::Receive(
-    int count,
+    int /* buffer_size */,
     const ReceiveCompletionCallback& success_callback,
     const ReceiveErrorCompletionCallback& error_callback) {
   DCHECK(thread_checker_.CalledOnValidThread());
-  DCHECK(ui_task_runner_->RunsTasksOnCurrentThread());
 
   if (connecting()) {
     error_callback.Run(BluetoothSocket::kSystemError, kSocketConnecting);
     return;
   }
 
-  if (rfcomm_channel_ == nil) {
+  if (!rfcomm_channel_) {
     error_callback.Run(BluetoothSocket::kDisconnected, kSocketNotConnected);
     return;
   }
@@ -274,12 +259,10 @@
     void* data,
     size_t length) {
   DCHECK(thread_checker_.CalledOnValidThread());
-  DCHECK(ui_task_runner_->RunsTasksOnCurrentThread());
-  DCHECK(rfcomm_channel_ == rfcomm_channel);
+  DCHECK_EQ(rfcomm_channel_, rfcomm_channel);
   DCHECK(!connecting());
-  CHECK_LT(length, static_cast<size_t>(std::numeric_limits<int>::max()));
 
-  int data_size = static_cast<int>(length);
+  int data_size = base::checked_cast<int>(length);
   scoped_refptr<net::IOBufferWithSize> buffer(
       new net::IOBufferWithSize(data_size));
   memcpy(buffer->data(), data, buffer->size());
@@ -300,14 +283,13 @@
                               const SendCompletionCallback& success_callback,
                               const ErrorCompletionCallback& error_callback) {
   DCHECK(thread_checker_.CalledOnValidThread());
-  DCHECK(ui_task_runner_->RunsTasksOnCurrentThread());
 
   if (connecting()) {
     error_callback.Run(kSocketConnecting);
     return;
   }
 
-  if (rfcomm_channel_ == nil) {
+  if (!rfcomm_channel_) {
     error_callback.Run(kSocketNotConnected);
     return;
   }
@@ -360,13 +342,12 @@
     void* refcon,
     IOReturn status) {
   DCHECK(thread_checker_.CalledOnValidThread());
-  DCHECK(ui_task_runner_->RunsTasksOnCurrentThread());
 
   // Note: We use "CHECK" below to ensure we never run into unforeseen
   // occurrences of asynchronous callbacks, which could lead to data
   // corruption.
-  CHECK(rfcomm_channel_ == rfcomm_channel);
-  CHECK(static_cast<SendRequest*>(refcon) == send_queue_.front().get());
+  CHECK_EQ(rfcomm_channel_, rfcomm_channel);
+  CHECK_EQ(static_cast<SendRequest*>(refcon), send_queue_.front().get());
 
   // Keep a local linked_ptr to avoid releasing the request too early if we end
   // up removing it from the queue.
@@ -403,8 +384,7 @@
 void BluetoothSocketMac::OnChannelClosed(
     IOBluetoothRFCOMMChannel* rfcomm_channel) {
   DCHECK(thread_checker_.CalledOnValidThread());
-  DCHECK(ui_task_runner_->RunsTasksOnCurrentThread());
-  DCHECK(rfcomm_channel_ == rfcomm_channel);
+  DCHECK_EQ(rfcomm_channel_, rfcomm_channel);
 
   if (receive_callbacks_) {
     scoped_ptr<ReceiveCallbacks> temp = receive_callbacks_.Pass();
diff --git a/device/bluetooth/bluetooth_socket_win.cc b/device/bluetooth/bluetooth_socket_win.cc
index 9b1e953..044fa98 100644
--- a/device/bluetooth/bluetooth_socket_win.cc
+++ b/device/bluetooth/bluetooth_socket_win.cc
@@ -124,7 +124,7 @@
 }
 
 void BluetoothSocketWin::Receive(
-    int count,
+    int buffer_size,
     const ReceiveCompletionCallback& success_callback,
     const ReceiveErrorCompletionCallback& error_callback) {
   DCHECK(ui_task_runner_->RunsTasksOnCurrentThread());
@@ -132,7 +132,7 @@
       FROM_HERE,
       base::Bind(&BluetoothSocketWin::DoReceive,
                  this,
-                 count,
+                 buffer_size,
                  base::Bind(&BluetoothSocketWin::PostReceiveCompletion,
                             this,
                             success_callback),
@@ -238,7 +238,7 @@
 }
 
 void BluetoothSocketWin::DoReceive(
-    int count,
+    int buffer_size,
     const ReceiveCompletionCallback& success_callback,
     const ReceiveErrorCompletionCallback& error_callback) {
   DCHECK(socket_thread_->task_runner()->RunsTasksOnCurrentThread());
@@ -256,7 +256,8 @@
     return;
   }
 
-  scoped_refptr<net::IOBufferWithSize> buffer(new net::IOBufferWithSize(count));
+  scoped_refptr<net::IOBufferWithSize> buffer(
+      new net::IOBufferWithSize(buffer_size));
   int read_result =
       tcp_socket_->Read(buffer.get(),
                         buffer->size(),
diff --git a/device/bluetooth/bluetooth_socket_win.h b/device/bluetooth/bluetooth_socket_win.h
index 94f3df2..4b09832 100644
--- a/device/bluetooth/bluetooth_socket_win.h
+++ b/device/bluetooth/bluetooth_socket_win.h
@@ -52,7 +52,7 @@
 
   virtual void Disconnect(const base::Closure& callback) OVERRIDE;
 
-  virtual void Receive(int count,
+  virtual void Receive(int buffer_size,
                        const ReceiveCompletionCallback& success_callback,
                        const ReceiveErrorCompletionCallback& error_callback)
       OVERRIDE;
@@ -81,7 +81,7 @@
   void DoConnect(const base::Closure& success_callback,
                  const ErrorCompletionCallback& error_callback);
   void DoDisconnect(const base::Closure& callback);
-  void DoReceive(int count,
+  void DoReceive(int buffer_size,
                  const ReceiveCompletionCallback& success_callback,
                  const ReceiveErrorCompletionCallback& error_callback);
   void DoSend(scoped_refptr<net::IOBuffer> buffer,
diff --git a/device/hid/input_service_linux.cc b/device/hid/input_service_linux.cc
index 7552824..299d7a4 100644
--- a/device/hid/input_service_linux.cc
+++ b/device/hid/input_service_linux.cc
@@ -15,8 +15,11 @@
 
 namespace {
 
-const char kHidSubsystem[] = "hid";
-const char kInputSubsystem[] = "input";
+const char kSubsystemHid[] = "hid";
+const char kSubsystemInput[] = "input";
+const char kTypeBluetooth[] = "bluetooth";
+const char kTypeUsb[] = "usb";
+const char kTypeSerio[] = "serio";
 const char kIdInputAccelerometer[] = "ID_INPUT_ACCELEROMETER";
 const char kIdInputJoystick[] = "ID_INPUT_JOYSTICK";
 const char kIdInputKey[] = "ID_INPUT_KEY";
@@ -44,75 +47,47 @@
   return (value != 0);
 }
 
-}  // namespace
+InputServiceLinux::InputDeviceInfo::Type GetDeviceType(udev_device* device) {
+  if (udev_device_get_parent_with_subsystem_devtype(
+          device, kTypeBluetooth, NULL)) {
+    return InputServiceLinux::InputDeviceInfo::TYPE_BLUETOOTH;
+  }
+  if (udev_device_get_parent_with_subsystem_devtype(device, kTypeUsb, NULL))
+    return InputServiceLinux::InputDeviceInfo::TYPE_USB;
+  if (udev_device_get_parent_with_subsystem_devtype(device, kTypeSerio, NULL))
+    return InputServiceLinux::InputDeviceInfo::TYPE_SERIO;
+  return InputServiceLinux::InputDeviceInfo::TYPE_UNKNOWN;
+}
 
-InputServiceLinux::InputDeviceInfo::InputDeviceInfo()
-    : subsystem(SUBSYSTEM_UNKNOWN),
-      is_accelerometer(false),
-      is_joystick(false),
-      is_key(false),
-      is_keyboard(false),
-      is_mouse(false),
-      is_tablet(false),
-      is_touchpad(false),
-      is_touchscreen(false) {}
+class InputServiceLinuxImpl : public InputServiceLinux,
+                              public DeviceMonitorLinux::Observer {
+ public:
+  // Implements DeviceMonitorLinux::Observer:
+  virtual void OnDeviceAdded(udev_device* device) OVERRIDE;
+  virtual void OnDeviceRemoved(udev_device* device) OVERRIDE;
 
-InputServiceLinux::InputServiceLinux() {
-  base::ThreadRestrictions::AssertIOAllowed();
-  base::MessageLoop::current()->AddDestructionObserver(this);
+ private:
+  friend class InputServiceLinux;
+
+  InputServiceLinuxImpl();
+  virtual ~InputServiceLinuxImpl();
+
+  DISALLOW_COPY_AND_ASSIGN(InputServiceLinuxImpl);
+};
+
+InputServiceLinuxImpl::InputServiceLinuxImpl() {
   DeviceMonitorLinux::GetInstance()->AddObserver(this);
-  DeviceMonitorLinux::GetInstance()->Enumerate(
-      base::Bind(&InputServiceLinux::OnDeviceAdded, base::Unretained(this)));
+  DeviceMonitorLinux::GetInstance()->Enumerate(base::Bind(
+      &InputServiceLinuxImpl::OnDeviceAdded, base::Unretained(this)));
 }
 
-// static
-InputServiceLinux* InputServiceLinux::GetInstance() {
-  if (!HasInstance())
-    g_input_service_linux_ptr.Get().reset(new InputServiceLinux());
-  return g_input_service_linux_ptr.Get().get();
+InputServiceLinuxImpl::~InputServiceLinuxImpl() {
+  if (DeviceMonitorLinux::HasInstance())
+    DeviceMonitorLinux::GetInstance()->RemoveObserver(this);
 }
 
-// static
-bool InputServiceLinux::HasInstance() {
-  return g_input_service_linux_ptr.Get().get();
-}
-
-void InputServiceLinux::AddObserver(Observer* observer) {
-  DCHECK(thread_checker_.CalledOnValidThread());
-  if (observer)
-    observers_.AddObserver(observer);
-}
-
-void InputServiceLinux::RemoveObserver(Observer* observer) {
-  DCHECK(thread_checker_.CalledOnValidThread());
-  if (observer)
-    observers_.RemoveObserver(observer);
-}
-
-void InputServiceLinux::GetDevices(std::vector<InputDeviceInfo>* devices) {
-  DCHECK(thread_checker_.CalledOnValidThread());
-  for (DeviceMap::iterator it = devices_.begin(), ie = devices_.end(); it != ie;
-       ++it)
-    devices->push_back(it->second);
-}
-
-bool InputServiceLinux::GetDeviceInfo(const std::string& id,
-                                      InputDeviceInfo* info) const {
-  DCHECK(thread_checker_.CalledOnValidThread());
-  DeviceMap::const_iterator it = devices_.find(id);
-  if (it == devices_.end())
-    return false;
-  *info = it->second;
-  return true;
-}
-
-void InputServiceLinux::WillDestroyCurrentMessageLoop() {
-  DCHECK(thread_checker_.CalledOnValidThread());
-  g_input_service_linux_ptr.Get().reset(NULL);
-}
-
-void InputServiceLinux::OnDeviceAdded(udev_device* device) {
-  DCHECK(thread_checker_.CalledOnValidThread());
+void InputServiceLinuxImpl::OnDeviceAdded(udev_device* device) {
+  DCHECK(CalledOnValidThread());
   if (!device)
     return;
   const char* path = udev_device_get_syspath(device);
@@ -129,13 +104,15 @@
   const char* subsystem = udev_device_get_subsystem(device);
   if (!subsystem)
     return;
-  else if (strcmp(subsystem, kHidSubsystem) == 0)
+  else if (strcmp(subsystem, kSubsystemHid) == 0)
     info.subsystem = InputServiceLinux::InputDeviceInfo::SUBSYSTEM_HID;
-  else if (strcmp(subsystem, kInputSubsystem) == 0)
+  else if (strcmp(subsystem, kSubsystemInput) == 0)
     info.subsystem = InputServiceLinux::InputDeviceInfo::SUBSYSTEM_INPUT;
   else
     return;
 
+  info.type = GetDeviceType(device);
+
   info.is_accelerometer = GetBoolProperty(device, kIdInputAccelerometer);
   info.is_joystick = GetBoolProperty(device, kIdInputJoystick);
   info.is_key = GetBoolProperty(device, kIdInputKey);
@@ -145,26 +122,107 @@
   info.is_touchpad = GetBoolProperty(device, kIdInputTouchpad);
   info.is_touchscreen = GetBoolProperty(device, kIdInputTouchscreen);
 
-  devices_[info.id] = info;
-  FOR_EACH_OBSERVER(Observer, observers_, OnInputDeviceAdded(info));
+  AddDevice(info);
 }
 
-void InputServiceLinux::OnDeviceRemoved(udev_device* device) {
-  DCHECK(thread_checker_.CalledOnValidThread());
+void InputServiceLinuxImpl::OnDeviceRemoved(udev_device* device) {
+  DCHECK(CalledOnValidThread());
   if (!device)
     return;
   const char* path = udev_device_get_syspath(device);
   if (!path)
     return;
-  devices_.erase(path);
-  FOR_EACH_OBSERVER(Observer, observers_, OnInputDeviceRemoved(path));
+  RemoveDevice(path);
+}
+
+}  // namespace
+
+InputServiceLinux::InputDeviceInfo::InputDeviceInfo()
+    : subsystem(SUBSYSTEM_UNKNOWN),
+      type(TYPE_UNKNOWN),
+      is_accelerometer(false),
+      is_joystick(false),
+      is_key(false),
+      is_keyboard(false),
+      is_mouse(false),
+      is_tablet(false),
+      is_touchpad(false),
+      is_touchscreen(false) {}
+
+InputServiceLinux::InputServiceLinux() {
+  base::ThreadRestrictions::AssertIOAllowed();
+  base::MessageLoop::current()->AddDestructionObserver(this);
 }
 
 InputServiceLinux::~InputServiceLinux() {
-  DCHECK(thread_checker_.CalledOnValidThread());
+  DCHECK(CalledOnValidThread());
   base::MessageLoop::current()->RemoveDestructionObserver(this);
-  if (DeviceMonitorLinux::HasInstance())
-    DeviceMonitorLinux::GetInstance()->RemoveObserver(this);
+}
+
+// static
+InputServiceLinux* InputServiceLinux::GetInstance() {
+  if (!HasInstance())
+    g_input_service_linux_ptr.Get().reset(new InputServiceLinuxImpl());
+  return g_input_service_linux_ptr.Get().get();
+}
+
+// static
+bool InputServiceLinux::HasInstance() {
+  return g_input_service_linux_ptr.Get().get();
+}
+
+// static
+void InputServiceLinux::SetForTesting(InputServiceLinux* service) {
+  g_input_service_linux_ptr.Get().reset(service);
+}
+
+void InputServiceLinux::AddObserver(Observer* observer) {
+  DCHECK(CalledOnValidThread());
+  if (observer)
+    observers_.AddObserver(observer);
+}
+
+void InputServiceLinux::RemoveObserver(Observer* observer) {
+  DCHECK(CalledOnValidThread());
+  if (observer)
+    observers_.RemoveObserver(observer);
+}
+
+void InputServiceLinux::GetDevices(std::vector<InputDeviceInfo>* devices) {
+  DCHECK(CalledOnValidThread());
+  for (DeviceMap::iterator it = devices_.begin(), ie = devices_.end(); it != ie;
+       ++it) {
+    devices->push_back(it->second);
+  }
+}
+
+bool InputServiceLinux::GetDeviceInfo(const std::string& id,
+                                      InputDeviceInfo* info) const {
+  DCHECK(CalledOnValidThread());
+  DeviceMap::const_iterator it = devices_.find(id);
+  if (it == devices_.end())
+    return false;
+  *info = it->second;
+  return true;
+}
+
+void InputServiceLinux::WillDestroyCurrentMessageLoop() {
+  DCHECK(CalledOnValidThread());
+  g_input_service_linux_ptr.Get().reset(NULL);
+}
+
+void InputServiceLinux::AddDevice(const InputDeviceInfo& info) {
+  devices_[info.id] = info;
+  FOR_EACH_OBSERVER(Observer, observers_, OnInputDeviceAdded(info));
+}
+
+void InputServiceLinux::RemoveDevice(const std::string& id) {
+  devices_.erase(id);
+  FOR_EACH_OBSERVER(Observer, observers_, OnInputDeviceRemoved(id));
+}
+
+bool InputServiceLinux::CalledOnValidThread() const {
+  return thread_checker_.CalledOnValidThread();
 }
 
 }  // namespace device
diff --git a/device/hid/input_service_linux.h b/device/hid/input_service_linux.h
index 48584f4..dc43dba 100644
--- a/device/hid/input_service_linux.h
+++ b/device/hid/input_service_linux.h
@@ -22,17 +22,18 @@
 // This class provides information and notifications about
 // connected/disconnected input/HID devices. This class is *NOT*
 // thread-safe and all methods must be called from the FILE thread.
-class InputServiceLinux : public base::MessageLoop::DestructionObserver,
-                          public DeviceMonitorLinux::Observer {
+class InputServiceLinux : public base::MessageLoop::DestructionObserver {
  public:
   struct InputDeviceInfo {
     enum Subsystem { SUBSYSTEM_HID, SUBSYSTEM_INPUT, SUBSYSTEM_UNKNOWN };
+    enum Type { TYPE_BLUETOOTH, TYPE_USB, TYPE_SERIO, TYPE_UNKNOWN };
 
     InputDeviceInfo();
 
     std::string id;
     std::string name;
     Subsystem subsystem;
+    Type type;
 
     bool is_accelerometer : 1;
     bool is_joystick : 1;
@@ -55,6 +56,7 @@
 
   static InputServiceLinux* GetInstance();
   static bool HasInstance();
+  static void SetForTesting(InputServiceLinux* service);
 
   void AddObserver(Observer* observer);
   void RemoveObserver(Observer* observer);
@@ -70,15 +72,18 @@
   // Implements base::MessageLoop::DestructionObserver
   virtual void WillDestroyCurrentMessageLoop() OVERRIDE;
 
-  // Implements DeviceMonitorLinux::Observer:
-  virtual void OnDeviceAdded(udev_device* device) OVERRIDE;
-  virtual void OnDeviceRemoved(udev_device* device) OVERRIDE;
+ protected:
+  virtual ~InputServiceLinux();
+
+  void AddDevice(const InputDeviceInfo& info);
+  void RemoveDevice(const std::string& id);
+
+  bool CalledOnValidThread() const;
 
  private:
   friend struct base::DefaultDeleter<InputServiceLinux>;
 
   typedef base::hash_map<std::string, InputDeviceInfo> DeviceMap;
-  virtual ~InputServiceLinux();
 
   DeviceMap devices_;
   ObserverList<Observer> observers_;
diff --git a/device/usb/BUILD.gn b/device/usb/BUILD.gn
index 428a717..e3427b2 100644
--- a/device/usb/BUILD.gn
+++ b/device/usb/BUILD.gn
@@ -28,7 +28,5 @@
   ]
 
   # Only the device_usb target can depend on us.
-  # TODO(brettw) uncomment this when visibility is implemented in the pushed
-  # GN binary.
-  #visibility = [ ":usb" ]
+  visibility = [ ":usb" ]
 }
diff --git a/extensions/DEPS b/extensions/DEPS
index dc4fb7a..00641a3 100644
--- a/extensions/DEPS
+++ b/extensions/DEPS
@@ -14,10 +14,8 @@
   "!chrome/browser/chrome_notification_types.h",
   "!chrome/renderer/extensions/dispatcher.h",
   "!chrome/renderer/extensions/extension_helper.h",
-  "!grit/chromium_strings.h",
   "!grit/common_resources.h",
   "!grit/extensions_api_resources.h",
-  "!grit/generated_resources.h",
   "!grit/theme_resources.h",
 ]
 
diff --git a/extensions/browser/DEPS b/extensions/browser/DEPS
index 480ea10..dfc7fe1 100644
--- a/extensions/browser/DEPS
+++ b/extensions/browser/DEPS
@@ -2,6 +2,7 @@
   "+components/keyed_service",
   "+components/user_prefs",
   "+content/public/browser",
+  "+grit/extensions_strings.h",
   "+net",
   "+sync",
   "+third_party/leveldatabase",
diff --git a/extensions/browser/admin_policy.cc b/extensions/browser/admin_policy.cc
index e2ecce2..574deff 100644
--- a/extensions/browser/admin_policy.cc
+++ b/extensions/browser/admin_policy.cc
@@ -7,7 +7,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "extensions/common/extension.h"
 #include "extensions/common/manifest.h"
-#include "grit/generated_resources.h"
+#include "grit/extensions_strings.h"
 #include "ui/base/l10n/l10n_util.h"
 
 namespace {
diff --git a/extensions/browser/api/sockets_tcp/tcp_socket_event_dispatcher.cc b/extensions/browser/api/sockets_tcp/tcp_socket_event_dispatcher.cc
index 92e58da..7bdbfeb 100644
--- a/extensions/browser/api/sockets_tcp/tcp_socket_event_dispatcher.cc
+++ b/extensions/browser/api/sockets_tcp/tcp_socket_event_dispatcher.cc
@@ -189,9 +189,9 @@
   if (!extensions::ExtensionsBrowserClient::Get()->IsValidContext(context))
     return;
 
-  EventRouter* router = ExtensionSystem::Get(context)->event_router();
-  if (router)
-    router->DispatchEventToExtension(extension_id, event.Pass());
+  EventRouter* event_router = EventRouter::Get(context);
+  if (event_router)
+    event_router->DispatchEventToExtension(extension_id, event.Pass());
 }
 
 }  // namespace core_api
diff --git a/extensions/browser/api/sockets_tcp_server/tcp_server_socket_event_dispatcher.cc b/extensions/browser/api/sockets_tcp_server/tcp_server_socket_event_dispatcher.cc
index 2818857..bb57a5b 100644
--- a/extensions/browser/api/sockets_tcp_server/tcp_server_socket_event_dispatcher.cc
+++ b/extensions/browser/api/sockets_tcp_server/tcp_server_socket_event_dispatcher.cc
@@ -6,7 +6,6 @@
 
 #include "extensions/browser/api/socket/tcp_socket.h"
 #include "extensions/browser/event_router.h"
-#include "extensions/browser/extension_system.h"
 #include "extensions/browser/extensions_browser_client.h"
 #include "net/base/net_errors.h"
 
@@ -190,7 +189,7 @@
       reinterpret_cast<content::BrowserContext*>(browser_context_id);
   if (!extensions::ExtensionsBrowserClient::Get()->IsValidContext(context))
     return;
-  EventRouter* router = ExtensionSystem::Get(context)->event_router();
+  EventRouter* router = EventRouter::Get(context);
   if (router)
     router->DispatchEventToExtension(extension_id, event.Pass());
 }
diff --git a/extensions/browser/api/sockets_udp/udp_socket_event_dispatcher.cc b/extensions/browser/api/sockets_udp/udp_socket_event_dispatcher.cc
index 09fd3f4..c457ec8 100644
--- a/extensions/browser/api/sockets_udp/udp_socket_event_dispatcher.cc
+++ b/extensions/browser/api/sockets_udp/udp_socket_event_dispatcher.cc
@@ -6,7 +6,6 @@
 
 #include "extensions/browser/api/socket/udp_socket.h"
 #include "extensions/browser/event_router.h"
-#include "extensions/browser/extension_system.h"
 #include "extensions/browser/extensions_browser_client.h"
 #include "net/base/net_errors.h"
 
@@ -174,7 +173,7 @@
       reinterpret_cast<content::BrowserContext*>(browser_context_id);
   if (!extensions::ExtensionsBrowserClient::Get()->IsValidContext(context))
     return;
-  EventRouter* router = ExtensionSystem::Get(context)->event_router();
+  EventRouter* router = EventRouter::Get(context);
   if (router)
     router->DispatchEventToExtension(extension_id, event.Pass());
 }
diff --git a/extensions/browser/api/storage/storage_frontend.cc b/extensions/browser/api/storage/storage_frontend.cc
index 836858d..c9a6ac2 100644
--- a/extensions/browser/api/storage/storage_frontend.cc
+++ b/extensions/browser/api/storage/storage_frontend.cc
@@ -16,7 +16,6 @@
 #include "extensions/browser/api/storage/local_value_store_cache.h"
 #include "extensions/browser/event_router.h"
 #include "extensions/browser/extension_registry.h"
-#include "extensions/browser/extension_system.h"
 #include "extensions/common/api/storage.h"
 
 using content::BrowserContext;
@@ -49,8 +48,8 @@
         settings_namespace)));
     scoped_ptr<Event> event(new Event(
         core_api::storage::OnChanged::kEventName, args.Pass()));
-    ExtensionSystem::Get(browser_context_)->event_router()->
-        DispatchEventToExtension(extension_id, event.Pass());
+    EventRouter::Get(browser_context_)
+        ->DispatchEventToExtension(extension_id, event.Pass());
   }
 
  private:
diff --git a/extensions/browser/event_router.cc b/extensions/browser/event_router.cc
index 4a165e3..8a6a0a3 100644
--- a/extensions/browser/event_router.cc
+++ b/extensions/browser/event_router.cc
@@ -173,7 +173,8 @@
                  content::NotificationService::AllSources());
   registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_ENABLED,
                  content::Source<BrowserContext>(browser_context_));
-  registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
+  registrar_.Add(this,
+                 chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
                  content::Source<BrowserContext>(browser_context_));
   registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
                  content::Source<BrowserContext>(browser_context_));
@@ -615,8 +616,7 @@
       reinterpret_cast<BrowserContext*>(browser_context_id);
   if (!ExtensionsBrowserClient::Get()->IsValidContext(browser_context))
     return;
-  ExtensionSystem* extension_system = ExtensionSystem::Get(browser_context);
-  EventRouter* event_router = extension_system->event_router();
+  EventRouter* event_router = EventRouter::Get(browser_context);
   if (!event_router)
     return;
   const Extension* extension =
@@ -690,7 +690,7 @@
       }
       break;
     }
-    case chrome::NOTIFICATION_EXTENSION_LOADED: {
+    case chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED: {
       // Add all registered lazy listeners to our cache.
       const Extension* extension =
           content::Details<const Extension>(details).ptr();
diff --git a/extensions/browser/extension_error.h b/extensions/browser/extension_error.h
index e905549..e3a249d 100644
--- a/extensions/browser/extension_error.h
+++ b/extensions/browser/extension_error.h
@@ -25,7 +25,8 @@
  public:
   enum Type {
     MANIFEST_ERROR,
-    RUNTIME_ERROR
+    RUNTIME_ERROR,
+    NUM_ERROR_TYPES  // Put new values above this.
   };
 
   virtual ~ExtensionError();
diff --git a/extensions/browser/extension_function_histogram_value.h b/extensions/browser/extension_function_histogram_value.h
index bc111c4..084c2b9 100644
--- a/extensions/browser/extension_function_histogram_value.h
+++ b/extensions/browser/extension_function_histogram_value.h
@@ -781,6 +781,19 @@
   WEBCAMPRIVATE_SET,
   WEBCAMPRIVATE_RESET,
   WEBCAMPRIVATE_GET,
+  BLUETOOTHLOWENERGY_GETSERVICE,
+  BLUETOOTHLOWENERGY_GETSERVICES,
+  BLUETOOTHLOWENERGY_GETCHARACTERISTIC,
+  BLUETOOTHLOWENERGY_GETCHARACTERISTICS,
+  BLUETOOTHLOWENERGY_GETINCLUDEDSERVICES,
+  BLUETOOTHLOWENERGY_GETDESCRIPTOR,
+  BLUETOOTHLOWENERGY_GETDESCRIPTORS,
+  BLUETOOTHLOWENERGY_READCHARACTERISTICVALUE,
+  BLUETOOTHLOWENERGY_WRITECHARACTERISTICVALUE,
+  BLUETOOTHLOWENERGY_READDESCRIPTORVALUE,
+  BLUETOOTHLOWENERGY_WRITEDESCRIPTORVALUE,
+  BOOKMARKMANAGERPRIVATE_CREATEWITHMETAINFO,
+  BOOKMARKMANAGERPRIVATE_UPDATEMETAINFO,
   // Last entry: Add new entries above and ensure to update
   // tools/metrics/histograms/histograms/histograms.xml.
   ENUM_BOUNDARY
diff --git a/extensions/browser/extension_host.cc b/extensions/browser/extension_host.cc
index 0eac1fb..e1de908 100644
--- a/extensions/browser/extension_host.cc
+++ b/extensions/browser/extension_host.cc
@@ -342,7 +342,7 @@
 }
 
 void ExtensionHost::OnEventAck() {
-  EventRouter* router = ExtensionSystem::Get(browser_context_)->event_router();
+  EventRouter* router = EventRouter::Get(browser_context_);
   if (router)
     router->OnEventAck(browser_context_, extension_id());
 }
@@ -427,4 +427,9 @@
       web_contents, request, callback, extension());
 }
 
+bool ExtensionHost::IsNeverVisible(content::WebContents* web_contents) {
+  ViewType view_type = extensions::GetViewType(web_contents);
+  return view_type == extensions::VIEW_TYPE_EXTENSION_BACKGROUND_PAGE;
+}
+
 }  // namespace extensions
diff --git a/extensions/browser/extension_host.h b/extensions/browser/extension_host.h
index e10a98f..24bd9ba 100644
--- a/extensions/browser/extension_host.h
+++ b/extensions/browser/extension_host.h
@@ -101,6 +101,7 @@
       content::WebContents* web_contents,
       const content::MediaStreamRequest& request,
       const content::MediaResponseCallback& callback) OVERRIDE;
+  virtual bool IsNeverVisible(content::WebContents* web_contents) OVERRIDE;
 
   // content::NotificationObserver
   virtual void Observe(int type,
diff --git a/extensions/browser/extension_message_filter.cc b/extensions/browser/extension_message_filter.cc
index 3a06493..2fd31bf 100644
--- a/extensions/browser/extension_message_filter.cc
+++ b/extensions/browser/extension_message_filter.cc
@@ -88,7 +88,7 @@
   RenderProcessHost* process = RenderProcessHost::FromID(render_process_id_);
   if (!process)
     return;
-  EventRouter* router = ExtensionSystem::Get(browser_context_)->event_router();
+  EventRouter* router = EventRouter::Get(browser_context_);
   if (!router)
     return;
   router->AddEventListener(event_name, process, extension_id);
@@ -100,7 +100,7 @@
   RenderProcessHost* process = RenderProcessHost::FromID(render_process_id_);
   if (!process)
     return;
-  EventRouter* router = ExtensionSystem::Get(browser_context_)->event_router();
+  EventRouter* router = EventRouter::Get(browser_context_);
   if (!router)
     return;
   router->RemoveEventListener(event_name, process, extension_id);
@@ -108,7 +108,7 @@
 
 void ExtensionMessageFilter::OnExtensionAddLazyListener(
     const std::string& extension_id, const std::string& event_name) {
-  EventRouter* router = ExtensionSystem::Get(browser_context_)->event_router();
+  EventRouter* router = EventRouter::Get(browser_context_);
   if (!router)
     return;
   router->AddLazyEventListener(event_name, extension_id);
@@ -116,7 +116,7 @@
 
 void ExtensionMessageFilter::OnExtensionRemoveLazyListener(
     const std::string& extension_id, const std::string& event_name) {
-  EventRouter* router = ExtensionSystem::Get(browser_context_)->event_router();
+  EventRouter* router = EventRouter::Get(browser_context_);
   if (!router)
     return;
   router->RemoveLazyEventListener(event_name, extension_id);
@@ -130,7 +130,7 @@
   RenderProcessHost* process = RenderProcessHost::FromID(render_process_id_);
   if (!process)
     return;
-  EventRouter* router = ExtensionSystem::Get(browser_context_)->event_router();
+  EventRouter* router = EventRouter::Get(browser_context_);
   if (!router)
     return;
   router->AddFilteredEventListener(
@@ -145,7 +145,7 @@
   RenderProcessHost* process = RenderProcessHost::FromID(render_process_id_);
   if (!process)
     return;
-  EventRouter* router = ExtensionSystem::Get(browser_context_)->event_router();
+  EventRouter* router = EventRouter::Get(browser_context_);
   if (!router)
     return;
   router->RemoveFilteredEventListener(
diff --git a/extensions/browser/extension_protocols.cc b/extensions/browser/extension_protocols.cc
index 53315cb..32b6bc0 100644
--- a/extensions/browser/extension_protocols.cc
+++ b/extensions/browser/extension_protocols.cc
@@ -18,6 +18,7 @@
 #include "base/message_loop/message_loop.h"
 #include "base/metrics/field_trial.h"
 #include "base/metrics/histogram.h"
+#include "base/metrics/sparse_histogram.h"
 #include "base/path_service.h"
 #include "base/sha1.h"
 #include "base/strings/string_number_conversions.h"
@@ -219,7 +220,11 @@
   }
 
   virtual void OnReadComplete(net::IOBuffer* buffer, int result) OVERRIDE {
-    UMA_HISTOGRAM_COUNTS("ExtensionUrlRequest.OnReadCompleteResult", result);
+    if (result >= 0)
+      UMA_HISTOGRAM_COUNTS("ExtensionUrlRequest.OnReadCompleteResult", result);
+    else
+      UMA_HISTOGRAM_SPARSE_SLOWLY("ExtensionUrlRequest.OnReadCompleteError",
+                                  -result);
     if (result > 0) {
       bytes_read_ += result;
       if (hash_.get()) {
@@ -411,17 +416,24 @@
   std::string content_security_policy;
   bool send_cors_header = false;
   bool follow_symlinks_anywhere = false;
+
   if (extension) {
     std::string resource_path = request->url().path();
-    content_security_policy =
-        extensions::CSPInfo::GetResourceContentSecurityPolicy(extension,
-                                                              resource_path);
+
+    // Use default CSP for <webview>.
+    if (!ExtensionsBrowserClient::Get()->IsWebViewRequest(request)) {
+      content_security_policy =
+          extensions::CSPInfo::GetResourceContentSecurityPolicy(extension,
+                                                                resource_path);
+    }
+
     if ((extension->manifest_version() >= 2 ||
          extensions::WebAccessibleResourcesInfo::HasWebAccessibleResources(
              extension)) &&
         extensions::WebAccessibleResourcesInfo::IsResourceWebAccessible(
-            extension, resource_path))
+            extension, resource_path)) {
       send_cors_header = true;
+    }
 
     follow_symlinks_anywhere =
         (extension->creation_flags() & Extension::FOLLOW_SYMLINKS_ANYWHERE)
diff --git a/extensions/browser/extension_registry.cc b/extensions/browser/extension_registry.cc
index 9f6b71f..ac6c274 100644
--- a/extensions/browser/extension_registry.cc
+++ b/extensions/browser/extension_registry.cc
@@ -44,11 +44,13 @@
                     OnExtensionLoaded(browser_context_, extension));
 }
 
-void ExtensionRegistry::TriggerOnUnloaded(const Extension* extension) {
+void ExtensionRegistry::TriggerOnUnloaded(
+    const Extension* extension,
+    UnloadedExtensionInfo::Reason reason) {
   DCHECK(!enabled_extensions_.Contains(extension->id()));
   FOR_EACH_OBSERVER(ExtensionRegistryObserver,
                     observers_,
-                    OnExtensionUnloaded(browser_context_, extension));
+                    OnExtensionUnloaded(browser_context_, extension, reason));
 }
 
 const Extension* ExtensionRegistry::GetExtensionById(const std::string& id,
diff --git a/extensions/browser/extension_registry.h b/extensions/browser/extension_registry.h
index 26e3015..d8df24b 100644
--- a/extensions/browser/extension_registry.h
+++ b/extensions/browser/extension_registry.h
@@ -71,7 +71,8 @@
 
   // Invokes the observer method OnExtensionUnloaded(). The extension must not
   // be enabled at the time of the call.
-  void TriggerOnUnloaded(const Extension* extension);
+  void TriggerOnUnloaded(const Extension* extension,
+                         UnloadedExtensionInfo::Reason reason);
 
   // Find an extension by ID using |include_mask| to pick the sets to search:
   //  * enabled_extensions()     --> ExtensionRegistry::ENABLED
diff --git a/extensions/browser/extension_registry_observer.h b/extensions/browser/extension_registry_observer.h
index 3b7114b..5880add 100644
--- a/extensions/browser/extension_registry_observer.h
+++ b/extensions/browser/extension_registry_observer.h
@@ -5,6 +5,8 @@
 #ifndef EXTENSIONS_BROWSER_EXTENSION_REGISTRY_OBSERVER_H_
 #define EXTENSIONS_BROWSER_EXTENSION_REGISTRY_OBSERVER_H_
 
+#include "extensions/common/extension.h"
+
 namespace content {
 class BrowserContext;
 }
@@ -12,6 +14,7 @@
 namespace extensions {
 
 class Extension;
+struct UnloadedExtensionInfo;
 
 // Observer for ExtensionRegistry. Exists in a separate header file to reduce
 // the include file burden for typical clients of ExtensionRegistry.
@@ -27,9 +30,9 @@
 
   // Called after an extension is unloaded. The extension no longer exists in
   // any of the ExtensionRegistry sets (enabled, disabled, etc.).
-  virtual void OnExtensionUnloaded(
-      content::BrowserContext* browser_context,
-      const Extension* extension) {}
+  virtual void OnExtensionUnloaded(content::BrowserContext* browser_context,
+                                   const Extension* extension,
+                                   UnloadedExtensionInfo::Reason reason) {}
 };
 
 }  // namespace extensions
diff --git a/extensions/browser/extension_registry_unittest.cc b/extensions/browser/extension_registry_unittest.cc
index 11ca3fc..f212f6c 100644
--- a/extensions/browser/extension_registry_unittest.cc
+++ b/extensions/browser/extension_registry_unittest.cc
@@ -49,7 +49,9 @@
   }
 
   virtual void OnExtensionUnloaded(content::BrowserContext* browser_context,
-                                   const Extension* extension) OVERRIDE {
+                                   const Extension* extension,
+                                   UnloadedExtensionInfo::Reason reason)
+      OVERRIDE {
     unloaded_.push_back(extension);
   }
 
@@ -225,7 +227,7 @@
   observer.Reset();
 
   registry.RemoveEnabled(extension->id());
-  registry.TriggerOnUnloaded(extension);
+  registry.TriggerOnUnloaded(extension, UnloadedExtensionInfo::REASON_DISABLE);
 
   EXPECT_TRUE(observer.loaded().empty());
   EXPECT_TRUE(HasSingleExtension(observer.unloaded(), extension.get()));
diff --git a/extensions/browser/extensions_browser_client.h b/extensions/browser/extensions_browser_client.h
index d7c02d9..e3b91b2 100644
--- a/extensions/browser/extensions_browser_client.h
+++ b/extensions/browser/extensions_browser_client.h
@@ -96,6 +96,10 @@
       const extensions::Extension* extension,
       content::BrowserContext* context) const = 0;
 
+  // Returns true if |request| corresponds to a resource request from a
+  // <webview>.
+  virtual bool IsWebViewRequest(net::URLRequest* request) const = 0;
+
   // Returns an URLRequestJob to load an extension resource from the embedder's
   // resource bundle (.pak) files. Returns NULL if the request is not for a
   // resource bundle resource or if the embedder does not support this feature.
diff --git a/extensions/browser/process_manager.cc b/extensions/browser/process_manager.cc
index f97a722..9e5f0c6 100644
--- a/extensions/browser/process_manager.cc
+++ b/extensions/browser/process_manager.cc
@@ -229,7 +229,8 @@
     weak_ptr_factory_(this) {
   registrar_.Add(this, chrome::NOTIFICATION_EXTENSIONS_READY,
                  content::Source<BrowserContext>(original_context));
-  registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
+  registrar_.Add(this,
+                 chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
                  content::Source<BrowserContext>(original_context));
   registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
                  content::Source<BrowserContext>(original_context));
@@ -650,7 +651,7 @@
       break;
     }
 
-    case chrome::NOTIFICATION_EXTENSION_LOADED: {
+    case chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED: {
       BrowserContext* context = content::Source<BrowserContext>(source).ptr();
       ExtensionSystem* system = ExtensionSystem::Get(context);
       if (system->ready().is_signaled()) {
diff --git a/extensions/browser/process_manager_unittest.cc b/extensions/browser/process_manager_unittest.cc
index c71f526..b72b112 100644
--- a/extensions/browser/process_manager_unittest.cc
+++ b/extensions/browser/process_manager_unittest.cc
@@ -80,7 +80,7 @@
                            chrome::NOTIFICATION_EXTENSIONS_READY,
                            original_context()));
   EXPECT_TRUE(IsRegistered(manager1.get(),
-                           chrome::NOTIFICATION_EXTENSION_LOADED,
+                           chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
                            original_context()));
   EXPECT_TRUE(IsRegistered(manager1.get(),
                            chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
@@ -98,7 +98,7 @@
 
   // Some notifications are observed for the original context.
   EXPECT_TRUE(IsRegistered(manager2.get(),
-                           chrome::NOTIFICATION_EXTENSION_LOADED,
+                           chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
                            original_context()));
 
   // Some notifications are observed for the incognito context.
diff --git a/extensions/browser/runtime_data.cc b/extensions/browser/runtime_data.cc
index ea5568b..8f359bc 100644
--- a/extensions/browser/runtime_data.cc
+++ b/extensions/browser/runtime_data.cc
@@ -53,9 +53,9 @@
   extension_flags_.clear();
 }
 
-void RuntimeData::OnExtensionUnloaded(
-    content::BrowserContext* browser_context,
-    const Extension* extension) {
+void RuntimeData::OnExtensionUnloaded(content::BrowserContext* browser_context,
+                                      const Extension* extension,
+                                      UnloadedExtensionInfo::Reason reason) {
   extension_flags_.erase(extension->id());
 }
 
diff --git a/extensions/browser/runtime_data.h b/extensions/browser/runtime_data.h
index 77f475b..0dd2cb3 100644
--- a/extensions/browser/runtime_data.h
+++ b/extensions/browser/runtime_data.h
@@ -53,7 +53,9 @@
 
   // ExtensionRegistryObserver overrides. Public for testing.
   virtual void OnExtensionUnloaded(content::BrowserContext* browser_context,
-                                   const Extension* extension) OVERRIDE;
+                                   const Extension* extension,
+                                   UnloadedExtensionInfo::Reason reason)
+      OVERRIDE;
 
  private:
   // Bitmasks for runtime states.
diff --git a/extensions/browser/runtime_data_unittest.cc b/extensions/browser/runtime_data_unittest.cc
index 48c1bbc..f0cbf4e 100644
--- a/extensions/browser/runtime_data_unittest.cc
+++ b/extensions/browser/runtime_data_unittest.cc
@@ -100,7 +100,8 @@
   runtime_data_.SetBackgroundPageReady(extension, true);
   ASSERT_TRUE(runtime_data_.HasExtensionForTesting(extension));
 
-  runtime_data_.OnExtensionUnloaded(NULL, extension);
+  runtime_data_.OnExtensionUnloaded(
+      NULL, extension, UnloadedExtensionInfo::REASON_DISABLE);
   EXPECT_FALSE(runtime_data_.HasExtensionForTesting(extension));
 }
 
diff --git a/extensions/browser/test_extensions_browser_client.cc b/extensions/browser/test_extensions_browser_client.cc
index 132ac19..6e919ea 100644
--- a/extensions/browser/test_extensions_browser_client.cc
+++ b/extensions/browser/test_extensions_browser_client.cc
@@ -83,6 +83,11 @@
   return false;
 }
 
+bool TestExtensionsBrowserClient::IsWebViewRequest(
+    net::URLRequest* request) const {
+  return false;
+}
+
 net::URLRequestJob*
 TestExtensionsBrowserClient::MaybeCreateResourceBundleRequestJob(
     net::URLRequest* request,
diff --git a/extensions/browser/test_extensions_browser_client.h b/extensions/browser/test_extensions_browser_client.h
index ee3a625..f7401fe 100644
--- a/extensions/browser/test_extensions_browser_client.h
+++ b/extensions/browser/test_extensions_browser_client.h
@@ -42,6 +42,7 @@
   virtual bool CanExtensionCrossIncognito(
       const extensions::Extension* extension,
       content::BrowserContext* context) const OVERRIDE;
+  virtual bool IsWebViewRequest(net::URLRequest* request) const OVERRIDE;
   virtual net::URLRequestJob* MaybeCreateResourceBundleRequestJob(
       net::URLRequest* request,
       net::NetworkDelegate* network_delegate,
diff --git a/extensions/common/DEPS b/extensions/common/DEPS
index 19732c6..1739f9d 100644
--- a/extensions/common/DEPS
+++ b/extensions/common/DEPS
@@ -1,5 +1,6 @@
 include_rules = [
   "+device/usb",
+  "+grit/extensions_strings.h",
   "+net",
   "+third_party/re2",
 ]
diff --git a/extensions/common/api/sockets/sockets_manifest_permission.cc b/extensions/common/api/sockets/sockets_manifest_permission.cc
index 6d25713..67ff99f 100644
--- a/extensions/common/api/sockets/sockets_manifest_permission.cc
+++ b/extensions/common/api/sockets/sockets_manifest_permission.cc
@@ -13,7 +13,7 @@
 #include "extensions/common/error_utils.h"
 #include "extensions/common/extension_messages.h"
 #include "extensions/common/manifest_constants.h"
-#include "grit/generated_resources.h"
+#include "grit/extensions_strings.h"
 #include "ipc/ipc_message.h"
 #include "ui/base/l10n/l10n_util.h"
 
diff --git a/extensions/common/csp_validator.cc b/extensions/common/csp_validator.cc
index c56556f..0ee0116 100644
--- a/extensions/common/csp_validator.cc
+++ b/extensions/common/csp_validator.cc
@@ -4,6 +4,8 @@
 
 #include "extensions/common/csp_validator.h"
 
+#include <vector>
+
 #include "base/strings/string_split.h"
 #include "base/strings/string_tokenizer.h"
 #include "base/strings/string_util.h"
diff --git a/extensions/common/event_filter.cc b/extensions/common/event_filter.cc
index ad954c9..ff2d1f6 100644
--- a/extensions/common/event_filter.cc
+++ b/extensions/common/event_filter.cc
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include <string>
+
 #include "extensions/common/event_filter.h"
 
 #include "components/url_matcher/url_matcher_factory.h"
diff --git a/extensions/common/event_filter_unittest.cc b/extensions/common/event_filter_unittest.cc
index f95c023..0b1bd7b 100644
--- a/extensions/common/event_filter_unittest.cc
+++ b/extensions/common/event_filter_unittest.cc
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include <string>
+
 #include "base/memory/scoped_ptr.h"
 #include "base/values.h"
 #include "extensions/common/event_filter.h"
diff --git a/extensions/common/extension.cc b/extensions/common/extension.cc
index 14f5763..39f2fb7 100644
--- a/extensions/common/extension.cc
+++ b/extensions/common/extension.cc
@@ -33,14 +33,9 @@
 #include "extensions/common/permissions/permissions_info.h"
 #include "extensions/common/switches.h"
 #include "extensions/common/url_pattern_set.h"
-#include "grit/chromium_strings.h"
 #include "net/base/filename_util.h"
 #include "url/url_util.h"
 
-#if defined(OS_WIN)
-#include "grit/generated_resources.h"
-#endif
-
 namespace extensions {
 
 namespace keys = manifest_keys;
diff --git a/extensions/common/extension.h b/extensions/common/extension.h
index c7b8458..3354fa6 100644
--- a/extensions/common/extension.h
+++ b/extensions/common/extension.h
@@ -511,6 +511,7 @@
 };
 
 struct UnloadedExtensionInfo {
+  // TODO(DHNishi): Move this enum to ExtensionRegistryObserver.
   enum Reason {
     REASON_DISABLE,    // Extension is being disabled.
     REASON_UPDATE,     // Extension is being updated to a newer version.
diff --git a/extensions/common/extension_builder.h b/extensions/common/extension_builder.h
index afb7f88..4b40178 100644
--- a/extensions/common/extension_builder.h
+++ b/extensions/common/extension_builder.h
@@ -5,6 +5,8 @@
 #ifndef EXTENSIONS_COMMON_EXTENSION_BUILDER_H_
 #define EXTENSIONS_COMMON_EXTENSION_BUILDER_H_
 
+#include <string>
+
 #include "base/files/file_path.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_ptr.h"
@@ -58,6 +60,6 @@
   std::string id_;
 };
 
-} // namespace extensions
+}  // namespace extensions
 
 #endif  // EXTENSIONS_COMMON_EXTENSION_BUILDER_H_
diff --git a/extensions/common/features/base_feature_provider_unittest.cc b/extensions/common/features/base_feature_provider_unittest.cc
index 61a5162..f856b35 100644
--- a/extensions/common/features/base_feature_provider_unittest.cc
+++ b/extensions/common/features/base_feature_provider_unittest.cc
@@ -170,29 +170,33 @@
   // Make sure both rules are applied correctly.
   {
     ScopedCurrentChannel current_channel(VersionInfo::CHANNEL_BETA);
-    EXPECT_EQ(Feature::IS_AVAILABLE, feature->IsAvailableToManifest(
-        "1",
-        Manifest::TYPE_EXTENSION,
-        Feature::UNSPECIFIED_LOCATION,
-        Feature::UNSPECIFIED_PLATFORM).result());
-    EXPECT_EQ(Feature::IS_AVAILABLE, feature->IsAvailableToManifest(
-        "2",
-        Manifest::TYPE_LEGACY_PACKAGED_APP,
-        Feature::UNSPECIFIED_LOCATION,
-        Feature::UNSPECIFIED_PLATFORM).result());
+    EXPECT_EQ(
+        Feature::IS_AVAILABLE,
+        feature->IsAvailableToManifest("1",
+                                       Manifest::TYPE_EXTENSION,
+                                       Manifest::INVALID_LOCATION,
+                                       Feature::UNSPECIFIED_PLATFORM).result());
+    EXPECT_EQ(
+        Feature::IS_AVAILABLE,
+        feature->IsAvailableToManifest("2",
+                                       Manifest::TYPE_LEGACY_PACKAGED_APP,
+                                       Manifest::INVALID_LOCATION,
+                                       Feature::UNSPECIFIED_PLATFORM).result());
   }
   {
     ScopedCurrentChannel current_channel(VersionInfo::CHANNEL_STABLE);
-    EXPECT_NE(Feature::IS_AVAILABLE, feature->IsAvailableToManifest(
-        "1",
-        Manifest::TYPE_EXTENSION,
-        Feature::UNSPECIFIED_LOCATION,
-        Feature::UNSPECIFIED_PLATFORM).result());
-    EXPECT_NE(Feature::IS_AVAILABLE, feature->IsAvailableToManifest(
-        "2",
-        Manifest::TYPE_LEGACY_PACKAGED_APP,
-        Feature::UNSPECIFIED_LOCATION,
-        Feature::UNSPECIFIED_PLATFORM).result());
+    EXPECT_NE(
+        Feature::IS_AVAILABLE,
+        feature->IsAvailableToManifest("1",
+                                       Manifest::TYPE_EXTENSION,
+                                       Manifest::INVALID_LOCATION,
+                                       Feature::UNSPECIFIED_PLATFORM).result());
+    EXPECT_NE(
+        Feature::IS_AVAILABLE,
+        feature->IsAvailableToManifest("2",
+                                       Manifest::TYPE_LEGACY_PACKAGED_APP,
+                                       Manifest::INVALID_LOCATION,
+                                       Feature::UNSPECIFIED_PLATFORM).result());
   }
 }
 
diff --git a/extensions/common/features/complex_feature.cc b/extensions/common/features/complex_feature.cc
index aa6e71b..ae7327c 100644
--- a/extensions/common/features/complex_feature.cc
+++ b/extensions/common/features/complex_feature.cc
@@ -37,8 +37,11 @@
 }
 
 Feature::Availability ComplexFeature::IsAvailableToManifest(
-    const std::string& extension_id, Manifest::Type type, Location location,
-    int manifest_version, Platform platform) const {
+    const std::string& extension_id,
+    Manifest::Type type,
+    Manifest::Location location,
+    int manifest_version,
+    Platform platform) const {
   Feature::Availability first_availability =
       features_[0]->IsAvailableToManifest(
           extension_id, type, location, manifest_version, platform);
diff --git a/extensions/common/features/complex_feature.h b/extensions/common/features/complex_feature.h
index bdd7fcc..25f4907 100644
--- a/extensions/common/features/complex_feature.h
+++ b/extensions/common/features/complex_feature.h
@@ -27,7 +27,7 @@
   // extensions::Feature:
   virtual Availability IsAvailableToManifest(const std::string& extension_id,
                                              Manifest::Type type,
-                                             Location location,
+                                             Manifest::Location location,
                                              int manifest_version,
                                              Platform platform) const OVERRIDE;
 
diff --git a/extensions/common/features/complex_feature_unittest.cc b/extensions/common/features/complex_feature_unittest.cc
index 128ab95..0c3f2d3 100644
--- a/extensions/common/features/complex_feature_unittest.cc
+++ b/extensions/common/features/complex_feature_unittest.cc
@@ -70,33 +70,38 @@
   scoped_ptr<ComplexFeature> feature(new ComplexFeature(features.Pass()));
 
   // Test match 1st rule.
-  EXPECT_EQ(Feature::IS_AVAILABLE, feature->IsAvailableToManifest(
-      kIdFoo,
-      Manifest::TYPE_EXTENSION,
-      Feature::UNSPECIFIED_LOCATION,
-      Feature::UNSPECIFIED_PLATFORM,
-      Feature::GetCurrentPlatform()).result());
+  EXPECT_EQ(
+      Feature::IS_AVAILABLE,
+      feature->IsAvailableToManifest(kIdFoo,
+                                     Manifest::TYPE_EXTENSION,
+                                     Manifest::INVALID_LOCATION,
+                                     Feature::UNSPECIFIED_PLATFORM,
+                                     Feature::GetCurrentPlatform()).result());
 
   // Test match 2nd rule.
-  EXPECT_EQ(Feature::IS_AVAILABLE, feature->IsAvailableToManifest(
-      kIdBar,
-      Manifest::TYPE_LEGACY_PACKAGED_APP,
-      Feature::UNSPECIFIED_LOCATION,
-      Feature::UNSPECIFIED_PLATFORM,
-      Feature::GetCurrentPlatform()).result());
+  EXPECT_EQ(
+      Feature::IS_AVAILABLE,
+      feature->IsAvailableToManifest(kIdBar,
+                                     Manifest::TYPE_LEGACY_PACKAGED_APP,
+                                     Manifest::INVALID_LOCATION,
+                                     Feature::UNSPECIFIED_PLATFORM,
+                                     Feature::GetCurrentPlatform()).result());
 
   // Test whitelist with wrong extension type.
-  EXPECT_NE(Feature::IS_AVAILABLE, feature->IsAvailableToManifest(
-      kIdBar,
-      Manifest::TYPE_EXTENSION,
-      Feature::UNSPECIFIED_LOCATION,
-      Feature::UNSPECIFIED_PLATFORM,
-      Feature::GetCurrentPlatform()).result());
-  EXPECT_NE(Feature::IS_AVAILABLE, feature->IsAvailableToManifest(kIdFoo,
-      Manifest::TYPE_LEGACY_PACKAGED_APP,
-      Feature::UNSPECIFIED_LOCATION,
-      Feature::UNSPECIFIED_PLATFORM,
-      Feature::GetCurrentPlatform()).result());
+  EXPECT_NE(
+      Feature::IS_AVAILABLE,
+      feature->IsAvailableToManifest(kIdBar,
+                                     Manifest::TYPE_EXTENSION,
+                                     Manifest::INVALID_LOCATION,
+                                     Feature::UNSPECIFIED_PLATFORM,
+                                     Feature::GetCurrentPlatform()).result());
+  EXPECT_NE(
+      Feature::IS_AVAILABLE,
+      feature->IsAvailableToManifest(kIdFoo,
+                                     Manifest::TYPE_LEGACY_PACKAGED_APP,
+                                     Manifest::INVALID_LOCATION,
+                                     Feature::UNSPECIFIED_PLATFORM,
+                                     Feature::GetCurrentPlatform()).result());
 }
 
 TEST_F(ExtensionComplexFeatureTest, MultipleRulesChannels) {
@@ -126,34 +131,37 @@
   // Test match 1st rule.
   {
     ScopedCurrentChannel current_channel(VersionInfo::CHANNEL_UNKNOWN);
-    EXPECT_EQ(Feature::IS_AVAILABLE, feature->IsAvailableToManifest(
-        "1",
-        Manifest::TYPE_EXTENSION,
-        Feature::UNSPECIFIED_LOCATION,
-        Feature::UNSPECIFIED_PLATFORM,
-        Feature::GetCurrentPlatform()).result());
+    EXPECT_EQ(
+        Feature::IS_AVAILABLE,
+        feature->IsAvailableToManifest("1",
+                                       Manifest::TYPE_EXTENSION,
+                                       Manifest::INVALID_LOCATION,
+                                       Feature::UNSPECIFIED_PLATFORM,
+                                       Feature::GetCurrentPlatform()).result());
   }
 
   // Test match 2nd rule.
   {
     ScopedCurrentChannel current_channel(VersionInfo::CHANNEL_BETA);
-    EXPECT_EQ(Feature::IS_AVAILABLE, feature->IsAvailableToManifest(
-        "2",
-        Manifest::TYPE_LEGACY_PACKAGED_APP,
-        Feature::UNSPECIFIED_LOCATION,
-        Feature::UNSPECIFIED_PLATFORM,
-        Feature::GetCurrentPlatform()).result());
+    EXPECT_EQ(
+        Feature::IS_AVAILABLE,
+        feature->IsAvailableToManifest("2",
+                                       Manifest::TYPE_LEGACY_PACKAGED_APP,
+                                       Manifest::INVALID_LOCATION,
+                                       Feature::UNSPECIFIED_PLATFORM,
+                                       Feature::GetCurrentPlatform()).result());
   }
 
   // Test feature not available to extensions above channel unknown.
   {
     ScopedCurrentChannel current_channel(VersionInfo::CHANNEL_BETA);
-    EXPECT_NE(Feature::IS_AVAILABLE, feature->IsAvailableToManifest(
-        "1",
-        Manifest::TYPE_EXTENSION,
-        Feature::UNSPECIFIED_LOCATION,
-        Feature::UNSPECIFIED_PLATFORM,
-        Feature::GetCurrentPlatform()).result());
+    EXPECT_NE(
+        Feature::IS_AVAILABLE,
+        feature->IsAvailableToManifest("1",
+                                       Manifest::TYPE_EXTENSION,
+                                       Manifest::INVALID_LOCATION,
+                                       Feature::UNSPECIFIED_PLATFORM,
+                                       Feature::GetCurrentPlatform()).result());
   }
 }
 
diff --git a/extensions/common/features/feature.cc b/extensions/common/features/feature.cc
index 60f7f88..e06a44a 100644
--- a/extensions/common/features/feature.cc
+++ b/extensions/common/features/feature.cc
@@ -10,6 +10,7 @@
 #include "base/lazy_instance.h"
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
+#include "extensions/common/extension.h"
 
 namespace extensions {
 
@@ -29,19 +30,19 @@
 }
 
 // static
-Feature::Location Feature::ConvertLocation(Manifest::Location location) {
-  if (location == Manifest::COMPONENT)
-    return COMPONENT_LOCATION;
-  else
-    return UNSPECIFIED_LOCATION;
-}
-
-// static
 Feature::Availability Feature::CreateAvailability(AvailabilityResult result,
                                                   const std::string& message) {
   return Availability(result, message);
 }
 
+Feature::Availability Feature::IsAvailableToExtension(
+    const Extension* extension) {
+  return IsAvailableToManifest(extension->id(),
+                               extension->GetType(),
+                               extension->location(),
+                               extension->manifest_version());
+}
+
 Feature::Feature() : no_parent_(false) {}
 
 Feature::~Feature() {}
diff --git a/extensions/common/features/feature.h b/extensions/common/features/feature.h
index 8afc15d..595f22f 100644
--- a/extensions/common/features/feature.h
+++ b/extensions/common/features/feature.h
@@ -46,12 +46,6 @@
     BLESSED_WEB_PAGE_CONTEXT,
   };
 
-  // The location required of extensions the feature is supported in.
-  enum Location {
-    UNSPECIFIED_LOCATION,
-    COMPONENT_LOCATION
-  };
-
   // The platforms the feature is supported in.
   enum Platform {
     UNSPECIFIED_PLATFORM,
@@ -101,6 +95,8 @@
   virtual ~Feature();
 
   // Used by ChromeV8Context until the feature system is fully functional.
+  // TODO(kalman): This is no longer used by ChromeV8Context, so what is the
+  // comment trying to say?
   static Availability CreateAvailability(AvailabilityResult result,
                                          const std::string& message);
 
@@ -112,9 +108,6 @@
   // Gets the platform the code is currently running on.
   static Platform GetCurrentPlatform();
 
-  // Gets the Feature::Location value for the specified Manifest::Location.
-  static Location ConvertLocation(Manifest::Location extension_location);
-
   virtual std::set<Context>* GetContexts() = 0;
 
   // Tests whether this is an internal API or not.
@@ -127,17 +120,20 @@
   // manifest.
   Availability IsAvailableToManifest(const std::string& extension_id,
                                      Manifest::Type type,
-                                     Location location,
+                                     Manifest::Location location,
                                      int manifest_version) const {
     return IsAvailableToManifest(extension_id, type, location, manifest_version,
                                  GetCurrentPlatform());
   }
   virtual Availability IsAvailableToManifest(const std::string& extension_id,
                                              Manifest::Type type,
-                                             Location location,
+                                             Manifest::Location location,
                                              int manifest_version,
                                              Platform platform) const = 0;
 
+  // Returns true if the feature is available to |extension|.
+  Availability IsAvailableToExtension(const Extension* extension);
+
   // Returns true if the feature is available to be used in the specified
   // extension and context.
   Availability IsAvailableToContext(const Extension* extension,
diff --git a/extensions/common/features/simple_feature.cc b/extensions/common/features/simple_feature.cc
index ebb9cb2..8ef18f8 100644
--- a/extensions/common/features/simple_feature.cc
+++ b/extensions/common/features/simple_feature.cc
@@ -8,6 +8,7 @@
 #include <vector>
 
 #include "base/command_line.h"
+#include "base/debug/alias.h"
 #include "base/lazy_instance.h"
 #include "base/sha1.h"
 #include "base/strings/string_number_conversions.h"
@@ -34,7 +35,8 @@
     contexts["web_page"] = Feature::WEB_PAGE_CONTEXT;
     contexts["blessed_web_page"] = Feature::BLESSED_WEB_PAGE_CONTEXT;
 
-    locations["component"] = Feature::COMPONENT_LOCATION;
+    locations["component"] = SimpleFeature::COMPONENT_LOCATION;
+    locations["policy"] = SimpleFeature::POLICY_LOCATION;
 
     platforms["chromeos"] = Feature::CHROMEOS_PLATFORM;
     platforms["linux"] = Feature::LINUX_PLATFORM;
@@ -44,7 +46,7 @@
 
   std::map<std::string, Manifest::Type> extension_types;
   std::map<std::string, Feature::Context> contexts;
-  std::map<std::string, Feature::Location> locations;
+  std::map<std::string, SimpleFeature::Location> locations;
   std::map<std::string, Feature::Platform> platforms;
 };
 
@@ -73,7 +75,14 @@
                const std::map<std::string, T>& mapping) {
   typename std::map<std::string, T>::const_iterator iter =
       mapping.find(string_value);
-  CHECK(iter != mapping.end()) << string_value;
+  if (iter == mapping.end()) {
+    // For http://crbug.com/365192.
+    char minidump[256];
+    base::debug::Alias(&minidump);
+    base::snprintf(minidump, arraysize(minidump),
+        "e::simple_feature.cc:%d:\"%s\"", __LINE__, string_value.c_str());
+    CHECK(false) << string_value;
+  }
   *enum_value = iter->second;
 }
 
@@ -264,7 +273,7 @@
 Feature::Availability SimpleFeature::IsAvailableToManifest(
     const std::string& extension_id,
     Manifest::Type type,
-    Location location,
+    Manifest::Location location,
     int manifest_version,
     Platform platform) const {
   // Check extension type first to avoid granting platform app permissions
@@ -279,7 +288,8 @@
   }
 
   // Component extensions can access any feature.
-  if (location == COMPONENT_LOCATION)
+  // TODO(kalman/asargent): Should this match EXTERNAL_COMPONENT too?
+  if (location == Manifest::COMPONENT)
     return CreateAvailability(IS_AVAILABLE, type);
 
   if (!whitelist_.empty()) {
@@ -298,7 +308,7 @@
     }
   }
 
-  if (location_ != UNSPECIFIED_LOCATION && location_ != location)
+  if (!MatchesManifestLocation(location))
     return CreateAvailability(INVALID_LOCATION, type);
 
   if (!platforms_.empty() &&
@@ -329,12 +339,11 @@
     const GURL& url,
     SimpleFeature::Platform platform) const {
   if (extension) {
-    Availability result = IsAvailableToManifest(
-        extension->id(),
-        extension->GetType(),
-        ConvertLocation(extension->location()),
-        extension->manifest_version(),
-        platform);
+    Availability result = IsAvailableToManifest(extension->id(),
+                                                extension->GetType(),
+                                                extension->location(),
+                                                extension->manifest_version(),
+                                                platform);
     if (!result.is_available())
       return result;
   }
@@ -479,4 +488,20 @@
   return false;
 }
 
+bool SimpleFeature::MatchesManifestLocation(
+    Manifest::Location manifest_location) const {
+  switch (location_) {
+    case SimpleFeature::UNSPECIFIED_LOCATION:
+      return true;
+    case SimpleFeature::COMPONENT_LOCATION:
+      // TODO(kalman/asargent): Should this include EXTERNAL_COMPONENT too?
+      return manifest_location == Manifest::COMPONENT;
+    case SimpleFeature::POLICY_LOCATION:
+      return manifest_location == Manifest::EXTERNAL_POLICY ||
+             manifest_location == Manifest::EXTERNAL_POLICY_DOWNLOAD;
+  }
+  NOTREACHED();
+  return false;
+}
+
 }  // namespace extensions
diff --git a/extensions/common/features/simple_feature.h b/extensions/common/features/simple_feature.h
index e3884e0..0eb1d4e 100644
--- a/extensions/common/features/simple_feature.h
+++ b/extensions/common/features/simple_feature.h
@@ -27,6 +27,32 @@
   SimpleFeature();
   virtual ~SimpleFeature();
 
+  // Similar to Manifest::Location, these are the classes of locations
+  // supported in feature files; "component" implies
+  // COMPONENT/EXTERNAL_COMPONENT manifest location types, etc.
+  //
+  // This is only public for testing. Production code should never access it,
+  // nor should it really have any reason to access the SimpleFeature class
+  // directly, it should be dealing with the Feature interface.
+  enum Location {
+    UNSPECIFIED_LOCATION,
+    COMPONENT_LOCATION,
+    POLICY_LOCATION,
+  };
+
+  // Accessors defined for testing. See comment above about not directly using
+  // SimpleFeature in production code.
+  Location location() const { return location_; }
+  void set_location(Location location) { location_ = location; }
+  int min_manifest_version() const { return min_manifest_version_; }
+  void set_min_manifest_version(int min_manifest_version) {
+    min_manifest_version_ = min_manifest_version;
+  }
+  int max_manifest_version() const { return max_manifest_version_; }
+  void set_max_manifest_version(int max_manifest_version) {
+    max_manifest_version_ = max_manifest_version;
+  }
+
   std::set<std::string>* whitelist() { return &whitelist_; }
   std::set<Manifest::Type>* extension_types() { return &extension_types_; }
 
@@ -39,21 +65,8 @@
   // the error found, or an empty string on success.
   virtual std::string Parse(const base::DictionaryValue* value);
 
-  Location location() const { return location_; }
-  void set_location(Location location) { location_ = location; }
-
   std::set<Platform>* platforms() { return &platforms_; }
 
-  int min_manifest_version() const { return min_manifest_version_; }
-  void set_min_manifest_version(int min_manifest_version) {
-    min_manifest_version_ = min_manifest_version;
-  }
-
-  int max_manifest_version() const { return max_manifest_version_; }
-  void set_max_manifest_version(int max_manifest_version) {
-    max_manifest_version_ = max_manifest_version;
-  }
-
   Availability IsAvailableToContext(const Extension* extension,
                                     Context context) const {
     return IsAvailableToContext(extension, context, GURL());
@@ -72,7 +85,7 @@
   // extension::Feature:
   virtual Availability IsAvailableToManifest(const std::string& extension_id,
                                              Manifest::Type type,
-                                             Location location,
+                                             Manifest::Location location,
                                              int manifest_version,
                                              Platform platform) const OVERRIDE;
 
@@ -105,6 +118,8 @@
                                   Context context) const;
 
  private:
+  bool MatchesManifestLocation(Manifest::Location manifest_location) const;
+
   // For clarity and consistency, we handle the default value of each of these
   // members the same way: it matches everything. It is up to the higher level
   // code that reads Features out of static data to validate that data and set
@@ -113,7 +128,7 @@
   std::set<Manifest::Type> extension_types_;
   std::set<Context> contexts_;
   URLPatternSet matches_;
-  Location location_;  // we only care about component/not-component now
+  Location location_;
   std::set<Platform> platforms_;
   int min_manifest_version_;
   int max_manifest_version_;
@@ -122,7 +137,6 @@
   typedef std::vector<linked_ptr<SimpleFeatureFilter> > FilterList;
   FilterList filters_;
 
-  FRIEND_TEST_ALL_PREFIXES(ExtensionSimpleFeatureTest, Context);
   DISALLOW_COPY_AND_ASSIGN(SimpleFeature);
 };
 
diff --git a/extensions/common/features/simple_feature_filter.cc b/extensions/common/features/simple_feature_filter.cc
index 330c9b3..77343f1 100644
--- a/extensions/common/features/simple_feature_filter.cc
+++ b/extensions/common/features/simple_feature_filter.cc
@@ -28,7 +28,7 @@
 Feature::Availability SimpleFeatureFilter::IsAvailableToManifest(
     const std::string& extension_id,
     Manifest::Type type,
-    Feature::Location location,
+    Manifest::Location location,
     int manifest_version,
     Feature::Platform platform) const {
   return Feature::CreateAvailability(Feature::IS_AVAILABLE, std::string());
diff --git a/extensions/common/features/simple_feature_filter.h b/extensions/common/features/simple_feature_filter.h
index 59e8f44..c325250 100644
--- a/extensions/common/features/simple_feature_filter.h
+++ b/extensions/common/features/simple_feature_filter.h
@@ -47,7 +47,7 @@
   virtual Feature::Availability IsAvailableToManifest(
       const std::string& extension_id,
       Manifest::Type type,
-      Feature::Location location,
+      Manifest::Location location,
       int manifest_version,
       Feature::Platform platform) const;
 
diff --git a/extensions/common/features/simple_feature_unittest.cc b/extensions/common/features/simple_feature_unittest.cc
index aa84bf8..ddcac9a 100644
--- a/extensions/common/features/simple_feature_unittest.cc
+++ b/extensions/common/features/simple_feature_unittest.cc
@@ -18,51 +18,60 @@
 using extensions::ScopedCurrentChannel;
 using extensions::SimpleFeature;
 
+namespace extensions {
+
 namespace {
 
 struct IsAvailableTestData {
   std::string extension_id;
   Manifest::Type extension_type;
-  Feature::Location location;
+  Manifest::Location location;
   Feature::Platform platform;
   int manifest_version;
   Feature::AvailabilityResult expected_result;
 };
 
+}  // namespace
+
 class ExtensionSimpleFeatureTest : public testing::Test {
  protected:
   ExtensionSimpleFeatureTest()
       : current_channel_(VersionInfo::CHANNEL_UNKNOWN) {}
   virtual ~ExtensionSimpleFeatureTest() {}
 
+  bool LocationIsAvailable(SimpleFeature::Location feature_location,
+                           Manifest::Location manifest_location) {
+    SimpleFeature feature;
+    feature.set_location(feature_location);
+    Feature::AvailabilityResult availability_result =
+        feature.IsAvailableToManifest(std::string(),
+                                      Manifest::TYPE_UNKNOWN,
+                                      manifest_location,
+                                      -1,
+                                      Feature::UNSPECIFIED_PLATFORM).result();
+    return availability_result == Feature::IS_AVAILABLE;
+  }
+
  private:
   ScopedCurrentChannel current_channel_;
 };
 
 TEST_F(ExtensionSimpleFeatureTest, IsAvailableNullCase) {
   const IsAvailableTestData tests[] = {
-    { "", Manifest::TYPE_UNKNOWN,
-      Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1,
-      Feature::IS_AVAILABLE },
-    { "random-extension", Manifest::TYPE_UNKNOWN,
-      Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1,
-      Feature::IS_AVAILABLE },
-    { "", Manifest::TYPE_LEGACY_PACKAGED_APP,
-      Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1,
-      Feature::IS_AVAILABLE },
-    { "", Manifest::TYPE_UNKNOWN,
-      Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1,
-      Feature::IS_AVAILABLE },
-    { "", Manifest::TYPE_UNKNOWN,
-      Feature::COMPONENT_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1,
-      Feature::IS_AVAILABLE },
-    { "", Manifest::TYPE_UNKNOWN,
-      Feature::UNSPECIFIED_LOCATION, Feature::CHROMEOS_PLATFORM, -1,
-      Feature::IS_AVAILABLE },
-    { "", Manifest::TYPE_UNKNOWN,
-      Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, 25,
-      Feature::IS_AVAILABLE }
-  };
+      {"", Manifest::TYPE_UNKNOWN, Manifest::INVALID_LOCATION,
+       Feature::UNSPECIFIED_PLATFORM, -1, Feature::IS_AVAILABLE},
+      {"random-extension", Manifest::TYPE_UNKNOWN, Manifest::INVALID_LOCATION,
+       Feature::UNSPECIFIED_PLATFORM, -1, Feature::IS_AVAILABLE},
+      {"", Manifest::TYPE_LEGACY_PACKAGED_APP, Manifest::INVALID_LOCATION,
+       Feature::UNSPECIFIED_PLATFORM, -1, Feature::IS_AVAILABLE},
+      {"", Manifest::TYPE_UNKNOWN, Manifest::INVALID_LOCATION,
+       Feature::UNSPECIFIED_PLATFORM, -1, Feature::IS_AVAILABLE},
+      {"", Manifest::TYPE_UNKNOWN, Manifest::COMPONENT,
+       Feature::UNSPECIFIED_PLATFORM, -1, Feature::IS_AVAILABLE},
+      {"", Manifest::TYPE_UNKNOWN, Manifest::INVALID_LOCATION,
+       Feature::CHROMEOS_PLATFORM, -1, Feature::IS_AVAILABLE},
+      {"", Manifest::TYPE_UNKNOWN, Manifest::INVALID_LOCATION,
+       Feature::UNSPECIFIED_PLATFORM, 25, Feature::IS_AVAILABLE}};
 
   SimpleFeature feature;
   for (size_t i = 0; i < arraysize(tests); ++i) {
@@ -84,29 +93,44 @@
   feature.whitelist()->insert(kIdFoo);
   feature.whitelist()->insert(kIdBar);
 
-  EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest(
-      kIdFoo, Manifest::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1,
-      Feature::UNSPECIFIED_PLATFORM).result());
-  EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest(
-      kIdBar, Manifest::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1,
-      Feature::UNSPECIFIED_PLATFORM).result());
+  EXPECT_EQ(
+      Feature::IS_AVAILABLE,
+      feature.IsAvailableToManifest(kIdFoo,
+                                    Manifest::TYPE_UNKNOWN,
+                                    Manifest::INVALID_LOCATION,
+                                    -1,
+                                    Feature::UNSPECIFIED_PLATFORM).result());
+  EXPECT_EQ(
+      Feature::IS_AVAILABLE,
+      feature.IsAvailableToManifest(kIdBar,
+                                    Manifest::TYPE_UNKNOWN,
+                                    Manifest::INVALID_LOCATION,
+                                    -1,
+                                    Feature::UNSPECIFIED_PLATFORM).result());
 
-  EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailableToManifest(
-      kIdBaz, Manifest::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1,
-      Feature::UNSPECIFIED_PLATFORM).result());
+  EXPECT_EQ(
+      Feature::NOT_FOUND_IN_WHITELIST,
+      feature.IsAvailableToManifest(kIdBaz,
+                                    Manifest::TYPE_UNKNOWN,
+                                    Manifest::INVALID_LOCATION,
+                                    -1,
+                                    Feature::UNSPECIFIED_PLATFORM).result());
   EXPECT_EQ(
       Feature::NOT_FOUND_IN_WHITELIST,
       feature.IsAvailableToManifest(std::string(),
                                     Manifest::TYPE_UNKNOWN,
-                                    Feature::UNSPECIFIED_LOCATION,
+                                    Manifest::INVALID_LOCATION,
                                     -1,
                                     Feature::UNSPECIFIED_PLATFORM).result());
 
   feature.extension_types()->insert(Manifest::TYPE_LEGACY_PACKAGED_APP);
-  EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailableToManifest(
-      kIdBaz, Manifest::TYPE_LEGACY_PACKAGED_APP,
-      Feature::UNSPECIFIED_LOCATION, -1,
-      Feature::UNSPECIFIED_PLATFORM).result());
+  EXPECT_EQ(
+      Feature::NOT_FOUND_IN_WHITELIST,
+      feature.IsAvailableToManifest(kIdBaz,
+                                    Manifest::TYPE_LEGACY_PACKAGED_APP,
+                                    Manifest::INVALID_LOCATION,
+                                    -1,
+                                    Feature::UNSPECIFIED_PLATFORM).result());
 }
 
 TEST_F(ExtensionSimpleFeatureTest, HashedIdWhitelist) {
@@ -118,21 +142,34 @@
 
   feature.whitelist()->insert(kIdFooHashed);
 
-  EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest(
-      kIdFoo, Manifest::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1,
-      Feature::UNSPECIFIED_PLATFORM).result());
-  EXPECT_NE(Feature::IS_AVAILABLE, feature.IsAvailableToManifest(
-      kIdFooHashed, Manifest::TYPE_UNKNOWN,
-      Feature::UNSPECIFIED_LOCATION, -1,
-      Feature::UNSPECIFIED_PLATFORM).result());
-  EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailableToManifest(
-      "slightlytoooolongforanextensionid", Manifest::TYPE_UNKNOWN,
-      Feature::UNSPECIFIED_LOCATION, -1,
-      Feature::UNSPECIFIED_PLATFORM).result());
-  EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailableToManifest(
-      "tooshortforanextensionid", Manifest::TYPE_UNKNOWN,
-      Feature::UNSPECIFIED_LOCATION, -1,
-      Feature::UNSPECIFIED_PLATFORM).result());
+  EXPECT_EQ(
+      Feature::IS_AVAILABLE,
+      feature.IsAvailableToManifest(kIdFoo,
+                                    Manifest::TYPE_UNKNOWN,
+                                    Manifest::INVALID_LOCATION,
+                                    -1,
+                                    Feature::UNSPECIFIED_PLATFORM).result());
+  EXPECT_NE(
+      Feature::IS_AVAILABLE,
+      feature.IsAvailableToManifest(kIdFooHashed,
+                                    Manifest::TYPE_UNKNOWN,
+                                    Manifest::INVALID_LOCATION,
+                                    -1,
+                                    Feature::UNSPECIFIED_PLATFORM).result());
+  EXPECT_EQ(
+      Feature::NOT_FOUND_IN_WHITELIST,
+      feature.IsAvailableToManifest("slightlytoooolongforanextensionid",
+                                    Manifest::TYPE_UNKNOWN,
+                                    Manifest::INVALID_LOCATION,
+                                    -1,
+                                    Feature::UNSPECIFIED_PLATFORM).result());
+  EXPECT_EQ(
+      Feature::NOT_FOUND_IN_WHITELIST,
+      feature.IsAvailableToManifest("tooshortforanextensionid",
+                                    Manifest::TYPE_UNKNOWN,
+                                    Manifest::INVALID_LOCATION,
+                                    -1,
+                                    Feature::UNSPECIFIED_PLATFORM).result());
 }
 
 TEST_F(ExtensionSimpleFeatureTest, PackageType) {
@@ -144,14 +181,14 @@
       Feature::IS_AVAILABLE,
       feature.IsAvailableToManifest(std::string(),
                                     Manifest::TYPE_EXTENSION,
-                                    Feature::UNSPECIFIED_LOCATION,
+                                    Manifest::INVALID_LOCATION,
                                     -1,
                                     Feature::UNSPECIFIED_PLATFORM).result());
   EXPECT_EQ(
       Feature::IS_AVAILABLE,
       feature.IsAvailableToManifest(std::string(),
                                     Manifest::TYPE_LEGACY_PACKAGED_APP,
-                                    Feature::UNSPECIFIED_LOCATION,
+                                    Manifest::INVALID_LOCATION,
                                     -1,
                                     Feature::UNSPECIFIED_PLATFORM).result());
 
@@ -159,14 +196,14 @@
       Feature::INVALID_TYPE,
       feature.IsAvailableToManifest(std::string(),
                                     Manifest::TYPE_UNKNOWN,
-                                    Feature::UNSPECIFIED_LOCATION,
+                                    Manifest::INVALID_LOCATION,
                                     -1,
                                     Feature::UNSPECIFIED_PLATFORM).result());
   EXPECT_EQ(
       Feature::INVALID_TYPE,
       feature.IsAvailableToManifest(std::string(),
                                     Manifest::TYPE_THEME,
-                                    Feature::UNSPECIFIED_LOCATION,
+                                    Manifest::INVALID_LOCATION,
                                     -1,
                                     Feature::UNSPECIFIED_PLATFORM).result());
 }
@@ -239,11 +276,11 @@
 
   feature.GetContexts()->clear();
   feature.GetContexts()->insert(Feature::BLESSED_EXTENSION_CONTEXT);
-  feature.set_location(Feature::COMPONENT_LOCATION);
+  feature.set_location(SimpleFeature::COMPONENT_LOCATION);
   EXPECT_EQ(Feature::INVALID_LOCATION, feature.IsAvailableToContext(
       extension.get(), Feature::BLESSED_EXTENSION_CONTEXT,
       Feature::CHROMEOS_PLATFORM).result());
-  feature.set_location(Feature::UNSPECIFIED_LOCATION);
+  feature.set_location(SimpleFeature::UNSPECIFIED_LOCATION);
 
   EXPECT_EQ(Feature::INVALID_PLATFORM, feature.IsAvailableToContext(
       extension.get(), Feature::BLESSED_EXTENSION_CONTEXT,
@@ -263,35 +300,39 @@
 }
 
 TEST_F(ExtensionSimpleFeatureTest, Location) {
-  SimpleFeature feature;
+  // Component extensions can access any location.
+  EXPECT_TRUE(LocationIsAvailable(SimpleFeature::COMPONENT_LOCATION,
+                                  Manifest::COMPONENT));
+  EXPECT_TRUE(
+      LocationIsAvailable(SimpleFeature::POLICY_LOCATION, Manifest::COMPONENT));
+  EXPECT_TRUE(LocationIsAvailable(SimpleFeature::UNSPECIFIED_LOCATION,
+                                  Manifest::COMPONENT));
 
-  // If the feature specifies "component" as its location, then only component
-  // extensions can access it.
-  feature.set_location(Feature::COMPONENT_LOCATION);
-  EXPECT_EQ(
-      Feature::IS_AVAILABLE,
-      feature.IsAvailableToManifest(std::string(),
-                                    Manifest::TYPE_UNKNOWN,
-                                    Feature::COMPONENT_LOCATION,
-                                    -1,
-                                    Feature::UNSPECIFIED_PLATFORM).result());
-  EXPECT_EQ(
-      Feature::INVALID_LOCATION,
-      feature.IsAvailableToManifest(std::string(),
-                                    Manifest::TYPE_UNKNOWN,
-                                    Feature::UNSPECIFIED_LOCATION,
-                                    -1,
-                                    Feature::UNSPECIFIED_PLATFORM).result());
+  // Only component extensions can access the "component" location.
+  EXPECT_FALSE(LocationIsAvailable(SimpleFeature::COMPONENT_LOCATION,
+                                   Manifest::INVALID_LOCATION));
+  EXPECT_FALSE(LocationIsAvailable(SimpleFeature::COMPONENT_LOCATION,
+                                   Manifest::UNPACKED));
+  EXPECT_FALSE(LocationIsAvailable(SimpleFeature::COMPONENT_LOCATION,
+                                   Manifest::EXTERNAL_PREF_DOWNLOAD));
+  EXPECT_FALSE(LocationIsAvailable(SimpleFeature::COMPONENT_LOCATION,
+                                   Manifest::EXTERNAL_POLICY));
+  EXPECT_FALSE(LocationIsAvailable(SimpleFeature::COMPONENT_LOCATION,
+                                   Manifest::EXTERNAL_POLICY_DOWNLOAD));
 
-  // But component extensions can access anything else, whatever their location.
-  feature.set_location(Feature::UNSPECIFIED_LOCATION);
-  EXPECT_EQ(
-      Feature::IS_AVAILABLE,
-      feature.IsAvailableToManifest(std::string(),
-                                    Manifest::TYPE_UNKNOWN,
-                                    Feature::COMPONENT_LOCATION,
-                                    -1,
-                                    Feature::UNSPECIFIED_PLATFORM).result());
+  // Policy extensions can access the "policy" location.
+  EXPECT_TRUE(LocationIsAvailable(SimpleFeature::POLICY_LOCATION,
+                                  Manifest::EXTERNAL_POLICY));
+  EXPECT_TRUE(LocationIsAvailable(SimpleFeature::POLICY_LOCATION,
+                                  Manifest::EXTERNAL_POLICY_DOWNLOAD));
+
+  // Non-policy (except component) extensions cannot access policy.
+  EXPECT_FALSE(LocationIsAvailable(SimpleFeature::POLICY_LOCATION,
+                                   Manifest::INVALID_LOCATION));
+  EXPECT_FALSE(
+      LocationIsAvailable(SimpleFeature::POLICY_LOCATION, Manifest::UNPACKED));
+  EXPECT_FALSE(LocationIsAvailable(SimpleFeature::POLICY_LOCATION,
+                                   Manifest::EXTERNAL_PREF_DOWNLOAD));
 }
 
 TEST_F(ExtensionSimpleFeatureTest, Platform) {
@@ -300,14 +341,14 @@
   EXPECT_EQ(Feature::IS_AVAILABLE,
             feature.IsAvailableToManifest(std::string(),
                                           Manifest::TYPE_UNKNOWN,
-                                          Feature::UNSPECIFIED_LOCATION,
+                                          Manifest::INVALID_LOCATION,
                                           -1,
                                           Feature::CHROMEOS_PLATFORM).result());
   EXPECT_EQ(
       Feature::INVALID_PLATFORM,
       feature.IsAvailableToManifest(std::string(),
                                     Manifest::TYPE_UNKNOWN,
-                                    Feature::UNSPECIFIED_LOCATION,
+                                    Manifest::INVALID_LOCATION,
                                     -1,
                                     Feature::UNSPECIFIED_PLATFORM).result());
 }
@@ -320,14 +361,14 @@
       Feature::INVALID_MIN_MANIFEST_VERSION,
       feature.IsAvailableToManifest(std::string(),
                                     Manifest::TYPE_UNKNOWN,
-                                    Feature::UNSPECIFIED_LOCATION,
+                                    Manifest::INVALID_LOCATION,
                                     0,
                                     Feature::UNSPECIFIED_PLATFORM).result());
   EXPECT_EQ(
       Feature::INVALID_MIN_MANIFEST_VERSION,
       feature.IsAvailableToManifest(std::string(),
                                     Manifest::TYPE_UNKNOWN,
-                                    Feature::UNSPECIFIED_LOCATION,
+                                    Manifest::INVALID_LOCATION,
                                     4,
                                     Feature::UNSPECIFIED_PLATFORM).result());
 
@@ -335,14 +376,14 @@
       Feature::IS_AVAILABLE,
       feature.IsAvailableToManifest(std::string(),
                                     Manifest::TYPE_UNKNOWN,
-                                    Feature::UNSPECIFIED_LOCATION,
+                                    Manifest::INVALID_LOCATION,
                                     5,
                                     Feature::UNSPECIFIED_PLATFORM).result());
   EXPECT_EQ(
       Feature::IS_AVAILABLE,
       feature.IsAvailableToManifest(std::string(),
                                     Manifest::TYPE_UNKNOWN,
-                                    Feature::UNSPECIFIED_LOCATION,
+                                    Manifest::INVALID_LOCATION,
                                     10,
                                     Feature::UNSPECIFIED_PLATFORM).result());
 
@@ -352,21 +393,21 @@
       Feature::INVALID_MAX_MANIFEST_VERSION,
       feature.IsAvailableToManifest(std::string(),
                                     Manifest::TYPE_UNKNOWN,
-                                    Feature::UNSPECIFIED_LOCATION,
+                                    Manifest::INVALID_LOCATION,
                                     10,
                                     Feature::UNSPECIFIED_PLATFORM).result());
   EXPECT_EQ(
       Feature::IS_AVAILABLE,
       feature.IsAvailableToManifest(std::string(),
                                     Manifest::TYPE_UNKNOWN,
-                                    Feature::UNSPECIFIED_LOCATION,
+                                    Manifest::INVALID_LOCATION,
                                     8,
                                     Feature::UNSPECIFIED_PLATFORM).result());
   EXPECT_EQ(
       Feature::IS_AVAILABLE,
       feature.IsAvailableToManifest(std::string(),
                                     Manifest::TYPE_UNKNOWN,
-                                    Feature::UNSPECIFIED_LOCATION,
+                                    Manifest::INVALID_LOCATION,
                                     7,
                                     Feature::UNSPECIFIED_PLATFORM).result());
 }
@@ -378,7 +419,7 @@
   EXPECT_TRUE(feature->whitelist()->empty());
   EXPECT_TRUE(feature->extension_types()->empty());
   EXPECT_TRUE(feature->GetContexts()->empty());
-  EXPECT_EQ(Feature::UNSPECIFIED_LOCATION, feature->location());
+  EXPECT_EQ(SimpleFeature::UNSPECIFIED_LOCATION, feature->location());
   EXPECT_TRUE(feature->platforms()->empty());
   EXPECT_EQ(0, feature->min_manifest_version());
   EXPECT_EQ(0, feature->max_manifest_version());
@@ -458,7 +499,7 @@
   value->SetString("location", "component");
   scoped_ptr<SimpleFeature> feature(new SimpleFeature());
   feature->Parse(value.get());
-  EXPECT_EQ(Feature::COMPONENT_LOCATION, feature->location());
+  EXPECT_EQ(SimpleFeature::COMPONENT_LOCATION, feature->location());
 }
 
 TEST_F(ExtensionSimpleFeatureTest, ParsePlatforms) {
@@ -507,7 +548,7 @@
   feature.whitelist()->insert("foo");
   feature.extension_types()->insert(Manifest::TYPE_THEME);
   feature.GetContexts()->insert(Feature::BLESSED_EXTENSION_CONTEXT);
-  feature.set_location(Feature::COMPONENT_LOCATION);
+  feature.set_location(SimpleFeature::COMPONENT_LOCATION);
   feature.platforms()->insert(Feature::CHROMEOS_PLATFORM);
   feature.set_min_manifest_version(1);
   feature.set_max_manifest_version(2);
@@ -520,7 +561,7 @@
   EXPECT_EQ(1u, feature.extension_types()->size());
   EXPECT_EQ(1u, feature.GetContexts()->size());
   EXPECT_EQ(1u, feature.whitelist()->count("foo"));
-  EXPECT_EQ(Feature::COMPONENT_LOCATION, feature.location());
+  EXPECT_EQ(SimpleFeature::COMPONENT_LOCATION, feature.location());
   EXPECT_EQ(1u, feature.platforms()->size());
   EXPECT_EQ(1u, feature.platforms()->count(Feature::CHROMEOS_PLATFORM));
   EXPECT_EQ(1, feature.min_manifest_version());
@@ -564,12 +605,11 @@
     feature.Parse(&feature_value);
   }
 
-  return feature.IsAvailableToManifest(
-      "random-extension",
-      Manifest::TYPE_UNKNOWN,
-      Feature::UNSPECIFIED_LOCATION,
-      -1,
-      Feature::GetCurrentPlatform()).result();
+  return feature.IsAvailableToManifest("random-extension",
+                                       Manifest::TYPE_UNKNOWN,
+                                       Manifest::INVALID_LOCATION,
+                                       -1,
+                                       Feature::GetCurrentPlatform()).result();
 }
 
 TEST_F(ExtensionSimpleFeatureTest, SupportedChannel) {
@@ -634,4 +674,4 @@
       IsAvailableInChannel("trunk", VersionInfo::CHANNEL_STABLE));
 }
 
-}  // namespace
+}  // namespace extensions
diff --git a/extensions/common/file_util.cc b/extensions/common/file_util.cc
index 8453eb2..fcf704b 100644
--- a/extensions/common/file_util.cc
+++ b/extensions/common/file_util.cc
@@ -30,7 +30,7 @@
 #include "extensions/common/manifest_handler.h"
 #include "extensions/common/manifest_handlers/icons_handler.h"
 #include "extensions/common/message_bundle.h"
-#include "grit/generated_resources.h"
+#include "grit/extensions_strings.h"
 #include "net/base/escape.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "url/gurl.h"
diff --git a/extensions/common/file_util_unittest.cc b/extensions/common/file_util_unittest.cc
index 68b2e1a..9a03f9b 100644
--- a/extensions/common/file_util_unittest.cc
+++ b/extensions/common/file_util_unittest.cc
@@ -16,7 +16,7 @@
 #include "extensions/common/extension.h"
 #include "extensions/common/manifest.h"
 #include "extensions/common/manifest_constants.h"
-#include "grit/generated_resources.h"
+#include "grit/extensions_strings.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/base/l10n/l10n_util.h"
diff --git a/extensions/common/manifest.cc b/extensions/common/manifest.cc
index a02fdc3..bbf2ff8 100644
--- a/extensions/common/manifest.cc
+++ b/extensions/common/manifest.cc
@@ -159,8 +159,7 @@
 
     Feature* feature = manifest_feature_provider->GetFeature(*feature_name);
     Feature::Availability result = feature->IsAvailableToManifest(
-        extension_id_, type_, Feature::ConvertLocation(location_),
-        GetManifestVersion());
+        extension_id_, type_, location_, GetManifestVersion());
     if (!result.is_available())
       warnings->push_back(InstallWarning(result.message(), *feature_name));
   }
@@ -260,8 +259,8 @@
     return true;
 
   return feature->IsAvailableToManifest(
-      extension_id_, type_, Feature::ConvertLocation(location_),
-      GetManifestVersion()).is_available();
+                      extension_id_, type_, location_, GetManifestVersion())
+      .is_available();
 }
 
 }  // namespace extensions
diff --git a/extensions/common/manifest_handlers/background_info.cc b/extensions/common/manifest_handlers/background_info.cc
index 1c484fc5..4b2d413 100644
--- a/extensions/common/manifest_handlers/background_info.cc
+++ b/extensions/common/manifest_handlers/background_info.cc
@@ -18,7 +18,7 @@
 #include "extensions/common/permissions/api_permission_set.h"
 #include "extensions/common/permissions/permissions_data.h"
 #include "extensions/common/switches.h"
-#include "grit/generated_resources.h"
+#include "grit/extensions_strings.h"
 #include "ui/base/l10n/l10n_util.h"
 
 using base::ASCIIToUTF16;
diff --git a/extensions/common/manifest_handlers/icons_handler.cc b/extensions/common/manifest_handlers/icons_handler.cc
index 1bddabb..ebc18be 100644
--- a/extensions/common/manifest_handlers/icons_handler.cc
+++ b/extensions/common/manifest_handlers/icons_handler.cc
@@ -15,7 +15,7 @@
 #include "extensions/common/file_util.h"
 #include "extensions/common/manifest_constants.h"
 #include "extensions/common/manifest_handler_helpers.h"
-#include "grit/generated_resources.h"
+#include "grit/extensions_strings.h"
 #include "grit/theme_resources.h"
 #include "ui/base/resource/resource_bundle.h"
 #include "ui/gfx/size.h"
diff --git a/extensions/common/manifest_handlers/requirements_info.cc b/extensions/common/manifest_handlers/requirements_info.cc
index bc26170..9a2a22b 100644
--- a/extensions/common/manifest_handlers/requirements_info.cc
+++ b/extensions/common/manifest_handlers/requirements_info.cc
@@ -18,7 +18,6 @@
 
 RequirementsInfo::RequirementsInfo(const Manifest* manifest)
     : webgl(false),
-      css3d(false),
       npapi(false),
       window_shape(false) {
   // Before parsing requirements from the manifest, automatically default the
@@ -121,7 +120,8 @@
           if (feature == "webgl") {
             requirements->webgl = true;
           } else if (feature == "css3d") {
-            requirements->css3d = true;
+            // css3d is always available, so no check is needed, but no error is
+            // generated.
           } else {
             *error = ErrorUtils::FormatErrorMessageUTF16(
                 errors::kInvalidRequirement, iter.key());
diff --git a/extensions/common/manifest_handlers/requirements_info.h b/extensions/common/manifest_handlers/requirements_info.h
index f04d6c1..ccd2d31 100644
--- a/extensions/common/manifest_handlers/requirements_info.h
+++ b/extensions/common/manifest_handlers/requirements_info.h
@@ -20,7 +20,6 @@
   virtual ~RequirementsInfo();
 
   bool webgl;
-  bool css3d;
   bool npapi;
   bool window_shape;
 
diff --git a/extensions/common/message_bundle.h b/extensions/common/message_bundle.h
index e77deb3..42e8625 100644
--- a/extensions/common/message_bundle.h
+++ b/extensions/common/message_bundle.h
@@ -168,6 +168,6 @@
 // Erases the L10nMessagesMap for the given |extension_id|.
 void EraseL10nMessagesMap(const std::string& extension_id);
 
-}  // namsepace extensions
+}  // namespace extensions
 
 #endif  // EXTENSIONS_COMMON_MESSAGE_BUNDLE_H_
diff --git a/extensions/common/permissions/media_galleries_permission.cc b/extensions/common/permissions/media_galleries_permission.cc
index bac5add..df8f946 100644
--- a/extensions/common/permissions/media_galleries_permission.cc
+++ b/extensions/common/permissions/media_galleries_permission.cc
@@ -10,7 +10,7 @@
 #include "base/logging.h"
 #include "base/strings/utf_string_conversions.h"
 #include "extensions/common/permissions/permissions_info.h"
-#include "grit/generated_resources.h"
+#include "grit/extensions_strings.h"
 #include "ui/base/l10n/l10n_util.h"
 
 namespace {
diff --git a/extensions/common/permissions/permission_message_util.cc b/extensions/common/permissions/permission_message_util.cc
index 76d1c61..25006ed 100644
--- a/extensions/common/permissions/permission_message_util.cc
+++ b/extensions/common/permissions/permission_message_util.cc
@@ -10,7 +10,7 @@
 #include "extensions/common/permissions/permission_message.h"
 #include "extensions/common/permissions/permission_set.h"
 #include "extensions/common/url_pattern_set.h"
-#include "grit/generated_resources.h"
+#include "grit/extensions_strings.h"
 #include "net/base/registry_controlled_domains/registry_controlled_domain.h"
 #include "ui/base/l10n/l10n_util.h"
 
diff --git a/extensions/common/permissions/permissions_data.cc b/extensions/common/permissions/permissions_data.cc
index ca5d3ff..95dce8b 100644
--- a/extensions/common/permissions/permissions_data.cc
+++ b/extensions/common/permissions/permissions_data.cc
@@ -134,11 +134,8 @@
       continue;
     }
 
-    Feature::Availability availability = feature->IsAvailableToManifest(
-        extension->id(),
-        extension->GetType(),
-        Feature::ConvertLocation(extension->location()),
-        extension->manifest_version());
+    Feature::Availability availability =
+        feature->IsAvailableToExtension(extension);
 
     if (!availability.is_available()) {
       // Don't fail, but warn the developer that the manifest contains
diff --git a/extensions/common/permissions/permissions_data_unittest.cc b/extensions/common/permissions/permissions_data_unittest.cc
index 2ebc9ba..c159616 100644
--- a/extensions/common/permissions/permissions_data_unittest.cc
+++ b/extensions/common/permissions/permissions_data_unittest.cc
@@ -158,15 +158,15 @@
   extension = LoadManifest("permissions", "many-apis.json");
   std::vector<base::string16> warnings =
       PermissionsData::GetPermissionMessageStrings(extension.get());
-  ASSERT_EQ(6u, warnings.size());
+  // Warning for "tabs" is suppressed by "history" permission.
+  ASSERT_EQ(5u, warnings.size());
   EXPECT_EQ("Access your data on api.flickr.com",
             UTF16ToUTF8(warnings[0]));
   EXPECT_EQ("Read and modify your bookmarks", UTF16ToUTF8(warnings[1]));
   EXPECT_EQ("Detect your physical location", UTF16ToUTF8(warnings[2]));
   EXPECT_EQ("Read and modify your browsing history", UTF16ToUTF8(warnings[3]));
-  EXPECT_EQ("Access your tabs and browsing activity", UTF16ToUTF8(warnings[4]));
   EXPECT_EQ("Manage your apps, extensions, and themes",
-            UTF16ToUTF8(warnings[5]));
+            UTF16ToUTF8(warnings[4]));
 }
 
 TEST(ExtensionPermissionsTest, GetPermissionMessages_ManyHostsPermissions) {
diff --git a/extensions/common/permissions/settings_override_permission.cc b/extensions/common/permissions/settings_override_permission.cc
index 63d8848..e23bc2e 100644
--- a/extensions/common/permissions/settings_override_permission.cc
+++ b/extensions/common/permissions/settings_override_permission.cc
@@ -5,7 +5,7 @@
 #include "extensions/common/permissions/settings_override_permission.h"
 
 #include "base/strings/utf_string_conversions.h"
-#include "grit/generated_resources.h"
+#include "grit/extensions_strings.h"
 #include "ui/base/l10n/l10n_util.h"
 
 namespace extensions {
diff --git a/extensions/common/permissions/socket_permission.cc b/extensions/common/permissions/socket_permission.cc
index bc7d0c9..53c835b 100644
--- a/extensions/common/permissions/socket_permission.cc
+++ b/extensions/common/permissions/socket_permission.cc
@@ -11,7 +11,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "extensions/common/permissions/permissions_info.h"
 #include "extensions/common/permissions/set_disjunction_permission.h"
-#include "grit/generated_resources.h"
+#include "grit/extensions_strings.h"
 #include "ui/base/l10n/l10n_util.h"
 
 namespace extensions {
diff --git a/extensions/common/permissions/usb_device_permission.cc b/extensions/common/permissions/usb_device_permission.cc
index c381b89..cd035d4 100644
--- a/extensions/common/permissions/usb_device_permission.cc
+++ b/extensions/common/permissions/usb_device_permission.cc
@@ -11,7 +11,7 @@
 #include "base/strings/string16.h"
 #include "base/strings/utf_string_conversions.h"
 #include "extensions/common/permissions/permissions_info.h"
-#include "grit/generated_resources.h"
+#include "grit/extensions_strings.h"
 #include "ui/base/l10n/l10n_util.h"
 
 #if defined(ENABLE_EXTENSIONS)
diff --git a/extensions/common/view_type.cc b/extensions/common/view_type.cc
index f9c16a0..6fbfa5f 100644
--- a/extensions/common/view_type.cc
+++ b/extensions/common/view_type.cc
@@ -11,7 +11,6 @@
 const char kViewTypePopup[] = "POPUP";
 const char kViewTypePanel[] = "PANEL";
 const char kViewTypeInfobar[] = "INFOBAR";
-const char kViewTypeNotification[] = "NOTIFICATION";
 const char kViewTypeExtensionDialog[] = "EXTENSION_DIALOG";
 const char kViewTypeAppWindow[] = "APP_WINDOW";
 const char kViewTypeAll[] = "ALL";
diff --git a/extensions/common/view_type.h b/extensions/common/view_type.h
index 9d510a5..f6d2eeb 100644
--- a/extensions/common/view_type.h
+++ b/extensions/common/view_type.h
@@ -20,9 +20,6 @@
   VIEW_TYPE_EXTENSION_DIALOG,
   VIEW_TYPE_EXTENSION_INFOBAR,
   VIEW_TYPE_EXTENSION_POPUP,
-  // TODO(jam): remove this once http://crbug.com/137297 is fixed and HTML5
-  // notifications don't use WebContents.
-  VIEW_TYPE_NOTIFICATION,
   VIEW_TYPE_PANEL,
   VIEW_TYPE_TAB_CONTENTS,
   VIEW_TYPE_VIRTUAL_KEYBOARD,
@@ -36,7 +33,6 @@
 extern const char kViewTypeBackgroundPage[];
 extern const char kViewTypeExtensionDialog[];
 extern const char kViewTypeInfobar[];
-extern const char kViewTypeNotification[];
 extern const char kViewTypePanel[];
 extern const char kViewTypePopup[];
 extern const char kViewTypeTabContents[];
diff --git a/extensions/extensions.gyp b/extensions/extensions.gyp
index e16b516..4e6afb8 100644
--- a/extensions/extensions.gyp
+++ b/extensions/extensions.gyp
@@ -11,13 +11,10 @@
       'target_name': 'extensions_common',
       'type': 'static_library',
       'dependencies': [
-        'common/api/api.gyp:extensions_api',
         # TODO(benwells): figure out what to do with the api target and
         # api resources compiled into the chrome resource bundle.
         # http://crbug.com/162530
         '../chrome/chrome_resources.gyp:chrome_resources',
-        # TODO(jamescook|derat): Pull strings into extensions module.
-        '../chrome/chrome_resources.gyp:chrome_strings',
         # Need default icons in theme_resources.grd
         '../chrome/chrome_resources.gyp:theme_resources',
 
@@ -33,6 +30,8 @@
         '../ui/base/ui_base.gyp:ui_base',
         '../ui/gfx/gfx.gyp:gfx_geometry',
         '../url/url.gyp:url_lib',
+        'common/api/api.gyp:extensions_api',
+        'extensions_strings.gyp:extensions_strings',
       ],
       'include_dirs': [
         '..',
@@ -217,14 +216,13 @@
       'target_name': 'extensions_browser',
       'type': 'static_library',
       'dependencies': [
-        'extensions_common',
-        'common/api/api.gyp:extensions_api',
-        # TODO(jamescook|derat): Pull strings into extensions module.
-        '../chrome/chrome_resources.gyp:chrome_strings',
         '../components/components.gyp:keyed_service_content',
         '../content/content.gyp:content_browser',
         '../skia/skia.gyp:skia',
         '../third_party/leveldatabase/leveldatabase.gyp:leveldatabase',
+        'common/api/api.gyp:extensions_api',
+        'extensions_common',
+        'extensions_strings.gyp:extensions_strings',
       ],
       'include_dirs': [
         '..',
@@ -415,38 +413,89 @@
         '..',
       ],
       'sources': [
+        'renderer/api_definitions_natives.cc',
+        'renderer/api_definitions_natives.h',
+        'renderer/binding_generating_native_handler.cc',
+        'renderer/binding_generating_native_handler.h',
+        'renderer/blob_native_handler.cc',
+        'renderer/blob_native_handler.h',
         'renderer/console.cc',
         'renderer/console.h',
+        'renderer/content_watcher.cc',
+        'renderer/content_watcher.h',
+        'renderer/context_menus_custom_bindings.cc',
+        'renderer/context_menus_custom_bindings.h',
+        'renderer/css_native_handler.cc',
+        'renderer/css_native_handler.h',
+        'renderer/document_custom_bindings.cc',
+        'renderer/document_custom_bindings.h',
         'renderer/event_bindings.cc',
         'renderer/event_bindings.h',
+        'renderer/extensions_renderer_client.cc',
+        'renderer/extensions_renderer_client.h',
+        'renderer/extension_groups.h',
+        'renderer/file_system_natives.cc',
+        'renderer/file_system_natives.h',
+        'renderer/i18n_custom_bindings.cc',
+        'renderer/i18n_custom_bindings.h',
+        'renderer/id_generator_custom_bindings.cc',
+        'renderer/id_generator_custom_bindings.h',
+        'renderer/logging_native_handler.cc',
+        'renderer/logging_native_handler.h',
         'renderer/module_system.cc',
         'renderer/module_system.h',
         'renderer/native_handler.cc',
         'renderer/native_handler.h',
         'renderer/object_backed_native_handler.cc',
         'renderer/object_backed_native_handler.h',
+        'renderer/render_view_observer_natives.cc',
+        'renderer/render_view_observer_natives.h',
         'renderer/request_sender.cc',
         'renderer/request_sender.h',
         'renderer/safe_builtins.cc',
         'renderer/safe_builtins.h',
+        'renderer/send_request_natives.cc',
+        'renderer/send_request_natives.h',
+        'renderer/set_icon_natives.cc',
+        'renderer/set_icon_natives.h',
         'renderer/scoped_persistent.h',
         'renderer/script_context.cc',
         'renderer/script_context.h',
+        'renderer/script_context_set.cc',
+        'renderer/script_context_set.h',
+        'renderer/utils_native_handler.cc',
+        'renderer/utils_native_handler.h',
+        'renderer/v8_schema_registry.cc',
+        'renderer/v8_schema_registry.h',
       ],
       'dependencies': [
         '../third_party/WebKit/public/blink.gyp:blink',
       ],
       # Disable c4267 warnings until we fix size_t to int truncations.
       'msvs_disabled_warnings': [ 4267, ],
+      'conditions': [
+        # Temporary conditions for Android until it can stop building
+        # the extensions module altogether. These exemptions are taken
+        # directly from chrome_renderer.gypi as sources are moved
+        # from //chrome/renderer to //extensions/renderer.
+        ['OS == "android"', {
+          'sources!': [
+            'renderer/api_definitions_natives.cc',
+            'renderer/context_menus_custom_bindings.cc',
+            'renderer/render_view_observer_natives.cc',
+            'renderer/send_request_natives.cc',
+          ],
+        }],
+      ]
     },
     {
       'target_name': 'extensions_test_support',
       'type': 'static_library',
       'dependencies': [
-        'extensions_browser',
-        'extensions_common',
         '../base/base.gyp:base',
         '../testing/gtest.gyp:gtest',
+        'extensions_browser',
+        'extensions_common',
       ],
       'include_dirs': [
         '..',
@@ -479,22 +528,19 @@
       'dependencies': [
         '../base/base.gyp:base',
         '../base/base.gyp:test_support_base',
+        '../testing/gmock.gyp:gmock',
         '../testing/gtest.gyp:gtest',
         'extensions_common',
+        'extensions_strings.gyp:extensions_strings',
         'extensions_test_support',
       ],
       'sources': [
         'common/api/sockets/sockets_manifest_permission_unittest.cc',
         'common/csp_validator_unittest.cc',
         'common/event_filter_unittest.cc',
-        'common/file_util_unittest.cc',
         'common/id_util_unittest.cc',
-        'common/manifest_handler_unittest.cc',
         'common/one_shot_event_unittest.cc',
-        'common/permissions/api_permission_set_unittest.cc',
         'common/permissions/manifest_permission_set_unittest.cc',
-        'common/url_pattern_set_unittest.cc',
-        'common/url_pattern_unittest.cc',
         'common/user_script_unittest.cc',
         'test/extensions_unittests_main.cc',
         'test/test_extensions_client.cc',
diff --git a/extensions/extensions_strings.grd b/extensions/extensions_strings.grd
new file mode 100644
index 0000000..2971356
--- /dev/null
+++ b/extensions/extensions_strings.grd
@@ -0,0 +1,332 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+  Strings for the extensions module. Used mostly for low-level error messages.
+  Where possible new strings should be kept in Chrome and the extensions module
+  should return an error code, message flag, etc.
+-->
+
+<grit latest_public_release="0" current_release="1"
+      source_lang_id="en" enc_check="möl">
+  <outputs>
+    <output filename="grit/extensions_strings.h" type="rc_header">
+      <emit emit_type='prepend'></emit>
+    </output>
+    <output filename="extensions_strings_am.pak" type="data_package" lang="am" />
+    <output filename="extensions_strings_ar.pak" type="data_package" lang="ar" />
+    <if expr="use_third_party_translations">
+      <output filename="extensions_strings_ast.pak" type="data_package" lang="ast" />
+    </if>
+    <output filename="extensions_strings_bg.pak" type="data_package" lang="bg" />
+    <output filename="extensions_strings_bn.pak" type="data_package" lang="bn" />
+    <if expr="use_third_party_translations">
+      <output filename="extensions_strings_bs.pak" type="data_package" lang="bs" />
+    </if>
+    <output filename="extensions_strings_ca.pak" type="data_package" lang="ca" />
+    <if expr="use_third_party_translations">
+      <output filename="extensions_strings_ca@valencia.pak" type="data_package" lang="ca@valencia" />
+    </if>
+    <output filename="extensions_strings_cs.pak" type="data_package" lang="cs" />
+    <output filename="extensions_strings_da.pak" type="data_package" lang="da" />
+    <output filename="extensions_strings_de.pak" type="data_package" lang="de" />
+    <output filename="extensions_strings_el.pak" type="data_package" lang="el" />
+    <if expr="use_third_party_translations">
+      <output filename="extensions_strings_en-AU.pak" type="data_package" lang="en-AU" />
+    </if>
+    <output filename="extensions_strings_en-GB.pak" type="data_package" lang="en-GB" />
+    <output filename="extensions_strings_en-US.pak" type="data_package" lang="en" />
+    <if expr="use_third_party_translations">
+      <output filename="extensions_strings_eo.pak" type="data_package" lang="eo" />
+    </if>
+    <output filename="extensions_strings_es.pak" type="data_package" lang="es" />
+    <if expr="is_ios">
+      <!-- iOS uses es-MX for es-419 -->
+      <output filename="extensions_strings_es-MX.pak" type="data_package" lang="es-419" />
+    </if>
+    <if expr="not is_ios">
+      <output filename="extensions_strings_es-419.pak" type="data_package" lang="es-419" />
+    </if>
+    <output filename="extensions_strings_et.pak" type="data_package" lang="et" />
+    <if expr="use_third_party_translations">
+      <output filename="extensions_strings_eu.pak" type="data_package" lang="eu" />
+    </if>
+    <output filename="extensions_strings_fa.pak" type="data_package" lang="fa" />
+    <output filename="extensions_strings_fake-bidi.pak" type="data_package" lang="fake-bidi" />
+    <output filename="extensions_strings_fi.pak" type="data_package" lang="fi" />
+    <output filename="extensions_strings_fil.pak" type="data_package" lang="fil" />
+    <output filename="extensions_strings_fr.pak" type="data_package" lang="fr" />
+    <if expr="use_third_party_translations">
+      <output filename="extensions_strings_gl.pak" type="data_package" lang="gl" />
+    </if>
+    <output filename="extensions_strings_gu.pak" type="data_package" lang="gu" />
+    <output filename="extensions_strings_he.pak" type="data_package" lang="he" />
+    <output filename="extensions_strings_hi.pak" type="data_package" lang="hi" />
+    <output filename="extensions_strings_hr.pak" type="data_package" lang="hr" />
+    <output filename="extensions_strings_hu.pak" type="data_package" lang="hu" />
+    <if expr="use_third_party_translations">
+      <output filename="extensions_strings_hy.pak" type="data_package" lang="hy" />
+      <output filename="extensions_strings_ia.pak" type="data_package" lang="ia" />
+    </if>
+    <output filename="extensions_strings_id.pak" type="data_package" lang="id" />
+    <output filename="extensions_strings_it.pak" type="data_package" lang="it" />
+    <output filename="extensions_strings_ja.pak" type="data_package" lang="ja" />
+    <if expr="use_third_party_translations">
+      <output filename="extensions_strings_ka.pak" type="data_package" lang="ka" />
+    </if>
+    <output filename="extensions_strings_kn.pak" type="data_package" lang="kn" />
+    <output filename="extensions_strings_ko.pak" type="data_package" lang="ko" />
+    <if expr="use_third_party_translations">
+      <output filename="extensions_strings_ku.pak" type="data_package" lang="ku" />
+      <output filename="extensions_strings_kw.pak" type="data_package" lang="kw" />
+    </if>
+    <output filename="extensions_strings_lt.pak" type="data_package" lang="lt" />
+    <output filename="extensions_strings_lv.pak" type="data_package" lang="lv" />
+    <output filename="extensions_strings_ml.pak" type="data_package" lang="ml" />
+    <output filename="extensions_strings_mr.pak" type="data_package" lang="mr" />
+    <output filename="extensions_strings_ms.pak" type="data_package" lang="ms" />
+    <output filename="extensions_strings_nl.pak" type="data_package" lang="nl" />
+    <!-- The translation console uses 'no' for Norwegian Bokmål. It should
+         be 'nb'. -->
+    <output filename="extensions_strings_nb.pak" type="data_package" lang="no" />
+    <output filename="extensions_strings_pl.pak" type="data_package" lang="pl" />
+    <if expr="is_ios">
+      <!-- iOS uses pt for pt-BR -->
+      <output filename="extensions_strings_pt.pak" type="data_package" lang="pt-BR" />
+    </if>
+    <if expr="not is_ios">
+      <output filename="extensions_strings_pt-BR.pak" type="data_package" lang="pt-BR" />
+    </if>
+    <output filename="extensions_strings_pt-PT.pak" type="data_package" lang="pt-PT" />
+    <output filename="extensions_strings_ro.pak" type="data_package" lang="ro" />
+    <output filename="extensions_strings_ru.pak" type="data_package" lang="ru" />
+    <output filename="extensions_strings_sk.pak" type="data_package" lang="sk" />
+    <output filename="extensions_strings_sl.pak" type="data_package" lang="sl" />
+    <output filename="extensions_strings_sr.pak" type="data_package" lang="sr" />
+    <output filename="extensions_strings_sv.pak" type="data_package" lang="sv" />
+    <output filename="extensions_strings_sw.pak" type="data_package" lang="sw" />
+    <output filename="extensions_strings_ta.pak" type="data_package" lang="ta" />
+    <output filename="extensions_strings_te.pak" type="data_package" lang="te" />
+    <output filename="extensions_strings_th.pak" type="data_package" lang="th" />
+    <output filename="extensions_strings_tr.pak" type="data_package" lang="tr" />
+    <if expr="use_third_party_translations">
+      <output filename="extensions_strings_ug.pak" type="data_package" lang="ug" />
+    </if>
+    <output filename="extensions_strings_uk.pak" type="data_package" lang="uk" />
+    <output filename="extensions_strings_vi.pak" type="data_package" lang="vi" />
+    <output filename="extensions_strings_zh-CN.pak" type="data_package" lang="zh-CN" />
+    <output filename="extensions_strings_zh-TW.pak" type="data_package" lang="zh-TW" />
+  </outputs>
+  <translations>
+    <file path="strings/extensions_strings_am.xtb" lang="am" />
+    <file path="strings/extensions_strings_ar.xtb" lang="ar" />
+    <file path="strings/extensions_strings_bg.xtb" lang="bg" />
+    <file path="strings/extensions_strings_bn.xtb" lang="bn" />
+    <file path="strings/extensions_strings_ca.xtb" lang="ca" />
+    <file path="strings/extensions_strings_cs.xtb" lang="cs" />
+    <file path="strings/extensions_strings_da.xtb" lang="da" />
+    <file path="strings/extensions_strings_de.xtb" lang="de" />
+    <file path="strings/extensions_strings_el.xtb" lang="el" />
+    <file path="strings/extensions_strings_en-GB.xtb" lang="en-GB" />
+    <file path="strings/extensions_strings_es.xtb" lang="es" />
+    <file path="strings/extensions_strings_es-419.xtb" lang="es-419" />
+    <file path="strings/extensions_strings_et.xtb" lang="et" />
+    <file path="strings/extensions_strings_fa.xtb" lang="fa" />
+    <file path="strings/extensions_strings_fi.xtb" lang="fi" />
+    <file path="strings/extensions_strings_fil.xtb" lang="fil" />
+    <file path="strings/extensions_strings_fr.xtb" lang="fr" />
+    <file path="strings/extensions_strings_gu.xtb" lang="gu" />
+    <file path="strings/extensions_strings_hi.xtb" lang="hi" />
+    <file path="strings/extensions_strings_hr.xtb" lang="hr" />
+    <file path="strings/extensions_strings_hu.xtb" lang="hu" />
+    <file path="strings/extensions_strings_id.xtb" lang="id" />
+    <file path="strings/extensions_strings_it.xtb" lang="it" />
+    <!-- The translation console uses 'iw' for Hebrew, but we use 'he'. -->
+    <file path="strings/extensions_strings_iw.xtb" lang="he" />
+    <file path="strings/extensions_strings_ja.xtb" lang="ja" />
+    <file path="strings/extensions_strings_kn.xtb" lang="kn" />
+    <file path="strings/extensions_strings_ko.xtb" lang="ko" />
+    <file path="strings/extensions_strings_lt.xtb" lang="lt" />
+    <file path="strings/extensions_strings_lv.xtb" lang="lv" />
+    <file path="strings/extensions_strings_ml.xtb" lang="ml" />
+    <file path="strings/extensions_strings_mr.xtb" lang="mr" />
+    <file path="strings/extensions_strings_ms.xtb" lang="ms" />
+    <file path="strings/extensions_strings_nl.xtb" lang="nl" />
+    <file path="strings/extensions_strings_no.xtb" lang="no" />
+    <file path="strings/extensions_strings_pl.xtb" lang="pl" />
+    <file path="strings/extensions_strings_pt-BR.xtb" lang="pt-BR" />
+    <file path="strings/extensions_strings_pt-PT.xtb" lang="pt-PT" />
+    <file path="strings/extensions_strings_ro.xtb" lang="ro" />
+    <file path="strings/extensions_strings_ru.xtb" lang="ru" />
+    <file path="strings/extensions_strings_sk.xtb" lang="sk" />
+    <file path="strings/extensions_strings_sl.xtb" lang="sl" />
+    <file path="strings/extensions_strings_sr.xtb" lang="sr" />
+    <file path="strings/extensions_strings_sv.xtb" lang="sv" />
+    <file path="strings/extensions_strings_sw.xtb" lang="sw" />
+    <file path="strings/extensions_strings_ta.xtb" lang="ta" />
+    <file path="strings/extensions_strings_te.xtb" lang="te" />
+    <file path="strings/extensions_strings_th.xtb" lang="th" />
+    <file path="strings/extensions_strings_tr.xtb" lang="tr" />
+    <file path="strings/extensions_strings_uk.xtb" lang="uk" />
+    <file path="strings/extensions_strings_vi.xtb" lang="vi" />
+    <file path="strings/extensions_strings_zh-CN.xtb" lang="zh-CN" />
+    <file path="strings/extensions_strings_zh-TW.xtb" lang="zh-TW" />
+  </translations>
+  <release seq="1" allow_pseudo="false">
+    <messages fallback_to_english="true">
+
+      <!-- General extensions strings. Please keep alphabetized. -->
+      <message name="IDS_EXTENSION_CONTAINS_PRIVATE_KEY" desc="Error message when an extension includes a file containing a private key.">
+        This extension includes the key file '<ph name="KEY_PATH">$1<ex>relative/path/to/file.pem</ex></ph>'. You probably don't want to do that.
+      </message>
+      <message name="IDS_EXTENSION_LOAD_BACKGROUND_SCRIPT_FAILED" desc="">
+        Could not load background script '<ph name="BACKGROUND_SCRIPT">$1<ex>script.js</ex></ph>'.
+      </message>
+      <message name="IDS_EXTENSION_LOAD_BACKGROUND_PAGE_FAILED" desc="">
+        Could not load background page '<ph name="BACKGROUND_PAGE">$1<ex>page.html</ex></ph>'.
+      </message>
+      <message name="IDS_EXTENSION_LOAD_ICON_FAILED" desc="">
+        Could not load extension icon '<ph name="ICON">$1<ex>icon.png</ex></ph>'.
+      </message>
+      <message name="IDS_EXTENSION_LOCALES_NO_DEFAULT_LOCALE_SPECIFIED" desc="">
+        Localization used, but default_locale wasn't specified in the manifest.
+      </message>
+      <message name="IDS_EXTENSION_MANIFEST_UNREADABLE" desc="">
+        Manifest file is missing or unreadable.
+      </message>
+      <message name="IDS_EXTENSION_MANIFEST_INVALID" desc="">
+        Manifest file is invalid.
+      </message>
+      
+      <!-- Host access permissions. Please keep alphabetized. -->
+      <message name="IDS_EXTENSION_PROMPT_WARNING_1_HOST" desc="Permission string for access to data on one website.">
+        Access your data on <ph name="WEBSITE_1">$1<ex>www.google.com</ex></ph>
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_2_HOSTS" desc="Permission string for access to data on two websites.">
+        Access your data on <ph name="WEBSITE_1">$1<ex>www.google.com</ex></ph> and <ph name="WEBSITE_2">$2<ex>www.reddit.com</ex></ph>
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_3_HOSTS" desc="Permission string for access to data on three websites.">
+        Access your data on <ph name="WEBSITE_1">$1<ex>www.google.com</ex></ph>, <ph name="WEBSITE_2">$2<ex>www.reddit.com</ex></ph>, and <ph name="WEBSITE_3">$3<ex>news.ycombinator.com</ex></ph>
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_HOSTS_DEFAULT" desc="Permission string for access to data on four or more websites. This is necessary for every language. This is the default for all the numbers NOT covered by special cases (singular, dual/two, few, many) some languages need. For CJK, Vietnamese, Turkish and Kannada, this is the only string necessary. For languages with singular-plural distinction, this is the generic plural. For Lithuanian, NUMBER_OF_WEBSITES is 11 .. 19.">
+        Access your data on <ph name="NUMBER_OF_WEBSITES">#<ex>5</ex></ph> websites
+      </message>
+
+      <if expr="lang not in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
+      <message name="IDS_EXTENSION_PROMPT_WARNING_HOST_SINGULAR" desc="Permission string for access to data on four or more websites. NUMBER_OF_WEBSITES is one or one-like numbers : 1 (many European and most Indian languages), 1 and 0 (French, Brazilian Portuguese and Hindi), 1,21,31, .. (Russian, Ukrainian, Croatian, Serbian, Latvian, Lithuanian), or 1, 101, 201, .. (Slovenian). Do NOT translate this for CJK, Vietnamese, Turkish and Kannada">
+        Access your data on <ph name="NUMBER_OF_WEBSITES">#<ex>1</ex></ph> websites
+      </message>
+      </if>
+      <if expr="lang in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
+      <message translateable="false" name="IDS_EXTENSION_PROMPT_WARNING_HOST_SINGULAR" desc="">
+        NA
+      </message>
+      </if>
+
+      <if expr="lang in ['ar', 'ro', 'lv']">
+      <message name="IDS_EXTENSION_PROMPT_WARNING_HOSTS_ZERO" desc="Permission string for access to data on four or more websites. NUMBER_OF_WEBSITES is 0 (Arabic, Latvian) or 0, 2..19, 101..119, ... (Romanian). For other languages, do NOT translate.">
+        Access your data on <ph name="NUMBER_OF_WEBSITES">#<ex>0</ex></ph> websites
+      </message>
+      </if>
+      <if expr="lang not in ['ar', 'ro', 'lv']">
+      <message translateable="false" name="IDS_EXTENSION_PROMPT_WARNING_HOSTS_ZERO" desc="">
+        NA
+      </message>
+      </if>
+
+      <if expr="lang in ['ga', 'sl', 'ar']">
+      <message name="IDS_EXTENSION_PROMPT_WARNING_HOSTS_TWO" desc="Permission string for access to data on four or more websites. NUMBER_OF_WEBSITES is two or two-like/dual numbers :  2 (Arabic and Irish) or  2, 102, 202 ... (Slovenian). For other languages, do NOT translated.">
+        Access your data on <ph name="NUMBER_OF_WEBSITES">#<ex>2</ex></ph> websites
+      </message>
+      </if>
+      <if expr="lang not in ['ga', 'sl', 'ar']">
+      <message translateable="false" name="IDS_EXTENSION_PROMPT_WARNING_HOSTS_TWO" desc="">
+        NA
+      </message>
+      </if>
+
+      <if expr="lang  in ['ru', 'lt', 'hr', 'uk', 'cs', 'sk', 'pl', 'sl', 'ar']">
+      <message name="IDS_EXTENSION_PROMPT_WARNING_HOSTS_FEW" desc="Permission string for access to data on four or more websites. NUMBER_OF_WEBSITES is few or few-like numbers in Arabic, Russian, Polish, Croatian, Serbian, Ukrainian, Czech, Slovak, Slovenian, Latvian. For other languages, do NOT translate.">
+        Access your data on <ph name="NUMBER_OF_WEBSITES">#<ex>3</ex></ph> websites
+      </message>
+      </if>
+      <if expr="lang not in ['ru', 'lt', 'hr', 'uk', 'cs', 'sk', 'pl', 'sl', 'ar']">
+      <message translateable="false" name="IDS_EXTENSION_PROMPT_WARNING_HOSTS_FEW" desc="">
+        NA
+      </message>
+      </if>
+
+      <if expr="lang == 'ar'">
+      <message name="IDS_EXTENSION_PROMPT_WARNING_HOSTS_MANY" meaning="many" desc="Permission string for access to data on four or more websites. NUMBER_OF_WEBSITES is 11 through 99 in Arabic. For all other languages, do NOT translate.">
+        Access your data on <ph name="NUMBER_OF_WEBSITES">#<ex>23</ex></ph> websites
+      </message>
+      </if>
+      <if expr="lang != 'ar'">
+      <message translateable="false" name="IDS_EXTENSION_PROMPT_WARNING_HOSTS_MANY" desc="">
+        NA
+      </message>
+      </if>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_HOST_LIST" desc="Permission string (heading) for a list of websites.">
+        Access your data on the following websites:
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_HOST_LIST_ENTRY" desc="Single entry in a list of websites.">
+        - <ph name="WEBSITE_1">$1<ex>www.google.com</ex></ph>
+      </message>
+
+      <!-- Media galleries strings. Please keep alphabetized. -->
+      <message name="IDS_EXTENSION_PROMPT_WARNING_MEDIA_GALLERIES_READ" desc="Permission string for access to read all of the user's media galleries.">
+        Access photos, music, and other media from your computer
+      </message>
+
+      <!-- Policy strings. Please keep alphabetized. -->
+      <message name="IDS_EXTENSION_CANT_INSTALL_POLICY_BLOCKED" desc="Error message when a user tries to install an extension that is blocked by administrator policy.">
+        <ph name="EXTENSION_NAME">$1<ex>Google Talk</ex></ph> (extension ID "<ph name="EXTENSION_ID">$2<ex>nckgahadagoaajjgafhacjanaoiihapd</ex></ph>") is blocked by the administrator.
+      </message>
+      <message name="IDS_EXTENSION_CANT_MODIFY_POLICY_REQUIRED" desc="Error message when a user tries to remove or change an extension that is required by administrator policy.">
+        The administrator of this machine requires <ph name="EXTENSION_NAME">$1<ex>Google Talk</ex></ph> to be installed. It cannot be removed or modified.
+      </message>
+
+      <!-- Settings override strings. Please keep alphabetized. -->
+      <message name="IDS_EXTENSION_PROMPT_WARNING_HOME_PAGE_SETTING_OVERRIDE" desc="Permission string for home page override.">
+        Change your home page to: <ph name="HOME_PAGE">$1<ex>home.page.com/home.html</ex></ph>
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_SEARCH_SETTINGS_OVERRIDE" desc="Permission string for search settings override.">
+        Change your search settings to: <ph name="SEARCH_HOST">$1<ex>url.search.com</ex></ph>
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_START_PAGE_SETTING_OVERRIDE" desc="Permission string for start page override.">
+        Change your start page to: <ph name="START_PAGE">$1<ex>start.page.com/start.html</ex></ph>
+      </message>
+
+      <!-- Sockets API strings. Please keep alphabetized. -->
+      <message name="IDS_EXTENSION_PROMPT_WARNING_NETWORK_STATE" desc="Permission string for network list access.">
+        Access list of network connections
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_SOCKET_ANY_HOST" desc="Permission string for access to any computer on the local network or internet.">
+        Exchange data with any computer on the local network or internet
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_SOCKET_HOSTS_IN_DOMAIN" desc="Permission string for access to any computer within a single domains on the local network or internet.">
+        Exchange data with any computer in the domain <ph name="DOMAIN">$1<ex>example.com</ex></ph>
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_SOCKET_HOSTS_IN_DOMAINS" desc="Permission string for access to any computer within multiple domains on the local network or internet.">
+        Exchange data with any computer in the domains: <ph name="DOMAINS">$1<ex>example.com example.org</ex></ph>
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_SOCKET_SPECIFIC_HOST" desc="Permission string for access to a single specific computers on the local network or internet.">
+        Exchange data with the computer named <ph name="HOSTNAME">$1<ex>foo.example.com</ex></ph>
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_SOCKET_SPECIFIC_HOSTS" desc="Permission string for access to multiple specific computers on the local network or internet.">
+        Exchange data with the computers named: <ph name="HOSTNAMES">$1<ex>foo.example.com bar.example.com</ex></ph>
+      </message>
+      
+      <!-- USB API strings. Please keep alphabetized. -->
+      <message name="IDS_EXTENSION_PROMPT_WARNING_USB_DEVICE" desc="Permission string for access to a specific USB device.">
+        Access the USB device <ph name="PRODUCT_NAME">$1<ex>SoundKnob</ex></ph> from <ph name="VENDOR_NAME">$2<ex>Griffin Technology</ex></ph>
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_USB_DEVICE_MISSING_PRODUCT" desc="Permission string for access to a specific USB device when a product name cannot be established for a USB device.">
+        Access the USB device from <ph name="VENDOR_NAME">$1<ex>Griffin Technology</ex></ph>
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_USB_DEVICE_MISSING_VENDOR" desc="Permission string for access to a specific USB device when a vendor name cannot be established for a USB device.">
+        Access the USB device
+      </message>
+
+    </messages>
+  </release>
+</grit>
diff --git a/extensions/extensions_strings.gyp b/extensions/extensions_strings.gyp
new file mode 100644
index 0000000..abbf167
--- /dev/null
+++ b/extensions/extensions_strings.gyp
@@ -0,0 +1,30 @@
+# 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.
+
+{
+  'targets': [
+    {
+      'target_name': 'extensions_strings',
+      'type': 'none',
+      'actions': [
+        {
+          'action_name': 'generate_extensions_strings',
+          'variables': {
+            'grit_grd_file': 'extensions_strings.grd',
+            'grit_out_dir': '<(SHARED_INTERMEDIATE_DIR)/extensions/strings',
+          },
+          'includes': [ '../build/grit_action.gypi' ],
+        },
+      ],
+      'direct_dependent_settings': {
+        'include_dirs': [
+          '<(SHARED_INTERMEDIATE_DIR)/extensions/strings',
+        ],
+      },
+      # This target generates extensions_strings.h so it must be built before
+      # targets that depend on it.
+      'hard_dependency': 1,
+    },
+  ],
+}
diff --git a/extensions/renderer/DEPS b/extensions/renderer/DEPS
index 3f93937..c1b356a 100644
--- a/extensions/renderer/DEPS
+++ b/extensions/renderer/DEPS
@@ -3,9 +3,14 @@
   "+content/public/common",
   "+content/public/renderer",
 
+  "+third_party/skia/include/core",
+
+  "+third_party/WebKit/public/platform",
   "+third_party/WebKit/public/web",
 
   "-v8",
   "+v8/include",
+
+  "+webkit/common/fileapi",
 ]
 
diff --git a/extensions/renderer/api_definitions_natives.cc b/extensions/renderer/api_definitions_natives.cc
new file mode 100644
index 0000000..a7970b2
--- /dev/null
+++ b/extensions/renderer/api_definitions_natives.cc
@@ -0,0 +1,41 @@
+// 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.
+
+#include "extensions/renderer/api_definitions_natives.h"
+
+#include "chrome/renderer/extensions/dispatcher.h"
+#include "extensions/common/features/feature.h"
+#include "extensions/common/features/feature_provider.h"
+#include "extensions/renderer/script_context.h"
+
+namespace extensions {
+
+ApiDefinitionsNatives::ApiDefinitionsNatives(Dispatcher* dispatcher,
+                                             ScriptContext* context)
+    : ObjectBackedNativeHandler(context), dispatcher_(dispatcher) {
+  RouteFunction(
+      "GetExtensionAPIDefinitionsForTest",
+      base::Bind(&ApiDefinitionsNatives::GetExtensionAPIDefinitionsForTest,
+                 base::Unretained(this)));
+}
+
+void ApiDefinitionsNatives::GetExtensionAPIDefinitionsForTest(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  std::vector<std::string> apis;
+  FeatureProvider* feature_provider = FeatureProvider::GetAPIFeatures();
+  const std::vector<std::string>& feature_names =
+      feature_provider->GetAllFeatureNames();
+  for (std::vector<std::string>::const_iterator i = feature_names.begin();
+       i != feature_names.end();
+       ++i) {
+    if (!feature_provider->GetParent(feature_provider->GetFeature(*i)) &&
+        context()->GetAvailability(*i).is_available()) {
+      apis.push_back(*i);
+    }
+  }
+  args.GetReturnValue().Set(
+      dispatcher_->v8_schema_registry()->GetSchemas(apis));
+}
+
+}  // namespace extensions
diff --git a/extensions/renderer/api_definitions_natives.h b/extensions/renderer/api_definitions_natives.h
new file mode 100644
index 0000000..e6da645
--- /dev/null
+++ b/extensions/renderer/api_definitions_natives.h
@@ -0,0 +1,33 @@
+// 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.
+
+#ifndef EXTENSIONS_RENDERER_API_DEFINITIONS_NATIVES_H_
+#define EXTENSIONS_RENDERER_API_DEFINITIONS_NATIVES_H_
+
+#include "extensions/renderer/object_backed_native_handler.h"
+#include "v8/include/v8.h"
+
+namespace extensions {
+class Dispatcher;
+class ScriptContext;
+
+// Native functions for JS to get access to the schemas for extension APIs.
+class ApiDefinitionsNatives : public ObjectBackedNativeHandler {
+ public:
+  ApiDefinitionsNatives(Dispatcher* dispatcher, ScriptContext* context);
+
+ private:
+  // Returns the list of all schemas that are available to the calling context.
+  void GetExtensionAPIDefinitionsForTest(
+      const v8::FunctionCallbackInfo<v8::Value>& args);
+
+  // Not owned.
+  Dispatcher* dispatcher_;
+
+  DISALLOW_COPY_AND_ASSIGN(ApiDefinitionsNatives);
+};
+
+}  // namespace extensions
+
+#endif  // EXTENSIONS_RENDERER_API_DEFINITIONS_NATIVES_H_
diff --git a/extensions/renderer/binding_generating_native_handler.cc b/extensions/renderer/binding_generating_native_handler.cc
new file mode 100644
index 0000000..f83f1e5
--- /dev/null
+++ b/extensions/renderer/binding_generating_native_handler.cc
@@ -0,0 +1,45 @@
+// 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.
+
+#include "extensions/renderer/binding_generating_native_handler.h"
+
+#include "extensions/renderer/module_system.h"
+
+namespace extensions {
+
+BindingGeneratingNativeHandler::BindingGeneratingNativeHandler(
+    ModuleSystem* module_system,
+    const std::string& api_name,
+    const std::string& bind_to)
+    : module_system_(module_system), api_name_(api_name), bind_to_(bind_to) {}
+
+v8::Handle<v8::Object> BindingGeneratingNativeHandler::NewInstance() {
+  v8::Isolate* isolate = module_system_->GetIsolate();
+  v8::EscapableHandleScope scope(isolate);
+  v8::Handle<v8::Object> binding_module =
+      module_system_->Require("binding")->ToObject();
+  v8::Handle<v8::Object> binding =
+      binding_module->Get(v8::String::NewFromUtf8(isolate, "Binding"))
+          ->ToObject();
+  v8::Handle<v8::Function> create_binding =
+      binding->Get(v8::String::NewFromUtf8(isolate, "create"))
+          .As<v8::Function>();
+  v8::Handle<v8::Value> argv[] = {
+      v8::String::NewFromUtf8(isolate, api_name_.c_str())};
+  v8::Handle<v8::Object> binding_instance =
+      create_binding->Call(binding, arraysize(argv), argv)->ToObject();
+  v8::Handle<v8::Function> generate =
+      binding_instance->Get(v8::String::NewFromUtf8(isolate, "generate"))
+          .As<v8::Function>();
+  v8::Local<v8::Object> object = v8::Object::New(isolate);
+  v8::Handle<v8::Value> compiled_schema =
+      generate->Call(binding_instance, 0, NULL);
+  if (!compiled_schema.IsEmpty()) {
+    object->Set(v8::String::NewFromUtf8(isolate, bind_to_.c_str()),
+                compiled_schema);
+  }
+  return scope.Escape(object);
+}
+
+}  // namespace extensions
diff --git a/extensions/renderer/binding_generating_native_handler.h b/extensions/renderer/binding_generating_native_handler.h
new file mode 100644
index 0000000..bca48a8
--- /dev/null
+++ b/extensions/renderer/binding_generating_native_handler.h
@@ -0,0 +1,38 @@
+// 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.
+
+#ifndef EXTENSIONS_RENDERER_BINDING_GENERATING_NATIVE_HANDLER_H_
+#define EXTENSIONS_RENDERER_BINDING_GENERATING_NATIVE_HANDLER_H_
+
+#include <string>
+
+#include "base/compiler_specific.h"
+#include "extensions/renderer/native_handler.h"
+
+namespace extensions {
+
+class ModuleSystem;
+
+// Generates API bindings based on the JSON/IDL schemas. This is done by
+// creating a |Binding| (from binding.js) for the schema and generating the
+// bindings from that.
+class BindingGeneratingNativeHandler : public NativeHandler {
+ public:
+  // Generates binding for |api_name|, and sets the |bind_to| property on the
+  // Object returned by |NewInstance| to the generated binding.
+  BindingGeneratingNativeHandler(ModuleSystem* module_system,
+                                 const std::string& api_name,
+                                 const std::string& bind_to);
+
+  virtual v8::Handle<v8::Object> NewInstance() OVERRIDE;
+
+ private:
+  ModuleSystem* module_system_;
+  std::string api_name_;
+  std::string bind_to_;
+};
+
+}  // namespace extensions
+
+#endif  // EXTENSIONS_RENDERER_BINDING_GENERATING_NATIVE_HANDLER_H_
diff --git a/extensions/renderer/blob_native_handler.cc b/extensions/renderer/blob_native_handler.cc
new file mode 100644
index 0000000..c887af6
--- /dev/null
+++ b/extensions/renderer/blob_native_handler.cc
@@ -0,0 +1,31 @@
+// 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.
+
+#include "extensions/renderer/blob_native_handler.h"
+
+#include "base/bind.h"
+#include "third_party/WebKit/public/platform/WebCString.h"
+#include "third_party/WebKit/public/platform/WebURL.h"
+#include "third_party/WebKit/public/web/WebBlob.h"
+
+namespace {
+
+// Expects a single Blob argument. Returns the Blob's UUID.
+void GetBlobUuid(const v8::FunctionCallbackInfo<v8::Value>& args) {
+  DCHECK_EQ(1, args.Length());
+  blink::WebBlob blob = blink::WebBlob::fromV8Value(args[0]);
+  args.GetReturnValue().Set(
+      v8::String::NewFromUtf8(args.GetIsolate(), blob.uuid().utf8().data()));
+}
+
+}  // namespace
+
+namespace extensions {
+
+BlobNativeHandler::BlobNativeHandler(ScriptContext* context)
+    : ObjectBackedNativeHandler(context) {
+  RouteFunction("GetBlobUuid", base::Bind(&GetBlobUuid));
+}
+
+}  // namespace extensions
diff --git a/extensions/renderer/blob_native_handler.h b/extensions/renderer/blob_native_handler.h
new file mode 100644
index 0000000..7591501
--- /dev/null
+++ b/extensions/renderer/blob_native_handler.h
@@ -0,0 +1,27 @@
+// 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.
+
+#ifndef EXTENSIONS_RENDERER_BLOB_NATIVE_HANDLER_H_
+#define EXTENSIONS_RENDERER_BLOB_NATIVE_HANDLER_H_
+
+#include "extensions/renderer/object_backed_native_handler.h"
+
+namespace extensions {
+class ScriptContext;
+
+// This native handler is used to extract Blobs' UUIDs and pass them over to the
+// browser process extension implementation via argument modification. This is
+// necessary to support extension functions that take Blob parameters, as Blobs
+// are not serialized and sent over to the browser process in the normal way.
+//
+// Blobs sent via this method don't have their ref-counts incremented, so the
+// app using this technique must be sure to keep a reference.
+class BlobNativeHandler : public ObjectBackedNativeHandler {
+ public:
+  explicit BlobNativeHandler(ScriptContext* context);
+};
+
+}  // namespace extensions
+
+#endif  // EXTENSIONS_RENDERER_BLOB_NATIVE_HANDLER_H_
diff --git a/extensions/renderer/console.cc b/extensions/renderer/console.cc
index c9f03f5..303de44 100644
--- a/extensions/renderer/console.cc
+++ b/extensions/renderer/console.cc
@@ -40,7 +40,7 @@
   virtual bool Visit(content::RenderView* render_view) OVERRIDE {
     ExtensionHelper* helper = ExtensionHelper::Get(render_view);
     if (helper &&
-        helper->dispatcher()->v8_context_set().GetByV8Context(context_)) {
+        helper->dispatcher()->script_context_set().GetByV8Context(context_)) {
       found_ = render_view;
     }
     return !found_;
diff --git a/extensions/renderer/content_watcher.cc b/extensions/renderer/content_watcher.cc
new file mode 100644
index 0000000..684de5f
--- /dev/null
+++ b/extensions/renderer/content_watcher.cc
@@ -0,0 +1,120 @@
+// 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.
+
+#include "extensions/renderer/content_watcher.h"
+
+#include "content/public/renderer/render_view.h"
+#include "content/public/renderer/render_view_visitor.h"
+#include "extensions/common/extension_messages.h"
+#include "third_party/WebKit/public/web/WebDocument.h"
+#include "third_party/WebKit/public/web/WebElement.h"
+#include "third_party/WebKit/public/web/WebFrame.h"
+#include "third_party/WebKit/public/web/WebScriptBindings.h"
+#include "third_party/WebKit/public/web/WebView.h"
+
+namespace extensions {
+
+using blink::WebString;
+using blink::WebVector;
+using blink::WebView;
+
+ContentWatcher::ContentWatcher() {}
+ContentWatcher::~ContentWatcher() {}
+
+void ContentWatcher::OnWatchPages(
+    const std::vector<std::string>& new_css_selectors_utf8) {
+  blink::WebVector<blink::WebString> new_css_selectors(
+      new_css_selectors_utf8.size());
+  bool changed = new_css_selectors.size() != css_selectors_.size();
+  for (size_t i = 0; i < new_css_selectors.size(); ++i) {
+    new_css_selectors[i] =
+        blink::WebString::fromUTF8(new_css_selectors_utf8[i]);
+    if (!changed && new_css_selectors[i] != css_selectors_[i])
+      changed = true;
+  }
+
+  if (!changed)
+    return;
+
+  css_selectors_.swap(new_css_selectors);
+
+  // Tell each frame's document about the new set of watched selectors. These
+  // will trigger calls to DidMatchCSS after Blink has a chance to apply the new
+  // style, which will in turn notify the browser about the changes.
+  struct WatchSelectors : public content::RenderViewVisitor {
+    explicit WatchSelectors(const WebVector<WebString>& css_selectors)
+        : css_selectors_(css_selectors) {}
+
+    virtual bool Visit(content::RenderView* view) OVERRIDE {
+      for (blink::WebFrame* frame = view->GetWebView()->mainFrame(); frame;
+           frame = frame->traverseNext(/*wrap=*/false))
+        frame->document().watchCSSSelectors(css_selectors_);
+
+      return true;  // Continue visiting.
+    }
+
+    const WebVector<WebString>& css_selectors_;
+  };
+  WatchSelectors visitor(css_selectors_);
+  content::RenderView::ForEach(&visitor);
+}
+
+void ContentWatcher::DidCreateDocumentElement(blink::WebFrame* frame) {
+  frame->document().watchCSSSelectors(css_selectors_);
+}
+
+void ContentWatcher::DidMatchCSS(
+    blink::WebFrame* frame,
+    const WebVector<WebString>& newly_matching_selectors,
+    const WebVector<WebString>& stopped_matching_selectors) {
+  std::set<std::string>& frame_selectors = matching_selectors_[frame];
+  for (size_t i = 0; i < stopped_matching_selectors.size(); ++i)
+    frame_selectors.erase(stopped_matching_selectors[i].utf8());
+  for (size_t i = 0; i < newly_matching_selectors.size(); ++i)
+    frame_selectors.insert(newly_matching_selectors[i].utf8());
+
+  if (frame_selectors.empty())
+    matching_selectors_.erase(frame);
+
+  NotifyBrowserOfChange(frame);
+}
+
+void ContentWatcher::NotifyBrowserOfChange(
+    blink::WebFrame* changed_frame) const {
+  blink::WebFrame* const top_frame = changed_frame->top();
+  const blink::WebSecurityOrigin top_origin =
+      top_frame->document().securityOrigin();
+  // Want to aggregate matched selectors from all frames where an
+  // extension with access to top_origin could run on the frame.
+  if (!top_origin.canAccess(changed_frame->document().securityOrigin())) {
+    // If the changed frame can't be accessed by the top frame, then
+    // no change in it could affect the set of selectors we'd send back.
+    return;
+  }
+
+  std::set<base::StringPiece> transitive_selectors;
+  for (blink::WebFrame* frame = top_frame; frame;
+       frame = frame->traverseNext(/*wrap=*/false)) {
+    if (top_origin.canAccess(frame->document().securityOrigin())) {
+      std::map<blink::WebFrame*, std::set<std::string> >::const_iterator
+          frame_selectors = matching_selectors_.find(frame);
+      if (frame_selectors != matching_selectors_.end()) {
+        transitive_selectors.insert(frame_selectors->second.begin(),
+                                    frame_selectors->second.end());
+      }
+    }
+  }
+  std::vector<std::string> selector_strings;
+  for (std::set<base::StringPiece>::const_iterator it =
+           transitive_selectors.begin();
+       it != transitive_selectors.end();
+       ++it)
+    selector_strings.push_back(it->as_string());
+  content::RenderView* view =
+      content::RenderView::FromWebView(top_frame->view());
+  view->Send(new ExtensionHostMsg_OnWatchedPageChange(view->GetRoutingID(),
+                                                      selector_strings));
+}
+
+}  // namespace extensions
diff --git a/extensions/renderer/content_watcher.h b/extensions/renderer/content_watcher.h
new file mode 100644
index 0000000..3e3e796
--- /dev/null
+++ b/extensions/renderer/content_watcher.h
@@ -0,0 +1,71 @@
+// 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.
+
+#ifndef EXTENSIONS_RENDERER_CONTENT_WATCHER_H_
+#define EXTENSIONS_RENDERER_CONTENT_WATCHER_H_
+
+#include <map>
+#include <set>
+#include <string>
+#include <vector>
+
+#include "third_party/WebKit/public/platform/WebVector.h"
+
+namespace blink {
+class WebFrame;
+class WebString;
+}
+
+namespace extensions {
+class Dispatcher;
+class Extension;
+class NativeHandler;
+
+// Watches the content of WebFrames to notify extensions when they match various
+// patterns.  This class tracks the set of relevant patterns (set by
+// ExtensionMsg_WatchPages) and the set that match on each WebFrame, and sends a
+// ExtensionHostMsg_OnWatchedPageChange whenever a RenderView's set changes.
+//
+// There's one ContentWatcher per Dispatcher rather than per RenderView because
+// WebFrames can move between RenderViews through adoptNode.
+class ContentWatcher {
+ public:
+  ContentWatcher();
+  ~ContentWatcher();
+
+  // Handler for ExtensionMsg_WatchPages.
+  void OnWatchPages(const std::vector<std::string>& css_selectors);
+
+  // Uses WebDocument::watchCSSSelectors to watch the selectors in
+  // css_selectors_ and get a callback into DidMatchCSS() whenever the set of
+  // matching selectors in |frame| changes.
+  void DidCreateDocumentElement(blink::WebFrame* frame);
+
+  // Records that |newly_matching_selectors| have started matching on |*frame|,
+  // and |stopped_matching_selectors| have stopped matching.
+  void DidMatchCSS(
+      blink::WebFrame* frame,
+      const blink::WebVector<blink::WebString>& newly_matching_selectors,
+      const blink::WebVector<blink::WebString>& stopped_matching_selectors);
+
+ private:
+  // Given that we saw a change in the CSS selectors that |changed_frame|
+  // matched, tell the browser about the new set of matching selectors in its
+  // top-level page.  We filter this so that if an extension were to be granted
+  // activeTab permission on that top-level page, we only send CSS selectors for
+  // frames that it could run on.
+  void NotifyBrowserOfChange(blink::WebFrame* changed_frame) const;
+
+  // If any of these selectors match on a page, we need to send an
+  // ExtensionHostMsg_OnWatchedPageChange back to the browser.
+  blink::WebVector<blink::WebString> css_selectors_;
+
+  // Maps live WebFrames to the set of CSS selectors they match. Blink sends
+  // back diffs, which we apply to these sets.
+  std::map<blink::WebFrame*, std::set<std::string> > matching_selectors_;
+};
+
+}  // namespace extensions
+
+#endif  // EXTENSIONS_RENDERER_CONTENT_WATCHER_H_
diff --git a/extensions/renderer/context_menus_custom_bindings.cc b/extensions/renderer/context_menus_custom_bindings.cc
new file mode 100644
index 0000000..3f9d4ff
--- /dev/null
+++ b/extensions/renderer/context_menus_custom_bindings.cc
@@ -0,0 +1,30 @@
+// 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.
+
+#include "extensions/renderer/context_menus_custom_bindings.h"
+
+#include "base/bind.h"
+#include "content/public/renderer/render_thread.h"
+#include "extensions/common/extension_messages.h"
+#include "v8/include/v8.h"
+
+namespace {
+
+void GetNextContextMenuId(const v8::FunctionCallbackInfo<v8::Value>& args) {
+  int context_menu_id = -1;
+  content::RenderThread::Get()->Send(
+      new ExtensionHostMsg_GenerateUniqueID(&context_menu_id));
+  args.GetReturnValue().Set(static_cast<int32_t>(context_menu_id));
+}
+
+}  // namespace
+
+namespace extensions {
+
+ContextMenusCustomBindings::ContextMenusCustomBindings(ScriptContext* context)
+    : ObjectBackedNativeHandler(context) {
+  RouteFunction("GetNextContextMenuId", base::Bind(&GetNextContextMenuId));
+}
+
+}  // extensions
diff --git a/extensions/renderer/context_menus_custom_bindings.h b/extensions/renderer/context_menus_custom_bindings.h
new file mode 100644
index 0000000..7c625b4
--- /dev/null
+++ b/extensions/renderer/context_menus_custom_bindings.h
@@ -0,0 +1,21 @@
+// 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.
+
+#ifndef EXTENSIONS_RENDERER_CONTEXT_MENUS_CUSTOM_BINDINGS_H_
+#define EXTENSIONS_RENDERER_CONTEXT_MENUS_CUSTOM_BINDINGS_H_
+
+#include "extensions/renderer/object_backed_native_handler.h"
+
+namespace extensions {
+class ScriptContext;
+
+// Implements custom bindings for the contextMenus API.
+class ContextMenusCustomBindings : public ObjectBackedNativeHandler {
+ public:
+  ContextMenusCustomBindings(ScriptContext* context);
+};
+
+}  // extensions
+
+#endif  // EXTENSIONS_RENDERER_CONTEXT_MENUS_CUSTOM_BINDINGS_H_
diff --git a/extensions/renderer/css_native_handler.cc b/extensions/renderer/css_native_handler.cc
new file mode 100644
index 0000000..ab3ec61
--- /dev/null
+++ b/extensions/renderer/css_native_handler.cc
@@ -0,0 +1,35 @@
+// 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.
+
+#include "extensions/renderer/css_native_handler.h"
+
+#include "extensions/renderer/script_context.h"
+#include "third_party/WebKit/public/platform/WebString.h"
+#include "third_party/WebKit/public/web/WebScriptBindings.h"
+#include "third_party/WebKit/public/web/WebSelector.h"
+
+namespace extensions {
+
+using blink::WebString;
+
+CssNativeHandler::CssNativeHandler(ScriptContext* context)
+    : ObjectBackedNativeHandler(context) {
+  RouteFunction("CanonicalizeCompoundSelector",
+                base::Bind(&CssNativeHandler::CanonicalizeCompoundSelector,
+                           base::Unretained(this)));
+}
+
+void CssNativeHandler::CanonicalizeCompoundSelector(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  CHECK_EQ(args.Length(), 1);
+  CHECK(args[0]->IsString());
+  WebString input_selector =
+      blink::WebScriptBindings::toWebString(args[0].As<v8::String>());
+  WebString output_selector = blink::canonicalizeSelector(
+      input_selector, blink::WebSelectorTypeCompound);
+  args.GetReturnValue().Set(blink::WebScriptBindings::toV8String(
+      output_selector, context()->v8_context()->GetIsolate()));
+}
+
+}  // namespace extensions
diff --git a/extensions/renderer/css_native_handler.h b/extensions/renderer/css_native_handler.h
new file mode 100644
index 0000000..c3d1bc3
--- /dev/null
+++ b/extensions/renderer/css_native_handler.h
@@ -0,0 +1,28 @@
+// 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.
+
+#ifndef EXTENSIONS_RENDERER_CSS_NATIVE_HANDLER_H_
+#define EXTENSIONS_RENDERER_CSS_NATIVE_HANDLER_H_
+
+#include "extensions/renderer/object_backed_native_handler.h"
+
+namespace extensions {
+class ScriptContext;
+
+class CssNativeHandler : public ObjectBackedNativeHandler {
+ public:
+  explicit CssNativeHandler(ScriptContext* context);
+
+ private:
+  // Expects one string argument that's a comma-separated list of compound CSS
+  // selectors (http://dev.w3.org/csswg/selectors4/#compound), and returns its
+  // Blink-canonicalized form. If the selector is invalid, returns an empty
+  // string.
+  void CanonicalizeCompoundSelector(
+      const v8::FunctionCallbackInfo<v8::Value>& args);
+};
+
+}  // namespace extensions
+
+#endif  // EXTENSIONS_RENDERER_CSS_NATIVE_HANDLER_H_
diff --git a/extensions/renderer/document_custom_bindings.cc b/extensions/renderer/document_custom_bindings.cc
new file mode 100644
index 0000000..edaed98
--- /dev/null
+++ b/extensions/renderer/document_custom_bindings.cc
@@ -0,0 +1,42 @@
+// 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.
+
+#include "extensions/renderer/document_custom_bindings.h"
+
+#include <string>
+
+#include "base/bind.h"
+#include "extensions/renderer/script_context.h"
+#include "third_party/WebKit/public/web/WebDocument.h"
+#include "third_party/WebKit/public/web/WebFrame.h"
+#include "v8/include/v8.h"
+
+namespace extensions {
+
+DocumentCustomBindings::DocumentCustomBindings(ScriptContext* context)
+    : ObjectBackedNativeHandler(context) {
+  RouteFunction("RegisterElement",
+                base::Bind(&DocumentCustomBindings::RegisterElement,
+                           base::Unretained(this)));
+}
+
+// Attach an event name to an object.
+void DocumentCustomBindings::RegisterElement(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  if (args.Length() != 2 || !args[0]->IsString() || !args[1]->IsObject()) {
+    NOTREACHED();
+    return;
+  }
+
+  std::string element_name(*v8::String::Utf8Value(args[0]));
+  v8::Local<v8::Object> options = args[1]->ToObject();
+
+  blink::WebExceptionCode ec = 0;
+  blink::WebDocument document = context()->web_frame()->document();
+  v8::Handle<v8::Value> constructor = document.registerEmbedderCustomElement(
+      blink::WebString::fromUTF8(element_name), options, ec);
+  args.GetReturnValue().Set(constructor);
+}
+
+}  // namespace extensions
diff --git a/extensions/renderer/document_custom_bindings.h b/extensions/renderer/document_custom_bindings.h
new file mode 100644
index 0000000..6c07eab
--- /dev/null
+++ b/extensions/renderer/document_custom_bindings.h
@@ -0,0 +1,25 @@
+// 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.
+
+#ifndef EXTENSIONS_RENDERER_DOCUMENT_CUSTOM_BINDINGS_H_
+#define EXTENSIONS_RENDERER_DOCUMENT_CUSTOM_BINDINGS_H_
+
+#include "extensions/renderer/object_backed_native_handler.h"
+
+namespace extensions {
+class ScriptContext;
+
+// Implements custom bindings for document-level operations.
+class DocumentCustomBindings : public ObjectBackedNativeHandler {
+ public:
+  DocumentCustomBindings(ScriptContext* context);
+
+ private:
+  // Registers the provided element as a custom element in Blink.
+  void RegisterElement(const v8::FunctionCallbackInfo<v8::Value>& args);
+};
+
+}  // namespace extensions
+
+#endif  // EXTENSIONS_RENDERER_DOCUMENT_CUSTOM_BINDINGS_H_
diff --git a/extensions/renderer/event_bindings.cc b/extensions/renderer/event_bindings.cc
index 0e675ee..9446595 100644
--- a/extensions/renderer/event_bindings.cc
+++ b/extensions/renderer/event_bindings.cc
@@ -53,272 +53,257 @@
 
 base::LazyInstance<EventFilter> g_event_filter = LAZY_INSTANCE_INITIALIZER;
 
-// TODO(koz): Merge this into EventBindings.
-class ExtensionImpl : public ObjectBackedNativeHandler {
- public:
-  explicit ExtensionImpl(Dispatcher* dispatcher, ScriptContext* context)
-      : ObjectBackedNativeHandler(context), dispatcher_(dispatcher) {
-    RouteFunction(
-        "AttachEvent",
-        base::Bind(&ExtensionImpl::AttachEvent, base::Unretained(this)));
-    RouteFunction(
-        "DetachEvent",
-        base::Bind(&ExtensionImpl::DetachEvent, base::Unretained(this)));
-    RouteFunction("AttachFilteredEvent",
-                  base::Bind(&ExtensionImpl::AttachFilteredEvent,
-                             base::Unretained(this)));
-    RouteFunction("DetachFilteredEvent",
-                  base::Bind(&ExtensionImpl::DetachFilteredEvent,
-                             base::Unretained(this)));
-    RouteFunction("MatchAgainstEventFilter",
-                  base::Bind(&ExtensionImpl::MatchAgainstEventFilter,
-                             base::Unretained(this)));
+bool IsLazyBackgroundPage(content::RenderView* render_view,
+                          const Extension* extension) {
+  if (!render_view)
+    return false;
+  ExtensionHelper* helper = ExtensionHelper::Get(render_view);
+  return (extension && BackgroundInfo::HasLazyBackgroundPage(extension) &&
+          helper->view_type() == VIEW_TYPE_EXTENSION_BACKGROUND_PAGE);
+}
+
+EventFilteringInfo ParseFromObject(v8::Handle<v8::Object> object,
+                                   v8::Isolate* isolate) {
+  EventFilteringInfo info;
+  v8::Handle<v8::String> url(v8::String::NewFromUtf8(isolate, "url"));
+  if (object->Has(url)) {
+    v8::Handle<v8::Value> url_value(object->Get(url));
+    info.SetURL(GURL(*v8::String::Utf8Value(url_value)));
   }
-
-  virtual ~ExtensionImpl() {}
-
-  // Attach an event name to an object.
-  void AttachEvent(const v8::FunctionCallbackInfo<v8::Value>& args) {
-    CHECK_EQ(1, args.Length());
-    CHECK(args[0]->IsString());
-
-    std::string event_name = *v8::String::Utf8Value(args[0]->ToString());
-
-    if (!dispatcher_->CheckContextAccessToExtensionAPI(event_name, context()))
-      return;
-
-    std::string extension_id = context()->GetExtensionID();
-    EventListenerCounts& listener_counts =
-        g_listener_counts.Get()[extension_id];
-    if (++listener_counts[event_name] == 1) {
-      content::RenderThread::Get()->Send(
-          new ExtensionHostMsg_AddListener(extension_id, event_name));
-    }
-
-    // This is called the first time the page has added a listener. Since
-    // the background page is the only lazy page, we know this is the first
-    // time this listener has been registered.
-    if (IsLazyBackgroundContext(context())) {
-      content::RenderThread::Get()->Send(
-          new ExtensionHostMsg_AddLazyListener(extension_id, event_name));
-    }
+  v8::Handle<v8::String> instance_id(
+      v8::String::NewFromUtf8(isolate, "instanceId"));
+  if (object->Has(instance_id)) {
+    v8::Handle<v8::Value> instance_id_value(object->Get(instance_id));
+    info.SetInstanceID(instance_id_value->IntegerValue());
   }
-
-  void DetachEvent(const v8::FunctionCallbackInfo<v8::Value>& args) {
-    CHECK_EQ(2, args.Length());
-    CHECK(args[0]->IsString());
-    CHECK(args[1]->IsBoolean());
-
-    std::string event_name = *v8::String::Utf8Value(args[0]);
-    bool is_manual = args[1]->BooleanValue();
-
-    std::string extension_id = context()->GetExtensionID();
-    EventListenerCounts& listener_counts =
-        g_listener_counts.Get()[extension_id];
-
-    if (--listener_counts[event_name] == 0) {
-      content::RenderThread::Get()->Send(
-          new ExtensionHostMsg_RemoveListener(extension_id, event_name));
-    }
-
-    // DetachEvent is called when the last listener for the context is
-    // removed. If the context is the background page, and it removes the
-    // last listener manually, then we assume that it is no longer interested
-    // in being awakened for this event.
-    if (is_manual && IsLazyBackgroundContext(context())) {
-      content::RenderThread::Get()->Send(
-          new ExtensionHostMsg_RemoveLazyListener(extension_id, event_name));
-    }
+  v8::Handle<v8::String> service_type(
+      v8::String::NewFromUtf8(isolate, "serviceType"));
+  if (object->Has(service_type)) {
+    v8::Handle<v8::Value> service_type_value(object->Get(service_type));
+    info.SetServiceType(*v8::String::Utf8Value(service_type_value));
   }
+  return info;
+}
 
-  // MatcherID AttachFilteredEvent(string event_name, object filter)
-  // event_name - Name of the event to attach.
-  // filter - Which instances of the named event are we interested in.
-  // returns the id assigned to the listener, which will be returned from calls
-  // to MatchAgainstEventFilter where this listener matches.
-  void AttachFilteredEvent(const v8::FunctionCallbackInfo<v8::Value>& args) {
-    CHECK_EQ(2, args.Length());
-    CHECK(args[0]->IsString());
-    CHECK(args[1]->IsObject());
+// Add a filter to |event_name| in |extension_id|, returning true if it
+// was the first filter for that event in that extension.
+bool AddFilter(const std::string& event_name,
+               const std::string& extension_id,
+               base::DictionaryValue* filter) {
+  FilteredEventListenerCounts& counts =
+      g_filtered_listener_counts.Get()[extension_id];
+  FilteredEventListenerCounts::iterator it = counts.find(event_name);
+  if (it == counts.end())
+    counts[event_name].reset(new ValueCounter);
 
-    std::string event_name = *v8::String::Utf8Value(args[0]);
+  int result = counts[event_name]->Add(*filter);
+  return 1 == result;
+}
 
-    // This method throws an exception if it returns false.
-    if (!dispatcher_->CheckContextAccessToExtensionAPI(event_name, context()))
-      return;
-
-    std::string extension_id = context()->GetExtensionID();
-    if (extension_id.empty()) {
-      args.GetReturnValue().Set(static_cast<int32_t>(-1));
-      return;
-    }
-
-    scoped_ptr<base::DictionaryValue> filter;
-    scoped_ptr<content::V8ValueConverter> converter(
-        content::V8ValueConverter::create());
-
-    base::DictionaryValue* filter_dict = NULL;
-    base::Value* filter_value =
-        converter->FromV8Value(args[1]->ToObject(), context()->v8_context());
-    if (!filter_value) {
-      args.GetReturnValue().Set(static_cast<int32_t>(-1));
-      return;
-    }
-    if (!filter_value->GetAsDictionary(&filter_dict)) {
-      delete filter_value;
-      args.GetReturnValue().Set(static_cast<int32_t>(-1));
-      return;
-    }
-
-    filter.reset(filter_dict);
-    EventFilter& event_filter = g_event_filter.Get();
-    int id = event_filter.AddEventMatcher(event_name,
-                                          ParseEventMatcher(filter.get()));
-
-    // Only send IPCs the first time a filter gets added.
-    if (AddFilter(event_name, extension_id, filter.get())) {
-      bool lazy = IsLazyBackgroundContext(context());
-      content::RenderThread::Get()->Send(
-          new ExtensionHostMsg_AddFilteredListener(
-              extension_id, event_name, *filter, lazy));
-    }
-
-    args.GetReturnValue().Set(static_cast<int32_t>(id));
-  }
-
-  // Add a filter to |event_name| in |extension_id|, returning true if it
-  // was the first filter for that event in that extension.
-  static bool AddFilter(const std::string& event_name,
-                        const std::string& extension_id,
-                        base::DictionaryValue* filter) {
-    FilteredEventListenerCounts& counts =
-        g_filtered_listener_counts.Get()[extension_id];
-    FilteredEventListenerCounts::iterator it = counts.find(event_name);
-    if (it == counts.end())
-      counts[event_name].reset(new ValueCounter);
-
-    int result = counts[event_name]->Add(*filter);
-    return 1 == result;
-  }
-
-  // Remove a filter from |event_name| in |extension_id|, returning true if it
-  // was the last filter for that event in that extension.
-  static bool RemoveFilter(const std::string& event_name,
-                           const std::string& extension_id,
-                           base::DictionaryValue* filter) {
-    FilteredEventListenerCounts& counts =
-        g_filtered_listener_counts.Get()[extension_id];
-    FilteredEventListenerCounts::iterator it = counts.find(event_name);
-    if (it == counts.end())
-      return false;
-    return 0 == it->second->Remove(*filter);
-  }
-
-  // void DetachFilteredEvent(int id, bool manual)
-  // id     - Id of the event to detach.
-  // manual - false if this is part of the extension unload process where all
-  //          listeners are automatically detached.
-  void DetachFilteredEvent(const v8::FunctionCallbackInfo<v8::Value>& args) {
-    CHECK_EQ(2, args.Length());
-    CHECK(args[0]->IsInt32());
-    CHECK(args[1]->IsBoolean());
-    bool is_manual = args[1]->BooleanValue();
-
-    std::string extension_id = context()->GetExtensionID();
-    if (extension_id.empty())
-      return;
-
-    int matcher_id = args[0]->Int32Value();
-    EventFilter& event_filter = g_event_filter.Get();
-    EventMatcher* event_matcher = event_filter.GetEventMatcher(matcher_id);
-
-    const std::string& event_name = event_filter.GetEventName(matcher_id);
-
-    // Only send IPCs the last time a filter gets removed.
-    if (RemoveFilter(event_name, extension_id, event_matcher->value())) {
-      bool lazy = is_manual && IsLazyBackgroundContext(context());
-      content::RenderThread::Get()->Send(
-          new ExtensionHostMsg_RemoveFilteredListener(
-              extension_id, event_name, *event_matcher->value(), lazy));
-    }
-
-    event_filter.RemoveEventMatcher(matcher_id);
-  }
-
-  void MatchAgainstEventFilter(
-      const v8::FunctionCallbackInfo<v8::Value>& args) {
-    v8::Isolate* isolate = args.GetIsolate();
-    typedef std::set<EventFilter::MatcherID> MatcherIDs;
-    EventFilter& event_filter = g_event_filter.Get();
-    std::string event_name = *v8::String::Utf8Value(args[0]->ToString());
-    EventFilteringInfo info = ParseFromObject(args[1]->ToObject(), isolate);
-    // Only match events routed to this context's RenderView or ones that don't
-    // have a routingId in their filter.
-    MatcherIDs matched_event_filters = event_filter.MatchEvent(
-        event_name, info, context()->GetRenderView()->GetRoutingID());
-    v8::Handle<v8::Array> array(
-        v8::Array::New(isolate, matched_event_filters.size()));
-    int i = 0;
-    for (MatcherIDs::iterator it = matched_event_filters.begin();
-         it != matched_event_filters.end();
-         ++it) {
-      array->Set(v8::Integer::New(isolate, i++),
-                 v8::Integer::New(isolate, *it));
-    }
-    args.GetReturnValue().Set(array);
-  }
-
-  static EventFilteringInfo ParseFromObject(v8::Handle<v8::Object> object,
-                                            v8::Isolate* isolate) {
-    EventFilteringInfo info;
-    v8::Handle<v8::String> url(v8::String::NewFromUtf8(isolate, "url"));
-    if (object->Has(url)) {
-      v8::Handle<v8::Value> url_value(object->Get(url));
-      info.SetURL(GURL(*v8::String::Utf8Value(url_value)));
-    }
-    v8::Handle<v8::String> instance_id(
-        v8::String::NewFromUtf8(isolate, "instanceId"));
-    if (object->Has(instance_id)) {
-      v8::Handle<v8::Value> instance_id_value(object->Get(instance_id));
-      info.SetInstanceID(instance_id_value->IntegerValue());
-    }
-    v8::Handle<v8::String> service_type(
-        v8::String::NewFromUtf8(isolate, "serviceType"));
-    if (object->Has(service_type)) {
-      v8::Handle<v8::Value> service_type_value(object->Get(service_type));
-      info.SetServiceType(*v8::String::Utf8Value(service_type_value));
-    }
-    return info;
-  }
-
- private:
-  static bool IsLazyBackgroundContext(ScriptContext* context) {
-    content::RenderView* render_view = context->GetRenderView();
-    if (!render_view)
-      return false;
-    ExtensionHelper* helper = ExtensionHelper::Get(render_view);
-    const Extension* extension = context->extension();
-    return (extension && BackgroundInfo::HasLazyBackgroundPage(extension) &&
-            helper->view_type() == VIEW_TYPE_EXTENSION_BACKGROUND_PAGE);
-  }
-
-  scoped_ptr<EventMatcher> ParseEventMatcher(
-      base::DictionaryValue* filter_dict) {
-    return scoped_ptr<EventMatcher>(new EventMatcher(
-        scoped_ptr<base::DictionaryValue>(filter_dict->DeepCopy()),
-        context()->GetRenderView()->GetRoutingID()));
-  }
-
-  // Not owned.
-  Dispatcher* dispatcher_;
-};
+// Remove a filter from |event_name| in |extension_id|, returning true if it
+// was the last filter for that event in that extension.
+bool RemoveFilter(const std::string& event_name,
+                  const std::string& extension_id,
+                  base::DictionaryValue* filter) {
+  FilteredEventListenerCounts& counts =
+      g_filtered_listener_counts.Get()[extension_id];
+  FilteredEventListenerCounts::iterator it = counts.find(event_name);
+  if (it == counts.end())
+    return false;
+  return 0 == it->second->Remove(*filter);
+}
 
 }  // namespace
 
-// static
-ObjectBackedNativeHandler* EventBindings::Create(Dispatcher* dispatcher,
-                                                 ScriptContext* context) {
-  return new ExtensionImpl(dispatcher, context);
+EventBindings::EventBindings(Dispatcher* dispatcher, ScriptContext* context)
+    : ObjectBackedNativeHandler(context), dispatcher_(dispatcher) {
+  RouteFunction(
+      "AttachEvent",
+      base::Bind(&EventBindings::AttachEvent, base::Unretained(this)));
+  RouteFunction(
+      "DetachEvent",
+      base::Bind(&EventBindings::DetachEvent, base::Unretained(this)));
+  RouteFunction(
+      "AttachFilteredEvent",
+      base::Bind(&EventBindings::AttachFilteredEvent, base::Unretained(this)));
+  RouteFunction(
+      "DetachFilteredEvent",
+      base::Bind(&EventBindings::DetachFilteredEvent, base::Unretained(this)));
+  RouteFunction("MatchAgainstEventFilter",
+                base::Bind(&EventBindings::MatchAgainstEventFilter,
+                           base::Unretained(this)));
+}
+
+EventBindings::~EventBindings() {}
+
+// Attach an event name to an object.
+void EventBindings::AttachEvent(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  CHECK_EQ(1, args.Length());
+  CHECK(args[0]->IsString());
+
+  std::string event_name = *v8::String::Utf8Value(args[0]->ToString());
+
+  if (!dispatcher_->CheckContextAccessToExtensionAPI(event_name, context()))
+    return;
+
+  std::string extension_id = context()->GetExtensionID();
+  EventListenerCounts& listener_counts = g_listener_counts.Get()[extension_id];
+  if (++listener_counts[event_name] == 1) {
+    content::RenderThread::Get()->Send(
+        new ExtensionHostMsg_AddListener(extension_id, event_name));
+  }
+
+  // This is called the first time the page has added a listener. Since
+  // the background page is the only lazy page, we know this is the first
+  // time this listener has been registered.
+  if (IsLazyBackgroundPage(context()->GetRenderView(),
+                           context()->extension())) {
+    content::RenderThread::Get()->Send(
+        new ExtensionHostMsg_AddLazyListener(extension_id, event_name));
+  }
+}
+
+void EventBindings::DetachEvent(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  CHECK_EQ(2, args.Length());
+  CHECK(args[0]->IsString());
+  CHECK(args[1]->IsBoolean());
+
+  std::string event_name = *v8::String::Utf8Value(args[0]);
+  bool is_manual = args[1]->BooleanValue();
+
+  std::string extension_id = context()->GetExtensionID();
+  EventListenerCounts& listener_counts = g_listener_counts.Get()[extension_id];
+
+  if (--listener_counts[event_name] == 0) {
+    content::RenderThread::Get()->Send(
+        new ExtensionHostMsg_RemoveListener(extension_id, event_name));
+  }
+
+  // DetachEvent is called when the last listener for the context is
+  // removed. If the context is the background page, and it removes the
+  // last listener manually, then we assume that it is no longer interested
+  // in being awakened for this event.
+  if (is_manual && IsLazyBackgroundPage(context()->GetRenderView(),
+                                        context()->extension())) {
+    content::RenderThread::Get()->Send(
+        new ExtensionHostMsg_RemoveLazyListener(extension_id, event_name));
+  }
+}
+
+// MatcherID AttachFilteredEvent(string event_name, object filter)
+// event_name - Name of the event to attach.
+// filter - Which instances of the named event are we interested in.
+// returns the id assigned to the listener, which will be returned from calls
+// to MatchAgainstEventFilter where this listener matches.
+void EventBindings::AttachFilteredEvent(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  CHECK_EQ(2, args.Length());
+  CHECK(args[0]->IsString());
+  CHECK(args[1]->IsObject());
+
+  std::string event_name = *v8::String::Utf8Value(args[0]);
+
+  // This method throws an exception if it returns false.
+  if (!dispatcher_->CheckContextAccessToExtensionAPI(event_name, context()))
+    return;
+
+  std::string extension_id = context()->GetExtensionID();
+  if (extension_id.empty()) {
+    args.GetReturnValue().Set(static_cast<int32_t>(-1));
+    return;
+  }
+
+  scoped_ptr<base::DictionaryValue> filter;
+  scoped_ptr<content::V8ValueConverter> converter(
+      content::V8ValueConverter::create());
+
+  base::DictionaryValue* filter_dict = NULL;
+  base::Value* filter_value =
+      converter->FromV8Value(args[1]->ToObject(), context()->v8_context());
+  if (!filter_value) {
+    args.GetReturnValue().Set(static_cast<int32_t>(-1));
+    return;
+  }
+  if (!filter_value->GetAsDictionary(&filter_dict)) {
+    delete filter_value;
+    args.GetReturnValue().Set(static_cast<int32_t>(-1));
+    return;
+  }
+
+  filter.reset(filter_dict);
+  EventFilter& event_filter = g_event_filter.Get();
+  int id =
+      event_filter.AddEventMatcher(event_name, ParseEventMatcher(filter.get()));
+
+  // Only send IPCs the first time a filter gets added.
+  if (AddFilter(event_name, extension_id, filter.get())) {
+    bool lazy = IsLazyBackgroundPage(context()->GetRenderView(),
+                                     context()->extension());
+    content::RenderThread::Get()->Send(new ExtensionHostMsg_AddFilteredListener(
+        extension_id, event_name, *filter, lazy));
+  }
+
+  args.GetReturnValue().Set(static_cast<int32_t>(id));
+}
+
+void EventBindings::DetachFilteredEvent(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  CHECK_EQ(2, args.Length());
+  CHECK(args[0]->IsInt32());
+  CHECK(args[1]->IsBoolean());
+  bool is_manual = args[1]->BooleanValue();
+
+  std::string extension_id = context()->GetExtensionID();
+  if (extension_id.empty())
+    return;
+
+  int matcher_id = args[0]->Int32Value();
+  EventFilter& event_filter = g_event_filter.Get();
+  EventMatcher* event_matcher = event_filter.GetEventMatcher(matcher_id);
+
+  const std::string& event_name = event_filter.GetEventName(matcher_id);
+
+  // Only send IPCs the last time a filter gets removed.
+  if (RemoveFilter(event_name, extension_id, event_matcher->value())) {
+    bool lazy = is_manual && IsLazyBackgroundPage(context()->GetRenderView(),
+                                                  context()->extension());
+    content::RenderThread::Get()->Send(
+        new ExtensionHostMsg_RemoveFilteredListener(
+            extension_id, event_name, *event_matcher->value(), lazy));
+  }
+
+  event_filter.RemoveEventMatcher(matcher_id);
+}
+
+void EventBindings::MatchAgainstEventFilter(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  v8::Isolate* isolate = args.GetIsolate();
+  typedef std::set<EventFilter::MatcherID> MatcherIDs;
+  EventFilter& event_filter = g_event_filter.Get();
+  std::string event_name = *v8::String::Utf8Value(args[0]->ToString());
+  EventFilteringInfo info = ParseFromObject(args[1]->ToObject(), isolate);
+  // Only match events routed to this context's RenderView or ones that don't
+  // have a routingId in their filter.
+  MatcherIDs matched_event_filters = event_filter.MatchEvent(
+      event_name, info, context()->GetRenderView()->GetRoutingID());
+  v8::Handle<v8::Array> array(
+      v8::Array::New(isolate, matched_event_filters.size()));
+  int i = 0;
+  for (MatcherIDs::iterator it = matched_event_filters.begin();
+       it != matched_event_filters.end();
+       ++it) {
+    array->Set(v8::Integer::New(isolate, i++), v8::Integer::New(isolate, *it));
+  }
+  args.GetReturnValue().Set(array);
+}
+
+scoped_ptr<EventMatcher> EventBindings::ParseEventMatcher(
+    base::DictionaryValue* filter_dict) {
+  return scoped_ptr<EventMatcher>(new EventMatcher(
+      scoped_ptr<base::DictionaryValue>(filter_dict->DeepCopy()),
+      context()->GetRenderView()->GetRoutingID()));
 }
 
 }  // namespace extensions
diff --git a/extensions/renderer/event_bindings.h b/extensions/renderer/event_bindings.h
index 370724d..b99c00d 100644
--- a/extensions/renderer/event_bindings.h
+++ b/extensions/renderer/event_bindings.h
@@ -5,18 +5,55 @@
 #ifndef EXTENSIONS_RENDERER_EVENT_BINDINGS_H_
 #define EXTENSIONS_RENDERER_EVENT_BINDINGS_H_
 
+#include "extensions/renderer/object_backed_native_handler.h"
 #include "v8/include/v8.h"
 
+namespace base {
+class DictionaryValue;
+}
+
 namespace extensions {
 class Dispatcher;
-class ObjectBackedNativeHandler;
-class ScriptContext;
+class EventFilter;
+class EventFilteringInfo;
+class EventMatcher;
 
 // This class deals with the javascript bindings related to Event objects.
-class EventBindings {
+class EventBindings : public ObjectBackedNativeHandler {
  public:
-  static ObjectBackedNativeHandler* Create(Dispatcher* dispatcher,
-                                           ScriptContext* context);
+  EventBindings(Dispatcher* dispatcher, ScriptContext* context);
+  virtual ~EventBindings();
+
+ private:
+  // Attach an event name to an object.
+  // |event_name| The name of the event to attach.
+  void AttachEvent(const v8::FunctionCallbackInfo<v8::Value>& args);
+
+  // Detach an event name from an object.
+  // |event_name| The name of the event to stop listening to.
+  // |is_manual| True if this detach was done by the user via removeListener()
+  // as opposed to automatically during shutdown, in which case we should inform
+  // the browser we are no longer interested in that event.
+  void DetachEvent(const v8::FunctionCallbackInfo<v8::Value>& args);
+
+  // MatcherID AttachFilteredEvent(string event_name, object filter)
+  // |event_name| Name of the event to attach.
+  // |filter| Which instances of the named event are we interested in.
+  // returns the id assigned to the listener, which will be returned from calls
+  // to MatchAgainstEventFilter where this listener matches.
+  void AttachFilteredEvent(const v8::FunctionCallbackInfo<v8::Value>& args);
+
+  // void DetachFilteredEvent(int id, bool manual)
+  // id     - Id of the event to detach.
+  // manual - false if this is part of the extension unload process where all
+  //          listeners are automatically detached.
+  void DetachFilteredEvent(const v8::FunctionCallbackInfo<v8::Value>& args);
+
+  void MatchAgainstEventFilter(const v8::FunctionCallbackInfo<v8::Value>& args);
+
+  Dispatcher* dispatcher_;
+  scoped_ptr<EventMatcher> ParseEventMatcher(
+      base::DictionaryValue* filter_dict);
 };
 
 }  // namespace extensions
diff --git a/extensions/renderer/extension_groups.h b/extensions/renderer/extension_groups.h
new file mode 100644
index 0000000..531bba8
--- /dev/null
+++ b/extensions/renderer/extension_groups.h
@@ -0,0 +1,24 @@
+// 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.
+
+#ifndef EXTENSIONS_RENDERER_EXTENSION_GROUPS_H_
+#define EXTENSIONS_RENDERER_EXTENSION_GROUPS_H_
+
+namespace extensions {
+
+// A set of extension groups for use with blink::registerExtension and
+// WebFrame::ExecuteScriptInNewWorld to control which extensions get loaded
+// into which contexts.
+enum ExtensionGroups {
+  // Use this to mark extensions to be loaded into content scripts only.
+  EXTENSION_GROUP_CONTENT_SCRIPTS = 1,
+
+  // Use this in an isolated world for internal Chrome Translate.
+  // No extension APIs are available.
+  EXTENSION_GROUP_INTERNAL_TRANSLATE_SCRIPTS = 2,
+};
+
+}  // namespace extensions
+
+#endif  // EXTENSIONS_RENDERER_EXTENSION_GROUPS_H_
diff --git a/extensions/renderer/extensions_renderer_client.cc b/extensions/renderer/extensions_renderer_client.cc
new file mode 100644
index 0000000..6fb5a96
--- /dev/null
+++ b/extensions/renderer/extensions_renderer_client.cc
@@ -0,0 +1,23 @@
+// 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.
+
+#include "extensions/renderer/extensions_renderer_client.h"
+
+#include "base/basictypes.h"
+
+namespace extensions {
+
+namespace {
+
+ExtensionsRendererClient* g_client = NULL;
+
+}  // namespace
+
+ExtensionsRendererClient* ExtensionsRendererClient::Get() { return g_client; }
+
+void ExtensionsRendererClient::Set(ExtensionsRendererClient* client) {
+  g_client = client;
+}
+
+}  // namespace extensions
diff --git a/extensions/renderer/extensions_renderer_client.h b/extensions/renderer/extensions_renderer_client.h
new file mode 100644
index 0000000..b8f5255
--- /dev/null
+++ b/extensions/renderer/extensions_renderer_client.h
@@ -0,0 +1,37 @@
+// 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.
+
+#ifndef EXTENSIONS_RENDERER_EXTENSIONS_RENDERER_CLIENT_H_
+#define EXTENSIONS_RENDERER_EXTENSIONS_RENDERER_CLIENT_H_
+
+namespace extensions {
+
+// Interface to allow the extensions module to make render-process-specific
+// queries of the embedder. Should be Set() once in the render process.
+//
+// NOTE: Methods that do not require knowledge of renderer concepts should be
+// added in ExtensionsClient (extensions/common/extensions_client.h) even if
+// they are only used in the renderer process.
+class ExtensionsRendererClient {
+ public:
+  virtual ~ExtensionsRendererClient() {}
+
+  // Returns true if the current render process was launched incognito.
+  virtual bool IsIncognitoProcess() const = 0;
+
+  // Returns the lowest isolated world ID available to extensions.
+  // Must be greater than 0. See blink::WebFrame::executeScriptInIsolatedWorld
+  // (third_party/WebKit/public/web/WebFrame.h) for additional context.
+  virtual int GetLowestIsolatedWorldId() const = 0;
+
+  // Returns the single instance of |this|.
+  static ExtensionsRendererClient* Get();
+
+  // Initialize the single instance.
+  static void Set(ExtensionsRendererClient* client);
+};
+
+}  // namespace extensions
+
+#endif  // EXTENSIONS_RENDERER_EXTENSIONS_RENDERER_CLIENT_H_
diff --git a/extensions/renderer/file_system_natives.cc b/extensions/renderer/file_system_natives.cc
new file mode 100644
index 0000000..94f8d21
--- /dev/null
+++ b/extensions/renderer/file_system_natives.cc
@@ -0,0 +1,152 @@
+// 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.
+
+#include "extensions/renderer/file_system_natives.h"
+
+#include <string>
+
+#include "extensions/common/constants.h"
+#include "extensions/renderer/script_context.h"
+#include "third_party/WebKit/public/platform/WebString.h"
+#include "third_party/WebKit/public/web/WebDOMError.h"
+#include "third_party/WebKit/public/web/WebDOMFileSystem.h"
+#include "third_party/WebKit/public/web/WebLocalFrame.h"
+#include "webkit/common/fileapi/file_system_types.h"
+#include "webkit/common/fileapi/file_system_util.h"
+
+namespace extensions {
+
+FileSystemNatives::FileSystemNatives(ScriptContext* context)
+    : ObjectBackedNativeHandler(context) {
+  RouteFunction(
+      "GetFileEntry",
+      base::Bind(&FileSystemNatives::GetFileEntry, base::Unretained(this)));
+  RouteFunction("GetIsolatedFileSystem",
+                base::Bind(&FileSystemNatives::GetIsolatedFileSystem,
+                           base::Unretained(this)));
+  RouteFunction("CrackIsolatedFileSystemName",
+                base::Bind(&FileSystemNatives::CrackIsolatedFileSystemName,
+                           base::Unretained(this)));
+  RouteFunction(
+      "GetDOMError",
+      base::Bind(&FileSystemNatives::GetDOMError, base::Unretained(this)));
+}
+
+void FileSystemNatives::GetIsolatedFileSystem(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  DCHECK(args.Length() == 1 || args.Length() == 2);
+  DCHECK(args[0]->IsString());
+  std::string file_system_id(*v8::String::Utf8Value(args[0]));
+  blink::WebLocalFrame* webframe =
+      blink::WebLocalFrame::frameForContext(context()->v8_context());
+  DCHECK(webframe);
+
+  GURL context_url =
+      extensions::ScriptContext::GetDataSourceURLForFrame(webframe);
+  CHECK(context_url.SchemeIs(extensions::kExtensionScheme));
+
+  std::string name(fileapi::GetIsolatedFileSystemName(context_url.GetOrigin(),
+                                                      file_system_id));
+
+  // The optional second argument is the subfolder within the isolated file
+  // system at which to root the DOMFileSystem we're returning to the caller.
+  std::string optional_root_name;
+  if (args.Length() == 2) {
+    DCHECK(args[1]->IsString());
+    optional_root_name = *v8::String::Utf8Value(args[1]);
+  }
+
+  GURL root_url(fileapi::GetIsolatedFileSystemRootURIString(
+      context_url.GetOrigin(), file_system_id, optional_root_name));
+
+  args.GetReturnValue().Set(
+      blink::WebDOMFileSystem::create(webframe,
+                                      blink::WebFileSystemTypeIsolated,
+                                      blink::WebString::fromUTF8(name),
+                                      root_url).toV8Value());
+}
+
+void FileSystemNatives::GetFileEntry(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  DCHECK(args.Length() == 5);
+  DCHECK(args[0]->IsString());
+  std::string type_string = *v8::String::Utf8Value(args[0]->ToString());
+  blink::WebFileSystemType type;
+  bool is_valid_type = fileapi::GetFileSystemPublicType(type_string, &type);
+  DCHECK(is_valid_type);
+  if (is_valid_type == false) {
+    return;
+  }
+
+  DCHECK(args[1]->IsString());
+  DCHECK(args[2]->IsString());
+  DCHECK(args[3]->IsString());
+  std::string file_system_name(*v8::String::Utf8Value(args[1]->ToString()));
+  GURL file_system_root_url(*v8::String::Utf8Value(args[2]->ToString()));
+  std::string file_path_string(*v8::String::Utf8Value(args[3]->ToString()));
+  base::FilePath file_path = base::FilePath::FromUTF8Unsafe(file_path_string);
+  DCHECK(fileapi::VirtualPath::IsAbsolute(file_path.value()));
+
+  DCHECK(args[4]->IsBoolean());
+  blink::WebDOMFileSystem::EntryType entry_type =
+      args[4]->BooleanValue() ? blink::WebDOMFileSystem::EntryTypeDirectory
+                              : blink::WebDOMFileSystem::EntryTypeFile;
+
+  blink::WebLocalFrame* webframe =
+      blink::WebLocalFrame::frameForContext(context()->v8_context());
+  DCHECK(webframe);
+  args.GetReturnValue().Set(
+      blink::WebDOMFileSystem::create(
+          webframe,
+          type,
+          blink::WebString::fromUTF8(file_system_name),
+          file_system_root_url)
+          .createV8Entry(blink::WebString::fromUTF8(file_path_string),
+                         entry_type));
+}
+
+void FileSystemNatives::CrackIsolatedFileSystemName(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  DCHECK_EQ(args.Length(), 1);
+  DCHECK(args[0]->IsString());
+  std::string filesystem_name = *v8::String::Utf8Value(args[0]->ToString());
+  std::string filesystem_id;
+  if (!fileapi::CrackIsolatedFileSystemName(filesystem_name, &filesystem_id))
+    return;
+
+  args.GetReturnValue().Set(v8::String::NewFromUtf8(args.GetIsolate(),
+                                                    filesystem_id.c_str(),
+                                                    v8::String::kNormalString,
+                                                    filesystem_id.size()));
+}
+
+void FileSystemNatives::GetDOMError(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  if (args.Length() != 2) {
+    NOTREACHED();
+    return;
+  }
+  if (!args[0]->IsString()) {
+    NOTREACHED();
+    return;
+  }
+  if (!args[1]->IsString()) {
+    NOTREACHED();
+    return;
+  }
+
+  std::string name(*v8::String::Utf8Value(args[0]));
+  if (name.empty()) {
+    NOTREACHED();
+    return;
+  }
+  std::string message(*v8::String::Utf8Value(args[1]));
+  // message is optional hence empty is fine.
+
+  blink::WebDOMError dom_error = blink::WebDOMError::create(
+      blink::WebString::fromUTF8(name), blink::WebString::fromUTF8(message));
+  args.GetReturnValue().Set(dom_error.toV8Value());
+}
+
+}  // namespace extensions
diff --git a/extensions/renderer/file_system_natives.h b/extensions/renderer/file_system_natives.h
new file mode 100644
index 0000000..8637326
--- /dev/null
+++ b/extensions/renderer/file_system_natives.h
@@ -0,0 +1,32 @@
+// 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.
+
+#ifndef EXTENSIONS_RENDERER_FILE_SYSTEM_NATIVES_H_
+#define EXTENSIONS_RENDERER_FILE_SYSTEM_NATIVES_H_
+
+#include "base/compiler_specific.h"
+#include "extensions/renderer/object_backed_native_handler.h"
+
+namespace extensions {
+class ScriptContext;
+
+// Custom bindings for the nativeFileSystem API.
+class FileSystemNatives : public ObjectBackedNativeHandler {
+ public:
+  explicit FileSystemNatives(ScriptContext* context);
+
+ private:
+  void GetFileEntry(const v8::FunctionCallbackInfo<v8::Value>& args);
+  void GetIsolatedFileSystem(const v8::FunctionCallbackInfo<v8::Value>& args);
+  void CrackIsolatedFileSystemName(
+      const v8::FunctionCallbackInfo<v8::Value>& args);
+  // Constructs a DOMError object to be used in JavaScript.
+  void GetDOMError(const v8::FunctionCallbackInfo<v8::Value>& args);
+
+  DISALLOW_COPY_AND_ASSIGN(FileSystemNatives);
+};
+
+}  // namespace extensions
+
+#endif  // EXTENSIONS_RENDERER_FILE_SYSTEM_NATIVES_H_
diff --git a/extensions/renderer/i18n_custom_bindings.cc b/extensions/renderer/i18n_custom_bindings.cc
new file mode 100644
index 0000000..9e99e13
--- /dev/null
+++ b/extensions/renderer/i18n_custom_bindings.cc
@@ -0,0 +1,96 @@
+// 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.
+
+#include "extensions/renderer/i18n_custom_bindings.h"
+
+#include "base/bind.h"
+#include "content/public/renderer/render_thread.h"
+#include "content/public/renderer/render_view.h"
+#include "extensions/common/extension_messages.h"
+#include "extensions/common/message_bundle.h"
+#include "extensions/renderer/script_context.h"
+
+namespace extensions {
+
+I18NCustomBindings::I18NCustomBindings(ScriptContext* context)
+    : ObjectBackedNativeHandler(context) {
+  RouteFunction(
+      "GetL10nMessage",
+      base::Bind(&I18NCustomBindings::GetL10nMessage, base::Unretained(this)));
+  RouteFunction("GetL10nUILanguage",
+                base::Bind(&I18NCustomBindings::GetL10nUILanguage,
+                           base::Unretained(this)));
+}
+
+void I18NCustomBindings::GetL10nMessage(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  if (args.Length() != 3 || !args[0]->IsString()) {
+    NOTREACHED() << "Bad arguments";
+    return;
+  }
+
+  std::string extension_id;
+  if (args[2]->IsNull() || !args[2]->IsString()) {
+    return;
+  } else {
+    extension_id = *v8::String::Utf8Value(args[2]->ToString());
+    if (extension_id.empty())
+      return;
+  }
+
+  L10nMessagesMap* l10n_messages = GetL10nMessagesMap(extension_id);
+  if (!l10n_messages) {
+    // Get the current RenderView so that we can send a routed IPC message
+    // from the correct source.
+    content::RenderView* renderview = context()->GetRenderView();
+    if (!renderview)
+      return;
+
+    L10nMessagesMap messages;
+    // A sync call to load message catalogs for current extension.
+    renderview->Send(
+        new ExtensionHostMsg_GetMessageBundle(extension_id, &messages));
+
+    // Save messages we got.
+    ExtensionToL10nMessagesMap& l10n_messages_map =
+        *GetExtensionToL10nMessagesMap();
+    l10n_messages_map[extension_id] = messages;
+
+    l10n_messages = GetL10nMessagesMap(extension_id);
+  }
+
+  std::string message_name = *v8::String::Utf8Value(args[0]);
+  std::string message =
+      MessageBundle::GetL10nMessage(message_name, *l10n_messages);
+
+  v8::Isolate* isolate = args.GetIsolate();
+  std::vector<std::string> substitutions;
+  if (args[1]->IsArray()) {
+    // chrome.i18n.getMessage("message_name", ["more", "params"]);
+    v8::Local<v8::Array> placeholders = v8::Local<v8::Array>::Cast(args[1]);
+    uint32_t count = placeholders->Length();
+    if (count > 9)
+      return;
+    for (uint32_t i = 0; i < count; ++i) {
+      substitutions.push_back(
+          *v8::String::Utf8Value(
+              placeholders->Get(v8::Integer::New(isolate, i))->ToString()));
+    }
+  } else if (args[1]->IsString()) {
+    // chrome.i18n.getMessage("message_name", "one param");
+    substitutions.push_back(*v8::String::Utf8Value(args[1]->ToString()));
+  }
+
+  args.GetReturnValue().Set(v8::String::NewFromUtf8(
+      isolate,
+      ReplaceStringPlaceholders(message, substitutions, NULL).c_str()));
+}
+
+void I18NCustomBindings::GetL10nUILanguage(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  args.GetReturnValue().Set(v8::String::NewFromUtf8(
+      args.GetIsolate(), content::RenderThread::Get()->GetLocale().c_str()));
+}
+
+}  // namespace extensions
diff --git a/extensions/renderer/i18n_custom_bindings.h b/extensions/renderer/i18n_custom_bindings.h
new file mode 100644
index 0000000..513547d
--- /dev/null
+++ b/extensions/renderer/i18n_custom_bindings.h
@@ -0,0 +1,25 @@
+// 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.
+
+#ifndef EXTENSIONS_RENDERER_I18N_CUSTOM_BINDINGS_H_
+#define EXTENSIONS_RENDERER_I18N_CUSTOM_BINDINGS_H_
+
+#include "extensions/renderer/object_backed_native_handler.h"
+
+namespace extensions {
+class ScriptContext;
+
+// Implements custom bindings for the i18n API.
+class I18NCustomBindings : public ObjectBackedNativeHandler {
+ public:
+  I18NCustomBindings(ScriptContext* context);
+
+ private:
+  void GetL10nMessage(const v8::FunctionCallbackInfo<v8::Value>& args);
+  void GetL10nUILanguage(const v8::FunctionCallbackInfo<v8::Value>& args);
+};
+
+}  // namespace extensions
+
+#endif  // EXTENSIONS_RENDERER_I18N_CUSTOM_BINDINGS_H_
diff --git a/extensions/renderer/id_generator_custom_bindings.cc b/extensions/renderer/id_generator_custom_bindings.cc
new file mode 100644
index 0000000..f9c593b
--- /dev/null
+++ b/extensions/renderer/id_generator_custom_bindings.cc
@@ -0,0 +1,29 @@
+// 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.
+
+#include "extensions/renderer/id_generator_custom_bindings.h"
+
+#include "base/bind.h"
+
+namespace extensions {
+
+IdGeneratorCustomBindings::IdGeneratorCustomBindings(ScriptContext* context)
+    : ObjectBackedNativeHandler(context) {
+  RouteFunction("GetNextId",
+                base::Bind(&IdGeneratorCustomBindings::GetNextId,
+                           base::Unretained(this)));
+}
+
+void IdGeneratorCustomBindings::GetNextId(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  static int32_t next_id = 0;
+  ++next_id;
+  // Make sure 0 is never returned because some APIs (particularly WebRequest)
+  // have special meaning for 0 IDs.
+  if (next_id == 0)
+    next_id = 1;
+  args.GetReturnValue().Set(next_id);
+}
+
+}  // namespace extensions
diff --git a/extensions/renderer/id_generator_custom_bindings.h b/extensions/renderer/id_generator_custom_bindings.h
new file mode 100644
index 0000000..b8d79f6
--- /dev/null
+++ b/extensions/renderer/id_generator_custom_bindings.h
@@ -0,0 +1,25 @@
+// 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.
+
+#ifndef EXTENSIONS_RENDERER_ID_GENERATOR_CUSTOM_BINDINGS_H_
+#define EXTENSIONS_RENDERER_ID_GENERATOR_CUSTOM_BINDINGS_H_
+
+#include "extensions/renderer/object_backed_native_handler.h"
+
+namespace extensions {
+class ScriptContext;
+
+// Implements function that can be used by JS layer to generate unique integer
+// identifiers.
+class IdGeneratorCustomBindings : public ObjectBackedNativeHandler {
+ public:
+  IdGeneratorCustomBindings(ScriptContext* context);
+
+ private:
+  void GetNextId(const v8::FunctionCallbackInfo<v8::Value>& args);
+};
+
+}  // namespace extensions
+
+#endif  // EXTENSIONS_RENDERER_ID_GENERATOR_CUSTOM_BINDINGS_H_
diff --git a/extensions/renderer/logging_native_handler.cc b/extensions/renderer/logging_native_handler.cc
new file mode 100644
index 0000000..9019d86
--- /dev/null
+++ b/extensions/renderer/logging_native_handler.cc
@@ -0,0 +1,102 @@
+// 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.
+
+#include "extensions/renderer/logging_native_handler.h"
+
+#include "base/logging.h"
+#include "base/strings/stringprintf.h"
+
+namespace extensions {
+
+LoggingNativeHandler::LoggingNativeHandler(ScriptContext* context)
+    : ObjectBackedNativeHandler(context) {
+  RouteFunction(
+      "DCHECK",
+      base::Bind(&LoggingNativeHandler::Dcheck, base::Unretained(this)));
+  RouteFunction(
+      "CHECK",
+      base::Bind(&LoggingNativeHandler::Check, base::Unretained(this)));
+  RouteFunction(
+      "DCHECK_IS_ON",
+      base::Bind(&LoggingNativeHandler::DcheckIsOn, base::Unretained(this)));
+  RouteFunction("LOG",
+                base::Bind(&LoggingNativeHandler::Log, base::Unretained(this)));
+  RouteFunction(
+      "WARNING",
+      base::Bind(&LoggingNativeHandler::Warning, base::Unretained(this)));
+}
+
+LoggingNativeHandler::~LoggingNativeHandler() {}
+
+void LoggingNativeHandler::Check(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  bool check_value;
+  std::string error_message;
+  ParseArgs(args, &check_value, &error_message);
+  CHECK(check_value) << error_message;
+}
+
+void LoggingNativeHandler::Dcheck(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  bool check_value;
+  std::string error_message;
+  ParseArgs(args, &check_value, &error_message);
+  DCHECK(check_value) << error_message;
+}
+
+void LoggingNativeHandler::DcheckIsOn(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  args.GetReturnValue().Set(DCHECK_IS_ON);
+}
+
+void LoggingNativeHandler::Log(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  CHECK_EQ(1, args.Length());
+  LOG(INFO) << *v8::String::Utf8Value(args[0]);
+}
+
+void LoggingNativeHandler::Warning(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  CHECK_EQ(1, args.Length());
+  LOG(WARNING) << *v8::String::Utf8Value(args[0]);
+}
+
+void LoggingNativeHandler::ParseArgs(
+    const v8::FunctionCallbackInfo<v8::Value>& args,
+    bool* check_value,
+    std::string* error_message) {
+  CHECK_LE(args.Length(), 2);
+  *check_value = args[0]->BooleanValue();
+  if (args.Length() == 2) {
+    *error_message = "Error: " + std::string(*v8::String::Utf8Value(args[1]));
+  }
+
+  v8::Handle<v8::StackTrace> stack_trace =
+      v8::StackTrace::CurrentStackTrace(args.GetIsolate(), 10);
+  if (stack_trace.IsEmpty() || stack_trace->GetFrameCount() <= 0) {
+    *error_message += "\n    <no stack trace>";
+  } else {
+    for (size_t i = 0; i < (size_t)stack_trace->GetFrameCount(); ++i) {
+      v8::Handle<v8::StackFrame> frame = stack_trace->GetFrame(i);
+      CHECK(!frame.IsEmpty());
+      *error_message += base::StringPrintf(
+          "\n    at %s (%s:%d:%d)",
+          ToStringOrDefault(frame->GetFunctionName(), "<anonymous>").c_str(),
+          ToStringOrDefault(frame->GetScriptName(), "<anonymous>").c_str(),
+          frame->GetLineNumber(),
+          frame->GetColumn());
+    }
+  }
+}
+
+std::string LoggingNativeHandler::ToStringOrDefault(
+    const v8::Handle<v8::String>& v8_string,
+    const std::string& dflt) {
+  if (v8_string.IsEmpty())
+    return dflt;
+  std::string ascii_value = *v8::String::Utf8Value(v8_string);
+  return ascii_value.empty() ? dflt : ascii_value;
+}
+
+}  // namespace extensions
diff --git a/extensions/renderer/logging_native_handler.h b/extensions/renderer/logging_native_handler.h
new file mode 100644
index 0000000..d307c11
--- /dev/null
+++ b/extensions/renderer/logging_native_handler.h
@@ -0,0 +1,56 @@
+// 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.
+
+#ifndef EXTENSIONS_RENDERER_LOGGING_NATIVE_HANDLER_H_
+#define EXTENSIONS_RENDERER_LOGGING_NATIVE_HANDLER_H_
+
+#include <string>
+
+#include "extensions/renderer/object_backed_native_handler.h"
+
+namespace extensions {
+class ScriptContext;
+
+// Exposes logging.h macros to JavaScript bindings.
+class LoggingNativeHandler : public ObjectBackedNativeHandler {
+ public:
+  explicit LoggingNativeHandler(ScriptContext* context);
+  virtual ~LoggingNativeHandler();
+
+  // Equivalent to CHECK(predicate) << message.
+  //
+  // void(predicate, message?)
+  void Check(const v8::FunctionCallbackInfo<v8::Value>& args);
+
+  // Equivalent to DCHECK(predicate) << message.
+  //
+  // void(predicate, message?)
+  void Dcheck(const v8::FunctionCallbackInfo<v8::Value>& args);
+
+  // Equivalent to DCHECK_IS_ON.
+  //
+  // bool()
+  void DcheckIsOn(const v8::FunctionCallbackInfo<v8::Value>& args);
+
+  // Equivalent to LOG(INFO) << message.
+  //
+  // void(message)
+  void Log(const v8::FunctionCallbackInfo<v8::Value>& args);
+
+  // Equivalent to LOG(WARNING) << message.
+  //
+  // void(message)
+  void Warning(const v8::FunctionCallbackInfo<v8::Value>& args);
+
+  void ParseArgs(const v8::FunctionCallbackInfo<v8::Value>& args,
+                 bool* check_value,
+                 std::string* error_message);
+
+  std::string ToStringOrDefault(const v8::Handle<v8::String>& v8_string,
+                                const std::string& dflt);
+};
+
+}  // namespace extensions
+
+#endif  // EXTENSIONS_RENDERER_LOGGING_NATIVE_HANDLER_H_
diff --git a/extensions/renderer/module_system.cc b/extensions/renderer/module_system.cc
index 98daa20..a10fabd 100644
--- a/extensions/renderer/module_system.cc
+++ b/extensions/renderer/module_system.cc
@@ -435,9 +435,14 @@
 
   // Delete the getter and set this field to |new_field| so the same object is
   // returned every time a certain API is accessed.
-  v8::Handle<v8::Object> object = info.This();
-  object->Delete(property);
-  object->Set(property, new_field);
+  v8::Handle<v8::Value> val = info.This();
+  if (val->IsObject()) {
+    v8::Handle<v8::Object> object = v8::Handle<v8::Object>::Cast(val);
+    object->Delete(property);
+    object->Set(property, new_field);
+  } else {
+    NOTREACHED();
+  }
   info.GetReturnValue().Set(new_field);
 }
 
diff --git a/extensions/renderer/object_backed_native_handler.cc b/extensions/renderer/object_backed_native_handler.cc
index 9b699bc..0c75ea0 100644
--- a/extensions/renderer/object_backed_native_handler.cc
+++ b/extensions/renderer/object_backed_native_handler.cc
@@ -57,16 +57,15 @@
   v8::HandleScope handle_scope(isolate);
   v8::Context::Scope context_scope(context_->v8_context());
 
-  v8::Persistent<v8::Object> data(isolate, v8::Object::New(isolate));
-  v8::Local<v8::Object> local_data = v8::Local<v8::Object>::New(isolate, data);
-  local_data->Set(
+  v8::Local<v8::Object> data = v8::Object::New(isolate);
+  data->Set(
       v8::String::NewFromUtf8(isolate, kHandlerFunction),
       v8::External::New(isolate, new HandlerFunction(handler_function)));
   v8::Handle<v8::FunctionTemplate> function_template =
-      v8::FunctionTemplate::New(isolate, Router, local_data);
+      v8::FunctionTemplate::New(isolate, Router, data);
   object_template_.NewHandle(isolate)
       ->Set(isolate, name.c_str(), function_template);
-  router_data_.Append(local_data);
+  router_data_.Append(data);
 }
 
 v8::Isolate* ObjectBackedNativeHandler::GetIsolate() const {
diff --git a/extensions/renderer/render_view_observer_natives.cc b/extensions/renderer/render_view_observer_natives.cc
new file mode 100644
index 0000000..cd26982
--- /dev/null
+++ b/extensions/renderer/render_view_observer_natives.cc
@@ -0,0 +1,77 @@
+// 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.
+
+#include "extensions/renderer/render_view_observer_natives.h"
+
+#include "content/public/renderer/render_view.h"
+#include "content/public/renderer/render_view_observer.h"
+#include "extensions/common/extension_api.h"
+#include "extensions/renderer/script_context.h"
+#include "third_party/WebKit/public/web/WebFrame.h"
+#include "third_party/WebKit/public/web/WebScopedMicrotaskSuppression.h"
+
+namespace extensions {
+
+namespace {
+
+// Deletes itself when done.
+class LoadWatcher : public content::RenderViewObserver {
+ public:
+  LoadWatcher(ScriptContext* context,
+              content::RenderView* view,
+              v8::Handle<v8::Function> cb)
+      : content::RenderViewObserver(view), context_(context), callback_(cb) {}
+
+  virtual void DidCreateDocumentElement(blink::WebLocalFrame* frame) OVERRIDE {
+    CallbackAndDie(true);
+  }
+
+  virtual void DidFailProvisionalLoad(blink::WebLocalFrame* frame,
+                                      const blink::WebURLError& error)
+      OVERRIDE {
+    CallbackAndDie(false);
+  }
+
+ private:
+  void CallbackAndDie(bool succeeded) {
+    v8::Isolate* isolate = context_->isolate();
+    v8::HandleScope handle_scope(isolate);
+    v8::Handle<v8::Value> args[] = {v8::Boolean::New(isolate, succeeded)};
+    context_->CallFunction(callback_.NewHandle(isolate), 1, args);
+    delete this;
+  }
+
+  ScriptContext* context_;
+  ScopedPersistent<v8::Function> callback_;
+  DISALLOW_COPY_AND_ASSIGN(LoadWatcher);
+};
+}  // namespace
+
+RenderViewObserverNatives::RenderViewObserverNatives(ScriptContext* context)
+    : ObjectBackedNativeHandler(context) {
+  RouteFunction("OnDocumentElementCreated",
+                base::Bind(&RenderViewObserverNatives::OnDocumentElementCreated,
+                           base::Unretained(this)));
+}
+
+void RenderViewObserverNatives::OnDocumentElementCreated(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  CHECK(args.Length() == 2);
+  CHECK(args[0]->IsInt32());
+  CHECK(args[1]->IsFunction());
+
+  int view_id = args[0]->Int32Value();
+
+  content::RenderView* view = content::RenderView::FromRoutingID(view_id);
+  if (!view) {
+    LOG(WARNING) << "No render view found to register LoadWatcher.";
+    return;
+  }
+
+  new LoadWatcher(context(), view, args[1].As<v8::Function>());
+
+  args.GetReturnValue().Set(true);
+}
+
+}  // namespace extensions
diff --git a/extensions/renderer/render_view_observer_natives.h b/extensions/renderer/render_view_observer_natives.h
new file mode 100644
index 0000000..849212d
--- /dev/null
+++ b/extensions/renderer/render_view_observer_natives.h
@@ -0,0 +1,28 @@
+// 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.
+
+#ifndef EXTENSIONS_RENDERER_RENDER_VIEW_OBSERVER_NATIVES_H_
+#define EXTENSIONS_RENDERER_RENDER_VIEW_OBSERVER_NATIVES_H_
+
+#include "extensions/renderer/object_backed_native_handler.h"
+
+namespace extensions {
+class ScriptContext;
+
+// Native functions for JS to run callbacks upon RenderView events.
+class RenderViewObserverNatives : public ObjectBackedNativeHandler {
+ public:
+  RenderViewObserverNatives(ScriptContext* context);
+
+ private:
+  // Runs a callback upon creation of new document element inside a render view
+  // (document.documentElement).
+  void OnDocumentElementCreated(
+      const v8::FunctionCallbackInfo<v8::Value>& args);
+  DISALLOW_COPY_AND_ASSIGN(RenderViewObserverNatives);
+};
+
+}  // namespace extensions
+
+#endif  // EXTENSIONS_RENDERER_RENDER_VIEW_OBSERVER_NATIVES_H_
diff --git a/extensions/renderer/script_context_set.cc b/extensions/renderer/script_context_set.cc
new file mode 100644
index 0000000..5ee9db4
--- /dev/null
+++ b/extensions/renderer/script_context_set.cc
@@ -0,0 +1,124 @@
+// 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.
+
+#include "extensions/renderer/script_context_set.h"
+
+#include "base/message_loop/message_loop.h"
+#include "content/public/renderer/render_view.h"
+#include "extensions/common/extension.h"
+#include "extensions/renderer/script_context.h"
+#include "v8/include/v8.h"
+
+namespace extensions {
+
+ScriptContextSet::ScriptContextSet() {
+}
+ScriptContextSet::~ScriptContextSet() {
+}
+
+int ScriptContextSet::size() const {
+  return static_cast<int>(contexts_.size());
+}
+
+void ScriptContextSet::Add(ScriptContext* context) {
+#if DCHECK_IS_ON
+  // It's OK to insert the same context twice, but we should only ever have
+  // one ScriptContext per v8::Context.
+  for (ContextSet::iterator iter = contexts_.begin(); iter != contexts_.end();
+       ++iter) {
+    ScriptContext* candidate = *iter;
+    if (candidate != context)
+      DCHECK(candidate->v8_context() != context->v8_context());
+  }
+#endif
+  contexts_.insert(context);
+}
+
+void ScriptContextSet::Remove(ScriptContext* context) {
+  if (contexts_.erase(context)) {
+    context->Invalidate();
+    base::MessageLoop::current()->DeleteSoon(FROM_HERE, context);
+  }
+}
+
+ScriptContextSet::ContextSet ScriptContextSet::GetAll() const {
+  return contexts_;
+}
+
+ScriptContext* ScriptContextSet::GetCurrent() const {
+  v8::Isolate* isolate = v8::Isolate::GetCurrent();
+  return isolate->InContext() ? GetByV8Context(isolate->GetCurrentContext())
+                              : NULL;
+}
+
+ScriptContext* ScriptContextSet::GetCalling() const {
+  v8::Isolate* isolate = v8::Isolate::GetCurrent();
+  v8::Local<v8::Context> calling = isolate->GetCallingContext();
+  return calling.IsEmpty() ? NULL : GetByV8Context(calling);
+}
+
+ScriptContext* ScriptContextSet::GetByV8Context(
+    v8::Handle<v8::Context> v8_context) const {
+  for (ContextSet::const_iterator iter = contexts_.begin();
+       iter != contexts_.end();
+       ++iter) {
+    if ((*iter)->v8_context() == v8_context)
+      return *iter;
+  }
+
+  return NULL;
+}
+
+void ScriptContextSet::ForEach(
+    const std::string& extension_id,
+    content::RenderView* render_view,
+    const base::Callback<void(ScriptContext*)>& callback) const {
+  // We copy the context list, because calling into javascript may modify it
+  // out from under us.
+  ContextSet contexts = GetAll();
+
+  for (ContextSet::iterator it = contexts.begin(); it != contexts.end(); ++it) {
+    ScriptContext* context = *it;
+
+    // For the same reason as above, contexts may become invalid while we run.
+    if (!context->is_valid())
+      continue;
+
+    if (!extension_id.empty()) {
+      const Extension* extension = context->extension();
+      if (!extension || (extension_id != extension->id()))
+        continue;
+    }
+
+    content::RenderView* context_render_view = context->GetRenderView();
+    if (!context_render_view)
+      continue;
+
+    if (render_view && render_view != context_render_view)
+      continue;
+
+    callback.Run(context);
+  }
+}
+
+ScriptContextSet::ContextSet ScriptContextSet::OnExtensionUnloaded(
+    const std::string& extension_id) {
+  ContextSet contexts = GetAll();
+  ContextSet removed;
+
+  // Clean up contexts belonging to the unloaded extension. This is done so
+  // that content scripts (which remain injected into the page) don't continue
+  // receiving events and sending messages.
+  for (ContextSet::iterator it = contexts.begin(); it != contexts.end(); ++it) {
+    if ((*it)->extension() && (*it)->extension()->id() == extension_id) {
+      (*it)->DispatchOnUnloadEvent();
+      removed.insert(*it);
+      Remove(*it);
+    }
+  }
+
+  return removed;
+}
+
+}  // namespace extensions
diff --git a/extensions/renderer/script_context_set.h b/extensions/renderer/script_context_set.h
new file mode 100644
index 0000000..a6be82d
--- /dev/null
+++ b/extensions/renderer/script_context_set.h
@@ -0,0 +1,90 @@
+// 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.
+
+#ifndef EXTENSIONS_RENDERER_SCRIPT_CONTEXT_SET_H_
+#define EXTENSIONS_RENDERER_SCRIPT_CONTEXT_SET_H_
+
+#include <set>
+#include <string>
+
+#include "base/basictypes.h"
+#include "base/bind.h"
+#include "v8/include/v8.h"
+
+class GURL;
+
+namespace base {
+class ListValue;
+}
+
+namespace content {
+class RenderView;
+}
+
+namespace v8 {
+class Context;
+}
+
+namespace extensions {
+class ScriptContext;
+
+// A container of ExtensionBindingsContext. Since calling JavaScript within a
+// context can cause any number of contexts to be created or destroyed, this
+// has additional smarts to help with the set changing underneath callers.
+class ScriptContextSet {
+ public:
+  ScriptContextSet();
+  ~ScriptContextSet();
+
+  int size() const;
+
+  // Takes ownership of |context|.
+  void Add(ScriptContext* context);
+
+  // If the specified context is contained in this set, remove it, then delete
+  // it asynchronously. After this call returns the context object will still
+  // be valid, but its frame() pointer will be cleared.
+  void Remove(ScriptContext* context);
+
+  // Returns a copy to protect against changes.
+  typedef std::set<ScriptContext*> ContextSet;
+  ContextSet GetAll() const;
+
+  // Gets the ScriptContext corresponding to v8::Context::GetCurrent(), or
+  // NULL if no such context exists.
+  ScriptContext* GetCurrent() const;
+
+  // Gets the ScriptContext corresponding to v8::Context::GetCalling(), or
+  // NULL if no such context exists.
+  ScriptContext* GetCalling() const;
+
+  // Gets the ScriptContext corresponding to the specified
+  // v8::Context or NULL if no such context exists.
+  ScriptContext* GetByV8Context(v8::Handle<v8::Context> context) const;
+
+  // Synchronously runs |callback| with each ScriptContext that belongs to
+  // |extension_id| in |render_view|.
+  //
+  // |extension_id| may be "" to match all extensions.
+  // |render_view| may be NULL to match all render views.
+  void ForEach(const std::string& extension_id,
+               content::RenderView* render_view,
+               const base::Callback<void(ScriptContext*)>& callback) const;
+
+  // Cleans up contexts belonging to an unloaded extension.
+  //
+  // Returns the set of ScriptContexts that were removed as a result. These
+  // are safe to interact with until the end of the current event loop, since
+  // they're deleted asynchronously.
+  ContextSet OnExtensionUnloaded(const std::string& extension_id);
+
+ private:
+  ContextSet contexts_;
+
+  DISALLOW_COPY_AND_ASSIGN(ScriptContextSet);
+};
+
+}  // namespace extensions
+
+#endif  // EXTENSIONS_RENDERER_SCRIPT_CONTEXT_SET_H_
diff --git a/extensions/renderer/script_context_set_unittest.cc b/extensions/renderer/script_context_set_unittest.cc
new file mode 100644
index 0000000..48272f1
--- /dev/null
+++ b/extensions/renderer/script_context_set_unittest.cc
@@ -0,0 +1,56 @@
+// 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.
+
+#include "base/message_loop/message_loop.h"
+#include "extensions/common/extension.h"
+#include "extensions/common/features/feature.h"
+#include "extensions/renderer/script_context.h"
+#include "extensions/renderer/script_context_set.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/WebKit/public/web/WebFrame.h"
+#include "v8/include/v8.h"
+
+namespace extensions {
+
+TEST(ScriptContextSet, Lifecycle) {
+  base::MessageLoop loop;
+
+  ScriptContextSet context_set;
+
+  v8::Isolate* isolate = v8::Isolate::GetCurrent();
+  v8::HandleScope handle_scope(isolate);
+  v8::Handle<v8::Context> v8_context(v8::Context::New(isolate));
+
+  // Dirty hack, but we don't actually need the frame, and this is easier than
+  // creating a whole webview.
+  blink::WebFrame* frame = reinterpret_cast<blink::WebFrame*>(1);
+  const Extension* extension = NULL;
+  ScriptContext* context = new ScriptContext(
+      v8_context, frame, extension, Feature::BLESSED_EXTENSION_CONTEXT);
+
+  context_set.Add(context);
+  EXPECT_EQ(1u, context_set.GetAll().count(context));
+  EXPECT_EQ(context, context_set.GetByV8Context(context->v8_context()));
+
+  // Adding the same item multiple times should be OK and deduped.
+  context_set.Add(context);
+  EXPECT_EQ(1u, context_set.GetAll().count(context));
+
+  // GetAll() returns a copy so removing from one should not remove from others.
+  ScriptContextSet::ContextSet set_copy = context_set.GetAll();
+  EXPECT_EQ(1u, set_copy.count(context));
+
+  context_set.Remove(context);
+  EXPECT_EQ(0, context_set.size());
+  EXPECT_FALSE(context_set.GetByV8Context(context->v8_context()));
+  EXPECT_EQ(1u, set_copy.size());
+
+  // After removal, the context should be marked for destruction.
+  EXPECT_FALSE(context->web_frame());
+
+  // Run loop to do the actual deletion.
+  loop.RunUntilIdle();
+}
+
+}  // namespace extensions
diff --git a/extensions/renderer/send_request_natives.cc b/extensions/renderer/send_request_natives.cc
new file mode 100644
index 0000000..efe5def
--- /dev/null
+++ b/extensions/renderer/send_request_natives.cc
@@ -0,0 +1,80 @@
+// 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.
+
+#include "extensions/renderer/send_request_natives.h"
+
+#include "base/json/json_reader.h"
+#include "content/public/renderer/v8_value_converter.h"
+#include "extensions/renderer/request_sender.h"
+#include "extensions/renderer/script_context.h"
+
+using content::V8ValueConverter;
+
+namespace extensions {
+
+SendRequestNatives::SendRequestNatives(RequestSender* request_sender,
+                                       ScriptContext* context)
+    : ObjectBackedNativeHandler(context), request_sender_(request_sender) {
+  RouteFunction("GetNextRequestId",
+                base::Bind(&SendRequestNatives::GetNextRequestId,
+                           base::Unretained(this)));
+  RouteFunction(
+      "StartRequest",
+      base::Bind(&SendRequestNatives::StartRequest, base::Unretained(this)));
+  RouteFunction(
+      "GetGlobal",
+      base::Bind(&SendRequestNatives::GetGlobal, base::Unretained(this)));
+}
+
+void SendRequestNatives::GetNextRequestId(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  args.GetReturnValue().Set(
+      static_cast<int32_t>(request_sender_->GetNextRequestId()));
+}
+
+// Starts an API request to the browser, with an optional callback.  The
+// callback will be dispatched to EventBindings::HandleResponse.
+void SendRequestNatives::StartRequest(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  CHECK_EQ(6, args.Length());
+  std::string name = *v8::String::Utf8Value(args[0]);
+  int request_id = args[2]->Int32Value();
+  bool has_callback = args[3]->BooleanValue();
+  bool for_io_thread = args[4]->BooleanValue();
+  bool preserve_null_in_objects = args[5]->BooleanValue();
+
+  scoped_ptr<V8ValueConverter> converter(V8ValueConverter::create());
+
+  // See http://crbug.com/149880. The context menus APIs relies on this, but
+  // we shouldn't really be doing it (e.g. for the sake of the storage API).
+  converter->SetFunctionAllowed(true);
+
+  if (!preserve_null_in_objects)
+    converter->SetStripNullFromObjects(true);
+
+  scoped_ptr<base::Value> value_args(
+      converter->FromV8Value(args[1], context()->v8_context()));
+  if (!value_args.get() || !value_args->IsType(base::Value::TYPE_LIST)) {
+    NOTREACHED() << "Unable to convert args passed to StartRequest";
+    return;
+  }
+
+  request_sender_->StartRequest(
+      context(),
+      name,
+      request_id,
+      has_callback,
+      for_io_thread,
+      static_cast<base::ListValue*>(value_args.get()));
+}
+
+void SendRequestNatives::GetGlobal(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  CHECK_EQ(1, args.Length());
+  CHECK(args[0]->IsObject());
+  args.GetReturnValue().Set(
+      v8::Handle<v8::Object>::Cast(args[0])->CreationContext()->Global());
+}
+
+}  // namespace extensions
diff --git a/extensions/renderer/send_request_natives.h b/extensions/renderer/send_request_natives.h
new file mode 100644
index 0000000..cc0e6a0
--- /dev/null
+++ b/extensions/renderer/send_request_natives.h
@@ -0,0 +1,38 @@
+// 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.
+
+#ifndef EXTENSIONS_RENDERER_SEND_REQUEST_NATIVES_H_
+#define EXTENSIONS_RENDERER_SEND_REQUEST_NATIVES_H_
+
+#include "extensions/renderer/object_backed_native_handler.h"
+#include "v8/include/v8.h"
+
+namespace extensions {
+class RequestSender;
+class ScriptContext;
+
+// Native functions exposed to extensions via JS for calling API functions in
+// the browser.
+class SendRequestNatives : public ObjectBackedNativeHandler {
+ public:
+  SendRequestNatives(RequestSender* request_sender, ScriptContext* context);
+
+ private:
+  void GetNextRequestId(const v8::FunctionCallbackInfo<v8::Value>& args);
+
+  // Starts an API request to the browser, with an optional callback.  The
+  // callback will be dispatched to EventBindings::HandleResponse.
+  void StartRequest(const v8::FunctionCallbackInfo<v8::Value>& args);
+
+  // Gets a reference to an object's global object.
+  void GetGlobal(const v8::FunctionCallbackInfo<v8::Value>& args);
+
+  RequestSender* request_sender_;
+
+  DISALLOW_COPY_AND_ASSIGN(SendRequestNatives);
+};
+
+}  // namespace extensions
+
+#endif  // EXTENSIONS_RENDERER_SEND_REQUEST_NATIVES_H_
diff --git a/extensions/renderer/set_icon_natives.cc b/extensions/renderer/set_icon_natives.cc
new file mode 100644
index 0000000..c9a222f
--- /dev/null
+++ b/extensions/renderer/set_icon_natives.cc
@@ -0,0 +1,163 @@
+// 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.
+
+#include "extensions/renderer/set_icon_natives.h"
+
+#include <limits>
+
+#include "base/memory/scoped_ptr.h"
+#include "content/public/common/common_param_traits.h"
+#include "extensions/renderer/request_sender.h"
+#include "extensions/renderer/script_context.h"
+#include "ipc/ipc_message_utils.h"
+#include "third_party/skia/include/core/SkBitmap.h"
+
+namespace {
+
+const char* kImageSizeKeys[] = {"19", "38"};
+const char kInvalidDimensions[] = "ImageData has invalid dimensions.";
+const char kInvalidData[] = "ImageData data length does not match dimensions.";
+const char kNoMemory[] = "Chrome was unable to initialize icon.";
+
+}  // namespace
+
+namespace extensions {
+
+SetIconNatives::SetIconNatives(RequestSender* request_sender,
+                               ScriptContext* context)
+    : ObjectBackedNativeHandler(context), request_sender_(request_sender) {
+  RouteFunction(
+      "SetIconCommon",
+      base::Bind(&SetIconNatives::SetIconCommon, base::Unretained(this)));
+}
+
+bool SetIconNatives::ConvertImageDataToBitmapValue(
+    const v8::Local<v8::Object> image_data,
+    base::Value** bitmap_value) {
+  v8::Isolate* isolate = context()->v8_context()->GetIsolate();
+  v8::Local<v8::Object> data =
+      image_data->Get(v8::String::NewFromUtf8(isolate, "data"))->ToObject();
+  int width =
+      image_data->Get(v8::String::NewFromUtf8(isolate, "width"))->Int32Value();
+  int height =
+      image_data->Get(v8::String::NewFromUtf8(isolate, "height"))->Int32Value();
+
+  if (width <= 0 || height <= 0) {
+    isolate->ThrowException(v8::Exception::Error(
+        v8::String::NewFromUtf8(isolate, kInvalidDimensions)));
+    return false;
+  }
+
+  // We need to be able to safely check |data_length| == 4 * width * height
+  // without overflowing below.
+  int max_width = (std::numeric_limits<int>::max() / 4) / height;
+  if (width > max_width) {
+    isolate->ThrowException(v8::Exception::Error(
+        v8::String::NewFromUtf8(isolate, kInvalidDimensions)));
+    return false;
+  }
+
+  int data_length =
+      data->Get(v8::String::NewFromUtf8(isolate, "length"))->Int32Value();
+  if (data_length != 4 * width * height) {
+    isolate->ThrowException(
+        v8::Exception::Error(v8::String::NewFromUtf8(isolate, kInvalidData)));
+    return false;
+  }
+
+  SkBitmap bitmap;
+  bitmap.setConfig(SkBitmap::kARGB_8888_Config, width, height);
+  if (!bitmap.allocPixels()) {
+    isolate->ThrowException(
+        v8::Exception::Error(v8::String::NewFromUtf8(isolate, kNoMemory)));
+    return false;
+  }
+  bitmap.eraseARGB(0, 0, 0, 0);
+
+  uint32_t* pixels = bitmap.getAddr32(0, 0);
+  for (int t = 0; t < width * height; t++) {
+    // |data| is RGBA, pixels is ARGB.
+    pixels[t] = SkPreMultiplyColor(
+        ((data->Get(v8::Integer::New(isolate, 4 * t + 3))->Int32Value() & 0xFF)
+         << 24) |
+        ((data->Get(v8::Integer::New(isolate, 4 * t + 0))->Int32Value() & 0xFF)
+         << 16) |
+        ((data->Get(v8::Integer::New(isolate, 4 * t + 1))->Int32Value() & 0xFF)
+         << 8) |
+        ((data->Get(v8::Integer::New(isolate, 4 * t + 2))->Int32Value() & 0xFF)
+         << 0));
+  }
+
+  // Construct the Value object.
+  IPC::Message bitmap_pickle;
+  IPC::WriteParam(&bitmap_pickle, bitmap);
+  *bitmap_value = base::BinaryValue::CreateWithCopiedBuffer(
+      static_cast<const char*>(bitmap_pickle.data()), bitmap_pickle.size());
+
+  return true;
+}
+
+bool SetIconNatives::ConvertImageDataSetToBitmapValueSet(
+    const v8::FunctionCallbackInfo<v8::Value>& args,
+    base::DictionaryValue* bitmap_set_value) {
+  v8::Local<v8::Object> extension_args = args[1]->ToObject();
+  v8::Local<v8::Object> details =
+      extension_args->Get(v8::String::NewFromUtf8(args.GetIsolate(), "0"))
+          ->ToObject();
+  v8::Local<v8::Object> image_data_set =
+      details->Get(v8::String::NewFromUtf8(args.GetIsolate(), "imageData"))
+          ->ToObject();
+
+  DCHECK(bitmap_set_value);
+  for (size_t i = 0; i < arraysize(kImageSizeKeys); i++) {
+    if (!image_data_set->Has(
+            v8::String::NewFromUtf8(args.GetIsolate(), kImageSizeKeys[i])))
+      continue;
+    v8::Local<v8::Object> image_data =
+        image_data_set->Get(v8::String::NewFromUtf8(args.GetIsolate(),
+                                                    kImageSizeKeys[i]))
+            ->ToObject();
+    base::Value* image_data_bitmap = NULL;
+    if (!ConvertImageDataToBitmapValue(image_data, &image_data_bitmap))
+      return false;
+    bitmap_set_value->Set(kImageSizeKeys[i], image_data_bitmap);
+  }
+  return true;
+}
+
+void SetIconNatives::SetIconCommon(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  scoped_ptr<base::DictionaryValue> bitmap_set_value(
+      new base::DictionaryValue());
+  if (!ConvertImageDataSetToBitmapValueSet(args, bitmap_set_value.get()))
+    return;
+
+  v8::Local<v8::Object> extension_args = args[1]->ToObject();
+  v8::Local<v8::Object> details =
+      extension_args->Get(v8::String::NewFromUtf8(args.GetIsolate(), "0"))
+          ->ToObject();
+
+  base::DictionaryValue* dict = new base::DictionaryValue();
+  dict->Set("imageData", bitmap_set_value.release());
+
+  if (details->Has(v8::String::NewFromUtf8(args.GetIsolate(), "tabId"))) {
+    dict->SetInteger(
+        "tabId",
+        details->Get(v8::String::NewFromUtf8(args.GetIsolate(), "tabId"))
+            ->Int32Value());
+  }
+
+  base::ListValue list_value;
+  list_value.Append(dict);
+
+  std::string name = *v8::String::Utf8Value(args[0]);
+  int request_id = args[2]->Int32Value();
+  bool has_callback = args[3]->BooleanValue();
+  bool for_io_thread = args[4]->BooleanValue();
+
+  request_sender_->StartRequest(
+      context(), name, request_id, has_callback, for_io_thread, &list_value);
+}
+
+}  // namespace extensions
diff --git a/extensions/renderer/set_icon_natives.h b/extensions/renderer/set_icon_natives.h
new file mode 100644
index 0000000..e5129dd
--- /dev/null
+++ b/extensions/renderer/set_icon_natives.h
@@ -0,0 +1,40 @@
+// 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.
+
+#ifndef EXTENSIONS_RENDERER_SET_ICON_NATIVES_H_
+#define EXTENSIONS_RENDERER_SET_ICON_NATIVES_H_
+
+#include "extensions/renderer/object_backed_native_handler.h"
+#include "v8/include/v8.h"
+
+namespace base {
+class DictionaryValue;
+class Value;
+}
+
+namespace extensions {
+class RequestSender;
+class ScriptContext;
+
+// Functions exposed to extension JS to implement the setIcon extension API.
+class SetIconNatives : public ObjectBackedNativeHandler {
+ public:
+  SetIconNatives(RequestSender* request_sender, ScriptContext* context);
+
+ private:
+  bool ConvertImageDataToBitmapValue(const v8::Local<v8::Object> image_data,
+                                     base::Value** bitmap_value);
+  bool ConvertImageDataSetToBitmapValueSet(
+      const v8::FunctionCallbackInfo<v8::Value>& args,
+      base::DictionaryValue* bitmap_value);
+  void SetIconCommon(const v8::FunctionCallbackInfo<v8::Value>& args);
+
+  RequestSender* request_sender_;
+
+  DISALLOW_COPY_AND_ASSIGN(SetIconNatives);
+};
+
+}  // namespace extensions
+
+#endif  // EXTENSIONS_RENDERER_SET_ICON_NATIVES_H_
diff --git a/extensions/renderer/utils_native_handler.cc b/extensions/renderer/utils_native_handler.cc
new file mode 100644
index 0000000..5c8bf5d
--- /dev/null
+++ b/extensions/renderer/utils_native_handler.cc
@@ -0,0 +1,74 @@
+// 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.
+
+#include "extensions/renderer/utils_native_handler.h"
+
+#include "base/strings/stringprintf.h"
+#include "extensions/renderer/script_context.h"
+#include "third_party/WebKit/public/web/WebScopedMicrotaskSuppression.h"
+
+namespace extensions {
+
+UtilsNativeHandler::UtilsNativeHandler(ScriptContext* context)
+    : ObjectBackedNativeHandler(context) {
+  RouteFunction("createClassWrapper",
+                base::Bind(&UtilsNativeHandler::CreateClassWrapper,
+                           base::Unretained(this)));
+}
+
+UtilsNativeHandler::~UtilsNativeHandler() {}
+
+void UtilsNativeHandler::CreateClassWrapper(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  CHECK_EQ(2, args.Length());
+  CHECK(args[0]->IsString());
+  std::string name = *v8::String::Utf8Value(args[0]);
+  CHECK(args[1]->IsObject());
+  v8::Local<v8::Object> obj = args[1].As<v8::Object>();
+
+  v8::HandleScope handle_scope(GetIsolate());
+  // TODO(fsamuel): Consider moving the source wrapping to ModuleSystem.
+  v8::Handle<v8::String> source = v8::String::NewFromUtf8(
+      GetIsolate(),
+      base::StringPrintf(
+          "(function($Object, $Function, privates, cls) {"
+          "'use strict';\n"
+          "  return function %s() {\n"
+          "  var privateObj = $Object.create(cls.prototype);\n"
+          "  $Function.apply(cls, privateObj, arguments);\n"
+          "  privateObj.wrapper = this;\n"
+          "  privates(this).impl = privateObj;\n"
+          "}})",
+          name.c_str()).c_str());
+  v8::Handle<v8::Value> func_as_value = context()->module_system()->RunString(
+      source, v8::String::NewFromUtf8(GetIsolate(), name.c_str()));
+  if (func_as_value.IsEmpty() || func_as_value->IsUndefined()) {
+    args.GetReturnValue().SetUndefined();
+    return;
+  }
+
+  // TODO(fsamuel): Move privates from ModuleSystem to a shared location.
+  v8::Handle<v8::Object> natives(context()->module_system()->NewInstance());
+  CHECK(!natives.IsEmpty());  // this can happen if v8 has issues
+  v8::Handle<v8::Function> func = func_as_value.As<v8::Function>();
+  v8::Handle<v8::Value> func_args[] = {
+      context()->safe_builtins()->GetObjekt(),
+      context()->safe_builtins()->GetFunction(),
+      natives->Get(v8::String::NewFromUtf8(
+          GetIsolate(), "privates", v8::String::kInternalizedString)),
+      obj};
+  v8::Local<v8::Value> result;
+  {
+    v8::TryCatch try_catch;
+    try_catch.SetCaptureMessage(true);
+    result = context()->CallFunction(func, arraysize(func_args), func_args);
+    if (try_catch.HasCaught()) {
+      args.GetReturnValue().SetUndefined();
+      return;
+    }
+  }
+  args.GetReturnValue().Set(result);
+}
+
+}  // namespace extensions
diff --git a/extensions/renderer/utils_native_handler.h b/extensions/renderer/utils_native_handler.h
new file mode 100644
index 0000000..6fbc62d
--- /dev/null
+++ b/extensions/renderer/utils_native_handler.h
@@ -0,0 +1,29 @@
+// 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.
+
+#ifndef EXTENSIONS_RENDERER_UTILS_NATIVE_HANDLER_H_
+#define EXTENSIONS_RENDERER_UTILS_NATIVE_HANDLER_H_
+
+#include "extensions/renderer/object_backed_native_handler.h"
+
+namespace extensions {
+class ScriptContext;
+
+class UtilsNativeHandler : public ObjectBackedNativeHandler {
+ public:
+  explicit UtilsNativeHandler(ScriptContext* context);
+  virtual ~UtilsNativeHandler();
+
+ private:
+  // |args| consists of two arguments: a public class name, and a reference
+  // to the implementation class. CreateClassWrapper returns a new class
+  // that wraps the implementation, while hiding its members.
+  void CreateClassWrapper(const v8::FunctionCallbackInfo<v8::Value>& args);
+
+  DISALLOW_COPY_AND_ASSIGN(UtilsNativeHandler);
+};
+
+}  // namespace extensions
+
+#endif  // EXTENSIONS_RENDERER_UTILS_NATIVE_HANDLER_H_
diff --git a/extensions/renderer/v8_schema_registry.cc b/extensions/renderer/v8_schema_registry.cc
new file mode 100644
index 0000000..77a91f6
--- /dev/null
+++ b/extensions/renderer/v8_schema_registry.cc
@@ -0,0 +1,117 @@
+// 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.
+
+#include "extensions/renderer/v8_schema_registry.h"
+
+#include "base/logging.h"
+#include "base/values.h"
+#include "content/public/renderer/v8_value_converter.h"
+#include "extensions/common/extension_api.h"
+#include "extensions/renderer/object_backed_native_handler.h"
+#include "extensions/renderer/script_context.h"
+
+using content::V8ValueConverter;
+
+namespace extensions {
+
+namespace {
+
+class SchemaRegistryNativeHandler : public ObjectBackedNativeHandler {
+ public:
+  SchemaRegistryNativeHandler(V8SchemaRegistry* registry,
+                              scoped_ptr<ScriptContext> context)
+      : ObjectBackedNativeHandler(context.get()),
+        context_(context.Pass()),
+        registry_(registry) {
+    RouteFunction("GetSchema",
+                  base::Bind(&SchemaRegistryNativeHandler::GetSchema,
+                             base::Unretained(this)));
+  }
+
+ private:
+  void GetSchema(const v8::FunctionCallbackInfo<v8::Value>& args) {
+    args.GetReturnValue().Set(
+        registry_->GetSchema(*v8::String::Utf8Value(args[0])));
+  }
+
+  scoped_ptr<ScriptContext> context_;
+  V8SchemaRegistry* registry_;
+};
+
+}  // namespace
+
+V8SchemaRegistry::V8SchemaRegistry() {
+}
+
+V8SchemaRegistry::~V8SchemaRegistry() {
+}
+
+scoped_ptr<NativeHandler> V8SchemaRegistry::AsNativeHandler() {
+  scoped_ptr<ScriptContext> context(
+      new ScriptContext(GetOrCreateContext(v8::Isolate::GetCurrent()),
+                        NULL,  // no frame
+                        NULL,  // no extension
+                        Feature::UNSPECIFIED_CONTEXT));
+  return scoped_ptr<NativeHandler>(
+      new SchemaRegistryNativeHandler(this, context.Pass()));
+}
+
+v8::Handle<v8::Array> V8SchemaRegistry::GetSchemas(
+    const std::vector<std::string>& apis) {
+  v8::Isolate* isolate = v8::Isolate::GetCurrent();
+  v8::EscapableHandleScope handle_scope(isolate);
+  v8::Context::Scope context_scope(GetOrCreateContext(isolate));
+
+  v8::Local<v8::Array> v8_apis(v8::Array::New(isolate, apis.size()));
+  size_t api_index = 0;
+  for (std::vector<std::string>::const_iterator i = apis.begin();
+       i != apis.end();
+       ++i) {
+    v8_apis->Set(api_index++, GetSchema(*i));
+  }
+  return handle_scope.Escape(v8_apis);
+}
+
+v8::Handle<v8::Object> V8SchemaRegistry::GetSchema(const std::string& api) {
+  if (schema_cache_ != NULL) {
+    v8::Local<v8::Object> cached_schema = schema_cache_->Get(api);
+    if (!cached_schema.IsEmpty()) {
+      return cached_schema;
+    }
+  }
+
+  // Slow path: Need to build schema first.
+
+  v8::Isolate* isolate = v8::Isolate::GetCurrent();
+  v8::EscapableHandleScope handle_scope(isolate);
+  v8::Handle<v8::Context> context = GetOrCreateContext(isolate);
+  v8::Context::Scope context_scope(context);
+
+  const base::DictionaryValue* schema =
+      ExtensionAPI::GetSharedInstance()->GetSchema(api);
+  CHECK(schema) << api;
+  scoped_ptr<V8ValueConverter> v8_value_converter(V8ValueConverter::create());
+  v8::Handle<v8::Value> value = v8_value_converter->ToV8Value(schema, context);
+  CHECK(!value.IsEmpty());
+
+  v8::Local<v8::Object> v8_schema(v8::Handle<v8::Object>::Cast(value));
+  schema_cache_->Set(api, v8_schema);
+
+  return handle_scope.Escape(v8_schema);
+}
+
+v8::Handle<v8::Context> V8SchemaRegistry::GetOrCreateContext(
+    v8::Isolate* isolate) {
+  // It's ok to create local handles in this function, since this is only called
+  // when we have a HandleScope.
+  if (context_.IsEmpty()) {
+    v8::Handle<v8::Context> context = v8::Context::New(isolate);
+    context_.reset(context);
+    schema_cache_.reset(new SchemaCache(isolate));
+    return context;
+  }
+  return context_.NewHandle(isolate);
+}
+
+}  // namespace extensions
diff --git a/extensions/renderer/v8_schema_registry.h b/extensions/renderer/v8_schema_registry.h
new file mode 100644
index 0000000..b26f5b3
--- /dev/null
+++ b/extensions/renderer/v8_schema_registry.h
@@ -0,0 +1,55 @@
+// 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.
+
+#ifndef EXTENSIONS_RENDERER_V8_SCHEMA_REGISTRY_H_
+#define EXTENSIONS_RENDERER_V8_SCHEMA_REGISTRY_H_
+
+#include <map>
+#include <string>
+#include <vector>
+
+#include "base/basictypes.h"
+#include "base/memory/scoped_ptr.h"
+#include "extensions/renderer/scoped_persistent.h"
+#include "v8/include/v8-util.h"
+#include "v8/include/v8.h"
+
+namespace extensions {
+class NativeHandler;
+
+// A registry for the v8::Value representations of extension API schemas.
+// In a way, the v8 counterpart to ExtensionAPI.
+class V8SchemaRegistry {
+ public:
+  V8SchemaRegistry();
+  ~V8SchemaRegistry();
+
+  // Creates a NativeHandler wrapper |this|. Supports GetSchema.
+  scoped_ptr<NativeHandler> AsNativeHandler();
+
+  // Returns a v8::Array with all the schemas for the APIs in |apis|.
+  v8::Handle<v8::Array> GetSchemas(const std::vector<std::string>& apis);
+
+  // Returns a v8::Object for the schema for |api|, possibly from the cache.
+  v8::Handle<v8::Object> GetSchema(const std::string& api);
+
+ private:
+  // Gets the separate context that backs the registry, creating a new one if
+  // if necessary. Will also initialize schema_cache_.
+  v8::Handle<v8::Context> GetOrCreateContext(v8::Isolate* isolate);
+
+  // Cache of schemas. Created lazily by GetOrCreateContext.
+  typedef v8::StdPersistentValueMap<std::string, v8::Object> SchemaCache;
+  scoped_ptr<SchemaCache> schema_cache_;
+
+  // Single per-instance v8::Context to create v8::Values.
+  // Created lazily via GetOrCreateContext.
+  ScopedPersistent<v8::Context> context_;
+
+  DISALLOW_COPY_AND_ASSIGN(V8SchemaRegistry);
+};
+
+}  // namespace extensions
+
+#endif  // EXTENSIONS_RENDERER_V8_SCHEMA_REGISTRY_H_
diff --git a/extensions/strings/extensions_strings_am.xtb b/extensions/strings/extensions_strings_am.xtb
new file mode 100644
index 0000000..6334afc
--- /dev/null
+++ b/extensions/strings/extensions_strings_am.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="am">
+<translation id="735746806431426829">ውሂብዎ በሚከተሉት ድር ጣቢያዎች ላይ ይድረሱ፦</translation>
+<translation id="8719282907381795632"><ph name="WEBSITE_1"/> ላይ ያለ ውሂብዎን ይደርስበታል</translation>
+<translation id="7809034755304591547"><ph name="EXTENSION_NAME"/> (የቅጥያ መታወቂያ «<ph name="EXTENSION_ID"/>») በአስተዳዳሪው ታግዷል።</translation>
+<translation id="2857834222104759979">ገላጭ ፋይሉ ልክ አይደለም።</translation>
+<translation id="6384275966486438344">የፍለጋ ቅንብሮችዎን ወደሚከተለው ይለውጡ፦ <ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">የUSB መሣሪያውን ድረስ</translation>
+<translation id="5911798608827489036">በአካባቢያዊው አውታረ መረብ ወይም በይነመረቡ ላይ ካለ ማንኛውም ኮምፒውተር ጋር ውሂብ ይለዋወጡ</translation>
+<translation id="657064425229075395">የጀርባ ስክሪፕት «<ph name="BACKGROUND_SCRIPT"/>» መጫን አልተቻለም።</translation>
+<translation id="3093853184108622112">በ<ph name="WEBSITE_1"/> እና <ph name="WEBSITE_2"/> ላይ ያለ ውሂብዎን ይደርስበታል</translation>
+<translation id="8597109877291678953"><ph name="HOSTNAME"/> ከሚባል ኮምፒውተር ጋር ውሂብ ይለዋወጡ</translation>
+<translation id="6914908792814954894">በ<ph name="NUMBER_OF_WEBSITES"/> ድር ጣቢያዎች ላይ ያለው የእርስዎን ውሂብ ይድረሱበት</translation>
+<translation id="5456409301717116725">ይህ ቅጥያ የቁልፍ ፋይል «<ph name="KEY_PATH"/>»ን ያካትታል። ይህንን ማድረግ ላይፈልጉ ይችላሉ።</translation>
+<translation id="6968649314782363508">በ<ph name="WEBSITE_1"/>፣ <ph name="WEBSITE_2"/> እና <ph name="WEBSITE_3"/> ላይ ያለ ውሂብዎን ይደርስበታል</translation>
+<translation id="149347756975725155">የቅጥያ አዶ «<ph name="ICON"/>»ን መጫን አልተቻለም።</translation>
+<translation id="6344170822609224263">የአውታረ መረብ ግንኙነቶች ዝርዝር ይደርሳል</translation>
+<translation id="2518849872271000461">እንዲህ ከሚባል ኮምፒውተር ጋር ውሂብ ይለዋወጡ፦ <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052">በ<ph name="NUMBER_OF_WEBSITES"/> ድር ጣቢያዎች ላይ ያለው የእርስዎን ውሂብ ይድረሱበት</translation>
+<translation id="961805664415579088">በ<ph name="DOMAIN"/> ጎራ ውስጥ ካለ ማንኛውም ኮምፒውተር ላይ ውሂብ ይለዋወጡ</translation>
+<translation id="4968399700653439437">በእነዚህ ጎራዎች ውስጥ ካለ ማንኛውም ኮምፒውተር ላይ ውሂብ ይለዋወጡ፦ <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">መነሻ ገጽዎን ወደዚህ ይቀይሩት፦ <ph name="HOME_PAGE"/></translation>
+<translation id="2893389635995517838">ከኮምፒውተርዎ ላይ ፎቶዎች፣ ሙዚቃ እና ሌላ ማህደረ መረጃ ይድረሱ።</translation>
+<translation id="8602184400052594090">ገላጭ ፋይሉ ጠፍቷል ወይም ተነባቢ አይደለም።</translation>
+<translation id="1196944142850240972">ውሂብዎን በሁሉም ድር ጣቢያዎች ላይ ይደርስበታል</translation>
+<translation id="7217838517480956708">የዚህ ማሽን አስተዳዳሪ <ph name="EXTENSION_NAME"/> እንዲጫን ይፈልጋል። ሊወገድ ወይም ሊቀየር አይችልም።</translation>
+<translation id="7154130902455071009">የመጀመሪያ ገጽዎን ወደሚከተለው ይቀይሩ፦ <ph name="START_PAGE"/></translation>
+<translation id="1803557475693955505">የጀርባ ገጽ «<ph name="BACKGROUND_PAGE"/>»ን መጫን አልተቻለም።</translation>
+<translation id="1442776214136941057">የUSB መሣሪያውን <ph name="PRODUCT_NAME"/> ከ<ph name="VENDOR_NAME"/> ማድረስ።</translation>
+<translation id="3566784263424350852">የUSB መሣሪያው ከ<ph name="VENDOR_NAME"/> ሆኖ መድረስ።</translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_ar.xtb b/extensions/strings/extensions_strings_ar.xtb
new file mode 100644
index 0000000..a26f758
--- /dev/null
+++ b/extensions/strings/extensions_strings_ar.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="ar">
+<translation id="735746806431426829">يمكنك الوصول إلى بياناتك على مواقع الويب التالية:</translation>
+<translation id="8719282907381795632">الدخول إلى بياناتك على <ph name="WEBSITE_1"/></translation>
+<translation id="7809034755304591547">تم حظر <ph name="EXTENSION_NAME"/> (معرف الإضافة &quot;<ph name="EXTENSION_ID"/>&quot;) من قِبل المشرف.</translation>
+<translation id="2857834222104759979">ملف البيان غير صالح.</translation>
+<translation id="6384275966486438344">تغيير إعدادات البحث لـ: <ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">‏الدخول إلى جهاز USB.</translation>
+<translation id="5911798608827489036">تبادل البيانات مع أي جهاز كمبيوتر متصل بالشبكة المحلية أو الإنترنت</translation>
+<translation id="657064425229075395">تعذر تحميل النص البرمجي للخلفية '<ph name="BACKGROUND_SCRIPT"/>'.</translation>
+<translation id="3093853184108622112">الدخول إلى بياناتك على <ph name="WEBSITE_1"/> و<ph name="WEBSITE_2"/></translation>
+<translation id="8597109877291678953">تبادل البيانات مع جهاز الكمبيوتر الذي يحمل الاسم <ph name="HOSTNAME"/></translation>
+<translation id="6914908792814954894">الدخول إلى بياناتك على <ph name="NUMBER_OF_WEBSITES"/> من مواقع الويب</translation>
+<translation id="5456409301717116725">تتضمن هذه الإضافة ملف المفتاح '<ph name="KEY_PATH"/>'. ربما لا تريد إجراء ذلك.</translation>
+<translation id="6968649314782363508">الدخول إلى بياناتك على <ph name="WEBSITE_1"/> و<ph name="WEBSITE_2"/> و<ph name="WEBSITE_3"/></translation>
+<translation id="149347756975725155">تعذر تحميل رمز الإضافة '<ph name="ICON"/>'.</translation>
+<translation id="6344170822609224263">قائمة الدخول لاتصالات الشبكة</translation>
+<translation id="2518849872271000461">تبادل البيانات مع أجهزة الكمبيوتر التي تحمل الأسماء: <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052">الدخول إلى بياناتك على <ph name="NUMBER_OF_WEBSITES"/> من مواقع الويب</translation>
+<translation id="961805664415579088">تبادل البيانات مع أي جهاز كمبيوتر في النطاق <ph name="DOMAIN"/></translation>
+<translation id="4968399700653439437">تبادل البيانات مع أي جهاز كمبيوتر في النطاقات: <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">تغيير الصفحة الرئيسية إلى: <ph name="HOME_PAGE"/></translation>
+<translation id="2893389635995517838">الوصول إلى الصور والموسيقى والوسائط الأخرى من جهاز الكمبيوتر.</translation>
+<translation id="8602184400052594090">ملف البيان مفقود أو غير قابل للقراءة.</translation>
+<translation id="1196944142850240972">الدخول إلى بياناتك على جميع مواقع الويب</translation>
+<translation id="7217838517480956708">يطلب مشرف هذا الجهاز تثبيت <ph name="EXTENSION_NAME"/>. لا يمكن إزالتها أو تعديلها.</translation>
+<translation id="7154130902455071009">تغيير الصفحة الرئيسية إلى: <ph name="START_PAGE"/></translation>
+<translation id="1803557475693955505">تعذر تحميل صفحة الخلفية '<ph name="BACKGROUND_PAGE"/>'.</translation>
+<translation id="1442776214136941057">‏الدخول إلى جهاز USB <ph name="PRODUCT_NAME"/> من <ph name="VENDOR_NAME"/>.</translation>
+<translation id="3566784263424350852">‏الدخول إلى جهاز USB من <ph name="VENDOR_NAME"/>.</translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_bg.xtb b/extensions/strings/extensions_strings_bg.xtb
new file mode 100644
index 0000000..f9a8ddf
--- /dev/null
+++ b/extensions/strings/extensions_strings_bg.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="bg">
+<translation id="735746806431426829">Достъп до данните ви на следните уебсайтове:</translation>
+<translation id="8719282907381795632">Достъп до данните ви в <ph name="WEBSITE_1"/></translation>
+<translation id="7809034755304591547">Разширението <ph name="EXTENSION_NAME"/> (идентификационен номер „<ph name="EXTENSION_ID"/>“) е блокирано от администратора.</translation>
+<translation id="2857834222104759979">Файлът на манифеста е невалиден.</translation>
+<translation id="6384275966486438344">Променете настройките си за търсене на: <ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">Достъп до USB устройството.</translation>
+<translation id="5911798608827489036">Обмен на данни с всеки компютър в локалната мрежа или интернет</translation>
+<translation id="657064425229075395">Не можа да се зареди фоновият скрипт „<ph name="BACKGROUND_SCRIPT"/>“.</translation>
+<translation id="3093853184108622112">Достъп до данните ви в <ph name="WEBSITE_1"/> и <ph name="WEBSITE_2"/></translation>
+<translation id="8597109877291678953">Обмен на данни с компютъра с име <ph name="HOSTNAME"/></translation>
+<translation id="6914908792814954894">Достъп до данните ви в <ph name="NUMBER_OF_WEBSITES"/> уебсайта</translation>
+<translation id="5456409301717116725">Разширението включва файла с ключ „<ph name="KEY_PATH"/>“. Вероятно не искате да направите това.</translation>
+<translation id="6968649314782363508">Достъп до данните ви в <ph name="WEBSITE_1"/>, <ph name="WEBSITE_2"/> и <ph name="WEBSITE_3"/></translation>
+<translation id="149347756975725155">Не можа да се зареди иконата на разширението „<ph name="ICON"/>“.</translation>
+<translation id="6344170822609224263">Достъп до списъка с мрежови връзки</translation>
+<translation id="2518849872271000461">Обмен на данни с компютрите с име: <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052">Достъп до данните ви на <ph name="NUMBER_OF_WEBSITES"/> уебсайта</translation>
+<translation id="961805664415579088">Обмен на данни с всеки компютър в домейна <ph name="DOMAIN"/></translation>
+<translation id="4968399700653439437">Обмен на данни с всеки компютър в домейните: <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">Промяна на началната ви страница на <ph name="HOME_PAGE"/></translation>
+<translation id="2893389635995517838">Достъп до снимки, музика и друга медия от компютъра ви.</translation>
+<translation id="8602184400052594090">Файлът на манифеста липсва или не може да бъде прочетен.</translation>
+<translation id="1196944142850240972">Достъп до данните ви във всички уебсайтове</translation>
+<translation id="7217838517480956708">Администраторът на тази машина изисква разширението <ph name="EXTENSION_NAME"/> да е инсталирано. То не може да бъде премахнато или променено.</translation>
+<translation id="7154130902455071009">Промяна на началната ви страница на <ph name="START_PAGE"/></translation>
+<translation id="1803557475693955505">Не можа да се зареди фоновата страница „<ph name="BACKGROUND_PAGE"/>“.</translation>
+<translation id="1442776214136941057">Достъп до USB устройството „<ph name="PRODUCT_NAME"/>“ от <ph name="VENDOR_NAME"/>.</translation>
+<translation id="3566784263424350852">Достъп до USB устройството от <ph name="VENDOR_NAME"/>.</translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_bn.xtb b/extensions/strings/extensions_strings_bn.xtb
new file mode 100644
index 0000000..582db32
--- /dev/null
+++ b/extensions/strings/extensions_strings_bn.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="bn">
+<translation id="735746806431426829">নিম্নলিখিত ওয়েবসাইটগুলিতে আপনার ডেটা অ্যাক্সেস করুন:</translation>
+<translation id="8719282907381795632"><ph name="WEBSITE_1"/> এ আপনার ডেটা অ্যাক্সেস করুন</translation>
+<translation id="7809034755304591547"><ph name="EXTENSION_NAME"/> (এক্সটেশন ID &quot;<ph name="EXTENSION_ID"/>&quot;) টি প্রশাসকের দ্বারা অবরুদ্ধ করা আছে৷</translation>
+<translation id="2857834222104759979">তালিকা ফাইল অবৈধ৷</translation>
+<translation id="6384275966486438344">আপনার অনুসন্ধানের সেটিংস এতে পরিবর্তন করুন: <ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">USB ডিভাইস অ্যাক্সেস করুন৷</translation>
+<translation id="5911798608827489036">স্থানীয় নেটওয়ার্ক বা ইন্টারনেটে যেকোনো কম্পিউটারের সাথে ডেটা বিনিময় করুন</translation>
+<translation id="657064425229075395">পশ্চাদপট লিপি '<ph name="BACKGROUND_SCRIPT"/>' লোড করা যায়নি৷</translation>
+<translation id="3093853184108622112"><ph name="WEBSITE_1"/> এবং <ph name="WEBSITE_2"/> এ আপনার ডেটা অ্যাক্সেস করুন</translation>
+<translation id="8597109877291678953"><ph name="HOSTNAME"/> নামের যেকোনো কম্পিউটারের সাথে ডেটা বিনিময় করুন</translation>
+<translation id="6914908792814954894"><ph name="NUMBER_OF_WEBSITES"/> ওয়েবসাইটগুলিতে আপনার ডেটা অ্যাক্সেস করে</translation>
+<translation id="5456409301717116725">এই এক্সটেনশানটি '<ph name="KEY_PATH"/>' মুখ্য ফাইলকে অন্তর্ভুক্ত করে৷ আপনি সম্ভবত এটি করতে চাইবেন না৷</translation>
+<translation id="6968649314782363508"><ph name="WEBSITE_1"/>, <ph name="WEBSITE_2"/>, এবং <ph name="WEBSITE_3"/> এ আপনার ডেটা অ্যাক্সেস করুন</translation>
+<translation id="149347756975725155">এক্সটেনশান আইকন '<ph name="ICON"/>' লোড করা যায়নি৷</translation>
+<translation id="6344170822609224263">নেটওয়ার্ক সংযোগের তালিকা অ্যাক্সেস করে</translation>
+<translation id="2518849872271000461">এই নামের যেকোনো কম্পিউটারের সাথে ডেটা বিনিময় করুন: <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052"><ph name="NUMBER_OF_WEBSITES"/>টি ওয়েবসাইটে আপনার ডেটা অ্যাক্সেস করুন</translation>
+<translation id="961805664415579088"><ph name="DOMAIN"/> ডোমেনে যেকোনো কম্পিউটারের সাথে ডেটা বিনিময় করুন</translation>
+<translation id="4968399700653439437">এই ডোমেনগুলিতে যেকোনো কম্পিউটারের সাথে ডেটা বিনিময় করুন: <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">আপনার হোম পৃষ্ঠাকে এতে পরিবর্তিত করুন: <ph name="HOME_PAGE"/></translation>
+<translation id="2893389635995517838">আপনার কম্পিউটার থেকে ফটো, সঙ্গীত ও অন্য মিডিয়াতে অ্যাক্সেস করুন</translation>
+<translation id="8602184400052594090">তালিকা ফাইল পাওয়া যাচ্ছে না অথবা পঠনযোগ্য৷</translation>
+<translation id="1196944142850240972">সব ওয়েবসাইটে আপনার ডেটা অ্যাক্সেস করুন</translation>
+<translation id="7217838517480956708">এই মেশিনের প্রশাসকের <ph name="EXTENSION_NAME"/> ইনস্টল করার প্রয়োজন৷ এটি সরানো অথবা সংশোধন করা যাবে না৷</translation>
+<translation id="7154130902455071009">আপনার সূচনা পৃষ্ঠাকে এতে পরিবর্তন করুন: <ph name="START_PAGE"/></translation>
+<translation id="1803557475693955505">পৃষ্ঠভূমি পৃষ্ঠা '<ph name="BACKGROUND_PAGE"/>' লোড করা যায়নি৷</translation>
+<translation id="1442776214136941057"><ph name="VENDOR_NAME"/> থেকে <ph name="PRODUCT_NAME"/> USB ডিভাইসটি অ্যাক্সেস করুন৷</translation>
+<translation id="3566784263424350852"><ph name="VENDOR_NAME"/> থেকে USB ডিভাইসটি অ্যাক্সেস করুন৷</translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_ca.xtb b/extensions/strings/extensions_strings_ca.xtb
new file mode 100644
index 0000000..fa85ae3
--- /dev/null
+++ b/extensions/strings/extensions_strings_ca.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="ca">
+<translation id="735746806431426829">Accediu a les vostres dades als llocs web següents:</translation>
+<translation id="8719282907381795632">Accedir a les dades a <ph name="WEBSITE_1"/></translation>
+<translation id="7809034755304591547">L'administrador ha bloquejat l'extensió <ph name="EXTENSION_NAME"/> (amb l'ID d'extensió <ph name="EXTENSION_ID"/>).</translation>
+<translation id="2857834222104759979">El fitxer de manifest no és vàlid.</translation>
+<translation id="6384275966486438344">Canvia la configuració de la cerca a: <ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">Accedir al dispositiu USB</translation>
+<translation id="5911798608827489036">Intercanvia dades amb un altre ordinador de la xarxa local o d'Internet</translation>
+<translation id="657064425229075395">No s'ha pogut carregar l'script en segon pla &quot;<ph name="BACKGROUND_SCRIPT"/>&quot;.</translation>
+<translation id="3093853184108622112">Accedir a les vostres dades a <ph name="WEBSITE_1"/> i a <ph name="WEBSITE_2"/></translation>
+<translation id="8597109877291678953">Intercanviar dades amb l'ordinador <ph name="HOSTNAME"/></translation>
+<translation id="6914908792814954894">Accedir a les dades a <ph name="NUMBER_OF_WEBSITES"/> llocs web</translation>
+<translation id="5456409301717116725">Aquesta extensió inclou el fitxer de clau &quot;<ph name="KEY_PATH"/>&quot;. És probable que això no sigui convenient.</translation>
+<translation id="6968649314782363508">Accedir a les vostres dades a <ph name="WEBSITE_1"/>, a <ph name="WEBSITE_2"/> i a <ph name="WEBSITE_3"/></translation>
+<translation id="149347756975725155">No s'ha pogut carregar la icona d'extensió &quot;<ph name="ICON"/>&quot;.</translation>
+<translation id="6344170822609224263">Accedir a la llista de connexions de xarxa</translation>
+<translation id="2518849872271000461">Intercanviar dades amb els ordinadors <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052">Accedir a les dades a <ph name="NUMBER_OF_WEBSITES"/> llocs web</translation>
+<translation id="961805664415579088">Intercanviar dades amb un altre ordinador del domini <ph name="DOMAIN"/></translation>
+<translation id="4968399700653439437">Intercanviar  dades amb un altre ordinador dels dominis <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">Canvia la pàgina d'inici per: <ph name="HOME_PAGE"/></translation>
+<translation id="2893389635995517838">Accedir a fotos, a música i a altres elements multimèdia de l'ordinador</translation>
+<translation id="8602184400052594090">El fitxer de manifest falta o bé no es pot llegir.</translation>
+<translation id="1196944142850240972">Accedir a les votres dades en tots els llocs web</translation>
+<translation id="7217838517480956708">L'administrador d'aquest equip necessita que s'instal·li <ph name="EXTENSION_NAME"/>. No es pot eliminar o modificar.</translation>
+<translation id="7154130902455071009">Canvia la pàgina d'inici per: <ph name="START_PAGE"/></translation>
+<translation id="1803557475693955505">No s'ha pogut carregar la pàgina en segon pla &quot;<ph name="BACKGROUND_PAGE"/>&quot;.</translation>
+<translation id="1442776214136941057">Accedir al dispositiu USB de <ph name="PRODUCT_NAME"/> de <ph name="VENDOR_NAME"/></translation>
+<translation id="3566784263424350852">Accedir al dispositiu USB de <ph name="VENDOR_NAME"/>.</translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_cs.xtb b/extensions/strings/extensions_strings_cs.xtb
new file mode 100644
index 0000000..3231fe2
--- /dev/null
+++ b/extensions/strings/extensions_strings_cs.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="cs">
+<translation id="735746806431426829">Přístup k datům na následujících webech:</translation>
+<translation id="8719282907381795632">Získat přístup k vašim datům na webu <ph name="WEBSITE_1"/></translation>
+<translation id="7809034755304591547">Rozšíření <ph name="EXTENSION_NAME"/> (ID rozšíření <ph name="EXTENSION_ID"/>) je blokováno administrátorem.</translation>
+<translation id="2857834222104759979">Soubor manifestu je neplatný.</translation>
+<translation id="6384275966486438344">Změňte nastavení vyhledávání na: <ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">Přístup k zařízení USB</translation>
+<translation id="5911798608827489036">Výměna dat s libovolným počítačem v lokální síti nebo internetu</translation>
+<translation id="657064425229075395">Nelze načíst skript pozadí <ph name="BACKGROUND_SCRIPT"/>.</translation>
+<translation id="3093853184108622112">Získat přístup k vašim datům na webech <ph name="WEBSITE_1"/> a <ph name="WEBSITE_2"/></translation>
+<translation id="8597109877291678953">Výměna dat s počítačem <ph name="HOSTNAME"/></translation>
+<translation id="6914908792814954894">Přístup k vašim datům na <ph name="NUMBER_OF_WEBSITES"/> webech</translation>
+<translation id="5456409301717116725">Rozšíření obsahuje soubor klíče <ph name="KEY_PATH"/>. Tuto akci pravděpodobně provést nechcete.</translation>
+<translation id="6968649314782363508">Získat přístup k vašim datům na webu <ph name="WEBSITE_1"/>, <ph name="WEBSITE_2"/> a <ph name="WEBSITE_3"/></translation>
+<translation id="149347756975725155">Nelze načíst ikonu rozšíření <ph name="ICON"/>.</translation>
+<translation id="6344170822609224263">Zobrazení seznamu síťových připojení</translation>
+<translation id="2518849872271000461">Výměna dat s následujícími počítači: <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052">Access your data on <ph name="NUMBER_OF_WEBSITES"/> websites</translation>
+<translation id="961805664415579088">Výměna dat s libovolným počítačem v doméně <ph name="DOMAIN"/></translation>
+<translation id="4968399700653439437">Výměna dat s libovolným počítačem v následujících doménách: <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">Změnit domovskou stránku na: <ph name="HOME_PAGE"/></translation>
+<translation id="2893389635995517838">Přístup k fotografiím, hudbě a dalším médiím z počítače</translation>
+<translation id="8602184400052594090">Chybí soubor manifestu nebo jej nelze číst.</translation>
+<translation id="1196944142850240972">Získat přístup k vašim datům na všech webech</translation>
+<translation id="7217838517480956708">Správce tohoto počítače vyžaduje instalaci rozšíření <ph name="EXTENSION_NAME"/>. Nelze je odebrat ani upravit.</translation>
+<translation id="7154130902455071009">Změnit úvodní stránku na: <ph name="START_PAGE"/></translation>
+<translation id="1803557475693955505">Nelze načíst stránku pozadí „<ph name="BACKGROUND_PAGE"/>“.</translation>
+<translation id="1442776214136941057">Přistupovat k zařízení USB <ph name="PRODUCT_NAME"/> od dodavatele <ph name="VENDOR_NAME"/></translation>
+<translation id="3566784263424350852">Přistupovat k zařízení USB od dodavatele <ph name="VENDOR_NAME"/></translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_da.xtb b/extensions/strings/extensions_strings_da.xtb
new file mode 100644
index 0000000..9dd3ae0
--- /dev/null
+++ b/extensions/strings/extensions_strings_da.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="da">
+<translation id="735746806431426829">Få adgang til dine data på disse websites:</translation>
+<translation id="8719282907381795632">Få adgang til dine data på <ph name="WEBSITE_1"/></translation>
+<translation id="7809034755304591547"><ph name="EXTENSION_NAME"/> (udvidelses-id &quot;<ph name="EXTENSION_ID"/>&quot;) er blokeret af administratoren.</translation>
+<translation id="2857834222104759979">Manifestfilen er ugyldig.</translation>
+<translation id="6384275966486438344">Skift dine søgeindstillinger til: <ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">Få adgang til USB-enheden.</translation>
+<translation id="5911798608827489036">Udveksl data med en computer på det lokale netværk eller internettet</translation>
+<translation id="657064425229075395">Baggrundsscriptet  &quot;<ph name="BACKGROUND_SCRIPT"/>&quot; kunne ikke indlæses.</translation>
+<translation id="3093853184108622112">Få adgang til dine data på <ph name="WEBSITE_1"/> og <ph name="WEBSITE_2"/></translation>
+<translation id="8597109877291678953">Udveksl data med den computer, der er navngivet <ph name="HOSTNAME"/></translation>
+<translation id="6914908792814954894">Få adgang til dine data på <ph name="NUMBER_OF_WEBSITES"/> websites</translation>
+<translation id="5456409301717116725">Denne udvidelse inkluderer nøglefilen &quot;<ph name="KEY_PATH"/>&quot;. Det ønsker du sandsynligvis ikke at gøre.</translation>
+<translation id="6968649314782363508">Få adgang til dine data på <ph name="WEBSITE_1"/>, <ph name="WEBSITE_2"/> og <ph name="WEBSITE_3"/></translation>
+<translation id="149347756975725155">Udvidelsesikonet '<ph name="ICON"/>' kunne ikke indlæses.</translation>
+<translation id="6344170822609224263">Få adgang til listen over netværksforbindelser</translation>
+<translation id="2518849872271000461">Udveksl data med computerne, der er navngivet: <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052">Få adgang til dine data på <ph name="NUMBER_OF_WEBSITES"/> websites</translation>
+<translation id="961805664415579088">Udveksl data med en computer på domænet <ph name="DOMAIN"/></translation>
+<translation id="4968399700653439437">Udveksl data med en computer på domænerne: <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">Skift din startside til: <ph name="HOME_PAGE"/></translation>
+<translation id="2893389635995517838">Få adgang til billeder, musik og andre medier på din computer</translation>
+<translation id="8602184400052594090">Manifestfil mangler eller er ulæselig.</translation>
+<translation id="1196944142850240972">Få adgang til dine data på alle websites</translation>
+<translation id="7217838517480956708">Administratoren af denne computer kræver, at <ph name="EXTENSION_NAME"/> skal installeres. Den kan ikke fjernes eller ændres.</translation>
+<translation id="7154130902455071009">Skift din startside til: <ph name="START_PAGE"/></translation>
+<translation id="1803557475693955505">Baggrundssiden '<ph name="BACKGROUND_PAGE"/>' kunne ikke indlæses.</translation>
+<translation id="1442776214136941057">Få adgang til USB-enheden <ph name="PRODUCT_NAME"/> fra <ph name="VENDOR_NAME"/>.</translation>
+<translation id="3566784263424350852">Få adgang til USB-enheden fra <ph name="VENDOR_NAME"/>.</translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_de.xtb b/extensions/strings/extensions_strings_de.xtb
new file mode 100644
index 0000000..178c744
--- /dev/null
+++ b/extensions/strings/extensions_strings_de.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="de">
+<translation id="735746806431426829">Auf den folgenden Websites auf Ihre Daten zugreifen:</translation>
+<translation id="8719282907381795632">Auf Ihre Daten auf <ph name="WEBSITE_1"/> zugreifen</translation>
+<translation id="7809034755304591547"><ph name="EXTENSION_NAME"/> (Erweiterungs-ID &quot;<ph name="EXTENSION_ID"/>&quot;) wurde vom Administrator blockiert.</translation>
+<translation id="2857834222104759979">Manifest-Datei ist ungültig.</translation>
+<translation id="6384275966486438344">Sucheinstellungen in <ph name="SEARCH_HOST"/> ändern</translation>
+<translation id="1938239371608910339">Auf USB-Gerät zugreifen</translation>
+<translation id="5911798608827489036">Daten mit einem beliebigen Computer im lokalen Netz oder Internet austauschen</translation>
+<translation id="657064425229075395">Hintergrundskript &quot;<ph name="BACKGROUND_SCRIPT"/>&quot; konnte nicht geladen werden.</translation>
+<translation id="3093853184108622112">Auf Ihre Daten auf <ph name="WEBSITE_1"/> und <ph name="WEBSITE_2"/> zugreifen</translation>
+<translation id="8597109877291678953">Daten mit dem Computer mit dem Namen <ph name="HOSTNAME"/> austauschen</translation>
+<translation id="6914908792814954894">Auf <ph name="NUMBER_OF_WEBSITES"/> Websites auf Ihre Daten zugreifen</translation>
+<translation id="5456409301717116725">Die Erweiterung enthält die Schlüsseldatei &quot;<ph name="KEY_PATH"/>&quot;. Möchten Sie den Vorgang wirklich fortsetzen?</translation>
+<translation id="6968649314782363508">Auf Ihre Daten auf <ph name="WEBSITE_1"/>, <ph name="WEBSITE_2"/> und <ph name="WEBSITE_3"/> zugreifen</translation>
+<translation id="149347756975725155">Erweiterungssymbol &quot;<ph name="ICON"/>&quot; kann nicht geladen werden.</translation>
+<translation id="6344170822609224263">Auf Liste der Netzwerkverbindungen zugreifen</translation>
+<translation id="2518849872271000461">Daten mit den Computern mit folgenden Namen austauschen: <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052">Auf <ph name="NUMBER_OF_WEBSITES"/> Websites auf Ihre Daten zugreifen</translation>
+<translation id="961805664415579088">Daten mit einem beliebigen Computer in der Domain <ph name="DOMAIN"/> austauschen</translation>
+<translation id="4968399700653439437">Daten mit einem beliebigen Computer in den Domains <ph name="DOMAINS"/> austauschen</translation>
+<translation id="8662911384982557515">Startseite zu <ph name="HOME_PAGE"/> ändern</translation>
+<translation id="2893389635995517838">Auf Fotos, Musik und andere Medien auf meinem Computer zugreifen</translation>
+<translation id="8602184400052594090">Manifest-Datei fehlt oder ist nicht lesbar.</translation>
+<translation id="1196944142850240972">Auf Ihre Daten auf allen Websites zugreifen</translation>
+<translation id="7217838517480956708">Der Administrator dieses Computers schreibt die Installation von <ph name="EXTENSION_NAME"/> vor. Die Erweiterung kann nicht entfernt oder geändert werden.</translation>
+<translation id="7154130902455071009">Startseite in <ph name="START_PAGE"/> ändern</translation>
+<translation id="1803557475693955505">Hintergrundseite &quot;<ph name="BACKGROUND_PAGE"/>&quot; konnte nicht geladen werden.</translation>
+<translation id="1442776214136941057">Auf USB-Gerät <ph name="PRODUCT_NAME"/> von <ph name="VENDOR_NAME"/> zugreifen</translation>
+<translation id="3566784263424350852">Auf USB-Gerät von <ph name="VENDOR_NAME"/> zugreifen</translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_el.xtb b/extensions/strings/extensions_strings_el.xtb
new file mode 100644
index 0000000..d76797e
--- /dev/null
+++ b/extensions/strings/extensions_strings_el.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="el">
+<translation id="735746806431426829">Πρόσβαση στα δεδομένα σας στους παρακάτω ιστότοπους:</translation>
+<translation id="8719282907381795632">Πρόσβαση στα δεδομένα σας στον ιστότοπο <ph name="WEBSITE_1"/></translation>
+<translation id="7809034755304591547">Το αναγνωριστικό <ph name="EXTENSION_NAME"/> (αναγνωριστικό επέκτασης &quot;<ph name="EXTENSION_ID"/>&quot;) έχει αποκλειστεί από τον διαχειριστή.</translation>
+<translation id="2857834222104759979">Το αρχείο δήλωσης δεν είναι έγκυρο.</translation>
+<translation id="6384275966486438344">Αλλαγή των ρυθμίσεων αναζήτησης σε: <ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">Πρόσβαση στη συσκευή USB.</translation>
+<translation id="5911798608827489036">Ανταλλαγή δεδομένων με οποιονδήποτε υπολογιστή στο τοπικό δίκτυο ή το Διαδίκτυο</translation>
+<translation id="657064425229075395">Δεν ήταν δυνατή η φόρτωση του σεναρίου παρασκηνίου '<ph name="BACKGROUND_SCRIPT"/>'.</translation>
+<translation id="3093853184108622112">Πρόσβαση στα δεδομένα σας στους ιστότοπους <ph name="WEBSITE_1"/> και <ph name="WEBSITE_2"/></translation>
+<translation id="8597109877291678953">Ανταλλαγή δεδομένων με τον υπολογιστή με το όνομα <ph name="HOSTNAME"/></translation>
+<translation id="6914908792814954894">Πρόσβαση στα δεδομένα σας σε <ph name="NUMBER_OF_WEBSITES"/> ιστότοπους</translation>
+<translation id="5456409301717116725">Αυτή η επέκταση περιλαμβάνει το αρχείο κλειδιού &quot;<ph name="KEY_PATH"/>&quot;. Πιθανότατα δεν θέλετε να προβείτε σε αυτήν την ενέργεια.</translation>
+<translation id="6968649314782363508">Πρόσβαση στα δεδομένα σας στους ιστότοπους <ph name="WEBSITE_1"/>, <ph name="WEBSITE_2"/> και <ph name="WEBSITE_3"/></translation>
+<translation id="149347756975725155">Δεν ήταν δυνατή η φόρτωση του εικονιδίου επέκτασης &quot;<ph name="ICON"/>&quot;.</translation>
+<translation id="6344170822609224263">Λίστα πρόσβασης για συνδέσεις δικτύου</translation>
+<translation id="2518849872271000461">Ανταλλαγή δεδομένων με τους υπολογιστές με τα εξής ονόματα: <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052">Πρόσβαση στα δεδομένα σας σε <ph name="NUMBER_OF_WEBSITES"/> ιστότοπους</translation>
+<translation id="961805664415579088">Ανταλλαγή δεδομένων με οποιονδήποτε υπολογιστή στον τομέα <ph name="DOMAIN"/></translation>
+<translation id="4968399700653439437">Ανταλλαγή δεδομένων με οποιονδήποτε υπολογιστή στους τομείς: <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">Αλλαγή της αρχικής σελίδας σε: <ph name="HOME_PAGE"/></translation>
+<translation id="2893389635995517838">Πρόσβαση στις φωτογραφίες, στη μουσική και στα άλλα μέσα από τον υπολογιστή σας.</translation>
+<translation id="8602184400052594090">Το αρχείο δήλωσης λείπει ή δεν είναι δυνατή η ανάγνωσή του.</translation>
+<translation id="1196944142850240972">Πρόσβαση στα δεδομένα σας σε όλους τους ιστότοπους</translation>
+<translation id="7217838517480956708">Ο διαχειριστής αυτού του υπολογιστή απαιτεί την εγκατάσταση της επέκτασης <ph name="EXTENSION_NAME"/>. Δεν είναι δυνατή η κατάργηση ή η τροποποίησή της.</translation>
+<translation id="7154130902455071009">Αλλαγή της σελίδας έναρξης σε: <ph name="START_PAGE"/></translation>
+<translation id="1803557475693955505">Δεν ήταν δυνατή η φόρτωση της σελίδας φόντου &quot;<ph name="BACKGROUND_PAGE"/>&quot;.</translation>
+<translation id="1442776214136941057">Πρόσβαση στη συσκευή USB <ph name="PRODUCT_NAME"/> της <ph name="VENDOR_NAME"/>.</translation>
+<translation id="3566784263424350852">Πρόσβαση στη συσκευή USB της <ph name="VENDOR_NAME"/>.</translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_en-GB.xtb b/extensions/strings/extensions_strings_en-GB.xtb
new file mode 100644
index 0000000..16d5ec6
--- /dev/null
+++ b/extensions/strings/extensions_strings_en-GB.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="en-GB">
+<translation id="735746806431426829">Access your data on the following websites:</translation>
+<translation id="8719282907381795632">Access your data on <ph name="WEBSITE_1"/></translation>
+<translation id="7809034755304591547"><ph name="EXTENSION_NAME"/> (extension ID &quot;<ph name="EXTENSION_ID"/>&quot;) is blocked by the administrator.</translation>
+<translation id="2857834222104759979">Manifest file is invalid.</translation>
+<translation id="6384275966486438344">Change your search settings to: <ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">Access the USB device.</translation>
+<translation id="5911798608827489036">Exchange data with any computer on the local network or internet</translation>
+<translation id="657064425229075395">Could not load background script '<ph name="BACKGROUND_SCRIPT"/>'.</translation>
+<translation id="3093853184108622112">Access your data on <ph name="WEBSITE_1"/> and <ph name="WEBSITE_2"/></translation>
+<translation id="8597109877291678953">Exchange data with the computer named <ph name="HOSTNAME"/></translation>
+<translation id="6914908792814954894">Access your data on <ph name="NUMBER_OF_WEBSITES"/> websites</translation>
+<translation id="5456409301717116725">This extension includes the key file '<ph name="KEY_PATH"/>'. You probably don't want to do that.</translation>
+<translation id="6968649314782363508">Access your data on <ph name="WEBSITE_1"/>, <ph name="WEBSITE_2"/>, and <ph name="WEBSITE_3"/></translation>
+<translation id="149347756975725155">Could not load extension icon '<ph name="ICON"/>'.</translation>
+<translation id="6344170822609224263">Access list of network connections</translation>
+<translation id="2518849872271000461">Exchange data with the computers named: <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052">Access your data on <ph name="NUMBER_OF_WEBSITES"/> websites</translation>
+<translation id="961805664415579088">Exchange data with any computer in the domain <ph name="DOMAIN"/></translation>
+<translation id="4968399700653439437">Exchange data with any computer in the domains: <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">Change your home page to: <ph name="HOME_PAGE"/></translation>
+<translation id="2893389635995517838">Access photos, music and other media from your computer.</translation>
+<translation id="8602184400052594090">Manifest file is missing or unreadable.</translation>
+<translation id="1196944142850240972">Access your data on all websites</translation>
+<translation id="7217838517480956708">The administrator of this machine requires <ph name="EXTENSION_NAME"/> to be installed. It cannot be removed or modified.</translation>
+<translation id="7154130902455071009">Change your start page to: <ph name="START_PAGE"/></translation>
+<translation id="1803557475693955505">Could not load background page '<ph name="BACKGROUND_PAGE"/>'.</translation>
+<translation id="1442776214136941057">Access the USB device <ph name="PRODUCT_NAME"/> from <ph name="VENDOR_NAME"/>.</translation>
+<translation id="3566784263424350852">Access the USB device from <ph name="VENDOR_NAME"/>.</translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_es-419.xtb b/extensions/strings/extensions_strings_es-419.xtb
new file mode 100644
index 0000000..4351b70
--- /dev/null
+++ b/extensions/strings/extensions_strings_es-419.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="es-419">
+<translation id="735746806431426829">Acceder a tus datos en los siguientes sitios web:</translation>
+<translation id="8719282907381795632">Acceder a tus datos en <ph name="WEBSITE_1"/></translation>
+<translation id="7809034755304591547">El administrador bloqueó la extensión <ph name="EXTENSION_NAME"/> (con ID &quot;<ph name="EXTENSION_ID"/>&quot;).</translation>
+<translation id="2857834222104759979">Archivo de manifiesto no válido.</translation>
+<translation id="6384275966486438344">Cambiar la configuración de búsqueda por <ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">Acceder al dispositivo USB</translation>
+<translation id="5911798608827489036">Intercambiar datos con cualquier computadora en la red local o en internet</translation>
+<translation id="657064425229075395">No se pudo cargar la secuencia de comandos en segundo plano &quot;<ph name="BACKGROUND_SCRIPT"/>&quot;.</translation>
+<translation id="3093853184108622112">Acceder a tus datos en <ph name="WEBSITE_1"/> y en <ph name="WEBSITE_2"/></translation>
+<translation id="8597109877291678953">Intercambiar datos con la computadora llamada <ph name="HOSTNAME"/></translation>
+<translation id="6914908792814954894">Acceder a los datos en <ph name="NUMBER_OF_WEBSITES"/> sitios web</translation>
+<translation id="5456409301717116725">Esta extensión incluye el archivo de clave &quot;<ph name="KEY_PATH"/>&quot;. Probablemente no desees incluir ese archivo.</translation>
+<translation id="6968649314782363508">Acceder a tus datos en <ph name="WEBSITE_1"/> , <ph name="WEBSITE_2"/> y <ph name="WEBSITE_3"/></translation>
+<translation id="149347756975725155">No se pudo cargar el ícono de extensión '<ph name="ICON"/>'.</translation>
+<translation id="6344170822609224263">Acceder a la lista de conexiones de red</translation>
+<translation id="2518849872271000461">Intercambiar datos con las computadoras llamadas: <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052">Acceder a los datos en <ph name="NUMBER_OF_WEBSITES"/> sitios web</translation>
+<translation id="961805664415579088">Intercambiar datos con cualquier computadora en el dominio <ph name="DOMAIN"/></translation>
+<translation id="4968399700653439437">Intercambiar datos con cualquier computadora en los dominios: <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">Cambiar la página principal por <ph name="HOME_PAGE"/></translation>
+<translation id="2893389635995517838">Acceder a fotos, música y otro contenido multimedia desde tu computadora</translation>
+<translation id="8602184400052594090">El archivo de manifiesto falta o no se puede leer.</translation>
+<translation id="1196944142850240972">Acceder a tus datos en todos los sitios web</translation>
+<translation id="7217838517480956708">El administrador de esta máquina requiere que instales <ph name="EXTENSION_NAME"/>. No se puede eliminar ni modificar.</translation>
+<translation id="7154130902455071009">Cambiar la página de inicio por <ph name="START_PAGE"/></translation>
+<translation id="1803557475693955505">No se pudo cargar la página de fondo '<ph name="BACKGROUND_PAGE"/>'.</translation>
+<translation id="1442776214136941057">Acceder al dispositivo USB <ph name="PRODUCT_NAME"/> de <ph name="VENDOR_NAME"/></translation>
+<translation id="3566784263424350852">Acceder al dispositivo USB de <ph name="VENDOR_NAME"/></translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_es.xtb b/extensions/strings/extensions_strings_es.xtb
new file mode 100644
index 0000000..1ddb538
--- /dev/null
+++ b/extensions/strings/extensions_strings_es.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="es">
+<translation id="735746806431426829">Acceder a tus datos en los siguientes sitios web:</translation>
+<translation id="8719282907381795632">Acceder a tus datos en <ph name="WEBSITE_1"/></translation>
+<translation id="7809034755304591547">El administrador de la extensión <ph name="EXTENSION_NAME"/> (con ID &quot;<ph name="EXTENSION_ID"/>&quot;) ha bloqueado la extensión.</translation>
+<translation id="2857834222104759979">El archivo de manifiesto no es válido.</translation>
+<translation id="6384275966486438344">Cambiar configuración de búsqueda por: <ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">Acceder al dispositivo USB</translation>
+<translation id="5911798608827489036">Intercambiar datos con otro ordenador de la red local o de Internet</translation>
+<translation id="657064425229075395">No se ha podido cargar la secuencia de comandos en segundo plano &quot;<ph name="BACKGROUND_SCRIPT"/>&quot;.</translation>
+<translation id="3093853184108622112">Acceder a tus datos en <ph name="WEBSITE_1"/> y en <ph name="WEBSITE_2"/></translation>
+<translation id="8597109877291678953">Intercambiar datos con el ordenador <ph name="HOSTNAME"/></translation>
+<translation id="6914908792814954894">Accede a tus datos en <ph name="NUMBER_OF_WEBSITES"/> sitios web</translation>
+<translation id="5456409301717116725">Esta extensión incluye el archivo de clave &quot;<ph name="KEY_PATH"/>&quot;. Probablemente no quieras incluir este archivo.</translation>
+<translation id="6968649314782363508">Acceder a tus datos en <ph name="WEBSITE_1"/>, en <ph name="WEBSITE_2"/> y en <ph name="WEBSITE_3"/></translation>
+<translation id="149347756975725155">No se ha podido cargar el icono de la extensión &quot;<ph name="ICON"/>&quot;.</translation>
+<translation id="6344170822609224263">Accede a la lista de conexiones de red</translation>
+<translation id="2518849872271000461">Intercambiar datos con los ordenadores <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052">Accede a tus datos en <ph name="NUMBER_OF_WEBSITES"/> sitios web</translation>
+<translation id="961805664415579088">Intercambiar datos con otro ordenador del dominio <ph name="DOMAIN"/></translation>
+<translation id="4968399700653439437">Intercambiar datos con otro ordenador de los dominios <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">Cambiar página de inicio por: <ph name="HOME_PAGE"/></translation>
+<translation id="2893389635995517838">Acceder a fotos, a música y a otros archivos multimedia desde tu ordenador.</translation>
+<translation id="8602184400052594090">Falta el archivo de manifiesto o no se puede leer.</translation>
+<translation id="1196944142850240972">Acceder a tus datos en todos los sitios web</translation>
+<translation id="7217838517480956708">El administrador de este ordenador necesita que se instale <ph name="EXTENSION_NAME"/>. No se puede eliminar ni modificar.</translation>
+<translation id="7154130902455071009">Cambiar página de inicio por: <ph name="START_PAGE"/></translation>
+<translation id="1803557475693955505">No se ha podido cargar la página de fondo &quot;<ph name="BACKGROUND_PAGE"/>&quot;.</translation>
+<translation id="1442776214136941057">Acceder al dispositivo USB <ph name="PRODUCT_NAME"/> de <ph name="VENDOR_NAME"/></translation>
+<translation id="3566784263424350852">Acceder al dispositivo USB de <ph name="VENDOR_NAME"/></translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_et.xtb b/extensions/strings/extensions_strings_et.xtb
new file mode 100644
index 0000000..7a61094
--- /dev/null
+++ b/extensions/strings/extensions_strings_et.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="et">
+<translation id="735746806431426829">Saate juurdepääsu oma andmetele järgmistel veebisaitidel:</translation>
+<translation id="8719282907381795632">Juurdepääs teie andmetele saidil <ph name="WEBSITE_1"/></translation>
+<translation id="7809034755304591547">Administraator blokeeris laienduse <ph name="EXTENSION_NAME"/> (laienduse ID „<ph name="EXTENSION_ID"/>”).</translation>
+<translation id="2857834222104759979">Manifestifail on kehtetu.</translation>
+<translation id="6384275966486438344">Muutke oma otsinguseadeid: <ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">Juurdepääs USB-seadmele.</translation>
+<translation id="5911798608827489036">Vaheta andmeid mis tahes arvutiga kohalikus võrgus või Internetis</translation>
+<translation id="657064425229075395">Taustaskripti „<ph name="BACKGROUND_SCRIPT"/>” ei õnnestunud laadida.</translation>
+<translation id="3093853184108622112">Juurdepääs teie andmetele saidil <ph name="WEBSITE_1"/> ja <ph name="WEBSITE_2"/></translation>
+<translation id="8597109877291678953">Vaheta andmeid arvutiga <ph name="HOSTNAME"/></translation>
+<translation id="6914908792814954894">Juurdepääs oma andmetele <ph name="NUMBER_OF_WEBSITES"/> veebisaidil</translation>
+<translation id="5456409301717116725">Laiendus hõlmab võtmefaili „<ph name="KEY_PATH"/>”. See toiming ei ole soovitatav.</translation>
+<translation id="6968649314782363508">Juurdepääs teie andmetele saitidel <ph name="WEBSITE_1"/>, <ph name="WEBSITE_2"/> ja <ph name="WEBSITE_3"/></translation>
+<translation id="149347756975725155">Laienduse ikooni <ph name="ICON"/> ei õnnestunud laadida.</translation>
+<translation id="6344170822609224263">Juurdepääs võrguühenduste loendile</translation>
+<translation id="2518849872271000461">Vaheta andmeid nende arvutitega: <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052">Juurdepääs oma andmetele <ph name="NUMBER_OF_WEBSITES"/> veebisaidil</translation>
+<translation id="961805664415579088">Vaheta andmeid mis tahes arvutiga domeenis <ph name="DOMAIN"/></translation>
+<translation id="4968399700653439437">Vaheta andmeid mis tahes arvutiga nendes domeenides: <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">Määrake avaleheks <ph name="HOME_PAGE"/></translation>
+<translation id="2893389635995517838">Juurdepääs fotodele, muusikale ja muule meediale teie arvutis.</translation>
+<translation id="8602184400052594090">Manifestifail on kadunud või ei ole seda võimalik lugeda.</translation>
+<translation id="1196944142850240972">Juurdepääs teie andmetele kõikidel veebisaitidel</translation>
+<translation id="7217838517480956708">Seadme administraator nõuab, et <ph name="EXTENSION_NAME"/> oleks installitud. Seda ei saa eemaldada ega muuta.</translation>
+<translation id="7154130902455071009">Määrake avaleheks <ph name="START_PAGE"/></translation>
+<translation id="1803557475693955505">Tagaplaanilehte <ph name="BACKGROUND_PAGE"/> ei õnnestunud laadida.</translation>
+<translation id="1442776214136941057">Juurdepääs tootja <ph name="VENDOR_NAME"/> USB-seadmele <ph name="PRODUCT_NAME"/>.</translation>
+<translation id="3566784263424350852">Juurdepääs tootja <ph name="VENDOR_NAME"/> USB-seadmele.</translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_fa.xtb b/extensions/strings/extensions_strings_fa.xtb
new file mode 100644
index 0000000..6a51f72
--- /dev/null
+++ b/extensions/strings/extensions_strings_fa.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="fa">
+<translation id="735746806431426829">دسترسی به داده‌هایتان در وب‌سایت‌های زیر:</translation>
+<translation id="8719282907381795632">دسترسی به داده‌های شما در <ph name="WEBSITE_1"/></translation>
+<translation id="7809034755304591547"><ph name="EXTENSION_NAME"/> (شناسه فایل افزودنی &quot;<ph name="EXTENSION_ID"/>&quot;) توسط سرپرست مسدود شده است.</translation>
+<translation id="2857834222104759979">فایل اظهارنامه نامعتبر است.</translation>
+<translation id="6384275966486438344">تغییر تنظیمات جستجویتان به: <ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">‏به دستگاه USB دسترسی پیدا کنید.</translation>
+<translation id="5911798608827489036">تبادل اطلاعات با هر رایانه‌ای بر روی شبکه محلی یا اینترنت</translation>
+<translation id="657064425229075395">بارگیری اسکریپت پس‌زمینه &quot;<ph name="BACKGROUND_SCRIPT"/>&quot; ممکن نیست.</translation>
+<translation id="3093853184108622112">دسترسی به داده‌های شما در <ph name="WEBSITE_1"/> و <ph name="WEBSITE_2"/></translation>
+<translation id="8597109877291678953">تبادل اطلاعات با رایانه‌ای به نام <ph name="HOSTNAME"/></translation>
+<translation id="6914908792814954894">دسترسی به داده‌هایتان در وب‌سایت‌های <ph name="NUMBER_OF_WEBSITES"/></translation>
+<translation id="5456409301717116725">این برنامهٔ افزودنی شامل فایل کلید «<ph name="KEY_PATH"/>» است. احتمالاً نمی‌خواهید این کار را انجام دهید.</translation>
+<translation id="6968649314782363508">دسترسی به داده‌های شما در <ph name="WEBSITE_1"/>، <ph name="WEBSITE_2"/> و <ph name="WEBSITE_3"/></translation>
+<translation id="149347756975725155">بارکردن نماد پسوند &quot;<ph name="ICON"/>&quot; ممکن نیست.</translation>
+<translation id="6344170822609224263">فهرست دسترسی از اتصالات شبکه</translation>
+<translation id="2518849872271000461">تبادل اطلاعات با رایانه‌هایی با نام‌های: <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052">دسترسی به داده‌هایتان در وب‌سایت‌های <ph name="NUMBER_OF_WEBSITES"/></translation>
+<translation id="961805664415579088">تبادل اطلاعات با هر رایانه‌ای در دامنه <ph name="DOMAIN"/></translation>
+<translation id="4968399700653439437">تبادل اطلاعات با هر رایانه‌ای در دامنه‌های: <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">تغییر صفحه اصلی شما به: <ph name="HOME_PAGE"/></translation>
+<translation id="2893389635995517838">از رایانه خود به عکس‌ها، موسیقی، و دیگر رسانه‌ها دسترسی داشته باشید.</translation>
+<translation id="8602184400052594090">فایل اظهارنامه وجود ندارد یا قابل خواندن نیست.</translation>
+<translation id="1196944142850240972">دسترسی به داده‌های شما در همه وب سایت‌ها</translation>
+<translation id="7217838517480956708">سرپرست این دستگاه نصب <ph name="EXTENSION_NAME"/> را لازم کرده است. آن را نمی‌توان تغییر داد یا حذف کرد.</translation>
+<translation id="7154130902455071009">تغییر صفحه شروعتان به: <ph name="START_PAGE"/></translation>
+<translation id="1803557475693955505">بارگیری صفحه پس‌زمینه &quot;<ph name="BACKGROUND_PAGE"/>&quot; ممکن نیست.</translation>
+<translation id="1442776214136941057">‏دسترسی به دستگاه USB <ph name="PRODUCT_NAME"/> از <ph name="VENDOR_NAME"/>.</translation>
+<translation id="3566784263424350852">‏دسترسی به دستگاه USB از <ph name="VENDOR_NAME"/>.</translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_fi.xtb b/extensions/strings/extensions_strings_fi.xtb
new file mode 100644
index 0000000..260d2a5
--- /dev/null
+++ b/extensions/strings/extensions_strings_fi.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="fi">
+<translation id="735746806431426829">käyttää tietojasi seuraavissa sivustoissa:</translation>
+<translation id="8719282907381795632">Käyttää tietojasi sivustolla <ph name="WEBSITE_1"/></translation>
+<translation id="7809034755304591547"><ph name="EXTENSION_NAME"/> (laajennustunnus <ph name="EXTENSION_ID"/>) on järjestelmänvalvojan kiellettyjen laajennuksien luettelossa.</translation>
+<translation id="2857834222104759979">Luettelotiedosto on virheellinen.</translation>
+<translation id="6384275966486438344">Ota käyttöön seuraava hakukone: <ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">Käytä USB-laitetta.</translation>
+<translation id="5911798608827489036">Vaihda tietoja minkä tahansa paikallisverkossa tai internetissä olevan tietokoneen kanssa</translation>
+<translation id="657064425229075395">Taustakoodin <ph name="BACKGROUND_SCRIPT"/> lataaminen epäonnistui.</translation>
+<translation id="3093853184108622112">Käyttää tietojasi sivustoilla <ph name="WEBSITE_1"/> ja <ph name="WEBSITE_2"/></translation>
+<translation id="8597109877291678953">Vaihda tietoja tietokoneen nimeltä <ph name="HOSTNAME"/> kanssa</translation>
+<translation id="6914908792814954894">Käyttää tietojasi <ph name="NUMBER_OF_WEBSITES"/> sivustolla.</translation>
+<translation id="5456409301717116725">Tämä laajennus sisältää avaintiedoston <ph name="KEY_PATH"/>. Et todennäköisesti halua sitä.</translation>
+<translation id="6968649314782363508">Käyttää tietojasi sivustoilla <ph name="WEBSITE_1"/>, <ph name="WEBSITE_2"/> ja <ph name="WEBSITE_3"/></translation>
+<translation id="149347756975725155">Laajennuskuvakkeen <ph name="ICON"/> lataaminen ei onnistunut.</translation>
+<translation id="6344170822609224263">Pääsy verkkoyhteysluetteloon</translation>
+<translation id="2518849872271000461">Vaida tietoja seuraavan nimisten tietokoneiden kanssa: <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052">Access your data on <ph name="NUMBER_OF_WEBSITES"/> websites</translation>
+<translation id="961805664415579088">Vaihda tietoja minkä tahansa verkkotunnusta <ph name="DOMAIN"/> käyttävän tietokoneen kanssa</translation>
+<translation id="4968399700653439437">Vaihda tietoja minkä tahansa seuraavia verkkotunnuksia käyttävän tietokoneen kanssa: <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">Vaihda aloitussivuksi <ph name="HOME_PAGE"/></translation>
+<translation id="2893389635995517838">käyttää valokuvia, musiikkia ja muuta tietokoneesi mediaa.</translation>
+<translation id="8602184400052594090">Luettelotiedosto puuttuu tai sitä ei voi lukea.</translation>
+<translation id="1196944142850240972">Käyttää tietojasi kaikilla sivustoilla</translation>
+<translation id="7217838517480956708">Koneen ylläpitäjä vaatii laajennuksen <ph name="EXTENSION_NAME"/> asennusta. Sitä ei voi poistaa tai muuttaa.</translation>
+<translation id="7154130902455071009">Vaihda aloitussivuksi <ph name="START_PAGE"/></translation>
+<translation id="1803557475693955505">Taustasivun <ph name="BACKGROUND_PAGE"/> lataaminen ei onnistunut.</translation>
+<translation id="1442776214136941057">Käytä valmistajan <ph name="VENDOR_NAME"/> USB-laitetta <ph name="PRODUCT_NAME"/>.</translation>
+<translation id="3566784263424350852">Käytä valmistajan <ph name="VENDOR_NAME"/> USB-laitetta.</translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_fil.xtb b/extensions/strings/extensions_strings_fil.xtb
new file mode 100644
index 0000000..c3f273c
--- /dev/null
+++ b/extensions/strings/extensions_strings_fil.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="fil">
+<translation id="735746806431426829">I-access ang iyong data sa mga sumusunod na website:</translation>
+<translation id="8719282907381795632">I-access ang iyong data sa <ph name="WEBSITE_1"/></translation>
+<translation id="7809034755304591547">Ang <ph name="EXTENSION_NAME"/> (ID ng extension &quot;<ph name="EXTENSION_ID"/>&quot;) ay na-block ng administrator.</translation>
+<translation id="2857834222104759979">Di-wasto ang manifest file.</translation>
+<translation id="6384275966486438344">Gawing ito ang iyong mga setting ng paghahanap: <ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">I-access ang USB device.</translation>
+<translation id="5911798608827489036">Makipagpalitan ng data sa anumang computer sa lokal na network o internet</translation>
+<translation id="657064425229075395">Hindi ma-load ang script ng background na '<ph name="BACKGROUND_SCRIPT"/>'.</translation>
+<translation id="3093853184108622112">I-access ang iyong data sa <ph name="WEBSITE_1"/> at <ph name="WEBSITE_2"/></translation>
+<translation id="8597109877291678953">Makipagpalitan ng data sa computer na may pangalang <ph name="HOSTNAME"/></translation>
+<translation id="6914908792814954894">I-access ang iyong data sa <ph name="NUMBER_OF_WEBSITES"/> (na) website</translation>
+<translation id="5456409301717116725">Kasama sa extension na ito ang key file na '<ph name="KEY_PATH"/>'. Malamang na hindi mo iyon gustong gawin.</translation>
+<translation id="6968649314782363508">I-access ang iyong data sa <ph name="WEBSITE_1"/>, <ph name="WEBSITE_2"/>, at <ph name="WEBSITE_3"/></translation>
+<translation id="149347756975725155">Maaaring hindi mai-load ang icon ng extension '<ph name="ICON"/>'.</translation>
+<translation id="6344170822609224263">I-access ang listahan ng mga koneksyon sa network</translation>
+<translation id="2518849872271000461">Makipagpalitan ng data sa mga computer na may pangalang: <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052">I-access ang iyong data sa <ph name="NUMBER_OF_WEBSITES"/> (na) website</translation>
+<translation id="961805664415579088">Makipagpalitan ng data sa anumang computer sa domain na <ph name="DOMAIN"/></translation>
+<translation id="4968399700653439437">Makipagpalitan ng data sa anumang computer sa mga domain na: <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">Baguhin ang iyong home page sa: <ph name="HOME_PAGE"/></translation>
+<translation id="2893389635995517838">I-access ang mga larawan, musika, at iba pang media mula sa iyong computer.</translation>
+<translation id="8602184400052594090">Nawawala o hindi mabasa ang manifest file.</translation>
+<translation id="1196944142850240972">I-access ang iyong data sa lahat ng website</translation>
+<translation id="7217838517480956708">Kinakailangan ng administrator ng machine na ito na ma-install ang <ph name="EXTENSION_NAME"/>. Hindi ito maaaring alisin o baguhin.</translation>
+<translation id="7154130902455071009">Gawing ito ang iyong panimulang pahina: <ph name="START_PAGE"/></translation>
+<translation id="1803557475693955505">Maaaring hindi mai-load ang pahina ng background '<ph name="BACKGROUND_PAGE"/>'.</translation>
+<translation id="1442776214136941057">I-access ang usb device <ph name="PRODUCT_NAME"/> mula sa <ph name="VENDOR_NAME"/>.</translation>
+<translation id="3566784263424350852">I-access ang USB device mula sa <ph name="VENDOR_NAME"/>.</translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_fr.xtb b/extensions/strings/extensions_strings_fr.xtb
new file mode 100644
index 0000000..a5f7490
--- /dev/null
+++ b/extensions/strings/extensions_strings_fr.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="fr">
+<translation id="735746806431426829">Accédez à vos informations sur les sites Web suivants :</translation>
+<translation id="8719282907381795632">Accéder à vos données sur <ph name="WEBSITE_1"/></translation>
+<translation id="7809034755304591547">L'administrateur a bloqué l'extension <ph name="EXTENSION_NAME"/> (ID : <ph name="EXTENSION_ID"/>).</translation>
+<translation id="2857834222104759979">Le fichier manifeste est incorrect.</translation>
+<translation id="6384275966486438344">Modifier les paramètres de la recherche pour utiliser l'adresse <ph name="SEARCH_HOST"/>.</translation>
+<translation id="1938239371608910339">Accéder à l'appareil USB</translation>
+<translation id="5911798608827489036">Échanger des données avec tout ordinateur sur le réseau local ou sur Internet</translation>
+<translation id="657064425229075395">Impossible de charger le script d'arrière-plan &quot;<ph name="BACKGROUND_SCRIPT"/>&quot;.</translation>
+<translation id="3093853184108622112">Accéder à vos données sur <ph name="WEBSITE_1"/> et sur <ph name="WEBSITE_2"/></translation>
+<translation id="8597109877291678953">Échanger des données avec l'ordinateur portant le nom suivant : <ph name="HOSTNAME"/></translation>
+<translation id="6914908792814954894">Accéder aux données sur <ph name="NUMBER_OF_WEBSITES"/> sites Web</translation>
+<translation id="5456409301717116725">Cette extension comprend le fichier clé <ph name="KEY_PATH"/>. Vous ne voulez probablement pas poursuivre.</translation>
+<translation id="6968649314782363508">Accéder à vos données sur <ph name="WEBSITE_1"/>, <ph name="WEBSITE_2"/> et <ph name="WEBSITE_3"/></translation>
+<translation id="149347756975725155">Impossible de charger l'icône de l'extension &quot;<ph name="ICON"/>&quot;.</translation>
+<translation id="6344170822609224263">Accéder à la liste des connexions réseau</translation>
+<translation id="2518849872271000461">Échanger des données avec les ordinateurs portant les noms suivants : <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052">Accéder aux données sur <ph name="NUMBER_OF_WEBSITES"/> sites Web</translation>
+<translation id="961805664415579088">Échanger des données avec les ordinateurs dans le domaine suivant : <ph name="DOMAIN"/></translation>
+<translation id="4968399700653439437">Échanger des données avec les ordinateurs dans les domaines suivants : <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">Utiliser <ph name="HOME_PAGE"/> comme page d'accueil ?</translation>
+<translation id="2893389635995517838">Accéder aux photos, aux titres musicaux et à d'autres fichiers multimédias stockés sur votre ordinateur</translation>
+<translation id="8602184400052594090">Fichier manifeste absent ou illisible</translation>
+<translation id="1196944142850240972">Accéder à toutes vos données sur tous les sites Web</translation>
+<translation id="7217838517480956708">L'administrateur de cet ordinateur exige que l'extension <ph name="EXTENSION_NAME"/> soit installée. Celle-ci ne peut pas être supprimée ni modifiée.</translation>
+<translation id="7154130902455071009">Utiliser l'adresse <ph name="START_PAGE"/> comme page de démarrage ?</translation>
+<translation id="1803557475693955505">Impossible de charger la page d'arrière-plan &quot;<ph name="BACKGROUND_PAGE"/>&quot;.</translation>
+<translation id="1442776214136941057">Accéder à l'appareil USB <ph name="PRODUCT_NAME"/> du fournisseur <ph name="VENDOR_NAME"/></translation>
+<translation id="3566784263424350852">Accéder à l'appareil USB du fournisseur <ph name="VENDOR_NAME"/></translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_gu.xtb b/extensions/strings/extensions_strings_gu.xtb
new file mode 100644
index 0000000..88b4b09
--- /dev/null
+++ b/extensions/strings/extensions_strings_gu.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="gu">
+<translation id="735746806431426829">નીચેના વેબસાઇટ્સ પરનાં તમારા ડેટાને ઍક્સેસ કરો:</translation>
+<translation id="8719282907381795632"><ph name="WEBSITE_1"/> પર તમારા ડેટાને ઍક્સેસ કરો</translation>
+<translation id="7809034755304591547">વ્યવસ્થાપક દ્વારા <ph name="EXTENSION_NAME"/> (એક્સટેન્શન ID &quot;<ph name="EXTENSION_ID"/>&quot;) અવરોધિત કરેલ છે.</translation>
+<translation id="2857834222104759979">મેનિફેસ્ટ ફાઇલ અમાન્ય છે.</translation>
+<translation id="6384275966486438344">આ પર તમારી શોધ સેટિંગ્સ બદલો: <ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">USB ઉપકરણને ઍક્સેસ કરો.</translation>
+<translation id="5911798608827489036">સ્થાનિક નેટવર્ક અથવા ઇન્ટરનેટ પર કોઈપણ કમ્પ્યુટર સાથે ડેટા વિનિમય કરો</translation>
+<translation id="657064425229075395">પૃષ્ઠભૂમિ સ્ક્રિપ્ટ '<ph name="BACKGROUND_SCRIPT"/>' લોડ કરી શકાઈ નથી.</translation>
+<translation id="3093853184108622112">તમારા <ph name="WEBSITE_1"/> પરનો ડેટા અને <ph name="WEBSITE_2"/> ઍક્સેસ કરો</translation>
+<translation id="8597109877291678953"><ph name="HOSTNAME"/> નામના કમ્પ્યુટર સાથે ડેટા વિનિમય કરો</translation>
+<translation id="6914908792814954894"><ph name="NUMBER_OF_WEBSITES"/> વેબસાઇટ્સ પર તમારો ડેટા ઍક્સેસ કરો</translation>
+<translation id="5456409301717116725">આ એક્સટેન્શનમાં '<ph name="KEY_PATH"/>' કી ફાઇલ શામેલ છે. તમે કદાચ એ કરવા માંગતા નથી.</translation>
+<translation id="6968649314782363508">તમારા <ph name="WEBSITE_1"/> , <ph name="WEBSITE_2"/>  અને <ph name="WEBSITE_3"/> પરનાં ડેટાને ઍક્સેસ કરો</translation>
+<translation id="149347756975725155">એક્સ્ટેંશન આયકન '<ph name="ICON"/>' લોડ કરી શકાયું નથી.</translation>
+<translation id="6344170822609224263">નેટવર્ક કનેક્શન્સની ઍક્સેસ સૂચિ</translation>
+<translation id="2518849872271000461">આ નામના કમ્પ્યુટર્સ સાથે ડેટા વિનિમય કરો: <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052"><ph name="NUMBER_OF_WEBSITES"/> વેબસાઇટ્સ પર તમારો ડેટા ઍક્સેસ કરો</translation>
+<translation id="961805664415579088"><ph name="DOMAIN"/> ડોમેનમાંના કોઈપણ કમ્પ્યુટર સાથે ડેટા વિનિમય કરો</translation>
+<translation id="4968399700653439437">આ ડોમેન્સમાં કોઈપણ કમ્પ્યુટર સાથે ડેટા વિનિમય કરો : <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">તમારા હોમ પેજને આ પર બદલો: <ph name="HOME_PAGE"/></translation>
+<translation id="2893389635995517838">તમારા કમ્પ્યુટર પરથી ફોટા, સંગીત અને અન્ય મીડિયા ઍક્સેસ કરો.</translation>
+<translation id="8602184400052594090">મેનિફેસ્ટ ફાઇલ ખૂટે છે અથવા વાંચવાયોગ્ય નથી.</translation>
+<translation id="1196944142850240972">બધી વેબસાઇટ્સ પરનાં તમારા ડેટાને ઍક્સેસ કરો</translation>
+<translation id="7217838517480956708">આ મશીનના વ્યવસ્થાપકને ઇન્સ્ટોલ કરવા માટે <ph name="EXTENSION_NAME"/> ની આવશ્કતા છે. તેને દૂર અથવા સંશોધિત કરી શકાશે નહીં.</translation>
+<translation id="7154130902455071009">તમારા પ્રારંભ પૃષ્ઠને આ પર બદલો: <ph name="START_PAGE"/></translation>
+<translation id="1803557475693955505">પૃષ્ઠભૂમિ પૃષ્ઠ '<ph name="BACKGROUND_PAGE"/>' લોડ કરી શકાયું નથી.</translation>
+<translation id="1442776214136941057"><ph name="VENDOR_NAME"/> ના <ph name="PRODUCT_NAME"/> USB ઉપકરણને ઍક્સેસ કરો.</translation>
+<translation id="3566784263424350852"><ph name="VENDOR_NAME"/> ના USB ઉપકરણને ઍક્સેસ કરો.</translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_hi.xtb b/extensions/strings/extensions_strings_hi.xtb
new file mode 100644
index 0000000..dc85b32
--- /dev/null
+++ b/extensions/strings/extensions_strings_hi.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="hi">
+<translation id="735746806431426829">अपना डेटा निम्न वेबसाइटों पर एक्सेस करें:</translation>
+<translation id="8719282907381795632"><ph name="WEBSITE_1"/> पर अपने डेटा तक पहुंचें</translation>
+<translation id="7809034755304591547"><ph name="EXTENSION_NAME"/> (एक्सटेंशन आईडी &quot;<ph name="EXTENSION_ID"/>&quot;) को व्यवस्थापक द्वारा प्रतिबंधित किया गया है.</translation>
+<translation id="2857834222104759979">मालसूची फ़ाइल अमान्य है.</translation>
+<translation id="6384275966486438344">अपनी खोज सेटिंग इसमें बदलें: <ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">USB उपकरण एक्सेस करें.</translation>
+<translation id="5911798608827489036">स्थानीय नेटवर्क या इंटरनेट पर किसी कंप्यूटर से डेटा का आदान-प्रदान करें</translation>
+<translation id="657064425229075395">पृष्ठभूमि स्क्रिप्ट '<ph name="BACKGROUND_SCRIPT"/>' लोड नहीं की जा सकी.</translation>
+<translation id="3093853184108622112"><ph name="WEBSITE_1"/> और <ph name="WEBSITE_2"/> पर अपने डेटा तक पहुंचें</translation>
+<translation id="8597109877291678953"><ph name="HOSTNAME"/> नामक कंप्यूटर से डेटा का आदान-प्रदान करें</translation>
+<translation id="6914908792814954894"><ph name="NUMBER_OF_WEBSITES"/> वेबसाइटों पर अपना डेटा एक्सेस करें</translation>
+<translation id="5456409301717116725">एक्सटेंशन में कुंजी फ़ाइल '<ph name="KEY_PATH"/>' शामिल है. संभवतः आप ऐसा नहीं करना चाहते हैं.</translation>
+<translation id="6968649314782363508"><ph name="WEBSITE_1"/>, <ph name="WEBSITE_2"/>, और <ph name="WEBSITE_3"/> पर अपने डेटा तक पहुंचें</translation>
+<translation id="149347756975725155">एक्सटेंशन आइकन '<ph name="ICON"/>' लोड नहीं कर सका.</translation>
+<translation id="6344170822609224263">नेटवर्क कनेक्शन की सूची एक्सेस करें</translation>
+<translation id="2518849872271000461">इस नाम वाले कंप्यूटर से डेटा का आदान-प्रदान करें: <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052"><ph name="NUMBER_OF_WEBSITES"/> वेबसाइटों पर अपना डेटा एक्सेस करें</translation>
+<translation id="961805664415579088"><ph name="DOMAIN"/> डोमेन में किसी कंप्यूटर से डेटा का आदान-प्रदान करें</translation>
+<translation id="4968399700653439437">इस डोमेन में किसी कंप्यूटर से डेटा का आदान-प्रदान करें: <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">अपना मुखपृष्ठ इसमें बदलें: <ph name="HOME_PAGE"/></translation>
+<translation id="2893389635995517838">अपने कंप्यूटर से फ़ोटो, संगीत, और अन्य मीडिया एक्सेस करें.</translation>
+<translation id="8602184400052594090">मालसूची फ़ाइल गुम है या पढ़ने योग्य नहीं है.</translation>
+<translation id="1196944142850240972">सभी वेबसाइटों पर अपने डेटा तक पहुंचें</translation>
+<translation id="7217838517480956708">इस मशीन का व्यवस्थापक चाहता है कि <ph name="EXTENSION_NAME"/> इंस्टॉल किया हुआ हो. इसे निकाला या संशोधित नहीं किया जा सकता.</translation>
+<translation id="7154130902455071009">अपना आरंभ पृष्ठ इसमें बदलें: <ph name="START_PAGE"/></translation>
+<translation id="1803557475693955505">पृष्ठभूमि पृष्ठ '<ph name="BACKGROUND_PAGE"/>' को लोड नहीं कर सका.</translation>
+<translation id="1442776214136941057"><ph name="PRODUCT_NAME"/> से <ph name="VENDOR_NAME"/> USB उपकरण एक्सेस करें.</translation>
+<translation id="3566784263424350852"><ph name="VENDOR_NAME"/> का USB उपकरण एक्सेस करें.</translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_hr.xtb b/extensions/strings/extensions_strings_hr.xtb
new file mode 100644
index 0000000..5595f4c
--- /dev/null
+++ b/extensions/strings/extensions_strings_hr.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="hr">
+<translation id="735746806431426829">Pristupite svojim podacima na sljedećim web-lokacijama:</translation>
+<translation id="8719282907381795632">pristupiti vašim podacima na web-lokaciji <ph name="WEBSITE_1"/></translation>
+<translation id="7809034755304591547"><ph name="EXTENSION_NAME"/> (ID proširenja &quot;<ph name="EXTENSION_ID"/>&quot;) blokirao je administrator.</translation>
+<translation id="2857834222104759979">Datoteka manifesta nije važeća.</translation>
+<translation id="6384275966486438344">Promijenite postavke pretraživanja na: <ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">Pristupi USB uređaju.</translation>
+<translation id="5911798608827489036">Razmjena podataka s bilo kojim računalom na lokalnoj mreži ili internetu</translation>
+<translation id="657064425229075395">Nije bilo moguće učitati pozadinsku skriptu &quot;<ph name="BACKGROUND_SCRIPT"/>&quot;.</translation>
+<translation id="3093853184108622112">pristupiti vašim podacima na web-lokacijama <ph name="WEBSITE_1"/> i <ph name="WEBSITE_2"/></translation>
+<translation id="8597109877291678953">Razmjena podataka s računalom pod nazivom <ph name="HOSTNAME"/></translation>
+<translation id="6914908792814954894">Pristupite svojim podacima na <ph name="NUMBER_OF_WEBSITES"/> web-lokacija</translation>
+<translation id="5456409301717116725">To proširenje uključuje ključnu datoteku &quot;<ph name="KEY_PATH"/>&quot;. Vjerojatno ne želite to učiniti.</translation>
+<translation id="6968649314782363508">pristupiti vašim podacima na web-lokacijama <ph name="WEBSITE_1"/>, <ph name="WEBSITE_2"/> i <ph name="WEBSITE_3"/></translation>
+<translation id="149347756975725155">Nije uspjelo učitavanje ikone proširenja &quot;<ph name="ICON"/>&quot;.</translation>
+<translation id="6344170822609224263">Pristupi popisu mrežnih veza</translation>
+<translation id="2518849872271000461">Razmjena podataka s računalima pod nazivima: <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052">Pristupite svojim podacima na <ph name="NUMBER_OF_WEBSITES"/> web-lokacija</translation>
+<translation id="961805664415579088">Razmjena podataka s bilo kojim računalom u domeni <ph name="DOMAIN"/></translation>
+<translation id="4968399700653439437">Razmjena podataka s bilo kojim računalom u domenama: <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">Promijenite svoju početnu stranicu u stranicu: <ph name="HOME_PAGE"/></translation>
+<translation id="2893389635995517838">Pristup fotografijama, glazbi i drugim medijima s vašeg računala.</translation>
+<translation id="8602184400052594090">Datoteka manifesta nedostaje ili nije čitljiva.</translation>
+<translation id="1196944142850240972">pristupiti podacima na svim web-lokacijama</translation>
+<translation id="7217838517480956708">Administrator ovog računala zahtijeva instalaciju proširenja <ph name="EXTENSION_NAME"/>. Ona se ne može ukloniti ni izmijeniti.</translation>
+<translation id="7154130902455071009">Promijenite svoju početnu stranicu na: <ph name="START_PAGE"/></translation>
+<translation id="1803557475693955505">Nije uspjelo učitavanje pozadinske stranice &quot;<ph name="BACKGROUND_PAGE"/>&quot;.</translation>
+<translation id="1442776214136941057">Pristupi USB uređaju <ph name="PRODUCT_NAME"/> usluge <ph name="VENDOR_NAME"/>.</translation>
+<translation id="3566784263424350852">Pristupi USB uređaju usluge <ph name="VENDOR_NAME"/>.</translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_hu.xtb b/extensions/strings/extensions_strings_hu.xtb
new file mode 100644
index 0000000..8910bd9
--- /dev/null
+++ b/extensions/strings/extensions_strings_hu.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="hu">
+<translation id="735746806431426829">Adatok elérése a következő webhelyeken:</translation>
+<translation id="8719282907381795632">Hozzáférés az Ön adataihoz a következő webhelyen: <ph name="WEBSITE_1"/></translation>
+<translation id="7809034755304591547">A(z) <ph name="EXTENSION_NAME"/> bővítményt (bővítményazonosító: „<ph name="EXTENSION_ID"/>”) blokkolta a rendszergazda.</translation>
+<translation id="2857834222104759979">A jegyzékfájl érvénytelen.</translation>
+<translation id="6384275966486438344">A keresési beállítások módosítása a következőre: <ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">Hozzáférés az USB-eszközhöz.</translation>
+<translation id="5911798608827489036">Adatok cseréje bármilyen számítógéppel a helyi hálózaton vagy az interneten</translation>
+<translation id="657064425229075395">Nem sikerült betölteni a következő háttérszkriptet: &quot;<ph name="BACKGROUND_SCRIPT"/>&quot;.</translation>
+<translation id="3093853184108622112">Hozzáférés az Ön adataihoz a(z) <ph name="WEBSITE_1"/> és <ph name="WEBSITE_2"/> webhelyeken</translation>
+<translation id="8597109877291678953">Adatok cseréje a(z) <ph name="HOSTNAME"/> nevű számítógéppel</translation>
+<translation id="6914908792814954894">Hozzáférés az adatokhoz <ph name="NUMBER_OF_WEBSITES"/> webhelyen</translation>
+<translation id="5456409301717116725">Ez a bővítmény a(z) &quot;<ph name="KEY_PATH"/>&quot; kulcsfájlt tartalmazza. Ezt Ön valószínűleg nem szeretné.</translation>
+<translation id="6968649314782363508">Hozzáférés az Ön adataihoz a(z) <ph name="WEBSITE_1"/>, <ph name="WEBSITE_2"/> és <ph name="WEBSITE_3"/> webhelyeken</translation>
+<translation id="149347756975725155">A(z) '<ph name="ICON"/>' bővítményikon betöltése nem sikerült.</translation>
+<translation id="6344170822609224263">A hálózati kapcsolatok hozzáférési listája</translation>
+<translation id="2518849872271000461">Adatok cseréje a következő nevű számítógépekkel: <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052">Hozzáférés az adatokhoz <ph name="NUMBER_OF_WEBSITES"/> webhelyen</translation>
+<translation id="961805664415579088">Adatok cseréje bármilyen számítógéppel a következő domainben: <ph name="DOMAIN"/></translation>
+<translation id="4968399700653439437">Adatok cseréje bármilyen számítógéppel a következő domainekben: <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">Kezdőlap módosítása a következőre: <ph name="HOME_PAGE"/></translation>
+<translation id="2893389635995517838">Fényképek, zene és egyéb multimédiás anyagok elérése a számítógépről.</translation>
+<translation id="8602184400052594090">A jegyzékfájl hiányzik vagy nem olvasható.</translation>
+<translation id="1196944142850240972">Hozzáférés az Ön adataihoz az összes webhelyen</translation>
+<translation id="7217838517480956708">Az eszköz rendszergazdája megköveteli, hogy a(z) <ph name="EXTENSION_NAME"/> telepítve legyen. A bővítményt nem lehet eltávolítani vagy módosítani.</translation>
+<translation id="7154130902455071009">Kezdőoldal módosítása a következőre: <ph name="START_PAGE"/></translation>
+<translation id="1803557475693955505">Nem lehet betölteni a(z) '<ph name="BACKGROUND_PAGE"/>' háttéroldalt.</translation>
+<translation id="1442776214136941057">Hozzáférés <ph name="VENDOR_NAME"/> gyártó <ph name="PRODUCT_NAME"/> USB-eszközéhez.</translation>
+<translation id="3566784263424350852">Hozzáférés <ph name="VENDOR_NAME"/> gyártó USB-eszközéhez.</translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_id.xtb b/extensions/strings/extensions_strings_id.xtb
new file mode 100644
index 0000000..eee70d8
--- /dev/null
+++ b/extensions/strings/extensions_strings_id.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="id">
+<translation id="735746806431426829">Mengakses data Anda di situs web berikut:</translation>
+<translation id="8719282907381795632">Mengakses data Anda pada <ph name="WEBSITE_1"/></translation>
+<translation id="7809034755304591547"><ph name="EXTENSION_NAME"/> (ID ekstensi &quot;<ph name="EXTENSION_ID"/>&quot;) dicekal oleh administrator.</translation>
+<translation id="2857834222104759979">File manifes tidak valid.</translation>
+<translation id="6384275966486438344">Ubah setelan penelusuran Anda menjadi: <ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">Akses perangkat USB.</translation>
+<translation id="5911798608827489036">Tukar data dengan komputer mana saja di jaringan lokal atau internet</translation>
+<translation id="657064425229075395">Tidak dapat memuat skrip latar belakang '<ph name="BACKGROUND_SCRIPT"/>'.</translation>
+<translation id="3093853184108622112">Mengakses data Anda pada <ph name="WEBSITE_1"/> dan <ph name="WEBSITE_2"/></translation>
+<translation id="8597109877291678953">Tukar data dengan komputer yang bernama <ph name="HOSTNAME"/></translation>
+<translation id="6914908792814954894">Mengakses data Anda di <ph name="NUMBER_OF_WEBSITES"/> situs web</translation>
+<translation id="5456409301717116725">Ekstensi ini termasuk file kunci '<ph name="KEY_PATH"/>'. Anda mungkin tidak ingin melakukannya.</translation>
+<translation id="6968649314782363508">Mengakses data Anda pada <ph name="WEBSITE_1"/>, <ph name="WEBSITE_2"/>, dan <ph name="WEBSITE_3"/></translation>
+<translation id="149347756975725155">Tidak dapat memuat ikon ekstensi '<ph name="ICON"/>'.</translation>
+<translation id="6344170822609224263">Mengakses daftar sambungan jaringan</translation>
+<translation id="2518849872271000461">Tukar data dengan komputer yang bernama: <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052">Mengakses data Anda di <ph name="NUMBER_OF_WEBSITES"/> situs web</translation>
+<translation id="961805664415579088">Tukar data dengan komputer mana saja di domain <ph name="DOMAIN"/></translation>
+<translation id="4968399700653439437">Tukar data dengan komputer mana saja di domain: <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">Ubah laman beranda Anda menjadi: <ph name="HOME_PAGE"/></translation>
+<translation id="2893389635995517838">Mengakses foto, musik, dan media lain dari komputer Anda.</translation>
+<translation id="8602184400052594090">File manifes tidak ada atau tidak dapat dibaca.</translation>
+<translation id="1196944142850240972">Mengakses data Anda pada semua situs web</translation>
+<translation id="7217838517480956708">Administrator mesin ini membutuhkan <ph name="EXTENSION_NAME"/> untuk dipasang. Persyaratan ini tidak dapat dihapus atau dimodifikasi.</translation>
+<translation id="7154130902455071009">Ubah laman awal Anda menjadi: <ph name="START_PAGE"/></translation>
+<translation id="1803557475693955505">Tidak dapat memuat laman latar belakang '<ph name="BACKGROUND_PAGE"/>'.</translation>
+<translation id="1442776214136941057">Akses perangkat USB <ph name="PRODUCT_NAME"/> dari <ph name="VENDOR_NAME"/>.</translation>
+<translation id="3566784263424350852">Akses perangkat USB dari <ph name="VENDOR_NAME"/>.</translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_it.xtb b/extensions/strings/extensions_strings_it.xtb
new file mode 100644
index 0000000..8b98b30
--- /dev/null
+++ b/extensions/strings/extensions_strings_it.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="it">
+<translation id="735746806431426829">Accesso ai tuoi dati sui seguenti siti web:</translation>
+<translation id="8719282907381795632">Accesso ai dati dell'utente su <ph name="WEBSITE_1"/></translation>
+<translation id="7809034755304591547">L'estensione <ph name="EXTENSION_NAME"/> (ID &quot;<ph name="EXTENSION_ID"/>&quot;) è stata bloccata dall'amministratore.</translation>
+<translation id="2857834222104759979">File manifest non valido.</translation>
+<translation id="6384275966486438344">Modifica delle impostazioni di ricerca per: <ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">Accesso al dispositivo USB.</translation>
+<translation id="5911798608827489036">Scambio di dati con qualsiasi computer sulla rete locale o su Internet</translation>
+<translation id="657064425229075395">Impossibile caricare lo script in background &quot;<ph name="BACKGROUND_SCRIPT"/>&quot;.</translation>
+<translation id="3093853184108622112">Accesso ai dati dell'utente su <ph name="WEBSITE_1"/> e <ph name="WEBSITE_2"/></translation>
+<translation id="8597109877291678953">Scambio di dati con il computer denominato <ph name="HOSTNAME"/></translation>
+<translation id="6914908792814954894">Accesso ai tuoi dati su <ph name="NUMBER_OF_WEBSITES"/> siti web</translation>
+<translation id="5456409301717116725">Questa estensione include il file di chiave &quot;<ph name="KEY_PATH"/>&quot;. Probabilmente preferiresti che non l'includesse.</translation>
+<translation id="6968649314782363508">Accesso ai dati dell'utente su <ph name="WEBSITE_1"/>, <ph name="WEBSITE_2"/> e <ph name="WEBSITE_3"/></translation>
+<translation id="149347756975725155">Impossibile caricare l'icona estensione &quot;<ph name="ICON"/>&quot;.</translation>
+<translation id="6344170822609224263">Accesso all'elenco di connessioni di rete</translation>
+<translation id="2518849872271000461">Scambio di dati con i computer denominati: <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052">Accedere ai tuoi dati su <ph name="NUMBER_OF_WEBSITES"/> siti web</translation>
+<translation id="961805664415579088">Scambio di dati con qualsiasi computer nel dominio <ph name="DOMAIN"/></translation>
+<translation id="4968399700653439437">Scambio di dati con qualsiasi computer nei domini: <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">Cambio della pagina iniziale con: <ph name="HOME_PAGE"/></translation>
+<translation id="2893389635995517838">Accesso a foto, musica e altri contenuti multimediali dal computer.</translation>
+<translation id="8602184400052594090">File manifest mancante o illeggibile.</translation>
+<translation id="1196944142850240972">Accesso ai dati dell'utente su tutti i siti web</translation>
+<translation id="7217838517480956708">L'amministratore di questo computer richiede che l'estensione <ph name="EXTENSION_NAME"/> sia installata. Non è possibile rimuovere o modificare l'estensione.</translation>
+<translation id="7154130902455071009">Cambio della pagina iniziale con: <ph name="START_PAGE"/></translation>
+<translation id="1803557475693955505">Impossibile caricare la pagina di sfondo &quot;<ph name="BACKGROUND_PAGE"/>&quot;.</translation>
+<translation id="1442776214136941057">Accesso al dispositivo USB <ph name="PRODUCT_NAME"/> di <ph name="VENDOR_NAME"/>.</translation>
+<translation id="3566784263424350852">Accesso al dispositivo USB di <ph name="VENDOR_NAME"/>.</translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_iw.xtb b/extensions/strings/extensions_strings_iw.xtb
new file mode 100644
index 0000000..0d27cf7
--- /dev/null
+++ b/extensions/strings/extensions_strings_iw.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="iw">
+<translation id="735746806431426829">גישה לנתונים שלך באתרים הבאים:</translation>
+<translation id="8719282907381795632">להיכנס לנתונים שלך ב-‏<ph name="WEBSITE_1"/></translation>
+<translation id="7809034755304591547"><ph name="EXTENSION_NAME"/> (זיהוי תוסף '<ph name="EXTENSION_ID"/>') נחסם על ידי מנהל המערכת.</translation>
+<translation id="2857834222104759979">קובץ המניספט לא חוקי.</translation>
+<translation id="6384275966486438344">שנה את הגדרות החיפוש שלך ל: <ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">‏גש להתקן ה-USB.</translation>
+<translation id="5911798608827489036">החלפת נתונים עם כל מחשב ברשת המקומית או באינטרנט</translation>
+<translation id="657064425229075395">לא ניתן להעלות את סקריפט הרקע '<ph name="BACKGROUND_SCRIPT"/>'.</translation>
+<translation id="3093853184108622112">להיכנס לנתונים שלך ב-‏<ph name="WEBSITE_1"/> וב-‏<ph name="WEBSITE_2"/></translation>
+<translation id="8597109877291678953">החלפת נתונים עם המחשב ששמו <ph name="HOSTNAME"/></translation>
+<translation id="6914908792814954894">גישה לנתונים שלך ב-<ph name="NUMBER_OF_WEBSITES"/> אתרים</translation>
+<translation id="5456409301717116725">תוסף זה כולל את קובץ המפתח &quot;<ph name="KEY_PATH"/>&quot;. מומלץ לא לעשות זאת.</translation>
+<translation id="6968649314782363508">להיכנס לנתונים שלך ב-<ph name="WEBSITE_1"/>, <ph name="WEBSITE_2"/>, וב-<ph name="WEBSITE_3"/></translation>
+<translation id="149347756975725155">לא היתה אפשרות לטעון את אייקון התוסף '<ph name="ICON"/>'.</translation>
+<translation id="6344170822609224263">גישה לרשימת החיבורים לרשת</translation>
+<translation id="2518849872271000461">החלפת נתונים עם המחשבים ששמותיהם: <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052">גישה לנתונים שלך ב-<ph name="NUMBER_OF_WEBSITES"/> אתרים</translation>
+<translation id="961805664415579088">החלפת נתונים עם כל מחשב בדומיין <ph name="DOMAIN"/></translation>
+<translation id="4968399700653439437">החלפת נתונים עם כל מחשב בדומיינים: <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">שינוי של דף הבית ל: <ph name="HOME_PAGE"/></translation>
+<translation id="2893389635995517838">גישה לתמונות, מוסיקה ומדיה נוספת מהמחשב שלך.</translation>
+<translation id="8602184400052594090">קובץ המניפסט חסר או בלתי קריא.</translation>
+<translation id="1196944142850240972">להיכנס לנתונים שלך בכל האתרים</translation>
+<translation id="7217838517480956708">מנהל המערכת של מחשב זה דורש התקנת <ph name="EXTENSION_NAME"/>. לא ניתן להסיר או לשנות אותו.</translation>
+<translation id="7154130902455071009">שנה את דף הפתיחה ל: <ph name="START_PAGE"/></translation>
+<translation id="1803557475693955505">לא היתה אפשרות לטעון את דף הרקע '<ph name="BACKGROUND_PAGE"/>'.</translation>
+<translation id="1442776214136941057">‏גש למכשיר ה-USB‏ <ph name="PRODUCT_NAME"/> מ-<ph name="VENDOR_NAME"/>.</translation>
+<translation id="3566784263424350852">‏גש למכשיר ה-USB ‏מ-<ph name="VENDOR_NAME"/>.</translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_ja.xtb b/extensions/strings/extensions_strings_ja.xtb
new file mode 100644
index 0000000..62e4e8d
--- /dev/null
+++ b/extensions/strings/extensions_strings_ja.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="ja">
+<translation id="735746806431426829">次のウェブサイト上のユーザー データへのアクセス:</translation>
+<translation id="8719282907381795632"><ph name="WEBSITE_1"/> のデータにアクセスする</translation>
+<translation id="7809034755304591547"><ph name="EXTENSION_NAME"/>（拡張機能 ID「<ph name="EXTENSION_ID"/>」）は管理者によってブロックされています。</translation>
+<translation id="2857834222104759979">マニフェスト ファイルが無効です。</translation>
+<translation id="6384275966486438344">検索設定を次に変更します: <ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">USB デバイスへのアクセス。</translation>
+<translation id="5911798608827489036">ローカル ネットワークまたはインターネット上のパソコンとのデータ交換</translation>
+<translation id="657064425229075395">バックグラウンド スクリプト「<ph name="BACKGROUND_SCRIPT"/>」を読み込めませんでした。</translation>
+<translation id="3093853184108622112"><ph name="WEBSITE_1"/> と <ph name="WEBSITE_2"/> のデータにアクセスする</translation>
+<translation id="8597109877291678953">パソコン <ph name="HOSTNAME"/> とのデータ交換</translation>
+<translation id="6914908792814954894"><ph name="NUMBER_OF_WEBSITES"/> 個のウェブサイトのデータにアクセスする</translation>
+<translation id="5456409301717116725">この拡張機能には、鍵ファイル「<ph name="KEY_PATH"/>」が含まれていますが、おそらくその必要性はありません。</translation>
+<translation id="6968649314782363508"><ph name="WEBSITE_1"/>、<ph name="WEBSITE_2"/>、<ph name="WEBSITE_3"/> のデータにアクセスする</translation>
+<translation id="149347756975725155">拡張機能アイコン「<ph name="ICON"/>」を読み込むことができませんでした。</translation>
+<translation id="6344170822609224263">ネットワーク接続のリストにアクセスする</translation>
+<translation id="2518849872271000461">次のパソコンとのデータ交換: <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052"><ph name="NUMBER_OF_WEBSITES"/> 件のウェブサイトのデータへのアクセス</translation>
+<translation id="961805664415579088">ドメイン <ph name="DOMAIN"/> 内のパソコンとのデータ交換</translation>
+<translation id="4968399700653439437">次のドメイン内のパソコンとのデータ交換: <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">ホームページを次に変更: <ph name="HOME_PAGE"/></translation>
+<translation id="2893389635995517838">パソコンから画像、音楽、その他のメディアへのアクセス。</translation>
+<translation id="8602184400052594090">マニフェスト ファイルが見つからないか読み取れません。</translation>
+<translation id="1196944142850240972">すべてのウェブサイトのデータにアクセスする</translation>
+<translation id="7217838517480956708">このパソコンの管理者にとって <ph name="EXTENSION_NAME"/> がインストールされている必要があります。削除や修正はできません。</translation>
+<translation id="7154130902455071009">スタート ページを次に変更します: <ph name="START_PAGE"/></translation>
+<translation id="1803557475693955505">背景ページ「<ph name="BACKGROUND_PAGE"/>」を読み込むことができませんでした。</translation>
+<translation id="1442776214136941057"><ph name="VENDOR_NAME"/> の USB デバイス <ph name="PRODUCT_NAME"/> にアクセス。</translation>
+<translation id="3566784263424350852"><ph name="VENDOR_NAME"/> の USB デバイスにアクセス。</translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_kn.xtb b/extensions/strings/extensions_strings_kn.xtb
new file mode 100644
index 0000000..a1e8c2e
--- /dev/null
+++ b/extensions/strings/extensions_strings_kn.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="kn">
+<translation id="735746806431426829">ಈ ಕೆಳಗಿನ ವೆಬ್‌ಸೈಟ್‌ಗಳಲ್ಲಿ ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಪ್ರವೇಶಿಸಿ:</translation>
+<translation id="8719282907381795632"><ph name="WEBSITE_1"/> ರಲ್ಲಿ ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಪ್ರವೇಶಿಸಿ</translation>
+<translation id="7809034755304591547">ನಿರ್ವಾಹಕನಿಂದ <ph name="EXTENSION_NAME"/> (ವಿಸ್ತರಣೆ ID &quot;<ph name="EXTENSION_ID"/>&quot;) ಅನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ.</translation>
+<translation id="2857834222104759979">ಮ್ಯಾನಿಫೆಸ್ಟ್ ಫೈಲ್ ಮಾನ್ಯತೆ ಪಡೆದಿಲ್ಲ.</translation>
+<translation id="6384275966486438344">ನಿಮ್ಮ ಹುಡುಕಾಟದ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಹೀಗೆ ಬದಲಾಯಿಸಿ: <ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">USB ಸಾಧನವನ್ನು ಪ್ರವೇಶಿಸಿ.</translation>
+<translation id="5911798608827489036">ಸ್ಥಳೀಯ ನೆಟ್‌ವರ್ಕ್ ಅಥವಾ ಇಂಟರ್ನೆಟ್‌ನಲ್ಲಿ ಯಾವುದೇ ಕಂಪ್ಯೂಟರ್‌ನೊಂದಿಗೆ ಡೇಟಾ ವಿನಿಮಯ ಮಾಡಿ</translation>
+<translation id="657064425229075395">'<ph name="BACKGROUND_SCRIPT"/>' ಹಿನ್ನೆಲೆ ಪುಟವನ್ನು ಲೋಡ್ ಮಾಡಲಾಗುವುದಿಲ್ಲ.</translation>
+<translation id="3093853184108622112"><ph name="WEBSITE_1"/> ಮತ್ತು <ph name="WEBSITE_2"/> ರಲ್ಲಿ ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಪ್ರವೇಶಿಸಿ</translation>
+<translation id="8597109877291678953"><ph name="HOSTNAME"/> ಹೆಸರಿನ ಕಂಪ್ಯೂಟರ್‌ನೊಂದಿಗೆ ಡೇಟಾ ವಿನಿಮಯ ಮಾಡಿ</translation>
+<translation id="6914908792814954894"><ph name="NUMBER_OF_WEBSITES"/> ವೆಬ್‌ಸೈಟ್‌ಗಳಲ್ಲಿ ನಿಮ್ಮ ಡೇಟಾ ಪ್ರವೇಶಿಸಿ</translation>
+<translation id="5456409301717116725">ಈ ವಿಸ್ತರಣೆಯು ಕೀ ಫೈಲ್ '<ph name="KEY_PATH"/>' ಅನ್ನು ಒಳಗೊಂಡಿದೆ. ನೀವು ಸಾಮಾನ್ಯವಾಗಿ ಹಾಗೆ ಮಾಡಲು ಬಯಸುವುದಿಲ್ಲ.</translation>
+<translation id="6968649314782363508"><ph name="WEBSITE_1"/>, <ph name="WEBSITE_2"/>, ಮತ್ತು <ph name="WEBSITE_3"/> ರಲ್ಲಿ ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಪ್ರವೇಶಿಸಿ</translation>
+<translation id="149347756975725155">'<ph name="ICON"/>' ಎಕ್ಸ್‌ಟೆನ್ಷನ್ ಐಕಾನ್  ಲೋಡ್ ಮಾಡಲಾಗಲಿಲ್ಲ.</translation>
+<translation id="6344170822609224263">ನೆಟ್‌ವರ್ಕ್ ಸಂಪರ್ಕಗಳ ಪಟ್ಟಿಯನ್ನು ಪ್ರವೇಶಿಸಿ</translation>
+<translation id="2518849872271000461">ಈ ಹೆಸರಿನ ಕಂಪ್ಯೂಟರ್‌ಗಳೊಂದಿಗೆ ಡೇಟಾ ವಿನಿಮಯ ಮಾಡಿ: <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052"><ph name="NUMBER_OF_WEBSITES"/> ವೆಬ್‌ಸೈಟ್‌ಗಳಲ್ಲಿ ನಿಮ್ಮ ಡೇಟಾ ಪ್ರವೇಶಿಸಿ</translation>
+<translation id="961805664415579088"><ph name="DOMAIN"/> ಡೊಮೇನ್‌‌ನಲ್ಲಿ ಯಾವುದೇ ಕಂಪ್ಯೂಟರ್‌ನೊಂದಿಗೆ ಡೇಟಾ ವಿನಿಮಯ ಮಾಡಿ</translation>
+<translation id="4968399700653439437">ಡೊಮೇನ್‌ಗಳಲ್ಲಿ ಯಾವುದೇ ಕಂಪ್ಯೂಟರ್‌ನೊಂದಿಗೆ ಡೇಟಾ ವಿನಿಮಯ ಮಾಡಿ: <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">ನಿಮ್ಮ ಮುಖ ಪುಟವನ್ನು ಇದಕ್ಕೆ ಬದಲಾಯಿಸಿ: <ph name="HOME_PAGE"/></translation>
+<translation id="2893389635995517838">ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್‌ನಿಂದ ಫೋಟೊಗಳು, ಸಂಗೀತ ಮತ್ತು ಇತರೆ ಮಾಧ್ಯಮ ಪ್ರವೇಶಿಸಿ.</translation>
+<translation id="8602184400052594090">ಮ್ಯಾನಿಫೆಸ್ಟ್ ಫೈಲ್ ಕಾಣದಾಗಿದೆ ಅಥವಾ ಓದಲಾಗುವುದಿಲ್ಲ.</translation>
+<translation id="1196944142850240972">ಎಲ್ಲಾ ವೆಬ್‌ಸೈಟ್‌ಗಳಲ್ಲಿ ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಪ್ರವೇಶಿಸಿ</translation>
+<translation id="7217838517480956708">ಈ ಯಂತ್ರದ ನಿರ್ವಾಹಕರಿಗೆ <ph name="EXTENSION_NAME"/> ಅನ್ನು ಸ್ಥಾಪಿಸುವ ಅಗತ್ಯವಿದೆ. ಇದನ್ನು ತೆಗೆದುಹಾಕಲು ಅಥವಾ ಮಾರ್ಪಡಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ.</translation>
+<translation id="7154130902455071009">ನಿಮ್ಮ ಪ್ರಾರಂಭ ಪುಟವನ್ನು ಇದಕ್ಕೆ ಬದಲಾಯಿಸಿ: <ph name="START_PAGE"/></translation>
+<translation id="1803557475693955505">'<ph name="BACKGROUND_PAGE"/>' ಹಿನ್ನಲೆ ಪುಟವನ್ನು ಲೋಡ್ ಮಾಡಲಾಗುವುದಿಲ್ಲ.</translation>
+<translation id="1442776214136941057">USB ಸಾಧನ <ph name="PRODUCT_NAME"/> ಅನ್ನು <ph name="VENDOR_NAME"/> ನಿಂದ ಪ್ರವೇಶಿಸಿ.</translation>
+<translation id="3566784263424350852"><ph name="VENDOR_NAME"/> ನಿಂದ USB ಸಾಧನವನ್ನು ಪ್ರವೇಶಿಸಿ.</translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_ko.xtb b/extensions/strings/extensions_strings_ko.xtb
new file mode 100644
index 0000000..3cb818a
--- /dev/null
+++ b/extensions/strings/extensions_strings_ko.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="ko">
+<translation id="735746806431426829">다음 웹사이트에서 내 데이터에 액세스:</translation>
+<translation id="8719282907381795632"><ph name="WEBSITE_1"/>의 데이터에 액세스</translation>
+<translation id="7809034755304591547"><ph name="EXTENSION_NAME"/>(확장 프로그램 ID '<ph name="EXTENSION_ID"/>')은(는) 관리자에 의해 차단되었습니다.</translation>
+<translation id="2857834222104759979">매니페스트 파일이 잘못되었습니다.</translation>
+<translation id="6384275966486438344">다음으로 검색 설정 변경: <ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">USB 기기에 액세스합니다.</translation>
+<translation id="5911798608827489036">로컬 네트워크 또는 인터넷의 모든 컴퓨터와 데이터 교환</translation>
+<translation id="657064425229075395">백그라운드 스크립트('<ph name="BACKGROUND_SCRIPT"/>')를 로드하지 못했습니다.</translation>
+<translation id="3093853184108622112"><ph name="WEBSITE_1"/> 및 <ph name="WEBSITE_2"/>의 데이터에 액세스</translation>
+<translation id="8597109877291678953">이름이 <ph name="HOSTNAME"/>인 컴퓨터와 데이터 교환</translation>
+<translation id="6914908792814954894"><ph name="NUMBER_OF_WEBSITES"/>개 웹사이트에 있는 데이터에 액세스</translation>
+<translation id="5456409301717116725">이 확장 프로그램은 키 파일 '<ph name="KEY_PATH"/>'을(를) 포함합니다. 사용하지 않는 것이 좋습니다.</translation>
+<translation id="6968649314782363508"><ph name="WEBSITE_1"/>, <ph name="WEBSITE_2"/> 및 <ph name="WEBSITE_3"/>의 데이터에 액세스</translation>
+<translation id="149347756975725155">확장 프로그램 아이콘('<ph name="ICON"/>')을 로드하지 못했습니다.</translation>
+<translation id="6344170822609224263">네트워크 연결 목록에 액세스</translation>
+<translation id="2518849872271000461">이름이 <ph name="HOSTNAMES"/>인 컴퓨터와 데이터 교환</translation>
+<translation id="5530391389158154052"><ph name="NUMBER_OF_WEBSITES"/>개 웹사이트의 데이터에 액세스</translation>
+<translation id="961805664415579088">도메인 <ph name="DOMAIN"/>에 있는 모든 컴퓨터와 데이터 교환</translation>
+<translation id="4968399700653439437">도메인 <ph name="DOMAINS"/>에 있는 모든 컴퓨터와 데이터 교환</translation>
+<translation id="8662911384982557515">다음으로 홈페이지 변경: <ph name="HOME_PAGE"/></translation>
+<translation id="2893389635995517838">컴퓨터에서 사진, 음악, 기타 미디어에 액세스합니다.</translation>
+<translation id="8602184400052594090">매니페스트 파일이 없거나 읽을 수 없습니다.</translation>
+<translation id="1196944142850240972">모든 웹사이트의 데이터에 액세스</translation>
+<translation id="7217838517480956708">이 기기를 설치할 때 관리자가 <ph name="EXTENSION_NAME"/>을(를) 요구합니다. 삭제 또는 수정할 수 없습니다.</translation>
+<translation id="7154130902455071009">다음으로 시작 페이지 변경: <ph name="START_PAGE"/></translation>
+<translation id="1803557475693955505">배경 페이지('<ph name="BACKGROUND_PAGE"/>')를 로드하지 못했습니다.</translation>
+<translation id="1442776214136941057"><ph name="VENDOR_NAME"/>에서 USB 기기 <ph name="PRODUCT_NAME"/>에 액세스합니다.</translation>
+<translation id="3566784263424350852"><ph name="VENDOR_NAME"/>에서 USB 기기에 액세스합니다.</translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_lt.xtb b/extensions/strings/extensions_strings_lt.xtb
new file mode 100644
index 0000000..7ca27d8
--- /dev/null
+++ b/extensions/strings/extensions_strings_lt.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="lt">
+<translation id="735746806431426829">Pasiekite duomenis nurodytose svetainėse:</translation>
+<translation id="8719282907381795632">Pasiekti <ph name="WEBSITE_1"/> duomenis</translation>
+<translation id="7809034755304591547">Administratorius užblokavo „<ph name="EXTENSION_NAME"/>“ (plėtinio ID „<ph name="EXTENSION_ID"/>“).</translation>
+<translation id="2857834222104759979">Neteisingas deklaracijos failas.</translation>
+<translation id="6384275966486438344">Pakeiskite paieškos nustatymus į: <ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">Pasiekti USB įrenginį.</translation>
+<translation id="5911798608827489036">Keistis duomenimis su bet kuriuo kompiuteriu vietiniame tinkle ar internete</translation>
+<translation id="657064425229075395">Nepavyko įkelti foninio scenarijaus „<ph name="BACKGROUND_SCRIPT"/>“.</translation>
+<translation id="3093853184108622112">Pasiekti <ph name="WEBSITE_1"/> ir <ph name="WEBSITE_2"/> duomenis</translation>
+<translation id="8597109877291678953">Keistis duomenimis su kompiuteriu, kurio pavadinimas <ph name="HOSTNAME"/></translation>
+<translation id="6914908792814954894">Pasiekite savo duomenis <ph name="NUMBER_OF_WEBSITES"/> svetain.</translation>
+<translation id="5456409301717116725">Šiame plėtinyje yra rakto failas „<ph name="KEY_PATH"/>“. Neturėtumėte to daryti.</translation>
+<translation id="6968649314782363508">Pasiekti <ph name="WEBSITE_1"/>, <ph name="WEBSITE_2"/> ir <ph name="WEBSITE_3"/> duomenis</translation>
+<translation id="149347756975725155">Nepavyko įkelti „<ph name="ICON"/>“ plėtinio piktogramos.</translation>
+<translation id="6344170822609224263">Pasiekti tinklo ryšių sąrašą</translation>
+<translation id="2518849872271000461">Keistis duomenimis su kompiuteriais, kurių pavadinimai: <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052">Pasiekite savo duomenis <ph name="NUMBER_OF_WEBSITES"/> svetain.</translation>
+<translation id="961805664415579088">Keistis duomenimis su bet kuriuo kompiuteriu domene <ph name="DOMAIN"/></translation>
+<translation id="4968399700653439437">Keistis duomenimis su bet kuriuo kompiuteriu šiuose domenuose: <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">Pakeisti pagrindinį puslapį į: <ph name="HOME_PAGE"/></translation>
+<translation id="2893389635995517838">Pasiekti nuotraukas, muziką ir kitą mediją iš kompiuterio.</translation>
+<translation id="8602184400052594090">Trūksta deklaracijos arba ji nenuskaitoma.</translation>
+<translation id="1196944142850240972">Pasiekti visų svetainių duomenis</translation>
+<translation id="7217838517480956708">Šio kompiuterio administratorius reikalauja, kad būtų įdiegtas papildinys „<ph name="EXTENSION_NAME"/>“. Jo negalima pašalinti ar pakeisti.</translation>
+<translation id="7154130902455071009">Pakeiskite pradžios puslapį į: <ph name="START_PAGE"/></translation>
+<translation id="1803557475693955505">Nepavyko įkelti fono puslapio „<ph name="BACKGROUND_PAGE"/>“.</translation>
+<translation id="1442776214136941057">Pasiekti USB įrenginį „<ph name="PRODUCT_NAME"/>“ iš „<ph name="VENDOR_NAME"/>“.</translation>
+<translation id="3566784263424350852">Pasiekti USB įrenginį iš „<ph name="VENDOR_NAME"/>“.</translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_lv.xtb b/extensions/strings/extensions_strings_lv.xtb
new file mode 100644
index 0000000..08d48fa
--- /dev/null
+++ b/extensions/strings/extensions_strings_lv.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="lv">
+<translation id="735746806431426829">Piekļuve datiem šādās vietnēs:</translation>
+<translation id="8719282907381795632">Piekļūt jūsu datiem vietnē <ph name="WEBSITE_1"/></translation>
+<translation id="7809034755304591547">Administrators bloķēja paplašinājumu <ph name="EXTENSION_NAME"/> (paplašinājuma ID “<ph name="EXTENSION_ID"/>”).</translation>
+<translation id="2857834222104759979">Manifesta fails nav derīgs.</translation>
+<translation id="6384275966486438344">Mainiet savus meklēšanas iestatījumus uz šiem: <ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">Piekļuve USB ierīcei.</translation>
+<translation id="5911798608827489036">Apmainīties datiem ar jebkuru datoru lokālajā tīklā vai internetā</translation>
+<translation id="657064425229075395">Nevarēja ielādēt fona skriptu <ph name="BACKGROUND_SCRIPT"/>.</translation>
+<translation id="3093853184108622112">Piekļūt jūsu datiem vietnēs <ph name="WEBSITE_1"/> un <ph name="WEBSITE_2"/></translation>
+<translation id="8597109877291678953">Apmainīties datiem ar datoru <ph name="HOSTNAME"/></translation>
+<translation id="6914908792814954894">Piekļūt jūsu datiem <ph name="NUMBER_OF_WEBSITES"/> vietnēs</translation>
+<translation id="5456409301717116725">Šis paplašinājums ietver atslēgas failu <ph name="KEY_PATH"/>. Iespējams, jūs to nevēlaties izmantot.</translation>
+<translation id="6968649314782363508">Piekļūt jūsu datiem vietnēs <ph name="WEBSITE_1"/>, <ph name="WEBSITE_2"/> un <ph name="WEBSITE_3"/></translation>
+<translation id="149347756975725155">Nevarēja ielādēt paplašinājuma ikonu “<ph name="ICON"/>”.</translation>
+<translation id="6344170822609224263">Piekļūt tīkla savienojumu sarakstam</translation>
+<translation id="2518849872271000461">Apmainīties datiem ar šādiem datoriem: <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052">Piekļuve jūsu datiem <ph name="NUMBER_OF_WEBSITES"/> vietnē(-ēs)</translation>
+<translation id="961805664415579088">Apmainīties datiem ar jebkuru datoru domēnā <ph name="DOMAIN"/></translation>
+<translation id="4968399700653439437">Apmainīties datiem ar jebkuru datoru šādos domēnos: <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">Mainiet savu sākumlapu uz šo: <ph name="HOME_PAGE"/></translation>
+<translation id="2893389635995517838">Piekļūt fotoattēliem, mūzikai un citam datorā pieejamam multivides saturam.</translation>
+<translation id="8602184400052594090">Manifesta fails nav atrodams vai nolasāms.</translation>
+<translation id="1196944142850240972">Piekļūt jūsu datiem visās vietnēs</translation>
+<translation id="7217838517480956708">Šīs ierīces administrators uzskata, ka paplašinājumam <ph name="EXTENSION_NAME"/> ir jābūt instalētam. To nevar noņemt vai pārveidot.</translation>
+<translation id="7154130902455071009">Mainiet savu sākumlapu uz šo: <ph name="START_PAGE"/></translation>
+<translation id="1803557475693955505">Nevarēja ielādēt fona lapu “<ph name="BACKGROUND_PAGE"/>”.</translation>
+<translation id="1442776214136941057">Piekļūt <ph name="VENDOR_NAME"/> USB ierīcei <ph name="PRODUCT_NAME"/>.</translation>
+<translation id="3566784263424350852">Piekļūt <ph name="VENDOR_NAME"/> USB ierīcei.</translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_ml.xtb b/extensions/strings/extensions_strings_ml.xtb
new file mode 100644
index 0000000..a3f2fe9
--- /dev/null
+++ b/extensions/strings/extensions_strings_ml.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="ml">
+<translation id="735746806431426829">ഇനിപ്പറയുന്ന വെബ്‌സൈറ്റുകളിൽ നിങ്ങളുടെ ഡാറ്റ ആക്‌സസ്സുചെയ്യുക:</translation>
+<translation id="8719282907381795632"><ph name="WEBSITE_1"/> എന്നതിലെ നിങ്ങളുടെ ഡാറ്റ ആക്‌സസ്സുചെയ്യുക</translation>
+<translation id="7809034755304591547"><ph name="EXTENSION_NAME"/> (വിപുലീകരണ ID &quot;<ph name="EXTENSION_ID"/>&quot;) അഡ്‌മിനിസ്‌ട്രേറ്റർ തടഞ്ഞു.</translation>
+<translation id="2857834222104759979">മാനിഫെസ്റ്റ് ഫയല്‍ അസാധുവാണ്.</translation>
+<translation id="6384275966486438344">നിങ്ങളുടെ തിരയൽ ക്രമീകരണങ്ങൾ മാറ്റുക: <ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">USB ഉപകരണം ആക്‌സസ്സുചെയ്യുക.</translation>
+<translation id="5911798608827489036">ഏതു കമ്പ്യൂട്ടർ ഉപയോഗിച്ചും പ്രാദേശിക നെറ്റ്‌വർക്കിലോ ഇന്റർനെറ്റിലോ ഡാറ്റ എക്‌സ്‌ചേഞ്ച് ചെയ്യുക</translation>
+<translation id="657064425229075395">പശ്ചാത്തല സ്‌ക്രിപ്റ്റ് '<ph name="BACKGROUND_SCRIPT"/>' ലോഡുചെയ്യാൻ കഴിഞ്ഞില്ല.</translation>
+<translation id="3093853184108622112"><ph name="WEBSITE_1"/>, <ph name="WEBSITE_2"/> എന്നിവയിലെ നിങ്ങളുടെ ഡാറ്റ ആക്‌സസ്സുചെയ്യുക</translation>
+<translation id="8597109877291678953"><ph name="HOSTNAME"/> എന്ന പേരിലുള്ള കമ്പ്യൂട്ടർ ഉപയോഗിച്ച് ഡാറ്റ എക്‌സ്‌ചേഞ്ചുചെയ്യുക</translation>
+<translation id="6914908792814954894">നിങ്ങളുടെ ഡാറ്റ <ph name="NUMBER_OF_WEBSITES"/> വെബ്‌സൈറ്റുകളിൽ ആക്‌സസ്സുചെയ്യുക</translation>
+<translation id="5456409301717116725">ഈ വിപുലീകരണത്തിൽ '<ph name="KEY_PATH"/>' എന്ന കീ ഫയൽ ഉൾപ്പെടുന്നു. മിക്കവാറും നിങ്ങൾ ഇത് ചെയ്യാൻ താൽപ്പര്യപ്പെട്ടേക്കില്ല.</translation>
+<translation id="6968649314782363508"><ph name="WEBSITE_1"/>, <ph name="WEBSITE_2"/>, <ph name="WEBSITE_3"/> എന്നിവയിലെ നിങ്ങളുടെ ഡാറ്റ ആക്‌സസ്സുചെയ്യുക</translation>
+<translation id="149347756975725155">വിപുലീകരണ ഐക്കണ്‍ '<ph name="ICON"/>' ലോഡുചെയ്യാനായില്ല.</translation>
+<translation id="6344170822609224263">നെറ്റ്‌വർക്ക് കണക്ഷനുകളുടെ ലിസ്റ്റ് ആക്‌സസ്സുചെയ്യുക</translation>
+<translation id="2518849872271000461">ഇനിപ്പറയുന്ന പേരിലുള്ള കമ്പ്യൂട്ടറുകൾ ഉപയോഗിച്ച് ഡാറ്റ എക്‌സ്‌ചേഞ്ചുചെയ്യുക: <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052">നിങ്ങളുടെ ഡാറ്റ <ph name="NUMBER_OF_WEBSITES"/> വെബ്‌സൈറ്റുകളിൽ ആക്‌സസ്സുചെയ്യുക</translation>
+<translation id="961805664415579088"><ph name="DOMAIN"/> എന്ന ഡൊമെയ്‌നിലുള്ള ഏത് കമ്പ്യൂട്ടർ ഉപയോഗിച്ചും ഡാറ്റ എക്‌സ്‌ചേഞ്ച് ചെയ്യുക</translation>
+<translation id="4968399700653439437">ഈ ഡൊമെയ്‌നുകളിലുള്ള ഏത് കമ്പ്യൂട്ടർ ഉപയോഗിച്ചും ഡാറ്റ എക്‌സ്‌ചേഞ്ച് ചെയ്യുക: <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">നിങ്ങളുടെ ഹോം പേജ് ഇതായി മാറ്റുക: <ph name="HOME_PAGE"/></translation>
+<translation id="2893389635995517838">നിങ്ങളുടെ കമ്പ്യൂട്ടറിൽ നിന്നും ഫോട്ടോകൾ, സംഗീതം, മറ്റ് മീഡിയ എന്നിവ ആക്‌സസ്സ് ചെയ്യുക.</translation>
+<translation id="8602184400052594090">മാനിഫെസ്റ്റ് ഫയല്‍ നഷ്ടപ്പെട്ടിരിക്കുന്നു അല്ലെങ്കില്‍ റീഡ് ചെയ്യാന്‍ കഴിയുന്നില്ല.</translation>
+<translation id="1196944142850240972">എല്ലാ വെബ്‌സൈറ്റുകളിലേയും നിങ്ങളുടെ ഡാറ്റ ആക്‌സസ്സുചെയ്യുക</translation>
+<translation id="7217838517480956708">ഈ മെഷീനിന്റെ അഡ്‌മിനിസ്‌ട്രേറ്റർ ഇൻസ്റ്റാളുചെയ്യുന്നതിനായി <ph name="EXTENSION_NAME"/> ആവശ്യപ്പെടുന്നു. ഇത് നീക്കംചെയ്യാനോ പരിഷ്‌ക്കരിക്കാനോ കഴിയില്ല.</translation>
+<translation id="7154130902455071009">നിങ്ങളുടെ ആരംഭ പേജ് ഇതായി മാറ്റുക: <ph name="START_PAGE"/></translation>
+<translation id="1803557475693955505">പശ്ചാത്തല പേജ് '<ph name="BACKGROUND_PAGE"/>' ലോഡുചെയ്യാന്‍ കഴിഞ്ഞില്ല.</translation>
+<translation id="1442776214136941057"><ph name="VENDOR_NAME"/> എന്നതിൽ നിന്ന് USB ഉപകരണം <ph name="PRODUCT_NAME"/> ആക്‌സസ്സുചെയ്യുക.</translation>
+<translation id="3566784263424350852"><ph name="VENDOR_NAME"/> എന്നതിൽ നിന്ന് USB ഉപകരണം ആക്‌സസ്സുചെയ്യുക.</translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_mr.xtb b/extensions/strings/extensions_strings_mr.xtb
new file mode 100644
index 0000000..181edb3
--- /dev/null
+++ b/extensions/strings/extensions_strings_mr.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="mr">
+<translation id="735746806431426829">खालील वेबसाइटवरील आपल्या डेटावर प्रवेश करा:</translation>
+<translation id="8719282907381795632"><ph name="WEBSITE_1"/> वरील आपल्या डेटावर प्रवेश करा</translation>
+<translation id="7809034755304591547"><ph name="EXTENSION_NAME"/> (विस्तार ID &quot;<ph name="EXTENSION_ID"/>&quot;) प्रशासकाद्वारे अवरोधित करण्यात आला आहे.</translation>
+<translation id="2857834222104759979">मॅनिफेस्ट फाइल अवैध आहे.</translation>
+<translation id="6384275966486438344">आपल्या शोध सेटिंग्ज यावर बदला: <ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">USB डिव्हाइसवर प्रवेश करा.</translation>
+<translation id="5911798608827489036">स्थानिक नेटवर्क किंवा इंटरनेटवरील कोणत्याही संगणकासह डेटा अदलाबदल करा</translation>
+<translation id="657064425229075395">पार्श्वभूमी स्क्रिप्‍ट '<ph name="BACKGROUND_SCRIPT"/>' लोड करू शकले नाही.</translation>
+<translation id="3093853184108622112"><ph name="WEBSITE_1"/> आणि <ph name="WEBSITE_2"/> वरील आपल्या डेटावर प्रवेश करा</translation>
+<translation id="8597109877291678953"><ph name="HOSTNAME"/> नावाच्या संगणकासह डेटा अदलाबदल करा</translation>
+<translation id="6914908792814954894"><ph name="NUMBER_OF_WEBSITES"/> वेबसाइटवरील आपल्या डेटावर प्रवेश करा</translation>
+<translation id="5456409301717116725">हा विस्तार मुख्य फाइल '<ph name="KEY_PATH"/>' समाविष्ट करतो. आपण कदाचित ते करू इच्छित नसू शकता.</translation>
+<translation id="6968649314782363508"><ph name="WEBSITE_1"/>, <ph name="WEBSITE_2"/>, आणि <ph name="WEBSITE_3"/> वरील आपल्या डेटावर प्रवेश करा</translation>
+<translation id="149347756975725155">विस्तार प्रतीक '<ph name="ICON"/>' लोड करणे शक्य नाही.</translation>
+<translation id="6344170822609224263">नेटवर्क कनेक्शनच्या सूचीवर प्रवेश करा</translation>
+<translation id="2518849872271000461">या नावाच्या संगणकासह डेटा अदलाबदल करा: <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052"><ph name="NUMBER_OF_WEBSITES"/> वेबसाइटवरील आपल्या डेटावर प्रवेश करा</translation>
+<translation id="961805664415579088"><ph name="DOMAIN"/> डोमेनमध्ये कोणत्याही संगणकासह डेटा अदलाबदल करा</translation>
+<translation id="4968399700653439437">डोमेनमध्ये कोणत्याही संगणकासह डेटा अदलाबदल करा: <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">आपले मुख्‍यपृष्‍ठ यावर बदला: <ph name="HOME_PAGE"/></translation>
+<translation id="2893389635995517838">आपल्या संगणकावरील फोटो, संगीत आणि अन्य मीडियावर प्रवेश करा.</translation>
+<translation id="8602184400052594090">मॅनिफेस्ट फाइल गहाळ किंवा अवाचनीय आहे.</translation>
+<translation id="1196944142850240972">सर्व वेबसाइटवरील आपल्या डेटावर प्रवेश करा</translation>
+<translation id="7217838517480956708">या मशीनच्या प्रशासकास <ph name="EXTENSION_NAME"/> स्थापन करणे आवश्यक आहे. हे काढले किंवा सुधारित केले जाऊ शकत नाही.</translation>
+<translation id="7154130902455071009">आपले प्रारंभ पृष्ठ यावर बदला: <ph name="START_PAGE"/></translation>
+<translation id="1803557475693955505">'पार्श्वभूमी पृष्ठ '<ph name="BACKGROUND_PAGE"/>'  लोड करणे शक्य नाही.</translation>
+<translation id="1442776214136941057"><ph name="VENDOR_NAME"/> कडील <ph name="PRODUCT_NAME"/> USB डिव्हाइसवर प्रवेश करा.</translation>
+<translation id="3566784263424350852"><ph name="VENDOR_NAME"/> कडील USB डिव्हाइसवर प्रवेश करा.</translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_ms.xtb b/extensions/strings/extensions_strings_ms.xtb
new file mode 100644
index 0000000..5979b94
--- /dev/null
+++ b/extensions/strings/extensions_strings_ms.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="ms">
+<translation id="735746806431426829">Akses data anda di tapak web berikut:</translation>
+<translation id="8719282907381795632">Akses data anda di <ph name="WEBSITE_1"/></translation>
+<translation id="7809034755304591547"><ph name="EXTENSION_NAME"/> (ID pelanjutan &quot;<ph name="EXTENSION_ID"/>&quot;) disekat oleh pentadbir.</translation>
+<translation id="2857834222104759979">Fail manifes tidak sah.</translation>
+<translation id="6384275966486438344">Ubah tetapan carian anda kepada: <ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">Akses peranti USB.</translation>
+<translation id="5911798608827489036">Bertukar data dengan mana-mana komputer pada rangkaian tempatan atau internet</translation>
+<translation id="657064425229075395">Tidak dapat memuatkan skrip latar belakang '<ph name="BACKGROUND_SCRIPT"/>'.</translation>
+<translation id="3093853184108622112">Akses data anda di <ph name="WEBSITE_1"/> dan <ph name="WEBSITE_2"/></translation>
+<translation id="8597109877291678953">Bertukar data dengan komputer bernama <ph name="HOSTNAME"/></translation>
+<translation id="6914908792814954894">Akses data anda di <ph name="NUMBER_OF_WEBSITES"/> tapak web</translation>
+<translation id="5456409301717116725">Pelanjutan ini merangkumi fail utama ' <ph name="KEY_PATH"/> '. Anda mungkin tidak mahu melakukannya.</translation>
+<translation id="6968649314782363508">Akses data anda di <ph name="WEBSITE_1"/>, <ph name="WEBSITE_2"/> dan <ph name="WEBSITE_3"/></translation>
+<translation id="149347756975725155">Tidak dapat memuatkan ikon sambungan '<ph name="ICON"/>'.</translation>
+<translation id="6344170822609224263">Akses senarai sambungan rangkaian</translation>
+<translation id="2518849872271000461">Bertukar data dengan komputer bernama: <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052">Akses data anda di <ph name="NUMBER_OF_WEBSITES"/> tapak web</translation>
+<translation id="961805664415579088">Bertukar data dengan mana-mana komputer dalam domain <ph name="DOMAIN"/></translation>
+<translation id="4968399700653439437">Bertukar data dengan mana-mana komputer dalam domain: <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">Tukar halaman utama anda kepada: <ph name="HOME_PAGE"/></translation>
+<translation id="2893389635995517838">Akses foto, muzik dan media lain dari komputer anda.</translation>
+<translation id="8602184400052594090">Fail ketara hilang atau tidak dibaca.</translation>
+<translation id="1196944142850240972">Akses data anda pada semua tapak web</translation>
+<translation id="7217838517480956708">Pentadbir mesin ini memerlukan <ph name="EXTENSION_NAME"/> dipasang. Pelanjutan ini tidak boleh dialih keluar atau diubah suai.</translation>
+<translation id="7154130902455071009">Tukar halaman permulaan anda kepada: <ph name="START_PAGE"/></translation>
+<translation id="1803557475693955505">Tidak dapat memuatkan halaman latar belakang '<ph name="BACKGROUND_PAGE"/>'.</translation>
+<translation id="1442776214136941057">Akses peranti USB <ph name="PRODUCT_NAME"/> daripada <ph name="VENDOR_NAME"/>.</translation>
+<translation id="3566784263424350852">Akses peranti USB daripada <ph name="VENDOR_NAME"/>.</translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_nl.xtb b/extensions/strings/extensions_strings_nl.xtb
new file mode 100644
index 0000000..ed4b584
--- /dev/null
+++ b/extensions/strings/extensions_strings_nl.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="nl">
+<translation id="735746806431426829">Je gegevens openen op de volgende websites:</translation>
+<translation id="8719282907381795632">Je gegevens op <ph name="WEBSITE_1"/> openen</translation>
+<translation id="7809034755304591547"><ph name="EXTENSION_NAME"/> (extensie-ID '<ph name="EXTENSION_ID"/>') wordt geblokkeerd door de beheerder.</translation>
+<translation id="2857834222104759979">Manifestbestand is ongeldig.</translation>
+<translation id="6384275966486438344">Je zoekinstellingen wijzigen in: <ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">Toegang tot het USB-apparaat.</translation>
+<translation id="5911798608827489036">Gegevens uitwisselen met elke computer op het lokale netwerk of internet</translation>
+<translation id="657064425229075395">Kan achtergrondscript '<ph name="BACKGROUND_SCRIPT"/>' niet laden.</translation>
+<translation id="3093853184108622112">Je gegevens op <ph name="WEBSITE_1"/> en <ph name="WEBSITE_2"/> openen</translation>
+<translation id="8597109877291678953">Gegevens uitwisselen met de computer met de naam <ph name="HOSTNAME"/></translation>
+<translation id="6914908792814954894">Je gegevens openen op <ph name="NUMBER_OF_WEBSITES"/> websites</translation>
+<translation id="5456409301717116725">Deze extensie bevat het sleutelbestand '<ph name="KEY_PATH"/>'. Dit is waarschijnlijk niet je bedoeling.</translation>
+<translation id="6968649314782363508">Je gegevens op <ph name="WEBSITE_1"/>, <ph name="WEBSITE_2"/> en <ph name="WEBSITE_3"/> openen</translation>
+<translation id="149347756975725155">Kan extensiepictogram '<ph name="ICON"/>' niet laden.</translation>
+<translation id="6344170822609224263">Toegang tot lijst met netwerkverbindingen</translation>
+<translation id="2518849872271000461">Gegevens uitwisselen met de computers met de volgende namen: <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052">Je gegevens openen op <ph name="NUMBER_OF_WEBSITES"/> websites</translation>
+<translation id="961805664415579088">Gegevens uitwisselen met elke computer in het domein <ph name="DOMAIN"/></translation>
+<translation id="4968399700653439437">Gegevens uitwisselen met elke computer in de volgende domeinen: <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">Je startpagina wijzigen in: <ph name="HOME_PAGE"/></translation>
+<translation id="2893389635995517838">Foto's, muziek en andere media van je computer openen.</translation>
+<translation id="8602184400052594090">Manifestbestand ontbreekt of is onleesbaar.</translation>
+<translation id="1196944142850240972">Je gegevens op alle websites openen</translation>
+<translation id="7217838517480956708">De beheerder van dit apparaat vereist dat <ph name="EXTENSION_NAME"/> is geïnstalleerd. Het kan niet worden verwijderd of gewijzigd.</translation>
+<translation id="7154130902455071009">Je startpagina wijzigen in: <ph name="START_PAGE"/></translation>
+<translation id="1803557475693955505">Kan achtergrondpagina '<ph name="BACKGROUND_PAGE"/>' niet laden.</translation>
+<translation id="1442776214136941057">Toegang tot USB-apparaat <ph name="PRODUCT_NAME"/> van <ph name="VENDOR_NAME"/>.</translation>
+<translation id="3566784263424350852">Toegang tot USB-apparaat van <ph name="VENDOR_NAME"/>.</translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_no.xtb b/extensions/strings/extensions_strings_no.xtb
new file mode 100644
index 0000000..94951c8
--- /dev/null
+++ b/extensions/strings/extensions_strings_no.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="no">
+<translation id="735746806431426829">få tilgang til dataene dine på disse nettstedene:</translation>
+<translation id="8719282907381795632">få tilgang til dataene dine på <ph name="WEBSITE_1"/></translation>
+<translation id="7809034755304591547"><ph name="EXTENSION_NAME"/> (utvidelses-ID «<ph name="EXTENSION_ID"/>») er blokkert av administratoren.</translation>
+<translation id="2857834222104759979">Manifestfilen er ugyldig.</translation>
+<translation id="6384275966486438344">endre søkeinnstillingene dine til: <ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">få tilgang til USB-enheten</translation>
+<translation id="5911798608827489036">utveksle data med en hvilken som helst datamaskin på det lokale nettverket eller Internett</translation>
+<translation id="657064425229075395">Kunne ikke laste inn bakgrunnsskriptet «<ph name="BACKGROUND_SCRIPT"/>».</translation>
+<translation id="3093853184108622112">få tilgang til dataene dine på <ph name="WEBSITE_1"/> og <ph name="WEBSITE_2"/></translation>
+<translation id="8597109877291678953">utveksle data med datamaskinen <ph name="HOSTNAME"/></translation>
+<translation id="6914908792814954894">få tilgang til dataene dine på <ph name="NUMBER_OF_WEBSITES"/> nettsteder</translation>
+<translation id="5456409301717116725">Denne utvidelsen inneholder nøkkelfilen «<ph name="KEY_PATH"/>». Du ønsker sannsynligvis ikke å gjøre dette.</translation>
+<translation id="6968649314782363508">få tilgang til dataene dine på <ph name="WEBSITE_1"/>, <ph name="WEBSITE_2"/> og <ph name="WEBSITE_3"/></translation>
+<translation id="149347756975725155">Kan ikke laste inn utvidelsesikonet «<ph name="ICON"/>».</translation>
+<translation id="6344170822609224263">få tilgang til liste over nettverkstilkoblinger</translation>
+<translation id="2518849872271000461">utveksle data med datamaskiner som har navnet: <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052">Få tilgang til dataene dine på <ph name="NUMBER_OF_WEBSITES"/> nettsteder</translation>
+<translation id="961805664415579088">utveksle data med en hvilken som helst datamaskin i domenet <ph name="DOMAIN"/></translation>
+<translation id="4968399700653439437">utveksle data med en hvilken som helst datamaskin på domenene: <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">endre startsiden din til: <ph name="HOME_PAGE"/></translation>
+<translation id="2893389635995517838">få tilgang til bilder, musikk og andre mediefiler fra datamaskinen din</translation>
+<translation id="8602184400052594090">Manifestfilen mangler eller kan ikke leses.</translation>
+<translation id="1196944142850240972">få tilgang til dataene dine på alle nettsteder</translation>
+<translation id="7217838517480956708">Administratoren til denne maskinen krever at <ph name="EXTENSION_NAME"/> blir installert. Utvidelsen kan ikke fjernes eller endres.</translation>
+<translation id="7154130902455071009">endre startsiden din til: <ph name="START_PAGE"/></translation>
+<translation id="1803557475693955505">Kan ikke laste inn bakgrunnssiden <ph name="BACKGROUND_PAGE"/>.</translation>
+<translation id="1442776214136941057">få tilgang til USB-enheten <ph name="PRODUCT_NAME"/> fra <ph name="VENDOR_NAME"/></translation>
+<translation id="3566784263424350852">få tilgang til USB-enheten fra <ph name="VENDOR_NAME"/></translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_pl.xtb b/extensions/strings/extensions_strings_pl.xtb
new file mode 100644
index 0000000..c7e84ac
--- /dev/null
+++ b/extensions/strings/extensions_strings_pl.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="pl">
+<translation id="735746806431426829">Uzyskaj dostęp do swoich danych w tych witrynach:</translation>
+<translation id="8719282907381795632">Uzyskiwać dostęp do Twoich danych w witrynie <ph name="WEBSITE_1"/></translation>
+<translation id="7809034755304591547"><ph name="EXTENSION_NAME"/> (ID rozszerzenia „<ph name="EXTENSION_ID"/>”) jest zablokowane przez administratora.</translation>
+<translation id="2857834222104759979">Plik manifestu jest nieprawidłowy.</translation>
+<translation id="6384275966486438344">Zmień ustawienia wyszukiwania na: <ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">Dostęp do urządzenia USB.</translation>
+<translation id="5911798608827489036">Wymiana danych z dowolnym komputerem w sieci lokalnej lub internecie</translation>
+<translation id="657064425229075395">Nie udało się wczytać skryptu działającego w tle „<ph name="BACKGROUND_SCRIPT"/>”.</translation>
+<translation id="3093853184108622112">Uzyskiwać dostęp do Twoich danych w witrynach <ph name="WEBSITE_1"/> i <ph name="WEBSITE_2"/></translation>
+<translation id="8597109877291678953">Wymiana danych z komputerem o nazwie <ph name="HOSTNAME"/></translation>
+<translation id="6914908792814954894">Korzystanie z Twoich danych w <ph name="NUMBER_OF_WEBSITES"/> witrynach</translation>
+<translation id="5456409301717116725">To rozszerzenie zawiera plik klucza „<ph name="KEY_PATH"/>”. Prawdopodobnie nie powinno tak być.</translation>
+<translation id="6968649314782363508">Uzyskiwać dostęp do Twoich danych w witrynach <ph name="WEBSITE_1"/>, <ph name="WEBSITE_2"/> i <ph name="WEBSITE_3"/></translation>
+<translation id="149347756975725155">Nie można wczytać ikony rozszerzenia „<ph name="ICON"/>”.</translation>
+<translation id="6344170822609224263">Lista dostępu połączeń sieciowych</translation>
+<translation id="2518849872271000461">Wymiana danych z komputerami o nazwach: <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052">Korzystanie z Twoich danych w <ph name="NUMBER_OF_WEBSITES"/> witrynach</translation>
+<translation id="961805664415579088">Wymiana danych z dowolnym komputerem w domenie <ph name="DOMAIN"/></translation>
+<translation id="4968399700653439437">Wymiana danych z dowolnym komputerem w domenach <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">Zmień stronę główną na: <ph name="HOME_PAGE"/></translation>
+<translation id="2893389635995517838">Uzyskaj dostęp do zdjęć, muzyki i innych multimediów na komputerze.</translation>
+<translation id="8602184400052594090">Brak pliku manifestu lub nie można go odczytać.</translation>
+<translation id="1196944142850240972">Uzyskiwać dostęp do Twoich danych we wszystkich witrynach</translation>
+<translation id="7217838517480956708">Administrator tego komputera wymaga zainstalowanego rozszerzenia <ph name="EXTENSION_NAME"/>. Nie można go usunąć ani modyfikować.</translation>
+<translation id="7154130902455071009">Zmień stronę startową na: <ph name="START_PAGE"/></translation>
+<translation id="1803557475693955505">Nie można wczytać strony w tle „<ph name="BACKGROUND_PAGE"/>”.</translation>
+<translation id="1442776214136941057">Dostęp do urządzenia USB <ph name="PRODUCT_NAME"/> firmy <ph name="VENDOR_NAME"/>.</translation>
+<translation id="3566784263424350852">Dostęp do urządzenia USB firmy <ph name="VENDOR_NAME"/>.</translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_pt-BR.xtb b/extensions/strings/extensions_strings_pt-BR.xtb
new file mode 100644
index 0000000..f95c532
--- /dev/null
+++ b/extensions/strings/extensions_strings_pt-BR.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="pt-BR">
+<translation id="735746806431426829">Acesse seus dados nos seguintes websites:</translation>
+<translation id="8719282907381795632">Acessar seus dados em <ph name="WEBSITE_1"/></translation>
+<translation id="7809034755304591547"><ph name="EXTENSION_NAME"/> (ID de extensão &quot;<ph name="EXTENSION_ID"/>&quot;) está bloqueada pelo administrador.</translation>
+<translation id="2857834222104759979">O arquivo de manifesto é inválido.</translation>
+<translation id="6384275966486438344">Alterar suas configurações de pesquisa para: <ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">Acessar o dispositivo USB.</translation>
+<translation id="5911798608827489036">Trocar dados com qualquer computador da rede local ou Internet</translation>
+<translation id="657064425229075395">Não foi possível carregar o script de plano de fundo &quot;<ph name="BACKGROUND_SCRIPT"/>&quot;.</translation>
+<translation id="3093853184108622112">Acessar seus dados em <ph name="WEBSITE_1"/> e <ph name="WEBSITE_2"/></translation>
+<translation id="8597109877291678953">Trocar dados com o computador chamado <ph name="HOSTNAME"/></translation>
+<translation id="6914908792814954894">Acessar seus dados em <ph name="NUMBER_OF_WEBSITES"/> websites</translation>
+<translation id="5456409301717116725">Esta extensão inclui o arquivo de chave '<ph name="KEY_PATH"/>'. Você provavelmente não quer fazer isso.</translation>
+<translation id="6968649314782363508">Acessar seus dados em <ph name="WEBSITE_1"/>, <ph name="WEBSITE_2"/> e <ph name="WEBSITE_3"/></translation>
+<translation id="149347756975725155">Não foi possível carregar o ícone de extensão &quot;<ph name="ICON"/>&quot;.</translation>
+<translation id="6344170822609224263">Acessar lista de conexões de rede</translation>
+<translation id="2518849872271000461">Trocar dados com os computadores chamados: <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052">Access your data on <ph name="NUMBER_OF_WEBSITES"/> websites</translation>
+<translation id="961805664415579088">Trocar dados com qualquer computador no domínio <ph name="DOMAIN"/></translation>
+<translation id="4968399700653439437">Trocar dados com qualquer computador nos domínios: <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">Alterar sua página inicial para: <ph name="HOME_PAGE"/></translation>
+<translation id="2893389635995517838">Acessar fotos, música e outras mídias em seu computador.</translation>
+<translation id="8602184400052594090">O arquivo de manifesto está faltando ou não pode ser lido.</translation>
+<translation id="1196944142850240972">Acessar seus dados em todos os websites</translation>
+<translation id="7217838517480956708">O administrador desta máquina requer a instalação de <ph name="EXTENSION_NAME"/>. Não é possível remover ou modificá-lo.</translation>
+<translation id="7154130902455071009">Alterar sua página inicial para: <ph name="START_PAGE"/></translation>
+<translation id="1803557475693955505">Não foi possível carregar a página de fundo &quot;<ph name="BACKGROUND_PAGE"/>&quot;.</translation>
+<translation id="1442776214136941057">Acessar o dispositivo USB <ph name="PRODUCT_NAME"/> de <ph name="VENDOR_NAME"/>.</translation>
+<translation id="3566784263424350852">Acessar o dispositivo USB de <ph name="VENDOR_NAME"/>.</translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_pt-PT.xtb b/extensions/strings/extensions_strings_pt-PT.xtb
new file mode 100644
index 0000000..2ba081b
--- /dev/null
+++ b/extensions/strings/extensions_strings_pt-PT.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="pt-PT">
+<translation id="735746806431426829">Aceder aos seus dados nos seguintes Websites:</translation>
+<translation id="8719282907381795632">Aceder aos seus dados em <ph name="WEBSITE_1"/></translation>
+<translation id="7809034755304591547"><ph name="EXTENSION_NAME"/> (ID da extensão &quot;<ph name="EXTENSION_ID"/>&quot;) foi bloqueado pelo administrador.</translation>
+<translation id="2857834222104759979">O ficheiro de manifesto é inválido.</translation>
+<translation id="6384275966486438344">Alterar as definições de pesquisa para: <ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">Aceder ao dispositivo USB.</translation>
+<translation id="5911798608827489036">Trocar dados com qualquer computador na rede local ou na Internet</translation>
+<translation id="657064425229075395">Não foi possível carregar o script de segundo plano &quot;<ph name="BACKGROUND_SCRIPT"/>&quot;.</translation>
+<translation id="3093853184108622112">Aceder aos seus dados em <ph name="WEBSITE_1"/> e <ph name="WEBSITE_2"/></translation>
+<translation id="8597109877291678953">Trocar dados com o computador com o nome <ph name="HOSTNAME"/></translation>
+<translation id="6914908792814954894">Aceder aos seus dados em <ph name="NUMBER_OF_WEBSITES"/> Websites</translation>
+<translation id="5456409301717116725">Esta extensão inclui o ficheiro-chave &quot;<ph name="KEY_PATH"/>&quot;. Provavelmente não quer fazer isso.</translation>
+<translation id="6968649314782363508">Aceder aos seus dados em <ph name="WEBSITE_1"/>, <ph name="WEBSITE_2"/> e <ph name="WEBSITE_3"/></translation>
+<translation id="149347756975725155">Não foi possível carregar o ícone de extensão &quot;<ph name="ICON"/>&quot;.</translation>
+<translation id="6344170822609224263">Lista de acesso de ligações de rede</translation>
+<translation id="2518849872271000461">Trocar dados com os computadores com os nomes <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052">Access your data on <ph name="NUMBER_OF_WEBSITES"/> websites</translation>
+<translation id="961805664415579088">Trocar dados com qualquer computador do domínio <ph name="DOMAIN"/></translation>
+<translation id="4968399700653439437">Trocar dados com com qualquer computador nos domínios <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">Alterar a página inicial para: <ph name="HOME_PAGE"/></translation>
+<translation id="2893389635995517838">Aceda a fotografias, música e outros elementos multimédia a partir do seu computador.</translation>
+<translation id="8602184400052594090">O ficheiro de manifesto está em falta ou é ilegível.</translation>
+<translation id="1196944142850240972">Aceder aos seus dados em todos os Websites</translation>
+<translation id="7217838517480956708">O administrador desta máquina exige que o <ph name="EXTENSION_NAME"/> seja instalado. Este não pode ser removido ou modificado.</translation>
+<translation id="7154130902455071009">Alterar a página de início para: <ph name="START_PAGE"/></translation>
+<translation id="1803557475693955505">Não foi possível carregar a página de fundo &quot;<ph name="BACKGROUND_PAGE"/>&quot;.</translation>
+<translation id="1442776214136941057">Aceder ao dispositivo USB <ph name="PRODUCT_NAME"/> de <ph name="VENDOR_NAME"/>.</translation>
+<translation id="3566784263424350852">Aceder ao dispositivo USB de <ph name="VENDOR_NAME"/>.</translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_ro.xtb b/extensions/strings/extensions_strings_ro.xtb
new file mode 100644
index 0000000..0ad25f2
--- /dev/null
+++ b/extensions/strings/extensions_strings_ro.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="ro">
+<translation id="735746806431426829">Accesează datele dvs. pe următoarele site-uri:</translation>
+<translation id="8719282907381795632">Accesează datele dvs. de pe <ph name="WEBSITE_1"/></translation>
+<translation id="7809034755304591547"><ph name="EXTENSION_NAME"/> (cu codul de extensie „<ph name="EXTENSION_ID"/>”) este blocată de administrator.</translation>
+<translation id="2857834222104759979">Fișierul manifest nu este valid.</translation>
+<translation id="6384275966486438344">Schimbați setările de căutare la: <ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">Accesarea dispozitivului USB.</translation>
+<translation id="5911798608827489036">Faceți schimb de date cu orice computer din rețeaua locală sau de pe internet</translation>
+<translation id="657064425229075395">Scriptul de fundal „<ph name="BACKGROUND_SCRIPT"/>” nu a putut fi încărcat.</translation>
+<translation id="3093853184108622112">Accesează datele dvs. de pe <ph name="WEBSITE_1"/> și de pe <ph name="WEBSITE_2"/></translation>
+<translation id="8597109877291678953">Faceți schimb de date cu computerul cu numele <ph name="HOSTNAME"/></translation>
+<translation id="6914908792814954894">Accesează datele dvs. de pe <ph name="NUMBER_OF_WEBSITES"/> (de) site-uri web</translation>
+<translation id="5456409301717116725">Această extensie include fișierul cheie „<ph name="KEY_PATH"/>”. Probabil că nu doriți să faceți asta.</translation>
+<translation id="6968649314782363508">Accesează datele dvs. de pe <ph name="WEBSITE_1"/>, de pe <ph name="WEBSITE_2"/> și de pe <ph name="WEBSITE_3"/></translation>
+<translation id="149347756975725155">Nu am putut încărca pictograma extensiei „<ph name="ICON"/>”.</translation>
+<translation id="6344170822609224263">Accesează lista conexiunilor de rețea</translation>
+<translation id="2518849872271000461">Faceți schimb de date cu computerele cu numele: <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052">Accesează datele dvs. de pe <ph name="NUMBER_OF_WEBSITES"/> (de) site-uri</translation>
+<translation id="961805664415579088">Faceți schimb de date cu orice computer de pe domeniul <ph name="DOMAIN"/></translation>
+<translation id="4968399700653439437">Faceți schimb de date cu orice computer de pe domeniile: <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">Schimbă pagina de pornire la: <ph name="HOME_PAGE"/></translation>
+<translation id="2893389635995517838">Accesează fotografii, muzică și alte tipuri de conținut media de pe computer.</translation>
+<translation id="8602184400052594090">Fișierul manifest lipsește sau nu poate fi citit.</translation>
+<translation id="1196944142850240972">Accesează datele dvs. de pe toate site-urile web</translation>
+<translation id="7217838517480956708">Administratorul acestui dispozitiv solicită instalarea extensiei <ph name="EXTENSION_NAME"/>. Aceasta nu poate fi eliminată sau modificată.</translation>
+<translation id="7154130902455071009">Schimbați pagina de start la: <ph name="START_PAGE"/></translation>
+<translation id="1803557475693955505">Nu se poate încărca pagina de fundal „<ph name="BACKGROUND_PAGE"/>”.</translation>
+<translation id="1442776214136941057">Accesarea dispozitivului USB <ph name="PRODUCT_NAME"/> de la <ph name="VENDOR_NAME"/>.</translation>
+<translation id="3566784263424350852">Accesarea dispozitivului USB de la <ph name="VENDOR_NAME"/>.</translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_ru.xtb b/extensions/strings/extensions_strings_ru.xtb
new file mode 100644
index 0000000..7dd55fa
--- /dev/null
+++ b/extensions/strings/extensions_strings_ru.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="ru">
+<translation id="735746806431426829">Доступ к личным данным возможен на следующих веб-сайтах:</translation>
+<translation id="8719282907381795632">Доступ к вашим данным на веб-сайте <ph name="WEBSITE_1"/></translation>
+<translation id="7809034755304591547">Расширение <ph name="EXTENSION_NAME"/> (идентификатор: <ph name="EXTENSION_ID"/>) заблокировано администратором.</translation>
+<translation id="2857834222104759979">Недопустимый файл манифеста.</translation>
+<translation id="6384275966486438344">Использовать поисковую систему <ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">Доступ к USB-устройству.</translation>
+<translation id="5911798608827489036">Обмен данными с любыми компьютерами в локальной сети или в Интернете</translation>
+<translation id="657064425229075395">Не удалось загрузить фоновый скрипт <ph name="BACKGROUND_SCRIPT"/>.</translation>
+<translation id="3093853184108622112">Доступ к вашим данным на веб-сайтах <ph name="WEBSITE_1"/> и <ph name="WEBSITE_2"/></translation>
+<translation id="8597109877291678953">Обмен данными с компьютером <ph name="HOSTNAME"/></translation>
+<translation id="6914908792814954894">Доступ к данным на веб-сайтах <ph name="NUMBER_OF_WEBSITES"/></translation>
+<translation id="5456409301717116725">Это расширение содержит файл ключа <ph name="KEY_PATH"/>. Вероятно, это неприемлемо.</translation>
+<translation id="6968649314782363508">Доступ к вашим данным на веб-сайтах <ph name="WEBSITE_1"/>, <ph name="WEBSITE_2"/> и <ph name="WEBSITE_3"/></translation>
+<translation id="149347756975725155">Не удается загрузить значок расширения &quot;<ph name="ICON"/>&quot;.</translation>
+<translation id="6344170822609224263">Доступ к списку сетевых подключений</translation>
+<translation id="2518849872271000461">Обмен данными с компьютерами <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052">Access your data on <ph name="NUMBER_OF_WEBSITES"/> websites</translation>
+<translation id="961805664415579088">Обмен данными с любыми компьютерами в домене <ph name="DOMAIN"/></translation>
+<translation id="4968399700653439437">Обмен данными с любыми компьютерами в доменах <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">Сделать <ph name="HOME_PAGE"/> главной страницей</translation>
+<translation id="2893389635995517838">Доступ к фотографиям, музыке и другим медиафайлам на вашем компьютере.</translation>
+<translation id="8602184400052594090">Файл манифеста отсутствует или недоступен для чтения.</translation>
+<translation id="1196944142850240972">Доступ к вашим данным на всех веб-сайтах</translation>
+<translation id="7217838517480956708">Удаление и изменение расширения <ph name="EXTENSION_NAME"/> на этом компьютере запрещено администратором.</translation>
+<translation id="7154130902455071009">Сделать <ph name="START_PAGE"/> стартовой страницей</translation>
+<translation id="1803557475693955505">Не удалось загрузить страницу фона &quot;<ph name="BACKGROUND_PAGE"/>&quot;.</translation>
+<translation id="1442776214136941057">Доступ к USB-устройству <ph name="PRODUCT_NAME"/> от <ph name="VENDOR_NAME"/>.</translation>
+<translation id="3566784263424350852">Доступ к USB-устройству от <ph name="VENDOR_NAME"/>.</translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_sk.xtb b/extensions/strings/extensions_strings_sk.xtb
new file mode 100644
index 0000000..c653f35
--- /dev/null
+++ b/extensions/strings/extensions_strings_sk.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="sk">
+<translation id="735746806431426829">Pristupovať k údajom na nasledujúcich webových stránkach:</translation>
+<translation id="8719282907381795632">Pristupovať k údajom na webových stránkach <ph name="WEBSITE_1"/></translation>
+<translation id="7809034755304591547">Rozšírenie <ph name="EXTENSION_NAME"/> (ID rozšírenia „<ph name="EXTENSION_ID"/>“) bolo správcom zablokované.</translation>
+<translation id="2857834222104759979">Súbor manifestu je neplatný.</translation>
+<translation id="6384275966486438344">Zmeniť nastavenia vyhľadávania na: <ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">Prístup do zariadenia USB.</translation>
+<translation id="5911798608827489036">Výmena údajov s ktorýmkoľvek počítačom v miestnej sieti alebo na internete</translation>
+<translation id="657064425229075395">Nepodarilo sa načítať skript na pozadí „<ph name="BACKGROUND_SCRIPT"/>“.</translation>
+<translation id="3093853184108622112">Pristupovať k údajom na webových stránkach <ph name="WEBSITE_1"/> a <ph name="WEBSITE_2"/></translation>
+<translation id="8597109877291678953">Výmena údajov s počítačom s názvom <ph name="HOSTNAME"/></translation>
+<translation id="6914908792814954894">Prístup k vašim údajom na <ph name="NUMBER_OF_WEBSITES"/> weboch</translation>
+<translation id="5456409301717116725">Toto rozšírenie obsahuje súbor kľúča <ph name="KEY_PATH"/>. Pravdepodobne to nechcete urobiť.</translation>
+<translation id="6968649314782363508">Pristupovať k údajom na webových stránkach <ph name="WEBSITE_1"/>, <ph name="WEBSITE_2"/> a <ph name="WEBSITE_3"/></translation>
+<translation id="149347756975725155">Nepodarilo sa načítať ikonu rozšírenia „<ph name="ICON"/>“.</translation>
+<translation id="6344170822609224263">Pristupovať k zoznamu sieťových pripojení</translation>
+<translation id="2518849872271000461">Výmena údajov s počítačmi s nasledujúcimi názvami: <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052">Pristupovať k údajom na webových stránkach (počet: <ph name="NUMBER_OF_WEBSITES"/>)</translation>
+<translation id="961805664415579088">Výmena údajov s ktorýmkoľvek počítačom v doméne <ph name="DOMAIN"/></translation>
+<translation id="4968399700653439437">Výmena údajov s ktorýmkoľvek počítačom v nasledujúcich doménach: <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">Zmeniť domovskú stránku na: <ph name="HOME_PAGE"/></translation>
+<translation id="2893389635995517838">Pristupovať k fotkám, hudbe a ďalším médiám z vášho počítača.</translation>
+<translation id="8602184400052594090">Súbor manifestu chýba alebo je nečitateľný.</translation>
+<translation id="1196944142850240972">Pristupovať k údajom na všetkých webových stránkach</translation>
+<translation id="7217838517480956708">Správca tohto zariadenia vyžaduje inštaláciu rozšírenia <ph name="EXTENSION_NAME"/>. Nemôže byť odstránené alebo upravené.</translation>
+<translation id="7154130902455071009">Zmeniť úvodnú stránku na: <ph name="START_PAGE"/></translation>
+<translation id="1803557475693955505">Nepodarilo sa načítať stránku na pozadí „<ph name="BACKGROUND_PAGE"/>“.</translation>
+<translation id="1442776214136941057">Prístup do zariadenia USB <ph name="PRODUCT_NAME"/> od spoločnosti <ph name="VENDOR_NAME"/>.</translation>
+<translation id="3566784263424350852">Prístup do zariadenia USB od spoločnosti <ph name="VENDOR_NAME"/>.</translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_sl.xtb b/extensions/strings/extensions_strings_sl.xtb
new file mode 100644
index 0000000..d44022e
--- /dev/null
+++ b/extensions/strings/extensions_strings_sl.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="sl">
+<translation id="735746806431426829">Dostop do vaših podatkov na teh spletnih mestih:</translation>
+<translation id="8719282907381795632">Dostopajte do podatkov na spletnem mestu <ph name="WEBSITE_1"/></translation>
+<translation id="7809034755304591547"><ph name="EXTENSION_NAME"/> (ID razširitve »<ph name="EXTENSION_ID"/>«) je blokiral skrbnik.</translation>
+<translation id="2857834222104759979">Datoteka manifesta ni veljavna.</translation>
+<translation id="6384275966486438344">Sprememba nastavitev iskanja na: <ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">Dostop do naprave USB.</translation>
+<translation id="5911798608827489036">Izmenjava podatkov s katerim koli računalnikom v lokalnem omrežju ali internetu</translation>
+<translation id="657064425229075395">Skripta za ozadje »<ph name="BACKGROUND_SCRIPT"/>« ni bilo mogoče naložiti.</translation>
+<translation id="3093853184108622112">Dostopajte do podatkov na spletnih mestih <ph name="WEBSITE_1"/> in <ph name="WEBSITE_2"/></translation>
+<translation id="8597109877291678953">Izmenjava podatkov z računalnikom z imenom <ph name="HOSTNAME"/></translation>
+<translation id="6914908792814954894">Dostopajte do podatkov na toliko spletnih mestih: <ph name="NUMBER_OF_WEBSITES"/></translation>
+<translation id="5456409301717116725">Ta razširitev vključuje datoteko s ključem »<ph name="KEY_PATH"/>«. Verjetno ne želite narediti tega.</translation>
+<translation id="6968649314782363508">Dostopajte do podatkov na spletnih mestih <ph name="WEBSITE_1"/>, <ph name="WEBSITE_2"/> in <ph name="WEBSITE_3"/></translation>
+<translation id="149347756975725155">Ikone razširitve »<ph name="ICON"/>« ni bilo mogoče naložiti.</translation>
+<translation id="6344170822609224263">Dostop do seznama omrežnih povezav</translation>
+<translation id="2518849872271000461">Izmenjava podatkov z računalniki z imenom: <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052">Dostopajte do podatkov na toliko spletnih mestih: <ph name="NUMBER_OF_WEBSITES"/></translation>
+<translation id="961805664415579088">Izmenjava podatkov s katerim koli računalnikom v domeni <ph name="DOMAIN"/></translation>
+<translation id="4968399700653439437">Izmenjava podatkov s katerim koli računalnikom v domenah: <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">Sprememba domače strani na: <ph name="HOME_PAGE"/></translation>
+<translation id="2893389635995517838">Dostop do fotografij, glasbe in druge predstavnosti iz računalnika.</translation>
+<translation id="8602184400052594090">Datoteka manifesta manjka ali pa je ni mogoče prebrati.</translation>
+<translation id="1196944142850240972">Dostopajte do podatkov na vseh spletnih mestih</translation>
+<translation id="7217838517480956708">Skrbnik tega računalnika zahteva namestitev razširitve <ph name="EXTENSION_NAME"/>. Ni je mogoče odstraniti ali spremeniti.</translation>
+<translation id="7154130902455071009">Sprememba začetne strani na: <ph name="START_PAGE"/></translation>
+<translation id="1803557475693955505">Strani za ozadje »<ph name="BACKGROUND_PAGE"/>« ni bilo mogoče naložiti.</translation>
+<translation id="1442776214136941057">Dostop do naprave USB <ph name="PRODUCT_NAME"/> proizvajalca <ph name="VENDOR_NAME"/>.</translation>
+<translation id="3566784263424350852">Dostop do naprave USB proizvajalca <ph name="VENDOR_NAME"/>.</translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_sr.xtb b/extensions/strings/extensions_strings_sr.xtb
new file mode 100644
index 0000000..ee0070c
--- /dev/null
+++ b/extensions/strings/extensions_strings_sr.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="sr">
+<translation id="735746806431426829">Приступ подацима на следећим веб-сајтовима:</translation>
+<translation id="8719282907381795632">Приступ подацима на <ph name="WEBSITE_1"/></translation>
+<translation id="7809034755304591547">Администратор је блокирао <ph name="EXTENSION_NAME"/> (ИД додатка „<ph name="EXTENSION_ID"/>“).</translation>
+<translation id="2857834222104759979">Датотека манифеста је неважећа.</translation>
+<translation id="6384275966486438344">Промените подешавања претраге на: <ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">Приступ USB уређају.</translation>
+<translation id="5911798608827489036">Размена података са било којим рачунаром на локалној мрежи или интернету</translation>
+<translation id="657064425229075395">Није могуће учитати скрипту у позадини „<ph name="BACKGROUND_SCRIPT"/>“.</translation>
+<translation id="3093853184108622112">Приступ подацима на <ph name="WEBSITE_1"/> и <ph name="WEBSITE_2"/></translation>
+<translation id="8597109877291678953">Размена података са рачунаром са називом <ph name="HOSTNAME"/></translation>
+<translation id="6914908792814954894">Приступите подацима на <ph name="NUMBER_OF_WEBSITES"/> веб-сајтова</translation>
+<translation id="5456409301717116725">Овај додатак садржи датотеку кључа „<ph name="KEY_PATH"/>“. Вероватно то не желите.</translation>
+<translation id="6968649314782363508">Приступ подацима на <ph name="WEBSITE_1"/>, <ph name="WEBSITE_2"/> и <ph name="WEBSITE_3"/></translation>
+<translation id="149347756975725155">Није могуће учитати икону додатка „<ph name="ICON"/>“.</translation>
+<translation id="6344170822609224263">Приступ листи мрежних веза</translation>
+<translation id="2518849872271000461">Размена података са рачунарима са називима: <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052">Приступајте подацима на <ph name="NUMBER_OF_WEBSITES"/> веб-сајт(ов)а</translation>
+<translation id="961805664415579088">Размена података са било којим рачунаром на домену <ph name="DOMAIN"/></translation>
+<translation id="4968399700653439437">Размена података са било којим рачунаром на доменима: <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">Промените почетну страницу у: <ph name="HOME_PAGE"/></translation>
+<translation id="2893389635995517838">Приступ сликама, музици и другим медијима са рачунара.</translation>
+<translation id="8602184400052594090">Датотека манифеста недостаје или је нечитљива.</translation>
+<translation id="1196944142850240972">Приступ подацима на свим веб сајтовима</translation>
+<translation id="7217838517480956708">Администратор овог уређаја захтева да додатак <ph name="EXTENSION_NAME"/> буде инсталиран. Не можете да га уклоните или измените.</translation>
+<translation id="7154130902455071009">Промените почетну страницу у: <ph name="START_PAGE"/></translation>
+<translation id="1803557475693955505">Није могуће учитати страницу у позадини „<ph name="BACKGROUND_PAGE"/>“.</translation>
+<translation id="1442776214136941057">Приступ USB уређају <ph name="PRODUCT_NAME"/> произвођача <ph name="VENDOR_NAME"/>.</translation>
+<translation id="3566784263424350852">Приступ USB уређају произвођача <ph name="VENDOR_NAME"/>.</translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_sv.xtb b/extensions/strings/extensions_strings_sv.xtb
new file mode 100644
index 0000000..004adbb
--- /dev/null
+++ b/extensions/strings/extensions_strings_sv.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="sv">
+<translation id="735746806431426829">Få åtkomst till din data på följande webbplatser:</translation>
+<translation id="8719282907381795632">Få åtkomst till dina data på <ph name="WEBSITE_1"/></translation>
+<translation id="7809034755304591547"><ph name="EXTENSION_NAME"/> (tilläggs-ID <ph name="EXTENSION_ID"/>) har blockerats av administratören.</translation>
+<translation id="2857834222104759979">Manifestfilen är ogiltig.</translation>
+<translation id="6384275966486438344">Ändra sökinställningarna till: <ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">Använda USB-enheten.</translation>
+<translation id="5911798608827489036">Utväxla data med en dator i det lokala nätverket eller via internet</translation>
+<translation id="657064425229075395">Det gick inte att läsa in bakgrundsskriptet <ph name="BACKGROUND_SCRIPT"/>.</translation>
+<translation id="3093853184108622112">Få åtkomst till dina data på <ph name="WEBSITE_1"/> och <ph name="WEBSITE_2"/></translation>
+<translation id="8597109877291678953">Utväxla data med datorn <ph name="HOSTNAME"/></translation>
+<translation id="6914908792814954894">Få åtkomst till din data på <ph name="NUMBER_OF_WEBSITES"/> webbplatser</translation>
+<translation id="5456409301717116725">Detta tillägg omfattar nyckelfilen <ph name="KEY_PATH"/>. Du vill antagligen inte göra detta.</translation>
+<translation id="6968649314782363508">Få åtkomst till dina data på <ph name="WEBSITE_1"/>, <ph name="WEBSITE_2"/> och <ph name="WEBSITE_3"/></translation>
+<translation id="149347756975725155">Det gick inte att läsa in tilläggsikonen <ph name="ICON"/>.</translation>
+<translation id="6344170822609224263">Få åtkomst till en lista med nätverksanslutningar</translation>
+<translation id="2518849872271000461">Utväxla data med datorerna: <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052">Få åtkomst till din data på <ph name="NUMBER_OF_WEBSITES"/> webbplatser</translation>
+<translation id="961805664415579088">Utväxla data med datorer i domänen <ph name="DOMAIN"/></translation>
+<translation id="4968399700653439437">Utväxla data med datorer i domänerna: <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">Ändra startsida till: <ph name="HOME_PAGE"/></translation>
+<translation id="2893389635995517838">Få åtkomst till foton, musik och andra media från datorn.</translation>
+<translation id="8602184400052594090">Manifestfilen saknas eller är oläslig.</translation>
+<translation id="1196944142850240972">Få åtkomst till dina data på alla webbplatser</translation>
+<translation id="7217838517480956708">Administratören av den här enheten kräver att <ph name="EXTENSION_NAME"/> ska installeras. Det kan inte tas bort eller ändras.</translation>
+<translation id="7154130902455071009">Ändra startsida till: <ph name="START_PAGE"/></translation>
+<translation id="1803557475693955505">Det gick inte att läsa in bakgrundssidan <ph name="BACKGROUND_PAGE"/>.</translation>
+<translation id="1442776214136941057">Använd USB-enheten <ph name="PRODUCT_NAME"/> från <ph name="VENDOR_NAME"/>.</translation>
+<translation id="3566784263424350852">Använda USB-enheten från <ph name="VENDOR_NAME"/>.</translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_sw.xtb b/extensions/strings/extensions_strings_sw.xtb
new file mode 100644
index 0000000..0f83b2d
--- /dev/null
+++ b/extensions/strings/extensions_strings_sw.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="sw">
+<translation id="735746806431426829">Fikia data yako kwenye tovuti zifuatazo:</translation>
+<translation id="8719282907381795632">Fikia data yako kwenye <ph name="WEBSITE_1"/></translation>
+<translation id="7809034755304591547"><ph name="EXTENSION_NAME"/> (Kitambulisho ya kiendelezi &quot;<ph name="EXTENSION_ID"/>&quot;) kimezuiwa na msimamizi.</translation>
+<translation id="2857834222104759979">Faili ya ratiba sio halali.</translation>
+<translation id="6384275966486438344">Badilisha mipangilio yako ya kutafuta iwe: <ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">Fikia kifaa cha USB.</translation>
+<translation id="5911798608827489036">Badilisha data kwa kompyuta yoyote kwenye mtandao au intaneti ya karibu</translation>
+<translation id="657064425229075395">Haikuweza kupakia hati ya mandharinyuma '<ph name="BACKGROUND_SCRIPT"/>'.</translation>
+<translation id="3093853184108622112">Fikia data yako kwenye <ph name="WEBSITE_1"/> na <ph name="WEBSITE_2"/></translation>
+<translation id="8597109877291678953">Badilisha data kwa kompyuta iitwayo <ph name="HOSTNAME"/></translation>
+<translation id="6914908792814954894">Fikia data yako kwenye tovuti <ph name="NUMBER_OF_WEBSITES"/></translation>
+<translation id="5456409301717116725">Kiendelezi hiki kinajumuisha faili muhimu '<ph name="KEY_PATH"/>'. Huenda hutaki kufanya hivyo.</translation>
+<translation id="6968649314782363508">Fikia data yako kwenye <ph name="WEBSITE_1"/>, <ph name="WEBSITE_2"/>, na <ph name="WEBSITE_3"/></translation>
+<translation id="149347756975725155">Aikoni '<ph name="ICON"/>' ya kiendelezi haikuweza kupakiwa.</translation>
+<translation id="6344170822609224263">Pata orodha ya miunganisho ya mtandao</translation>
+<translation id="2518849872271000461">Badilisha data kwa kompyuta ziitwazo: <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052">Fikia data yako kwenye tovuti <ph name="NUMBER_OF_WEBSITES"/></translation>
+<translation id="961805664415579088">Badilisha data kwa kompyuta yoyote kwenye kikoa <ph name="DOMAIN"/></translation>
+<translation id="4968399700653439437">Badilisha data kwa kompyuta yoyote kwenye vikoa: <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">Badilisha ukurasa wako wa mwanzo uwe: <ph name="HOME_PAGE"/></translation>
+<translation id="2893389635995517838">Fikia picha, muziki, na maudhui mengine kutoka kwenye kompyuta yako</translation>
+<translation id="8602184400052594090">Faili ya ratiba haipatikani au haisomeki.</translation>
+<translation id="1196944142850240972">Fikia data yako kwenye tovuti zote</translation>
+<translation id="7217838517480956708">Msimamizi wa mashine haya anahitaji <ph name="EXTENSION_NAME"/> kisakinishwe. Hakiwezi kuondolewa au kurekebishwa.</translation>
+<translation id="7154130902455071009">Badilisha ukurasa wako uwe: <ph name="START_PAGE"/></translation>
+<translation id="1803557475693955505">Ukurasa wa mandhari '<ph name="BACKGROUND_PAGE"/>' haukuweza kupakiwa.</translation>
+<translation id="1442776214136941057">Fikia kifaa cha USB <ph name="PRODUCT_NAME"/> kutoka <ph name="VENDOR_NAME"/> .</translation>
+<translation id="3566784263424350852">Fikia kifaa cha USB kutoka <ph name="VENDOR_NAME"/> .</translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_ta.xtb b/extensions/strings/extensions_strings_ta.xtb
new file mode 100644
index 0000000..2c5d5cf
--- /dev/null
+++ b/extensions/strings/extensions_strings_ta.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="ta">
+<translation id="735746806431426829">பின்வரும் இணையதளங்களில் உங்கள் தரவை அணுகவும்:</translation>
+<translation id="8719282907381795632"><ph name="WEBSITE_1"/> இல் உங்கள் தரவை அணுகலாம்</translation>
+<translation id="7809034755304591547">நிர்வாகியால் <ph name="EXTENSION_NAME"/> (நீட்டிப்பு ஐடி &quot;<ph name="EXTENSION_ID"/>&quot;) தடுக்கப்படுகிறது.</translation>
+<translation id="2857834222104759979">அமைப்புக் கோப்பு செல்லுபடியாகாதது.</translation>
+<translation id="6384275966486438344">உங்கள் தேடல் அமைப்புகளை இதற்கு மாற்றவும்: <ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">USB சாதனத்தை அணுகவும்.</translation>
+<translation id="5911798608827489036">அகப் பிணையம் அல்லது இணையத்தில் உள்ள எந்த கணினியுடனும் தரவைப் பரிமாறவும்</translation>
+<translation id="657064425229075395">'<ph name="BACKGROUND_SCRIPT"/>' என்ற பின்புல ஸ்கிரிப்டை ஏற்ற முடியவில்லை.</translation>
+<translation id="3093853184108622112"><ph name="WEBSITE_1"/> மற்றும் <ph name="WEBSITE_2"/> இல் உங்கள் தரவை அணுகலாம்</translation>
+<translation id="8597109877291678953"><ph name="HOSTNAME"/> என்ற பெயருள்ள கணினியுடன் தரவைப் பரிமாறவும்</translation>
+<translation id="6914908792814954894"><ph name="NUMBER_OF_WEBSITES"/> இணையதளங்களில் உங்கள் தரவை அணுகலாம்</translation>
+<translation id="5456409301717116725">இந்த நீட்டிப்பு விசை கோப்பு '<ph name="KEY_PATH"/>' ஐக் கொண்டுள்ளது. நீங்கள் அதை செய்ய விரும்பாமல் இருக்கலாம்.</translation>
+<translation id="6968649314782363508"><ph name="WEBSITE_1"/>, <ph name="WEBSITE_2"/> மற்றும் <ph name="WEBSITE_3"/> இல் உங்கள் தரவை அணுகலாம்</translation>
+<translation id="149347756975725155">நீட்டிப்புப் படவுரு '<ph name="ICON"/>' ஐ ஏற்ற முடியவில்லை.</translation>
+<translation id="6344170822609224263">பிணைய இணைப்புகளின் பட்டியலை அணுகு</translation>
+<translation id="2518849872271000461">பின்வரும் பெயர்களிலுள்ள கணினிகளுடன் தரவைப் பரிமாறவும்: <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052"><ph name="NUMBER_OF_WEBSITES"/> இணையதளங்களில் உங்கள் தரவை அணுகலாம்</translation>
+<translation id="961805664415579088"><ph name="DOMAIN"/> களத்திலுள்ள எந்த கணினியுடனும் தரவைப் பரிமாறவும்</translation>
+<translation id="4968399700653439437">பின்வரும் களங்களிலுள்ள எந்த கணினியுடனும் தரவைப் பரிமாறவும்: <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">உங்கள் முகப்புப் பக்கத்தை இதற்கு மாற்றவும்: <ph name="HOME_PAGE"/></translation>
+<translation id="2893389635995517838">உங்கள் கணினியிலிருந்து படங்கள், இசை மற்றும் பிற மீடியாவை அணுகவும்.</translation>
+<translation id="8602184400052594090">அமைப்புக் கோப்பைக் காணவில்லை அல்லது படிக்கமுடியாததாக இருக்கிறது.</translation>
+<translation id="1196944142850240972">எல்லா வலைத்தளங்களிலும் உங்கள் தரவை அணுகலாம்</translation>
+<translation id="7217838517480956708">இந்தக் கணினியின் நிர்வாகிக்கு, <ph name="EXTENSION_NAME"/> ஐ நிறுவ வேண்டும். இதை அகற்றவோ மாற்றவோ முடியாது.</translation>
+<translation id="7154130902455071009">உங்கள் தொடக்கப் பக்கத்தை இதற்கு மாற்றவும்: <ph name="START_PAGE"/></translation>
+<translation id="1803557475693955505">'<ph name="BACKGROUND_PAGE"/>' என்ற பின்புலப் பக்கத்தை ஏற்ற முடியவில்லை.</translation>
+<translation id="1442776214136941057"><ph name="PRODUCT_NAME"/> USB சாதனத்தை <ph name="VENDOR_NAME"/> இலிருந்து அணுகு.</translation>
+<translation id="3566784263424350852"><ph name="VENDOR_NAME"/> இலிருந்து USB சாதனத்தை அணுகு.</translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_te.xtb b/extensions/strings/extensions_strings_te.xtb
new file mode 100644
index 0000000..6299c44
--- /dev/null
+++ b/extensions/strings/extensions_strings_te.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="te">
+<translation id="735746806431426829">కింది వెబ్‌సైట్‌ల్లో మీ డేటాను ప్రాప్యత చేయండి:</translation>
+<translation id="8719282907381795632"><ph name="WEBSITE_1"/>లో మీ డేటాను ప్రాప్యత చేయండి</translation>
+<translation id="7809034755304591547"><ph name="EXTENSION_NAME"/> (పొడిగింపు ID &quot;<ph name="EXTENSION_ID"/>&quot;)ని నిర్వాహకుడు బ్లాక్ చేసారు.</translation>
+<translation id="2857834222104759979">వివరాల ఫైల్ చెల్లనిది.</translation>
+<translation id="6384275966486438344">మీ శోధన సెట్టింగ్‌లను దీనికి మార్చండి: <ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">USB పరికరాన్ని ప్రాప్యత చేయండి.</translation>
+<translation id="5911798608827489036">స్థానిక నెట్‌వర్క్ లేదా ఇంటర్నెట్‌లో ఏదైనా కంప్యూటర్‌తో డేటాను పరస్పరం మార్చుకోండి</translation>
+<translation id="657064425229075395">నేపథ్య స్క్రిప్ట్ '<ph name="BACKGROUND_SCRIPT"/>'ను లోడ్ చేయడం సాధ్యం కాలేదు.</translation>
+<translation id="3093853184108622112"><ph name="WEBSITE_1"/>లో మరియు <ph name="WEBSITE_2"/>లో మీ డేటాను ప్రాప్యత చేయండి</translation>
+<translation id="8597109877291678953"><ph name="HOSTNAME"/> అనే పేరు గల కంప్యూటర్‌తో డేటాను పరస్పరం మార్చుకోండి</translation>
+<translation id="6914908792814954894"><ph name="NUMBER_OF_WEBSITES"/> వెబ్‌సైట్‌ల్లో మీ డేటాను ప్రాప్యత చేయండి</translation>
+<translation id="5456409301717116725">ఈ పొడిగింపు '<ph name="KEY_PATH"/>' కీ ఫైల్‌ను కలిగి ఉంది. బహుశా మీరు దాన్ని చేయకూడదు.</translation>
+<translation id="6968649314782363508"><ph name="WEBSITE_1"/>లో, <ph name="WEBSITE_2"/>లో మరియు <ph name="WEBSITE_3"/>లో మీ డేటాను ప్రాప్యత చేయండి</translation>
+<translation id="149347756975725155">'<ph name="ICON"/>' పొడిగింపు చిహ్నాన్ని లోడ్ చేయలేకపోయింది.</translation>
+<translation id="6344170822609224263">నెట్‌వర్క్ కనెక్షన్‌ల జాబితాను ప్రాప్యత చేయండి</translation>
+<translation id="2518849872271000461">ఈ పేరు గల కంప్యూటర్‌లతో డేటాను పరస్పరం మార్చుకోండి: <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052"><ph name="NUMBER_OF_WEBSITES"/> వెబ్‌సైట్‌ల్లో మీ డేటాను ప్రాప్యత చేయండి</translation>
+<translation id="961805664415579088">డొమైన్ <ph name="DOMAIN"/>లో ఏదైనా కంప్యూటర్‌తో డేటాను పరస్పరం మార్చుకోండి</translation>
+<translation id="4968399700653439437">ఈ డొమైన్‌ల్లో ఏ కంప్యూటర్‌తో అయినా డేటాను పరస్పరం మార్చుకోండి: <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">మీ హోమ్ పేజీని దీనికి మార్చండి: <ph name="HOME_PAGE"/></translation>
+<translation id="2893389635995517838">మీ కంప్యూటర్ నుండి ఫోటోలు, సంగీతం మరియు ఇతర మీడియాను ప్రాప్యత చేయండి.</translation>
+<translation id="8602184400052594090">మానిఫెస్ట్ ఫైల్ తప్పిపోయింది లేదా చదవలేనిది.</translation>
+<translation id="1196944142850240972">అన్ని వెబ్‌సైట్‌ల్లో మీ డేటాను ప్రాప్యత చేయండి</translation>
+<translation id="7217838517480956708">ఈ మెషీన్ యొక్క నిర్వాహకుడికి <ph name="EXTENSION_NAME"/> ఇన్‌స్టాల్ చేయబడి ఉండటం అవసరం. దీన్ని తీసివేయడం లేదా సవరించడం సాధ్యపడదు.</translation>
+<translation id="7154130902455071009">మీ ప్రారంభ పేజీని దీనికి మార్చండి: <ph name="START_PAGE"/></translation>
+<translation id="1803557475693955505">నేపథ్య పేజీ '<ph name="BACKGROUND_PAGE"/>' లోడ్ చేయబడలేదు.</translation>
+<translation id="1442776214136941057">USB పరికరం <ph name="PRODUCT_NAME"/>ని <ph name="VENDOR_NAME"/> నుండి ప్రాప్యత చేయండి.</translation>
+<translation id="3566784263424350852"><ph name="VENDOR_NAME"/> నుండి USB పరికరాన్ని ప్రాప్యత చేయండి.</translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_th.xtb b/extensions/strings/extensions_strings_th.xtb
new file mode 100644
index 0000000..98ed15d
--- /dev/null
+++ b/extensions/strings/extensions_strings_th.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="th">
+<translation id="735746806431426829">เข้าถึงข้อมูลของคุณบนเว็บไซต์ต่อไปนี้:</translation>
+<translation id="8719282907381795632">เข้าถึงข้อมูลของคุณบน <ph name="WEBSITE_1"/></translation>
+<translation id="7809034755304591547"><ph name="EXTENSION_NAME"/> (ID ส่วนขยาย &quot;<ph name="EXTENSION_ID"/>&quot;) ถูกบล็อกโดยผู้ดูแลระบบ</translation>
+<translation id="2857834222104759979">ไฟล์มานิเฟสต์ไม่ถูกต้อง</translation>
+<translation id="6384275966486438344">เปลี่ยนการตั้งค่าการค้นหาของคุณเป็น: <ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">เข้าถึงอุปกรณ์ USB</translation>
+<translation id="5911798608827489036">แลกเปลี่ยนข้อมูลกับคอมพิวเตอร์ใดๆ ที่อยู่ในเครือข่ายในท้องถิ่นหรืออินเทอร์เน็ต</translation>
+<translation id="657064425229075395">ไม่สามารถโหลดสคริปต์พื้นหลัง &quot;<ph name="BACKGROUND_SCRIPT"/>&quot;</translation>
+<translation id="3093853184108622112">เข้าถึงข้อมูลของคุณบน <ph name="WEBSITE_1"/> และ <ph name="WEBSITE_2"/></translation>
+<translation id="8597109877291678953">แลกเปลี่ยนข้อมูลกับคอมพิวเตอร์ชื่อ <ph name="HOSTNAME"/></translation>
+<translation id="6914908792814954894">เข้าถึงข้อมูลของคุณใน <ph name="NUMBER_OF_WEBSITES"/> เว็บไซต์</translation>
+<translation id="5456409301717116725">ส่วนขยายนี้มีไฟล์คีย์ &quot;<ph name="KEY_PATH"/>&quot; คุณอาจจะไม่ต้องการดำเนินการนั้น</translation>
+<translation id="6968649314782363508">เข้าถึงข้อมูลของคุณบน <ph name="WEBSITE_1"/>, <ph name="WEBSITE_2"/> และ <ph name="WEBSITE_3"/></translation>
+<translation id="149347756975725155">ไม่สามารถโหลดไอคอนส่วนขยาย &quot;<ph name="ICON"/>&quot;</translation>
+<translation id="6344170822609224263">เข้าถึงรายการเชื่อมต่อเครือข่าย</translation>
+<translation id="2518849872271000461">แลกเปลี่ยนข้อมูลกับคอมพิวเตอร์ชื่อ: <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052">เข้าถึงข้อมูลของคุณใน <ph name="NUMBER_OF_WEBSITES"/> เว็บไซต์</translation>
+<translation id="961805664415579088">แลกเปลี่ยนข้อมูลกับคอมพิวเตอร์ใดๆ ในโดเมน <ph name="DOMAIN"/></translation>
+<translation id="4968399700653439437">แลกเปลี่ยนข้อมูลกับคอมพิวเตอร์ใดๆ ในโดเมน: <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">เปลี่ยนหน้าแรกของคุณเป็น: <ph name="HOME_PAGE"/></translation>
+<translation id="2893389635995517838">เข้าถึงภาพ เพลง และสื่ออื่นๆ จากคอมพิวเตอร์ของคุณ</translation>
+<translation id="8602184400052594090">ไฟล์มานิเฟสต์หายไปหรืออ่านไม่ได้</translation>
+<translation id="1196944142850240972">เข้าถึงข้อมูลของคุณบนเว็บไซต์ทั้งหมด</translation>
+<translation id="7217838517480956708">ผู้ดูแลระบบของเครื่องนี้ต้องการให้มีการติดตั้ง <ph name="EXTENSION_NAME"/> โดยไม่สามารถนำออกหรือแก้ไขได้</translation>
+<translation id="7154130902455071009">เปลี่ยนหน้าเริ่มต้นของคุณเป็น: <ph name="START_PAGE"/></translation>
+<translation id="1803557475693955505">ไม่สามารถโหลดหน้าพื้นหลัง &quot;<ph name="BACKGROUND_PAGE"/>&quot;</translation>
+<translation id="1442776214136941057">เข้าถึงอุปกรณ์ USB <ph name="PRODUCT_NAME"/> จาก <ph name="VENDOR_NAME"/></translation>
+<translation id="3566784263424350852">เข้าถึงอุปกรณ์ USB จาก <ph name="VENDOR_NAME"/></translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_tr.xtb b/extensions/strings/extensions_strings_tr.xtb
new file mode 100644
index 0000000..0a4f347
--- /dev/null
+++ b/extensions/strings/extensions_strings_tr.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="tr">
+<translation id="735746806431426829">Aşağıdaki web sitelerinden verilerinize erişin:</translation>
+<translation id="8719282907381795632"><ph name="WEBSITE_1"/> web sitesindeki verilerinize erişme</translation>
+<translation id="7809034755304591547"><ph name="EXTENSION_NAME"/> (uzantı kimliği &quot;<ph name="EXTENSION_ID"/>&quot;) yönetici tarafından engellenmiş.</translation>
+<translation id="2857834222104759979">Bildiri dosyası geçersiz.</translation>
+<translation id="6384275966486438344">Arama ayarlarınızı <ph name="SEARCH_HOST"/> olarak değiştirin.</translation>
+<translation id="1938239371608910339">USB cihazına eriş.</translation>
+<translation id="5911798608827489036">Yerel ağ veya İnternet üzerindeki herhangi bir bilgisayarla veri değişimi</translation>
+<translation id="657064425229075395">Arka plan komut dosyası '<ph name="BACKGROUND_SCRIPT"/>' yüklenemedi.</translation>
+<translation id="3093853184108622112"><ph name="WEBSITE_1"/> ve <ph name="WEBSITE_2"/> web sitelerindeki verilerinize erişme</translation>
+<translation id="8597109877291678953"><ph name="HOSTNAME"/> adlı bilgisayarla veri değişimi</translation>
+<translation id="6914908792814954894"><ph name="NUMBER_OF_WEBSITES"/> web sitesindeki verilerinize erişme</translation>
+<translation id="5456409301717116725">Bu uzantıda '<ph name="KEY_PATH"/>' anahtar dosyası var. Muhtemelen istediğiniz bu değil.</translation>
+<translation id="6968649314782363508"><ph name="WEBSITE_1"/>, <ph name="WEBSITE_2"/> ve <ph name="WEBSITE_3"/> web sitelerindeki verilerinize erişme</translation>
+<translation id="149347756975725155">'<ph name="ICON"/>' uzantı simgesi yüklenemedi.</translation>
+<translation id="6344170822609224263">Ağ bağlantıları listesine erişme</translation>
+<translation id="2518849872271000461">Şu adlara sahip bilgisayarlarla veri değişimi: <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052">Access your data on <ph name="NUMBER_OF_WEBSITES"/> websites</translation>
+<translation id="961805664415579088"><ph name="DOMAIN"/> alanındaki herhangi bir bilgisayarla veri değişimi</translation>
+<translation id="4968399700653439437">Şu alanlardaki herhangi bir bilgisayarla veri değişimi: <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">Ana sayfanızı <ph name="HOME_PAGE"/> olarak değiştirme</translation>
+<translation id="2893389635995517838">Bilgisayarınızdaki fotoğraf, müzik ve diğer medyalara erişin.</translation>
+<translation id="8602184400052594090">Bildiri dosyası eksik veya okunamıyor.</translation>
+<translation id="1196944142850240972">Tüm web sitelerindeki verilerinize erişme</translation>
+<translation id="7217838517480956708">Bu makinenin yöneticisi <ph name="EXTENSION_NAME"/> yüklenmesini gerektiriyor. Kaldırılamaz veya değiştirilemez.</translation>
+<translation id="7154130902455071009">Başlangıç sayfanızı <ph name="START_PAGE"/> olarak değiştirin</translation>
+<translation id="1803557475693955505">'<ph name="BACKGROUND_PAGE"/>' arka plan sayfası yüklenemedi.</translation>
+<translation id="1442776214136941057"><ph name="VENDOR_NAME"/> satıcısının <ph name="PRODUCT_NAME"/> USB cihazına eriş.</translation>
+<translation id="3566784263424350852"><ph name="VENDOR_NAME"/> USB cihazına eriş.</translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_uk.xtb b/extensions/strings/extensions_strings_uk.xtb
new file mode 100644
index 0000000..06e22d2
--- /dev/null
+++ b/extensions/strings/extensions_strings_uk.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="uk">
+<translation id="735746806431426829">Отримувати доступ до ваших даних на таких веб-сайтах:</translation>
+<translation id="8719282907381795632">Отримувати доступ до ваших даних на веб-сайті <ph name="WEBSITE_1"/></translation>
+<translation id="7809034755304591547"><ph name="EXTENSION_NAME"/> (ідентифікатор розширення &quot;<ph name="EXTENSION_ID"/>&quot;) заблоковано адміністратором.</translation>
+<translation id="2857834222104759979">Файл маніфесту недійсний.</translation>
+<translation id="6384275966486438344">Використовувати пошукову систему <ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">Доступ до пристрою USB.</translation>
+<translation id="5911798608827489036">Обмінюватися даними з будь-яким комп’ютером у локальній мережі чи Інтернеті</translation>
+<translation id="657064425229075395">Не вдалося завантажити фоновий сценарій &quot;<ph name="BACKGROUND_SCRIPT"/>&quot;.</translation>
+<translation id="3093853184108622112">Отримувати доступ до ваших даних на веб-сайтах <ph name="WEBSITE_1"/> і <ph name="WEBSITE_2"/></translation>
+<translation id="8597109877291678953">Обмінюватися даними з комп’ютером <ph name="HOSTNAME"/></translation>
+<translation id="6914908792814954894">Отримувати доступ до ваших даних на стількох веб-сайтах: <ph name="NUMBER_OF_WEBSITES"/></translation>
+<translation id="5456409301717116725">Це розширення включає файл ключа &quot;<ph name="KEY_PATH"/>&quot;. Можливо, ви не хочете цього робити.</translation>
+<translation id="6968649314782363508">Отримувати доступ до ваших даних на веб-сайтах <ph name="WEBSITE_1"/>, <ph name="WEBSITE_2"/> і <ph name="WEBSITE_3"/></translation>
+<translation id="149347756975725155">Не вдалося завантажити піктограму розширення &quot;<ph name="ICON"/>&quot;.</translation>
+<translation id="6344170822609224263">Отримувати доступ до списку мережевих з’єднань</translation>
+<translation id="2518849872271000461">Обмінюватися даними з комп’ютерами <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052">Отримувати доступ до ваших даних на стількох веб-сайтах: <ph name="NUMBER_OF_WEBSITES"/></translation>
+<translation id="961805664415579088">Обмінюватися даними з будь-яким комп’ютером у домені <ph name="DOMAIN"/></translation>
+<translation id="4968399700653439437">Обмінюватися даними з будь-яким комп’ютером у доменах <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">Зробити <ph name="HOME_PAGE"/> домашньою сторінкою</translation>
+<translation id="2893389635995517838">Отримувати доступ до фотографій, музики й інших медіа-файлів на вашому комп’ютері.</translation>
+<translation id="8602184400052594090">Файл маніфесту відсутній або його не можна розпізнати.</translation>
+<translation id="1196944142850240972">Отримувати доступ до ваших даних на всіх веб-сайтах</translation>
+<translation id="7217838517480956708">Адміністратор цього комп’ютера потребує встановленого розширення <ph name="EXTENSION_NAME"/>. Його не можна видаляти чи змінювати.</translation>
+<translation id="7154130902455071009">Зробити <ph name="START_PAGE"/> домашньою сторінкою</translation>
+<translation id="1803557475693955505">Не вдалося завантажити фонову сторінку &quot;<ph name="BACKGROUND_PAGE"/>&quot;.</translation>
+<translation id="1442776214136941057">Доступ до пристрою USB <ph name="PRODUCT_NAME"/> від <ph name="VENDOR_NAME"/>.</translation>
+<translation id="3566784263424350852">Доступ до пристрою USB від <ph name="VENDOR_NAME"/>.</translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_vi.xtb b/extensions/strings/extensions_strings_vi.xtb
new file mode 100644
index 0000000..22f0188
--- /dev/null
+++ b/extensions/strings/extensions_strings_vi.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="vi">
+<translation id="735746806431426829">Truy cập dữ liệu của bạn trên các trang web sau:</translation>
+<translation id="8719282907381795632">Truy cập dữ liệu của bạn trên <ph name="WEBSITE_1"/></translation>
+<translation id="7809034755304591547"><ph name="EXTENSION_NAME"/> (ID tiện ích mở rộng &quot;<ph name="EXTENSION_ID"/>&quot;) bị quản trị viên chặn.</translation>
+<translation id="2857834222104759979">Tệp kê khai không hợp lệ.</translation>
+<translation id="6384275966486438344">Thay đổi cài đặt tìm kiếm của bạn thành: <ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">Truy cập thiết bị USB.</translation>
+<translation id="5911798608827489036">Trao đổi dữ liệu với bất kỳ máy tính nào trên mạng cục bộ hoặc internet</translation>
+<translation id="657064425229075395">Không thể tải tập lệnh nền '<ph name="BACKGROUND_SCRIPT"/>'.</translation>
+<translation id="3093853184108622112">Truy cập dữ liệu của bạn trên <ph name="WEBSITE_1"/> và <ph name="WEBSITE_2"/></translation>
+<translation id="8597109877291678953">Trao đổi dữ liệu với máy tính có tên <ph name="HOSTNAME"/></translation>
+<translation id="6914908792814954894">Truy cập dữ liệu của bạn trên <ph name="NUMBER_OF_WEBSITES"/> trang web</translation>
+<translation id="5456409301717116725">Tiện ích mở rộng này bao gồm tệp khóa '<ph name="KEY_PATH"/>'. Bạn có thể không muốn thực hiện việc đó.</translation>
+<translation id="6968649314782363508">Truy cập dữ liệu của bạn trên <ph name="WEBSITE_1"/>, <ph name="WEBSITE_2"/> và <ph name="WEBSITE_3"/></translation>
+<translation id="149347756975725155">Không thể tải biểu tượng tiện ích mở rộng '<ph name="ICON"/>'.</translation>
+<translation id="6344170822609224263">Truy cập danh sách kết nối mạng</translation>
+<translation id="2518849872271000461">Trao đổi dữ liệu với các máy tính có tên: <ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052">Truy cập dữ liệu của bạn trên <ph name="NUMBER_OF_WEBSITES"/> trang web</translation>
+<translation id="961805664415579088">Trao đổi dữ liệu với bất kỳ máy tính nào trong miền <ph name="DOMAIN"/></translation>
+<translation id="4968399700653439437">Trao đổi dữ liệu với bất kỳ máy tính nào trong các miền: <ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">Thay đổi trang chủ của bạn thành: <ph name="HOME_PAGE"/></translation>
+<translation id="2893389635995517838">Truy cập ảnh, nhạc và nội dung khác khác từ máy tính của bạn.</translation>
+<translation id="8602184400052594090">Tệp kê khai bị thiếu hoặc không thể đọc được.</translation>
+<translation id="1196944142850240972">Truy cập dữ liệu của bạn trên tất cả các trang web</translation>
+<translation id="7217838517480956708">Quản trị viên của máy này yêu cầu cài đặt <ph name="EXTENSION_NAME"/>. Bạn không thể xóa hoặc sửa đổi tiện ích mở rộng này.</translation>
+<translation id="7154130902455071009">Thay đổi trang chủ của bạn thành: <ph name="START_PAGE"/></translation>
+<translation id="1803557475693955505">Không thể tải trang nền '<ph name="BACKGROUND_PAGE"/>'.</translation>
+<translation id="1442776214136941057">Truy cập thiết bị USB <ph name="PRODUCT_NAME"/> từ <ph name="VENDOR_NAME"/>.</translation>
+<translation id="3566784263424350852">Truy cập thiết bị USB từ <ph name="VENDOR_NAME"/>.</translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_zh-CN.xtb b/extensions/strings/extensions_strings_zh-CN.xtb
new file mode 100644
index 0000000..62183a7
--- /dev/null
+++ b/extensions/strings/extensions_strings_zh-CN.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="zh-CN">
+<translation id="735746806431426829">访问您在下列网站上的数据：</translation>
+<translation id="8719282907381795632">访问您在 <ph name="WEBSITE_1"/> 上的数据</translation>
+<translation id="7809034755304591547"><ph name="EXTENSION_NAME"/>（扩展程序 ID为“<ph name="EXTENSION_ID"/>”）已被管理员阻止。</translation>
+<translation id="2857834222104759979">清单文件无效。</translation>
+<translation id="6384275966486438344">将您的搜索设置更改为：<ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">访问此 USB 设备。</translation>
+<translation id="5911798608827489036">与本地网络或互联网上的任何计算机交换数据</translation>
+<translation id="657064425229075395">无法加载背景脚本“<ph name="BACKGROUND_SCRIPT"/>”。</translation>
+<translation id="3093853184108622112">访问您在 <ph name="WEBSITE_1"/> 和 <ph name="WEBSITE_2"/> 上的数据</translation>
+<translation id="8597109877291678953">与名为 <ph name="HOSTNAME"/> 的计算机交换数据</translation>
+<translation id="6914908792814954894">访问您在<ph name="NUMBER_OF_WEBSITES"/>个网站上的数据</translation>
+<translation id="5456409301717116725">此扩展程序包含密钥文件“<ph name="KEY_PATH"/>”，您最好不要执行此操作。</translation>
+<translation id="6968649314782363508">访问您在 <ph name="WEBSITE_1"/>、<ph name="WEBSITE_2"/> 和 <ph name="WEBSITE_3"/> 上的数据</translation>
+<translation id="149347756975725155">无法加载扩展程序图标“<ph name="ICON"/>”。</translation>
+<translation id="6344170822609224263">网络连接的访问权限列表</translation>
+<translation id="2518849872271000461">与下列名称的计算机交换数据：<ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052">访问您在<ph name="NUMBER_OF_WEBSITES"/>个网站上的数据</translation>
+<translation id="961805664415579088">与域 <ph name="DOMAIN"/> 中的任何计算机交换数据</translation>
+<translation id="4968399700653439437">与下列域中的任何计算机交换数据：<ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">将您的主页更改为：<ph name="HOME_PAGE"/></translation>
+<translation id="2893389635995517838">访问您计算机中的照片、音乐和其他媒体。</translation>
+<translation id="8602184400052594090">清单文件缺失或不可读。</translation>
+<translation id="1196944142850240972">访问您在所有网站上的数据</translation>
+<translation id="7217838517480956708">此计算机的管理员要求安装 <ph name="EXTENSION_NAME"/>。该扩展程序无法删除或修改。</translation>
+<translation id="7154130902455071009">将您的初始页更改为：<ph name="START_PAGE"/></translation>
+<translation id="1803557475693955505">无法加载背景页“<ph name="BACKGROUND_PAGE"/>”。</translation>
+<translation id="1442776214136941057">通过“<ph name="VENDOR_NAME"/>”访问此 USB 设备“<ph name="PRODUCT_NAME"/>”。</translation>
+<translation id="3566784263424350852">通过“<ph name="VENDOR_NAME"/>”访问此 USB 设备。</translation>
+</translationbundle>
diff --git a/extensions/strings/extensions_strings_zh-TW.xtb b/extensions/strings/extensions_strings_zh-TW.xtb
new file mode 100644
index 0000000..6ca96bc
--- /dev/null
+++ b/extensions/strings/extensions_strings_zh-TW.xtb
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!DOCTYPE translationbundle>
+<translationbundle lang="zh-TW">
+<translation id="735746806431426829">存取您在下列網站上的資料：</translation>
+<translation id="8719282907381795632">存取您存放於 <ph name="WEBSITE_1"/> 的資料</translation>
+<translation id="7809034755304591547">管理員已封鎖 <ph name="EXTENSION_NAME"/> (擴充功能 ID「<ph name="EXTENSION_ID"/>」)。</translation>
+<translation id="2857834222104759979">資訊清單檔案無效。</translation>
+<translation id="6384275966486438344">將您的搜尋設定變更為：<ph name="SEARCH_HOST"/></translation>
+<translation id="1938239371608910339">存取 USB 裝置。</translation>
+<translation id="5911798608827489036">與區域網路或網際網路中的任何電腦交換資料</translation>
+<translation id="657064425229075395">無法載入背景指令碼「<ph name="BACKGROUND_SCRIPT"/>」。</translation>
+<translation id="3093853184108622112">存取您存放於 <ph name="WEBSITE_1"/> 與 <ph name="WEBSITE_2"/> 的資料</translation>
+<translation id="8597109877291678953">與名稱為「<ph name="HOSTNAME"/>」的電腦交換資料</translation>
+<translation id="6914908792814954894">存取您存放在 <ph name="NUMBER_OF_WEBSITES"/> 個網站的資料</translation>
+<translation id="5456409301717116725">這個擴充功能含有金鑰檔「<ph name="KEY_PATH"/>」。您不妨重新考慮是否仍要進行。</translation>
+<translation id="6968649314782363508">存取您存放在 <ph name="WEBSITE_1"/>、<ph name="WEBSITE_2"/> 與 <ph name="WEBSITE_3"/> 上的資料</translation>
+<translation id="149347756975725155">無法載入擴充功能圖示「<ph name="ICON"/>」。</translation>
+<translation id="6344170822609224263">存取網路連線清單</translation>
+<translation id="2518849872271000461">與下列名稱的電腦交換資料：<ph name="HOSTNAMES"/></translation>
+<translation id="5530391389158154052">存取您存放在 <ph name="NUMBER_OF_WEBSITES"/> 個網站的資料</translation>
+<translation id="961805664415579088">與網域「<ph name="DOMAIN"/>」中的任何電腦交換資料</translation>
+<translation id="4968399700653439437">與下列網域中的任何電腦交換資料：<ph name="DOMAINS"/></translation>
+<translation id="8662911384982557515">將您的首頁變更為：<ph name="HOME_PAGE"/></translation>
+<translation id="2893389635995517838">存取您電腦中的相片、音樂及其他媒體。</translation>
+<translation id="8602184400052594090">資訊清單檔案遺失或無法讀取。</translation>
+<translation id="1196944142850240972">存取您存放於所有網站的資料</translation>
+<translation id="7217838517480956708">這台電腦的管理員要求安裝 <ph name="EXTENSION_NAME"/>，因此您無法移除或修改它。</translation>
+<translation id="7154130902455071009">將您的起始網頁變更為：<ph name="START_PAGE"/></translation>
+<translation id="1803557475693955505">無法載入背景頁面「<ph name="BACKGROUND_PAGE"/>」。</translation>
+<translation id="1442776214136941057">透過 <ph name="VENDOR_NAME"/> 存取 USB 裝置「<ph name="PRODUCT_NAME"/>」。</translation>
+<translation id="3566784263424350852">透過 <ph name="VENDOR_NAME"/> 存取 USB 裝置。</translation>
+</translationbundle>
diff --git a/gin/converter.cc b/gin/converter.cc
index 29da322..07437b7 100644
--- a/gin/converter.cc
+++ b/gin/converter.cc
@@ -35,7 +35,7 @@
 
 bool Converter<int32_t>::FromV8(Isolate* isolate, Handle<Value> val,
                                 int32_t* out) {
-  if (!val->IsNumber())
+  if (!val->IsInt32())
     return false;
   *out = val->Int32Value();
   return true;
@@ -47,7 +47,7 @@
 
 bool Converter<uint32_t>::FromV8(Isolate* isolate, Handle<Value> val,
                                  uint32_t* out) {
-  if (!val->IsNumber())
+  if (!val->IsUint32())
     return false;
   *out = val->Uint32Value();
   return true;
diff --git a/gin/converter_unittest.cc b/gin/converter_unittest.cc
index cf1affc..791d7e6 100644
--- a/gin/converter_unittest.cc
+++ b/gin/converter_unittest.cc
@@ -89,7 +89,7 @@
     { Integer::New(instance_->isolate(), 0).As<Value>(), true, 0 },
     { Integer::New(instance_->isolate(), 1).As<Value>(), true, 1 },
     { Number::New(instance_->isolate(), -1).As<Value>(), true, -1 },
-    { Number::New(instance_->isolate(), 1.1).As<Value>(), true, 1 },
+    { Number::New(instance_->isolate(), 1.1).As<Value>(), false, 0 },
     { String::NewFromUtf8(instance_->isolate(), "42").As<Value>(), false, 0 },
     { String::NewFromUtf8(instance_->isolate(), "foo").As<Value>(), false, 0 },
     { Object::New(instance_->isolate()).As<Value>(), false, 0 },
diff --git a/gin/gin.target.darwin-arm.mk b/gin/gin.target.darwin-arm.mk
index 538b891..3ee5cc7 100644
--- a/gin/gin.target.darwin-arm.mk
+++ b/gin/gin.target.darwin-arm.mk
@@ -249,7 +249,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gin/gin.target.darwin-mips.mk b/gin/gin.target.darwin-mips.mk
index e7202ce..d02b435 100644
--- a/gin/gin.target.darwin-mips.mk
+++ b/gin/gin.target.darwin-mips.mk
@@ -245,7 +245,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gin/gin.target.darwin-x86.mk b/gin/gin.target.darwin-x86.mk
index 51eb982..431dc21 100644
--- a/gin/gin.target.darwin-x86.mk
+++ b/gin/gin.target.darwin-x86.mk
@@ -247,7 +247,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gin/gin.target.darwin-x86_64.mk b/gin/gin.target.darwin-x86_64.mk
index 450d526..043e2e5 100644
--- a/gin/gin.target.darwin-x86_64.mk
+++ b/gin/gin.target.darwin-x86_64.mk
@@ -247,7 +247,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gin/gin.target.linux-arm.mk b/gin/gin.target.linux-arm.mk
index 538b891..3ee5cc7 100644
--- a/gin/gin.target.linux-arm.mk
+++ b/gin/gin.target.linux-arm.mk
@@ -249,7 +249,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gin/gin.target.linux-mips.mk b/gin/gin.target.linux-mips.mk
index e7202ce..d02b435 100644
--- a/gin/gin.target.linux-mips.mk
+++ b/gin/gin.target.linux-mips.mk
@@ -245,7 +245,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gin/gin.target.linux-x86.mk b/gin/gin.target.linux-x86.mk
index 51eb982..431dc21 100644
--- a/gin/gin.target.linux-x86.mk
+++ b/gin/gin.target.linux-x86.mk
@@ -247,7 +247,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gin/gin.target.linux-x86_64.mk b/gin/gin.target.linux-x86_64.mk
index 450d526..043e2e5 100644
--- a/gin/gin.target.linux-x86_64.mk
+++ b/gin/gin.target.linux-x86_64.mk
@@ -247,7 +247,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/google_apis/drive/gdata_wapi_parser.cc b/google_apis/drive/gdata_wapi_parser.cc
index 2f3c978..261eb15 100644
--- a/google_apis/drive/gdata_wapi_parser.cc
+++ b/google_apis/drive/gdata_wapi_parser.cc
@@ -46,23 +46,6 @@
 const char kFileNameField[] = "docs$filename.$t";
 const char kHrefField[] = "href";
 const char kIDField[] = "id.$t";
-const char kInstalledAppField[] = "docs$installedApp";
-const char kInstalledAppNameField[] = "docs$installedAppName";
-const char kInstalledAppIdField[] = "docs$installedAppId";
-const char kInstalledAppIconField[] = "docs$installedAppIcon";
-const char kInstalledAppIconCategoryField[] = "docs$installedAppIconCategory";
-const char kInstalledAppIconSizeField[] = "docs$installedAppIconSize";
-const char kInstalledAppObjectTypeField[] = "docs$installedAppObjectType";
-const char kInstalledAppPrimaryFileExtensionField[] =
-    "docs$installedAppPrimaryFileExtension";
-const char kInstalledAppPrimaryMimeTypeField[] =
-    "docs$installedAppPrimaryMimeType";
-const char kInstalledAppSecondaryFileExtensionField[] =
-    "docs$installedAppSecondaryFileExtension";
-const char kInstalledAppSecondaryMimeTypeField[] =
-    "docs$installedAppSecondaryMimeType";
-const char kInstalledAppSupportsCreateField[] =
-    "docs$installedAppSupportsCreate";
 const char kItemsPerPageField[] = "openSearch$itemsPerPage.$t";
 const char kLabelField[] = "label";
 const char kLargestChangestampField[] = "docs$largestChangestamp.value";
@@ -71,8 +54,6 @@
 const char kMD5Field[] = "docs$md5Checksum.$t";
 const char kNameField[] = "name.$t";
 const char kPublishedField[] = "published.$t";
-const char kQuotaBytesTotalField[] = "gd$quotaBytesTotal.$t";
-const char kQuotaBytesUsedField[] = "gd$quotaBytesUsed.$t";
 const char kRelField[] = "rel";
 const char kRemovedField[] = "docs$removed";
 const char kResourceIdField[] = "gd$resourceId.$t";
@@ -81,7 +62,6 @@
 const char kSrcField[] = "src";
 const char kStartIndexField[] = "openSearch$startIndex.$t";
 const char kSuggestedFileNameField[] = "docs$suggestedFilename.$t";
-const char kTField[] = "$t";
 const char kTermField[] = "term";
 const char kTitleField[] = "title";
 const char kTitleTField[] = "title.$t";
@@ -186,17 +166,6 @@
     { Category::CATEGORY_LABEL, "http://schemas.google.com/g/2005/labels" },
 };
 
-struct AppIconCategoryMap {
-  AppIcon::IconCategory category;
-  const char* category_name;
-};
-
-const AppIconCategoryMap kAppIconCategoryMap[] = {
-    { AppIcon::ICON_DOCUMENT, "document" },
-    { AppIcon::ICON_APPLICATION, "application" },
-    { AppIcon::ICON_SHARED_DOCUMENT, "documentShared" },
-};
-
 // Converts |url_string| to |result|.  Always returns true to be used
 // for JSONValueConverter::RegisterCustomField method.
 // TODO(mukai): make it return false in case of invalid |url_string|.
@@ -205,17 +174,6 @@
   return true;
 }
 
-// Converts boolean string values like "true" into bool.
-bool GetBoolFromString(const base::StringPiece& value, bool* result) {
-  *result = (value == "true");
-  return true;
-}
-
-bool SortBySize(const InstalledApp::IconList::value_type& a,
-                const InstalledApp::IconList::value_type& b) {
-  return a.first < b.first;
-}
-
 }  // namespace
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -378,49 +336,6 @@
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-// AppIcon implementation
-
-AppIcon::AppIcon() : category_(AppIcon::ICON_UNKNOWN), icon_side_length_(0) {
-}
-
-AppIcon::~AppIcon() {
-}
-
-// static
-void AppIcon::RegisterJSONConverter(
-    base::JSONValueConverter<AppIcon>* converter) {
-  converter->RegisterCustomField<AppIcon::IconCategory>(
-      kInstalledAppIconCategoryField,
-      &AppIcon::category_,
-      &AppIcon::GetIconCategory);
-  converter->RegisterCustomField<int>(kInstalledAppIconSizeField,
-                                      &AppIcon::icon_side_length_,
-                                      base::StringToInt);
-  converter->RegisterRepeatedMessage(kLinkField, &AppIcon::links_);
-}
-
-GURL AppIcon::GetIconURL() const {
-  for (size_t i = 0; i < links_.size(); ++i) {
-    if (links_[i]->type() == Link::LINK_ICON)
-      return links_[i]->href();
-  }
-  return GURL();
-}
-
-// static
-bool AppIcon::GetIconCategory(const base::StringPiece& category,
-                              AppIcon::IconCategory* result) {
-  for (size_t i = 0; i < arraysize(kAppIconCategoryMap); i++) {
-    if (category == kAppIconCategoryMap[i].category_name) {
-      *result = kAppIconCategoryMap[i].category;
-      return true;
-    }
-  }
-  DVLOG(1) << "Unknown icon category " << category;
-  return false;
-}
-
-////////////////////////////////////////////////////////////////////////////////
 // CommonMetadata implementation
 
 CommonMetadata::CommonMetadata() {
@@ -748,142 +663,4 @@
   entries_.release(entries);
 }
 
-////////////////////////////////////////////////////////////////////////////////
-// InstalledApp implementation
-
-InstalledApp::InstalledApp() : supports_create_(false) {
-}
-
-InstalledApp::~InstalledApp() {
-}
-
-InstalledApp::IconList InstalledApp::GetIconsForCategory(
-    AppIcon::IconCategory category) const {
-  IconList result;
-
-  for (ScopedVector<AppIcon>::const_iterator icon_iter = app_icons_.begin();
-       icon_iter != app_icons_.end(); ++icon_iter) {
-    if ((*icon_iter)->category() != category)
-      continue;
-    GURL icon_url = (*icon_iter)->GetIconURL();
-    if (icon_url.is_empty())
-      continue;
-    result.push_back(std::make_pair((*icon_iter)->icon_side_length(),
-                                    icon_url));
-  }
-
-  // Return a sorted list, smallest to largest.
-  std::sort(result.begin(), result.end(), SortBySize);
-  return result;
-}
-
-GURL InstalledApp::GetProductUrl() const {
-  for (ScopedVector<Link>::const_iterator it = links_.begin();
-       it != links_.end(); ++it) {
-    const Link* link = *it;
-    if (link->type() == Link::LINK_PRODUCT)
-      return link->href();
-  }
-  return GURL();
-}
-
-// static
-bool InstalledApp::GetValueString(const base::Value* value,
-                                  std::string* result) {
-  const base::DictionaryValue* dict = NULL;
-  if (!value->GetAsDictionary(&dict))
-    return false;
-
-  if (!dict->GetString(kTField, result))
-    return false;
-
-  return true;
-}
-
-// static
-void InstalledApp::RegisterJSONConverter(
-    base::JSONValueConverter<InstalledApp>* converter) {
-  converter->RegisterRepeatedMessage(kInstalledAppIconField,
-                                     &InstalledApp::app_icons_);
-  converter->RegisterStringField(kInstalledAppIdField,
-                                 &InstalledApp::app_id_);
-  converter->RegisterStringField(kInstalledAppNameField,
-                                 &InstalledApp::app_name_);
-  converter->RegisterStringField(kInstalledAppObjectTypeField,
-                                 &InstalledApp::object_type_);
-  converter->RegisterCustomField<bool>(kInstalledAppSupportsCreateField,
-                                       &InstalledApp::supports_create_,
-                                       &GetBoolFromString);
-  converter->RegisterRepeatedCustomValue(kInstalledAppPrimaryMimeTypeField,
-                                         &InstalledApp::primary_mimetypes_,
-                                         &GetValueString);
-  converter->RegisterRepeatedCustomValue(kInstalledAppSecondaryMimeTypeField,
-                                         &InstalledApp::secondary_mimetypes_,
-                                         &GetValueString);
-  converter->RegisterRepeatedCustomValue(kInstalledAppPrimaryFileExtensionField,
-                                         &InstalledApp::primary_extensions_,
-                                         &GetValueString);
-  converter->RegisterRepeatedCustomValue(
-      kInstalledAppSecondaryFileExtensionField,
-      &InstalledApp::secondary_extensions_,
-      &GetValueString);
-  converter->RegisterRepeatedMessage(kLinkField, &InstalledApp::links_);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// AccountMetadata implementation
-
-AccountMetadata::AccountMetadata()
-    : quota_bytes_total_(0),
-      quota_bytes_used_(0),
-      largest_changestamp_(0) {
-}
-
-AccountMetadata::~AccountMetadata() {
-}
-
-// static
-void AccountMetadata::RegisterJSONConverter(
-    base::JSONValueConverter<AccountMetadata>* converter) {
-  converter->RegisterCustomField<int64>(
-      kQuotaBytesTotalField,
-      &AccountMetadata::quota_bytes_total_,
-      &base::StringToInt64);
-  converter->RegisterCustomField<int64>(
-      kQuotaBytesUsedField,
-      &AccountMetadata::quota_bytes_used_,
-      &base::StringToInt64);
-  converter->RegisterCustomField<int64>(
-      kLargestChangestampField,
-      &AccountMetadata::largest_changestamp_,
-      &base::StringToInt64);
-  converter->RegisterRepeatedMessage(kInstalledAppField,
-                                     &AccountMetadata::installed_apps_);
-}
-
-// static
-scoped_ptr<AccountMetadata> AccountMetadata::CreateFrom(
-    const base::Value& value) {
-  scoped_ptr<AccountMetadata> metadata(new AccountMetadata());
-  const base::DictionaryValue* dictionary = NULL;
-  const base::Value* entry = NULL;
-  if (!value.GetAsDictionary(&dictionary) ||
-      !dictionary->Get(kEntryField, &entry) ||
-      !metadata->Parse(*entry)) {
-    LOG(ERROR) << "Unable to create: Invalid account metadata feed!";
-    return scoped_ptr<AccountMetadata>();
-  }
-
-  return metadata.Pass();
-}
-
-bool AccountMetadata::Parse(const base::Value& value) {
-  base::JSONValueConverter<AccountMetadata> converter;
-  if (!converter.Convert(value, this)) {
-    LOG(ERROR) << "Unable to parse: Invalid account metadata feed!";
-    return false;
-  }
-  return true;
-}
-
 }  // namespace google_apis
diff --git a/google_apis/drive/gdata_wapi_parser.h b/google_apis/drive/gdata_wapi_parser.h
index eddd0e1..7d6cae7 100644
--- a/google_apis/drive/gdata_wapi_parser.h
+++ b/google_apis/drive/gdata_wapi_parser.h
@@ -251,60 +251,6 @@
   std::string mime_type_;
 };
 
-// This stores a representation of an application icon as registered with the
-// installed applications section of the account metadata feed. There can be
-// multiple icons registered for each application, differing in size, category
-// and MIME type.
-class AppIcon {
- public:
-  enum IconCategory {
-    ICON_UNKNOWN,          // Uninitialized state
-    ICON_DOCUMENT,         // Document icon for various MIME types
-    ICON_APPLICATION,      // Application icon for various MIME types
-    ICON_SHARED_DOCUMENT,  // Icon for documents that are shared from other
-                           // users.
-  };
-
-  AppIcon();
-  ~AppIcon();
-
-  // Registers the mapping between JSON field names and the members in
-  // this class.
-  static void RegisterJSONConverter(
-      base::JSONValueConverter<AppIcon>* converter);
-
-  // Category of the icon.
-  IconCategory category() const { return category_; }
-
-  // Size in pixels of one side of the icon (icons are always square).
-  int icon_side_length() const { return icon_side_length_; }
-
-  // Get a list of links available for this AppIcon.
-  const ScopedVector<Link>& links() const { return links_; }
-
-  // Get the icon URL from the internal list of links.  Returns the first
-  // icon URL found in the list.
-  GURL GetIconURL() const;
-
-  void set_category(IconCategory category) { category_ = category; }
-  void set_icon_side_length(int icon_side_length) {
-    icon_side_length_ = icon_side_length;
-  }
-  void set_links(ScopedVector<Link> links) { links_ = links.Pass(); }
-
- private:
-  // Extracts the icon category from the given string. Returns false and does
-  // not change |result| when |scheme| has an unrecognizable value.
-  static bool GetIconCategory(const base::StringPiece& category,
-                              IconCategory* result);
-
-  IconCategory category_;
-  int icon_side_length_;
-  ScopedVector<Link> links_;
-
-  DISALLOW_COPY_AND_ASSIGN(AppIcon);
-};
-
 // Base class for feed entries. This class defines fields commonly used by
 // various feeds.
 class CommonMetadata {
@@ -694,185 +640,6 @@
   DISALLOW_COPY_AND_ASSIGN(ResourceList);
 };
 
-// Metadata representing installed Google Drive application.
-class InstalledApp {
- public:
-  typedef std::vector<std::pair<int, GURL> > IconList;
-
-  InstalledApp();
-  virtual ~InstalledApp();
-
-  // WebApp name.
-  const std::string& app_name() const { return app_name_; }
-
-  // Drive app id
-  const std::string& app_id() const { return app_id_; }
-
-  // Object (file) type name that is generated by this WebApp.
-  const std::string& object_type() const { return object_type_; }
-
-  // True if WebApp supports creation of new file instances.
-  bool supports_create() const { return supports_create_; }
-
-  // List of primary mime types supported by this WebApp. Primary status should
-  // trigger this WebApp becoming the default handler of file instances that
-  // have these mime types.
-  const ScopedVector<std::string>& primary_mimetypes() const {
-    return primary_mimetypes_;
-  }
-
-  // List of secondary mime types supported by this WebApp. Secondary status
-  // should make this WebApp show up in "Open with..." pop-up menu of the
-  // default action menu for file with matching mime types.
-  const ScopedVector<std::string>& secondary_mimetypes() const {
-    return secondary_mimetypes_;
-  }
-
-  // List of primary file extensions supported by this WebApp. Primary status
-  // should trigger this WebApp becoming the default handler of file instances
-  // that match these extensions.
-  const ScopedVector<std::string>& primary_extensions() const {
-    return primary_extensions_;
-  }
-
-  // List of secondary file extensions supported by this WebApp. Secondary
-  // status should make this WebApp show up in "Open with..." pop-up menu of the
-  // default action menu for file with matching extensions.
-  const ScopedVector<std::string>& secondary_extensions() const {
-    return secondary_extensions_;
-  }
-
-  // List of entry links.
-  const ScopedVector<Link>& links() const { return links_; }
-
-  // Returns a list of icons associated with this installed application.
-  const ScopedVector<AppIcon>& app_icons() const {
-    return app_icons_;
-  }
-
-  // Convenience function for getting the icon URLs for a particular |category|
-  // of icon. Icons are returned in a sorted list, from smallest to largest.
-  IconList GetIconsForCategory(AppIcon::IconCategory category) const;
-
-  // Retrieves product URL from the link collection.
-  GURL GetProductUrl() const;
-
-  // Registers the mapping between JSON field names and the members in
-  // this class.
-  static void RegisterJSONConverter(
-      base::JSONValueConverter<InstalledApp>* converter);
-
-  void set_app_id(const std::string& app_id) { app_id_ = app_id; }
-  void set_app_name(const std::string& app_name) { app_name_ = app_name; }
-  void set_object_type(const std::string& object_type) {
-    object_type_ = object_type;
-  }
-  void set_supports_create(bool supports_create) {
-    supports_create_ = supports_create;
-  }
-  void set_primary_mimetypes(
-      ScopedVector<std::string> primary_mimetypes) {
-    primary_mimetypes_ = primary_mimetypes.Pass();
-  }
-  void set_secondary_mimetypes(
-      ScopedVector<std::string> secondary_mimetypes) {
-    secondary_mimetypes_ = secondary_mimetypes.Pass();
-  }
-  void set_primary_extensions(
-      ScopedVector<std::string> primary_extensions) {
-    primary_extensions_ = primary_extensions.Pass();
-  }
-  void set_secondary_extensions(
-      ScopedVector<std::string> secondary_extensions) {
-    secondary_extensions_ = secondary_extensions.Pass();
-  }
-  void set_links(ScopedVector<Link> links) {
-    links_ = links.Pass();
-  }
-  void set_app_icons(ScopedVector<AppIcon> app_icons) {
-    app_icons_ = app_icons.Pass();
-  }
-
- private:
-  // Extracts "$t" value from the dictionary |value| and returns it in |result|.
-  // If the string value can't be found, it returns false.
-  static bool GetValueString(const base::Value* value,
-                             std::string* result);
-
-  std::string app_id_;
-  std::string app_name_;
-  std::string object_type_;
-  bool supports_create_;
-  ScopedVector<std::string> primary_mimetypes_;
-  ScopedVector<std::string> secondary_mimetypes_;
-  ScopedVector<std::string> primary_extensions_;
-  ScopedVector<std::string> secondary_extensions_;
-  ScopedVector<Link> links_;
-  ScopedVector<AppIcon> app_icons_;
-};
-
-// Account metadata feed represents the metadata object attached to the user's
-// account.
-class AccountMetadata {
- public:
-  AccountMetadata();
-  virtual ~AccountMetadata();
-
-  // Creates feed from parsed JSON Value.  You should call this
-  // instead of instantiating JSONValueConverter by yourself because
-  // this method does some post-process for some fields.  See
-  // FillRemainingFields comment and implementation in ResourceEntry
-  // class for the details.
-  static scoped_ptr<AccountMetadata> CreateFrom(const base::Value& value);
-
-  int64 quota_bytes_total() const {
-    return quota_bytes_total_;
-  }
-
-  int64 quota_bytes_used() const {
-    return quota_bytes_used_;
-  }
-
-  int64 largest_changestamp() const {
-    return largest_changestamp_;
-  }
-
-  const ScopedVector<InstalledApp>& installed_apps() const {
-    return installed_apps_;
-  }
-
-  void set_quota_bytes_total(int64 quota_bytes_total) {
-    quota_bytes_total_ = quota_bytes_total;
-  }
-  void set_quota_bytes_used(int64 quota_bytes_used) {
-    quota_bytes_used_ = quota_bytes_used;
-  }
-  void set_largest_changestamp(int64 largest_changestamp) {
-    largest_changestamp_ = largest_changestamp;
-  }
-  void set_installed_apps(ScopedVector<InstalledApp> installed_apps) {
-    installed_apps_ = installed_apps.Pass();
-  }
-
-  // Registers the mapping between JSON field names and the members in
-  // this class.
-  static void RegisterJSONConverter(
-      base::JSONValueConverter<AccountMetadata>* converter);
-
- private:
-  // Parses and initializes data members from content of |value|.
-  // Return false if parsing fails.
-  bool Parse(const base::Value& value);
-
-  int64 quota_bytes_total_;
-  int64 quota_bytes_used_;
-  int64 largest_changestamp_;
-  ScopedVector<InstalledApp> installed_apps_;
-
-  DISALLOW_COPY_AND_ASSIGN(AccountMetadata);
-};
-
-
 }  // namespace google_apis
 
 #endif  // GOOGLE_APIS_DRIVE_GDATA_WAPI_PARSER_H_
diff --git a/google_apis/drive/gdata_wapi_parser_unittest.cc b/google_apis/drive/gdata_wapi_parser_unittest.cc
index e37829e..6655aed 100644
--- a/google_apis/drive/gdata_wapi_parser_unittest.cc
+++ b/google_apis/drive/gdata_wapi_parser_unittest.cc
@@ -235,73 +235,6 @@
   EXPECT_EQ(-1, entry->image_rotation());
 }
 
-TEST(GDataWAPIParserTest, AccountMetadataParser) {
-  scoped_ptr<base::Value> document =
-      test_util::LoadJSONFile("gdata/account_metadata.json");
-  ASSERT_TRUE(document.get());
-  base::DictionaryValue* document_dict = NULL;
-  base::DictionaryValue* entry_value = NULL;
-  ASSERT_TRUE(document->GetAsDictionary(&document_dict));
-  ASSERT_TRUE(document_dict->GetDictionary(std::string("entry"), &entry_value));
-  ASSERT_TRUE(entry_value);
-
-  scoped_ptr<AccountMetadata> metadata(
-      AccountMetadata::CreateFrom(*document));
-  ASSERT_TRUE(metadata.get());
-  EXPECT_EQ(6789012345LL, metadata->quota_bytes_used());
-  EXPECT_EQ(9876543210LL, metadata->quota_bytes_total());
-  EXPECT_EQ(654321, metadata->largest_changestamp());
-  EXPECT_EQ(2U, metadata->installed_apps().size());
-  const InstalledApp* first_app = metadata->installed_apps()[0];
-  const InstalledApp* second_app = metadata->installed_apps()[1];
-
-  ASSERT_TRUE(first_app);
-  EXPECT_EQ("Drive App 1", first_app->app_name());
-  EXPECT_EQ("Drive App Object 1", first_app->object_type());
-  EXPECT_TRUE(first_app->supports_create());
-  EXPECT_EQ("https://chrome.google.com/webstore/detail/abcdefabcdef",
-            first_app->GetProductUrl().spec());
-
-  ASSERT_EQ(2U, first_app->primary_mimetypes().size());
-  EXPECT_EQ("application/test_type_1",
-            *first_app->primary_mimetypes()[0]);
-  EXPECT_EQ("application/vnd.google-apps.drive-sdk.11111111",
-            *first_app->primary_mimetypes()[1]);
-
-  ASSERT_EQ(1U, first_app->secondary_mimetypes().size());
-  EXPECT_EQ("image/jpeg", *first_app->secondary_mimetypes()[0]);
-
-  ASSERT_EQ(2U, first_app->primary_extensions().size());
-  EXPECT_EQ("ext_1", *first_app->primary_extensions()[0]);
-  EXPECT_EQ("ext_2", *first_app->primary_extensions()[1]);
-
-  ASSERT_EQ(1U, first_app->secondary_extensions().size());
-  EXPECT_EQ("ext_3", *first_app->secondary_extensions()[0]);
-
-  ASSERT_EQ(1U, first_app->app_icons().size());
-  EXPECT_EQ(AppIcon::ICON_DOCUMENT, first_app->app_icons()[0]->category());
-  EXPECT_EQ(16, first_app->app_icons()[0]->icon_side_length());
-  GURL icon_url = first_app->app_icons()[0]->GetIconURL();
-  EXPECT_EQ("https://www.google.com/images/srpr/logo3w.png", icon_url.spec());
-  InstalledApp::IconList icons =
-    first_app->GetIconsForCategory(AppIcon::ICON_DOCUMENT);
-  EXPECT_EQ("https://www.google.com/images/srpr/logo3w.png",
-            icons[0].second.spec());
-  icons = first_app->GetIconsForCategory(AppIcon::ICON_SHARED_DOCUMENT);
-  EXPECT_TRUE(icons.empty());
-
-  ASSERT_TRUE(second_app);
-  EXPECT_EQ("Drive App 2", second_app->app_name());
-  EXPECT_EQ("Drive App Object 2", second_app->object_type());
-  EXPECT_EQ("https://chrome.google.com/webstore/detail/deadbeefdeadbeef",
-            second_app->GetProductUrl().spec());
-  EXPECT_FALSE(second_app->supports_create());
-  EXPECT_EQ(2U, second_app->primary_mimetypes().size());
-  EXPECT_EQ(0U, second_app->secondary_mimetypes().size());
-  EXPECT_EQ(1U, second_app->primary_extensions().size());
-  EXPECT_EQ(0U, second_app->secondary_extensions().size());
-}
-
 TEST(GDataWAPIParserTest, ClassifyEntryKindByFileExtension) {
   EXPECT_EQ(
       ResourceEntry::KIND_OF_GOOGLE_DOCUMENT |
diff --git a/google_apis/drive/gdata_wapi_requests_unittest.cc b/google_apis/drive/gdata_wapi_requests_unittest.cc
index b322dcb..2c39745 100644
--- a/google_apis/drive/gdata_wapi_requests_unittest.cc
+++ b/google_apis/drive/gdata_wapi_requests_unittest.cc
@@ -24,7 +24,6 @@
 namespace {
 
 const char kTestUserAgent[] = "test-user-agent";
-const char kTestDownloadPathPrefix[] = "/download/";
 
 class GDataWapiRequestsTest : public testing::Test {
  public:
@@ -43,8 +42,7 @@
                    base::Unretained(this)));
 
     GURL test_base_url = test_util::GetBaseUrlForTesting(test_server_.port());
-    url_generator_.reset(new GDataWapiUrlGenerator(
-        test_base_url, test_base_url.Resolve(kTestDownloadPathPrefix)));
+    url_generator_.reset(new GDataWapiUrlGenerator(test_base_url));
   }
 
  protected:
diff --git a/google_apis/drive/gdata_wapi_url_generator.cc b/google_apis/drive/gdata_wapi_url_generator.cc
index e5c5ce8..ffdb0f3 100644
--- a/google_apis/drive/gdata_wapi_url_generator.cc
+++ b/google_apis/drive/gdata_wapi_url_generator.cc
@@ -14,52 +14,15 @@
 namespace google_apis {
 namespace {
 
-// Content URL for modification or resource list retrieval in a particular
-// directory specified by "%s" which will be replaced with its resource id.
-const char kContentURLFormat[] = "/feeds/default/private/full/%s/contents";
-
-// Content URL for removing a resource specified by the latter "%s" from the
-// directory specified by the former "%s".
-const char kResourceURLForRemovalFormat[] =
-    "/feeds/default/private/full/%s/contents/%s";
-
 // URL requesting single resource entry whose resource id is followed by this
 // prefix.
 const char kGetEditURLPrefix[] = "/feeds/default/private/full/";
 
-// Root resource list url.
-const char kResourceListRootURL[] = "/feeds/default/private/full";
-
-// Metadata feed with things like user quota.
-const char kAccountMetadataURL[] = "/feeds/metadata/default";
-
-// URL to upload a new file under a particular directory specified by "%s".
-const char kInitiateUploadNewFileURLFormat[] =
-    "/feeds/upload/create-session/default/private/full/%s/contents";
-
-// URL to upload a file content to overwrite a file whose resource id is
-// followed by this prefix.
-const char kInitiateUploadExistingFileURLPrefix[] =
-    "/feeds/upload/create-session/default/private/full/";
-
-// Maximum number of resource entries to include in a feed.
-// Be careful not to use something too small because it might overload the
-// server. Be careful not to use something too large because it makes the
-// "fetched N items" UI less responsive.
-const int kMaxDocumentsPerFeed = 500;
-const int kMaxDocumentsPerSearchFeed = 100;
-
-// URL requesting documents list of changes to documents collections.
-const char kGetChangesListURL[] = "/feeds/default/private/changes";
-
 }  // namespace
 
 const char GDataWapiUrlGenerator::kBaseUrlForProduction[] =
     "https://docs.google.com/";
 
-const char GDataWapiUrlGenerator::kBaseDownloadUrlForProduction[] =
-    "https://www.googledrive.com/host/";
-
 // static
 GURL GDataWapiUrlGenerator::AddStandardUrlParams(const GURL& url) {
   GURL result = net::AppendOrReplaceQueryParameter(url, "v", "3");
@@ -68,90 +31,13 @@
   return result;
 }
 
-// static
-GURL GDataWapiUrlGenerator::AddInitiateUploadUrlParams(const GURL& url) {
-  GURL result = net::AppendOrReplaceQueryParameter(url, "convert", "false");
-  return AddStandardUrlParams(result);
-}
-
-// static
-GURL GDataWapiUrlGenerator::AddFeedUrlParams(
-    const GURL& url,
-    int num_items_to_fetch) {
-  GURL result = AddStandardUrlParams(url);
-  result = net::AppendOrReplaceQueryParameter(result, "showfolders", "true");
-  result = net::AppendOrReplaceQueryParameter(result, "include-shared", "true");
-  result = net::AppendOrReplaceQueryParameter(
-      result, "max-results", base::IntToString(num_items_to_fetch));
-  return result;
-}
-
-GDataWapiUrlGenerator::GDataWapiUrlGenerator(const GURL& base_url,
-                                             const GURL& base_download_url)
-    : base_url_(base_url),
-      base_download_url_(base_download_url) {
+GDataWapiUrlGenerator::GDataWapiUrlGenerator(const GURL& base_url)
+    : base_url_(base_url) {
 }
 
 GDataWapiUrlGenerator::~GDataWapiUrlGenerator() {
 }
 
-GURL GDataWapiUrlGenerator::GenerateResourceListUrl(
-    const GURL& override_url,
-    int64 start_changestamp,
-    const std::string& search_string,
-    const std::string& directory_resource_id) const {
-  DCHECK_LE(0, start_changestamp);
-
-  int max_docs = search_string.empty() ? kMaxDocumentsPerFeed :
-                                         kMaxDocumentsPerSearchFeed;
-  GURL url;
-  if (!override_url.is_empty()) {
-    // |override_url| specifies the URL of the continuation feed when the feed
-    // is broken up to multiple chunks. In this case we must not add the
-    // |start_changestamp| that provides the original start point.
-    start_changestamp = 0;
-    url = override_url;
-  } else if (start_changestamp > 0) {
-    // The start changestamp shouldn't be used for a search.
-    DCHECK(search_string.empty());
-    url = base_url_.Resolve(kGetChangesListURL);
-  } else if (!directory_resource_id.empty()) {
-    url = base_url_.Resolve(
-        base::StringPrintf(kContentURLFormat,
-                           net::EscapePath(
-                               directory_resource_id).c_str()));
-  } else {
-    url = base_url_.Resolve(kResourceListRootURL);
-  }
-
-  url = AddFeedUrlParams(url, max_docs);
-
-  if (start_changestamp) {
-    url = net::AppendOrReplaceQueryParameter(
-        url, "start-index", base::Int64ToString(start_changestamp));
-  }
-  if (!search_string.empty()) {
-    url = net::AppendOrReplaceQueryParameter(url, "q", search_string);
-  }
-
-  return url;
-}
-
-GURL GDataWapiUrlGenerator::GenerateSearchByTitleUrl(
-    const std::string& title,
-    const std::string& directory_resource_id) const {
-  DCHECK(!title.empty());
-
-  GURL url = directory_resource_id.empty() ?
-      base_url_.Resolve(kResourceListRootURL) :
-      base_url_.Resolve(base::StringPrintf(
-          kContentURLFormat, net::EscapePath(directory_resource_id).c_str()));
-  url = AddFeedUrlParams(url, kMaxDocumentsPerFeed);
-  url = net::AppendOrReplaceQueryParameter(url, "title", title);
-  url = net::AppendOrReplaceQueryParameter(url, "title-exact", "true");
-  return url;
-}
-
 GURL GDataWapiUrlGenerator::GenerateEditUrl(
     const std::string& resource_id) const {
   return AddStandardUrlParams(GenerateEditUrlWithoutParams(resource_id));
@@ -180,71 +66,4 @@
   return url;
 }
 
-GURL GDataWapiUrlGenerator::GenerateContentUrl(
-    const std::string& resource_id) const {
-  if (resource_id.empty()) {
-    // |resource_id| must not be empty. Return an empty GURL as an error.
-    return GURL();
-  }
-
-  GURL result = base_url_.Resolve(
-      base::StringPrintf(kContentURLFormat,
-                         net::EscapePath(resource_id).c_str()));
-  return AddStandardUrlParams(result);
-}
-
-GURL GDataWapiUrlGenerator::GenerateResourceUrlForRemoval(
-    const std::string& parent_resource_id,
-    const std::string& resource_id) const {
-  if (resource_id.empty() || parent_resource_id.empty()) {
-    // Both |resource_id| and |parent_resource_id| must be non-empty.
-    // Return an empty GURL as an error.
-    return GURL();
-  }
-
-  GURL result = base_url_.Resolve(
-      base::StringPrintf(kResourceURLForRemovalFormat,
-                         net::EscapePath(parent_resource_id).c_str(),
-                         net::EscapePath(resource_id).c_str()));
-  return AddStandardUrlParams(result);
-}
-
-GURL GDataWapiUrlGenerator::GenerateInitiateUploadNewFileUrl(
-    const std::string& parent_resource_id) const {
-  GURL result = base_url_.Resolve(
-      base::StringPrintf(kInitiateUploadNewFileURLFormat,
-                         net::EscapePath(parent_resource_id).c_str()));
-  return AddInitiateUploadUrlParams(result);
-}
-
-GURL GDataWapiUrlGenerator::GenerateInitiateUploadExistingFileUrl(
-    const std::string& resource_id) const {
-  GURL result = base_url_.Resolve(
-      kInitiateUploadExistingFileURLPrefix + net::EscapePath(resource_id));
-  return AddInitiateUploadUrlParams(result);
-}
-
-GURL GDataWapiUrlGenerator::GenerateResourceListRootUrl() const {
-  return AddStandardUrlParams(base_url_.Resolve(kResourceListRootURL));
-}
-
-GURL GDataWapiUrlGenerator::GenerateAccountMetadataUrl(
-    bool include_installed_apps) const {
-  GURL result = AddStandardUrlParams(base_url_.Resolve(kAccountMetadataURL));
-  if (include_installed_apps) {
-    result = net::AppendOrReplaceQueryParameter(
-        result, "include-installed-apps", "true");
-  }
-  return result;
-}
-
-GURL GDataWapiUrlGenerator::GenerateDownloadFileUrl(
-    const std::string& resource_id) const {
-  // Strip the file type prefix before the colon character.
-  size_t colon = resource_id.find(':');
-  return base_download_url_.Resolve(net::EscapePath(
-      colon == std::string::npos ? resource_id
-                                 : resource_id.substr(colon + 1)));
-}
-
 }  // namespace google_apis
diff --git a/google_apis/drive/gdata_wapi_url_generator.h b/google_apis/drive/gdata_wapi_url_generator.h
index 05b565d..c0486cf 100644
--- a/google_apis/drive/gdata_wapi_url_generator.h
+++ b/google_apis/drive/gdata_wapi_url_generator.h
@@ -17,8 +17,7 @@
 // for production, and the local server for testing.
 class GDataWapiUrlGenerator {
  public:
-  // The
-  GDataWapiUrlGenerator(const GURL& base_url, const GURL& base_download_url);
+  GDataWapiUrlGenerator(const GURL& base_url);
   ~GDataWapiUrlGenerator();
 
   // The base URL for communicating with the WAPI server for production.
@@ -31,53 +30,6 @@
   // show folders in the feed are added to document feed URLs.
   static GURL AddStandardUrlParams(const GURL& url);
 
-  // Adds additional parameters for initiate uploading as well as standard
-  // url params (as AddStandardUrlParams above does).
-  static GURL AddInitiateUploadUrlParams(const GURL& url);
-
-  // Adds additional parameters for API version, output content type and to
-  // show folders in the feed are added to document feed URLs.
-  static GURL AddFeedUrlParams(const GURL& url,
-                               int num_items_to_fetch);
-
-  // Generates a URL for getting the resource list feed.
-  //
-  // The parameters other than |search_string| are mutually exclusive.
-  // If |override_url| is non-empty, other parameters are ignored. Or if
-  // |override_url| is empty, others are not used. Besides, |search_string|
-  // cannot be set together with |start_changestamp|.
-  //
-  // override_url:
-  //   By default, a hard-coded base URL of the WAPI server is used.
-  //   The base URL can be overridden by |override_url|.
-  //   This is used for handling continuation of feeds (2nd page and onward).
-  //
-  // start_changestamp
-  //   If |start_changestamp| is 0, URL for a full feed is generated.
-  //   If |start_changestamp| is non-zero, URL for a delta feed is generated.
-  //
-  // search_string
-  //   If |search_string| is non-empty, q=... parameter is added, and
-  //   max-results=... parameter is adjusted for a search.
-  //
-  // directory_resource_id:
-  //   If |directory_resource_id| is non-empty, a URL for fetching documents in
-  //   a particular directory is generated.
-  //
-  GURL GenerateResourceListUrl(
-      const GURL& override_url,
-      int64 start_changestamp,
-      const std::string& search_string,
-      const std::string& directory_resource_id) const;
-
-  // Generates a URL for searching resources by title (exact-match).
-  // |directory_resource_id| is optional parameter. When it is empty
-  // all the existing resources are target of the search. Otherwise,
-  // the search target is just under the directory with it.
-  GURL GenerateSearchByTitleUrl(
-      const std::string& title,
-      const std::string& directory_resource_id) const;
-
   // Generates a URL for getting or editing the resource entry of
   // the given resource ID.
   GURL GenerateEditUrl(const std::string& resource_id) const;
@@ -98,41 +50,8 @@
   GURL GenerateEditUrlWithEmbedOrigin(const std::string& resource_id,
                                       const GURL& embed_origin) const;
 
-  // Generates a URL for editing the contents in the directory specified
-  // by the given resource ID.
-  GURL GenerateContentUrl(const std::string& resource_id) const;
-
-  // Generates a URL to remove an entry specified by |resource_id| from
-  // the directory specified by the given |parent_resource_id|.
-  GURL GenerateResourceUrlForRemoval(const std::string& parent_resource_id,
-                                     const std::string& resource_id) const;
-
-  // Generates a URL to initiate uploading a new file to a directory
-  // specified by |parent_resource_id|.
-  GURL GenerateInitiateUploadNewFileUrl(
-      const std::string& parent_resource_id) const;
-
-  // Generates a URL to initiate uploading file content to overwrite a
-  // file specified by |resource_id|.
-  GURL GenerateInitiateUploadExistingFileUrl(
-      const std::string& resource_id) const;
-
-  // Generates a URL for getting the root resource list feed.
-  // Used to make changes in the root directory (ex. create a directory in the
-  // root directory)
-  GURL GenerateResourceListRootUrl() const;
-
-  // Generates a URL for getting the account metadata feed.
-  // If |include_installed_apps| is set to true, the response will include the
-  // list of installed third party applications.
-  GURL GenerateAccountMetadataUrl(bool include_installed_apps) const;
-
-  // Generates a URL for downloading a file.
-  GURL GenerateDownloadFileUrl(const std::string& resource_id) const;
-
  private:
   const GURL base_url_;
-  const GURL base_download_url_;
 };
 
 }  // namespace google_apis
diff --git a/google_apis/drive/gdata_wapi_url_generator_unittest.cc b/google_apis/drive/gdata_wapi_url_generator_unittest.cc
index 0dc74fd..7699732 100644
--- a/google_apis/drive/gdata_wapi_url_generator_unittest.cc
+++ b/google_apis/drive/gdata_wapi_url_generator_unittest.cc
@@ -14,8 +14,7 @@
  public:
   GDataWapiUrlGeneratorTest()
       : url_generator_(
-          GURL(GDataWapiUrlGenerator::kBaseUrlForProduction),
-          GURL(GDataWapiUrlGenerator::kBaseDownloadUrlForProduction)) {
+          GURL(GDataWapiUrlGenerator::kBaseUrlForProduction)) {
   }
 
  protected:
@@ -28,113 +27,6 @@
                 GURL("http://www.example.com")).spec());
 }
 
-TEST_F(GDataWapiUrlGeneratorTest, AddInitiateUploadUrlParams) {
-  EXPECT_EQ("http://www.example.com/?convert=false&v=3&alt=json&showroot=true",
-            GDataWapiUrlGenerator::AddInitiateUploadUrlParams(
-                GURL("http://www.example.com")).spec());
-}
-
-TEST_F(GDataWapiUrlGeneratorTest, AddFeedUrlParams) {
-  EXPECT_EQ(
-      "http://www.example.com/?v=3&alt=json&showroot=true&"
-      "showfolders=true"
-      "&include-shared=true"
-      "&max-results=100",
-      GDataWapiUrlGenerator::AddFeedUrlParams(GURL("http://www.example.com"),
-                                              100  // num_items_to_fetch
-                                              ).spec());
-}
-
-TEST_F(GDataWapiUrlGeneratorTest, GenerateResourceListUrl) {
-  // This is the very basic URL for the GetResourceList request.
-  EXPECT_EQ("https://docs.google.com/feeds/default/private/full"
-            "?v=3&alt=json&showroot=true&showfolders=true&include-shared=true"
-            "&max-results=500",
-            url_generator_.GenerateResourceListUrl(
-                GURL(),         // override_url,
-                0,              // start_changestamp,
-                std::string(),  // search_string,
-                std::string()   // directory resource ID
-                ).spec());
-
-  // With an override URL provided, the base URL is changed, but the default
-  // parameters remain as-is.
-  EXPECT_EQ("http://localhost/"
-            "?v=3&alt=json&showroot=true&showfolders=true&include-shared=true"
-            "&max-results=500",
-            url_generator_.GenerateResourceListUrl(
-                GURL("http://localhost/"),  // override_url,
-                0,                          // start_changestamp,
-                std::string(),              // search_string,
-                std::string()               // directory resource ID
-                ).spec());
-
-  // With a non-zero start_changestamp provided, the base URL is changed from
-  // "full" to "changes", and "start-index" parameter is added.
-  EXPECT_EQ("https://docs.google.com/feeds/default/private/changes"
-            "?v=3&alt=json&showroot=true&showfolders=true&include-shared=true"
-            "&max-results=500&start-index=100",
-            url_generator_.GenerateResourceListUrl(
-                GURL(),         // override_url,
-                100,            // start_changestamp,
-                std::string(),  // search_string,
-                std::string()   // directory resource ID
-                ).spec());
-
-  // With a non-empty search string provided, "max-results" value is changed,
-  // and "q" parameter is added.
-  EXPECT_EQ("https://docs.google.com/feeds/default/private/full"
-            "?v=3&alt=json&showroot=true&showfolders=true&include-shared=true"
-            "&max-results=100&q=foo",
-            url_generator_.GenerateResourceListUrl(
-                GURL(),        // override_url,
-                0,             // start_changestamp,
-                "foo",         // search_string,
-                std::string()  // directory resource ID
-                ).spec());
-
-  // With a non-empty directory resource ID provided, the base URL is
-  // changed, but the default parameters remain.
-  EXPECT_EQ(
-      "https://docs.google.com/feeds/default/private/full/XXX/contents"
-      "?v=3&alt=json&showroot=true&showfolders=true&include-shared=true"
-      "&max-results=500",
-      url_generator_.GenerateResourceListUrl(GURL(),  // override_url,
-                                             0,       // start_changestamp,
-                                             std::string(),  // search_string,
-                                             "XXX"  // directory resource ID
-                                             ).spec());
-
-  // With a non-empty override_url provided, the base URL is changed, but
-  // the default parameters remain. Note that start-index should not be
-  // overridden.
-  EXPECT_EQ("http://example.com/"
-            "?start-index=123&v=3&alt=json&showroot=true&showfolders=true"
-            "&include-shared=true&max-results=500",
-            url_generator_.GenerateResourceListUrl(
-                GURL("http://example.com/?start-index=123"),  // override_url,
-                100,            // start_changestamp,
-                std::string(),  // search_string,
-                "XXX"           // directory resource ID
-                ).spec());
-}
-
-TEST_F(GDataWapiUrlGeneratorTest, GenerateSearchByTitleUrl) {
-  EXPECT_EQ(
-      "https://docs.google.com/feeds/default/private/full"
-      "?v=3&alt=json&showroot=true&showfolders=true&include-shared=true"
-      "&max-results=500&title=search-title&title-exact=true",
-      url_generator_.GenerateSearchByTitleUrl(
-          "search-title", std::string()).spec());
-
-  EXPECT_EQ(
-      "https://docs.google.com/feeds/default/private/full/XXX/contents"
-      "?v=3&alt=json&showroot=true&showfolders=true&include-shared=true"
-      "&max-results=500&title=search-title&title-exact=true",
-      url_generator_.GenerateSearchByTitleUrl(
-          "search-title", "XXX").spec());
-}
-
 TEST_F(GDataWapiUrlGeneratorTest, GenerateEditUrl) {
   EXPECT_EQ(
       "https://docs.google.com/feeds/default/private/full/XXX?v=3&alt=json"
@@ -165,61 +57,4 @@
           GURL()).spec());
 }
 
-TEST_F(GDataWapiUrlGeneratorTest, GenerateContentUrl) {
-  EXPECT_EQ(
-      "https://docs.google.com/feeds/default/private/full/"
-      "folder%3Aroot/contents?v=3&alt=json&showroot=true",
-      url_generator_.GenerateContentUrl("folder:root").spec());
-}
-
-TEST_F(GDataWapiUrlGeneratorTest, GenerateResourceUrlForRemoval) {
-  EXPECT_EQ(
-      "https://docs.google.com/feeds/default/private/full/"
-      "folder%3Aroot/contents/file%3AABCDE?v=3&alt=json&showroot=true",
-      url_generator_.GenerateResourceUrlForRemoval(
-          "folder:root", "file:ABCDE").spec());
-}
-
-TEST_F(GDataWapiUrlGeneratorTest, GenerateInitiateUploadNewFileUrl) {
-  EXPECT_EQ(
-      "https://docs.google.com/feeds/upload/create-session/default/private/"
-      "full/folder%3Aabcde/contents?convert=false&v=3&alt=json&showroot=true",
-      url_generator_.GenerateInitiateUploadNewFileUrl("folder:abcde").spec());
-}
-
-TEST_F(GDataWapiUrlGeneratorTest, GenerateInitiateUploadExistingFileUrl) {
-  EXPECT_EQ(
-      "https://docs.google.com/feeds/upload/create-session/default/private/"
-      "full/file%3Aresource_id?convert=false&v=3&alt=json&showroot=true",
-      url_generator_.GenerateInitiateUploadExistingFileUrl(
-          "file:resource_id").spec());
-}
-
-TEST_F(GDataWapiUrlGeneratorTest, GenerateResourceListRootUrl) {
-  EXPECT_EQ(
-      "https://docs.google.com/feeds/default/private/full?v=3&alt=json"
-      "&showroot=true",
-      url_generator_.GenerateResourceListRootUrl().spec());
-}
-
-TEST_F(GDataWapiUrlGeneratorTest, GenerateAccountMetadataUrl) {
-  // Include installed apps.
-  EXPECT_EQ(
-      "https://docs.google.com/feeds/metadata/default"
-      "?v=3&alt=json&showroot=true&include-installed-apps=true",
-      url_generator_.GenerateAccountMetadataUrl(true).spec());
-
-  // Exclude installed apps.
-  EXPECT_EQ(
-      "https://docs.google.com/feeds/metadata/default?v=3&alt=json"
-      "&showroot=true",
-      url_generator_.GenerateAccountMetadataUrl(false).spec());
-}
-
-TEST_F(GDataWapiUrlGeneratorTest, GenerateDownloadFileUrl) {
-  EXPECT_EQ(
-      "https://www.googledrive.com/host/resourceId",
-      url_generator_.GenerateDownloadFileUrl("file:resourceId").spec());
-}
-
 }  // namespace google_apis
diff --git a/google_apis/gaia/fake_identity_provider.cc b/google_apis/gaia/fake_identity_provider.cc
new file mode 100644
index 0000000..7360e41
--- /dev/null
+++ b/google_apis/gaia/fake_identity_provider.cc
@@ -0,0 +1,40 @@
+// 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.
+
+#include "google_apis/gaia/fake_identity_provider.h"
+
+#include "google_apis/gaia/oauth2_token_service.h"
+
+FakeIdentityProvider::FakeIdentityProvider(OAuth2TokenService* token_service)
+    : token_service_(token_service) {
+}
+
+FakeIdentityProvider::~FakeIdentityProvider() {
+}
+
+void FakeIdentityProvider::LogIn(const std::string& account_id) {
+  account_id_ = account_id;
+  FireOnActiveAccountLogin();
+}
+
+void FakeIdentityProvider::LogOut() {
+  account_id_.clear();
+  FireOnActiveAccountLogout();
+}
+
+std::string FakeIdentityProvider::GetActiveUsername() {
+  return account_id_;
+}
+
+std::string FakeIdentityProvider::GetActiveAccountId() {
+  return account_id_;
+}
+
+OAuth2TokenService* FakeIdentityProvider::GetTokenService() {
+  return token_service_;
+}
+
+bool FakeIdentityProvider::RequestLogin() {
+  return false;
+}
diff --git a/google_apis/gaia/fake_identity_provider.h b/google_apis/gaia/fake_identity_provider.h
new file mode 100644
index 0000000..28d46d9
--- /dev/null
+++ b/google_apis/gaia/fake_identity_provider.h
@@ -0,0 +1,38 @@
+// 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.
+
+#ifndef GOOGLE_APIS_GAIA_FAKE_IDENTITY_PROVIDER_H_
+#define GOOGLE_APIS_GAIA_FAKE_IDENTITY_PROVIDER_H_
+
+#include <string>
+
+#include "base/compiler_specific.h"
+#include "base/macros.h"
+#include "google_apis/gaia/identity_provider.h"
+
+class OAuth2TokenService;
+
+// Fake identity provider implementation.
+class FakeIdentityProvider : public IdentityProvider {
+ public:
+  explicit FakeIdentityProvider(OAuth2TokenService* token_service);
+  virtual ~FakeIdentityProvider();
+
+  void LogIn(const std::string& account_id);
+  void LogOut();
+
+  // IdentityProvider:
+  virtual std::string GetActiveUsername() OVERRIDE;
+  virtual std::string GetActiveAccountId() OVERRIDE;
+  virtual OAuth2TokenService* GetTokenService() OVERRIDE;
+  virtual bool RequestLogin() OVERRIDE;
+
+ private:
+  std::string account_id_;
+  OAuth2TokenService* token_service_;
+
+  DISALLOW_COPY_AND_ASSIGN(FakeIdentityProvider);
+};
+
+#endif  // GOOGLE_APIS_GAIA_FAKE_IDENTITY_PROVIDER_H_
diff --git a/google_apis/gaia/identity_provider.cc b/google_apis/gaia/identity_provider.cc
new file mode 100644
index 0000000..842891e
--- /dev/null
+++ b/google_apis/gaia/identity_provider.cc
@@ -0,0 +1,71 @@
+// 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.
+
+#include "google_apis/gaia/identity_provider.h"
+
+IdentityProvider::Observer::~Observer() {}
+
+IdentityProvider::~IdentityProvider() {}
+
+void IdentityProvider::AddActiveAccountRefreshTokenObserver(
+    OAuth2TokenService::Observer* observer) {
+  OAuth2TokenService* token_service = GetTokenService();
+  if (!token_service || token_service_observers_.HasObserver(observer))
+    return;
+
+  token_service_observers_.AddObserver(observer);
+  if (++token_service_observer_count_ == 1)
+    token_service->AddObserver(this);
+}
+
+void IdentityProvider::RemoveActiveAccountRefreshTokenObserver(
+    OAuth2TokenService::Observer* observer) {
+  OAuth2TokenService* token_service = GetTokenService();
+  if (!token_service || !token_service_observers_.HasObserver(observer))
+    return;
+
+  token_service_observers_.RemoveObserver(observer);
+  if (--token_service_observer_count_ == 0)
+    token_service->RemoveObserver(this);
+}
+
+void IdentityProvider::AddObserver(Observer* observer) {
+  observers_.AddObserver(observer);
+}
+
+void IdentityProvider::RemoveObserver(Observer* observer) {
+  observers_.RemoveObserver(observer);
+}
+
+void IdentityProvider::OnRefreshTokenAvailable(const std::string& account_id) {
+  if (account_id != GetActiveAccountId())
+    return;
+  FOR_EACH_OBSERVER(OAuth2TokenService::Observer,
+                    token_service_observers_,
+                    OnRefreshTokenAvailable(account_id));
+}
+
+void IdentityProvider::OnRefreshTokenRevoked(const std::string& account_id) {
+  if (account_id != GetActiveAccountId())
+    return;
+  FOR_EACH_OBSERVER(OAuth2TokenService::Observer,
+                    token_service_observers_,
+                    OnRefreshTokenRevoked(account_id));
+}
+
+void IdentityProvider::OnRefreshTokensLoaded() {
+  FOR_EACH_OBSERVER(OAuth2TokenService::Observer,
+                    token_service_observers_,
+                    OnRefreshTokensLoaded());
+}
+
+IdentityProvider::IdentityProvider() : token_service_observer_count_(0) {}
+
+void IdentityProvider::FireOnActiveAccountLogin() {
+  FOR_EACH_OBSERVER(Observer, observers_, OnActiveAccountLogin());
+}
+
+void IdentityProvider::FireOnActiveAccountLogout() {
+  FOR_EACH_OBSERVER(Observer, observers_, OnActiveAccountLogout());
+}
diff --git a/google_apis/gaia/identity_provider.h b/google_apis/gaia/identity_provider.h
new file mode 100644
index 0000000..e0e99ee
--- /dev/null
+++ b/google_apis/gaia/identity_provider.h
@@ -0,0 +1,93 @@
+// 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.
+
+#ifndef GOOGLE_APIS_GAIA_IDENTITY_PROVIDER_H_
+#define GOOGLE_APIS_GAIA_IDENTITY_PROVIDER_H_
+
+#include <string>
+
+#include "base/compiler_specific.h"
+#include "base/macros.h"
+#include "base/observer_list.h"
+#include "google_apis/gaia/oauth2_token_service.h"
+
+// Helper class that provides access to information about logged-in GAIA
+// accounts. Each instance of this class references an entity who may be logged
+// in to zero, one or multiple GAIA accounts. The class provides access to the
+// OAuth tokens for all logged-in accounts and indicates which of these is
+// currently active.
+// The main purpose of this abstraction layer is to isolate consumers of GAIA
+// information from the different sources and various token service
+// implementations. Whenever possible, consumers of GAIA information should be
+// provided with an instance of this class instead of accessing other GAIA APIs
+// directly.
+class IdentityProvider : public OAuth2TokenService::Observer {
+ public:
+  class Observer {
+   public:
+    // Called when a GAIA account logs in and becomes the active account. All
+    // account information is available when this method is called and all
+    // |IdentityProvider| methods will return valid data.
+    virtual void OnActiveAccountLogin() {}
+
+    // Called when the active GAIA account logs out. The account information may
+    // have been cleared already when this method is called. The
+    // |IdentityProvider| methods may return inconsistent or outdated
+    // information if called from within OnLogout().
+    virtual void OnActiveAccountLogout() {}
+
+   protected:
+    virtual ~Observer();
+  };
+
+  virtual ~IdentityProvider();
+
+  // Adds and removes observers that will be notified of changes to the refresh
+  // token availability for the active account.
+  void AddActiveAccountRefreshTokenObserver(
+      OAuth2TokenService::Observer* observer);
+  void RemoveActiveAccountRefreshTokenObserver(
+      OAuth2TokenService::Observer* observer);
+
+  // Gets the active account's user name.
+  virtual std::string GetActiveUsername() = 0;
+
+  // Gets the active account's account ID.
+  virtual std::string GetActiveAccountId() = 0;
+
+  // Gets the token service vending OAuth tokens for all logged-in accounts.
+  virtual OAuth2TokenService* GetTokenService() = 0;
+
+  // Requests login to a GAIA account. Implementations can show a login UI, log
+  // in automatically if sufficient credentials are available or may ignore the
+  // request. Returns true if the login request was processed and false if it
+  // was ignored.
+  virtual bool RequestLogin() = 0;
+
+  void AddObserver(Observer* observer);
+  void RemoveObserver(Observer* observer);
+
+  // OAuth2TokenService::Observer:
+  virtual void OnRefreshTokenAvailable(const std::string& account_id) OVERRIDE;
+  virtual void OnRefreshTokenRevoked(const std::string& account_id) OVERRIDE;
+  virtual void OnRefreshTokensLoaded() OVERRIDE;
+
+ protected:
+  IdentityProvider();
+
+  // Fires an OnActiveAccountLogin notification.
+  void FireOnActiveAccountLogin();
+
+  // Fires an OnActiveAccountLogout notification.
+  void FireOnActiveAccountLogout();
+
+ private:
+  ObserverList<Observer, true> observers_;
+  ObserverList<OAuth2TokenService::Observer, true> token_service_observers_;
+  int token_service_observer_count_;
+
+  DISALLOW_COPY_AND_ASSIGN(IdentityProvider);
+};
+
+#endif  // GOOGLE_APIS_GAIA_IDENTITY_PROVIDER_H_
diff --git a/google_apis/gcm/engine/checkin_request.h b/google_apis/gcm/engine/checkin_request.h
index 1d706a7..5ae8dd3 100644
--- a/google_apis/gcm/engine/checkin_request.h
+++ b/google_apis/gcm/engine/checkin_request.h
@@ -12,6 +12,7 @@
 #include "base/callback.h"
 #include "base/memory/weak_ptr.h"
 #include "google_apis/gcm/base/gcm_export.h"
+#include "google_apis/gcm/protocol/android_checkin.pb.h"
 #include "google_apis/gcm/protocol/checkin.pb.h"
 #include "net/base/backoff_entry.h"
 #include "net/url_request/url_fetcher_delegate.h"
diff --git a/google_apis/gcm/engine/gcm_store.h b/google_apis/gcm/engine/gcm_store.h
index 1b15e56..8b9891d 100644
--- a/google_apis/gcm/engine/gcm_store.h
+++ b/google_apis/gcm/engine/gcm_store.h
@@ -9,6 +9,8 @@
 #include <string>
 #include <vector>
 
+#include <google/protobuf/message_lite.h>
+
 #include "base/basictypes.h"
 #include "base/callback_forward.h"
 #include "base/memory/linked_ptr.h"
@@ -17,13 +19,6 @@
 #include "base/time/time.h"
 #include "google_apis/gcm/base/gcm_export.h"
 #include "google_apis/gcm/engine/registration_info.h"
-#include "google_apis/gcm/protocol/mcs.pb.h"
-
-namespace google {
-namespace protobuf {
-class MessageLite;
-}  // namespace protobuf
-}  // namespace google
 
 namespace gcm {
 
diff --git a/google_apis/gcm/engine/gservices_settings.cc b/google_apis/gcm/engine/gservices_settings.cc
new file mode 100644
index 0000000..fc38e9d
--- /dev/null
+++ b/google_apis/gcm/engine/gservices_settings.cc
@@ -0,0 +1,150 @@
+// 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.
+
+#include "google_apis/gcm/engine/gservices_settings.h"
+
+#include "base/bind.h"
+#include "base/strings/string_number_conversions.h"
+
+namespace {
+// The expected time in seconds between periodic checkins.
+const char kCheckinIntervalKey[] = "checkin_interval";
+// The override URL to the checkin server.
+const char kCheckinURLKey[] = "checkin_url";
+// The MCS machine name to connect to.
+const char kMCSHostnameKey[] = "gcm_hostname";
+// The MCS port to connect to.
+const char kMCSSecurePortKey[] = "gcm_secure_port";
+// The URL to get MCS registration IDs.
+const char kRegistrationURLKey[] = "gcm_registration_url";
+
+const int64 kDefaultCheckinInterval = 2 * 24 * 60 * 60;  // seconds = 2 days.
+const char kDefaultCheckinURL[] = "https://android.clients.google.com/checkin";
+const char kDefaultMCSHostname[] = "https://mtalk.google.com";
+const int kDefaultMCSSecurePort = 5228;
+const char kDefaultRegistrationURL[] =
+    "https://android.clients.google.com/c2dm/register3";
+
+}  // namespace
+
+namespace gcm {
+
+GServicesSettings::GServicesSettings(GCMStore* gcm_store)
+    : gcm_store_(gcm_store),
+      checkin_interval_(kDefaultCheckinInterval),
+      checkin_url_(kDefaultCheckinURL),
+      mcs_hostname_(kDefaultMCSHostname),
+      mcs_secure_port_(kDefaultMCSSecurePort),
+      registration_url_(kDefaultRegistrationURL),
+      weak_ptr_factory_(this) {
+}
+
+GServicesSettings::~GServicesSettings() {}
+
+void GServicesSettings::UpdateFromCheckinResponse(
+  const checkin_proto::AndroidCheckinResponse& checkin_response) {
+  if (!checkin_response.has_digest() ||
+      checkin_response.digest() == digest_) {
+    // There are no changes as digest is the same or no settings provided.
+    return;
+  }
+
+  std::map<std::string, std::string> settings;
+  for (int i = 0; i < checkin_response.setting_size(); ++i) {
+    std::string name = checkin_response.setting(i).name();
+    std::string value = checkin_response.setting(i).value();
+    settings[name] = value;
+  }
+
+  // Only update the settings in store and digest, if the settings actually
+  // passed the verificaiton in update settings.
+  if (UpdateSettings(settings)) {
+    digest_ = checkin_response.digest();
+    gcm_store_->SetGServicesSettings(
+        settings,
+        digest_,
+        base::Bind(&GServicesSettings::SetGServicesSettingsCallback,
+                   weak_ptr_factory_.GetWeakPtr()));
+  }
+}
+
+void GServicesSettings::UpdateFromLoadResult(
+    const GCMStore::LoadResult& load_result) {
+  if (UpdateSettings(load_result.gservices_settings))
+    digest_ = load_result.gservices_digest;
+}
+
+bool GServicesSettings::UpdateSettings(
+    const std::map<std::string, std::string>& settings) {
+  int64 new_checkin_interval = 0LL;
+  std::map<std::string, std::string>::const_iterator iter =
+      settings.find(kCheckinIntervalKey);
+  if (iter != settings.end()) {
+    if (!base::StringToInt64(iter->second, &new_checkin_interval)) {
+      LOG(ERROR) << "Failed to parse checkin interval: " << iter->second;
+      return false;
+    }
+    if (new_checkin_interval <= 0LL) {
+      LOG(ERROR) << "Checkin interval not positive: " << new_checkin_interval;
+      return false;
+    }
+  }
+
+  std::string new_mcs_hostname;
+  int new_mcs_secure_port = -1;
+  iter = settings.find(kMCSHostnameKey);
+  if (iter != settings.end()) {
+    new_mcs_hostname = iter->second;
+    if (new_mcs_hostname.empty()) {
+      LOG(ERROR) << "Empty MCS hostname provided.";
+      return false;
+    }
+
+    iter = settings.find(kMCSSecurePortKey);
+    if (iter != settings.end()) {
+      if (!base::StringToInt(iter->second, &new_mcs_secure_port)) {
+        LOG(ERROR) << "Failed to parse MCS secure port: " << iter->second;
+        return false;
+      }
+      if (new_mcs_secure_port < 0 || 65535 < new_mcs_secure_port) {
+        LOG(ERROR) << "Incorrect port value: " << new_mcs_secure_port;
+        return false;
+      }
+    }
+  }
+
+  std::string new_checkin_url;
+  iter = settings.find(kCheckinURLKey);
+  if (iter != settings.end()) {
+    new_checkin_url = iter->second;
+    if (new_checkin_url.empty()) {
+      LOG(ERROR) << "Empty checkin URL provided.";
+      return false;
+    }
+  }
+
+  std::string new_registration_url;
+  iter = settings.find(kRegistrationURLKey);
+  if (iter != settings.end()) {
+    new_registration_url = iter->second;
+    if (new_registration_url.empty()) {
+      LOG(ERROR) << "Empty registration URL provided.";
+      return false;
+    }
+  }
+
+  // We only update the settings once all of them are correct.
+  checkin_interval_ = new_checkin_interval;
+  mcs_hostname_ = new_mcs_hostname;
+  mcs_secure_port_ = new_mcs_secure_port;
+  checkin_url_ = new_checkin_url;
+  registration_url_ = new_registration_url;
+  return true;
+}
+
+void GServicesSettings::SetGServicesSettingsCallback(bool success) {
+  DCHECK(success);
+}
+
+}  // namespace gcm
diff --git a/google_apis/gcm/engine/gservices_settings.h b/google_apis/gcm/engine/gservices_settings.h
new file mode 100644
index 0000000..db3c6b0
--- /dev/null
+++ b/google_apis/gcm/engine/gservices_settings.h
@@ -0,0 +1,89 @@
+// 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.
+
+#ifndef GOOGLE_APIS_GCM_ENGINE_GSERVICES_SETTINGS_H_
+#define GOOGLE_APIS_GCM_ENGINE_GSERVICES_SETTINGS_H_
+
+#include <map>
+#include <string>
+
+#include "base/memory/weak_ptr.h"
+#include "google_apis/gcm/base/gcm_export.h"
+#include "google_apis/gcm/engine/gcm_store.h"
+#include "google_apis/gcm/protocol/checkin.pb.h"
+
+namespace gcm {
+
+// Class responsible for handling G-services settings. It takes care of
+// extracting them from checkin response and storing in GCMStore.
+class GCM_EXPORT GServicesSettings {
+ public:
+  // Create an instance of GServicesSettings class. |gcm_store| is used to store
+  // the settings after they are extracted from checkin response.
+  explicit GServicesSettings(GCMStore* gcm_store);
+  ~GServicesSettings();
+
+  // Udpates the settings based on |checkin_response|.
+  void UpdateFromCheckinResponse(
+      const checkin_proto::AndroidCheckinResponse& checkin_response);
+
+  // Updates the settings based on |load_result|.
+  void UpdateFromLoadResult(const GCMStore::LoadResult& load_result);
+
+  const std::string& digest() const { return digest_; }
+
+  // TODO(fgorski): Consider returning TimeDelta.
+  int64 checkin_interval() const { return checkin_interval_; }
+
+  // TODO(fgorski): Consider returning GURL and use it for validation.
+  const std::string& checkin_url() const { return checkin_url_; }
+
+  // TODO(fgorski): Consider returning GURL and use it for validation.
+  const std::string& mcs_hostname() const { return mcs_hostname_; }
+
+  int mcs_secure_port() const { return mcs_secure_port_; }
+
+  // TODO(fgorski): Consider returning GURL and use it for validation.
+  const std::string& registration_url() const { return registration_url_; }
+
+ private:
+  // Parses the |settings| to fill in specific fields.
+  // TODO(fgorski): Change to a status variable that can be logged to UMA.
+  bool UpdateSettings(const std::map<std::string, std::string>& settings);
+
+  // Callback passed to GCMStore::SetGServicesSettings.
+  void SetGServicesSettingsCallback(bool success);
+
+  // GCM store to persist the settings. Not owned.
+  GCMStore* gcm_store_;
+
+  // Digest (hash) of the settings, used to check whether settings need update.
+  // It is meant to be sent with checkin request, instead of sending the whole
+  // settings table.
+  std::string digest_;
+
+  // Time in seconds between periodic checkins.
+  int64 checkin_interval_;
+
+  // URL that should be used for checkins.
+  std::string checkin_url_;
+
+  // Hostname of the MCS server.
+  std::string mcs_hostname_;
+
+  // Secure port to connect to on MCS sever.
+  int mcs_secure_port_;
+
+  // URL that should be used for regisrations and unregistrations.
+  std::string registration_url_;
+
+  // Factory for creating references in callbacks.
+  base::WeakPtrFactory<GServicesSettings> weak_ptr_factory_;
+
+  DISALLOW_COPY_AND_ASSIGN(GServicesSettings);
+};
+
+}  // namespace gcm
+
+#endif  // GOOGLE_APIS_GCM_ENGINE_GSERVICES_SETTINGS_H_
diff --git a/google_apis/gcm/engine/gservices_settings_unittest.cc b/google_apis/gcm/engine/gservices_settings_unittest.cc
new file mode 100644
index 0000000..ada4194
--- /dev/null
+++ b/google_apis/gcm/engine/gservices_settings_unittest.cc
@@ -0,0 +1,234 @@
+// 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.
+
+#include "base/strings/string_number_conversions.h"
+#include "google_apis/gcm/engine/gservices_settings.h"
+#include "google_apis/gcm/engine/registration_info.h"
+#include "google_apis/gcm/gcm_client.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace gcm {
+
+namespace {
+
+const int64 kAlternativeCheckinInterval = 2000LL;
+const char kAlternativeCheckinURL[] = "http://alternative.url/checkin";
+const char kAlternativeMCSHostname[] = "http://alternative.gcm.host";
+const int kAlternativeMCSSecurePort = 443;
+const char kAlternativeRegistrationURL[] =
+    "http://alternative.url/registration";
+
+const int64 kDefaultCheckinInterval = 2 * 24 * 60 * 60;  // seconds = 2 days.
+const char kDefaultCheckinURL[] = "https://android.clients.google.com/checkin";
+const char kDefaultMCSHostname[] = "https://mtalk.google.com";
+const int kDefaultMCSSecurePort = 5228;
+const char kDefaultRegistrationURL[] =
+    "https://android.clients.google.com/c2dm/register3";
+
+class FakeGCMStore : public GCMStore {
+ public:
+  FakeGCMStore();
+  virtual ~FakeGCMStore();
+
+  virtual void Load(const gcm::GCMStore::LoadCallback& callback) OVERRIDE {}
+  virtual void Close() OVERRIDE {}
+  virtual void Destroy(const gcm::GCMStore::UpdateCallback& callback) OVERRIDE {
+  }
+  virtual void SetDeviceCredentials(
+      uint64 device_android_id,
+      uint64 device_security_token,
+      const gcm::GCMStore::UpdateCallback& callback) OVERRIDE {}
+  virtual void AddRegistration(
+      const std::string& app_id,
+      const linked_ptr<gcm::RegistrationInfo>& registration,
+      const gcm::GCMStore::UpdateCallback& callback) OVERRIDE {}
+  virtual void RemoveRegistration(
+      const std::string& app_id,
+      const gcm::GCMStore::UpdateCallback& callback) OVERRIDE {}
+  virtual void AddIncomingMessage(
+      const std::string& persistent_id,
+      const gcm::GCMStore::UpdateCallback& callback) OVERRIDE {}
+  virtual void RemoveIncomingMessage(
+      const std::string& persistent_id,
+      const gcm::GCMStore::UpdateCallback& callback) OVERRIDE {}
+  virtual void RemoveIncomingMessages(
+      const PersistentIdList& persistent_ids,
+      const gcm::GCMStore::UpdateCallback& callback) OVERRIDE {}
+  virtual bool AddOutgoingMessage(
+      const std::string& persistent_id,
+      const gcm::MCSMessage& message,
+      const gcm::GCMStore::UpdateCallback& callback) OVERRIDE {
+    return true;
+  }
+  virtual void OverwriteOutgoingMessage(
+      const std::string& persistent_id,
+      const gcm::MCSMessage& message,
+      const gcm::GCMStore::UpdateCallback& callback) OVERRIDE {}
+  virtual void RemoveOutgoingMessage(
+      const std::string& persistent_id,
+      const gcm::GCMStore::UpdateCallback& callback) OVERRIDE {}
+  virtual void RemoveOutgoingMessages(
+      const PersistentIdList& persistent_ids,
+      const gcm::GCMStore::UpdateCallback& callback) OVERRIDE {}
+  virtual void SetLastCheckinTime(
+      const base::Time& last_checkin_time,
+      const gcm::GCMStore::UpdateCallback& callback) OVERRIDE {}
+
+  // G-service settings handling.
+  virtual void SetGServicesSettings(
+      const std::map<std::string, std::string>& settings,
+      const std::string& settings_digest,
+      const gcm::GCMStore::UpdateCallback& callback) OVERRIDE {
+    settings_saved_ = true;
+  }
+
+  void Reset() {
+    settings_saved_ = false;
+  }
+
+  bool settings_saved() const { return settings_saved_; }
+
+ private:
+  bool settings_saved_;
+};
+
+FakeGCMStore::FakeGCMStore() : settings_saved_(false) {}
+
+FakeGCMStore::~FakeGCMStore() {}
+
+}  // namespace
+
+class GServicesSettingsTest : public testing::Test {
+ public:
+  GServicesSettingsTest();
+  virtual ~GServicesSettingsTest();
+
+  virtual void SetUp() OVERRIDE;
+
+  void CheckAllSetToDefault();
+  void CheckAllSetToAlternative();
+  void SetWithAlternativeSettings(
+      checkin_proto::AndroidCheckinResponse& checkin_response);
+
+  GServicesSettings& settings() {
+    return gserivces_settings_;
+  }
+
+  const std::map<std::string, std::string>& alternative_settings() {
+    return alternative_settings_;
+  }
+
+  FakeGCMStore& gcm_store() { return gcm_store_; }
+
+ private:
+  FakeGCMStore gcm_store_;
+  GServicesSettings gserivces_settings_;
+  std::map<std::string, std::string> alternative_settings_;
+};
+
+GServicesSettingsTest::GServicesSettingsTest()
+    : gserivces_settings_(&gcm_store_) {
+}
+
+GServicesSettingsTest::~GServicesSettingsTest() {}
+
+void GServicesSettingsTest::SetUp() {
+  alternative_settings_["checkin_interval"] =
+      base::Int64ToString(kAlternativeCheckinInterval);
+  alternative_settings_["checkin_url"] = kAlternativeCheckinURL;
+  alternative_settings_["gcm_hostname"] = kAlternativeMCSHostname;
+  alternative_settings_["gcm_secure_port"] =
+      base::IntToString(kAlternativeMCSSecurePort);
+  alternative_settings_["gcm_registration_url"] = kAlternativeRegistrationURL;
+}
+
+void GServicesSettingsTest::CheckAllSetToDefault() {
+  EXPECT_EQ(kDefaultCheckinInterval, settings().checkin_interval());
+  EXPECT_EQ(kDefaultCheckinURL, settings().checkin_url());
+  EXPECT_EQ(kDefaultMCSHostname, settings().mcs_hostname());
+  EXPECT_EQ(kDefaultMCSSecurePort, settings().mcs_secure_port());
+  EXPECT_EQ(kDefaultRegistrationURL, settings().registration_url());
+}
+
+void GServicesSettingsTest::CheckAllSetToAlternative() {
+  EXPECT_EQ(kAlternativeCheckinInterval, settings().checkin_interval());
+  EXPECT_EQ(kAlternativeCheckinURL, settings().checkin_url());
+  EXPECT_EQ(kAlternativeMCSHostname, settings().mcs_hostname());
+  EXPECT_EQ(kAlternativeMCSSecurePort, settings().mcs_secure_port());
+  EXPECT_EQ(kAlternativeRegistrationURL, settings().registration_url());
+}
+
+void GServicesSettingsTest::SetWithAlternativeSettings(
+    checkin_proto::AndroidCheckinResponse& checkin_response) {
+  for (std::map<std::string, std::string>::const_iterator iter =
+           alternative_settings_.begin();
+       iter != alternative_settings_.end(); ++iter) {
+    checkin_proto::GservicesSetting* setting = checkin_response.add_setting();
+    setting->set_name(iter->first);
+    setting->set_value(iter->second);
+  }
+}
+
+// Verifies default values of the G-services settings and settings digest.
+TEST_F(GServicesSettingsTest, DefaultSettingsAndDigest) {
+  CheckAllSetToDefault();
+  EXPECT_EQ(std::string(), settings().digest());
+}
+
+// Verifies that the settings are set correctly based on the load result.
+TEST_F(GServicesSettingsTest, UpdateFromLoadResult) {
+  GCMStore::LoadResult result;
+  result.gservices_settings = alternative_settings();
+  result.gservices_digest = "digest_value";
+  settings().UpdateFromLoadResult(result);
+
+  CheckAllSetToAlternative();
+  EXPECT_EQ("digest_value", settings().digest());
+}
+
+// Verifies that the settings are set correctly after parsing a checkin
+// response.
+TEST_F(GServicesSettingsTest, UpdateFromCheckinResponse) {
+  checkin_proto::AndroidCheckinResponse checkin_response;
+
+  checkin_response.set_digest("digest_value");
+  SetWithAlternativeSettings(checkin_response);
+
+  settings().UpdateFromCheckinResponse(checkin_response);
+  EXPECT_TRUE(gcm_store().settings_saved());
+
+  CheckAllSetToAlternative();
+  EXPECT_EQ("digest_value", settings().digest());
+}
+
+// Verifies that no update is done, when a checkin response misses digest.
+TEST_F(GServicesSettingsTest, UpdateFromCheckinResponseNoDigest) {
+  checkin_proto::AndroidCheckinResponse checkin_response;
+
+  SetWithAlternativeSettings(checkin_response);
+  settings().UpdateFromCheckinResponse(checkin_response);
+  EXPECT_FALSE(gcm_store().settings_saved());
+
+  CheckAllSetToDefault();
+  EXPECT_EQ(std::string(), settings().digest());
+}
+
+// Verifies that no update is done, when a checkin response digest is the same.
+TEST_F(GServicesSettingsTest, UpdateFromCheckinResponseSameDigest) {
+  GCMStore::LoadResult load_result;
+  load_result.gservices_digest = "old_digest";
+  load_result.gservices_settings = alternative_settings();
+  settings().UpdateFromLoadResult(load_result);
+
+  checkin_proto::AndroidCheckinResponse checkin_response;
+  checkin_response.set_digest("old_digest");
+  SetWithAlternativeSettings(checkin_response);
+  settings().UpdateFromCheckinResponse(checkin_response);
+  EXPECT_FALSE(gcm_store().settings_saved());
+
+  CheckAllSetToAlternative();
+  EXPECT_EQ("old_digest", settings().digest());
+}
+
+}  // namespace gcm
diff --git a/google_apis/gcm/engine/mcs_client.cc b/google_apis/gcm/engine/mcs_client.cc
index da8300c..a99a333 100644
--- a/google_apis/gcm/engine/mcs_client.cc
+++ b/google_apis/gcm/engine/mcs_client.cc
@@ -15,6 +15,7 @@
 #include "google_apis/gcm/base/mcs_util.h"
 #include "google_apis/gcm/base/socket_stream.h"
 #include "google_apis/gcm/engine/connection_factory.h"
+#include "google_apis/gcm/monitoring/gcm_stats_recorder.h"
 
 using namespace google::protobuf::io;
 
@@ -128,6 +129,14 @@
 }
 ReliablePacketInfo::~ReliablePacketInfo() {}
 
+int MCSClient::GetSendQueueSize() const {
+  return to_send_.size();
+}
+
+int MCSClient::GetResendQueueSize() const {
+  return to_resend_.size();
+}
+
 std::string MCSClient::GetStateString() const {
   switch(state_) {
     case UNINITIALIZED:
@@ -147,7 +156,8 @@
 MCSClient::MCSClient(const std::string& version_string,
                      base::Clock* clock,
                      ConnectionFactory* connection_factory,
-                     GCMStore* gcm_store)
+                     GCMStore* gcm_store,
+                     GCMStatsRecorder* recorder)
     : version_string_(version_string),
       clock_(clock),
       state_(UNINITIALIZED),
@@ -160,6 +170,7 @@
       stream_id_out_(0),
       stream_id_in_(0),
       gcm_store_(gcm_store),
+      recorder_(recorder),
       weak_ptr_factory_(this) {
 }
 
@@ -495,6 +506,11 @@
         base::Time::kMicrosecondsPerSecond) - sent;
     DVLOG(1) << "Message was queued for " << queued << " seconds.";
     data_message->set_queued(queued);
+    recorder_->RecordDataSentToWire(
+        data_message->category(),
+        data_message->to(),
+        data_message->id(),
+        queued);
   }
 
   // Set the proper last received stream id to acknowledge received server
@@ -862,6 +878,13 @@
 
   const mcs_proto::DataMessageStanza* data_message_stanza =
       reinterpret_cast<const mcs_proto::DataMessageStanza*>(&protobuf);
+  recorder_->RecordNotifySendStatus(
+      data_message_stanza->category(),
+      data_message_stanza->to(),
+      data_message_stanza->id(),
+      status,
+      protobuf.ByteSize(),
+      data_message_stanza->ttl());
   message_sent_callback_.Run(
       data_message_stanza->device_user_id(),
       data_message_stanza->category(),
diff --git a/google_apis/gcm/engine/mcs_client.h b/google_apis/gcm/engine/mcs_client.h
index 1943be6..cc915e4 100644
--- a/google_apis/gcm/engine/mcs_client.h
+++ b/google_apis/gcm/engine/mcs_client.h
@@ -37,6 +37,7 @@
 
 class CollapseKey;
 class ConnectionFactory;
+class GCMStatsRecorder;
 struct ReliablePacketInfo;
 
 // An MCS client. This client is in charge of all communications with an
@@ -54,6 +55,8 @@
     CONNECTED,      // Connected and running.
   };
 
+  // Any change made to this enum should have corresponding change in the
+  // GetMessageSendStatusString(...) function in mcs_client.cc.
   enum MessageSendStatus {
     // Message was queued succcessfully.
     QUEUED,
@@ -61,14 +64,19 @@
     SENT,
     // Message not saved, because total queue size limit reached.
     QUEUE_SIZE_LIMIT_REACHED,
-    // Messgae not saved, because app queue size limit reached.
+    // Message not saved, because app queue size limit reached.
     APP_QUEUE_SIZE_LIMIT_REACHED,
     // Message too large to send.
     MESSAGE_TOO_LARGE,
     // Message not send becuase of TTL = 0 and no working connection.
     NO_CONNECTION_ON_ZERO_TTL,
     // Message exceeded TTL.
-    TTL_EXCEEDED
+    TTL_EXCEEDED,
+
+    // NOTE: always keep this entry at the end. Add new status types only
+    // immediately above this line. Make sure to update the corresponding
+    // histogram enum accordingly.
+    SEND_STATUS_COUNT
   };
 
   // Callback for MCSClient's error conditions.
@@ -89,7 +97,8 @@
   MCSClient(const std::string& version_string,
             base::Clock* clock,
             ConnectionFactory* connection_factory,
-            GCMStore* gcm_store);
+            GCMStore* gcm_store,
+            GCMStatsRecorder* recorder);
   virtual ~MCSClient();
 
   // Initialize the client. Will load any previous id/token information as well
@@ -127,6 +136,12 @@
   // Returns the current state of the client.
   State state() const { return state_; }
 
+  // Returns the size of the send message queue.
+  int GetSendQueueSize() const;
+
+  // Returns the size of the resend messaage queue.
+  int GetResendQueueSize() const;
+
   // Returns text representation of the state enum.
   std::string GetStateString() const;
 
@@ -259,6 +274,9 @@
   // Manager to handle triggering/detecting heartbeats.
   HeartbeatManager heartbeat_manager_;
 
+  // Recorder that records GCM activities for debugging purpose. Not owned.
+  GCMStatsRecorder* recorder_;
+
   base::WeakPtrFactory<MCSClient> weak_ptr_factory_;
 
   DISALLOW_COPY_AND_ASSIGN(MCSClient);
diff --git a/google_apis/gcm/engine/mcs_client_unittest.cc b/google_apis/gcm/engine/mcs_client_unittest.cc
index b3e2f0d..a062136 100644
--- a/google_apis/gcm/engine/mcs_client_unittest.cc
+++ b/google_apis/gcm/engine/mcs_client_unittest.cc
@@ -15,6 +15,7 @@
 #include "google_apis/gcm/engine/fake_connection_factory.h"
 #include "google_apis/gcm/engine/fake_connection_handler.h"
 #include "google_apis/gcm/engine/gcm_store_impl.h"
+#include "google_apis/gcm/monitoring/gcm_stats_recorder.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace gcm {
@@ -67,8 +68,9 @@
  public:
   TestMCSClient(base::Clock* clock,
                 ConnectionFactory* connection_factory,
-                GCMStore* gcm_store)
-    : MCSClient("", clock, connection_factory, gcm_store),
+                GCMStore* gcm_store,
+                gcm::GCMStatsRecorder* recorder)
+    : MCSClient("", clock, connection_factory, gcm_store, recorder),
       next_id_(0) {
   }
 
@@ -136,6 +138,8 @@
   scoped_ptr<MCSMessage> received_message_;
   std::string sent_message_id_;
   MCSClient::MessageSendStatus message_send_status_;
+
+  gcm::GCMStatsRecorder recorder_;
 };
 
 MCSClientTest::MCSClientTest()
@@ -166,7 +170,8 @@
                                     message_loop_.message_loop_proxy()));
   mcs_client_.reset(new TestMCSClient(&clock_,
                                       &connection_factory_,
-                                      gcm_store_.get()));
+                                      gcm_store_.get(),
+                                      &recorder_));
 }
 
 void MCSClientTest::InitializeClient() {
diff --git a/google_apis/gcm/gcm.gyp b/google_apis/gcm/gcm.gyp
index 9843776..3f40c8d 100644
--- a/google_apis/gcm/gcm.gyp
+++ b/google_apis/gcm/gcm.gyp
@@ -58,6 +58,8 @@
         'engine/gcm_store.h',
         'engine/gcm_store_impl.cc',
         'engine/gcm_store_impl.h',
+        'engine/gservices_settings.cc',
+        'engine/gservices_settings.h',
         'engine/heartbeat_manager.cc',
         'engine/heartbeat_manager.h',
         'engine/mcs_client.cc',
@@ -72,6 +74,8 @@
         'gcm_client.h',
         'gcm_client_impl.cc',
         'gcm_client_impl.h',
+        'monitoring/gcm_stats_recorder.cc',
+        'monitoring/gcm_stats_recorder.h',
         'protocol/android_checkin.proto',
         'protocol/checkin.proto',
         'protocol/mcs.proto',
@@ -134,11 +138,13 @@
         'engine/fake_connection_handler.cc',
         'engine/fake_connection_handler.h',
         'engine/gcm_store_impl_unittest.cc',
+        'engine/gservices_settings_unittest.cc',
         'engine/heartbeat_manager_unittest.cc',
         'engine/mcs_client_unittest.cc',
         'engine/registration_request_unittest.cc',
         'engine/unregistration_request_unittest.cc',
-        'gcm_client_impl_unittest.cc'
+        'gcm_client_impl_unittest.cc',
+        'monitoring/gcm_stats_recorder_unittest.cc'
       ]
     },
   ],
diff --git a/google_apis/gcm/gcm_client.cc b/google_apis/gcm/gcm_client.cc
index 3bdd699..75884d6 100644
--- a/google_apis/gcm/gcm_client.cc
+++ b/google_apis/gcm/gcm_client.cc
@@ -24,7 +24,12 @@
 GCMClient::SendErrorDetails::~SendErrorDetails() {}
 
 GCMClient::GCMStatistics::GCMStatistics()
-    : gcm_client_created(false), connection_client_created(false) {
+    : is_recording(false),
+      gcm_client_created(false),
+      connection_client_created(false),
+      android_id(0),
+      send_queue_size(0),
+      resend_queue_size(0) {
 }
 
 GCMClient::GCMStatistics::~GCMStatistics() {
diff --git a/google_apis/gcm/gcm_client.h b/google_apis/gcm/gcm_client.h
index 16ba53b..5996c06 100644
--- a/google_apis/gcm/gcm_client.h
+++ b/google_apis/gcm/gcm_client.h
@@ -11,6 +11,7 @@
 
 #include "base/basictypes.h"
 #include "google_apis/gcm/base/gcm_export.h"
+#include "google_apis/gcm/monitoring/gcm_stats_recorder.h"
 
 template <class T> class scoped_refptr;
 
@@ -94,11 +95,17 @@
     GCMStatistics();
     ~GCMStatistics();
 
+    bool is_recording;
     bool gcm_client_created;
     std::string gcm_client_state;
     bool connection_client_created;
     std::string connection_state;
     uint64 android_id;
+    std::vector<std::string> registered_app_ids;
+    int send_queue_size;
+    int resend_queue_size;
+
+    std::vector<GCMStatsRecorder::SendingActivity> sending_activities;
   };
 
   // A delegate interface that allows the GCMClient instance to interact with
@@ -208,6 +215,12 @@
                     const std::string& receiver_id,
                     const OutgoingMessage& message) = 0;
 
+  // Enables or disables internal activity recording.
+  virtual void SetRecording(bool recording) = 0;
+
+  // Clear all recorded GCM activity logs.
+  virtual void ClearActivityLogs() = 0;
+
   // Gets internal states and statistics.
   virtual GCMStatistics GetStatistics() const = 0;
 };
diff --git a/google_apis/gcm/gcm_client_impl.cc b/google_apis/gcm/gcm_client_impl.cc
index 80c58d8..5deeb96 100644
--- a/google_apis/gcm/gcm_client_impl.cc
+++ b/google_apis/gcm/gcm_client_impl.cc
@@ -12,13 +12,16 @@
 #include "base/metrics/histogram.h"
 #include "base/sequenced_task_runner.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/strings/stringprintf.h"
 #include "base/time/default_clock.h"
 #include "google_apis/gcm/base/mcs_message.h"
 #include "google_apis/gcm/base/mcs_util.h"
 #include "google_apis/gcm/engine/checkin_request.h"
 #include "google_apis/gcm/engine/connection_factory_impl.h"
 #include "google_apis/gcm/engine/gcm_store_impl.h"
+#include "google_apis/gcm/engine/gservices_settings.h"
 #include "google_apis/gcm/engine/mcs_client.h"
+#include "google_apis/gcm/monitoring/gcm_stats_recorder.h"
 #include "google_apis/gcm/protocol/mcs.pb.h"
 #include "net/http/http_network_session.h"
 #include "net/url_request/url_request_context.h"
@@ -75,7 +78,6 @@
 const char kMCSEndpointMain[] = "https://mtalk.google.com:5228";
 const char kMCSEndpointFallback[] = "https://mtalk.google.com:443";
 
-const int64 kDefaultCheckinInterval = 2 * 24 * 60 * 60LL;  // seconds = 2 days.
 const int kMaxRegistrationRetries = 5;
 const char kMessageTypeDataMessage[] = "gcm";
 const char kMessageTypeDeletedMessagesKey[] = "deleted_messages";
@@ -130,12 +132,14 @@
     const std::string& version,
     base::Clock* clock,
     ConnectionFactory* connection_factory,
-    GCMStore* gcm_store) {
+    GCMStore* gcm_store,
+    GCMStatsRecorder* recorder) {
   return make_scoped_ptr<MCSClient>(
       new MCSClient(version,
                     clock,
                     connection_factory,
-                    gcm_store));
+                    gcm_store,
+                    recorder));
 }
 
 scoped_ptr<ConnectionFactory> GCMInternalsBuilder::BuildConnectionFactory(
@@ -158,6 +162,7 @@
       pending_registration_requests_deleter_(&pending_registration_requests_),
       pending_unregistration_requests_deleter_(
           &pending_unregistration_requests_),
+      periodic_checkin_ptr_factory_(this),
       weak_ptr_factory_(this) {
 }
 
@@ -187,6 +192,7 @@
   account_ids_ = account_ids;
 
   gcm_store_.reset(new GCMStoreImpl(path, blocking_task_runner));
+  gservices_settings_.reset(new GServicesSettings(gcm_store_.get()));
 
   delegate_ = delegate;
 
@@ -213,11 +219,12 @@
   registrations_ = result->registrations;
   device_checkin_info_.android_id = result->device_android_id;
   device_checkin_info_.secret = result->device_security_token;
-  base::Time last_checkin_time = result->last_checkin_time;
+  last_checkin_time_ = result->last_checkin_time;
+  gservices_settings_->UpdateFromLoadResult(*result);
   InitializeMCSClient(result.Pass());
 
   if (device_checkin_info_.IsValid()) {
-    SchedulePeriodicCheckin(last_checkin_time);
+    SchedulePeriodicCheckin();
     OnReady();
     return;
   }
@@ -241,7 +248,8 @@
       chrome_build_proto_.chrome_version(),
       clock_.get(),
       connection_factory_.get(),
-      gcm_store_.get()).Pass();
+      gcm_store_.get(),
+      &recorder_).Pass();
 
   mcs_client_->Initialize(
       base::Bind(&GCMClientImpl::OnMCSError, weak_ptr_factory_.GetWeakPtr()),
@@ -286,12 +294,15 @@
 }
 
 void GCMClientImpl::StartCheckin() {
-  CheckinRequest::RequestInfo request_info(
-    device_checkin_info_.android_id,
-    device_checkin_info_.secret,
-    std::string(),
-    account_ids_,
-    chrome_build_proto_);
+  // Make sure no checkin is in progress.
+  if (checkin_request_.get())
+    return;
+
+  CheckinRequest::RequestInfo request_info(device_checkin_info_.android_id,
+                                           device_checkin_info_.secret,
+                                           gservices_settings_->digest(),
+                                           account_ids_,
+                                           chrome_build_proto_);
   checkin_request_.reset(
       new CheckinRequest(request_info,
                          kDefaultBackoffPolicy,
@@ -327,30 +338,43 @@
   }
 
   if (device_checkin_info_.IsValid()) {
-    base::Time last_checkin_time = clock_->Now();
+    // First update G-services settings, as something might have changed.
+    gservices_settings_->UpdateFromCheckinResponse(checkin_response);
+    last_checkin_time_ = clock_->Now();
     gcm_store_->SetLastCheckinTime(
-        last_checkin_time,
+        last_checkin_time_,
         base::Bind(&GCMClientImpl::SetLastCheckinTimeCallback,
                    weak_ptr_factory_.GetWeakPtr()));
-    SchedulePeriodicCheckin(last_checkin_time);
+    SchedulePeriodicCheckin();
   }
 }
 
-void GCMClientImpl::SchedulePeriodicCheckin(
-    const base::Time& last_checkin_time) {
-  base::TimeDelta time_to_next_checkin = last_checkin_time +
-      base::TimeDelta::FromSeconds(kDefaultCheckinInterval) - clock_->Now();
-  if (time_to_next_checkin < base::TimeDelta::FromSeconds(0L))
-    time_to_next_checkin = base::TimeDelta::FromSeconds(0L);
-  // TODO(fgorski): Make sure that once dynamic events (like accounts list
-  // change) trigger checkin we reset the timer.
+void GCMClientImpl::SchedulePeriodicCheckin() {
+  // Make sure no checkin is in progress.
+  if (checkin_request_.get())
+    return;
+
+  // There should be only one periodic checkin pending at a time. Removing
+  // pending periodic checkin to schedule a new one.
+  periodic_checkin_ptr_factory_.InvalidateWeakPtrs();
+
+  base::TimeDelta time_to_next_checkin = GetTimeToNextCheckin();
+  if (time_to_next_checkin < base::TimeDelta())
+    time_to_next_checkin = base::TimeDelta();
+
   base::MessageLoop::current()->PostDelayedTask(
       FROM_HERE,
       base::Bind(&GCMClientImpl::StartCheckin,
-                 weak_ptr_factory_.GetWeakPtr()),
+                 periodic_checkin_ptr_factory_.GetWeakPtr()),
       time_to_next_checkin);
 }
 
+base::TimeDelta GCMClientImpl::GetTimeToNextCheckin() const {
+  return last_checkin_time_ +
+         base::TimeDelta::FromSeconds(gservices_settings_->checkin_interval()) -
+         clock_->Now();
+}
+
 void GCMClientImpl::SetLastCheckinTimeCallback(bool success) {
   // TODO(fgorski): This is one of the signals that store needs a rebuild.
   DCHECK(success);
@@ -557,16 +581,33 @@
   }
 }
 
+void GCMClientImpl::SetRecording(bool recording) {
+  recorder_.SetRecording(recording);
+}
+
+void GCMClientImpl::ClearActivityLogs() {
+  recorder_.Clear();
+}
+
 GCMClient::GCMStatistics GCMClientImpl::GetStatistics() const {
   GCMClient::GCMStatistics stats;
-  stats.gcm_client_state = GCMClientImpl::GetStateString();
+  stats.gcm_client_created = true;
+  stats.is_recording = recorder_.is_recording();
+  stats.gcm_client_state = GetStateString();
   stats.connection_client_created = mcs_client_.get() != NULL;
   if (mcs_client_.get()) {
     stats.connection_state = mcs_client_->GetStateString();
-    // TODO(juyik): add more statistics such as message metadata list, etc.
+    stats.send_queue_size = mcs_client_->GetSendQueueSize();
+    stats.resend_queue_size = mcs_client_->GetResendQueueSize();
   }
   if (device_checkin_info_.android_id > 0)
     stats.android_id = device_checkin_info_.android_id;
+  recorder_.CollectSendingActivities(&stats.sending_activities);
+
+  for (RegistrationInfoMap::const_iterator it = registrations_.begin();
+       it != registrations_.end(); ++it) {
+    stats.registered_app_ids.push_back(it->first);
+  }
   return stats;
 }
 
@@ -695,6 +736,10 @@
     send_error_details.additional_data.erase(iter);
   }
 
+  recorder_.RecordIncomingSendError(
+      data_message_stanza.category(),
+      data_message_stanza.to(),
+      data_message_stanza.id());
   delegate_->OnMessageSendError(data_message_stanza.category(),
                                 send_error_details);
 }
diff --git a/google_apis/gcm/gcm_client_impl.h b/google_apis/gcm/gcm_client_impl.h
index 7458c70..8df1ada 100644
--- a/google_apis/gcm/gcm_client_impl.h
+++ b/google_apis/gcm/gcm_client_impl.h
@@ -19,6 +19,8 @@
 #include "google_apis/gcm/engine/registration_request.h"
 #include "google_apis/gcm/engine/unregistration_request.h"
 #include "google_apis/gcm/gcm_client.h"
+#include "google_apis/gcm/monitoring/gcm_stats_recorder.h"
+#include "google_apis/gcm/protocol/android_checkin.pb.h"
 #include "google_apis/gcm/protocol/checkin.pb.h"
 #include "net/base/net_log.h"
 #include "net/url_request/url_request_context_getter.h"
@@ -27,8 +29,13 @@
 
 namespace base {
 class Clock;
+class Time;
 }  // namespace base
 
+namespace mcs_proto {
+class DataMessageStanza;
+}  // namespace mcs_proto
+
 namespace net {
 class HttpNetworkSession;
 }  // namespace net
@@ -38,6 +45,7 @@
 class CheckinRequest;
 class ConnectionFactory;
 class GCMClientImplTest;
+class GServicesSettings;
 
 // Helper class for building GCM internals. Allows tests to inject fake versions
 // as necessary.
@@ -51,7 +59,8 @@
       const std::string& version,
       base::Clock* clock,
       ConnectionFactory* connection_factory,
-      GCMStore* gcm_store);
+      GCMStore* gcm_store,
+      GCMStatsRecorder* recorder);
   virtual scoped_ptr<ConnectionFactory> BuildConnectionFactory(
       const std::vector<GURL>& endpoints,
       const net::BackoffEntry::Policy& backoff_policy,
@@ -86,6 +95,8 @@
   virtual void Send(const std::string& app_id,
                     const std::string& receiver_id,
                     const OutgoingMessage& message) OVERRIDE;
+  virtual void SetRecording(bool recording) OVERRIDE;
+  virtual void ClearActivityLogs() OVERRIDE;
   virtual GCMStatistics GetStatistics() const OVERRIDE;
 
  private:
@@ -167,9 +178,12 @@
   // Function also cleans up the pending checkin.
   void OnCheckinCompleted(
       const checkin_proto::AndroidCheckinResponse& checkin_response);
-  // Schedules next device checkin, based on |last_checkin_time| and
-  // checkin_interval specified in GServices settings.
-  void SchedulePeriodicCheckin(const base::Time& last_checkin_time);
+  // Schedules next periodic device checkin and makes sure there is at most one
+  // pending checkin at a time. This function is meant to be called after a
+  // successful checkin.
+  void SchedulePeriodicCheckin();
+  // Gets the time until next checkin.
+  base::TimeDelta GetTimeToNextCheckin() const;
   // Callback for setting last checkin time in the |gcm_store_|.
   void SetLastCheckinTimeCallback(bool success);
 
@@ -210,6 +224,9 @@
   // Builder for the GCM internals (mcs client, etc.).
   scoped_ptr<GCMInternalsBuilder> internals_builder_;
 
+  // Recorder that logs GCM activities.
+  GCMStatsRecorder recorder_;
+
   // State of the GCM Client Implementation.
   State state_;
 
@@ -256,6 +273,15 @@
   STLValueDeleter<PendingUnregistrationRequests>
       pending_unregistration_requests_deleter_;
 
+  // G-services settings that were provided by MCS.
+  scoped_ptr<GServicesSettings> gservices_settings_;
+
+  // Time of the last successful checkin.
+  base::Time last_checkin_time_;
+
+  // Factory for creating references when scheduling periodic checkin.
+  base::WeakPtrFactory<GCMClientImpl> periodic_checkin_ptr_factory_;
+
   // Factory for creating references in callbacks.
   base::WeakPtrFactory<GCMClientImpl> weak_ptr_factory_;
 
diff --git a/google_apis/gcm/gcm_client_impl_unittest.cc b/google_apis/gcm/gcm_client_impl_unittest.cc
index 709418c..948e725 100644
--- a/google_apis/gcm/gcm_client_impl_unittest.cc
+++ b/google_apis/gcm/gcm_client_impl_unittest.cc
@@ -8,12 +8,15 @@
 #include "base/files/scoped_temp_dir.h"
 #include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
-#include "base/test/simple_test_clock.h"
+#include "base/strings/string_number_conversions.h"
+#include "base/time/clock.h"
 #include "components/os_crypt/os_crypt_switches.h"
 #include "google_apis/gcm/base/mcs_message.h"
 #include "google_apis/gcm/base/mcs_util.h"
 #include "google_apis/gcm/engine/fake_connection_factory.h"
 #include "google_apis/gcm/engine/fake_connection_handler.h"
+#include "google_apis/gcm/engine/gservices_settings.h"
+#include "google_apis/gcm/monitoring/gcm_stats_recorder.h"
 #include "google_apis/gcm/protocol/android_checkin.pb.h"
 #include "google_apis/gcm/protocol/checkin.pb.h"
 #include "google_apis/gcm/protocol/mcs.pb.h"
@@ -38,6 +41,8 @@
 
 const uint64 kDeviceAndroidId = 54321;
 const uint64 kDeviceSecurityToken = 12345;
+const int64 kSettingsCheckinInterval = 3600;
+const char kSettingsDefaultDigest[] = "default_digest";
 const char kAppId[] = "app_id";
 const char kSender[] = "project_id";
 const char kSender2[] = "project_id2";
@@ -67,7 +72,8 @@
  public:
   FakeMCSClient(base::Clock* clock,
                 ConnectionFactory* connection_factory,
-                GCMStore* gcm_store);
+                GCMStore* gcm_store,
+                GCMStatsRecorder* recorder);
   virtual ~FakeMCSClient();
   virtual void Login(uint64 android_id, uint64 security_token) OVERRIDE;
   virtual void SendMessage(const MCSMessage& message) OVERRIDE;
@@ -88,8 +94,9 @@
 
 FakeMCSClient::FakeMCSClient(base::Clock* clock,
                              ConnectionFactory* connection_factory,
-                             GCMStore* gcm_store)
-    : MCSClient("", clock, connection_factory, gcm_store),
+                             GCMStore* gcm_store,
+                             GCMStatsRecorder* recorder)
+    : MCSClient("", clock, connection_factory, gcm_store, recorder),
       last_android_id_(0u),
       last_security_token_(0u),
       last_message_tag_(kNumProtoTypes) {
@@ -112,9 +119,44 @@
   }
 }
 
+class AutoAdvancingTestClock : public base::Clock {
+ public:
+  explicit AutoAdvancingTestClock(base::TimeDelta auto_increment_time_delta);
+  virtual ~AutoAdvancingTestClock();
+
+  virtual base::Time Now() OVERRIDE;
+  void Advance(TimeDelta delta);
+  int call_count() const { return call_count_; }
+
+ private:
+  int call_count_;
+  base::TimeDelta auto_increment_time_delta_;
+  base::Time now_;
+
+  DISALLOW_COPY_AND_ASSIGN(AutoAdvancingTestClock);
+};
+
+AutoAdvancingTestClock::AutoAdvancingTestClock(
+    base::TimeDelta auto_increment_time_delta)
+    : call_count_(0), auto_increment_time_delta_(auto_increment_time_delta) {
+}
+
+AutoAdvancingTestClock::~AutoAdvancingTestClock() {
+}
+
+base::Time AutoAdvancingTestClock::Now() {
+  call_count_++;
+  now_ += auto_increment_time_delta_;
+  return now_;
+}
+
+void AutoAdvancingTestClock::Advance(base::TimeDelta delta) {
+  now_ += delta;
+}
+
 class FakeGCMInternalsBuilder : public GCMInternalsBuilder {
  public:
-  FakeGCMInternalsBuilder();
+  FakeGCMInternalsBuilder(base::TimeDelta clock_step);
   virtual ~FakeGCMInternalsBuilder();
 
   virtual scoped_ptr<base::Clock> BuildClock() OVERRIDE;
@@ -122,30 +164,38 @@
       const std::string& version,
       base::Clock* clock,
       ConnectionFactory* connection_factory,
-      GCMStore* gcm_store) OVERRIDE;
+      GCMStore* gcm_store,
+      GCMStatsRecorder* recorder) OVERRIDE;
   virtual scoped_ptr<ConnectionFactory> BuildConnectionFactory(
       const std::vector<GURL>& endpoints,
       const net::BackoffEntry::Policy& backoff_policy,
       scoped_refptr<net::HttpNetworkSession> network_session,
       net::NetLog* net_log) OVERRIDE;
+
+ private:
+  base::TimeDelta clock_step_;
 };
 
-FakeGCMInternalsBuilder::FakeGCMInternalsBuilder() {}
+FakeGCMInternalsBuilder::FakeGCMInternalsBuilder(base::TimeDelta clock_step)
+    : clock_step_(clock_step) {
+}
 
 FakeGCMInternalsBuilder::~FakeGCMInternalsBuilder() {}
 
 scoped_ptr<base::Clock> FakeGCMInternalsBuilder::BuildClock() {
-  return make_scoped_ptr<base::Clock>(new base::SimpleTestClock());
+  return make_scoped_ptr<base::Clock>(new AutoAdvancingTestClock(clock_step_));
 }
 
 scoped_ptr<MCSClient> FakeGCMInternalsBuilder::BuildMCSClient(
     const std::string& version,
     base::Clock* clock,
     ConnectionFactory* connection_factory,
-    GCMStore* gcm_store) {
+    GCMStore* gcm_store,
+    GCMStatsRecorder* recorder) {
   return make_scoped_ptr<MCSClient>(new FakeMCSClient(clock,
                                                       connection_factory,
-                                                      gcm_store));
+                                                      gcm_store,
+                                                      recorder));
 }
 
 scoped_ptr<ConnectionFactory> FakeGCMInternalsBuilder::BuildConnectionFactory(
@@ -166,10 +216,13 @@
 
   virtual void SetUp() OVERRIDE;
 
-  void BuildGCMClient();
+  void BuildGCMClient(base::TimeDelta clock_step);
   void InitializeGCMClient();
   void ReceiveMessageFromMCS(const MCSMessage& message);
-  void CompleteCheckin(uint64 android_id, uint64 security_token);
+  void CompleteCheckin(uint64 android_id,
+                       uint64 security_token,
+                       const std::string& digest,
+                       const std::map<std::string, std::string>& settings);
   void CompleteRegistration(const std::string& registration_id);
   void CompleteUnregistration(const std::string& app_id);
 
@@ -226,18 +279,23 @@
     return last_error_details_;
   }
 
+  const GServicesSettings* gservices_settings() const {
+    return gcm_client_->gservices_settings_.get();
+  }
+
   int64 CurrentTime();
 
- private:
   // Tooling.
   void PumpLoop();
   void PumpLoopUntilIdle();
   void QuitLoop();
-
-  base::SimpleTestClock* clock() const {
-    return reinterpret_cast<base::SimpleTestClock*>(gcm_client_->clock_.get());
+  void InitializeLoop();
+  bool CreateUniqueTempDir();
+  AutoAdvancingTestClock* clock() const {
+    return reinterpret_cast<AutoAdvancingTestClock*>(gcm_client_->clock_.get());
   }
 
+ private:
   // Variables used for verification.
   LastEvent last_event_;
   std::string last_app_id_;
@@ -273,11 +331,14 @@
   base::CommandLine::ForCurrentProcess()->AppendSwitch(
       os_crypt::switches::kUseMockKeychain);
 #endif  // OS_MACOSX
-  ASSERT_TRUE(temp_directory_.CreateUniqueTempDir());
-  run_loop_.reset(new base::RunLoop);
-  BuildGCMClient();
+  ASSERT_TRUE(CreateUniqueTempDir());
+  InitializeLoop();
+  BuildGCMClient(base::TimeDelta());
   InitializeGCMClient();
-  CompleteCheckin(kDeviceAndroidId, kDeviceSecurityToken);
+  CompleteCheckin(kDeviceAndroidId,
+                  kDeviceSecurityToken,
+                  std::string(),
+                  std::map<std::string, std::string>());
 }
 
 void GCMClientImplTest::PumpLoop() {
@@ -295,18 +356,42 @@
     run_loop_->Quit();
 }
 
-void GCMClientImplTest::BuildGCMClient() {
-  gcm_client_.reset(new GCMClientImpl(
-      make_scoped_ptr<GCMInternalsBuilder>(new FakeGCMInternalsBuilder())));
+void GCMClientImplTest::InitializeLoop() {
+  run_loop_.reset(new base::RunLoop);
 }
 
-void GCMClientImplTest::CompleteCheckin(uint64 android_id,
-                                        uint64 security_token) {
+bool GCMClientImplTest::CreateUniqueTempDir() {
+  return temp_directory_.CreateUniqueTempDir();
+}
+
+void GCMClientImplTest::BuildGCMClient(base::TimeDelta clock_step) {
+  gcm_client_.reset(new GCMClientImpl(make_scoped_ptr<GCMInternalsBuilder>(
+      new FakeGCMInternalsBuilder(clock_step))));
+}
+
+void GCMClientImplTest::CompleteCheckin(
+    uint64 android_id,
+    uint64 security_token,
+    const std::string& digest,
+    const std::map<std::string, std::string>& settings) {
   checkin_proto::AndroidCheckinResponse response;
   response.set_stats_ok(true);
   response.set_android_id(android_id);
   response.set_security_token(security_token);
 
+  // For testing G-services settings.
+  if (!digest.empty()) {
+    response.set_digest(digest);
+    for (std::map<std::string, std::string>::const_iterator it =
+             settings.begin();
+         it != settings.end();
+         ++it) {
+      checkin_proto::GservicesSetting* setting = response.add_setting();
+      setting->set_name(it->first);
+      setting->set_value(it->second);
+    }
+  }
+
   std::string response_string;
   response.SerializeToString(&response_string);
 
@@ -469,7 +554,7 @@
   EXPECT_EQ(REGISTRATION_COMPLETED, last_event());
 
   // Recreate GCMClient in order to load from the persistent store.
-  BuildGCMClient();
+  BuildGCMClient(base::TimeDelta());
   InitializeGCMClient();
 
   EXPECT_TRUE(ExistsRegistration(kAppId));
@@ -596,4 +681,61 @@
             mcs_client()->last_data_message_stanza().app_data(0).value());
 }
 
+class GCMClientImplCheckinTest : public GCMClientImplTest {
+ public:
+  GCMClientImplCheckinTest();
+  virtual ~GCMClientImplCheckinTest();
+
+  virtual void SetUp() OVERRIDE;
+
+  std::map<std::string, std::string> GenerateSettings(int64 checkin_interval);
+};
+
+GCMClientImplCheckinTest::GCMClientImplCheckinTest() {
+}
+
+GCMClientImplCheckinTest::~GCMClientImplCheckinTest() {
+}
+
+void GCMClientImplCheckinTest::SetUp() {
+  testing::Test::SetUp();
+#if defined(OS_MACOSX)
+  base::CommandLine::ForCurrentProcess()->AppendSwitch(
+      os_crypt::switches::kUseMockKeychain);
+#endif  // OS_MACOSX
+  // Creating unique temp directory that will be used by GCMStore shared between
+  // GCM Client and G-services settings.
+  ASSERT_TRUE(CreateUniqueTempDir());
+  InitializeLoop();
+  // Time will be advancing one hour every time it is checked.
+  BuildGCMClient(base::TimeDelta::FromSeconds(3600LL));
+  InitializeGCMClient();
+}
+
+TEST_F(GCMClientImplCheckinTest, GServicesSettingsAfterInitialCheckin) {
+  std::map<std::string, std::string> settings;
+  settings["checkin_interval"] = base::Int64ToString(kSettingsCheckinInterval);
+  CompleteCheckin(
+      kDeviceAndroidId, kDeviceSecurityToken, kSettingsDefaultDigest, settings);
+  EXPECT_EQ(kSettingsCheckinInterval, gservices_settings()->checkin_interval());
+}
+
+// This test only checks that periodic checkin happens.
+TEST_F(GCMClientImplCheckinTest, PeriodicCheckin) {
+  std::map<std::string, std::string> settings;
+  // Interval is smaller than the clock step.
+  settings["checkin_interval"] = "1800";
+  settings["checkin_url"] = "http://alternative.url/checkin";
+  settings["gcm_hostname"] = "http://alternative.gcm.host";
+  settings["gcm_secure_port"] = "443";
+  settings["gcm_registration_url"] = "http://alternative.url/registration";
+  CompleteCheckin(
+      kDeviceAndroidId, kDeviceSecurityToken, kSettingsDefaultDigest, settings);
+  EXPECT_EQ(2, clock()->call_count());
+
+  PumpLoopUntilIdle();
+  CompleteCheckin(
+      kDeviceAndroidId, kDeviceSecurityToken, kSettingsDefaultDigest, settings);
+}
+
 }  // namespace gcm
diff --git a/google_apis/gcm/monitoring/gcm_stats_recorder.cc b/google_apis/gcm/monitoring/gcm_stats_recorder.cc
new file mode 100644
index 0000000..6e0cb48
--- /dev/null
+++ b/google_apis/gcm/monitoring/gcm_stats_recorder.cc
@@ -0,0 +1,150 @@
+// 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.
+
+#include "google_apis/gcm/monitoring/gcm_stats_recorder.h"
+
+#include <deque>
+#include <vector>
+
+#include "base/logging.h"
+#include "base/metrics/histogram.h"
+#include "base/strings/string_util.h"
+#include "base/strings/stringprintf.h"
+
+namespace gcm {
+
+const uint32 MAX_LOGGED_ACTIVITY_COUNT = 100;
+
+namespace {
+
+// Insert an itme to the front of deque while maintaining the size of the deque.
+// Overflow item is discarded.
+template <typename T>
+T* InsertCircularBuffer(std::deque<T>* q, const T& item) {
+  DCHECK(q);
+  q->push_front(item);
+  if (q->size() > MAX_LOGGED_ACTIVITY_COUNT) {
+    q->pop_back();
+  }
+  return &q->front();
+}
+
+// Helper for getting string representation of the MessageSendStatus enum.
+std::string GetMessageSendStatusString(
+    gcm::MCSClient::MessageSendStatus status) {
+  switch (status) {
+    case gcm::MCSClient::QUEUED:
+      return "QUEUED";
+    case gcm::MCSClient::SENT:
+      return "SENT";
+    case gcm::MCSClient::QUEUE_SIZE_LIMIT_REACHED:
+      return "QUEUE_SIZE_LIMIT_REACHED";
+    case gcm::MCSClient::APP_QUEUE_SIZE_LIMIT_REACHED:
+      return "APP_QUEUE_SIZE_LIMIT_REACHED";
+    case gcm::MCSClient::MESSAGE_TOO_LARGE:
+      return "MESSAGE_TOO_LARGE";
+    case gcm::MCSClient::NO_CONNECTION_ON_ZERO_TTL:
+      return "NO_CONNECTION_ON_ZERO_TTL";
+    case gcm::MCSClient::TTL_EXCEEDED:
+      return "TTL_EXCEEDED";
+    default:
+      NOTREACHED();
+      return "UNKNOWN";
+  }
+}
+
+}  // namespace
+
+GCMStatsRecorder::Activity::Activity()
+    : time(base::Time::Now()) {
+}
+
+GCMStatsRecorder::Activity::~Activity() {
+}
+
+GCMStatsRecorder::SendingActivity::SendingActivity() {
+}
+
+GCMStatsRecorder::SendingActivity::~SendingActivity() {
+}
+
+GCMStatsRecorder::GCMStatsRecorder() : is_recording_(false) {
+}
+
+GCMStatsRecorder::~GCMStatsRecorder() {
+}
+
+void GCMStatsRecorder::SetRecording(bool recording) {
+  is_recording_ = recording;
+}
+
+void GCMStatsRecorder::Clear() {
+  sending_activities_.clear();
+}
+
+void GCMStatsRecorder::CollectSendingActivities(
+    std::vector<SendingActivity>* activities) const {
+  activities->insert(activities->begin(),
+                     sending_activities_.begin(),
+                     sending_activities_.end());
+}
+
+void GCMStatsRecorder::RecordSending(const std::string& app_id,
+                                     const std::string& receiver_id,
+                                     const std::string& message_id,
+                                     const std::string& event,
+                                     const std::string& details) {
+  SendingActivity data;
+  SendingActivity* inserted_data = InsertCircularBuffer(
+      &sending_activities_, data);
+  inserted_data->app_id = app_id;
+  inserted_data->receiver_id = receiver_id;
+  inserted_data->message_id = message_id;
+  inserted_data->event = event;
+  inserted_data->details = details;
+}
+
+void GCMStatsRecorder::RecordDataSentToWire(
+    const std::string& app_id,
+    const std::string& receiver_id,
+    const std::string& message_id,
+    int queued) {
+  if (is_recording_) {
+    RecordSending(app_id, receiver_id, message_id, "Data msg sent to wire",
+                  base::StringPrintf("Msg queued for %d seconds", queued));
+  }
+}
+
+void GCMStatsRecorder::RecordNotifySendStatus(
+    const std::string& app_id,
+    const std::string& receiver_id,
+    const std::string& message_id,
+    gcm::MCSClient::MessageSendStatus status,
+    int byte_size,
+    int ttl) {
+  UMA_HISTOGRAM_ENUMERATION("GCM.SendMessageStatus", status,
+                            gcm::MCSClient::SEND_STATUS_COUNT);
+  if (is_recording_) {
+    RecordSending(
+        app_id,
+        receiver_id,
+        message_id,
+        base::StringPrintf("SEND status: %s",
+                           GetMessageSendStatusString(status).c_str()),
+        base::StringPrintf("Msg size: %d bytes, TTL: %d", byte_size, ttl));
+  }
+}
+
+void GCMStatsRecorder::RecordIncomingSendError(
+    const std::string& app_id,
+    const std::string& receiver_id,
+    const std::string& message_id) {
+  UMA_HISTOGRAM_COUNTS("GCM.IncomingSendErrors", 1);
+  if (is_recording_) {
+    RecordSending(app_id, receiver_id, message_id, "Received 'send error' msg",
+                  std::string());
+  }
+}
+
+}  // namespace gcm
diff --git a/google_apis/gcm/monitoring/gcm_stats_recorder.h b/google_apis/gcm/monitoring/gcm_stats_recorder.h
new file mode 100644
index 0000000..71b6c6a
--- /dev/null
+++ b/google_apis/gcm/monitoring/gcm_stats_recorder.h
@@ -0,0 +1,101 @@
+// 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.
+
+#ifndef GOOGLE_APIS_GCM_GCM_STATS_RECORDER_H_
+#define GOOGLE_APIS_GCM_GCM_STATS_RECORDER_H_
+
+#include <deque>
+#include <string>
+#include <vector>
+
+#include "base/time/time.h"
+#include "google_apis/gcm/base/gcm_export.h"
+#include "google_apis/gcm/engine/mcs_client.h"
+
+namespace gcm {
+
+// Records GCM internal stats and activities for debugging purpose. Recording
+// can be turned on/off by calling SetRecording(...) function. It is turned off
+// by default.
+// This class is not thread safe. It is meant to be owned by a gcm client
+// instance.
+class GCM_EXPORT GCMStatsRecorder {
+ public:
+  // Contains data that are common to all activity kinds below.
+  struct GCM_EXPORT Activity {
+    Activity();
+    virtual ~Activity();
+
+    base::Time time;
+    std::string event;    // A short description of the event.
+    std::string details;  // Any additional detail about the event.
+  };
+
+  // Contains relevant data of a send-message step.
+  struct GCM_EXPORT SendingActivity : Activity {
+    SendingActivity();
+    virtual ~SendingActivity();
+
+    std::string app_id;
+    std::string receiver_id;
+    std::string message_id;
+  };
+
+  GCMStatsRecorder();
+  virtual ~GCMStatsRecorder();
+
+  // Indicates whether the recorder is currently recording activities or not.
+  bool is_recording() const {
+    return is_recording_;
+  }
+
+  // Turns recording on/off.
+  void SetRecording(bool recording);
+
+  // Clear all recorded activities.
+  void Clear();
+
+  // Records that an outgoing data message was sent over the wire.
+  void RecordDataSentToWire(const std::string& app_id,
+                            const std::string& receiver_id,
+                            const std::string& message_id,
+                            int queued);
+  // Records that the MCS client sent a 'send status' notification to callback.
+  void RecordNotifySendStatus(const std::string& app_id,
+                              const std::string& receiver_id,
+                              const std::string& message_id,
+                              MCSClient::MessageSendStatus status,
+                              int byte_size,
+                              int ttl);
+  // Records that a 'send error' message was received.
+  void RecordIncomingSendError(const std::string& app_id,
+                               const std::string& receiver_id,
+                               const std::string& message_id);
+
+  // Records that a sending activity has occurred. It will be inserted to the
+  // front of a queue ao that entries in the queue had reverse chronological
+  // order.
+  void CollectSendingActivities(std::vector<SendingActivity>* activities) const;
+
+  const std::deque<SendingActivity>& sending_activities() const {
+    return sending_activities_;
+  }
+
+ protected:
+  void RecordSending(const std::string& app_id,
+                     const std::string& receiver_id,
+                     const std::string& message_id,
+                     const std::string& event,
+                     const std::string& details);
+
+  bool is_recording_;
+
+  std::deque<SendingActivity> sending_activities_;
+
+  DISALLOW_COPY_AND_ASSIGN(GCMStatsRecorder);
+};
+
+}  // namespace gcm
+
+#endif  // GOOGLE_APIS_GCM_GCM_STATS_RECORDER_H_
diff --git a/google_apis/gcm/monitoring/gcm_stats_recorder_unittest.cc b/google_apis/gcm/monitoring/gcm_stats_recorder_unittest.cc
new file mode 100644
index 0000000..488b31b
--- /dev/null
+++ b/google_apis/gcm/monitoring/gcm_stats_recorder_unittest.cc
@@ -0,0 +1,136 @@
+// 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.
+
+#include "google_apis/gcm/monitoring/gcm_stats_recorder.h"
+
+#include <deque>
+#include <string>
+
+#include "google_apis/gcm/engine/mcs_client.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace gcm {
+
+namespace {
+
+static const char kAppId[] = "app id 1";
+static const char kReceiverId[] = "receiver 1";
+static const char kMessageId[] = "message id 1";
+static const int kQueuedSec = 5;
+static const gcm::MCSClient::MessageSendStatus kMessageSendStatus =
+    gcm::MCSClient::QUEUED;
+static const int kByteSize = 99;
+static const int kTTL = 7;
+
+static const char kDataSentToWireEvent[] = "Data msg sent to wire";
+static const char kSentToWireDetails[] = "Msg queued for 5 seconds";
+static const char kNotifySendStatusEvent[] = "SEND status: QUEUED";
+static const char kNotifySendStatusDetails[] = "Msg size: 99 bytes, TTL: 7";
+static const char kIncomingSendErrorEvent[] = "Received 'send error' msg";
+static const char kIncomingSendErrorDetails[] = "";
+
+}  // namespace
+
+class GCMStatsRecorderTest : public testing::Test {
+ public:
+  GCMStatsRecorderTest();
+  virtual ~GCMStatsRecorderTest();
+  virtual void SetUp() OVERRIDE;
+
+  void VerifyRecordedSendingCount(int expected_count) {
+    EXPECT_EQ(expected_count,
+              static_cast<int>(recorder_.sending_activities().size()));
+  }
+
+  void VerifyDataSentToWire(const std::string& remark){
+    VerifyData(recorder_.sending_activities(),
+               kDataSentToWireEvent,
+               kSentToWireDetails,
+               remark);
+  }
+
+  void VerifyNotifySendStatus(const std::string& remark){
+    VerifyData(recorder_.sending_activities(),
+               kNotifySendStatusEvent,
+               kNotifySendStatusDetails,
+               remark);
+  }
+
+  void VerifyIncomingSendError(const std::string& remark){
+    VerifyData(recorder_.sending_activities(),
+               kIncomingSendErrorEvent,
+               kIncomingSendErrorDetails,
+               remark);
+  }
+
+ protected:
+  template <typename T>
+  void VerifyData(const std::deque<T>& queue, const std::string& event,
+                  const std::string& details, const std::string& remark) {
+    EXPECT_EQ(kAppId, queue.front().app_id) << remark;
+    EXPECT_EQ(kReceiverId, queue.front().receiver_id) << remark;
+    EXPECT_EQ(kMessageId, queue.front().message_id) << remark;
+    EXPECT_EQ(event, queue.front().event) << remark;
+    EXPECT_EQ(details, queue.front().details) << remark;
+  }
+
+  GCMStatsRecorder recorder_;
+};
+
+GCMStatsRecorderTest::GCMStatsRecorderTest(){
+}
+
+GCMStatsRecorderTest::~GCMStatsRecorderTest() {}
+
+void GCMStatsRecorderTest::SetUp(){
+  recorder_.SetRecording(true);
+}
+
+TEST_F(GCMStatsRecorderTest, StartStopRecordingTest) {
+  EXPECT_TRUE(recorder_.is_recording());
+  recorder_.RecordDataSentToWire(kAppId, kReceiverId, kMessageId, kQueuedSec);
+  VerifyRecordedSendingCount(1);
+  VerifyDataSentToWire("1st call");
+
+  recorder_.SetRecording(false);
+  EXPECT_FALSE(recorder_.is_recording());
+  recorder_.RecordDataSentToWire(kAppId, kReceiverId, kMessageId, kQueuedSec);
+  VerifyRecordedSendingCount(1);
+  VerifyDataSentToWire("2nd call");
+}
+
+TEST_F(GCMStatsRecorderTest, ClearLogTest) {
+  recorder_.RecordDataSentToWire(kAppId, kReceiverId, kMessageId, kQueuedSec);
+  VerifyRecordedSendingCount(1);
+  VerifyDataSentToWire("1st call");
+
+  recorder_.RecordNotifySendStatus(kAppId, kReceiverId, kMessageId,
+                                   kMessageSendStatus, kByteSize, kTTL);
+  VerifyRecordedSendingCount(2);
+  VerifyNotifySendStatus("2nd call");
+
+  recorder_.Clear();
+  VerifyRecordedSendingCount(0);
+}
+
+TEST_F(GCMStatsRecorderTest, RecordSendingTest) {
+  recorder_.RecordDataSentToWire(kAppId, kReceiverId, kMessageId, kQueuedSec);
+  VerifyRecordedSendingCount(1);
+  VerifyDataSentToWire("1st call");
+
+  recorder_.RecordNotifySendStatus(kAppId, kReceiverId, kMessageId,
+                                   kMessageSendStatus, kByteSize, kTTL);
+  VerifyRecordedSendingCount(2);
+  VerifyNotifySendStatus("2nd call");
+
+  recorder_.RecordIncomingSendError(kAppId, kReceiverId, kMessageId);
+  VerifyRecordedSendingCount(3);
+  VerifyIncomingSendError("3rd call");
+
+  recorder_.RecordDataSentToWire(kAppId, kReceiverId, kMessageId, kQueuedSec);
+  VerifyRecordedSendingCount(4);
+  VerifyDataSentToWire("4th call");
+}
+
+}  // namespace gcm
diff --git a/google_apis/gcm/tools/mcs_probe.cc b/google_apis/gcm/tools/mcs_probe.cc
index 038f3af..732585f 100644
--- a/google_apis/gcm/tools/mcs_probe.cc
+++ b/google_apis/gcm/tools/mcs_probe.cc
@@ -29,6 +29,7 @@
 #include "google_apis/gcm/engine/connection_factory_impl.h"
 #include "google_apis/gcm/engine/gcm_store_impl.h"
 #include "google_apis/gcm/engine/mcs_client.h"
+#include "google_apis/gcm/monitoring/gcm_stats_recorder.h"
 #include "net/base/host_mapping_rules.h"
 #include "net/base/net_log_logger.h"
 #include "net/cert/cert_verifier.h"
@@ -240,6 +241,7 @@
   scoped_refptr<net::HttpNetworkSession> network_session_;
   scoped_ptr<net::ProxyService> proxy_service_;
 
+  GCMStatsRecorder recorder_;
   scoped_ptr<GCMStore> gcm_store_;
   scoped_ptr<MCSClient> mcs_client_;
   scoped_ptr<CheckinRequest> checkin_request_;
@@ -306,7 +308,8 @@
   mcs_client_.reset(new MCSClient("probe",
                                   &clock_,
                                   connection_factory_.get(),
-                                  gcm_store_.get()));
+                                  gcm_store_.get(),
+                                  &recorder_));
   run_loop_.reset(new base::RunLoop());
   gcm_store_->Load(base::Bind(&MCSProbe::LoadCallback,
                               base::Unretained(this)));
diff --git a/google_apis/google_apis.gyp b/google_apis/google_apis.gyp
index be4d517..ec9c8c8 100644
--- a/google_apis/google_apis.gyp
+++ b/google_apis/google_apis.gyp
@@ -111,6 +111,8 @@
         'gaia/gaia_urls.h',
         'gaia/google_service_auth_error.cc',
         'gaia/google_service_auth_error.h',
+        'gaia/identity_provider.cc',
+        'gaia/identity_provider.h',
         'gaia/merge_session_helper.cc',
         'gaia/merge_session_helper.h',
         'gaia/oauth_request_signer.cc',
@@ -210,6 +212,8 @@
         'drive/test_util.h',
         'gaia/fake_gaia.cc',
         'gaia/fake_gaia.h',
+        'gaia/fake_identity_provider.cc',
+        'gaia/fake_identity_provider.h',
         'gaia/fake_oauth2_token_service.cc',
         'gaia/fake_oauth2_token_service.h',
         'gaia/mock_url_fetcher_factory.h',
diff --git a/google_apis/google_apis.target.darwin-arm.mk b/google_apis/google_apis.target.darwin-arm.mk
index 34e20a9..70a0cd4 100644
--- a/google_apis/google_apis.target.darwin-arm.mk
+++ b/google_apis/google_apis.target.darwin-arm.mk
@@ -47,6 +47,7 @@
 	google_apis/gaia/gaia_switches.cc \
 	google_apis/gaia/gaia_urls.cc \
 	google_apis/gaia/google_service_auth_error.cc \
+	google_apis/gaia/identity_provider.cc \
 	google_apis/gaia/merge_session_helper.cc \
 	google_apis/gaia/oauth_request_signer.cc \
 	google_apis/gaia/oauth2_access_token_fetcher.cc \
@@ -270,7 +271,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/google_apis/google_apis.target.darwin-mips.mk b/google_apis/google_apis.target.darwin-mips.mk
index 95696a8..6e3464d 100644
--- a/google_apis/google_apis.target.darwin-mips.mk
+++ b/google_apis/google_apis.target.darwin-mips.mk
@@ -47,6 +47,7 @@
 	google_apis/gaia/gaia_switches.cc \
 	google_apis/gaia/gaia_urls.cc \
 	google_apis/gaia/google_service_auth_error.cc \
+	google_apis/gaia/identity_provider.cc \
 	google_apis/gaia/merge_session_helper.cc \
 	google_apis/gaia/oauth_request_signer.cc \
 	google_apis/gaia/oauth2_access_token_fetcher.cc \
@@ -266,7 +267,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/google_apis/google_apis.target.darwin-x86.mk b/google_apis/google_apis.target.darwin-x86.mk
index 4f0e231..0862b7f 100644
--- a/google_apis/google_apis.target.darwin-x86.mk
+++ b/google_apis/google_apis.target.darwin-x86.mk
@@ -47,6 +47,7 @@
 	google_apis/gaia/gaia_switches.cc \
 	google_apis/gaia/gaia_urls.cc \
 	google_apis/gaia/google_service_auth_error.cc \
+	google_apis/gaia/identity_provider.cc \
 	google_apis/gaia/merge_session_helper.cc \
 	google_apis/gaia/oauth_request_signer.cc \
 	google_apis/gaia/oauth2_access_token_fetcher.cc \
@@ -266,7 +267,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/google_apis/google_apis.target.darwin-x86_64.mk b/google_apis/google_apis.target.darwin-x86_64.mk
index 293a1a8..425de89 100644
--- a/google_apis/google_apis.target.darwin-x86_64.mk
+++ b/google_apis/google_apis.target.darwin-x86_64.mk
@@ -47,6 +47,7 @@
 	google_apis/gaia/gaia_switches.cc \
 	google_apis/gaia/gaia_urls.cc \
 	google_apis/gaia/google_service_auth_error.cc \
+	google_apis/gaia/identity_provider.cc \
 	google_apis/gaia/merge_session_helper.cc \
 	google_apis/gaia/oauth_request_signer.cc \
 	google_apis/gaia/oauth2_access_token_fetcher.cc \
@@ -270,7 +271,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/google_apis/google_apis.target.linux-arm.mk b/google_apis/google_apis.target.linux-arm.mk
index 34e20a9..70a0cd4 100644
--- a/google_apis/google_apis.target.linux-arm.mk
+++ b/google_apis/google_apis.target.linux-arm.mk
@@ -47,6 +47,7 @@
 	google_apis/gaia/gaia_switches.cc \
 	google_apis/gaia/gaia_urls.cc \
 	google_apis/gaia/google_service_auth_error.cc \
+	google_apis/gaia/identity_provider.cc \
 	google_apis/gaia/merge_session_helper.cc \
 	google_apis/gaia/oauth_request_signer.cc \
 	google_apis/gaia/oauth2_access_token_fetcher.cc \
@@ -270,7 +271,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/google_apis/google_apis.target.linux-mips.mk b/google_apis/google_apis.target.linux-mips.mk
index 95696a8..6e3464d 100644
--- a/google_apis/google_apis.target.linux-mips.mk
+++ b/google_apis/google_apis.target.linux-mips.mk
@@ -47,6 +47,7 @@
 	google_apis/gaia/gaia_switches.cc \
 	google_apis/gaia/gaia_urls.cc \
 	google_apis/gaia/google_service_auth_error.cc \
+	google_apis/gaia/identity_provider.cc \
 	google_apis/gaia/merge_session_helper.cc \
 	google_apis/gaia/oauth_request_signer.cc \
 	google_apis/gaia/oauth2_access_token_fetcher.cc \
@@ -266,7 +267,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/google_apis/google_apis.target.linux-x86.mk b/google_apis/google_apis.target.linux-x86.mk
index 4f0e231..0862b7f 100644
--- a/google_apis/google_apis.target.linux-x86.mk
+++ b/google_apis/google_apis.target.linux-x86.mk
@@ -47,6 +47,7 @@
 	google_apis/gaia/gaia_switches.cc \
 	google_apis/gaia/gaia_urls.cc \
 	google_apis/gaia/google_service_auth_error.cc \
+	google_apis/gaia/identity_provider.cc \
 	google_apis/gaia/merge_session_helper.cc \
 	google_apis/gaia/oauth_request_signer.cc \
 	google_apis/gaia/oauth2_access_token_fetcher.cc \
@@ -266,7 +267,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/google_apis/google_apis.target.linux-x86_64.mk b/google_apis/google_apis.target.linux-x86_64.mk
index 293a1a8..425de89 100644
--- a/google_apis/google_apis.target.linux-x86_64.mk
+++ b/google_apis/google_apis.target.linux-x86_64.mk
@@ -47,6 +47,7 @@
 	google_apis/gaia/gaia_switches.cc \
 	google_apis/gaia/gaia_urls.cc \
 	google_apis/gaia/google_service_auth_error.cc \
+	google_apis/gaia/identity_provider.cc \
 	google_apis/gaia/merge_session_helper.cc \
 	google_apis/gaia/oauth_request_signer.cc \
 	google_apis/gaia/oauth2_access_token_fetcher.cc \
@@ -270,7 +271,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/GLES2/extensions/CHROMIUM/CHROMIUM_sync_query.txt b/gpu/GLES2/extensions/CHROMIUM/CHROMIUM_sync_query.txt
new file mode 100644
index 0000000..98763d0
--- /dev/null
+++ b/gpu/GLES2/extensions/CHROMIUM/CHROMIUM_sync_query.txt
@@ -0,0 +1,53 @@
+Name
+
+    CHROMIUM_sync_query
+
+Name Strings
+
+    GL_CHROMIUM_sync_query
+
+Version
+
+    Last Modifed Date: April 15, 2014
+
+Dependencies
+
+    OpenGL ES 2.0 is required.
+
+    EXT_occlusion_query_boolean is required.
+
+Overview
+
+    This extension provides a query mechanism that allow for synchronization
+    between the host CPU and the GPU, which may be accessing the same
+    resources (typically memory).
+
+    This extension is useful in conjunction with CHROMIUM_map_image to
+    determine when it is safe to access a mapped image. Once the result of
+    a COMMANDS_COMPLETED_CHROMIUM query is available, all drawing commands
+    issued before the query must have finished. This ensures that the memory
+    corresponding to the issued commands can be safely modified (assuming no
+    other outstanding drawing commands are issued subsequent to the query).
+
+New Procedures and Functions
+
+    None.
+
+Errors
+
+    None.
+
+New Tokens
+
+    Accepted by the <target> parameter of BeginQueryEXT, EndQueryEXT,
+    and GetQueryivEXT:
+
+        COMMANDS_COMPLETED_CHROMIUM                     0x84F7
+
+New State
+
+    None.
+
+Revision History
+
+    4/15/2014   Documented the extension
diff --git a/gpu/GLES2/gl2extchromium.h b/gpu/GLES2/gl2extchromium.h
index db4f12f..0bdf717 100644
--- a/gpu/GLES2/gl2extchromium.h
+++ b/gpu/GLES2/gl2extchromium.h
@@ -692,6 +692,15 @@
     GLfloat uv_height);
 #endif /* GL_CHROMIUM_schedule_overlay_plane */
 
+/* GL_CHROMIUM_sync_query */
+#ifndef GL_CHROMIUM_sync_query
+#define GL_CHROMIUM_sync_query 1
+
+#ifndef GL_COMMANDS_COMPLETED_CHROMIUM
+#define GL_COMMANDS_COMPLETED_CHROMIUM 0x84F7
+#endif
+#endif  /* GL_CHROMIUM_sync_query */
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/gpu/command_buffer/build_gles2_cmd_buffer.py b/gpu/command_buffer/build_gles2_cmd_buffer.py
index 84d70c0..7105edf 100755
--- a/gpu/command_buffer/build_gles2_cmd_buffer.py
+++ b/gpu/command_buffer/build_gles2_cmd_buffer.py
@@ -841,6 +841,7 @@
       'GL_LATENCY_QUERY_CHROMIUM',
       'GL_ASYNC_PIXEL_UNPACK_COMPLETED_CHROMIUM',
       'GL_ASYNC_PIXEL_PACK_COMPLETED_CHROMIUM',
+      'GL_COMMANDS_COMPLETED_CHROMIUM',
     ],
   },
   'RenderBufferParameter': {
diff --git a/gpu/command_buffer/client/cmd_buffer_helper.cc b/gpu/command_buffer/client/cmd_buffer_helper.cc
index d8ca823..080aa6b 100644
--- a/gpu/command_buffer/client/cmd_buffer_helper.cc
+++ b/gpu/command_buffer/client/cmd_buffer_helper.cc
@@ -105,20 +105,11 @@
   ring_buffer_ = buffer;
   ring_buffer_id_ = id;
   command_buffer_->SetGetBuffer(id);
-
-  // TODO(gman): Do we really need to call GetState here? We know get & put = 0
-  // Also do we need to check state.num_entries?
-  CommandBuffer::State state = command_buffer_->GetState();
   entries_ = static_cast<CommandBufferEntry*>(ring_buffer_->memory());
-  int32 num_ring_buffer_entries =
-      ring_buffer_size_ / sizeof(CommandBufferEntry);
-  if (num_ring_buffer_entries > state.num_entries) {
-    ClearUsable();
-    return false;
-  }
-
-  total_entry_count_ = num_ring_buffer_entries;
-  put_ = state.put_offset;
+  total_entry_count_ = ring_buffer_size_ / sizeof(CommandBufferEntry);
+  // Call to SetGetBuffer(id) above resets get and put offsets to 0.
+  // No need to query it through IPC.
+  put_ = 0;
   CalcImmediateEntries(0);
   return true;
 }
diff --git a/gpu/command_buffer/client/gl_in_process_context.h b/gpu/command_buffer/client/gl_in_process_context.h
index be91cfd..60a1665 100644
--- a/gpu/command_buffer/client/gl_in_process_context.h
+++ b/gpu/command_buffer/client/gl_in_process_context.h
@@ -7,7 +7,7 @@
 
 #include "base/callback.h"
 #include "base/compiler_specific.h"
-#include "gles2_impl_export.h"
+#include "gl_in_process_context_export.h"
 #include "gpu/command_buffer/service/in_process_command_buffer.h"
 #include "ui/gfx/native_widget_types.h"
 #include "ui/gl/gl_surface.h"
@@ -30,7 +30,7 @@
 }
 
 // The default uninitialized value is -1.
-struct GLES2_IMPL_EXPORT GLInProcessContextAttribs {
+struct GL_IN_PROCESS_CONTEXT_EXPORT GLInProcessContextAttribs {
   GLInProcessContextAttribs();
 
   int32 alpha_size;
@@ -45,7 +45,7 @@
   int32 lose_context_when_out_of_memory;
 };
 
-class GLES2_IMPL_EXPORT GLInProcessContext {
+class GL_IN_PROCESS_CONTEXT_EXPORT GLInProcessContext {
  public:
   virtual ~GLInProcessContext() {}
 
diff --git a/gpu/command_buffer/client/gl_in_process_context_export.h b/gpu/command_buffer/client/gl_in_process_context_export.h
new file mode 100644
index 0000000..36c4a34
--- /dev/null
+++ b/gpu/command_buffer/client/gl_in_process_context_export.h
@@ -0,0 +1,29 @@
+// 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.
+
+#ifndef GL_IN_PROCESS_CONTEXT_EXPORT_H_
+#define GL_IN_PROCESS_CONTEXT_EXPORT_H_
+
+#if defined(COMPONENT_BUILD)
+#if defined(WIN32)
+
+#if defined(GL_IN_PROCESS_CONTEXT_IMPLEMENTATION)
+#define GL_IN_PROCESS_CONTEXT_EXPORT __declspec(dllexport)
+#else
+#define GL_IN_PROCESS_CONTEXT_EXPORT __declspec(dllimport)
+#endif  // defined(GL_IN_PROCESS_CONTEXT_IMPLEMENTATION)
+
+#else  // defined(WIN32)
+#if defined(GL_IN_PROCESS_CONTEXT_IMPLEMENTATION)
+#define GL_IN_PROCESS_CONTEXT_EXPORT __attribute__((visibility("default")))
+#else
+#define GL_IN_PROCESS_CONTEXT_EXPORT
+#endif
+#endif
+
+#else  // defined(COMPONENT_BUILD)
+#define GL_IN_PROCESS_CONTEXT_EXPORT
+#endif
+
+#endif  // GL_IN_PROCESS_CONTEXT_EXPORT_H_
diff --git a/gpu/command_buffer/client/gles2_implementation_unittest.cc b/gpu/command_buffer/client/gles2_implementation_unittest.cc
index a280e4f..cb7f6bd 100644
--- a/gpu/command_buffer/client/gles2_implementation_unittest.cc
+++ b/gpu/command_buffer/client/gles2_implementation_unittest.cc
@@ -2906,9 +2906,6 @@
   EXPECT_TRUE(NoCommandsWritten());
   EXPECT_EQ(GL_INVALID_OPERATION, CheckError());
 
-  // Test BeginQueryEXT fails if id not GENed.
-  // TODO(gman):
-
   // Test BeginQueryEXT inserts command.
   struct BeginCmds {
     cmds::BeginQueryEXT begin_query;
@@ -2996,7 +2993,6 @@
   // Test GetQueryObjectuivEXT CheckResultsAvailable
   ClearCommands();
   gl_->GetQueryObjectuivEXT(id1, GL_QUERY_RESULT_AVAILABLE_EXT, &available);
-  EXPECT_TRUE(NoCommandsWritten());
   EXPECT_EQ(0u, available);
 }
 
diff --git a/gpu/command_buffer/client/query_tracker.cc b/gpu/command_buffer/client/query_tracker.cc
index 5ac89e0..6395c04 100644
--- a/gpu/command_buffer/client/query_tracker.cc
+++ b/gpu/command_buffer/client/query_tracker.cc
@@ -93,7 +93,7 @@
       state_(kUninitialized),
       submit_count_(0),
       token_(0),
-      flushed_(false),
+      flush_count_(0),
       client_begin_time_us_(0),
       result_(0) {
     }
@@ -140,6 +140,7 @@
       }
     }
   }
+  flush_count_ = gl->helper()->flush_generation();
   gl->helper()->EndQueryEXT(target(), submit_count());
   MarkAsPending(gl->helper()->InsertToken());
 }
@@ -168,12 +169,7 @@
       }
       state_ = kComplete;
     } else {
-      if (!flushed_) {
-        // TODO(gman): We could reduce the number of flushes by having a
-        // flush count, recording that count at the time we insert the
-        // EndQuery command and then only flushing here if we've have not
-        // passed that count yet.
-        flushed_ = true;
+      if ((helper->flush_generation() - flush_count_ - 1) >= 0x80000000) {
         helper->Flush();
       } else {
         // Insert no-ops so that eventually the GPU process will see more work.
diff --git a/gpu/command_buffer/client/query_tracker.h b/gpu/command_buffer/client/query_tracker.h
index 219f186..72e29e7 100644
--- a/gpu/command_buffer/client/query_tracker.h
+++ b/gpu/command_buffer/client/query_tracker.h
@@ -113,7 +113,6 @@
     void MarkAsPending(int32 token) {
       token_ = token;
       state_ = kPending;
-      flushed_ = false;
     }
 
     base::subtle::Atomic32 submit_count() const { return submit_count_; }
@@ -147,7 +146,7 @@
     State state_;
     base::subtle::Atomic32 submit_count_;
     int32 token_;
-    bool flushed_;
+    uint32 flush_count_;
     uint64 client_begin_time_us_; // Only used for latency query target.
     uint32 result_;
   };
diff --git a/gpu/command_buffer/client/query_tracker_unittest.cc b/gpu/command_buffer/client/query_tracker_unittest.cc
index 0820a99..cd2ccf6 100644
--- a/gpu/command_buffer/client/query_tracker_unittest.cc
+++ b/gpu/command_buffer/client/query_tracker_unittest.cc
@@ -107,6 +107,8 @@
     return query->info_.bucket;
   }
 
+  uint32 GetFlushGeneration() { return helper_->flush_generation(); }
+
   scoped_ptr<CommandBuffer> command_buffer_;
   scoped_ptr<GLES2CmdHelper> helper_;
   scoped_ptr<MappedMemoryManager> mapped_memory_;
@@ -164,6 +166,27 @@
   EXPECT_FALSE(query->NeverUsed());
   EXPECT_TRUE(query->Pending());
 
+  // Flush only once if no more flushes happened between a call to
+  // EndQuery command and CheckResultsAvailable
+  // Advance put_ so flush calls in CheckResultsAvailable go through
+  // and updates flush_generation count
+  helper_->Noop(1);
+  // Set Query in pending state_ to simulate EndQuery command is called
+  query->MarkAsPending(kToken);
+  EXPECT_TRUE(query->Pending());
+  // Store FlushGeneration count after EndQuery is called
+  uint32 gen1 = GetFlushGeneration();
+  EXPECT_FALSE(query->CheckResultsAvailable(helper_.get()));
+  uint32 gen2 = GetFlushGeneration();
+  EXPECT_NE(gen1, gen2);
+  // Repeated calls to CheckResultsAvailable should not flush unnecessarily
+  EXPECT_FALSE(query->CheckResultsAvailable(helper_.get()));
+  gen1 = GetFlushGeneration();
+  EXPECT_EQ(gen1, gen2);
+  EXPECT_FALSE(query->CheckResultsAvailable(helper_.get()));
+  gen1 = GetFlushGeneration();
+  EXPECT_EQ(gen1, gen2);
+
   // Simulate GPU process marking it as available.
   QuerySync* sync = GetSync(query);
   sync->process_count = query->submit_count();
diff --git a/gpu/command_buffer/common/capabilities.cc b/gpu/command_buffer/common/capabilities.cc
index 9f35c82..efc63eb 100644
--- a/gpu/command_buffer/common/capabilities.cc
+++ b/gpu/command_buffer/common/capabilities.cc
@@ -17,6 +17,7 @@
       texture_usage(false),
       texture_storage(false),
       discard_framebuffer(false),
+      sync_query(false),
       map_image(false) {}
 
 }  // namespace gpu
diff --git a/gpu/command_buffer/common/capabilities.h b/gpu/command_buffer/common/capabilities.h
index b6c34da..81e3d55 100644
--- a/gpu/command_buffer/common/capabilities.h
+++ b/gpu/command_buffer/common/capabilities.h
@@ -20,6 +20,7 @@
   bool texture_usage;
   bool texture_storage;
   bool discard_framebuffer;
+  bool sync_query;
 
   // Capabilities below are not populated by GLES2Decoder.
   bool map_image;
diff --git a/gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h b/gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h
index 62f1c30..e9f4f69 100644
--- a/gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h
+++ b/gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h
@@ -179,6 +179,7 @@
     {0x84F4, "GL_FENCE_CONDITION_NV", },
     {0x8366, "GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT", },
     {0x8365, "GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT", },
+    {0x84F7, "GL_COMMANDS_COMPLETED_CHROMIUM", },
     {0x881E, "GL_LUMINANCE16F_EXT", },
     {0x84FA, "GL_UNSIGNED_INT_24_8_OES", },
     {0x881F, "GL_LUMINANCE_ALPHA16F_EXT", },
@@ -353,6 +354,7 @@
     {0x8C93, "GL_ATC_RGBA_EXPLICIT_ALPHA_AMD", },
     {0x00000002, "GL_CONTEXT_FLAG_DEBUG_BIT_KHR", },
     {0x00000001, "GL_SYNC_FLUSH_COMMANDS_BIT_APPLE", },
+    {0x9248, "GL_OVERLAY_TRANSFORM_ROTATE_90_CHROMIUM", },
     {0x00000004, "GL_COLOR_BUFFER_BIT2_QCOM", },
     {0x1702, "GL_TEXTURE", },
     {0x00000008, "GL_COLOR_BUFFER_BIT3_QCOM", },
@@ -385,6 +387,7 @@
     {0x8DF6, "GL_UNSIGNED_INT_10_10_10_2_OES", },
     {0x8230, "GL_RG32F_EXT", },
     {0x8DF7, "GL_INT_10_10_10_2_OES", },
+    {0x9246, "GL_OVERLAY_TRANSFORM_FLIP_HORIZONTAL_CHROMIUM", },
     {0x8B69, "GL_FLOAT_MAT4x2_NV", },
     {0x812D, "GL_CLAMP_TO_BORDER_NV", },
     {0x812F, "GL_CLAMP_TO_EDGE", },
@@ -604,8 +607,11 @@
     {0x1F02, "GL_VERSION", },
     {0x1F01, "GL_RENDERER", },
     {0x1F00, "GL_VENDOR", },
+    {0x9247, "GL_OVERLAY_TRANSFORM_FLIP_VERTICAL_CHROMIUM", },
     {0x2701, "GL_LINEAR_MIPMAP_NEAREST", },
+    {0x9245, "GL_OVERLAY_TRANSFORM_NONE_CHROMIUM", },
     {0x92B4, "GL_INVERT_OVG_NV", },
+    {0x9249, "GL_OVERLAY_TRANSFORM_ROTATE_180_CHROMIUM", },
     {0x0B94, "GL_STENCIL_FAIL", },
     {0x8B4C, "GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS", },
     {0x8B4D, "GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS", },
@@ -634,6 +640,7 @@
     {0x1004, "GL_TEXTURE_BORDER_COLOR_NV", },
     {0x8B48, "GL_SHADER_OBJECT_EXT", },
     {0x912F, "GL_TEXTURE_IMMUTABLE_FORMAT_EXT", },
+    {0x924A, "GL_OVERLAY_TRANSFORM_ROTATE_270_CHROMIUM", },
     {0x20000000, "GL_MULTISAMPLE_BUFFER_BIT5_QCOM", },
     {0x0DE1, "GL_TEXTURE_2D", },
     {0x80C9, "GL_BLEND_SRC_RGB", },
@@ -1163,7 +1170,8 @@
       {GL_ASYNC_PIXEL_UNPACK_COMPLETED_CHROMIUM,
        "GL_ASYNC_PIXEL_UNPACK_COMPLETED_CHROMIUM"},
       {GL_ASYNC_PIXEL_PACK_COMPLETED_CHROMIUM,
-       "GL_ASYNC_PIXEL_PACK_COMPLETED_CHROMIUM"}, };
+       "GL_ASYNC_PIXEL_PACK_COMPLETED_CHROMIUM"},
+      {GL_COMMANDS_COMPLETED_CHROMIUM, "GL_COMMANDS_COMPLETED_CHROMIUM"}, };
   return GLES2Util::GetQualifiedEnumString(
       string_table, arraysize(string_table), value);
 }
diff --git a/gpu/command_buffer/gles2_utils.target.darwin-arm.mk b/gpu/command_buffer/gles2_utils.target.darwin-arm.mk
index 7ce59ea..ed4442a 100644
--- a/gpu/command_buffer/gles2_utils.target.darwin-arm.mk
+++ b/gpu/command_buffer/gles2_utils.target.darwin-arm.mk
@@ -226,7 +226,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/command_buffer/gles2_utils.target.darwin-mips.mk b/gpu/command_buffer/gles2_utils.target.darwin-mips.mk
index 92a020d..51d09c7 100644
--- a/gpu/command_buffer/gles2_utils.target.darwin-mips.mk
+++ b/gpu/command_buffer/gles2_utils.target.darwin-mips.mk
@@ -222,7 +222,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/command_buffer/gles2_utils.target.darwin-x86.mk b/gpu/command_buffer/gles2_utils.target.darwin-x86.mk
index f865de6..7ed5b6a 100644
--- a/gpu/command_buffer/gles2_utils.target.darwin-x86.mk
+++ b/gpu/command_buffer/gles2_utils.target.darwin-x86.mk
@@ -224,7 +224,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/command_buffer/gles2_utils.target.darwin-x86_64.mk b/gpu/command_buffer/gles2_utils.target.darwin-x86_64.mk
index 1f838d2..b785282 100644
--- a/gpu/command_buffer/gles2_utils.target.darwin-x86_64.mk
+++ b/gpu/command_buffer/gles2_utils.target.darwin-x86_64.mk
@@ -224,7 +224,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/command_buffer/gles2_utils.target.linux-arm.mk b/gpu/command_buffer/gles2_utils.target.linux-arm.mk
index 7ce59ea..ed4442a 100644
--- a/gpu/command_buffer/gles2_utils.target.linux-arm.mk
+++ b/gpu/command_buffer/gles2_utils.target.linux-arm.mk
@@ -226,7 +226,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/command_buffer/gles2_utils.target.linux-mips.mk b/gpu/command_buffer/gles2_utils.target.linux-mips.mk
index 92a020d..51d09c7 100644
--- a/gpu/command_buffer/gles2_utils.target.linux-mips.mk
+++ b/gpu/command_buffer/gles2_utils.target.linux-mips.mk
@@ -222,7 +222,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/command_buffer/gles2_utils.target.linux-x86.mk b/gpu/command_buffer/gles2_utils.target.linux-x86.mk
index f865de6..7ed5b6a 100644
--- a/gpu/command_buffer/gles2_utils.target.linux-x86.mk
+++ b/gpu/command_buffer/gles2_utils.target.linux-x86.mk
@@ -224,7 +224,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/command_buffer/gles2_utils.target.linux-x86_64.mk b/gpu/command_buffer/gles2_utils.target.linux-x86_64.mk
index 1f838d2..b785282 100644
--- a/gpu/command_buffer/gles2_utils.target.linux-x86_64.mk
+++ b/gpu/command_buffer/gles2_utils.target.linux-x86_64.mk
@@ -224,7 +224,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/command_buffer/service/async_pixel_transfer_delegate.h b/gpu/command_buffer/service/async_pixel_transfer_delegate.h
index 47d71d8..b41bcd5 100644
--- a/gpu/command_buffer/service/async_pixel_transfer_delegate.h
+++ b/gpu/command_buffer/service/async_pixel_transfer_delegate.h
@@ -21,8 +21,6 @@
 
 namespace gpu {
 
-class ScopedSafeSharedMemory;
-
 struct AsyncTexImage2DParams {
   GLenum target;
   GLint level;
diff --git a/gpu/command_buffer/service/async_pixel_transfer_manager.cc b/gpu/command_buffer/service/async_pixel_transfer_manager.cc
index 3084dd6..efc893a 100644
--- a/gpu/command_buffer/service/async_pixel_transfer_manager.cc
+++ b/gpu/command_buffer/service/async_pixel_transfer_manager.cc
@@ -17,6 +17,12 @@
 AsyncPixelTransferManager::~AsyncPixelTransferManager() {
   if (manager_)
     manager_->RemoveObserver(this);
+
+  for (TextureToDelegateMap::iterator ref = delegate_map_.begin();
+       ref != delegate_map_.end();
+       ref++) {
+    ref->first->RemoveObserver();
+  }
 }
 
 void AsyncPixelTransferManager::Initialize(gles2::TextureManager* manager) {
@@ -32,6 +38,7 @@
   AsyncPixelTransferDelegate* delegate =
       CreatePixelTransferDelegateImpl(ref, define_params);
   delegate_map_[ref] = make_linked_ptr(delegate);
+  ref->AddObserver();
   return delegate;
 }
 
@@ -49,8 +56,10 @@
 void AsyncPixelTransferManager::ClearPixelTransferDelegateForTest(
     gles2::TextureRef* ref) {
   TextureToDelegateMap::iterator it = delegate_map_.find(ref);
-  if (it != delegate_map_.end())
+  if (it != delegate_map_.end()) {
     delegate_map_.erase(it);
+    ref->RemoveObserver();
+  }
 }
 
 bool AsyncPixelTransferManager::AsyncTransferIsInProgress(
@@ -69,8 +78,10 @@
 void AsyncPixelTransferManager::OnTextureRefDestroying(
     gles2::TextureRef* texture) {
   TextureToDelegateMap::iterator it = delegate_map_.find(texture);
-  if (it != delegate_map_.end())
+  if (it != delegate_map_.end()) {
     delegate_map_.erase(it);
+    texture->RemoveObserver();
+  }
 }
 
 }  // namespace gpu
diff --git a/gpu/command_buffer/service/context_group.cc b/gpu/command_buffer/service/context_group.cc
index fb97daf..ba0437b 100644
--- a/gpu/command_buffer/service/context_group.cc
+++ b/gpu/command_buffer/service/context_group.cc
@@ -223,18 +223,24 @@
     return false;
   }
 
-  // TODO(gman): Use workarounds similar to max_texture_size above to implement.
-  if (gfx::GetGLImplementation() == gfx::kGLImplementationOSMesaGL) {
-    // Some shaders in Skia needed more than the min.
-    max_fragment_uniform_vectors_ =
-       std::min(static_cast<uint32>(kMinFragmentUniformVectors * 2),
-                max_fragment_uniform_vectors_);
-    max_varying_vectors_ =
-       std::min(static_cast<uint32>(kMinVaryingVectors * 2),
-                max_varying_vectors_);
+  // Some shaders in Skia need more than the min available vertex and
+  // fragment shader uniform vectors in case of OSMesa GL Implementation
+  if (feature_info_->workarounds().max_fragment_uniform_vectors) {
+    max_fragment_uniform_vectors_ = std::min(
+        max_fragment_uniform_vectors_,
+        static_cast<uint32>(
+            feature_info_->workarounds().max_fragment_uniform_vectors));
+  }
+  if (feature_info_->workarounds().max_varying_vectors) {
+    max_varying_vectors_ = std::min(
+        max_varying_vectors_,
+        static_cast<uint32>(feature_info_->workarounds().max_varying_vectors));
+  }
+  if (feature_info_->workarounds().max_vertex_uniform_vectors) {
     max_vertex_uniform_vectors_ =
-       std::min(static_cast<uint32>(kMinVertexUniformVectors * 2),
-                max_vertex_uniform_vectors_);
+        std::min(max_vertex_uniform_vectors_,
+                 static_cast<uint32>(
+                     feature_info_->workarounds().max_vertex_uniform_vectors));
   }
 
   program_manager_.reset(new ProgramManager(
diff --git a/gpu/command_buffer/service/context_state.cc b/gpu/command_buffer/service/context_state.cc
index 6c81655..2eb3f99 100644
--- a/gpu/command_buffer/service/context_state.cc
+++ b/gpu/command_buffer/service/context_state.cc
@@ -188,29 +188,87 @@
     glBindTexture(target, GetServiceId(texture_unit, target));
 }
 
-void ContextState::RestoreAttribute(GLuint attrib_index) const {
-  const VertexAttrib* attrib =
-      vertex_attrib_manager->GetVertexAttrib(attrib_index);
-  const void* ptr = reinterpret_cast<const void*>(attrib->offset());
-  Buffer* buffer = attrib->buffer();
-  glBindBuffer(GL_ARRAY_BUFFER, buffer ? buffer->service_id() : 0);
-  glVertexAttribPointer(
-      attrib_index, attrib->size(), attrib->type(), attrib->normalized(),
-      attrib->gl_stride(), ptr);
-  if (attrib->divisor())
-    glVertexAttribDivisorANGLE(attrib_index, attrib->divisor());
-  // Never touch vertex attribute 0's state (in particular, never
-  // disable it) when running on desktop GL because it will never be
-  // re-enabled.
-  if (attrib_index != 0 ||
-      gfx::GetGLImplementation() == gfx::kGLImplementationEGLGLES2) {
-    if (attrib->enabled()) {
-      glEnableVertexAttribArray(attrib_index);
-    } else {
-      glDisableVertexAttribArray(attrib_index);
+void ContextState::RestoreVertexAttribValues() const {
+  for (size_t attrib = 0; attrib < vertex_attrib_manager->num_attribs();
+       ++attrib) {
+    glVertexAttrib4fv(attrib, attrib_values[attrib].v);
+  }
+}
+
+void ContextState::RestoreVertexAttribArrays(
+    const scoped_refptr<VertexAttribManager> attrib_manager) const {
+  // This is expected to be called only for VAO with service_id 0,
+  // either to restore the default VAO or a virtual VAO with service_id 0.
+  GLuint vao_service_id = attrib_manager->service_id();
+  DCHECK(vao_service_id == 0);
+
+  // Bind VAO if supported.
+  if (feature_info_->feature_flags().native_vertex_array_object)
+    glBindVertexArrayOES(vao_service_id);
+
+  // Restore vertex attrib arrays.
+  for (size_t attrib_index = 0; attrib_index < attrib_manager->num_attribs();
+       ++attrib_index) {
+    const VertexAttrib* attrib = attrib_manager->GetVertexAttrib(attrib_index);
+
+    // Restore vertex array.
+    Buffer* buffer = attrib->buffer();
+    GLuint buffer_service_id = buffer ? buffer->service_id() : 0;
+    glBindBuffer(GL_ARRAY_BUFFER, buffer_service_id);
+    const void* ptr = reinterpret_cast<const void*>(attrib->offset());
+    glVertexAttribPointer(attrib_index,
+                          attrib->size(),
+                          attrib->type(),
+                          attrib->normalized(),
+                          attrib->gl_stride(),
+                          ptr);
+
+    // Restore attrib divisor if supported.
+    if (feature_info_->feature_flags().angle_instanced_arrays)
+      glVertexAttribDivisorANGLE(attrib_index, attrib->divisor());
+
+    // Never touch vertex attribute 0's state (in particular, never
+    // disable it) when running on desktop GL because it will never be
+    // re-enabled.
+    if (attrib_index != 0 ||
+        gfx::GetGLImplementation() == gfx::kGLImplementationEGLGLES2) {
+      if (attrib->enabled()) {
+        glEnableVertexAttribArray(attrib_index);
+      } else {
+        glDisableVertexAttribArray(attrib_index);
+      }
     }
   }
-  glVertexAttrib4fv(attrib_index, attrib_values[attrib_index].v);
+}
+
+void ContextState::RestoreVertexAttribs() const {
+  // Restore Vertex Attrib Arrays
+  // TODO: This if should not be needed. RestoreState is getting called
+  // before GLES2Decoder::Initialize which is a bug.
+  if (vertex_attrib_manager.get()) {
+    // Restore VAOs.
+    if (feature_info_->feature_flags().native_vertex_array_object) {
+      // If default VAO is still using shared id 0 instead of unique ids
+      // per-context, default VAO state must be restored.
+      GLuint default_vao_service_id =
+          default_vertex_attrib_manager->service_id();
+      if (default_vao_service_id == 0)
+        RestoreVertexAttribArrays(default_vertex_attrib_manager);
+
+      // Restore the current VAO binding, unless it's the same as the
+      // default above.
+      GLuint curr_vao_service_id = vertex_attrib_manager->service_id();
+      if (curr_vao_service_id != 0)
+        glBindVertexArrayOES(curr_vao_service_id);
+    } else {
+      // If native VAO isn't supported, emulated VAOs are used.
+      // Restore to the currently bound VAO.
+      RestoreVertexAttribArrays(vertex_attrib_manager);
+    }
+  }
+
+  // glVertexAttrib4fv aren't part of VAO state and must be restored.
+  RestoreVertexAttribValues();
 }
 
 void ContextState::RestoreGlobalState(const ContextState* prev_state) const {
@@ -220,18 +278,7 @@
 
 void ContextState::RestoreState(const ContextState* prev_state) const {
   RestoreAllTextureUnitBindings(prev_state);
-
-  // Restore Attrib State
-  // TODO: This if should not be needed. RestoreState is getting called
-  // before GLES2Decoder::Initialize which is a bug.
-  if (vertex_attrib_manager.get()) {
-    // TODO(gman): Move this restoration to VertexAttribManager.
-    for (size_t attrib = 0; attrib < vertex_attrib_manager->num_attribs();
-         ++attrib) {
-      RestoreAttribute(attrib);
-    }
-  }
-
+  RestoreVertexAttribs();
   RestoreBufferBindings();
   RestoreRenderbufferBindings();
   RestoreProgramBindings();
diff --git a/gpu/command_buffer/service/context_state.h b/gpu/command_buffer/service/context_state.h
index d68700f..83818e9 100644
--- a/gpu/command_buffer/service/context_state.h
+++ b/gpu/command_buffer/service/context_state.h
@@ -108,7 +108,10 @@
   void RestoreActiveTexture() const;
   void RestoreAllTextureUnitBindings(const ContextState* prev_state) const;
   void RestoreActiveTextureUnitBinding(unsigned int target) const;
-  void RestoreAttribute(GLuint index) const;
+  void RestoreVertexAttribValues() const;
+  void RestoreVertexAttribArrays(
+      const scoped_refptr<VertexAttribManager> attrib_manager) const;
+  void RestoreVertexAttribs() const;
   void RestoreBufferBindings() const;
   void RestoreGlobalState(const ContextState* prev_state) const;
   void RestoreProgramBindings() const;
@@ -146,6 +149,7 @@
 
   // Class that manages vertex attribs.
   scoped_refptr<VertexAttribManager> vertex_attrib_manager;
+  scoped_refptr<VertexAttribManager> default_vertex_attrib_manager;
 
   // The program in use by glUseProgram
   scoped_refptr<Program> current_program;
diff --git a/gpu/command_buffer/service/feature_info.cc b/gpu/command_buffer/service/feature_info.cc
index 66e6a54..c7557eb 100644
--- a/gpu/command_buffer/service/feature_info.cc
+++ b/gpu/command_buffer/service/feature_info.cc
@@ -8,6 +8,7 @@
 
 #include "base/command_line.h"
 #include "base/macros.h"
+#include "base/metrics/histogram.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
@@ -95,6 +96,13 @@
     workarounds->max_cube_map_texture_size = 1024;
   if (workarounds->max_cube_map_texture_size_limit_512)
     workarounds->max_cube_map_texture_size = 512;
+
+  if (workarounds->max_fragment_uniform_vectors_32)
+    workarounds->max_fragment_uniform_vectors = 32;
+  if (workarounds->max_varying_vectors_16)
+    workarounds->max_varying_vectors = 16;
+  if (workarounds->max_vertex_uniform_vectors_256)
+    workarounds->max_vertex_uniform_vectors = 256;
 }
 
 }  // anonymous namespace.
@@ -103,6 +111,7 @@
     : chromium_color_buffer_float_rgba(false),
       chromium_color_buffer_float_rgb(false),
       chromium_framebuffer_multisample(false),
+      chromium_sync_query(false),
       use_core_framebuffer_multisample(false),
       multisampled_render_to_texture(false),
       use_img_for_multisampled_render_to_texture(false),
@@ -127,6 +136,7 @@
       enable_samplers(false),
       ext_draw_buffers(false),
       ext_frag_depth(false),
+      ext_shader_texture_lod(false),
       use_async_readpixels(false),
       map_buffer_range(false),
       ext_discard_framebuffer(false),
@@ -142,7 +152,10 @@
     GPU_DRIVER_BUG_WORKAROUNDS(GPU_OP)
 #undef GPU_OP
     max_texture_size(0),
-    max_cube_map_texture_size(0) {
+    max_cube_map_texture_size(0),
+    max_fragment_uniform_vectors(0),
+    max_varying_vectors(0),
+    max_vertex_uniform_vectors(0) {
 }
 
 FeatureInfo::FeatureInfo() {
@@ -747,9 +760,16 @@
     feature_flags_.ext_frag_depth = true;
   }
 
-  bool ui_gl_fence_works = extensions.Contains("GL_NV_fence") ||
+  if (extensions.Contains("GL_EXT_shader_texture_lod") ||
+      gfx::HasDesktopGLFeatures()) {
+    AddExtensionString("GL_EXT_shader_texture_lod");
+    feature_flags_.ext_shader_texture_lod = true;
+  }
+
+  bool ui_gl_fence_works = is_es3 || extensions.Contains("GL_NV_fence") ||
                            extensions.Contains("GL_ARB_sync") ||
                            extensions.Contains("EGL_KHR_fence_sync");
+  UMA_HISTOGRAM_BOOLEAN("GPU.FenceSupport", ui_gl_fence_works);
 
   feature_flags_.map_buffer_range =
       is_es3 || extensions.Contains("GL_ARB_map_buffer_range");
@@ -777,6 +797,11 @@
     AddExtensionString("GL_EXT_discard_framebuffer");
     feature_flags_.ext_discard_framebuffer = true;
   }
+
+  if (ui_gl_fence_works) {
+    AddExtensionString("GL_CHROMIUM_sync_query");
+    feature_flags_.chromium_sync_query = true;
+  }
 }
 
 void FeatureInfo::AddExtensionString(const std::string& str) {
diff --git a/gpu/command_buffer/service/feature_info.h b/gpu/command_buffer/service/feature_info.h
index 039b926..8e9c07c 100644
--- a/gpu/command_buffer/service/feature_info.h
+++ b/gpu/command_buffer/service/feature_info.h
@@ -31,6 +31,7 @@
     bool chromium_color_buffer_float_rgba;
     bool chromium_color_buffer_float_rgb;
     bool chromium_framebuffer_multisample;
+    bool chromium_sync_query;
     // Use glBlitFramebuffer() and glRenderbufferStorageMultisample() with
     // GL_EXT_framebuffer_multisample-style semantics, since they are exposed
     // as core GL functions on this implementation.
@@ -59,6 +60,7 @@
     bool enable_samplers;
     bool ext_draw_buffers;
     bool ext_frag_depth;
+    bool ext_shader_texture_lod;
     bool use_async_readpixels;
     bool map_buffer_range;
     bool ext_discard_framebuffer;
@@ -79,6 +81,9 @@
     // Note: 0 here means use driver limit.
     GLint max_texture_size;
     GLint max_cube_map_texture_size;
+    GLint max_fragment_uniform_vectors;
+    GLint max_varying_vectors;
+    GLint max_vertex_uniform_vectors;
   };
 
   // Constructor with workarounds taken from the current process's CommandLine
diff --git a/gpu/command_buffer/service/feature_info_unittest.cc b/gpu/command_buffer/service/feature_info_unittest.cc
index 1a8cc12..03c55cc 100644
--- a/gpu/command_buffer/service/feature_info_unittest.cc
+++ b/gpu/command_buffer/service/feature_info_unittest.cc
@@ -914,6 +914,12 @@
   EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_frag_depth"));
 }
 
+TEST_F(FeatureInfoTest, InitializeEXT_shader_texture_lod) {
+  SetupInitExpectations("GL_EXT_shader_texture_lod");
+  EXPECT_TRUE(info_->feature_flags().ext_shader_texture_lod);
+  EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_shader_texture_lod"));
+}
+
 TEST_F(FeatureInfoTest, InitializeEXT_discard_framebuffer) {
   SetupInitExpectations("GL_EXT_discard_framebuffer");
   EXPECT_TRUE(info_->feature_flags().ext_discard_framebuffer);
@@ -936,7 +942,7 @@
   EXPECT_TRUE(info_->feature_flags().use_core_framebuffer_multisample);
   EXPECT_THAT(info_->extensions(),
               HasSubstr("GL_CHROMIUM_framebuffer_multisample"));
-  EXPECT_FALSE(info_->feature_flags().use_async_readpixels);
+  EXPECT_TRUE(info_->feature_flags().use_async_readpixels);
   EXPECT_TRUE(info_->feature_flags().oes_depth24);
   EXPECT_THAT(info_->extensions(), HasSubstr("GL_GOOGLE_depth_texture"));
   EXPECT_THAT(info_->extensions(), HasSubstr("GL_CHROMIUM_depth_texture"));
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc
index 80ca209..fdd08f4 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -82,6 +82,7 @@
 static const char kOESDerivativeExtension[] = "GL_OES_standard_derivatives";
 static const char kEXTFragDepthExtension[] = "GL_EXT_frag_depth";
 static const char kEXTDrawBuffersExtension[] = "GL_EXT_draw_buffers";
+static const char kEXTShaderTextureLodExtension[] = "GL_EXT_shader_texture_lod";
 
 #if !defined(ANGLE_SH_VERSION) || ANGLE_SH_VERSION < 108
 khronos_uint64_t CityHashForAngle(const char* name, unsigned int len) {
@@ -611,9 +612,6 @@
       unsigned int target) const OVERRIDE {
     state_.RestoreActiveTextureUnitBinding(target);
   }
-  virtual void RestoreAttribute(unsigned index) const OVERRIDE {
-    state_.RestoreAttribute(index);
-  }
   virtual void RestoreBufferBindings() const OVERRIDE {
     state_.RestoreBufferBindings();
   }
@@ -1109,9 +1107,12 @@
   }
 
   // Creates a vertex attrib manager for the given vertex array.
-  void CreateVertexAttribManager(GLuint client_id, GLuint service_id) {
+  scoped_refptr<VertexAttribManager> CreateVertexAttribManager(
+      GLuint client_id,
+      GLuint service_id,
+      bool client_visible) {
     return vertex_array_manager()->CreateVertexAttribManager(
-      client_id, service_id, group_->max_vertex_attribs());
+        client_id, service_id, group_->max_vertex_attribs(), client_visible);
   }
 
   void DoBindAttribLocation(GLuint client_id, GLuint index, const char* name);
@@ -1661,9 +1662,6 @@
   bool unpack_premultiply_alpha_;
   bool unpack_unpremultiply_alpha_;
 
-  // Default vertex attribs manager, used when no VAOs are bound.
-  scoped_refptr<VertexAttribManager> default_vertex_attrib_manager_;
-
   // The buffer we bind to attrib 0 since OpenGL requires it (ES does not).
   GLuint attrib_0_buffer_id_;
 
@@ -1757,6 +1755,7 @@
   bool derivatives_explicitly_enabled_;
   bool frag_depth_explicitly_enabled_;
   bool draw_buffers_explicitly_enabled_;
+  bool shader_texture_lod_explicitly_enabled_;
 
   bool compile_shader_always_succeeds_;
 
@@ -2260,6 +2259,7 @@
       derivatives_explicitly_enabled_(false),
       frag_depth_explicitly_enabled_(false),
       draw_buffers_explicitly_enabled_(false),
+      shader_texture_lod_explicitly_enabled_(false),
       compile_shader_always_succeeds_(false),
       lose_context_when_out_of_memory_(false),
       service_logging_(CommandLine::ForCurrentProcess()->HasSwitch(
@@ -2360,16 +2360,25 @@
   disallowed_features_ = disallowed_features;
 
   state_.attrib_values.resize(group_->max_vertex_attribs());
-  default_vertex_attrib_manager_ = new VertexAttribManager();
-  default_vertex_attrib_manager_->Initialize(
+  vertex_array_manager_.reset(new VertexArrayManager());
+
+  GLuint default_vertex_attrib_service_id = 0;
+  if (features().native_vertex_array_object) {
+    glGenVertexArraysOES(1, &default_vertex_attrib_service_id);
+    glBindVertexArrayOES(default_vertex_attrib_service_id);
+  }
+
+  state_.default_vertex_attrib_manager =
+      CreateVertexAttribManager(0, default_vertex_attrib_service_id, false);
+
+  state_.default_vertex_attrib_manager->Initialize(
       group_->max_vertex_attribs(),
       feature_info_->workarounds().init_vertex_attributes);
 
-  // vertex_attrib_manager is set to default_vertex_attrib_manager_ by this call
+  // vertex_attrib_manager is set to default_vertex_attrib_manager by this call
   DoBindVertexArrayOES(0);
 
   query_manager_.reset(new QueryManager(this, feature_info_.get()));
-  vertex_array_manager_.reset(new VertexArrayManager());
 
   util_.set_num_compressed_texture_formats(
       validators_->compressed_texture_format.GetValues().size());
@@ -2673,6 +2682,7 @@
   caps.texture_storage = feature_info_->feature_flags().ext_texture_storage;
   caps.discard_framebuffer =
       feature_info_->feature_flags().ext_discard_framebuffer;
+  caps.sync_query = feature_info_->feature_flags().chromium_sync_query;
 
 #if defined(OS_MACOSX)
   // This is unconditionally true on mac, no need to test for it at runtime.
@@ -2728,6 +2738,9 @@
     resources.EXT_draw_buffers = draw_buffers_explicitly_enabled_;
     if (!draw_buffers_explicitly_enabled_)
       resources.MaxDrawBuffers = 1;
+#if (ANGLE_SH_VERSION >= 123)
+    resources.EXT_shader_texture_lod = shader_texture_lod_explicitly_enabled_;
+#endif
   } else {
     resources.OES_standard_derivatives =
         features().oes_standard_derivatives ? 1 : 0;
@@ -2739,6 +2752,10 @@
         features().ext_draw_buffers ? 1 : 0;
     resources.EXT_frag_depth =
         features().ext_frag_depth ? 1 : 0;
+#if (ANGLE_SH_VERSION >= 123)
+    resources.EXT_shader_texture_lod =
+        features().ext_shader_texture_lod ? 1 : 0;
+#endif
   }
 
   ShShaderSpec shader_spec = force_webgl_glsl_validation_ ? SH_WEBGL_SPEC
@@ -3309,7 +3326,7 @@
 
   // Unbind everything.
   state_.vertex_attrib_manager = NULL;
-  default_vertex_attrib_manager_ = NULL;
+  state_.default_vertex_attrib_manager = NULL;
   state_.texture_units.clear();
   state_.bound_array_buffer = NULL;
   state_.current_queries.clear();
@@ -3904,6 +3921,11 @@
 }
 
 void GLES2DecoderImpl::ClearAllAttributes() const {
+  // Must use native VAO 0, as RestoreAllAttributes can't fully restore
+  // other VAOs.
+  if (feature_info_->feature_flags().native_vertex_array_object)
+    glBindVertexArrayOES(0);
+
   for (uint32 i = 0; i < group_->max_vertex_attribs(); ++i) {
     if (i != 0) // Never disable attribute 0
       glDisableVertexAttribArray(i);
@@ -3913,8 +3935,7 @@
 }
 
 void GLES2DecoderImpl::RestoreAllAttributes() const {
-  for (uint32 i = 0; i < group_->max_vertex_attribs(); ++i)
-    RestoreAttribute(i);
+  state_.RestoreVertexAttribs();
 }
 
 void GLES2DecoderImpl::OnFboChanged() const {
@@ -4487,7 +4508,7 @@
       *num_written = 1;
       if (params) {
         if (state_.vertex_attrib_manager.get() !=
-            default_vertex_attrib_manager_.get()) {
+            state_.default_vertex_attrib_manager.get()) {
           GLuint client_id = 0;
           vertex_array_manager_->GetClientId(
               state_.vertex_attrib_manager->service_id(), &client_id);
@@ -7085,7 +7106,7 @@
   if (!state_.bound_array_buffer.get() ||
       state_.bound_array_buffer->IsDeleted()) {
     if (state_.vertex_attrib_manager.get() ==
-        default_vertex_attrib_manager_.get()) {
+        state_.default_vertex_attrib_manager.get()) {
       LOCAL_SET_GL_ERROR(
           GL_INVALID_VALUE, "glVertexAttribPointer", "no array buffer bound");
       return error::kNoError;
@@ -7738,6 +7759,14 @@
                                  std::string());
             }
           }
+          if (!shader_texture_lod_explicitly_enabled_) {
+            size_t offset = extensions.find(kEXTShaderTextureLodExtension);
+            if (std::string::npos != offset) {
+              extensions.replace(offset,
+                                 arraysize(kEXTShaderTextureLodExtension),
+                                 std::string());
+            }
+          }
         } else {
           extensions = feature_info_->extensions().c_str();
         }
@@ -9210,6 +9239,7 @@
   bool desire_standard_derivatives = false;
   bool desire_frag_depth = false;
   bool desire_draw_buffers = false;
+  bool desire_shader_texture_lod = false;
   if (force_webgl_glsl_validation_) {
     desire_standard_derivatives =
         feature_str.find("GL_OES_standard_derivatives") != std::string::npos;
@@ -9217,6 +9247,8 @@
         feature_str.find("GL_EXT_frag_depth") != std::string::npos;
     desire_draw_buffers =
         feature_str.find("GL_EXT_draw_buffers") != std::string::npos;
+    desire_shader_texture_lod =
+        feature_str.find("GL_EXT_shader_texture_lod") != std::string::npos;
   }
 
   if (desire_webgl_glsl_validation != force_webgl_glsl_validation_ ||
@@ -9227,6 +9259,7 @@
     derivatives_explicitly_enabled_ |= desire_standard_derivatives;
     frag_depth_explicitly_enabled_ |= desire_frag_depth;
     draw_buffers_explicitly_enabled_ |= desire_draw_buffers;
+    shader_texture_lod_explicitly_enabled_ |= desire_shader_texture_lod;
     InitializeShaderTranslator();
   }
 
@@ -9434,7 +9467,7 @@
       return false;
     }
   }
-  // NOTE: We don't generate Query objects here. Only in BeginQueryEXT
+  query_manager_->GenQueries(n, client_ids);
   return true;
 }
 
@@ -9449,8 +9482,8 @@
         state_.current_queries.erase(it);
 
       query->Destroy(true);
-      query_manager_->RemoveQuery(client_ids[ii]);
     }
+    query_manager_->RemoveQuery(client_ids[ii]);
   }
 }
 
@@ -9513,6 +9546,14 @@
     case GL_ASYNC_PIXEL_PACK_COMPLETED_CHROMIUM:
     case GL_GET_ERROR_QUERY_CHROMIUM:
       break;
+    case GL_COMMANDS_COMPLETED_CHROMIUM:
+      if (!features().chromium_sync_query) {
+        LOCAL_SET_GL_ERROR(
+            GL_INVALID_OPERATION, "glBeginQueryEXT",
+            "not enabled for commands completed queries");
+        return error::kNoError;
+      }
+      break;
     default:
       if (!features().occlusion_query_boolean) {
         LOCAL_SET_GL_ERROR(
@@ -9536,24 +9577,12 @@
 
   QueryManager::Query* query = query_manager_->GetQuery(client_id);
   if (!query) {
-    // TODO(gman): Decide if we need this check.
-    //
-    // Checks id was made by glGenQueries
-    //
-    // From the POV of OpenGL ES 2.0 you need to call glGenQueriesEXT
-    // for all Query ids but from the POV of the command buffer service maybe
-    // you don't.
-    //
-    // The client can enforce this. I don't think the service cares.
-    //
-    // IdAllocatorInterface* id_allocator =
-    //     group_->GetIdAllocator(id_namespaces::kQueries);
-    // if (!id_allocator->InUse(client_id)) {
-    //   LOCAL_SET_GL_ERROR(
-    //       GL_INVALID_OPERATION,
-    //       "glBeginQueryEXT", "id not made by glGenQueriesEXT");
-    //   return error::kNoError;
-    // }
+    if (!query_manager_->IsValidQuery(client_id)) {
+      LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION,
+                         "glBeginQueryEXT",
+                         "id not made by glGenQueriesEXT");
+      return error::kNoError;
+    }
     query = query_manager_->CreateQuery(
         target, client_id, sync_shm_id, sync_shm_offset);
   }
@@ -9610,14 +9639,14 @@
   if (!features().native_vertex_array_object) {
     // Emulated VAO
     for (GLsizei ii = 0; ii < n; ++ii) {
-      CreateVertexAttribManager(client_ids[ii], 0);
+      CreateVertexAttribManager(client_ids[ii], 0, true);
     }
   } else {
     scoped_ptr<GLuint[]> service_ids(new GLuint[n]);
 
     glGenVertexArraysOES(n, service_ids.get());
     for (GLsizei ii = 0; ii < n; ++ii) {
-      CreateVertexAttribManager(client_ids[ii], service_ids[ii]);
+      CreateVertexAttribManager(client_ids[ii], service_ids[ii], true);
     }
   }
 
@@ -9631,7 +9660,7 @@
         GetVertexAttribManager(client_ids[ii]);
     if (vao && !vao->IsDeleted()) {
       if (state_.vertex_attrib_manager.get() == vao) {
-        state_.vertex_attrib_manager = default_vertex_attrib_manager_;
+        DoBindVertexArrayOES(0);
       }
       RemoveVertexAttribManager(client_ids[ii]);
     }
@@ -9640,7 +9669,6 @@
 
 void GLES2DecoderImpl::DoBindVertexArrayOES(GLuint client_id) {
   VertexAttribManager* vao = NULL;
-  GLuint service_id = 0;
   if (client_id != 0) {
     vao = GetVertexAttribManager(client_id);
     if (!vao) {
@@ -9652,11 +9680,9 @@
           "glBindVertexArrayOES", "bad vertex array id.");
       current_decoder_error_ = error::kNoError;
       return;
-    } else {
-      service_id = vao->service_id();
     }
   } else {
-    vao = default_vertex_attrib_manager_.get();
+    vao = state_.default_vertex_attrib_manager.get();
   }
 
   // Only set the VAO state if it's changed
@@ -9665,6 +9691,7 @@
     if (!features().native_vertex_array_object) {
       EmulateVertexArrayState();
     } else {
+      GLuint service_id = vao->service_id();
       glBindVertexArrayOES(service_id);
     }
   }
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.h b/gpu/command_buffer/service/gles2_cmd_decoder.h
index 03a4b54..c573b23 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder.h
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.h
@@ -142,7 +142,6 @@
   virtual void RestoreAllTextureUnitBindings(
       const ContextState* prev_state) const = 0;
   virtual void RestoreActiveTextureUnitBinding(unsigned int target) const = 0;
-  virtual void RestoreAttribute(unsigned index) const = 0;
   virtual void RestoreBufferBindings() const = 0;
   virtual void RestoreFramebufferBindings() const = 0;
   virtual void RestoreGlobalState() const = 0;
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_mock.h b/gpu/command_buffer/service/gles2_cmd_decoder_mock.h
index ff678c9..8043514 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_mock.h
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_mock.h
@@ -61,7 +61,6 @@
       RestoreAllTextureUnitBindings, void(const ContextState* state));
   MOCK_CONST_METHOD1(
       RestoreActiveTextureUnitBinding, void(unsigned int target));
-  MOCK_CONST_METHOD1(RestoreAttribute, void(unsigned index));
   MOCK_CONST_METHOD0(RestoreBufferBindings, void());
   MOCK_CONST_METHOD0(RestoreFramebufferBindings, void());
   MOCK_CONST_METHOD0(RestoreGlobalState, void());
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc
index 016bfab..db99609 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc
@@ -7066,15 +7066,29 @@
   EXPECT_CALL(*gl_, BeginQueryARB(GL_ANY_SAMPLES_PASSED_EXT, kNewServiceId))
       .Times(1)
       .RetiresOnSaturation();
+
+  // Query object should not be created untill BeginQueriesEXT.
+  QueryManager* query_manager = decoder_->GetQueryManager();
+  ASSERT_TRUE(query_manager != NULL);
+  QueryManager::Query* query = query_manager->GetQuery(kNewClientId);
+  EXPECT_TRUE(query == NULL);
+
+  // BeginQueryEXT should fail  if id is not generated from GenQueriesEXT.
+  begin_cmd.Init(GL_ANY_SAMPLES_PASSED_EXT,
+                 kInvalidClientId,
+                 kSharedMemoryId,
+                 kSharedMemoryOffset);
+  EXPECT_EQ(error::kNoError, ExecuteCmd(begin_cmd));
+  EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+
   begin_cmd.Init(
       GL_ANY_SAMPLES_PASSED_EXT, kNewClientId,
       kSharedMemoryId, kSharedMemoryOffset);
   EXPECT_EQ(error::kNoError, ExecuteCmd(begin_cmd));
   EXPECT_EQ(GL_NO_ERROR, GetGLError());
 
-  QueryManager* query_manager = decoder_->GetQueryManager();
-  ASSERT_TRUE(query_manager != NULL);
-  QueryManager::Query* query = query_manager->GetQuery(kNewClientId);
+  // After BeginQueriesEXT id name should have query object associated with it.
+  query = query_manager->GetQuery(kNewClientId);
   ASSERT_TRUE(query != NULL);
   EXPECT_FALSE(query->pending());
 
@@ -7112,6 +7126,7 @@
   { GL_ASYNC_PIXEL_UNPACK_COMPLETED_CHROMIUM, false },
   { GL_ASYNC_PIXEL_PACK_COMPLETED_CHROMIUM, false },
   { GL_GET_ERROR_QUERY_CHROMIUM, false },
+  { GL_COMMANDS_COMPLETED_CHROMIUM, false },
   { GL_ANY_SAMPLES_PASSED_EXT, true },
 };
 
@@ -7125,7 +7140,7 @@
   // We need to reset the decoder on each iteration, because we lose the
   // context every time.
   GLES2DecoderTestBase::InitState init;
-  init.extensions = "GL_EXT_occlusion_query_boolean";
+  init.extensions = "GL_EXT_occlusion_query_boolean GL_ARB_sync";
   init.gl_version = "opengl es 2.0";
   init.has_alpha = true;
   init.request_alpha = true;
@@ -7160,6 +7175,13 @@
         .WillOnce(Return(GL_NO_ERROR))
         .RetiresOnSaturation();
   }
+  GLsync kGlSync = reinterpret_cast<GLsync>(0xdeadbeef);
+  if (query_type.type == GL_COMMANDS_COMPLETED_CHROMIUM) {
+    EXPECT_CALL(*gl, Flush()).RetiresOnSaturation();
+    EXPECT_CALL(*gl, FenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0))
+        .WillOnce(Return(kGlSync))
+        .RetiresOnSaturation();
+  }
 
   EndQueryEXT end_cmd;
   end_cmd.Init(query_type.type, 1);
@@ -7175,6 +7197,11 @@
         .WillOnce(SetArgumentPointee<2>(1))
         .RetiresOnSaturation();
   }
+  if (query_type.type == GL_COMMANDS_COMPLETED_CHROMIUM) {
+    EXPECT_CALL(*gl, ClientWaitSync(kGlSync, _, _))
+        .WillOnce(Return(GL_ALREADY_SIGNALED))
+        .RetiresOnSaturation();
+  }
 
   QueryManager* query_manager = test->GetDecoder()->GetQueryManager();
   ASSERT_TRUE(query_manager != NULL);
@@ -7189,6 +7216,8 @@
         .Times(1)
         .RetiresOnSaturation();
   }
+  if (query_type.type == GL_COMMANDS_COMPLETED_CHROMIUM)
+    EXPECT_CALL(*gl, DeleteSync(kGlSync)).Times(1).RetiresOnSaturation();
   test->ResetDecoder();
 }
 
@@ -7276,6 +7305,65 @@
             static_cast<GLenum>(sync->result));
 }
 
+TEST_F(GLES2DecoderManualInitTest, BeginEndQueryEXTCommandsCompletedCHROMIUM) {
+  InitState init;
+  init.extensions = "GL_EXT_occlusion_query_boolean GL_ARB_sync";
+  init.gl_version = "opengl es 2.0";
+  init.has_alpha = true;
+  init.request_alpha = true;
+  init.bind_generates_resource = true;
+  InitDecoder(init);
+
+  GenHelper<GenQueriesEXTImmediate>(kNewClientId);
+
+  BeginQueryEXT begin_cmd;
+  begin_cmd.Init(GL_COMMANDS_COMPLETED_CHROMIUM,
+                 kNewClientId,
+                 kSharedMemoryId,
+                 kSharedMemoryOffset);
+  EXPECT_EQ(error::kNoError, ExecuteCmd(begin_cmd));
+  EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+  QueryManager* query_manager = decoder_->GetQueryManager();
+  ASSERT_TRUE(query_manager != NULL);
+  QueryManager::Query* query = query_manager->GetQuery(kNewClientId);
+  ASSERT_TRUE(query != NULL);
+  EXPECT_FALSE(query->pending());
+
+  GLsync kGlSync = reinterpret_cast<GLsync>(0xdeadbeef);
+  EXPECT_CALL(*gl_, Flush()).RetiresOnSaturation();
+  EXPECT_CALL(*gl_, FenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0))
+      .WillOnce(Return(kGlSync))
+      .RetiresOnSaturation();
+
+  EndQueryEXT end_cmd;
+  end_cmd.Init(GL_COMMANDS_COMPLETED_CHROMIUM, 1);
+  EXPECT_EQ(error::kNoError, ExecuteCmd(end_cmd));
+  EXPECT_EQ(GL_NO_ERROR, GetGLError());
+  EXPECT_TRUE(query->pending());
+
+  EXPECT_CALL(*gl_, ClientWaitSync(kGlSync, _, _))
+      .WillOnce(Return(GL_TIMEOUT_EXPIRED))
+      .RetiresOnSaturation();
+  bool process_success = query_manager->ProcessPendingQueries();
+
+  EXPECT_TRUE(process_success);
+  EXPECT_TRUE(query->pending());
+
+  EXPECT_CALL(*gl_, ClientWaitSync(kGlSync, _, _))
+      .WillOnce(Return(GL_ALREADY_SIGNALED))
+      .RetiresOnSaturation();
+  process_success = query_manager->ProcessPendingQueries();
+
+  EXPECT_TRUE(process_success);
+  EXPECT_FALSE(query->pending());
+  QuerySync* sync = static_cast<QuerySync*>(shared_memory_address_);
+  EXPECT_EQ(static_cast<GLenum>(0), static_cast<GLenum>(sync->result));
+
+  EXPECT_CALL(*gl_, DeleteSync(kGlSync)).Times(1).RetiresOnSaturation();
+  ResetDecoder();
+}
+
 TEST_F(GLES2DecoderTest, ProduceAndConsumeTextureCHROMIUM) {
   Mailbox mailbox = Mailbox::Generate();
 
@@ -7706,6 +7794,20 @@
               ExecuteImmediateCmd(cmd, sizeof(temp)));
   }
 
+  void DeleteBoundVertexArraysOESImmediateValidArgs() {
+    BindVertexArrayOESValidArgs();
+
+    AddExpectationsForDeleteBoundVertexArraysOES();
+    DeleteVertexArraysOESImmediate& cmd =
+        *GetImmediateAs<DeleteVertexArraysOESImmediate>();
+    cmd.Init(1, &client_vertexarray_id_);
+    EXPECT_EQ(error::kNoError,
+              ExecuteImmediateCmd(cmd, sizeof(client_vertexarray_id_)));
+    EXPECT_EQ(GL_NO_ERROR, GetGLError());
+    EXPECT_TRUE(GetVertexArrayInfo(client_vertexarray_id_) == NULL);
+    vertex_array_deleted_manually_ = true;
+  }
+
   void IsVertexArrayOESValidArgs() {
     IsVertexArrayOES cmd;
     cmd.Init(client_vertexarray_id_, shared_memory_id_, shared_memory_offset_);
@@ -7824,6 +7926,15 @@
   DeleteVertexArraysOESImmediateInvalidArgs();
 }
 
+TEST_F(GLES2DecoderVertexArraysOESTest,
+       DeleteBoundVertexArraysOESImmediateValidArgs) {
+  DeleteBoundVertexArraysOESImmediateValidArgs();
+}
+TEST_F(GLES2DecoderEmulatedVertexArraysOESTest,
+       DeleteBoundVertexArraysOESImmediateValidArgs) {
+  DeleteBoundVertexArraysOESImmediateValidArgs();
+}
+
 TEST_F(GLES2DecoderVertexArraysOESTest, IsVertexArrayOESValidArgs) {
   IsVertexArrayOESValidArgs();
 }
@@ -8278,6 +8389,7 @@
   // AsyncTexImage2D
   {
     // Create transfer state since it doesn't exist.
+    EXPECT_EQ(texture_ref->num_observers(), 0);
     EXPECT_CALL(*manager, CreatePixelTransferDelegateImpl(texture_ref, _))
         .WillOnce(Return(
             delegate = new StrictMock<gpu::MockAsyncPixelTransferDelegate>))
@@ -8297,6 +8409,7 @@
     EXPECT_TRUE(texture->SafeToRenderFrom());
     GLsizei width, height;
     EXPECT_FALSE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height));
+    EXPECT_EQ(texture_ref->num_observers(), 1);
   }
   {
     // Async redefinitions are not allowed!
@@ -8330,8 +8443,10 @@
   }
 
   // AsyncTexSubImage2D
+  EXPECT_CALL(*delegate, Destroy()).RetiresOnSaturation();
   decoder_->GetAsyncPixelTransferManager()
       ->ClearPixelTransferDelegateForTest(texture_ref);
+  EXPECT_EQ(texture_ref->num_observers(), 0);
   texture->SetImmutable(false);
   {
     // Create transfer state since it doesn't exist.
@@ -8387,6 +8502,7 @@
 
   // Delete delegate on DeleteTexture.
   {
+    EXPECT_EQ(texture_ref->num_observers(), 1);
     EXPECT_CALL(*delegate, Destroy()).RetiresOnSaturation();
     DoDeleteTexture(client_texture_id_, kServiceTextureId);
     EXPECT_FALSE(
@@ -8470,6 +8586,11 @@
     EXPECT_EQ(error::kNoError, ExecuteCmd(wait_all_cmd));
     EXPECT_EQ(GL_NO_ERROR, GetGLError());
   }
+
+  // Remove PixelTransferManager before the decoder destroys.
+  EXPECT_CALL(*delegate, Destroy()).RetiresOnSaturation();
+  decoder_->ResetAsyncPixelTransferManagerForTest();
+  manager = NULL;
 }
 
 TEST_F(GLES2DecoderManualInitTest, AsyncPixelTransferManager) {
@@ -8520,11 +8641,14 @@
 
   // Delete delegate on manager teardown.
   {
+    EXPECT_EQ(texture_ref->num_observers(), 1);
     EXPECT_CALL(*delegate, Destroy()).RetiresOnSaturation();
     decoder_->ResetAsyncPixelTransferManagerForTest();
+    manager = NULL;
 
     // Texture ref still valid.
     EXPECT_EQ(texture_ref, GetTexture(client_texture_id_));
+    EXPECT_EQ(texture_ref->num_observers(), 0);
   }
 }
 
@@ -9144,6 +9268,20 @@
   GetDecoder()->RestoreAllTextureUnitBindings(&prev_state);
 }
 
+// TODO(vmiura): Tests for VAO restore.
+
+// TODO(vmiura): Tests for ContextState::RestoreAttribute().
+
+// TODO(vmiura): Tests for ContextState::RestoreBufferBindings().
+
+// TODO(vmiura): Tests for ContextState::RestoreProgramBindings().
+
+// TODO(vmiura): Tests for RestoreRenderbufferBindings().
+
+// TODO(vmiura): Tests for RestoreProgramBindings().
+
+// TODO(vmiura): Tests for RestoreGlobalState().
+
 TEST_F(GLES2DecoderManualInitTest, ClearUniformsBeforeFirstProgramUse) {
   CommandLine command_line(0, NULL);
   command_line.AppendSwitchASCII(
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.cc
index eb4eb9c..b1ed1df 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.cc
@@ -146,6 +146,11 @@
   EXPECT_TRUE(
       group_->Initialize(mock_decoder_.get(), DisallowedFeatures()));
 
+  if (group_->feature_info()->feature_flags().native_vertex_array_object) {
+    EXPECT_CALL(*gl_, GenVertexArraysOES(1, _)).Times(1).RetiresOnSaturation();
+    EXPECT_CALL(*gl_, BindVertexArrayOES(_)).Times(1).RetiresOnSaturation();
+  }
+
   if (group_->feature_info()->workarounds().init_vertex_attributes)
     AddExpectationsForVertexAttribManager();
 
@@ -987,6 +992,12 @@
   }
 }
 
+void GLES2DecoderTestBase::AddExpectationsForDeleteBoundVertexArraysOES() {
+  // Expectations are the same as a delete, followed by binding VAO 0.
+  AddExpectationsForDeleteVertexArraysOES();
+  AddExpectationsForBindVertexArrayOES();
+}
+
 void GLES2DecoderTestBase::AddExpectationsForBindVertexArrayOES() {
   if (group_->feature_info()->feature_flags().native_vertex_array_object) {
     EXPECT_CALL(*gl_, BindVertexArrayOES(_))
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h
index 24a960e..52e7211 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h
@@ -354,6 +354,7 @@
 
   void AddExpectationsForGenVertexArraysOES();
   void AddExpectationsForDeleteVertexArraysOES();
+  void AddExpectationsForDeleteBoundVertexArraysOES();
   void AddExpectationsForBindVertexArrayOES();
   void AddExpectationsForRestoreAttribState(GLuint attrib);
 
diff --git a/gpu/command_buffer/service/gles2_cmd_validation_implementation_autogen.h b/gpu/command_buffer/service/gles2_cmd_validation_implementation_autogen.h
index ca49ced..d296018 100644
--- a/gpu/command_buffer/service/gles2_cmd_validation_implementation_autogen.h
+++ b/gpu/command_buffer/service/gles2_cmd_validation_implementation_autogen.h
@@ -214,7 +214,8 @@
     GL_COMMANDS_ISSUED_CHROMIUM,
     GL_LATENCY_QUERY_CHROMIUM,
     GL_ASYNC_PIXEL_UNPACK_COMPLETED_CHROMIUM,
-    GL_ASYNC_PIXEL_PACK_COMPLETED_CHROMIUM, };
+    GL_ASYNC_PIXEL_PACK_COMPLETED_CHROMIUM,
+    GL_COMMANDS_COMPLETED_CHROMIUM, };
 
 static const GLenum valid_read_pixel_format_table[] = {GL_ALPHA, GL_RGB,
                                                        GL_RGBA, };
diff --git a/gpu/command_buffer/service/query_manager.cc b/gpu/command_buffer/service/query_manager.cc
index 9f1d3a7..ffb54cc 100644
--- a/gpu/command_buffer/service/query_manager.cc
+++ b/gpu/command_buffer/service/query_manager.cc
@@ -16,6 +16,7 @@
 #include "gpu/command_buffer/service/error_state.h"
 #include "gpu/command_buffer/service/feature_info.h"
 #include "gpu/command_buffer/service/gles2_cmd_decoder.h"
+#include "ui/gl/gl_fence.h"
 
 namespace gpu {
 namespace gles2 {
@@ -389,6 +390,55 @@
 GetErrorQuery::~GetErrorQuery() {
 }
 
+class CommandsCompletedQuery : public QueryManager::Query {
+ public:
+  CommandsCompletedQuery(QueryManager* manager,
+                         GLenum target,
+                         int32 shm_id,
+                         uint32 shm_offset);
+
+  // Overridden from QueryManager::Query:
+  virtual bool Begin() OVERRIDE;
+  virtual bool End(base::subtle::Atomic32 submit_count) OVERRIDE;
+  virtual bool Process() OVERRIDE;
+  virtual void Destroy(bool have_context) OVERRIDE;
+
+ protected:
+  virtual ~CommandsCompletedQuery();
+
+ private:
+  scoped_ptr<gfx::GLFence> fence_;
+};
+
+CommandsCompletedQuery::CommandsCompletedQuery(QueryManager* manager,
+                                               GLenum target,
+                                               int32 shm_id,
+                                               uint32 shm_offset)
+    : Query(manager, target, shm_id, shm_offset) {}
+
+bool CommandsCompletedQuery::Begin() { return true; }
+
+bool CommandsCompletedQuery::End(base::subtle::Atomic32 submit_count) {
+  fence_.reset(gfx::GLFence::Create());
+  DCHECK(fence_);
+  return AddToPendingQueue(submit_count);
+}
+
+bool CommandsCompletedQuery::Process() {
+  if (fence_ && !fence_->HasCompleted())
+    return true;
+  return MarkAsCompleted(0);
+}
+
+void CommandsCompletedQuery::Destroy(bool have_context) {
+  if (have_context && !IsDeleted()) {
+    fence_.reset();
+    MarkAsDeleted();
+  }
+}
+
+CommandsCompletedQuery::~CommandsCompletedQuery() {}
+
 QueryManager::QueryManager(
     GLES2Decoder* decoder,
     FeatureInfo* feature_info)
@@ -444,6 +494,9 @@
     case GL_GET_ERROR_QUERY_CHROMIUM:
       query = new GetErrorQuery(this, target, shm_id, shm_offset);
       break;
+    case GL_COMMANDS_COMPLETED_CHROMIUM:
+      query = new CommandsCompletedQuery(this, target, shm_id, shm_offset);
+      break;
     default: {
       GLuint service_id = 0;
       glGenQueriesARB(1, &service_id);
@@ -459,6 +512,18 @@
   return query.get();
 }
 
+void QueryManager::GenQueries(GLsizei n, const GLuint* queries) {
+  DCHECK_GE(n, 0);
+  for (GLsizei i = 0; i < n; ++i) {
+    generated_query_ids_.insert(queries[i]);
+  }
+}
+
+bool QueryManager::IsValidQuery(GLuint id) {
+  GeneratedQueryIds::iterator it = generated_query_ids_.find(id);
+  return it != generated_query_ids_.end();
+}
+
 QueryManager::Query* QueryManager::GetQuery(
     GLuint client_id) {
   QueryMap::iterator it = queries_.find(client_id);
@@ -473,6 +538,7 @@
     query->MarkAsDeleted();
     queries_.erase(it);
   }
+  generated_query_ids_.erase(client_id);
 }
 
 void QueryManager::StartTracking(QueryManager::Query* /* query */) {
diff --git a/gpu/command_buffer/service/query_manager.h b/gpu/command_buffer/service/query_manager.h
index cbc7931..36d424c 100644
--- a/gpu/command_buffer/service/query_manager.h
+++ b/gpu/command_buffer/service/query_manager.h
@@ -188,6 +188,9 @@
     return decoder_;
   }
 
+  void GenQueries(GLsizei n, const GLuint* queries);
+  bool IsValidQuery(GLuint id);
+
  private:
   void StartTracking(Query* query);
   void StopTracking(Query* query);
@@ -228,6 +231,9 @@
   typedef base::hash_map<GLuint, scoped_refptr<Query> > QueryMap;
   QueryMap queries_;
 
+  typedef base::hash_set<GLuint> GeneratedQueryIds;
+  GeneratedQueryIds generated_query_ids_;
+
   // Queries waiting for completion.
   typedef std::deque<scoped_refptr<Query> > QueryQueue;
   QueryQueue pending_queries_;
diff --git a/gpu/command_buffer/service/shader_translator.cc b/gpu/command_buffer/service/shader_translator.cc
index 53157de..c3279e2 100644
--- a/gpu/command_buffer/service/shader_translator.cc
+++ b/gpu/command_buffer/service/shader_translator.cc
@@ -204,7 +204,9 @@
 std::string ShaderTranslator::GetStringForOptionsThatWouldEffectCompilation()
     const {
 
-#if ANGLE_SH_VERSION >= 122
+#if ANGLE_SH_VERSION >= 123
+  const size_t kNumIntFields = 21;
+#elif ANGLE_SH_VERSION >= 122
   const size_t kNumIntFields = 20;
 #else
   const size_t kNumIntFields = 16;
@@ -261,6 +263,10 @@
       ":EXT_frag_depth:" +
 #if ANGLE_SH_VERSION >= 122
       base::IntToString(compiler_options_.EXT_frag_depth) +
+#if ANGLE_SH_VERSION >= 123
+      ":EXT_shader_texture_lod:" +
+      base::IntToString(compiler_options_.EXT_shader_texture_lod) +
+#endif
       ":MaxVertexOutputVectors:" +
       base::IntToString(compiler_options_.MaxVertexOutputVectors) +
       ":MaxFragmentInputVectors:" +
@@ -269,7 +275,7 @@
       base::IntToString(compiler_options_.MinProgramTexelOffset) +
       ":MaxProgramTexelOffset:" +
       base::IntToString(compiler_options_.MaxProgramTexelOffset));
-#else
+#else   // ANGLE_SH_VERSION < 122
       base::IntToString(compiler_options_.EXT_frag_depth));
 #endif
 }
diff --git a/gpu/command_buffer/service/texture_definition.cc b/gpu/command_buffer/service/texture_definition.cc
index 9b31dac..24382f0 100644
--- a/gpu/command_buffer/service/texture_definition.cc
+++ b/gpu/command_buffer/service/texture_definition.cc
@@ -101,7 +101,9 @@
   static scoped_refptr<NativeImageBufferEGL> Create(GLuint texture_id);
 
  private:
-  explicit NativeImageBufferEGL(EGLDisplay display, EGLImageKHR image);
+  NativeImageBufferEGL(scoped_ptr<gfx::GLFence> write_fence,
+                       EGLDisplay display,
+                       EGLImageKHR image);
   virtual ~NativeImageBufferEGL();
   virtual void BindToTexture(GLenum target) OVERRIDE;
 
@@ -136,12 +138,16 @@
   if (egl_image == EGL_NO_IMAGE_KHR)
     return NULL;
 
-  return new NativeImageBufferEGL(egl_display, egl_image);
+  return new NativeImageBufferEGL(
+      make_scoped_ptr(gfx::GLFence::Create()), egl_display, egl_image);
 }
 
-NativeImageBufferEGL::NativeImageBufferEGL(EGLDisplay display,
+NativeImageBufferEGL::NativeImageBufferEGL(scoped_ptr<gfx::GLFence> write_fence,
+                                           EGLDisplay display,
                                            EGLImageKHR image)
-    : egl_display_(display), egl_image_(image) {
+    : NativeImageBuffer(write_fence.Pass()),
+      egl_display_(display),
+      egl_image_(image) {
   DCHECK(egl_display_ != EGL_NO_DISPLAY);
   DCHECK(egl_image_ != EGL_NO_IMAGE_KHR);
 }
@@ -161,7 +167,7 @@
 
 class NativeImageBufferStub : public NativeImageBuffer {
  public:
-  NativeImageBufferStub() {}
+  NativeImageBufferStub() : NativeImageBuffer(scoped_ptr<gfx::GLFence>()) {}
 
  private:
   virtual ~NativeImageBufferStub() {}
@@ -192,8 +198,8 @@
 
 NativeImageBuffer::ClientInfo::~ClientInfo() {}
 
-NativeImageBuffer::NativeImageBuffer() : write_client_(NULL) {
-  write_fence_.reset(gfx::GLFence::Create());
+NativeImageBuffer::NativeImageBuffer(scoped_ptr<gfx::GLFence> write_fence)
+    : write_fence_(write_fence.Pass()), write_client_(NULL) {
 }
 
 NativeImageBuffer::~NativeImageBuffer() {
diff --git a/gpu/command_buffer/service/texture_definition.h b/gpu/command_buffer/service/texture_definition.h
index 27ae6a3..7708902 100644
--- a/gpu/command_buffer/service/texture_definition.h
+++ b/gpu/command_buffer/service/texture_definition.h
@@ -42,7 +42,7 @@
 
  protected:
   friend class base::RefCountedThreadSafe<NativeImageBuffer>;
-  NativeImageBuffer();
+  explicit NativeImageBuffer(scoped_ptr<gfx::GLFence> write_fence);
   virtual ~NativeImageBuffer();
 
   base::Lock lock_;
diff --git a/gpu/command_buffer/service/texture_manager.cc b/gpu/command_buffer/service/texture_manager.cc
index 8f7703b..c3a824c 100644
--- a/gpu/command_buffer/service/texture_manager.cc
+++ b/gpu/command_buffer/service/texture_manager.cc
@@ -66,9 +66,8 @@
 TextureManager::DestructionObserver::~DestructionObserver() {}
 
 TextureManager::~TextureManager() {
-  FOR_EACH_OBSERVER(DestructionObserver,
-                    destruction_observers_,
-                    OnTextureManagerDestroying(this));
+  for (unsigned int i = 0; i < destruction_observers_.size(); i++)
+    destruction_observers_[i]->OnTextureManagerDestroying(this);
 
   DCHECK(textures_.empty());
 
@@ -873,7 +872,8 @@
                        Texture* texture)
     : manager_(manager),
       texture_(texture),
-      client_id_(client_id) {
+      client_id_(client_id),
+      num_observers_(0) {
   DCHECK(manager_);
   DCHECK(texture_);
   texture_->AddTextureRef(this);
@@ -1222,9 +1222,12 @@
 }
 
 void TextureManager::StopTracking(TextureRef* ref) {
-  FOR_EACH_OBSERVER(DestructionObserver,
-                    destruction_observers_,
-                    OnTextureRefDestroying(ref));
+  if (ref->num_observers()) {
+    for (unsigned int i = 0; i < destruction_observers_.size(); i++) {
+      destruction_observers_[i]->OnTextureRefDestroying(ref);
+    }
+    DCHECK_EQ(ref->num_observers(), 0);
+  }
 
   Texture* texture = ref->texture();
 
diff --git a/gpu/command_buffer/service/texture_manager.h b/gpu/command_buffer/service/texture_manager.h
index 8513264..6b3a32e 100644
--- a/gpu/command_buffer/service/texture_manager.h
+++ b/gpu/command_buffer/service/texture_manager.h
@@ -13,7 +13,6 @@
 #include "base/containers/hash_tables.h"
 #include "base/logging.h"
 #include "base/memory/ref_counted.h"
-#include "base/observer_list.h"
 #include "gpu/command_buffer/service/async_pixel_transfer_delegate.h"
 #include "gpu/command_buffer/service/gl_utils.h"
 #include "gpu/command_buffer/service/memory_tracking.h"
@@ -404,10 +403,15 @@
   static scoped_refptr<TextureRef> Create(TextureManager* manager,
                                           GLuint client_id,
                                           GLuint service_id);
+
+  void AddObserver() { num_observers_++; }
+  void RemoveObserver() { num_observers_--; }
+
   const Texture* texture() const { return texture_; }
   Texture* texture() { return texture_; }
   GLuint client_id() const { return client_id_; }
   GLuint service_id() const { return texture_->service_id(); }
+  GLint num_observers() const { return num_observers_; }
 
  private:
   friend class base::RefCounted<TextureRef>;
@@ -422,6 +426,7 @@
   TextureManager* manager_;
   Texture* texture_;
   GLuint client_id_;
+  GLint num_observers_;
 
   DISALLOW_COPY_AND_ASSIGN(TextureRef);
 };
@@ -682,11 +687,18 @@
       std::string* signature) const;
 
   void AddObserver(DestructionObserver* observer) {
-    destruction_observers_.AddObserver(observer);
+    destruction_observers_.push_back(observer);
   }
 
   void RemoveObserver(DestructionObserver* observer) {
-    destruction_observers_.RemoveObserver(observer);
+    for (unsigned int i = 0; i < destruction_observers_.size(); i++) {
+      if (destruction_observers_[i] == observer) {
+        std::swap(destruction_observers_[i], destruction_observers_.back());
+        destruction_observers_.pop_back();
+        return;
+      }
+    }
+    NOTREACHED();
   }
 
   struct DoTextImage2DArguments {
@@ -796,7 +808,7 @@
   // The default textures for each target (texture name = 0)
   scoped_refptr<TextureRef> default_textures_[kNumDefaultTextures];
 
-  ObserverList<DestructionObserver> destruction_observers_;
+  std::vector<DestructionObserver*> destruction_observers_;
 
   DISALLOW_COPY_AND_ASSIGN(TextureManager);
 };
diff --git a/gpu/command_buffer/service/vertex_array_manager.cc b/gpu/command_buffer/service/vertex_array_manager.cc
index 9747519..1560c04 100644
--- a/gpu/command_buffer/service/vertex_array_manager.cc
+++ b/gpu/command_buffer/service/vertex_array_manager.cc
@@ -28,14 +28,22 @@
   vertex_attrib_managers_.clear();
 }
 
-void VertexArrayManager::CreateVertexAttribManager(
-    GLuint client_id, GLuint service_id, uint32 num_vertex_attribs) {
+scoped_refptr<VertexAttribManager>
+VertexArrayManager::CreateVertexAttribManager(GLuint client_id,
+                                              GLuint service_id,
+                                              uint32 num_vertex_attribs,
+                                              bool client_visible) {
   scoped_refptr<VertexAttribManager> vertex_attrib_manager(
     new VertexAttribManager(this, service_id, num_vertex_attribs));
-  std::pair<VertexAttribManagerMap::iterator, bool> result =
-      vertex_attrib_managers_.insert(
-      std::make_pair(client_id, vertex_attrib_manager));
-  DCHECK(result.second);
+
+  if (client_visible) {
+    std::pair<VertexAttribManagerMap::iterator, bool> result =
+        vertex_attrib_managers_.insert(
+            std::make_pair(client_id, vertex_attrib_manager));
+    DCHECK(result.second);
+  }
+
+  return vertex_attrib_manager;
 }
 
 VertexAttribManager* VertexArrayManager::GetVertexAttribManager(
diff --git a/gpu/command_buffer/service/vertex_array_manager.h b/gpu/command_buffer/service/vertex_array_manager.h
index 4fc567c..97ecc1a 100644
--- a/gpu/command_buffer/service/vertex_array_manager.h
+++ b/gpu/command_buffer/service/vertex_array_manager.h
@@ -28,9 +28,13 @@
   // Must call before destruction.
   void Destroy(bool have_context);
 
-  // Creates a VertexArrayInfo for the given vertex array.
-  void CreateVertexAttribManager(GLuint client_id, GLuint service_id,
-      uint32 num_vertex_attribs);
+  // Creates a VertexAttribManager and if client_visible,
+  // maps it to the client_id.
+  scoped_refptr<VertexAttribManager> CreateVertexAttribManager(
+      GLuint client_id,
+      GLuint service_id,
+      uint32 num_vertex_attribs,
+      bool client_visible);
 
   // Gets the vertex attrib manager for the given vertex array.
   VertexAttribManager* GetVertexAttribManager(GLuint client_id);
diff --git a/gpu/command_buffer/service/vertex_array_manager_unittest.cc b/gpu/command_buffer/service/vertex_array_manager_unittest.cc
index 3e3fd89..617a5f6 100644
--- a/gpu/command_buffer/service/vertex_array_manager_unittest.cc
+++ b/gpu/command_buffer/service/vertex_array_manager_unittest.cc
@@ -58,7 +58,7 @@
 
   // Check we can create
   manager_->CreateVertexAttribManager(
-      kClient1Id, kService1Id, kNumVertexAttribs);
+      kClient1Id, kService1Id, kNumVertexAttribs, true);
   // Check creation success
   VertexAttribManager* info1 = manager_->GetVertexAttribManager(kClient1Id);
   ASSERT_TRUE(info1 != NULL);
@@ -84,7 +84,8 @@
   const GLuint kService1Id = 11;
   VertexArrayManager manager;
   // Check we can create
-  manager.CreateVertexAttribManager(kClient1Id, kService1Id, kNumVertexAttribs);
+  manager.CreateVertexAttribManager(
+      kClient1Id, kService1Id, kNumVertexAttribs, true);
   // Check creation success
   VertexAttribManager* info1 = manager.GetVertexAttribManager(kClient1Id);
   ASSERT_TRUE(info1 != NULL);
diff --git a/gpu/command_buffer/tests/gl_manager.cc b/gpu/command_buffer/tests/gl_manager.cc
index 473ac6f..3211a35 100644
--- a/gpu/command_buffer/tests/gl_manager.cc
+++ b/gpu/command_buffer/tests/gl_manager.cc
@@ -142,15 +142,15 @@
   surface_ = gfx::GLSurface::CreateOffscreenGLSurface(options.size);
   ASSERT_TRUE(surface_.get() != NULL) << "could not create offscreen surface";
 
-  if (real_gl_context) {
+  if (base_context_) {
     context_ = scoped_refptr<gfx::GLContext>(new gpu::GLContextVirtual(
-        share_group_.get(), real_gl_context, decoder_->AsWeakPtr()));
+        share_group_.get(), base_context_->get(), decoder_->AsWeakPtr()));
     ASSERT_TRUE(context_->Initialize(
         surface_.get(), gfx::PreferIntegratedGpu));
   } else {
-    if (base_context_) {
+    if (real_gl_context) {
       context_ = scoped_refptr<gfx::GLContext>(new gpu::GLContextVirtual(
-          share_group_.get(), base_context_->get(), decoder_->AsWeakPtr()));
+          share_group_.get(), real_gl_context, decoder_->AsWeakPtr()));
       ASSERT_TRUE(context_->Initialize(
           surface_.get(), gfx::PreferIntegratedGpu));
     } else {
diff --git a/gpu/command_buffer/tests/gl_virtual_contexts_unittest.cc b/gpu/command_buffer/tests/gl_virtual_contexts_unittest.cc
index 1776ff1..17cfa9f 100644
--- a/gpu/command_buffer/tests/gl_virtual_contexts_unittest.cc
+++ b/gpu/command_buffer/tests/gl_virtual_contexts_unittest.cc
@@ -21,6 +21,11 @@
   static const int kSize1 = 8;
   static const int kSize2 = 16;
 
+  static const GLfloat kFloatRed[4];
+  static const GLfloat kFloatGreen[4];
+  static const uint8 kExpectedRed[4];
+  static const uint8 kExpectedGreen[4];
+
   virtual void SetUp() {
     GLManager::Options options;
     options.size = gfx::Size(kSize0, kSize0);
@@ -40,15 +45,61 @@
     gl_real_.Destroy();
   }
 
+  GLuint SetupColoredVertexProgram() {
+    static const char* v_shader_str = SHADER(
+        attribute vec4 a_position;
+        attribute vec4 a_color;
+        varying vec4 v_color;
+        void main()
+        {
+           gl_Position = a_position;
+           v_color = a_color;
+        }
+     );
+
+    static const char* f_shader_str = SHADER(
+        precision mediump float;
+        varying vec4 v_color;
+        void main()
+        {
+          gl_FragColor = v_color;
+        }
+    );
+
+    GLuint program = GLTestHelper::LoadProgram(v_shader_str, f_shader_str);
+    glUseProgram(program);
+    return program;
+  }
+
+  void SetUpColoredUnitQuad(const GLfloat* color) {
+    GLuint program1 = SetupColoredVertexProgram();
+    GLuint position_loc1 = glGetAttribLocation(program1, "a_position");
+    GLuint color_loc1 = glGetAttribLocation(program1, "a_color");
+    GLTestHelper::SetupUnitQuad(position_loc1);
+    GLTestHelper::SetupColorsForUnitQuad(color_loc1, color, GL_STATIC_DRAW);
+  }
+
   GLManager gl_real_;
   GLManager gl_real_shared_;
   GLManager gl1_;
   GLManager gl2_;
 };
 
+const GLfloat GLVirtualContextsTest::kFloatRed[4] = {
+    1.0f, 0.0f, 0.0f, 1.0f,
+};
+const GLfloat GLVirtualContextsTest::kFloatGreen[4] = {
+    0.0f, 1.0f, 0.0f, 1.0f,
+};
+const uint8 GLVirtualContextsTest::kExpectedRed[4] = {
+    255, 0, 0, 255,
+};
+const uint8 GLVirtualContextsTest::kExpectedGreen[4] = {
+    0, 255, 0, 255,
+};
+
 namespace {
 
-#if !defined(OS_ANDROID)
 void SetupSimpleShader(const uint8* color) {
   static const char* v_shader_str = SHADER(
       attribute vec4 a_Position;
@@ -91,12 +142,9 @@
   glDrawArrays(GL_TRIANGLES, 0, 6);
 }
 
-#endif  // !defined(OS_ANDROID)
-
 }  // anonymous namespace
 
 // http://crbug.com/281565
-#if !defined(OS_ANDROID)
 TEST_F(GLVirtualContextsTest, Basic) {
   struct TestInfo {
     int size;
@@ -139,7 +187,118 @@
     GLTestHelper::CheckGLError("no errors", __LINE__);
   }
 }
-#endif
+
+// http://crbug.com/363407
+TEST_F(GLVirtualContextsTest, VertexArrayObjectRestore) {
+  GLuint vao1 = 0, vao2 = 0;
+
+  gl1_.MakeCurrent();
+  // Set up red quad in vao1.
+  glGenVertexArraysOES(1, &vao1);
+  glBindVertexArrayOES(vao1);
+  SetUpColoredUnitQuad(kFloatRed);
+  glFinish();
+
+  gl2_.MakeCurrent();
+  // Set up green quad in vao2.
+  glGenVertexArraysOES(1, &vao2);
+  glBindVertexArrayOES(vao2);
+  SetUpColoredUnitQuad(kFloatGreen);
+  glFinish();
+
+  gl1_.MakeCurrent();
+  // Test to ensure that vao1 is still the active VAO for this context.
+  glDrawArrays(GL_TRIANGLES, 0, 6);
+  EXPECT_TRUE(GLTestHelper::CheckPixels(0, 0, kSize1, kSize1, 0, kExpectedRed));
+  glFinish();
+  GLTestHelper::CheckGLError("no errors", __LINE__);
+
+  gl2_.MakeCurrent();
+  // Test to ensure that vao2 is still the active VAO for this context.
+  glDrawArrays(GL_TRIANGLES, 0, 6);
+  EXPECT_TRUE(
+      GLTestHelper::CheckPixels(0, 0, kSize2, kSize2, 0, kExpectedGreen));
+  glFinish();
+  GLTestHelper::CheckGLError("no errors", __LINE__);
+}
+
+// http://crbug.com/363407
+TEST_F(GLVirtualContextsTest, VertexArrayObjectRestoreRebind) {
+  GLuint vao1 = 0, vao2 = 0;
+
+  gl1_.MakeCurrent();
+  // Set up red quad in vao1.
+  glGenVertexArraysOES(1, &vao1);
+  glBindVertexArrayOES(vao1);
+  SetUpColoredUnitQuad(kFloatRed);
+  glFinish();
+
+  gl2_.MakeCurrent();
+  // Set up green quad in new vao2.
+  glGenVertexArraysOES(1, &vao2);
+  glBindVertexArrayOES(vao2);
+  SetUpColoredUnitQuad(kFloatGreen);
+  glFinish();
+
+  gl1_.MakeCurrent();
+  // Test to ensure that vao1 hasn't been corrupted after rebinding.
+  // Bind 0 is required so that bind vao1 is not optimized away in the service.
+  glBindVertexArrayOES(0);
+  glBindVertexArrayOES(vao1);
+  glDrawArrays(GL_TRIANGLES, 0, 6);
+  EXPECT_TRUE(GLTestHelper::CheckPixels(0, 0, kSize1, kSize1, 0, kExpectedRed));
+  glFinish();
+  GLTestHelper::CheckGLError("no errors", __LINE__);
+
+  gl2_.MakeCurrent();
+  // Test to ensure that vao1 hasn't been corrupted after rebinding.
+  // Bind 0 is required so that bind vao2 is not optimized away in the service.
+  glBindVertexArrayOES(0);
+  glBindVertexArrayOES(vao2);
+  glDrawArrays(GL_TRIANGLES, 0, 6);
+  EXPECT_TRUE(
+      GLTestHelper::CheckPixels(0, 0, kSize2, kSize2, 0, kExpectedGreen));
+  glFinish();
+
+  GLTestHelper::CheckGLError("no errors", __LINE__);
+}
+
+// http://crbug.com/363407
+TEST_F(GLVirtualContextsTest, VertexArrayObjectRestoreDefault) {
+  gl1_.MakeCurrent();
+  // Set up red quad in default VAO.
+  SetUpColoredUnitQuad(kFloatRed);
+  glFinish();
+
+  gl2_.MakeCurrent();
+  // Set up green quad in default VAO.
+  SetUpColoredUnitQuad(kFloatGreen);
+  glFinish();
+
+  // Gen & bind a non-default VAO.
+  GLuint vao;
+  glGenVertexArraysOES(1, &vao);
+  glBindVertexArrayOES(vao);
+  glFinish();
+
+  gl1_.MakeCurrent();
+  // Test to ensure that default VAO on gl1_ is still valid.
+  glDrawArrays(GL_TRIANGLES, 0, 6);
+  EXPECT_TRUE(GLTestHelper::CheckPixels(0, 0, kSize1, kSize1, 0, kExpectedRed));
+  glFinish();
+
+  gl2_.MakeCurrent();
+  // Test to ensure that default VAO on gl2_ is still valid.
+  // This tests that a default VAO is restored even when it's not currently
+  // bound during the context switch.
+  glBindVertexArrayOES(0);
+  glDrawArrays(GL_TRIANGLES, 0, 6);
+  EXPECT_TRUE(
+      GLTestHelper::CheckPixels(0, 0, kSize2, kSize2, 0, kExpectedGreen));
+  glFinish();
+
+  GLTestHelper::CheckGLError("no errors", __LINE__);
+}
 
 }  // namespace gpu
 
diff --git a/gpu/command_buffer_client.target.darwin-arm.mk b/gpu/command_buffer_client.target.darwin-arm.mk
index 27f2b43..86df9b6 100644
--- a/gpu/command_buffer_client.target.darwin-arm.mk
+++ b/gpu/command_buffer_client.target.darwin-arm.mk
@@ -228,7 +228,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/command_buffer_client.target.darwin-mips.mk b/gpu/command_buffer_client.target.darwin-mips.mk
index 2539584..b2262bd 100644
--- a/gpu/command_buffer_client.target.darwin-mips.mk
+++ b/gpu/command_buffer_client.target.darwin-mips.mk
@@ -224,7 +224,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/command_buffer_client.target.darwin-x86.mk b/gpu/command_buffer_client.target.darwin-x86.mk
index c231a66..499d47a 100644
--- a/gpu/command_buffer_client.target.darwin-x86.mk
+++ b/gpu/command_buffer_client.target.darwin-x86.mk
@@ -226,7 +226,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/command_buffer_client.target.darwin-x86_64.mk b/gpu/command_buffer_client.target.darwin-x86_64.mk
index 7889deb..b3ff4f2 100644
--- a/gpu/command_buffer_client.target.darwin-x86_64.mk
+++ b/gpu/command_buffer_client.target.darwin-x86_64.mk
@@ -226,7 +226,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/command_buffer_client.target.linux-arm.mk b/gpu/command_buffer_client.target.linux-arm.mk
index 27f2b43..86df9b6 100644
--- a/gpu/command_buffer_client.target.linux-arm.mk
+++ b/gpu/command_buffer_client.target.linux-arm.mk
@@ -228,7 +228,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/command_buffer_client.target.linux-mips.mk b/gpu/command_buffer_client.target.linux-mips.mk
index 2539584..b2262bd 100644
--- a/gpu/command_buffer_client.target.linux-mips.mk
+++ b/gpu/command_buffer_client.target.linux-mips.mk
@@ -224,7 +224,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/command_buffer_client.target.linux-x86.mk b/gpu/command_buffer_client.target.linux-x86.mk
index c231a66..499d47a 100644
--- a/gpu/command_buffer_client.target.linux-x86.mk
+++ b/gpu/command_buffer_client.target.linux-x86.mk
@@ -226,7 +226,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/command_buffer_client.target.linux-x86_64.mk b/gpu/command_buffer_client.target.linux-x86_64.mk
index 7889deb..b3ff4f2 100644
--- a/gpu/command_buffer_client.target.linux-x86_64.mk
+++ b/gpu/command_buffer_client.target.linux-x86_64.mk
@@ -226,7 +226,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/command_buffer_common.target.darwin-arm.mk b/gpu/command_buffer_common.target.darwin-arm.mk
index 24db8c4..bcdc154 100644
--- a/gpu/command_buffer_common.target.darwin-arm.mk
+++ b/gpu/command_buffer_common.target.darwin-arm.mk
@@ -231,7 +231,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/command_buffer_common.target.darwin-mips.mk b/gpu/command_buffer_common.target.darwin-mips.mk
index 0712582..9954fdd 100644
--- a/gpu/command_buffer_common.target.darwin-mips.mk
+++ b/gpu/command_buffer_common.target.darwin-mips.mk
@@ -227,7 +227,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/command_buffer_common.target.darwin-x86.mk b/gpu/command_buffer_common.target.darwin-x86.mk
index 5b92ce2..59a3a39 100644
--- a/gpu/command_buffer_common.target.darwin-x86.mk
+++ b/gpu/command_buffer_common.target.darwin-x86.mk
@@ -229,7 +229,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/command_buffer_common.target.darwin-x86_64.mk b/gpu/command_buffer_common.target.darwin-x86_64.mk
index a0af3b5..f296568 100644
--- a/gpu/command_buffer_common.target.darwin-x86_64.mk
+++ b/gpu/command_buffer_common.target.darwin-x86_64.mk
@@ -229,7 +229,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/command_buffer_common.target.linux-arm.mk b/gpu/command_buffer_common.target.linux-arm.mk
index 24db8c4..bcdc154 100644
--- a/gpu/command_buffer_common.target.linux-arm.mk
+++ b/gpu/command_buffer_common.target.linux-arm.mk
@@ -231,7 +231,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/command_buffer_common.target.linux-mips.mk b/gpu/command_buffer_common.target.linux-mips.mk
index 0712582..9954fdd 100644
--- a/gpu/command_buffer_common.target.linux-mips.mk
+++ b/gpu/command_buffer_common.target.linux-mips.mk
@@ -227,7 +227,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/command_buffer_common.target.linux-x86.mk b/gpu/command_buffer_common.target.linux-x86.mk
index 5b92ce2..59a3a39 100644
--- a/gpu/command_buffer_common.target.linux-x86.mk
+++ b/gpu/command_buffer_common.target.linux-x86.mk
@@ -229,7 +229,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/command_buffer_common.target.linux-x86_64.mk b/gpu/command_buffer_common.target.linux-x86_64.mk
index a0af3b5..f296568 100644
--- a/gpu/command_buffer_common.target.linux-x86_64.mk
+++ b/gpu/command_buffer_common.target.linux-x86_64.mk
@@ -229,7 +229,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/command_buffer_service.gypi b/gpu/command_buffer_service.gypi
index cd4662d..5dd3962 100644
--- a/gpu/command_buffer_service.gypi
+++ b/gpu/command_buffer_service.gypi
@@ -131,11 +131,6 @@
     'command_buffer/service/vertex_attrib_manager.cc',
   ],
   'conditions': [
-    ['toolkit_uses_gtk == 1', {
-      'dependencies': [
-        '../build/linux/system.gyp:gtk',
-      ],
-    }],
     ['ui_compositor_image_transport==1', {
       'include_dirs': [
         '../third_party/khronos',
diff --git a/gpu/command_buffer_service.target.darwin-arm.mk b/gpu/command_buffer_service.target.darwin-arm.mk
index 294ab20..1a0eb3f 100644
--- a/gpu/command_buffer_service.target.darwin-arm.mk
+++ b/gpu/command_buffer_service.target.darwin-arm.mk
@@ -90,7 +90,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-fno-tree-sra \
 	-fuse-ld=gold \
 	-Wno-psabi \
@@ -143,12 +142,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
@@ -222,7 +224,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-fno-tree-sra \
 	-fuse-ld=gold \
 	-Wno-psabi \
@@ -276,12 +277,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
@@ -362,7 +366,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/command_buffer_service.target.darwin-mips.mk b/gpu/command_buffer_service.target.darwin-mips.mk
index d137b07..5843a2e 100644
--- a/gpu/command_buffer_service.target.darwin-mips.mk
+++ b/gpu/command_buffer_service.target.darwin-mips.mk
@@ -90,7 +90,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-EL \
 	-mhard-float \
 	-ffunction-sections \
@@ -142,12 +141,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
@@ -221,7 +223,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-EL \
 	-mhard-float \
 	-ffunction-sections \
@@ -274,12 +275,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
@@ -358,7 +362,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/command_buffer_service.target.darwin-x86.mk b/gpu/command_buffer_service.target.darwin-x86.mk
index c62123c..dc4e029 100644
--- a/gpu/command_buffer_service.target.darwin-x86.mk
+++ b/gpu/command_buffer_service.target.darwin-x86.mk
@@ -89,7 +89,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-msse2 \
 	-mfpmath=sse \
 	-mmmx \
@@ -144,12 +143,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
@@ -221,7 +223,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-msse2 \
 	-mfpmath=sse \
 	-mmmx \
@@ -277,12 +278,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
@@ -360,7 +364,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/command_buffer_service.target.darwin-x86_64.mk b/gpu/command_buffer_service.target.darwin-x86_64.mk
index a367631..1440f4c 100644
--- a/gpu/command_buffer_service.target.darwin-x86_64.mk
+++ b/gpu/command_buffer_service.target.darwin-x86_64.mk
@@ -91,7 +91,6 @@
 	-pipe \
 	-fPIC \
 	-Wno-unused-local-typedefs \
-	-Wno-unknown-pragmas \
 	-m64 \
 	-march=x86-64 \
 	-fuse-ld=gold \
@@ -144,12 +143,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
@@ -223,7 +225,6 @@
 	-pipe \
 	-fPIC \
 	-Wno-unused-local-typedefs \
-	-Wno-unknown-pragmas \
 	-m64 \
 	-march=x86-64 \
 	-fuse-ld=gold \
@@ -277,12 +278,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
@@ -360,7 +364,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/command_buffer_service.target.linux-arm.mk b/gpu/command_buffer_service.target.linux-arm.mk
index 294ab20..1a0eb3f 100644
--- a/gpu/command_buffer_service.target.linux-arm.mk
+++ b/gpu/command_buffer_service.target.linux-arm.mk
@@ -90,7 +90,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-fno-tree-sra \
 	-fuse-ld=gold \
 	-Wno-psabi \
@@ -143,12 +142,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
@@ -222,7 +224,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-fno-tree-sra \
 	-fuse-ld=gold \
 	-Wno-psabi \
@@ -276,12 +277,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
@@ -362,7 +366,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/command_buffer_service.target.linux-mips.mk b/gpu/command_buffer_service.target.linux-mips.mk
index d137b07..5843a2e 100644
--- a/gpu/command_buffer_service.target.linux-mips.mk
+++ b/gpu/command_buffer_service.target.linux-mips.mk
@@ -90,7 +90,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-EL \
 	-mhard-float \
 	-ffunction-sections \
@@ -142,12 +141,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
@@ -221,7 +223,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-EL \
 	-mhard-float \
 	-ffunction-sections \
@@ -274,12 +275,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
@@ -358,7 +362,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/command_buffer_service.target.linux-x86.mk b/gpu/command_buffer_service.target.linux-x86.mk
index c62123c..dc4e029 100644
--- a/gpu/command_buffer_service.target.linux-x86.mk
+++ b/gpu/command_buffer_service.target.linux-x86.mk
@@ -89,7 +89,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-msse2 \
 	-mfpmath=sse \
 	-mmmx \
@@ -144,12 +143,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
@@ -221,7 +223,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-msse2 \
 	-mfpmath=sse \
 	-mmmx \
@@ -277,12 +278,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
@@ -360,7 +364,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/command_buffer_service.target.linux-x86_64.mk b/gpu/command_buffer_service.target.linux-x86_64.mk
index a367631..1440f4c 100644
--- a/gpu/command_buffer_service.target.linux-x86_64.mk
+++ b/gpu/command_buffer_service.target.linux-x86_64.mk
@@ -91,7 +91,6 @@
 	-pipe \
 	-fPIC \
 	-Wno-unused-local-typedefs \
-	-Wno-unknown-pragmas \
 	-m64 \
 	-march=x86-64 \
 	-fuse-ld=gold \
@@ -144,12 +143,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
@@ -223,7 +225,6 @@
 	-pipe \
 	-fPIC \
 	-Wno-unused-local-typedefs \
-	-Wno-unknown-pragmas \
 	-m64 \
 	-march=x86-64 \
 	-fuse-ld=gold \
@@ -277,12 +278,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
@@ -360,7 +364,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/config/gpu_blacklist.cc b/gpu/config/gpu_blacklist.cc
index 8dae999..8a67c63 100644
--- a/gpu/config/gpu_blacklist.cc
+++ b/gpu/config/gpu_blacklist.cc
@@ -20,8 +20,8 @@
   GpuBlacklist* list = new GpuBlacklist();
   list->AddSupportedFeature("accelerated_2d_canvas",
                             GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS);
-  list->AddSupportedFeature("accelerated_compositing",
-                            GPU_FEATURE_TYPE_ACCELERATED_COMPOSITING);
+  list->AddSupportedFeature("gpu_compositing",
+                            GPU_FEATURE_TYPE_GPU_COMPOSITING);
   list->AddSupportedFeature("webgl",
                             GPU_FEATURE_TYPE_WEBGL);
   list->AddSupportedFeature("flash_3d",
@@ -40,8 +40,8 @@
                             GPU_FEATURE_TYPE_ACCELERATED_VIDEO);
   list->AddSupportedFeature("panel_fitting",
                             GPU_FEATURE_TYPE_PANEL_FITTING);
-  list->AddSupportedFeature("force_compositing_mode",
-                            GPU_FEATURE_TYPE_FORCE_COMPOSITING_MODE);
+  list->AddSupportedFeature("gpu_rasterization",
+                            GPU_FEATURE_TYPE_GPU_RASTERIZATION);
   list->set_supports_feature_type_all(true);
   return list;
 }
diff --git a/gpu/config/gpu_blacklist_unittest.cc b/gpu/config/gpu_blacklist_unittest.cc
index c0f75ca..539f2e6 100644
--- a/gpu/config/gpu_blacklist_unittest.cc
+++ b/gpu/config/gpu_blacklist_unittest.cc
@@ -61,7 +61,8 @@
     gpu_info_.driver_vendor = "NVIDIA";
     gpu_info_.driver_version = "1.6.18";
     gpu_info_.driver_date = "7-14-2009";
-    gpu_info_.machine_model = "MacBookPro 7.1";
+    gpu_info_.machine_model_name = "MacBookPro";
+    gpu_info_.machine_model_version = "7.1";
     gpu_info_.gl_vendor = "NVIDIA Corporation";
     gpu_info_.gl_renderer = "NVIDIA GeForce GT 120 OpenGL Engine";
     gpu_info_.performance_stats.graphics = 5.0;
@@ -91,9 +92,9 @@
                            "accelerated_2d_canvas",
                            GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS)
 
-GPU_BLACKLIST_FEATURE_TEST(AcceleratedCompositing,
-                           "accelerated_compositing",
-                           GPU_FEATURE_TYPE_ACCELERATED_COMPOSITING)
+GPU_BLACKLIST_FEATURE_TEST(GpuCompositing,
+                           "gpu_compositing",
+                           GPU_FEATURE_TYPE_GPU_COMPOSITING)
 
 GPU_BLACKLIST_FEATURE_TEST(WebGL,
                            "webgl",
@@ -131,8 +132,8 @@
                            "panel_fitting",
                            GPU_FEATURE_TYPE_PANEL_FITTING)
 
-GPU_BLACKLIST_FEATURE_TEST(ForceCompositingMode,
-                           "force_compositing_mode",
-                           GPU_FEATURE_TYPE_FORCE_COMPOSITING_MODE)
+GPU_BLACKLIST_FEATURE_TEST(GpuRasterization,
+                           "gpu_rasterization",
+                           GPU_FEATURE_TYPE_GPU_RASTERIZATION)
 
 }  // namespace gpu
diff --git a/gpu/config/gpu_control_list.cc b/gpu/config/gpu_control_list.cc
index 21088a1..b5e37c7 100644
--- a/gpu/config/gpu_control_list.cc
+++ b/gpu/config/gpu_control_list.cc
@@ -243,32 +243,6 @@
   return kOsUnknown;
 }
 
-GpuControlList::MachineModelInfo::MachineModelInfo(
-    const std::string& name_op,
-    const std::string& name_value,
-    const std::string& version_op,
-    const std::string& version_string,
-    const std::string& version_string2) {
-  name_info_.reset(new StringInfo(name_op, name_value));
-  version_info_.reset(new VersionInfo(
-      version_op, std::string(), version_string, version_string2));
-}
-
-GpuControlList::MachineModelInfo::~MachineModelInfo() {}
-
-bool GpuControlList::MachineModelInfo::Contains(
-    const std::string& name, const std::string& version) const {
-  if (!IsValid())
-    return false;
-  if (!name_info_->Contains(name))
-    return false;
-  return version_info_->Contains(version);
-}
-
-bool GpuControlList::MachineModelInfo::IsValid() const {
-  return name_info_->IsValid() && version_info_->IsValid();
-}
-
 GpuControlList::StringInfo::StringInfo(const std::string& string_op,
                                      const std::string& string_value) {
   op_ = StringToOp(string_op);
@@ -500,7 +474,7 @@
   const base::ListValue* device_id_list;
   if (value->GetList("device_id", &device_id_list)) {
     for (size_t i = 0; i < device_id_list->GetSize(); ++i) {
-        std::string device_id;
+      std::string device_id;
       if (!device_id_list->GetString(i, &device_id) ||
           !entry->AddDeviceId(device_id)) {
         LOG(WARNING) << "Malformed device_id entry " << entry->id();
@@ -692,28 +666,31 @@
     dictionary_entry_count++;
   }
 
-  const base::DictionaryValue* machine_model_value = NULL;
-  if (value->GetDictionary("machine_model", &machine_model_value)) {
-    std::string name_op;
-    std::string name_value;
-    const base::DictionaryValue* name = NULL;
-    if (machine_model_value->GetDictionary("name", &name)) {
-      name->GetString(kOp, &name_op);
-      name->GetString("value", &name_value);
+  const base::ListValue* machine_model_name_list;
+  if (value->GetList("machine_model_name", &machine_model_name_list)) {
+    for (size_t i = 0; i < machine_model_name_list->GetSize(); ++i) {
+      std::string model_name;
+      if (!machine_model_name_list->GetString(i, &model_name) ||
+          !entry->AddMachineModelName(model_name)) {
+        LOG(WARNING) << "Malformed machine_model_name entry " << entry->id();
+        return NULL;
+      }
     }
+    dictionary_entry_count++;
+  }
 
+  const base::DictionaryValue* machine_model_version_value = NULL;
+  if (value->GetDictionary(
+          "machine_model_version", &machine_model_version_value)) {
     std::string version_op = "any";
     std::string version_string;
     std::string version_string2;
-    const base::DictionaryValue* version_value = NULL;
-    if (machine_model_value->GetDictionary("version", &version_value)) {
-      version_value->GetString(kOp, &version_op);
-      version_value->GetString("value", &version_string);
-      version_value->GetString("value2", &version_string2);
-    }
-    if (!entry->SetMachineModelInfo(
-            name_op, name_value, version_op, version_string, version_string2)) {
-      LOG(WARNING) << "Malformed machine_model entry " << entry->id();
+    machine_model_version_value->GetString(kOp, &version_op);
+    machine_model_version_value->GetString("value", &version_string);
+    machine_model_version_value->GetString("value2", &version_string2);
+    if (!entry->SetMachineModelVersionInfo(
+            version_op, version_string, version_string2)) {
+      LOG(WARNING) << "Malformed machine_model_version entry " << entry->id();
       return NULL;
     }
     dictionary_entry_count++;
@@ -948,15 +925,21 @@
   return perf_overall_info_->IsValid();
 }
 
-bool GpuControlList::GpuControlListEntry::SetMachineModelInfo(
-    const std::string& name_op,
-    const std::string& name_value,
+bool GpuControlList::GpuControlListEntry::AddMachineModelName(
+    const std::string& model_name) {
+  if (model_name.empty())
+    return false;
+  machine_model_name_list_.push_back(model_name);
+  return true;
+}
+
+bool GpuControlList::GpuControlListEntry::SetMachineModelVersionInfo(
     const std::string& version_op,
     const std::string& version_string,
     const std::string& version_string2) {
-  machine_model_info_.reset(new MachineModelInfo(
-      name_op, name_value, version_op, version_string, version_string2));
-  return machine_model_info_->IsValid();
+  machine_model_version_info_.reset(new VersionInfo(
+      version_op, std::string(), version_string, version_string2));
+  return machine_model_version_info_->IsValid();
 }
 
 bool GpuControlList::GpuControlListEntry::SetGpuCountInfo(
@@ -1138,13 +1121,22 @@
       (gpu_info.performance_stats.overall == 0.0 ||
        !perf_overall_info_->Contains(gpu_info.performance_stats.overall)))
     return false;
-  if (machine_model_info_.get() != NULL) {
-    std::vector<std::string> name_version;
-    base::SplitString(gpu_info.machine_model, ' ', &name_version);
-    if (name_version.size() == 2 &&
-        !machine_model_info_->Contains(name_version[0], name_version[1]))
+  if (!machine_model_name_list_.empty() &&
+      !gpu_info.machine_model_name.empty()) {
+    bool found_match = false;
+    for (size_t ii = 0; ii < machine_model_name_list_.size(); ++ii) {
+      if (machine_model_name_list_[ii] == gpu_info.machine_model_name) {
+        found_match = true;
+        break;
+      }
+    }
+    if (!found_match)
       return false;
   }
+  if (machine_model_version_info_.get() != NULL &&
+      !gpu_info.machine_model_version.empty() &&
+      !machine_model_version_info_->Contains(gpu_info.machine_model_version))
+    return false;
   if (gpu_count_info_.get() != NULL &&
       !gpu_count_info_->Contains(gpu_info.secondary_gpus.size() + 1))
     return false;
diff --git a/gpu/config/gpu_control_list.h b/gpu/config/gpu_control_list.h
index 34d112b..c3f1cf6 100644
--- a/gpu/config/gpu_control_list.h
+++ b/gpu/config/gpu_control_list.h
@@ -265,26 +265,6 @@
     bool value_;
   };
 
-  class GPU_EXPORT MachineModelInfo {
-   public:
-    MachineModelInfo(const std::string& name_op,
-                     const std::string& name_value,
-                     const std::string& version_op,
-                     const std::string& version_string,
-                     const std::string& version_string2);
-    ~MachineModelInfo();
-
-    // Determines if a given name/version is included in the MachineModelInfo.
-    bool Contains(const std::string& name, const std::string& version) const;
-
-    // Determines if the MachineModelInfo contains valid information.
-    bool IsValid() const;
-
-   private:
-    scoped_ptr<StringInfo> name_info_;
-    scoped_ptr<VersionInfo> version_info_;
-  };
-
   class GpuControlListEntry;
   typedef scoped_refptr<GpuControlListEntry> ScopedGpuControlListEntry;
 
@@ -419,11 +399,11 @@
                             const std::string& float_string,
                             const std::string& float_string2);
 
-    bool SetMachineModelInfo(const std::string& name_op,
-                             const std::string& name_value,
-                             const std::string& version_op,
-                             const std::string& version_string,
-                             const std::string& version_string2);
+    bool AddMachineModelName(const std::string& model_name);
+
+    bool SetMachineModelVersionInfo(const std::string& version_op,
+                                    const std::string& version_string,
+                                    const std::string& version_string2);
 
     bool SetGpuCountInfo(const std::string& op,
                          const std::string& int_string,
@@ -469,7 +449,8 @@
     scoped_ptr<FloatInfo> perf_graphics_info_;
     scoped_ptr<FloatInfo> perf_gaming_info_;
     scoped_ptr<FloatInfo> perf_overall_info_;
-    scoped_ptr<MachineModelInfo> machine_model_info_;
+    std::vector<std::string> machine_model_name_list_;
+    scoped_ptr<VersionInfo> machine_model_version_info_;
     scoped_ptr<IntInfo> gpu_count_info_;
     scoped_ptr<BoolInfo> direct_rendering_info_;
     std::set<int> features_;
diff --git a/gpu/config/gpu_control_list_entry_unittest.cc b/gpu/config/gpu_control_list_entry_unittest.cc
index b62be3e..849d201 100644
--- a/gpu/config/gpu_control_list_entry_unittest.cc
+++ b/gpu/config/gpu_control_list_entry_unittest.cc
@@ -56,7 +56,6 @@
     gpu_info_.driver_vendor = "NVIDIA";
     gpu_info_.driver_version = "1.6.18";
     gpu_info_.driver_date = "7-14-2009";
-    gpu_info_.machine_model = "MacBookPro 7.1";
     gpu_info_.gl_vendor = "NVIDIA Corporation";
     gpu_info_.gl_renderer = "NVIDIA GeForce GT 120 OpenGL Engine";
     gpu_info_.performance_stats.graphics = 5.0;
@@ -707,6 +706,72 @@
       GpuControlList::kOsMacosx, "10.6", gpu_info()));
 }
 
+TEST_F(GpuControlListEntryTest, MachineModelName) {
+  const std::string json = LONG_STRING_CONST(
+      {
+        "id": 1,
+        "os": {
+          "type": "android"
+        },
+        "machine_model_name": ["Nexus 4", "XT1032"],
+        "features": [
+          "test_feature_0"
+        ]
+      }
+  );
+  ScopedEntry entry(GetEntryFromString(json));
+  EXPECT_TRUE(entry.get() != NULL);
+  EXPECT_EQ(GpuControlList::kOsAndroid, entry->GetOsType());
+  GPUInfo gpu_info;
+
+  gpu_info.machine_model_name = "Nexus 4";
+  EXPECT_TRUE(entry->Contains(
+      GpuControlList::kOsAndroid, "4.1", gpu_info));
+
+  gpu_info.machine_model_name = "XT1032";
+  EXPECT_TRUE(entry->Contains(
+      GpuControlList::kOsAndroid, "4.1", gpu_info));
+
+  gpu_info.machine_model_name = "XT1032i";
+  EXPECT_FALSE(entry->Contains(
+      GpuControlList::kOsAndroid, "4.1", gpu_info));
+
+  gpu_info.machine_model_name = "Nexus 5";
+  EXPECT_FALSE(entry->Contains(
+      GpuControlList::kOsAndroid, "4.1", gpu_info));
+
+  gpu_info.machine_model_name = "Nexus";
+  EXPECT_FALSE(entry->Contains(
+      GpuControlList::kOsAndroid, "4.1", gpu_info));
+}
+
+TEST_F(GpuControlListEntryTest, MachineModelVersion) {
+  const std::string json = LONG_STRING_CONST(
+      {
+        "id": 1,
+        "os": {
+          "type": "macosx"
+        },
+        "machine_model_name": ["MacBookPro"],
+        "machine_model_version": {
+          "op": "=",
+          "value": "7.1"
+        },
+        "features": [
+          "test_feature_0"
+        ]
+      }
+  );
+  ScopedEntry entry(GetEntryFromString(json));
+  EXPECT_TRUE(entry.get() != NULL);
+  GPUInfo gpu_info;
+  gpu_info.machine_model_name = "MacBookPro";
+  gpu_info.machine_model_version = "7.1";
+  EXPECT_EQ(GpuControlList::kOsMacosx, entry->GetOsType());
+  EXPECT_TRUE(entry->Contains(
+      GpuControlList::kOsMacosx, "10.6", gpu_info));
+}
+
 class GpuControlListEntryDualGPUTest : public GpuControlListEntryTest {
  public:
   GpuControlListEntryDualGPUTest() { }
diff --git a/gpu/config/gpu_control_list_format.txt b/gpu/config/gpu_control_list_format.txt
index 40936b9..8bd0ec1 100644
--- a/gpu/config/gpu_control_list_format.txt
+++ b/gpu/config/gpu_control_list_format.txt
@@ -38,20 +38,21 @@
 // 13. "perf_graphics" is a FLOAT structure (defined below).
 // 14. "perf_gaming" is a FLOAT structure (defined below).
 // 15. "perf_overall" is a FLOAT structure (defined below).
-// 16. "machine_model" contais "name" and an optional "version".  "name" is a
-//     STRING structure and "version" is a VERSION structure (defined below).
-// 17. "gpu_count" is a INT structure (defined below).
-// 18  "cpu_info" is a STRING structure (defined below).
-// 19. "exceptions" is a list of entries.
-// 20. "features" is a list of gpu control list options, which can be
+// 16. "machine_model_name" is an array of strings.  The strings can contain
+//     any characters.
+// 17. "machine_model_version" is a VERSION structure (defined below).
+// 18. "gpu_count" is a INT structure (defined below).
+// 19  "cpu_info" is a STRING structure (defined below).
+// 20. "exceptions" is a list of entries.
+// 21. "features" is a list of gpu control list options, which can be
 //     configured by a specific list. See its *_json.cc file for a list of
 //     supported features. This field is mandatory.
-// 21. "description" has the description of the entry.
-// 22. "webkit_bugs" is an array of associated webkit bug numbers.
-// 23. "cr_bugs" is an array of associated webkit bug numbers.
-// 24. "disabled" is a boolean. If it is present, the entry will be skipped.
+// 22. "description" has the description of the entry.
+// 23. "webkit_bugs" is an array of associated webkit bug numbers.
+// 24. "cr_bugs" is an array of associated webkit bug numbers.
+// 25. "disabled" is a boolean. If it is present, the entry will be skipped.
 //     This can not be used in exceptions.
-// 25. "direct_rendering" is a boolean. If present, this will filter on whether
+// 26. "direct_rendering" is a boolean. If present, this will filter on whether
 // the GL contexts are direct or indirect based on the value.
 //
 // VERSION includes "op", "style", "value", and "value2".  "op" can be any of
diff --git a/gpu/config/gpu_control_list_machine_model_info_unittest.cc b/gpu/config/gpu_control_list_machine_model_info_unittest.cc
deleted file mode 100644
index 9c681a9..0000000
--- a/gpu/config/gpu_control_list_machine_model_info_unittest.cc
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright (c) 2013 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 "gpu/config/gpu_control_list.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace gpu {
-
-class MachineModelInfoTest : public testing::Test {
- public:
-  MachineModelInfoTest() { }
-  virtual ~MachineModelInfoTest() { }
-
-  typedef GpuControlList::MachineModelInfo MachineModelInfo;
-};
-
-TEST_F(MachineModelInfoTest, ValidModelInfo) {
-  const std::string name_op[] = {
-    "contains",
-    "beginwith",
-    "endwith",
-    "="
-  };
-  const std::string version_op[] = {
-    "=",
-    "<",
-    "<=",
-    ">",
-    ">=",
-    "any",
-    "between"
-  };
-  for (size_t i = 0; i < arraysize(name_op); ++i) {
-    for (size_t j = 0; j < arraysize(version_op); ++j) {
-      std::string version1;
-      std::string version2;
-      if (version_op[j] != "any")
-        version1 = "3.14";
-      if (version_op[j] == "between")
-        version2 = "5.4";
-      MachineModelInfo info(name_op[i], "model",
-                            version_op[j], version1, version2);
-      EXPECT_TRUE(info.IsValid());
-    }
-  }
-}
-
-TEST_F(MachineModelInfoTest, ModelComparison) {
-  MachineModelInfo info("=", "model_a", ">", "3.4", std::string());
-  EXPECT_TRUE(info.Contains("model_a", "4"));
-  EXPECT_FALSE(info.Contains("model_b", "4"));
-  EXPECT_FALSE(info.Contains("model_a", "3.2"));
-}
-
-}  // namespace gpu
-
diff --git a/gpu/config/gpu_control_list_unittest.cc b/gpu/config/gpu_control_list_unittest.cc
index 996276a..33c6973 100644
--- a/gpu/config/gpu_control_list_unittest.cc
+++ b/gpu/config/gpu_control_list_unittest.cc
@@ -52,7 +52,8 @@
     gpu_info_.driver_vendor = "NVIDIA";
     gpu_info_.driver_version = "1.6.18";
     gpu_info_.driver_date = "7-14-2009";
-    gpu_info_.machine_model = "MacBookPro 7.1";
+    gpu_info_.machine_model_name = "MacBookPro";
+    gpu_info_.machine_model_version = "7.1";
     gpu_info_.gl_vendor = "NVIDIA Corporation";
     gpu_info_.gl_renderer = "NVIDIA GeForce GT 120 OpenGL Engine";
     gpu_info_.performance_stats.graphics = 5.0;
diff --git a/gpu/config/gpu_driver_bug_list_json.cc b/gpu/config/gpu_driver_bug_list_json.cc
index aee1325..62a9456 100644
--- a/gpu/config/gpu_driver_bug_list_json.cc
+++ b/gpu/config/gpu_driver_bug_list_json.cc
@@ -19,7 +19,7 @@
 {
   "name": "gpu driver bug list",
   // Please update the version number whenever you change this file.
-  "version": "4.10",
+  "version": "5.0",
   "entries": [
     {
       "id": 1,
@@ -656,15 +656,10 @@
           "value": "10.7"
         }
       },
-      "machine_model": {
-        "name": {
-          "op": "=",
-          "value": "MacBookPro"
-        },
-        "version": {
-          "op": "<",
-          "value": "8"
-        }
+      "machine_model_name": ["MacBookPro"],
+      "machine_model_version": {
+        "op": "<",
+        "value": "8"
       },
       "gpu_count": {
         "op": "=",
@@ -919,6 +914,36 @@
       "features": [
         "disable_post_sub_buffers_for_onscreen_surfaces"
       ]
+    },
+    {
+      "id": 69,
+      "description": "Some shaders in Skia need more than the min available vertex and fragment shader uniform vectors in case of OSMesa",
+      "cr_bugs": [174845],
+      "driver_vendor": {
+        "op": "=",
+        "value": "osmesa"
+      },
+      "features": [
+       "max_fragment_uniform_vectors_32",
+       "max_varying_vectors_16",
+       "max_vertex_uniform_vectors_256"
+      ]
+    },
+    {
+      "id": 70,
+      "description": "Disable D3D11 on older nVidia drivers",
+      "cr_bugs": [349929],
+      "os": {
+        "type": "win"
+      },
+      "vendor_id": "0x10de",
+      "driver_version": {
+        "op": "<=",
+        "value": "8.17.12.6973"
+      },
+      "features": [
+        "disable_d3d11"
+      ]
     }
   ]
 }
diff --git a/gpu/config/gpu_driver_bug_list_unittest.cc b/gpu/config/gpu_driver_bug_list_unittest.cc
index 798cdbb..e927e6c 100644
--- a/gpu/config/gpu_driver_bug_list_unittest.cc
+++ b/gpu/config/gpu_driver_bug_list_unittest.cc
@@ -32,7 +32,8 @@
     gpu_info_.driver_vendor = "NVIDIA";
     gpu_info_.driver_version = "1.6.18";
     gpu_info_.driver_date = "7-14-2009";
-    gpu_info_.machine_model = "MacBookPro 7.1";
+    gpu_info_.machine_model_name = "MacBookPro";
+    gpu_info_.machine_model_version = "7.1";
     gpu_info_.gl_vendor = "NVIDIA Corporation";
     gpu_info_.gl_renderer = "NVIDIA GeForce GT 120 OpenGL Engine";
     gpu_info_.performance_stats.graphics = 5.0;
@@ -156,5 +157,56 @@
   EXPECT_EQ(1u, workarounds.count(FORCE_DISCRETE_GPU));
 }
 
+TEST_F(GpuDriverBugListTest, NVIDIANumberingScheme) {
+  const std::string json = LONG_STRING_CONST(
+      {
+        "name": "gpu driver bug list",
+        "version": "0.1",
+        "entries": [
+          {
+            "id": 1,
+            "os": {
+              "type": "win"
+            },
+            "vendor_id": "0x10de",
+            "driver_version": {
+              "op": "<=",
+              "value": "8.17.12.6973"
+            },
+            "features": [
+              "disable_d3d11"
+            ]
+          }
+        ]
+      }
+  );
+
+  scoped_ptr<GpuDriverBugList> list(GpuDriverBugList::Create());
+  EXPECT_TRUE(list->LoadList(json, GpuControlList::kAllOs));
+
+  GPUInfo gpu_info;
+  gpu_info.gl_vendor = "NVIDIA";
+  gpu_info.gl_renderer = "NVIDIA GeForce GT 120 OpenGL Engine";
+  gpu_info.gpu.vendor_id = 0x10de;
+  gpu_info.gpu.device_id = 0x0640;
+
+  // test the same driver version number
+  gpu_info.driver_version = "8.17.12.6973";
+  std::set<int> bugs = list->MakeDecision(
+      GpuControlList::kOsWin, "7.0", gpu_info);
+  EXPECT_EQ(1u, bugs.count(DISABLE_D3D11));
+
+  // test a lower driver version number
+  gpu_info.driver_version = "8.15.11.8647";
+
+  bugs = list->MakeDecision(GpuControlList::kOsWin, "7.0", gpu_info);
+  EXPECT_EQ(1u, bugs.count(DISABLE_D3D11));
+
+  // test a higher driver version number
+  gpu_info.driver_version = "9.18.13.2723";
+  bugs = list->MakeDecision(GpuControlList::kOsWin, "7.0", gpu_info);
+  EXPECT_EQ(0u, bugs.count(DISABLE_D3D11));
+}
+
 }  // namespace gpu
 
diff --git a/gpu/config/gpu_driver_bug_workaround_type.h b/gpu/config/gpu_driver_bug_workaround_type.h
index 85776e2..06fa15b 100644
--- a/gpu/config/gpu_driver_bug_workaround_type.h
+++ b/gpu/config/gpu_driver_bug_workaround_type.h
@@ -62,8 +62,14 @@
          max_cube_map_texture_size_limit_4096)               \
   GPU_OP(MAX_CUBE_MAP_TEXTURE_SIZE_LIMIT_512,                \
          max_cube_map_texture_size_limit_512)                \
+  GPU_OP(MAX_FRAGMENT_UNIFORM_VECTORS_32,                    \
+         max_fragment_uniform_vectors_32)                    \
   GPU_OP(MAX_TEXTURE_SIZE_LIMIT_4096,                        \
          max_texture_size_limit_4096)                        \
+  GPU_OP(MAX_VARYING_VECTORS_16,                             \
+         max_varying_vectors_16)                             \
+  GPU_OP(MAX_VERTEX_UNIFORM_VECTORS_256,                     \
+         max_vertex_uniform_vectors_256)                     \
   GPU_OP(NEEDS_GLSL_BUILT_IN_FUNCTION_EMULATION,             \
          needs_glsl_built_in_function_emulation)             \
   GPU_OP(NEEDS_OFFSCREEN_BUFFER_WORKAROUND,                  \
diff --git a/gpu/config/gpu_feature_type.h b/gpu/config/gpu_feature_type.h
index 8d78191..f023ecb 100644
--- a/gpu/config/gpu_feature_type.h
+++ b/gpu/config/gpu_feature_type.h
@@ -12,7 +12,7 @@
 // If a bit is set to 1, corresponding feature is blacklisted.
 enum GpuFeatureType {
   GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS = 0,
-  GPU_FEATURE_TYPE_ACCELERATED_COMPOSITING,
+  GPU_FEATURE_TYPE_GPU_COMPOSITING,
   GPU_FEATURE_TYPE_WEBGL,
   GPU_FEATURE_TYPE_FLASH3D,
   GPU_FEATURE_TYPE_FLASH_STAGE3D,
@@ -21,8 +21,8 @@
   GPU_FEATURE_TYPE_3D_CSS,
   GPU_FEATURE_TYPE_ACCELERATED_VIDEO,
   GPU_FEATURE_TYPE_PANEL_FITTING,
-  GPU_FEATURE_TYPE_FORCE_COMPOSITING_MODE,
   GPU_FEATURE_TYPE_FLASH_STAGE3D_BASELINE,
+  GPU_FEATURE_TYPE_GPU_RASTERIZATION,
   NUMBER_OF_GPU_FEATURE_TYPES
 };
 
diff --git a/gpu/config/gpu_info.cc b/gpu/config/gpu_info.cc
index 0b5c487..4734a5b 100644
--- a/gpu/config/gpu_info.cc
+++ b/gpu/config/gpu_info.cc
@@ -60,7 +60,8 @@
     std::string driver_date;
     std::string pixel_shader_version;
     std::string vertex_shader_version;
-    std::string machine_model;
+    std::string machine_model_name;
+    std::string machine_model_version;
     std::string gl_version;
     std::string gl_version_string;
     std::string gl_vendor;
@@ -88,7 +89,8 @@
       Fields_Have_Changed_In_GPUInfo_So_Update_Below);
 
   // Required fields (according to DevTools protocol) first.
-  enumerator->AddString("machineModel", machine_model);
+  enumerator->AddString("machineModelName", machine_model_name);
+  enumerator->AddString("machineModelVersion", machine_model_version);
   EnumerateGPUDevice(enumerator, gpu);
   for (size_t ii = 0; ii < secondary_gpus.size(); ++ii) {
     EnumerateGPUDevice(enumerator, secondary_gpus[ii]);
diff --git a/gpu/config/gpu_info.h b/gpu/config/gpu_info.h
index ee4a8b3..096c533 100644
--- a/gpu/config/gpu_info.h
+++ b/gpu/config/gpu_info.h
@@ -100,9 +100,17 @@
   // The version of the vertex shader used by the gpu.
   std::string vertex_shader_version;
 
-  // The machine model identifier with format "name major.minor".
-  // Name should not contain any whitespaces.
-  std::string machine_model;
+  // The machine model identifier. They can contain any character, including
+  // whitespaces.  Currently it is supported on MacOSX and Android.
+  // Android examples: "Naxus 5", "XT1032".
+  // On MacOSX, the version is stripped out of the model identifier, for
+  // example, the original identifier is "MacBookPro7,2", and we put
+  // "MacBookPro" as machine_model_name, and "7.2" as machine_model_version.
+  std::string machine_model_name;
+
+  // The version of the machine model. Currently it is supported on MacOSX.
+  // See machine_model_name's comment.
+  std::string machine_model_version;
 
   // The version of OpenGL we are using.
   // TODO(zmo): should be able to tell if it's GL or GLES.
diff --git a/gpu/config/gpu_info_collector_android.cc b/gpu/config/gpu_info_collector_android.cc
index e2905b0..21c04d1 100644
--- a/gpu/config/gpu_info_collector_android.cc
+++ b/gpu/config/gpu_info_collector_android.cc
@@ -99,7 +99,8 @@
   gpu_info->can_lose_context = false;
   gpu_info->finalized = true;
 
-  gpu_info->machine_model = base::android::BuildInfo::GetInstance()->model();
+  gpu_info->machine_model_name =
+      base::android::BuildInfo::GetInstance()->model();
 
   // Create a short-lived context on the UI thread to collect the GL strings.
   // Make sure we restore the existing context if there is one.
diff --git a/gpu/config/gpu_info_collector_mac.mm b/gpu/config/gpu_info_collector_mac.mm
index ec6a31d..8eff59a 100644
--- a/gpu/config/gpu_info_collector_mac.mm
+++ b/gpu/config/gpu_info_collector_mac.mm
@@ -185,13 +185,12 @@
 CollectInfoResult CollectBasicGraphicsInfo(GPUInfo* gpu_info) {
   DCHECK(gpu_info);
 
-  std::string model_name;
   int32 model_major = 0, model_minor = 0;
   base::mac::ParseModelIdentifier(base::mac::GetModelIdentifier(),
-                                  &model_name, &model_major, &model_minor);
-  base::ReplaceChars(model_name, " ", "_", &gpu_info->machine_model);
-  gpu_info->machine_model += " " + base::IntToString(model_major) +
-                             "." + base::IntToString(model_minor);
+                                  &gpu_info->machine_model_name,
+                                  &model_major, &model_minor);
+  gpu_info->machine_model_version =
+      base::IntToString(model_major) + "." + base::IntToString(model_minor);
 
   bool result = CollectPCIVideoCardInfo(gpu_info);
   return result ? kCollectInfoSuccess : kCollectInfoNonFatalFailure;
diff --git a/gpu/config/gpu_info_collector_x11.cc b/gpu/config/gpu_info_collector_x11.cc
index b1182fa..a603d1d 100644
--- a/gpu/config/gpu_info_collector_x11.cc
+++ b/gpu/config/gpu_info_collector_x11.cc
@@ -125,8 +125,18 @@
        device != NULL; device = device->next) {
     // Fill the IDs and class fields.
     (libpci_loader.pci_fill_info)(device, 33);
-    // TODO(zmo): there might be other classes that qualify as display devices.
-    if (device->device_class != 0x0300)  // Device class is DISPLAY_VGA.
+    bool is_gpu = false;
+    switch (device->device_class) {
+      case PCI_CLASS_DISPLAY_VGA:
+      case PCI_CLASS_DISPLAY_XGA:
+      case PCI_CLASS_DISPLAY_3D:
+        is_gpu = true;
+        break;
+      case PCI_CLASS_DISPLAY_OTHER:
+      default:
+        break;
+    }
+    if (!is_gpu)
       continue;
 
     GPUInfo::GPUDevice gpu;
diff --git a/gpu/config/software_rendering_list_json.cc b/gpu/config/software_rendering_list_json.cc
index 6f1d3d9..4f21182 100644
--- a/gpu/config/software_rendering_list_json.cc
+++ b/gpu/config/software_rendering_list_json.cc
@@ -18,7 +18,7 @@
 {
   "name": "software rendering list",
   // Please update the version number whenever you change this file.
-  "version": "7.6",
+  "version": "8.0",
   "entries": [
     {
       "id": 1,
@@ -949,12 +949,7 @@
           "value": "4.1.2"
         }
       },
-      "machine_model": {
-        "name": {
-          "op": "=",
-          "value": "GT-N7100"
-        }
-      },
+      "machine_model_name": ["GT-N7100"],
       "features": [
         "accelerated_video_decode"
       ]
@@ -966,12 +961,7 @@
       "os": {
         "type": "android"
       },
-      "machine_model": {
-        "name": {
-          "op": "=",
-          "value": "SCH-I545"
-        }
-      },
+      "machine_model_name": ["SCH-I545"],
       "features": [
         "accelerated_video_decode"
       ]
@@ -1131,6 +1121,21 @@
       "features": [
         "all"
       ]
+    },
+    {
+      "id": 96,
+      "description": "GPU rasterization is whitelisted on N4, N5, N7 and Moto X",
+      "cr_bugs": [362779],
+      "exceptions": [
+        {
+          "machine_model_name": ["Nexus 4", "Nexus 5", "Nexus 7",
+                                 "XT1049", "XT1050", "XT1052", "XT1053",
+                                 "XT1055", "XT1056", "XT1058", "XT1060"]
+        }
+      ],
+      "features": [
+        "gpu_rasterization"
+      ]
     }
   ]
 }
diff --git a/gpu/disk_cache_proto.target.darwin-arm.mk b/gpu/disk_cache_proto.target.darwin-arm.mk
index 30ca966..bd23f9e 100644
--- a/gpu/disk_cache_proto.target.darwin-arm.mk
+++ b/gpu/disk_cache_proto.target.darwin-arm.mk
@@ -252,7 +252,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/disk_cache_proto.target.darwin-mips.mk b/gpu/disk_cache_proto.target.darwin-mips.mk
index 3b0ca33..8c20a25 100644
--- a/gpu/disk_cache_proto.target.darwin-mips.mk
+++ b/gpu/disk_cache_proto.target.darwin-mips.mk
@@ -248,7 +248,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/disk_cache_proto.target.darwin-x86.mk b/gpu/disk_cache_proto.target.darwin-x86.mk
index 8d12aa0..322ff8b 100644
--- a/gpu/disk_cache_proto.target.darwin-x86.mk
+++ b/gpu/disk_cache_proto.target.darwin-x86.mk
@@ -250,7 +250,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/disk_cache_proto.target.darwin-x86_64.mk b/gpu/disk_cache_proto.target.darwin-x86_64.mk
index e78fc1d..2483f0b 100644
--- a/gpu/disk_cache_proto.target.darwin-x86_64.mk
+++ b/gpu/disk_cache_proto.target.darwin-x86_64.mk
@@ -250,7 +250,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/disk_cache_proto.target.linux-arm.mk b/gpu/disk_cache_proto.target.linux-arm.mk
index 30ca966..bd23f9e 100644
--- a/gpu/disk_cache_proto.target.linux-arm.mk
+++ b/gpu/disk_cache_proto.target.linux-arm.mk
@@ -252,7 +252,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/disk_cache_proto.target.linux-mips.mk b/gpu/disk_cache_proto.target.linux-mips.mk
index 3b0ca33..8c20a25 100644
--- a/gpu/disk_cache_proto.target.linux-mips.mk
+++ b/gpu/disk_cache_proto.target.linux-mips.mk
@@ -248,7 +248,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/disk_cache_proto.target.linux-x86.mk b/gpu/disk_cache_proto.target.linux-x86.mk
index 8d12aa0..322ff8b 100644
--- a/gpu/disk_cache_proto.target.linux-x86.mk
+++ b/gpu/disk_cache_proto.target.linux-x86.mk
@@ -250,7 +250,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/disk_cache_proto.target.linux-x86_64.mk b/gpu/disk_cache_proto.target.linux-x86_64.mk
index e78fc1d..2483f0b 100644
--- a/gpu/disk_cache_proto.target.linux-x86_64.mk
+++ b/gpu/disk_cache_proto.target.linux-x86_64.mk
@@ -250,7 +250,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/gl_in_process_context.target.darwin-arm.mk b/gpu/gl_in_process_context.target.darwin-arm.mk
new file mode 100644
index 0000000..b6c367f
--- /dev/null
+++ b/gpu/gl_in_process_context.target.darwin-arm.mk
@@ -0,0 +1,286 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := STATIC_LIBRARIES
+LOCAL_MODULE := gpu_gl_in_process_context_gyp
+LOCAL_MODULE_SUFFIX := .a
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
+gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES := \
+	$(call intermediates-dir-for,GYP,gpu_gpu_gyp,,,$(GYP_VAR_PREFIX))/gpu.stamp \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_gl_gl_gyp,,,$(GYP_VAR_PREFIX))/ui_gl_gl_gyp.a
+
+GYP_GENERATED_OUTPUTS :=
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+LOCAL_CPP_EXTENSION := .cc
+LOCAL_GENERATED_SOURCES :=
+
+GYP_COPIED_SOURCE_ORIGIN_DIRS :=
+
+LOCAL_SRC_FILES := \
+	gpu/command_buffer/client/gl_in_process_context.cc
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Debug := \
+	-fstack-protector \
+	--param=ssp-buffer-size=4 \
+	-Werror \
+	-fno-exceptions \
+	-fno-strict-aliasing \
+	-Wall \
+	-Wno-unused-parameter \
+	-Wno-missing-field-initializers \
+	-fvisibility=hidden \
+	-pipe \
+	-fPIC \
+	-fno-tree-sra \
+	-fuse-ld=gold \
+	-Wno-psabi \
+	-ffunction-sections \
+	-funwind-tables \
+	-g \
+	-fstack-protector \
+	-fno-short-enums \
+	-finline-limit=64 \
+	-Wa,--noexecstack \
+	-U_FORTIFY_SOURCE \
+	-Wno-extra \
+	-Wno-ignored-qualifiers \
+	-Wno-type-limits \
+	-Wno-unused-but-set-variable \
+	-Os \
+	-g \
+	-fomit-frame-pointer \
+	-fdata-sections \
+	-ffunction-sections \
+	-funwind-tables
+
+MY_DEFS_Debug := \
+	'-DV8_DEPRECATION_WARNINGS' \
+	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
+	'-D_FILE_OFFSET_BITS=64' \
+	'-DNO_TCMALLOC' \
+	'-DDISABLE_NACL' \
+	'-DCHROMIUM_BUILD' \
+	'-DUSE_LIBJPEG_TURBO=1' \
+	'-DENABLE_WEBRTC=1' \
+	'-DUSE_PROPRIETARY_CODECS' \
+	'-DENABLE_CONFIGURATION_POLICY' \
+	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+	'-DENABLE_EGLIMAGE=1' \
+	'-DCLD_VERSION=1' \
+	'-DENABLE_PRINTING=1' \
+	'-DENABLE_MANAGED_USERS=1' \
+	'-DGL_IN_PROCESS_CONTEXT_IMPLEMENTATION' \
+	'-DMESA_EGL_NO_X11_HEADERS' \
+	'-DUSE_OPENSSL=1' \
+	'-DUSE_OPENSSL_CERTS=1' \
+	'-D__STDC_CONSTANT_MACROS' \
+	'-D__STDC_FORMAT_MACROS' \
+	'-DANDROID' \
+	'-D__GNU_SOURCE=1' \
+	'-DUSE_STLPORT=1' \
+	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+	'-DCHROME_BUILD_ID=""' \
+	'-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
+	'-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
+	'-D_DEBUG'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Debug := \
+	$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+	$(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
+	$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+	$(LOCAL_PATH)/third_party/khronos \
+	$(LOCAL_PATH)/gpu \
+	$(LOCAL_PATH) \
+	$(LOCAL_PATH)/skia/config \
+	$(gyp_shared_intermediate_dir)/ui/gl \
+	$(LOCAL_PATH)/third_party/mesa/src/include \
+	$(PWD)/frameworks/wilhelm/include \
+	$(PWD)/bionic \
+	$(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Debug := \
+	-fno-rtti \
+	-fno-threadsafe-statics \
+	-fvisibility-inlines-hidden \
+	-Wsign-compare \
+	-Wno-abi \
+	-Wno-non-virtual-dtor \
+	-Wno-sign-promo
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Release := \
+	-fstack-protector \
+	--param=ssp-buffer-size=4 \
+	-Werror \
+	-fno-exceptions \
+	-fno-strict-aliasing \
+	-Wall \
+	-Wno-unused-parameter \
+	-Wno-missing-field-initializers \
+	-fvisibility=hidden \
+	-pipe \
+	-fPIC \
+	-fno-tree-sra \
+	-fuse-ld=gold \
+	-Wno-psabi \
+	-ffunction-sections \
+	-funwind-tables \
+	-g \
+	-fstack-protector \
+	-fno-short-enums \
+	-finline-limit=64 \
+	-Wa,--noexecstack \
+	-U_FORTIFY_SOURCE \
+	-Wno-extra \
+	-Wno-ignored-qualifiers \
+	-Wno-type-limits \
+	-Wno-unused-but-set-variable \
+	-Os \
+	-fno-ident \
+	-fdata-sections \
+	-ffunction-sections \
+	-fomit-frame-pointer \
+	-funwind-tables
+
+MY_DEFS_Release := \
+	'-DV8_DEPRECATION_WARNINGS' \
+	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
+	'-D_FILE_OFFSET_BITS=64' \
+	'-DNO_TCMALLOC' \
+	'-DDISABLE_NACL' \
+	'-DCHROMIUM_BUILD' \
+	'-DUSE_LIBJPEG_TURBO=1' \
+	'-DENABLE_WEBRTC=1' \
+	'-DUSE_PROPRIETARY_CODECS' \
+	'-DENABLE_CONFIGURATION_POLICY' \
+	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+	'-DENABLE_EGLIMAGE=1' \
+	'-DCLD_VERSION=1' \
+	'-DENABLE_PRINTING=1' \
+	'-DENABLE_MANAGED_USERS=1' \
+	'-DGL_IN_PROCESS_CONTEXT_IMPLEMENTATION' \
+	'-DMESA_EGL_NO_X11_HEADERS' \
+	'-DUSE_OPENSSL=1' \
+	'-DUSE_OPENSSL_CERTS=1' \
+	'-D__STDC_CONSTANT_MACROS' \
+	'-D__STDC_FORMAT_MACROS' \
+	'-DANDROID' \
+	'-D__GNU_SOURCE=1' \
+	'-DUSE_STLPORT=1' \
+	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+	'-DCHROME_BUILD_ID=""' \
+	'-DNDEBUG' \
+	'-DNVALGRIND' \
+	'-DDYNAMIC_ANNOTATIONS_ENABLED=0' \
+	'-D_FORTIFY_SOURCE=2'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Release := \
+	$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+	$(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
+	$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+	$(LOCAL_PATH)/third_party/khronos \
+	$(LOCAL_PATH)/gpu \
+	$(LOCAL_PATH) \
+	$(LOCAL_PATH)/skia/config \
+	$(gyp_shared_intermediate_dir)/ui/gl \
+	$(LOCAL_PATH)/third_party/mesa/src/include \
+	$(PWD)/frameworks/wilhelm/include \
+	$(PWD)/bionic \
+	$(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Release := \
+	-fno-rtti \
+	-fno-threadsafe-statics \
+	-fvisibility-inlines-hidden \
+	-Wsign-compare \
+	-Wno-abi \
+	-Wno-non-virtual-dtor \
+	-Wno-sign-promo
+
+
+LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION))
+LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))
+LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))
+LOCAL_ASFLAGS := $(LOCAL_CFLAGS)
+### Rules for final target.
+
+LOCAL_LDFLAGS_Debug := \
+	-Wl,-z,now \
+	-Wl,-z,relro \
+	-Wl,--fatal-warnings \
+	-Wl,-z,noexecstack \
+	-fPIC \
+	-Wl,-z,relro \
+	-Wl,-z,now \
+	-fuse-ld=gold \
+	-nostdlib \
+	-Wl,--no-undefined \
+	-Wl,--exclude-libs=ALL \
+	-Wl,--icf=safe \
+	-Wl,--warn-shared-textrel \
+	-Wl,-O1 \
+	-Wl,--as-needed
+
+
+LOCAL_LDFLAGS_Release := \
+	-Wl,-z,now \
+	-Wl,-z,relro \
+	-Wl,--fatal-warnings \
+	-Wl,-z,noexecstack \
+	-fPIC \
+	-Wl,-z,relro \
+	-Wl,-z,now \
+	-fuse-ld=gold \
+	-nostdlib \
+	-Wl,--no-undefined \
+	-Wl,--exclude-libs=ALL \
+	-Wl,--icf=safe \
+	-Wl,-O1 \
+	-Wl,--as-needed \
+	-Wl,--gc-sections \
+	-Wl,--warn-shared-textrel
+
+
+LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
+
+LOCAL_STATIC_LIBRARIES := \
+	ui_gl_gl_gyp
+
+# Enable grouping to fix circular references
+LOCAL_GROUP_STATIC_LIBRARIES := true
+
+LOCAL_SHARED_LIBRARIES := \
+	libstlport \
+	libdl
+
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: gpu_gl_in_process_context_gyp
+
+# Alias gyp target name.
+.PHONY: gl_in_process_context
+gl_in_process_context: gpu_gl_in_process_context_gyp
+
+include $(BUILD_STATIC_LIBRARY)
diff --git a/gpu/gl_in_process_context.target.darwin-mips.mk b/gpu/gl_in_process_context.target.darwin-mips.mk
new file mode 100644
index 0000000..9faf8ae
--- /dev/null
+++ b/gpu/gl_in_process_context.target.darwin-mips.mk
@@ -0,0 +1,280 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := STATIC_LIBRARIES
+LOCAL_MODULE := gpu_gl_in_process_context_gyp
+LOCAL_MODULE_SUFFIX := .a
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
+gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES := \
+	$(call intermediates-dir-for,GYP,gpu_gpu_gyp,,,$(GYP_VAR_PREFIX))/gpu.stamp \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_gl_gl_gyp,,,$(GYP_VAR_PREFIX))/ui_gl_gl_gyp.a
+
+GYP_GENERATED_OUTPUTS :=
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+LOCAL_CPP_EXTENSION := .cc
+LOCAL_GENERATED_SOURCES :=
+
+GYP_COPIED_SOURCE_ORIGIN_DIRS :=
+
+LOCAL_SRC_FILES := \
+	gpu/command_buffer/client/gl_in_process_context.cc
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Debug := \
+	-fstack-protector \
+	--param=ssp-buffer-size=4 \
+	 \
+	-fno-exceptions \
+	-fno-strict-aliasing \
+	-Wall \
+	-Wno-unused-parameter \
+	-Wno-missing-field-initializers \
+	-fvisibility=hidden \
+	-pipe \
+	-fPIC \
+	-EL \
+	-mhard-float \
+	-ffunction-sections \
+	-funwind-tables \
+	-g \
+	-fstack-protector \
+	-fno-short-enums \
+	-finline-limit=64 \
+	-Wa,--noexecstack \
+	-U_FORTIFY_SOURCE \
+	-Wno-extra \
+	-Wno-ignored-qualifiers \
+	-Wno-type-limits \
+	-Wno-unused-but-set-variable \
+	-Os \
+	-g \
+	-fomit-frame-pointer \
+	-fdata-sections \
+	-ffunction-sections \
+	-funwind-tables
+
+MY_DEFS_Debug := \
+	'-DV8_DEPRECATION_WARNINGS' \
+	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
+	'-D_FILE_OFFSET_BITS=64' \
+	'-DNO_TCMALLOC' \
+	'-DDISABLE_NACL' \
+	'-DCHROMIUM_BUILD' \
+	'-DUSE_LIBJPEG_TURBO=1' \
+	'-DENABLE_WEBRTC=1' \
+	'-DUSE_PROPRIETARY_CODECS' \
+	'-DENABLE_CONFIGURATION_POLICY' \
+	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+	'-DENABLE_EGLIMAGE=1' \
+	'-DCLD_VERSION=1' \
+	'-DENABLE_PRINTING=1' \
+	'-DENABLE_MANAGED_USERS=1' \
+	'-DGL_IN_PROCESS_CONTEXT_IMPLEMENTATION' \
+	'-DMESA_EGL_NO_X11_HEADERS' \
+	'-DUSE_OPENSSL=1' \
+	'-DUSE_OPENSSL_CERTS=1' \
+	'-D__STDC_CONSTANT_MACROS' \
+	'-D__STDC_FORMAT_MACROS' \
+	'-DANDROID' \
+	'-D__GNU_SOURCE=1' \
+	'-DUSE_STLPORT=1' \
+	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+	'-DCHROME_BUILD_ID=""' \
+	'-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
+	'-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
+	'-D_DEBUG'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Debug := \
+	$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+	$(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
+	$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+	$(LOCAL_PATH)/third_party/khronos \
+	$(LOCAL_PATH)/gpu \
+	$(LOCAL_PATH) \
+	$(LOCAL_PATH)/skia/config \
+	$(gyp_shared_intermediate_dir)/ui/gl \
+	$(LOCAL_PATH)/third_party/mesa/src/include \
+	$(PWD)/frameworks/wilhelm/include \
+	$(PWD)/bionic \
+	$(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Debug := \
+	-fno-rtti \
+	-fno-threadsafe-statics \
+	-fvisibility-inlines-hidden \
+	-Wsign-compare \
+	-Wno-uninitialized \
+	-Wno-non-virtual-dtor \
+	-Wno-sign-promo
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Release := \
+	-fstack-protector \
+	--param=ssp-buffer-size=4 \
+	 \
+	-fno-exceptions \
+	-fno-strict-aliasing \
+	-Wall \
+	-Wno-unused-parameter \
+	-Wno-missing-field-initializers \
+	-fvisibility=hidden \
+	-pipe \
+	-fPIC \
+	-EL \
+	-mhard-float \
+	-ffunction-sections \
+	-funwind-tables \
+	-g \
+	-fstack-protector \
+	-fno-short-enums \
+	-finline-limit=64 \
+	-Wa,--noexecstack \
+	-U_FORTIFY_SOURCE \
+	-Wno-extra \
+	-Wno-ignored-qualifiers \
+	-Wno-type-limits \
+	-Wno-unused-but-set-variable \
+	-Os \
+	-fno-ident \
+	-fdata-sections \
+	-ffunction-sections \
+	-fomit-frame-pointer \
+	-funwind-tables
+
+MY_DEFS_Release := \
+	'-DV8_DEPRECATION_WARNINGS' \
+	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
+	'-D_FILE_OFFSET_BITS=64' \
+	'-DNO_TCMALLOC' \
+	'-DDISABLE_NACL' \
+	'-DCHROMIUM_BUILD' \
+	'-DUSE_LIBJPEG_TURBO=1' \
+	'-DENABLE_WEBRTC=1' \
+	'-DUSE_PROPRIETARY_CODECS' \
+	'-DENABLE_CONFIGURATION_POLICY' \
+	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+	'-DENABLE_EGLIMAGE=1' \
+	'-DCLD_VERSION=1' \
+	'-DENABLE_PRINTING=1' \
+	'-DENABLE_MANAGED_USERS=1' \
+	'-DGL_IN_PROCESS_CONTEXT_IMPLEMENTATION' \
+	'-DMESA_EGL_NO_X11_HEADERS' \
+	'-DUSE_OPENSSL=1' \
+	'-DUSE_OPENSSL_CERTS=1' \
+	'-D__STDC_CONSTANT_MACROS' \
+	'-D__STDC_FORMAT_MACROS' \
+	'-DANDROID' \
+	'-D__GNU_SOURCE=1' \
+	'-DUSE_STLPORT=1' \
+	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+	'-DCHROME_BUILD_ID=""' \
+	'-DNDEBUG' \
+	'-DNVALGRIND' \
+	'-DDYNAMIC_ANNOTATIONS_ENABLED=0' \
+	'-D_FORTIFY_SOURCE=2'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Release := \
+	$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+	$(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
+	$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+	$(LOCAL_PATH)/third_party/khronos \
+	$(LOCAL_PATH)/gpu \
+	$(LOCAL_PATH) \
+	$(LOCAL_PATH)/skia/config \
+	$(gyp_shared_intermediate_dir)/ui/gl \
+	$(LOCAL_PATH)/third_party/mesa/src/include \
+	$(PWD)/frameworks/wilhelm/include \
+	$(PWD)/bionic \
+	$(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Release := \
+	-fno-rtti \
+	-fno-threadsafe-statics \
+	-fvisibility-inlines-hidden \
+	-Wsign-compare \
+	-Wno-uninitialized \
+	-Wno-non-virtual-dtor \
+	-Wno-sign-promo
+
+
+LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION))
+LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))
+LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))
+LOCAL_ASFLAGS := $(LOCAL_CFLAGS)
+### Rules for final target.
+
+LOCAL_LDFLAGS_Debug := \
+	-Wl,-z,now \
+	-Wl,-z,relro \
+	-Wl,--fatal-warnings \
+	-Wl,-z,noexecstack \
+	-fPIC \
+	-EL \
+	-Wl,--no-keep-memory \
+	-nostdlib \
+	-Wl,--no-undefined \
+	-Wl,--exclude-libs=ALL \
+	-Wl,--warn-shared-textrel \
+	-Wl,-O1 \
+	-Wl,--as-needed
+
+
+LOCAL_LDFLAGS_Release := \
+	-Wl,-z,now \
+	-Wl,-z,relro \
+	-Wl,--fatal-warnings \
+	-Wl,-z,noexecstack \
+	-fPIC \
+	-EL \
+	-Wl,--no-keep-memory \
+	-nostdlib \
+	-Wl,--no-undefined \
+	-Wl,--exclude-libs=ALL \
+	-Wl,-O1 \
+	-Wl,--as-needed \
+	-Wl,--gc-sections \
+	-Wl,--warn-shared-textrel
+
+
+LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
+
+LOCAL_STATIC_LIBRARIES := \
+	ui_gl_gl_gyp
+
+# Enable grouping to fix circular references
+LOCAL_GROUP_STATIC_LIBRARIES := true
+
+LOCAL_SHARED_LIBRARIES := \
+	libstlport \
+	libdl
+
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: gpu_gl_in_process_context_gyp
+
+# Alias gyp target name.
+.PHONY: gl_in_process_context
+gl_in_process_context: gpu_gl_in_process_context_gyp
+
+include $(BUILD_STATIC_LIBRARY)
diff --git a/gpu/gl_in_process_context.target.darwin-x86.mk b/gpu/gl_in_process_context.target.darwin-x86.mk
new file mode 100644
index 0000000..1d0d54b
--- /dev/null
+++ b/gpu/gl_in_process_context.target.darwin-x86.mk
@@ -0,0 +1,282 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := STATIC_LIBRARIES
+LOCAL_MODULE := gpu_gl_in_process_context_gyp
+LOCAL_MODULE_SUFFIX := .a
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
+gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES := \
+	$(call intermediates-dir-for,GYP,gpu_gpu_gyp,,,$(GYP_VAR_PREFIX))/gpu.stamp \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_gl_gl_gyp,,,$(GYP_VAR_PREFIX))/ui_gl_gl_gyp.a
+
+GYP_GENERATED_OUTPUTS :=
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+LOCAL_CPP_EXTENSION := .cc
+LOCAL_GENERATED_SOURCES :=
+
+GYP_COPIED_SOURCE_ORIGIN_DIRS :=
+
+LOCAL_SRC_FILES := \
+	gpu/command_buffer/client/gl_in_process_context.cc
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Debug := \
+	--param=ssp-buffer-size=4 \
+	-Werror \
+	-fno-exceptions \
+	-fno-strict-aliasing \
+	-Wall \
+	-Wno-unused-parameter \
+	-Wno-missing-field-initializers \
+	-fvisibility=hidden \
+	-pipe \
+	-fPIC \
+	-msse2 \
+	-mfpmath=sse \
+	-mmmx \
+	-m32 \
+	-fuse-ld=gold \
+	-ffunction-sections \
+	-funwind-tables \
+	-g \
+	-fno-short-enums \
+	-finline-limit=64 \
+	-Wa,--noexecstack \
+	-U_FORTIFY_SOURCE \
+	-Wno-extra \
+	-Wno-ignored-qualifiers \
+	-Wno-type-limits \
+	-Wno-unused-but-set-variable \
+	-fno-stack-protector \
+	-Os \
+	-g \
+	-fomit-frame-pointer \
+	-fdata-sections \
+	-ffunction-sections \
+	-funwind-tables
+
+MY_DEFS_Debug := \
+	'-DV8_DEPRECATION_WARNINGS' \
+	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
+	'-D_FILE_OFFSET_BITS=64' \
+	'-DNO_TCMALLOC' \
+	'-DDISABLE_NACL' \
+	'-DCHROMIUM_BUILD' \
+	'-DUSE_LIBJPEG_TURBO=1' \
+	'-DENABLE_WEBRTC=1' \
+	'-DUSE_PROPRIETARY_CODECS' \
+	'-DENABLE_CONFIGURATION_POLICY' \
+	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+	'-DENABLE_EGLIMAGE=1' \
+	'-DCLD_VERSION=1' \
+	'-DENABLE_PRINTING=1' \
+	'-DENABLE_MANAGED_USERS=1' \
+	'-DGL_IN_PROCESS_CONTEXT_IMPLEMENTATION' \
+	'-DMESA_EGL_NO_X11_HEADERS' \
+	'-DUSE_OPENSSL=1' \
+	'-DUSE_OPENSSL_CERTS=1' \
+	'-D__STDC_CONSTANT_MACROS' \
+	'-D__STDC_FORMAT_MACROS' \
+	'-DANDROID' \
+	'-D__GNU_SOURCE=1' \
+	'-DUSE_STLPORT=1' \
+	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+	'-DCHROME_BUILD_ID=""' \
+	'-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
+	'-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
+	'-D_DEBUG'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Debug := \
+	$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+	$(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
+	$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+	$(LOCAL_PATH)/third_party/khronos \
+	$(LOCAL_PATH)/gpu \
+	$(LOCAL_PATH) \
+	$(LOCAL_PATH)/skia/config \
+	$(gyp_shared_intermediate_dir)/ui/gl \
+	$(LOCAL_PATH)/third_party/mesa/src/include \
+	$(PWD)/frameworks/wilhelm/include \
+	$(PWD)/bionic \
+	$(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Debug := \
+	-fno-rtti \
+	-fno-threadsafe-statics \
+	-fvisibility-inlines-hidden \
+	-Wsign-compare \
+	-Wno-non-virtual-dtor \
+	-Wno-sign-promo
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Release := \
+	--param=ssp-buffer-size=4 \
+	-Werror \
+	-fno-exceptions \
+	-fno-strict-aliasing \
+	-Wall \
+	-Wno-unused-parameter \
+	-Wno-missing-field-initializers \
+	-fvisibility=hidden \
+	-pipe \
+	-fPIC \
+	-msse2 \
+	-mfpmath=sse \
+	-mmmx \
+	-m32 \
+	-fuse-ld=gold \
+	-ffunction-sections \
+	-funwind-tables \
+	-g \
+	-fno-short-enums \
+	-finline-limit=64 \
+	-Wa,--noexecstack \
+	-U_FORTIFY_SOURCE \
+	-Wno-extra \
+	-Wno-ignored-qualifiers \
+	-Wno-type-limits \
+	-Wno-unused-but-set-variable \
+	-fno-stack-protector \
+	-Os \
+	-fno-ident \
+	-fdata-sections \
+	-ffunction-sections \
+	-fomit-frame-pointer \
+	-funwind-tables
+
+MY_DEFS_Release := \
+	'-DV8_DEPRECATION_WARNINGS' \
+	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
+	'-D_FILE_OFFSET_BITS=64' \
+	'-DNO_TCMALLOC' \
+	'-DDISABLE_NACL' \
+	'-DCHROMIUM_BUILD' \
+	'-DUSE_LIBJPEG_TURBO=1' \
+	'-DENABLE_WEBRTC=1' \
+	'-DUSE_PROPRIETARY_CODECS' \
+	'-DENABLE_CONFIGURATION_POLICY' \
+	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+	'-DENABLE_EGLIMAGE=1' \
+	'-DCLD_VERSION=1' \
+	'-DENABLE_PRINTING=1' \
+	'-DENABLE_MANAGED_USERS=1' \
+	'-DGL_IN_PROCESS_CONTEXT_IMPLEMENTATION' \
+	'-DMESA_EGL_NO_X11_HEADERS' \
+	'-DUSE_OPENSSL=1' \
+	'-DUSE_OPENSSL_CERTS=1' \
+	'-D__STDC_CONSTANT_MACROS' \
+	'-D__STDC_FORMAT_MACROS' \
+	'-DANDROID' \
+	'-D__GNU_SOURCE=1' \
+	'-DUSE_STLPORT=1' \
+	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+	'-DCHROME_BUILD_ID=""' \
+	'-DNDEBUG' \
+	'-DNVALGRIND' \
+	'-DDYNAMIC_ANNOTATIONS_ENABLED=0' \
+	'-D_FORTIFY_SOURCE=2'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Release := \
+	$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+	$(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
+	$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+	$(LOCAL_PATH)/third_party/khronos \
+	$(LOCAL_PATH)/gpu \
+	$(LOCAL_PATH) \
+	$(LOCAL_PATH)/skia/config \
+	$(gyp_shared_intermediate_dir)/ui/gl \
+	$(LOCAL_PATH)/third_party/mesa/src/include \
+	$(PWD)/frameworks/wilhelm/include \
+	$(PWD)/bionic \
+	$(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Release := \
+	-fno-rtti \
+	-fno-threadsafe-statics \
+	-fvisibility-inlines-hidden \
+	-Wsign-compare \
+	-Wno-non-virtual-dtor \
+	-Wno-sign-promo
+
+
+LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION))
+LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))
+LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))
+LOCAL_ASFLAGS := $(LOCAL_CFLAGS)
+### Rules for final target.
+
+LOCAL_LDFLAGS_Debug := \
+	-Wl,-z,now \
+	-Wl,-z,relro \
+	-Wl,--fatal-warnings \
+	-Wl,-z,noexecstack \
+	-fPIC \
+	-m32 \
+	-fuse-ld=gold \
+	-nostdlib \
+	-Wl,--no-undefined \
+	-Wl,--exclude-libs=ALL \
+	-Wl,--warn-shared-textrel \
+	-Wl,-O1 \
+	-Wl,--as-needed
+
+
+LOCAL_LDFLAGS_Release := \
+	-Wl,-z,now \
+	-Wl,-z,relro \
+	-Wl,--fatal-warnings \
+	-Wl,-z,noexecstack \
+	-fPIC \
+	-m32 \
+	-fuse-ld=gold \
+	-nostdlib \
+	-Wl,--no-undefined \
+	-Wl,--exclude-libs=ALL \
+	-Wl,-O1 \
+	-Wl,--as-needed \
+	-Wl,--gc-sections \
+	-Wl,--warn-shared-textrel
+
+
+LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
+
+LOCAL_STATIC_LIBRARIES := \
+	ui_gl_gl_gyp
+
+# Enable grouping to fix circular references
+LOCAL_GROUP_STATIC_LIBRARIES := true
+
+LOCAL_SHARED_LIBRARIES := \
+	libstlport \
+	libdl
+
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: gpu_gl_in_process_context_gyp
+
+# Alias gyp target name.
+.PHONY: gl_in_process_context
+gl_in_process_context: gpu_gl_in_process_context_gyp
+
+include $(BUILD_STATIC_LIBRARY)
diff --git a/gpu/gl_in_process_context.target.darwin-x86_64.mk b/gpu/gl_in_process_context.target.darwin-x86_64.mk
new file mode 100644
index 0000000..2d66906
--- /dev/null
+++ b/gpu/gl_in_process_context.target.darwin-x86_64.mk
@@ -0,0 +1,282 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := STATIC_LIBRARIES
+LOCAL_MODULE := gpu_gl_in_process_context_gyp
+LOCAL_MODULE_SUFFIX := .a
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
+gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES := \
+	$(call intermediates-dir-for,GYP,gpu_gpu_gyp,,,$(GYP_VAR_PREFIX))/gpu.stamp \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_gl_gl_gyp,,,$(GYP_VAR_PREFIX))/ui_gl_gl_gyp.a
+
+GYP_GENERATED_OUTPUTS :=
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+LOCAL_CPP_EXTENSION := .cc
+LOCAL_GENERATED_SOURCES :=
+
+GYP_COPIED_SOURCE_ORIGIN_DIRS :=
+
+LOCAL_SRC_FILES := \
+	gpu/command_buffer/client/gl_in_process_context.cc
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Debug := \
+	-fstack-protector \
+	--param=ssp-buffer-size=4 \
+	-Werror \
+	-fno-exceptions \
+	-fno-strict-aliasing \
+	-Wall \
+	-Wno-unused-parameter \
+	-Wno-missing-field-initializers \
+	-fvisibility=hidden \
+	-pipe \
+	-fPIC \
+	-Wno-unused-local-typedefs \
+	-m64 \
+	-march=x86-64 \
+	-fuse-ld=gold \
+	-ffunction-sections \
+	-funwind-tables \
+	-g \
+	-fstack-protector \
+	-fno-short-enums \
+	-finline-limit=64 \
+	-Wa,--noexecstack \
+	-U_FORTIFY_SOURCE \
+	-Wno-extra \
+	-Wno-ignored-qualifiers \
+	-Wno-type-limits \
+	-Wno-unused-but-set-variable \
+	-Os \
+	-g \
+	-fomit-frame-pointer \
+	-fdata-sections \
+	-ffunction-sections \
+	-funwind-tables
+
+MY_DEFS_Debug := \
+	'-DV8_DEPRECATION_WARNINGS' \
+	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
+	'-D_FILE_OFFSET_BITS=64' \
+	'-DNO_TCMALLOC' \
+	'-DDISABLE_NACL' \
+	'-DCHROMIUM_BUILD' \
+	'-DUSE_LIBJPEG_TURBO=1' \
+	'-DENABLE_WEBRTC=1' \
+	'-DUSE_PROPRIETARY_CODECS' \
+	'-DENABLE_CONFIGURATION_POLICY' \
+	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+	'-DENABLE_EGLIMAGE=1' \
+	'-DCLD_VERSION=1' \
+	'-DENABLE_PRINTING=1' \
+	'-DENABLE_MANAGED_USERS=1' \
+	'-DGL_IN_PROCESS_CONTEXT_IMPLEMENTATION' \
+	'-DMESA_EGL_NO_X11_HEADERS' \
+	'-DUSE_OPENSSL=1' \
+	'-DUSE_OPENSSL_CERTS=1' \
+	'-D__STDC_CONSTANT_MACROS' \
+	'-D__STDC_FORMAT_MACROS' \
+	'-DANDROID' \
+	'-D__GNU_SOURCE=1' \
+	'-DUSE_STLPORT=1' \
+	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+	'-DCHROME_BUILD_ID=""' \
+	'-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
+	'-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
+	'-D_DEBUG'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Debug := \
+	$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+	$(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
+	$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+	$(LOCAL_PATH)/third_party/khronos \
+	$(LOCAL_PATH)/gpu \
+	$(LOCAL_PATH) \
+	$(LOCAL_PATH)/skia/config \
+	$(gyp_shared_intermediate_dir)/ui/gl \
+	$(LOCAL_PATH)/third_party/mesa/src/include \
+	$(PWD)/frameworks/wilhelm/include \
+	$(PWD)/bionic \
+	$(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Debug := \
+	-fno-rtti \
+	-fno-threadsafe-statics \
+	-fvisibility-inlines-hidden \
+	-Wsign-compare \
+	-Wno-non-virtual-dtor \
+	-Wno-sign-promo
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Release := \
+	-fstack-protector \
+	--param=ssp-buffer-size=4 \
+	-Werror \
+	-fno-exceptions \
+	-fno-strict-aliasing \
+	-Wall \
+	-Wno-unused-parameter \
+	-Wno-missing-field-initializers \
+	-fvisibility=hidden \
+	-pipe \
+	-fPIC \
+	-Wno-unused-local-typedefs \
+	-m64 \
+	-march=x86-64 \
+	-fuse-ld=gold \
+	-ffunction-sections \
+	-funwind-tables \
+	-g \
+	-fstack-protector \
+	-fno-short-enums \
+	-finline-limit=64 \
+	-Wa,--noexecstack \
+	-U_FORTIFY_SOURCE \
+	-Wno-extra \
+	-Wno-ignored-qualifiers \
+	-Wno-type-limits \
+	-Wno-unused-but-set-variable \
+	-Os \
+	-fno-ident \
+	-fdata-sections \
+	-ffunction-sections \
+	-fomit-frame-pointer \
+	-funwind-tables
+
+MY_DEFS_Release := \
+	'-DV8_DEPRECATION_WARNINGS' \
+	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
+	'-D_FILE_OFFSET_BITS=64' \
+	'-DNO_TCMALLOC' \
+	'-DDISABLE_NACL' \
+	'-DCHROMIUM_BUILD' \
+	'-DUSE_LIBJPEG_TURBO=1' \
+	'-DENABLE_WEBRTC=1' \
+	'-DUSE_PROPRIETARY_CODECS' \
+	'-DENABLE_CONFIGURATION_POLICY' \
+	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+	'-DENABLE_EGLIMAGE=1' \
+	'-DCLD_VERSION=1' \
+	'-DENABLE_PRINTING=1' \
+	'-DENABLE_MANAGED_USERS=1' \
+	'-DGL_IN_PROCESS_CONTEXT_IMPLEMENTATION' \
+	'-DMESA_EGL_NO_X11_HEADERS' \
+	'-DUSE_OPENSSL=1' \
+	'-DUSE_OPENSSL_CERTS=1' \
+	'-D__STDC_CONSTANT_MACROS' \
+	'-D__STDC_FORMAT_MACROS' \
+	'-DANDROID' \
+	'-D__GNU_SOURCE=1' \
+	'-DUSE_STLPORT=1' \
+	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+	'-DCHROME_BUILD_ID=""' \
+	'-DNDEBUG' \
+	'-DNVALGRIND' \
+	'-DDYNAMIC_ANNOTATIONS_ENABLED=0' \
+	'-D_FORTIFY_SOURCE=2'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Release := \
+	$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+	$(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
+	$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+	$(LOCAL_PATH)/third_party/khronos \
+	$(LOCAL_PATH)/gpu \
+	$(LOCAL_PATH) \
+	$(LOCAL_PATH)/skia/config \
+	$(gyp_shared_intermediate_dir)/ui/gl \
+	$(LOCAL_PATH)/third_party/mesa/src/include \
+	$(PWD)/frameworks/wilhelm/include \
+	$(PWD)/bionic \
+	$(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Release := \
+	-fno-rtti \
+	-fno-threadsafe-statics \
+	-fvisibility-inlines-hidden \
+	-Wsign-compare \
+	-Wno-non-virtual-dtor \
+	-Wno-sign-promo
+
+
+LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION))
+LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))
+LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))
+LOCAL_ASFLAGS := $(LOCAL_CFLAGS)
+### Rules for final target.
+
+LOCAL_LDFLAGS_Debug := \
+	-Wl,-z,now \
+	-Wl,-z,relro \
+	-Wl,--fatal-warnings \
+	-Wl,-z,noexecstack \
+	-fPIC \
+	-m64 \
+	-fuse-ld=gold \
+	-nostdlib \
+	-Wl,--no-undefined \
+	-Wl,--exclude-libs=ALL \
+	-Wl,--warn-shared-textrel \
+	-Wl,-O1 \
+	-Wl,--as-needed
+
+
+LOCAL_LDFLAGS_Release := \
+	-Wl,-z,now \
+	-Wl,-z,relro \
+	-Wl,--fatal-warnings \
+	-Wl,-z,noexecstack \
+	-fPIC \
+	-m64 \
+	-fuse-ld=gold \
+	-nostdlib \
+	-Wl,--no-undefined \
+	-Wl,--exclude-libs=ALL \
+	-Wl,-O1 \
+	-Wl,--as-needed \
+	-Wl,--gc-sections \
+	-Wl,--warn-shared-textrel
+
+
+LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
+
+LOCAL_STATIC_LIBRARIES := \
+	ui_gl_gl_gyp
+
+# Enable grouping to fix circular references
+LOCAL_GROUP_STATIC_LIBRARIES := true
+
+LOCAL_SHARED_LIBRARIES := \
+	libstlport \
+	libdl
+
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: gpu_gl_in_process_context_gyp
+
+# Alias gyp target name.
+.PHONY: gl_in_process_context
+gl_in_process_context: gpu_gl_in_process_context_gyp
+
+include $(BUILD_STATIC_LIBRARY)
diff --git a/gpu/gl_in_process_context.target.linux-arm.mk b/gpu/gl_in_process_context.target.linux-arm.mk
new file mode 100644
index 0000000..b6c367f
--- /dev/null
+++ b/gpu/gl_in_process_context.target.linux-arm.mk
@@ -0,0 +1,286 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := STATIC_LIBRARIES
+LOCAL_MODULE := gpu_gl_in_process_context_gyp
+LOCAL_MODULE_SUFFIX := .a
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
+gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES := \
+	$(call intermediates-dir-for,GYP,gpu_gpu_gyp,,,$(GYP_VAR_PREFIX))/gpu.stamp \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_gl_gl_gyp,,,$(GYP_VAR_PREFIX))/ui_gl_gl_gyp.a
+
+GYP_GENERATED_OUTPUTS :=
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+LOCAL_CPP_EXTENSION := .cc
+LOCAL_GENERATED_SOURCES :=
+
+GYP_COPIED_SOURCE_ORIGIN_DIRS :=
+
+LOCAL_SRC_FILES := \
+	gpu/command_buffer/client/gl_in_process_context.cc
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Debug := \
+	-fstack-protector \
+	--param=ssp-buffer-size=4 \
+	-Werror \
+	-fno-exceptions \
+	-fno-strict-aliasing \
+	-Wall \
+	-Wno-unused-parameter \
+	-Wno-missing-field-initializers \
+	-fvisibility=hidden \
+	-pipe \
+	-fPIC \
+	-fno-tree-sra \
+	-fuse-ld=gold \
+	-Wno-psabi \
+	-ffunction-sections \
+	-funwind-tables \
+	-g \
+	-fstack-protector \
+	-fno-short-enums \
+	-finline-limit=64 \
+	-Wa,--noexecstack \
+	-U_FORTIFY_SOURCE \
+	-Wno-extra \
+	-Wno-ignored-qualifiers \
+	-Wno-type-limits \
+	-Wno-unused-but-set-variable \
+	-Os \
+	-g \
+	-fomit-frame-pointer \
+	-fdata-sections \
+	-ffunction-sections \
+	-funwind-tables
+
+MY_DEFS_Debug := \
+	'-DV8_DEPRECATION_WARNINGS' \
+	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
+	'-D_FILE_OFFSET_BITS=64' \
+	'-DNO_TCMALLOC' \
+	'-DDISABLE_NACL' \
+	'-DCHROMIUM_BUILD' \
+	'-DUSE_LIBJPEG_TURBO=1' \
+	'-DENABLE_WEBRTC=1' \
+	'-DUSE_PROPRIETARY_CODECS' \
+	'-DENABLE_CONFIGURATION_POLICY' \
+	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+	'-DENABLE_EGLIMAGE=1' \
+	'-DCLD_VERSION=1' \
+	'-DENABLE_PRINTING=1' \
+	'-DENABLE_MANAGED_USERS=1' \
+	'-DGL_IN_PROCESS_CONTEXT_IMPLEMENTATION' \
+	'-DMESA_EGL_NO_X11_HEADERS' \
+	'-DUSE_OPENSSL=1' \
+	'-DUSE_OPENSSL_CERTS=1' \
+	'-D__STDC_CONSTANT_MACROS' \
+	'-D__STDC_FORMAT_MACROS' \
+	'-DANDROID' \
+	'-D__GNU_SOURCE=1' \
+	'-DUSE_STLPORT=1' \
+	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+	'-DCHROME_BUILD_ID=""' \
+	'-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
+	'-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
+	'-D_DEBUG'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Debug := \
+	$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+	$(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
+	$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+	$(LOCAL_PATH)/third_party/khronos \
+	$(LOCAL_PATH)/gpu \
+	$(LOCAL_PATH) \
+	$(LOCAL_PATH)/skia/config \
+	$(gyp_shared_intermediate_dir)/ui/gl \
+	$(LOCAL_PATH)/third_party/mesa/src/include \
+	$(PWD)/frameworks/wilhelm/include \
+	$(PWD)/bionic \
+	$(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Debug := \
+	-fno-rtti \
+	-fno-threadsafe-statics \
+	-fvisibility-inlines-hidden \
+	-Wsign-compare \
+	-Wno-abi \
+	-Wno-non-virtual-dtor \
+	-Wno-sign-promo
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Release := \
+	-fstack-protector \
+	--param=ssp-buffer-size=4 \
+	-Werror \
+	-fno-exceptions \
+	-fno-strict-aliasing \
+	-Wall \
+	-Wno-unused-parameter \
+	-Wno-missing-field-initializers \
+	-fvisibility=hidden \
+	-pipe \
+	-fPIC \
+	-fno-tree-sra \
+	-fuse-ld=gold \
+	-Wno-psabi \
+	-ffunction-sections \
+	-funwind-tables \
+	-g \
+	-fstack-protector \
+	-fno-short-enums \
+	-finline-limit=64 \
+	-Wa,--noexecstack \
+	-U_FORTIFY_SOURCE \
+	-Wno-extra \
+	-Wno-ignored-qualifiers \
+	-Wno-type-limits \
+	-Wno-unused-but-set-variable \
+	-Os \
+	-fno-ident \
+	-fdata-sections \
+	-ffunction-sections \
+	-fomit-frame-pointer \
+	-funwind-tables
+
+MY_DEFS_Release := \
+	'-DV8_DEPRECATION_WARNINGS' \
+	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
+	'-D_FILE_OFFSET_BITS=64' \
+	'-DNO_TCMALLOC' \
+	'-DDISABLE_NACL' \
+	'-DCHROMIUM_BUILD' \
+	'-DUSE_LIBJPEG_TURBO=1' \
+	'-DENABLE_WEBRTC=1' \
+	'-DUSE_PROPRIETARY_CODECS' \
+	'-DENABLE_CONFIGURATION_POLICY' \
+	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+	'-DENABLE_EGLIMAGE=1' \
+	'-DCLD_VERSION=1' \
+	'-DENABLE_PRINTING=1' \
+	'-DENABLE_MANAGED_USERS=1' \
+	'-DGL_IN_PROCESS_CONTEXT_IMPLEMENTATION' \
+	'-DMESA_EGL_NO_X11_HEADERS' \
+	'-DUSE_OPENSSL=1' \
+	'-DUSE_OPENSSL_CERTS=1' \
+	'-D__STDC_CONSTANT_MACROS' \
+	'-D__STDC_FORMAT_MACROS' \
+	'-DANDROID' \
+	'-D__GNU_SOURCE=1' \
+	'-DUSE_STLPORT=1' \
+	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+	'-DCHROME_BUILD_ID=""' \
+	'-DNDEBUG' \
+	'-DNVALGRIND' \
+	'-DDYNAMIC_ANNOTATIONS_ENABLED=0' \
+	'-D_FORTIFY_SOURCE=2'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Release := \
+	$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+	$(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
+	$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+	$(LOCAL_PATH)/third_party/khronos \
+	$(LOCAL_PATH)/gpu \
+	$(LOCAL_PATH) \
+	$(LOCAL_PATH)/skia/config \
+	$(gyp_shared_intermediate_dir)/ui/gl \
+	$(LOCAL_PATH)/third_party/mesa/src/include \
+	$(PWD)/frameworks/wilhelm/include \
+	$(PWD)/bionic \
+	$(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Release := \
+	-fno-rtti \
+	-fno-threadsafe-statics \
+	-fvisibility-inlines-hidden \
+	-Wsign-compare \
+	-Wno-abi \
+	-Wno-non-virtual-dtor \
+	-Wno-sign-promo
+
+
+LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION))
+LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))
+LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))
+LOCAL_ASFLAGS := $(LOCAL_CFLAGS)
+### Rules for final target.
+
+LOCAL_LDFLAGS_Debug := \
+	-Wl,-z,now \
+	-Wl,-z,relro \
+	-Wl,--fatal-warnings \
+	-Wl,-z,noexecstack \
+	-fPIC \
+	-Wl,-z,relro \
+	-Wl,-z,now \
+	-fuse-ld=gold \
+	-nostdlib \
+	-Wl,--no-undefined \
+	-Wl,--exclude-libs=ALL \
+	-Wl,--icf=safe \
+	-Wl,--warn-shared-textrel \
+	-Wl,-O1 \
+	-Wl,--as-needed
+
+
+LOCAL_LDFLAGS_Release := \
+	-Wl,-z,now \
+	-Wl,-z,relro \
+	-Wl,--fatal-warnings \
+	-Wl,-z,noexecstack \
+	-fPIC \
+	-Wl,-z,relro \
+	-Wl,-z,now \
+	-fuse-ld=gold \
+	-nostdlib \
+	-Wl,--no-undefined \
+	-Wl,--exclude-libs=ALL \
+	-Wl,--icf=safe \
+	-Wl,-O1 \
+	-Wl,--as-needed \
+	-Wl,--gc-sections \
+	-Wl,--warn-shared-textrel
+
+
+LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
+
+LOCAL_STATIC_LIBRARIES := \
+	ui_gl_gl_gyp
+
+# Enable grouping to fix circular references
+LOCAL_GROUP_STATIC_LIBRARIES := true
+
+LOCAL_SHARED_LIBRARIES := \
+	libstlport \
+	libdl
+
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: gpu_gl_in_process_context_gyp
+
+# Alias gyp target name.
+.PHONY: gl_in_process_context
+gl_in_process_context: gpu_gl_in_process_context_gyp
+
+include $(BUILD_STATIC_LIBRARY)
diff --git a/gpu/gl_in_process_context.target.linux-mips.mk b/gpu/gl_in_process_context.target.linux-mips.mk
new file mode 100644
index 0000000..9faf8ae
--- /dev/null
+++ b/gpu/gl_in_process_context.target.linux-mips.mk
@@ -0,0 +1,280 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := STATIC_LIBRARIES
+LOCAL_MODULE := gpu_gl_in_process_context_gyp
+LOCAL_MODULE_SUFFIX := .a
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
+gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES := \
+	$(call intermediates-dir-for,GYP,gpu_gpu_gyp,,,$(GYP_VAR_PREFIX))/gpu.stamp \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_gl_gl_gyp,,,$(GYP_VAR_PREFIX))/ui_gl_gl_gyp.a
+
+GYP_GENERATED_OUTPUTS :=
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+LOCAL_CPP_EXTENSION := .cc
+LOCAL_GENERATED_SOURCES :=
+
+GYP_COPIED_SOURCE_ORIGIN_DIRS :=
+
+LOCAL_SRC_FILES := \
+	gpu/command_buffer/client/gl_in_process_context.cc
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Debug := \
+	-fstack-protector \
+	--param=ssp-buffer-size=4 \
+	 \
+	-fno-exceptions \
+	-fno-strict-aliasing \
+	-Wall \
+	-Wno-unused-parameter \
+	-Wno-missing-field-initializers \
+	-fvisibility=hidden \
+	-pipe \
+	-fPIC \
+	-EL \
+	-mhard-float \
+	-ffunction-sections \
+	-funwind-tables \
+	-g \
+	-fstack-protector \
+	-fno-short-enums \
+	-finline-limit=64 \
+	-Wa,--noexecstack \
+	-U_FORTIFY_SOURCE \
+	-Wno-extra \
+	-Wno-ignored-qualifiers \
+	-Wno-type-limits \
+	-Wno-unused-but-set-variable \
+	-Os \
+	-g \
+	-fomit-frame-pointer \
+	-fdata-sections \
+	-ffunction-sections \
+	-funwind-tables
+
+MY_DEFS_Debug := \
+	'-DV8_DEPRECATION_WARNINGS' \
+	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
+	'-D_FILE_OFFSET_BITS=64' \
+	'-DNO_TCMALLOC' \
+	'-DDISABLE_NACL' \
+	'-DCHROMIUM_BUILD' \
+	'-DUSE_LIBJPEG_TURBO=1' \
+	'-DENABLE_WEBRTC=1' \
+	'-DUSE_PROPRIETARY_CODECS' \
+	'-DENABLE_CONFIGURATION_POLICY' \
+	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+	'-DENABLE_EGLIMAGE=1' \
+	'-DCLD_VERSION=1' \
+	'-DENABLE_PRINTING=1' \
+	'-DENABLE_MANAGED_USERS=1' \
+	'-DGL_IN_PROCESS_CONTEXT_IMPLEMENTATION' \
+	'-DMESA_EGL_NO_X11_HEADERS' \
+	'-DUSE_OPENSSL=1' \
+	'-DUSE_OPENSSL_CERTS=1' \
+	'-D__STDC_CONSTANT_MACROS' \
+	'-D__STDC_FORMAT_MACROS' \
+	'-DANDROID' \
+	'-D__GNU_SOURCE=1' \
+	'-DUSE_STLPORT=1' \
+	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+	'-DCHROME_BUILD_ID=""' \
+	'-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
+	'-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
+	'-D_DEBUG'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Debug := \
+	$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+	$(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
+	$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+	$(LOCAL_PATH)/third_party/khronos \
+	$(LOCAL_PATH)/gpu \
+	$(LOCAL_PATH) \
+	$(LOCAL_PATH)/skia/config \
+	$(gyp_shared_intermediate_dir)/ui/gl \
+	$(LOCAL_PATH)/third_party/mesa/src/include \
+	$(PWD)/frameworks/wilhelm/include \
+	$(PWD)/bionic \
+	$(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Debug := \
+	-fno-rtti \
+	-fno-threadsafe-statics \
+	-fvisibility-inlines-hidden \
+	-Wsign-compare \
+	-Wno-uninitialized \
+	-Wno-non-virtual-dtor \
+	-Wno-sign-promo
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Release := \
+	-fstack-protector \
+	--param=ssp-buffer-size=4 \
+	 \
+	-fno-exceptions \
+	-fno-strict-aliasing \
+	-Wall \
+	-Wno-unused-parameter \
+	-Wno-missing-field-initializers \
+	-fvisibility=hidden \
+	-pipe \
+	-fPIC \
+	-EL \
+	-mhard-float \
+	-ffunction-sections \
+	-funwind-tables \
+	-g \
+	-fstack-protector \
+	-fno-short-enums \
+	-finline-limit=64 \
+	-Wa,--noexecstack \
+	-U_FORTIFY_SOURCE \
+	-Wno-extra \
+	-Wno-ignored-qualifiers \
+	-Wno-type-limits \
+	-Wno-unused-but-set-variable \
+	-Os \
+	-fno-ident \
+	-fdata-sections \
+	-ffunction-sections \
+	-fomit-frame-pointer \
+	-funwind-tables
+
+MY_DEFS_Release := \
+	'-DV8_DEPRECATION_WARNINGS' \
+	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
+	'-D_FILE_OFFSET_BITS=64' \
+	'-DNO_TCMALLOC' \
+	'-DDISABLE_NACL' \
+	'-DCHROMIUM_BUILD' \
+	'-DUSE_LIBJPEG_TURBO=1' \
+	'-DENABLE_WEBRTC=1' \
+	'-DUSE_PROPRIETARY_CODECS' \
+	'-DENABLE_CONFIGURATION_POLICY' \
+	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+	'-DENABLE_EGLIMAGE=1' \
+	'-DCLD_VERSION=1' \
+	'-DENABLE_PRINTING=1' \
+	'-DENABLE_MANAGED_USERS=1' \
+	'-DGL_IN_PROCESS_CONTEXT_IMPLEMENTATION' \
+	'-DMESA_EGL_NO_X11_HEADERS' \
+	'-DUSE_OPENSSL=1' \
+	'-DUSE_OPENSSL_CERTS=1' \
+	'-D__STDC_CONSTANT_MACROS' \
+	'-D__STDC_FORMAT_MACROS' \
+	'-DANDROID' \
+	'-D__GNU_SOURCE=1' \
+	'-DUSE_STLPORT=1' \
+	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+	'-DCHROME_BUILD_ID=""' \
+	'-DNDEBUG' \
+	'-DNVALGRIND' \
+	'-DDYNAMIC_ANNOTATIONS_ENABLED=0' \
+	'-D_FORTIFY_SOURCE=2'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Release := \
+	$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+	$(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
+	$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+	$(LOCAL_PATH)/third_party/khronos \
+	$(LOCAL_PATH)/gpu \
+	$(LOCAL_PATH) \
+	$(LOCAL_PATH)/skia/config \
+	$(gyp_shared_intermediate_dir)/ui/gl \
+	$(LOCAL_PATH)/third_party/mesa/src/include \
+	$(PWD)/frameworks/wilhelm/include \
+	$(PWD)/bionic \
+	$(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Release := \
+	-fno-rtti \
+	-fno-threadsafe-statics \
+	-fvisibility-inlines-hidden \
+	-Wsign-compare \
+	-Wno-uninitialized \
+	-Wno-non-virtual-dtor \
+	-Wno-sign-promo
+
+
+LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION))
+LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))
+LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))
+LOCAL_ASFLAGS := $(LOCAL_CFLAGS)
+### Rules for final target.
+
+LOCAL_LDFLAGS_Debug := \
+	-Wl,-z,now \
+	-Wl,-z,relro \
+	-Wl,--fatal-warnings \
+	-Wl,-z,noexecstack \
+	-fPIC \
+	-EL \
+	-Wl,--no-keep-memory \
+	-nostdlib \
+	-Wl,--no-undefined \
+	-Wl,--exclude-libs=ALL \
+	-Wl,--warn-shared-textrel \
+	-Wl,-O1 \
+	-Wl,--as-needed
+
+
+LOCAL_LDFLAGS_Release := \
+	-Wl,-z,now \
+	-Wl,-z,relro \
+	-Wl,--fatal-warnings \
+	-Wl,-z,noexecstack \
+	-fPIC \
+	-EL \
+	-Wl,--no-keep-memory \
+	-nostdlib \
+	-Wl,--no-undefined \
+	-Wl,--exclude-libs=ALL \
+	-Wl,-O1 \
+	-Wl,--as-needed \
+	-Wl,--gc-sections \
+	-Wl,--warn-shared-textrel
+
+
+LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
+
+LOCAL_STATIC_LIBRARIES := \
+	ui_gl_gl_gyp
+
+# Enable grouping to fix circular references
+LOCAL_GROUP_STATIC_LIBRARIES := true
+
+LOCAL_SHARED_LIBRARIES := \
+	libstlport \
+	libdl
+
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: gpu_gl_in_process_context_gyp
+
+# Alias gyp target name.
+.PHONY: gl_in_process_context
+gl_in_process_context: gpu_gl_in_process_context_gyp
+
+include $(BUILD_STATIC_LIBRARY)
diff --git a/gpu/gl_in_process_context.target.linux-x86.mk b/gpu/gl_in_process_context.target.linux-x86.mk
new file mode 100644
index 0000000..1d0d54b
--- /dev/null
+++ b/gpu/gl_in_process_context.target.linux-x86.mk
@@ -0,0 +1,282 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := STATIC_LIBRARIES
+LOCAL_MODULE := gpu_gl_in_process_context_gyp
+LOCAL_MODULE_SUFFIX := .a
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
+gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES := \
+	$(call intermediates-dir-for,GYP,gpu_gpu_gyp,,,$(GYP_VAR_PREFIX))/gpu.stamp \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_gl_gl_gyp,,,$(GYP_VAR_PREFIX))/ui_gl_gl_gyp.a
+
+GYP_GENERATED_OUTPUTS :=
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+LOCAL_CPP_EXTENSION := .cc
+LOCAL_GENERATED_SOURCES :=
+
+GYP_COPIED_SOURCE_ORIGIN_DIRS :=
+
+LOCAL_SRC_FILES := \
+	gpu/command_buffer/client/gl_in_process_context.cc
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Debug := \
+	--param=ssp-buffer-size=4 \
+	-Werror \
+	-fno-exceptions \
+	-fno-strict-aliasing \
+	-Wall \
+	-Wno-unused-parameter \
+	-Wno-missing-field-initializers \
+	-fvisibility=hidden \
+	-pipe \
+	-fPIC \
+	-msse2 \
+	-mfpmath=sse \
+	-mmmx \
+	-m32 \
+	-fuse-ld=gold \
+	-ffunction-sections \
+	-funwind-tables \
+	-g \
+	-fno-short-enums \
+	-finline-limit=64 \
+	-Wa,--noexecstack \
+	-U_FORTIFY_SOURCE \
+	-Wno-extra \
+	-Wno-ignored-qualifiers \
+	-Wno-type-limits \
+	-Wno-unused-but-set-variable \
+	-fno-stack-protector \
+	-Os \
+	-g \
+	-fomit-frame-pointer \
+	-fdata-sections \
+	-ffunction-sections \
+	-funwind-tables
+
+MY_DEFS_Debug := \
+	'-DV8_DEPRECATION_WARNINGS' \
+	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
+	'-D_FILE_OFFSET_BITS=64' \
+	'-DNO_TCMALLOC' \
+	'-DDISABLE_NACL' \
+	'-DCHROMIUM_BUILD' \
+	'-DUSE_LIBJPEG_TURBO=1' \
+	'-DENABLE_WEBRTC=1' \
+	'-DUSE_PROPRIETARY_CODECS' \
+	'-DENABLE_CONFIGURATION_POLICY' \
+	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+	'-DENABLE_EGLIMAGE=1' \
+	'-DCLD_VERSION=1' \
+	'-DENABLE_PRINTING=1' \
+	'-DENABLE_MANAGED_USERS=1' \
+	'-DGL_IN_PROCESS_CONTEXT_IMPLEMENTATION' \
+	'-DMESA_EGL_NO_X11_HEADERS' \
+	'-DUSE_OPENSSL=1' \
+	'-DUSE_OPENSSL_CERTS=1' \
+	'-D__STDC_CONSTANT_MACROS' \
+	'-D__STDC_FORMAT_MACROS' \
+	'-DANDROID' \
+	'-D__GNU_SOURCE=1' \
+	'-DUSE_STLPORT=1' \
+	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+	'-DCHROME_BUILD_ID=""' \
+	'-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
+	'-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
+	'-D_DEBUG'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Debug := \
+	$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+	$(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
+	$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+	$(LOCAL_PATH)/third_party/khronos \
+	$(LOCAL_PATH)/gpu \
+	$(LOCAL_PATH) \
+	$(LOCAL_PATH)/skia/config \
+	$(gyp_shared_intermediate_dir)/ui/gl \
+	$(LOCAL_PATH)/third_party/mesa/src/include \
+	$(PWD)/frameworks/wilhelm/include \
+	$(PWD)/bionic \
+	$(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Debug := \
+	-fno-rtti \
+	-fno-threadsafe-statics \
+	-fvisibility-inlines-hidden \
+	-Wsign-compare \
+	-Wno-non-virtual-dtor \
+	-Wno-sign-promo
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Release := \
+	--param=ssp-buffer-size=4 \
+	-Werror \
+	-fno-exceptions \
+	-fno-strict-aliasing \
+	-Wall \
+	-Wno-unused-parameter \
+	-Wno-missing-field-initializers \
+	-fvisibility=hidden \
+	-pipe \
+	-fPIC \
+	-msse2 \
+	-mfpmath=sse \
+	-mmmx \
+	-m32 \
+	-fuse-ld=gold \
+	-ffunction-sections \
+	-funwind-tables \
+	-g \
+	-fno-short-enums \
+	-finline-limit=64 \
+	-Wa,--noexecstack \
+	-U_FORTIFY_SOURCE \
+	-Wno-extra \
+	-Wno-ignored-qualifiers \
+	-Wno-type-limits \
+	-Wno-unused-but-set-variable \
+	-fno-stack-protector \
+	-Os \
+	-fno-ident \
+	-fdata-sections \
+	-ffunction-sections \
+	-fomit-frame-pointer \
+	-funwind-tables
+
+MY_DEFS_Release := \
+	'-DV8_DEPRECATION_WARNINGS' \
+	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
+	'-D_FILE_OFFSET_BITS=64' \
+	'-DNO_TCMALLOC' \
+	'-DDISABLE_NACL' \
+	'-DCHROMIUM_BUILD' \
+	'-DUSE_LIBJPEG_TURBO=1' \
+	'-DENABLE_WEBRTC=1' \
+	'-DUSE_PROPRIETARY_CODECS' \
+	'-DENABLE_CONFIGURATION_POLICY' \
+	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+	'-DENABLE_EGLIMAGE=1' \
+	'-DCLD_VERSION=1' \
+	'-DENABLE_PRINTING=1' \
+	'-DENABLE_MANAGED_USERS=1' \
+	'-DGL_IN_PROCESS_CONTEXT_IMPLEMENTATION' \
+	'-DMESA_EGL_NO_X11_HEADERS' \
+	'-DUSE_OPENSSL=1' \
+	'-DUSE_OPENSSL_CERTS=1' \
+	'-D__STDC_CONSTANT_MACROS' \
+	'-D__STDC_FORMAT_MACROS' \
+	'-DANDROID' \
+	'-D__GNU_SOURCE=1' \
+	'-DUSE_STLPORT=1' \
+	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+	'-DCHROME_BUILD_ID=""' \
+	'-DNDEBUG' \
+	'-DNVALGRIND' \
+	'-DDYNAMIC_ANNOTATIONS_ENABLED=0' \
+	'-D_FORTIFY_SOURCE=2'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Release := \
+	$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+	$(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
+	$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+	$(LOCAL_PATH)/third_party/khronos \
+	$(LOCAL_PATH)/gpu \
+	$(LOCAL_PATH) \
+	$(LOCAL_PATH)/skia/config \
+	$(gyp_shared_intermediate_dir)/ui/gl \
+	$(LOCAL_PATH)/third_party/mesa/src/include \
+	$(PWD)/frameworks/wilhelm/include \
+	$(PWD)/bionic \
+	$(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Release := \
+	-fno-rtti \
+	-fno-threadsafe-statics \
+	-fvisibility-inlines-hidden \
+	-Wsign-compare \
+	-Wno-non-virtual-dtor \
+	-Wno-sign-promo
+
+
+LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION))
+LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))
+LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))
+LOCAL_ASFLAGS := $(LOCAL_CFLAGS)
+### Rules for final target.
+
+LOCAL_LDFLAGS_Debug := \
+	-Wl,-z,now \
+	-Wl,-z,relro \
+	-Wl,--fatal-warnings \
+	-Wl,-z,noexecstack \
+	-fPIC \
+	-m32 \
+	-fuse-ld=gold \
+	-nostdlib \
+	-Wl,--no-undefined \
+	-Wl,--exclude-libs=ALL \
+	-Wl,--warn-shared-textrel \
+	-Wl,-O1 \
+	-Wl,--as-needed
+
+
+LOCAL_LDFLAGS_Release := \
+	-Wl,-z,now \
+	-Wl,-z,relro \
+	-Wl,--fatal-warnings \
+	-Wl,-z,noexecstack \
+	-fPIC \
+	-m32 \
+	-fuse-ld=gold \
+	-nostdlib \
+	-Wl,--no-undefined \
+	-Wl,--exclude-libs=ALL \
+	-Wl,-O1 \
+	-Wl,--as-needed \
+	-Wl,--gc-sections \
+	-Wl,--warn-shared-textrel
+
+
+LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
+
+LOCAL_STATIC_LIBRARIES := \
+	ui_gl_gl_gyp
+
+# Enable grouping to fix circular references
+LOCAL_GROUP_STATIC_LIBRARIES := true
+
+LOCAL_SHARED_LIBRARIES := \
+	libstlport \
+	libdl
+
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: gpu_gl_in_process_context_gyp
+
+# Alias gyp target name.
+.PHONY: gl_in_process_context
+gl_in_process_context: gpu_gl_in_process_context_gyp
+
+include $(BUILD_STATIC_LIBRARY)
diff --git a/gpu/gl_in_process_context.target.linux-x86_64.mk b/gpu/gl_in_process_context.target.linux-x86_64.mk
new file mode 100644
index 0000000..2d66906
--- /dev/null
+++ b/gpu/gl_in_process_context.target.linux-x86_64.mk
@@ -0,0 +1,282 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := STATIC_LIBRARIES
+LOCAL_MODULE := gpu_gl_in_process_context_gyp
+LOCAL_MODULE_SUFFIX := .a
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
+gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES := \
+	$(call intermediates-dir-for,GYP,gpu_gpu_gyp,,,$(GYP_VAR_PREFIX))/gpu.stamp \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_gl_gl_gyp,,,$(GYP_VAR_PREFIX))/ui_gl_gl_gyp.a
+
+GYP_GENERATED_OUTPUTS :=
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+LOCAL_CPP_EXTENSION := .cc
+LOCAL_GENERATED_SOURCES :=
+
+GYP_COPIED_SOURCE_ORIGIN_DIRS :=
+
+LOCAL_SRC_FILES := \
+	gpu/command_buffer/client/gl_in_process_context.cc
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Debug := \
+	-fstack-protector \
+	--param=ssp-buffer-size=4 \
+	-Werror \
+	-fno-exceptions \
+	-fno-strict-aliasing \
+	-Wall \
+	-Wno-unused-parameter \
+	-Wno-missing-field-initializers \
+	-fvisibility=hidden \
+	-pipe \
+	-fPIC \
+	-Wno-unused-local-typedefs \
+	-m64 \
+	-march=x86-64 \
+	-fuse-ld=gold \
+	-ffunction-sections \
+	-funwind-tables \
+	-g \
+	-fstack-protector \
+	-fno-short-enums \
+	-finline-limit=64 \
+	-Wa,--noexecstack \
+	-U_FORTIFY_SOURCE \
+	-Wno-extra \
+	-Wno-ignored-qualifiers \
+	-Wno-type-limits \
+	-Wno-unused-but-set-variable \
+	-Os \
+	-g \
+	-fomit-frame-pointer \
+	-fdata-sections \
+	-ffunction-sections \
+	-funwind-tables
+
+MY_DEFS_Debug := \
+	'-DV8_DEPRECATION_WARNINGS' \
+	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
+	'-D_FILE_OFFSET_BITS=64' \
+	'-DNO_TCMALLOC' \
+	'-DDISABLE_NACL' \
+	'-DCHROMIUM_BUILD' \
+	'-DUSE_LIBJPEG_TURBO=1' \
+	'-DENABLE_WEBRTC=1' \
+	'-DUSE_PROPRIETARY_CODECS' \
+	'-DENABLE_CONFIGURATION_POLICY' \
+	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+	'-DENABLE_EGLIMAGE=1' \
+	'-DCLD_VERSION=1' \
+	'-DENABLE_PRINTING=1' \
+	'-DENABLE_MANAGED_USERS=1' \
+	'-DGL_IN_PROCESS_CONTEXT_IMPLEMENTATION' \
+	'-DMESA_EGL_NO_X11_HEADERS' \
+	'-DUSE_OPENSSL=1' \
+	'-DUSE_OPENSSL_CERTS=1' \
+	'-D__STDC_CONSTANT_MACROS' \
+	'-D__STDC_FORMAT_MACROS' \
+	'-DANDROID' \
+	'-D__GNU_SOURCE=1' \
+	'-DUSE_STLPORT=1' \
+	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+	'-DCHROME_BUILD_ID=""' \
+	'-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
+	'-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
+	'-D_DEBUG'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Debug := \
+	$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+	$(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
+	$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+	$(LOCAL_PATH)/third_party/khronos \
+	$(LOCAL_PATH)/gpu \
+	$(LOCAL_PATH) \
+	$(LOCAL_PATH)/skia/config \
+	$(gyp_shared_intermediate_dir)/ui/gl \
+	$(LOCAL_PATH)/third_party/mesa/src/include \
+	$(PWD)/frameworks/wilhelm/include \
+	$(PWD)/bionic \
+	$(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Debug := \
+	-fno-rtti \
+	-fno-threadsafe-statics \
+	-fvisibility-inlines-hidden \
+	-Wsign-compare \
+	-Wno-non-virtual-dtor \
+	-Wno-sign-promo
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Release := \
+	-fstack-protector \
+	--param=ssp-buffer-size=4 \
+	-Werror \
+	-fno-exceptions \
+	-fno-strict-aliasing \
+	-Wall \
+	-Wno-unused-parameter \
+	-Wno-missing-field-initializers \
+	-fvisibility=hidden \
+	-pipe \
+	-fPIC \
+	-Wno-unused-local-typedefs \
+	-m64 \
+	-march=x86-64 \
+	-fuse-ld=gold \
+	-ffunction-sections \
+	-funwind-tables \
+	-g \
+	-fstack-protector \
+	-fno-short-enums \
+	-finline-limit=64 \
+	-Wa,--noexecstack \
+	-U_FORTIFY_SOURCE \
+	-Wno-extra \
+	-Wno-ignored-qualifiers \
+	-Wno-type-limits \
+	-Wno-unused-but-set-variable \
+	-Os \
+	-fno-ident \
+	-fdata-sections \
+	-ffunction-sections \
+	-fomit-frame-pointer \
+	-funwind-tables
+
+MY_DEFS_Release := \
+	'-DV8_DEPRECATION_WARNINGS' \
+	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
+	'-D_FILE_OFFSET_BITS=64' \
+	'-DNO_TCMALLOC' \
+	'-DDISABLE_NACL' \
+	'-DCHROMIUM_BUILD' \
+	'-DUSE_LIBJPEG_TURBO=1' \
+	'-DENABLE_WEBRTC=1' \
+	'-DUSE_PROPRIETARY_CODECS' \
+	'-DENABLE_CONFIGURATION_POLICY' \
+	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+	'-DENABLE_EGLIMAGE=1' \
+	'-DCLD_VERSION=1' \
+	'-DENABLE_PRINTING=1' \
+	'-DENABLE_MANAGED_USERS=1' \
+	'-DGL_IN_PROCESS_CONTEXT_IMPLEMENTATION' \
+	'-DMESA_EGL_NO_X11_HEADERS' \
+	'-DUSE_OPENSSL=1' \
+	'-DUSE_OPENSSL_CERTS=1' \
+	'-D__STDC_CONSTANT_MACROS' \
+	'-D__STDC_FORMAT_MACROS' \
+	'-DANDROID' \
+	'-D__GNU_SOURCE=1' \
+	'-DUSE_STLPORT=1' \
+	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+	'-DCHROME_BUILD_ID=""' \
+	'-DNDEBUG' \
+	'-DNVALGRIND' \
+	'-DDYNAMIC_ANNOTATIONS_ENABLED=0' \
+	'-D_FORTIFY_SOURCE=2'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Release := \
+	$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+	$(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
+	$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+	$(LOCAL_PATH)/third_party/khronos \
+	$(LOCAL_PATH)/gpu \
+	$(LOCAL_PATH) \
+	$(LOCAL_PATH)/skia/config \
+	$(gyp_shared_intermediate_dir)/ui/gl \
+	$(LOCAL_PATH)/third_party/mesa/src/include \
+	$(PWD)/frameworks/wilhelm/include \
+	$(PWD)/bionic \
+	$(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Release := \
+	-fno-rtti \
+	-fno-threadsafe-statics \
+	-fvisibility-inlines-hidden \
+	-Wsign-compare \
+	-Wno-non-virtual-dtor \
+	-Wno-sign-promo
+
+
+LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION))
+LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))
+LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))
+LOCAL_ASFLAGS := $(LOCAL_CFLAGS)
+### Rules for final target.
+
+LOCAL_LDFLAGS_Debug := \
+	-Wl,-z,now \
+	-Wl,-z,relro \
+	-Wl,--fatal-warnings \
+	-Wl,-z,noexecstack \
+	-fPIC \
+	-m64 \
+	-fuse-ld=gold \
+	-nostdlib \
+	-Wl,--no-undefined \
+	-Wl,--exclude-libs=ALL \
+	-Wl,--warn-shared-textrel \
+	-Wl,-O1 \
+	-Wl,--as-needed
+
+
+LOCAL_LDFLAGS_Release := \
+	-Wl,-z,now \
+	-Wl,-z,relro \
+	-Wl,--fatal-warnings \
+	-Wl,-z,noexecstack \
+	-fPIC \
+	-m64 \
+	-fuse-ld=gold \
+	-nostdlib \
+	-Wl,--no-undefined \
+	-Wl,--exclude-libs=ALL \
+	-Wl,-O1 \
+	-Wl,--as-needed \
+	-Wl,--gc-sections \
+	-Wl,--warn-shared-textrel
+
+
+LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
+
+LOCAL_STATIC_LIBRARIES := \
+	ui_gl_gl_gyp
+
+# Enable grouping to fix circular references
+LOCAL_GROUP_STATIC_LIBRARIES := true
+
+LOCAL_SHARED_LIBRARIES := \
+	libstlport \
+	libdl
+
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: gpu_gl_in_process_context_gyp
+
+# Alias gyp target name.
+.PHONY: gl_in_process_context
+gl_in_process_context: gpu_gl_in_process_context_gyp
+
+include $(BUILD_STATIC_LIBRARY)
diff --git a/gpu/gles2_c_lib.target.darwin-arm.mk b/gpu/gles2_c_lib.target.darwin-arm.mk
index 43aa600..4a19caf 100644
--- a/gpu/gles2_c_lib.target.darwin-arm.mk
+++ b/gpu/gles2_c_lib.target.darwin-arm.mk
@@ -232,7 +232,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/gles2_c_lib.target.darwin-mips.mk b/gpu/gles2_c_lib.target.darwin-mips.mk
index b23ae45..5a46a76 100644
--- a/gpu/gles2_c_lib.target.darwin-mips.mk
+++ b/gpu/gles2_c_lib.target.darwin-mips.mk
@@ -228,7 +228,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/gles2_c_lib.target.darwin-x86.mk b/gpu/gles2_c_lib.target.darwin-x86.mk
index e817e91..77f1bdf 100644
--- a/gpu/gles2_c_lib.target.darwin-x86.mk
+++ b/gpu/gles2_c_lib.target.darwin-x86.mk
@@ -230,7 +230,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/gles2_c_lib.target.darwin-x86_64.mk b/gpu/gles2_c_lib.target.darwin-x86_64.mk
index 7f1dc45..1789b98 100644
--- a/gpu/gles2_c_lib.target.darwin-x86_64.mk
+++ b/gpu/gles2_c_lib.target.darwin-x86_64.mk
@@ -230,7 +230,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/gles2_c_lib.target.linux-arm.mk b/gpu/gles2_c_lib.target.linux-arm.mk
index 43aa600..4a19caf 100644
--- a/gpu/gles2_c_lib.target.linux-arm.mk
+++ b/gpu/gles2_c_lib.target.linux-arm.mk
@@ -232,7 +232,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/gles2_c_lib.target.linux-mips.mk b/gpu/gles2_c_lib.target.linux-mips.mk
index b23ae45..5a46a76 100644
--- a/gpu/gles2_c_lib.target.linux-mips.mk
+++ b/gpu/gles2_c_lib.target.linux-mips.mk
@@ -228,7 +228,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/gles2_c_lib.target.linux-x86.mk b/gpu/gles2_c_lib.target.linux-x86.mk
index e817e91..77f1bdf 100644
--- a/gpu/gles2_c_lib.target.linux-x86.mk
+++ b/gpu/gles2_c_lib.target.linux-x86.mk
@@ -230,7 +230,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/gles2_c_lib.target.linux-x86_64.mk b/gpu/gles2_c_lib.target.linux-x86_64.mk
index 7f1dc45..1789b98 100644
--- a/gpu/gles2_c_lib.target.linux-x86_64.mk
+++ b/gpu/gles2_c_lib.target.linux-x86_64.mk
@@ -230,7 +230,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/gles2_cmd_helper.target.darwin-arm.mk b/gpu/gles2_cmd_helper.target.darwin-arm.mk
index d0a716e..c376a69 100644
--- a/gpu/gles2_cmd_helper.target.darwin-arm.mk
+++ b/gpu/gles2_cmd_helper.target.darwin-arm.mk
@@ -223,7 +223,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/gles2_cmd_helper.target.darwin-mips.mk b/gpu/gles2_cmd_helper.target.darwin-mips.mk
index b57e375..5005137 100644
--- a/gpu/gles2_cmd_helper.target.darwin-mips.mk
+++ b/gpu/gles2_cmd_helper.target.darwin-mips.mk
@@ -219,7 +219,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/gles2_cmd_helper.target.darwin-x86.mk b/gpu/gles2_cmd_helper.target.darwin-x86.mk
index 5e21bad..15d28dd 100644
--- a/gpu/gles2_cmd_helper.target.darwin-x86.mk
+++ b/gpu/gles2_cmd_helper.target.darwin-x86.mk
@@ -221,7 +221,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/gles2_cmd_helper.target.darwin-x86_64.mk b/gpu/gles2_cmd_helper.target.darwin-x86_64.mk
index 1eb1644..9aa4d71 100644
--- a/gpu/gles2_cmd_helper.target.darwin-x86_64.mk
+++ b/gpu/gles2_cmd_helper.target.darwin-x86_64.mk
@@ -221,7 +221,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/gles2_cmd_helper.target.linux-arm.mk b/gpu/gles2_cmd_helper.target.linux-arm.mk
index d0a716e..c376a69 100644
--- a/gpu/gles2_cmd_helper.target.linux-arm.mk
+++ b/gpu/gles2_cmd_helper.target.linux-arm.mk
@@ -223,7 +223,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/gles2_cmd_helper.target.linux-mips.mk b/gpu/gles2_cmd_helper.target.linux-mips.mk
index b57e375..5005137 100644
--- a/gpu/gles2_cmd_helper.target.linux-mips.mk
+++ b/gpu/gles2_cmd_helper.target.linux-mips.mk
@@ -219,7 +219,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/gles2_cmd_helper.target.linux-x86.mk b/gpu/gles2_cmd_helper.target.linux-x86.mk
index 5e21bad..15d28dd 100644
--- a/gpu/gles2_cmd_helper.target.linux-x86.mk
+++ b/gpu/gles2_cmd_helper.target.linux-x86.mk
@@ -221,7 +221,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/gles2_cmd_helper.target.linux-x86_64.mk b/gpu/gles2_cmd_helper.target.linux-x86_64.mk
index 1eb1644..9aa4d71 100644
--- a/gpu/gles2_cmd_helper.target.linux-x86_64.mk
+++ b/gpu/gles2_cmd_helper.target.linux-x86_64.mk
@@ -221,7 +221,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/gles2_conform_support/gles2_conform_support.gyp b/gpu/gles2_conform_support/gles2_conform_support.gyp
index b2ebe14..d34996e 100644
--- a/gpu/gles2_conform_support/gles2_conform_support.gyp
+++ b/gpu/gles2_conform_support/gles2_conform_support.gyp
@@ -83,11 +83,6 @@
         'egl_native',
         '../../third_party/khronos/khronos.gyp:khronos_headers',
       ],
-      'conditions': [
-        ['toolkit_uses_gtk == 1', {
-          'dependencies': ['../../build/linux/system.gyp:gtk'],
-        }],
-      ],
       'sources': [
         'native/main.cc',
         'native/egl_native.cc',
@@ -111,9 +106,6 @@
         '../../third_party/expat/expat.gyp:expat',
       ],
       'conditions': [
-        ['toolkit_uses_gtk == 1', {
-          'dependencies': ['../../build/linux/system.gyp:gtk'],
-        }],
         # See http://crbug.com/162998#c4 for why this is needed.
         # TODO(dmikurube): Kill linux_use_tcmalloc. http://crbug.com/345554
         ['OS=="linux" and ((use_allocator!="none" and use_allocator!="see_use_tcmalloc") or (use_allocator=="see_use_tcmalloc" and linux_use_tcmalloc==1))', {
diff --git a/gpu/gles2_implementation.target.darwin-arm.mk b/gpu/gles2_implementation.target.darwin-arm.mk
index b29b73e..35f6cc3 100644
--- a/gpu/gles2_implementation.target.darwin-arm.mk
+++ b/gpu/gles2_implementation.target.darwin-arm.mk
@@ -13,8 +13,7 @@
 # Make sure our deps are built first.
 GYP_TARGET_DEPENDENCIES := \
 	$(call intermediates-dir-for,GYP,third_party_khronos_khronos_headers_gyp,,,$(GYP_VAR_PREFIX))/khronos_headers.stamp \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_gl_gl_gyp,,,$(GYP_VAR_PREFIX))/ui_gl_gl_gyp.a \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a
+	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_gl_gl_gyp,,,$(GYP_VAR_PREFIX))/ui_gl_gl_gyp.a
 
 GYP_GENERATED_OUTPUTS :=
 
@@ -35,8 +34,7 @@
 	gpu/command_buffer/client/program_info_manager.cc \
 	gpu/command_buffer/client/query_tracker.cc \
 	gpu/command_buffer/client/share_group.cc \
-	gpu/command_buffer/client/vertex_array_object_manager.cc \
-	gpu/command_buffer/client/gl_in_process_context.cc
+	gpu/command_buffer/client/vertex_array_object_manager.cc
 
 
 # Flags passed to both C and C++ files.
@@ -52,7 +50,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-fno-tree-sra \
 	-fuse-ld=gold \
 	-Wno-psabi \
@@ -94,23 +91,6 @@
 	'-DENABLE_MANAGED_USERS=1' \
 	'-DGLES2_IMPL_IMPLEMENTATION' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
-	'-DSK_ENABLE_INST_COUNT=0' \
-	'-DSK_SUPPORT_GPU=1' \
-	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
-	'-DSK_ENABLE_LEGACY_API_ALIASING=1' \
-	'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
-	'-DGR_GL_IGNORE_ES3_MSAA=0' \
-	'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
-	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
-	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
-	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
-	'-DSK_SUPPORT_LEGACY_N32_NAME' \
-	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
-	'-DSK_BUILD_FOR_ANDROID' \
-	'-DSK_USE_POSIX_THREADS' \
-	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
-	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -136,19 +116,6 @@
 	$(LOCAL_PATH)/skia/config \
 	$(gyp_shared_intermediate_dir)/ui/gl \
 	$(LOCAL_PATH)/third_party/mesa/src/include \
-	$(LOCAL_PATH)/third_party/skia/src/core \
-	$(LOCAL_PATH)/third_party/skia/include/core \
-	$(LOCAL_PATH)/third_party/skia/include/effects \
-	$(LOCAL_PATH)/third_party/skia/include/pdf \
-	$(LOCAL_PATH)/third_party/skia/include/gpu \
-	$(LOCAL_PATH)/third_party/skia/include/lazy \
-	$(LOCAL_PATH)/third_party/skia/include/pathops \
-	$(LOCAL_PATH)/third_party/skia/include/pipe \
-	$(LOCAL_PATH)/third_party/skia/include/ports \
-	$(LOCAL_PATH)/third_party/skia/include/utils \
-	$(LOCAL_PATH)/skia/ext \
-	$(PWD)/external/icu4c/common \
-	$(PWD)/external/icu4c/i18n \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -178,7 +145,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-fno-tree-sra \
 	-fuse-ld=gold \
 	-Wno-psabi \
@@ -220,23 +186,6 @@
 	'-DENABLE_MANAGED_USERS=1' \
 	'-DGLES2_IMPL_IMPLEMENTATION' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
-	'-DSK_ENABLE_INST_COUNT=0' \
-	'-DSK_SUPPORT_GPU=1' \
-	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
-	'-DSK_ENABLE_LEGACY_API_ALIASING=1' \
-	'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
-	'-DGR_GL_IGNORE_ES3_MSAA=0' \
-	'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
-	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
-	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
-	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
-	'-DSK_SUPPORT_LEGACY_N32_NAME' \
-	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
-	'-DSK_BUILD_FOR_ANDROID' \
-	'-DSK_USE_POSIX_THREADS' \
-	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
-	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -263,19 +212,6 @@
 	$(LOCAL_PATH)/skia/config \
 	$(gyp_shared_intermediate_dir)/ui/gl \
 	$(LOCAL_PATH)/third_party/mesa/src/include \
-	$(LOCAL_PATH)/third_party/skia/src/core \
-	$(LOCAL_PATH)/third_party/skia/include/core \
-	$(LOCAL_PATH)/third_party/skia/include/effects \
-	$(LOCAL_PATH)/third_party/skia/include/pdf \
-	$(LOCAL_PATH)/third_party/skia/include/gpu \
-	$(LOCAL_PATH)/third_party/skia/include/lazy \
-	$(LOCAL_PATH)/third_party/skia/include/pathops \
-	$(LOCAL_PATH)/third_party/skia/include/pipe \
-	$(LOCAL_PATH)/third_party/skia/include/ports \
-	$(LOCAL_PATH)/third_party/skia/include/utils \
-	$(LOCAL_PATH)/skia/ext \
-	$(PWD)/external/icu4c/common \
-	$(PWD)/external/icu4c/i18n \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -311,7 +247,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
@@ -339,8 +274,7 @@
 LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
 
 LOCAL_STATIC_LIBRARIES := \
-	ui_gl_gl_gyp \
-	skia_skia_library_gyp
+	ui_gl_gl_gyp
 
 # Enable grouping to fix circular references
 LOCAL_GROUP_STATIC_LIBRARIES := true
diff --git a/gpu/gles2_implementation.target.darwin-mips.mk b/gpu/gles2_implementation.target.darwin-mips.mk
index 0c7c012..12a9e31 100644
--- a/gpu/gles2_implementation.target.darwin-mips.mk
+++ b/gpu/gles2_implementation.target.darwin-mips.mk
@@ -13,8 +13,7 @@
 # Make sure our deps are built first.
 GYP_TARGET_DEPENDENCIES := \
 	$(call intermediates-dir-for,GYP,third_party_khronos_khronos_headers_gyp,,,$(GYP_VAR_PREFIX))/khronos_headers.stamp \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_gl_gl_gyp,,,$(GYP_VAR_PREFIX))/ui_gl_gl_gyp.a \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a
+	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_gl_gl_gyp,,,$(GYP_VAR_PREFIX))/ui_gl_gl_gyp.a
 
 GYP_GENERATED_OUTPUTS :=
 
@@ -35,8 +34,7 @@
 	gpu/command_buffer/client/program_info_manager.cc \
 	gpu/command_buffer/client/query_tracker.cc \
 	gpu/command_buffer/client/share_group.cc \
-	gpu/command_buffer/client/vertex_array_object_manager.cc \
-	gpu/command_buffer/client/gl_in_process_context.cc
+	gpu/command_buffer/client/vertex_array_object_manager.cc
 
 
 # Flags passed to both C and C++ files.
@@ -52,7 +50,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-EL \
 	-mhard-float \
 	-ffunction-sections \
@@ -93,23 +90,6 @@
 	'-DENABLE_MANAGED_USERS=1' \
 	'-DGLES2_IMPL_IMPLEMENTATION' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
-	'-DSK_ENABLE_INST_COUNT=0' \
-	'-DSK_SUPPORT_GPU=1' \
-	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
-	'-DSK_ENABLE_LEGACY_API_ALIASING=1' \
-	'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
-	'-DGR_GL_IGNORE_ES3_MSAA=0' \
-	'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
-	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
-	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
-	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
-	'-DSK_SUPPORT_LEGACY_N32_NAME' \
-	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
-	'-DSK_BUILD_FOR_ANDROID' \
-	'-DSK_USE_POSIX_THREADS' \
-	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
-	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -135,19 +115,6 @@
 	$(LOCAL_PATH)/skia/config \
 	$(gyp_shared_intermediate_dir)/ui/gl \
 	$(LOCAL_PATH)/third_party/mesa/src/include \
-	$(LOCAL_PATH)/third_party/skia/src/core \
-	$(LOCAL_PATH)/third_party/skia/include/core \
-	$(LOCAL_PATH)/third_party/skia/include/effects \
-	$(LOCAL_PATH)/third_party/skia/include/pdf \
-	$(LOCAL_PATH)/third_party/skia/include/gpu \
-	$(LOCAL_PATH)/third_party/skia/include/lazy \
-	$(LOCAL_PATH)/third_party/skia/include/pathops \
-	$(LOCAL_PATH)/third_party/skia/include/pipe \
-	$(LOCAL_PATH)/third_party/skia/include/ports \
-	$(LOCAL_PATH)/third_party/skia/include/utils \
-	$(LOCAL_PATH)/skia/ext \
-	$(PWD)/external/icu4c/common \
-	$(PWD)/external/icu4c/i18n \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -177,7 +144,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-EL \
 	-mhard-float \
 	-ffunction-sections \
@@ -218,23 +184,6 @@
 	'-DENABLE_MANAGED_USERS=1' \
 	'-DGLES2_IMPL_IMPLEMENTATION' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
-	'-DSK_ENABLE_INST_COUNT=0' \
-	'-DSK_SUPPORT_GPU=1' \
-	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
-	'-DSK_ENABLE_LEGACY_API_ALIASING=1' \
-	'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
-	'-DGR_GL_IGNORE_ES3_MSAA=0' \
-	'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
-	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
-	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
-	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
-	'-DSK_SUPPORT_LEGACY_N32_NAME' \
-	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
-	'-DSK_BUILD_FOR_ANDROID' \
-	'-DSK_USE_POSIX_THREADS' \
-	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
-	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -261,19 +210,6 @@
 	$(LOCAL_PATH)/skia/config \
 	$(gyp_shared_intermediate_dir)/ui/gl \
 	$(LOCAL_PATH)/third_party/mesa/src/include \
-	$(LOCAL_PATH)/third_party/skia/src/core \
-	$(LOCAL_PATH)/third_party/skia/include/core \
-	$(LOCAL_PATH)/third_party/skia/include/effects \
-	$(LOCAL_PATH)/third_party/skia/include/pdf \
-	$(LOCAL_PATH)/third_party/skia/include/gpu \
-	$(LOCAL_PATH)/third_party/skia/include/lazy \
-	$(LOCAL_PATH)/third_party/skia/include/pathops \
-	$(LOCAL_PATH)/third_party/skia/include/pipe \
-	$(LOCAL_PATH)/third_party/skia/include/ports \
-	$(LOCAL_PATH)/third_party/skia/include/utils \
-	$(LOCAL_PATH)/skia/ext \
-	$(PWD)/external/icu4c/common \
-	$(PWD)/external/icu4c/i18n \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -307,7 +243,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
@@ -333,8 +268,7 @@
 LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
 
 LOCAL_STATIC_LIBRARIES := \
-	ui_gl_gl_gyp \
-	skia_skia_library_gyp
+	ui_gl_gl_gyp
 
 # Enable grouping to fix circular references
 LOCAL_GROUP_STATIC_LIBRARIES := true
diff --git a/gpu/gles2_implementation.target.darwin-x86.mk b/gpu/gles2_implementation.target.darwin-x86.mk
index 159a2e8..dcec676 100644
--- a/gpu/gles2_implementation.target.darwin-x86.mk
+++ b/gpu/gles2_implementation.target.darwin-x86.mk
@@ -13,8 +13,7 @@
 # Make sure our deps are built first.
 GYP_TARGET_DEPENDENCIES := \
 	$(call intermediates-dir-for,GYP,third_party_khronos_khronos_headers_gyp,,,$(GYP_VAR_PREFIX))/khronos_headers.stamp \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_gl_gl_gyp,,,$(GYP_VAR_PREFIX))/ui_gl_gl_gyp.a \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a
+	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_gl_gl_gyp,,,$(GYP_VAR_PREFIX))/ui_gl_gl_gyp.a
 
 GYP_GENERATED_OUTPUTS :=
 
@@ -35,8 +34,7 @@
 	gpu/command_buffer/client/program_info_manager.cc \
 	gpu/command_buffer/client/query_tracker.cc \
 	gpu/command_buffer/client/share_group.cc \
-	gpu/command_buffer/client/vertex_array_object_manager.cc \
-	gpu/command_buffer/client/gl_in_process_context.cc
+	gpu/command_buffer/client/vertex_array_object_manager.cc
 
 
 # Flags passed to both C and C++ files.
@@ -51,7 +49,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-msse2 \
 	-mfpmath=sse \
 	-mmmx \
@@ -95,23 +92,6 @@
 	'-DENABLE_MANAGED_USERS=1' \
 	'-DGLES2_IMPL_IMPLEMENTATION' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
-	'-DSK_ENABLE_INST_COUNT=0' \
-	'-DSK_SUPPORT_GPU=1' \
-	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
-	'-DSK_ENABLE_LEGACY_API_ALIASING=1' \
-	'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
-	'-DGR_GL_IGNORE_ES3_MSAA=0' \
-	'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
-	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
-	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
-	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
-	'-DSK_SUPPORT_LEGACY_N32_NAME' \
-	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
-	'-DSK_BUILD_FOR_ANDROID' \
-	'-DSK_USE_POSIX_THREADS' \
-	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
-	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -137,19 +117,6 @@
 	$(LOCAL_PATH)/skia/config \
 	$(gyp_shared_intermediate_dir)/ui/gl \
 	$(LOCAL_PATH)/third_party/mesa/src/include \
-	$(LOCAL_PATH)/third_party/skia/src/core \
-	$(LOCAL_PATH)/third_party/skia/include/core \
-	$(LOCAL_PATH)/third_party/skia/include/effects \
-	$(LOCAL_PATH)/third_party/skia/include/pdf \
-	$(LOCAL_PATH)/third_party/skia/include/gpu \
-	$(LOCAL_PATH)/third_party/skia/include/lazy \
-	$(LOCAL_PATH)/third_party/skia/include/pathops \
-	$(LOCAL_PATH)/third_party/skia/include/pipe \
-	$(LOCAL_PATH)/third_party/skia/include/ports \
-	$(LOCAL_PATH)/third_party/skia/include/utils \
-	$(LOCAL_PATH)/skia/ext \
-	$(PWD)/external/icu4c/common \
-	$(PWD)/external/icu4c/i18n \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -177,7 +144,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-msse2 \
 	-mfpmath=sse \
 	-mmmx \
@@ -221,23 +187,6 @@
 	'-DENABLE_MANAGED_USERS=1' \
 	'-DGLES2_IMPL_IMPLEMENTATION' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
-	'-DSK_ENABLE_INST_COUNT=0' \
-	'-DSK_SUPPORT_GPU=1' \
-	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
-	'-DSK_ENABLE_LEGACY_API_ALIASING=1' \
-	'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
-	'-DGR_GL_IGNORE_ES3_MSAA=0' \
-	'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
-	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
-	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
-	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
-	'-DSK_SUPPORT_LEGACY_N32_NAME' \
-	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
-	'-DSK_BUILD_FOR_ANDROID' \
-	'-DSK_USE_POSIX_THREADS' \
-	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
-	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -264,19 +213,6 @@
 	$(LOCAL_PATH)/skia/config \
 	$(gyp_shared_intermediate_dir)/ui/gl \
 	$(LOCAL_PATH)/third_party/mesa/src/include \
-	$(LOCAL_PATH)/third_party/skia/src/core \
-	$(LOCAL_PATH)/third_party/skia/include/core \
-	$(LOCAL_PATH)/third_party/skia/include/effects \
-	$(LOCAL_PATH)/third_party/skia/include/pdf \
-	$(LOCAL_PATH)/third_party/skia/include/gpu \
-	$(LOCAL_PATH)/third_party/skia/include/lazy \
-	$(LOCAL_PATH)/third_party/skia/include/pathops \
-	$(LOCAL_PATH)/third_party/skia/include/pipe \
-	$(LOCAL_PATH)/third_party/skia/include/ports \
-	$(LOCAL_PATH)/third_party/skia/include/utils \
-	$(LOCAL_PATH)/skia/ext \
-	$(PWD)/external/icu4c/common \
-	$(PWD)/external/icu4c/i18n \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -309,7 +245,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
@@ -335,8 +270,7 @@
 LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
 
 LOCAL_STATIC_LIBRARIES := \
-	ui_gl_gl_gyp \
-	skia_skia_library_gyp
+	ui_gl_gl_gyp
 
 # Enable grouping to fix circular references
 LOCAL_GROUP_STATIC_LIBRARIES := true
diff --git a/gpu/gles2_implementation.target.darwin-x86_64.mk b/gpu/gles2_implementation.target.darwin-x86_64.mk
index d827abe..deb383c 100644
--- a/gpu/gles2_implementation.target.darwin-x86_64.mk
+++ b/gpu/gles2_implementation.target.darwin-x86_64.mk
@@ -13,8 +13,7 @@
 # Make sure our deps are built first.
 GYP_TARGET_DEPENDENCIES := \
 	$(call intermediates-dir-for,GYP,third_party_khronos_khronos_headers_gyp,,,$(GYP_VAR_PREFIX))/khronos_headers.stamp \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_gl_gl_gyp,,,$(GYP_VAR_PREFIX))/ui_gl_gl_gyp.a \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a
+	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_gl_gl_gyp,,,$(GYP_VAR_PREFIX))/ui_gl_gl_gyp.a
 
 GYP_GENERATED_OUTPUTS :=
 
@@ -35,8 +34,7 @@
 	gpu/command_buffer/client/program_info_manager.cc \
 	gpu/command_buffer/client/query_tracker.cc \
 	gpu/command_buffer/client/share_group.cc \
-	gpu/command_buffer/client/vertex_array_object_manager.cc \
-	gpu/command_buffer/client/gl_in_process_context.cc
+	gpu/command_buffer/client/vertex_array_object_manager.cc
 
 
 # Flags passed to both C and C++ files.
@@ -53,7 +51,6 @@
 	-pipe \
 	-fPIC \
 	-Wno-unused-local-typedefs \
-	-Wno-unknown-pragmas \
 	-m64 \
 	-march=x86-64 \
 	-fuse-ld=gold \
@@ -95,23 +92,6 @@
 	'-DENABLE_MANAGED_USERS=1' \
 	'-DGLES2_IMPL_IMPLEMENTATION' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
-	'-DSK_ENABLE_INST_COUNT=0' \
-	'-DSK_SUPPORT_GPU=1' \
-	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
-	'-DSK_ENABLE_LEGACY_API_ALIASING=1' \
-	'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
-	'-DGR_GL_IGNORE_ES3_MSAA=0' \
-	'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
-	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
-	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
-	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
-	'-DSK_SUPPORT_LEGACY_N32_NAME' \
-	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
-	'-DSK_BUILD_FOR_ANDROID' \
-	'-DSK_USE_POSIX_THREADS' \
-	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
-	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -137,19 +117,6 @@
 	$(LOCAL_PATH)/skia/config \
 	$(gyp_shared_intermediate_dir)/ui/gl \
 	$(LOCAL_PATH)/third_party/mesa/src/include \
-	$(LOCAL_PATH)/third_party/skia/src/core \
-	$(LOCAL_PATH)/third_party/skia/include/core \
-	$(LOCAL_PATH)/third_party/skia/include/effects \
-	$(LOCAL_PATH)/third_party/skia/include/pdf \
-	$(LOCAL_PATH)/third_party/skia/include/gpu \
-	$(LOCAL_PATH)/third_party/skia/include/lazy \
-	$(LOCAL_PATH)/third_party/skia/include/pathops \
-	$(LOCAL_PATH)/third_party/skia/include/pipe \
-	$(LOCAL_PATH)/third_party/skia/include/ports \
-	$(LOCAL_PATH)/third_party/skia/include/utils \
-	$(LOCAL_PATH)/skia/ext \
-	$(PWD)/external/icu4c/common \
-	$(PWD)/external/icu4c/i18n \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -179,7 +146,6 @@
 	-pipe \
 	-fPIC \
 	-Wno-unused-local-typedefs \
-	-Wno-unknown-pragmas \
 	-m64 \
 	-march=x86-64 \
 	-fuse-ld=gold \
@@ -221,23 +187,6 @@
 	'-DENABLE_MANAGED_USERS=1' \
 	'-DGLES2_IMPL_IMPLEMENTATION' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
-	'-DSK_ENABLE_INST_COUNT=0' \
-	'-DSK_SUPPORT_GPU=1' \
-	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
-	'-DSK_ENABLE_LEGACY_API_ALIASING=1' \
-	'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
-	'-DGR_GL_IGNORE_ES3_MSAA=0' \
-	'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
-	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
-	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
-	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
-	'-DSK_SUPPORT_LEGACY_N32_NAME' \
-	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
-	'-DSK_BUILD_FOR_ANDROID' \
-	'-DSK_USE_POSIX_THREADS' \
-	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
-	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -264,19 +213,6 @@
 	$(LOCAL_PATH)/skia/config \
 	$(gyp_shared_intermediate_dir)/ui/gl \
 	$(LOCAL_PATH)/third_party/mesa/src/include \
-	$(LOCAL_PATH)/third_party/skia/src/core \
-	$(LOCAL_PATH)/third_party/skia/include/core \
-	$(LOCAL_PATH)/third_party/skia/include/effects \
-	$(LOCAL_PATH)/third_party/skia/include/pdf \
-	$(LOCAL_PATH)/third_party/skia/include/gpu \
-	$(LOCAL_PATH)/third_party/skia/include/lazy \
-	$(LOCAL_PATH)/third_party/skia/include/pathops \
-	$(LOCAL_PATH)/third_party/skia/include/pipe \
-	$(LOCAL_PATH)/third_party/skia/include/ports \
-	$(LOCAL_PATH)/third_party/skia/include/utils \
-	$(LOCAL_PATH)/skia/ext \
-	$(PWD)/external/icu4c/common \
-	$(PWD)/external/icu4c/i18n \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -309,7 +245,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
@@ -335,8 +270,7 @@
 LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
 
 LOCAL_STATIC_LIBRARIES := \
-	ui_gl_gl_gyp \
-	skia_skia_library_gyp
+	ui_gl_gl_gyp
 
 # Enable grouping to fix circular references
 LOCAL_GROUP_STATIC_LIBRARIES := true
diff --git a/gpu/gles2_implementation.target.linux-arm.mk b/gpu/gles2_implementation.target.linux-arm.mk
index b29b73e..35f6cc3 100644
--- a/gpu/gles2_implementation.target.linux-arm.mk
+++ b/gpu/gles2_implementation.target.linux-arm.mk
@@ -13,8 +13,7 @@
 # Make sure our deps are built first.
 GYP_TARGET_DEPENDENCIES := \
 	$(call intermediates-dir-for,GYP,third_party_khronos_khronos_headers_gyp,,,$(GYP_VAR_PREFIX))/khronos_headers.stamp \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_gl_gl_gyp,,,$(GYP_VAR_PREFIX))/ui_gl_gl_gyp.a \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a
+	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_gl_gl_gyp,,,$(GYP_VAR_PREFIX))/ui_gl_gl_gyp.a
 
 GYP_GENERATED_OUTPUTS :=
 
@@ -35,8 +34,7 @@
 	gpu/command_buffer/client/program_info_manager.cc \
 	gpu/command_buffer/client/query_tracker.cc \
 	gpu/command_buffer/client/share_group.cc \
-	gpu/command_buffer/client/vertex_array_object_manager.cc \
-	gpu/command_buffer/client/gl_in_process_context.cc
+	gpu/command_buffer/client/vertex_array_object_manager.cc
 
 
 # Flags passed to both C and C++ files.
@@ -52,7 +50,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-fno-tree-sra \
 	-fuse-ld=gold \
 	-Wno-psabi \
@@ -94,23 +91,6 @@
 	'-DENABLE_MANAGED_USERS=1' \
 	'-DGLES2_IMPL_IMPLEMENTATION' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
-	'-DSK_ENABLE_INST_COUNT=0' \
-	'-DSK_SUPPORT_GPU=1' \
-	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
-	'-DSK_ENABLE_LEGACY_API_ALIASING=1' \
-	'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
-	'-DGR_GL_IGNORE_ES3_MSAA=0' \
-	'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
-	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
-	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
-	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
-	'-DSK_SUPPORT_LEGACY_N32_NAME' \
-	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
-	'-DSK_BUILD_FOR_ANDROID' \
-	'-DSK_USE_POSIX_THREADS' \
-	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
-	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -136,19 +116,6 @@
 	$(LOCAL_PATH)/skia/config \
 	$(gyp_shared_intermediate_dir)/ui/gl \
 	$(LOCAL_PATH)/third_party/mesa/src/include \
-	$(LOCAL_PATH)/third_party/skia/src/core \
-	$(LOCAL_PATH)/third_party/skia/include/core \
-	$(LOCAL_PATH)/third_party/skia/include/effects \
-	$(LOCAL_PATH)/third_party/skia/include/pdf \
-	$(LOCAL_PATH)/third_party/skia/include/gpu \
-	$(LOCAL_PATH)/third_party/skia/include/lazy \
-	$(LOCAL_PATH)/third_party/skia/include/pathops \
-	$(LOCAL_PATH)/third_party/skia/include/pipe \
-	$(LOCAL_PATH)/third_party/skia/include/ports \
-	$(LOCAL_PATH)/third_party/skia/include/utils \
-	$(LOCAL_PATH)/skia/ext \
-	$(PWD)/external/icu4c/common \
-	$(PWD)/external/icu4c/i18n \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -178,7 +145,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-fno-tree-sra \
 	-fuse-ld=gold \
 	-Wno-psabi \
@@ -220,23 +186,6 @@
 	'-DENABLE_MANAGED_USERS=1' \
 	'-DGLES2_IMPL_IMPLEMENTATION' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
-	'-DSK_ENABLE_INST_COUNT=0' \
-	'-DSK_SUPPORT_GPU=1' \
-	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
-	'-DSK_ENABLE_LEGACY_API_ALIASING=1' \
-	'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
-	'-DGR_GL_IGNORE_ES3_MSAA=0' \
-	'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
-	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
-	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
-	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
-	'-DSK_SUPPORT_LEGACY_N32_NAME' \
-	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
-	'-DSK_BUILD_FOR_ANDROID' \
-	'-DSK_USE_POSIX_THREADS' \
-	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
-	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -263,19 +212,6 @@
 	$(LOCAL_PATH)/skia/config \
 	$(gyp_shared_intermediate_dir)/ui/gl \
 	$(LOCAL_PATH)/third_party/mesa/src/include \
-	$(LOCAL_PATH)/third_party/skia/src/core \
-	$(LOCAL_PATH)/third_party/skia/include/core \
-	$(LOCAL_PATH)/third_party/skia/include/effects \
-	$(LOCAL_PATH)/third_party/skia/include/pdf \
-	$(LOCAL_PATH)/third_party/skia/include/gpu \
-	$(LOCAL_PATH)/third_party/skia/include/lazy \
-	$(LOCAL_PATH)/third_party/skia/include/pathops \
-	$(LOCAL_PATH)/third_party/skia/include/pipe \
-	$(LOCAL_PATH)/third_party/skia/include/ports \
-	$(LOCAL_PATH)/third_party/skia/include/utils \
-	$(LOCAL_PATH)/skia/ext \
-	$(PWD)/external/icu4c/common \
-	$(PWD)/external/icu4c/i18n \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -311,7 +247,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
@@ -339,8 +274,7 @@
 LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
 
 LOCAL_STATIC_LIBRARIES := \
-	ui_gl_gl_gyp \
-	skia_skia_library_gyp
+	ui_gl_gl_gyp
 
 # Enable grouping to fix circular references
 LOCAL_GROUP_STATIC_LIBRARIES := true
diff --git a/gpu/gles2_implementation.target.linux-mips.mk b/gpu/gles2_implementation.target.linux-mips.mk
index 0c7c012..12a9e31 100644
--- a/gpu/gles2_implementation.target.linux-mips.mk
+++ b/gpu/gles2_implementation.target.linux-mips.mk
@@ -13,8 +13,7 @@
 # Make sure our deps are built first.
 GYP_TARGET_DEPENDENCIES := \
 	$(call intermediates-dir-for,GYP,third_party_khronos_khronos_headers_gyp,,,$(GYP_VAR_PREFIX))/khronos_headers.stamp \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_gl_gl_gyp,,,$(GYP_VAR_PREFIX))/ui_gl_gl_gyp.a \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a
+	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_gl_gl_gyp,,,$(GYP_VAR_PREFIX))/ui_gl_gl_gyp.a
 
 GYP_GENERATED_OUTPUTS :=
 
@@ -35,8 +34,7 @@
 	gpu/command_buffer/client/program_info_manager.cc \
 	gpu/command_buffer/client/query_tracker.cc \
 	gpu/command_buffer/client/share_group.cc \
-	gpu/command_buffer/client/vertex_array_object_manager.cc \
-	gpu/command_buffer/client/gl_in_process_context.cc
+	gpu/command_buffer/client/vertex_array_object_manager.cc
 
 
 # Flags passed to both C and C++ files.
@@ -52,7 +50,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-EL \
 	-mhard-float \
 	-ffunction-sections \
@@ -93,23 +90,6 @@
 	'-DENABLE_MANAGED_USERS=1' \
 	'-DGLES2_IMPL_IMPLEMENTATION' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
-	'-DSK_ENABLE_INST_COUNT=0' \
-	'-DSK_SUPPORT_GPU=1' \
-	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
-	'-DSK_ENABLE_LEGACY_API_ALIASING=1' \
-	'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
-	'-DGR_GL_IGNORE_ES3_MSAA=0' \
-	'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
-	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
-	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
-	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
-	'-DSK_SUPPORT_LEGACY_N32_NAME' \
-	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
-	'-DSK_BUILD_FOR_ANDROID' \
-	'-DSK_USE_POSIX_THREADS' \
-	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
-	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -135,19 +115,6 @@
 	$(LOCAL_PATH)/skia/config \
 	$(gyp_shared_intermediate_dir)/ui/gl \
 	$(LOCAL_PATH)/third_party/mesa/src/include \
-	$(LOCAL_PATH)/third_party/skia/src/core \
-	$(LOCAL_PATH)/third_party/skia/include/core \
-	$(LOCAL_PATH)/third_party/skia/include/effects \
-	$(LOCAL_PATH)/third_party/skia/include/pdf \
-	$(LOCAL_PATH)/third_party/skia/include/gpu \
-	$(LOCAL_PATH)/third_party/skia/include/lazy \
-	$(LOCAL_PATH)/third_party/skia/include/pathops \
-	$(LOCAL_PATH)/third_party/skia/include/pipe \
-	$(LOCAL_PATH)/third_party/skia/include/ports \
-	$(LOCAL_PATH)/third_party/skia/include/utils \
-	$(LOCAL_PATH)/skia/ext \
-	$(PWD)/external/icu4c/common \
-	$(PWD)/external/icu4c/i18n \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -177,7 +144,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-EL \
 	-mhard-float \
 	-ffunction-sections \
@@ -218,23 +184,6 @@
 	'-DENABLE_MANAGED_USERS=1' \
 	'-DGLES2_IMPL_IMPLEMENTATION' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
-	'-DSK_ENABLE_INST_COUNT=0' \
-	'-DSK_SUPPORT_GPU=1' \
-	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
-	'-DSK_ENABLE_LEGACY_API_ALIASING=1' \
-	'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
-	'-DGR_GL_IGNORE_ES3_MSAA=0' \
-	'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
-	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
-	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
-	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
-	'-DSK_SUPPORT_LEGACY_N32_NAME' \
-	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
-	'-DSK_BUILD_FOR_ANDROID' \
-	'-DSK_USE_POSIX_THREADS' \
-	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
-	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -261,19 +210,6 @@
 	$(LOCAL_PATH)/skia/config \
 	$(gyp_shared_intermediate_dir)/ui/gl \
 	$(LOCAL_PATH)/third_party/mesa/src/include \
-	$(LOCAL_PATH)/third_party/skia/src/core \
-	$(LOCAL_PATH)/third_party/skia/include/core \
-	$(LOCAL_PATH)/third_party/skia/include/effects \
-	$(LOCAL_PATH)/third_party/skia/include/pdf \
-	$(LOCAL_PATH)/third_party/skia/include/gpu \
-	$(LOCAL_PATH)/third_party/skia/include/lazy \
-	$(LOCAL_PATH)/third_party/skia/include/pathops \
-	$(LOCAL_PATH)/third_party/skia/include/pipe \
-	$(LOCAL_PATH)/third_party/skia/include/ports \
-	$(LOCAL_PATH)/third_party/skia/include/utils \
-	$(LOCAL_PATH)/skia/ext \
-	$(PWD)/external/icu4c/common \
-	$(PWD)/external/icu4c/i18n \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -307,7 +243,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
@@ -333,8 +268,7 @@
 LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
 
 LOCAL_STATIC_LIBRARIES := \
-	ui_gl_gl_gyp \
-	skia_skia_library_gyp
+	ui_gl_gl_gyp
 
 # Enable grouping to fix circular references
 LOCAL_GROUP_STATIC_LIBRARIES := true
diff --git a/gpu/gles2_implementation.target.linux-x86.mk b/gpu/gles2_implementation.target.linux-x86.mk
index 159a2e8..dcec676 100644
--- a/gpu/gles2_implementation.target.linux-x86.mk
+++ b/gpu/gles2_implementation.target.linux-x86.mk
@@ -13,8 +13,7 @@
 # Make sure our deps are built first.
 GYP_TARGET_DEPENDENCIES := \
 	$(call intermediates-dir-for,GYP,third_party_khronos_khronos_headers_gyp,,,$(GYP_VAR_PREFIX))/khronos_headers.stamp \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_gl_gl_gyp,,,$(GYP_VAR_PREFIX))/ui_gl_gl_gyp.a \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a
+	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_gl_gl_gyp,,,$(GYP_VAR_PREFIX))/ui_gl_gl_gyp.a
 
 GYP_GENERATED_OUTPUTS :=
 
@@ -35,8 +34,7 @@
 	gpu/command_buffer/client/program_info_manager.cc \
 	gpu/command_buffer/client/query_tracker.cc \
 	gpu/command_buffer/client/share_group.cc \
-	gpu/command_buffer/client/vertex_array_object_manager.cc \
-	gpu/command_buffer/client/gl_in_process_context.cc
+	gpu/command_buffer/client/vertex_array_object_manager.cc
 
 
 # Flags passed to both C and C++ files.
@@ -51,7 +49,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-msse2 \
 	-mfpmath=sse \
 	-mmmx \
@@ -95,23 +92,6 @@
 	'-DENABLE_MANAGED_USERS=1' \
 	'-DGLES2_IMPL_IMPLEMENTATION' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
-	'-DSK_ENABLE_INST_COUNT=0' \
-	'-DSK_SUPPORT_GPU=1' \
-	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
-	'-DSK_ENABLE_LEGACY_API_ALIASING=1' \
-	'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
-	'-DGR_GL_IGNORE_ES3_MSAA=0' \
-	'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
-	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
-	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
-	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
-	'-DSK_SUPPORT_LEGACY_N32_NAME' \
-	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
-	'-DSK_BUILD_FOR_ANDROID' \
-	'-DSK_USE_POSIX_THREADS' \
-	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
-	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -137,19 +117,6 @@
 	$(LOCAL_PATH)/skia/config \
 	$(gyp_shared_intermediate_dir)/ui/gl \
 	$(LOCAL_PATH)/third_party/mesa/src/include \
-	$(LOCAL_PATH)/third_party/skia/src/core \
-	$(LOCAL_PATH)/third_party/skia/include/core \
-	$(LOCAL_PATH)/third_party/skia/include/effects \
-	$(LOCAL_PATH)/third_party/skia/include/pdf \
-	$(LOCAL_PATH)/third_party/skia/include/gpu \
-	$(LOCAL_PATH)/third_party/skia/include/lazy \
-	$(LOCAL_PATH)/third_party/skia/include/pathops \
-	$(LOCAL_PATH)/third_party/skia/include/pipe \
-	$(LOCAL_PATH)/third_party/skia/include/ports \
-	$(LOCAL_PATH)/third_party/skia/include/utils \
-	$(LOCAL_PATH)/skia/ext \
-	$(PWD)/external/icu4c/common \
-	$(PWD)/external/icu4c/i18n \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -177,7 +144,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-msse2 \
 	-mfpmath=sse \
 	-mmmx \
@@ -221,23 +187,6 @@
 	'-DENABLE_MANAGED_USERS=1' \
 	'-DGLES2_IMPL_IMPLEMENTATION' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
-	'-DSK_ENABLE_INST_COUNT=0' \
-	'-DSK_SUPPORT_GPU=1' \
-	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
-	'-DSK_ENABLE_LEGACY_API_ALIASING=1' \
-	'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
-	'-DGR_GL_IGNORE_ES3_MSAA=0' \
-	'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
-	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
-	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
-	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
-	'-DSK_SUPPORT_LEGACY_N32_NAME' \
-	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
-	'-DSK_BUILD_FOR_ANDROID' \
-	'-DSK_USE_POSIX_THREADS' \
-	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
-	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -264,19 +213,6 @@
 	$(LOCAL_PATH)/skia/config \
 	$(gyp_shared_intermediate_dir)/ui/gl \
 	$(LOCAL_PATH)/third_party/mesa/src/include \
-	$(LOCAL_PATH)/third_party/skia/src/core \
-	$(LOCAL_PATH)/third_party/skia/include/core \
-	$(LOCAL_PATH)/third_party/skia/include/effects \
-	$(LOCAL_PATH)/third_party/skia/include/pdf \
-	$(LOCAL_PATH)/third_party/skia/include/gpu \
-	$(LOCAL_PATH)/third_party/skia/include/lazy \
-	$(LOCAL_PATH)/third_party/skia/include/pathops \
-	$(LOCAL_PATH)/third_party/skia/include/pipe \
-	$(LOCAL_PATH)/third_party/skia/include/ports \
-	$(LOCAL_PATH)/third_party/skia/include/utils \
-	$(LOCAL_PATH)/skia/ext \
-	$(PWD)/external/icu4c/common \
-	$(PWD)/external/icu4c/i18n \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -309,7 +245,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
@@ -335,8 +270,7 @@
 LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
 
 LOCAL_STATIC_LIBRARIES := \
-	ui_gl_gl_gyp \
-	skia_skia_library_gyp
+	ui_gl_gl_gyp
 
 # Enable grouping to fix circular references
 LOCAL_GROUP_STATIC_LIBRARIES := true
diff --git a/gpu/gles2_implementation.target.linux-x86_64.mk b/gpu/gles2_implementation.target.linux-x86_64.mk
index d827abe..deb383c 100644
--- a/gpu/gles2_implementation.target.linux-x86_64.mk
+++ b/gpu/gles2_implementation.target.linux-x86_64.mk
@@ -13,8 +13,7 @@
 # Make sure our deps are built first.
 GYP_TARGET_DEPENDENCIES := \
 	$(call intermediates-dir-for,GYP,third_party_khronos_khronos_headers_gyp,,,$(GYP_VAR_PREFIX))/khronos_headers.stamp \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_gl_gl_gyp,,,$(GYP_VAR_PREFIX))/ui_gl_gl_gyp.a \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a
+	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_gl_gl_gyp,,,$(GYP_VAR_PREFIX))/ui_gl_gl_gyp.a
 
 GYP_GENERATED_OUTPUTS :=
 
@@ -35,8 +34,7 @@
 	gpu/command_buffer/client/program_info_manager.cc \
 	gpu/command_buffer/client/query_tracker.cc \
 	gpu/command_buffer/client/share_group.cc \
-	gpu/command_buffer/client/vertex_array_object_manager.cc \
-	gpu/command_buffer/client/gl_in_process_context.cc
+	gpu/command_buffer/client/vertex_array_object_manager.cc
 
 
 # Flags passed to both C and C++ files.
@@ -53,7 +51,6 @@
 	-pipe \
 	-fPIC \
 	-Wno-unused-local-typedefs \
-	-Wno-unknown-pragmas \
 	-m64 \
 	-march=x86-64 \
 	-fuse-ld=gold \
@@ -95,23 +92,6 @@
 	'-DENABLE_MANAGED_USERS=1' \
 	'-DGLES2_IMPL_IMPLEMENTATION' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
-	'-DSK_ENABLE_INST_COUNT=0' \
-	'-DSK_SUPPORT_GPU=1' \
-	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
-	'-DSK_ENABLE_LEGACY_API_ALIASING=1' \
-	'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
-	'-DGR_GL_IGNORE_ES3_MSAA=0' \
-	'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
-	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
-	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
-	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
-	'-DSK_SUPPORT_LEGACY_N32_NAME' \
-	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
-	'-DSK_BUILD_FOR_ANDROID' \
-	'-DSK_USE_POSIX_THREADS' \
-	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
-	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -137,19 +117,6 @@
 	$(LOCAL_PATH)/skia/config \
 	$(gyp_shared_intermediate_dir)/ui/gl \
 	$(LOCAL_PATH)/third_party/mesa/src/include \
-	$(LOCAL_PATH)/third_party/skia/src/core \
-	$(LOCAL_PATH)/third_party/skia/include/core \
-	$(LOCAL_PATH)/third_party/skia/include/effects \
-	$(LOCAL_PATH)/third_party/skia/include/pdf \
-	$(LOCAL_PATH)/third_party/skia/include/gpu \
-	$(LOCAL_PATH)/third_party/skia/include/lazy \
-	$(LOCAL_PATH)/third_party/skia/include/pathops \
-	$(LOCAL_PATH)/third_party/skia/include/pipe \
-	$(LOCAL_PATH)/third_party/skia/include/ports \
-	$(LOCAL_PATH)/third_party/skia/include/utils \
-	$(LOCAL_PATH)/skia/ext \
-	$(PWD)/external/icu4c/common \
-	$(PWD)/external/icu4c/i18n \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -179,7 +146,6 @@
 	-pipe \
 	-fPIC \
 	-Wno-unused-local-typedefs \
-	-Wno-unknown-pragmas \
 	-m64 \
 	-march=x86-64 \
 	-fuse-ld=gold \
@@ -221,23 +187,6 @@
 	'-DENABLE_MANAGED_USERS=1' \
 	'-DGLES2_IMPL_IMPLEMENTATION' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
-	'-DSK_ENABLE_INST_COUNT=0' \
-	'-DSK_SUPPORT_GPU=1' \
-	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
-	'-DSK_ENABLE_LEGACY_API_ALIASING=1' \
-	'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
-	'-DGR_GL_IGNORE_ES3_MSAA=0' \
-	'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
-	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
-	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
-	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
-	'-DSK_SUPPORT_LEGACY_N32_NAME' \
-	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
-	'-DSK_BUILD_FOR_ANDROID' \
-	'-DSK_USE_POSIX_THREADS' \
-	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
-	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -264,19 +213,6 @@
 	$(LOCAL_PATH)/skia/config \
 	$(gyp_shared_intermediate_dir)/ui/gl \
 	$(LOCAL_PATH)/third_party/mesa/src/include \
-	$(LOCAL_PATH)/third_party/skia/src/core \
-	$(LOCAL_PATH)/third_party/skia/include/core \
-	$(LOCAL_PATH)/third_party/skia/include/effects \
-	$(LOCAL_PATH)/third_party/skia/include/pdf \
-	$(LOCAL_PATH)/third_party/skia/include/gpu \
-	$(LOCAL_PATH)/third_party/skia/include/lazy \
-	$(LOCAL_PATH)/third_party/skia/include/pathops \
-	$(LOCAL_PATH)/third_party/skia/include/pipe \
-	$(LOCAL_PATH)/third_party/skia/include/ports \
-	$(LOCAL_PATH)/third_party/skia/include/utils \
-	$(LOCAL_PATH)/skia/ext \
-	$(PWD)/external/icu4c/common \
-	$(PWD)/external/icu4c/i18n \
 	$(PWD)/frameworks/wilhelm/include \
 	$(PWD)/bionic \
 	$(PWD)/external/stlport/stlport
@@ -309,7 +245,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
@@ -335,8 +270,7 @@
 LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
 
 LOCAL_STATIC_LIBRARIES := \
-	ui_gl_gl_gyp \
-	skia_skia_library_gyp
+	ui_gl_gl_gyp
 
 # Enable grouping to fix circular references
 LOCAL_GROUP_STATIC_LIBRARIES := true
diff --git a/gpu/gpu.gyp b/gpu/gpu.gyp
index 57b358e..8022d48 100644
--- a/gpu/gpu.gyp
+++ b/gpu/gpu.gyp
@@ -16,11 +16,9 @@
       'type': '<(component)',
       'dependencies': [
         '../base/base.gyp:base',
-        '../base/third_party/dynamic_annotations/dynamic_annotations.gyp:dynamic_annotations',
         '../third_party/khronos/khronos.gyp:khronos_headers',
-        '../ui/gl/gl.gyp:gl',
-        '../ui/gfx/gfx.gyp:gfx',
         '../ui/gfx/gfx.gyp:gfx_geometry',
+        '../ui/gl/gl.gyp:gl',
         'command_buffer/command_buffer.gyp:gles2_utils',
         'gles2_cmd_helper',
       ],
@@ -29,13 +27,31 @@
       ],
       'sources': [
         '<@(gles2_implementation_source_files)',
-        'command_buffer/client/gl_in_process_context.h',
-        'command_buffer/client/gl_in_process_context.cc',
       ],
       # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
       'msvs_disabled_warnings': [4267, ],
     },
     {
+      'target_name': 'gl_in_process_context',
+      'type': '<(component)',
+      'dependencies': [
+        'gles2_implementation',
+        'gpu',
+        '../base/base.gyp:base',
+        '../base/third_party/dynamic_annotations/dynamic_annotations.gyp:dynamic_annotations',
+        '../ui/gfx/gfx.gyp:gfx_geometry',
+        '../ui/gl/gl.gyp:gl',
+      ],
+      'defines': [
+        'GL_IN_PROCESS_CONTEXT_IMPLEMENTATION',
+      ],
+      'sources': [
+        'command_buffer/client/gl_in_process_context.h',
+        'command_buffer/client/gl_in_process_context.cc',
+        'command_buffer/client/gl_in_process_context_export.h',
+      ],
+    },
+    {
       # Library emulates GLES2 using command_buffers.
       'target_name': 'gles2_implementation_client_side_arrays',
       'type': '<(component)',
@@ -244,7 +260,6 @@
         'command_buffer/service/gpu_tracer_unittest.cc',
         'config/gpu_blacklist_unittest.cc',
         'config/gpu_control_list_entry_unittest.cc',
-        'config/gpu_control_list_machine_model_info_unittest.cc',
         'config/gpu_control_list_number_info_unittest.cc',
         'config/gpu_control_list_os_info_unittest.cc',
         'config/gpu_control_list_string_info_unittest.cc',
@@ -579,7 +594,6 @@
           ],
           'variables': {
             'test_suite_name': 'gl_tests',
-            'input_shlib_path': '<(SHARED_LIB_DIR)/<(SHARED_LIB_PREFIX)gl_tests<(SHARED_LIB_SUFFIX)',
           },
           'includes': [
             '../build/apk_test.gypi',
diff --git a/gpu/gpu_common.gypi b/gpu/gpu_common.gypi
index 68808f2..4550fc7 100644
--- a/gpu/gpu_common.gypi
+++ b/gpu/gpu_common.gypi
@@ -61,7 +61,6 @@
           ],
           'variables': {
             'test_suite_name': 'gpu_unittests',
-            'input_shlib_path': '<(SHARED_LIB_DIR)/<(SHARED_LIB_PREFIX)gpu_unittests<(SHARED_LIB_SUFFIX)',
           },
           'includes': [ '../build/apk_test.gypi' ],
         },
diff --git a/gpu/gpu_config.target.darwin-arm.mk b/gpu/gpu_config.target.darwin-arm.mk
index 2cb6c37..07af379 100644
--- a/gpu/gpu_config.target.darwin-arm.mk
+++ b/gpu/gpu_config.target.darwin-arm.mk
@@ -52,7 +52,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-fno-tree-sra \
 	-fuse-ld=gold \
 	-Wno-psabi \
@@ -148,7 +147,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-fno-tree-sra \
 	-fuse-ld=gold \
 	-Wno-psabi \
@@ -251,7 +249,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/gpu_config.target.darwin-mips.mk b/gpu/gpu_config.target.darwin-mips.mk
index 87a6b2a..5f8d2c4 100644
--- a/gpu/gpu_config.target.darwin-mips.mk
+++ b/gpu/gpu_config.target.darwin-mips.mk
@@ -52,7 +52,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-EL \
 	-mhard-float \
 	-ffunction-sections \
@@ -147,7 +146,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-EL \
 	-mhard-float \
 	-ffunction-sections \
@@ -247,7 +245,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/gpu_config.target.darwin-x86.mk b/gpu/gpu_config.target.darwin-x86.mk
index 25ea8fb..15517dd 100644
--- a/gpu/gpu_config.target.darwin-x86.mk
+++ b/gpu/gpu_config.target.darwin-x86.mk
@@ -51,7 +51,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-msse2 \
 	-mfpmath=sse \
 	-mmmx \
@@ -147,7 +146,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-msse2 \
 	-mfpmath=sse \
 	-mmmx \
@@ -249,7 +247,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/gpu_config.target.darwin-x86_64.mk b/gpu/gpu_config.target.darwin-x86_64.mk
index 4013653..4307af0 100644
--- a/gpu/gpu_config.target.darwin-x86_64.mk
+++ b/gpu/gpu_config.target.darwin-x86_64.mk
@@ -53,7 +53,6 @@
 	-pipe \
 	-fPIC \
 	-Wno-unused-local-typedefs \
-	-Wno-unknown-pragmas \
 	-m64 \
 	-march=x86-64 \
 	-fuse-ld=gold \
@@ -149,7 +148,6 @@
 	-pipe \
 	-fPIC \
 	-Wno-unused-local-typedefs \
-	-Wno-unknown-pragmas \
 	-m64 \
 	-march=x86-64 \
 	-fuse-ld=gold \
@@ -249,7 +247,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/gpu_config.target.linux-arm.mk b/gpu/gpu_config.target.linux-arm.mk
index 2cb6c37..07af379 100644
--- a/gpu/gpu_config.target.linux-arm.mk
+++ b/gpu/gpu_config.target.linux-arm.mk
@@ -52,7 +52,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-fno-tree-sra \
 	-fuse-ld=gold \
 	-Wno-psabi \
@@ -148,7 +147,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-fno-tree-sra \
 	-fuse-ld=gold \
 	-Wno-psabi \
@@ -251,7 +249,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/gpu_config.target.linux-mips.mk b/gpu/gpu_config.target.linux-mips.mk
index 87a6b2a..5f8d2c4 100644
--- a/gpu/gpu_config.target.linux-mips.mk
+++ b/gpu/gpu_config.target.linux-mips.mk
@@ -52,7 +52,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-EL \
 	-mhard-float \
 	-ffunction-sections \
@@ -147,7 +146,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-EL \
 	-mhard-float \
 	-ffunction-sections \
@@ -247,7 +245,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/gpu_config.target.linux-x86.mk b/gpu/gpu_config.target.linux-x86.mk
index 25ea8fb..15517dd 100644
--- a/gpu/gpu_config.target.linux-x86.mk
+++ b/gpu/gpu_config.target.linux-x86.mk
@@ -51,7 +51,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-msse2 \
 	-mfpmath=sse \
 	-mmmx \
@@ -147,7 +146,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-msse2 \
 	-mfpmath=sse \
 	-mmmx \
@@ -249,7 +247,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/gpu_config.target.linux-x86_64.mk b/gpu/gpu_config.target.linux-x86_64.mk
index 4013653..4307af0 100644
--- a/gpu/gpu_config.target.linux-x86_64.mk
+++ b/gpu/gpu_config.target.linux-x86_64.mk
@@ -53,7 +53,6 @@
 	-pipe \
 	-fPIC \
 	-Wno-unused-local-typedefs \
-	-Wno-unknown-pragmas \
 	-m64 \
 	-march=x86-64 \
 	-fuse-ld=gold \
@@ -149,7 +148,6 @@
 	-pipe \
 	-fPIC \
 	-Wno-unused-local-typedefs \
-	-Wno-unknown-pragmas \
 	-m64 \
 	-march=x86-64 \
 	-fuse-ld=gold \
@@ -249,7 +247,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/gpu_ipc.target.darwin-arm.mk b/gpu/gpu_ipc.target.darwin-arm.mk
index 871d479..7a01f56 100644
--- a/gpu/gpu_ipc.target.darwin-arm.mk
+++ b/gpu/gpu_ipc.target.darwin-arm.mk
@@ -224,7 +224,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/gpu_ipc.target.darwin-mips.mk b/gpu/gpu_ipc.target.darwin-mips.mk
index 634ab6e..1f2dbb7 100644
--- a/gpu/gpu_ipc.target.darwin-mips.mk
+++ b/gpu/gpu_ipc.target.darwin-mips.mk
@@ -220,7 +220,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/gpu_ipc.target.darwin-x86.mk b/gpu/gpu_ipc.target.darwin-x86.mk
index c3d40d6..c8c8023 100644
--- a/gpu/gpu_ipc.target.darwin-x86.mk
+++ b/gpu/gpu_ipc.target.darwin-x86.mk
@@ -222,7 +222,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/gpu_ipc.target.darwin-x86_64.mk b/gpu/gpu_ipc.target.darwin-x86_64.mk
index 8c679c2..d6221b4 100644
--- a/gpu/gpu_ipc.target.darwin-x86_64.mk
+++ b/gpu/gpu_ipc.target.darwin-x86_64.mk
@@ -222,7 +222,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/gpu_ipc.target.linux-arm.mk b/gpu/gpu_ipc.target.linux-arm.mk
index 871d479..7a01f56 100644
--- a/gpu/gpu_ipc.target.linux-arm.mk
+++ b/gpu/gpu_ipc.target.linux-arm.mk
@@ -224,7 +224,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/gpu_ipc.target.linux-mips.mk b/gpu/gpu_ipc.target.linux-mips.mk
index 634ab6e..1f2dbb7 100644
--- a/gpu/gpu_ipc.target.linux-mips.mk
+++ b/gpu/gpu_ipc.target.linux-mips.mk
@@ -220,7 +220,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/gpu_ipc.target.linux-x86.mk b/gpu/gpu_ipc.target.linux-x86.mk
index c3d40d6..c8c8023 100644
--- a/gpu/gpu_ipc.target.linux-x86.mk
+++ b/gpu/gpu_ipc.target.linux-x86.mk
@@ -222,7 +222,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/gpu_ipc.target.linux-x86_64.mk b/gpu/gpu_ipc.target.linux-x86_64.mk
index 8c679c2..d6221b4 100644
--- a/gpu/gpu_ipc.target.linux-x86_64.mk
+++ b/gpu/gpu_ipc.target.linux-x86_64.mk
@@ -222,7 +222,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/skia_bindings/gl_bindings_skia_cmd_buffer.cc b/gpu/skia_bindings/gl_bindings_skia_cmd_buffer.cc
index b8079d1..2894cf7 100644
--- a/gpu/skia_bindings/gl_bindings_skia_cmd_buffer.cc
+++ b/gpu/skia_bindings/gl_bindings_skia_cmd_buffer.cc
@@ -74,6 +74,8 @@
   functions->fInsertEventMarker = glInsertEventMarkerEXT;
   functions->fLineWidth = glLineWidth;
   functions->fLinkProgram = glLinkProgram;
+  functions->fMapBufferSubData = glMapBufferSubDataCHROMIUM;
+  functions->fMapTexSubImage2D = glMapTexSubImage2DCHROMIUM;
   functions->fPixelStorei = glPixelStorei;
   functions->fPopGroupMarker = glPopGroupMarkerEXT;
   functions->fPushGroupMarker = glPushGroupMarkerEXT;
@@ -110,6 +112,8 @@
   functions->fUniformMatrix2fv = glUniformMatrix2fv;
   functions->fUniformMatrix3fv = glUniformMatrix3fv;
   functions->fUniformMatrix4fv = glUniformMatrix4fv;
+  functions->fUnmapBufferSubData = glUnmapBufferSubDataCHROMIUM;
+  functions->fUnmapTexSubImage2D = glUnmapTexSubImage2DCHROMIUM;
   functions->fUseProgram = glUseProgram;
   functions->fVertexAttrib4fv = glVertexAttrib4fv;
   functions->fVertexAttribPointer = glVertexAttribPointer;
diff --git a/gpu/skia_bindings/gpu_skia_bindings.target.darwin-arm.mk b/gpu/skia_bindings/gpu_skia_bindings.target.darwin-arm.mk
index 2ddabec..300f0f0 100644
--- a/gpu/skia_bindings/gpu_skia_bindings.target.darwin-arm.mk
+++ b/gpu/skia_bindings/gpu_skia_bindings.target.darwin-arm.mk
@@ -91,12 +91,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -209,12 +212,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -285,7 +291,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/skia_bindings/gpu_skia_bindings.target.darwin-mips.mk b/gpu/skia_bindings/gpu_skia_bindings.target.darwin-mips.mk
index 946ad80..e57641d 100644
--- a/gpu/skia_bindings/gpu_skia_bindings.target.darwin-mips.mk
+++ b/gpu/skia_bindings/gpu_skia_bindings.target.darwin-mips.mk
@@ -90,12 +90,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -207,12 +210,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -281,7 +287,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/skia_bindings/gpu_skia_bindings.target.darwin-x86.mk b/gpu/skia_bindings/gpu_skia_bindings.target.darwin-x86.mk
index dbd93c0..b7ceff1 100644
--- a/gpu/skia_bindings/gpu_skia_bindings.target.darwin-x86.mk
+++ b/gpu/skia_bindings/gpu_skia_bindings.target.darwin-x86.mk
@@ -92,12 +92,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -210,12 +213,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -283,7 +289,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/skia_bindings/gpu_skia_bindings.target.darwin-x86_64.mk b/gpu/skia_bindings/gpu_skia_bindings.target.darwin-x86_64.mk
index b549df8..bd25a83 100644
--- a/gpu/skia_bindings/gpu_skia_bindings.target.darwin-x86_64.mk
+++ b/gpu/skia_bindings/gpu_skia_bindings.target.darwin-x86_64.mk
@@ -92,12 +92,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -210,12 +213,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -283,7 +289,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/skia_bindings/gpu_skia_bindings.target.linux-arm.mk b/gpu/skia_bindings/gpu_skia_bindings.target.linux-arm.mk
index 2ddabec..300f0f0 100644
--- a/gpu/skia_bindings/gpu_skia_bindings.target.linux-arm.mk
+++ b/gpu/skia_bindings/gpu_skia_bindings.target.linux-arm.mk
@@ -91,12 +91,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -209,12 +212,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -285,7 +291,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/skia_bindings/gpu_skia_bindings.target.linux-mips.mk b/gpu/skia_bindings/gpu_skia_bindings.target.linux-mips.mk
index 946ad80..e57641d 100644
--- a/gpu/skia_bindings/gpu_skia_bindings.target.linux-mips.mk
+++ b/gpu/skia_bindings/gpu_skia_bindings.target.linux-mips.mk
@@ -90,12 +90,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -207,12 +210,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -281,7 +287,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/skia_bindings/gpu_skia_bindings.target.linux-x86.mk b/gpu/skia_bindings/gpu_skia_bindings.target.linux-x86.mk
index dbd93c0..b7ceff1 100644
--- a/gpu/skia_bindings/gpu_skia_bindings.target.linux-x86.mk
+++ b/gpu/skia_bindings/gpu_skia_bindings.target.linux-x86.mk
@@ -92,12 +92,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -210,12 +213,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -283,7 +289,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/gpu/skia_bindings/gpu_skia_bindings.target.linux-x86_64.mk b/gpu/skia_bindings/gpu_skia_bindings.target.linux-x86_64.mk
index b549df8..bd25a83 100644
--- a/gpu/skia_bindings/gpu_skia_bindings.target.linux-x86_64.mk
+++ b/gpu/skia_bindings/gpu_skia_bindings.target.linux-x86_64.mk
@@ -92,12 +92,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -210,12 +213,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -283,7 +289,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ipc/ipc.gyp b/ipc/ipc.gyp
index 0546deb..dac7cfa 100644
--- a/ipc/ipc.gyp
+++ b/ipc/ipc.gyp
@@ -62,11 +62,6 @@
         'unix_domain_socket_util_unittest.cc',
       ],
       'conditions': [
-        ['toolkit_uses_gtk == 1', {
-          'dependencies': [
-            '../build/linux/system.gyp:gtk',
-          ],
-        }],
         ['OS == "win" or OS == "ios"', {
           'sources!': [
             'unix_domain_socket_util_unittest.cc',
@@ -111,11 +106,6 @@
         'ipc_test_base.h',
       ],
       'conditions': [
-        ['toolkit_uses_gtk == 1', {
-          'dependencies': [
-            '../build/linux/system.gyp:gtk',
-          ],
-        }],
         ['OS == "android" and gtest_target_type == "shared_library"', {
           'dependencies': [
             '../testing/android/native_test.gyp:native_test_native_code',
@@ -192,7 +182,6 @@
           ],
           'variables': {
             'test_suite_name': 'ipc_tests',
-            'input_shlib_path': '<(SHARED_LIB_DIR)/<(SHARED_LIB_PREFIX)ipc_tests<(SHARED_LIB_SUFFIX)',
           },
           'includes': [ '../build/apk_test.gypi' ],
         },
@@ -204,7 +193,6 @@
           ],
           'variables': {
             'test_suite_name': 'ipc_perftests',
-            'input_shlib_path': '<(SHARED_LIB_DIR)/<(SHARED_LIB_PREFIX)ipc_perftests<(SHARED_LIB_SUFFIX)',
           },
           'includes': [ '../build/apk_test.gypi' ],
         }],
diff --git a/ipc/ipc.target.darwin-arm.mk b/ipc/ipc.target.darwin-arm.mk
index 8d8edc1..7b721c7 100644
--- a/ipc/ipc.target.darwin-arm.mk
+++ b/ipc/ipc.target.darwin-arm.mk
@@ -236,7 +236,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ipc/ipc.target.darwin-mips.mk b/ipc/ipc.target.darwin-mips.mk
index bbd1a47..af364c4 100644
--- a/ipc/ipc.target.darwin-mips.mk
+++ b/ipc/ipc.target.darwin-mips.mk
@@ -232,7 +232,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ipc/ipc.target.darwin-x86.mk b/ipc/ipc.target.darwin-x86.mk
index 598b2cd..f1e9ff3 100644
--- a/ipc/ipc.target.darwin-x86.mk
+++ b/ipc/ipc.target.darwin-x86.mk
@@ -234,7 +234,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ipc/ipc.target.darwin-x86_64.mk b/ipc/ipc.target.darwin-x86_64.mk
index 56be247..f7e961a 100644
--- a/ipc/ipc.target.darwin-x86_64.mk
+++ b/ipc/ipc.target.darwin-x86_64.mk
@@ -234,7 +234,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ipc/ipc.target.linux-arm.mk b/ipc/ipc.target.linux-arm.mk
index 8d8edc1..7b721c7 100644
--- a/ipc/ipc.target.linux-arm.mk
+++ b/ipc/ipc.target.linux-arm.mk
@@ -236,7 +236,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ipc/ipc.target.linux-mips.mk b/ipc/ipc.target.linux-mips.mk
index bbd1a47..af364c4 100644
--- a/ipc/ipc.target.linux-mips.mk
+++ b/ipc/ipc.target.linux-mips.mk
@@ -232,7 +232,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ipc/ipc.target.linux-x86.mk b/ipc/ipc.target.linux-x86.mk
index 598b2cd..f1e9ff3 100644
--- a/ipc/ipc.target.linux-x86.mk
+++ b/ipc/ipc.target.linux-x86.mk
@@ -234,7 +234,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ipc/ipc.target.linux-x86_64.mk b/ipc/ipc.target.linux-x86_64.mk
index 56be247..f7e961a 100644
--- a/ipc/ipc.target.linux-x86_64.mk
+++ b/ipc/ipc.target.linux-x86_64.mk
@@ -234,7 +234,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ipc/ipc_channel_proxy.cc b/ipc/ipc_channel_proxy.cc
index ca09146..d906dbf 100644
--- a/ipc/ipc_channel_proxy.cc
+++ b/ipc/ipc_channel_proxy.cc
@@ -145,6 +145,15 @@
       message_filter_router_(new MessageFilterRouter()),
       peer_pid_(base::kNullProcessId) {
   DCHECK(ipc_task_runner_.get());
+  // The Listener thread where Messages are handled must be a separate thread
+  // to avoid oversubscribing the IO thread. If you trigger this error, you
+  // need to either:
+  // 1) Create the ChannelProxy on a different thread, or
+  // 2) Just use Channel
+  // Note, we currently make an exception for a NULL listener. That usage
+  // basically works, but is outside the intent of ChannelProxy. This support
+  // will disappear, so please don't rely on it. See crbug.com/364241
+  DCHECK(!listener || (ipc_task_runner_.get() != listener_task_runner_.get()));
 }
 
 ChannelProxy::Context::~Context() {
diff --git a/ipc/ipc_channel_proxy_unittest.cc b/ipc/ipc_channel_proxy_unittest.cc
index 431f410..282b346 100644
--- a/ipc/ipc_channel_proxy_unittest.cc
+++ b/ipc/ipc_channel_proxy_unittest.cc
@@ -83,26 +83,67 @@
 
 class MessageCountFilter : public IPC::ChannelProxy::MessageFilter {
  public:
+  enum FilterEvent {
+    NONE,
+    FILTER_ADDED,
+    CHANNEL_CONNECTED,
+    CHANNEL_ERROR,
+    CHANNEL_CLOSING,
+    FILTER_REMOVED
+  };
   MessageCountFilter()
       : messages_received_(0),
         supported_message_class_(0),
         is_global_filter_(true),
-        filter_removed_(false),
+        last_filter_event_(NONE),
         message_filtering_enabled_(false) {}
 
   MessageCountFilter(uint32 supported_message_class)
       : messages_received_(0),
         supported_message_class_(supported_message_class),
         is_global_filter_(false),
-        filter_removed_(false),
+        last_filter_event_(NONE),
         message_filtering_enabled_(false) {}
 
+  virtual void OnFilterAdded(IPC::Channel* channel) OVERRIDE {
+    EXPECT_TRUE(channel);
+    EXPECT_EQ(NONE, last_filter_event_);
+    last_filter_event_ = FILTER_ADDED;
+  }
+
+  virtual void OnChannelConnected(int32_t peer_pid) OVERRIDE {
+    EXPECT_EQ(FILTER_ADDED, last_filter_event_);
+    EXPECT_NE(static_cast<int32_t>(base::kNullProcessId), peer_pid);
+    last_filter_event_ = CHANNEL_CONNECTED;
+  }
+
+  virtual void OnChannelError() OVERRIDE {
+    EXPECT_EQ(CHANNEL_CONNECTED, last_filter_event_);
+    last_filter_event_ = CHANNEL_ERROR;
+  }
+
+  virtual void OnChannelClosing() OVERRIDE {
+    // We may or may not have gotten OnChannelError; if not, the last event has
+    // to be OnChannelConnected.
+    if (last_filter_event_ != CHANNEL_ERROR)
+      EXPECT_EQ(CHANNEL_CONNECTED, last_filter_event_);
+    last_filter_event_ = CHANNEL_CLOSING;
+  }
+
   virtual void OnFilterRemoved() OVERRIDE {
-    EXPECT_FALSE(filter_removed_);
-    filter_removed_ = true;
+    // If the channel didn't get a chance to connect, we might see the
+    // OnFilterRemoved event with no other events preceding it. We still want
+    // OnFilterRemoved to be called to allow for deleting the Filter.
+    if (last_filter_event_ != NONE)
+      EXPECT_EQ(CHANNEL_CLOSING, last_filter_event_);
+    last_filter_event_ = FILTER_REMOVED;
   }
 
   virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE {
+    // We should always get the OnFilterAdded and OnChannelConnected events
+    // prior to any messages.
+    EXPECT_EQ(CHANNEL_CONNECTED, last_filter_event_);
+
     if (!is_global_filter_) {
       EXPECT_EQ(supported_message_class_, IPC_MESSAGE_CLASS(message));
     }
@@ -123,7 +164,7 @@
   }
 
   size_t messages_received() const { return messages_received_; }
-  bool filter_removed() const { return filter_removed_; }
+  FilterEvent last_filter_event() const { return last_filter_event_; }
 
  private:
   virtual ~MessageCountFilter() {}
@@ -131,7 +172,8 @@
   size_t messages_received_;
   uint32 supported_message_class_;
   bool is_global_filter_;
-  bool filter_removed_;
+
+  FilterEvent last_filter_event_;
   bool message_filtering_enabled_;
 };
 
@@ -248,8 +290,10 @@
 
   // Ensure that the filters were removed and did not receive any messages.
   SendQuitMessageAndWaitForIdle();
-  EXPECT_TRUE(global_filter->filter_removed());
-  EXPECT_TRUE(class_filter->filter_removed());
+  EXPECT_EQ(MessageCountFilter::FILTER_REMOVED,
+            global_filter->last_filter_event());
+  EXPECT_EQ(MessageCountFilter::FILTER_REMOVED,
+            class_filter->last_filter_event());
   EXPECT_EQ(0U, class_filter->messages_received());
   EXPECT_EQ(0U, global_filter->messages_received());
 }
diff --git a/ipc/ipc_switches.cc b/ipc/ipc_switches.cc
index bcb1225..df245f5 100644
--- a/ipc/ipc_switches.cc
+++ b/ipc/ipc_switches.cc
@@ -15,10 +15,5 @@
 // IPC channel the browser expects to use to communicate with it.
 const char kProcessChannelID[]              = "channel";
 
-// Will add kDebugOnStart to every child processes. If a value is passed, it
-// will be used as a filter to determine if the child process should have the
-// kDebugOnStart flag passed on or not.
-const char kDebugChildren[]                 = "debug-children";
-
 }  // namespace switches
 
diff --git a/ipc/ipc_switches.h b/ipc/ipc_switches.h
index d88afb5..c63c202 100644
--- a/ipc/ipc_switches.h
+++ b/ipc/ipc_switches.h
@@ -12,7 +12,6 @@
 namespace switches {
 
 IPC_EXPORT extern const char kProcessChannelID[];
-IPC_EXPORT extern const char kDebugChildren[];
 
 }  // namespace switches
 
diff --git a/ipc/ipc_sync_channel.cc b/ipc/ipc_sync_channel.cc
index 4b706e2..9e04f61 100644
--- a/ipc/ipc_sync_channel.cc
+++ b/ipc/ipc_sync_channel.cc
@@ -411,8 +411,10 @@
     base::SingleThreadTaskRunner* ipc_task_runner,
     bool create_pipe_now,
     WaitableEvent* shutdown_event)
-    : ChannelProxy(new SyncContext(listener, ipc_task_runner, shutdown_event)),
-      sync_messages_with_no_timeout_allowed_(true) {
+    : ChannelProxy(new SyncContext(listener, ipc_task_runner, shutdown_event)) {
+  // The current (listener) thread must be distinct from the IPC thread, or else
+  // sending synchronous messages will deadlock.
+  DCHECK_NE(ipc_task_runner, base::ThreadTaskRunnerHandle::Get());
   ChannelProxy::Init(channel_handle, mode, create_pipe_now);
   StartWatching();
 }
@@ -421,8 +423,10 @@
     Listener* listener,
     base::SingleThreadTaskRunner* ipc_task_runner,
     WaitableEvent* shutdown_event)
-    : ChannelProxy(new SyncContext(listener, ipc_task_runner, shutdown_event)),
-      sync_messages_with_no_timeout_allowed_(true) {
+    : ChannelProxy(new SyncContext(listener, ipc_task_runner, shutdown_event)) {
+  // The current (listener) thread must be distinct from the IPC thread, or else
+  // sending synchronous messages will deadlock.
+  DCHECK_NE(ipc_task_runner, base::ThreadTaskRunnerHandle::Get());
   StartWatching();
 }
 
@@ -434,18 +438,13 @@
 }
 
 bool SyncChannel::Send(Message* message) {
-  return SendWithTimeout(message, base::kNoTimeout);
-}
-
-bool SyncChannel::SendWithTimeout(Message* message, int timeout_ms) {
 #ifdef IPC_MESSAGE_LOG_ENABLED
   Logging* logger = Logging::GetInstance();
   std::string name;
   logger->GetMessageText(message->type(), &name, message, NULL);
-  TRACE_EVENT1("toplevel", "SyncChannel::SendWithTimeout",
-               "name", name);
+  TRACE_EVENT1("toplevel", "SyncChannel::Send", "name", name);
 #else
-  TRACE_EVENT2("toplevel", "SyncChannel::SendWithTimeout",
+  TRACE_EVENT2("toplevel", "SyncChannel::Send",
                "class", IPC_MESSAGE_ID_CLASS(message->type()),
                "line", IPC_MESSAGE_ID_LINE(message->type()));
 #endif
@@ -462,25 +461,12 @@
     return false;
   }
 
-  DCHECK(sync_messages_with_no_timeout_allowed_ ||
-         timeout_ms != base::kNoTimeout);
   SyncMessage* sync_msg = static_cast<SyncMessage*>(message);
   context->Push(sync_msg);
-  int message_id = SyncMessage::GetMessageId(*sync_msg);
   WaitableEvent* pump_messages_event = sync_msg->pump_messages_event();
 
   ChannelProxy::Send(message);
 
-  if (timeout_ms != base::kNoTimeout) {
-    // We use the sync message id so that when a message times out, we don't
-    // confuse it with another send that is either above/below this Send in
-    // the call stack.
-    context->ipc_task_runner()->PostDelayedTask(
-        FROM_HERE,
-        base::Bind(&SyncContext::OnSendTimeout, context.get(), message_id),
-        base::TimeDelta::FromMilliseconds(timeout_ms));
-  }
-
   // Wait for reply, or for any other incoming synchronous messages.
   // *this* might get deleted, so only call static functions at this point.
   WaitForReply(context.get(), pump_messages_event);
diff --git a/ipc/ipc_sync_channel.h b/ipc/ipc_sync_channel.h
index 46ac910..f18fcff 100644
--- a/ipc/ipc_sync_channel.h
+++ b/ipc/ipc_sync_channel.h
@@ -30,7 +30,7 @@
 // Overview of how the sync channel works
 // --------------------------------------
 // When the sending thread sends a synchronous message, we create a bunch
-// of tracking info (created in SendWithTimeout, stored in the PendingSyncMsg
+// of tracking info (created in Send, stored in the PendingSyncMsg
 // structure) associated with the message that we identify by the unique
 // "MessageId" on the SyncMessage. Among the things we save is the
 // "Deserializer" which is provided by the sync message. This object is in
@@ -83,12 +83,6 @@
   virtual ~SyncChannel();
 
   virtual bool Send(Message* message) OVERRIDE;
-  virtual bool SendWithTimeout(Message* message, int timeout_ms);
-
-  // Whether we allow sending messages with no time-out.
-  void set_sync_messages_with_no_timeout_allowed(bool value) {
-    sync_messages_with_no_timeout_allowed_ = value;
-  }
 
   // Sets the dispatch group for this channel, to only allow re-entrant dispatch
   // of messages to other channels in the same group.
@@ -212,8 +206,6 @@
   // Starts the dispatch watcher.
   void StartWatching();
 
-  bool sync_messages_with_no_timeout_allowed_;
-
   // Used to signal events between the IPC and listener threads.
   base::WaitableEventWatcher dispatch_watcher_;
   base::WaitableEventWatcher::EventCallback dispatch_watcher_callback_;
diff --git a/ipc/ipc_sync_channel_unittest.cc b/ipc/ipc_sync_channel_unittest.cc
index a39ec77..ca8d5d7 100644
--- a/ipc/ipc_sync_channel_unittest.cc
+++ b/ipc/ipc_sync_channel_unittest.cc
@@ -65,9 +65,6 @@
   void AddRef() { }
   void Release() { }
   virtual bool Send(Message* msg) OVERRIDE { return channel_->Send(msg); }
-  bool SendWithTimeout(Message* msg, int timeout_ms) {
-    return channel_->SendWithTimeout(msg, timeout_ms);
-  }
   void WaitForChannelCreation() { channel_created_->Wait(); }
   void CloseChannel() {
     DCHECK(base::MessageLoop::current() == ListenerThread()->message_loop());
@@ -96,12 +93,12 @@
     DCHECK(overrided_thread_ == NULL);
     overrided_thread_ = overrided_thread;
   }
-  bool SendAnswerToLife(bool pump, int timeout, bool succeed) {
+  bool SendAnswerToLife(bool pump, bool succeed) {
     int answer = 0;
     SyncMessage* msg = new SyncChannelTestMsg_AnswerToLife(&answer);
     if (pump)
       msg->EnableMessagePumping();
-    bool result = SendWithTimeout(msg, timeout);
+    bool result = Send(msg);
     DCHECK_EQ(result, succeed);
     DCHECK_EQ(answer, (succeed ? 42 : 0));
     return result;
@@ -280,7 +277,7 @@
       : Worker(Channel::MODE_SERVER, "simpler_server"),
         pump_during_send_(pump_during_send) { }
   virtual void Run() OVERRIDE {
-    SendAnswerToLife(pump_during_send_, base::kNoTimeout, true);
+    SendAnswerToLife(pump_during_send_, true);
     Done();
   }
 
@@ -322,7 +319,7 @@
         create_pipe_now_(create_pipe_now) { }
 
   virtual void Run() OVERRIDE {
-    SendAnswerToLife(false, base::kNoTimeout, true);
+    SendAnswerToLife(false, true);
     Done();
   }
 
@@ -408,10 +405,10 @@
         got_first_reply_(got_first_reply),
         pump_during_send_(pump_during_send) { }
   virtual void Run() OVERRIDE {
-    SendAnswerToLife(pump_during_send_, base::kNoTimeout, true);
+    SendAnswerToLife(pump_during_send_, true);
     got_first_reply_->Signal();
 
-    SendAnswerToLife(pump_during_send_, base::kNoTimeout, false);
+    SendAnswerToLife(pump_during_send_, false);
     Done();
   }
 
@@ -470,7 +467,7 @@
         msg->EnableMessagePumping();
       Send(msg);
     } else {
-      SendAnswerToLife(pump_during_send_, base::kNoTimeout, true);
+      SendAnswerToLife(pump_during_send_, true);
     }
     Done();
   }
@@ -541,7 +538,7 @@
 
   virtual void OnDouble(int in, int* out) OVERRIDE {
     *out = in * 2;
-    SendAnswerToLife(pump_second_, base::kNoTimeout, expected_send_result_);
+    SendAnswerToLife(pump_second_, expected_send_result_);
   }
 
   bool expected_send_result_, pump_first_, pump_second_;
@@ -679,7 +676,7 @@
 
   virtual void Run() OVERRIDE {
     client1_msg_received_->Wait();
-    SendAnswerToLife(pump_during_send_, base::kNoTimeout, true);
+    SendAnswerToLife(pump_during_send_, true);
     client1_can_reply_->Signal();
     Done();
   }
@@ -879,117 +876,10 @@
 
 //------------------------------------------------------------------------------
 
-class TimeoutServer : public Worker {
- public:
-  TimeoutServer(int timeout_ms,
-                std::vector<bool> timeout_seq,
-                bool pump_during_send)
-      : Worker(Channel::MODE_SERVER, "timeout_server"),
-        timeout_ms_(timeout_ms),
-        timeout_seq_(timeout_seq),
-        pump_during_send_(pump_during_send) {
-  }
-
-  virtual void Run() OVERRIDE {
-    for (std::vector<bool>::const_iterator iter = timeout_seq_.begin();
-         iter != timeout_seq_.end(); ++iter) {
-      SendAnswerToLife(pump_during_send_, timeout_ms_, !*iter);
-    }
-    Done();
-  }
-
- private:
-  int timeout_ms_;
-  std::vector<bool> timeout_seq_;
-  bool pump_during_send_;
-};
-
-class UnresponsiveClient : public Worker {
- public:
-  explicit UnresponsiveClient(std::vector<bool> timeout_seq)
-      : Worker(Channel::MODE_CLIENT, "unresponsive_client"),
-        timeout_seq_(timeout_seq) {
-  }
-
-  virtual void OnAnswerDelay(Message* reply_msg) OVERRIDE {
-    DCHECK(!timeout_seq_.empty());
-    if (!timeout_seq_[0]) {
-      SyncChannelTestMsg_AnswerToLife::WriteReplyParams(reply_msg, 42);
-      Send(reply_msg);
-    } else {
-      // Don't reply.
-      delete reply_msg;
-    }
-    timeout_seq_.erase(timeout_seq_.begin());
-    if (timeout_seq_.empty())
-      Done();
-  }
-
- private:
-  // Whether we should time-out or respond to the various messages we receive.
-  std::vector<bool> timeout_seq_;
-};
-
-void SendWithTimeoutOK(bool pump_during_send) {
-  std::vector<Worker*> workers;
-  std::vector<bool> timeout_seq;
-  timeout_seq.push_back(false);
-  timeout_seq.push_back(false);
-  timeout_seq.push_back(false);
-  workers.push_back(new TimeoutServer(5000, timeout_seq, pump_during_send));
-  workers.push_back(new SimpleClient());
-  RunTest(workers);
-}
-
-void SendWithTimeoutTimeout(bool pump_during_send) {
-  std::vector<Worker*> workers;
-  std::vector<bool> timeout_seq;
-  timeout_seq.push_back(true);
-  timeout_seq.push_back(false);
-  timeout_seq.push_back(false);
-  workers.push_back(new TimeoutServer(100, timeout_seq, pump_during_send));
-  workers.push_back(new UnresponsiveClient(timeout_seq));
-  RunTest(workers);
-}
-
-void SendWithTimeoutMixedOKAndTimeout(bool pump_during_send) {
-  std::vector<Worker*> workers;
-  std::vector<bool> timeout_seq;
-  timeout_seq.push_back(true);
-  timeout_seq.push_back(false);
-  timeout_seq.push_back(false);
-  timeout_seq.push_back(true);
-  timeout_seq.push_back(false);
-  workers.push_back(new TimeoutServer(100, timeout_seq, pump_during_send));
-  workers.push_back(new UnresponsiveClient(timeout_seq));
-  RunTest(workers);
-}
-
-// Tests that SendWithTimeout does not time-out if the response comes back fast
-// enough.
-TEST_F(IPCSyncChannelTest, SendWithTimeoutOK) {
-  SendWithTimeoutOK(false);
-  SendWithTimeoutOK(true);
-}
-
-// Tests that SendWithTimeout does time-out.
-TEST_F(IPCSyncChannelTest, SendWithTimeoutTimeout) {
-  SendWithTimeoutTimeout(false);
-  SendWithTimeoutTimeout(true);
-}
-
-// Sends some message that time-out and some that succeed.
-TEST_F(IPCSyncChannelTest, SendWithTimeoutMixedOKAndTimeout) {
-  SendWithTimeoutMixedOKAndTimeout(false);
-  SendWithTimeoutMixedOKAndTimeout(true);
-}
-
-//------------------------------------------------------------------------------
-
 void NestedCallback(Worker* server) {
   // Sleep a bit so that we wake up after the reply has been received.
   base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(250));
-  server->SendAnswerToLife(true, base::kNoTimeout, true);
+  server->SendAnswerToLife(true, true);
 }
 
 bool timeout_occurred = false;
@@ -1014,7 +904,7 @@
     // bug, the reply message comes back and is deserialized, however the done
     // event wasn't set.  So we indirectly use the timeout task to notice if a
     // timeout occurred.
-    SendAnswerToLife(true, 10000, true);
+    SendAnswerToLife(true, true);
     DCHECK(!timeout_occurred);
     Done();
   }
diff --git a/ipc/ipc_test_base.cc b/ipc/ipc_test_base.cc
index d3ad4d3..b609e8c 100644
--- a/ipc/ipc_test_base.cc
+++ b/ipc/ipc_test_base.cc
@@ -7,7 +7,6 @@
 #include "ipc/ipc_test_base.h"
 
 #include "base/command_line.h"
-#include "base/debug/debug_on_start_win.h"
 #include "base/process/kill.h"
 #include "base/threading/thread.h"
 #include "base/time/time.h"
diff --git a/jingle/jingle.gyp b/jingle/jingle.gyp
index 8ccda5d..9799a0a 100644
--- a/jingle/jingle.gyp
+++ b/jingle/jingle.gyp
@@ -99,13 +99,6 @@
           'export_dependent_settings': [
             '../third_party/libjingle/libjingle.gyp:libjingle',
           ],
-          'conditions': [
-            ['toolkit_uses_gtk == 1', {
-              'dependencies': [
-                '../build/linux/system.gyp:gtk'
-              ],
-            }],
-          ],
         },
         {
           'target_name': 'notifier_test_util',
diff --git a/jingle/jingle_glue.target.darwin-arm.mk b/jingle/jingle_glue.target.darwin-arm.mk
index 9ca2476..08b981a 100644
--- a/jingle/jingle_glue.target.darwin-arm.mk
+++ b/jingle/jingle_glue.target.darwin-arm.mk
@@ -259,7 +259,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/jingle/jingle_glue.target.darwin-mips.mk b/jingle/jingle_glue.target.darwin-mips.mk
index f6dad53..dc688cc 100644
--- a/jingle/jingle_glue.target.darwin-mips.mk
+++ b/jingle/jingle_glue.target.darwin-mips.mk
@@ -255,7 +255,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/jingle/jingle_glue.target.darwin-x86.mk b/jingle/jingle_glue.target.darwin-x86.mk
index bc30739..d4de780 100644
--- a/jingle/jingle_glue.target.darwin-x86.mk
+++ b/jingle/jingle_glue.target.darwin-x86.mk
@@ -255,7 +255,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/jingle/jingle_glue.target.darwin-x86_64.mk b/jingle/jingle_glue.target.darwin-x86_64.mk
index ba7784c..fd7c913 100644
--- a/jingle/jingle_glue.target.darwin-x86_64.mk
+++ b/jingle/jingle_glue.target.darwin-x86_64.mk
@@ -257,7 +257,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/jingle/jingle_glue.target.linux-arm.mk b/jingle/jingle_glue.target.linux-arm.mk
index 9ca2476..08b981a 100644
--- a/jingle/jingle_glue.target.linux-arm.mk
+++ b/jingle/jingle_glue.target.linux-arm.mk
@@ -259,7 +259,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/jingle/jingle_glue.target.linux-mips.mk b/jingle/jingle_glue.target.linux-mips.mk
index f6dad53..dc688cc 100644
--- a/jingle/jingle_glue.target.linux-mips.mk
+++ b/jingle/jingle_glue.target.linux-mips.mk
@@ -255,7 +255,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/jingle/jingle_glue.target.linux-x86.mk b/jingle/jingle_glue.target.linux-x86.mk
index bc30739..d4de780 100644
--- a/jingle/jingle_glue.target.linux-x86.mk
+++ b/jingle/jingle_glue.target.linux-x86.mk
@@ -255,7 +255,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/jingle/jingle_glue.target.linux-x86_64.mk b/jingle/jingle_glue.target.linux-x86_64.mk
index ba7784c..fd7c913 100644
--- a/jingle/jingle_glue.target.linux-x86_64.mk
+++ b/jingle/jingle_glue.target.linux-x86_64.mk
@@ -257,7 +257,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/media/audio/audio_input_unittest.cc b/media/audio/audio_input_unittest.cc
index 1573abc..f972e44 100644
--- a/media/audio/audio_input_unittest.cc
+++ b/media/audio/audio_input_unittest.cc
@@ -6,6 +6,7 @@
 #include "base/environment.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/message_loop/message_loop.h"
+#include "base/run_loop.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/threading/platform_thread.h"
 #include "media/audio/audio_io.h"
@@ -52,9 +53,13 @@
       message_loop_(base::MessageLoop::TYPE_UI),
       audio_manager_(AudioManager::CreateForTesting()),
       audio_input_stream_(NULL) {
+    // Wait for the AudioManager to finish any initialization on the audio loop.
+    base::RunLoop().RunUntilIdle();
   }
 
-  virtual ~AudioInputTest() {}
+  virtual ~AudioInputTest() {
+    base::RunLoop().RunUntilIdle();
+  }
 
  protected:
   AudioManager* audio_manager() { return audio_manager_.get(); }
diff --git a/media/audio/audio_manager_base.h b/media/audio/audio_manager_base.h
index 237eaee..bc13ee5 100644
--- a/media/audio/audio_manager_base.h
+++ b/media/audio/audio_manager_base.h
@@ -115,6 +115,10 @@
   virtual scoped_ptr<AudioLog> CreateAudioLog(
       AudioLogFactory::AudioComponent component) OVERRIDE;
 
+  // Get number of input or output streams.
+  int input_stream_count() const { return num_input_streams_; }
+  int output_stream_count() const { return num_output_streams_; }
+
  protected:
   AudioManagerBase(AudioLogFactory* audio_log_factory);
 
@@ -150,10 +154,6 @@
   // Implementations that don't yet support this should return an empty string.
   virtual std::string GetDefaultOutputDeviceID();
 
-  // Get number of input or output streams.
-  int input_stream_count() { return num_input_streams_; }
-  int output_stream_count() { return num_output_streams_; }
-
  private:
   struct DispatcherParams;
   typedef ScopedVector<DispatcherParams> AudioOutputDispatchers;
diff --git a/media/audio/cras/audio_manager_cras.cc b/media/audio/cras/audio_manager_cras.cc
index ee7cc9c..4f1e3f8 100644
--- a/media/audio/cras/audio_manager_cras.cc
+++ b/media/audio/cras/audio_manager_cras.cc
@@ -4,6 +4,8 @@
 
 #include "media/audio/cras/audio_manager_cras.h"
 
+#include <algorithm>
+
 #include "base/command_line.h"
 #include "base/environment.h"
 #include "base/logging.h"
@@ -13,6 +15,11 @@
 #include "media/audio/cras/cras_unified.h"
 #include "media/base/channel_layout.h"
 
+// cras_util.h headers pull in min/max macros...
+// TODO(dgreid): Fix headers such that these aren't imported.
+#undef min
+#undef max
+
 namespace media {
 
 static void AddDefaultDevice(AudioDeviceNames* device_names) {
@@ -30,6 +37,10 @@
 // Default sample rate for input and output streams.
 static const int kDefaultSampleRate = 48000;
 
+// Define bounds for the output buffer size.
+static const int kMinimumOutputBufferSize = 512;
+static const int kMaximumOutputBufferSize = 8192;
+
 bool AudioManagerCras::HasAudioOutputDevices() {
   return true;
 }
@@ -103,11 +114,9 @@
     const AudioParameters& input_params) {
   // TODO(tommi): Support |output_device_id|.
   DLOG_IF(ERROR, !output_device_id.empty()) << "Not implemented!";
-  static const int kDefaultOutputBufferSize = 512;
-
   ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO;
   int sample_rate = kDefaultSampleRate;
-  int buffer_size = kDefaultOutputBufferSize;
+  int buffer_size = kMinimumOutputBufferSize;
   int bits_per_sample = 16;
   int input_channels = 0;
   if (input_params.IsValid()) {
@@ -115,7 +124,9 @@
     bits_per_sample = input_params.bits_per_sample();
     channel_layout = input_params.channel_layout();
     input_channels = input_params.input_channels();
-    buffer_size = input_params.frames_per_buffer();
+    buffer_size =
+        std::min(kMaximumOutputBufferSize,
+                 std::max(buffer_size, input_params.frames_per_buffer()));
   }
 
   int user_buffer_size = GetUserBufferSize();
diff --git a/media/audio/mac/audio_auhal_mac.cc b/media/audio/mac/audio_auhal_mac.cc
index abbb4bf..0c9fa0d 100644
--- a/media/audio/mac/audio_auhal_mac.cc
+++ b/media/audio/mac/audio_auhal_mac.cc
@@ -152,7 +152,7 @@
   }
 
   // Check if we should defer Start() for http://crbug.com/160920.
-  if (manager_->ShouldDeferOutputStreamStart()) {
+  if (manager_->ShouldDeferStreamStart()) {
     // Use a cancellable closure so that if Stop() is called before Start()
     // actually runs, we can cancel the pending start.
     DCHECK(deferred_start_cb_.IsCancelled());
@@ -217,13 +217,12 @@
   TRACE_EVENT0("audio", "AUHALStream::Render");
 
   // If the stream parameters change for any reason, we need to insert a FIFO
-  // since the OnMoreData() pipeline can't handle frame size changes.  Generally
-  // this is a temporary situation which can occur after a device change has
-  // occurred but the AudioManager hasn't received the notification yet.
+  // since the OnMoreData() pipeline can't handle frame size changes.
   if (number_of_frames != number_of_frames_) {
     // Create a FIFO on the fly to handle any discrepancies in callback rates.
     if (!audio_fifo_) {
-      VLOG(1) << "Audio frame size change detected; adding FIFO to compensate.";
+      VLOG(1) << "Audio frame size changed from " << number_of_frames_ << " to "
+              << number_of_frames << "; adding FIFO to compensate.";
       audio_fifo_.reset(new AudioPullFifo(
           output_channels_,
           number_of_frames_,
@@ -509,25 +508,41 @@
   }
 
   // Set the buffer frame size.
-  // WARNING: Setting this value changes the frame size for all audio units in
-  // the current process.  It's imperative that the input and output frame sizes
-  // be the same as the frames_per_buffer() returned by
-  // GetDefaultOutputStreamParameters().
-  // See http://crbug.com/154352 for details.
-  UInt32 buffer_size = number_of_frames_;
-  result = AudioUnitSetProperty(
-      audio_unit_,
-      kAudioDevicePropertyBufferFrameSize,
-      kAudioUnitScope_Output,
-      0,
-      &buffer_size,
-      sizeof(buffer_size));
+  // WARNING: Setting this value changes the frame size for all output audio
+  // units in the current process.  As a result, the AURenderCallback must be
+  // able to handle arbitrary buffer sizes and FIFO appropriately.
+  UInt32 buffer_size = 0;
+  UInt32 property_size = sizeof(buffer_size);
+  result = AudioUnitGetProperty(audio_unit_,
+                                kAudioDevicePropertyBufferFrameSize,
+                                kAudioUnitScope_Output,
+                                0,
+                                &buffer_size,
+                                &property_size);
   if (result != noErr) {
     OSSTATUS_DLOG(ERROR, result)
-        << "AudioUnitSetProperty(kAudioDevicePropertyBufferFrameSize) failed.";
+        << "AudioUnitGetProperty(kAudioDevicePropertyBufferFrameSize) failed.";
     return false;
   }
 
+  // Only set the buffer size if we're the only active stream or the buffer size
+  // is lower than the current buffer size.
+  if (manager_->output_stream_count() == 1 || number_of_frames_ < buffer_size) {
+    buffer_size = number_of_frames_;
+    result = AudioUnitSetProperty(audio_unit_,
+                                  kAudioDevicePropertyBufferFrameSize,
+                                  kAudioUnitScope_Output,
+                                  0,
+                                  &buffer_size,
+                                  sizeof(buffer_size));
+    if (result != noErr) {
+      OSSTATUS_DLOG(ERROR, result) << "AudioUnitSetProperty("
+                                      "kAudioDevicePropertyBufferFrameSize) "
+                                      "failed.  Size: " << number_of_frames_;
+      return false;
+    }
+  }
+
   // Setup callback.
   AURenderCallbackStruct callback;
   callback.inputProc = InputProc;
diff --git a/media/audio/mac/audio_input_mac.cc b/media/audio/mac/audio_input_mac.cc
index 8f98eed..aeeac43 100644
--- a/media/audio/mac/audio_input_mac.cc
+++ b/media/audio/mac/audio_input_mac.cc
@@ -9,13 +9,12 @@
 #include "base/basictypes.h"
 #include "base/logging.h"
 #include "base/mac/mac_logging.h"
-#include "media/audio/audio_manager_base.h"
-
+#include "media/audio/mac/audio_manager_mac.h"
 
 namespace media {
 
 PCMQueueInAudioInputStream::PCMQueueInAudioInputStream(
-    AudioManagerBase* manager, const AudioParameters& params)
+    AudioManagerMac* manager, const AudioParameters& params)
     : manager_(manager),
       callback_(NULL),
       audio_queue_(NULL),
@@ -65,6 +64,22 @@
   DLOG_IF(ERROR, !audio_queue_) << "Open() has not been called successfully";
   if (callback_ || !audio_queue_)
     return;
+
+  // Check if we should defer Start() for http://crbug.com/160920.
+  if (manager_->ShouldDeferStreamStart()) {
+    // Use a cancellable closure so that if Stop() is called before Start()
+    // actually runs, we can cancel the pending start.
+    DCHECK(deferred_start_cb_.IsCancelled());
+    deferred_start_cb_.Reset(base::Bind(
+        &PCMQueueInAudioInputStream::Start, base::Unretained(this), callback));
+    manager_->GetTaskRunner()->PostDelayedTask(
+        FROM_HERE,
+        deferred_start_cb_.callback(),
+        base::TimeDelta::FromSeconds(
+            AudioManagerMac::kStartDelayInSecsForPowerEvents));
+    return;
+  }
+
   callback_ = callback;
   OSStatus err = AudioQueueStart(audio_queue_, NULL);
   if (err != noErr) {
@@ -75,6 +90,7 @@
 }
 
 void PCMQueueInAudioInputStream::Stop() {
+  deferred_start_cb_.Cancel();
   if (!audio_queue_ || !started_)
     return;
 
diff --git a/media/audio/mac/audio_input_mac.h b/media/audio/mac/audio_input_mac.h
index 77eb65b..e8f77c7 100644
--- a/media/audio/mac/audio_input_mac.h
+++ b/media/audio/mac/audio_input_mac.h
@@ -8,6 +8,7 @@
 #include <AudioToolbox/AudioFormat.h>
 #include <AudioToolbox/AudioQueue.h>
 
+#include "base/cancelable_callback.h"
 #include "base/compiler_specific.h"
 #include "base/time/time.h"
 #include "media/audio/audio_io.h"
@@ -15,14 +16,14 @@
 
 namespace media {
 
-class AudioManagerBase;
+class AudioManagerMac;
 
 // Implementation of AudioInputStream for Mac OS X using the audio queue service
 // present in OS 10.5 and later. Design reflects PCMQueueOutAudioOutputStream.
 class PCMQueueInAudioInputStream : public AudioInputStream {
  public:
   // Parameters as per AudioManager::MakeAudioInputStream.
-  PCMQueueInAudioInputStream(AudioManagerBase* manager,
+  PCMQueueInAudioInputStream(AudioManagerMac* manager,
                              const AudioParameters& params);
   virtual ~PCMQueueInAudioInputStream();
 
@@ -66,7 +67,7 @@
   static const int kNumberBuffers = 3;
 
   // Manager that owns this stream, used for closing down.
-  AudioManagerBase* manager_;
+  AudioManagerMac* manager_;
   // We use the callback mostly to periodically supply the recorded audio data.
   AudioInputCallback* callback_;
   // Structure that holds the stream format details such as bitrate.
@@ -79,6 +80,8 @@
   bool started_;
   // Used to determine if we need to slow down |callback_| calls.
   base::TimeTicks last_fill_;
+  // Used to defer Start() to workaround http://crbug.com/160920.
+  base::CancelableClosure deferred_start_cb_;
 
   DISALLOW_COPY_AND_ASSIGN(PCMQueueInAudioInputStream);
 };
diff --git a/media/audio/mac/audio_low_latency_input_mac.cc b/media/audio/mac/audio_low_latency_input_mac.cc
index 5623bce..e7d1a1b 100644
--- a/media/audio/mac/audio_low_latency_input_mac.cc
+++ b/media/audio/mac/audio_low_latency_input_mac.cc
@@ -64,9 +64,6 @@
   // Set number of sample frames per callback used by the internal audio layer.
   // An internal FIFO is then utilized to adapt the internal size to the size
   // requested by the client.
-  // Note that we use the same native buffer size as for the output side here
-  // since the AUHAL implementation requires that both capture and render side
-  // use the same buffer size. See http://crbug.com/154352 for more details.
   number_of_frames_ = output_params.frames_per_buffer();
   DVLOG(1) << "Size of data buffer in frames : " << number_of_frames_;
 
@@ -233,23 +230,38 @@
   }
 
   // Set the desired number of frames in the IO buffer (output scope).
-  // WARNING: Setting this value changes the frame size for all audio units in
-  // the current process.  It's imperative that the input and output frame sizes
-  // be the same as the frames_per_buffer() returned by
-  // GetInputStreamParameters().
-  // TODO(henrika): Due to http://crrev.com/159666 this is currently not true
-  // and should be fixed, a CHECK() should be added at that time.
-  result = AudioUnitSetProperty(audio_unit_,
+  // WARNING: Setting this value changes the frame size for all input audio
+  // units in the current process.  As a result, the AURenderCallback must be
+  // able to handle arbitrary buffer sizes and FIFO appropriately.
+  UInt32 buffer_size = 0;
+  UInt32 property_size = sizeof(buffer_size);
+  result = AudioUnitGetProperty(audio_unit_,
                                 kAudioDevicePropertyBufferFrameSize,
                                 kAudioUnitScope_Output,
                                 1,
-                                &number_of_frames_,  // size is set in the ctor
-                                sizeof(number_of_frames_));
-  if (result) {
+                                &buffer_size,
+                                &property_size);
+  if (result != noErr) {
     HandleError(result);
     return false;
   }
 
+  // Only set the buffer size if we're the only active stream or the buffer size
+  // is lower than the current buffer size.
+  if (manager_->input_stream_count() == 1 || number_of_frames_ < buffer_size) {
+    buffer_size = number_of_frames_;
+    result = AudioUnitSetProperty(audio_unit_,
+                                  kAudioDevicePropertyBufferFrameSize,
+                                  kAudioUnitScope_Output,
+                                  1,
+                                  &buffer_size,
+                                  sizeof(buffer_size));
+    if (result != noErr) {
+      HandleError(result);
+      return false;
+    }
+  }
+
   // Finally, initialize the audio unit and ensure that it is ready to render.
   // Allocates memory according to the maximum number of audio frames
   // it can produce in response to a single render call.
@@ -274,6 +286,22 @@
   DLOG_IF(ERROR, !audio_unit_) << "Open() has not been called successfully";
   if (started_ || !audio_unit_)
     return;
+
+  // Check if we should defer Start() for http://crbug.com/160920.
+  if (manager_->ShouldDeferStreamStart()) {
+    // Use a cancellable closure so that if Stop() is called before Start()
+    // actually runs, we can cancel the pending start.
+    DCHECK(deferred_start_cb_.IsCancelled());
+    deferred_start_cb_.Reset(base::Bind(
+        &AUAudioInputStream::Start, base::Unretained(this), callback));
+    manager_->GetTaskRunner()->PostDelayedTask(
+        FROM_HERE,
+        deferred_start_cb_.callback(),
+        base::TimeDelta::FromSeconds(
+            AudioManagerMac::kStartDelayInSecsForPowerEvents));
+    return;
+  }
+
   sink_ = callback;
   StartAgc();
   OSStatus result = AudioOutputUnitStart(audio_unit_);
diff --git a/media/audio/mac/audio_low_latency_input_mac.h b/media/audio/mac/audio_low_latency_input_mac.h
index 04592d2..ae0c405 100644
--- a/media/audio/mac/audio_low_latency_input_mac.h
+++ b/media/audio/mac/audio_low_latency_input_mac.h
@@ -39,7 +39,7 @@
 #include <AudioUnit/AudioUnit.h>
 #include <CoreAudio/CoreAudio.h>
 
-#include "base/atomicops.h"
+#include "base/cancelable_callback.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/synchronization/lock.h"
 #include "media/audio/agc_audio_stream.h"
@@ -162,6 +162,9 @@
   // OnData() callbacks where each callback contains this amount of bytes.
   int requested_size_bytes_;
 
+  // Used to defer Start() to workaround http://crbug.com/160920.
+  base::CancelableClosure deferred_start_cb_;
+
   DISALLOW_COPY_AND_ASSIGN(AUAudioInputStream);
 };
 
diff --git a/media/audio/mac/audio_low_latency_input_mac_unittest.cc b/media/audio/mac/audio_low_latency_input_mac_unittest.cc
index e80cbcd..fdd7c05 100644
--- a/media/audio/mac/audio_low_latency_input_mac_unittest.cc
+++ b/media/audio/mac/audio_low_latency_input_mac_unittest.cc
@@ -5,6 +5,7 @@
 #include "base/basictypes.h"
 #include "base/environment.h"
 #include "base/message_loop/message_loop.h"
+#include "base/run_loop.h"
 #include "base/test/test_timeouts.h"
 #include "base/threading/platform_thread.h"
 #include "media/audio/audio_io.h"
@@ -22,9 +23,9 @@
 
 namespace media {
 
-ACTION_P3(CheckCountAndPostQuitTask, count, limit, loop) {
+ACTION_P4(CheckCountAndPostQuitTask, count, limit, loop, closure) {
   if (++*count >= limit) {
-    loop->PostTask(FROM_HERE, base::MessageLoop::QuitClosure());
+    loop->PostTask(FROM_HERE, closure);
   }
 }
 
@@ -93,8 +94,16 @@
 
 class MacAudioInputTest : public testing::Test {
  protected:
-  MacAudioInputTest() : audio_manager_(AudioManager::CreateForTesting()) {}
-  virtual ~MacAudioInputTest() {}
+  MacAudioInputTest()
+      : message_loop_(base::MessageLoop::TYPE_UI),
+        audio_manager_(AudioManager::CreateForTesting()) {
+    // Wait for the AudioManager to finish any initialization on the audio loop.
+    base::RunLoop().RunUntilIdle();
+  }
+
+  virtual ~MacAudioInputTest() {
+    base::RunLoop().RunUntilIdle();
+  }
 
   // Convenience method which ensures that we are not running on the build
   // bots and that at least one valid input device can be found.
@@ -132,6 +141,7 @@
     return ais;
   }
 
+  base::MessageLoop message_loop_;
   scoped_ptr<AudioManager> audio_manager_;
 };
 
@@ -209,7 +219,6 @@
     return;
 
   int count = 0;
-  base::MessageLoopForUI loop;
 
   // Create an audio input stream which records in mono.
   AudioInputStream* ais = CreateAudioInputStream(CHANNEL_LAYOUT_MONO);
@@ -225,11 +234,13 @@
   // We use 10ms packets and will run the test until ten packets are received.
   // All should contain valid packets of the same size and a valid delay
   // estimate.
+  base::RunLoop run_loop;
   EXPECT_CALL(sink, OnData(ais, NotNull(), bytes_per_packet, _, _))
       .Times(AtLeast(10))
-      .WillRepeatedly(CheckCountAndPostQuitTask(&count, 10, &loop));
+      .WillRepeatedly(CheckCountAndPostQuitTask(
+          &count, 10, &message_loop_, run_loop.QuitClosure()));
   ais->Start(&sink);
-  loop.Run();
+  run_loop.Run();
   ais->Stop();
   ais->Close();
 }
@@ -240,7 +251,6 @@
     return;
 
   int count = 0;
-  base::MessageLoopForUI loop;
 
   // Create an audio input stream which records in stereo.
   AudioInputStream* ais = CreateAudioInputStream(CHANNEL_LAYOUT_STEREO);
@@ -263,11 +273,13 @@
   // parameter #4 does no longer pass. I am removing this restriction here to
   // ensure that we can land the patch but will revisit this test again when
   // more analysis of the delay estimates are done.
+  base::RunLoop run_loop;
   EXPECT_CALL(sink, OnData(ais, NotNull(), bytes_per_packet, _, _))
       .Times(AtLeast(10))
-      .WillRepeatedly(CheckCountAndPostQuitTask(&count, 10, &loop));
+      .WillRepeatedly(CheckCountAndPostQuitTask(
+          &count, 10, &message_loop_, run_loop.QuitClosure()));
   ais->Start(&sink);
-  loop.Run();
+  run_loop.Run();
   ais->Stop();
   ais->Close();
 }
diff --git a/media/audio/mac/audio_manager_mac.cc b/media/audio/mac/audio_manager_mac.cc
index 60c8a3e..fec5fad 100644
--- a/media/audio/mac/audio_manager_mac.cc
+++ b/media/audio/mac/audio_manager_mac.cc
@@ -29,8 +29,9 @@
 // Maximum number of output streams that can be open simultaneously.
 static const int kMaxOutputStreams = 50;
 
-// Default buffer size in samples for low-latency input and output streams.
-static const int kDefaultLowLatencyBufferSize = 128;
+// Define bounds for for low-latency input and output streams.
+static const int kMinimumInputOutputBufferSize = 128;
+static const int kMaximumInputOutputBufferSize = 4096;
 
 // Default sample-rate on most Apple hardware.
 static const int kFallbackSampleRate = 44100;
@@ -242,7 +243,7 @@
     base::PowerMonitor::Get()->RemoveObserver(this);
   }
 
-  bool ShouldDeferOutputStreamStart() {
+  bool ShouldDeferStreamStart() {
     DCHECK(thread_checker_.CalledOnValidThread());
     // Start() should be deferred if the system is in the middle of a suspend or
     // has recently started the process of resuming.
@@ -672,7 +673,16 @@
 
   const bool has_valid_input_params = input_params.IsValid();
   const int hardware_sample_rate = HardwareSampleRateForDevice(device);
-  const int buffer_size = ChooseBufferSize(hardware_sample_rate);
+
+  // Allow pass through buffer sizes.  If concurrent input and output streams
+  // exist, they will use the smallest buffer size amongst them.  As such, each
+  // stream must be able to FIFO requests appropriately when this happens.
+  int buffer_size = ChooseBufferSize(hardware_sample_rate);
+  if (has_valid_input_params) {
+    buffer_size =
+        std::min(kMaximumInputOutputBufferSize,
+                 std::max(input_params.frames_per_buffer(), buffer_size));
+  }
 
   int hardware_channels;
   if (!GetDeviceChannels(device, kAudioDevicePropertyScopeOutput,
@@ -747,7 +757,7 @@
 }
 
 int AudioManagerMac::ChooseBufferSize(int output_sample_rate) {
-  int buffer_size = kDefaultLowLatencyBufferSize;
+  int buffer_size = kMinimumInputOutputBufferSize;
   const int user_buffer_size = GetUserBufferSize();
   if (user_buffer_size) {
     buffer_size = user_buffer_size;
@@ -755,17 +765,17 @@
     // The default buffer size is too small for higher sample rates and may lead
     // to glitching.  Adjust upwards by multiples of the default size.
     if (output_sample_rate <= 96000)
-      buffer_size = 2 * kDefaultLowLatencyBufferSize;
+      buffer_size = 2 * kMinimumInputOutputBufferSize;
     else if (output_sample_rate <= 192000)
-      buffer_size = 4 * kDefaultLowLatencyBufferSize;
+      buffer_size = 4 * kMinimumInputOutputBufferSize;
   }
 
   return buffer_size;
 }
 
-bool AudioManagerMac::ShouldDeferOutputStreamStart() {
+bool AudioManagerMac::ShouldDeferStreamStart() {
   DCHECK(GetTaskRunner()->BelongsToCurrentThread());
-  return power_observer_->ShouldDeferOutputStreamStart();
+  return power_observer_->ShouldDeferStreamStart();
 }
 
 void AudioManagerMac::ReleaseOutputStream(AudioOutputStream* stream) {
diff --git a/media/audio/mac/audio_manager_mac.h b/media/audio/mac/audio_manager_mac.h
index 7cc1a63..490b0b6 100644
--- a/media/audio/mac/audio_manager_mac.h
+++ b/media/audio/mac/audio_manager_mac.h
@@ -69,11 +69,11 @@
   // As a workaround we delay Start() when it occurs after suspend and for a
   // small amount of time after resume.
   //
-  // Output streams should consult ShouldDeferOutputStreamStart() and if true
-  // check the value again after |kStartDelayInSecsForPowerEvents| has elapsed.
-  // If false, the stream may be started immediately.
+  // Streams should consult ShouldDeferStreamStart() and if true check the value
+  // again after |kStartDelayInSecsForPowerEvents| has elapsed. If false, the
+  // stream may be started immediately.
   enum { kStartDelayInSecsForPowerEvents = 1 };
-  bool ShouldDeferOutputStreamStart();
+  bool ShouldDeferStreamStart();
 
  protected:
   virtual ~AudioManagerMac();
diff --git a/media/audio/pulse/audio_manager_pulse.cc b/media/audio/pulse/audio_manager_pulse.cc
index 3369fd5..238530a 100644
--- a/media/audio/pulse/audio_manager_pulse.cc
+++ b/media/audio/pulse/audio_manager_pulse.cc
@@ -35,6 +35,10 @@
 // Maximum number of output streams that can be open simultaneously.
 static const int kMaxOutputStreams = 50;
 
+// Define bounds for the output buffer size.
+static const int kMinimumOutputBufferSize = 512;
+static const int kMaximumOutputBufferSize = 8192;
+
 static const base::FilePath::CharType kPulseLib[] =
     FILE_PATH_LITERAL("libpulse.so.0");
 
@@ -161,10 +165,9 @@
     const AudioParameters& input_params) {
   // TODO(tommi): Support |output_device_id|.
   VLOG_IF(0, !output_device_id.empty()) << "Not implemented!";
-  static const int kDefaultOutputBufferSize = 512;
 
   ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO;
-  int buffer_size = kDefaultOutputBufferSize;
+  int buffer_size = kMinimumOutputBufferSize;
   int bits_per_sample = 16;
   int input_channels = 0;
   int sample_rate;
@@ -172,7 +175,9 @@
     bits_per_sample = input_params.bits_per_sample();
     channel_layout = input_params.channel_layout();
     input_channels = input_params.input_channels();
-    buffer_size = std::min(buffer_size, input_params.frames_per_buffer());
+    buffer_size =
+        std::min(kMaximumOutputBufferSize,
+                 std::max(buffer_size, input_params.frames_per_buffer()));
     sample_rate = input_params.sample_rate();
   } else {
     sample_rate = GetNativeSampleRate();
diff --git a/media/base/android/audio_decoder_job.cc b/media/base/android/audio_decoder_job.cc
index d089796..580c63f 100644
--- a/media/base/android/audio_decoder_job.cc
+++ b/media/base/android/audio_decoder_job.cc
@@ -8,6 +8,14 @@
 #include "base/lazy_instance.h"
 #include "base/threading/thread.h"
 #include "media/base/android/media_codec_bridge.h"
+#include "media/base/audio_timestamp_helper.h"
+
+namespace {
+
+// Use 16bit PCM for audio output. Keep this value in sync with the output
+// format we passed to AudioTrack in MediaCodecBridge.
+const int kBytesPerAudioOutputSample = 2;
+}
 
 namespace media {
 
@@ -35,19 +43,26 @@
   scoped_ptr<AudioCodecBridge> codec(AudioCodecBridge::Create(audio_codec));
   if (codec && codec->Start(audio_codec, sample_rate, channel_count, extra_data,
                             extra_data_size, true, media_crypto)) {
-    return new AudioDecoderJob(codec.Pass(), request_data_cb);
+    scoped_ptr<AudioTimestampHelper> audio_timestamp_helper(
+        new AudioTimestampHelper(sample_rate));
+    return new AudioDecoderJob(
+        audio_timestamp_helper.Pass(), codec.Pass(),
+        kBytesPerAudioOutputSample * channel_count, request_data_cb);
   }
-
   LOG(ERROR) << "Failed to create AudioDecoderJob.";
   return NULL;
 }
 
 AudioDecoderJob::AudioDecoderJob(
+    scoped_ptr<AudioTimestampHelper> audio_timestamp_helper,
     scoped_ptr<AudioCodecBridge> audio_codec_bridge,
+    int bytes_per_frame,
     const base::Closure& request_data_cb)
     : MediaDecoderJob(g_audio_decoder_thread.Pointer()->message_loop_proxy(),
                       audio_codec_bridge.get(), request_data_cb),
-      audio_codec_bridge_(audio_codec_bridge.Pass()) {
+      bytes_per_frame_(bytes_per_frame),
+      audio_codec_bridge_(audio_codec_bridge.Pass()),
+      audio_timestamp_helper_(audio_timestamp_helper.Pass()) {
 }
 
 AudioDecoderJob::~AudioDecoderJob() {
@@ -57,17 +72,33 @@
   audio_codec_bridge_->SetVolume(volume);
 }
 
+void AudioDecoderJob::SetBaseTimestamp(base::TimeDelta base_timestamp) {
+  audio_timestamp_helper_->SetBaseTimestamp(base_timestamp);
+}
+
 void AudioDecoderJob::ReleaseOutputBuffer(
     int output_buffer_index,
     size_t size,
     bool render_output,
+    base::TimeDelta current_presentation_timestamp,
     const ReleaseOutputCompletionCallback& callback) {
-  size_t size_to_render = render_output ? size : 0u;
-  if (size_to_render)
-    audio_codec_bridge_->PlayOutputBuffer(output_buffer_index, size_to_render);
+  render_output = render_output && (size != 0u);
+  if (render_output) {
+    int64 head_position = audio_codec_bridge_->PlayOutputBuffer(
+        output_buffer_index, size);
+    audio_timestamp_helper_->AddFrames(size / (bytes_per_frame_));
+    int64 frames_to_play =
+        audio_timestamp_helper_->frame_count() - head_position;
+    DCHECK_GE(frames_to_play, 0);
+    current_presentation_timestamp =
+        audio_timestamp_helper_->GetTimestamp() -
+        audio_timestamp_helper_->GetFrameDuration(frames_to_play);
+  } else {
+    current_presentation_timestamp = kNoTimestamp();
+  }
   audio_codec_bridge_->ReleaseOutputBuffer(output_buffer_index, false);
-
-  callback.Run(size_to_render);
+  callback.Run(current_presentation_timestamp,
+               audio_timestamp_helper_->GetTimestamp());
 }
 
 bool AudioDecoderJob::ComputeTimeToRender() const {
diff --git a/media/base/android/audio_decoder_job.h b/media/base/android/audio_decoder_job.h
index 3d1b21f..4a37038 100644
--- a/media/base/android/audio_decoder_job.h
+++ b/media/base/android/audio_decoder_job.h
@@ -12,6 +12,7 @@
 namespace media {
 
 class AudioCodecBridge;
+class AudioTimestampHelper;
 
 // Class for managing audio decoding jobs.
 class AudioDecoderJob : public MediaDecoderJob {
@@ -34,8 +35,13 @@
 
   void SetVolume(double volume);
 
+  // Sets the base timestamp for |audio_timestamp_helper_|.
+  void SetBaseTimestamp(base::TimeDelta base_timestamp);
+
  private:
-  AudioDecoderJob(scoped_ptr<AudioCodecBridge> audio_decoder_bridge,
+  AudioDecoderJob(scoped_ptr<AudioTimestampHelper> audio_timestamp_helper,
+                  scoped_ptr<AudioCodecBridge> audio_decoder_bridge,
+                  int bytes_per_frame,
                   const base::Closure& request_data_cb);
 
   // MediaDecoderJob implementation.
@@ -43,11 +49,18 @@
       int output_buffer_index,
       size_t size,
       bool render_output,
+      base::TimeDelta current_presentation_timestamp,
       const ReleaseOutputCompletionCallback& callback) OVERRIDE;
 
   virtual bool ComputeTimeToRender() const OVERRIDE;
 
+  // number of bytes per audio frame;
+  int bytes_per_frame_;
+
   scoped_ptr<AudioCodecBridge> audio_codec_bridge_;
+
+  // Object to calculate the current audio timestamp for A/V sync.
+  scoped_ptr<AudioTimestampHelper> audio_timestamp_helper_;
 };
 
 }  // namespace media
diff --git a/media/base/android/demuxer_stream_player_params.cc b/media/base/android/demuxer_stream_player_params.cc
index d5021a9..e95881e 100644
--- a/media/base/android/demuxer_stream_player_params.cc
+++ b/media/base/android/demuxer_stream_player_params.cc
@@ -12,8 +12,7 @@
       audio_sampling_rate(0),
       is_audio_encrypted(false),
       video_codec(kUnknownVideoCodec),
-      is_video_encrypted(false),
-      duration_ms(0) {}
+      is_video_encrypted(false) {}
 
 DemuxerConfigs::~DemuxerConfigs() {}
 
diff --git a/media/base/android/demuxer_stream_player_params.h b/media/base/android/demuxer_stream_player_params.h
index 3407420..e77d5d2 100644
--- a/media/base/android/demuxer_stream_player_params.h
+++ b/media/base/android/demuxer_stream_player_params.h
@@ -31,7 +31,7 @@
   bool is_video_encrypted;
   std::vector<uint8> video_extra_data;
 
-  int duration_ms;
+  base::TimeDelta duration;
 };
 
 struct MEDIA_EXPORT AccessUnit {
diff --git a/media/base/android/java/src/org/chromium/media/MediaCodecBridge.java b/media/base/android/java/src/org/chromium/media/MediaCodecBridge.java
index cfcebb0..5eb7b5b 100644
--- a/media/base/android/java/src/org/chromium/media/MediaCodecBridge.java
+++ b/media/base/android/java/src/org/chromium/media/MediaCodecBridge.java
@@ -285,6 +285,8 @@
         try {
             mFlushed = true;
             if (mAudioTrack != null) {
+                // Need to call pause() here, or otherwise flush() is a no-op.
+                mAudioTrack.pause();
                 mAudioTrack.flush();
             }
             mMediaCodec.flush();
@@ -525,18 +527,36 @@
         return false;
     }
 
+    /**
+     *  Play the audio buffer that is passed in.
+     *
+     *  @param buf Audio buffer to be rendered.
+     *  @return The number of frames that have already been consumed by the
+     *  hardware. This number resets to 0 after each flush call.
+     */
     @CalledByNative
-    private void playOutputBuffer(byte[] buf) {
-        if (mAudioTrack != null) {
-            if (AudioTrack.PLAYSTATE_PLAYING != mAudioTrack.getPlayState()) {
-                mAudioTrack.play();
-            }
-            int size = mAudioTrack.write(buf, 0, buf.length);
-            if (buf.length != size) {
-                Log.i(TAG, "Failed to send all data to audio output, expected size: " +
-                        buf.length + ", actual size: " + size);
-            }
+    private long playOutputBuffer(byte[] buf) {
+        if (mAudioTrack == null) {
+            return 0;
         }
+
+        if (AudioTrack.PLAYSTATE_PLAYING != mAudioTrack.getPlayState()) {
+            mAudioTrack.play();
+        }
+        int size = mAudioTrack.write(buf, 0, buf.length);
+        if (buf.length != size) {
+            Log.i(TAG, "Failed to send all data to audio output, expected size: " +
+                    buf.length + ", actual size: " + size);
+        }
+        // TODO(qinmin): Returning the head position allows us to estimate
+        // the current presentation time in native code. However, it is
+        // better to use AudioTrack.getCurrentTimestamp() to get the last
+        // known time when a frame is played. However, we will need to
+        // convert the java nano time to C++ timestamp.
+        // If the stream runs too long, getPlaybackHeadPosition() could
+        // overflow. AudioTimestampHelper in MediaSourcePlayer has the same
+        // issue. See http://crbug.com/358801.
+        return mAudioTrack.getPlaybackHeadPosition();
     }
 
     @CalledByNative
diff --git a/media/base/android/media_codec_bridge.cc b/media/base/android/media_codec_bridge.cc
index 0178844..3b50949 100644
--- a/media/base/android/media_codec_bridge.cc
+++ b/media/base/android/media_codec_bridge.cc
@@ -593,7 +593,7 @@
   return true;
 }
 
-void AudioCodecBridge::PlayOutputBuffer(int index, size_t size) {
+int64 AudioCodecBridge::PlayOutputBuffer(int index, size_t size) {
   DCHECK_LE(0, index);
   int numBytes = base::checked_cast<int>(size);
   JNIEnv* env = AttachCurrentThread();
@@ -603,7 +603,8 @@
 
   ScopedJavaLocalRef<jbyteArray> byte_array =
       base::android::ToJavaByteArray(env, buffer, numBytes);
-  Java_MediaCodecBridge_playOutputBuffer(env, media_codec(), byte_array.obj());
+  return Java_MediaCodecBridge_playOutputBuffer(
+      env, media_codec(), byte_array.obj());
 }
 
 void AudioCodecBridge::SetVolume(double volume) {
diff --git a/media/base/android/media_codec_bridge.h b/media/base/android/media_codec_bridge.h
index f90edcf..a1a493f 100644
--- a/media/base/android/media_codec_bridge.h
+++ b/media/base/android/media_codec_bridge.h
@@ -222,8 +222,9 @@
              bool play_audio, jobject media_crypto) WARN_UNUSED_RESULT;
 
   // Play the output buffer. This call must be called after
-  // DequeueOutputBuffer() and before ReleaseOutputBuffer.
-  void PlayOutputBuffer(int index, size_t size);
+  // DequeueOutputBuffer() and before ReleaseOutputBuffer. Returns the playback
+  // head position expressed in frames.
+  int64 PlayOutputBuffer(int index, size_t size);
 
   // Set the volume of the audio output.
   void SetVolume(double volume);
diff --git a/media/base/android/media_decoder_job.cc b/media/base/android/media_decoder_job.cc
index 8b8c9b2..c57da3a 100644
--- a/media/base/android/media_decoder_job.cc
+++ b/media/base/android/media_decoder_job.cc
@@ -80,7 +80,7 @@
 
   if (stop_decode_pending_) {
     DCHECK(is_decoding());
-    OnDecodeCompleted(MEDIA_CODEC_STOPPED, kNoTimestamp(), 0);
+    OnDecodeCompleted(MEDIA_CODEC_STOPPED, kNoTimestamp(), kNoTimestamp());
     return;
   }
 
@@ -275,8 +275,7 @@
                               base::Bind(&MediaDecoderJob::OnDecodeCompleted,
                                          base::Unretained(this),
                                          MEDIA_CODEC_DEQUEUE_INPUT_AGAIN_LATER,
-                                         kNoTimestamp(),
-                                         0));
+                                         kNoTimestamp(), kNoTimestamp()));
     return;
   }
 
@@ -305,7 +304,7 @@
     output_eos_encountered_ = false;
     MediaCodecStatus reset_status = media_codec_bridge_->Reset();
     if (MEDIA_CODEC_OK != reset_status) {
-      callback.Run(reset_status, kNoTimestamp(), 0);
+      callback.Run(reset_status, kNoTimestamp(), kNoTimestamp());
       return;
     }
   }
@@ -318,7 +317,7 @@
   // For aborted access unit, just skip it and inform the player.
   if (unit.status == DemuxerStream::kAborted) {
     // TODO(qinmin): use a new enum instead of MEDIA_CODEC_STOPPED.
-    callback.Run(MEDIA_CODEC_STOPPED, kNoTimestamp(), 0);
+    callback.Run(MEDIA_CODEC_STOPPED, kNoTimestamp(), kNoTimestamp());
     return;
   }
 
@@ -326,7 +325,8 @@
     if (unit.end_of_stream || unit.data.empty()) {
       input_eos_encountered_ = true;
       output_eos_encountered_ = true;
-      callback.Run(MEDIA_CODEC_OUTPUT_END_OF_STREAM, kNoTimestamp(), 0);
+      callback.Run(MEDIA_CODEC_OUTPUT_END_OF_STREAM, kNoTimestamp(),
+                   kNoTimestamp());
       return;
     }
 
@@ -339,7 +339,7 @@
     if (input_status == MEDIA_CODEC_INPUT_END_OF_STREAM) {
       input_eos_encountered_ = true;
     } else if (input_status != MEDIA_CODEC_OK) {
-      callback.Run(input_status, kNoTimestamp(), 0);
+      callback.Run(input_status, kNoTimestamp(), kNoTimestamp());
       return;
     }
   }
@@ -366,7 +366,7 @@
         !media_codec_bridge_->GetOutputBuffers()) {
       status = MEDIA_CODEC_ERROR;
     }
-    callback.Run(status, kNoTimestamp(), 0);
+    callback.Run(status, kNoTimestamp(), kNoTimestamp());
     return;
   }
 
@@ -393,7 +393,8 @@
                    buffer_index,
                    size,
                    render_output,
-                   base::Bind(callback, status, presentation_timestamp)),
+                   presentation_timestamp,
+                   base::Bind(callback, status)),
         time_to_render);
     return;
   }
@@ -412,13 +413,14 @@
     presentation_timestamp = kNoTimestamp();
   }
   ReleaseOutputCompletionCallback completion_callback = base::Bind(
-      callback, status, presentation_timestamp);
-  ReleaseOutputBuffer(buffer_index, size, render_output, completion_callback);
+      callback, status);
+  ReleaseOutputBuffer(buffer_index, size, render_output, presentation_timestamp,
+                      completion_callback);
 }
 
 void MediaDecoderJob::OnDecodeCompleted(
-    MediaCodecStatus status, base::TimeDelta presentation_timestamp,
-    size_t audio_output_bytes) {
+    MediaCodecStatus status, base::TimeDelta current_presentation_timestamp,
+    base::TimeDelta max_presentation_timestamp) {
   DCHECK(ui_task_runner_->BelongsToCurrentThread());
 
   if (destroy_pending_) {
@@ -430,7 +432,7 @@
   DCHECK(!decode_cb_.is_null());
 
   // If output was queued for rendering, then we have completed prerolling.
-  if (presentation_timestamp != kNoTimestamp())
+  if (current_presentation_timestamp != kNoTimestamp())
     prerolling_ = false;
 
   switch (status) {
@@ -453,8 +455,8 @@
   };
 
   stop_decode_pending_ = false;
-  base::ResetAndReturn(&decode_cb_).Run(status, presentation_timestamp,
-                                        audio_output_bytes);
+  base::ResetAndReturn(&decode_cb_).Run(
+      status, current_presentation_timestamp, max_presentation_timestamp);
 }
 
 const AccessUnit& MediaDecoderJob::CurrentAccessUnit() const {
diff --git a/media/base/android/media_decoder_job.h b/media/base/android/media_decoder_job.h
index 77caa9f..9dbbd00 100644
--- a/media/base/android/media_decoder_job.h
+++ b/media/base/android/media_decoder_job.h
@@ -29,15 +29,18 @@
   };
 
   // Callback when a decoder job finishes its work. Args: whether decode
-  // finished successfully, presentation time, audio output bytes.
-  // If the presentation time is equal to kNoTimestamp(), the decoder job
-  // skipped rendering of the decoded output and the callback target should
-  // update its clock to avoid introducing extra delays to the next frame.
+  // finished successfully, current presentation time, max presentation time.
+  // If the current presentation time is equal to kNoTimestamp(), the decoder
+  // job skipped rendering of the decoded output and the callback target should
+  // ignore the timestamps provided.
   typedef base::Callback<void(MediaCodecStatus, base::TimeDelta,
-                              size_t)> DecoderCallback;
+                              base::TimeDelta)> DecoderCallback;
   // Callback when a decoder job finishes releasing the output buffer.
-  // Args: audio output bytes, must be 0 for video.
-  typedef base::Callback<void(size_t)> ReleaseOutputCompletionCallback;
+  // Args: current presentation time, max presentation time.
+  // If the current presentation time is equal to kNoTimestamp(), the callback
+  // target should ignore the timestamps provided.
+  typedef base::Callback<void(base::TimeDelta, base::TimeDelta)>
+      ReleaseOutputCompletionCallback;
 
   virtual ~MediaDecoderJob();
 
@@ -95,6 +98,7 @@
       int output_buffer_index,
       size_t size,
       bool render_output,
+      base::TimeDelta current_presentation_timestamp,
       const ReleaseOutputCompletionCallback& callback) = 0;
 
   // Returns true if the "time to render" needs to be computed for frames in
@@ -137,8 +141,8 @@
   // Completes any pending job destruction or any pending decode stop. If
   // destruction was not pending, passes its arguments to |decode_cb_|.
   void OnDecodeCompleted(MediaCodecStatus status,
-                         base::TimeDelta presentation_timestamp,
-                         size_t audio_output_bytes);
+                         base::TimeDelta current_presentation_timestamp,
+                         base::TimeDelta max_presentation_timestamp);
 
   // Helper function to get the current access unit that is being decoded.
   const AccessUnit& CurrentAccessUnit() const;
diff --git a/media/base/android/media_player_manager.h b/media/base/android/media_player_manager.h
index f4fe548..50132c3 100644
--- a/media/base/android/media_player_manager.h
+++ b/media/base/android/media_player_manager.h
@@ -75,7 +75,7 @@
   virtual media::MediaDrmBridge* GetDrmBridge(int cdm_id) = 0;
 
   // Called by the player to get a hardware protected surface.
-  virtual void OnProtectedSurfaceRequested(int player_id) = 0;
+  virtual void RequestFullScreen(int player_id) = 0;
 
   // The following five methods are related to EME.
   // TODO(xhwang): These methods needs to be decoupled from MediaPlayerManager
diff --git a/media/base/android/media_source_player.cc b/media/base/android/media_source_player.cc
index e52d0e4..c4998e8 100644
--- a/media/base/android/media_source_player.cc
+++ b/media/base/android/media_source_player.cc
@@ -19,16 +19,8 @@
 #include "media/base/android/media_drm_bridge.h"
 #include "media/base/android/media_player_manager.h"
 #include "media/base/android/video_decoder_job.h"
-#include "media/base/audio_timestamp_helper.h"
 #include "media/base/buffers.h"
 
-namespace {
-
-// Use 16bit PCM for audio output. Keep this value in sync with the output
-// format we passed to AudioTrack in MediaCodecBridge.
-const int kBytesPerAudioOutputSample = 2;
-}
-
 namespace media {
 
 MediaSourcePlayer::MediaSourcePlayer(
@@ -117,8 +109,6 @@
   pending_seek_ = false;
 
   clock_.SetTime(seek_time, seek_time);
-  if (audio_timestamp_helper_)
-    audio_timestamp_helper_->SetBaseTimestamp(seek_time);
 
   if (audio_decoder_job_ && audio_decoder_job_->is_decoding())
     audio_decoder_job_->StopDecode();
@@ -152,7 +142,7 @@
   playing_ = true;
 
   if (IsProtectedSurfaceRequired())
-    manager()->OnProtectedSurfaceRequested(player_id());
+    manager()->RequestFullScreen(player_id());
 
   StartInternal();
 }
@@ -307,7 +297,7 @@
 void MediaSourcePlayer::OnDemuxerConfigsAvailable(
     const DemuxerConfigs& configs) {
   DVLOG(1) << __FUNCTION__;
-  duration_ = base::TimeDelta::FromMilliseconds(configs.duration_ms);
+  duration_ = configs.duration;
   clock_.SetDuration(duration_);
 
   audio_codec_ = configs.audio_codec;
@@ -315,14 +305,6 @@
   sampling_rate_ = configs.audio_sampling_rate;
   is_audio_encrypted_ = configs.is_audio_encrypted;
   audio_extra_data_ = configs.audio_extra_data;
-  if (HasAudio()) {
-    DCHECK_GT(num_channels_, 0);
-    audio_timestamp_helper_.reset(new AudioTimestampHelper(sampling_rate_));
-    audio_timestamp_helper_->SetBaseTimestamp(GetCurrentTime());
-  } else {
-    audio_timestamp_helper_.reset();
-  }
-
   video_codec_ = configs.video_codec;
   width_ = configs.video_size.width();
   height_ = configs.video_size.height();
@@ -444,8 +426,8 @@
     DVLOG(1) << __FUNCTION__ << " : setting clock to actual browser seek time: "
              << seek_time.InSecondsF();
     clock_.SetTime(seek_time, seek_time);
-    if (audio_timestamp_helper_)
-      audio_timestamp_helper_->SetBaseTimestamp(seek_time);
+    if (audio_decoder_job_)
+      audio_decoder_job_->SetBaseTimestamp(seek_time);
   } else {
     DCHECK(actual_browser_seek_time == kNoTimestamp());
   }
@@ -471,16 +453,10 @@
 }
 
 void MediaSourcePlayer::UpdateTimestamps(
-    base::TimeDelta presentation_timestamp, size_t audio_output_bytes) {
-  base::TimeDelta new_max_time = presentation_timestamp;
+    base::TimeDelta current_presentation_timestamp,
+    base::TimeDelta max_presentation_timestamp) {
+  clock_.SetTime(current_presentation_timestamp, max_presentation_timestamp);
 
-  if (audio_output_bytes > 0) {
-    audio_timestamp_helper_->AddFrames(
-        audio_output_bytes / (kBytesPerAudioOutputSample * num_channels_));
-    new_max_time = audio_timestamp_helper_->GetTimestamp();
-  }
-
-  clock_.SetMaxTime(new_max_time);
   manager()->OnTimeUpdate(player_id(), GetCurrentTime());
 }
 
@@ -510,6 +486,8 @@
   if (IsEventPending(SEEK_EVENT_PENDING)) {
     DVLOG(1) << __FUNCTION__ << " : Handling SEEK_EVENT";
     ClearDecodingData();
+    if (audio_decoder_job_)
+      audio_decoder_job_->SetBaseTimestamp(GetCurrentTime());
     demuxer_->RequestDemuxerSeek(GetCurrentTime(), doing_browser_seek_);
     return;
   }
@@ -581,7 +559,8 @@
 
 void MediaSourcePlayer::MediaDecoderCallback(
     bool is_audio, MediaCodecStatus status,
-    base::TimeDelta presentation_timestamp, size_t audio_output_bytes) {
+    base::TimeDelta current_presentation_timestamp,
+    base::TimeDelta max_presentation_timestamp) {
   DVLOG(1) << __FUNCTION__ << ": " << is_audio << ", " << status;
 
   // TODO(xhwang): Drop IntToString() when http://crbug.com/303899 is fixed.
@@ -625,6 +604,12 @@
     return;
   }
 
+  if (status == MEDIA_CODEC_OK && is_clock_manager &&
+      current_presentation_timestamp != kNoTimestamp()) {
+    UpdateTimestamps(
+        current_presentation_timestamp, max_presentation_timestamp);
+  }
+
   if (status == MEDIA_CODEC_OUTPUT_END_OF_STREAM)
     PlaybackCompleted(is_audio);
 
@@ -636,11 +621,6 @@
   if (status == MEDIA_CODEC_OUTPUT_END_OF_STREAM)
     return;
 
-  if (status == MEDIA_CODEC_OK && is_clock_manager &&
-      presentation_timestamp != kNoTimestamp()) {
-    UpdateTimestamps(presentation_timestamp, audio_output_bytes);
-  }
-
   if (!playing_) {
     if (is_clock_manager)
       clock_.Pause();
@@ -662,8 +642,9 @@
     // If we have a valid timestamp, start the starvation callback. Otherwise,
     // reset the |start_time_ticks_| so that the next frame will not suffer
     // from the decoding delay caused by the current frame.
-    if (presentation_timestamp != kNoTimestamp())
-      StartStarvationCallback(presentation_timestamp);
+    if (current_presentation_timestamp != kNoTimestamp())
+      StartStarvationCallback(current_presentation_timestamp,
+                              max_presentation_timestamp);
     else
       start_time_ticks_ = base::TimeTicks::Now();
   }
@@ -811,6 +792,13 @@
 
   if (audio_decoder_job_) {
     SetVolumeInternal();
+    // Need to reset the base timestamp in |audio_decoder_job_|.
+    // TODO(qinmin): When reconfiguring the |audio_decoder_job_|, there might
+    // still be some audio frames in the decoder or in AudioTrack. Therefore,
+    // we are losing some time here. http://crbug.com/357726.
+    base::TimeDelta current_time = GetCurrentTime();
+    audio_decoder_job_->SetBaseTimestamp(current_time);
+    clock_.SetTime(current_time, current_time);
     audio_decoder_job_->BeginPrerolling(preroll_timestamp_);
     reconfig_audio_decoder_ =  false;
   }
@@ -912,7 +900,8 @@
 }
 
 void MediaSourcePlayer::StartStarvationCallback(
-    base::TimeDelta presentation_timestamp) {
+    base::TimeDelta current_presentation_timestamp,
+    base::TimeDelta max_presentation_timestamp) {
   // 20ms was chosen because it is the typical size of a compressed audio frame.
   // Anything smaller than this would likely cause unnecessary cycling in and
   // out of the prefetch state.
@@ -922,16 +911,16 @@
   base::TimeDelta current_timestamp = GetCurrentTime();
   base::TimeDelta timeout;
   if (HasAudio()) {
-    timeout = audio_timestamp_helper_->GetTimestamp() - current_timestamp;
+    timeout = max_presentation_timestamp - current_timestamp;
   } else {
-    DCHECK(current_timestamp <= presentation_timestamp);
+    DCHECK(current_timestamp <= current_presentation_timestamp);
 
     // For video only streams, fps can be estimated from the difference
     // between the previous and current presentation timestamps. The
     // previous presentation timestamp is equal to current_timestamp.
     // TODO(qinmin): determine whether 2 is a good coefficient for estimating
     // video frame timeout.
-    timeout = 2 * (presentation_timestamp - current_timestamp);
+    timeout = 2 * (current_presentation_timestamp - current_timestamp);
   }
 
   timeout = std::max(timeout, kMinStarvationTimeout);
diff --git a/media/base/android/media_source_player.h b/media/base/android/media_source_player.h
index ed0483c..bd8457e 100644
--- a/media/base/android/media_source_player.h
+++ b/media/base/android/media_source_player.h
@@ -29,7 +29,6 @@
 namespace media {
 
 class AudioDecoderJob;
-class AudioTimestampHelper;
 class VideoDecoderJob;
 
 // This class handles media source extensions on Android. It uses Android
@@ -77,8 +76,8 @@
   friend class MediaSourcePlayerTest;
 
   // Update the current timestamp.
-  void UpdateTimestamps(base::TimeDelta presentation_timestamp,
-                        size_t audio_output_bytes);
+  void UpdateTimestamps(base::TimeDelta current_presentation_timestamp,
+                        base::TimeDelta max_presentation_timestamp);
 
   // Helper function for starting media playback.
   void StartInternal();
@@ -89,8 +88,8 @@
   // Called when the decoder finishes its task.
   void MediaDecoderCallback(
         bool is_audio, MediaCodecStatus status,
-        base::TimeDelta presentation_timestamp,
-        size_t audio_output_bytes);
+        base::TimeDelta current_presentation_timestamp,
+        base::TimeDelta max_presentation_timestamp);
 
   // Gets MediaCrypto object from |drm_bridge_|.
   base::android::ScopedJavaLocalRef<jobject> GetMediaCrypto();
@@ -133,10 +132,14 @@
   void OnDecoderStarved();
 
   // Starts the |decoder_starvation_callback_| task with the timeout value.
-  // |presentation_timestamp| - The presentation timestamp used for starvation
-  // timeout computations. It represents the timestamp of the last piece of
-  // decoded data.
-  void StartStarvationCallback(base::TimeDelta presentation_timestamp);
+  // |current_presentation_timestamp| - The presentation timestamp used for
+  // starvation timeout computations. It represents the current timestamp of
+  // rendered data.
+  // |max_presentation_timestamp| - The presentation timestamp if all the
+  // decoded data are rendered.
+  void StartStarvationCallback(
+      base::TimeDelta current_presentation_timestamp,
+      base::TimeDelta max_presentation_timestamp);
 
   // Schedules a seek event in |pending_events_| and calls StopDecode() on all
   // the MediaDecoderJobs. Sets clock to |seek_time|, and resets
@@ -266,9 +269,6 @@
   // elapses.
   base::CancelableClosure decoder_starvation_callback_;
 
-  // Object to calculate the current audio timestamp for A/V sync.
-  scoped_ptr<AudioTimestampHelper> audio_timestamp_helper_;
-
   MediaDrmBridge* drm_bridge_;
 
   // No decryption key available to decrypt the encrypted buffer. In this case,
diff --git a/media/base/android/media_source_player_unittest.cc b/media/base/android/media_source_player_unittest.cc
index a3e69e5..c730c84 100644
--- a/media/base/android/media_source_player_unittest.cc
+++ b/media/base/android/media_source_player_unittest.cc
@@ -29,7 +29,8 @@
     }                                                             \
   } while (0)
 
-const int kDefaultDurationInMs = 10000;
+const base::TimeDelta kDefaultDuration =
+    base::TimeDelta::FromMilliseconds(10000);
 
 // TODO(wolenetz/qinmin): Simplify tests with more effective mock usage, and
 // fix flaky pointer-based MDJ inequality testing. See http://crbug.com/327839.
@@ -41,7 +42,8 @@
       : message_loop_(message_loop),
         playback_completed_(false),
         num_resources_requested_(0),
-        num_resources_released_(0) {}
+        num_resources_released_(0),
+        timestamp_updated_(false) {}
   virtual ~MockMediaPlayerManager() {}
 
   // MediaPlayerManager implementation.
@@ -49,7 +51,9 @@
     return NULL;
   }
   virtual void OnTimeUpdate(int player_id,
-                            base::TimeDelta current_time) OVERRIDE {}
+                            base::TimeDelta current_time) OVERRIDE {
+    timestamp_updated_ = true;
+  }
   virtual void OnMediaMetadataChanged(
       int player_id, base::TimeDelta duration, int width, int height,
       bool success) OVERRIDE {}
@@ -69,7 +73,7 @@
   virtual MediaPlayerAndroid* GetPlayer(int player_id) OVERRIDE { return NULL; }
   virtual void DestroyAllMediaPlayers() OVERRIDE {}
   virtual MediaDrmBridge* GetDrmBridge(int cdm_id) OVERRIDE { return NULL; }
-  virtual void OnProtectedSurfaceRequested(int player_id) OVERRIDE {}
+  virtual void RequestFullScreen(int player_id) OVERRIDE {}
   virtual void OnSessionCreated(int cdm_id,
                                 uint32 session_id,
                                 const std::string& web_session_id) OVERRIDE {}
@@ -104,6 +108,14 @@
     num_resources_released_++;
   }
 
+  bool timestamp_updated() const {
+    return timestamp_updated_;
+  }
+
+  void ResetTimestampUpdated() {
+    timestamp_updated_ = false;
+  }
+
  private:
   base::MessageLoop* message_loop_;
   bool playback_completed_;
@@ -111,6 +123,8 @@
   int num_resources_requested_;
   // The number of released resources.
   int num_resources_released_;
+  // Playback timestamp was updated.
+  bool timestamp_updated_;
 
   DISALLOW_COPY_AND_ASSIGN(MockMediaPlayerManager);
 };
@@ -251,7 +265,7 @@
     configs.audio_codec = audio_codec;
     configs.audio_channels = 2;
     configs.is_audio_encrypted = false;
-    configs.duration_ms = kDefaultDurationInMs;
+    configs.duration = kDefaultDuration;
 
     if (audio_codec == kCodecVorbis) {
       configs.audio_sampling_rate = 44100;
@@ -279,7 +293,7 @@
     configs.video_codec = kCodecVP8;
     configs.video_size = gfx::Size(320, 240);
     configs.is_video_encrypted = false;
-    configs.duration_ms = kDefaultDurationInMs;
+    configs.duration = kDefaultDuration;
     return configs;
   }
 
@@ -339,6 +353,30 @@
               GetMediaDecoderJob(false) != NULL);
   }
 
+  // Keeps decoding audio data until the decoder starts to output samples.
+  // Gives up if no audio output after decoding 10 frames.
+  void DecodeAudioDataUntilOutputBecomesAvailable() {
+    EXPECT_TRUE(player_.IsPlaying());
+    base::TimeDelta current_time = player_.GetCurrentTime();
+    base::TimeDelta start_timestamp = current_time;
+    for (int i = 0; i < 10; ++i) {
+      manager_.ResetTimestampUpdated();
+      player_.OnDemuxerDataAvailable(
+          CreateReadFromDemuxerAckForAudio(i > 3 ? 3 : i));
+      WaitForAudioDecodeDone();
+      base::TimeDelta new_current_time = player_.GetCurrentTime();
+      EXPECT_LE(current_time.InMilliseconds(),
+                new_current_time.InMilliseconds());
+      current_time = new_current_time;
+      if (manager_.timestamp_updated()) {
+        EXPECT_LT(start_timestamp.InMillisecondsF(),
+                  new_current_time.InMillisecondsF());
+        return;
+      }
+    }
+    EXPECT_TRUE(false);
+  }
+
   AccessUnit CreateAccessUnitWithData(bool is_audio, int audio_packet_id) {
     AccessUnit unit;
 
@@ -1077,24 +1115,14 @@
   // Test start time ticks will reset after decoder job underruns.
   StartAudioDecoderJob(true);
 
-  // For the first couple chunks, the decoder job may return
-  // DECODE_FORMAT_CHANGED status instead of DECODE_SUCCEEDED status. Decode
-  // more frames to guarantee that DECODE_SUCCEEDED will be returned.
-  for (int i = 0; i < 4; ++i) {
-    player_.OnDemuxerDataAvailable(CreateReadFromDemuxerAckForAudio(i));
-    EXPECT_TRUE(GetMediaDecoderJob(true)->is_decoding());
-    // Decode data until decoder started requesting new data again.
-    WaitForAudioDecodeDone();
-  }
+  DecodeAudioDataUntilOutputBecomesAvailable();
 
   // The decoder job should finish and a new request will be sent.
-  EXPECT_EQ(5, demuxer_->num_data_requests());
-  EXPECT_TRUE(GetMediaDecoderJob(true)->is_decoding());
   base::TimeTicks previous = StartTimeTicks();
+  player_.OnDemuxerDataAvailable(CreateReadFromDemuxerAckForAudio(3));
 
   // Let the decoder starve.
   TriggerPlayerStarvation();
-  player_.OnDemuxerDataAvailable(CreateReadFromDemuxerAckForAudio(3));
   WaitForAudioDecodeDone();
 
   // Verify the start time ticks is cleared at this point because the
@@ -1472,12 +1500,7 @@
   EXPECT_TRUE(IsPrerolling(true));
 
   // Complete the initial preroll by feeding data to the decoder.
-  for (int i = 0; i < 4; ++i) {
-    player_.OnDemuxerDataAvailable(CreateReadFromDemuxerAckForAudio(i));
-    EXPECT_TRUE(GetMediaDecoderJob(true)->is_decoding());
-    WaitForAudioDecodeDone();
-  }
-  EXPECT_LT(0.0, player_.GetCurrentTime().InMillisecondsF());
+  DecodeAudioDataUntilOutputBecomesAvailable();
   EXPECT_FALSE(IsPrerolling(true));
 
   SeekPlayerWithAbort(true, base::TimeDelta::FromMilliseconds(500));
@@ -2064,4 +2087,39 @@
   EXPECT_FALSE(GetMediaDecoderJob(false));
 }
 
+TEST_F(MediaSourcePlayerTest, CurrentTimeUpdatedWhileDecoderStarved) {
+  SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE();
+
+  // Test that current time is updated while decoder is starved.
+  StartAudioDecoderJob(true);
+  DecodeAudioDataUntilOutputBecomesAvailable();
+
+  // Trigger starvation while the decoder is decoding.
+  player_.OnDemuxerDataAvailable(CreateReadFromDemuxerAckForAudio(3));
+  manager_.ResetTimestampUpdated();
+  TriggerPlayerStarvation();
+  WaitForAudioDecodeDone();
+
+  // Current time should be updated.
+  EXPECT_TRUE(manager_.timestamp_updated());
+}
+
+TEST_F(MediaSourcePlayerTest, CurrentTimeKeepsIncreasingAfterConfigChange) {
+  SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE();
+
+  // Test current time keep on increasing after audio config change.
+  // Test that current time is updated while decoder is starved.
+  StartAudioDecoderJob(true);
+
+  DecodeAudioDataUntilOutputBecomesAvailable();
+
+  DemuxerData data = CreateReadFromDemuxerAckWithConfigChanged(true, 0);
+  player_.OnDemuxerDataAvailable(data);
+  WaitForAudioDecodeDone();
+
+  // Simulate arrival of new configs.
+  player_.OnDemuxerConfigsAvailable(CreateAudioDemuxerConfigs(kCodecVorbis));
+  DecodeAudioDataUntilOutputBecomesAvailable();
+}
+
 }  // namespace media
diff --git a/media/base/android/video_decoder_job.cc b/media/base/android/video_decoder_job.cc
index 12ab441..884bc6d 100644
--- a/media/base/android/video_decoder_job.cc
+++ b/media/base/android/video_decoder_job.cc
@@ -63,9 +63,10 @@
     int output_buffer_index,
     size_t size,
     bool render_output,
+    base::TimeDelta current_presentation_timestamp,
     const ReleaseOutputCompletionCallback& callback) {
   video_codec_bridge_->ReleaseOutputBuffer(output_buffer_index, render_output);
-  callback.Run(0u);
+  callback.Run(current_presentation_timestamp, current_presentation_timestamp);
 }
 
 bool VideoDecoderJob::ComputeTimeToRender() const {
diff --git a/media/base/android/video_decoder_job.h b/media/base/android/video_decoder_job.h
index 5c98850..e981ab8 100644
--- a/media/base/android/video_decoder_job.h
+++ b/media/base/android/video_decoder_job.h
@@ -48,6 +48,7 @@
       int output_buffer_index,
       size_t size,
       bool render_output,
+      base::TimeDelta current_presentation_timestamp,
       const ReleaseOutputCompletionCallback& callback) OVERRIDE;
 
   virtual bool ComputeTimeToRender() const OVERRIDE;
diff --git a/media/base/audio_buffer_converter.cc b/media/base/audio_buffer_converter.cc
index cdd3e08..74e570d 100644
--- a/media/base/audio_buffer_converter.cc
+++ b/media/base/audio_buffer_converter.cc
@@ -145,11 +145,12 @@
       0,
       buffer->sample_rate(),
       input_params_.bits_per_sample(),
-      // This is arbitrary, but small buffer sizes result in a lot of tiny
-      // ProvideInput calls, so we'll use at least the SincResampler's default
-      // request size.
-      std::max(buffer->frame_count(),
-               static_cast<int>(SincResampler::kDefaultRequestSize)));
+      // If resampling is needed and the FIFO disabled, the AudioConverter will
+      // always request SincResampler::kDefaultRequestSize frames.  Otherwise it
+      // will use the output frame size.
+      buffer->sample_rate() == output_params_.sample_rate()
+          ? output_params_.frames_per_buffer()
+          : SincResampler::kDefaultRequestSize);
 
   io_sample_rate_ratio_ = static_cast<double>(input_params_.sample_rate()) /
                           output_params_.sample_rate();
@@ -159,6 +160,7 @@
   if (!IsConfigChange(output_params_, buffer))
     return;
 
+  // Note: The FIFO is disabled to avoid extraneous memcpy().
   audio_converter_.reset(
       new AudioConverter(input_params_, output_params_, true));
   audio_converter_->AddInput(this);
diff --git a/media/base/audio_buffer_converter.h b/media/base/audio_buffer_converter.h
index 9785b10..9efbd16 100644
--- a/media/base/audio_buffer_converter.h
+++ b/media/base/audio_buffer_converter.h
@@ -42,6 +42,13 @@
   // timestamp will be set to match the input buffer.
   void ResetTimestampState();
 
+  int input_buffer_size_for_testing() const {
+    return input_params_.frames_per_buffer();
+  }
+  int input_frames_left_for_testing() const {
+    return input_frames_;
+  }
+
  private:
   // Callback to provide data to the AudioConverter
   virtual double ProvideInput(AudioBus* audio_bus,
diff --git a/media/base/audio_buffer_converter_unittest.cc b/media/base/audio_buffer_converter_unittest.cc
index 77e787e..c5c816c 100644
--- a/media/base/audio_buffer_converter_unittest.cc
+++ b/media/base/audio_buffer_converter_unittest.cc
@@ -36,13 +36,15 @@
 class AudioBufferConverterTest : public ::testing::Test {
  public:
   AudioBufferConverterTest()
-      : input_frames_(0), expected_output_frames_(0.0), output_frames_(0) {
-    AudioParameters output_params(AudioParameters::AUDIO_PCM_LOW_LATENCY,
-                                  kOutChannelLayout,
-                                  kOutSampleRate,
-                                  16,
-                                  kOutFrameSize);
-    ResetConverter(output_params);
+      : input_frames_(0),
+        expected_output_frames_(0.0),
+        output_frames_(0),
+        output_params_(AudioParameters::AUDIO_PCM_LOW_LATENCY,
+                       kOutChannelLayout,
+                       kOutSampleRate,
+                       16,
+                       kOutFrameSize) {
+    audio_buffer_converter_.reset(new AudioBufferConverter(output_params_));
   }
 
   void Reset() {
@@ -55,44 +57,40 @@
       input_frames_ += in->frame_count();
       expected_output_frames_ +=
           in->frame_count() *
-          (static_cast<double>(kOutSampleRate) / in->sample_rate());
+          (static_cast<double>(output_params_.sample_rate()) /
+           in->sample_rate());
     }
     audio_buffer_converter_->AddInput(in);
   }
 
+  void ConsumeOutput() {
+    ASSERT_TRUE(audio_buffer_converter_->HasNextBuffer());
+    scoped_refptr<AudioBuffer> out = audio_buffer_converter_->GetNextBuffer();
+    if (!out->end_of_stream()) {
+      output_frames_ += out->frame_count();
+      EXPECT_EQ(out->sample_rate(), output_params_.sample_rate());
+      EXPECT_EQ(out->channel_layout(), output_params_.channel_layout());
+      EXPECT_EQ(out->channel_count(), output_params_.channels());
+    } else {
+      EXPECT_FALSE(audio_buffer_converter_->HasNextBuffer());
+    }
+  }
+
   void ConsumeAllOutput() {
     AddInput(AudioBuffer::CreateEOSBuffer());
-    while (audio_buffer_converter_->HasNextBuffer()) {
-      scoped_refptr<AudioBuffer> out = audio_buffer_converter_->GetNextBuffer();
-      if (!out->end_of_stream()) {
-        output_frames_ += out->frame_count();
-        EXPECT_EQ(out->sample_rate(), out_sample_rate_);
-        EXPECT_EQ(out->channel_layout(), out_channel_layout_);
-        EXPECT_EQ(out->channel_count(), out_channel_count_);
-      } else {
-        EXPECT_FALSE(audio_buffer_converter_->HasNextBuffer());
-      }
-    }
+    while (audio_buffer_converter_->HasNextBuffer())
+      ConsumeOutput();
     EXPECT_EQ(output_frames_, ceil(expected_output_frames_));
   }
 
-  void ResetConverter(AudioParameters out_params) {
-    audio_buffer_converter_.reset(new AudioBufferConverter(out_params));
-    out_channel_layout_ = out_params.channel_layout();
-    out_channel_count_ = out_params.channels();
-    out_sample_rate_ = out_params.sample_rate();
-  }
-
- private:
+ protected:
   scoped_ptr<AudioBufferConverter> audio_buffer_converter_;
 
   int input_frames_;
   double expected_output_frames_;
   int output_frames_;
-
-  int out_sample_rate_;
-  ChannelLayout out_channel_layout_;
-  int out_channel_count_;
+  int input_buffers_;
+  AudioParameters output_params_;
 };
 
 TEST_F(AudioBufferConverterTest, PassThrough) {
@@ -210,17 +208,49 @@
 }
 
 TEST_F(AudioBufferConverterTest, DiscreteChannelLayout) {
-  AudioParameters output_params(AudioParameters::AUDIO_PCM_LOW_LATENCY,
-                                CHANNEL_LAYOUT_DISCRETE,
-                                2,
-                                0,
-                                kOutSampleRate,
-                                16,
-                                512,
-                                0);
-  ResetConverter(output_params);
+  output_params_ = AudioParameters(AudioParameters::AUDIO_PCM_LOW_LATENCY,
+                                   CHANNEL_LAYOUT_DISCRETE,
+                                   2,
+                                   0,
+                                   kOutSampleRate,
+                                   16,
+                                   512,
+                                   0);
+  audio_buffer_converter_.reset(new AudioBufferConverter(output_params_));
   AddInput(MakeTestBuffer(kOutSampleRate, CHANNEL_LAYOUT_STEREO, 2, 512));
   ConsumeAllOutput();
 }
 
+TEST_F(AudioBufferConverterTest, LargeBuffersResampling) {
+  output_params_ = AudioParameters(AudioParameters::AUDIO_PCM_LOW_LATENCY,
+                                   kOutChannelLayout,
+                                   kOutSampleRate,
+                                   16,
+                                   2048);
+
+  audio_buffer_converter_.reset(new AudioBufferConverter(output_params_));
+  const int kInputSampleRate = 48000;
+  const int kInputFrameSize = 8192;
+  ASSERT_NE(kInputSampleRate, kOutSampleRate);
+
+  const int kInputBuffers = 3;
+  for (int i = 0; i < kInputBuffers; ++i) {
+    AddInput(MakeTestBuffer(kInputSampleRate,
+                            kOutChannelLayout,
+                            kOutChannelCount,
+                            kInputFrameSize));
+  }
+
+  // Do not add an EOS packet here, as it will invoke flushing.
+  while (audio_buffer_converter_->HasNextBuffer())
+    ConsumeOutput();
+
+  // Since the input buffer size is a multiple of the input request size there
+  // should never be any frames remaining at this point.
+  ASSERT_EQ(kInputFrameSize %
+                audio_buffer_converter_->input_buffer_size_for_testing(),
+            0);
+  EXPECT_EQ(0, audio_buffer_converter_->input_frames_left_for_testing());
+}
+
 }  // namespace media
diff --git a/media/base/audio_decoder_config.cc b/media/base/audio_decoder_config.cc
index 09910ed..06a1643 100644
--- a/media/base/audio_decoder_config.cc
+++ b/media/base/audio_decoder_config.cc
@@ -20,7 +20,8 @@
       channel_layout_(CHANNEL_LAYOUT_UNSUPPORTED),
       samples_per_second_(0),
       bytes_per_frame_(0),
-      is_encrypted_(false) {
+      is_encrypted_(false),
+      codec_delay_(0) {
 }
 
 AudioDecoderConfig::AudioDecoderConfig(AudioCodec codec,
@@ -32,7 +33,7 @@
                                        bool is_encrypted) {
   Initialize(codec, sample_format, channel_layout, samples_per_second,
              extra_data, extra_data_size, is_encrypted, true,
-             base::TimeDelta(), base::TimeDelta());
+             base::TimeDelta(), 0);
 }
 
 void AudioDecoderConfig::Initialize(AudioCodec codec,
@@ -44,7 +45,7 @@
                                     bool is_encrypted,
                                     bool record_stats,
                                     base::TimeDelta seek_preroll,
-                                    base::TimeDelta codec_delay) {
+                                    int codec_delay) {
   CHECK((extra_data_size != 0) == (extra_data != NULL));
 
   if (record_stats) {
@@ -88,7 +89,7 @@
          samples_per_second_ <= limits::kMaxSampleRate &&
          sample_format_ != kUnknownSampleFormat &&
          seek_preroll_ >= base::TimeDelta() &&
-         codec_delay_ >= base::TimeDelta();
+         codec_delay_ >= 0;
 }
 
 bool AudioDecoderConfig::Matches(const AudioDecoderConfig& config) const {
@@ -114,7 +115,7 @@
     << " sample_format: " << sample_format()
     << " bytes_per_frame: " << bytes_per_frame()
     << " seek_preroll: " << seek_preroll().InMilliseconds() << "ms"
-    << " codec_delay: " << codec_delay().InMilliseconds() << "ms"
+    << " codec_delay: " << codec_delay()
     << " has extra data? " << (extra_data() ? "true" : "false")
     << " encrypted? " << (is_encrypted() ? "true" : "false");
   return s.str();
diff --git a/media/base/audio_decoder_config.h b/media/base/audio_decoder_config.h
index c529909..c8c7b47 100644
--- a/media/base/audio_decoder_config.h
+++ b/media/base/audio_decoder_config.h
@@ -63,13 +63,13 @@
 
   ~AudioDecoderConfig();
 
-  // Resets the internal state of this object.
+  // Resets the internal state of this object.  |codec_delay| is in frames.
   void Initialize(AudioCodec codec, SampleFormat sample_format,
                   ChannelLayout channel_layout, int samples_per_second,
                   const uint8* extra_data, size_t extra_data_size,
                   bool is_encrypted, bool record_stats,
                   base::TimeDelta seek_preroll,
-                  base::TimeDelta codec_delay);
+                  int codec_delay);
 
   // Returns true if this object has appropriate configuration values, false
   // otherwise.
@@ -91,7 +91,7 @@
   SampleFormat sample_format() const { return sample_format_; }
   int bytes_per_frame() const { return bytes_per_frame_; }
   base::TimeDelta seek_preroll() const { return seek_preroll_; }
-  base::TimeDelta codec_delay() const { return codec_delay_; }
+  int codec_delay() const { return codec_delay_; }
 
   // Optional byte data required to initialize audio decoders such as Vorbis
   // codebooks.
@@ -119,10 +119,10 @@
   // before the decoded data is valid.
   base::TimeDelta seek_preroll_;
 
-  // |codec_delay_| is the overall delay overhead added by the codec while
-  // encoding. This value should be subtracted from each block's timestamp to
-  // get the actual timestamp.
-  base::TimeDelta codec_delay_;
+  // |codec_delay_| is the number of frames the decoder should discard before
+  // returning decoded data.  This value can include both decoder delay as well
+  // as padding added during encoding.
+  int codec_delay_;
 
   // Not using DISALLOW_COPY_AND_ASSIGN here intentionally to allow the compiler
   // generated copy constructor and assignment operator. Since the extra data is
diff --git a/media/base/audio_hardware_config.cc b/media/base/audio_hardware_config.cc
index d72fce7..65506ca 100644
--- a/media/base/audio_hardware_config.cc
+++ b/media/base/audio_hardware_config.cc
@@ -4,17 +4,40 @@
 
 #include "media/base/audio_hardware_config.h"
 
+#include <algorithm>
+
+#include "base/logging.h"
+#include "build/build_config.h"
+
 using base::AutoLock;
 using media::AudioParameters;
 
 namespace media {
 
+#if defined(OS_LINUX) || defined(OS_MACOSX)
+#define HIGH_LATENCY_AUDIO_SUPPORT 1
+#endif
+
+#if defined(HIGH_LATENCY_AUDIO_SUPPORT)
+// Taken from "Bit Twiddling Hacks"
+// http://graphics.stanford.edu/~seander/bithacks.html#RoundUpPowerOf2
+static uint32_t RoundUpToPowerOfTwo(uint32_t v) {
+  v--;
+  v |= v >> 1;
+  v |= v >> 2;
+  v |= v >> 4;
+  v |= v >> 8;
+  v |= v >> 16;
+  v++;
+  return v;
+}
+#endif
+
 AudioHardwareConfig::AudioHardwareConfig(
     const AudioParameters& input_params,
     const AudioParameters& output_params)
     : input_params_(input_params),
-      output_params_(output_params) {
-}
+      output_params_(output_params) {}
 
 AudioHardwareConfig::~AudioHardwareConfig() {}
 
@@ -77,4 +100,29 @@
   output_params_ = output_params;
 }
 
+int AudioHardwareConfig::GetHighLatencyBufferSize() const {
+  AutoLock auto_lock(config_lock_);
+#if defined(HIGH_LATENCY_AUDIO_SUPPORT)
+  // Empirically, use the nearest higher power of two buffer size corresponding
+  // to 20 ms worth of samples.  For a given sample rate, this works out to:
+  //
+  //     <= 3200   : 64
+  //     <= 6400   : 128
+  //     <= 12800  : 256
+  //     <= 25600  : 512
+  //     <= 51200  : 1024
+  //     <= 102400 : 2048
+  //     <= 204800 : 4096
+  //
+  // On Linux, the minimum hardware buffer size is 512, so the lower calculated
+  // values are unused.  OSX may have a value as low as 128.  Windows is device
+  // dependent but will generally be sample_rate() / 100.
+  const int high_latency_buffer_size =
+      RoundUpToPowerOfTwo(2 * output_params_.sample_rate() / 100);
+  return std::max(output_params_.frames_per_buffer(), high_latency_buffer_size);
+#else
+  return output_params_.frames_per_buffer();
+#endif
+}
+
 }  // namespace media
diff --git a/media/base/audio_hardware_config.h b/media/base/audio_hardware_config.h
index d1621b9..a4baaac 100644
--- a/media/base/audio_hardware_config.h
+++ b/media/base/audio_hardware_config.h
@@ -41,6 +41,10 @@
   void UpdateInputConfig(const media::AudioParameters& input_params);
   void UpdateOutputConfig(const media::AudioParameters& output_params);
 
+  // For clients which don't need low latency, a larger buffer size should be
+  // used to save power and CPU resources.
+  int GetHighLatencyBufferSize() const;
+
  private:
   // Cached values; access is protected by |config_lock_|.
   mutable base::Lock config_lock_;
diff --git a/media/base/audio_hardware_config_unittest.cc b/media/base/audio_hardware_config_unittest.cc
index 4a742bf..80dd03a 100644
--- a/media/base/audio_hardware_config_unittest.cc
+++ b/media/base/audio_hardware_config_unittest.cc
@@ -2,6 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "build/build_config.h"
 #include "media/base/audio_hardware_config.h"
 #include "media/audio/audio_parameters.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -87,4 +88,36 @@
   EXPECT_EQ(kNewInputChannelLayout, fake_config.GetInputChannelLayout());
 }
 
+TEST(AudioHardwareConfig, HighLatencyBufferSizes) {
+  AudioParameters input_params(AudioParameters::AUDIO_PCM_LOW_LATENCY,
+                               kInputChannelLayout,
+                               kInputSampleRate,
+                               16,
+                               kOutputBufferSize);
+  AudioParameters output_params(AudioParameters::AUDIO_PCM_LOW_LATENCY,
+                                kOutputChannelLayout,
+                                3200,
+                                16,
+                                32);
+  AudioHardwareConfig fake_config(input_params, output_params);
+
+#if defined(OS_LINUX) || defined(OS_MACOSX)
+  EXPECT_EQ(64, fake_config.GetHighLatencyBufferSize());
+
+  for (int i = 6400; i <= 204800; i *= 2) {
+    fake_config.UpdateOutputConfig(
+        AudioParameters(AudioParameters::AUDIO_PCM_LOW_LATENCY,
+                        kOutputChannelLayout,
+                        i,
+                        16,
+                        32));
+    EXPECT_EQ(2 * (i / 100), fake_config.GetHighLatencyBufferSize());
+  }
+#else
+  // If high latency buffer sizes are not supported, the value should just pass
+  // through the output buffer size.
+  EXPECT_EQ(32, fake_config.GetHighLatencyBufferSize());
+#endif
+}
+
 }  // namespace content
diff --git a/media/base/audio_splicer.cc b/media/base/audio_splicer.cc
index 29649bc..b83765e 100644
--- a/media/base/audio_splicer.cc
+++ b/media/base/audio_splicer.cc
@@ -44,7 +44,8 @@
 static void AccurateTrimEnd(int frames_to_trim,
                             const scoped_refptr<AudioBuffer> buffer,
                             const AudioTimestampHelper& timestamp_helper) {
-  DCHECK(buffer->timestamp() == timestamp_helper.GetTimestamp());
+  DCHECK_LT(std::abs(timestamp_helper.GetFramesToTarget(buffer->timestamp())),
+            kMinGapSize);
   buffer->TrimEnd(frames_to_trim);
   buffer->set_duration(
       timestamp_helper.GetFrameDuration(buffer->frame_count()));
@@ -91,9 +92,6 @@
   // Returns the total frame count of all buffers available for output.
   int GetFrameCount() const;
 
-  // Returns the duration of all buffers added to the output queue thus far.
-  base::TimeDelta GetDuration() const;
-
   const AudioTimestampHelper& timestamp_helper() {
     return output_timestamp_helper_;
   }
@@ -243,12 +241,6 @@
   return frame_count;
 }
 
-base::TimeDelta AudioStreamSanitizer::GetDuration() const {
-  DCHECK(output_timestamp_helper_.base_timestamp() != kNoTimestamp());
-  return output_timestamp_helper_.GetTimestamp() -
-         output_timestamp_helper_.base_timestamp();
-}
-
 bool AudioStreamSanitizer::DrainInto(AudioStreamSanitizer* output) {
   while (HasNextBuffer()) {
     if (!output->AddInput(GetNextBuffer()))
@@ -264,7 +256,8 @@
       max_splice_end_timestamp_(kNoTimestamp()),
       output_sanitizer_(new AudioStreamSanitizer(samples_per_second)),
       pre_splice_sanitizer_(new AudioStreamSanitizer(samples_per_second)),
-      post_splice_sanitizer_(new AudioStreamSanitizer(samples_per_second)) {}
+      post_splice_sanitizer_(new AudioStreamSanitizer(samples_per_second)),
+      have_all_pre_splice_buffers_(false) {}
 
 AudioSplicer::~AudioSplicer() {}
 
@@ -272,6 +265,7 @@
   output_sanitizer_->Reset();
   pre_splice_sanitizer_->Reset();
   post_splice_sanitizer_->Reset();
+  have_all_pre_splice_buffers_ = false;
   reset_splice_timestamps();
 }
 
@@ -286,17 +280,8 @@
   const AudioTimestampHelper& output_ts_helper =
       output_sanitizer_->timestamp_helper();
 
-  if (!post_splice_sanitizer_->HasNextBuffer()) {
-    // Due to inaccurate demuxer timestamps a splice may have been incorrectly
-    // marked such that the "pre splice buffers" were all entirely before the
-    // splice point.  Here we check for end of stream or buffers which couldn't
-    // possibly be part of the splice.
-    if (input->end_of_stream() ||
-        input->timestamp() >= max_splice_end_timestamp_) {
-      CHECK(pre_splice_sanitizer_->DrainInto(output_sanitizer_.get()));
-      reset_splice_timestamps();
-      return output_sanitizer_->AddInput(input);
-    }
+  if (!have_all_pre_splice_buffers_) {
+    DCHECK(!input->end_of_stream());
 
     // If the provided buffer is entirely before the splice point it can also be
     // added to the output queue.
@@ -314,24 +299,13 @@
           output_ts_helper.frame_count(), output_ts_helper.base_timestamp());
     }
 
-    // The first overlapping buffer is expected to have a timestamp of exactly
-    // |splice_timestamp_|.  Until that timestamp is seen, all buffers go into
-    // |pre_splice_sanitizer_|.
-    if (!pre_splice_sanitizer_->HasNextBuffer() ||
-        input->timestamp() != splice_timestamp_) {
-      return pre_splice_sanitizer_->AddInput(input);
-    }
-
-    // We've received the first overlapping buffer.
-  } else if (!input->end_of_stream() &&
-             input->timestamp() == splice_timestamp_) {
-    // In this case we accidentally put a pre splice buffer in the post splice
-    // sanitizer, so we need to recover by transferring all current post splice
-    // buffers into the pre splice sanitizer and continuing with the splice.
-    post_splice_sanitizer_->DrainInto(pre_splice_sanitizer_.get());
-    post_splice_sanitizer_->Reset();
+    return pre_splice_sanitizer_->AddInput(input);
   }
 
+  // The first post splice buffer is expected to match |splice_timestamp_|.
+  if (!post_splice_sanitizer_->HasNextBuffer())
+    DCHECK(splice_timestamp_ == input->timestamp());
+
   // At this point we have all the fade out preroll buffers from the decoder.
   // We now need to wait until we have enough data to perform the crossfade (or
   // we receive an end of stream).
@@ -356,12 +330,11 @@
     return true;
   }
 
-  // Since it's possible that a pre splice buffer after the first might have its
-  // timestamp fuzzed to be |splice_timestamp_| we need to always wait until we
-  // have seen all possible post splice buffers to ensure we didn't mistakenly
-  // put a pre splice buffer into the post splice sanitizer.
-  if (!input->end_of_stream() && input->timestamp() < max_splice_end_timestamp_)
+  // Wait until we have enough data to crossfade or end of stream.
+  if (!input->end_of_stream() &&
+      input->timestamp() + input->duration() < max_splice_end_timestamp_) {
     return true;
+  }
 
   scoped_refptr<AudioBuffer> crossfade_buffer;
   scoped_ptr<AudioBus> pre_splice =
@@ -385,7 +358,13 @@
 }
 
 void AudioSplicer::SetSpliceTimestamp(base::TimeDelta splice_timestamp) {
-  DCHECK(splice_timestamp != kNoTimestamp());
+  if (splice_timestamp == kNoTimestamp()) {
+    DCHECK(splice_timestamp_ != kNoTimestamp());
+    DCHECK(!have_all_pre_splice_buffers_);
+    have_all_pre_splice_buffers_ = true;
+    return;
+  }
+
   if (splice_timestamp_ == splice_timestamp)
     return;
 
@@ -398,6 +377,7 @@
   max_splice_end_timestamp_ = splice_timestamp_ + max_crossfade_duration_;
   pre_splice_sanitizer_->Reset();
   post_splice_sanitizer_->Reset();
+  have_all_pre_splice_buffers_ = false;
 }
 
 scoped_ptr<AudioBus> AudioSplicer::ExtractCrossfadeFromPreSplice(
diff --git a/media/base/audio_splicer.h b/media/base/audio_splicer.h
index 4d484d6..389607a 100644
--- a/media/base/audio_splicer.h
+++ b/media/base/audio_splicer.h
@@ -45,10 +45,15 @@
   // should only be called if HasNextBuffer() returns true.
   scoped_refptr<AudioBuffer> GetNextBuffer();
 
-  // Indicates that overlapping buffers are coming up and should be crossfaded.
-  // Once set, all buffers encountered after |splice_timestamp| will be queued
-  // internally until at least 5ms of overlapping buffers are received (or end
-  // of stream, whichever comes first).
+  // Indicates an upcoming splice point.  All buffers overlapping or after the
+  // |splice_timestamp| will be considered as "before the splice."  Clients must
+  // then call SetSpliceTimestamp(kNoTimestamp()) to signal that future buffers
+  // should be considered as "after the splice."
+  //
+  // Once |kCrossfadeDurationInMilliseconds| of buffers "after the splice" or
+  // end of stream has been received, the "after" buffers will be crossfaded
+  // with all "before" buffers which overlap them.  "before" buffers outside
+  // of the overlap range will be discarded.
   void SetSpliceTimestamp(base::TimeDelta splice_timestamp);
 
  private:
@@ -101,6 +106,10 @@
   scoped_ptr<AudioStreamSanitizer> pre_splice_sanitizer_;
   scoped_ptr<AudioStreamSanitizer> post_splice_sanitizer_;
 
+  // Whether all buffers which should go into |pre_splice_sanitizer_| have been
+  // received.  If true, buffers should now be put in |post_splice_sanitizer_|.
+  bool have_all_pre_splice_buffers_;
+
   DISALLOW_IMPLICIT_CONSTRUCTORS(AudioSplicer);
 };
 
diff --git a/media/base/audio_splicer_unittest.cc b/media/base/audio_splicer_unittest.cc
index 2f74a50..71e1728 100644
--- a/media/base/audio_splicer_unittest.cc
+++ b/media/base/audio_splicer_unittest.cc
@@ -191,7 +191,6 @@
   // Verify that a new input buffer passes through as expected.
   scoped_refptr<AudioBuffer> input_2 = GetNextInputBuffer(0.2f);
   EXPECT_TRUE(AddInput(input_2));
-  ASSERT_TRUE(splicer_.HasNextBuffer());
   VerifyNextBuffer(input_2);
   EXPECT_FALSE(splicer_.HasNextBuffer());
 }
@@ -333,8 +332,8 @@
 
   // Verify that the first input buffer passed through unmodified.
   VerifyNextBuffer(input_1);
-  ASSERT_TRUE(splicer_.HasNextBuffer());
 
+  ASSERT_TRUE(splicer_.HasNextBuffer());
   scoped_refptr<AudioBuffer> output_2 = splicer_.GetNextBuffer();
   EXPECT_FALSE(splicer_.HasNextBuffer());
 
@@ -432,10 +431,10 @@
   EXPECT_TRUE(AddInput(overlapped_buffer));
   EXPECT_FALSE(splicer_.HasNextBuffer());
 
-  // Even though |overlapping_buffer| completes the splice, one extra buffer is
-  // required to confirm it's actually a splice.
+  // |overlapping_buffer| completes the splice.
+  splicer_.SetSpliceTimestamp(kNoTimestamp());
   EXPECT_TRUE(AddInput(overlapping_buffer));
-  EXPECT_FALSE(splicer_.HasNextBuffer());
+  ASSERT_TRUE(splicer_.HasNextBuffer());
 
   // Add one more buffer to make sure it's passed through untouched.
   scoped_refptr<AudioBuffer> extra_post_splice_buffer =
@@ -509,12 +508,12 @@
 
   // |overlapping_buffer| should not have enough data to complete the splice, so
   // ensure output is not available.
+  splicer_.SetSpliceTimestamp(kNoTimestamp());
   EXPECT_TRUE(AddInput(overlapping_buffer));
   EXPECT_FALSE(splicer_.HasNextBuffer());
 
   // Now add an EOS buffer which should complete the splice.
   EXPECT_TRUE(AddInput(AudioBuffer::CreateEOSBuffer()));
-  ASSERT_TRUE(splicer_.HasNextBuffer());
 
   VerifyPreSpliceOutput(overlapped_buffer,
                         overlapping_buffer,
@@ -568,14 +567,9 @@
   EXPECT_TRUE(AddInput(overlapped_buffer));
   EXPECT_FALSE(splicer_.HasNextBuffer());
 
-  // Even though |overlapping_buffer| completes the splice, one extra buffer is
-  // required to confirm it's actually a splice.
+  // |overlapping_buffer| completes the splice.
+  splicer_.SetSpliceTimestamp(kNoTimestamp());
   EXPECT_TRUE(AddInput(overlapping_buffer));
-  EXPECT_FALSE(splicer_.HasNextBuffer());
-
-  // Add an EOS buffer to complete the splice.
-  EXPECT_TRUE(AddInput(AudioBuffer::CreateEOSBuffer()));
-  ASSERT_TRUE(splicer_.HasNextBuffer());
 
   const int kExpectedPreSpliceSize = 55;
   const base::TimeDelta kExpectedPreSpliceDuration =
@@ -602,10 +596,6 @@
             post_splice_output->duration());
 
   EXPECT_TRUE(VerifyData(post_splice_output, GetValue(overlapping_buffer)));
-
-  post_splice_output = splicer_.GetNextBuffer();
-  EXPECT_TRUE(post_splice_output->end_of_stream());
-
   EXPECT_FALSE(splicer_.HasNextBuffer());
 }
 
@@ -642,8 +632,8 @@
 
   // |second_buffer| should complete the supposed splice, so ensure output is
   // now available.
+  splicer_.SetSpliceTimestamp(kNoTimestamp());
   EXPECT_TRUE(AddInput(second_buffer));
-  ASSERT_TRUE(splicer_.HasNextBuffer());
 
   VerifyNextBuffer(first_buffer);
   VerifyNextBuffer(second_buffer);
@@ -678,100 +668,16 @@
   // The splicer should pass through the first buffer since it's not part of the
   // splice.
   EXPECT_TRUE(AddInput(first_buffer));
-  EXPECT_TRUE(splicer_.HasNextBuffer());
   VerifyNextBuffer(first_buffer);
 
   // Do not add |gap_buffer|.
 
-  // |second_buffer| will trigger an exact overlap splice check.
+  // |second_buffer| will complete the supposed splice.
+  splicer_.SetSpliceTimestamp(kNoTimestamp());
   EXPECT_TRUE(AddInput(second_buffer));
-  EXPECT_FALSE(splicer_.HasNextBuffer());
-
-  // When the next buffer is not an exact overlap, the bad splice detection code
-  // will kick in and release the buffers.
-  EXPECT_TRUE(AddInput(AudioBuffer::CreateEOSBuffer()));
-  ASSERT_TRUE(splicer_.HasNextBuffer());
 
   VerifyNextBuffer(gap_buffer);
   VerifyNextBuffer(second_buffer);
-  scoped_refptr<AudioBuffer> eos_buffer = splicer_.GetNextBuffer();
-  EXPECT_TRUE(eos_buffer->end_of_stream());
-  EXPECT_FALSE(splicer_.HasNextBuffer());
-}
-
-// Test behavior when a splice frame gets fuzzed such that there is a pre splice
-// buffer after the first which has a timestamp equal to the splice timestamp.
-// +-----------+
-// |11111111111|
-// +-----------+
-//           +-------+
-//           |2222222|
-//           +-------+
-//           +--------------+
-//           |33333333333333|
-//           +--------------+
-// Results in:
-// +---------+--------------+
-// |111111111|xyyyyyy3333333|
-// +---------+--------------+
-// Where x represents a crossfade between buffers 1 and 3; while y is a
-// crossfade between buffers 2 and 3.
-TEST_F(AudioSplicerTest, SpliceIncorrectlySlotted) {
-  const int kBufferSize =
-      input_timestamp_helper_.GetFramesToTarget(max_crossfade_duration());
-  const int kOverlapSize = 2;
-
-  scoped_refptr<AudioBuffer> buffer_1 =
-      GetNextInputBuffer(1.0f, kBufferSize + kOverlapSize);
-  input_timestamp_helper_.SetBaseTimestamp(buffer_1->timestamp());
-  input_timestamp_helper_.AddFrames(kBufferSize);
-
-  const base::TimeDelta splice_timestamp =
-      input_timestamp_helper_.GetTimestamp();
-  splicer_.SetSpliceTimestamp(splice_timestamp);
-
-  scoped_refptr<AudioBuffer> buffer_2 = GetNextInputBuffer(0.5f, kBufferSize);
-
-  // Create an overlap buffer which is just short of the crossfade size.
-  input_timestamp_helper_.SetBaseTimestamp(splice_timestamp);
-  scoped_refptr<AudioBuffer> buffer_3 =
-      GetNextInputBuffer(0.0f, kBufferSize - kOverlapSize);
-
-  // The splicer should be internally queuing input since |buffer_1| is part of
-  // the supposed splice.
-  EXPECT_TRUE(AddInput(buffer_1));
-  EXPECT_FALSE(splicer_.HasNextBuffer());
-
-  // Adding |buffer_2| should look like a completion of the splice, but still no
-  // buffer should be handed out.
-  EXPECT_TRUE(AddInput(buffer_2));
-  EXPECT_FALSE(splicer_.HasNextBuffer());
-
-  // Adding |buffer_3| should complete the splice correctly, but there is still
-  // not enough data for crossfade, so it shouldn't return yet.
-  EXPECT_TRUE(AddInput(buffer_3));
-  EXPECT_FALSE(splicer_.HasNextBuffer());
-
-  // Add an EOS buffer which should trigger completion of the splice.
-  EXPECT_TRUE(AddInput(AudioBuffer::CreateEOSBuffer()));
-  ASSERT_TRUE(splicer_.HasNextBuffer());
-
-  const int kExpectedPreSpliceSize = kBufferSize;
-  const base::TimeDelta kExpectedPreSpliceDuration = splice_timestamp;
-  const base::TimeDelta kExpectedCrossfadeDuration =
-      base::TimeDelta::FromMicroseconds(4966);
-  VerifyPreSpliceOutput(
-      buffer_1, buffer_3, kExpectedPreSpliceSize, kExpectedPreSpliceDuration);
-  VerifyCrossfadeOutput(buffer_1,
-                        buffer_2,
-                        buffer_3,
-                        kOverlapSize,
-                        buffer_3->frame_count(),
-                        kExpectedCrossfadeDuration);
-
-  scoped_refptr<AudioBuffer> eos_buffer = splicer_.GetNextBuffer();
-  EXPECT_TRUE(eos_buffer->end_of_stream());
-
   EXPECT_FALSE(splicer_.HasNextBuffer());
 }
 
diff --git a/media/base/audio_video_metadata_extractor.cc b/media/base/audio_video_metadata_extractor.cc
index 47ecc7c..a18cc7d 100644
--- a/media/base/audio_video_metadata_extractor.cc
+++ b/media/base/audio_video_metadata_extractor.cc
@@ -49,6 +49,10 @@
 
 }  // namespace
 
+AudioVideoMetadataExtractor::StreamInfo::StreamInfo() {}
+
+AudioVideoMetadataExtractor::StreamInfo::~StreamInfo() {}
+
 AudioVideoMetadataExtractor::AudioVideoMetadataExtractor()
     : extracted_(false),
       duration_(-1),
@@ -85,24 +89,28 @@
   if (format_context->duration != AV_NOPTS_VALUE)
     duration_ = static_cast<double>(format_context->duration) / AV_TIME_BASE;
 
-  ExtractDictionary(format_context->metadata);
+  stream_infos_.push_back(StreamInfo());
+  StreamInfo& container_info = stream_infos_.back();
+  container_info.type = format_context->iformat->name;
+  ExtractDictionary(format_context->metadata, &container_info.tags);
 
   for (unsigned int i = 0; i < format_context->nb_streams; ++i) {
+    stream_infos_.push_back(StreamInfo());
+    StreamInfo& info = stream_infos_.back();
+
     AVStream* stream = format_context->streams[i];
     if (!stream)
       continue;
 
-    // Ignore attached pictures for metadata extraction.
-    if ((stream->disposition & AV_DISPOSITION_ATTACHED_PIC) != 0)
-      continue;
-
     // Extract dictionary from streams also. Needed for containers that attach
     // metadata to contained streams instead the container itself, like OGG.
-    ExtractDictionary(stream->metadata);
+    ExtractDictionary(stream->metadata, &info.tags);
 
     if (!stream->codec)
       continue;
 
+    info.type = avcodec_get_name(stream->codec->codec_id);
+
     // Extract dimensions of largest stream that's not an attached picture.
     if (stream->codec->width > 0 && stream->codec->width > width_ &&
         stream->codec->height > 0 && stream->codec->height > height_) {
@@ -195,20 +203,21 @@
   return track_;
 }
 
-const std::map<std::string, std::string>&
-AudioVideoMetadataExtractor::raw_tags() const {
+const std::vector<AudioVideoMetadataExtractor::StreamInfo>&
+AudioVideoMetadataExtractor::stream_infos() const {
   DCHECK(extracted_);
-  return raw_tags_;
+  return stream_infos_;
 }
 
-void AudioVideoMetadataExtractor::ExtractDictionary(AVDictionary* metadata) {
+void AudioVideoMetadataExtractor::ExtractDictionary(
+    AVDictionary* metadata, TagDictionary* raw_tags) {
   if (!metadata)
     return;
 
   AVDictionaryEntry* tag = NULL;
   while ((tag = av_dict_get(metadata, "", tag, AV_DICT_IGNORE_SUFFIX))) {
-    if (raw_tags_.find(tag->key) == raw_tags_.end())
-      raw_tags_[tag->key] = tag->value;
+    if (raw_tags->find(tag->key) == raw_tags->end())
+      (*raw_tags)[tag->key] = tag->value;
 
     if (ExtractInt(tag, "rotate", &rotation_)) continue;
     if (ExtractString(tag, "album", &album_)) continue;
diff --git a/media/base/audio_video_metadata_extractor.h b/media/base/audio_video_metadata_extractor.h
index afea412..7590515 100644
--- a/media/base/audio_video_metadata_extractor.h
+++ b/media/base/audio_video_metadata_extractor.h
@@ -7,6 +7,7 @@
 
 #include <map>
 #include <string>
+#include <vector>
 
 #include "base/basictypes.h"
 #include "media/base/media_export.h"
@@ -21,6 +22,17 @@
 // files. It also provides the format name.
 class MEDIA_EXPORT AudioVideoMetadataExtractor {
  public:
+  typedef std::map<std::string, std::string> TagDictionary;
+
+  struct StreamInfo {
+    StreamInfo();
+    ~StreamInfo();
+    std::string type;
+    TagDictionary tags;
+  };
+
+  typedef std::vector<StreamInfo> StreamInfoVector;
+
   AudioVideoMetadataExtractor();
   ~AudioVideoMetadataExtractor();
 
@@ -52,10 +64,11 @@
   const std::string& title() const;
   int track() const;
 
-  const std::map<std::string, std::string>& raw_tags() const;
+  // First element is the container. Subsequent elements are the child streams.
+  const StreamInfoVector& stream_infos() const;
 
  private:
-  void ExtractDictionary(AVDictionary* metadata);
+  void ExtractDictionary(AVDictionary* metadata, TagDictionary* raw_tags);
 
   bool extracted_;
 
@@ -77,7 +90,7 @@
   std::string title_;
   int track_;
 
-  std::map<std::string, std::string> raw_tags_;
+  StreamInfoVector stream_infos_;
 
   DISALLOW_COPY_AND_ASSIGN(AudioVideoMetadataExtractor);
 };
diff --git a/media/base/audio_video_metadata_extractor_unittest.cc b/media/base/audio_video_metadata_extractor_unittest.cc
index 1aba4ef..d7b3bbf 100644
--- a/media/base/audio_video_metadata_extractor_unittest.cc
+++ b/media/base/audio_video_metadata_extractor_unittest.cc
@@ -46,8 +46,15 @@
       GetExtractor("9ch.ogg", true, 0, -1, -1);
   EXPECT_EQ("Processed by SoX", extractor->comment());
 
-  EXPECT_EQ(1u, extractor->raw_tags().size());
-  EXPECT_EQ("Processed by SoX", extractor->raw_tags().find("COMMENT")->second);
+  EXPECT_EQ("ogg", extractor->stream_infos()[0].type);
+  EXPECT_EQ(2u, extractor->stream_infos().size());
+
+  EXPECT_EQ(0u, extractor->stream_infos()[0].tags.size());
+
+  EXPECT_EQ(1u, extractor->stream_infos()[1].tags.size());
+  EXPECT_EQ("vorbis", extractor->stream_infos()[1].type);
+  EXPECT_EQ("Processed by SoX",
+            extractor->stream_infos()[1].tags.find("COMMENT")->second);
 }
 
 TEST(AudioVideoMetadataExtractorTest, AudioWAV) {
@@ -56,9 +63,17 @@
   EXPECT_EQ("Lavf54.37.100", extractor->encoder());
   EXPECT_EQ("Amadeus Pro", extractor->encoded_by());
 
-  EXPECT_EQ(2u, extractor->raw_tags().size());
-  EXPECT_EQ("Lavf54.37.100", extractor->raw_tags().find("encoder")->second);
-  EXPECT_EQ("Amadeus Pro", extractor->raw_tags().find("encoded_by")->second);
+  EXPECT_EQ("wav", extractor->stream_infos()[0].type);
+  EXPECT_EQ(2u, extractor->stream_infos().size());
+
+  EXPECT_EQ(2u, extractor->stream_infos()[0].tags.size());
+  EXPECT_EQ("Lavf54.37.100",
+            extractor->stream_infos()[0].tags.find("encoder")->second);
+  EXPECT_EQ("Amadeus Pro",
+            extractor->stream_infos()[0].tags.find("encoded_by")->second);
+
+  EXPECT_EQ("pcm_u8", extractor->stream_infos()[1].type);
+  EXPECT_EQ(0u, extractor->stream_infos()[1].tags.size());
 }
 
 TEST(AudioVideoMetadataExtractorTest, VideoWebM) {
@@ -66,8 +81,29 @@
       GetExtractor("bear-320x240-multitrack.webm", true, 2, 320, 240);
   EXPECT_EQ("Lavf53.9.0", extractor->encoder());
 
-  EXPECT_EQ(1u, extractor->raw_tags().size());
-  EXPECT_EQ("Lavf53.9.0", extractor->raw_tags().find("ENCODER")->second);
+  EXPECT_EQ(6u, extractor->stream_infos().size());
+
+  EXPECT_EQ("matroska,webm", extractor->stream_infos()[0].type);
+  EXPECT_EQ(1u, extractor->stream_infos()[0].tags.size());
+  EXPECT_EQ("Lavf53.9.0",
+            extractor->stream_infos()[0].tags.find("ENCODER")->second);
+
+  EXPECT_EQ("vp8", extractor->stream_infos()[1].type);
+  EXPECT_EQ(0u, extractor->stream_infos()[1].tags.size());
+
+  EXPECT_EQ("vorbis", extractor->stream_infos()[2].type);
+  EXPECT_EQ(0u, extractor->stream_infos()[2].tags.size());
+
+  EXPECT_EQ("subrip", extractor->stream_infos()[3].type);
+  EXPECT_EQ(0u, extractor->stream_infos()[3].tags.size());
+
+  EXPECT_EQ("theora", extractor->stream_infos()[4].type);
+  EXPECT_EQ(0u, extractor->stream_infos()[4].tags.size());
+
+  EXPECT_EQ("pcm_s16le", extractor->stream_infos()[5].type);
+  EXPECT_EQ(1u, extractor->stream_infos()[5].tags.size());
+  EXPECT_EQ("Lavc52.32.0",
+            extractor->stream_infos()[5].tags.find("ENCODER")->second);
 }
 
 #if defined(USE_PROPRIETARY_CODECS)
@@ -77,16 +113,37 @@
 
   EXPECT_EQ(90, extractor->rotation());
 
-  EXPECT_EQ(7u, extractor->raw_tags().size());
-  EXPECT_EQ("isom3gp4",
-            extractor->raw_tags().find("compatible_brands")->second);
+  EXPECT_EQ(3u, extractor->stream_infos().size());
+
+  EXPECT_EQ("mov,mp4,m4a,3gp,3g2,mj2", extractor->stream_infos()[0].type);
+  EXPECT_EQ(4u, extractor->stream_infos()[0].tags.size());
+  EXPECT_EQ(
+      "isom3gp4",
+      extractor->stream_infos()[0].tags.find("compatible_brands")->second);
+  EXPECT_EQ(
+      "2014-02-11 00:39:25",
+      extractor->stream_infos()[0].tags.find("creation_time")->second);
+  EXPECT_EQ("isom",
+            extractor->stream_infos()[0].tags.find("major_brand")->second);
+  EXPECT_EQ("0",
+            extractor->stream_infos()[0].tags.find("minor_version")->second);
+
+  EXPECT_EQ("h264", extractor->stream_infos()[1].type);
+  EXPECT_EQ(4u, extractor->stream_infos()[1].tags.size());
   EXPECT_EQ("2014-02-11 00:39:25",
-            extractor->raw_tags().find("creation_time")->second);
-  EXPECT_EQ("VideoHandle", extractor->raw_tags().find("handler_name")->second);
-  EXPECT_EQ("eng", extractor->raw_tags().find("language")->second);
-  EXPECT_EQ("isom", extractor->raw_tags().find("major_brand")->second);
-  EXPECT_EQ("0", extractor->raw_tags().find("minor_version")->second);
-  EXPECT_EQ("90", extractor->raw_tags().find("rotate")->second);
+            extractor->stream_infos()[1].tags.find("creation_time")->second);
+  EXPECT_EQ("VideoHandle",
+            extractor->stream_infos()[1].tags.find("handler_name")->second);
+  EXPECT_EQ("eng", extractor->stream_infos()[1].tags.find("language")->second);
+  EXPECT_EQ("90", extractor->stream_infos()[1].tags.find("rotate")->second);
+
+  EXPECT_EQ("aac", extractor->stream_infos()[2].type);
+  EXPECT_EQ(3u, extractor->stream_infos()[2].tags.size());
+  EXPECT_EQ("2014-02-11 00:39:25",
+            extractor->stream_infos()[2].tags.find("creation_time")->second);
+  EXPECT_EQ("SoundHandle",
+            extractor->stream_infos()[2].tags.find("handler_name")->second);
+  EXPECT_EQ("eng", extractor->stream_infos()[2].tags.find("language")->second);
 }
 
 TEST(AudioVideoMetadataExtractorTest, AudioMP3) {
@@ -101,14 +158,29 @@
   EXPECT_EQ("1997", extractor->date());
   EXPECT_EQ("Lavf54.4.100", extractor->encoder());
 
-  EXPECT_EQ(7u, extractor->raw_tags().size());
-  EXPECT_EQ("OK Computer", extractor->raw_tags().find("album")->second);
-  EXPECT_EQ("Radiohead", extractor->raw_tags().find("artist")->second);
-  EXPECT_EQ("1997", extractor->raw_tags().find("date")->second);
-  EXPECT_EQ("Lavf54.4.100", extractor->raw_tags().find("encoder")->second);
-  EXPECT_EQ("Alternative", extractor->raw_tags().find("genre")->second);
-  EXPECT_EQ("Airbag", extractor->raw_tags().find("title")->second);
-  EXPECT_EQ("1", extractor->raw_tags().find("track")->second);
+  EXPECT_EQ(3u, extractor->stream_infos().size());
+
+  EXPECT_EQ("mp3", extractor->stream_infos()[0].type);
+  EXPECT_EQ(7u, extractor->stream_infos()[0].tags.size());
+  EXPECT_EQ("OK Computer",
+            extractor->stream_infos()[0].tags.find("album")->second);
+  EXPECT_EQ("Radiohead",
+            extractor->stream_infos()[0].tags.find("artist")->second);
+  EXPECT_EQ("1997", extractor->stream_infos()[0].tags.find("date")->second);
+  EXPECT_EQ("Lavf54.4.100",
+            extractor->stream_infos()[0].tags.find("encoder")->second);
+  EXPECT_EQ("Alternative",
+            extractor->stream_infos()[0].tags.find("genre")->second);
+  EXPECT_EQ("Airbag", extractor->stream_infos()[0].tags.find("title")->second);
+  EXPECT_EQ("1", extractor->stream_infos()[0].tags.find("track")->second);
+
+  EXPECT_EQ("mp3", extractor->stream_infos()[1].type);
+  EXPECT_EQ(0u, extractor->stream_infos()[1].tags.size());
+
+  EXPECT_EQ("png", extractor->stream_infos()[2].type);
+  EXPECT_EQ(2u, extractor->stream_infos()[2].tags.size());
+  EXPECT_EQ("Other", extractor->stream_infos()[2].tags.find("comment")->second);
+  EXPECT_EQ("", extractor->stream_infos()[2].tags.find("title")->second);
 }
 #endif
 
diff --git a/media/base/demuxer.h b/media/base/demuxer.h
index 31c9e29..581bc00 100644
--- a/media/base/demuxer.h
+++ b/media/base/demuxer.h
@@ -87,6 +87,11 @@
   // Returns the starting time for the media file.
   virtual base::TimeDelta GetStartTime() const = 0;
 
+  // Returns Time represented by presentation timestamp 0.
+  // If the timstamps are not associated with a Time, then
+  // a null Time is returned.
+  virtual base::Time GetTimelineOffset() const = 0;
+
  private:
   DISALLOW_COPY_AND_ASSIGN(Demuxer);
 };
diff --git a/media/base/mock_filters.h b/media/base/mock_filters.h
index f25d973..c289010 100644
--- a/media/base/mock_filters.h
+++ b/media/base/mock_filters.h
@@ -39,6 +39,7 @@
   MOCK_METHOD0(OnAudioRendererDisabled, void());
   MOCK_METHOD1(GetStream, DemuxerStream*(DemuxerStream::Type));
   MOCK_CONST_METHOD0(GetStartTime, base::TimeDelta());
+  MOCK_CONST_METHOD0(GetTimelineOffset, base::Time());
 
  private:
   DISALLOW_COPY_AND_ASSIGN(MockDemuxer);
diff --git a/media/base/pipeline.cc b/media/base/pipeline.cc
index 94fa2b5..ab35e4a 100644
--- a/media/base/pipeline.cc
+++ b/media/base/pipeline.cc
@@ -415,6 +415,7 @@
         PipelineMetadata metadata;
         metadata.has_audio = audio_renderer_;
         metadata.has_video = video_renderer_;
+        metadata.timeline_offset = demuxer_->GetTimelineOffset();
         DemuxerStream* stream = demuxer_->GetStream(DemuxerStream::VIDEO);
         if (stream)
           metadata.natural_size = stream->video_decoder_config().natural_size();
diff --git a/media/base/pipeline.h b/media/base/pipeline.h
index 7241587..f19bcd1 100644
--- a/media/base/pipeline.h
+++ b/media/base/pipeline.h
@@ -41,6 +41,7 @@
   bool has_audio;
   bool has_video;
   gfx::Size natural_size;
+  base::Time timeline_offset;
 };
 
 typedef base::Callback<void(PipelineMetadata)> PipelineMetadataCB;
diff --git a/media/base/pipeline_unittest.cc b/media/base/pipeline_unittest.cc
index b402a6b..c266b4e 100644
--- a/media/base/pipeline_unittest.cc
+++ b/media/base/pipeline_unittest.cc
@@ -108,6 +108,9 @@
 
     EXPECT_CALL(*demuxer_, GetStartTime())
         .WillRepeatedly(Return(base::TimeDelta()));
+
+    EXPECT_CALL(*demuxer_, GetTimelineOffset())
+        .WillRepeatedly(Return(base::Time()));
   }
 
   virtual ~PipelineTest() {
@@ -659,7 +662,7 @@
   streams.push_back(audio_stream());
   streams.push_back(video_stream());
 
-  // Replace the clock so we can simulate wallclock time advancing w/o using
+  // Replace the clock so we can simulate wall clock time advancing w/o using
   // Sleep().
   pipeline_->SetClockForTesting(new Clock(&test_tick_clock_));
 
diff --git a/media/base/stream_parser.h b/media/base/stream_parser.h
index c5410e3..8123b4f 100644
--- a/media/base/stream_parser.h
+++ b/media/base/stream_parser.h
@@ -55,10 +55,15 @@
   //                   occurred.
   // Second parameter - Indicates the stream duration. Only contains a valid
   //                    value if the first parameter is true.
-  // Third parameters - Indicates that timestampOffset should be updated based
+  // Third parameter - Indicates the Time associated with
+  //                   presentation timestamp 0 if such a mapping exists in
+  //                   the bytestream. If no mapping exists this parameter
+  //                   contains null Time object. Only contains a valid
+  //                   value if the first parameter is true.
+  // Fourth parameters - Indicates that timestampOffset should be updated based
   //                    on the earliest end timestamp (audio or video) provided
   //                    during each NewBuffersCB.
-  typedef base::Callback<void(bool, base::TimeDelta, bool)> InitCB;
+  typedef base::Callback<void(bool, base::TimeDelta, base::Time, bool)> InitCB;
 
   // Indicates when new stream configurations have been parsed.
   // First parameter - The new audio configuration. If the config is not valid
diff --git a/media/base/stream_parser_buffer.h b/media/base/stream_parser_buffer.h
index 0dbb1b3..9c077c1 100644
--- a/media/base/stream_parser_buffer.h
+++ b/media/base/stream_parser_buffer.h
@@ -54,8 +54,9 @@
   // have any  EOS buffers and must not have any nested splice buffers.
   //
   // |pre_splice_buffers| will be deep copied and each copy's splice_timestamp()
-  // will be set to this buffer's splice_timestamp().  A copy of |this| will be
-  // added to the end of |splice_buffers_|.
+  // will be set to this buffer's splice_timestamp().  A copy of |this|, with a
+  // splice_timestamp() of kNoTimestamp(), will be added to the end of
+  // |splice_buffers_|.
   //
   // See the Audio Splice Frame Algorithm in the MSE specification for details.
   typedef StreamParser::BufferQueue BufferQueue;
diff --git a/media/cast/audio_receiver/audio_receiver.gypi b/media/cast/audio_receiver/audio_receiver.gypi
deleted file mode 100644
index 048227c..0000000
--- a/media/cast/audio_receiver/audio_receiver.gypi
+++ /dev/null
@@ -1,31 +0,0 @@
-# Copyright 2013 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.
-
-{
-  'targets': [
-    {
-      'target_name': 'cast_audio_receiver',
-      'type': 'static_library',
-      'include_dirs': [
-        '<(DEPTH)/',
-        '<(DEPTH)/third_party/',
-        '<(DEPTH)/third_party/webrtc/',
-      ],
-      'sources': [
-        'audio_decoder.h',
-        'audio_decoder.cc',
-        'audio_receiver.h',
-        'audio_receiver.cc',
-      ], # source
-      'dependencies': [
-        '<(DEPTH)/media/media.gyp:media',
-        '<(DEPTH)/media/media.gyp:shared_memory_support',
-        '<(DEPTH)/media/cast/transport/utility/utility.gyp:transport_utility',
-        '<(DEPTH)/media/cast/rtcp/rtcp.gyp:cast_rtcp',
-        '<(DEPTH)/media/cast/rtp_receiver/rtp_receiver.gyp:cast_rtp_receiver',
-        '<(DEPTH)/third_party/opus/opus.gyp:opus',
-      ],
-    },
-  ],
-}
diff --git a/media/cast/audio_sender/audio_encoder.cc b/media/cast/audio_sender/audio_encoder.cc
index 6c336dc..6becdd5 100644
--- a/media/cast/audio_sender/audio_encoder.cc
+++ b/media/cast/audio_sender/audio_encoder.cc
@@ -39,7 +39,8 @@
     size_t frame_size) {
   cast_environment->Logging()->InsertEncodedFrameEvent(
       event_time, event_type, rtp_timestamp, frame_id,
-      static_cast<int>(frame_size), /* key_frame - unused */ false);
+      static_cast<int>(frame_size), /* key_frame - unused */ false,
+      /*target_bitrate - unused*/ 0);
 }
 
 }  // namespace
diff --git a/media/cast/audio_sender/audio_sender.gypi b/media/cast/audio_sender/audio_sender.gypi
deleted file mode 100644
index 4953140..0000000
--- a/media/cast/audio_sender/audio_sender.gypi
+++ /dev/null
@@ -1,31 +0,0 @@
-# Copyright 2013 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.
-
-{
-  'targets': [
-    {
-      'target_name': 'audio_sender',
-      'type': 'static_library',
-      'include_dirs': [
-        '<(DEPTH)/',
-        '<(DEPTH)/third_party/',
-      ],
-      'sources': [
-        'audio_encoder.h',
-        'audio_encoder.cc',
-        'audio_sender.h',
-        'audio_sender.cc',
-      ], # source
-      'dependencies': [
-        '<(DEPTH)/media/media.gyp:media',
-        '<(DEPTH)/media/media.gyp:shared_memory_support',
-        '<(DEPTH)/media/cast/rtcp/rtcp.gyp:cast_rtcp',
-        '<(DEPTH)/media/cast/transport/cast_transport.gyp:cast_transport',
-        '<(DEPTH)/third_party/opus/opus.gyp:opus',
-      ],
-    },
-  ],
-}
-
-
diff --git a/media/cast/audio_sender/audio_sender_unittest.cc b/media/cast/audio_sender/audio_sender_unittest.cc
index 80443cb..4e55c4f 100644
--- a/media/cast/audio_sender/audio_sender_unittest.cc
+++ b/media/cast/audio_sender/audio_sender_unittest.cc
@@ -28,8 +28,9 @@
  public:
   TestPacketSender() : number_of_rtp_packets_(0), number_of_rtcp_packets_(0) {}
 
-  virtual bool SendPacket(const Packet& packet) OVERRIDE {
-    if (Rtcp::IsRtcpPacket(&packet[0], packet.size())) {
+  virtual bool SendPacket(transport::PacketRef packet,
+                          const base::Closure& cb) OVERRIDE {
+    if (Rtcp::IsRtcpPacket(&packet->data[0], packet->data.size())) {
       ++number_of_rtcp_packets_;
     } else {
       ++number_of_rtp_packets_;
diff --git a/media/cast/cast.gyp b/media/cast/cast.gyp
index 401dbea..b50c5ee 100644
--- a/media/cast/cast.gyp
+++ b/media/cast/cast.gyp
@@ -7,143 +7,223 @@
     'include_tests%': 1,
     'chromium_code': 1,
   },
-  'targets': [
-  ],  # targets,
   'conditions': [
     ['include_tests==1', {
-      'targets': [
-        {
-          'target_name': 'cast_unittests',
-          'type': '<(gtest_target_type)',
-          'dependencies': [
-            'cast_config.gyp:cast_config',
-            'cast_receiver.gyp:cast_receiver',
-            'cast_sender.gyp:cast_sender',
-            'logging/logging.gyp:cast_log_analysis',
-            'logging/logging.gyp:cast_logging_proto_lib',
-            'logging/logging.gyp:sender_logging',
-            'test/utility/utility.gyp:cast_test_utility',
-            'transport/cast_transport.gyp:cast_transport',
-            '<(DEPTH)/base/base.gyp:test_support_base',
-            '<(DEPTH)/net/net.gyp:net',
-            '<(DEPTH)/testing/gmock.gyp:gmock',
-            '<(DEPTH)/testing/gtest.gyp:gtest',
-          ],
-          'include_dirs': [
-            '<(DEPTH)/',
-            '<(DEPTH)/third_party/',
-            '<(DEPTH)/third_party/webrtc/',
-          ],
-          'sources': [
-            '<(DEPTH)/media/base/run_all_unittests.cc',
-            'audio_receiver/audio_decoder_unittest.cc',
-            'audio_receiver/audio_receiver_unittest.cc',
-            'audio_sender/audio_encoder_unittest.cc',
-            'audio_sender/audio_sender_unittest.cc',
-            'congestion_control/congestion_control_unittest.cc',
-            'framer/cast_message_builder_unittest.cc',
-            'framer/frame_buffer_unittest.cc',
-            'framer/framer_unittest.cc',
-            'logging/encoding_event_subscriber_unittest.cc',
-            'logging/serialize_deserialize_test.cc',
-            'logging/logging_impl_unittest.cc',
-            'logging/logging_raw_unittest.cc',
-            'logging/simple_event_subscriber_unittest.cc',
-            'logging/stats_event_subscriber_unittest.cc',
-            'rtcp/mock_rtcp_receiver_feedback.cc',
-            'rtcp/mock_rtcp_receiver_feedback.h',
-            'rtcp/mock_rtcp_sender_feedback.cc',
-            'rtcp/mock_rtcp_sender_feedback.h',
-            'rtcp/rtcp_receiver_unittest.cc',
-            'rtcp/rtcp_sender_unittest.cc',
-            'rtcp/rtcp_unittest.cc',
-            'rtcp/receiver_rtcp_event_subscriber_unittest.cc',
-            'rtcp/sender_rtcp_event_subscriber_unittest.cc',
-            'rtp_receiver/rtp_receiver_defines.h',
-            'rtp_receiver/mock_rtp_payload_feedback.cc',
-            'rtp_receiver/mock_rtp_payload_feedback.h',
-            'rtp_receiver/receiver_stats_unittest.cc',
-            'rtp_receiver/rtp_parser/test/rtp_packet_builder.cc',
-            'rtp_receiver/rtp_parser/rtp_parser_unittest.cc',
-            'test/end2end_unittest.cc',
-            'test/fake_single_thread_task_runner.cc',
-            'test/fake_single_thread_task_runner.h',
-            'test/fake_video_encode_accelerator.cc',
-            'test/fake_video_encode_accelerator.h',
-            'test/utility/audio_utility_unittest.cc',
-            'test/utility/barcode_unittest.cc',
-            'transport/cast_transport_sender_impl_unittest.cc',
-            'transport/pacing/mock_paced_packet_sender.cc',
-            'transport/pacing/mock_paced_packet_sender.h',
-            'transport/pacing/paced_sender_unittest.cc',
-            'transport/rtp_sender/packet_storage/packet_storage_unittest.cc',
-            'transport/rtp_sender/rtp_packetizer/rtp_packetizer_unittest.cc',
-            'transport/rtp_sender/rtp_packetizer/test/rtp_header_parser.cc',
-            'transport/rtp_sender/rtp_packetizer/test/rtp_header_parser.h',
-            'transport/transport/udp_transport_unittest.cc',
-            'video_receiver/video_decoder_unittest.cc',
-            'video_receiver/video_receiver_unittest.cc',
-            'video_sender/external_video_encoder_unittest.cc',
-            'video_sender/video_encoder_impl_unittest.cc',
-            'video_sender/video_sender_unittest.cc',
-          ], # source
-        },
-        {
-          'target_name': 'cast_sender_app',
-          'type': 'executable',
-          'include_dirs': [
-            '<(DEPTH)/',
-          ],
-          'dependencies': [
-            'cast_config.gyp:cast_config',
-            'logging/logging.gyp:sender_logging',
-            '<(DEPTH)/ui/gfx/gfx.gyp:gfx',
-            '<(DEPTH)/net/net.gyp:net_test_support',
-            '<(DEPTH)/media/cast/cast_sender.gyp:*',
-            '<(DEPTH)/media/media.gyp:media',
-            '<(DEPTH)/testing/gtest.gyp:gtest',
-            '<(DEPTH)/third_party/opus/opus.gyp:opus',
-            '<(DEPTH)/media/cast/transport/cast_transport.gyp:cast_transport',
-            '<(DEPTH)/media/cast/test/utility/utility.gyp:cast_test_utility',
-          ],
-          'sources': [
-            '<(DEPTH)/media/cast/test/sender.cc',
-          ],
-        },
-        {
-          'target_name': 'cast_receiver_app',
-          'type': 'executable',
-          'include_dirs': [
-            '<(DEPTH)/',
-          ],
-          'dependencies': [
-            'cast_config.gyp:cast_config',
-            '<(DEPTH)/ui/gfx/gfx.gyp:gfx',
-            '<(DEPTH)/net/net.gyp:net_test_support',
-            '<(DEPTH)/media/cast/cast_receiver.gyp:*',
-            '<(DEPTH)/media/media.gyp:media',
-            '<(DEPTH)/testing/gtest.gyp:gtest',
-            '<(DEPTH)/media/cast/transport/cast_transport.gyp:cast_transport',
-            '<(DEPTH)/media/cast/test/utility/utility.gyp:cast_test_utility',
-            '<(DEPTH)/third_party/libyuv/libyuv.gyp:libyuv',
-          ],
-          'sources': [
-            '<(DEPTH)/media/cast/test/receiver.cc',
-          ],
-          'conditions': [
-            ['OS == "linux" and use_x11==1', {
-              'dependencies': [
-                '<(DEPTH)/build/linux/system.gyp:x11',
-                '<(DEPTH)/build/linux/system.gyp:xext',
-              ],
-              'sources': [
-                '<(DEPTH)/media/cast/test/linux_output_window.cc',
-                '<(DEPTH)/media/cast/test/linux_output_window.h',
-              ],
-          }],
-          ],
-        },
-      ],  # targets
-    }], # include_tests
+      'includes': [ 'cast_testing.gypi' ]
+    }],
+  ],
+  'targets': [
+    {
+      'target_name': 'cast_base',
+      'type': 'static_library',
+      'include_dirs': [
+        '<(DEPTH)/',
+      ],
+      'dependencies': [
+        'cast_logging_proto',
+        '<(DEPTH)/base/base.gyp:base',
+        '<(DEPTH)/net/net.gyp:net',
+      ],
+      'export_dependent_settings': [
+        'cast_logging_proto',
+      ],
+      'sources': [
+        'cast_config.cc',
+        'cast_config.h',
+        'cast_defines.h',
+        'cast_environment.cc',
+        'cast_environment.h',
+        'logging/encoding_event_subscriber.cc',
+        'logging/encoding_event_subscriber.h',
+        'logging/log_deserializer.cc',
+        'logging/log_deserializer.h',
+        'logging/log_serializer.cc',
+        'logging/log_serializer.h',
+        'logging/logging_defines.cc',
+        'logging/logging_defines.h',
+        'logging/logging_impl.cc',
+        'logging/logging_impl.h',
+        'logging/logging_raw.cc',
+        'logging/logging_raw.h',
+        'logging/raw_event_subscriber.h',
+        'logging/simple_event_subscriber.cc',
+        'logging/simple_event_subscriber.h',
+        'logging/stats_event_subscriber.cc',
+        'logging/stats_event_subscriber.h',
+        'logging/stats_util.cc',
+        'logging/stats_util.h',
+        'transport/cast_transport_config.cc',
+        'transport/cast_transport_config.h',
+        'transport/cast_transport_defines.h',
+        'transport/cast_transport_sender.h',
+      ], # source
+    },
+    {
+      'target_name': 'cast_logging_proto',
+      'type': 'static_library',
+      'include_dirs': [
+        '<(DEPTH)/',
+      ],
+      'sources': [
+        'logging/proto/proto_utils.cc',
+        'logging/proto/raw_events.proto',
+      ],
+      'variables': {
+        'proto_in_dir': 'logging/proto',
+        'proto_out_dir': 'media/cast/logging/proto',
+      },
+      'includes': ['../../build/protoc.gypi'],
+    },
+    {
+      'target_name': 'cast_receiver',
+      'type': 'static_library',
+      'include_dirs': [
+        '<(DEPTH)/',
+# TODO(miu): Remove WebRTC dependency (RtpHeader), and then these two deps: 
+        '<(DEPTH)/third_party/',
+        '<(DEPTH)/third_party/webrtc/',
+      ],
+      'dependencies': [
+        'cast_base',
+        'cast_rtcp',
+        'cast_transport',
+        '<(DEPTH)/base/base.gyp:base',
+        '<(DEPTH)/media/media.gyp:media',
+        '<(DEPTH)/media/media.gyp:shared_memory_support',
+        '<(DEPTH)/third_party/opus/opus.gyp:opus',
+        '<(DEPTH)/third_party/libvpx/libvpx.gyp:libvpx',
+        '<(DEPTH)/ui/gfx/gfx.gyp:gfx_geometry',
+      ],
+      'sources': [
+        'audio_receiver/audio_decoder.h',
+        'audio_receiver/audio_decoder.cc',
+        'audio_receiver/audio_receiver.h',
+        'audio_receiver/audio_receiver.cc',
+        'cast_receiver.h',
+        'cast_receiver_impl.cc',
+        'cast_receiver_impl.h',
+        'framer/cast_message_builder.cc',
+        'framer/cast_message_builder.h',
+        'framer/frame_buffer.cc',
+        'framer/frame_buffer.h',
+        'framer/frame_id_map.cc',
+        'framer/frame_id_map.h',
+        'framer/framer.cc',
+        'framer/framer.h',
+        'rtp_receiver/receiver_stats.cc',
+        'rtp_receiver/receiver_stats.h',
+        'rtp_receiver/rtp_receiver.cc',
+        'rtp_receiver/rtp_receiver.h',
+        'rtp_receiver/rtp_parser/rtp_parser.cc',
+        'rtp_receiver/rtp_parser/rtp_parser.h',
+        'video_receiver/video_decoder.h',
+        'video_receiver/video_decoder.cc',
+        'video_receiver/video_receiver.h',
+        'video_receiver/video_receiver.cc',
+      ], # source
+    },
+    {
+      'target_name': 'cast_rtcp',
+      'type': 'static_library',
+      'include_dirs': [
+        '<(DEPTH)/',
+      ],
+      'dependencies': [
+        'cast_base',
+        'cast_transport',
+        '<(DEPTH)/base/base.gyp:base',
+        '<(DEPTH)/net/net.gyp:net',
+      ],
+      'sources': [
+        'rtcp/rtcp_defines.cc',
+        'rtcp/rtcp_defines.h',
+        'rtcp/rtcp.h',
+        'rtcp/rtcp.cc',
+        'rtcp/rtcp_receiver.cc',
+        'rtcp/rtcp_receiver.h',
+        'rtcp/rtcp_sender.cc',
+        'rtcp/rtcp_sender.h',
+        'rtcp/rtcp_utility.cc',
+        'rtcp/rtcp_utility.h',
+        'rtcp/sender_rtcp_event_subscriber.cc',
+        'rtcp/sender_rtcp_event_subscriber.h',
+        'rtcp/receiver_rtcp_event_subscriber.cc',
+        'rtcp/receiver_rtcp_event_subscriber.cc',
+      ], # source
+    },
+    {
+      'target_name': 'cast_sender',
+      'type': 'static_library',
+      'include_dirs': [
+        '<(DEPTH)/',
+      ],
+      'dependencies': [
+        'cast_base',
+        'cast_rtcp',
+        'cast_transport',
+        '<(DEPTH)/media/media.gyp:media',
+        '<(DEPTH)/media/media.gyp:shared_memory_support',
+        '<(DEPTH)/third_party/opus/opus.gyp:opus',
+        '<(DEPTH)/third_party/libvpx/libvpx.gyp:libvpx',
+      ], # dependencies
+      'sources': [
+        'audio_sender/audio_encoder.h',
+        'audio_sender/audio_encoder.cc',
+        'audio_sender/audio_sender.h',
+        'audio_sender/audio_sender.cc',
+        'cast_sender.h',
+        'cast_sender_impl.cc',
+        'cast_sender_impl.h',
+        'congestion_control/congestion_control.h',
+        'congestion_control/congestion_control.cc',
+        'video_sender/codecs/vp8/vp8_encoder.cc',
+        'video_sender/codecs/vp8/vp8_encoder.h',
+        'video_sender/external_video_encoder.h',
+        'video_sender/external_video_encoder.cc',
+        'video_sender/fake_software_video_encoder.h',
+        'video_sender/fake_software_video_encoder.cc',
+        'video_sender/software_video_encoder.h',
+        'video_sender/video_encoder.h',
+        'video_sender/video_encoder_impl.h',
+        'video_sender/video_encoder_impl.cc',
+        'video_sender/video_sender.h',
+        'video_sender/video_sender.cc',
+      ], # source
+    },
+    {
+      'target_name': 'cast_transport',
+      'type': 'static_library',
+      'include_dirs': [
+        '<(DEPTH)/',
+      ],
+      'dependencies': [
+        'cast_base',
+        '<(DEPTH)/base/base.gyp:base',
+        '<(DEPTH)/crypto/crypto.gyp:crypto',
+        '<(DEPTH)/net/net.gyp:net',
+      ],
+      'sources': [
+        'transport/cast_transport_sender_impl.cc',
+        'transport/cast_transport_sender_impl.h',
+        'transport/pacing/paced_sender.cc',
+        'transport/pacing/paced_sender.h',
+        'transport/rtcp/rtcp_builder.cc',
+        'transport/rtcp/rtcp_builder.h',
+        'transport/rtp_sender/packet_storage/packet_storage.cc',
+        'transport/rtp_sender/packet_storage/packet_storage.h',
+        'transport/rtp_sender/rtp_packetizer/rtp_packetizer.cc',
+        'transport/rtp_sender/rtp_packetizer/rtp_packetizer.h',
+        'transport/rtp_sender/rtp_sender.cc',
+        'transport/rtp_sender/rtp_sender.h',
+        'transport/transport/udp_transport.cc',
+        'transport/transport/udp_transport.h',
+        'transport/transport_audio_sender.cc',
+        'transport/transport_audio_sender.h',
+        'transport/transport_video_sender.cc',
+        'transport/transport_video_sender.h',
+        'transport/utility/transport_encryption_handler.cc',
+        'transport/utility/transport_encryption_handler.h',
+      ], # source
+    },
   ],
 }
diff --git a/media/cast/cast_config.gyp b/media/cast/cast_config.gyp
deleted file mode 100644
index 21d83c9..0000000
--- a/media/cast/cast_config.gyp
+++ /dev/null
@@ -1,29 +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.
-
-{
-  'variables': {
-    'include_tests%': 1,
-    'chromium_code': 1,
-  },
-  'targets': [
-    {
-      'target_name': 'cast_config',
-      'type': 'static_library',
-      'include_dirs': [
-        '<(DEPTH)/',
-      ],
-      'dependencies': [
-        '<(DEPTH)/base/base.gyp:base',
-      ],
-      'sources': [
-        'cast_config.cc',
-        'cast_config.h',
-        'cast_defines.h',
-        'cast_environment.cc',
-        'cast_environment.h',
-      ], # source
-    },
-  ],
-}
diff --git a/media/cast/cast_receiver.gyp b/media/cast/cast_receiver.gyp
deleted file mode 100644
index 087b219..0000000
--- a/media/cast/cast_receiver.gyp
+++ /dev/null
@@ -1,35 +0,0 @@
-# Copyright 2013 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.
-
-{
-  'variables': {
-    'chromium_code': 1,
-  },
-  'includes': [
-     'audio_receiver/audio_receiver.gypi',
-     'video_receiver/video_receiver.gypi',
-  ],
-  'targets': [
-    {
-      'target_name': 'cast_receiver',
-      'type': 'static_library',
-      'include_dirs': [
-        '<(DEPTH)/',
-        '<(DEPTH)/third_party/',
-        '<(DEPTH)/third_party/webrtc/',
-      ],
-      'sources': [
-        'cast_receiver.h',
-        'cast_receiver_impl.cc',
-        'cast_receiver_impl.h',
-      ], # source
-      'dependencies': [
-        '<(DEPTH)/media/cast/transport/cast_transport.gyp:cast_transport',
-        'cast_audio_receiver',
-        'cast_video_receiver',
-        'rtp_receiver/rtp_receiver.gyp:cast_rtp_receiver',
-      ],
-    },
-  ],
-}
diff --git a/media/cast/cast_sender.gyp b/media/cast/cast_sender.gyp
deleted file mode 100644
index bc4e825..0000000
--- a/media/cast/cast_sender.gyp
+++ /dev/null
@@ -1,35 +0,0 @@
-# Copyright 2013 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.
-
-{
-  'variables': {
-    'chromium_code': 1,
-  },
-  'includes': [
-    'audio_sender/audio_sender.gypi',
-    'congestion_control/congestion_control.gypi',
-    'video_sender/video_sender.gypi',
-  ],
-  'targets': [
-    {
-      'target_name': 'cast_sender',
-      'type': 'static_library',
-      'include_dirs': [
-        '<(DEPTH)/',
-      ],
-      'sources': [
-        'cast_sender.h',
-        'cast_sender_impl.cc',
-        'cast_sender_impl.h',
-      ], # source
-      'dependencies': [
-        '<(DEPTH)/media/cast/transport/cast_transport.gyp:cast_transport',
-        'audio_sender',
-        'congestion_control',
-        'rtcp/rtcp.gyp:cast_rtcp',
-        'video_sender',
-      ], # dependencies
-    },
-  ],
-}
diff --git a/media/cast/cast_testing.gypi b/media/cast/cast_testing.gypi
new file mode 100644
index 0000000..bcf6676
--- /dev/null
+++ b/media/cast/cast_testing.gypi
@@ -0,0 +1,231 @@
+# 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.
+
+{
+  'variables': {
+    'include_cast_utility_apps%': 0,
+  },
+  'targets': [
+    {
+      'target_name': 'cast_test_utility',
+      'type': 'static_library',
+      'include_dirs': [
+         '<(DEPTH)/',
+      ],
+      'dependencies': [
+        'cast_receiver',
+        'cast_transport',
+        '<(DEPTH)/testing/gtest.gyp:gtest',
+        '<(DEPTH)/third_party/libyuv/libyuv.gyp:libyuv',
+        '<(DEPTH)/ui/gfx/gfx.gyp:gfx_geometry',
+      ],
+      'sources': [
+        'test/fake_single_thread_task_runner.cc',
+        'test/fake_single_thread_task_runner.h',
+        'test/utility/audio_utility.cc',
+        'test/utility/audio_utility.h',
+        'test/utility/barcode.cc',
+        'test/utility/barcode.h',
+        'test/utility/default_config.cc',
+        'test/utility/default_config.h',
+        'test/utility/in_process_receiver.cc',
+        'test/utility/in_process_receiver.h',
+        'test/utility/input_builder.cc',
+        'test/utility/input_builder.h',
+        'test/utility/standalone_cast_environment.cc',
+        'test/utility/standalone_cast_environment.h',
+        'test/utility/video_utility.cc',
+        'test/utility/video_utility.h',
+        'test/utility/udp_proxy.cc',
+        'test/utility/udp_proxy.h',
+      ], # source
+    },
+    {
+      'target_name': 'cast_unittests',
+      'type': '<(gtest_target_type)',
+      'include_dirs': [
+        '<(DEPTH)/',
+# TODO(miu): Remove WebRTC dependency (RtpHeader), and then these two deps:
+        '<(DEPTH)/third_party/',
+        '<(DEPTH)/third_party/webrtc/',
+      ],
+      'dependencies': [
+        'cast_base',
+        'cast_receiver',
+        'cast_rtcp',
+        'cast_sender',
+        'cast_test_utility',
+        'cast_transport',
+        '<(DEPTH)/base/base.gyp:test_support_base',
+        '<(DEPTH)/net/net.gyp:net',
+        '<(DEPTH)/testing/gmock.gyp:gmock',
+        '<(DEPTH)/testing/gtest.gyp:gtest',
+      ],
+      'sources': [
+        '<(DEPTH)/media/base/run_all_unittests.cc',
+        'audio_receiver/audio_decoder_unittest.cc',
+        'audio_receiver/audio_receiver_unittest.cc',
+        'audio_sender/audio_encoder_unittest.cc',
+        'audio_sender/audio_sender_unittest.cc',
+        'congestion_control/congestion_control_unittest.cc',
+        'framer/cast_message_builder_unittest.cc',
+        'framer/frame_buffer_unittest.cc',
+        'framer/framer_unittest.cc',
+        'logging/encoding_event_subscriber_unittest.cc',
+        'logging/serialize_deserialize_test.cc',
+        'logging/logging_impl_unittest.cc',
+        'logging/logging_raw_unittest.cc',
+        'logging/simple_event_subscriber_unittest.cc',
+        'logging/stats_event_subscriber_unittest.cc',
+        'rtcp/mock_rtcp_receiver_feedback.cc',
+        'rtcp/mock_rtcp_receiver_feedback.h',
+        'rtcp/mock_rtcp_sender_feedback.cc',
+        'rtcp/mock_rtcp_sender_feedback.h',
+        'rtcp/rtcp_receiver_unittest.cc',
+        'rtcp/rtcp_sender_unittest.cc',
+        'rtcp/rtcp_unittest.cc',
+        'rtcp/receiver_rtcp_event_subscriber_unittest.cc',
+        'rtcp/sender_rtcp_event_subscriber_unittest.cc',
+# TODO(miu): The following two are test utility modules.  Rename/move the files.
+        'rtcp/test_rtcp_packet_builder.cc',
+        'rtcp/test_rtcp_packet_builder.h',
+        'rtp_receiver/rtp_receiver_defines.h',
+        'rtp_receiver/mock_rtp_payload_feedback.cc',
+        'rtp_receiver/mock_rtp_payload_feedback.h',
+        'rtp_receiver/receiver_stats_unittest.cc',
+        'rtp_receiver/rtp_parser/test/rtp_packet_builder.cc',
+        'rtp_receiver/rtp_parser/rtp_parser_unittest.cc',
+        'test/end2end_unittest.cc',
+        'test/fake_single_thread_task_runner.cc',
+        'test/fake_single_thread_task_runner.h',
+        'test/fake_video_encode_accelerator.cc',
+        'test/fake_video_encode_accelerator.h',
+        'test/utility/audio_utility_unittest.cc',
+        'test/utility/barcode_unittest.cc',
+        'transport/cast_transport_sender_impl_unittest.cc',
+        'transport/pacing/mock_paced_packet_sender.cc',
+        'transport/pacing/mock_paced_packet_sender.h',
+        'transport/pacing/paced_sender_unittest.cc',
+        'transport/rtp_sender/packet_storage/packet_storage_unittest.cc',
+        'transport/rtp_sender/rtp_packetizer/rtp_packetizer_unittest.cc',
+        'transport/rtp_sender/rtp_packetizer/test/rtp_header_parser.cc',
+        'transport/rtp_sender/rtp_packetizer/test/rtp_header_parser.h',
+        'transport/transport/udp_transport_unittest.cc',
+        'video_receiver/video_decoder_unittest.cc',
+        'video_receiver/video_receiver_unittest.cc',
+        'video_sender/external_video_encoder_unittest.cc',
+        'video_sender/video_encoder_impl_unittest.cc',
+        'video_sender/video_sender_unittest.cc',
+      ], # source
+    },
+  ], # targets
+  'conditions': [
+    ['include_cast_utility_apps==1', {
+      'targets': [
+        {
+          'target_name': 'cast_receiver_app',
+          'type': 'executable',
+          'include_dirs': [
+            '<(DEPTH)/',
+          ],
+          'dependencies': [
+            'cast_base',
+            'cast_receiver',
+            'cast_test_utility',
+            'cast_transport',
+            '<(DEPTH)/net/net.gyp:net_test_support',
+            '<(DEPTH)/media/media.gyp:media',
+            '<(DEPTH)/testing/gtest.gyp:gtest',
+            '<(DEPTH)/third_party/libyuv/libyuv.gyp:libyuv',
+          ],
+          'sources': [
+            '<(DEPTH)/media/cast/test/receiver.cc',
+          ],
+          'conditions': [
+            ['OS == "linux" and use_x11==1', {
+              'dependencies': [
+                '<(DEPTH)/build/linux/system.gyp:x11',
+                '<(DEPTH)/build/linux/system.gyp:xext',
+              ],
+              'sources': [
+                '<(DEPTH)/media/cast/test/linux_output_window.cc',
+                '<(DEPTH)/media/cast/test/linux_output_window.h',
+                '<(DEPTH)/ui/gfx/gfx.gyp:gfx_geometry',
+              ],
+            }],
+          ],
+        },
+        {
+          'target_name': 'cast_sender_app',
+          'type': 'executable',
+          'include_dirs': [
+            '<(DEPTH)/',
+          ],
+          'dependencies': [
+            'cast_base',
+            'cast_sender',
+            'cast_test_utility',
+            'cast_transport',
+            '<(DEPTH)/net/net.gyp:net_test_support',
+            '<(DEPTH)/media/media.gyp:media',
+            '<(DEPTH)/testing/gtest.gyp:gtest',
+            '<(DEPTH)/third_party/ffmpeg/ffmpeg.gyp:ffmpeg',
+            '<(DEPTH)/third_party/opus/opus.gyp:opus',
+            '<(DEPTH)/ui/gfx/gfx.gyp:gfx_geometry',
+          ],
+          'sources': [
+            '<(DEPTH)/media/cast/test/sender.cc',
+          ],
+        },
+        {
+          'target_name': 'generate_barcode_video',
+          'type': 'executable',
+          'include_dirs': [
+            '<(DEPTH)/',
+          ],
+          'dependencies': [
+            'cast_test_utility',
+            '<(DEPTH)/base/base.gyp:base',
+            '<(DEPTH)/media/media.gyp:media',
+          ],
+          'sources': [
+            'test/utility/generate_barcode_video.cc',
+          ],
+        },
+        {
+          'target_name': 'generate_timecode_audio',
+          'type': 'executable',
+          'include_dirs': [
+            '<(DEPTH)/',
+          ],
+          'dependencies': [
+            'cast_base',
+            'cast_test_utility',
+            'cast_transport',
+            '<(DEPTH)/base/base.gyp:base',
+            '<(DEPTH)/media/media.gyp:media',
+          ],
+          'sources': [
+            'test/utility/generate_timecode_audio.cc',
+          ],
+        },
+        {
+          'target_name': 'udp_proxy',
+          'type': 'executable',
+          'include_dirs': [
+            '<(DEPTH)/',
+          ],
+          'dependencies': [
+            'cast_test_utility',
+            '<(DEPTH)/base/base.gyp:base',
+            '<(DEPTH)/media/media.gyp:media',
+          ],
+          'sources': [
+            'test/utility/udp_proxy_main.cc',
+          ],
+        },
+      ], # targets
+    }],
+  ], # conditions
+}
diff --git a/media/cast/congestion_control/congestion_control.gypi b/media/cast/congestion_control/congestion_control.gypi
deleted file mode 100644
index 20a57ca..0000000
--- a/media/cast/congestion_control/congestion_control.gypi
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright 2013 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.
-
-{
-  'targets': [
-    {
-      'target_name': 'congestion_control',
-      'type': 'static_library',
-      'include_dirs': [
-        '<(DEPTH)/',
-      ],
-      'sources': [
-        'congestion_control.h',
-        'congestion_control.cc',
-      ], # source
-      'dependencies': [
-        '<(DEPTH)/base/base.gyp:base',
-      ],
-  },
-  ],
-}
-
diff --git a/media/cast/framer/framer.gyp b/media/cast/framer/framer.gyp
deleted file mode 100644
index e72ac84..0000000
--- a/media/cast/framer/framer.gyp
+++ /dev/null
@@ -1,31 +0,0 @@
-# Copyright 2013 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.
-
-{
-  'variables': {
-    'chromium_code': 1,
-  },
-  'targets': [
-    {
-      'target_name': 'cast_framer',
-      'type': 'static_library',
-      'include_dirs': [
-        '<(DEPTH)/',
-        '<(DEPTH)/media/cast/transport/cast_transport.gyp:cast_transport',
-        '<(DEPTH)/third_party/',
-        '<(DEPTH)/third_party/webrtc',
-      ],
-      'sources': [
-        'cast_message_builder.cc',
-        'cast_message_builder.h',
-        'frame_buffer.cc',
-        'frame_buffer.h',
-        'frame_id_map.cc',
-        'frame_id_map.h',
-        'framer.cc',
-        'framer.h',
-      ],
-    },
-  ], # targets
-}
diff --git a/media/cast/logging/encoding_event_subscriber.cc b/media/cast/logging/encoding_event_subscriber.cc
index e50a74c..2804988 100644
--- a/media/cast/logging/encoding_event_subscriber.cc
+++ b/media/cast/logging/encoding_event_subscriber.cc
@@ -60,6 +60,7 @@
     } else if (frame_event.type == kVideoFrameEncoded) {
       event_proto->set_encoded_frame_size(frame_event.size);
       event_proto->set_key_frame(frame_event.key_frame);
+      event_proto->set_target_bitrate(frame_event.target_bitrate);
     } else if (frame_event.type == kAudioPlayoutDelay ||
                frame_event.type == kVideoRenderDelay) {
       event_proto->set_delay_millis(frame_event.delay_delta.InMilliseconds());
@@ -123,12 +124,6 @@
   DCHECK(packet_event_map_.size() <= max_frames_);
 }
 
-void EncodingEventSubscriber::OnReceiveGenericEvent(
-    const GenericEvent& generic_event) {
-  DCHECK(thread_checker_.CalledOnValidThread());
-  // Do nothing, there are no generic events we are interested in.
-}
-
 void EncodingEventSubscriber::GetEventsAndReset(LogMetadata* metadata,
                                                 FrameEventMap* frame_events,
                                                 PacketEventMap* packet_events) {
@@ -138,6 +133,8 @@
   metadata->set_first_rtp_timestamp(first_rtp_timestamp_);
   metadata->set_num_frame_events(frame_event_map_.size());
   metadata->set_num_packet_events(packet_event_map_.size());
+  metadata->set_reference_timestamp_ms_at_unix_epoch(
+      (base::TimeTicks::UnixEpoch() - base::TimeTicks()).InMilliseconds());
   frame_events->swap(frame_event_map_);
   packet_events->swap(packet_event_map_);
   Reset();
diff --git a/media/cast/logging/encoding_event_subscriber.h b/media/cast/logging/encoding_event_subscriber.h
index ba9969b..e134f50 100644
--- a/media/cast/logging/encoding_event_subscriber.h
+++ b/media/cast/logging/encoding_event_subscriber.h
@@ -43,8 +43,6 @@
   // RawReventSubscriber implementations.
   virtual void OnReceiveFrameEvent(const FrameEvent& frame_event) OVERRIDE;
   virtual void OnReceivePacketEvent(const PacketEvent& packet_event) OVERRIDE;
-  virtual void OnReceiveGenericEvent(const GenericEvent& generic_event)
-      OVERRIDE;
 
   // Assigns frame events and packet events received so far to |frame_events|
   // and |packet_events| and resets the internal state.
diff --git a/media/cast/logging/encoding_event_subscriber_unittest.cc b/media/cast/logging/encoding_event_subscriber_unittest.cc
index d00489a..4e30bbc 100644
--- a/media/cast/logging/encoding_event_subscriber_unittest.cc
+++ b/media/cast/logging/encoding_event_subscriber_unittest.cc
@@ -218,9 +218,10 @@
   RtpTimestamp rtp_timestamp = 100;
   int size = 123;
   bool key_frame = true;
+  int target_bitrate = 1024;
   cast_environment_->Logging()->InsertEncodedFrameEvent(
       now, kVideoFrameEncoded, rtp_timestamp,
-      /*frame_id*/ 0, size, key_frame);
+      /*frame_id*/ 0, size, key_frame, target_bitrate);
 
   GetEventsAndReset();
 
@@ -243,6 +244,7 @@
   EXPECT_EQ(0, event->delay_millis());
   EXPECT_TRUE(event->has_key_frame());
   EXPECT_EQ(key_frame, event->key_frame());
+  EXPECT_EQ(target_bitrate, event->target_bitrate());
 }
 
 TEST_F(EncodingEventSubscriberTest, MultipleFrameEvents) {
@@ -258,7 +260,8 @@
   base::TimeTicks now2(testing_clock_->NowTicks());
   cast_environment_->Logging()->InsertEncodedFrameEvent(
       now2, kAudioFrameEncoded, rtp_timestamp2,
-      /*frame_id*/ 0, /*size*/ 123, /* key_frame - unused */ false );
+      /*frame_id*/ 0, /*size*/ 123, /* key_frame - unused */ false,
+      /*target_bitrate - unused*/ 0);
 
   testing_clock_->Advance(base::TimeDelta::FromMilliseconds(20));
   base::TimeTicks now3(testing_clock_->NowTicks());
diff --git a/media/cast/logging/log_deserializer.cc b/media/cast/logging/log_deserializer.cc
index dc1d78d..997daa9 100644
--- a/media/cast/logging/log_deserializer.cc
+++ b/media/cast/logging/log_deserializer.cc
@@ -19,36 +19,28 @@
 
 namespace {
 
-// Use 30MB of temp buffer to hold uncompressed data if |compress| is true.
-const int kMaxUncompressedBytes = 30 * 1000 * 1000;
+// Use 60MB of temp buffer to hold uncompressed data if |compress| is true.
+// This is double the size of temp buffer used during compression (30MB)
+// since the there are two streams in the blob.
+// Keep in sync with media/cast/logging/log_serializer.cc.
+const int kMaxUncompressedBytes = 60 * 1000 * 1000;
 
-bool DoDeserializeEvents(char* data,
-                         int data_bytes,
-                         LogMetadata* metadata,
-                         FrameEventMap* frame_events,
-                         PacketEventMap* packet_events) {
-  base::BigEndianReader reader(data, data_bytes);
-
-  uint16 proto_size;
-  if (!reader.ReadU16(&proto_size))
-    return false;
-  if (!metadata->ParseFromArray(reader.ptr(), proto_size))
-    return false;
-  if (!reader.Skip(proto_size))
-    return false;
+bool PopulateDeserializedLog(base::BigEndianReader* reader,
+                             media::cast::DeserializedLog* log) {
   FrameEventMap frame_event_map;
   PacketEventMap packet_event_map;
 
-  int num_frame_events = metadata->num_frame_events();
+  int num_frame_events = log->metadata.num_frame_events();
   RtpTimestamp relative_rtp_timestamp = 0;
+  uint16 proto_size = 0;
   for (int i = 0; i < num_frame_events; i++) {
-    if (!reader.ReadU16(&proto_size))
+    if (!reader->ReadU16(&proto_size))
       return false;
 
     linked_ptr<AggregatedFrameEvent> frame_event(new AggregatedFrameEvent);
-    if (!frame_event->ParseFromArray(reader.ptr(), proto_size))
+    if (!frame_event->ParseFromArray(reader->ptr(), proto_size))
       return false;
-    if (!reader.Skip(proto_size))
+    if (!reader->Skip(proto_size))
       return false;
 
     // During serialization the RTP timestamp in proto is relative to previous
@@ -67,18 +59,18 @@
     }
   }
 
-  frame_events->swap(frame_event_map);
+  log->frame_events.swap(frame_event_map);
 
-  int num_packet_events = metadata->num_packet_events();
+  int num_packet_events = log->metadata.num_packet_events();
   relative_rtp_timestamp = 0;
   for (int i = 0; i < num_packet_events; i++) {
-    if (!reader.ReadU16(&proto_size))
+    if (!reader->ReadU16(&proto_size))
       return false;
 
     linked_ptr<AggregatedPacketEvent> packet_event(new AggregatedPacketEvent);
-    if (!packet_event->ParseFromArray(reader.ptr(), proto_size))
+    if (!packet_event->ParseFromArray(reader->ptr(), proto_size))
       return false;
-    if (!reader.Skip(proto_size))
+    if (!reader->Skip(proto_size))
       return false;
 
     packet_event->set_relative_rtp_timestamp(
@@ -94,59 +86,104 @@
     }
   }
 
-  packet_events->swap(packet_event_map);
+  log->packet_events.swap(packet_event_map);
 
   return true;
 }
 
-bool Uncompress(char* data,
+bool DoDeserializeEvents(const char* data,
+                         int data_bytes,
+                         media::cast::DeserializedLog* audio_log,
+                         media::cast::DeserializedLog* video_log) {
+  bool got_audio = false;
+  bool got_video = false;
+  base::BigEndianReader reader(data, data_bytes);
+
+  LogMetadata metadata;
+  uint16 proto_size = 0;
+  while (reader.remaining() > 0) {
+    if (!reader.ReadU16(&proto_size))
+      return false;
+    if (!metadata.ParseFromArray(reader.ptr(), proto_size))
+      return false;
+    reader.Skip(proto_size);
+
+    if (metadata.is_audio()) {
+      if (got_audio) {
+        VLOG(1) << "Got audio data twice.";
+        return false;
+      }
+
+      got_audio = true;
+      audio_log->metadata = metadata;
+      if (!PopulateDeserializedLog(&reader, audio_log))
+        return false;
+    } else {
+      if (got_video) {
+        VLOG(1) << "Got duplicate video log.";
+        return false;
+      }
+
+      got_video = true;
+      video_log->metadata = metadata;
+      if (!PopulateDeserializedLog(&reader, video_log))
+        return false;
+    }
+  }
+  return true;
+}
+
+bool Uncompress(const char* data,
                 int data_bytes,
                 int max_uncompressed_bytes,
                 char* uncompressed,
                 int* uncompressed_bytes) {
   z_stream stream = {0};
-  // 16 is added to read in gzip format.
-  int result = inflateInit2(&stream, MAX_WBITS + 16);
-  DCHECK_EQ(Z_OK, result);
 
-  stream.next_in = reinterpret_cast<uint8*>(data);
+  stream.next_in = reinterpret_cast<uint8*>(const_cast<char*>(data));
   stream.avail_in = data_bytes;
   stream.next_out = reinterpret_cast<uint8*>(uncompressed);
   stream.avail_out = max_uncompressed_bytes;
 
-  result = inflate(&stream, Z_FINISH);
-  bool success = (result == Z_STREAM_END);
-  if (!success)
-    DVLOG(2) << "inflate() failed. Result: " << result;
+  bool success = false;
+  while (stream.avail_in > 0 && stream.avail_out > 0) {
+    // 16 is added to read in gzip format.
+    int result = inflateInit2(&stream, MAX_WBITS + 16);
+    DCHECK_EQ(Z_OK, result);
 
-  result = inflateEnd(&stream);
-  DCHECK(result == Z_OK);
+    result = inflate(&stream, Z_FINISH);
+    success = (result == Z_STREAM_END);
+    if (!success) {
+      DVLOG(2) << "inflate() failed. Result: " << result;
+      break;
+    }
 
-  if (success)
+    result = inflateEnd(&stream);
+    DCHECK(result == Z_OK);
+  }
+
+  if (stream.avail_in == 0) {
+    success = true;
     *uncompressed_bytes = max_uncompressed_bytes - stream.avail_out;
-
+  }
   return success;
 }
+
 }  // namespace
 
 namespace media {
 namespace cast {
 
-bool DeserializeEvents(char* data,
+bool DeserializeEvents(const char* data,
                        int data_bytes,
                        bool compressed,
-                       LogMetadata* log_metadata,
-                       FrameEventMap* frame_events,
-                       PacketEventMap* packet_events) {
-  DCHECK(data);
+                       DeserializedLog* audio_log,
+                       DeserializedLog* video_log) {
   DCHECK_GT(data_bytes, 0);
-  DCHECK(log_metadata);
-  DCHECK(frame_events);
-  DCHECK(packet_events);
 
   if (compressed) {
     scoped_ptr<char[]> uncompressed(new char[kMaxUncompressedBytes]);
-    int uncompressed_bytes;
+    int uncompressed_bytes = 0;
     if (!Uncompress(data,
                     data_bytes,
                     kMaxUncompressedBytes,
@@ -154,16 +191,15 @@
                     &uncompressed_bytes))
       return false;
 
-    return DoDeserializeEvents(uncompressed.get(),
-                               uncompressed_bytes,
-                               log_metadata,
-                               frame_events,
-                               packet_events);
-  } else {
     return DoDeserializeEvents(
-        data, data_bytes, log_metadata, frame_events, packet_events);
+        uncompressed.get(), uncompressed_bytes, audio_log, video_log);
+  } else {
+    return DoDeserializeEvents(data, data_bytes, audio_log, video_log);
   }
 }
 
+DeserializedLog::DeserializedLog() {}
+DeserializedLog::~DeserializedLog() {}
+
 }  // namespace cast
 }  // namespace media
diff --git a/media/cast/logging/log_deserializer.h b/media/cast/logging/log_deserializer.h
index 04064c8..6087eec 100644
--- a/media/cast/logging/log_deserializer.h
+++ b/media/cast/logging/log_deserializer.h
@@ -13,20 +13,28 @@
 namespace media {
 namespace cast {
 
+// Represents deserialized raw event logs for a particular stream.
+struct DeserializedLog {
+  DeserializedLog();
+  ~DeserializedLog();
+  proto::LogMetadata metadata;
+  FrameEventMap frame_events;
+  PacketEventMap packet_events;
+};
+
 // This function takes the output of LogSerializer and deserializes it into
 // its original format. Returns true if deserialization is successful. All
 // output arguments are valid if this function returns true.
 // |data|: Serialized event logs with length |data_bytes|.
 // |compressed|: true if |data| is compressed in gzip format.
 // |log_metadata|: This will be populated with deserialized LogMetadata proto.
-// |frame_events|: This will be populated with deserialized frame events.
-// |packet_events|: This will be populated with deserialized packet events.
-bool DeserializeEvents(char* data,
+// |audio_log|, |video_log|: These will be populated with deserialized
+// log data for audio and video streams, respectively.
+bool DeserializeEvents(const char* data,
                        int data_bytes,
                        bool compressed,
-                       media::cast::proto::LogMetadata* log_metadata,
-                       FrameEventMap* frame_events,
-                       PacketEventMap* packet_events);
+                       DeserializedLog* audio_log,
+                       DeserializedLog* video_log);
 
 }  // namespace cast
 }  // namespace media
diff --git a/media/cast/logging/logging.gyp b/media/cast/logging/logging.gyp
deleted file mode 100644
index 29a96d8..0000000
--- a/media/cast/logging/logging.gyp
+++ /dev/null
@@ -1,92 +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.
-{
-  'variables': {
-    'chromium_code': 1,
-  },
-  'targets': [
-    {
-      'target_name': 'cast_common_logging',
-      'type': 'static_library',
-      'include_dirs': [
-        '<(DEPTH)/',
-      ],
-      'dependencies': [
-        'cast_logging_proto_lib',
-        '<(DEPTH)/base/base.gyp:base',
-      ],
-      'export_dependent_settings': [
-        'cast_logging_proto_lib',
-      ],
-      'sources': [
-        'logging_defines.cc',
-        'logging_defines.h',
-        'logging_impl.cc',
-        'logging_impl.h',
-        'logging_raw.cc',
-        'logging_raw.h',
-        'raw_event_subscriber.h',
-        'simple_event_subscriber.cc',
-        'simple_event_subscriber.h',
-        'stats_event_subscriber.cc',
-        'stats_event_subscriber.h',
-        'stats_util.cc',
-        'stats_util.h',
-      ], # source
-    },
-    {
-      'target_name': 'sender_logging',
-      'type': 'static_library',
-      'include_dirs': [
-        '<(DEPTH)/',
-      ],
-      'dependencies': [
-        'cast_common_logging',
-        'cast_logging_proto_lib',
-        '<(DEPTH)/base/base.gyp:base',
-      ],
-      'export_dependent_settings': [
-        'cast_logging_proto_lib',
-      ],
-      'sources': [
-        'encoding_event_subscriber.cc',
-        'encoding_event_subscriber.h',
-        'log_serializer.cc',
-        'log_serializer.h',
-      ], # source
-    },
-    {
-      'target_name': 'cast_logging_proto_lib',
-      'type': 'static_library',
-      'sources': [
-        'proto/proto_utils.cc',
-        'proto/raw_events.proto',
-      ],
-      'variables': {
-        'proto_in_dir': 'proto',
-        'proto_out_dir': 'media/cast/logging/proto',
-      },
-      'includes': ['../../../build/protoc.gypi'],
-    },
-    {
-      'target_name': 'cast_log_analysis',
-      'type': 'static_library',
-      'include_dirs': [
-        '<(DEPTH)/',
-      ],
-      'dependencies': [
-        'cast_logging_proto_lib',
-        'sender_logging',
-        '<(DEPTH)/base/base.gyp:base',
-      ],
-      'export_dependent_settings': [
-        'cast_logging_proto_lib',
-      ],
-      'sources': [
-        'log_deserializer.cc',
-        'log_deserializer.h',
-      ], # source
-    },
-  ],
-}
diff --git a/media/cast/logging/logging_defines.cc b/media/cast/logging/logging_defines.cc
index c00c420..894b059 100644
--- a/media/cast/logging/logging_defines.cc
+++ b/media/cast/logging/logging_defines.cc
@@ -92,7 +92,7 @@
 
 FrameEvent::FrameEvent()
     : rtp_timestamp(0u), frame_id(kFrameIdUnknown), size(0u), type(kUnknown),
-      key_frame(false) {}
+      key_frame(false), target_bitrate(0) {}
 FrameEvent::~FrameEvent() {}
 
 PacketEvent::PacketEvent()
@@ -104,9 +104,6 @@
       type(kUnknown) {}
 PacketEvent::~PacketEvent() {}
 
-GenericEvent::GenericEvent() : type(kUnknown), value(0) {}
-GenericEvent::~GenericEvent() {}
-
 FrameLogStats::FrameLogStats()
     : event_counter(0),
       sum_size(0) {}
@@ -117,12 +114,5 @@
       sum_size(0) {}
 PacketLogStats::~PacketLogStats() {}
 
-GenericLogStats::GenericLogStats()
-    : event_counter(0),
-      sum(0),
-      sum_squared(0),
-      min(0),
-      max(0) {}
-GenericLogStats::~GenericLogStats() {}
 }  // namespace cast
 }  // namespace media
diff --git a/media/cast/logging/logging_defines.h b/media/cast/logging/logging_defines.h
index 2b7d2d3..9b9ed51 100644
--- a/media/cast/logging/logging_defines.h
+++ b/media/cast/logging/logging_defines.h
@@ -19,15 +19,14 @@
 typedef uint32 RtpTimestamp;
 
 enum CastLoggingEvent {
-  // Generic events.
   kUnknown,
+  // Generic events. These are no longer used.
   kRttMs,
   kPacketLoss,
   kJitterMs,
-  kVideoAckReceived,
-  kRembBitrate,
-  // TODO(imcheng): k{Audio,Video}AckSent may need to be FrameEvents
-  // (crbug.com/339590)
+  kVideoAckReceived,  // Sender side frame event.
+  kRembBitrate,  // Generic event. No longer used.
+  // Receiver side frame events.
   kAudioAckSent,
   kVideoAckSent,
   // Audio sender.
@@ -78,6 +77,7 @@
 
   // Time of event logged.
   base::TimeTicks timestamp;
+
   CastLoggingEvent type;
 
   // Render / playout delay. Only set for kAudioPlayoutDelay and
@@ -86,6 +86,10 @@
 
   // Whether the frame is a key frame. Only set for kVideoFrameEncoded event.
   bool key_frame;
+
+  // The requested target bitrate of the encoder at the time the frame is
+  // encoded. Only set for kVideoFrameEncoded event.
+  int target_bitrate;
 };
 
 struct PacketEvent {
@@ -103,26 +107,6 @@
   CastLoggingEvent type;
 };
 
-struct GenericEvent {
-  GenericEvent();
-  ~GenericEvent();
-
-  CastLoggingEvent type;
-
-  // Depending on |type|, |value| can have different meanings:
-  //  kRttMs - RTT in milliseconds
-  //  kPacketLoss - Fraction of packet loss, denominated in 256
-  //  kJitterMs - Jitter in milliseconds
-  //  kVideoAckReceived - Frame ID
-  //  kRembBitrate - Receiver Estimated Maximum Bitrate
-  //  kAudioAckSent - Frame ID
-  //  kVideoAckSent - Frame ID
-  int value;
-
-  // Time of event logged.
-  base::TimeTicks timestamp;
-};
-
 // Generic statistics given the raw data. More specific data (e.g. frame rate
 // and bit rate) can be computed given the basic metrics.
 // Some of the metrics will only be set when applicable, e.g. delay and size.
@@ -147,22 +131,8 @@
   size_t sum_size;
 };
 
-struct GenericLogStats {
-  GenericLogStats();
-  ~GenericLogStats();
-  base::TimeTicks first_event_time;
-  base::TimeTicks last_event_time;
-  int event_counter;
-  int sum;
-  uint64 sum_squared;
-  int min;
-  int max;
-};
-
-
 typedef std::map<CastLoggingEvent, FrameLogStats> FrameStatsMap;
 typedef std::map<CastLoggingEvent, PacketLogStats> PacketStatsMap;
-typedef std::map<CastLoggingEvent, GenericLogStats> GenericStatsMap;
 
 }  // namespace cast
 }  // namespace media
diff --git a/media/cast/logging/logging_impl.cc b/media/cast/logging/logging_impl.cc
index 03d6c47..7d975e2 100644
--- a/media/cast/logging/logging_impl.cc
+++ b/media/cast/logging/logging_impl.cc
@@ -29,10 +29,11 @@
                                           CastLoggingEvent event,
                                           uint32 rtp_timestamp,
                                           uint32 frame_id, int frame_size,
-                                          bool key_frame) {
+                                          bool key_frame,
+                                          int target_bitrate) {
   DCHECK(thread_checker_.CalledOnValidThread());
   raw_.InsertEncodedFrameEvent(time_of_event, event, rtp_timestamp, frame_id,
-                               frame_size, key_frame);
+                               frame_size, key_frame, target_bitrate);
 }
 
 void LoggingImpl::InsertFrameEventWithDelay(
@@ -76,7 +77,7 @@
   DCHECK(thread_checker_.CalledOnValidThread());
   for (PacketList::const_iterator it = packets.begin(); it != packets.end();
        ++it) {
-    InsertSinglePacketEvent(time_of_event, event, *it);
+    InsertSinglePacketEvent(time_of_event, event, (*it)->data);
   }
 }
 
@@ -90,12 +91,6 @@
                          packet_id, max_packet_id, size);
 }
 
-void LoggingImpl::InsertGenericEvent(const base::TimeTicks& time_of_event,
-                                     CastLoggingEvent event, int value) {
-  DCHECK(thread_checker_.CalledOnValidThread());
-  raw_.InsertGenericEvent(time_of_event, event, value);
-}
-
 void LoggingImpl::AddRawEventSubscriber(RawEventSubscriber* subscriber) {
   DCHECK(thread_checker_.CalledOnValidThread());
   raw_.AddSubscriber(subscriber);
diff --git a/media/cast/logging/logging_impl.h b/media/cast/logging/logging_impl.h
index fbbfa4e..2efef55 100644
--- a/media/cast/logging/logging_impl.h
+++ b/media/cast/logging/logging_impl.h
@@ -31,7 +31,8 @@
 
   void InsertEncodedFrameEvent(const base::TimeTicks& time_of_event,
                                CastLoggingEvent event, uint32 rtp_timestamp,
-                               uint32 frame_id, int frame_size, bool key_frame);
+                               uint32 frame_id, int frame_size, bool key_frame,
+                               int target_bitrate);
 
   void InsertFrameEventWithDelay(const base::TimeTicks& time_of_event,
                                  CastLoggingEvent event, uint32 rtp_timestamp,
@@ -49,10 +50,6 @@
                          uint32 frame_id, uint16 packet_id,
                          uint16 max_packet_id, size_t size);
 
-  void InsertGenericEvent(const base::TimeTicks& time_of_event,
-                          CastLoggingEvent event, int value);
-
-
   // Delegates to |LoggingRaw::AddRawEventSubscriber()|.
   void AddRawEventSubscriber(RawEventSubscriber* subscriber);
 
diff --git a/media/cast/logging/logging_impl_unittest.cc b/media/cast/logging/logging_impl_unittest.cc
index 44212e0..9cb7171 100644
--- a/media/cast/logging/logging_impl_unittest.cc
+++ b/media/cast/logging/logging_impl_unittest.cc
@@ -78,13 +78,14 @@
   uint32 rtp_timestamp = 0;
   uint32 frame_id = 0;
   size_t sum_size = 0;
+  int target_bitrate = 1234;
   do {
     int size = kBaseFrameSizeBytes +
         base::RandInt(-kRandomSizeInterval, kRandomSizeInterval);
     sum_size += static_cast<size_t>(size);
     logging_.InsertEncodedFrameEvent(testing_clock_.NowTicks(),
                                      kVideoFrameEncoded, rtp_timestamp,
-                                     frame_id, size, true);
+                                     frame_id, size, true, target_bitrate);
     testing_clock_.Advance(base::TimeDelta::FromMilliseconds(kFrameIntervalMs));
     rtp_timestamp += kFrameIntervalMs * 90;
     ++frame_id;
@@ -137,7 +138,7 @@
     if (frame_id % 2) {
       logging_.InsertEncodedFrameEvent(testing_clock_.NowTicks(),
                                        kAudioFrameEncoded, rtp_timestamp,
-                                       frame_id, 1500, true);
+                                       frame_id, 1500, true, 0);
     } else if (frame_id % 3) {
       logging_.InsertFrameEvent(testing_clock_.NowTicks(), kVideoFrameDecoded,
                                  rtp_timestamp, frame_id);
@@ -198,75 +199,6 @@
   EXPECT_EQ(num_packets, static_cast<int>(packet_events.size()));
 }
 
-TEST_F(LoggingImplTest, GenericLogging) {
-  // Insert multiple generic types.
-  const size_t kNumRuns = 20;//1000;
-  const int kBaseValue = 20;
-  int sum_value_rtt = 0;
-  int sum_value_pl = 0;
-  int sum_value_jitter = 0;
-  uint64 sumsq_value_rtt = 0;
-  uint64 sumsq_value_pl = 0;
-  uint64 sumsq_value_jitter = 0;
-  int min_value, max_value;
-
-  uint32 num_events = 0u;
-  uint32 expected_rtt_count = 0u;
-  uint32 expected_packet_loss_count = 0u;
-  uint32 expected_jitter_count = 0u;
-  for (size_t i = 0; i < kNumRuns; ++i) {
-    int value = kBaseValue + base::RandInt(-5, 5);
-    sum_value_rtt += value;
-    sumsq_value_rtt += value * value;
-    logging_.InsertGenericEvent(testing_clock_.NowTicks(), kRttMs, value);
-    ++num_events;
-    ++expected_rtt_count;
-    if (i % 2) {
-      logging_.InsertGenericEvent(testing_clock_.NowTicks(), kPacketLoss,
-                                   value);
-      ++num_events;
-      ++expected_packet_loss_count;
-      sum_value_pl += value;
-      sumsq_value_pl += value * value;
-    }
-    if (!(i % 4)) {
-      logging_.InsertGenericEvent(testing_clock_.NowTicks(), kJitterMs, value);
-      ++num_events;
-      ++expected_jitter_count;
-      sum_value_jitter += value;
-      sumsq_value_jitter += value * value;
-    }
-    if (i == 0) {
-      min_value = value;
-      max_value = value;
-    } else if (min_value > value) {
-      min_value = value;
-    } else if (max_value < value) {
-      max_value = value;
-    }
-  }
-
-  // Size of generic event vector = number of generic events logged.
-  std::vector<GenericEvent> generic_events;
-  event_subscriber_.GetGenericEventsAndReset(&generic_events);
-  EXPECT_EQ(num_events, generic_events.size());
-
-  // Verify each type of event has expected number of events logged.
-  uint32 rtt_event_count = 0u;
-  uint32 packet_loss_event_count = 0u;
-  uint32 jitter_event_count = 0u;
-  for (std::vector<GenericEvent>::iterator it = generic_events.begin();
-       it != generic_events.end(); ++it) {
-    if (it->type == kRttMs) {
-      ++rtt_event_count;
-    } else if (it->type == kPacketLoss) {
-      ++packet_loss_event_count;
-    } else if (it->type == kJitterMs) {
-      ++jitter_event_count;
-    }
-  }
-}
-
 TEST_F(LoggingImplTest, MultipleRawEventSubscribers) {
   SimpleEventSubscriber event_subscriber_2;
 
diff --git a/media/cast/logging/logging_raw.cc b/media/cast/logging/logging_raw.cc
index 8132bcd..272f734 100644
--- a/media/cast/logging/logging_raw.cc
+++ b/media/cast/logging/logging_raw.cc
@@ -20,15 +20,16 @@
                                   CastLoggingEvent event, uint32 rtp_timestamp,
                                   uint32 frame_id) {
   InsertBaseFrameEvent(time_of_event, event, frame_id, rtp_timestamp,
-                       base::TimeDelta(), 0, false);
+                       base::TimeDelta(), 0, false, 0);
 }
 
 void LoggingRaw::InsertEncodedFrameEvent(const base::TimeTicks& time_of_event,
                                          CastLoggingEvent event,
                                          uint32 rtp_timestamp, uint32 frame_id,
-                                         int size, bool key_frame) {
+                                         int size, bool key_frame,
+                                         int target_bitrate) {
   InsertBaseFrameEvent(time_of_event, event, frame_id, rtp_timestamp,
-                       base::TimeDelta(), size, key_frame);
+                       base::TimeDelta(), size, key_frame, target_bitrate);
 }
 
 void LoggingRaw::InsertFrameEventWithDelay(const base::TimeTicks& time_of_event,
@@ -37,14 +38,14 @@
                                            uint32 frame_id,
                                            base::TimeDelta delay) {
   InsertBaseFrameEvent(time_of_event, event, frame_id, rtp_timestamp, delay,
-                       0, false);
+                       0, false, 0);
 }
 
 void LoggingRaw::InsertBaseFrameEvent(const base::TimeTicks& time_of_event,
                                       CastLoggingEvent event, uint32 frame_id,
                                       uint32 rtp_timestamp,
                                       base::TimeDelta delay, int size,
-                                      bool key_frame) {
+                                      bool key_frame, int target_bitrate) {
   FrameEvent frame_event;
   frame_event.rtp_timestamp = rtp_timestamp;
   frame_event.frame_id = frame_id;
@@ -53,6 +54,7 @@
   frame_event.type = event;
   frame_event.delay_delta = delay;
   frame_event.key_frame = key_frame;
+  frame_event.target_bitrate = target_bitrate;
   for (std::vector<RawEventSubscriber*>::const_iterator it =
            subscribers_.begin();
        it != subscribers_.end(); ++it) {
@@ -79,19 +81,6 @@
   }
 }
 
-void LoggingRaw::InsertGenericEvent(const base::TimeTicks& time_of_event,
-                                    CastLoggingEvent event, int value) {
-  GenericEvent generic_event;
-  generic_event.type = event;
-  generic_event.value = value;
-  generic_event.timestamp = time_of_event;
-  for (std::vector<RawEventSubscriber*>::const_iterator it =
-           subscribers_.begin();
-       it != subscribers_.end(); ++it) {
-    (*it)->OnReceiveGenericEvent(generic_event);
-  }
-}
-
 void LoggingRaw::AddSubscriber(RawEventSubscriber* subscriber) {
   DCHECK(subscriber);
   DCHECK(std::find(subscribers_.begin(), subscribers_.end(), subscriber) ==
diff --git a/media/cast/logging/logging_raw.h b/media/cast/logging/logging_raw.h
index e4b8c9e..98c2bfe 100644
--- a/media/cast/logging/logging_raw.h
+++ b/media/cast/logging/logging_raw.h
@@ -24,7 +24,7 @@
   LoggingRaw();
   ~LoggingRaw();
 
-  // Inform of new event: three types of events: frame, packets and generic.
+  // Inform of new event: two types of events: frame and packet.
   // Frame events can be inserted with different parameters.
   void InsertFrameEvent(const base::TimeTicks& time_of_event,
                         CastLoggingEvent event, uint32 rtp_timestamp,
@@ -35,9 +35,12 @@
   // |size| - Size of encoded frame.
   // |key_frame| - Whether the frame is a key frame. This field is only
   //               applicable for kVideoFrameEncoded event.
+  // |target_bitrate| - The target bitrate of the encoder the time the frame
+  // was encoded. Only applicable for kVideoFrameEncoded event.
   void InsertEncodedFrameEvent(const base::TimeTicks& time_of_event,
                                 CastLoggingEvent event, uint32 rtp_timestamp,
-                                uint32 frame_id, int size, bool key_frame);
+                                uint32 frame_id, int size, bool key_frame,
+                                int target_bitrate);
 
   // Render/playout delay
   // This function is only applicable for the following frame events:
@@ -52,11 +55,6 @@
                          uint32 frame_id, uint16 packet_id,
                          uint16 max_packet_id, size_t size);
 
-  // Insert a generic event. The interpretation of |value| depends on
-  // type of |event|.
-  void InsertGenericEvent(const base::TimeTicks& time_of_event,
-                          CastLoggingEvent event, int value);
-
   // Adds |subscriber| so that it will start receiving events on main thread.
   // Note that this class does not own |subscriber|.
   // It is a no-op to add a subscriber that already exists.
@@ -72,7 +70,7 @@
   void InsertBaseFrameEvent(const base::TimeTicks& time_of_event,
                             CastLoggingEvent event, uint32 frame_id,
                             uint32 rtp_timestamp, base::TimeDelta delay,
-                            int size, bool key_frame);
+                            int size, bool key_frame, int target_bitrate);
 
   // List of subscriber pointers. This class does not own the subscribers.
   std::vector<RawEventSubscriber*> subscribers_;
diff --git a/media/cast/logging/logging_raw_unittest.cc b/media/cast/logging/logging_raw_unittest.cc
index 25b522a..0949cd9 100644
--- a/media/cast/logging/logging_raw_unittest.cc
+++ b/media/cast/logging/logging_raw_unittest.cc
@@ -22,7 +22,6 @@
   SimpleEventSubscriber event_subscriber_;
   std::vector<FrameEvent> frame_events_;
   std::vector<PacketEvent> packet_events_;
-  std::vector<GenericEvent> generic_events_;
 };
 
 TEST_F(LoggingRawTest, FrameEvent) {
@@ -35,9 +34,6 @@
   event_subscriber_.GetPacketEventsAndReset(&packet_events_);
   EXPECT_TRUE(packet_events_.empty());
 
-  event_subscriber_.GetGenericEventsAndReset(&generic_events_);
-  EXPECT_TRUE(generic_events_.empty());
-
   event_subscriber_.GetFrameEventsAndReset(&frame_events_);
   ASSERT_EQ(1u, frame_events_.size());
   EXPECT_EQ(rtp_timestamp, frame_events_[0].rtp_timestamp);
@@ -55,15 +51,13 @@
   base::TimeTicks timestamp = base::TimeTicks();
   int size = 1024;
   bool key_frame = true;
+  int target_bitrate = 4096;
   raw_.InsertEncodedFrameEvent(timestamp, event_type, rtp_timestamp, frame_id,
-                               size, key_frame);
+                               size, key_frame, target_bitrate);
 
   event_subscriber_.GetPacketEventsAndReset(&packet_events_);
   EXPECT_TRUE(packet_events_.empty());
 
-  event_subscriber_.GetGenericEventsAndReset(&generic_events_);
-  EXPECT_TRUE(generic_events_.empty());
-
   event_subscriber_.GetFrameEventsAndReset(&frame_events_);
   ASSERT_EQ(1u, frame_events_.size());
   EXPECT_EQ(rtp_timestamp, frame_events_[0].rtp_timestamp);
@@ -73,6 +67,7 @@
   EXPECT_EQ(event_type, frame_events_[0].type);
   EXPECT_EQ(base::TimeDelta(), frame_events_[0].delay_delta);
   EXPECT_EQ(key_frame, frame_events_[0].key_frame);
+  EXPECT_EQ(target_bitrate, frame_events_[0].target_bitrate);
 }
 
 TEST_F(LoggingRawTest, FrameEventWithDelay) {
@@ -87,9 +82,6 @@
   event_subscriber_.GetPacketEventsAndReset(&packet_events_);
   EXPECT_TRUE(packet_events_.empty());
 
-  event_subscriber_.GetGenericEventsAndReset(&generic_events_);
-  EXPECT_TRUE(generic_events_.empty());
-
   event_subscriber_.GetFrameEventsAndReset(&frame_events_);
   ASSERT_EQ(1u, frame_events_.size());
   EXPECT_EQ(rtp_timestamp, frame_events_[0].rtp_timestamp);
@@ -114,9 +106,6 @@
   event_subscriber_.GetFrameEventsAndReset(&frame_events_);
   EXPECT_TRUE(frame_events_.empty());
 
-  event_subscriber_.GetGenericEventsAndReset(&generic_events_);
-  EXPECT_TRUE(generic_events_.empty());
-
   event_subscriber_.GetPacketEventsAndReset(&packet_events_);
   ASSERT_EQ(1u, packet_events_.size());
   EXPECT_EQ(rtp_timestamp, packet_events_[0].rtp_timestamp);
@@ -128,25 +117,6 @@
   EXPECT_EQ(event_type, packet_events_[0].type);
 }
 
-TEST_F(LoggingRawTest, GenericEvent) {
-  CastLoggingEvent event_type = kRttMs;
-  base::TimeTicks timestamp = base::TimeTicks();
-  int value = 100;
-  raw_.InsertGenericEvent(timestamp, event_type, value);
-
-  event_subscriber_.GetFrameEventsAndReset(&frame_events_);
-  EXPECT_TRUE(frame_events_.empty());
-
-  event_subscriber_.GetPacketEventsAndReset(&packet_events_);
-  EXPECT_TRUE(packet_events_.empty());
-
-  event_subscriber_.GetGenericEventsAndReset(&generic_events_);
-  ASSERT_EQ(1u, generic_events_.size());
-  EXPECT_EQ(event_type, generic_events_[0].type);
-  EXPECT_EQ(value, generic_events_[0].value);
-  EXPECT_EQ(timestamp, generic_events_[0].timestamp);
-}
-
 TEST_F(LoggingRawTest, MultipleSubscribers) {
   SimpleEventSubscriber event_subscriber_2;
 
@@ -162,9 +132,6 @@
   event_subscriber_.GetPacketEventsAndReset(&packet_events_);
   EXPECT_TRUE(packet_events_.empty());
 
-  event_subscriber_.GetGenericEventsAndReset(&generic_events_);
-  EXPECT_TRUE(generic_events_.empty());
-
   event_subscriber_.GetFrameEventsAndReset(&frame_events_);
   ASSERT_EQ(1u, frame_events_.size());
   EXPECT_EQ(rtp_timestamp, frame_events_[0].rtp_timestamp);
@@ -177,9 +144,6 @@
   event_subscriber_2.GetPacketEventsAndReset(&packet_events_);
   EXPECT_TRUE(packet_events_.empty());
 
-  event_subscriber_2.GetGenericEventsAndReset(&generic_events_);
-  EXPECT_TRUE(generic_events_.empty());
-
   event_subscriber_2.GetFrameEventsAndReset(&frame_events_);
   ASSERT_EQ(1u, frame_events_.size());
   EXPECT_EQ(rtp_timestamp, frame_events_[0].rtp_timestamp);
diff --git a/media/cast/logging/proto/proto_utils.cc b/media/cast/logging/proto/proto_utils.cc
index 64088c2..3d5b0cd 100644
--- a/media/cast/logging/proto/proto_utils.cc
+++ b/media/cast/logging/proto/proto_utils.cc
@@ -29,7 +29,7 @@
     TO_PROTO_ENUM(kAudioPlayoutDelay, AUDIO_PLAYOUT_DELAY);
     TO_PROTO_ENUM(kAudioFrameDecoded, AUDIO_FRAME_DECODED);
     TO_PROTO_ENUM(kVideoFrameCaptured, VIDEO_FRAME_CAPTURED);
-    TO_PROTO_ENUM(kVideoFrameReceived, VIEDO_FRAME_RECEIVED);
+    TO_PROTO_ENUM(kVideoFrameReceived, VIDEO_FRAME_RECEIVED);
     TO_PROTO_ENUM(kVideoFrameSentToEncoder, VIDEO_FRAME_SENT_TO_ENCODER);
     TO_PROTO_ENUM(kVideoFrameEncoded, VIDEO_FRAME_ENCODED);
     TO_PROTO_ENUM(kVideoFrameDecoded, VIDEO_FRAME_DECODED);
diff --git a/media/cast/logging/proto/raw_events.proto b/media/cast/logging/proto/raw_events.proto
index 7ead104..6d15bbe 100644
--- a/media/cast/logging/proto/raw_events.proto
+++ b/media/cast/logging/proto/raw_events.proto
@@ -13,13 +13,13 @@
 // Keep in sync with media/cast/logging/logging_defines.h.
 // For compatibility reasons, existing values in this enum must not be changed.
 enum EventType {
-  // Generic events.
   UNKNOWN = 0;
+  // Generic events. No longer used.
   RTT_MS = 1;
   PACKET_LOSS = 2;
   JITTER_MS = 3;
-  VIDEO_ACK_RECEIVED = 4;
-  REMB_BITRATE = 5;
+  VIDEO_ACK_RECEIVED = 4;  // Sender side frame event.
+  REMB_BITRATE = 5;  // Generic event. No longer used.
   // Audio receiver.
   AUDIO_ACK_SENT = 6;
   // Video receiver.
@@ -33,7 +33,7 @@
   AUDIO_FRAME_DECODED = 12;
   // Video sender.
   VIDEO_FRAME_CAPTURED = 13;
-  VIEDO_FRAME_RECEIVED = 14;
+  VIDEO_FRAME_RECEIVED = 14;
   VIDEO_FRAME_SENT_TO_ENCODER = 15;
   VIDEO_FRAME_ENCODED = 16;
   // Video receiver.
@@ -69,12 +69,21 @@
 
   // Number of AggregatedPacketEvent's.
   optional int32 num_packet_events = 4;
+
+  // The internal timestamp value in milliseconds that represents the time
+  // of the Unix epoch. This is used for relating the timestamps in the events
+  // to a real time and date.
+  optional int64 reference_timestamp_ms_at_unix_epoch = 5;
 }
 
 message AggregatedFrameEvent {
   optional uint32 relative_rtp_timestamp = 1;
 
   repeated EventType event_type = 2 [packed = true];
+  
+  // The internal timestamp value in milliseconds. Use
+  // LogMetadata.reference_timestamp_ms_at_unix_epoch to relate to a real time
+  // and date.
   repeated int64 event_timestamp_ms = 3 [packed = true];
 
   // Only set if there is a kAudioFrameEncoded and kVideoFrameEncoded event.
@@ -85,11 +94,18 @@
 
   // Only set if there is a kVideoFrameEncoded event.
   optional bool key_frame = 6;
+  
+  // Only set if there is a kVideoFrameEncoded event.
+  optional int32 target_bitrate = 7;
 };
 
 message BasePacketEvent {
   optional int32 packet_id = 1;
   repeated EventType event_type = 2 [packed = true];
+  
+  // The internal timestamp value in milliseconds. Use
+  // LogMetadata.reference_timestamp_ms_at_unix_epoch to relate to a real time
+  // and date.
   repeated int64 event_timestamp_ms = 3 [packed = true];
 }
 
diff --git a/media/cast/logging/raw_event_subscriber.h b/media/cast/logging/raw_event_subscriber.h
index 8822364..b8ebe8c 100644
--- a/media/cast/logging/raw_event_subscriber.h
+++ b/media/cast/logging/raw_event_subscriber.h
@@ -24,10 +24,6 @@
   // Called on main thread when a PacketEvent, given by |packet_event|,
   // is logged.
   virtual void OnReceivePacketEvent(const PacketEvent& packet_event) = 0;
-
-  // Called on main thread when a GenericEvent, given by |generic_event|,
-  // is logged.
-  virtual void OnReceiveGenericEvent(const GenericEvent& generic_event) = 0;
 };
 
 }  // namespace cast
diff --git a/media/cast/logging/serialize_deserialize_test.cc b/media/cast/logging/serialize_deserialize_test.cc
index 788b276..d4ecf46 100644
--- a/media/cast/logging/serialize_deserialize_test.cc
+++ b/media/cast/logging/serialize_deserialize_test.cc
@@ -93,9 +93,11 @@
     }
   }
 
-  void Verify(const LogMetadata& returned_metadata,
-              const FrameEventMap& returned_frame_events,
-              const PacketEventMap& returned_packet_events) {
+  void Verify(const DeserializedLog& video_log) {
+    const LogMetadata& returned_metadata = video_log.metadata;
+    const FrameEventMap& returned_frame_events = video_log.frame_events;
+    const PacketEventMap& returned_packet_events = video_log.packet_events;
+
     EXPECT_EQ(metadata_.SerializeAsString(),
               returned_metadata.SerializeAsString());
 
@@ -151,18 +153,13 @@
   ASSERT_TRUE(success);
   ASSERT_GT(output_bytes_, 0);
 
-  FrameEventMap returned_frame_events;
-  PacketEventMap returned_packet_events;
-  LogMetadata returned_metadata;
-  success = DeserializeEvents(serialized_.get(),
-                              output_bytes_,
-                              compressed,
-                              &returned_metadata,
-                              &returned_frame_events,
-                              &returned_packet_events);
+  DeserializedLog audio_log;
+  DeserializedLog video_log;
+  success = DeserializeEvents(
+      serialized_.get(), output_bytes_, compressed, &audio_log, &video_log);
   ASSERT_TRUE(success);
 
-  Verify(returned_metadata, returned_frame_events, returned_packet_events);
+  Verify(video_log);
 }
 
 TEST_F(SerializeDeserializeTest, UncompressedInsufficientSpace) {
@@ -193,17 +190,12 @@
   ASSERT_TRUE(success);
   ASSERT_GT(output_bytes_, 0);
 
-  FrameEventMap returned_frame_events;
-  PacketEventMap returned_packet_events;
-  LogMetadata returned_metadata;
-  success = DeserializeEvents(serialized_.get(),
-                              output_bytes_,
-                              compressed,
-                              &returned_metadata,
-                              &returned_frame_events,
-                              &returned_packet_events);
+  DeserializedLog audio_log;
+  DeserializedLog video_log;
+  success = DeserializeEvents(
+      serialized_.get(), output_bytes_, compressed, &audio_log, &video_log);
   ASSERT_TRUE(success);
-  Verify(returned_metadata, returned_frame_events, returned_packet_events);
+  Verify(video_log);
 }
 
 TEST_F(SerializeDeserializeTest, CompressedInsufficientSpace) {
diff --git a/media/cast/logging/simple_event_subscriber.cc b/media/cast/logging/simple_event_subscriber.cc
index 78f932d..984d8f7 100644
--- a/media/cast/logging/simple_event_subscriber.cc
+++ b/media/cast/logging/simple_event_subscriber.cc
@@ -28,12 +28,6 @@
   packet_events_.push_back(packet_event);
 }
 
-void SimpleEventSubscriber::OnReceiveGenericEvent(
-    const GenericEvent& generic_event) {
-  DCHECK(thread_checker_.CalledOnValidThread());
-  generic_events_.push_back(generic_event);
-}
-
 void SimpleEventSubscriber::GetFrameEventsAndReset(
     std::vector<FrameEvent>* frame_events) {
   DCHECK(thread_checker_.CalledOnValidThread());
@@ -48,12 +42,5 @@
   packet_events_.clear();
 }
 
-void SimpleEventSubscriber::GetGenericEventsAndReset(
-    std::vector<GenericEvent>* generic_events) {
-  DCHECK(thread_checker_.CalledOnValidThread());
-  generic_events->swap(generic_events_);
-  generic_events_.clear();
-}
-
 }  // namespace cast
 }  // namespace media
diff --git a/media/cast/logging/simple_event_subscriber.h b/media/cast/logging/simple_event_subscriber.h
index 5245b6d..adc4763 100644
--- a/media/cast/logging/simple_event_subscriber.h
+++ b/media/cast/logging/simple_event_subscriber.h
@@ -27,8 +27,6 @@
   // RawEventSubscriber implementations.
   virtual void OnReceiveFrameEvent(const FrameEvent& frame_event) OVERRIDE;
   virtual void OnReceivePacketEvent(const PacketEvent& packet_event) OVERRIDE;
-  virtual void OnReceiveGenericEvent(const GenericEvent& generic_event)
-      OVERRIDE;
 
   // Assigns frame events received so far to |frame_events| and clears them
   // from this object.
@@ -38,14 +36,9 @@
   // from this object.
   void GetPacketEventsAndReset(std::vector<PacketEvent>* packet_events);
 
-  // Assigns generic events received so far to |generic_events| and clears them
-  // from this object.
-  void GetGenericEventsAndReset(std::vector<GenericEvent>* generic_events);
-
  private:
   std::vector<FrameEvent> frame_events_;
   std::vector<PacketEvent> packet_events_;
-  std::vector<GenericEvent> generic_events_;
 
   // All functions must be called on the main thread.
   base::ThreadChecker thread_checker_;
diff --git a/media/cast/logging/simple_event_subscriber_unittest.cc b/media/cast/logging/simple_event_subscriber_unittest.cc
index fec7e00..bce7f53 100644
--- a/media/cast/logging/simple_event_subscriber_unittest.cc
+++ b/media/cast/logging/simple_event_subscriber_unittest.cc
@@ -42,7 +42,7 @@
   // Log some frame events.
   cast_environment_->Logging()->InsertEncodedFrameEvent(
       testing_clock_->NowTicks(), kAudioFrameEncoded, /*rtp_timestamp*/ 100u,
-      /*frame_id*/ 0u, /*frame_size*/ 123, /*key_frame*/ false);
+      /*frame_id*/ 0u, /*frame_size*/ 123, /*key_frame*/ false, 0);
   cast_environment_->Logging()->InsertFrameEventWithDelay(
       testing_clock_->NowTicks(), kAudioPlayoutDelay, /*rtp_timestamp*/ 100u,
       /*frame_id*/ 0u, /*delay*/ base::TimeDelta::FromMilliseconds(100));
@@ -61,10 +61,6 @@
       testing_clock_->NowTicks(), kVideoFrameDecoded, /*rtp_timestamp*/ 300u,
       /*frame_id*/ 0u, /*packet_id*/ 1u, /*max_packet_id*/ 5u, /*size*/ 100u);
 
-  // Log some generic events.
-  cast_environment_->Logging()->InsertGenericEvent(testing_clock_->NowTicks(),
-                                                   kRttMs, /*value*/ 150);
-
   std::vector<FrameEvent> frame_events;
   event_subscriber_.GetFrameEventsAndReset(&frame_events);
   EXPECT_EQ(3u, frame_events.size());
@@ -73,18 +69,12 @@
   event_subscriber_.GetPacketEventsAndReset(&packet_events);
   EXPECT_EQ(3u, packet_events.size());
 
-  std::vector<GenericEvent> generic_events;
-  event_subscriber_.GetGenericEventsAndReset(&generic_events);
-  EXPECT_EQ(1u, generic_events.size());
-
   // Calling this function again should result in empty vector because no events
   // were logged since last call.
   event_subscriber_.GetFrameEventsAndReset(&frame_events);
   event_subscriber_.GetPacketEventsAndReset(&packet_events);
-  event_subscriber_.GetGenericEventsAndReset(&generic_events);
   EXPECT_TRUE(frame_events.empty());
   EXPECT_TRUE(packet_events.empty());
-  EXPECT_TRUE(generic_events.empty());
 }
 
 }  // namespace cast
diff --git a/media/cast/logging/stats_event_subscriber.cc b/media/cast/logging/stats_event_subscriber.cc
index 9a2df9d..2b40c99 100644
--- a/media/cast/logging/stats_event_subscriber.cc
+++ b/media/cast/logging/stats_event_subscriber.cc
@@ -69,38 +69,6 @@
   }
 }
 
-void StatsEventSubscriber::OnReceiveGenericEvent(
-    const GenericEvent& generic_event) {
-  DCHECK(thread_checker_.CalledOnValidThread());
-
-  CastLoggingEvent type = generic_event.type;
-  if (GetEventMediaType(type) != event_media_type_)
-    return;
-
-  GenericStatsMap::iterator it = generic_stats_.find(type);
-  if (it == generic_stats_.end()) {
-    GenericLogStats stats;
-    stats.first_event_time = generic_event.timestamp;
-    stats.last_event_time = generic_event.timestamp;
-    stats.event_counter = 1;
-    stats.sum = generic_event.value;
-    stats.sum_squared = generic_event.value * generic_event.value;
-    stats.min = generic_event.value;
-    stats.max = generic_event.value;
-    generic_stats_.insert(std::make_pair(type, stats));
-  } else {
-    it->second.last_event_time = generic_event.timestamp;
-    ++(it->second.event_counter);
-    it->second.sum += generic_event.value;
-    it->second.sum_squared += generic_event.value * generic_event.value;
-    if (it->second.min > generic_event.value) {
-      it->second.min = generic_event.value;
-    } else if (it->second.max < generic_event.value) {
-      it->second.max = generic_event.value;
-    }
-  }
-}
-
 void StatsEventSubscriber::GetFrameStats(FrameStatsMap* frame_stats_map) const {
   DCHECK(thread_checker_.CalledOnValidThread());
   DCHECK(frame_stats_map);
@@ -118,21 +86,11 @@
   packet_stats_map->insert(packet_stats_.begin(), packet_stats_.end());
 }
 
-void StatsEventSubscriber::GetGenericStats(
-    GenericStatsMap* generic_stats_map) const {
-  DCHECK(thread_checker_.CalledOnValidThread());
-  DCHECK(generic_stats_map);
-
-  generic_stats_map->clear();
-  generic_stats_map->insert(generic_stats_.begin(), generic_stats_.end());
-}
-
 void StatsEventSubscriber::Reset() {
   DCHECK(thread_checker_.CalledOnValidThread());
 
   frame_stats_.clear();
   packet_stats_.clear();
-  generic_stats_.clear();
 }
 
 }  // namespace cast
diff --git a/media/cast/logging/stats_event_subscriber.h b/media/cast/logging/stats_event_subscriber.h
index 8541982..176ced8 100644
--- a/media/cast/logging/stats_event_subscriber.h
+++ b/media/cast/logging/stats_event_subscriber.h
@@ -23,8 +23,6 @@
   // RawReventSubscriber implementations.
   virtual void OnReceiveFrameEvent(const FrameEvent& frame_event) OVERRIDE;
   virtual void OnReceivePacketEvent(const PacketEvent& packet_event) OVERRIDE;
-  virtual void OnReceiveGenericEvent(const GenericEvent& generic_event)
-      OVERRIDE;
 
   // Assigns |frame_stats_map| with frame stats.
   void GetFrameStats(FrameStatsMap* frame_stats_map) const;
@@ -32,9 +30,6 @@
   // Assigns |packet_stats_map| with packet stats.
   void GetPacketStats(PacketStatsMap* packet_stats_map) const;
 
-  // Assigns |generic_stats_map| with generic stats data.
-  void GetGenericStats(GenericStatsMap* generic_stats_map) const;
-
   // Resets all stats maps in this object.
   void Reset();
 
@@ -42,7 +37,6 @@
   EventMediaType event_media_type_;
   FrameStatsMap frame_stats_;
   PacketStatsMap packet_stats_;
-  GenericStatsMap generic_stats_;
   base::ThreadChecker thread_checker_;
   DISALLOW_COPY_AND_ASSIGN(StatsEventSubscriber);
 };
diff --git a/media/cast/logging/stats_event_subscriber_unittest.cc b/media/cast/logging/stats_event_subscriber_unittest.cc
index 8f4d0c5..a532580 100644
--- a/media/cast/logging/stats_event_subscriber_unittest.cc
+++ b/media/cast/logging/stats_event_subscriber_unittest.cc
@@ -50,6 +50,7 @@
   int num_frames = 10;
   int frame_size = 123;
   int delay_base_ms = 10;
+  int target_bitrate = 1234;
   base::TimeTicks now;
   for (int i = 0; i < num_frames; i++) {
     now = testing_clock_->NowTicks();
@@ -58,7 +59,8 @@
     testing_clock_->Advance(base::TimeDelta::FromMilliseconds(30));
 
     cast_environment_->Logging()->InsertEncodedFrameEvent(
-        now, kVideoFrameEncoded, rtp_timestamp, i, frame_size, true);
+        now, kVideoFrameEncoded, rtp_timestamp, i, frame_size, true,
+        target_bitrate);
     testing_clock_->Advance(base::TimeDelta::FromMilliseconds(30));
 
     cast_environment_->Logging()->InsertFrameEventWithDelay(
@@ -131,30 +133,6 @@
   EXPECT_EQ(num_packets * packet_size, static_cast<int>(it->second.sum_size));
 }
 
-TEST_F(StatsEventSubscriberTest, GenericStats) {
-  Init(OTHER_EVENT);
-  int num_generic_events = 10;
-  int value = 123;
-  for (int i = 0; i < num_generic_events; i++) {
-    cast_environment_->Logging()->InsertGenericEvent(
-        testing_clock_->NowTicks(), kRttMs, value);
-  }
-
-  GenericStatsMap stats_map;
-  subscriber_->GetGenericStats(&stats_map);
-
-  EXPECT_EQ(1u, stats_map.size());
-  GenericStatsMap::const_iterator it = stats_map.find(kRttMs);
-  ASSERT_NE(stats_map.end(), it);
-
-  EXPECT_EQ(num_generic_events, it->second.event_counter);
-  EXPECT_EQ(num_generic_events * value, it->second.sum);
-  EXPECT_EQ(static_cast<uint64>(num_generic_events * value * value),
-            it->second.sum_squared);
-  EXPECT_LE(value, it->second.min);
-  EXPECT_GE(value, it->second.max);
-}
-
 TEST_F(StatsEventSubscriberTest, Reset) {
   Init(VIDEO_EVENT);
   cast_environment_->Logging()->InsertFrameEvent(
diff --git a/media/cast/rtcp/receiver_rtcp_event_subscriber.cc b/media/cast/rtcp/receiver_rtcp_event_subscriber.cc
index d16aacd..393b678 100644
--- a/media/cast/rtcp/receiver_rtcp_event_subscriber.cc
+++ b/media/cast/rtcp/receiver_rtcp_event_subscriber.cc
@@ -32,9 +32,6 @@
         rtcp_event.delay_delta = frame_event.delay_delta;
       case kAudioFrameDecoded:
       case kVideoFrameDecoded:
-      // TODO(imcheng): This doesn't seem correct because kAudioAckSent and
-      // kVideoAckSent logged as generic events in AudioReceiver /
-      // VideoReceiver. (crbug.com/339590)
       case kAudioAckSent:
       case kVideoAckSent:
         rtcp_event.type = frame_event.type;
@@ -73,12 +70,6 @@
   DCHECK(rtcp_events_.size() <= max_size_to_retain_);
 }
 
-void ReceiverRtcpEventSubscriber::OnReceiveGenericEvent(
-    const GenericEvent& generic_event) {
-  DCHECK(thread_checker_.CalledOnValidThread());
-  // Do nothing as RTP receiver is not interested in generic events for RTCP.
-}
-
 void ReceiverRtcpEventSubscriber::GetRtcpEventsAndReset(
     RtcpEventMultiMap* rtcp_events) {
   DCHECK(thread_checker_.CalledOnValidThread());
diff --git a/media/cast/rtcp/receiver_rtcp_event_subscriber.h b/media/cast/rtcp/receiver_rtcp_event_subscriber.h
index 665ffcf..f2c7e5a 100644
--- a/media/cast/rtcp/receiver_rtcp_event_subscriber.h
+++ b/media/cast/rtcp/receiver_rtcp_event_subscriber.h
@@ -52,8 +52,6 @@
   // RawEventSubscriber implementation.
   virtual void OnReceiveFrameEvent(const FrameEvent& frame_event) OVERRIDE;
   virtual void OnReceivePacketEvent(const PacketEvent& packet_event) OVERRIDE;
-  virtual void OnReceiveGenericEvent(const GenericEvent& generic_event)
-      OVERRIDE;
 
   // Assigns events collected to |rtcp_events| and clears them from this
   // object.
diff --git a/media/cast/rtcp/receiver_rtcp_event_subscriber_unittest.cc b/media/cast/rtcp/receiver_rtcp_event_subscriber_unittest.cc
index 5b86879..0a8852f 100644
--- a/media/cast/rtcp/receiver_rtcp_event_subscriber_unittest.cc
+++ b/media/cast/rtcp/receiver_rtcp_event_subscriber_unittest.cc
@@ -81,8 +81,6 @@
     cast_environment_->Logging()->InsertFrameEvent(
         testing_clock_->NowTicks(), kAudioFrameReceived, /*rtp_timestamp*/ 100u,
         /*frame_id*/ 1u);
-    cast_environment_->Logging()->InsertGenericEvent(testing_clock_->NowTicks(),
-                                                     kRttMs, /*value*/ 100);
   }
 
   base::SimpleTestTickClock* testing_clock_;  // Owned by CastEnvironment.
diff --git a/media/cast/rtcp/rtcp.cc b/media/cast/rtcp/rtcp.cc
index a8842f1..5e7c4fe 100644
--- a/media/cast/rtcp/rtcp.cc
+++ b/media/cast/rtcp/rtcp.cc
@@ -259,10 +259,6 @@
       rtp_receiver_statistics_->GetStatistics(
           &report_block.fraction_lost, &report_block.cumulative_lost,
           &report_block.extended_high_sequence_number, &report_block.jitter);
-      cast_environment_->Logging()->InsertGenericEvent(now, kJitterMs,
-                                                       report_block.jitter);
-      cast_environment_->Logging()->InsertGenericEvent(
-          now, kPacketLoss, report_block.fraction_lost);
     }
 
     report_block.last_sr = last_report_received_;
@@ -449,10 +445,6 @@
 
   if (number_of_rtt_in_avg_ == 0) return false;
 
-  base::TimeTicks now = cast_environment_->Clock()->NowTicks();
-  cast_environment_->Logging()->InsertGenericEvent(now, kRttMs,
-                                                   rtt->InMilliseconds());
-
   *rtt = rtt_;
   *avg_rtt = base::TimeDelta::FromMilliseconds(avg_rtt_ms_);
   *min_rtt = min_rtt_;
diff --git a/media/cast/rtcp/rtcp.gyp b/media/cast/rtcp/rtcp.gyp
deleted file mode 100644
index d6e3e64..0000000
--- a/media/cast/rtcp/rtcp.gyp
+++ /dev/null
@@ -1,56 +0,0 @@
-# Copyright 2013 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.
-
-{
-  'variables': {
-    'chromium_code': 1,
-  },
-  'targets': [
-    {
-      'target_name': 'cast_rtcp',
-      'type': 'static_library',
-      'include_dirs': [
-        '<(DEPTH)/',
-      ],
-      'sources': [
-        'rtcp_defines.cc',
-        'rtcp_defines.h',
-        'rtcp.h',
-        'rtcp.cc',
-        'rtcp_receiver.cc',
-        'rtcp_receiver.h',
-        'rtcp_sender.cc',
-        'rtcp_sender.h',
-        'rtcp_utility.cc',
-        'rtcp_utility.h',
-        'sender_rtcp_event_subscriber.cc',
-        'sender_rtcp_event_subscriber.h',
-        'receiver_rtcp_event_subscriber.cc',
-        'receiver_rtcp_event_subscriber.cc',
-      ], # source
-      'dependencies': [
-        '<(DEPTH)/base/base.gyp:base',
-        '<(DEPTH)/media/cast/transport/cast_transport.gyp:cast_transport',
-        '<(DEPTH)/net/net.gyp:net',
-      ],
-    },
-    {
-      'target_name': 'cast_rtcp_test',
-      'type': 'static_library',
-      'include_dirs': [
-        '<(DEPTH)/',
-      ],
-      'sources': [
-        'test_rtcp_packet_builder.cc',
-        'test_rtcp_packet_builder.h',
-      ], # source
-      'dependencies': [
-        'cast_rtcp',
-        '<(DEPTH)/media/cast/transport/cast_transport.gyp:cast_transport',
-        '<(DEPTH)/testing/gtest.gyp:gtest',
-      ],
-    },
-  ],
-}
-
diff --git a/media/cast/rtcp/rtcp_receiver.cc b/media/cast/rtcp/rtcp_receiver.cc
index 7a76139ed..8c0e593 100644
--- a/media/cast/rtcp/rtcp_receiver.cc
+++ b/media/cast/rtcp/rtcp_receiver.cc
@@ -235,10 +235,6 @@
     return;
   }
   VLOG(2) << "Cast RTCP received RB from SSRC " << remote_ssrc;
-  base::TimeTicks now = cast_environment_->Clock()->NowTicks();
-  cast_environment_->Logging()->InsertGenericEvent(
-      now, kPacketLoss, rb.fraction_lost);
-  cast_environment_->Logging()->InsertGenericEvent(now, kJitterMs, rb.jitter);
 
   transport::RtcpReportBlock report_block;
   report_block.remote_ssrc = remote_ssrc;
diff --git a/media/cast/rtcp/rtcp_sender.cc b/media/cast/rtcp/rtcp_sender.cc
index d723f72..015daa2 100644
--- a/media/cast/rtcp/rtcp_sender.cc
+++ b/media/cast/rtcp/rtcp_sender.cc
@@ -209,32 +209,32 @@
     // Implement these for webrtc interop.
     NOTIMPLEMENTED();
   }
-  Packet packet;
-  packet.reserve(kMaxIpPacketSize);
+  transport::PacketRef packet(new base::RefCountedData<Packet>);
+  packet->data.reserve(kMaxIpPacketSize);
 
   if (packet_type_flags & transport::kRtcpRr) {
-    BuildRR(report_block, &packet);
+    BuildRR(report_block, &packet->data);
     if (!c_name_.empty()) {
-      BuildSdec(&packet);
+      BuildSdec(&packet->data);
     }
   }
   if (packet_type_flags & transport::kRtcpBye) {
-    BuildBye(&packet);
+    BuildBye(&packet->data);
   }
   if (packet_type_flags & transport::kRtcpRrtr) {
     DCHECK(rrtr) << "Invalid argument";
-    BuildRrtr(rrtr, &packet);
+    BuildRrtr(rrtr, &packet->data);
   }
   if (packet_type_flags & transport::kRtcpCast) {
     DCHECK(cast_message) << "Invalid argument";
-    BuildCast(cast_message, target_delay_ms, &packet);
+    BuildCast(cast_message, target_delay_ms, &packet->data);
   }
   if (packet_type_flags & transport::kRtcpReceiverLog) {
     DCHECK(rtcp_events) << "Invalid argument";
-    BuildReceiverLog(*rtcp_events, &packet);
+    BuildReceiverLog(*rtcp_events, &packet->data);
   }
 
-  if (packet.empty())
+  if (packet->data.empty())
     return;  // Sanity don't send empty packets.
 
   transport_->SendRtcpPacket(packet);
@@ -457,9 +457,6 @@
   for (; it != remb->remb_ssrcs.end(); ++it) {
     big_endian_writer.WriteU32(*it);
   }
-  base::TimeTicks now = cast_environment_->Clock()->NowTicks();
-  cast_environment_->Logging()->InsertGenericEvent(
-      now, kRembBitrate, remb->remb_bitrate);
 }
 
 void RtcpSender::BuildNack(const RtcpNackMessage* nack, Packet* packet) const {
diff --git a/media/cast/rtcp/rtcp_sender_unittest.cc b/media/cast/rtcp/rtcp_sender_unittest.cc
index cd8ca72..048a4b3 100644
--- a/media/cast/rtcp/rtcp_sender_unittest.cc
+++ b/media/cast/rtcp/rtcp_sender_unittest.cc
@@ -44,9 +44,11 @@
  public:
   TestRtcpTransport() : packet_count_(0) {}
 
-  virtual bool SendRtcpPacket(const Packet& packet) OVERRIDE {
-    EXPECT_EQ(expected_packet_.size(), packet.size());
-    EXPECT_EQ(0, memcmp(expected_packet_.data(), packet.data(), packet.size()));
+  virtual bool SendRtcpPacket(transport::PacketRef packet) OVERRIDE {
+    EXPECT_EQ(expected_packet_.size(), packet->data.size());
+    EXPECT_EQ(0, memcmp(expected_packet_.data(),
+                        packet->data.data(),
+                        packet->data.size()));
     packet_count_++;
     return true;
   }
diff --git a/media/cast/rtcp/rtcp_unittest.cc b/media/cast/rtcp/rtcp_unittest.cc
index bdc96bd..a991576 100644
--- a/media/cast/rtcp/rtcp_unittest.cc
+++ b/media/cast/rtcp/rtcp_unittest.cc
@@ -46,7 +46,8 @@
   void set_drop_packets(bool drop_packets) { drop_packets_ = drop_packets; }
 
   // A singular packet implies a RTCP packet.
-  virtual bool SendPacket(const Packet& packet) OVERRIDE {
+  virtual bool SendPacket(transport::PacketRef packet,
+                          const base::Closure& cb) OVERRIDE {
     if (short_delay_) {
       testing_clock_->Advance(
           base::TimeDelta::FromMilliseconds(kAddedShortDelay));
@@ -56,7 +57,7 @@
     if (drop_packets_)
       return true;
 
-    rtcp_receiver_->IncomingRtcpPacket(&(packet[0]), packet.size());
+    rtcp_receiver_->IncomingRtcpPacket(&packet->data[0], packet->data.size());
     return true;
   }
 
@@ -83,7 +84,7 @@
 
   void set_drop_packets(bool drop_packets) { drop_packets_ = drop_packets; }
 
-  virtual bool SendRtcpPacket(const Packet& packet) OVERRIDE {
+  virtual bool SendRtcpPacket(transport::PacketRef packet) OVERRIDE {
     if (short_delay_) {
       testing_clock_->Advance(
           base::TimeDelta::FromMilliseconds(kAddedShortDelay));
@@ -93,7 +94,7 @@
     if (drop_packets_)
       return true;
 
-    rtcp_->IncomingRtcpPacket(&(packet[0]), packet.size());
+    rtcp_->IncomingRtcpPacket(&packet->data[0], packet->data.size());
     return true;
   }
 
diff --git a/media/cast/rtcp/sender_rtcp_event_subscriber.cc b/media/cast/rtcp/sender_rtcp_event_subscriber.cc
index 7b82f4a..f00ca3a 100644
--- a/media/cast/rtcp/sender_rtcp_event_subscriber.cc
+++ b/media/cast/rtcp/sender_rtcp_event_subscriber.cc
@@ -69,12 +69,6 @@
   // Do nothing as RTP sender is not interested in packet events for RTCP.
 }
 
-void SenderRtcpEventSubscriber::OnReceiveGenericEvent(
-    const GenericEvent& generic_event) {
-  DCHECK(thread_checker_.CalledOnValidThread());
-  // Do nothing as RTP sender is not interested in generic events for RTCP.
-}
-
 void SenderRtcpEventSubscriber::GetRtcpEventsAndReset(
     RtcpEventMap* rtcp_events) {
   DCHECK(thread_checker_.CalledOnValidThread());
diff --git a/media/cast/rtcp/sender_rtcp_event_subscriber.h b/media/cast/rtcp/sender_rtcp_event_subscriber.h
index fdd36e3..32c22d5 100644
--- a/media/cast/rtcp/sender_rtcp_event_subscriber.h
+++ b/media/cast/rtcp/sender_rtcp_event_subscriber.h
@@ -42,8 +42,6 @@
   // RawEventSubscriber implementation.
   virtual void OnReceiveFrameEvent(const FrameEvent& frame_event) OVERRIDE;
   virtual void OnReceivePacketEvent(const PacketEvent& packet_event) OVERRIDE;
-  virtual void OnReceiveGenericEvent(const GenericEvent& generic_event)
-      OVERRIDE;
 
   // Assigns all collected events since last invocation to |rtcp_events|, and
   // clears |rtcp_events_|.
diff --git a/media/cast/rtp_receiver/rtp_parser/rtp_parser.gyp b/media/cast/rtp_receiver/rtp_parser/rtp_parser.gyp
deleted file mode 100644
index 533533f..0000000
--- a/media/cast/rtp_receiver/rtp_parser/rtp_parser.gyp
+++ /dev/null
@@ -1,27 +0,0 @@
-# Copyright 2013 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.
-
-{
-  'variables': {
-    'chromium_code': 1,
-  },
-  'targets': [
-    {
-      'target_name': 'cast_rtp_parser',
-      'type': 'static_library',
-      'include_dirs': [
-        '<(DEPTH)/',
-        '<(DEPTH)/third_party/',
-      ],
-      'sources': [
-        'rtp_parser.cc',
-        'rtp_parser.h',
-      ], # source
-      'dependencies': [
-        '<(DEPTH)/base/base.gyp:base',
-        '<(DEPTH)/media/cast/transport/cast_transport.gyp:cast_transport',
-      ],
-    },
-  ],
-}
diff --git a/media/cast/rtp_receiver/rtp_receiver.gyp b/media/cast/rtp_receiver/rtp_receiver.gyp
deleted file mode 100644
index bd1c1fa..0000000
--- a/media/cast/rtp_receiver/rtp_receiver.gyp
+++ /dev/null
@@ -1,30 +0,0 @@
-# Copyright 2013 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.
-
-{
-  'variables': {
-    'chromium_code': 1,
-  },
-  'targets': [
-    {
-      'target_name': 'cast_rtp_receiver',
-      'type': 'static_library',
-      'include_dirs': [
-        '<(DEPTH)/',
-        '<(DEPTH)/third_party/',
-      ],
-      'sources': [
-        'receiver_stats.cc',
-        'receiver_stats.h',
-        'rtp_receiver.cc',
-        'rtp_receiver.h',
-      ], # source
-      'dependencies': [
-        '<(DEPTH)/base/base.gyp:base',
-        '<(DEPTH)/media/cast/transport/cast_transport.gyp:cast_transport',
-        'rtp_parser/rtp_parser.gyp:*',
-      ],
-    },
-  ],
-}
diff --git a/media/cast/test/end2end_unittest.cc b/media/cast/test/end2end_unittest.cc
index b41f2ef..d8f27d0 100644
--- a/media/cast/test/end2end_unittest.cc
+++ b/media/cast/test/end2end_unittest.cc
@@ -33,6 +33,7 @@
 #include "media/cast/test/fake_single_thread_task_runner.h"
 #include "media/cast/test/utility/audio_utility.h"
 #include "media/cast/test/utility/default_config.h"
+#include "media/cast/test/utility/udp_proxy.h"
 #include "media/cast/test/utility/video_utility.h"
 #include "media/cast/transport/cast_transport_config.h"
 #include "media/cast/transport/cast_transport_defines.h"
@@ -159,8 +160,30 @@
   return event_counter_for_packet;
 }
 
+void CountVideoFrame(int* counter,
+                     const scoped_refptr<media::VideoFrame>& video_frame,
+                     const base::TimeTicks& render_time, bool continuous) {
+  ++*counter;
+}
+
 }  // namespace
 
+class LoopBackPacketPipe : public test::PacketPipe {
+ public:
+  LoopBackPacketPipe(const transport::PacketReceiverCallback& packet_receiver)
+      : packet_receiver_(packet_receiver) {}
+
+  virtual ~LoopBackPacketPipe() {}
+
+  // PacketPipe implementations.
+  virtual void Send(scoped_ptr<transport::Packet> packet) OVERRIDE {
+    packet_receiver_.Run(packet.Pass());
+  }
+
+ private:
+  transport::PacketReceiverCallback packet_receiver_;
+};
+
 // Class that sends the packet direct from sender into the receiver with the
 // ability to drop packets between the two.
 class LoopBackTransport : public transport::PacketSender {
@@ -173,26 +196,33 @@
 
   void SetPacketReceiver(
       const transport::PacketReceiverCallback& packet_receiver) {
-    packet_receiver_ = packet_receiver;
+    scoped_ptr<test::PacketPipe> loopback_pipe(
+        new LoopBackPacketPipe(packet_receiver));
+    if (packet_pipe_) {
+      packet_pipe_->AppendToPipe(loopback_pipe.Pass());
+    } else {
+      packet_pipe_ = loopback_pipe.Pass();
+    }
   }
 
-  virtual bool SendPacket(const Packet& packet) OVERRIDE {
+  virtual bool SendPacket(transport::PacketRef packet,
+                          const base::Closure& cb) OVERRIDE {
     DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN));
     if (!send_packets_)
       return false;
 
     if (drop_packets_belonging_to_odd_frames_) {
-      uint32 frame_id = packet[13];
+      uint32 frame_id = packet->data[13];
       if (frame_id % 2 == 1)
         return true;
     }
 
-    scoped_ptr<Packet> packet_copy(new Packet(packet));
+    scoped_ptr<Packet> packet_copy(new Packet(packet->data));
     if (reset_reference_frame_id_) {
       // Reset the is_reference bit in the cast header.
       (*packet_copy)[kCommonRtpHeaderLength] &= kCastReferenceFrameIdBitReset;
     }
-    packet_receiver_.Run(packet_copy.Pass());
+    packet_pipe_->Send(packet_copy.Pass());
     return true;
   }
 
@@ -204,12 +234,18 @@
 
   void AlwaysResetReferenceFrameId() { reset_reference_frame_id_ = true; }
 
+  void SetPacketPipe(scoped_ptr<test::PacketPipe> pipe) {
+    // Append the loopback pipe to the end.
+    pipe->AppendToPipe(packet_pipe_.Pass());
+    packet_pipe_ = pipe.Pass();
+  }
+
  private:
-  transport::PacketReceiverCallback packet_receiver_;
   bool send_packets_;
   bool drop_packets_belonging_to_odd_frames_;
   bool reset_reference_frame_id_;
   scoped_refptr<CastEnvironment> cast_environment_;
+  scoped_ptr<test::PacketPipe> packet_pipe_;
 };
 
 // Class that verifies the audio frames coming out of the receiver.
@@ -435,7 +471,8 @@
         &event_subscriber_sender_);
   }
 
-  void Configure(transport::AudioCodec audio_codec,
+  void Configure(transport::VideoCodec video_codec,
+                 transport::AudioCodec audio_codec,
                  int audio_sampling_frequency,
                  bool external_audio_decoder,
                  int max_number_of_video_buffers_used) {
@@ -475,7 +512,7 @@
     video_sender_config_.max_frame_rate = 30;
     video_sender_config_.max_number_of_video_buffers_used =
         max_number_of_video_buffers_used;
-    video_sender_config_.codec = transport::kVp8;
+    video_sender_config_.codec = video_codec;
 
     video_receiver_config_.feedback_ssrc =
         video_sender_config_.incoming_feedback_ssrc;
@@ -600,6 +637,11 @@
     video_frame_input_->InsertRawVideoFrame(video_frame, capture_time);
   }
 
+  void SendFakeVideoFrame(const base::TimeTicks& capture_time) {
+    video_frame_input_->InsertRawVideoFrame(
+        media::VideoFrame::CreateBlackFrame(gfx::Size(2, 2)), capture_time);
+  }
+
   void RunTasks(int during_ms) {
     for (int i = 0; i < during_ms; ++i) {
       // Call process the timers every 1 ms.
@@ -657,13 +699,12 @@
   SimpleEventSubscriber event_subscriber_sender_;
   std::vector<FrameEvent> frame_events_;
   std::vector<PacketEvent> packet_events_;
-  std::vector<GenericEvent> generic_events_;
   // |transport_sender_| has a RepeatingTimer which needs a MessageLoop.
   base::MessageLoop message_loop_;
 };
 
 TEST_F(End2EndTest, LoopNoLossPcm16) {
-  Configure(transport::kPcm16, 32000, false, 1);
+  Configure(transport::kVp8, transport::kPcm16, 32000, false, 1);
   // Reduce video resolution to allow processing multiple frames within a
   // reasonable time frame.
   video_sender_config_.width = kVideoQcifWidth;
@@ -716,7 +757,7 @@
 // This tests our external decoder interface for Audio.
 // Audio test without packet loss using raw PCM 16 audio "codec";
 TEST_F(End2EndTest, LoopNoLossPcm16ExternalDecoder) {
-  Configure(transport::kPcm16, 32000, true, 1);
+  Configure(transport::kVp8, transport::kPcm16, 32000, true, 1);
   Create();
 
   const int kNumIterations = 10;
@@ -734,7 +775,8 @@
 
 // This tests our Opus audio codec without video.
 TEST_F(End2EndTest, LoopNoLossOpus) {
-  Configure(transport::kOpus, kDefaultAudioSamplingRate, false, 1);
+  Configure(transport::kVp8, transport::kOpus, kDefaultAudioSamplingRate,
+            false, 1);
   Create();
 
   const int kNumIterations = 300;
@@ -760,7 +802,8 @@
 // in audio_receiver.cc for likely cause(s) of this bug.
 // http://crbug.com/356942
 TEST_F(End2EndTest, DISABLED_StartSenderBeforeReceiver) {
-  Configure(transport::kPcm16, kDefaultAudioSamplingRate, false, 1);
+  Configure(transport::kVp8, transport::kPcm16, kDefaultAudioSamplingRate,
+            false, 1);
   Create();
 
   int video_start = kVideoStart;
@@ -846,7 +889,8 @@
 // This tests a network glitch lasting for 10 video frames.
 // Flaky. See crbug.com/351596.
 TEST_F(End2EndTest, DISABLED_GlitchWith3Buffers) {
-  Configure(transport::kOpus, kDefaultAudioSamplingRate, false, 3);
+  Configure(transport::kVp8, transport::kOpus, kDefaultAudioSamplingRate,
+            false, 3);
   video_sender_config_.rtp_config.max_delay_ms = 67;
   video_receiver_config_.rtp_max_delay_ms = 67;
   Create();
@@ -908,7 +952,8 @@
 
 // Disabled due to flakiness and crashiness.  http://crbug.com/360951
 TEST_F(End2EndTest, DISABLED_DropEveryOtherFrame3Buffers) {
-  Configure(transport::kOpus, kDefaultAudioSamplingRate, false, 3);
+  Configure(transport::kVp8, transport::kOpus, kDefaultAudioSamplingRate, false,
+            3);
   video_sender_config_.rtp_config.max_delay_ms = 67;
   video_receiver_config_.rtp_max_delay_ms = 67;
   Create();
@@ -945,7 +990,8 @@
 }
 
 TEST_F(End2EndTest, ResetReferenceFrameId) {
-  Configure(transport::kOpus, kDefaultAudioSamplingRate, false, 3);
+  Configure(transport::kVp8, transport::kOpus, kDefaultAudioSamplingRate,
+            false, 3);
   video_sender_config_.rtp_config.max_delay_ms = 67;
   video_receiver_config_.rtp_max_delay_ms = 67;
   Create();
@@ -976,7 +1022,7 @@
 }
 
 TEST_F(End2EndTest, CryptoVideo) {
-  Configure(transport::kPcm16, 32000, false, 1);
+  Configure(transport::kVp8, transport::kPcm16, 32000, false, 1);
 
   transport_video_config_.base.aes_iv_mask =
       ConvertFromBase16String("1234567890abcdeffedcba0987654321");
@@ -1012,7 +1058,7 @@
 }
 
 TEST_F(End2EndTest, CryptoAudio) {
-  Configure(transport::kPcm16, 32000, false, 1);
+  Configure(transport::kVp8, transport::kPcm16, 32000, false, 1);
 
   transport_audio_config_.base.aes_iv_mask =
       ConvertFromBase16String("abcdeffedcba12345678900987654321");
@@ -1039,7 +1085,7 @@
 // Video test without packet loss - tests the logging aspects of the end2end,
 // but is basically equivalent to LoopNoLossPcm16.
 TEST_F(End2EndTest, VideoLogging) {
-  Configure(transport::kPcm16, 32000, false, 1);
+  Configure(transport::kVp8, transport::kPcm16, 32000, false, 1);
   Create();
 
   int video_start = kVideoStart;
@@ -1165,7 +1211,7 @@
 // Audio test without packet loss - tests the logging aspects of the end2end,
 // but is basically equivalent to LoopNoLossPcm16.
 TEST_F(End2EndTest, AudioLogging) {
-  Configure(transport::kPcm16, 32000, false, 1);
+  Configure(transport::kVp8, transport::kPcm16, 32000, false, 1);
   Create();
 
   int audio_diff = kFrameTimerMs;
@@ -1256,6 +1302,22 @@
   EXPECT_EQ(total_event_count_for_frame, expected_event_count_for_frame);
 }
 
+TEST_F(End2EndTest, BasicFakeSoftwareVideo) {
+  Configure(transport::kFakeSoftwareVideo, transport::kPcm16, 32000, false, 1);
+  Create();
+
+  int frames_counter = 0;
+  int received_counter = 0;
+  for (; frames_counter < 1000; ++frames_counter) {
+    SendFakeVideoFrame(testing_clock_sender_->NowTicks());
+    frame_receiver_->GetRawVideoFrame(
+        base::Bind(&CountVideoFrame, &received_counter));
+    RunTasks(kFrameTimerMs);
+  }
+  RunTasks(2 * kFrameTimerMs + 1);  // Empty the pipeline.
+  EXPECT_EQ(1000, received_counter);
+}
+
 // TODO(pwestin): Add repeatable packet loss test.
 // TODO(pwestin): Add test for misaligned send get calls.
 // TODO(pwestin): Add more tests that does not resample.
diff --git a/media/cast/test/receiver.cc b/media/cast/test/receiver.cc
index 5aaf643..3f5f4de 100644
--- a/media/cast/test/receiver.cc
+++ b/media/cast/test/receiver.cc
@@ -128,6 +128,7 @@
   AudioReceiverConfig audio_config = GetDefaultAudioReceiverConfig();
   GetSsrcs(&audio_config);
   GetPayloadtype(&audio_config);
+  audio_config.rtp_max_delay_ms = 300;
   return audio_config;
 }
 
@@ -143,6 +144,7 @@
   VideoReceiverConfig video_config = GetDefaultVideoReceiverConfig();
   GetSsrcs(&video_config);
   GetPayloadtype(&video_config);
+  video_config.rtp_max_delay_ms = 300;
   return video_config;
 }
 
diff --git a/media/cast/test/sender.cc b/media/cast/test/sender.cc
index fa2120e..3feb5b7 100644
--- a/media/cast/test/sender.cc
+++ b/media/cast/test/sender.cc
@@ -6,14 +6,21 @@
 // or read from a file.
 
 #include "base/at_exit.h"
+#include "base/base_paths.h"
 #include "base/command_line.h"
 #include "base/file_util.h"
+#include "base/files/file_path.h"
+#include "base/files/memory_mapped_file.h"
 #include "base/files/scoped_file.h"
 #include "base/logging.h"
 #include "base/memory/scoped_ptr.h"
+#include "base/path_service.h"
+#include "base/strings/string_number_conversions.h"
 #include "base/threading/thread.h"
 #include "base/time/default_tick_clock.h"
+#include "media/base/media.h"
 #include "media/base/video_frame.h"
+#include "media/base/video_util.h"
 #include "media/cast/cast_config.h"
 #include "media/cast/cast_environment.h"
 #include "media/cast/cast_sender.h"
@@ -28,135 +35,34 @@
 #include "media/cast/transport/cast_transport_defines.h"
 #include "media/cast/transport/cast_transport_sender.h"
 #include "media/cast/transport/transport/udp_transport.h"
+#include "media/ffmpeg/ffmpeg_common.h"
+#include "media/filters/ffmpeg_demuxer.h"
+#include "media/filters/ffmpeg_glue.h"
+#include "media/filters/in_memory_url_protocol.h"
 #include "ui/gfx/size.h"
 
-namespace media {
-namespace cast {
-// Settings chosen to match default receiver settings.
-#define DEFAULT_RECEIVER_PORT "2344"
-#define DEFAULT_RECEIVER_IP "127.0.0.1"
-#define DEFAULT_READ_FROM_FILE "0"
-#define DEFAULT_AUDIO_SENDER_SSRC "1"
-#define DEFAULT_AUDIO_RECEIVER_SSRC "2"
-#define DEFAULT_AUDIO_PAYLOAD_TYPE "127"
-#define DEFAULT_VIDEO_SENDER_SSRC "11"
-#define DEFAULT_VIDEO_RECEIVER_SSRC "12"
-#define DEFAULT_VIDEO_PAYLOAD_TYPE "96"
-#define DEFAULT_VIDEO_CODEC_WIDTH "1280"
-#define DEFAULT_VIDEO_CODEC_HEIGHT "720"
-#define DEFAULT_VIDEO_CODEC_BITRATE "2000"
-#define DEFAULT_VIDEO_CODEC_MAX_BITRATE "4000"
-#define DEFAULT_VIDEO_CODEC_MIN_BITRATE "1000"
-
-#define DEFAULT_LOGGING_DURATION "10"
-#define DEFAULT_COMPRESS_LOGS "1"
-
 namespace {
 static const int kAudioChannels = 2;
 static const int kAudioSamplingFrequency = 48000;
 static const int kSoundFrequency = 1234;  // Frequency of sinusoid wave.
-// The tests are commonly implemented with |kFrameTimerMs| RunTask function;
-// a normal video is 30 fps hence the 33 ms between frames.
 static const float kSoundVolume = 0.5f;
-static const int kFrameTimerMs = 33;
+static const int kAudioFrameMs = 10;  // Each audio frame is exactly 10ms.
 
 // The max allowed size of serialized log.
 const int kMaxSerializedLogBytes = 10 * 1000 * 1000;
+
+const char kSwitchAddress[] = "address";
+const char kSwitchPort[] = "port";
+const char kSwitchSourceFile[] = "source-file";
+
 }  // namespace
 
-void GetPort(int* port) {
-  test::InputBuilder input(
-      "Enter receiver port.", DEFAULT_RECEIVER_PORT, 1, INT_MAX);
-  *port = input.GetIntInput();
-}
-
-std::string GetIpAddress(const std::string display_text) {
-  test::InputBuilder input(display_text, DEFAULT_RECEIVER_IP, INT_MIN, INT_MAX);
-  std::string ip_address = input.GetStringInput();
-  // Verify correct form:
-  while (std::count(ip_address.begin(), ip_address.end(), '.') != 3) {
-    ip_address = input.GetStringInput();
-  }
-  return ip_address;
-}
-
-int GetLoggingDuration() {
-  test::InputBuilder input(
-      "Choose logging duration (seconds), 0 for no logging.",
-      DEFAULT_LOGGING_DURATION,
-      0,
-      INT_MAX);
-  return input.GetIntInput();
-}
-
-std::string GetVideoLogFileDestination(bool compress) {
-  test::InputBuilder input(
-      "Enter video events log file destination.",
-      compress ? "./video_events.log.gz" : "./video_events.log",
-      INT_MIN,
-      INT_MAX);
-  return input.GetStringInput();
-}
-
-std::string GetAudioLogFileDestination(bool compress) {
-  test::InputBuilder input(
-      "Enter audio events log file destination.",
-      compress ? "./audio_events.log.gz" : "./audio_events.log",
-      INT_MIN,
-      INT_MAX);
-  return input.GetStringInput();
-}
-
-bool CompressLogs() {
-  test::InputBuilder input(
-      "Enter 1 to enable compression on logs.", DEFAULT_COMPRESS_LOGS, 0, 1);
-  return (1 == input.GetIntInput());
-}
-
-bool ReadFromFile() {
-  test::InputBuilder input(
-      "Enter 1 to read from file.", DEFAULT_READ_FROM_FILE, 0, 1);
-  return (1 == input.GetIntInput());
-}
-
-std::string GetVideoFile() {
-  test::InputBuilder input(
-      "Enter file and path to raw video file.", "", INT_MIN, INT_MAX);
-  return input.GetStringInput();
-}
-
-void GetSsrcs(AudioSenderConfig* audio_config) {
-  test::InputBuilder input_tx(
-      "Choose audio sender SSRC.", DEFAULT_AUDIO_SENDER_SSRC, 1, INT_MAX);
-  audio_config->sender_ssrc = input_tx.GetIntInput();
-
-  test::InputBuilder input_rx(
-      "Choose audio receiver SSRC.", DEFAULT_AUDIO_RECEIVER_SSRC, 1, INT_MAX);
-  audio_config->incoming_feedback_ssrc = input_rx.GetIntInput();
-}
-
-void GetSsrcs(VideoSenderConfig* video_config) {
-  test::InputBuilder input_tx(
-      "Choose video sender SSRC.", DEFAULT_VIDEO_SENDER_SSRC, 1, INT_MAX);
-  video_config->sender_ssrc = input_tx.GetIntInput();
-
-  test::InputBuilder input_rx(
-      "Choose video receiver SSRC.", DEFAULT_VIDEO_RECEIVER_SSRC, 1, INT_MAX);
-  video_config->incoming_feedback_ssrc = input_rx.GetIntInput();
-}
-
-void GetPayloadtype(AudioSenderConfig* audio_config) {
-  test::InputBuilder input(
-      "Choose audio sender payload type.", DEFAULT_AUDIO_PAYLOAD_TYPE, 96, 127);
-  audio_config->rtp_config.payload_type = input.GetIntInput();
-}
+namespace media {
+namespace cast {
 
 AudioSenderConfig GetAudioSenderConfig() {
   AudioSenderConfig audio_config;
 
-  GetSsrcs(&audio_config);
-  GetPayloadtype(&audio_config);
-
   audio_config.rtcp_c_name = "audio_sender@a.b.c.d";
 
   VLOG(0) << "Using OPUS 48Khz stereo at 64kbit/s";
@@ -165,60 +71,50 @@
   audio_config.channels = kAudioChannels;
   audio_config.bitrate = 64000;
   audio_config.codec = transport::kOpus;
+  audio_config.sender_ssrc = 1;
+  audio_config.incoming_feedback_ssrc = 2;
+  audio_config.rtp_config.payload_type = 127;
+  audio_config.rtp_config.max_delay_ms = 300;
   return audio_config;
 }
 
-void GetPayloadtype(VideoSenderConfig* video_config) {
-  test::InputBuilder input(
-      "Choose video sender payload type.", DEFAULT_VIDEO_PAYLOAD_TYPE, 96, 127);
-  video_config->rtp_config.payload_type = input.GetIntInput();
-}
-
-void GetVideoCodecSize(VideoSenderConfig* video_config) {
-  test::InputBuilder input_width(
-      "Choose video width.", DEFAULT_VIDEO_CODEC_WIDTH, 144, 1920);
-  video_config->width = input_width.GetIntInput();
-
-  test::InputBuilder input_height(
-      "Choose video height.", DEFAULT_VIDEO_CODEC_HEIGHT, 176, 1080);
-  video_config->height = input_height.GetIntInput();
-}
-
-void GetVideoBitrates(VideoSenderConfig* video_config) {
-  test::InputBuilder input_start_br(
-      "Choose start bitrate[kbps].", DEFAULT_VIDEO_CODEC_BITRATE, 0, INT_MAX);
-  video_config->start_bitrate = input_start_br.GetIntInput() * 1000;
-
-  test::InputBuilder input_max_br(
-      "Choose max bitrate[kbps].", DEFAULT_VIDEO_CODEC_MAX_BITRATE, 0, INT_MAX);
-  video_config->max_bitrate = input_max_br.GetIntInput() * 1000;
-
-  test::InputBuilder input_min_br(
-      "Choose min bitrate[kbps].", DEFAULT_VIDEO_CODEC_MIN_BITRATE, 0, INT_MAX);
-  video_config->min_bitrate = input_min_br.GetIntInput() * 1000;
-}
-
 VideoSenderConfig GetVideoSenderConfig() {
   VideoSenderConfig video_config;
 
-  GetSsrcs(&video_config);
-  GetPayloadtype(&video_config);
-  GetVideoCodecSize(&video_config);
-  GetVideoBitrates(&video_config);
-
   video_config.rtcp_c_name = "video_sender@a.b.c.d";
-
   video_config.use_external_encoder = false;
 
   VLOG(0) << "Using VP8 at 30 fps";
-  video_config.min_qp = 4;
-  video_config.max_qp = 40;
+
+  // Resolution.
+  video_config.width = 1280;
+  video_config.height = 720;
   video_config.max_frame_rate = 30;
+
+  // Bitrates.
+  video_config.max_bitrate = 2500000;
+  video_config.min_bitrate = 100000;
+  video_config.start_bitrate = video_config.min_bitrate;
+
+  // Codec.
   video_config.codec = transport::kVp8;
   video_config.max_number_of_video_buffers_used = 1;
+  video_config.number_of_encode_threads = 2;
+
+  // Quality options.
+  video_config.min_qp = 4;
+  video_config.max_qp = 40;
+
+  // SSRCs and payload type. Don't change them.
+  video_config.sender_ssrc = 11;
+  video_config.incoming_feedback_ssrc = 12;
+  video_config.rtp_config.payload_type = 96;
+  video_config.rtp_config.max_delay_ms = 300;
   return video_config;
 }
 
+void AVFreeFrame(AVFrame* frame) { avcodec_free_frame(&frame); }
+
 class SendProcess {
  public:
   SendProcess(scoped_refptr<base::SingleThreadTaskRunner> thread_proxy,
@@ -228,108 +124,287 @@
               scoped_refptr<VideoFrameInput> video_frame_input)
       : test_app_thread_proxy_(thread_proxy),
         video_config_(video_config),
-        audio_diff_(kFrameTimerMs),
         audio_frame_input_(audio_frame_input),
         video_frame_input_(video_frame_input),
         synthetic_count_(0),
         clock_(clock),
-        start_time_(),
-        send_time_(),
-        weak_factory_(this) {
+        audio_frame_count_(0),
+        video_frame_count_(0),
+        weak_factory_(this),
+        av_format_context_(NULL),
+        audio_stream_index_(-1),
+        video_stream_index_(-1) {
     audio_bus_factory_.reset(new TestAudioBusFactory(kAudioChannels,
                                                      kAudioSamplingFrequency,
                                                      kSoundFrequency,
                                                      kSoundVolume));
-    if (ReadFromFile()) {
-      std::string video_file_name = GetVideoFile();
-      video_file_ = fopen(video_file_name.c_str(), "r");
-      if (video_file_ == NULL) {
-        VLOG(1) << "Failed to open file";
-        exit(-1);
-      }
-    } else {
-      video_file_ = NULL;
+
+    // Load source file and prepare FFmpeg demuxer.
+    base::FilePath source_path =
+        CommandLine::ForCurrentProcess()->GetSwitchValuePath(kSwitchSourceFile);
+    if (source_path.empty())
+      return;
+
+    LOG(INFO) << "Source: " << source_path.value();
+    if (!file_data_.Initialize(source_path)) {
+      LOG(ERROR) << "Cannot load file.";
+      return;
     }
+    protocol_.reset(
+        new InMemoryUrlProtocol(file_data_.data(), file_data_.length(), false));
+    glue_.reset(new FFmpegGlue(protocol_.get()));
+
+    if (!glue_->OpenContext()) {
+      LOG(ERROR) << "Cannot open file.";
+      return;
+    }
+
+    // AVFormatContext is owned by the glue.
+    av_format_context_ = glue_->format_context();
+    if (avformat_find_stream_info(av_format_context_, NULL) < 0) {
+      LOG(ERROR) << "Cannot find stream information.";
+      return;
+    }
+
+    // Prepare FFmpeg decoders.
+    for (unsigned int i = 0; i < av_format_context_->nb_streams; ++i) {
+      AVStream* av_stream = av_format_context_->streams[i];
+      AVCodecContext* av_codec_context = av_stream->codec;
+      AVCodec* av_codec = avcodec_find_decoder(av_codec_context->codec_id);
+
+      if (!av_codec) {
+        LOG(ERROR) << "Cannot find decoder for the codec: "
+                   << av_codec_context->codec_id;
+        continue;
+      }
+
+      // Number of threads for decoding.
+      av_codec_context->thread_count = 2;
+      av_codec_context->error_concealment = FF_EC_GUESS_MVS | FF_EC_DEBLOCK;
+
+      if (avcodec_open2(av_codec_context, av_codec, NULL) < 0) {
+        LOG(ERROR) << "Cannot open AVCodecContext for the codec: "
+                   << av_codec_context->codec_id;
+        return;
+      }
+
+      if (av_codec->type == AVMEDIA_TYPE_AUDIO) {
+        if (audio_stream_index_ != -1) {
+          LOG(WARNING) << "Found multiple audio streams.";
+        }
+        audio_stream_index_ = static_cast<int>(i);
+        LOG(INFO) << "Source file has audio.";
+      } else if (av_codec->type == AVMEDIA_TYPE_VIDEO) {
+        VideoFrame::Format format =
+            PixelFormatToVideoFormat(av_codec_context->pix_fmt);
+        if (format != VideoFrame::YV12) {
+          LOG(ERROR) << "Cannot handle non YV12 video format: " << format;
+          return;
+        }
+        if (video_stream_index_ != -1) {
+          LOG(WARNING) << "Found multiple video streams.";
+        }
+        video_stream_index_ = static_cast<int>(i);
+        LOG(INFO) << "Source file has video.";
+      } else {
+        LOG(ERROR) << "Unknown stream type; ignore.";
+      }
+    }
+
+    Rewind();
   }
 
   ~SendProcess() {
-    if (video_file_)
-      fclose(video_file_);
   }
 
-  void SendFrame() {
-    // Make sure that we don't drift.
-    int num_10ms_blocks = audio_diff_ / 10;
-    // Avoid drift.
-    audio_diff_ += kFrameTimerMs - num_10ms_blocks * 10;
-
-    audio_frame_input_->InsertAudio(
-        audio_bus_factory_->NextAudioBus(
-            base::TimeDelta::FromMilliseconds(10) * num_10ms_blocks),
-        clock_->NowTicks());
-
+  void SendNextFrame() {
     gfx::Size size(video_config_.width, video_config_.height);
-    // TODO(mikhal): Use the provided timestamp.
-    if (start_time_.is_null())
-      start_time_ = clock_->NowTicks();
-    base::TimeDelta time_diff = clock_->NowTicks() - start_time_;
-    scoped_refptr<media::VideoFrame> video_frame =
-        media::VideoFrame::CreateFrame(
-            VideoFrame::I420, size, gfx::Rect(size), size, time_diff);
-    if (video_file_) {
-      if (!PopulateVideoFrameFromFile(video_frame, video_file_))
-        return;
+    scoped_refptr<VideoFrame> video_frame =
+        VideoFrame::CreateBlackFrame(size);
+    if (is_transcoding_video()) {
+      scoped_refptr<VideoFrame> decoded_frame = DecodeOneVideoFrame();
+      media::CopyPlane(VideoFrame::kYPlane,
+                       decoded_frame->data(VideoFrame::kYPlane),
+                       decoded_frame->stride(VideoFrame::kYPlane),
+                       decoded_frame->rows(VideoFrame::kYPlane),
+                       video_frame);
+      media::CopyPlane(VideoFrame::kUPlane,
+                       decoded_frame->data(VideoFrame::kUPlane),
+                       decoded_frame->stride(VideoFrame::kUPlane),
+                       decoded_frame->rows(VideoFrame::kUPlane),
+                       video_frame);
+      media::CopyPlane(VideoFrame::kVPlane,
+                       decoded_frame->data(VideoFrame::kVPlane),
+                       decoded_frame->stride(VideoFrame::kVPlane),
+                       decoded_frame->rows(VideoFrame::kVPlane),
+                       video_frame);
     } else {
       PopulateVideoFrame(video_frame, synthetic_count_);
-      ++synthetic_count_;
+    }
+    ++synthetic_count_;
+
+    base::TimeTicks now = clock_->NowTicks();
+    if (start_time_.is_null())
+      start_time_ = now;
+
+    // Note: We don't care about the framerate of the original file.
+    // We want the receiver to play it at the rate we desire, i.e. 30FPS.
+
+    // After submitting the current frame update video time for the next
+    // frame.
+    base::TimeDelta video_time = VideoFrameTime(video_frame_count_);
+    video_frame->set_timestamp(video_time);
+    video_frame_input_->InsertRawVideoFrame(video_frame,
+                                            start_time_ + video_time);
+    video_time = VideoFrameTime(++video_frame_count_);
+
+    base::TimeDelta audio_time = AudioFrameTime(audio_frame_count_);
+
+    // Send just enough audio data to match next video frame's time.
+    while (audio_time < video_time) {
+      audio_frame_input_->InsertAudio(
+          audio_bus_factory_->NextAudioBus(
+              base::TimeDelta::FromMilliseconds(kAudioFrameMs)),
+          start_time_ + audio_time);
+      audio_time = AudioFrameTime(++audio_frame_count_);
     }
 
-    // Time the sending of the frame to match the set frame rate.
-    // Sleep if that time has yet to elapse.
-    base::TimeTicks now = clock_->NowTicks();
-    base::TimeDelta video_frame_time =
-        base::TimeDelta::FromMilliseconds(kFrameTimerMs);
-    base::TimeDelta elapsed_time = now - send_time_;
-    if (elapsed_time < video_frame_time) {
-      VLOG(1) << "Wait" << (video_frame_time - elapsed_time).InMilliseconds();
-      test_app_thread_proxy_->PostDelayedTask(
-          FROM_HERE,
-          base::Bind(&SendProcess::SendVideoFrameOnTime,
-                     weak_factory_.GetWeakPtr(),
-                     video_frame),
-          video_frame_time - elapsed_time);
+    // This is the time since the stream started.
+    const base::TimeDelta elapsed_time = now - start_time_;
+
+    // Handle the case when decoding or frame generation cannot keep up.
+    // Move the time ahead to match the next frame.
+    while (video_time < elapsed_time) {
+      LOG(WARNING) << "Skipping one frame.";
+      video_time = VideoFrameTime(++video_frame_count_);
+    }
+
+    test_app_thread_proxy_->PostDelayedTask(
+        FROM_HERE,
+        base::Bind(&SendProcess::SendNextFrame, weak_factory_.GetWeakPtr()),
+        video_time - elapsed_time);
+  }
+
+ private:
+  bool is_transcoding_audio() { return audio_stream_index_ >= 0; }
+  bool is_transcoding_video() { return video_stream_index_ >= 0; }
+
+  // Helper methods to compute timestamps for the frame number specified.
+  base::TimeDelta VideoFrameTime(int frame_number) {
+    return frame_number * base::TimeDelta::FromSeconds(1) /
+        video_config_.max_frame_rate;
+  }
+
+  base::TimeDelta AudioFrameTime(int frame_number) {
+    return frame_number * base::TimeDelta::FromMilliseconds(kAudioFrameMs);
+  }
+
+  // Go to the beginning of the stream.
+  void Rewind() {
+    CHECK(av_seek_frame(av_format_context_, -1, 0, AVSEEK_FLAG_BACKWARD) >= 0)
+        << "Failed to rewind to the beginning.";
+  }
+
+  // Call FFmpeg to fetch one packet.
+  ScopedAVPacket DemuxOnePacket(bool* audio) {
+    ScopedAVPacket packet(new AVPacket());
+    if (av_read_frame(av_format_context_, packet.get()) < 0) {
+      LOG(ERROR) << "Failed to read one AVPacket";
+      packet.reset();
+      return packet.Pass();
+    }
+
+    int stream_index = static_cast<int>(packet->stream_index);
+    if (stream_index == audio_stream_index_) {
+      *audio = true;
+    } else if (stream_index == video_stream_index_) {
+      *audio = false;
     } else {
-      test_app_thread_proxy_->PostTask(
-          FROM_HERE,
-          base::Bind(&SendProcess::SendVideoFrameOnTime,
-                     weak_factory_.GetWeakPtr(),
-                     video_frame));
+      // Ignore unknown packet.
+      LOG(INFO) << "Unknown packet.";
+      packet.reset();
+    }
+    return packet.Pass();
+  }
+
+  scoped_refptr<VideoFrame> DecodeOneVideoFrame() {
+    // Read the stream until one video frame can be decoded.
+    while (true) {
+      bool audio = false;
+      ScopedAVPacket packet = DemuxOnePacket(&audio);
+      if (!packet) {
+        LOG(INFO) << "End of stream; Rewind.";
+        Rewind();
+        continue;
+      }
+
+      if (audio) {
+        // TODO(hclam): Decode audio packets.
+        continue;
+      }
+
+      // Video.
+      int got_picture = 0;
+      AVFrame* avframe = av_frame_alloc();
+      avcodec_get_frame_defaults(avframe);
+      av_video_context()->reordered_opaque = packet->pts;
+      CHECK(avcodec_decode_video2(
+                av_video_context(), avframe, &got_picture, packet.get()) >= 0)
+          << "Video decode error.";
+      if (!got_picture) {
+        continue;
+      }
+
+      gfx::Size size(av_video_context()->width, av_video_context()->height);
+      return VideoFrame::WrapExternalYuvData(media::VideoFrame::YV12,
+                                             size,
+                                             gfx::Rect(size),
+                                             size,
+                                             avframe->linesize[0],
+                                             avframe->linesize[1],
+                                             avframe->linesize[2],
+                                             avframe->data[0],
+                                             avframe->data[1],
+                                             avframe->data[2],
+                                             base::TimeDelta(),
+                                             base::Bind(&AVFreeFrame, avframe));
     }
   }
 
   void SendVideoFrameOnTime(scoped_refptr<media::VideoFrame> video_frame) {
-    send_time_ = clock_->NowTicks();
-    video_frame_input_->InsertRawVideoFrame(video_frame, send_time_);
-    test_app_thread_proxy_->PostTask(
-        FROM_HERE, base::Bind(&SendProcess::SendFrame, base::Unretained(this)));
   }
 
- private:
+  AVStream* av_audio_stream() {
+    return av_format_context_->streams[audio_stream_index_];
+  }
+  AVStream* av_video_stream() {
+    return av_format_context_->streams[video_stream_index_];
+  }
+  AVCodecContext* av_audio_context() { return av_audio_stream()->codec; }
+  AVCodecContext* av_video_context() { return av_video_stream()->codec; }
+
   scoped_refptr<base::SingleThreadTaskRunner> test_app_thread_proxy_;
   const VideoSenderConfig video_config_;
-  int audio_diff_;
   const scoped_refptr<AudioFrameInput> audio_frame_input_;
   const scoped_refptr<VideoFrameInput> video_frame_input_;
-  FILE* video_file_;
   uint8 synthetic_count_;
   base::TickClock* const clock_;  // Not owned by this class.
   base::TimeTicks start_time_;
-  base::TimeTicks send_time_;
+  int audio_frame_count_;  // Each audio frame is exactly 10ms.
+  int video_frame_count_;
   scoped_ptr<TestAudioBusFactory> audio_bus_factory_;
 
   // NOTE: Weak pointers must be invalidated before all other member variables.
   base::WeakPtrFactory<SendProcess> weak_factory_;
 
+  base::MemoryMappedFile file_data_;
+  scoped_ptr<InMemoryUrlProtocol> protocol_;
+  scoped_ptr<FFmpegGlue> glue_;
+  AVFormatContext* av_format_context_;
+
+  int audio_stream_index_;
+  int video_stream_index_;
+
   DISALLOW_COPY_AND_ASSIGN(SendProcess);
 };
 
@@ -373,18 +448,17 @@
 void DumpLoggingData(const media::cast::proto::LogMetadata& log_metadata,
                      const media::cast::FrameEventMap& frame_events,
                      const media::cast::PacketEventMap& packet_events,
-                     bool compress,
                      base::ScopedFILE log_file) {
   VLOG(0) << "Frame map size: " << frame_events.size();
   VLOG(0) << "Packet map size: " << packet_events.size();
 
-  scoped_ptr<char[]> event_log(new char[media::cast::kMaxSerializedLogBytes]);
+  scoped_ptr<char[]> event_log(new char[kMaxSerializedLogBytes]);
   int event_log_bytes;
   if (!media::cast::SerializeEvents(log_metadata,
                                     frame_events,
                                     packet_events,
-                                    compress,
-                                    media::cast::kMaxSerializedLogBytes,
+                                    true,
+                                    kMaxSerializedLogBytes,
                                     event_log.get(),
                                     &event_log_bytes)) {
     VLOG(0) << "Failed to serialize events.";
@@ -403,8 +477,7 @@
     scoped_ptr<media::cast::EncodingEventSubscriber> video_event_subscriber,
     scoped_ptr<media::cast::EncodingEventSubscriber> audio_event_subscriber,
     base::ScopedFILE video_log_file,
-    base::ScopedFILE audio_log_file,
-    bool compress) {
+    base::ScopedFILE audio_log_file) {
   cast_environment->Logging()->RemoveRawEventSubscriber(
       video_event_subscriber.get());
   cast_environment->Logging()->RemoveRawEventSubscriber(
@@ -420,7 +493,6 @@
   DumpLoggingData(log_metadata,
                   frame_events,
                   packet_events,
-                  compress,
                   video_log_file.Pass());
 
   VLOG(0) << "Dumping logging data for audio stream.";
@@ -430,7 +502,6 @@
   DumpLoggingData(log_metadata,
                   frame_events,
                   packet_events,
-                  compress,
                   audio_log_file.Pass());
 }
 
@@ -440,6 +511,15 @@
   base::AtExitManager at_exit;
   CommandLine::Init(argc, argv);
   InitLogging(logging::LoggingSettings());
+
+  // Load the media module for FFmpeg decoding.
+  base::FilePath path;
+  PathService::Get(base::DIR_MODULE, &path);
+  if (!media::InitializeMediaLibrary(path)) {
+    LOG(ERROR) << "Could not initialize media library.";
+    return 1;
+  }
+
   base::Thread test_thread("Cast sender test app thread");
   base::Thread audio_thread("Cast audio encoder thread");
   base::Thread video_thread("Cast video encoder thread");
@@ -449,11 +529,17 @@
 
   base::MessageLoopForIO io_message_loop;
 
-  int remote_port;
-  media::cast::GetPort(&remote_port);
-
-  std::string remote_ip_address =
-      media::cast::GetIpAddress("Enter receiver IP.");
+  // Default parameters.
+  CommandLine* cmd = CommandLine::ForCurrentProcess();
+  std::string remote_ip_address = cmd->GetSwitchValueASCII(kSwitchAddress);
+  if (remote_ip_address.empty())
+    remote_ip_address = "127.0.0.1";
+  int remote_port = 0;
+  if (!base::StringToInt(cmd->GetSwitchValueASCII(kSwitchPort),
+                         &remote_port)) {
+    remote_port = 2344;
+  }
+  LOG(INFO) << "Sending to " << remote_ip_address << ":" << remote_port;
 
   media::cast::AudioSenderConfig audio_config =
       media::cast::GetAudioSenderConfig();
@@ -467,7 +553,6 @@
   net::IPEndPoint remote_endpoint =
       CreateUDPAddress(remote_ip_address, remote_port);
   transport_audio_config.base.ssrc = audio_config.sender_ssrc;
-  VLOG(0) << "Audio ssrc: " << transport_audio_config.base.ssrc;
   transport_audio_config.base.rtp_config = audio_config.rtp_config;
   transport_video_config.base.ssrc = video_config.sender_ssrc;
   transport_video_config.base.rtp_config = video_config.rtp_config;
@@ -519,51 +604,47 @@
                                    video_frame_input));
 
   // Set up event subscribers.
-  int logging_duration = media::cast::GetLoggingDuration();
   scoped_ptr<media::cast::EncodingEventSubscriber> video_event_subscriber;
   scoped_ptr<media::cast::EncodingEventSubscriber> audio_event_subscriber;
-  if (logging_duration > 0) {
-    bool compress = media::cast::CompressLogs();
-    std::string video_log_file_name(
-        media::cast::GetVideoLogFileDestination(compress));
-    std::string audio_log_file_name(
-        media::cast::GetAudioLogFileDestination(compress));
-    video_event_subscriber.reset(new media::cast::EncodingEventSubscriber(
-        media::cast::VIDEO_EVENT, 10000));
-    audio_event_subscriber.reset(new media::cast::EncodingEventSubscriber(
-        media::cast::AUDIO_EVENT, 10000));
-    cast_environment->Logging()->AddRawEventSubscriber(
-        video_event_subscriber.get());
-    cast_environment->Logging()->AddRawEventSubscriber(
-        audio_event_subscriber.get());
+  std::string video_log_file_name("/tmp/video_events.log.gz");
+  std::string audio_log_file_name("/tmp/audio_events.log.gz");
+  LOG(INFO) << "Logging audio events to: " << audio_log_file_name;
+  LOG(INFO) << "Logging video events to: " << video_log_file_name;
+  video_event_subscriber.reset(new media::cast::EncodingEventSubscriber(
+      media::cast::VIDEO_EVENT, 10000));
+  audio_event_subscriber.reset(new media::cast::EncodingEventSubscriber(
+      media::cast::AUDIO_EVENT, 10000));
+  cast_environment->Logging()->AddRawEventSubscriber(
+      video_event_subscriber.get());
+  cast_environment->Logging()->AddRawEventSubscriber(
+      audio_event_subscriber.get());
 
-    base::ScopedFILE video_log_file(fopen(video_log_file_name.c_str(), "w"));
-    if (!video_log_file) {
-      VLOG(1) << "Failed to open video log file for writing.";
-      exit(-1);
-    }
-
-    base::ScopedFILE audio_log_file(fopen(audio_log_file_name.c_str(), "w"));
-    if (!audio_log_file) {
-      VLOG(1) << "Failed to open audio log file for writing.";
-      exit(-1);
-    }
-
-    io_message_loop.message_loop_proxy()->PostDelayedTask(
-        FROM_HERE,
-        base::Bind(&WriteLogsToFileAndStopSubscribing,
-                   cast_environment,
-                   base::Passed(&video_event_subscriber),
-                   base::Passed(&audio_event_subscriber),
-                   base::Passed(&video_log_file),
-                   base::Passed(&audio_log_file),
-                   compress),
-        base::TimeDelta::FromSeconds(logging_duration));
+  base::ScopedFILE video_log_file(fopen(video_log_file_name.c_str(), "w"));
+  if (!video_log_file) {
+    VLOG(1) << "Failed to open video log file for writing.";
+    exit(-1);
   }
 
+  base::ScopedFILE audio_log_file(fopen(audio_log_file_name.c_str(), "w"));
+  if (!audio_log_file) {
+    VLOG(1) << "Failed to open audio log file for writing.";
+    exit(-1);
+  }
+
+  const int logging_duration_seconds = 300;
+  io_message_loop.message_loop_proxy()->PostDelayedTask(
+      FROM_HERE,
+      base::Bind(&WriteLogsToFileAndStopSubscribing,
+                 cast_environment,
+                 base::Passed(&video_event_subscriber),
+                 base::Passed(&audio_event_subscriber),
+                 base::Passed(&video_log_file),
+                 base::Passed(&audio_log_file)),
+      base::TimeDelta::FromSeconds(logging_duration_seconds));
+
   test_thread.message_loop_proxy()->PostTask(
       FROM_HERE,
-      base::Bind(&media::cast::SendProcess::SendFrame,
+      base::Bind(&media::cast::SendProcess::SendNextFrame,
                  base::Unretained(send_process.get())));
 
   io_message_loop.Run();
diff --git a/media/cast/test/utility/generate_barcode_video.cc b/media/cast/test/utility/generate_barcode_video.cc
index b84649e..e917ecd 100644
--- a/media/cast/test/utility/generate_barcode_video.cc
+++ b/media/cast/test/utility/generate_barcode_video.cc
@@ -5,13 +5,14 @@
 #include <cstdio>
 #include <cstdlib>
 
+#include "base/logging.h"
 #include "media/base/video_frame.h"
 #include "media/cast/test/utility/barcode.h"
 
 void DumpPlane(scoped_refptr<media::VideoFrame> frame,
                int plane) {
   for (int row = 0; row < frame->rows(plane); row++) {
-    CHECK_EQ(frame->row_bytes(plane),
+    CHECK_EQ(static_cast<size_t>(frame->row_bytes(plane)),
              fwrite(frame->data(plane) + frame->stride(plane) * row,
                     1,
                     frame->row_bytes(plane),
diff --git a/media/cast/test/utility/generate_timecode_audio.cc b/media/cast/test/utility/generate_timecode_audio.cc
index 2681a53..219a8e1 100644
--- a/media/cast/test/utility/generate_timecode_audio.cc
+++ b/media/cast/test/utility/generate_timecode_audio.cc
@@ -8,6 +8,7 @@
 #include <vector>
 
 #include "base/basictypes.h"
+#include "base/logging.h"
 #include "media/cast/test/utility/audio_utility.h"
 
 const size_t kSamplingFrequency = 48000;
diff --git a/media/cast/test/utility/udp_proxy.cc b/media/cast/test/utility/udp_proxy.cc
index 5936ef5..eed3744 100644
--- a/media/cast/test/utility/udp_proxy.cc
+++ b/media/cast/test/utility/udp_proxy.cc
@@ -21,10 +21,11 @@
 
 PacketPipe::PacketPipe() {}
 PacketPipe::~PacketPipe() {}
-void PacketPipe::InitOnIOThread() {
-  task_runner_ = base::MessageLoopProxy::current();
+void PacketPipe::InitOnIOThread(
+    const scoped_refptr<base::SingleThreadTaskRunner>& task_runner) {
+  task_runner_ = task_runner;
   if (pipe_) {
-    pipe_->InitOnIOThread();
+    pipe_->InitOnIOThread(task_runner);
   }
 }
 void PacketPipe::AppendToPipe(scoped_ptr<PacketPipe> pipe) {
@@ -181,8 +182,9 @@
       Schedule();
     }
   }
-  virtual void InitOnIOThread() OVERRIDE {
-    PacketPipe::InitOnIOThread();
+  virtual void InitOnIOThread(
+      const scoped_refptr<base::SingleThreadTaskRunner>& task_runner) OVERRIDE {
+    PacketPipe::InitOnIOThread(task_runner);
     // As we start the stream, assume that we are in a random
     // place between two extra delays, thus multiplier = 1.0;
     ScheduleExtraDelay(1.0);
@@ -261,8 +263,9 @@
         max_outage_time_(average_outage_time * 2),
         weak_factory_(this) {}
 
-  virtual void InitOnIOThread() OVERRIDE {
-    PacketPipe::InitOnIOThread();
+  virtual void InitOnIOThread(
+      const scoped_refptr<base::SingleThreadTaskRunner>& task_runner) OVERRIDE {
+    PacketPipe::InitOnIOThread(task_runner);
     Flip();
   }
 
@@ -444,8 +447,8 @@
     BuildPipe(&to_dest_pipe_, new PacketSender(socket_.get(), &destination_));
     BuildPipe(&from_dest_pipe_,
               new PacketSender(socket_.get(), &return_address_));
-    to_dest_pipe_->InitOnIOThread();
-    from_dest_pipe_->InitOnIOThread();
+    to_dest_pipe_->InitOnIOThread(base::MessageLoopProxy::current());
+    from_dest_pipe_->InitOnIOThread(base::MessageLoopProxy::current());
 
     VLOG(0) << "From:" << local_port_.ToString();
     VLOG(0) << "To:" << destination_.ToString();
@@ -463,8 +466,7 @@
     stop_event->Signal();
   }
 
-  void ProcessPacket(scoped_refptr<net::IOBuffer> recv_buf,
-                     int len) {
+  void ProcessPacket(scoped_refptr<net::IOBuffer> recv_buf, int len) {
     DCHECK_NE(len, net::ERR_IO_PENDING);
     VLOG(1) << "Got packet, len = " << len;
     if (len < 0) {
@@ -481,8 +483,7 @@
     }
   }
 
-  void ReadCallback(scoped_refptr<net::IOBuffer> recv_buf,
-                    int len) {
+  void ReadCallback(scoped_refptr<net::IOBuffer> recv_buf, int len) {
     ProcessPacket(recv_buf, len);
     PollRead();
   }
diff --git a/media/cast/test/utility/udp_proxy.h b/media/cast/test/utility/udp_proxy.h
index 322572a..41c686e 100644
--- a/media/cast/test/utility/udp_proxy.h
+++ b/media/cast/test/utility/udp_proxy.h
@@ -27,7 +27,9 @@
   PacketPipe();
   virtual ~PacketPipe();
   virtual void Send(scoped_ptr<transport::Packet> packet) = 0;
-  virtual void InitOnIOThread();
+  // Allows injection of fake test runner for testing.
+  virtual void InitOnIOThread(
+      const scoped_refptr<base::SingleThreadTaskRunner>& task_runner);
   virtual void AppendToPipe(scoped_ptr<PacketPipe> pipe);
  protected:
   scoped_ptr<PacketPipe> pipe_;
@@ -77,17 +79,15 @@
 // packet is asically |min_delay| + random( |random_delay| )
 // However, every now and then a delay of |big_delay| will be
 // inserted (roughly every |seconds_between_big_delay| seconds).
-scoped_ptr<PacketPipe> NewRandomSortedDelay(
-    double random_delay,
-    double big_delay,
-    double seconds_between_big_delay);
+scoped_ptr<PacketPipe> NewRandomSortedDelay(double random_delay,
+                                            double big_delay,
+                                            double seconds_between_big_delay);
 
 // This PacketPipe emulates network outages. It basically waits
 // for 0-2*|average_work_time| seconds, then kills the network for
 // 0-|2*average_outage_time| seconds. Then it starts over again.
-scoped_ptr<PacketPipe> NewNetworkGlitchPipe(
-    double average_work_time,
-    double average_outage_time);
+scoped_ptr<PacketPipe> NewNetworkGlitchPipe(double average_work_time,
+                                            double average_outage_time);
 
 // This method builds a stack of PacketPipes to emulate a reasonably
 // good wifi network. ~5mbit, 1% packet loss, ~3ms latency.
diff --git a/media/cast/test/utility/udp_proxy_main.cc b/media/cast/test/utility/udp_proxy_main.cc
index 4e196d7..68a885f 100644
--- a/media/cast/test/utility/udp_proxy_main.cc
+++ b/media/cast/test/utility/udp_proxy_main.cc
@@ -10,12 +10,13 @@
 #include "base/bind.h"
 #include "base/command_line.h"
 #include "base/logging.h"
+#include "base/message_loop/message_loop.h"
 #include "media/cast/test/utility/udp_proxy.h"
 
 int main(int argc, char** argv) {
   if (argc < 5) {
     fprintf(stderr,
-            "Usage: udp_proxy <localport> <remotehost> <remoteport> <type>\n",
+            "Usage: udp_proxy <localport> <remotehost> <remoteport> <type>\n"
             "Where type is one of: perfect, wifi, evil\n");
     exit(1);
   }
@@ -56,8 +57,6 @@
                                           in_pipe.Pass(),
                                           out_pipe.Pass(),
                                           NULL));
-  while (true) {
-    sleep(1000);
-  }
+  base::MessageLoop().Run();  // Run forever.
   return 1;
 }
diff --git a/media/cast/test/utility/utility.gyp b/media/cast/test/utility/utility.gyp
deleted file mode 100644
index e8deb80..0000000
--- a/media/cast/test/utility/utility.gyp
+++ /dev/null
@@ -1,91 +0,0 @@
-# Copyright 2013 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.
-
-{
-  'variables': {
-    'chromium_code': 1,
-  },
-  'targets': [
-    {
-      'target_name': 'cast_test_utility',
-      'type': 'static_library',
-      'include_dirs': [
-         '<(DEPTH)/',
-      ],
-      'dependencies': [
-        '../../cast_receiver.gyp:cast_receiver',
-        '../../transport/cast_transport.gyp:cast_transport',
-        '<(DEPTH)/ui/gfx/gfx.gyp:gfx',
-        '<(DEPTH)/ui/gfx/gfx.gyp:gfx_geometry',
-        '<(DEPTH)/testing/gtest.gyp:gtest',
-        '<(DEPTH)/third_party/libyuv/libyuv.gyp:libyuv',
-
-      ],
-      'sources': [
-        '<(DEPTH)/media/cast/test/fake_single_thread_task_runner.cc',
-        '<(DEPTH)/media/cast/test/fake_single_thread_task_runner.h',
-        'audio_utility.cc',
-        'audio_utility.h',
-        'barcode.cc',
-        'barcode.h',
-        'default_config.cc',
-        'default_config.h',
-        'in_process_receiver.cc',
-        'in_process_receiver.h',
-        'input_builder.cc',
-        'input_builder.h',
-        'standalone_cast_environment.cc',
-        'standalone_cast_environment.h',
-        'video_utility.cc',
-        'video_utility.h',
-        'udp_proxy.cc',
-        'udp_proxy.h',
-      ], # source
-    },
-    {
-      'target_name': 'generate_barcode_video',
-      'type': 'executable',
-      'include_dirs': [
-        '<(DEPTH)/',
-      ],
-      'dependencies': [
-        '<(DEPTH)/media/media.gyp:media',
-        '<(DEPTH)/media/cast/test/utility/utility.gyp:cast_test_utility',
-      ],
-      'sources': [
-        '<(DEPTH)/media/cast/test/utility/generate_barcode_video.cc',
-      ],
-    },
-    {
-      'target_name': 'generate_timecode_audio',
-      'type': 'executable',
-      'include_dirs': [
-        '<(DEPTH)/',
-      ],
-      'dependencies': [
-        '<(DEPTH)/media/cast/cast_config.gyp:cast_config',
-        '<(DEPTH)/media/cast/test/utility/utility.gyp:cast_test_utility',
-        '<(DEPTH)/media/cast/transport/cast_transport.gyp:cast_transport',
-        '<(DEPTH)/media/media.gyp:media',
-      ],
-      'sources': [
-        '<(DEPTH)/media/cast/test/utility/generate_timecode_audio.cc',
-      ],
-    },
-    {
-      'target_name': 'udp_proxy',
-      'type': 'executable',
-      'include_dirs': [
-        '<(DEPTH)/',
-      ],
-      'dependencies': [
-        '<(DEPTH)/media/media.gyp:media',
-        '<(DEPTH)/media/cast/test/utility/utility.gyp:cast_test_utility',
-      ],
-      'sources': [
-        '<(DEPTH)/media/cast/test/utility/udp_proxy_main.cc',
-      ],
-    },
-  ],
-}
diff --git a/media/cast/transport/cast_transport.gyp b/media/cast/transport/cast_transport.gyp
deleted file mode 100644
index 434658e..0000000
--- a/media/cast/transport/cast_transport.gyp
+++ /dev/null
@@ -1,49 +0,0 @@
-# Copyright 2013 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.
-
-{
-  'variables': {
-    'include_tests%': 1,
-    'chromium_code': 1,
-  },
-  'targets': [
-    {
-      'target_name': 'cast_transport',
-      'type': 'static_library',
-      'include_dirs': [
-        '<(DEPTH)/',
-      ],
-      'dependencies': [
-        '<(DEPTH)/base/base.gyp:base',
-        '<(DEPTH)/media/cast/logging/logging.gyp:cast_common_logging',
-        '<(DEPTH)/net/net.gyp:net',
-        'utility/utility.gyp:transport_utility',
-      ],
-      'sources': [
-        'cast_transport_config.cc',
-        'cast_transport_config.h',
-        'cast_transport_defines.h',
-        'cast_transport_sender.h',
-        'cast_transport_sender_impl.cc',
-        'cast_transport_sender_impl.h',
-        'pacing/paced_sender.cc',
-        'pacing/paced_sender.h',
-        'rtcp/rtcp_builder.cc',
-        'rtcp/rtcp_builder.h',
-        'rtp_sender/packet_storage/packet_storage.cc',
-        'rtp_sender/packet_storage/packet_storage.h',
-        'rtp_sender/rtp_packetizer/rtp_packetizer.cc',
-        'rtp_sender/rtp_packetizer/rtp_packetizer.h',
-        'rtp_sender/rtp_sender.cc',
-        'rtp_sender/rtp_sender.h',
-        'transport/udp_transport.cc',
-        'transport/udp_transport.h',
-        'transport_audio_sender.cc',
-        'transport_audio_sender.h',
-        'transport_video_sender.cc',
-        'transport_video_sender.h',
-      ], # source
-    },
-  ],  # targets,
-}
diff --git a/media/cast/transport/cast_transport_config.h b/media/cast/transport/cast_transport_config.h
index 9191606..cddd6d1 100644
--- a/media/cast/transport/cast_transport_config.h
+++ b/media/cast/transport/cast_transport_config.h
@@ -10,6 +10,7 @@
 
 #include "base/basictypes.h"
 #include "base/callback.h"
+#include "base/memory/linked_ptr.h"
 #include "base/memory/ref_counted.h"
 #include "media/cast/transport/cast_transport_defines.h"
 #include "net/base/ip_endpoint.h"
@@ -23,13 +24,10 @@
   kRtcpReducedSize,  // Reduced-size RTCP mode is described by RFC 5506.
 };
 
-enum VideoCodec {
-  kVp8,
-  kH264,
-  kVideoCodecLast = kH264
-};
+enum VideoCodec { kFakeSoftwareVideo, kVp8, kH264, kVideoCodecLast = kH264 };
 
 enum AudioCodec {
+  kFakeSoftwareAudio,
   kOpus,
   kPcm16,
   kExternalAudio,
@@ -97,16 +95,19 @@
 };
 
 typedef std::vector<uint8> Packet;
-typedef std::vector<Packet> PacketList;
+typedef scoped_refptr<base::RefCountedData<Packet> > PacketRef;
+typedef std::vector<PacketRef> PacketList;
 
 typedef base::Callback<void(scoped_ptr<Packet> packet)> PacketReceiverCallback;
 
 class PacketSender {
  public:
-  // All packets to be sent to the network will be delivered via these
-  // functions.
-  virtual bool SendPacket(const transport::Packet& packet) = 0;
-
+  // Send a packet to the network. Returns false if the network is blocked
+  // and we should wait for |cb| to be called. It is not allowed to called
+  // SendPacket again until |cb| has been called. Any other errors that
+  // occur will be reported through side channels, in such cases, this function
+  // will return true indicating that the channel is not blocked.
+  virtual bool SendPacket(PacketRef packet, const base::Closure& cb) = 0;
   virtual ~PacketSender() {}
 };
 
diff --git a/media/cast/transport/cast_transport_sender_impl_unittest.cc b/media/cast/transport/cast_transport_sender_impl_unittest.cc
index 6df5304..67eb39a 100644
--- a/media/cast/transport/cast_transport_sender_impl_unittest.cc
+++ b/media/cast/transport/cast_transport_sender_impl_unittest.cc
@@ -28,7 +28,9 @@
  public:
   FakePacketSender() {}
 
-  virtual bool SendPacket(const Packet& packet) OVERRIDE { return true; }
+  virtual bool SendPacket(PacketRef packet, const base::Closure& cb) OVERRIDE {
+    return true;
+  }
 };
 
 class CastTransportSenderImplTest : public ::testing::Test {
diff --git a/media/cast/transport/pacing/mock_paced_packet_sender.h b/media/cast/transport/pacing/mock_paced_packet_sender.h
index b120ade..62b33b7 100644
--- a/media/cast/transport/pacing/mock_paced_packet_sender.h
+++ b/media/cast/transport/pacing/mock_paced_packet_sender.h
@@ -19,7 +19,7 @@
 
   MOCK_METHOD1(SendPackets, bool(const PacketList& packets));
   MOCK_METHOD1(ResendPackets, bool(const PacketList& packets));
-  MOCK_METHOD1(SendRtcpPacket, bool(const Packet& packet));
+  MOCK_METHOD1(SendRtcpPacket, bool(PacketRef packet));
 };
 
 }  // namespace transport
diff --git a/media/cast/transport/pacing/paced_sender.cc b/media/cast/transport/pacing/paced_sender.cc
index 8c12811..0af66d2 100644
--- a/media/cast/transport/pacing/paced_sender.cc
+++ b/media/cast/transport/pacing/paced_sender.cc
@@ -13,10 +13,13 @@
 namespace transport {
 
 namespace {
+
 static const int64 kPacingIntervalMs = 10;
 // Each frame will be split into no more than kPacingMaxBurstsPerFrame
 // bursts of packets.
 static const size_t kPacingMaxBurstsPerFrame = 3;
+static const size_t kTargetBurstSize = 10;
+static const size_t kMaxBurstSize = 20;
 
 using media::cast::CastLoggingEvent;
 
@@ -43,10 +46,12 @@
       transport_task_runner_(transport_task_runner),
       audio_ssrc_(0),
       video_ssrc_(0),
-      burst_size_(1),
-      packets_sent_in_burst_(0),
+      max_burst_size_(kTargetBurstSize),
+      next_max_burst_size_(kTargetBurstSize),
+      next_next_max_burst_size_(kTargetBurstSize),
+      current_burst_size_(0),
+      state_(State_Unblocked),
       weak_factory_(this) {
-  ScheduleNextSend();
 }
 
 PacedSender::~PacedSender() {}
@@ -60,138 +65,156 @@
 }
 
 bool PacedSender::SendPackets(const PacketList& packets) {
-  return SendPacketsToTransport(packets, &packet_list_, false);
+  if (packets.empty()) {
+    return true;
+  }
+  packet_list_.insert(packet_list_.end(), packets.begin(), packets.end());
+  if (state_ == State_Unblocked) {
+    SendStoredPackets();
+  }
+  return true;
 }
 
 bool PacedSender::ResendPackets(const PacketList& packets) {
-  return SendPacketsToTransport(packets, &resend_packet_list_, true);
-}
-
-bool PacedSender::SendPacketsToTransport(const PacketList& packets,
-                                         PacketList* packets_not_sent,
-                                         bool retransmit) {
-  UpdateBurstSize(packets.size());
-
-  if (!packets_not_sent->empty()) {
-    packets_not_sent->insert(
-        packets_not_sent->end(), packets.begin(), packets.end());
+  if (packets.empty()) {
     return true;
   }
-
-  PacketList packets_to_send;
-  PacketList::const_iterator first_to_store_it = packets.begin();
-
-  size_t max_packets_to_send_now = burst_size_ - packets_sent_in_burst_;
-
-  if (max_packets_to_send_now > 0) {
-    size_t packets_to_send_now =
-        std::min(max_packets_to_send_now, packets.size());
-
-    std::advance(first_to_store_it, packets_to_send_now);
-    packets_to_send.insert(
-        packets_to_send.begin(), packets.begin(), first_to_store_it);
+  resend_packet_list_.insert(resend_packet_list_.end(),
+                             packets.begin(),
+                             packets.end());
+  if (state_ == State_Unblocked) {
+    SendStoredPackets();
   }
-  packets_not_sent->insert(
-      packets_not_sent->end(), first_to_store_it, packets.end());
-  packets_sent_in_burst_ = packets_to_send.size();
-  if (packets_to_send.empty())
-    return true;
-
-  for (PacketList::iterator it = packets_to_send.begin();
-       it != packets_to_send.end();
-       ++it) {
-    LogPacketEvent(*it, retransmit);
-  }
-
-  return TransmitPackets(packets_to_send);
+  return true;
 }
 
-bool PacedSender::SendRtcpPacket(const Packet& packet) {
-  // We pass the RTCP packets straight through.
-  return transport_->SendPacket(packet);
-}
+bool PacedSender::SendRtcpPacket(PacketRef packet) {
+  if (state_ == State_TransportBlocked) {
 
-void PacedSender::ScheduleNextSend() {
-  base::TimeDelta time_to_next =
-      time_last_process_ - clock_->NowTicks() +
-      base::TimeDelta::FromMilliseconds(kPacingIntervalMs);
-
-  time_to_next = std::max(time_to_next, base::TimeDelta());
-
-  transport_task_runner_->PostDelayedTask(
-      FROM_HERE,
-      base::Bind(&PacedSender::SendNextPacketBurst, weak_factory_.GetWeakPtr()),
-      time_to_next);
-}
-
-void PacedSender::SendNextPacketBurst() {
-  SendStoredPackets();
-  time_last_process_ = clock_->NowTicks();
-  ScheduleNextSend();
-}
-
-void PacedSender::SendStoredPackets() {
-  if (packet_list_.empty() && resend_packet_list_.empty())
-    return;
-
-  size_t packets_to_send = burst_size_;
-  PacketList packets_to_resend;
-
-  // Send our re-send packets first.
-  if (!resend_packet_list_.empty()) {
-    PacketList::iterator it = resend_packet_list_.begin();
-    size_t packets_to_send_now =
-        std::min(packets_to_send, resend_packet_list_.size());
-    std::advance(it, packets_to_send_now);
-
-    for (PacketList::iterator log_it = resend_packet_list_.begin();
-         log_it != it;
-         ++log_it) {
-      LogPacketEvent(*log_it, true);
-    }
-    packets_to_resend.insert(
-        packets_to_resend.begin(), resend_packet_list_.begin(), it);
-    resend_packet_list_.erase(resend_packet_list_.begin(), it);
-    packets_to_send -= packets_to_resend.size();
-  }
-  if (!packet_list_.empty() && packets_to_send > 0) {
-    PacketList::iterator it = packet_list_.begin();
-    size_t packets_to_send_now = std::min(packets_to_send, packet_list_.size());
-    std::advance(it, packets_to_send_now);
-
-    for (PacketList::iterator log_it = packet_list_.begin(); log_it != it;
-         ++log_it) {
-      LogPacketEvent(*log_it, false);
+    rtcp_packet_list_.push_back(packet);
+  } else {
+    // We pass the RTCP packets straight through.
+    if (!transport_->SendPacket(
+            packet,
+            base::Bind(&PacedSender::SendStoredPackets,
+                       weak_factory_.GetWeakPtr()))) {
+      state_ = State_TransportBlocked;
     }
 
-    packets_to_resend.insert(packets_to_resend.end(), packet_list_.begin(), it);
-    packet_list_.erase(packet_list_.begin(), it);
-
-    if (packet_list_.empty()) {
-      burst_size_ = 1;  // Reset burst size after we sent the last stored packet
-      packets_sent_in_burst_ = 0;
-    } else {
-      packets_sent_in_burst_ = packets_to_resend.size();
-    }
   }
-  TransmitPackets(packets_to_resend);
+  return true;
 }
 
-bool PacedSender::TransmitPackets(const PacketList& packets) {
-  bool ret = true;
-  for (size_t i = 0; i < packets.size(); i++) {
-    ret &= transport_->SendPacket(packets[i]);
+PacketRef PacedSender::GetNextPacket(PacketType* packet_type) {
+  PacketRef ret;
+  if (!rtcp_packet_list_.empty()) {
+    ret = rtcp_packet_list_.front();
+    rtcp_packet_list_.pop_front();
+    *packet_type = PacketType_RTCP;
+  } else if (!resend_packet_list_.empty()) {
+    ret = resend_packet_list_.front();
+    resend_packet_list_.pop_front();
+    *packet_type = PacketType_Resend;
+  } else if (!packet_list_.empty()) {
+    ret = packet_list_.front();
+    packet_list_.pop_front();
+    *packet_type = PacketType_Normal;
+  } else {
+    NOTREACHED();
   }
   return ret;
 }
 
-void PacedSender::UpdateBurstSize(size_t packets_to_send) {
-  packets_to_send = std::max(packets_to_send,
-                             resend_packet_list_.size() + packet_list_.size());
+bool PacedSender::empty() const {
+  return rtcp_packet_list_.empty() &&
+      resend_packet_list_.empty() &&
+      packet_list_.empty();
+}
 
-  packets_to_send += (kPacingMaxBurstsPerFrame - 1);  // Round up.
-  burst_size_ =
-      std::max(packets_to_send / kPacingMaxBurstsPerFrame, burst_size_);
+size_t PacedSender::size() const {
+  return rtcp_packet_list_.size() +
+      resend_packet_list_.size() +
+      packet_list_.size();
+}
+
+// This function can be called from three places:
+// 1. User called one of the Send* functions and we were in an unblocked state.
+// 2. state_ == State_TransportBlocked and the transport is calling us to
+//    let us know that it's ok to send again.
+// 3. state_ == State_BurstFull and there are still packets to send. In this
+//    case we called PostDelayedTask on this function to start a new burst.
+void PacedSender::SendStoredPackets() {
+  State previous_state = state_;
+  state_ = State_Unblocked;
+  if (empty()) {
+    return;
+  }
+
+  base::TimeTicks now = clock_->NowTicks();
+  // I don't actually trust that PostDelayTask(x - now) will mean that
+  // now >= x when the call happens, so check if the previous state was
+  // State_BurstFull too.
+  if (now >= burst_end_ || previous_state == State_BurstFull) {
+    // Start a new burst.
+    current_burst_size_ = 0;
+    burst_end_ = now + base::TimeDelta::FromMilliseconds(kPacingIntervalMs);
+
+    // The goal here is to try to send out the queued packets over the next
+    // three bursts, while trying to keep the burst size below 10 if possible.
+    // We have some evidence that sending more than 12 packets in a row doesn't
+    // work very well, but we don't actually know why yet. Sending out packets
+    // sooner is better than sending out packets later as that gives us more
+    // time to re-send them if needed. So if we have less than 30 packets, just
+    // send 10 at a time. If we have less than 60 packets, send n / 3 at a time.
+    // if we have more than 60, we send 20 at a time. 20 packets is ~24Mbit/s
+    // which is more bandwidth than the cast library should need, and sending
+    // out more data per second is unlikely to be helpful.
+    size_t max_burst_size = std::min(
+        kMaxBurstSize,
+        std::max(kTargetBurstSize, size() / kPacingMaxBurstsPerFrame));
+
+    // If the queue is long, issue a warning. Try to limit the number of
+    // warnings issued by only issuing the warning when the burst size
+    // grows. Otherwise we might get 100 warnings per second.
+    if (max_burst_size > next_next_max_burst_size_ && size() > 100) {
+      LOG(WARNING) << "Packet queue is very long:" << size();
+    }
+
+    max_burst_size_ = std::max(next_max_burst_size_, max_burst_size);
+    next_max_burst_size_ = std::max(next_next_max_burst_size_, max_burst_size);
+    next_next_max_burst_size_ = max_burst_size;
+  }
+
+  base::Closure cb = base::Bind(&PacedSender::SendStoredPackets,
+                                weak_factory_.GetWeakPtr());
+  while (!empty()) {
+    if (current_burst_size_ >= max_burst_size_) {
+      transport_task_runner_->PostDelayedTask(FROM_HERE,
+                                              cb,
+                                              burst_end_ - now);
+      state_ = State_BurstFull;
+      return;
+    }
+    PacketType packet_type;
+    PacketRef packet = GetNextPacket(&packet_type);
+
+    switch (packet_type) {
+      case PacketType_Resend:
+        LogPacketEvent(packet->data, true);
+        break;
+      case PacketType_Normal:
+        LogPacketEvent(packet->data, false);
+        break;
+      case PacketType_RTCP:
+        break;
+    }
+    if (!transport_->SendPacket(packet, cb)) {
+      state_ = State_TransportBlocked;
+      return;
+    }
+    current_burst_size_++;
+  }
+  state_ = State_Unblocked;
 }
 
 void PacedSender::LogPacketEvent(const Packet& packet, bool retransmit) {
diff --git a/media/cast/transport/pacing/paced_sender.h b/media/cast/transport/pacing/paced_sender.h
index 7140cab..238a951 100644
--- a/media/cast/transport/pacing/paced_sender.h
+++ b/media/cast/transport/pacing/paced_sender.h
@@ -31,10 +31,8 @@
  public:
   // Inform the pacer / sender of the total number of packets.
   virtual bool SendPackets(const PacketList& packets) = 0;
-
   virtual bool ResendPackets(const PacketList& packets) = 0;
-
-  virtual bool SendRtcpPacket(const Packet& packet) = 0;
+  virtual bool SendRtcpPacket(PacketRef packet) = 0;
 
   virtual ~PacedPacketSender() {}
 };
@@ -59,44 +57,65 @@
 
   // PacedPacketSender implementation.
   virtual bool SendPackets(const PacketList& packets) OVERRIDE;
-
   virtual bool ResendPackets(const PacketList& packets) OVERRIDE;
-
-  virtual bool SendRtcpPacket(const Packet& packet) OVERRIDE;
-
- protected:
-  // Schedule a delayed task on the main cast thread when it's time to send the
-  // next packet burst.
-  void ScheduleNextSend();
-
-  // Process any pending packets in the queue(s).
-  void SendNextPacketBurst();
+  virtual bool SendRtcpPacket(PacketRef packet) OVERRIDE;
 
  private:
-  bool SendPacketsToTransport(const PacketList& packets,
-                              PacketList* packets_not_sent,
-                              bool retransmit);
-
   // Actually sends the packets to the transport.
-  bool TransmitPackets(const PacketList& packets);
   void SendStoredPackets();
-  void UpdateBurstSize(size_t num_of_packets);
-
   void LogPacketEvent(const Packet& packet, bool retransmit);
 
+  enum PacketType {
+    PacketType_RTCP,
+    PacketType_Resend,
+    PacketType_Normal
+  };
+  enum State {
+    // In an unblocked state, we can send more packets.
+    // We have to check the current time against |burst_end_| to see if we are
+    // appending to the current burst or if we can start a new one.
+    State_Unblocked,
+    // In this state, we are waiting for a callback from the udp transport.
+    // This happens when the OS-level buffer is full. Once we receive the
+    // callback, we go to State_Unblocked and see if we can write more packets
+    // to the current burst. (Or the next burst if enough time has passed.)
+    State_TransportBlocked,
+    // Once we've written enough packets for a time slice, we go into this
+    // state and PostDelayTask a call to ourselves to wake up when we can
+    // send more data.
+    State_BurstFull
+  };
+
+  bool empty() const;
+  size_t size() const;
+
+  // Returns the next packet to send. RTCP packets have highest priority,
+  // resend packets have second highest priority and then comes everything
+  // else.
+  PacketRef GetNextPacket(PacketType* packet_type);
+
   base::TickClock* const clock_;  // Not owned by this class.
   LoggingImpl* const logging_;    // Not owned by this class.
   PacketSender* transport_;       // Not owned by this class.
   scoped_refptr<base::SingleThreadTaskRunner> transport_task_runner_;
   uint32 audio_ssrc_;
   uint32 video_ssrc_;
-  size_t burst_size_;
-  size_t packets_sent_in_burst_;
-  base::TimeTicks time_last_process_;
   // Note: We can't combine the |packet_list_| and the |resend_packet_list_|
   // since then we might get reordering of the retransmitted packets.
-  PacketList packet_list_;
-  PacketList resend_packet_list_;
+  std::deque<PacketRef> rtcp_packet_list_;
+  std::deque<PacketRef> resend_packet_list_;
+  std::deque<PacketRef> packet_list_;
+
+  // Maximum burst size for the next three bursts.
+  size_t max_burst_size_;
+  size_t next_max_burst_size_;
+  size_t next_next_max_burst_size_;
+  // Number of packets already sent in the current burst.
+  size_t current_burst_size_;
+  // This is when the current burst ends.
+  base::TimeTicks burst_end_;
+
+  State state_;
 
   // NOTE: Weak pointers must be invalidated before all other member variables.
   base::WeakPtrFactory<PacedSender> weak_factory_;
diff --git a/media/cast/transport/pacing/paced_sender_unittest.cc b/media/cast/transport/pacing/paced_sender_unittest.cc
index 16dcd0f..e26032f 100644
--- a/media/cast/transport/pacing/paced_sender_unittest.cc
+++ b/media/cast/transport/pacing/paced_sender_unittest.cc
@@ -31,11 +31,11 @@
  public:
   TestPacketSender() {}
 
-  virtual bool SendPacket(const Packet& packet) OVERRIDE {
+  virtual bool SendPacket(PacketRef packet, const base::Closure& cb) OVERRIDE {
     EXPECT_FALSE(expected_packet_size_.empty());
     size_t expected_packet_size = expected_packet_size_.front();
     expected_packet_size_.pop_front();
-    EXPECT_EQ(expected_packet_size, packet.size());
+    EXPECT_EQ(expected_packet_size, packet->data.size());
     return true;
   }
 
@@ -78,10 +78,12 @@
     DCHECK_GE(packet_size, 12u);
     PacketList packets;
     for (int i = 0; i < num_of_packets_in_frame; ++i) {
-      Packet packet(packet_size, kValue);
+      PacketRef packet(new base::RefCountedData<Packet>);
+      packet->data.resize(packet_size, kValue);
       // Write ssrc to packet so that it can be recognized as a
       // "video frame" for logging purposes.
-      base::BigEndianWriter writer(reinterpret_cast<char*>(&packet[8]), 4);
+      base::BigEndianWriter writer(
+          reinterpret_cast<char*>(&packet->data[8]), 4);
       bool success = writer.WriteU32(audio ? kAudioSsrc : kVideoSsrc);
       DCHECK(success);
       packets.push_back(packet);
@@ -114,25 +116,27 @@
 };
 
 TEST_F(PacedSenderTest, PassThroughRtcp) {
-  mock_transport_.AddExpectedSize(kSize1, 1);
+  mock_transport_.AddExpectedSize(kSize1, 2);
   PacketList packets = CreatePacketList(kSize1, 1, true);
 
   EXPECT_TRUE(paced_sender_->SendPackets(packets));
   EXPECT_TRUE(paced_sender_->ResendPackets(packets));
 
   mock_transport_.AddExpectedSize(kSize2, 1);
-  EXPECT_TRUE(paced_sender_->SendRtcpPacket(Packet(kSize2, kValue)));
+  Packet tmp(kSize2, kValue);
+  EXPECT_TRUE(paced_sender_->SendRtcpPacket(
+      new base::RefCountedData<Packet>(tmp)));
 }
 
 TEST_F(PacedSenderTest, BasicPace) {
-  int num_of_packets = 9;
+  int num_of_packets = 27;
   PacketList packets = CreatePacketList(kSize1, num_of_packets, false);
 
-  mock_transport_.AddExpectedSize(kSize1, 3);
+  mock_transport_.AddExpectedSize(kSize1, 10);
   EXPECT_TRUE(paced_sender_->SendPackets(packets));
 
   // Check that we get the next burst.
-  mock_transport_.AddExpectedSize(kSize1, 3);
+  mock_transport_.AddExpectedSize(kSize1, 10);
 
   base::TimeDelta timeout = base::TimeDelta::FromMilliseconds(10);
   testing_clock_.Advance(timeout);
@@ -144,7 +148,7 @@
   task_runner_->RunTasks();
 
   // Check that we get the next burst.
-  mock_transport_.AddExpectedSize(kSize1, 3);
+  mock_transport_.AddExpectedSize(kSize1, 7);
   testing_clock_.Advance(timeout);
   task_runner_->RunTasks();
 
@@ -169,8 +173,8 @@
 TEST_F(PacedSenderTest, PaceWithNack) {
   // Testing what happen when we get multiple NACK requests for a fully lost
   // frames just as we sent the first packets in a frame.
-  int num_of_packets_in_frame = 9;
-  int num_of_packets_in_nack = 9;
+  int num_of_packets_in_frame = 12;
+  int num_of_packets_in_nack = 12;
 
   PacketList first_frame_packets =
       CreatePacketList(kSize1, num_of_packets_in_frame, false);
@@ -182,14 +186,14 @@
       CreatePacketList(kNackSize, num_of_packets_in_nack, false);
 
   // Check that the first burst of the frame go out on the wire.
-  mock_transport_.AddExpectedSize(kSize1, 3);
+  mock_transport_.AddExpectedSize(kSize1, 10);
   EXPECT_TRUE(paced_sender_->SendPackets(first_frame_packets));
 
   // Add first NACK request.
   EXPECT_TRUE(paced_sender_->ResendPackets(nack_packets));
 
   // Check that we get the first NACK burst.
-  mock_transport_.AddExpectedSize(kNackSize, 5);
+  mock_transport_.AddExpectedSize(kNackSize, 10);
   base::TimeDelta timeout = base::TimeDelta::FromMilliseconds(10);
   testing_clock_.Advance(timeout);
   task_runner_->RunTasks();
@@ -198,28 +202,23 @@
   EXPECT_TRUE(paced_sender_->ResendPackets(nack_packets));
 
   // Check that we get the next NACK burst.
-  mock_transport_.AddExpectedSize(kNackSize, 7);
+  mock_transport_.AddExpectedSize(kNackSize, 10);
   testing_clock_.Advance(timeout);
   task_runner_->RunTasks();
 
-  // End of NACK plus a packet from the oldest frame.
-  mock_transport_.AddExpectedSize(kNackSize, 6);
-  mock_transport_.AddExpectedSize(kSize1, 1);
+  // End of NACK plus two packets from the oldest frame.
+  mock_transport_.AddExpectedSize(kNackSize, 4);
+  mock_transport_.AddExpectedSize(kSize1, 2);
   testing_clock_.Advance(timeout);
   task_runner_->RunTasks();
 
   // Add second frame.
   // Make sure we don't delay the second frame due to the previous packets.
+  mock_transport_.AddExpectedSize(kSize2, 10);
   EXPECT_TRUE(paced_sender_->SendPackets(second_frame_packets));
 
-  // Last packets of frame 1 and the first packets of frame 2.
-  mock_transport_.AddExpectedSize(kSize1, 5);
-  mock_transport_.AddExpectedSize(kSize2, 2);
-  testing_clock_.Advance(timeout);
-  task_runner_->RunTasks();
-
   // Last packets of frame 2.
-  mock_transport_.AddExpectedSize(kSize2, 7);
+  mock_transport_.AddExpectedSize(kSize2, 2);
   testing_clock_.Advance(timeout);
   task_runner_->RunTasks();
 
@@ -259,7 +258,7 @@
 TEST_F(PacedSenderTest, PaceWith60fps) {
   // Testing what happen when we get multiple NACK requests for a fully lost
   // frames just as we sent the first packets in a frame.
-  int num_of_packets_in_frame = 9;
+  int num_of_packets_in_frame = 17;
 
   PacketList first_frame_packets =
       CreatePacketList(kSize1, num_of_packets_in_frame, false);
@@ -276,21 +275,21 @@
   base::TimeDelta timeout_10ms = base::TimeDelta::FromMilliseconds(10);
 
   // Check that the first burst of the frame go out on the wire.
-  mock_transport_.AddExpectedSize(kSize1, 3);
+  mock_transport_.AddExpectedSize(kSize1, 10);
   EXPECT_TRUE(paced_sender_->SendPackets(first_frame_packets));
 
-  mock_transport_.AddExpectedSize(kSize1, 3);
+  mock_transport_.AddExpectedSize(kSize1, 7);
   testing_clock_.Advance(timeout_10ms);
   task_runner_->RunTasks();
 
   testing_clock_.Advance(base::TimeDelta::FromMilliseconds(6));
 
   // Add second frame, after 16 ms.
+  mock_transport_.AddExpectedSize(kSize2, 3);
   EXPECT_TRUE(paced_sender_->SendPackets(second_frame_packets));
   testing_clock_.Advance(base::TimeDelta::FromMilliseconds(4));
 
-  mock_transport_.AddExpectedSize(kSize1, 3);
-  mock_transport_.AddExpectedSize(kSize2, 1);
+  mock_transport_.AddExpectedSize(kSize2, 10);
   testing_clock_.Advance(timeout_10ms);
   task_runner_->RunTasks();
 
@@ -301,26 +300,25 @@
   testing_clock_.Advance(base::TimeDelta::FromMilliseconds(3));
 
   // Add third frame, after 33 ms.
+  mock_transport_.AddExpectedSize(kSize3, 6);
   EXPECT_TRUE(paced_sender_->SendPackets(third_frame_packets));
-  mock_transport_.AddExpectedSize(kSize2, 4);
-  mock_transport_.AddExpectedSize(kSize3, 1);
 
+  mock_transport_.AddExpectedSize(kSize3, 10);
   testing_clock_.Advance(base::TimeDelta::FromMilliseconds(7));
   task_runner_->RunTasks();
 
   // Add fourth frame, after 50 ms.
   EXPECT_TRUE(paced_sender_->SendPackets(fourth_frame_packets));
 
-  mock_transport_.AddExpectedSize(kSize3, 6);
+  mock_transport_.AddExpectedSize(kSize3, 1);
+  mock_transport_.AddExpectedSize(kSize4, 9);
   testing_clock_.Advance(timeout_10ms);
   task_runner_->RunTasks();
 
-  mock_transport_.AddExpectedSize(kSize3, 2);
-  mock_transport_.AddExpectedSize(kSize4, 4);
+  mock_transport_.AddExpectedSize(kSize4, 8);
   testing_clock_.Advance(timeout_10ms);
   task_runner_->RunTasks();
 
-  mock_transport_.AddExpectedSize(kSize4, 5);
   testing_clock_.Advance(timeout_10ms);
   task_runner_->RunTasks();
 
diff --git a/media/cast/transport/rtcp/rtcp_builder.cc b/media/cast/transport/rtcp/rtcp_builder.cc
index b0f7351..0431a11 100644
--- a/media/cast/transport/rtcp/rtcp_builder.cc
+++ b/media/cast/transport/rtcp/rtcp_builder.cc
@@ -52,22 +52,22 @@
   }
   ssrc_ = sending_ssrc;
   c_name_ = c_name;
-  Packet packet;
-  packet.reserve(kMaxIpPacketSize);
+  PacketRef packet(new base::RefCountedData<Packet>);
+  packet->data.reserve(kMaxIpPacketSize);
   if (packet_type_flags & kRtcpSr) {
-    if (!BuildSR(sender_info, &packet)) return;
-    if (!BuildSdec(&packet)) return;
+    if (!BuildSR(sender_info, &packet->data)) return;
+    if (!BuildSdec(&packet->data)) return;
   }
   if (packet_type_flags & kRtcpBye) {
-    if (!BuildBye(&packet)) return;
+    if (!BuildBye(&packet->data)) return;
   }
   if (packet_type_flags & kRtcpDlrr) {
-    if (!BuildDlrrRb(dlrr, &packet)) return;
+    if (!BuildDlrrRb(dlrr, &packet->data)) return;
   }
   if (packet_type_flags & kRtcpSenderLog) {
-    if (!BuildSenderLog(sender_log, &packet)) return;
+    if (!BuildSenderLog(sender_log, &packet->data)) return;
   }
-  if (packet.empty())
+  if (packet->data.empty())
     return;  // Sanity - don't send empty packets.
 
   transport_->SendRtcpPacket(packet);
diff --git a/media/cast/transport/rtp_sender/packet_storage/packet_storage.cc b/media/cast/transport/rtp_sender/packet_storage/packet_storage.cc
index 519bdd0..ea766d0 100644
--- a/media/cast/transport/rtp_sender/packet_storage/packet_storage.cc
+++ b/media/cast/transport/rtp_sender/packet_storage/packet_storage.cc
@@ -18,25 +18,6 @@
 typedef PacketMap::iterator PacketMapIterator;
 typedef TimeToPacketMap::iterator TimeToPacketIterator;
 
-class StoredPacket {
- public:
-  StoredPacket() { packet_.reserve(kMaxIpPacketSize); }
-
-  void Save(const Packet* packet) {
-    DCHECK_LT(packet->size(), kMaxIpPacketSize) << "Invalid argument";
-    packet_.clear();
-    packet_.insert(packet_.begin(), packet->begin(), packet->end());
-  }
-
-  void GetCopy(PacketList* packets) {
-    packets->push_back(Packet(packet_.begin(), packet_.end()));
-  }
-
- private:
-  Packet packet_;
-
-  DISALLOW_COPY_AND_ASSIGN(StoredPacket);
-};
 
 PacketStorage::PacketStorage(base::TickClock* clock, int max_time_stored_ms)
     : clock_(clock) {
@@ -45,16 +26,6 @@
 }
 
 PacketStorage::~PacketStorage() {
-  time_to_packet_map_.clear();
-
-  PacketMapIterator store_it = stored_packets_.begin();
-  for (; store_it != stored_packets_.end();
-       store_it = stored_packets_.begin()) {
-    stored_packets_.erase(store_it);
-  }
-  while (!free_packets_.empty()) {
-    free_packets_.pop_front();
-  }
 }
 
 void PacketStorage::CleanupOldPackets(base::TimeTicks now) {
@@ -68,10 +39,8 @@
     DCHECK(store_it != stored_packets_.end()) << "Invalid state";
     time_to_packet_map_.erase(time_it);
     // Save the pointer.
-    linked_ptr<StoredPacket> storted_packet = store_it->second;
+    PacketRef storted_packet = store_it->second;
     stored_packets_.erase(store_it);
-    // Add this packet to the free list for later re-use.
-    free_packets_.push_back(storted_packet);
     time_it = time_to_packet_map_.begin();
   }
 
@@ -87,17 +56,15 @@
     DCHECK(store_it != stored_packets_.end()) << "Invalid state";
     time_to_packet_map_.erase(time_it);
     // Save the pointer.
-    linked_ptr<StoredPacket> storted_packet = store_it->second;
+    PacketRef storted_packet = store_it->second;
     stored_packets_.erase(store_it);
-    // Add this packet to the free list for later re-use.
-    free_packets_.push_back(storted_packet);
     time_it = time_to_packet_map_.begin();
   }
 }
 
 void PacketStorage::StorePacket(uint32 frame_id,
                                 uint16 packet_id,
-                                const Packet* packet) {
+                                PacketRef packet) {
   base::TimeTicks now = clock_->NowTicks();
   CleanupOldPackets(now);
 
@@ -109,23 +76,13 @@
     DCHECK(false) << "Invalid state";
     return;
   }
-  linked_ptr<StoredPacket> stored_packet;
-  if (free_packets_.empty()) {
-    // No previous allocated packets allocate one.
-    stored_packet.reset(new StoredPacket());
-  } else {
-    // Re-use previous allocated packet.
-    stored_packet = free_packets_.front();
-    free_packets_.pop_front();
-  }
-  stored_packet->Save(packet);
-  stored_packets_[index] = stored_packet;
+  stored_packets_[index] = packet;
   time_to_packet_map_.insert(std::make_pair(now, index));
 }
 
-PacketList PacketStorage::GetPackets(
-    const MissingFramesAndPacketsMap& missing_frames_and_packets) {
-  PacketList packets_to_resend;
+void PacketStorage::GetPackets(
+    const MissingFramesAndPacketsMap& missing_frames_and_packets,
+    PacketList* packets_to_resend) {
 
   // Iterate over all frames in the list.
   for (MissingFramesAndPacketsMap::const_iterator it =
@@ -141,7 +98,7 @@
       uint16 packet_id = 0;
       do {
         // Get packet from storage.
-        success = GetPacket(frame_id, packet_id, &packets_to_resend);
+        success = GetPacket(frame_id, packet_id, packets_to_resend);
         ++packet_id;
       } while (success);
     } else {
@@ -149,11 +106,10 @@
       for (PacketIdSet::const_iterator set_it = packets_set.begin();
            set_it != packets_set.end();
            ++set_it) {
-        GetPacket(frame_id, *set_it, &packets_to_resend);
+        GetPacket(frame_id, *set_it, packets_to_resend);
       }
     }
   }
-  return packets_to_resend;
 }
 
 bool PacketStorage::GetPacket(uint8 frame_id,
@@ -165,7 +121,19 @@
   if (it == stored_packets_.end()) {
     return false;
   }
-  it->second->GetCopy(packets);
+  // Minor trickery, the caller (rtp_sender.cc) really wants a copy of the
+  // packet so that it can update the sequence number before it sends it to
+  // the transport. If the packet only has one ref, we can safely let
+  // rtp_sender.cc have our packet and modify it. If it has more references
+  // then we must return a copy of it instead. This should really only happen
+  // when rtp_sender.cc is trying to re-send a packet that is already in the
+  // queue to sent.
+  if (it->second->HasOneRef()) {
+    packets->push_back(it->second);
+  } else {
+    packets->push_back(make_scoped_refptr(
+        new base::RefCountedData<Packet>(it->second->data)));
+  }
   return true;
 }
 
diff --git a/media/cast/transport/rtp_sender/packet_storage/packet_storage.h b/media/cast/transport/rtp_sender/packet_storage/packet_storage.h
index 40c451d..cd6f70c 100644
--- a/media/cast/transport/rtp_sender/packet_storage/packet_storage.h
+++ b/media/cast/transport/rtp_sender/packet_storage/packet_storage.h
@@ -22,7 +22,7 @@
 namespace transport {
 
 class StoredPacket;
-typedef std::map<uint32, linked_ptr<StoredPacket> > PacketMap;
+typedef std::map<uint32, PacketRef> PacketMap;
 typedef std::multimap<base::TimeTicks, uint32> TimeToPacketMap;
 
 class PacketStorage {
@@ -32,11 +32,12 @@
   PacketStorage(base::TickClock* clock, int max_time_stored_ms);
   virtual ~PacketStorage();
 
-  void StorePacket(uint32 frame_id, uint16 packet_id, const Packet* packet);
+  void StorePacket(uint32 frame_id, uint16 packet_id, PacketRef packet);
 
   // Copies all missing packets into the packet list.
-  PacketList GetPackets(
-      const MissingFramesAndPacketsMap& missing_frames_and_packets);
+  void GetPackets(
+      const MissingFramesAndPacketsMap& missing_frames_and_packets,
+      PacketList* packets_to_resend);
 
   // Copies packet into the packet list.
   bool GetPacket(uint8 frame_id, uint16 packet_id, PacketList* packets);
@@ -48,7 +49,6 @@
   base::TimeDelta max_time_stored_;
   PacketMap stored_packets_;
   TimeToPacketMap time_to_packet_map_;
-  std::list<linked_ptr<StoredPacket> > free_packets_;
 
   DISALLOW_COPY_AND_ASSIGN(PacketStorage);
 };
diff --git a/media/cast/transport/rtp_sender/packet_storage/packet_storage_unittest.cc b/media/cast/transport/rtp_sender/packet_storage/packet_storage_unittest.cc
index 73faad0..b695349 100644
--- a/media/cast/transport/rtp_sender/packet_storage/packet_storage_unittest.cc
+++ b/media/cast/transport/rtp_sender/packet_storage/packet_storage_unittest.cc
@@ -40,7 +40,9 @@
   PacketList packets;
   for (uint32 frame_id = 0; frame_id < 30; ++frame_id) {
     for (uint16 packet_id = 0; packet_id < 10; ++packet_id) {
-      packet_storage_.StorePacket(frame_id, packet_id, &test_123);
+      packet_storage_.StorePacket(frame_id,
+                                  packet_id,
+                                  new base::RefCountedData<Packet>(test_123));
     }
     testing_clock_.Advance(kDeltaBetweenFrames);
   }
@@ -56,7 +58,7 @@
   for (uint32 frame_id = 14; frame_id < 30; ++frame_id) {
     for (uint16 packet_id = 0; packet_id < 10; ++packet_id) {
       EXPECT_TRUE(packet_storage_.GetPacket(frame_id, packet_id, &packets));
-      EXPECT_TRUE(packets.front() == test_123);
+      EXPECT_TRUE(packets.front()->data == test_123);
     }
   }
 }
@@ -68,7 +70,9 @@
   uint32 frame_id = 0;
   for (uint16 packet_id = 0; packet_id <= PacketStorage::kMaxStoredPackets;
        ++packet_id) {
-    packet_storage_.StorePacket(frame_id, packet_id, &test_123);
+    packet_storage_.StorePacket(frame_id,
+                                packet_id,
+                                new base::RefCountedData<Packet>(test_123));
   }
   Packet packet;
   uint16 packet_id = 0;
@@ -77,7 +81,7 @@
   ++packet_id;
   for (; packet_id <= PacketStorage::kMaxStoredPackets; ++packet_id) {
     EXPECT_TRUE(packet_storage_.GetPacket(frame_id, packet_id, &packets));
-    EXPECT_TRUE(packets.back() == test_123);
+    EXPECT_TRUE(packets.back()->data == test_123);
   }
 }
 
@@ -90,9 +94,13 @@
     for (uint16 packet_id = 0; packet_id < 10; ++packet_id) {
       // Every other packet.
       if (packet_id % 2 == 0) {
-        packet_storage_.StorePacket(frame_id, packet_id, &test_123);
+        packet_storage_.StorePacket(frame_id,
+                                    packet_id,
+                                    new base::RefCountedData<Packet>(test_123));
       } else {
-        packet_storage_.StorePacket(frame_id, packet_id, &test_234);
+        packet_storage_.StorePacket(frame_id,
+                                    packet_id,
+                                    new base::RefCountedData<Packet>(test_234));
       }
     }
     testing_clock_.Advance(kDeltaBetweenFrames);
@@ -102,9 +110,9 @@
       EXPECT_TRUE(packet_storage_.GetPacket(frame_id, packet_id, &packets));
       // Every other packet.
       if (packet_id % 2 == 0) {
-        EXPECT_TRUE(packets.back() == test_123);
+        EXPECT_TRUE(packets.back()->data == test_123);
       } else {
-        EXPECT_TRUE(packets.back() == test_234);
+        EXPECT_TRUE(packets.back()->data == test_234);
       }
     }
   }
diff --git a/media/cast/transport/rtp_sender/rtp_packetizer/rtp_packetizer.cc b/media/cast/transport/rtp_sender/rtp_packetizer/rtp_packetizer.cc
index 20cc333..4d62b87 100644
--- a/media/cast/transport/rtp_sender/rtp_packetizer/rtp_packetizer.cc
+++ b/media/cast/transport/rtp_sender/rtp_packetizer/rtp_packetizer.cc
@@ -114,31 +114,33 @@
   size_t remaining_size = data.size();
   std::string::const_iterator data_iter = data.begin();
   while (remaining_size > 0) {
-    Packet packet;
+    PacketRef packet(new base::RefCountedData<Packet>);
 
     if (remaining_size < payload_length) {
       payload_length = remaining_size;
     }
     remaining_size -= payload_length;
-    BuildCommonRTPheader(&packet, remaining_size == 0, timestamp);
+    BuildCommonRTPheader(&packet->data, remaining_size == 0, timestamp);
 
     // Build Cast header.
-    packet.push_back((is_key ? kCastKeyFrameBitMask : 0) |
-                     kCastReferenceFrameIdBitMask);
-    packet.push_back(frame_id);
-    size_t start_size = packet.size();
-    packet.resize(start_size + 4);
+    packet->data.push_back((is_key ? kCastKeyFrameBitMask : 0) |
+                           kCastReferenceFrameIdBitMask);
+    packet->data.push_back(frame_id);
+    size_t start_size = packet->data.size();
+    packet->data.resize(start_size + 4);
     base::BigEndianWriter big_endian_writer(
-        reinterpret_cast<char*>(&(packet[start_size])), 4);
+        reinterpret_cast<char*>(&(packet->data[start_size])), 4);
     big_endian_writer.WriteU16(packet_id_);
     big_endian_writer.WriteU16(static_cast<uint16>(num_packets - 1));
-    packet.push_back(static_cast<uint8>(reference_frame_id));
+    packet->data.push_back(static_cast<uint8>(reference_frame_id));
 
     // Copy payload data.
-    packet.insert(packet.end(), data_iter, data_iter + payload_length);
+    packet->data.insert(packet->data.end(),
+                        data_iter,
+                        data_iter + payload_length);
 
     // Store packet.
-    packet_storage_->StorePacket(frame_id, packet_id_, &packet);
+    packet_storage_->StorePacket(frame_id, packet_id_, packet);
     ++packet_id_;
     data_iter += payload_length;
 
diff --git a/media/cast/transport/rtp_sender/rtp_packetizer/rtp_packetizer_unittest.cc b/media/cast/transport/rtp_sender/rtp_packetizer/rtp_packetizer_unittest.cc
index 4b7d096..40dddde 100644
--- a/media/cast/transport/rtp_sender/rtp_packetizer/rtp_packetizer_unittest.cc
+++ b/media/cast/transport/rtp_sender/rtp_packetizer/rtp_packetizer_unittest.cc
@@ -63,9 +63,9 @@
     EXPECT_EQ(expected_frame_id_ - 1u, rtp_header.reference_frame_id);
   }
 
-  virtual bool SendPacket(const transport::Packet& packet) OVERRIDE {
+  virtual bool SendPacket(PacketRef packet, const base::Closure& cb) OVERRIDE {
     ++packets_sent_;
-    RtpHeaderParser parser(packet.data(), packet.size());
+    RtpHeaderParser parser(packet->data.data(), packet->data.size());
     RtpCastTestHeader rtp_header;
     parser.Parse(&rtp_header);
     VerifyRtpHeader(rtp_header);
diff --git a/media/cast/transport/rtp_sender/rtp_sender.cc b/media/cast/transport/rtp_sender/rtp_sender.cc
index 4048e30..f175285 100644
--- a/media/cast/transport/rtp_sender/rtp_sender.cc
+++ b/media/cast/transport/rtp_sender/rtp_sender.cc
@@ -96,8 +96,8 @@
           VLOG(3) << "Resend " << static_cast<int>(frame_id) << ":"
                   << packet_id;
           // Set a unique incremental sequence number for every packet.
-          Packet& packet = packets_to_resend.back();
-          UpdateSequenceNumber(&packet);
+          PacketRef packet = packets_to_resend.back();
+          UpdateSequenceNumber(&packet->data);
           // Set the size as correspond to each frame.
           ++packet_id;
         }
@@ -114,8 +114,8 @@
         if (success) {
           VLOG(3) << "Resend " << static_cast<int>(frame_id) << ":"
                   << packet_id;
-          Packet& packet = packets_to_resend.back();
-          UpdateSequenceNumber(&packet);
+          PacketRef packet = packets_to_resend.back();
+          UpdateSequenceNumber(&packet->data);
         }
       }
     }
diff --git a/media/cast/transport/transport/udp_transport.cc b/media/cast/transport/transport/udp_transport.cc
index 1246451..578b959 100644
--- a/media/cast/transport/transport/udp_transport.cc
+++ b/media/cast/transport/transport/udp_transport.cc
@@ -139,45 +139,56 @@
   }
 }
 
-bool UdpTransport::SendPacket(const Packet& packet) {
+bool UdpTransport::SendPacket(PacketRef packet, const base::Closure& cb) {
   DCHECK(io_thread_proxy_->RunsTasksOnCurrentThread());
 
+  DCHECK(!send_pending_);
   if (send_pending_) {
     VLOG(1) << "Cannot send because of pending IO.";
-    return false;
+    return true;
   }
 
-  // TODO(hclam): This interface should take a net::IOBuffer to minimize
-  // memcpy.
   scoped_refptr<net::IOBuffer> buf =
-      new net::IOBuffer(static_cast<int>(packet.size()));
-  memcpy(buf->data(), &packet[0], packet.size());
+      new net::WrappedIOBuffer(reinterpret_cast<char*>(&packet->data.front()));
 
-  int ret;
+  int result;
+  base::Callback<void(int)> callback = base::Bind(&UdpTransport::OnSent,
+                                                  weak_factory_.GetWeakPtr(),
+                                                  buf,
+                                                  packet,
+                                                  cb);
   if (client_connected_) {
     // If we called Connect() before we must call Write() instead of
     // SendTo(). Otherwise on some platforms we might get
     // ERR_SOCKET_IS_CONNECTED.
-    ret = udp_socket_->Write(
-      buf,
-      static_cast<int>(packet.size()),
-      base::Bind(&UdpTransport::OnSent, weak_factory_.GetWeakPtr(), buf));
+    result = udp_socket_->Write(buf,
+                                static_cast<int>(packet->data.size()),
+                                callback);
   } else if (!IsEmpty(remote_addr_)) {
-    ret = udp_socket_->SendTo(
-      buf,
-      static_cast<int>(packet.size()),
-      remote_addr_,
-      base::Bind(&UdpTransport::OnSent, weak_factory_.GetWeakPtr(), buf));
+    result = udp_socket_->SendTo(buf,
+                                 static_cast<int>(packet->data.size()),
+                                 remote_addr_,
+                                 callback);
   } else {
-    return false;
+    return true;
   }
-  if (ret == net::ERR_IO_PENDING)
+
+  if (result == net::ERR_IO_PENDING) {
     send_pending_ = true;
-  // When ok, will return a positive value equal the number of bytes sent.
-  return ret >= net::OK;
+    return false;
+  } else if (result < 0) {
+    LOG(ERROR) << "Failed to send packet: " << result << ".";
+    status_callback_.Run(TRANSPORT_SOCKET_ERROR);
+    return true;
+  } else {
+    return true;
+  }
 }
 
-void UdpTransport::OnSent(const scoped_refptr<net::IOBuffer>& buf, int result) {
+void UdpTransport::OnSent(const scoped_refptr<net::IOBuffer>& buf,
+                          PacketRef packet,
+                          const base::Closure& cb,
+                          int result) {
   DCHECK(io_thread_proxy_->RunsTasksOnCurrentThread());
 
   send_pending_ = false;
@@ -185,6 +196,10 @@
     LOG(ERROR) << "Failed to send packet: " << result << ".";
     status_callback_.Run(TRANSPORT_SOCKET_ERROR);
   }
+
+  if (!cb.is_null()) {
+    cb.Run();
+  }
 }
 
 }  // namespace transport
diff --git a/media/cast/transport/transport/udp_transport.h b/media/cast/transport/transport/udp_transport.h
index 15f5839..fb00d17 100644
--- a/media/cast/transport/transport/udp_transport.h
+++ b/media/cast/transport/transport/udp_transport.h
@@ -47,7 +47,8 @@
   void StartReceiving(const PacketReceiverCallback& packet_receiver);
 
   // PacketSender implementations.
-  virtual bool SendPacket(const Packet& packet) OVERRIDE;
+  virtual bool SendPacket(PacketRef packet,
+                          const base::Closure& cb) OVERRIDE;
 
  private:
   // Requests and processes packets from |udp_socket_|.  This method is called
@@ -56,7 +57,10 @@
   // response from UdpSocket::RecvFrom().
   void ReceiveNextPacket(int length_or_status);
 
-  void OnSent(const scoped_refptr<net::IOBuffer>& buf, int result);
+  void OnSent(const scoped_refptr<net::IOBuffer>& buf,
+              PacketRef packet,
+              const base::Closure& cb,
+              int result);
 
   const scoped_refptr<base::SingleThreadTaskRunner> io_thread_proxy_;
   const net::IPEndPoint local_addr_;
diff --git a/media/cast/transport/transport/udp_transport_unittest.cc b/media/cast/transport/transport/udp_transport_unittest.cc
index 2024656..70e49bf 100644
--- a/media/cast/transport/transport/udp_transport_unittest.cc
+++ b/media/cast/transport/transport/udp_transport_unittest.cc
@@ -45,7 +45,8 @@
 };
 
 void SendPacket(UdpTransport* transport, Packet packet) {
-  transport->SendPacket(packet);
+  base::Closure cb;
+  transport->SendPacket(new base::RefCountedData<Packet>(packet), cb);
 }
 
 static void UpdateCastTransportStatus(transport::CastTransportStatus status) {
@@ -84,7 +85,8 @@
   send_transport.StartReceiving(receiver1.packet_receiver());
   recv_transport.StartReceiving(receiver2.packet_receiver());
 
-  send_transport.SendPacket(packet);
+  base::Closure cb;
+  send_transport.SendPacket(new base::RefCountedData<Packet>(packet), cb);
   run_loop.Run();
   EXPECT_TRUE(
       std::equal(packet.begin(), packet.end(), receiver1.packet().begin()));
diff --git a/media/cast/transport/utility/utility.gyp b/media/cast/transport/utility/utility.gyp
deleted file mode 100644
index 9be4068..0000000
--- a/media/cast/transport/utility/utility.gyp
+++ /dev/null
@@ -1,26 +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.
-
-{
-  'variables': {
-    'chromium_code': 1,
-  },
-  'targets': [
-    {
-      'target_name': 'transport_utility',
-      'type': 'static_library',
-      'include_dirs': [
-         '<(DEPTH)/',
-      ],
-      'dependencies': [
-        '<(DEPTH)/base/base.gyp:base',
-        '<(DEPTH)/crypto/crypto.gyp:crypto',
-      ],
-      'sources': [
-        'transport_encryption_handler.cc',
-        'transport_encryption_handler.h',
-      ],
-    },
-  ],
-}
diff --git a/media/cast/video_receiver/codecs/vp8/vp8_decoder.h b/media/cast/video_receiver/codecs/vp8/vp8_decoder.h
new file mode 100644
index 0000000..62ee8ad
--- /dev/null
+++ b/media/cast/video_receiver/codecs/vp8/vp8_decoder.h
@@ -0,0 +1,45 @@
+// 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.
+
+#ifndef MEDIA_CAST_VIDEO_RECEVIER_CODECS_VP8_VP8_DECODER_H_
+#define MEDIA_CAST_VIDEO_RECEVIER_CODECS_VP8_VP8_DECODER_H_
+
+#include "base/memory/scoped_ptr.h"
+#include "base/threading/non_thread_safe.h"
+#include "media/cast/cast_config.h"
+#include "media/cast/cast_environment.h"
+#include "media/cast/cast_receiver.h"
+#include "media/cast/video_receiver/software_video_decoder.h"
+#include "third_party/libvpx/source/libvpx/vpx/vpx_decoder.h"
+
+typedef struct vpx_codec_ctx vpx_dec_ctx_t;
+
+// TODO(mikhal): Look into reusing VpxVideoDecoder.
+namespace media {
+namespace cast {
+
+class Vp8Decoder : public SoftwareVideoDecoder {
+ public:
+  explicit Vp8Decoder(scoped_refptr<CastEnvironment> cast_environment);
+  virtual ~Vp8Decoder();
+
+  // SoftwareVideoDecoder implementations.
+  virtual bool Decode(const transport::EncodedVideoFrame* encoded_frame,
+                      const base::TimeTicks render_time,
+                      const VideoFrameDecodedCallback& frame_decoded_cb)
+      OVERRIDE;
+
+ private:
+  // Initialize the decoder.
+  void InitDecoder();
+  scoped_ptr<vpx_dec_ctx_t> decoder_;
+  scoped_refptr<CastEnvironment> cast_environment_;
+
+  DISALLOW_COPY_AND_ASSIGN(Vp8Decoder);
+};
+
+}  // namespace cast
+}  // namespace media
+
+#endif  // MEDIA_CAST_VIDEO_RECEVIER_CODECS_VP8_VP8_DECODER_H_
diff --git a/media/cast/video_receiver/video_decoder.cc b/media/cast/video_receiver/video_decoder.cc
index 0964c07..9f16749 100644
--- a/media/cast/video_receiver/video_decoder.cc
+++ b/media/cast/video_receiver/video_decoder.cc
@@ -6,9 +6,11 @@
 
 #include "base/bind.h"
 #include "base/bind_helpers.h"
+#include "base/json/json_reader.h"
 #include "base/location.h"
 #include "base/logging.h"
 #include "base/stl_util.h"
+#include "base/values.h"
 #include "media/base/video_util.h"
 #include "media/cast/cast_defines.h"
 #include "media/cast/cast_environment.h"
@@ -175,11 +177,55 @@
   DISALLOW_COPY_AND_ASSIGN(Vp8Impl);
 };
 
+#ifndef OFFICIAL_BUILD
+// A fake video decoder that always output 2x2 black frames.
+class VideoDecoder::FakeImpl : public VideoDecoder::ImplBase {
+ public:
+  explicit FakeImpl(const scoped_refptr<CastEnvironment>& cast_environment)
+      : ImplBase(cast_environment, transport::kFakeSoftwareVideo),
+        last_decoded_id_(-1) {
+    if (ImplBase::cast_initialization_status_ != STATUS_VIDEO_UNINITIALIZED)
+      return;
+    ImplBase::cast_initialization_status_ = STATUS_VIDEO_INITIALIZED;
+  }
+
+ private:
+  virtual ~FakeImpl() {}
+
+  virtual scoped_refptr<VideoFrame> Decode(uint8* data, int len) OVERRIDE {
+    base::JSONReader reader;
+    scoped_ptr<base::Value> values(reader.Read(
+        base::StringPiece(reinterpret_cast<char*>(data), len)));
+    base::DictionaryValue* dict = NULL;
+    values->GetAsDictionary(&dict);
+
+    bool key = false;
+    int id = 0;
+    int ref = 0;
+    dict->GetBoolean("key", &key);
+    dict->GetInteger("id", &id);
+    dict->GetInteger("ref", &ref);
+    DCHECK(id == last_decoded_id_ + 1);
+    last_decoded_id_ = id;
+    return media::VideoFrame::CreateBlackFrame(gfx::Size(2, 2));
+  }
+
+  int last_decoded_id_;
+
+  DISALLOW_COPY_AND_ASSIGN(FakeImpl);
+};
+#endif
+
 VideoDecoder::VideoDecoder(
     const scoped_refptr<CastEnvironment>& cast_environment,
     const VideoReceiverConfig& video_config)
     : cast_environment_(cast_environment) {
   switch (video_config.codec) {
+#ifndef OFFICIAL_BUILD
+    case transport::kFakeSoftwareVideo:
+      impl_ = new FakeImpl(cast_environment);
+      break;
+#endif
     case transport::kVp8:
       impl_ = new Vp8Impl(cast_environment);
       break;
diff --git a/media/cast/video_receiver/video_decoder.h b/media/cast/video_receiver/video_decoder.h
index e6bd91b..7f0db54 100644
--- a/media/cast/video_receiver/video_decoder.h
+++ b/media/cast/video_receiver/video_decoder.h
@@ -47,6 +47,7 @@
                    const DecodeFrameCallback& callback);
 
  private:
+  class FakeImpl;
   class ImplBase;
   class Vp8Impl;
 
diff --git a/media/cast/video_receiver/video_receiver.gypi b/media/cast/video_receiver/video_receiver.gypi
deleted file mode 100644
index e741719..0000000
--- a/media/cast/video_receiver/video_receiver.gypi
+++ /dev/null
@@ -1,32 +0,0 @@
-# Copyright 2013 The Chromium Authors. All rights reserved.
-# Use of the source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
-  'targets': [
-    {
-      'target_name': 'cast_video_receiver',
-      'type': 'static_library',
-      'include_dirs': [
-         '<(DEPTH)/',
-         '<(DEPTH)/third_party/',
-         '<(DEPTH)/third_party/webrtc',
-      ],
-      'sources': [
-        'video_decoder.h',
-        'video_decoder.cc',
-        'video_receiver.h',
-        'video_receiver.cc',
-      ], # source
-      'dependencies': [
-        '<(DEPTH)/base/base.gyp:base',
-        '<(DEPTH)/media/cast/framer/framer.gyp:cast_framer',
-        '<(DEPTH)/media/cast/rtp_receiver/rtp_receiver.gyp:cast_rtp_receiver',
-        '<(DEPTH)/media/cast/transport/utility/utility.gyp:transport_utility',
-        '<(DEPTH)/third_party/libvpx/libvpx.gyp:libvpx',
-      ],
-    },
-  ],
-}
-
-
diff --git a/media/cast/video_sender/codecs/vp8/vp8_encoder.cc b/media/cast/video_sender/codecs/vp8/vp8_encoder.cc
index c2f06c5..38c7dfc 100644
--- a/media/cast/video_sender/codecs/vp8/vp8_encoder.cc
+++ b/media/cast/video_sender/codecs/vp8/vp8_encoder.cc
@@ -35,7 +35,7 @@
       max_number_of_repeated_buffers_in_a_row_(
           ComputeMaxNumOfRepeatedBuffes(max_unacked_frames)),
       key_frame_requested_(true),
-      timestamp_(0),
+      first_frame_received_(false),
       last_encoded_frame_id_(kStartFrameId),
       number_of_repeated_buffers_(0) {
   // TODO(pwestin): we need to figure out how to synchronize the acking with the
@@ -105,8 +105,8 @@
   config_->g_threads = number_of_encode_threads;
 
   // Rate control settings.
-  // TODO(pwestin): revisit these constants. Currently identical to webrtc.
-  config_->rc_dropframe_thresh = 30;
+  // Never allow the encoder to drop frame internally.
+  config_->rc_dropframe_thresh = 0;
   config_->rc_end_usage = VPX_CBR;
   config_->g_pass = VPX_RC_ONE_PASS;
   config_->rc_resize_allowed = 0;
@@ -121,7 +121,6 @@
   // set the maximum target size of any key-frame.
   uint32 rc_max_intra_target = MaxIntraTarget(config_->rc_buf_optimal_sz);
   vpx_codec_flags_t flags = 0;
-  // TODO(mikhal): Tune settings.
   if (vpx_codec_enc_init(
           encoder_.get(), vpx_codec_vp8_cx(), config_.get(), flags)) {
     DCHECK(false) << "vpx_codec_enc_init() failed.";
@@ -175,15 +174,27 @@
   // TODO(miu): This is a semi-hack.  We should consider using
   // |video_frame->timestamp()| instead.
   uint32 duration = kVideoFrequency / cast_config_.max_frame_rate;
+
+  // Note: Timestamp here is used for bitrate calculation. The absolute value
+  // is not important.
+  if (!first_frame_received_) {
+    first_frame_received_ = true;
+    first_frame_timestamp_ = video_frame->timestamp();
+  }
+
+  vpx_codec_pts_t timestamp =
+      (video_frame->timestamp() - first_frame_timestamp_).InMicroseconds() *
+      kVideoFrequency / base::Time::kMicrosecondsPerSecond;
+
   if (vpx_codec_encode(encoder_.get(),
                        raw_image_,
-                       timestamp_,
+                       timestamp,
                        duration,
                        flags,
-                       VPX_DL_REALTIME)) {
+                       VPX_DL_REALTIME) != VPX_CODEC_OK) {
+    LOG(ERROR) << "Failed to encode for once.";
     return false;
   }
-  timestamp_ += duration;
 
   // Get encoded frame.
   const vpx_codec_cx_pkt_t* pkt = NULL;
@@ -289,6 +300,9 @@
 }
 
 Vp8Encoder::Vp8Buffers Vp8Encoder::GetNextBufferToUpdate() {
+  if (!use_multiple_video_buffers_)
+    return kNoBuffer;
+
   // Update at most one buffer, except for key-frames.
 
   Vp8Buffers buffer_to_update = kNoBuffer;
diff --git a/media/cast/video_sender/codecs/vp8/vp8_encoder.gypi b/media/cast/video_sender/codecs/vp8/vp8_encoder.gypi
deleted file mode 100644
index 4a1a536..0000000
--- a/media/cast/video_sender/codecs/vp8/vp8_encoder.gypi
+++ /dev/null
@@ -1,25 +0,0 @@
-# Copyright 2013 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.
-
-{
-  'targets': [
-    {
-      'target_name': 'cast_vp8_encoder',
-      'type': 'static_library',
-      'include_dirs': [
-         '<(DEPTH)/',
-         '<(DEPTH)/third_party/',
-      ],
-      'sources': [
-        'vp8_encoder.cc',
-        'vp8_encoder.h',
-      ], # source
-      'dependencies': [
-        '<(DEPTH)/ui/gfx/gfx.gyp:gfx',
-        '<(DEPTH)/ui/gfx/gfx.gyp:gfx_geometry',
-        '<(DEPTH)/third_party/libvpx/libvpx.gyp:libvpx',
-      ],
-    },
-  ],
-}
diff --git a/media/cast/video_sender/codecs/vp8/vp8_encoder.h b/media/cast/video_sender/codecs/vp8/vp8_encoder.h
index 7cc3754..aff6215 100644
--- a/media/cast/video_sender/codecs/vp8/vp8_encoder.h
+++ b/media/cast/video_sender/codecs/vp8/vp8_encoder.h
@@ -8,7 +8,9 @@
 #include "base/basictypes.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/threading/thread_checker.h"
+#include "base/time/time.h"
 #include "media/cast/cast_config.h"
+#include "media/cast/video_sender/software_video_encoder.h"
 #include "third_party/libvpx/source/libvpx/vpx/vpx_encoder.h"
 
 namespace media {
@@ -23,27 +25,27 @@
 
 const int kNumberOfVp8VideoBuffers = 3;
 
-class Vp8Encoder {
+class Vp8Encoder : public SoftwareVideoEncoder {
  public:
   Vp8Encoder(const VideoSenderConfig& video_config, uint8 max_unacked_frames);
 
-  ~Vp8Encoder();
+  virtual ~Vp8Encoder();
 
   // Initialize the encoder before Encode() can be called. This method
   // must be called on the thread that Encode() is called.
-  void Initialize();
+  virtual void Initialize() OVERRIDE;
 
   // Encode a raw image (as a part of a video stream).
-  bool Encode(const scoped_refptr<media::VideoFrame>& video_frame,
-              transport::EncodedVideoFrame* encoded_image);
+  virtual bool Encode(const scoped_refptr<media::VideoFrame>& video_frame,
+                      transport::EncodedVideoFrame* encoded_image) OVERRIDE;
 
   // Update the encoder with a new target bit rate.
-  void UpdateRates(uint32 new_bitrate);
+  virtual void UpdateRates(uint32 new_bitrate) OVERRIDE;
 
   // Set the next frame to be a key frame.
-  void GenerateKeyFrame();
+  virtual void GenerateKeyFrame() OVERRIDE;
 
-  void LatestFrameIdToReference(uint32 frame_id);
+  virtual void LatestFrameIdToReference(uint32 frame_id) OVERRIDE;
 
  private:
   enum Vp8Buffers {
@@ -81,7 +83,8 @@
   vpx_image_t* raw_image_;
 
   bool key_frame_requested_;
-  int64 timestamp_;
+  bool first_frame_received_;
+  base::TimeDelta first_frame_timestamp_;
   uint32 last_encoded_frame_id_;
   uint32 used_buffers_frame_id_[kNumberOfVp8VideoBuffers];
   bool acked_frame_buffers_[kNumberOfVp8VideoBuffers];
diff --git a/media/cast/video_sender/external_video_encoder.cc b/media/cast/video_sender/external_video_encoder.cc
index acae1a4..bbb67e0 100644
--- a/media/cast/video_sender/external_video_encoder.cc
+++ b/media/cast/video_sender/external_video_encoder.cc
@@ -104,6 +104,9 @@
       case transport::kH264:
         output_profile = media::H264PROFILE_MAIN;
         break;
+      case transport::kFakeSoftwareVideo:
+        NOTREACHED() << "Fake software video encoder cannot be external";
+        break;
     }
     codec_ = video_config.codec;
     max_frame_rate_ = video_config.max_frame_rate;
diff --git a/media/cast/video_sender/fake_software_video_encoder.cc b/media/cast/video_sender/fake_software_video_encoder.cc
new file mode 100644
index 0000000..0df0d6e
--- /dev/null
+++ b/media/cast/video_sender/fake_software_video_encoder.cc
@@ -0,0 +1,59 @@
+// 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.
+
+#include "media/cast/video_sender/fake_software_video_encoder.h"
+
+#include "base/json/json_writer.h"
+#include "base/values.h"
+#include "media/cast/transport/cast_transport_config.h"
+
+#ifndef OFFICIAL_BUILD
+
+namespace media {
+namespace cast {
+
+FakeSoftwareVideoEncoder::FakeSoftwareVideoEncoder()
+    : next_frame_is_key_(true),
+      frame_id_(0),
+      frame_id_to_reference_(0) {
+}
+
+FakeSoftwareVideoEncoder::~FakeSoftwareVideoEncoder() {}
+
+void FakeSoftwareVideoEncoder::Initialize() {}
+
+bool FakeSoftwareVideoEncoder::Encode(
+    const scoped_refptr<media::VideoFrame>& video_frame,
+    transport::EncodedVideoFrame* encoded_image) {
+  encoded_image->codec = transport::kFakeSoftwareVideo;
+  encoded_image->key_frame = next_frame_is_key_;
+  next_frame_is_key_ = false;
+  encoded_image->frame_id = frame_id_++;
+  encoded_image->last_referenced_frame_id = frame_id_to_reference_;
+
+  base::DictionaryValue values;
+  values.Set("key", base::Value::CreateBooleanValue(encoded_image->key_frame));
+  values.Set("id", base::Value::CreateIntegerValue(encoded_image->frame_id));
+  values.Set("ref", base::Value::CreateIntegerValue(
+      encoded_image->last_referenced_frame_id));
+  base::JSONWriter::Write(&values, &encoded_image->data);
+  return true;
+}
+
+void FakeSoftwareVideoEncoder::UpdateRates(uint32 new_bitrate) {
+  // TODO(hclam): Implement bitrate control.
+}
+
+void FakeSoftwareVideoEncoder::GenerateKeyFrame() {
+  next_frame_is_key_ = true;
+}
+
+void FakeSoftwareVideoEncoder::LatestFrameIdToReference(uint32 frame_id) {
+  frame_id_to_reference_ = frame_id;
+}
+
+}  // namespace cast
+}  // namespace media
+
+#endif
diff --git a/media/cast/video_sender/fake_software_video_encoder.h b/media/cast/video_sender/fake_software_video_encoder.h
new file mode 100644
index 0000000..bcc5ed0
--- /dev/null
+++ b/media/cast/video_sender/fake_software_video_encoder.h
@@ -0,0 +1,35 @@
+// 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.
+
+#ifndef MEDIA_CAST_VIDEO_SENDER_FAKE_SOFTWARE_VIDEO_ENCODER_H_
+#define MEDIA_CAST_VIDEO_SENDER_FAKE_SOFTWARE_VIDEO_ENCODER_H_
+
+#include "media/cast/video_sender/software_video_encoder.h"
+
+namespace media {
+namespace cast {
+
+class FakeSoftwareVideoEncoder : public SoftwareVideoEncoder {
+ public:
+  FakeSoftwareVideoEncoder();
+  virtual ~FakeSoftwareVideoEncoder();
+
+  // SoftwareVideoEncoder implementations.
+  virtual void Initialize() OVERRIDE;
+  virtual bool Encode(const scoped_refptr<media::VideoFrame>& video_frame,
+                      transport::EncodedVideoFrame* encoded_image) OVERRIDE;
+  virtual void UpdateRates(uint32 new_bitrate) OVERRIDE;
+  virtual void GenerateKeyFrame() OVERRIDE;
+  virtual void LatestFrameIdToReference(uint32 frame_id) OVERRIDE;
+
+ private:
+  bool next_frame_is_key_;
+  uint32 frame_id_;
+  uint32 frame_id_to_reference_;
+};
+
+}  // namespace cast
+}  // namespace media
+
+#endif  // MEDIA_CAST_VIDEO_SENDER_FAKE_SOFTWARE_VIDEO_ENCODER_H_
diff --git a/media/cast/video_sender/software_video_encoder.h b/media/cast/video_sender/software_video_encoder.h
new file mode 100644
index 0000000..3d63f20
--- /dev/null
+++ b/media/cast/video_sender/software_video_encoder.h
@@ -0,0 +1,46 @@
+// 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.
+
+#ifndef MEDIA_CAST_VIDEO_SENDER_SOFTWARE_VIDEO_ENCODER_H_
+#define MEDIA_CAST_VIDEO_SENDER_SOFTWARE_VIDEO_ENCODER_H_
+
+#include "base/basictypes.h"
+#include "base/memory/ref_counted.h"
+
+namespace media {
+class VideoFrame;
+}
+
+namespace media {
+namespace cast {
+namespace transport {
+struct EncodedVideoFrame;
+}  // namespace transport
+
+class SoftwareVideoEncoder {
+ public:
+  virtual ~SoftwareVideoEncoder() {}
+
+  // Initialize the encoder before Encode() can be called. This method
+  // must be called on the thread that Encode() is called.
+  virtual void Initialize() = 0;
+
+  // Encode a raw image (as a part of a video stream).
+  virtual bool Encode(const scoped_refptr<media::VideoFrame>& video_frame,
+                      transport::EncodedVideoFrame* encoded_image) = 0;
+
+  // Update the encoder with a new target bit rate.
+  virtual void UpdateRates(uint32 new_bitrate) = 0;
+
+  // Set the next frame to be a key frame.
+  virtual void GenerateKeyFrame() = 0;
+
+  // Set the last frame to reference.
+  virtual void LatestFrameIdToReference(uint32 frame_id) = 0;
+};
+
+}  // namespace cast
+}  // namespace media
+
+#endif  // MEDIA_CAST_VIDEO_SENDER_SOFTWARE_VIDEO_ENCODER_H_
diff --git a/media/cast/video_sender/video_encoder_impl.cc b/media/cast/video_sender/video_encoder_impl.cc
index 854f8c4..0ee7ee4 100644
--- a/media/cast/video_sender/video_encoder_impl.cc
+++ b/media/cast/video_sender/video_encoder_impl.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "media/cast/video_sender/video_encoder.h"
+#include "media/cast/video_sender/video_encoder_impl.h"
 
 #include "base/bind.h"
 #include "base/bind_helpers.h"
@@ -11,7 +11,8 @@
 #include "base/message_loop/message_loop.h"
 #include "media/base/video_frame.h"
 #include "media/cast/cast_defines.h"
-#include "media/cast/video_sender/video_encoder_impl.h"
+#include "media/cast/video_sender/codecs/vp8/vp8_encoder.h"
+#include "media/cast/video_sender/fake_software_video_encoder.h"
 
 namespace media {
 namespace cast {
@@ -20,31 +21,31 @@
 
 typedef base::Callback<void(Vp8Encoder*)> PassEncoderCallback;
 
-void InitializeVp8EncoderOnEncoderThread(
+void InitializeEncoderOnEncoderThread(
     const scoped_refptr<CastEnvironment>& environment,
-    Vp8Encoder* vp8_encoder) {
+    SoftwareVideoEncoder* encoder) {
   DCHECK(environment->CurrentlyOn(CastEnvironment::VIDEO));
-  vp8_encoder->Initialize();
+  encoder->Initialize();
 }
 
 void EncodeVideoFrameOnEncoderThread(
     scoped_refptr<CastEnvironment> environment,
-    Vp8Encoder* vp8_encoder,
+    SoftwareVideoEncoder* encoder,
     const scoped_refptr<media::VideoFrame>& video_frame,
     const base::TimeTicks& capture_time,
     const VideoEncoderImpl::CodecDynamicConfig& dynamic_config,
     const VideoEncoderImpl::FrameEncodedCallback& frame_encoded_callback) {
   DCHECK(environment->CurrentlyOn(CastEnvironment::VIDEO));
   if (dynamic_config.key_frame_requested) {
-    vp8_encoder->GenerateKeyFrame();
+    encoder->GenerateKeyFrame();
   }
-  vp8_encoder->LatestFrameIdToReference(
+  encoder->LatestFrameIdToReference(
       dynamic_config.latest_frame_id_to_reference);
-  vp8_encoder->UpdateRates(dynamic_config.bit_rate);
+  encoder->UpdateRates(dynamic_config.bit_rate);
 
   scoped_ptr<transport::EncodedVideoFrame> encoded_frame(
       new transport::EncodedVideoFrame());
-  bool retval = vp8_encoder->Encode(video_frame, encoded_frame.get());
+  bool retval = encoder->Encode(video_frame, encoded_frame.get());
 
   encoded_frame->rtp_timestamp = transport::GetVideoRtpTimestamp(capture_time);
 
@@ -73,12 +74,16 @@
       skip_next_frame_(false),
       skip_count_(0) {
   if (video_config.codec == transport::kVp8) {
-    vp8_encoder_.reset(new Vp8Encoder(video_config, max_unacked_frames));
+    encoder_.reset(new Vp8Encoder(video_config, max_unacked_frames));
     cast_environment_->PostTask(CastEnvironment::VIDEO,
                                 FROM_HERE,
-                                base::Bind(&InitializeVp8EncoderOnEncoderThread,
+                                base::Bind(&InitializeEncoderOnEncoderThread,
                                            cast_environment,
-                                           vp8_encoder_.get()));
+                                           encoder_.get()));
+#ifndef OFFICIAL_BUILD
+  } else if (video_config.codec == transport::kFakeSoftwareVideo) {
+    encoder_.reset(new FakeSoftwareVideoEncoder());
+#endif
   } else {
     DCHECK(false) << "Invalid config";  // Codec not supported.
   }
@@ -90,11 +95,12 @@
 
 VideoEncoderImpl::~VideoEncoderImpl() {
   DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN));
-  if (vp8_encoder_) {
+  if (encoder_) {
     cast_environment_->PostTask(
         CastEnvironment::VIDEO,
         FROM_HERE,
-        base::Bind(&base::DeletePointer<Vp8Encoder>, vp8_encoder_.release()));
+        base::Bind(&base::DeletePointer<SoftwareVideoEncoder>,
+                   encoder_.release()));
   }
 }
 
@@ -103,9 +109,6 @@
     const base::TimeTicks& capture_time,
     const FrameEncodedCallback& frame_encoded_callback) {
   DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN));
-  if (video_config_.codec != transport::kVp8)
-    return false;
-
   if (skip_next_frame_) {
     ++skip_count_;
     return false;
@@ -121,7 +124,7 @@
                               FROM_HERE,
                               base::Bind(&EncodeVideoFrameOnEncoderThread,
                                          cast_environment_,
-                                         vp8_encoder_.get(),
+                                         encoder_.get(),
                                          video_frame,
                                          capture_time,
                                          dynamic_config_,
diff --git a/media/cast/video_sender/video_encoder_impl.h b/media/cast/video_sender/video_encoder_impl.h
index 887a779..4bc0a83 100644
--- a/media/cast/video_sender/video_encoder_impl.h
+++ b/media/cast/video_sender/video_encoder_impl.h
@@ -8,7 +8,7 @@
 #include "base/memory/scoped_ptr.h"
 #include "media/cast/cast_config.h"
 #include "media/cast/cast_environment.h"
-#include "media/cast/video_sender/codecs/vp8/vp8_encoder.h"
+#include "media/cast/video_sender/software_video_encoder.h"
 #include "media/cast/video_sender/video_encoder.h"
 
 namespace media {
@@ -65,7 +65,7 @@
   // dereferenced on the main thread. We manage the lifetime of this member
   // manually because it needs to be initialize, used and destroyed on the
   // video encoder thread and video encoder thread can out-live the main thread.
-  scoped_ptr<Vp8Encoder> vp8_encoder_;
+  scoped_ptr<SoftwareVideoEncoder> encoder_;
 
   DISALLOW_COPY_AND_ASSIGN(VideoEncoderImpl);
 };
diff --git a/media/cast/video_sender/video_sender.cc b/media/cast/video_sender/video_sender.cc
index 150891f..ee0e3d1 100644
--- a/media/cast/video_sender/video_sender.cc
+++ b/media/cast/video_sender/video_sender.cc
@@ -63,6 +63,7 @@
       last_sent_frame_id_(-1),
       duplicate_ack_(0),
       last_skip_count_(0),
+      current_requested_bitrate_(video_config.start_bitrate),
       congestion_control_(cast_environment->Clock(),
                           video_config.congestion_control_back_off,
                           video_config.max_bitrate,
@@ -171,7 +172,7 @@
   cast_environment_->Logging()->InsertEncodedFrameEvent(
       last_send_time_, kVideoFrameEncoded, encoded_frame->rtp_timestamp,
       frame_id, static_cast<int>(encoded_frame->data.size()),
-      encoded_frame->key_frame);
+      encoded_frame->key_frame, current_requested_bitrate_);
 
   // Used by chrome/browser/extension/api/cast_streaming/performance_test.cc
   TRACE_EVENT_INSTANT1(
@@ -344,7 +345,6 @@
   base::TimeDelta avg_rtt;
   base::TimeDelta min_rtt;
   base::TimeDelta max_rtt;
-  base::TimeTicks now = cast_environment_->Clock()->NowTicks();
 
   // Update delay and max number of frames in flight based on the the new
   // received target delay.
@@ -353,8 +353,6 @@
   max_unacked_frames_ = 1 + static_cast<uint8>(cast_feedback.target_delay_ms_ *
                                                max_frame_rate_ / 1000);
   if (rtcp_->Rtt(&rtt, &avg_rtt, &min_rtt, &max_rtt)) {
-    cast_environment_->Logging()->InsertGenericEvent(
-        now, kRttMs, rtt.InMilliseconds());
     // Don't use a RTT lower than our average.
     rtt = std::max(rtt, avg_rtt);
   } else {
@@ -374,6 +372,7 @@
       uint32 new_bitrate = 0;
       if (congestion_control_.OnAck(rtt, &new_bitrate)) {
         video_encoder_->SetBitRate(new_bitrate);
+        current_requested_bitrate_ = new_bitrate;
       }
     }
     // We only count duplicate ACKs when we have sent newer frames.
@@ -400,6 +399,7 @@
     uint32 new_bitrate = 0;
     if (congestion_control_.OnNack(rtt, &new_bitrate)) {
       video_encoder_->SetBitRate(new_bitrate);
+      current_requested_bitrate_ = new_bitrate;
     }
   }
   ReceivedAck(cast_feedback.ack_frame_id_);
diff --git a/media/cast/video_sender/video_sender.gypi b/media/cast/video_sender/video_sender.gypi
deleted file mode 100644
index 1845b81..0000000
--- a/media/cast/video_sender/video_sender.gypi
+++ /dev/null
@@ -1,35 +0,0 @@
-# Copyright 2013 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.
-
-{
-  'includes': [
-    'codecs/vp8/vp8_encoder.gypi',
-  ],
-  'targets': [
-    {
-      'target_name': 'video_sender',
-      'type': 'static_library',
-      'include_dirs': [
-         '<(DEPTH)/',
-      ],
-      'sources': [
-        'external_video_encoder.h',
-        'external_video_encoder.cc',
-        'video_encoder.h',
-        'video_encoder_impl.h',
-        'video_encoder_impl.cc',
-        'video_sender.h',
-        'video_sender.cc',
-      ], # source
-      'dependencies': [
-        '<(DEPTH)/media/cast/rtcp/rtcp.gyp:*',
-        '<(DEPTH)/media/cast/transport/cast_transport.gyp:cast_transport',
-        '<(DEPTH)/media/media.gyp:media',
-        '<(DEPTH)/media/media.gyp:shared_memory_support',
-        'congestion_control',
-        'cast_vp8_encoder',
-      ],
-    },
-  ],
-}
diff --git a/media/cast/video_sender/video_sender.h b/media/cast/video_sender/video_sender.h
index 1ef4a73..6baac28 100644
--- a/media/cast/video_sender/video_sender.h
+++ b/media/cast/video_sender/video_sender.h
@@ -122,6 +122,7 @@
   base::TimeTicks last_send_time_;
   base::TimeTicks last_checked_skip_count_time_;
   int last_skip_count_;
+  int current_requested_bitrate_;
   CongestionControl congestion_control_;
 
   // This is a "good enough" mapping for finding the RTP timestamp associated
diff --git a/media/cast/video_sender/video_sender_unittest.cc b/media/cast/video_sender/video_sender_unittest.cc
index f4484b5..99a0809 100644
--- a/media/cast/video_sender/video_sender_unittest.cc
+++ b/media/cast/video_sender/video_sender_unittest.cc
@@ -57,8 +57,9 @@
   TestPacketSender() : number_of_rtp_packets_(0), number_of_rtcp_packets_(0) {}
 
   // A singular packet implies a RTCP packet.
-  virtual bool SendPacket(const Packet& packet) OVERRIDE {
-    if (Rtcp::IsRtcpPacket(&packet[0], packet.size())) {
+  virtual bool SendPacket(transport::PacketRef packet,
+                          const base::Closure& cb) OVERRIDE {
+    if (Rtcp::IsRtcpPacket(&packet->data[0], packet->data.size())) {
       ++number_of_rtcp_packets_;
     } else {
       ++number_of_rtp_packets_;
diff --git a/media/cdm/ppapi/cdm_adapter.cc b/media/cdm/ppapi/cdm_adapter.cc
index 7e58176..4d8f038 100644
--- a/media/cdm/ppapi/cdm_adapter.cc
+++ b/media/cdm/ppapi/cdm_adapter.cc
@@ -261,6 +261,25 @@
   PP_DCHECK(!key_system.empty());
   PP_DCHECK(key_system_.empty() || (key_system_ == key_system && cdm_));
 
+#if defined(CHECK_DOCUMENT_URL)
+  PP_URLComponents_Dev url_components = {};
+  const pp::URLUtil_Dev* url_util = pp::URLUtil_Dev::Get();
+  if (!url_util)
+    return;
+  pp::Var href = url_util->GetDocumentURL(pp::InstanceHandle(pp_instance()),
+                                          &url_components);
+  PP_DCHECK(href.is_string());
+  std::string url = href.AsString();
+  PP_DCHECK(!url.empty());
+  std::string url_scheme =
+      url.substr(url_components.scheme.begin, url_components.scheme.len);
+  if (url_scheme != "file") {
+    // Skip this check for file:// URLs as they don't have a host component.
+    PP_DCHECK(url_components.host.begin);
+    PP_DCHECK(0 < url_components.host.len);
+  }
+#endif  // defined(CHECK_DOCUMENT_URL)
+
   if (!cdm_ && !CreateCdmInstance(key_system))
     return;
 
@@ -278,21 +297,6 @@
     return;
   }
 
-#if defined(CHECK_DOCUMENT_URL)
-  PP_URLComponents_Dev url_components = {};
-  const pp::URLUtil_Dev* url_util = pp::URLUtil_Dev::Get();
-  if (!url_util) {
-    OnSessionError(session_id, cdm::kUnknownError, 0);
-    return;
-  }
-  pp::Var href = url_util->GetDocumentURL(
-      pp::InstanceHandle(pp_instance()), &url_components);
-  PP_DCHECK(href.is_string());
-  PP_DCHECK(!href.AsString().empty());
-  PP_DCHECK(url_components.host.begin);
-  PP_DCHECK(0 < url_components.host.len);
-#endif  // defined(CHECK_DOCUMENT_URL)
-
   cdm_->CreateSession(session_id,
                       content_type.data(),
                       content_type.size(),
diff --git a/media/ffmpeg/ffmpeg_common.cc b/media/ffmpeg/ffmpeg_common.cc
index 344e265..a65d19f 100644
--- a/media/ffmpeg/ffmpeg_common.cc
+++ b/media/ffmpeg/ffmpeg_common.cc
@@ -8,6 +8,7 @@
 #include "base/logging.h"
 #include "base/metrics/histogram.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/strings/string_util.h"
 #include "media/base/decoder_buffer.h"
 #include "media/base/video_frame.h"
 #include "media/base/video_util.h"
@@ -297,12 +298,6 @@
         codec_context->seek_preroll * 1000000.0 / codec_context->sample_rate);
   }
 
-  base::TimeDelta codec_delay;
-  if (codec_context->delay > 0) {
-    codec_delay = base::TimeDelta::FromMicroseconds(
-        codec_context->delay * 1000000.0 / codec_context->sample_rate);
-  }
-
   config->Initialize(codec,
                      sample_format,
                      channel_layout,
@@ -312,7 +307,7 @@
                      is_encrypted,
                      record_stats,
                      seek_preroll,
-                     codec_delay);
+                     codec_context->delay);
   if (codec != kCodecOpus) {
     DCHECK_EQ(av_get_bytes_per_sample(codec_context->sample_fmt) * 8,
               config->bits_per_channel());
@@ -550,4 +545,37 @@
   return PIX_FMT_NONE;
 }
 
+bool FFmpegUTCDateToTime(const char* date_utc,
+                         base::Time* out) {
+  DCHECK(date_utc);
+  DCHECK(out);
+
+  std::vector<std::string> fields;
+  std::vector<std::string> date_fields;
+  std::vector<std::string> time_fields;
+  base::Time::Exploded exploded;
+  exploded.millisecond = 0;
+
+  // TODO(acolwell): Update this parsing code when FFmpeg returns sub-second
+  // information.
+  if ((Tokenize(date_utc, " ", &fields) == 2) &&
+      (Tokenize(fields[0], "-", &date_fields) == 3) &&
+      (Tokenize(fields[1], ":", &time_fields) == 3) &&
+      base::StringToInt(date_fields[0], &exploded.year) &&
+      base::StringToInt(date_fields[1], &exploded.month) &&
+      base::StringToInt(date_fields[2], &exploded.day_of_month) &&
+      base::StringToInt(time_fields[0], &exploded.hour) &&
+      base::StringToInt(time_fields[1], &exploded.minute) &&
+      base::StringToInt(time_fields[2], &exploded.second)) {
+    base::Time parsed_time = base::Time::FromUTCExploded(exploded);
+    if (parsed_time.is_null())
+      return false;
+
+    *out = parsed_time;
+    return true;
+  }
+
+  return false;
+}
+
 }  // namespace media
diff --git a/media/ffmpeg/ffmpeg_common.h b/media/ffmpeg/ffmpeg_common.h
index 2985e74..f065a6d 100644
--- a/media/ffmpeg/ffmpeg_common.h
+++ b/media/ffmpeg/ffmpeg_common.h
@@ -105,11 +105,17 @@
     AVSampleFormatToSampleFormat(AVSampleFormat sample_format);
 
 // Converts FFmpeg's pixel formats to its corresponding supported video format.
-VideoFrame::Format PixelFormatToVideoFormat(PixelFormat pixel_format);
+MEDIA_EXPORT VideoFrame::Format PixelFormatToVideoFormat(
+    PixelFormat pixel_format);
 
 // Converts video formats to its corresponding FFmpeg's pixel formats.
 PixelFormat VideoFormatToPixelFormat(VideoFrame::Format video_format);
 
+// Convert FFmpeg UTC representation (YYYY-MM-DD HH:MM:SS) to base::Time.
+// Returns true and sets |*out| if |date_utc| contains a valid
+// date string. Otherwise returns fals and timeline_offset is unmodified.
+MEDIA_EXPORT bool FFmpegUTCDateToTime(const char* date_utc, base::Time* out);
+
 }  // namespace media
 
 #endif  // MEDIA_FFMPEG_FFMPEG_COMMON_H_
diff --git a/media/ffmpeg/ffmpeg_common_unittest.cc b/media/ffmpeg/ffmpeg_common_unittest.cc
index 2fa61ac..31397df 100644
--- a/media/ffmpeg/ffmpeg_common_unittest.cc
+++ b/media/ffmpeg/ffmpeg_common_unittest.cc
@@ -97,4 +97,58 @@
   }
 }
 
+TEST_F(FFmpegCommonTest, UTCDateToTime_Valid) {
+  base::Time result;
+  EXPECT_TRUE(FFmpegUTCDateToTime("2012-11-10 12:34:56", &result));
+
+  base::Time::Exploded exploded;
+  result.UTCExplode(&exploded);
+  EXPECT_TRUE(exploded.HasValidValues());
+  EXPECT_EQ(2012, exploded.year);
+  EXPECT_EQ(11, exploded.month);
+  EXPECT_EQ(6, exploded.day_of_week);
+  EXPECT_EQ(10, exploded.day_of_month);
+  EXPECT_EQ(12, exploded.hour);
+  EXPECT_EQ(34, exploded.minute);
+  EXPECT_EQ(56, exploded.second);
+  EXPECT_EQ(0, exploded.millisecond);
+}
+
+TEST_F(FFmpegCommonTest, UTCDateToTime_Invalid) {
+  const char* invalid_date_strings[] = {
+    "",
+    "2012-11-10",
+    "12:34:56",
+    "-- ::",
+    "2012-11-10 12:34:",
+    "2012-11-10 12::56",
+    "2012-11-10 :34:56",
+    "2012-11- 12:34:56",
+    "2012--10 12:34:56",
+    "-11-10 12:34:56",
+    "2012-11 12:34:56",
+    "2012-11-10-12 12:34:56",
+    "2012-11-10 12:34",
+    "2012-11-10 12:34:56:78",
+    "ABCD-11-10 12:34:56",
+    "2012-EF-10 12:34:56",
+    "2012-11-GH 12:34:56",
+    "2012-11-10 IJ:34:56",
+    "2012-11-10 12:JL:56",
+    "2012-11-10 12:34:MN",
+    "2012-11-10 12:34:56.123",
+    "2012-11-1012:34:56",
+    "2012-11-10 12:34:56 UTC",
+  };
+
+  for (size_t i = 0; i < arraysize(invalid_date_strings); ++i) {
+    const char* date_string = invalid_date_strings[i];
+    base::Time result;
+    EXPECT_FALSE(FFmpegUTCDateToTime(date_string, &result))
+        << "date_string '" << date_string << "'";
+    EXPECT_TRUE(result.is_null());
+  }
+}
+
+
 }  // namespace media
diff --git a/media/filters/audio_renderer_impl.cc b/media/filters/audio_renderer_impl.cc
index acb43f7..4f71d3d 100644
--- a/media/filters/audio_renderer_impl.cc
+++ b/media/filters/audio_renderer_impl.cc
@@ -278,7 +278,14 @@
     buffer_converter_.reset();
   } else {
     // TODO(rileya): Support hardware config changes
-    audio_parameters_ = hardware_config_->GetOutputConfig();
+    const AudioParameters& hw_params = hardware_config_->GetOutputConfig();
+    audio_parameters_.Reset(hw_params.format(),
+                            hw_params.channel_layout(),
+                            hw_params.channels(),
+                            hw_params.input_channels(),
+                            hw_params.sample_rate(),
+                            hw_params.bits_per_sample(),
+                            hardware_config_->GetHighLatencyBufferSize());
   }
 
   audio_buffer_stream_.Initialize(
@@ -594,6 +601,7 @@
     //   3) We are in the kPlaying state
     //
     // Otherwise the buffer has data we can send to the device.
+    const base::TimeDelta time_before_filling = algorithm_->GetTime();
     frames_written = algorithm_->FillBuffer(audio_bus, requested_frames);
     if (frames_written == 0) {
       const base::TimeTicks now = now_cb_.Run();
@@ -619,16 +627,15 @@
                                         weak_factory_.GetWeakPtr()));
     }
 
+    // Adjust the delay according to playback rate.
+    base::TimeDelta adjusted_playback_delay = base::TimeDelta::FromMicroseconds(
+        ceil(playback_delay.InMicroseconds() * playback_rate));
+
     // The |audio_time_buffered_| is the ending timestamp of the last frame
     // buffered at the audio device. |playback_delay| is the amount of time
     // buffered at the audio device. The current time can be computed by their
     // difference.
     if (audio_time_buffered_ != kNoTimestamp()) {
-      // Adjust the delay according to playback rate.
-      base::TimeDelta adjusted_playback_delay =
-          base::TimeDelta::FromMicroseconds(ceil(
-              playback_delay.InMicroseconds() * playback_rate));
-
       base::TimeDelta previous_time = current_time_;
       current_time_ = audio_time_buffered_ - adjusted_playback_delay;
 
@@ -649,6 +656,11 @@
       if (current_time_ > previous_time && !rendered_end_of_stream_) {
         current_time = current_time_;
       }
+    } else if (frames_written > 0) {
+      // Nothing has been buffered yet, so use the first buffer's timestamp.
+      DCHECK(time_before_filling != kNoTimestamp());
+      current_time_ = current_time =
+          time_before_filling - adjusted_playback_delay;
     }
 
     // The call to FillBuffer() on |algorithm_| has increased the amount of
@@ -750,6 +762,11 @@
   DCHECK(task_runner_->BelongsToCurrentThread());
   DCHECK(expecting_config_changes_);
   buffer_converter_->ResetTimestampState();
+  // Drain flushed buffers from the converter so the AudioSplicer receives all
+  // data ahead of any OnNewSpliceBuffer() calls.  Since discontinuities should
+  // only appear after config changes, AddInput() should never fail here.
+  while (buffer_converter_->HasNextBuffer())
+    CHECK(splicer_->AddInput(buffer_converter_->GetNextBuffer()));
 }
 
 }  // namespace media
diff --git a/media/filters/audio_renderer_impl_unittest.cc b/media/filters/audio_renderer_impl_unittest.cc
index 7894c28..1ae27e3 100644
--- a/media/filters/audio_renderer_impl_unittest.cc
+++ b/media/filters/audio_renderer_impl_unittest.cc
@@ -11,7 +11,9 @@
 #include "base/stl_util.h"
 #include "base/strings/stringprintf.h"
 #include "media/base/audio_buffer.h"
+#include "media/base/audio_buffer_converter.h"
 #include "media/base/audio_hardware_config.h"
+#include "media/base/audio_splicer.h"
 #include "media/base/audio_timestamp_helper.h"
 #include "media/base/fake_audio_renderer_sink.h"
 #include "media/base/gmock_callback_support.h"
@@ -37,6 +39,8 @@
 static int kChannelCount = 2;
 static int kChannels = ChannelLayoutToChannelCount(kChannelLayout);
 static int kSamplesPerSecond = 44100;
+// Use a different output sample rate so the AudioBufferConverter is invoked.
+static int kOutputSamplesPerSecond = 48000;
 
 // Constants for distinguishing between muted audio and playing audio when using
 // ConsumeBufferedData(). Must match the type needed by kSampleFormat.
@@ -56,7 +60,8 @@
       : hardware_config_(AudioParameters(), AudioParameters()),
         needs_stop_(true),
         demuxer_stream_(DemuxerStream::AUDIO),
-        decoder_(new MockAudioDecoder()) {
+        decoder_(new MockAudioDecoder()),
+        last_time_update_(kNoTimestamp()) {
     AudioDecoderConfig audio_config(kCodec,
                                     kSampleFormat,
                                     kChannelLayout,
@@ -75,12 +80,13 @@
     // Mock out demuxer reads
     EXPECT_CALL(demuxer_stream_, Read(_)).WillRepeatedly(
         RunCallback<0>(DemuxerStream::kOk, DecoderBuffer::CreateEOSBuffer()));
-    AudioParameters out_params =
-        AudioParameters(AudioParameters::AUDIO_PCM_LOW_LATENCY,
-                        kChannelLayout,
-                        kSamplesPerSecond,
-                        SampleFormatToBytesPerChannel(kSampleFormat) * 8,
-                        512);
+    EXPECT_CALL(demuxer_stream_, SupportsConfigChanges())
+        .WillRepeatedly(Return(true));
+    AudioParameters out_params(AudioParameters::AUDIO_PCM_LOW_LATENCY,
+                               kChannelLayout,
+                               kOutputSamplesPerSecond,
+                               SampleFormatToBytesPerChannel(kSampleFormat) * 8,
+                               512);
     hardware_config_.UpdateOutputConfig(out_params);
     ScopedVector<AudioDecoder> decoders;
     decoders.push_back(decoder_);
@@ -117,6 +123,7 @@
 
   void OnAudioTimeCallback(TimeDelta current_time, TimeDelta max_time) {
     CHECK(current_time <= max_time);
+    last_time_update_ = current_time;
   }
 
   void InitializeRenderer(const PipelineStatusCB& pipeline_status_cb) {
@@ -415,6 +422,22 @@
     time_ += time;
   }
 
+  void force_config_change() {
+    renderer_->OnConfigChange();
+  }
+
+  int converter_input_frames_left() const {
+    return renderer_->buffer_converter_->input_frames_left_for_testing();
+  }
+
+  bool splicer_has_next_buffer() const {
+    return renderer_->splicer_->HasNextBuffer();
+  }
+
+  base::TimeDelta last_time_update() const {
+    return last_time_update_;
+  }
+
   // Fixture members.
   base::MessageLoop message_loop_;
   scoped_ptr<AudioRendererImpl> renderer_;
@@ -483,6 +506,7 @@
   base::Closure stop_decoder_cb_;
 
   PipelineStatusCB init_decoder_cb_;
+  base::TimeDelta last_time_update_;
 
   DISALLOW_COPY_AND_ASSIGN(AudioRendererImplTest);
 };
@@ -612,16 +636,19 @@
   SatisfyPendingRead(kDataSize);
   WaitForPendingRead();
 
-  // Verify we're getting muted audio during underflow.
+  // Verify we're getting muted audio during underflow.  Note: Since resampling
+  // is active, the number of frames_buffered() won't always match kDataSize.
   bool muted = false;
-  EXPECT_EQ(kDataSize, frames_buffered());
-  EXPECT_FALSE(ConsumeBufferedData(kDataSize, &muted));
+  const int kInitialFramesBuffered = 1114;
+  EXPECT_EQ(kInitialFramesBuffered, frames_buffered());
+  EXPECT_FALSE(ConsumeBufferedData(kInitialFramesBuffered, &muted));
   EXPECT_TRUE(muted);
 
   // Now deliver end of stream, we should get our little bit of data back.
   DeliverEndOfStream();
-  EXPECT_EQ(kDataSize, frames_buffered());
-  EXPECT_TRUE(ConsumeBufferedData(kDataSize, &muted));
+  const int kNextFramesBuffered = 1408;
+  EXPECT_EQ(kNextFramesBuffered, frames_buffered());
+  EXPECT_TRUE(ConsumeBufferedData(kNextFramesBuffered, &muted));
   EXPECT_FALSE(muted);
 
   // Attempt to read to make sure we're truly at the end of stream.
@@ -907,4 +934,50 @@
   InitializeAndStopDuringDecoderInit();
 }
 
+TEST_F(AudioRendererImplTest, ConfigChangeDrainsConverter) {
+  Initialize();
+  Preroll();
+  Play();
+
+  // Drain internal buffer, we should have a pending read.
+  EXPECT_TRUE(ConsumeBufferedData(frames_buffered(), NULL));
+  WaitForPendingRead();
+
+  // Deliver a little bit of data.  Use an odd data size to ensure there is data
+  // left in the AudioBufferConverter.  Ensure no buffers are in the splicer.
+  SatisfyPendingRead(2053);
+  EXPECT_FALSE(splicer_has_next_buffer());
+  EXPECT_GT(converter_input_frames_left(), 0);
+
+  // Force a config change and then ensure all buffered data has been put into
+  // the splicer.
+  force_config_change();
+  EXPECT_TRUE(splicer_has_next_buffer());
+  EXPECT_EQ(0, converter_input_frames_left());
+}
+
+TEST_F(AudioRendererImplTest, TimeUpdatesOnFirstBuffer) {
+  Initialize();
+  Preroll();
+  Play();
+
+  AudioTimestampHelper timestamp_helper(kOutputSamplesPerSecond);
+  EXPECT_EQ(kNoTimestamp(), last_time_update());
+
+  // Preroll() should be buffered some data, consume half of it now.
+  const int kFramesToConsume = frames_buffered() / 2;
+  EXPECT_TRUE(ConsumeBufferedData(kFramesToConsume, NULL));
+  WaitForPendingRead();
+
+  // Ensure we received a time update for the first buffer and it's zero.
+  timestamp_helper.SetBaseTimestamp(base::TimeDelta());
+  EXPECT_EQ(timestamp_helper.base_timestamp(), last_time_update());
+  timestamp_helper.AddFrames(kFramesToConsume);
+
+  // ConsumeBufferedData() uses an audio delay of zero, so the next buffer
+  // should have a timestamp equal to the duration of |kFramesToConsume|.
+  EXPECT_TRUE(ConsumeBufferedData(frames_buffered(), NULL));
+  EXPECT_EQ(timestamp_helper.GetTimestamp(), last_time_update());
+}
+
 }  // namespace media
diff --git a/media/filters/chunk_demuxer.cc b/media/filters/chunk_demuxer.cc
index 49a04f6..0c56089 100644
--- a/media/filters/chunk_demuxer.cc
+++ b/media/filters/chunk_demuxer.cc
@@ -98,7 +98,11 @@
   //                   occurred.
   // Second parameter - Indicates the stream duration. Only contains a valid
   //                    value if the first parameter is true.
-  typedef base::Callback<void(bool, TimeDelta)> InitCB;
+  // Third parameter - Indicates the source Time associated with
+  //                   presentation timestamp 0. A null Time is returned if
+  //                   no mapping to Time exists. Only contains a
+  //                   valid value if the first parameter is true.
+  typedef base::Callback<void(bool, TimeDelta, base::Time)> InitCB;
 
   SourceState(
       scoped_ptr<StreamParser> stream_parser,
@@ -190,6 +194,7 @@
 
   void OnSourceInitDone(bool success,
                         TimeDelta duration,
+                        base::Time timeline_offset,
                         bool auto_update_timestamp_offset);
 
   CreateDemuxerStreamCB create_demuxer_stream_cb_;
@@ -697,9 +702,11 @@
 
 void SourceState::OnSourceInitDone(bool success,
                                    TimeDelta duration,
+                                   base::Time timeline_offset,
                                    bool auto_update_timestamp_offset) {
   auto_update_timestamp_offset_ = auto_update_timestamp_offset;
-  base::ResetAndReturn(&init_cb_).Run(success, duration);
+  base::ResetAndReturn(&init_cb_).Run(
+      success, duration, timeline_offset);
 }
 
 ChunkDemuxerStream::ChunkDemuxerStream(Type type, bool splice_frames_enabled)
@@ -1069,6 +1076,10 @@
   return TimeDelta();
 }
 
+base::Time ChunkDemuxer::GetTimelineOffset() const {
+  return timeline_offset_;
+}
+
 void ChunkDemuxer::StartWaitingForSeek(TimeDelta seek_time) {
   DVLOG(1) << "StartWaitingForSeek()";
   base::AutoLock auto_lock(lock_);
@@ -1486,7 +1497,8 @@
   return false;
 }
 
-void ChunkDemuxer::OnSourceInitDone(bool success, TimeDelta duration) {
+void ChunkDemuxer::OnSourceInitDone(bool success, TimeDelta duration,
+                                    base::Time timeline_offset) {
   DVLOG(1) << "OnSourceInitDone(" << success << ", "
            << duration.InSecondsF() << ")";
   lock_.AssertAcquired();
@@ -1499,6 +1511,18 @@
   if (duration != TimeDelta() && duration_ == kNoTimestamp())
     UpdateDuration(duration);
 
+  if (!timeline_offset.is_null()) {
+    if (!timeline_offset_.is_null() &&
+        timeline_offset != timeline_offset_) {
+      MEDIA_LOG(log_cb_)
+          << "Timeline offset is not the same across all SourceBuffers.";
+      ReportError_Locked(DEMUXER_ERROR_COULD_NOT_OPEN);
+      return;
+    }
+
+    timeline_offset_ = timeline_offset;
+  }
+
   // Wait until all streams have initialized.
   if ((!source_id_audio_.empty() && !audio_) ||
       (!source_id_video_.empty() && !video_))
diff --git a/media/filters/chunk_demuxer.h b/media/filters/chunk_demuxer.h
index 685e0b4..c0889f66 100644
--- a/media/filters/chunk_demuxer.h
+++ b/media/filters/chunk_demuxer.h
@@ -158,6 +158,7 @@
   virtual void OnAudioRendererDisabled() OVERRIDE;
   virtual DemuxerStream* GetStream(DemuxerStream::Type type) OVERRIDE;
   virtual base::TimeDelta GetStartTime() const OVERRIDE;
+  virtual base::Time GetTimelineOffset() const OVERRIDE;
 
   // Methods used by an external object to control this demuxer.
   //
@@ -286,7 +287,8 @@
   bool CanEndOfStream_Locked() const;
 
   // SourceState callbacks.
-  void OnSourceInitDone(bool success, base::TimeDelta duration);
+  void OnSourceInitDone(bool success, base::TimeDelta duration,
+                        base::Time timeline_offset);
 
   // Creates a DemuxerStream for the specified |type|.
   // Returns a new ChunkDemuxerStream instance if a stream of this type
@@ -363,6 +365,8 @@
   // the actual duration instead of a user specified value.
   double user_specified_duration_;
 
+  base::Time timeline_offset_;
+
   typedef std::map<std::string, SourceState*> SourceStateMap;
   SourceStateMap source_state_map_;
 
diff --git a/media/filters/chunk_demuxer_unittest.cc b/media/filters/chunk_demuxer_unittest.cc
index 9df5108..e477eee 100644
--- a/media/filters/chunk_demuxer_unittest.cc
+++ b/media/filters/chunk_demuxer_unittest.cc
@@ -172,7 +172,7 @@
     Demuxer::NeedKeyCB need_key_cb =
         base::Bind(&ChunkDemuxerTest::DemuxerNeedKey, base::Unretained(this));
     demuxer_.reset(
-        new ChunkDemuxer(open_cb, need_key_cb, base::Bind(&LogFunc), false));
+        new ChunkDemuxer(open_cb, need_key_cb, base::Bind(&LogFunc), true));
   }
 
   virtual ~ChunkDemuxerTest() {
@@ -577,7 +577,7 @@
     // the files are fixed to have the correct duration in their init segments,
     // and the CreateInitDoneCB() call, above, is fixed to used that duration.
     // See http://crbug.com/354284.
-    EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(2768)));
+    EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(2746)));
     AppendData(bear1->data(), bear1->data_size());
     // Last audio frame has timestamp 2721 and duration 24 (estimated from max
     // seen so far for audio track).
@@ -1671,7 +1671,7 @@
   // TODO(wolenetz/acolwell): Remove this SetDuration expectation and update the
   // ParseWebMFile() call's expected duration, below, once the file is fixed to
   // have the correct duration in the init segment. See http://crbug.com/354284.
-  EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(2768)));
+  EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(2746)));
 
   ASSERT_TRUE(ParseWebMFile("bear-320x240.webm", buffer_timestamps,
                             base::TimeDelta::FromMilliseconds(2744)));
@@ -1704,7 +1704,7 @@
   // TODO(wolenetz/acolwell): Remove this SetDuration expectation and update the
   // ParseWebMFile() call's expected duration, below, once the file is fixed to
   // have the correct duration in the init segment. See http://crbug.com/354284.
-  EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(2768)));
+  EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(2746)));
 
   ASSERT_TRUE(ParseWebMFile("bear-320x240-audio-only.webm", buffer_timestamps,
                             base::TimeDelta::FromMilliseconds(2744),
@@ -1741,11 +1741,6 @@
     {kSkip, kSkip},
   };
 
-  // TODO(wolenetz/acolwell): Remove this SetDuration expectation and update the
-  // ParseWebMFile() call's expected duration, below, once the file is fixed to
-  // have the correct duration in the init segment. See http://crbug.com/354284.
-  EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(2768)));
-
   ASSERT_TRUE(ParseWebMFile("bear-320x240-altref.webm", buffer_timestamps,
                             base::TimeDelta::FromMilliseconds(2767)));
 }
@@ -2294,14 +2289,14 @@
   // Append and remove data so that the 2 streams' end ranges do not overlap.
 
   EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(246)));
-  EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(366)));
+  EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(398)));
   AppendSingleStreamCluster(kSourceId, kAudioTrackNum, "200K 223K");
   AppendSingleStreamCluster(kSourceId, kVideoTrackNum,
-                            "200K 233 266 299 300K 333");
+                            "200K 233 266 299 332K 365");
 
   // At this point, the per-stream ranges are as follows:
   // Audio: [0,46) [200,246)
-  // Video: [0,66) [200,366)
+  // Video: [0,66) [200,398)
   CheckExpectedRanges("{ [0,46) [200,246) }");
 
   demuxer_->Remove(kSourceId, base::TimeDelta::FromMilliseconds(200),
@@ -2309,7 +2304,7 @@
 
   // At this point, the per-stream ranges are as follows:
   // Audio: [0,46)
-  // Video: [0,66) [300,366)
+  // Video: [0,66) [332,398)
   CheckExpectedRanges("{ [0,46) }");
 
   AppendSingleStreamCluster(kSourceId, kAudioTrackNum, "200K 223K");
@@ -2317,7 +2312,7 @@
 
   // At this point, the per-stream ranges are as follows:
   // Audio: [0,46) [200,246)
-  // Video: [0,66) [200,266) [300,366)
+  // Video: [0,66) [200,266) [332,398)
   // NOTE: The last range on each stream do not overlap in time.
   CheckExpectedRanges("{ [0,46) [200,246) }");
 
@@ -2325,9 +2320,9 @@
 
   // NOTE: The last range on each stream gets extended to the highest
   // end timestamp according to the spec. The last audio range gets extended
-  // from [200,246) to [200,366) which is why the intersection results in the
+  // from [200,246) to [200,398) which is why the intersection results in the
   // middle range getting larger AND the new range appearing.
-  CheckExpectedRanges("{ [0,46) [200,266) [300,366) }");
+  CheckExpectedRanges("{ [0,46) [200,266) [332,398) }");
 }
 
 TEST_P(ChunkDemuxerTest, DifferentStreamTimecodes) {
@@ -2583,10 +2578,17 @@
 
   ExpectRead(DemuxerStream::AUDIO, 0);
 
+  // The first config change seen is from a splice frame representing an overlap
+  // of buffer from config 1 by buffers from config 2.
   ReadUntilNotOkOrEndOfStream(DemuxerStream::AUDIO, &status, &last_timestamp);
-
   ASSERT_EQ(status, DemuxerStream::kConfigChanged);
   EXPECT_EQ(last_timestamp.InMilliseconds(), 524);
+  ASSERT_TRUE(audio_config_1.Matches(audio->audio_decoder_config()));
+
+  // The next is due to a typical config difference.
+  ReadUntilNotOkOrEndOfStream(DemuxerStream::AUDIO, &status, &last_timestamp);
+  ASSERT_EQ(status, DemuxerStream::kConfigChanged);
+  EXPECT_EQ(last_timestamp.InMilliseconds(), 527);
 
   // Fetch the new decoder config.
   const AudioDecoderConfig& audio_config_2 = audio->audio_decoder_config();
@@ -2594,22 +2596,26 @@
   EXPECT_EQ(audio_config_2.samples_per_second(), 44100);
   EXPECT_EQ(audio_config_2.extra_data_size(), 3935u);
 
-  ExpectRead(DemuxerStream::AUDIO, 527);
-
-  // Read until the next config change.
+  // The next config change is from a splice frame representing an overlap of
+  // buffers from config 2 by buffers from config 1.
   ReadUntilNotOkOrEndOfStream(DemuxerStream::AUDIO, &status, &last_timestamp);
   ASSERT_EQ(status, DemuxerStream::kConfigChanged);
-  EXPECT_EQ(last_timestamp.InMilliseconds(), 759);
+  EXPECT_EQ(last_timestamp.InMilliseconds(), 782);
+  ASSERT_TRUE(audio_config_2.Matches(audio->audio_decoder_config()));
+
+  ReadUntilNotOkOrEndOfStream(DemuxerStream::AUDIO, &status, &last_timestamp);
+
+  ASSERT_EQ(status, DemuxerStream::kConfigChanged);
+  EXPECT_EQ(last_timestamp.InMilliseconds(), 779);
 
   // Get the new config and verify that it matches the first one.
   ASSERT_TRUE(audio_config_1.Matches(audio->audio_decoder_config()));
 
-  ExpectRead(DemuxerStream::AUDIO, 779);
-
   // Read until the end of the stream just to make sure there aren't any other
   // config changes.
   ReadUntilNotOkOrEndOfStream(DemuxerStream::AUDIO, &status, &last_timestamp);
   ASSERT_EQ(status, DemuxerStream::kOk);
+  EXPECT_EQ(last_timestamp.InMilliseconds(), 2744);
 }
 
 TEST_P(ChunkDemuxerTest, ConfigChange_Seek) {
diff --git a/media/filters/decoder_stream.cc b/media/filters/decoder_stream.cc
index 350e47f..c4adc63 100644
--- a/media/filters/decoder_stream.cc
+++ b/media/filters/decoder_stream.cc
@@ -50,6 +50,7 @@
           new DecoderSelector<StreamType>(task_runner,
                                           decoders.Pass(),
                                           set_decryptor_ready_cb)),
+      active_splice_(false),
       weak_factory_(this) {}
 
 template <DemuxerStream::Type StreamType>
@@ -408,9 +409,12 @@
     return;
   }
 
-  if (!splice_observer_cb_.is_null() && !buffer->end_of_stream() &&
-      buffer->splice_timestamp() != kNoTimestamp()) {
-    splice_observer_cb_.Run(buffer->splice_timestamp());
+  if (!splice_observer_cb_.is_null() && !buffer->end_of_stream()) {
+    const bool has_splice_ts = buffer->splice_timestamp() != kNoTimestamp();
+    if (active_splice_ || has_splice_ts) {
+      splice_observer_cb_.Run(buffer->splice_timestamp());
+      active_splice_ = has_splice_ts;
+    }
   }
 
   DCHECK(status == DemuxerStream::kOk) << status;
diff --git a/media/filters/decoder_stream.h b/media/filters/decoder_stream.h
index 2fd2a55..4992141 100644
--- a/media/filters/decoder_stream.h
+++ b/media/filters/decoder_stream.h
@@ -89,6 +89,9 @@
 
   // Allows callers to register for notification of splice buffers from the
   // demuxer.  I.e., DecoderBuffer::splice_timestamp() is not kNoTimestamp().
+  //
+  // The observer will be notified of all buffers with a splice_timestamp() and
+  // the first buffer after which has a splice_timestamp() of kNoTimestamp().
   typedef base::Callback<void(base::TimeDelta)> SpliceObserverCB;
   void set_splice_observer(const SpliceObserverCB& splice_observer) {
     splice_observer_cb_ = splice_observer;
@@ -180,6 +183,10 @@
   SpliceObserverCB splice_observer_cb_;
   ConfigChangeObserverCB config_change_observer_cb_;
 
+  // If a splice_timestamp() has been seen, this is true until a
+  // splice_timestamp() of kNoTimestamp() is encountered.
+  bool active_splice_;
+
   // NOTE: Weak pointers must be invalidated before all other member variables.
   base::WeakPtrFactory<DecoderStream<StreamType> > weak_factory_;
 
diff --git a/media/filters/decrypting_audio_decoder_unittest.cc b/media/filters/decrypting_audio_decoder_unittest.cc
index add52b9..d7f1f9d 100644
--- a/media/filters/decrypting_audio_decoder_unittest.cc
+++ b/media/filters/decrypting_audio_decoder_unittest.cc
@@ -123,7 +123,7 @@
 
     config_.Initialize(kCodecVorbis, kSampleFormatPlanarF32,
                        CHANNEL_LAYOUT_STEREO, kSampleRate, NULL, 0, true, true,
-                       base::TimeDelta(), base::TimeDelta());
+                       base::TimeDelta(), 0);
     InitializeAndExpectStatus(config_, PIPELINE_OK);
   }
 
@@ -131,7 +131,7 @@
     ReinitializeConfigChange(config_);
   }
 
-  void ReinitializeConfigChange(AudioDecoderConfig& new_config) {
+  void ReinitializeConfigChange(const AudioDecoderConfig& new_config) {
     EXPECT_CALL(*decryptor_, DeinitializeDecoder(Decryptor::kAudio));
     EXPECT_CALL(*decryptor_, InitializeAudioDecoder(_, _))
         .WillOnce(RunCallback<1>(true));
diff --git a/media/filters/decrypting_demuxer_stream.cc b/media/filters/decrypting_demuxer_stream.cc
index 821ea8b..6a1de5f 100644
--- a/media/filters/decrypting_demuxer_stream.cc
+++ b/media/filters/decrypting_demuxer_stream.cc
@@ -370,7 +370,7 @@
                                false,  // Output audio is not encrypted.
                                false,
                                base::TimeDelta(),
-                               base::TimeDelta());
+                               0);
       break;
     }
 
diff --git a/media/filters/fake_video_decoder.h b/media/filters/fake_video_decoder.h
index e4038d3..8e6c2ec 100644
--- a/media/filters/fake_video_decoder.h
+++ b/media/filters/fake_video_decoder.h
@@ -30,8 +30,7 @@
 class FakeVideoDecoder : public VideoDecoder {
  public:
   // Constructs an object with a decoding delay of |decoding_delay| frames.
-  explicit FakeVideoDecoder(int decoding_delay,
-                            bool supports_get_decode_output);
+  FakeVideoDecoder(int decoding_delay, bool supports_get_decode_output);
   virtual ~FakeVideoDecoder();
 
   // VideoDecoder implementation.
diff --git a/media/filters/ffmpeg_audio_decoder.cc b/media/filters/ffmpeg_audio_decoder.cc
index 45f8dd4..02af059 100644
--- a/media/filters/ffmpeg_audio_decoder.cc
+++ b/media/filters/ffmpeg_audio_decoder.cc
@@ -262,22 +262,30 @@
   }
 
   if (!buffer->end_of_stream()) {
-    if (last_input_timestamp_ == kNoTimestamp() &&
-        codec_context_->codec_id == AV_CODEC_ID_VORBIS &&
+    DCHECK(buffer->timestamp() != kNoTimestamp());
+    const bool first_buffer =
+        last_input_timestamp_ == kNoTimestamp() &&
+        output_timestamp_helper_->base_timestamp() == kNoTimestamp();
+    if (first_buffer && codec_context_->codec_id == AV_CODEC_ID_VORBIS &&
         buffer->timestamp() < base::TimeDelta()) {
       // Dropping frames for negative timestamps as outlined in section A.2
       // in the Vorbis spec. http://xiph.org/vorbis/doc/Vorbis_I_spec.html
-      output_frames_to_drop_ = floor(0.5 + -buffer->timestamp().InSecondsF() *
-                                               config_.samples_per_second());
+      DCHECK_EQ(output_frames_to_drop_, 0);
+      output_frames_to_drop_ =
+          0.5 +
+          -buffer->timestamp().InSecondsF() * config_.samples_per_second();
+
+      // If we are dropping samples for Vorbis, the timeline always starts at 0.
+      output_timestamp_helper_->SetBaseTimestamp(base::TimeDelta());
     } else {
-      if (last_input_timestamp_ != kNoTimestamp() &&
-          buffer->timestamp() < last_input_timestamp_) {
+      if (first_buffer) {
+        output_timestamp_helper_->SetBaseTimestamp(buffer->timestamp());
+      } else if (buffer->timestamp() < last_input_timestamp_) {
         const base::TimeDelta diff =
             buffer->timestamp() - last_input_timestamp_;
-        DLOG(WARNING)
-            << "Input timestamps are not monotonically increasing! "
-            << " ts " << buffer->timestamp().InMicroseconds() << " us"
-            << " diff " << diff.InMicroseconds() << " us";
+        DLOG(WARNING) << "Input timestamps are not monotonically increasing! "
+                      << " ts " << buffer->timestamp().InMicroseconds() << " us"
+                      << " diff " << diff.InMicroseconds() << " us";
       }
 
       last_input_timestamp_ = buffer->timestamp();
@@ -355,19 +363,6 @@
     packet.size -= result;
     packet.data += result;
 
-    if (output_timestamp_helper_->base_timestamp() == kNoTimestamp() &&
-        !buffer->end_of_stream()) {
-      DCHECK(buffer->timestamp() != kNoTimestamp());
-      if (output_frames_to_drop_ > 0) {
-        // Currently Vorbis is the only codec that causes us to drop samples.
-        // If we have to drop samples it always means the timeline starts at 0.
-        DCHECK_EQ(codec_context_->codec_id, AV_CODEC_ID_VORBIS);
-        output_timestamp_helper_->SetBaseTimestamp(base::TimeDelta());
-      } else {
-        output_timestamp_helper_->SetBaseTimestamp(buffer->timestamp());
-      }
-    }
-
     scoped_refptr<AudioBuffer> output;
     int decoded_frames = 0;
     int original_frames = 0;
@@ -483,6 +478,7 @@
   av_frame_.reset(av_frame_alloc());
   output_timestamp_helper_.reset(
       new AudioTimestampHelper(config_.samples_per_second()));
+  ResetTimestampState();
 
   av_sample_format_ = codec_context_->sample_fmt;
 
@@ -496,6 +492,8 @@
     state_ = kUninitialized;
     return false;
   }
+
+  output_frames_to_drop_ = config_.codec_delay();
   return true;
 }
 
diff --git a/media/filters/ffmpeg_demuxer.cc b/media/filters/ffmpeg_demuxer.cc
index de1968a..d54db07 100644
--- a/media/filters/ffmpeg_demuxer.cc
+++ b/media/filters/ffmpeg_demuxer.cc
@@ -34,6 +34,22 @@
 
 namespace media {
 
+static base::Time ExtractTimelineOffset(AVFormatContext* format_context) {
+  if (strstr(format_context->iformat->name, "webm") ||
+      strstr(format_context->iformat->name, "matroska")) {
+    const AVDictionaryEntry* entry =
+        av_dict_get(format_context->metadata, "creation_time", NULL, 0);
+
+    base::Time timeline_offset;
+    if (entry != NULL && entry->value != NULL &&
+        FFmpegUTCDateToTime(entry->value, &timeline_offset)) {
+      return timeline_offset;
+    }
+  }
+
+  return base::Time();
+}
+
 //
 // FFmpegDemuxerStream
 //
@@ -486,6 +502,10 @@
   return start_time_;
 }
 
+base::Time FFmpegDemuxer::GetTimelineOffset() const {
+  return timeline_offset_;
+}
+
 void FFmpegDemuxer::AddTextStreams() {
   DCHECK(task_runner_->BelongsToCurrentThread());
 
@@ -674,6 +694,8 @@
   if (strcmp(format_context->iformat->name, "avi") == 0)
     format_context->flags |= AVFMT_FLAG_GENPTS;
 
+  timeline_offset_ = ExtractTimelineOffset(format_context);
+
   // Good to go: set the duration and bitrate and notify we're done
   // initializing.
   host_->SetDuration(max_duration);
diff --git a/media/filters/ffmpeg_demuxer.h b/media/filters/ffmpeg_demuxer.h
index 7acdd43..453367d 100644
--- a/media/filters/ffmpeg_demuxer.h
+++ b/media/filters/ffmpeg_demuxer.h
@@ -154,6 +154,7 @@
   virtual void OnAudioRendererDisabled() OVERRIDE;
   virtual DemuxerStream* GetStream(DemuxerStream::Type type) OVERRIDE;
   virtual base::TimeDelta GetStartTime() const OVERRIDE;
+  virtual base::Time GetTimelineOffset() const OVERRIDE;
 
   // Calls |need_key_cb_| with the initialization data encountered in the file.
   void FireNeedKey(const std::string& init_data_type,
@@ -246,6 +247,10 @@
   // is 0.
   base::TimeDelta start_time_;
 
+  // The Time associated with timestamp 0. Set to a null
+  // time if the file doesn't have an association to Time.
+  base::Time timeline_offset_;
+
   // Whether audio has been disabled for this demuxer (in which case this class
   // drops packets destined for AUDIO demuxer streams on the floor).
   bool audio_disabled_;
diff --git a/media/filters/opus_audio_decoder.cc b/media/filters/opus_audio_decoder.cc
index 5afc024..e54bf08 100644
--- a/media/filters/opus_audio_decoder.cc
+++ b/media/filters/opus_audio_decoder.cc
@@ -253,7 +253,6 @@
       opus_decoder_(NULL),
       last_input_timestamp_(kNoTimestamp()),
       frames_to_discard_(0),
-      frame_delay_at_start_(0),
       start_input_timestamp_(kNoTimestamp()) {}
 
 void OpusAudioDecoder::Initialize(const AudioDecoderConfig& config,
@@ -337,7 +336,7 @@
     start_input_timestamp_ = input->timestamp();
   if (last_input_timestamp_ == kNoTimestamp() &&
       input->timestamp() == start_input_timestamp_) {
-    frames_to_discard_ = frame_delay_at_start_;
+    frames_to_discard_ = config_.codec_delay();
   }
 
   last_input_timestamp_ = input->timestamp();
@@ -391,17 +390,13 @@
                           &opus_extra_data))
     return false;
 
-  // Convert from seconds to samples.
-  timestamp_offset_ = config_.codec_delay();
-  frame_delay_at_start_ = TimeDeltaToAudioFrames(config_.codec_delay(),
-                                                 config_.samples_per_second());
-  if (timestamp_offset_ <= base::TimeDelta() || frame_delay_at_start_ < 0) {
+  if (config_.codec_delay() <= 0) {
     DLOG(ERROR) << "Invalid file. Incorrect value for codec delay: "
-                << config_.codec_delay().InMicroseconds();
+                << config_.codec_delay();
     return false;
   }
 
-  if (frame_delay_at_start_ != opus_extra_data.skip_samples) {
+  if (config_.codec_delay() != opus_extra_data.skip_samples) {
     DLOG(ERROR) << "Invalid file. Codec Delay in container does not match the "
                 << "value in Opus Extra Data.";
     return false;
@@ -496,7 +491,12 @@
   if (output_timestamp_helper_->base_timestamp() == kNoTimestamp() &&
       !input->end_of_stream()) {
     DCHECK(input->timestamp() != kNoTimestamp());
+    // Adjust the timestamp helper so the base timestamp is corrected for frames
+    // dropped due to codec delay.
     output_timestamp_helper_->SetBaseTimestamp(input->timestamp());
+    output_timestamp_helper_->SetBaseTimestamp(
+        input->timestamp() -
+        output_timestamp_helper_->GetFrameDuration(config_.codec_delay()));
   }
 
   // Trim off any extraneous allocation.
@@ -529,8 +529,7 @@
   }
 
   // Assign timestamp and duration to the buffer.
-  output_buffer->get()->set_timestamp(
-      output_timestamp_helper_->GetTimestamp() - timestamp_offset_);
+  output_buffer->get()->set_timestamp(output_timestamp_helper_->GetTimestamp());
   output_buffer->get()->set_duration(
       output_timestamp_helper_->GetFrameDuration(frames_to_output));
   output_timestamp_helper_->AddFrames(frames_decoded);
diff --git a/media/filters/opus_audio_decoder.h b/media/filters/opus_audio_decoder.h
index 2fad5a8..d0dfcf0 100644
--- a/media/filters/opus_audio_decoder.h
+++ b/media/filters/opus_audio_decoder.h
@@ -66,16 +66,10 @@
   // happens.
   int frames_to_discard_;
 
-  // Number of frames to be discarded at the start of the stream. This value
-  // is typically the CodecDelay value from the container.  This value should
-  // only be applied when input timestamp is |start_input_timestamp_|.
-  int frame_delay_at_start_;
+  // When the input timestamp is |start_input_timestamp_| the decoder needs to
+  // drop |config_.codec_delay()| frames.
   base::TimeDelta start_input_timestamp_;
 
-  // Timestamp to be subtracted from all the frames. This is typically computed
-  // from the CodecDelay value in the container.
-  base::TimeDelta timestamp_offset_;
-
   DISALLOW_IMPLICIT_CONSTRUCTORS(OpusAudioDecoder);
 };
 
diff --git a/media/filters/pipeline_integration_test.cc b/media/filters/pipeline_integration_test.cc
index aa73531..3fbfb86 100644
--- a/media/filters/pipeline_integration_test.cc
+++ b/media/filters/pipeline_integration_test.cc
@@ -20,6 +20,7 @@
 using testing::_;
 using testing::AnyNumber;
 using testing::AtMost;
+using testing::SaveArg;
 using testing::Values;
 
 namespace media {
@@ -61,10 +62,10 @@
 const int kAppendTimeSec = 1;
 const int kAppendTimeMs = kAppendTimeSec * 1000;
 const int k320WebMFileDurationMs = 2736;
-const int k640WebMFileDurationMs = 2762;
+const int k640WebMFileDurationMs = 2749;
 const int kOpusEndTrimmingWebMFileDurationMs = 2771;
 const int kVP9WebMFileDurationMs = 2736;
-const int kVP8AWebMFileDurationMs = 2734;
+const int kVP8AWebMFileDurationMs = 2733;
 
 #if defined(USE_PROPRIETARY_CODECS)
 const int k640IsoFileDurationMs = 2737;
@@ -73,6 +74,37 @@
 const int k1280IsoAVC3FileDurationMs = 2736;
 #endif  // defined(USE_PROPRIETARY_CODECS)
 
+// Return a timeline offset for bear-320x240-live.webm.
+static base::Time kLiveTimelineOffset() {
+  // The file contians the following UTC timeline offset:
+  // 2012-11-10 12:34:56.789123456
+  // Since base::Time only has a resolution of microseconds,
+  // construct a base::Time for 2012-11-10 12:34:56.789123.
+  base::Time::Exploded exploded_time;
+  exploded_time.year = 2012;
+  exploded_time.month = 11;
+  exploded_time.day_of_month = 10;
+  exploded_time.hour = 12;
+  exploded_time.minute = 34;
+  exploded_time.second = 56;
+  exploded_time.millisecond = 789;
+  base::Time timeline_offset = base::Time::FromUTCExploded(exploded_time);
+
+  timeline_offset += base::TimeDelta::FromMicroseconds(123);
+
+  return timeline_offset;
+}
+
+// FFmpeg only supports time a resolution of seconds so this
+// helper function truncates a base::Time to seconds resolution.
+static base::Time TruncateToFFmpegTimeResolution(base::Time t) {
+  base::Time::Exploded exploded_time;
+  t.UTCExplode(&exploded_time);
+  exploded_time.millisecond = 0;
+
+  return base::Time::FromUTCExploded(exploded_time);
+}
+
 // Note: Tests using this class only exercise the DecryptingDemuxerStream path.
 // They do not exercise the Decrypting{Audio|Video}Decoder path.
 class FakeEncryptedMedia {
@@ -266,7 +298,7 @@
             base::Bind(&MockMediaSource::DemuxerNeedKey,
                        base::Unretained(this)),
             LogCB(),
-            false)),
+            true)),
         owned_chunk_demuxer_(chunk_demuxer_),
         use_legacy_frame_processor_(use_legacy_frame_processor) {
 
@@ -409,7 +441,8 @@
       public PipelineIntegrationTestBase {
  public:
   void StartPipelineWithMediaSource(MockMediaSource* source) {
-    EXPECT_CALL(*this, OnMetadata(_)).Times(AtMost(1));
+    EXPECT_CALL(*this, OnMetadata(_)).Times(AtMost(1))
+        .WillRepeatedly(SaveArg<0>(&metadata_));
     EXPECT_CALL(*this, OnPrerollCompleted()).Times(AtMost(1));
     pipeline_->Start(
         CreateFilterCollection(source->GetDemuxer(), NULL),
@@ -433,7 +466,8 @@
   void StartPipelineWithEncryptedMedia(
       MockMediaSource* source,
       FakeEncryptedMedia* encrypted_media) {
-    EXPECT_CALL(*this, OnMetadata(_)).Times(AtMost(1));
+    EXPECT_CALL(*this, OnMetadata(_)).Times(AtMost(1))
+        .WillRepeatedly(SaveArg<0>(&metadata_));
     EXPECT_CALL(*this, OnPrerollCompleted()).Times(AtMost(1));
     pipeline_->Start(
         CreateFilterCollection(source->GetDemuxer(),
@@ -504,6 +538,24 @@
 
   EXPECT_EQ("f0be120a90a811506777c99a2cdf7cc1", GetVideoHash());
   EXPECT_EQ("-3.59,-2.06,-0.43,2.15,0.77,-0.95,", GetAudioHash());
+  EXPECT_TRUE(demuxer_->GetTimelineOffset().is_null());
+}
+
+TEST_F(PipelineIntegrationTest, BasicPlaybackLive) {
+  ASSERT_TRUE(Start(
+      GetTestDataFilePath("bear-320x240-live.webm"), PIPELINE_OK, kHashed));
+
+  Play();
+
+  ASSERT_TRUE(WaitUntilOnEnded());
+
+  EXPECT_EQ("f0be120a90a811506777c99a2cdf7cc1", GetVideoHash());
+  EXPECT_EQ("-3.59,-2.06,-0.43,2.15,0.77,-0.95,", GetAudioHash());
+
+  // TODO: Fix FFmpeg code to return higher resolution time values so
+  // we don't have to truncate our expectations here.
+  EXPECT_EQ(TruncateToFFmpegTimeResolution(kLiveTimelineOffset()),
+            demuxer_->GetTimelineOffset());
 }
 
 TEST_F(PipelineIntegrationTest, F32PlaybackHashed) {
@@ -542,6 +594,28 @@
   Play();
 
   ASSERT_TRUE(WaitUntilOnEnded());
+
+  EXPECT_TRUE(demuxer_->GetTimelineOffset().is_null());
+  source.Abort();
+  Stop();
+}
+
+TEST_P(PipelineIntegrationTest, BasicPlayback_MediaSource_Live) {
+  MockMediaSource source("bear-320x240-live.webm", kWebM, 219221, GetParam());
+  StartPipelineWithMediaSource(&source);
+  source.EndOfStream();
+
+  EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size());
+  EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds());
+  EXPECT_EQ(k320WebMFileDurationMs,
+            pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds());
+
+  Play();
+
+  ASSERT_TRUE(WaitUntilOnEnded());
+
+  EXPECT_EQ(kLiveTimelineOffset(),
+            demuxer_->GetTimelineOffset());
   source.Abort();
   Stop();
 }
@@ -589,11 +663,7 @@
 
   EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size());
   EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds());
-  // TODO(acolwell/wolenetz): Drop the "+ 1" once WebM stream parser always
-  // emits frames with valid durations (see http://crbug.com/351166) and
-  // compliant coded frame processor's "highest presentation end timestamp" is
-  // used to update duration (see http://crbug.com/249422).
-  EXPECT_EQ(kOpusEndTrimmingWebMFileDurationMs + 1,
+  EXPECT_EQ(kOpusEndTrimmingWebMFileDurationMs,
             pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds());
   Play();
 
@@ -610,11 +680,7 @@
 
   EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size());
   EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds());
-  // TODO(acolwell/wolenetz): Drop the "+ 1" once WebM stream parser always
-  // emits frames with valid durations (see http://crbug.com/351166) and
-  // compliant coded frame processor's "highest presentation end timestamp" is
-  // used to update duration (see http://crbug.com/249422).
-  EXPECT_EQ(kOpusEndTrimmingWebMFileDurationMs + 1,
+  EXPECT_EQ(kOpusEndTrimmingWebMFileDurationMs,
             pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds());
 
   base::TimeDelta start_seek_time = base::TimeDelta::FromMilliseconds(1000);
@@ -675,10 +741,7 @@
 
   EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size());
   EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds());
-  // The "+ 1" is due to estimated audio and video frame durations on the last
-  // frames appended. The unencrypted file has a TrackEntry DefaultDuration
-  // field for the video track, but the encrypted file does not.
-  EXPECT_EQ(kAppendTimeMs + k640WebMFileDurationMs + 1,
+  EXPECT_EQ(kAppendTimeMs + k640WebMFileDurationMs,
             pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds());
 
   Play();
@@ -738,10 +801,7 @@
   EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size());
   EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds());
   // The second video was not added, so its time has not been added.
-  // The "+ 1" is due to estimated audio and video frame durations on the last
-  // frames appended. The unencrypted file has a TrackEntry DefaultDuration
-  // field for the video track, but the encrypted file does not.
-  EXPECT_EQ(k320WebMFileDurationMs + 1,
+  EXPECT_EQ(k320WebMFileDurationMs,
             pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds());
 
   Play();
@@ -789,22 +849,26 @@
 
 TEST_P(PipelineIntegrationTest, MediaSource_MP3) {
   MockMediaSource source("sfx.mp3", kMP3, kAppendWholeFile, GetParam());
-  StartPipelineWithMediaSource(&source);
+  StartHashedPipelineWithMediaSource(&source);
   source.EndOfStream();
 
   EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size());
   EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds());
-  EXPECT_EQ(339, pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds());
+  EXPECT_EQ(313, pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds());
 
   Play();
 
   EXPECT_TRUE(WaitUntilOnEnded());
+
+  // Verify that codec delay was stripped, if it wasn't the hash would be:
+  // "5.16,1.25,7.78,4.29,8.98,2.76,"
+  EXPECT_EQ("5.81,2.71,8.97,4.32,7.83,1.12,", GetAudioHash());
 }
 
 TEST_P(PipelineIntegrationTest, MediaSource_MP3_TimestampOffset) {
   MockMediaSource source("sfx.mp3", kMP3, kAppendWholeFile, GetParam());
   StartPipelineWithMediaSource(&source);
-  EXPECT_EQ(339, source.last_timestamp_offset().InMilliseconds());
+  EXPECT_EQ(313, source.last_timestamp_offset().InMilliseconds());
 
   scoped_refptr<DecoderBuffer> second_file = ReadTestDataFile("sfx.mp3");
   source.AppendAtTime(
@@ -813,10 +877,10 @@
       second_file->data_size());
   source.EndOfStream();
 
-  EXPECT_EQ(669, source.last_timestamp_offset().InMilliseconds());
+  EXPECT_EQ(616, source.last_timestamp_offset().InMilliseconds());
   EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size());
   EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds());
-  EXPECT_EQ(669, pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds());
+  EXPECT_EQ(616, pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds());
 
   Play();
 
diff --git a/media/filters/pipeline_integration_test_base.cc b/media/filters/pipeline_integration_test_base.cc
index b6ac627..8abb891 100644
--- a/media/filters/pipeline_integration_test_base.cc
+++ b/media/filters/pipeline_integration_test_base.cc
@@ -20,6 +20,7 @@
 using ::testing::_;
 using ::testing::AnyNumber;
 using ::testing::AtMost;
+using ::testing::SaveArg;
 
 namespace media {
 
@@ -103,7 +104,8 @@
 
 bool PipelineIntegrationTestBase::Start(const base::FilePath& file_path,
                                         PipelineStatus expected_status) {
-  EXPECT_CALL(*this, OnMetadata(_)).Times(AtMost(1));
+  EXPECT_CALL(*this, OnMetadata(_)).Times(AtMost(1))
+      .WillRepeatedly(SaveArg<0>(&metadata_));
   EXPECT_CALL(*this, OnPrerollCompleted()).Times(AtMost(1));
   pipeline_->Start(
       CreateFilterCollection(file_path, NULL),
@@ -136,7 +138,8 @@
 
 bool PipelineIntegrationTestBase::Start(const base::FilePath& file_path,
                                         Decryptor* decryptor) {
-  EXPECT_CALL(*this, OnMetadata(_)).Times(AtMost(1));
+  EXPECT_CALL(*this, OnMetadata(_)).Times(AtMost(1))
+      .WillRepeatedly(SaveArg<0>(&metadata_));
   EXPECT_CALL(*this, OnPrerollCompleted()).Times(AtMost(1));
   pipeline_->Start(
       CreateFilterCollection(file_path, decryptor),
diff --git a/media/filters/pipeline_integration_test_base.h b/media/filters/pipeline_integration_test_base.h
index 1294a62..10cf262 100644
--- a/media/filters/pipeline_integration_test_base.h
+++ b/media/filters/pipeline_integration_test_base.h
@@ -111,6 +111,7 @@
   VideoFrame::Format last_video_frame_format_;
   DummyTickClock dummy_clock_;
   AudioHardwareConfig hardware_config_;
+  PipelineMetadata metadata_;
 
   void OnStatusCallbackChecked(PipelineStatus expected_status,
                                PipelineStatus status);
diff --git a/media/filters/source_buffer_stream.cc b/media/filters/source_buffer_stream.cc
index 4b892d7..09a3145 100644
--- a/media/filters/source_buffer_stream.cc
+++ b/media/filters/source_buffer_stream.cc
@@ -490,7 +490,8 @@
     last_appended_buffer_timestamp_ = buffers.back()->GetDecodeTimestamp();
     last_appended_buffer_is_keyframe_ = buffers.back()->IsKeyframe();
   } else {
-    base::TimeDelta new_range_start_time = media_segment_start_time_;
+    base::TimeDelta new_range_start_time = std::min(
+        media_segment_start_time_, buffers.front()->GetDecodeTimestamp());
     const BufferQueue* buffers_for_new_range = &buffers;
     BufferQueue trimmed_buffers;
 
@@ -988,7 +989,14 @@
   // timestamp situation. This prevents the first buffer in the current append
   // from deleting the last buffer in the previous append if both buffers
   // have the same timestamp.
-  bool is_exclusive = (prev_timestamp == next_timestamp) &&
+  //
+  // The delete range should never be exclusive if a splice frame was generated
+  // because we don't generate splice frames for same timestamp situations.
+  DCHECK(new_buffers.front()->splice_timestamp() !=
+         new_buffers.front()->timestamp());
+  const bool is_exclusive =
+      new_buffers.front()->get_splice_buffers().empty() &&
+      prev_timestamp == next_timestamp &&
       AllowSameTimestamp(prev_is_keyframe, next_is_keyframe, GetType());
 
   // Delete the buffers that |new_buffers| overlaps.
@@ -1677,8 +1685,12 @@
 
 void SourceBufferRange::AppendBuffersToEnd(const BufferQueue& new_buffers) {
   DCHECK(buffers_.empty() || CanAppendBuffersToEnd(new_buffers));
+  DCHECK(media_segment_start_time_ == kNoTimestamp() ||
+         media_segment_start_time_ <=
+             new_buffers.front()->GetDecodeTimestamp());
   for (BufferQueue::const_iterator itr = new_buffers.begin();
-       itr != new_buffers.end(); ++itr) {
+       itr != new_buffers.end();
+       ++itr) {
     DCHECK((*itr)->GetDecodeTimestamp() != kNoTimestamp());
     buffers_.push_back(*itr);
     size_in_bytes_ += (*itr)->data_size();
diff --git a/media/filters/source_buffer_stream_unittest.cc b/media/filters/source_buffer_stream_unittest.cc
index db54a41..ccd4f58 100644
--- a/media/filters/source_buffer_stream_unittest.cc
+++ b/media/filters/source_buffer_stream_unittest.cc
@@ -3691,6 +3691,19 @@
   CheckNoNextBuffer();
 }
 
+TEST_F(SourceBufferStreamTest, Audio_SpliceFrame_CorrectMediaSegmentStartTime) {
+  SetAudioStream();
+  Seek(0);
+  NewSegmentAppend("0K 2K 4K");
+  CheckExpectedRangesByTimestamp("{ [0,6) }");
+  NewSegmentAppend("6K 8K 10K");
+  CheckExpectedRangesByTimestamp("{ [0,12) }");
+  NewSegmentAppend("1K 4K");
+  CheckExpectedRangesByTimestamp("{ [0,12) }");
+  CheckExpectedBuffers("0K 2K 4K C 1K 4K 6K 8K 10K");
+  CheckNoNextBuffer();
+}
+
 // TODO(vrk): Add unit tests where keyframes are unaligned between streams.
 // (crbug.com/133557)
 
diff --git a/media/filters/video_frame_scheduler.h b/media/filters/video_frame_scheduler.h
new file mode 100644
index 0000000..6ccebe7
--- /dev/null
+++ b/media/filters/video_frame_scheduler.h
@@ -0,0 +1,43 @@
+// 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.
+
+#ifndef MEDIA_FILTERS_VIDEO_FRAME_SCHEDULER_H_
+#define MEDIA_FILTERS_VIDEO_FRAME_SCHEDULER_H_
+
+#include "base/callback.h"
+#include "base/memory/ref_counted.h"
+#include "media/base/media_export.h"
+
+namespace media {
+
+class VideoFrame;
+
+// Defines an abstract video frame scheduler that is capable of managing the
+// display of video frames at explicit times.
+class MEDIA_EXPORT VideoFrameScheduler {
+ public:
+  VideoFrameScheduler() {}
+  virtual ~VideoFrameScheduler() {}
+
+  enum Reason {
+    DISPLAYED,  // Frame was displayed.
+    DROPPED,    // Frame was dropped.
+    RESET,      // Scheduler was reset before frame was scheduled for display.
+  };
+  typedef base::Callback<void(const scoped_refptr<VideoFrame>&, Reason)> DoneCB;
+
+  // Schedule |frame| to be displayed at |wall_ticks|, firing |done_cb| when
+  // the scheduler has finished with the frame.
+  virtual void ScheduleVideoFrame(const scoped_refptr<VideoFrame>& frame,
+                                  base::TimeTicks wall_ticks,
+                                  const DoneCB& done_cb) = 0;
+
+  // Causes the scheduler to release all previously scheduled frames. Frames
+  // will be returned as RESET.
+  virtual void Reset() = 0;
+};
+
+}  // namespace media
+
+#endif  // MEDIA_FILTERS_VIDEO_FRAME_SCHEDULER_H_
diff --git a/media/filters/video_frame_scheduler_impl.cc b/media/filters/video_frame_scheduler_impl.cc
new file mode 100644
index 0000000..a505164
--- /dev/null
+++ b/media/filters/video_frame_scheduler_impl.cc
@@ -0,0 +1,108 @@
+// 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.
+
+#include "media/filters/video_frame_scheduler_impl.h"
+
+#include <list>
+
+#include "base/single_thread_task_runner.h"
+#include "base/time/default_tick_clock.h"
+#include "media/base/video_frame.h"
+
+namespace media {
+
+VideoFrameSchedulerImpl::VideoFrameSchedulerImpl(
+    const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
+    const DisplayCB& display_cb)
+    : task_runner_(task_runner),
+      display_cb_(display_cb),
+      tick_clock_(new base::DefaultTickClock()) {
+}
+
+VideoFrameSchedulerImpl::~VideoFrameSchedulerImpl() {
+}
+
+void VideoFrameSchedulerImpl::ScheduleVideoFrame(
+    const scoped_refptr<VideoFrame>& frame,
+    base::TimeTicks wall_ticks,
+    const DoneCB& done_cb) {
+  DCHECK(task_runner_->BelongsToCurrentThread());
+  DCHECK(!frame->end_of_stream());
+  pending_frames_.push(PendingFrame(frame, wall_ticks, done_cb));
+  ResetTimerIfNecessary();
+}
+
+void VideoFrameSchedulerImpl::Reset() {
+  DCHECK(task_runner_->BelongsToCurrentThread());
+  while (!pending_frames_.empty()) {
+    pending_frames_.top().done_cb.Run(pending_frames_.top().frame, RESET);
+    pending_frames_.pop();
+  }
+}
+
+void VideoFrameSchedulerImpl::SetTickClockForTesting(
+    scoped_ptr<base::TickClock> tick_clock) {
+  tick_clock_.swap(tick_clock);
+}
+
+void VideoFrameSchedulerImpl::ResetTimerIfNecessary() {
+  if (pending_frames_.empty()) {
+    DCHECK(!timer_.IsRunning());
+    return;
+  }
+
+  // Negative times will schedule the callback to run immediately.
+  timer_.Stop();
+  timer_.Start(FROM_HERE,
+               pending_frames_.top().wall_ticks - tick_clock_->NowTicks(),
+               base::Bind(&VideoFrameSchedulerImpl::OnTimerFired,
+                          base::Unretained(this)));
+}
+
+void VideoFrameSchedulerImpl::OnTimerFired() {
+  base::TimeTicks now = tick_clock_->NowTicks();
+
+  // Move all frames that have reached their deadline into a separate queue.
+  std::list<PendingFrame> expired_frames;
+  while (!pending_frames_.empty() && pending_frames_.top().wall_ticks <= now) {
+    expired_frames.push_back(pending_frames_.top());
+    pending_frames_.pop();
+  }
+
+  // Signal that all frames except for the last one as dropped.
+  while (expired_frames.size() > 1) {
+    expired_frames.front().done_cb.Run(expired_frames.front().frame, DROPPED);
+    expired_frames.pop_front();
+  }
+
+  // Display the last expired frame.
+  if (!expired_frames.empty()) {
+    display_cb_.Run(expired_frames.front().frame);
+    expired_frames.front().done_cb.Run(expired_frames.front().frame, DISPLAYED);
+    expired_frames.pop_front();
+  }
+
+  ResetTimerIfNecessary();
+}
+
+VideoFrameSchedulerImpl::PendingFrame::PendingFrame(
+    const scoped_refptr<VideoFrame>& frame,
+    base::TimeTicks wall_ticks,
+    const DoneCB& done_cb)
+    : frame(frame), wall_ticks(wall_ticks), done_cb(done_cb) {
+}
+
+VideoFrameSchedulerImpl::PendingFrame::~PendingFrame() {
+}
+
+bool VideoFrameSchedulerImpl::PendingFrame::operator<(
+    const PendingFrame& other) const {
+  // Flip the comparison as std::priority_queue<T>::top() returns the largest
+  // element.
+  //
+  // Assume video frames with identical timestamps contain identical content.
+  return wall_ticks > other.wall_ticks;
+}
+
+}  // namespace media
diff --git a/media/filters/video_frame_scheduler_impl.h b/media/filters/video_frame_scheduler_impl.h
new file mode 100644
index 0000000..f6bc78d
--- /dev/null
+++ b/media/filters/video_frame_scheduler_impl.h
@@ -0,0 +1,74 @@
+// 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.
+
+#ifndef MEDIA_FILTERS_VIDEO_FRAME_SCHEDULER_IMPL_H_
+#define MEDIA_FILTERS_VIDEO_FRAME_SCHEDULER_IMPL_H_
+
+#include <queue>
+
+#include "base/memory/ref_counted.h"
+#include "base/timer/timer.h"
+#include "media/filters/video_frame_scheduler.h"
+
+namespace base {
+class SingleThreadTaskRunner;
+class TickClock;
+}
+
+namespace media {
+
+// A scheduler that uses delayed tasks on a task runner for timing the display
+// of video frames.
+//
+// Single threaded. Calls must be on |task_runner|.
+class MEDIA_EXPORT VideoFrameSchedulerImpl : public VideoFrameScheduler {
+ public:
+  typedef base::Callback<void(const scoped_refptr<VideoFrame>&)> DisplayCB;
+
+  // |task_runner| is used for scheduling the delayed tasks.
+  // |display_cb| is run when a frame is to be displayed.
+  VideoFrameSchedulerImpl(
+      const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
+      const DisplayCB& display_cb);
+  virtual ~VideoFrameSchedulerImpl();
+
+  // VideoFrameScheduler implementation.
+  virtual void ScheduleVideoFrame(const scoped_refptr<VideoFrame>& frame,
+                                  base::TimeTicks wall_ticks,
+                                  const DoneCB& done_cb) OVERRIDE;
+  virtual void Reset() OVERRIDE;
+
+  void SetTickClockForTesting(scoped_ptr<base::TickClock> tick_clock);
+
+ private:
+  void ResetTimerIfNecessary();
+  void OnTimerFired();
+
+  scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
+  DisplayCB display_cb_;
+  scoped_ptr<base::TickClock> tick_clock_;
+  base::OneShotTimer<VideoFrameScheduler> timer_;
+
+  struct PendingFrame {
+    PendingFrame(const scoped_refptr<VideoFrame>& frame,
+                 base::TimeTicks wall_ticks,
+                 const DoneCB& done_cb);
+    ~PendingFrame();
+
+    // For use with std::priority_queue<T>.
+    bool operator<(const PendingFrame& other) const;
+
+    scoped_refptr<VideoFrame> frame;
+    base::TimeTicks wall_ticks;
+    DoneCB done_cb;
+  };
+  typedef std::priority_queue<PendingFrame> PendingFrameQueue;
+  PendingFrameQueue pending_frames_;
+
+  DISALLOW_COPY_AND_ASSIGN(VideoFrameSchedulerImpl);
+};
+
+}  // namespace media
+
+#endif  // MEDIA_FILTERS_VIDEO_FRAME_SCHEDULER_IMPL_H_
diff --git a/media/filters/video_frame_scheduler_impl_unittest.cc b/media/filters/video_frame_scheduler_impl_unittest.cc
new file mode 100644
index 0000000..b423776
--- /dev/null
+++ b/media/filters/video_frame_scheduler_impl_unittest.cc
@@ -0,0 +1,148 @@
+// 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.
+
+#include "base/message_loop/message_loop.h"
+#include "base/test/simple_test_tick_clock.h"
+#include "media/base/test_helpers.h"
+#include "media/base/video_frame.h"
+#include "media/filters/video_frame_scheduler_impl.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace media {
+
+// NOTE: millisecond-level resolution is used for times as real delayed tasks
+// are posted. Don't use large values if you want to keep tests running fast.
+class VideoFrameSchedulerImplTest : public testing::Test {
+ public:
+  VideoFrameSchedulerImplTest()
+      : scheduler_(message_loop_.message_loop_proxy(),
+                   base::Bind(&VideoFrameSchedulerImplTest::OnDisplay,
+                              base::Unretained(this))),
+        tick_clock_(new base::SimpleTestTickClock()) {
+    scheduler_.SetTickClockForTesting(scoped_ptr<base::TickClock>(tick_clock_));
+  }
+
+  virtual ~VideoFrameSchedulerImplTest() {}
+
+  MOCK_METHOD1(OnDisplay, void(const scoped_refptr<VideoFrame>&));
+  MOCK_METHOD2(OnFrameDone,
+               void(const scoped_refptr<VideoFrame>&,
+                    VideoFrameScheduler::Reason));
+
+  void Schedule(const scoped_refptr<VideoFrame>& frame, int64 target_ms) {
+    scheduler_.ScheduleVideoFrame(
+        frame,
+        base::TimeTicks() + base::TimeDelta::FromMilliseconds(target_ms),
+        base::Bind(&VideoFrameSchedulerImplTest::OnFrameDone,
+                   base::Unretained(this)));
+  }
+
+  void RunUntilTimeHasElapsed(int64 ms) {
+    WaitableMessageLoopEvent waiter;
+    message_loop_.PostDelayedTask(
+        FROM_HERE, waiter.GetClosure(), base::TimeDelta::FromMilliseconds(ms));
+    waiter.RunAndWait();
+  }
+
+  void AdvanceTime(int64 ms) {
+    tick_clock_->Advance(base::TimeDelta::FromMilliseconds(ms));
+  }
+
+  void Reset() {
+    scheduler_.Reset();
+  }
+
+ private:
+  base::MessageLoop message_loop_;
+  VideoFrameSchedulerImpl scheduler_;
+  base::SimpleTestTickClock* tick_clock_;  // Owned by |scheduler_|.
+
+  DISALLOW_COPY_AND_ASSIGN(VideoFrameSchedulerImplTest);
+};
+
+TEST_F(VideoFrameSchedulerImplTest, ImmediateDisplay) {
+  scoped_refptr<VideoFrame> frame =
+      VideoFrame::CreateBlackFrame(gfx::Size(8, 8));
+  Schedule(frame, 0);
+
+  EXPECT_CALL(*this, OnDisplay(frame));
+  EXPECT_CALL(*this, OnFrameDone(frame, VideoFrameScheduler::DISPLAYED));
+  RunUntilTimeHasElapsed(0);
+}
+
+TEST_F(VideoFrameSchedulerImplTest, EventualDisplay) {
+  scoped_refptr<VideoFrame> frame =
+      VideoFrame::CreateBlackFrame(gfx::Size(8, 8));
+  Schedule(frame, 10);
+
+  // Nothing should happen.
+  RunUntilTimeHasElapsed(10);
+
+  // Now we should get the frame.
+  EXPECT_CALL(*this, OnDisplay(frame));
+  EXPECT_CALL(*this, OnFrameDone(frame, VideoFrameScheduler::DISPLAYED));
+  AdvanceTime(10);
+  RunUntilTimeHasElapsed(10);
+}
+
+TEST_F(VideoFrameSchedulerImplTest, DroppedFrame) {
+  scoped_refptr<VideoFrame> dropped =
+      VideoFrame::CreateBlackFrame(gfx::Size(8, 8));
+  scoped_refptr<VideoFrame> displayed =
+      VideoFrame::CreateBlackFrame(gfx::Size(8, 8));
+  Schedule(dropped, 10);
+  Schedule(displayed, 20);
+
+  // The frame past its deadline will get dropped.
+  EXPECT_CALL(*this, OnDisplay(displayed));
+  EXPECT_CALL(*this, OnFrameDone(dropped, VideoFrameScheduler::DROPPED));
+  EXPECT_CALL(*this, OnFrameDone(displayed, VideoFrameScheduler::DISPLAYED));
+  AdvanceTime(20);
+  RunUntilTimeHasElapsed(20);
+}
+
+TEST_F(VideoFrameSchedulerImplTest, SingleFrameLate) {
+  scoped_refptr<VideoFrame> frame =
+      VideoFrame::CreateBlackFrame(gfx::Size(8, 8));
+  Schedule(frame, 10);
+
+  // Despite frame being late it should still get displayed as it's the only
+  // one.
+  EXPECT_CALL(*this, OnDisplay(frame));
+  EXPECT_CALL(*this, OnFrameDone(frame, VideoFrameScheduler::DISPLAYED));
+  AdvanceTime(20);
+  RunUntilTimeHasElapsed(20);
+}
+
+TEST_F(VideoFrameSchedulerImplTest, ManyFramesLate) {
+  scoped_refptr<VideoFrame> dropped =
+      VideoFrame::CreateBlackFrame(gfx::Size(8, 8));
+  scoped_refptr<VideoFrame> displayed =
+      VideoFrame::CreateBlackFrame(gfx::Size(8, 8));
+  Schedule(dropped, 10);
+  Schedule(displayed, 20);
+
+  // Despite both being late, the scheduler should always displays the latest
+  // expired frame.
+  EXPECT_CALL(*this, OnDisplay(displayed));
+  EXPECT_CALL(*this, OnFrameDone(dropped, VideoFrameScheduler::DROPPED));
+  EXPECT_CALL(*this, OnFrameDone(displayed, VideoFrameScheduler::DISPLAYED));
+  AdvanceTime(30);
+  RunUntilTimeHasElapsed(30);
+}
+
+TEST_F(VideoFrameSchedulerImplTest, Reset) {
+  scoped_refptr<VideoFrame> frame =
+      VideoFrame::CreateBlackFrame(gfx::Size(8, 8));
+  Schedule(frame, 10);
+
+  // Despite being on time, frames are returned immediately.
+  EXPECT_CALL(*this, OnFrameDone(frame, VideoFrameScheduler::RESET));
+  AdvanceTime(10);
+  Reset();
+  RunUntilTimeHasElapsed(10);
+}
+
+}  // namespace media
diff --git a/media/filters/video_frame_scheduler_proxy.cc b/media/filters/video_frame_scheduler_proxy.cc
new file mode 100644
index 0000000..7499dc3
--- /dev/null
+++ b/media/filters/video_frame_scheduler_proxy.cc
@@ -0,0 +1,47 @@
+// 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.
+
+#include "media/filters/video_frame_scheduler_proxy.h"
+
+#include "base/single_thread_task_runner.h"
+#include "media/base/bind_to_current_loop.h"
+#include "media/base/video_frame.h"
+
+namespace media {
+
+VideoFrameSchedulerProxy::VideoFrameSchedulerProxy(
+    const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
+    const scoped_refptr<base::SingleThreadTaskRunner>& scheduler_runner,
+    VideoFrameScheduler* scheduler)
+    : task_runner_(task_runner),
+      scheduler_runner_(scheduler_runner),
+      scheduler_(scheduler),
+      weak_factory_(this) {
+}
+
+VideoFrameSchedulerProxy::~VideoFrameSchedulerProxy() {
+}
+
+void VideoFrameSchedulerProxy::ScheduleVideoFrame(
+    const scoped_refptr<VideoFrame>& frame,
+    base::TimeTicks wall_ticks,
+    const DoneCB& done_cb) {
+  DCHECK(task_runner_->BelongsToCurrentThread());
+  scheduler_runner_->PostTask(
+      FROM_HERE,
+      base::Bind(&VideoFrameScheduler::ScheduleVideoFrame,
+                 base::Unretained(scheduler_),
+                 frame,
+                 wall_ticks,
+                 BindToCurrentLoop(done_cb)));
+}
+
+void VideoFrameSchedulerProxy::Reset() {
+  DCHECK(task_runner_->BelongsToCurrentThread());
+  scheduler_runner_->PostTask(
+      FROM_HERE,
+      base::Bind(&VideoFrameScheduler::Reset, base::Unretained(scheduler_)));
+}
+
+}  // namespace media
diff --git a/media/filters/video_frame_scheduler_proxy.h b/media/filters/video_frame_scheduler_proxy.h
new file mode 100644
index 0000000..d17fb56
--- /dev/null
+++ b/media/filters/video_frame_scheduler_proxy.h
@@ -0,0 +1,51 @@
+// 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.
+
+#ifndef MEDIA_FILTERS_VIDEO_FRAME_SCHEDULER_PROXY_H_
+#define MEDIA_FILTERS_VIDEO_FRAME_SCHEDULER_PROXY_H_
+
+#include "base/memory/weak_ptr.h"
+#include "media/filters/video_frame_scheduler.h"
+
+namespace base {
+class SingleThreadTaskRunner;
+}
+
+namespace media {
+
+// Provides a thread-safe proxy for a VideoFrameScheduler. Typical use is to
+// use a real VideoFrameScheduler on the task runner responsible for graphics
+// display and provide a proxy on the task runner responsible for background
+// video decoding.
+class MEDIA_EXPORT VideoFrameSchedulerProxy : public VideoFrameScheduler {
+ public:
+  // |task_runner| is the runner that this object will be called on.
+  // |scheduler_runner| is the runner that |scheduler| will be called on.
+  // |scheduler| must out-live the lifetime of this object.
+  VideoFrameSchedulerProxy(
+      const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
+      const scoped_refptr<base::SingleThreadTaskRunner>& scheduler_runner,
+      VideoFrameScheduler* scheduler);
+  virtual ~VideoFrameSchedulerProxy();
+
+  // VideoFrameScheduler implementation.
+  virtual void ScheduleVideoFrame(const scoped_refptr<VideoFrame>& frame,
+                                  base::TimeTicks wall_ticks,
+                                  const DoneCB& done_cb) OVERRIDE;
+  virtual void Reset() OVERRIDE;
+
+ private:
+  scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
+  scoped_refptr<base::SingleThreadTaskRunner> scheduler_runner_;
+  VideoFrameScheduler* scheduler_;  // Not owned.
+
+  // NOTE: Weak pointers must be invalidated before all other member variables.
+  base::WeakPtrFactory<VideoFrameSchedulerProxy> weak_factory_;
+
+  DISALLOW_COPY_AND_ASSIGN(VideoFrameSchedulerProxy);
+};
+
+}  // namespace media
+
+#endif  // MEDIA_FILTERS_VIDEO_FRAME_SCHEDULER_PROXY_H_
diff --git a/media/filters/video_renderer_impl.cc b/media/filters/video_renderer_impl.cc
index 27cd9f3..7d99dbf 100644
--- a/media/filters/video_renderer_impl.cc
+++ b/media/filters/video_renderer_impl.cc
@@ -18,10 +18,6 @@
 
 namespace media {
 
-base::TimeDelta VideoRendererImpl::kMaxLastFrameDuration() {
-  return base::TimeDelta::FromMilliseconds(250);
-}
-
 VideoRendererImpl::VideoRendererImpl(
     const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
     ScopedVector<VideoDecoder> decoders,
diff --git a/media/filters/video_renderer_impl.h b/media/filters/video_renderer_impl.h
index e633f6b..014799a 100644
--- a/media/filters/video_renderer_impl.h
+++ b/media/filters/video_renderer_impl.h
@@ -37,9 +37,6 @@
  public:
   typedef base::Callback<void(const scoped_refptr<VideoFrame>&)> PaintCB;
 
-  // Maximum duration of the last frame.
-  static base::TimeDelta kMaxLastFrameDuration();
-
   // |decoders| contains the VideoDecoders to use when initializing.
   //
   // |paint_cb| is executed on the video frame timing thread whenever a new
diff --git a/media/filters/video_renderer_impl_unittest.cc b/media/filters/video_renderer_impl_unittest.cc
index b48d907..ebcf31d 100644
--- a/media/filters/video_renderer_impl_unittest.cc
+++ b/media/filters/video_renderer_impl_unittest.cc
@@ -10,6 +10,8 @@
 #include "base/debug/stack_trace.h"
 #include "base/message_loop/message_loop.h"
 #include "base/stl_util.h"
+#include "base/strings/string_number_conversions.h"
+#include "base/strings/string_split.h"
 #include "base/strings/stringprintf.h"
 #include "base/synchronization/lock.h"
 #include "base/timer/timer.h"
@@ -33,8 +35,13 @@
 
 namespace media {
 
-static const int kFrameDurationInMs = 10;
-static const int kVideoDurationInMs = kFrameDurationInMs * 100;
+MATCHER_P(HasTimestamp, ms, "") {
+  *result_listener << "has timestamp " << arg->timestamp().InMilliseconds();
+  return arg->timestamp().InMilliseconds() == ms;
+}
+
+// Arbitrary value. Has to be larger to cover any timestamp value used in tests.
+static const int kVideoDurationInMs = 1000;
 
 class VideoRendererImplTest : public ::testing::Test {
  public:
@@ -44,12 +51,13 @@
     ScopedVector<VideoDecoder> decoders;
     decoders.push_back(decoder_);
 
-    renderer_.reset(new VideoRendererImpl(
-        message_loop_.message_loop_proxy(),
-        decoders.Pass(),
-        media::SetDecryptorReadyCB(),
-        base::Bind(&VideoRendererImplTest::OnPaint, base::Unretained(this)),
-        true));
+    renderer_.reset(
+        new VideoRendererImpl(message_loop_.message_loop_proxy(),
+                              decoders.Pass(),
+                              media::SetDecryptorReadyCB(),
+                              base::Bind(&StrictMock<MockDisplayCB>::Display,
+                                         base::Unretained(&mock_display_cb_)),
+                              true));
 
     demuxer_stream_.set_video_decoder_config(TestVideoConfig::Normal());
 
@@ -71,12 +79,6 @@
   MOCK_METHOD1(OnTimeUpdate, void(base::TimeDelta));
 
   void Initialize() {
-    InitializeWithDuration(kVideoDurationInMs);
-  }
-
-  void InitializeWithDuration(int duration_ms) {
-    duration_ = base::TimeDelta::FromMilliseconds(duration_ms);
-
     // Monitor decodes from the decoder.
     EXPECT_CALL(*decoder_, Decode(_, _))
         .WillRepeatedly(Invoke(this, &VideoRendererImplTest::FrameRequested));
@@ -94,10 +96,6 @@
 
     // Initialize, we shouldn't have any reads.
     InitializeRenderer(PIPELINE_OK);
-
-    // Start prerolling.
-    QueuePrerollFrames(0);
-    Preroll(0, PIPELINE_OK);
   }
 
   void InitializeRenderer(PipelineStatus expected) {
@@ -165,71 +163,57 @@
     Stop();
   }
 
-  // Queues a VideoFrame with |next_frame_timestamp_|.
-  void QueueNextFrame() {
-    DCHECK_EQ(&message_loop_, base::MessageLoop::current());
-    DCHECK_LT(next_frame_timestamp_.InMicroseconds(),
-              duration_.InMicroseconds());
+  // Parses a string representation of video frames and generates corresponding
+  // VideoFrame objects in |decode_results_|.
+  //
+  // Syntax:
+  //   nn - Queue a decoder buffer with timestamp nn * 1000us
+  //   abort - Queue an aborted read
+  //   error - Queue a decoder error
+  //   eos - Queue an end of stream decoder buffer
+  //
+  // Examples:
+  //   A clip that is four frames long: "0 10 20 30 eos"
+  //   A clip that has a decode error: "60 70 error"
+  void QueueFrames(const std::string& str) {
+    std::vector<std::string> tokens;
+    base::SplitString(str, ' ', &tokens);
+    for (size_t i = 0; i < tokens.size(); ++i) {
+      if (tokens[i] == "abort") {
+        scoped_refptr<VideoFrame> null_frame;
+        decode_results_.push_back(
+            std::make_pair(VideoDecoder::kAborted, null_frame));
+        continue;
+      }
 
-    gfx::Size natural_size = TestVideoConfig::NormalCodedSize();
-    scoped_refptr<VideoFrame> frame = VideoFrame::CreateFrame(
-        VideoFrame::YV12, natural_size, gfx::Rect(natural_size), natural_size,
-        next_frame_timestamp_);
-    decode_results_.push_back(std::make_pair(
-        VideoDecoder::kOk, frame));
-    next_frame_timestamp_ +=
-        base::TimeDelta::FromMilliseconds(kFrameDurationInMs);
-  }
+      if (tokens[i] == "error") {
+        scoped_refptr<VideoFrame> null_frame;
+        decode_results_.push_back(
+            std::make_pair(VideoDecoder::kDecodeError, null_frame));
+        continue;
+      }
 
-  void QueueEndOfStream() {
-    DCHECK_EQ(&message_loop_, base::MessageLoop::current());
-    decode_results_.push_back(std::make_pair(
-        VideoDecoder::kOk, VideoFrame::CreateEOSFrame()));
-  }
+      if (tokens[i] == "eos") {
+        decode_results_.push_back(
+            std::make_pair(VideoDecoder::kOk, VideoFrame::CreateEOSFrame()));
+        continue;
+      }
 
-  void QueueDecodeError() {
-    DCHECK_EQ(&message_loop_, base::MessageLoop::current());
-    scoped_refptr<VideoFrame> null_frame;
-    decode_results_.push_back(std::make_pair(
-        VideoDecoder::kDecodeError, null_frame));
-  }
+      int timestamp_in_ms = 0;
+      if (base::StringToInt(tokens[i], &timestamp_in_ms)) {
+        gfx::Size natural_size = TestVideoConfig::NormalCodedSize();
+        scoped_refptr<VideoFrame> frame = VideoFrame::CreateFrame(
+            VideoFrame::YV12,
+            natural_size,
+            gfx::Rect(natural_size),
+            natural_size,
+            base::TimeDelta::FromMilliseconds(timestamp_in_ms));
+        decode_results_.push_back(std::make_pair(VideoDecoder::kOk, frame));
+        continue;
+      }
 
-  void QueueAbortedRead() {
-    DCHECK_EQ(&message_loop_, base::MessageLoop::current());
-    scoped_refptr<VideoFrame> null_frame;
-    decode_results_.push_back(std::make_pair(
-        VideoDecoder::kAborted, null_frame));
-  }
-
-  void QueuePrerollFrames(int timestamp_ms) {
-    DCHECK_EQ(&message_loop_, base::MessageLoop::current());
-    next_frame_timestamp_ = base::TimeDelta();
-    base::TimeDelta timestamp = base::TimeDelta::FromMilliseconds(timestamp_ms);
-    while (next_frame_timestamp_ < timestamp) {
-      QueueNextFrame();
+      CHECK(false) << "Unrecognized decoder buffer token: " << tokens[i];
     }
-
-    // Queue the frame at |timestamp| plus additional ones for prerolling.
-    for (int i = 0; i < limits::kMaxVideoFrames; ++i) {
-      QueueNextFrame();
-    }
-  }
-
-  void ResetCurrentFrame() {
-    base::AutoLock l(lock_);
-    current_frame_ = NULL;
-  }
-
-  scoped_refptr<VideoFrame> GetCurrentFrame() {
-    base::AutoLock l(lock_);
-    return current_frame_;
-  }
-
-  int GetCurrentTimestampInMs() {
-    scoped_refptr<VideoFrame> frame = GetCurrentFrame();
-    if (!frame.get())
-      return -1;
-    return frame->timestamp().InMilliseconds();
   }
 
   void WaitForError(PipelineStatus expected) {
@@ -275,7 +259,7 @@
     DCHECK_EQ(&message_loop_, base::MessageLoop::current());
     base::AutoLock l(lock_);
     time_ += base::TimeDelta::FromMilliseconds(time_ms);
-    DCHECK_LE(time_.InMicroseconds(), duration_.InMicroseconds());
+    DCHECK_LE(time_.InMicroseconds(), GetDuration().InMicroseconds());
   }
 
  protected:
@@ -285,6 +269,13 @@
   NiceMock<MockDemuxerStream> demuxer_stream_;
   MockStatisticsCB statistics_cb_object_;
 
+  // Use StrictMock<T> to catch missing/extra display callbacks.
+  class MockDisplayCB {
+   public:
+    MOCK_METHOD1(Display, void(const scoped_refptr<VideoFrame>&));
+  };
+  StrictMock<MockDisplayCB> mock_display_cb_;
+
  private:
   base::TimeDelta GetTime() {
     base::AutoLock l(lock_);
@@ -292,12 +283,7 @@
   }
 
   base::TimeDelta GetDuration() {
-    return duration_;
-  }
-
-  void OnPaint(const scoped_refptr<VideoFrame>& frame) {
-    base::AutoLock l(lock_);
-    current_frame_ = frame;
+    return base::TimeDelta::FromMilliseconds(kVideoDurationInMs);
   }
 
   void FrameRequested(const scoped_refptr<DecoderBuffer>& buffer,
@@ -320,7 +306,7 @@
     DCHECK_EQ(&message_loop_, base::MessageLoop::current());
     decode_results_.clear();
     if (!read_cb_.is_null()) {
-      QueueAbortedRead();
+      QueueFrames("abort");
       SatisfyPendingRead();
     }
 
@@ -331,22 +317,20 @@
     DCHECK_EQ(&message_loop_, base::MessageLoop::current());
     decode_results_.clear();
     if (!read_cb_.is_null()) {
-      QueueAbortedRead();
+      QueueFrames("abort");
       SatisfyPendingRead();
     }
   }
 
   base::MessageLoop message_loop_;
 
-  // Used to protect |time_| and |current_frame_|.
+  // Used to protect |time_|.
   base::Lock lock_;
   base::TimeDelta time_;
-  scoped_refptr<VideoFrame> current_frame_;
 
   // Used for satisfying reads.
   VideoDecoder::DecodeCB read_cb_;
   base::TimeDelta next_frame_timestamp_;
-  base::TimeDelta duration_;
 
   WaitableMessageLoopEvent error_event_;
   WaitableMessageLoopEvent ended_event_;
@@ -371,7 +355,14 @@
 
 TEST_F(VideoRendererImplTest, Initialize) {
   Initialize();
-  EXPECT_EQ(0, GetCurrentTimestampInMs());
+  Shutdown();
+}
+
+TEST_F(VideoRendererImplTest, InitializeAndPreroll) {
+  Initialize();
+  QueueFrames("0 10 20 30");
+  EXPECT_CALL(mock_display_cb_, Display(HasTimestamp(0)));
+  Preroll(0, PIPELINE_OK);
   Shutdown();
 }
 
@@ -400,47 +391,28 @@
 
 TEST_F(VideoRendererImplTest, Play) {
   Initialize();
+  QueueFrames("0 10 20 30");
+  EXPECT_CALL(mock_display_cb_, Display(HasTimestamp(0)));
+  Preroll(0, PIPELINE_OK);
   Play();
   Shutdown();
 }
 
-TEST_F(VideoRendererImplTest, EndOfStream_DefaultFrameDuration) {
-  Initialize();
-  Play();
-
-  // Verify that the ended callback fires when the default last frame duration
-  // has elapsed.
-  int end_timestamp = kFrameDurationInMs * limits::kMaxVideoFrames +
-      VideoRendererImpl::kMaxLastFrameDuration().InMilliseconds();
-  EXPECT_LT(end_timestamp, kVideoDurationInMs);
-
-  QueueEndOfStream();
-  AdvanceTimeInMs(end_timestamp);
-  WaitForEnded();
-
-  Shutdown();
-}
-
 TEST_F(VideoRendererImplTest, EndOfStream_ClipDuration) {
-  int duration = kVideoDurationInMs + kFrameDurationInMs / 2;
-  InitializeWithDuration(duration);
+  Initialize();
+  QueueFrames("0 10 20 30");
+  EXPECT_CALL(mock_display_cb_, Display(HasTimestamp(0)));
+  Preroll(0, PIPELINE_OK);
   Play();
 
-  // Render all frames except for the last |limits::kMaxVideoFrames| frames
-  // and deliver all the frames between the start and |duration|. The preroll
-  // inside Initialize() makes this a little confusing, but |timestamp| is
-  // the current render time and QueueNextFrame() delivers a frame with a
-  // timestamp that is |timestamp| + limits::kMaxVideoFrames *
-  // kFrameDurationInMs.
-  int timestamp = kFrameDurationInMs;
-  int end_timestamp = duration - limits::kMaxVideoFrames * kFrameDurationInMs;
-  for (; timestamp < end_timestamp; timestamp += kFrameDurationInMs) {
-    QueueNextFrame();
-  }
+  // Next frame has timestamp way past duration. Its timestamp will be adjusted
+  // to match the duration of the video.
+  QueueFrames(base::IntToString(kVideoDurationInMs + 1000));
 
   // Queue the end of stream frame and wait for the last frame to be rendered.
-  QueueEndOfStream();
-  AdvanceTimeInMs(duration);
+  QueueFrames("eos");
+  EXPECT_CALL(mock_display_cb_, Display(HasTimestamp(kVideoDurationInMs)));
+  AdvanceTimeInMs(kVideoDurationInMs);
   WaitForEnded();
 
   Shutdown();
@@ -448,80 +420,75 @@
 
 TEST_F(VideoRendererImplTest, DecodeError_Playing) {
   Initialize();
+  QueueFrames("0 10 20 30");
+  EXPECT_CALL(mock_display_cb_, Display(HasTimestamp(0)));
+  Preroll(0, PIPELINE_OK);
   Play();
 
-  QueueDecodeError();
-  AdvanceTimeInMs(kVideoDurationInMs);
+  QueueFrames("error");
+  EXPECT_CALL(mock_display_cb_, Display(HasTimestamp(10)));
+  AdvanceTimeInMs(10);
   WaitForError(PIPELINE_ERROR_DECODE);
   Shutdown();
 }
 
 TEST_F(VideoRendererImplTest, DecodeError_DuringPreroll) {
   Initialize();
-  Pause();
-  Flush();
-
-  QueueDecodeError();
-  Preroll(kFrameDurationInMs * 6, PIPELINE_ERROR_DECODE);
+  QueueFrames("error");
+  Preroll(0, PIPELINE_ERROR_DECODE);
   Shutdown();
 }
 
 TEST_F(VideoRendererImplTest, Preroll_Exact) {
   Initialize();
-  Pause();
-  Flush();
-  QueuePrerollFrames(kFrameDurationInMs * 6);
+  QueueFrames("50 60 70 80 90");
 
-  Preroll(kFrameDurationInMs * 6, PIPELINE_OK);
-  EXPECT_EQ(kFrameDurationInMs * 6, GetCurrentTimestampInMs());
+  EXPECT_CALL(mock_display_cb_, Display(HasTimestamp(60)));
+  Preroll(60, PIPELINE_OK);
   Shutdown();
 }
 
 TEST_F(VideoRendererImplTest, Preroll_RightBefore) {
   Initialize();
-  Pause();
-  Flush();
-  QueuePrerollFrames(kFrameDurationInMs * 6);
+  QueueFrames("50 60 70 80 90");
 
-  Preroll(kFrameDurationInMs * 6 - 1, PIPELINE_OK);
-  EXPECT_EQ(kFrameDurationInMs * 5, GetCurrentTimestampInMs());
+  EXPECT_CALL(mock_display_cb_, Display(HasTimestamp(50)));
+  Preroll(59, PIPELINE_OK);
   Shutdown();
 }
 
 TEST_F(VideoRendererImplTest, Preroll_RightAfter) {
   Initialize();
-  Pause();
-  Flush();
-  QueuePrerollFrames(kFrameDurationInMs * 6);
+  QueueFrames("50 60 70 80 90");
 
-  Preroll(kFrameDurationInMs * 6 + 1, PIPELINE_OK);
-  EXPECT_EQ(kFrameDurationInMs * 6, GetCurrentTimestampInMs());
+  EXPECT_CALL(mock_display_cb_, Display(HasTimestamp(60)));
+  Preroll(61, PIPELINE_OK);
   Shutdown();
 }
 
 TEST_F(VideoRendererImplTest, PlayAfterPreroll) {
   Initialize();
-  Pause();
-  Flush();
-  QueuePrerollFrames(kFrameDurationInMs * 4);
-
-  Preroll(kFrameDurationInMs * 4, PIPELINE_OK);
-  EXPECT_EQ(kFrameDurationInMs * 4, GetCurrentTimestampInMs());
-
+  QueueFrames("0 10 20 30");
+  EXPECT_CALL(mock_display_cb_, Display(HasTimestamp(0)));
+  Preroll(0, PIPELINE_OK);
   Play();
+
   // Advance time past prerolled time to trigger a Read().
-  AdvanceTimeInMs(5 * kFrameDurationInMs);
+  EXPECT_CALL(mock_display_cb_, Display(HasTimestamp(10)));
+  AdvanceTimeInMs(10);
   WaitForPendingRead();
   Shutdown();
 }
 
 TEST_F(VideoRendererImplTest, Rebuffer) {
   Initialize();
-
+  QueueFrames("0 10 20 30");
+  EXPECT_CALL(mock_display_cb_, Display(HasTimestamp(0)));
+  Preroll(0, PIPELINE_OK);
   Play();
 
   // Advance time past prerolled time drain the ready frame queue.
-  AdvanceTimeInMs(5 * kFrameDurationInMs);
+  AdvanceTimeInMs(50);
   WaitForPendingRead();
 
   // Simulate a Pause/Preroll/Play rebuffer sequence.
@@ -532,11 +499,13 @@
                      event.GetPipelineStatusCB());
 
   // Queue enough frames to satisfy preroll.
-  for (int i = 0; i < limits::kMaxVideoFrames; ++i)
-    QueueNextFrame();
-
+  QueueFrames("40 50 60 70");
   SatisfyPendingRead();
 
+  // TODO(scherkus): We shouldn't display the next ready frame in a rebuffer
+  // situation, see http://crbug.com/365516
+  EXPECT_CALL(mock_display_cb_, Display(HasTimestamp(40)));
+
   event.RunAndWaitForStatus(PIPELINE_OK);
 
   Play();
@@ -546,15 +515,22 @@
 
 TEST_F(VideoRendererImplTest, Rebuffer_AlreadyHaveEnoughFrames) {
   Initialize();
+  QueueFrames("0 10 20 30");
+  EXPECT_CALL(mock_display_cb_, Display(HasTimestamp(0)));
+  Preroll(0, PIPELINE_OK);
 
   // Queue an extra frame so that we'll have enough frames to satisfy
   // preroll even after the first frame is painted.
-  QueueNextFrame();
+  QueueFrames("40");
   Play();
 
   // Simulate a Pause/Preroll/Play rebuffer sequence.
   Pause();
 
+  // TODO(scherkus): We shouldn't display the next ready frame in a rebuffer
+  // situation, see http://crbug.com/365516
+  EXPECT_CALL(mock_display_cb_, Display(HasTimestamp(10)));
+
   WaitableMessageLoopEvent event;
   renderer_->Preroll(kNoTimestamp(),
                      event.GetPipelineStatusCB());
@@ -566,120 +542,56 @@
   Shutdown();
 }
 
-TEST_F(VideoRendererImplTest, GetCurrentFrame_Initialized) {
-  Initialize();
-  EXPECT_TRUE(GetCurrentFrame().get());  // Due to prerolling.
-  Shutdown();
-}
-
-TEST_F(VideoRendererImplTest, GetCurrentFrame_Playing) {
-  Initialize();
-  Play();
-  EXPECT_TRUE(GetCurrentFrame().get());
-  Shutdown();
-}
-
-TEST_F(VideoRendererImplTest, GetCurrentFrame_Paused) {
-  Initialize();
-  Play();
-  Pause();
-  EXPECT_TRUE(GetCurrentFrame().get());
-  Shutdown();
-}
-
-TEST_F(VideoRendererImplTest, GetCurrentFrame_Flushed) {
-  Initialize();
-  Play();
-  Pause();
-
-  // Frame shouldn't be updated.
-  ResetCurrentFrame();
-  Flush();
-  EXPECT_FALSE(GetCurrentFrame().get());
-
-  Shutdown();
-}
-
-TEST_F(VideoRendererImplTest, GetCurrentFrame_EndOfStream) {
-  Initialize();
-  Play();
-  Pause();
-  Flush();
-
-  // Preroll only end of stream frames.
-  QueueEndOfStream();
-
-  // Frame shouldn't be updated.
-  ResetCurrentFrame();
-  Preroll(0, PIPELINE_OK);
-  EXPECT_FALSE(GetCurrentFrame().get());
-
-  // Start playing, we should immediately get notified of end of stream.
-  Play();
-  WaitForEnded();
-
-  Shutdown();
-}
-
-TEST_F(VideoRendererImplTest, GetCurrentFrame_Shutdown) {
-  Initialize();
-
-  // Frame shouldn't be updated.
-  ResetCurrentFrame();
-  Shutdown();
-  EXPECT_FALSE(GetCurrentFrame().get());
-}
-
-// Stop() is called immediately during an error.
-TEST_F(VideoRendererImplTest, GetCurrentFrame_Error) {
-  Initialize();
-
-  // Frame shouldn't be updated.
-  ResetCurrentFrame();
-  Stop();
-  EXPECT_FALSE(GetCurrentFrame().get());
-}
-
 // Verify that a late decoder response doesn't break invariants in the renderer.
 TEST_F(VideoRendererImplTest, StopDuringOutstandingRead) {
   Initialize();
+  QueueFrames("0 10 20 30");
+  EXPECT_CALL(mock_display_cb_, Display(HasTimestamp(0)));
+  Preroll(0, PIPELINE_OK);
   Play();
 
   // Advance time a bit to trigger a Read().
-  AdvanceTimeInMs(kFrameDurationInMs);
+  EXPECT_CALL(mock_display_cb_, Display(HasTimestamp(10)));
+  AdvanceTimeInMs(10);
   WaitForPendingRead();
 
   WaitableMessageLoopEvent event;
   renderer_->Stop(event.GetClosure());
-
   event.RunAndWait();
 }
 
 TEST_F(VideoRendererImplTest, AbortPendingRead_Playing) {
   Initialize();
+  QueueFrames("0 10 20 30");
+  EXPECT_CALL(mock_display_cb_, Display(HasTimestamp(0)));
+  Preroll(0, PIPELINE_OK);
   Play();
 
   // Advance time a bit to trigger a Read().
-  AdvanceTimeInMs(kFrameDurationInMs);
+  EXPECT_CALL(mock_display_cb_, Display(HasTimestamp(10)));
+  AdvanceTimeInMs(10);
   WaitForPendingRead();
-
-  QueueAbortedRead();
+  QueueFrames("abort");
   SatisfyPendingRead();
 
   Pause();
   Flush();
-  QueuePrerollFrames(kFrameDurationInMs * 6);
-  Preroll(kFrameDurationInMs * 6, PIPELINE_OK);
-  EXPECT_EQ(kFrameDurationInMs * 6, GetCurrentTimestampInMs());
+  QueueFrames("60 70 80 90");
+  EXPECT_CALL(mock_display_cb_, Display(HasTimestamp(60)));
+  Preroll(60, PIPELINE_OK);
   Shutdown();
 }
 
 TEST_F(VideoRendererImplTest, AbortPendingRead_Flush) {
   Initialize();
+  QueueFrames("0 10 20 30");
+  EXPECT_CALL(mock_display_cb_, Display(HasTimestamp(0)));
+  Preroll(0, PIPELINE_OK);
   Play();
 
   // Advance time a bit to trigger a Read().
-  AdvanceTimeInMs(kFrameDurationInMs);
+  EXPECT_CALL(mock_display_cb_, Display(HasTimestamp(10)));
+  AdvanceTimeInMs(10);
   WaitForPendingRead();
 
   Pause();
@@ -689,11 +601,9 @@
 
 TEST_F(VideoRendererImplTest, AbortPendingRead_Preroll) {
   Initialize();
-  Pause();
-  Flush();
-
-  QueueAbortedRead();
-  Preroll(kFrameDurationInMs * 6, PIPELINE_OK);
+  QueueFrames("0 10 abort");
+  EXPECT_CALL(mock_display_cb_, Display(HasTimestamp(0)));
+  Preroll(0, PIPELINE_OK);
   Shutdown();
 }
 
diff --git a/media/formats/common/stream_parser_test_base.cc b/media/formats/common/stream_parser_test_base.cc
index abe7cf9..cf739a5 100644
--- a/media/formats/common/stream_parser_test_base.cc
+++ b/media/formats/common/stream_parser_test_base.cc
@@ -29,22 +29,7 @@
 
 StreamParserTestBase::StreamParserTestBase(
     scoped_ptr<StreamParser> stream_parser)
-    : parser_(stream_parser.Pass()) {}
-
-StreamParserTestBase::~StreamParserTestBase() {}
-
-std::string StreamParserTestBase::ParseFile(const std::string& filename,
-                                            int append_bytes) {
-  results_stream_.clear();
-  InitializeParser();
-
-  scoped_refptr<DecoderBuffer> buffer = ReadTestDataFile(filename);
-  EXPECT_TRUE(
-      AppendDataInPieces(buffer->data(), buffer->data_size(), append_bytes));
-  return results_stream_.str();
-}
-
-void StreamParserTestBase::InitializeParser() {
+    : parser_(stream_parser.Pass()) {
   parser_->Init(
       base::Bind(&StreamParserTestBase::OnInitDone, base::Unretained(this)),
       base::Bind(&StreamParserTestBase::OnNewConfig, base::Unretained(this)),
@@ -56,6 +41,23 @@
       LogCB());
 }
 
+StreamParserTestBase::~StreamParserTestBase() {}
+
+std::string StreamParserTestBase::ParseFile(const std::string& filename,
+                                            int append_bytes) {
+  results_stream_.clear();
+  scoped_refptr<DecoderBuffer> buffer = ReadTestDataFile(filename);
+  EXPECT_TRUE(
+      AppendDataInPieces(buffer->data(), buffer->data_size(), append_bytes));
+  return results_stream_.str();
+}
+
+std::string StreamParserTestBase::ParseData(const uint8* data, size_t length) {
+  results_stream_.clear();
+  EXPECT_TRUE(AppendDataInPieces(data, length, length));
+  return results_stream_.str();
+}
+
 bool StreamParserTestBase::AppendDataInPieces(const uint8* data,
                                               size_t length,
                                               size_t piece_size) {
@@ -72,6 +74,7 @@
 
 void StreamParserTestBase::OnInitDone(bool success,
                                       base::TimeDelta duration,
+                                      base::Time wallclock_timeline_offset,
                                       bool auto_update_timestamp_offset) {
   EXPECT_TRUE(auto_update_timestamp_offset);
   DVLOG(1) << __FUNCTION__ << "(" << success << ", "
@@ -87,6 +90,7 @@
            << video_config.IsValidConfig() << ")";
   EXPECT_TRUE(audio_config.IsValidConfig());
   EXPECT_FALSE(video_config.IsValidConfig());
+  last_audio_config_ = audio_config;
   return true;
 }
 
diff --git a/media/formats/common/stream_parser_test_base.h b/media/formats/common/stream_parser_test_base.h
index 780f665..f53c912 100644
--- a/media/formats/common/stream_parser_test_base.h
+++ b/media/formats/common/stream_parser_test_base.h
@@ -39,12 +39,20 @@
   //
   std::string ParseFile(const std::string& filename, int append_bytes);
 
- private:
-  void InitializeParser();
-  bool AppendDataInPieces(const uint8* data, size_t length, size_t piece_size);
+  // Similar to ParseFile() except parses the given |data| in a single append of
+  // size |length|.
+  std::string ParseData(const uint8* data, size_t length);
 
+  // The last AudioDecoderConfig handed to OnNewConfig().
+  const AudioDecoderConfig& last_audio_config() const {
+    return last_audio_config_;
+  }
+
+ private:
+  bool AppendDataInPieces(const uint8* data, size_t length, size_t piece_size);
   void OnInitDone(bool success,
                   base::TimeDelta duration,
+                  base::Time wallclock_timeline_offset,
                   bool auto_update_timestamp_offset);
   bool OnNewConfig(const AudioDecoderConfig& audio_config,
                    const VideoDecoderConfig& video_config,
@@ -59,6 +67,7 @@
 
   scoped_ptr<StreamParser> parser_;
   std::stringstream results_stream_;
+  AudioDecoderConfig last_audio_config_;
 
   DISALLOW_COPY_AND_ASSIGN(StreamParserTestBase);
 };
diff --git a/media/formats/mp2t/mp2t_stream_parser.cc b/media/formats/mp2t/mp2t_stream_parser.cc
index a22af1a..cc2af5e 100644
--- a/media/formats/mp2t/mp2t_stream_parser.cc
+++ b/media/formats/mp2t/mp2t_stream_parser.cc
@@ -5,6 +5,7 @@
 #include "media/formats/mp2t/mp2t_stream_parser.h"
 
 #include "base/bind.h"
+#include "base/callback_helpers.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/stl_util.h"
 #include "media/base/audio_decoder_config.h"
@@ -484,7 +485,8 @@
 
   // For Mpeg2 TS, the duration is not known.
   DVLOG(1) << "Mpeg2TS stream parser initialization done";
-  init_cb_.Run(true, kInfiniteDuration(), false);
+  base::ResetAndReturn(&init_cb_).Run(
+      true, kInfiniteDuration(), base::Time(), false);
   is_initialized_ = true;
 
   return true;
@@ -619,4 +621,3 @@
 
 }  // namespace mp2t
 }  // namespace media
-
diff --git a/media/formats/mp2t/mp2t_stream_parser_unittest.cc b/media/formats/mp2t/mp2t_stream_parser_unittest.cc
index ea79674..660792f 100644
--- a/media/formats/mp2t/mp2t_stream_parser_unittest.cc
+++ b/media/formats/mp2t/mp2t_stream_parser_unittest.cc
@@ -59,6 +59,7 @@
 
   void OnInit(bool init_ok,
               base::TimeDelta duration,
+              base::Time wallclock_timeline_offset,
               bool auto_update_timestamp_offset) {
     DVLOG(1) << "OnInit: ok=" << init_ok
              << ", dur=" << duration.InMilliseconds()
diff --git a/media/formats/mp4/mp4_stream_parser.cc b/media/formats/mp4/mp4_stream_parser.cc
index b8ddf30..3136e19 100644
--- a/media/formats/mp4/mp4_stream_parser.cc
+++ b/media/formats/mp4/mp4_stream_parser.cc
@@ -252,7 +252,7 @@
           codec, sample_format, channel_layout, sample_per_second,
           extra_data.size() ? &extra_data[0] : NULL, extra_data.size(),
           is_audio_track_encrypted_, false, base::TimeDelta(),
-          base::TimeDelta());
+          0);
       has_audio_ = true;
       audio_track_id_ = track->header.track_id;
     }
@@ -301,7 +301,7 @@
   }
 
   if (!init_cb_.is_null())
-    base::ResetAndReturn(&init_cb_).Run(true, duration, false);
+    base::ResetAndReturn(&init_cb_).Run(true, duration, base::Time(), false);
 
   EmitNeedKeyIfNecessary(moov_->pssh);
   return true;
diff --git a/media/formats/mp4/mp4_stream_parser_unittest.cc b/media/formats/mp4/mp4_stream_parser_unittest.cc
index 4418d6d..6f58c6a 100644
--- a/media/formats/mp4/mp4_stream_parser_unittest.cc
+++ b/media/formats/mp4/mp4_stream_parser_unittest.cc
@@ -60,6 +60,7 @@
 
   void InitF(bool init_ok,
              base::TimeDelta duration,
+             base::Time wallclock_timeline_offset,
              bool auto_update_timestamp_offset) {
     DVLOG(1) << "InitF: ok=" << init_ok << ", dur=" << duration.InMilliseconds()
              << ", autoTimestampOffset=" << auto_update_timestamp_offset;
diff --git a/media/formats/mpeg/adts_stream_parser.cc b/media/formats/mpeg/adts_stream_parser.cc
index 0f5e280..beb9435 100644
--- a/media/formats/mpeg/adts_stream_parser.cc
+++ b/media/formats/mpeg/adts_stream_parser.cc
@@ -11,7 +11,7 @@
 static const uint32 kADTSStartCodeMask = 0xfff00000;
 
 ADTSStreamParser::ADTSStreamParser()
-    : MPEGAudioStreamParserBase(kADTSStartCodeMask, kCodecAAC) {}
+    : MPEGAudioStreamParserBase(kADTSStartCodeMask, kCodecAAC, 0) {}
 
 ADTSStreamParser::~ADTSStreamParser() {}
 
@@ -20,7 +20,8 @@
                                        int* frame_size,
                                        int* sample_rate,
                                        ChannelLayout* channel_layout,
-                                       int* sample_count) const {
+                                       int* sample_count,
+                                       bool* metadata_frame) const {
   DCHECK(data);
   DCHECK_GE(size, 0);
   DCHECK(frame_size);
@@ -89,6 +90,9 @@
   if (channel_layout)
     *channel_layout = kADTSChannelLayoutTable[channel_layout_index];
 
+  if (metadata_frame)
+    *metadata_frame = false;
+
   return bytes_read;
 }
 
diff --git a/media/formats/mpeg/adts_stream_parser.h b/media/formats/mpeg/adts_stream_parser.h
index 26ebcc9..e036d8d 100644
--- a/media/formats/mpeg/adts_stream_parser.h
+++ b/media/formats/mpeg/adts_stream_parser.h
@@ -23,7 +23,8 @@
                                int* frame_size,
                                int* sample_rate,
                                ChannelLayout* channel_layout,
-                               int* sample_count) const OVERRIDE;
+                               int* sample_count,
+                               bool* metadata_frame) const OVERRIDE;
 
   DISALLOW_COPY_AND_ASSIGN(ADTSStreamParser);
 };
diff --git a/media/formats/mpeg/mp3_stream_parser.cc b/media/formats/mpeg/mp3_stream_parser.cc
index 74d2f7d..f5b7438 100644
--- a/media/formats/mpeg/mp3_stream_parser.cc
+++ b/media/formats/mpeg/mp3_stream_parser.cc
@@ -75,6 +75,10 @@
   { 0, 0, 0, 0 }
 };
 
+// Offset in bytes from the end of the MP3 header to "Xing" or "Info" tags which
+// indicate a frame is silent metadata frame.  Values taken from FFmpeg.
+static const int kXingHeaderMap[2][2] = {{32, 17}, {17, 9}};
+
 // Frame header field constants.
 static const int kVersion2 = 2;
 static const int kVersionReserved = 1;
@@ -86,9 +90,10 @@
 static const int kBitrateFree = 0;
 static const int kBitrateBad = 0xf;
 static const int kSampleRateReserved = 3;
+static const int kCodecDelay = 529;
 
 MP3StreamParser::MP3StreamParser()
-    : MPEGAudioStreamParserBase(kMP3StartCodeMask, kCodecMP3) {}
+    : MPEGAudioStreamParserBase(kMP3StartCodeMask, kCodecMP3, kCodecDelay) {}
 
 MP3StreamParser::~MP3StreamParser() {}
 
@@ -97,7 +102,8 @@
                                       int* frame_size,
                                       int* sample_rate,
                                       ChannelLayout* channel_layout,
-                                      int* sample_count) const {
+                                      int* sample_count,
+                                      bool* metadata_frame) const {
   DCHECK(data);
   DCHECK_GE(size, 0);
   DCHECK(frame_size);
@@ -233,7 +239,42 @@
         (channel_mode == 3) ? CHANNEL_LAYOUT_MONO : CHANNEL_LAYOUT_STEREO;
   }
 
-  return 4;
+  if (metadata_frame)
+    *metadata_frame = false;
+
+  const int header_bytes_read = reader.bits_read() / 8;
+  if (layer != kLayer3)
+    return header_bytes_read;
+
+  // Check if this is a XING frame and tell the base parser to skip it if so.
+  const int xing_header_index =
+      kXingHeaderMap[version == kVersion2 ||
+                     version == kVersion2_5][channel_mode == 3];
+  uint32_t tag = 0;
+
+  // It's not a XING frame if the frame isn't big enough to be one.
+  if (*frame_size <
+      header_bytes_read + xing_header_index + static_cast<int>(sizeof(tag))) {
+    return header_bytes_read;
+  }
+
+  // If we don't have enough data available to check, return 0 so frame parsing
+  // will be retried once more data is available.
+  if (!reader.SkipBits(xing_header_index * 8) ||
+      !reader.ReadBits(sizeof(tag) * 8, &tag)) {
+    return 0;
+  }
+
+  // Check to see if the tag contains 'Xing' or 'Info'
+  if (tag == 0x496e666f || tag == 0x58696e67) {
+    MEDIA_LOG(log_cb()) << "Skipping XING header.";
+    if (metadata_frame)
+      *metadata_frame = true;
+    return reader.bits_read() / 8;
+  }
+
+  // If it wasn't a XING frame, just return the number consumed bytes.
+  return header_bytes_read;
 }
 
 }  // namespace media
diff --git a/media/formats/mpeg/mp3_stream_parser.h b/media/formats/mpeg/mp3_stream_parser.h
index 209d263..b5271d8 100644
--- a/media/formats/mpeg/mp3_stream_parser.h
+++ b/media/formats/mpeg/mp3_stream_parser.h
@@ -23,7 +23,8 @@
                                int* frame_size,
                                int* sample_rate,
                                ChannelLayout* channel_layout,
-                               int* sample_count) const OVERRIDE;
+                               int* sample_count,
+                               bool* metadata_frame) const OVERRIDE;
 
   DISALLOW_COPY_AND_ASSIGN(MP3StreamParser);
 };
diff --git a/media/formats/mpeg/mp3_stream_parser_unittest.cc b/media/formats/mpeg/mp3_stream_parser_unittest.cc
index 85cc129..1638752 100644
--- a/media/formats/mpeg/mp3_stream_parser_unittest.cc
+++ b/media/formats/mpeg/mp3_stream_parser_unittest.cc
@@ -2,6 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "media/base/test_data_util.h"
 #include "media/formats/common/stream_parser_test_base.h"
 #include "media/formats/mpeg/mp3_stream_parser.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -28,7 +29,6 @@
       "{ 0K }"
       "{ 0K }"
       "{ 0K }"
-      "{ 0K }"
       "EndOfSegment"
       "NewSegment"
       "{ 0K }"
@@ -40,6 +40,7 @@
       "{ 0K }"
       "EndOfSegment";
   EXPECT_EQ(expected, ParseFile("sfx.mp3", 17));
+  EXPECT_GT(last_audio_config().codec_delay(), 0);
 }
 
 // Test parsing with a larger piece size to verify that multiple buffers
@@ -47,7 +48,6 @@
 TEST_F(MP3StreamParserTest, UnalignedAppend512) {
   const std::string expected =
       "NewSegment"
-      "{ 0K }"
       "{ 0K 26K 52K 78K }"
       "EndOfSegment"
       "NewSegment"
@@ -56,6 +56,40 @@
       "{ 0K }"
       "EndOfSegment";
   EXPECT_EQ(expected, ParseFile("sfx.mp3", 512));
+  EXPECT_GT(last_audio_config().codec_delay(), 0);
+}
+
+TEST_F(MP3StreamParserTest, MetadataParsing) {
+  scoped_refptr<DecoderBuffer> buffer = ReadTestDataFile("sfx.mp3");
+  const uint8_t* buffer_ptr = buffer->data();
+
+  // The first 32 bytes of sfx.mp3 are an ID3 tag, so no segments should be
+  // extracted after appending those bytes.
+  const int kId3TagSize = 32;
+  EXPECT_EQ("", ParseData(buffer_ptr, kId3TagSize));
+  EXPECT_FALSE(last_audio_config().IsValidConfig());
+  buffer_ptr += kId3TagSize;
+
+  // The next 417 bytes are a Xing frame; with the identifier 21 bytes into
+  // the frame.  Appending less than 21 bytes, should result in no segments
+  // nor an AudioDecoderConfig being created.
+  const int kXingTagPosition = 21;
+  EXPECT_EQ("", ParseData(buffer_ptr, kXingTagPosition));
+  EXPECT_FALSE(last_audio_config().IsValidConfig());
+  buffer_ptr += kXingTagPosition;
+
+  // Appending the rests of the Xing frame should result in no segments, but
+  // should generate a valid AudioDecoderConfig.
+  const int kXingRemainingSize = 417 - kXingTagPosition;
+  EXPECT_EQ("", ParseData(buffer_ptr, kXingRemainingSize));
+  EXPECT_TRUE(last_audio_config().IsValidConfig());
+  buffer_ptr += kXingRemainingSize;
+
+  // Append the first real frame and ensure we get a segment.
+  const int kFirstRealFrameSize = 182;
+  EXPECT_EQ("NewSegment{ 0K }EndOfSegment",
+            ParseData(buffer_ptr, kFirstRealFrameSize));
+  EXPECT_TRUE(last_audio_config().IsValidConfig());
 }
 
 }  // namespace media
diff --git a/media/formats/mpeg/mpeg_audio_stream_parser_base.cc b/media/formats/mpeg/mpeg_audio_stream_parser_base.cc
index aaf6a50..4d0a202 100644
--- a/media/formats/mpeg/mpeg_audio_stream_parser_base.cc
+++ b/media/formats/mpeg/mpeg_audio_stream_parser_base.cc
@@ -44,11 +44,13 @@
 }
 
 MPEGAudioStreamParserBase::MPEGAudioStreamParserBase(uint32 start_code_mask,
-                                                     AudioCodec audio_codec)
+                                                     AudioCodec audio_codec,
+                                                     int codec_delay)
     : state_(UNINITIALIZED),
       in_media_segment_(false),
       start_code_mask_(start_code_mask),
-      audio_codec_(audio_codec) {}
+      audio_codec_(audio_codec),
+      codec_delay_(codec_delay) {}
 
 MPEGAudioStreamParserBase::~MPEGAudioStreamParserBase() {}
 
@@ -166,8 +168,14 @@
   ChannelLayout channel_layout;
   int frame_size;
   int sample_count;
-  int bytes_read = ParseFrameHeader(
-      data, size, &frame_size, &sample_rate, &channel_layout, &sample_count);
+  bool metadata_frame = false;
+  int bytes_read = ParseFrameHeader(data,
+                                    size,
+                                    &frame_size,
+                                    &sample_rate,
+                                    &channel_layout,
+                                    &sample_count,
+                                    &metadata_frame);
 
   if (bytes_read <= 0)
     return bytes_read;
@@ -193,9 +201,16 @@
   }
 
   if (!config_.IsValidConfig()) {
-    config_.Initialize(audio_codec_, kSampleFormatF32, channel_layout,
-                       sample_rate, NULL, 0, false, false,
-                       base::TimeDelta(), base::TimeDelta());
+    config_.Initialize(audio_codec_,
+                       kSampleFormatF32,
+                       channel_layout,
+                       sample_rate,
+                       NULL,
+                       0,
+                       false,
+                       false,
+                       base::TimeDelta(),
+                       codec_delay_);
 
     base::TimeDelta base_timestamp;
     if (timestamp_helper_)
@@ -208,12 +223,16 @@
     bool success = config_cb_.Run(config_, video_config, TextTrackConfigMap());
 
     if (!init_cb_.is_null())
-      base::ResetAndReturn(&init_cb_).Run(success, kInfiniteDuration(), true);
+      base::ResetAndReturn(&init_cb_).Run(
+          success, kInfiniteDuration(), base::Time(), true);
 
     if (!success)
       return -1;
   }
 
+  if (metadata_frame)
+    return frame_size;
+
   // TODO(wolenetz/acolwell): Validate and use a common cross-parser TrackId
   // type and allow multiple audio tracks, if applicable. See
   // https://crbug.com/341581.
@@ -338,7 +357,7 @@
       int sync_size = end - sync;
       int frame_size;
       int sync_bytes = ParseFrameHeader(
-          sync, sync_size, &frame_size, NULL, NULL, NULL);
+          sync, sync_size, &frame_size, NULL, NULL, NULL, NULL);
 
       if (sync_bytes == 0)
         return 0;
diff --git a/media/formats/mpeg/mpeg_audio_stream_parser_base.h b/media/formats/mpeg/mpeg_audio_stream_parser_base.h
index 5975c1b..31a1b7c 100644
--- a/media/formats/mpeg/mpeg_audio_stream_parser_base.h
+++ b/media/formats/mpeg/mpeg_audio_stream_parser_base.h
@@ -23,7 +23,11 @@
  public:
   // |start_code_mask| is used to find the start of each frame header.  Also
   // referred to as the sync code in the MP3 and ADTS header specifications.
-  MPEGAudioStreamParserBase(uint32 start_code_mask, AudioCodec audio_codec);
+  // |codec_delay| is the number of samples the decoder will output before the
+  // first real frame.
+  MPEGAudioStreamParserBase(uint32 start_code_mask,
+                            AudioCodec audio_codec,
+                            int codec_delay);
   virtual ~MPEGAudioStreamParserBase();
 
   // StreamParser implementation.
@@ -54,9 +58,16 @@
   // of the frame if this function returns a value > 0.
   // |sample_count| - Optional parameter that is set to the number of samples
   // in the frame if this function returns a value > 0.
+  // |metadata_frame| - Optional parameter that is set to true if the frame has
+  // valid values for the above parameters, but no usable encoded data; only set
+  // to true if this function returns a value > 0.
   //
-  // |sample_rate|, |channel_layout|, |sample_count| may be NULL if the caller
-  // is not interested in receiving these values from the frame header.
+  // |sample_rate|, |channel_layout|, |sample_count|, |metadata_frame| may be
+  // NULL if the caller is not interested in receiving these values from the
+  // frame header.
+  //
+  // If |metadata_frame| is true, the MPEGAudioStreamParserBase will discard the
+  // frame after consuming the metadata values above.
   //
   // Returns:
   // > 0 : The number of bytes parsed.
@@ -67,7 +78,8 @@
                                int* frame_size,
                                int* sample_rate,
                                ChannelLayout* channel_layout,
-                               int* sample_count) const = 0;
+                               int* sample_count,
+                               bool* metadata_frame) const = 0;
 
   const LogCB& log_cb() const { return log_cb_; }
 
@@ -134,6 +146,7 @@
   bool in_media_segment_;
   const uint32 start_code_mask_;
   const AudioCodec audio_codec_;
+  const int codec_delay_;
 
   DISALLOW_COPY_AND_ASSIGN(MPEGAudioStreamParserBase);
 };
diff --git a/media/formats/webm/cluster_builder.cc b/media/formats/webm/cluster_builder.cc
index ec95616..bada9e2 100644
--- a/media/formats/webm/cluster_builder.cc
+++ b/media/formats/webm/cluster_builder.cc
@@ -32,6 +32,13 @@
   0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Block(size = 0)
 };
 
+static const uint8 kBlockGroupHeaderWithoutBlockDuration[] = {
+  0xA0,  // BlockGroup ID
+  0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // BlockGroup(size = 0)
+  0xA1,  // Block ID
+  0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Block(size = 0)
+};
+
 enum {
   kClusterSizeOffset = 4,
   kClusterTimecodeOffset = 14,
@@ -39,6 +46,7 @@
   kSimpleBlockSizeOffset = 1,
 
   kBlockGroupSizeOffset = 1,
+  kBlockGroupWithoutBlockDurationBlockSizeOffset = 10,
   kBlockGroupDurationOffset = 11,
   kBlockGroupBlockSizeOffset = 20,
 
@@ -85,8 +93,30 @@
 
 void ClusterBuilder::AddBlockGroup(int track_num, int64 timecode, int duration,
                                    int flags, const uint8* data, int size) {
+  AddBlockGroupInternal(track_num, timecode, true, duration, flags, data, size);
+}
+
+void ClusterBuilder::AddBlockGroupWithoutBlockDuration(int track_num,
+                                                       int64 timecode,
+                                                       int flags,
+                                                       const uint8* data,
+                                                       int size) {
+  AddBlockGroupInternal(track_num, timecode, false, 0, flags, data, size);
+}
+
+
+void ClusterBuilder::AddBlockGroupInternal(int track_num, int64 timecode,
+                                           bool include_block_duration,
+                                           int duration, int flags,
+                                           const uint8* data, int size) {
   int block_size = size + 4;
-  int bytes_needed = sizeof(kBlockGroupHeader) + block_size;
+  int bytes_needed = block_size;
+  if (include_block_duration) {
+    bytes_needed += sizeof(kBlockGroupHeader);
+  } else {
+    bytes_needed += sizeof(kBlockGroupHeaderWithoutBlockDuration);
+  }
+
   int block_group_size = bytes_needed - 9;
 
   if (bytes_needed > (buffer_size_ - bytes_used_))
@@ -94,11 +124,21 @@
 
   uint8* buf = buffer_.get() + bytes_used_;
   int block_group_offset = bytes_used_;
-  memcpy(buf, kBlockGroupHeader, sizeof(kBlockGroupHeader));
+  if (include_block_duration) {
+    memcpy(buf, kBlockGroupHeader, sizeof(kBlockGroupHeader));
+    UpdateUInt64(block_group_offset + kBlockGroupDurationOffset, duration);
+    UpdateUInt64(block_group_offset + kBlockGroupBlockSizeOffset, block_size);
+    buf += sizeof(kBlockGroupHeader);
+  } else {
+    memcpy(buf, kBlockGroupHeaderWithoutBlockDuration,
+           sizeof(kBlockGroupHeaderWithoutBlockDuration));
+    UpdateUInt64(
+        block_group_offset + kBlockGroupWithoutBlockDurationBlockSizeOffset,
+        block_size);
+    buf += sizeof(kBlockGroupHeaderWithoutBlockDuration);
+  }
+
   UpdateUInt64(block_group_offset + kBlockGroupSizeOffset, block_group_size);
-  UpdateUInt64(block_group_offset + kBlockGroupDurationOffset, duration);
-  UpdateUInt64(block_group_offset + kBlockGroupBlockSizeOffset, block_size);
-  buf += sizeof(kBlockGroupHeader);
 
   // Make sure the 4 most-significant bits are 0.
   // http://www.matroska.org/technical/specs/index.html#block_structure
diff --git a/media/formats/webm/cluster_builder.h b/media/formats/webm/cluster_builder.h
index 98f0f6c..ac5464a 100644
--- a/media/formats/webm/cluster_builder.h
+++ b/media/formats/webm/cluster_builder.h
@@ -36,10 +36,15 @@
                       const uint8* data, int size);
   void AddBlockGroup(int track_num, int64 timecode, int duration, int flags,
                      const uint8* data, int size);
+  void AddBlockGroupWithoutBlockDuration(int track_num, int64 timecode,
+                     int flags, const uint8* data, int size);
 
   scoped_ptr<Cluster> Finish();
 
  private:
+  void AddBlockGroupInternal(int track_num, int64 timecode,
+                             bool include_block_duration, int duration,
+                             int flags, const uint8* data, int size);
   void Reset();
   void ExtendBuffer(int bytes_needed);
   void UpdateUInt64(int offset, int64 value);
diff --git a/media/formats/webm/webm_audio_client.cc b/media/formats/webm/webm_audio_client.cc
index 6de4502..6fe9a84 100644
--- a/media/formats/webm/webm_audio_client.cc
+++ b/media/formats/webm/webm_audio_client.cc
@@ -65,15 +65,27 @@
     extra_data_size = codec_private.size();
   }
 
+  // Convert |codec_delay| from nanoseconds into frames.
+  int codec_delay_in_frames = 0;
+  if (codec_delay != -1) {
+    codec_delay_in_frames =
+        0.5 +
+        samples_per_second * (static_cast<double>(codec_delay) /
+                              base::Time::kNanosecondsPerSecond);
+  }
+
   config->Initialize(
       audio_codec,
       (audio_codec == kCodecOpus) ? kSampleFormatS16 : kSampleFormatPlanarF32,
       channel_layout,
-      samples_per_second, extra_data, extra_data_size, is_encrypted, true,
+      samples_per_second,
+      extra_data,
+      extra_data_size,
+      is_encrypted,
+      true,
       base::TimeDelta::FromMicroseconds(
           (seek_preroll != -1 ? seek_preroll : 0) / 1000),
-      base::TimeDelta::FromMicroseconds(
-          (codec_delay != -1 ? codec_delay : 0) / 1000));
+      codec_delay_in_frames);
   return config->IsValidConfig();
 }
 
diff --git a/media/formats/webm/webm_cluster_parser.cc b/media/formats/webm/webm_cluster_parser.cc
index 5530815..e206107 100644
--- a/media/formats/webm/webm_cluster_parser.cc
+++ b/media/formats/webm/webm_cluster_parser.cc
@@ -15,13 +15,6 @@
 #include "media/formats/webm/webm_crypto_helpers.h"
 #include "media/formats/webm/webm_webvtt_parser.h"
 
-// Arbitrarily-chosen numbers to estimate the duration of a buffer if none is
-// set and there is not enough information to get a better estimate.
-// TODO(wolenetz/acolwell): Parse audio codebook to determine missing audio
-// frame durations. See http://crbug.com/351166.
-static int kDefaultAudioBufferDurationInMs = 23;  // Common 1k samples @44.1kHz
-static int kDefaultVideoBufferDurationInMs = 42;  // Low 24fps to reduce stalls
-
 namespace media {
 
 WebMClusterParser::WebMClusterParser(
@@ -532,8 +525,18 @@
     return false;
   }
 
-  estimated_next_frame_duration_ = std::max(duration,
-                                            estimated_next_frame_duration_);
+  // The estimated frame duration is the minimum non-zero duration since the
+  // last initialization segment.  The minimum is used to ensure frame durations
+  // aren't overestimated.
+  if (duration > base::TimeDelta()) {
+    if (estimated_next_frame_duration_ == kNoTimestamp()) {
+      estimated_next_frame_duration_ = duration;
+    } else {
+      estimated_next_frame_duration_ =
+          std::min(duration, estimated_next_frame_duration_);
+    }
+  }
+
   buffers_.push_back(buffer);
   return true;
 }
diff --git a/media/formats/webm/webm_cluster_parser.h b/media/formats/webm/webm_cluster_parser.h
index 5657e90..add21f2 100644
--- a/media/formats/webm/webm_cluster_parser.h
+++ b/media/formats/webm/webm_cluster_parser.h
@@ -24,6 +24,15 @@
  public:
   typedef StreamParser::TrackId TrackId;
 
+  // Arbitrarily-chosen numbers to estimate the duration of a buffer if none is
+  // set and there is not enough information to get a better estimate.
+  // TODO(wolenetz/acolwell): Parse audio codebook to determine missing audio
+  // frame durations. See http://crbug.com/351166.
+  enum {
+    kDefaultAudioBufferDurationInMs = 23,  // Common 1k samples @44.1kHz
+    kDefaultVideoBufferDurationInMs = 42  // Low 24fps to reduce stalls
+  };
+
  private:
   // Helper class that manages per-track state.
   class Track {
diff --git a/media/formats/webm/webm_cluster_parser_unittest.cc b/media/formats/webm/webm_cluster_parser_unittest.cc
index 8b32f5d..7364878 100644
--- a/media/formats/webm/webm_cluster_parser_unittest.cc
+++ b/media/formats/webm/webm_cluster_parser_unittest.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include <algorithm>
+#include <cstdlib>
 
 #include "base/bind.h"
 #include "base/logging.h"
@@ -19,16 +20,35 @@
 
 namespace media {
 
+typedef WebMTracksParser::TextTracks TextTracks;
+
 enum {
   kTimecodeScale = 1000000,  // Timecode scale for millisecond timestamps.
   kAudioTrackNum = 1,
   kVideoTrackNum = 2,
   kTextTrackNum = 3,
+  kTestAudioFrameDefaultDurationInMs = 13,
+  kTestVideoFrameDefaultDurationInMs = 17
 };
 
+COMPILE_ASSERT(
+    static_cast<int>(kTestAudioFrameDefaultDurationInMs) !=
+        static_cast<int>(WebMClusterParser::kDefaultAudioBufferDurationInMs),
+    test_default_is_same_as_estimation_fallback_audio_duration);
+COMPILE_ASSERT(
+    static_cast<int>(kTestVideoFrameDefaultDurationInMs) !=
+        static_cast<int>(WebMClusterParser::kDefaultVideoBufferDurationInMs),
+    test_default_is_same_as_estimation_fallback_video_duration);
+
 struct BlockInfo {
   int track_num;
   int timestamp;
+
+  // Negative value is allowed only for block groups (not simple blocks) and
+  // directs CreateCluster() to exclude BlockDuration entry from the cluster for
+  // this BlockGroup. The absolute value is used for parser verification.
+  // For simple blocks, this value must be non-negative, and is used only for
+  // parser verification.
   int duration;
   bool use_simple_block;
 };
@@ -57,13 +77,20 @@
   for (int i = 0; i < block_count; i++) {
     uint8 data[] = { 0x00 };
     if (block_info[i].use_simple_block) {
+      CHECK_GE(block_info[i].duration, 0);
       cb.AddSimpleBlock(block_info[i].track_num,
                         block_info[i].timestamp,
                         0, data, sizeof(data));
       continue;
     }
 
-    CHECK_GE(block_info[i].duration, 0);
+    if (block_info[i].duration < 0) {
+      cb.AddBlockGroupWithoutBlockDuration(block_info[i].track_num,
+                                           block_info[i].timestamp,
+                                           0, data, sizeof(data));
+      continue;
+    }
+
     cb.AddBlockGroup(block_info[i].track_num,
                      block_info[i].timestamp,
                      block_info[i].duration,
@@ -121,7 +148,8 @@
     scoped_refptr<StreamParserBuffer> buffer = (*buffers)[(*offset)++];
 
     EXPECT_EQ(block_info[i].timestamp, buffer->timestamp().InMilliseconds());
-    EXPECT_EQ(block_info[i].duration, buffer->duration().InMilliseconds());
+    EXPECT_EQ(std::abs(block_info[i].duration),
+              buffer->duration().InMilliseconds());
     EXPECT_EQ(expected_type, buffer->type());
     EXPECT_EQ(block_info[i].track_num, buffer->track_id());
   }
@@ -171,7 +199,8 @@
 
     const scoped_refptr<StreamParserBuffer> buffer = *buffer_iter++;
     EXPECT_EQ(block_info.timestamp, buffer->timestamp().InMilliseconds());
-    EXPECT_EQ(block_info.duration, buffer->duration().InMilliseconds());
+    EXPECT_EQ(std::abs(block_info.duration),
+              buffer->duration().InMilliseconds());
     EXPECT_EQ(DemuxerStream::TEXT, buffer->type());
     EXPECT_EQ(text_track_num, buffer->track_id());
   }
@@ -203,14 +232,39 @@
                                       kNoTimestamp(),
                                       kVideoTrackNum,
                                       kNoTimestamp(),
-                                      WebMTracksParser::TextTracks(),
+                                      TextTracks(),
                                       std::set<int64>(),
                                       std::string(),
                                       std::string(),
                                       LogCB())) {}
 
  protected:
+  void ResetParserToHaveDefaultDurations() {
+    base::TimeDelta default_audio_duration = base::TimeDelta::FromMilliseconds(
+        kTestAudioFrameDefaultDurationInMs);
+    base::TimeDelta default_video_duration = base::TimeDelta::FromMilliseconds(
+        kTestVideoFrameDefaultDurationInMs);
+    ASSERT_GE(default_audio_duration, base::TimeDelta());
+    ASSERT_GE(default_video_duration, base::TimeDelta());
+    ASSERT_NE(kNoTimestamp(), default_audio_duration);
+    ASSERT_NE(kNoTimestamp(), default_video_duration);
+
+    parser_.reset(new WebMClusterParser(kTimecodeScale,
+                                        kAudioTrackNum,
+                                        default_audio_duration,
+                                        kVideoTrackNum,
+                                        default_video_duration,
+                                        TextTracks(),
+                                        std::set<int64>(),
+                                        std::string(),
+                                        std::string(),
+                                        LogCB()));
+  }
+
   scoped_ptr<WebMClusterParser> parser_;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(WebMClusterParserTest);
 };
 
 TEST_F(WebMClusterParserTest, Reset) {
@@ -337,7 +391,7 @@
                                       kNoTimestamp(),
                                       kVideoTrackNum,
                                       kNoTimestamp(),
-                                      WebMTracksParser::TextTracks(),
+                                      TextTracks(),
                                       ignored_tracks,
                                       std::string(),
                                       std::string(),
@@ -371,7 +425,6 @@
 }
 
 TEST_F(WebMClusterParserTest, ParseTextTracks) {
-  typedef WebMTracksParser::TextTracks TextTracks;
   TextTracks text_tracks;
 
   text_tracks.insert(std::make_pair(TextTracks::key_type(kTextTrackNum),
@@ -409,8 +462,7 @@
 }
 
 TEST_F(WebMClusterParserTest, TextTracksSimpleBlock) {
-  typedef WebMTracksParser::TextTracks TextTracks;
-  WebMTracksParser::TextTracks text_tracks;
+  TextTracks text_tracks;
 
   text_tracks.insert(std::make_pair(TextTracks::key_type(kTextTrackNum),
                                     TextTrackConfig(kTextSubtitles, "", "",
@@ -440,7 +492,6 @@
 }
 
 TEST_F(WebMClusterParserTest, ParseMultipleTextTracks) {
-  typedef WebMTracksParser::TextTracks TextTracks;
   TextTracks text_tracks;
 
   const int kSubtitleTextTrackNum = kTextTrackNum;
@@ -489,7 +540,7 @@
            text_map.begin();
        itr != text_map.end();
        ++itr) {
-    const WebMTracksParser::TextTracks::const_iterator find_result =
+    const TextTracks::const_iterator find_result =
         text_tracks.find(itr->first);
     ASSERT_TRUE(find_result != text_tracks.end());
     ASSERT_TRUE(VerifyTextBuffers(parser_, kInputBlockInfo, input_block_count,
@@ -505,7 +556,7 @@
                                       kNoTimestamp(),
                                       kVideoTrackNum,
                                       kNoTimestamp(),
-                                      WebMTracksParser::TextTracks(),
+                                      TextTracks(),
                                       std::set<int64>(),
                                       std::string(),
                                       "video_key_id",
@@ -526,7 +577,7 @@
                                       kNoTimestamp(),
                                       kVideoTrackNum,
                                       kNoTimestamp(),
-                                      WebMTracksParser::TextTracks(),
+                                      TextTracks(),
                                       std::set<int64>(),
                                       std::string(),
                                       "video_key_id",
@@ -552,4 +603,253 @@
   EXPECT_EQ(-1, parser_->Parse(kBuffer, sizeof(kBuffer)));
 }
 
+TEST_F(WebMClusterParserTest, ParseInvalidTextBlockGroupWithoutDuration) {
+  // Text track frames must have explicitly specified BlockGroup BlockDurations.
+  TextTracks text_tracks;
+
+  text_tracks.insert(std::make_pair(TextTracks::key_type(kTextTrackNum),
+                                    TextTrackConfig(kTextSubtitles, "", "",
+                                                    "")));
+
+  parser_.reset(new WebMClusterParser(kTimecodeScale,
+                                      kAudioTrackNum,
+                                      kNoTimestamp(),
+                                      kVideoTrackNum,
+                                      kNoTimestamp(),
+                                      text_tracks,
+                                      std::set<int64>(),
+                                      std::string(),
+                                      std::string(),
+                                      LogCB()));
+
+  const BlockInfo kBlockInfo[] = {
+    { kTextTrackNum,  33, -42, false },
+  };
+  int block_count = arraysize(kBlockInfo);
+  scoped_ptr<Cluster> cluster(CreateCluster(0, kBlockInfo, block_count));
+  int result = parser_->Parse(cluster->data(), cluster->size());
+  EXPECT_LT(result, 0);
+}
+
+TEST_F(WebMClusterParserTest, ParseWithDefaultDurationsSimpleBlocks) {
+  InSequence s;
+  ResetParserToHaveDefaultDurations();
+
+  EXPECT_LT(kTestAudioFrameDefaultDurationInMs, 23);
+  EXPECT_LT(kTestVideoFrameDefaultDurationInMs, 33);
+
+  const BlockInfo kBlockInfo[] = {
+    { kAudioTrackNum, 0, kTestAudioFrameDefaultDurationInMs, true },
+    { kAudioTrackNum, 23, kTestAudioFrameDefaultDurationInMs, true },
+    { kVideoTrackNum, 33, kTestVideoFrameDefaultDurationInMs, true },
+    { kAudioTrackNum, 46, kTestAudioFrameDefaultDurationInMs, true },
+    { kVideoTrackNum, 67, kTestVideoFrameDefaultDurationInMs, true },
+    { kAudioTrackNum, 69, kTestAudioFrameDefaultDurationInMs, true },
+    { kVideoTrackNum, 100, kTestVideoFrameDefaultDurationInMs, true },
+  };
+
+  int block_count = arraysize(kBlockInfo);
+  scoped_ptr<Cluster> cluster(CreateCluster(0, kBlockInfo, block_count));
+
+  // Send slightly less than the full cluster so all but the last block is
+  // parsed. Though all the blocks are simple blocks, none should be held aside
+  // for duration estimation prior to end of cluster detection because all the
+  // tracks have DefaultDurations.
+  int result = parser_->Parse(cluster->data(), cluster->size() - 1);
+  EXPECT_GT(result, 0);
+  EXPECT_LT(result, cluster->size());
+  ASSERT_TRUE(VerifyBuffers(parser_, kBlockInfo, block_count - 1));
+
+  parser_->Reset();
+
+  // Now parse a whole cluster to verify that all the blocks will get parsed.
+  result = parser_->Parse(cluster->data(), cluster->size());
+  EXPECT_EQ(cluster->size(), result);
+  ASSERT_TRUE(VerifyBuffers(parser_, kBlockInfo, block_count));
+}
+
+TEST_F(WebMClusterParserTest, ParseWithoutAnyDurationsSimpleBlocks) {
+  InSequence s;
+
+  // Absent DefaultDuration information, SimpleBlock durations are derived from
+  // inter-buffer track timestamp delta if within the cluster, and are estimated
+  // as the lowest non-zero duration seen so far if the last buffer in the track
+  // in the cluster (independently for each track in the cluster).
+  const BlockInfo kBlockInfo1[] = {
+    { kAudioTrackNum, 0, 23, true },
+    { kAudioTrackNum, 23, 22, true },
+    { kVideoTrackNum, 33, 33, true },
+    { kAudioTrackNum, 45, 23, true },
+    { kVideoTrackNum, 66, 34, true },
+    { kAudioTrackNum, 68, 22, true },  // Estimated from minimum audio dur
+    { kVideoTrackNum, 100, 33, true },  // Estimated from minimum video dur
+  };
+
+  int block_count1 = arraysize(kBlockInfo1);
+  scoped_ptr<Cluster> cluster1(CreateCluster(0, kBlockInfo1, block_count1));
+
+  // Send slightly less than the first full cluster so all but the last video
+  // block is parsed. Verify the last fully parsed audio and video buffer are
+  // both missing from the result (parser should hold them aside for duration
+  // estimation prior to end of cluster detection in the absence of
+  // DefaultDurations.)
+  int result = parser_->Parse(cluster1->data(), cluster1->size() - 1);
+  EXPECT_GT(result, 0);
+  EXPECT_LT(result, cluster1->size());
+  ASSERT_TRUE(VerifyBuffers(parser_, kBlockInfo1, block_count1 - 3));
+  EXPECT_EQ(3UL, parser_->GetAudioBuffers().size());
+  EXPECT_EQ(1UL, parser_->GetVideoBuffers().size());
+
+  parser_->Reset();
+
+  // Now parse the full first cluster and verify all the blocks are parsed.
+  result = parser_->Parse(cluster1->data(), cluster1->size());
+  EXPECT_EQ(cluster1->size(), result);
+  ASSERT_TRUE(VerifyBuffers(parser_, kBlockInfo1, block_count1));
+
+  // Verify that the estimated frame duration is tracked across clusters for
+  // each track.
+  const BlockInfo kBlockInfo2[] = {
+    { kAudioTrackNum, 200, 22, true },  // Estimate carries over across clusters
+    { kVideoTrackNum, 201, 33, true },  // Estimate carries over across clusters
+  };
+
+  int block_count2 = arraysize(kBlockInfo2);
+  scoped_ptr<Cluster> cluster2(CreateCluster(0, kBlockInfo2, block_count2));
+  result = parser_->Parse(cluster2->data(), cluster2->size());
+  EXPECT_EQ(cluster2->size(), result);
+  ASSERT_TRUE(VerifyBuffers(parser_, kBlockInfo2, block_count2));
+}
+
+TEST_F(WebMClusterParserTest, ParseWithoutAnyDurationsBlockGroups) {
+  InSequence s;
+
+  // Absent DefaultDuration and BlockDuration information, BlockGroup block
+  // durations are derived from inter-buffer track timestamp delta if within the
+  // cluster, and are estimated as the lowest non-zero duration seen so far if
+  // the last buffer in the track in the cluster (independently for each track
+  // in the cluster).
+    const BlockInfo kBlockInfo1[] = {
+    { kAudioTrackNum, 0, -23, false },
+    { kAudioTrackNum, 23, -22, false },
+    { kVideoTrackNum, 33, -33, false },
+    { kAudioTrackNum, 45, -23, false },
+    { kVideoTrackNum, 66, -34, false },
+    { kAudioTrackNum, 68, -22, false },  // Estimated from minimum audio dur
+    { kVideoTrackNum, 100, -33, false },  // Estimated from minimum video dur
+  };
+
+  int block_count1 = arraysize(kBlockInfo1);
+  scoped_ptr<Cluster> cluster1(CreateCluster(0, kBlockInfo1, block_count1));
+
+  // Send slightly less than the first full cluster so all but the last video
+  // block is parsed. Verify the last fully parsed audio and video buffer are
+  // both missing from the result (parser should hold them aside for duration
+  // estimation prior to end of cluster detection in the absence of
+  // DefaultDurations.)
+  int result = parser_->Parse(cluster1->data(), cluster1->size() - 1);
+  EXPECT_GT(result, 0);
+  EXPECT_LT(result, cluster1->size());
+  ASSERT_TRUE(VerifyBuffers(parser_, kBlockInfo1, block_count1 - 3));
+  EXPECT_EQ(3UL, parser_->GetAudioBuffers().size());
+  EXPECT_EQ(1UL, parser_->GetVideoBuffers().size());
+
+  parser_->Reset();
+
+  // Now parse the full first cluster and verify all the blocks are parsed.
+  result = parser_->Parse(cluster1->data(), cluster1->size());
+  EXPECT_EQ(cluster1->size(), result);
+  ASSERT_TRUE(VerifyBuffers(parser_, kBlockInfo1, block_count1));
+
+  // Verify that the estimated frame duration is tracked across clusters for
+  // each track.
+  const BlockInfo kBlockInfo2[] = {
+    { kAudioTrackNum, 200, -22, false },
+    { kVideoTrackNum, 201, -33, false },
+  };
+
+  int block_count2 = arraysize(kBlockInfo2);
+  scoped_ptr<Cluster> cluster2(CreateCluster(0, kBlockInfo2, block_count2));
+  result = parser_->Parse(cluster2->data(), cluster2->size());
+  EXPECT_EQ(cluster2->size(), result);
+  ASSERT_TRUE(VerifyBuffers(parser_, kBlockInfo2, block_count2));
+}
+
+// TODO(wolenetz): Is parser behavior correct? See http://crbug.com/363433.
+TEST_F(WebMClusterParserTest,
+       ParseWithDefaultDurationsBlockGroupsWithoutDurations) {
+  InSequence s;
+  ResetParserToHaveDefaultDurations();
+
+  EXPECT_LT(kTestAudioFrameDefaultDurationInMs, 23);
+  EXPECT_LT(kTestVideoFrameDefaultDurationInMs, 33);
+
+  const BlockInfo kBlockInfo[] = {
+    { kAudioTrackNum, 0, -kTestAudioFrameDefaultDurationInMs, false },
+    { kAudioTrackNum, 23, -kTestAudioFrameDefaultDurationInMs, false },
+    { kVideoTrackNum, 33, -kTestVideoFrameDefaultDurationInMs, false },
+    { kAudioTrackNum, 46, -kTestAudioFrameDefaultDurationInMs, false },
+    { kVideoTrackNum, 67, -kTestVideoFrameDefaultDurationInMs, false },
+    { kAudioTrackNum, 69, -kTestAudioFrameDefaultDurationInMs, false },
+    { kVideoTrackNum, 100, -kTestVideoFrameDefaultDurationInMs, false },
+  };
+
+  int block_count = arraysize(kBlockInfo);
+  scoped_ptr<Cluster> cluster(CreateCluster(0, kBlockInfo, block_count));
+
+  // Send slightly less than the full cluster so all but the last block is
+  // parsed. None should be held aside for duration estimation prior to end of
+  // cluster detection because all the tracks have DefaultDurations.
+  int result = parser_->Parse(cluster->data(), cluster->size() - 1);
+  EXPECT_GT(result, 0);
+  EXPECT_LT(result, cluster->size());
+  ASSERT_TRUE(VerifyBuffers(parser_, kBlockInfo, block_count - 1));
+
+  parser_->Reset();
+
+  // Now parse a whole cluster to verify that all the blocks will get parsed.
+  result = parser_->Parse(cluster->data(), cluster->size());
+  EXPECT_EQ(cluster->size(), result);
+  ASSERT_TRUE(VerifyBuffers(parser_, kBlockInfo, block_count));
+}
+
+TEST_F(WebMClusterParserTest,
+       ParseDegenerateClusterYieldsHardcodedEstimatedDurations) {
+  const BlockInfo kBlockInfo[] = {
+    {
+      kAudioTrackNum,
+      0,
+      WebMClusterParser::kDefaultAudioBufferDurationInMs,
+      true
+    }, {
+      kVideoTrackNum,
+      0,
+      WebMClusterParser::kDefaultVideoBufferDurationInMs,
+      true
+    },
+  };
+
+  int block_count = arraysize(kBlockInfo);
+  scoped_ptr<Cluster> cluster(CreateCluster(0, kBlockInfo, block_count));
+  int result = parser_->Parse(cluster->data(), cluster->size());
+  EXPECT_EQ(cluster->size(), result);
+  ASSERT_TRUE(VerifyBuffers(parser_, kBlockInfo, block_count));
+}
+
+TEST_F(WebMClusterParserTest,
+       ParseDegenerateClusterWithDefaultDurationsYieldsDefaultDurations) {
+  ResetParserToHaveDefaultDurations();
+
+  const BlockInfo kBlockInfo[] = {
+    { kAudioTrackNum, 0, kTestAudioFrameDefaultDurationInMs, true },
+    { kVideoTrackNum, 0, kTestVideoFrameDefaultDurationInMs, true },
+  };
+
+  int block_count = arraysize(kBlockInfo);
+  scoped_ptr<Cluster> cluster(CreateCluster(0, kBlockInfo, block_count));
+  int result = parser_->Parse(cluster->data(), cluster->size());
+  EXPECT_EQ(cluster->size(), result);
+  ASSERT_TRUE(VerifyBuffers(parser_, kBlockInfo, block_count));
+}
+
 }  // namespace media
diff --git a/media/formats/webm/webm_info_parser.cc b/media/formats/webm/webm_info_parser.cc
index ac4f08c..6309c21 100644
--- a/media/formats/webm/webm_info_parser.cc
+++ b/media/formats/webm/webm_info_parser.cc
@@ -74,6 +74,25 @@
 }
 
 bool WebMInfoParser::OnBinary(int id, const uint8* data, int size) {
+  if (id == kWebMIdDateUTC) {
+    if (size != 8)
+      return false;
+
+    int64 date_in_nanoseconds = 0;
+    for (int i = 0; i < size; ++i)
+      date_in_nanoseconds = (date_in_nanoseconds << 8) | data[i];
+
+    base::Time::Exploded exploded_epoch;
+    exploded_epoch.year = 2001;
+    exploded_epoch.month = 1;
+    exploded_epoch.day_of_month = 1;
+    exploded_epoch.hour = 0;
+    exploded_epoch.minute = 0;
+    exploded_epoch.second = 0;
+    exploded_epoch.millisecond = 0;
+    date_utc_ = base::Time::FromUTCExploded(exploded_epoch) +
+        base::TimeDelta::FromMicroseconds(date_in_nanoseconds / 1000);
+  }
   return true;
 }
 
diff --git a/media/formats/webm/webm_info_parser.h b/media/formats/webm/webm_info_parser.h
index 504b927..36aac92 100644
--- a/media/formats/webm/webm_info_parser.h
+++ b/media/formats/webm/webm_info_parser.h
@@ -6,6 +6,7 @@
 #define MEDIA_FORMATS_WEBM_WEBM_INFO_PARSER_H_
 
 #include "base/compiler_specific.h"
+#include "base/time/time.h"
 #include "media/base/media_export.h"
 #include "media/formats/webm/webm_parser.h"
 
@@ -26,6 +27,7 @@
 
   int64 timecode_scale() const { return timecode_scale_; }
   double duration() const { return duration_; }
+  base::Time date_utc() const { return date_utc_; }
 
  private:
   // WebMParserClient methods
@@ -38,6 +40,7 @@
 
   int64 timecode_scale_;
   double duration_;
+  base::Time date_utc_;
 
   DISALLOW_COPY_AND_ASSIGN(WebMInfoParser);
 };
diff --git a/media/formats/webm/webm_stream_parser.cc b/media/formats/webm/webm_stream_parser.cc
index 1a49c66..4a72409 100644
--- a/media/formats/webm/webm_stream_parser.cc
+++ b/media/formats/webm/webm_stream_parser.cc
@@ -219,7 +219,8 @@
   ChangeState(kParsingClusters);
 
   if (!init_cb_.is_null())
-    base::ResetAndReturn(&init_cb_).Run(true, duration, false);
+    base::ResetAndReturn(&init_cb_).Run(
+        true, duration, info_parser.date_utc(), false);
 
   return bytes_parsed;
 }
diff --git a/media/media.gyp b/media/media.gyp
index 3b03664..420e6fe 100644
--- a/media/media.gyp
+++ b/media/media.gyp
@@ -413,6 +413,11 @@
         'filters/source_buffer_stream.h',
         'filters/stream_parser_factory.cc',
         'filters/stream_parser_factory.h',
+        'filters/video_frame_scheduler.h',
+        'filters/video_frame_scheduler_impl.cc',
+        'filters/video_frame_scheduler_impl.h',
+        'filters/video_frame_scheduler_proxy.cc',
+        'filters/video_frame_scheduler_proxy.h',
         'filters/video_renderer_impl.cc',
         'filters/video_renderer_impl.h',
         'filters/vpx_video_decoder.cc',
@@ -886,11 +891,6 @@
             }],
           ],
         }],
-        ['toolkit_uses_gtk==1', {
-          'dependencies': [
-            '../build/linux/system.gyp:gtk',
-          ],
-        }],
         ['target_arch=="ia32" or target_arch=="x64"', {
           'dependencies': [
             'media_asm',
@@ -1039,6 +1039,7 @@
         'filters/skcanvas_video_renderer_unittest.cc',
         'filters/source_buffer_stream_unittest.cc',
         'filters/video_decoder_selector_unittest.cc',
+        'filters/video_frame_scheduler_impl_unittest.cc',
         'filters/video_frame_stream_unittest.cc',
         'filters/video_renderer_impl_unittest.cc',
         'midi/midi_manager_usb_unittest.cc',
@@ -1510,7 +1511,6 @@
           ],
           'variables': {
             'test_suite_name': 'media_unittests',
-            'input_shlib_path': '<(SHARED_LIB_DIR)/<(SHARED_LIB_PREFIX)media_unittests<(SHARED_LIB_SUFFIX)',
           },
           'includes': ['../build/apk_test.gypi'],
         },
@@ -1523,7 +1523,6 @@
           ],
           'variables': {
             'test_suite_name': 'media_perftests',
-            'input_shlib_path': '<(SHARED_LIB_DIR)/<(SHARED_LIB_PREFIX)media_perftests<(SHARED_LIB_SUFFIX)',
           },
           'includes': ['../build/apk_test.gypi'],
         },
@@ -1654,25 +1653,6 @@
           'sources': [
             'ffmpeg/ffmpeg_unittest.cc',
           ],
-          'conditions': [
-            ['toolkit_uses_gtk==1', {
-              'dependencies': [
-                # Needed for the following #include chain:
-                #   base/run_all_unittests.cc
-                #   ../base/test_suite.h
-                #   gtk/gtk.h
-                '../build/linux/system.gyp:gtk',
-              ],
-              'conditions': [
-                # TODO(dmikurube): Kill linux_use_tcmalloc. http://crbug.com/345554
-                ['(use_allocator!="none" and use_allocator!="see_use_tcmalloc") or (use_allocator=="see_use_tcmalloc" and linux_use_tcmalloc==1)', {
-                  'dependencies': [
-                    '../base/allocator/allocator.gyp:allocator',
-                  ],
-                }],
-              ],
-            }],
-          ],
         },
         {
           'target_name': 'ffmpeg_regression_tests',
diff --git a/media/media.target.darwin-arm.mk b/media/media.target.darwin-arm.mk
index 5457708..8b71e8d 100644
--- a/media/media.target.darwin-arm.mk
+++ b/media/media.target.darwin-arm.mk
@@ -149,6 +149,8 @@
 	media/filters/skcanvas_video_renderer.cc \
 	media/filters/source_buffer_stream.cc \
 	media/filters/stream_parser_factory.cc \
+	media/filters/video_frame_scheduler_impl.cc \
+	media/filters/video_frame_scheduler_proxy.cc \
 	media/filters/video_renderer_impl.cc \
 	media/filters/wsola_internals.cc \
 	media/midi/midi_manager.cc \
@@ -272,12 +274,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -397,12 +402,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -478,7 +486,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/media/media.target.darwin-mips.mk b/media/media.target.darwin-mips.mk
index 9c7a4c0..5ef2638 100644
--- a/media/media.target.darwin-mips.mk
+++ b/media/media.target.darwin-mips.mk
@@ -149,6 +149,8 @@
 	media/filters/skcanvas_video_renderer.cc \
 	media/filters/source_buffer_stream.cc \
 	media/filters/stream_parser_factory.cc \
+	media/filters/video_frame_scheduler_impl.cc \
+	media/filters/video_frame_scheduler_proxy.cc \
 	media/filters/video_renderer_impl.cc \
 	media/filters/wsola_internals.cc \
 	media/midi/midi_manager.cc \
@@ -271,12 +273,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -395,12 +400,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -474,7 +482,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/media/media.target.darwin-x86.mk b/media/media.target.darwin-x86.mk
index a7f8537..8ddc057 100644
--- a/media/media.target.darwin-x86.mk
+++ b/media/media.target.darwin-x86.mk
@@ -149,6 +149,8 @@
 	media/filters/skcanvas_video_renderer.cc \
 	media/filters/source_buffer_stream.cc \
 	media/filters/stream_parser_factory.cc \
+	media/filters/video_frame_scheduler_impl.cc \
+	media/filters/video_frame_scheduler_proxy.cc \
 	media/filters/video_renderer_impl.cc \
 	media/filters/wsola_internals.cc \
 	media/midi/midi_manager.cc \
@@ -274,12 +276,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -399,12 +404,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -477,7 +485,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/media/media.target.darwin-x86_64.mk b/media/media.target.darwin-x86_64.mk
index 932314d..4ba6050 100644
--- a/media/media.target.darwin-x86_64.mk
+++ b/media/media.target.darwin-x86_64.mk
@@ -149,6 +149,8 @@
 	media/filters/skcanvas_video_renderer.cc \
 	media/filters/source_buffer_stream.cc \
 	media/filters/stream_parser_factory.cc \
+	media/filters/video_frame_scheduler_impl.cc \
+	media/filters/video_frame_scheduler_proxy.cc \
 	media/filters/video_renderer_impl.cc \
 	media/filters/wsola_internals.cc \
 	media/midi/midi_manager.cc \
@@ -274,12 +276,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -399,12 +404,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -477,7 +485,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/media/media.target.linux-arm.mk b/media/media.target.linux-arm.mk
index 5457708..8b71e8d 100644
--- a/media/media.target.linux-arm.mk
+++ b/media/media.target.linux-arm.mk
@@ -149,6 +149,8 @@
 	media/filters/skcanvas_video_renderer.cc \
 	media/filters/source_buffer_stream.cc \
 	media/filters/stream_parser_factory.cc \
+	media/filters/video_frame_scheduler_impl.cc \
+	media/filters/video_frame_scheduler_proxy.cc \
 	media/filters/video_renderer_impl.cc \
 	media/filters/wsola_internals.cc \
 	media/midi/midi_manager.cc \
@@ -272,12 +274,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -397,12 +402,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -478,7 +486,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/media/media.target.linux-mips.mk b/media/media.target.linux-mips.mk
index 9c7a4c0..5ef2638 100644
--- a/media/media.target.linux-mips.mk
+++ b/media/media.target.linux-mips.mk
@@ -149,6 +149,8 @@
 	media/filters/skcanvas_video_renderer.cc \
 	media/filters/source_buffer_stream.cc \
 	media/filters/stream_parser_factory.cc \
+	media/filters/video_frame_scheduler_impl.cc \
+	media/filters/video_frame_scheduler_proxy.cc \
 	media/filters/video_renderer_impl.cc \
 	media/filters/wsola_internals.cc \
 	media/midi/midi_manager.cc \
@@ -271,12 +273,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -395,12 +400,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -474,7 +482,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/media/media.target.linux-x86.mk b/media/media.target.linux-x86.mk
index a7f8537..8ddc057 100644
--- a/media/media.target.linux-x86.mk
+++ b/media/media.target.linux-x86.mk
@@ -149,6 +149,8 @@
 	media/filters/skcanvas_video_renderer.cc \
 	media/filters/source_buffer_stream.cc \
 	media/filters/stream_parser_factory.cc \
+	media/filters/video_frame_scheduler_impl.cc \
+	media/filters/video_frame_scheduler_proxy.cc \
 	media/filters/video_renderer_impl.cc \
 	media/filters/wsola_internals.cc \
 	media/midi/midi_manager.cc \
@@ -274,12 +276,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -399,12 +404,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -477,7 +485,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/media/media.target.linux-x86_64.mk b/media/media.target.linux-x86_64.mk
index 932314d..4ba6050 100644
--- a/media/media.target.linux-x86_64.mk
+++ b/media/media.target.linux-x86_64.mk
@@ -149,6 +149,8 @@
 	media/filters/skcanvas_video_renderer.cc \
 	media/filters/source_buffer_stream.cc \
 	media/filters/stream_parser_factory.cc \
+	media/filters/video_frame_scheduler_impl.cc \
+	media/filters/video_frame_scheduler_proxy.cc \
 	media/filters/video_renderer_impl.cc \
 	media/filters/wsola_internals.cc \
 	media/midi/midi_manager.cc \
@@ -274,12 +276,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -399,12 +404,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -477,7 +485,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/media/media_asm.target.darwin-x86.mk b/media/media_asm.target.darwin-x86.mk
index 3f14a3d..ebe269f 100644
--- a/media/media_asm.target.darwin-x86.mk
+++ b/media/media_asm.target.darwin-x86.mk
@@ -306,7 +306,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/media/media_asm.target.darwin-x86_64.mk b/media/media_asm.target.darwin-x86_64.mk
index 1b8dc59..aa08ae4 100644
--- a/media/media_asm.target.darwin-x86_64.mk
+++ b/media/media_asm.target.darwin-x86_64.mk
@@ -326,7 +326,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/media/media_asm.target.linux-x86.mk b/media/media_asm.target.linux-x86.mk
index 3f14a3d..ebe269f 100644
--- a/media/media_asm.target.linux-x86.mk
+++ b/media/media_asm.target.linux-x86.mk
@@ -306,7 +306,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/media/media_asm.target.linux-x86_64.mk b/media/media_asm.target.linux-x86_64.mk
index 1b8dc59..aa08ae4 100644
--- a/media/media_asm.target.linux-x86_64.mk
+++ b/media/media_asm.target.linux-x86_64.mk
@@ -326,7 +326,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/media/media_mmx.target.darwin-x86.mk b/media/media_mmx.target.darwin-x86.mk
index 19ceeff..93b0bf6 100644
--- a/media/media_mmx.target.darwin-x86.mk
+++ b/media/media_mmx.target.darwin-x86.mk
@@ -219,7 +219,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/media/media_mmx.target.darwin-x86_64.mk b/media/media_mmx.target.darwin-x86_64.mk
index cc9806e..c783a3a 100644
--- a/media/media_mmx.target.darwin-x86_64.mk
+++ b/media/media_mmx.target.darwin-x86_64.mk
@@ -219,7 +219,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/media/media_mmx.target.linux-x86.mk b/media/media_mmx.target.linux-x86.mk
index 19ceeff..93b0bf6 100644
--- a/media/media_mmx.target.linux-x86.mk
+++ b/media/media_mmx.target.linux-x86.mk
@@ -219,7 +219,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/media/media_mmx.target.linux-x86_64.mk b/media/media_mmx.target.linux-x86_64.mk
index cc9806e..c783a3a 100644
--- a/media/media_mmx.target.linux-x86_64.mk
+++ b/media/media_mmx.target.linux-x86_64.mk
@@ -219,7 +219,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/media/media_sse.target.darwin-x86.mk b/media/media_sse.target.darwin-x86.mk
index 7358de1..99bbb88 100644
--- a/media/media_sse.target.darwin-x86.mk
+++ b/media/media_sse.target.darwin-x86.mk
@@ -219,7 +219,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/media/media_sse.target.darwin-x86_64.mk b/media/media_sse.target.darwin-x86_64.mk
index b20a835..e347abe 100644
--- a/media/media_sse.target.darwin-x86_64.mk
+++ b/media/media_sse.target.darwin-x86_64.mk
@@ -219,7 +219,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/media/media_sse.target.linux-x86.mk b/media/media_sse.target.linux-x86.mk
index 7358de1..99bbb88 100644
--- a/media/media_sse.target.linux-x86.mk
+++ b/media/media_sse.target.linux-x86.mk
@@ -219,7 +219,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/media/media_sse.target.linux-x86_64.mk b/media/media_sse.target.linux-x86_64.mk
index b20a835..e347abe 100644
--- a/media/media_sse.target.linux-x86_64.mk
+++ b/media/media_sse.target.linux-x86_64.mk
@@ -219,7 +219,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/media/media_sse2.target.darwin-x86.mk b/media/media_sse2.target.darwin-x86.mk
index 80bbea4..654dda5 100644
--- a/media/media_sse2.target.darwin-x86.mk
+++ b/media/media_sse2.target.darwin-x86.mk
@@ -221,7 +221,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/media/media_sse2.target.darwin-x86_64.mk b/media/media_sse2.target.darwin-x86_64.mk
index 1930b57..69537cd 100644
--- a/media/media_sse2.target.darwin-x86_64.mk
+++ b/media/media_sse2.target.darwin-x86_64.mk
@@ -221,7 +221,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/media/media_sse2.target.linux-x86.mk b/media/media_sse2.target.linux-x86.mk
index 80bbea4..654dda5 100644
--- a/media/media_sse2.target.linux-x86.mk
+++ b/media/media_sse2.target.linux-x86.mk
@@ -221,7 +221,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/media/media_sse2.target.linux-x86_64.mk b/media/media_sse2.target.linux-x86_64.mk
index 1930b57..69537cd 100644
--- a/media/media_sse2.target.linux-x86_64.mk
+++ b/media/media_sse2.target.linux-x86_64.mk
@@ -221,7 +221,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/media/player_android.target.darwin-arm.mk b/media/player_android.target.darwin-arm.mk
index 7713a92..c483151 100644
--- a/media/player_android.target.darwin-arm.mk
+++ b/media/player_android.target.darwin-arm.mk
@@ -53,7 +53,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-fno-tree-sra \
 	-fuse-ld=gold \
 	-Wno-psabi \
@@ -151,7 +150,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-fno-tree-sra \
 	-fuse-ld=gold \
 	-Wno-psabi \
@@ -256,7 +254,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/media/player_android.target.darwin-mips.mk b/media/player_android.target.darwin-mips.mk
index a3aa36d..f425f19 100644
--- a/media/player_android.target.darwin-mips.mk
+++ b/media/player_android.target.darwin-mips.mk
@@ -53,7 +53,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-EL \
 	-mhard-float \
 	-ffunction-sections \
@@ -150,7 +149,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-EL \
 	-mhard-float \
 	-ffunction-sections \
@@ -252,7 +250,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/media/player_android.target.darwin-x86.mk b/media/player_android.target.darwin-x86.mk
index 45d1433..9207458 100644
--- a/media/player_android.target.darwin-x86.mk
+++ b/media/player_android.target.darwin-x86.mk
@@ -52,7 +52,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-msse2 \
 	-mfpmath=sse \
 	-mmmx \
@@ -150,7 +149,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-msse2 \
 	-mfpmath=sse \
 	-mmmx \
@@ -254,7 +252,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/media/player_android.target.darwin-x86_64.mk b/media/player_android.target.darwin-x86_64.mk
index 19d827c..4686fac 100644
--- a/media/player_android.target.darwin-x86_64.mk
+++ b/media/player_android.target.darwin-x86_64.mk
@@ -54,7 +54,6 @@
 	-pipe \
 	-fPIC \
 	-Wno-unused-local-typedefs \
-	-Wno-unknown-pragmas \
 	-m64 \
 	-march=x86-64 \
 	-fuse-ld=gold \
@@ -152,7 +151,6 @@
 	-pipe \
 	-fPIC \
 	-Wno-unused-local-typedefs \
-	-Wno-unknown-pragmas \
 	-m64 \
 	-march=x86-64 \
 	-fuse-ld=gold \
@@ -254,7 +252,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/media/player_android.target.linux-arm.mk b/media/player_android.target.linux-arm.mk
index 7713a92..c483151 100644
--- a/media/player_android.target.linux-arm.mk
+++ b/media/player_android.target.linux-arm.mk
@@ -53,7 +53,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-fno-tree-sra \
 	-fuse-ld=gold \
 	-Wno-psabi \
@@ -151,7 +150,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-fno-tree-sra \
 	-fuse-ld=gold \
 	-Wno-psabi \
@@ -256,7 +254,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/media/player_android.target.linux-mips.mk b/media/player_android.target.linux-mips.mk
index a3aa36d..f425f19 100644
--- a/media/player_android.target.linux-mips.mk
+++ b/media/player_android.target.linux-mips.mk
@@ -53,7 +53,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-EL \
 	-mhard-float \
 	-ffunction-sections \
@@ -150,7 +149,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-EL \
 	-mhard-float \
 	-ffunction-sections \
@@ -252,7 +250,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/media/player_android.target.linux-x86.mk b/media/player_android.target.linux-x86.mk
index 45d1433..9207458 100644
--- a/media/player_android.target.linux-x86.mk
+++ b/media/player_android.target.linux-x86.mk
@@ -52,7 +52,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-msse2 \
 	-mfpmath=sse \
 	-mmmx \
@@ -150,7 +149,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-msse2 \
 	-mfpmath=sse \
 	-mmmx \
@@ -254,7 +252,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/media/player_android.target.linux-x86_64.mk b/media/player_android.target.linux-x86_64.mk
index 19d827c..4686fac 100644
--- a/media/player_android.target.linux-x86_64.mk
+++ b/media/player_android.target.linux-x86_64.mk
@@ -54,7 +54,6 @@
 	-pipe \
 	-fPIC \
 	-Wno-unused-local-typedefs \
-	-Wno-unknown-pragmas \
 	-m64 \
 	-march=x86-64 \
 	-fuse-ld=gold \
@@ -152,7 +151,6 @@
 	-pipe \
 	-fPIC \
 	-Wno-unused-local-typedefs \
-	-Wno-unknown-pragmas \
 	-m64 \
 	-march=x86-64 \
 	-fuse-ld=gold \
@@ -254,7 +252,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/media/shared_memory_support.target.darwin-arm.mk b/media/shared_memory_support.target.darwin-arm.mk
index 13978d2..b9585c2 100644
--- a/media/shared_memory_support.target.darwin-arm.mk
+++ b/media/shared_memory_support.target.darwin-arm.mk
@@ -224,7 +224,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/media/shared_memory_support.target.darwin-mips.mk b/media/shared_memory_support.target.darwin-mips.mk
index db27e5a..ea707d3 100644
--- a/media/shared_memory_support.target.darwin-mips.mk
+++ b/media/shared_memory_support.target.darwin-mips.mk
@@ -220,7 +220,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/media/shared_memory_support.target.darwin-x86.mk b/media/shared_memory_support.target.darwin-x86.mk
index affc276..b27f1eb 100644
--- a/media/shared_memory_support.target.darwin-x86.mk
+++ b/media/shared_memory_support.target.darwin-x86.mk
@@ -222,7 +222,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/media/shared_memory_support.target.darwin-x86_64.mk b/media/shared_memory_support.target.darwin-x86_64.mk
index 0653fce..0d67cc0 100644
--- a/media/shared_memory_support.target.darwin-x86_64.mk
+++ b/media/shared_memory_support.target.darwin-x86_64.mk
@@ -222,7 +222,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/media/shared_memory_support.target.linux-arm.mk b/media/shared_memory_support.target.linux-arm.mk
index 13978d2..b9585c2 100644
--- a/media/shared_memory_support.target.linux-arm.mk
+++ b/media/shared_memory_support.target.linux-arm.mk
@@ -224,7 +224,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/media/shared_memory_support.target.linux-mips.mk b/media/shared_memory_support.target.linux-mips.mk
index db27e5a..ea707d3 100644
--- a/media/shared_memory_support.target.linux-mips.mk
+++ b/media/shared_memory_support.target.linux-mips.mk
@@ -220,7 +220,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/media/shared_memory_support.target.linux-x86.mk b/media/shared_memory_support.target.linux-x86.mk
index affc276..b27f1eb 100644
--- a/media/shared_memory_support.target.linux-x86.mk
+++ b/media/shared_memory_support.target.linux-x86.mk
@@ -222,7 +222,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/media/shared_memory_support.target.linux-x86_64.mk b/media/shared_memory_support.target.linux-x86_64.mk
index 0653fce..0d67cc0 100644
--- a/media/shared_memory_support.target.linux-x86_64.mk
+++ b/media/shared_memory_support.target.linux-x86_64.mk
@@ -222,7 +222,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/media/shared_memory_support_sse.target.darwin-x86.mk b/media/shared_memory_support_sse.target.darwin-x86.mk
index e06ee37..d557031 100644
--- a/media/shared_memory_support_sse.target.darwin-x86.mk
+++ b/media/shared_memory_support_sse.target.darwin-x86.mk
@@ -219,7 +219,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/media/shared_memory_support_sse.target.darwin-x86_64.mk b/media/shared_memory_support_sse.target.darwin-x86_64.mk
index 75b6504..9e1ab52 100644
--- a/media/shared_memory_support_sse.target.darwin-x86_64.mk
+++ b/media/shared_memory_support_sse.target.darwin-x86_64.mk
@@ -219,7 +219,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/media/shared_memory_support_sse.target.linux-x86.mk b/media/shared_memory_support_sse.target.linux-x86.mk
index e06ee37..d557031 100644
--- a/media/shared_memory_support_sse.target.linux-x86.mk
+++ b/media/shared_memory_support_sse.target.linux-x86.mk
@@ -219,7 +219,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/media/shared_memory_support_sse.target.linux-x86_64.mk b/media/shared_memory_support_sse.target.linux-x86_64.mk
index 75b6504..9e1ab52 100644
--- a/media/shared_memory_support_sse.target.linux-x86_64.mk
+++ b/media/shared_memory_support_sse.target.linux-x86_64.mk
@@ -219,7 +219,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/media/test/data/bear-1280x720-av_with-aud-nalus_frag.mp4 b/media/test/data/bear-1280x720-av_with-aud-nalus_frag.mp4
new file mode 100644
index 0000000..1fa9931
--- /dev/null
+++ b/media/test/data/bear-1280x720-av_with-aud-nalus_frag.mp4
Binary files differ
diff --git a/media/test/data/bear-320x240-live.webm b/media/test/data/bear-320x240-live.webm
index c196c9b..bb75b39 100644
--- a/media/test/data/bear-320x240-live.webm
+++ b/media/test/data/bear-320x240-live.webm
Binary files differ
diff --git a/media/video/capture/win/filter_base_win.cc b/media/video/capture/win/filter_base_win.cc
index ddc68d6..768c486 100644
--- a/media/video/capture/win/filter_base_win.cc
+++ b/media/video/capture/win/filter_base_win.cc
@@ -9,7 +9,7 @@
 namespace media {
 
 // Implement IEnumPins.
-class PinEnumerator
+class PinEnumerator FINAL
     : public IEnumPins,
       public base::RefCounted<PinEnumerator> {
  public:
diff --git a/media/video/capture/win/video_capture_device_mf_win.cc b/media/video/capture/win/video_capture_device_mf_win.cc
index d9b6751..cb10a86 100644
--- a/media/video/capture/win/video_capture_device_mf_win.cc
+++ b/media/video/capture/win/video_capture_device_mf_win.cc
@@ -173,7 +173,7 @@
 
 }  // namespace
 
-class MFReaderCallback
+class MFReaderCallback FINAL
     : public base::RefCountedThreadSafe<MFReaderCallback>,
       public IMFSourceReaderCallback {
  public:
diff --git a/media/video/capture/win/video_capture_device_win.cc b/media/video/capture/win/video_capture_device_win.cc
index 2afb968..f56646b 100644
--- a/media/video/capture/win/video_capture_device_win.cc
+++ b/media/video/capture/win/video_capture_device_win.cc
@@ -4,6 +4,9 @@
 
 #include "media/video/capture/win/video_capture_device_win.h"
 
+#include <ks.h>
+#include <ksmedia.h>
+
 #include <algorithm>
 #include <list>
 
@@ -591,6 +594,8 @@
     }
   }
 
+  SetAntiFlickerInCaptureFilter();
+
   if (format.pixel_format == PIXEL_FORMAT_MJPEG && mjpg_filter_.get()) {
     // Connect the camera to the MJPEG decoder.
     hr = graph_builder_->ConnectDirect(output_capture_pin_, input_mjpg_pin_,
@@ -749,6 +754,36 @@
   return !capabilities_.empty();
 }
 
+// Set the power line frequency removal in |capture_filter_| if available.
+void VideoCaptureDeviceWin::SetAntiFlickerInCaptureFilter() {
+  const int power_line_frequency = GetPowerLineFrequencyForLocation();
+  if (power_line_frequency != kPowerLine50Hz &&
+      power_line_frequency != kPowerLine60Hz) {
+    return;
+  }
+  ScopedComPtr<IKsPropertySet> ks_propset;
+  DWORD type_support = 0;
+  HRESULT hr;
+  if (SUCCEEDED(hr = ks_propset.QueryFrom(capture_filter_)) &&
+      SUCCEEDED(hr = ks_propset->QuerySupported(PROPSETID_VIDCAP_VIDEOPROCAMP,
+          KSPROPERTY_VIDEOPROCAMP_POWERLINE_FREQUENCY, &type_support)) &&
+      (type_support & KSPROPERTY_SUPPORT_SET)) {
+    KSPROPERTY_VIDEOPROCAMP_S data = {};
+    data.Property.Set = PROPSETID_VIDCAP_VIDEOPROCAMP;
+    data.Property.Id = KSPROPERTY_VIDEOPROCAMP_POWERLINE_FREQUENCY;
+    data.Property.Flags = KSPROPERTY_TYPE_SET;
+    data.Value = (power_line_frequency == kPowerLine50Hz) ? 1 : 2;
+    data.Flags = KSPROPERTY_VIDEOPROCAMP_FLAGS_MANUAL;
+    hr = ks_propset->Set(PROPSETID_VIDCAP_VIDEOPROCAMP,
+                         KSPROPERTY_VIDEOPROCAMP_POWERLINE_FREQUENCY,
+                         &data, sizeof(data), &data, sizeof(data));
+    DVLOG_IF(ERROR, FAILED(hr)) << "Anti-flicker setting failed.";
+    DVLOG_IF(2, SUCCEEDED(hr)) << "Anti-flicker set correctly.";
+  } else {
+    DVLOG(2) << "Anti-flicker setting not supported.";
+  }
+}
+
 void VideoCaptureDeviceWin::SetErrorState(const std::string& reason) {
   DCHECK(CalledOnValidThread());
   DVLOG(1) << reason;
diff --git a/media/video/capture/win/video_capture_device_win.h b/media/video/capture/win/video_capture_device_win.h
index 03b5d4c..ac4b704 100644
--- a/media/video/capture/win/video_capture_device_win.h
+++ b/media/video/capture/win/video_capture_device_win.h
@@ -40,9 +40,9 @@
   bool Init();
 
   // VideoCaptureDevice implementation.
-  virtual void AllocateAndStart(const VideoCaptureParams& params,
-                                scoped_ptr<VideoCaptureDevice::Client> client)
-      OVERRIDE;
+  virtual void AllocateAndStart(
+      const VideoCaptureParams& params,
+      scoped_ptr<VideoCaptureDevice::Client> client) OVERRIDE;
   virtual void StopAndDeAllocate() OVERRIDE;
 
   static void GetDeviceNames(Names* device_names);
@@ -61,6 +61,7 @@
   virtual void FrameReceived(const uint8* buffer, int length);
 
   bool CreateCapabilityMap();
+  void SetAntiFlickerInCaptureFilter();
   void SetErrorState(const std::string& reason);
 
   Name device_name_;
diff --git a/mojo/android/DEPS b/mojo/android/DEPS
new file mode 100644
index 0000000..c80012b
--- /dev/null
+++ b/mojo/android/DEPS
@@ -0,0 +1,3 @@
+include_rules = [
+  "+jni",
+]
diff --git a/mojo/android/javatests/AndroidManifest.xml b/mojo/android/javatests/AndroidManifest.xml
new file mode 100644
index 0000000..8968941
--- /dev/null
+++ b/mojo/android/javatests/AndroidManifest.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+  <!-- Copyright (c) 2012 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. -->
+  <!-- package name must be unique so suffix with "tests" so package loader
+       doesn't ignore this. -->
+  <manifest xmlns:android="http://schemas.android.com/apk/res/android"
+      package="org.chromium.mojo.tests">
+    <!-- We add an application tag here just so that we can indicate that this
+         package needs to link against the android.test library, which is
+         needed when building test cases. -->
+    <application>
+        <uses-library android:name="android.test.runner" />
+    </application>
+    <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" />
+    <instrumentation android:name="android.test.InstrumentationTestRunner"
+        android:targetPackage="org.chromium.mojo.tests"
+        android:label="Tests for org.chromium.mojo"/>
+    <uses-permission android:name="android.permission.RUN_INSTRUMENTATION" />
+    <uses-permission android:name="android.permission.INJECT_EVENTS" />
+</manifest>
diff --git a/mojo/public/tools/bindings/pylib/generate/__init__.py b/mojo/android/javatests/apk/EMPTY
similarity index 100%
copy from mojo/public/tools/bindings/pylib/generate/__init__.py
copy to mojo/android/javatests/apk/EMPTY
diff --git a/mojo/android/javatests/core_test.cc b/mojo/android/javatests/core_test.cc
new file mode 100644
index 0000000..3d4032f
--- /dev/null
+++ b/mojo/android/javatests/core_test.cc
@@ -0,0 +1,26 @@
+// 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.
+
+#include "mojo/android/javatests/core_test.h"
+
+#include "base/android/jni_android.h"
+#include "base/android/scoped_java_ref.h"
+#include "jni/CoreTest_jni.h"
+
+namespace mojo {
+namespace android {
+
+static void InitApplicationContext(JNIEnv* env,
+                                   jobject jcaller,
+                                   jobject context) {
+  base::android::ScopedJavaLocalRef<jobject> scoped_context(env, context);
+  base::android::InitApplicationContext(env, scoped_context);
+}
+
+bool RegisterCoreTest(JNIEnv* env) {
+  return RegisterNativesImpl(env);
+}
+
+}  // namespace android
+}  // namespace mojo
diff --git a/mojo/android/javatests/core_test.h b/mojo/android/javatests/core_test.h
new file mode 100644
index 0000000..96c8878
--- /dev/null
+++ b/mojo/android/javatests/core_test.h
@@ -0,0 +1,20 @@
+// 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.
+
+#ifndef MOJO_ANDROID_JAVATESTS_CORE_TEST_H_
+#define MOJO_ANDROID_JAVATESTS_CORE_TEST_H_
+
+#include <jni.h>
+
+#include "base/android/jni_android.h"
+
+namespace mojo {
+namespace android {
+
+JNI_EXPORT bool RegisterCoreTest(JNIEnv* env);
+
+}  // namespace android
+}  // namespace mojo
+
+#endif  // MOJO_SYSTEM_ANDROID_JAVATESTS_CORE_TEST_H_
diff --git a/mojo/android/javatests/init_library.cc b/mojo/android/javatests/init_library.cc
new file mode 100644
index 0000000..7b4cbe3
--- /dev/null
+++ b/mojo/android/javatests/init_library.cc
@@ -0,0 +1,40 @@
+// 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.
+
+#include "base/android/base_jni_registrar.h"
+#include "base/android/jni_android.h"
+#include "base/android/jni_registrar.h"
+#include "base/android/library_loader/library_loader_hooks.h"
+#include "mojo/android/javatests/core_test.h"
+#include "mojo/android/system/core_impl.h"
+
+namespace {
+
+base::android::RegistrationMethod kMojoRegisteredMethods[] = {
+  { "CoreImpl", mojo::android::RegisterCoreImpl },
+  { "CoreTest", mojo::android::RegisterCoreTest },
+};
+
+bool RegisterMojoJni(JNIEnv* env) {
+  return RegisterNativeMethods(env, kMojoRegisteredMethods,
+                               arraysize(kMojoRegisteredMethods));
+}
+
+}  // namespace
+
+JNI_EXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) {
+  base::android::InitVM(vm);
+  JNIEnv* env = base::android::AttachCurrentThread();
+
+  if (!base::android::RegisterLibraryLoaderEntryHook(env))
+    return -1;
+
+  if (!base::android::RegisterJni(env))
+    return -1;
+
+  if (!RegisterMojoJni(env))
+    return -1;
+
+  return JNI_VERSION_1_4;
+}
diff --git a/mojo/android/javatests/src/org/chromium/mojo/system/CoreTest.java b/mojo/android/javatests/src/org/chromium/mojo/system/CoreTest.java
new file mode 100644
index 0000000..97f0912
--- /dev/null
+++ b/mojo/android/javatests/src/org/chromium/mojo/system/CoreTest.java
@@ -0,0 +1,471 @@
+// 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.
+
+package org.chromium.mojo.system;
+
+import android.content.Context;
+import android.test.InstrumentationTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import org.chromium.base.JNINamespace;
+import org.chromium.base.library_loader.LibraryLoader;
+import org.chromium.mojo.system.Core.WaitFlags;
+import org.chromium.mojo.system.Core.WaitManyResult;
+import org.chromium.mojo.system.MessagePipeHandle.ReadFlags;
+import org.chromium.mojo.system.MessagePipeHandle.ReadMessageResult;
+import org.chromium.mojo.system.MessagePipeHandle.WriteFlags;
+import org.chromium.mojo.system.SharedBufferHandle.MapFlags;
+
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Random;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Testing the core API.
+ */
+@JNINamespace("mojo::android")
+public class CoreTest extends InstrumentationTestCase {
+
+    private static final ScheduledExecutorService WORKER =
+            Executors.newSingleThreadScheduledExecutor();
+
+    /**
+     * @see junit.framework.TestCase#setUp()
+     */
+    @Override
+    protected void setUp() throws Exception {
+        LibraryLoader.ensureInitialized();
+        nativeInitApplicationContext(getInstrumentation().getTargetContext());
+    }
+
+    /**
+     * Runnable that will close the given handle.
+     */
+    private static class CloseHandle implements Runnable {
+        private Handle mHandle;
+
+        CloseHandle(Handle handle) {
+            mHandle = handle;
+        }
+
+        @Override
+        public void run() {
+            mHandle.close();
+        }
+    }
+
+    private static void checkSendingMessage(MessagePipeHandle in, MessagePipeHandle out) {
+        Random random = new Random();
+
+        // Writing a random 8 bytes message.
+        byte[] bytes = new byte[8];
+        random.nextBytes(bytes);
+        ByteBuffer buffer = ByteBuffer.allocateDirect(bytes.length);
+        buffer.put(bytes);
+        in.writeMessage(buffer, null, MessagePipeHandle.WriteFlags.none());
+
+        // Try to read into a small buffer.
+        ByteBuffer receiveBuffer = ByteBuffer.allocateDirect(bytes.length / 2);
+        MessagePipeHandle.ReadMessageResult result = out.readMessage(receiveBuffer, 0,
+                MessagePipeHandle.ReadFlags.none());
+        assertFalse(result.getWasMessageRead());
+        assertEquals(bytes.length, result.getMessageSize());
+        assertEquals(0, result.getHandlesCount());
+
+        // Read into a correct buffer.
+        receiveBuffer = ByteBuffer.allocateDirect(bytes.length);
+        result = out.readMessage(receiveBuffer, 0,
+                MessagePipeHandle.ReadFlags.none());
+        assertTrue(result.getWasMessageRead());
+        assertEquals(bytes.length, result.getMessageSize());
+        assertEquals(0, result.getHandlesCount());
+        assertEquals(0, receiveBuffer.position());
+        assertEquals(result.getMessageSize(), receiveBuffer.limit());
+        byte[] receivedBytes = new byte[result.getMessageSize()];
+        receiveBuffer.get(receivedBytes);
+        assertTrue(Arrays.equals(bytes, receivedBytes));
+
+    }
+
+    /**
+     * Testing {@link Core#waitMany(List, long)}.
+     */
+    @SmallTest
+    public void testWaitMany() {
+        Core core = CoreSingleton.getInstance();
+        Pair<MessagePipeHandle, MessagePipeHandle> handles = core.createMessagePipe();
+
+        try {
+            List<Pair<Handle, WaitFlags>> handlesToWaitOn = new ArrayList<
+                    Pair<Handle, WaitFlags>>();
+
+            handlesToWaitOn.add(
+                    new Pair<Handle, WaitFlags>(handles.second,
+                            WaitFlags.none().setReadable(true)));
+            handlesToWaitOn.add(
+                    new Pair<Handle, WaitFlags>(handles.first, WaitFlags.none().setWritable(true)));
+            WaitManyResult result = core.waitMany(handlesToWaitOn, 0);
+            assertEquals(MojoResult.OK, result.getMojoResult());
+            assertEquals(1, result.getHandleIndex());
+
+            handlesToWaitOn.clear();
+            handlesToWaitOn.add(
+                    new Pair<Handle, WaitFlags>(handles.first, WaitFlags.none().setWritable(true)));
+            handlesToWaitOn.add(
+                    new Pair<Handle, WaitFlags>(handles.second,
+                            WaitFlags.none().setReadable(true)));
+            result = core.waitMany(handlesToWaitOn, 0);
+            assertEquals(MojoResult.OK, result.getMojoResult());
+            assertEquals(0, result.getHandleIndex());
+        } finally {
+            handles.first.close();
+            handles.second.close();
+        }
+    }
+
+    /**
+     * Testing {@link MessagePipeHandle}.
+     */
+    @SmallTest
+    public void testMessagePipeEmpty() {
+        Core core = CoreSingleton.getInstance();
+        Pair<MessagePipeHandle, MessagePipeHandle> handles = core.createMessagePipe();
+
+        try {
+            // Testing wait.
+            assertEquals(MojoResult.OK, handles.first.wait(WaitFlags.all(), 0));
+            assertEquals(MojoResult.OK, handles.first.wait(WaitFlags.none().setWritable(true), 0));
+            assertEquals(MojoResult.DEADLINE_EXCEEDED,
+                    handles.first.wait(WaitFlags.none().setReadable(true), 0));
+
+            // Testing read on an empty pipe.
+            boolean exception = false;
+            try {
+                handles.first.readMessage(null, 0, MessagePipeHandle.ReadFlags.none());
+            } catch (MojoException e) {
+                assertEquals(MojoResult.SHOULD_WAIT, e.getMojoResult());
+                exception = true;
+            }
+            assertTrue(exception);
+
+            // Closing a pipe while waiting.
+            WORKER.schedule(new CloseHandle(handles.first), 10, TimeUnit.MILLISECONDS);
+            assertEquals(MojoResult.CANCELLED,
+                    handles.first.wait(WaitFlags.none().setReadable(true), 1000000L));
+        } finally {
+            handles.first.close();
+            handles.second.close();
+        }
+
+        handles = core.createMessagePipe();
+
+        try {
+            // Closing the other pipe while waiting.
+            WORKER.schedule(new CloseHandle(handles.first), 10, TimeUnit.MILLISECONDS);
+            assertEquals(MojoResult.FAILED_PRECONDITION,
+                    handles.second.wait(WaitFlags.none().setReadable(true), 1000000L));
+
+            // Waiting on a closed pipe.
+            assertEquals(MojoResult.FAILED_PRECONDITION,
+                    handles.second.wait(WaitFlags.none().setReadable(true), 0));
+            assertEquals(MojoResult.FAILED_PRECONDITION,
+                    handles.second.wait(WaitFlags.none().setWritable(true), 0));
+        } finally {
+            handles.first.close();
+            handles.second.close();
+        }
+
+    }
+
+    /**
+     * Testing {@link MessagePipeHandle}.
+     */
+    @SmallTest
+    public void testMessagePipeSend() {
+        Core core = CoreSingleton.getInstance();
+        Pair<MessagePipeHandle, MessagePipeHandle> handles = core.createMessagePipe();
+
+        try {
+            checkSendingMessage(handles.first, handles.second);
+            checkSendingMessage(handles.second, handles.first);
+        } finally {
+            handles.first.close();
+            handles.second.close();
+        }
+    }
+
+    /**
+     * Testing {@link MessagePipeHandle}.
+     */
+    @SmallTest
+    public void testMessagePipeReceiveOnSmallBuffer() {
+        Random random = new Random();
+        Core core = CoreSingleton.getInstance();
+        Pair<MessagePipeHandle, MessagePipeHandle> handles = core.createMessagePipe();
+
+        try {
+            // Writing a random 8 bytes message.
+            byte[] bytes = new byte[8];
+            random.nextBytes(bytes);
+            ByteBuffer buffer = ByteBuffer.allocateDirect(bytes.length);
+            buffer.put(bytes);
+            handles.first.writeMessage(buffer, null, MessagePipeHandle.WriteFlags.none());
+
+            ByteBuffer receiveBuffer = ByteBuffer.allocateDirect(1);
+            MessagePipeHandle.ReadMessageResult result = handles.second.readMessage(receiveBuffer,
+                    0,
+                    MessagePipeHandle.ReadFlags.none());
+            assertFalse(result.getWasMessageRead());
+            assertEquals(bytes.length, result.getMessageSize());
+            assertEquals(0, result.getHandlesCount());
+        } finally {
+            handles.first.close();
+            handles.second.close();
+        }
+    }
+
+    /**
+     * Testing {@link MessagePipeHandle}.
+     */
+    @SmallTest
+    public void testMessagePipeSendHandles() {
+        Core core = CoreSingleton.getInstance();
+        Pair<MessagePipeHandle, MessagePipeHandle> handles = core.createMessagePipe();
+        Pair<MessagePipeHandle, MessagePipeHandle> handlesToShare = core.createMessagePipe();
+
+        try {
+            handles.first.writeMessage(null,
+                    Collections.<Handle> singletonList(handlesToShare.second),
+                    WriteFlags.none());
+            assertFalse(handlesToShare.second.isValid());
+            ReadMessageResult readMessageResult = handles.second.readMessage(null, 1,
+                    ReadFlags.none());
+            assertEquals(1, readMessageResult.getHandlesCount());
+            MessagePipeHandle newHandle = readMessageResult.getHandles().get(0)
+                    .toMessagePipeHandle();
+            try {
+                assertTrue(newHandle.isValid());
+                checkSendingMessage(handlesToShare.first, newHandle);
+                checkSendingMessage(newHandle, handlesToShare.first);
+            } finally {
+                newHandle.close();
+            }
+        } finally {
+            handles.first.close();
+            handles.second.close();
+            handlesToShare.first.close();
+            handlesToShare.second.close();
+        }
+    }
+
+    private static void createAndCloseDataPipe(DataPipe.CreateOptions options) {
+        Core core = CoreSingleton.getInstance();
+        Pair<DataPipe.ProducerHandle, DataPipe.ConsumerHandle> handles = core.createDataPipe(
+                options);
+        handles.first.close();
+        handles.second.close();
+    }
+
+    /**
+     * Testing {@link DataPipe}.
+     */
+    @SmallTest
+    public void testDataPipeCreation() {
+        // Create datapipe with null options.
+        createAndCloseDataPipe(null);
+        DataPipe.CreateOptions options = new DataPipe.CreateOptions();
+        // Create datapipe with element size set.
+        options.setElementNumBytes(24);
+        createAndCloseDataPipe(options);
+        // Create datapipe with a flag set.
+        options.getFlags().setMayDiscard(true);
+        createAndCloseDataPipe(options);
+        // Create datapipe with capacity set.
+        options.setCapacityNumBytes(1024 * options.getElementNumBytes());
+        createAndCloseDataPipe(options);
+    }
+
+    /**
+     * Testing {@link DataPipe}.
+     */
+    @SmallTest
+    public void testDataPipeSend() {
+        Core core = CoreSingleton.getInstance();
+        Random random = new Random();
+
+        Pair<DataPipe.ProducerHandle, DataPipe.ConsumerHandle> handles = core.createDataPipe(null);
+        try {
+            // Writing a random 8 bytes message.
+            byte[] bytes = new byte[8];
+            random.nextBytes(bytes);
+            ByteBuffer buffer = ByteBuffer.allocateDirect(bytes.length);
+            buffer.put(bytes);
+            int result = handles.first.writeData(buffer, DataPipe.WriteFlags.none());
+            assertEquals(bytes.length, result);
+
+            // Query number of bytes available.
+            result = handles.second.readData(null,
+                    DataPipe.ReadFlags.none().query(true));
+            assertEquals(bytes.length, result);
+
+            // Read into a buffer.
+            ByteBuffer receiveBuffer = ByteBuffer.allocateDirect(bytes.length);
+            result = handles.second.readData(receiveBuffer,
+                    DataPipe.ReadFlags.none());
+            assertEquals(bytes.length, result);
+            assertEquals(0, receiveBuffer.position());
+            assertEquals(bytes.length, receiveBuffer.limit());
+            byte[] receivedBytes = new byte[bytes.length];
+            receiveBuffer.get(receivedBytes);
+            assertTrue(Arrays.equals(bytes, receivedBytes));
+        } finally {
+            handles.first.close();
+            handles.second.close();
+        }
+    }
+
+    /**
+     * Testing {@link DataPipe}.
+     */
+    @SmallTest
+    public void testDataPipeTwoPhaseSend() {
+        Random random = new Random();
+        Core core = CoreSingleton.getInstance();
+        Pair<DataPipe.ProducerHandle, DataPipe.ConsumerHandle> handles = core.createDataPipe(null);
+
+        try {
+            // Writing a random 8 bytes message.
+            byte[] bytes = new byte[8];
+            random.nextBytes(bytes);
+            ByteBuffer buffer = handles.first.beginWriteData(bytes.length,
+                    DataPipe.WriteFlags.none());
+            assertTrue(buffer.capacity() >= bytes.length);
+            buffer.put(bytes);
+            handles.first.endWriteData(bytes.length);
+
+            // Read into a buffer.
+            ByteBuffer receiveBuffer = handles.second.beginReadData(bytes.length,
+                    DataPipe.ReadFlags.none());
+            assertEquals(0, receiveBuffer.position());
+            assertEquals(bytes.length, receiveBuffer.limit());
+            byte[] receivedBytes = new byte[bytes.length];
+            receiveBuffer.get(receivedBytes);
+            assertTrue(Arrays.equals(bytes, receivedBytes));
+            handles.second.endReadData(bytes.length);
+        } finally {
+            handles.first.close();
+            handles.second.close();
+        }
+    }
+
+    /**
+     * Testing {@link DataPipe}.
+     */
+    @SmallTest
+    public void testDataPipeDiscard() {
+        Random random = new Random();
+        Core core = CoreSingleton.getInstance();
+        Pair<DataPipe.ProducerHandle, DataPipe.ConsumerHandle> handles = core.createDataPipe(null);
+
+        try {
+            // Writing a random 8 bytes message.
+            byte[] bytes = new byte[8];
+            random.nextBytes(bytes);
+            ByteBuffer buffer = ByteBuffer.allocateDirect(bytes.length);
+            buffer.put(bytes);
+            int result = handles.first.writeData(buffer, DataPipe.WriteFlags.none());
+            assertEquals(bytes.length, result);
+
+            // Discard bytes.
+            final int nbBytesToDiscard = 4;
+            assertEquals(nbBytesToDiscard,
+                    handles.second.discardData(nbBytesToDiscard, DataPipe.ReadFlags.none()));
+
+            // Read into a buffer.
+            ByteBuffer receiveBuffer = ByteBuffer.allocateDirect(bytes.length - nbBytesToDiscard);
+            result = handles.second.readData(receiveBuffer,
+                    DataPipe.ReadFlags.none());
+            assertEquals(bytes.length - nbBytesToDiscard, result);
+            assertEquals(0, receiveBuffer.position());
+            assertEquals(bytes.length - nbBytesToDiscard, receiveBuffer.limit());
+            byte[] receivedBytes = new byte[bytes.length - nbBytesToDiscard];
+            receiveBuffer.get(receivedBytes);
+            assertTrue(Arrays.equals(Arrays.copyOfRange(bytes, nbBytesToDiscard, bytes.length),
+                    receivedBytes));
+        } finally {
+            handles.first.close();
+            handles.second.close();
+        }
+    }
+
+    /**
+     * Testing {@link SharedBufferHandle}.
+     */
+    @SmallTest
+    public void testSharedBufferCreation() {
+        Core core = CoreSingleton.getInstance();
+        // Test creation with empty options.
+        core.createSharedBuffer(null, 8).close();
+        // Test creation with default options.
+        core.createSharedBuffer(new SharedBufferHandle.CreateOptions(), 8);
+    }
+
+    /**
+     * Testing {@link SharedBufferHandle}.
+     */
+    @SmallTest
+    public void testSharedBufferDuplication() {
+        Core core = CoreSingleton.getInstance();
+        SharedBufferHandle handle = core.createSharedBuffer(null, 8);
+        try {
+            // Test duplication with empty options.
+            handle.duplicate(null).close();
+            // Test creation with default options.
+            handle.duplicate(new SharedBufferHandle.DuplicateOptions()).close();
+        } finally {
+            handle.close();
+        }
+    }
+
+    /**
+     * Testing {@link SharedBufferHandle}.
+     */
+    @SmallTest
+    public void testSharedBufferSending() {
+        Random random = new Random();
+        Core core = CoreSingleton.getInstance();
+        SharedBufferHandle handle = core.createSharedBuffer(null, 8);
+        SharedBufferHandle newHandle = handle.duplicate(null);
+
+        try {
+            ByteBuffer buffer1 = handle.map(0, 8, MapFlags.none());
+            assertEquals(8, buffer1.capacity());
+            ByteBuffer buffer2 = newHandle.map(0, 8, MapFlags.none());
+            assertEquals(8, buffer2.capacity());
+
+            byte[] bytes = new byte[8];
+            random.nextBytes(bytes);
+            buffer1.put(bytes);
+
+            byte[] receivedBytes = new byte[bytes.length];
+            buffer2.get(receivedBytes);
+
+            assertTrue(Arrays.equals(bytes, receivedBytes));
+
+            handle.unmap(buffer1);
+            newHandle.unmap(buffer2);
+        } finally {
+            handle.close();
+            newHandle.close();
+        }
+    }
+
+    private native void nativeInitApplicationContext(Context context);
+}
diff --git a/mojo/android/system/core_impl.cc b/mojo/android/system/core_impl.cc
new file mode 100644
index 0000000..d7552c1
--- /dev/null
+++ b/mojo/android/system/core_impl.cc
@@ -0,0 +1,293 @@
+// 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.
+
+#include "mojo/android/system/core_impl.h"
+
+#include "base/android/base_jni_registrar.h"
+#include "base/android/jni_android.h"
+#include "base/android/jni_registrar.h"
+#include "base/android/library_loader/library_loader_hooks.h"
+#include "base/logging.h"
+#include "jni/CoreImpl_jni.h"
+#include "mojo/embedder/embedder.h"
+#include "mojo/public/c/system/core.h"
+
+namespace mojo {
+namespace android {
+
+static void Constructor(JNIEnv* env, jobject jcaller) {
+  mojo::embedder::Init();
+}
+
+static jlong GetTimeTicksNow(JNIEnv* env, jobject jcaller) {
+  return MojoGetTimeTicksNow();
+}
+
+static jint WaitMany(JNIEnv* env,
+                     jobject jcaller,
+                     jobject buffer,
+                     jlong deadline) {
+  // Buffer contains first the list of handles, then the list of flags.
+  const void* buffer_start = env->GetDirectBufferAddress(buffer);
+  DCHECK(buffer_start);
+  const size_t record_size = 8;
+  const size_t buffer_size = env->GetDirectBufferCapacity(buffer);
+  DCHECK_EQ(buffer_size % record_size, 0u);
+
+  const size_t nb_handles = buffer_size / record_size;
+  const MojoHandle* handle_start = static_cast<const MojoHandle*>(buffer_start);
+  const MojoWaitFlags* flags_start =
+      static_cast<const MojoWaitFlags*>(handle_start + nb_handles);
+  return MojoWaitMany(handle_start, flags_start, nb_handles, deadline);
+}
+
+static jobject CreateMessagePipe(JNIEnv* env, jobject jcaller) {
+  MojoHandle handle1;
+  MojoHandle handle2;
+  MojoResult result = MojoCreateMessagePipe(&handle1, &handle2);
+  return Java_CoreImpl_newNativeCreationResult(env, result, handle1, handle2)
+      .Release();
+}
+
+static jobject CreateDataPipe(JNIEnv* env,
+                              jobject jcaller,
+                              jobject options_buffer) {
+  const MojoCreateDataPipeOptions* options = NULL;
+  if (options_buffer) {
+    const void* buffer_start = env->GetDirectBufferAddress(options_buffer);
+    DCHECK(buffer_start);
+    const size_t buffer_size = env->GetDirectBufferCapacity(options_buffer);
+    DCHECK_EQ(buffer_size, sizeof(MojoCreateDataPipeOptions));
+    options = static_cast<const MojoCreateDataPipeOptions*>(buffer_start);
+    DCHECK_EQ(options->struct_size, buffer_size);
+  }
+  MojoHandle handle1;
+  MojoHandle handle2;
+  MojoResult result = MojoCreateDataPipe(options, &handle1, &handle2);
+  return Java_CoreImpl_newNativeCreationResult(env, result, handle1, handle2)
+      .Release();
+}
+
+static jobject CreateSharedBuffer(JNIEnv* env,
+                                  jobject jcaller,
+                                  jobject options_buffer,
+                                  jlong num_bytes) {
+  const MojoCreateSharedBufferOptions* options = 0;
+  if (options_buffer) {
+    const void* buffer_start = env->GetDirectBufferAddress(options_buffer);
+    DCHECK(buffer_start);
+    const size_t buffer_size = env->GetDirectBufferCapacity(options_buffer);
+    DCHECK_EQ(buffer_size, sizeof(MojoCreateSharedBufferOptions));
+    options = static_cast<const MojoCreateSharedBufferOptions*>(buffer_start);
+    DCHECK_EQ(options->struct_size, buffer_size);
+  }
+  MojoHandle handle;
+  MojoResult result = MojoCreateSharedBuffer(options, num_bytes, &handle);
+  return Java_CoreImpl_newNativeCreationResult(env, result, handle, 0)
+      .Release();
+}
+
+static jint Close(JNIEnv* env, jobject jcaller, jint mojo_handle) {
+  return MojoClose(mojo_handle);
+}
+
+static jint Wait(JNIEnv* env,
+                 jobject jcaller,
+                 jint mojo_handle,
+                 jint flags,
+                 jlong deadline) {
+  return MojoWait(mojo_handle, flags, deadline);
+}
+
+static jint WriteMessage(JNIEnv* env,
+                         jobject jcaller,
+                         jint mojo_handle,
+                         jobject bytes,
+                         jint num_bytes,
+                         jobject handles_buffer,
+                         jint flags) {
+  const void* buffer_start = 0;
+  uint32_t buffer_size = 0;
+  if (bytes) {
+    buffer_start = env->GetDirectBufferAddress(bytes);
+    DCHECK(buffer_start);
+    DCHECK(env->GetDirectBufferCapacity(bytes) >= num_bytes);
+    buffer_size = num_bytes;
+  }
+  const MojoHandle* handles = 0;
+  uint32_t num_handles = 0;
+  if (handles_buffer) {
+    handles =
+        static_cast<MojoHandle*>(env->GetDirectBufferAddress(handles_buffer));
+    num_handles = env->GetDirectBufferCapacity(handles_buffer) / 4;
+  }
+  // Java code will handle invalidating handles if the write succeeded.
+  return MojoWriteMessage(
+      mojo_handle, buffer_start, buffer_size, handles, num_handles, flags);
+}
+
+static jobject ReadMessage(JNIEnv* env,
+                           jobject jcaller,
+                           jint mojo_handle,
+                           jobject bytes,
+                           jobject handles_buffer,
+                           jint flags) {
+  void* buffer_start = 0;
+  uint32_t buffer_size = 0;
+  if (bytes) {
+    buffer_start = env->GetDirectBufferAddress(bytes);
+    DCHECK(buffer_start);
+    buffer_size = env->GetDirectBufferCapacity(bytes);
+  }
+  MojoHandle* handles = 0;
+  uint32_t num_handles = 0;
+  if (handles_buffer) {
+    handles =
+        static_cast<MojoHandle*>(env->GetDirectBufferAddress(handles_buffer));
+    num_handles = env->GetDirectBufferCapacity(handles_buffer) / 4;
+  }
+  MojoResult result = MojoReadMessage(
+      mojo_handle, buffer_start, &buffer_size, handles, &num_handles, flags);
+  // Jave code will handle taking ownership of any received handle.
+  return Java_CoreImpl_newNativeReadMessageResult(
+             env, result, buffer_size, num_handles).Release();
+}
+
+static jint ReadData(JNIEnv* env,
+                     jobject jcaller,
+                     jint mojo_handle,
+                     jobject elements,
+                     jint elements_capacity,
+                     jint flags) {
+  void* buffer_start = 0;
+  uint32_t buffer_size = elements_capacity;
+  if (elements) {
+    buffer_start = env->GetDirectBufferAddress(elements);
+    DCHECK(buffer_start);
+    DCHECK(elements_capacity <= env->GetDirectBufferCapacity(elements));
+  }
+  MojoResult result =
+      MojoReadData(mojo_handle, buffer_start, &buffer_size, flags);
+  if (result < 0) {
+    return result;
+  }
+  return buffer_size;
+}
+
+static jobject BeginReadData(JNIEnv* env,
+                             jobject jcaller,
+                             jint mojo_handle,
+                             jint num_bytes,
+                             jint flags) {
+  void const* buffer = 0;
+  uint32_t buffer_size = num_bytes;
+  MojoResult result =
+      MojoBeginReadData(mojo_handle, &buffer, &buffer_size, flags);
+  jobject byte_buffer = 0;
+  if (result == MOJO_RESULT_OK) {
+    byte_buffer =
+        env->NewDirectByteBuffer(const_cast<void*>(buffer), buffer_size);
+  }
+  return Java_CoreImpl_newNativeCodeAndBufferResult(env, result, byte_buffer)
+      .Release();
+}
+
+static jint EndReadData(JNIEnv* env,
+                        jobject jcaller,
+                        jint mojo_handle,
+                        jint num_bytes_read) {
+  return MojoEndReadData(mojo_handle, num_bytes_read);
+}
+
+static jint WriteData(JNIEnv* env,
+                      jobject jcaller,
+                      jint mojo_handle,
+                      jobject elements,
+                      jint limit,
+                      jint flags) {
+  void* buffer_start = env->GetDirectBufferAddress(elements);
+  DCHECK(buffer_start);
+  DCHECK(limit <= env->GetDirectBufferCapacity(elements));
+  uint32_t buffer_size = limit;
+  MojoResult result =
+      MojoWriteData(mojo_handle, buffer_start, &buffer_size, flags);
+  if (result < 0) {
+    return result;
+  }
+  return buffer_size;
+}
+
+static jobject BeginWriteData(JNIEnv* env,
+                              jobject jcaller,
+                              jint mojo_handle,
+                              jint num_bytes,
+                              jint flags) {
+  void* buffer = 0;
+  uint32_t buffer_size = num_bytes;
+  MojoResult result =
+      MojoBeginWriteData(mojo_handle, &buffer, &buffer_size, flags);
+  jobject byte_buffer = 0;
+  if (result == MOJO_RESULT_OK) {
+    byte_buffer = env->NewDirectByteBuffer(buffer, buffer_size);
+  }
+  return Java_CoreImpl_newNativeCodeAndBufferResult(env, result, byte_buffer)
+      .Release();
+}
+
+static jint EndWriteData(JNIEnv* env,
+                         jobject jcaller,
+                         jint mojo_handle,
+                         jint num_bytes_written) {
+  return MojoEndWriteData(mojo_handle, num_bytes_written);
+}
+
+static jobject Duplicate(JNIEnv* env,
+                         jobject jcaller,
+                         jint mojo_handle,
+                         jobject options_buffer) {
+  const MojoDuplicateBufferHandleOptions* options = 0;
+  if (options_buffer) {
+    const void* buffer_start = env->GetDirectBufferAddress(options_buffer);
+    DCHECK(buffer_start);
+    const size_t buffer_size = env->GetDirectBufferCapacity(options_buffer);
+    DCHECK_EQ(buffer_size, sizeof(MojoDuplicateBufferHandleOptions));
+    options =
+        static_cast<const MojoDuplicateBufferHandleOptions*>(buffer_start);
+    DCHECK_EQ(options->struct_size, buffer_size);
+  }
+  MojoHandle handle;
+  MojoResult result = MojoDuplicateBufferHandle(mojo_handle, options, &handle);
+  return Java_CoreImpl_newNativeCreationResult(env, result, handle, 0)
+      .Release();
+}
+
+static jobject Map(JNIEnv* env,
+                   jobject jcaller,
+                   jint mojo_handle,
+                   jlong offset,
+                   jlong num_bytes,
+                   jint flags) {
+  void* buffer = 0;
+  MojoResult result =
+      MojoMapBuffer(mojo_handle, offset, num_bytes, &buffer, flags);
+  jobject byte_buffer = 0;
+  if (result == MOJO_RESULT_OK) {
+    byte_buffer = env->NewDirectByteBuffer(buffer, num_bytes);
+  }
+  return Java_CoreImpl_newNativeCodeAndBufferResult(env, result, byte_buffer)
+      .Release();
+}
+
+static int Unmap(JNIEnv* env, jobject jcaller, jobject buffer) {
+  void* buffer_start = env->GetDirectBufferAddress(buffer);
+  DCHECK(buffer_start);
+  return MojoUnmapBuffer(buffer_start);
+}
+
+bool RegisterCoreImpl(JNIEnv* env) {
+  return RegisterNativesImpl(env);
+}
+
+}  // namespace android
+}  // namespace mojo
diff --git a/mojo/android/system/core_impl.h b/mojo/android/system/core_impl.h
new file mode 100644
index 0000000..c624999
--- /dev/null
+++ b/mojo/android/system/core_impl.h
@@ -0,0 +1,20 @@
+// 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.
+
+#ifndef MOJO_ANDROID_SYSTEM_CORE_IMPL_H_
+#define MOJO_ANDROID_SYSTEM_CORE_IMPL_H_
+
+#include <jni.h>
+
+#include "base/android/jni_android.h"
+
+namespace mojo {
+namespace android {
+
+JNI_EXPORT bool RegisterCoreImpl(JNIEnv* env);
+
+}  // namespace android
+}  // namespace mojo
+
+#endif  // MOJO_ANDROID_SYSTEM_CORE_IMPL_H_
diff --git a/mojo/android/system/src/org/chromium/mojo/system/CoreImpl.java b/mojo/android/system/src/org/chromium/mojo/system/CoreImpl.java
new file mode 100644
index 0000000..1d8e56b
--- /dev/null
+++ b/mojo/android/system/src/org/chromium/mojo/system/CoreImpl.java
@@ -0,0 +1,584 @@
+// 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.
+
+package org.chromium.mojo.system;
+
+import org.chromium.base.CalledByNative;
+import org.chromium.base.JNINamespace;
+import org.chromium.mojo.system.DataPipe.ConsumerHandle;
+import org.chromium.mojo.system.DataPipe.ProducerHandle;
+import org.chromium.mojo.system.SharedBufferHandle.DuplicateOptions;
+import org.chromium.mojo.system.SharedBufferHandle.MapFlags;
+
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Implementation of {@link Core}.
+ */
+@JNINamespace("mojo::android")
+class CoreImpl implements Core {
+
+    /**
+     * Discard flag for the |MojoReadData| operation.
+     */
+    private static final int MOJO_READ_DATA_FLAG_DISCARD = 1 << 1;
+
+    /**
+     * the size of a handle, in bytes.
+     */
+    private static final int HANDLE_SIZE = 4;
+
+    /**
+     * the size of a flag, in bytes.
+     */
+    private static final int FLAG_SIZE = 4;
+
+    /**
+     * The singleton instance.
+     */
+    private static Core sINSTANCE = null;
+
+    /**
+     * @return the instance.
+     */
+    static synchronized Core getInstance() {
+        if (sINSTANCE == null) {
+            sINSTANCE = new CoreImpl();
+        }
+        return sINSTANCE;
+    }
+
+    private CoreImpl() {
+        nativeConstructor();
+    }
+
+    /**
+     * @see Core#getTimeTicksNow()
+     */
+    @Override
+    public long getTimeTicksNow() {
+        return nativeGetTimeTicksNow();
+    }
+
+    /**
+     * @see Core#waitMany(List, long)
+     */
+    @Override
+    public WaitManyResult waitMany(List<Pair<Handle, WaitFlags>> handles, long deadline) {
+        // Allocate a direct buffer to allow native code not to reach back to java. Buffer will
+        // contain all mojo handles, followed by all flags values.
+        ByteBuffer buffer = allocateDirectBuffer(handles.size() * 8);
+        int index = 0;
+        for (Pair<Handle, WaitFlags> handle : handles) {
+            HandleImpl realHandler = (HandleImpl) handle.first;
+            buffer.putInt(HANDLE_SIZE * index, realHandler.getMojoHandle());
+            buffer.putInt(HANDLE_SIZE * handles.size() + FLAG_SIZE * index,
+                    handle.second.getFlags());
+            index++;
+        }
+        int code = nativeWaitMany(buffer, deadline);
+        WaitManyResult result = new WaitManyResult();
+        // If result is greater than 0, result is the indexed of the available handle. To make sure
+        // it cannot be misinterpreted, set handleIndex to a negative number in case of error.
+        result.setHandleIndex(code);
+        result.setMojoResult(filterMojoResultForWait(code));
+        return result;
+    }
+
+    /**
+     * @see Core#wait(Handle, WaitFlags, long)
+     */
+    @Override
+    public int wait(Handle handle, WaitFlags flags, long deadline) {
+        return filterMojoResultForWait(nativeWait(((HandleImpl) handle).getMojoHandle(),
+                flags.getFlags(), deadline));
+    }
+
+    /**
+     * @see Core#createMessagePipe()
+     */
+    @Override
+    public Pair<MessagePipeHandle, MessagePipeHandle> createMessagePipe() {
+        NativeCreationResult result = nativeCreateMessagePipe();
+        if (result.getMojoResult() != MojoResult.OK) {
+            throw new MojoException(result.getMojoResult());
+        }
+        return Pair.create(
+                new MessagePipeHandleImpl(this, result.getMojoHandle1()),
+                new MessagePipeHandleImpl(this, result.getMojoHandle2()));
+    }
+
+    /**
+     * @see Core#createDataPipe(DataPipe.CreateOptions)
+     */
+    @Override
+    public Pair<ProducerHandle, ConsumerHandle> createDataPipe(DataPipe.CreateOptions options) {
+        ByteBuffer optionsBuffer = null;
+        if (options != null) {
+            optionsBuffer = allocateDirectBuffer(16);
+            optionsBuffer.putInt(0, 16);
+            optionsBuffer.putInt(4, options.getFlags().getFlags());
+            optionsBuffer.putInt(8, options.getElementNumBytes());
+            optionsBuffer.putInt(12, options.getCapacityNumBytes());
+        }
+        NativeCreationResult result = nativeCreateDataPipe(optionsBuffer);
+        if (result.getMojoResult() != MojoResult.OK) {
+            throw new MojoException(result.getMojoResult());
+        }
+        return Pair.create(
+                new DataPipeProducerHandleImpl(this, result.getMojoHandle1()),
+                new DataPipeConsumerHandleImpl(this, result.getMojoHandle2()));
+    }
+
+    /**
+     * @see Core#createSharedBuffer(SharedBufferHandle.CreateOptions, long)
+     */
+    @Override
+    public SharedBufferHandle createSharedBuffer(
+            SharedBufferHandle.CreateOptions options, long numBytes) {
+        ByteBuffer optionsBuffer = null;
+        if (options != null) {
+            optionsBuffer = allocateDirectBuffer(8);
+            optionsBuffer.putInt(0, 8);
+            optionsBuffer.putInt(4, options.getFlags().getFlags());
+        }
+        NativeCreationResult result = nativeCreateSharedBuffer(optionsBuffer, numBytes);
+        if (result.getMojoResult() != MojoResult.OK) {
+            throw new MojoException(result.getMojoResult());
+        }
+        assert result.getMojoHandle2() == 0;
+        return new SharedBufferHandleImpl(this, result.getMojoHandle1());
+    }
+
+    int closeWithResult(int mojoHandle) {
+        return nativeClose(mojoHandle);
+    }
+
+    void close(int mojoHandle) {
+        int mojoResult = nativeClose(mojoHandle);
+        if (mojoResult != MojoResult.OK) {
+            throw new MojoException(mojoResult);
+        }
+    }
+
+    /**
+     * @see MessagePipeHandle#writeMessage(ByteBuffer, List, MessagePipeHandle.WriteFlags)
+     */
+    void writeMessage(MessagePipeHandleImpl pipeHandle, ByteBuffer bytes,
+            List<Handle> handles, MessagePipeHandle.WriteFlags flags) {
+        ByteBuffer handlesBuffer = null;
+        if (handles != null && !handles.isEmpty()) {
+            handlesBuffer = allocateDirectBuffer(handles.size() * HANDLE_SIZE);
+            for (Handle handle : handles) {
+                HandleImpl realHandle = (HandleImpl) handle;
+                handlesBuffer.putInt(realHandle.getMojoHandle());
+            }
+            handlesBuffer.position(0);
+        }
+        int mojoResult = nativeWriteMessage(pipeHandle.getMojoHandle(), bytes,
+                bytes == null ? 0 : bytes.limit(), handlesBuffer,
+                flags.getFlags());
+        if (mojoResult != MojoResult.OK) {
+            throw new MojoException(mojoResult);
+        }
+        // Success means the handles have been invalidated.
+        if (handles != null) {
+            for (Handle handle : handles) {
+                ((HandleImpl) handle).invalidateHandle();
+            }
+        }
+    }
+
+    /**
+     * @see MessagePipeHandle#readMessage(ByteBuffer, int, MessagePipeHandle.ReadFlags)
+     */
+    MessagePipeHandle.ReadMessageResult readMessage(MessagePipeHandleImpl handle,
+            ByteBuffer bytes, int maxNumberOfHandles,
+            MessagePipeHandle.ReadFlags flags) {
+        ByteBuffer handlesBuffer = null;
+        if (maxNumberOfHandles > 0) {
+            handlesBuffer = allocateDirectBuffer(maxNumberOfHandles * HANDLE_SIZE);
+        }
+        NativeReadMessageResult result = nativeReadMessage(
+                handle.getMojoHandle(), bytes, handlesBuffer, flags.getFlags());
+        if (result.getMojoResult() != MojoResult.OK &&
+                result.getMojoResult() != MojoResult.RESOURCE_EXHAUSTED) {
+            throw new MojoException(result.getMojoResult());
+        }
+
+        if (result.getMojoResult() == MojoResult.OK) {
+            if (bytes != null) {
+                bytes.position(0);
+                bytes.limit(result.getReadMessageResult().getMessageSize());
+            }
+
+            List<UntypedHandle> handles = new ArrayList<UntypedHandle>(
+                    result.getReadMessageResult().getHandlesCount());
+            for (int i = 0; i < result.getReadMessageResult().getHandlesCount(); ++i) {
+                int mojoHandle = handlesBuffer.getInt(HANDLE_SIZE * i);
+                handles.add(new UntypedHandleImpl(this, mojoHandle));
+            }
+            result.getReadMessageResult().setHandles(handles);
+        }
+        return result.getReadMessageResult();
+    }
+
+    /**
+     * @see DataPipe.ConsumerHandle#discardData(int, DataPipe.ReadFlags)
+     */
+    int discardData(DataPipeConsumerHandleImpl handle, int numBytes,
+            DataPipe.ReadFlags flags) {
+        int result = nativeReadData(handle.getMojoHandle(), null, numBytes,
+                flags.getFlags() | MOJO_READ_DATA_FLAG_DISCARD);
+        if (result < 0) {
+            throw new MojoException(result);
+        }
+        return result;
+    }
+
+    /**
+     * @see DataPipe.ConsumerHandle#readData(ByteBuffer, DataPipe.ReadFlags)
+     */
+    int readData(DataPipeConsumerHandleImpl handle, ByteBuffer elements,
+            DataPipe.ReadFlags flags) {
+        int result = nativeReadData(handle.getMojoHandle(), elements,
+                elements == null ? 0 : elements.capacity(),
+                flags.getFlags());
+        if (result < 0) {
+            throw new MojoException(result);
+        }
+        if (elements != null) {
+            elements.limit(result);
+        }
+        return result;
+    }
+
+    /**
+     * @see DataPipe.ConsumerHandle#beginReadData(int, DataPipe.ReadFlags)
+     */
+    ByteBuffer beginReadData(DataPipeConsumerHandleImpl handle,
+            int numBytes, DataPipe.ReadFlags flags) {
+        NativeCodeAndBufferResult result = nativeBeginReadData(
+                handle.getMojoHandle(),
+                numBytes,
+                flags.getFlags());
+        if (result.getMojoResult() != MojoResult.OK) {
+            throw new MojoException(result.getMojoResult());
+        }
+        return result.getBuffer().asReadOnlyBuffer();
+    }
+
+    /**
+     * @see DataPipe.ConsumerHandle#endReadData(int)
+     */
+    void endReadData(DataPipeConsumerHandleImpl handle,
+            int numBytesRead) {
+        int result = nativeEndReadData(handle.getMojoHandle(), numBytesRead);
+        if (result != MojoResult.OK) {
+            throw new MojoException(result);
+        }
+    }
+
+    /**
+     * @see DataPipe.ProducerHandle#writeData(ByteBuffer, DataPipe.WriteFlags)
+     */
+    int writeData(DataPipeProducerHandleImpl handle, ByteBuffer elements,
+            DataPipe.WriteFlags flags) {
+        return nativeWriteData(handle.getMojoHandle(), elements, elements.limit(),
+                flags.getFlags());
+    }
+
+    /**
+     * @see DataPipe.ProducerHandle#beginWriteData(int, DataPipe.WriteFlags)
+     */
+    ByteBuffer beginWriteData(DataPipeProducerHandleImpl handle,
+            int numBytes, DataPipe.WriteFlags flags) {
+        NativeCodeAndBufferResult result = nativeBeginWriteData(
+                handle.getMojoHandle(),
+                numBytes,
+                flags.getFlags());
+        if (result.getMojoResult() != MojoResult.OK) {
+            throw new MojoException(result.getMojoResult());
+        }
+        return result.getBuffer();
+    }
+
+    /**
+     * @see DataPipe.ProducerHandle#endWriteData(int)
+     */
+    void endWriteData(DataPipeProducerHandleImpl handle,
+            int numBytesWritten) {
+        int result = nativeEndWriteData(handle.getMojoHandle(), numBytesWritten);
+        if (result != MojoResult.OK) {
+            throw new MojoException(result);
+        }
+    }
+
+    /**
+     * @see SharedBufferHandle#duplicate(DuplicateOptions)
+     */
+    SharedBufferHandle duplicate(SharedBufferHandleImpl handle,
+            DuplicateOptions options) {
+        ByteBuffer optionsBuffer = null;
+        if (options != null) {
+            optionsBuffer = allocateDirectBuffer(8);
+            optionsBuffer.putInt(0, 8);
+            optionsBuffer.putInt(4, options.getFlags().getFlags());
+        }
+        NativeCreationResult result = nativeDuplicate(handle.getMojoHandle(),
+                optionsBuffer);
+        if (result.getMojoResult() != MojoResult.OK) {
+            throw new MojoException(result.getMojoResult());
+        }
+        assert result.getMojoHandle2() == 0;
+        return new SharedBufferHandleImpl(this, result.getMojoHandle1());
+    }
+
+    /**
+     * @see SharedBufferHandle#map(long, long, MapFlags)
+     */
+    ByteBuffer map(SharedBufferHandleImpl handle, long offset, long numBytes,
+            MapFlags flags) {
+        NativeCodeAndBufferResult result = nativeMap(handle.getMojoHandle(), offset, numBytes,
+                flags.getFlags());
+        if (result.getMojoResult() != MojoResult.OK) {
+            throw new MojoException(result.getMojoResult());
+        }
+        return result.getBuffer();
+    }
+
+    /**
+     * @see SharedBufferHandle#unmap(ByteBuffer)
+     */
+    void unmap(ByteBuffer buffer) {
+        int result = nativeUnmap(buffer);
+        if (result != MojoResult.OK) {
+            throw new MojoException(result);
+        }
+    }
+
+    private static int filterMojoResultForWait(int code) {
+        if (code >= 0) {
+            return MojoResult.OK;
+        }
+        switch (code) {
+            case MojoResult.DEADLINE_EXCEEDED:
+            case MojoResult.CANCELLED:
+            case MojoResult.FAILED_PRECONDITION:
+                return code;
+            default:
+                throw new MojoException(code);
+        }
+
+    }
+
+    private static ByteBuffer allocateDirectBuffer(int capacity) {
+        ByteBuffer buffer = ByteBuffer.allocateDirect(capacity);
+        buffer.order(ByteOrder.nativeOrder());
+        return buffer;
+    }
+
+    private static class NativeCodeAndBufferResult {
+        private int mMojoResult;
+        private ByteBuffer mBuffer;
+
+        /**
+         * @return the mojoResult
+         */
+        public int getMojoResult() {
+            return mMojoResult;
+        }
+
+        /**
+         * @param mojoResult the mojoResult to set
+         */
+        public void setMojoResult(int mojoResult) {
+            mMojoResult = mojoResult;
+        }
+
+        /**
+         * @return the buffer
+         */
+        public ByteBuffer getBuffer() {
+            return mBuffer;
+        }
+
+        /**
+         * @param buffer the buffer to set
+         */
+        public void setBuffer(ByteBuffer buffer) {
+            mBuffer = buffer;
+        }
+
+    }
+
+    @CalledByNative
+    private static NativeCodeAndBufferResult newNativeCodeAndBufferResult(int mojoResult,
+            ByteBuffer buffer) {
+        NativeCodeAndBufferResult result = new NativeCodeAndBufferResult();
+        result.setMojoResult(mojoResult);
+        result.setBuffer(buffer);
+        return result;
+    }
+
+    private static class NativeReadMessageResult {
+        public int mMojoResult;
+        public MessagePipeHandle.ReadMessageResult mReadMessageResult;
+
+        /**
+         * @return the mojoResult
+         */
+        public int getMojoResult() {
+            return mMojoResult;
+        }
+
+        /**
+         * @param mojoResult the mojoResult to set
+         */
+        public void setMojoResult(int mojoResult) {
+            this.mMojoResult = mojoResult;
+        }
+
+        /**
+         * @return the readMessageResult
+         */
+        public MessagePipeHandle.ReadMessageResult getReadMessageResult() {
+            return mReadMessageResult;
+        }
+
+        /**
+         * @param readMessageResult the readMessageResult to set
+         */
+        public void setReadMessageResult(MessagePipeHandle.ReadMessageResult readMessageResult) {
+            this.mReadMessageResult = readMessageResult;
+        }
+    }
+
+    @CalledByNative
+    private static NativeReadMessageResult newNativeReadMessageResult(int mojoResult,
+            int messageSize,
+            int handlesCount) {
+        NativeReadMessageResult result = new NativeReadMessageResult();
+        if (mojoResult >= 0) {
+            result.setMojoResult(MojoResult.OK);
+        } else {
+            result.setMojoResult(mojoResult);
+        }
+        MessagePipeHandle.ReadMessageResult readMessageResult =
+                new MessagePipeHandle.ReadMessageResult();
+        readMessageResult.setWasMessageRead(result.getMojoResult() == MojoResult.OK);
+        readMessageResult.setMessageSize(messageSize);
+        readMessageResult.setHandlesCount(handlesCount);
+        result.setReadMessageResult(readMessageResult);
+        return result;
+    }
+
+    private static class NativeCreationResult {
+        private int mMojoResult;
+        private int mMojoHandle1;
+        private int mMojoHandle2;
+
+        /**
+         * @return the mojoResult
+         */
+        public int getMojoResult() {
+            return mMojoResult;
+        }
+
+        /**
+         * @param mojoResult the mojoResult to set
+         */
+        public void setMojoResult(int mojoResult) {
+            mMojoResult = mojoResult;
+        }
+
+        /**
+         * @return the mojoHandle1
+         */
+        public int getMojoHandle1() {
+            return mMojoHandle1;
+        }
+
+        /**
+         * @param mojoHandle1 the mojoHandle1 to set
+         */
+        public void setMojoHandle1(int mojoHandle1) {
+            mMojoHandle1 = mojoHandle1;
+        }
+
+        /**
+         * @return the mojoHandle2
+         */
+        public int getMojoHandle2() {
+            return mMojoHandle2;
+        }
+
+        /**
+         * @param mojoHandle2 the mojoHandle2 to set
+         */
+        public void setMojoHandle2(int mojoHandle2) {
+            mMojoHandle2 = mojoHandle2;
+        }
+    }
+
+    @CalledByNative
+    private static NativeCreationResult newNativeCreationResult(int mojoResult,
+            int mojoHandle1, int mojoHandle2) {
+        NativeCreationResult result = new NativeCreationResult();
+        result.setMojoResult(mojoResult);
+        result.setMojoHandle1(mojoHandle1);
+        result.setMojoHandle2(mojoHandle2);
+        return result;
+    }
+
+    private native void nativeConstructor();
+
+    private native long nativeGetTimeTicksNow();
+
+    private native int nativeWaitMany(ByteBuffer buffer, long deadline);
+
+    private native NativeCreationResult nativeCreateMessagePipe();
+
+    private native NativeCreationResult nativeCreateDataPipe(ByteBuffer optionsBuffer);
+
+    private native NativeCreationResult nativeCreateSharedBuffer(ByteBuffer optionsBuffer,
+            long numBytes);
+
+    private native int nativeClose(int mojoHandle);
+
+    private native int nativeWait(int mojoHandle, int flags, long deadline);
+
+    private native int nativeWriteMessage(int mojoHandle, ByteBuffer bytes, int numBytes,
+            ByteBuffer handlesBuffer, int flags);
+
+    private native NativeReadMessageResult nativeReadMessage(int mojoHandle, ByteBuffer bytes,
+            ByteBuffer handlesBuffer,
+            int flags);
+
+    private native int nativeReadData(int mojoHandle, ByteBuffer elements, int elementsSize,
+            int flags);
+
+    private native NativeCodeAndBufferResult nativeBeginReadData(int mojoHandle, int numBytes,
+            int flags);
+
+    private native int nativeEndReadData(int mojoHandle, int numBytesRead);
+
+    private native int nativeWriteData(int mojoHandle, ByteBuffer elements, int limit, int flags);
+
+    private native NativeCodeAndBufferResult nativeBeginWriteData(int mojoHandle, int numBytes,
+            int flags);
+
+    private native int nativeEndWriteData(int mojoHandle, int numBytesWritten);
+
+    private native NativeCreationResult nativeDuplicate(int mojoHandle, ByteBuffer optionsBuffer);
+
+    private native NativeCodeAndBufferResult nativeMap(int mojoHandle, long offset, long numBytes,
+            int flags);
+
+    private native int nativeUnmap(ByteBuffer buffer);
+
+}
diff --git a/mojo/android/system/src/org/chromium/mojo/system/CoreSingleton.java b/mojo/android/system/src/org/chromium/mojo/system/CoreSingleton.java
new file mode 100644
index 0000000..3cdbf96
--- /dev/null
+++ b/mojo/android/system/src/org/chromium/mojo/system/CoreSingleton.java
@@ -0,0 +1,18 @@
+// 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.
+
+package org.chromium.mojo.system;
+
+/**
+ * Access to the core singleton.
+ */
+public class CoreSingleton {
+
+    /**
+     * Access to the {@link Core} singleton.
+     */
+    public static Core getInstance() {
+        return CoreImpl.getInstance();
+    }
+}
diff --git a/mojo/android/system/src/org/chromium/mojo/system/DataPipeConsumerHandleImpl.java b/mojo/android/system/src/org/chromium/mojo/system/DataPipeConsumerHandleImpl.java
new file mode 100644
index 0000000..84985bf
--- /dev/null
+++ b/mojo/android/system/src/org/chromium/mojo/system/DataPipeConsumerHandleImpl.java
@@ -0,0 +1,63 @@
+// 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.
+
+package org.chromium.mojo.system;
+
+import org.chromium.mojo.system.DataPipe.ConsumerHandle;
+import org.chromium.mojo.system.DataPipe.ReadFlags;
+
+import java.nio.ByteBuffer;
+
+/**
+ * Implementation of {@link ConsumerHandle}.
+ */
+class DataPipeConsumerHandleImpl extends HandleImpl implements ConsumerHandle {
+
+    /**
+     * @see HandleImpl#HandleImpl(CoreImpl, int)
+     */
+    DataPipeConsumerHandleImpl(CoreImpl core, int mojoHandle) {
+        super(core, mojoHandle);
+    }
+
+    /**
+     * @see HandleImpl#HandleImpl(UntypedHandleImpl)
+     */
+    DataPipeConsumerHandleImpl(UntypedHandleImpl other) {
+        super(other);
+    }
+
+    /**
+     * @see ConsumerHandle#discardData(int, ReadFlags)
+     */
+    @Override
+    public int discardData(int numBytes, ReadFlags flags) {
+        return mCore.discardData(this, numBytes, flags);
+    }
+
+    /**
+     * @see ConsumerHandle#readData(ByteBuffer, ReadFlags)
+     */
+    @Override
+    public int readData(ByteBuffer elements, ReadFlags flags) {
+        return mCore.readData(this, elements, flags);
+    }
+
+    /**
+     * @see ConsumerHandle#beginReadData(int, ReadFlags)
+     */
+    @Override
+    public ByteBuffer beginReadData(int numBytes, ReadFlags flags) {
+        return mCore.beginReadData(this, numBytes, flags);
+    }
+
+    /**
+     * @see ConsumerHandle#endReadData(int)
+     */
+    @Override
+    public void endReadData(int numBytesRead) {
+        mCore.endReadData(this, numBytesRead);
+    }
+
+}
diff --git a/mojo/android/system/src/org/chromium/mojo/system/DataPipeProducerHandleImpl.java b/mojo/android/system/src/org/chromium/mojo/system/DataPipeProducerHandleImpl.java
new file mode 100644
index 0000000..d6e00df
--- /dev/null
+++ b/mojo/android/system/src/org/chromium/mojo/system/DataPipeProducerHandleImpl.java
@@ -0,0 +1,55 @@
+// 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.
+
+package org.chromium.mojo.system;
+
+import org.chromium.mojo.system.DataPipe.ProducerHandle;
+import org.chromium.mojo.system.DataPipe.WriteFlags;
+
+import java.nio.ByteBuffer;
+
+/**
+ * Implementation of {@link ProducerHandle}.
+ */
+class DataPipeProducerHandleImpl extends HandleImpl implements ProducerHandle {
+
+    /**
+     * @see HandleImpl#HandleImpl(CoreImpl, int)
+     */
+    DataPipeProducerHandleImpl(CoreImpl core, int mojoHandle) {
+        super(core, mojoHandle);
+    }
+
+    /**
+     * @see HandleImpl#HandleImpl(UntypedHandleImpl)
+     */
+    DataPipeProducerHandleImpl(UntypedHandleImpl handle) {
+        super(handle);
+    }
+
+    /**
+     * @see DataPipe.ProducerHandle#writeData(ByteBuffer, WriteFlags)
+     */
+    @Override
+    public int writeData(ByteBuffer elements, WriteFlags flags) {
+        return mCore.writeData(this, elements, flags);
+    }
+
+    /**
+     * @see DataPipe.ProducerHandle#beginWriteData(int, WriteFlags)
+     */
+    @Override
+    public ByteBuffer beginWriteData(int numBytes, WriteFlags flags) {
+        return mCore.beginWriteData(this, numBytes, flags);
+    }
+
+    /**
+     * @see DataPipe.ProducerHandle#endWriteData(int)
+     */
+    @Override
+    public void endWriteData(int numBytesWritten) {
+        mCore.endWriteData(this, numBytesWritten);
+    }
+
+}
diff --git a/mojo/android/system/src/org/chromium/mojo/system/HandleImpl.java b/mojo/android/system/src/org/chromium/mojo/system/HandleImpl.java
new file mode 100644
index 0000000..00cb9cd
--- /dev/null
+++ b/mojo/android/system/src/org/chromium/mojo/system/HandleImpl.java
@@ -0,0 +1,112 @@
+// 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.
+
+package org.chromium.mojo.system;
+
+import android.util.Log;
+
+import org.chromium.mojo.system.Core.WaitFlags;
+
+/**
+ * Implementation of {@link Handle}.
+ */
+class HandleImpl implements Handle {
+
+    private static final String TAG = "HandleImpl";
+
+    private static final int INVALID_HANDLE = 0;
+
+    /**
+     * The pointer to the scoped handle owned by this object.
+     */
+    private int mMojoHandle;
+
+    /**
+     * the core implementation. Will be used to delegate all behavior.
+     */
+    protected CoreImpl mCore;
+
+    /**
+     * Base constructor. Takes ownership of the passed handle.
+     */
+    HandleImpl(CoreImpl core, int mojoHandle) {
+        mCore = core;
+        mMojoHandle = mojoHandle;
+    }
+
+    /**
+     * Constructor for transforming an {@link UntypedHandle} into a specific one.
+     */
+    HandleImpl(UntypedHandleImpl other) {
+        mCore = other.mCore;
+        HandleImpl otherAsHandleImpl = other;
+        int mojoHandle = otherAsHandleImpl.mMojoHandle;
+        otherAsHandleImpl.mMojoHandle = INVALID_HANDLE;
+        mMojoHandle = mojoHandle;
+    }
+
+    /**
+     * @see org.chromium.mojo.system.Handle#close()
+     */
+    @Override
+    public void close() {
+        if (mMojoHandle != INVALID_HANDLE) {
+            // After a close, the handle is invalid whether the close succeed or not.
+            int handle = mMojoHandle;
+            mMojoHandle = INVALID_HANDLE;
+            mCore.close(handle);
+        }
+    }
+
+    /**
+     * @see org.chromium.mojo.system.Handle#wait(WaitFlags, long)
+     */
+    @Override
+    public int wait(WaitFlags flags, long deadline) {
+        return mCore.wait(this, flags, deadline);
+    }
+
+    /**
+     * @see org.chromium.mojo.system.Handle#isValid()
+     */
+    @Override
+    public boolean isValid() {
+        return mMojoHandle != INVALID_HANDLE;
+    }
+
+    /**
+     * Getter for the native scoped handle.
+     *
+     * @return the native scoped handle.
+     */
+    int getMojoHandle() {
+        return mMojoHandle;
+    }
+
+    /**
+     * invalidate the handle. The caller must ensures that the handle does not leak.
+     */
+    void invalidateHandle() {
+        mMojoHandle = INVALID_HANDLE;
+    }
+
+    /**
+     * Close the handle if it is valid. Necessary because we cannot let handle leak, and we cannot
+     * ensure that every handle will be manually closed.
+     *
+     * @see java.lang.Object#finalize()
+     */
+    @Override
+    protected final void finalize() throws Throwable {
+        if (isValid()) {
+            // This should not happen, as the user of this class should close the handle. Adding a
+            // warning.
+            Log.w(TAG, "Handle was not closed.");
+            // Ignore result at this point.
+            mCore.closeWithResult(mMojoHandle);
+        }
+        super.finalize();
+    }
+
+}
diff --git a/mojo/android/system/src/org/chromium/mojo/system/MessagePipeHandleImpl.java b/mojo/android/system/src/org/chromium/mojo/system/MessagePipeHandleImpl.java
new file mode 100644
index 0000000..6441b1c
--- /dev/null
+++ b/mojo/android/system/src/org/chromium/mojo/system/MessagePipeHandleImpl.java
@@ -0,0 +1,47 @@
+// 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.
+
+package org.chromium.mojo.system;
+
+import java.nio.ByteBuffer;
+import java.util.List;
+
+/**
+ * Implementation of {@link MessagePipeHandle}.
+ */
+class MessagePipeHandleImpl extends HandleImpl implements MessagePipeHandle {
+
+    /**
+     * @see HandleImpl#HandleImpl(CoreImpl, int)
+     */
+    MessagePipeHandleImpl(CoreImpl core, int mojoHandle) {
+        super(core, mojoHandle);
+    }
+
+    /**
+     * @see HandleImpl#HandleImpl(UntypedHandleImpl)
+     */
+    MessagePipeHandleImpl(UntypedHandleImpl handle) {
+        super(handle);
+    }
+
+    /**
+     * @see MessagePipeHandle#writeMessage(ByteBuffer, List, WriteFlags)
+     */
+    @Override
+    public void writeMessage(ByteBuffer bytes, List<Handle> handles, WriteFlags flags) {
+        mCore.writeMessage(this, bytes, handles, flags);
+    }
+
+    /**
+     * @see MessagePipeHandle#readMessage(ByteBuffer, int, ReadFlags)
+     */
+    @Override
+    public ReadMessageResult readMessage(ByteBuffer bytes,
+            int maxNumberOfHandles,
+            ReadFlags flags) {
+        return mCore.readMessage(this, bytes, maxNumberOfHandles, flags);
+    }
+
+}
diff --git a/mojo/android/system/src/org/chromium/mojo/system/SharedBufferHandleImpl.java b/mojo/android/system/src/org/chromium/mojo/system/SharedBufferHandleImpl.java
new file mode 100644
index 0000000..4679bd0
--- /dev/null
+++ b/mojo/android/system/src/org/chromium/mojo/system/SharedBufferHandleImpl.java
@@ -0,0 +1,52 @@
+// 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.
+
+package org.chromium.mojo.system;
+
+import java.nio.ByteBuffer;
+
+/**
+ * Implementation of {@link SharedBufferHandle}.
+ */
+class SharedBufferHandleImpl extends HandleImpl implements SharedBufferHandle {
+
+    /**
+     * @see HandleImpl#HandleImpl(CoreImpl, int)
+     */
+    SharedBufferHandleImpl(CoreImpl core, int mojoHandle) {
+        super(core, mojoHandle);
+    }
+
+    /**
+     * @see HandleImpl#HandleImpl(UntypedHandleImpl)
+     */
+    SharedBufferHandleImpl(UntypedHandleImpl handle) {
+        super(handle);
+    }
+
+    /**
+     * @see SharedBufferHandle#duplicate(DuplicateOptions)
+     */
+    @Override
+    public SharedBufferHandle duplicate(DuplicateOptions options) {
+        return mCore.duplicate(this, options);
+    }
+
+    /**
+     * @see SharedBufferHandle#map(long, long, MapFlags)
+     */
+    @Override
+    public ByteBuffer map(long offset, long numBytes, MapFlags flags) {
+        return mCore.map(this, offset, numBytes, flags);
+    }
+
+    /**
+     * @see SharedBufferHandle#unmap(ByteBuffer)
+     */
+    @Override
+    public void unmap(ByteBuffer buffer) {
+        mCore.unmap(buffer);
+    }
+
+}
diff --git a/mojo/android/system/src/org/chromium/mojo/system/UntypedHandleImpl.java b/mojo/android/system/src/org/chromium/mojo/system/UntypedHandleImpl.java
new file mode 100644
index 0000000..85c7691
--- /dev/null
+++ b/mojo/android/system/src/org/chromium/mojo/system/UntypedHandleImpl.java
@@ -0,0 +1,54 @@
+// 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.
+
+package org.chromium.mojo.system;
+
+import org.chromium.mojo.system.DataPipe.ConsumerHandle;
+import org.chromium.mojo.system.DataPipe.ProducerHandle;
+
+/**
+ * Implementation of {@link UntypedHandle}.
+ */
+class UntypedHandleImpl extends HandleImpl implements UntypedHandle {
+
+    /**
+     * @see HandleImpl#HandleImpl(CoreImpl, int)
+     */
+    UntypedHandleImpl(CoreImpl core, int mojoHandle) {
+        super(core, mojoHandle);
+    }
+
+    /**
+     * @see org.chromium.mojo.system.UntypedHandle#toMessagePipeHandle()
+     */
+    @Override
+    public MessagePipeHandle toMessagePipeHandle() {
+        return new MessagePipeHandleImpl(this);
+    }
+
+    /**
+     * @see org.chromium.mojo.system.UntypedHandle#toDataPipeConsumerHandle()
+     */
+    @Override
+    public ConsumerHandle toDataPipeConsumerHandle() {
+        return new DataPipeConsumerHandleImpl(this);
+    }
+
+    /**
+     * @see org.chromium.mojo.system.UntypedHandle#toDataPipeProducerHandle()
+     */
+    @Override
+    public ProducerHandle toDataPipeProducerHandle() {
+        return new DataPipeProducerHandleImpl(this);
+    }
+
+    /**
+     * @see org.chromium.mojo.system.UntypedHandle#toSharedBufferHandle()
+     */
+    @Override
+    public SharedBufferHandle toSharedBufferHandle() {
+        return new SharedBufferHandleImpl(this);
+    }
+
+}
diff --git a/mojo/apps/js/bindings/connection_unittests.js b/mojo/apps/js/bindings/connection_unittests.js
index 0ec37b0..91ea8e3 100644
--- a/mojo/apps/js/bindings/connection_unittests.js
+++ b/mojo/apps/js/bindings/connection_unittests.js
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 // Mock out the support module to avoid depending on the message loop.
-define("mojo/bindings/js/support", ["timer"], function(timer) {
+define("mojo/public/js/bindings/support", ["timer"], function(timer) {
   var waitingCallbacks = [];
 
   function WaitCookie(id) {
@@ -55,8 +55,8 @@
 
 define([
     "gin/test/expect",
-    "mojo/bindings/js/support",
-    "mojo/bindings/js/core",
+    "mojo/public/js/bindings/support",
+    "mojo/public/js/bindings/core",
     "mojo/public/js/bindings/connection",
     "mojo/public/interfaces/bindings/tests/sample_interfaces.mojom",
     "mojo/public/interfaces/bindings/tests/sample_service.mojom",
diff --git a/mojo/apps/js/bindings/sample_service_unittests.js b/mojo/apps/js/bindings/sample_service_unittests.js
index 1191c88..d7c0126 100644
--- a/mojo/apps/js/bindings/sample_service_unittests.js
+++ b/mojo/apps/js/bindings/sample_service_unittests.js
@@ -140,8 +140,10 @@
   }
 
   SimpleMessageReceiver.prototype.accept = function(message) {
-    if (dumpMessageAsHex)
-      console.log(hexdump.dumpArray(message.memory));
+    if (dumpMessageAsHex) {
+      var uint8Array = new Uint8Array(message.buffer.arrayBuffer);
+      console.log(hexdump.dumpArray(uint8Array));
+    }
     // Imagine some IPC happened here.
     var serviceImpl = new ServiceImpl();
     serviceImpl.accept(message);
diff --git a/mojo/apps/js/main.js b/mojo/apps/js/main.js
index fb2d15b..a3b3dd2 100644
--- a/mojo/apps/js/main.js
+++ b/mojo/apps/js/main.js
@@ -7,7 +7,7 @@
     'monotonic_clock',
     'timer',
     'mojo/public/js/bindings/connection',
-    'mojo/bindings/js/core',
+    'mojo/public/js/bindings/core',
     'mojo/apps/js/bindings/gl',
     'mojo/apps/js/bindings/threading',
     'mojo/services/native_viewport/native_viewport.mojom',
diff --git a/mojo/apps/js/test/run_apps_js_tests.cc b/mojo/apps/js/test/run_apps_js_tests.cc
index 3d27e47..5037f8a 100644
--- a/mojo/apps/js/test/run_apps_js_tests.cc
+++ b/mojo/apps/js/test/run_apps_js_tests.cc
@@ -13,6 +13,7 @@
 #include "mojo/apps/js/bindings/monotonic_clock.h"
 #include "mojo/apps/js/bindings/threading.h"
 #include "mojo/bindings/js/core.h"
+#include "mojo/bindings/js/unicode.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace mojo {
@@ -24,6 +25,7 @@
   TestRunnerDelegate() {
     AddBuiltinModule(gin::Console::kModuleName, gin::Console::GetModule);
     AddBuiltinModule(Core::kModuleName, Core::GetModule);
+    AddBuiltinModule(Unicode::kModuleName, Unicode::GetModule);
     AddBuiltinModule(gin::TimerModule::kName, gin::TimerModule::GetModule);
     AddBuiltinModule(apps::MonotonicClock::kModuleName,
                      apps::MonotonicClock::GetModule);
diff --git a/mojo/bindings/js/codec_unittests.js b/mojo/bindings/js/codec_unittests.js
index e2823e0..b20dbcb 100644
--- a/mojo/bindings/js/codec_unittests.js
+++ b/mojo/bindings/js/codec_unittests.js
@@ -10,6 +10,7 @@
   testBar();
   testFoo();
   testAlign();
+  testUtf8();
   this.result = "PASS";
 
   function testBar() {
@@ -41,7 +42,8 @@
        5, 6, 7, 8,
     ]);
 
-    expect(message.memory).toEqual(expectedMemory);
+    var actualMemory = new Uint8Array(message.buffer.arrayBuffer);
+    expect(actualMemory).toEqual(expectedMemory);
 
     var reader = new codec.MessageReader(message);
 
@@ -83,7 +85,7 @@
     foo.source = 23423782;
 
     var messageName = 31;
-    var payloadSize = 224;
+    var payloadSize = 240;
 
     var builder = new codec.MessageBuilder(messageName, payloadSize);
     builder.encodeStruct(sample.Foo, foo);
@@ -93,13 +95,13 @@
     var expectedMemory = new Uint8Array([
       /*  0: */   16,    0,    0,    0,    2,    0,    0,    0,
       /*  8: */   31,    0,    0,    0,    0,    0,    0,    0,
-      /* 16: */   72,    0,    0,    0,   12,    0,    0,    0,
+      /* 16: */   80,    0,    0,    0,   13,    0,    0,    0,
       /* 24: */ 0xD5, 0xB4, 0x12, 0x02, 0x93, 0x6E, 0x01,    0,
       /* 32: */    5,    0,    0,    0,    0,    0,    0,    0,
-      /* 40: */   48,    0,    0,    0,    0,    0,    0,    0,
+      /* 40: */   56,    0,    0,    0,    0,    0,    0,    0,
     ]);
     // TODO(abarth): Test more of the message's raw memory.
-    var actualMemory = new Uint8Array(message.memory.buffer,
+    var actualMemory = new Uint8Array(message.buffer.arrayBuffer,
                                       0, expectedMemory.length);
     expect(actualMemory).toEqual(expectedMemory);
 
@@ -158,4 +160,31 @@
     for (var i = 0; i < aligned.length; ++i)
       expect(codec.align(i)).toBe(aligned[i]);
   }
+
+  function testUtf8() {
+    var str = "B\u03ba\u1f79";  // some UCS-2 codepoints
+    var messageName = 42;
+    var payloadSize = 24;
+
+    var builder = new codec.MessageBuilder(messageName, payloadSize);
+    var encoder = builder.createEncoder(8);
+    encoder.encodeStringPointer(str);
+    var message = builder.finish();
+    var expectedMemory = new Uint8Array([
+      /*  0: */   16,    0,    0,    0,    2,    0,    0,    0,
+      /*  8: */   42,    0,    0,    0,    0,    0,    0,    0,
+      /* 16: */    8,    0,    0,    0,    0,    0,    0,    0,
+      /* 24: */   14,    0,    0,    0,    6,    0,    0,    0,
+      /* 32: */ 0x42, 0xCE, 0xBA, 0xE1, 0xBD, 0xB9,    0,    0,
+    ]);
+    var actualMemory = new Uint8Array(message.buffer.arrayBuffer);
+    expect(actualMemory.length).toEqual(expectedMemory.length);
+    expect(actualMemory).toEqual(expectedMemory);
+
+    var reader = new codec.MessageReader(message);
+    expect(reader.payloadSize).toBe(payloadSize);
+    expect(reader.messageName).toBe(messageName);
+    var str2 = reader.decoder.decodeStringPointer();
+    expect(str2).toEqual(str);
+  }
 });
diff --git a/mojo/bindings/js/core.cc b/mojo/bindings/js/core.cc
index de53cfc..855637b 100644
--- a/mojo/bindings/js/core.cc
+++ b/mojo/bindings/js/core.cc
@@ -199,7 +199,7 @@
 
 }  // namespace
 
-const char Core::kModuleName[] = "mojo/bindings/js/core";
+const char Core::kModuleName[] = "mojo/public/js/bindings/core";
 
 v8::Local<v8::Value> Core::GetModule(v8::Isolate* isolate) {
   gin::PerIsolateData* data = gin::PerIsolateData::From(isolate);
diff --git a/mojo/bindings/js/core_unittests.js b/mojo/bindings/js/core_unittests.js
index 62b20d1..20446db 100644
--- a/mojo/bindings/js/core_unittests.js
+++ b/mojo/bindings/js/core_unittests.js
@@ -4,7 +4,7 @@
 
 define([
     "gin/test/expect",
-    "mojo/bindings/js/core",
+    "mojo/public/js/bindings/core",
     "gc",
   ], function(expect, core, gc) {
   runWithMessagePipe(testNop);
diff --git a/mojo/bindings/js/run_js_tests.cc b/mojo/bindings/js/run_js_tests.cc
index d47070d..c3349cc 100644
--- a/mojo/bindings/js/run_js_tests.cc
+++ b/mojo/bindings/js/run_js_tests.cc
@@ -10,6 +10,7 @@
 #include "gin/test/file_runner.h"
 #include "gin/test/gtest.h"
 #include "mojo/bindings/js/core.h"
+#include "mojo/bindings/js/unicode.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace mojo {
@@ -21,6 +22,7 @@
   TestRunnerDelegate() {
     AddBuiltinModule(gin::Console::kModuleName, gin::Console::GetModule);
     AddBuiltinModule(Core::kModuleName, Core::GetModule);
+    AddBuiltinModule(Unicode::kModuleName, Unicode::GetModule);
   }
 
  private:
diff --git a/mojo/bindings/js/support.cc b/mojo/bindings/js/support.cc
index ba62e8a..cb8cb99 100644
--- a/mojo/bindings/js/support.cc
+++ b/mojo/bindings/js/support.cc
@@ -55,7 +55,7 @@
 
 }  // namespace
 
-const char Support::kModuleName[] = "mojo/bindings/js/support";
+const char Support::kModuleName[] = "mojo/public/js/bindings/support";
 
 v8::Local<v8::Value> Support::GetModule(v8::Isolate* isolate) {
   gin::PerIsolateData* data = gin::PerIsolateData::From(isolate);
diff --git a/mojo/bindings/js/unicode.cc b/mojo/bindings/js/unicode.cc
new file mode 100644
index 0000000..22f9e98
--- /dev/null
+++ b/mojo/bindings/js/unicode.cc
@@ -0,0 +1,69 @@
+// 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.
+
+#include "mojo/bindings/js/unicode.h"
+
+#include "gin/arguments.h"
+#include "gin/array_buffer.h"
+#include "gin/object_template_builder.h"
+#include "gin/per_isolate_data.h"
+#include "gin/public/wrapper_info.h"
+
+namespace mojo {
+namespace js {
+
+namespace {
+
+v8::Handle<v8::Value> DecodeUtf8String(const gin::Arguments& args,
+                                       const gin::ArrayBufferView& buffer) {
+  assert(static_cast<int>(buffer.num_bytes()) >= 0);
+  return v8::String::NewFromUtf8(args.isolate(),
+                                 reinterpret_cast<char*>(buffer.bytes()),
+                                 v8::String::kNormalString,
+                                 static_cast<int>(buffer.num_bytes()));
+}
+
+int EncodeUtf8String(const gin::Arguments& args,
+                     v8::Handle<v8::Value> str_value,
+                     const gin::ArrayBufferView& buffer) {
+  assert(static_cast<int>(buffer.num_bytes()) >= 0);
+  v8::Handle<v8::String> str = str_value->ToString();
+  int num_bytes = str->WriteUtf8(
+      reinterpret_cast<char*>(buffer.bytes()),
+      static_cast<int>(buffer.num_bytes()),
+      NULL,
+      v8::String::NO_NULL_TERMINATION | v8::String::REPLACE_INVALID_UTF8);
+  return num_bytes;
+}
+
+int Utf8Length(v8::Handle<v8::Value> str_value) {
+  return str_value->ToString()->Utf8Length();
+}
+
+gin::WrapperInfo g_wrapper_info = { gin::kEmbedderNativeGin };
+
+}  // namespace
+
+const char Unicode::kModuleName[] = "mojo/public/js/bindings/unicode";
+
+v8::Local<v8::Value> Unicode::GetModule(v8::Isolate* isolate) {
+  gin::PerIsolateData* data = gin::PerIsolateData::From(isolate);
+  v8::Local<v8::ObjectTemplate> templ = data->GetObjectTemplate(
+      &g_wrapper_info);
+
+  if (templ.IsEmpty()) {
+    templ = gin::ObjectTemplateBuilder(isolate)
+                .SetMethod("decodeUtf8String", DecodeUtf8String)
+                .SetMethod("encodeUtf8String", EncodeUtf8String)
+                .SetMethod("utf8Length", Utf8Length)
+                .Build();
+
+    data->SetObjectTemplate(&g_wrapper_info, templ);
+  }
+
+  return templ->NewInstance();
+}
+
+}  // namespace js
+}  // namespace mojo
diff --git a/mojo/bindings/js/unicode.h b/mojo/bindings/js/unicode.h
new file mode 100644
index 0000000..de1e3bb
--- /dev/null
+++ b/mojo/bindings/js/unicode.h
@@ -0,0 +1,22 @@
+// 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.
+
+#ifndef MOJO_BINDINGS_JS_UNICODE_H_
+#define MOJO_BINDINGS_JS_UNICODE_H_
+
+#include "v8/include/v8.h"
+
+namespace mojo {
+namespace js {
+
+class Unicode {
+ public:
+  static const char kModuleName[];
+  static v8::Local<v8::Value> GetModule(v8::Isolate* isolate);
+};
+
+}  // namespace js
+}  // namespace mojo
+
+#endif  // MOJO_BINDINGS_JS_UNICODE_H_
diff --git a/mojo/bindings/js/waiting_callback.h b/mojo/bindings/js/waiting_callback.h
index bc17d19..90cf284 100644
--- a/mojo/bindings/js/waiting_callback.h
+++ b/mojo/bindings/js/waiting_callback.h
@@ -8,7 +8,7 @@
 #include "gin/handle.h"
 #include "gin/runner.h"
 #include "gin/wrappable.h"
-#include "mojo/public/c/system/async_waiter.h"
+#include "mojo/public/c/environment/async_waiter.h"
 
 namespace mojo {
 namespace js {
diff --git a/mojo/common/DEPS b/mojo/common/DEPS
index a1d21b5..26456c6 100644
--- a/mojo/common/DEPS
+++ b/mojo/common/DEPS
@@ -1,5 +1,6 @@
 include_rules = [
   "-mojo",
   "+mojo/common",
+  "+mojo/embedder",
   "+mojo/public",
 ]
diff --git a/mojo/common/message_pump_mojo.cc b/mojo/common/message_pump_mojo.cc
index 2afa72f..5bc3462 100644
--- a/mojo/common/message_pump_mojo.cc
+++ b/mojo/common/message_pump_mojo.cc
@@ -68,69 +68,84 @@
 }
 
 void MessagePumpMojo::Run(Delegate* delegate) {
-  RunState* old_state = run_state_;
   RunState run_state;
   // TODO: better deal with error handling.
   CHECK(run_state.read_handle.is_valid());
   CHECK(run_state.write_handle.is_valid());
-  run_state_ = &run_state;
+  RunState* old_state = NULL;
+  {
+    base::AutoLock auto_lock(run_state_lock_);
+    old_state = run_state_;
+    run_state_ = &run_state;
+  }
+  DoRunLoop(&run_state, delegate);
+  {
+    base::AutoLock auto_lock(run_state_lock_);
+    run_state_ = old_state;
+  }
+}
+
+void MessagePumpMojo::Quit() {
+  base::AutoLock auto_lock(run_state_lock_);
+  if (run_state_)
+    run_state_->should_quit = true;
+}
+
+void MessagePumpMojo::ScheduleWork() {
+  base::AutoLock auto_lock(run_state_lock_);
+  if (run_state_)
+    SignalControlPipe(*run_state_);
+}
+
+void MessagePumpMojo::ScheduleDelayedWork(
+    const base::TimeTicks& delayed_work_time) {
+  base::AutoLock auto_lock(run_state_lock_);
+  if (!run_state_)
+    return;
+  run_state_->delayed_work_time = delayed_work_time;
+  SignalControlPipe(*run_state_);
+}
+
+void MessagePumpMojo::DoRunLoop(RunState* run_state, Delegate* delegate) {
   bool more_work_is_plausible = true;
   for (;;) {
     const bool block = !more_work_is_plausible;
-    DoInternalWork(block);
+    DoInternalWork(*run_state, block);
 
     // There isn't a good way to know if there are more handles ready, we assume
     // not.
     more_work_is_plausible = false;
 
-    if (run_state.should_quit)
+    if (run_state->should_quit)
       break;
 
     more_work_is_plausible |= delegate->DoWork();
-    if (run_state.should_quit)
+    if (run_state->should_quit)
       break;
 
     more_work_is_plausible |= delegate->DoDelayedWork(
-        &run_state.delayed_work_time);
-    if (run_state.should_quit)
+        &run_state->delayed_work_time);
+    if (run_state->should_quit)
       break;
 
     if (more_work_is_plausible)
       continue;
 
     more_work_is_plausible = delegate->DoIdleWork();
-    if (run_state.should_quit)
+    if (run_state->should_quit)
       break;
   }
-  run_state_ = old_state;
 }
 
-void MessagePumpMojo::Quit() {
-  if (run_state_)
-    run_state_->should_quit = true;
-}
-
-void MessagePumpMojo::ScheduleWork() {
-  SignalControlPipe();
-}
-
-void MessagePumpMojo::ScheduleDelayedWork(
-    const base::TimeTicks& delayed_work_time) {
-  if (!run_state_)
-    return;
-  run_state_->delayed_work_time = delayed_work_time;
-  SignalControlPipe();
-}
-
-void MessagePumpMojo::DoInternalWork(bool block) {
-  const MojoDeadline deadline = block ? GetDeadlineForWait() : 0;
-  const WaitState wait_state = GetWaitState();
+void MessagePumpMojo::DoInternalWork(const RunState& run_state, bool block) {
+  const MojoDeadline deadline = block ? GetDeadlineForWait(run_state) : 0;
+  const WaitState wait_state = GetWaitState(run_state);
   const MojoResult result =
       WaitMany(wait_state.handles, wait_state.wait_flags, deadline);
   if (result == 0) {
     // Control pipe was written to.
     uint32_t num_bytes = 0;
-    ReadMessageRaw(run_state_->read_handle.get(), NULL, &num_bytes, NULL, NULL,
+    ReadMessageRaw(run_state.read_handle.get(), NULL, &num_bytes, NULL, NULL,
                    MOJO_READ_MESSAGE_FLAG_MAY_DISCARD);
   } else if (result > 0) {
     const size_t index = static_cast<size_t>(result);
@@ -187,18 +202,16 @@
   }
 }
 
-void MessagePumpMojo::SignalControlPipe() {
-  if (!run_state_)
-    return;
-
+void MessagePumpMojo::SignalControlPipe(const RunState& run_state) {
   // TODO(sky): deal with error?
-  WriteMessageRaw(run_state_->write_handle.get(), NULL, 0, NULL, 0,
+  WriteMessageRaw(run_state.write_handle.get(), NULL, 0, NULL, 0,
                   MOJO_WRITE_MESSAGE_FLAG_NONE);
 }
 
-MessagePumpMojo::WaitState MessagePumpMojo::GetWaitState() const {
+MessagePumpMojo::WaitState MessagePumpMojo::GetWaitState(
+    const RunState& run_state) const {
   WaitState wait_state;
-  wait_state.handles.push_back(run_state_->read_handle.get());
+  wait_state.handles.push_back(run_state.read_handle.get());
   wait_state.wait_flags.push_back(MOJO_WAIT_FLAG_READABLE);
 
   for (HandleToHandler::const_iterator i = handlers_.begin();
@@ -209,8 +222,9 @@
   return wait_state;
 }
 
-MojoDeadline MessagePumpMojo::GetDeadlineForWait() const {
-  base::TimeTicks min_time = run_state_->delayed_work_time;
+MojoDeadline MessagePumpMojo::GetDeadlineForWait(
+    const RunState& run_state) const {
+  base::TimeTicks min_time = run_state.delayed_work_time;
   for (HandleToHandler::const_iterator i = handlers_.begin();
        i != handlers_.end(); ++i) {
     if (min_time.is_null() && i->second.deadline < min_time)
diff --git a/mojo/common/message_pump_mojo.h b/mojo/common/message_pump_mojo.h
index cc21565..c761106 100644
--- a/mojo/common/message_pump_mojo.h
+++ b/mojo/common/message_pump_mojo.h
@@ -9,6 +9,7 @@
 
 #include "base/memory/scoped_ptr.h"
 #include "base/message_loop/message_pump.h"
+#include "base/synchronization/lock.h"
 #include "base/time/time.h"
 #include "mojo/common/mojo_common_export.h"
 #include "mojo/public/cpp/system/core.h"
@@ -61,25 +62,33 @@
 
   typedef std::map<Handle, Handler> HandleToHandler;
 
+  // Implementation of Run().
+  void DoRunLoop(RunState* run_state, Delegate* delegate);
+
   // Services the set of handles ready. If |block| is true this waits for a
   // handle to become ready, otherwise this does not block.
-  void DoInternalWork(bool block);
+  void DoInternalWork(const RunState& run_state, bool block);
 
   // Removes the first invalid handle. This is called if MojoWaitMany finds an
   // invalid handle.
   void RemoveFirstInvalidHandle(const WaitState& wait_state);
 
-  void SignalControlPipe();
+  void SignalControlPipe(const RunState& run_state);
 
-  WaitState GetWaitState() const;
+  WaitState GetWaitState(const RunState& run_state) const;
 
   // Returns the deadline for the call to MojoWaitMany().
-  MojoDeadline GetDeadlineForWait() const;
+  MojoDeadline GetDeadlineForWait(const RunState& run_state) const;
 
   // If non-NULL we're running (inside Run()). Member is reference to value on
   // stack.
   RunState* run_state_;
 
+  // Lock for accessing |run_state_|. In general the only method that we have to
+  // worry about is ScheduleWork(). All other methods are invoked on the same
+  // thread.
+  base::Lock run_state_lock_;
+
   HandleToHandler handlers_;
 
   // An ever increasing value assigned to each Handler::id. Used to detect
diff --git a/mojo/common/mojo_channel_init.cc b/mojo/common/mojo_channel_init.cc
new file mode 100644
index 0000000..96190f9
--- /dev/null
+++ b/mojo/common/mojo_channel_init.cc
@@ -0,0 +1,59 @@
+// 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.
+
+#include "mojo/common/mojo_channel_init.h"
+
+#include "base/bind.h"
+#include "base/message_loop/message_loop.h"
+#include "mojo/embedder/embedder.h"
+
+namespace mojo {
+namespace common {
+
+MojoChannelInit::MojoChannelInit()
+    : channel_info_(NULL),
+      weak_factory_(this) {
+}
+
+MojoChannelInit::~MojoChannelInit() {
+  bootstrap_message_pipe_.reset();
+  if (channel_info_) {
+    io_thread_task_runner_->PostTask(
+        FROM_HERE,
+        base::Bind(&mojo::embedder::DestroyChannelOnIOThread, channel_info_));
+  }
+}
+
+void MojoChannelInit::Init(
+    base::PlatformFile file,
+    scoped_refptr<base::TaskRunner> io_thread_task_runner) {
+  DCHECK(!io_thread_task_runner_.get());  // Should only init once.
+  io_thread_task_runner_ = io_thread_task_runner;
+  bootstrap_message_pipe_ = mojo::embedder::CreateChannel(
+      mojo::embedder::ScopedPlatformHandle(
+          mojo::embedder::PlatformHandle(file)),
+      io_thread_task_runner,
+      base::Bind(&MojoChannelInit::OnCreatedChannel, weak_factory_.GetWeakPtr(),
+                 io_thread_task_runner),
+      base::MessageLoop::current()->message_loop_proxy()).Pass();
+}
+
+// static
+void MojoChannelInit::OnCreatedChannel(
+    base::WeakPtr<MojoChannelInit> host,
+    scoped_refptr<base::TaskRunner> io_thread,
+    embedder::ChannelInfo* channel) {
+  // By the time we get here |host| may have been destroyed. If so, shutdown the
+  // channel.
+  if (!host.get()) {
+    io_thread->PostTask(
+        FROM_HERE,
+        base::Bind(&mojo::embedder::DestroyChannelOnIOThread, channel));
+    return;
+  }
+  host->channel_info_ = channel;
+}
+
+}  // namespace common
+}  // namespace mojo
diff --git a/mojo/common/mojo_channel_init.h b/mojo/common/mojo_channel_init.h
new file mode 100644
index 0000000..8fa0094
--- /dev/null
+++ b/mojo/common/mojo_channel_init.h
@@ -0,0 +1,66 @@
+// 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.
+
+#ifndef MOJO_COMMON_MOJO_CHANNEL_INIT_H_
+#define MOJO_COMMON_MOJO_CHANNEL_INIT_H_
+
+#include "base/memory/ref_counted.h"
+#include "base/memory/weak_ptr.h"
+#include "base/platform_file.h"
+#include "mojo/common/mojo_common_export.h"
+#include "mojo/public/cpp/system/core.h"
+
+namespace base {
+class MessageLoopProxy;
+class TaskRunner;
+}
+
+namespace mojo {
+namespace embedder {
+struct ChannelInfo;
+}
+
+namespace common {
+
+// MojoChannelInit handle creation (and destruction) of the mojo channel. It is
+// expected that this class is created and destroyed on the main thread.
+class MOJO_COMMON_EXPORT MojoChannelInit {
+ public:
+  MojoChannelInit();
+  ~MojoChannelInit();
+
+  // Inits the channel. This takes ownership of |file|.
+  void Init(base::PlatformFile file,
+            scoped_refptr<base::TaskRunner> io_thread_task_runner);
+
+  bool is_handle_valid() const { return bootstrap_message_pipe_.is_valid(); }
+
+  mojo::ScopedMessagePipeHandle bootstrap_message_pipe() {
+    return bootstrap_message_pipe_.Pass();
+  }
+
+ private:
+  // Invoked on the main thread once the channel has been established.
+  static void OnCreatedChannel(
+      base::WeakPtr<MojoChannelInit> host,
+      scoped_refptr<base::TaskRunner> io_thread,
+      embedder::ChannelInfo* channel);
+
+  scoped_refptr<base::TaskRunner> io_thread_task_runner_;
+
+  // If non-null the channel has been established.
+  embedder::ChannelInfo* channel_info_;
+
+  // The handle from channel creation.
+  mojo::ScopedMessagePipeHandle bootstrap_message_pipe_;
+
+  base::WeakPtrFactory<MojoChannelInit> weak_factory_;
+
+  DISALLOW_COPY_AND_ASSIGN(MojoChannelInit);
+};
+
+}  // namespace common
+}  // namespace mojo
+
+#endif  // MOJO_COMMON_MOJO_CHANNEL_INIT_H_
diff --git a/mojo/embedder/embedder.cc b/mojo/embedder/embedder.cc
index 7698160..e8c6e8e 100644
--- a/mojo/embedder/embedder.cc
+++ b/mojo/embedder/embedder.cc
@@ -44,6 +44,8 @@
   // Attach the message pipe endpoint.
   system::MessageInTransit::EndpointId endpoint_id =
       channel_info->channel->AttachMessagePipeEndpoint(message_pipe, 1);
+  // We shouldn't get |kInvalidEndpointId| here -- since |CreateChannel()| is
+  // responsible for the local endpoint, and won't close it.
   DCHECK_EQ(endpoint_id, system::Channel::kBootstrapEndpointId);
   success = channel_info->channel->RunMessagePipeEndpoint(
       system::Channel::kBootstrapEndpointId,
diff --git a/mojo/environment/default_async_waiter_impl.h b/mojo/environment/default_async_waiter_impl.h
index 266a70f..8e697cb 100644
--- a/mojo/environment/default_async_waiter_impl.h
+++ b/mojo/environment/default_async_waiter_impl.h
@@ -6,7 +6,7 @@
 #define MOJO_ENVIRONMENT_DEFAULT_ASYNC_WAITER_IMPL_H_
 
 #include "mojo/environment/mojo_environment_impl_export.h"
-#include "mojo/public/c/system/async_waiter.h"
+#include "mojo/public/c/environment/async_waiter.h"
 
 namespace mojo {
 namespace internal {
diff --git a/mojo/examples/sample_view_manager_app/sample_view_manager_app.cc b/mojo/examples/sample_view_manager_app/sample_view_manager_app.cc
new file mode 100644
index 0000000..c6d6e7c
--- /dev/null
+++ b/mojo/examples/sample_view_manager_app/sample_view_manager_app.cc
@@ -0,0 +1,74 @@
+// 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.
+
+#include "base/bind.h"
+#include "mojo/public/cpp/bindings/allocation_scope.h"
+#include "mojo/public/cpp/bindings/remote_ptr.h"
+#include "mojo/public/cpp/environment/environment.h"
+#include "mojo/public/cpp/shell/application.h"
+#include "mojo/public/cpp/system/core.h"
+#include "mojo/public/cpp/system/macros.h"
+#include "mojo/public/cpp/utility/run_loop.h"
+#include "mojo/public/interfaces/shell/shell.mojom.h"
+#include "mojo/services/public/interfaces/view_manager/view_manager.mojom.h"
+
+#if defined(WIN32)
+#if !defined(CDECL)
+#define CDECL __cdecl
+#endif
+#define SAMPLE_APP_EXPORT __declspec(dllexport)
+#else
+#define CDECL
+#define SAMPLE_APP_EXPORT __attribute__((visibility("default")))
+#endif
+
+namespace mojo {
+namespace examples {
+
+class SampleApp : public Application,
+                  public services::view_manager::ViewManagerClient {
+ public:
+  explicit SampleApp(MojoHandle shell_handle) : Application(shell_handle) {
+    InterfacePipe<services::view_manager::ViewManager, AnyInterface>
+        view_manager_pipe;
+    AllocationScope scope;
+    shell()->Connect("mojo:mojo_view_manager",
+                     view_manager_pipe.handle_to_peer.Pass());
+    view_manager_.reset(view_manager_pipe.handle_to_self.Pass(), this);
+    view_manager_->CreateNode(1, base::Bind(&SampleApp::OnCreatedView,
+                                            base::Unretained(this)));
+  }
+
+  virtual ~SampleApp() {
+  }
+
+  // ViewManagerClient::
+  virtual void OnConnectionEstablished(uint16_t connection_id) OVERRIDE {
+  }
+  virtual void OnNodeHierarchyChanged(uint32_t node,
+                                      uint32_t new_parent,
+                                      uint32_t old_parent,
+                                      int32_t change_id) OVERRIDE {
+  }
+
+ private:
+  void OnCreatedView(bool success) {
+    DCHECK(success);
+  }
+
+  RemotePtr<services::view_manager::ViewManager> view_manager_;
+};
+
+}  // namespace examples
+}  // namespace mojo
+
+extern "C" SAMPLE_APP_EXPORT MojoResult CDECL MojoMain(
+    MojoHandle shell_handle) {
+  mojo::Environment env;
+  mojo::RunLoop loop;
+
+  mojo::examples::SampleApp app(shell_handle);
+  loop.Run();
+  return MOJO_RESULT_OK;
+}
diff --git a/mojo/examples/view_manager/DEPS b/mojo/examples/view_manager/DEPS
deleted file mode 100644
index 8cb61f5..0000000
--- a/mojo/examples/view_manager/DEPS
+++ /dev/null
@@ -1,4 +0,0 @@
-include_rules = [
-  "+ui/events",
-  "+ui/gfx",
-]
diff --git a/mojo/examples/view_manager/view_manager.cc b/mojo/examples/view_manager/view_manager.cc
deleted file mode 100644
index e10363b..0000000
--- a/mojo/examples/view_manager/view_manager.cc
+++ /dev/null
@@ -1,150 +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.
-
-#include <stdio.h>
-
-#include "base/logging.h"
-#include "base/macros.h"
-#include "base/memory/scoped_vector.h"
-#include "base/message_loop/message_loop.h"
-#include "mojo/examples/launcher/launcher.mojom.h"
-#include "mojo/examples/view_manager/view_manager.mojom.h"
-#include "mojo/public/cpp/bindings/allocation_scope.h"
-#include "mojo/public/cpp/bindings/remote_ptr.h"
-#include "mojo/public/cpp/shell/application.h"
-#include "mojo/public/cpp/system/core.h"
-#include "mojo/public/interfaces/shell/shell.mojom.h"
-#include "mojo/services/native_viewport/geometry_conversions.h"
-#include "mojo/services/native_viewport/native_viewport.mojom.h"
-#include "ui/events/event_constants.h"
-#include "ui/events/keycodes/keyboard_codes.h"
-#include "ui/gfx/rect.h"
-
-#if defined(WIN32)
-#if !defined(CDECL)
-#define CDECL __cdecl)
-#endif
-#define VIEW_MANAGER_EXPORT __declspec(dllexport)
-#else
-#define CDECL
-#define VIEW_MANAGER_EXPORT __attribute__((visibility("default")))
-#endif
-
-namespace mojo {
-namespace examples {
-
-class ViewImpl : public View {
- public:
-  explicit ViewImpl(ScopedViewClientHandle handle)
-      : id_(-1),
-        client_(handle.Pass(), this) {}
-  virtual ~ViewImpl() {}
-
- private:
-  // Overridden from View:
-  virtual void SetId(int view_id) OVERRIDE {
-    id_ = view_id;
-  }
-  virtual void GetId(const mojo::Callback<void(int32_t)>& callback) OVERRIDE {
-    callback.Run(id_);
-  }
-
-  int id_;
-  RemotePtr<ViewClient> client_;
-
-  DISALLOW_COPY_AND_ASSIGN(ViewImpl);
-};
-
-class ViewManagerImpl : public Service<ViewManager, ViewManagerImpl>,
-                        public NativeViewportClient,
-                        public LauncherClient {
- public:
-  explicit ViewManagerImpl() {
-    InitNativeViewport();
-  }
-
- private:
-  // Overridden from ViewManager:
-  virtual void CreateView(const Callback<void(ScopedViewHandle)>& callback)
-      OVERRIDE {
-    InterfacePipe<View> pipe;
-    views_.push_back(new ViewImpl(pipe.handle_to_peer.Pass()));
-    callback.Run(pipe.handle_to_self.Pass());
-  }
-
-  // Overridden from NativeViewportClient:
-  virtual void OnCreated() OVERRIDE {
-  }
-  virtual void OnDestroyed() OVERRIDE {
-    base::MessageLoop::current()->Quit();
-  }
-  virtual void OnBoundsChanged(const Rect& bounds) OVERRIDE {
-    // TODO(beng):
-  }
-  virtual void OnEvent(const Event& event,
-                       const mojo::Callback<void()>& callback) OVERRIDE {
-    if (event.action() == ui::ET_KEY_RELEASED) {
-      if (event.key_data().key_code() == ui::VKEY_L &&
-          (event.flags() & ui::EF_CONTROL_DOWN)) {
-        InitLauncher();
-        launcher_->Show();
-      }
-    }
-    callback.Run();
-  }
-
-  // Overridden from LauncherClient:
-  virtual void OnURLEntered(const mojo::String& url) OVERRIDE {
-    std::string url_spec = url.To<std::string>();
-    printf("Received URL from launcher app: %s\n", url_spec.c_str());
-    launcher_->Hide();
-  }
-
-  void InitNativeViewport() {
-    InterfacePipe<NativeViewport, AnyInterface> pipe;
-
-    AllocationScope scope;
-    shell()->Connect("mojo:mojo_native_viewport_service",
-                     pipe.handle_to_peer.Pass());
-
-    native_viewport_.reset(pipe.handle_to_self.Pass(), this);
-    native_viewport_->Create(gfx::Rect(50, 50, 800, 600));
-    native_viewport_->Show();
-  }
-
-  void InitLauncher() {
-    if (!launcher_.is_null())
-      return;
-
-    InterfacePipe<Launcher, AnyInterface> pipe;
-
-    AllocationScope scope;
-    shell()->Connect("mojo:mojo_launcher", pipe.handle_to_peer.Pass());
-
-    launcher_.reset(pipe.handle_to_self.Pass(), this);
-  }
-
-  void DidCreateContext() {
-  }
-
-  ScopedVector<ViewImpl> views_;
-  RemotePtr<NativeViewport> native_viewport_;
-  RemotePtr<Launcher> launcher_;
-
-  DISALLOW_COPY_AND_ASSIGN(ViewManagerImpl);
-};
-
-}  // namespace examples
-}  // namespace mojo
-
-extern "C" VIEW_MANAGER_EXPORT MojoResult CDECL MojoMain(
-    MojoHandle shell_handle) {
-  base::MessageLoop loop;
-  mojo::Application app(shell_handle);
-  app.AddServiceFactory(
-      new mojo::ServiceFactory<mojo::examples::ViewManagerImpl>);
-  loop.Run();
-
-  return MOJO_RESULT_OK;
-}
diff --git a/mojo/examples/view_manager/view_manager.mojom b/mojo/examples/view_manager/view_manager.mojom
deleted file mode 100644
index 56beea4..0000000
--- a/mojo/examples/view_manager/view_manager.mojom
+++ /dev/null
@@ -1,26 +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.
-
-module mojo {
-
-[Peer=ViewClient]
-interface View {
-  SetId(int32 id);
-  GetId() => (int32 id);
-};
-
-[Peer=View]
-interface ViewClient {
-};
-
-[Peer=ViewManagerClient]
-interface ViewManager {
-  CreateView() => (View view);
-};
-
-[Peer=ViewManager]
-interface ViewManagerClient {
-};
-
-}
diff --git a/mojo/mojo.gyp b/mojo/mojo.gyp
index 86c1f94..4db1476 100644
--- a/mojo/mojo.gyp
+++ b/mojo/mojo.gyp
@@ -59,7 +59,17 @@
           'dependencies': [
             'mojo_aura_demo',
             'mojo_launcher',
+            'mojo_sample_view_manager_app',
             'mojo_view_manager',
+            'mojo_view_manager_unittests',
+          ],
+        }],
+        ['OS == "android"', {
+          'dependencies': [
+            'mojo_public_java',
+            'mojo_system_java',
+            'libmojo_system_java',
+            'mojo_test_apk',
           ],
         }],
       ]
@@ -279,6 +289,8 @@
         'common/message_pump_mojo.cc',
         'common/message_pump_mojo.h',
         'common/message_pump_mojo_handler.h',
+        'common/mojo_channel_init.cc',
+        'common/mojo_channel_init.h',
         'common/time_helper.cc',
         'common/time_helper.h',
       ],
@@ -523,6 +535,8 @@
         'bindings/js/handle.h',
         'bindings/js/support.cc',
         'bindings/js/support.h',
+        'bindings/js/unicode.cc',
+        'bindings/js/unicode.h',
         'bindings/js/waiting_callback.cc',
         'bindings/js/waiting_callback.h',
       ],
@@ -534,7 +548,7 @@
         '../gin/gin.gyp:gin_test',
         'mojo_js_bindings_lib',
         'mojo_run_all_unittests',
-        'mojo_sample_service',
+        'mojo_public_test_interfaces',
       ],
       'sources': [
         'bindings/js/run_js_tests.cc',
@@ -560,6 +574,83 @@
     ['OS=="android"', {
       'targets': [
         {
+          'target_name': 'mojo_jni_headers',
+          'type': 'none',
+          'dependencies': [
+            'mojo_java_set_jni_headers',
+          ],
+          'sources': [
+            'android/javatests/src/org/chromium/mojo/system/CoreTest.java',
+            'android/system/src/org/chromium/mojo/system/CoreImpl.java',
+            'services/native_viewport/android/src/org/chromium/mojo/NativeViewportAndroid.java',
+            'shell/android/apk/src/org/chromium/mojo_shell_apk/MojoMain.java',
+          ],
+          'variables': {
+            'jni_gen_package': 'mojo',
+            'jni_generator_ptr_type': 'long',
+         },
+          'includes': [ '../build/jni_generator.gypi' ],
+        },
+        {
+          'target_name': 'mojo_system_java',
+          'type': 'none',
+          'dependencies': [
+            '../base/base.gyp:base_java',
+            'mojo_public_java',
+          ],
+          'variables': {
+            'java_in_dir': '<(DEPTH)/mojo/android/system',
+          },
+          'includes': [ '../build/java.gypi' ],
+        },
+        {
+          'target_name': 'libmojo_system_java',
+          'type': 'static_library',
+          'dependencies': [
+            '../base/base.gyp:base',
+            '../base/third_party/dynamic_annotations/dynamic_annotations.gyp:dynamic_annotations',
+            'mojo_common_lib',
+            'mojo_environment_chromium',
+            'mojo_jni_headers',
+            'mojo_shell_bindings',
+            'mojo_shell_lib',
+          ],
+          'sources': [
+            'android/system/core_impl.cc',
+            'android/system/core_impl.h',
+          ],
+        },
+        {
+          'target_name': 'libmojo_java_unittest',
+          'type': 'shared_library',
+          'dependencies': [
+            '../base/base.gyp:base',
+            'libmojo_system_java',
+            'mojo_jni_headers',
+          ],
+          'sources': [
+            'android/javatests/core_test.cc',
+            'android/javatests/core_test.h',
+            'android/javatests/init_library.cc',
+          ],
+        },
+        {
+          'target_name': 'mojo_test_apk',
+          'type': 'none',
+          'dependencies': [
+            'mojo_system_java',
+            '../base/base.gyp:base_java_test_support',
+          ],
+          'variables': {
+            'apk_name': 'MojoTest',
+            'java_in_dir': '<(DEPTH)/mojo/android/javatests',
+            'resource_dir': '<(DEPTH)/mojo/android/javatests/apk',
+            'native_lib_target': 'libmojo_java_unittest',
+            'is_test_apk': 1,
+          },
+          'includes': [ '../build/java_apk.gypi' ],
+        },
+        {
           'target_name': 'mojo_native_viewport_java',
           'type': 'none',
           'dependencies': [
@@ -581,22 +672,6 @@
           'includes': [ '../build/jar_file_jni_generator.gypi' ],
         },
         {
-          'target_name': 'mojo_jni_headers',
-          'type': 'none',
-          'dependencies': [
-            'mojo_java_set_jni_headers',
-          ],
-          'sources': [
-            'services/native_viewport/android/src/org/chromium/mojo/NativeViewportAndroid.java',
-            'shell/android/apk/src/org/chromium/mojo_shell_apk/MojoMain.java',
-          ],
-          'variables': {
-            'jni_gen_package': 'mojo',
-            'jni_generator_ptr_type': 'long',
-         },
-          'includes': [ '../build/jni_generator.gypi' ],
-        },
-        {
           'target_name': 'libmojo_shell',
           'type': 'shared_library',
           'dependencies': [
diff --git a/mojo/mojo_apps.gypi b/mojo/mojo_apps.gypi
index 62d904d..66afb47 100644
--- a/mojo/mojo_apps.gypi
+++ b/mojo/mojo_apps.gypi
@@ -43,7 +43,7 @@
         '../gin/gin.gyp:gin_test',
         'mojo_js_lib',
         'mojo_run_all_unittests',
-        'mojo_sample_service',
+        'mojo_public_test_interfaces',
       ],
       'sources': [
         'apps/js/test/run_apps_js_tests.cc',
diff --git a/mojo/mojo_bindings.target.darwin-arm.mk b/mojo/mojo_bindings.target.darwin-arm.mk
index 9f6e80f..04f97b8 100644
--- a/mojo/mojo_bindings.target.darwin-arm.mk
+++ b/mojo/mojo_bindings.target.darwin-arm.mk
@@ -230,7 +230,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_bindings.target.darwin-mips.mk b/mojo/mojo_bindings.target.darwin-mips.mk
index 21ef642..d455f4f 100644
--- a/mojo/mojo_bindings.target.darwin-mips.mk
+++ b/mojo/mojo_bindings.target.darwin-mips.mk
@@ -226,7 +226,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_bindings.target.darwin-x86.mk b/mojo/mojo_bindings.target.darwin-x86.mk
index efd4c43..0e0af9f 100644
--- a/mojo/mojo_bindings.target.darwin-x86.mk
+++ b/mojo/mojo_bindings.target.darwin-x86.mk
@@ -228,7 +228,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_bindings.target.darwin-x86_64.mk b/mojo/mojo_bindings.target.darwin-x86_64.mk
index 3cfb6e3..6fbbc7b 100644
--- a/mojo/mojo_bindings.target.darwin-x86_64.mk
+++ b/mojo/mojo_bindings.target.darwin-x86_64.mk
@@ -228,7 +228,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_bindings.target.linux-arm.mk b/mojo/mojo_bindings.target.linux-arm.mk
index 9f6e80f..04f97b8 100644
--- a/mojo/mojo_bindings.target.linux-arm.mk
+++ b/mojo/mojo_bindings.target.linux-arm.mk
@@ -230,7 +230,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_bindings.target.linux-mips.mk b/mojo/mojo_bindings.target.linux-mips.mk
index 21ef642..d455f4f 100644
--- a/mojo/mojo_bindings.target.linux-mips.mk
+++ b/mojo/mojo_bindings.target.linux-mips.mk
@@ -226,7 +226,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_bindings.target.linux-x86.mk b/mojo/mojo_bindings.target.linux-x86.mk
index efd4c43..0e0af9f 100644
--- a/mojo/mojo_bindings.target.linux-x86.mk
+++ b/mojo/mojo_bindings.target.linux-x86.mk
@@ -228,7 +228,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_bindings.target.linux-x86_64.mk b/mojo/mojo_bindings.target.linux-x86_64.mk
index 3cfb6e3..6fbbc7b 100644
--- a/mojo/mojo_bindings.target.linux-x86_64.mk
+++ b/mojo/mojo_bindings.target.linux-x86_64.mk
@@ -228,7 +228,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_common_lib.target.darwin-arm.mk b/mojo/mojo_common_lib.target.darwin-arm.mk
index 68b35f7..ebf534c 100644
--- a/mojo/mojo_common_lib.target.darwin-arm.mk
+++ b/mojo/mojo_common_lib.target.darwin-arm.mk
@@ -28,6 +28,7 @@
 	mojo/common/environment_data.cc \
 	mojo/common/handle_watcher.cc \
 	mojo/common/message_pump_mojo.cc \
+	mojo/common/mojo_channel_init.cc \
 	mojo/common/time_helper.cc
 
 
@@ -227,7 +228,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_common_lib.target.darwin-mips.mk b/mojo/mojo_common_lib.target.darwin-mips.mk
index b1a8bd7..f059697 100644
--- a/mojo/mojo_common_lib.target.darwin-mips.mk
+++ b/mojo/mojo_common_lib.target.darwin-mips.mk
@@ -28,6 +28,7 @@
 	mojo/common/environment_data.cc \
 	mojo/common/handle_watcher.cc \
 	mojo/common/message_pump_mojo.cc \
+	mojo/common/mojo_channel_init.cc \
 	mojo/common/time_helper.cc
 
 
@@ -223,7 +224,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_common_lib.target.darwin-x86.mk b/mojo/mojo_common_lib.target.darwin-x86.mk
index 0909f0b..14e7ed7 100644
--- a/mojo/mojo_common_lib.target.darwin-x86.mk
+++ b/mojo/mojo_common_lib.target.darwin-x86.mk
@@ -28,6 +28,7 @@
 	mojo/common/environment_data.cc \
 	mojo/common/handle_watcher.cc \
 	mojo/common/message_pump_mojo.cc \
+	mojo/common/mojo_channel_init.cc \
 	mojo/common/time_helper.cc
 
 
@@ -225,7 +226,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_common_lib.target.darwin-x86_64.mk b/mojo/mojo_common_lib.target.darwin-x86_64.mk
index 370d662..c777ccc 100644
--- a/mojo/mojo_common_lib.target.darwin-x86_64.mk
+++ b/mojo/mojo_common_lib.target.darwin-x86_64.mk
@@ -28,6 +28,7 @@
 	mojo/common/environment_data.cc \
 	mojo/common/handle_watcher.cc \
 	mojo/common/message_pump_mojo.cc \
+	mojo/common/mojo_channel_init.cc \
 	mojo/common/time_helper.cc
 
 
@@ -225,7 +226,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_common_lib.target.linux-arm.mk b/mojo/mojo_common_lib.target.linux-arm.mk
index 68b35f7..ebf534c 100644
--- a/mojo/mojo_common_lib.target.linux-arm.mk
+++ b/mojo/mojo_common_lib.target.linux-arm.mk
@@ -28,6 +28,7 @@
 	mojo/common/environment_data.cc \
 	mojo/common/handle_watcher.cc \
 	mojo/common/message_pump_mojo.cc \
+	mojo/common/mojo_channel_init.cc \
 	mojo/common/time_helper.cc
 
 
@@ -227,7 +228,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_common_lib.target.linux-mips.mk b/mojo/mojo_common_lib.target.linux-mips.mk
index b1a8bd7..f059697 100644
--- a/mojo/mojo_common_lib.target.linux-mips.mk
+++ b/mojo/mojo_common_lib.target.linux-mips.mk
@@ -28,6 +28,7 @@
 	mojo/common/environment_data.cc \
 	mojo/common/handle_watcher.cc \
 	mojo/common/message_pump_mojo.cc \
+	mojo/common/mojo_channel_init.cc \
 	mojo/common/time_helper.cc
 
 
@@ -223,7 +224,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_common_lib.target.linux-x86.mk b/mojo/mojo_common_lib.target.linux-x86.mk
index 0909f0b..14e7ed7 100644
--- a/mojo/mojo_common_lib.target.linux-x86.mk
+++ b/mojo/mojo_common_lib.target.linux-x86.mk
@@ -28,6 +28,7 @@
 	mojo/common/environment_data.cc \
 	mojo/common/handle_watcher.cc \
 	mojo/common/message_pump_mojo.cc \
+	mojo/common/mojo_channel_init.cc \
 	mojo/common/time_helper.cc
 
 
@@ -225,7 +226,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_common_lib.target.linux-x86_64.mk b/mojo/mojo_common_lib.target.linux-x86_64.mk
index 370d662..c777ccc 100644
--- a/mojo/mojo_common_lib.target.linux-x86_64.mk
+++ b/mojo/mojo_common_lib.target.linux-x86_64.mk
@@ -28,6 +28,7 @@
 	mojo/common/environment_data.cc \
 	mojo/common/handle_watcher.cc \
 	mojo/common/message_pump_mojo.cc \
+	mojo/common/mojo_channel_init.cc \
 	mojo/common/time_helper.cc
 
 
@@ -225,7 +226,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_environment_chromium.target.darwin-arm.mk b/mojo/mojo_environment_chromium.target.darwin-arm.mk
index 6094621..b7e5624 100644
--- a/mojo/mojo_environment_chromium.target.darwin-arm.mk
+++ b/mojo/mojo_environment_chromium.target.darwin-arm.mk
@@ -223,7 +223,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_environment_chromium.target.darwin-mips.mk b/mojo/mojo_environment_chromium.target.darwin-mips.mk
index c3ed74f..aca1c30 100644
--- a/mojo/mojo_environment_chromium.target.darwin-mips.mk
+++ b/mojo/mojo_environment_chromium.target.darwin-mips.mk
@@ -219,7 +219,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_environment_chromium.target.darwin-x86.mk b/mojo/mojo_environment_chromium.target.darwin-x86.mk
index f59dfba..435cc4c 100644
--- a/mojo/mojo_environment_chromium.target.darwin-x86.mk
+++ b/mojo/mojo_environment_chromium.target.darwin-x86.mk
@@ -221,7 +221,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_environment_chromium.target.darwin-x86_64.mk b/mojo/mojo_environment_chromium.target.darwin-x86_64.mk
index d408e14..8062f99 100644
--- a/mojo/mojo_environment_chromium.target.darwin-x86_64.mk
+++ b/mojo/mojo_environment_chromium.target.darwin-x86_64.mk
@@ -221,7 +221,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_environment_chromium.target.linux-arm.mk b/mojo/mojo_environment_chromium.target.linux-arm.mk
index 6094621..b7e5624 100644
--- a/mojo/mojo_environment_chromium.target.linux-arm.mk
+++ b/mojo/mojo_environment_chromium.target.linux-arm.mk
@@ -223,7 +223,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_environment_chromium.target.linux-mips.mk b/mojo/mojo_environment_chromium.target.linux-mips.mk
index c3ed74f..aca1c30 100644
--- a/mojo/mojo_environment_chromium.target.linux-mips.mk
+++ b/mojo/mojo_environment_chromium.target.linux-mips.mk
@@ -219,7 +219,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_environment_chromium.target.linux-x86.mk b/mojo/mojo_environment_chromium.target.linux-x86.mk
index f59dfba..435cc4c 100644
--- a/mojo/mojo_environment_chromium.target.linux-x86.mk
+++ b/mojo/mojo_environment_chromium.target.linux-x86.mk
@@ -221,7 +221,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_environment_chromium.target.linux-x86_64.mk b/mojo/mojo_environment_chromium.target.linux-x86_64.mk
index d408e14..8062f99 100644
--- a/mojo/mojo_environment_chromium.target.linux-x86_64.mk
+++ b/mojo/mojo_environment_chromium.target.linux-x86_64.mk
@@ -221,7 +221,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_environment_chromium_impl.target.darwin-arm.mk b/mojo/mojo_environment_chromium_impl.target.darwin-arm.mk
index aea2ccd..9b04cb4 100644
--- a/mojo/mojo_environment_chromium_impl.target.darwin-arm.mk
+++ b/mojo/mojo_environment_chromium_impl.target.darwin-arm.mk
@@ -224,7 +224,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_environment_chromium_impl.target.darwin-mips.mk b/mojo/mojo_environment_chromium_impl.target.darwin-mips.mk
index d3991d5..b683e47 100644
--- a/mojo/mojo_environment_chromium_impl.target.darwin-mips.mk
+++ b/mojo/mojo_environment_chromium_impl.target.darwin-mips.mk
@@ -220,7 +220,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_environment_chromium_impl.target.darwin-x86.mk b/mojo/mojo_environment_chromium_impl.target.darwin-x86.mk
index f9c06ba..0ce4334 100644
--- a/mojo/mojo_environment_chromium_impl.target.darwin-x86.mk
+++ b/mojo/mojo_environment_chromium_impl.target.darwin-x86.mk
@@ -222,7 +222,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_environment_chromium_impl.target.darwin-x86_64.mk b/mojo/mojo_environment_chromium_impl.target.darwin-x86_64.mk
index 969b92b..be57920 100644
--- a/mojo/mojo_environment_chromium_impl.target.darwin-x86_64.mk
+++ b/mojo/mojo_environment_chromium_impl.target.darwin-x86_64.mk
@@ -222,7 +222,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_environment_chromium_impl.target.linux-arm.mk b/mojo/mojo_environment_chromium_impl.target.linux-arm.mk
index aea2ccd..9b04cb4 100644
--- a/mojo/mojo_environment_chromium_impl.target.linux-arm.mk
+++ b/mojo/mojo_environment_chromium_impl.target.linux-arm.mk
@@ -224,7 +224,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_environment_chromium_impl.target.linux-mips.mk b/mojo/mojo_environment_chromium_impl.target.linux-mips.mk
index d3991d5..b683e47 100644
--- a/mojo/mojo_environment_chromium_impl.target.linux-mips.mk
+++ b/mojo/mojo_environment_chromium_impl.target.linux-mips.mk
@@ -220,7 +220,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_environment_chromium_impl.target.linux-x86.mk b/mojo/mojo_environment_chromium_impl.target.linux-x86.mk
index f9c06ba..0ce4334 100644
--- a/mojo/mojo_environment_chromium_impl.target.linux-x86.mk
+++ b/mojo/mojo_environment_chromium_impl.target.linux-x86.mk
@@ -222,7 +222,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_environment_chromium_impl.target.linux-x86_64.mk b/mojo/mojo_environment_chromium_impl.target.linux-x86_64.mk
index 969b92b..be57920 100644
--- a/mojo/mojo_environment_chromium_impl.target.linux-x86_64.mk
+++ b/mojo/mojo_environment_chromium_impl.target.linux-x86_64.mk
@@ -222,7 +222,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_examples.gypi b/mojo/mojo_examples.gypi
index 590285f..4de6fbd 100644
--- a/mojo/mojo_examples.gypi
+++ b/mojo/mojo_examples.gypi
@@ -9,9 +9,8 @@
       'type': 'shared_library',
       'dependencies': [
         # TODO(darin): we should not be linking against these libraries!
-        '../ui/gfx/gfx.gyp:gfx',
+        '../ui/events/events.gyp:events',
         '../ui/gfx/gfx.gyp:gfx_geometry',
-        '../ui/gl/gl.gyp:gl',
         'mojo_bindings',
         'mojo_environment_standalone',
         'mojo_gles2',
@@ -277,47 +276,25 @@
           'includes': [ 'build/package_app.gypi' ],
         },
         {
-          'target_name': 'mojo_view_manager_bindings',
-          'type': 'static_library',
-          'sources': [
-            'examples/view_manager/view_manager.mojom',
-          ],
-          'variables': {
-            'mojom_base_output_dir': 'mojo',
-          },
-          'includes': [ 'public/tools/bindings/mojom_bindings_generator.gypi' ],
-          'export_dependent_settings': [
-            'mojo_bindings',
-          ],
-          'dependencies': [
-            'mojo_bindings',
-          ],
-        },
-        {
-          'target_name': 'mojo_view_manager',
+          'target_name': 'mojo_sample_view_manager_app',
           'type': 'shared_library',
           'dependencies': [
             '../base/base.gyp:base',
+            '../ui/gfx/gfx.gyp:gfx',
             '../ui/gfx/gfx.gyp:gfx_geometry',
-            'mojo_common_lib',
-            'mojo_environment_chromium',
-            'mojo_launcher_bindings',
-            'mojo_native_viewport_bindings',
-            'mojo_shell_client',
-            'mojo_system_impl',
+            '../ui/gl/gl.gyp:gl',
+            'mojo_bindings',
+            'mojo_environment_standalone',
+            'mojo_gles2',
             'mojo_view_manager_bindings',
+            'mojo_shell_client',
+            'mojo_system',
+            'mojo_utility',
           ],
           'sources': [
-            'examples/view_manager/view_manager.cc',
+            'examples/sample_view_manager_app/sample_view_manager_app.cc',
           ],
         },
-        {
-          'target_name': 'package_mojo_view_manager',
-          'variables': {
-            'app_name': 'mojo_view_manager',
-          },
-          'includes': [ 'build/package_app.gypi' ],
-        },
       ],
     }],
   ],
diff --git a/mojo/mojo_js_bindings_lib.target.darwin-arm.mk b/mojo/mojo_js_bindings_lib.target.darwin-arm.mk
index e6d6290..447aa89 100644
--- a/mojo/mojo_js_bindings_lib.target.darwin-arm.mk
+++ b/mojo/mojo_js_bindings_lib.target.darwin-arm.mk
@@ -28,6 +28,7 @@
 	mojo/bindings/js/core.cc \
 	mojo/bindings/js/handle.cc \
 	mojo/bindings/js/support.cc \
+	mojo/bindings/js/unicode.cc \
 	mojo/bindings/js/waiting_callback.cc
 
 
@@ -231,7 +232,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_js_bindings_lib.target.darwin-mips.mk b/mojo/mojo_js_bindings_lib.target.darwin-mips.mk
index fbe094e..41c997a 100644
--- a/mojo/mojo_js_bindings_lib.target.darwin-mips.mk
+++ b/mojo/mojo_js_bindings_lib.target.darwin-mips.mk
@@ -28,6 +28,7 @@
 	mojo/bindings/js/core.cc \
 	mojo/bindings/js/handle.cc \
 	mojo/bindings/js/support.cc \
+	mojo/bindings/js/unicode.cc \
 	mojo/bindings/js/waiting_callback.cc
 
 
@@ -227,7 +228,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_js_bindings_lib.target.darwin-x86.mk b/mojo/mojo_js_bindings_lib.target.darwin-x86.mk
index e7af031..d5cf56f 100644
--- a/mojo/mojo_js_bindings_lib.target.darwin-x86.mk
+++ b/mojo/mojo_js_bindings_lib.target.darwin-x86.mk
@@ -28,6 +28,7 @@
 	mojo/bindings/js/core.cc \
 	mojo/bindings/js/handle.cc \
 	mojo/bindings/js/support.cc \
+	mojo/bindings/js/unicode.cc \
 	mojo/bindings/js/waiting_callback.cc
 
 
@@ -229,7 +230,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_js_bindings_lib.target.darwin-x86_64.mk b/mojo/mojo_js_bindings_lib.target.darwin-x86_64.mk
index 729edf8..8252f69 100644
--- a/mojo/mojo_js_bindings_lib.target.darwin-x86_64.mk
+++ b/mojo/mojo_js_bindings_lib.target.darwin-x86_64.mk
@@ -28,6 +28,7 @@
 	mojo/bindings/js/core.cc \
 	mojo/bindings/js/handle.cc \
 	mojo/bindings/js/support.cc \
+	mojo/bindings/js/unicode.cc \
 	mojo/bindings/js/waiting_callback.cc
 
 
@@ -229,7 +230,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_js_bindings_lib.target.linux-arm.mk b/mojo/mojo_js_bindings_lib.target.linux-arm.mk
index e6d6290..447aa89 100644
--- a/mojo/mojo_js_bindings_lib.target.linux-arm.mk
+++ b/mojo/mojo_js_bindings_lib.target.linux-arm.mk
@@ -28,6 +28,7 @@
 	mojo/bindings/js/core.cc \
 	mojo/bindings/js/handle.cc \
 	mojo/bindings/js/support.cc \
+	mojo/bindings/js/unicode.cc \
 	mojo/bindings/js/waiting_callback.cc
 
 
@@ -231,7 +232,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_js_bindings_lib.target.linux-mips.mk b/mojo/mojo_js_bindings_lib.target.linux-mips.mk
index fbe094e..41c997a 100644
--- a/mojo/mojo_js_bindings_lib.target.linux-mips.mk
+++ b/mojo/mojo_js_bindings_lib.target.linux-mips.mk
@@ -28,6 +28,7 @@
 	mojo/bindings/js/core.cc \
 	mojo/bindings/js/handle.cc \
 	mojo/bindings/js/support.cc \
+	mojo/bindings/js/unicode.cc \
 	mojo/bindings/js/waiting_callback.cc
 
 
@@ -227,7 +228,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_js_bindings_lib.target.linux-x86.mk b/mojo/mojo_js_bindings_lib.target.linux-x86.mk
index e7af031..d5cf56f 100644
--- a/mojo/mojo_js_bindings_lib.target.linux-x86.mk
+++ b/mojo/mojo_js_bindings_lib.target.linux-x86.mk
@@ -28,6 +28,7 @@
 	mojo/bindings/js/core.cc \
 	mojo/bindings/js/handle.cc \
 	mojo/bindings/js/support.cc \
+	mojo/bindings/js/unicode.cc \
 	mojo/bindings/js/waiting_callback.cc
 
 
@@ -229,7 +230,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_js_bindings_lib.target.linux-x86_64.mk b/mojo/mojo_js_bindings_lib.target.linux-x86_64.mk
index 729edf8..8252f69 100644
--- a/mojo/mojo_js_bindings_lib.target.linux-x86_64.mk
+++ b/mojo/mojo_js_bindings_lib.target.linux-x86_64.mk
@@ -28,6 +28,7 @@
 	mojo/bindings/js/core.cc \
 	mojo/bindings/js/handle.cc \
 	mojo/bindings/js/support.cc \
+	mojo/bindings/js/unicode.cc \
 	mojo/bindings/js/waiting_callback.cc
 
 
@@ -229,7 +230,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_public.gypi b/mojo/mojo_public.gypi
index 15eccb0..7f9c2f7 100644
--- a/mojo/mojo_public.gypi
+++ b/mojo/mojo_public.gypi
@@ -14,8 +14,18 @@
           '..',
         ],
       },
+      'all_dependent_settings': {
+        'conditions': [
+          # We need to be able to call the MojoSetSystemThunks() function in
+          # system_thunks.cc
+          ['OS=="android"', {
+            'ldflags!': [
+              '-Wl,--exclude-libs=ALL',
+            ],
+          }],
+        ],
+      },
       'sources': [
-        'public/c/system/async_waiter.h',
         'public/c/system/core.h',
         'public/c/system/macros.h',
         'public/c/system/system_export.h',
@@ -111,7 +121,7 @@
         'mojo_environment_standalone',
         'mojo_public_test_utils',
         'mojo_run_all_unittests',
-        'mojo_sample_service',
+        'mojo_public_test_interfaces',
         'mojo_utility',
       ],
       'sources': [
@@ -124,15 +134,7 @@
         'public/cpp/bindings/tests/router_unittest.cc',
         'public/cpp/bindings/tests/sample_service_unittest.cc',
         'public/cpp/bindings/tests/type_conversion_unittest.cc',
-        'public/interfaces/bindings/tests/math_calculator.mojom',
-        'public/interfaces/bindings/tests/sample_factory.mojom',
-        'public/interfaces/bindings/tests/sample_interfaces.mojom',
-        'public/interfaces/bindings/tests/test_structs.mojom',
       ],
-      'variables': {
-        'mojom_base_output_dir': 'mojo',
-      },
-      'includes': [ 'public/tools/bindings/mojom_bindings_generator.gypi' ],
     },
     {
       'target_name': 'mojo_public_environment_unittests',
@@ -256,12 +258,16 @@
       ],
     },
     {
-      'target_name': 'mojo_sample_service',
+      'target_name': 'mojo_public_test_interfaces',
       'type': 'static_library',
       'sources': [
-        'public/interfaces/bindings/tests/sample_service.mojom',
+        'public/interfaces/bindings/tests/math_calculator.mojom',
+        'public/interfaces/bindings/tests/sample_factory.mojom',
         'public/interfaces/bindings/tests/sample_import.mojom',
         'public/interfaces/bindings/tests/sample_import2.mojom',
+        'public/interfaces/bindings/tests/sample_interfaces.mojom',
+        'public/interfaces/bindings/tests/sample_service.mojom',
+        'public/interfaces/bindings/tests/test_structs.mojom',
       ],
       'variables': {
         'mojom_base_output_dir': 'mojo',
@@ -354,4 +360,18 @@
       ],
     },
   ],
+  'conditions': [
+    ['OS == "android"', {
+      'targets': [
+        {
+          'target_name': 'mojo_public_java',
+          'type': 'none',
+          'variables': {
+            'java_in_dir': 'public/java',
+          },
+          'includes': [ '../build/java.gypi' ],
+        },
+      ],
+    }],
+  ],
 }
diff --git a/mojo/mojo_service_manager.target.darwin-arm.mk b/mojo/mojo_service_manager.target.darwin-arm.mk
index 29faa1c..b90703c 100644
--- a/mojo/mojo_service_manager.target.darwin-arm.mk
+++ b/mojo/mojo_service_manager.target.darwin-arm.mk
@@ -232,7 +232,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_service_manager.target.darwin-mips.mk b/mojo/mojo_service_manager.target.darwin-mips.mk
index 705c431..3fe9c82 100644
--- a/mojo/mojo_service_manager.target.darwin-mips.mk
+++ b/mojo/mojo_service_manager.target.darwin-mips.mk
@@ -228,7 +228,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_service_manager.target.darwin-x86.mk b/mojo/mojo_service_manager.target.darwin-x86.mk
index bcf69b8..d953c97 100644
--- a/mojo/mojo_service_manager.target.darwin-x86.mk
+++ b/mojo/mojo_service_manager.target.darwin-x86.mk
@@ -228,7 +228,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_service_manager.target.darwin-x86_64.mk b/mojo/mojo_service_manager.target.darwin-x86_64.mk
index 1074db3..4868f83 100644
--- a/mojo/mojo_service_manager.target.darwin-x86_64.mk
+++ b/mojo/mojo_service_manager.target.darwin-x86_64.mk
@@ -230,7 +230,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_service_manager.target.linux-arm.mk b/mojo/mojo_service_manager.target.linux-arm.mk
index 29faa1c..b90703c 100644
--- a/mojo/mojo_service_manager.target.linux-arm.mk
+++ b/mojo/mojo_service_manager.target.linux-arm.mk
@@ -232,7 +232,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_service_manager.target.linux-mips.mk b/mojo/mojo_service_manager.target.linux-mips.mk
index 705c431..3fe9c82 100644
--- a/mojo/mojo_service_manager.target.linux-mips.mk
+++ b/mojo/mojo_service_manager.target.linux-mips.mk
@@ -228,7 +228,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_service_manager.target.linux-x86.mk b/mojo/mojo_service_manager.target.linux-x86.mk
index bcf69b8..d953c97 100644
--- a/mojo/mojo_service_manager.target.linux-x86.mk
+++ b/mojo/mojo_service_manager.target.linux-x86.mk
@@ -228,7 +228,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_service_manager.target.linux-x86_64.mk b/mojo/mojo_service_manager.target.linux-x86_64.mk
index 1074db3..4868f83 100644
--- a/mojo/mojo_service_manager.target.linux-x86_64.mk
+++ b/mojo/mojo_service_manager.target.linux-x86_64.mk
@@ -230,7 +230,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_services.gypi b/mojo/mojo_services.gypi
index 208f14b..3911a21 100644
--- a/mojo/mojo_services.gypi
+++ b/mojo/mojo_services.gypi
@@ -60,7 +60,8 @@
     },
     {
       'target_name': 'mojo_native_viewport_service',
-      'type': 'shared_library',
+      # This is linked directly into the embedder, so we make it a component.
+      'type': '<(component)',
       'dependencies': [
         '../base/base.gyp:base',
         '../ui/events/events.gyp:events',
@@ -100,5 +101,124 @@
         }],
       ],
     },
+    {
+      'target_name': 'mojo_view_manager_lib',
+      'type': 'static_library',
+      'dependencies': [
+        '../base/base.gyp:base',
+      ],
+      'sources': [
+        'services/public/cpp/view_manager/lib/view.cc',
+        'services/public/cpp/view_manager/lib/view_manager.cc',
+        'services/public/cpp/view_manager/lib/view_tree_host.cc',
+        'services/public/cpp/view_manager/lib/view_tree_node.cc',
+        'services/public/cpp/view_manager/lib/view_tree_node_observer.cc',
+        'services/public/cpp/view_manager/lib/view_tree_node_private.cc',
+        'services/public/cpp/view_manager/lib/view_tree_node_private.h',
+        'services/public/cpp/view_manager/view.h',
+        'services/public/cpp/view_manager/view_manager.h',
+        'services/public/cpp/view_manager/view_tree_host.h',
+        'services/public/cpp/view_manager/view_tree_node.h',
+        'services/public/cpp/view_manager/view_tree_node_observer.h',
+      ],
+    },
+    {
+      'target_name': 'mojo_view_manager_lib_unittests',
+      'type': 'executable',
+      'dependencies': [
+        '../base/base.gyp:base',
+        '../base/base.gyp:test_support_base',
+        '../testing/gtest.gyp:gtest',
+        'mojo_run_all_unittests',
+        'mojo_view_manager_lib',
+      ],
+      'sources': [
+        'services/public/cpp/view_manager/tests/view_unittest.cc',
+        'services/public/cpp/view_manager/tests/view_manager_unittest.cc',
+        'services/public/cpp/view_manager/tests/view_tree_host_unittest.cc',
+        'services/public/cpp/view_manager/tests/view_tree_node_unittest.cc',
+      ],
+    },
+  ],
+  'conditions': [
+    ['use_aura==1', {
+      'targets': [
+        {
+          'target_name': 'mojo_view_manager_bindings',
+          'type': 'static_library',
+          'sources': [
+            'services/public/interfaces/view_manager/view_manager.mojom',
+          ],
+          'variables': {
+            'mojom_base_output_dir': 'mojo',
+          },
+          'includes': [ 'public/tools/bindings/mojom_bindings_generator.gypi' ],
+          'export_dependent_settings': [
+            'mojo_bindings',
+          ],
+          'dependencies': [
+            'mojo_bindings',
+          ],
+        },
+        {
+          'target_name': 'mojo_view_manager',
+          'type': '<(component)',
+          'dependencies': [
+            '../base/base.gyp:base',
+            '../skia/skia.gyp:skia',
+            '../ui/aura/aura.gyp:aura',
+            '../ui/gfx/gfx.gyp:gfx_geometry',
+            'mojo_common_lib',
+            'mojo_environment_chromium',
+            'mojo_launcher_bindings',
+            'mojo_native_viewport_bindings',
+            'mojo_shell_client',
+            'mojo_system_impl',
+            'mojo_view_manager_bindings',
+          ],
+          'sources': [
+            'services/view_manager/ids.h',
+            'services/view_manager/node.cc',
+            'services/view_manager/node.h',
+            'services/view_manager/node_delegate.h',
+            'services/view_manager/root_node_manager.cc',
+            'services/view_manager/root_node_manager.h',
+            'services/view_manager/view_manager.cc',
+            'services/view_manager/view_manager_connection.cc',
+            'services/view_manager/view_manager_connection.h',
+            'services/view_manager/view_manager_export.h',
+          ],
+          'defines': [
+            'MOJO_VIEW_MANAGER_IMPLEMENTATION',
+          ],
+        },
+        {
+          'target_name': 'mojo_view_manager_unittests',
+          'type': 'executable',
+          'dependencies': [
+            '../base/base.gyp:base',
+            '../skia/skia.gyp:skia',
+            '../testing/gtest.gyp:gtest',
+            '../ui/aura/aura.gyp:aura',
+            'mojo_environment_chromium',
+            'mojo_run_all_unittests',
+            'mojo_shell_client',
+            'mojo_system_impl',
+            'mojo_view_manager',
+            'mojo_view_manager_bindings',
+          ],
+          'sources': [
+            'services/view_manager/view_manager_connection_unittest.cc',
+          ],
+        },
+        {
+          'target_name': 'package_mojo_view_manager',
+          'variables': {
+            'app_name': 'mojo_view_manager',
+          },
+          'includes': [ 'build/package_app.gypi' ],
+        },
+      ],
+    }],
   ],
 }
diff --git a/mojo/mojo_shell_bindings.target.darwin-arm.mk b/mojo/mojo_shell_bindings.target.darwin-arm.mk
index 34e0652..fd24e3b 100644
--- a/mojo/mojo_shell_bindings.target.darwin-arm.mk
+++ b/mojo/mojo_shell_bindings.target.darwin-arm.mk
@@ -15,12 +15,12 @@
 
 
 ### Generated for rule "mojo_mojo_gyp_mojo_shell_bindings_target_Generate_C___source_files_from_mojom_files":
-# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/parse/__init__.py', '../mojo/public/tools/bindings/pylib/parse/mojo_lexer.py', '../mojo/public/tools/bindings/pylib/parse/mojo_parser.py', '../mojo/public/tools/bindings/pylib/parse/mojo_translate.py', '../mojo/public/tools/bindings/pylib/generate/__init__.py', '../mojo/public/tools/bindings/pylib/generate/mojom.py', '../mojo/public/tools/bindings/pylib/generate/mojom_data.py', '../mojo/public/tools/bindings/pylib/generate/mojom_generator.py', '../mojo/public/tools/bindings/pylib/generate/mojom_pack.py', '../mojo/public/tools/bindings/pylib/generate/template_expander.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['public/interfaces/shell/shell.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', '%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
+# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/generate/data.py', '../mojo/public/tools/bindings/pylib/mojom/generate/generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/module.py', '../mojo/public/tools/bindings/pylib/mojom/generate/pack.py', '../mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py', '../mojo/public/tools/bindings/pylib/mojom/parse/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/parse/ast.py', '../mojo/public/tools/bindings/pylib/mojom/parse/lexer.py', '../mojo/public/tools/bindings/pylib/mojom/parse/parser.py', '../mojo/public/tools/bindings/pylib/mojom/parse/translate.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['public/interfaces/shell/shell.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', '%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
 $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: $(LOCAL_PATH)/mojo/public/interfaces/shell/shell.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_translate.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/template_expander.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: $(LOCAL_PATH)/mojo/public/interfaces/shell/shell.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/module.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/ast.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/translate.py $(GYP_TARGET_DEPENDENCIES)
 	mkdir -p $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell; cd $(gyp_local_path)/mojo; python ../mojo/public/tools/bindings/mojom_bindings_generator.py public/interfaces/shell/shell.mojom -d .. -o "$(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell"
 
 $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.h: $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc ;
@@ -244,7 +244,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_shell_bindings.target.darwin-mips.mk b/mojo/mojo_shell_bindings.target.darwin-mips.mk
index dcb5ada..3488379 100644
--- a/mojo/mojo_shell_bindings.target.darwin-mips.mk
+++ b/mojo/mojo_shell_bindings.target.darwin-mips.mk
@@ -15,12 +15,12 @@
 
 
 ### Generated for rule "mojo_mojo_gyp_mojo_shell_bindings_target_Generate_C___source_files_from_mojom_files":
-# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/parse/__init__.py', '../mojo/public/tools/bindings/pylib/parse/mojo_lexer.py', '../mojo/public/tools/bindings/pylib/parse/mojo_parser.py', '../mojo/public/tools/bindings/pylib/parse/mojo_translate.py', '../mojo/public/tools/bindings/pylib/generate/__init__.py', '../mojo/public/tools/bindings/pylib/generate/mojom.py', '../mojo/public/tools/bindings/pylib/generate/mojom_data.py', '../mojo/public/tools/bindings/pylib/generate/mojom_generator.py', '../mojo/public/tools/bindings/pylib/generate/mojom_pack.py', '../mojo/public/tools/bindings/pylib/generate/template_expander.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['public/interfaces/shell/shell.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', '%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
+# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/generate/data.py', '../mojo/public/tools/bindings/pylib/mojom/generate/generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/module.py', '../mojo/public/tools/bindings/pylib/mojom/generate/pack.py', '../mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py', '../mojo/public/tools/bindings/pylib/mojom/parse/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/parse/ast.py', '../mojo/public/tools/bindings/pylib/mojom/parse/lexer.py', '../mojo/public/tools/bindings/pylib/mojom/parse/parser.py', '../mojo/public/tools/bindings/pylib/mojom/parse/translate.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['public/interfaces/shell/shell.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', '%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
 $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: $(LOCAL_PATH)/mojo/public/interfaces/shell/shell.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_translate.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/template_expander.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: $(LOCAL_PATH)/mojo/public/interfaces/shell/shell.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/module.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/ast.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/translate.py $(GYP_TARGET_DEPENDENCIES)
 	mkdir -p $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell; cd $(gyp_local_path)/mojo; python ../mojo/public/tools/bindings/mojom_bindings_generator.py public/interfaces/shell/shell.mojom -d .. -o "$(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell"
 
 $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.h: $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc ;
@@ -240,7 +240,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_shell_bindings.target.darwin-x86.mk b/mojo/mojo_shell_bindings.target.darwin-x86.mk
index 154618a..7594e6f 100644
--- a/mojo/mojo_shell_bindings.target.darwin-x86.mk
+++ b/mojo/mojo_shell_bindings.target.darwin-x86.mk
@@ -15,12 +15,12 @@
 
 
 ### Generated for rule "mojo_mojo_gyp_mojo_shell_bindings_target_Generate_C___source_files_from_mojom_files":
-# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/parse/__init__.py', '../mojo/public/tools/bindings/pylib/parse/mojo_lexer.py', '../mojo/public/tools/bindings/pylib/parse/mojo_parser.py', '../mojo/public/tools/bindings/pylib/parse/mojo_translate.py', '../mojo/public/tools/bindings/pylib/generate/__init__.py', '../mojo/public/tools/bindings/pylib/generate/mojom.py', '../mojo/public/tools/bindings/pylib/generate/mojom_data.py', '../mojo/public/tools/bindings/pylib/generate/mojom_generator.py', '../mojo/public/tools/bindings/pylib/generate/mojom_pack.py', '../mojo/public/tools/bindings/pylib/generate/template_expander.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['public/interfaces/shell/shell.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', '%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
+# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/generate/data.py', '../mojo/public/tools/bindings/pylib/mojom/generate/generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/module.py', '../mojo/public/tools/bindings/pylib/mojom/generate/pack.py', '../mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py', '../mojo/public/tools/bindings/pylib/mojom/parse/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/parse/ast.py', '../mojo/public/tools/bindings/pylib/mojom/parse/lexer.py', '../mojo/public/tools/bindings/pylib/mojom/parse/parser.py', '../mojo/public/tools/bindings/pylib/mojom/parse/translate.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['public/interfaces/shell/shell.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', '%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
 $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: $(LOCAL_PATH)/mojo/public/interfaces/shell/shell.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_translate.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/template_expander.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: $(LOCAL_PATH)/mojo/public/interfaces/shell/shell.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/module.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/ast.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/translate.py $(GYP_TARGET_DEPENDENCIES)
 	mkdir -p $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell; cd $(gyp_local_path)/mojo; python ../mojo/public/tools/bindings/mojom_bindings_generator.py public/interfaces/shell/shell.mojom -d .. -o "$(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell"
 
 $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.h: $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc ;
@@ -242,7 +242,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_shell_bindings.target.darwin-x86_64.mk b/mojo/mojo_shell_bindings.target.darwin-x86_64.mk
index b95ff6b..b2d097e 100644
--- a/mojo/mojo_shell_bindings.target.darwin-x86_64.mk
+++ b/mojo/mojo_shell_bindings.target.darwin-x86_64.mk
@@ -15,12 +15,12 @@
 
 
 ### Generated for rule "mojo_mojo_gyp_mojo_shell_bindings_target_Generate_C___source_files_from_mojom_files":
-# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/parse/__init__.py', '../mojo/public/tools/bindings/pylib/parse/mojo_lexer.py', '../mojo/public/tools/bindings/pylib/parse/mojo_parser.py', '../mojo/public/tools/bindings/pylib/parse/mojo_translate.py', '../mojo/public/tools/bindings/pylib/generate/__init__.py', '../mojo/public/tools/bindings/pylib/generate/mojom.py', '../mojo/public/tools/bindings/pylib/generate/mojom_data.py', '../mojo/public/tools/bindings/pylib/generate/mojom_generator.py', '../mojo/public/tools/bindings/pylib/generate/mojom_pack.py', '../mojo/public/tools/bindings/pylib/generate/template_expander.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['public/interfaces/shell/shell.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', '%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
+# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/generate/data.py', '../mojo/public/tools/bindings/pylib/mojom/generate/generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/module.py', '../mojo/public/tools/bindings/pylib/mojom/generate/pack.py', '../mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py', '../mojo/public/tools/bindings/pylib/mojom/parse/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/parse/ast.py', '../mojo/public/tools/bindings/pylib/mojom/parse/lexer.py', '../mojo/public/tools/bindings/pylib/mojom/parse/parser.py', '../mojo/public/tools/bindings/pylib/mojom/parse/translate.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['public/interfaces/shell/shell.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', '%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
 $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: $(LOCAL_PATH)/mojo/public/interfaces/shell/shell.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_translate.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/template_expander.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: $(LOCAL_PATH)/mojo/public/interfaces/shell/shell.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/module.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/ast.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/translate.py $(GYP_TARGET_DEPENDENCIES)
 	mkdir -p $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell; cd $(gyp_local_path)/mojo; python ../mojo/public/tools/bindings/mojom_bindings_generator.py public/interfaces/shell/shell.mojom -d .. -o "$(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell"
 
 $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.h: $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc ;
@@ -242,7 +242,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_shell_bindings.target.linux-arm.mk b/mojo/mojo_shell_bindings.target.linux-arm.mk
index 34e0652..fd24e3b 100644
--- a/mojo/mojo_shell_bindings.target.linux-arm.mk
+++ b/mojo/mojo_shell_bindings.target.linux-arm.mk
@@ -15,12 +15,12 @@
 
 
 ### Generated for rule "mojo_mojo_gyp_mojo_shell_bindings_target_Generate_C___source_files_from_mojom_files":
-# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/parse/__init__.py', '../mojo/public/tools/bindings/pylib/parse/mojo_lexer.py', '../mojo/public/tools/bindings/pylib/parse/mojo_parser.py', '../mojo/public/tools/bindings/pylib/parse/mojo_translate.py', '../mojo/public/tools/bindings/pylib/generate/__init__.py', '../mojo/public/tools/bindings/pylib/generate/mojom.py', '../mojo/public/tools/bindings/pylib/generate/mojom_data.py', '../mojo/public/tools/bindings/pylib/generate/mojom_generator.py', '../mojo/public/tools/bindings/pylib/generate/mojom_pack.py', '../mojo/public/tools/bindings/pylib/generate/template_expander.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['public/interfaces/shell/shell.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', '%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
+# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/generate/data.py', '../mojo/public/tools/bindings/pylib/mojom/generate/generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/module.py', '../mojo/public/tools/bindings/pylib/mojom/generate/pack.py', '../mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py', '../mojo/public/tools/bindings/pylib/mojom/parse/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/parse/ast.py', '../mojo/public/tools/bindings/pylib/mojom/parse/lexer.py', '../mojo/public/tools/bindings/pylib/mojom/parse/parser.py', '../mojo/public/tools/bindings/pylib/mojom/parse/translate.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['public/interfaces/shell/shell.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', '%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
 $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: $(LOCAL_PATH)/mojo/public/interfaces/shell/shell.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_translate.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/template_expander.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: $(LOCAL_PATH)/mojo/public/interfaces/shell/shell.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/module.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/ast.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/translate.py $(GYP_TARGET_DEPENDENCIES)
 	mkdir -p $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell; cd $(gyp_local_path)/mojo; python ../mojo/public/tools/bindings/mojom_bindings_generator.py public/interfaces/shell/shell.mojom -d .. -o "$(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell"
 
 $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.h: $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc ;
@@ -244,7 +244,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_shell_bindings.target.linux-mips.mk b/mojo/mojo_shell_bindings.target.linux-mips.mk
index dcb5ada..3488379 100644
--- a/mojo/mojo_shell_bindings.target.linux-mips.mk
+++ b/mojo/mojo_shell_bindings.target.linux-mips.mk
@@ -15,12 +15,12 @@
 
 
 ### Generated for rule "mojo_mojo_gyp_mojo_shell_bindings_target_Generate_C___source_files_from_mojom_files":
-# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/parse/__init__.py', '../mojo/public/tools/bindings/pylib/parse/mojo_lexer.py', '../mojo/public/tools/bindings/pylib/parse/mojo_parser.py', '../mojo/public/tools/bindings/pylib/parse/mojo_translate.py', '../mojo/public/tools/bindings/pylib/generate/__init__.py', '../mojo/public/tools/bindings/pylib/generate/mojom.py', '../mojo/public/tools/bindings/pylib/generate/mojom_data.py', '../mojo/public/tools/bindings/pylib/generate/mojom_generator.py', '../mojo/public/tools/bindings/pylib/generate/mojom_pack.py', '../mojo/public/tools/bindings/pylib/generate/template_expander.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['public/interfaces/shell/shell.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', '%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
+# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/generate/data.py', '../mojo/public/tools/bindings/pylib/mojom/generate/generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/module.py', '../mojo/public/tools/bindings/pylib/mojom/generate/pack.py', '../mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py', '../mojo/public/tools/bindings/pylib/mojom/parse/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/parse/ast.py', '../mojo/public/tools/bindings/pylib/mojom/parse/lexer.py', '../mojo/public/tools/bindings/pylib/mojom/parse/parser.py', '../mojo/public/tools/bindings/pylib/mojom/parse/translate.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['public/interfaces/shell/shell.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', '%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
 $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: $(LOCAL_PATH)/mojo/public/interfaces/shell/shell.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_translate.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/template_expander.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: $(LOCAL_PATH)/mojo/public/interfaces/shell/shell.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/module.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/ast.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/translate.py $(GYP_TARGET_DEPENDENCIES)
 	mkdir -p $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell; cd $(gyp_local_path)/mojo; python ../mojo/public/tools/bindings/mojom_bindings_generator.py public/interfaces/shell/shell.mojom -d .. -o "$(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell"
 
 $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.h: $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc ;
@@ -240,7 +240,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_shell_bindings.target.linux-x86.mk b/mojo/mojo_shell_bindings.target.linux-x86.mk
index 154618a..7594e6f 100644
--- a/mojo/mojo_shell_bindings.target.linux-x86.mk
+++ b/mojo/mojo_shell_bindings.target.linux-x86.mk
@@ -15,12 +15,12 @@
 
 
 ### Generated for rule "mojo_mojo_gyp_mojo_shell_bindings_target_Generate_C___source_files_from_mojom_files":
-# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/parse/__init__.py', '../mojo/public/tools/bindings/pylib/parse/mojo_lexer.py', '../mojo/public/tools/bindings/pylib/parse/mojo_parser.py', '../mojo/public/tools/bindings/pylib/parse/mojo_translate.py', '../mojo/public/tools/bindings/pylib/generate/__init__.py', '../mojo/public/tools/bindings/pylib/generate/mojom.py', '../mojo/public/tools/bindings/pylib/generate/mojom_data.py', '../mojo/public/tools/bindings/pylib/generate/mojom_generator.py', '../mojo/public/tools/bindings/pylib/generate/mojom_pack.py', '../mojo/public/tools/bindings/pylib/generate/template_expander.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['public/interfaces/shell/shell.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', '%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
+# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/generate/data.py', '../mojo/public/tools/bindings/pylib/mojom/generate/generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/module.py', '../mojo/public/tools/bindings/pylib/mojom/generate/pack.py', '../mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py', '../mojo/public/tools/bindings/pylib/mojom/parse/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/parse/ast.py', '../mojo/public/tools/bindings/pylib/mojom/parse/lexer.py', '../mojo/public/tools/bindings/pylib/mojom/parse/parser.py', '../mojo/public/tools/bindings/pylib/mojom/parse/translate.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['public/interfaces/shell/shell.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', '%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
 $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: $(LOCAL_PATH)/mojo/public/interfaces/shell/shell.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_translate.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/template_expander.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: $(LOCAL_PATH)/mojo/public/interfaces/shell/shell.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/module.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/ast.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/translate.py $(GYP_TARGET_DEPENDENCIES)
 	mkdir -p $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell; cd $(gyp_local_path)/mojo; python ../mojo/public/tools/bindings/mojom_bindings_generator.py public/interfaces/shell/shell.mojom -d .. -o "$(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell"
 
 $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.h: $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc ;
@@ -242,7 +242,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_shell_bindings.target.linux-x86_64.mk b/mojo/mojo_shell_bindings.target.linux-x86_64.mk
index b95ff6b..b2d097e 100644
--- a/mojo/mojo_shell_bindings.target.linux-x86_64.mk
+++ b/mojo/mojo_shell_bindings.target.linux-x86_64.mk
@@ -15,12 +15,12 @@
 
 
 ### Generated for rule "mojo_mojo_gyp_mojo_shell_bindings_target_Generate_C___source_files_from_mojom_files":
-# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/parse/__init__.py', '../mojo/public/tools/bindings/pylib/parse/mojo_lexer.py', '../mojo/public/tools/bindings/pylib/parse/mojo_parser.py', '../mojo/public/tools/bindings/pylib/parse/mojo_translate.py', '../mojo/public/tools/bindings/pylib/generate/__init__.py', '../mojo/public/tools/bindings/pylib/generate/mojom.py', '../mojo/public/tools/bindings/pylib/generate/mojom_data.py', '../mojo/public/tools/bindings/pylib/generate/mojom_generator.py', '../mojo/public/tools/bindings/pylib/generate/mojom_pack.py', '../mojo/public/tools/bindings/pylib/generate/template_expander.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['public/interfaces/shell/shell.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', '%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
+# "{'inputs': ['../mojo/public/tools/bindings/mojom_bindings_generator.py', '../mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl', '../mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl', '../mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl', '../mojo/public/tools/bindings/generators/js_templates/module.js.tmpl', '../mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl', '../mojo/public/tools/bindings/generators/mojom_cpp_generator.py', '../mojo/public/tools/bindings/generators/mojom_js_generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/generate/data.py', '../mojo/public/tools/bindings/pylib/mojom/generate/generator.py', '../mojo/public/tools/bindings/pylib/mojom/generate/module.py', '../mojo/public/tools/bindings/pylib/mojom/generate/pack.py', '../mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py', '../mojo/public/tools/bindings/pylib/mojom/parse/__init__.py', '../mojo/public/tools/bindings/pylib/mojom/parse/ast.py', '../mojo/public/tools/bindings/pylib/mojom/parse/lexer.py', '../mojo/public/tools/bindings/pylib/mojom/parse/parser.py', '../mojo/public/tools/bindings/pylib/mojom/parse/translate.py'], 'process_outputs_as_sources': '1', 'extension': 'mojom', 'outputs': ['$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.cc', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.h', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom.js', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom-internal.h'], 'variables': {'mojom_bindings_generator': '../mojo/public/tools/bindings/mojom_bindings_generator.py'}, 'rule_name': 'Generate C++ source files from mojom files', 'rule_sources': ['public/interfaces/shell/shell.mojom'], 'action': ['python', '../mojo/public/tools/bindings/mojom_bindings_generator.py', '%(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom', '-d', '..', '-o', '$(gyp_shared_intermediate_dir)/mojo/%(INPUT_DIRNAME)s'], 'message': 'Generating Mojo bindings from %(INPUT_DIRNAME)s/%(INPUT_ROOT)s.mojom'}":
 $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: $(LOCAL_PATH)/mojo/public/interfaces/shell/shell.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/parse/mojo_translate.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/mojom_pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/generate/template_expander.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc: $(LOCAL_PATH)/mojo/public/interfaces/shell/shell.mojom $(LOCAL_PATH)/mojo/public/tools/bindings/mojom_bindings_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/enum_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/interface_stub_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/params_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_builder_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_destructor.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/enum_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/interface_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/generators/mojom_js_generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/data.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/generator.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/module.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/pack.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/__init__.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/ast.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/lexer.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/parser.py $(LOCAL_PATH)/mojo/public/tools/bindings/pylib/mojom/parse/translate.py $(GYP_TARGET_DEPENDENCIES)
 	mkdir -p $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell; cd $(gyp_local_path)/mojo; python ../mojo/public/tools/bindings/mojom_bindings_generator.py public/interfaces/shell/shell.mojom -d .. -o "$(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell"
 
 $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.h: $(gyp_shared_intermediate_dir)/mojo/public/interfaces/shell/shell.mojom.cc ;
@@ -242,7 +242,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_system_impl.target.darwin-arm.mk b/mojo/mojo_system_impl.target.darwin-arm.mk
index 5337403..cea7e95 100644
--- a/mojo/mojo_system_impl.target.darwin-arm.mk
+++ b/mojo/mojo_system_impl.target.darwin-arm.mk
@@ -256,7 +256,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_system_impl.target.darwin-mips.mk b/mojo/mojo_system_impl.target.darwin-mips.mk
index 6c230fa..a1cb2a9 100644
--- a/mojo/mojo_system_impl.target.darwin-mips.mk
+++ b/mojo/mojo_system_impl.target.darwin-mips.mk
@@ -252,7 +252,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_system_impl.target.darwin-x86.mk b/mojo/mojo_system_impl.target.darwin-x86.mk
index 31241a6..c78af2f 100644
--- a/mojo/mojo_system_impl.target.darwin-x86.mk
+++ b/mojo/mojo_system_impl.target.darwin-x86.mk
@@ -254,7 +254,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_system_impl.target.darwin-x86_64.mk b/mojo/mojo_system_impl.target.darwin-x86_64.mk
index dd4dc49..a9bc33b 100644
--- a/mojo/mojo_system_impl.target.darwin-x86_64.mk
+++ b/mojo/mojo_system_impl.target.darwin-x86_64.mk
@@ -254,7 +254,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_system_impl.target.linux-arm.mk b/mojo/mojo_system_impl.target.linux-arm.mk
index 5337403..cea7e95 100644
--- a/mojo/mojo_system_impl.target.linux-arm.mk
+++ b/mojo/mojo_system_impl.target.linux-arm.mk
@@ -256,7 +256,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_system_impl.target.linux-mips.mk b/mojo/mojo_system_impl.target.linux-mips.mk
index 6c230fa..a1cb2a9 100644
--- a/mojo/mojo_system_impl.target.linux-mips.mk
+++ b/mojo/mojo_system_impl.target.linux-mips.mk
@@ -252,7 +252,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_system_impl.target.linux-x86.mk b/mojo/mojo_system_impl.target.linux-x86.mk
index 31241a6..c78af2f 100644
--- a/mojo/mojo_system_impl.target.linux-x86.mk
+++ b/mojo/mojo_system_impl.target.linux-x86.mk
@@ -254,7 +254,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/mojo_system_impl.target.linux-x86_64.mk b/mojo/mojo_system_impl.target.linux-x86_64.mk
index dd4dc49..a9bc33b 100644
--- a/mojo/mojo_system_impl.target.linux-x86_64.mk
+++ b/mojo/mojo_system_impl.target.linux-x86_64.mk
@@ -254,7 +254,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/mojo/public/README.md b/mojo/public/README.md
index 32fc4b1..a31a8a8 100644
--- a/mojo/public/README.md
+++ b/mojo/public/README.md
@@ -1,62 +1,43 @@
 Mojo Public API
 ===============
 
-The Mojo Public API is a binary stable API to the Mojo system. There are
-several components to the API:
+The Mojo Public API is a binary stable API to the Mojo system.
 
-Bindings
+It consists of support for a number of programming languages (with a directory
+for each support language), some "build" tools and build-time requirements, and
+interface definitions for Mojo services (specified using an IDL).
+
+Note that there are various subdirectories named tests/. These contain tests of
+the code in the enclosing directory, and are not meant for use by Mojo
+applications.
+
+C/CPP/JS
 --------
 
-This directory contains a static library that clients may link into their
-binary. The contents of this directory are not binary stable as each client is
-free to use whichever version they prefer.
+The c/, cpp/, js/ subdirectories define the API for C, C++, and JavaScript,
+respectively.
 
-This directory also contains a compiler that translates mojom interface
-definition files into idiomatic bindings for various languages, including
-C++ and JavaScript. Clients are expected to statically link with the generated
-code, which reads and writes the binary stable IPC message format.
+The basic principle for these directories is that they consist of the source
+files that one needs at build/deployment/run time (as appropriate for the
+language), organized in a natural way for the particular language.
 
-Environment
------------
+Interfaces
+----------
 
-This directory contains a static library that clients may link into their
-binary. The contents of this directory are not binary stable as each client is
-free to use whichever version they prefer.
+The interfaces/ subdirectory contains Mojo IDL (a.k.a. .mojom) descriptions of
+standard Mojo services.
 
-The environment static library represents the shared state that is needed to
-support the Bindings and GLES2 libraries. It depends on the Utility library.
+Platform
+--------
 
-GLES2
+The platform/ subdirectory contains any build-time requirements (e.g., static
+libraries) that may be needed to produce a Mojo application for certain
+platforms, such as a native shared library or as a NaCl binary.
+
+Tools
 -----
 
-The IPC protocol used to communicate between Mojo client and the GLES2
-service is not binary stable. To insulate themselves from changes in this
-protocol, clients are expected to link dynamically against the standard GLES2
-headers from Khronos and the headers in this directory, which provide an
-adaptor between the GLES2 C API and the underlying IPC protocol.
-
-System
-------
-
-This directory defines the interface between Mojo clients and the Mojo IPC
-system. Although the Mojo IPC message format is binary stable, the mechanism
-by which these messages are transported is not stable. To insulate themselves
-from changes in the underlying transport, clients are expected to link against
-these headers dynamically.
-
-Tests
------
-
-This directory contains tests for code contained in the public API. Mojo
-clients are expected to ignore this directory.
-
-Utility
--------
-
-This directory contains a static library that clients may link into their
-binary. The contents of this directory are not binary stable as each client is
-free to use whichever version they prefer.
-
-The Utility static library most notably defines an implementation of a RunLoop
-based on the MojoWaitMany that clients may use as the basis for asynchronous
-message processing.
+The tools/ subdirectory contains tools that are useful/necessary at
+build/deployment time. These tools may be needed (as a practical necessity) to
+use the API in any given language, e.g., to generate bindings from Mojo IDL
+files.
diff --git a/mojo/public/c/README.md b/mojo/public/c/README.md
new file mode 100644
index 0000000..8e11545
--- /dev/null
+++ b/mojo/public/c/README.md
@@ -0,0 +1,45 @@
+Mojo Public C API
+=================
+
+This directory contains C language bindings for the Mojo Public API.
+
+Environment
+-----------
+
+The environment/ subdirectory defines some common things that, while not part of
+the system API, may be required for GLES2 (for example). These are things that a
+Mojo application may be required to provide to the GLES2 (for example) library
+in order to use it. (However, the Mojo application may implement these things as
+it sees fit.)
+
+GLES2
+-----
+
+The gles2/ subdirectory defines the GLES2 C API that's available to Mojo
+applications. To use GLES2, Mojo applications must link against a dynamic
+library (the exact mechanism being platform-dependent) and use the header files
+in this directory as well as the standard Khronos GLES2 header files.
+
+The reason for this, rather than providing GLES2 using the standard Mojo IPC
+mechanism, is performance: The protocol (and transport mechanisms) used to
+communicate with the Mojo GLES2 service is not stable nor "public" (mainly for
+performance reasons), and using the dynamic library shields the application from
+changes to the underlying system.
+
+System
+------
+
+The system/ subdirectory provides definitions of the basic low-level API used by
+all Mojo applications (whether directly or indirectly). These consist primarily
+of the IPC primitives used to communicate with Mojo services.
+
+Though the message protocol is stable, the implementation of the transport is
+not, and access to the IPC mechanisms must be via the primitives defined in this
+directory.
+
+Test Support
+------------
+
+This directory contains a C API for running tests. This API is only available
+under special, specific test conditions. It is not meant for general use by Mojo
+applications.
diff --git a/mojo/public/c/environment/async_waiter.h b/mojo/public/c/environment/async_waiter.h
new file mode 100644
index 0000000..0568954
--- /dev/null
+++ b/mojo/public/c/environment/async_waiter.h
@@ -0,0 +1,40 @@
+// 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.
+
+#ifndef MOJO_PUBLIC_C_ENVIRONMENT_ASYNC_WAITER_H_
+#define MOJO_PUBLIC_C_ENVIRONMENT_ASYNC_WAITER_H_
+
+#include "mojo/public/c/system/core.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef uintptr_t MojoAsyncWaitID;
+
+typedef void (*MojoAsyncWaitCallback)(void* closure, MojoResult result);
+
+struct MojoAsyncWaiter {
+  // Asynchronously call MojoWait on a background thread, and pass the result
+  // of MojoWait to the given MojoAsyncWaitCallback on the current thread.
+  // Returns a non-zero MojoAsyncWaitID that can be used with CancelWait to
+  // stop waiting. This identifier becomes invalid once the callback runs.
+  MojoAsyncWaitID (*AsyncWait)(struct MojoAsyncWaiter* waiter,
+                               MojoHandle handle,
+                               MojoWaitFlags flags,
+                               MojoDeadline deadline,
+                               MojoAsyncWaitCallback callback,
+                               void* closure);
+
+  // Cancel an existing call to AsyncWait with the given MojoAsyncWaitID. The
+  // corresponding MojoAsyncWaitCallback will not be called in this case.
+  void (*CancelWait)(struct MojoAsyncWaiter* waiter,
+                     MojoAsyncWaitID wait_id);
+};
+
+#ifdef __cplusplus
+}  // extern "C"
+#endif
+
+#endif  // MOJO_PUBLIC_C_ENVIRONMENT_ASYNC_WAITER_H_
diff --git a/mojo/public/c/gles2/DEPS b/mojo/public/c/gles2/DEPS
new file mode 100644
index 0000000..3887457
--- /dev/null
+++ b/mojo/public/c/gles2/DEPS
@@ -0,0 +1,3 @@
+include_rules = [
+  "+mojo/public/c/environment",
+]
diff --git a/mojo/public/c/gles2/gles2.h b/mojo/public/c/gles2/gles2.h
index 6b20b9c..3ee249d 100644
--- a/mojo/public/c/gles2/gles2.h
+++ b/mojo/public/c/gles2/gles2.h
@@ -10,9 +10,9 @@
 #include <stdint.h>
 #include <GLES2/gl2.h>
 
+#include "mojo/public/c/environment/async_waiter.h"
 #include "mojo/public/c/gles2/gles2_export.h"
 #include "mojo/public/c/gles2/gles2_types.h"
-#include "mojo/public/c/system/async_waiter.h"
 #include "mojo/public/c/system/core.h"
 
 #ifdef __cplusplus
diff --git a/mojo/public/c/system/async_waiter.h b/mojo/public/c/system/async_waiter.h
deleted file mode 100644
index ab999a3..0000000
--- a/mojo/public/c/system/async_waiter.h
+++ /dev/null
@@ -1,40 +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.
-
-#ifndef MOJO_PUBLIC_C_SYSTEM_ASYNC_WAITER_H_
-#define MOJO_PUBLIC_C_SYSTEM_ASYNC_WAITER_H_
-
-#include "mojo/public/c/system/core.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef uintptr_t MojoAsyncWaitID;
-
-typedef void (*MojoAsyncWaitCallback)(void* closure, MojoResult result);
-
-struct MojoAsyncWaiter {
-  // Asynchronously call MojoWait on a background thread, and pass the result
-  // of MojoWait to the given MojoAsyncWaitCallback on the current thread.
-  // Returns a non-zero MojoAsyncWaitID that can be used with CancelWait to
-  // stop waiting. This identifier becomes invalid once the callback runs.
-  MojoAsyncWaitID (*AsyncWait)(struct MojoAsyncWaiter* waiter,
-                               MojoHandle handle,
-                               MojoWaitFlags flags,
-                               MojoDeadline deadline,
-                               MojoAsyncWaitCallback callback,
-                               void* closure);
-
-  // Cancel an existing call to AsyncWait with the given MojoAsyncWaitID. The
-  // corresponding MojoAsyncWaitCallback will not be called in this case.
-  void (*CancelWait)(struct MojoAsyncWaiter* waiter,
-                     MojoAsyncWaitID wait_id);
-};
-
-#ifdef __cplusplus
-}  // extern "C"
-#endif
-
-#endif  // MOJO_PUBLIC_C_SYSTEM_ASYNC_WAITER_H_
diff --git a/mojo/public/c/system/tests/core_unittest_pure_c.c b/mojo/public/c/system/tests/core_unittest_pure_c.c
index 7293ff2..a95af50 100644
--- a/mojo/public/c/system/tests/core_unittest_pure_c.c
+++ b/mojo/public/c/system/tests/core_unittest_pure_c.c
@@ -11,8 +11,8 @@
 
 // Include all the header files that are meant to be compilable as C. Start with
 // core.h, since it's the most important one.
+#include "mojo/public/c/environment/async_waiter.h"
 #include "mojo/public/c/system/core.h"
-#include "mojo/public/c/system/async_waiter.h"
 #include "mojo/public/c/system/macros.h"
 
 // The joys of the C preprocessor....
diff --git a/mojo/public/cpp/README.md b/mojo/public/cpp/README.md
new file mode 100644
index 0000000..8f03d98
--- /dev/null
+++ b/mojo/public/cpp/README.md
@@ -0,0 +1,71 @@
+Mojo Public C++ API
+===================
+
+This directory contains C++ language bindings for the Mojo Public API.
+
+A number of subdirectories provide wrappers for the lower-level C APIs (in
+subdirectories of the same name, under mojo/public/c/). Typically, these
+wrappers provide increased convenience and/or type-safety.
+
+Other subdirectories provide support (static) libraries of various sorts. In
+this case, the organization is to have the public interface for the library in
+defined in header files in the subdirectory itself and the implementation of the
+library at a lower level, under a lib (sub)subdirectory. A developer should be
+able to substitute their own implementation of any such support library, and
+expect other support libraries, which may depend on that library, to work
+properly.
+
+Bindings
+--------
+
+The bindings/ subdirectory contains a support (static) library needed by the
+code generated by the bindings generator tool (in mojo/public/tools/bindings/),
+which translates Mojo IDL (.mojom) files into idiomatic C++ (among other
+languages).
+
+This library depends on the Environment library.
+
+Environment
+-----------
+
+The environment/ subdirectory contains a support (static) library that
+represents shared state needed to support the Bindings and GLES2 libraries.
+
+This library depends on the Utility library.
+
+
+GLES2
+-----
+
+The gles2/ subdirectory contains C++ wrappers (and some additional helpers) of
+the API defined in mojo/public/c/gles2/ (which provides access to GLES2).
+
+These wrappers depend on the Environment library.
+
+Shell
+-----
+
+The shell/ subdirectory contains a support (static) library that aids in writing
+Mojo applications and interacting with the Shell service.
+
+System
+------
+
+The system/ subdirectory contains C++ wrappers (and some additional helpers) of
+the API defined in mojo/public/c/system/, which defines the basic, "core" API,
+especially used to communicate with Mojo services.
+
+Test Support
+------------
+
+The test_support/ subdirectory contains C++ wrappers of the test-only API
+defined in mojo/public/c/test_support/. It is not meant for general use by Mojo
+applications.
+
+Utility
+-------
+
+The utility/ subdirectory contains a support (static) library that provides
+various basic functionality. Most notably, it provides an implementation of a
+RunLoop based on MojoWaitMany() that applications may use as the basis for
+asynchronous message processing.
diff --git a/mojo/public/cpp/bindings/array.h b/mojo/public/cpp/bindings/array.h
index 72aa56d..f7ced01 100644
--- a/mojo/public/cpp/bindings/array.h
+++ b/mojo/public/cpp/bindings/array.h
@@ -20,7 +20,9 @@
 template <typename T>
 class Array {
  public:
-  typedef internal::ArrayTraits<T, internal::TypeTraits<T>::kIsObject> Traits_;
+  typedef internal::ArrayTraits<T,
+                                internal::TypeTraits<T>::kIsObject,
+                                internal::TypeTraits<T>::kIsHandle> Traits_;
   typedef typename Traits_::DataType Data;
   typedef typename Traits_::ConstRef ConstRef;
 
@@ -65,7 +67,7 @@
     typedef typename Traits_::Ref Ref;
 
     explicit Builder(size_t num_elements, Buffer* buf = mojo::Buffer::current())
-        : data_(Data::New(num_elements, buf)) {
+        : data_(Data::New(num_elements, buf, Traits_::GetDestructor())) {
     }
 
     size_t size() const { return data_->size(); }
diff --git a/mojo/public/cpp/bindings/lib/array_internal.cc b/mojo/public/cpp/bindings/lib/array_internal.cc
index efdda8c..1852ff7 100644
--- a/mojo/public/cpp/bindings/lib/array_internal.cc
+++ b/mojo/public/cpp/bindings/lib/array_internal.cc
@@ -35,7 +35,25 @@
 }
 
 // static
-void ArraySerializationHelper<Handle>::EncodePointersAndHandles(
+void ArraySerializationHelper<Handle, true>::ClearHandles(
+    const ArrayHeader* header,
+    ElementType* elements) {
+  for (uint32_t i = 0; i < header->num_elements; ++i)
+    elements[i].set_value(MOJO_HANDLE_INVALID);
+}
+
+// static
+void ArraySerializationHelper<Handle, true>::CloseHandles(
+    const ArrayHeader* header,
+    ElementType* elements) {
+  for (uint32_t i = 0; i < header->num_elements; ++i) {
+    if (elements[i].is_valid())
+      CloseRaw(elements[i]);
+  }
+}
+
+// static
+void ArraySerializationHelper<Handle, true>::EncodePointersAndHandles(
     const ArrayHeader* header,
     ElementType* elements,
     std::vector<Handle>* handles) {
@@ -44,7 +62,7 @@
 }
 
 // static
-bool ArraySerializationHelper<Handle>::DecodePointersAndHandles(
+bool ArraySerializationHelper<Handle, true>::DecodePointersAndHandles(
     const ArrayHeader* header,
     ElementType* elements,
     Message* message) {
diff --git a/mojo/public/cpp/bindings/lib/array_internal.h b/mojo/public/cpp/bindings/lib/array_internal.h
index 978dca3..4ecad35 100644
--- a/mojo/public/cpp/bindings/lib/array_internal.h
+++ b/mojo/public/cpp/bindings/lib/array_internal.h
@@ -8,10 +8,10 @@
 #include <new>
 
 #include "mojo/public/cpp/bindings/buffer.h"
+#include "mojo/public/cpp/bindings/interface.h"
 #include "mojo/public/cpp/bindings/lib/bindings_internal.h"
 #include "mojo/public/cpp/bindings/lib/bindings_serialization.h"
 #include "mojo/public/cpp/bindings/passable.h"
-#include "mojo/public/cpp/system/core.h"
 
 namespace mojo {
 template <typename T> class Array;
@@ -97,9 +97,11 @@
 // are two interesting cases: arrays of primitives and arrays of objects.
 // Arrays of objects are represented as arrays of pointers to objects.
 
+template <typename T, bool kIsHandle> struct ArraySerializationHelper;
+
 template <typename T>
-struct ArraySerializationHelper {
-  typedef T ElementType;
+struct ArraySerializationHelper<T, false> {
+  typedef typename ArrayDataTraits<T>::StorageType ElementType;
 
   static size_t ComputeSizeOfElements(const ArrayHeader* header,
                                       const ElementType* elements) {
@@ -111,6 +113,13 @@
                             Buffer* buf) {
   }
 
+  static void ClearHandles(const ArrayHeader* header, ElementType* elements) {
+  }
+
+  static void CloseHandles(const ArrayHeader* header,
+                           ElementType* elements) {
+  }
+
   static void EncodePointersAndHandles(const ArrayHeader* header,
                                        ElementType* elements,
                                        std::vector<Handle>* handles) {
@@ -124,8 +133,8 @@
 };
 
 template <>
-struct ArraySerializationHelper<Handle> {
-  typedef Handle ElementType;
+struct ArraySerializationHelper<Handle, true> {
+  typedef ArrayDataTraits<Handle>::StorageType ElementType;
 
   static size_t ComputeSizeOfElements(const ArrayHeader* header,
                                       const ElementType* elements) {
@@ -137,6 +146,10 @@
                             Buffer* buf) {
   }
 
+  static void ClearHandles(const ArrayHeader* header, ElementType* elements);
+
+  static void CloseHandles(const ArrayHeader* header, ElementType* elements);
+
   static void EncodePointersAndHandles(const ArrayHeader* header,
                                        ElementType* elements,
                                        std::vector<Handle>* handles);
@@ -146,9 +159,46 @@
                                        Message* message);
 };
 
+template <typename H>
+struct ArraySerializationHelper<H, true> {
+  typedef typename ArrayDataTraits<H>::StorageType ElementType;
+
+  static size_t ComputeSizeOfElements(const ArrayHeader* header,
+                                      const ElementType* elements) {
+    return 0;
+  }
+
+  static void CloneElements(const ArrayHeader* header,
+                            ElementType* elements,
+                            Buffer* buf) {
+  }
+
+  static void ClearHandles(const ArrayHeader* header, ElementType* elements) {
+    ArraySerializationHelper<Handle, true>::ClearHandles(header, elements);
+  }
+
+  static void CloseHandles(const ArrayHeader* header, ElementType* elements) {
+    ArraySerializationHelper<Handle, true>::CloseHandles(header, elements);
+  }
+
+  static void EncodePointersAndHandles(const ArrayHeader* header,
+                                       ElementType* elements,
+                                       std::vector<Handle>* handles) {
+    ArraySerializationHelper<Handle, true>::EncodePointersAndHandles(
+        header, elements, handles);
+  }
+
+  static bool DecodePointersAndHandles(const ArrayHeader* header,
+                                       ElementType* elements,
+                                       Message* message) {
+    return ArraySerializationHelper<Handle, true>::DecodePointersAndHandles(
+        header, elements, message);
+  }
+};
+
 template <typename P>
-struct ArraySerializationHelper<P*> {
-  typedef StructPointer<P> ElementType;
+struct ArraySerializationHelper<P*, false> {
+  typedef typename ArrayDataTraits<P*>::StorageType ElementType;
 
   static size_t ComputeSizeOfElements(const ArrayHeader* header,
                                       const ElementType* elements) {
@@ -169,6 +219,17 @@
     }
   }
 
+  static void ClearHandles(const ArrayHeader* header, ElementType* elements) {
+  }
+
+  static void CloseHandles(const ArrayHeader* header,
+                           ElementType* elements) {
+    for (uint32_t i = 0; i < header->num_elements; ++i) {
+      if (elements[i].ptr)
+        elements[i].ptr->CloseHandles();
+    }
+  }
+
   static void EncodePointersAndHandles(const ArrayHeader* header,
                                        ElementType* elements,
                                        std::vector<Handle>* handles) {
@@ -195,12 +256,18 @@
   typedef typename Traits::Wrapper Wrapper;
   typedef typename Traits::Ref Ref;
   typedef typename Traits::ConstRef ConstRef;
+  typedef ArraySerializationHelper<T, TypeTraits<T>::kIsHandle> Helper;
 
-  static Array_Data<T>* New(size_t num_elements, Buffer* buf) {
+  static Array_Data<T>* New(size_t num_elements, Buffer* buf,
+                            Buffer::Destructor dtor = NULL) {
     size_t num_bytes = sizeof(Array_Data<T>) +
                        Traits::GetStorageSize(num_elements);
-    return new (buf->Allocate(num_bytes)) Array_Data<T>(num_bytes,
-                                                        num_elements);
+    return new (buf->Allocate(num_bytes, dtor)) Array_Data<T>(num_bytes,
+                                                              num_elements);
+  }
+
+  static void Destructor(void* address) {
+    static_cast<Array_Data*>(address)->CloseHandles();
   }
 
   size_t size() const { return header_.num_elements; }
@@ -227,33 +294,32 @@
 
   size_t ComputeSize() const {
     return Align(header_.num_bytes) +
-        ArraySerializationHelper<T>::ComputeSizeOfElements(&header_, storage());
+        Helper::ComputeSizeOfElements(&header_, storage());
   }
 
-  Array_Data<T>* Clone(Buffer* buf) const {
+  Array_Data<T>* Clone(Buffer* buf) {
     Array_Data<T>* clone = New(header_.num_elements, buf);
     memcpy(clone->storage(),
            storage(),
            header_.num_bytes - sizeof(Array_Data<T>));
+    Helper::CloneElements(&clone->header_, clone->storage(), buf);
 
-    ArraySerializationHelper<T>::CloneElements(&clone->header_,
-                                               clone->storage(), buf);
+    // Zero-out handles in the original storage as they have been transferred
+    // to the clone.
+    Helper::ClearHandles(&header_, storage());
     return clone;
   }
 
   void CloseHandles() {
-    // TODO(darin): Implement!
+    Helper::CloseHandles(&header_, storage());
   }
 
   void EncodePointersAndHandles(std::vector<Handle>* handles) {
-    ArraySerializationHelper<T>::EncodePointersAndHandles(&header_, storage(),
-                                                          handles);
+    Helper::EncodePointersAndHandles(&header_, storage(), handles);
   }
 
   bool DecodePointersAndHandles(Message* message) {
-    return ArraySerializationHelper<T>::DecodePointersAndHandles(&header_,
-                                                                 storage(),
-                                                                 message);
+    return Helper::DecodePointersAndHandles(&header_, storage(), message);
   }
 
  private:
@@ -272,12 +338,16 @@
 // UTF-8 encoded
 typedef Array_Data<char> String_Data;
 
-template <typename T, bool kIsObject> struct ArrayTraits {};
+template <typename T, bool kIsObject, bool kIsHandle> struct ArrayTraits {};
 
-template <typename T> struct ArrayTraits<T, true> {
+// When T is an object type:
+template <typename T> struct ArrayTraits<T, true, false> {
   typedef Array_Data<typename T::Data*> DataType;
   typedef const T& ConstRef;
   typedef T& Ref;
+  static Buffer::Destructor GetDestructor() {
+    return NULL;
+  }
   static typename T::Data* ToArrayElement(const T& value) {
     return Unwrap(value);
   }
@@ -290,10 +360,14 @@
   }
 };
 
-template <typename T> struct ArrayTraits<T, false> {
+// When T is a primitive (non-bool) type:
+template <typename T> struct ArrayTraits<T, false, false> {
   typedef Array_Data<T> DataType;
   typedef const T& ConstRef;
   typedef T& Ref;
+  static Buffer::Destructor GetDestructor() {
+    return NULL;
+  }
   static T ToArrayElement(const T& value) {
     return value;
   }
@@ -301,10 +375,14 @@
   static ConstRef ToConstRef(const T& data) { return data; }
 };
 
-template <> struct ArrayTraits<bool, false> {
+// When T is a bool type:
+template <> struct ArrayTraits<bool, false, false> {
   typedef Array_Data<bool> DataType;
   typedef bool ConstRef;
   typedef ArrayDataTraits<bool>::Ref Ref;
+  static Buffer::Destructor GetDestructor() {
+    return NULL;
+  }
   static bool ToArrayElement(const bool& value) {
     return value;
   }
@@ -312,57 +390,20 @@
   static ConstRef ToConstRef(ConstRef data) { return data; }
 };
 
-template <> struct ArrayTraits<Handle, false> {
-  typedef Array_Data<Handle> DataType;
-  typedef Passable<Handle> ConstRef;
-  typedef AssignableAndPassable<Handle> Ref;
-  static Handle ToArrayElement(const Handle& value) {
+// When T is a handle type:
+template <typename H> struct ArrayTraits<H, false, true> {
+  typedef Array_Data<H> DataType;
+  typedef Passable<H> ConstRef;
+  typedef AssignableAndPassable<H> Ref;
+  static Buffer::Destructor GetDestructor() {
+    return &DataType::Destructor;
+  }
+  static H ToArrayElement(const H& value) {
     return value;
   }
-  static Ref ToRef(Handle& data) { return Ref(&data); }
-  static ConstRef ToConstRef(const Handle& data) {
-    return ConstRef(const_cast<Handle*>(&data));
-  }
-};
-
-template <> struct ArrayTraits<DataPipeConsumerHandle, false> {
-  typedef Array_Data<DataPipeConsumerHandle> DataType;
-  typedef Passable<DataPipeConsumerHandle> ConstRef;
-  typedef AssignableAndPassable<DataPipeConsumerHandle> Ref;
-  static DataPipeConsumerHandle ToArrayElement(
-      const DataPipeConsumerHandle& value) {
-    return value;
-  }
-  static Ref ToRef(DataPipeConsumerHandle& data) { return Ref(&data); }
-  static ConstRef ToConstRef(const DataPipeConsumerHandle& data) {
-    return ConstRef(const_cast<DataPipeConsumerHandle*>(&data));
-  }
-};
-
-template <> struct ArrayTraits<DataPipeProducerHandle, false> {
-  typedef Array_Data<DataPipeProducerHandle> DataType;
-  typedef Passable<DataPipeProducerHandle> ConstRef;
-  typedef AssignableAndPassable<DataPipeProducerHandle> Ref;
-  static DataPipeProducerHandle ToArrayElement(
-      const DataPipeProducerHandle& value) {
-    return value;
-  }
-  static Ref ToRef(DataPipeProducerHandle& data) { return Ref(&data); }
-  static ConstRef ToConstRef(const DataPipeProducerHandle& data) {
-    return ConstRef(const_cast<DataPipeProducerHandle*>(&data));
-  }
-};
-
-template <> struct ArrayTraits<MessagePipeHandle, false> {
-  typedef Array_Data<MessagePipeHandle> DataType;
-  typedef Passable<MessagePipeHandle> ConstRef;
-  typedef AssignableAndPassable<MessagePipeHandle> Ref;
-  static MessagePipeHandle ToArrayElement(const MessagePipeHandle& value) {
-    return value;
-  }
-  static Ref ToRef(MessagePipeHandle& data) { return Ref(&data); }
-  static ConstRef ToConstRef(const MessagePipeHandle& data) {
-    return ConstRef(const_cast<MessagePipeHandle*>(&data));
+  static Ref ToRef(H& data) { return Ref(&data); }
+  static ConstRef ToConstRef(const H& data) {
+    return ConstRef(const_cast<H*>(&data));
   }
 };
 
diff --git a/mojo/public/cpp/bindings/lib/bindings_internal.h b/mojo/public/cpp/bindings/lib/bindings_internal.h
index ef6fc47..4b847e7 100644
--- a/mojo/public/cpp/bindings/lib/bindings_internal.h
+++ b/mojo/public/cpp/bindings/lib/bindings_internal.h
@@ -8,6 +8,8 @@
 #include "mojo/public/cpp/system/core.h"
 
 namespace mojo {
+template <typename S> class InterfaceHandle;
+
 namespace internal {
 template <typename T> class Array_Data;
 
@@ -82,54 +84,75 @@
 }
 
 template <typename T> struct TypeTraits {
+  static const bool kIsHandle = false;
   static const bool kIsObject = true;
 };
 template <> struct TypeTraits<bool> {
+  static const bool kIsHandle = false;
   static const bool kIsObject = false;
 };
 template <> struct TypeTraits<char> {
+  static const bool kIsHandle = false;
   static const bool kIsObject = false;
 };
 template <> struct TypeTraits<int8_t> {
+  static const bool kIsHandle = false;
   static const bool kIsObject = false;
 };
 template <> struct TypeTraits<int16_t> {
+  static const bool kIsHandle = false;
   static const bool kIsObject = false;
 };
 template <> struct TypeTraits<int32_t> {
+  static const bool kIsHandle = false;
   static const bool kIsObject = false;
 };
 template <> struct TypeTraits<int64_t> {
+  static const bool kIsHandle = false;
   static const bool kIsObject = false;
 };
 template <> struct TypeTraits<uint8_t> {
+  static const bool kIsHandle = false;
   static const bool kIsObject = false;
 };
 template <> struct TypeTraits<uint16_t> {
+  static const bool kIsHandle = false;
   static const bool kIsObject = false;
 };
 template <> struct TypeTraits<uint32_t> {
+  static const bool kIsHandle = false;
   static const bool kIsObject = false;
 };
 template <> struct TypeTraits<uint64_t> {
+  static const bool kIsHandle = false;
   static const bool kIsObject = false;
 };
 template <> struct TypeTraits<float> {
+  static const bool kIsHandle = false;
   static const bool kIsObject = false;
 };
 template <> struct TypeTraits<double> {
+  static const bool kIsHandle = false;
   static const bool kIsObject = false;
 };
 template <> struct TypeTraits<Handle> {
+  static const bool kIsHandle = true;
   static const bool kIsObject = false;
 };
 template <> struct TypeTraits<DataPipeConsumerHandle> {
+  static const bool kIsHandle = true;
   static const bool kIsObject = false;
 };
 template <> struct TypeTraits<DataPipeProducerHandle> {
+  static const bool kIsHandle = true;
   static const bool kIsObject = false;
 };
 template <> struct TypeTraits<MessagePipeHandle> {
+  static const bool kIsHandle = true;
+  static const bool kIsObject = false;
+};
+template <typename S> struct TypeTraits<InterfaceHandle<S> > {
+  static const bool kIsHandle = true;
   static const bool kIsObject = false;
 };
 
diff --git a/mojo/public/cpp/bindings/lib/bindings_serialization.cc b/mojo/public/cpp/bindings/lib/bindings_serialization.cc
index ff06d95..fc574d7 100644
--- a/mojo/public/cpp/bindings/lib/bindings_serialization.cc
+++ b/mojo/public/cpp/bindings/lib/bindings_serialization.cc
@@ -37,7 +37,7 @@
 
 bool ValidatePointer(const void* ptr, const Message& message) {
   const uint8_t* data = static_cast<const uint8_t*>(ptr);
-  if (reinterpret_cast<ptrdiff_t>(data) % 8 != 0)
+  if (reinterpret_cast<uintptr_t>(data) % 8 != 0)
     return false;
 
   const uint8_t* data_start = message.data();
diff --git a/mojo/public/cpp/bindings/lib/shared_data.h b/mojo/public/cpp/bindings/lib/shared_data.h
index e396b0d..bba4710 100644
--- a/mojo/public/cpp/bindings/lib/shared_data.h
+++ b/mojo/public/cpp/bindings/lib/shared_data.h
@@ -32,6 +32,7 @@
     holder_->Release();
     holder_ = other.holder_;
     holder_->Retain();
+    return *this;
   }
 
   void reset() {
diff --git a/mojo/public/cpp/bindings/tests/array_unittest.cc b/mojo/public/cpp/bindings/tests/array_unittest.cc
index 72033ea..dccd716 100644
--- a/mojo/public/cpp/bindings/tests/array_unittest.cc
+++ b/mojo/public/cpp/bindings/tests/array_unittest.cc
@@ -4,9 +4,11 @@
 
 #include "mojo/public/cpp/bindings/allocation_scope.h"
 #include "mojo/public/cpp/bindings/array.h"
+#include "mojo/public/cpp/bindings/interface.h"
 #include "mojo/public/cpp/bindings/lib/fixed_buffer.h"
 #include "mojo/public/cpp/bindings/lib/scratch_buffer.h"
 #include "mojo/public/cpp/environment/environment.h"
+#include "mojo/public/interfaces/bindings/tests/sample_service.mojom.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace mojo {
@@ -84,6 +86,86 @@
   EXPECT_FALSE(handles[0].is_valid());
 }
 
+// Tests that Array<Handle> supports closing handles.
+TEST(ArrayTest, HandlesAreClosed) {
+  Environment env;
+
+  ScopedMessagePipeHandle msg_pipe0, msg_pipe1;
+  CreateMessagePipe(&msg_pipe0, &msg_pipe1);
+
+  ScopedHandle pipe0 = ScopedHandle::From(msg_pipe0.Pass());
+  ScopedHandle pipe1 = ScopedHandle::From(msg_pipe1.Pass());
+
+  MojoHandle pipe0_value = pipe0.get().value();
+  MojoHandle pipe1_value = pipe1.get().value();
+
+  {
+    AllocationScope scope;
+
+    Array<Handle>::Builder handles_builder(2);
+    handles_builder[0] = pipe0.Pass();
+    handles_builder[1].reset(pipe1.release());
+
+    MOJO_ALLOW_UNUSED Array<Handle> handles =
+        handles_builder.Finish();
+  }
+
+  // We expect the pipes to have been closed.
+  EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(pipe0_value));
+  EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(pipe1_value));
+}
+
+// Tests that Array<MessagePipeHandle> supports closing handles.
+TEST(ArrayTest, MessagePipeHandlesAreClosed) {
+  Environment env;
+
+  ScopedMessagePipeHandle pipe0, pipe1;
+  CreateMessagePipe(&pipe0, &pipe1);
+
+  MojoHandle pipe0_value = pipe0.get().value();
+  MojoHandle pipe1_value = pipe1.get().value();
+
+  {
+    AllocationScope scope;
+
+    Array<MessagePipeHandle>::Builder handles_builder(2);
+    handles_builder[0] = pipe0.Pass();
+    handles_builder[1].reset(pipe1.release());
+
+    MOJO_ALLOW_UNUSED Array<MessagePipeHandle> handles =
+        handles_builder.Finish();
+  }
+
+  // We expect the pipes to have been closed.
+  EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(pipe0_value));
+  EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(pipe1_value));
+}
+
+// Tests that Array<InterfaceHandle<S>> supports closing handles.
+TEST(ArrayTest, InterfaceHandlesAreClosed) {
+  Environment env;
+
+  InterfacePipe<sample::Port, sample::Port> pipe;
+
+  MojoHandle pipe0_value = pipe.handle_to_self.get().value();
+  MojoHandle pipe1_value = pipe.handle_to_peer.get().value();
+
+  {
+    AllocationScope scope;
+
+    Array<sample::PortHandle>::Builder handles_builder(2);
+    handles_builder[0] = pipe.handle_to_self.Pass();
+    handles_builder[1].reset(pipe.handle_to_peer.release());
+
+    MOJO_ALLOW_UNUSED Array<sample::PortHandle> handles =
+        handles_builder.Finish();
+  }
+
+  // We expect the pipes to have been closed.
+  EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(pipe0_value));
+  EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(pipe1_value));
+}
+
 }  // namespace
 }  // namespace test
 }  // namespace mojo
diff --git a/mojo/public/cpp/bindings/tests/handle_passing_unittest.cc b/mojo/public/cpp/bindings/tests/handle_passing_unittest.cc
index 23d8798..7df6db6 100644
--- a/mojo/public/cpp/bindings/tests/handle_passing_unittest.cc
+++ b/mojo/public/cpp/bindings/tests/handle_passing_unittest.cc
@@ -231,6 +231,39 @@
   EXPECT_TRUE(factory_client.got_response());
 }
 
+TEST_F(HandlePassingTest, PipesAreClosed) {
+  InterfacePipe<sample::Factory> pipe;
+  RemotePtr<sample::Factory> factory(pipe.handle_to_self.Pass(), NULL);
+
+  MessagePipe extra_pipe;
+
+  MojoHandle handle0_value = extra_pipe.handle0.get().value();
+  MojoHandle handle1_value = extra_pipe.handle1.get().value();
+
+  {
+    AllocationScope scope;
+
+    Array<MessagePipeHandle>::Builder pipes(2);
+    pipes[0] = extra_pipe.handle0.Pass();
+    pipes[1] = extra_pipe.handle1.Pass();
+
+    sample::Request::Builder request_builder;
+    request_builder.set_more_pipes(pipes.Finish());
+
+    sample::Request request = request_builder.Finish();
+
+    factory->DoStuff(request, ScopedMessagePipeHandle());
+
+    // The handles should have been transferred to the underlying Message.
+    EXPECT_EQ(MOJO_HANDLE_INVALID, request.more_pipes()[0].get().value());
+    EXPECT_EQ(MOJO_HANDLE_INVALID, request.more_pipes()[1].get().value());
+  }
+
+  // We expect the pipes to have been closed.
+  EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(handle0_value));
+  EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(handle1_value));
+}
+
 }  // namespace
 }  // namespace test
 }  // namespace mojo
diff --git a/mojo/public/cpp/bindings/tests/request_response_unittest.cc b/mojo/public/cpp/bindings/tests/request_response_unittest.cc
index 9ca7cd4..94ed91f 100644
--- a/mojo/public/cpp/bindings/tests/request_response_unittest.cc
+++ b/mojo/public/cpp/bindings/tests/request_response_unittest.cc
@@ -25,7 +25,10 @@
       const String& a,
       const Callback<void(String)>& callback) MOJO_OVERRIDE {
     AllocationScope scope;
-    callback.Run(a);
+    Callback<void(String)> callback_copy;
+    // Make sure operator= is used.
+    callback_copy = callback;
+    callback_copy.Run(a);
   }
 
   virtual void EchoStrings(
@@ -43,6 +46,12 @@
     callback.Run(a.Pass());
   }
 
+  virtual void EchoEnum(sample::Enum a,
+                        const Callback<void(sample::Enum)>& callback)
+      MOJO_OVERRIDE {
+    callback.Run(a);
+  }
+
  private:
   RemotePtr<sample::ProviderClient> client_;
 };
@@ -61,6 +70,17 @@
   std::string* buf_;
 };
 
+class EnumRecorder {
+ public:
+  EnumRecorder(sample::Enum* value) : value_(value) {
+  }
+  void Run(sample::Enum a) const {
+    *value_ = a;
+  }
+ private:
+  sample::Enum* value_;
+};
+
 class MessagePipeWriter {
  public:
   explicit MessagePipeWriter(const char* text) : text_(text) {
@@ -135,6 +155,22 @@
   EXPECT_EQ(std::string("hello"), value);
 }
 
+TEST_F(RequestResponseTest, EchoEnum) {
+  InterfacePipe<sample::Provider> pipe;
+  ProviderImpl provider_impl(pipe.handle_to_peer.Pass());
+  RemotePtr<sample::Provider> provider(pipe.handle_to_self.Pass(), NULL);
+
+  sample::Enum value;
+  {
+    AllocationScope scope;
+    provider->EchoEnum(sample::ENUM_VALUE, EnumRecorder(&value));
+  }
+
+  PumpMessages();
+
+  EXPECT_EQ(sample::ENUM_VALUE, value);
+}
+
 }  // namespace
 }  // namespace test
 }  // namespace mojo
diff --git a/mojo/public/cpp/bindings/tests/sample_service_unittest.cc b/mojo/public/cpp/bindings/tests/sample_service_unittest.cc
index 75d0d9b..05eca44 100644
--- a/mojo/public/cpp/bindings/tests/sample_service_unittest.cc
+++ b/mojo/public/cpp/bindings/tests/sample_service_unittest.cc
@@ -75,6 +75,15 @@
     output_streams[i] = producer.Pass();
   }
 
+  mojo::Array<mojo::Array<bool> >::Builder array_of_array_of_bools(2);
+  for (size_t i = 0; i < 2; ++i) {
+    mojo::Array<bool>::Builder array_of_bools(2);
+    for (size_t j = 0; j < 2; ++j) {
+      array_of_bools[j] = j;
+    }
+    array_of_array_of_bools[i] = array_of_bools.Finish();
+  }
+
   mojo::ScopedMessagePipeHandle pipe0, pipe1;
   mojo::CreateMessagePipe(&pipe0, &pipe1);
 
@@ -91,6 +100,7 @@
   foo.set_source(pipe1.Pass());
   foo.set_input_streams(input_streams.Finish());
   foo.set_output_streams(output_streams.Finish());
+  foo.set_array_of_array_of_bools(array_of_array_of_bools.Finish());
 
   return foo.Finish();
 }
@@ -138,6 +148,14 @@
 
   EXPECT_FALSE(foo.output_streams().is_null());
   EXPECT_EQ(2u, foo.output_streams().size());
+
+  EXPECT_EQ(2u, foo.array_of_array_of_bools().size());
+  for (size_t i = 0; i < foo.array_of_array_of_bools().size(); ++i) {
+    EXPECT_EQ(2u, foo.array_of_array_of_bools()[i].size());
+    for (size_t j = 0; j < foo.array_of_array_of_bools()[i].size(); ++j) {
+      EXPECT_EQ(bool(j), foo.array_of_array_of_bools()[i][j]);
+    }
+  }
 }
 
 void PrintSpacer(int depth) {
@@ -222,6 +240,7 @@
     Print(depth, "source", foo.source().get());
     Print(depth, "input_streams", foo.input_streams());
     Print(depth, "output_streams", foo.output_streams());
+    Print(depth, "array_of_array_of_bools", foo.array_of_array_of_bools());
     --depth;
   }
 }
diff --git a/mojo/public/cpp/environment/DEPS b/mojo/public/cpp/environment/DEPS
new file mode 100644
index 0000000..3887457
--- /dev/null
+++ b/mojo/public/cpp/environment/DEPS
@@ -0,0 +1,3 @@
+include_rules = [
+  "+mojo/public/c/environment",
+]
diff --git a/mojo/public/cpp/environment/default_async_waiter.h b/mojo/public/cpp/environment/default_async_waiter.h
index d7f48bf..6edfaaa 100644
--- a/mojo/public/cpp/environment/default_async_waiter.h
+++ b/mojo/public/cpp/environment/default_async_waiter.h
@@ -5,7 +5,7 @@
 #ifndef MOJO_PUBLIC_CPP_ENVIRONMENT_DEFAULT_ASYNC_WAITER_H_
 #define MOJO_PUBLIC_CPP_ENVIRONMENT_DEFAULT_ASYNC_WAITER_H_
 
-#include "mojo/public/c/system/async_waiter.h"
+#include "mojo/public/c/environment/async_waiter.h"
 
 namespace mojo {
 
diff --git a/mojo/public/cpp/shell/application.h b/mojo/public/cpp/shell/application.h
index 9a2ea67..ffca7fe 100644
--- a/mojo/public/cpp/shell/application.h
+++ b/mojo/public/cpp/shell/application.h
@@ -14,18 +14,18 @@
 
 namespace mojo {
 
-class Application : public internal::ServiceFactoryBase::Owner {
+class Application : public internal::ServiceConnectorBase::Owner {
  public:
   explicit Application(ScopedShellHandle shell_handle);
   explicit Application(MojoHandle shell_handle);
   virtual ~Application();
 
-  // internal::ServiceFactoryBase::Owner methods.
-  // Takes ownership of |service_factory|.
-  virtual void AddServiceFactory(internal::ServiceFactoryBase* service_factory)
-      MOJO_OVERRIDE;
-  virtual void RemoveServiceFactory(
-    internal::ServiceFactoryBase* service_factory) MOJO_OVERRIDE;
+  // internal::ServiceConnectorBase::Owner methods.
+  // Takes ownership of |service_connector|.
+  virtual void AddServiceConnector(
+      internal::ServiceConnectorBase* service_connector) MOJO_OVERRIDE;
+  virtual void RemoveServiceConnector(
+      internal::ServiceConnectorBase* service_connector) MOJO_OVERRIDE;
 
  protected:
   // ShellClient methods.
@@ -34,8 +34,8 @@
       MOJO_OVERRIDE;
 
  private:
-  typedef std::vector<internal::ServiceFactoryBase*> ServiceFactoryList;
-  ServiceFactoryList service_factories_;
+  typedef std::vector<internal::ServiceConnectorBase*> ServiceConnectorList;
+  ServiceConnectorList service_connectors_;
 };
 
 }  // namespace mojo
diff --git a/mojo/public/cpp/shell/lib/application.cc b/mojo/public/cpp/shell/lib/application.cc
index 4d0b06f..3224202 100644
--- a/mojo/public/cpp/shell/lib/application.cc
+++ b/mojo/public/cpp/shell/lib/application.cc
@@ -7,48 +7,48 @@
 namespace mojo {
 
 Application::Application(ScopedShellHandle shell_handle)
-    : internal::ServiceFactoryBase::Owner(shell_handle.Pass()) {
+    : internal::ServiceConnectorBase::Owner(shell_handle.Pass()) {
 }
 
 Application::Application(MojoHandle shell_handle)
-    : internal::ServiceFactoryBase::Owner(
+    : internal::ServiceConnectorBase::Owner(
           mojo::MakeScopedHandle(ShellHandle(shell_handle)).Pass()) {}
 
 Application::~Application() {
-  for (ServiceFactoryList::iterator it = service_factories_.begin();
-       it != service_factories_.end(); ++it) {
+  for (ServiceConnectorList::iterator it = service_connectors_.begin();
+       it != service_connectors_.end(); ++it) {
     delete *it;
   }
 }
 
-void Application::AddServiceFactory(
-    internal::ServiceFactoryBase* service_factory) {
-  service_factories_.push_back(service_factory);
-  set_service_factory_owner(service_factory, this);
+void Application::AddServiceConnector(
+    internal::ServiceConnectorBase* service_connector) {
+  service_connectors_.push_back(service_connector);
+  set_service_connector_owner(service_connector, this);
 }
 
-void Application::RemoveServiceFactory(
-    internal::ServiceFactoryBase* service_factory) {
-  for (ServiceFactoryList::iterator it = service_factories_.begin();
-       it != service_factories_.end(); ++it) {
-    if (*it == service_factory) {
-      service_factories_.erase(it);
-      delete service_factory;
+void Application::RemoveServiceConnector(
+    internal::ServiceConnectorBase* service_connector) {
+  for (ServiceConnectorList::iterator it = service_connectors_.begin();
+       it != service_connectors_.end(); ++it) {
+    if (*it == service_connector) {
+      service_connectors_.erase(it);
+      delete service_connector;
       break;
     }
   }
-  if (service_factories_.empty())
+  if (service_connectors_.empty())
     shell_.reset();
 }
 
 void Application::AcceptConnection(const mojo::String& url,
                                    ScopedMessagePipeHandle client_handle) {
   // TODO(davemoore): This method must be overridden by an Application subclass
-  // to dispatch to the right ServiceFactory. We need to figure out an approach
-  // to registration to make this better.
-  assert(1 == service_factories_.size());
-  return service_factories_.front()->AcceptConnection(url.To<std::string>(),
-                                                      client_handle.Pass());
+  // to dispatch to the right ServiceConnector. We need to figure out an
+  // approach to registration to make this better.
+  assert(1 == service_connectors_.size());
+  return service_connectors_.front()->AcceptConnection(url.To<std::string>(),
+                                                       client_handle.Pass());
 }
 
 }  // namespace mojo
diff --git a/mojo/public/cpp/shell/lib/service.cc b/mojo/public/cpp/shell/lib/service.cc
index 391a576..e408481 100644
--- a/mojo/public/cpp/shell/lib/service.cc
+++ b/mojo/public/cpp/shell/lib/service.cc
@@ -7,13 +7,13 @@
 namespace mojo {
 namespace internal {
 
-ServiceFactoryBase::Owner::Owner(ScopedShellHandle shell_handle)
+ServiceConnectorBase::Owner::Owner(ScopedShellHandle shell_handle)
   : shell_(shell_handle.Pass(), this) {
 }
 
-ServiceFactoryBase::Owner::~Owner() {}
+ServiceConnectorBase::Owner::~Owner() {}
 
-ServiceFactoryBase::~ServiceFactoryBase() {}
+ServiceConnectorBase::~ServiceConnectorBase() {}
 
 }  // namespace internal
 }  // namespace mojo
diff --git a/mojo/public/cpp/shell/service.h b/mojo/public/cpp/shell/service.h
index 55b4aae..7dd08ff 100644
--- a/mojo/public/cpp/shell/service.h
+++ b/mojo/public/cpp/shell/service.h
@@ -19,41 +19,42 @@
 // class FooImpl : public Foo {
 //  public:
 //   FooImpl();
-//   void Initialize(ServiceFactory<FooImpl>* service_factory,
+//   void Initialize(ServiceConnector<FooImpl>* service_connector,
 //                   ScopedMessagePipeHandle client_handle
 //  private:
-//   ServiceFactory<FooImpl>* service_factory_;
+//   ServiceConnector<FooImpl>* service_connector_;
 //   RemotePtr<FooPeer> client_;
 // };
 //
 //
-// To simplify further FooImpl can use the Service<> template.
-// class FooImpl : public Service<Foo, FooImpl> {
+// To simplify further FooImpl can use the ServiceConnection<> template.
+// class FooImpl : public ServiceConnection<Foo, FooImpl> {
 //  public:
 //   FooImpl();
 //   ...
 //   <Foo implementation>
 // };
 //
-// Instances of FooImpl will be created by a specialized ServiceFactory
+// Instances of FooImpl will be created by a specialized ServiceConnector
 //
-// ServiceFactory<FooImpl>
+// ServiceConnector<FooImpl>
 //
 // Optionally the classes can be specializeed with a shared context
-// class ServiceFactory<FooImpl, MyContext>
+// class ServiceConnector<FooImpl, MyContext>
 // and
-// class FooImpl : public Service<Foo, FooImpl, MyContext>
+// class FooImpl : public ServiceConnection<Foo, FooImpl, MyContext>
 //
-// foo_factory = new ServiceFactory<FooImpl, MyContext>(my_context);
+// foo_connector = new ServiceConnector<FooImpl, MyContext>(my_context);
 // instances of FooImpl can call context() and retrieve the value of my_context.
 //
-// Lastly create an Application instance that collects all the ServiceFactories.
+// Lastly create an Application instance that collects all the
+// ServiceConnectors.
 //
 // Application app(shell_handle);
-// app.AddServiceFactory(new ServiceFactory<FooImpl>);
+// app.AddServiceConnector(new ServiceConnector<FooImpl>);
 //
 //
-// Specialization of ServiceFactory.
+// Specialization of ServiceConnector.
 // ServiceImpl: Implementation of Service interface.
 // Context: Optional type of shared context.v
 //
@@ -61,27 +62,27 @@
 namespace mojo {
 
 namespace internal {
-class ServiceFactoryBase {
+class ServiceConnectorBase {
  public:
   class Owner : public ShellClient {
    public:
     Owner(ScopedShellHandle shell_handle);
     ~Owner();
     Shell* shell() { return shell_.get(); }
-    virtual void AddServiceFactory(
-        internal::ServiceFactoryBase* service_factory) = 0;
-    virtual void RemoveServiceFactory(
-        internal::ServiceFactoryBase* service_factory) = 0;
+    virtual void AddServiceConnector(
+        internal::ServiceConnectorBase* service_connector) = 0;
+    virtual void RemoveServiceConnector(
+        internal::ServiceConnectorBase* service_connector) = 0;
 
    protected:
-    void set_service_factory_owner(ServiceFactoryBase* service_factory,
-                                   Owner* owner) {
-      service_factory->owner_ = owner;
+    void set_service_connector_owner(ServiceConnectorBase* service_connector,
+                                     Owner* owner) {
+      service_connector->owner_ = owner;
     }
     RemotePtr<Shell> shell_;
   };
-  ServiceFactoryBase() : owner_(NULL) {}
-  virtual ~ServiceFactoryBase();
+  ServiceConnectorBase() : owner_(NULL) {}
+  virtual ~ServiceConnectorBase();
   Shell* shell() { return owner_->shell(); }
   virtual void AcceptConnection(const std::string& url,
                                 ScopedMessagePipeHandle client_handle) = 0;
@@ -92,11 +93,11 @@
 }  // namespace internal
 
 template <class ServiceImpl, typename Context=void>
-class ServiceFactory : public internal::ServiceFactoryBase {
+class ServiceConnector : public internal::ServiceConnectorBase {
  public:
-  ServiceFactory(Context* context = NULL) : context_(context) {}
+  ServiceConnector(Context* context = NULL) : context_(context) {}
 
-  virtual ~ServiceFactory() {
+  virtual ~ServiceConnector() {
     for (typename ServiceList::iterator it = services_.begin();
          it != services_.end(); ++it) {
       delete *it;
@@ -118,7 +119,7 @@
         services_.erase(it);
         delete service;
         if (services_.empty())
-          owner_->RemoveServiceFactory(this);
+          owner_->RemoveServiceConnector(this);
         return;
       }
     }
@@ -132,21 +133,21 @@
   Context* context_;
 };
 
-// Specialization of ServiceFactory.
+// Specialization of ServiceConnection.
 // ServiceInterface: Service interface.
 // ServiceImpl: Implementation of Service interface.
 // Context: Optional type of shared context.
 template <class ServiceInterface, class ServiceImpl, typename Context=void>
-class Service : public ServiceInterface {
+class ServiceConnection : public ServiceInterface {
  public:
-  virtual ~Service() {}
+  virtual ~ServiceConnection() {}
 
  protected:
-  Service() : reaper_(this), service_factory_(NULL) {}
+  ServiceConnection() : reaper_(this), service_connector_(NULL) {}
 
-  void Initialize(ServiceFactory<ServiceImpl, Context>* service_factory,
+  void Initialize(ServiceConnector<ServiceImpl, Context>* service_connector,
                   ScopedMessagePipeHandle client_handle) {
-    service_factory_ = service_factory;
+    service_connector_ = service_connector;
     client_.reset(
         MakeScopedHandle(
             InterfaceHandle<typename ServiceInterface::_Peer>(
@@ -155,27 +156,27 @@
         &reaper_);
   }
 
-  Shell* shell() { return service_factory_->shell(); }
-  Context* context() const { return service_factory_->context(); }
+  Shell* shell() { return service_connector_->shell(); }
+  Context* context() const { return service_connector_->context(); }
   typename ServiceInterface::_Peer* client() { return client_.get(); }
 
  private:
   // The Reaper class allows us to handle errors on the client proxy without
-  // polluting the name space of the Service<> class.
+  // polluting the name space of the ServiceConnection<> class.
   class Reaper : public ErrorHandler {
    public:
-    Reaper(Service<ServiceInterface, ServiceImpl, Context>* service)
+    Reaper(ServiceConnection<ServiceInterface, ServiceImpl, Context>* service)
         : service_(service) {}
     virtual void OnError() {
-      service_->service_factory_->RemoveService(
+      service_->service_connector_->RemoveService(
           static_cast<ServiceImpl*>(service_));
     }
    private:
-    Service<ServiceInterface, ServiceImpl, Context>* service_;
+    ServiceConnection<ServiceInterface, ServiceImpl, Context>* service_;
   };
-  friend class ServiceFactory<ServiceImpl, Context>;
+  friend class ServiceConnector<ServiceImpl, Context>;
   Reaper reaper_;
-  ServiceFactory<ServiceImpl, Context>* service_factory_;
+  ServiceConnector<ServiceImpl, Context>* service_connector_;
   RemotePtr<typename ServiceInterface::_Peer> client_;
 };
 
diff --git a/mojo/public/gles2/gles2_private.h b/mojo/public/gles2/gles2_private.h
index 591e043..c92f555 100644
--- a/mojo/public/gles2/gles2_private.h
+++ b/mojo/public/gles2/gles2_private.h
@@ -7,9 +7,9 @@
 
 #include <stdint.h>
 
+#include "mojo/public/c/environment/async_waiter.h"
 #include "mojo/public/c/gles2/gles2_export.h"
 #include "mojo/public/c/gles2/gles2_types.h"
-#include "mojo/public/c/system/async_waiter.h"
 #include "mojo/public/cpp/system/core.h"
 
 namespace mojo {
diff --git a/mojo/public/interfaces/bindings/tests/sample_factory.mojom b/mojo/public/interfaces/bindings/tests/sample_factory.mojom
index 15b771a..00ab1ef 100644
--- a/mojo/public/interfaces/bindings/tests/sample_factory.mojom
+++ b/mojo/public/interfaces/bindings/tests/sample_factory.mojom
@@ -10,6 +10,7 @@
 struct Request {
   int32 x;
   handle<message_pipe> pipe;
+  handle<message_pipe>[] more_pipes;
 };
 
 struct Response {
diff --git a/mojo/public/interfaces/bindings/tests/sample_interfaces.mojom b/mojo/public/interfaces/bindings/tests/sample_interfaces.mojom
index 50e2c60..7c20b30 100644
--- a/mojo/public/interfaces/bindings/tests/sample_interfaces.mojom
+++ b/mojo/public/interfaces/bindings/tests/sample_interfaces.mojom
@@ -4,11 +4,16 @@
 
 module sample {
 
+enum Enum {
+  ENUM_VALUE
+};
+
 [Peer=ProviderClient]
 interface Provider {
   EchoString(string a) => (string a);
   EchoStrings(string a, string b) => (string a, string b);
   EchoMessagePipeHandle(handle<message_pipe> a) => (handle<message_pipe> a);
+  EchoEnum(Enum a) => (Enum a);
 };
 
 [Peer=Provider]
diff --git a/mojo/public/interfaces/bindings/tests/sample_service.mojom b/mojo/public/interfaces/bindings/tests/sample_service.mojom
index e9cdbd4..04893a4 100644
--- a/mojo/public/interfaces/bindings/tests/sample_service.mojom
+++ b/mojo/public/interfaces/bindings/tests/sample_service.mojom
@@ -34,6 +34,7 @@
   handle<message_pipe> source @9;
   handle<data_pipe_consumer>[] input_streams @10;
   handle<data_pipe_producer>[] output_streams @11;
+  bool[][] array_of_array_of_bools @12;
 };
 
 struct DefaultsTestInner {
@@ -51,10 +52,6 @@
   Bar.Type bar_type = Bar.TYPE_BOTH;
 };
 
-interface Port {
-  PostMessage@0(string message_text @0);
-};
-
 [Peer=ServiceClient]
 interface Service {
   enum BazOptions {
@@ -69,4 +66,10 @@
   DidFrobinate@0(int32 result @0);
 };
 
+// This interface is referenced above where it is defined. It also refers to
+// itself from a method.
+interface Port {
+  PostMessage@0(string message_text @0, Port[] extra_ports@1);
+};
+
 }
diff --git a/mojo/public/java/src/org/chromium/mojo/system/Core.java b/mojo/public/java/src/org/chromium/mojo/system/Core.java
new file mode 100644
index 0000000..8d084b3
--- /dev/null
+++ b/mojo/public/java/src/org/chromium/mojo/system/Core.java
@@ -0,0 +1,178 @@
+// 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.
+
+package org.chromium.mojo.system;
+
+import java.util.List;
+
+/**
+ * Core mojo interface giving access to the base operations. See |src/mojo/public/c/system/core.h|
+ * for the underlying api.
+ */
+public interface Core {
+
+    /**
+     * Used to indicate an infinite deadline (timeout).
+     */
+    public static final long DEADLINE_INFINITE = -1;
+
+    /**
+     * Flags for the wait operations on handles.
+     */
+    public static class WaitFlags extends Flags<WaitFlags> {
+        /**
+         * Constructor.
+         *
+         * @param flags the serialized flags.
+         */
+        private WaitFlags(int flags) {
+            super(flags);
+        }
+
+        private static final int FLAG_NONE = 0;
+        private static final int FLAG_READABLE = 1 << 0;
+        private static final int FLAG_WRITABLE = 1 << 1;
+        private static final int FLAG_ALL = ~0;
+
+        /**
+         * Change the readable bit of this flag.
+         *
+         * @param readable the new value of the readable bit.
+         * @return this.
+         */
+        public WaitFlags setReadable(boolean readable) {
+            return setFlag(FLAG_READABLE, readable);
+        }
+
+        /**
+         * Change the writable bit of this flag.
+         *
+         * @param writable the new value of the writable bit.
+         * @return this.
+         */
+        public WaitFlags setWritable(boolean writable) {
+            return setFlag(FLAG_WRITABLE, writable);
+        }
+
+        /**
+         * @return a flag with no bit set.
+         */
+        public static WaitFlags none() {
+            return new WaitFlags(FLAG_NONE);
+        }
+
+        /**
+         * @return a flag with all bits set.
+         */
+        public static WaitFlags all() {
+            return new WaitFlags(FLAG_ALL);
+        }
+    }
+
+    /**
+     * @return a platform-dependent monotonically increasing tick count representing "right now."
+     */
+    public long getTimeTicksNow();
+
+    /**
+     * Waits on the given |handle| until the state indicated by |flags| is satisfied or until
+     * |deadline| has passed.
+     *
+     * @return |MojoResult.OK| if some flag in |flags| was satisfied (or is already satisfied).
+     *         <p>
+     *         |MojoResult.DEADLINE_EXCEEDED| if the deadline has passed without any of the flags
+     *         begin satisfied.
+     *         <p>
+     *         |MojoResult.CANCELLED| if |handle| is closed concurrently by another thread.
+     *         <p>
+     *         |MojoResult.FAILED_PRECONDITION| if it is or becomes impossible that any flag in
+     *         |flags| will ever be satisfied (for example, if the other endpoint is close).
+     */
+    public int wait(Handle handle, WaitFlags flags, long deadline);
+
+    /**
+     * Result for the |waitMany| method.
+     */
+    public static class WaitManyResult {
+
+        /**
+         * See |wait| for the different possible values.
+         */
+        private int mMojoResult;
+        /**
+         * If |mojoResult| is |MojoResult.OK|, |handleIndex| is the index of the handle for which
+         * some flag was satisfied (or is already satisfied). If |mojoResult| is
+         * |MojoResult.CANCELLED| or |MojoResult.FAILED_PRECONDITION|, |handleIndex| is the index of
+         * the handle for which the issue occurred.
+         */
+        private int mHandleIndex;
+
+        /**
+         * @return the mojoResult
+         */
+        public int getMojoResult() {
+            return mMojoResult;
+        }
+
+        /**
+         * @param mojoResult the mojoResult to set
+         */
+        public void setMojoResult(int mojoResult) {
+            mMojoResult = mojoResult;
+        }
+
+        /**
+         * @return the handleIndex
+         */
+        public int getHandleIndex() {
+            return mHandleIndex;
+        }
+
+        /**
+         * @param handleIndex the handleIndex to set
+         */
+        public void setHandleIndex(int handleIndex) {
+            mHandleIndex = handleIndex;
+        }
+    }
+
+    /**
+     * Waits on handle in |handles| for at least one of them to satisfy the associated |WaitFlags|,
+     * or until |deadline| has passed.
+     *
+     * @returns a |WaitManyResult|.
+     */
+    public WaitManyResult waitMany(List<Pair<Handle, WaitFlags>> handles, long deadline);
+
+    /**
+     * Creates a message pipe, which is a bidirectional communication channel for framed data (i.e.,
+     * messages). Messages can contain plain data and/or Mojo handles.
+     *
+     * @return the set of handles for the two endpoints (ports) of the message pipe.
+     */
+    public Pair<MessagePipeHandle, MessagePipeHandle> createMessagePipe();
+
+    /**
+     * Creates a data pipe, which is a unidirectional communication channel for unframed data, with
+     * the given options. Data is unframed, but must come as (multiples of) discrete elements, of
+     * the size given in |options|. See |DataPipe.CreateOptions| for a description of the different
+     * options available for data pipes. |options| may be set to null for a data pipe with the
+     * default options (which will have an element size of one byte and have some system-dependent
+     * capacity).
+     *
+     * @return the set of handles for the two endpoints of the data pipe.
+     */
+    public Pair<DataPipe.ProducerHandle, DataPipe.ConsumerHandle> createDataPipe(
+            DataPipe.CreateOptions options);
+
+    /**
+     * Creates a buffer that can be shared between applications (by duplicating the handle -- see
+     * |SharedBufferHandle.duplicate()| -- and passing it over a message pipe). To access the
+     * buffer, one must call |SharedBufferHandle.map|.
+     *
+     * @return the new |SharedBufferHandle|.
+     */
+    public SharedBufferHandle createSharedBuffer(SharedBufferHandle.CreateOptions options,
+            long numBytes);
+}
diff --git a/mojo/public/java/src/org/chromium/mojo/system/DataPipe.java b/mojo/public/java/src/org/chromium/mojo/system/DataPipe.java
new file mode 100644
index 0000000..175f97b
--- /dev/null
+++ b/mojo/public/java/src/org/chromium/mojo/system/DataPipe.java
@@ -0,0 +1,308 @@
+// 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.
+
+package org.chromium.mojo.system;
+
+import java.nio.ByteBuffer;
+
+/**
+ * Interface for data pipes. A data pipe is a unidirectional communication channel for unframed
+ * data. Data is unframed, but must come as (multiples of) discrete elements, of the size given at
+ * creation time.
+ */
+public interface DataPipe {
+
+    /**
+     * Flags for the data pipe creation operation.
+     */
+    public static class CreateFlags extends Flags<CreateFlags> {
+        private static final int FLAG_NONE = 0;
+        private static final int FLAG_MAY_DISCARD = 1 << 0;
+
+        /**
+         * Dedicated constructor.
+         *
+         * @param flags initial value of the flags.
+         */
+        protected CreateFlags(int flags) {
+            super(flags);
+        }
+
+        /**
+         * Change the may-discard bit of this flag. This indicates that the data pipe may discard
+         * data for whatever reason; best-effort delivery. In particular, if the capacity is
+         * reached, old data may be discard to make room for new data.
+         *
+         * @param mayDiscard the new value of the may-discard bit.
+         * @return this.
+         */
+        public CreateFlags setMayDiscard(boolean mayDiscard) {
+            return setFlag(FLAG_MAY_DISCARD, mayDiscard);
+        }
+
+        /**
+         * @return flags with no bit set.
+         */
+        public static CreateFlags none() {
+            return new CreateFlags(FLAG_NONE);
+        }
+
+    }
+
+    /**
+     * Used to specify creation parameters for a data pipe to |Core.createDataPipe()|.
+     */
+    public static class CreateOptions {
+
+        /**
+         * Used to specify different modes of operation, see |DataPipe.CreateFlags|.
+         */
+        private CreateFlags mFlags = CreateFlags.none();
+        /**
+         * The size of an element, in bytes. All transactions and buffers will consist of an
+         * integral number of elements. Must be nonzero.
+         */
+        private int mElementNumBytes;
+        /**
+         * The capacity of the data pipe, in number of bytes; must be a multiple of
+         * |element_num_bytes|. The data pipe will always be able to queue AT LEAST this much data.
+         * Set to zero to opt for a system-dependent automatically-calculated capacity (which will
+         * always be at least one element).
+         */
+        private int mCapacityNumBytes;
+
+        /**
+         * @return the flags
+         */
+        public CreateFlags getFlags() {
+            return mFlags;
+        }
+
+        /**
+         * @return the elementNumBytes
+         */
+        public int getElementNumBytes() {
+            return mElementNumBytes;
+        }
+
+        /**
+         * @param elementNumBytes the elementNumBytes to set
+         */
+        public void setElementNumBytes(int elementNumBytes) {
+            mElementNumBytes = elementNumBytes;
+        }
+
+        /**
+         * @return the capacityNumBytes
+         */
+        public int getCapacityNumBytes() {
+            return mCapacityNumBytes;
+        }
+
+        /**
+         * @param capacityNumBytes the capacityNumBytes to set
+         */
+        public void setCapacityNumBytes(int capacityNumBytes) {
+            mCapacityNumBytes = capacityNumBytes;
+        }
+
+    }
+
+    /**
+     * Flags for the write operations on MessagePipeHandle .
+     */
+    public static class WriteFlags extends Flags<WriteFlags> {
+        private static final int FLAG_NONE = 0;
+        private static final int FLAG_ALL_OR_NONE = 1 << 0;
+
+        /**
+         * Dedicated constructor.
+         *
+         * @param flags initial value of the flags.
+         */
+        private WriteFlags(int flags) {
+            super(flags);
+        }
+
+        /**
+         * Change the all-or-none bit of those flags. If set, write either all the elements
+         * requested or none of them.
+         *
+         * @param allOrNone the new value of all-or-none bit.
+         * @return this.
+         */
+        public WriteFlags setAllOrNone(boolean allOrNone) {
+            return setFlag(FLAG_ALL_OR_NONE, allOrNone);
+        }
+
+        /**
+         * @return a flag with no bit set.
+         */
+        public static WriteFlags none() {
+            return new WriteFlags(FLAG_NONE);
+        }
+    }
+
+    /**
+     * Flags for the read operations on MessagePipeHandle.
+     */
+    public static class ReadFlags extends Flags<ReadFlags> {
+        private static final int FLAG_NONE = 0;
+        private static final int FLAG_ALL_OR_NONE = 1 << 0;
+        private static final int FLAG_QUERY = 1 << 2;
+
+        /**
+         * Dedicated constructor.
+         *
+         * @param flags initial value of the flag.
+         */
+        private ReadFlags(int flags) {
+            super(flags);
+        }
+
+        /**
+         * Change the all-or-none bit of this flag. If set, read (or discard) either the requested
+         * number of elements or none.
+         *
+         * @param allOrNone the new value of the all-or-none bit.
+         * @return this.
+         */
+        public ReadFlags setAllOrNone(boolean allOrNone) {
+            return setFlag(FLAG_ALL_OR_NONE, allOrNone);
+        }
+
+        /**
+         * Change the query bit of this flag. If set query the number of elements available to read.
+         * Mutually exclusive with |dicard| and |allOrNone| is ignored if this flag is set.
+         *
+         * @param query the new value of the query bit.
+         * @return this.
+         */
+        public ReadFlags query(boolean query) {
+            return setFlag(FLAG_QUERY, query);
+        }
+
+        /**
+         * @return a flag with no bit set.
+         */
+        public static ReadFlags none() {
+            return new ReadFlags(FLAG_NONE);
+        }
+
+    }
+
+    /**
+     * Handle for the producer part of a data pipe.
+     */
+    public static interface ProducerHandle extends Handle {
+
+        /**
+         * Writes the given data to the data pipe producer. |elements| points to data; the buffer
+         * must be a direct ByteBuffer and the limit should be a multiple of the data pipe's element
+         * size. If |allOrNone| is set in |flags|, either all the data will be written or none is.
+         * <p>
+         * On success, returns the amount of data that was actually written.
+         * <p>
+         * Note: If the data pipe has the "may discard" option flag (specified on creation), this
+         * will discard as much data as required to write the given data, starting with the earliest
+         * written data that has not been consumed. However, even with "may discard", if the buffer
+         * limit is greater than the data pipe's capacity (and |allOrNone| is not set), this will
+         * write the maximum amount possible (namely, the data pipe's capacity) and return that
+         * amount. It will *not* discard data from |elements|.
+         *
+         * @return number of written bytes.
+         */
+        public int writeData(ByteBuffer elements, WriteFlags flags);
+
+        /**
+         * Begins a two-phase write to the data pipe producer . On success, returns a |ByteBuffer|
+         * to which the caller can write. If flags has |allOrNone| set, then the buffer capacity
+         * will be at least as large as |numBytes|, which must also be a multiple of the element
+         * size (if |allOrNone| is not set, |numBytes| is ignored and the caller must check the
+         * capacity of the buffer).
+         * <p>
+         * During a two-phase write, this handle is *not* writable. E.g., if another thread tries to
+         * write to it, it will throw a |MojoException| with code |MojoResult.BUSY|; that thread can
+         * then wait for this handle to become writable again.
+         * <p>
+         * Once the caller has finished writing data to the buffer, it should call |endWriteData()|
+         * to specify the amount written and to complete the two-phase write.
+         * <p>
+         * Note: If the data pipe has the "may discard" option flag (specified on creation) and
+         * |flags| has |allOrNone| set, this may discard some data.
+         *
+         * @return The buffer to write to.
+         */
+        public ByteBuffer beginWriteData(int numBytes, WriteFlags flags);
+
+        /**
+         * Ends a two-phase write to the data pipe producer that was begun by a call to
+         * |beginWriteData()| on the same handle. |numBytesWritten| should indicate the amount of
+         * data actually written; it must be less than or equal to the capacity of the buffer
+         * returned by |beginWriteData()| and must be a multiple of the element size. The buffer
+         * returned from |beginWriteData()| must have been filled with exactly |numBytesWritten|
+         * bytes of data.
+         * <p>
+         * On failure, the two-phase write (if any) is ended (so the handle may become writable
+         * again, if there's space available) but no data written to the buffer is "put into" the
+         * data pipe.
+         */
+        public void endWriteData(int numBytesWritten);
+    }
+
+    /**
+     * Handle for the consumer part of a data pipe.
+     */
+    public static interface ConsumerHandle extends Handle {
+
+        /**
+         * Discards data on the data pie consumer. This method discards up to |numBytes| (which
+         * again be a multiple of the element size) bytes of data, returning the amount actually
+         * discarded. if |flags| has |allOrNone|, it will either discard exactly |numBytes| bytes of
+         * data or none. In this case, |query| must not be set.
+         */
+        public int discardData(int numBytes, ReadFlags flags);
+
+        /**
+         * Reads data from the data pipe consumer. May also be used to query the amount of data
+         * available. If |flags| has not |query| set, this tries to read up to |elements| capacity
+         * (which must be a multiple of the data pipe's element size) bytes of data to |elements|
+         * and returns the amount actually read. |elements| must be a direct ByteBuffer. If flags
+         * has |allOrNone| set, it will either read exactly |elements| capacity bytes of data or
+         * none.
+         * <p>
+         * If flags has |query| set, it queries the amount of data available, returning the number
+         * of bytes available. In this case |allOrNone| is ignored, as are |elements|.
+         */
+        public int readData(ByteBuffer elements, ReadFlags flags);
+
+        /**
+         * Begins a two-phase read from the data pipe consumer. On success, returns a |ByteBuffer|
+         * from which the caller can read up to its limit bytes of data. If flags has |allOrNone|
+         * set, then the limit will be at least as large as |numBytes|, which must also be a
+         * multiple of the element size (if |allOrNone| is not set, |numBytes| is ignored). |flags|
+         * must not have |query| set.
+         * <p>
+         * During a two-phase read, this handle is *not* readable. E.g., if another thread tries to
+         * read from it, it will throw a |MojoException| with code |MojoResult.BUSY|; that thread
+         * can then wait for this handle to become readable again.
+         * <p>
+         * Once the caller has finished reading data from the buffer, it should call |endReadData()|
+         * to specify the amount read and to complete the two-phase read.
+         */
+        public ByteBuffer beginReadData(int numBytes, ReadFlags flags);
+
+        /**
+         * Ends a two-phase read from the data pipe consumer that was begun by a call to
+         * |beginReadData()| on the same handle. |numBytesRead| should indicate the amount of data
+         * actually read; it must be less than or equal to the limit of the buffer returned by
+         * |beginReadData()| and must be a multiple of the element size.
+         * <p>
+         * On failure, the two-phase read (if any) is ended (so the handle may become readable
+         * again) but no data is "removed" from the data pipe.
+         */
+        public void endReadData(int numBytesRead);
+    }
+
+}
diff --git a/mojo/public/java/src/org/chromium/mojo/system/Flags.java b/mojo/public/java/src/org/chromium/mojo/system/Flags.java
new file mode 100644
index 0000000..bfce6e4
--- /dev/null
+++ b/mojo/public/java/src/org/chromium/mojo/system/Flags.java
@@ -0,0 +1,48 @@
+// 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.
+
+package org.chromium.mojo.system;
+
+/**
+ * Base class for bit field used as flags.
+ *
+ * @param <F> the type of the flags.
+ */
+public abstract class Flags<F extends Flags<F>> {
+    private int mFlags;
+
+    /**
+     * Dedicated constructor.
+     *
+     * @param flags initial value of the flag.
+     */
+    protected Flags(int flags) {
+        mFlags = flags;
+    }
+
+    /**
+     * @return the computed flag.
+     */
+    public int getFlags() {
+        return mFlags;
+    }
+
+    /**
+     * Change the given bit of this flag.
+     *
+     * @param value the new value of given bit.
+     * @return this.
+     */
+    protected F setFlag(int flag, boolean value) {
+        if (value) {
+            mFlags |= flag;
+        } else {
+            mFlags &= ~flag;
+        }
+        @SuppressWarnings("unchecked")
+        F f = (F) this;
+        return f;
+    }
+
+}
diff --git a/mojo/public/java/src/org/chromium/mojo/system/Handle.java b/mojo/public/java/src/org/chromium/mojo/system/Handle.java
new file mode 100644
index 0000000..6f60055
--- /dev/null
+++ b/mojo/public/java/src/org/chromium/mojo/system/Handle.java
@@ -0,0 +1,36 @@
+// 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.
+
+package org.chromium.mojo.system;
+
+import java.io.Closeable;
+
+/**
+ * A generic mojo handle.
+ */
+public interface Handle extends Closeable {
+
+    /**
+     * Closes the given |handle|.
+     * <p>
+     * Concurrent operations on |handle| may succeed (or fail as usual) if they happen before the
+     * close, be cancelled with result |MojoResult.CANCELLED| if they properly overlap (this is
+     * likely the case with |wait()|, etc.), or fail with |MojoResult.INVALID_ARGUMENT| if they
+     * happen after.
+     */
+    @Override
+    public void close();
+
+    /**
+     * @see Core#wait(Handle, Core.WaitFlags, long)
+     */
+    public int wait(Core.WaitFlags flags, long deadline);
+
+    /**
+     * @return whether the handle is valid. A handle is valid until it has been explicitly closed or
+     *         send through a message pipe via |MessagePipeHandle.writeMessage|.
+     */
+    public boolean isValid();
+
+}
diff --git a/mojo/public/java/src/org/chromium/mojo/system/MessagePipeHandle.java b/mojo/public/java/src/org/chromium/mojo/system/MessagePipeHandle.java
new file mode 100644
index 0000000..c187497
--- /dev/null
+++ b/mojo/public/java/src/org/chromium/mojo/system/MessagePipeHandle.java
@@ -0,0 +1,181 @@
+// 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.
+
+package org.chromium.mojo.system;
+
+import java.nio.ByteBuffer;
+import java.util.List;
+
+/**
+ * Message pipes are bidirectional communication channel for framed data (i.e., messages). Messages
+ * can contain plain data and/or Mojo handles.
+ */
+public interface MessagePipeHandle extends Handle {
+    /**
+     * Flags for the write operations on MessagePipeHandle .
+     */
+    public static class WriteFlags extends Flags<WriteFlags> {
+        private static final int FLAG_NONE = 0;
+
+        /**
+         * Dedicated constructor.
+         *
+         * @param flags initial value of the flag.
+         */
+        private WriteFlags(int flags) {
+            super(flags);
+        }
+
+        /**
+         * @return a flag with no bit set.
+         */
+        public static WriteFlags none() {
+            return new WriteFlags(FLAG_NONE);
+        }
+    }
+
+    /**
+     * Flags for the read operations on MessagePipeHandle.
+     */
+    public static class ReadFlags extends Flags<ReadFlags> {
+        private static final int FLAG_NONE = 0;
+        private static final int FLAG_MAY_DISCARD = 1 << 0;
+
+        /**
+         * Dedicated constructor.
+         *
+         * @param flags initial value of the flag.
+         */
+        private ReadFlags(int flags) {
+            super(flags);
+        }
+
+        /**
+         * Change the may-discard bit of this flag. If set, if the message is unable to be read for
+         * whatever reason (e.g., the caller-supplied buffer is too small), discard the message
+         * (i.e., simply dequeue it).
+         *
+         * @param mayDiscard the new value of the may-discard bit.
+         * @return this.
+         */
+        public ReadFlags setMayDiscard(boolean mayDiscard) {
+            return setFlag(FLAG_MAY_DISCARD, mayDiscard);
+        }
+
+        /**
+         * @return a flag with no bit set.
+         */
+        public static ReadFlags none() {
+            return new ReadFlags(FLAG_NONE);
+        }
+
+    }
+
+    /**
+     * Writes a message to the message pipe endpoint, with message data specified by |bytes| and
+     * attached handles specified by |handles|, and options specified by |flags|. If there is no
+     * message data, |bytes| may be null, otherwise it must be a direct ByteBuffer. If there are no
+     * attached handles, |handles| may be null.
+     * <p>
+     * If handles are attached, on success the handles will no longer be valid (the receiver will
+     * receive equivalent, but logically different, handles). Handles to be sent should not be in
+     * simultaneous use (e.g., on another thread).
+     */
+    void writeMessage(ByteBuffer bytes, List<Handle> handles, WriteFlags flags);
+
+    /**
+     * Result of the |readMessage| method.
+     */
+    public static class ReadMessageResult {
+        /**
+         * <code>true</code> if a message was read.
+         */
+        private boolean mWasMessageRead;
+        /**
+         * If a message was read, the size in bytes of the message, otherwise the size in bytes of
+         * the next message.
+         */
+        private int mMessageSize;
+        /**
+         * If a message was read, the number of handles contained in the message, otherwise the
+         * number of handles contained in the next message.
+         */
+        private int mHandlesCount;
+        /**
+         * If a message was read, the handles contained in the message, undefined otherwise.
+         */
+        private List<UntypedHandle> mHandles;
+
+        /**
+         * @return the wasMessageRead
+         */
+        public boolean getWasMessageRead() {
+            return mWasMessageRead;
+        }
+
+        /**
+         * @param wasMessageRead the wasMessageRead to set
+         */
+        public void setWasMessageRead(boolean wasMessageRead) {
+            mWasMessageRead = wasMessageRead;
+        }
+
+        /**
+         * @return the messageSize
+         */
+        public int getMessageSize() {
+            return mMessageSize;
+        }
+
+        /**
+         * @param messageSize the messageSize to set
+         */
+        public void setMessageSize(int messageSize) {
+            mMessageSize = messageSize;
+        }
+
+        /**
+         * @return the handlesCount
+         */
+        public int getHandlesCount() {
+            return mHandlesCount;
+        }
+
+        /**
+         * @param handlesCount the handlesCount to set
+         */
+        public void setHandlesCount(int handlesCount) {
+            mHandlesCount = handlesCount;
+        }
+
+        /**
+         * @return the handles
+         */
+        public List<UntypedHandle> getHandles() {
+            return mHandles;
+        }
+
+        /**
+         * @param handles the handles to set
+         */
+        public void setHandles(List<UntypedHandle> handles) {
+            mHandles = handles;
+        }
+    }
+
+    /**
+     * Reads a message from the message pipe endpoint; also usable to query the size of the next
+     * message or discard the next message. |bytes| indicate the buffer/buffer size to receive the
+     * message data (if any) and |maxNumberOfHandles| indicate the maximum handle count to receive
+     * the attached handles (if any). |bytes| is optional. If null, |maxNumberOfHandles| must be
+     * zero, and the return value will indicate the size of the next message. If non-null, it must
+     * be a direct ByteBuffer and the return value will indicate if the message was read or not. If
+     * the message was read its content will be in |bytes|, and the attached handles will be in the
+     * return value. Partial reads are NEVER done. Either a full read is done and |wasMessageRead|
+     * will be true, or the read is NOT done and |wasMessageRead| will be false (if |mayDiscard| was
+     * set, the message is also discarded in this case).
+     */
+    ReadMessageResult readMessage(ByteBuffer bytes, int maxNumberOfHandles,
+            ReadFlags flags);
+}
diff --git a/mojo/public/java/src/org/chromium/mojo/system/MojoException.java b/mojo/public/java/src/org/chromium/mojo/system/MojoException.java
new file mode 100644
index 0000000..e06f647
--- /dev/null
+++ b/mojo/public/java/src/org/chromium/mojo/system/MojoException.java
@@ -0,0 +1,36 @@
+// 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.
+
+package org.chromium.mojo.system;
+
+/**
+ * Exception for the core mojo API.
+ */
+public class MojoException extends RuntimeException {
+
+    private final int mCode;
+
+    /**
+     * Constructor.
+     */
+    public MojoException(int code) {
+        mCode = code;
+    }
+
+    /**
+     * The mojo result code associated with this exception. See {@link MojoResult} for possible
+     * values.
+     */
+    public int getMojoResult() {
+        return mCode;
+    }
+
+    /**
+     * @see Object#toString()
+     */
+    @Override
+    public String toString() {
+        return "MojoResult(" + mCode + "): " + MojoResult.describe(mCode);
+    }
+}
diff --git a/mojo/public/java/src/org/chromium/mojo/system/MojoResult.java b/mojo/public/java/src/org/chromium/mojo/system/MojoResult.java
new file mode 100644
index 0000000..a829c833
--- /dev/null
+++ b/mojo/public/java/src/org/chromium/mojo/system/MojoResult.java
@@ -0,0 +1,82 @@
+// 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.
+
+package org.chromium.mojo.system;
+
+/**
+ * The different mojo result codes.
+ */
+public final class MojoResult {
+    public static final int OK = 0;
+    public static final int CANCELLED = -1;
+    public static final int UNKNOWN = -2;
+    public static final int INVALID_ARGUMENT = -3;
+    public static final int DEADLINE_EXCEEDED = -4;
+    public static final int NOT_FOUND = -5;
+    public static final int ALREADY_EXISTS = -6;
+    public static final int PERMISSION_DENIED = -7;
+    public static final int RESOURCE_EXHAUSTED = -8;
+    public static final int FAILED_PRECONDITION = -9;
+    public static final int ABORTED = -10;
+    public static final int OUT_OF_RANGE = -11;
+    public static final int UNIMPLEMENTED = -12;
+    public static final int INTERNAL = -13;
+    public static final int UNAVAILABLE = -14;
+    public static final int DATA_LOSS = -15;
+    public static final int BUSY = -16;
+    public static final int SHOULD_WAIT = -17;
+
+    /**
+     * never instantiate.
+     */
+    private MojoResult() {
+    }
+
+    /**
+     * Describes the given result code.
+     */
+    public static String describe(int mCode) {
+        switch (mCode) {
+            case OK:
+                return "OK";
+            case CANCELLED:
+                return "CANCELLED";
+            case UNKNOWN:
+                return "UNKNOWN";
+            case INVALID_ARGUMENT:
+                return "INVALID_ARGUMENT";
+            case DEADLINE_EXCEEDED:
+                return "DEADLINE_EXCEEDED";
+            case NOT_FOUND:
+                return "NOT_FOUND";
+            case ALREADY_EXISTS:
+                return "ALREADY_EXISTS";
+            case PERMISSION_DENIED:
+                return "PERMISSION_DENIED";
+            case RESOURCE_EXHAUSTED:
+                return "RESOURCE_EXHAUSTED";
+            case FAILED_PRECONDITION:
+                return "FAILED_PRECONDITION";
+            case ABORTED:
+                return "ABORTED";
+            case OUT_OF_RANGE:
+                return "OUT_OF_RANGE";
+            case UNIMPLEMENTED:
+                return "UNIMPLEMENTED";
+            case INTERNAL:
+                return "INTERNAL";
+            case UNAVAILABLE:
+                return "UNAVAILABLE";
+            case DATA_LOSS:
+                return "DATA_LOSS";
+            case BUSY:
+                return "BUSY";
+            case SHOULD_WAIT:
+                return "SHOULD_WAIT";
+            default:
+                return "UNKNOWN";
+        }
+
+    }
+}
diff --git a/mojo/public/java/src/org/chromium/mojo/system/Pair.java b/mojo/public/java/src/org/chromium/mojo/system/Pair.java
new file mode 100644
index 0000000..c302aed
--- /dev/null
+++ b/mojo/public/java/src/org/chromium/mojo/system/Pair.java
@@ -0,0 +1,61 @@
+// 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.
+
+package org.chromium.mojo.system;
+
+import java.util.Objects;
+
+/**
+ * A pair of object.
+ *
+ * @param <F> Type of the first element.
+ * @param <S> Type of the second element.
+ */
+public class Pair<F, S> {
+
+    public final F first;
+    public final S second;
+
+    /**
+     * Dedicated constructor.
+     *
+     * @param first the first element of the pair.
+     * @param second the second element of the pair.
+     */
+    public Pair(F first, S second) {
+        this.first = first;
+        this.second = second;
+    }
+
+    /**
+     * @see Object#equals(Object)
+     */
+    @Override
+    public boolean equals(Object o) {
+        if (!(o instanceof Pair)) {
+            return false;
+        }
+        Pair<?, ?> p = (Pair<?, ?>) o;
+        return Objects.equals(p.first, first) && Objects.equals(p.second, second);
+    }
+
+    /**
+     * @see Object#hashCode()
+     */
+    @Override
+    public int hashCode() {
+        return (first == null ? 0 : first.hashCode()) ^ (second == null ? 0 : second.hashCode());
+    }
+
+    /**
+     * Helper method for creating a pair.
+     *
+     * @param a the first element of the pair.
+     * @param b the second element of the pair.
+     * @return the pair containing a and b.
+     */
+    public static <A, B, C extends A, D extends B> Pair<A, B> create(C a, D b) {
+        return new Pair<A, B>(a, b);
+    }
+}
diff --git a/mojo/public/java/src/org/chromium/mojo/system/SharedBufferHandle.java b/mojo/public/java/src/org/chromium/mojo/system/SharedBufferHandle.java
new file mode 100644
index 0000000..908db9e
--- /dev/null
+++ b/mojo/public/java/src/org/chromium/mojo/system/SharedBufferHandle.java
@@ -0,0 +1,139 @@
+// 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.
+
+package org.chromium.mojo.system;
+
+import java.nio.ByteBuffer;
+
+/**
+ * A buffer that can be shared between applications.
+ */
+public interface SharedBufferHandle extends Handle {
+
+    /**
+     * Flags for the shared buffer creation operation.
+     */
+    public static class CreateFlags extends Flags<CreateFlags> {
+        private static final int FLAG_NONE = 0;
+
+        /**
+         * Dedicated constructor.
+         *
+         * @param flags initial value of the flags.
+         */
+        protected CreateFlags(int flags) {
+            super(flags);
+        }
+
+        /**
+         * @return flags with no bit set.
+         */
+        public static CreateFlags none() {
+            return new CreateFlags(FLAG_NONE);
+        }
+
+    }
+
+    /**
+     * Used to specify creation parameters for a shared buffer to |Core#createSharedBuffer()|.
+     */
+    public static class CreateOptions {
+        private CreateFlags mFlags = CreateFlags.none();
+
+        /**
+         * @return the flags
+         */
+        public CreateFlags getFlags() {
+            return mFlags;
+        }
+
+    }
+
+    /**
+     * Flags for the shared buffer duplication operation.
+     */
+    public static class DuplicateFlags extends Flags<DuplicateFlags> {
+        private static final int FLAG_NONE = 0;
+
+        /**
+         * Dedicated constructor.
+         *
+         * @param flags initial value of the flags.
+         */
+        protected DuplicateFlags(int flags) {
+            super(flags);
+        }
+
+        /**
+         * @return flags with no bit set.
+         */
+        public static DuplicateFlags none() {
+            return new DuplicateFlags(FLAG_NONE);
+        }
+
+    }
+
+    /**
+     * Used to specify parameters in duplicating access to a shared buffer to
+     * |SharedBufferHandle#duplicate|
+     */
+    public static class DuplicateOptions {
+        private DuplicateFlags mFlags = DuplicateFlags.none();
+
+        /**
+         * @return the flags
+         */
+        public DuplicateFlags getFlags() {
+            return mFlags;
+        }
+
+    }
+
+    /**
+     * TODO(qsr): Insert description here.
+     */
+    public static class MapFlags extends Flags<MapFlags> {
+        private static final int FLAG_NONE = 0;
+
+        /**
+         * Dedicated constructor.
+         *
+         * @param flags initial value of the flags.
+         */
+        protected MapFlags(int flags) {
+            super(flags);
+        }
+
+        /**
+         * @return flags with no bit set.
+         */
+        public static MapFlags none() {
+            return new MapFlags(FLAG_NONE);
+        }
+
+    }
+
+    /**
+     * Duplicates the handle. This creates another handle (returned on success), which can then be
+     * sent to another application over a message pipe, while retaining access to this handle (and
+     * any mappings that it may have).
+     */
+    public SharedBufferHandle duplicate(DuplicateOptions options);
+
+    /**
+     * Map the part (at offset |offset| of length |numBytes|) of the buffer given by this handle
+     * into memory. |offset + numBytes| must be less than or equal to the size of the buffer. On
+     * success, the returned buffer points to memory with the requested part of the buffer. A single
+     * buffer handle may have multiple active mappings (possibly depending on the buffer type). The
+     * permissions (e.g., writable or executable) of the returned memory may depend on the
+     * properties of the buffer and properties attached to the buffer handle as well as |flags|.
+     */
+    public ByteBuffer map(long offset, long numBytes, MapFlags flags);
+
+    /**
+     * Unmap a buffer pointer that was mapped by |map()|.
+     */
+    public void unmap(ByteBuffer buffer);
+
+}
diff --git a/mojo/public/java/src/org/chromium/mojo/system/UntypedHandle.java b/mojo/public/java/src/org/chromium/mojo/system/UntypedHandle.java
new file mode 100644
index 0000000..63b5f7c
--- /dev/null
+++ b/mojo/public/java/src/org/chromium/mojo/system/UntypedHandle.java
@@ -0,0 +1,41 @@
+// 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.
+
+package org.chromium.mojo.system;
+
+
+/**
+ * TODO(qsr): Insert description here.
+ */
+public interface UntypedHandle extends Handle {
+
+    /**
+     * TODO(qsr):
+     *
+     * @return TODO(qsr)
+     */
+    public MessagePipeHandle toMessagePipeHandle();
+
+    /**
+     * TODO(qsr):
+     *
+     * @return TODO(qsr)
+     */
+    public DataPipe.ConsumerHandle toDataPipeConsumerHandle();
+
+    /**
+     * TODO(qsr):
+     *
+     * @return TODO(qsr)
+     */
+    public DataPipe.ProducerHandle toDataPipeProducerHandle();
+
+    /**
+     * TODO(qsr):
+     *
+     * @return TODO(qsr)
+     */
+    public SharedBufferHandle toSharedBufferHandle();
+
+}
diff --git a/mojo/public/js/bindings/codec.js b/mojo/public/js/bindings/codec.js
index f3d4b68..ef2060e 100644
--- a/mojo/public/js/bindings/codec.js
+++ b/mojo/public/js/bindings/codec.js
@@ -2,81 +2,111 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-define("mojo/public/js/bindings/codec", function() {
+define("mojo/public/js/bindings/codec", [
+  "mojo/public/js/bindings/unicode"
+], function(unicode) {
+
+  var kErrorUnsigned = "Passing negative value to unsigned";
 
   // Memory -------------------------------------------------------------------
 
-  function store8(memory, pointer, val) {
-    memory[pointer] = val;
-  }
-
-  function store16(memory, pointer, val) {
-    memory[pointer + 0] = val >>  0;
-    memory[pointer + 1] = val >>  8;
-  }
-
-  function store32(memory, pointer, val) {
-    memory[pointer + 0] = val >>  0;
-    memory[pointer + 1] = val >>  8;
-    memory[pointer + 2] = val >> 16;
-    memory[pointer + 3] = val >> 24;
-  }
-
-  function store64(memory, pointer, val) {
-    store32(memory, pointer, val);
-    var high = (val / 0x10000) | 0;
-    store32(memory, pointer + 4, high);
-  }
-
-  function load8(memory, pointer) {
-    return memory[pointer];
-  }
-
-  function load16(memory, pointer) {
-    return (memory[pointer + 0] <<  0) +
-           (memory[pointer + 1] <<  8);
-  }
-
-  function load32(memory, pointer) {
-    return (memory[pointer + 0] <<  0) +
-           (memory[pointer + 1] <<  8) +
-           (memory[pointer + 2] << 16) +
-           (memory[pointer + 3] << 24);
-  }
-
   var kAlignment = 8;
+  var kHighWordMultiplier = 0x100000000;
+  var kHostIsLittleEndian = (function () {
+    var endianArrayBuffer = new ArrayBuffer(2);
+    var endianUint8Array = new Uint8Array(endianArrayBuffer);
+    var endianUint16Array = new Uint16Array(endianArrayBuffer);
+    endianUint16Array[0] = 1;
+    return endianUint8Array[0] == 1;
+  })();
 
   function align(size) {
     return size + (kAlignment - (size % kAlignment)) % kAlignment;
   }
 
+  function getInt64(dataView, byteOffset, value) {
+    var lo, hi;
+    if (kHostIsLittleEndian) {
+      lo = dataView.getUint32(byteOffset, kHostIsLittleEndian);
+      hi = dataView.getInt32(byteOffset + 4, kHostIsLittleEndian);
+    } else {
+      hi = dataView.getInt32(byteOffset, kHostIsLittleEndian);
+      lo = dataView.getUint32(byteOffset + 4, kHostIsLittleEndian);
+    }
+    return lo + hi * kHighWordMultiplier;
+  }
+
+  function getUint64(dataView, byteOffset, value) {
+    var lo, hi;
+    if (kHostIsLittleEndian) {
+      lo = dataView.getUint32(byteOffset, kHostIsLittleEndian);
+      hi = dataView.getUint32(byteOffset + 4, kHostIsLittleEndian);
+    } else {
+      hi = dataView.getUint32(byteOffset, kHostIsLittleEndian);
+      lo = dataView.getUint32(byteOffset + 4, kHostIsLittleEndian);
+    }
+    return lo + hi * kHighWordMultiplier;
+  }
+
+  function setInt64(dataView, byteOffset, value) {
+    var hi = Math.floor(value / kHighWordMultiplier);
+    if (kHostIsLittleEndian) {
+      dataView.setInt32(byteOffset, value, kHostIsLittleEndian);
+      dataView.setInt32(byteOffset + 4, hi, kHostIsLittleEndian);
+    } else {
+      dataView.setInt32(byteOffset, hi, kHostIsLittleEndian);
+      dataView.setInt32(byteOffset + 4, value, kHostIsLittleEndian);
+    }
+  }
+
+  function setUint64(dataView, byteOffset, value) {
+    var hi = (value / kHighWordMultiplier) | 0;
+    if (kHostIsLittleEndian) {
+      dataView.setInt32(byteOffset, value, kHostIsLittleEndian);
+      dataView.setInt32(byteOffset + 4, hi, kHostIsLittleEndian);
+    } else {
+      dataView.setInt32(byteOffset, hi, kHostIsLittleEndian);
+      dataView.setInt32(byteOffset + 4, value, kHostIsLittleEndian);
+    }
+  }
+
+  function copyArrayBuffer(dstArrayBuffer, srcArrayBuffer) {
+    (new Uint8Array(dstArrayBuffer)).set(new Uint8Array(srcArrayBuffer));
+  }
+
   // Buffer -------------------------------------------------------------------
 
-  function Buffer(size) {
-    this.memory = new Uint8Array(size);
+  function Buffer(sizeOrArrayBuffer) {
+    if (sizeOrArrayBuffer instanceof ArrayBuffer) {
+      this.arrayBuffer = sizeOrArrayBuffer;
+    } else {
+      this.arrayBuffer = new ArrayBuffer(sizeOrArrayBuffer);
+    };
+
+    this.dataView = new DataView(this.arrayBuffer);
     this.next = 0;
   }
 
   Buffer.prototype.alloc = function(size) {
     var pointer = this.next;
     this.next += size;
-    if (this.next > this.memory.length) {
-      var newSize = (1.5 * (this.memory.length + size)) | 0;
+    if (this.next > this.arrayBuffer.byteLength) {
+      var newSize = (1.5 * (this.arrayBuffer.byteLength + size)) | 0;
       this.grow(newSize);
     }
     return pointer;
   };
 
   Buffer.prototype.grow = function(size) {
-    var newMemory = new Uint8Array(size);
-    var oldMemory = this.memory;
-    for (var i = 0; i < oldMemory.length; ++i)
-      newMemory[i] = oldMemory[i];
-    this.memory = newMemory;
+    var newArrayBuffer = new ArrayBuffer(size);
+    copyArrayBuffer(newArrayBuffer, this.arrayBuffer);
+    this.arrayBuffer = newArrayBuffer;
+    this.dataView = new DataView(this.arrayBuffer);
   };
 
-  Buffer.prototype.createViewOfAllocatedMemory = function() {
-    return new Uint8Array(this.memory.buffer, 0, this.next);
+  Buffer.prototype.trim = function() {
+    this.arrayBuffer = this.arrayBuffer.slice(0, this.next);
+    this.dataView = new DataView(this.arrayBuffer);
   };
 
   // Constants ----------------------------------------------------------------
@@ -88,50 +118,77 @@
 
   // Decoder ------------------------------------------------------------------
 
-  function Decoder(memory, handles, base) {
-    this.memory = memory;
+  function Decoder(buffer, handles, base) {
+    this.buffer = buffer;
     this.handles = handles;
     this.base = base;
     this.next = base;
-    this.viewU32 = new Uint32Array(
-        this.memory.buffer, 0,
-        Math.floor(this.memory.length / Uint32Array.BYTES_PER_ELEMENT));
-    this.viewFloat = new Float32Array(
-        this.memory.buffer, 0,
-        Math.floor(this.memory.length / Float32Array.BYTES_PER_ELEMENT));
   }
 
   Decoder.prototype.skip = function(offset) {
     this.next += offset;
   };
 
-  Decoder.prototype.read8 = function() {
-    var result = load8(this.memory, this.next);
+  Decoder.prototype.readInt8 = function() {
+    var result = this.buffer.dataView.getInt8(this.next, kHostIsLittleEndian);
     this.next += 1;
     return result;
   };
 
-  Decoder.prototype.read16 = function() {
-    var result = load16(this.memory, this.next);
+  Decoder.prototype.readUint8 = function() {
+    var result = this.buffer.dataView.getUint8(this.next, kHostIsLittleEndian);
+    this.next += 1;
+    return result;
+  };
+
+  Decoder.prototype.readInt16 = function() {
+    var result = this.buffer.dataView.getInt16(this.next, kHostIsLittleEndian);
     this.next += 2;
     return result;
   };
 
-  Decoder.prototype.read32 = function() {
-    var result = this.viewU32[this.next / this.viewU32.BYTES_PER_ELEMENT];
-    this.next += this.viewU32.BYTES_PER_ELEMENT;
+  Decoder.prototype.readUint16 = function() {
+    var result = this.buffer.dataView.getUint16(this.next, kHostIsLittleEndian);
+    this.next += 2;
     return result;
   };
 
-  Decoder.prototype.read64 = function() {
-    var low = this.read32();
-    var high = this.read32();
-    return low + high * 0x100000000;
+  Decoder.prototype.readInt32 = function() {
+    var result = this.buffer.dataView.getInt32(this.next, kHostIsLittleEndian);
+    this.next += 4;
+    return result;
   };
 
-  Decoder.prototype.decodeFloat = function() {
-    var result = this.viewFloat[this.next / this.viewFloat.BYTES_PER_ELEMENT];
-    this.next += this.viewFloat.BYTES_PER_ELEMENT;
+  Decoder.prototype.readUint32 = function() {
+    var result = this.buffer.dataView.getUint32(this.next, kHostIsLittleEndian);
+    this.next += 4;
+    return result;
+  };
+
+  Decoder.prototype.readInt64 = function() {
+    var result = getInt64(this.buffer.dataView, this.next, kHostIsLittleEndian);
+    this.next += 8;
+    return result;
+  };
+
+  Decoder.prototype.readUint64 = function() {
+    var result = getUint64(
+        this.buffer.dataView, this.next, kHostIsLittleEndian);
+    this.next += 8;
+    return result;
+  };
+
+  Decoder.prototype.readFloat32 = function() {
+    var result = this.buffer.dataView.readFloat32(
+        this.next, kHostIsLittleEndian);
+    this.next += 4;
+    return result;
+  };
+
+  Decoder.prototype.readFloat64 = function() {
+    var result = this.buffer.dataView.readFloat64(
+        this.next, kHostIsLittleEndian);
+    this.next += 8;
     return result;
   };
 
@@ -139,39 +196,32 @@
     // TODO(abarth): To correctly decode a pointer, we need to know the real
     // base address of the array buffer.
     var offsetPointer = this.next;
-    var offset = this.read64();
+    var offset = this.readUint64();
     if (!offset)
       return 0;
     return offsetPointer + offset;
   };
 
   Decoder.prototype.decodeAndCreateDecoder = function() {
-    return new Decoder(this.memory, this.handles, this.decodePointer());
+    return new Decoder(this.buffer, this.handles, this.decodePointer());
   };
 
   Decoder.prototype.decodeHandle = function() {
-    return this.handles[this.read32()];
+    return this.handles[this.readUint32()];
   };
 
   Decoder.prototype.decodeString = function() {
-    // TODO(abarth): We should really support UTF-8. We might want to
-    // jump out of the VM to decode the string directly from the array
-    // buffer using v8::String::NewFromUtf8.
-    var numberOfBytes = this.read32();
-    var numberOfElements = this.read32();
-    var val = new Array(numberOfElements);
-    var memory = this.memory;
+    var numberOfBytes = this.readUint32();
+    var numberOfElements = this.readUint32();
     var base = this.next;
-    for (var i = 0; i < numberOfElements; ++i) {
-      val[i] = String.fromCharCode(memory[base + i] & 0x7F);
-    }
     this.next += numberOfElements;
-    return val.join('');
+    return unicode.decodeUtf8String(
+        new Uint8Array(this.buffer.arrayBuffer, base, numberOfElements));
   };
 
   Decoder.prototype.decodeArray = function(cls) {
-    var numberOfBytes = this.read32();
-    var numberOfElements = this.read32();
+    var numberOfBytes = this.readUint32();
+    var numberOfElements = this.readUint32();
     var val = new Array(numberOfElements);
     for (var i = 0; i < numberOfElements; ++i) {
       val[i] = cls.decode(this);
@@ -204,41 +254,77 @@
     this.next += offset;
   };
 
-  Encoder.prototype.write8 = function(val) {
-    store8(this.buffer.memory, this.next, val);
+  Encoder.prototype.writeInt8 = function(val) {
+    // NOTE: Endianness doesn't come into play for single bytes.
+    this.buffer.dataView.setInt8(this.next, val);
     this.next += 1;
   };
 
-  Encoder.prototype.write16 = function(val) {
-    store16(this.buffer.memory, this.next, val);
+  Encoder.prototype.writeUint8 = function(val) {
+    if (val < 0) {
+      throw new Error(kErrorUnsigned);
+    }
+    // NOTE: Endianness doesn't come into play for single bytes.
+    this.buffer.dataView.setUint8(this.next, val);
+    this.next += 1;
+  };
+
+  Encoder.prototype.writeInt16 = function(val) {
+    this.buffer.dataView.setInt16(this.next, val, kHostIsLittleEndian);
     this.next += 2;
   };
 
-  Encoder.prototype.write32 = function(val) {
-    store32(this.buffer.memory, this.next, val);
+  Encoder.prototype.writeUint16 = function(val) {
+    if (val < 0) {
+      throw new Error(kErrorUnsigned);
+    }
+    this.buffer.dataView.setUint16(this.next, val, kHostIsLittleEndian);
+    this.next += 2;
+  };
+
+  Encoder.prototype.writeInt32 = function(val) {
+    this.buffer.dataView.setInt32(this.next, val, kHostIsLittleEndian);
     this.next += 4;
   };
 
-  Encoder.prototype.write64 = function(val) {
-    store64(this.buffer.memory, this.next, val);
+  Encoder.prototype.writeUint32 = function(val) {
+    if (val < 0) {
+      throw new Error(kErrorUnsigned);
+    }
+    this.buffer.dataView.setUint32(this.next, val, kHostIsLittleEndian);
+    this.next += 4;
+  };
+
+  Encoder.prototype.writeInt64 = function(val) {
+    setInt64(this.buffer.dataView, this.next, val);
     this.next += 8;
   };
 
-  Encoder.prototype.encodeFloat = function(val) {
-    var floatBuffer = new Float32Array(1);
-    floatBuffer[0] = val;
-    var buffer = new Uint8Array(floatBuffer.buffer, 0);
-    for (var i = 0; i < buffer.length; ++i)
-      this.buffer.memory[this.next++] = buffer[i];
+  Encoder.prototype.writeUint64 = function(val) {
+    if (val < 0) {
+      throw new Error(kErrorUnsigned);
+    }
+    setUint64(this.buffer.dataView, this.next, val);
+    this.next += 8;
+  };
+
+  Encoder.prototype.writeFloat32 = function(val) {
+    this.buffer.dataView.setFloat32(val, kHostIsLittleEndian);
+    this.next += 4;
+  };
+
+  Encoder.prototype.writeFloat64 = function(val) {
+    this.buffer.dataView.setFloat64(val, kHostIsLittleEndian);
+    this.next += 8;
   };
 
   Encoder.prototype.encodePointer = function(pointer) {
     if (!pointer)
-      return this.write64(0);
+      return this.writeUint64(0);
     // TODO(abarth): To correctly encode a pointer, we need to know the real
     // base address of the array buffer.
     var offset = pointer - this.next;
-    this.write64(offset);
+    this.writeUint64(offset);
   };
 
   Encoder.prototype.createAndEncodeEncoder = function(size) {
@@ -249,31 +335,24 @@
 
   Encoder.prototype.encodeHandle = function(handle) {
     this.handles.push(handle);
-    this.write32(this.handles.length - 1);
+    this.writeUint32(this.handles.length - 1);
   };
 
   Encoder.prototype.encodeString = function(val) {
-    var numberOfElements = val.length;
+    var base = this.next + kArrayHeaderSize;
+    var numberOfElements = unicode.encodeUtf8String(
+        val, new Uint8Array(this.buffer.arrayBuffer, base));
     var numberOfBytes = kArrayHeaderSize + numberOfElements;
-    this.write32(numberOfBytes);
-    this.write32(numberOfElements);
-    // TODO(abarth): We should really support UTF-8. We might want to
-    // jump out of the VM to encode the string directly from the array
-    // buffer using v8::String::WriteUtf8.
-    var memory = this.buffer.memory;
-    var base = this.next;
-    var len = val.length;
-    for (var i = 0; i < len; ++i) {
-      memory[base + i] = val.charCodeAt(i) & 0x7F;
-    }
-    this.next += len;
+    this.writeUint32(numberOfBytes);
+    this.writeUint32(numberOfElements);
+    this.next += numberOfElements;
   };
 
   Encoder.prototype.encodeArray = function(cls, val) {
     var numberOfElements = val.length;
     var numberOfBytes = kArrayHeaderSize + cls.encodedSize * numberOfElements;
-    this.write32(numberOfBytes);
-    this.write32(numberOfElements);
+    this.writeUint32(numberOfBytes);
+    this.writeUint32(numberOfElements);
     for (var i = 0; i < numberOfElements; ++i) {
       cls.encode(this, val[i]);
     }
@@ -291,8 +370,7 @@
   };
 
   Encoder.prototype.encodeStringPointer = function(val) {
-    // TODO(abarth): This won't be right once we support UTF-8.
-    var encodedSize = kArrayHeaderSize + val.length;
+    var encodedSize = kArrayHeaderSize + unicode.utf8Length(val);
     var encoder = this.createAndEncodeEncoder(encodedSize);
     encoder.encodeString(val);
   };
@@ -302,19 +380,24 @@
   var kMessageExpectsResponse = 1 << 0;
   var kMessageIsResponse      = 1 << 1;
 
-  function Message(memory, handles) {
-    this.memory = memory;
+  // Skip over num_bytes, num_fields, and message_name.
+  var kFlagsOffset = 4 + 4 + 4;
+
+  // Skip over num_bytes, num_fields, message_name, and flags.
+  var kRequestIDOffset = 4 + 4 + 4 + 4;
+
+  function Message(buffer, handles) {
+    this.buffer = buffer;
     this.handles = handles;
   }
 
   Message.prototype.setRequestID = function(requestID) {
     // TODO(darin): Verify that space was reserved for this field!
-    store64(this.memory, 4 + 4 + 4 + 4, requestID);
+    setUint64(this.buffer.dataView, kRequestIDOffset, requestID);
   };
 
   Message.prototype.getFlags = function() {
-    // Skip over num_bytes, num_fields, and message_name.
-    return load32(this.memory, 4 + 4 + 4);
+    return this.buffer.dataView.getUint32(kFlagsOffset, kHostIsLittleEndian);
   };
 
   // MessageBuilder -----------------------------------------------------------
@@ -326,10 +409,10 @@
     this.buffer = new Buffer(numberOfBytes);
     this.handles = [];
     var encoder = this.createEncoder(kMessageHeaderSize);
-    encoder.write32(kMessageHeaderSize);
-    encoder.write32(2);  // num_fields.
-    encoder.write32(messageName);
-    encoder.write32(0);  // flags.
+    encoder.writeUint32(kMessageHeaderSize);
+    encoder.writeUint32(2);  // num_fields.
+    encoder.writeUint32(messageName);
+    encoder.writeUint32(0);  // flags.
   }
 
   MessageBuilder.prototype.createEncoder = function(size) {
@@ -344,8 +427,8 @@
   MessageBuilder.prototype.finish = function() {
     // TODO(abarth): Rather than resizing the buffer at the end, we could
     // compute the size we need ahead of time, like we do in C++.
-    var memory = this.buffer.createViewOfAllocatedMemory();
-    var message = new Message(memory, this.handles);
+    this.buffer.trim();
+    var message = new Message(this.buffer, this.handles);
     this.buffer = null;
     this.handles = null;
     this.encoder = null;
@@ -362,29 +445,31 @@
     this.buffer = new Buffer(numberOfBytes);
     this.handles = [];
     var encoder = this.createEncoder(kMessageWithRequestIDHeaderSize);
-    encoder.write32(kMessageWithRequestIDHeaderSize);
-    encoder.write32(3);  // num_fields.
-    encoder.write32(messageName);
-    encoder.write32(flags);
-    encoder.write64(requestID);
+    encoder.writeUint32(kMessageWithRequestIDHeaderSize);
+    encoder.writeUint32(3);  // num_fields.
+    encoder.writeUint32(messageName);
+    encoder.writeUint32(flags);
+    encoder.writeUint64(requestID);
   }
 
   MessageWithRequestIDBuilder.prototype =
       Object.create(MessageBuilder.prototype);
+
   MessageWithRequestIDBuilder.prototype.constructor =
       MessageWithRequestIDBuilder;
 
   // MessageReader ------------------------------------------------------------
 
   function MessageReader(message) {
-    this.decoder = new Decoder(message.memory, message.handles, 0);
-    var messageHeaderSize = this.decoder.read32();
-    this.payloadSize = message.memory.length - messageHeaderSize;
-    var numFields = this.decoder.read32();
-    this.messageName = this.decoder.read32();
-    this.flags = this.decoder.read32();
+    this.decoder = new Decoder(message.buffer, message.handles, 0);
+    var messageHeaderSize = this.decoder.readUint32();
+    this.payloadSize =
+        message.buffer.arrayBuffer.byteLength - messageHeaderSize;
+    var numFields = this.decoder.readUint32();
+    this.messageName = this.decoder.readUint32();
+    this.flags = this.decoder.readUint32();
     if (numFields >= 3)
-      this.requestID = this.decoder.read64();
+      this.requestID = this.decoder.readUint64();
     this.decoder.skip(messageHeaderSize - this.decoder.next);
   }
 
@@ -394,17 +479,43 @@
 
   // Built-in types -----------------------------------------------------------
 
+  function Int8() {
+  }
+
+  Int8.encodedSize = 1;
+
+  Int8.decode = function(decoder) {
+    return decoder.readInt8();
+  };
+
+  Uint8.encode = function(encoder, val) {
+    encoder.writeUint8(val);
+  };
+
   function Uint8() {
   }
 
   Uint8.encodedSize = 1;
 
   Uint8.decode = function(decoder) {
-    return decoder.read8();
+    return decoder.readUint8();
   };
 
   Uint8.encode = function(encoder, val) {
-    encoder.write8(val);
+    encoder.writeUint8(val);
+  };
+
+  function Int16() {
+  }
+
+  Int16.encodedSize = 2;
+
+  Int16.decode = function(decoder) {
+    return decoder.readInt16();
+  };
+
+  Int16.encode = function(encoder, val) {
+    encoder.writeInt16(val);
   };
 
   function Uint16() {
@@ -413,11 +524,24 @@
   Uint16.encodedSize = 2;
 
   Uint16.decode = function(decoder) {
-    return decoder.read16();
+    return decoder.readUint16();
   };
 
   Uint16.encode = function(encoder, val) {
-    encoder.write16(val);
+    encoder.writeUint16(val);
+  };
+
+  function Int32() {
+  }
+
+  Int32.encodedSize = 4;
+
+  Int32.decode = function(decoder) {
+    return decoder.readInt32();
+  };
+
+  Int32.encode = function(encoder, val) {
+    encoder.writeInt32(val);
   };
 
   function Uint32() {
@@ -426,11 +550,24 @@
   Uint32.encodedSize = 4;
 
   Uint32.decode = function(decoder) {
-    return decoder.read32();
+    return decoder.readUint32();
   };
 
   Uint32.encode = function(encoder, val) {
-    encoder.write32(val);
+    encoder.writeUint32(val);
+  };
+
+  function Int64() {
+  };
+
+  Int64.encodedSize = 8;
+
+  Int64.decode = function(decoder) {
+    return decoder.readInt64();
+  };
+
+  Int64.encode = function(encoder, val) {
+    encoder.writeInt64(val);
   };
 
   function Uint64() {
@@ -439,11 +576,11 @@
   Uint64.encodedSize = 8;
 
   Uint64.decode = function(decoder) {
-    return decoder.read64();
+    return decoder.readUint64();
   };
 
   Uint64.encode = function(encoder, val) {
-    encoder.write64(val);
+    encoder.writeUint64(val);
   };
 
   function PointerTo(cls) {
@@ -496,6 +633,7 @@
 
   var exports = {};
   exports.align = align;
+  exports.Buffer = Buffer;
   exports.Message = Message;
   exports.MessageBuilder = MessageBuilder;
   exports.MessageWithRequestIDBuilder = MessageWithRequestIDBuilder;
@@ -505,9 +643,13 @@
   exports.kMessageHeaderSize = kMessageHeaderSize;
   exports.kMessageExpectsResponse = kMessageExpectsResponse;
   exports.kMessageIsResponse = kMessageIsResponse;
+  exports.Int8 = Int8;
   exports.Uint8 = Uint8;
+  exports.Int16 = Int16;
   exports.Uint16 = Uint16;
+  exports.Int32 = Int32;
   exports.Uint32 = Uint32;
+  exports.Int64 = Int64;
   exports.Uint64 = Uint64;
   exports.PointerTo = PointerTo;
   exports.ArrayOf = ArrayOf;
diff --git a/mojo/public/js/bindings/connector.js b/mojo/public/js/bindings/connector.js
index f2ccb04..51fb7fe 100644
--- a/mojo/public/js/bindings/connector.js
+++ b/mojo/public/js/bindings/connector.js
@@ -4,8 +4,8 @@
 
 define("mojo/public/js/bindings/connector", [
   "mojo/public/js/bindings/codec",
-  "mojo/bindings/js/core",
-  "mojo/bindings/js/support",
+  "mojo/public/js/bindings/core",
+  "mojo/public/js/bindings/support",
 ], function(codec, core, support) {
 
   function Connector(handle) {
@@ -38,10 +38,9 @@
       return true;
 
     var result = core.writeMessage(this.handle_,
-                                   message.memory,
+                                   new Uint8Array(message.buffer.arrayBuffer),
                                    message.handles,
                                    core.WRITE_MESSAGE_FLAG_NONE);
-
     switch (result) {
       case core.RESULT_OK:
         // The handles were successfully transferred, so we don't own them
@@ -96,11 +95,11 @@
           this.errorHandler_.onError(read.result);
         return;
       }
-      // TODO(abarth): Should core.readMessage return a Uint8Array?
-      var memory = new Uint8Array(read.buffer);
-      var message = new codec.Message(memory, read.handles);
-      if (this.incomingReceiver_)
-        this.incomingReceiver_.accept(message);
+      var buffer = new codec.Buffer(read.buffer);
+      var message = new codec.Message(buffer, read.handles);
+      if (this.incomingReceiver_) {
+          this.incomingReceiver_.accept(message);
+      }
     }
   };
 
diff --git a/mojo/public/js/bindings/core.js b/mojo/public/js/bindings/core.js
new file mode 100644
index 0000000..389681a
--- /dev/null
+++ b/mojo/public/js/bindings/core.js
@@ -0,0 +1,215 @@
+// 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.
+
+// Module "mojo/public/js/bindings/core"
+//
+// Note: This file is for documentation purposes only. The code here is not
+// actually executed. The real module is implemented natively in Mojo.
+//
+// This module provides the JavaScript bindings for mojo/public/c/system/core.h.
+// Refer to that file for more detailed documentation for equivalent methods.
+
+while (1);
+
+/**
+ * MojoHandle: An opaque handles to a Mojo object (e.g. a message pipe).
+ */
+var kInvalidHandle;
+
+/**
+ * MojoResult {number}: Result codes for Mojo operations.
+ * See core.h for more information.
+ */
+var RESULT_OK;
+var RESULT_CANCELLED;
+var RESULT_UNKNOWN;
+var RESULT_INVALID_ARGUMENT;
+var RESULT_DEADLINE_EXCEEDED;
+var RESULT_NOT_FOUND;
+var RESULT_ALREADY_EXISTS;
+var RESULT_PERMISSION_DENIED;
+var RESULT_RESOURCE_EXHAUSTED;
+var RESULT_FAILED_PRECONDITION;
+var RESULT_ABORTED;
+var RESULT_OUT_OF_RANGE;
+var RESULT_UNIMPLEMENTED;
+var RESULT_INTERNAL;
+var RESULT_UNAVAILABLE;
+var RESULT_DATA_LOSS;
+var RESULT_BUSY;
+var RESULT_SHOULD_WAIT;
+
+/**
+ * MojoDeadline {number}: Used to specify deadlines (timeouts), in microseconds.
+ * See core.h for more information.
+ */
+var DEADLINE_INDEFINITE;
+
+/**
+ * MojoWaitFlags: Used to specify the state of a handle to wait on (e.g., the
+ * ability to read or write to it).
+ * See core.h for more information.
+ */
+var WAIT_FLAG_NONE;
+var WAIT_FLAG_READABLE;
+var WAIT_FLAG_WRITABLE;
+var WAIT_FLAG_EVERYTHING;
+
+/*
+ * MojoWriteMessageFlags: Used to specify different modes to |writeMessage()|.
+ * See core.h for more information.
+ */
+var WRITE_MESSAGE_FLAG_NONE;
+
+/**
+ * MojoReadMessageFlags: Used to specify different modes to |readMessage()|.
+ * See core.h for more information.
+ */
+var READ_MESSAGE_FLAG_NONE;
+var READ_MESSAGE_FLAG_MAY_DISCARD;
+
+/**
+ * MojoCreateDataPipeOptions: Used to specify creation parameters for a data
+ * pipe to |createDataPipe()|.
+ * See core.h for more information.
+ */
+dictionary MojoCreateDataPipeOptions {
+  MojoCreateDataPipeOptionsFlags flags;  // See below.
+  int32 elementNumBytes;  // The size of an element, in bytes.
+  int32 capacityNumBytes;  // The capacity of the data pipe, in bytes.
+};
+
+// MojoCreateDataPipeOptionsFlags
+var CREATE_DATA_PIPE_OPTIONS_FLAG_NONE;
+var CREATE_DATA_PIPE_OPTIONS_FLAG_MAY_DISCARD;
+
+/*
+ * MojoWriteDataFlags: Used to specify different modes to |writeData()|.
+ * See core.h for more information.
+ */
+var WRITE_DATA_FLAG_NONE;
+var WRITE_DATA_FLAG_ALL_OR_NONE;
+
+/**
+ * MojoReadDataFlags: Used to specify different modes to |readData()|.
+ * See core.h for more information.
+ */
+var READ_DATA_FLAG_NONE;
+var READ_DATA_FLAG_ALL_OR_NONE;
+var READ_DATA_FLAG_DISCARD;
+var READ_DATA_FLAG_QUERY;
+
+/**
+ * Closes the given |handle|. See MojoClose for more info.
+ * @param {MojoHandle} Handle to close.
+ * @return {MojoResult} Result code.
+ */
+function close(handle) { [native code] }
+
+/**
+ * Waits on the given handle until the state indicated by |waitFlags| is
+ * satisfied or until |deadline| is passed. See MojoWait for more information.
+ *
+ * @param {MojoHandle} handle Handle to wait on.
+ * @param {MojoWaitFlags} waitFlags Specifies the condition to wait for.
+ * @param {MojoDeadline} deadline Stops waiting if this is reached.
+ * @return {MojoResult} Result code.
+ */
+function wait(handle, waitFlags, deadline) { [native code] }
+
+/**
+ * Waits on |handles[0]|, ..., |handles[handles.length-1]| for at least one of
+ * them to satisfy the state indicated by |flags[0]|, ...,
+ * |flags[handles.length-1]|, respectively, or until |deadline| has passed.
+ * See MojoWaitMany for more information.
+ *
+ * @param {Array.MojoHandle} handles Handles to wait on.
+ * @param {Array.MojoWaitFlags} waitFlags Specifies the condition to wait for,
+ *   for each corresponding handle. Must be the same length as |handles|.
+ * @param {MojoDeadline} deadline Stops waiting if this is reached.
+ * @return {MojoResult} Result code.
+ */
+function waitMany(handles, waitFlags, deadline) { [native code] }
+
+/**
+ * Creates a message pipe. This function always succeeds.
+ * See MojoCreateMessagePipe for more information on message pipes.
+ *
+ * @return {MessagePipe} An object of the form {
+ *     handle0,
+ *     handle1,
+ *   }
+ *   where |handle0| and |handle1| are MojoHandles to each end of the channel.
+ */
+function createMessagePipe() { [native code] }
+
+/**
+ * Writes a message to the message pipe endpoint given by |handle|. See
+ * MojoWriteMessage for more information, including return codes.
+ *
+ * @param {MojoHandle} handle The endpoint to write to.
+ * @param {ArrayBufferView} buffer The message data. May be empty.
+ * @param {Array.MojoHandle} handlesArray Any handles to attach. Handles are
+ *   transferred on success and will no longer be valid. May be empty.
+ * @param {MojoWriteMessageFlags} flags Flags.
+ * @return {MojoResult} Result code.
+ */
+function writeMessage(handle, buffer, handlesArray, flags) { [native code] }
+
+/**
+ * Reads a message from the message pipe endpoint given by |handle|. See
+ * MojoReadMessage for more information, including return codes.
+ *
+ * @param {MojoHandle} handle The endpoint to read from.
+ * @param {MojoReadMessageFlags} flags Flags.
+ * @return {object} An object of the form {
+ *     result,  // |RESULT_OK| on success, error code otherwise.
+ *     buffer,  // An ArrayBufferView of the message data (only on success).
+ *     handles  // An array of MojoHandles transferred, if any.
+ *   }
+ */
+function readMessage(handle, flags) { [native code] }
+
+/**
+ * Creates a data pipe, which is a unidirectional communication channel for
+ * unframed data, with the given options. See MojoCreateDataPipe for more
+ * more information, including return codes.
+ *
+ * @param {MojoCreateDataPipeOptions} optionsDict Options to control the data
+ *   pipe parameters. May be null.
+ * @return {object} An object of the form {
+ *     result,  // |RESULT_OK| on success, error code otherwise.
+ *     producerHandle,  // MojoHandle to use with writeData (only on success).
+ *     consumerHandle,  // MojoHandle to use with readData (only on success).
+ *   }
+ */
+function createDataPipe(optionsDict) { [native code] }
+
+/**
+ * Writes the given data to the data pipe producer given by |handle|. See
+ * MojoWriteData for more information, including return codes.
+ *
+ * @param {MojoHandle} handle A producerHandle returned by createDataPipe.
+ * @param {ArrayBufferView} buffer The data to write.
+ * @param {MojoWriteDataFlags} flags Flags.
+ * @return {object} An object of the form {
+ *     result,  // |RESULT_OK| on success, error code otherwise.
+ *     numBytes,  // The number of bytes written.
+ *   }
+ */
+function writeData(handle, buffer, flags) { [native code] }
+
+/**
+ * Reads data from the data pipe consumer given by |handle|. May also
+ * be used to discard data. See MojoReadData for more information, including
+ * return codes.
+ *
+ * @param {MojoHandle} handle A consumerHandle returned by createDataPipe.
+ * @param {MojoReadDataFlags} flags Flags.
+ * @return {object} An object of the form {
+ *     result,  // |RESULT_OK| on success, error code otherwise.
+ *     buffer,  // An ArrayBufferView of the data read (only on success).
+ *   }
+ */
+function readData(handle, flags) { [native code] }
diff --git a/mojo/public/js/bindings/support.js b/mojo/public/js/bindings/support.js
new file mode 100644
index 0000000..756e7ba
--- /dev/null
+++ b/mojo/public/js/bindings/support.js
@@ -0,0 +1,30 @@
+// 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.
+
+// Module "mojo/public/js/bindings/support"
+//
+// Note: This file is for documentation purposes only. The code here is not
+// actually executed. The real module is implemented natively in Mojo.
+
+while (1);
+
+/*
+ * Waits on the given handle until the state indicated by |waitFlags| is
+ * satisfied.
+ *
+ * @param {MojoHandle} handle The handle to wait on.
+ * @param {MojoWaitFlags} waitFlags Flags.
+ * @param {function (mojoResult)} callback Called with the result the wait is
+ * complete. See MojoWait for possible result codes.
+ *
+ * @return {MojoWaitId} A waitId that can be passed to cancelWait to cancel the
+ * wait.
+ */
+function asyncWait(handle, waitFlags, callback) { [native code] }
+
+/*
+ * Cancels the asyncWait operation specified by the given |waitId|.
+ * @param {MojoWaitId} waitId The waitId returned by asyncWait.
+ */
+function cancelWait(waitId) { [native code] }
diff --git a/mojo/public/js/bindings/unicode.js b/mojo/public/js/bindings/unicode.js
new file mode 100644
index 0000000..a42c710
--- /dev/null
+++ b/mojo/public/js/bindings/unicode.js
@@ -0,0 +1,33 @@
+// 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.
+
+// Module "mojo/public/js/bindings/unicode"
+//
+// Note: This file is for documentation purposes only. The code here is not
+// actually executed. The real module is implemented natively in Mojo.
+
+while (1);
+
+/**
+ * Decodes the UTF8 string from the given buffer.
+ * @param {ArrayBufferView} buffer The buffer containing UTF8 string data.
+ * @return {string} The corresponding JavaScript string.
+ */
+function decodeUtf8String(buffer) { [native code] }
+
+/**
+ * Encodes the given JavaScript string into UTF8.
+ * @param {string} str The string to encode.
+ * @param {ArrayBufferView} outputBuffer The buffer to contain the result.
+ * Should be pre-allocated to hold enough space. Use |utf8Length| to determine
+ * how much space is required.
+ * @return {number} The number of bytes written to |outputBuffer|.
+ */
+function encodeUtf8String(str, outputBuffer) { [native code] }
+
+/**
+ * Returns the number of bytes that a UTF8 encoding of the JavaScript string
+ * |str| would occupy.
+ */
+function utf8Length(str) { [native code] }
diff --git a/mojo/public/tools/bindings/generators/cpp_templates/enum_traits.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/enum_traits.tmpl
new file mode 100644
index 0000000..3096839
--- /dev/null
+++ b/mojo/public/tools/bindings/generators/cpp_templates/enum_traits.tmpl
@@ -0,0 +1,5 @@
+template <> struct TypeTraits<{% for namespace in namespaces_as_array -%}
+{{namespace}}::{% endfor %}{{enum.name}}> {
+  static const bool kIsHandle = false;
+  static const bool kIsObject = false;
+};
diff --git a/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl
index 5b61e17..60fbfc5 100644
--- a/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl
+++ b/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl
@@ -23,12 +23,6 @@
 
 {#--- Methods #}
 {%- for method in interface.methods %}
-  virtual void {{method.name}}({{interface_macros.declare_request_params(method)}}) = 0;
+  virtual void {{method.name}}({{interface_macros.declare_request_params("", method)}}) = 0;
 {%- endfor %}
 };
-
-// A typesafe variant of MessagePipeHandle.
-typedef mojo::Interface<{{interface.name}}>::Handle {{interface.name}}Handle;
-
-// A typesafe variant of ScopedMessagePipeHandle.
-typedef mojo::Interface<{{interface.name}}>::ScopedHandle Scoped{{interface.name}}Handle;
diff --git a/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl
index 906099c..4910463 100644
--- a/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl
+++ b/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl
@@ -97,7 +97,7 @@
 {%-   set params_name =
           "internal::%s_%s_Params_Data"|format(interface.name, method.name) %}
 void {{proxy_name}}::{{method.name}}(
-    {{interface_macros.declare_request_params(method)}}) {
+    {{interface_macros.declare_request_params("in_", method)}}) {
   {{compute_payload_size(params_name, method.parameters)}}
 
 {%- if method.response_parameters != None %}
@@ -140,7 +140,7 @@
         responder_(responder) {
   }
 
-  virtual void Run({{interface_macros.declare_params(method.response_parameters)}}) const;
+  virtual void Run({{interface_macros.declare_params("in_", method.response_parameters)}}) const;
 
  private:
   uint64_t request_id_;
@@ -148,7 +148,7 @@
   MOJO_DISALLOW_COPY_AND_ASSIGN({{class_name}}_{{method.name}}_ProxyToResponder);
 };
 void {{class_name}}_{{method.name}}_ProxyToResponder::Run(
-    {{interface_macros.declare_params(method.response_parameters)}}) const {
+    {{interface_macros.declare_params("in_", method.response_parameters)}}) const {
   {{compute_payload_size(params_name, method.response_parameters)}}
   mojo::internal::ResponseMessageBuilder builder(
       {{message_name}}, payload_size, request_id_);
diff --git a/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl
index 70b6091..fbefce2 100644
--- a/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl
+++ b/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl
@@ -1,6 +1,6 @@
-{%- macro declare_params(parameters) %}
+{%- macro declare_params(prefix, parameters) %}
 {%-   for param in parameters -%}
-{{param.kind|cpp_const_wrapper_type}} in_{{param.name}}
+{{param.kind|cpp_const_wrapper_type}} {{prefix}}{{param.name}}
 {%- if not loop.last %}, {% endif %}
 {%-   endfor %}
 {%- endmacro %}
@@ -14,8 +14,8 @@
 )>
 {%- endmacro -%}
 
-{%- macro declare_request_params(method) -%}
-{{declare_params(method.parameters)}}
+{%- macro declare_request_params(prefix, method) -%}
+{{declare_params(prefix, method.parameters)}}
 {%-   if method.response_parameters != None -%}
 {%- if method.parameters %}, {% endif %}
 const {{declare_callback(method)}}& callback
diff --git a/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl
index ff7c327..c4a8bed 100644
--- a/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl
+++ b/mojo/public/tools/bindings/generators/cpp_templates/interface_proxy_declaration.tmpl
@@ -5,7 +5,7 @@
 
 {%- for method in interface.methods %}
   virtual void {{method.name}}(
-      {{interface_macros.declare_request_params(method)}}
+      {{interface_macros.declare_request_params("", method)}}
   ) MOJO_OVERRIDE;
 {%- endfor %}
 
diff --git a/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl
index e804fc6..df545a8 100644
--- a/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl
+++ b/mojo/public/tools/bindings/generators/cpp_templates/module-internal.h.tmpl
@@ -13,9 +13,9 @@
 #include "{{import.module.path}}-internal.h"
 {%- endfor %}
 
-{%- if namespace %}
+{%- for namespace in namespaces_as_array %}
 namespace {{namespace}} {
-{%- endif %}
+{%- endfor %}
 
 {#--- Wrapper forward declarations #}
 {%  for struct in structs %}
@@ -34,8 +34,8 @@
 #pragma pack(pop)
 
 }  // namespace internal
-{%- if namespace %}
+{%- for namespace in namespaces_as_array|reverse %}
 }  // namespace {{namespace}}
-{%- endif %}
+{%- endfor %}
 
 #endif  // {{header_guard}}
diff --git a/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl
index d99a3e2..4e423aa 100644
--- a/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl
+++ b/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl
@@ -12,9 +12,9 @@
 #include "mojo/public/cpp/bindings/lib/bindings_serialization.h"
 #include "mojo/public/cpp/bindings/lib/message_builder.h"
 
-{%- if namespace %}
+{%- for namespace in namespaces_as_array %}
 namespace {{namespace}} {
-{%- endif %}
+{%- endfor %}
 namespace internal {
 namespace {
 
@@ -59,9 +59,9 @@
 {%- for interface in interfaces %}
 {%-   include "interface_definition.tmpl" %}
 {%- endfor %}
-{%- if namespace %}
+{%- for namespace in namespaces_as_array|reverse %}
 }  // namespace {{namespace}}
-{%- endif %}
+{%- endfor %}
 
 #if defined(__clang__)
 #pragma clang diagnostic pop
diff --git a/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl
index c223386..4c667ae 100644
--- a/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl
+++ b/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl
@@ -16,15 +16,24 @@
 #include "{{import.module.path}}.h"
 {%- endfor %}
 
-{%- if namespace %}
+{%- for namespace in namespaces_as_array %}
 namespace {{namespace}} {
-{%- endif %}
+{%- endfor %}
 
 {#--- Enums #}
 {%  for enum in enums %}
 {%    include "enum_declaration.tmpl" %}
 {%- endfor %}
 
+{#--- Interface Forward Declarations -#}
+{%  for interface in interfaces %}
+class {{interface.name}};
+// A typesafe variant of MessagePipeHandle:
+typedef mojo::Interface<{{interface.name}}>::Handle {{interface.name}}Handle;
+// A typesafe variant of ScopedMessagePipeHandle:
+typedef mojo::Interface<{{interface.name}}>::ScopedHandle Scoped{{interface.name}}Handle;
+{%  endfor %}
+
 {#--- Structs #}
 {%  for struct in structs %}
 {%    include "wrapper_class_declaration.tmpl" %}
@@ -45,8 +54,19 @@
 {%    include "interface_stub_declaration.tmpl" %}
 {%- endfor %}
 
-{%- if namespace %}
+{%- for namespace in namespaces_as_array|reverse %}
 }  // namespace {{namespace}}
+{%- endfor %}
+
+{#--- Enum TypeTraits Specializations #}
+{%  if enums %}
+namespace mojo {
+namespace internal {
+{%    for enum in enums %}
+{%      include "enum_traits.tmpl" %}
+{%-   endfor %}
+}  // namespace internal
+}  // namespace mojo
 {%- endif %}
 
 #endif  // {{header_guard}}
diff --git a/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl b/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl
index 08c5a97..9b30468 100644
--- a/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl
+++ b/mojo/public/tools/bindings/generators/js_templates/module.js.tmpl
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 define("{{module.path}}", [
-    "mojo/bindings/js/core",
+    "mojo/public/js/bindings/core",
     "mojo/public/js/bindings/codec",
 {%- for import in imports %}
     "{{import.module.path}}",
diff --git a/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl b/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl
index 1686820..6db102c 100644
--- a/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl
+++ b/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl
@@ -74,11 +74,11 @@
   {{struct.name}}.decode = function(decoder) {
     var packed;
     var val = new {{struct.name}}();
-    var numberOfBytes = decoder.read32();
-    var numberOfFields = decoder.read32();
+    var numberOfBytes = decoder.readUint32();
+    var numberOfFields = decoder.readUint32();
 {%- for byte in struct.bytes %}
 {%-   if byte.packed_fields|length > 1 %}
-    packed = decoder.read8();
+    packed = decoder.readUint8();
 {%-     for packed_field in byte.packed_fields %}
     val.{{packed_field.field.name}} = (packed >> {{packed_field.bit}}) & 1 ? true : false;
 {%-     endfor %}
@@ -96,8 +96,8 @@
 
   {{struct.name}}.encode = function(encoder, val) {
     var packed;
-    encoder.write32({{struct.name}}.encodedSize);
-    encoder.write32({{struct.packed.packed_fields|length}});
+    encoder.writeUint32({{struct.name}}.encodedSize);
+    encoder.writeUint32({{struct.packed.packed_fields|length}});
 
 {%- for byte in struct.bytes %}
 {%-   if byte.packed_fields|length > 1 %}
@@ -105,7 +105,7 @@
 {%-     for packed_field in byte.packed_fields %}
     packed |= (val.{{packed_field.field.name}} & 1) << {{packed_field.bit}}
 {%-     endfor %}
-    encoder.write8(packed);
+    encoder.writeUint8(packed);
 {%-   else %}
 {%-     for packed_field in byte.packed_fields %}
     encoder.{{packed_field.field.kind|encode_snippet}}val.{{packed_field.field.name}});
diff --git a/mojo/public/tools/bindings/generators/mojom_cpp_generator.py b/mojo/public/tools/bindings/generators/mojom_cpp_generator.py
index a95e711..8f48f8e 100644
--- a/mojo/public/tools/bindings/generators/mojom_cpp_generator.py
+++ b/mojo/public/tools/bindings/generators/mojom_cpp_generator.py
@@ -4,11 +4,10 @@
 
 """Generates C++ source files from a mojom.Module."""
 
-from generate import mojom
-from generate import mojom_pack
-from generate import mojom_generator
-
-from generate.template_expander import UseJinja
+import mojom.generate.generator as generator
+import mojom.generate.module as mojom
+import mojom.generate.pack as pack
+from mojom.generate.template_expander import UseJinja
 
 
 _kind_to_cpp_type = {
@@ -31,10 +30,13 @@
 }
 
 
+def NamespaceToArray(namespace):
+  return namespace.split('.') if namespace else []
+
 def GetNameForKind(kind, internal = False):
   parts = []
   if kind.imported_from:
-    parts.append(kind.imported_from["namespace"])
+    parts.extend(NamespaceToArray(kind.imported_from["namespace"]))
     if internal:
       parts.append("internal")
   if kind.parent_kind:
@@ -96,7 +98,7 @@
     return "mojo::Passable<%sHandle>" % kind.name
   if kind.spec == 's':
     return "mojo::String"
-  if mojom_generator.IsHandleKind(kind):
+  if generator.IsHandleKind(kind):
     return "mojo::Passable<%s>" % _kind_to_cpp_type[kind]
   return _kind_to_cpp_type[kind]
 
@@ -141,7 +143,7 @@
 
 def IsStructWithHandles(struct):
   for pf in struct.packed.packed_fields:
-    if mojom_generator.IsHandleKind(pf.field.kind):
+    if generator.IsHandleKind(pf.field.kind):
       return True
   return False
 
@@ -151,7 +153,7 @@
     # Namespace::Struct::FIELD_NAME
     name = []
     if token.imported_from:
-      name.append(token.namespace)
+      name.extend(NamespaceToArray(token.namespace))
     if token.parent_kind:
       name.append(token.parent_kind.name)
     name.append(token.name[1])
@@ -161,12 +163,12 @@
 def ExpressionToText(value, module):
   if value[0] != "EXPRESSION":
     raise Exception("Expected EXPRESSION, got" + value)
-  return "".join(mojom_generator.ExpressionMapper(value,
+  return "".join(generator.ExpressionMapper(value,
       lambda token: TranslateConstants(token, module)))
 
 _HEADER_SIZE = 8
 
-class Generator(mojom_generator.Generator):
+class Generator(generator.Generator):
 
   cpp_filters = {
     "cpp_const_wrapper_type": GetCppConstWrapperType,
@@ -175,24 +177,25 @@
     "cpp_result_type": GetCppResultWrapperType,
     "cpp_wrapper_type": GetCppWrapperType,
     "expression_to_text": ExpressionToText,
-    "get_pad": mojom_pack.GetPad,
-    "is_enum_kind": mojom_generator.IsEnumKind,
-    "is_handle_kind": mojom_generator.IsHandleKind,
-    "is_object_kind": mojom_generator.IsObjectKind,
-    "is_string_kind": mojom_generator.IsStringKind,
+    "get_pad": pack.GetPad,
+    "is_enum_kind": generator.IsEnumKind,
+    "is_handle_kind": generator.IsHandleKind,
+    "is_object_kind": generator.IsObjectKind,
+    "is_string_kind": generator.IsStringKind,
     "is_array_kind": lambda kind: isinstance(kind, mojom.Array),
     "is_struct_with_handles": IsStructWithHandles,
     "struct_size": lambda ps: ps.GetTotalSize() + _HEADER_SIZE,
-    "struct_from_method": mojom_generator.GetStructFromMethod,
-    "response_struct_from_method": mojom_generator.GetResponseStructFromMethod,
-    "stylize_method": mojom_generator.StudlyCapsToCamel,
-    "verify_token_type": mojom_generator.VerifyTokenType,
+    "struct_from_method": generator.GetStructFromMethod,
+    "response_struct_from_method": generator.GetResponseStructFromMethod,
+    "stylize_method": generator.StudlyCapsToCamel,
+    "verify_token_type": generator.VerifyTokenType,
   }
 
   def GetJinjaExports(self):
     return {
       "module": self.module,
       "namespace": self.module.namespace,
+      "namespaces_as_array": NamespaceToArray(self.module.namespace),
       "imports": self.module.imports,
       "kinds": self.module.kinds,
       "enums": self.module.enums,
diff --git a/mojo/public/tools/bindings/generators/mojom_js_generator.py b/mojo/public/tools/bindings/generators/mojom_js_generator.py
index b3d572f..53672a2 100644
--- a/mojo/public/tools/bindings/generators/mojom_js_generator.py
+++ b/mojo/public/tools/bindings/generators/mojom_js_generator.py
@@ -4,11 +4,10 @@
 
 """Generates JavaScript source files from a mojom.Module."""
 
-from generate import mojom
-from generate import mojom_pack
-from generate import mojom_generator
-
-from generate.template_expander import UseJinja
+import mojom.generate.generator as generator
+import mojom.generate.module as mojom
+import mojom.generate.pack as pack
+from mojom.generate.template_expander import UseJinja
 
 _kind_to_javascript_default_value = {
   mojom.BOOL:         "false",
@@ -52,7 +51,7 @@
     return 0;
   last_field = packed_fields[-1]
   offset = last_field.offset + last_field.size
-  pad = mojom_pack.GetPad(offset, 8)
+  pad = pack.GetPad(offset, 8)
   return offset + pad;
 
 
@@ -92,21 +91,21 @@
 
 
 _kind_to_javascript_decode_snippet = {
-  mojom.BOOL:         "read8() & 1",
-  mojom.INT8:         "read8()",
-  mojom.UINT8:        "read8()",
-  mojom.INT16:        "read16()",
-  mojom.UINT16:       "read16()",
-  mojom.INT32:        "read32()",
-  mojom.UINT32:       "read32()",
+  mojom.BOOL:         "readUint8() & 1",
+  mojom.INT8:         "readInt8()",
+  mojom.UINT8:        "readUint8()",
+  mojom.INT16:        "readInt16()",
+  mojom.UINT16:       "readUint16()",
+  mojom.INT32:        "readInt32()",
+  mojom.UINT32:       "readUint32()",
   mojom.FLOAT:        "decodeFloat()",
   mojom.HANDLE:       "decodeHandle()",
   mojom.DCPIPE:       "decodeHandle()",
   mojom.DPPIPE:       "decodeHandle()",
   mojom.MSGPIPE:      "decodeHandle()",
   mojom.SHAREDBUFFER: "decodeHandle()",
-  mojom.INT64:        "read64()",
-  mojom.UINT64:       "read64()",
+  mojom.INT64:        "readInt64()",
+  mojom.UINT64:       "readUint64()",
   mojom.DOUBLE:       "decodeDouble()",
   mojom.STRING:       "decodeStringPointer()",
 }
@@ -126,21 +125,21 @@
 
 
 _kind_to_javascript_encode_snippet = {
-  mojom.BOOL:         "write8(1 & ",
-  mojom.INT8:         "write8(",
-  mojom.UINT8:        "write8(",
-  mojom.INT16:        "write16(",
-  mojom.UINT16:       "write16(",
-  mojom.INT32:        "write32(",
-  mojom.UINT32:       "write32(",
+  mojom.BOOL:         "writeUint8(1 & ",
+  mojom.INT8:         "writeInt8(",
+  mojom.UINT8:        "writeUint8(",
+  mojom.INT16:        "writeInt16(",
+  mojom.UINT16:       "writeUint16(",
+  mojom.INT32:        "writeInt32(",
+  mojom.UINT32:       "writeUint32(",
   mojom.FLOAT:        "encodeFloat(",
   mojom.HANDLE:       "encodeHandle(",
   mojom.DCPIPE:       "encodeHandle(",
   mojom.DPPIPE:       "encodeHandle(",
   mojom.MSGPIPE:      "encodeHandle(",
   mojom.SHAREDBUFFER: "encodeHandle(",
-  mojom.INT64:        "write64(",
-  mojom.UINT64:       "write64(",
+  mojom.INT64:        "writeInt64(",
+  mojom.UINT64:       "writeUint64(",
   mojom.DOUBLE:       "encodeDouble(",
   mojom.STRING:       "encodeStringPointer(",
 }
@@ -177,7 +176,7 @@
 def ExpressionToText(value, module):
   if value[0] != "EXPRESSION":
     raise Exception("Expected EXPRESSION, got" + value)
-  return "".join(mojom_generator.ExpressionMapper(value,
+  return "".join(generator.ExpressionMapper(value,
       lambda token: TranslateConstants(token, module)))
 
 
@@ -187,7 +186,7 @@
   return kind.name
 
 
-class Generator(mojom_generator.Generator):
+class Generator(generator.Generator):
 
   js_filters = {
     "default_value": JavaScriptDefaultValue,
@@ -195,12 +194,12 @@
     "decode_snippet": JavaScriptDecodeSnippet,
     "encode_snippet": JavaScriptEncodeSnippet,
     "expression_to_text": ExpressionToText,
-    "is_object_kind": mojom_generator.IsObjectKind,
-    "is_string_kind": mojom_generator.IsStringKind,
+    "is_object_kind": generator.IsObjectKind,
+    "is_string_kind": generator.IsStringKind,
     "is_array_kind": lambda kind: isinstance(kind, mojom.Array),
     "js_type": JavascriptType,
-    "stylize_method": mojom_generator.StudlyCapsToCamel,
-    "verify_token_type": mojom_generator.VerifyTokenType,
+    "stylize_method": generator.StudlyCapsToCamel,
+    "verify_token_type": generator.VerifyTokenType,
   }
 
   @UseJinja("js_templates/module.js.tmpl", filters=js_filters)
diff --git a/mojo/public/tools/bindings/generators/run_cpp_generator.py b/mojo/public/tools/bindings/generators/run_cpp_generator.py
index 36ef8bc..8a80a46 100755
--- a/mojo/public/tools/bindings/generators/run_cpp_generator.py
+++ b/mojo/public/tools/bindings/generators/run_cpp_generator.py
@@ -10,7 +10,7 @@
 script_dir = os.path.dirname(os.path.realpath(__file__))
 sys.path.insert(0, os.path.join(script_dir, os.pardir, "pylib"))
 
-from generate import mojom_data
+from mojom.generate.data
 import mojom_cpp_generator
 
 def ReadDict(file):
@@ -20,7 +20,7 @@
     return dict
 
 dict = ReadDict(sys.argv[1])
-module = mojom_data.ModuleFromData(dict)
+module = mojom.generate.data.ModuleFromData(dict)
 dir = None
 if len(sys.argv) > 2:
   dir = sys.argv[2]
diff --git a/mojo/public/tools/bindings/mojom_bindings_generator.gypi b/mojo/public/tools/bindings/mojom_bindings_generator.gypi
index 5778c9c..de20ce4 100644
--- a/mojo/public/tools/bindings/mojom_bindings_generator.gypi
+++ b/mojo/public/tools/bindings/mojom_bindings_generator.gypi
@@ -39,16 +39,17 @@
         '<(DEPTH)/mojo/public/tools/bindings/generators/js_templates/struct_definition.tmpl',
         '<(DEPTH)/mojo/public/tools/bindings/generators/mojom_cpp_generator.py',
         '<(DEPTH)/mojo/public/tools/bindings/generators/mojom_js_generator.py',
-        '<(DEPTH)/mojo/public/tools/bindings/pylib/parse/__init__.py',
-        '<(DEPTH)/mojo/public/tools/bindings/pylib/parse/mojo_lexer.py',
-        '<(DEPTH)/mojo/public/tools/bindings/pylib/parse/mojo_parser.py',
-        '<(DEPTH)/mojo/public/tools/bindings/pylib/parse/mojo_translate.py',
-        '<(DEPTH)/mojo/public/tools/bindings/pylib/generate/__init__.py',
-        '<(DEPTH)/mojo/public/tools/bindings/pylib/generate/mojom.py',
-        '<(DEPTH)/mojo/public/tools/bindings/pylib/generate/mojom_data.py',
-        '<(DEPTH)/mojo/public/tools/bindings/pylib/generate/mojom_generator.py',
-        '<(DEPTH)/mojo/public/tools/bindings/pylib/generate/mojom_pack.py',
-        '<(DEPTH)/mojo/public/tools/bindings/pylib/generate/template_expander.py',
+        '<(DEPTH)/mojo/public/tools/bindings/pylib/mojom/generate/__init__.py',
+        '<(DEPTH)/mojo/public/tools/bindings/pylib/mojom/generate/data.py',
+        '<(DEPTH)/mojo/public/tools/bindings/pylib/mojom/generate/generator.py',
+        '<(DEPTH)/mojo/public/tools/bindings/pylib/mojom/generate/module.py',
+        '<(DEPTH)/mojo/public/tools/bindings/pylib/mojom/generate/pack.py',
+        '<(DEPTH)/mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py',
+        '<(DEPTH)/mojo/public/tools/bindings/pylib/mojom/parse/__init__.py',
+        '<(DEPTH)/mojo/public/tools/bindings/pylib/mojom/parse/ast.py',
+        '<(DEPTH)/mojo/public/tools/bindings/pylib/mojom/parse/lexer.py',
+        '<(DEPTH)/mojo/public/tools/bindings/pylib/mojom/parse/parser.py',
+        '<(DEPTH)/mojo/public/tools/bindings/pylib/mojom/parse/translate.py',
       ],
       'outputs': [
         '<(SHARED_INTERMEDIATE_DIR)/<(mojom_base_output_dir)/<(RULE_INPUT_DIRNAME)/<(RULE_INPUT_ROOT).mojom.cc',
diff --git a/mojo/public/tools/bindings/mojom_bindings_generator.py b/mojo/public/tools/bindings/mojom_bindings_generator.py
index a9d8b68..643f468 100755
--- a/mojo/public/tools/bindings/mojom_bindings_generator.py
+++ b/mojo/public/tools/bindings/mojom_bindings_generator.py
@@ -12,13 +12,13 @@
 import pprint
 import sys
 
-script_dir = os.path.dirname(os.path.realpath(__file__))
+script_dir = os.path.dirname(os.path.abspath(__file__))
 sys.path.insert(0, os.path.join(script_dir, "pylib"))
 
-from generate import mojom_data
-from parse import mojo_lexer
-from parse import mojo_parser
-from parse import mojo_translate
+from mojom.generate.data import OrderedModuleFromData
+from mojom.parse.lexer import LexError
+from mojom.parse.parser import Parse, ParseError
+from mojom.parse.translate import Translate
 
 
 def LoadGenerators(generators_string):
@@ -46,11 +46,13 @@
   return generators
 
 
-def _PrintImportStack(imported_filename_stack):
-  """Prints a chain of imports, given by imported_filename_stack."""
-  for i in reversed(xrange(0, len(imported_filename_stack)-1)):
-    print "  %s was imported by %s" % (imported_filename_stack[i+1],
-                                       imported_filename_stack[i])
+def MakeImportStackMessage(imported_filename_stack):
+  """Make a (human-readable) message listing a chain of imports. (Returned
+  string begins with a newline (if nonempty) and does not end with one.)"""
+  return ''.join(
+      reversed(["\n  %s was imported by %s" % (a, b) for (a, b) in \
+                    zip(imported_filename_stack[1:], imported_filename_stack)]))
+
 
 def ProcessFile(args, generator_modules, filename, processed_files={},
                 imported_filename_stack=[]):
@@ -60,27 +62,26 @@
 
   # Ensure we only visit each file once.
   if filename in imported_filename_stack:
-    print "%s: Error: Circular dependency" % filename
-    _PrintImportStack(imported_filename_stack + [filename])
+    print "%s: Error: Circular dependency" % filename + \
+        MakeImportStackMessage(imported_filename_stack + [filename])
     sys.exit(1)
 
   try:
     with open(filename) as f:
       source = f.read()
   except IOError as e:
-    print "%s: Error: %s" % (e.filename, e.strerror)
-    _PrintImportStack(imported_filename_stack + [filename])
+    print "%s: Error: %s" % (e.filename, e.strerror) + \
+        MakeImportStackMessage(imported_filename_stack + [filename])
     sys.exit(1)
 
   try:
-    tree = mojo_parser.Parse(source, filename)
-  except (mojo_lexer.LexError, mojo_parser.ParseError) as e:
-    print e
-    _PrintImportStack(imported_filename_stack + [filename])
+    tree = Parse(source, filename)
+  except (LexError, ParseError) as e:
+    print str(e) + MakeImportStackMessage(imported_filename_stack + [filename])
     sys.exit(1)
 
   dirname, name = os.path.split(filename)
-  mojom = mojo_translate.Translate(tree, name)
+  mojom = Translate(tree, name)
   if args.debug_print_intermediate:
     pprint.PrettyPrinter().pprint(mojom)
 
@@ -93,7 +94,7 @@
         processed_files=processed_files,
         imported_filename_stack=imported_filename_stack + [filename])
 
-  module = mojom_data.OrderedModuleFromData(mojom)
+  module = OrderedModuleFromData(mojom)
 
   # Set the path as relative to the source root.
   module.path = os.path.relpath(os.path.abspath(filename),
diff --git a/mojo/public/tools/bindings/mojom_bindings_generator_unittest.py b/mojo/public/tools/bindings/mojom_bindings_generator_unittest.py
new file mode 100644
index 0000000..de38856
--- /dev/null
+++ b/mojo/public/tools/bindings/mojom_bindings_generator_unittest.py
@@ -0,0 +1,23 @@
+# 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 unittest
+
+from mojom_bindings_generator import MakeImportStackMessage
+
+
+class MojoBindingsGeneratorTest(unittest.TestCase):
+  """Tests mojo_bindings_generator."""
+
+  def testMakeImportStackMessage(self):
+    """Tests MakeImportStackMessage()."""
+    self.assertEquals(MakeImportStackMessage(["x"]), "")
+    self.assertEquals(MakeImportStackMessage(["x", "y"]),
+        "\n  y was imported by x")
+    self.assertEquals(MakeImportStackMessage(["x", "y", "z"]),
+        "\n  z was imported by y\n  y was imported by x")
+
+
+if __name__ == "__main__":
+  unittest.main()
diff --git a/mojo/public/tools/bindings/pylib/generate/mojom.py b/mojo/public/tools/bindings/pylib/generate/mojom.py
deleted file mode 100644
index 4c5e413..0000000
--- a/mojo/public/tools/bindings/pylib/generate/mojom.py
+++ /dev/null
@@ -1,188 +0,0 @@
-# Copyright 2013 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.
-
-# mojom's classes provide an interface to mojo modules. Modules are collections
-# of interfaces and structs to be used by mojo ipc clients and servers.
-#
-# A simple interface would be created this way:
-# module = mojom.Module('Foo')
-# interface = module.AddInterface('Bar')
-# method = interface.AddMethod('Tat', 0)
-# method.AddParameter('baz', 0, mojom.INT32)
-#
-
-class Kind(object):
-  def __init__(self, spec = None):
-    self.spec = spec
-    self.parent_kind = None
-
-# Initialize the set of primitive types. These can be accessed by clients.
-BOOL         = Kind('b')
-INT8         = Kind('i8')
-INT16        = Kind('i16')
-INT32        = Kind('i32')
-INT64        = Kind('i64')
-UINT8        = Kind('u8')
-UINT16       = Kind('u16')
-UINT32       = Kind('u32')
-UINT64       = Kind('u64')
-FLOAT        = Kind('f')
-DOUBLE       = Kind('d')
-STRING       = Kind('s')
-HANDLE       = Kind('h')
-DCPIPE       = Kind('h:d:c')
-DPPIPE       = Kind('h:d:p')
-MSGPIPE      = Kind('h:m')
-SHAREDBUFFER = Kind('h:s')
-
-
-# Collection of all Primitive types
-PRIMITIVES = (
-  BOOL,
-  INT8,
-  INT16,
-  INT32,
-  INT64,
-  UINT8,
-  UINT16,
-  UINT32,
-  UINT64,
-  FLOAT,
-  DOUBLE,
-  STRING,
-  HANDLE,
-  DCPIPE,
-  DPPIPE,
-  MSGPIPE,
-  SHAREDBUFFER
-)
-
-
-class Constant(object):
-  def __init__(self, module, enum, field):
-    self.namespace = module.namespace
-    self.parent_kind = enum.parent_kind
-    self.name = [enum.name, field.name]
-    self.imported_from = None
-
-  def GetSpec(self):
-    return (self.namespace + '.' +
-        (self.parent_kind and (self.parent_kind.name + '.') or "") + \
-        self.name[1])
-
-
-class Field(object):
-  def __init__(self, name = None, kind = None, ordinal = None, default = None):
-    self.name = name
-    self.kind = kind
-    self.ordinal = ordinal
-    self.default = default
-
-
-class Struct(Kind):
-  def __init__(self, name = None):
-    self.name = name
-    self.imported_from = None
-    if name != None:
-      spec = 'x:' + name
-    else:
-      spec = None
-    Kind.__init__(self, spec)
-    self.fields = []
-
-  def AddField(self, name, kind, ordinal = None, default = None):
-    field = Field(name, kind, ordinal, default)
-    self.fields.append(field)
-    return field
-
-
-class Array(Kind):
-  def __init__(self, kind = None):
-    self.kind = kind
-    if kind != None:
-      Kind.__init__(self, 'a:' + kind.spec)
-    else:
-      Kind.__init__(self)
-
-
-class Parameter(object):
-  def __init__(self, name = None, kind = None, ordinal = None, default = None):
-    self.name = name
-    self.ordinal = ordinal
-    self.kind = kind
-    self.default = default
-
-
-class Method(object):
-  def __init__(self, name = None, ordinal = None):
-    self.name = name
-    self.ordinal = ordinal
-    self.parameters = []
-    self.response_parameters = None
-
-  def AddParameter(self, name, kind, ordinal = None, default = None):
-    parameter = Parameter(name, kind, ordinal, default)
-    self.parameters.append(parameter)
-    return parameter
-
-  def AddResponseParameter(self, name, kind, ordinal = None, default = None):
-    if self.response_parameters == None:
-      self.response_parameters = []
-    parameter = Parameter(name, kind, ordinal, default)
-    self.response_parameters.append(parameter)
-    return parameter
-
-
-class Interface(Kind):
-  def __init__(self, name = None, peer = None):
-    self.name = name
-    if name != None:
-      spec = 'x:' + name
-    else:
-      spec = None
-    Kind.__init__(self, spec)
-    self.peer = peer
-    self.methods = []
-
-  def AddMethod(self, name, ordinal = None):
-    method = Method(name, ordinal)
-    self.methods.append(method)
-    return method;
-
-
-class EnumField(object):
-  def __init__(self, name = None, value = None):
-    self.name = name
-    self.value = value
-
-
-class Enum(Kind):
-  def __init__(self, name = None):
-    self.name = name
-    self.imported_from = None
-    if name != None:
-      spec = 'x:' + name
-    else:
-      spec = None
-    Kind.__init__(self, spec)
-    self.fields = []
-
-
-class Module(object):
-  def __init__(self, name = None, namespace = None):
-    self.name = name
-    self.path = name
-    self.namespace = namespace
-    self.structs = []
-    self.interfaces = []
-
-  def AddInterface(self, name):
-    interface = Interface(name);
-    self.interfaces.append(interface)
-    return interface;
-
-  def AddStruct(self, name):
-    struct = Struct(name)
-    self.structs.append(struct)
-    return struct;
diff --git a/mojo/public/tools/bindings/pylib/generate/mojom_data.py b/mojo/public/tools/bindings/pylib/generate/mojom_data.py
deleted file mode 100644
index ce9bc18..0000000
--- a/mojo/public/tools/bindings/pylib/generate/mojom_data.py
+++ /dev/null
@@ -1,308 +0,0 @@
-# Copyright 2013 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 mojom
-import copy
-
-# mojom_data provides a mechanism to turn mojom Modules to dictionaries and
-# back again. This can be used to persist a mojom Module created progromatically
-# or to read a dictionary from code or a file.
-# Example:
-# test_dict = {
-#   'name': 'test',
-#   'namespace': 'testspace',
-#   'structs': [{
-#     'name': 'teststruct',
-#     'fields': [
-#       {'name': 'testfield1', 'kind': 'i32'},
-#       {'name': 'testfield2', 'kind': 'a:i32', 'ordinal': 42}]}],
-#   'interfaces': [{
-#     'name': 'Server',
-#     'methods': [{
-#       'name': 'Foo',
-#       'parameters': [{
-#         'name': 'foo', 'kind': 'i32'},
-#         {'name': 'bar', 'kind': 'a:x:teststruct'}],
-#     'ordinal': 42}]}]
-# }
-# test_module = mojom_data.ModuleFromData(test_dict)
-
-# Used to create a subclass of str that supports sorting by index, to make
-# pretty printing maintain the order.
-def istr(index, string):
-  class IndexedString(str):
-    def __lt__(self, other):
-      return self.__index__ < other.__index__
-
-  istr = IndexedString(string)
-  istr.__index__ = index
-  return istr
-
-def LookupKind(kinds, spec, scope):
-  """Tries to find which Kind a spec refers to, given the scope in which its
-  referenced. Starts checking from the narrowest scope to most general. For
-  example, given a struct field like
-    Foo.Bar x;
-  Foo.Bar could refer to the type 'Bar' in the 'Foo' namespace, or an inner
-  type 'Bar' in the struct 'Foo' in the current namespace.
-
-  |scope| is a tuple that looks like (namespace, struct/interface), referring
-  to the location where the type is referenced."""
-  if spec.startswith('x:'):
-    name = spec[2:]
-    for i in xrange(len(scope), -1, -1):
-      test_spec = 'x:'
-      if i > 0:
-        test_spec += '.'.join(scope[:i]) + '.'
-      test_spec += name
-      kind = kinds.get(test_spec)
-      if kind:
-        return kind
-
-  return kinds.get(spec)
-
-def LookupConstant(constants, name, scope):
-  """Like LookupKind, but for constants."""
-  for i in xrange(len(scope), -1, -1):
-    if i > 0:
-      test_spec = '.'.join(scope[:i]) + '.'
-    test_spec += name
-    constant = constants.get(test_spec)
-    if constant:
-      return constant
-
-  return constants.get(name)
-
-def KindToData(kind):
-  return kind.spec
-
-def KindFromData(kinds, data, scope):
-  kind = LookupKind(kinds, data, scope)
-  if kind:
-    return kind
-  if data.startswith('a:'):
-    kind = mojom.Array()
-    kind.kind = KindFromData(kinds, data[2:], scope)
-  else:
-    kind = mojom.Kind()
-  kind.spec = data
-  kinds[data] = kind
-  return kind
-
-def KindFromImport(original_kind, imported_from):
-  """Used with 'import module' - clones the kind imported from the
-  given module's namespace. Only used with Structs and Enums."""
-  kind = copy.deepcopy(original_kind)
-  kind.imported_from = imported_from
-  return kind
-
-def ImportFromData(module, data):
-  import_module = data['module']
-
-  import_item = {}
-  import_item['module_name'] = import_module.name
-  import_item['namespace'] = import_module.namespace
-  import_item['module'] = import_module
-
-  # Copy the struct kinds from our imports into the current module.
-  for kind in import_module.kinds.itervalues():
-    if (isinstance(kind, (mojom.Struct, mojom.Enum)) and
-        kind.imported_from is None):
-      kind = KindFromImport(kind, import_item)
-      module.kinds[kind.spec] = kind
-  # Ditto for constants.
-  for constant in import_module.constants.itervalues():
-    if constant.imported_from is None:
-      constant = copy.deepcopy(constant)
-      constant.imported_from = import_item
-      module.constants[constant.GetSpec()] = constant
-
-  return import_item
-
-def StructToData(struct):
-  return {
-    istr(0, 'name'): struct.name,
-    istr(1, 'fields'): map(FieldToData, struct.fields)
-  }
-
-def StructFromData(module, data):
-  struct = mojom.Struct()
-  struct.name = data['name']
-  struct.spec = 'x:' + module.namespace + '.' + struct.name
-  module.kinds[struct.spec] = struct
-  struct.enums = map(lambda enum:
-      EnumFromData(module, enum, struct), data['enums'])
-  struct.fields = map(lambda field:
-      FieldFromData(module, field, struct), data['fields'])
-  return struct
-
-def FieldToData(field):
-  data = {
-    istr(0, 'name'): field.name,
-    istr(1, 'kind'): KindToData(field.kind)
-  }
-  if field.ordinal != None:
-    data[istr(2, 'ordinal')] = field.ordinal
-  if field.default != None:
-    data[istr(3, 'default')] = field.default
-  return data
-
-def FixupExpression(module, value, scope):
-  if isinstance(value, (tuple, list)):
-    for i in xrange(len(value)):
-      if isinstance(value, tuple):
-        FixupExpression(module, value[i], scope)
-      else:
-        value[i] = FixupExpression(module, value[i], scope)
-  elif value:
-    constant = LookupConstant(module.constants, value, scope)
-    if constant:
-      return constant
-  return value
-
-def FieldFromData(module, data, struct):
-  field = mojom.Field()
-  field.name = data['name']
-  field.kind = KindFromData(
-      module.kinds, data['kind'], (module.namespace, struct.name))
-  field.ordinal = data.get('ordinal')
-  field.default = FixupExpression(
-      module, data.get('default'), (module.namespace, struct.name))
-  return field
-
-def ParameterToData(parameter):
-  data = {
-    istr(0, 'name'): parameter.name,
-    istr(1, 'kind'): parameter.kind.spec
-  }
-  if parameter.ordinal != None:
-    data[istr(2, 'ordinal')] = parameter.ordinal
-  if parameter.default != None:
-    data[istr(3, 'default')] = parameter.default
-  return data
-
-def ParameterFromData(module, data, interface):
-  parameter = mojom.Parameter()
-  parameter.name = data['name']
-  parameter.kind = KindFromData(
-      module.kinds, data['kind'], (module.namespace, interface.name))
-  parameter.ordinal = data.get('ordinal')
-  parameter.default = data.get('default')
-  return parameter
-
-def MethodToData(method):
-  data = {
-    istr(0, 'name'):       method.name,
-    istr(1, 'parameters'): map(ParameterToData, method.parameters)
-  }
-  if method.ordinal != None:
-    data[istr(2, 'ordinal')] = method.ordinal
-  if method.response_parameters != None:
-    data[istr(3, 'response_parameters')] = map(
-        ParameterToData, method.response_parameters)
-  return data
-
-def MethodFromData(module, data, interface):
-  method = mojom.Method()
-  method.name = data['name']
-  method.ordinal = data.get('ordinal')
-  method.default = data.get('default')
-  method.parameters = map(lambda parameter:
-      ParameterFromData(module, parameter, interface), data['parameters'])
-  if data.has_key('response_parameters'):
-    method.response_parameters = map(
-        lambda parameter: ParameterFromData(module, parameter, interface),
-                          data['response_parameters'])
-  return method
-
-def InterfaceToData(interface):
-  return {
-    istr(0, 'name'):    interface.name,
-    istr(1, 'peer'):    interface.peer,
-    istr(2, 'methods'): map(MethodToData, interface.methods)
-  }
-
-def InterfaceFromData(module, data):
-  interface = mojom.Interface()
-  interface.name = data['name']
-  interface.spec = 'x:' + module.namespace + '.' + interface.name
-  interface.peer = data['peer'] if data.has_key('peer') else None
-  module.kinds[interface.spec] = interface
-  interface.enums = map(lambda enum:
-      EnumFromData(module, enum, interface), data['enums'])
-  interface.methods = map(lambda method:
-      MethodFromData(module, method, interface), data['methods'])
-  return interface
-
-def EnumFieldFromData(module, enum, data, parent_kind):
-  field = mojom.EnumField()
-  field.name = data['name']
-  if parent_kind:
-    field.value = FixupExpression(
-        module, data['value'], (module.namespace, parent_kind.name))
-  else:
-    field.value = FixupExpression(
-        module, data['value'], (module.namespace, ))
-  constant = mojom.Constant(module, enum, field)
-  module.constants[constant.GetSpec()] = constant
-  return field
-
-def EnumFromData(module, data, parent_kind):
-  enum = mojom.Enum()
-  enum.name = data['name']
-  name = enum.name
-  if parent_kind:
-    name = parent_kind.name + '.' + name
-  enum.spec = 'x:%s.%s' % (module.namespace, name)
-  enum.parent_kind = parent_kind
-
-  enum.fields = map(
-      lambda field: EnumFieldFromData(module, enum, field, parent_kind),
-      data['fields'])
-  module.kinds[enum.spec] = enum
-  return enum
-
-def ModuleToData(module):
-  return {
-    istr(0, 'name'):       module.name,
-    istr(1, 'namespace'):  module.namespace,
-    istr(2, 'structs'):    map(StructToData, module.structs),
-    istr(3, 'interfaces'): map(InterfaceToData, module.interfaces)
-  }
-
-def ModuleFromData(data):
-  module = mojom.Module()
-  module.kinds = {}
-  for kind in mojom.PRIMITIVES:
-    module.kinds[kind.spec] = kind
-
-  module.constants = {}
-
-  module.name = data['name']
-  module.namespace = data['namespace']
-  # Imports must come first, because they add to module.kinds which is used
-  # by by the others.
-  module.imports = map(
-      lambda import_data: ImportFromData(module, import_data),
-      data['imports'])
-  module.enums = map(
-      lambda enum: EnumFromData(module, enum, None), data['enums'])
-  module.structs = map(
-      lambda struct: StructFromData(module, struct), data['structs'])
-  module.interfaces = map(
-      lambda interface: InterfaceFromData(module, interface),
-      data['interfaces'])
-
-  return module
-
-def OrderedModuleFromData(data):
-  module = ModuleFromData(data)
-  next_interface_ordinal = 0
-  for interface in module.interfaces:
-    next_ordinal = 0
-    for method in interface.methods:
-      if method.ordinal is None:
-        method.ordinal = next_ordinal
-      next_ordinal = method.ordinal + 1
-  return module
diff --git a/mojo/public/tools/bindings/pylib/generate/mojom_data_tests.py b/mojo/public/tools/bindings/pylib/generate/mojom_data_tests.py
deleted file mode 100644
index 7f622e4..0000000
--- a/mojo/public/tools/bindings/pylib/generate/mojom_data_tests.py
+++ /dev/null
@@ -1,85 +0,0 @@
-# Copyright 2013 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 mojom_data
-import mojom_test
-import sys
-
-EXPECT_EQ = mojom_test.EXPECT_EQ
-EXPECT_TRUE = mojom_test.EXPECT_TRUE
-RunTest = mojom_test.RunTest
-
-
-def DeepEquals(d1, d2):
-  if d1 == d2:
-    return True
-  if d2.__class__ != d2.__class__:
-    return False
-  if isinstance(d1, dict):
-    if set(d1.keys()) != set(d2.keys()):
-      return False
-    for key in d1.keys():
-      if not DeepEquals(d1[key], d2[key]):
-        return False
-    return True
-  if isinstance(d1, (list, tuple)):
-    if len(d1) != len(d2):
-      return False
-    for i in range(len(d1)):
-      if not DeepEquals(d1[i], d2[i]):
-        return False
-    return True
-  return False
-
-
-test_dict = {
-  'name': 'test',
-  'namespace': 'testspace',
-  'structs': [{
-    'name': 'teststruct',
-    'fields': [
-      {'name': 'testfield1', 'kind': 'i32'},
-      {'name': 'testfield2', 'kind': 'a:i32', 'ordinal': 42}]}],
-  'interfaces': [{
-    'name': 'Server',
-    'peer': None,
-    'methods': [{
-      'name': 'Foo',
-      'parameters': [
-        {'name': 'foo', 'kind': 'i32'},
-        {'name': 'bar', 'kind': 'a:x:teststruct'}],
-    'ordinal': 42}]}]
-}
-
-
-def TestRead():
-  module = mojom_data.ModuleFromData(test_dict)
-  return mojom_test.TestTestModule(module)
-
-
-def TestWrite():
-  module = mojom_test.BuildTestModule()
-  d = mojom_data.ModuleToData(module)
-  return EXPECT_TRUE(DeepEquals(test_dict, d))
-
-
-def TestWriteRead():
-  module1 = mojom_test.BuildTestModule()
-
-  dict1 = mojom_data.ModuleToData(module1)
-  module2 = mojom_data.ModuleFromData(dict1)
-  return EXPECT_TRUE(mojom_test.ModulesAreEqual(module1, module2))
-
-
-def Main(args):
-  errors = 0
-  errors += RunTest(TestWriteRead)
-  errors += RunTest(TestRead)
-  errors += RunTest(TestWrite)
-
-  return errors
-
-
-if __name__ == '__main__':
-  sys.exit(Main(sys.argv[1:]))
diff --git a/mojo/public/tools/bindings/pylib/generate/mojom_generator.py b/mojo/public/tools/bindings/pylib/generate/mojom_generator.py
deleted file mode 100644
index 131c248..0000000
--- a/mojo/public/tools/bindings/pylib/generate/mojom_generator.py
+++ /dev/null
@@ -1,99 +0,0 @@
-# Copyright 2013 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.
-
-"""Code shared by the various language-specific code generators."""
-
-import os
-import mojom
-import mojom_pack
-import re
-from functools import partial
-
-def GetStructFromMethod(interface, method):
-  """Converts a method's parameters into the fields of a struct."""
-  params_class = "%s_%s_Params" % (interface.name, method.name)
-  struct = mojom.Struct(params_class)
-  for param in method.parameters:
-    struct.AddField(param.name, param.kind, param.ordinal)
-  struct.packed = mojom_pack.PackedStruct(struct)
-  return struct
-
-def GetResponseStructFromMethod(interface, method):
-  """Converts a method's response_parameters into the fields of a struct."""
-  params_class = "%s_%s_ResponseParams" % (interface.name, method.name)
-  struct = mojom.Struct(params_class)
-  for param in method.response_parameters:
-    struct.AddField(param.name, param.kind, param.ordinal)
-  struct.packed = mojom_pack.PackedStruct(struct)
-  return struct
-
-def GetStructInfo(exported, struct):
-  struct.packed = mojom_pack.PackedStruct(struct)
-  struct.bytes = mojom_pack.GetByteLayout(struct.packed)
-  struct.exported = exported
-  return struct
-
-def IsStringKind(kind):
-  return kind.spec == 's'
-
-def IsEnumKind(kind):
-  return isinstance(kind, mojom.Enum)
-
-def IsObjectKind(kind):
-  return isinstance(kind, (mojom.Struct, mojom.Array)) or IsStringKind(kind)
-
-def IsHandleKind(kind):
-  return kind.spec.startswith('h') or isinstance(kind, mojom.Interface)
-
-def StudlyCapsToCamel(studly):
-  return studly[0].lower() + studly[1:]
-
-def VerifyTokenType(token, expected):
-  """Used to check that arrays and objects are used correctly as default
-  values. Arrays are tokens that look like ('ARRAY', element0, element1...).
-  See mojom_parser.py for their representation.
-  """
-  if not isinstance(token, tuple):
-    raise Exception("Expected token type '%s'. Invalid token '%s'." %
-        (expected, token))
-  if token[0] != expected:
-    raise Exception("Expected token type '%s'. Got '%s'." %
-        (expected, token[0]))
-
-def ExpressionMapper(expression, mapper):
-  if isinstance(expression, tuple) and expression[0] == 'EXPRESSION':
-    result = []
-    for each in expression[1]:
-      result.extend(ExpressionMapper(each, mapper))
-    return result
-  return [mapper(expression)]
-
-class Generator(object):
-  # Pass |output_dir| to emit files to disk. Omit |output_dir| to echo all
-  # files to stdout.
-  def __init__(self, module, output_dir=None):
-    self.module = module
-    self.output_dir = output_dir
-
-  def GetStructsFromMethods(self):
-    result = []
-    for interface in self.module.interfaces:
-      for method in interface.methods:
-        result.append(GetStructFromMethod(interface, method))
-        if method.response_parameters != None:
-          result.append(GetResponseStructFromMethod(interface, method))
-    return map(partial(GetStructInfo, False), result)
-
-  def GetStructs(self):
-    return map(partial(GetStructInfo, True), self.module.structs)
-
-  def Write(self, contents, filename):
-    if self.output_dir is None:
-      print contents
-      return
-    with open(os.path.join(self.output_dir, filename), "w+") as f:
-      f.write(contents)
-
-  def GenerateFiles(self):
-    raise NotImplementedError("Subclasses must override/implement this method")
diff --git a/mojo/public/tools/bindings/pylib/generate/mojom_pack.py b/mojo/public/tools/bindings/pylib/generate/mojom_pack.py
deleted file mode 100644
index c737eb6..0000000
--- a/mojo/public/tools/bindings/pylib/generate/mojom_pack.py
+++ /dev/null
@@ -1,149 +0,0 @@
-# Copyright 2013 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 mojom
-
-# mojom_pack provides a mechanism for determining the packed order and offsets
-# of a mojom.Struct.
-#
-# ps = mojom_pack.PackedStruct(struct)
-# ps.packed_fields will access a list of PackedField objects, each of which
-# will have an offset, a size and a bit (for mojom.BOOLs).
-
-class PackedField(object):
-  kind_to_size = {
-    mojom.BOOL:         1,
-    mojom.INT8:         1,
-    mojom.UINT8:        1,
-    mojom.INT16:        2,
-    mojom.UINT16:       2,
-    mojom.INT32:        4,
-    mojom.UINT32:       4,
-    mojom.FLOAT:        4,
-    mojom.HANDLE:       4,
-    mojom.MSGPIPE:      4,
-    mojom.SHAREDBUFFER: 4,
-    mojom.DCPIPE:       4,
-    mojom.DPPIPE:       4,
-    mojom.INT64:        8,
-    mojom.UINT64:       8,
-    mojom.DOUBLE:       8,
-    mojom.STRING:       8
-  }
-
-  @classmethod
-  def GetSizeForKind(cls, kind):
-    if isinstance(kind, mojom.Array) or isinstance(kind, mojom.Struct):
-      return 8
-    if isinstance(kind, mojom.Interface):
-      kind = mojom.MSGPIPE
-    if isinstance(kind, mojom.Enum):
-      # TODO(mpcomplete): what about big enums?
-      return cls.kind_to_size[mojom.INT32]
-    if not kind in cls.kind_to_size:
-      raise Exception("Invalid kind: %s" % kind.spec)
-    return cls.kind_to_size[kind]
-
-  def __init__(self, field, ordinal):
-    self.field = field
-    self.ordinal = ordinal
-    self.size = self.GetSizeForKind(field.kind)
-    self.offset = None
-    self.bit = None
-
-
-# Returns the pad necessary to reserve space for alignment of |size|.
-def GetPad(offset, size):
-  return (size - (offset % size)) % size
-
-
-# Returns a 2-tuple of the field offset and bit (for BOOLs)
-def GetFieldOffset(field, last_field):
-  if field.field.kind == mojom.BOOL and \
-      last_field.field.kind == mojom.BOOL and \
-      last_field.bit < 7:
-    return (last_field.offset, last_field.bit + 1)
-
-  offset = last_field.offset + last_field.size
-  pad = GetPad(offset, field.size)
-  return (offset + pad, 0)
-
-
-class PackedStruct(object):
-  def __init__(self, struct):
-    self.struct = struct
-    self.packed_fields = []
-
-    # No fields.
-    if (len(struct.fields) == 0):
-      return
-
-    # Start by sorting by ordinal.
-    src_fields = []
-    ordinal = 1
-    for field in struct.fields:
-      if field.ordinal is not None:
-        ordinal = field.ordinal
-      src_fields.append(PackedField(field, ordinal))
-      ordinal += 1
-    src_fields.sort(key=lambda field: field.ordinal)
-
-    src_field = src_fields[0]
-    src_field.offset = 0
-    src_field.bit = 0
-    # dst_fields will contain each of the fields, in increasing offset order.
-    dst_fields = self.packed_fields
-    dst_fields.append(src_field)
-
-    # Then find first slot that each field will fit.
-    for src_field in src_fields[1:]:
-      last_field = dst_fields[0]
-      for i in xrange(1, len(dst_fields)):
-        next_field = dst_fields[i]
-        offset, bit = GetFieldOffset(src_field, last_field)
-        if offset + src_field.size <= next_field.offset:
-          # Found hole.
-          src_field.offset = offset
-          src_field.bit = bit
-          dst_fields.insert(i, src_field)
-          break
-        last_field = next_field
-      if src_field.offset is None:
-        # Add to end
-        src_field.offset, src_field.bit = GetFieldOffset(src_field, last_field)
-        dst_fields.append(src_field)
-
-  def GetTotalSize(self):
-    if not self.packed_fields:
-      return 0;
-    last_field = self.packed_fields[-1]
-    offset = last_field.offset + last_field.size
-    pad = GetPad(offset, 8)
-    return offset + pad;
-
-
-class ByteInfo(object):
-  def __init__(self):
-    self.is_padding = False
-    self.packed_fields = []
-
-
-def GetByteLayout(packed_struct):
-  bytes = [ByteInfo() for i in xrange(packed_struct.GetTotalSize())]
-
-  limit_of_previous_field = 0
-  for packed_field in packed_struct.packed_fields:
-    for i in xrange(limit_of_previous_field, packed_field.offset):
-      bytes[i].is_padding = True
-    bytes[packed_field.offset].packed_fields.append(packed_field)
-    limit_of_previous_field = packed_field.offset + packed_field.size
-
-  for i in xrange(limit_of_previous_field, len(bytes)):
-    bytes[i].is_padding = True
-
-  for byte in bytes:
-    # A given byte cannot both be padding and have a fields packed into it.
-    assert not (byte.is_padding and byte.packed_fields)
-
-  return bytes
diff --git a/mojo/public/tools/bindings/pylib/generate/mojom_pack_tests.py b/mojo/public/tools/bindings/pylib/generate/mojom_pack_tests.py
deleted file mode 100644
index 8b72562..0000000
--- a/mojo/public/tools/bindings/pylib/generate/mojom_pack_tests.py
+++ /dev/null
@@ -1,174 +0,0 @@
-# Copyright 2013 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 mojom
-import mojom_pack
-import mojom_test
-import sys
-
-EXPECT_EQ = mojom_test.EXPECT_EQ
-EXPECT_TRUE = mojom_test.EXPECT_TRUE
-RunTest = mojom_test.RunTest
-
-
-def TestOrdinalOrder():
-  errors = 0
-  struct = mojom.Struct('test')
-  struct.AddField('testfield1', mojom.INT32, 2)
-  struct.AddField('testfield2', mojom.INT32, 1)
-  ps = mojom_pack.PackedStruct(struct)
-
-  errors += EXPECT_EQ(2, len(ps.packed_fields))
-  errors += EXPECT_EQ('testfield2', ps.packed_fields[0].field.name)
-  errors += EXPECT_EQ('testfield1', ps.packed_fields[1].field.name)
-
-  return errors
-
-def TestZeroFields():
-  errors = 0
-  struct = mojom.Struct('test')
-  ps = mojom_pack.PackedStruct(struct)
-  errors += EXPECT_EQ(0, len(ps.packed_fields))
-  return errors
-
-
-def TestOneField():
-  errors = 0
-  struct = mojom.Struct('test')
-  struct.AddField('testfield1', mojom.INT8)
-  ps = mojom_pack.PackedStruct(struct)
-  errors += EXPECT_EQ(1, len(ps.packed_fields))
-  return errors
-
-# Pass three tuples.
-# |kinds| is a sequence of mojom.Kinds that specify the fields that are to
-# be created.
-# |fields| is the expected order of the resulting fields, with the integer
-# "1" first.
-# |offsets| is the expected order of offsets, with the integer "0" first.
-def TestSequence(kinds, fields, offsets):
-  errors = 0
-  struct = mojom.Struct('test')
-  index = 1
-  for kind in kinds:
-    struct.AddField("%d" % index, kind)
-    index += 1
-  ps = mojom_pack.PackedStruct(struct)
-  num_fields = len(ps.packed_fields)
-  errors += EXPECT_EQ(len(kinds), num_fields)
-  for i in xrange(num_fields):
-    EXPECT_EQ("%d" % fields[i], ps.packed_fields[i].field.name)
-    EXPECT_EQ(offsets[i], ps.packed_fields[i].offset)
-
-  return errors
-
-
-def TestPaddingPackedInOrder():
-  return TestSequence(
-      (mojom.INT8, mojom.UINT8, mojom.INT32),
-      (1, 2, 3),
-      (0, 1, 4))
-
-
-def TestPaddingPackedOutOfOrder():
-  return TestSequence(
-      (mojom.INT8, mojom.INT32, mojom.UINT8),
-      (1, 3, 2),
-      (0, 1, 4))
-
-
-def TestPaddingPackedOverflow():
-  kinds = (mojom.INT8, mojom.INT32, mojom.INT16, mojom.INT8, mojom.INT8)
-  # 2 bytes should be packed together first, followed by short, then by int.
-  fields = (1, 4, 3, 2, 5)
-  offsets = (0, 1, 2, 4, 8)
-  return TestSequence(kinds, fields, offsets)
-
-
-def TestAllTypes():
-  struct = mojom.Struct('test')
-  array = mojom.Array()
-  return TestSequence(
-      (mojom.BOOL, mojom.INT8, mojom.STRING, mojom.UINT8,
-       mojom.INT16, mojom.DOUBLE, mojom.UINT16,
-       mojom.INT32, mojom.UINT32, mojom.INT64,
-       mojom.FLOAT, mojom.STRING, mojom.HANDLE,
-       mojom.UINT64, mojom.Struct('test'), mojom.Array()),
-      (1, 2, 4, 5, 7, 3, 6,  8,  9,  10, 11, 13, 12, 14, 15, 16, 17),
-      (0, 1, 2, 4, 6, 8, 16, 24, 28, 32, 40, 44, 48, 56, 64, 72, 80))
-
-
-def TestPaddingPackedOutOfOrderByOrdinal():
-  errors = 0
-  struct = mojom.Struct('test')
-  struct.AddField('testfield1', mojom.INT8)
-  struct.AddField('testfield3', mojom.UINT8, 3)
-  struct.AddField('testfield2', mojom.INT32, 2)
-  ps = mojom_pack.PackedStruct(struct)
-  errors += EXPECT_EQ(3, len(ps.packed_fields))
-
-  # Second byte should be packed in behind first, altering order.
-  errors += EXPECT_EQ('testfield1', ps.packed_fields[0].field.name)
-  errors += EXPECT_EQ('testfield3', ps.packed_fields[1].field.name)
-  errors += EXPECT_EQ('testfield2', ps.packed_fields[2].field.name)
-
-  # Second byte should be packed with first.
-  errors += EXPECT_EQ(0, ps.packed_fields[0].offset)
-  errors += EXPECT_EQ(1, ps.packed_fields[1].offset)
-  errors += EXPECT_EQ(4, ps.packed_fields[2].offset)
-
-  return errors
-
-
-def TestBools():
-  errors = 0
-  struct = mojom.Struct('test')
-  struct.AddField('bit0', mojom.BOOL)
-  struct.AddField('bit1', mojom.BOOL)
-  struct.AddField('int', mojom.INT32)
-  struct.AddField('bit2', mojom.BOOL)
-  struct.AddField('bit3', mojom.BOOL)
-  struct.AddField('bit4', mojom.BOOL)
-  struct.AddField('bit5', mojom.BOOL)
-  struct.AddField('bit6', mojom.BOOL)
-  struct.AddField('bit7', mojom.BOOL)
-  struct.AddField('bit8', mojom.BOOL)
-  ps = mojom_pack.PackedStruct(struct)
-  errors += EXPECT_EQ(10, len(ps.packed_fields))
-
-  # First 8 bits packed together.
-  for i in xrange(8):
-    pf = ps.packed_fields[i]
-    errors += EXPECT_EQ(0, pf.offset)
-    errors += EXPECT_EQ("bit%d" % i, pf.field.name)
-    errors += EXPECT_EQ(i, pf.bit)
-
-  # Ninth bit goes into second byte.
-  errors += EXPECT_EQ("bit8", ps.packed_fields[8].field.name)
-  errors += EXPECT_EQ(1, ps.packed_fields[8].offset)
-  errors += EXPECT_EQ(0, ps.packed_fields[8].bit)
-
-  # int comes last.
-  errors += EXPECT_EQ("int", ps.packed_fields[9].field.name)
-  errors += EXPECT_EQ(4, ps.packed_fields[9].offset)
-
-  return errors
-
-
-def Main(args):
-  errors = 0
-  errors += RunTest(TestZeroFields)
-  errors += RunTest(TestOneField)
-  errors += RunTest(TestPaddingPackedInOrder)
-  errors += RunTest(TestPaddingPackedOutOfOrder)
-  errors += RunTest(TestPaddingPackedOverflow)
-  errors += RunTest(TestAllTypes)
-  errors += RunTest(TestPaddingPackedOutOfOrderByOrdinal)
-  errors += RunTest(TestBools)
-
-  return errors
-
-
-if __name__ == '__main__':
-  sys.exit(Main(sys.argv[1:]))
diff --git a/mojo/public/tools/bindings/pylib/generate/mojom_test.py b/mojo/public/tools/bindings/pylib/generate/mojom_test.py
deleted file mode 100644
index a6b30a3..0000000
--- a/mojo/public/tools/bindings/pylib/generate/mojom_test.py
+++ /dev/null
@@ -1,193 +0,0 @@
-# Copyright 2013 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 mojom
-import sys
-import traceback
-
-# Support for writing mojom test cases.
-# RunTest(fn) will execute fn, catching any exceptions. fn should return
-# the number of errors that are encountered.
-#
-# EXPECT_EQ(a, b) and EXPECT_TRUE(b) will print error information if the
-# expectations are not true and return a non zero value. This allows test cases
-# to be written like this
-#
-# def Foo():
-#   errors = 0
-#   errors += EXPECT_EQ('test', test())
-#   ...
-#   return errors
-#
-# RunTest(foo)
-
-def FieldsAreEqual(field1, field2):
-  if field1 == field2:
-    return True
-  return field1.name == field2.name and \
-      KindsAreEqual(field1.kind, field2.kind) and \
-      field1.ordinal == field2.ordinal and \
-      field1.default == field2.default
-
-
-def KindsAreEqual(kind1, kind2):
-  if kind1 == kind2:
-    return True
-  if kind1.__class__ != kind2.__class__ or kind1.spec != kind2.spec:
-    return False
-  if kind1.__class__ == mojom.Kind:
-    return kind1.spec == kind2.spec
-  if kind1.__class__ == mojom.Struct:
-    if kind1.name != kind2.name or \
-        kind1.spec != kind2.spec or \
-        len(kind1.fields) != len(kind2.fields):
-      return False
-    for i in range(len(kind1.fields)):
-      if not FieldsAreEqual(kind1.fields[i], kind2.fields[i]):
-        return False
-    return True
-  if kind1.__class__ == mojom.Array:
-    return KindsAreEqual(kind1.kind, kind2.kind)
-  print 'Unknown Kind class: ', kind1.__class__.__name__
-  return False
-
-
-def ParametersAreEqual(parameter1, parameter2):
-  if parameter1 == parameter2:
-    return True
-  return parameter1.name == parameter2.name and \
-     parameter1.ordinal == parameter2.ordinal and \
-     parameter1.default == parameter2.default and \
-     KindsAreEqual(parameter1.kind, parameter2.kind)
-
-
-def MethodsAreEqual(method1, method2):
-  if method1 == method2:
-    return True
-  if method1.name != method2.name or \
-      method1.ordinal != method2.ordinal or \
-      len(method1.parameters) != len(method2.parameters):
-    return False
-  for i in range(len(method1.parameters)):
-    if not ParametersAreEqual(method1.parameters[i], method2.parameters[i]):
-      return False
-  return True
-
-
-def InterfacesAreEqual(interface1, interface2):
-  if interface1 == interface2:
-    return True
-  if interface1.name != interface2.name or \
-      len(interface1.methods) != len(interface2.methods):
-    return False
-  for i in range(len(interface1.methods)):
-    if not MethodsAreEqual(interface1.methods[i], interface2.methods[i]):
-      return False
-  return True
-
-
-def ModulesAreEqual(module1, module2):
-  if module1 == module2:
-    return True
-  if module1.name != module2.name or \
-      module1.namespace != module2.namespace or \
-      len(module1.structs) != len(module2.structs) or \
-      len(module1.interfaces) != len(module2.interfaces):
-    return False
-  for i in range(len(module1.structs)):
-    if not KindsAreEqual(module1.structs[i], module2.structs[i]):
-      return False
-  for i in range(len(module1.interfaces)):
-    if not InterfacesAreEqual(module1.interfaces[i], module2.interfaces[i]):
-      return False
-  return True
-
-
-# Builds and returns a Module suitable for testing/
-def BuildTestModule():
-  module = mojom.Module('test', 'testspace')
-  struct = module.AddStruct('teststruct')
-  struct.AddField('testfield1', mojom.INT32)
-  struct.AddField('testfield2', mojom.Array(mojom.INT32), 42)
-
-  interface = module.AddInterface('Server')
-  method = interface.AddMethod('Foo', 42)
-  method.AddParameter('foo', mojom.INT32)
-  method.AddParameter('bar', mojom.Array(struct))
-
-  return module
-
-
-# Tests if |module| is as built by BuildTestModule(). Returns the number of
-# errors
-def TestTestModule(module):
-  errors = 0
-
-  errors += EXPECT_EQ('test', module.name)
-  errors += EXPECT_EQ('testspace', module.namespace)
-  errors += EXPECT_EQ(1, len(module.structs))
-  errors += EXPECT_EQ('teststruct', module.structs[0].name)
-  errors += EXPECT_EQ(2, len(module.structs[0].fields))
-  errors += EXPECT_EQ('testfield1', module.structs[0].fields[0].name)
-  errors += EXPECT_EQ(mojom.INT32, module.structs[0].fields[0].kind)
-  errors += EXPECT_EQ('testfield2', module.structs[0].fields[1].name)
-  errors += EXPECT_EQ(mojom.Array, module.structs[0].fields[1].kind.__class__)
-  errors += EXPECT_EQ(mojom.INT32, module.structs[0].fields[1].kind.kind)
-
-  errors += EXPECT_EQ(1, len(module.interfaces))
-  errors += EXPECT_EQ('Server', module.interfaces[0].name)
-  errors += EXPECT_EQ(1, len(module.interfaces[0].methods))
-  errors += EXPECT_EQ('Foo', module.interfaces[0].methods[0].name)
-  errors += EXPECT_EQ(2, len(module.interfaces[0].methods[0].parameters))
-  errors += EXPECT_EQ('foo', module.interfaces[0].methods[0].parameters[0].name)
-  errors += EXPECT_EQ(mojom.INT32,
-                      module.interfaces[0].methods[0].parameters[0].kind)
-  errors += EXPECT_EQ('bar', module.interfaces[0].methods[0].parameters[1].name)
-  errors += EXPECT_EQ(
-    mojom.Array,
-    module.interfaces[0].methods[0].parameters[1].kind.__class__)
-  errors += EXPECT_EQ(
-    module.structs[0],
-    module.interfaces[0].methods[0].parameters[1].kind.kind)
-  return errors
-
-
-def PrintFailure(string):
-  stack = traceback.extract_stack()
-  frame = stack[len(stack)-3]
-  sys.stderr.write("ERROR at %s:%d, %s\n" % (frame[0], frame[1], string))
-  print "Traceback:"
-  for line in traceback.format_list(stack[:len(stack)-2]):
-    sys.stderr.write(line)
-
-
-def EXPECT_EQ(a, b):
-  if a != b:
-    PrintFailure("%s != %s" % (a, b))
-    return 1
-  return 0
-
-
-def EXPECT_TRUE(a):
-  if not a:
-    PrintFailure('Expecting True')
-    return 1
-  return 0
-
-
-def RunTest(fn):
-  sys.stdout.write('Running %s...' % fn.__name__)
-  success = True;
-  try:
-    errors = fn()
-  except:
-    traceback.print_exc(sys.stderr)
-    errors = 1
-  if errors == 0:
-    sys.stdout.write('OK\n')
-  elif errors == 1:
-    sys.stdout.write('1 ERROR\n')
-  else:
-    sys.stdout.write('%d ERRORS\n' % errors)
-  return errors
diff --git a/mojo/public/tools/bindings/pylib/generate/mojom_tests.py b/mojo/public/tools/bindings/pylib/generate/mojom_tests.py
deleted file mode 100644
index 58ef5fd..0000000
--- a/mojo/public/tools/bindings/pylib/generate/mojom_tests.py
+++ /dev/null
@@ -1,33 +0,0 @@
-# Copyright 2013 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 mojom_test
-import sys
-
-EXPECT_EQ = mojom_test.EXPECT_EQ
-EXPECT_TRUE = mojom_test.EXPECT_TRUE
-RunTest = mojom_test.RunTest
-ModulesAreEqual = mojom_test.ModulesAreEqual
-BuildTestModule = mojom_test.BuildTestModule
-TestTestModule = mojom_test.TestTestModule
-
-
-def BuildAndTestModule():
-  return TestTestModule(BuildTestModule())
-
-
-def TestModulesEqual():
-  return EXPECT_TRUE(ModulesAreEqual(BuildTestModule(), BuildTestModule()))
-
-
-def Main(args):
-  errors = 0
-  errors += RunTest(BuildAndTestModule)
-  errors += RunTest(TestModulesEqual)
-
-  return errors
-
-
-if __name__ == '__main__':
-  sys.exit(Main(sys.argv[1:]))
diff --git a/mojo/public/tools/bindings/pylib/generate/run_mojom_tests.py b/mojo/public/tools/bindings/pylib/generate/run_mojom_tests.py
deleted file mode 100755
index e57ef47..0000000
--- a/mojo/public/tools/bindings/pylib/generate/run_mojom_tests.py
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2013 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.
-
-""" Test runner for Mojom """
-
-import subprocess
-import sys
-
-def TestMojom(testname, args):
-  print '\nRunning unit tests for %s.' % testname
-  try:
-    args = [sys.executable, testname] + args
-    subprocess.check_call(args, stdout=sys.stdout)
-    print 'Succeeded'
-    return 0
-  except subprocess.CalledProcessError as err:
-    print 'Failed with %s.' % str(err)
-    return 1
-
-
-def main(args):
-  errors = 0
-  errors += TestMojom('mojom_tests.py', ['--test'])
-  errors += TestMojom('mojom_data_tests.py', ['--test'])
-  errors += TestMojom('mojom_pack_tests.py', ['--test'])
-
-  if errors:
-    print '\nFailed tests.'
-  return min(errors, 127)  # Make sure the return value doesn't "wrap".
-
-
-if __name__ == '__main__':
-  sys.exit(main(sys.argv[1:]))
diff --git a/mojo/public/tools/bindings/pylib/generate/template_expander.py b/mojo/public/tools/bindings/pylib/generate/template_expander.py
deleted file mode 100644
index 1b3ee74..0000000
--- a/mojo/public/tools/bindings/pylib/generate/template_expander.py
+++ /dev/null
@@ -1,42 +0,0 @@
-# Copyright 2013 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.
-
-# Based on:
-# http://src.chromium.org/viewvc/blink/trunk/Source/build/scripts/template_expander.py
-
-import inspect
-import os
-import sys
-
-_current_dir = os.path.dirname(os.path.realpath(__file__))
-# jinja2 is in the third_party directory (current directory is
-# mojo/public/tools/bindings/pylib/generate).
-# Insert at front to override system libraries, and after path[0] == script dir
-sys.path.insert(1, os.path.join(_current_dir, os.pardir, os.pardir, os.pardir,
-                                os.pardir, os.pardir, os.pardir, 'third_party'))
-import jinja2
-
-
-def ApplyTemplate(base_dir, path_to_template, params, filters=None):
-  template_directory, template_name = os.path.split(path_to_template)
-  path_to_templates = os.path.join(base_dir, template_directory)
-  loader = jinja2.FileSystemLoader([path_to_templates])
-  jinja_env = jinja2.Environment(loader=loader, keep_trailing_newline=True)
-  if filters:
-    jinja_env.filters.update(filters)
-  template = jinja_env.get_template(template_name)
-  return template.render(params)
-
-
-def UseJinja(path_to_template, filters=None):
-  # Get the directory of our caller's file.
-  base_dir = os.path.dirname(inspect.getfile(sys._getframe(1)))
-  def RealDecorator(generator):
-    def GeneratorInternal(*args, **kwargs):
-      parameters = generator(*args, **kwargs)
-      return ApplyTemplate(base_dir, path_to_template, parameters,
-                           filters=filters)
-    GeneratorInternal.func_name = generator.func_name
-    return GeneratorInternal
-  return RealDecorator
diff --git a/mojo/public/tools/bindings/pylib/parse/__init__.py b/mojo/public/tools/bindings/pylib/mojom/__init__.py
similarity index 100%
copy from mojo/public/tools/bindings/pylib/parse/__init__.py
copy to mojo/public/tools/bindings/pylib/mojom/__init__.py
diff --git a/mojo/public/tools/bindings/pylib/generate/__init__.py b/mojo/public/tools/bindings/pylib/mojom/generate/__init__.py
similarity index 100%
rename from mojo/public/tools/bindings/pylib/generate/__init__.py
rename to mojo/public/tools/bindings/pylib/mojom/generate/__init__.py
diff --git a/mojo/public/tools/bindings/pylib/mojom/generate/data.py b/mojo/public/tools/bindings/pylib/mojom/generate/data.py
new file mode 100644
index 0000000..ffbffde
--- /dev/null
+++ b/mojo/public/tools/bindings/pylib/mojom/generate/data.py
@@ -0,0 +1,324 @@
+# Copyright 2013 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.
+
+# TODO(vtl): "data" is a pretty vague name. Rename it?
+
+import copy
+
+import module as mojom
+
+# This module provides a mechanism to turn mojom Modules to dictionaries and
+# back again. This can be used to persist a mojom Module created progromatically
+# or to read a dictionary from code or a file.
+# Example:
+# test_dict = {
+#   'name': 'test',
+#   'namespace': 'testspace',
+#   'structs': [{
+#     'name': 'teststruct',
+#     'fields': [
+#       {'name': 'testfield1', 'kind': 'i32'},
+#       {'name': 'testfield2', 'kind': 'a:i32', 'ordinal': 42}]}],
+#   'interfaces': [{
+#     'name': 'Server',
+#     'methods': [{
+#       'name': 'Foo',
+#       'parameters': [{
+#         'name': 'foo', 'kind': 'i32'},
+#         {'name': 'bar', 'kind': 'a:x:teststruct'}],
+#     'ordinal': 42}]}]
+# }
+# test_module = data.ModuleFromData(test_dict)
+
+# Used to create a subclass of str that supports sorting by index, to make
+# pretty printing maintain the order.
+def istr(index, string):
+  class IndexedString(str):
+    def __lt__(self, other):
+      return self.__index__ < other.__index__
+
+  istr = IndexedString(string)
+  istr.__index__ = index
+  return istr
+
+def LookupKind(kinds, spec, scope):
+  """Tries to find which Kind a spec refers to, given the scope in which its
+  referenced. Starts checking from the narrowest scope to most general. For
+  example, given a struct field like
+    Foo.Bar x;
+  Foo.Bar could refer to the type 'Bar' in the 'Foo' namespace, or an inner
+  type 'Bar' in the struct 'Foo' in the current namespace.
+
+  |scope| is a tuple that looks like (namespace, struct/interface), referring
+  to the location where the type is referenced."""
+  if spec.startswith('x:'):
+    name = spec[2:]
+    for i in xrange(len(scope), -1, -1):
+      test_spec = 'x:'
+      if i > 0:
+        test_spec += '.'.join(scope[:i]) + '.'
+      test_spec += name
+      kind = kinds.get(test_spec)
+      if kind:
+        return kind
+
+  return kinds.get(spec)
+
+def LookupConstant(constants, name, scope):
+  """Like LookupKind, but for constants."""
+  for i in xrange(len(scope), -1, -1):
+    if i > 0:
+      test_spec = '.'.join(scope[:i]) + '.'
+    test_spec += name
+    constant = constants.get(test_spec)
+    if constant:
+      return constant
+
+  return constants.get(name)
+
+def KindToData(kind):
+  return kind.spec
+
+def KindFromData(kinds, data, scope):
+  kind = LookupKind(kinds, data, scope)
+  if kind:
+    return kind
+  if data.startswith('a:'):
+    kind = mojom.Array()
+    kind.kind = KindFromData(kinds, data[2:], scope)
+  else:
+    kind = mojom.Kind()
+  kind.spec = data
+  kinds[data] = kind
+  return kind
+
+def KindFromImport(original_kind, imported_from):
+  """Used with 'import module' - clones the kind imported from the
+  given module's namespace. Only used with Structs and Enums."""
+  kind = copy.deepcopy(original_kind)
+  kind.imported_from = imported_from
+  return kind
+
+def ImportFromData(module, data):
+  import_module = data['module']
+
+  import_item = {}
+  import_item['module_name'] = import_module.name
+  import_item['namespace'] = import_module.namespace
+  import_item['module'] = import_module
+
+  # Copy the struct kinds from our imports into the current module.
+  for kind in import_module.kinds.itervalues():
+    if (isinstance(kind, (mojom.Struct, mojom.Enum)) and
+        kind.imported_from is None):
+      kind = KindFromImport(kind, import_item)
+      module.kinds[kind.spec] = kind
+  # Ditto for constants.
+  for constant in import_module.constants.itervalues():
+    if constant.imported_from is None:
+      constant = copy.deepcopy(constant)
+      constant.imported_from = import_item
+      module.constants[constant.GetSpec()] = constant
+
+  return import_item
+
+def StructToData(struct):
+  return {
+    istr(0, 'name'): struct.name,
+    istr(1, 'fields'): map(FieldToData, struct.fields)
+  }
+
+def StructFromData(module, data):
+  struct = mojom.Struct()
+  struct.name = data['name']
+  struct.spec = 'x:' + module.namespace + '.' + struct.name
+  module.kinds[struct.spec] = struct
+  struct.enums = map(lambda enum:
+      EnumFromData(module, enum, struct), data['enums'])
+  # Stash fields data here temporarily.
+  struct.fields_data = data['fields']
+  return struct
+
+def FieldToData(field):
+  data = {
+    istr(0, 'name'): field.name,
+    istr(1, 'kind'): KindToData(field.kind)
+  }
+  if field.ordinal != None:
+    data[istr(2, 'ordinal')] = field.ordinal
+  if field.default != None:
+    data[istr(3, 'default')] = field.default
+  return data
+
+def FixupExpression(module, value, scope):
+  if isinstance(value, (tuple, list)):
+    for i in xrange(len(value)):
+      if isinstance(value, tuple):
+        FixupExpression(module, value[i], scope)
+      else:
+        value[i] = FixupExpression(module, value[i], scope)
+  elif value:
+    constant = LookupConstant(module.constants, value, scope)
+    if constant:
+      return constant
+  return value
+
+def FieldFromData(module, data, struct):
+  field = mojom.Field()
+  field.name = data['name']
+  field.kind = KindFromData(
+      module.kinds, data['kind'], (module.namespace, struct.name))
+  field.ordinal = data.get('ordinal')
+  field.default = FixupExpression(
+      module, data.get('default'), (module.namespace, struct.name))
+  return field
+
+def ParameterToData(parameter):
+  data = {
+    istr(0, 'name'): parameter.name,
+    istr(1, 'kind'): parameter.kind.spec
+  }
+  if parameter.ordinal != None:
+    data[istr(2, 'ordinal')] = parameter.ordinal
+  if parameter.default != None:
+    data[istr(3, 'default')] = parameter.default
+  return data
+
+def ParameterFromData(module, data, interface):
+  parameter = mojom.Parameter()
+  parameter.name = data['name']
+  parameter.kind = KindFromData(
+      module.kinds, data['kind'], (module.namespace, interface.name))
+  parameter.ordinal = data.get('ordinal')
+  parameter.default = data.get('default')
+  return parameter
+
+def MethodToData(method):
+  data = {
+    istr(0, 'name'):       method.name,
+    istr(1, 'parameters'): map(ParameterToData, method.parameters)
+  }
+  if method.ordinal != None:
+    data[istr(2, 'ordinal')] = method.ordinal
+  if method.response_parameters != None:
+    data[istr(3, 'response_parameters')] = map(
+        ParameterToData, method.response_parameters)
+  return data
+
+def MethodFromData(module, data, interface):
+  method = mojom.Method()
+  method.name = data['name']
+  method.ordinal = data.get('ordinal')
+  method.default = data.get('default')
+  method.parameters = map(lambda parameter:
+      ParameterFromData(module, parameter, interface), data['parameters'])
+  if data.has_key('response_parameters'):
+    method.response_parameters = map(
+        lambda parameter: ParameterFromData(module, parameter, interface),
+                          data['response_parameters'])
+  return method
+
+def InterfaceToData(interface):
+  return {
+    istr(0, 'name'):    interface.name,
+    istr(1, 'peer'):    interface.peer,
+    istr(2, 'methods'): map(MethodToData, interface.methods)
+  }
+
+def InterfaceFromData(module, data):
+  interface = mojom.Interface()
+  interface.name = data['name']
+  interface.spec = 'x:' + module.namespace + '.' + interface.name
+  interface.peer = data['peer'] if data.has_key('peer') else None
+  module.kinds[interface.spec] = interface
+  interface.enums = map(lambda enum:
+      EnumFromData(module, enum, interface), data['enums'])
+  # Stash methods data here temporarily.
+  interface.methods_data = data['methods']
+  return interface
+
+def EnumFieldFromData(module, enum, data, parent_kind):
+  field = mojom.EnumField()
+  field.name = data['name']
+  if parent_kind:
+    field.value = FixupExpression(
+        module, data['value'], (module.namespace, parent_kind.name))
+  else:
+    field.value = FixupExpression(
+        module, data['value'], (module.namespace, ))
+  constant = mojom.Constant(module, enum, field)
+  module.constants[constant.GetSpec()] = constant
+  return field
+
+def EnumFromData(module, data, parent_kind):
+  enum = mojom.Enum()
+  enum.name = data['name']
+  name = enum.name
+  if parent_kind:
+    name = parent_kind.name + '.' + name
+  enum.spec = 'x:%s.%s' % (module.namespace, name)
+  enum.parent_kind = parent_kind
+
+  enum.fields = map(
+      lambda field: EnumFieldFromData(module, enum, field, parent_kind),
+      data['fields'])
+  module.kinds[enum.spec] = enum
+  return enum
+
+def ModuleToData(module):
+  return {
+    istr(0, 'name'):       module.name,
+    istr(1, 'namespace'):  module.namespace,
+    istr(2, 'structs'):    map(StructToData, module.structs),
+    istr(3, 'interfaces'): map(InterfaceToData, module.interfaces)
+  }
+
+def ModuleFromData(data):
+  module = mojom.Module()
+  module.kinds = {}
+  for kind in mojom.PRIMITIVES:
+    module.kinds[kind.spec] = kind
+
+  module.constants = {}
+
+  module.name = data['name']
+  module.namespace = data['namespace']
+  # Imports must come first, because they add to module.kinds which is used
+  # by by the others.
+  module.imports = map(
+      lambda import_data: ImportFromData(module, import_data),
+      data['imports'])
+
+  # First pass collects kinds.
+  module.enums = map(
+      lambda enum: EnumFromData(module, enum, None), data['enums'])
+  module.structs = map(
+      lambda struct: StructFromData(module, struct), data['structs'])
+  module.interfaces = map(
+      lambda interface: InterfaceFromData(module, interface),
+      data['interfaces'])
+
+  # Second pass expands fields and methods. This allows fields and parameters
+  # to refer to kinds defined anywhere in the mojom.
+  for struct in module.structs:
+    struct.fields = map(lambda field:
+        FieldFromData(module, field, struct), struct.fields_data)
+    del struct.fields_data
+  for interface in module.interfaces:
+    interface.methods = map(lambda method:
+        MethodFromData(module, method, interface), interface.methods_data)
+    del interface.methods_data
+
+  return module
+
+def OrderedModuleFromData(data):
+  module = ModuleFromData(data)
+  next_interface_ordinal = 0
+  for interface in module.interfaces:
+    next_ordinal = 0
+    for method in interface.methods:
+      if method.ordinal is None:
+        method.ordinal = next_ordinal
+      next_ordinal = method.ordinal + 1
+  return module
diff --git a/mojo/public/tools/bindings/pylib/mojom/generate/data_tests.py b/mojo/public/tools/bindings/pylib/mojom/generate/data_tests.py
new file mode 100644
index 0000000..bca7ed8
--- /dev/null
+++ b/mojo/public/tools/bindings/pylib/mojom/generate/data_tests.py
@@ -0,0 +1,86 @@
+# Copyright 2013 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 sys
+
+import data
+import test_support
+
+EXPECT_EQ = test_support.EXPECT_EQ
+EXPECT_TRUE = test_support.EXPECT_TRUE
+RunTest = test_support.RunTest
+
+
+def DeepEquals(d1, d2):
+  if d1 == d2:
+    return True
+  if d2.__class__ != d2.__class__:
+    return False
+  if isinstance(d1, dict):
+    if set(d1.keys()) != set(d2.keys()):
+      return False
+    for key in d1.keys():
+      if not DeepEquals(d1[key], d2[key]):
+        return False
+    return True
+  if isinstance(d1, (list, tuple)):
+    if len(d1) != len(d2):
+      return False
+    for i in range(len(d1)):
+      if not DeepEquals(d1[i], d2[i]):
+        return False
+    return True
+  return False
+
+
+test_dict = {
+  'name': 'test',
+  'namespace': 'testspace',
+  'structs': [{
+    'name': 'teststruct',
+    'fields': [
+      {'name': 'testfield1', 'kind': 'i32'},
+      {'name': 'testfield2', 'kind': 'a:i32', 'ordinal': 42}]}],
+  'interfaces': [{
+    'name': 'Server',
+    'peer': None,
+    'methods': [{
+      'name': 'Foo',
+      'parameters': [
+        {'name': 'foo', 'kind': 'i32'},
+        {'name': 'bar', 'kind': 'a:x:teststruct'}],
+    'ordinal': 42}]}]
+}
+
+
+def TestRead():
+  module = data.ModuleFromData(test_dict)
+  return test_support.TestTestModule(module)
+
+
+def TestWrite():
+  module = test_support.BuildTestModule()
+  d = data.ModuleToData(module)
+  return EXPECT_TRUE(DeepEquals(test_dict, d))
+
+
+def TestWriteRead():
+  module1 = test_support.BuildTestModule()
+
+  dict1 = data.ModuleToData(module1)
+  module2 = data.ModuleFromData(dict1)
+  return EXPECT_TRUE(test_support.ModulesAreEqual(module1, module2))
+
+
+def Main(args):
+  errors = 0
+  errors += RunTest(TestWriteRead)
+  errors += RunTest(TestRead)
+  errors += RunTest(TestWrite)
+
+  return errors
+
+
+if __name__ == '__main__':
+  sys.exit(Main(sys.argv[1:]))
diff --git a/mojo/public/tools/bindings/pylib/mojom/generate/generator.py b/mojo/public/tools/bindings/pylib/mojom/generate/generator.py
new file mode 100644
index 0000000..1984204
--- /dev/null
+++ b/mojo/public/tools/bindings/pylib/mojom/generate/generator.py
@@ -0,0 +1,100 @@
+# Copyright 2013 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.
+
+"""Code shared by the various language-specific code generators."""
+
+from functools import partial
+import os
+import re
+
+import module as mojom
+import pack
+
+def GetStructFromMethod(interface, method):
+  """Converts a method's parameters into the fields of a struct."""
+  params_class = "%s_%s_Params" % (interface.name, method.name)
+  struct = mojom.Struct(params_class)
+  for param in method.parameters:
+    struct.AddField(param.name, param.kind, param.ordinal)
+  struct.packed = pack.PackedStruct(struct)
+  return struct
+
+def GetResponseStructFromMethod(interface, method):
+  """Converts a method's response_parameters into the fields of a struct."""
+  params_class = "%s_%s_ResponseParams" % (interface.name, method.name)
+  struct = mojom.Struct(params_class)
+  for param in method.response_parameters:
+    struct.AddField(param.name, param.kind, param.ordinal)
+  struct.packed = pack.PackedStruct(struct)
+  return struct
+
+def GetStructInfo(exported, struct):
+  struct.packed = pack.PackedStruct(struct)
+  struct.bytes = pack.GetByteLayout(struct.packed)
+  struct.exported = exported
+  return struct
+
+def IsStringKind(kind):
+  return kind.spec == 's'
+
+def IsEnumKind(kind):
+  return isinstance(kind, mojom.Enum)
+
+def IsObjectKind(kind):
+  return isinstance(kind, (mojom.Struct, mojom.Array)) or IsStringKind(kind)
+
+def IsHandleKind(kind):
+  return kind.spec.startswith('h') or isinstance(kind, mojom.Interface)
+
+def StudlyCapsToCamel(studly):
+  return studly[0].lower() + studly[1:]
+
+def VerifyTokenType(token, expected):
+  """Used to check that arrays and objects are used correctly as default
+  values. Arrays are tokens that look like ('ARRAY', element0, element1...).
+  See mojom_parser.py for their representation.
+  """
+  if not isinstance(token, tuple):
+    raise Exception("Expected token type '%s'. Invalid token '%s'." %
+        (expected, token))
+  if token[0] != expected:
+    raise Exception("Expected token type '%s'. Got '%s'." %
+        (expected, token[0]))
+
+def ExpressionMapper(expression, mapper):
+  if isinstance(expression, tuple) and expression[0] == 'EXPRESSION':
+    result = []
+    for each in expression[1]:
+      result.extend(ExpressionMapper(each, mapper))
+    return result
+  return [mapper(expression)]
+
+class Generator(object):
+  # Pass |output_dir| to emit files to disk. Omit |output_dir| to echo all
+  # files to stdout.
+  def __init__(self, module, output_dir=None):
+    self.module = module
+    self.output_dir = output_dir
+
+  def GetStructsFromMethods(self):
+    result = []
+    for interface in self.module.interfaces:
+      for method in interface.methods:
+        result.append(GetStructFromMethod(interface, method))
+        if method.response_parameters != None:
+          result.append(GetResponseStructFromMethod(interface, method))
+    return map(partial(GetStructInfo, False), result)
+
+  def GetStructs(self):
+    return map(partial(GetStructInfo, True), self.module.structs)
+
+  def Write(self, contents, filename):
+    if self.output_dir is None:
+      print contents
+      return
+    with open(os.path.join(self.output_dir, filename), "w+") as f:
+      f.write(contents)
+
+  def GenerateFiles(self):
+    raise NotImplementedError("Subclasses must override/implement this method")
diff --git a/mojo/public/tools/bindings/pylib/mojom/generate/module.py b/mojo/public/tools/bindings/pylib/mojom/generate/module.py
new file mode 100644
index 0000000..d24d36f
--- /dev/null
+++ b/mojo/public/tools/bindings/pylib/mojom/generate/module.py
@@ -0,0 +1,189 @@
+# Copyright 2013 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.
+
+# This module's classes provide an interface to mojo modules. Modules are
+# collections of interfaces and structs to be used by mojo ipc clients and
+# servers.
+#
+# A simple interface would be created this way:
+# module = mojom.generate.module.Module('Foo')
+# interface = module.AddInterface('Bar')
+# method = interface.AddMethod('Tat', 0)
+# method.AddParameter('baz', 0, mojom.INT32)
+#
+
+class Kind(object):
+  def __init__(self, spec = None):
+    self.spec = spec
+    self.parent_kind = None
+
+# Initialize the set of primitive types. These can be accessed by clients.
+BOOL         = Kind('b')
+INT8         = Kind('i8')
+INT16        = Kind('i16')
+INT32        = Kind('i32')
+INT64        = Kind('i64')
+UINT8        = Kind('u8')
+UINT16       = Kind('u16')
+UINT32       = Kind('u32')
+UINT64       = Kind('u64')
+FLOAT        = Kind('f')
+DOUBLE       = Kind('d')
+STRING       = Kind('s')
+HANDLE       = Kind('h')
+DCPIPE       = Kind('h:d:c')
+DPPIPE       = Kind('h:d:p')
+MSGPIPE      = Kind('h:m')
+SHAREDBUFFER = Kind('h:s')
+
+
+# Collection of all Primitive types
+PRIMITIVES = (
+  BOOL,
+  INT8,
+  INT16,
+  INT32,
+  INT64,
+  UINT8,
+  UINT16,
+  UINT32,
+  UINT64,
+  FLOAT,
+  DOUBLE,
+  STRING,
+  HANDLE,
+  DCPIPE,
+  DPPIPE,
+  MSGPIPE,
+  SHAREDBUFFER
+)
+
+
+class Constant(object):
+  def __init__(self, module, enum, field):
+    self.namespace = module.namespace
+    self.parent_kind = enum.parent_kind
+    self.name = [enum.name, field.name]
+    self.imported_from = None
+
+  def GetSpec(self):
+    return (self.namespace + '.' +
+        (self.parent_kind and (self.parent_kind.name + '.') or "") + \
+        self.name[1])
+
+
+class Field(object):
+  def __init__(self, name = None, kind = None, ordinal = None, default = None):
+    self.name = name
+    self.kind = kind
+    self.ordinal = ordinal
+    self.default = default
+
+
+class Struct(Kind):
+  def __init__(self, name = None):
+    self.name = name
+    self.imported_from = None
+    if name != None:
+      spec = 'x:' + name
+    else:
+      spec = None
+    Kind.__init__(self, spec)
+    self.fields = []
+
+  def AddField(self, name, kind, ordinal = None, default = None):
+    field = Field(name, kind, ordinal, default)
+    self.fields.append(field)
+    return field
+
+
+class Array(Kind):
+  def __init__(self, kind = None):
+    self.kind = kind
+    if kind != None:
+      Kind.__init__(self, 'a:' + kind.spec)
+    else:
+      Kind.__init__(self)
+
+
+class Parameter(object):
+  def __init__(self, name = None, kind = None, ordinal = None, default = None):
+    self.name = name
+    self.ordinal = ordinal
+    self.kind = kind
+    self.default = default
+
+
+class Method(object):
+  def __init__(self, name = None, ordinal = None):
+    self.name = name
+    self.ordinal = ordinal
+    self.parameters = []
+    self.response_parameters = None
+
+  def AddParameter(self, name, kind, ordinal = None, default = None):
+    parameter = Parameter(name, kind, ordinal, default)
+    self.parameters.append(parameter)
+    return parameter
+
+  def AddResponseParameter(self, name, kind, ordinal = None, default = None):
+    if self.response_parameters == None:
+      self.response_parameters = []
+    parameter = Parameter(name, kind, ordinal, default)
+    self.response_parameters.append(parameter)
+    return parameter
+
+
+class Interface(Kind):
+  def __init__(self, name = None, peer = None):
+    self.name = name
+    if name != None:
+      spec = 'x:' + name
+    else:
+      spec = None
+    Kind.__init__(self, spec)
+    self.peer = peer
+    self.methods = []
+
+  def AddMethod(self, name, ordinal = None):
+    method = Method(name, ordinal)
+    self.methods.append(method)
+    return method;
+
+
+class EnumField(object):
+  def __init__(self, name = None, value = None):
+    self.name = name
+    self.value = value
+
+
+class Enum(Kind):
+  def __init__(self, name = None):
+    self.name = name
+    self.imported_from = None
+    if name != None:
+      spec = 'x:' + name
+    else:
+      spec = None
+    Kind.__init__(self, spec)
+    self.fields = []
+
+
+class Module(object):
+  def __init__(self, name = None, namespace = None):
+    self.name = name
+    self.path = name
+    self.namespace = namespace
+    self.structs = []
+    self.interfaces = []
+
+  def AddInterface(self, name):
+    interface = Interface(name);
+    self.interfaces.append(interface)
+    return interface;
+
+  def AddStruct(self, name):
+    struct = Struct(name)
+    self.structs.append(struct)
+    return struct;
diff --git a/mojo/public/tools/bindings/pylib/mojom/generate/module_tests.py b/mojo/public/tools/bindings/pylib/mojom/generate/module_tests.py
new file mode 100644
index 0000000..a887686
--- /dev/null
+++ b/mojo/public/tools/bindings/pylib/mojom/generate/module_tests.py
@@ -0,0 +1,34 @@
+# Copyright 2013 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 sys
+
+import test_support
+
+EXPECT_EQ = test_support.EXPECT_EQ
+EXPECT_TRUE = test_support.EXPECT_TRUE
+RunTest = test_support.RunTest
+ModulesAreEqual = test_support.ModulesAreEqual
+BuildTestModule = test_support.BuildTestModule
+TestTestModule = test_support.TestTestModule
+
+
+def BuildAndTestModule():
+  return TestTestModule(BuildTestModule())
+
+
+def TestModulesEqual():
+  return EXPECT_TRUE(ModulesAreEqual(BuildTestModule(), BuildTestModule()))
+
+
+def Main(args):
+  errors = 0
+  errors += RunTest(BuildAndTestModule)
+  errors += RunTest(TestModulesEqual)
+
+  return errors
+
+
+if __name__ == '__main__':
+  sys.exit(Main(sys.argv[1:]))
diff --git a/mojo/public/tools/bindings/pylib/mojom/generate/pack.py b/mojo/public/tools/bindings/pylib/mojom/generate/pack.py
new file mode 100644
index 0000000..84378d7
--- /dev/null
+++ b/mojo/public/tools/bindings/pylib/mojom/generate/pack.py
@@ -0,0 +1,149 @@
+# Copyright 2013 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 module as mojom
+
+# This module provides a mechanism for determining the packed order and offsets
+# of a mojom.Struct.
+#
+# ps = pack.PackedStruct(struct)
+# ps.packed_fields will access a list of PackedField objects, each of which
+# will have an offset, a size and a bit (for mojom.BOOLs).
+
+class PackedField(object):
+  kind_to_size = {
+    mojom.BOOL:         1,
+    mojom.INT8:         1,
+    mojom.UINT8:        1,
+    mojom.INT16:        2,
+    mojom.UINT16:       2,
+    mojom.INT32:        4,
+    mojom.UINT32:       4,
+    mojom.FLOAT:        4,
+    mojom.HANDLE:       4,
+    mojom.MSGPIPE:      4,
+    mojom.SHAREDBUFFER: 4,
+    mojom.DCPIPE:       4,
+    mojom.DPPIPE:       4,
+    mojom.INT64:        8,
+    mojom.UINT64:       8,
+    mojom.DOUBLE:       8,
+    mojom.STRING:       8
+  }
+
+  @classmethod
+  def GetSizeForKind(cls, kind):
+    if isinstance(kind, mojom.Array) or isinstance(kind, mojom.Struct):
+      return 8
+    if isinstance(kind, mojom.Interface):
+      kind = mojom.MSGPIPE
+    if isinstance(kind, mojom.Enum):
+      # TODO(mpcomplete): what about big enums?
+      return cls.kind_to_size[mojom.INT32]
+    if not kind in cls.kind_to_size:
+      raise Exception("Invalid kind: %s" % kind.spec)
+    return cls.kind_to_size[kind]
+
+  def __init__(self, field, ordinal):
+    self.field = field
+    self.ordinal = ordinal
+    self.size = self.GetSizeForKind(field.kind)
+    self.offset = None
+    self.bit = None
+
+
+# Returns the pad necessary to reserve space for alignment of |size|.
+def GetPad(offset, size):
+  return (size - (offset % size)) % size
+
+
+# Returns a 2-tuple of the field offset and bit (for BOOLs)
+def GetFieldOffset(field, last_field):
+  if field.field.kind == mojom.BOOL and \
+      last_field.field.kind == mojom.BOOL and \
+      last_field.bit < 7:
+    return (last_field.offset, last_field.bit + 1)
+
+  offset = last_field.offset + last_field.size
+  pad = GetPad(offset, field.size)
+  return (offset + pad, 0)
+
+
+class PackedStruct(object):
+  def __init__(self, struct):
+    self.struct = struct
+    self.packed_fields = []
+
+    # No fields.
+    if (len(struct.fields) == 0):
+      return
+
+    # Start by sorting by ordinal.
+    src_fields = []
+    ordinal = 1
+    for field in struct.fields:
+      if field.ordinal is not None:
+        ordinal = field.ordinal
+      src_fields.append(PackedField(field, ordinal))
+      ordinal += 1
+    src_fields.sort(key=lambda field: field.ordinal)
+
+    src_field = src_fields[0]
+    src_field.offset = 0
+    src_field.bit = 0
+    # dst_fields will contain each of the fields, in increasing offset order.
+    dst_fields = self.packed_fields
+    dst_fields.append(src_field)
+
+    # Then find first slot that each field will fit.
+    for src_field in src_fields[1:]:
+      last_field = dst_fields[0]
+      for i in xrange(1, len(dst_fields)):
+        next_field = dst_fields[i]
+        offset, bit = GetFieldOffset(src_field, last_field)
+        if offset + src_field.size <= next_field.offset:
+          # Found hole.
+          src_field.offset = offset
+          src_field.bit = bit
+          dst_fields.insert(i, src_field)
+          break
+        last_field = next_field
+      if src_field.offset is None:
+        # Add to end
+        src_field.offset, src_field.bit = GetFieldOffset(src_field, last_field)
+        dst_fields.append(src_field)
+
+  def GetTotalSize(self):
+    if not self.packed_fields:
+      return 0;
+    last_field = self.packed_fields[-1]
+    offset = last_field.offset + last_field.size
+    pad = GetPad(offset, 8)
+    return offset + pad;
+
+
+class ByteInfo(object):
+  def __init__(self):
+    self.is_padding = False
+    self.packed_fields = []
+
+
+def GetByteLayout(packed_struct):
+  bytes = [ByteInfo() for i in xrange(packed_struct.GetTotalSize())]
+
+  limit_of_previous_field = 0
+  for packed_field in packed_struct.packed_fields:
+    for i in xrange(limit_of_previous_field, packed_field.offset):
+      bytes[i].is_padding = True
+    bytes[packed_field.offset].packed_fields.append(packed_field)
+    limit_of_previous_field = packed_field.offset + packed_field.size
+
+  for i in xrange(limit_of_previous_field, len(bytes)):
+    bytes[i].is_padding = True
+
+  for byte in bytes:
+    # A given byte cannot both be padding and have a fields packed into it.
+    assert not (byte.is_padding and byte.packed_fields)
+
+  return bytes
diff --git a/mojo/public/tools/bindings/pylib/mojom/generate/pack_tests.py b/mojo/public/tools/bindings/pylib/mojom/generate/pack_tests.py
new file mode 100644
index 0000000..4e61004
--- /dev/null
+++ b/mojo/public/tools/bindings/pylib/mojom/generate/pack_tests.py
@@ -0,0 +1,176 @@
+# Copyright 2013 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 sys
+
+import module as mojom
+import pack
+import test_support
+
+
+EXPECT_EQ = test_support.EXPECT_EQ
+EXPECT_TRUE = test_support.EXPECT_TRUE
+RunTest = test_support.RunTest
+
+
+def TestOrdinalOrder():
+  errors = 0
+  struct = mojom.Struct('test')
+  struct.AddField('testfield1', mojom.INT32, 2)
+  struct.AddField('testfield2', mojom.INT32, 1)
+  ps = pack.PackedStruct(struct)
+
+  errors += EXPECT_EQ(2, len(ps.packed_fields))
+  errors += EXPECT_EQ('testfield2', ps.packed_fields[0].field.name)
+  errors += EXPECT_EQ('testfield1', ps.packed_fields[1].field.name)
+
+  return errors
+
+def TestZeroFields():
+  errors = 0
+  struct = mojom.Struct('test')
+  ps = pack.PackedStruct(struct)
+  errors += EXPECT_EQ(0, len(ps.packed_fields))
+  return errors
+
+
+def TestOneField():
+  errors = 0
+  struct = mojom.Struct('test')
+  struct.AddField('testfield1', mojom.INT8)
+  ps = pack.PackedStruct(struct)
+  errors += EXPECT_EQ(1, len(ps.packed_fields))
+  return errors
+
+# Pass three tuples.
+# |kinds| is a sequence of mojom.Kinds that specify the fields that are to
+# be created.
+# |fields| is the expected order of the resulting fields, with the integer
+# "1" first.
+# |offsets| is the expected order of offsets, with the integer "0" first.
+def TestSequence(kinds, fields, offsets):
+  errors = 0
+  struct = mojom.Struct('test')
+  index = 1
+  for kind in kinds:
+    struct.AddField("%d" % index, kind)
+    index += 1
+  ps = pack.PackedStruct(struct)
+  num_fields = len(ps.packed_fields)
+  errors += EXPECT_EQ(len(kinds), num_fields)
+  for i in xrange(num_fields):
+    EXPECT_EQ("%d" % fields[i], ps.packed_fields[i].field.name)
+    EXPECT_EQ(offsets[i], ps.packed_fields[i].offset)
+
+  return errors
+
+
+def TestPaddingPackedInOrder():
+  return TestSequence(
+      (mojom.INT8, mojom.UINT8, mojom.INT32),
+      (1, 2, 3),
+      (0, 1, 4))
+
+
+def TestPaddingPackedOutOfOrder():
+  return TestSequence(
+      (mojom.INT8, mojom.INT32, mojom.UINT8),
+      (1, 3, 2),
+      (0, 1, 4))
+
+
+def TestPaddingPackedOverflow():
+  kinds = (mojom.INT8, mojom.INT32, mojom.INT16, mojom.INT8, mojom.INT8)
+  # 2 bytes should be packed together first, followed by short, then by int.
+  fields = (1, 4, 3, 2, 5)
+  offsets = (0, 1, 2, 4, 8)
+  return TestSequence(kinds, fields, offsets)
+
+
+def TestAllTypes():
+  struct = mojom.Struct('test')
+  array = mojom.Array()
+  return TestSequence(
+      (mojom.BOOL, mojom.INT8, mojom.STRING, mojom.UINT8,
+       mojom.INT16, mojom.DOUBLE, mojom.UINT16,
+       mojom.INT32, mojom.UINT32, mojom.INT64,
+       mojom.FLOAT, mojom.STRING, mojom.HANDLE,
+       mojom.UINT64, mojom.Struct('test'), mojom.Array()),
+      (1, 2, 4, 5, 7, 3, 6,  8,  9,  10, 11, 13, 12, 14, 15, 16, 17),
+      (0, 1, 2, 4, 6, 8, 16, 24, 28, 32, 40, 44, 48, 56, 64, 72, 80))
+
+
+def TestPaddingPackedOutOfOrderByOrdinal():
+  errors = 0
+  struct = mojom.Struct('test')
+  struct.AddField('testfield1', mojom.INT8)
+  struct.AddField('testfield3', mojom.UINT8, 3)
+  struct.AddField('testfield2', mojom.INT32, 2)
+  ps = pack.PackedStruct(struct)
+  errors += EXPECT_EQ(3, len(ps.packed_fields))
+
+  # Second byte should be packed in behind first, altering order.
+  errors += EXPECT_EQ('testfield1', ps.packed_fields[0].field.name)
+  errors += EXPECT_EQ('testfield3', ps.packed_fields[1].field.name)
+  errors += EXPECT_EQ('testfield2', ps.packed_fields[2].field.name)
+
+  # Second byte should be packed with first.
+  errors += EXPECT_EQ(0, ps.packed_fields[0].offset)
+  errors += EXPECT_EQ(1, ps.packed_fields[1].offset)
+  errors += EXPECT_EQ(4, ps.packed_fields[2].offset)
+
+  return errors
+
+
+def TestBools():
+  errors = 0
+  struct = mojom.Struct('test')
+  struct.AddField('bit0', mojom.BOOL)
+  struct.AddField('bit1', mojom.BOOL)
+  struct.AddField('int', mojom.INT32)
+  struct.AddField('bit2', mojom.BOOL)
+  struct.AddField('bit3', mojom.BOOL)
+  struct.AddField('bit4', mojom.BOOL)
+  struct.AddField('bit5', mojom.BOOL)
+  struct.AddField('bit6', mojom.BOOL)
+  struct.AddField('bit7', mojom.BOOL)
+  struct.AddField('bit8', mojom.BOOL)
+  ps = pack.PackedStruct(struct)
+  errors += EXPECT_EQ(10, len(ps.packed_fields))
+
+  # First 8 bits packed together.
+  for i in xrange(8):
+    pf = ps.packed_fields[i]
+    errors += EXPECT_EQ(0, pf.offset)
+    errors += EXPECT_EQ("bit%d" % i, pf.field.name)
+    errors += EXPECT_EQ(i, pf.bit)
+
+  # Ninth bit goes into second byte.
+  errors += EXPECT_EQ("bit8", ps.packed_fields[8].field.name)
+  errors += EXPECT_EQ(1, ps.packed_fields[8].offset)
+  errors += EXPECT_EQ(0, ps.packed_fields[8].bit)
+
+  # int comes last.
+  errors += EXPECT_EQ("int", ps.packed_fields[9].field.name)
+  errors += EXPECT_EQ(4, ps.packed_fields[9].offset)
+
+  return errors
+
+
+def Main(args):
+  errors = 0
+  errors += RunTest(TestZeroFields)
+  errors += RunTest(TestOneField)
+  errors += RunTest(TestPaddingPackedInOrder)
+  errors += RunTest(TestPaddingPackedOutOfOrder)
+  errors += RunTest(TestPaddingPackedOverflow)
+  errors += RunTest(TestAllTypes)
+  errors += RunTest(TestPaddingPackedOutOfOrderByOrdinal)
+  errors += RunTest(TestBools)
+
+  return errors
+
+
+if __name__ == '__main__':
+  sys.exit(Main(sys.argv[1:]))
diff --git a/mojo/public/tools/bindings/pylib/mojom/generate/run_tests.py b/mojo/public/tools/bindings/pylib/mojom/generate/run_tests.py
new file mode 100755
index 0000000..41f11a2
--- /dev/null
+++ b/mojo/public/tools/bindings/pylib/mojom/generate/run_tests.py
@@ -0,0 +1,35 @@
+#!/usr/bin/env python
+# Copyright 2013 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.
+
+""" Test runner for Mojom """
+
+import subprocess
+import sys
+
+def TestMojom(testname, args):
+  print '\nRunning unit tests for %s.' % testname
+  try:
+    args = [sys.executable, testname] + args
+    subprocess.check_call(args, stdout=sys.stdout)
+    print 'Succeeded'
+    return 0
+  except subprocess.CalledProcessError as err:
+    print 'Failed with %s.' % str(err)
+    return 1
+
+
+def main(args):
+  errors = 0
+  errors += TestMojom('data_tests.py', ['--test'])
+  errors += TestMojom('module_tests.py', ['--test'])
+  errors += TestMojom('pack_tests.py', ['--test'])
+
+  if errors:
+    print '\nFailed tests.'
+  return min(errors, 127)  # Make sure the return value doesn't "wrap".
+
+
+if __name__ == '__main__':
+  sys.exit(main(sys.argv[1:]))
diff --git a/mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py b/mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py
new file mode 100644
index 0000000..00c388e
--- /dev/null
+++ b/mojo/public/tools/bindings/pylib/mojom/generate/template_expander.py
@@ -0,0 +1,46 @@
+# Copyright 2013 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.
+
+# Based on:
+# http://src.chromium.org/viewvc/blink/trunk/Source/build/scripts/template_expander.py
+
+import inspect
+import os
+import sys
+
+# jinja2 is in the third_party directory.
+# Insert at front to override system libraries, and after path[0] == script dir.
+path = os.path.abspath(__file__)
+while True:
+  path, tail = os.path.split(path)
+  assert tail
+  if tail == "mojo":
+    break
+sys.path.insert(1, os.path.join(path, "third_party"))
+del path, tail
+import jinja2
+
+
+def ApplyTemplate(base_dir, path_to_template, params, filters=None):
+  template_directory, template_name = os.path.split(path_to_template)
+  path_to_templates = os.path.join(base_dir, template_directory)
+  loader = jinja2.FileSystemLoader([path_to_templates])
+  jinja_env = jinja2.Environment(loader=loader, keep_trailing_newline=True)
+  if filters:
+    jinja_env.filters.update(filters)
+  template = jinja_env.get_template(template_name)
+  return template.render(params)
+
+
+def UseJinja(path_to_template, filters=None):
+  # Get the directory of our caller's file.
+  base_dir = os.path.dirname(inspect.getfile(sys._getframe(1)))
+  def RealDecorator(generator):
+    def GeneratorInternal(*args, **kwargs):
+      parameters = generator(*args, **kwargs)
+      return ApplyTemplate(base_dir, path_to_template, parameters,
+                           filters=filters)
+    GeneratorInternal.func_name = generator.func_name
+    return GeneratorInternal
+  return RealDecorator
diff --git a/mojo/public/tools/bindings/pylib/mojom/generate/test_support.py b/mojo/public/tools/bindings/pylib/mojom/generate/test_support.py
new file mode 100644
index 0000000..93c8739
--- /dev/null
+++ b/mojo/public/tools/bindings/pylib/mojom/generate/test_support.py
@@ -0,0 +1,194 @@
+# Copyright 2013 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 sys
+import traceback
+
+import module as mojom
+
+# Support for writing mojom test cases.
+# RunTest(fn) will execute fn, catching any exceptions. fn should return
+# the number of errors that are encountered.
+#
+# EXPECT_EQ(a, b) and EXPECT_TRUE(b) will print error information if the
+# expectations are not true and return a non zero value. This allows test cases
+# to be written like this
+#
+# def Foo():
+#   errors = 0
+#   errors += EXPECT_EQ('test', test())
+#   ...
+#   return errors
+#
+# RunTest(foo)
+
+def FieldsAreEqual(field1, field2):
+  if field1 == field2:
+    return True
+  return field1.name == field2.name and \
+      KindsAreEqual(field1.kind, field2.kind) and \
+      field1.ordinal == field2.ordinal and \
+      field1.default == field2.default
+
+
+def KindsAreEqual(kind1, kind2):
+  if kind1 == kind2:
+    return True
+  if kind1.__class__ != kind2.__class__ or kind1.spec != kind2.spec:
+    return False
+  if kind1.__class__ == mojom.Kind:
+    return kind1.spec == kind2.spec
+  if kind1.__class__ == mojom.Struct:
+    if kind1.name != kind2.name or \
+        kind1.spec != kind2.spec or \
+        len(kind1.fields) != len(kind2.fields):
+      return False
+    for i in range(len(kind1.fields)):
+      if not FieldsAreEqual(kind1.fields[i], kind2.fields[i]):
+        return False
+    return True
+  if kind1.__class__ == mojom.Array:
+    return KindsAreEqual(kind1.kind, kind2.kind)
+  print 'Unknown Kind class: ', kind1.__class__.__name__
+  return False
+
+
+def ParametersAreEqual(parameter1, parameter2):
+  if parameter1 == parameter2:
+    return True
+  return parameter1.name == parameter2.name and \
+     parameter1.ordinal == parameter2.ordinal and \
+     parameter1.default == parameter2.default and \
+     KindsAreEqual(parameter1.kind, parameter2.kind)
+
+
+def MethodsAreEqual(method1, method2):
+  if method1 == method2:
+    return True
+  if method1.name != method2.name or \
+      method1.ordinal != method2.ordinal or \
+      len(method1.parameters) != len(method2.parameters):
+    return False
+  for i in range(len(method1.parameters)):
+    if not ParametersAreEqual(method1.parameters[i], method2.parameters[i]):
+      return False
+  return True
+
+
+def InterfacesAreEqual(interface1, interface2):
+  if interface1 == interface2:
+    return True
+  if interface1.name != interface2.name or \
+      len(interface1.methods) != len(interface2.methods):
+    return False
+  for i in range(len(interface1.methods)):
+    if not MethodsAreEqual(interface1.methods[i], interface2.methods[i]):
+      return False
+  return True
+
+
+def ModulesAreEqual(module1, module2):
+  if module1 == module2:
+    return True
+  if module1.name != module2.name or \
+      module1.namespace != module2.namespace or \
+      len(module1.structs) != len(module2.structs) or \
+      len(module1.interfaces) != len(module2.interfaces):
+    return False
+  for i in range(len(module1.structs)):
+    if not KindsAreEqual(module1.structs[i], module2.structs[i]):
+      return False
+  for i in range(len(module1.interfaces)):
+    if not InterfacesAreEqual(module1.interfaces[i], module2.interfaces[i]):
+      return False
+  return True
+
+
+# Builds and returns a Module suitable for testing/
+def BuildTestModule():
+  module = mojom.Module('test', 'testspace')
+  struct = module.AddStruct('teststruct')
+  struct.AddField('testfield1', mojom.INT32)
+  struct.AddField('testfield2', mojom.Array(mojom.INT32), 42)
+
+  interface = module.AddInterface('Server')
+  method = interface.AddMethod('Foo', 42)
+  method.AddParameter('foo', mojom.INT32)
+  method.AddParameter('bar', mojom.Array(struct))
+
+  return module
+
+
+# Tests if |module| is as built by BuildTestModule(). Returns the number of
+# errors
+def TestTestModule(module):
+  errors = 0
+
+  errors += EXPECT_EQ('test', module.name)
+  errors += EXPECT_EQ('testspace', module.namespace)
+  errors += EXPECT_EQ(1, len(module.structs))
+  errors += EXPECT_EQ('teststruct', module.structs[0].name)
+  errors += EXPECT_EQ(2, len(module.structs[0].fields))
+  errors += EXPECT_EQ('testfield1', module.structs[0].fields[0].name)
+  errors += EXPECT_EQ(mojom.INT32, module.structs[0].fields[0].kind)
+  errors += EXPECT_EQ('testfield2', module.structs[0].fields[1].name)
+  errors += EXPECT_EQ(mojom.Array, module.structs[0].fields[1].kind.__class__)
+  errors += EXPECT_EQ(mojom.INT32, module.structs[0].fields[1].kind.kind)
+
+  errors += EXPECT_EQ(1, len(module.interfaces))
+  errors += EXPECT_EQ('Server', module.interfaces[0].name)
+  errors += EXPECT_EQ(1, len(module.interfaces[0].methods))
+  errors += EXPECT_EQ('Foo', module.interfaces[0].methods[0].name)
+  errors += EXPECT_EQ(2, len(module.interfaces[0].methods[0].parameters))
+  errors += EXPECT_EQ('foo', module.interfaces[0].methods[0].parameters[0].name)
+  errors += EXPECT_EQ(mojom.INT32,
+                      module.interfaces[0].methods[0].parameters[0].kind)
+  errors += EXPECT_EQ('bar', module.interfaces[0].methods[0].parameters[1].name)
+  errors += EXPECT_EQ(
+    mojom.Array,
+    module.interfaces[0].methods[0].parameters[1].kind.__class__)
+  errors += EXPECT_EQ(
+    module.structs[0],
+    module.interfaces[0].methods[0].parameters[1].kind.kind)
+  return errors
+
+
+def PrintFailure(string):
+  stack = traceback.extract_stack()
+  frame = stack[len(stack)-3]
+  sys.stderr.write("ERROR at %s:%d, %s\n" % (frame[0], frame[1], string))
+  print "Traceback:"
+  for line in traceback.format_list(stack[:len(stack)-2]):
+    sys.stderr.write(line)
+
+
+def EXPECT_EQ(a, b):
+  if a != b:
+    PrintFailure("%s != %s" % (a, b))
+    return 1
+  return 0
+
+
+def EXPECT_TRUE(a):
+  if not a:
+    PrintFailure('Expecting True')
+    return 1
+  return 0
+
+
+def RunTest(fn):
+  sys.stdout.write('Running %s...' % fn.__name__)
+  success = True;
+  try:
+    errors = fn()
+  except:
+    traceback.print_exc(sys.stderr)
+    errors = 1
+  if errors == 0:
+    sys.stdout.write('OK\n')
+  elif errors == 1:
+    sys.stdout.write('1 ERROR\n')
+  else:
+    sys.stdout.write('%d ERRORS\n' % errors)
+  return errors
diff --git a/mojo/public/tools/bindings/pylib/parse/__init__.py b/mojo/public/tools/bindings/pylib/mojom/parse/__init__.py
similarity index 100%
rename from mojo/public/tools/bindings/pylib/parse/__init__.py
rename to mojo/public/tools/bindings/pylib/mojom/parse/__init__.py
diff --git a/mojo/public/tools/bindings/pylib/mojom/parse/ast.py b/mojo/public/tools/bindings/pylib/mojom/parse/ast.py
new file mode 100644
index 0000000..bd398c1
--- /dev/null
+++ b/mojo/public/tools/bindings/pylib/mojom/parse/ast.py
@@ -0,0 +1,25 @@
+# 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.
+
+"""Node objects for the AST for a Mojo IDL file."""
+
+# Note: For convenience of testing, you probably want to define __eq__() methods
+# for all node types; it's okay to be slightly lax (e.g., not compare filename
+# and lineno).
+
+
+class BaseNode(object):
+  def __init__(self, filename=None, lineno=None):
+    self.filename = filename
+    self.lineno = lineno
+
+
+class Ordinal(BaseNode):
+  """Represents an ordinal value labeling, e.g., a struct field."""
+  def __init__(self, value, **kwargs):
+    BaseNode.__init__(self, **kwargs)
+    self.value = value
+
+  def __eq__(self, other):
+    return self.value == other.value
diff --git a/mojo/public/tools/bindings/pylib/mojom/parse/lexer.py b/mojo/public/tools/bindings/pylib/mojom/parse/lexer.py
new file mode 100644
index 0000000..10abedd
--- /dev/null
+++ b/mojo/public/tools/bindings/pylib/mojom/parse/lexer.py
@@ -0,0 +1,293 @@
+# 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 os.path
+import re
+import sys
+
+# Try to load the ply module, if not, then assume it is in the third_party
+# directory.
+try:
+  # Disable lint check which fails to find the ply module.
+  # pylint: disable=F0401
+  from ply.lex import TOKEN
+except ImportError:
+  # Work our way up to the directory containing mojo/ (usually src/). (Note:
+  # Some builds don't check out into a directory called src/.)
+  path = os.path.abspath(__file__)
+  while True:
+    path, tail = os.path.split(path)
+    assert tail
+    if tail == "mojo":
+      break
+  sys.path.append(os.path.join(path, "third_party"))
+  del path, tail
+  # pylint: disable=F0401
+  from ply.lex import TOKEN
+
+
+class LexError(Exception):
+  def __init__(self, filename, lineno, msg):
+    self.filename = filename
+    self.lineno = lineno
+    self.msg = msg
+
+  def __str__(self):
+    return "%s:%d: Error: %s" % (self.filename, self.lineno, self.msg)
+
+  def __repr__(self):
+    return str(self)
+
+
+class Lexer(object):
+
+  def __init__(self, filename):
+    self.filename = filename
+
+  ######################--   PRIVATE   --######################
+
+  ##
+  ## Internal auxiliary methods
+  ##
+  def _error(self, msg, token):
+    raise LexError(self.filename, token.lineno, msg)
+
+  ##
+  ## Reserved keywords
+  ##
+  keywords = (
+    'HANDLE',
+    'DATA_PIPE_CONSUMER',
+    'DATA_PIPE_PRODUCER',
+    'MESSAGE_PIPE',
+    'SHARED_BUFFER',
+
+    'IMPORT',
+    'MODULE',
+    'STRUCT',
+    'INTERFACE',
+    'ENUM',
+  )
+
+  keyword_map = {}
+  for keyword in keywords:
+    keyword_map[keyword.lower()] = keyword
+
+  ##
+  ## All the tokens recognized by the lexer
+  ##
+  tokens = keywords + (
+    # Identifiers
+    'NAME',
+
+    # Constants
+    'ORDINAL',
+    'INT_CONST_DEC', 'INT_CONST_OCT', 'INT_CONST_HEX',
+    'FLOAT_CONST',
+    'CHAR_CONST',
+
+    # String literals
+    'STRING_LITERAL',
+
+    # Operators
+    'PLUS', 'MINUS', 'TIMES', 'DIVIDE', 'MOD',
+    'OR', 'AND', 'NOT', 'XOR', 'LSHIFT', 'RSHIFT',
+
+    # Assignment
+    'EQUALS',
+
+    # Request / response
+    'RESPONSE',
+
+    # Delimiters
+    'LPAREN', 'RPAREN',         # ( )
+    'LBRACKET', 'RBRACKET',     # [ ]
+    'LBRACE', 'RBRACE',         # { }
+    'LANGLE', 'RANGLE',         # < >
+    'SEMI',                     # ;
+    'COMMA', 'DOT'              # , .
+  )
+
+  ##
+  ## Regexes for use in tokens
+  ##
+
+  # valid C identifiers (K&R2: A.2.3), plus '$' (supported by some compilers)
+  identifier = r'[a-zA-Z_$][0-9a-zA-Z_$]*'
+
+  hex_prefix = '0[xX]'
+  hex_digits = '[0-9a-fA-F]+'
+
+  # integer constants (K&R2: A.2.5.1)
+  integer_suffix_opt = \
+      r'(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?'
+  decimal_constant = \
+      '(0'+integer_suffix_opt+')|([1-9][0-9]*'+integer_suffix_opt+')'
+  octal_constant = '0[0-7]*'+integer_suffix_opt
+  hex_constant = hex_prefix+hex_digits+integer_suffix_opt
+
+  bad_octal_constant = '0[0-7]*[89]'
+
+  # character constants (K&R2: A.2.5.2)
+  # Note: a-zA-Z and '.-~^_!=&;,' are allowed as escape chars to support #line
+  # directives with Windows paths as filenames (..\..\dir\file)
+  # For the same reason, decimal_escape allows all digit sequences. We want to
+  # parse all correct code, even if it means to sometimes parse incorrect
+  # code.
+  #
+  simple_escape = r"""([a-zA-Z._~!=&\^\-\\?'"])"""
+  decimal_escape = r"""(\d+)"""
+  hex_escape = r"""(x[0-9a-fA-F]+)"""
+  bad_escape = r"""([\\][^a-zA-Z._~^!=&\^\-\\?'"x0-7])"""
+
+  escape_sequence = \
+      r"""(\\("""+simple_escape+'|'+decimal_escape+'|'+hex_escape+'))'
+  cconst_char = r"""([^'\\\n]|"""+escape_sequence+')'
+  char_const = "'"+cconst_char+"'"
+  unmatched_quote = "('"+cconst_char+"*\\n)|('"+cconst_char+"*$)"
+  bad_char_const = \
+      r"""('"""+cconst_char+"""[^'\n]+')|('')|('"""+ \
+      bad_escape+r"""[^'\n]*')"""
+
+  # string literals (K&R2: A.2.6)
+  string_char = r"""([^"\\\n]|"""+escape_sequence+')'
+  string_literal = '"'+string_char+'*"'
+  bad_string_literal = '"'+string_char+'*'+bad_escape+string_char+'*"'
+
+  # floating constants (K&R2: A.2.5.3)
+  exponent_part = r"""([eE][-+]?[0-9]+)"""
+  fractional_constant = r"""([0-9]*\.[0-9]+)|([0-9]+\.)"""
+  floating_constant = \
+      '(((('+fractional_constant+')'+ \
+      exponent_part+'?)|([0-9]+'+exponent_part+')))'
+
+  # Ordinals
+  ordinal = r'@[0-9]+'
+  missing_ordinal_value = r'@'
+  # Don't allow ordinal values in octal (even invalid octal, like 09) or
+  # hexadecimal.
+  octal_or_hex_ordinal_disallowed = r'@((0[0-9]+)|('+hex_prefix+hex_digits+'))'
+
+  ##
+  ## Rules for the normal state
+  ##
+  t_ignore = ' \t\r'
+
+  # Newlines
+  def t_NEWLINE(self, t):
+    r'\n+'
+    t.lexer.lineno += len(t.value)
+
+  # Operators
+  t_PLUS              = r'\+'
+  t_MINUS             = r'-'
+  t_TIMES             = r'\*'
+  t_DIVIDE            = r'/'
+  t_MOD               = r'%'
+  t_OR                = r'\|'
+  t_AND               = r'&'
+  t_NOT               = r'~'
+  t_XOR               = r'\^'
+  t_LSHIFT            = r'<<'
+  t_RSHIFT            = r'>>'
+
+  # =
+  t_EQUALS            = r'='
+
+  # =>
+  t_RESPONSE          = r'=>'
+
+  # Delimiters
+  t_LPAREN            = r'\('
+  t_RPAREN            = r'\)'
+  t_LBRACKET          = r'\['
+  t_RBRACKET          = r'\]'
+  t_LBRACE            = r'\{'
+  t_RBRACE            = r'\}'
+  t_LANGLE            = r'<'
+  t_RANGLE            = r'>'
+  t_COMMA             = r','
+  t_DOT               = r'\.'
+  t_SEMI              = r';'
+
+  t_STRING_LITERAL    = string_literal
+
+  # The following floating and integer constants are defined as
+  # functions to impose a strict order (otherwise, decimal
+  # is placed before the others because its regex is longer,
+  # and this is bad)
+  #
+  @TOKEN(floating_constant)
+  def t_FLOAT_CONST(self, t):
+    return t
+
+  @TOKEN(hex_constant)
+  def t_INT_CONST_HEX(self, t):
+    return t
+
+  @TOKEN(bad_octal_constant)
+  def t_BAD_CONST_OCT(self, t):
+    msg = "Invalid octal constant"
+    self._error(msg, t)
+
+  @TOKEN(octal_constant)
+  def t_INT_CONST_OCT(self, t):
+    return t
+
+  @TOKEN(decimal_constant)
+  def t_INT_CONST_DEC(self, t):
+    return t
+
+  # Must come before bad_char_const, to prevent it from
+  # catching valid char constants as invalid
+  #
+  @TOKEN(char_const)
+  def t_CHAR_CONST(self, t):
+    return t
+
+  @TOKEN(unmatched_quote)
+  def t_UNMATCHED_QUOTE(self, t):
+    msg = "Unmatched '"
+    self._error(msg, t)
+
+  @TOKEN(bad_char_const)
+  def t_BAD_CHAR_CONST(self, t):
+    msg = "Invalid char constant %s" % t.value
+    self._error(msg, t)
+
+  # unmatched string literals are caught by the preprocessor
+
+  @TOKEN(bad_string_literal)
+  def t_BAD_STRING_LITERAL(self, t):
+    msg = "String contains invalid escape code"
+    self._error(msg, t)
+
+  # Handle ordinal-related tokens in the right order:
+  @TOKEN(octal_or_hex_ordinal_disallowed)
+  def t_OCTAL_OR_HEX_ORDINAL_DISALLOWED(self, t):
+    msg = "Octal and hexadecimal ordinal values not allowed"
+    self._error(msg, t)
+
+  @TOKEN(ordinal)
+  def t_ORDINAL(self, t):
+    return t
+
+  @TOKEN(missing_ordinal_value)
+  def t_BAD_ORDINAL(self, t):
+    msg = "Missing ordinal value"
+    self._error(msg, t)
+
+  @TOKEN(identifier)
+  def t_NAME(self, t):
+    t.type = self.keyword_map.get(t.value, "NAME")
+    return t
+
+  # Ignore C and C++ style comments
+  def t_COMMENT(self, t):
+    r'(/\*(.|\n)*?\*/)|(//.*(\n[ \t]*//.*)*)'
+    pass
+
+  def t_error(self, t):
+    msg = 'Illegal character %s' % repr(t.value[0])
+    self._error(msg, t)
diff --git a/mojo/public/tools/bindings/pylib/mojom/parse/lexer_unittest.py b/mojo/public/tools/bindings/pylib/mojom/parse/lexer_unittest.py
new file mode 100644
index 0000000..a3b0222
--- /dev/null
+++ b/mojo/public/tools/bindings/pylib/mojom/parse/lexer_unittest.py
@@ -0,0 +1,168 @@
+# 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 os.path
+import sys
+import unittest
+
+# Try to load the ply module, if not, then assume it is in the third_party
+# directory.
+try:
+  # Disable lint check which fails to find the ply module.
+  # pylint: disable=F0401
+  from ply import lex
+except ImportError:
+  # Work our way up to the directory containing mojo/ (usually src/). (Note:
+  # Some builds don't check out into a directory called src/.)
+  path = os.path.abspath(__file__)
+  while True:
+    path, tail = os.path.split(path)
+    assert tail
+    if tail == "mojo":
+      break
+  sys.path.append(os.path.join(path, "third_party"))
+  del path, tail
+  # pylint: disable=F0401
+  from ply import lex
+
+import lexer
+
+
+# This (monkey-patching LexToken to make comparison value-based) is evil, but
+# we'll do it anyway. (I'm pretty sure ply's lexer never cares about comparing
+# for object identity.)
+def _LexTokenEq(self, other):
+  return self.type == other.type and self.value == other.value and \
+         self.lineno == other.lineno and self.lexpos == other.lexpos
+setattr(lex.LexToken, '__eq__', _LexTokenEq)
+
+
+def _MakeLexToken(type, value, lineno=1, lexpos=0):
+  """Makes a LexToken with the given parameters. (Note that lineno is 1-based,
+  but lexpos is 0-based.)"""
+  rv = lex.LexToken()
+  rv.type, rv.value, rv.lineno, rv.lexpos = type, value, lineno, lexpos
+  return rv
+
+
+def _MakeLexTokenForKeyword(keyword, **kwargs):
+  """Makes a LexToken for the given keyword."""
+  return _MakeLexToken(keyword.upper(), keyword.lower(), **kwargs)
+
+
+class LexerTest(unittest.TestCase):
+  """Tests |lexer.Lexer|."""
+
+  def __init__(self, *args, **kwargs):
+    unittest.TestCase.__init__(self, *args, **kwargs)
+    # Clone all lexer instances from this one, since making a lexer is slow.
+    self._zygote_lexer = lex.lex(lexer.Lexer("my_file.mojom"))
+
+  def testValidSingleKeywords(self):
+    """Tests valid, single keywords."""
+    self.assertEquals(self._SingleTokenForInput("handle"),
+                      _MakeLexTokenForKeyword("handle"))
+    self.assertEquals(self._SingleTokenForInput("data_pipe_consumer"),
+                      _MakeLexTokenForKeyword("data_pipe_consumer"))
+    self.assertEquals(self._SingleTokenForInput("data_pipe_producer"),
+                      _MakeLexTokenForKeyword("data_pipe_producer"))
+    self.assertEquals(self._SingleTokenForInput("message_pipe"),
+                      _MakeLexTokenForKeyword("message_pipe"))
+    self.assertEquals(self._SingleTokenForInput("import"),
+                      _MakeLexTokenForKeyword("import"))
+    self.assertEquals(self._SingleTokenForInput("module"),
+                      _MakeLexTokenForKeyword("module"))
+    self.assertEquals(self._SingleTokenForInput("struct"),
+                      _MakeLexTokenForKeyword("struct"))
+    self.assertEquals(self._SingleTokenForInput("interface"),
+                      _MakeLexTokenForKeyword("interface"))
+    self.assertEquals(self._SingleTokenForInput("enum"),
+                      _MakeLexTokenForKeyword("enum"))
+
+  def testValidSingleTokens(self):
+    """Tests valid, single (non-keyword) tokens."""
+    self.assertEquals(self._SingleTokenForInput("asdf"),
+                      _MakeLexToken("NAME", "asdf"))
+    self.assertEquals(self._SingleTokenForInput("@123"),
+                      _MakeLexToken("ORDINAL", "@123"))
+    self.assertEquals(self._SingleTokenForInput("456"),
+                      _MakeLexToken("INT_CONST_DEC", "456"))
+    self.assertEquals(self._SingleTokenForInput("0765"),
+                      _MakeLexToken("INT_CONST_OCT", "0765"))
+    self.assertEquals(self._SingleTokenForInput("0x01aB2eF3"),
+                      _MakeLexToken("INT_CONST_HEX", "0x01aB2eF3"))
+    self.assertEquals(self._SingleTokenForInput("123.456"),
+                      _MakeLexToken("FLOAT_CONST", "123.456"))
+    self.assertEquals(self._SingleTokenForInput("'x'"),
+                      _MakeLexToken("CHAR_CONST", "'x'"))
+    self.assertEquals(self._SingleTokenForInput("\"hello\""),
+                      _MakeLexToken("STRING_LITERAL", "\"hello\""))
+    self.assertEquals(self._SingleTokenForInput("+"),
+                      _MakeLexToken("PLUS", "+"))
+    self.assertEquals(self._SingleTokenForInput("-"),
+                      _MakeLexToken("MINUS", "-"))
+    self.assertEquals(self._SingleTokenForInput("*"),
+                      _MakeLexToken("TIMES", "*"))
+    self.assertEquals(self._SingleTokenForInput("/"),
+                      _MakeLexToken("DIVIDE", "/"))
+    self.assertEquals(self._SingleTokenForInput("%"),
+                      _MakeLexToken("MOD", "%"))
+    self.assertEquals(self._SingleTokenForInput("|"),
+                      _MakeLexToken("OR", "|"))
+    self.assertEquals(self._SingleTokenForInput("~"),
+                      _MakeLexToken("NOT", "~"))
+    self.assertEquals(self._SingleTokenForInput("^"),
+                      _MakeLexToken("XOR", "^"))
+    self.assertEquals(self._SingleTokenForInput("<<"),
+                      _MakeLexToken("LSHIFT", "<<"))
+    self.assertEquals(self._SingleTokenForInput(">>"),
+                      _MakeLexToken("RSHIFT", ">>"))
+    self.assertEquals(self._SingleTokenForInput("="),
+                      _MakeLexToken("EQUALS", "="))
+    self.assertEquals(self._SingleTokenForInput("=>"),
+                      _MakeLexToken("RESPONSE", "=>"))
+    self.assertEquals(self._SingleTokenForInput("("),
+                      _MakeLexToken("LPAREN", "("))
+    self.assertEquals(self._SingleTokenForInput(")"),
+                      _MakeLexToken("RPAREN", ")"))
+    self.assertEquals(self._SingleTokenForInput("["),
+                      _MakeLexToken("LBRACKET", "["))
+    self.assertEquals(self._SingleTokenForInput("]"),
+                      _MakeLexToken("RBRACKET", "]"))
+    self.assertEquals(self._SingleTokenForInput("{"),
+                      _MakeLexToken("LBRACE", "{"))
+    self.assertEquals(self._SingleTokenForInput("}"),
+                      _MakeLexToken("RBRACE", "}"))
+    self.assertEquals(self._SingleTokenForInput("<"),
+                      _MakeLexToken("LANGLE", "<"))
+    self.assertEquals(self._SingleTokenForInput(">"),
+                      _MakeLexToken("RANGLE", ">"))
+    self.assertEquals(self._SingleTokenForInput(";"),
+                      _MakeLexToken("SEMI", ";"))
+    self.assertEquals(self._SingleTokenForInput(","),
+                      _MakeLexToken("COMMA", ","))
+    self.assertEquals(self._SingleTokenForInput("."),
+                      _MakeLexToken("DOT", "."))
+
+  def _TokensForInput(self, input):
+    """Gets a list of tokens for the given input string."""
+    lexer = self._zygote_lexer.clone()
+    lexer.input(input)
+    rv = []
+    while True:
+      tok = lexer.token()
+      if not tok:
+        return rv
+      rv.append(tok)
+
+  def _SingleTokenForInput(self, input):
+    """Gets the single token for the given input string. (Raises an exception if
+    the input string does not result in exactly one token.)"""
+    toks = self._TokensForInput(input)
+    assert len(toks) == 1
+    return toks[0]
+
+
+if __name__ == "__main__":
+  unittest.main()
diff --git a/mojo/public/tools/bindings/pylib/mojom/parse/parser.py b/mojo/public/tools/bindings/pylib/mojom/parse/parser.py
new file mode 100755
index 0000000..33af7d9
--- /dev/null
+++ b/mojo/public/tools/bindings/pylib/mojom/parse/parser.py
@@ -0,0 +1,391 @@
+#!/usr/bin/env python
+# 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.
+
+"""Generates a syntax tree from a Mojo IDL file."""
+
+
+import os.path
+import sys
+
+# Try to load the ply module, if not, then assume it is in the third_party
+# directory.
+try:
+  # Disable lint check which fails to find the ply module.
+  # pylint: disable=F0401
+  from ply import lex
+  from ply import yacc
+except ImportError:
+  # Work our way up to the directory containing mojo/ (usually src/). (Note:
+  # Some builds don't check out into a directory called src/.)
+  path = os.path.abspath(__file__)
+  while True:
+    path, tail = os.path.split(path)
+    assert tail
+    if tail == "mojo":
+      break
+  sys.path.append(os.path.join(path, "third_party"))
+  del path, tail
+  # pylint: disable=F0401
+  from ply import lex
+  from ply import yacc
+
+import ast
+from lexer import Lexer
+
+
+_MAX_ORDINAL_VALUE = 0xffffffff
+
+
+def _ListFromConcat(*items):
+  """Generate list by concatenating inputs (note: only concatenates lists, not
+  tuples or other iterables)."""
+  itemsout = []
+  for item in items:
+    if item is None:
+      continue
+    if type(item) is not type([]):
+      itemsout.append(item)
+    else:
+      itemsout.extend(item)
+  return itemsout
+
+
+class ParseError(Exception):
+
+  def __init__(self, filename, message, lineno=None, snippet=None):
+    self.filename = filename
+    self.message = message
+    self.lineno = lineno
+    self.snippet = snippet
+
+  def __str__(self):
+    if self.lineno is None:
+      return "%s: Error: %s" % (self.filename, self.message)
+
+    s = "%s:%d: Error: %s" % (self.filename, self.lineno, self.message)
+    return s if self.snippet is None else s + "\n" + self.snippet
+
+  def __repr__(self):
+    return str(self)
+
+
+class Parser(object):
+
+  def __init__(self, lexer, source, filename):
+    self.tokens = lexer.tokens
+    self.source = source
+    self.filename = filename
+
+  def p_root(self, p):
+    """root : import root
+            | module
+            | definitions"""
+    if len(p) > 2:
+      p[0] = _ListFromConcat(p[1], p[2])
+    else:
+      # Generator expects a module. If one wasn't specified insert one with an
+      # empty name.
+      if p[1][0] != 'MODULE':
+        p[0] = [('MODULE', '', p[1])]
+      else:
+        p[0] = [p[1]]
+
+  def p_import(self, p):
+    """import : IMPORT STRING_LITERAL"""
+    # 'eval' the literal to strip the quotes.
+    p[0] = ('IMPORT', eval(p[2]))
+
+  def p_module(self, p):
+    """module : MODULE identifier LBRACE definitions RBRACE"""
+    p[0] = ('MODULE', p[2], p[4])
+
+  def p_definitions(self, p):
+    """definitions : definition definitions
+                   | """
+    if len(p) > 1:
+      p[0] = _ListFromConcat(p[1], p[2])
+
+  def p_definition(self, p):
+    """definition : struct
+                  | interface
+                  | enum"""
+    p[0] = p[1]
+
+  def p_attribute_section(self, p):
+    """attribute_section : LBRACKET attributes RBRACKET
+                         | """
+    if len(p) > 3:
+      p[0] = p[2]
+
+  def p_attributes(self, p):
+    """attributes : attribute
+                  | attribute COMMA attributes
+                  | """
+    if len(p) == 2:
+      p[0] = _ListFromConcat(p[1])
+    elif len(p) > 3:
+      p[0] = _ListFromConcat(p[1], p[3])
+
+  def p_attribute(self, p):
+    """attribute : NAME EQUALS expression
+                 | NAME EQUALS NAME"""
+    p[0] = ('ATTRIBUTE', p[1], p[3])
+
+  def p_struct(self, p):
+    """struct : attribute_section STRUCT NAME LBRACE struct_body RBRACE SEMI"""
+    p[0] = ('STRUCT', p[3], p[1], p[5])
+
+  def p_struct_body(self, p):
+    """struct_body : field struct_body
+                   | enum struct_body
+                   | """
+    if len(p) > 1:
+      p[0] = _ListFromConcat(p[1], p[2])
+
+  def p_field(self, p):
+    """field : typename NAME default ordinal SEMI"""
+    p[0] = ('FIELD', p[1], p[2], p[4], p[3])
+
+  def p_default(self, p):
+    """default : EQUALS expression
+               | EQUALS expression_object
+               | """
+    if len(p) > 2:
+      p[0] = p[2]
+
+  def p_interface(self, p):
+    """interface : attribute_section INTERFACE NAME LBRACE interface_body \
+                       RBRACE SEMI"""
+    p[0] = ('INTERFACE', p[3], p[1], p[5])
+
+  def p_interface_body(self, p):
+    """interface_body : method interface_body
+                      | enum interface_body
+                      | """
+    if len(p) > 1:
+      p[0] = _ListFromConcat(p[1], p[2])
+
+  def p_response(self, p):
+    """response : RESPONSE LPAREN parameters RPAREN
+                | """
+    if len(p) > 3:
+      p[0] = p[3]
+
+  def p_method(self, p):
+    """method : NAME ordinal LPAREN parameters RPAREN response SEMI"""
+    p[0] = ('METHOD', p[1], p[4], p[2], p[6])
+
+  def p_parameters(self, p):
+    """parameters : parameter
+                  | parameter COMMA parameters
+                  | """
+    if len(p) == 1:
+      p[0] = []
+    elif len(p) == 2:
+      p[0] = _ListFromConcat(p[1])
+    elif len(p) > 3:
+      p[0] = _ListFromConcat(p[1], p[3])
+
+  def p_parameter(self, p):
+    """parameter : typename NAME ordinal"""
+    p[0] = ('PARAM', p[1], p[2], p[3])
+
+  def p_typename(self, p):
+    """typename : basictypename
+                | array"""
+    p[0] = p[1]
+
+  def p_basictypename(self, p):
+    """basictypename : identifier
+                     | HANDLE
+                     | specializedhandle"""
+    p[0] = p[1]
+
+  def p_specializedhandle(self, p):
+    """specializedhandle : HANDLE LANGLE specializedhandlename RANGLE"""
+    p[0] = "handle<" + p[3] + ">"
+
+  def p_specializedhandlename(self, p):
+    """specializedhandlename : DATA_PIPE_CONSUMER
+                             | DATA_PIPE_PRODUCER
+                             | MESSAGE_PIPE
+                             | SHARED_BUFFER"""
+    p[0] = p[1]
+
+  def p_array(self, p):
+    """array : typename LBRACKET RBRACKET"""
+    p[0] = p[1] + "[]"
+
+  def p_ordinal(self, p):
+    """ordinal : ORDINAL
+               | """
+    if len(p) > 1:
+      value = int(p[1][1:])
+      if value > _MAX_ORDINAL_VALUE:
+        raise ParseError(self.filename, "Ordinal value %d too large:" % value,
+                         lineno=p.lineno(1),
+                         snippet=self._GetSnippet(p.lineno(1)))
+      p[0] = ast.Ordinal(value, filename=self.filename, lineno=p.lineno(1))
+    else:
+      p[0] = ast.Ordinal(None)
+
+  def p_enum(self, p):
+    """enum : ENUM NAME LBRACE enum_fields RBRACE SEMI"""
+    p[0] = ('ENUM', p[2], p[4])
+
+  def p_enum_fields(self, p):
+    """enum_fields : enum_field
+                   | enum_field COMMA enum_fields
+                   | """
+    if len(p) == 2:
+      p[0] = _ListFromConcat(p[1])
+    elif len(p) > 3:
+      p[0] = _ListFromConcat(p[1], p[3])
+
+  def p_enum_field(self, p):
+    """enum_field : NAME
+                  | NAME EQUALS expression"""
+    if len(p) == 2:
+      p[0] = ('ENUM_FIELD', p[1], None)
+    else:
+      p[0] = ('ENUM_FIELD', p[1], p[3])
+
+  ### Expressions ###
+
+  def p_expression_object(self, p):
+    """expression_object : expression_array
+                         | LBRACE expression_object_elements RBRACE """
+    if len(p) < 3:
+      p[0] = p[1]
+    else:
+      p[0] = ('OBJECT', p[2])
+
+  def p_expression_object_elements(self, p):
+    """expression_object_elements : expression_object
+                                  | expression_object COMMA expression_object_elements
+                                  | """
+    if len(p) == 2:
+      p[0] = _ListFromConcat(p[1])
+    elif len(p) > 3:
+      p[0] = _ListFromConcat(p[1], p[3])
+
+  def p_expression_array(self, p):
+    """expression_array : expression
+                        | LBRACKET expression_array_elements RBRACKET """
+    if len(p) < 3:
+      p[0] = p[1]
+    else:
+      p[0] = ('ARRAY', p[2])
+
+  def p_expression_array_elements(self, p):
+    """expression_array_elements : expression_object
+                                 | expression_object COMMA expression_array_elements
+                                 | """
+    if len(p) == 2:
+      p[0] = _ListFromConcat(p[1])
+    elif len(p) > 3:
+      p[0] = _ListFromConcat(p[1], p[3])
+
+  # TODO(vtl): This is now largely redundant.
+  def p_expression(self, p):
+    """expression : binary_expression"""
+    p[0] = ('EXPRESSION', p[1])
+
+  # PLY lets us specify precedence of operators, but since we don't actually
+  # evaluate them, we don't need that here.
+  # TODO(vtl): We're going to need to evaluate them.
+  def p_binary_expression(self, p):
+    """binary_expression : unary_expression
+                         | binary_expression binary_operator \
+                               binary_expression"""
+    p[0] = _ListFromConcat(*p[1:])
+
+  def p_binary_operator(self, p):
+    """binary_operator : TIMES
+                       | DIVIDE
+                       | MOD
+                       | PLUS
+                       | MINUS
+                       | RSHIFT
+                       | LSHIFT
+                       | AND
+                       | OR
+                       | XOR"""
+    p[0] = p[1]
+
+  def p_unary_expression(self, p):
+    """unary_expression : primary_expression
+                        | unary_operator expression"""
+    p[0] = _ListFromConcat(*p[1:])
+
+  def p_unary_operator(self, p):
+    """unary_operator : PLUS
+                      | MINUS
+                      | NOT"""
+    p[0] = p[1]
+
+  def p_primary_expression(self, p):
+    """primary_expression : constant
+                          | identifier
+                          | LPAREN expression RPAREN"""
+    p[0] = _ListFromConcat(*p[1:])
+
+  def p_identifier(self, p):
+    """identifier : NAME
+                  | NAME DOT identifier"""
+    p[0] = ''.join(p[1:])
+
+  def p_constant(self, p):
+    """constant : INT_CONST_DEC
+                | INT_CONST_OCT
+                | INT_CONST_HEX
+                | FLOAT_CONST
+                | CHAR_CONST
+                | STRING_LITERAL"""
+    p[0] = _ListFromConcat(*p[1:])
+
+  def p_error(self, e):
+    if e is None:
+      # Unexpected EOF.
+      # TODO(vtl): Can we figure out what's missing?
+      raise ParseError(self.filename, "Unexpected end of file")
+
+    raise ParseError(self.filename, "Unexpected %r:" % e.value, lineno=e.lineno,
+                     snippet=self._GetSnippet(e.lineno))
+
+  def _GetSnippet(self, lineno):
+    return self.source.split('\n')[lineno - 1]
+
+
+def Parse(source, filename):
+  lexer = Lexer(filename)
+  parser = Parser(lexer, source, filename)
+
+  lex.lex(object=lexer)
+  yacc.yacc(module=parser, debug=0, write_tables=0)
+
+  tree = yacc.parse(source)
+  return tree
+
+
+def main(argv):
+  if len(argv) < 2:
+    print "usage: %s filename" % argv[0]
+    return 0
+
+  for filename in argv[1:]:
+    with open(filename) as f:
+      print "%s:" % filename
+      try:
+        print Parse(f.read(), filename)
+      except ParseError, e:
+        print e
+        return 1
+
+  return 0
+
+
+if __name__ == '__main__':
+  sys.exit(main(sys.argv))
diff --git a/mojo/public/tools/bindings/pylib/mojom/parse/parser_unittest.py b/mojo/public/tools/bindings/pylib/mojom/parse/parser_unittest.py
new file mode 100644
index 0000000..fdce26c
--- /dev/null
+++ b/mojo/public/tools/bindings/pylib/mojom/parse/parser_unittest.py
@@ -0,0 +1,311 @@
+# 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 unittest
+
+import ast
+import lexer
+import parser
+
+
+class ParserTest(unittest.TestCase):
+  """Tests |parser.Parse()|."""
+
+  def testTrivialValidSource(self):
+    """Tests a trivial, but valid, .mojom source."""
+    source = """\
+// This is a comment.
+
+module my_module {
+}
+"""
+    self.assertEquals(parser.Parse(source, "my_file.mojom"),
+                      [("MODULE", "my_module", None)])
+
+  def testSourceWithCrLfs(self):
+    """Tests a .mojom source with CR-LFs instead of LFs."""
+    source = "// This is a comment.\r\n\r\nmodule my_module {\r\n}\r\n";
+    self.assertEquals(parser.Parse(source, "my_file.mojom"),
+                      [("MODULE", "my_module", None)])
+
+  def testUnexpectedEOF(self):
+    """Tests a "truncated" .mojom source."""
+    source = """\
+// This is a comment.
+
+module my_module {
+"""
+    with self.assertRaisesRegexp(
+        parser.ParseError,
+        r"^my_file\.mojom: Error: Unexpected end of file$"):
+      parser.Parse(source, "my_file.mojom")
+
+  def testSimpleStruct(self):
+    """Tests a simple .mojom source that just defines a struct."""
+    source = """\
+module my_module {
+
+struct MyStruct {
+  int32 a;
+  double b;
+};
+
+}  // module my_module
+"""
+    expected = \
+[('MODULE',
+  'my_module',
+  [('STRUCT',
+    'MyStruct',
+    None,
+    [('FIELD', 'int32', 'a', ast.Ordinal(None), None),
+     ('FIELD', 'double', 'b', ast.Ordinal(None), None)])])]
+    self.assertEquals(parser.Parse(source, "my_file.mojom"), expected)
+
+  def testSimpleStructWithoutModule(self):
+    """Tests a simple struct without an enclosing module."""
+    source = """\
+struct MyStruct {
+  int32 a;
+  double b;
+};
+"""
+    expected = \
+[('MODULE',
+  '',
+  [('STRUCT',
+    'MyStruct',
+    None,
+    [('FIELD', 'int32', 'a', ast.Ordinal(None), None),
+     ('FIELD', 'double', 'b', ast.Ordinal(None), None)])])]
+    self.assertEquals(parser.Parse(source, "my_file.mojom"), expected)
+
+  def testMissingModuleName(self):
+    """Tests an (invalid) .mojom with a missing module name."""
+    source1 = """\
+// Missing module name.
+module {
+struct MyStruct {
+  int32 a;
+};
+}
+"""
+    with self.assertRaisesRegexp(
+        parser.ParseError,
+        r"^my_file\.mojom:2: Error: Unexpected '{':\nmodule {$"):
+      parser.Parse(source1, "my_file.mojom")
+
+    # Another similar case, but make sure that line-number tracking/reporting
+    # is correct.
+    source2 = """\
+module
+// This line intentionally left unblank.
+
+{
+}
+"""
+    with self.assertRaisesRegexp(
+        parser.ParseError,
+        r"^my_file\.mojom:4: Error: Unexpected '{':\n{$"):
+      parser.Parse(source2, "my_file.mojom")
+
+  def testEnumExpressions(self):
+    """Tests an enum with values calculated using simple expressions."""
+    source = """\
+module my_module {
+
+enum MyEnum {
+  MY_ENUM_1 = 1,
+  MY_ENUM_2 = 1 + 1,
+  MY_ENUM_3 = 1 * 3,
+  MY_ENUM_4 = 2 * (1 + 1),
+  MY_ENUM_5 = 1 + 2 * 2,
+  MY_ENUM_6 = -6 / -2,
+  MY_ENUM_7 = 3 | (1 << 2),
+  MY_ENUM_8 = 16 >> 1,
+  MY_ENUM_9 = 1 ^ 15 & 8,
+  MY_ENUM_10 = 110 % 100,
+  MY_ENUM_MINUS_1 = ~0
+};
+
+}  // my_module
+"""
+    expected = \
+[('MODULE',
+  'my_module',
+  [('ENUM',
+    'MyEnum',
+    [('ENUM_FIELD', 'MY_ENUM_1', ('EXPRESSION', ['1'])),
+     ('ENUM_FIELD', 'MY_ENUM_2', ('EXPRESSION', ['1', '+', '1'])),
+     ('ENUM_FIELD', 'MY_ENUM_3', ('EXPRESSION', ['1', '*', '3'])),
+     ('ENUM_FIELD',
+      'MY_ENUM_4',
+      ('EXPRESSION',
+       ['2', '*', '(', ('EXPRESSION', ['1', '+', '1']), ')'])),
+     ('ENUM_FIELD',
+      'MY_ENUM_5',
+      ('EXPRESSION', ['1', '+', '2', '*', '2'])),
+     ('ENUM_FIELD',
+      'MY_ENUM_6',
+      ('EXPRESSION',
+       ['-', ('EXPRESSION', ['6', '/', '-', ('EXPRESSION', ['2'])])])),
+     ('ENUM_FIELD',
+      'MY_ENUM_7',
+      ('EXPRESSION',
+       ['3', '|', '(', ('EXPRESSION', ['1', '<<', '2']), ')'])),
+     ('ENUM_FIELD', 'MY_ENUM_8', ('EXPRESSION', ['16', '>>', '1'])),
+     ('ENUM_FIELD',
+      'MY_ENUM_9',
+      ('EXPRESSION', ['1', '^', '15', '&', '8'])),
+     ('ENUM_FIELD', 'MY_ENUM_10', ('EXPRESSION', ['110', '%', '100'])),
+     ('ENUM_FIELD',
+      'MY_ENUM_MINUS_1',
+      ('EXPRESSION', ['~', ('EXPRESSION', ['0'])]))])])]
+    self.assertEquals(parser.Parse(source, "my_file.mojom"), expected)
+
+  def testNoConditionals(self):
+    """Tests that ?: is not allowed."""
+    source = """\
+module my_module {
+
+enum MyEnum {
+  MY_ENUM_1 = 1 ? 2 : 3
+};
+
+}  // my_module
+"""
+    with self.assertRaisesRegexp(
+        lexer.LexError,
+        r"^my_file\.mojom:4: Error: Illegal character '\?'$"):
+      parser.Parse(source, "my_file.mojom")
+
+  def testSimpleOrdinals(self):
+    """Tests that (valid) ordinal values are scanned correctly."""
+    source = """\
+module my_module {
+
+// This isn't actually valid .mojom, but the problem (missing ordinals) should
+// be handled at a different level.
+struct MyStruct {
+  int32 a0 @0;
+  int32 a1 @1;
+  int32 a2 @2;
+  int32 a9 @9;
+  int32 a10 @10;
+  int32 a11 @11;
+  int32 a29 @29;
+  int32 a1234567890 @1234567890;
+};
+
+}  // module my_module
+"""
+    expected = \
+[('MODULE',
+  'my_module',
+  [('STRUCT',
+    'MyStruct',
+    None,
+    [('FIELD', 'int32', 'a0', ast.Ordinal(0), None),
+     ('FIELD', 'int32', 'a1', ast.Ordinal(1), None),
+     ('FIELD', 'int32', 'a2', ast.Ordinal(2), None),
+     ('FIELD', 'int32', 'a9', ast.Ordinal(9), None),
+     ('FIELD', 'int32', 'a10', ast.Ordinal(10), None),
+     ('FIELD', 'int32', 'a11', ast.Ordinal(11), None),
+     ('FIELD', 'int32', 'a29', ast.Ordinal(29), None),
+     ('FIELD', 'int32', 'a1234567890', ast.Ordinal(1234567890), None)])])]
+    self.assertEquals(parser.Parse(source, "my_file.mojom"), expected)
+
+  def testInvalidOrdinals(self):
+    """Tests that (lexically) invalid ordinals are correctly detected."""
+    source1 = """\
+module my_module {
+
+struct MyStruct {
+  int32 a_missing @;
+};
+
+}  // module my_module
+"""
+    with self.assertRaisesRegexp(
+        lexer.LexError,
+        r"^my_file\.mojom:4: Error: Missing ordinal value$"):
+      parser.Parse(source1, "my_file.mojom")
+
+    source2 = """\
+module my_module {
+
+struct MyStruct {
+  int32 a_octal @01;
+};
+
+}  // module my_module
+"""
+    with self.assertRaisesRegexp(
+        lexer.LexError,
+        r"^my_file\.mojom:4: Error: "
+            r"Octal and hexadecimal ordinal values not allowed$"):
+      parser.Parse(source2, "my_file.mojom")
+
+    source3 = """\
+module my_module { struct MyStruct { int32 a_invalid_octal @08; }; }
+"""
+    with self.assertRaisesRegexp(
+        lexer.LexError,
+        r"^my_file\.mojom:1: Error: "
+            r"Octal and hexadecimal ordinal values not allowed$"):
+      parser.Parse(source3, "my_file.mojom")
+
+    source4 = """\
+module my_module { struct MyStruct { int32 a_hex @0x1aB9; }; }
+"""
+    with self.assertRaisesRegexp(
+        lexer.LexError,
+        r"^my_file\.mojom:1: Error: "
+            r"Octal and hexadecimal ordinal values not allowed$"):
+      parser.Parse(source4, "my_file.mojom")
+
+    source5 = """\
+module my_module { struct MyStruct { int32 a_hex @0X0; }; }
+"""
+    with self.assertRaisesRegexp(
+        lexer.LexError,
+        r"^my_file\.mojom:1: Error: "
+            r"Octal and hexadecimal ordinal values not allowed$"):
+      parser.Parse(source5, "my_file.mojom")
+
+    source6 = """\
+struct MyStruct {
+  int32 a_too_big @999999999999;
+};
+"""
+    with self.assertRaisesRegexp(
+        parser.ParseError,
+        r"^my_file\.mojom:2: Error: "
+            r"Ordinal value 999999999999 too large:\n"
+            r"  int32 a_too_big @999999999999;$"):
+      parser.Parse(source6, "my_file.mojom")
+
+  def testNestedNamespace(self):
+    """Tests nested namespaces work."""
+    source = """\
+module my.mod {
+
+struct MyStruct {
+  int32 a;
+};
+
+}  // module my.mod
+"""
+    expected = \
+[('MODULE',
+  'my.mod',
+  [('STRUCT',
+    'MyStruct',
+    None,
+    [('FIELD', 'int32', 'a', ast.Ordinal(None), None)])])]
+    self.assertEquals(parser.Parse(source, "my_file.mojom"), expected)
+
+
+if __name__ == "__main__":
+  unittest.main()
diff --git a/mojo/public/tools/bindings/pylib/mojom/parse/translate.py b/mojo/public/tools/bindings/pylib/mojom/parse/translate.py
new file mode 100755
index 0000000..6060c83
--- /dev/null
+++ b/mojo/public/tools/bindings/pylib/mojom/parse/translate.py
@@ -0,0 +1,145 @@
+#!/usr/bin/env python
+# 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.
+
+"""Translates parse tree to Mojom IR."""
+
+
+import os.path
+import sys
+
+import ast
+
+
+def MapTree(func, tree, name):
+  if not tree:
+    return []
+  return [func(subtree) for subtree in tree if subtree[0] == name]
+
+def MapKind(kind):
+  map_to_kind = { 'bool': 'b',
+                  'int8': 'i8',
+                  'int16': 'i16',
+                  'int32': 'i32',
+                  'int64': 'i64',
+                  'uint8': 'u8',
+                  'uint16': 'u16',
+                  'uint32': 'u32',
+                  'uint64': 'u64',
+                  'float': 'f',
+                  'double': 'd',
+                  'string': 's',
+                  'handle': 'h',
+                  'handle<data_pipe_consumer>': 'h:d:c',
+                  'handle<data_pipe_producer>': 'h:d:p',
+                  'handle<message_pipe>': 'h:m',
+                  'handle<shared_buffer>': 'h:s'}
+  if kind.endswith('[]'):
+    return 'a:' + MapKind(kind[0:len(kind)-2])
+  if kind in map_to_kind:
+    return map_to_kind[kind]
+  return 'x:' + kind
+
+def GetAttribute(attributes, name):
+  out = None
+  if attributes:
+    for attribute in attributes:
+      if attribute[0] == 'ATTRIBUTE' and attribute[1] == name:
+        out = attribute[2]
+  return out
+
+def MapField(tree):
+  assert type(tree[3]) is ast.Ordinal
+  return {'name': tree[2],
+          'kind': MapKind(tree[1]),
+          'ordinal': tree[3].value,
+          'default': tree[4]}
+
+def MapParameter(tree):
+  assert type(tree[3]) is ast.Ordinal
+  return {'name': tree[2],
+          'kind': MapKind(tree[1]),
+          'ordinal': tree[3].value}
+
+def MapMethod(tree):
+  assert type(tree[3]) is ast.Ordinal
+  method = {'name': tree[1],
+            'parameters': MapTree(MapParameter, tree[2], 'PARAM'),
+            'ordinal': tree[3].value}
+  if tree[4] != None:
+    method['response_parameters'] = MapTree(MapParameter, tree[4], 'PARAM')
+  return method
+
+def MapEnumField(tree):
+  return {'name': tree[1],
+          'value': tree[2]}
+
+def MapStruct(tree):
+  struct = {}
+  struct['name'] = tree[1]
+  # TODO(darin): Add support for |attributes|
+  #struct['attributes'] = MapAttributes(tree[2])
+  struct['fields'] = MapTree(MapField, tree[3], 'FIELD')
+  struct['enums'] = MapTree(MapEnum, tree[3], 'ENUM')
+  return struct
+
+def MapInterface(tree):
+  interface = {}
+  interface['name'] = tree[1]
+  interface['peer'] = GetAttribute(tree[2], 'Peer')
+  interface['methods'] = MapTree(MapMethod, tree[3], 'METHOD')
+  interface['enums'] = MapTree(MapEnum, tree[3], 'ENUM')
+  return interface
+
+def MapEnum(tree):
+  enum = {}
+  enum['name'] = tree[1]
+  enum['fields'] = MapTree(MapEnumField, tree[2], 'ENUM_FIELD')
+  return enum
+
+def MapModule(tree, name):
+  mojom = {}
+  mojom['name'] = name
+  mojom['namespace'] = tree[1]
+  mojom['structs'] = MapTree(MapStruct, tree[2], 'STRUCT')
+  mojom['interfaces'] = MapTree(MapInterface, tree[2], 'INTERFACE')
+  mojom['enums'] = MapTree(MapEnum, tree[2], 'ENUM')
+  return mojom
+
+def MapImport(tree):
+  import_item = {}
+  import_item['filename'] = tree[1]
+  return import_item
+
+
+class MojomBuilder():
+  def __init__(self):
+    self.mojom = {}
+
+  def Build(self, tree, name):
+    modules = [MapModule(item, name)
+        for item in tree if item[0] == 'MODULE']
+    if len(modules) != 1:
+      raise Exception('A mojom file must contain exactly 1 module.')
+    self.mojom = modules[0]
+    self.mojom['imports'] = MapTree(MapImport, tree, 'IMPORT')
+    return self.mojom
+
+
+def Translate(tree, name):
+  return MojomBuilder().Build(tree, name)
+
+
+def Main():
+  if len(sys.argv) < 2:
+    print("usage: %s filename" % (sys.argv[0]))
+    sys.exit(1)
+  tree = eval(open(sys.argv[1]).read())
+  name = os.path.splitext(os.path.basename(sys.argv[1]))[0]
+  result = Translate(tree, name)
+  print(result)
+
+
+if __name__ == '__main__':
+  Main()
diff --git a/mojo/public/tools/bindings/pylib/parse/mojo_lexer.py b/mojo/public/tools/bindings/pylib/parse/mojo_lexer.py
deleted file mode 100644
index 6704ae1..0000000
--- a/mojo/public/tools/bindings/pylib/parse/mojo_lexer.py
+++ /dev/null
@@ -1,288 +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 re
-import sys
-import os.path
-
-# Try to load the ply module, if not, then assume it is in the third_party
-# directory.
-try:
-  # Disable lint check which fails to find the ply module.
-  # pylint: disable=F0401
-  from ply.lex import TOKEN
-except ImportError:
-  # This assumes this file is in src/mojo/public/tools/bindings/pylib/parse/.
-  module_path, module_name = os.path.split(__file__)
-  third_party = os.path.join(module_path, os.pardir, os.pardir, os.pardir,
-                             os.pardir, os.pardir, os.pardir, 'third_party')
-  sys.path.append(third_party)
-  # pylint: disable=F0401
-  from ply.lex import TOKEN
-
-
-class LexError(Exception):
-  def __init__(self, filename, lineno, msg):
-    self.filename = filename
-    self.lineno = lineno
-    self.msg = msg
-
-  def __str__(self):
-    return "%s:%d: Error: %s" % (self.filename, self.lineno, self.msg)
-
-  def __repr__(self):
-    return str(self)
-
-
-class Lexer(object):
-
-  def __init__(self, filename):
-    self.filename = filename
-
-  ######################--   PRIVATE   --######################
-
-  ##
-  ## Internal auxiliary methods
-  ##
-  def _error(self, msg, token):
-    raise LexError(self.filename, token.lineno, msg)
-
-  ##
-  ## Reserved keywords
-  ##
-  keywords = (
-    'HANDLE',
-    'DATA_PIPE_CONSUMER',
-    'DATA_PIPE_PRODUCER',
-    'MESSAGE_PIPE',
-    'SHARED_BUFFER',
-
-    'IMPORT',
-    'MODULE',
-    'STRUCT',
-    'INTERFACE',
-    'ENUM',
-  )
-
-  keyword_map = {}
-  for keyword in keywords:
-    keyword_map[keyword.lower()] = keyword
-
-  ##
-  ## All the tokens recognized by the lexer
-  ##
-  tokens = keywords + (
-    # Identifiers
-    'NAME',
-
-    # Constants
-    'ORDINAL',
-    'INT_CONST_DEC', 'INT_CONST_OCT', 'INT_CONST_HEX',
-    'FLOAT_CONST',
-    'CHAR_CONST',
-
-    # String literals
-    'STRING_LITERAL',
-
-    # Operators
-    'PLUS', 'MINUS', 'TIMES', 'DIVIDE', 'MOD',
-    'OR', 'AND', 'NOT', 'XOR', 'LSHIFT', 'RSHIFT',
-
-    # Assignment
-    'EQUALS',
-
-    # Request / response
-    'RESPONSE',
-
-    # Delimiters
-    'LPAREN', 'RPAREN',         # ( )
-    'LBRACKET', 'RBRACKET',     # [ ]
-    'LBRACE', 'RBRACE',         # { }
-    'LANGLE', 'RANGLE',         # < >
-    'SEMI',                     # ;
-    'COMMA', 'DOT'              # , .
-  )
-
-  ##
-  ## Regexes for use in tokens
-  ##
-
-  # valid C identifiers (K&R2: A.2.3), plus '$' (supported by some compilers)
-  identifier = r'[a-zA-Z_$][0-9a-zA-Z_$]*'
-
-  hex_prefix = '0[xX]'
-  hex_digits = '[0-9a-fA-F]+'
-
-  # integer constants (K&R2: A.2.5.1)
-  integer_suffix_opt = \
-      r'(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?'
-  decimal_constant = \
-      '(0'+integer_suffix_opt+')|([1-9][0-9]*'+integer_suffix_opt+')'
-  octal_constant = '0[0-7]*'+integer_suffix_opt
-  hex_constant = hex_prefix+hex_digits+integer_suffix_opt
-
-  bad_octal_constant = '0[0-7]*[89]'
-
-  # character constants (K&R2: A.2.5.2)
-  # Note: a-zA-Z and '.-~^_!=&;,' are allowed as escape chars to support #line
-  # directives with Windows paths as filenames (..\..\dir\file)
-  # For the same reason, decimal_escape allows all digit sequences. We want to
-  # parse all correct code, even if it means to sometimes parse incorrect
-  # code.
-  #
-  simple_escape = r"""([a-zA-Z._~!=&\^\-\\?'"])"""
-  decimal_escape = r"""(\d+)"""
-  hex_escape = r"""(x[0-9a-fA-F]+)"""
-  bad_escape = r"""([\\][^a-zA-Z._~^!=&\^\-\\?'"x0-7])"""
-
-  escape_sequence = \
-      r"""(\\("""+simple_escape+'|'+decimal_escape+'|'+hex_escape+'))'
-  cconst_char = r"""([^'\\\n]|"""+escape_sequence+')'
-  char_const = "'"+cconst_char+"'"
-  unmatched_quote = "('"+cconst_char+"*\\n)|('"+cconst_char+"*$)"
-  bad_char_const = \
-      r"""('"""+cconst_char+"""[^'\n]+')|('')|('"""+ \
-      bad_escape+r"""[^'\n]*')"""
-
-  # string literals (K&R2: A.2.6)
-  string_char = r"""([^"\\\n]|"""+escape_sequence+')'
-  string_literal = '"'+string_char+'*"'
-  bad_string_literal = '"'+string_char+'*'+bad_escape+string_char+'*"'
-
-  # floating constants (K&R2: A.2.5.3)
-  exponent_part = r"""([eE][-+]?[0-9]+)"""
-  fractional_constant = r"""([0-9]*\.[0-9]+)|([0-9]+\.)"""
-  floating_constant = \
-      '(((('+fractional_constant+')'+ \
-      exponent_part+'?)|([0-9]+'+exponent_part+')))'
-
-  # Ordinals
-  ordinal = r'@[0-9]+'
-  missing_ordinal_value = r'@'
-  # Don't allow ordinal values in octal (even invalid octal, like 09) or
-  # hexadecimal.
-  octal_or_hex_ordinal_disallowed = r'@((0[0-9]+)|('+hex_prefix+hex_digits+'))'
-
-  ##
-  ## Rules for the normal state
-  ##
-  t_ignore = ' \t\r'
-
-  # Newlines
-  def t_NEWLINE(self, t):
-    r'\n+'
-    t.lexer.lineno += len(t.value)
-
-  # Operators
-  t_PLUS              = r'\+'
-  t_MINUS             = r'-'
-  t_TIMES             = r'\*'
-  t_DIVIDE            = r'/'
-  t_MOD               = r'%'
-  t_OR                = r'\|'
-  t_AND               = r'&'
-  t_NOT               = r'~'
-  t_XOR               = r'\^'
-  t_LSHIFT            = r'<<'
-  t_RSHIFT            = r'>>'
-
-  # =
-  t_EQUALS            = r'='
-
-  # =>
-  t_RESPONSE          = r'=>'
-
-  # Delimiters
-  t_LPAREN            = r'\('
-  t_RPAREN            = r'\)'
-  t_LBRACKET          = r'\['
-  t_RBRACKET          = r'\]'
-  t_LBRACE            = r'\{'
-  t_RBRACE            = r'\}'
-  t_LANGLE            = r'<'
-  t_RANGLE            = r'>'
-  t_COMMA             = r','
-  t_DOT               = r'\.'
-  t_SEMI              = r';'
-
-  t_STRING_LITERAL    = string_literal
-
-  # The following floating and integer constants are defined as
-  # functions to impose a strict order (otherwise, decimal
-  # is placed before the others because its regex is longer,
-  # and this is bad)
-  #
-  @TOKEN(floating_constant)
-  def t_FLOAT_CONST(self, t):
-    return t
-
-  @TOKEN(hex_constant)
-  def t_INT_CONST_HEX(self, t):
-    return t
-
-  @TOKEN(bad_octal_constant)
-  def t_BAD_CONST_OCT(self, t):
-    msg = "Invalid octal constant"
-    self._error(msg, t)
-
-  @TOKEN(octal_constant)
-  def t_INT_CONST_OCT(self, t):
-    return t
-
-  @TOKEN(decimal_constant)
-  def t_INT_CONST_DEC(self, t):
-    return t
-
-  # Must come before bad_char_const, to prevent it from
-  # catching valid char constants as invalid
-  #
-  @TOKEN(char_const)
-  def t_CHAR_CONST(self, t):
-    return t
-
-  @TOKEN(unmatched_quote)
-  def t_UNMATCHED_QUOTE(self, t):
-    msg = "Unmatched '"
-    self._error(msg, t)
-
-  @TOKEN(bad_char_const)
-  def t_BAD_CHAR_CONST(self, t):
-    msg = "Invalid char constant %s" % t.value
-    self._error(msg, t)
-
-  # unmatched string literals are caught by the preprocessor
-
-  @TOKEN(bad_string_literal)
-  def t_BAD_STRING_LITERAL(self, t):
-    msg = "String contains invalid escape code"
-    self._error(msg, t)
-
-  # Handle ordinal-related tokens in the right order:
-  @TOKEN(octal_or_hex_ordinal_disallowed)
-  def t_OCTAL_OR_HEX_ORDINAL_DISALLOWED(self, t):
-    msg = "Octal and hexadecimal ordinal values not allowed"
-    self._error(msg, t)
-
-  @TOKEN(ordinal)
-  def t_ORDINAL(self, t):
-    return t
-
-  @TOKEN(missing_ordinal_value)
-  def t_BAD_ORDINAL(self, t):
-    msg = "Missing ordinal value"
-    self._error(msg, t)
-
-  @TOKEN(identifier)
-  def t_NAME(self, t):
-    t.type = self.keyword_map.get(t.value, "NAME")
-    return t
-
-  # Ignore C and C++ style comments
-  def t_COMMENT(self, t):
-    r'(/\*(.|\n)*?\*/)|(//.*(\n[ \t]*//.*)*)'
-    pass
-
-  def t_error(self, t):
-    msg = 'Illegal character %s' % repr(t.value[0])
-    self._error(msg, t)
diff --git a/mojo/public/tools/bindings/pylib/parse/mojo_lexer_unittest.py b/mojo/public/tools/bindings/pylib/parse/mojo_lexer_unittest.py
deleted file mode 100644
index 18be667..0000000
--- a/mojo/public/tools/bindings/pylib/parse/mojo_lexer_unittest.py
+++ /dev/null
@@ -1,160 +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 mojo_lexer
-import unittest
-
-# Try to load the ply module, if not, then assume it is in the third_party
-# directory.
-try:
-  # Disable lint check which fails to find the ply module.
-  # pylint: disable=F0401
-  from ply import lex
-except ImportError:
-  # This assumes this file is in src/mojo/public/tools/bindings/pylib/parse/.
-  module_path, module_name = os.path.split(__file__)
-  third_party = os.path.join(module_path, os.pardir, os.pardir, os.pardir,
-                             os.pardir, os.pardir, os.pardir, 'third_party')
-  sys.path.append(third_party)
-  # pylint: disable=F0401
-  from ply import lex
-
-
-# This (monkey-patching LexToken to make comparison value-based) is evil, but
-# we'll do it anyway. (I'm pretty sure ply's lexer never cares about comparing
-# for object identity.)
-def _LexTokenEq(self, other):
-  return self.type == other.type and self.value == other.value and \
-         self.lineno == other.lineno and self.lexpos == other.lexpos
-setattr(lex.LexToken, '__eq__', _LexTokenEq)
-
-
-def _MakeLexToken(type, value, lineno=1, lexpos=0):
-  """Makes a LexToken with the given parameters. (Note that lineno is 1-based,
-  but lexpos is 0-based.)"""
-  rv = lex.LexToken()
-  rv.type, rv.value, rv.lineno, rv.lexpos = type, value, lineno, lexpos
-  return rv
-
-
-def _MakeLexTokenForKeyword(keyword, **kwargs):
-  """Makes a LexToken for the given keyword."""
-  return _MakeLexToken(keyword.upper(), keyword.lower(), **kwargs)
-
-
-class MojoLexerTest(unittest.TestCase):
-  """Tests mojo_lexer (in particular, Lexer)."""
-
-  def __init__(self, *args, **kwargs):
-    unittest.TestCase.__init__(self, *args, **kwargs)
-    # Clone all lexer instances from this one, since making a lexer is slow.
-    self._zygote_lexer = lex.lex(mojo_lexer.Lexer("my_file.mojom"))
-
-  def testValidSingleKeywords(self):
-    """Tests valid, single keywords."""
-    self.assertEquals(self._SingleTokenForInput("handle"),
-                      _MakeLexTokenForKeyword("handle"))
-    self.assertEquals(self._SingleTokenForInput("data_pipe_consumer"),
-                      _MakeLexTokenForKeyword("data_pipe_consumer"))
-    self.assertEquals(self._SingleTokenForInput("data_pipe_producer"),
-                      _MakeLexTokenForKeyword("data_pipe_producer"))
-    self.assertEquals(self._SingleTokenForInput("message_pipe"),
-                      _MakeLexTokenForKeyword("message_pipe"))
-    self.assertEquals(self._SingleTokenForInput("import"),
-                      _MakeLexTokenForKeyword("import"))
-    self.assertEquals(self._SingleTokenForInput("module"),
-                      _MakeLexTokenForKeyword("module"))
-    self.assertEquals(self._SingleTokenForInput("struct"),
-                      _MakeLexTokenForKeyword("struct"))
-    self.assertEquals(self._SingleTokenForInput("interface"),
-                      _MakeLexTokenForKeyword("interface"))
-    self.assertEquals(self._SingleTokenForInput("enum"),
-                      _MakeLexTokenForKeyword("enum"))
-
-  def testValidSingleTokens(self):
-    """Tests valid, single (non-keyword) tokens."""
-    self.assertEquals(self._SingleTokenForInput("asdf"),
-                      _MakeLexToken("NAME", "asdf"))
-    self.assertEquals(self._SingleTokenForInput("@123"),
-                      _MakeLexToken("ORDINAL", "@123"))
-    self.assertEquals(self._SingleTokenForInput("456"),
-                      _MakeLexToken("INT_CONST_DEC", "456"))
-    self.assertEquals(self._SingleTokenForInput("0765"),
-                      _MakeLexToken("INT_CONST_OCT", "0765"))
-    self.assertEquals(self._SingleTokenForInput("0x01aB2eF3"),
-                      _MakeLexToken("INT_CONST_HEX", "0x01aB2eF3"))
-    self.assertEquals(self._SingleTokenForInput("123.456"),
-                      _MakeLexToken("FLOAT_CONST", "123.456"))
-    self.assertEquals(self._SingleTokenForInput("'x'"),
-                      _MakeLexToken("CHAR_CONST", "'x'"))
-    self.assertEquals(self._SingleTokenForInput("\"hello\""),
-                      _MakeLexToken("STRING_LITERAL", "\"hello\""))
-    self.assertEquals(self._SingleTokenForInput("+"),
-                      _MakeLexToken("PLUS", "+"))
-    self.assertEquals(self._SingleTokenForInput("-"),
-                      _MakeLexToken("MINUS", "-"))
-    self.assertEquals(self._SingleTokenForInput("*"),
-                      _MakeLexToken("TIMES", "*"))
-    self.assertEquals(self._SingleTokenForInput("/"),
-                      _MakeLexToken("DIVIDE", "/"))
-    self.assertEquals(self._SingleTokenForInput("%"),
-                      _MakeLexToken("MOD", "%"))
-    self.assertEquals(self._SingleTokenForInput("|"),
-                      _MakeLexToken("OR", "|"))
-    self.assertEquals(self._SingleTokenForInput("~"),
-                      _MakeLexToken("NOT", "~"))
-    self.assertEquals(self._SingleTokenForInput("^"),
-                      _MakeLexToken("XOR", "^"))
-    self.assertEquals(self._SingleTokenForInput("<<"),
-                      _MakeLexToken("LSHIFT", "<<"))
-    self.assertEquals(self._SingleTokenForInput(">>"),
-                      _MakeLexToken("RSHIFT", ">>"))
-    self.assertEquals(self._SingleTokenForInput("="),
-                      _MakeLexToken("EQUALS", "="))
-    self.assertEquals(self._SingleTokenForInput("=>"),
-                      _MakeLexToken("RESPONSE", "=>"))
-    self.assertEquals(self._SingleTokenForInput("("),
-                      _MakeLexToken("LPAREN", "("))
-    self.assertEquals(self._SingleTokenForInput(")"),
-                      _MakeLexToken("RPAREN", ")"))
-    self.assertEquals(self._SingleTokenForInput("["),
-                      _MakeLexToken("LBRACKET", "["))
-    self.assertEquals(self._SingleTokenForInput("]"),
-                      _MakeLexToken("RBRACKET", "]"))
-    self.assertEquals(self._SingleTokenForInput("{"),
-                      _MakeLexToken("LBRACE", "{"))
-    self.assertEquals(self._SingleTokenForInput("}"),
-                      _MakeLexToken("RBRACE", "}"))
-    self.assertEquals(self._SingleTokenForInput("<"),
-                      _MakeLexToken("LANGLE", "<"))
-    self.assertEquals(self._SingleTokenForInput(">"),
-                      _MakeLexToken("RANGLE", ">"))
-    self.assertEquals(self._SingleTokenForInput(";"),
-                      _MakeLexToken("SEMI", ";"))
-    self.assertEquals(self._SingleTokenForInput(","),
-                      _MakeLexToken("COMMA", ","))
-    self.assertEquals(self._SingleTokenForInput("."),
-                      _MakeLexToken("DOT", "."))
-
-  def _TokensForInput(self, input):
-    """Gets a list of tokens for the given input string."""
-    lexer = self._zygote_lexer.clone()
-    lexer.input(input)
-    rv = []
-    while True:
-      tok = lexer.token()
-      if not tok:
-        return rv
-      rv.append(tok)
-
-  def _SingleTokenForInput(self, input):
-    """Gets the single token for the given input string. (Raises an exception if
-    the input string does not result in exactly one token.)"""
-    toks = self._TokensForInput(input)
-    assert len(toks) == 1
-    return toks[0]
-
-
-if __name__ == "__main__":
-  unittest.main()
diff --git a/mojo/public/tools/bindings/pylib/parse/mojo_parser.py b/mojo/public/tools/bindings/pylib/parse/mojo_parser.py
deleted file mode 100755
index c3c961e..0000000
--- a/mojo/public/tools/bindings/pylib/parse/mojo_parser.py
+++ /dev/null
@@ -1,371 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2013 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.
-
-"""Generates a syntax tree from a Mojo IDL file."""
-
-
-import sys
-import os.path
-
-# Try to load the ply module, if not, then assume it is in the third_party
-# directory.
-try:
-  # Disable lint check which fails to find the ply module.
-  # pylint: disable=F0401
-  from ply import lex
-  from ply import yacc
-except ImportError:
-  # This assumes this file is in src/mojo/public/tools/bindings/pylib/parse/.
-  module_path, module_name = os.path.split(__file__)
-  third_party = os.path.join(module_path, os.pardir, os.pardir, os.pardir,
-                             os.pardir, os.pardir, os.pardir, 'third_party')
-  sys.path.append(third_party)
-  # pylint: disable=F0401
-  from ply import lex
-  from ply import yacc
-
-from mojo_lexer import Lexer
-
-
-def _ListFromConcat(*items):
-  """Generate list by concatenating inputs (note: only concatenates lists, not
-  tuples or other iterables)."""
-  itemsout = []
-  for item in items:
-    if item is None:
-      continue
-    if type(item) is not type([]):
-      itemsout.append(item)
-    else:
-      itemsout.extend(item)
-  return itemsout
-
-
-class ParseError(Exception):
-
-  def __init__(self, filename, lineno=None, snippet=None, bad_char=None,
-               eof=False):
-    self.filename = filename
-    self.lineno = lineno
-    self.snippet = snippet
-    self.bad_char = bad_char
-    self.eof = eof
-
-  def __str__(self):
-    return "%s: Error: Unexpected end of file" % self.filename if self.eof \
-        else "%s:%d: Error: Unexpected %r:\n%s" % (
-            self.filename, self.lineno, self.bad_char, self.snippet)
-
-  def __repr__(self):
-    return str(self)
-
-
-class Parser(object):
-
-  def __init__(self, lexer, source, filename):
-    self.tokens = lexer.tokens
-    self.source = source
-    self.filename = filename
-
-  def p_root(self, p):
-    """root : import root
-            | module
-            | definitions"""
-    if len(p) > 2:
-      p[0] = _ListFromConcat(p[1], p[2])
-    else:
-      if p[1][0] != 'MODULE':
-        p[0] = [('MODULE', '', p[1])]
-      else:
-        p[0] = [p[1]]
-
-  def p_import(self, p):
-    """import : IMPORT STRING_LITERAL"""
-    # 'eval' the literal to strip the quotes.
-    p[0] = ('IMPORT', eval(p[2]))
-
-  def p_module(self, p):
-    """module : MODULE NAME LBRACE definitions RBRACE"""
-    p[0] = ('MODULE', p[2], p[4])
-
-  def p_definitions(self, p):
-    """definitions : definition definitions
-                   | """
-    if len(p) > 1:
-      p[0] = _ListFromConcat(p[1], p[2])
-
-  def p_definition(self, p):
-    """definition : struct
-                  | interface
-                  | enum"""
-    p[0] = p[1]
-
-  def p_attribute_section(self, p):
-    """attribute_section : LBRACKET attributes RBRACKET
-                         | """
-    if len(p) > 3:
-      p[0] = p[2]
-
-  def p_attributes(self, p):
-    """attributes : attribute
-                  | attribute COMMA attributes
-                  | """
-    if len(p) == 2:
-      p[0] = _ListFromConcat(p[1])
-    elif len(p) > 3:
-      p[0] = _ListFromConcat(p[1], p[3])
-
-  def p_attribute(self, p):
-    """attribute : NAME EQUALS expression
-                 | NAME EQUALS NAME"""
-    p[0] = ('ATTRIBUTE', p[1], p[3])
-
-  def p_struct(self, p):
-    """struct : attribute_section STRUCT NAME LBRACE struct_body RBRACE SEMI"""
-    p[0] = ('STRUCT', p[3], p[1], p[5])
-
-  def p_struct_body(self, p):
-    """struct_body : field struct_body
-                   | enum struct_body
-                   | """
-    if len(p) > 1:
-      p[0] = _ListFromConcat(p[1], p[2])
-
-  def p_field(self, p):
-    """field : typename NAME default ordinal SEMI"""
-    p[0] = ('FIELD', p[1], p[2], p[4], p[3])
-
-  def p_default(self, p):
-    """default : EQUALS expression
-               | EQUALS expression_object
-               | """
-    if len(p) > 2:
-      p[0] = p[2]
-
-  def p_interface(self, p):
-    """interface : attribute_section INTERFACE NAME LBRACE interface_body \
-                       RBRACE SEMI"""
-    p[0] = ('INTERFACE', p[3], p[1], p[5])
-
-  def p_interface_body(self, p):
-    """interface_body : method interface_body
-                      | enum interface_body
-                      | """
-    if len(p) > 1:
-      p[0] = _ListFromConcat(p[1], p[2])
-
-  def p_response(self, p):
-    """response : RESPONSE LPAREN parameters RPAREN
-                | """
-    if len(p) > 3:
-      p[0] = p[3]
-
-  def p_method(self, p):
-    """method : NAME ordinal LPAREN parameters RPAREN response SEMI"""
-    p[0] = ('METHOD', p[1], p[4], p[2], p[6])
-
-  def p_parameters(self, p):
-    """parameters : parameter
-                  | parameter COMMA parameters
-                  | """
-    if len(p) == 1:
-      p[0] = []
-    elif len(p) == 2:
-      p[0] = _ListFromConcat(p[1])
-    elif len(p) > 3:
-      p[0] = _ListFromConcat(p[1], p[3])
-
-  def p_parameter(self, p):
-    """parameter : typename NAME ordinal"""
-    p[0] = ('PARAM', p[1], p[2], p[3])
-
-  def p_typename(self, p):
-    """typename : basictypename
-                | array"""
-    p[0] = p[1]
-
-  def p_basictypename(self, p):
-    """basictypename : identifier
-                     | HANDLE
-                     | specializedhandle"""
-    p[0] = p[1]
-
-  def p_specializedhandle(self, p):
-    """specializedhandle : HANDLE LANGLE specializedhandlename RANGLE"""
-    p[0] = "handle<" + p[3] + ">"
-
-  def p_specializedhandlename(self, p):
-    """specializedhandlename : DATA_PIPE_CONSUMER
-                             | DATA_PIPE_PRODUCER
-                             | MESSAGE_PIPE
-                             | SHARED_BUFFER"""
-    p[0] = p[1]
-
-  def p_array(self, p):
-    """array : basictypename LBRACKET RBRACKET"""
-    p[0] = p[1] + "[]"
-
-  def p_ordinal(self, p):
-    """ordinal : ORDINAL
-               | """
-    if len(p) > 1:
-      p[0] = p[1]
-
-  def p_enum(self, p):
-    """enum : ENUM NAME LBRACE enum_fields RBRACE SEMI"""
-    p[0] = ('ENUM', p[2], p[4])
-
-  def p_enum_fields(self, p):
-    """enum_fields : enum_field
-                   | enum_field COMMA enum_fields
-                   | """
-    if len(p) == 2:
-      p[0] = _ListFromConcat(p[1])
-    elif len(p) > 3:
-      p[0] = _ListFromConcat(p[1], p[3])
-
-  def p_enum_field(self, p):
-    """enum_field : NAME
-                  | NAME EQUALS expression"""
-    if len(p) == 2:
-      p[0] = ('ENUM_FIELD', p[1], None)
-    else:
-      p[0] = ('ENUM_FIELD', p[1], p[3])
-
-  ### Expressions ###
-
-  def p_expression_object(self, p):
-    """expression_object : expression_array
-                         | LBRACE expression_object_elements RBRACE """
-    if len(p) < 3:
-      p[0] = p[1]
-    else:
-      p[0] = ('OBJECT', p[2])
-
-  def p_expression_object_elements(self, p):
-    """expression_object_elements : expression_object
-                                  | expression_object COMMA expression_object_elements
-                                  | """
-    if len(p) == 2:
-      p[0] = _ListFromConcat(p[1])
-    elif len(p) > 3:
-      p[0] = _ListFromConcat(p[1], p[3])
-
-  def p_expression_array(self, p):
-    """expression_array : expression
-                        | LBRACKET expression_array_elements RBRACKET """
-    if len(p) < 3:
-      p[0] = p[1]
-    else:
-      p[0] = ('ARRAY', p[2])
-
-  def p_expression_array_elements(self, p):
-    """expression_array_elements : expression_object
-                                 | expression_object COMMA expression_array_elements
-                                 | """
-    if len(p) == 2:
-      p[0] = _ListFromConcat(p[1])
-    elif len(p) > 3:
-      p[0] = _ListFromConcat(p[1], p[3])
-
-  # TODO(vtl): This is now largely redundant.
-  def p_expression(self, p):
-    """expression : binary_expression"""
-    p[0] = ('EXPRESSION', p[1])
-
-  # PLY lets us specify precedence of operators, but since we don't actually
-  # evaluate them, we don't need that here.
-  # TODO(vtl): We're going to need to evaluate them.
-  def p_binary_expression(self, p):
-    """binary_expression : unary_expression
-                         | binary_expression binary_operator \
-                               binary_expression"""
-    p[0] = _ListFromConcat(*p[1:])
-
-  def p_binary_operator(self, p):
-    """binary_operator : TIMES
-                       | DIVIDE
-                       | MOD
-                       | PLUS
-                       | MINUS
-                       | RSHIFT
-                       | LSHIFT
-                       | AND
-                       | OR
-                       | XOR"""
-    p[0] = p[1]
-
-  def p_unary_expression(self, p):
-    """unary_expression : primary_expression
-                        | unary_operator expression"""
-    p[0] = _ListFromConcat(*p[1:])
-
-  def p_unary_operator(self, p):
-    """unary_operator : PLUS
-                      | MINUS
-                      | NOT"""
-    p[0] = p[1]
-
-  def p_primary_expression(self, p):
-    """primary_expression : constant
-                          | identifier
-                          | LPAREN expression RPAREN"""
-    p[0] = _ListFromConcat(*p[1:])
-
-  def p_identifier(self, p):
-    """identifier : NAME
-                  | NAME DOT identifier"""
-    p[0] = ''.join(p[1:])
-
-  def p_constant(self, p):
-    """constant : INT_CONST_DEC
-                | INT_CONST_OCT
-                | INT_CONST_HEX
-                | FLOAT_CONST
-                | CHAR_CONST
-                | STRING_LITERAL"""
-    p[0] = _ListFromConcat(*p[1:])
-
-  def p_error(self, e):
-    if e is None:
-      # Unexpected EOF.
-      # TODO(vtl): Can we figure out what's missing?
-      raise ParseError(self.filename, eof=True)
-
-    snippet = self.source.split('\n')[e.lineno - 1]
-    raise ParseError(self.filename, lineno=e.lineno, snippet=snippet,
-                     bad_char=e.value)
-
-
-def Parse(source, filename):
-  lexer = Lexer(filename)
-  parser = Parser(lexer, source, filename)
-
-  lex.lex(object=lexer)
-  yacc.yacc(module=parser, debug=0, write_tables=0)
-
-  tree = yacc.parse(source)
-  return tree
-
-
-def main(argv):
-  if len(argv) < 2:
-    print "usage: %s filename" % argv[0]
-    return 0
-
-  for filename in argv[1:]:
-    with open(filename) as f:
-      print "%s:" % filename
-      try:
-        print Parse(f.read(), filename)
-      except ParseError, e:
-        print e
-        return 1
-
-  return 0
-
-
-if __name__ == '__main__':
-  sys.exit(main(sys.argv))
diff --git a/mojo/public/tools/bindings/pylib/parse/mojo_parser_unittest.py b/mojo/public/tools/bindings/pylib/parse/mojo_parser_unittest.py
deleted file mode 100644
index cc49c46..0000000
--- a/mojo/public/tools/bindings/pylib/parse/mojo_parser_unittest.py
+++ /dev/null
@@ -1,277 +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 mojo_lexer
-import mojo_parser
-import unittest
-
-
-class MojoParserTest(unittest.TestCase):
-  """Tests mojo_parser (in particular, Parse())."""
-
-  def testTrivialValidSource(self):
-    """Tests a trivial, but valid, .mojom source."""
-    source = """\
-// This is a comment.
-
-module my_module {
-}
-"""
-    self.assertEquals(mojo_parser.Parse(source, "my_file.mojom"),
-                      [("MODULE", "my_module", None)])
-
-  def testSourceWithCrLfs(self):
-    """Tests a .mojom source with CR-LFs instead of LFs."""
-    source = "// This is a comment.\r\n\r\nmodule my_module {\r\n}\r\n";
-    self.assertEquals(mojo_parser.Parse(source, "my_file.mojom"),
-                      [("MODULE", "my_module", None)])
-
-  def testUnexpectedEOF(self):
-    """Tests a "truncated" .mojom source."""
-    source = """\
-// This is a comment.
-
-module my_module {
-"""
-    with self.assertRaisesRegexp(
-        mojo_parser.ParseError,
-        r"^my_file\.mojom: Error: Unexpected end of file$"):
-      mojo_parser.Parse(source, "my_file.mojom")
-
-  def testSimpleStruct(self):
-    """Tests a simple .mojom source that just defines a struct."""
-    source = """\
-module my_module {
-
-struct MyStruct {
-  int32 a;
-  double b;
-};
-
-}  // module my_module
-"""
-    expected = \
-[('MODULE',
-  'my_module',
-  [('STRUCT',
-    'MyStruct',
-    None,
-    [('FIELD', 'int32', 'a', None, None),
-     ('FIELD', 'double', 'b', None, None)])])]
-    self.assertEquals(mojo_parser.Parse(source, "my_file.mojom"), expected)
-
-  def testSimpleStructWithoutModule(self):
-    """Tests a simple struct without an enclosing module."""
-    source = """\
-struct MyStruct {
-  int32 a;
-  double b;
-};
-"""
-    expected = \
-[('MODULE',
-  '',
-  [('STRUCT',
-    'MyStruct',
-    None,
-    [('FIELD', 'int32', 'a', None, None),
-     ('FIELD', 'double', 'b', None, None)])])]
-    self.assertEquals(mojo_parser.Parse(source, "my_file.mojom"), expected)
-
-  def testMissingModuleName(self):
-    """Tests an (invalid) .mojom with a missing module name."""
-    source1 = """\
-// Missing module name.
-module {
-struct MyStruct {
-  int32 a;
-};
-}
-"""
-    with self.assertRaisesRegexp(
-        mojo_parser.ParseError,
-        r"^my_file\.mojom:2: Error: Unexpected '{':\nmodule {$"):
-      mojo_parser.Parse(source1, "my_file.mojom")
-
-    # Another similar case, but make sure that line-number tracking/reporting
-    # is correct.
-    source2 = """\
-module
-// This line intentionally left unblank.
-
-{
-}
-"""
-    with self.assertRaisesRegexp(
-        mojo_parser.ParseError,
-        r"^my_file\.mojom:4: Error: Unexpected '{':\n{$"):
-      mojo_parser.Parse(source2, "my_file.mojom")
-
-  def testEnumExpressions(self):
-    """Tests an enum with values calculated using simple expressions."""
-    source = """\
-module my_module {
-
-enum MyEnum {
-  MY_ENUM_1 = 1,
-  MY_ENUM_2 = 1 + 1,
-  MY_ENUM_3 = 1 * 3,
-  MY_ENUM_4 = 2 * (1 + 1),
-  MY_ENUM_5 = 1 + 2 * 2,
-  MY_ENUM_6 = -6 / -2,
-  MY_ENUM_7 = 3 | (1 << 2),
-  MY_ENUM_8 = 16 >> 1,
-  MY_ENUM_9 = 1 ^ 15 & 8,
-  MY_ENUM_10 = 110 % 100,
-  MY_ENUM_MINUS_1 = ~0
-};
-
-}  // my_module
-"""
-    expected = \
-[('MODULE',
-  'my_module',
-  [('ENUM',
-    'MyEnum',
-    [('ENUM_FIELD', 'MY_ENUM_1', ('EXPRESSION', ['1'])),
-     ('ENUM_FIELD', 'MY_ENUM_2', ('EXPRESSION', ['1', '+', '1'])),
-     ('ENUM_FIELD', 'MY_ENUM_3', ('EXPRESSION', ['1', '*', '3'])),
-     ('ENUM_FIELD',
-      'MY_ENUM_4',
-      ('EXPRESSION',
-       ['2', '*', '(', ('EXPRESSION', ['1', '+', '1']), ')'])),
-     ('ENUM_FIELD',
-      'MY_ENUM_5',
-      ('EXPRESSION', ['1', '+', '2', '*', '2'])),
-     ('ENUM_FIELD',
-      'MY_ENUM_6',
-      ('EXPRESSION',
-       ['-', ('EXPRESSION', ['6', '/', '-', ('EXPRESSION', ['2'])])])),
-     ('ENUM_FIELD',
-      'MY_ENUM_7',
-      ('EXPRESSION',
-       ['3', '|', '(', ('EXPRESSION', ['1', '<<', '2']), ')'])),
-     ('ENUM_FIELD', 'MY_ENUM_8', ('EXPRESSION', ['16', '>>', '1'])),
-     ('ENUM_FIELD',
-      'MY_ENUM_9',
-      ('EXPRESSION', ['1', '^', '15', '&', '8'])),
-     ('ENUM_FIELD', 'MY_ENUM_10', ('EXPRESSION', ['110', '%', '100'])),
-     ('ENUM_FIELD',
-      'MY_ENUM_MINUS_1',
-      ('EXPRESSION', ['~', ('EXPRESSION', ['0'])]))])])]
-    self.assertEquals(mojo_parser.Parse(source, "my_file.mojom"), expected)
-
-  def testNoConditionals(self):
-    """Tests that ?: is not allowed."""
-    source = """\
-module my_module {
-
-enum MyEnum {
-  MY_ENUM_1 = 1 ? 2 : 3
-};
-
-}  // my_module
-"""
-    with self.assertRaisesRegexp(
-        mojo_lexer.LexError,
-        r"^my_file\.mojom:4: Error: Illegal character '\?'$"):
-      mojo_parser.Parse(source, "my_file.mojom")
-
-  def testSimpleOrdinals(self):
-    """Tests that (valid) ordinal values are scanned correctly."""
-    source = """\
-module my_module {
-
-// This isn't actually valid .mojom, but the problem (missing ordinals) should
-// be handled at a different level.
-struct MyStruct {
-  int32 a0 @0;
-  int32 a1 @1;
-  int32 a2 @2;
-  int32 a9 @9;
-  int32 a10 @10;
-  int32 a11 @11;
-  int32 a29 @29;
-  int32 a1234567890 @1234567890;
-};
-
-}  // module my_module
-"""
-    expected = \
-[('MODULE',
-  'my_module',
-  [('STRUCT',
-    'MyStruct',
-    None,
-    [('FIELD', 'int32', 'a0', '@0', None),
-     ('FIELD', 'int32', 'a1', '@1', None),
-     ('FIELD', 'int32', 'a2', '@2', None),
-     ('FIELD', 'int32', 'a9', '@9', None),
-     ('FIELD', 'int32', 'a10', '@10', None),
-     ('FIELD', 'int32', 'a11', '@11', None),
-     ('FIELD', 'int32', 'a29', '@29', None),
-     ('FIELD', 'int32', 'a1234567890', '@1234567890', None)])])]
-    self.assertEquals(mojo_parser.Parse(source, "my_file.mojom"), expected)
-
-  def testInvalidOrdinals(self):
-    """Tests that (lexically) invalid ordinals are correctly detected."""
-    source1 = """\
-module my_module {
-
-struct MyStruct {
-  int32 a_missing @;
-};
-
-}  // module my_module
-"""
-    with self.assertRaisesRegexp(
-        mojo_lexer.LexError,
-        r"^my_file\.mojom:4: Error: Missing ordinal value$"):
-      mojo_parser.Parse(source1, "my_file.mojom")
-
-    source2 = """\
-module my_module {
-
-struct MyStruct {
-  int32 a_octal @01;
-};
-
-}  // module my_module
-"""
-    with self.assertRaisesRegexp(
-        mojo_lexer.LexError,
-        r"^my_file\.mojom:4: Error: "
-            r"Octal and hexadecimal ordinal values not allowed$"):
-      mojo_parser.Parse(source2, "my_file.mojom")
-
-    source3 = """\
-module my_module { struct MyStruct { int32 a_invalid_octal @08; }; }
-"""
-    with self.assertRaisesRegexp(
-        mojo_lexer.LexError,
-        r"^my_file\.mojom:1: Error: "
-            r"Octal and hexadecimal ordinal values not allowed$"):
-      mojo_parser.Parse(source3, "my_file.mojom")
-
-    source4 = """\
-module my_module { struct MyStruct { int32 a_hex @0x1aB9; }; }
-"""
-    with self.assertRaisesRegexp(
-        mojo_lexer.LexError,
-        r"^my_file\.mojom:1: Error: "
-            r"Octal and hexadecimal ordinal values not allowed$"):
-      mojo_parser.Parse(source4, "my_file.mojom")
-
-    source5 = """\
-module my_module { struct MyStruct { int32 a_hex @0X0; }; }
-"""
-    with self.assertRaisesRegexp(
-        mojo_lexer.LexError,
-        r"^my_file\.mojom:1: Error: "
-            r"Octal and hexadecimal ordinal values not allowed$"):
-      mojo_parser.Parse(source5, "my_file.mojom")
-
-
-if __name__ == "__main__":
-  unittest.main()
diff --git a/mojo/public/tools/bindings/pylib/parse/mojo_translate.py b/mojo/public/tools/bindings/pylib/parse/mojo_translate.py
deleted file mode 100755
index 9906ede..0000000
--- a/mojo/public/tools/bindings/pylib/parse/mojo_translate.py
+++ /dev/null
@@ -1,145 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2013 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.
-
-"""Translate parse tree to Mojom IR"""
-
-
-import os
-import sys
-
-
-def MapTree(func, tree, name):
-  if not tree:
-    return []
-  return [func(subtree) for subtree in tree if subtree[0] == name]
-
-def MapKind(kind):
-  map_to_kind = { 'bool': 'b',
-                  'int8': 'i8',
-                  'int16': 'i16',
-                  'int32': 'i32',
-                  'int64': 'i64',
-                  'uint8': 'u8',
-                  'uint16': 'u16',
-                  'uint32': 'u32',
-                  'uint64': 'u64',
-                  'float': 'f',
-                  'double': 'd',
-                  'string': 's',
-                  'handle': 'h',
-                  'handle<data_pipe_consumer>': 'h:d:c',
-                  'handle<data_pipe_producer>': 'h:d:p',
-                  'handle<message_pipe>': 'h:m',
-                  'handle<shared_buffer>': 'h:s'}
-  if kind.endswith('[]'):
-    return 'a:' + MapKind(kind[0:len(kind)-2])
-  if kind in map_to_kind:
-    return map_to_kind[kind]
-  return 'x:' + kind
-
-def MapOrdinal(ordinal):
-  if ordinal == None:
-    return None
-  return int(ordinal[1:])  # Strip leading '@'
-
-def GetAttribute(attributes, name):
-  out = None
-  if attributes:
-    for attribute in attributes:
-      if attribute[0] == 'ATTRIBUTE' and attribute[1] == name:
-        out = attribute[2]
-  return out
-
-def MapField(tree):
-  return {'name': tree[2],
-          'kind': MapKind(tree[1]),
-          'ordinal': MapOrdinal(tree[3]),
-          'default': tree[4]}
-
-def MapParameter(tree):
-  return {'name': tree[2],
-          'kind': MapKind(tree[1]),
-          'ordinal': MapOrdinal(tree[3])}
-
-def MapMethod(tree):
-  method = {'name': tree[1],
-            'parameters': MapTree(MapParameter, tree[2], 'PARAM'),
-            'ordinal': MapOrdinal(tree[3])}
-  if tree[4] != None:
-    method['response_parameters'] = MapTree(MapParameter, tree[4], 'PARAM')
-  return method
-
-def MapEnumField(tree):
-  return {'name': tree[1],
-          'value': tree[2]}
-
-def MapStruct(tree):
-  struct = {}
-  struct['name'] = tree[1]
-  # TODO(darin): Add support for |attributes|
-  #struct['attributes'] = MapAttributes(tree[2])
-  struct['fields'] = MapTree(MapField, tree[3], 'FIELD')
-  struct['enums'] = MapTree(MapEnum, tree[3], 'ENUM')
-  return struct
-
-def MapInterface(tree):
-  interface = {}
-  interface['name'] = tree[1]
-  interface['peer'] = GetAttribute(tree[2], 'Peer')
-  interface['methods'] = MapTree(MapMethod, tree[3], 'METHOD')
-  interface['enums'] = MapTree(MapEnum, tree[3], 'ENUM')
-  return interface
-
-def MapEnum(tree):
-  enum = {}
-  enum['name'] = tree[1]
-  enum['fields'] = MapTree(MapEnumField, tree[2], 'ENUM_FIELD')
-  return enum
-
-def MapModule(tree, name):
-  mojom = {}
-  mojom['name'] = name
-  mojom['namespace'] = tree[1]
-  mojom['structs'] = MapTree(MapStruct, tree[2], 'STRUCT')
-  mojom['interfaces'] = MapTree(MapInterface, tree[2], 'INTERFACE')
-  mojom['enums'] = MapTree(MapEnum, tree[2], 'ENUM')
-  return mojom
-
-def MapImport(tree):
-  import_item = {}
-  import_item['filename'] = tree[1]
-  return import_item
-
-
-class MojomBuilder():
-  def __init__(self):
-    self.mojom = {}
-
-  def Build(self, tree, name):
-    modules = [MapModule(item, name)
-        for item in tree if item[0] == 'MODULE']
-    if len(modules) != 1:
-      raise Exception('A mojom file must contain exactly 1 module.')
-    self.mojom = modules[0]
-    self.mojom['imports'] = MapTree(MapImport, tree, 'IMPORT')
-    return self.mojom
-
-
-def Translate(tree, name):
-  return MojomBuilder().Build(tree, name)
-
-
-def Main():
-  if len(sys.argv) < 2:
-    print("usage: %s filename" % (sys.argv[0]))
-    sys.exit(1)
-  tree = eval(open(sys.argv[1]).read())
-  name = os.path.splitext(os.path.basename(sys.argv[1]))[0]
-  result = Translate(tree, name)
-  print(result)
-
-
-if __name__ == '__main__':
-  Main()
diff --git a/mojo/service_manager/service_manager.cc b/mojo/service_manager/service_manager.cc
index f12249e..c34e83f 100644
--- a/mojo/service_manager/service_manager.cc
+++ b/mojo/service_manager/service_manager.cc
@@ -9,6 +9,7 @@
 #include "base/lazy_instance.h"
 #include "base/logging.h"
 #include "base/macros.h"
+#include "base/stl_util.h"
 #include "mojo/public/cpp/bindings/allocation_scope.h"
 #include "mojo/public/cpp/bindings/error_handler.h"
 #include "mojo/public/cpp/bindings/remote_ptr.h"
@@ -71,16 +72,13 @@
 }
 
 ServiceManager::ServiceManager()
-    : default_loader_(NULL),
-      interceptor_(NULL) {
+    : interceptor_(NULL) {
 }
 
 ServiceManager::~ServiceManager() {
-  for (URLToServiceFactoryMap::iterator it = url_to_service_factory_.begin();
-       it != url_to_service_factory_.end(); ++it) {
-    delete it->second;
-  }
-  url_to_service_factory_.clear();
+  STLDeleteValues(&url_to_service_factory_);
+  STLDeleteValues(&url_to_loader_);
+  STLDeleteValues(&scheme_to_loader_);
 }
 
 // static
@@ -110,15 +108,20 @@
   }
 }
 
-void ServiceManager::SetLoaderForURL(ServiceLoader* loader, const GURL& url) {
-  DCHECK(url_to_loader_.find(url) == url_to_loader_.end());
-  url_to_loader_[url] = loader;
+void ServiceManager::SetLoaderForURL(scoped_ptr<ServiceLoader> loader,
+                                     const GURL& url) {
+  URLToLoaderMap::iterator it = url_to_loader_.find(url);
+  if (it != url_to_loader_.end())
+    delete it->second;
+  url_to_loader_[url] = loader.release();
 }
 
-void ServiceManager::SetLoaderForScheme(ServiceLoader* loader,
+void ServiceManager::SetLoaderForScheme(scoped_ptr<ServiceLoader> loader,
                                         const std::string& scheme) {
-  DCHECK(scheme_to_loader_.find(scheme) == scheme_to_loader_.end());
-  scheme_to_loader_[scheme] = loader;
+  SchemeToLoaderMap::iterator it = scheme_to_loader_.find(scheme);
+  if (it != scheme_to_loader_.end())
+    delete it->second;
+  scheme_to_loader_[scheme] = loader.release();
 }
 
 void ServiceManager::SetInterceptor(Interceptor* interceptor) {
@@ -134,7 +137,7 @@
   if (scheme_it != scheme_to_loader_.end())
     return scheme_it->second;
   DCHECK(default_loader_);
-  return default_loader_;
+  return default_loader_.get();
 }
 
 void ServiceManager::OnServiceFactoryError(ServiceFactory* service_factory) {
diff --git a/mojo/service_manager/service_manager.h b/mojo/service_manager/service_manager.h
index 6d9ab5d..40cb8cd 100644
--- a/mojo/service_manager/service_manager.h
+++ b/mojo/service_manager/service_manager.h
@@ -10,7 +10,9 @@
 #include "base/basictypes.h"
 #include "base/callback.h"
 #include "base/gtest_prod_util.h"
+#include "base/memory/scoped_ptr.h"
 #include "mojo/public/interfaces/shell/shell.mojom.h"
+#include "mojo/service_manager/service_loader.h"
 #include "mojo/service_manager/service_manager_export.h"
 #include "url/gurl.h"
 
@@ -20,8 +22,6 @@
 
 namespace mojo {
 
-class ServiceLoader;
-
 class MOJO_SERVICE_MANAGER_EXPORT ServiceManager {
  public:
   // API for testing.
@@ -57,16 +57,16 @@
   // Loads a service if necessary and establishes a new client connection.
   void Connect(const GURL& url, ScopedMessagePipeHandle client_handle);
 
-  // Sets the default Loader to be used if not overridden by
-  // SetLoaderForURL() or SetLoaderForScheme().
-  // Does not take ownership of |loader|.
-  void set_default_loader(ServiceLoader* loader) { default_loader_ = loader; }
+  // Sets the default Loader to be used if not overridden by SetLoaderForURL()
+  // or SetLoaderForScheme().
+  void set_default_loader(scoped_ptr<ServiceLoader> loader) {
+    default_loader_ = loader.Pass();
+  }
   // Sets a Loader to be used for a specific url.
-  // Does not take ownership of |loader|.
-  void SetLoaderForURL(ServiceLoader* loader, const GURL& url);
+  void SetLoaderForURL(scoped_ptr<ServiceLoader> loader, const GURL& url);
   // Sets a Loader to be used for a specific url scheme.
-  // Does not take ownership of |loader|.
-  void SetLoaderForScheme(ServiceLoader* loader, const std::string& scheme);
+  void SetLoaderForScheme(scoped_ptr<ServiceLoader> loader,
+                          const std::string& scheme);
   // Allows to interpose a debugger to service connections.
   void SetInterceptor(Interceptor* interceptor);
 
@@ -87,7 +87,7 @@
   // Loader management.
   URLToLoaderMap url_to_loader_;
   SchemeToLoaderMap scheme_to_loader_;
-  ServiceLoader* default_loader_;
+  scoped_ptr<ServiceLoader> default_loader_;
   Interceptor* interceptor_;
 
   URLToServiceFactoryMap url_to_service_factory_;
diff --git a/mojo/service_manager/service_manager_unittest.cc b/mojo/service_manager/service_manager_unittest.cc
index c7b3d2a..54a6b7d 100644
--- a/mojo/service_manager/service_manager_unittest.cc
+++ b/mojo/service_manager/service_manager_unittest.cc
@@ -19,18 +19,20 @@
 const char kTestURLString[] = "test:testService";
 
 struct TestContext {
-  TestContext() : num_impls(0) {}
+  TestContext() : num_impls(0), num_loader_deletes(0) {}
   std::string last_test_string;
   int num_impls;
+  int num_loader_deletes;
 };
 
 class TestServiceImpl :
-    public Service<TestService, TestServiceImpl, TestContext> {
+    public ServiceConnection<TestService, TestServiceImpl, TestContext> {
  public:
   TestServiceImpl() {}
 
   virtual ~TestServiceImpl() {
-    --context()->num_impls;
+    if (context())
+      --context()->num_impls;
   }
 
   virtual void Test(const mojo::String& test_string) OVERRIDE {
@@ -38,11 +40,13 @@
     client()->AckTest();
   }
 
-  void Initialize(ServiceFactory<TestServiceImpl, TestContext>* service_factory,
-                  ScopedMessagePipeHandle client_handle) {
-    Service<TestService, TestServiceImpl, TestContext>::Initialize(
+  void Initialize(
+      ServiceConnector<TestServiceImpl, TestContext>* service_factory,
+      ScopedMessagePipeHandle client_handle) {
+    ServiceConnection<TestService, TestServiceImpl, TestContext>::Initialize(
         service_factory, client_handle.Pass());
-    ++context()->num_impls;
+    if (context())
+      ++context()->num_impls;
   }
 };
 
@@ -71,74 +75,51 @@
   bool quit_after_ack_;
   DISALLOW_COPY_AND_ASSIGN(TestClientImpl);
 };
-}  // namespace
-
-class ServiceManagerTest : public testing::Test, public ServiceLoader {
- public:
-  ServiceManagerTest() {}
-
-  virtual ~ServiceManagerTest() {}
-
-  virtual void SetUp() OVERRIDE {
-    GURL test_url(kTestURLString);
-    service_manager_.reset(new ServiceManager);
-    service_manager_->SetLoaderForURL(this, test_url);
-
-    InterfacePipe<TestService, AnyInterface> pipe;
-    test_client_.reset(new TestClientImpl(pipe.handle_to_self.Pass()));
-    service_manager_->Connect(test_url, pipe.handle_to_peer.Pass());
-  }
-
-  virtual void TearDown() OVERRIDE {
-    test_client_.reset(NULL);
-    test_app_.reset(NULL);
-    service_manager_.reset(NULL);
-  }
-
-  virtual void LoadService(ServiceManager* manager,
-                           const GURL& url,
-                           ScopedShellHandle shell_handle) OVERRIDE {
-    test_app_.reset(new Application(shell_handle.Pass()));
-    test_app_->AddServiceFactory(
-        new ServiceFactory<TestServiceImpl, TestContext>(&context_));
-  }
-
-  virtual void OnServiceError(ServiceManager* manager,
-                              const GURL& url) OVERRIDE {
-    base::MessageLoop::current()->PostTask(FROM_HERE,
-                                           base::MessageLoop::QuitClosure());
-  }
-
-  bool HasFactoryForTestURL() {
-    ServiceManager::TestAPI manager_test_api(service_manager_.get());
-    return manager_test_api.HasFactoryForURL(GURL(kTestURLString));
-  }
-
- protected:
-  mojo::Environment env_;
-  base::MessageLoop loop_;
-  TestContext context_;
-  scoped_ptr<Application> test_app_;
-  scoped_ptr<TestClientImpl> test_client_;
-  scoped_ptr<ServiceManager> service_manager_;
-  DISALLOW_COPY_AND_ASSIGN(ServiceManagerTest);
-};
 
 class TestServiceLoader : public ServiceLoader {
  public:
-  TestServiceLoader() : num_loads_(0) {}
+  TestServiceLoader()
+      : context_(NULL),
+        num_loads_(0),
+        quit_after_error_(false) {
+  }
+
+  virtual ~TestServiceLoader() {
+    if (context_)
+      ++context_->num_loader_deletes;
+    test_app_.reset(NULL);
+  }
+
+  void set_context(TestContext* context) { context_ = context; }
+  void set_quit_after_error(bool quit_after_error) {
+    quit_after_error_ = quit_after_error;
+  }
+
   int num_loads() const { return num_loads_; }
 
  private:
   virtual void LoadService(ServiceManager* manager,
                            const GURL& url,
-                           ScopedShellHandle service_handle) OVERRIDE {
+                           ScopedShellHandle shell_handle) OVERRIDE {
     ++num_loads_;
+    test_app_.reset(new Application(shell_handle.Pass()));
+    test_app_->AddServiceConnector(
+        new ServiceConnector<TestServiceImpl, TestContext>(context_));
   }
-  virtual void OnServiceError(ServiceManager* manager, const GURL& url)
-      OVERRIDE {}
 
+  virtual void OnServiceError(ServiceManager* manager,
+                              const GURL& url) OVERRIDE {
+    if (quit_after_error_) {
+      base::MessageLoop::current()->PostTask(FROM_HERE,
+                                             base::MessageLoop::QuitClosure());
+    }
+  }
+
+
+  scoped_ptr<Application> test_app_;
+  TestContext* context_;
   int num_loads_;
+  bool quit_after_error_;
   DISALLOW_COPY_AND_ASSIGN(TestServiceLoader);
 };
 
@@ -169,6 +150,47 @@
   DISALLOW_COPY_AND_ASSIGN(TestServiceInterceptor);
 };
 
+}  // namespace
+
+class ServiceManagerTest : public testing::Test {
+ public:
+  ServiceManagerTest() {}
+
+  virtual ~ServiceManagerTest() {}
+
+  virtual void SetUp() OVERRIDE {
+    GURL test_url(kTestURLString);
+    service_manager_.reset(new ServiceManager);
+
+    InterfacePipe<TestService, AnyInterface> pipe;
+    test_client_.reset(new TestClientImpl(pipe.handle_to_self.Pass()));
+    TestServiceLoader* default_loader = new TestServiceLoader;
+    default_loader->set_context(&context_);
+    default_loader->set_quit_after_error(true);
+    service_manager_->set_default_loader(
+        scoped_ptr<ServiceLoader>(default_loader));
+    service_manager_->Connect(test_url, pipe.handle_to_peer.Pass());
+  }
+
+  virtual void TearDown() OVERRIDE {
+    test_client_.reset(NULL);
+    service_manager_.reset(NULL);
+  }
+
+  bool HasFactoryForTestURL() {
+    ServiceManager::TestAPI manager_test_api(service_manager_.get());
+    return manager_test_api.HasFactoryForURL(GURL(kTestURLString));
+  }
+
+ protected:
+  mojo::Environment env_;
+  base::MessageLoop loop_;
+  TestContext context_;
+  scoped_ptr<TestClientImpl> test_client_;
+  scoped_ptr<ServiceManager> service_manager_;
+  DISALLOW_COPY_AND_ASSIGN(ServiceManagerTest);
+};
+
 TEST_F(ServiceManagerTest, Basic) {
   test_client_->Test("test");
   loop_.Run();
@@ -186,43 +208,67 @@
   EXPECT_FALSE(HasFactoryForTestURL());
 }
 
+TEST_F(ServiceManagerTest, Deletes) {
+  {
+    ServiceManager sm;
+    TestServiceLoader* default_loader = new TestServiceLoader;
+    default_loader->set_context(&context_);
+    TestServiceLoader* url_loader1 = new TestServiceLoader;
+    TestServiceLoader* url_loader2 = new TestServiceLoader;
+    url_loader1->set_context(&context_);
+    url_loader2->set_context(&context_);
+    TestServiceLoader* scheme_loader1 = new TestServiceLoader;
+    TestServiceLoader* scheme_loader2 = new TestServiceLoader;
+    scheme_loader1->set_context(&context_);
+    scheme_loader2->set_context(&context_);
+    sm.set_default_loader(scoped_ptr<ServiceLoader>(default_loader));
+    sm.SetLoaderForURL(scoped_ptr<ServiceLoader>(url_loader1),
+                       GURL("test:test1"));
+    sm.SetLoaderForURL(scoped_ptr<ServiceLoader>(url_loader2),
+                       GURL("test:test1"));
+    sm.SetLoaderForScheme(scoped_ptr<ServiceLoader>(scheme_loader1), "test");
+    sm.SetLoaderForScheme(scoped_ptr<ServiceLoader>(scheme_loader2), "test");
+  }
+  EXPECT_EQ(5, context_.num_loader_deletes);
+}
+
 // Confirm that both urls and schemes can have their loaders explicitly set.
 TEST_F(ServiceManagerTest, SetLoaders) {
   ServiceManager sm;
-  TestServiceLoader default_loader;
-  TestServiceLoader url_loader;
-  TestServiceLoader scheme_loader;
-  sm.set_default_loader(&default_loader);
-  sm.SetLoaderForURL(&url_loader, GURL("test:test1"));
-  sm.SetLoaderForScheme(&scheme_loader, "test");
+  TestServiceLoader* default_loader = new TestServiceLoader;
+  TestServiceLoader* url_loader = new TestServiceLoader;
+  TestServiceLoader* scheme_loader = new TestServiceLoader;
+  sm.set_default_loader(scoped_ptr<ServiceLoader>(default_loader));
+  sm.SetLoaderForURL(scoped_ptr<ServiceLoader>(url_loader), GURL("test:test1"));
+  sm.SetLoaderForScheme(scoped_ptr<ServiceLoader>(scheme_loader), "test");
 
   // test::test1 should go to url_loader.
   InterfacePipe<TestService, AnyInterface> pipe1;
   sm.Connect(GURL("test:test1"), pipe1.handle_to_peer.Pass());
-  EXPECT_EQ(1, url_loader.num_loads());
-  EXPECT_EQ(0, scheme_loader.num_loads());
-  EXPECT_EQ(0, default_loader.num_loads());
+  EXPECT_EQ(1, url_loader->num_loads());
+  EXPECT_EQ(0, scheme_loader->num_loads());
+  EXPECT_EQ(0, default_loader->num_loads());
 
   // test::test2 should go to scheme loader.
   InterfacePipe<TestService, AnyInterface> pipe2;
   sm.Connect(GURL("test:test2"), pipe2.handle_to_peer.Pass());
-  EXPECT_EQ(1, url_loader.num_loads());
-  EXPECT_EQ(1, scheme_loader.num_loads());
-  EXPECT_EQ(0, default_loader.num_loads());
+  EXPECT_EQ(1, url_loader->num_loads());
+  EXPECT_EQ(1, scheme_loader->num_loads());
+  EXPECT_EQ(0, default_loader->num_loads());
 
   // http::test1 should go to default loader.
   InterfacePipe<TestService, AnyInterface> pipe3;
   sm.Connect(GURL("http:test1"), pipe3.handle_to_peer.Pass());
-  EXPECT_EQ(1, url_loader.num_loads());
-  EXPECT_EQ(1, scheme_loader.num_loads());
-  EXPECT_EQ(1, default_loader.num_loads());
+  EXPECT_EQ(1, url_loader->num_loads());
+  EXPECT_EQ(1, scheme_loader->num_loads());
+  EXPECT_EQ(1, default_loader->num_loads());
 }
 
 TEST_F(ServiceManagerTest, Interceptor) {
   ServiceManager sm;
-  TestServiceLoader default_loader;
   TestServiceInterceptor interceptor;
-  sm.set_default_loader(&default_loader);
+  TestServiceLoader* default_loader = new TestServiceLoader;
+  sm.set_default_loader(scoped_ptr<ServiceLoader>(default_loader));
   sm.SetInterceptor(&interceptor);
 
   std::string url("test:test3");
@@ -230,7 +276,7 @@
   sm.Connect(GURL(url), pipe1.handle_to_peer.Pass());
   EXPECT_EQ(1, interceptor.call_count());
   EXPECT_EQ(url, interceptor.url_spec());
-  EXPECT_EQ(1, default_loader.num_loads());
+  EXPECT_EQ(1, default_loader->num_loads());
 }
 
 }  // namespace mojo
diff --git a/mojo/services/native_viewport/native_viewport_android.h b/mojo/services/native_viewport/native_viewport_android.h
index 96ecd1f..c24e38e 100644
--- a/mojo/services/native_viewport/native_viewport_android.h
+++ b/mojo/services/native_viewport/native_viewport_android.h
@@ -5,7 +5,7 @@
 #ifndef MOJO_SERVICES_NATIVE_VIEWPORT_NATIVE_VIEWPORT_ANDROID_H_
 #define MOJO_SERVICES_NATIVE_VIEWPORT_NATIVE_VIEWPORT_ANDROID_H_
 
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/android/scoped_java_ref.h"
 #include "base/memory/weak_ptr.h"
 #include "mojo/services/native_viewport/native_viewport.h"
diff --git a/mojo/services/native_viewport/native_viewport_export.h b/mojo/services/native_viewport/native_viewport_export.h
index 647b689..4870c56 100644
--- a/mojo/services/native_viewport/native_viewport_export.h
+++ b/mojo/services/native_viewport/native_viewport_export.h
@@ -5,6 +5,8 @@
 #ifndef MOJO_SERVICES_NATIVE_VIEWPORT_EXPORT_H_
 #define MOJO_SERVICES_NATIVE_VIEWPORT_EXPORT_H_
 
+#if defined(COMPONENT_BUILD)
+
 #if defined(WIN32)
 
 #if defined(MOJO_NATIVE_VIEWPORT_IMPLEMENTATION)
@@ -23,4 +25,8 @@
 
 #endif  // defined(WIN32)
 
+#else  // !defined(COMPONENT_BUILD)
+#define MOJO_NATIVE_VIEWPORT_EXPORT
+#endif
+
 #endif  // MOJO_SERVICES_NATIVE_VIEWPORT_EXPORT_H_
diff --git a/mojo/services/native_viewport/native_viewport_service.cc b/mojo/services/native_viewport/native_viewport_service.cc
index 024a3bb..5625aa1 100644
--- a/mojo/services/native_viewport/native_viewport_service.cc
+++ b/mojo/services/native_viewport/native_viewport_service.cc
@@ -28,7 +28,9 @@
 }
 
 class NativeViewportImpl
-    : public Service<mojo::NativeViewport, NativeViewportImpl, shell::Context>,
+    : public ServiceConnection<mojo::NativeViewport,
+                               NativeViewportImpl,
+                               shell::Context>,
       public NativeViewportDelegate {
  public:
   NativeViewportImpl()
@@ -186,9 +188,9 @@
     CreateNativeViewportService(mojo::shell::Context* context,
                                 mojo::ScopedShellHandle shell_handle) {
   mojo::Application* app = new mojo::Application(shell_handle.Pass());
-  app->AddServiceFactory(
-    new mojo::ServiceFactory<mojo::services::NativeViewportImpl,
-                             mojo::shell::Context>(context));
+  app->AddServiceConnector(
+      new mojo::ServiceConnector<mojo::services::NativeViewportImpl,
+                                 mojo::shell::Context>(context));
   return app;
 }
 
diff --git a/mojo/public/tools/bindings/pylib/generate/__init__.py b/mojo/services/public/cpp/view_manager/lib/view.cc
similarity index 100%
copy from mojo/public/tools/bindings/pylib/generate/__init__.py
copy to mojo/services/public/cpp/view_manager/lib/view.cc
diff --git a/mojo/public/tools/bindings/pylib/generate/__init__.py b/mojo/services/public/cpp/view_manager/lib/view_manager.cc
similarity index 100%
copy from mojo/public/tools/bindings/pylib/generate/__init__.py
copy to mojo/services/public/cpp/view_manager/lib/view_manager.cc
diff --git a/mojo/public/tools/bindings/pylib/generate/__init__.py b/mojo/services/public/cpp/view_manager/lib/view_tree_host.cc
similarity index 100%
copy from mojo/public/tools/bindings/pylib/generate/__init__.py
copy to mojo/services/public/cpp/view_manager/lib/view_tree_host.cc
diff --git a/mojo/services/public/cpp/view_manager/lib/view_tree_node.cc b/mojo/services/public/cpp/view_manager/lib/view_tree_node.cc
new file mode 100644
index 0000000..9194dc4
--- /dev/null
+++ b/mojo/services/public/cpp/view_manager/lib/view_tree_node.cc
@@ -0,0 +1,144 @@
+// 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.
+
+#include "mojo/services/public/cpp/view_manager/view_tree_node.h"
+
+#include "mojo/services/public/cpp/view_manager/lib/view_tree_node_private.h"
+#include "mojo/services/public/cpp/view_manager/view_tree_node_observer.h"
+
+namespace mojo {
+namespace services {
+namespace view_manager {
+
+void NotifyViewTreeChangeAtReceiver(
+    ViewTreeNode* receiver,
+    const ViewTreeNodeObserver::TreeChangeParams& params) {
+  ViewTreeNodeObserver::TreeChangeParams local_params = params;
+  local_params.receiver = receiver;
+  FOR_EACH_OBSERVER(ViewTreeNodeObserver,
+                    *ViewTreeNodePrivate(receiver).observers(),
+                    OnTreeChange(local_params));
+}
+
+void NotifyViewTreeChangeUp(
+    ViewTreeNode* start_at,
+    const ViewTreeNodeObserver::TreeChangeParams& params) {
+  for (ViewTreeNode* current = start_at; current; current = current->parent())
+    NotifyViewTreeChangeAtReceiver(current, params);
+}
+
+void NotifyViewTreeChangeDown(
+    ViewTreeNode* start_at,
+    const ViewTreeNodeObserver::TreeChangeParams& params) {
+  NotifyViewTreeChangeAtReceiver(start_at, params);
+  ViewTreeNode::Children::const_iterator it = start_at->children().begin();
+  for (; it != start_at->children().end(); ++it)
+    NotifyViewTreeChangeDown(*it, params);
+}
+
+void NotifyViewTreeChange(
+    const ViewTreeNodeObserver::TreeChangeParams& params) {
+  NotifyViewTreeChangeDown(params.target, params);
+  switch (params.phase) {
+  case ViewTreeNodeObserver::DISPOSITION_CHANGING:
+    if (params.old_parent)
+      NotifyViewTreeChangeUp(params.old_parent, params);
+    break;
+  case ViewTreeNodeObserver::DISPOSITION_CHANGED:
+    if (params.new_parent)
+      NotifyViewTreeChangeUp(params.new_parent, params);
+    break;
+  default:
+    NOTREACHED();
+    break;
+  }
+}
+
+class ScopedTreeNotifier {
+ public:
+  ScopedTreeNotifier(ViewTreeNode* target,
+                     ViewTreeNode* old_parent,
+                     ViewTreeNode* new_parent) {
+    params_.target = target;
+    params_.old_parent = old_parent;
+    params_.new_parent = new_parent;
+    NotifyViewTreeChange(params_);
+  }
+  ~ScopedTreeNotifier() {
+    params_.phase = ViewTreeNodeObserver::DISPOSITION_CHANGED;
+    NotifyViewTreeChange(params_);
+  }
+
+ private:
+  ViewTreeNodeObserver::TreeChangeParams params_;
+
+  DISALLOW_COPY_AND_ASSIGN(ScopedTreeNotifier);
+};
+
+void RemoveChildImpl(ViewTreeNode* child, ViewTreeNode::Children* children) {
+  ViewTreeNode::Children::iterator it =
+      std::find(children->begin(), children->end(), child);
+  if (it != children->end()) {
+    children->erase(it);
+    ViewTreeNodePrivate(child).ClearParent();
+  }
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// ViewTreeNode, public:
+
+ViewTreeNode::ViewTreeNode() : owned_by_parent_(true), parent_(NULL) {}
+
+ViewTreeNode::~ViewTreeNode() {
+  while (!children_.empty()) {
+    ViewTreeNode* child = children_.front();
+    if (child->owned_by_parent_) {
+      delete child;
+      // Deleting the child also removes it from our child list.
+      DCHECK(std::find(children_.begin(), children_.end(), child) ==
+             children_.end());
+    } else {
+      RemoveChild(child);
+    }
+  }
+
+  if (parent_)
+    parent_->RemoveChild(this);
+
+}
+
+void ViewTreeNode::AddObserver(ViewTreeNodeObserver* observer) {
+  observers_.AddObserver(observer);
+}
+
+void ViewTreeNode::RemoveObserver(ViewTreeNodeObserver* observer) {
+  observers_.RemoveObserver(observer);
+}
+
+void ViewTreeNode::AddChild(ViewTreeNode* child) {
+  ScopedTreeNotifier notifier(child, child->parent(), this);
+  if (child->parent())
+    RemoveChildImpl(child, &child->parent_->children_);
+  children_.push_back(child);
+  child->parent_ = this;
+}
+
+void ViewTreeNode::RemoveChild(ViewTreeNode* child) {
+  DCHECK_EQ(this, child->parent());
+  ScopedTreeNotifier(child, this, NULL);
+  RemoveChildImpl(child, &children_);
+}
+
+bool ViewTreeNode::Contains(ViewTreeNode* child) const {
+  for (ViewTreeNode* p = child->parent(); p; p = p->parent()) {
+    if (p == this)
+      return true;
+  }
+  return false;
+}
+
+}  // namespace view_manager
+}  // namespace services
+}  // namespace mojo
+
diff --git a/mojo/services/public/cpp/view_manager/lib/view_tree_node_observer.cc b/mojo/services/public/cpp/view_manager/lib/view_tree_node_observer.cc
new file mode 100644
index 0000000..607269c
--- /dev/null
+++ b/mojo/services/public/cpp/view_manager/lib/view_tree_node_observer.cc
@@ -0,0 +1,26 @@
+// 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.
+
+#include "mojo/services/public/cpp/view_manager/view_tree_node_observer.h"
+
+#include "base/basictypes.h"
+
+namespace mojo {
+namespace services {
+namespace view_manager {
+
+////////////////////////////////////////////////////////////////////////////////
+// ViewTreeNodeObserver, public:
+
+ViewTreeNodeObserver::TreeChangeParams::TreeChangeParams()
+    : target(NULL),
+      old_parent(NULL),
+      new_parent(NULL),
+      receiver(NULL),
+      phase(ViewTreeNodeObserver::DISPOSITION_CHANGING) {}
+
+}  // namespace view_manager
+}  // namespace services
+}  // namespace mojo
+
diff --git a/mojo/services/public/cpp/view_manager/lib/view_tree_node_private.cc b/mojo/services/public/cpp/view_manager/lib/view_tree_node_private.cc
new file mode 100644
index 0000000..a1c3a40
--- /dev/null
+++ b/mojo/services/public/cpp/view_manager/lib/view_tree_node_private.cc
@@ -0,0 +1,20 @@
+// 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.
+
+#include "mojo/services/public/cpp/view_manager/lib/view_tree_node_private.h"
+
+namespace mojo {
+namespace services {
+namespace view_manager {
+
+ViewTreeNodePrivate::ViewTreeNodePrivate(ViewTreeNode* node)
+    : node_(node) {
+}
+
+ViewTreeNodePrivate::~ViewTreeNodePrivate() {
+}
+
+}  // namespace view_manager
+}  // namespace services
+}  // namespace mojo
diff --git a/mojo/services/public/cpp/view_manager/lib/view_tree_node_private.h b/mojo/services/public/cpp/view_manager/lib/view_tree_node_private.h
new file mode 100644
index 0000000..33be9f0
--- /dev/null
+++ b/mojo/services/public/cpp/view_manager/lib/view_tree_node_private.h
@@ -0,0 +1,37 @@
+// 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.
+
+#ifndef MOJO_SERVICES_PUBLIC_CPP_VIEW_MANAGER_LIB_VIEW_TREE_NODE_PRIVATE_H_
+#define MOJO_SERVICES_PUBLIC_CPP_VIEW_MANAGER_LIB_VIEW_TREE_NODE_PRIVATE_H_
+
+#include <vector>
+
+#include "base/basictypes.h"
+
+#include "mojo/services/public/cpp/view_manager/view_tree_node.h"
+
+namespace mojo {
+namespace services {
+namespace view_manager {
+
+class ViewTreeNodePrivate {
+ public:
+  explicit ViewTreeNodePrivate(ViewTreeNode* node);
+  ~ViewTreeNodePrivate();
+
+  ObserverList<ViewTreeNodeObserver>* observers() { return &node_->observers_; }
+
+  void ClearParent() { node_->parent_ = NULL; }
+
+ private:
+  ViewTreeNode* node_;
+
+  DISALLOW_COPY_AND_ASSIGN(ViewTreeNodePrivate);
+};
+
+}  // namespace view_manager
+}  // namespace services
+}  // namespace mojo
+
+#endif  // MOJO_SERVICES_PUBLIC_CPP_VIEW_MANAGER_LIB_VIEW_TREE_NODE_PRIVATE_H_
diff --git a/mojo/public/tools/bindings/pylib/generate/__init__.py b/mojo/services/public/cpp/view_manager/tests/view_manager_unittest.cc
similarity index 100%
copy from mojo/public/tools/bindings/pylib/generate/__init__.py
copy to mojo/services/public/cpp/view_manager/tests/view_manager_unittest.cc
diff --git a/mojo/public/tools/bindings/pylib/generate/__init__.py b/mojo/services/public/cpp/view_manager/tests/view_tree_host_unittest.cc
similarity index 100%
copy from mojo/public/tools/bindings/pylib/generate/__init__.py
copy to mojo/services/public/cpp/view_manager/tests/view_tree_host_unittest.cc
diff --git a/mojo/services/public/cpp/view_manager/tests/view_tree_node_unittest.cc b/mojo/services/public/cpp/view_manager/tests/view_tree_node_unittest.cc
new file mode 100644
index 0000000..54349ee
--- /dev/null
+++ b/mojo/services/public/cpp/view_manager/tests/view_tree_node_unittest.cc
@@ -0,0 +1,330 @@
+// 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.
+
+#include "mojo/services/public/cpp/view_manager/view_tree_node.h"
+
+#include "base/logging.h"
+#include "mojo/services/public/cpp/view_manager/view_tree_node_observer.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace mojo {
+namespace services {
+namespace view_manager {
+
+// ViewTreeNode ----------------------------------------------------------------
+
+typedef testing::Test ViewTreeNodeTest;
+
+TEST_F(ViewTreeNodeTest, AddChild) {
+  ViewTreeNode v1;
+  ViewTreeNode* v11 = new ViewTreeNode;
+  v1.AddChild(v11);
+  EXPECT_EQ(1U, v1.children().size());
+}
+
+TEST_F(ViewTreeNodeTest, RemoveChild) {
+  ViewTreeNode v1;
+  ViewTreeNode* v11 = new ViewTreeNode;
+  v1.AddChild(v11);
+  EXPECT_EQ(1U, v1.children().size());
+  v1.RemoveChild(v11);
+  EXPECT_EQ(0U, v1.children().size());
+}
+
+TEST_F(ViewTreeNodeTest, Reparent) {
+  ViewTreeNode v1;
+  ViewTreeNode v2;
+  ViewTreeNode* v11 = new ViewTreeNode;
+  v1.AddChild(v11);
+  EXPECT_EQ(1U, v1.children().size());
+  v2.AddChild(v11);
+  EXPECT_EQ(1U, v2.children().size());
+  EXPECT_EQ(0U, v1.children().size());
+}
+
+TEST_F(ViewTreeNodeTest, Contains) {
+  ViewTreeNode v1;
+
+  // Direct descendant.
+  ViewTreeNode* v11 = new ViewTreeNode;
+  v1.AddChild(v11);
+  EXPECT_TRUE(v1.Contains(v11));
+
+  // Indirect descendant.
+  ViewTreeNode* v111 = new ViewTreeNode;
+  v11->AddChild(v111);
+  EXPECT_TRUE(v1.Contains(v111));
+}
+
+// ViewTreeNodeObserver --------------------------------------------------------
+
+typedef testing::Test ViewTreeNodeObserverTest;
+
+bool TreeChangeParamsMatch(const ViewTreeNodeObserver::TreeChangeParams& lhs,
+                           const ViewTreeNodeObserver::TreeChangeParams& rhs) {
+  return lhs.target == rhs.target &&  lhs.old_parent == rhs.old_parent &&
+      lhs.new_parent == rhs.new_parent && lhs.receiver == rhs.receiver &&
+      lhs.phase == rhs.phase;
+}
+
+class TreeChangeObserver : public ViewTreeNodeObserver {
+ public:
+  explicit TreeChangeObserver(ViewTreeNode* observee) : observee_(observee) {
+    observee_->AddObserver(this);
+  }
+  virtual ~TreeChangeObserver() {
+    observee_->RemoveObserver(this);
+  }
+
+  void Reset() {
+    received_params_.clear();
+  }
+
+  const std::vector<TreeChangeParams>& received_params() {
+    return received_params_;
+  }
+
+ private:
+  // Overridden from ViewTreeNodeObserver:
+  virtual void OnTreeChange(const TreeChangeParams& params) OVERRIDE {
+    received_params_.push_back(params);
+  }
+
+  ViewTreeNode* observee_;
+  std::vector<TreeChangeParams> received_params_;
+
+  DISALLOW_COPY_AND_ASSIGN(TreeChangeObserver);
+};
+
+// Adds/Removes v11 to v1.
+TEST_F(ViewTreeNodeObserverTest, TreeChange_SimpleAddRemove) {
+  ViewTreeNode v1;
+  TreeChangeObserver o1(&v1);
+  EXPECT_TRUE(o1.received_params().empty());
+
+  ViewTreeNode v11;
+  v11.set_owned_by_parent(false);
+  TreeChangeObserver o11(&v11);
+  EXPECT_TRUE(o11.received_params().empty());
+
+  // Add.
+
+  v1.AddChild(&v11);
+
+  EXPECT_EQ(1U, o1.received_params().size());
+  ViewTreeNodeObserver::TreeChangeParams p1;
+  p1.target = &v11;
+  p1.receiver = &v1;
+  p1.old_parent = NULL;
+  p1.new_parent = &v1;
+  p1.phase = ViewTreeNodeObserver::DISPOSITION_CHANGED;
+  EXPECT_TRUE(TreeChangeParamsMatch(p1, o1.received_params().back()));
+
+  EXPECT_EQ(2U, o11.received_params().size());
+  ViewTreeNodeObserver::TreeChangeParams p11 = p1;
+  p11.receiver = &v11;
+  p11.phase = ViewTreeNodeObserver::DISPOSITION_CHANGING;
+  EXPECT_TRUE(TreeChangeParamsMatch(p11, o11.received_params().front()));
+  p11.phase = ViewTreeNodeObserver::DISPOSITION_CHANGED;
+  EXPECT_TRUE(TreeChangeParamsMatch(p11, o11.received_params().back()));
+
+  o1.Reset();
+  o11.Reset();
+  EXPECT_TRUE(o1.received_params().empty());
+  EXPECT_TRUE(o11.received_params().empty());
+
+  // Remove.
+
+  v1.RemoveChild(&v11);
+
+  EXPECT_EQ(1U, o1.received_params().size());
+  p1.target = &v11;
+  p1.receiver = &v1;
+  p1.old_parent = &v1;
+  p1.new_parent = NULL;
+  p1.phase = ViewTreeNodeObserver::DISPOSITION_CHANGING;
+  EXPECT_TRUE(TreeChangeParamsMatch(p1, o1.received_params().back()));
+
+  EXPECT_EQ(2U, o11.received_params().size());
+  p11 = p1;
+  p11.receiver = &v11;
+  EXPECT_TRUE(TreeChangeParamsMatch(p11, o11.received_params().front()));
+  p11.phase = ViewTreeNodeObserver::DISPOSITION_CHANGED;
+  EXPECT_TRUE(TreeChangeParamsMatch(p11, o11.received_params().back()));
+}
+
+// Creates these two trees:
+// v1
+//  +- v11
+// v111
+//  +- v1111
+//  +- v1112
+// Then adds/removes v111 from v11.
+TEST_F(ViewTreeNodeObserverTest, TreeChange_NestedAddRemove) {
+  ViewTreeNode v1, v11, v111, v1111, v1112;
+
+  // Root tree.
+  v11.set_owned_by_parent(false);
+  v1.AddChild(&v11);
+
+  // Tree to be attached.
+  v111.set_owned_by_parent(false);
+  v1111.set_owned_by_parent(false);
+  v111.AddChild(&v1111);
+  v1112.set_owned_by_parent(false);
+  v111.AddChild(&v1112);
+
+  TreeChangeObserver o1(&v1), o11(&v11), o111(&v111), o1111(&v1111),
+      o1112(&v1112);
+  ViewTreeNodeObserver::TreeChangeParams p1, p11, p111, p1111, p1112;
+
+  // Add.
+
+  v11.AddChild(&v111);
+
+  EXPECT_EQ(1U, o1.received_params().size());
+  p1.target = &v111;
+  p1.receiver = &v1;
+  p1.old_parent = NULL;
+  p1.new_parent = &v11;
+  p1.phase = ViewTreeNodeObserver::DISPOSITION_CHANGED;
+  EXPECT_TRUE(TreeChangeParamsMatch(p1, o1.received_params().back()));
+
+  EXPECT_EQ(1U, o11.received_params().size());
+  p11 = p1;
+  p11.receiver = &v11;
+  EXPECT_TRUE(TreeChangeParamsMatch(p11, o11.received_params().back()));
+
+  EXPECT_EQ(2U, o111.received_params().size());
+  p111 = p11;
+  p111.receiver = &v111;
+  p111.phase = ViewTreeNodeObserver::DISPOSITION_CHANGING;
+  EXPECT_TRUE(TreeChangeParamsMatch(p111, o111.received_params().front()));
+  p111.phase = ViewTreeNodeObserver::DISPOSITION_CHANGED;
+  EXPECT_TRUE(TreeChangeParamsMatch(p111, o111.received_params().back()));
+
+  EXPECT_EQ(2U, o1111.received_params().size());
+  p1111 = p111;
+  p1111.receiver = &v1111;
+  p1111.phase = ViewTreeNodeObserver::DISPOSITION_CHANGING;
+  EXPECT_TRUE(TreeChangeParamsMatch(p1111, o1111.received_params().front()));
+  p1111.phase = ViewTreeNodeObserver::DISPOSITION_CHANGED;
+  EXPECT_TRUE(TreeChangeParamsMatch(p1111, o1111.received_params().back()));
+
+  EXPECT_EQ(2U, o1112.received_params().size());
+  p1112 = p111;
+  p1112.receiver = &v1112;
+  p1112.phase = ViewTreeNodeObserver::DISPOSITION_CHANGING;
+  EXPECT_TRUE(TreeChangeParamsMatch(p1112, o1112.received_params().front()));
+  p1112.phase = ViewTreeNodeObserver::DISPOSITION_CHANGED;
+  EXPECT_TRUE(TreeChangeParamsMatch(p1112, o1112.received_params().back()));
+
+  // Remove.
+  o1.Reset();
+  o11.Reset();
+  o111.Reset();
+  o1111.Reset();
+  o1112.Reset();
+  EXPECT_TRUE(o1.received_params().empty());
+  EXPECT_TRUE(o11.received_params().empty());
+  EXPECT_TRUE(o111.received_params().empty());
+  EXPECT_TRUE(o1111.received_params().empty());
+  EXPECT_TRUE(o1112.received_params().empty());
+
+  v11.RemoveChild(&v111);
+
+  EXPECT_EQ(1U, o1.received_params().size());
+  p1.target = &v111;
+  p1.receiver = &v1;
+  p1.old_parent = &v11;
+  p1.new_parent = NULL;
+  p1.phase = ViewTreeNodeObserver::DISPOSITION_CHANGING;
+  EXPECT_TRUE(TreeChangeParamsMatch(p1, o1.received_params().back()));
+
+  EXPECT_EQ(1U, o11.received_params().size());
+  p11 = p1;
+  p11.receiver = &v11;
+  EXPECT_TRUE(TreeChangeParamsMatch(p11, o11.received_params().back()));
+
+  EXPECT_EQ(2U, o111.received_params().size());
+  p111 = p11;
+  p111.receiver = &v111;
+  p111.phase = ViewTreeNodeObserver::DISPOSITION_CHANGING;
+  EXPECT_TRUE(TreeChangeParamsMatch(p111, o111.received_params().front()));
+  p111.phase = ViewTreeNodeObserver::DISPOSITION_CHANGED;
+  EXPECT_TRUE(TreeChangeParamsMatch(p111, o111.received_params().back()));
+
+  EXPECT_EQ(2U, o1111.received_params().size());
+  p1111 = p111;
+  p1111.receiver = &v1111;
+  p1111.phase = ViewTreeNodeObserver::DISPOSITION_CHANGING;
+  EXPECT_TRUE(TreeChangeParamsMatch(p1111, o1111.received_params().front()));
+  p1111.phase = ViewTreeNodeObserver::DISPOSITION_CHANGED;
+  EXPECT_TRUE(TreeChangeParamsMatch(p1111, o1111.received_params().back()));
+
+  EXPECT_EQ(2U, o1112.received_params().size());
+  p1112 = p111;
+  p1112.receiver = &v1112;
+  p1112.phase = ViewTreeNodeObserver::DISPOSITION_CHANGING;
+  EXPECT_TRUE(TreeChangeParamsMatch(p1112, o1112.received_params().front()));
+  p1112.phase = ViewTreeNodeObserver::DISPOSITION_CHANGED;
+  EXPECT_TRUE(TreeChangeParamsMatch(p1112, o1112.received_params().back()));
+}
+
+TEST_F(ViewTreeNodeObserverTest, TreeChange_Reparent) {
+  ViewTreeNode v1, v11, v12, v111;
+  v11.set_owned_by_parent(false);
+  v111.set_owned_by_parent(false);
+  v12.set_owned_by_parent(false);
+  v1.AddChild(&v11);
+  v1.AddChild(&v12);
+  v11.AddChild(&v111);
+
+  TreeChangeObserver o1(&v1), o11(&v11), o12(&v12), o111(&v111);
+
+  // Reparent.
+  v12.AddChild(&v111);
+
+  // v1 (root) should see both changing and changed notifications.
+  EXPECT_EQ(2U, o1.received_params().size());
+  ViewTreeNodeObserver::TreeChangeParams p1;
+  p1.target = &v111;
+  p1.receiver = &v1;
+  p1.old_parent = &v11;
+  p1.new_parent = &v12;
+  p1.phase = ViewTreeNodeObserver::DISPOSITION_CHANGING;
+  EXPECT_TRUE(TreeChangeParamsMatch(p1, o1.received_params().front()));
+  p1.phase = ViewTreeNodeObserver::DISPOSITION_CHANGED;
+  EXPECT_TRUE(TreeChangeParamsMatch(p1, o1.received_params().back()));
+
+  // v11 should see changing notifications.
+  EXPECT_EQ(1U, o11.received_params().size());
+  ViewTreeNodeObserver::TreeChangeParams p11;
+  p11 = p1;
+  p11.receiver = &v11;
+  p11.phase = ViewTreeNodeObserver::DISPOSITION_CHANGING;
+  EXPECT_TRUE(TreeChangeParamsMatch(p11, o11.received_params().back()));
+
+  // v12 should see changed notifications.
+  EXPECT_EQ(1U, o12.received_params().size());
+  ViewTreeNodeObserver::TreeChangeParams p12;
+  p12 = p1;
+  p12.receiver = &v12;
+  p12.phase = ViewTreeNodeObserver::DISPOSITION_CHANGED;
+  EXPECT_TRUE(TreeChangeParamsMatch(p12, o12.received_params().back()));
+
+  // v111 should see both changing and changed notifications.
+  EXPECT_EQ(2U, o111.received_params().size());
+  ViewTreeNodeObserver::TreeChangeParams p111;
+  p111 = p1;
+  p111.receiver = &v111;
+  p111.phase = ViewTreeNodeObserver::DISPOSITION_CHANGING;
+  EXPECT_TRUE(TreeChangeParamsMatch(p111, o111.received_params().front()));
+  p111.phase = ViewTreeNodeObserver::DISPOSITION_CHANGED;
+  EXPECT_TRUE(TreeChangeParamsMatch(p111, o111.received_params().back()));
+}
+
+}  // namespace view_manager
+}  // namespace services
+}  // namespace mojo
diff --git a/mojo/public/tools/bindings/pylib/generate/__init__.py b/mojo/services/public/cpp/view_manager/tests/view_unittest.cc
similarity index 100%
copy from mojo/public/tools/bindings/pylib/generate/__init__.py
copy to mojo/services/public/cpp/view_manager/tests/view_unittest.cc
diff --git a/mojo/services/public/cpp/view_manager/view.h b/mojo/services/public/cpp/view_manager/view.h
new file mode 100644
index 0000000..a0bba82
--- /dev/null
+++ b/mojo/services/public/cpp/view_manager/view.h
@@ -0,0 +1,24 @@
+// 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.
+
+#ifndef MOJO_SERVICES_PUBLIC_CPP_VIEW_MANAGER_VIEW_H_
+#define MOJO_SERVICES_PUBLIC_CPP_VIEW_MANAGER_VIEW_H_
+
+#include "base/basictypes.h"
+
+namespace mojo {
+namespace services {
+namespace view_manager {
+
+class View {
+ public:
+ private:
+  DISALLOW_COPY_AND_ASSIGN(View);
+};
+
+}  // namespace view_manager
+}  // namespace services
+}  // namespace mojo
+
+#endif  // MOJO_SERVICES_PUBLIC_CPP_VIEW_MANAGER_VIEW_H_
diff --git a/mojo/services/public/cpp/view_manager/view_manager.h b/mojo/services/public/cpp/view_manager/view_manager.h
new file mode 100644
index 0000000..45ab0e2
--- /dev/null
+++ b/mojo/services/public/cpp/view_manager/view_manager.h
@@ -0,0 +1,24 @@
+// 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.
+
+#ifndef MOJO_SERVICES_PUBLIC_CPP_VIEW_MANAGER_VIEW_MANAGER_H_
+#define MOJO_SERVICES_PUBLIC_CPP_VIEW_MANAGER_VIEW_MANAGER_H_
+
+#include "base/basictypes.h"
+
+namespace mojo {
+namespace services {
+namespace view_manager {
+
+class ViewManager {
+ public:
+ private:
+  DISALLOW_COPY_AND_ASSIGN(ViewManager);
+};
+
+}  // namespace view_manager
+}  // namespace services
+}  // namespace mojo
+
+#endif  // MOJO_SERVICES_PUBLIC_CPP_VIEW_MANAGER_VIEW_MANAGER_H_
diff --git a/mojo/services/public/cpp/view_manager/view_tree_host.h b/mojo/services/public/cpp/view_manager/view_tree_host.h
new file mode 100644
index 0000000..13fb6dd
--- /dev/null
+++ b/mojo/services/public/cpp/view_manager/view_tree_host.h
@@ -0,0 +1,24 @@
+// 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.
+
+#ifndef MOJO_SERVICES_PUBLIC_CPP_VIEW_MANAGER_VIEW_TREE_HOST_H_
+#define MOJO_SERVICES_PUBLIC_CPP_VIEW_MANAGER_VIEW_TREE_HOST_H_
+
+#include "base/basictypes.h"
+
+namespace mojo {
+namespace services {
+namespace view_manager {
+
+class ViewTreeHost {
+ public:
+ private:
+  DISALLOW_COPY_AND_ASSIGN(ViewTreeHost);
+};
+
+}  // namespace view_manager
+}  // namespace services
+}  // namespace mojo
+
+#endif  // MOJO_SERVICES_PUBLIC_CPP_VIEW_MANAGER_VIEW_TREE_HOST_H_
diff --git a/mojo/services/public/cpp/view_manager/view_tree_node.h b/mojo/services/public/cpp/view_manager/view_tree_node.h
new file mode 100644
index 0000000..42f27e7
--- /dev/null
+++ b/mojo/services/public/cpp/view_manager/view_tree_node.h
@@ -0,0 +1,61 @@
+// 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.
+
+#ifndef MOJO_SERVICES_PUBLIC_CPP_VIEW_MANAGER_VIEW_TREE_NODE_H_
+#define MOJO_SERVICES_PUBLIC_CPP_VIEW_MANAGER_VIEW_TREE_NODE_H_
+
+#include <vector>
+
+#include "base/basictypes.h"
+#include "base/observer_list.h"
+
+namespace mojo {
+namespace services {
+namespace view_manager {
+
+class ViewTreeNodeObserver;
+
+class ViewTreeNode {
+ public:
+  typedef std::vector<ViewTreeNode*> Children;
+
+  ViewTreeNode();
+  ~ViewTreeNode();
+
+  // Configuration.
+  void set_owned_by_parent(bool owned_by_parent) {
+    owned_by_parent_ = owned_by_parent;
+  }
+
+  // Observation.
+  void AddObserver(ViewTreeNodeObserver* observer);
+  void RemoveObserver(ViewTreeNodeObserver* observer);
+
+  // Tree.
+  ViewTreeNode* parent() { return parent_; }
+  const ViewTreeNode* parent() const { return parent_; }
+  const Children& children() const { return children_; }
+
+  void AddChild(ViewTreeNode* child);
+  void RemoveChild(ViewTreeNode* child);
+
+  bool Contains(ViewTreeNode* child) const;
+
+ private:
+  friend class ViewTreeNodePrivate;
+
+  bool owned_by_parent_;
+  ViewTreeNode* parent_;
+  Children children_;
+
+  ObserverList<ViewTreeNodeObserver> observers_;
+
+  DISALLOW_COPY_AND_ASSIGN(ViewTreeNode);
+};
+
+}  // namespace view_manager
+}  // namespace services
+}  // namespace mojo
+
+#endif  // MOJO_SERVICES_PUBLIC_CPP_VIEW_MANAGER_VIEW_TREE_NODE_H_
diff --git a/mojo/services/public/cpp/view_manager/view_tree_node_observer.h b/mojo/services/public/cpp/view_manager/view_tree_node_observer.h
new file mode 100644
index 0000000..4b4e6e0
--- /dev/null
+++ b/mojo/services/public/cpp/view_manager/view_tree_node_observer.h
@@ -0,0 +1,44 @@
+// 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.
+
+#ifndef MOJO_SERVICES_PUBLIC_CPP_VIEW_MANAGER_VIEW_TREE_NODE_OBSERVER_H_
+#define MOJO_SERVICES_PUBLIC_CPP_VIEW_MANAGER_VIEW_TREE_NODE_OBSERVER_H_
+
+#include <vector>
+
+#include "base/basictypes.h"
+
+namespace mojo {
+namespace services {
+namespace view_manager {
+
+class ViewTreeNode;
+
+class ViewTreeNodeObserver {
+ public:
+  enum DispositionChangePhase {
+    DISPOSITION_CHANGING,
+    DISPOSITION_CHANGED
+  };
+
+  struct TreeChangeParams {
+    TreeChangeParams();
+    ViewTreeNode* target;
+    ViewTreeNode* old_parent;
+    ViewTreeNode* new_parent;
+    ViewTreeNode* receiver;
+    DispositionChangePhase phase;
+  };
+
+  virtual void OnTreeChange(const TreeChangeParams& params) {}
+
+ protected:
+  virtual ~ViewTreeNodeObserver() {}
+};
+
+}  // namespace view_manager
+}  // namespace services
+}  // namespace mojo
+
+#endif  // MOJO_SERVICES_PUBLIC_CPP_VIEW_MANAGER_VIEW_TREE_NODE_OBSERVER_H_
diff --git a/mojo/services/public/interfaces/view_manager/view_manager.mojom b/mojo/services/public/interfaces/view_manager/view_manager.mojom
new file mode 100644
index 0000000..ef5dcf3
--- /dev/null
+++ b/mojo/services/public/interfaces/view_manager/view_manager.mojom
@@ -0,0 +1,54 @@
+// 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.
+
+module mojo.services.view_manager {
+
+// Functions that mutate the hierarchy take a |change_id|. |change_id| is an
+// arbitrary value assigned by the client originating the change. It may be
+// used by the client originating the change to later identify the change in
+// an OnNodeHierarchyChanged callback. |change_id| is only passed to the client
+// that originated the change; all other clients get a value of 0.
+//
+// Nodes are identified by a uint32. The upper 16 bits are the connection id,
+// and the lower 16 the id assigned by the client. CreateNode() only takes a
+// uint16 as the connection id of the originating connection is used.
+//
+// The root node is identified with a connection id of 0, and value of 1.
+[Peer=ViewManagerClient]
+interface ViewManager {
+  // Creates a new node with the specified id. It is up to the client to ensure
+  // the id is unique to the connection (the id need not be globally unique).
+  CreateNode(uint16 node_id) => (bool success);
+
+  // Reparents a node. See description above class for details of |change_id|.
+  AddNode(uint32 parent, uint32 child, int32 change_id) => (bool success);
+
+  // Removes a view from its current parent.  See description above class for
+  // details of |change_id|.
+  RemoveNodeFromParent(uint32 node_id, int32 change_id) => (bool success);
+
+  // Creates a new view with the specified id. It is up to the client to ensure
+  // the id is unique to the connection (the id need not be globally unique).
+  // CreateView(uint16 view_id) => (bool success);
+
+  // Sets the view a node is showing.
+  // SetView(uint32 node, uint32 view) => (bool success);
+};
+
+[Peer=ViewManager]
+interface ViewManagerClient {
+  // Invoked once the connection has been established. |connection_id| is the id
+  // used to uniquely identify the connection.
+  OnConnectionEstablished(uint16 connection_id);
+
+  // Invoked when a change is done to the hierarchy. A value of 0 is used to
+  // identify a null node. For example, if the old_parent is NULL, 0 is
+  // supplied. See description above ViewManager for details on |change_id|.
+  OnNodeHierarchyChanged(uint32 node,
+                         uint32 new_parent,
+                         uint32 old_parent,
+                         int32 change_id);
+};
+
+}
diff --git a/mojo/services/view_manager/DEPS b/mojo/services/view_manager/DEPS
new file mode 100644
index 0000000..05af088
--- /dev/null
+++ b/mojo/services/view_manager/DEPS
@@ -0,0 +1,6 @@
+include_rules = [
+  "+mojo/services",
+  "+ui/aura",
+  "+ui/events",
+  "+ui/gfx",
+]
diff --git a/mojo/services/view_manager/ids.h b/mojo/services/view_manager/ids.h
new file mode 100644
index 0000000..257402b
--- /dev/null
+++ b/mojo/services/view_manager/ids.h
@@ -0,0 +1,71 @@
+// 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.
+
+#ifndef MOJO_SERVICES_VIEW_MANAGER_IDS_H_
+#define MOJO_SERVICES_VIEW_MANAGER_IDS_H_
+
+#include "mojo/services/view_manager/view_manager_export.h"
+
+namespace mojo {
+namespace services {
+namespace view_manager {
+
+// Adds a bit of type safety to node ids.
+struct MOJO_VIEW_MANAGER_EXPORT NodeId {
+  NodeId(uint16_t connection_id, uint16_t node_id)
+      : connection_id(connection_id),
+        node_id(node_id) {}
+  NodeId() : connection_id(0), node_id(0) {}
+
+  bool operator==(const NodeId& other) const {
+    return other.connection_id == connection_id &&
+        other.node_id == node_id;
+  }
+
+  uint16_t connection_id;
+  uint16_t node_id;
+};
+
+// Adds a bit of type safety to view ids.
+struct MOJO_VIEW_MANAGER_EXPORT ViewId {
+  ViewId(uint16_t connection_id, uint16_t view_id)
+      : connection_id(connection_id),
+        view_id(view_id) {}
+  ViewId() : connection_id(0), view_id(0) {}
+
+  bool operator==(const ViewId& other) const {
+    return other.connection_id == connection_id &&
+        other.view_id == view_id;
+  }
+
+  uint16_t connection_id;
+  uint16_t view_id;
+};
+
+// Functions for converting to/from structs and transport values.
+inline uint16_t FirstIdFromTransportId(uint32_t id) {
+  return static_cast<uint16_t>((id >> 16) & 0xFFFF);
+}
+
+inline uint16_t SecondIdFromTransportId(uint32_t id) {
+  return static_cast<uint16_t>(id & 0xFFFF);
+}
+
+inline NodeId NodeIdFromTransportId(uint32_t id) {
+  return NodeId(FirstIdFromTransportId(id), SecondIdFromTransportId(id));
+}
+
+inline uint32_t NodeIdToTransportId(const NodeId& id) {
+  return (id.connection_id << 16) | id.node_id;
+}
+
+inline ViewId ViewIdFromTransportId(uint32_t id) {
+  return ViewId(FirstIdFromTransportId(id), SecondIdFromTransportId(id));
+}
+
+}  // namespace view_manager
+}  // namespace services
+}  // namespace mojo
+
+#endif  // MOJO_SERVICES_VIEW_MANAGER_IDS_H_
diff --git a/mojo/services/view_manager/node.cc b/mojo/services/view_manager/node.cc
new file mode 100644
index 0000000..1457a7e
--- /dev/null
+++ b/mojo/services/view_manager/node.cc
@@ -0,0 +1,60 @@
+// 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.
+
+#include "mojo/services/view_manager/node.h"
+
+#include "mojo/services/view_manager/node_delegate.h"
+#include "ui/aura/window_property.h"
+
+DECLARE_WINDOW_PROPERTY_TYPE(mojo::services::view_manager::Node*);
+
+namespace mojo {
+namespace services {
+namespace view_manager {
+
+DEFINE_WINDOW_PROPERTY_KEY(Node*, kNodeKey, NULL);
+
+Node::Node(NodeDelegate* delegate, const NodeId& id)
+    : delegate_(delegate),
+      id_(id),
+      window_(NULL) {
+  DCHECK(delegate);  // Must provide a delegate.
+  window_.set_owned_by_parent(false);
+  window_.AddObserver(this);
+  window_.SetProperty(kNodeKey, this);
+}
+
+Node::~Node() {
+}
+
+Node* Node::GetParent() {
+  if (!window_.parent())
+    return NULL;
+  return window_.parent()->GetProperty(kNodeKey);
+}
+
+void Node::Add(Node* child) {
+  window_.AddChild(&child->window_);
+}
+
+void Node::Remove(Node* child) {
+  window_.RemoveChild(&child->window_);
+}
+
+void Node::OnWindowHierarchyChanged(
+    const aura::WindowObserver::HierarchyChangeParams& params) {
+  if (params.target != &window_ || params.receiver != &window_)
+    return;
+  NodeId new_parent_id;
+  if (params.new_parent)
+    new_parent_id = params.new_parent->GetProperty(kNodeKey)->id();
+  NodeId old_parent_id;
+  if (params.old_parent)
+    old_parent_id = params.old_parent->GetProperty(kNodeKey)->id();
+  delegate_->OnNodeHierarchyChanged(id_, new_parent_id, old_parent_id);
+}
+
+}  // namespace view_manager
+}  // namespace services
+}  // namespace mojo
diff --git a/mojo/services/view_manager/node.h b/mojo/services/view_manager/node.h
new file mode 100644
index 0000000..5892af0
--- /dev/null
+++ b/mojo/services/view_manager/node.h
@@ -0,0 +1,53 @@
+// 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.
+
+#ifndef MOJO_SERVICES_VIEW_MANAGER_NODE_H_
+#define MOJO_SERVICES_VIEW_MANAGER_NODE_H_
+
+#include "base/logging.h"
+#include "mojo/services/view_manager/ids.h"
+#include "mojo/services/view_manager/view_manager_export.h"
+#include "ui/aura/window.h"
+#include "ui/aura/window_observer.h"
+
+namespace mojo {
+namespace services {
+namespace view_manager {
+
+class NodeDelegate;
+
+// Represents a node in the graph. Delegate is informed of interesting events.
+class MOJO_VIEW_MANAGER_EXPORT Node : public aura::WindowObserver {
+ public:
+  Node(NodeDelegate* delegate, const NodeId& id);
+  virtual ~Node();
+
+  void set_view_id(const ViewId& view_id) { view_id_ = view_id; }
+  const ViewId& view_id() const { return view_id_; }
+
+  const NodeId& id() const { return id_; }
+
+  void Add(Node* child);
+  void Remove(Node* child);
+
+  Node* GetParent();
+
+ private:
+  // WindowObserver overrides:
+  virtual void OnWindowHierarchyChanged(
+      const aura::WindowObserver::HierarchyChangeParams& params) OVERRIDE;
+
+  NodeDelegate* delegate_;
+  const NodeId id_;
+  ViewId view_id_;
+  aura::Window window_;
+
+  DISALLOW_COPY_AND_ASSIGN(Node);
+};
+
+}  // namespace view_manager
+}  // namespace services
+}  // namespace mojo
+
+#endif  // MOJO_SERVICES_VIEW_MANAGER_NODE_H_
diff --git a/mojo/services/view_manager/node_delegate.h b/mojo/services/view_manager/node_delegate.h
new file mode 100644
index 0000000..3e34940
--- /dev/null
+++ b/mojo/services/view_manager/node_delegate.h
@@ -0,0 +1,31 @@
+// 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.
+
+#ifndef MOJO_SERVICES_VIEW_MANAGER_NODE_DELEGATE_H_
+#define MOJO_SERVICES_VIEW_MANAGER_NODE_DELEGATE_H_
+
+#include "mojo/services/view_manager/view_manager_export.h"
+
+namespace mojo {
+namespace services {
+namespace view_manager {
+
+struct NodeId;
+
+class MOJO_VIEW_MANAGER_EXPORT NodeDelegate {
+ public:
+  // Invoked when the hierarchy has changed.
+  virtual void OnNodeHierarchyChanged(const NodeId& node,
+                                      const NodeId& new_parent,
+                                      const NodeId& old_parent) = 0;
+
+ protected:
+  virtual ~NodeDelegate() {}
+};
+
+}  // namespace view_manager
+}  // namespace services
+}  // namespace mojo
+
+#endif  // MOJO_SERVICES_VIEW_MANAGER_NODE_DELEGATE_H_
diff --git a/mojo/services/view_manager/root_node_manager.cc b/mojo/services/view_manager/root_node_manager.cc
new file mode 100644
index 0000000..f35df3d
--- /dev/null
+++ b/mojo/services/view_manager/root_node_manager.cc
@@ -0,0 +1,106 @@
+// 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.
+
+#include "mojo/services/view_manager/root_node_manager.h"
+
+#include "base/logging.h"
+#include "mojo/services/view_manager/view_manager_connection.h"
+
+namespace mojo {
+namespace services {
+namespace view_manager {
+namespace {
+
+// Id for the root node.
+const uint16_t kRootId = 1;
+
+}  // namespace
+
+RootNodeManager::ScopedChange::ScopedChange(ViewManagerConnection* connection,
+                                            RootNodeManager* root,
+                                            int32_t change_id)
+    : root_(root) {
+  root_->PrepareForChange(connection, change_id);
+}
+
+RootNodeManager::ScopedChange::~ScopedChange() {
+  root_->FinishChange();
+}
+
+RootNodeManager::RootNodeManager()
+    : next_connection_id_(1),
+      root_(this, NodeId(0, kRootId)) {
+}
+
+RootNodeManager::~RootNodeManager() {
+}
+
+uint16_t RootNodeManager::GetAndAdvanceNextConnectionId() {
+  const uint16_t id = next_connection_id_++;
+  DCHECK_LT(id, next_connection_id_);
+  return id;
+}
+
+void RootNodeManager::AddConnection(ViewManagerConnection* connection) {
+  DCHECK_EQ(0u, connection_map_.count(connection->id()));
+  connection_map_[connection->id()] = connection;
+}
+
+void RootNodeManager::RemoveConnection(ViewManagerConnection* connection) {
+  connection_map_.erase(connection->id());
+}
+
+Node* RootNodeManager::GetNode(const NodeId& id) {
+  if (id == root_.id())
+    return &root_;
+  ConnectionMap::iterator i = connection_map_.find(id.connection_id);
+  return i == connection_map_.end() ? NULL : i->second->GetNode(id);
+}
+
+void RootNodeManager::NotifyNodeHierarchyChanged(const NodeId& node,
+                                                 const NodeId& new_parent,
+                                                 const NodeId& old_parent) {
+  for (ConnectionMap::iterator i = connection_map_.begin();
+       i != connection_map_.end(); ++i) {
+    const int32_t change_id = (change_ && i->first == change_->connection_id) ?
+        change_->change_id : 0;
+    i->second->NotifyNodeHierarchyChanged(
+        node, new_parent, old_parent, change_id);
+  }
+}
+
+void RootNodeManager::PrepareForChange(ViewManagerConnection* connection,
+                                       int32_t change_id) {
+  DCHECK(!change_.get());  // Should only ever have one change in flight.
+  change_.reset(new Change(connection->id(), change_id));
+}
+
+void RootNodeManager::FinishChange() {
+  DCHECK(change_.get());  // PrepareForChange/FinishChange should be balanced.
+  change_.reset();
+}
+
+void RootNodeManager::OnCreated() {
+}
+
+void RootNodeManager::OnDestroyed() {
+}
+
+void RootNodeManager::OnBoundsChanged(const Rect& bounds) {
+}
+
+void RootNodeManager::OnEvent(const Event& event,
+                              const mojo::Callback<void()>& callback) {
+  callback.Run();
+}
+
+void RootNodeManager::OnNodeHierarchyChanged(const NodeId& node,
+                                             const NodeId& new_parent,
+                                             const NodeId& old_parent) {
+  NotifyNodeHierarchyChanged(node, new_parent, old_parent);
+}
+
+}  // namespace view_manager
+}  // namespace services
+}  // namespace mojo
diff --git a/mojo/services/view_manager/root_node_manager.h b/mojo/services/view_manager/root_node_manager.h
new file mode 100644
index 0000000..aecfa8b
--- /dev/null
+++ b/mojo/services/view_manager/root_node_manager.h
@@ -0,0 +1,117 @@
+// 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.
+
+#ifndef MOJO_SERVICES_VIEW_MANAGER_ROOT_NODE_MANAGER_H_
+#define MOJO_SERVICES_VIEW_MANAGER_ROOT_NODE_MANAGER_H_
+
+#include <map>
+
+#include "base/basictypes.h"
+#include "mojo/services/native_viewport/native_viewport.mojom.h"
+#include "mojo/services/view_manager/node.h"
+#include "mojo/services/view_manager/node_delegate.h"
+#include "mojo/services/view_manager/view_manager_export.h"
+
+namespace mojo {
+namespace services {
+namespace view_manager {
+
+class View;
+class ViewManagerConnection;
+
+// RootNodeManager is responsible for managing the set of ViewManagerConnections
+// as well as providing the root of the node hierarchy.
+class MOJO_VIEW_MANAGER_EXPORT RootNodeManager
+    : public NativeViewportClient,
+      public NodeDelegate {
+ public:
+  // Create when a ViewManagerConnection is about to make a change. Ensures
+  // clients are notified of the correct change id.
+  class ScopedChange {
+   public:
+    ScopedChange(ViewManagerConnection* connection,
+                 RootNodeManager* root,
+                 int32_t change_id);
+    ~ScopedChange();
+
+   private:
+    RootNodeManager* root_;
+
+    DISALLOW_COPY_AND_ASSIGN(ScopedChange);
+  };
+
+  RootNodeManager();
+  virtual ~RootNodeManager();
+
+  // Returns the id for the next ViewManagerConnection.
+  uint16_t GetAndAdvanceNextConnectionId();
+
+  void AddConnection(ViewManagerConnection* connection);
+  void RemoveConnection(ViewManagerConnection* connection);
+
+  // Returns the Node identified by |id|.
+  Node* GetNode(const NodeId& id);
+
+  // Notifies all ViewManagerConnections of a hierarchy change.
+  void NotifyNodeHierarchyChanged(const NodeId& node,
+                                  const NodeId& new_parent,
+                                  const NodeId& old_parent);
+
+ private:
+  // Tracks a change.
+  struct Change {
+    Change(int32_t connection_id, int32_t change_id)
+        : connection_id(connection_id),
+          change_id(change_id) {
+    }
+
+    int32_t connection_id;
+    int32_t change_id;
+  };
+
+  typedef std::map<uint16_t, ViewManagerConnection*> ConnectionMap;
+
+  // Invoked when a particular connection is about to make a change. Records
+  // the |change_id| so that it can be supplied to the clients by way of
+  // OnNodeHierarchyChanged().
+  // Changes should never nest, meaning each PrepareForChange() must be
+  // balanced with a call to FinishChange() with no PrepareForChange()
+  // in between.
+  void PrepareForChange(ViewManagerConnection* connection, int32_t change_id);
+
+  // Balances a call to PrepareForChange().
+  void FinishChange();
+
+  // Overridden from NativeViewportClient:
+  virtual void OnCreated() OVERRIDE;
+  virtual void OnDestroyed() OVERRIDE;
+  virtual void OnBoundsChanged(const Rect& bounds) OVERRIDE;
+  virtual void OnEvent(const Event& event,
+                       const mojo::Callback<void()>& callback) OVERRIDE;
+
+  // Overriden from NodeDelegate:
+  virtual void OnNodeHierarchyChanged(const NodeId& node,
+                                      const NodeId& new_parent,
+                                      const NodeId& old_parent) OVERRIDE;
+
+  // ID to use for next ViewManagerConnection.
+  uint16_t next_connection_id_;
+
+  // Set of ViewManagerConnections.
+  ConnectionMap connection_map_;
+
+  // Root node.
+  Node root_;
+
+  // If non-null we're processing a change.
+  scoped_ptr<Change> change_;
+
+  DISALLOW_COPY_AND_ASSIGN(RootNodeManager);
+};
+
+}  // namespace view_manager
+}  // namespace services
+}  // namespace mojo
+
+#endif  // MOJO_SERVICES_VIEW_MANAGER_ROOT_NODE_MANAGER_H_
diff --git a/mojo/services/view_manager/view_manager.cc b/mojo/services/view_manager/view_manager.cc
new file mode 100644
index 0000000..e2e09f5
--- /dev/null
+++ b/mojo/services/view_manager/view_manager.cc
@@ -0,0 +1,32 @@
+// 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.
+
+#include "base/message_loop/message_loop.h"
+#include "mojo/public/cpp/shell/application.h"
+#include "mojo/services/view_manager/root_node_manager.h"
+#include "mojo/services/view_manager/view_manager_connection.h"
+
+#if defined(WIN32)
+#if !defined(CDECL)
+#define CDECL __cdecl)
+#endif
+#define VIEW_MANAGER_EXPORT __declspec(dllexport)
+#else
+#define CDECL
+#define VIEW_MANAGER_EXPORT __attribute__((visibility("default")))
+#endif
+
+extern "C" VIEW_MANAGER_EXPORT MojoResult CDECL MojoMain(
+    MojoHandle shell_handle) {
+  base::MessageLoop loop;
+  mojo::Application app(shell_handle);
+  mojo::services::view_manager::RootNodeManager root_node_manager;
+  app.AddServiceConnector(new mojo::ServiceConnector
+                          <mojo::services::view_manager::ViewManagerConnection,
+                           mojo::services::view_manager::RootNodeManager>(
+                               &root_node_manager));
+  loop.Run();
+
+  return MOJO_RESULT_OK;
+}
diff --git a/mojo/services/view_manager/view_manager_connection.cc b/mojo/services/view_manager/view_manager_connection.cc
new file mode 100644
index 0000000..83c061b
--- /dev/null
+++ b/mojo/services/view_manager/view_manager_connection.cc
@@ -0,0 +1,101 @@
+// 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.
+
+#include "mojo/services/view_manager/view_manager_connection.h"
+
+#include "base/stl_util.h"
+#include "mojo/services/view_manager/node.h"
+#include "mojo/services/view_manager/root_node_manager.h"
+
+namespace mojo {
+namespace services {
+namespace view_manager {
+
+ViewManagerConnection::ViewManagerConnection() : id_(0) {
+}
+
+ViewManagerConnection::~ViewManagerConnection() {
+  STLDeleteContainerPairSecondPointers(node_map_.begin(), node_map_.end());
+  context()->RemoveConnection(this);
+}
+
+void ViewManagerConnection::Initialize(
+    ServiceConnector<ViewManagerConnection, RootNodeManager>* service_factory,
+    ScopedMessagePipeHandle client_handle) {
+  DCHECK_EQ(0, id_);  // Should only get Initialize() once.
+  ServiceConnection<ViewManager, ViewManagerConnection, RootNodeManager>::
+      Initialize(service_factory, client_handle.Pass());
+  id_ = context()->GetAndAdvanceNextConnectionId();
+  context()->AddConnection(this);
+  client()->OnConnectionEstablished(id_);
+}
+
+Node* ViewManagerConnection::GetNode(const NodeId& id) {
+  if (id_ == id.connection_id) {
+    NodeMap::iterator i = node_map_.find(id.node_id);
+    return i == node_map_.end() ? NULL : i->second;
+  }
+  return context()->GetNode(id);
+}
+
+void ViewManagerConnection::NotifyNodeHierarchyChanged(
+    const NodeId& node,
+    const NodeId& new_parent,
+    const NodeId& old_parent,
+    int32_t change_id) {
+  client()->OnNodeHierarchyChanged(NodeIdToTransportId(node),
+                                   NodeIdToTransportId(new_parent),
+                                   NodeIdToTransportId(old_parent),
+                                   change_id);
+}
+
+void ViewManagerConnection::CreateNode(
+    uint16_t node_id,
+    const Callback<void(bool)>& callback) {
+  // Negative values are reserved.
+  if (node_map_.find(node_id) != node_map_.end()) {
+    callback.Run(false);
+    return;
+  }
+  node_map_[node_id] = new Node(this, NodeId(id_, node_id));
+  callback.Run(true);
+}
+
+void ViewManagerConnection::AddNode(
+    uint32_t parent_id,
+    uint32_t child_id,
+    int32_t change_id,
+    const Callback<void(bool)>& callback) {
+  Node* parent = GetNode(NodeIdFromTransportId(parent_id));
+  Node* child = GetNode(NodeIdFromTransportId(child_id));
+  const bool success = parent && child && parent != child;
+  if (success) {
+    RootNodeManager::ScopedChange change(this, context(), change_id);
+    parent->Add(child);
+  }
+  callback.Run(success);
+}
+
+void ViewManagerConnection::RemoveNodeFromParent(
+      uint32_t node_id,
+      int32_t change_id,
+      const Callback<void(bool)>& callback) {
+  Node* node = GetNode(NodeIdFromTransportId(node_id));
+  const bool success = (node && node->GetParent());
+  if (success) {
+    RootNodeManager::ScopedChange change(this, context(), change_id);
+    node->GetParent()->Remove(node);
+  }
+  callback.Run(success);
+}
+
+void ViewManagerConnection::OnNodeHierarchyChanged(const NodeId& node,
+                                                   const NodeId& new_parent,
+                                                   const NodeId& old_parent) {
+  context()->NotifyNodeHierarchyChanged(node, new_parent, old_parent);
+}
+
+}  // namespace view_manager
+}  // namespace services
+}  // namespace mojo
diff --git a/mojo/services/view_manager/view_manager_connection.h b/mojo/services/view_manager/view_manager_connection.h
new file mode 100644
index 0000000..a03ef6a
--- /dev/null
+++ b/mojo/services/view_manager/view_manager_connection.h
@@ -0,0 +1,81 @@
+// 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.
+
+#ifndef MOJO_SERVICES_VIEW_MANAGER_VIEW_MANAGER_CONNECTION_H_
+#define MOJO_SERVICES_VIEW_MANAGER_VIEW_MANAGER_CONNECTION_H_
+
+#include <set>
+
+#include "base/basictypes.h"
+#include "mojo/public/cpp/shell/service.h"
+#include "mojo/services/public/interfaces/view_manager/view_manager.mojom.h"
+#include "mojo/services/view_manager/node_delegate.h"
+#include "mojo/services/view_manager/view_manager_export.h"
+
+namespace mojo {
+namespace services {
+namespace view_manager {
+
+class Node;
+class RootNodeManager;
+
+// Manages a connection from the client.
+class MOJO_VIEW_MANAGER_EXPORT ViewManagerConnection
+    : public ServiceConnection<ViewManager, ViewManagerConnection,
+                               RootNodeManager>,
+      public NodeDelegate {
+ public:
+  ViewManagerConnection();
+  virtual ~ViewManagerConnection();
+
+  uint16_t id() const { return id_; }
+
+  // Invoked from Service when connection is established.
+  void Initialize(
+      ServiceConnector<ViewManagerConnection, RootNodeManager>* service_factory,
+      ScopedMessagePipeHandle client_handle);
+
+  // Returns the Node by id.
+  Node* GetNode(const NodeId& id);
+
+  // Notifies the client of a hierarchy change.
+  void NotifyNodeHierarchyChanged(const NodeId& node,
+                                  const NodeId& new_parent,
+                                  const NodeId& old_parent,
+                                  int32_t change_id);
+
+ private:
+  typedef std::map<uint16_t, Node*> NodeMap;
+
+  // Overridden from ViewManager:
+  virtual void CreateNode(uint16_t node_id,
+                          const Callback<void(bool)>& callback) OVERRIDE;
+  virtual void AddNode(uint32_t parent_id,
+                       uint32_t child_id,
+                       int32_t change_id,
+                       const Callback<void(bool)>& callback) OVERRIDE;
+  virtual void RemoveNodeFromParent(
+      uint32_t node_id,
+      int32_t change_id,
+      const Callback<void(bool)>& callback) OVERRIDE;
+
+  // Overriden from NodeDelegate:
+  virtual void OnNodeHierarchyChanged(const NodeId& node,
+                                      const NodeId& new_parent,
+                                      const NodeId& old_parent) OVERRIDE;
+
+  // Id of this connection as assigned by RootNodeManager. Assigned in
+  // Initialize().
+  uint16_t id_;
+
+  NodeMap node_map_;
+
+  DISALLOW_COPY_AND_ASSIGN(ViewManagerConnection);
+};
+
+}  // namespace view_manager
+}  // namespace services
+}  // namespace mojo
+
+#endif  // MOJO_SERVICES_VIEW_MANAGER_VIEW_MANAGER_CONNECTION_H_
diff --git a/mojo/services/view_manager/view_manager_connection_unittest.cc b/mojo/services/view_manager/view_manager_connection_unittest.cc
new file mode 100644
index 0000000..88bf323
--- /dev/null
+++ b/mojo/services/view_manager/view_manager_connection_unittest.cc
@@ -0,0 +1,307 @@
+// 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.
+
+#include "mojo/services/view_manager/view_manager_connection.h"
+
+#include <string>
+#include <vector>
+
+#include "base/bind.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/message_loop/message_loop.h"
+#include "base/run_loop.h"
+#include "base/strings/stringprintf.h"
+#include "mojo/public/cpp/bindings/allocation_scope.h"
+#include "mojo/public/cpp/environment/environment.h"
+#include "mojo/services/view_manager/root_node_manager.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace mojo {
+namespace services {
+namespace view_manager {
+
+namespace {
+
+base::RunLoop* current_run_loop = NULL;
+
+// Sets |current_run_loop| and runs it. It is expected that someone else quits
+// the loop.
+void DoRunLoop() {
+  base::RunLoop run_loop;
+  current_run_loop = &run_loop;
+  current_run_loop->Run();
+  current_run_loop = NULL;
+}
+
+// Converts |id| into a string.
+std::string NodeIdToString(uint32_t id) {
+  return (id == 0) ? "null" :
+      base::StringPrintf("%d,%d", FirstIdFromTransportId(id),
+                         SecondIdFromTransportId(id));
+}
+
+// Boolean callback. Sets |result_cache| to the value of |result| and quits
+// the run loop.
+void BooleanCallback(bool* result_cache, bool result) {
+  *result_cache = result;
+  current_run_loop->Quit();
+}
+
+// Creates an id used for transport from the specified parameters.
+uint32_t CreateNodeId(uint16_t connection_id, uint16_t node_id) {
+  return NodeIdToTransportId(NodeId(connection_id, node_id));
+}
+
+// Creates a node with the specified id. Returns true on success. Blocks until
+// we get back result from server.
+bool CreateNode(ViewManager* view_manager, uint16_t id) {
+  bool result = false;
+  view_manager->CreateNode(id, base::Bind(&BooleanCallback, &result));
+  DoRunLoop();
+  return result;
+}
+
+// Adds a node, blocking until done.
+bool AddNode(ViewManager* view_manager,
+             uint32_t parent,
+             uint32_t child,
+             int32_t change_id) {
+  bool result = false;
+  view_manager->AddNode(parent, child, change_id,
+                        base::Bind(&BooleanCallback, &result));
+  DoRunLoop();
+  return result;
+}
+
+// Removes a node, blocking until done.
+bool RemoveNodeFromParent(ViewManager* view_manager,
+                          uint32_t node_id,
+                          int32_t change_id) {
+  bool result = false;
+  view_manager->RemoveNodeFromParent(node_id, change_id,
+                                     base::Bind(&BooleanCallback, &result));
+  DoRunLoop();
+  return result;
+}
+
+}  // namespace
+
+typedef std::vector<std::string> Changes;
+
+class ViewManagerClientImpl : public ViewManagerClient {
+ public:
+  ViewManagerClientImpl() : id_(0), quit_count_(0) {}
+
+  void set_quit_count(int count) { quit_count_ = count; }
+
+  uint16_t id() const { return id_; }
+
+  Changes GetAndClearChanges() {
+    Changes changes;
+    changes.swap(changes_);
+    return changes;
+  }
+
+ private:
+  // ViewManagerClient overrides:
+  virtual void OnConnectionEstablished(uint16_t connection_id) OVERRIDE {
+    id_ = connection_id;
+    current_run_loop->Quit();
+  }
+  virtual void OnNodeHierarchyChanged(uint32_t node,
+                                      uint32_t new_parent,
+                                      uint32_t old_parent,
+                                      int32_t change_id) OVERRIDE {
+    changes_.push_back(
+        base::StringPrintf(
+            "change_id=%d node=%s new_parent=%s old_parent=%s",
+            change_id, NodeIdToString(node).c_str(),
+            NodeIdToString(new_parent).c_str(),
+            NodeIdToString(old_parent).c_str()));
+    if (quit_count_ > 0) {
+      if (--quit_count_ == 0)
+        current_run_loop->Quit();
+    }
+  }
+
+  uint16_t id_;
+
+  // Used to determine when/if to quit the run loop.
+  int quit_count_;
+
+  Changes changes_;
+
+  DISALLOW_COPY_AND_ASSIGN(ViewManagerClientImpl);
+};
+
+class ViewManagerConnectionTest : public testing::Test {
+ public:
+  ViewManagerConnectionTest() : service_factory_(&root_node_manager_) {}
+
+  virtual void SetUp() OVERRIDE {
+    InterfacePipe<ViewManagerClient, ViewManager> pipe;
+    view_manager_.reset(pipe.handle_to_peer.Pass(), &client_);
+    connection_.Initialize(
+        &service_factory_,
+        ScopedMessagePipeHandle::From(pipe.handle_to_self.Pass()));
+    // Wait for the id.
+    DoRunLoop();
+  }
+
+ protected:
+  // Creates a second connection to the viewmanager.
+  void EstablishSecondConnection() {
+    connection2_.reset(new ViewManagerConnection);
+    InterfacePipe<ViewManagerClient, ViewManager> pipe;
+    view_manager2_.reset(pipe.handle_to_peer.Pass(), &client2_);
+    connection2_->Initialize(
+        &service_factory_,
+        ScopedMessagePipeHandle::From(pipe.handle_to_self.Pass()));
+    // Wait for the id.
+    DoRunLoop();
+  }
+
+  Environment env_;
+  base::MessageLoop loop_;
+  RootNodeManager root_node_manager_;
+  ServiceConnector<ViewManagerConnection, RootNodeManager> service_factory_;
+  ViewManagerConnection connection_;
+  ViewManagerClientImpl client_;
+  RemotePtr<ViewManager> view_manager_;
+
+  ViewManagerClientImpl client2_;
+  RemotePtr<ViewManager> view_manager2_;
+  scoped_ptr<ViewManagerConnection> connection2_;
+
+  DISALLOW_COPY_AND_ASSIGN(ViewManagerConnectionTest);
+};
+
+// Verifies client gets a valid id.
+TEST_F(ViewManagerConnectionTest, ValidId) {
+  EXPECT_NE(0, client_.id());
+}
+
+// Verifies two clients/connections get different ids.
+TEST_F(ViewManagerConnectionTest, TwoClientsGetDifferentConnectionIds) {
+  EstablishSecondConnection();
+  EXPECT_NE(0, client2_.id());
+  EXPECT_NE(client_.id(), client2_.id());
+}
+
+// Verifies client gets a valid id.
+TEST_F(ViewManagerConnectionTest, CreateNode) {
+  ASSERT_TRUE(CreateNode(view_manager_.get(), 1));
+
+  // Can't create a node with the same id.
+  ASSERT_FALSE(CreateNode(view_manager_.get(), 1));
+}
+
+// Verifies hierarchy changes.
+TEST_F(ViewManagerConnectionTest, AddRemoveNotify) {
+  ASSERT_TRUE(CreateNode(view_manager_.get(), 1));
+  ASSERT_TRUE(CreateNode(view_manager_.get(), 2));
+
+  EXPECT_TRUE(client_.GetAndClearChanges().empty());
+
+  // Make 2 a child of 1.
+  {
+    AllocationScope scope;
+    ASSERT_TRUE(AddNode(view_manager_.get(),
+                        CreateNodeId(client_.id(), 1),
+                        CreateNodeId(client_.id(), 2),
+                        11));
+    Changes changes(client_.GetAndClearChanges());
+    ASSERT_EQ(1u, changes.size());
+    EXPECT_EQ("change_id=11 node=1,2 new_parent=1,1 old_parent=null",
+              changes[0]);
+  }
+
+  // Remove 2 from its parent.
+  {
+    AllocationScope scope;
+    ASSERT_TRUE(RemoveNodeFromParent(view_manager_.get(),
+                                     CreateNodeId(client_.id(), 2),
+                                     101));
+    Changes changes(client_.GetAndClearChanges());
+    ASSERT_EQ(1u, changes.size());
+    EXPECT_EQ("change_id=101 node=1,2 new_parent=null old_parent=1,1",
+              changes[0]);
+  }
+}
+
+// Verifies hierarchy changes are sent to multiple clients.
+TEST_F(ViewManagerConnectionTest, AddRemoveNotifyMultipleConnections) {
+  EstablishSecondConnection();
+
+  // Create two nodes in first connection.
+  ASSERT_TRUE(CreateNode(view_manager_.get(), 1));
+  ASSERT_TRUE(CreateNode(view_manager_.get(), 2));
+
+  EXPECT_TRUE(client_.GetAndClearChanges().empty());
+  EXPECT_TRUE(client2_.GetAndClearChanges().empty());
+
+  // Make 2 a child of 1.
+  {
+    AllocationScope scope;
+    ASSERT_TRUE(AddNode(view_manager_.get(),
+                        CreateNodeId(client_.id(), 1),
+                        CreateNodeId(client_.id(), 2),
+                        11));
+    Changes changes(client_.GetAndClearChanges());
+    ASSERT_EQ(1u, changes.size());
+    EXPECT_EQ("change_id=11 node=1,2 new_parent=1,1 old_parent=null",
+              changes[0]);
+  }
+
+  // Second client should also have received the change.
+  {
+    Changes changes(client2_.GetAndClearChanges());
+    if (changes.empty()) {
+      client2_.set_quit_count(1);
+      DoRunLoop();
+      changes = client2_.GetAndClearChanges();
+    }
+    ASSERT_EQ(1u, changes.size());
+    EXPECT_EQ("change_id=0 node=1,2 new_parent=1,1 old_parent=null",
+              changes[0]);
+  }
+}
+
+// Verifies adding to root sends right notifications.
+TEST_F(ViewManagerConnectionTest, AddToRoot) {
+  ASSERT_TRUE(CreateNode(view_manager_.get(), 21));
+  ASSERT_TRUE(CreateNode(view_manager_.get(), 3));
+
+  EXPECT_TRUE(client_.GetAndClearChanges().empty());
+
+  // Make 3 a child of 21.
+  {
+    AllocationScope scope;
+    ASSERT_TRUE(AddNode(view_manager_.get(),
+                        CreateNodeId(client_.id(), 21),
+                        CreateNodeId(client_.id(), 3),
+                        11));
+    Changes changes(client_.GetAndClearChanges());
+    ASSERT_EQ(1u, changes.size());
+    EXPECT_EQ("change_id=11 node=1,3 new_parent=1,21 old_parent=null",
+              changes[0]);
+  }
+
+  // Make 21 a child of the root.
+  {
+    AllocationScope scope;
+    ASSERT_TRUE(AddNode(view_manager_.get(),
+                        CreateNodeId(0, 1),
+                        CreateNodeId(client_.id(), 21),
+                        44));
+    Changes changes(client_.GetAndClearChanges());
+    ASSERT_EQ(1u, changes.size());
+    EXPECT_EQ("change_id=44 node=1,21 new_parent=0,1 old_parent=null",
+              changes[0]);
+  }
+}
+
+}  // namespace view_manager
+}  // namespace services
+}  // namespace mojo
diff --git a/mojo/services/view_manager/view_manager_export.h b/mojo/services/view_manager/view_manager_export.h
new file mode 100644
index 0000000..29b0e62
--- /dev/null
+++ b/mojo/services/view_manager/view_manager_export.h
@@ -0,0 +1,31 @@
+// 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.
+
+#ifndef MOJO_SERVICES_VIEW_MANAGER_VIEW_MANAGER_EXPORT_H_
+#define MOJO_SERVICES_VIEW_MANAGER_VIEW_MANAGER_EXPORT_H_
+
+#if defined(COMPONENT_BUILD)
+#if defined(WIN32)
+
+#if defined(MOJO_VIEW_MANAGER_IMPLEMENTATION)
+#define MOJO_VIEW_MANAGER_EXPORT __declspec(dllexport)
+#else
+#define MOJO_VIEW_MANAGER_EXPORT __declspec(dllimport)
+#endif
+
+#else  // !defined(WIN32)
+
+#if defined(MOJO_VIEW_MANAGER_IMPLEMENTATION)
+#define MOJO_VIEW_MANAGER_EXPORT __attribute__((visibility("default")))
+#else
+#define MOJO_VIEW_MANAGER_EXPORT
+#endif
+
+#endif  // defined(WIN32)
+
+#else  // defined(COMPONENT_BUILD)
+#define MOJO_VIEW_MANAGER_EXPORT
+#endif
+
+#endif  // MOJO_SERVICES_VIEW_MANAGER_VIEW_MANAGER_EXPORT_H_
diff --git a/mojo/shell/android/mojo_main.cc b/mojo/shell/android/mojo_main.cc
index a912864..9d70c8f 100644
--- a/mojo/shell/android/mojo_main.cc
+++ b/mojo/shell/android/mojo_main.cc
@@ -13,10 +13,10 @@
 #include "base/macros.h"
 #include "base/message_loop/message_loop.h"
 #include "jni/MojoMain_jni.h"
+#include "mojo/public/cpp/environment/environment.h"
 #include "mojo/public/cpp/shell/application.h"
 #include "mojo/service_manager/service_loader.h"
 #include "mojo/service_manager/service_manager.h"
-#include "mojo/services/native_viewport/native_viewport_service.h"
 #include "mojo/shell/context.h"
 #include "mojo/shell/init.h"
 #include "mojo/shell/run.h"
@@ -34,28 +34,9 @@
 LazyInstance<scoped_ptr<shell::Context> > g_context =
     LAZY_INSTANCE_INITIALIZER;
 
-class NativeViewportServiceLoader : public ServiceLoader {
- public:
-  NativeViewportServiceLoader() {}
-  virtual ~NativeViewportServiceLoader() {}
 
- private:
-  virtual void LoadService(ServiceManager* manager,
-                           const GURL& url,
-                           ScopedShellHandle service_handle) OVERRIDE {
-    app_.reset(CreateNativeViewportService(g_context.Get().get(),
-                                           service_handle.Pass()));
-  }
-
-  virtual void OnServiceError(ServiceManager* manager,
-                              const GURL& url) OVERRIDE {
-  }
-
-  scoped_ptr<Application> app_;
-};
-
-LazyInstance<scoped_ptr<NativeViewportServiceLoader> >
-    g_viewport_service_loader = LAZY_INSTANCE_INITIALIZER;
+LazyInstance<scoped_ptr<mojo::Environment> > g_env =
+    LAZY_INSTANCE_INITIALIZER;
 
 }  // namspace
 
@@ -93,15 +74,13 @@
     CommandLine::ForCurrentProcess()->InitFromArgv(argv);
   }
 
+  g_env.Get().reset(new Environment);
+
   base::android::ScopedJavaGlobalRef<jobject> activity;
   activity.Reset(env, context);
 
   shell::Context* shell_context = new shell::Context();
   shell_context->set_activity(activity.obj());
-  g_viewport_service_loader.Get().reset(new NativeViewportServiceLoader());
-  shell_context->service_manager()->SetLoaderForURL(
-      g_viewport_service_loader.Get().get(),
-      GURL("mojo:mojo_native_viewport_service"));
 
   g_context.Get().reset(shell_context);
   shell::Run(shell_context);
diff --git a/mojo/shell/context.cc b/mojo/shell/context.cc
index 2ba4aef..df86d14 100644
--- a/mojo/shell/context.cc
+++ b/mojo/shell/context.cc
@@ -59,12 +59,12 @@
   else
     runner_factory.reset(new InProcessDynamicServiceRunnerFactory());
 
-  dynamic_service_loader_.reset(
-      new DynamicServiceLoader(this, runner_factory.Pass()));
-  service_manager_.set_default_loader(dynamic_service_loader_.get());
-  native_viewport_service_loader_.reset(new NativeViewportServiceLoader(this));
-  service_manager_.SetLoaderForURL(native_viewport_service_loader_.get(),
-                                    GURL("mojo:mojo_native_viewport_service"));
+  service_manager_.set_default_loader(
+      scoped_ptr<ServiceLoader>(
+          new DynamicServiceLoader(this, runner_factory.Pass())));
+  service_manager_.SetLoaderForURL(
+      scoped_ptr<ServiceLoader>(new NativeViewportServiceLoader(this)),
+      GURL("mojo:mojo_native_viewport_service"));
 
   if (cmdline->HasSwitch(switches::kSpy)) {
     spy_.reset(new mojo::Spy(&service_manager_,
@@ -73,7 +73,7 @@
 }
 
 Context::~Context() {
-  service_manager_.set_default_loader(NULL);
+  service_manager_.set_default_loader(scoped_ptr<ServiceLoader>());
 }
 
 }  // namespace shell
diff --git a/mojo/shell/context.h b/mojo/shell/context.h
index 57ed5d5..c9acdc4 100644
--- a/mojo/shell/context.h
+++ b/mojo/shell/context.h
@@ -46,9 +46,7 @@
   Storage storage_;
   Loader loader_;
   ServiceManager service_manager_;
-  scoped_ptr<DynamicServiceLoader> dynamic_service_loader_;
   scoped_ptr<Spy> spy_;
-  scoped_ptr<NativeViewportServiceLoader> native_viewport_service_loader_;
 #if defined(OS_ANDROID)
   base::android::ScopedJavaGlobalRef<jobject> activity_;
 #endif  // defined(OS_ANDROID)
diff --git a/mojo/system/channel.cc b/mojo/system/channel.cc
index 770275a..b0b9df9 100644
--- a/mojo/system/channel.cc
+++ b/mojo/system/channel.cc
@@ -4,11 +4,14 @@
 
 #include "mojo/system/channel.h"
 
+#include <algorithm>
+
 #include "base/basictypes.h"
 #include "base/bind.h"
 #include "base/compiler_specific.h"
 #include "base/logging.h"
 #include "base/strings/stringprintf.h"
+#include "build/build_config.h"  // TODO(vtl): Remove this.
 #include "mojo/system/message_pipe_endpoint.h"
 
 namespace mojo {
@@ -21,12 +24,15 @@
 STATIC_CONST_MEMBER_DEFINITION const MessageInTransit::EndpointId
     Channel::kBootstrapEndpointId;
 
-Channel::EndpointInfo::EndpointInfo() {
+Channel::EndpointInfo::EndpointInfo()
+    : state(STATE_NORMAL),
+      port() {
 }
 
 Channel::EndpointInfo::EndpointInfo(scoped_refptr<MessagePipe> message_pipe,
                                     unsigned port)
-    : message_pipe(message_pipe),
+    : state(STATE_NORMAL),
+      message_pipe(message_pipe),
       port(port) {
 }
 
@@ -34,7 +40,8 @@
 }
 
 Channel::Channel()
-    : next_local_id_(kBootstrapEndpointId) {
+    : is_running_(false),
+      next_local_id_(kBootstrapEndpointId) {
 }
 
 bool Channel::Init(scoped_ptr<RawChannel> raw_channel) {
@@ -43,7 +50,7 @@
 
   // No need to take |lock_|, since this must be called before this object
   // becomes thread-safe.
-  DCHECK(!raw_channel_);
+  DCHECK(!is_running_no_lock());
   raw_channel_ = raw_channel.Pass();
 
   if (!raw_channel_->Init(this)) {
@@ -51,34 +58,50 @@
     return false;
   }
 
+  is_running_ = true;
   return true;
 }
 
 void Channel::Shutdown() {
   DCHECK(creation_thread_checker_.CalledOnValidThread());
 
-  base::AutoLock locker(lock_);
-  DCHECK(raw_channel_.get());
-  raw_channel_->Shutdown();
-  raw_channel_.reset();
+  IdToEndpointInfoMap to_destroy;
+  {
+    base::AutoLock locker(lock_);
+    if (!is_running_no_lock())
+      return;
 
-  // This should not occur, but it probably mostly results in leaking;
-  // (Explicitly clearing the |local_id_to_endpoint_info_map_| would likely put
-  // things in an inconsistent state, which is worse. Note that if the map is
-  // nonempty, we probably won't be destroyed, since the endpoints have a
-  // reference to us.)
-  LOG_IF(ERROR, !local_id_to_endpoint_info_map_.empty())
-      << "Channel shutting down with endpoints still attached";
-  // TODO(vtl): This currently blows up, but the fix will be nontrivial.
-  // crbug.com/360081
-  //DCHECK(local_id_to_endpoint_info_map_.empty());
+    // Note: Don't reset |raw_channel_|, in case we're being called from within
+    // |OnReadMessage()| or |OnFatalError()|.
+    raw_channel_->Shutdown();
+    is_running_ = false;
+
+    // We need to deal with it outside the lock.
+    std::swap(to_destroy, local_id_to_endpoint_info_map_);
+  }
+
+  size_t num_live = 0;
+  size_t num_zombies = 0;
+  for (IdToEndpointInfoMap::iterator it = to_destroy.begin();
+       it != to_destroy.end();
+       ++it) {
+    if (it->second.state == EndpointInfo::STATE_NORMAL) {
+      it->second.message_pipe->OnRemove(it->second.port);
+      num_live++;
+    } else {
+      DCHECK(!it->second.message_pipe.get());
+      num_zombies++;
+    }
+  }
+  DVLOG(2) << "Shut down Channel with " << num_live << " live endpoints and "
+           << num_zombies << " zombies";
 }
 
 MessageInTransit::EndpointId Channel::AttachMessagePipeEndpoint(
-    scoped_refptr<MessagePipe> message_pipe, unsigned port) {
+    scoped_refptr<MessagePipe> message_pipe,
+    unsigned port) {
+  DCHECK(message_pipe);
   DCHECK(port == 0 || port == 1);
-  // Note: This assertion must *not* be done under |lock_|.
-  DCHECK_EQ(message_pipe->GetType(port), MessagePipeEndpoint::kTypeProxy);
 
   MessageInTransit::EndpointId local_id;
   {
@@ -98,8 +121,32 @@
     local_id_to_endpoint_info_map_[local_id] = EndpointInfo(message_pipe, port);
   }
 
-  message_pipe->Attach(port, scoped_refptr<Channel>(this), local_id);
-  return local_id;
+  // This might fail if that port got an |OnPeerClose()| before attaching.
+  if (message_pipe->Attach(port, scoped_refptr<Channel>(this), local_id))
+    return local_id;
+
+  // Note: If it failed, quite possibly the endpoint info was removed from that
+  // map (there's a race between us adding it to the map above and calling
+  // |Attach()|). And even if an entry exists for |local_id|, we need to check
+  // that it's the one we added (and not some other one that was added since).
+  {
+    base::AutoLock locker(lock_);
+    IdToEndpointInfoMap::iterator it =
+        local_id_to_endpoint_info_map_.find(local_id);
+    if (it != local_id_to_endpoint_info_map_.end() &&
+        it->second.message_pipe.get() == message_pipe.get() &&
+        it->second.port == port) {
+      DCHECK_EQ(it->second.state, EndpointInfo::STATE_NORMAL);
+      // TODO(vtl): FIXME -- This is wrong. We need to specify (to
+      // |AttachMessagePipeEndpoint()| who's going to be responsible for calling
+      // |RunMessagePipeEndpoint()| ("us", or the remote by sending us a
+      // |kSubtypeChannelRunMessagePipeEndpoint|). If the remote is going to
+      // run, then we'll get messages to an "invalid" local ID (for running, for
+      // removal).
+      local_id_to_endpoint_info_map_.erase(it);
+    }
+  }
+  return MessageInTransit::kInvalidEndpointId;
 }
 
 bool Channel::RunMessagePipeEndpoint(MessageInTransit::EndpointId local_id,
@@ -115,6 +162,14 @@
     endpoint_info = it->second;
   }
 
+  // Assume that this was in response to |kSubtypeChannelRunMessagePipeEndpoint|
+  // and ignore it.
+  if (endpoint_info.state != EndpointInfo::STATE_NORMAL) {
+    DVLOG(2) << "Ignoring run message pipe endpoint for zombie endpoint "
+                "(local ID " << local_id << ", remote ID " << remote_id << ")";
+    return true;
+  }
+
   // TODO(vtl): FIXME -- We need to handle the case that message pipe is already
   // running when we're here due to |kSubtypeChannelRunMessagePipeEndpoint|).
   endpoint_info.message_pipe->Run(endpoint_info.port, remote_id);
@@ -124,27 +179,27 @@
 void Channel::RunRemoteMessagePipeEndpoint(
     MessageInTransit::EndpointId local_id,
     MessageInTransit::EndpointId remote_id) {
-  base::AutoLock locker(lock_);
+#if DCHECK_IS_ON
+  {
+    base::AutoLock locker(lock_);
+    DCHECK(local_id_to_endpoint_info_map_.find(local_id) !=
+               local_id_to_endpoint_info_map_.end());
+  }
+#endif
 
-  DCHECK(local_id_to_endpoint_info_map_.find(local_id) !=
-             local_id_to_endpoint_info_map_.end());
-
-  scoped_ptr<MessageInTransit> message(new MessageInTransit(
-      MessageInTransit::kTypeChannel,
-      MessageInTransit::kSubtypeChannelRunMessagePipeEndpoint,
-      0, 0, NULL));
-  message->set_source_id(local_id);
-  message->set_destination_id(remote_id);
-  if (!raw_channel_->WriteMessage(message.Pass())) {
-    // TODO(vtl): FIXME -- I guess we should report the error back somehow so
-    // that the dispatcher can be closed?
-    CHECK(false) << "Not yet handled";
+  if (!SendControlMessage(
+           MessageInTransit::kSubtypeChannelRunMessagePipeEndpoint,
+           local_id, remote_id)) {
+    HandleLocalError(base::StringPrintf(
+        "Failed to send message to run remote message pipe endpoint (local ID "
+        "%u, remote ID %u)",
+        static_cast<unsigned>(local_id), static_cast<unsigned>(remote_id)));
   }
 }
 
 bool Channel::WriteMessage(scoped_ptr<MessageInTransit> message) {
   base::AutoLock locker(lock_);
-  if (!raw_channel_.get()) {
+  if (!is_running_no_lock()) {
     // TODO(vtl): I think this is probably not an error condition, but I should
     // think about it (and the shutdown sequence) more carefully.
     LOG(WARNING) << "WriteMessage() after shutdown";
@@ -156,24 +211,60 @@
 
 bool Channel::IsWriteBufferEmpty() {
   base::AutoLock locker(lock_);
-  DCHECK(raw_channel_.get());
+  if (!is_running_no_lock())
+    return true;
   return raw_channel_->IsWriteBufferEmpty();
 }
 
-void Channel::DetachMessagePipeEndpoint(MessageInTransit::EndpointId local_id) {
+void Channel::DetachMessagePipeEndpoint(
+    MessageInTransit::EndpointId local_id,
+    MessageInTransit::EndpointId remote_id) {
   DCHECK_NE(local_id, MessageInTransit::kInvalidEndpointId);
 
-  base::AutoLock locker_(lock_);
-  local_id_to_endpoint_info_map_.erase(local_id);
+  bool should_send_remove_message = false;
+  {
+    base::AutoLock locker_(lock_);
+    if (!is_running_no_lock())
+      return;
+
+    IdToEndpointInfoMap::iterator it =
+        local_id_to_endpoint_info_map_.find(local_id);
+    DCHECK(it != local_id_to_endpoint_info_map_.end());
+
+    switch (it->second.state) {
+      case EndpointInfo::STATE_NORMAL:
+        it->second.state = EndpointInfo::STATE_WAIT_REMOTE_REMOVE_ACK;
+        it->second.message_pipe = NULL;
+        should_send_remove_message =
+            (remote_id != MessageInTransit::kInvalidEndpointId);
+        break;
+      case EndpointInfo::STATE_WAIT_LOCAL_DETACH:
+        local_id_to_endpoint_info_map_.erase(it);
+        break;
+      case EndpointInfo::STATE_WAIT_REMOTE_REMOVE_ACK:
+        NOTREACHED();
+        break;
+      case EndpointInfo::STATE_WAIT_LOCAL_DETACH_AND_REMOTE_REMOVE_ACK:
+        it->second.state = EndpointInfo::STATE_WAIT_REMOTE_REMOVE_ACK;
+        break;
+    }
+  }
+  if (!should_send_remove_message)
+    return;
+
+  if (!SendControlMessage(
+           MessageInTransit::kSubtypeChannelRemoveMessagePipeEndpoint,
+           local_id, remote_id)) {
+    HandleLocalError(base::StringPrintf(
+        "Failed to send message to remove remote message pipe endpoint (local "
+        "ID %u, remote ID %u)",
+        static_cast<unsigned>(local_id), static_cast<unsigned>(remote_id)));
+  }
 }
 
 Channel::~Channel() {
   // The channel should have been shut down first.
-  DCHECK(!raw_channel_.get());
-
-  DLOG_IF(WARNING, !local_id_to_endpoint_info_map_.empty())
-      << "Destroying Channel with " << local_id_to_endpoint_info_map_.size()
-      << " endpoints still present";
+  DCHECK(!is_running_no_lock());
 }
 
 void Channel::OnReadMessage(const MessageInTransit::View& message_view) {
@@ -198,8 +289,13 @@
 }
 
 void Channel::OnFatalError(FatalError fatal_error) {
-  // TODO(vtl): IMPORTANT. Notify all our endpoints that they're dead.
-  NOTIMPLEMENTED();
+  LOG(ERROR) << "RawChannel fatal error (type " << fatal_error << ")";
+  // TODO(vtl): We have some nested-deletion bugs on Windows, so this crashes.
+#if defined(OS_WIN)
+  LOG(ERROR) << "Not shutting down due Windows-only bug";
+#else
+  Shutdown();
+#endif
 }
 
 bool Channel::ValidateReadMessage(const MessageInTransit::View& message_view) {
@@ -231,7 +327,7 @@
     // Since we own |raw_channel_|, and this method and |Shutdown()| should only
     // be called from the creation thread, |raw_channel_| should never be null
     // here.
-    DCHECK(raw_channel_.get());
+    DCHECK(is_running_no_lock());
 
     IdToEndpointInfoMap::const_iterator it =
         local_id_to_endpoint_info_map_.find(local_id);
@@ -249,6 +345,13 @@
     endpoint_info = it->second;
   }
 
+  // Ignore messages for zombie endpoints (not an error).
+  if (endpoint_info.state != EndpointInfo::STATE_NORMAL) {
+    DVLOG(2) << "Ignoring downstream message for zombie endpoint (local ID = "
+             << local_id << ", remote ID = " << message_view.source_id() << ")";
+    return;
+  }
+
   // We need to duplicate the message, because |EnqueueMessage()| will take
   // ownership of it.
   scoped_ptr<MessageInTransit> message(new MessageInTransit(message_view));
@@ -261,7 +364,7 @@
     // error, e.g., if the remote side is sending invalid control messages (to
     // the message pipe).
     HandleLocalError(base::StringPrintf(
-        "Failed to enqueue message to local destination ID %u (result %d)",
+        "Failed to enqueue message to local ID %u (result %d)",
         static_cast<unsigned>(local_id), static_cast<int>(result)));
     return;
   }
@@ -273,14 +376,35 @@
 
   switch (message_view.subtype()) {
     case MessageInTransit::kSubtypeChannelRunMessagePipeEndpoint:
-      // TODO(vtl): FIXME -- Error handling (also validation of
-      // source/destination IDs).
-      DVLOG(2) << "Handling channel message to run message pipe (local ID = "
-               << message_view.destination_id() << ", remote ID = "
+      DVLOG(2) << "Handling channel message to run message pipe (local ID "
+               << message_view.destination_id() << ", remote ID "
                << message_view.source_id() << ")";
       if (!RunMessagePipeEndpoint(message_view.destination_id(),
-                                  message_view.source_id()))
-        HandleRemoteError("Received invalid channel run message pipe message");
+                                  message_view.source_id())) {
+        HandleRemoteError(
+            "Received invalid channel message to run message pipe");
+      }
+      break;
+    case MessageInTransit::kSubtypeChannelRemoveMessagePipeEndpoint:
+      DVLOG(2) << "Handling channel message to remove message pipe (local ID "
+               << message_view.destination_id() << ", remote ID "
+               << message_view.source_id() << ")";
+      if (!RemoveMessagePipeEndpoint(message_view.destination_id(),
+                                     message_view.source_id())) {
+        HandleRemoteError(
+            "Received invalid channel message to remove message pipe");
+      }
+      break;
+    case MessageInTransit::kSubtypeChannelRemoveMessagePipeEndpointAck:
+      DVLOG(2) << "Handling channel message to ack remove message pipe (local "
+                  "ID "
+               << message_view.destination_id() << ", remote ID "
+               << message_view.source_id() << ")";
+      if (!RemoveMessagePipeEndpoint(message_view.destination_id(),
+                                     message_view.source_id())) {
+        HandleRemoteError(
+            "Received invalid channel message to ack remove message pipe");
+      }
       break;
     default:
       HandleRemoteError("Received invalid channel message");
@@ -289,6 +413,62 @@
   }
 }
 
+bool Channel::RemoveMessagePipeEndpoint(
+    MessageInTransit::EndpointId local_id,
+    MessageInTransit::EndpointId remote_id) {
+  EndpointInfo endpoint_info;
+  {
+    base::AutoLock locker(lock_);
+
+    IdToEndpointInfoMap::iterator it =
+        local_id_to_endpoint_info_map_.find(local_id);
+    if (it == local_id_to_endpoint_info_map_.end()) {
+      DVLOG(2) << "Remove message pipe error: not found";
+      return false;
+    }
+
+    // If it's waiting for the remove ack, just do it and return.
+    if (it->second.state == EndpointInfo::STATE_WAIT_REMOTE_REMOVE_ACK) {
+      local_id_to_endpoint_info_map_.erase(it);
+      return true;
+    }
+
+    if (it->second.state != EndpointInfo::STATE_NORMAL) {
+      DVLOG(2) << "Remove message pipe error: wrong state";
+      return false;
+    }
+
+    it->second.state = EndpointInfo::STATE_WAIT_LOCAL_DETACH;
+    endpoint_info = it->second;
+    it->second.message_pipe = NULL;
+  }
+
+  if (!SendControlMessage(
+           MessageInTransit::kSubtypeChannelRemoveMessagePipeEndpointAck,
+           local_id, remote_id)) {
+    HandleLocalError(base::StringPrintf(
+        "Failed to send message to remove remote message pipe endpoint ack "
+        "(local ID %u, remote ID %u)",
+        static_cast<unsigned>(local_id), static_cast<unsigned>(remote_id)));
+  }
+
+  endpoint_info.message_pipe->OnRemove(endpoint_info.port);
+
+  return true;
+}
+
+bool Channel::SendControlMessage(MessageInTransit::Subtype subtype,
+                                 MessageInTransit::EndpointId local_id,
+                                 MessageInTransit::EndpointId remote_id) {
+  DVLOG(2) << "Sending channel control message: subtype " << subtype
+           << ", local ID " << local_id << ", remote ID " << remote_id;
+  scoped_ptr<MessageInTransit> message(new MessageInTransit(
+      MessageInTransit::kTypeChannel, subtype, 0, 0, NULL));
+  message->set_source_id(local_id);
+  message->set_destination_id(remote_id);
+  return WriteMessage(message.Pass());
+}
+
 void Channel::HandleRemoteError(const base::StringPiece& error_message) {
   // TODO(vtl): Is this how we really want to handle this? Probably we want to
   // terminate the connection, since it's spewing invalid stuff.
@@ -297,6 +477,10 @@
 
 void Channel::HandleLocalError(const base::StringPiece& error_message) {
   // TODO(vtl): Is this how we really want to handle this?
+  // Sometimes we'll want to propagate the error back to the message pipe
+  // (endpoint), and notify it that the remote is (effectively) closed.
+  // Sometimes we'll want to kill the channel (and notify all the endpoints that
+  // their remotes are dead.
   LOG(WARNING) << error_message;
 }
 
diff --git a/mojo/system/channel.h b/mojo/system/channel.h
index 1e66a88..7b30dbb 100644
--- a/mojo/system/channel.h
+++ b/mojo/system/channel.h
@@ -72,11 +72,12 @@
   // which it returns. The first message pipe endpoint attached will always have
   // |kBootstrapEndpointId| as its local ID. (For bootstrapping, this occurs on
   // both sides, so one should use |kBootstrapEndpointId| for the remote ID for
-  // the first message pipe across a channel.)
-  // TODO(vtl): Maybe limit the number of attached message pipes and allow this
-  // to fail.
+  // the first message pipe across a channel.) Returns |kInvalidEndpointId| on
+  // failure.
+  // TODO(vtl): Maybe limit the number of attached message pipes.
   MessageInTransit::EndpointId AttachMessagePipeEndpoint(
-      scoped_refptr<MessagePipe> message_pipe, unsigned port);
+      scoped_refptr<MessagePipe> message_pipe,
+      unsigned port);
 
   // Runs the message pipe with the given |local_id| (previously attached), with
   // the given |remote_id| (negotiated using some other means, e.g., over an
@@ -103,12 +104,37 @@
   // |FlushWriteBufferAndShutdown()| or something like that.
   bool IsWriteBufferEmpty();
 
-  // This removes the message pipe/port's endpoint (with the given local ID,
+  // This removes the message pipe/port's endpoint (with the given local ID and
+  // given remote ID, which should be |kInvalidEndpointId| if not yet running),
   // returned by |AttachMessagePipeEndpoint()| from this channel. After this is
   // called, |local_id| may be reused for another message pipe.
-  void DetachMessagePipeEndpoint(MessageInTransit::EndpointId local_id);
+  void DetachMessagePipeEndpoint(MessageInTransit::EndpointId local_id,
+                                 MessageInTransit::EndpointId remote_id);
 
  private:
+  struct EndpointInfo {
+    enum State {
+      // Attached, possibly running or not.
+      STATE_NORMAL,
+      // "Zombie" states:
+      // Waiting for |DetachMessagePipeEndpoint()| before removing.
+      STATE_WAIT_LOCAL_DETACH,
+      // Waiting for a |kSubtypeChannelRemoveMessagePipeEndpointAck| before
+      // removing.
+      STATE_WAIT_REMOTE_REMOVE_ACK,
+      // Waiting for both of the above conditions before removing.
+      STATE_WAIT_LOCAL_DETACH_AND_REMOTE_REMOVE_ACK,
+    };
+
+    EndpointInfo();
+    EndpointInfo(scoped_refptr<MessagePipe> message_pipe, unsigned port);
+    ~EndpointInfo();
+
+    State state;
+    scoped_refptr<MessagePipe> message_pipe;
+    unsigned port;
+  };
+
   friend class base::RefCountedThreadSafe<Channel>;
   virtual ~Channel();
 
@@ -122,19 +148,24 @@
   void OnReadMessageForDownstream(const MessageInTransit::View& message_view);
   void OnReadMessageForChannel(const MessageInTransit::View& message_view);
 
+  // Removes the message pipe endpoint with the given local ID, which must exist
+  // and be a zombie, and given remote ID. Returns false on failure, in
+  // particular if no message pipe with |local_id| is attached.
+  bool RemoveMessagePipeEndpoint(MessageInTransit::EndpointId local_id,
+                                 MessageInTransit::EndpointId remote_id);
+
   // Handles errors (e.g., invalid messages) from the remote side.
   void HandleRemoteError(const base::StringPiece& error_message);
   // Handles internal errors/failures from the local side.
   void HandleLocalError(const base::StringPiece& error_message);
 
-  struct EndpointInfo {
-    EndpointInfo();
-    EndpointInfo(scoped_refptr<MessagePipe> message_pipe, unsigned port);
-    ~EndpointInfo();
+  // Helper to send channel control messages. Returns true on success. Should be
+  // called *without* |lock_| held.
+  bool SendControlMessage(MessageInTransit::Subtype subtype,
+                          MessageInTransit::EndpointId source_id,
+                          MessageInTransit::EndpointId destination_id);
 
-    scoped_refptr<MessagePipe> message_pipe;
-    unsigned port;
-  };
+  bool is_running_no_lock() const { return is_running_; }
 
   base::ThreadChecker creation_thread_checker_;
 
@@ -146,6 +177,7 @@
   base::Lock lock_;  // Protects the members below.
 
   scoped_ptr<RawChannel> raw_channel_;
+  bool is_running_;
 
   typedef base::hash_map<MessageInTransit::EndpointId, EndpointInfo>
       IdToEndpointInfoMap;
diff --git a/mojo/system/local_message_pipe_endpoint.cc b/mojo/system/local_message_pipe_endpoint.cc
index ece8e03..b5b6bd0 100644
--- a/mojo/system/local_message_pipe_endpoint.cc
+++ b/mojo/system/local_message_pipe_endpoint.cc
@@ -27,13 +27,7 @@
   return kTypeLocal;
 }
 
-void LocalMessagePipeEndpoint::Close() {
-  DCHECK(is_open_);
-  is_open_ = false;
-  message_queue_.Clear();
-}
-
-void LocalMessagePipeEndpoint::OnPeerClose() {
+bool LocalMessagePipeEndpoint::OnPeerClose() {
   DCHECK(is_open_);
   DCHECK(is_peer_open_);
 
@@ -48,6 +42,8 @@
     waiter_list_.AwakeWaitersForStateChange(new_satisfied_flags,
                                             new_satisfiable_flags);
   }
+
+  return true;
 }
 
 void LocalMessagePipeEndpoint::EnqueueMessage(
@@ -63,6 +59,12 @@
   }
 }
 
+void LocalMessagePipeEndpoint::Close() {
+  DCHECK(is_open_);
+  is_open_ = false;
+  message_queue_.Clear();
+}
+
 void LocalMessagePipeEndpoint::CancelAllWaiters() {
   DCHECK(is_open_);
   waiter_list_.CancelAllWaiters();
diff --git a/mojo/system/local_message_pipe_endpoint.h b/mojo/system/local_message_pipe_endpoint.h
index 9e200f1..963188f 100644
--- a/mojo/system/local_message_pipe_endpoint.h
+++ b/mojo/system/local_message_pipe_endpoint.h
@@ -24,12 +24,12 @@
 
   // |MessagePipeEndpoint| implementation:
   virtual Type GetType() const OVERRIDE;
-  virtual void Close() OVERRIDE;
-  virtual void OnPeerClose() OVERRIDE;
+  virtual bool OnPeerClose() OVERRIDE;
   virtual void EnqueueMessage(scoped_ptr<MessageInTransit> message) OVERRIDE;
 
   // There's a dispatcher for |LocalMessagePipeEndpoint|s, so we have to
   // implement/override these:
+  virtual void Close() OVERRIDE;
   virtual void CancelAllWaiters() OVERRIDE;
   virtual MojoResult ReadMessage(
       void* bytes, uint32_t* num_bytes,
diff --git a/mojo/system/message_in_transit.cc b/mojo/system/message_in_transit.cc
index 73cefe3..442cd71 100644
--- a/mojo/system/message_in_transit.cc
+++ b/mojo/system/message_in_transit.cc
@@ -49,7 +49,11 @@
 STATIC_CONST_MEMBER_DEFINITION const MessageInTransit::Subtype
     MessageInTransit::kSubtypeMessagePipeEndpointData;
 STATIC_CONST_MEMBER_DEFINITION const MessageInTransit::Subtype
-    MessageInTransit::kSubtypeMessagePipePeerClosed;
+    MessageInTransit::kSubtypeChannelRunMessagePipeEndpoint;
+STATIC_CONST_MEMBER_DEFINITION const MessageInTransit::Subtype
+    MessageInTransit::kSubtypeChannelRemoveMessagePipeEndpoint;
+STATIC_CONST_MEMBER_DEFINITION const MessageInTransit::Subtype
+    MessageInTransit::kSubtypeChannelRemoveMessagePipeEndpointAck;
 STATIC_CONST_MEMBER_DEFINITION const MessageInTransit::EndpointId
     MessageInTransit::kInvalidEndpointId;
 STATIC_CONST_MEMBER_DEFINITION const size_t MessageInTransit::kMessageAlignment;
diff --git a/mojo/system/message_in_transit.h b/mojo/system/message_in_transit.h
index bf8d5cf..9e578af 100644
--- a/mojo/system/message_in_transit.h
+++ b/mojo/system/message_in_transit.h
@@ -54,9 +54,11 @@
   // Subtypes for type |kTypeMessagePipeEndpoint|:
   static const Subtype kSubtypeMessagePipeEndpointData = 0;
   // Subtypes for type |kTypeMessagePipe|:
-  static const Subtype kSubtypeMessagePipePeerClosed = 0;
+  // Nothing currently.
   // Subtypes for type |kTypeChannel|:
   static const Subtype kSubtypeChannelRunMessagePipeEndpoint = 0;
+  static const Subtype kSubtypeChannelRemoveMessagePipeEndpoint = 1;
+  static const Subtype kSubtypeChannelRemoveMessagePipeEndpointAck = 2;
 
   typedef uint32_t EndpointId;
   // Never a valid endpoint ID.
diff --git a/mojo/system/message_pipe.cc b/mojo/system/message_pipe.cc
index 6f2e5cb..9752934 100644
--- a/mojo/system/message_pipe.cc
+++ b/mojo/system/message_pipe.cc
@@ -57,8 +57,10 @@
   DCHECK(endpoints_[port].get());
 
   endpoints_[port]->Close();
-  if (endpoints_[destination_port].get())
-    endpoints_[destination_port]->OnPeerClose();
+  if (endpoints_[destination_port].get()) {
+    if (!endpoints_[destination_port]->OnPeerClose())
+      endpoints_[destination_port].reset();
+  }
   endpoints_[port].reset();
 }
 
@@ -223,7 +225,7 @@
   return MOJO_RESULT_OK;
 }
 
-void MessagePipe::Attach(unsigned port,
+bool MessagePipe::Attach(unsigned port,
                          scoped_refptr<Channel> channel,
                          MessageInTransit::EndpointId local_id) {
   DCHECK(port == 0 || port == 1);
@@ -231,9 +233,12 @@
   DCHECK_NE(local_id, MessageInTransit::kInvalidEndpointId);
 
   base::AutoLock locker(lock_);
-  DCHECK(endpoints_[port].get());
+  if (!endpoints_[port].get())
+    return false;
 
+  DCHECK_EQ(endpoints_[port]->GetType(), MessagePipeEndpoint::kTypeProxy);
   endpoints_[port]->Attach(channel, local_id);
+  return true;
 }
 
 void MessagePipe::Run(unsigned port, MessageInTransit::EndpointId remote_id) {
@@ -242,7 +247,24 @@
 
   base::AutoLock locker(lock_);
   DCHECK(endpoints_[port].get());
-  endpoints_[port]->Run(remote_id);
+  if (!endpoints_[port]->Run(remote_id))
+    endpoints_[port].reset();
+}
+
+void MessagePipe::OnRemove(unsigned port) {
+  unsigned destination_port = GetPeerPort(port);
+
+  base::AutoLock locker(lock_);
+  // A |OnPeerClose()| can come in first, before |OnRemove()| gets called.
+  if (!endpoints_[port].get())
+    return;
+
+  endpoints_[port]->OnRemove();
+  if (endpoints_[destination_port].get()) {
+    if (!endpoints_[destination_port]->OnPeerClose())
+      endpoints_[destination_port].reset();
+  }
+  endpoints_[port].reset();
 }
 
 MessagePipe::~MessagePipe() {
@@ -254,28 +276,8 @@
 }
 
 MojoResult MessagePipe::HandleControlMessage(
-    unsigned port,
+    unsigned /*port*/,
     scoped_ptr<MessageInTransit> message) {
-  DCHECK(port == 0 || port == 1);
-  DCHECK(message.get());
-  DCHECK_EQ(message->type(), MessageInTransit::kTypeMessagePipe);
-
-  switch (message->subtype()) {
-    case MessageInTransit::kSubtypeMessagePipePeerClosed: {
-      unsigned source_port = GetPeerPort(port);
-
-      base::AutoLock locker(lock_);
-      DCHECK(endpoints_[source_port].get());
-
-      endpoints_[source_port]->Close();
-      if (endpoints_[port].get())
-        endpoints_[port]->OnPeerClose();
-
-      endpoints_[source_port].reset();
-      return MOJO_RESULT_OK;
-    }
-  }
-
   LOG(WARNING) << "Unrecognized MessagePipe control message subtype "
                << message->subtype();
   return MOJO_RESULT_UNKNOWN;
diff --git a/mojo/system/message_pipe.h b/mojo/system/message_pipe.h
index 85cce0a..6392ab3 100644
--- a/mojo/system/message_pipe.h
+++ b/mojo/system/message_pipe.h
@@ -81,10 +81,11 @@
                             std::vector<DispatcherTransport>* transports);
 
   // These are used by |Channel|.
-  void Attach(unsigned port,
+  bool Attach(unsigned port,
               scoped_refptr<Channel> channel,
               MessageInTransit::EndpointId local_id);
   void Run(unsigned port, MessageInTransit::EndpointId remote_id);
+  void OnRemove(unsigned port);
 
  private:
   friend class base::RefCountedThreadSafe<MessagePipe>;
diff --git a/mojo/system/message_pipe_dispatcher.cc b/mojo/system/message_pipe_dispatcher.cc
index 364259b..fc626ef 100644
--- a/mojo/system/message_pipe_dispatcher.cc
+++ b/mojo/system/message_pipe_dispatcher.cc
@@ -73,8 +73,21 @@
 
   MessageInTransit::EndpointId remote_id =
       static_cast<const SerializedMessagePipeDispatcher*>(source)->endpoint_id;
+  if (remote_id == MessageInTransit::kInvalidEndpointId) {
+    // This means that the other end was closed, and there were no messages
+    // enqueued for us.
+    // TODO(vtl): This is wrong. We should produce a "dead" message pipe
+    // dispatcher.
+    NOTIMPLEMENTED();
+    return scoped_refptr<MessagePipeDispatcher>();
+  }
   MessageInTransit::EndpointId local_id =
       channel->AttachMessagePipeEndpoint(remote_message_pipe.second, 1);
+  if (local_id == MessageInTransit::kInvalidEndpointId) {
+    LOG(ERROR) << "Failed to deserialize message pipe dispatcher (failed to "
+                  "attach; remote ID = " << remote_id << ")";
+    return scoped_refptr<MessagePipeDispatcher>();
+  }
   DVLOG(2) << "Deserializing message pipe dispatcher (remote ID = "
            << remote_id << ", new local ID = " << local_id << ")";
 
@@ -199,8 +212,11 @@
   // Attach the new proxy endpoint to the channel.
   MessageInTransit::EndpointId endpoint_id =
       channel->AttachMessagePipeEndpoint(message_pipe_, port_);
-  DCHECK_NE(endpoint_id, MessageInTransit::kInvalidEndpointId);
-
+  // Note: It's okay to get an endpoint ID of |kInvalidEndpointId|. (It's
+  // possible that the other endpoint -- the one that we're not sending -- was
+  // closed in the intervening time.) In that case, we need to deserialize a
+  // "dead" message pipe dispatcher on the other end. (Note that this is
+  // different from just producing |MOJO_HANDLE_INVALID|.)
   DVLOG(2) << "Serializing message pipe dispatcher (local ID = " << endpoint_id
            << ")";
 
diff --git a/mojo/system/message_pipe_endpoint.cc b/mojo/system/message_pipe_endpoint.cc
index dd186fd..a1a7be3 100644
--- a/mojo/system/message_pipe_endpoint.cc
+++ b/mojo/system/message_pipe_endpoint.cc
@@ -10,6 +10,10 @@
 namespace mojo {
 namespace system {
 
+void MessagePipeEndpoint::Close() {
+  NOTREACHED();
+}
+
 void MessagePipeEndpoint::CancelAllWaiters() {
   NOTREACHED();
 }
@@ -39,7 +43,12 @@
   NOTREACHED();
 }
 
-void MessagePipeEndpoint::Run(MessageInTransit::EndpointId /*remote_id*/) {
+bool MessagePipeEndpoint::Run(MessageInTransit::EndpointId /*remote_id*/) {
+  NOTREACHED();
+  return true;
+}
+
+void MessagePipeEndpoint::OnRemove() {
   NOTREACHED();
 }
 
diff --git a/mojo/system/message_pipe_endpoint.h b/mojo/system/message_pipe_endpoint.h
index b7b9589..d14c58a 100644
--- a/mojo/system/message_pipe_endpoint.h
+++ b/mojo/system/message_pipe_endpoint.h
@@ -42,8 +42,8 @@
   virtual Type GetType() const = 0;
 
   // All implementations must implement these.
-  virtual void Close() = 0;
-  virtual void OnPeerClose() = 0;
+  // Returns false if the endpoint should be closed and destroyed, else true.
+  virtual bool OnPeerClose() = 0;
   // Implements |MessagePipe::EnqueueMessage()|. The major differences are that:
   //  a) Dispatchers have been vetted and cloned/attached to the message.
   //  b) At this point, we cannot report failure (if, e.g., a channel is torn
@@ -58,6 +58,7 @@
   // These methods implement the methods of the same name in |MessagePipe|,
   // though |MessagePipe|'s implementation may have to do a little more if the
   // operation involves both endpoints.
+  virtual void Close();
   virtual void CancelAllWaiters();
   virtual MojoResult ReadMessage(
       void* bytes, uint32_t* num_bytes,
@@ -74,7 +75,9 @@
   // they should never be called.
   virtual void Attach(scoped_refptr<Channel> channel,
                       MessageInTransit::EndpointId local_id);
-  virtual void Run(MessageInTransit::EndpointId remote_id);
+  // Returns false if the endpoint should be closed and destroyed, else true.
+  virtual bool Run(MessageInTransit::EndpointId remote_id);
+  virtual void OnRemove();
 
  protected:
   MessagePipeEndpoint() {}
diff --git a/mojo/system/proxy_message_pipe_endpoint.cc b/mojo/system/proxy_message_pipe_endpoint.cc
index d5ef656..81adda5 100644
--- a/mojo/system/proxy_message_pipe_endpoint.cc
+++ b/mojo/system/proxy_message_pipe_endpoint.cc
@@ -17,7 +17,6 @@
 ProxyMessagePipeEndpoint::ProxyMessagePipeEndpoint()
     : local_id_(MessageInTransit::kInvalidEndpointId),
       remote_id_(MessageInTransit::kInvalidEndpointId),
-      is_open_(true),
       is_peer_open_(true) {
 }
 
@@ -26,7 +25,6 @@
     bool is_peer_open)
     : local_id_(MessageInTransit::kInvalidEndpointId),
       remote_id_(MessageInTransit::kInvalidEndpointId),
-      is_open_(true),
       is_peer_open_(is_peer_open),
       paused_message_queue_(MessageInTransitQueue::PassContents(),
                             local_message_pipe_endpoint->message_queue()) {
@@ -44,27 +42,26 @@
   return kTypeProxy;
 }
 
-void ProxyMessagePipeEndpoint::Close() {
-  DCHECK(is_open_);
-  is_open_ = false;
-
-  DCHECK(is_attached());
-  channel_->DetachMessagePipeEndpoint(local_id_);
-  channel_ = NULL;
-  local_id_ = MessageInTransit::kInvalidEndpointId;
-  remote_id_ = MessageInTransit::kInvalidEndpointId;
-  paused_message_queue_.Clear();
-}
-
-void ProxyMessagePipeEndpoint::OnPeerClose() {
-  DCHECK(is_open_);
+bool ProxyMessagePipeEndpoint::OnPeerClose() {
   DCHECK(is_peer_open_);
 
   is_peer_open_ = false;
-  EnqueueMessage(make_scoped_ptr(
-      new MessageInTransit(MessageInTransit::kTypeMessagePipe,
-                           MessageInTransit::kSubtypeMessagePipePeerClosed,
-                           0, 0, NULL)));
+
+  // If our outgoing message queue isn't empty, we shouldn't be destroyed yet.
+  if (!paused_message_queue_.IsEmpty())
+    return true;
+
+  if (is_attached()) {
+    if (!is_running()) {
+      // If we're not running yet, we can't be destroyed yet, because we're
+      // still waiting for the "run" message from the other side.
+      return true;
+    }
+
+    Detach();
+  }
+
+  return false;
 }
 
 // Note: We may have to enqueue messages even when our (local) peer isn't open
@@ -72,8 +69,6 @@
 // This case is handled in |Run()| (which will call us).
 void ProxyMessagePipeEndpoint::EnqueueMessage(
     scoped_ptr<MessageInTransit> message) {
-  DCHECK(is_open_);
-
   if (is_running()) {
     message->SerializeAndCloseDispatchers(channel_.get());
 
@@ -99,7 +94,7 @@
   AssertConsistentState();
 }
 
-void ProxyMessagePipeEndpoint::Run(MessageInTransit::EndpointId remote_id) {
+bool ProxyMessagePipeEndpoint::Run(MessageInTransit::EndpointId remote_id) {
   // Assertions about arguments:
   DCHECK_NE(remote_id, MessageInTransit::kInvalidEndpointId);
 
@@ -113,6 +108,29 @@
 
   while (!paused_message_queue_.IsEmpty())
     EnqueueMessage(paused_message_queue_.GetMessage());
+
+  if (is_peer_open_)
+    return true;  // Stay alive.
+
+  // We were just waiting to die.
+  Detach();
+  return false;
+}
+
+void ProxyMessagePipeEndpoint::OnRemove() {
+  Detach();
+}
+
+void ProxyMessagePipeEndpoint::Detach() {
+  DCHECK(is_attached());
+
+  AssertConsistentState();
+  channel_->DetachMessagePipeEndpoint(local_id_, remote_id_);
+  channel_ = NULL;
+  local_id_ = MessageInTransit::kInvalidEndpointId;
+  remote_id_ = MessageInTransit::kInvalidEndpointId;
+  paused_message_queue_.Clear();
+  AssertConsistentState();
 }
 
 #ifndef NDEBUG
diff --git a/mojo/system/proxy_message_pipe_endpoint.h b/mojo/system/proxy_message_pipe_endpoint.h
index 7d62b9b..28b634d 100644
--- a/mojo/system/proxy_message_pipe_endpoint.h
+++ b/mojo/system/proxy_message_pipe_endpoint.h
@@ -53,14 +53,22 @@
 
   // |MessagePipeEndpoint| implementation:
   virtual Type GetType() const OVERRIDE;
-  virtual void Close() OVERRIDE;
-  virtual void OnPeerClose() OVERRIDE;
+  virtual bool OnPeerClose() OVERRIDE;
   virtual void EnqueueMessage(scoped_ptr<MessageInTransit> message) OVERRIDE;
   virtual void Attach(scoped_refptr<Channel> channel,
                       MessageInTransit::EndpointId local_id) OVERRIDE;
-  virtual void Run(MessageInTransit::EndpointId remote_id) OVERRIDE;
+  virtual bool Run(MessageInTransit::EndpointId remote_id) OVERRIDE;
+  virtual void OnRemove() OVERRIDE;
 
  private:
+  void Detach();
+
+#ifdef NDEBUG
+  void AssertConsistentState() const {}
+#else
+  void AssertConsistentState() const;
+#endif
+
   bool is_attached() const {
     return !!channel_.get();
   }
@@ -69,12 +77,6 @@
     return remote_id_ != MessageInTransit::kInvalidEndpointId;
   }
 
-#ifdef NDEBUG
-  void AssertConsistentState() const {}
-#else
-  void AssertConsistentState() const;
-#endif
-
   // This should only be set if we're attached.
   scoped_refptr<Channel> channel_;
 
@@ -88,7 +90,6 @@
   // we're attached.
   MessageInTransit::EndpointId remote_id_;
 
-  bool is_open_;
   bool is_peer_open_;
 
   // This queue is only used while we're detached, to store messages while we're
diff --git a/mojo/system/raw_channel.h b/mojo/system/raw_channel.h
index f1ce443..4b60e36 100644
--- a/mojo/system/raw_channel.h
+++ b/mojo/system/raw_channel.h
@@ -53,17 +53,18 @@
       FATAL_ERROR_FAILED_WRITE
     };
 
-    // Called when a message is read. This may call |Shutdown()| on the
-    // |RawChannel|, but must not destroy it.
+    // Called when a message is read. This may call |Shutdown()| (on the
+    // |RawChannel|), but must not destroy it.
     virtual void OnReadMessage(const MessageInTransit::View& message_view) = 0;
 
     // Called when there's a fatal error, which leads to the channel no longer
-    // being viable.
-    // For each raw channel, at most one |FATAL_ERROR_FAILED_READ| and one
-    // |FATAL_ERROR_FAILED_WRITE| notification will be issued. (And it is
-    // possible to get both.)
-    // After |OnFatalError(FATAL_ERROR_FAILED_READ)| there won't be further
-    // |OnReadMessage()| calls.
+    // being viable. This may call |Shutdown()| (on the |RawChannel()|), but
+    // must now destroy it.
+    //
+    // For each raw channel, at most one |FATAL_ERROR_FAILED_READ| and at most
+    // one |FATAL_ERROR_FAILED_WRITE| notification will be issued (both may be
+    // issued). After a |OnFatalError(FATAL_ERROR_FAILED_READ)|, there will be
+    // no further calls to |OnReadMessage()|.
     virtual void OnFatalError(FatalError fatal_error) = 0;
 
    protected:
diff --git a/mojo/system/remote_message_pipe_unittest.cc b/mojo/system/remote_message_pipe_unittest.cc
index 4dee577..7deb252 100644
--- a/mojo/system/remote_message_pipe_unittest.cc
+++ b/mojo/system/remote_message_pipe_unittest.cc
@@ -138,10 +138,13 @@
 
     unsigned port = channel_index ^ 1u;
 
-    // Important: If we don't boot
     CreateAndInitChannel(channel_index);
-    CHECK_EQ(channels_[channel_index]->AttachMessagePipeEndpoint(mp, port),
-             Channel::kBootstrapEndpointId);
+    MessageInTransit::EndpointId endpoint_id =
+        channels_[channel_index]->AttachMessagePipeEndpoint(mp, port);
+    if (endpoint_id == MessageInTransit::kInvalidEndpointId)
+      return;
+
+    CHECK_EQ(endpoint_id, Channel::kBootstrapEndpointId);
     CHECK(channels_[channel_index]->RunMessagePipeEndpoint(
         Channel::kBootstrapEndpointId, Channel::kBootstrapEndpointId));
   }
@@ -561,7 +564,8 @@
 TEST_F(RemoteMessagePipeTest, RacingClosesStress) {
   base::TimeDelta delay = base::TimeDelta::FromMilliseconds(5);
 
-  for (unsigned i = 0u; i < 256u; i++) {
+  for (unsigned i = 0; i < 256; i++) {
+    DVLOG(2) << "---------------------------------------- " << i;
     scoped_refptr<MessagePipe> mp0(new MessagePipe(
         scoped_ptr<MessagePipeEndpoint>(new LocalMessagePipeEndpoint()),
         scoped_ptr<MessagePipeEndpoint>(new ProxyMessagePipeEndpoint())));
diff --git a/mojo/tools/data/unittests b/mojo/tools/data/unittests
index 4ec0b29..e209379 100644
--- a/mojo/tools/data/unittests
+++ b/mojo/tools/data/unittests
@@ -14,3 +14,4 @@
 mojo_common_unittests
 mojo_js_unittests
 mojo_service_manager_unittests
+mojo_view_manager_unittests
diff --git a/mojo/tools/mojob.sh b/mojo/tools/mojob.sh
index 291012c..b870cd1 100755
--- a/mojo/tools/mojob.sh
+++ b/mojo/tools/mojob.sh
@@ -61,9 +61,7 @@
 }
 
 do_pytests() {
-  echo "Running Python unit tests under mojo/public/tools/bindings/pylib ..."
-  python -m unittest \
-      discover -s mojo/public/tools/bindings/pylib -p "*_unittest.py"
+  python mojo/tools/run_mojo_python_tests.py || exit 1
 }
 
 do_gyp() {
diff --git a/mojo/tools/run_mojo_python_tests.py b/mojo/tools/run_mojo_python_tests.py
new file mode 100755
index 0000000..48b723c
--- /dev/null
+++ b/mojo/tools/run_mojo_python_tests.py
@@ -0,0 +1,40 @@
+#!/bin/python
+# 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 optparse
+import os
+import sys
+import unittest
+
+
+# TODO(dpranke): crbug.com/364709 . We should add the ability to return
+# JSONified results data for the bots.
+
+
+def main():
+  parser = optparse.OptionParser()
+  parser.add_option('-v', '--verbose', action='count', default=0)
+  options, args = parser.parse_args()
+  if args:
+    parser.usage()
+    return 1
+
+  chromium_src_dir = os.path.join(os.path.dirname(__file__),
+                                  os.pardir,
+                                  os.pardir)
+
+  loader = unittest.loader.TestLoader()
+  print "Running Python unit tests under mojo/public/tools/bindings/pylib ..."
+  suite = loader.discover(os.path.join(chromium_src_dir, 'mojo', 'public',
+                                      'tools', 'bindings', 'pylib'),
+                          pattern='*_unittest.py')
+
+  runner = unittest.runner.TextTestRunner(verbosity=(options.verbose+1))
+  result = runner.run(suite)
+  return 0 if result.wasSuccessful() else 1
+
+
+if __name__ == '__main__':
+  sys.exit(main())
diff --git a/native_client_sdk/doc_generated/devguide/tutorial/tutorial-part2.html b/native_client_sdk/doc_generated/devguide/tutorial/tutorial-part2.html
index 45fea11..ab9550b 100644
--- a/native_client_sdk/doc_generated/devguide/tutorial/tutorial-part2.html
+++ b/native_client_sdk/doc_generated/devguide/tutorial/tutorial-part2.html
@@ -76,7 +76,9 @@
 
 $(foreach src,$(SOURCES),$(eval $(call COMPILE_RULE,$(src),$(CFLAGS))))
 
-ifeq ($(CONFIG),Release)
+# The PNaCl workflow uses both an unstripped and finalized/stripped binary.
+# On NaCl, only produce a stripped binary for Release configs (not Debug).
+ifneq (,$(or $(findstring pnacl,$(TOOLCHAIN)),$(findstring Release,$(CONFIG))))
 $(eval $(call LINK_RULE,$(TARGET)_unstripped,$(SOURCES),$(LIBS),$(DEPS)))
 $(eval $(call STRIP_RULE,$(TARGET),$(TARGET)_unstripped))
 else
@@ -168,7 +170,7 @@
 <pre class="prettyprint">
 $(foreach src,$(SOURCES),$(eval $(call COMPILE_RULE,$(src),$(CFLAGS))))
 
-ifeq ($(CONFIG),Release)
+ifneq (,$(or $(findstring pnacl,$(TOOLCHAIN)),$(findstring Release,$(CONFIG))))
 $(eval $(call LINK_RULE,$(TARGET)_unstripped,$(SOURCES),$(LIBS),$(DEPS)))
 $(eval $(call STRIP_RULE,$(TARGET),$(TARGET)_unstripped))
 else
@@ -189,9 +191,11 @@
 example above, <code>part2_arm.nexe</code>, <code>part2_x86_32.nexe</code> and
 <code>part2_x86_64.nexe</code>.</p>
 <p>When <code>CONFIG</code> is <code>Release</code>, each executable is also stripped to remove
-debug information and reduce the file size:</p>
+debug information and reduce the file size. Otherwise, when the <code>TOOLCHAIN</code>
+is <code>pnacl</code>, the workflow involves creating an unstripped binary for debugging
+and then finalizing it and stripping it for publishing.</p>
 <pre class="prettyprint">
-ifeq ($(CONFIG),Release)
+ifneq (,$(or $(findstring pnacl,$(TOOLCHAIN)),$(findstring Release,$(CONFIG))))
 $(eval $(call LINK_RULE,$(TARGET)_unstripped,$(SOURCES),$(LIBS),$(DEPS)))
 $(eval $(call STRIP_RULE,$(TARGET),$(TARGET)_unstripped))
 else
diff --git a/native_client_sdk/doc_generated/redirects.json b/native_client_sdk/doc_generated/redirects.json
deleted file mode 100644
index 2f16825..0000000
--- a/native_client_sdk/doc_generated/redirects.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-  "": "index"
-}
diff --git a/native_client_sdk/doc_generated/reference/pnacl-c-cpp-language-support.html b/native_client_sdk/doc_generated/reference/pnacl-c-cpp-language-support.html
index 78ad20b..ce1bfea 100644
--- a/native_client_sdk/doc_generated/reference/pnacl-c-cpp-language-support.html
+++ b/native_client_sdk/doc_generated/reference/pnacl-c-cpp-language-support.html
@@ -71,7 +71,7 @@
 <p>Non-atomic memory accesses may be reordered, separated, elided or fused
 according to C and C++&#8217;s memory model before the pexe is created as well
 as after its creation. Accessing atomic memory location through
-non-atomic primitives is <cite>Undefined Behavior &lt;undefined_behavior&gt;</cite>.</p>
+non-atomic primitives is <a class="reference internal" href="/native-client/reference/pnacl-undefined-behavior.html#undefined-behavior"><em>Undefined Behavior</em></a>.</p>
 <p>As in C11/C++11 some atomic accesses may be implemented with locks on
 certain platforms. The <code>ATOMIC_*_LOCK_FREE</code> macros will always be
 <code>1</code>, signifying that all types are sometimes lock-free. The
@@ -183,7 +183,7 @@
 </section><section id="undefined-behavior">
 <h2 id="undefined-behavior">Undefined Behavior</h2>
 <p>The C and C++ languages expose some undefined behavior which is
-discussed in <cite>PNaCl Undefined Behavior &lt;undefined_behavior&gt;</cite>.</p>
+discussed in <a class="reference internal" href="/native-client/reference/pnacl-undefined-behavior.html#undefined-behavior"><em>PNaCl Undefined Behavior</em></a>.</p>
 </section><section id="floating-point">
 <h2 id="floating-point">Floating-Point</h2>
 <p>PNaCl exposes 32-bit and 64-bit floating point operations which are
diff --git a/native_client_sdk/src/build_tools/build_sdk.py b/native_client_sdk/src/build_tools/build_sdk.py
index 3f0d1f1..e90a142 100755
--- a/native_client_sdk/src/build_tools/build_sdk.py
+++ b/native_client_sdk/src/build_tools/build_sdk.py
@@ -358,7 +358,6 @@
     'libnacl_exception.a',
     'libnacl_list_mappings.a',
     'libppapi.a',
-    'libppapi_stub.a',
   ],
   'newlib' : [
     'crti.o',
@@ -942,8 +941,12 @@
     options.tar = True
 
   toolchains = ['newlib', 'glibc', 'arm', 'pnacl', 'host']
+
+  # Changes for experimental bionic builder
   if options.bionic:
     toolchains.append('bionic')
+    options.build_ports = False
+    options.build_app_engine = False
 
   print 'Building: ' + ' '.join(toolchains)
 
@@ -957,7 +960,10 @@
   pepper_old = str(chrome_version - 1)
   pepperdir = os.path.join(OUT_DIR, 'pepper_' + pepper_ver)
   pepperdir_old = os.path.join(OUT_DIR, 'pepper_' + pepper_old)
-  tarname = 'naclsdk_' + getos.GetPlatform() + '.tar.bz2'
+  if options.bionic:
+    tarname = 'naclsdk_bionic.tar.bz2'
+  else:
+    tarname = 'naclsdk_' + getos.GetPlatform() + '.tar.bz2'
   tarfile = os.path.join(OUT_DIR, tarname)
 
   if options.release:
@@ -987,7 +993,8 @@
   GenerateNotice(pepperdir)
 
   # Verify the SDK contains what we expect.
-  BuildStepVerifyFilelist(pepperdir)
+  if not options.bionic:
+    BuildStepVerifyFilelist(pepperdir)
 
   if options.tar:
     BuildStepTarBundle(pepper_ver, tarfile)
diff --git a/native_client_sdk/src/build_tools/buildbot_common.py b/native_client_sdk/src/build_tools/buildbot_common.py
index 5a08e1f..dd10870 100644
--- a/native_client_sdk/src/build_tools/buildbot_common.py
+++ b/native_client_sdk/src/build_tools/buildbot_common.py
@@ -28,8 +28,9 @@
     (win|mac|linux)_nacl_sdk_build
 
   Builder names:
-    (windows|mac|linux)-sdk-multi(rel)?"""
-  return '-sdk-multi' in os.getenv('BUILDBOT_BUILDERNAME', '')
+    (windows|mac|linux)-sdk-multi(bionic)(rel)?"""
+  bot =  os.getenv('BUILDBOT_BUILDERNAME', '')
+  return '-sdk-multi' in bot or '-sdk-bionic-multi' in bot
 
 
 def IsSDKTrybot():
diff --git a/native_client_sdk/src/build_tools/buildbot_run.py b/native_client_sdk/src/build_tools/buildbot_run.py
index 4a06b00..c24c6df 100755
--- a/native_client_sdk/src/build_tools/buildbot_run.py
+++ b/native_client_sdk/src/build_tools/buildbot_run.py
@@ -62,8 +62,12 @@
   else:
     new_script_dir = SCRIPT_DIR
 
+  args = [sys.executable, 'build_sdk.py']
+  if 'bionic' in os.getenv('BUILDBOT_BUILDERNAME', ''):
+    args.append('--bionic')
+
   try:
-    Run([sys.executable, 'build_sdk.py'], cwd=new_script_dir)
+    Run(args, cwd=new_script_dir)
   finally:
     if is_win:
       subprocess.check_call(['subst', '/D', subst_drive])
@@ -108,6 +112,9 @@
     # to pass --build-only argument.
     if os.getenv('BUILDBOT_BUILDERNAME', '').endswith('build'):
       options.build_only = True
+    # TODO(noelallen): Enable testing on bionic when we have an ARM solution.
+    if 'bionic' in os.getenv('BUILDBOT_BUILDERNAME', ''):
+      options.build_only = True
 
   StepArmRunHooks()
   StepRunUnittests()
diff --git a/native_client_sdk/src/build_tools/generate_make.py b/native_client_sdk/src/build_tools/generate_make.py
index d44d2a5..4188e7a 100644
--- a/native_client_sdk/src/build_tools/generate_make.py
+++ b/native_client_sdk/src/build_tools/generate_make.py
@@ -159,6 +159,7 @@
       'key': True,
       'channel': None,
       'permissions': pretty_permissions,
+      'multi_platform': desc.get('MULTI_PLATFORM', False),
       'version': build_version.ChromeVersionNoTrunk()
   }
   RunTemplateFileIfChanged(srcpath, dstpath, replace)
@@ -262,6 +263,7 @@
     'tools': tools,
     'sel_ldr': desc.get('SEL_LDR'),
     'targets': desc['TARGETS'],
+    'multi_platform': desc.get('MULTI_PLATFORM', False),
   }
   RunTemplateFileIfChanged(template, make_path, template_dict)
 
diff --git a/native_client_sdk/src/build_tools/parse_dsc.py b/native_client_sdk/src/build_tools/parse_dsc.py
index 1088fef..63e55d1 100755
--- a/native_client_sdk/src/build_tools/parse_dsc.py
+++ b/native_client_sdk/src/build_tools/parse_dsc.py
@@ -65,7 +65,8 @@
     'GROUP': (str, '', False),
     'EXPERIMENTAL': (bool, [True, False], False),
     'PERMISSIONS': (list, '', False),
-    'SOCKET_PERMISSIONS': (list, '', False)
+    'SOCKET_PERMISSIONS': (list, '', False),
+    'MULTI_PLATFORM': (bool, [True, False], False),
 }
 
 
diff --git a/native_client_sdk/src/build_tools/sdk_files.list b/native_client_sdk/src/build_tools/sdk_files.list
index 0427225..605cfce 100644
--- a/native_client_sdk/src/build_tools/sdk_files.list
+++ b/native_client_sdk/src/build_tools/sdk_files.list
@@ -40,6 +40,7 @@
 examples/tutorial/debugging/*
 examples/tutorial/dlopen/*
 examples/tutorial/load_progress/*
+examples/tutorial/multi_platform/*
 [win]examples/tutorial/make.bat
 examples/tutorial/Makefile
 examples/tutorial/testing/*
@@ -415,6 +416,7 @@
 tools/decode_dump.py
 [linux,mac]tools/dump_syms
 tools/fix_deps.py
+tools/fix_manifest.py
 tools/genhttpfs.py
 tools/getos.py
 tools/host_gcc.mk
diff --git a/native_client_sdk/src/doc/devguide/tutorial/tutorial-part2.rst b/native_client_sdk/src/doc/devguide/tutorial/tutorial-part2.rst
index 91c9377..36efa4f 100644
--- a/native_client_sdk/src/doc/devguide/tutorial/tutorial-part2.rst
+++ b/native_client_sdk/src/doc/devguide/tutorial/tutorial-part2.rst
@@ -69,7 +69,9 @@
 
     $(foreach src,$(SOURCES),$(eval $(call COMPILE_RULE,$(src),$(CFLAGS))))
 
-    ifeq ($(CONFIG),Release)
+    # The PNaCl workflow uses both an unstripped and finalized/stripped binary.
+    # On NaCl, only produce a stripped binary for Release configs (not Debug).
+    ifneq (,$(or $(findstring pnacl,$(TOOLCHAIN)),$(findstring Release,$(CONFIG))))
     $(eval $(call LINK_RULE,$(TARGET)_unstripped,$(SOURCES),$(LIBS),$(DEPS)))
     $(eval $(call STRIP_RULE,$(TARGET),$(TARGET)_unstripped))
     else
@@ -182,7 +184,7 @@
 
     $(foreach src,$(SOURCES),$(eval $(call COMPILE_RULE,$(src),$(CFLAGS))))
 
-    ifeq ($(CONFIG),Release)
+    ifneq (,$(or $(findstring pnacl,$(TOOLCHAIN)),$(findstring Release,$(CONFIG))))
     $(eval $(call LINK_RULE,$(TARGET)_unstripped,$(SOURCES),$(LIBS),$(DEPS)))
     $(eval $(call STRIP_RULE,$(TARGET),$(TARGET)_unstripped))
     else
@@ -206,11 +208,13 @@
 ``part2_x86_64.nexe``.
 
 When ``CONFIG`` is ``Release``, each executable is also stripped to remove
-debug information and reduce the file size:
+debug information and reduce the file size. Otherwise, when the ``TOOLCHAIN``
+is ``pnacl``, the workflow involves creating an unstripped binary for debugging
+and then finalizing it and stripping it for publishing.
 
 .. naclcode::
 
-    ifeq ($(CONFIG),Release)
+    ifneq (,$(or $(findstring pnacl,$(TOOLCHAIN)),$(findstring Release,$(CONFIG))))
     $(eval $(call LINK_RULE,$(TARGET)_unstripped,$(SOURCES),$(LIBS),$(DEPS)))
     $(eval $(call STRIP_RULE,$(TARGET),$(TARGET)_unstripped))
     else
diff --git a/native_client_sdk/src/doc/reference/pnacl-c-cpp-language-support.rst b/native_client_sdk/src/doc/reference/pnacl-c-cpp-language-support.rst
index 5bb5ac8..cd62a2b 100644
--- a/native_client_sdk/src/doc/reference/pnacl-c-cpp-language-support.rst
+++ b/native_client_sdk/src/doc/reference/pnacl-c-cpp-language-support.rst
@@ -59,7 +59,7 @@
 Non-atomic memory accesses may be reordered, separated, elided or fused
 according to C and C++'s memory model before the pexe is created as well
 as after its creation. Accessing atomic memory location through
-non-atomic primitives is `Undefined Behavior <undefined_behavior>`.
+non-atomic primitives is :ref:`Undefined Behavior <undefined_behavior>`.
 
 As in C11/C++11 some atomic accesses may be implemented with locks on
 certain platforms. The ``ATOMIC_*_LOCK_FREE`` macros will always be
@@ -202,7 +202,7 @@
 ==================
 
 The C and C++ languages expose some undefined behavior which is
-discussed in `PNaCl Undefined Behavior <undefined_behavior>`.
+discussed in :ref:`PNaCl Undefined Behavior <undefined_behavior>`.
 
 Floating-Point
 ==============
diff --git a/native_client_sdk/src/examples/demo/nacl_io/handlers.c b/native_client_sdk/src/examples/demo/nacl_io/handlers.c
index d615eda..ae40d2d 100644
--- a/native_client_sdk/src/examples/demo/nacl_io/handlers.c
+++ b/native_client_sdk/src/examples/demo/nacl_io/handlers.c
@@ -379,11 +379,11 @@
   offset = ftell(file);
   if (offset < 0) {
     *output = PrintfToNewString(
-        "fseek succeeded, but ftell returned error %d.", offset);
+        "fseek succeeded, but ftell returned error %ld.", offset);
     return 4;
   }
 
-  *output = PrintfToNewString("fseek\1%s\1%d", file_index_string, offset);
+  *output = PrintfToNewString("fseek\1%s\1%ld", file_index_string, offset);
   return 0;
 }
 
@@ -507,7 +507,7 @@
     return 2;
   }
 
-  *output = PrintfToNewString("stat\1%s\1%d", filename, buf.st_size);
+  *output = PrintfToNewString("stat\1%s\1%lld", filename, buf.st_size);
   return 0;
 }
 
@@ -601,8 +601,8 @@
 
   entry = readdir(dir);
   if (entry != NULL) {
-    *output = PrintfToNewString("readdir\1%s\1%d\1%s", dir_index_string,
-                                entry->d_ino, entry->d_name);
+    *output = PrintfToNewString(
+        "readdir\1%s\1%lld\1%s", dir_index_string, entry->d_ino, entry->d_name);
   } else {
     *output = PrintfToNewString("readdir\1%s\1\1", dir_index_string);
   }
diff --git a/native_client_sdk/src/examples/demo/nacl_io/nacl_io_demo.c b/native_client_sdk/src/examples/demo/nacl_io/nacl_io_demo.c
index 76eea39..66b2591 100644
--- a/native_client_sdk/src/examples/demo/nacl_io/nacl_io_demo.c
+++ b/native_client_sdk/src/examples/demo/nacl_io/nacl_io_demo.c
@@ -349,7 +349,7 @@
   if (!EnqueueMessage(strdup(buffer))) {
     struct PP_Var var;
     var = PrintfToVar(
-        "Warning: dropped message \"%s\" because the queue was full.", message);
+        "Warning: dropped message \"%s\" because the queue was full.", buffer);
     ppb_messaging_interface->PostMessage(g_instance, var);
   }
 }
diff --git a/native_client_sdk/src/examples/demo/nacl_io/nacl_io_demo.h b/native_client_sdk/src/examples/demo/nacl_io/nacl_io_demo.h
index 6eccb5e..b507110 100644
--- a/native_client_sdk/src/examples/demo/nacl_io/nacl_io_demo.h
+++ b/native_client_sdk/src/examples/demo/nacl_io/nacl_io_demo.h
@@ -7,11 +7,12 @@
 
 #include <stdarg.h>
 #include "ppapi/c/pp_var.h"
+#include "sdk_util/macros.h"  // for PRINTF_LIKE
 
 struct PP_Var CStrToVar(const char* str);
-char* VprintfToNewString(const char* format, va_list args);
-char* PrintfToNewString(const char* format, ...);
-struct PP_Var PrintfToVar(const char* format, ...);
+char* VprintfToNewString(const char* format, va_list args) PRINTF_LIKE(1, 0);
+char* PrintfToNewString(const char* format, ...) PRINTF_LIKE(1, 2);
+struct PP_Var PrintfToVar(const char* format, ...) PRINTF_LIKE(1, 2);
 uint32_t VarToCStr(struct PP_Var var, char* buffer, uint32_t length);
 
 #endif /* NACL_IO_DEMO_H_ */
diff --git a/native_client_sdk/src/examples/tutorial/multi_platform/README b/native_client_sdk/src/examples/tutorial/multi_platform/README
new file mode 100644
index 0000000..08218fd
--- /dev/null
+++ b/native_client_sdk/src/examples/tutorial/multi_platform/README
@@ -0,0 +1,22 @@
+==================
+Multi-platform App
+==================
+
+Please see the online documentation here:
+
+  https://developer.chrome.com/native-client/devguide/distributing#packaged-application
+
+
+This example shows how to use the SDK build system to generate a Chrome App
+with support for multi-platform zip files.
+
+Starting with Chrome 28, the Chrome Web Store includes a feature called
+**multi-platform zip files.** This feature lets you structure your application
+directory and zip file in a way that reduces the size of the user download
+package.  Here's how this feature works:
+
+* You still include all the .nexe files in the zip file that you upload to
+  the CWS, but you designate specific .nexe files (and other files if
+  appropriate) for specific architectures.
+* The Chrome Web Store re-packages your app, so that users only download
+  the files that they need for their specific architecture.
diff --git a/native_client_sdk/src/examples/tutorial/multi_platform/example.dsc b/native_client_sdk/src/examples/tutorial/multi_platform/example.dsc
new file mode 100644
index 0000000..ad5cc23
--- /dev/null
+++ b/native_client_sdk/src/examples/tutorial/multi_platform/example.dsc
@@ -0,0 +1,20 @@
+{
+  'TOOLS': ['newlib', 'glibc'],
+  'TARGETS': [
+    {
+      'NAME': 'multi_platform',
+      'TYPE': 'main',
+      'SOURCES': ['multi_platform.cc'],
+      'LIBS': ['ppapi_cpp', 'ppapi', 'pthread'],
+    }
+  ],
+  'DATA': [
+    'example.js',
+    'README',
+  ],
+  'DEST': 'examples/tutorial',
+  'NAME': 'multi_platform',
+  'TITLE': 'Multi-platform App',
+  'GROUP': 'Tutorial',
+  'MULTI_PLATFORM': True,
+}
diff --git a/native_client_sdk/src/examples/tutorial/multi_platform/example.js b/native_client_sdk/src/examples/tutorial/multi_platform/example.js
new file mode 100644
index 0000000..a2f86d0
--- /dev/null
+++ b/native_client_sdk/src/examples/tutorial/multi_platform/example.js
@@ -0,0 +1,16 @@
+// Copyright (c) 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.
+
+function moduleDidLoad() {
+  // The module is not hidden by default so we can easily see if the plugin
+  // failed to load.
+  common.hideModule();
+}
+
+// This function is called by common.js when a message is received from the
+// NaCl module.
+function handleMessage(message) {
+  var logEl = document.getElementById('log');
+  logEl.textContent += message.data;
+}
diff --git a/native_client_sdk/src/examples/tutorial/multi_platform/index.html b/native_client_sdk/src/examples/tutorial/multi_platform/index.html
new file mode 100644
index 0000000..14d7cee
--- /dev/null
+++ b/native_client_sdk/src/examples/tutorial/multi_platform/index.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+  <!--
+  Copyright (c) 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.
+  -->
+<head>
+  <meta http-equiv="Pragma" content="no-cache">
+  <meta http-equiv="Expires" content="-1">
+  <title>{{title}}</title>
+  <script type="text/javascript" src="common.js"></script>
+  <script type="text/javascript" src="example.js"></script>
+</head>
+<body {{attrs}}>
+  <h1>{{title}}</h1>
+  <h2>Status: <code id="statusField">NO-STATUS</code></h2>
+  <div id="listener"></div>
+  <div id="log"></div>
+</body>
+</html>
diff --git a/native_client_sdk/src/examples/tutorial/multi_platform/multi_platform.cc b/native_client_sdk/src/examples/tutorial/multi_platform/multi_platform.cc
new file mode 100644
index 0000000..946808c
--- /dev/null
+++ b/native_client_sdk/src/examples/tutorial/multi_platform/multi_platform.cc
@@ -0,0 +1,36 @@
+// Copyright (c) 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.
+
+#include "ppapi/cpp/instance.h"
+#include "ppapi/cpp/module.h"
+#include "ppapi/cpp/var.h"
+
+class Instance : public pp::Instance {
+ public:
+  explicit Instance(PP_Instance instance) : pp::Instance(instance) {}
+  virtual ~Instance() {}
+
+  virtual bool Init(uint32_t argc, const char* argn[], const char* argv[]) {
+    PostMessage("Hello, multi-platform!");
+    return true;
+  }
+};
+
+class Module : public pp::Module {
+ public:
+  Module() : pp::Module() {}
+  virtual ~Module() {}
+
+  virtual pp::Instance* CreateInstance(PP_Instance instance) {
+    return new Instance(instance);
+  }
+};
+
+namespace pp {
+
+Module* CreateModule() {
+  return new ::Module();
+}
+
+}  // namespace pp
diff --git a/native_client_sdk/src/gonacl_appengine/src/bullet/Makefile b/native_client_sdk/src/gonacl_appengine/src/bullet/Makefile
index 77ff8c0..a2e76da 100644
--- a/native_client_sdk/src/gonacl_appengine/src/bullet/Makefile
+++ b/native_client_sdk/src/gonacl_appengine/src/bullet/Makefile
@@ -28,7 +28,9 @@
 
 $(foreach src,$(SOURCES),$(eval $(call COMPILE_RULE,$(src),$(CFLAGS))))
 
-ifeq ($(CONFIG),Release)
+# The PNaCl workflow uses both an unstripped and finalized/stripped binary.
+# On NaCl, only produce a stripped binary for Release configs (not Debug).
+ifneq (,$(or $(findstring pnacl,$(TOOLCHAIN)),$(findstring Release,$(CONFIG))))
 $(eval $(call LINK_RULE,$(TARGET)_unstripped,$(SOURCES),$(LIBS),$(DEPS)))
 $(eval $(call STRIP_RULE,$(TARGET),$(TARGET)_unstripped))
 else
diff --git a/native_client_sdk/src/gonacl_appengine/src/cube/Makefile b/native_client_sdk/src/gonacl_appengine/src/cube/Makefile
index dbd9d63..feef472 100644
--- a/native_client_sdk/src/gonacl_appengine/src/cube/Makefile
+++ b/native_client_sdk/src/gonacl_appengine/src/cube/Makefile
@@ -23,7 +23,9 @@
 
 $(foreach src,$(SOURCES),$(eval $(call COMPILE_RULE,$(src),$(CFLAGS))))
 
-ifeq ($(CONFIG),Release)
+# The PNaCl workflow uses both an unstripped and finalized/stripped binary.
+# On NaCl, only produce a stripped binary for Release configs (not Debug).
+ifneq (,$(or $(findstring pnacl,$(TOOLCHAIN)),$(findstring Release,$(CONFIG))))
 $(eval $(call LINK_RULE,$(TARGET)_unstripped,$(SOURCES),$(LIBS),$(DEPS)))
 $(eval $(call STRIP_RULE,$(TARGET),$(TARGET)_unstripped))
 else
diff --git a/native_client_sdk/src/gonacl_appengine/src/earth/Makefile b/native_client_sdk/src/gonacl_appengine/src/earth/Makefile
index 6823ec6..16becb8 100644
--- a/native_client_sdk/src/gonacl_appengine/src/earth/Makefile
+++ b/native_client_sdk/src/gonacl_appengine/src/earth/Makefile
@@ -20,7 +20,9 @@
 
 $(foreach src,$(SOURCES),$(eval $(call COMPILE_RULE,$(src),$(CFLAGS))))
 
-ifeq ($(CONFIG),Release)
+# The PNaCl workflow uses both an unstripped and finalized/stripped binary.
+# On NaCl, only produce a stripped binary for Release configs (not Debug).
+ifneq (,$(or $(findstring pnacl,$(TOOLCHAIN)),$(findstring Release,$(CONFIG))))
 $(eval $(call LINK_RULE,$(TARGET)_unstripped,$(SOURCES),$(LIBS),$(DEPS)))
 $(eval $(call STRIP_RULE,$(TARGET),$(TARGET)_unstripped))
 else
diff --git a/native_client_sdk/src/gonacl_appengine/src/life/Makefile b/native_client_sdk/src/gonacl_appengine/src/life/Makefile
index 890f37c..4b3d3ee 100644
--- a/native_client_sdk/src/gonacl_appengine/src/life/Makefile
+++ b/native_client_sdk/src/gonacl_appengine/src/life/Makefile
@@ -20,7 +20,9 @@
 
 $(foreach src,$(SOURCES),$(eval $(call COMPILE_RULE,$(src),$(CFLAGS))))
 
-ifeq ($(CONFIG),Release)
+# The PNaCl workflow uses both an unstripped and finalized/stripped binary.
+# On NaCl, only produce a stripped binary for Release configs (not Debug).
+ifneq (,$(or $(findstring pnacl,$(TOOLCHAIN)),$(findstring Release,$(CONFIG))))
 $(eval $(call LINK_RULE,$(TARGET)_unstripped,$(SOURCES),$(LIBS),$(DEPS)))
 $(eval $(call STRIP_RULE,$(TARGET),$(TARGET)_unstripped))
 else
diff --git a/native_client_sdk/src/gonacl_appengine/src/voronoi/Makefile b/native_client_sdk/src/gonacl_appengine/src/voronoi/Makefile
index d92fc53..65af2f3 100644
--- a/native_client_sdk/src/gonacl_appengine/src/voronoi/Makefile
+++ b/native_client_sdk/src/gonacl_appengine/src/voronoi/Makefile
@@ -20,7 +20,9 @@
 
 $(foreach src,$(SOURCES),$(eval $(call COMPILE_RULE,$(src),$(CFLAGS))))
 
-ifeq ($(CONFIG),Release)
+# The PNaCl workflow uses both an unstripped and finalized/stripped binary.
+# On NaCl, only produce a stripped binary for Release configs (not Debug).
+ifneq (,$(or $(findstring pnacl,$(TOOLCHAIN)),$(findstring Release,$(CONFIG))))
 $(eval $(call LINK_RULE,$(TARGET)_unstripped,$(SOURCES),$(LIBS),$(DEPS)))
 $(eval $(call STRIP_RULE,$(TARGET),$(TARGET)_unstripped))
 else
diff --git a/native_client_sdk/src/gonacl_appengine/static/bullet/fullscreen.html b/native_client_sdk/src/gonacl_appengine/static/bullet/fullscreen.html
index 6892147..1de54dc 100644
--- a/native_client_sdk/src/gonacl_appengine/static/bullet/fullscreen.html
+++ b/native_client_sdk/src/gonacl_appengine/static/bullet/fullscreen.html
@@ -19,7 +19,7 @@
     <script type="text/javascript" src="scenes.js"></script>
 
     <script type="text/javascript">
-      var expandoClosedMsg = 'more info';
+      var expandoClosedMsg = 'Click for options';
       var expandoOpenMsg = '×';
       var expandoClosed = true;
 
diff --git a/native_client_sdk/src/libraries/nacl_io/dbgprint.c b/native_client_sdk/src/libraries/nacl_io/dbgprint.c
deleted file mode 100644
index b8a5bdf..0000000
--- a/native_client_sdk/src/libraries/nacl_io/dbgprint.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Copyright (c) 2013 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 "nacl_io/dbgprint.h"
-
-#include "nacl_io/kernel_wrap_real.h"
-
-#include <alloca.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <string.h>
-
-void dbgprintf(const char* format, ...) {
-  va_list args;
-  size_t wrote;
-  char* output;
-
-#ifdef _MSC_VER
-  /* TODO(sbc): vsnprintf on win32 does not return the
-   * size of the buffer needed.  This can be implemented
-   * on win32 in terms of _vscprintf; */
-#error "not implemented for win32"
-#endif
-
-  va_start(args, format);
-  int len = vsnprintf(NULL, 0, format, args);
-  va_end(args);
-  output = alloca(len + 1);
-
-  va_start(args, format);
-  vsnprintf(output, len + 1, format, args);
-  va_end(args);
-
-  _real_write(2, output, strlen(output), &wrote);
-}
diff --git a/native_client_sdk/src/libraries/nacl_io/dbgprint.h b/native_client_sdk/src/libraries/nacl_io/dbgprint.h
deleted file mode 100644
index 305fea5..0000000
--- a/native_client_sdk/src/libraries/nacl_io/dbgprint.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/* Copyright (c) 2013 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 LIBRARIES_NACL_IO_DBGPRINT_H_
-#define LIBRARIES_NACL_IO_DBGPRINT_H_
-
-#include "sdk_util/macros.h"
-
-EXTERN_C_BEGIN
-
-void dbgprintf(const char* format, ...);
-
-EXTERN_C_END
-
-#endif  /* LIBRARIES_NACL_IO_DBGPRINT_H_ */
diff --git a/native_client_sdk/src/libraries/nacl_io/httpfs/http_fs.cc b/native_client_sdk/src/libraries/nacl_io/httpfs/http_fs.cc
index 2603158..f5f8089 100644
--- a/native_client_sdk/src/libraries/nacl_io/httpfs/http_fs.cc
+++ b/native_client_sdk/src/libraries/nacl_io/httpfs/http_fs.cc
@@ -17,10 +17,10 @@
 
 #include <ppapi/c/pp_errors.h>
 
-#include "nacl_io/dbgprint.h"
 #include "nacl_io/dir_node.h"
 #include "nacl_io/httpfs/http_fs_node.h"
 #include "nacl_io/kernel_handle.h"
+#include "nacl_io/log.h"
 #include "nacl_io/osinttypes.h"
 #include "nacl_io/osunistd.h"
 #include "sdk_util/string_util.h"
@@ -319,7 +319,7 @@
           mode = S_IFCHR;
           break;
         default:
-          dbgprintf("Unable to parse type %s for %s.\n",
+          LOG_ERROR("Unable to parse type %s for %s.\n",
                     modestr.c_str(),
                     name.c_str());
           return EINVAL;
@@ -332,7 +332,7 @@
           mode |= S_IRUSR | S_IRGRP | S_IROTH;
           break;
         default:
-          dbgprintf("Unable to parse read %s for %s.\n",
+          LOG_ERROR("Unable to parse read %s for %s.\n",
                     modestr.c_str(),
                     name.c_str());
           return EINVAL;
@@ -345,7 +345,7 @@
           mode |= S_IWUSR | S_IWGRP | S_IWOTH;
           break;
         default:
-          dbgprintf("Unable to parse write %s for %s.\n",
+          LOG_ERROR("Unable to parse write %s for %s.\n",
                     modestr.c_str(),
                     name.c_str());
           return EINVAL;
diff --git a/native_client_sdk/src/libraries/nacl_io/kernel_wrap_dummy.cc b/native_client_sdk/src/libraries/nacl_io/kernel_wrap_dummy.cc
index 7e52662..ab5d199 100644
--- a/native_client_sdk/src/libraries/nacl_io/kernel_wrap_dummy.cc
+++ b/native_client_sdk/src/libraries/nacl_io/kernel_wrap_dummy.cc
@@ -70,6 +70,10 @@
   return 0;
 }
 
+void _real_exit(int status) {
+  exit(status);
+}
+
 #endif
 
 // The Chromium build system defines __linux__ even for native client builds,
diff --git a/native_client_sdk/src/libraries/nacl_io/library.dsc b/native_client_sdk/src/libraries/nacl_io/library.dsc
index 14855cc..dbc2bb2 100644
--- a/native_client_sdk/src/libraries/nacl_io/library.dsc
+++ b/native_client_sdk/src/libraries/nacl_io/library.dsc
@@ -11,7 +11,6 @@
       'NAME' : 'nacl_io',
       'TYPE' : 'lib',
       'SOURCES' : [
-        'dbgprint.c',
         "devfs/dev_fs.cc",
         "devfs/jspipe_node.cc",
         "devfs/tty_event_emitter.cc",
@@ -40,6 +39,7 @@
         "kernel_wrap_glibc.cc",
         "kernel_wrap_newlib.cc",
         "kernel_wrap_win.cc",
+        "log.c",
         "memfs/mem_fs.cc",
         "memfs/mem_fs_node.cc",
         "nacl_io.cc",
@@ -161,7 +161,6 @@
     {
       'FILES': [
         "char_node.h",
-        "dbgprint.h",
         "devfs/dev_fs.h",
         "devfs/jspipe_node.h",
         "devfs/tty_event_emitter.h",
@@ -192,6 +191,7 @@
         "kernel_proxy.h",
         "kernel_wrap.h",
         "kernel_wrap_real.h",
+        "log.h",
         "memfs/mem_fs.h",
         "memfs/mem_fs_node.h",
         "nacl_io.h",
diff --git a/native_client_sdk/src/libraries/nacl_io/log.c b/native_client_sdk/src/libraries/nacl_io/log.c
new file mode 100644
index 0000000..cc36cc7
--- /dev/null
+++ b/native_client_sdk/src/libraries/nacl_io/log.c
@@ -0,0 +1,36 @@
+/* Copyright (c) 2013 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 "nacl_io/log.h"
+
+#include "nacl_io/kernel_wrap_real.h"
+
+#include <alloca.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <string.h>
+
+void nacl_io_log(const char* format, ...) {
+  va_list args;
+  size_t wrote;
+  char* output;
+
+#ifdef _MSC_VER
+  /* TODO(sbc): vsnprintf on win32 does not return the
+   * size of the buffer needed.  This can be implemented
+   * on win32 in terms of _vscprintf; */
+#error "not implemented for win32"
+#endif
+
+  va_start(args, format);
+  int len = vsnprintf(NULL, 0, format, args);
+  va_end(args);
+  output = alloca(len + 1);
+
+  va_start(args, format);
+  vsnprintf(output, len + 1, format, args);
+  va_end(args);
+
+  _real_write(2, output, strlen(output), &wrote);
+}
diff --git a/native_client_sdk/src/libraries/nacl_io/log.h b/native_client_sdk/src/libraries/nacl_io/log.h
new file mode 100644
index 0000000..4e1a88e
--- /dev/null
+++ b/native_client_sdk/src/libraries/nacl_io/log.h
@@ -0,0 +1,35 @@
+/* Copyright (c) 2013 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 LIBRARIES_NACL_IO_LOG_H_
+#define LIBRARIES_NACL_IO_LOG_H_
+
+#include "sdk_util/macros.h"
+
+#define LOG_PREFIX "nacl_io: "
+
+#if defined(NACL_IO_LOGGING)
+#define LOG_TRACE(format, ...) \
+  nacl_io_log(LOG_PREFIX format "\n", ##__VA_ARGS__)
+#else
+#define LOG_TRACE(format, ...)
+#endif
+
+#define LOG_ERROR(format, ...) \
+  nacl_io_log(LOG_PREFIX "error: " format "\n", ##__VA_ARGS__)
+
+EXTERN_C_BEGIN
+
+/*
+ * Low level logging function for nacl_io log messages.
+ *
+ * This function sends its output directly to the IRT standard out
+ * file descriptor, which by default will apear on the standard out
+ * or chrome or sel_ldr.
+ */
+void nacl_io_log(const char* format, ...) PRINTF_LIKE(1, 2);
+
+EXTERN_C_END
+
+#endif  /* LIBRARIES_NACL_IO_LOG_H_ */
diff --git a/native_client_sdk/src/libraries/nacl_io/pepper/all_interfaces.h b/native_client_sdk/src/libraries/nacl_io/pepper/all_interfaces.h
index a22e127..a889ecd 100644
--- a/native_client_sdk/src/libraries/nacl_io/pepper/all_interfaces.h
+++ b/native_client_sdk/src/libraries/nacl_io/pepper/all_interfaces.h
@@ -112,6 +112,14 @@
   METHOD1(VarArrayBufferInterface, void, Unmap, PP_Var)
 END_INTERFACE(VarArrayBufferInterface, PPB_VarArrayBuffer_1_0)
 
+BEGIN_INTERFACE(VarDictionaryInterface, PPB_VarDictionary_1_0,
+                PPB_VAR_DICTIONARY_INTERFACE_1_0)
+  METHOD0(VarDictionaryInterface, PP_Var, Create)
+  METHOD3(VarDictionaryInterface, PP_Bool, Set, PP_Var, PP_Var, PP_Var)
+  METHOD2(VarDictionaryInterface, PP_Var, Get, PP_Var, PP_Var)
+  METHOD1(VarDictionaryInterface, PP_Var, GetKeys, PP_Var)
+END_INTERFACE(VarDictionaryInterface, PPB_VarDictionary_1_0)
+
 /* Chrome M18 required */
 BEGIN_INTERFACE(VarInterface, PPB_Var_1_1, PPB_VAR_INTERFACE_1_1)
   METHOD1(VarInterface, void, AddRef, PP_Var)
diff --git a/native_client_sdk/src/libraries/nacl_io/pepper_interface.h b/native_client_sdk/src/libraries/nacl_io/pepper_interface.h
index 6b25c92..c896431 100644
--- a/native_client_sdk/src/libraries/nacl_io/pepper_interface.h
+++ b/native_client_sdk/src/libraries/nacl_io/pepper_interface.h
@@ -29,6 +29,7 @@
 #include <ppapi/c/ppb_var.h>
 #include <ppapi/c/ppb_var_array.h>
 #include <ppapi/c/ppb_var_array_buffer.h>
+#include <ppapi/c/ppb_var_dictionary.h>
 
 #include <sdk_util/macros.h>
 
diff --git a/native_client_sdk/src/libraries/nacl_io/real_pepper_interface.cc b/native_client_sdk/src/libraries/nacl_io/real_pepper_interface.cc
index 3fcc7a0..946cdd4 100644
--- a/native_client_sdk/src/libraries/nacl_io/real_pepper_interface.cc
+++ b/native_client_sdk/src/libraries/nacl_io/real_pepper_interface.cc
@@ -8,7 +8,7 @@
 #include <stdio.h>
 #include <ppapi/c/pp_errors.h>
 
-#include "nacl_io/dbgprint.h"
+#include "nacl_io/log.h"
 
 namespace nacl_io {
 
@@ -88,7 +88,7 @@
     if (iface) \
       BaseClass##interface_ = new Real##BaseClass(iface); \
     else \
-      dbgprintf("nacl_io: interface missing: %s\n", InterfaceString); \
+      LOG_ERROR("interface missing: %s\n", InterfaceString); \
   }
 #include "nacl_io/pepper/all_interfaces.h"
 }
diff --git a/native_client_sdk/src/libraries/sdk_util/macros.h b/native_client_sdk/src/libraries/sdk_util/macros.h
index e2e5400..b1bc75e 100644
--- a/native_client_sdk/src/libraries/sdk_util/macros.h
+++ b/native_client_sdk/src/libraries/sdk_util/macros.h
@@ -46,4 +46,20 @@
     force_link_##x = 1; \
   }
 
+/**
+ * Macro to error out when a printf-like function is passed incorrect arguments.
+ *
+ * Use like this:
+ * void foo(const char* fmt, ...) PRINTF_LIKE(1, 2);
+ *
+ * The first argument is the location of the fmt string (1-based).
+ * The second argument is the location of the first argument to validate (also
+ *   1-based, but can be zero if the function uses a va_list, like vprintf.)
+ */
+#if defined(__GNUC__)
+#define PRINTF_LIKE(a, b) __attribute__ ((format(printf, a, b)))
+#else
+#define PRINTF_LIKE(a, b)
+#endif
+
 #endif  /* LIBRARIES_SDK_UTIL_MACROS_H_ */
diff --git a/native_client_sdk/src/resources/Makefile.example.template b/native_client_sdk/src/resources/Makefile.example.template
index 1c0892a..73f3996 100644
--- a/native_client_sdk/src/resources/Makefile.example.template
+++ b/native_client_sdk/src/resources/Makefile.example.template
@@ -34,6 +34,12 @@
 EXTRA_INC_PATHS={{' '.join(targets[0]['INCLUDES'])}}
 [[]]
 
+[[if multi_platform:]]
+# Build with platform-specific subdirectories, to reduce the download size of
+# the app.
+MULTI_PLATFORM = 1
+[[]]
+
 include $(NACL_SDK_ROOT)/tools/common.mk
 
 [[if desc.get('SOCKET_PERMISSIONS'):]]
@@ -96,8 +102,14 @@
 [[  elif target['TYPE'] == 'so-standalone':]]
 $(eval $(call SO_RULE,{{name}},$({{sources}}),,,1))
 [[  else:]]
+# The PNaCl workflow uses both an unstripped and finalized/stripped binary.
+# On NaCl, only produce a stripped binary for Release configs (not Debug).
+ifneq (,$(or $(findstring pnacl,$(TOOLCHAIN)),$(findstring Release,$(CONFIG))))
 $(eval $(call LINK_RULE,{{name}}_unstripped,$({{sources}}),$(LIBS),$(DEPS)))
 $(eval $(call STRIP_RULE,{{name}},{{name}}_unstripped))
+else
+$(eval $(call LINK_RULE,{{name}},$({{sources}}),$(LIBS),$(DEPS)))
+endif
 [[]]
 
 $(eval $(call NMF_RULE,$(TARGET),)){{post}}
diff --git a/native_client_sdk/src/resources/manifest.json.template b/native_client_sdk/src/resources/manifest.json.template
index 31882ce..f240fd2 100644
--- a/native_client_sdk/src/resources/manifest.json.template
+++ b/native_client_sdk/src/resources/manifest.json.template
@@ -26,5 +26,21 @@
 [[]]
     "scopes": ["https://www.googleapis.com/auth/drive"]
   },
+[[if multi_platform:]]
+  "platforms": [
+    {
+      "nacl_arch": "x86-64",
+      "sub_package_path": "_platform_specific/x86-64"
+    },
+    {
+      "nacl_arch": "x86-32",
+      "sub_package_path": "_platform_specific/x86-32"
+    },
+    {
+      "nacl_arch": "arm",
+      "sub_package_path": "_platform_specific/arm"
+    }
+  ],
+[[]]
   "permissions": {{permissions}}
 }
diff --git a/native_client_sdk/src/tests/nacl_io_test/example.dsc b/native_client_sdk/src/tests/nacl_io_test/example.dsc
index 1a0c565..15c0f47 100644
--- a/native_client_sdk/src/tests/nacl_io_test/example.dsc
+++ b/native_client_sdk/src/tests/nacl_io_test/example.dsc
@@ -29,6 +29,8 @@
         'fake_ppapi/fake_var_array_buffer_interface.h',
         'fake_ppapi/fake_var_array_interface.cc',
         'fake_ppapi/fake_var_array_interface.h',
+        'fake_ppapi/fake_var_dictionary_interface.cc',
+        'fake_ppapi/fake_var_dictionary_interface.h',
         'fake_ppapi/fake_var_interface.cc',
         'fake_ppapi/fake_var_interface.h',
         'fake_ppapi/fake_var_manager.cc',
diff --git a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_pepper_interface.cc b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_pepper_interface.cc
index f070c03..21f49f5 100644
--- a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_pepper_interface.cc
+++ b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_pepper_interface.cc
@@ -24,6 +24,9 @@
      var_array_interface_(&var_manager_),
      var_array_buffer_interface_(&var_manager_),
      var_interface_(&var_manager_),
+     var_dictionary_interface_(&var_manager_,
+                               &var_interface_,
+                               &var_array_interface_),
      resolver_interface_(this),
      net_address_interface_(this) {
   FakeInstanceResource* instance_resource = new FakeInstanceResource;
@@ -48,6 +51,10 @@
   return &var_array_buffer_interface_;
 }
 
+VarDictionaryInterface* FakePepperInterface::GetVarDictionaryInterface() {
+  return &var_dictionary_interface_;
+}
+
 VarInterface* FakePepperInterface::GetVarInterface() {
   return &var_interface_;
 }
diff --git a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_pepper_interface.h b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_pepper_interface.h
index a1a5ebc..1e6786c 100644
--- a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_pepper_interface.h
+++ b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_pepper_interface.h
@@ -12,6 +12,7 @@
 #include "fake_ppapi/fake_resource_manager.h"
 #include "fake_ppapi/fake_var_array_buffer_interface.h"
 #include "fake_ppapi/fake_var_array_interface.h"
+#include "fake_ppapi/fake_var_dictionary_interface.h"
 #include "fake_ppapi/fake_var_interface.h"
 #include "fake_ppapi/fake_var_manager.h"
 #include "nacl_io/pepper_interface_dummy.h"
@@ -25,6 +26,7 @@
   virtual nacl_io::MessagingInterface* GetMessagingInterface();
   virtual nacl_io::VarArrayInterface* GetVarArrayInterface();
   virtual nacl_io::VarArrayBufferInterface* GetVarArrayBufferInterface();
+  virtual nacl_io::VarDictionaryInterface* GetVarDictionaryInterface();
   virtual nacl_io::VarInterface* GetVarInterface();
   virtual nacl_io::HostResolverInterface* GetHostResolverInterface();
   virtual nacl_io::NetAddressInterface* GetNetAddressInterface();
@@ -43,6 +45,7 @@
   FakeVarArrayInterface var_array_interface_;
   FakeVarArrayBufferInterface var_array_buffer_interface_;
   FakeVarInterface var_interface_;
+  FakeVarDictionaryInterface var_dictionary_interface_;
   FakeHostResolverInterface resolver_interface_;
   FakeNetAddressInterface net_address_interface_;
 
diff --git a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_var_array_buffer_interface.h b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_var_array_buffer_interface.h
index fb48371..8f0d23e 100644
--- a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_var_array_buffer_interface.h
+++ b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_var_array_buffer_interface.h
@@ -5,11 +5,6 @@
 #ifndef TESTS_NACL_IO_TEST_FAKE_VAR_ARRAY_BUFFER_INTERFACE_H_
 #define TESTS_NACL_IO_TEST_FAKE_VAR_ARRAY_BUFFER_INTERFACE_H_
 
-#include <map>
-#include <string>
-
-#include <ppapi/c/pp_var.h>
-
 #include "nacl_io/pepper_interface.h"
 #include "sdk_util/macros.h"
 
diff --git a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_var_array_interface.h b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_var_array_interface.h
index 8b70174..1c81583 100644
--- a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_var_array_interface.h
+++ b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_var_array_interface.h
@@ -5,11 +5,6 @@
 #ifndef TESTS_NACL_IO_TEST_FAKE_VAR_ARRAY_INTERFACE_H_
 #define TESTS_NACL_IO_TEST_FAKE_VAR_ARRAY_INTERFACE_H_
 
-#include <map>
-#include <string>
-
-#include <ppapi/c/pp_var.h>
-
 #include "nacl_io/pepper_interface.h"
 #include "sdk_util/macros.h"
 
diff --git a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_var_dictionary_interface.cc b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_var_dictionary_interface.cc
new file mode 100644
index 0000000..8ae97e8
--- /dev/null
+++ b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_var_dictionary_interface.cc
@@ -0,0 +1,104 @@
+// 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.
+
+#include "fake_ppapi/fake_var_dictionary_interface.h"
+
+#include "fake_ppapi/fake_var_manager.h"
+#include "gtest/gtest.h"
+
+FakeVarDictionaryInterface::FakeVarDictionaryInterface(FakeVarManager* manager,
+    nacl_io::VarInterface* var_interface,
+    nacl_io::VarArrayInterface* array_interface) :
+  manager_(manager),
+  var_interface_(var_interface),
+  array_interface_(array_interface) {}
+
+
+PP_Var FakeVarDictionaryInterface::Create() {
+  FakeVarData* var_data = manager_->CreateVarData();
+  var_data->type = PP_VARTYPE_DICTIONARY;
+
+  struct PP_Var result = {PP_VARTYPE_DICTIONARY, 0, {PP_FALSE}};
+  result.value.as_id = var_data->id;
+  return result;
+}
+
+PP_Bool FakeVarDictionaryInterface::Set(PP_Var var, PP_Var key, PP_Var value) {
+  EXPECT_EQ(PP_VARTYPE_DICTIONARY, var.type);
+  EXPECT_EQ(PP_VARTYPE_STRING, key.type);
+  FakeVarData* data = manager_->GetVarData(var);
+  FakeVarData* key_data = manager_->GetVarData(key);
+  EXPECT_NE(static_cast<FakeVarData*>(NULL), data);
+  EXPECT_NE(static_cast<FakeVarData*>(NULL), key_data);
+  const std::string& key_string = key_data->string_value;
+  FakeDictType& dict = data->dict_value;
+  manager_->AddRef(value);
+  // Release any existing value
+  if (dict.count(key_string) > 0) {
+    manager_->Release(dict[key_string]);
+  }
+  dict[key_string] = value;
+  return PP_TRUE;
+}
+
+PP_Var FakeVarDictionaryInterface::Get(PP_Var var, PP_Var key) {
+  EXPECT_EQ(PP_VARTYPE_DICTIONARY, var.type);
+  EXPECT_EQ(PP_VARTYPE_STRING, key.type);
+  FakeVarData* data = manager_->GetVarData(var);
+  FakeVarData* key_data = manager_->GetVarData(key);
+  EXPECT_NE(static_cast<FakeVarData*>(NULL), data);
+  EXPECT_NE(static_cast<FakeVarData*>(NULL), key_data);
+  FakeDictType& dict = data->dict_value;
+  const std::string& key_string = key_data->string_value;
+  PP_Var rtn = dict[key_string];
+  manager_->AddRef(rtn);
+  return rtn;
+}
+
+void FakeVarDictionaryInterface::Delete(PP_Var var, PP_Var key) {
+  EXPECT_EQ(PP_VARTYPE_DICTIONARY, var.type);
+  EXPECT_EQ(PP_VARTYPE_STRING, key.type);
+  FakeVarData* data = manager_->GetVarData(var);
+  FakeVarData* key_data = manager_->GetVarData(key);
+  EXPECT_NE(static_cast<FakeVarData*>(NULL), data);
+  EXPECT_NE(static_cast<FakeVarData*>(NULL), key_data);
+  FakeDictType& dict = data->dict_value;
+  const std::string& key_string = key_data->string_value;
+  if (dict.count(key_string) > 0) {
+    manager_->Release(dict[key_string]);
+  }
+  dict.erase(key_string);
+}
+
+PP_Bool FakeVarDictionaryInterface::HasKey(PP_Var var, PP_Var key) {
+  EXPECT_EQ(PP_VARTYPE_DICTIONARY, var.type);
+  EXPECT_EQ(PP_VARTYPE_STRING, key.type);
+  FakeVarData* data = manager_->GetVarData(var);
+  FakeVarData* key_data = manager_->GetVarData(key);
+  EXPECT_NE(static_cast<FakeVarData*>(NULL), data);
+  EXPECT_NE(static_cast<FakeVarData*>(NULL), key_data);
+  FakeDictType& dict = data->dict_value;
+  const std::string& key_string = key_data->string_value;
+  if (dict.count(key_string) > 0)
+    return PP_FALSE;
+  return PP_TRUE;
+}
+
+PP_Var FakeVarDictionaryInterface::GetKeys(PP_Var var) {
+  EXPECT_EQ(PP_VARTYPE_DICTIONARY, var.type);
+  FakeVarData* data = manager_->GetVarData(var);
+  EXPECT_NE(static_cast<FakeVarData*>(NULL), data);
+  FakeDictType& dict = data->dict_value;
+  PP_Var rtn = array_interface_->Create();
+  array_interface_->SetLength(rtn, dict.size());
+  int index = 0;
+  for (FakeDictType::iterator it = dict.begin(); it != dict.end(); it++) {
+    PP_Var key = var_interface_->VarFromUtf8(it->first.c_str(),
+                                             it->first.size());
+    array_interface_->Set(rtn, index, key);
+    manager_->Release(key);
+    index++;
+  }
+  return rtn;
+}
diff --git a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_var_dictionary_interface.h b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_var_dictionary_interface.h
new file mode 100644
index 0000000..5199863
--- /dev/null
+++ b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_var_dictionary_interface.h
@@ -0,0 +1,34 @@
+// 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.
+
+#ifndef TESTS_NACL_IO_TEST_FAKE_VAR_DICTIONARY_INTERFACE_H_
+#define TESTS_NACL_IO_TEST_FAKE_VAR_DICTIONARY_INTERFACE_H_
+
+#include "nacl_io/pepper_interface.h"
+#include "sdk_util/macros.h"
+
+class FakeVarManager;
+
+class FakeVarDictionaryInterface : public nacl_io::VarDictionaryInterface {
+ public:
+  explicit FakeVarDictionaryInterface(FakeVarManager* manager,
+      nacl_io::VarInterface* var_interface,
+      nacl_io::VarArrayInterface* array_interface);
+
+  virtual PP_Var Create();
+  virtual PP_Var Get(PP_Var dict, PP_Var key);
+  virtual PP_Bool Set(PP_Var dict, PP_Var key, PP_Var value);
+  virtual void  Delete(PP_Var dict, PP_Var key);
+  virtual PP_Bool HasKey(PP_Var dict, PP_Var key);
+  virtual PP_Var GetKeys(PP_Var dict);
+
+ private:
+  FakeVarManager* manager_;
+  nacl_io::VarInterface* var_interface_;
+  nacl_io::VarArrayInterface* array_interface_;
+
+  DISALLOW_COPY_AND_ASSIGN(FakeVarDictionaryInterface);
+};
+
+#endif  // TESTS_NACL_IO_TEST_FAKE_VAR_DICTIONARY_INTERFACE_H_
diff --git a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_var_interface.h b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_var_interface.h
index 451553b..c6dd4ea 100644
--- a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_var_interface.h
+++ b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_var_interface.h
@@ -5,8 +5,6 @@
 #ifndef TESTS_NACL_IO_TEST_FAKE_VAR_INTERFACE_H_
 #define TESTS_NACL_IO_TEST_FAKE_VAR_INTERFACE_H_
 
-#include <ppapi/c/pp_var.h>
-
 #include "nacl_io/pepper_interface.h"
 #include "sdk_util/macros.h"
 
diff --git a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_var_manager.cc b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_var_manager.cc
index eb1809e..e6c16bc 100644
--- a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_var_manager.cc
+++ b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_var_manager.cc
@@ -74,18 +74,29 @@
 
   switch (var_data->type) {
     case PP_VARTYPE_ARRAY: {
-      std::vector<PP_Var>& vector = var_data->array_value;
-      for (std::vector<PP_Var>::iterator it = vector.begin();
-          it != vector.end(); ++it) {
+      FakeArrayType& vector = var_data->array_value;
+      for (FakeArrayType::iterator it = vector.begin();
+           it != vector.end(); ++it) {
         Release(*it);
       }
       vector.clear();
       break;
     }
-    case PP_VARTYPE_ARRAY_BUFFER:
+    case PP_VARTYPE_ARRAY_BUFFER: {
       free(var_data->buffer_value.ptr);
       var_data->buffer_value.ptr = NULL;
       var_data->buffer_value.length = 0;
+      break;
+    }
+    case PP_VARTYPE_DICTIONARY: {
+      FakeDictType& dict = var_data->dict_value;
+      for (FakeDictType::iterator it = dict.begin();
+           it != dict.end(); it++) {
+        Release(it->second);
+      }
+      dict.clear();
+      break;
+    }
     default:
       break;
   }
@@ -95,7 +106,10 @@
   VarMap::iterator iter = var_map_.find(var.value.as_id);
   if (iter == var_map_.end())
     return NULL;
-  return &iter->second;
+  FakeVarData* var_data = &iter->second;
+  EXPECT_GT(var_data->ref_count, 0)
+      << "Accessing freed " << Describe(*var_data);
+  return var_data;
 }
 
 void FakeVarManager::Release(PP_Var var) {
diff --git a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_var_manager.h b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_var_manager.h
index c8d1309..8f02bb5 100644
--- a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_var_manager.h
+++ b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_var_manager.h
@@ -12,12 +12,16 @@
 
 #include "sdk_util/macros.h"
 
+typedef std::vector<PP_Var> FakeArrayType;
+typedef std::map<std::string, PP_Var> FakeDictType;
+
 struct FakeVarData {
   uint64_t id;
   uint64_t type;
   int32_t ref_count;
   std::string string_value;
-  std::vector<PP_Var> array_value;
+  FakeArrayType array_value;
+  FakeDictType dict_value;
   struct {
     void* ptr;
     uint32_t length;
diff --git a/native_client_sdk/src/tools/fix_manifest.py b/native_client_sdk/src/tools/fix_manifest.py
new file mode 100755
index 0000000..c9b892f
--- /dev/null
+++ b/native_client_sdk/src/tools/fix_manifest.py
@@ -0,0 +1,132 @@
+#!/usr/bin/env python
+# Copyright (c) 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.
+
+# Disable the lint error for too-long lines for the URL below.
+# pylint: disable=C0301
+
+"""Fix Chrome App manifest.json files for use with multi-platform zip files.
+
+See info about multi-platform zip files here:
+https://developer.chrome.com/native-client/devguide/distributing#packaged-application
+
+The manifest.json file needs to point to the correct platform-specific paths,
+but we build all toolchains and configurations in the same tree. As a result,
+we can't have one manifest.json for all combinations.
+
+Instead, we update the top-level manifest.json file during the build:
+
+  "platforms": [
+    {
+      "nacl_arch": "x86-64",
+      "sub_package_path": "_platform_specific/x86-64/"
+    },
+    ...
+
+Becomes
+
+  "platforms": [
+    {
+      "nacl_arch": "x86-64",
+      "sub_package_path": "<toolchain>/<config>/_platform_specific/x86-64/"
+    },
+    ...
+"""
+
+import collections
+import json
+import optparse
+import os
+import sys
+
+if sys.version_info < (2, 6, 0):
+  sys.stderr.write("python 2.6 or later is required run this script\n")
+  sys.exit(1)
+
+
+class Error(Exception):
+  """Local Error class for this file."""
+  pass
+
+
+def Trace(msg):
+  if Trace.verbose:
+    sys.stderr.write(str(msg) + '\n')
+
+Trace.verbose = False
+
+
+def main(argv):
+  parser = optparse.OptionParser(
+      usage='Usage: %prog [options] manifest.json', description=__doc__)
+  parser.add_option('-p', '--prefix',
+                    help='Prefix to set for all sub_package_paths in the '
+                    'manifest. If none is specified, the prefix will be '
+                    'removed; i.e. the start of the path will be '
+                    '"_platform_specific/..."')
+  parser.add_option('-v', '--verbose',
+                    help='Verbose output', action='store_true')
+
+  options, args = parser.parse_args(argv)
+  if options.verbose:
+    Trace.verbose = True
+
+  if not args:
+    parser.error('Expected manifest file.')
+
+  manifest = args[0]
+
+  Trace('Reading %s' % manifest)
+  with open(manifest) as f:
+    # Keep the dictionary order. This is only supported on Python 2.7+
+    if sys.version_info >= (2, 7, 0):
+      data = json.load(f, object_pairs_hook=collections.OrderedDict)
+    else:
+      data = json.load(f)
+
+  if 'platforms' not in data:
+    raise Error('%s does not have "platforms" key.' % manifest)
+
+  platforms = data['platforms']
+  if type(platforms) is not list:
+    raise Error('Expected "platforms" key to be array.')
+
+  if options.prefix:
+    prefix = options.prefix + '/'
+  else:
+    prefix = ''
+
+  for platform in platforms:
+    nacl_arch = platform.get('nacl_arch')
+
+    if 'sub_package_path' not in platform:
+      raise Error('Expected each platform to have "sub_package_path" key.')
+
+    sub_package_path = platform['sub_package_path']
+    index = sub_package_path.find('_platform_specific')
+    if index == -1:
+      raise Error('Could not find "_platform_specific" in the '
+                  '"sub_package_path" key.')
+
+    new_path = prefix + sub_package_path[index:]
+    platform['sub_package_path'] = new_path
+
+    Trace('  %s: "%s" -> "%s"' % (nacl_arch, sub_package_path, new_path))
+
+  with open(manifest, 'w') as f:
+    json.dump(data, f, indent=2)
+
+  return 0
+
+
+if __name__ == '__main__':
+  try:
+    rtn = main(sys.argv[1:])
+  except Error, e:
+    sys.stderr.write('%s: %s\n' % (os.path.basename(__file__), e))
+    rtn = 1
+  except KeyboardInterrupt:
+    sys.stderr.write('%s: interrupted\n' % os.path.basename(__file__))
+    rtn = 1
+  sys.exit(rtn)
diff --git a/native_client_sdk/src/tools/nacl_gcc.mk b/native_client_sdk/src/tools/nacl_gcc.mk
index ddd20d5..832efeb 100644
--- a/native_client_sdk/src/tools/nacl_gcc.mk
+++ b/native_client_sdk/src/tools/nacl_gcc.mk
@@ -10,9 +10,6 @@
 #
 # Macros for TOOLS
 #
-# We always link with the C++ compiler but include -Wl,-as-needed flag
-# in LDFLAGS so the linker should drop libc++ unless it's actually needed.
-#
 ifneq ($(TOOLCHAIN),bionic)
 X86_32_CC := $(NACL_COMPILER_PREFIX) $(shell $(NACL_CONFIG) -t $(TOOLCHAIN) -a x86_32 --tool=cc)
 X86_32_CXX := $(NACL_COMPILER_PREFIX) $(shell $(NACL_CONFIG) -t $(TOOLCHAIN) -a x86_32 --tool=c++)
@@ -40,6 +37,17 @@
 
 NCVAL ?= python $(NACL_SDK_ROOT)/tools/ncval.py
 
+# Architecture-specific variables
+ifeq (,$(MULTI_PLATFORM))
+X86_32_OUTDIR ?= $(OUTDIR)
+X86_64_OUTDIR ?= $(OUTDIR)
+ARM_OUTDIR ?= $(OUTDIR)
+else
+X86_32_OUTDIR ?= $(OUTDIR)/_platform_specific/x86-32
+X86_64_OUTDIR ?= $(OUTDIR)/_platform_specific/x86-64
+ARM_OUTDIR ?= $(OUTDIR)/_platform_specific/arm
+endif
+
 # Architecture-specific flags
 X86_32_CFLAGS ?=
 X86_64_CFLAGS ?=
@@ -55,9 +63,15 @@
 ARM_CXXFLAGS ?=
 endif
 
+ifeq (,$(MULTI_PLATFORM))
 X86_32_LDFLAGS ?= -Wl,-Map,$(OUTDIR)/$(TARGET)_x86_32.map
 X86_64_LDFLAGS ?= -Wl,-Map,$(OUTDIR)/$(TARGET)_x86_64.map
 ARM_LDFLAGS ?= -Wl,-Map,$(OUTDIR)/$(TARGET)_arm.map
+else
+X86_32_LDFLAGS ?= -Wl,-Map,$(X86_32_OUTDIR)/$(TARGET)_x86_32.map
+X86_64_LDFLAGS ?= -Wl,-Map,$(X86_64_OUTDIR)/$(TARGET)_x86_64.map
+ARM_LDFLAGS ?= -Wl,-Map,$(ARM_OUTDIR)/$(TARGET)_arm.map
+endif
 
 LDFLAGS_SHARED = -shared
 
@@ -185,52 +199,55 @@
 #
 define SO_LINKER_RULE
 ifneq (,$(findstring x86_32,$(ARCHES)))
-all: $(OUTDIR)/lib$(1)_x86_32.so
-$(OUTDIR)/lib$(1)_x86_32.so: $(foreach src,$(2),$(call SRC_TO_OBJ,$(src),_x86_32_pic)) $(foreach dep,$(4),$(STAMPDIR)/$(dep).stamp)
+all: $(X86_32_OUTDIR)/lib$(1)_x86_32.so
+$(X86_32_OUTDIR)/lib$(1)_x86_32.so: $(foreach src,$(2),$(call SRC_TO_OBJ,$(src),_x86_32_pic)) $(foreach dep,$(4),$(STAMPDIR)/$(dep).stamp)
+	$(MKDIR) -p $$(dir $$@)
 	$(call LOG,LINK,$$@,$(X86_32_LINK) -o $$@ $$(filter %.o,$$^) $(LDFLAGS_SHARED) -m32 $(NACL_LDFLAGS) $(X86_32_LDFLAGS) $(LDFLAGS) $(foreach path,$(5),-L$(path)/$(TOOLCHAIN)_x86_32/$(CONFIG)) $(foreach lib,$(3),-l$(lib)))
 	$(call LOG,VALIDATE,$$@,$(NCVAL) $$@)
 
 $(STAMPDIR)/$(1).stamp: $(LIBDIR)/$(TOOLCHAIN)_x86_32/$(CONFIG)/lib$(1).so
 install: $(LIBDIR)/$(TOOLCHAIN)_x86_32/$(CONFIG)/lib$(1).so
-$(LIBDIR)/$(TOOLCHAIN)_x86_32/$(CONFIG)/lib$(1).so: $(OUTDIR)/lib$(1)_x86_32.so
+$(LIBDIR)/$(TOOLCHAIN)_x86_32/$(CONFIG)/lib$(1).so: $(X86_32_OUTDIR)/lib$(1)_x86_32.so
 	$(MKDIR) -p $$(dir $$@)
 	$(call LOG,CP  ,$$@,$(OSHELPERS) cp $$^ $$@)
 ifneq ($(6),1)
-GLIBC_SO_LIST += $(OUTDIR)/lib$(1)_x86_32.so
+GLIBC_SO_LIST += $(X86_32_OUTDIR)/lib$(1)_x86_32.so
 GLIBC_REMAP += -n lib$(1)_x86_32.so,lib$(1).so
 endif
 endif
 
 ifneq (,$(findstring x86_64,$(ARCHES)))
-all: $(OUTDIR)/lib$(1)_x86_64.so
-$(OUTDIR)/lib$(1)_x86_64.so: $(foreach src,$(2),$(call SRC_TO_OBJ,$(src),_x86_64_pic)) $(foreach dep,$(4),$(STAMPDIR)/$(dep).stamp)
+all: $(X86_64_OUTDIR)/lib$(1)_x86_64.so
+$(X86_64_OUTDIR)/lib$(1)_x86_64.so: $(foreach src,$(2),$(call SRC_TO_OBJ,$(src),_x86_64_pic)) $(foreach dep,$(4),$(STAMPDIR)/$(dep).stamp)
+	$(MKDIR) -p $$(dir $$@)
 	$(call LOG,LINK,$$@,$(X86_32_LINK) -o $$@ $$(filter %.o,$$^) $(LDFLAGS_SHARED) -m64 $(NACL_LDFLAGS) $(X86_64_LDFLAGS) $(LDFLAGS) $(foreach path,$(5),-L$(path)/$(TOOLCHAIN)_x86_64/$(CONFIG)) $(foreach lib,$(3),-l$(lib)))
 	$(call LOG,VALIDATE,$$@,$(NCVAL) $$@)
 
 $(STAMPDIR)/$(1).stamp: $(LIBDIR)/$(TOOLCHAIN)_x86_64/$(CONFIG)/lib$(1).so
 install: $(LIBDIR)/$(TOOLCHAIN)_x86_64/$(CONFIG)/lib$(1).so
-$(LIBDIR)/$(TOOLCHAIN)_x86_64/$(CONFIG)/lib$(1).so: $(OUTDIR)/lib$(1)_x86_64.so
+$(LIBDIR)/$(TOOLCHAIN)_x86_64/$(CONFIG)/lib$(1).so: $(X86_64_OUTDIR)/lib$(1)_x86_64.so
 	$(MKDIR) -p $$(dir $$@)
 	$(call LOG,CP  ,$$@,$(OSHELPERS) cp $$^ $$@)
 ifneq ($(6),1)
-GLIBC_SO_LIST += $(OUTDIR)/lib$(1)_x86_64.so
+GLIBC_SO_LIST += $(X86_64_OUTDIR)/lib$(1)_x86_64.so
 GLIBC_REMAP += -n lib$(1)_x86_64.so,lib$(1).so
 endif
 endif
 
 ifneq (,$(findstring arm,$(ARCHES)))
-all: $(OUTDIR)/lib$(1)_arm.so
-$(OUTDIR)/lib$(1)_arm.so: $(foreach src,$(2),$(call SRC_TO_OBJ,$(src),_arm_pic)) $(foreach dep,$(4),$(STAMPDIR)/$(dep).stamp)
+all: $(ARM_OUTDIR)/lib$(1)_arm.so
+$(ARM_OUTDIR)/lib$(1)_arm.so: $(foreach src,$(2),$(call SRC_TO_OBJ,$(src),_arm_pic)) $(foreach dep,$(4),$(STAMPDIR)/$(dep).stamp)
+	$(MKDIR) -p $$(dir $$@)
 	$(call LOG,LINK,$$@,$(ARM_LINK) -o $$@ $$(filter %.o,$$^) $(LDFLAGS_SHARED) -marm $(NACL_LDFLAGS) $(ARM_LDFLAGS) $(LDFLAGS) $(foreach path,$(5),-L$(path)/$(TOOLCHAIN)_arm/$(CONFIG)) $(foreach lib,$(3),-l$(lib)))
 	$(call LOG,VALIDATE,$$@,$(NCVAL) $$@)
 
 $(STAMPDIR)/$(1).stamp: $(LIBDIR)/$(TOOLCHAIN)_arm/$(CONFIG)/lib$(1).so
 install: $(LIBDIR)/$(TOOLCHAIN)_arm/$(CONFIG)/lib$(1).so
-$(LIBDIR)/$(TOOLCHAIN)_arm/$(CONFIG)/lib$(1).so: $(OUTDIR)/lib$(1)_arm.so
+$(LIBDIR)/$(TOOLCHAIN)_arm/$(CONFIG)/lib$(1).so: $(ARM_OUTDIR)/lib$(1)_arm.so
 	$(MKDIR) -p $$(dir $$@)
 	$(call LOG,CP  ,$$@,$(OSHELPERS) cp $$^ $$@)
 ifneq ($(6),1)
-GLIBC_SO_LIST += $(OUTDIR)/lib$(1)_arm.so
+GLIBC_SO_LIST += $(ARM_OUTDIR)/lib$(1)_arm.so
 GLIBC_REMAP += -n lib$(1)_arm.so,lib$(1).so
 endif
 endif
@@ -261,45 +278,45 @@
 	@echo "TOUCHED $$@" > $(STAMPDIR)/$(1).stamp
 
 ifneq (,$(findstring x86_32,$(ARCHES)))
-all: $(OUTDIR)/lib$(1)_x86_32.a
-$(OUTDIR)/lib$(1)_x86_32.a: $(foreach src,$(2),$(call SRC_TO_OBJ,$(src),_x86_32))
+all: $(X86_32_OUTDIR)/lib$(1)_x86_32.a
+$(X86_32_OUTDIR)/lib$(1)_x86_32.a: $(foreach src,$(2),$(call SRC_TO_OBJ,$(src),_x86_32))
 	$(MKDIR) -p $$(dir $$@)
 	$(RM) -f $$@
 	$(call LOG,LIB ,$$@,$(X86_32_LIB) -cr $$@ $$^)
 
 $(STAMPDIR)/$(1).stamp: $(LIBDIR)/$(TOOLCHAIN)_x86_32/$(CONFIG)/lib$(1).a
 install: $(LIBDIR)/$(TOOLCHAIN)_x86_32/$(CONFIG)/lib$(1).a
-$(LIBDIR)/$(TOOLCHAIN)_x86_32/$(CONFIG)/lib$(1).a: $(OUTDIR)/lib$(1)_x86_32.a
+$(LIBDIR)/$(TOOLCHAIN)_x86_32/$(CONFIG)/lib$(1).a: $(X86_32_OUTDIR)/lib$(1)_x86_32.a
 	$(MKDIR) -p $$(dir $$@)
 	$(RM) -f $$@
 	$(call LOG,CP  ,$$@,$(OSHELPERS) cp $$^ $$@)
 endif
 
 ifneq (,$(findstring x86_64,$(ARCHES)))
-all: $(OUTDIR)/lib$(1)_x86_64.a
-$(OUTDIR)/lib$(1)_x86_64.a: $(foreach src,$(2),$(call SRC_TO_OBJ,$(src),_x86_64))
+all: $(X86_64_OUTDIR)/lib$(1)_x86_64.a
+$(X86_64_OUTDIR)/lib$(1)_x86_64.a: $(foreach src,$(2),$(call SRC_TO_OBJ,$(src),_x86_64))
 	$(MKDIR) -p $$(dir $$@)
 	$(RM) -f $$@
 	$(call LOG,LIB ,$$@,$(X86_64_LIB) -cr $$@ $$^)
 
 $(STAMPDIR)/$(1).stamp: $(LIBDIR)/$(TOOLCHAIN)_x86_64/$(CONFIG)/lib$(1).a
 install: $(LIBDIR)/$(TOOLCHAIN)_x86_64/$(CONFIG)/lib$(1).a
-$(LIBDIR)/$(TOOLCHAIN)_x86_64/$(CONFIG)/lib$(1).a: $(OUTDIR)/lib$(1)_x86_64.a
+$(LIBDIR)/$(TOOLCHAIN)_x86_64/$(CONFIG)/lib$(1).a: $(X86_64_OUTDIR)/lib$(1)_x86_64.a
 	$(MKDIR) -p $$(dir $$@)
 	$(call LOG,CP  ,$$@,$(OSHELPERS) cp $$^ $$@)
 endif
 
 ifneq (,$(findstring arm,$(ARCHES)))
 ifneq ($(TOOLCHAIN),glibc)
-all: $(OUTDIR)/lib$(1)_arm.a
-$(OUTDIR)/lib$(1)_arm.a: $(foreach src,$(2),$(call SRC_TO_OBJ,$(src),_arm))
+all: $(ARM_OUTDIR)/lib$(1)_arm.a
+$(ARM_OUTDIR)/lib$(1)_arm.a: $(foreach src,$(2),$(call SRC_TO_OBJ,$(src),_arm))
 	$(MKDIR) -p $$(dir $$@)
 	$(RM) -f $$@
 	$(call LOG,LIB ,$$@,$(ARM_LIB) -cr $$@ $$^)
 
 $(STAMPDIR)/$(1).stamp: $(LIBDIR)/$(TOOLCHAIN)_arm/$(CONFIG)/lib$(1).a
 install: $(LIBDIR)/$(TOOLCHAIN)_arm/$(CONFIG)/lib$(1).a
-$(LIBDIR)/$(TOOLCHAIN)_arm/$(CONFIG)/lib$(1).a: $(OUTDIR)/lib$(1)_arm.a
+$(LIBDIR)/$(TOOLCHAIN)_arm/$(CONFIG)/lib$(1).a: $(ARM_OUTDIR)/lib$(1)_arm.a
 	$(MKDIR) -p $$(dir $$@)
 	$(call LOG,CP  ,$$@,$(OSHELPERS) cp $$^ $$@)
 endif
@@ -319,22 +336,25 @@
 #
 define LINKER_RULE
 ifneq (,$(findstring x86_32,$(ARCHES)))
-all: $(OUTDIR)/$(1)_x86_32.nexe
-$(OUTDIR)/$(1)_x86_32.nexe: $(foreach src,$(2),$(call SRC_TO_OBJ,$(src),_x86_32)) $(foreach dep,$(4),$(STAMPDIR)/$(dep).stamp)
+all: $(X86_32_OUTDIR)/$(1)_x86_32.nexe
+$(X86_32_OUTDIR)/$(1)_x86_32.nexe: $(foreach src,$(2),$(call SRC_TO_OBJ,$(src),_x86_32)) $(foreach dep,$(4),$(STAMPDIR)/$(dep).stamp)
+	$(MKDIR) -p $$(dir $$@)
 	$(call LOG,LINK,$$@,$(X86_32_LINK) -o $$@ $$(filter %.o,$$^) $(NACL_LDFLAGS) $(X86_32_LDFLAGS) $(foreach path,$(6),-L$(path)/$(TOOLCHAIN)_x86_32/$(CONFIG)) $(foreach lib,$(3),-l$(lib)) $(5))
 	$(call LOG,VALIDATE,$$@,$(NCVAL) $$@)
 endif
 
 ifneq (,$(findstring x86_64,$(ARCHES)))
-all: $(OUTDIR)/$(1)_x86_64.nexe
-$(OUTDIR)/$(1)_x86_64.nexe: $(foreach src,$(2),$(call SRC_TO_OBJ,$(src),_x86_64)) $(foreach dep,$(4),$(STAMPDIR)/$(dep).stamp)
+all: $(X86_64_OUTDIR)/$(1)_x86_64.nexe
+$(X86_64_OUTDIR)/$(1)_x86_64.nexe: $(foreach src,$(2),$(call SRC_TO_OBJ,$(src),_x86_64)) $(foreach dep,$(4),$(STAMPDIR)/$(dep).stamp)
+	$(MKDIR) -p $$(dir $$@)
 	$(call LOG,LINK,$$@,$(X86_64_LINK) -o $$@ $$(filter %.o,$$^) $(NACL_LDFLAGS) $(X86_64_LDFLAGS) $(foreach path,$(6),-L$(path)/$(TOOLCHAIN)_x86_64/$(CONFIG)) $(foreach lib,$(3),-l$(lib)) $(5))
 	$(call LOG,VALIDATE,$$@,$(NCVAL) $$@)
 endif
 
 ifneq (,$(findstring arm,$(ARCHES)))
-all: $(OUTDIR)/$(1)_arm.nexe
-$(OUTDIR)/$(1)_arm.nexe: $(foreach src,$(2),$(call SRC_TO_OBJ,$(src),_arm)) $(foreach dep,$(4),$(STAMPDIR)/$(dep).stamp)
+all: $(ARM_OUTDIR)/$(1)_arm.nexe
+$(ARM_OUTDIR)/$(1)_arm.nexe: $(foreach src,$(2),$(call SRC_TO_OBJ,$(src),_arm)) $(foreach dep,$(4),$(STAMPDIR)/$(dep).stamp)
+	$(MKDIR) -p $$(dir $$@)
 	$(call LOG,LINK,$$@,$(ARM_LINK) -static -o $$@ $$(filter %.o,$$^) $(NACL_LDFLAGS) $(ARM_LDFLAGS) $(foreach path,$(6),-L$(path)/$(TOOLCHAIN)_arm/$(CONFIG)) $(foreach lib,$(3),-l$(lib)) $(5))
 	$(call LOG,VALIDATE,$$@,$(NCVAL) $$@)
 endif
@@ -364,17 +384,17 @@
 #
 define STRIP_ALL_RULE
 ifneq (,$(findstring x86_32,$(ARCHES)))
-$(OUTDIR)/$(1)_x86_32.nexe: $(OUTDIR)/$(2)_x86_32.nexe
+$(X86_32_OUTDIR)/$(1)_x86_32.nexe: $(X86_32_OUTDIR)/$(2)_x86_32.nexe
 	$(call LOG,STRIP,$$@,$(X86_32_STRIP) -o $$@ $$^)
 endif
 
 ifneq (,$(findstring x86_64,$(ARCHES)))
-$(OUTDIR)/$(1)_x86_64.nexe: $(OUTDIR)/$(2)_x86_64.nexe
+$(X86_64_OUTDIR)/$(1)_x86_64.nexe: $(X86_64_OUTDIR)/$(2)_x86_64.nexe
 	$(call LOG,STRIP,$$@,$(X86_64_STRIP) -o $$@ $$^)
 endif
 
 ifneq (,$(findstring arm,$(ARCHES)))
-$(OUTDIR)/$(1)_arm.nexe: $(OUTDIR)/$(2)_arm.nexe
+$(ARM_OUTDIR)/$(1)_arm.nexe: $(ARM_OUTDIR)/$(2)_arm.nexe
 	$(call LOG,STRIP,$$@,$(ARM_STRIP) -o $$@ $$^)
 endif
 endef
@@ -399,20 +419,20 @@
 #
 define MAP_ALL_RULE
 ifneq (,$(findstring x86_32,$(ARCHES)))
-all: $(OUTDIR)/$(1)_x86_32.map
-$(OUTDIR)/$(1)_x86_32.map: $(OUTDIR)/$(2)_x86_32.nexe
+all: $(X86_32_OUTDIR)/$(1)_x86_32.map
+$(X86_32_OUTDIR)/$(1)_x86_32.map: $(X86_32_OUTDIR)/$(2)_x86_32.nexe
 	$(call LOG,MAP,$$@,$(X86_32_NM) -l $$^ > $$@)
 endif
 
 ifneq (,$(findstring x86_64,$(ARCHES)))
-all: $(OUTDIR)/$(1)_x86_64.map
-$(OUTDIR)/$(1)_x86_64.map: $(OUTDIR)/$(2)_x86_64.nexe
+all: $(X86_64_OUTDIR)/$(1)_x86_64.map
+$(X86_64_OUTDIR)/$(1)_x86_64.map: $(X86_64_OUTDIR)/$(2)_x86_64.nexe
 	$(call LOG,MAP,$$@,$(X86_64_NM) -l $$^ > $$@)
 endif
 
 ifneq (,$(findstring arm,$(ARCHES)))
-all: $(OUTDIR)/$(1)_arm.map
-$(OUTDIR)/$(1)_arm.map: $(OUTDIR)/$(2)_arm.nexe
+all: $(ARM_OUTDIR)/$(1)_arm.map
+$(ARM_OUTDIR)/$(1)_arm.map: $(ARM_OUTDIR)/$(2)_arm.nexe
 	$(call LOG,MAP,$$@,$(ARM_NM) -l $$^ > $$@ )
 endif
 endef
@@ -430,13 +450,6 @@
 
 
 #
-# Generate ARCH_SUFFIXES, a list of suffixes for executables corresponding to all
-# the architectures in the current build.
-#
-ARCH_SUFFIXES := $(foreach arch,$(ARCHES),_$(arch).nexe)
-
-
-#
 # NMF Manifiest generation
 #
 # Use the python script create_nmf to scan the binaries for dependencies using
@@ -453,12 +466,47 @@
 HTML_FLAGS += --debug-libs
 endif
 
-EXECUTABLES=$(foreach arch,$(ARCH_SUFFIXES),$(OUTDIR)/$(1)$(arch)) $(GLIBC_SO_LIST)
+EXECUTABLES = $(GLIBC_SO_LIST)
+ifneq (,$(findstring x86_32,$(ARCHES)))
+EXECUTABLES += $(X86_32_OUTDIR)/$(1)_x86_32.nexe
+endif
+ifneq (,$(findstring x86_64,$(ARCHES)))
+EXECUTABLES += $(X86_64_OUTDIR)/$(1)_x86_64.nexe
+endif
+ifneq (,$(findstring arm,$(ARCHES)))
+EXECUTABLES += $(ARM_OUTDIR)/$(1)_arm.nexe
+endif
+
+ifneq (,$(MULTI_PLATFORM))
+# When building a multi-platform package, stage all dependent shared libraries
+# in the same directory as the .nexe (which will be an architecture-specific
+# directory under _platform_specific).
+NMF_FLAGS += -s $(OUTDIR) --no-arch-prefix
+else
+# Otherwise stage dependent libraries the normal way, under lib32 for x86_32
+# libraries, and lib64 for x86_64 libraries.
+NMF_FLAGS += -s $(OUTDIR)
+endif
+
+ifneq (,$(MULTI_PLATFORM))
+# This script fixes the manifest.json file for this App to point to:
+#
+#   <toolchain>/<config>/_platform_specific/<arch>/
+#
+# instead of
+#
+#   _platform_specific/<arch>
+FIX_MANIFEST := python $(NACL_SDK_ROOT)/tools/fix_manifest.py
+MANIFEST_JSON ?= manifest.json
+endif
 
 define NMF_RULE
 all: $(OUTDIR)/$(1).nmf
-$(OUTDIR)/$(1).nmf: $(EXECUTABLES)
-	$(call LOG,CREATE_NMF,$$@,$(NMF) $(NMF_FLAGS) -o $$@ $$^ $(GLIBC_PATHS) -s $(OUTDIR) $(2) $(GLIBC_REMAP))
+$(OUTDIR)/$(1).nmf $(MANIFEST_JSON): $(EXECUTABLES)
+	$(call LOG,CREATE_NMF,$$@,$(NMF) $(NMF_FLAGS) -o $$@ $$^ $(GLIBC_PATHS) $(2) $(GLIBC_REMAP))
+ifneq (,$(MULTI_PLATFORM))
+	$(call LOG,FIX_MANIFEST,$(MANIFEST_JSON),$(FIX_MANIFEST) $(MANIFEST_JSON)) -p "$(TOOLCHAIN)/$(CONFIG)"
+endif
 endef
 
 #
diff --git a/native_client_sdk/src/tools/nacl_llvm.mk b/native_client_sdk/src/tools/nacl_llvm.mk
index 61e08f2..9615023 100644
--- a/native_client_sdk/src/tools/nacl_llvm.mk
+++ b/native_client_sdk/src/tools/nacl_llvm.mk
@@ -121,10 +121,8 @@
 #
 # Strip Macro
 #
-# NOTE: pnacl-strip does not currently support stripping finalized pexes (in a
-# sense, they are already stripped). So we just copy the file instead.
-#
-# See https://code.google.com/p/nativeclient/issues/detail?id=3534
+# NOTE: pnacl-strip does not really do much for finalized pexes (in a
+# sense, they are already stripped), but set this rule up for uniformity.
 #
 # $1 = Target Name
 # $2 = Input Name
@@ -132,19 +130,19 @@
 define STRIP_RULE
 all: $(OUTDIR)/$(1).pexe
 $(OUTDIR)/$(1).pexe: $(OUTDIR)/$(2).pexe
-	$(CP) $$^ $$@
+	$(call LOG,STRIP,$$@,$(PNACL_STRIP) $$^ -o $$@)
 endef
 
 
 #
-# NMF Manifiest generation
+# NMF Manifest generation
 #
 # Use the python script create_nmf to scan the binaries for dependencies using
 # objdump.  Pass in the (-L) paths to the default library toolchains so that we
 # can find those libraries and have it automatically copy the files (-s) to
 # the target directory for us.
 #
-# $1 = Target Name (the basename of the nmf
+# $1 = Target Name (the basename of the nmf)
 # $2 = Additional create_nmf.py arguments
 #
 NMF:=python $(NACL_SDK_ROOT)/tools/create_nmf.py
diff --git a/net/BUILD.gn b/net/BUILD.gn
new file mode 100644
index 0000000..c1077e3
--- /dev/null
+++ b/net/BUILD.gn
@@ -0,0 +1,923 @@
+# Copyright (c) 2013 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/crypto.gni")
+import("//build/config/features.gni")
+import("//build/config/ui.gni")
+import("//tools/grit/grit_rule.gni")
+
+if (is_android) {
+  import("//build/config/android/config.gni")
+} else if (is_mac) {
+  import("//build/config/mac/mac_sdk.gni")
+}
+
+# The list of net files is kept in net.gypi. Read it.
+gypi_values = exec_script(
+    "//build/gypi_to_gn.py",
+    [ rebase_path("net.gypi") ]
+    "scope",
+    [ "net.gypi" ])
+
+# Disable Kerberos on ChromeOS, Android and iOS, at least for now. It needs
+# configuration (krb5.conf and so on).
+use_kerberos = !is_chromeos && !is_android && !is_ios
+
+# The way the cache uses mmap() is inefficient on some Android devices. If
+# this flag is set, we hackily avoid using mmap() in the disk cache. We are
+# pretty confident that mmap-ing the index would not hurt any existing x86
+# android devices, but we cannot be so sure about the variety of ARM devices.
+# So enable it for x86 only for now.
+posix_avoid_mmap = is_android && cpu_arch != "x86"
+
+# WebSockets and socket stream code are used everywhere except iOS.
+enable_websockets = !is_ios
+# TODO(brettw) put back to "!is_ios" when v8 is supported in GN build.
+use_v8_in_net = false  # TODO(brettw)!is_ios
+enable_built_in_dns = !is_ios
+
+enable_ftp_support = !is_ios
+
+config("net_config") {
+  defines = []
+  if (posix_avoid_mmap) {
+    defines += [ "POSIX_AVOID_MMAP" ]
+  }
+}
+
+# Disables Windows warning about size to int truncations.
+# TODO(jschuh): crbug.com/167187 fix this and delete this config.
+config("net_win_size_truncation") {
+  if (is_win) {
+    cflags = [ "/wd4267" ]
+  }
+}
+
+component("net") {
+  sources =
+    gypi_values.net_nacl_common_sources +
+    gypi_values.net_non_nacl_sources
+
+  cflags = []
+  defines = [
+    # TODO(GYP) Note that he GYP file supports linux_link_kerberos (defaults to
+    # 0) which implies that we run pkg_config on kerberos and link to that
+    # rather than setting this define which will dynamically open it. That
+    # doesn't seem to be set in the regular builds, so we're skipping this
+    # capability here.
+    "DLOPEN_KERBEROS",
+    "NET_IMPLEMENTATION"
+  ]
+  configs += [ ":net_win_size_truncation" ]
+  direct_dependent_configs = [ ":net_config" ]
+  include_dirs = []
+
+  deps = [
+    ":net_resources",
+    "//base",
+    "//base:i18n",
+    "//base/third_party/dynamic_annotations",
+    "//crypto",
+    "//crypto:platform",
+    "//sdch",
+    "//third_party/icu",
+    "//third_party/zlib",
+    "//url",
+  ]
+
+  if (use_kerberos) {
+    defines += [ "USE_KERBEROS" ]
+    if (is_android) {
+      include_dirs += [ "/usr/include/kerberosV" ]
+    }
+  } else {
+    sources -= [
+      "http/http_auth_gssapi_posix.cc",
+      "http/http_auth_gssapi_posix.h",
+      "http/http_auth_handler_negotiate.h",
+      "http/http_auth_handler_negotiate.cc",
+    ]
+  }
+
+  if (is_posix) {
+    if (posix_avoid_mmap) {
+      sources -= [ "disk_cache/blockfile/mapped_file_posix.cc" ]
+    } else {
+      sources -= [ "disk_cache/blockfile/mapped_file_avoid_mmap_posix.cc" ]
+    }
+  }
+
+  if (!enable_ftp_support) {
+    sources -= [
+      "ftp/ftp_auth_cache.cc",
+      "ftp/ftp_auth_cache.h",
+      "ftp/ftp_ctrl_response_buffer.cc",
+      "ftp/ftp_ctrl_response_buffer.h",
+      "ftp/ftp_directory_listing_parser.cc",
+      "ftp/ftp_directory_listing_parser.h",
+      "ftp/ftp_directory_listing_parser_ls.cc",
+      "ftp/ftp_directory_listing_parser_ls.h",
+      "ftp/ftp_directory_listing_parser_netware.cc",
+      "ftp/ftp_directory_listing_parser_netware.h",
+      "ftp/ftp_directory_listing_parser_os2.cc",
+      "ftp/ftp_directory_listing_parser_os2.h",
+      "ftp/ftp_directory_listing_parser_vms.cc",
+      "ftp/ftp_directory_listing_parser_vms.h",
+      "ftp/ftp_directory_listing_parser_windows.cc",
+      "ftp/ftp_directory_listing_parser_windows.h",
+      "ftp/ftp_network_layer.cc",
+      "ftp/ftp_network_layer.h",
+      "ftp/ftp_network_session.cc",
+      "ftp/ftp_network_session.h",
+      "ftp/ftp_network_transaction.cc",
+      "ftp/ftp_network_transaction.h",
+      "ftp/ftp_request_info.h",
+      "ftp/ftp_response_info.cc",
+      "ftp/ftp_response_info.h",
+      "ftp/ftp_server_type_histograms.cc",
+      "ftp/ftp_server_type_histograms.h",
+      "ftp/ftp_transaction.h",
+      "ftp/ftp_transaction_factory.h",
+      "ftp/ftp_util.cc",
+      "ftp/ftp_util.h",
+      "url_request/ftp_protocol_handler.cc",
+      "url_request/ftp_protocol_handler.h",
+      "url_request/url_request_ftp_job.cc",
+      "url_request/url_request_ftp_job.h",
+    ]
+  }
+
+  if (enable_built_in_dns) {
+    defines += [ "ENABLE_BUILT_IN_DNS" ]
+  } else {
+    sources -= [
+      "dns/address_sorter_posix.cc",
+      "dns/address_sorter_posix.h",
+      "dns/dns_client.cc",
+    ]
+  }
+
+  if (use_openssl) {
+    sources -= [
+      "base/crypto_module_nss.cc",
+      "base/keygen_handler_nss.cc",
+      "base/nss_memio.c",
+      "base/nss_memio.h",
+      "cert/cert_database_nss.cc",
+      "cert/cert_verify_proc_nss.cc",
+      "cert/cert_verify_proc_nss.h",
+      "cert/ct_log_verifier_nss.cc",
+      "cert/ct_objects_extractor_nss.cc",
+      "cert/jwk_serializer_nss.cc",
+      "cert/nss_cert_database.cc",
+      "cert/nss_cert_database.h",
+      "cert/nss_cert_database_chromeos.cc",
+      "cert/nss_cert_database_chromeos.h",
+      "cert/nss_profile_filter_chromeos.cc",
+      "cert/nss_profile_filter_chromeos.h",
+      "cert/scoped_nss_types.h",
+      "cert/test_root_certs_nss.cc",
+      "cert/x509_certificate_nss.cc",
+      "cert/x509_util_nss.cc",
+      "cert/x509_util_nss.h",
+      "ocsp/nss_ocsp.cc",
+      "ocsp/nss_ocsp.h",
+      "quic/crypto/aead_base_decrypter_nss.cc",
+      "quic/crypto/aead_base_encrypter_nss.cc",
+      "quic/crypto/aes_128_gcm_12_decrypter_nss.cc",
+      "quic/crypto/aes_128_gcm_12_encrypter_nss.cc",
+      "quic/crypto/chacha20_poly1305_decrypter_nss.cc",
+      "quic/crypto/chacha20_poly1305_encrypter_nss.cc",
+      "quic/crypto/channel_id_nss.cc",
+      "quic/crypto/p256_key_exchange_nss.cc",
+      "socket/nss_ssl_util.cc",
+      "socket/nss_ssl_util.h",
+      "socket/ssl_client_socket_nss.cc",
+      "socket/ssl_client_socket_nss.h",
+      "socket/ssl_server_socket_nss.cc",
+      "socket/ssl_server_socket_nss.h",
+      "third_party/mozilla_security_manager/nsKeygenHandler.cpp",
+      "third_party/mozilla_security_manager/nsKeygenHandler.h",
+      "third_party/mozilla_security_manager/nsNSSCertificateDB.cpp",
+      "third_party/mozilla_security_manager/nsNSSCertificateDB.h",
+      "third_party/mozilla_security_manager/nsPKCS12Blob.cpp",
+      "third_party/mozilla_security_manager/nsPKCS12Blob.h",
+    ]
+  } else {
+    sources -= [
+      "base/crypto_module_openssl.cc",
+      "base/keygen_handler_openssl.cc",
+      "cert/ct_log_verifier_openssl.cc",
+      "cert/ct_objects_extractor_openssl.cc",
+      "cert/jwk_serializer_openssl.cc",
+      "cert/x509_util_openssl.cc",
+      "cert/x509_util_openssl.h",
+      "quic/crypto/aead_base_decrypter_openssl.cc",
+      "quic/crypto/aead_base_encrypter_openssl.cc",
+      "quic/crypto/aes_128_gcm_12_decrypter_openssl.cc",
+      "quic/crypto/aes_128_gcm_12_encrypter_openssl.cc",
+      "quic/crypto/chacha20_poly1305_decrypter_openssl.cc",
+      "quic/crypto/chacha20_poly1305_encrypter_openssl.cc",
+      "quic/crypto/channel_id_openssl.cc",
+      "quic/crypto/p256_key_exchange_openssl.cc",
+      "quic/crypto/scoped_evp_aead_ctx.cc",
+      "quic/crypto/scoped_evp_aead_ctx.h",
+      "socket/ssl_client_socket_openssl.cc",
+      "socket/ssl_client_socket_openssl.h",
+      "socket/ssl_server_socket_openssl.cc",
+      "socket/ssl_session_cache_openssl.cc",
+      "socket/ssl_session_cache_openssl.h",
+    ]
+  }
+
+  if (!use_openssl_certs) {
+    sources -= [
+      "base/openssl_private_key_store.h",
+      "base/openssl_private_key_store_memory.cc",
+      "cert/cert_database_openssl.cc",
+      "cert/cert_verify_proc_openssl.cc",
+      "cert/cert_verify_proc_openssl.h",
+      "cert/test_root_certs_openssl.cc",
+      "cert/x509_certificate_openssl.cc",
+      "ssl/openssl_client_key_store.cc",
+      "ssl/openssl_client_key_store.h",
+    ]
+    if (is_android) {
+      sources -= [
+        "base/openssl_private_key_store_android.cc",
+      ]
+    }
+  }
+
+  if (use_glib) {
+    configs += [ "//build/config/linux:gconf" ]
+    deps += [ "//build/config/linux:gio" ]
+  }
+
+  if (is_linux) {
+    configs += [ "//build/config/linux:libresolv" ]
+  } else {
+    sources -= [
+      "base/crypto_module_nss.cc",
+      "base/keygen_handler_nss.cc",
+      "cert/cert_database_nss.cc",
+      "cert/nss_cert_database.cc",
+      "cert/nss_cert_database.h",
+      "cert/x509_certificate_nss.cc",
+      "third_party/mozilla_security_manager/nsKeygenHandler.cpp",
+      "third_party/mozilla_security_manager/nsKeygenHandler.h",
+      "third_party/mozilla_security_manager/nsNSSCertificateDB.cpp",
+      "third_party/mozilla_security_manager/nsNSSCertificateDB.h",
+      "third_party/mozilla_security_manager/nsPKCS12Blob.cpp",
+      "third_party/mozilla_security_manager/nsPKCS12Blob.h",
+    ]
+
+    if (!is_ios) {
+      # These files are part of the partial implementation of NSS on iOS so
+      # keep them in that case.
+      sources -= [
+        "cert/test_root_certs_nss.cc",
+        "ocsp/nss_ocsp.cc",
+        "ocsp/nss_ocsp.h",
+      ]
+    }
+  }
+
+  if (!use_nss_certs) {
+    sources -= [
+      "ssl/client_cert_store_nss.cc",
+      "ssl/client_cert_store_nss.h",
+    ]
+    if (!is_ios) {
+      # These files are part of the partial implementation of NSS on iOS so
+      # keep them in that case (even though use_nss_certs is not set).
+      sources -= [
+        "cert/cert_verify_proc_nss.cc",
+        "cert/cert_verify_proc_nss.h",
+      ]
+    }
+    if (is_chromeos) {
+      # These were already removed on non-ChromeOS.
+      sources -= [
+        "ssl/client_cert_store_chromeos.cc",
+        "ssl/client_cert_store_chromeos.h",
+      ]
+    }
+  }
+
+  if (!enable_websockets) {
+    sources -= [
+      "socket_stream/socket_stream.cc",
+      "socket_stream/socket_stream.h",
+      "socket_stream/socket_stream_job.cc",
+      "socket_stream/socket_stream_job.h",
+      "socket_stream/socket_stream_job_manager.cc",
+      "socket_stream/socket_stream_job_manager.h",
+      "socket_stream/socket_stream_metrics.cc",
+      "socket_stream/socket_stream_metrics.h",
+      "spdy/spdy_websocket_stream.cc",
+      "spdy/spdy_websocket_stream.h",
+      "websockets/websocket_basic_handshake_stream.cc",
+      "websockets/websocket_basic_handshake_stream.h",
+      "websockets/websocket_basic_stream.cc",
+      "websockets/websocket_basic_stream.h",
+      "websockets/websocket_channel.cc",
+      "websockets/websocket_channel.h",
+      "websockets/websocket_deflate_predictor.h",
+      "websockets/websocket_deflate_predictor_impl.cc",
+      "websockets/websocket_deflate_predictor_impl.h",
+      "websockets/websocket_deflate_stream.cc",
+      "websockets/websocket_deflate_stream.h",
+      "websockets/websocket_deflater.cc",
+      "websockets/websocket_deflater.h",
+      "websockets/websocket_errors.cc",
+      "websockets/websocket_errors.h",
+      "websockets/websocket_extension.cc",
+      "websockets/websocket_extension.h",
+      "websockets/websocket_extension_parser.cc",
+      "websockets/websocket_extension_parser.h",
+      "websockets/websocket_frame.cc",
+      "websockets/websocket_frame.h",
+      "websockets/websocket_frame_parser.cc",
+      "websockets/websocket_frame_parser.h",
+      "websockets/websocket_handshake_constants.cc",
+      "websockets/websocket_handshake_constants.h",
+      "websockets/websocket_handshake_handler.cc",
+      "websockets/websocket_handshake_handler.h",
+      "websockets/websocket_handshake_request_info.cc",
+      "websockets/websocket_handshake_request_info.h",
+      "websockets/websocket_handshake_response_info.cc",
+      "websockets/websocket_handshake_response_info.h",
+      "websockets/websocket_handshake_stream_base.h",
+      "websockets/websocket_handshake_stream_create_helper.cc",
+      "websockets/websocket_handshake_stream_create_helper.h",
+      "websockets/websocket_inflater.cc",
+      "websockets/websocket_inflater.h",
+      "websockets/websocket_job.cc",
+      "websockets/websocket_job.h",
+      "websockets/websocket_mux.h",
+      "websockets/websocket_net_log_params.cc",
+      "websockets/websocket_net_log_params.h",
+      "websockets/websocket_stream.cc",
+      "websockets/websocket_stream.h",
+      "websockets/websocket_throttle.cc",
+      "websockets/websocket_throttle.h",
+    ]
+  }
+
+  if (!enable_mdns) {
+    sources -= [
+      "dns/mdns_cache.cc",
+      "dns/mdns_cache.h",
+      "dns/mdns_client.cc",
+      "dns/mdns_client.h",
+      "dns/mdns_client_impl.cc",
+      "dns/mdns_client_impl.h",
+      "dns/record_parsed.cc",
+      "dns/record_parsed.h",
+      "dns/record_rdata.cc",
+      "dns/record_rdata.h",
+    ]
+  }
+
+  if (is_win) {
+    sources -= [
+      "http/http_auth_handler_ntlm_portable.cc",
+      "socket/tcp_socket_libevent.cc",
+      "socket/tcp_socket_libevent.h",
+      "udp/udp_socket_libevent.cc",
+      "udp/udp_socket_libevent.h",
+    ]
+    deps += [
+      "//third_party/nss:nspr",
+      "//third_party/nss",
+    ]
+  } else {  # !is_win
+    sources -= [
+      "base/winsock_init.cc",
+      "base/winsock_init.h",
+      "base/winsock_util.cc",
+      "base/winsock_util.h",
+      "proxy/proxy_resolver_winhttp.cc",
+      "proxy/proxy_resolver_winhttp.h",
+    ]
+  }
+
+  if (is_mac) {
+    deps += [
+      "//third_party/nss:nspr",
+      "//third_party/nss",
+    ]
+    libs = [
+      "Foundation.framework",
+      "Security.framework",
+      "SystemConfiguration.framework",
+      "resolv",
+    ]
+  }
+
+  if (is_ios) {
+    sources -= [ "disk_cache/blockfile/file_posix.cc" ]
+    deps += [
+      "//third_party/nss",
+    ]
+    libs = [
+      "CFNetwork.framework",
+      "MobileCoreServices.framework",
+      "Security.framework",
+      "SystemConfiguration.framework",
+      "resolv",
+    ]
+  }
+
+  if (is_android) {
+    if (!is_android_webview_build) {
+      sources -= [
+        "base/openssl_private_key_store_memory.cc",
+        "cert/cert_database_openssl.cc",
+        "cert/cert_verify_proc_openssl.cc",
+        "cert/test_root_certs_openssl.cc",
+      ]
+      deps += [ ":net_jni_headers" ]
+
+      # The net/android/keystore_openssl.cc source file needs to access an
+      # OpenSSL-internal header.
+      include_dirs = [ "//third_party/openssl" ]
+    }
+  }
+}
+
+grit("net_resources") {
+  source = "base/net_resources.grd"
+}
+
+source_set("http_server") {
+  sources = [
+    "server/http_connection.cc",
+    "server/http_connection.h",
+    "server/http_server.cc",
+    "server/http_server.h",
+    "server/http_server_request_info.cc",
+    "server/http_server_request_info.h",
+    "server/http_server_response_info.cc",
+    "server/http_server_response_info.h",
+    "server/web_socket.cc",
+    "server/web_socket.h",
+  ]
+  configs += [ "//build/config/compiler:wexit_time_destructors" ]
+  deps = [
+    ":net",
+    "//base",
+  ]
+}
+
+executable("dump_cache") {
+  sources = [
+    "tools/dump_cache/cache_dumper.cc",
+    "tools/dump_cache/cache_dumper.h",
+    "tools/dump_cache/dump_cache.cc",
+    "tools/dump_cache/dump_files.cc",
+    "tools/dump_cache/dump_files.h",
+    "tools/dump_cache/simple_cache_dumper.cc",
+    "tools/dump_cache/simple_cache_dumper.h",
+    "tools/dump_cache/upgrade_win.cc",
+    "tools/dump_cache/upgrade_win.h",
+    "tools/dump_cache/url_to_filename_encoder.cc",
+    "tools/dump_cache/url_to_filename_encoder.h",
+    "tools/dump_cache/url_utilities.h",
+    "tools/dump_cache/url_utilities.cc",
+  ]
+
+  configs += [ ":net_win_size_truncation" ]
+
+  deps = [
+    "//base",
+    ":net",
+    ":net_test_support",
+  ]
+}
+
+source_set("net_test_support") {
+  sources = [
+    "base/capturing_net_log.cc",
+    "base/capturing_net_log.h",
+    "base/load_timing_info_test_util.cc",
+    "base/load_timing_info_test_util.h",
+    "base/mock_file_stream.cc",
+    "base/mock_file_stream.h",
+    "base/test_completion_callback.cc",
+    "base/test_completion_callback.h",
+    "base/test_data_directory.cc",
+    "base/test_data_directory.h",
+    "cert/mock_cert_verifier.cc",
+    "cert/mock_cert_verifier.h",
+    "cookies/cookie_monster_store_test.cc",
+    "cookies/cookie_monster_store_test.h",
+    "cookies/cookie_store_test_callbacks.cc",
+    "cookies/cookie_store_test_callbacks.h",
+    "cookies/cookie_store_test_helpers.cc",
+    "cookies/cookie_store_test_helpers.h",
+    "disk_cache/disk_cache_test_base.cc",
+    "disk_cache/disk_cache_test_base.h",
+    "disk_cache/disk_cache_test_util.cc",
+    "disk_cache/disk_cache_test_util.h",
+    "dns/dns_test_util.cc",
+    "dns/dns_test_util.h",
+    "dns/mock_host_resolver.cc",
+    "dns/mock_host_resolver.h",
+    "dns/mock_mdns_socket_factory.cc",
+    "dns/mock_mdns_socket_factory.h",
+    "proxy/mock_proxy_resolver.cc",
+    "proxy/mock_proxy_resolver.h",
+    "proxy/mock_proxy_script_fetcher.cc",
+    "proxy/mock_proxy_script_fetcher.h",
+    "proxy/proxy_config_service_common_unittest.cc",
+    "proxy/proxy_config_service_common_unittest.h",
+    "socket/socket_test_util.cc",
+    "socket/socket_test_util.h",
+    "test/cert_test_util.cc",
+    "test/cert_test_util.h",
+    "test/ct_test_util.cc",
+    "test/ct_test_util.h",
+    "test/embedded_test_server/embedded_test_server.cc",
+    "test/embedded_test_server/embedded_test_server.h",
+    "test/embedded_test_server/http_connection.cc",
+    "test/embedded_test_server/http_connection.h",
+    "test/embedded_test_server/http_request.cc",
+    "test/embedded_test_server/http_request.h",
+    "test/embedded_test_server/http_response.cc",
+    "test/embedded_test_server/http_response.h",
+    "test/net_test_suite.cc",
+    "test/net_test_suite.h",
+    "test/python_utils.cc",
+    "test/python_utils.h",
+    "test/spawned_test_server/base_test_server.cc",
+    "test/spawned_test_server/base_test_server.h",
+    "test/spawned_test_server/local_test_server_posix.cc",
+    "test/spawned_test_server/local_test_server_win.cc",
+    "test/spawned_test_server/local_test_server.cc",
+    "test/spawned_test_server/local_test_server.h",
+    "test/spawned_test_server/remote_test_server.cc",
+    "test/spawned_test_server/remote_test_server.h",
+    "test/spawned_test_server/spawned_test_server.h",
+    "test/spawned_test_server/spawner_communicator.cc",
+    "test/spawned_test_server/spawner_communicator.h",
+    "url_request/test_url_fetcher_factory.cc",
+    "url_request/test_url_fetcher_factory.h",
+    "url_request/url_request_test_util.cc",
+    "url_request/url_request_test_util.h",
+  ]
+
+  configs += [ ":net_win_size_truncation" ]
+
+  deps = [
+    "//base",
+    "//base/test:test_support",
+    "//crypto:platform",
+    "//net",
+    "//net/tools/tld_cleanup",
+    "//testing/gmock",
+    "//testing/gtest",
+    "//url",
+  ]
+
+  if (is_ios) {
+    deps += [ "//third_party/nss" ]
+  }
+
+  if (!is_android) {
+    sources -= [
+      "test/spawned_test_server/remote_test_server.cc",
+      "test/spawned_test_server/remote_test_server.h",
+      "test/spawned_test_server/spawner_communicator.cc",
+      "test/spawned_test_server/spawner_communicator.h",
+    ]
+  }
+
+  if (use_v8_in_net) {
+    deps += [ ":net_with_v8" ]
+  }
+
+  if (!enable_mdns) {
+    sources -= [
+      "dns/mock_mdns_socket_factory.cc",
+      "dns/mock_mdns_socket_factory.h",
+    ]
+  }
+
+  forward_dependent_configs_from = deps
+}
+
+if (use_v8_in_net) {
+  component("net_with_v8") {
+    sources = [
+      "proxy/proxy_resolver_v8.cc",
+      "proxy/proxy_resolver_v8.h",
+      "proxy/proxy_resolver_v8_tracing.cc",
+      "proxy/proxy_resolver_v8_tracing.h",
+      "proxy/proxy_service_v8.cc",
+      "proxy/proxy_service_v8.h",
+    ]
+
+    defines = [ "NET_IMPLEMENTATION" ]
+    configs += [
+      ":net_win_size_truncation",
+      "//build/config/compiler:wexit_time_destructors",
+    ]
+
+    deps = [
+      ":net",
+      "//base",
+      "//gin",
+      "//url",
+      "//v8",
+    ]
+  }
+}
+
+if (!is_ios && !is_android) {
+  executable("crash_cache") {
+    sources = [ "tools/crash_cache/crash_cache.cc" ]
+    configs += [ ":net_win_size_truncation" ]
+    deps = [
+      ":net",
+      ":net_test_support",
+      "//base",
+    ]
+  }
+
+  executable("crl_set_dump") {
+    sources = [ "tools/crl_set_dump/crl_set_dump.cc" ]
+    configs += [ ":net_win_size_truncation" ]
+    deps = [
+      ":net",
+      "//base",
+    ]
+  }
+
+  executable("dns_fuzz_stub") {
+    sources = [ "tools/dns_fuzz_stub/dns_fuzz_stub.cc" ]
+    configs += [ ":net_win_size_truncation" ]
+    deps = [
+      ":net",
+      "//base",
+    ]
+  }
+
+  executable("gdig") {
+    sources = [
+      "tools/gdig/file_net_log.cc",
+      "tools/gdig/gdig.cc",
+    ]
+    deps = [
+      ":net",
+      "//base",
+    ]
+  }
+
+  executable("get_server_time") {
+    sources = [ "tools/get_server_time/get_server_time.cc" ]
+    configs += [ ":net_win_size_truncation" ]
+    deps = [
+      ":net",
+      "//base",
+      "//base:i18n",
+      "//url",
+    ]
+  }
+
+  if (use_v8_in_net) {
+    executable("net_watcher") {
+      sources = [ "tools/net_watcher/net_watcher.cc" ]
+      deps = [
+        ":net",
+        ":net_with_v8",
+        "//base",
+      ]
+
+      if (is_linux) {
+        configs += [ "//build/config/linux:gconf" ]
+        deps += [ "//build/config/linux:gio" ]
+      }
+    }
+  }
+
+  executable("run_testserver") {
+    sources = [ "tools/testserver/run_testserver.cc" ]
+    deps = [
+      ":net",  # TODO(brettw) bug 363749: this shouldn't be necessary. It's not
+               # in the GYP build, and can be removed when the bug is fixed.
+      ":net_test_support",
+      "//base",
+      "//base/test:test_support",
+      "//testing/gtest",
+    ]
+  }
+
+  executable("stress_cache") {
+    sources = [ "disk_cache/blockfile/stress_cache.cc" ]
+    configs += [ ":net_win_size_truncation" ]
+    deps = [
+      ":net",
+      ":net_test_support",
+      "//base",
+    ]
+  }
+
+  executable("tld_cleanup") {
+    sources = [ "tools/tld_cleanup/tld_cleanup.cc" ]
+    configs += [ ":net_win_size_truncation" ]
+    deps = [
+      "//base",
+      "//base:i18n",
+      "//net/tools/tld_cleanup",
+    ]
+  }
+}
+
+if (is_linux) {
+  source_set("balsa") {
+    sources = [
+      "tools/balsa/balsa_enums.h",
+      "tools/balsa/balsa_frame.cc",
+      "tools/balsa/balsa_frame.h",
+      "tools/balsa/balsa_headers.cc",
+      "tools/balsa/balsa_headers.h",
+      "tools/balsa/balsa_headers_token_utils.cc",
+      "tools/balsa/balsa_headers_token_utils.h",
+      "tools/balsa/balsa_visitor_interface.h",
+      "tools/balsa/http_message_constants.cc",
+      "tools/balsa/http_message_constants.h",
+      "tools/balsa/noop_balsa_visitor.h",
+      "tools/balsa/simple_buffer.cc",
+      "tools/balsa/simple_buffer.h",
+      "tools/balsa/split.cc",
+      "tools/balsa/split.h",
+      "tools/balsa/string_piece_utils.h",
+    ]
+    deps = [
+      ":net",
+      "//base",
+    ]
+  }
+
+  source_set("epoll_server") {
+    sources = [
+      "tools/epoll_server/epoll_server.cc",
+      "tools/epoll_server/epoll_server.h",
+    ]
+    deps = [
+      ":net",
+      "//base",
+    ]
+  }
+
+  source_set("flip_in_mem_edsm_server_base") {
+    sources = [
+      "tools/dump_cache/url_to_filename_encoder.cc",
+      "tools/dump_cache/url_to_filename_encoder.h",
+      "tools/dump_cache/url_utilities.h",
+      "tools/dump_cache/url_utilities.cc",
+      "tools/flip_server/acceptor_thread.h",
+      "tools/flip_server/acceptor_thread.cc",
+      "tools/flip_server/create_listener.cc",
+      "tools/flip_server/create_listener.h",
+      "tools/flip_server/constants.h",
+      "tools/flip_server/flip_config.cc",
+      "tools/flip_server/flip_config.h",
+      "tools/flip_server/http_interface.cc",
+      "tools/flip_server/http_interface.h",
+      "tools/flip_server/loadtime_measurement.h",
+      "tools/flip_server/mem_cache.h",
+      "tools/flip_server/mem_cache.cc",
+      "tools/flip_server/output_ordering.cc",
+      "tools/flip_server/output_ordering.h",
+      "tools/flip_server/ring_buffer.cc",
+      "tools/flip_server/ring_buffer.h",
+      "tools/flip_server/sm_connection.cc",
+      "tools/flip_server/sm_connection.h",
+      "tools/flip_server/sm_interface.h",
+      "tools/flip_server/spdy_ssl.cc",
+      "tools/flip_server/spdy_ssl.h",
+      "tools/flip_server/spdy_interface.cc",
+      "tools/flip_server/spdy_interface.h",
+      "tools/flip_server/spdy_util.cc",
+      "tools/flip_server/spdy_util.h",
+      "tools/flip_server/streamer_interface.cc",
+      "tools/flip_server/streamer_interface.h",
+    ]
+    deps = [
+      ":balsa",
+      ":epoll_server",
+      ":net",
+      "//base",
+      "//third_party/openssl",
+    ]
+  }
+
+  executable("flip_in_mem_edsm_server_unittests") {
+    sources = [
+      "tools/flip_server/flip_test_utils.cc",
+      "tools/flip_server/flip_test_utils.h",
+      "tools/flip_server/http_interface_test.cc",
+      "tools/flip_server/mem_cache_test.cc",
+      "tools/flip_server/run_all_tests.cc",
+      "tools/flip_server/spdy_interface_test.cc",
+    ]
+    deps = [
+      ":flip_in_mem_edsm_server_base",
+      ":net",
+      ":net_test_support",
+      "//testing/gtest",
+      "//testing/gmock",
+      "//third_party/openssl",
+    ]
+  }
+
+  executable("flip_in_mem_edsm_server") {
+    sources = [ "tools/flip_server/flip_in_mem_edsm_server.cc" ]
+    deps = [
+      ":flip_in_mem_edsm_server_base",
+      ":net",
+      "//base",
+    ]
+  }
+
+  source_set("quic_base") {
+    sources = [
+      "tools/quic/quic_client.cc",
+      "tools/quic/quic_client.h",
+      "tools/quic/quic_client_session.cc",
+      "tools/quic/quic_client_session.h",
+      "tools/quic/quic_default_packet_writer.cc",
+      "tools/quic/quic_default_packet_writer.h",
+      "tools/quic/quic_dispatcher.h",
+      "tools/quic/quic_dispatcher.cc",
+      "tools/quic/quic_epoll_clock.cc",
+      "tools/quic/quic_epoll_clock.h",
+      "tools/quic/quic_epoll_connection_helper.cc",
+      "tools/quic/quic_epoll_connection_helper.h",
+      "tools/quic/quic_in_memory_cache.cc",
+      "tools/quic/quic_in_memory_cache.h",
+      "tools/quic/quic_packet_writer_wrapper.cc",
+      "tools/quic/quic_packet_writer_wrapper.h",
+      "tools/quic/quic_server.cc",
+      "tools/quic/quic_server.h",
+      "tools/quic/quic_server_session.cc",
+      "tools/quic/quic_server_session.h",
+      "tools/quic/quic_socket_utils.cc",
+      "tools/quic/quic_socket_utils.h",
+      "tools/quic/quic_spdy_client_stream.cc",
+      "tools/quic/quic_spdy_client_stream.h",
+      "tools/quic/quic_spdy_server_stream.cc",
+      "tools/quic/quic_spdy_server_stream.h",
+      "tools/quic/quic_time_wait_list_manager.h",
+      "tools/quic/quic_time_wait_list_manager.cc",
+      "tools/quic/spdy_utils.cc",
+      "tools/quic/spdy_utils.h",
+    ]
+    deps = [
+      ":balsa",
+      ":epoll_server",
+      ":net",
+      "//base",
+      "//base/third_party/dynamic_annotations",
+      "//crypto",
+      "//third_party/openssl",
+      "//url",
+    ]
+  }
+
+  executable("quic_client") {
+    sources = [ "tools/quic/quic_client_bin.cc" ]
+    deps = [
+      ":quic_base",
+      ":net",
+      "//base",
+      "//third_party/openssl",
+    ]
+  }
+
+  executable("quic_server") {
+    sources = [ "tools/quic/quic_server_bin.cc" ]
+    deps = [
+      ":quic_base",
+      ":net",
+      "//base",
+      "//third_party/openssl",
+    ]
+  }
+}
+
+# TODO(GYP) Android net_jni_headers target and related.
+
+if (is_android || is_linux) {
+  executable("disk_cache_memory_test") {
+    sources = [ "tools/disk_cache_memory_test/disk_cache_memory_test.cc" ]
+    deps = [
+      ":net",
+      "//base",
+    ]
+  }
+}
diff --git a/net/android/java/src/org/chromium/net/DefaultAndroidKeyStore.java b/net/android/java/src/org/chromium/net/DefaultAndroidKeyStore.java
index cc61657..2492da6 100644
--- a/net/android/java/src/org/chromium/net/DefaultAndroidKeyStore.java
+++ b/net/android/java/src/org/chromium/net/DefaultAndroidKeyStore.java
@@ -167,7 +167,7 @@
             Log.e(TAG, "Cannot find system OpenSSLRSAPrivateKey class: " + e);
             return 0;
         }
-        if (!superClass.isInstance(key)) {
+        if (!superClass.isInstance(javaKey)) {
             // This may happen if the PrivateKey was not created by the "AndroidOpenSSL"
             // provider, which should be the default. That could happen if an OEM decided
             // to implement a different default provider. Also highly unlikely.
@@ -197,7 +197,11 @@
 
             // Use reflection to invoke the 'getPkeyContext' method on the
             // result of the getOpenSSLKey(). This is an 32-bit integer
-            // which is the address of an EVP_PKEY object.
+            // which is the address of an EVP_PKEY object. Note that this
+            // method these days returns a 64-bit long, but since this code
+            // path is used for older Android versions, it may still return
+            // a 32-bit int here. To be on the safe side, we cast the return
+            // value via Number rather than directly to Integer or Long.
             Method getPkeyContext;
             try {
                 getPkeyContext = opensslKey.getClass().getDeclaredMethod("getPkeyContext");
@@ -209,7 +213,7 @@
             getPkeyContext.setAccessible(true);
             long evp_pkey = 0;
             try {
-                evp_pkey = (Long) getPkeyContext.invoke(opensslKey);
+                evp_pkey = ((Number) getPkeyContext.invoke(opensslKey)).longValue();
             } finally {
                 getPkeyContext.setAccessible(false);
             }
diff --git a/net/base/escape.cc b/net/base/escape.cc
index 6f67a5f..ab70f1d 100644
--- a/net/base/escape.cc
+++ b/net/base/escape.cc
@@ -120,15 +120,18 @@
   return false;
 }
 
+// Unescapes |escaped_text| according to |rules|, returning the resulting
+// string.  Fills in an |adjustments| parameter, if non-NULL, so it reflects
+// the alterations done to the string that are not one-character-to-one-
+// character.  The resulting |adjustments| will always be sorted by increasing
+// offset.
 template<typename STR>
-STR UnescapeURLWithOffsetsImpl(const STR& escaped_text,
-                               UnescapeRule::Type rules,
-                               std::vector<size_t>* offsets_for_adjustment) {
-  if (offsets_for_adjustment) {
-    std::for_each(offsets_for_adjustment->begin(),
-                  offsets_for_adjustment->end(),
-                  base::LimitOffset<STR>(escaped_text.length()));
-  }
+STR UnescapeURLWithAdjustmentsImpl(
+    const STR& escaped_text,
+    UnescapeRule::Type rules,
+    base::OffsetAdjuster::Adjustments* adjustments) {
+  if (adjustments)
+    adjustments->clear();
   // Do not unescape anything, return the |escaped_text| text.
   if (rules == UnescapeRule::NONE)
     return escaped_text;
@@ -140,7 +143,6 @@
   result.reserve(escaped_text.length());
 
   // Locations of adjusted text.
-  net::internal::AdjustEncodingOffset::Adjustments adjustments;
   for (size_t i = 0, max = escaped_text.size(); i < max; ++i) {
     if (static_cast<unsigned char>(escaped_text[i]) >= 128) {
       // Non ASCII character, append as is.
@@ -208,7 +210,8 @@
            // Additionally allow control characters if requested.
            (first_byte < ' ' && (rules & UnescapeRule::CONTROL_CHARS)))) {
         // Use the unescaped version of the character.
-        adjustments.push_back(i);
+        if (adjustments)
+          adjustments->push_back(base::OffsetAdjuster::Adjustment(i, 3, 1));
         result.push_back(first_byte);
         i += 2;
       } else {
@@ -225,13 +228,6 @@
     }
   }
 
-  // Make offset adjustment.
-  if (offsets_for_adjustment && !adjustments.empty()) {
-    std::for_each(offsets_for_adjustment->begin(),
-                   offsets_for_adjustment->end(),
-                   net::internal::AdjustEncodingOffset(adjustments));
-  }
-
   return result;
 }
 
@@ -339,48 +335,39 @@
 
 std::string UnescapeURLComponent(const std::string& escaped_text,
                                  UnescapeRule::Type rules) {
-  return UnescapeURLWithOffsetsImpl(escaped_text, rules, NULL);
+  return UnescapeURLWithAdjustmentsImpl(escaped_text, rules, NULL);
 }
 
 base::string16 UnescapeURLComponent(const base::string16& escaped_text,
                                     UnescapeRule::Type rules) {
-  return UnescapeURLWithOffsetsImpl(escaped_text, rules, NULL);
+  return UnescapeURLWithAdjustmentsImpl(escaped_text, rules, NULL);
 }
 
-base::string16 UnescapeAndDecodeUTF8URLComponent(
-    const std::string& text,
-    UnescapeRule::Type rules,
-    size_t* offset_for_adjustment) {
-  std::vector<size_t> offsets;
-  if (offset_for_adjustment)
-    offsets.push_back(*offset_for_adjustment);
-  base::string16 result =
-      UnescapeAndDecodeUTF8URLComponentWithOffsets(text, rules, &offsets);
-  if (offset_for_adjustment)
-    *offset_for_adjustment = offsets[0];
-  return result;
+base::string16 UnescapeAndDecodeUTF8URLComponent(const std::string& text,
+                                                 UnescapeRule::Type rules) {
+  return UnescapeAndDecodeUTF8URLComponentWithAdjustments(text, rules, NULL);
 }
 
-base::string16 UnescapeAndDecodeUTF8URLComponentWithOffsets(
+base::string16 UnescapeAndDecodeUTF8URLComponentWithAdjustments(
     const std::string& text,
     UnescapeRule::Type rules,
-    std::vector<size_t>* offsets_for_adjustment) {
+    base::OffsetAdjuster::Adjustments* adjustments) {
   base::string16 result;
-  std::vector<size_t> original_offsets;
-  if (offsets_for_adjustment)
-    original_offsets = *offsets_for_adjustment;
-  std::string unescaped_url(
-      UnescapeURLWithOffsetsImpl(text, rules, offsets_for_adjustment));
-  if (base::UTF8ToUTF16AndAdjustOffsets(unescaped_url.data(),
-                                        unescaped_url.length(),
-                                        &result, offsets_for_adjustment))
-    return result;  // Character set looks like it's valid.
-
-  // Not valid.  Return the escaped version.  Undo our changes to
-  // |offset_for_adjustment| since we haven't changed the string after all.
-  if (offsets_for_adjustment)
-    *offsets_for_adjustment = original_offsets;
-  return base::UTF8ToUTF16AndAdjustOffsets(text, offsets_for_adjustment);
+  base::OffsetAdjuster::Adjustments unescape_adjustments;
+  std::string unescaped_url(UnescapeURLWithAdjustmentsImpl(
+      text, rules, &unescape_adjustments));
+  if (base::UTF8ToUTF16WithAdjustments(unescaped_url.data(),
+                                       unescaped_url.length(),
+                                       &result, adjustments)) {
+    // Character set looks like it's valid.
+    if (adjustments) {
+      base::OffsetAdjuster::MergeSequentialAdjustments(unescape_adjustments,
+                                                       adjustments);
+    }
+    return result;
+  }
+  // Character set is not valid.  Return the escaped version.
+  return base::UTF8ToUTF16WithAdjustments(text, adjustments);
 }
 
 base::string16 UnescapeForHTML(const base::string16& input) {
@@ -421,32 +408,4 @@
   return text;
 }
 
-namespace internal {
-
-AdjustEncodingOffset::AdjustEncodingOffset(const Adjustments& adjustments)
-  : adjustments(adjustments) {}
-
-void AdjustEncodingOffset::operator()(size_t& offset) {
-  // For each encoded character occurring before an offset subtract 2.
-  if (offset == base::string16::npos)
-    return;
-  size_t adjusted_offset = offset;
-  for (Adjustments::const_iterator i = adjustments.begin();
-       i != adjustments.end(); ++i) {
-    size_t location = *i;
-    if (offset <= location) {
-      offset = adjusted_offset;
-      return;
-    }
-    if (offset <= (location + 2)) {
-      offset = base::string16::npos;
-      return;
-    }
-    adjusted_offset -= 2;
-  }
-  offset = adjusted_offset;
-}
-
-}  // namespace internal
-
 }  // namespace net
diff --git a/net/base/escape.h b/net/base/escape.h
index 69eb2a5..1915d24 100644
--- a/net/base/escape.h
+++ b/net/base/escape.h
@@ -10,6 +10,7 @@
 
 #include "base/basictypes.h"
 #include "base/strings/string16.h"
+#include "base/strings/utf_offset_string_conversions.h"
 #include "net/base/net_export.h"
 
 namespace net {
@@ -114,42 +115,21 @@
 // Unescapes the given substring as a URL, and then tries to interpret the
 // result as being encoded as UTF-8. If the result is convertable into UTF-8, it
 // will be returned as converted. If it is not, the original escaped string will
-// be converted into a base::string16 and returned. (|offset[s]_for_adjustment|)
-// specifies one or more offsets into the source strings; each offset will be
-// adjusted to point at the same logical place in the result strings during
-// decoding.  If this isn't possible because an offset points past the end of
-// the source strings or into the middle of a multibyte sequence, the offending
-// offset will be set to string16::npos. |offset[s]_for_adjustment| may be NULL.
+// be converted into a base::string16 and returned.  |adjustments| provides
+// information on how the original string was adjusted to get the string
+// returned.
 NET_EXPORT base::string16 UnescapeAndDecodeUTF8URLComponent(
     const std::string& text,
-    UnescapeRule::Type rules,
-    size_t* offset_for_adjustment);
-NET_EXPORT base::string16 UnescapeAndDecodeUTF8URLComponentWithOffsets(
+    UnescapeRule::Type rules);
+NET_EXPORT base::string16 UnescapeAndDecodeUTF8URLComponentWithAdjustments(
     const std::string& text,
     UnescapeRule::Type rules,
-    std::vector<size_t>* offsets_for_adjustment);
+    base::OffsetAdjuster::Adjustments* adjustments);
 
 // Unescapes the following ampersand character codes from |text|:
 // &lt; &gt; &amp; &quot; &#39;
 NET_EXPORT base::string16 UnescapeForHTML(const base::string16& text);
 
-namespace internal {
-
-// Private Functions (Exposed for Unit Testing) --------------------------------
-
-// A function called by std::for_each that will adjust any offset which occurs
-// after one or more encoded characters.
-struct NET_EXPORT_PRIVATE AdjustEncodingOffset {
-  typedef std::vector<size_t> Adjustments;
-
-  explicit AdjustEncodingOffset(const Adjustments& adjustments);
-  void operator()(size_t& offset);
-
-  const Adjustments& adjustments;
-};
-
-}  // namespace internal
-
 }  // namespace net
 
 #endif  // NET_BASE_ESCAPE_H_
diff --git a/net/base/escape_unittest.cc b/net/base/escape_unittest.cc
index 77d9fc2..05f727a 100644
--- a/net/base/escape_unittest.cc
+++ b/net/base/escape_unittest.cc
@@ -17,8 +17,6 @@
 namespace net {
 namespace {
 
-const size_t kNpos = base::string16::npos;
-
 struct EscapeCase {
   const char* input;
   const char* output;
@@ -122,6 +120,16 @@
     "%7B%7C%7D~%7F%80%FF");
 }
 
+TEST(EscapeTest, DataURLWithAccentedCharacters) {
+  const std::string url =
+      "text/html;charset=utf-8,%3Chtml%3E%3Cbody%3ETonton,%20ton%20th%C3"
+      "%A9%20t'a-t-il%20%C3%B4t%C3%A9%20ta%20toux%20";
+
+  base::OffsetAdjuster::Adjustments adjustments;
+  net::UnescapeAndDecodeUTF8URLComponentWithAdjustments(
+      url, UnescapeRule::SPACES, &adjustments);
+}
+
 TEST(EscapeTest, EscapeUrlEncodedData) {
   ASSERT_EQ(
     // Most of the character space we care about, un-escaped
@@ -355,7 +363,7 @@
 
     // TODO: Need to test unescape_spaces and unescape_percent.
     base::string16 decoded = UnescapeAndDecodeUTF8URLComponent(
-        unescape_cases[i].input, UnescapeRule::NORMAL, NULL);
+        unescape_cases[i].input, UnescapeRule::NORMAL);
     EXPECT_EQ(base::WideToUTF16(unescape_cases[i].decoded), decoded);
   }
 }
@@ -363,25 +371,54 @@
 TEST(EscapeTest, AdjustOffset) {
   const AdjustOffsetCase adjust_cases[] = {
     {"", 0, 0},
-    {"", 1, std::string::npos},
     {"test", 0, 0},
     {"test", 2, 2},
     {"test", 4, 4},
-    {"test", 5, std::string::npos},
     {"test", std::string::npos, std::string::npos},
     {"%2dtest", 6, 4},
+    {"%2dtest", 3, 1},
     {"%2dtest", 2, std::string::npos},
+    {"%2dtest", 1, std::string::npos},
+    {"%2dtest", 0, 0},
     {"test%2d", 2, 2},
     {"%E4%BD%A0+%E5%A5%BD", 9, 1},
     {"%E4%BD%A0+%E5%A5%BD", 6, std::string::npos},
-    {"%ED%B0%80+%E5%A5%BD", 6, 6},
+    {"%E4%BD%A0+%E5%A5%BD", 0, 0},
+    {"%E4%BD%A0+%E5%A5%BD", 10, 2},
+    {"%E4%BD%A0+%E5%A5%BD", 19, 3},
+
+    {"hi%41test%E4%BD%A0+%E5%A5%BD", 18, 8},
+    {"hi%41test%E4%BD%A0+%E5%A5%BD", 15, std::string::npos},
+    {"hi%41test%E4%BD%A0+%E5%A5%BD", 9, 7},
+    {"hi%41test%E4%BD%A0+%E5%A5%BD", 19, 9},
+    {"hi%41test%E4%BD%A0+%E5%A5%BD", 28, 10},
+    {"hi%41test%E4%BD%A0+%E5%A5%BD", 0, 0},
+    {"hi%41test%E4%BD%A0+%E5%A5%BD", 2, 2},
+    {"hi%41test%E4%BD%A0+%E5%A5%BD", 3, std::string::npos},
+    {"hi%41test%E4%BD%A0+%E5%A5%BD", 5, 3},
+
+    {"%E4%BD%A0+%E5%A5%BDhi%41test", 9, 1},
+    {"%E4%BD%A0+%E5%A5%BDhi%41test", 6, std::string::npos},
+    {"%E4%BD%A0+%E5%A5%BDhi%41test", 0, 0},
+    {"%E4%BD%A0+%E5%A5%BDhi%41test", 10, 2},
+    {"%E4%BD%A0+%E5%A5%BDhi%41test", 19, 3},
+    {"%E4%BD%A0+%E5%A5%BDhi%41test", 21, 5},
+    {"%E4%BD%A0+%E5%A5%BDhi%41test", 22, std::string::npos},
+    {"%E4%BD%A0+%E5%A5%BDhi%41test", 24, 6},
+    {"%E4%BD%A0+%E5%A5%BDhi%41test", 28, 10},
+
+    {"%ED%B0%80+%E5%A5%BD", 6, 6},  // not convertable to UTF-8
   };
 
   for (size_t i = 0; i < arraysize(adjust_cases); i++) {
     size_t offset = adjust_cases[i].input_offset;
-    UnescapeAndDecodeUTF8URLComponent(adjust_cases[i].input,
-                                      UnescapeRule::NORMAL, &offset);
-    EXPECT_EQ(adjust_cases[i].output_offset, offset);
+    base::OffsetAdjuster::Adjustments adjustments;
+    UnescapeAndDecodeUTF8URLComponentWithAdjustments(
+        adjust_cases[i].input, UnescapeRule::NORMAL, &adjustments);
+    base::OffsetAdjuster::AdjustOffset(adjustments, &offset);
+    EXPECT_EQ(adjust_cases[i].output_offset, offset)
+        << "input=" << adjust_cases[i].input
+        << " offset=" << adjust_cases[i].input_offset;
   }
 }
 
@@ -417,41 +454,6 @@
   }
 }
 
-TEST(EscapeTest, AdjustEncodingOffset) {
-  // Imagine we have strings as shown in the following cases where the
-  // %XX's represent encoded characters
-
-  // 1: abc%ECdef ==> abcXdef
-  std::vector<size_t> offsets;
-  for (size_t t = 0; t < 9; ++t)
-    offsets.push_back(t);
-  internal::AdjustEncodingOffset::Adjustments adjustments;
-  adjustments.push_back(3);
-  std::for_each(offsets.begin(), offsets.end(),
-                internal::AdjustEncodingOffset(adjustments));
-  size_t expected_1[] = {0, 1, 2, 3, kNpos, kNpos, 4, 5, 6};
-  EXPECT_EQ(offsets.size(), arraysize(expected_1));
-  for (size_t i = 0; i < arraysize(expected_1); ++i)
-    EXPECT_EQ(expected_1[i], offsets[i]);
-
-
-  // 2: %ECabc%EC%ECdef%EC ==> XabcXXdefX
-  offsets.clear();
-  for (size_t t = 0; t < 18; ++t)
-    offsets.push_back(t);
-  adjustments.clear();
-  adjustments.push_back(0);
-  adjustments.push_back(6);
-  adjustments.push_back(9);
-  adjustments.push_back(15);
-  std::for_each(offsets.begin(), offsets.end(),
-                internal::AdjustEncodingOffset(adjustments));
-  size_t expected_2[] = {0, kNpos, kNpos, 1, 2, 3, 4, kNpos, kNpos, 5, kNpos,
-                         kNpos, 6, 7, 8, 9, kNpos, kNpos};
-  EXPECT_EQ(offsets.size(), arraysize(expected_2));
-  for (size_t i = 0; i < arraysize(expected_2); ++i)
-    EXPECT_EQ(expected_2[i], offsets[i]);
-}
 
 }  // namespace
 }  // namespace net
diff --git a/net/base/file_stream.cc b/net/base/file_stream.cc
index a0939eb..6c3741a 100644
--- a/net/base/file_stream.cc
+++ b/net/base/file_stream.cc
@@ -14,54 +14,37 @@
 
 namespace net {
 
-FileStream::FileStream(NetLog* net_log,
-                       const scoped_refptr<base::TaskRunner>& task_runner)
-    : bound_net_log_(BoundNetLog::Make(net_log, NetLog::SOURCE_FILESTREAM)),
-      context_(new Context(bound_net_log_, task_runner)) {
-  bound_net_log_.BeginEvent(NetLog::TYPE_FILE_STREAM_ALIVE);
+FileStream::FileStream(const scoped_refptr<base::TaskRunner>& task_runner)
+    : context_(new Context(task_runner)) {
 }
 
-FileStream::FileStream(NetLog* net_log)
-    : bound_net_log_(BoundNetLog::Make(net_log, NetLog::SOURCE_FILESTREAM)),
-      context_(new Context(bound_net_log_,
-                           base::WorkerPool::GetTaskRunner(true /* slow */))) {
-  bound_net_log_.BeginEvent(NetLog::TYPE_FILE_STREAM_ALIVE);
+FileStream::FileStream()
+    : context_(new Context(base::WorkerPool::GetTaskRunner(true /* slow */))) {
 }
 
 FileStream::FileStream(base::PlatformFile file,
                        int flags,
-                       NetLog* net_log,
                        const scoped_refptr<base::TaskRunner>& task_runner)
-    : bound_net_log_(BoundNetLog::Make(net_log, NetLog::SOURCE_FILESTREAM)),
-      context_(new Context(base::File(file), bound_net_log_, task_runner)) {
-  bound_net_log_.BeginEvent(NetLog::TYPE_FILE_STREAM_ALIVE);
+    : context_(new Context(base::File(file), task_runner)) {
 }
 
-FileStream::FileStream(base::PlatformFile file, int flags, NetLog* net_log)
-    : bound_net_log_(BoundNetLog::Make(net_log, NetLog::SOURCE_FILESTREAM)),
-      context_(new Context(base::File(file), bound_net_log_,
+FileStream::FileStream(base::PlatformFile file, int flags)
+    : context_(new Context(base::File(file),
                            base::WorkerPool::GetTaskRunner(true /* slow */))) {
-  bound_net_log_.BeginEvent(NetLog::TYPE_FILE_STREAM_ALIVE);
 }
 
 FileStream::FileStream(base::File file,
-                       net::NetLog* net_log,
                        const scoped_refptr<base::TaskRunner>& task_runner)
-    : bound_net_log_(BoundNetLog::Make(net_log, NetLog::SOURCE_FILESTREAM)),
-      context_(new Context(file.Pass(), bound_net_log_, task_runner)) {
-  bound_net_log_.BeginEvent(NetLog::TYPE_FILE_STREAM_ALIVE);
+    : context_(new Context(file.Pass(), task_runner)) {
 }
 
-FileStream::FileStream(base::File file, net::NetLog* net_log)
-    : bound_net_log_(BoundNetLog::Make(net_log, NetLog::SOURCE_FILESTREAM)),
-      context_(new Context(file.Pass(), bound_net_log_,
+FileStream::FileStream(base::File file)
+    : context_(new Context(file.Pass(),
                            base::WorkerPool::GetTaskRunner(true /* slow */))) {
-  bound_net_log_.BeginEvent(NetLog::TYPE_FILE_STREAM_ALIVE);
 }
 
 FileStream::~FileStream() {
   context_.release()->Orphan();
-  bound_net_log_.EndEvent(NetLog::TYPE_FILE_STREAM_ALIVE);
 }
 
 int FileStream::Open(const base::FilePath& path, int open_flags,
diff --git a/net/base/file_stream.h b/net/base/file_stream.h
index a903fec..4638ad0 100644
--- a/net/base/file_stream.h
+++ b/net/base/file_stream.h
@@ -16,7 +16,6 @@
 #include "net/base/completion_callback.h"
 #include "net/base/file_stream_whence.h"
 #include "net/base/net_export.h"
-#include "net/base/net_log.h"
 
 namespace base {
 class FilePath;
@@ -28,21 +27,17 @@
 
 class NET_EXPORT FileStream {
  public:
-  // Creates a |FileStream| with a new |BoundNetLog| (based on |net_log|)
-  // attached.  |net_log| may be NULL if no logging is needed.
+  // Creates a FileStream.
   // Uses |task_runner| for asynchronous operations.
-  FileStream(net::NetLog* net_log,
-             const scoped_refptr<base::TaskRunner>& task_runner);
+  explicit FileStream(const scoped_refptr<base::TaskRunner>& task_runner);
 
   // Same as above, but runs async tasks in base::WorkerPool.
-  explicit FileStream(net::NetLog* net_log);
+  FileStream();
 
   // Construct a FileStream with an existing file handle and opening flags.
   // |file| is valid file handle.
   // |flags| is a bitfield of base::PlatformFileFlags when the file handle was
   // opened.
-  // |net_log| is the net log pointer to use to create a |BoundNetLog|.  May be
-  // NULL if logging is not needed.
   // Uses |task_runner| for asynchronous operations.
   // Note: the new FileStream object takes ownership of the PlatformFile and
   // will close it on destruction.
@@ -50,18 +45,16 @@
   // TODO(rvargas): remove all references to PlatformFile.
   FileStream(base::PlatformFile file,
              int flags,
-             net::NetLog* net_log,
              const scoped_refptr<base::TaskRunner>& task_runner);
 
   // Same as above, but runs async tasks in base::WorkerPool.
   // This constructor is deprecated.
-  FileStream(base::PlatformFile file, int flags, net::NetLog* net_log);
+  FileStream(base::PlatformFile file, int flags);
 
   // Non-deprecated versions of the previous two constructors.
   FileStream(base::File file,
-             net::NetLog* net_log,
              const scoped_refptr<base::TaskRunner>& task_runner);
-  FileStream(base::File file, net::NetLog* net_log);
+  explicit FileStream(base::File file);
 
   // The underlying file is closed automatically.
   virtual ~FileStream();
@@ -175,8 +168,6 @@
  private:
   class Context;
 
-  net::BoundNetLog bound_net_log_;
-
   // Context performing I/O operations. It was extracted into a separate class
   // to perform asynchronous operations because FileStream can be destroyed
   // before completion of an async operation. Also if a FileStream is destroyed
diff --git a/net/base/file_stream_context.cc b/net/base/file_stream_context.cc
index 1d7e493..13467ec 100644
--- a/net/base/file_stream_context.cc
+++ b/net/base/file_stream_context.cc
@@ -23,37 +23,6 @@
   callback.Run(static_cast<int>(result));
 }
 
-const char* FileErrorSourceStrings[] = {
-  "OPEN",
-  "WRITE",
-  "READ",
-  "SEEK",
-  "FLUSH",
-  "SET_EOF",
-  "GET_SIZE",
-  "CLOSE"
-};
-
-COMPILE_ASSERT(ARRAYSIZE_UNSAFE(FileErrorSourceStrings) ==
-                   FILE_ERROR_SOURCE_COUNT,
-               file_error_source_enum_has_changed);
-
-// Creates NetLog parameters when a FileStream has an error.
-base::Value* NetLogFileStreamErrorCallback(
-    FileErrorSource source,
-    int os_error,
-    Error net_error,
-    NetLog::LogLevel /* log_level */) {
-  base::DictionaryValue* dict = new base::DictionaryValue();
-
-  DCHECK_NE(FILE_ERROR_SOURCE_COUNT, source);
-  dict->SetString("operation", FileErrorSourceStrings[source]);
-  dict->SetInteger("os_error", os_error);
-  dict->SetInteger("net_error", net_error);
-
-  return dict;
-}
-
 }  // namespace
 
 FileStream::Context::IOResult::IOResult()
@@ -103,8 +72,6 @@
   DCHECK(!orphaned_);
 
   orphaned_ = true;
-  if (file_.IsValid())
-    bound_net_log_.EndEvent(NetLog::TYPE_FILE_STREAM_OPEN);
 
   if (!async_in_progress_) {
     CloseAndDelete();
@@ -117,7 +84,6 @@
                                     int open_flags,
                                     const CompletionCallback& callback) {
   DCHECK(!async_in_progress_);
-  BeginOpenEvent(path);
 
   bool posted = base::PostTaskAndReplyWithResult(
       task_runner_.get(),
@@ -136,10 +102,9 @@
       task_runner_.get(),
       FROM_HERE,
       base::Bind(&Context::CloseFileImpl, base::Unretained(this)),
-      base::Bind(&Context::ProcessAsyncResult,
+      base::Bind(&Context::OnAsyncCompleted,
                  base::Unretained(this),
-                 IntToInt64(callback),
-                 FILE_ERROR_SOURCE_CLOSE));
+                 IntToInt64(callback)));
   DCHECK(posted);
 
   async_in_progress_ = true;
@@ -155,10 +120,9 @@
       FROM_HERE,
       base::Bind(
           &Context::SeekFileImpl, base::Unretained(this), whence, offset),
-      base::Bind(&Context::ProcessAsyncResult,
+      base::Bind(&Context::OnAsyncCompleted,
                  base::Unretained(this),
-                 callback,
-                 FILE_ERROR_SOURCE_SEEK));
+                 callback));
   DCHECK(posted);
 
   async_in_progress_ = true;
@@ -171,37 +135,14 @@
       task_runner_.get(),
       FROM_HERE,
       base::Bind(&Context::FlushFileImpl, base::Unretained(this)),
-      base::Bind(&Context::ProcessAsyncResult,
+      base::Bind(&Context::OnAsyncCompleted,
                  base::Unretained(this),
-                 IntToInt64(callback),
-                 FILE_ERROR_SOURCE_FLUSH));
+                 IntToInt64(callback)));
   DCHECK(posted);
 
   async_in_progress_ = true;
 }
 
-void FileStream::Context::RecordError(const IOResult& result,
-                                      FileErrorSource source) const {
-  if (result.result >= 0) {
-    // |result| is not an error.
-    return;
-  }
-
-  if (!orphaned_) {
-    bound_net_log_.AddEvent(
-        NetLog::TYPE_FILE_STREAM_ERROR,
-        base::Bind(&NetLogFileStreamErrorCallback,
-                   source, result.os_error,
-                   static_cast<net::Error>(result.result)));
-  }
-}
-
-void FileStream::Context::BeginOpenEvent(const base::FilePath& path) {
-  std::string file_name = path.AsUTF8Unsafe();
-  bound_net_log_.BeginEvent(NetLog::TYPE_FILE_STREAM_OPEN,
-                            NetLog::StringCallback("file_name", &file_name));
-}
-
 FileStream::Context::OpenResult FileStream::Context::OpenFileImpl(
     const base::FilePath& path, int open_flags) {
 #if defined(OS_POSIX)
@@ -239,20 +180,13 @@
   return IOResult(OK, 0);
 }
 
-void FileStream::Context::ProcessOpenError(const IOResult& error_code) {
-  bound_net_log_.EndEvent(NetLog::TYPE_FILE_STREAM_OPEN);
-  RecordError(error_code, FILE_ERROR_SOURCE_OPEN);
-}
-
 void FileStream::Context::OnOpenCompleted(const CompletionCallback& callback,
                                           OpenResult open_result) {
-  if (!open_result.file.IsValid()) {
-    ProcessOpenError(open_result.error_code);
-  } else if (!orphaned_) {
+  if (open_result.file.IsValid() && !orphaned_) {
     file_ = open_result.file.Pass();
     OnAsyncFileOpened();
   }
-  OnAsyncCompleted(IntToInt64(callback), open_result.error_code.result);
+  OnAsyncCompleted(IntToInt64(callback), open_result.error_code);
 }
 
 void FileStream::Context::CloseAndDelete() {
@@ -274,17 +208,9 @@
   return base::Bind(&CallInt64ToInt, callback);
 }
 
-void FileStream::Context::ProcessAsyncResult(
-    const Int64CompletionCallback& callback,
-    FileErrorSource source,
-    const IOResult& result) {
-  RecordError(result, source);
-  OnAsyncCompleted(callback, result.result);
-}
-
 void FileStream::Context::OnAsyncCompleted(
     const Int64CompletionCallback& callback,
-    int64 result) {
+    const IOResult& result) {
   // Reset this before Run() as Run() may issue a new async operation. Also it
   // should be reset before CloseAsync() because it shouldn't run if any async
   // operation is in progress.
@@ -292,7 +218,7 @@
   if (orphaned_)
     CloseAndDelete();
   else
-    callback.Run(result);
+    callback.Run(result.result);
 }
 
 }  // namespace net
diff --git a/net/base/file_stream_context.h b/net/base/file_stream_context.h
index 92a6beb..c4a06ee 100644
--- a/net/base/file_stream_context.h
+++ b/net/base/file_stream_context.h
@@ -34,7 +34,6 @@
 #include "net/base/completion_callback.h"
 #include "net/base/file_stream.h"
 #include "net/base/file_stream_whence.h"
-#include "net/base/net_log.h"
 
 #if defined(OS_POSIX)
 #include <errno.h>
@@ -48,18 +47,6 @@
 
 class IOBuffer;
 
-enum FileErrorSource {
-  FILE_ERROR_SOURCE_OPEN = 0,
-  FILE_ERROR_SOURCE_WRITE,
-  FILE_ERROR_SOURCE_READ,
-  FILE_ERROR_SOURCE_SEEK,
-  FILE_ERROR_SOURCE_FLUSH,
-  FILE_ERROR_SOURCE_SET_EOF,
-  FILE_ERROR_SOURCE_GET_SIZE,
-  FILE_ERROR_SOURCE_CLOSE,
-  FILE_ERROR_SOURCE_COUNT,
-};
-
 #if defined(OS_WIN)
 class FileStream::Context : public base::MessageLoopForIO::IOHandler {
 #elif defined(OS_POSIX)
@@ -71,11 +58,8 @@
   // file_stream_context_{win,posix}.cc.
   ////////////////////////////////////////////////////////////////////////////
 
-  Context(const BoundNetLog& bound_net_log,
-          const scoped_refptr<base::TaskRunner>& task_runner);
-  Context(base::File file,
-          const BoundNetLog& bound_net_log,
-          const scoped_refptr<base::TaskRunner>& task_runner);
+  explicit Context(const scoped_refptr<base::TaskRunner>& task_runner);
+  Context(base::File file, const scoped_refptr<base::TaskRunner>& task_runner);
 #if defined(OS_WIN)
   virtual ~Context();
 #elif defined(OS_POSIX)
@@ -145,16 +129,10 @@
     IOResult error_code;
   };
 
-  // Log the error from |result| to |bound_net_log_|.
-  void RecordError(const IOResult& result, FileErrorSource source) const;
-
-  void BeginOpenEvent(const base::FilePath& path);
-
   OpenResult OpenFileImpl(const base::FilePath& path, int open_flags);
 
   IOResult CloseFileImpl();
 
-  void ProcessOpenError(const IOResult& result);
   void OnOpenCompleted(const CompletionCallback& callback,
                        OpenResult open_result);
 
@@ -162,15 +140,10 @@
 
   Int64CompletionCallback IntToInt64(const CompletionCallback& callback);
 
-  // Called when asynchronous Seek() is completed.
-  // Reports error if needed and calls callback.
-  void ProcessAsyncResult(const Int64CompletionCallback& callback,
-                          FileErrorSource source,
-                          const IOResult& result);
-
   // Called when asynchronous Open() or Seek()
   // is completed. |result| contains the result or a network error code.
-  void OnAsyncCompleted(const Int64CompletionCallback& callback, int64 result);
+  void OnAsyncCompleted(const Int64CompletionCallback& callback,
+                        const IOResult& result);
 
   ////////////////////////////////////////////////////////////////////////////
   // Helper stuff which is platform-dependent but is used in the platform-
@@ -220,14 +193,12 @@
   base::File file_;
   bool async_in_progress_;
   bool orphaned_;
-  BoundNetLog bound_net_log_;
   scoped_refptr<base::TaskRunner> task_runner_;
 
 #if defined(OS_WIN)
   base::MessageLoopForIO::IOContext io_context_;
   CompletionCallback callback_;
   scoped_refptr<IOBuffer> in_flight_buf_;
-  FileErrorSource error_source_;
 #endif
 
   DISALLOW_COPY_AND_ASSIGN(Context);
diff --git a/net/base/file_stream_context_posix.cc b/net/base/file_stream_context_posix.cc
index f72b374..ecf9285 100644
--- a/net/base/file_stream_context_posix.cc
+++ b/net/base/file_stream_context_posix.cc
@@ -44,21 +44,17 @@
                FROM_CURRENT == SEEK_CUR &&
                FROM_END     == SEEK_END, whence_matches_system);
 
-FileStream::Context::Context(const BoundNetLog& bound_net_log,
-                             const scoped_refptr<base::TaskRunner>& task_runner)
+FileStream::Context::Context(const scoped_refptr<base::TaskRunner>& task_runner)
     : async_in_progress_(false),
       orphaned_(false),
-      bound_net_log_(bound_net_log),
       task_runner_(task_runner) {
 }
 
 FileStream::Context::Context(base::File file,
-                             const BoundNetLog& bound_net_log,
                              const scoped_refptr<base::TaskRunner>& task_runner)
     : file_(file.Pass()),
       async_in_progress_(false),
       orphaned_(false),
-      bound_net_log_(bound_net_log),
       task_runner_(task_runner) {
 }
 
@@ -75,10 +71,9 @@
       task_runner_.get(),
       FROM_HERE,
       base::Bind(&Context::ReadFileImpl, base::Unretained(this), buf, buf_len),
-      base::Bind(&Context::ProcessAsyncResult,
+      base::Bind(&Context::OnAsyncCompleted,
                  base::Unretained(this),
-                 IntToInt64(callback),
-                 FILE_ERROR_SOURCE_READ));
+                 IntToInt64(callback)));
   DCHECK(posted);
 
   async_in_progress_ = true;
@@ -95,10 +90,9 @@
       task_runner_.get(),
       FROM_HERE,
       base::Bind(&Context::WriteFileImpl, base::Unretained(this), buf, buf_len),
-      base::Bind(&Context::ProcessAsyncResult,
+      base::Bind(&Context::OnAsyncCompleted,
                  base::Unretained(this),
-                 IntToInt64(callback),
-                 FILE_ERROR_SOURCE_WRITE));
+                 IntToInt64(callback)));
   DCHECK(posted);
 
   async_in_progress_ = true;
diff --git a/net/base/file_stream_context_win.cc b/net/base/file_stream_context_win.cc
index fe97263..2477535 100644
--- a/net/base/file_stream_context_win.cc
+++ b/net/base/file_stream_context_win.cc
@@ -37,27 +37,21 @@
 
 }  // namespace
 
-FileStream::Context::Context(const BoundNetLog& bound_net_log,
-                             const scoped_refptr<base::TaskRunner>& task_runner)
+FileStream::Context::Context(const scoped_refptr<base::TaskRunner>& task_runner)
     : io_context_(),
       async_in_progress_(false),
       orphaned_(false),
-      bound_net_log_(bound_net_log),
-      error_source_(FILE_ERROR_SOURCE_COUNT),
       task_runner_(task_runner) {
   io_context_.handler = this;
   memset(&io_context_.overlapped, 0, sizeof(io_context_.overlapped));
 }
 
 FileStream::Context::Context(base::File file,
-                             const BoundNetLog& bound_net_log,
                              const scoped_refptr<base::TaskRunner>& task_runner)
     : io_context_(),
       file_(file.Pass()),
       async_in_progress_(false),
       orphaned_(false),
-      bound_net_log_(bound_net_log),
-      error_source_(FILE_ERROR_SOURCE_COUNT),
       task_runner_(task_runner) {
   io_context_.handler = this;
   memset(&io_context_.overlapped, 0, sizeof(io_context_.overlapped));
@@ -74,7 +68,6 @@
                                    int buf_len,
                                    const CompletionCallback& callback) {
   DCHECK(!async_in_progress_);
-  error_source_ = FILE_ERROR_SOURCE_READ;
 
   DWORD bytes_read;
   if (!ReadFile(file_.GetPlatformFile(), buf->data(), buf_len,
@@ -86,7 +79,6 @@
       return 0;  // Report EOF by returning 0 bytes read.
     } else {
       LOG(WARNING) << "ReadFile failed: " << error.os_error;
-      RecordError(error, FILE_ERROR_SOURCE_READ);
     }
     return error.result;
   }
@@ -98,8 +90,6 @@
 int FileStream::Context::WriteAsync(IOBuffer* buf,
                                     int buf_len,
                                     const CompletionCallback& callback) {
-  error_source_ = FILE_ERROR_SOURCE_WRITE;
-
   DWORD bytes_written = 0;
   if (!WriteFile(file_.GetPlatformFile(), buf->data(), buf_len,
                  &bytes_written, &io_context_.overlapped)) {
@@ -108,7 +98,6 @@
       IOCompletionIsPending(callback, buf);
     } else {
       LOG(WARNING) << "WriteFile failed: " << error.os_error;
-      RecordError(error, FILE_ERROR_SOURCE_WRITE);
     }
     return error.result;
   }
@@ -172,7 +161,6 @@
     result = 0;
   } else if (error) {
     IOResult error_result = IOResult::FromOSError(error);
-    RecordError(error_result, error_source_);
     result = error_result.result;
   } else {
     result = bytes_read;
diff --git a/net/base/file_stream_unittest.cc b/net/base/file_stream_unittest.cc
index 5a8c279..75379e8 100644
--- a/net/base/file_stream_unittest.cc
+++ b/net/base/file_stream_unittest.cc
@@ -68,7 +68,7 @@
 
 TEST_F(FileStreamTest, AsyncOpenExplicitClose) {
   TestCompletionCallback callback;
-  FileStream stream(NULL);
+  FileStream stream;
   int flags = base::File::FLAG_OPEN |
               base::File::FLAG_READ |
               base::File::FLAG_ASYNC;
@@ -86,7 +86,7 @@
 TEST_F(FileStreamTest, AsyncOpenExplicitCloseOrphaned) {
   TestCompletionCallback callback;
   scoped_ptr<FileStream> stream(new FileStream(
-      NULL, base::MessageLoopProxy::current()));
+      base::MessageLoopProxy::current()));
   int flags = base::File::FLAG_OPEN | base::File::FLAG_READ |
               base::File::FLAG_ASYNC;
   int rv = stream->Open(temp_file_path(), flags, callback.callback());
@@ -116,7 +116,7 @@
 
   // Seek to the beginning of the file and read.
   scoped_ptr<FileStream> read_stream(
-      new FileStream(file.Pass(), NULL, base::MessageLoopProxy::current()));
+      new FileStream(file.Pass(), base::MessageLoopProxy::current()));
   ASSERT_EQ(ERR_IO_PENDING,
             read_stream->Seek(FROM_BEGIN, 0, callback64.callback()));
   ASSERT_EQ(0, callback64.WaitForResult());
@@ -135,7 +135,7 @@
   file.Initialize(temp_file_path(), flags);
 
   scoped_ptr<FileStream> write_stream(
-      new FileStream(file.Pass(), NULL, base::MessageLoopProxy::current()));
+      new FileStream(file.Pass(), base::MessageLoopProxy::current()));
   ASSERT_EQ(ERR_IO_PENDING,
             write_stream->Seek(FROM_BEGIN, 0, callback64.callback()));
   ASSERT_EQ(0, callback64.WaitForResult());
@@ -157,7 +157,7 @@
   TestCompletionCallback callback;
   TestInt64CompletionCallback callback64;
 
-  FileStream stream(NULL, base::MessageLoopProxy::current());
+  FileStream stream(base::MessageLoopProxy::current());
 
   EXPECT_FALSE(stream.IsOpen());
 
@@ -175,7 +175,7 @@
   int64 file_size;
   EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
 
-  FileStream stream(NULL, base::MessageLoopProxy::current());
+  FileStream stream(base::MessageLoopProxy::current());
   int flags = base::File::FLAG_OPEN | base::File::FLAG_READ |
               base::File::FLAG_ASYNC;
   TestCompletionCallback callback;
@@ -206,7 +206,7 @@
   EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
 
   scoped_ptr<FileStream> stream(
-      new FileStream(NULL, base::MessageLoopProxy::current()));
+      new FileStream(base::MessageLoopProxy::current()));
   int flags = base::File::FLAG_OPEN | base::File::FLAG_READ |
               base::File::FLAG_ASYNC;
   TestCompletionCallback callback;
@@ -231,7 +231,7 @@
   int64 file_size;
   EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
 
-  FileStream stream(NULL, base::MessageLoopProxy::current());
+  FileStream stream(base::MessageLoopProxy::current());
   int flags = base::File::FLAG_OPEN | base::File::FLAG_READ |
               base::File::FLAG_ASYNC;
   TestCompletionCallback callback;
@@ -265,7 +265,7 @@
 }
 
 TEST_F(FileStreamTest, AsyncSeekAround) {
-  FileStream stream(NULL, base::MessageLoopProxy::current());
+  FileStream stream(base::MessageLoopProxy::current());
   int flags = base::File::FLAG_OPEN | base::File::FLAG_ASYNC |
               base::File::FLAG_READ;
   TestCompletionCallback callback;
@@ -300,7 +300,7 @@
 }
 
 TEST_F(FileStreamTest, AsyncWrite) {
-  FileStream stream(NULL, base::MessageLoopProxy::current());
+  FileStream stream(base::MessageLoopProxy::current());
   int flags = base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE |
               base::File::FLAG_ASYNC;
   TestCompletionCallback callback;
@@ -334,7 +334,7 @@
 
 TEST_F(FileStreamTest, AsyncWrite_EarlyDelete) {
   scoped_ptr<FileStream> stream(
-      new FileStream(NULL, base::MessageLoopProxy::current()));
+      new FileStream(base::MessageLoopProxy::current()));
   int flags = base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE |
               base::File::FLAG_ASYNC;
   TestCompletionCallback callback;
@@ -364,7 +364,7 @@
   int64 file_size;
   EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
 
-  FileStream stream(NULL, base::MessageLoopProxy::current());
+  FileStream stream(base::MessageLoopProxy::current());
   int flags = base::File::FLAG_OPEN | base::File::FLAG_WRITE |
               base::File::FLAG_ASYNC;
   TestCompletionCallback callback;
@@ -404,7 +404,7 @@
   EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
 
   scoped_ptr<FileStream> stream(
-      new FileStream(NULL, base::MessageLoopProxy::current()));
+      new FileStream(base::MessageLoopProxy::current()));
   int flags = base::File::FLAG_OPEN | base::File::FLAG_READ |
               base::File::FLAG_WRITE | base::File::FLAG_ASYNC;
   TestCompletionCallback callback;
@@ -457,7 +457,7 @@
   EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
 
   scoped_ptr<FileStream> stream(
-      new FileStream(NULL, base::MessageLoopProxy::current()));
+      new FileStream(base::MessageLoopProxy::current()));
   int flags = base::File::FLAG_OPEN | base::File::FLAG_READ |
               base::File::FLAG_WRITE | base::File::FLAG_ASYNC;
   TestCompletionCallback callback;
@@ -624,7 +624,7 @@
   EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
 
   scoped_ptr<FileStream> stream(
-      new FileStream(NULL, base::MessageLoopProxy::current()));
+      new FileStream(base::MessageLoopProxy::current()));
   int flags = base::File::FLAG_OPEN | base::File::FLAG_READ |
               base::File::FLAG_WRITE | base::File::FLAG_ASYNC;
   TestCompletionCallback open_callback;
@@ -728,7 +728,7 @@
   EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
 
   scoped_ptr<FileStream> stream(
-      new FileStream(NULL, base::MessageLoopProxy::current()));
+      new FileStream(base::MessageLoopProxy::current()));
   int flags = base::File::FLAG_OPEN | base::File::FLAG_READ |
               base::File::FLAG_WRITE | base::File::FLAG_ASYNC;
   TestCompletionCallback open_callback;
@@ -758,7 +758,7 @@
 
 TEST_F(FileStreamTest, AsyncOpenAndDelete) {
   scoped_ptr<FileStream> stream(
-      new FileStream(NULL, base::MessageLoopProxy::current()));
+      new FileStream(base::MessageLoopProxy::current()));
   int flags = base::File::FLAG_OPEN | base::File::FLAG_WRITE |
               base::File::FLAG_ASYNC;
   TestCompletionCallback open_callback;
@@ -783,7 +783,7 @@
   ASSERT_TRUE(file.IsValid());
 
   scoped_ptr<FileStream> stream(
-  new FileStream(file.Pass(), NULL, base::MessageLoopProxy::current()));
+  new FileStream(file.Pass(), base::MessageLoopProxy::current()));
 
   scoped_refptr<IOBuffer> buf = new IOBuffer(1);
   buf->data()[0] = 0;
@@ -808,7 +808,7 @@
   ASSERT_TRUE(file.IsValid());
 
   scoped_ptr<FileStream> stream(
-  new FileStream(file.Pass(), NULL, base::MessageLoopProxy::current()));
+  new FileStream(file.Pass(), base::MessageLoopProxy::current()));
 
   scoped_refptr<IOBuffer> buf = new IOBuffer(1);
   TestCompletionCallback callback;
@@ -840,7 +840,7 @@
   EXPECT_TRUE(base::GetFileSize(path, &file_size));
   EXPECT_LT(0, file_size);
 
-  FileStream stream(NULL, base::MessageLoopProxy::current());
+  FileStream stream(base::MessageLoopProxy::current());
   int flags = base::File::FLAG_OPEN | base::File::FLAG_READ |
               base::File::FLAG_ASYNC;
   TestCompletionCallback callback;
diff --git a/net/base/host_port_pair.cc b/net/base/host_port_pair.cc
index a862098..6675692 100644
--- a/net/base/host_port_pair.cc
+++ b/net/base/host_port_pair.cc
@@ -49,8 +49,14 @@
 
 std::string HostPortPair::HostForURL() const {
   // TODO(rtenneti): Add support for |host| to have '\0'.
-  LOG_IF(DFATAL, host_.find('\0') != std::string::npos)
-      << "Host has a null char: " << host_;
+  if (host_.find('\0') != std::string::npos) {
+    std::string host_for_log(host_);
+    size_t nullpos;
+    while ((nullpos = host_for_log.find('\0')) != std::string::npos) {
+      host_for_log.replace(nullpos, 1, "%00");
+    }
+    LOG(DFATAL) << "Host has a null char: " << host_for_log;
+  }
   // Check to see if the host is an IPv6 address.  If so, added brackets.
   if (host_.find(':') != std::string::npos) {
     DCHECK_NE(host_[0], '[');
diff --git a/net/base/host_port_pair_unittest.cc b/net/base/host_port_pair_unittest.cc
index fa73875..5b15db9 100644
--- a/net/base/host_port_pair_unittest.cc
+++ b/net/base/host_port_pair_unittest.cc
@@ -70,10 +70,9 @@
   }
 
   // Test hostname with null character.
-  string bar_hostname("a\0.com", 6);
+  string bar_hostname("a\0.\0com", 7);
   HostPortPair bar(bar_hostname, 80);
-  string expected_error("Host has a null char: ");
-  expected_error.append(bar_hostname);
+  string expected_error("Host has a null char: a%00.%00com");
   EXPECT_DFATAL(bar.HostForURL(), expected_error);
 }
 
diff --git a/net/base/ip_endpoint.h b/net/base/ip_endpoint.h
index 1fc7e04..5e5d9c1 100644
--- a/net/base/ip_endpoint.h
+++ b/net/base/ip_endpoint.h
@@ -23,7 +23,7 @@
 class NET_EXPORT IPEndPoint {
  public:
   IPEndPoint();
-  virtual ~IPEndPoint();
+  ~IPEndPoint();
   IPEndPoint(const IPAddressNumber& address, int port);
   IPEndPoint(const IPEndPoint& endpoint);
 
diff --git a/net/base/mime_util.cc b/net/base/mime_util.cc
index 4679dcc..fdb16fd 100644
--- a/net/base/mime_util.cc
+++ b/net/base/mime_util.cc
@@ -438,7 +438,10 @@
   { "audio/x-wav", "1" },
   { "video/ogg", "opus,theora,vorbis" },
   { "audio/ogg", "opus,vorbis" },
-  { "application/ogg", "opus,theora,vorbis" }
+  { "application/ogg", "opus,theora,vorbis" },
+  { "audio/mpeg", "" },
+  { "audio/mp3", "" },
+  { "audio/x-mp3", "" }
 };
 
 MimeUtil::MimeUtil() {
@@ -448,6 +451,9 @@
 // static
 bool MimeUtil::AreSupportedCodecs(const MimeMappings& supported_codecs,
                                   const std::vector<std::string>& codecs) {
+  if (supported_codecs.empty())
+    return codecs.empty();
+
   for (size_t i = 0; i < codecs.size(); ++i) {
     if (supported_codecs.find(codecs[i]) == supported_codecs.end())
       return false;
diff --git a/net/base/mime_util_unittest.cc b/net/base/mime_util_unittest.cc
index 2720581..c0d7e80 100644
--- a/net/base/mime_util_unittest.cc
+++ b/net/base/mime_util_unittest.cc
@@ -105,16 +105,15 @@
   EXPECT_TRUE(IsStrictMediaMimeType("audio/ogg"));
   EXPECT_TRUE(IsStrictMediaMimeType("application/ogg"));
 
-  // TODO(amogh.bihani): These formats should be in stict-format_map_. This will
-  // be fixed with bug 53193 (http://crbug.com/53193)---------------------------
-  EXPECT_FALSE(IsStrictMediaMimeType("audio/mpeg"));
-  EXPECT_FALSE(IsStrictMediaMimeType("audio/mp3"));
-  EXPECT_FALSE(IsStrictMediaMimeType("audio/x-mp3"));
+  EXPECT_TRUE(IsStrictMediaMimeType("audio/mpeg"));
+  EXPECT_TRUE(IsStrictMediaMimeType("audio/mp3"));
+  EXPECT_TRUE(IsStrictMediaMimeType("audio/x-mp3"));
 
+  // TODO(amogh.bihani): These will be fixed http://crbug.com/53193
   EXPECT_FALSE(IsStrictMediaMimeType("video/mp4"));
-  EXPECT_FALSE(IsStrictMediaMimeType("video/x-mp4v"));
+  EXPECT_FALSE(IsStrictMediaMimeType("video/x-m4v"));
   EXPECT_FALSE(IsStrictMediaMimeType("audio/mp4"));
-  EXPECT_FALSE(IsStrictMediaMimeType("audio/x-mp4a"));
+  EXPECT_FALSE(IsStrictMediaMimeType("audio/x-m4a"));
 
   EXPECT_FALSE(IsStrictMediaMimeType("application/x-mpegurl"));
   EXPECT_FALSE(IsStrictMediaMimeType("application/vnd.apple.mpegurl"));
diff --git a/net/base/mock_file_stream.cc b/net/base/mock_file_stream.cc
index 3d95994..3338fc5 100644
--- a/net/base/mock_file_stream.cc
+++ b/net/base/mock_file_stream.cc
@@ -11,16 +11,16 @@
 
 namespace testing {
 
-MockFileStream::MockFileStream(net::NetLog* net_log)
-    : net::FileStream(net_log),
+MockFileStream::MockFileStream()
+    : net::FileStream(),
       forced_error_(net::OK),
       async_error_(false),
       throttled_(false),
       weak_factory_(this) {
 }
 
-MockFileStream::MockFileStream(base::File file, net::NetLog* net_log)
-    : net::FileStream(file.Pass(), net_log),
+MockFileStream::MockFileStream(base::File file)
+    : net::FileStream(file.Pass()),
       forced_error_(net::OK),
       async_error_(false),
       throttled_(false),
@@ -29,9 +29,8 @@
 
 MockFileStream::MockFileStream(
     base::File file,
-    net::NetLog* net_log,
     const scoped_refptr<base::TaskRunner>& task_runner)
-    : net::FileStream(file.Pass(), net_log, task_runner),
+    : net::FileStream(file.Pass(), task_runner),
       forced_error_(net::OK),
       async_error_(false),
       throttled_(false),
diff --git a/net/base/mock_file_stream.h b/net/base/mock_file_stream.h
index aa44d2f..77af3fa 100644
--- a/net/base/mock_file_stream.h
+++ b/net/base/mock_file_stream.h
@@ -22,9 +22,9 @@
 
 class MockFileStream : public net::FileStream {
  public:
-  explicit MockFileStream(net::NetLog* net_log);
-  MockFileStream(base::File file, net::NetLog* net_log);
-  MockFileStream(base::File file, net::NetLog* net_log,
+  MockFileStream();
+  explicit MockFileStream(base::File file);
+  MockFileStream(base::File file,
                  const scoped_refptr<base::TaskRunner>& task_runner);
   virtual ~MockFileStream();
 
diff --git a/net/base/net_error_list.h b/net/base/net_error_list.h
index 29b2ab5..540790c 100644
--- a/net/base/net_error_list.h
+++ b/net/base/net_error_list.h
@@ -94,6 +94,11 @@
 // The socket is already connected.
 NET_ERROR(SOCKET_IS_CONNECTED, -23)
 
+// The request was blocked because the forced reenrollment check is still
+// pending. This error can only occur on ChromeOS.
+// The error can be emitted by code in c/b/policy/policy_helpers.cc.
+NET_ERROR(BLOCKED_ENROLLMENT_CHECK_PENDING, -24)
+
 // A connection was closed (corresponding to a TCP FIN).
 NET_ERROR(CONNECTION_CLOSED, -100)
 
diff --git a/net/base/net_log_event_type_list.h b/net/base/net_log_event_type_list.h
index 460728f..e4f4422 100644
--- a/net/base/net_log_event_type_list.h
+++ b/net/base/net_log_event_type_list.h
@@ -1000,6 +1000,7 @@
 //   {
 //     "headers": <The list of header:value pairs>,
 //     "quic_priority": <Integer representing the priority of this request>,
+//     "quic_stream_id": <Id of the QUIC stream sending this request>,
 //   }
 EVENT_TYPE(HTTP_TRANSACTION_QUIC_SEND_REQUEST_HEADERS)
 
diff --git a/net/base/net_util.cc b/net/base/net_util.cc
index d0355df..3694ea8 100644
--- a/net/base/net_util.cc
+++ b/net/base/net_util.cc
@@ -21,6 +21,7 @@
 #include <fcntl.h>
 #include <netdb.h>
 #include <netinet/in.h>
+#include <unistd.h>
 #if !defined(OS_NACL)
 #include <net/if.h>
 #if !defined(OS_ANDROID)
@@ -626,8 +627,8 @@
                         base::string16* password) {
   UnescapeRule::Type flags =
       UnescapeRule::SPACES | UnescapeRule::URL_SPECIAL_CHARS;
-  *username = UnescapeAndDecodeUTF8URLComponent(url.username(), flags, NULL);
-  *password = UnescapeAndDecodeUTF8URLComponent(url.password(), flags, NULL);
+  *username = UnescapeAndDecodeUTF8URLComponent(url.username(), flags);
+  *password = UnescapeAndDecodeUTF8URLComponent(url.password(), flags);
 }
 
 std::string GetHostOrSpecFromURL(const GURL& url) {
diff --git a/net/base/net_util.h b/net/base/net_util.h
index d822f69..ad0c67a 100644
--- a/net/base/net_util.h
+++ b/net/base/net_util.h
@@ -20,10 +20,10 @@
 
 #include "base/basictypes.h"
 #include "base/strings/string16.h"
+#include "base/strings/utf_offset_string_conversions.h"
 #include "net/base/address_family.h"
 #include "net/base/escape.h"
 #include "net/base/net_export.h"
-#include "net/base/net_log.h"
 
 class GURL;
 
@@ -31,11 +31,8 @@
 class Time;
 }
 
-namespace url_canon {
+namespace url {
 struct CanonHostInfo;
-}
-
-namespace url_parse {
 struct Parsed;
 }
 
@@ -195,7 +192,7 @@
 // Canonicalizes |host| and returns it.  Also fills |host_info| with
 // IP address information.  |host_info| must not be NULL.
 NET_EXPORT std::string CanonicalizeHost(const std::string& host,
-                                        url_canon::CanonHostInfo* host_info);
+                                        url::CanonHostInfo* host_info);
 
 // Returns true if |host| is not an IP address and is compliant with a set of
 // rules based on RFC 1738 and tweaked to be compatible with the real world.
@@ -300,7 +297,7 @@
                                     const std::string& languages,
                                     FormatUrlTypes format_types,
                                     UnescapeRule::Type unescape_rules,
-                                    url_parse::Parsed* new_parsed,
+                                    url::Parsed* new_parsed,
                                     size_t* prefix_end,
                                     size_t* offset_for_adjustment);
 NET_EXPORT base::string16 FormatUrlWithOffsets(
@@ -308,9 +305,21 @@
     const std::string& languages,
     FormatUrlTypes format_types,
     UnescapeRule::Type unescape_rules,
-    url_parse::Parsed* new_parsed,
+    url::Parsed* new_parsed,
     size_t* prefix_end,
     std::vector<size_t>* offsets_for_adjustment);
+// This function is like those above except it takes |adjustments| rather
+// than |offset[s]_for_adjustment|.  |adjustments| will be set to reflect all
+// the transformations that happened to |url| to convert it into the returned
+// value.
+NET_EXPORT base::string16 FormatUrlWithAdjustments(
+    const GURL& url,
+    const std::string& languages,
+    FormatUrlTypes format_types,
+    UnescapeRule::Type unescape_rules,
+    url::Parsed* new_parsed,
+    size_t* prefix_end,
+    base::OffsetAdjuster::Adjustments* adjustments);
 
 // This is a convenience function for FormatUrl() with
 // format_types = kFormatUrlOmitAll and unescape = SPACES.  This is the typical
diff --git a/net/base/net_util_icu.cc b/net/base/net_util_icu.cc
index 2a4f6ff..8514e6c 100644
--- a/net/base/net_util_icu.cc
+++ b/net/base/net_util_icu.cc
@@ -355,15 +355,6 @@
   return false;
 }
 
-// Clamps the offsets in |offsets_for_adjustment| to the length of |str|.
-void LimitOffsets(const base::string16& str, Offsets* offsets_for_adjustment) {
-  if (offsets_for_adjustment) {
-    std::for_each(offsets_for_adjustment->begin(),
-                  offsets_for_adjustment->end(),
-                  base::LimitOffset<base::string16>(str.length()));
-  }
-}
-
 // TODO(brettw) bug 734373: check the scripts for each host component and
 // don't un-IDN-ize if there is more than one. Alternatively, only IDN for
 // scripts that the user has installed. For now, just put the entire
@@ -371,9 +362,12 @@
 //
 // We may want to skip this step in the case of file URLs to allow unicode
 // UNC hostnames regardless of encodings.
-base::string16 IDNToUnicodeWithOffsets(const std::string& host,
-                                       const std::string& languages,
-                                       Offsets* offsets_for_adjustment) {
+base::string16 IDNToUnicodeWithAdjustments(
+    const std::string& host,
+    const std::string& languages,
+    base::OffsetAdjuster::Adjustments* adjustments) {
+  if (adjustments)
+    adjustments->clear();
   // Convert the ASCII input to a base::string16 for ICU.
   base::string16 input16;
   input16.reserve(host.length());
@@ -383,7 +377,6 @@
   // on a per-component basis.
   base::string16 out16;
   {
-    base::OffsetAdjuster offset_adjuster(offsets_for_adjustment);
     for (size_t component_start = 0, component_end;
          component_start < input16.length();
          component_start = component_end + 1) {
@@ -402,9 +395,9 @@
       }
       size_t new_component_length = out16.length() - new_component_start;
 
-      if (converted_idn && offsets_for_adjustment) {
-        offset_adjuster.Add(base::OffsetAdjuster::Adjustment(component_start,
-            component_length, new_component_length));
+      if (converted_idn && adjustments) {
+        adjustments->push_back(base::OffsetAdjuster::Adjustment(
+            component_start, component_length, new_component_length));
       }
 
       // Need to add the dot we just found (if we found one).
@@ -412,57 +405,9 @@
         out16.push_back('.');
     }
   }
-
-  LimitOffsets(out16, offsets_for_adjustment);
   return out16;
 }
 
-// Called after transforming a component to set all affected elements in
-// |offsets_for_adjustment| to the correct new values.  |original_offsets|
-// represents the offsets before the transform; |original_component_begin| and
-// |original_component_end| represent the pre-transform boundaries of the
-// affected component.  |transformed_offsets| should be a vector created by
-// adjusting |original_offsets| to be relative to the beginning of the component
-// in question (via an OffsetAdjuster) and then transformed along with the
-// component.  Note that any elements in this vector which didn't originally
-// point into the component may contain arbitrary values and should be ignored.
-// |transformed_component_begin| and |transformed_component_end| are the
-// endpoints of the transformed component and are used in combination with the
-// two offset vectors to calculate the resulting absolute offsets, which are
-// stored in |offsets_for_adjustment|.
-void AdjustForComponentTransform(const Offsets& original_offsets,
-                                 size_t original_component_begin,
-                                 size_t original_component_end,
-                                 const Offsets& transformed_offsets,
-                                 size_t transformed_component_begin,
-                                 size_t transformed_component_end,
-                                 Offsets* offsets_for_adjustment) {
-  if (!offsets_for_adjustment)
-    return;  // Nothing to do.
-
-  for (size_t i = 0; i < original_offsets.size(); ++i) {
-    size_t original_offset = original_offsets[i];
-    if ((original_offset >= original_component_begin) &&
-        (original_offset < original_component_end)) {
-      // This offset originally pointed into the transformed component.
-      // Adjust the transformed relative offset by the new beginning point of
-      // the transformed component.
-      size_t transformed_offset = transformed_offsets[i];
-      (*offsets_for_adjustment)[i] =
-          (transformed_offset == base::string16::npos) ?
-              base::string16::npos :
-              (transformed_offset + transformed_component_begin);
-    } else if ((original_offset >= original_component_end) &&
-               (original_offset != std::string::npos)) {
-      // This offset pointed after the transformed component.  Adjust the
-      // original absolute offset by the difference between the new and old
-      // component lengths.
-      (*offsets_for_adjustment)[i] =
-          original_offset - original_component_end + transformed_component_end;
-    }
-  }
-}
-
 // If |component| is valid, its begin is incremented by |delta|.
 void AdjustComponent(int delta, url_parse::Component* component) {
   if (!component->is_valid())
@@ -484,34 +429,30 @@
 }
 
 // Helper for FormatUrlWithOffsets().
-base::string16 FormatViewSourceUrl(const GURL& url,
-                                   const Offsets& original_offsets,
-                                   const std::string& languages,
-                                   FormatUrlTypes format_types,
-                                   UnescapeRule::Type unescape_rules,
-                                   url_parse::Parsed* new_parsed,
-                                   size_t* prefix_end,
-                                   Offsets* offsets_for_adjustment) {
+base::string16 FormatViewSourceUrl(
+    const GURL& url,
+    const std::string& languages,
+    FormatUrlTypes format_types,
+    UnescapeRule::Type unescape_rules,
+    url_parse::Parsed* new_parsed,
+    size_t* prefix_end,
+    base::OffsetAdjuster::Adjustments* adjustments) {
   DCHECK(new_parsed);
   const char kViewSource[] = "view-source:";
   const size_t kViewSourceLength = arraysize(kViewSource) - 1;
 
-  // Format the underlying URL and adjust offsets.
+  // Format the underlying URL and record adjustments.
   const std::string& url_str(url.possibly_invalid_spec());
-  Offsets offsets_into_underlying_url(original_offsets);
-  {
-    base::OffsetAdjuster adjuster(&offsets_into_underlying_url);
-    adjuster.Add(base::OffsetAdjuster::Adjustment(0, kViewSourceLength, 0));
-  }
+  adjustments->clear();
   base::string16 result(base::ASCIIToUTF16(kViewSource) +
-      FormatUrlWithOffsets(GURL(url_str.substr(kViewSourceLength)), languages,
-                           format_types, unescape_rules, new_parsed, prefix_end,
-                           &offsets_into_underlying_url));
-  AdjustForComponentTransform(original_offsets, kViewSourceLength,
-                              url_str.length(), offsets_into_underlying_url,
-                              kViewSourceLength, result.length(),
-                              offsets_for_adjustment);
-  LimitOffsets(result, offsets_for_adjustment);
+      FormatUrlWithAdjustments(GURL(url_str.substr(kViewSourceLength)),
+                               languages, format_types, unescape_rules,
+                               new_parsed, prefix_end, adjustments));
+  // Revise |adjustments| by shifting to the offsets to prefix that the above
+  // call to FormatUrl didn't get to see.
+  for (base::OffsetAdjuster::Adjustments::iterator it = adjustments->begin();
+       it != adjustments->end(); ++it)
+    it->original_offset += kViewSourceLength;
 
   // Adjust positions of the parsed components.
   if (new_parsed->scheme.is_nonempty()) {
@@ -534,8 +475,9 @@
   AppendComponentTransform() {}
   virtual ~AppendComponentTransform() {}
 
-  virtual base::string16 Execute(const std::string& component_text,
-                                 Offsets* offsets_into_component) const = 0;
+  virtual base::string16 Execute(
+      const std::string& component_text,
+      base::OffsetAdjuster::Adjustments* adjustments) const = 0;
 
   // NOTE: No DISALLOW_COPY_AND_ASSIGN here, since gcc < 4.3.0 requires an
   // accessible copy constructor in order to call AppendFormattedComponent()
@@ -551,9 +493,9 @@
  private:
   virtual base::string16 Execute(
       const std::string& component_text,
-      Offsets* offsets_into_component) const OVERRIDE {
-    return IDNToUnicodeWithOffsets(component_text, languages_,
-                                   offsets_into_component);
+      base::OffsetAdjuster::Adjustments* adjustments) const OVERRIDE {
+    return IDNToUnicodeWithAdjustments(component_text, languages_,
+                                       adjustments);
   }
 
   const std::string& languages_;
@@ -568,12 +510,11 @@
  private:
   virtual base::string16 Execute(
       const std::string& component_text,
-      Offsets* offsets_into_component) const OVERRIDE {
+      base::OffsetAdjuster::Adjustments* adjustments) const OVERRIDE {
     return (unescape_rules_ == UnescapeRule::NONE) ?
-        base::UTF8ToUTF16AndAdjustOffsets(component_text,
-                                          offsets_into_component) :
-        UnescapeAndDecodeUTF8URLComponentWithOffsets(component_text,
-            unescape_rules_, offsets_into_component);
+        base::UTF8ToUTF16WithAdjustments(component_text, adjustments) :
+        UnescapeAndDecodeUTF8URLComponentWithAdjustments(component_text,
+            unescape_rules_, adjustments);
   }
 
   const UnescapeRule::Type unescape_rules_;
@@ -582,16 +523,15 @@
 // Transforms the portion of |spec| covered by |original_component| according to
 // |transform|.  Appends the result to |output|.  If |output_component| is
 // non-NULL, its start and length are set to the transformed component's new
-// start and length.  For each element in |original_offsets| which is at least
-// as large as original_component.begin, the corresponding element of
-// |offsets_for_adjustment| is transformed appropriately.
+// start and length.  If |adjustments| is non-NULL, appends adjustments (if
+// any) that reflect the transformation the original component underwent to
+// become the transformed value appended to |output|.
 void AppendFormattedComponent(const std::string& spec,
                               const url_parse::Component& original_component,
-                              const Offsets& original_offsets,
                               const AppendComponentTransform& transform,
                               base::string16* output,
                               url_parse::Component* output_component,
-                              Offsets* offsets_for_adjustment) {
+                              base::OffsetAdjuster::Adjustments* adjustments) {
   DCHECK(output);
   if (original_component.is_nonempty()) {
     size_t original_component_begin =
@@ -600,18 +540,22 @@
     std::string component_str(spec, original_component_begin,
                               static_cast<size_t>(original_component.len));
 
-    // Transform |component_str| and adjust the offsets accordingly.
-    Offsets offsets_into_component(original_offsets);
-    {
-      base::OffsetAdjuster adjuster(&offsets_into_component);
-      adjuster.Add(base::OffsetAdjuster::Adjustment(0, original_component_begin,
-                                                    0));
+    // Transform |component_str| and modify |adjustments| appropriately.
+    base::OffsetAdjuster::Adjustments component_transform_adjustments;
+    output->append(
+        transform.Execute(component_str, &component_transform_adjustments));
+
+    // Shift all the adjustments made for this component so the offsets are
+    // valid for the original string and add them to |adjustments|.
+    for (base::OffsetAdjuster::Adjustments::iterator comp_iter =
+         component_transform_adjustments.begin();
+         comp_iter != component_transform_adjustments.end(); ++comp_iter)
+      comp_iter->original_offset += original_component_begin;
+    if (adjustments) {
+      adjustments->insert(adjustments->end(),
+                          component_transform_adjustments.begin(),
+                          component_transform_adjustments.end());
     }
-    output->append(transform.Execute(component_str, &offsets_into_component));
-    AdjustForComponentTransform(original_offsets, original_component_begin,
-                                static_cast<size_t>(original_component.end()),
-                                offsets_into_component, output_component_begin,
-                                output->length(), offsets_for_adjustment);
 
     // Set positions of the parsed component.
     if (output_component) {
@@ -635,7 +579,7 @@
 
 base::string16 IDNToUnicode(const std::string& host,
                             const std::string& languages) {
-  return IDNToUnicodeWithOffsets(host, languages, NULL);
+  return IDNToUnicodeWithAdjustments(host, languages, NULL);
 }
 
 std::string GetDirectoryListingEntry(const base::string16& name,
@@ -681,9 +625,8 @@
 void AppendFormattedHost(const GURL& url,
                          const std::string& languages,
                          base::string16* output) {
-  Offsets offsets;
   AppendFormattedComponent(url.possibly_invalid_spec(),
-      url.parsed_for_possibly_invalid_spec().host, offsets,
+      url.parsed_for_possibly_invalid_spec().host,
       HostComponentTransform(languages), output, NULL, NULL);
 }
 
@@ -694,15 +637,36 @@
     UnescapeRule::Type unescape_rules,
     url_parse::Parsed* new_parsed,
     size_t* prefix_end,
-    Offsets* offsets_for_adjustment) {
+    std::vector<size_t>* offsets_for_adjustment) {
+  base::OffsetAdjuster::Adjustments adjustments;
+  const base::string16& format_url_return_value =
+      FormatUrlWithAdjustments(url, languages, format_types, unescape_rules,
+                               new_parsed, prefix_end, &adjustments);
+  base::OffsetAdjuster::AdjustOffsets(adjustments, offsets_for_adjustment);
+  if (offsets_for_adjustment) {
+    std::for_each(
+        offsets_for_adjustment->begin(),
+        offsets_for_adjustment->end(),
+        base::LimitOffset<std::string>(format_url_return_value.length()));
+  }
+  return format_url_return_value;
+}
+
+base::string16 FormatUrlWithAdjustments(
+    const GURL& url,
+    const std::string& languages,
+    FormatUrlTypes format_types,
+    UnescapeRule::Type unescape_rules,
+    url_parse::Parsed* new_parsed,
+    size_t* prefix_end,
+    base::OffsetAdjuster::Adjustments* adjustments) {
+  DCHECK(adjustments != NULL);
+  adjustments->clear();
   url_parse::Parsed parsed_temp;
   if (!new_parsed)
     new_parsed = &parsed_temp;
   else
     *new_parsed = url_parse::Parsed();
-  Offsets original_offsets;
-  if (offsets_for_adjustment)
-    original_offsets = *offsets_for_adjustment;
 
   // Special handling for view-source:.  Don't use content::kViewSourceScheme
   // because this library shouldn't depend on chrome.
@@ -711,9 +675,9 @@
   const char* const kViewSourceTwice = "view-source:view-source:";
   if (url.SchemeIs(kViewSource) &&
       !StartsWithASCII(url.possibly_invalid_spec(), kViewSourceTwice, false)) {
-    return FormatViewSourceUrl(url, original_offsets, languages, format_types,
+    return FormatViewSourceUrl(url, languages, format_types,
                                unescape_rules, new_parsed, prefix_end,
-                               offsets_for_adjustment);
+                               adjustments);
   }
 
   // We handle both valid and invalid URLs (this will give us the spec
@@ -723,7 +687,8 @@
 
   // Scheme & separators.  These are ASCII.
   base::string16 url_string;
-  url_string.insert(url_string.end(), spec.begin(),
+  url_string.insert(
+      url_string.end(), spec.begin(),
       spec.begin() + parsed.CountCharactersBefore(url_parse::Parsed::USERNAME,
                                                   true));
   const char kHTTP[] = "http://";
@@ -746,36 +711,35 @@
     // e.g. "http://google.com:search@evil.ru/"
     new_parsed->username.reset();
     new_parsed->password.reset();
-    // Update the offsets based on removed username and/or password.
-    if (offsets_for_adjustment && !offsets_for_adjustment->empty() &&
-        (parsed.username.is_nonempty() || parsed.password.is_nonempty())) {
-      base::OffsetAdjuster offset_adjuster(offsets_for_adjustment);
+    // Update the adjustments based on removed username and/or password.
+    if (parsed.username.is_nonempty() || parsed.password.is_nonempty()) {
       if (parsed.username.is_nonempty() && parsed.password.is_nonempty()) {
-        // The seeming off-by-one and off-by-two in these first two lines are to
-        // account for the ':' after the username and '@' after the password.
-        offset_adjuster.Add(base::OffsetAdjuster::Adjustment(
+        // The seeming off-by-two is to account for the ':' after the username
+        // and '@' after the password.
+        adjustments->push_back(base::OffsetAdjuster::Adjustment(
             static_cast<size_t>(parsed.username.begin),
             static_cast<size_t>(parsed.username.len + parsed.password.len + 2),
             0));
       } else {
         const url_parse::Component* nonempty_component =
             parsed.username.is_nonempty() ? &parsed.username : &parsed.password;
-        // The seeming off-by-one in below is to account for the '@' after the
+        // The seeming off-by-one is to account for the '@' after the
         // username/password.
-        offset_adjuster.Add(base::OffsetAdjuster::Adjustment(
+        adjustments->push_back(base::OffsetAdjuster::Adjustment(
             static_cast<size_t>(nonempty_component->begin),
-            static_cast<size_t>(nonempty_component->len + 1), 0));
+            static_cast<size_t>(nonempty_component->len + 1),
+            0));
       }
     }
   } else {
-    AppendFormattedComponent(spec, parsed.username, original_offsets,
-        NonHostComponentTransform(unescape_rules), &url_string,
-        &new_parsed->username, offsets_for_adjustment);
+    AppendFormattedComponent(spec, parsed.username,
+                             NonHostComponentTransform(unescape_rules),
+                             &url_string, &new_parsed->username, adjustments);
     if (parsed.password.is_valid())
       url_string.push_back(':');
-    AppendFormattedComponent(spec, parsed.password, original_offsets,
-        NonHostComponentTransform(unescape_rules), &url_string,
-        &new_parsed->password, offsets_for_adjustment);
+    AppendFormattedComponent(spec, parsed.password,
+                             NonHostComponentTransform(unescape_rules),
+                             &url_string, &new_parsed->password, adjustments);
     if (parsed.username.is_valid() || parsed.password.is_valid())
       url_string.push_back('@');
   }
@@ -783,9 +747,8 @@
     *prefix_end = static_cast<size_t>(url_string.length());
 
   // Host.
-  AppendFormattedComponent(spec, parsed.host, original_offsets,
-      HostComponentTransform(languages), &url_string, &new_parsed->host,
-      offsets_for_adjustment);
+  AppendFormattedComponent(spec, parsed.host, HostComponentTransform(languages),
+                           &url_string, &new_parsed->host, adjustments);
 
   // Port.
   if (parsed.port.is_nonempty()) {
@@ -802,36 +765,39 @@
   // Path & query.  Both get the same general unescape & convert treatment.
   if (!(format_types & kFormatUrlOmitTrailingSlashOnBareHostname) ||
       !CanStripTrailingSlash(url)) {
-    AppendFormattedComponent(spec, parsed.path, original_offsets,
-        NonHostComponentTransform(unescape_rules), &url_string,
-        &new_parsed->path, offsets_for_adjustment);
+    AppendFormattedComponent(spec, parsed.path,
+                             NonHostComponentTransform(unescape_rules),
+                             &url_string, &new_parsed->path, adjustments);
   } else {
-    base::OffsetAdjuster offset_adjuster(offsets_for_adjustment);
-    offset_adjuster.Add(base::OffsetAdjuster::Adjustment(
-        url_string.length(), parsed.path.len, 0));
+    if (parsed.path.len > 0) {
+      adjustments->push_back(base::OffsetAdjuster::Adjustment(
+          parsed.path.begin, parsed.path.len, 0));
+    }
   }
   if (parsed.query.is_valid())
     url_string.push_back('?');
-  AppendFormattedComponent(spec, parsed.query, original_offsets,
-      NonHostComponentTransform(unescape_rules), &url_string,
-      &new_parsed->query, offsets_for_adjustment);
+  AppendFormattedComponent(spec, parsed.query,
+                           NonHostComponentTransform(unescape_rules),
+                           &url_string, &new_parsed->query, adjustments);
 
   // Ref.  This is valid, unescaped UTF-8, so we can just convert.
   if (parsed.ref.is_valid())
     url_string.push_back('#');
-  AppendFormattedComponent(spec, parsed.ref, original_offsets,
-      NonHostComponentTransform(UnescapeRule::NONE), &url_string,
-      &new_parsed->ref, offsets_for_adjustment);
+  AppendFormattedComponent(spec, parsed.ref,
+                           NonHostComponentTransform(UnescapeRule::NONE),
+                           &url_string, &new_parsed->ref, adjustments);
 
-  // If we need to strip out http do it after the fact. This way we don't need
-  // to worry about how offset_for_adjustment is interpreted.
+  // If we need to strip out http do it after the fact.
   if (omit_http && StartsWith(url_string, base::ASCIIToUTF16(kHTTP), true)) {
     const size_t kHTTPSize = arraysize(kHTTP) - 1;
     url_string = url_string.substr(kHTTPSize);
-    if (offsets_for_adjustment && !offsets_for_adjustment->empty()) {
-      base::OffsetAdjuster offset_adjuster(offsets_for_adjustment);
-      offset_adjuster.Add(base::OffsetAdjuster::Adjustment(0, kHTTPSize, 0));
-    }
+    // Because offsets in the |adjustments| are already calculated with respect
+    // to the string with the http:// prefix in it, those offsets remain correct
+    // after stripping the prefix.  The only thing necessary is to add an
+    // adjustment to reflect the stripped prefix.
+    adjustments->insert(adjustments->begin(),
+        base::OffsetAdjuster::Adjustment(0, kHTTPSize, 0));
+
     if (prefix_end)
       *prefix_end -= kHTTPSize;
 
@@ -842,7 +808,6 @@
     AdjustAllComponentsButScheme(delta, new_parsed);
   }
 
-  LimitOffsets(url_string, offsets_for_adjustment);
   return url_string;
 }
 
diff --git a/net/base/privacy_mode.h b/net/base/privacy_mode.h
index 8b09a64..4d455cf 100644
--- a/net/base/privacy_mode.h
+++ b/net/base/privacy_mode.h
@@ -8,7 +8,7 @@
 namespace net {
 
 // Privacy Mode is enabled if cookies to particular site are blocked, so
-// Channel ID is disabled on that connection (https or spdy).
+// Channel ID is disabled on that connection (https, spdy or quic).
 enum PrivacyMode {
   PRIVACY_MODE_DISABLED = 0,
   PRIVACY_MODE_ENABLED = 1,
diff --git a/net/base/upload_file_element_reader.cc b/net/base/upload_file_element_reader.cc
index 75dd422..f8775ee 100644
--- a/net/base/upload_file_element_reader.cc
+++ b/net/base/upload_file_element_reader.cc
@@ -50,7 +50,7 @@
   DCHECK(!callback.is_null());
   Reset();
 
-  file_stream_.reset(new FileStream(NULL, task_runner_.get()));
+  file_stream_.reset(new FileStream(task_runner_.get()));
   int result = file_stream_->Open(
       path_,
       base::File::FLAG_OPEN | base::File::FLAG_READ |
diff --git a/net/dns/host_resolver_impl.h b/net/dns/host_resolver_impl.h
index e7f5f65..b2de64b 100644
--- a/net/dns/host_resolver_impl.h
+++ b/net/dns/host_resolver_impl.h
@@ -14,7 +14,6 @@
 #include "base/memory/weak_ptr.h"
 #include "base/threading/non_thread_safe.h"
 #include "base/time/time.h"
-#include "net/base/capturing_net_log.h"
 #include "net/base/net_export.h"
 #include "net/base/network_change_notifier.h"
 #include "net/base/prioritized_dispatcher.h"
diff --git a/net/http/http_network_session.cc b/net/http/http_network_session.cc
index 0e07653..986b26a 100644
--- a/net/http/http_network_session.cc
+++ b/net/http/http_network_session.cc
@@ -89,7 +89,7 @@
       quic_max_packet_length(kDefaultMaxPacketSize),
       enable_user_alternate_protocol_ports(false),
       quic_crypto_client_stream_factory(NULL) {
-  quic_supported_versions.push_back(QUIC_VERSION_15);
+  quic_supported_versions.push_back(QUIC_VERSION_16);
 }
 
 HttpNetworkSession::Params::~Params() {}
diff --git a/net/http/http_network_transaction.cc b/net/http/http_network_transaction.cc
index 36deb99..0ec65f5 100644
--- a/net/http/http_network_transaction.cc
+++ b/net/http/http_network_transaction.cc
@@ -193,8 +193,7 @@
     proxy_ssl_config_.rev_checking_enabled = false;
   }
 
-  // Channel ID is enabled unless --disable-tls-channel-id flag is set,
-  // or if privacy mode is enabled.
+  // Channel ID is disabled if privacy mode is enabled for this request.
   bool channel_id_enabled = server_ssl_config_.channel_id_enabled &&
       (request_->privacy_mode == PRIVACY_MODE_DISABLED);
   server_ssl_config_.channel_id_enabled = channel_id_enabled;
diff --git a/net/http/http_network_transaction_unittest.cc b/net/http/http_network_transaction_unittest.cc
index 3100297..c1112d0 100644
--- a/net/http/http_network_transaction_unittest.cc
+++ b/net/http/http_network_transaction_unittest.cc
@@ -12605,4 +12605,487 @@
   EXPECT_EQ(1, GetIdleSocketCountInTransportSocketPool(session));
 }
 
+TEST_P(HttpNetworkTransactionTest, PostReadsErrorResponseAfterReset) {
+  ScopedVector<UploadElementReader> element_readers;
+  element_readers.push_back(new UploadBytesElementReader("foo", 3));
+  UploadDataStream upload_data_stream(element_readers.Pass(), 0);
+
+  HttpRequestInfo request;
+  request.method = "POST";
+  request.url = GURL("http://www.foo.com/");
+  request.upload_data_stream = &upload_data_stream;
+  request.load_flags = 0;
+
+  scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_));
+  scoped_ptr<HttpTransaction> trans(
+      new HttpNetworkTransaction(DEFAULT_PRIORITY, session));
+  // Send headers successfully, but get an error while sending the body.
+  MockWrite data_writes[] = {
+    MockWrite("POST / HTTP/1.1\r\n"
+              "Host: www.foo.com\r\n"
+              "Connection: keep-alive\r\n"
+              "Content-Length: 3\r\n\r\n"),
+    MockWrite(SYNCHRONOUS, ERR_CONNECTION_RESET),
+  };
+
+  MockRead data_reads[] = {
+    MockRead("HTTP/1.0 400 Not OK\r\n\r\n"),
+    MockRead("hello world"),
+    MockRead(SYNCHRONOUS, OK),
+  };
+  StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes,
+                                arraysize(data_writes));
+  session_deps_.socket_factory->AddSocketDataProvider(&data);
+
+  TestCompletionCallback callback;
+
+  int rv = trans->Start(&request, callback.callback(), BoundNetLog());
+  EXPECT_EQ(ERR_IO_PENDING, rv);
+
+  rv = callback.WaitForResult();
+  EXPECT_EQ(OK, rv);
+
+  const HttpResponseInfo* response = trans->GetResponseInfo();
+  ASSERT_TRUE(response != NULL);
+
+  EXPECT_TRUE(response->headers.get() != NULL);
+  EXPECT_EQ("HTTP/1.0 400 Not OK", response->headers->GetStatusLine());
+
+  std::string response_data;
+  rv = ReadTransaction(trans.get(), &response_data);
+  EXPECT_EQ(OK, rv);
+  EXPECT_EQ("hello world", response_data);
+}
+
+// This test makes sure the retry logic doesn't trigger when reading an error
+// response from a server that rejected a POST with a CONNECTION_RESET.
+TEST_P(HttpNetworkTransactionTest,
+       PostReadsErrorResponseAfterResetOnReusedSocket) {
+  scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_));
+  MockWrite data_writes[] = {
+    MockWrite("GET / HTTP/1.1\r\n"
+              "Host: www.foo.com\r\n"
+              "Connection: keep-alive\r\n\r\n"),
+    MockWrite("POST / HTTP/1.1\r\n"
+              "Host: www.foo.com\r\n"
+              "Connection: keep-alive\r\n"
+              "Content-Length: 3\r\n\r\n"),
+    MockWrite(SYNCHRONOUS, ERR_CONNECTION_RESET),
+  };
+
+  MockRead data_reads[] = {
+    MockRead("HTTP/1.1 200 Peachy\r\n"
+             "Content-Length: 14\r\n\r\n"),
+    MockRead("first response"),
+    MockRead("HTTP/1.1 400 Not OK\r\n"
+             "Content-Length: 15\r\n\r\n"),
+    MockRead("second response"),
+    MockRead(SYNCHRONOUS, OK),
+  };
+  StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes,
+                                arraysize(data_writes));
+  session_deps_.socket_factory->AddSocketDataProvider(&data);
+
+  TestCompletionCallback callback;
+  HttpRequestInfo request1;
+  request1.method = "GET";
+  request1.url = GURL("http://www.foo.com/");
+  request1.load_flags = 0;
+
+  scoped_ptr<HttpTransaction> trans1(
+      new HttpNetworkTransaction(DEFAULT_PRIORITY, session));
+  int rv = trans1->Start(&request1, callback.callback(), BoundNetLog());
+  EXPECT_EQ(ERR_IO_PENDING, rv);
+
+  rv = callback.WaitForResult();
+  EXPECT_EQ(OK, rv);
+
+  const HttpResponseInfo* response1 = trans1->GetResponseInfo();
+  ASSERT_TRUE(response1 != NULL);
+
+  EXPECT_TRUE(response1->headers.get() != NULL);
+  EXPECT_EQ("HTTP/1.1 200 Peachy", response1->headers->GetStatusLine());
+
+  std::string response_data1;
+  rv = ReadTransaction(trans1.get(), &response_data1);
+  EXPECT_EQ(OK, rv);
+  EXPECT_EQ("first response", response_data1);
+  // Delete the transaction to release the socket back into the socket pool.
+  trans1.reset();
+
+  ScopedVector<UploadElementReader> element_readers;
+  element_readers.push_back(new UploadBytesElementReader("foo", 3));
+  UploadDataStream upload_data_stream(element_readers.Pass(), 0);
+
+  HttpRequestInfo request2;
+  request2.method = "POST";
+  request2.url = GURL("http://www.foo.com/");
+  request2.upload_data_stream = &upload_data_stream;
+  request2.load_flags = 0;
+
+  scoped_ptr<HttpTransaction> trans2(
+      new HttpNetworkTransaction(DEFAULT_PRIORITY, session));
+  rv = trans2->Start(&request2, callback.callback(), BoundNetLog());
+  EXPECT_EQ(ERR_IO_PENDING, rv);
+
+  rv = callback.WaitForResult();
+  EXPECT_EQ(OK, rv);
+
+  const HttpResponseInfo* response2 = trans2->GetResponseInfo();
+  ASSERT_TRUE(response2 != NULL);
+
+  EXPECT_TRUE(response2->headers.get() != NULL);
+  EXPECT_EQ("HTTP/1.1 400 Not OK", response2->headers->GetStatusLine());
+
+  std::string response_data2;
+  rv = ReadTransaction(trans2.get(), &response_data2);
+  EXPECT_EQ(OK, rv);
+  EXPECT_EQ("second response", response_data2);
+}
+
+TEST_P(HttpNetworkTransactionTest,
+       PostReadsErrorResponseAfterResetPartialBodySent) {
+  ScopedVector<UploadElementReader> element_readers;
+  element_readers.push_back(new UploadBytesElementReader("foo", 3));
+  UploadDataStream upload_data_stream(element_readers.Pass(), 0);
+
+  HttpRequestInfo request;
+  request.method = "POST";
+  request.url = GURL("http://www.foo.com/");
+  request.upload_data_stream = &upload_data_stream;
+  request.load_flags = 0;
+
+  scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_));
+  scoped_ptr<HttpTransaction> trans(
+      new HttpNetworkTransaction(DEFAULT_PRIORITY, session));
+  // Send headers successfully, but get an error while sending the body.
+  MockWrite data_writes[] = {
+    MockWrite("POST / HTTP/1.1\r\n"
+              "Host: www.foo.com\r\n"
+              "Connection: keep-alive\r\n"
+              "Content-Length: 3\r\n\r\n"
+              "fo"),
+    MockWrite(SYNCHRONOUS, ERR_CONNECTION_RESET),
+  };
+
+  MockRead data_reads[] = {
+    MockRead("HTTP/1.0 400 Not OK\r\n\r\n"),
+    MockRead("hello world"),
+    MockRead(SYNCHRONOUS, OK),
+  };
+  StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes,
+                                arraysize(data_writes));
+  session_deps_.socket_factory->AddSocketDataProvider(&data);
+
+  TestCompletionCallback callback;
+
+  int rv = trans->Start(&request, callback.callback(), BoundNetLog());
+  EXPECT_EQ(ERR_IO_PENDING, rv);
+
+  rv = callback.WaitForResult();
+  EXPECT_EQ(OK, rv);
+
+  const HttpResponseInfo* response = trans->GetResponseInfo();
+  ASSERT_TRUE(response != NULL);
+
+  EXPECT_TRUE(response->headers.get() != NULL);
+  EXPECT_EQ("HTTP/1.0 400 Not OK", response->headers->GetStatusLine());
+
+  std::string response_data;
+  rv = ReadTransaction(trans.get(), &response_data);
+  EXPECT_EQ(OK, rv);
+  EXPECT_EQ("hello world", response_data);
+}
+
+// This tests the more common case than the previous test, where headers and
+// body are not merged into a single request.
+TEST_P(HttpNetworkTransactionTest, ChunkedPostReadsErrorResponseAfterReset) {
+  ScopedVector<UploadElementReader> element_readers;
+  element_readers.push_back(new UploadBytesElementReader("foo", 3));
+  UploadDataStream upload_data_stream(UploadDataStream::CHUNKED, 0);
+
+  HttpRequestInfo request;
+  request.method = "POST";
+  request.url = GURL("http://www.foo.com/");
+  request.upload_data_stream = &upload_data_stream;
+  request.load_flags = 0;
+
+  scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_));
+  scoped_ptr<HttpTransaction> trans(
+      new HttpNetworkTransaction(DEFAULT_PRIORITY, session));
+  // Send headers successfully, but get an error while sending the body.
+  MockWrite data_writes[] = {
+    MockWrite("POST / HTTP/1.1\r\n"
+              "Host: www.foo.com\r\n"
+              "Connection: keep-alive\r\n"
+              "Transfer-Encoding: chunked\r\n\r\n"),
+    MockWrite(SYNCHRONOUS, ERR_CONNECTION_RESET),
+  };
+
+  MockRead data_reads[] = {
+    MockRead("HTTP/1.0 400 Not OK\r\n\r\n"),
+    MockRead("hello world"),
+    MockRead(SYNCHRONOUS, OK),
+  };
+  StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes,
+                                arraysize(data_writes));
+  session_deps_.socket_factory->AddSocketDataProvider(&data);
+
+  TestCompletionCallback callback;
+
+  int rv = trans->Start(&request, callback.callback(), BoundNetLog());
+  EXPECT_EQ(ERR_IO_PENDING, rv);
+  // Make sure the headers are sent before adding a chunk.  This ensures that
+  // they can't be merged with the body in a single send.  Not currently
+  // necessary since a chunked body is never merged with headers, but this makes
+  // the test more future proof.
+  base::RunLoop().RunUntilIdle();
+
+  upload_data_stream.AppendChunk("last chunk", 10, true);
+
+  rv = callback.WaitForResult();
+  EXPECT_EQ(OK, rv);
+
+  const HttpResponseInfo* response = trans->GetResponseInfo();
+  ASSERT_TRUE(response != NULL);
+
+  EXPECT_TRUE(response->headers.get() != NULL);
+  EXPECT_EQ("HTTP/1.0 400 Not OK", response->headers->GetStatusLine());
+
+  std::string response_data;
+  rv = ReadTransaction(trans.get(), &response_data);
+  EXPECT_EQ(OK, rv);
+  EXPECT_EQ("hello world", response_data);
+}
+
+TEST_P(HttpNetworkTransactionTest, PostReadsErrorResponseAfterResetAnd100) {
+  ScopedVector<UploadElementReader> element_readers;
+  element_readers.push_back(new UploadBytesElementReader("foo", 3));
+  UploadDataStream upload_data_stream(element_readers.Pass(), 0);
+
+  HttpRequestInfo request;
+  request.method = "POST";
+  request.url = GURL("http://www.foo.com/");
+  request.upload_data_stream = &upload_data_stream;
+  request.load_flags = 0;
+
+  scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_));
+  scoped_ptr<HttpTransaction> trans(
+      new HttpNetworkTransaction(DEFAULT_PRIORITY, session));
+
+  MockWrite data_writes[] = {
+    MockWrite("POST / HTTP/1.1\r\n"
+              "Host: www.foo.com\r\n"
+              "Connection: keep-alive\r\n"
+              "Content-Length: 3\r\n\r\n"),
+    MockWrite(SYNCHRONOUS, ERR_CONNECTION_RESET),
+  };
+
+  MockRead data_reads[] = {
+    MockRead("HTTP/1.0 100 Continue\r\n\r\n"),
+    MockRead("HTTP/1.0 400 Not OK\r\n\r\n"),
+    MockRead("hello world"),
+    MockRead(SYNCHRONOUS, OK),
+  };
+  StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes,
+                                arraysize(data_writes));
+  session_deps_.socket_factory->AddSocketDataProvider(&data);
+
+  TestCompletionCallback callback;
+
+  int rv = trans->Start(&request, callback.callback(), BoundNetLog());
+  EXPECT_EQ(ERR_IO_PENDING, rv);
+
+  rv = callback.WaitForResult();
+  EXPECT_EQ(OK, rv);
+
+  const HttpResponseInfo* response = trans->GetResponseInfo();
+  ASSERT_TRUE(response != NULL);
+
+  EXPECT_TRUE(response->headers.get() != NULL);
+  EXPECT_EQ("HTTP/1.0 400 Not OK", response->headers->GetStatusLine());
+
+  std::string response_data;
+  rv = ReadTransaction(trans.get(), &response_data);
+  EXPECT_EQ(OK, rv);
+  EXPECT_EQ("hello world", response_data);
+}
+
+TEST_P(HttpNetworkTransactionTest, PostIgnoresNonErrorResponseAfterReset) {
+  ScopedVector<UploadElementReader> element_readers;
+  element_readers.push_back(new UploadBytesElementReader("foo", 3));
+  UploadDataStream upload_data_stream(element_readers.Pass(), 0);
+
+  HttpRequestInfo request;
+  request.method = "POST";
+  request.url = GURL("http://www.foo.com/");
+  request.upload_data_stream = &upload_data_stream;
+  request.load_flags = 0;
+
+  scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_));
+  scoped_ptr<HttpTransaction> trans(
+      new HttpNetworkTransaction(DEFAULT_PRIORITY, session));
+  // Send headers successfully, but get an error while sending the body.
+  MockWrite data_writes[] = {
+    MockWrite("POST / HTTP/1.1\r\n"
+              "Host: www.foo.com\r\n"
+              "Connection: keep-alive\r\n"
+              "Content-Length: 3\r\n\r\n"),
+    MockWrite(SYNCHRONOUS, ERR_CONNECTION_RESET),
+  };
+
+  MockRead data_reads[] = {
+    MockRead("HTTP/1.0 200 Just Dandy\r\n\r\n"),
+    MockRead("hello world"),
+    MockRead(SYNCHRONOUS, OK),
+  };
+  StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes,
+                                arraysize(data_writes));
+  session_deps_.socket_factory->AddSocketDataProvider(&data);
+
+  TestCompletionCallback callback;
+
+  int rv = trans->Start(&request, callback.callback(), BoundNetLog());
+  EXPECT_EQ(ERR_IO_PENDING, rv);
+
+  rv = callback.WaitForResult();
+  EXPECT_EQ(ERR_CONNECTION_RESET, rv);
+
+  const HttpResponseInfo* response = trans->GetResponseInfo();
+  EXPECT_TRUE(response == NULL);
+}
+
+TEST_P(HttpNetworkTransactionTest,
+       PostIgnoresNonErrorResponseAfterResetAnd100) {
+  ScopedVector<UploadElementReader> element_readers;
+  element_readers.push_back(new UploadBytesElementReader("foo", 3));
+  UploadDataStream upload_data_stream(element_readers.Pass(), 0);
+
+  HttpRequestInfo request;
+  request.method = "POST";
+  request.url = GURL("http://www.foo.com/");
+  request.upload_data_stream = &upload_data_stream;
+  request.load_flags = 0;
+
+  scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_));
+  scoped_ptr<HttpTransaction> trans(
+      new HttpNetworkTransaction(DEFAULT_PRIORITY, session));
+  // Send headers successfully, but get an error while sending the body.
+  MockWrite data_writes[] = {
+    MockWrite("POST / HTTP/1.1\r\n"
+              "Host: www.foo.com\r\n"
+              "Connection: keep-alive\r\n"
+              "Content-Length: 3\r\n\r\n"),
+    MockWrite(SYNCHRONOUS, ERR_CONNECTION_RESET),
+  };
+
+  MockRead data_reads[] = {
+    MockRead("HTTP/1.0 100 Continue\r\n\r\n"),
+    MockRead("HTTP/1.0 302 Redirect\r\n"),
+    MockRead("Location: http://somewhere-else.com/\r\n"),
+    MockRead("Content-Length: 0\r\n\r\n"),
+    MockRead(SYNCHRONOUS, OK),
+  };
+  StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes,
+                                arraysize(data_writes));
+  session_deps_.socket_factory->AddSocketDataProvider(&data);
+
+  TestCompletionCallback callback;
+
+  int rv = trans->Start(&request, callback.callback(), BoundNetLog());
+  EXPECT_EQ(ERR_IO_PENDING, rv);
+
+  rv = callback.WaitForResult();
+  EXPECT_EQ(ERR_CONNECTION_RESET, rv);
+
+  const HttpResponseInfo* response = trans->GetResponseInfo();
+  EXPECT_TRUE(response == NULL);
+}
+
+TEST_P(HttpNetworkTransactionTest, PostIgnoresHttp09ResponseAfterReset) {
+  ScopedVector<UploadElementReader> element_readers;
+  element_readers.push_back(new UploadBytesElementReader("foo", 3));
+  UploadDataStream upload_data_stream(element_readers.Pass(), 0);
+
+  HttpRequestInfo request;
+  request.method = "POST";
+  request.url = GURL("http://www.foo.com/");
+  request.upload_data_stream = &upload_data_stream;
+  request.load_flags = 0;
+
+  scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_));
+  scoped_ptr<HttpTransaction> trans(
+      new HttpNetworkTransaction(DEFAULT_PRIORITY, session));
+  // Send headers successfully, but get an error while sending the body.
+  MockWrite data_writes[] = {
+    MockWrite("POST / HTTP/1.1\r\n"
+              "Host: www.foo.com\r\n"
+              "Connection: keep-alive\r\n"
+              "Content-Length: 3\r\n\r\n"),
+    MockWrite(SYNCHRONOUS, ERR_CONNECTION_RESET),
+  };
+
+  MockRead data_reads[] = {
+    MockRead("HTTP 0.9 rocks!"),
+    MockRead(SYNCHRONOUS, OK),
+  };
+  StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes,
+                                arraysize(data_writes));
+  session_deps_.socket_factory->AddSocketDataProvider(&data);
+
+  TestCompletionCallback callback;
+
+  int rv = trans->Start(&request, callback.callback(), BoundNetLog());
+  EXPECT_EQ(ERR_IO_PENDING, rv);
+
+  rv = callback.WaitForResult();
+  EXPECT_EQ(ERR_CONNECTION_RESET, rv);
+
+  const HttpResponseInfo* response = trans->GetResponseInfo();
+  EXPECT_TRUE(response == NULL);
+}
+
+TEST_P(HttpNetworkTransactionTest, PostIgnoresPartial400HeadersAfterReset) {
+  ScopedVector<UploadElementReader> element_readers;
+  element_readers.push_back(new UploadBytesElementReader("foo", 3));
+  UploadDataStream upload_data_stream(element_readers.Pass(), 0);
+
+  HttpRequestInfo request;
+  request.method = "POST";
+  request.url = GURL("http://www.foo.com/");
+  request.upload_data_stream = &upload_data_stream;
+  request.load_flags = 0;
+
+  scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_));
+  scoped_ptr<HttpTransaction> trans(
+      new HttpNetworkTransaction(DEFAULT_PRIORITY, session));
+  // Send headers successfully, but get an error while sending the body.
+  MockWrite data_writes[] = {
+    MockWrite("POST / HTTP/1.1\r\n"
+              "Host: www.foo.com\r\n"
+              "Connection: keep-alive\r\n"
+              "Content-Length: 3\r\n\r\n"),
+    MockWrite(SYNCHRONOUS, ERR_CONNECTION_RESET),
+  };
+
+  MockRead data_reads[] = {
+    MockRead("HTTP/1.0 400 Not a Full Response\r\n"),
+    MockRead(SYNCHRONOUS, OK),
+  };
+  StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes,
+                                arraysize(data_writes));
+  session_deps_.socket_factory->AddSocketDataProvider(&data);
+
+  TestCompletionCallback callback;
+
+  int rv = trans->Start(&request, callback.callback(), BoundNetLog());
+  EXPECT_EQ(ERR_IO_PENDING, rv);
+
+  rv = callback.WaitForResult();
+  EXPECT_EQ(ERR_CONNECTION_RESET, rv);
+
+  const HttpResponseInfo* response = trans->GetResponseInfo();
+  EXPECT_TRUE(response == NULL);
+}
+
 }  // namespace net
diff --git a/net/http/http_security_headers.cc b/net/http/http_security_headers.cc
index 0c3305f..8d0c146 100644
--- a/net/http/http_security_headers.cc
+++ b/net/http/http_security_headers.cc
@@ -253,6 +253,7 @@
   }
 
   switch (state) {
+    case DIRECTIVE_END:
     case AFTER_MAX_AGE:
     case AFTER_INCLUDE_SUBDOMAINS:
     case AFTER_UNKNOWN_LABEL:
@@ -260,7 +261,6 @@
       *include_subdomains = include_subdomains_candidate;
       return true;
     case START:
-    case DIRECTIVE_END:
     case AFTER_MAX_AGE_LABEL:
     case AFTER_MAX_AGE_EQUALS:
       return false;
diff --git a/net/http/http_security_headers_unittest.cc b/net/http/http_security_headers_unittest.cc
index 42a5ee9..9aae8ae 100644
--- a/net/http/http_security_headers_unittest.cc
+++ b/net/http/http_security_headers_unittest.cc
@@ -90,8 +90,6 @@
                                &include_subdomains));
   EXPECT_FALSE(ParseHSTSHeader("max-age=-3488923", &max_age,
                                &include_subdomains));
-  EXPECT_FALSE(ParseHSTSHeader("max-age=3488923;", &max_age,
-                               &include_subdomains));
   EXPECT_FALSE(ParseHSTSHeader("max-age=3488923     e", &max_age,
                                &include_subdomains));
   EXPECT_FALSE(ParseHSTSHeader("max-age=3488923     includesubdomain",
@@ -114,6 +112,16 @@
                                &max_age, &include_subdomains));
   EXPECT_FALSE(ParseHSTSHeader("max-age=34889 includesubdomains",
                                &max_age, &include_subdomains));
+  EXPECT_FALSE(ParseHSTSHeader(";;;; ;;;",
+                               &max_age, &include_subdomains));
+  EXPECT_FALSE(ParseHSTSHeader(";;;; includeSubDomains;;;",
+                               &max_age, &include_subdomains));
+  EXPECT_FALSE(ParseHSTSHeader("   includeSubDomains;  ",
+                               &max_age, &include_subdomains));
+  EXPECT_FALSE(ParseHSTSHeader(";",
+                               &max_age, &include_subdomains));
+  EXPECT_FALSE(ParseHSTSHeader("max-age; ;",
+                               &max_age, &include_subdomains));
 
   // Check the out args were not updated by checking the default
   // values for its predictable fields.
@@ -223,6 +231,9 @@
   EXPECT_EQ(expect_max_age, max_age);
   EXPECT_FALSE(include_subdomains);
 
+  EXPECT_TRUE(ParseHSTSHeader("max-age=3488923;", &max_age,
+                              &include_subdomains));
+
   EXPECT_TRUE(ParseHSTSHeader("  Max-agE    = 567", &max_age,
                               &include_subdomains));
   expect_max_age = base::TimeDelta::FromSeconds(567);
@@ -311,6 +322,46 @@
   EXPECT_TRUE(include_subdomains);
 
   EXPECT_TRUE(ParseHSTSHeader(
+      "max-age=394082038  ; incLudesUbdOmains;", &max_age,
+      &include_subdomains));
+  expect_max_age = base::TimeDelta::FromSeconds(
+      std::min(kMaxHSTSAgeSecs, static_cast<int64>(GG_INT64_C(394082038))));
+  EXPECT_EQ(expect_max_age, max_age);
+  EXPECT_TRUE(include_subdomains);
+
+  EXPECT_TRUE(ParseHSTSHeader(
+      ";; max-age=394082038  ; incLudesUbdOmains; ;", &max_age,
+      &include_subdomains));
+  expect_max_age = base::TimeDelta::FromSeconds(
+      std::min(kMaxHSTSAgeSecs, static_cast<int64>(GG_INT64_C(394082038))));
+  EXPECT_EQ(expect_max_age, max_age);
+  EXPECT_TRUE(include_subdomains);
+
+  EXPECT_TRUE(ParseHSTSHeader(
+      ";; max-age=394082038  ;", &max_age,
+      &include_subdomains));
+  expect_max_age = base::TimeDelta::FromSeconds(
+      std::min(kMaxHSTSAgeSecs, static_cast<int64>(GG_INT64_C(394082038))));
+  EXPECT_EQ(expect_max_age, max_age);
+  EXPECT_FALSE(include_subdomains);
+
+  EXPECT_TRUE(ParseHSTSHeader(
+      ";;    ; ; max-age=394082038;;; includeSubdomains     ;;  ;", &max_age,
+      &include_subdomains));
+  expect_max_age = base::TimeDelta::FromSeconds(
+      std::min(kMaxHSTSAgeSecs, static_cast<int64>(GG_INT64_C(394082038))));
+  EXPECT_EQ(expect_max_age, max_age);
+  EXPECT_TRUE(include_subdomains);
+
+  EXPECT_TRUE(ParseHSTSHeader(
+      "incLudesUbdOmains   ; max-age=394082038 ;;", &max_age,
+      &include_subdomains));
+  expect_max_age = base::TimeDelta::FromSeconds(
+      std::min(kMaxHSTSAgeSecs, static_cast<int64>(GG_INT64_C(394082038))));
+  EXPECT_EQ(expect_max_age, max_age);
+  EXPECT_TRUE(include_subdomains);
+
+  EXPECT_TRUE(ParseHSTSHeader(
       "  max-age=0  ;  incLudesUbdOmains   ", &max_age,
       &include_subdomains));
   expect_max_age = base::TimeDelta::FromSeconds(0);
diff --git a/net/http/http_server_properties.h b/net/http/http_server_properties.h
index a96e440..dc36b64 100644
--- a/net/http/http_server_properties.h
+++ b/net/http/http_server_properties.h
@@ -107,7 +107,7 @@
 class NET_EXPORT HttpServerProperties {
  public:
   struct NetworkStats {
-    base::TimeDelta rtt;
+    base::TimeDelta srtt;
     uint64 bandwidth_estimate;
   };
 
@@ -144,6 +144,13 @@
   // Sets the Alternate-Protocol for |server| to be BROKEN.
   virtual void SetBrokenAlternateProtocol(const HostPortPair& server) = 0;
 
+  // Returns true if Alternate-Protocol for |server| was recently BROKEN.
+  virtual bool WasAlternateProtocolRecentlyBroken(
+      const HostPortPair& server) = 0;
+
+  // Confirms that Alternate-Protocol for |server| is working.
+  virtual void ConfirmAlternateProtocol(const HostPortPair& server) = 0;
+
   // Clears the Alternate-Protocol for |server|.
   virtual void ClearAlternateProtocol(const HostPortPair& server) = 0;
 
diff --git a/net/http/http_server_properties_impl.cc b/net/http/http_server_properties_impl.cc
index c869a23..3968b1a 100644
--- a/net/http/http_server_properties_impl.cc
+++ b/net/http/http_server_properties_impl.cc
@@ -313,6 +313,16 @@
   }
 }
 
+bool HttpServerPropertiesImpl::WasAlternateProtocolRecentlyBroken(
+    const HostPortPair& server) {
+  return ContainsKey(broken_alternate_protocol_map_, server);
+}
+
+void HttpServerPropertiesImpl::ConfirmAlternateProtocol(
+    const HostPortPair& server) {
+  broken_alternate_protocol_map_.erase(server);
+}
+
 void HttpServerPropertiesImpl::ClearAlternateProtocol(
     const HostPortPair& server) {
   AlternateProtocolMap::iterator it = alternate_protocol_map_.Peek(server);
diff --git a/net/http/http_server_properties_impl.h b/net/http/http_server_properties_impl.h
index 2b8b950..b03f357 100644
--- a/net/http/http_server_properties_impl.h
+++ b/net/http/http_server_properties_impl.h
@@ -103,6 +103,13 @@
   // Sets the Alternate-Protocol for |server| to be BROKEN.
   virtual void SetBrokenAlternateProtocol(const HostPortPair& server) OVERRIDE;
 
+  // Returns true if Alternate-Protocol for |server| was recently BROKEN.
+  virtual bool WasAlternateProtocolRecentlyBroken(
+      const HostPortPair& server) OVERRIDE;
+
+  // Confirms that Alternate-Protocol for |server| is working.
+  virtual void ConfirmAlternateProtocol(const HostPortPair& server) OVERRIDE;
+
   // Clears the Alternate-Protocol for |server|.
   virtual void ClearAlternateProtocol(const HostPortPair& server) OVERRIDE;
 
diff --git a/net/http/http_stream_parser.cc b/net/http/http_stream_parser.cc
index 9b787da..820c1ba 100644
--- a/net/http/http_stream_parser.cc
+++ b/net/http/http_stream_parser.cc
@@ -6,6 +6,7 @@
 
 #include "base/bind.h"
 #include "base/compiler_specific.h"
+#include "base/logging.h"
 #include "base/strings/string_util.h"
 #include "base/values.h"
 #include "net/base/io_buffer.h"
@@ -19,12 +20,14 @@
 #include "net/socket/client_socket_handle.h"
 #include "net/socket/ssl_client_socket.h"
 
+namespace net {
+
 namespace {
 
 const size_t kMaxMergedHeaderAndBodySize = 1400;
 const size_t kRequestBodyBufferSize = 1 << 14;  // 16KB
 
-std::string GetResponseHeaderLines(const net::HttpResponseHeaders& headers) {
+std::string GetResponseHeaderLines(const HttpResponseHeaders& headers) {
   std::string raw_headers = headers.raw_headers();
   const char* null_separated_headers = raw_headers.c_str();
   const char* header_line = null_separated_headers;
@@ -39,9 +42,8 @@
 
 // Return true if |headers| contain multiple |field_name| fields with different
 // values.
-bool HeadersContainMultipleCopiesOfField(
-    const net::HttpResponseHeaders& headers,
-    const std::string& field_name) {
+bool HeadersContainMultipleCopiesOfField(const HttpResponseHeaders& headers,
+                                         const std::string& field_name) {
   void* it = NULL;
   std::string field_value;
   if (!headers.EnumerateHeader(&it, field_name, &field_value))
@@ -56,11 +58,10 @@
   return false;
 }
 
-base::Value* NetLogSendRequestBodyCallback(
-    int length,
-    bool is_chunked,
-    bool did_merge,
-    net::NetLog::LogLevel /* log_level */) {
+base::Value* NetLogSendRequestBodyCallback(int length,
+                                           bool is_chunked,
+                                           bool did_merge,
+                                           NetLog::LogLevel /* log_level */) {
   base::DictionaryValue* dict = new base::DictionaryValue();
   dict->SetInteger("length", length);
   dict->SetBoolean("is_chunked", is_chunked);
@@ -68,9 +69,14 @@
   return dict;
 }
 
-}  // namespace
+// Returns true if |error_code| is an error for which we give the server a
+// chance to send a body containing error information, if the error was received
+// while trying to upload a request body.
+bool ShouldTryReadingOnUploadError(int error_code) {
+  return (error_code == ERR_CONNECTION_RESET);
+}
 
-namespace net {
+}  // namespace
 
 // Similar to DrainableIOBuffer(), but this version comes with its own
 // storage. The motivation is to avoid repeated allocations of
@@ -101,7 +107,7 @@
 // // size() == BytesRemaining() == BytesConsumed() == 0.
 // // data() points to the beginning of the buffer.
 //
-class HttpStreamParser::SeekableIOBuffer : public net::IOBuffer {
+class HttpStreamParser::SeekableIOBuffer : public IOBuffer {
  public:
   explicit SeekableIOBuffer(int capacity)
     : IOBuffer(capacity),
@@ -176,6 +182,7 @@
     : io_state_(STATE_NONE),
       request_(request),
       request_headers_(NULL),
+      request_headers_length_(0),
       read_buf_(read_buffer),
       read_buf_unused_offset_(0),
       response_header_start_offset_(-1),
@@ -187,6 +194,7 @@
       connection_(connection),
       net_log_(net_log),
       sent_last_chunk_(false),
+      upload_error_(OK),
       weak_ptr_factory_(this) {
   io_callback_ = base::Bind(&HttpStreamParser::OnIOComplete,
                             weak_ptr_factory_.GetWeakPtr());
@@ -223,6 +231,7 @@
   response_->socket_address = HostPortPair::FromIPEndPoint(ip_endpoint);
 
   std::string request = request_line + headers.ToString();
+  request_headers_length_ = request.size();
 
   if (request_->upload_data_stream != NULL) {
     request_body_send_buf_ = new SeekableIOBuffer(kRequestBodyBufferSize);
@@ -237,13 +246,14 @@
     }
   }
 
-  io_state_ = STATE_SENDING_HEADERS;
+  io_state_ = STATE_SEND_HEADERS;
 
   // If we have a small request body, then we'll merge with the headers into a
   // single write.
   bool did_merge = false;
   if (ShouldMergeRequestHeadersAndBody(request, request_->upload_data_stream)) {
-    size_t merged_size = request.size() + request_->upload_data_stream->size();
+    size_t merged_size =
+        request_headers_length_ + request_->upload_data_stream->size();
     scoped_refptr<IOBuffer> merged_request_headers_and_body(
         new IOBuffer(merged_size));
     // We'll repurpose |request_headers_| to store the merged headers and
@@ -251,8 +261,8 @@
     request_headers_ = new DrainableIOBuffer(
         merged_request_headers_and_body.get(), merged_size);
 
-    memcpy(request_headers_->data(), request.data(), request.size());
-    request_headers_->DidConsume(request.size());
+    memcpy(request_headers_->data(), request.data(), request_headers_length_);
+    request_headers_->DidConsume(request_headers_length_);
 
     size_t todo = request_->upload_data_stream->size();
     while (todo) {
@@ -291,7 +301,7 @@
 }
 
 int HttpStreamParser::ReadResponseHeaders(const CompletionCallback& callback) {
-  DCHECK(io_state_ == STATE_REQUEST_SENT || io_state_ == STATE_DONE);
+  DCHECK(io_state_ == STATE_NONE || io_state_ == STATE_DONE);
   DCHECK(callback_.is_null());
   DCHECK(!callback.is_null());
   DCHECK_EQ(0, read_buf_unused_offset_);
@@ -327,7 +337,7 @@
 
 int HttpStreamParser::ReadResponseBody(IOBuffer* buf, int buf_len,
                                        const CompletionCallback& callback) {
-  DCHECK(io_state_ == STATE_BODY_PENDING || io_state_ == STATE_DONE);
+  DCHECK(io_state_ == STATE_NONE || io_state_ == STATE_DONE);
   DCHECK(callback_.is_null());
   DCHECK(!callback.is_null());
   DCHECK_LE(buf_len, kMaxBufSize);
@@ -335,6 +345,9 @@
   if (io_state_ == STATE_DONE)
     return OK;
 
+  // Must have response headers with a non-1xx error code.
+  DCHECK_NE(1, response_->headers->response_code() / 100);
+
   user_read_buf_ = buf;
   user_read_buf_len_ = buf_len;
   io_state_ = STATE_READ_BODY;
@@ -359,30 +372,33 @@
 }
 
 int HttpStreamParser::DoLoop(int result) {
-  bool can_do_more = true;
   do {
-    switch (io_state_) {
-      case STATE_SENDING_HEADERS:
-        if (result < 0)
-          can_do_more = false;
-        else
-          result = DoSendHeaders(result);
+    DCHECK_NE(ERR_IO_PENDING, result);
+    DCHECK_NE(STATE_DONE, io_state_);
+    DCHECK_NE(STATE_NONE, io_state_);
+    State state = io_state_;
+    io_state_ = STATE_NONE;
+    switch (state) {
+      case STATE_SEND_HEADERS:
+        DCHECK_EQ(OK, result);
+        result = DoSendHeaders();
         break;
-      case STATE_SENDING_BODY:
-        if (result < 0)
-          can_do_more = false;
-        else
-          result = DoSendBody(result);
+      case STATE_SEND_HEADERS_COMPLETE:
+        result = DoSendHeadersComplete(result);
         break;
-      case STATE_SEND_REQUEST_READING_BODY:
-        result = DoSendRequestReadingBody(result);
+      case STATE_SEND_BODY:
+        DCHECK_EQ(OK, result);
+        result = DoSendBody();
         break;
-      case STATE_REQUEST_SENT:
-        DCHECK(result != ERR_IO_PENDING);
-        can_do_more = false;
+      case STATE_SEND_BODY_COMPLETE:
+        result = DoSendBodyComplete(result);
+        break;
+      case STATE_SEND_REQUEST_READ_BODY_COMPLETE:
+        result = DoSendRequestReadBodyComplete(result);
         break;
       case STATE_READ_HEADERS:
         net_log_.BeginEvent(NetLog::TYPE_HTTP_STREAM_PARSER_READ_HEADERS);
+        DCHECK_GE(result, 0);
         result = DoReadHeaders();
         break;
       case STATE_READ_HEADERS_COMPLETE:
@@ -390,68 +406,79 @@
         net_log_.EndEventWithNetErrorCode(
             NetLog::TYPE_HTTP_STREAM_PARSER_READ_HEADERS, result);
         break;
-      case STATE_BODY_PENDING:
-        DCHECK(result != ERR_IO_PENDING);
-        can_do_more = false;
-        break;
       case STATE_READ_BODY:
+        DCHECK_GE(result, 0);
         result = DoReadBody();
-        // DoReadBodyComplete handles error conditions.
         break;
       case STATE_READ_BODY_COMPLETE:
         result = DoReadBodyComplete(result);
         break;
-      case STATE_DONE:
-        DCHECK(result != ERR_IO_PENDING);
-        can_do_more = false;
-        break;
       default:
         NOTREACHED();
-        can_do_more = false;
         break;
     }
-  } while (result != ERR_IO_PENDING && can_do_more);
+  } while (result != ERR_IO_PENDING &&
+           (io_state_ != STATE_DONE && io_state_ != STATE_NONE));
 
   return result;
 }
 
-int HttpStreamParser::DoSendHeaders(int result) {
-  request_headers_->DidConsume(result);
+int HttpStreamParser::DoSendHeaders() {
   int bytes_remaining = request_headers_->BytesRemaining();
-  if (bytes_remaining > 0) {
-    // Record our best estimate of the 'request time' as the time when we send
-    // out the first bytes of the request headers.
-    if (bytes_remaining == request_headers_->size()) {
-      response_->request_time = base::Time::Now();
+  DCHECK_GT(bytes_remaining, 0);
+
+  // Record our best estimate of the 'request time' as the time when we send
+  // out the first bytes of the request headers.
+  if (bytes_remaining == request_headers_->size())
+    response_->request_time = base::Time::Now();
+
+  io_state_ = STATE_SEND_HEADERS_COMPLETE;
+  return connection_->socket()
+      ->Write(request_headers_.get(), bytes_remaining, io_callback_);
+}
+
+int HttpStreamParser::DoSendHeadersComplete(int result) {
+  if (result < 0) {
+    // In the unlikely case that the headers and body were merged, all the
+    // the headers were sent, but not all of the body way, and |result| is
+    // an error that this should try reading after, stash the error for now and
+    // act like the request was successfully sent.
+    if (request_headers_->BytesConsumed() >= request_headers_length_ &&
+        ShouldTryReadingOnUploadError(result)) {
+      upload_error_ = result;
+      return OK;
     }
-    result = connection_->socket()
-        ->Write(request_headers_.get(), bytes_remaining, io_callback_);
-  } else if (request_->upload_data_stream != NULL &&
-             (request_->upload_data_stream->is_chunked() ||
-              // !IsEOF() indicates that the body wasn't merged.
-              (request_->upload_data_stream->size() > 0 &&
-               !request_->upload_data_stream->IsEOF()))) {
+    return result;
+  }
+
+  request_headers_->DidConsume(result);
+  if (request_headers_->BytesRemaining() > 0) {
+    io_state_ = STATE_SEND_HEADERS;
+    return OK;
+  }
+
+  if (request_->upload_data_stream != NULL &&
+      (request_->upload_data_stream->is_chunked() ||
+      // !IsEOF() indicates that the body wasn't merged.
+      (request_->upload_data_stream->size() > 0 &&
+        !request_->upload_data_stream->IsEOF()))) {
     net_log_.AddEvent(
         NetLog::TYPE_HTTP_TRANSACTION_SEND_REQUEST_BODY,
         base::Bind(&NetLogSendRequestBodyCallback,
                    request_->upload_data_stream->size(),
                    request_->upload_data_stream->is_chunked(),
                    false /* not merged */));
-    io_state_ = STATE_SENDING_BODY;
-    result = OK;
-  } else {
-    io_state_ = STATE_REQUEST_SENT;
+    io_state_ = STATE_SEND_BODY;
+    return OK;
   }
-  return result;
+
+  // Finished sending the request.
+  return OK;
 }
 
-int HttpStreamParser::DoSendBody(int result) {
-  // |result| is the number of bytes sent from the last call to
-  // DoSendBody(), or 0 (i.e. OK).
-
-  // Send the remaining data in the request body buffer.
-  request_body_send_buf_->DidConsume(result);
+int HttpStreamParser::DoSendBody() {
   if (request_body_send_buf_->BytesRemaining() > 0) {
+    io_state_ = STATE_SEND_BODY_COMPLETE;
     return connection_->socket()
         ->Write(request_body_send_buf_.get(),
                 request_body_send_buf_->BytesRemaining(),
@@ -459,18 +486,35 @@
   }
 
   if (request_->upload_data_stream->is_chunked() && sent_last_chunk_) {
-    io_state_ = STATE_REQUEST_SENT;
+    // Finished sending the request.
     return OK;
   }
 
   request_body_read_buf_->Clear();
-  io_state_ = STATE_SEND_REQUEST_READING_BODY;
+  io_state_ = STATE_SEND_REQUEST_READ_BODY_COMPLETE;
   return request_->upload_data_stream->Read(request_body_read_buf_.get(),
                                             request_body_read_buf_->capacity(),
                                             io_callback_);
 }
 
-int HttpStreamParser::DoSendRequestReadingBody(int result) {
+int HttpStreamParser::DoSendBodyComplete(int result) {
+  if (result < 0) {
+    // If |result| is an error that this should try reading after, stash the
+    // error for now and act like the request was successfully sent.
+    if (ShouldTryReadingOnUploadError(result)) {
+      upload_error_ = result;
+      return OK;
+    }
+    return result;
+  }
+
+  request_body_send_buf_->DidConsume(result);
+
+  io_state_ = STATE_SEND_BODY;
+  return OK;
+}
+
+int HttpStreamParser::DoSendRequestReadBodyComplete(int result) {
   // |result| is the result of read from the request body from the last call to
   // DoSendBody().
   DCHECK_GE(result, 0);  // There won't be errors.
@@ -494,11 +538,11 @@
     // chunked. (i.e. No need to send the terminal chunk.)
     DCHECK(request_->upload_data_stream->IsEOF());
     DCHECK(!request_->upload_data_stream->is_chunked());
-    io_state_ = STATE_REQUEST_SENT;
+    // Finished sending the request.
   } else if (result > 0) {
     request_body_send_buf_->DidAppend(result);
     result = 0;
-    io_state_ = STATE_SENDING_BODY;
+    io_state_ = STATE_SEND_BODY;
   }
   return result;
 }
@@ -519,110 +563,50 @@
 }
 
 int HttpStreamParser::DoReadHeadersComplete(int result) {
-  DCHECK_EQ(0, read_buf_unused_offset_);
+  result = HandleReadHeaderResult(result);
 
-  if (result == 0)
-    result = ERR_CONNECTION_CLOSED;
+  // TODO(mmenke):  The code below is ugly and hacky.  A much better and more
+  // flexible long term solution would be to separate out the read and write
+  // loops, though this would involve significant changes, both here and
+  // elsewhere (WebSockets, for instance).
 
-  if (result < 0 && result != ERR_CONNECTION_CLOSED) {
+  // If still reading the headers, or there was no error uploading the request
+  // body, just return the result.
+  if (io_state_ == STATE_READ_HEADERS || upload_error_ == OK)
+    return result;
+
+  // If the result is ERR_IO_PENDING, |io_state_| should be STATE_READ_HEADERS.
+  DCHECK_NE(ERR_IO_PENDING, result);
+
+  // On errors, use the original error received when sending the request.
+  // The main cases where these are different is when there's a header-related
+  // error code, or when there's an ERR_CONNECTION_CLOSED, which can result in
+  // special handling of partial responses and HTTP/0.9 responses.
+  if (result < 0) {
+    // Nothing else to do.  In the HTTP/0.9 or only partial headers received
+    // cases, can normally go to other states after an error reading headers.
     io_state_ = STATE_DONE;
-    return result;
+    // Don't let caller see the headers.
+    response_->headers = NULL;
+    return upload_error_;
   }
-  // If we've used the connection before, then we know it is not a HTTP/0.9
-  // response and return ERR_CONNECTION_CLOSED.
-  if (result == ERR_CONNECTION_CLOSED && read_buf_->offset() == 0 &&
-      connection_->is_reused()) {
-    io_state_ = STATE_DONE;
+
+  // Skip over 1xx responses as usual, and allow 4xx/5xx error responses to
+  // override the error received while uploading the body.
+  int response_code_class = response_->headers->response_code() / 100;
+  if (response_code_class == 1 || response_code_class == 4 ||
+      response_code_class == 5) {
     return result;
   }
 
-  // Record our best estimate of the 'response time' as the time when we read
-  // the first bytes of the response headers.
-  if (read_buf_->offset() == 0 && result != ERR_CONNECTION_CLOSED)
-    response_->response_time = base::Time::Now();
+  // All other status codes are not allowed after an error during upload, to
+  // make sure the consumer has some indication there was an error.
 
-  if (result == ERR_CONNECTION_CLOSED) {
-    // The connection closed before we detected the end of the headers.
-    if (read_buf_->offset() == 0) {
-      // The connection was closed before any data was sent. Likely an error
-      // rather than empty HTTP/0.9 response.
-      io_state_ = STATE_DONE;
-      return ERR_EMPTY_RESPONSE;
-    } else if (request_->url.SchemeIsSecure()) {
-      // The connection was closed in the middle of the headers. For HTTPS we
-      // don't parse partial headers. Return a different error code so that we
-      // know that we shouldn't attempt to retry the request.
-      io_state_ = STATE_DONE;
-      return ERR_RESPONSE_HEADERS_TRUNCATED;
-    }
-    // Parse things as well as we can and let the caller decide what to do.
-    int end_offset;
-    if (response_header_start_offset_ >= 0) {
-      io_state_ = STATE_READ_BODY_COMPLETE;
-      end_offset = read_buf_->offset();
-    } else {
-      io_state_ = STATE_BODY_PENDING;
-      end_offset = 0;
-    }
-    int rv = DoParseResponseHeaders(end_offset);
-    if (rv < 0)
-      return rv;
-    return result;
-  }
-
-  read_buf_->set_offset(read_buf_->offset() + result);
-  DCHECK_LE(read_buf_->offset(), read_buf_->capacity());
-  DCHECK_GE(result,  0);
-
-  int end_of_header_offset = ParseResponseHeaders();
-
-  // Note: -1 is special, it indicates we haven't found the end of headers.
-  // Anything less than -1 is a net::Error, so we bail out.
-  if (end_of_header_offset < -1)
-    return end_of_header_offset;
-
-  if (end_of_header_offset == -1) {
-    io_state_ = STATE_READ_HEADERS;
-    // Prevent growing the headers buffer indefinitely.
-    if (read_buf_->offset() >= kMaxHeaderBufSize) {
-      io_state_ = STATE_DONE;
-      return ERR_RESPONSE_HEADERS_TOO_BIG;
-    }
-  } else {
-    CalculateResponseBodySize();
-    // If the body is zero length, the caller may not call ReadResponseBody,
-    // which is where any extra data is copied to read_buf_, so we move the
-    // data here.
-    if (response_body_length_ == 0) {
-      int extra_bytes = read_buf_->offset() - end_of_header_offset;
-      if (extra_bytes) {
-        CHECK_GT(extra_bytes, 0);
-        memmove(read_buf_->StartOfBuffer(),
-                read_buf_->StartOfBuffer() + end_of_header_offset,
-                extra_bytes);
-      }
-      read_buf_->SetCapacity(extra_bytes);
-      if (response_->headers->response_code() / 100 == 1) {
-        // After processing a 1xx response, the caller will ask for the next
-        // header, so reset state to support that. We don't completely ignore a
-        // 1xx response because it cannot be returned in reply to a CONNECT
-        // request so we return OK here, which lets the caller inspect the
-        // response and reject it in the event that we're setting up a CONNECT
-        // tunnel.
-        response_header_start_offset_ = -1;
-        response_body_length_ = -1;
-        io_state_ = STATE_REQUEST_SENT;
-      } else {
-        io_state_ = STATE_DONE;
-      }
-      return OK;
-    }
-
-    // Note where the headers stop.
-    read_buf_unused_offset_ = end_of_header_offset;
-    io_state_ = STATE_BODY_PENDING;
-  }
-  return result;
+  // Nothing else to do.
+  io_state_ = STATE_DONE;
+  // Don't let caller see the headers.
+  response_->headers = NULL;
+  return upload_error_;
 }
 
 int HttpStreamParser::DoReadBody() {
@@ -751,7 +735,7 @@
     }
     read_buf_unused_offset_ = 0;
   } else {
-    io_state_ = STATE_BODY_PENDING;
+    // Now waiting for more of the body to be read.
     user_read_buf_ = NULL;
     user_read_buf_len_ = 0;
   }
@@ -759,6 +743,113 @@
   return result;
 }
 
+int HttpStreamParser::HandleReadHeaderResult(int result) {
+  DCHECK_EQ(0, read_buf_unused_offset_);
+
+  if (result == 0)
+    result = ERR_CONNECTION_CLOSED;
+
+  if (result < 0 && result != ERR_CONNECTION_CLOSED) {
+    io_state_ = STATE_DONE;
+    return result;
+  }
+  // If we've used the connection before, then we know it is not a HTTP/0.9
+  // response and return ERR_CONNECTION_CLOSED.
+  if (result == ERR_CONNECTION_CLOSED && read_buf_->offset() == 0 &&
+      connection_->is_reused()) {
+    io_state_ = STATE_DONE;
+    return result;
+  }
+
+  // Record our best estimate of the 'response time' as the time when we read
+  // the first bytes of the response headers.
+  if (read_buf_->offset() == 0 && result != ERR_CONNECTION_CLOSED)
+    response_->response_time = base::Time::Now();
+
+  if (result == ERR_CONNECTION_CLOSED) {
+    // The connection closed before we detected the end of the headers.
+    if (read_buf_->offset() == 0) {
+      // The connection was closed before any data was sent. Likely an error
+      // rather than empty HTTP/0.9 response.
+      io_state_ = STATE_DONE;
+      return ERR_EMPTY_RESPONSE;
+    } else if (request_->url.SchemeIsSecure()) {
+      // The connection was closed in the middle of the headers. For HTTPS we
+      // don't parse partial headers. Return a different error code so that we
+      // know that we shouldn't attempt to retry the request.
+      io_state_ = STATE_DONE;
+      return ERR_RESPONSE_HEADERS_TRUNCATED;
+    }
+    // Parse things as well as we can and let the caller decide what to do.
+    int end_offset;
+    if (response_header_start_offset_ >= 0) {
+      io_state_ = STATE_READ_BODY_COMPLETE;
+      end_offset = read_buf_->offset();
+    } else {
+      // Now waiting for the body to be read.
+      end_offset = 0;
+    }
+    int rv = DoParseResponseHeaders(end_offset);
+    if (rv < 0)
+      return rv;
+    return result;
+  }
+
+  read_buf_->set_offset(read_buf_->offset() + result);
+  DCHECK_LE(read_buf_->offset(), read_buf_->capacity());
+  DCHECK_GE(result,  0);
+
+  int end_of_header_offset = ParseResponseHeaders();
+
+  // Note: -1 is special, it indicates we haven't found the end of headers.
+  // Anything less than -1 is a net::Error, so we bail out.
+  if (end_of_header_offset < -1)
+    return end_of_header_offset;
+
+  if (end_of_header_offset == -1) {
+    io_state_ = STATE_READ_HEADERS;
+    // Prevent growing the headers buffer indefinitely.
+    if (read_buf_->offset() >= kMaxHeaderBufSize) {
+      io_state_ = STATE_DONE;
+      return ERR_RESPONSE_HEADERS_TOO_BIG;
+    }
+  } else {
+    CalculateResponseBodySize();
+    // If the body is zero length, the caller may not call ReadResponseBody,
+    // which is where any extra data is copied to read_buf_, so we move the
+    // data here.
+    if (response_body_length_ == 0) {
+      int extra_bytes = read_buf_->offset() - end_of_header_offset;
+      if (extra_bytes) {
+        CHECK_GT(extra_bytes, 0);
+        memmove(read_buf_->StartOfBuffer(),
+                read_buf_->StartOfBuffer() + end_of_header_offset,
+                extra_bytes);
+      }
+      read_buf_->SetCapacity(extra_bytes);
+      if (response_->headers->response_code() / 100 == 1) {
+        // After processing a 1xx response, the caller will ask for the next
+        // header, so reset state to support that. We don't completely ignore a
+        // 1xx response because it cannot be returned in reply to a CONNECT
+        // request so we return OK here, which lets the caller inspect the
+        // response and reject it in the event that we're setting up a CONNECT
+        // tunnel.
+        response_header_start_offset_ = -1;
+        response_body_length_ = -1;
+        // Now waiting for the second set of headers to be read.
+      } else {
+        io_state_ = STATE_DONE;
+      }
+      return OK;
+    }
+
+    // Note where the headers stop.
+    read_buf_unused_offset_ = end_of_header_offset;
+    // Now waiting for the body to be read.
+  }
+  return result;
+}
+
 int HttpStreamParser::ParseResponseHeaders() {
   int end_offset = -1;
   DCHECK_EQ(0, read_buf_unused_offset_);
diff --git a/net/http/http_stream_parser.h b/net/http/http_stream_parser.h
index e369032..afaf6c0 100644
--- a/net/http/http_stream_parser.h
+++ b/net/http/http_stream_parser.h
@@ -110,17 +110,16 @@
   // FOO_COMPLETE states implement the second half of potentially asynchronous
   // operations and don't necessarily mean that FOO is complete.
   enum State {
+    // STATE_NONE indicates that this is waiting on an external call before
+    // continuing.
     STATE_NONE,
-    STATE_SENDING_HEADERS,
-    // If the request comes with a body, either of the following two
-    // states will be executed, depending on whether the body is chunked
-    // or not.
-    STATE_SENDING_BODY,
-    STATE_SEND_REQUEST_READING_BODY,
-    STATE_REQUEST_SENT,
+    STATE_SEND_HEADERS,
+    STATE_SEND_HEADERS_COMPLETE,
+    STATE_SEND_BODY,
+    STATE_SEND_BODY_COMPLETE,
+    STATE_SEND_REQUEST_READ_BODY_COMPLETE,
     STATE_READ_HEADERS,
     STATE_READ_HEADERS_COMPLETE,
-    STATE_BODY_PENDING,
     STATE_READ_BODY,
     STATE_READ_BODY_COMPLETE,
     STATE_DONE
@@ -146,14 +145,19 @@
   int DoLoop(int result);
 
   // The implementations of each state of the state machine.
-  int DoSendHeaders(int result);
-  int DoSendBody(int result);
-  int DoSendRequestReadingBody(int result);
+  int DoSendHeaders();
+  int DoSendHeadersComplete(int result);
+  int DoSendBody();
+  int DoSendBodyComplete(int result);
+  int DoSendRequestReadBodyComplete(int result);
   int DoReadHeaders();
   int DoReadHeadersComplete(int result);
   int DoReadBody();
   int DoReadBodyComplete(int result);
 
+  // This handles most of the logic for DoReadHeadersComplete.
+  int HandleReadHeaderResult(int result);
+
   // Examines |read_buf_| to find the start and end of the headers. If they are
   // found, parse them with DoParseResponseHeaders().  Return the offset for
   // the end of the headers, or -1 if the complete headers were not found, or
@@ -167,15 +171,19 @@
   // Examine the parsed headers to try to determine the response body size.
   void CalculateResponseBodySize();
 
-  // Current state of the request.
+  // Next state of the request, when the current one completes.
   State io_state_;
 
   // The request to send.
   const HttpRequestInfo* request_;
 
-  // The request header data.
+  // The request header data.  May include a merged request body.
   scoped_refptr<DrainableIOBuffer> request_headers_;
 
+  // Size of just the request headers.  May be less than the length of
+  // |request_headers_| if the body was merged with the headers.
+  int request_headers_length_;
+
   // Temporary buffer for reading.
   scoped_refptr<GrowableIOBuffer> read_buf_;
 
@@ -235,6 +243,9 @@
   scoped_refptr<SeekableIOBuffer> request_body_send_buf_;
   bool sent_last_chunk_;
 
+  // Error received when uploading the body, if any.
+  int upload_error_;
+
   base::WeakPtrFactory<HttpStreamParser> weak_ptr_factory_;
 
   DISALLOW_COPY_AND_ASSIGN(HttpStreamParser);
diff --git a/net/http/transport_security_state_static.h b/net/http/transport_security_state_static.h
index 86ea604..9bc026b 100644
--- a/net/http/transport_security_state_static.h
+++ b/net/http/transport_security_state_static.h
@@ -944,6 +944,11 @@
   {18, false, "\006static\005wepay\003com", true, kNoPins, DOMAIN_NOT_PINNED },
   {17, false, "\005stage\005wepay\003com", true, kNoPins, DOMAIN_NOT_PINNED },
   {15, false, "\011vmoagents\003com", true, kNoPins, DOMAIN_NOT_PINNED },
+  {13, true, "\007adsfund\003org", true, kNoPins, DOMAIN_NOT_PINNED },
+  {9, false, "\004pult\002co", true, kNoPins, DOMAIN_NOT_PINNED },
+  {18, true, "\014dillonkorman\003com", true, kNoPins, DOMAIN_NOT_PINNED },
+  {12, true, "\006edmodo\003com", true, kNoPins, DOMAIN_NOT_PINNED },
+  {23, false, "\003www\013eternalgoth\002co\002uk", true, kNoPins, DOMAIN_NOT_PINNED },
 };
 static const size_t kNumPreloadedSTS = ARRAYSIZE_UNSAFE(kPreloadedSTS);
 
diff --git a/net/http/transport_security_state_static.json b/net/http/transport_security_state_static.json
index 3ad9089..7ae63ec 100644
--- a/net/http/transport_security_state_static.json
+++ b/net/http/transport_security_state_static.json
@@ -737,6 +737,11 @@
     { "name": "static.wepay.com", "mode": "force-https" },
     { "name": "stage.wepay.com", "mode": "force-https" },
     { "name": "vmoagents.com", "mode": "force-https" },
+    { "name": "adsfund.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "pult.co", "mode": "force-https" },
+    { "name": "dillonkorman.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "edmodo.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "www.eternalgoth.co.uk", "mode": "force-https" },
 
     // Entries that are only valid if the client supports SNI.
     { "name": "gmail.com", "mode": "force-https", "pins": "google", "snionly": true },
diff --git a/net/http_server.target.darwin-arm.mk b/net/http_server.target.darwin-arm.mk
index 98cbf50..007b194 100644
--- a/net/http_server.target.darwin-arm.mk
+++ b/net/http_server.target.darwin-arm.mk
@@ -229,7 +229,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/net/http_server.target.darwin-mips.mk b/net/http_server.target.darwin-mips.mk
index 84064bf..1be5c66 100644
--- a/net/http_server.target.darwin-mips.mk
+++ b/net/http_server.target.darwin-mips.mk
@@ -225,7 +225,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/net/http_server.target.darwin-x86.mk b/net/http_server.target.darwin-x86.mk
index 24294af..a315ea6 100644
--- a/net/http_server.target.darwin-x86.mk
+++ b/net/http_server.target.darwin-x86.mk
@@ -225,7 +225,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/net/http_server.target.darwin-x86_64.mk b/net/http_server.target.darwin-x86_64.mk
index f65a6a4..1794fd2 100644
--- a/net/http_server.target.darwin-x86_64.mk
+++ b/net/http_server.target.darwin-x86_64.mk
@@ -227,7 +227,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/net/http_server.target.linux-arm.mk b/net/http_server.target.linux-arm.mk
index 98cbf50..007b194 100644
--- a/net/http_server.target.linux-arm.mk
+++ b/net/http_server.target.linux-arm.mk
@@ -229,7 +229,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/net/http_server.target.linux-mips.mk b/net/http_server.target.linux-mips.mk
index 84064bf..1be5c66 100644
--- a/net/http_server.target.linux-mips.mk
+++ b/net/http_server.target.linux-mips.mk
@@ -225,7 +225,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/net/http_server.target.linux-x86.mk b/net/http_server.target.linux-x86.mk
index 24294af..a315ea6 100644
--- a/net/http_server.target.linux-x86.mk
+++ b/net/http_server.target.linux-x86.mk
@@ -225,7 +225,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/net/http_server.target.linux-x86_64.mk b/net/http_server.target.linux-x86_64.mk
index f65a6a4..1794fd2 100644
--- a/net/http_server.target.linux-x86_64.mk
+++ b/net/http_server.target.linux-x86_64.mk
@@ -227,7 +227,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/net/net.gyp b/net/net.gyp
index 95477e1..95498f6 100644
--- a/net/net.gyp
+++ b/net/net.gyp
@@ -300,11 +300,6 @@
             ],
           },
         ],
-        [ 'toolkit_uses_gtk == 1', {
-          'dependencies': [
-            '../build/linux/system.gyp:gdk',
-          ],
-        }],
         [ 'use_nss != 1', {
             'sources!': [
               'cert/cert_verify_proc_nss.cc',
@@ -536,12 +531,6 @@
             }],
           ],
         }],
-        [ 'toolkit_uses_gtk == 1', {
-            'dependencies': [
-              '../build/linux/system.gyp:gtk',
-            ],
-          },
-        ],
         [ 'os_posix == 1 and OS != "mac" and OS != "android" and OS != "ios"', {
           'conditions': [
             # TODO(dmikurube): Kill linux_use_tcmalloc. http://crbug.com/345554
@@ -1511,7 +1500,6 @@
           ],
           'variables': {
             'test_suite_name': 'net_unittests',
-            'input_shlib_path': '<(SHARED_LIB_DIR)/<(SHARED_LIB_PREFIX)net_unittests<(SHARED_LIB_SUFFIX)',
           },
           'includes': [ '../build/apk_test.gypi' ],
         },
diff --git a/net/net.gypi b/net/net.gypi
index 795236c..043e22e 100644
--- a/net/net.gypi
+++ b/net/net.gypi
@@ -2,6 +2,9 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
+# This file is shared between the regular GYP build, the NaCl GYP build, and
+# the GN build. For GN support, it must have no conditionals or anything like
+# that beyond the simple one-level-deep dictionary of values.
 {
   'variables': {
     # Subset of net source files that are compiled for NaCl (net_nacl target).
@@ -896,6 +899,8 @@
       'quic/quic_fec_group.h',
       'quic/quic_flags.cc',
       'quic/quic_flags.h',
+      'quic/quic_flow_controller.cc',
+      'quic/quic_flow_controller.h',
       'quic/quic_framer.cc',
       'quic/quic_framer.h',
       'quic/quic_headers_stream.cc',
@@ -1433,6 +1438,7 @@
       'quic/congestion_control/paced_sender_test.cc',
       'quic/congestion_control/pacing_sender_test.cc',
       'quic/congestion_control/quic_max_sized_map_test.cc',
+      'quic/congestion_control/rtt_stats_test.cc',
       'quic/congestion_control/tcp_cubic_sender_test.cc',
       'quic/congestion_control/tcp_loss_algorithm_test.cc',
       'quic/congestion_control/tcp_receiver_test.cc',
@@ -1477,10 +1483,14 @@
       'quic/test_tools/mock_random.h',
       'quic/test_tools/quic_client_session_peer.cc',
       'quic/test_tools/quic_client_session_peer.h',
+      'quic/test_tools/quic_config_peer.cc',
+      'quic/test_tools/quic_config_peer.h',
       'quic/test_tools/quic_connection_peer.cc',
       'quic/test_tools/quic_connection_peer.h',
       'quic/test_tools/quic_data_stream_peer.cc',
       'quic/test_tools/quic_data_stream_peer.h',
+      'quic/test_tools/quic_flow_controller_peer.cc',
+      'quic/test_tools/quic_flow_controller_peer.h',
       'quic/test_tools/quic_framer_peer.cc',
       'quic/test_tools/quic_framer_peer.h',
       'quic/test_tools/quic_packet_creator_peer.cc',
@@ -1516,6 +1526,7 @@
       'quic/quic_data_stream_test.cc',
       'quic/quic_data_writer_test.cc',
       'quic/quic_fec_group_test.cc',
+      'quic/quic_flow_controller_test.cc',
       'quic/quic_framer_test.cc',
       'quic/quic_headers_stream_test.cc',
       'quic/quic_http_stream_test.cc',
diff --git a/net/net.target.darwin-arm.mk b/net/net.target.darwin-arm.mk
index 48554de..b877e4f 100644
--- a/net/net.target.darwin-arm.mk
+++ b/net/net.target.darwin-arm.mk
@@ -381,6 +381,7 @@
 	net/quic/quic_default_packet_writer.cc \
 	net/quic/quic_fec_group.cc \
 	net/quic/quic_flags.cc \
+	net/quic/quic_flow_controller.cc \
 	net/quic/quic_framer.cc \
 	net/quic/quic_headers_stream.cc \
 	net/quic/quic_http_stream.cc \
@@ -744,7 +745,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/net/net.target.darwin-mips.mk b/net/net.target.darwin-mips.mk
index 6d7eb0a..c2a8f21 100644
--- a/net/net.target.darwin-mips.mk
+++ b/net/net.target.darwin-mips.mk
@@ -381,6 +381,7 @@
 	net/quic/quic_default_packet_writer.cc \
 	net/quic/quic_fec_group.cc \
 	net/quic/quic_flags.cc \
+	net/quic/quic_flow_controller.cc \
 	net/quic/quic_framer.cc \
 	net/quic/quic_headers_stream.cc \
 	net/quic/quic_http_stream.cc \
@@ -740,7 +741,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/net/net.target.darwin-x86.mk b/net/net.target.darwin-x86.mk
index b227cc2..8024fcc 100644
--- a/net/net.target.darwin-x86.mk
+++ b/net/net.target.darwin-x86.mk
@@ -381,6 +381,7 @@
 	net/quic/quic_default_packet_writer.cc \
 	net/quic/quic_fec_group.cc \
 	net/quic/quic_flags.cc \
+	net/quic/quic_flow_controller.cc \
 	net/quic/quic_framer.cc \
 	net/quic/quic_headers_stream.cc \
 	net/quic/quic_http_stream.cc \
@@ -740,7 +741,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/net/net.target.darwin-x86_64.mk b/net/net.target.darwin-x86_64.mk
index 708aba5..326c3c5 100644
--- a/net/net.target.darwin-x86_64.mk
+++ b/net/net.target.darwin-x86_64.mk
@@ -381,6 +381,7 @@
 	net/quic/quic_default_packet_writer.cc \
 	net/quic/quic_fec_group.cc \
 	net/quic/quic_flags.cc \
+	net/quic/quic_flow_controller.cc \
 	net/quic/quic_framer.cc \
 	net/quic/quic_headers_stream.cc \
 	net/quic/quic_http_stream.cc \
@@ -744,7 +745,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/net/net.target.linux-arm.mk b/net/net.target.linux-arm.mk
index 48554de..b877e4f 100644
--- a/net/net.target.linux-arm.mk
+++ b/net/net.target.linux-arm.mk
@@ -381,6 +381,7 @@
 	net/quic/quic_default_packet_writer.cc \
 	net/quic/quic_fec_group.cc \
 	net/quic/quic_flags.cc \
+	net/quic/quic_flow_controller.cc \
 	net/quic/quic_framer.cc \
 	net/quic/quic_headers_stream.cc \
 	net/quic/quic_http_stream.cc \
@@ -744,7 +745,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/net/net.target.linux-mips.mk b/net/net.target.linux-mips.mk
index 6d7eb0a..c2a8f21 100644
--- a/net/net.target.linux-mips.mk
+++ b/net/net.target.linux-mips.mk
@@ -381,6 +381,7 @@
 	net/quic/quic_default_packet_writer.cc \
 	net/quic/quic_fec_group.cc \
 	net/quic/quic_flags.cc \
+	net/quic/quic_flow_controller.cc \
 	net/quic/quic_framer.cc \
 	net/quic/quic_headers_stream.cc \
 	net/quic/quic_http_stream.cc \
@@ -740,7 +741,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/net/net.target.linux-x86.mk b/net/net.target.linux-x86.mk
index b227cc2..8024fcc 100644
--- a/net/net.target.linux-x86.mk
+++ b/net/net.target.linux-x86.mk
@@ -381,6 +381,7 @@
 	net/quic/quic_default_packet_writer.cc \
 	net/quic/quic_fec_group.cc \
 	net/quic/quic_flags.cc \
+	net/quic/quic_flow_controller.cc \
 	net/quic/quic_framer.cc \
 	net/quic/quic_headers_stream.cc \
 	net/quic/quic_http_stream.cc \
@@ -740,7 +741,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/net/net.target.linux-x86_64.mk b/net/net.target.linux-x86_64.mk
index 708aba5..326c3c5 100644
--- a/net/net.target.linux-x86_64.mk
+++ b/net/net.target.linux-x86_64.mk
@@ -381,6 +381,7 @@
 	net/quic/quic_default_packet_writer.cc \
 	net/quic/quic_fec_group.cc \
 	net/quic/quic_flags.cc \
+	net/quic/quic_flow_controller.cc \
 	net/quic/quic_framer.cc \
 	net/quic/quic_headers_stream.cc \
 	net/quic/quic_http_stream.cc \
@@ -744,7 +745,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/net/proxy/multi_threaded_proxy_resolver.cc b/net/proxy/multi_threaded_proxy_resolver.cc
index 07d2d6a..cab22ab 100644
--- a/net/proxy/multi_threaded_proxy_resolver.cc
+++ b/net/proxy/multi_threaded_proxy_resolver.cc
@@ -314,11 +314,8 @@
   DCHECK(coordinator);
   DCHECK(resolver);
   // Start up the thread.
-  // Note that it is safe to pass a temporary C-String to Thread(), as it will
-  // make a copy.
-  std::string thread_name =
-      base::StringPrintf("PAC thread #%d", thread_number);
-  thread_.reset(new base::Thread(thread_name.c_str()));
+  thread_.reset(new base::Thread(base::StringPrintf("PAC thread #%d",
+                                                    thread_number)));
   CHECK(thread_->Start());
 }
 
diff --git a/net/quic/congestion_control/available_channel_estimator.h b/net/quic/congestion_control/available_channel_estimator.h
index e2ad19a..c6c8b33 100644
--- a/net/quic/congestion_control/available_channel_estimator.h
+++ b/net/quic/congestion_control/available_channel_estimator.h
@@ -58,6 +58,8 @@
   QuicTime last_receive_time_;
   int number_of_sequence_numbers_;
   QuicByteCount received_bytes_;
+
+  DISALLOW_COPY_AND_ASSIGN(AvailableChannelEstimator);
 };
 
 }  // namespace net
diff --git a/net/quic/congestion_control/cube_root.h b/net/quic/congestion_control/cube_root.h
index 3b3736c..293a719 100644
--- a/net/quic/congestion_control/cube_root.h
+++ b/net/quic/congestion_control/cube_root.h
@@ -15,6 +15,9 @@
   // Calculates the cube root using a table lookup followed by one Newton-
   // Raphson iteration.
   static uint32 Root(uint64 a);
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(CubeRoot);
 };
 
 }  // namespace net
diff --git a/net/quic/congestion_control/hybrid_slow_start.cc b/net/quic/congestion_control/hybrid_slow_start.cc
index 9325ca4..2ae3b50 100644
--- a/net/quic/congestion_control/hybrid_slow_start.cc
+++ b/net/quic/congestion_control/hybrid_slow_start.cc
@@ -6,8 +6,6 @@
 
 #include <algorithm>
 
-#include "net/quic/congestion_control/rtt_stats.h"
-
 using std::max;
 using std::min;
 
@@ -17,74 +15,49 @@
 // tcp_cubic.c.
 const int64 kHybridStartLowWindow = 16;
 // Number of delay samples for detecting the increase of delay.
-const int kHybridStartMinSamples = 8;
+const uint32 kHybridStartMinSamples = 8;
 const int kHybridStartDelayFactorExp = 4;  // 2^4 = 16
-const int kHybridStartDelayMinThresholdUs = 2000;
+// The original paper specifies 2 and 8ms, but those have changed over time.
+const int kHybridStartDelayMinThresholdUs = 4000;
 const int kHybridStartDelayMaxThresholdUs = 16000;
 
 HybridSlowStart::HybridSlowStart(const QuicClock* clock)
     : clock_(clock),
       started_(false),
-      found_ack_train_(false),
-      found_delay_(false),
+      hystart_found_(NOT_FOUND),
+      last_sent_sequence_number_(0),
       round_start_(QuicTime::Zero()),
-      update_end_sequence_number_(true),
-      sender_end_sequence_number_(0),
       end_sequence_number_(0),
-      last_time_(QuicTime::Zero()),
-      sample_count_(0),
-      current_rtt_(QuicTime::Delta::Zero()) {
+      last_close_ack_pair_time_(QuicTime::Zero()),
+      rtt_sample_count_(0),
+      current_min_rtt_(QuicTime::Delta::Zero()) {
 }
 
 void HybridSlowStart::OnPacketAcked(
     QuicPacketSequenceNumber acked_sequence_number, bool in_slow_start) {
-  if (in_slow_start) {
-    if (IsEndOfRound(acked_sequence_number)) {
-      Reset(sender_end_sequence_number_);
-    }
-  }
-
-  if (sender_end_sequence_number_ == acked_sequence_number) {
-    DVLOG(1) << "Start update end sequence number @" << acked_sequence_number;
-    update_end_sequence_number_ = true;
+  // OnPacketAcked gets invoked after ShouldExitSlowStart, so it's best to end
+  // the round when the final packet of the burst is received and start it on
+  // the next incoming ack.
+  if (in_slow_start && IsEndOfRound(acked_sequence_number)) {
+    started_ = false;
   }
 }
 
-void HybridSlowStart::OnPacketSent(QuicPacketSequenceNumber sequence_number,
-                                   QuicByteCount available_send_window) {
-  if (update_end_sequence_number_) {
-    sender_end_sequence_number_ = sequence_number;
-    if (available_send_window == 0) {
-      update_end_sequence_number_ = false;
-      DVLOG(1) << "Stop update end sequence number @" << sequence_number;
-    }
-  }
-}
-
-bool HybridSlowStart::ShouldExitSlowStart(const RttStats* rtt_stats,
-                                          int64 congestion_window) {
-  if (congestion_window < kHybridStartLowWindow) {
-    return false;
-  }
-  if (!started()) {
-    // Time to start the hybrid slow start.
-    Reset(sender_end_sequence_number_);
-  }
-  Update(rtt_stats->latest_rtt(), rtt_stats->min_rtt());
-  return Exit();
+void HybridSlowStart::OnPacketSent(QuicPacketSequenceNumber sequence_number) {
+  last_sent_sequence_number_ = sequence_number;
 }
 
 void HybridSlowStart::Restart() {
-  found_ack_train_ = false;
-  found_delay_  = false;
+  started_ = false;
+  hystart_found_ = NOT_FOUND;
 }
 
-void HybridSlowStart::Reset(QuicPacketSequenceNumber end_sequence_number) {
-  DVLOG(1) << "Reset hybrid slow start @" << end_sequence_number;
-  round_start_ = last_time_ = clock_->ApproximateNow();
-  end_sequence_number_ = end_sequence_number;
-  current_rtt_ = QuicTime::Delta::Zero();
-  sample_count_ = 0;
+void HybridSlowStart::StartReceiveRound(QuicPacketSequenceNumber last_sent) {
+  DVLOG(1) << "Reset hybrid slow start @" << last_sent;
+  round_start_ = last_close_ack_pair_time_ = clock_->ApproximateNow();
+  end_sequence_number_ = last_sent;
+  current_min_rtt_ = QuicTime::Delta::Zero();
+  rtt_sample_count_ = 0;
   started_ = true;
 }
 
@@ -92,64 +65,74 @@
   return end_sequence_number_ <= ack;
 }
 
-void HybridSlowStart::Update(QuicTime::Delta rtt, QuicTime::Delta delay_min) {
-  // The original code doesn't invoke this until we hit 16 packet per burst.
-  // Since the code handles lower than 16 grecefully and I removed that
-  // limit.
-  if (found_ack_train_ || found_delay_) {
-    return;
+bool HybridSlowStart::ShouldExitSlowStart(QuicTime::Delta latest_rtt,
+                                          QuicTime::Delta min_rtt,
+                                          int64 congestion_window) {
+  if (!started_) {
+    // Time to start the hybrid slow start.
+    StartReceiveRound(last_sent_sequence_number_);
+  }
+  if (hystart_found_ != NOT_FOUND) {
+    return true;
   }
   QuicTime current_time = clock_->ApproximateNow();
 
   // First detection parameter - ack-train detection.
   // Since slow start burst out packets we can indirectly estimate the inter-
   // arrival time by looking at the arrival time of the ACKs if the ACKs are
-  // spread out more then half the minimum RTT packets are beeing spread out
+  // spread out more then half the minimum RTT packets are being spread out
   // more than the capacity.
-  // This first trigger will not come into play until we hit roughly 4.8 Mbit/s.
+  // This first trigger will not come into play until we hit roughly 9.6 Mbps
+  // with delayed acks (or 4.8Mbps without delayed acks)
+  // TODO(ianswett): QUIC always uses delayed acks, even at the beginning, so
+  // this should likely be at least 4ms.
   // TODO(pwestin): we need to make sure our pacing don't trigger this detector.
-  if (current_time.Subtract(last_time_).ToMicroseconds() <=
-      kHybridStartDelayMinThresholdUs) {
-    last_time_ = current_time;
+  // TODO(ianswett): Pacing or other cases could be handled by checking the send
+  // time of the first acked packet in a receive round.
+  if (current_time.Subtract(last_close_ack_pair_time_).ToMicroseconds() <=
+          kHybridStartDelayMinThresholdUs) {
+    last_close_ack_pair_time_ = current_time;
     if (current_time.Subtract(round_start_).ToMicroseconds() >=
-        (delay_min.ToMicroseconds() >> 1)) {
-      found_ack_train_ = true;
+            min_rtt.ToMicroseconds() >> 1) {
+      hystart_found_ = ACK_TRAIN;
     }
+  } else if (last_close_ack_pair_time_ == round_start_) {
+    // If the previous ack wasn't close, then move forward the round start time
+    // to the incoming ack.
+    last_close_ack_pair_time_ = round_start_ = current_time;
   }
   // Second detection parameter - delay increase detection.
-  // Compare the minimum delay (current_rtt_) of the current
+  // Compare the minimum delay (current_min_rtt_) of the current
   // burst of packets relative to the minimum delay during the session.
   // Note: we only look at the first few(8) packets in each burst, since we
   // only want to compare the lowest RTT of the burst relative to previous
   // bursts.
-  sample_count_++;
-  if (sample_count_ <= kHybridStartMinSamples) {
-    if (current_rtt_.IsZero() || current_rtt_ > rtt) {
-      current_rtt_ = rtt;
+  rtt_sample_count_++;
+  if (rtt_sample_count_ <= kHybridStartMinSamples) {
+    if (current_min_rtt_.IsZero() || current_min_rtt_ > latest_rtt) {
+      current_min_rtt_ = latest_rtt;
     }
   }
-  // We only need to check this once.
-  if (sample_count_ == kHybridStartMinSamples) {
-    int accepted_variance_us = delay_min.ToMicroseconds() >>
+  // We only need to check this once per round.
+  if (rtt_sample_count_ == kHybridStartMinSamples) {
+    // Divide min_rtt by 16 to get a rtt increase threshold for exiting.
+    int min_rtt_increase_threshold_us = min_rtt.ToMicroseconds() >>
         kHybridStartDelayFactorExp;
-    accepted_variance_us = min(accepted_variance_us,
-                               kHybridStartDelayMaxThresholdUs);
-    QuicTime::Delta accepted_variance = QuicTime::Delta::FromMicroseconds(
-        max(accepted_variance_us, kHybridStartDelayMinThresholdUs));
+    // Ensure the rtt threshold is never less than 2ms or more than 16ms.
+    min_rtt_increase_threshold_us = min(min_rtt_increase_threshold_us,
+                                        kHybridStartDelayMaxThresholdUs);
+    QuicTime::Delta min_rtt_increase_threshold =
+        QuicTime::Delta::FromMicroseconds(max(min_rtt_increase_threshold_us,
+                                              kHybridStartDelayMinThresholdUs));
 
-    if (current_rtt_ > delay_min.Add(accepted_variance)) {
-      found_delay_ = true;
+    if (current_min_rtt_ > min_rtt.Add(min_rtt_increase_threshold)) {
+      hystart_found_= DELAY;
     }
   }
-}
-
-bool HybridSlowStart::Exit() {
-  // If either one of the two conditions are met we exit from slow start
-  // immediately.
-  if (found_ack_train_ || found_delay_) {
-    return true;
-  }
-  return false;
+  // Exit from slow start if the cwnd is greater than 16 and an ack train or
+  // increasing delay are found.
+  return congestion_window >= kHybridStartLowWindow &&
+      hystart_found_ != NOT_FOUND;
 }
 
 }  // namespace net
diff --git a/net/quic/congestion_control/hybrid_slow_start.h b/net/quic/congestion_control/hybrid_slow_start.h
index e41eba9..5d36c53 100644
--- a/net/quic/congestion_control/hybrid_slow_start.h
+++ b/net/quic/congestion_control/hybrid_slow_start.h
@@ -22,8 +22,6 @@
 
 namespace net {
 
-class RttStats;
-
 class NET_EXPORT_PRIVATE HybridSlowStart {
  public:
   explicit HybridSlowStart(const QuicClock* clock);
@@ -31,47 +29,58 @@
   void OnPacketAcked(QuicPacketSequenceNumber acked_sequence_number,
                      bool in_slow_start);
 
-  void OnPacketSent(QuicPacketSequenceNumber sequence_number,
-                    QuicByteCount available_send_window);
+  void OnPacketSent(QuicPacketSequenceNumber sequence_number);
 
-  bool ShouldExitSlowStart(const RttStats* rtt_stats,
+  // ShouldExitSlowStart should be called on every new ack frame, since a new
+  // RTT measurement can be made then.
+  // rtt: the RTT for this ack packet.
+  // min_rtt: is the lowest delay (RTT) we have seen during the session.
+  // congestion_window: the congestion window in packets.
+  bool ShouldExitSlowStart(QuicTime::Delta rtt,
+                           QuicTime::Delta min_rtt,
                            int64 congestion_window);
 
-  // TODO(ianswett): The following methods should be private, but that requires
-  // a follow up CL to update the unit test.
   // Start a new slow start phase.
   void Restart();
 
+  // TODO(ianswett): The following methods should be private, but that requires
+  // a follow up CL to update the unit test.
   // Returns true if this ack the last sequence number of our current slow start
   // round.
   // Call Reset if this returns true.
   bool IsEndOfRound(QuicPacketSequenceNumber ack) const;
 
-  // Call for each round (burst) in the slow start phase.
-  void Reset(QuicPacketSequenceNumber end_sequence_number);
+  // Call for the start of each receive round (burst) in the slow start phase.
+  void StartReceiveRound(QuicPacketSequenceNumber last_sent);
 
-  // rtt: it the RTT for this ack packet.
-  // delay_min: is the lowest delay (RTT) we have seen during the session.
-  void Update(QuicTime::Delta rtt, QuicTime::Delta delay_min);
-
-  // Returns true when we should exit slow start.
-  bool Exit();
-
-  bool started() const { return started_; }
+  // Whether slow start has started.
+  bool started() const {
+    return started_;
+  }
 
  private:
+  // Whether a condition for exiting slow start has been found.
+  enum HystartState {
+    NOT_FOUND,
+    ACK_TRAIN,  // A closely spaced ack train is too long.
+    DELAY,  // Too much increase in the round's min_rtt was observed.
+  };
+
   const QuicClock* clock_;
+  // Whether the hybrid slow start has been started.
   bool started_;
-  bool found_ack_train_;
-  bool found_delay_;
-  QuicTime round_start_;  // Beginning of each slow start round.
-  // We need to keep track of the end sequence number of each RTT "burst".
-  bool update_end_sequence_number_;
-  QuicPacketSequenceNumber sender_end_sequence_number_;
-  QuicPacketSequenceNumber end_sequence_number_;  // End of slow start round.
-  QuicTime last_time_;  // Last time when the ACK spacing was close.
-  uint8 sample_count_;  // Number of samples to decide current RTT.
-  QuicTime::Delta current_rtt_;  // The minimum rtt of current round.
+  HystartState hystart_found_;
+  // Last sequence number sent which was CWND limited.
+  QuicPacketSequenceNumber last_sent_sequence_number_;
+
+  // Variables for tracking acks received during a slow start round.
+  QuicTime round_start_;  // Beginning of each slow start receive round.
+  QuicPacketSequenceNumber end_sequence_number_;  // End of the receive round.
+  // Last time when the spacing between ack arrivals was less than 2 ms.
+  // Defaults to the beginning of the round.
+  QuicTime last_close_ack_pair_time_;
+  uint32 rtt_sample_count_;  // Number of rtt samples in the current round.
+  QuicTime::Delta current_min_rtt_;  // The minimum rtt of current round.
 
   DISALLOW_COPY_AND_ASSIGN(HybridSlowStart);
 };
diff --git a/net/quic/congestion_control/hybrid_slow_start_test.cc b/net/quic/congestion_control/hybrid_slow_start_test.cc
index ee572bd..f07dd21 100644
--- a/net/quic/congestion_control/hybrid_slow_start_test.cc
+++ b/net/quic/congestion_control/hybrid_slow_start_test.cc
@@ -29,7 +29,7 @@
 TEST_F(HybridSlowStartTest, Simple) {
   QuicPacketSequenceNumber sequence_number = 1;
   QuicPacketSequenceNumber end_sequence_number = 3;
-  slowStart_->Reset(end_sequence_number);
+  slowStart_->StartReceiveRound(end_sequence_number);
 
   EXPECT_FALSE(slowStart_->IsEndOfRound(sequence_number++));
 
@@ -43,13 +43,15 @@
   EXPECT_TRUE(slowStart_->IsEndOfRound(sequence_number++));
 
   end_sequence_number = 20;
-  slowStart_->Reset(end_sequence_number);
+  slowStart_->StartReceiveRound(end_sequence_number);
   while (sequence_number < end_sequence_number) {
     EXPECT_FALSE(slowStart_->IsEndOfRound(sequence_number++));
   }
   EXPECT_TRUE(slowStart_->IsEndOfRound(sequence_number++));
 }
 
+// TODO(ianswett): Add tests which more realistically invoke the methods,
+// simulating how actual acks arrive and packets are sent.
 TEST_F(HybridSlowStartTest, AckTrain) {
   // At a typical RTT 60 ms, assuming that the inter arrival is 1 ms,
   // we expect to be able to send a burst of 30 packet before we trigger the
@@ -58,24 +60,21 @@
   QuicPacketSequenceNumber sequence_number = 2;
   QuicPacketSequenceNumber end_sequence_number = 2;
   for (int burst = 0; burst < kMaxLoopCount; ++burst) {
-    slowStart_->Reset(end_sequence_number);
+    slowStart_->StartReceiveRound(end_sequence_number);
     do {
       clock_.AdvanceTime(one_ms_);
-      slowStart_->Update(rtt_, rtt_);
-      EXPECT_FALSE(slowStart_->Exit());
+      EXPECT_FALSE(slowStart_->ShouldExitSlowStart(rtt_, rtt_, 100));
     }  while (!slowStart_->IsEndOfRound(sequence_number++));
     end_sequence_number *= 2;  // Exponential growth.
   }
-  slowStart_->Reset(end_sequence_number);
+  slowStart_->StartReceiveRound(end_sequence_number);
 
   for (int n = 0; n < 29 && !slowStart_->IsEndOfRound(sequence_number++); ++n) {
     clock_.AdvanceTime(one_ms_);
-    slowStart_->Update(rtt_, rtt_);
-    EXPECT_FALSE(slowStart_->Exit());
+    EXPECT_FALSE(slowStart_->ShouldExitSlowStart(rtt_, rtt_, 100));
   }
   clock_.AdvanceTime(one_ms_);
-  slowStart_->Update(rtt_, rtt_);
-  EXPECT_TRUE(slowStart_->Exit());
+  EXPECT_TRUE(slowStart_->ShouldExitSlowStart(rtt_, rtt_, 100));
 }
 
 TEST_F(HybridSlowStartTest, Delay) {
@@ -84,24 +83,23 @@
   const int kHybridStartMinSamples = 8;  // Number of acks required to trigger.
 
   QuicPacketSequenceNumber end_sequence_number = 1;
-  slowStart_->Reset(end_sequence_number++);
+  slowStart_->StartReceiveRound(end_sequence_number++);
 
   // Will not trigger since our lowest RTT in our burst is the same as the long
   // term RTT provided.
   for (int n = 0; n < kHybridStartMinSamples; ++n) {
-    slowStart_->Update(rtt_.Add(QuicTime::Delta::FromMilliseconds(n)), rtt_);
-    EXPECT_FALSE(slowStart_->Exit());
+    EXPECT_FALSE(slowStart_->ShouldExitSlowStart(
+        rtt_.Add(QuicTime::Delta::FromMilliseconds(n)), rtt_, 100));
   }
-  slowStart_->Reset(end_sequence_number++);
+  slowStart_->StartReceiveRound(end_sequence_number++);
   for (int n = 1; n < kHybridStartMinSamples; ++n) {
-    slowStart_->Update(rtt_.Add(QuicTime::Delta::FromMilliseconds(n + 4)),
-                       rtt_);
-    EXPECT_FALSE(slowStart_->Exit());
+    EXPECT_FALSE(slowStart_->ShouldExitSlowStart(
+        rtt_.Add(QuicTime::Delta::FromMilliseconds(n + 5)), rtt_, 100));
   }
   // Expect to trigger since all packets in this burst was above the long term
   // RTT provided.
-  slowStart_->Update(rtt_.Add(QuicTime::Delta::FromMilliseconds(4)), rtt_);
-  EXPECT_TRUE(slowStart_->Exit());
+  EXPECT_TRUE(slowStart_->ShouldExitSlowStart(
+      rtt_.Add(QuicTime::Delta::FromMilliseconds(5)), rtt_, 100));
 }
 
 }  // namespace test
diff --git a/net/quic/congestion_control/inter_arrival_sender.cc b/net/quic/congestion_control/inter_arrival_sender.cc
index 864db7d..0436c20 100644
--- a/net/quic/congestion_control/inter_arrival_sender.cc
+++ b/net/quic/congestion_control/inter_arrival_sender.cc
@@ -312,7 +312,8 @@
 }
 
 QuicByteCount InterArrivalSender::GetCongestionWindow() const {
-  return 0;
+  // Return an estimate based on the bandwidth and rtt.
+  return BandwidthEstimate().ToBytesPerPeriod(rtt_stats_->SmoothedRtt());
 }
 
 void InterArrivalSender::EstimateNewBandwidth(QuicTime feedback_receive_time,
diff --git a/net/quic/congestion_control/rtt_stats.cc b/net/quic/congestion_control/rtt_stats.cc
index 4161859..0b4d165 100644
--- a/net/quic/congestion_control/rtt_stats.cc
+++ b/net/quic/congestion_control/rtt_stats.cc
@@ -20,15 +20,22 @@
 RttStats::RttStats()
     : latest_rtt_(QuicTime::Delta::Zero()),
       min_rtt_(QuicTime::Delta::Zero()),
+      recent_min_rtt_(QuicTime::Delta::Zero()),
       smoothed_rtt_(QuicTime::Delta::Zero()),
       mean_deviation_(QuicTime::Delta::Zero()),
-      initial_rtt_us_(kInitialRttMs * base::Time::kMicrosecondsPerMillisecond) {
-}
+      initial_rtt_us_(kInitialRttMs * base::Time::kMicrosecondsPerMillisecond),
+      new_min_rtt_(QuicTime::Delta::Zero()),
+      num_min_rtt_samples_remaining_(0) { }
 
 bool RttStats::HasUpdates() const {
   return !smoothed_rtt_.IsZero();
 }
 
+void RttStats::SampleNewRecentMinRtt(uint32 num_samples) {
+  num_min_rtt_samples_remaining_ = num_samples;
+  new_min_rtt_ = QuicTime::Delta::Zero();
+}
+
 // Updates the RTT based on a new sample.
 void RttStats::UpdateRtt(QuicTime::Delta send_delta,
                          QuicTime::Delta ack_delay) {
@@ -55,6 +62,19 @@
   if (min_rtt_.IsZero() || min_rtt_ > rtt_sample) {
     min_rtt_ = rtt_sample;
   }
+  if (recent_min_rtt_.IsZero() || recent_min_rtt_ > rtt_sample) {
+    recent_min_rtt_ = rtt_sample;
+  }
+  // Recent min_rtt update.
+  if (num_min_rtt_samples_remaining_ > 0) {
+    --num_min_rtt_samples_remaining_;
+    if (new_min_rtt_.IsZero() || new_min_rtt_ > rtt_sample) {
+      new_min_rtt_ = rtt_sample;
+    }
+    if (num_min_rtt_samples_remaining_ == 0) {
+      recent_min_rtt_ = new_min_rtt_;
+    }
+  }
   // First time call.
   if (!HasUpdates()) {
     smoothed_rtt_ = rtt_sample;
diff --git a/net/quic/congestion_control/rtt_stats.h b/net/quic/congestion_control/rtt_stats.h
index 6e04498..a7f389d 100644
--- a/net/quic/congestion_control/rtt_stats.h
+++ b/net/quic/congestion_control/rtt_stats.h
@@ -26,8 +26,16 @@
   // the packet is sent and the peer reports the ack being delayed |ack_delay|.
   void UpdateRtt(QuicTime::Delta send_delta, QuicTime::Delta ack_delay);
 
+  // Forces RttStats to sample a new recent min rtt within the next
+  // |num_samples| UpdateRtt calls.
+  void SampleNewRecentMinRtt(uint32 num_samples);
+
   QuicTime::Delta SmoothedRtt() const;
 
+  int64 initial_rtt_us() const {
+    return initial_rtt_us_;
+  }
+
   // Sets an initial RTT to be used for SmoothedRtt before any RTT updates.
   void set_initial_rtt_us(int64 initial_rtt_us) {
     initial_rtt_us_ = initial_rtt_us;
@@ -37,10 +45,17 @@
     return latest_rtt_;
   }
 
+  // Returns the min_rtt for the entire connection.
   QuicTime::Delta min_rtt() const {
     return min_rtt_;
   }
 
+  // Returns the min_rtt since SampleNewRecentMinRtt has been called, or the
+  // min_rtt for the entire connection if SampleNewMinRtt was never called.
+  QuicTime::Delta recent_min_rtt() const {
+    return recent_min_rtt_;
+  }
+
   QuicTime::Delta mean_deviation() const {
     return mean_deviation_;
   }
@@ -48,12 +63,18 @@
  private:
   QuicTime::Delta latest_rtt_;
   QuicTime::Delta min_rtt_;
+  QuicTime::Delta recent_min_rtt_;
   QuicTime::Delta smoothed_rtt_;
   // Mean RTT deviation during this session.
   // Approximation of standard deviation, the error is roughly 1.25 times
   // larger than the standard deviation, for a normally distributed signal.
   QuicTime::Delta mean_deviation_;
   int64 initial_rtt_us_;
+
+  QuicTime::Delta new_min_rtt_;
+  uint32 num_min_rtt_samples_remaining_;
+
+  DISALLOW_COPY_AND_ASSIGN(RttStats);
 };
 
 }  // namespace net
diff --git a/net/quic/congestion_control/rtt_stats_test.cc b/net/quic/congestion_control/rtt_stats_test.cc
new file mode 100644
index 0000000..bd85b34
--- /dev/null
+++ b/net/quic/congestion_control/rtt_stats_test.cc
@@ -0,0 +1,51 @@
+// 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.
+
+#include "net/quic/congestion_control/rtt_stats.h"
+
+#include "base/logging.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace net {
+namespace test {
+
+class RttStatsTest : public ::testing::Test {
+ protected:
+  RttStats rtt_stats_;
+};
+
+TEST_F(RttStatsTest, MinRtt) {
+  rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(100),
+                       QuicTime::Delta::Zero());
+  EXPECT_EQ(QuicTime::Delta::FromMilliseconds(100), rtt_stats_.min_rtt());
+  rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(10),
+                       QuicTime::Delta::Zero());
+  EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.min_rtt());
+  rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(50),
+                       QuicTime::Delta::Zero());
+  EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.min_rtt());
+}
+
+TEST_F(RttStatsTest, RecentMinRtt) {
+  rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(10),
+                       QuicTime::Delta::Zero());
+  EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.min_rtt());
+  EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.recent_min_rtt());
+
+  rtt_stats_.SampleNewRecentMinRtt(4);
+  for (int i = 0; i < 3; ++i) {
+    rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(50),
+                       QuicTime::Delta::Zero());
+    EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.min_rtt());
+    EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10),
+              rtt_stats_.recent_min_rtt());
+  }
+  rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(50),
+                        QuicTime::Delta::Zero());
+  EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), rtt_stats_.min_rtt());
+  EXPECT_EQ(QuicTime::Delta::FromMilliseconds(50), rtt_stats_.recent_min_rtt());
+}
+
+}  // namespace test
+}  // namespace net
diff --git a/net/quic/congestion_control/tcp_cubic_sender.cc b/net/quic/congestion_control/tcp_cubic_sender.cc
index b08e3c6..9ce5830 100644
--- a/net/quic/congestion_control/tcp_cubic_sender.cc
+++ b/net/quic/congestion_control/tcp_cubic_sender.cc
@@ -34,6 +34,7 @@
     : hybrid_slow_start_(clock),
       cubic_(clock, stats),
       rtt_stats_(rtt_stats),
+      stats_(stats),
       reno_(reno),
       congestion_window_count_(0),
       receive_window_(kDefaultReceiveWindow),
@@ -47,6 +48,7 @@
       largest_sent_at_last_cutback_(0),
       congestion_window_(kInitialCongestionWindow),
       slowstart_threshold_(max_tcp_congestion_window),
+      last_cutback_exited_slowstart_(false),
       max_tcp_congestion_window_(max_tcp_congestion_window) {
 }
 
@@ -59,9 +61,10 @@
 }
 
 void TcpCubicSender::SetFromConfig(const QuicConfig& config, bool is_server) {
-  if (is_server) {
+  if (is_server && config.HasReceivedInitialCongestionWindow()) {
     // Set the initial window size.
-    congestion_window_ = config.server_initial_congestion_window();
+    congestion_window_ = min(kMaxInitialWindow,
+                             config.ReceivedInitialCongestionWindow());
   }
 }
 
@@ -75,10 +78,12 @@
     QuicPacketSequenceNumber acked_sequence_number, QuicByteCount acked_bytes) {
   DCHECK_GE(bytes_in_flight_, acked_bytes);
   bytes_in_flight_ -= acked_bytes;
-  prr_delivered_ += acked_bytes;
-  ++ack_count_since_loss_;
   largest_acked_sequence_number_ = max(acked_sequence_number,
                                        largest_acked_sequence_number_);
+  if (InRecovery()) {
+    PrrOnPacketAcked(acked_bytes);
+    return;
+  }
   MaybeIncreaseCwnd(acked_sequence_number);
   // TODO(ianswett): Should this even be called when not in slow start?
   hybrid_slow_start_.OnPacketAcked(acked_sequence_number, InSlowStart());
@@ -89,22 +94,19 @@
   // TCP NewReno (RFC6582) says that once a loss occurs, any losses in packets
   // already sent should be treated as a single loss event, since it's expected.
   if (sequence_number <= largest_sent_at_last_cutback_) {
+    if (last_cutback_exited_slowstart_) {
+      ++stats_->slowstart_packets_lost;
+    }
     DVLOG(1) << "Ignoring loss for largest_missing:" << sequence_number
              << " because it was sent prior to the last CWND cutback.";
     return;
   }
-
-  // Initialize proportional rate reduction(RFC 6937) variables.
-  prr_out_ = 0;
-  bytes_in_flight_before_loss_ = bytes_in_flight_;
-  // Since all losses are triggered by an incoming ack currently, and acks are
-  // registered before losses by the SentPacketManager, initialize the variables
-  // as though one ack was received directly after the loss.  This is too low
-  // for stretch acks, but we expect missing packets to be immediately acked.
-  // This ensures 1 or 2 packets are immediately able to be sent, depending upon
-  // whether we're in PRR or PRR-SSRB mode.
-  prr_delivered_ = kMaxPacketSize;
-  ack_count_since_loss_ = 1;
+  ++stats_->tcp_loss_events;
+  last_cutback_exited_slowstart_ = InSlowStart();
+  if (InSlowStart()) {
+    ++stats_->slowstart_packets_lost;
+  }
+  PrrOnPacketLost();
 
   // In a normal TCP we would need to know the lowest missing packet to detect
   // if we receive 3 missing packets. Here we get a missing packet for which we
@@ -144,7 +146,7 @@
     // DCHECK_LT(largest_sent_sequence_number_, sequence_number);
     largest_sent_sequence_number_ = sequence_number;
   }
-  hybrid_slow_start_.OnPacketSent(sequence_number, AvailableSendWindow());
+  hybrid_slow_start_.OnPacketSent(sequence_number);
   return true;
 }
 
@@ -163,24 +165,10 @@
     // tail loss probe (draft-dukkipati-tcpm-tcp-loss-probe-01).
     return QuicTime::Delta::Zero();
   }
-  if (AvailableSendWindow() > 0) {
-    // During PRR-SSRB, limit outgoing packets to 1 extra MSS per ack, instead
-    // of sending the entire available window. This prevents burst retransmits
-    // when more packets are lost than the CWND reduction.
-    //   limit = MAX(prr_delivered - prr_out, DeliveredData) + MSS
-    if (InRecovery() &&
-        prr_delivered_ + ack_count_since_loss_ * kMaxSegmentSize < prr_out_) {
-      return QuicTime::Delta::Infinite();
-    }
-    return QuicTime::Delta::Zero();
+  if (InRecovery()) {
+    return PrrTimeUntilSend();
   }
-  // Implement Proportional Rate Reduction (RFC6937)
-  // Checks a simplified version of the PRR formula that doesn't use division:
-  // AvailableSendWindow =
-  //   CEIL(prr_delivered * ssthresh / BytesInFlightAtLoss) - prr_sent
-  if (InRecovery() &&
-      prr_delivered_ * slowstart_threshold_ * kMaxSegmentSize >
-          prr_out_ * bytes_in_flight_before_loss_) {
+  if (AvailableSendWindow() > 0) {
     return QuicTime::Delta::Zero();
   }
   return QuicTime::Delta::Infinite();
@@ -236,15 +224,12 @@
 // represents, but quic has a separate ack for each packet.
 void TcpCubicSender::MaybeIncreaseCwnd(
     QuicPacketSequenceNumber acked_sequence_number) {
+  LOG_IF(DFATAL, InRecovery()) << "Never increase the CWND during recovery.";
   if (!IsCwndLimited()) {
     // We don't update the congestion window unless we are close to using the
     // window we have available.
     return;
   }
-  if (acked_sequence_number <= largest_sent_at_last_cutback_) {
-    // We don't increase the congestion window during recovery.
-    return;
-  }
   if (InSlowStart()) {
     // congestion_window_cnt is the number of acks since last change of snd_cwnd
     if (congestion_window_ < max_tcp_congestion_window_) {
@@ -285,16 +270,59 @@
   largest_sent_at_last_cutback_ = 0;
   if (packets_retransmitted) {
     cubic_.Reset();
+    hybrid_slow_start_.Restart();
     congestion_window_ = kMinimumCongestionWindow;
   }
 }
 
 void TcpCubicSender::UpdateRtt(QuicTime::Delta rtt) {
-  // Hybrid start triggers when cwnd is larger than some threshold.
   if (InSlowStart() &&
-      hybrid_slow_start_.ShouldExitSlowStart(rtt_stats_, congestion_window_)) {
+      hybrid_slow_start_.ShouldExitSlowStart(rtt_stats_->latest_rtt(),
+                                             rtt_stats_->min_rtt(),
+                                             congestion_window_)) {
      slowstart_threshold_ = congestion_window_;
   }
 }
 
+void TcpCubicSender::PrrOnPacketLost() {
+  prr_out_ = 0;
+  bytes_in_flight_before_loss_ = bytes_in_flight_;
+  // Since all losses are triggered by an incoming ack currently, and acks are
+  // registered before losses by the SentPacketManager, initialize the variables
+  // as though one ack was received directly after the loss.  This is too low
+  // for stretch acks, but we expect missing packets to be immediately acked.
+  // This ensures 1 or 2 packets are immediately able to be sent, depending upon
+  // whether we're in PRR or PRR-SSRB mode.
+  prr_delivered_ = kMaxPacketSize;
+  ack_count_since_loss_ = 1;
+}
+
+void TcpCubicSender::PrrOnPacketAcked(QuicByteCount acked_bytes) {
+  prr_delivered_ += acked_bytes;
+  ++ack_count_since_loss_;
+}
+
+QuicTime::Delta TcpCubicSender::PrrTimeUntilSend() {
+  DCHECK(InRecovery());
+  if (AvailableSendWindow() > 0) {
+    // During PRR-SSRB, limit outgoing packets to 1 extra MSS per ack, instead
+    // of sending the entire available window. This prevents burst retransmits
+    // when more packets are lost than the CWND reduction.
+    //   limit = MAX(prr_delivered - prr_out, DeliveredData) + MSS
+    if (prr_delivered_ + ack_count_since_loss_ * kMaxSegmentSize < prr_out_) {
+      return QuicTime::Delta::Infinite();
+    }
+    return QuicTime::Delta::Zero();
+  }
+  // Implement Proportional Rate Reduction (RFC6937)
+  // Checks a simplified version of the PRR formula that doesn't use division:
+  // AvailableSendWindow =
+  //   CEIL(prr_delivered * ssthresh / BytesInFlightAtLoss) - prr_sent
+  if (prr_delivered_ * slowstart_threshold_ * kMaxSegmentSize >
+          prr_out_ * bytes_in_flight_before_loss_) {
+    return QuicTime::Delta::Zero();
+  }
+  return QuicTime::Delta::Infinite();
+}
+
 }  // namespace net
diff --git a/net/quic/congestion_control/tcp_cubic_sender.h b/net/quic/congestion_control/tcp_cubic_sender.h
index f70511e..14bb9e2 100644
--- a/net/quic/congestion_control/tcp_cubic_sender.h
+++ b/net/quic/congestion_control/tcp_cubic_sender.h
@@ -75,10 +75,16 @@
   void MaybeIncreaseCwnd(QuicPacketSequenceNumber acked_sequence_number);
   bool IsCwndLimited() const;
   bool InRecovery() const;
+  // Methods for isolating PRR from the rest of TCP Cubic.
+  void PrrOnPacketLost();
+  void PrrOnPacketAcked(QuicByteCount acked_bytes);
+  QuicTime::Delta PrrTimeUntilSend();
+
 
   HybridSlowStart hybrid_slow_start_;
   Cubic cubic_;
   const RttStats* rtt_stats_;
+  QuicConnectionStats* stats_;
 
   // Reno provided for testing.
   const bool reno_;
@@ -115,6 +121,10 @@
   // Slow start congestion window in packets, aka ssthresh.
   QuicTcpCongestionWindow slowstart_threshold_;
 
+  // Whether the last loss event caused us to exit slowstart.
+  // Used for stats collection of slowstart_packets_lost
+  bool last_cutback_exited_slowstart_;
+
   // Maximum number of outstanding packets for tcp.
   QuicTcpCongestionWindow max_tcp_congestion_window_;
 
diff --git a/net/quic/congestion_control/tcp_cubic_sender_test.cc b/net/quic/congestion_control/tcp_cubic_sender_test.cc
index c4cbfaf..aa8ee19 100644
--- a/net/quic/congestion_control/tcp_cubic_sender_test.cc
+++ b/net/quic/congestion_control/tcp_cubic_sender_test.cc
@@ -11,6 +11,7 @@
 #include "net/quic/congestion_control/tcp_receiver.h"
 #include "net/quic/quic_utils.h"
 #include "net/quic/test_tools/mock_clock.h"
+#include "net/quic/test_tools/quic_config_peer.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 using std::min;
@@ -36,6 +37,10 @@
     return congestion_window_;
   }
 
+  const HybridSlowStart& hybrid_slow_start() const {
+    return hybrid_slow_start_;
+  }
+
   RttStats rtt_stats_;
   QuicConnectionStats stats_;
 
@@ -193,6 +198,11 @@
   AckNPackets(2);
   expected_send_window += kDefaultTCPMSS;
   EXPECT_EQ(expected_send_window, sender_->GetCongestionWindow());
+
+  // Now RTO and ensure slow start gets reset.
+  EXPECT_TRUE(sender_->hybrid_slow_start().started());
+  sender_->OnRetransmissionTimeout(true);
+  EXPECT_FALSE(sender_->hybrid_slow_start().started());
 }
 
 TEST_F(TcpCubicSenderTest, SlowStartPacketLoss) {
@@ -255,6 +265,11 @@
   AckNPackets(1);
   expected_send_window += kDefaultTCPMSS;
   EXPECT_EQ(expected_send_window, sender_->GetCongestionWindow());
+
+  // Now RTO and ensure slow start gets reset.
+  EXPECT_TRUE(sender_->hybrid_slow_start().started());
+  sender_->OnRetransmissionTimeout(true);
+  EXPECT_FALSE(sender_->hybrid_slow_start().started());
 }
 
 TEST_F(TcpCubicSenderTest, SlowStartPacketLossPRR) {
@@ -571,9 +586,7 @@
 TEST_F(TcpCubicSenderTest, ConfigureMaxInitialWindow) {
   QuicTcpCongestionWindow congestion_window = sender_->congestion_window();
   QuicConfig config;
-  config.set_server_initial_congestion_window(2 * congestion_window,
-                                              2 * congestion_window);
-  EXPECT_EQ(2 * congestion_window, config.server_initial_congestion_window());
+  QuicConfigPeer::SetReceivedInitialWindow(&config, 2 * congestion_window);
 
   sender_->SetFromConfig(config, true);
   EXPECT_EQ(2 * congestion_window, sender_->congestion_window());
diff --git a/net/quic/congestion_control/tcp_loss_algorithm.h b/net/quic/congestion_control/tcp_loss_algorithm.h
index 06f6256..5f0bcfb 100644
--- a/net/quic/congestion_control/tcp_loss_algorithm.h
+++ b/net/quic/congestion_control/tcp_loss_algorithm.h
@@ -37,6 +37,8 @@
 
  private:
   QuicTime loss_detection_timeout_;
+
+  DISALLOW_COPY_AND_ASSIGN(TCPLossAlgorithm);
 };
 
 }  // namespace net
diff --git a/net/quic/congestion_control/time_loss_algorithm.h b/net/quic/congestion_control/time_loss_algorithm.h
index 5c6fc2a..ae37e1e 100644
--- a/net/quic/congestion_control/time_loss_algorithm.h
+++ b/net/quic/congestion_control/time_loss_algorithm.h
@@ -43,6 +43,8 @@
 
  private:
   QuicTime loss_detection_timeout_;
+
+  DISALLOW_COPY_AND_ASSIGN(TimeLossAlgorithm);
 };
 
 }  // namespace net
diff --git a/net/quic/crypto/aead_base_decrypter.h b/net/quic/crypto/aead_base_decrypter.h
index 2217ec9..6257409 100644
--- a/net/quic/crypto/aead_base_decrypter.h
+++ b/net/quic/crypto/aead_base_decrypter.h
@@ -98,6 +98,8 @@
 #if defined(USE_OPENSSL)
   ScopedEVPAEADCtx ctx_;
 #endif
+
+  DISALLOW_COPY_AND_ASSIGN(AeadBaseDecrypter);
 };
 
 }  // namespace net
diff --git a/net/quic/crypto/aead_base_encrypter.h b/net/quic/crypto/aead_base_encrypter.h
index 1cc5d51..7138131 100644
--- a/net/quic/crypto/aead_base_encrypter.h
+++ b/net/quic/crypto/aead_base_encrypter.h
@@ -101,6 +101,8 @@
 #if defined(USE_OPENSSL)
   ScopedEVPAEADCtx ctx_;
 #endif
+
+  DISALLOW_COPY_AND_ASSIGN(AeadBaseEncrypter);
 };
 
 }  // namespace net
diff --git a/net/quic/crypto/aes_128_gcm_12_decrypter.h b/net/quic/crypto/aes_128_gcm_12_decrypter.h
index 03d4da5..0511c8b 100644
--- a/net/quic/crypto/aes_128_gcm_12_decrypter.h
+++ b/net/quic/crypto/aes_128_gcm_12_decrypter.h
@@ -33,6 +33,9 @@
                               size_t auth_tag_size,
                               AeadParams* aead_params) const OVERRIDE;
 #endif
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(Aes128Gcm12Decrypter);
 };
 
 }  // namespace net
diff --git a/net/quic/crypto/aes_128_gcm_12_encrypter.h b/net/quic/crypto/aes_128_gcm_12_encrypter.h
index ef75b82..1d8f321 100644
--- a/net/quic/crypto/aes_128_gcm_12_encrypter.h
+++ b/net/quic/crypto/aes_128_gcm_12_encrypter.h
@@ -33,6 +33,9 @@
                               size_t auth_tag_size,
                               AeadParams* aead_params) const OVERRIDE;
 #endif
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(Aes128Gcm12Encrypter);
 };
 
 }  // namespace net
diff --git a/net/quic/crypto/cert_compressor.h b/net/quic/crypto/cert_compressor.h
index 7b7e2f0..d95c5bc 100644
--- a/net/quic/crypto/cert_compressor.h
+++ b/net/quic/crypto/cert_compressor.h
@@ -48,6 +48,9 @@
                               const std::vector<std::string>& cached_certs,
                               const CommonCertSets* common_sets,
                               std::vector<std::string>* out_certs);
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(CertCompressor);
 };
 
 }  // namespace net
diff --git a/net/quic/crypto/chacha20_poly1305_decrypter.h b/net/quic/crypto/chacha20_poly1305_decrypter.h
index b53d64a..9d24ba2 100644
--- a/net/quic/crypto/chacha20_poly1305_decrypter.h
+++ b/net/quic/crypto/chacha20_poly1305_decrypter.h
@@ -37,6 +37,9 @@
                               size_t auth_tag_size,
                               AeadParams* aead_params) const OVERRIDE;
 #endif
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(ChaCha20Poly1305Decrypter);
 };
 
 }  // namespace net
diff --git a/net/quic/crypto/chacha20_poly1305_encrypter.h b/net/quic/crypto/chacha20_poly1305_encrypter.h
index ed1102c..4a68caa 100644
--- a/net/quic/crypto/chacha20_poly1305_encrypter.h
+++ b/net/quic/crypto/chacha20_poly1305_encrypter.h
@@ -37,6 +37,9 @@
                               size_t auth_tag_size,
                               AeadParams* aead_params) const OVERRIDE;
 #endif
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(ChaCha20Poly1305Encrypter);
 };
 
 }  // namespace net
diff --git a/net/quic/crypto/channel_id.h b/net/quic/crypto/channel_id.h
index 2d0c29d..a560f15 100644
--- a/net/quic/crypto/channel_id.h
+++ b/net/quic/crypto/channel_id.h
@@ -57,6 +57,9 @@
                         base::StringPiece signed_data,
                         base::StringPiece signature,
                         bool is_channel_id_signature);
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(ChannelIDVerifier);
 };
 
 }  // namespace net
diff --git a/net/quic/crypto/crypto_handshake_message.cc b/net/quic/crypto/crypto_handshake_message.cc
index 96d528c..f2cd696 100644
--- a/net/quic/crypto/crypto_handshake_message.cc
+++ b/net/quic/crypto/crypto_handshake_message.cc
@@ -240,6 +240,7 @@
     bool done = false;
     switch (it->first) {
       case kICSL:
+      case kIFCW:
       case kIRTT:
       case kKATO:
       case kMSPC:
@@ -255,6 +256,7 @@
       case kKEXS:
       case kAEAD:
       case kCGST:
+      case kLOSS:
       case kPDMD:
       case kVER:
         // tag lists
diff --git a/net/quic/crypto/crypto_protocol.h b/net/quic/crypto/crypto_protocol.h
index 0e22c51..c508147 100644
--- a/net/quic/crypto/crypto_protocol.h
+++ b/net/quic/crypto/crypto_protocol.h
@@ -68,7 +68,8 @@
                                                 // encryption algorithms
 const QuicTag kCGST = TAG('C', 'G', 'S', 'T');  // Congestion control
                                                 // feedback types
-const QuicTag kLOSS = TAG('L', 'O', 'S', 'S');  // Loss detection algorithms
+// kLOSS was 'L', 'O', 'S', 'S', but was changed from a tag vector to a tag.
+const QuicTag kLOSS = TAG('L', 'O', 'S', 'A');  // Loss detection algorithms
 const QuicTag kICSL = TAG('I', 'C', 'S', 'L');  // Idle connection state
                                                 // lifetime
 const QuicTag kKATO = TAG('K', 'A', 'T', 'O');  // Keepalive timeout
diff --git a/net/quic/crypto/crypto_server_config_protobuf.h b/net/quic/crypto/crypto_server_config_protobuf.h
index e76ff14..5f31832 100644
--- a/net/quic/crypto/crypto_server_config_protobuf.h
+++ b/net/quic/crypto/crypto_server_config_protobuf.h
@@ -111,6 +111,8 @@
   // primary time.  For use as a secondary sort key when selecting the
   // primary config.
   uint64 priority_;
+
+  DISALLOW_COPY_AND_ASSIGN(QuicServerConfigProtobuf);
 };
 
 }  // namespace net
diff --git a/net/quic/crypto/crypto_utils.h b/net/quic/crypto/crypto_utils.h
index 147e414..ec6384c 100644
--- a/net/quic/crypto/crypto_utils.h
+++ b/net/quic/crypto/crypto_utils.h
@@ -62,6 +62,9 @@
                          const std::string& hkdf_input,
                          Perspective perspective,
                          CrypterPair* out);
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(CryptoUtils);
 };
 
 }  // namespace net
diff --git a/net/quic/crypto/null_decrypter.h b/net/quic/crypto/null_decrypter.h
index e85e124..2bc2fe8 100644
--- a/net/quic/crypto/null_decrypter.h
+++ b/net/quic/crypto/null_decrypter.h
@@ -38,6 +38,8 @@
  private:
   bool ReadHash(QuicDataReader* reader, uint128* hash);
   uint128 ComputeHash(const std::string& data) const;
+
+  DISALLOW_COPY_AND_ASSIGN(NullDecrypter);
 };
 
 }  // namespace net
diff --git a/net/quic/crypto/null_encrypter.h b/net/quic/crypto/null_encrypter.h
index 44e6f55..1bcdff5 100644
--- a/net/quic/crypto/null_encrypter.h
+++ b/net/quic/crypto/null_encrypter.h
@@ -38,6 +38,8 @@
 
  private:
   size_t GetHashLength() const;
+
+  DISALLOW_COPY_AND_ASSIGN(NullEncrypter);
 };
 
 }  // namespace net
diff --git a/net/quic/crypto/p256_key_exchange.h b/net/quic/crypto/p256_key_exchange.h
index 8145cc0..49a66ce 100644
--- a/net/quic/crypto/p256_key_exchange.h
+++ b/net/quic/crypto/p256_key_exchange.h
@@ -73,6 +73,8 @@
 #endif
   // The public key stored as an uncompressed P-256 point.
   uint8 public_key_[kUncompressedP256PointBytes];
+
+  DISALLOW_COPY_AND_ASSIGN(P256KeyExchange);
 };
 
 }  // namespace net
diff --git a/net/quic/crypto/quic_crypto_client_config.cc b/net/quic/crypto/quic_crypto_client_config.cc
index a614e6b..a6005bf 100644
--- a/net/quic/crypto/quic_crypto_client_config.cc
+++ b/net/quic/crypto/quic_crypto_client_config.cc
@@ -271,6 +271,15 @@
   return cached;
 }
 
+void QuicCryptoClientConfig::ClearCachedStates() {
+  for (CachedStateMap::const_iterator it = cached_states_.begin();
+       it != cached_states_.end(); ++it) {
+    CachedState* cached = it->second;
+    cached->ClearProof();
+    cached->InvalidateServerConfig();
+  }
+}
+
 void QuicCryptoClientConfig::FillInchoateClientHello(
     const QuicServerId& server_id,
     const QuicVersion preferred_version,
diff --git a/net/quic/crypto/quic_crypto_client_config.h b/net/quic/crypto/quic_crypto_client_config.h
index f88dcdf..8ed33fe 100644
--- a/net/quic/crypto/quic_crypto_client_config.h
+++ b/net/quic/crypto/quic_crypto_client_config.h
@@ -136,6 +136,9 @@
   // CachedState currently exists, it will be created and cached.
   CachedState* LookupOrCreate(const QuicServerId& server_id);
 
+  // Delete all CachedState objects from cached_states_.
+  void ClearCachedStates();
+
   // FillInchoateClientHello sets |out| to be a CHLO message that elicits a
   // source-address token or SCFG from a server. If |cached| is non-NULL, the
   // source-address token will be taken from it. |out_params| is used in order
diff --git a/net/quic/crypto/quic_crypto_client_config_test.cc b/net/quic/crypto/quic_crypto_client_config_test.cc
index cb2e48f..16e14dd 100644
--- a/net/quic/crypto/quic_crypto_client_config_test.cc
+++ b/net/quic/crypto/quic_crypto_client_config_test.cc
@@ -11,6 +11,7 @@
 #include "testing/gtest/include/gtest/gtest.h"
 
 using std::string;
+using std::vector;
 
 namespace net {
 namespace test {
@@ -186,9 +187,9 @@
   QuicCryptoClientConfig config;
   config.AddCanonicalSuffix(".google.com");
   QuicServerId canonical_id1("www.google.com", 80, false,
-                              PRIVACY_MODE_DISABLED);
+                             PRIVACY_MODE_DISABLED);
   QuicServerId canonical_id2("mail.google.com", 80, false,
-                              PRIVACY_MODE_DISABLED);
+                             PRIVACY_MODE_DISABLED);
   QuicCryptoClientConfig::CachedState* state =
       config.LookupOrCreate(canonical_id1);
   // TODO(rch): Populate other fields of |state|.
@@ -205,7 +206,7 @@
   EXPECT_EQ(1u, other->generation_counter());
 
   QuicServerId different_id("mail.google.org", 80, false,
-                             PRIVACY_MODE_DISABLED);
+                            PRIVACY_MODE_DISABLED);
   EXPECT_TRUE(config.LookupOrCreate(different_id)->IsEmpty());
 }
 
@@ -213,9 +214,9 @@
   QuicCryptoClientConfig config;
   config.AddCanonicalSuffix(".google.com");
   QuicServerId canonical_id1("www.google.com", 80, false,
-                              PRIVACY_MODE_DISABLED);
+                             PRIVACY_MODE_DISABLED);
   QuicServerId canonical_id2("mail.google.com", 80, false,
-                              PRIVACY_MODE_DISABLED);
+                             PRIVACY_MODE_DISABLED);
   QuicCryptoClientConfig::CachedState* state =
       config.LookupOrCreate(canonical_id1);
   // TODO(rch): Populate other fields of |state|.
@@ -226,5 +227,46 @@
   EXPECT_TRUE(config.LookupOrCreate(canonical_id2)->IsEmpty());
 }
 
+TEST(QuicCryptoClientConfigTest, ClearCachedStates) {
+  QuicCryptoClientConfig config;
+  QuicServerId canonical_server_id("www.google.com", 80, false,
+                                   PRIVACY_MODE_DISABLED);
+  QuicCryptoClientConfig::CachedState* state =
+      config.LookupOrCreate(canonical_server_id);
+  // TODO(rch): Populate other fields of |state|.
+  vector<string> certs(1);
+  certs[0] = "Hello Cert";
+  state->SetProof(certs, "signature");
+  state->set_source_address_token("TOKEN");
+  state->SetProofValid();
+
+  // Verify LookupOrCreate returns the same data.
+  QuicServerId other_server_id("www.google.com", 80, false,
+                               PRIVACY_MODE_DISABLED);
+
+  QuicCryptoClientConfig::CachedState* other =
+      config.LookupOrCreate(other_server_id);
+
+  EXPECT_TRUE(other->proof_valid());
+  EXPECT_EQ(state->server_config(), other->server_config());
+  EXPECT_EQ(state->signature(), other->signature());
+  EXPECT_EQ(state->certs(), other->certs());
+  EXPECT_EQ(state->source_address_token(), other->source_address_token());
+  EXPECT_EQ(1u, other->generation_counter());
+
+  // Clear the cached state.
+  config.ClearCachedStates();
+
+  // Verify LookupOrCreate doesn't have any data.
+  QuicCryptoClientConfig::CachedState* cleared_cache =
+      config.LookupOrCreate(other_server_id);
+
+  EXPECT_FALSE(cleared_cache->proof_valid());
+  EXPECT_TRUE(cleared_cache->server_config().empty());
+  EXPECT_TRUE(cleared_cache->certs().empty());
+  EXPECT_TRUE(cleared_cache->signature().empty());
+  EXPECT_LT(1u, cleared_cache->generation_counter());
+}
+
 }  // namespace test
 }  // namespace net
diff --git a/net/quic/crypto/quic_crypto_server_config.h b/net/quic/crypto/quic_crypto_server_config.h
index 90d55d2..5ece45d 100644
--- a/net/quic/crypto/quic_crypto_server_config.h
+++ b/net/quic/crypto/quic_crypto_server_config.h
@@ -46,6 +46,9 @@
   PrimaryConfigChangedCallback();
   virtual ~PrimaryConfigChangedCallback();
   virtual void Run(const std::string& scid) = 0;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(PrimaryConfigChangedCallback);
 };
 
 // Callback used to accept the result of the |client_hello| validation step.
@@ -446,6 +449,8 @@
   uint32 source_address_token_lifetime_secs_;
   uint32 server_nonce_strike_register_max_entries_;
   uint32 server_nonce_strike_register_window_secs_;
+
+  DISALLOW_COPY_AND_ASSIGN(QuicCryptoServerConfig);
 };
 
 }  // namespace net
diff --git a/net/quic/crypto/quic_server_info.h b/net/quic/crypto/quic_server_info.h
index 8b3db5f..fd54b94 100644
--- a/net/quic/crypto/quic_server_info.h
+++ b/net/quic/crypto/quic_server_info.h
@@ -100,6 +100,8 @@
   // This is the QUIC server (hostname, port, is_https, privacy_mode) tuple for
   // which we restore the crypto_config.
   const QuicServerId server_id_;
+
+  DISALLOW_COPY_AND_ASSIGN(QuicServerInfo);
 };
 
 class QuicServerInfoFactory {
diff --git a/net/quic/crypto/scoped_evp_aead_ctx.h b/net/quic/crypto/scoped_evp_aead_ctx.h
index f8bb356..f0f04c1 100644
--- a/net/quic/crypto/scoped_evp_aead_ctx.h
+++ b/net/quic/crypto/scoped_evp_aead_ctx.h
@@ -7,6 +7,8 @@
 
 #include <openssl/evp.h>
 
+#include "base/basictypes.h"
+
 namespace net {
 
 // ScopedEVPAEADCtx manages an EVP_AEAD_CTX object and calls the needed cleanup
@@ -20,6 +22,8 @@
 
  private:
   EVP_AEAD_CTX ctx_;
+
+  DISALLOW_COPY_AND_ASSIGN(ScopedEVPAEADCtx);
 };
 
 }  // namespace net
diff --git a/net/quic/crypto/source_address_token.h b/net/quic/crypto/source_address_token.h
index 8c50965..fbb50b1 100644
--- a/net/quic/crypto/source_address_token.h
+++ b/net/quic/crypto/source_address_token.h
@@ -41,6 +41,8 @@
  private:
   std::string ip_;
   int64 timestamp_;
+
+  DISALLOW_COPY_AND_ASSIGN(SourceAddressToken);
 };
 
 }  // namespace net
diff --git a/net/quic/crypto/strike_register.h b/net/quic/crypto/strike_register.h
index 6e86840..3f49e92 100644
--- a/net/quic/crypto/strike_register.h
+++ b/net/quic/crypto/strike_register.h
@@ -181,6 +181,8 @@
   // this header.
   InternalNode* internal_nodes_;
   scoped_ptr<uint8[]> external_nodes_;
+
+  DISALLOW_COPY_AND_ASSIGN(StrikeRegister);
 };
 
 }  // namespace net
diff --git a/net/quic/iovector.h b/net/quic/iovector.h
index 74fcbef..22d2cc9 100644
--- a/net/quic/iovector.h
+++ b/net/quic/iovector.h
@@ -57,7 +57,6 @@
 // to avoid accidentally change an entry that is assembled by two or more
 // Append()'s by simply an index access.
 //
-
 class NET_EXPORT_PRIVATE IOVector {
  public:
   // Provide a default constructor so it'll never be inhibited by adding other
diff --git a/net/quic/quic_ack_notifier.cc b/net/quic/quic_ack_notifier.cc
index be9881d..3bd65e5 100644
--- a/net/quic/quic_ack_notifier.cc
+++ b/net/quic/quic_ack_notifier.cc
@@ -46,7 +46,8 @@
   original_byte_count_ += packet_payload_size;
 }
 
-bool QuicAckNotifier::OnAck(QuicPacketSequenceNumber sequence_number) {
+bool QuicAckNotifier::OnAck(QuicPacketSequenceNumber sequence_number,
+                            QuicTime::Delta delta_largest_observed) {
   DCHECK(ContainsKey(sequence_numbers_, sequence_number));
   sequence_numbers_.erase(sequence_number);
   if (IsEmpty()) {
@@ -54,7 +55,8 @@
     // callback notification.
     delegate_->OnAckNotification(
         original_packet_count_, original_byte_count_,
-        retransmitted_packet_count_, retransmitted_byte_count_);
+        retransmitted_packet_count_, retransmitted_byte_count_,
+        delta_largest_observed);
     return true;
   }
   return false;
diff --git a/net/quic/quic_ack_notifier.h b/net/quic/quic_ack_notifier.h
index a771930..f19d0f8 100644
--- a/net/quic/quic_ack_notifier.h
+++ b/net/quic/quic_ack_notifier.h
@@ -30,7 +30,8 @@
     virtual void OnAckNotification(int num_original_packets,
                                    int num_original_bytes,
                                    int num_retransmitted_packets,
-                                   int num_retransmitted_bytes) = 0;
+                                   int num_retransmitted_bytes,
+                                   QuicTime::Delta delta_largest_observed) = 0;
    protected:
     friend class base::RefCounted<DelegateInterface>;
 
@@ -54,7 +55,8 @@
   //
   // Returns true if the provided sequence_number caused the delegate to be
   // called, false otherwise.
-  bool OnAck(QuicPacketSequenceNumber sequence_number);
+  bool OnAck(QuicPacketSequenceNumber sequence_number,
+             QuicTime::Delta delta_largest_observed);
 
   bool IsEmpty() { return sequence_numbers_.empty(); }
 
@@ -90,6 +92,8 @@
   int retransmitted_packet_count_;
   // Number of bytes that had to be retransmitted.
   int retransmitted_byte_count_;
+
+  DISALLOW_COPY_AND_ASSIGN(QuicAckNotifier);
 };
 
 };  // namespace net
diff --git a/net/quic/quic_ack_notifier_manager.cc b/net/quic/quic_ack_notifier_manager.cc
index 0dd8a76..70cb927 100644
--- a/net/quic/quic_ack_notifier_manager.cc
+++ b/net/quic/quic_ack_notifier_manager.cc
@@ -23,7 +23,8 @@
 }
 
 void AckNotifierManager::OnPacketAcked(
-    QuicPacketSequenceNumber sequence_number) {
+    QuicPacketSequenceNumber sequence_number,
+    QuicTime::Delta delta_largest_observed) {
   // Inform all the registered AckNotifiers of the new ACK.
   AckNotifierMap::iterator map_it = ack_notifier_map_.find(sequence_number);
   if (map_it == ack_notifier_map_.end()) {
@@ -36,7 +37,7 @@
   for (AckNotifierSet::iterator set_it = map_it->second.begin();
        set_it != map_it->second.end(); ++set_it) {
     QuicAckNotifier* ack_notifier = *set_it;
-    ack_notifier->OnAck(sequence_number);
+    ack_notifier->OnAck(sequence_number, delta_largest_observed);
 
     // If this has resulted in an empty AckNotifer, erase it.
     if (ack_notifier->IsEmpty()) {
diff --git a/net/quic/quic_ack_notifier_manager.h b/net/quic/quic_ack_notifier_manager.h
index 5ddf794..bf5b345 100644
--- a/net/quic/quic_ack_notifier_manager.h
+++ b/net/quic/quic_ack_notifier_manager.h
@@ -31,7 +31,6 @@
 // a set of AckNotifiers and a map from sequence number to AckNotifier the sake
 // of efficiency - we can quickly check the map to see if any AckNotifiers are
 // interested in a given sequence number.
-
 class NET_EXPORT_PRIVATE AckNotifierManager {
  public:
   AckNotifierManager();
@@ -40,7 +39,8 @@
   // Called when the connection receives a new AckFrame.  If |sequence_number|
   // exists in ack_notifier_map_ then the corresponding AckNotifiers will have
   // their OnAck method called.
-  void OnPacketAcked(QuicPacketSequenceNumber sequence_number);
+  void OnPacketAcked(QuicPacketSequenceNumber sequence_number,
+                     QuicTime::Delta delta_largest_observed);
 
   // If a packet has been retransmitted with a new sequence number, then this
   // will be called. It updates the mapping in ack_notifier_map_, and also
@@ -71,6 +71,8 @@
   // number, call OnAck for all mapped AckNotifiers.
   // Does not own the AckNotifiers.
   AckNotifierMap ack_notifier_map_;
+
+  DISALLOW_COPY_AND_ASSIGN(AckNotifierManager);
 };
 
 }  // namespace net
diff --git a/net/quic/quic_ack_notifier_test.cc b/net/quic/quic_ack_notifier_test.cc
index c05e63e..63bc254 100644
--- a/net/quic/quic_ack_notifier_test.cc
+++ b/net/quic/quic_ack_notifier_test.cc
@@ -16,6 +16,8 @@
 
 class QuicAckNotifierTest : public ::testing::Test {
  protected:
+  QuicAckNotifierTest() : zero_(QuicTime::Delta::Zero()) {}
+
   virtual void SetUp() {
     delegate_ = new MockAckNotifierDelegate;
     notifier_.reset(new QuicAckNotifier(delegate_));
@@ -27,22 +29,23 @@
 
   MockAckNotifierDelegate* delegate_;
   scoped_ptr<QuicAckNotifier> notifier_;
+  QuicTime::Delta zero_;
 };
 
 // Should trigger callback when we receive acks for all the registered seqnums.
 TEST_F(QuicAckNotifierTest, TriggerCallback) {
-  EXPECT_CALL(*delegate_, OnAckNotification(3, 123, 0, 0)).Times(1);
-  EXPECT_FALSE(notifier_->OnAck(26));
-  EXPECT_FALSE(notifier_->OnAck(99));
-  EXPECT_TRUE(notifier_->OnAck(1234));
+  EXPECT_CALL(*delegate_, OnAckNotification(3, 123, 0, 0, zero_)).Times(1);
+  EXPECT_FALSE(notifier_->OnAck(26, zero_));
+  EXPECT_FALSE(notifier_->OnAck(99, zero_));
+  EXPECT_TRUE(notifier_->OnAck(1234, zero_));
 }
 
 // Should not trigger callback if we never provide all the seqnums.
 TEST_F(QuicAckNotifierTest, DoesNotTrigger) {
   // Should not trigger callback as not all packets have been seen.
-  EXPECT_CALL(*delegate_, OnAckNotification(_, _, _, _)).Times(0);
-  EXPECT_FALSE(notifier_->OnAck(26));
-  EXPECT_FALSE(notifier_->OnAck(99));
+  EXPECT_CALL(*delegate_, OnAckNotification(_, _, _, _, _)).Times(0);
+  EXPECT_FALSE(notifier_->OnAck(26, zero_));
+  EXPECT_FALSE(notifier_->OnAck(99, zero_));
 }
 
 // Should trigger even after updating sequence numbers and receiving ACKs for
@@ -52,10 +55,24 @@
   notifier_->UpdateSequenceNumber(99, 3000);
   notifier_->UpdateSequenceNumber(1234, 3001);
 
-  EXPECT_CALL(*delegate_, OnAckNotification(3, 123, 2, 20 + 3)).Times(1);
-  EXPECT_FALSE(notifier_->OnAck(26));  // original
-  EXPECT_FALSE(notifier_->OnAck(3000));  // updated
-  EXPECT_TRUE(notifier_->OnAck(3001));  // updated
+  EXPECT_CALL(*delegate_, OnAckNotification(3, 123, 2, 20 + 3, _)).Times(1);
+  EXPECT_FALSE(notifier_->OnAck(26, zero_));    // original
+  EXPECT_FALSE(notifier_->OnAck(3000, zero_));  // updated
+  EXPECT_TRUE(notifier_->OnAck(3001, zero_));   // updated
+}
+
+// Make sure the delegate is called with the delta time from the last ACK.
+TEST_F(QuicAckNotifierTest, DeltaTime) {
+  const QuicTime::Delta first_delta = QuicTime::Delta::FromSeconds(5);
+  const QuicTime::Delta second_delta = QuicTime::Delta::FromSeconds(33);
+  const QuicTime::Delta third_delta = QuicTime::Delta::FromSeconds(10);
+
+  EXPECT_CALL(*delegate_,
+              OnAckNotification(3, 123, 0, 0, third_delta))
+      .Times(1);
+  EXPECT_FALSE(notifier_->OnAck(26, first_delta));
+  EXPECT_FALSE(notifier_->OnAck(99, second_delta));
+  EXPECT_TRUE(notifier_->OnAck(1234, third_delta));
 }
 
 }  // namespace
diff --git a/net/quic/quic_address_mismatch.cc b/net/quic/quic_address_mismatch.cc
index 36b53a1..ee97984 100644
--- a/net/quic/quic_address_mismatch.cc
+++ b/net/quic/quic_address_mismatch.cc
@@ -4,6 +4,7 @@
 
 #include "net/quic/quic_address_mismatch.h"
 
+#include "base/logging.h"
 #include "net/base/ip_endpoint.h"
 
 namespace net {
diff --git a/net/quic/quic_client_session_test.cc b/net/quic/quic_client_session_test.cc
index 58ef26c..9e55602 100644
--- a/net/quic/quic_client_session_test.cc
+++ b/net/quic/quic_client_session_test.cc
@@ -18,6 +18,7 @@
 #include "net/quic/test_tools/crypto_test_utils.h"
 #include "net/quic/test_tools/quic_client_session_peer.h"
 #include "net/quic/test_tools/quic_test_utils.h"
+#include "net/quic/test_tools/simple_quic_framer.h"
 #include "net/socket/socket_test_util.h"
 #include "net/udp/datagram_client_socket.h"
 
@@ -32,7 +33,7 @@
 
 class TestPacketWriter : public QuicDefaultPacketWriter {
  public:
-  TestPacketWriter() {
+  TestPacketWriter(QuicVersion version) : version_(version) {
   }
 
   // QuicPacketWriter
@@ -40,12 +41,10 @@
       const char* buffer, size_t buf_len,
       const IPAddressNumber& self_address,
       const IPEndPoint& peer_address) OVERRIDE {
-    QuicFramer framer(QuicSupportedVersions(), QuicTime::Zero(), true);
-    FramerVisitorCapturingFrames visitor;
-    framer.set_visitor(&visitor);
+    SimpleQuicFramer framer(SupportedVersions(version_));
     QuicEncryptedPacket packet(buffer, buf_len);
     EXPECT_TRUE(framer.ProcessPacket(packet));
-    header_ = *visitor.header();
+    header_ = framer.header();
     return WriteResult(WRITE_STATUS_OK, packet.length());
   }
 
@@ -59,13 +58,14 @@
   const QuicPacketHeader& header() { return header_; }
 
  private:
+  QuicVersion version_;
   QuicPacketHeader header_;
 };
 
 class QuicClientSessionTest : public ::testing::TestWithParam<QuicVersion> {
  protected:
   QuicClientSessionTest()
-      : writer_(new TestPacketWriter()),
+      : writer_(new TestPacketWriter(GetParam())),
         connection_(
             new PacketSavingConnection(false, SupportedVersions(GetParam()))),
         session_(connection_, GetSocket().Pass(), writer_.Pass(), NULL, NULL,
diff --git a/net/quic/quic_clock.h b/net/quic/quic_clock.h
index e6135a9..4e96d4c 100644
--- a/net/quic/quic_clock.h
+++ b/net/quic/quic_clock.h
@@ -30,6 +30,9 @@
   // WallNow returns the current wall-time - a time that is consistent across
   // different clocks.
   virtual QuicWallTime WallNow() const;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(QuicClock);
 };
 
 }  // namespace net
diff --git a/net/quic/quic_config.cc b/net/quic/quic_config.cc
index 8a951ed..9c60671 100644
--- a/net/quic/quic_config.cc
+++ b/net/quic/quic_config.cc
@@ -92,13 +92,14 @@
   }
 }
 
-QuicErrorCode QuicNegotiableUint32::ProcessClientHello(
-    const CryptoHandshakeMessage& client_hello,
+QuicErrorCode QuicNegotiableUint32::ProcessPeerHello(
+    const CryptoHandshakeMessage& peer_hello,
+    HelloType hello_type,
     string* error_details) {
   DCHECK(!negotiated_);
   DCHECK(error_details != NULL);
   uint32 value;
-  QuicErrorCode error = ReadUint32(client_hello,
+  QuicErrorCode error = ReadUint32(peer_hello,
                                    tag_,
                                    presence_,
                                    default_value_,
@@ -107,36 +108,14 @@
   if (error != QUIC_NO_ERROR) {
     return error;
   }
-  negotiated_ = true;
-  negotiated_value_ = min(value, max_value_);
-
-  return QUIC_NO_ERROR;
-}
-
-QuicErrorCode QuicNegotiableUint32::ProcessServerHello(
-    const CryptoHandshakeMessage& server_hello,
-    string* error_details) {
-  DCHECK(!negotiated_);
-  DCHECK(error_details != NULL);
-  uint32 value;
-  QuicErrorCode error = ReadUint32(server_hello,
-                                   tag_,
-                                   presence_,
-                                   max_value_,
-                                   &value,
-                                   error_details);
-  if (error != QUIC_NO_ERROR) {
-    return error;
-  }
-
-  if (value > max_value_) {
+  if (hello_type == SERVER && value > max_value_) {
     *error_details = "Invalid value received for " +
         QuicUtils::TagToString(tag_);
     return QUIC_INVALID_NEGOTIATED_VALUE;
   }
 
   negotiated_ = true;
-  negotiated_value_ = value;
+  negotiated_value_ = min(value, max_value_);
   return QUIC_NO_ERROR;
 }
 
@@ -199,99 +178,178 @@
   return error;
 }
 
-QuicErrorCode QuicNegotiableTag::ProcessClientHello(
-    const CryptoHandshakeMessage& client_hello,
+QuicErrorCode QuicNegotiableTag::ProcessPeerHello(
+    const CryptoHandshakeMessage& peer_hello,
+    HelloType hello_type,
     string* error_details) {
   DCHECK(!negotiated_);
   DCHECK(error_details != NULL);
   const QuicTag* received_tags;
   size_t received_tags_length;
-  QuicErrorCode error = ReadVector(client_hello, &received_tags,
+  QuicErrorCode error = ReadVector(peer_hello, &received_tags,
                                    &received_tags_length, error_details);
   if (error != QUIC_NO_ERROR) {
     return error;
   }
 
-  QuicTag negotiated_tag;
-  if (!QuicUtils::FindMutualTag(possible_values_,
-                                received_tags,
-                                received_tags_length,
-                                QuicUtils::LOCAL_PRIORITY,
-                                &negotiated_tag,
-                                NULL)) {
-    *error_details = "Unsuported " + QuicUtils::TagToString(tag_);
-    return QUIC_CRYPTO_MESSAGE_PARAMETER_NO_OVERLAP;
+  if (hello_type == SERVER) {
+    if (received_tags_length != 1 ||
+        std::find(possible_values_.begin(), possible_values_.end(),
+                  *received_tags) == possible_values_.end()) {
+      *error_details = "Invalid " + QuicUtils::TagToString(tag_);
+      return QUIC_INVALID_NEGOTIATED_VALUE;
+    }
+    negotiated_tag_ = *received_tags;
+  } else {
+    QuicTag negotiated_tag;
+    if (!QuicUtils::FindMutualTag(possible_values_,
+                                  received_tags,
+                                  received_tags_length,
+                                  QuicUtils::LOCAL_PRIORITY,
+                                  &negotiated_tag,
+                                  NULL)) {
+      *error_details = "Unsupported " + QuicUtils::TagToString(tag_);
+      return QUIC_CRYPTO_MESSAGE_PARAMETER_NO_OVERLAP;
+    }
+    negotiated_tag_ = negotiated_tag;
   }
 
   negotiated_ = true;
-  negotiated_tag_ = negotiated_tag;
   return QUIC_NO_ERROR;
 }
 
-QuicErrorCode QuicNegotiableTag::ProcessServerHello(
-    const CryptoHandshakeMessage& server_hello,
-    string* error_details) {
-  DCHECK(!negotiated_);
-  DCHECK(error_details != NULL);
-  const QuicTag* received_tags;
-  size_t received_tags_length;
-  QuicErrorCode error = ReadVector(server_hello, &received_tags,
-                                   &received_tags_length, error_details);
-  if (error != QUIC_NO_ERROR) {
-    return error;
-  }
-
-  if (received_tags_length != 1 ||
-      std::find(possible_values_.begin(), possible_values_.end(),
-                *received_tags) == possible_values_.end()) {
-    *error_details = "Invalid " + QuicUtils::TagToString(tag_);
-    return QUIC_INVALID_NEGOTIATED_VALUE;
-  }
-
-  negotiated_ = true;
-  negotiated_tag_ = *received_tags;
-  return QUIC_NO_ERROR;
-}
-
-QuicFixedUint32::QuicFixedUint32(QuicTag tag,
-                                 QuicConfigPresence presence,
-                                 uint32 default_value)
+QuicFixedUint32::QuicFixedUint32(QuicTag tag, QuicConfigPresence presence)
     : QuicConfigValue(tag, presence),
-      value_(default_value) {
+      has_send_value_(false),
+      has_receive_value_(false) {
 }
 QuicFixedUint32::~QuicFixedUint32() {}
 
-uint32 QuicFixedUint32::GetUint32() const {
-  return value_;
+bool QuicFixedUint32::HasSendValue() const {
+  return has_send_value_;
 }
 
-void QuicFixedUint32::ToHandshakeMessage(
-    CryptoHandshakeMessage* out) const {
-  out->SetValue(tag_, value_);
+uint32 QuicFixedUint32::GetSendValue() const {
+  LOG_IF(DFATAL, !has_send_value_) << "No send value to get for tag:" << tag_;
+  return send_value_;
 }
 
-QuicErrorCode QuicFixedUint32::ProcessClientHello(
+void QuicFixedUint32::SetSendValue(uint32 value) {
+  has_send_value_ = true;
+  send_value_ = value;
+}
+
+bool QuicFixedUint32::HasReceivedValue() const {
+  return has_receive_value_;
+}
+
+uint32 QuicFixedUint32::GetReceivedValue() const {
+  LOG_IF(DFATAL, !has_receive_value_)
+      << "No receive value to get for tag:" << tag_;
+  return receive_value_;
+}
+
+void QuicFixedUint32::SetReceivedValue(uint32 value) {
+  has_receive_value_ = true;
+  receive_value_ = value;
+}
+
+void QuicFixedUint32::ToHandshakeMessage(CryptoHandshakeMessage* out) const {
+  if (has_send_value_) {
+    out->SetValue(tag_, send_value_);
+  }
+}
+
+QuicErrorCode QuicFixedUint32::ProcessPeerHello(
+    const CryptoHandshakeMessage& peer_hello,
+    HelloType hello_type,
+    string* error_details) {
+  DCHECK(error_details != NULL);
+  QuicErrorCode error = peer_hello.GetUint32(tag_, &receive_value_);
+  switch (error) {
+    case QUIC_CRYPTO_MESSAGE_PARAMETER_NOT_FOUND:
+      if (presence_ == PRESENCE_REQUIRED) {
+        *error_details = "Missing " + QuicUtils::TagToString(tag_);
+        break;
+      }
+      error = QUIC_NO_ERROR;
+      break;
+    case QUIC_NO_ERROR:
+      has_receive_value_ = true;
+      break;
+    default:
+      *error_details = "Bad " + QuicUtils::TagToString(tag_);
+      break;
+  }
+  return error;
+}
+
+QuicFixedTag::QuicFixedTag(QuicTag name,
+                           QuicConfigPresence presence)
+    : QuicConfigValue(name, presence),
+      has_send_value_(false),
+      has_receive_value_(false) {
+}
+
+QuicFixedTag::~QuicFixedTag() {}
+
+bool QuicFixedTag::HasSendValue() const {
+  return has_send_value_;
+}
+
+uint32 QuicFixedTag::GetSendValue() const {
+  LOG_IF(DFATAL, !has_send_value_) << "No send value to get for tag:" << tag_;
+  return send_value_;
+}
+
+void QuicFixedTag::SetSendValue(uint32 value) {
+  has_send_value_ = true;
+  send_value_ = value;
+}
+
+bool QuicFixedTag::HasReceivedValue() const {
+  return has_receive_value_;
+}
+
+uint32 QuicFixedTag::GetReceivedValue() const {
+  LOG_IF(DFATAL, !has_receive_value_)
+      << "No receive value to get for tag:" << tag_;
+  return receive_value_;
+}
+
+void QuicFixedTag::SetReceivedValue(uint32 value) {
+  has_receive_value_ = true;
+  receive_value_ = value;
+}
+
+void QuicFixedTag::ToHandshakeMessage(CryptoHandshakeMessage* out) const {
+  if (has_send_value_) {
+    out->SetValue(tag_, send_value_);
+  }
+}
+
+QuicErrorCode QuicFixedTag::ProcessPeerHello(
     const CryptoHandshakeMessage& client_hello,
+    HelloType hello_type,
     string* error_details) {
   DCHECK(error_details != NULL);
-  QuicErrorCode error =
-      ReadUint32(client_hello, tag_, presence_, value_, &value_, error_details);
-  if (error != QUIC_NO_ERROR) {
-    return error;
+  QuicErrorCode error = client_hello.GetUint32(tag_, &receive_value_);
+  switch (error) {
+    case QUIC_CRYPTO_MESSAGE_PARAMETER_NOT_FOUND:
+      if (presence_ == PRESENCE_REQUIRED) {
+        *error_details = "Missing " + QuicUtils::TagToString(tag_);
+        break;
+      }
+      error = QUIC_NO_ERROR;
+      break;
+    case QUIC_NO_ERROR:
+      has_receive_value_ = true;
+      break;
+    default:
+      *error_details = "Bad " + QuicUtils::TagToString(tag_);
+      break;
   }
-  return QUIC_NO_ERROR;
-}
-
-QuicErrorCode QuicFixedUint32::ProcessServerHello(
-    const CryptoHandshakeMessage& server_hello,
-    string* error_details) {
-  DCHECK(error_details != NULL);
-  QuicErrorCode error =
-      ReadUint32(server_hello, tag_, presence_, value_, &value_, error_details);
-  if (error != QUIC_NO_ERROR) {
-    return error;
-  }
-  return QUIC_NO_ERROR;
+  return error;
 }
 
 QuicConfig::QuicConfig()
@@ -301,19 +359,11 @@
       keepalive_timeout_seconds_(kKATO, PRESENCE_OPTIONAL),
       max_streams_per_connection_(kMSPC, PRESENCE_REQUIRED),
       max_time_before_crypto_handshake_(QuicTime::Delta::Zero()),
-      server_initial_congestion_window_(kSWND, PRESENCE_OPTIONAL),
+      initial_congestion_window_(kSWND, PRESENCE_OPTIONAL),
       initial_round_trip_time_us_(kIRTT, PRESENCE_OPTIONAL),
       // TODO(rjshade): Make this PRESENCE_REQUIRED when retiring
       // QUIC_VERSION_17.
-      peer_initial_flow_control_window_bytes_(kIFCW, PRESENCE_OPTIONAL,
-                                              kDefaultFlowControlSendWindow) {
-  // All optional non-zero parameters should be initialized here.
-  server_initial_congestion_window_.set(kMaxInitialWindow,
-                                        kDefaultInitialWindow);
-  QuicTagVector loss_detection;
-  loss_detection.push_back(kNACK);
-  loss_detection.push_back(kTIME);
-  loss_detection_.set(loss_detection, kNACK);
+      initial_flow_control_window_bytes_(kIFCW, PRESENCE_OPTIONAL) {
 }
 
 QuicConfig::~QuicConfig() {}
@@ -328,14 +378,16 @@
   return congestion_control_.GetTag();
 }
 
-void QuicConfig::set_loss_detection(
-    const QuicTagVector& loss_detection,
-    QuicTag default_loss_detection) {
-  loss_detection_.set(loss_detection, default_loss_detection);
+void QuicConfig::SetLossDetectionToSend(QuicTag loss_detection) {
+  loss_detection_.SetSendValue(loss_detection);
 }
 
-QuicTag QuicConfig::loss_detection() const {
-  return loss_detection_.GetTag();
+bool QuicConfig::HasReceivedLossDetection() const {
+  return loss_detection_.HasReceivedValue();
+}
+
+QuicTag QuicConfig::ReceivedLossDetection() const {
+  return loss_detection_.GetReceivedValue();
 }
 
 void QuicConfig::set_idle_connection_state_lifetime(
@@ -374,31 +426,40 @@
   return max_time_before_crypto_handshake_;
 }
 
-void QuicConfig::set_server_initial_congestion_window(size_t max_initial_window,
-                                               size_t default_initial_window) {
-  server_initial_congestion_window_.set(max_initial_window,
-                                        default_initial_window);
+void QuicConfig::SetInitialCongestionWindowToSend(size_t initial_window) {
+  initial_congestion_window_.SetSendValue(initial_window);
 }
 
-uint32 QuicConfig::server_initial_congestion_window() const {
-  return server_initial_congestion_window_.GetUint32();
+bool QuicConfig::HasReceivedInitialCongestionWindow() const {
+  return initial_congestion_window_.HasReceivedValue();
 }
 
-void QuicConfig::set_initial_round_trip_time_us(size_t max_rtt,
-                                                size_t default_rtt) {
-  initial_round_trip_time_us_.set(max_rtt, default_rtt);
+uint32 QuicConfig::ReceivedInitialCongestionWindow() const {
+  return initial_congestion_window_.GetReceivedValue();
 }
 
-uint32 QuicConfig::initial_round_trip_time_us() const {
-  return initial_round_trip_time_us_.GetUint32();
+void QuicConfig::SetInitialRoundTripTimeUsToSend(size_t rtt) {
+  initial_round_trip_time_us_.SetSendValue(rtt);
 }
 
-void QuicConfig::set_peer_initial_flow_control_window_bytes(uint32 window) {
-  peer_initial_flow_control_window_bytes_.set_value(window);
+bool QuicConfig::HasReceivedInitialRoundTripTimeUs() const {
+  return initial_round_trip_time_us_.HasReceivedValue();
 }
 
-uint32 QuicConfig::peer_initial_flow_control_window_bytes() const {
-  return peer_initial_flow_control_window_bytes_.GetUint32();
+uint32 QuicConfig::ReceivedInitialRoundTripTimeUs() const {
+  return initial_round_trip_time_us_.GetReceivedValue();
+}
+
+void QuicConfig::SetInitialFlowControlWindowToSend(uint32 window_bytes) {
+  initial_flow_control_window_bytes_.SetSendValue(window_bytes);
+}
+
+bool QuicConfig::HasReceivedInitialFlowControlWindowBytes() const {
+  return initial_flow_control_window_bytes_.HasReceivedValue();;
+}
+
+uint32 QuicConfig::ReceivedInitialFlowControlWindowBytes() const {
+  return initial_flow_control_window_bytes_.GetReceivedValue();
 }
 
 bool QuicConfig::negotiated() {
@@ -406,12 +467,9 @@
   // of them in negotiated, ToHandshakeMessage, ProcessClientHello, and
   // ProcessServerHello.
   return congestion_control_.negotiated() &&
-      loss_detection_.negotiated() &&
       idle_connection_state_lifetime_seconds_.negotiated() &&
       keepalive_timeout_seconds_.negotiated() &&
-      max_streams_per_connection_.negotiated() &&
-      server_initial_congestion_window_.negotiated() &&
-      initial_round_trip_time_us_.negotiated();
+      max_streams_per_connection_.negotiated();
 }
 
 void QuicConfig::SetDefaults() {
@@ -429,11 +487,6 @@
                                   kDefaultMaxStreamsPerConnection);
   max_time_before_crypto_handshake_ = QuicTime::Delta::FromSeconds(
       kDefaultMaxTimeForCryptoHandshakeSecs);
-  server_initial_congestion_window_.set(kDefaultInitialWindow,
-                                        kDefaultInitialWindow);
-  QuicTagVector loss_detection;
-  loss_detection.push_back(kNACK);
-  loss_detection_.set(loss_detection, kNACK);
 }
 
 void QuicConfig::EnablePacing(bool enable_pacing) {
@@ -450,88 +503,50 @@
   idle_connection_state_lifetime_seconds_.ToHandshakeMessage(out);
   keepalive_timeout_seconds_.ToHandshakeMessage(out);
   max_streams_per_connection_.ToHandshakeMessage(out);
-  server_initial_congestion_window_.ToHandshakeMessage(out);
-  // TODO(ianswett): Don't transmit parameters which are optional and not set.
+  initial_congestion_window_.ToHandshakeMessage(out);
   initial_round_trip_time_us_.ToHandshakeMessage(out);
   loss_detection_.ToHandshakeMessage(out);
-  // Don't add peer_initial_flow_control_window_bytes here, it is not a
-  // negotiated value.
+  initial_flow_control_window_bytes_.ToHandshakeMessage(out);
 }
 
-QuicErrorCode QuicConfig::ProcessClientHello(
-    const CryptoHandshakeMessage& client_hello,
+QuicErrorCode QuicConfig::ProcessPeerHello(
+    const CryptoHandshakeMessage& peer_hello,
+    HelloType hello_type,
     string* error_details) {
   DCHECK(error_details != NULL);
 
   QuicErrorCode error = QUIC_NO_ERROR;
   if (error == QUIC_NO_ERROR) {
-    error = congestion_control_.ProcessClientHello(client_hello, error_details);
+    error = congestion_control_.ProcessPeerHello(
+        peer_hello,  hello_type, error_details);
   }
   if (error == QUIC_NO_ERROR) {
-    error = idle_connection_state_lifetime_seconds_.ProcessClientHello(
-        client_hello, error_details);
+    error = idle_connection_state_lifetime_seconds_.ProcessPeerHello(
+        peer_hello, hello_type, error_details);
   }
   if (error == QUIC_NO_ERROR) {
-    error = keepalive_timeout_seconds_.ProcessClientHello(
-        client_hello, error_details);
+    error = keepalive_timeout_seconds_.ProcessPeerHello(
+        peer_hello, hello_type, error_details);
   }
   if (error == QUIC_NO_ERROR) {
-    error = max_streams_per_connection_.ProcessClientHello(
-        client_hello, error_details);
+    error = max_streams_per_connection_.ProcessPeerHello(
+        peer_hello, hello_type, error_details);
   }
   if (error == QUIC_NO_ERROR) {
-    error = server_initial_congestion_window_.ProcessClientHello(
-        client_hello, error_details);
+    error = initial_congestion_window_.ProcessPeerHello(
+        peer_hello, hello_type, error_details);
   }
   if (error == QUIC_NO_ERROR) {
-    error = initial_round_trip_time_us_.ProcessClientHello(
-        client_hello, error_details);
+    error = initial_round_trip_time_us_.ProcessPeerHello(
+        peer_hello, hello_type, error_details);
   }
   if (error == QUIC_NO_ERROR) {
-    error = peer_initial_flow_control_window_bytes_.ProcessClientHello(
-        client_hello, error_details);
+    error = initial_flow_control_window_bytes_.ProcessPeerHello(
+        peer_hello, hello_type, error_details);
   }
   if (error == QUIC_NO_ERROR) {
-    error = loss_detection_.ProcessClientHello(client_hello, error_details);
-  }
-  return error;
-}
-
-QuicErrorCode QuicConfig::ProcessServerHello(
-    const CryptoHandshakeMessage& server_hello,
-    string* error_details) {
-  DCHECK(error_details != NULL);
-
-  QuicErrorCode error = QUIC_NO_ERROR;
-  if (error == QUIC_NO_ERROR) {
-    error = congestion_control_.ProcessServerHello(server_hello, error_details);
-  }
-  if (error == QUIC_NO_ERROR) {
-    error = idle_connection_state_lifetime_seconds_.ProcessServerHello(
-        server_hello, error_details);
-  }
-  if (error == QUIC_NO_ERROR) {
-    error = keepalive_timeout_seconds_.ProcessServerHello(
-        server_hello, error_details);
-  }
-  if (error == QUIC_NO_ERROR) {
-    error = max_streams_per_connection_.ProcessServerHello(
-        server_hello, error_details);
-  }
-  if (error == QUIC_NO_ERROR) {
-    error = server_initial_congestion_window_.ProcessServerHello(
-        server_hello, error_details);
-  }
-  if (error == QUIC_NO_ERROR) {
-    error = initial_round_trip_time_us_.ProcessServerHello(
-        server_hello, error_details);
-  }
-  if (error == QUIC_NO_ERROR) {
-    error = peer_initial_flow_control_window_bytes_.ProcessServerHello(
-        server_hello, error_details);
-  }
-  if (error == QUIC_NO_ERROR) {
-    error = loss_detection_.ProcessServerHello(server_hello, error_details);
+    error = loss_detection_.ProcessPeerHello(
+        peer_hello, hello_type, error_details);
   }
   return error;
 }
diff --git a/net/quic/quic_config.h b/net/quic/quic_config.h
index eb0291d..88ad8b6 100644
--- a/net/quic/quic_config.h
+++ b/net/quic/quic_config.h
@@ -13,6 +13,10 @@
 
 namespace net {
 
+namespace test {
+class QuicConfigPeer;
+}  // namespace test
+
 class CryptoHandshakeMessage;
 
 // Describes whether or not a given QuicTag is required or optional in the
@@ -26,6 +30,12 @@
   PRESENCE_REQUIRED,
 };
 
+// Whether the CryptoHandshakeMessage is from the client or server.
+enum HelloType {
+  CLIENT,
+  SERVER,
+};
+
 // An abstract base class that stores a value that can be sent in CHLO/SHLO
 // message. These values can be OPTIONAL or REQUIRED, depending on |presence_|.
 class NET_EXPORT_PRIVATE QuicConfigValue {
@@ -36,16 +46,11 @@
   // Serialises tag name and value(s) to |out|.
   virtual void ToHandshakeMessage(CryptoHandshakeMessage* out) const = 0;
 
-  // Selects a mutually acceptable value from those offered in |client_hello|
+  // Selects a mutually acceptable value from those offered in |peer_hello|
   // and those defined in the subclass.
-  virtual QuicErrorCode ProcessClientHello(
-      const CryptoHandshakeMessage& client_hello,
-      std::string* error_details) = 0;
-
-  // Selects a mutually acceptable value from those offered in |server_hello|
-  // and those defined in the subclass.
-  virtual QuicErrorCode ProcessServerHello(
-      const CryptoHandshakeMessage& server_hello,
+  virtual QuicErrorCode ProcessPeerHello(
+      const CryptoHandshakeMessage& peer_hello,
+      HelloType hello_type,
       std::string* error_details) = 0;
 
  protected:
@@ -87,19 +92,12 @@
   virtual void ToHandshakeMessage(CryptoHandshakeMessage* out) const OVERRIDE;
 
   // Sets |negotiated_value_| to the minimum of |max_value_| and the
-  // corresponding value from |client_hello|. If the corresponding value is
+  // corresponding value from |peer_hello|. If the corresponding value is
   // missing and PRESENCE_OPTIONAL then |negotiated_value_| is set to
   // |default_value_|.
-  virtual QuicErrorCode ProcessClientHello(
-      const CryptoHandshakeMessage& client_hello,
-      std::string* error_details) OVERRIDE;
-
-  // Sets the |negotiated_value_| to the corresponding value from
-  // |server_hello|. Returns error if the value received in |server_hello| is
-  // greater than |max_value_|. If the corresponding value is missing and
-  // PRESENCE_OPTIONAL then |negotiated_value_| is set to |0|,
-  virtual QuicErrorCode ProcessServerHello(
-      const CryptoHandshakeMessage& server_hello,
+  virtual QuicErrorCode ProcessPeerHello(
+      const CryptoHandshakeMessage& peer_hello,
+      HelloType hello_type,
       std::string* error_details) OVERRIDE;
 
  private:
@@ -130,15 +128,9 @@
   // Selects the tag common to both tags in |client_hello| for |name_| and
   // |possible_values_| with preference to tag in |possible_values_|. The
   // selected tag is set as |negotiated_tag_|.
-  virtual QuicErrorCode ProcessClientHello(
-      const CryptoHandshakeMessage& client_hello,
-      std::string* error_details) OVERRIDE;
-
-  // Sets the value for |name_| tag in |server_hello| as |negotiated_value_|.
-  // Returns error if the value received in |server_hello| isn't present in
-  // |possible_values_|.
-  virtual QuicErrorCode ProcessServerHello(
-      const CryptoHandshakeMessage& server_hello,
+  virtual QuicErrorCode ProcessPeerHello(
+      const CryptoHandshakeMessage& peer_hello,
+      HelloType hello_type,
       std::string* error_details) OVERRIDE;
 
  private:
@@ -158,31 +150,69 @@
 // Stores uint32 from CHLO or SHLO messages that are not negotiated.
 class NET_EXPORT_PRIVATE QuicFixedUint32 : public QuicConfigValue {
  public:
-  QuicFixedUint32(QuicTag name,
-                  QuicConfigPresence presence,
-                  uint32 default_value);
+  QuicFixedUint32(QuicTag name, QuicConfigPresence presence);
   virtual ~QuicFixedUint32();
 
-  // Returns the value in the *HLO message (or the default if not).
-  uint32 GetUint32() const;
+  bool HasSendValue() const;
 
-  void set_value(uint32 value) { value_ = value; }
+  uint32 GetSendValue() const;
 
-  // Serialises |tag_| and |value_| to |out|.
+  void SetSendValue(uint32 value);
+
+  bool HasReceivedValue() const;
+
+  uint32 GetReceivedValue() const;
+
+  void SetReceivedValue(uint32 value);
+
+  // If has_send_value is true, serialises |tag_| and |send_value_| to |out|.
   virtual void ToHandshakeMessage(CryptoHandshakeMessage* out) const OVERRIDE;
 
-  // Sets |value_| to the corresponding value from |client_hello_| if it exists.
-  virtual QuicErrorCode ProcessClientHello(
-      const CryptoHandshakeMessage& client_hello,
-      std::string* error_details) OVERRIDE;
-
-  // Sets |value_| to the corresponding value from |server_hello_| if it exists.
-  virtual QuicErrorCode ProcessServerHello(
-      const CryptoHandshakeMessage& server_hello,
+  // Sets |value_| to the corresponding value from |peer_hello_| if it exists.
+  virtual QuicErrorCode ProcessPeerHello(
+      const CryptoHandshakeMessage& peer_hello,
+      HelloType hello_type,
       std::string* error_details) OVERRIDE;
 
  private:
-  uint32 value_;
+  uint32 send_value_;
+  bool has_send_value_;
+  uint32 receive_value_;
+  bool has_receive_value_;
+};
+
+// Stores tag from CHLO or SHLO messages that are not negotiated.
+class NET_EXPORT_PRIVATE QuicFixedTag : public QuicConfigValue {
+ public:
+  QuicFixedTag(QuicTag name, QuicConfigPresence presence);
+  virtual ~QuicFixedTag();
+
+  bool HasSendValue() const;
+
+  QuicTag GetSendValue() const;
+
+  void SetSendValue(QuicTag value);
+
+  bool HasReceivedValue() const;
+
+  QuicTag GetReceivedValue() const;
+
+  void SetReceivedValue(QuicTag value);
+
+  // If has_send_value is true, serialises |tag_| and |send_value_| to |out|.
+  virtual void ToHandshakeMessage(CryptoHandshakeMessage* out) const OVERRIDE;
+
+  // Sets |value_| to the corresponding value from |client_hello_| if it exists.
+  virtual QuicErrorCode ProcessPeerHello(
+      const CryptoHandshakeMessage& peer_hello,
+      HelloType hello_type,
+      std::string* error_details) OVERRIDE;
+
+ private:
+  QuicTag send_value_;
+  bool has_send_value_;
+  QuicTag receive_value_;
+  bool has_receive_value_;
 };
 
 // QuicConfig contains non-crypto configuration options that are negotiated in
@@ -197,10 +227,11 @@
 
   QuicTag congestion_control() const;
 
-  void set_loss_detection(const QuicTagVector& loss_detection,
-                          QuicTag default_loss_detection);
+  void SetLossDetectionToSend(QuicTag loss_detection);
 
-  QuicTag loss_detection() const;
+  bool HasReceivedLossDetection() const;
+
+  QuicTag ReceivedLossDetection() const;
 
   void set_idle_connection_state_lifetime(
       QuicTime::Delta max_idle_connection_state_lifetime,
@@ -220,21 +251,26 @@
 
   QuicTime::Delta max_time_before_crypto_handshake() const;
 
-  // Sets the server's TCP sender's max and default initial congestion window
-  // in packets.
-  void set_server_initial_congestion_window(size_t max_initial_window,
-                                            size_t default_initial_window);
+  // Sets the peer's default initial congestion window in packets.
+  void SetInitialCongestionWindowToSend(size_t initial_window);
 
-  uint32 server_initial_congestion_window() const;
+  bool HasReceivedInitialCongestionWindow() const;
+
+  uint32 ReceivedInitialCongestionWindow() const;
 
   // Sets an estimated initial round trip time in us.
-  void set_initial_round_trip_time_us(size_t max_rtt, size_t default_rtt);
+  void SetInitialRoundTripTimeUsToSend(size_t rtt_us);
 
-  uint32 initial_round_trip_time_us() const;
+  bool HasReceivedInitialRoundTripTimeUs() const;
 
-  void set_peer_initial_flow_control_window_bytes(uint32 window);
+  uint32 ReceivedInitialRoundTripTimeUs() const;
 
-  uint32 peer_initial_flow_control_window_bytes() const;
+  // Sets an initial flow control window size to transmit to the peer.
+  void SetInitialFlowControlWindowToSend(uint32 window_bytes);
+
+  bool HasReceivedInitialFlowControlWindowBytes() const;
+
+  uint32 ReceivedInitialFlowControlWindowBytes() const;
 
   bool negotiated();
 
@@ -244,25 +280,23 @@
   // Enabled pacing.
   void EnablePacing(bool enable_pacing);
 
-  // ToHandshakeMessage serializes the settings in this object as a series of
+  // ToHandshakeMessage serialises the settings in this object as a series of
   // tags /value pairs and adds them to |out|.
   void ToHandshakeMessage(CryptoHandshakeMessage* out) const;
 
-  // Calls ProcessClientHello on each negotiable parameter. On failure returns
+  // Calls ProcessPeerHello on each negotiable parameter. On failure returns
   // the corresponding QuicErrorCode and sets detailed error in |error_details|.
-  QuicErrorCode ProcessClientHello(const CryptoHandshakeMessage& client_hello,
-                                   std::string* error_details);
-
-  // Calls ProcessServerHello on each negotiable parameter. On failure returns
-  // the corresponding QuicErrorCode and sets detailed error in |error_details|.
-  QuicErrorCode ProcessServerHello(const CryptoHandshakeMessage& server_hello,
-                                   std::string* error_details);
+  QuicErrorCode ProcessPeerHello(const CryptoHandshakeMessage& peer_hello,
+                                 HelloType hello_type,
+                                 std::string* error_details);
 
  private:
+  friend class test::QuicConfigPeer;
+
   // Congestion control feedback type.
   QuicNegotiableTag congestion_control_;
   // Loss detection feedback type.
-  QuicNegotiableTag loss_detection_;
+  QuicFixedTag loss_detection_;
   // Idle connection state lifetime
   QuicNegotiableUint32 idle_connection_state_lifetime_seconds_;
   // Keepalive timeout, or 0 to turn off keepalive probes
@@ -273,11 +307,11 @@
   // finished. (Not negotiated).
   QuicTime::Delta max_time_before_crypto_handshake_;
   // Initial congestion window in packets.
-  QuicNegotiableUint32 server_initial_congestion_window_;
+  QuicFixedUint32 initial_congestion_window_;
   // Initial round trip time estimate in microseconds.
-  QuicNegotiableUint32 initial_round_trip_time_us_;
-  // Peer's initial flow control receive window in bytes.
-  QuicFixedUint32 peer_initial_flow_control_window_bytes_;
+  QuicFixedUint32 initial_round_trip_time_us_;
+  // Initial flow control receive window in bytes.
+  QuicFixedUint32 initial_flow_control_window_bytes_;
 };
 
 }  // namespace net
diff --git a/net/quic/quic_config_test.cc b/net/quic/quic_config_test.cc
index 2c3f98b..9ca449d 100644
--- a/net/quic/quic_config_test.cc
+++ b/net/quic/quic_config_test.cc
@@ -24,7 +24,6 @@
  protected:
   QuicConfigTest() {
     config_.SetDefaults();
-    config_.set_initial_round_trip_time_us(kMaxInitialRoundTripTimeUs, 0);
   }
 
   QuicConfig config_;
@@ -70,7 +69,7 @@
   EXPECT_EQ(kQBIC, out[1]);
 }
 
-TEST_F(QuicConfigTest, ProcessClientHello) {
+TEST_F(QuicConfigTest, ProcessPeerHello) {
   QuicConfig client_config;
   QuicTagVector cgst;
   cgst.push_back(kINAR);
@@ -81,16 +80,13 @@
       QuicTime::Delta::FromSeconds(kDefaultTimeoutSecs));
   client_config.set_max_streams_per_connection(
       2 * kDefaultMaxStreamsPerConnection, kDefaultMaxStreamsPerConnection);
-  client_config.set_initial_round_trip_time_us(
-      10 * base::Time::kMicrosecondsPerMillisecond,
+  client_config.SetInitialRoundTripTimeUsToSend(
       10 * base::Time::kMicrosecondsPerMillisecond);
-  QuicTagVector loss_detection;
-  loss_detection.push_back(kNACK);
-  client_config.set_loss_detection(loss_detection, kNACK);
   CryptoHandshakeMessage msg;
   client_config.ToHandshakeMessage(&msg);
   string error_details;
-  const QuicErrorCode error = config_.ProcessClientHello(msg, &error_details);
+  const QuicErrorCode error =
+      config_.ProcessPeerHello(msg, CLIENT, &error_details);
   EXPECT_EQ(QUIC_NO_ERROR, error);
   EXPECT_TRUE(config_.negotiated());
   EXPECT_EQ(kQBIC, config_.congestion_control());
@@ -100,8 +96,8 @@
             config_.max_streams_per_connection());
   EXPECT_EQ(QuicTime::Delta::FromSeconds(0), config_.keepalive_timeout());
   EXPECT_EQ(10 * base::Time::kMicrosecondsPerMillisecond,
-            config_.initial_round_trip_time_us());
-  EXPECT_EQ(kNACK, config_.loss_detection());
+            config_.ReceivedInitialRoundTripTimeUs());
+  EXPECT_FALSE(config_.HasReceivedLossDetection());
 }
 
 TEST_F(QuicConfigTest, ProcessServerHello) {
@@ -115,18 +111,14 @@
   server_config.set_max_streams_per_connection(
       kDefaultMaxStreamsPerConnection / 2,
       kDefaultMaxStreamsPerConnection / 2);
-  server_config.set_server_initial_congestion_window(kDefaultInitialWindow / 2,
-                                                     kDefaultInitialWindow / 2);
-  server_config.set_initial_round_trip_time_us(
-      10 * base::Time::kMicrosecondsPerMillisecond,
+  server_config.SetInitialCongestionWindowToSend(kDefaultInitialWindow / 2);
+  server_config.SetInitialRoundTripTimeUsToSend(
       10 * base::Time::kMicrosecondsPerMillisecond);
-  QuicTagVector loss_detection;
-  loss_detection.push_back(kNACK);
-  server_config.set_loss_detection(loss_detection, kNACK);
   CryptoHandshakeMessage msg;
   server_config.ToHandshakeMessage(&msg);
   string error_details;
-  const QuicErrorCode error = config_.ProcessServerHello(msg, &error_details);
+  const QuicErrorCode error =
+      config_.ProcessPeerHello(msg, SERVER, &error_details);
   EXPECT_EQ(QUIC_NO_ERROR, error);
   EXPECT_TRUE(config_.negotiated());
   EXPECT_EQ(kQBIC, config_.congestion_control());
@@ -135,11 +127,11 @@
   EXPECT_EQ(kDefaultMaxStreamsPerConnection / 2,
             config_.max_streams_per_connection());
   EXPECT_EQ(kDefaultInitialWindow / 2,
-            config_.server_initial_congestion_window());
+            config_.ReceivedInitialCongestionWindow());
   EXPECT_EQ(QuicTime::Delta::FromSeconds(0), config_.keepalive_timeout());
   EXPECT_EQ(10 * base::Time::kMicrosecondsPerMillisecond,
-            config_.initial_round_trip_time_us());
-  EXPECT_EQ(kNACK, config_.loss_detection());
+            config_.ReceivedInitialRoundTripTimeUs());
+  EXPECT_FALSE(config_.HasReceivedLossDetection());
 }
 
 TEST_F(QuicConfigTest, MissingOptionalValuesInCHLO) {
@@ -154,11 +146,11 @@
 
   // No error, as rest are optional.
   string error_details;
-  const QuicErrorCode error = config_.ProcessClientHello(msg, &error_details);
+  const QuicErrorCode error =
+      config_.ProcessPeerHello(msg, CLIENT, &error_details);
   EXPECT_EQ(QUIC_NO_ERROR, error);
 
-  EXPECT_EQ(kDefaultFlowControlSendWindow,
-            config_.peer_initial_flow_control_window_bytes());
+  EXPECT_FALSE(config_.HasReceivedInitialFlowControlWindowBytes());
 }
 
 TEST_F(QuicConfigTest, MissingOptionalValuesInSHLO) {
@@ -171,11 +163,11 @@
 
   // No error, as rest are optional.
   string error_details;
-  const QuicErrorCode error = config_.ProcessServerHello(msg, &error_details);
+  const QuicErrorCode error =
+      config_.ProcessPeerHello(msg, SERVER, &error_details);
   EXPECT_EQ(QUIC_NO_ERROR, error);
 
-  EXPECT_EQ(kDefaultFlowControlSendWindow,
-            config_.peer_initial_flow_control_window_bytes());
+  EXPECT_FALSE(config_.HasReceivedInitialFlowControlWindowBytes());
 }
 
 TEST_F(QuicConfigTest, MissingValueInCHLO) {
@@ -184,7 +176,8 @@
   msg.SetVector(kCGST, QuicTagVector(1, kQBIC));
   // Missing kMSPC. KATO is optional.
   string error_details;
-  const QuicErrorCode error = config_.ProcessClientHello(msg, &error_details);
+  const QuicErrorCode error =
+      config_.ProcessPeerHello(msg, CLIENT, &error_details);
   EXPECT_EQ(QUIC_CRYPTO_MESSAGE_PARAMETER_NOT_FOUND, error);
 }
 
@@ -194,7 +187,8 @@
   msg.SetValue(kMSPC, 3);
   // Missing CGST. KATO is optional.
   string error_details;
-  const QuicErrorCode error = config_.ProcessServerHello(msg, &error_details);
+  const QuicErrorCode error =
+      config_.ProcessPeerHello(msg, SERVER, &error_details);
   EXPECT_EQ(QUIC_CRYPTO_MESSAGE_PARAMETER_NOT_FOUND, error);
 }
 
@@ -207,7 +201,8 @@
   CryptoHandshakeMessage msg;
   server_config.ToHandshakeMessage(&msg);
   string error_details;
-  const QuicErrorCode error = config_.ProcessServerHello(msg, &error_details);
+  const QuicErrorCode error =
+      config_.ProcessPeerHello(msg, SERVER, &error_details);
   EXPECT_EQ(QUIC_INVALID_NEGOTIATED_VALUE, error);
 }
 
@@ -221,7 +216,8 @@
   CryptoHandshakeMessage msg;
   server_config.ToHandshakeMessage(&msg);
   string error_details;
-  const QuicErrorCode error = config_.ProcessServerHello(msg, &error_details);
+  const QuicErrorCode error =
+      config_.ProcessPeerHello(msg, SERVER, &error_details);
   EXPECT_EQ(QUIC_INVALID_NEGOTIATED_VALUE, error);
 }
 
@@ -235,8 +231,9 @@
   CryptoHandshakeMessage msg;
   string error_details;
   server_config.ToHandshakeMessage(&msg);
-  const QuicErrorCode error = config_.ProcessClientHello(msg, &error_details);
-  LOG(INFO) << QuicUtils::ErrorToString(error);
+  const QuicErrorCode error =
+      config_.ProcessPeerHello(msg, CLIENT, &error_details);
+  DVLOG(1) << QuicUtils::ErrorToString(error);
   EXPECT_EQ(QUIC_CRYPTO_MESSAGE_PARAMETER_NO_OVERLAP, error);
 }
 
diff --git a/net/quic/quic_connection.cc b/net/quic/quic_connection.cc
index f0218a7..dfdfe90 100644
--- a/net/quic/quic_connection.cc
+++ b/net/quic/quic_connection.cc
@@ -75,6 +75,8 @@
 
  private:
   QuicConnection* connection_;
+
+  DISALLOW_COPY_AND_ASSIGN(AckAlarm);
 };
 
 // This alarm will be scheduled any time a data-bearing packet is sent out.
@@ -93,6 +95,8 @@
 
  private:
   QuicConnection* connection_;
+
+  DISALLOW_COPY_AND_ASSIGN(RetransmissionAlarm);
 };
 
 // An alarm that is scheduled when the sent scheduler requires a
@@ -111,6 +115,8 @@
 
  private:
   QuicConnection* connection_;
+
+  DISALLOW_COPY_AND_ASSIGN(SendAlarm);
 };
 
 class TimeoutAlarm : public QuicAlarm::Delegate {
@@ -127,6 +133,25 @@
 
  private:
   QuicConnection* connection_;
+
+  DISALLOW_COPY_AND_ASSIGN(TimeoutAlarm);
+};
+
+class PingAlarm : public QuicAlarm::Delegate {
+ public:
+  explicit PingAlarm(QuicConnection* connection)
+      : connection_(connection) {
+  }
+
+  virtual QuicTime OnAlarm() OVERRIDE {
+    connection_->SendPing();
+    return QuicTime::Zero();
+  }
+
+ private:
+  QuicConnection* connection_;
+
+  DISALLOW_COPY_AND_ASSIGN(PingAlarm);
 };
 
 QuicConnection::PacketType GetPacketType(
@@ -182,7 +207,8 @@
       largest_seen_packet_with_stop_waiting_(0),
       pending_version_negotiation_packet_(false),
       received_packet_manager_(
-          FLAGS_quic_congestion_control_inter_arrival ? kInterArrival : kTCP),
+          FLAGS_quic_congestion_control_inter_arrival ? kInterArrival : kTCP,
+          &stats_),
       ack_queued_(false),
       stop_waiting_count_(0),
       ack_alarm_(helper->CreateAlarm(new AckAlarm(this))),
@@ -190,13 +216,13 @@
       send_alarm_(helper->CreateAlarm(new SendAlarm(this))),
       resume_writes_alarm_(helper->CreateAlarm(new SendAlarm(this))),
       timeout_alarm_(helper->CreateAlarm(new TimeoutAlarm(this))),
+      ping_alarm_(helper->CreateAlarm(new PingAlarm(this))),
       debug_visitor_(NULL),
       packet_creator_(connection_id_, &framer_, random_generator_, is_server),
       packet_generator_(this, NULL, &packet_creator_),
       idle_network_timeout_(
           QuicTime::Delta::FromSeconds(kDefaultInitialTimeoutSecs)),
       overall_connection_timeout_(QuicTime::Delta::Infinite()),
-      creation_time_(clock_->ApproximateNow()),
       time_of_last_received_packet_(clock_->ApproximateNow()),
       time_of_last_sent_new_packet_(clock_->ApproximateNow()),
       sequence_number_of_last_sent_packet_(0),
@@ -226,6 +252,7 @@
   timeout_alarm_->Set(clock_->ApproximateNow().Add(idle_network_timeout_));
   framer_.set_visitor(this);
   framer_.set_received_entropy_calculator(&received_packet_manager_);
+  stats_.connection_creation_time = clock_->ApproximateNow();
 }
 
 QuicConnection::~QuicConnection() {
@@ -238,7 +265,6 @@
 }
 
 void QuicConnection::SetFromConfig(const QuicConfig& config) {
-  DCHECK_LT(0u, config.server_initial_congestion_window());
   SetIdleNetworkTimeout(config.idle_connection_state_lifetime());
   sent_packet_manager_.SetFromConfig(config);
   // TODO(satyamshekhar): Set congestion control and ICSL also.
@@ -575,6 +601,14 @@
   return connected_;
 }
 
+bool QuicConnection::OnPingFrame(const QuicPingFrame& frame) {
+  DCHECK(connected_);
+  if (debug_visitor_) {
+    debug_visitor_->OnPingFrame(frame);
+  }
+  return true;
+}
+
 bool QuicConnection::ValidateAckFrame(const QuicAckFrame& incoming_ack) {
   if (incoming_ack.received_info.largest_observed >
       packet_creator_.sequence_number()) {
@@ -984,8 +1018,8 @@
                                    QuicStreamOffset bytes_written) {
   // Opportunistically bundle an ack with this outgoing packet.
   ScopedPacketBundler ack_bundler(this, BUNDLE_PENDING_ACK);
-  packet_generator_.AddControlFrame(
-      QuicFrame(new QuicRstStreamFrame(id, error, bytes_written)));
+  packet_generator_.AddControlFrame(QuicFrame(new QuicRstStreamFrame(
+      id, AdjustErrorForVersion(error, version()), bytes_written)));
 }
 
 void QuicConnection::SendWindowUpdate(QuicStreamId id,
@@ -1004,9 +1038,14 @@
 
 const QuicConnectionStats& QuicConnection::GetStats() {
   // Update rtt and estimated bandwidth.
-  stats_.rtt = sent_packet_manager_.SmoothedRtt().ToMicroseconds();
+  stats_.min_rtt_us =
+      sent_packet_manager_.GetRttStats()->min_rtt().ToMicroseconds();
+  stats_.srtt_us =
+      sent_packet_manager_.GetRttStats()->SmoothedRtt().ToMicroseconds();
   stats_.estimated_bandwidth =
       sent_packet_manager_.BandwidthEstimate().ToBytesPerSecond();
+  stats_.congestion_window = sent_packet_manager_.GetCongestionWindow();
+  stats_.max_packet_size = options()->max_packet_length;
   return stats_;
 }
 
@@ -1054,6 +1093,7 @@
   MaybeProcessUndecryptablePackets();
   MaybeProcessRevivedPacket();
   MaybeSendInResponseToPacket();
+  SetPingAlarm();
 }
 
 void QuicConnection::OnCanWrite() {
@@ -1403,6 +1443,7 @@
   if (transmission_type == NOT_RETRANSMISSION) {
     time_of_last_sent_new_packet_ = now;
   }
+  SetPingAlarm();
   DVLOG(1) << ENDPOINT << "time of last sent packet: "
            << now.ToDebuggingValue();
 
@@ -1410,8 +1451,7 @@
   // options by a more explicit API than setting a struct value directly.
   packet_creator_.UpdateSequenceNumberLength(
       received_packet_manager_.least_packet_awaited_by_peer(),
-      sent_packet_manager_.BandwidthEstimate().ToBytesPerPeriod(
-          sent_packet_manager_.SmoothedRtt()));
+      sent_packet_manager_.GetCongestionWindow());
 
   bool reset_retransmission_alarm =
       sent_packet_manager_.OnPacketSent(sequence_number, now, length,
@@ -1479,6 +1519,26 @@
       stop_waiting->least_unacked - 1);
 }
 
+void QuicConnection::SendPing() {
+  if (retransmission_alarm_->IsSet()) {
+    return;
+  }
+  if (version() <= QUIC_VERSION_17) {
+    // TODO(rch): remove this when we remove version 17.
+    // This is a horrible hideous hack which we should not support.
+    IOVector data;
+    char c_data[] = "C";
+    data.Append(c_data, 1);
+    QuicConsumedData consumed_data =
+        packet_generator_.ConsumeData(kCryptoStreamId, data, 0, false, NULL);
+    if (consumed_data.bytes_consumed == 0) {
+      DLOG(ERROR) << "Unable to send ping!?";
+    }
+  } else {
+    packet_generator_.AddControlFrame(QuicFrame(new QuicPingFrame));
+  }
+}
+
 void QuicConnection::SendAck() {
   ack_alarm_->Cancel();
   stop_waiting_count_ = 0;
@@ -1586,8 +1646,12 @@
   char revived_payload[kMaxPacketSize];
   size_t len = group->Revive(&revived_header, revived_payload, kMaxPacketSize);
   revived_header.public_header.connection_id = connection_id_;
+  revived_header.public_header.connection_id_length =
+      last_header_.public_header.connection_id_length;
   revived_header.public_header.version_flag = false;
   revived_header.public_header.reset_flag = false;
+  revived_header.public_header.sequence_number_length =
+      last_header_.public_header.sequence_number_length;
   revived_header.fec_flag = false;
   revived_header.is_in_fec_group = NOT_IN_FEC_GROUP;
   revived_header.fec_group = 0;
@@ -1775,7 +1839,8 @@
   QuicTime::Delta timeout = idle_network_timeout_.Subtract(delta);
 
   if (!overall_connection_timeout_.IsInfinite()) {
-    QuicTime::Delta connected_time = now.Subtract(creation_time_);
+    QuicTime::Delta connected_time =
+        now.Subtract(stats_.connection_creation_time);
     DVLOG(1) << ENDPOINT << "connection time: "
              << connected_time.ToMilliseconds() << " overall timeout: "
              << overall_connection_timeout_.ToMilliseconds();
@@ -1799,6 +1864,20 @@
   return false;
 }
 
+void QuicConnection::SetPingAlarm() {
+  if (is_server_) {
+    // Only clients send pings.
+    return;
+  }
+  ping_alarm_->Cancel();
+  if (!visitor_->HasOpenDataStreams()) {
+    // Don't send a ping unless there are open streams.
+    return;
+  }
+  QuicTime::Delta ping_timeout = QuicTime::Delta::FromSeconds(kPingTimeoutSecs);
+  ping_alarm_->Set(clock_->ApproximateNow().Add(ping_timeout));
+}
+
 QuicConnection::ScopedPacketBundler::ScopedPacketBundler(
     QuicConnection* connection,
     AckBundling send_ack)
diff --git a/net/quic/quic_connection.h b/net/quic/quic_connection.h
index 03b5efc..15d4b38 100644
--- a/net/quic/quic_connection.h
+++ b/net/quic/quic_connection.h
@@ -103,6 +103,10 @@
 
   // Called to ask if any handshake messages are pending in this visitor.
   virtual bool HasPendingHandshake() const = 0;
+
+  // Called to ask if any streams are open in this visitor, excluding the
+  // reserved crypto and headers stream.
+  virtual bool HasOpenDataStreams() const = 0;
 };
 
 // Interface which gets callbacks from the QuicConnection at interesting
@@ -152,6 +156,9 @@
   // Called when a StopWaitingFrame has been parsed.
   virtual void OnStopWaitingFrame(const QuicStopWaitingFrame& frame) {}
 
+  // Called when a Ping has been parsed.
+  virtual void OnPingFrame(const QuicPingFrame& frame) {}
+
   // Called when a RstStreamFrame has been parsed.
   virtual void OnRstStreamFrame(const QuicRstStreamFrame& frame) {}
 
@@ -315,6 +322,7 @@
   virtual bool OnCongestionFeedbackFrame(
       const QuicCongestionFeedbackFrame& frame) OVERRIDE;
   virtual bool OnStopWaitingFrame(const QuicStopWaitingFrame& frame) OVERRIDE;
+  virtual bool OnPingFrame(const QuicPingFrame& frame) OVERRIDE;
   virtual bool OnRstStreamFrame(const QuicRstStreamFrame& frame) OVERRIDE;
   virtual bool OnConnectionCloseFrame(
       const QuicConnectionCloseFrame& frame) OVERRIDE;
@@ -391,6 +399,9 @@
   // true.  Otherwise, it will return false and will reset the timeout alarm.
   bool CheckForTimeout();
 
+  // Sends a ping, and resets the ping alarm.
+  void SendPing();
+
   // Sets up a packet with an QuicAckFrame and sends it out.
   void SendAck();
 
@@ -450,6 +461,26 @@
     return max_flow_control_receive_window_bytes_;
   }
 
+  // Stores current batch state for connection, puts the connection
+  // into batch mode, and destruction restores the stored batch state.
+  // While the bundler is in scope, any generated frames are bundled
+  // as densely as possible into packets.  In addition, this bundler
+  // can be configured to ensure that an ACK frame is included in the
+  // first packet created, if there's new ack information to be sent.
+  class ScopedPacketBundler {
+   public:
+    // In addition to all outgoing frames being bundled when the
+    // bundler is in scope, setting |include_ack| to true ensures that
+    // an ACK frame is opportunistically bundled with the first
+    // outgoing packet.
+    ScopedPacketBundler(QuicConnection* connection, AckBundling send_ack);
+    ~ScopedPacketBundler();
+
+   private:
+    QuicConnection* connection_;
+    bool already_in_batch_mode_;
+  };
+
  protected:
   // Send a packet to the peer using encryption |level|. If |sequence_number|
   // is present in the |retransmission_map_|, then contents of this packet will
@@ -471,28 +502,9 @@
   // such a version exists, false otherwise.
   bool SelectMutualVersion(const QuicVersionVector& available_versions);
 
+  QuicPacketWriter* writer() { return writer_; }
+
  private:
-  // Stores current batch state for connection, puts the connection
-  // into batch mode, and destruction restores the stored batch state.
-  // While the bundler is in scope, any generated frames are bundled
-  // as densely as possible into packets.  In addition, this bundler
-  // can be configured to ensure that an ACK frame is included in the
-  // first packet created, if there's new ack information to be sent.
-  class ScopedPacketBundler {
-   public:
-    // In addition to all outgoing frames being bundled when the
-    // bundler is in scope, setting |include_ack| to true ensures that
-    // an ACK frame is opportunistically bundled with the first
-    // outgoing packet.
-    ScopedPacketBundler(QuicConnection* connection, AckBundling send_ack);
-    ~ScopedPacketBundler();
-
-   private:
-    QuicConnection* connection_;
-    bool already_in_batch_mode_;
-  };
-
-  friend class ScopedPacketBundler;
   friend class test::QuicConnectionPeer;
 
   // Packets which have not been written to the wire.
@@ -589,6 +601,9 @@
   // Closes any FEC groups protecting packets before |sequence_number|.
   void CloseFecGroupsBefore(QuicPacketSequenceNumber sequence_number);
 
+  // Sets the ping alarm to the appropriate value, if any.
+  void SetPingAlarm();
+
   QuicFramer framer_;
   QuicConnectionHelperInterface* helper_;  // Not owned.
   QuicPacketWriter* writer_;  // Not owned.
@@ -668,6 +683,8 @@
   scoped_ptr<QuicAlarm> resume_writes_alarm_;
   // An alarm that fires when the connection may have timed out.
   scoped_ptr<QuicAlarm> timeout_alarm_;
+  // An alarm that fires when a ping should be sent.
+  scoped_ptr<QuicAlarm> ping_alarm_;
 
   QuicConnectionVisitorInterface* visitor_;
   QuicConnectionDebugVisitorInterface* debug_visitor_;
@@ -678,8 +695,6 @@
   QuicTime::Delta idle_network_timeout_;
   // Overall connection timeout.
   QuicTime::Delta overall_connection_timeout_;
-  // Connection creation time.
-  QuicTime creation_time_;
 
   // Statistics for this session.
   QuicConnectionStats stats_;
diff --git a/net/quic/quic_connection_logger.h b/net/quic/quic_connection_logger.h
index cb3c920..69faed3 100644
--- a/net/quic/quic_connection_logger.h
+++ b/net/quic/quic_connection_logger.h
@@ -8,6 +8,7 @@
 #include <bitset>
 
 #include "net/base/ip_endpoint.h"
+#include "net/base/net_log.h"
 #include "net/base/network_change_notifier.h"
 #include "net/quic/quic_connection.h"
 #include "net/quic/quic_protocol.h"
@@ -141,6 +142,7 @@
   // The available type of connection (WiFi, 3G, etc.) when connection was first
   // used.
   const char* const connection_description_;
+
   DISALLOW_COPY_AND_ASSIGN(QuicConnectionLogger);
 };
 
diff --git a/net/quic/quic_connection_stats.cc b/net/quic/quic_connection_stats.cc
index 284ecce..2ea44df 100644
--- a/net/quic/quic_connection_stats.cc
+++ b/net/quic/quic_connection_stats.cc
@@ -17,18 +17,26 @@
       stream_bytes_received(0),
       bytes_retransmitted(0),
       packets_retransmitted(0),
+      bytes_spuriously_retransmitted(0),
       packets_spuriously_retransmitted(0),
       packets_lost(0),
+      slowstart_packets_lost(0),
       packets_revived(0),
       packets_dropped(0),
       crypto_retransmit_count(0),
       loss_timeout_count(0),
       tlp_count(0),
       rto_count(0),
-      rtt(0),
+      min_rtt_us(0),
+      srtt_us(0),
       estimated_bandwidth(0),
+      packets_reordered(0),
+      max_sequence_reordering(0),
+      max_time_reordering_us(0),
+      tcp_loss_events(0),
       cwnd_increase_congestion_avoidance(0),
-      cwnd_increase_cubic_mode(0) {
+      cwnd_increase_cubic_mode(0),
+      connection_creation_time(QuicTime::Zero()) {
 }
 
 QuicConnectionStats::~QuicConnectionStats() {}
@@ -42,16 +50,25 @@
      << ", stream bytes received: " << s.stream_bytes_received
      << ", bytes retransmitted: " << s.bytes_retransmitted
      << ", packets retransmitted: " << s.packets_retransmitted
-     << ", packets_spuriously_retransmitted: "
+     << ", bytes spuriously retransmitted: " << s.bytes_spuriously_retransmitted
+     << ", packets spuriously retransmitted: "
      << s.packets_spuriously_retransmitted
      << ", packets lost: " << s.packets_lost
+     << ", slowstart packets lost: " << s.slowstart_packets_lost
      << ", packets revived: " << s.packets_revived
      << ", packets dropped:" << s.packets_dropped
      << ", crypto retransmit count: " << s.crypto_retransmit_count
      << ", rto count: " << s.rto_count
      << ", tlp count: " << s.tlp_count
-     << ", rtt(us): " << s.rtt
-     << ", estimated_bandwidth: " << s.estimated_bandwidth
+     << ", min_rtt(us): " << s.min_rtt_us
+     << ", srtt(us): " << s.srtt_us
+     << ", max packet size: " << s.max_packet_size
+     << ", estimated bandwidth: " << s.estimated_bandwidth
+     << ", congestion window: " << s.congestion_window
+     << ", tcp_loss_events: " << s.tcp_loss_events
+     << ", packets reordered: " << s.packets_reordered
+     << ", max sequence reordering: " << s.max_sequence_reordering
+     << ", max time reordering(us): " << s.max_time_reordering_us
      << ", total amount of cwnd increase in TCPCubic, in congestion avoidance: "
      << s.cwnd_increase_congestion_avoidance
      << ", amount of cwnd increase in TCPCubic, in cubic mode: "
diff --git a/net/quic/quic_connection_stats.h b/net/quic/quic_connection_stats.h
index dffae31..5197cf7 100644
--- a/net/quic/quic_connection_stats.h
+++ b/net/quic/quic_connection_stats.h
@@ -9,19 +9,9 @@
 
 #include "base/basictypes.h"
 #include "net/base/net_export.h"
+#include "net/quic/quic_time.h"
 
 namespace net {
-// TODO(satyamshekhar): Add more interesting stats:
-// 1. (C/S)HLO retransmission count.
-// 2. SHLO received to first stream packet processed time.
-// 3. CHLO sent to SHLO received time.
-// 4. Number of migrations.
-// 5. Number of out of order packets.
-// 6. Number of connections that require more that 1-RTT.
-// 7. Avg number of streams / session.
-// 8. Number of duplicates received.
-// 9. Fraction of data transferred that was padding.
-
 // Structure to hold stats for a QuicConnection.
 struct NET_EXPORT_PRIVATE QuicConnectionStats {
   QuicConnectionStats();
@@ -41,25 +31,45 @@
   uint64 bytes_retransmitted;
   uint32 packets_retransmitted;
 
+  uint64 bytes_spuriously_retransmitted;
   uint32 packets_spuriously_retransmitted;
   uint32 packets_lost;
+  uint32 slowstart_packets_lost;  // Number of packets lost exiting slow start.
 
   uint32 packets_revived;
   uint32 packets_dropped;  // duplicate or less than least unacked.
   uint32 crypto_retransmit_count;
-  uint32 loss_timeout_count;  // Count of times the loss detection alarm fired.
+  // Count of times the loss detection alarm fired.  At least one packet should
+  // be lost when the alarm fires.
+  uint32 loss_timeout_count;
   uint32 tlp_count;
-  uint32 rto_count;
+  uint32 rto_count;  // Count of times the rto timer fired.
 
-  uint32 rtt;  // In microseconds
-  uint64 estimated_bandwidth;
+  uint32 min_rtt_us;  // Minimum RTT in microseconds.
+  uint32 srtt_us;  // Smoothed RTT in microseconds.
+  uint32 max_packet_size;  // In bytes.
+  uint64 estimated_bandwidth;  // In bytes per second.
+  uint32 congestion_window;  // In bytes
+
+  // Reordering stats for received packets.
+  // Number of packets received out of sequence number order.
+  uint32 packets_reordered;
+  // Maximum reordering observed in sequence space.
+  uint32 max_sequence_reordering;
+  // Maximum reordering observed in microseconds
+  uint32 max_time_reordering_us;
 
   // The following stats are used only in TcpCubicSender.
+  // The number of loss events from TCP's perspective.  Each loss event includes
+  // one or more lost packets.
+  uint32 tcp_loss_events;
   // Total amount of cwnd increase by TCPCubic in congestion avoidance.
   uint32 cwnd_increase_congestion_avoidance;
   // Total amount of cwnd increase by TCPCubic in cubic mode.
   uint32 cwnd_increase_cubic_mode;
-  // TODO(satyamshekhar): Add window_size, mss and mtu.
+
+  // Creation time, as reported by the QuicClock.
+  QuicTime connection_creation_time;
 };
 
 }  // namespace net
diff --git a/net/quic/quic_connection_test.cc b/net/quic/quic_connection_test.cc
index bf1f464..acfb2b0 100644
--- a/net/quic/quic_connection_test.cc
+++ b/net/quic/quic_connection_test.cc
@@ -24,6 +24,7 @@
 #include "net/quic/test_tools/quic_packet_creator_peer.h"
 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h"
 #include "net/quic/test_tools/quic_test_utils.h"
+#include "net/quic/test_tools/simple_quic_framer.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -275,11 +276,11 @@
  public:
   explicit TestPacketWriter(QuicVersion version)
       : version_(version),
+        framer_(SupportedVersions(version_)),
         last_packet_size_(0),
         write_blocked_(false),
         block_on_next_write_(false),
         is_write_blocked_data_buffered_(false),
-        is_server_(true),
         final_bytes_of_last_packet_(0),
         final_bytes_of_previous_packet_(0),
         use_tagging_decrypter_(false),
@@ -300,14 +301,10 @@
              sizeof(final_bytes_of_last_packet_));
     }
 
-    QuicFramer framer(SupportedVersions(version_),
-                      QuicTime::Zero(), !is_server_);
     if (use_tagging_decrypter_) {
-      framer.SetDecrypter(new TaggingDecrypter);
+      framer_.framer()->SetDecrypter(new TaggingDecrypter);
     }
-    visitor_.Reset();
-    framer.set_visitor(&visitor_);
-    EXPECT_TRUE(framer.ProcessPacket(packet));
+    EXPECT_TRUE(framer_.ProcessPacket(packet));
     if (block_on_next_write_) {
       write_blocked_ = true;
       block_on_next_write_ = false;
@@ -329,40 +326,51 @@
 
   void BlockOnNextWrite() { block_on_next_write_ = true; }
 
-  // Resets the visitor's state by clearing out the headers and frames.
-  void Reset() {
-    visitor_.Reset();
+  const QuicPacketHeader& header() { return framer_.header(); }
+
+  size_t frame_count() const { return framer_.num_frames(); }
+
+  const vector<QuicAckFrame>& ack_frames() const {
+    return framer_.ack_frames();
   }
 
-  QuicPacketHeader* header() { return visitor_.header(); }
+  const vector<QuicCongestionFeedbackFrame>& feedback_frames() const {
+    return framer_.feedback_frames();
+  }
 
-  size_t frame_count() const { return visitor_.frame_count(); }
+  const vector<QuicStopWaitingFrame>& stop_waiting_frames() const {
+    return framer_.stop_waiting_frames();
+  }
 
-  QuicAckFrame* ack() { return visitor_.ack(); }
+  const vector<QuicConnectionCloseFrame>& connection_close_frames() const {
+    return framer_.connection_close_frames();
+  }
 
-  QuicCongestionFeedbackFrame* feedback() { return visitor_.feedback(); }
+  const vector<QuicStreamFrame>& stream_frames() const {
+    return framer_.stream_frames();
+  }
 
-  QuicStopWaitingFrame* stop_waiting() { return visitor_.stop_waiting(); }
-
-  QuicConnectionCloseFrame* close() { return visitor_.close(); }
-
-  const vector<QuicStreamFrame>* stream_frames() const {
-    return visitor_.stream_frames();
+  const vector<QuicPingFrame>& ping_frames() const {
+    return framer_.ping_frames();
   }
 
   size_t last_packet_size() {
     return last_packet_size_;
   }
 
-  QuicVersionNegotiationPacket* version_negotiation_packet() {
-    return visitor_.version_negotiation_packet();
+  const QuicVersionNegotiationPacket* version_negotiation_packet() {
+    return framer_.version_negotiation_packet();
   }
 
   void set_is_write_blocked_data_buffered(bool buffered) {
     is_write_blocked_data_buffered_ = buffered;
   }
 
-  void set_is_server(bool is_server) { is_server_ = is_server; }
+  void set_is_server(bool is_server) {
+    // We invert is_server here, because the framer needs to parse packets
+    // we send.
+    QuicFramerPeer::SetIsServer(framer_.framer(), !is_server);
+  }
 
   // final_bytes_of_last_packet_ returns the last four bytes of the previous
   // packet as a little-endian, uint32. This is intended to be used with a
@@ -381,14 +389,19 @@
 
   uint32 packets_write_attempts() { return packets_write_attempts_; }
 
+  void Reset() { framer_.Reset(); }
+
+  void SetSupportedVersions(const QuicVersionVector& versions) {
+    framer_.SetSupportedVersions(versions);
+  }
+
  private:
   QuicVersion version_;
-  FramerVisitorCapturingFrames visitor_;
+  SimpleQuicFramer framer_;
   size_t last_packet_size_;
   bool write_blocked_;
   bool block_on_next_write_;
   bool is_write_blocked_data_buffered_;
-  bool is_server_;
   uint32 final_bytes_of_last_packet_;
   uint32 final_bytes_of_previous_packet_;
   bool use_tagging_decrypter_;
@@ -496,6 +509,7 @@
 
   void SetSupportedVersions(const QuicVersionVector& versions) {
     QuicConnectionPeer::GetFramer(this)->SetSupportedVersions(versions);
+    writer_->SetSupportedVersions(versions);
   }
 
   void set_is_server(bool is_server) {
@@ -510,6 +524,16 @@
         QuicConnectionPeer::GetAckAlarm(this));
   }
 
+  TestConnectionHelper::TestAlarm* GetPingAlarm() {
+    return reinterpret_cast<TestConnectionHelper::TestAlarm*>(
+        QuicConnectionPeer::GetPingAlarm(this));
+  }
+
+  TestConnectionHelper::TestAlarm* GetResumeWritesAlarm() {
+    return reinterpret_cast<TestConnectionHelper::TestAlarm*>(
+        QuicConnectionPeer::GetResumeWritesAlarm(this));
+  }
+
   TestConnectionHelper::TestAlarm* GetRetransmissionAlarm() {
     return reinterpret_cast<TestConnectionHelper::TestAlarm*>(
         QuicConnectionPeer::GetRetransmissionAlarm(this));
@@ -520,11 +544,6 @@
         QuicConnectionPeer::GetSendAlarm(this));
   }
 
-  TestConnectionHelper::TestAlarm* GetResumeWritesAlarm() {
-    return reinterpret_cast<TestConnectionHelper::TestAlarm*>(
-        QuicConnectionPeer::GetResumeWritesAlarm(this));
-  }
-
   TestConnectionHelper::TestAlarm* GetTimeoutAlarm() {
     return reinterpret_cast<TestConnectionHelper::TestAlarm*>(
         QuicConnectionPeer::GetTimeoutAlarm(this));
@@ -538,6 +557,24 @@
   DISALLOW_COPY_AND_ASSIGN(TestConnection);
 };
 
+// Used for testing packets revived from FEC packets.
+class FecQuicConnectionDebugVisitor
+    : public QuicConnectionDebugVisitorInterface {
+ public:
+  virtual void OnRevivedPacket(const QuicPacketHeader& header,
+                               StringPiece data) OVERRIDE {
+    revived_header_ = header;
+  }
+
+  // Public accessor method.
+  QuicPacketHeader revived_header() const {
+    return revived_header_;
+  }
+
+ private:
+  QuicPacketHeader revived_header_;
+};
+
 class QuicConnectionTest : public ::testing::TestWithParam<QuicVersion> {
  protected:
   QuicConnectionTest()
@@ -553,7 +590,9 @@
                     kDefaultFlowControlSendWindow),
         frame1_(1, false, 0, MakeIOVector(data1)),
         frame2_(1, false, 3, MakeIOVector(data2)),
-        accept_packet_(true) {
+        accept_packet_(true),
+        sequence_number_length_(PACKET_6BYTE_SEQUENCE_NUMBER),
+        connection_id_length_(PACKET_8BYTE_CONNECTION_ID) {
     connection_.set_visitor(&visitor_);
     connection_.SetSendAlgorithm(send_algorithm_);
     connection_.SetLossAlgorithm(loss_algorithm_);
@@ -569,13 +608,14 @@
         .Times(AnyNumber());
     EXPECT_CALL(*send_algorithm_, RetransmissionDelay()).WillRepeatedly(
         Return(QuicTime::Delta::Zero()));
-    EXPECT_CALL(*send_algorithm_, BandwidthEstimate()).WillRepeatedly(Return(
-        QuicBandwidth::FromKBitsPerSecond(100)));
+    EXPECT_CALL(*send_algorithm_, GetCongestionWindow()).WillRepeatedly(
+        Return(kMaxPacketSize));
     ON_CALL(*send_algorithm_, OnPacketSent(_, _, _, _))
         .WillByDefault(Return(true));
     EXPECT_CALL(visitor_, HasPendingWrites()).Times(AnyNumber());
     EXPECT_CALL(visitor_, HasPendingHandshake()).Times(AnyNumber());
     EXPECT_CALL(visitor_, OnCanWrite()).Times(AnyNumber());
+    EXPECT_CALL(visitor_, HasOpenDataStreams()).WillRepeatedly(Return(false));
 
     EXPECT_CALL(*loss_algorithm_, GetLossTimeout())
         .WillRepeatedly(Return(QuicTime::Zero()));
@@ -594,49 +634,15 @@
 
   QuicPacketSequenceNumber least_unacked() {
     if (version() <= QUIC_VERSION_15) {
-      QuicAckFrame* ack = last_ack();
-      if (ack == NULL) {
+      if (writer_->ack_frames().empty()) {
         return 0;
       }
-      return ack->sent_info.least_unacked;
+      return writer_->ack_frames()[0].sent_info.least_unacked;
     }
-    QuicStopWaitingFrame* stop_waiting = last_stop_waiting();
-    if (stop_waiting == NULL) {
+    if (writer_->stop_waiting_frames().empty()) {
       return 0;
     }
-    return stop_waiting->least_unacked;
-  }
-
-  QuicAckFrame* last_ack() {
-    return writer_->ack();
-  }
-
-  QuicCongestionFeedbackFrame* last_feedback() {
-    return writer_->feedback();
-  }
-
-  QuicStopWaitingFrame* last_stop_waiting() {
-    return writer_->stop_waiting();
-  }
-
-  QuicConnectionCloseFrame* last_close() {
-    return writer_->close();
-  }
-
-  QuicPacketHeader* last_header() {
-    return writer_->header();
-  }
-
-  size_t last_sent_packet_size() {
-    return writer_->last_packet_size();
-  }
-
-  uint32 final_bytes_of_last_packet() {
-    return writer_->final_bytes_of_last_packet();
-  }
-
-  uint32 final_bytes_of_previous_packet() {
-    return writer_->final_bytes_of_previous_packet();
+    return writer_->stop_waiting_frames()[0].least_unacked;
   }
 
   void use_tagging_decrypter() {
@@ -723,9 +729,11 @@
     header_.public_header.connection_id = connection_id_;
     header_.public_header.reset_flag = false;
     header_.public_header.version_flag = false;
+    header_.public_header.sequence_number_length = sequence_number_length_;
+    header_.public_header.connection_id_length = connection_id_length_;
+    header_.packet_sequence_number = number;
     header_.entropy_flag = entropy_flag;
     header_.fec_flag = true;
-    header_.packet_sequence_number = number;
     header_.is_in_fec_group = IN_FEC_GROUP;
     header_.fec_group = min_protected_packet;
     QuicFecData fec_data;
@@ -801,6 +809,8 @@
     header_.public_header.connection_id = connection_id_;
     header_.public_header.reset_flag = false;
     header_.public_header.version_flag = false;
+    header_.public_header.sequence_number_length = sequence_number_length_;
+    header_.public_header.connection_id_length = connection_id_length_;
     header_.entropy_flag = entropy_flag;
     header_.fec_flag = false;
     header_.packet_sequence_number = number;
@@ -855,7 +865,7 @@
   // Initialize a frame acknowledging all packets up to largest_observed.
   const QuicAckFrame InitAckFrame(QuicPacketSequenceNumber largest_observed,
                                   QuicPacketSequenceNumber least_unacked) {
-    QuicAckFrame frame(largest_observed, QuicTime::Zero(), least_unacked);
+    QuicAckFrame frame(MakeAckFrame(largest_observed, least_unacked));
     if (largest_observed > 0) {
       frame.received_info.entropy_hash =
         QuicConnectionPeer::GetSentEntropyHash(&connection_, largest_observed);
@@ -928,6 +938,8 @@
   QuicStreamFrame frame2_;
   scoped_ptr<QuicAckFrame> outgoing_ack_;
   bool accept_packet_;
+  QuicSequenceNumberLength sequence_number_length_;
+  QuicConnectionIdLength connection_id_length_;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(QuicConnectionTest);
@@ -1171,8 +1183,7 @@
   connection_.SendStreamDataWithString(3, "foo", 3, !kFin, NULL);
   // No ack sent.
   EXPECT_EQ(1u, writer_->frame_count());
-  EXPECT_EQ(1u, writer_->stream_frames()->size());
-  writer_->Reset();
+  EXPECT_EQ(1u, writer_->stream_frames().size());
 
   // No more packet loss for the rest of the test.
   EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
@@ -1187,8 +1198,8 @@
   } else {
     EXPECT_EQ(2u, writer_->frame_count());
   }
-  EXPECT_EQ(1u, writer_->stream_frames()->size());
-  EXPECT_TRUE(writer_->ack());
+  EXPECT_EQ(1u, writer_->stream_frames().size());
+  EXPECT_FALSE(writer_->ack_frames().empty());
 
   // But an ack with no missing packets will not send an ack.
   AckPacket(original, &frame2);
@@ -1268,7 +1279,7 @@
   EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_INVALID_ACK_DATA, false));
   EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
   EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _));
-  QuicAckFrame frame(1, QuicTime::Zero(), 0);
+  QuicAckFrame frame(MakeAckFrame(1, 0));
   EXPECT_CALL(visitor_, OnCanWrite()).Times(0);
   ProcessAckPacket(&frame);
 }
@@ -1283,19 +1294,16 @@
 }
 
 TEST_P(QuicConnectionTest, SendingDifferentSequenceNumberLengthsBandwidth) {
-  EXPECT_CALL(*send_algorithm_, BandwidthEstimate()).WillOnce(Return(
-       QuicBandwidth::FromKBitsPerSecond(1000)));
-
   QuicPacketSequenceNumber last_packet;
   SendStreamDataToPeer(1, "foo", 0, !kFin, &last_packet);
   EXPECT_EQ(1u, last_packet);
   EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER,
             connection_.options()->send_sequence_number_length);
   EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER,
-            last_header()->public_header.sequence_number_length);
+            writer_->header().public_header.sequence_number_length);
 
-  EXPECT_CALL(*send_algorithm_, BandwidthEstimate()).WillOnce(Return(
-       QuicBandwidth::FromKBitsPerSecond(1000 * 256)));
+  EXPECT_CALL(*send_algorithm_, GetCongestionWindow()).WillRepeatedly(
+      Return(kMaxPacketSize * 256));
 
   SendStreamDataToPeer(1, "bar", 3, !kFin, &last_packet);
   EXPECT_EQ(2u, last_packet);
@@ -1304,37 +1312,37 @@
   // The 1 packet lag is due to the sequence number length being recalculated in
   // QuicConnection after a packet is sent.
   EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER,
-            last_header()->public_header.sequence_number_length);
+            writer_->header().public_header.sequence_number_length);
 
-  EXPECT_CALL(*send_algorithm_, BandwidthEstimate()).WillOnce(Return(
-       QuicBandwidth::FromKBitsPerSecond(1000 * 256 * 256)));
+  EXPECT_CALL(*send_algorithm_, GetCongestionWindow()).WillRepeatedly(
+      Return(kMaxPacketSize * 256 * 256));
 
   SendStreamDataToPeer(1, "foo", 6, !kFin, &last_packet);
   EXPECT_EQ(3u, last_packet);
   EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER,
             connection_.options()->send_sequence_number_length);
   EXPECT_EQ(PACKET_2BYTE_SEQUENCE_NUMBER,
-            last_header()->public_header.sequence_number_length);
+            writer_->header().public_header.sequence_number_length);
 
-  EXPECT_CALL(*send_algorithm_, BandwidthEstimate()).WillOnce(Return(
-       QuicBandwidth::FromKBitsPerSecond(1000ll * 256 * 256 * 256)));
+  EXPECT_CALL(*send_algorithm_, GetCongestionWindow()).WillRepeatedly(
+      Return(kMaxPacketSize * 256 * 256 * 256));
 
   SendStreamDataToPeer(1, "bar", 9, !kFin, &last_packet);
   EXPECT_EQ(4u, last_packet);
   EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER,
             connection_.options()->send_sequence_number_length);
   EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER,
-            last_header()->public_header.sequence_number_length);
+            writer_->header().public_header.sequence_number_length);
 
-  EXPECT_CALL(*send_algorithm_, BandwidthEstimate()).WillOnce(Return(
-      QuicBandwidth::FromKBitsPerSecond(1000ll * 256 * 256 * 256 * 256)));
+  EXPECT_CALL(*send_algorithm_, GetCongestionWindow()).WillRepeatedly(
+      Return(kMaxPacketSize * 256 * 256 * 256 * 256));
 
   SendStreamDataToPeer(1, "foo", 12, !kFin, &last_packet);
   EXPECT_EQ(5u, last_packet);
   EXPECT_EQ(PACKET_6BYTE_SEQUENCE_NUMBER,
             connection_.options()->send_sequence_number_length);
   EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER,
-            last_header()->public_header.sequence_number_length);
+            writer_->header().public_header.sequence_number_length);
 }
 
 TEST_P(QuicConnectionTest, SendingDifferentSequenceNumberLengthsUnackedDelta) {
@@ -1344,7 +1352,7 @@
   EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER,
             connection_.options()->send_sequence_number_length);
   EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER,
-            last_header()->public_header.sequence_number_length);
+            writer_->header().public_header.sequence_number_length);
 
   QuicConnectionPeer::GetPacketCreator(&connection_)->set_sequence_number(100);
 
@@ -1352,7 +1360,7 @@
   EXPECT_EQ(PACKET_2BYTE_SEQUENCE_NUMBER,
             connection_.options()->send_sequence_number_length);
   EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER,
-            last_header()->public_header.sequence_number_length);
+            writer_->header().public_header.sequence_number_length);
 
   QuicConnectionPeer::GetPacketCreator(&connection_)->set_sequence_number(
       100 * 256);
@@ -1361,7 +1369,7 @@
   EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER,
             connection_.options()->send_sequence_number_length);
   EXPECT_EQ(PACKET_2BYTE_SEQUENCE_NUMBER,
-            last_header()->public_header.sequence_number_length);
+            writer_->header().public_header.sequence_number_length);
 
   QuicConnectionPeer::GetPacketCreator(&connection_)->set_sequence_number(
       100 * 256 * 256);
@@ -1370,7 +1378,7 @@
   EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER,
             connection_.options()->send_sequence_number_length);
   EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER,
-            last_header()->public_header.sequence_number_length);
+            writer_->header().public_header.sequence_number_length);
 
   QuicConnectionPeer::GetPacketCreator(&connection_)->set_sequence_number(
       100 * 256 * 256 * 256);
@@ -1379,7 +1387,7 @@
   EXPECT_EQ(PACKET_6BYTE_SEQUENCE_NUMBER,
             connection_.options()->send_sequence_number_length);
   EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER,
-            last_header()->public_header.sequence_number_length);
+            writer_->header().public_header.sequence_number_length);
 }
 
 TEST_P(QuicConnectionTest, BasicSending) {
@@ -1419,7 +1427,7 @@
   ProcessAckPacket(&frame2);  // Acks don't instigate acks.
 
   // Verify that we did not send an ack.
-  EXPECT_EQ(6u, last_header()->packet_sequence_number);
+  EXPECT_EQ(6u, writer_->header().packet_sequence_number);
 
   // So the last ack has not changed.
   EXPECT_EQ(4u, least_unacked());
@@ -1597,14 +1605,14 @@
   // two different streams.
   if (version() > QUIC_VERSION_15) {
     EXPECT_EQ(4u, writer_->frame_count());
-    EXPECT_TRUE(writer_->stop_waiting());
+    EXPECT_FALSE(writer_->stop_waiting_frames().empty());
   } else {
     EXPECT_EQ(3u, writer_->frame_count());
   }
-  EXPECT_TRUE(writer_->ack());
-  EXPECT_EQ(2u, writer_->stream_frames()->size());
-  EXPECT_EQ(kStreamId3, (*writer_->stream_frames())[0].stream_id);
-  EXPECT_EQ(kStreamId5, (*writer_->stream_frames())[1].stream_id);
+  EXPECT_FALSE(writer_->ack_frames().empty());
+  EXPECT_EQ(2u, writer_->stream_frames().size());
+  EXPECT_EQ(kStreamId3, writer_->stream_frames()[0].stream_id);
+  EXPECT_EQ(kStreamId5, writer_->stream_frames()[1].stream_id);
 }
 
 TEST_P(QuicConnectionTest, FramePackingNonCryptoThenCrypto) {
@@ -1629,8 +1637,8 @@
 
   // Parse the last packet and ensure it's the crypto stream frame.
   EXPECT_EQ(1u, writer_->frame_count());
-  EXPECT_EQ(1u, writer_->stream_frames()->size());
-  EXPECT_EQ(kCryptoStreamId, (*writer_->stream_frames())[0].stream_id);
+  EXPECT_EQ(1u, writer_->stream_frames().size());
+  EXPECT_EQ(kCryptoStreamId, writer_->stream_frames()[0].stream_id);
 }
 
 TEST_P(QuicConnectionTest, FramePackingCryptoThenNonCrypto) {
@@ -1655,8 +1663,8 @@
 
   // Parse the last packet and ensure it's the stream frame from stream 3.
   EXPECT_EQ(1u, writer_->frame_count());
-  EXPECT_EQ(1u, writer_->stream_frames()->size());
-  EXPECT_EQ(kStreamId3, (*writer_->stream_frames())[0].stream_id);
+  EXPECT_EQ(1u, writer_->stream_frames().size());
+  EXPECT_EQ(kStreamId3, writer_->stream_frames()[0].stream_id);
 }
 
 TEST_P(QuicConnectionTest, FramePackingFEC) {
@@ -1684,7 +1692,7 @@
   EXPECT_FALSE(connection_.HasQueuedData());
 
   // Parse the last packet and ensure it's in an fec group.
-  EXPECT_EQ(1u, writer_->header()->fec_group);
+  EXPECT_EQ(1u, writer_->header().fec_group);
   EXPECT_EQ(0u, writer_->frame_count());
 }
 
@@ -1714,14 +1722,14 @@
   // two different streams.
   if (version() > QUIC_VERSION_15) {
     EXPECT_EQ(4u, writer_->frame_count());
-    EXPECT_TRUE(writer_->stop_waiting());
+    EXPECT_FALSE(writer_->stop_waiting_frames().empty());
   } else {
     EXPECT_EQ(3u, writer_->frame_count());
   }
-  EXPECT_TRUE(writer_->ack());
-  ASSERT_EQ(2u, writer_->stream_frames()->size());
-  EXPECT_EQ(kStreamId3, (*writer_->stream_frames())[0].stream_id);
-  EXPECT_EQ(kStreamId5, (*writer_->stream_frames())[1].stream_id);
+  EXPECT_FALSE(writer_->ack_frames().empty());
+  ASSERT_EQ(2u, writer_->stream_frames().size());
+  EXPECT_EQ(kStreamId3, writer_->stream_frames()[0].stream_id);
+  EXPECT_EQ(kStreamId5, writer_->stream_frames()[1].stream_id);
 }
 
 TEST_P(QuicConnectionTest, FramePackingSendv) {
@@ -1741,8 +1749,8 @@
   // Parse the last packet and ensure multiple iovector blocks have
   // been packed into a single stream frame from one stream.
   EXPECT_EQ(1u, writer_->frame_count());
-  EXPECT_EQ(1u, writer_->stream_frames()->size());
-  QuicStreamFrame frame = (*writer_->stream_frames())[0];
+  EXPECT_EQ(1u, writer_->stream_frames().size());
+  QuicStreamFrame frame = writer_->stream_frames()[0];
   EXPECT_EQ(1u, frame.stream_id);
   EXPECT_EQ("ABCD", string(static_cast<char*>
                            (frame.data.iovec()[0].iov_base),
@@ -1770,8 +1778,8 @@
 
   // Parse the last packet and ensure it's one stream frame from one stream.
   EXPECT_EQ(1u, writer_->frame_count());
-  EXPECT_EQ(1u, writer_->stream_frames()->size());
-  EXPECT_EQ(1u, (*writer_->stream_frames())[0].stream_id);
+  EXPECT_EQ(1u, writer_->stream_frames().size());
+  EXPECT_EQ(1u, writer_->stream_frames()[0].stream_id);
 }
 
 TEST_P(QuicConnectionTest, SendingZeroBytes) {
@@ -1785,9 +1793,9 @@
 
   // Parse the last packet and ensure it's one stream frame from one stream.
   EXPECT_EQ(1u, writer_->frame_count());
-  EXPECT_EQ(1u, writer_->stream_frames()->size());
-  EXPECT_EQ(1u, (*writer_->stream_frames())[0].stream_id);
-  EXPECT_TRUE((*writer_->stream_frames())[0].fin);
+  EXPECT_EQ(1u, writer_->stream_frames().size());
+  EXPECT_EQ(1u, writer_->stream_frames()[0].stream_id);
+  EXPECT_TRUE(writer_->stream_frames()[0].fin);
 }
 
 TEST_P(QuicConnectionTest, OnCanWrite) {
@@ -1807,9 +1815,9 @@
   // Parse the last packet and ensure it's the two stream frames from
   // two different streams.
   EXPECT_EQ(2u, writer_->frame_count());
-  EXPECT_EQ(2u, writer_->stream_frames()->size());
-  EXPECT_EQ(kStreamId3, (*writer_->stream_frames())[0].stream_id);
-  EXPECT_EQ(kStreamId5, (*writer_->stream_frames())[1].stream_id);
+  EXPECT_EQ(2u, writer_->stream_frames().size());
+  EXPECT_EQ(kStreamId3, writer_->stream_frames()[0].stream_id);
+  EXPECT_EQ(kStreamId5, writer_->stream_frames()[1].stream_id);
 }
 
 TEST_P(QuicConnectionTest, RetransmitOnNack) {
@@ -2139,6 +2147,70 @@
   EXPECT_EQ(0u, QuicConnectionPeer::ReceivedEntropyHash(&connection_, 2));
 }
 
+TEST_P(QuicConnectionTest, ReviveMissingPacketWithVaryingSeqNumLengths) {
+  if (version() < QUIC_VERSION_15) {
+    return;
+  }
+  EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
+
+  // Set up a debug visitor to the connection.
+  scoped_ptr<FecQuicConnectionDebugVisitor>
+      fec_visitor(new FecQuicConnectionDebugVisitor);
+  connection_.set_debug_visitor(fec_visitor.get());
+
+  QuicPacketSequenceNumber fec_packet = 0;
+  QuicSequenceNumberLength lengths[] = {PACKET_6BYTE_SEQUENCE_NUMBER,
+                                        PACKET_4BYTE_SEQUENCE_NUMBER,
+                                        PACKET_2BYTE_SEQUENCE_NUMBER,
+                                        PACKET_1BYTE_SEQUENCE_NUMBER};
+  // For each sequence number length size, revive a packet and check sequence
+  // number length in the revived packet.
+  for (size_t i = 0; i < arraysize(lengths); ++i) {
+    // Set sequence_number_length_ (for data and FEC packets).
+    sequence_number_length_ = lengths[i];
+    fec_packet += 2;
+    // Don't send missing packet, but send fec packet right after it.
+    ProcessFecPacket(/*seq_num=*/fec_packet, /*fec_group=*/fec_packet - 1,
+                     true, !kEntropyFlag, NULL);
+    // Sequence number length in the revived header should be the same as
+    // in the original data/fec packet headers.
+    EXPECT_EQ(sequence_number_length_, fec_visitor->revived_header().
+                                       public_header.sequence_number_length);
+  }
+}
+
+TEST_P(QuicConnectionTest, ReviveMissingPacketWithVaryingConnectionIdLengths) {
+  if (version() < QUIC_VERSION_15) {
+    return;
+  }
+  EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
+
+  // Set up a debug visitor to the connection.
+  scoped_ptr<FecQuicConnectionDebugVisitor>
+      fec_visitor(new FecQuicConnectionDebugVisitor);
+  connection_.set_debug_visitor(fec_visitor.get());
+
+  QuicPacketSequenceNumber fec_packet = 0;
+  QuicConnectionIdLength lengths[] = {PACKET_8BYTE_CONNECTION_ID,
+                                      PACKET_4BYTE_CONNECTION_ID,
+                                      PACKET_1BYTE_CONNECTION_ID,
+                                      PACKET_0BYTE_CONNECTION_ID};
+  // For each connection id length size, revive a packet and check connection
+  // id length in the revived packet.
+  for (size_t i = 0; i < arraysize(lengths); ++i) {
+    // Set connection id length (for data and FEC packets).
+    connection_id_length_ = lengths[i];
+    fec_packet += 2;
+    // Don't send missing packet, but send fec packet right after it.
+    ProcessFecPacket(/*seq_num=*/fec_packet, /*fec_group=*/fec_packet - 1,
+                     true, !kEntropyFlag, NULL);
+    // Connection id length in the revived header should be the same as
+    // in the original data/fec packet headers.
+    EXPECT_EQ(connection_id_length_,
+              fec_visitor->revived_header().public_header.connection_id_length);
+  }
+}
+
 TEST_P(QuicConnectionTest, ReviveMissingPacketAfterDataPacketThenFecPacket) {
   if (version() < QUIC_VERSION_15) {
     return;
@@ -2204,7 +2276,7 @@
   SendStreamDataToPeer(3, "foo", 0, !kFin, NULL);
   EXPECT_EQ(1u, outgoing_ack()->sent_info.least_unacked);
 
-  EXPECT_EQ(1u, last_header()->packet_sequence_number);
+  EXPECT_EQ(1u, writer_->header().packet_sequence_number);
   EXPECT_EQ(default_retransmission_time,
             connection_.GetRetransmissionAlarm()->deadline());
   // Simulate the retransmission alarm firing.
@@ -2212,7 +2284,7 @@
   EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true));
   EXPECT_CALL(*send_algorithm_, OnPacketSent(_, 2u, _, _));
   connection_.GetRetransmissionAlarm()->Fire();
-  EXPECT_EQ(2u, last_header()->packet_sequence_number);
+  EXPECT_EQ(2u, writer_->header().packet_sequence_number);
   // We do not raise the high water mark yet.
   EXPECT_EQ(1u, outgoing_ack()->sent_info.least_unacked);
 }
@@ -2226,12 +2298,12 @@
   // the end of the packet. We can test this to check which encrypter was used.
   connection_.SetEncrypter(ENCRYPTION_NONE, new TaggingEncrypter(0x01));
   SendStreamDataToPeer(3, "foo", 0, !kFin, NULL);
-  EXPECT_EQ(0x01010101u, final_bytes_of_last_packet());
+  EXPECT_EQ(0x01010101u, writer_->final_bytes_of_last_packet());
 
   connection_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(0x02));
   connection_.SetDefaultEncryptionLevel(ENCRYPTION_INITIAL);
   SendStreamDataToPeer(3, "foo", 0, !kFin, NULL);
-  EXPECT_EQ(0x02020202u, final_bytes_of_last_packet());
+  EXPECT_EQ(0x02020202u, writer_->final_bytes_of_last_packet());
 
   EXPECT_EQ(default_retransmission_time,
             connection_.GetRetransmissionAlarm()->deadline());
@@ -2247,10 +2319,10 @@
   connection_.GetRetransmissionAlarm()->Fire();
 
   // Packet should have been sent with ENCRYPTION_NONE.
-  EXPECT_EQ(0x01010101u, final_bytes_of_previous_packet());
+  EXPECT_EQ(0x01010101u, writer_->final_bytes_of_previous_packet());
 
   // Packet should have been sent with ENCRYPTION_INITIAL.
-  EXPECT_EQ(0x02020202u, final_bytes_of_last_packet());
+  EXPECT_EQ(0x02020202u, writer_->final_bytes_of_last_packet());
 }
 
 TEST_P(QuicConnectionTest, SendHandshakeMessages) {
@@ -2279,7 +2351,7 @@
   EXPECT_EQ(0u, connection_.NumQueuedPackets());
 
   // Verify that the handshake packet went out at the null encryption.
-  EXPECT_EQ(0x01010101u, final_bytes_of_last_packet());
+  EXPECT_EQ(0x01010101u, writer_->final_bytes_of_last_packet());
 }
 
 TEST_P(QuicConnectionTest,
@@ -2529,7 +2601,7 @@
 
 TEST_P(QuicConnectionTest, NoQuicCongestionFeedbackFrame) {
   SendAckPacketToPeer();
-  EXPECT_TRUE(last_feedback() == NULL);
+  EXPECT_TRUE(writer_->feedback_frames().empty());
 }
 
 TEST_P(QuicConnectionTest, WithQuicCongestionFeedbackFrame) {
@@ -2539,8 +2611,10 @@
   SetFeedback(&info);
 
   SendAckPacketToPeer();
-  EXPECT_EQ(kFixRate, last_feedback()->type);
-  EXPECT_EQ(info.fix_rate.bitrate, last_feedback()->fix_rate.bitrate);
+  ASSERT_FALSE(writer_->feedback_frames().empty());
+  ASSERT_EQ(kFixRate, writer_->feedback_frames()[0].type);
+  ASSERT_EQ(info.fix_rate.bitrate,
+            writer_->feedback_frames()[0].fix_rate.bitrate);
 }
 
 TEST_P(QuicConnectionTest, UpdateQuicCongestionFeedbackFrame) {
@@ -2579,12 +2653,59 @@
   EXPECT_FALSE(connection_.connected());
 
   EXPECT_FALSE(connection_.GetAckAlarm()->IsSet());
+  EXPECT_FALSE(connection_.GetPingAlarm()->IsSet());
   EXPECT_FALSE(connection_.GetResumeWritesAlarm()->IsSet());
   EXPECT_FALSE(connection_.GetRetransmissionAlarm()->IsSet());
   EXPECT_FALSE(connection_.GetSendAlarm()->IsSet());
   EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet());
 }
 
+TEST_P(QuicConnectionTest, PingAfterSend) {
+  EXPECT_TRUE(connection_.connected());
+  EXPECT_CALL(visitor_, HasOpenDataStreams()).WillRepeatedly(Return(true));
+  EXPECT_FALSE(connection_.GetPingAlarm()->IsSet());
+
+  // Advance to 5ms, and send a packet to the peer, which will set
+  // the ping alarm.
+  clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(5));
+  EXPECT_FALSE(connection_.GetRetransmissionAlarm()->IsSet());
+  SendStreamDataToPeer(1, "GET /", 0, kFin, NULL);
+  EXPECT_TRUE(connection_.GetPingAlarm()->IsSet());
+  EXPECT_EQ(clock_.ApproximateNow().Add(QuicTime::Delta::FromSeconds(15)),
+            connection_.GetPingAlarm()->deadline());
+
+  // Now recevie and ACK of the previous packet, which will move the
+  // ping alarm forward.
+  clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(5));
+  QuicAckFrame frame = InitAckFrame(1, 0);
+  EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
+  EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
+  EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _));
+  ProcessAckPacket(&frame);
+  EXPECT_TRUE(connection_.GetPingAlarm()->IsSet());
+  EXPECT_EQ(clock_.ApproximateNow().Add(QuicTime::Delta::FromSeconds(15)),
+            connection_.GetPingAlarm()->deadline());
+
+  writer_->Reset();
+  clock_.AdvanceTime(QuicTime::Delta::FromSeconds(15));
+  connection_.GetPingAlarm()->Fire();
+  EXPECT_EQ(1u, writer_->frame_count());
+  if (version() > QUIC_VERSION_17) {
+    ASSERT_EQ(1u, writer_->ping_frames().size());
+  } else {
+    ASSERT_EQ(1u, writer_->stream_frames().size());
+    EXPECT_EQ(kCryptoStreamId, writer_->stream_frames()[0].stream_id);
+    EXPECT_EQ(0u, writer_->stream_frames()[0].offset);
+  }
+  writer_->Reset();
+
+  EXPECT_CALL(visitor_, HasOpenDataStreams()).WillRepeatedly(Return(false));
+  clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(5));
+  SendAckPacketToPeer();
+
+  EXPECT_FALSE(connection_.GetPingAlarm()->IsSet());
+}
+
 TEST_P(QuicConnectionTest, TimeoutAfterSend) {
   EXPECT_TRUE(connection_.connected());
 
@@ -2838,11 +2959,11 @@
   // Check that ack is sent and that delayed ack alarm is reset.
   if (version() > QUIC_VERSION_15) {
     EXPECT_EQ(2u, writer_->frame_count());
-    EXPECT_TRUE(writer_->stop_waiting());
+    EXPECT_FALSE(writer_->stop_waiting_frames().empty());
   } else {
     EXPECT_EQ(1u, writer_->frame_count());
   }
-  EXPECT_TRUE(writer_->ack());
+  EXPECT_FALSE(writer_->ack_frames().empty());
   EXPECT_FALSE(connection_.GetAckAlarm()->IsSet());
 }
 
@@ -2860,11 +2981,11 @@
   // Check that ack is sent and that delayed ack alarm is reset.
   if (version() > QUIC_VERSION_15) {
     EXPECT_EQ(2u, writer_->frame_count());
-    EXPECT_TRUE(writer_->stop_waiting());
+    EXPECT_FALSE(writer_->stop_waiting_frames().empty());
   } else {
     EXPECT_EQ(1u, writer_->frame_count());
   }
-  EXPECT_TRUE(writer_->ack());
+  EXPECT_FALSE(writer_->ack_frames().empty());
   EXPECT_FALSE(connection_.GetAckAlarm()->IsSet());
 }
 
@@ -2875,11 +2996,11 @@
   // Check that ack is sent and that delayed ack alarm is reset.
   if (version() > QUIC_VERSION_15) {
     EXPECT_EQ(2u, writer_->frame_count());
-    EXPECT_TRUE(writer_->stop_waiting());
+    EXPECT_FALSE(writer_->stop_waiting_frames().empty());
   } else {
     EXPECT_EQ(1u, writer_->frame_count());
   }
-  EXPECT_TRUE(writer_->ack());
+  EXPECT_FALSE(writer_->ack_frames().empty());
   EXPECT_FALSE(connection_.GetAckAlarm()->IsSet());
 }
 
@@ -2889,21 +3010,21 @@
   ProcessPacket(2);
   size_t frames_per_ack = version() > QUIC_VERSION_15 ? 2 : 1;
   EXPECT_EQ(frames_per_ack, writer_->frame_count());
-  EXPECT_TRUE(writer_->ack());
+  EXPECT_FALSE(writer_->ack_frames().empty());
   writer_->Reset();
   ProcessPacket(3);
   EXPECT_EQ(frames_per_ack, writer_->frame_count());
-  EXPECT_TRUE(writer_->ack());
+  EXPECT_FALSE(writer_->ack_frames().empty());
   writer_->Reset();
   ProcessPacket(4);
   EXPECT_EQ(frames_per_ack, writer_->frame_count());
-  EXPECT_TRUE(writer_->ack());
+  EXPECT_FALSE(writer_->ack_frames().empty());
   writer_->Reset();
   ProcessPacket(5);
   EXPECT_EQ(frames_per_ack, writer_->frame_count());
-  EXPECT_TRUE(writer_->ack());
-  // Now only set the timer on the 6th packet, instead of sending another ack.
+  EXPECT_FALSE(writer_->ack_frames().empty());
   writer_->Reset();
+  // Now only set the timer on the 6th packet, instead of sending another ack.
   ProcessPacket(6);
   EXPECT_EQ(0u, writer_->frame_count());
   EXPECT_TRUE(connection_.GetAckAlarm()->IsSet());
@@ -2917,11 +3038,11 @@
   // alarm is reset.
   if (version() > QUIC_VERSION_15) {
     EXPECT_EQ(3u, writer_->frame_count());
-    EXPECT_TRUE(writer_->stop_waiting());
+    EXPECT_FALSE(writer_->stop_waiting_frames().empty());
   } else {
     EXPECT_EQ(2u, writer_->frame_count());
   }
-  EXPECT_TRUE(writer_->ack());
+  EXPECT_FALSE(writer_->ack_frames().empty());
   EXPECT_FALSE(connection_.GetAckAlarm()->IsSet());
 }
 
@@ -2931,7 +3052,7 @@
   connection_.SendStreamDataWithString(kCryptoStreamId, "foo", 0, !kFin, NULL);
   // Check that ack is bundled with outgoing crypto data.
   EXPECT_EQ(version() <= QUIC_VERSION_15 ? 2u : 3u, writer_->frame_count());
-  EXPECT_TRUE(writer_->ack());
+  EXPECT_FALSE(writer_->ack_frames().empty());
   EXPECT_FALSE(connection_.GetAckAlarm()->IsSet());
 }
 
@@ -2952,7 +3073,7 @@
   EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)).Times(1);
   ProcessAckPacket(&ack);
   EXPECT_EQ(1u, writer_->frame_count());
-  EXPECT_EQ(1u, writer_->stream_frames()->size());
+  EXPECT_EQ(1u, writer_->stream_frames().size());
   writer_->Reset();
 
   // Now ack the retransmission, which will both raise the high water mark
@@ -2985,12 +3106,12 @@
   // alarm is reset.
   if (version() > QUIC_VERSION_15) {
     EXPECT_EQ(3u, writer_->frame_count());
-    EXPECT_TRUE(writer_->stop_waiting());
+    EXPECT_FALSE(writer_->stop_waiting_frames().empty());
   } else {
     EXPECT_EQ(2u, writer_->frame_count());
   }
-  EXPECT_TRUE(writer_->ack());
-  EXPECT_EQ(1u, writer_->stream_frames()->size());
+  EXPECT_FALSE(writer_->ack_frames().empty());
+  EXPECT_EQ(1u, writer_->stream_frames().size());
   EXPECT_FALSE(connection_.GetAckAlarm()->IsSet());
 }
 
@@ -3068,8 +3189,9 @@
   QuicEncryptedPacket encrypted(NULL, 0);
   connection_.ProcessUdpPacket(IPEndPoint(), IPEndPoint(), encrypted);
   // The connection close packet should have error details.
-  ASSERT_TRUE(last_close() != NULL);
-  EXPECT_EQ("Unable to read public flags.", last_close()->error_details);
+  ASSERT_FALSE(writer_->connection_close_frames().empty());
+  EXPECT_EQ("Unable to read public flags.",
+            writer_->connection_close_frames()[0].error_details);
 }
 
 TEST_P(QuicConnectionTest, MissingPacketsBeforeLeastUnacked) {
@@ -3405,12 +3527,12 @@
 TEST_P(QuicConnectionTest, CheckSendStats) {
   EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _));
   connection_.SendStreamDataWithString(3, "first", 0, !kFin, NULL);
-  size_t first_packet_size = last_sent_packet_size();
+  size_t first_packet_size = writer_->last_packet_size();
 
   EXPECT_CALL(*send_algorithm_,
               OnPacketSent(_, _, _, _));
   connection_.SendStreamDataWithString(5, "second", 0, !kFin, NULL);
-  size_t second_packet_size = last_sent_packet_size();
+  size_t second_packet_size = writer_->last_packet_size();
 
   // 2 retransmissions due to rto, 1 due to explicit nack.
   EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true));
@@ -3622,7 +3744,7 @@
 
   // Create a delegate which we expect to be called.
   scoped_refptr<MockAckNotifierDelegate> delegate(new MockAckNotifierDelegate);
-  EXPECT_CALL(*delegate, OnAckNotification(_, _, _, _)).Times(1);
+  EXPECT_CALL(*delegate, OnAckNotification(_, _, _, _, _)).Times(1);
 
   // Send some data, which will register the delegate to be notified.
   connection_.SendStreamDataWithString(1, "foo", 0, !kFin, delegate.get());
@@ -3639,7 +3761,7 @@
 
   // Create a delegate which we don't expect to be called.
   scoped_refptr<MockAckNotifierDelegate> delegate(new MockAckNotifierDelegate);
-  EXPECT_CALL(*delegate, OnAckNotification(_, _, _, _)).Times(0);
+  EXPECT_CALL(*delegate, OnAckNotification(_, _, _, _, _)).Times(0);
 
   EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
   EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)).Times(2);
@@ -3670,7 +3792,7 @@
 
   // Create a delegate which we expect to be called.
   scoped_refptr<MockAckNotifierDelegate> delegate(new MockAckNotifierDelegate);
-  EXPECT_CALL(*delegate, OnAckNotification(_, _, _, _)).Times(1);
+  EXPECT_CALL(*delegate, OnAckNotification(_, _, _, _, _)).Times(1);
 
   // Send four packets, and register to be notified on ACK of packet 2.
   connection_.SendStreamDataWithString(3, "foo", 0, !kFin, NULL);
@@ -3717,7 +3839,7 @@
   connection_.SendStreamDataWithString(3, "foo", 0, !kFin, delegate.get());
   EXPECT_EQ(1u, outgoing_ack()->sent_info.least_unacked);
 
-  EXPECT_EQ(1u, last_header()->packet_sequence_number);
+  EXPECT_EQ(1u, writer_->header().packet_sequence_number);
   EXPECT_EQ(default_retransmission_time,
             connection_.GetRetransmissionAlarm()->deadline());
   // Simulate the retransmission alarm firing.
@@ -3725,14 +3847,14 @@
   EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true));
   EXPECT_CALL(*send_algorithm_, OnPacketSent(_, 2u, _, _));
   connection_.GetRetransmissionAlarm()->Fire();
-  EXPECT_EQ(2u, last_header()->packet_sequence_number);
+  EXPECT_EQ(2u, writer_->header().packet_sequence_number);
   // We do not raise the high water mark yet.
   EXPECT_EQ(1u, outgoing_ack()->sent_info.least_unacked);
 
   // Ack the original packet.
   EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
   EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
-  EXPECT_CALL(*delegate, OnAckNotification(1, _, 1, _));
+  EXPECT_CALL(*delegate, OnAckNotification(1, _, 1, _, _));
   QuicAckFrame ack_frame = InitAckFrame(1, 0);
   ProcessAckPacket(&ack_frame);
 
@@ -3778,7 +3900,7 @@
 
   // Now we get an ACK for packet 2, which was previously nacked.
   SequenceNumberSet no_lost_packets;
-  EXPECT_CALL(*delegate, OnAckNotification(1, _, 1, _));
+  EXPECT_CALL(*delegate, OnAckNotification(1, _, 1, _, _));
   EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _))
       .WillOnce(Return(no_lost_packets));
   QuicAckFrame second_ack_frame = InitAckFrame(4, 0);
@@ -3794,8 +3916,33 @@
   ProcessAckPacket(&third_ack_frame);
 }
 
-// TODO(rjshade): Add a similar test that FEC recovery on peer (and resulting
-//                ACK) triggers notification on our end.
+TEST_P(QuicConnectionTest, AckNotifierFECTriggerCallback) {
+  if (version() < QUIC_VERSION_15) {
+    return;
+  }
+  EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
+
+  // Create a delegate which we expect to be called.
+  scoped_refptr<MockAckNotifierDelegate> delegate(
+      new MockAckNotifierDelegate);
+  EXPECT_CALL(*delegate, OnAckNotification(_, _, _, _, _)).Times(1);;
+
+  // Send some data, which will register the delegate to be notified.
+  connection_.SendStreamDataWithString(1, "foo", 0, !kFin, delegate.get());
+  connection_.SendStreamDataWithString(2, "bar", 0, !kFin, NULL);
+
+  // Process an ACK from the server with a revived packet, which should trigger
+  // the callback.
+  EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
+  EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)).Times(1);
+  QuicAckFrame frame = InitAckFrame(2, 0);
+  NackPacket(1, &frame);
+  frame.received_info.revived_packets.insert(1);
+  ProcessAckPacket(&frame);
+  // If the ack is processed again, the notifier should not be called again.
+  ProcessAckPacket(&frame);
+}
+
 TEST_P(QuicConnectionTest, AckNotifierCallbackAfterFECRecovery) {
   if (version() < QUIC_VERSION_15) {
     return;
@@ -3805,7 +3952,7 @@
 
   // Create a delegate which we expect to be called.
   scoped_refptr<MockAckNotifierDelegate> delegate(new MockAckNotifierDelegate);
-  EXPECT_CALL(*delegate, OnAckNotification(_, _, _, _)).Times(1);
+  EXPECT_CALL(*delegate, OnAckNotification(_, _, _, _, _)).Times(1);
 
   // Expect ACKs for 1 packet.
   EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
diff --git a/net/quic/quic_crypto_client_stream.cc b/net/quic/quic_crypto_client_stream.cc
index 856696d..72c3c22 100644
--- a/net/quic/quic_crypto_client_stream.cc
+++ b/net/quic/quic_crypto_client_stream.cc
@@ -318,7 +318,8 @@
               error, "Server hello invalid: " + error_details);
           return;
         }
-        error = session()->config()->ProcessServerHello(*in, &error_details);
+        error =
+            session()->config()->ProcessPeerHello(*in, SERVER, &error_details);
         if (error != QUIC_NO_ERROR) {
           CloseConnectionWithDetails(
               error, "Server hello invalid: " + error_details);
diff --git a/net/quic/quic_crypto_server_stream.cc b/net/quic/quic_crypto_server_stream.cc
index a7de815..d2e2cfe 100644
--- a/net/quic/quic_crypto_server_stream.cc
+++ b/net/quic/quic_crypto_server_stream.cc
@@ -89,7 +89,7 @@
 
   // If we are returning a SHLO then we accepted the handshake.
   QuicConfig* config = session()->config();
-  error = config->ProcessClientHello(message, &error_details);
+  error = config->ProcessPeerHello(message, CLIENT, &error_details);
   if (error != QUIC_NO_ERROR) {
     CloseConnectionWithDetails(error, error_details);
     return;
diff --git a/net/quic/quic_crypto_server_stream.h b/net/quic/quic_crypto_server_stream.h
index 546c3bd..42dc210 100644
--- a/net/quic/quic_crypto_server_stream.h
+++ b/net/quic/quic_crypto_server_stream.h
@@ -83,6 +83,8 @@
   // FinishProcessingHandshakeMessage for processing.  NULL if no
   // handshake message is being validated.
   ValidateCallback* validate_client_hello_cb_;
+
+  DISALLOW_COPY_AND_ASSIGN(QuicCryptoServerStream);
 };
 
 }  // namespace net
diff --git a/net/quic/quic_crypto_server_stream_test.cc b/net/quic/quic_crypto_server_stream_test.cc
index 3d1127b..800c245 100644
--- a/net/quic/quic_crypto_server_stream_test.cc
+++ b/net/quic/quic_crypto_server_stream_test.cc
@@ -180,8 +180,8 @@
   reinterpret_cast<MockRandom*>(client_conn->random_generator())->ChangeValue();
   client_session.reset(new TestClientSession(client_conn, client_config));
   server_session.reset(new TestSession(server_conn, config_));
-  client.reset(new QuicCryptoClientStream(server_id, client_session.get(),
-                                          NULL, &client_crypto_config));
+  client.reset(new QuicCryptoClientStream(
+      server_id, client_session.get(), NULL, &client_crypto_config));
   client_session->SetCryptoStream(client.get());
 
   server.reset(new QuicCryptoServerStream(crypto_config_,
diff --git a/net/quic/quic_crypto_stream.cc b/net/quic/quic_crypto_stream.cc
index 095868a..9005d5a 100644
--- a/net/quic/quic_crypto_stream.cc
+++ b/net/quic/quic_crypto_stream.cc
@@ -22,6 +22,7 @@
       encryption_established_(false),
       handshake_confirmed_(false) {
   crypto_framer_.set_visitor(this);
+  DisableFlowControl();
 }
 
 void QuicCryptoStream::OnError(CryptoFramer* framer) {
@@ -69,8 +70,4 @@
   return crypto_negotiated_params_;
 }
 
-bool QuicCryptoStream::IsFlowControlEnabled() const {
-  return false;
-}
-
 }  // namespace net
diff --git a/net/quic/quic_crypto_stream.h b/net/quic/quic_crypto_stream.h
index 8fd376f..b29580b 100644
--- a/net/quic/quic_crypto_stream.h
+++ b/net/quic/quic_crypto_stream.h
@@ -51,9 +51,6 @@
 
   const QuicCryptoNegotiatedParameters& crypto_negotiated_params() const;
 
-  // Crypto stream is special and is not flow controlled.
-  virtual bool IsFlowControlEnabled() const OVERRIDE;
-
  protected:
   bool encryption_established_;
   bool handshake_confirmed_;
diff --git a/net/quic/quic_crypto_stream_test.cc b/net/quic/quic_crypto_stream_test.cc
index 1aa682b..e88d25f 100644
--- a/net/quic/quic_crypto_stream_test.cc
+++ b/net/quic/quic_crypto_stream_test.cc
@@ -104,7 +104,7 @@
 
 TEST_F(QuicCryptoStreamTest, NoFlowControl) {
   ValueRestore<bool> old_flag(&FLAGS_enable_quic_stream_flow_control, true);
-  EXPECT_FALSE(stream_.IsFlowControlEnabled());
+  EXPECT_FALSE(stream_.flow_controller()->IsEnabled());
 }
 
 }  // namespace
diff --git a/net/quic/quic_data_reader.h b/net/quic/quic_data_reader.h
index 9effa1c..1686de0 100644
--- a/net/quic/quic_data_reader.h
+++ b/net/quic/quic_data_reader.h
@@ -124,6 +124,8 @@
 
   // The location of the next read from our data buffer.
   size_t pos_;
+
+  DISALLOW_COPY_AND_ASSIGN(QuicDataReader);
 };
 
 }  // namespace net
diff --git a/net/quic/quic_data_stream.cc b/net/quic/quic_data_stream.cc
index c40b927..7963f4f 100644
--- a/net/quic/quic_data_stream.cc
+++ b/net/quic/quic_data_stream.cc
@@ -184,8 +184,4 @@
   return headers_decompressed_ && decompressed_headers_.empty();
 }
 
-bool QuicDataStream::IsFlowControlEnabled() const {
-  return version() >= QUIC_VERSION_17;
-}
-
 }  // namespace net
diff --git a/net/quic/quic_data_stream.h b/net/quic/quic_data_stream.h
index e060471..1af9004 100644
--- a/net/quic/quic_data_stream.h
+++ b/net/quic/quic_data_stream.h
@@ -109,9 +109,6 @@
   // Gets the SSL connection information.
   bool GetSSLInfo(SSLInfo* ssl_info);
 
-  // Override base class to enable flow control for data streams.
-  virtual bool IsFlowControlEnabled() const OVERRIDE;
-
  protected:
   // Sets priority_ to priority.  This should only be called before bytes are
   // written to the server.
diff --git a/net/quic/quic_data_stream_test.cc b/net/quic/quic_data_stream_test.cc
index 8c3fb44..3fd6b4a 100644
--- a/net/quic/quic_data_stream_test.cc
+++ b/net/quic/quic_data_stream_test.cc
@@ -10,6 +10,7 @@
 #include "net/quic/quic_utils.h"
 #include "net/quic/quic_write_blocked_list.h"
 #include "net/quic/spdy_utils.h"
+#include "net/quic/test_tools/quic_flow_controller_peer.h"
 #include "net/quic/test_tools/quic_session_peer.h"
 #include "net/quic/test_tools/quic_test_utils.h"
 #include "net/quic/test_tools/reliable_quic_stream_peer.h"
@@ -291,8 +292,10 @@
 
   // Set a small flow control limit.
   const uint64 kWindow = 36;
-  ReliableQuicStreamPeer::SetFlowControlSendOffset(stream_.get(), kWindow);
-  EXPECT_EQ(kWindow, ReliableQuicStreamPeer::SendWindowSize(stream_.get()));
+  QuicFlowControllerPeer::SetSendWindowOffset(stream_.get()->flow_controller(),
+                                              kWindow);
+  EXPECT_EQ(kWindow, QuicFlowControllerPeer::SendWindowOffset(
+                         stream_.get()->flow_controller()));
 
   // Try to send more data than the flow control limit allows.
   string headers = SpdyUtils::SerializeUncompressedHeaders(headers_);
@@ -306,7 +309,8 @@
   stream_->WriteOrBufferData(body, false, NULL);
 
   // Should have sent as much as possible, resulting in no send window left.
-  EXPECT_EQ(0u, ReliableQuicStreamPeer::SendWindowSize(stream_.get()));
+  EXPECT_EQ(0u, QuicFlowControllerPeer::SendWindowSize(
+                    stream_.get()->flow_controller()));
 
   // And we should have queued the overflowed data.
   EXPECT_EQ(kOverflow,
@@ -329,13 +333,14 @@
   // Expect no WINDOW_UPDATE frames to be sent.
   EXPECT_CALL(*connection_, SendWindowUpdate(_, _)).Times(0);
 
-  // Set a small flow control limit.
+  // Set a small flow control receive window.
   const uint64 kWindow = 36;
-  ReliableQuicStreamPeer::SetFlowControlReceiveOffset(stream_.get(),
-                                                      kWindow);
-  ReliableQuicStreamPeer::SetFlowControlMaxReceiveWindow(stream_.get(),
-                                                         kWindow);
-  EXPECT_EQ(kWindow, ReliableQuicStreamPeer::ReceiveWindowSize(stream_.get()));
+  QuicFlowControllerPeer::SetReceiveWindowOffset(
+      stream_.get()->flow_controller(), kWindow);
+  QuicFlowControllerPeer::SetMaxReceiveWindow(stream_.get()->flow_controller(),
+                                              kWindow);
+  EXPECT_EQ(kWindow, QuicFlowControllerPeer::ReceiveWindowOffset(
+                         stream_.get()->flow_controller()));
 
   // Stream receives enough data to fill a fraction of the receive window.
   string headers = SpdyUtils::SerializeUncompressedHeaders(headers_);
@@ -347,8 +352,8 @@
 
   QuicStreamFrame frame1(kStreamId, false, 0, MakeIOVector(body));
   stream_->OnStreamFrame(frame1);
-  EXPECT_EQ(kWindow - (kWindow / 3),
-            ReliableQuicStreamPeer::ReceiveWindowSize(stream_.get()));
+  EXPECT_EQ(kWindow - (kWindow / 3), QuicFlowControllerPeer::ReceiveWindowSize(
+                                         stream_.get()->flow_controller()));
 
   // Now receive another frame which results in the receive window being over
   // half full. This should all be buffered, decreasing the receive window but
@@ -356,7 +361,8 @@
   QuicStreamFrame frame2(kStreamId, false, kWindow / 3, MakeIOVector(body));
   stream_->OnStreamFrame(frame2);
   EXPECT_EQ(kWindow - (2 * kWindow / 3),
-            ReliableQuicStreamPeer::ReceiveWindowSize(stream_.get()));
+            QuicFlowControllerPeer::ReceiveWindowSize(
+                stream_.get()->flow_controller()));
 }
 
 TEST_P(QuicDataStreamTest, StreamFlowControlWindowUpdate) {
@@ -372,11 +378,12 @@
 
   // Set a small flow control limit.
   const uint64 kWindow = 36;
-  ReliableQuicStreamPeer::SetFlowControlReceiveOffset(stream_.get(),
-                                                      kWindow);
-  ReliableQuicStreamPeer::SetFlowControlMaxReceiveWindow(stream_.get(),
-                                                         kWindow);
-  EXPECT_EQ(kWindow, ReliableQuicStreamPeer::ReceiveWindowSize(stream_.get()));
+  QuicFlowControllerPeer::SetReceiveWindowOffset(
+      stream_.get()->flow_controller(), kWindow);
+  QuicFlowControllerPeer::SetMaxReceiveWindow(stream_.get()->flow_controller(),
+                                              kWindow);
+  EXPECT_EQ(kWindow, QuicFlowControllerPeer::ReceiveWindowOffset(
+                         stream_.get()->flow_controller()));
 
   // Stream receives enough data to fill a fraction of the receive window.
   string headers = SpdyUtils::SerializeUncompressedHeaders(headers_);
@@ -388,8 +395,8 @@
 
   QuicStreamFrame frame1(kStreamId, false, 0, MakeIOVector(body));
   stream_->OnStreamFrame(frame1);
-  EXPECT_EQ(kWindow - (kWindow / 3),
-            ReliableQuicStreamPeer::ReceiveWindowSize(stream_.get()));
+  EXPECT_EQ(kWindow - (kWindow / 3), QuicFlowControllerPeer::ReceiveWindowSize(
+                                         stream_.get()->flow_controller()));
 
   // Now receive another frame which results in the receive window being over
   // half full.  This will trigger the stream to increase its receive window
@@ -398,12 +405,12 @@
   QuicStreamFrame frame2(kStreamId, false, kWindow / 3, MakeIOVector(body));
   EXPECT_CALL(
       *connection_,
-      SendWindowUpdate(
-          kStreamId,
-          ReliableQuicStreamPeer::ReceiveWindowSize(stream_.get()) + kWindow));
+      SendWindowUpdate(kStreamId, QuicFlowControllerPeer::ReceiveWindowOffset(
+                                      stream_.get()->flow_controller()) +
+                                      2 * kWindow / 3));
   stream_->OnStreamFrame(frame2);
-  EXPECT_EQ(kWindow,
-            ReliableQuicStreamPeer::ReceiveWindowSize(stream_.get()));
+  EXPECT_EQ(kWindow, QuicFlowControllerPeer::ReceiveWindowSize(
+                         stream_.get()->flow_controller()));
 }
 
 TEST_P(QuicDataStreamTest, StreamFlowControlViolation) {
@@ -420,24 +427,20 @@
 
   // Set a small flow control limit.
   const uint64 kWindow = 50;
-  ReliableQuicStreamPeer::SetFlowControlReceiveOffset(stream_.get(),
-                                                      kWindow);
+  QuicFlowControllerPeer::SetReceiveWindowOffset(
+      stream_.get()->flow_controller(), kWindow);
 
   string headers = SpdyUtils::SerializeUncompressedHeaders(headers_);
-  string body;
-  GenerateBody(&body, kWindow + 1);
-
   stream_->OnStreamHeaders(headers);
   EXPECT_EQ(headers, stream_->data());
   stream_->OnStreamHeadersComplete(false, headers.size());
 
   // Receive data to overflow the window, violating flow control.
+  string body;
+  GenerateBody(&body, kWindow + 1);
   QuicStreamFrame frame(kStreamId, false, 0, MakeIOVector(body));
   EXPECT_CALL(*connection_, SendConnectionClose(QUIC_FLOW_CONTROL_ERROR));
-  EXPECT_DFATAL(stream_->OnStreamFrame(frame),
-                "Server: Flow control violation on stream: 3, our receive "
-                "offset is: 50, we have consumed: 0, we have buffered: 51, "
-                "total: 51");
+  stream_->OnStreamFrame(frame);
 }
 
 TEST_P(QuicDataStreamTest, StreamFlowControlFinNotBlocked) {
@@ -451,8 +454,10 @@
   Initialize(kShouldProcessData);
 
   // Set a flow control limit of zero.
-  ReliableQuicStreamPeer::SetFlowControlReceiveOffset(stream_.get(), 0);
-  EXPECT_EQ(0u, ReliableQuicStreamPeer::ReceiveWindowSize(stream_.get()));
+  QuicFlowControllerPeer::SetReceiveWindowOffset(
+      stream_.get()->flow_controller(), 0);
+  EXPECT_EQ(0u, QuicFlowControllerPeer::ReceiveWindowOffset(
+                    stream_.get()->flow_controller()));
 
   // Send a frame with a FIN but no data. This should not be blocked.
   string body = "";
diff --git a/net/quic/quic_data_writer.h b/net/quic/quic_data_writer.h
index f8a3751..0e14e87 100644
--- a/net/quic/quic_data_writer.h
+++ b/net/quic/quic_data_writer.h
@@ -74,6 +74,8 @@
   char* buffer_;
   size_t capacity_;  // Allocation size of payload (or -1 if buffer is const).
   size_t length_;    // Current length of the buffer.
+
+  DISALLOW_COPY_AND_ASSIGN(QuicDataWriter);
 };
 
 }  // namespace net
diff --git a/net/quic/quic_default_packet_writer.h b/net/quic/quic_default_packet_writer.h
index affc6f1..2c03b62 100644
--- a/net/quic/quic_default_packet_writer.h
+++ b/net/quic/quic_default_packet_writer.h
@@ -44,6 +44,8 @@
   DatagramClientSocket* socket_;
   QuicConnection* connection_;
   bool write_blocked_;
+
+  DISALLOW_COPY_AND_ASSIGN(QuicDefaultPacketWriter);
 };
 
 }  // namespace net
diff --git a/net/quic/quic_flow_controller.cc b/net/quic/quic_flow_controller.cc
new file mode 100644
index 0000000..924f29f
--- /dev/null
+++ b/net/quic/quic_flow_controller.cc
@@ -0,0 +1,183 @@
+// 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.
+
+#include "net/quic/quic_flow_controller.h"
+
+#include "base/basictypes.h"
+#include "net/quic/quic_connection.h"
+#include "net/quic/quic_flags.h"
+#include "net/quic/quic_protocol.h"
+
+namespace net {
+
+#define ENDPOINT (is_server_ ? "Server: " : " Client: ")
+
+QuicFlowController::QuicFlowController(QuicStreamId id,
+                                       bool is_server,
+                                       uint64 send_window_offset,
+                                       uint64 receive_window_offset,
+                                       uint64 max_receive_window)
+      : id_(id),
+        is_enabled_(true),
+        is_server_(is_server),
+        bytes_consumed_(0),
+        bytes_buffered_(0),
+        bytes_sent_(0),
+        send_window_offset_(send_window_offset),
+        receive_window_offset_(receive_window_offset),
+        max_receive_window_(max_receive_window) {
+  DVLOG(1) << ENDPOINT << "Created flow controller for stream " << id_
+           << ", setting initial receive window offset to: "
+           << receive_window_offset_
+           << ", max receive window to: "
+           << max_receive_window_
+           << ", setting send window offset to: " << send_window_offset_;
+}
+
+void QuicFlowController::AddBytesConsumed(uint64 bytes_consumed) {
+  if (!IsEnabled()) {
+    return;
+  }
+
+  bytes_consumed_ += bytes_consumed;
+  DVLOG(1) << ENDPOINT << "Stream " << id_ << " consumed: " << bytes_consumed_;
+}
+
+void QuicFlowController::AddBytesBuffered(uint64 bytes_buffered) {
+  if (!IsEnabled()) {
+    return;
+  }
+
+  bytes_buffered_ += bytes_buffered;
+  DVLOG(1) << ENDPOINT << "Stream " << id_ << " buffered: " << bytes_buffered_;
+}
+
+void QuicFlowController::RemoveBytesBuffered(uint64 bytes_buffered) {
+  if (!IsEnabled()) {
+    return;
+  }
+
+  if (bytes_buffered_ < bytes_buffered) {
+    LOG(DFATAL) << "Trying to remove " << bytes_buffered << " bytes, when only "
+                << bytes_buffered_ << " bytes are buffered";
+    bytes_buffered_ = 0;
+    return;
+  }
+
+  bytes_buffered_ -= bytes_buffered;
+  DVLOG(1) << ENDPOINT << "Stream " << id_ << " buffered: " << bytes_buffered_;
+}
+
+void QuicFlowController::AddBytesSent(uint64 bytes_sent) {
+  if (!IsEnabled()) {
+    return;
+  }
+
+  if (bytes_sent_ + bytes_sent > send_window_offset_) {
+    LOG(DFATAL) << "Trying to send an extra " << bytes_sent
+                << " bytes, when bytes_sent = " << bytes_sent_
+                << ", and send_window = " << send_window_offset_;
+    bytes_sent_ = send_window_offset_;
+    return;
+  }
+
+  bytes_sent_ += bytes_sent;
+  DVLOG(1) << ENDPOINT << "Stream " << id_ << " sent: " << bytes_sent_;
+}
+
+bool QuicFlowController::FlowControlViolation() {
+  if (receive_window_offset_ < TotalReceivedBytes()) {
+    // TODO(rjshade): Lower severity from ERROR once we have established that
+    //                flow control is working correctly.
+    LOG(ERROR)
+        << ENDPOINT << "Flow control violation on stream " << id_
+        << ", receive window: " << receive_window_offset_
+        << ", bytes received: " << TotalReceivedBytes();
+
+    return true;
+  }
+  return false;
+}
+
+void QuicFlowController::MaybeSendWindowUpdate(QuicConnection* connection) {
+  if (!IsEnabled()) {
+    return;
+  }
+
+  // Send WindowUpdate to increase receive window if
+  // (receive window offset - consumed bytes) < (max window / 2).
+  // This is behaviour copied from SPDY.
+  size_t consumed_window = receive_window_offset_ - bytes_consumed_;
+  size_t threshold = (max_receive_window_ / 2);
+
+  if (consumed_window < threshold) {
+    // Update our receive window.
+    receive_window_offset_ += (max_receive_window_ - consumed_window);
+
+    DVLOG(1) << ENDPOINT << "Sending WindowUpdate frame for stream " << id_
+             << ", consumed bytes: " << bytes_consumed_
+             << ", consumed window: " << consumed_window
+             << ", and threshold: " << threshold
+             << ", and max recvw: " << max_receive_window_
+             << ". New receive window offset is: " << receive_window_offset_;
+
+    // Inform the peer of our new receive window.
+    connection->SendWindowUpdate(id_, receive_window_offset_);
+  }
+}
+
+void QuicFlowController::MaybeSendBlocked(QuicConnection* connection) {
+  if (!IsEnabled()) {
+    return;
+  }
+
+  if (SendWindowSize() == 0) {
+    DVLOG(1) << ENDPOINT << "Stream " << id_ << " is flow control blocked. "
+             << "Send window: " << SendWindowSize()
+             << ", bytes sent: " << bytes_sent_
+             << ", send limit: " << send_window_offset_;
+    // The entire send_window has been consumed, we are now flow control
+    // blocked.
+    connection->SendBlocked(id_);
+  }
+}
+
+bool QuicFlowController::UpdateSendWindowOffset(uint64 new_send_window_offset) {
+  // Only update if send window has increased.
+  if (new_send_window_offset <= send_window_offset_) {
+    return false;
+  }
+
+  DVLOG(1) << ENDPOINT << "UpdateSendWindowOffset for stream " << id_
+           << " with new offset " << new_send_window_offset
+           << " , current offset: " << send_window_offset_;
+
+  send_window_offset_ = new_send_window_offset;
+  return true;
+}
+
+void QuicFlowController::Disable() {
+  is_enabled_ = false;
+}
+
+bool QuicFlowController::IsEnabled() const {
+  return FLAGS_enable_quic_stream_flow_control && is_enabled_;
+}
+
+bool QuicFlowController::IsBlocked() const {
+  return IsEnabled() && SendWindowSize() == 0;
+}
+
+uint64 QuicFlowController::SendWindowSize() const {
+  if (bytes_sent_ > send_window_offset_) {
+    return 0;
+  }
+  return send_window_offset_ - bytes_sent_;
+}
+
+uint64 QuicFlowController::TotalReceivedBytes() const {
+  return bytes_consumed_ + bytes_buffered_;
+}
+
+}  // namespace net
diff --git a/net/quic/quic_flow_controller.h b/net/quic/quic_flow_controller.h
new file mode 100644
index 0000000..b1fa3d4
--- /dev/null
+++ b/net/quic/quic_flow_controller.h
@@ -0,0 +1,113 @@
+// 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.
+
+#ifndef NET_QUIC_QUIC_FLOW_CONTROLLER_H_
+#define NET_QUIC_QUIC_FLOW_CONTROLLER_H_
+
+#include "base/basictypes.h"
+#include "net/base/net_export.h"
+#include "net/quic/quic_protocol.h"
+
+namespace net {
+
+namespace test {
+class QuicFlowControllerPeer;
+}  // namespace test
+
+class QuicConnection;
+
+// QuicFlowController allows a QUIC stream or connection to perform flow
+// control. The stream/connection owns a QuicFlowController which keeps track of
+// bytes sent/received, can tell the owner if it is flow control blocked, and
+// can send WINDOW_UPDATE or BLOCKED frames when needed.
+class NET_EXPORT_PRIVATE QuicFlowController {
+ public:
+  QuicFlowController(QuicStreamId id,
+                     bool is_server,
+                     uint64 send_window_offset,
+                     uint64 receive_window_offset,
+                     uint64 max_receive_window);
+  ~QuicFlowController() {}
+
+  // Called when bytes are received from the peer, and buffered.
+  void AddBytesBuffered(uint64 bytes_buffered);
+
+  // Called when bytes currently buffered locally, are removed from the buffer.
+  void RemoveBytesBuffered(uint64 bytes_buffered);
+
+  // Called when bytes received from the peer are consumed locally.
+  void AddBytesConsumed(uint64 bytes_consumed);
+
+  // Called when bytes are sent to the peer.
+  void AddBytesSent(uint64 bytes_sent);
+
+  // Set a new send window offset.
+  // Returns true if this changes send_window_offset_, and false in the case
+  // where |new_send_window| is <= send_window_offset_.
+  bool UpdateSendWindowOffset(uint64 new_send_window_offset);
+
+  // Returns the current available send window.
+  uint64 SendWindowSize() const;
+
+  // Send a BLOCKED frame on |connection| if appropriate.
+  void MaybeSendBlocked(QuicConnection* connection);
+
+  // Send a WINDOW_UPDATE frame on |connection| if appropriate.
+  void MaybeSendWindowUpdate(QuicConnection* connection);
+
+  // Disable flow control.
+  void Disable();
+
+  // Returns true if flow control is enabled.
+  bool IsEnabled() const;
+
+  // Returns true if flow control send limits have been reached.
+  bool IsBlocked() const;
+
+  // Returns true if flow control receive limits have been violated by the peer.
+  bool FlowControlViolation();
+
+ private:
+  friend class test::QuicFlowControllerPeer;
+
+  // Total received bytes is the sum of bytes buffered, and bytes consumed.
+  uint64 TotalReceivedBytes() const;
+
+  // ID of stream this flow controller belongs to. This can be 0 if this is a
+  // connection level flow controller.
+  QuicStreamId id_;
+
+  // True if flow control is enabled.
+  bool is_enabled_;
+
+  // True if this is owned by a server.
+  bool is_server_;
+
+  // Track number of bytes received from the peer, which have been consumed
+  // locally.
+  uint64 bytes_consumed_;
+
+  // Tracks number of bytes received from the peer, and buffered locally.
+  uint64 bytes_buffered_;
+
+  // Tracks number of bytes sent to the peer.
+  uint64 bytes_sent_;
+
+  // The absolute offset in the outgoing byte stream. If this offset is reached
+  // then we become flow control blocked until we receive a WINDOW_UPDATE.
+  uint64 send_window_offset_;
+
+  // The absolute offset in the incoming byte stream. The peer should never send
+  // us bytes which are beyond this offset.
+  uint64 receive_window_offset_;
+
+  // Largest size the receive window can grow to.
+  uint64 max_receive_window_;
+
+  DISALLOW_COPY_AND_ASSIGN(QuicFlowController);
+};
+
+}  // namespace net
+
+#endif  // NET_QUIC_QUIC_FLOW_CONTROLLER_H_
diff --git a/net/quic/quic_flow_controller_test.cc b/net/quic/quic_flow_controller_test.cc
new file mode 100644
index 0000000..c948fb5
--- /dev/null
+++ b/net/quic/quic_flow_controller_test.cc
@@ -0,0 +1,101 @@
+// 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.
+
+#include "net/quic/quic_flow_controller.h"
+
+#include "base/strings/stringprintf.h"
+#include "net/quic/quic_flags.h"
+#include "net/quic/quic_utils.h"
+#include "net/quic/test_tools/quic_flow_controller_peer.h"
+#include "net/quic/test_tools/quic_test_utils.h"
+#include "net/test/gtest_util.h"
+#include "testing/gmock/include/gmock/gmock.h"
+
+using base::StringPrintf;
+
+namespace net {
+namespace test {
+
+TEST(QuicFlowControllerTest, SendingBytes) {
+  ValueRestore<bool> old_flag(&FLAGS_enable_quic_stream_flow_control, true);
+
+  const QuicStreamId kStreamId = 1234;
+  const uint64 kSendWindow = 100;
+  const uint64 kReceiveWindow = 200;
+  const uint64 kMaxReceiveWindow = 200;
+
+  QuicFlowController fc(kStreamId, false, kSendWindow, kReceiveWindow,
+                        kMaxReceiveWindow);
+
+  EXPECT_TRUE(fc.IsEnabled());
+  EXPECT_FALSE(fc.IsBlocked());
+  EXPECT_FALSE(fc.FlowControlViolation());
+  EXPECT_EQ(kSendWindow, fc.SendWindowSize());
+
+  // Send some bytes, but not enough to block.
+  fc.AddBytesSent(kSendWindow / 2);
+  EXPECT_FALSE(fc.IsBlocked());
+  EXPECT_EQ(kSendWindow / 2, fc.SendWindowSize());
+
+  // Send enough bytes to block.
+  fc.AddBytesSent(kSendWindow / 2);
+  EXPECT_TRUE(fc.IsBlocked());
+  EXPECT_EQ(0u, fc.SendWindowSize());
+
+  // BLOCKED frame should get sent.
+  MockConnection connection(false);
+  EXPECT_CALL(connection, SendBlocked(kStreamId)).Times(1);
+  fc.MaybeSendBlocked(&connection);
+
+  // Update the send window, and verify this has unblocked.
+  EXPECT_TRUE(fc.UpdateSendWindowOffset(2 * kSendWindow));
+  EXPECT_FALSE(fc.IsBlocked());
+  EXPECT_EQ(kSendWindow, fc.SendWindowSize());
+
+  // Updating with a smaller offset doesn't change anything.
+  EXPECT_FALSE(fc.UpdateSendWindowOffset(kSendWindow / 10));
+  EXPECT_EQ(kSendWindow, fc.SendWindowSize());
+
+  // Try to send more bytes, violating flow control.
+  EXPECT_DFATAL(fc.AddBytesSent(kSendWindow * 10),
+                StringPrintf("Trying to send an extra %d bytes",
+                             static_cast<int>(kSendWindow * 10)));
+  EXPECT_TRUE(fc.IsBlocked());
+  EXPECT_EQ(0u, fc.SendWindowSize());
+}
+
+TEST(QuicFlowControllerTest, ReceivingBytes) {
+  ValueRestore<bool> old_flag(&FLAGS_enable_quic_stream_flow_control, true);
+
+  const QuicStreamId kStreamId = 1234;
+  const uint64 kSendWindow = 100;
+  const uint64 kReceiveWindow = 200;
+  const uint64 kMaxReceiveWindow = 200;
+
+  QuicFlowController fc(kStreamId, false, kSendWindow, kReceiveWindow,
+                        kMaxReceiveWindow);
+
+  EXPECT_TRUE(fc.IsEnabled());
+  EXPECT_FALSE(fc.IsBlocked());
+  EXPECT_FALSE(fc.FlowControlViolation());
+
+  // Buffer some bytes, not enough to fill window.
+  fc.AddBytesBuffered(kReceiveWindow / 2);
+  EXPECT_FALSE(fc.FlowControlViolation());
+  EXPECT_EQ(kReceiveWindow / 2, QuicFlowControllerPeer::ReceiveWindowSize(&fc));
+
+  // Consume enough bytes to send a WINDOW_UPDATE frame.
+  fc.RemoveBytesBuffered(kReceiveWindow / 2);
+  fc.AddBytesConsumed(1 + kReceiveWindow / 2);
+  EXPECT_FALSE(fc.FlowControlViolation());
+  EXPECT_EQ((kReceiveWindow / 2) - 1,
+            QuicFlowControllerPeer::ReceiveWindowSize(&fc));
+
+  MockConnection connection(false);
+  EXPECT_CALL(connection, SendWindowUpdate(kStreamId, ::testing::_)).Times(1);
+  fc.MaybeSendWindowUpdate(&connection);
+}
+
+}  // namespace test
+}  // namespace net
diff --git a/net/quic/quic_framer.cc b/net/quic/quic_framer.cc
index 3077c57..c106086 100644
--- a/net/quic/quic_framer.cc
+++ b/net/quic/quic_framer.cc
@@ -409,6 +409,14 @@
           return kNoPacket;
         }
         break;
+      case PING_FRAME:
+        if (quic_version_ <= QUIC_VERSION_17) {
+          LOG(DFATAL) << "Attempt to add a PingFrame in "
+                      << QuicVersionToString(quic_version_);
+          return kNoPacket;
+        }
+        // Ping has no payload.
+        break;
       case RST_STREAM_FRAME:
         if (!AppendRstStreamFrame(*frame.rst_stream_frame, &writer)) {
           LOG(DFATAL) << "AppendRstStreamFrame failed";
@@ -1285,6 +1293,21 @@
         }
         continue;
       }
+      case PING_FRAME: {
+        if (quic_version_ <= QUIC_VERSION_17) {
+          LOG(DFATAL) << "Trying to read a Ping in "
+                      << QuicVersionToString(quic_version_);
+          return RaiseError(QUIC_INTERNAL_ERROR);
+        }
+        // Ping has no payload.
+        QuicPingFrame ping_frame;
+        if (!visitor_->OnPingFrame(ping_frame)) {
+          DVLOG(1) << "Visitor asked to stop further processing.";
+          // Returning true since there was no parsing error.
+          return true;
+        }
+        continue;
+      }
 
       default:
         set_detailed_error("Illegal frame type.");
@@ -1926,6 +1949,9 @@
     }
     case STOP_WAITING_FRAME:
       return GetStopWaitingFrameSize(sequence_number_length);
+    case PING_FRAME:
+      // Ping has no payload.
+      return kQuicFrameTypeSize;
     case RST_STREAM_FRAME:
       return GetMinRstStreamFrameSize(quic_version_) +
           frame.rst_stream_frame->error_details.size();
diff --git a/net/quic/quic_framer.h b/net/quic/quic_framer.h
index e1a5602..1f574c8 100644
--- a/net/quic/quic_framer.h
+++ b/net/quic/quic_framer.h
@@ -116,6 +116,9 @@
   // Called when a StopWaitingFrame has been parsed.
   virtual bool OnStopWaitingFrame(const QuicStopWaitingFrame& frame) = 0;
 
+  // Called when a PingFrame has been parsed.
+  virtual bool OnPingFrame(const QuicPingFrame& frame) = 0;
+
   // Called when a RstStreamFrame has been parsed.
   virtual bool OnRstStreamFrame(const QuicRstStreamFrame& frame) = 0;
 
diff --git a/net/quic/quic_framer_test.cc b/net/quic/quic_framer_test.cc
index 56adfc9..0638fd5 100644
--- a/net/quic/quic_framer_test.cc
+++ b/net/quic/quic_framer_test.cc
@@ -214,6 +214,7 @@
     STLDeleteElements(&ack_frames_);
     STLDeleteElements(&congestion_feedback_frames_);
     STLDeleteElements(&stop_waiting_frames_);
+    STLDeleteElements(&ping_frames_);
     STLDeleteElements(&fec_data_);
   }
 
@@ -292,6 +293,12 @@
     return true;
   }
 
+  virtual bool OnPingFrame(const QuicPingFrame& frame) OVERRIDE {
+    ++frame_count_;
+    ping_frames_.push_back(new QuicPingFrame(frame));
+    return true;
+  }
+
   virtual void OnFecData(const QuicFecData& fec) OVERRIDE {
     ++fec_count_;
     fec_data_.push_back(new QuicFecData(fec));
@@ -347,6 +354,7 @@
   vector<QuicAckFrame*> ack_frames_;
   vector<QuicCongestionFeedbackFrame*> congestion_feedback_frames_;
   vector<QuicStopWaitingFrame*> stop_waiting_frames_;
+  vector<QuicPingFrame*> ping_frames_;
   vector<QuicFecData*> fec_data_;
   string fec_protected_payload_;
   QuicRstStreamFrame rst_stream_frame_;
@@ -3362,6 +3370,39 @@
   }
 }
 
+TEST_P(QuicFramerTest, PingFrame) {
+  if (version_ <= QUIC_VERSION_17) {
+    return;
+  }
+
+  unsigned char packet[] = {
+    // public flags (8 byte connection_id)
+    0x3C,
+    // connection_id
+    0x10, 0x32, 0x54, 0x76,
+    0x98, 0xBA, 0xDC, 0xFE,
+    // packet sequence number
+    0xBC, 0x9A, 0x78, 0x56,
+    0x34, 0x12,
+    // private flags
+    0x00,
+
+    // frame type (ping frame)
+    0x07,
+  };
+
+  QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
+  EXPECT_TRUE(framer_.ProcessPacket(encrypted));
+
+  EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
+  ASSERT_TRUE(visitor_.header_.get());
+  EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
+
+  EXPECT_EQ(1u, visitor_.ping_frames_.size());
+
+  // No need to check the PING frame boundaries because it has no payload.
+}
+
 TEST_P(QuicFramerTest, PublicResetPacket) {
   unsigned char packet[] = {
     // public flags (public reset, 8 byte connection_id)
@@ -4941,6 +4982,54 @@
   }
 }
 
+TEST_P(QuicFramerTest, BuildPingPacket) {
+  QuicPacketHeader header;
+  header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210);
+  header.public_header.reset_flag = false;
+  header.public_header.version_flag = false;
+  header.fec_flag = false;
+  header.entropy_flag = true;
+  header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
+  header.fec_group = 0;
+
+  QuicPingFrame ping_frame;
+
+  QuicFrames frames;
+  frames.push_back(QuicFrame(&ping_frame));
+
+  unsigned char packet[] = {
+    // public flags (8 byte connection_id)
+    0x3C,
+    // connection_id
+    0x10, 0x32, 0x54, 0x76,
+    0x98, 0xBA, 0xDC, 0xFE,
+    // packet sequence number
+    0xBC, 0x9A, 0x78, 0x56,
+    0x34, 0x12,
+    // private flags(entropy)
+    0x01,
+
+    // frame type (ping frame)
+    0x07,
+  };
+
+  if (version_ > QUIC_VERSION_17) {
+    scoped_ptr<QuicPacket> data(
+        framer_.BuildUnsizedDataPacket(header, frames).packet);
+    ASSERT_TRUE(data != NULL);
+
+    test::CompareCharArraysWithHexError("constructed packet", data->data(),
+                                        data->length(), AsChars(packet),
+                                        arraysize(packet));
+  } else {
+    string expected_error =
+        "Attempt to add a PingFrame in " + QuicVersionToString(version_);
+    EXPECT_DFATAL(framer_.BuildUnsizedDataPacket(header, frames),
+                  expected_error);
+    return;
+  }
+}
+
 TEST_P(QuicFramerTest, BuildPublicResetPacket) {
   QuicPublicResetPacket reset_packet;
   reset_packet.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210);
diff --git a/net/quic/quic_headers_stream.cc b/net/quic/quic_headers_stream.cc
index bd07772..aab8571 100644
--- a/net/quic/quic_headers_stream.cc
+++ b/net/quic/quic_headers_stream.cc
@@ -174,6 +174,7 @@
       spdy_framer_visitor_(new SpdyFramerVisitor(this)) {
   spdy_framer_.set_visitor(spdy_framer_visitor_.get());
   spdy_framer_.set_debug_visitor(spdy_framer_visitor_.get());
+  DisableFlowControl();
 }
 
 QuicHeadersStream::~QuicHeadersStream() {}
@@ -207,10 +208,6 @@
 
 QuicPriority QuicHeadersStream::EffectivePriority() const { return 0; }
 
-bool QuicHeadersStream::IsFlowControlEnabled() const {
-  return false;
-}
-
 void QuicHeadersStream::OnSynStream(SpdyStreamId stream_id,
                                     SpdyPriority priority,
                                     bool fin) {
diff --git a/net/quic/quic_headers_stream.h b/net/quic/quic_headers_stream.h
index c578476..c3ccbda 100644
--- a/net/quic/quic_headers_stream.h
+++ b/net/quic/quic_headers_stream.h
@@ -37,9 +37,6 @@
   virtual uint32 ProcessRawData(const char* data, uint32 data_len) OVERRIDE;
   virtual QuicPriority EffectivePriority() const OVERRIDE;
 
-  // Headers stream is special and is not flow controlled.
-  virtual bool IsFlowControlEnabled() const OVERRIDE;
-
  private:
   class SpdyFramerVisitor;
 
diff --git a/net/quic/quic_headers_stream_test.cc b/net/quic/quic_headers_stream_test.cc
index 73dc835..0cd0fde 100644
--- a/net/quic/quic_headers_stream_test.cc
+++ b/net/quic/quic_headers_stream_test.cc
@@ -318,7 +318,7 @@
 
 TEST_P(QuicHeadersStreamTest, NoFlowControl) {
   ValueRestore<bool> old_flag(&FLAGS_enable_quic_stream_flow_control, true);
-  EXPECT_FALSE(headers_stream_->IsFlowControlEnabled());
+  EXPECT_FALSE(headers_stream_->flow_controller()->IsEnabled());
 }
 
 }  // namespace
diff --git a/net/quic/quic_http_stream.cc b/net/quic/quic_http_stream.cc
index 77bfc8d..14a6443 100644
--- a/net/quic/quic_http_stream.cc
+++ b/net/quic/quic_http_stream.cc
@@ -425,11 +425,13 @@
   // Log the actual request with the URL Request's net log.
   stream_net_log_.AddEvent(
       NetLog::TYPE_HTTP_TRANSACTION_QUIC_SEND_REQUEST_HEADERS,
-      base::Bind(&QuicRequestNetLogCallback, &request_headers_, priority_));
+      base::Bind(&QuicRequestNetLogCallback, stream_->id(), &request_headers_,
+                 priority_));
   // Also log to the QuicSession's net log.
   stream_->net_log().AddEvent(
       NetLog::TYPE_QUIC_HTTP_STREAM_SEND_REQUEST_HEADERS,
-      base::Bind(&QuicRequestNetLogCallback, &request_headers_, priority_));
+      base::Bind(&QuicRequestNetLogCallback, stream_->id(), &request_headers_,
+                 priority_));
 
   bool has_upload_data = request_body_stream_ != NULL;
 
diff --git a/net/quic/quic_http_stream.h b/net/quic/quic_http_stream.h
index ce78bb3..f13527e 100644
--- a/net/quic/quic_http_stream.h
+++ b/net/quic/quic_http_stream.h
@@ -163,6 +163,8 @@
   BoundNetLog stream_net_log_;
 
   base::WeakPtrFactory<QuicHttpStream> weak_factory_;
+
+  DISALLOW_COPY_AND_ASSIGN(QuicHttpStream);
 };
 
 }  // namespace net
diff --git a/net/quic/quic_http_stream_test.cc b/net/quic/quic_http_stream_test.cc
index 586e1e3..26da2a1 100644
--- a/net/quic/quic_http_stream_test.cc
+++ b/net/quic/quic_http_stream_test.cc
@@ -257,7 +257,8 @@
   scoped_ptr<QuicEncryptedPacket> ConstructRstStreamPacket(
       QuicPacketSequenceNumber sequence_number) {
     return maker_.MakeRstPacket(
-        sequence_number, true, stream_id_, QUIC_STREAM_NO_ERROR);
+        sequence_number, true, stream_id_,
+        AdjustErrorForVersion(QUIC_RST_FLOW_CONTROL_ACCOUNTING, GetParam()));
   }
 
   scoped_ptr<QuicEncryptedPacket> ConstructAckAndRstStreamPacket(
diff --git a/net/quic/quic_http_utils.cc b/net/quic/quic_http_utils.cc
index 853b078..2bad8a6 100644
--- a/net/quic/quic_http_utils.cc
+++ b/net/quic/quic_http_utils.cc
@@ -21,12 +21,14 @@
 }
 
 base::Value* QuicRequestNetLogCallback(
+    QuicStreamId stream_id,
     const SpdyHeaderBlock* headers,
     QuicPriority priority,
     NetLog::LogLevel log_level) {
   base::DictionaryValue* dict = static_cast<base::DictionaryValue*>(
       SpdyHeaderBlockNetLogCallback(headers, log_level));
   dict->SetInteger("quic_priority", static_cast<int>(priority));
+  dict->SetInteger("quic_stream_id", static_cast<int>(stream_id));
   return dict;
 }
 
diff --git a/net/quic/quic_http_utils.h b/net/quic/quic_http_utils.h
index a62b9ef..862b7c6 100644
--- a/net/quic/quic_http_utils.h
+++ b/net/quic/quic_http_utils.h
@@ -22,6 +22,7 @@
 // Converts a SpdyHeaderBlock and priority into NetLog event parameters.  Caller
 // takes ownership of returned value.
 NET_EXPORT base::Value* QuicRequestNetLogCallback(
+    QuicStreamId stream_id,
     const SpdyHeaderBlock* headers,
     QuicPriority priority,
     NetLog::LogLevel log_level);
diff --git a/net/quic/quic_network_transaction_unittest.cc b/net/quic/quic_network_transaction_unittest.cc
index c904549..8a22aa5 100644
--- a/net/quic/quic_network_transaction_unittest.cc
+++ b/net/quic/quic_network_transaction_unittest.cc
@@ -138,13 +138,6 @@
     HttpStreamFactory::SetNextProtos(std::vector<NextProto>());
   }
 
-  scoped_ptr<QuicEncryptedPacket> ConstructRstPacket(
-      QuicPacketSequenceNumber num,
-      QuicStreamId stream_id) {
-    return maker_.MakeRstPacket(
-        num, false, stream_id, QUIC_STREAM_NO_ERROR);
-  }
-
   scoped_ptr<QuicEncryptedPacket> ConstructConnectionClosePacket(
       QuicPacketSequenceNumber num) {
     return maker_.MakeConnectionClosePacket(num);
diff --git a/net/quic/quic_packet_creator.cc b/net/quic/quic_packet_creator.cc
index 072c536..8c1e0e1 100644
--- a/net/quic/quic_packet_creator.cc
+++ b/net/quic/quic_packet_creator.cc
@@ -89,9 +89,7 @@
 }
 
 InFecGroup QuicPacketCreator::MaybeStartFEC() {
-  // Don't send FEC until QUIC_VERSION_15.
-  if (framer_->version() != QUIC_VERSION_13 &&
-      options_.max_packets_per_fec_group > 0 && fec_group_.get() == NULL) {
+  if (IsFecEnabled() && fec_group_.get() == NULL) {
     DCHECK(queued_frames_.empty());
     // Set the fec group number to the sequence number of the next packet.
     fec_group_number_ = sequence_number() + 1;
@@ -114,17 +112,16 @@
 
 void QuicPacketCreator::UpdateSequenceNumberLength(
       QuicPacketSequenceNumber least_packet_awaited_by_peer,
-      QuicByteCount bytes_per_second) {
+      QuicByteCount congestion_window) {
   DCHECK_LE(least_packet_awaited_by_peer, sequence_number_ + 1);
   // Since the packet creator will not change sequence number length mid FEC
   // group, include the size of an FEC group to be safe.
   const QuicPacketSequenceNumber current_delta =
       options_.max_packets_per_fec_group + sequence_number_ + 1
       - least_packet_awaited_by_peer;
-  const uint64 congestion_window =
-      bytes_per_second / options_.max_packet_length;
-  const uint64 delta = max(current_delta, congestion_window);
-
+  const uint64 congestion_window_packets =
+      congestion_window / options_.max_packet_length;
+  const uint64 delta = max(current_delta, congestion_window_packets);
   options_.send_sequence_number_length =
       QuicFramer::GetMinSequenceNumberLength(delta * 4);
 }
@@ -134,11 +131,9 @@
   // TODO(jri): This is a simple safe decision for now, but make
   // is_in_fec_group a parameter. Same as with all public methods in
   // QuicPacketCreator.
-  InFecGroup is_in_fec_group = options_.max_packets_per_fec_group == 0 ?
-                               NOT_IN_FEC_GROUP : IN_FEC_GROUP;
   return BytesFree() >
       QuicFramer::GetMinStreamFrameSize(framer_->version(), id, offset, true,
-                                        is_in_fec_group);
+                                        IsFecEnabled());
 }
 
 // static
@@ -278,6 +273,12 @@
                                   + ExpansionOnNewFrame());
 }
 
+InFecGroup QuicPacketCreator::IsFecEnabled() const {
+  return (framer_->version() == QUIC_VERSION_13 ||
+          options_.max_packets_per_fec_group == 0) ?
+          NOT_IN_FEC_GROUP : IN_FEC_GROUP;
+}
+
 size_t QuicPacketCreator::PacketSize() const {
   if (queued_frames_.empty()) {
     // Only adjust the sequence number length when the FEC group is not open,
@@ -289,8 +290,7 @@
     packet_size_ = GetPacketHeaderSize(options_.send_connection_id_length,
                                        send_version_in_packet_,
                                        sequence_number_length_,
-                                       options_.max_packets_per_fec_group == 0 ?
-                                           NOT_IN_FEC_GROUP : IN_FEC_GROUP);
+                                       IsFecEnabled());
   }
   return packet_size_;
 }
@@ -334,7 +334,12 @@
 }
 
 SerializedPacket QuicPacketCreator::SerializeFec() {
-  DCHECK_LT(0u, fec_group_->NumReceivedPackets());
+  if (fec_group_.get() == NULL || fec_group_->NumReceivedPackets() <= 0) {
+    LOG(DFATAL) << "SerializeFEC called but no group or zero packets in group.";
+    // TODO(jri): Make this a public method of framer?
+    SerializedPacket kNoPacket(0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL);
+    return kNoPacket;
+  }
   DCHECK_EQ(0u, queued_frames_.size());
   QuicPacketHeader header;
   FillPacketHeader(fec_group_number_, true, &header);
diff --git a/net/quic/quic_packet_creator.h b/net/quic/quic_packet_creator.h
index 3cbae77..83494da 100644
--- a/net/quic/quic_packet_creator.h
+++ b/net/quic/quic_packet_creator.h
@@ -68,7 +68,7 @@
   // can be safely changed.
   void UpdateSequenceNumberLength(
       QuicPacketSequenceNumber least_packet_awaited_by_peer,
-      QuicByteCount bytes_per_second);
+      QuicByteCount congestion_window);
 
   // The overhead the framing will add for a packet with one frame.
   static size_t StreamFramePacketOverhead(
@@ -115,6 +115,14 @@
   // Returns true if there are frames pending to be serialized.
   bool HasPendingFrames();
 
+  // Returns IN_FEC_GROUP or NOT_IN_FEC_GROUP, depending on whether FEC is
+  // enabled or not. Note: This does not mean that an FEC group is currently
+  // active; i.e., fec_group_.get() may still be NULL.
+  // TODO(jri): Straighten out naming: Enabling FEC for the connection
+  // should use FEC_ENABLED/DISABLED, and IN_FEC_GROUP/NOT_IN_FEC_GROUP should
+  // be used if a given packet is in an fec group.
+  InFecGroup IsFecEnabled() const;
+
   // Returns the number of bytes which are available to be used by additional
   // frames in the packet.  Since stream frames are slightly smaller when they
   // are the last frame in a packet, this method will return a different
diff --git a/net/quic/quic_packet_creator_test.cc b/net/quic/quic_packet_creator_test.cc
index 4b69515..a307078 100644
--- a/net/quic/quic_packet_creator_test.cc
+++ b/net/quic/quic_packet_creator_test.cc
@@ -12,9 +12,11 @@
 #include "net/quic/test_tools/mock_random.h"
 #include "net/quic/test_tools/quic_packet_creator_peer.h"
 #include "net/quic/test_tools/quic_test_utils.h"
+#include "net/test/gtest_util.h"
 #include "testing/gmock/include/gmock/gmock.h"
 
 using base::StringPiece;
+using std::ostream;
 using std::string;
 using std::vector;
 using testing::DoAll;
@@ -27,11 +29,42 @@
 namespace test {
 namespace {
 
-class QuicPacketCreatorTest : public ::testing::TestWithParam<bool> {
+// Run tests with combinations of {QuicVersion, ToggleVersionSerialization}.
+struct TestParams {
+  TestParams(QuicVersion version,
+             bool version_serialization)
+      : version(version),
+        version_serialization(version_serialization) {
+  }
+
+  friend ostream& operator<<(ostream& os, const TestParams& p) {
+    os << "{ client_version: " << QuicVersionToString(p.version)
+       << " include version: " << p.version_serialization << " }";
+    return os;
+  }
+
+  QuicVersion version;
+  bool version_serialization;
+};
+
+// Constructs various test permutations.
+vector<TestParams> GetTestParams() {
+  vector<TestParams> params;
+  QuicVersionVector all_supported_versions = QuicSupportedVersions();
+  for (size_t i = 0; i < all_supported_versions.size(); ++i) {
+    params.push_back(TestParams(all_supported_versions[i], true));
+    params.push_back(TestParams(all_supported_versions[i], false));
+  }
+  return params;
+}
+
+class QuicPacketCreatorTest : public ::testing::TestWithParam<TestParams> {
  protected:
   QuicPacketCreatorTest()
-      : server_framer_(QuicSupportedVersions(), QuicTime::Zero(), true),
-        client_framer_(QuicSupportedVersions(), QuicTime::Zero(), false),
+      : server_framer_(SupportedVersions(GetParam().version), QuicTime::Zero(),
+                       true),
+        client_framer_(SupportedVersions(GetParam().version), QuicTime::Zero(),
+                       false),
         sequence_number_(0),
         connection_id_(2),
         data_("foo"),
@@ -101,8 +134,15 @@
   QuicPacketCreator creator_;
 };
 
-TEST_F(QuicPacketCreatorTest, SerializeFrames) {
-  frames_.push_back(QuicFrame(new QuicAckFrame(0u, QuicTime::Zero(), 0u)));
+// Run all packet creator tests with all supported versions of QUIC, and with
+// and without version in the packet header.
+INSTANTIATE_TEST_CASE_P(QuicPacketCreatorTests,
+                        QuicPacketCreatorTest,
+                        ::testing::ValuesIn(GetTestParams()));
+
+
+TEST_P(QuicPacketCreatorTest, SerializeFrames) {
+  frames_.push_back(QuicFrame(new QuicAckFrame(MakeAckFrame(0u, 0u))));
   frames_.push_back(QuicFrame(new QuicStreamFrame(0u, false, 0u, IOVector())));
   frames_.push_back(QuicFrame(new QuicStreamFrame(0u, true, 0u, IOVector())));
   SerializedPacket serialized = creator_.SerializeAllFrames(frames_);
@@ -125,9 +165,11 @@
   delete serialized.packet;
 }
 
-TEST_F(QuicPacketCreatorTest, SerializeWithFEC) {
+TEST_P(QuicPacketCreatorTest, SerializeWithFEC) {
   creator_.options()->max_packets_per_fec_group = 6;
-  ASSERT_FALSE(creator_.ShouldSendFec(false));
+  // Should return false since we do not have enough packets in the FEC group to
+  // trigger an FEC packet.
+  ASSERT_FALSE(creator_.ShouldSendFec(/*force_close=*/false));
 
   frames_.push_back(QuicFrame(new QuicStreamFrame(0u, false, 0u, IOVector())));
   SerializedPacket serialized = creator_.SerializeAllFrames(frames_);
@@ -139,19 +181,35 @@
     EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_));
     EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_));
     EXPECT_CALL(framer_visitor_, OnPacketHeader(_));
-    EXPECT_CALL(framer_visitor_, OnFecProtectedPayload(_));
+    if (GetParam().version != QUIC_VERSION_13) {
+      // FEC is only used for versions > 13.
+      EXPECT_CALL(framer_visitor_, OnFecProtectedPayload(_));
+    }
     EXPECT_CALL(framer_visitor_, OnStreamFrame(_));
     EXPECT_CALL(framer_visitor_, OnPacketComplete());
   }
   ProcessPacket(serialized.packet);
   delete serialized.packet;
 
-  ASSERT_FALSE(creator_.ShouldSendFec(false));
-  ASSERT_TRUE(creator_.ShouldSendFec(true));
+  // Should return false since we do not have enough packets in the FEC group to
+  // trigger an FEC packet.
+  ASSERT_FALSE(creator_.ShouldSendFec(/*force_close=*/false));
+  if (GetParam().version == QUIC_VERSION_13) {
+    // FEC is only used for versions > 13.
+    ASSERT_FALSE(creator_.ShouldSendFec(/*force_close=*/true));
+  } else {
+    // Should return true since there are packets in the FEC group.
+    ASSERT_TRUE(creator_.ShouldSendFec(/*force_close=*/true));
+  }
 
+  if (GetParam().version == QUIC_VERSION_13) {
+    // FEC is only used for versions > 13.
+    EXPECT_DFATAL(creator_.SerializeFec(),
+                  "SerializeFEC called but no group or zero packets in group.");
+    return;
+  }
   serialized = creator_.SerializeFec();
   ASSERT_EQ(2u, serialized.sequence_number);
-
   {
     InSequence s;
     EXPECT_CALL(framer_visitor_, OnPacket());
@@ -165,8 +223,8 @@
   delete serialized.packet;
 }
 
-TEST_F(QuicPacketCreatorTest, SerializeChangingSequenceNumberLength) {
-  frames_.push_back(QuicFrame(new QuicAckFrame(0u, QuicTime::Zero(), 0u)));
+TEST_P(QuicPacketCreatorTest, SerializeChangingSequenceNumberLength) {
+  frames_.push_back(QuicFrame(new QuicAckFrame(MakeAckFrame(0u, 0u))));
   creator_.AddSavedFrame(frames_[0]);
   creator_.options()->send_sequence_number_length =
       PACKET_4BYTE_SEQUENCE_NUMBER;
@@ -205,11 +263,22 @@
   delete serialized.packet;
 }
 
-TEST_F(QuicPacketCreatorTest, SerializeWithFECChangingSequenceNumberLength) {
+TEST_P(QuicPacketCreatorTest, SerializeWithFECChangingSequenceNumberLength) {
+  if (GetParam().version == QUIC_VERSION_13) {
+    // FEC is only used for ver. > 13. This test does not add value for ver. 13.
+    return;
+  }
+  // Test goal is to test the following sequence (P1 => generate Packet 1):
+  // P1 <change seq num length> P2 FEC,
+  // and we expect that sequence number length should not change until the end
+  // of the open FEC group.
   creator_.options()->max_packets_per_fec_group = 6;
-  ASSERT_FALSE(creator_.ShouldSendFec(false));
+  // Should return false since we do not have enough packets in the FEC group to
+  // trigger an FEC packet.
+  ASSERT_FALSE(creator_.ShouldSendFec(/*force_close=*/false));
+  frames_.push_back(QuicFrame(new QuicAckFrame(MakeAckFrame(0u, 0u))));
 
-  frames_.push_back(QuicFrame(new QuicAckFrame(0u, QuicTime::Zero(), 0u)));
+  // Generate Packet 1.
   creator_.AddSavedFrame(frames_[0]);
   // Change the sequence number length mid-FEC group and it should not change.
   creator_.options()->send_sequence_number_length =
@@ -230,12 +299,34 @@
   ProcessPacket(serialized.packet);
   delete serialized.packet;
 
-  ASSERT_FALSE(creator_.ShouldSendFec(false));
-  ASSERT_TRUE(creator_.ShouldSendFec(true));
+  // Generate Packet 2.
+  creator_.AddSavedFrame(frames_[0]);
+  serialized = creator_.SerializePacket();
+  EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER, serialized.sequence_number_length);
 
+  {
+    InSequence s;
+    EXPECT_CALL(framer_visitor_, OnPacket());
+    EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_));
+    EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_));
+    EXPECT_CALL(framer_visitor_, OnPacketHeader(_));
+    EXPECT_CALL(framer_visitor_, OnFecProtectedPayload(_));
+    EXPECT_CALL(framer_visitor_, OnAckFrame(_));
+    EXPECT_CALL(framer_visitor_, OnPacketComplete());
+  }
+  ProcessPacket(serialized.packet);
+  delete serialized.packet;
+
+  // Should return false since we do not have enough packets in the FEC group to
+  // trigger an FEC packet.
+  ASSERT_FALSE(creator_.ShouldSendFec(/*force_close=*/false));
+  // Should return true since there are packets in the FEC group.
+  ASSERT_TRUE(creator_.ShouldSendFec(/*force_close=*/true));
+
+  // Force generation of FEC packet.
   serialized = creator_.SerializeFec();
   EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER, serialized.sequence_number_length);
-  ASSERT_EQ(2u, serialized.sequence_number);
+  ASSERT_EQ(3u, serialized.sequence_number);
 
   {
     InSequence s;
@@ -256,7 +347,7 @@
   delete serialized.packet;
 }
 
-TEST_F(QuicPacketCreatorTest, ReserializeFramesWithSequenceNumberLength) {
+TEST_P(QuicPacketCreatorTest, ReserializeFramesWithSequenceNumberLength) {
   // If the original packet sequence number length, the current sequence number
   // length, and the configured send sequence number length are different, the
   // retransmit must sent with the original length and the others do not change.
@@ -287,7 +378,7 @@
   delete serialized.packet;
 }
 
-TEST_F(QuicPacketCreatorTest, SerializeConnectionClose) {
+TEST_P(QuicPacketCreatorTest, SerializeConnectionClose) {
   QuicConnectionCloseFrame frame;
   frame.error_code = QUIC_NO_ERROR;
   frame.error_details = "error";
@@ -308,7 +399,7 @@
   delete serialized.packet;
 }
 
-TEST_F(QuicPacketCreatorTest, CreateStreamFrame) {
+TEST_P(QuicPacketCreatorTest, CreateStreamFrame) {
   QuicFrame frame;
   size_t consumed = creator_.CreateStreamFrame(1u, MakeIOVector("test"), 0u,
                                                false, &frame);
@@ -317,7 +408,7 @@
   delete frame.stream_frame;
 }
 
-TEST_F(QuicPacketCreatorTest, CreateStreamFrameFin) {
+TEST_P(QuicPacketCreatorTest, CreateStreamFrameFin) {
   QuicFrame frame;
   size_t consumed = creator_.CreateStreamFrame(1u, MakeIOVector("test"), 10u,
                                                true, &frame);
@@ -326,7 +417,7 @@
   delete frame.stream_frame;
 }
 
-TEST_F(QuicPacketCreatorTest, CreateStreamFrameFinOnly) {
+TEST_P(QuicPacketCreatorTest, CreateStreamFrameFinOnly) {
   QuicFrame frame;
   size_t consumed = creator_.CreateStreamFrame(1u, IOVector(), 0u, true,
                                                &frame);
@@ -335,7 +426,7 @@
   delete frame.stream_frame;
 }
 
-TEST_F(QuicPacketCreatorTest, CreateAllFreeBytesForStreamFrames) {
+TEST_P(QuicPacketCreatorTest, CreateAllFreeBytesForStreamFrames) {
   const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP)
                           + GetEncryptionOverhead();
   for (size_t i = overhead; i < overhead + 100; ++i) {
@@ -358,7 +449,7 @@
   }
 }
 
-TEST_F(QuicPacketCreatorTest, StreamFrameConsumption) {
+TEST_P(QuicPacketCreatorTest, StreamFrameConsumption) {
   // Compute the total overhead for a single frame in packet.
   const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP)
       + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP);
@@ -385,7 +476,11 @@
   }
 }
 
-TEST_F(QuicPacketCreatorTest, StreamFrameConsumptionInFecProtectedPacket) {
+TEST_P(QuicPacketCreatorTest, StreamFrameConsumptionWithFec) {
+  if (GetParam().version == QUIC_VERSION_13) {
+    // Test below tests behavior with version 13.
+    return;
+  }
   // Turn on FEC protection.
   creator_.options()->max_packets_per_fec_group = 6;
   // Compute the total overhead for a single frame in packet.
@@ -415,7 +510,40 @@
   }
 }
 
-TEST_F(QuicPacketCreatorTest, CryptoStreamFramePacketPadding) {
+TEST_P(QuicPacketCreatorTest, StreamFrameConsumptionWithFecOnlyVersion13) {
+  if (GetParam().version != QUIC_VERSION_13) {
+    return;
+  }
+  // Turn on FEC protection. Behavior should be exactly the same as if FEC was
+  // NOT turned on. This test is the same as StreamFrameConsumption above.
+  creator_.options()->max_packets_per_fec_group = 6;
+  // Compute the total overhead for a single frame in packet.
+  const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP)
+      + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP);
+  size_t capacity = kDefaultMaxPacketSize - overhead;
+  // Now, test various sizes around this size.
+  for (int delta = -5; delta <= 5; ++delta) {
+    string data(capacity + delta, 'A');
+    size_t bytes_free = delta > 0 ? 0 : 0 - delta;
+    QuicFrame frame;
+    size_t bytes_consumed = creator_.CreateStreamFrame(
+        kStreamId, MakeIOVector(data), kOffset, false, &frame);
+    EXPECT_EQ(capacity - bytes_free, bytes_consumed);
+
+    ASSERT_TRUE(creator_.AddSavedFrame(frame));
+    // BytesFree() returns bytes available for the next frame, which will
+    // be two bytes smaller since the stream frame would need to be grown.
+    EXPECT_EQ(2u, creator_.ExpansionOnNewFrame());
+    size_t expected_bytes_free = bytes_free < 3 ? 0 : bytes_free - 2;
+    EXPECT_EQ(expected_bytes_free, creator_.BytesFree()) << "delta: " << delta;
+    SerializedPacket serialized_packet = creator_.SerializePacket();
+    ASSERT_TRUE(serialized_packet.packet);
+    delete serialized_packet.packet;
+    delete serialized_packet.retransmittable_frames;
+  }
+}
+
+TEST_P(QuicPacketCreatorTest, CryptoStreamFramePacketPadding) {
   // Compute the total overhead for a single frame in packet.
   const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP)
       + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP);
@@ -448,7 +576,7 @@
   }
 }
 
-TEST_F(QuicPacketCreatorTest, NonCryptoStreamFramePacketNonPadding) {
+TEST_P(QuicPacketCreatorTest, NonCryptoStreamFramePacketNonPadding) {
   // Compute the total overhead for a single frame in packet.
   const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP)
       + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP);
@@ -478,7 +606,7 @@
   }
 }
 
-TEST_F(QuicPacketCreatorTest, SerializeVersionNegotiationPacket) {
+TEST_P(QuicPacketCreatorTest, SerializeVersionNegotiationPacket) {
   QuicPacketCreatorPeer::SetIsServer(&creator_, true);
   QuicVersionVector versions;
   versions.push_back(test::QuicVersionMax());
@@ -494,7 +622,7 @@
   client_framer_.ProcessPacket(*encrypted.get());
 }
 
-TEST_F(QuicPacketCreatorTest, UpdatePacketSequenceNumberLengthLeastAwaiting) {
+TEST_P(QuicPacketCreatorTest, UpdatePacketSequenceNumberLengthLeastAwaiting) {
   EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER,
             creator_.options()->send_sequence_number_length);
 
@@ -519,7 +647,7 @@
             creator_.options()->send_sequence_number_length);
 }
 
-TEST_F(QuicPacketCreatorTest, UpdatePacketSequenceNumberLengthBandwidth) {
+TEST_P(QuicPacketCreatorTest, UpdatePacketSequenceNumberLengthBandwidth) {
   EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER,
             creator_.options()->send_sequence_number_length);
 
@@ -541,7 +669,7 @@
             creator_.options()->send_sequence_number_length);
 }
 
-TEST_F(QuicPacketCreatorTest, CreateStreamFrameWithNotifier) {
+TEST_P(QuicPacketCreatorTest, CreateStreamFrameWithNotifier) {
   // Ensure that if CreateStreamFrame does not consume any data (e.g. a FIN only
   // frame) then any QuicAckNotifier that is passed in still gets attached to
   // the frame.
@@ -557,12 +685,8 @@
   delete frame.stream_frame;
 }
 
-INSTANTIATE_TEST_CASE_P(ToggleVersionSerialization,
-                        QuicPacketCreatorTest,
-                        ::testing::Values(false, true));
-
 TEST_P(QuicPacketCreatorTest, SerializeFrame) {
-  if (!GetParam()) {
+  if (!GetParam().version_serialization) {
     creator_.StopSendingVersion();
   }
   frames_.push_back(QuicFrame(new QuicStreamFrame(0u, false, 0u, IOVector())));
@@ -581,12 +705,13 @@
     EXPECT_CALL(framer_visitor_, OnPacketComplete());
   }
   ProcessPacket(serialized.packet);
-  EXPECT_EQ(GetParam(), header.public_header.version_flag);
+  EXPECT_EQ(GetParam().version_serialization,
+            header.public_header.version_flag);
   delete serialized.packet;
 }
 
 TEST_P(QuicPacketCreatorTest, CreateStreamFrameTooLarge) {
-  if (!GetParam()) {
+  if (!GetParam().version_serialization) {
     creator_.StopSendingVersion();
   }
   // A string larger than fits into a frame.
@@ -606,7 +731,7 @@
 }
 
 TEST_P(QuicPacketCreatorTest, AddFrameAndSerialize) {
-  if (!GetParam()) {
+  if (!GetParam().version_serialization) {
     creator_.StopSendingVersion();
   }
   const size_t max_plaintext_size =
@@ -620,7 +745,7 @@
             creator_.BytesFree());
 
   // Add a variety of frame types and then a padding frame.
-  QuicAckFrame ack_frame(0u, QuicTime::Zero(), 0u);
+  QuicAckFrame ack_frame(MakeAckFrame(0u, 0u));
   EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame)));
   EXPECT_TRUE(creator_.HasPendingFrames());
 
@@ -665,7 +790,7 @@
             creator_.BytesFree());
 }
 
-TEST_F(QuicPacketCreatorTest, EntropyFlag) {
+TEST_P(QuicPacketCreatorTest, EntropyFlag) {
   frames_.push_back(QuicFrame(new QuicStreamFrame(0u, false, 0u, IOVector())));
 
   for (int i = 0; i < 2; ++i) {
diff --git a/net/quic/quic_packet_generator.cc b/net/quic/quic_packet_generator.cc
index cd2013e..1c3dc9c 100644
--- a/net/quic/quic_packet_generator.cc
+++ b/net/quic/quic_packet_generator.cc
@@ -61,6 +61,9 @@
       case STOP_WAITING_FRAME:
         delete it->stop_waiting_frame;
         break;
+      case PING_FRAME:
+        delete it->ping_frame;
+        break;
       case NUM_FRAME_TYPES:
         DCHECK(false) << "Cannot delete type: " << it->type;
     }
@@ -146,6 +149,8 @@
   // Ensure the FEC group is closed at the end of this method if not in batch
   // mode.
   if (!InBatchMode() && packet_creator_->ShouldSendFec(true)) {
+    // TODO(jri): SerializeFec can return a NULL packet, and this should
+    // cause an early return, with a call to delegate_->OnPacketGenerationError.
     SerializedPacket serialized_fec = packet_creator_->SerializeFec();
     DCHECK(serialized_fec.packet);
     delegate_->OnSerializedPacket(serialized_fec);
@@ -185,6 +190,9 @@
     // Ensure the FEC group is closed at the end of this method unless other
     // writes are pending.
     if (packet_creator_->ShouldSendFec(true)) {
+      // TODO(jri): SerializeFec can return a NULL packet, and this should
+      // cause an early return, with a call to
+      // delegate_->OnPacketGenerationError.
       SerializedPacket serialized_fec = packet_creator_->SerializeFec();
       DCHECK(serialized_fec.packet);
       delegate_->OnSerializedPacket(serialized_fec);
@@ -271,6 +279,8 @@
   delegate_->OnSerializedPacket(serialized_packet);
 
   if (packet_creator_->ShouldSendFec(false)) {
+    // TODO(jri): SerializeFec can return a NULL packet, and this should
+    // cause an early return, with a call to delegate_->OnPacketGenerationError.
     SerializedPacket serialized_fec = packet_creator_->SerializeFec();
     DCHECK(serialized_fec.packet);
     delegate_->OnSerializedPacket(serialized_fec);
diff --git a/net/quic/quic_packet_generator_test.cc b/net/quic/quic_packet_generator_test.cc
index ef123a9..8bb1dfd 100644
--- a/net/quic/quic_packet_generator_test.cc
+++ b/net/quic/quic_packet_generator_test.cc
@@ -128,7 +128,7 @@
 
   QuicAckFrame* CreateAckFrame() {
     // TODO(rch): Initialize this so it can be verified later.
-    return new QuicAckFrame(0, QuicTime::Zero(), 0);
+    return new QuicAckFrame(MakeAckFrame(0, 0));
   }
 
   QuicCongestionFeedbackFrame* CreateFeedbackFrame() {
diff --git a/net/quic/quic_protocol.cc b/net/quic/quic_protocol.cc
index 6caa99c..2a99b83 100644
--- a/net/quic/quic_protocol.cc
+++ b/net/quic/quic_protocol.cc
@@ -162,6 +162,8 @@
       return MakeQuicTag('Q', '0', '1', '6');
     case QUIC_VERSION_17:
       return MakeQuicTag('Q', '0', '1', '7');
+    case QUIC_VERSION_18:
+      return MakeQuicTag('Q', '0', '1', '8');
     default:
       // This shold be an ERROR because we should never attempt to convert an
       // invalid QuicVersion to be written to the wire.
@@ -192,6 +194,7 @@
     RETURN_STRING_LITERAL(QUIC_VERSION_15);
     RETURN_STRING_LITERAL(QUIC_VERSION_16);
     RETURN_STRING_LITERAL(QUIC_VERSION_17);
+    RETURN_STRING_LITERAL(QUIC_VERSION_18);
     default:
       return "QUIC_VERSION_UNSUPPORTED";
   }
@@ -261,15 +264,6 @@
 
 QuicAckFrame::QuicAckFrame() {}
 
-QuicAckFrame::QuicAckFrame(QuicPacketSequenceNumber largest_observed,
-                           QuicTime largest_observed_receive_time,
-                           QuicPacketSequenceNumber least_unacked) {
-  received_info.largest_observed = largest_observed;
-  received_info.entropy_hash = 0;
-  sent_info.least_unacked = least_unacked;
-  sent_info.entropy_hash = 0;
-}
-
 CongestionFeedbackMessageTCP::CongestionFeedbackMessageTCP()
     : receive_window(0) {
 }
@@ -284,6 +278,21 @@
 
 QuicCongestionFeedbackFrame::~QuicCongestionFeedbackFrame() {}
 
+QuicRstStreamErrorCode AdjustErrorForVersion(
+    QuicRstStreamErrorCode error_code,
+    QuicVersion version) {
+  switch (error_code) {
+    case QUIC_RST_FLOW_CONTROL_ACCOUNTING:
+      if (version <= QUIC_VERSION_17) {
+        return QUIC_STREAM_NO_ERROR;
+      }
+      break;
+    default:
+      return error_code;
+  }
+  return error_code;
+}
+
 QuicRstStreamFrame::QuicRstStreamFrame()
     : stream_id(0),
       error_code(QUIC_STREAM_NO_ERROR) {
@@ -329,6 +338,11 @@
       stop_waiting_frame(frame) {
 }
 
+QuicFrame::QuicFrame(QuicPingFrame* frame)
+    : type(PING_FRAME),
+      ping_frame(frame) {
+}
+
 QuicFrame::QuicFrame(QuicRstStreamFrame* frame)
     : type(RST_STREAM_FRAME),
       rst_stream_frame(frame) {
@@ -638,6 +652,9 @@
       case STOP_WAITING_FRAME:
         delete it->stop_waiting_frame;
         break;
+      case PING_FRAME:
+        delete it->ping_frame;
+        break;
       case RST_STREAM_FRAME:
         delete it->rst_stream_frame;
         break;
@@ -731,6 +748,11 @@
   return os;
 }
 
+WriteResult::WriteResult()
+    : status(WRITE_STATUS_ERROR),
+      bytes_written(0) {
+}
+
 WriteResult::WriteResult(WriteStatus status,
                          int bytes_written_or_error_code)
     : status(status),
diff --git a/net/quic/quic_protocol.h b/net/quic/quic_protocol.h
index 2609de2..78bbeec 100644
--- a/net/quic/quic_protocol.h
+++ b/net/quic/quic_protocol.h
@@ -60,7 +60,7 @@
 
 // Maximum size of the initial congestion window in packets.
 const size_t kDefaultInitialWindow = 10;
-const size_t kMaxInitialWindow = 100;
+const uint32 kMaxInitialWindow = 100;
 
 // Default size of initial flow control window.
 const uint32 kDefaultFlowControlSendWindow = 16 * 1024;  // 16 KB
@@ -70,7 +70,7 @@
 const size_t kMaxTcpCongestionWindow = 200;
 
 // Don't allow a client to suggest an RTT longer than 15 seconds.
-const size_t kMaxInitialRoundTripTimeUs = 15 * kNumMicrosPerSecond;
+const uint32 kMaxInitialRoundTripTimeUs = 15 * kNumMicrosPerSecond;
 
 // Maximum number of open streams per connection.
 const size_t kDefaultMaxStreamsPerConnection = 100;
@@ -110,6 +110,9 @@
 const int64 kDefaultTimeoutSecs = 60 * 10;  // 10 minutes.
 const int64 kDefaultMaxTimeForCryptoHandshakeSecs = 5;  // 5 secs.
 
+// Default ping timeout.
+const int64 kPingTimeoutSecs = 15;  // 15 secs.
+
 // We define an unsigned 16-bit floating point value, inspired by IEEE floats
 // (http://en.wikipedia.org/wiki/Half_precision_floating-point_format),
 // with 5-bit exponent (bias 1), 11-bit mantissa (effective 12 with hidden
@@ -163,6 +166,7 @@
   WINDOW_UPDATE_FRAME = 4,
   BLOCKED_FRAME = 5,
   STOP_WAITING_FRAME = 6,
+  PING_FRAME = 7,
 
   // STREAM, ACK, and CONGESTION_FEEDBACK frames are special frames. They are
   // encoded differently on the wire and their values do not need to be stable.
@@ -263,7 +267,8 @@
   QUIC_VERSION_13 = 13,
   QUIC_VERSION_15 = 15,
   QUIC_VERSION_16 = 16,
-  QUIC_VERSION_17 = 17,  // Current version.
+  QUIC_VERSION_17 = 17,
+  QUIC_VERSION_18 = 18,  // Current version.
 };
 
 // This vector contains QUIC versions which we currently support.
@@ -273,7 +278,8 @@
 //
 // IMPORTANT: if you are addding to this list, follow the instructions at
 // http://sites/quic/adding-and-removing-versions
-static const QuicVersion kSupportedQuicVersions[] = {QUIC_VERSION_17,
+static const QuicVersion kSupportedQuicVersions[] = {QUIC_VERSION_18,
+                                                     QUIC_VERSION_17,
                                                      QUIC_VERSION_16,
                                                      QUIC_VERSION_15,
                                                      QUIC_VERSION_13};
@@ -349,11 +355,20 @@
   QUIC_STREAM_PEER_GOING_AWAY,
   // The stream has been cancelled.
   QUIC_STREAM_CANCELLED,
+  // Sending a RST to allow for proper flow control accounting.
+  QUIC_RST_FLOW_CONTROL_ACCOUNTING,
 
   // No error. Used as bound while iterating.
   QUIC_STREAM_LAST_ERROR,
 };
 
+// Because receiving an unknown QuicRstStreamErrorCode results in connection
+// teardown, we use this to make sure any errors predating a given version are
+// downgraded to the most appropriate existing error.
+NET_EXPORT_PRIVATE QuicRstStreamErrorCode AdjustErrorForVersion(
+    QuicRstStreamErrorCode error_code,
+    QuicVersion version);
+
 // These values must remain stable as they are uploaded to UMA histograms.
 // To add a new error code, use the current value of QUIC_LAST_ERROR and
 // increment QUIC_LAST_ERROR.
@@ -557,6 +572,11 @@
 struct NET_EXPORT_PRIVATE QuicPaddingFrame {
 };
 
+// A ping frame contains no payload, though it is retransmittable,
+// and ACK'd just like other normal frames.
+struct NET_EXPORT_PRIVATE QuicPingFrame {
+};
+
 struct NET_EXPORT_PRIVATE QuicStreamFrame {
   QuicStreamFrame();
   QuicStreamFrame(const QuicStreamFrame& frame);
@@ -655,11 +675,6 @@
 
 struct NET_EXPORT_PRIVATE QuicAckFrame {
   QuicAckFrame();
-  // Testing convenience method to construct a QuicAckFrame with all packets
-  // from least_unacked to largest_observed acked.
-  QuicAckFrame(QuicPacketSequenceNumber largest_observed,
-               QuicTime largest_observed_receive_time,
-               QuicPacketSequenceNumber least_unacked);
 
   NET_EXPORT_PRIVATE friend std::ostream& operator<<(
       std::ostream& os, const QuicAckFrame& s);
@@ -819,6 +834,7 @@
   explicit QuicFrame(QuicRstStreamFrame* frame);
   explicit QuicFrame(QuicConnectionCloseFrame* frame);
   explicit QuicFrame(QuicStopWaitingFrame* frame);
+  explicit QuicFrame(QuicPingFrame* frame);
   explicit QuicFrame(QuicGoAwayFrame* frame);
   explicit QuicFrame(QuicWindowUpdateFrame* frame);
   explicit QuicFrame(QuicBlockedFrame* frame);
@@ -833,6 +849,7 @@
     QuicAckFrame* ack_frame;
     QuicCongestionFeedbackFrame* congestion_feedback_frame;
     QuicStopWaitingFrame* stop_waiting_frame;
+    QuicPingFrame* ping_frame;
     QuicRstStreamFrame* rst_stream_frame;
     QuicConnectionCloseFrame* connection_close_frame;
     QuicGoAwayFrame* goaway_frame;
@@ -1019,6 +1036,7 @@
 // of bytes written or the error code, depending upon the status.
 struct NET_EXPORT_PRIVATE WriteResult {
   WriteResult(WriteStatus status, int bytes_written_or_error_code);
+  WriteResult();
 
   WriteStatus status;
   union {
diff --git a/net/quic/quic_protocol_test.cc b/net/quic/quic_protocol_test.cc
index ebc33ca..b1eae45 100644
--- a/net/quic/quic_protocol_test.cc
+++ b/net/quic/quic_protocol_test.cc
@@ -11,6 +11,19 @@
 namespace test {
 namespace {
 
+TEST(QuicProtocolTest, AdjustErrorForVersion) {
+  ASSERT_EQ(8, QUIC_STREAM_LAST_ERROR)
+      << "Any additions to QuicRstStreamErrorCode require an addition to "
+      << "AdjustErrorForVersion and this associated test.";
+
+  EXPECT_EQ(QUIC_STREAM_NO_ERROR,
+            AdjustErrorForVersion(QUIC_RST_FLOW_CONTROL_ACCOUNTING,
+                                  QUIC_VERSION_17));
+  EXPECT_EQ(QUIC_RST_FLOW_CONTROL_ACCOUNTING, AdjustErrorForVersion(
+      QUIC_RST_FLOW_CONTROL_ACCOUNTING,
+      static_cast<QuicVersion>(QUIC_VERSION_17 + 1)));
+}
+
 TEST(QuicProtocolTest, MakeQuicTag) {
   QuicTag tag = MakeQuicTag('A', 'B', 'C', 'D');
   char bytes[4];
diff --git a/net/quic/quic_received_packet_manager.cc b/net/quic/quic_received_packet_manager.cc
index 1dc8fc8..49a056d 100644
--- a/net/quic/quic_received_packet_manager.cc
+++ b/net/quic/quic_received_packet_manager.cc
@@ -7,6 +7,7 @@
 #include "base/logging.h"
 #include "base/stl_util.h"
 #include "net/base/linked_hash_map.h"
+#include "net/quic/quic_connection_stats.h"
 
 using std::make_pair;
 using std::max;
@@ -26,14 +27,16 @@
 }
 
 QuicReceivedPacketManager::QuicReceivedPacketManager(
-    CongestionFeedbackType congestion_type)
+    CongestionFeedbackType congestion_type,
+    QuicConnectionStats* stats)
     : packets_entropy_hash_(0),
       largest_sequence_number_(0),
       peer_largest_observed_packet_(0),
       least_packet_awaited_by_peer_(1),
       peer_least_packet_awaiting_ack_(0),
       time_largest_observed_(QuicTime::Zero()),
-      receive_algorithm_(ReceiveAlgorithmInterface::Create(congestion_type)) {
+      receive_algorithm_(ReceiveAlgorithmInterface::Create(congestion_type)),
+      stats_(stats) {
   received_info_.largest_observed = 0;
   received_info_.entropy_hash = 0;
 }
@@ -57,6 +60,16 @@
     // "missing packets" list.
     DVLOG(1) << "Removing " << sequence_number << " from missing list";
     received_info_.missing_packets.erase(sequence_number);
+
+    // Record how out of order stats.
+    ++stats_->packets_reordered;
+    uint32 sequence_gap = received_info_.largest_observed - sequence_number;
+    stats_->max_sequence_reordering =
+        max(stats_->max_sequence_reordering, sequence_gap);
+    uint32 reordering_time_us =
+        receipt_time.Subtract(time_largest_observed_).ToMicroseconds();
+    stats_->max_time_reordering_us = max(stats_->max_time_reordering_us,
+                                         reordering_time_us);
   }
   if (header.packet_sequence_number > received_info_.largest_observed) {
     received_info_.largest_observed = header.packet_sequence_number;
diff --git a/net/quic/quic_received_packet_manager.h b/net/quic/quic_received_packet_manager.h
index 5bc9f0c..05339f1 100644
--- a/net/quic/quic_received_packet_manager.h
+++ b/net/quic/quic_received_packet_manager.h
@@ -19,13 +19,16 @@
 class QuicReceivedPacketManagerPeer;
 }  // namespace test
 
+struct QuicConnectionStats;
+
 // Records all received packets by a connection and tracks their entropy.
 // Also calculates the correct entropy for the framer when it truncates an ack
 // frame being serialized.
 class NET_EXPORT_PRIVATE QuicReceivedPacketManager :
     public QuicReceivedEntropyHashCalculatorInterface {
  public:
-  explicit QuicReceivedPacketManager(CongestionFeedbackType congestion_type);
+  explicit QuicReceivedPacketManager(CongestionFeedbackType congestion_type,
+                                     QuicConnectionStats* stats);
   virtual ~QuicReceivedPacketManager();
 
   // Updates the internal state concerning which packets have been received.
@@ -145,6 +148,10 @@
   QuicTime time_largest_observed_;
 
   scoped_ptr<ReceiveAlgorithmInterface> receive_algorithm_;
+
+  QuicConnectionStats* stats_;
+
+  DISALLOW_COPY_AND_ASSIGN(QuicReceivedPacketManager);
 };
 
 }  // namespace net
diff --git a/net/quic/quic_received_packet_manager_test.cc b/net/quic/quic_received_packet_manager_test.cc
index e57a8fe..1b893b7 100644
--- a/net/quic/quic_received_packet_manager_test.cc
+++ b/net/quic/quic_received_packet_manager_test.cc
@@ -7,6 +7,7 @@
 #include <algorithm>
 #include <vector>
 
+#include "net/quic/quic_connection_stats.h"
 #include "net/quic/test_tools/quic_received_packet_manager_peer.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -21,16 +22,23 @@
 
 class QuicReceivedPacketManagerTest : public ::testing::Test {
  protected:
-  QuicReceivedPacketManagerTest() : received_manager_(kTCP) { }
+  QuicReceivedPacketManagerTest() : received_manager_(kTCP, &stats_) { }
 
-  void RecordPacketEntropyHash(QuicPacketSequenceNumber sequence_number,
-                               QuicPacketEntropyHash entropy_hash) {
+  void RecordPacketReceipt(QuicPacketSequenceNumber sequence_number,
+                           QuicPacketEntropyHash entropy_hash) {
+    RecordPacketReceipt(sequence_number, entropy_hash, QuicTime::Zero());
+  }
+
+  void RecordPacketReceipt(QuicPacketSequenceNumber sequence_number,
+                           QuicPacketEntropyHash entropy_hash,
+                           QuicTime receipt_time) {
     QuicPacketHeader header;
     header.packet_sequence_number = sequence_number;
     header.entropy_hash = entropy_hash;
-    received_manager_.RecordPacketReceived(0u, header, QuicTime::Zero());
+    received_manager_.RecordPacketReceived(0u, header, receipt_time);
   }
 
+  QuicConnectionStats stats_;
   QuicReceivedPacketManager received_manager_;
 };
 
@@ -43,8 +51,7 @@
   entropies.push_back(make_pair(8, 34));
 
   for (size_t i = 0; i < entropies.size(); ++i) {
-    RecordPacketEntropyHash(entropies[i].first,
-                            entropies[i].second);
+    RecordPacketReceipt(entropies[i].first, entropies[i].second);
   }
 
   sort(entropies.begin(), entropies.end());
@@ -58,17 +65,21 @@
     }
     EXPECT_EQ(hash, received_manager_.EntropyHash(i));
   }
+  // Reorder by 5 when 2 is received after 7.
+  EXPECT_EQ(5u, stats_.max_sequence_reordering);
+  EXPECT_EQ(0u, stats_.max_time_reordering_us);
+  EXPECT_EQ(2u, stats_.packets_reordered);
 }
 
 TEST_F(QuicReceivedPacketManagerTest, EntropyHashBelowLeastObserved) {
   EXPECT_EQ(0, received_manager_.EntropyHash(0));
-  RecordPacketEntropyHash(4, 5);
+  RecordPacketReceipt(4, 5);
   EXPECT_EQ(0, received_manager_.EntropyHash(3));
 }
 
 TEST_F(QuicReceivedPacketManagerTest, EntropyHashAboveLargestObserved) {
   EXPECT_EQ(0, received_manager_.EntropyHash(0));
-  RecordPacketEntropyHash(4, 5);
+  RecordPacketReceipt(4, 5);
   EXPECT_EQ(0, received_manager_.EntropyHash(3));
 }
 
@@ -83,7 +94,7 @@
 
   QuicPacketEntropyHash entropy_hash = 0;
   for (size_t i = 0; i < entropies.size(); ++i) {
-    RecordPacketEntropyHash(entropies[i].first, entropies[i].second);
+    RecordPacketReceipt(entropies[i].first, entropies[i].second);
     entropy_hash ^= entropies[i].second;
   }
   EXPECT_EQ(entropy_hash, received_manager_.EntropyHash(6));
@@ -100,6 +111,11 @@
   QuicReceivedPacketManagerPeer::RecalculateEntropyHash(
       &received_manager_, 1, 50);
   EXPECT_EQ(entropy_hash, received_manager_.EntropyHash(6));
+
+  // No reordering.
+  EXPECT_EQ(0u, stats_.max_sequence_reordering);
+  EXPECT_EQ(0u, stats_.max_time_reordering_us);
+  EXPECT_EQ(0u, stats_.packets_reordered);
 }
 
 TEST_F(QuicReceivedPacketManagerTest, DontWaitForPacketsBefore) {
@@ -136,6 +152,17 @@
             info.delta_time_largest_observed);
 }
 
+TEST_F(QuicReceivedPacketManagerTest, UpdateReceivedConnectionStats) {
+  RecordPacketReceipt(1, 0);
+  RecordPacketReceipt(6, 0);
+  RecordPacketReceipt(
+      2, 0, QuicTime::Zero().Add(QuicTime::Delta::FromMilliseconds(1)));
+
+  EXPECT_EQ(4u, stats_.max_sequence_reordering);
+  EXPECT_EQ(1000u, stats_.max_time_reordering_us);
+  EXPECT_EQ(1u, stats_.packets_reordered);
+}
+
 }  // namespace
 }  // namespace test
 }  // namespace net
diff --git a/net/quic/quic_sent_entropy_manager.h b/net/quic/quic_sent_entropy_manager.h
index a101e73..c89d977 100644
--- a/net/quic/quic_sent_entropy_manager.h
+++ b/net/quic/quic_sent_entropy_manager.h
@@ -51,6 +51,8 @@
 
   // Cumulative hash of entropy of all sent packets.
   QuicPacketEntropyHash packets_entropy_hash_;
+
+  DISALLOW_COPY_AND_ASSIGN(QuicSentEntropyManager);
 };
 
 }  // namespace net
diff --git a/net/quic/quic_sent_packet_manager.cc b/net/quic/quic_sent_packet_manager.cc
index 5aaa45c..72e6512 100644
--- a/net/quic/quic_sent_packet_manager.cc
+++ b/net/quic/quic_sent_packet_manager.cc
@@ -75,16 +75,16 @@
 }
 
 void QuicSentPacketManager::SetFromConfig(const QuicConfig& config) {
-  if (config.initial_round_trip_time_us() > 0) {
-    // The initial rtt should already be set on the client side.
-    DVLOG_IF(1, !is_server_)
-        << "Client did not set an initial RTT, but did negotiate one.";
-    rtt_stats_.set_initial_rtt_us(config.initial_round_trip_time_us());
+  if (config.HasReceivedInitialRoundTripTimeUs() &&
+      config.ReceivedInitialRoundTripTimeUs() > 0) {
+    rtt_stats_.set_initial_rtt_us(min(kMaxInitialRoundTripTimeUs,
+                                      config.ReceivedInitialRoundTripTimeUs()));
   }
   if (config.congestion_control() == kPACE) {
     MaybeEnablePacing();
   }
-  if (config.loss_detection() == kTIME) {
+  if (config.HasReceivedLossDetection() &&
+      config.ReceivedLossDetection() == kTIME) {
     loss_algorithm_.reset(LossDetectionInterface::Create(kTime));
   }
   send_algorithm_->SetFromConfig(config, is_server_);
@@ -118,12 +118,12 @@
 }
 
 void QuicSentPacketManager::OnIncomingAck(
-    const ReceivedPacketInfo& received_info, QuicTime ack_receive_time) {
+    const ReceivedPacketInfo& received_info,
+    QuicTime ack_receive_time) {
   // We rely on delta_time_largest_observed to compute an RTT estimate, so
   // we only update rtt when the largest observed gets acked.
-  bool largest_observed_acked =
-      unacked_packets_.IsUnacked(received_info.largest_observed);
   largest_observed_ = received_info.largest_observed;
+  bool largest_observed_acked = unacked_packets_.IsUnacked(largest_observed_);
   MaybeUpdateRTT(received_info, ack_receive_time);
   HandleAckForSentPackets(received_info);
   MaybeRetransmitOnAckFrame(received_info, ack_receive_time);
@@ -140,13 +140,16 @@
 
 void QuicSentPacketManager::DiscardUnackedPacket(
     QuicPacketSequenceNumber sequence_number) {
-  MarkPacketHandled(sequence_number, NOT_RECEIVED_BY_PEER);
+  MarkPacketHandled(sequence_number, QuicTime::Delta::Zero(),
+                    NOT_RECEIVED_BY_PEER);
 }
 
 void QuicSentPacketManager::HandleAckForSentPackets(
     const ReceivedPacketInfo& received_info) {
   // Go through the packets we have not received an ack for and see if this
   // incoming_ack shows they've been seen by the peer.
+  QuicTime::Delta delta_largest_observed =
+      received_info.delta_time_largest_observed;
   QuicUnackedPacketMap::const_iterator it = unacked_packets_.begin();
   while (it != unacked_packets_.end()) {
     QuicPacketSequenceNumber sequence_number = it->first;
@@ -159,7 +162,8 @@
       // Remove any packets not being tracked by the send algorithm, allowing
       // the high water mark to be raised if necessary.
       if (QuicUnackedPacketMap::IsSentAndNotPending(it->second)) {
-        it = MarkPacketHandled(sequence_number, NOT_RECEIVED_BY_PEER);
+        it = MarkPacketHandled(sequence_number, delta_largest_observed,
+                               NOT_RECEIVED_BY_PEER);
       } else {
         ++it;
       }
@@ -170,20 +174,15 @@
     DVLOG(1) << ENDPOINT <<"Got an ack for packet " << sequence_number;
     // If data is associated with the most recent transmission of this
     // packet, then inform the caller.
-    it = MarkPacketHandled(sequence_number, RECEIVED_BY_PEER);
+    it = MarkPacketHandled(sequence_number, delta_largest_observed,
+                           RECEIVED_BY_PEER);
   }
 
   // Discard any retransmittable frames associated with revived packets.
   for (SequenceNumberSet::const_iterator revived_it =
            received_info.revived_packets.begin();
        revived_it != received_info.revived_packets.end(); ++revived_it) {
-    if (unacked_packets_.IsUnacked(*revived_it)) {
-      if (!unacked_packets_.IsPending(*revived_it)) {
-        unacked_packets_.RemovePacket(*revived_it);
-      } else {
-        unacked_packets_.NeuterPacket(*revived_it);
-      }
-    }
+    MarkPacketRevived(*revived_it, delta_largest_observed);
   }
 
   // If we have received a truncated ack, then we need to
@@ -210,7 +209,8 @@
     // pending retransmissions which would be cleared.
     if (frames == NULL && unacked_it->second.all_transmissions->size() == 1 &&
         retransmission_type == ALL_PACKETS) {
-      unacked_it = MarkPacketHandled(unacked_it->first, NOT_RECEIVED_BY_PEER);
+      unacked_it = MarkPacketHandled(unacked_it->first, QuicTime::Delta::Zero(),
+                                     NOT_RECEIVED_BY_PEER);
       continue;
     }
     // If it had no other transmissions, we handle it above.  If it has
@@ -278,10 +278,35 @@
                                transmission_info.sequence_number_length);
 }
 
-QuicUnackedPacketMap::const_iterator
-QuicSentPacketManager::MarkPacketHandled(
+void QuicSentPacketManager::MarkPacketRevived(
     QuicPacketSequenceNumber sequence_number,
-    ReceivedByPeer received_by_peer) {
+    QuicTime::Delta delta_largest_observed) {
+  if (!unacked_packets_.IsUnacked(sequence_number)) {
+    return;
+  }
+  // This packet has been revived at the receiver. If we were going to
+  // retransmit it, do not retransmit it anymore.
+  pending_retransmissions_.erase(sequence_number);
+
+  const QuicUnackedPacketMap::TransmissionInfo& transmission_info =
+      unacked_packets_.GetTransmissionInfo(sequence_number);
+  // The AckNotifierManager needs to be notified for revived packets,
+  // since it indicates the packet arrived from the appliction's perspective.
+  if (transmission_info.retransmittable_frames) {
+    ack_notifier_manager_.OnPacketAcked(
+        sequence_number, delta_largest_observed);
+  }
+
+  if (!transmission_info.pending) {
+    unacked_packets_.RemovePacket(sequence_number);
+  } else {
+    unacked_packets_.NeuterPacket(sequence_number);
+  }
+}
+
+QuicUnackedPacketMap::const_iterator QuicSentPacketManager::MarkPacketHandled(
+    QuicPacketSequenceNumber sequence_number,
+    QuicTime::Delta delta_largest_observed, ReceivedByPeer received_by_peer) {
   if (!unacked_packets_.IsUnacked(sequence_number)) {
     LOG(DFATAL) << "Packet is not unacked: " << sequence_number;
     return unacked_packets_.end();
@@ -306,12 +331,14 @@
       all_transmissions.rbegin();
   QuicPacketSequenceNumber newest_transmission = *all_transmissions_it;
   if (newest_transmission != sequence_number) {
+    stats_->bytes_spuriously_retransmitted += transmission_info.bytes_sent;
     ++stats_->packets_spuriously_retransmitted;
   }
 
   // The AckNotifierManager needs to be notified about the most recent
   // transmission, since that's the one only one it tracks.
-  ack_notifier_manager_.OnPacketAcked(newest_transmission);
+  ack_notifier_manager_.OnPacketAcked(newest_transmission,
+                                      delta_largest_observed);
 
   bool has_crypto_handshake = HasCryptoHandshake(
       unacked_packets_.GetTransmissionInfo(newest_transmission));
@@ -319,11 +346,9 @@
     QuicPacketSequenceNumber previous_transmission = *all_transmissions_it;
     const QuicUnackedPacketMap::TransmissionInfo& transmission_info =
         unacked_packets_.GetTransmissionInfo(previous_transmission);
-    if (ContainsKey(pending_retransmissions_, previous_transmission)) {
-      // Don't bother retransmitting this packet, if it has been
-      // marked for retransmission.
-      pending_retransmissions_.erase(previous_transmission);
-    }
+    // If this packet was marked for retransmission, don't bother retransmitting
+    // it anymore.
+    pending_retransmissions_.erase(previous_transmission);
     if (has_crypto_handshake) {
       // If it's a crypto handshake packet, discard it and all retransmissions,
       // since they won't be acked now that one has been processed.
@@ -661,7 +686,7 @@
       QuicTime rto_timeout = sent_time.Add(GetRetransmissionDelay());
       // Always wait at least 1.5 * RTT from now.
       QuicTime min_timeout = clock_->ApproximateNow().Add(
-          SmoothedRtt().Multiply(1.5));
+          rtt_stats_.SmoothedRtt().Multiply(1.5));
 
       return QuicTime::Max(min_timeout, rto_timeout);
     }
@@ -675,13 +700,13 @@
   // This is equivalent to the TailLossProbeDelay, but slightly more aggressive
   // because crypto handshake messages don't incur a delayed ack time.
   int64 delay_ms = max<int64>(kMinHandshakeTimeoutMs,
-                              1.5 * SmoothedRtt().ToMilliseconds());
+                              1.5 * rtt_stats_.SmoothedRtt().ToMilliseconds());
   return QuicTime::Delta::FromMilliseconds(
       delay_ms << consecutive_crypto_retransmission_count_);
 }
 
 const QuicTime::Delta QuicSentPacketManager::GetTailLossProbeDelay() const {
-  QuicTime::Delta srtt = SmoothedRtt();
+  QuicTime::Delta srtt = rtt_stats_.SmoothedRtt();
   if (!unacked_packets_.HasMultiplePendingPackets()) {
     return QuicTime::Delta::Max(
         srtt.Multiply(1.5).Add(DelayedAckTime()), srtt.Multiply(2));
@@ -713,8 +738,8 @@
   return retransmission_delay;
 }
 
-const QuicTime::Delta QuicSentPacketManager::SmoothedRtt() const {
-  return rtt_stats_.SmoothedRtt();
+const RttStats* QuicSentPacketManager::GetRttStats() const {
+  return &rtt_stats_;
 }
 
 QuicBandwidth QuicSentPacketManager::BandwidthEstimate() const {
diff --git a/net/quic/quic_sent_packet_manager.h b/net/quic/quic_sent_packet_manager.h
index d2fe0b8..cd0cbed 100644
--- a/net/quic/quic_sent_packet_manager.h
+++ b/net/quic/quic_sent_packet_manager.h
@@ -146,8 +146,7 @@
   // there are no retransmittable packets.
   const QuicTime GetRetransmissionTime() const;
 
-  // Returns the estimated smoothed RTT calculated by the congestion algorithm.
-  const QuicTime::Delta SmoothedRtt() const;
+  const RttStats* GetRttStats() const;
 
   // Returns the estimated bandwidth calculated by the congestion algorithm.
   QuicBandwidth BandwidthEstimate() const;
@@ -230,11 +229,18 @@
   // necessary.
   void InvokeLossDetection(QuicTime time);
 
+  // Marks |sequence_number| as having been revived by the peer, but not
+  // received, so the packet remains pending if it is and the congestion control
+  // does not consider the packet acked.
+  void MarkPacketRevived(QuicPacketSequenceNumber sequence_number,
+                         QuicTime::Delta delta_largest_observed);
+
   // Marks |sequence_number| as being fully handled, either due to receipt
   // by the peer, or having been discarded as indecipherable.  Returns an
   // iterator to the next remaining unacked packet.
   QuicUnackedPacketMap::const_iterator MarkPacketHandled(
       QuicPacketSequenceNumber sequence_number,
+      QuicTime::Delta delta_largest_observed,
       ReceivedByPeer received_by_peer);
 
   // Request that |sequence_number| be retransmitted after the other pending
diff --git a/net/quic/quic_sent_packet_manager_test.cc b/net/quic/quic_sent_packet_manager_test.cc
index b186cc0..cd9dce7 100644
--- a/net/quic/quic_sent_packet_manager_test.cc
+++ b/net/quic/quic_sent_packet_manager_test.cc
@@ -5,6 +5,7 @@
 #include "net/quic/quic_sent_packet_manager.h"
 
 #include "base/stl_util.h"
+#include "net/quic/test_tools/quic_config_peer.h"
 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h"
 #include "net/quic/test_tools/quic_test_utils.h"
 #include "testing/gmock/include/gmock/gmock.h"
@@ -455,6 +456,41 @@
   VerifyRetransmittablePackets(NULL, 0);
 }
 
+TEST_F(QuicSentPacketManagerTest, MarkLostThenReviveAndDontRetransmitPacket) {
+  SendDataPacket(1);
+  SendDataPacket(2);
+  SendDataPacket(3);
+  SendDataPacket(4);
+  SendFecPacket(5);
+
+  // Ack 2, 3, and 4, and expect the 1st to be considered lost.
+  ReceivedPacketInfo received_info;
+  received_info.largest_observed = 4;
+  received_info.missing_packets.insert(1);
+  EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
+  EXPECT_CALL(*send_algorithm_, OnPacketAcked(_, _)).Times(3);
+  EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _));
+  EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _));
+  manager_.OnIncomingAck(received_info, clock_.ApproximateNow());
+
+  EXPECT_TRUE(manager_.HasPendingRetransmissions());
+  QuicPacketSequenceNumber unacked[] = { 1, 5 };
+  VerifyUnackedPackets(unacked, arraysize(unacked));
+  QuicPacketSequenceNumber retransmittable[] = { 1 };
+  VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable));
+
+  // Ack 5th packet (FEC) and revive 1st packet. 1st packet should now be
+  // removed from pending retransmissions map.
+  received_info.largest_observed = 5;
+  received_info.revived_packets.insert(1);
+  EXPECT_CALL(*send_algorithm_, UpdateRtt(_));
+  EXPECT_CALL(*send_algorithm_, OnPacketAcked(5, _));
+  manager_.OnIncomingAck(received_info, clock_.ApproximateNow());
+
+  EXPECT_FALSE(manager_.HasPendingRetransmissions());
+  VerifyRetransmittablePackets(NULL, 0);
+}
+
 TEST_F(QuicSentPacketManagerTest, TruncatedAck) {
   SendDataPacket(1);
   RetransmitAndSendPacket(1, 2);
@@ -1052,7 +1088,7 @@
   QuicSentPacketManagerPeer::GetRttStats(&manager_)->set_initial_rtt_us(
       100 * base::Time::kMicrosecondsPerMillisecond);
 
-  QuicTime::Delta srtt = manager_.SmoothedRtt();
+  QuicTime::Delta srtt = manager_.GetRttStats()->SmoothedRtt();
   QuicTime expected_time = clock_.Now().Add(srtt.Multiply(1.5));
   EXPECT_EQ(expected_time, manager_.GetRetransmissionTime());
 
@@ -1081,7 +1117,7 @@
   // Test with a standard smoothed RTT.
   QuicSentPacketManagerPeer::GetRttStats(&manager_)->set_initial_rtt_us(
       100 * base::Time::kMicrosecondsPerMillisecond);
-  QuicTime::Delta srtt = manager_.SmoothedRtt();
+  QuicTime::Delta srtt = manager_.GetRttStats()->SmoothedRtt();
   QuicTime::Delta expected_tlp_delay = srtt.Multiply(2);
   QuicTime expected_time = clock_.Now().Add(expected_tlp_delay);
   EXPECT_EQ(expected_time, manager_.GetRetransmissionTime());
@@ -1208,10 +1244,12 @@
 }
 
 TEST_F(QuicSentPacketManagerTest, NegotiateTimeLossDetection) {
+  EXPECT_EQ(kNack,
+            QuicSentPacketManagerPeer::GetLossAlgorithm(
+                &manager_)->GetLossDetectionType());
+
   QuicConfig config;
-  QuicTagVector loss_detection;
-  loss_detection.push_back(kTIME);
-  config.set_loss_detection(loss_detection, kTIME);
+  QuicConfigPeer::SetReceivedLossDetection(&config, kTIME);
   EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _));
   manager_.SetFromConfig(config);
 
diff --git a/net/quic/quic_server_id.cc b/net/quic/quic_server_id.cc
index 152fbe1..ff87099 100644
--- a/net/quic/quic_server_id.cc
+++ b/net/quic/quic_server_id.cc
@@ -19,6 +19,13 @@
 
 QuicServerId::QuicServerId(const string& host,
                            uint16 port,
+                           bool is_https)
+    : host_port_pair_(host, port),
+      is_https_(is_https),
+      privacy_mode_(PRIVACY_MODE_DISABLED) {}
+
+QuicServerId::QuicServerId(const string& host,
+                           uint16 port,
                            bool is_https,
                            PrivacyMode privacy_mode)
     : host_port_pair_(host, port),
diff --git a/net/quic/quic_server_id.h b/net/quic/quic_server_id.h
index 1973ccc..6d01670 100644
--- a/net/quic/quic_server_id.h
+++ b/net/quic/quic_server_id.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef NET_QUIC_QUIC_SESSION_KEY_H_
-#define NET_QUIC_QUIC_SESSION_KEY_H_
+#ifndef NET_QUIC_QUIC_SERVER_ID_H_
+#define NET_QUIC_QUIC_SERVER_ID_H_
 
 #include <string>
 
@@ -23,6 +23,9 @@
                PrivacyMode privacy_mode);
   QuicServerId(const std::string& host,
                uint16 port,
+               bool is_https);
+  QuicServerId(const std::string& host,
+               uint16 port,
                bool is_https,
                PrivacyMode privacy_mode);
   ~QuicServerId();
@@ -54,4 +57,4 @@
 
 }  // namespace net
 
-#endif  // NET_QUIC_QUIC_SESSION_KEY_H_
+#endif  // NET_QUIC_QUIC_SERVER_ID_H_
diff --git a/net/quic/quic_session.cc b/net/quic/quic_session.cc
index 900c705..a10511b 100644
--- a/net/quic/quic_session.cc
+++ b/net/quic/quic_session.cc
@@ -86,6 +86,10 @@
     return session_->HasPendingHandshake();
   }
 
+  virtual bool HasOpenDataStreams() const OVERRIDE {
+    return session_->HasOpenDataStreams();
+  }
+
  private:
   QuicSession* session_;
 };
@@ -264,7 +268,12 @@
   // streams become pending, HasPendingWrites will be true, which will cause
   // the connection to request resumption before yielding to other connections.
   size_t num_writes = write_blocked_streams_.NumBlockedStreams();
+  if (num_writes == 0) {
+    return;
+  }
 
+  QuicConnection::ScopedPacketBundler ack_bundler(
+      connection_.get(), QuicConnection::NO_ACK);
   for (size_t i = 0; i < num_writes; ++i) {
     if (!write_blocked_streams_.HasWriteBlockedStreams()) {
       // Writing one stream removed another?! Something's broken.
@@ -280,7 +289,7 @@
       has_pending_handshake_ = false;  // We just popped it.
     }
     ReliableQuicStream* stream = GetStream(stream_id);
-    if (stream != NULL && !stream->IsFlowControlBlocked()) {
+    if (stream != NULL && !stream->flow_controller()->IsBlocked()) {
       // If the stream can't write all bytes, it'll re-add itself to the blocked
       // list.
       stream->OnCanWrite();
@@ -296,6 +305,10 @@
   return has_pending_handshake_;
 }
 
+bool QuicSession::HasOpenDataStreams() const {
+  return GetNumOpenStreams() > 0;
+}
+
 QuicConsumedData QuicSession::WritevData(
     QuicStreamId id,
     const IOVector& data,
@@ -318,8 +331,7 @@
                                 QuicRstStreamErrorCode error,
                                 QuicStreamOffset bytes_written) {
   if (connection()->connected()) {
-    // Don't bother sending a RST_STREAM frame if the connection is already
-    // closed.
+    // Only send a RST_STREAM frame if still connected.
     connection_->SendRstStream(id, error, bytes_written);
   }
   CloseStreamInner(id, true);
@@ -369,13 +381,14 @@
 void QuicSession::OnConfigNegotiated() {
   connection_->SetFromConfig(config_);
   // Tell all streams about the newly received peer receive window.
-  if (connection()->version() >= QUIC_VERSION_17) {
+  if (connection()->version() >= QUIC_VERSION_17 &&
+      config_.HasReceivedInitialFlowControlWindowBytes()) {
     // Streams which were created before the SHLO was received (0RTT requests)
     // are now informed of the peer's initial flow control window.
     uint32 new_flow_control_send_window =
-        config_.peer_initial_flow_control_window_bytes();
+        config_.ReceivedInitialFlowControlWindowBytes();
     if (new_flow_control_send_window < kDefaultFlowControlSendWindow) {
-      LOG(DFATAL)
+      LOG(ERROR)
           << "Peer sent us an invalid flow control send window: "
           << new_flow_control_send_window
           << ", below default: " << kDefaultFlowControlSendWindow;
@@ -384,7 +397,8 @@
     }
     DataStreamMap::iterator it = stream_map_.begin();
     while (it != stream_map_.end()) {
-      it->second->UpdateFlowControlSendLimit(new_flow_control_send_window);
+      it->second->flow_controller()->UpdateSendWindowOffset(
+          new_flow_control_send_window);
       it++;
     }
   }
@@ -553,10 +567,12 @@
 #ifndef NDEBUG
   ReliableQuicStream* stream = GetStream(id);
   if (stream != NULL) {
-    if (stream->IsFlowControlBlocked()) {
-      LOG(DFATAL) << "Stream " << id << " is flow control blocked.";
+    if (stream->flow_controller()->IsBlocked()) {
+      LOG(DFATAL) << ENDPOINT << "Stream " << id
+                  << " is flow control blocked and write blocked!";
     }
     LOG_IF(DFATAL, priority != stream->EffectivePriority())
+        << ENDPOINT << "Stream " << id
         << "Priorities do not match.  Got: " << priority
         << " Expected: " << stream->EffectivePriority();
   } else {
diff --git a/net/quic/quic_session.h b/net/quic/quic_session.h
index 76fb274..ca2189a 100644
--- a/net/quic/quic_session.h
+++ b/net/quic/quic_session.h
@@ -73,6 +73,7 @@
   virtual void OnCanWrite() OVERRIDE;
   virtual bool HasPendingWrites() const OVERRIDE;
   virtual bool HasPendingHandshake() const OVERRIDE;
+  virtual bool HasOpenDataStreams() const OVERRIDE;
 
   // Called by the headers stream when headers have been received for a stream.
   virtual void OnStreamHeaders(QuicStreamId stream_id,
@@ -175,7 +176,8 @@
   QuicPacketCreator::Options* options() { return connection()->options(); }
 
   // Returns the number of currently open streams, including those which have
-  // been implicitly created.
+  // been implicitly created, but excluding the reserved headers and crypto
+  // streams.
   virtual size_t GetNumOpenStreams() const;
 
   void MarkWriteBlocked(QuicStreamId id, QuicPriority priority);
diff --git a/net/quic/quic_session_test.cc b/net/quic/quic_session_test.cc
index 8780afb..ee7dc4d 100644
--- a/net/quic/quic_session_test.cc
+++ b/net/quic/quic_session_test.cc
@@ -53,11 +53,11 @@
     handshake_confirmed_ = true;
     CryptoHandshakeMessage msg;
     string error_details;
-    session()->config()->set_peer_initial_flow_control_window_bytes(
+    session()->config()->SetInitialFlowControlWindowToSend(
         kInitialFlowControlWindowForTest);
     session()->config()->ToHandshakeMessage(&msg);
-    const QuicErrorCode error = session()->config()->ProcessClientHello(
-        msg, &error_details);
+    const QuicErrorCode error = session()->config()->ProcessPeerHello(
+        msg, CLIENT, &error_details);
     EXPECT_EQ(QUIC_NO_ERROR, error);
     session()->OnConfigNegotiated();
     session()->OnCryptoHandshakeEvent(QuicSession::HANDSHAKE_CONFIRMED);
@@ -151,6 +151,10 @@
     writev_consumes_all_data_ = val;
   }
 
+  QuicConsumedData SendStreamData() {
+    return WritevData(5, IOVector(), 0, true, NULL);
+  }
+
  private:
   TestCryptoStream crypto_stream_;
 
@@ -348,6 +352,40 @@
   EXPECT_TRUE(session_.HasPendingWrites());
 }
 
+TEST_P(QuicSessionTest, OnCanWriteBundlesStreams) {
+  // Drive congestion control manually.
+  MockSendAlgorithm* send_algorithm = new StrictMock<MockSendAlgorithm>;
+  QuicConnectionPeer::SetSendAlgorithm(session_.connection(), send_algorithm);
+
+  TestStream* stream2 = session_.CreateOutgoingDataStream();
+  TestStream* stream4 = session_.CreateOutgoingDataStream();
+  TestStream* stream6 = session_.CreateOutgoingDataStream();
+
+  session_.MarkWriteBlocked(stream2->id(), kSomeMiddlePriority);
+  session_.MarkWriteBlocked(stream6->id(), kSomeMiddlePriority);
+  session_.MarkWriteBlocked(stream4->id(), kSomeMiddlePriority);
+
+
+  EXPECT_CALL(*send_algorithm, TimeUntilSend(_, _)).WillRepeatedly(
+      Return(QuicTime::Delta::Zero()));
+  EXPECT_CALL(*send_algorithm, GetCongestionWindow()).WillOnce(
+      Return(kMaxPacketSize * 10));
+  EXPECT_CALL(*stream2, OnCanWrite()).WillOnce(IgnoreResult(
+      InvokeWithoutArgs(&session_, &TestSession::SendStreamData)));
+  EXPECT_CALL(*stream6, OnCanWrite()).WillOnce(IgnoreResult(
+      InvokeWithoutArgs(&session_, &TestSession::SendStreamData)));
+  EXPECT_CALL(*stream4, OnCanWrite()).WillOnce(IgnoreResult(
+      InvokeWithoutArgs(&session_, &TestSession::SendStreamData)));
+  MockPacketWriter* writer =
+      static_cast<MockPacketWriter*>(
+          QuicConnectionPeer::GetWriter(session_.connection()));
+  EXPECT_CALL(*writer, WritePacket(_, _, _, _)).WillOnce(
+                  Return(WriteResult(WRITE_STATUS_OK, 0)));
+  EXPECT_CALL(*send_algorithm, OnPacketSent(_, _, _, _));
+  session_.OnCanWrite();
+  EXPECT_FALSE(session_.HasPendingWrites());
+}
+
 TEST_P(QuicSessionTest, OnCanWriteCongestionControlBlocks) {
   InSequence s;
 
@@ -542,9 +580,9 @@
   // Create a stream, and send enough data to make it flow control blocked.
   TestStream* stream2 = session_.CreateOutgoingDataStream();
   string body(kDefaultFlowControlSendWindow, '.');
-  EXPECT_FALSE(stream2->IsFlowControlBlocked());
+  EXPECT_FALSE(stream2->flow_controller()->IsBlocked());
   stream2->SendBody(body, false);
-  EXPECT_TRUE(stream2->IsFlowControlBlocked());
+  EXPECT_TRUE(stream2->flow_controller()->IsBlocked());
 
   // Now complete the crypto handshake, resulting in an increased flow control
   // send window.
@@ -552,7 +590,7 @@
   session_.GetCryptoStream()->OnHandshakeMessage(msg);
 
   // Stream is now unblocked.
-  EXPECT_FALSE(stream2->IsFlowControlBlocked());
+  EXPECT_FALSE(stream2->flow_controller()->IsBlocked());
 }
 
 TEST_P(QuicSessionTest, InvalidFlowControlWindowInHandshake) {
@@ -567,17 +605,14 @@
 
   CryptoHandshakeMessage msg;
   string error_details;
-  session_.config()->set_peer_initial_flow_control_window_bytes(kInvalidWindow);
+  session_.config()->SetInitialFlowControlWindowToSend(kInvalidWindow);
   session_.config()->ToHandshakeMessage(&msg);
   const QuicErrorCode error =
-      session_.config()->ProcessClientHello(msg, &error_details);
+      session_.config()->ProcessPeerHello(msg, CLIENT, &error_details);
   EXPECT_EQ(QUIC_NO_ERROR, error);
 
   EXPECT_CALL(*connection_, SendConnectionClose(QUIC_FLOW_CONTROL_ERROR));
-  string expected_error("Peer sent us an invalid flow control send window: ");
-  expected_error.append(reinterpret_cast<const char*>(&kInvalidWindow),
-                        sizeof(kInvalidWindow));
-  EXPECT_DFATAL(session_.OnConfigNegotiated(), expected_error);
+  session_.OnConfigNegotiated();
 }
 
 }  // namespace
diff --git a/net/quic/quic_socket_address_coder.h b/net/quic/quic_socket_address_coder.h
index 071508c..36ad1d0 100644
--- a/net/quic/quic_socket_address_coder.h
+++ b/net/quic/quic_socket_address_coder.h
@@ -36,6 +36,7 @@
 
  private:
   IPEndPoint address_;
+
   DISALLOW_COPY_AND_ASSIGN(QuicSocketAddressCoder);
 };
 
diff --git a/net/quic/quic_stream_factory.cc b/net/quic/quic_stream_factory.cc
index 3e37654..32828b8 100644
--- a/net/quic/quic_stream_factory.cc
+++ b/net/quic/quic_stream_factory.cc
@@ -103,6 +103,7 @@
       HostResolver* host_resolver,
       const HostPortPair& host_port_pair,
       bool is_https,
+      bool was_alternate_protocol_recently_broken,
       PrivacyMode privacy_mode,
       base::StringPiece method,
       QuicServerInfo* server_info,
@@ -146,6 +147,7 @@
   SingleRequestHostResolver host_resolver_;
   QuicServerId server_id_;
   bool is_post_;
+  bool was_alternate_protocol_recently_broken_;
   scoped_ptr<QuicServerInfo> server_info_;
   const BoundNetLog net_log_;
   QuicClientSession* session_;
@@ -160,6 +162,7 @@
                             HostResolver* host_resolver,
                             const HostPortPair& host_port_pair,
                             bool is_https,
+                            bool was_alternate_protocol_recently_broken,
                             PrivacyMode privacy_mode,
                             base::StringPiece method,
                             QuicServerInfo* server_info,
@@ -168,6 +171,8 @@
       host_resolver_(host_resolver),
       server_id_(host_port_pair, is_https, privacy_mode),
       is_post_(method == "POST"),
+      was_alternate_protocol_recently_broken_(
+          was_alternate_protocol_recently_broken),
       server_info_(server_info),
       net_log_(net_log),
       session_(NULL),
@@ -300,8 +305,11 @@
   if (!session_->connection()->connected()) {
     return ERR_QUIC_PROTOCOL_ERROR;
   }
+  bool require_confirmation =
+      factory_->require_confirmation() || server_id_.is_https() || is_post_ ||
+      was_alternate_protocol_recently_broken_;
   rv = session_->CryptoConnect(
-      factory_->require_confirmation() || server_id_.is_https() || is_post_,
+      require_confirmation,
       base::Bind(&QuicStreamFactory::Job::OnIOComplete,
                  base::Unretained(this)));
   return rv;
@@ -451,7 +459,12 @@
       quic_server_info = quic_server_info_factory_->GetForServer(server_id);
     }
   }
+  bool was_alternate_protocol_recently_broken =
+      http_server_properties_ &&
+      http_server_properties_->WasAlternateProtocolRecentlyBroken(
+          server_id.host_port_pair());
   scoped_ptr<Job> job(new Job(this, host_resolver_, host_port_pair, is_https,
+                              was_alternate_protocol_recently_broken,
                               privacy_mode, method, quic_server_info, net_log));
   int rv = job->Run(base::Bind(&QuicStreamFactory::OnJobComplete,
                                base::Unretained(this), job.get()));
@@ -570,7 +583,7 @@
     }
 
     HttpServerProperties::NetworkStats network_stats;
-    network_stats.rtt = base::TimeDelta::FromMicroseconds(stats.rtt);
+    network_stats.srtt = base::TimeDelta::FromMicroseconds(stats.srtt_us);
     network_stats.bandwidth_estimate = stats.estimated_bandwidth;
     http_server_properties_->SetServerNetworkStats(it->host_port_pair(),
                                                    network_stats);
@@ -635,6 +648,10 @@
   return list;
 }
 
+void QuicStreamFactory::ClearCachedStates() {
+  crypto_config_.ClearCachedStates();
+}
+
 void QuicStreamFactory::OnIPAddressChanged() {
   CloseAllSessions(ERR_NETWORK_CHANGED);
   require_confirmation_ = true;
@@ -745,8 +762,7 @@
         http_server_properties_->GetServerNetworkStats(
             server_id.host_port_pair());
     if (stats != NULL) {
-      config.set_initial_round_trip_time_us(stats->rtt.InMicroseconds(),
-                                            stats->rtt.InMicroseconds());
+      config.SetInitialRoundTripTimeUsToSend(stats->srtt.InMicroseconds());
     }
   }
 
diff --git a/net/quic/quic_stream_factory.h b/net/quic/quic_stream_factory.h
index 490e2f9..f55cfbd 100644
--- a/net/quic/quic_stream_factory.h
+++ b/net/quic/quic_stream_factory.h
@@ -132,6 +132,9 @@
 
   base::Value* QuicStreamFactoryInfoToValue() const;
 
+  // Delete all cached state objects in |crypto_config_|.
+  void ClearCachedStates();
+
   // NetworkChangeNotifier::IPAddressObserver methods:
 
   // Until the servers support roaming, close all connections when the local
diff --git a/net/quic/quic_stream_factory_test.cc b/net/quic/quic_stream_factory_test.cc
index b5c2817..3b8c8b2 100644
--- a/net/quic/quic_stream_factory_test.cc
+++ b/net/quic/quic_stream_factory_test.cc
@@ -170,7 +170,9 @@
 
   scoped_ptr<QuicEncryptedPacket> ConstructRstPacket() {
     QuicStreamId stream_id = 5;
-    return maker_.MakeRstPacket(1, true, stream_id, QUIC_STREAM_NO_ERROR);
+    return maker_.MakeRstPacket(
+        1, true, stream_id,
+        AdjustErrorForVersion(QUIC_RST_FLOW_CONTROL_ACCOUNTING, GetParam()));
   }
 
   MockHostResolver host_resolver_;
diff --git a/net/quic/quic_stream_sequencer.cc b/net/quic/quic_stream_sequencer.cc
index 055ed97..a9b2e97 100644
--- a/net/quic/quic_stream_sequencer.cc
+++ b/net/quic/quic_stream_sequencer.cc
@@ -119,6 +119,7 @@
           data.iovec()[i].iov_len);
     }
     num_bytes_consumed_ += bytes_consumed;
+    stream_->flow_controller()->AddBytesConsumed(bytes_consumed);
     stream_->MaybeSendWindowUpdate();
 
     if (MaybeCloseStream()) {
@@ -146,6 +147,7 @@
         byte_offset, string(static_cast<char*>(iov.iov_base), iov.iov_len)));
     byte_offset += iov.iov_len;
     num_bytes_buffered_ += iov.iov_len;
+    stream_->flow_controller()->AddBytesBuffered(iov.iov_len);
   }
   return true;
 }
@@ -297,6 +299,8 @@
   num_bytes_consumed_ += bytes_consumed;
   num_bytes_buffered_ -= bytes_consumed;
 
+  stream_->flow_controller()->AddBytesConsumed(bytes_consumed);
+  stream_->flow_controller()->RemoveBytesBuffered(bytes_consumed);
   stream_->MaybeSendWindowUpdate();
 }
 
diff --git a/net/quic/quic_stream_sequencer.h b/net/quic/quic_stream_sequencer.h
index 7677ad0..8a6e0dd 100644
--- a/net/quic/quic_stream_sequencer.h
+++ b/net/quic/quic_stream_sequencer.h
@@ -125,6 +125,8 @@
 
   // Count of the number of duplicate frames received.
   int num_duplicate_frames_received_;
+
+  DISALLOW_COPY_AND_ASSIGN(QuicStreamSequencer);
 };
 
 }  // namespace net
diff --git a/net/quic/quic_utils.cc b/net/quic/quic_utils.cc
index 73e19f1..ca1d916 100644
--- a/net/quic/quic_utils.cc
+++ b/net/quic/quic_utils.cc
@@ -138,6 +138,7 @@
     RETURN_STRING_LITERAL(QUIC_BAD_APPLICATION_PAYLOAD);
     RETURN_STRING_LITERAL(QUIC_STREAM_PEER_GOING_AWAY);
     RETURN_STRING_LITERAL(QUIC_STREAM_CANCELLED);
+    RETURN_STRING_LITERAL(QUIC_RST_FLOW_CONTROL_ACCOUNTING);
     RETURN_STRING_LITERAL(QUIC_STREAM_LAST_ERROR);
   }
   // Return a default value so that we return this when |error| doesn't match
diff --git a/net/quic/quic_utils.h b/net/quic/quic_utils.h
index 39a9a5c..43f8d35 100644
--- a/net/quic/quic_utils.h
+++ b/net/quic/quic_utils.h
@@ -82,6 +82,9 @@
   static QuicPriority LowestPriority();
 
   static QuicPriority HighestPriority();
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(QuicUtils);
 };
 
 // Utility function that returns an IOVector object wrapped around |str|.
diff --git a/net/quic/reliable_quic_stream.cc b/net/quic/reliable_quic_stream.cc
index 36e8784..ad4d3f1 100644
--- a/net/quic/reliable_quic_stream.cc
+++ b/net/quic/reliable_quic_stream.cc
@@ -6,6 +6,7 @@
 
 #include "base/logging.h"
 #include "net/quic/iovector.h"
+#include "net/quic/quic_flow_controller.h"
 #include "net/quic/quic_session.h"
 #include "net/quic/quic_write_blocked_list.h"
 
@@ -50,7 +51,9 @@
   virtual void OnAckNotification(int num_original_packets,
                                  int num_original_bytes,
                                  int num_retransmitted_packets,
-                                 int num_retransmitted_bytes) OVERRIDE {
+                                 int num_retransmitted_bytes,
+                                 QuicTime::Delta delta_largest_observed)
+      OVERRIDE {
     DCHECK_LT(0, pending_acks_);
     --pending_acks_;
     num_original_packets_ += num_original_packets;
@@ -62,7 +65,8 @@
       delegate_->OnAckNotification(num_original_packets_,
                                    num_original_bytes_,
                                    num_retransmitted_packets_,
-                                   num_retransmitted_bytes_);
+                                   num_retransmitted_bytes_,
+                                   delta_largest_observed);
     }
   }
 
@@ -113,22 +117,23 @@
       stream_bytes_written_(0),
       stream_error_(QUIC_STREAM_NO_ERROR),
       connection_error_(QUIC_NO_ERROR),
-      flow_control_send_limit_(
-          session_->config()->peer_initial_flow_control_window_bytes()),
-      max_flow_control_receive_window_bytes_(
-          session_->connection()->max_flow_control_receive_window_bytes()),
-      flow_control_receive_window_offset_bytes_(
-          session_->connection()->max_flow_control_receive_window_bytes()),
       read_side_closed_(false),
       write_side_closed_(false),
       fin_buffered_(false),
       fin_sent_(false),
       rst_sent_(false),
-      is_server_(session_->is_server()) {
-  DVLOG(1) << ENDPOINT << "Created stream " << id_
-           << ", setting initial receive window to: "
-           << flow_control_receive_window_offset_bytes_
-           << ", setting send window to: " << flow_control_send_limit_;
+      is_server_(session_->is_server()),
+      flow_controller_(
+          id_,
+          is_server_,
+          session_->config()->HasReceivedInitialFlowControlWindowBytes() ?
+              session_->config()->ReceivedInitialFlowControlWindowBytes() :
+              kDefaultFlowControlSendWindow,
+          session_->connection()->max_flow_control_receive_window_bytes(),
+          session_->connection()->max_flow_control_receive_window_bytes()) {
+  if (session_->connection()->version() < QUIC_VERSION_17) {
+    flow_controller_.Disable();
+  }
 }
 
 ReliableQuicStream::~ReliableQuicStream() {
@@ -159,17 +164,8 @@
 
   bool accepted = sequencer_.OnStreamFrame(frame);
 
-  if (IsFlowControlEnabled()) {
-    if (flow_control_receive_window_offset_bytes_ < TotalReceivedBytes()) {
-      // TODO(rjshade): Lower severity from DFATAL once we have established that
-      //                flow control is working correctly.
-      LOG(DFATAL)
-          << ENDPOINT << "Flow control violation on stream: " << id()
-          << ", our receive offset is: "
-          << flow_control_receive_window_offset_bytes_
-          << ", we have consumed: " << sequencer_.num_bytes_consumed()
-          << ", we have buffered: " << sequencer_.num_bytes_buffered()
-          << ", total: " << TotalReceivedBytes();
+  if (version() >= QUIC_VERSION_17) {
+    if (flow_controller_.FlowControlViolation()) {
       session_->connection()->SendConnectionClose(QUIC_FLOW_CONTROL_ERROR);
       return false;
     }
@@ -180,33 +176,8 @@
 }
 
 void ReliableQuicStream::MaybeSendWindowUpdate() {
-  if (!IsFlowControlEnabled()) {
-    return;
-  }
-
-  // Send WindowUpdate to increase receive window if
-  // (receive window offset - consumed bytes) < (max window / 2).
-  // This is behaviour copied from SPDY.
-  size_t consumed_window = flow_control_receive_window_offset_bytes_ -
-                           sequencer_.num_bytes_consumed();
-  size_t threshold = (max_flow_control_receive_window_bytes_ / 2);
-  if (consumed_window < threshold) {
-    // Update our receive window.
-    flow_control_receive_window_offset_bytes_ +=
-        (max_flow_control_receive_window_bytes_ - consumed_window);
-    DVLOG(1) << ENDPOINT << "Stream: " << id()
-             << ", sending WindowUpdate frame. "
-             << "Consumed bytes: " << sequencer_.num_bytes_consumed()
-             << ", Receive window offset: "
-             << flow_control_receive_window_offset_bytes_
-             << ", Consumed window: " << consumed_window
-             << ", and threshold: " << threshold
-             << ". New receive window offset is: "
-             << flow_control_receive_window_offset_bytes_;
-
-    // Inform the peer of our new receive window.
-    session()->connection()->SendWindowUpdate(
-        id(), flow_control_receive_window_offset_bytes_);
+  if (version() >= QUIC_VERSION_17) {
+    flow_controller_.MaybeSendWindowUpdate(session()->connection());
   }
 }
 
@@ -351,15 +322,15 @@
   size_t write_length = TotalIovecLength(iov, iov_count);
 
   // How much data we are allowed to write from flow control.
-  size_t send_window = SendWindowSize();
+  size_t send_window = flow_controller_.SendWindowSize();
 
   // A FIN with zero data payload should not be flow control blocked.
   bool fin_with_zero_data = (fin && write_length == 0);
 
-  if (IsFlowControlEnabled()) {
+  if (version() >= QUIC_VERSION_17 && flow_controller_.IsEnabled()) {
     if (send_window == 0 && !fin_with_zero_data) {
       // Quick return if we can't send anything.
-      session()->connection()->SendBlocked(id());
+      flow_controller_.MaybeSendBlocked(session()->connection());
       return QuicConsumedData(0, false);
     }
 
@@ -380,18 +351,15 @@
       id(), data, stream_bytes_written_, fin, ack_notifier_delegate);
   stream_bytes_written_ += consumed_data.bytes_consumed;
 
+  if (version() >= QUIC_VERSION_17 && flow_controller_.IsEnabled()) {
+    flow_controller_.AddBytesSent(consumed_data.bytes_consumed);
+  }
+
   if (consumed_data.bytes_consumed == write_length) {
-    if (IsFlowControlEnabled() && write_length == send_window &&
-        !fin_with_zero_data) {
-      DVLOG(1) << ENDPOINT << "Stream " << id()
-               << " is flow control blocked. "
-               << "Send window: " << send_window
-               << ", stream_bytes_written: " << stream_bytes_written_
-               << ", flow_control_send_limit: "
-               << flow_control_send_limit_;
-      // The entire send_window has been consumed, we are now flow control
-      // blocked.
-      session()->connection()->SendBlocked(id());
+    if (!fin_with_zero_data) {
+      if (version() >= QUIC_VERSION_17) {
+        flow_controller_.MaybeSendBlocked(session()->connection());
+      }
     }
     if (fin && consumed_data.fin_consumed) {
       fin_sent_ = true;
@@ -445,57 +413,26 @@
     // written on this stream before termination. Done here if needed, using a
     // RST frame.
     DVLOG(1) << ENDPOINT << "Sending RST in OnClose: " << id();
-    session_->SendRstStream(id(), QUIC_STREAM_NO_ERROR, stream_bytes_written_);
+    session_->SendRstStream(id(), QUIC_RST_FLOW_CONTROL_ACCOUNTING,
+                            stream_bytes_written_);
     rst_sent_ = true;
   }
 }
 
 void ReliableQuicStream::OnWindowUpdateFrame(
     const QuicWindowUpdateFrame& frame) {
-  if (!IsFlowControlEnabled()) {
+  if (!flow_controller_.IsEnabled()) {
     DLOG(DFATAL) << "Flow control not enabled! " << version();
     return;
   }
 
-  DVLOG(1) << ENDPOINT
-           << "OnWindowUpdateFrame for stream " << id()
-           << " with byte offset " << frame.byte_offset
-           << " , current offset: " << flow_control_send_limit_ << ").";
-
-  UpdateFlowControlSendLimit(frame.byte_offset);
-}
-
-void ReliableQuicStream::UpdateFlowControlSendLimit(QuicStreamOffset offset) {
-  if (offset <= flow_control_send_limit_) {
-    DVLOG(1) << ENDPOINT << "Stream " << id()
-             << ", not changing window, current: " << flow_control_send_limit_
-             << " new: " << offset;
-    // No change to our send window.
-    return;
+  if (flow_controller_.UpdateSendWindowOffset(frame.byte_offset)) {
+    // We can write again!
+    // TODO(rjshade): This does not respect priorities (e.g. multiple
+    //                outstanding POSTs are unblocked on arrival of
+    //                SHLO with initial window).
+    OnCanWrite();
   }
-
-  DVLOG(1) << ENDPOINT << "Stream " << id()
-           << ", changing window, current: " << flow_control_send_limit_
-           << " new: " << offset;
-  // Send window has increased.
-  flow_control_send_limit_ = offset;
-
-  // We can write again!
-  // TODO(rjshade): This does not respect priorities (e.g. multiple outstanding
-  //                POSTs are unblocked on arrival of SHLO with initial window).
-  OnCanWrite();
-}
-
-bool ReliableQuicStream::IsFlowControlBlocked() const {
-  return IsFlowControlEnabled() && SendWindowSize() == 0;
-}
-
-uint64 ReliableQuicStream::SendWindowSize() const {
-  return flow_control_send_limit_ - stream_bytes_written();
-}
-
-uint64 ReliableQuicStream::TotalReceivedBytes() const {
-  return sequencer_.num_bytes_consumed() + sequencer_.num_bytes_buffered();
 }
 
 }  // namespace net
diff --git a/net/quic/reliable_quic_stream.h b/net/quic/reliable_quic_stream.h
index f1eeb8f..4ed1a1f 100644
--- a/net/quic/reliable_quic_stream.h
+++ b/net/quic/reliable_quic_stream.h
@@ -17,6 +17,7 @@
 #include "net/base/iovec.h"
 #include "net/base/net_export.h"
 #include "net/quic/quic_ack_notifier.h"
+#include "net/quic/quic_flow_controller.h"
 #include "net/quic/quic_protocol.h"
 #include "net/quic/quic_stream_sequencer.h"
 
@@ -93,9 +94,6 @@
   // Adjust our flow control windows according to new offset in |frame|.
   virtual void OnWindowUpdateFrame(const QuicWindowUpdateFrame& frame);
 
-  // True if this stream is blocked from writing due to flow control limits.
-  bool IsFlowControlBlocked() const;
-
   // Updates our send window offset (if offset larger).
   void UpdateFlowControlSendLimit(QuicStreamOffset offset);
 
@@ -108,6 +106,8 @@
 
   int num_duplicate_frames_received();
 
+  QuicFlowController* flow_controller() { return &flow_controller_; }
+
  protected:
   // Sends as much of 'data' to the connection as the connection will consume,
   // and then buffers any remaining data in queued_data_.
@@ -143,8 +143,9 @@
   const QuicStreamSequencer* sequencer() const { return &sequencer_; }
   QuicStreamSequencer* sequencer() { return &sequencer_; }
 
-  // Returns true if flow control is enabled for this stream.
-  virtual bool IsFlowControlEnabled() const = 0;
+  void DisableFlowControl() {
+    flow_controller_.Disable();
+  }
 
  private:
   friend class test::ReliableQuicStreamPeer;
@@ -186,23 +187,6 @@
   // should check |connection_error_|.
   QuicErrorCode connection_error_;
 
-  // Stream level flow control.
-  // This stream is allowed to send up to flow_control_send_limit_ bytes. Once
-  // it has reached this limit it must not send more data until it receives a
-  // suitable WINDOW_UPDATE frame from the peer.
-  QuicStreamOffset flow_control_send_limit_;
-
-  // Stream level flow control.
-  // The maximum size of the stream receive window. Used to determine by how
-  // much we should increase the window offset when sending a WINDOW_UPDATE.
-  uint64 max_flow_control_receive_window_bytes_;
-
-  // Stream level flow control.
-  // This stream expects to receive up to receive_window_offset_bytes_.
-  // If the peer sends more than this (without sending us a WINDOW_UPDATE frame
-  // first), then this is a flow control error.
-  QuicStreamOffset flow_control_receive_window_offset_bytes_;
-
   // True if the read side is closed and further frames should be rejected.
   bool read_side_closed_;
   // True if the write side is closed, and further writes should fail.
@@ -218,6 +202,8 @@
   // True if the session this stream is running under is a server session.
   bool is_server_;
 
+  QuicFlowController flow_controller_;
+
   DISALLOW_COPY_AND_ASSIGN(ReliableQuicStream);
 };
 
diff --git a/net/quic/reliable_quic_stream_test.cc b/net/quic/reliable_quic_stream_test.cc
index 23602a3..c4adc7c 100644
--- a/net/quic/reliable_quic_stream_test.cc
+++ b/net/quic/reliable_quic_stream_test.cc
@@ -10,6 +10,8 @@
 #include "net/quic/quic_utils.h"
 #include "net/quic/quic_write_blocked_list.h"
 #include "net/quic/spdy_utils.h"
+#include "net/quic/test_tools/quic_config_peer.h"
+#include "net/quic/test_tools/quic_flow_controller_peer.h"
 #include "net/quic/test_tools/quic_session_peer.h"
 #include "net/quic/test_tools/quic_test_utils.h"
 #include "net/quic/test_tools/reliable_quic_stream_peer.h"
@@ -58,10 +60,6 @@
     return QuicUtils::HighestPriority();
   }
 
-  virtual bool IsFlowControlEnabled() const OVERRIDE {
-    return true;
-  }
-
   using ReliableQuicStream::WriteOrBufferData;
   using ReliableQuicStream::CloseReadSide;
   using ReliableQuicStream::CloseWriteSide;
@@ -75,7 +73,9 @@
 class ReliableQuicStreamTest : public ::testing::TestWithParam<bool> {
  public:
   ReliableQuicStreamTest()
-      : initial_flow_control_window_bytes_(kMaxPacketSize) {
+      : initial_flow_control_window_bytes_(kMaxPacketSize),
+        zero_(QuicTime::Delta::Zero()),
+        supported_versions_(QuicSupportedVersions()) {
     headers_[":host"] = "www.google.com";
     headers_[":path"] = "/index.hml";
     headers_[":scheme"] = "https";
@@ -105,14 +105,19 @@
         "JBCScs_ejbKaqBDoB7ZGxTvqlrB__2ZmnHHjCr8RgMRtKNtIeuZAo ";
   }
 
+  void set_supported_versions(const QuicVersionVector& versions) {
+    supported_versions_ = versions;
+  }
+
   void Initialize(bool stream_should_process_data) {
-    connection_ = new StrictMock<MockConnection>(kIsServer);
+    connection_ =
+        new StrictMock<MockConnection>(kIsServer, supported_versions_);
     session_.reset(new StrictMock<MockSession>(connection_));
 
     // New streams rely on having the peer's flow control receive window
     // negotiated in the config.
-    session_->config()->set_peer_initial_flow_control_window_bytes(
-        initial_flow_control_window_bytes_);
+    QuicConfigPeer::SetReceivedInitialFlowControlWindow(
+        session_->config(), initial_flow_control_window_bytes_);
 
     stream_.reset(new TestStream(kStreamId, session_.get(),
                                  stream_should_process_data));
@@ -137,6 +142,8 @@
   SpdyHeaderBlock headers_;
   QuicWriteBlockedList* write_blocked_list_;
   uint32 initial_flow_control_window_bytes_;
+  QuicTime::Delta zero_;
+  QuicVersionVector supported_versions_;
 };
 
 TEST_F(ReliableQuicStreamTest, WriteAllData) {
@@ -319,13 +326,15 @@
 
   // Initially should be default.
   EXPECT_EQ(initial_flow_control_window_bytes_,
-            ReliableQuicStreamPeer::SendWindowOffset(stream_.get()));
+            QuicFlowControllerPeer::SendWindowOffset(
+                stream_.get()->flow_controller()));
 
   // Check a single WINDOW_UPDATE results in correct offset.
   QuicWindowUpdateFrame window_update_1(stream_->id(), 1234);
   stream_->OnWindowUpdateFrame(window_update_1);
   EXPECT_EQ(window_update_1.byte_offset,
-            ReliableQuicStreamPeer::SendWindowOffset(stream_.get()));
+            QuicFlowControllerPeer::SendWindowOffset(
+                stream_.get()->flow_controller()));
 
   // Now send a few more WINDOW_UPDATES and make sure that only the largest is
   // remembered.
@@ -336,7 +345,32 @@
   stream_->OnWindowUpdateFrame(window_update_3);
   stream_->OnWindowUpdateFrame(window_update_4);
   EXPECT_EQ(window_update_3.byte_offset,
-            ReliableQuicStreamPeer::SendWindowOffset(stream_.get()));
+            QuicFlowControllerPeer::SendWindowOffset(
+                stream_.get()->flow_controller()));
+}
+
+TEST_F(ReliableQuicStreamTest, StreamFlowControlShouldNotBlockInLessThanQ017) {
+  // TODO(rjshade): Remove this test when we no longer have any versions <
+  //                QUIC_VERSION_17.
+  ValueRestore<bool> old_flag(&FLAGS_enable_quic_stream_flow_control, true);
+
+  // Make sure we are using a version which does not support flow control.
+  QuicVersion kTestQuicVersions[] = {QUIC_VERSION_16};
+  QuicVersionVector versions;
+  for (size_t i = 0; i < arraysize(kTestQuicVersions); ++i) {
+    versions.push_back(kTestQuicVersions[i]);
+  }
+  set_supported_versions(versions);
+
+  // Peer is not talking QUIC_VERSION_17 so assumes that it can send a zero
+  // length flow control receive window with no consequences.
+  set_initial_flow_control_window_bytes(0);
+
+  Initialize(kShouldProcessData);
+
+  // The stream should _not_ be flow control blocked, because we are not talking
+  // a version which has flow control enabled.
+  EXPECT_FALSE(stream_->flow_controller()->IsBlocked());
 }
 
 void SaveProxyAckNotifierDelegate(
@@ -344,6 +378,7 @@
     QuicAckNotifier::DelegateInterface* delegate) {
   *delegate_out = delegate;
 }
+
 TEST_F(ReliableQuicStreamTest, WriteOrBufferDataWithQuicAckNotifier) {
   Initialize(kShouldProcessData);
 
@@ -357,6 +392,9 @@
   const int kSecondWriteSize = 50;
   const int kLastWriteSize = kDataSize - kFirstWriteSize - kSecondWriteSize;
 
+  // Set a large flow control send window so this doesn't interfere with test.
+  stream_->flow_controller()->UpdateSendWindowOffset(kDataSize + 1);
+
   scoped_refptr<QuicAckNotifier::DelegateInterface> proxy_delegate;
 
   EXPECT_CALL(*session_, WritevData(kStreamId, _, _, _, _)).WillOnce(DoAll(
@@ -384,13 +422,13 @@
 
   // There were two writes, so OnAckNotification is not propagated
   // until the third Ack arrives.
-  proxy_delegate->OnAckNotification(1, 2, 3, 4);
-  proxy_delegate->OnAckNotification(10, 20, 30, 40);
+  proxy_delegate->OnAckNotification(1, 2, 3, 4, zero_);
+  proxy_delegate->OnAckNotification(10, 20, 30, 40, zero_);
 
   // The arguments to delegate->OnAckNotification are the sum of the
   // arguments to proxy_delegate OnAckNotification calls.
-  EXPECT_CALL(*delegate, OnAckNotification(111, 222, 333, 444));
-  proxy_delegate->OnAckNotification(100, 200, 300, 400);
+  EXPECT_CALL(*delegate, OnAckNotification(111, 222, 333, 444, zero_));
+  proxy_delegate->OnAckNotification(100, 200, 300, 400, zero_);
 }
 
 // Verify delegate behavior when packets are acked before the
@@ -406,6 +444,9 @@
 
   const int kInitialWriteSize = 100;
 
+  // Set a large flow control send window so this doesn't interfere with test.
+  stream_->flow_controller()->UpdateSendWindowOffset(kDataSize + 1);
+
   scoped_refptr<QuicAckNotifier::DelegateInterface> proxy_delegate;
 
   EXPECT_CALL(*session_, WritevData(kStreamId, _, _, _, _)).WillOnce(DoAll(
@@ -416,7 +457,7 @@
   EXPECT_TRUE(write_blocked_list_->HasWriteBlockedStreams());
 
   // Handle the ack of the first write.
-  proxy_delegate->OnAckNotification(1, 2, 3, 4);
+  proxy_delegate->OnAckNotification(1, 2, 3, 4, zero_);
   proxy_delegate = NULL;
 
   EXPECT_CALL(*session_, WritevData(kStreamId, _, _, _, _)).WillOnce(DoAll(
@@ -426,8 +467,8 @@
   stream_->OnCanWrite();
 
   // Handle the ack for the second write.
-  EXPECT_CALL(*delegate, OnAckNotification(101, 202, 303, 404));
-  proxy_delegate->OnAckNotification(100, 200, 300, 400);
+  EXPECT_CALL(*delegate, OnAckNotification(101, 202, 303, 404, zero_));
+  proxy_delegate->OnAckNotification(100, 200, 300, 400, zero_);
 }
 
 // Verify delegate behavior when WriteOrBufferData does not buffer.
@@ -447,8 +488,8 @@
   EXPECT_FALSE(write_blocked_list_->HasWriteBlockedStreams());
 
   // Handle the ack.
-  EXPECT_CALL(*delegate, OnAckNotification(1, 2, 3, 4));
-  proxy_delegate->OnAckNotification(1, 2, 3, 4);
+  EXPECT_CALL(*delegate, OnAckNotification(1, 2, 3, 4, zero_));
+  proxy_delegate->OnAckNotification(1, 2, 3, 4, zero_);
 }
 
 // Verify delegate behavior when WriteOrBufferData buffers all the data.
@@ -472,8 +513,8 @@
   stream_->OnCanWrite();
 
   // Handle the ack.
-  EXPECT_CALL(*delegate, OnAckNotification(1, 2, 3, 4));
-  proxy_delegate->OnAckNotification(1, 2, 3, 4);
+  EXPECT_CALL(*delegate, OnAckNotification(1, 2, 3, 4, zero_));
+  proxy_delegate->OnAckNotification(1, 2, 3, 4, zero_);
 }
 
 // Verify delegate behavior when WriteOrBufferData when the FIN is
@@ -500,9 +541,9 @@
   stream_->OnCanWrite();
 
   // Handle the acks.
-  proxy_delegate->OnAckNotification(1, 2, 3, 4);
-  EXPECT_CALL(*delegate, OnAckNotification(11, 22, 33, 44));
-  proxy_delegate->OnAckNotification(10, 20, 30, 40);
+  proxy_delegate->OnAckNotification(1, 2, 3, 4, zero_);
+  EXPECT_CALL(*delegate, OnAckNotification(11, 22, 33, 44, zero_));
+  proxy_delegate->OnAckNotification(10, 20, 30, 40, zero_);
 }
 
 }  // namespace
diff --git a/net/quic/spdy_utils.h b/net/quic/spdy_utils.h
index ffc78f0..14d3300 100644
--- a/net/quic/spdy_utils.h
+++ b/net/quic/spdy_utils.h
@@ -16,6 +16,9 @@
  public:
   static std::string SerializeUncompressedHeaders(
       const SpdyHeaderBlock& headers);
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(SpdyUtils);
 };
 
 }  // namespace net
diff --git a/net/quic/test_tools/crypto_test_utils.h b/net/quic/test_tools/crypto_test_utils.h
index 1d26dc7..60c2a57 100644
--- a/net/quic/test_tools/crypto_test_utils.h
+++ b/net/quic/test_tools/crypto_test_utils.h
@@ -140,6 +140,8 @@
  private:
   static void CompareClientAndServerKeys(QuicCryptoClientStream* client,
                                          QuicCryptoServerStream* server);
+
+  DISALLOW_COPY_AND_ASSIGN(CryptoTestUtils);
 };
 
 }  // namespace test
diff --git a/net/quic/test_tools/mock_clock.h b/net/quic/test_tools/mock_clock.h
index 822ae11..d6e490f 100644
--- a/net/quic/test_tools/mock_clock.h
+++ b/net/quic/test_tools/mock_clock.h
@@ -30,6 +30,8 @@
 
  private:
   QuicTime now_;
+
+  DISALLOW_COPY_AND_ASSIGN(MockClock);
 };
 
 }  // namespace net
diff --git a/net/quic/test_tools/mock_crypto_client_stream.cc b/net/quic/test_tools/mock_crypto_client_stream.cc
index 15ab193..6f7f2d5 100644
--- a/net/quic/test_tools/mock_crypto_client_stream.cc
+++ b/net/quic/test_tools/mock_crypto_client_stream.cc
@@ -89,7 +89,7 @@
   session()->config()->ToHandshakeMessage(&msg);
   string error_details;
   const QuicErrorCode error =
-      session()->config()->ProcessClientHello(msg, &error_details);
+      session()->config()->ProcessPeerHello(msg, CLIENT, &error_details);
   ASSERT_EQ(QUIC_NO_ERROR, error);
   ASSERT_TRUE(session()->config()->negotiated());
 }
diff --git a/net/quic/test_tools/mock_crypto_client_stream.h b/net/quic/test_tools/mock_crypto_client_stream.h
index e1205e1..e940a1e 100644
--- a/net/quic/test_tools/mock_crypto_client_stream.h
+++ b/net/quic/test_tools/mock_crypto_client_stream.h
@@ -62,6 +62,8 @@
   QuicClientSessionBase* client_session();
 
   const ProofVerifyDetails* proof_verify_details_;
+
+  DISALLOW_COPY_AND_ASSIGN(MockCryptoClientStream);
 };
 
 }  // namespace net
diff --git a/net/quic/test_tools/mock_crypto_client_stream_factory.h b/net/quic/test_tools/mock_crypto_client_stream_factory.h
index a6626b9..721ec25 100644
--- a/net/quic/test_tools/mock_crypto_client_stream_factory.h
+++ b/net/quic/test_tools/mock_crypto_client_stream_factory.h
@@ -43,6 +43,8 @@
   MockCryptoClientStream::HandshakeMode handshake_mode_;
   MockCryptoClientStream* last_stream_;
   const ProofVerifyDetails* proof_verify_details_;
+
+  DISALLOW_COPY_AND_ASSIGN(MockCryptoClientStreamFactory);
 };
 
 }  // namespace net
diff --git a/net/quic/test_tools/mock_random.h b/net/quic/test_tools/mock_random.h
index ef575ec..53b24b7 100644
--- a/net/quic/test_tools/mock_random.h
+++ b/net/quic/test_tools/mock_random.h
@@ -32,6 +32,8 @@
  private:
   uint32 base_;
   uint8 increment_;
+
+  DISALLOW_COPY_AND_ASSIGN(MockRandom);
 };
 
 }  // namespace net
diff --git a/net/quic/test_tools/quic_config_peer.cc b/net/quic/test_tools/quic_config_peer.cc
new file mode 100644
index 0000000..414f152
--- /dev/null
+++ b/net/quic/test_tools/quic_config_peer.cc
@@ -0,0 +1,31 @@
+// 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.
+
+#include "net/quic/test_tools/quic_config_peer.h"
+
+#include "net/quic/quic_config.h"
+
+namespace net {
+namespace test {
+
+// static
+void QuicConfigPeer::SetReceivedInitialWindow(QuicConfig* config,
+                                              size_t initial_window) {
+  config->initial_congestion_window_.SetReceivedValue(initial_window);
+}
+
+// static
+void QuicConfigPeer::SetReceivedLossDetection(QuicConfig* config,
+                                              QuicTag loss_detection) {
+  config->loss_detection_.SetReceivedValue(loss_detection);
+}
+
+// static
+void QuicConfigPeer::SetReceivedInitialFlowControlWindow(QuicConfig* config,
+                                                         uint32 window_bytes) {
+  config->initial_flow_control_window_bytes_.SetReceivedValue(window_bytes);
+}
+
+}  // namespace test
+}  // namespace net
diff --git a/net/quic/test_tools/quic_config_peer.h b/net/quic/test_tools/quic_config_peer.h
new file mode 100644
index 0000000..f471638
--- /dev/null
+++ b/net/quic/test_tools/quic_config_peer.h
@@ -0,0 +1,35 @@
+// 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.
+
+#ifndef NET_QUIC_TEST_TOOLS_QUIC_CONFIG_PEER_H_
+#define NET_QUIC_TEST_TOOLS_QUIC_CONFIG_PEER_H_
+
+#include "net/quic/quic_protocol.h"
+
+namespace net {
+
+class QuicConfig;
+
+namespace test {
+
+class QuicConfigPeer {
+ public:
+  static void SetReceivedInitialWindow(QuicConfig* config,
+                                       size_t initial_window);
+
+  static void SetReceivedLossDetection(QuicConfig* config,
+                                       QuicTag loss_detection);
+
+  static void SetReceivedInitialFlowControlWindow(QuicConfig* config,
+                                                  uint32 window_bytes);
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(QuicConfigPeer);
+};
+
+}  // namespace test
+
+}  // namespace net
+
+#endif  // NET_QUIC_TEST_TOOLS_QUIC_CONFIG_PEER_H_
diff --git a/net/quic/test_tools/quic_connection_peer.cc b/net/quic/test_tools/quic_connection_peer.cc
index 83b3884..a3ac8da 100644
--- a/net/quic/test_tools/quic_connection_peer.cc
+++ b/net/quic/test_tools/quic_connection_peer.cc
@@ -167,6 +167,17 @@
 }
 
 // static
+QuicAlarm* QuicConnectionPeer::GetPingAlarm(QuicConnection* connection) {
+  return connection->ping_alarm_.get();
+}
+
+// static
+QuicAlarm* QuicConnectionPeer::GetResumeWritesAlarm(
+    QuicConnection* connection) {
+  return connection->resume_writes_alarm_.get();
+}
+
+// static
 QuicAlarm* QuicConnectionPeer::GetRetransmissionAlarm(
     QuicConnection* connection) {
   return connection->retransmission_alarm_.get();
@@ -178,12 +189,6 @@
 }
 
 // static
-QuicAlarm* QuicConnectionPeer::GetResumeWritesAlarm(
-    QuicConnection* connection) {
-  return connection->resume_writes_alarm_.get();
-}
-
-// static
 QuicAlarm* QuicConnectionPeer::GetTimeoutAlarm(QuicConnection* connection) {
   return connection->timeout_alarm_.get();
 }
diff --git a/net/quic/test_tools/quic_connection_peer.h b/net/quic/test_tools/quic_connection_peer.h
index dc675a2..8c74c1a 100644
--- a/net/quic/test_tools/quic_connection_peer.h
+++ b/net/quic/test_tools/quic_connection_peer.h
@@ -96,9 +96,10 @@
   static QuicFecGroup* GetFecGroup(QuicConnection* connection, int fec_group);
 
   static QuicAlarm* GetAckAlarm(QuicConnection* connection);
+  static QuicAlarm* GetPingAlarm(QuicConnection* connection);
+  static QuicAlarm* GetResumeWritesAlarm(QuicConnection* connection);
   static QuicAlarm* GetRetransmissionAlarm(QuicConnection* connection);
   static QuicAlarm* GetSendAlarm(QuicConnection* connection);
-  static QuicAlarm* GetResumeWritesAlarm(QuicConnection* connection);
   static QuicAlarm* GetTimeoutAlarm(QuicConnection* connection);
 
   static QuicPacketWriter* GetWriter(QuicConnection* connection);
diff --git a/net/quic/test_tools/quic_flow_controller_peer.cc b/net/quic/test_tools/quic_flow_controller_peer.cc
new file mode 100644
index 0000000..80b5e2b
--- /dev/null
+++ b/net/quic/test_tools/quic_flow_controller_peer.cc
@@ -0,0 +1,61 @@
+// 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.
+
+#include "net/quic/test_tools/quic_flow_controller_peer.h"
+
+#include <list>
+
+#include "net/quic/quic_flow_controller.h"
+#include "net/quic/quic_protocol.h"
+
+namespace net {
+namespace test {
+
+// static
+void QuicFlowControllerPeer::SetSendWindowOffset(
+    QuicFlowController* flow_controller,
+    uint64 offset) {
+  flow_controller->send_window_offset_ = offset;
+}
+
+// static
+void QuicFlowControllerPeer::SetReceiveWindowOffset(
+    QuicFlowController* flow_controller,
+    uint64 offset) {
+  flow_controller->receive_window_offset_ = offset;
+}
+
+// static
+void QuicFlowControllerPeer::SetMaxReceiveWindow(
+    QuicFlowController* flow_controller, uint64 window_size) {
+  flow_controller->max_receive_window_ = window_size;
+}
+
+// static
+uint64 QuicFlowControllerPeer::SendWindowOffset(
+    QuicFlowController* flow_controller) {
+  return flow_controller->send_window_offset_;
+}
+
+// static
+uint64 QuicFlowControllerPeer::SendWindowSize(
+    QuicFlowController* flow_controller) {
+  return flow_controller->SendWindowSize();
+}
+
+// static
+uint64 QuicFlowControllerPeer::ReceiveWindowOffset(
+    QuicFlowController* flow_controller) {
+  return flow_controller->receive_window_offset_;
+}
+
+// static
+uint64 QuicFlowControllerPeer::ReceiveWindowSize(
+    QuicFlowController* flow_controller) {
+  return flow_controller->receive_window_offset_ -
+         flow_controller->TotalReceivedBytes();
+}
+
+}  // namespace test
+}  // namespace net
diff --git a/net/quic/test_tools/quic_flow_controller_peer.h b/net/quic/test_tools/quic_flow_controller_peer.h
new file mode 100644
index 0000000..213d40d
--- /dev/null
+++ b/net/quic/test_tools/quic_flow_controller_peer.h
@@ -0,0 +1,42 @@
+// 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.
+
+#ifndef NET_QUIC_TEST_TOOLS_QUIC_FLOW_CONTROLLER_PEER_H_
+#define NET_QUIC_TEST_TOOLS_QUIC_FLOW_CONTROLLER_PEER_H_
+
+#include "net/quic/quic_protocol.h"
+
+namespace net {
+
+class QuicFlowController;
+
+namespace test {
+
+class QuicFlowControllerPeer {
+ public:
+  static void SetSendWindowOffset(QuicFlowController* flow_controller,
+                                  uint64 offset);
+
+  static void SetReceiveWindowOffset(QuicFlowController* flow_controller,
+                                     uint64 offset);
+
+  static void SetMaxReceiveWindow(QuicFlowController* flow_controller,
+                                  uint64 window_size);
+
+  static uint64 SendWindowOffset(QuicFlowController* flow_controller);
+
+  static uint64 SendWindowSize(QuicFlowController* flow_controller);
+
+  static uint64 ReceiveWindowOffset(QuicFlowController* flow_controller);
+
+  static uint64 ReceiveWindowSize(QuicFlowController* flow_controller);
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(QuicFlowControllerPeer);
+};
+
+}  // namespace test
+}  // namespace net
+
+#endif  // NET_QUIC_TEST_TOOLS_QUIC_FLOW_CONTROLLER_PEER_H_
diff --git a/net/quic/test_tools/quic_test_packet_maker.cc b/net/quic/test_tools/quic_test_packet_maker.cc
index ad14d86..397f39f 100644
--- a/net/quic/test_tools/quic_test_packet_maker.cc
+++ b/net/quic/test_tools/quic_test_packet_maker.cc
@@ -61,7 +61,7 @@
   header.fec_flag = false;
   header.fec_group = 0;
 
-  QuicAckFrame ack(largest_received, QuicTime::Zero(), least_unacked);
+  QuicAckFrame ack(MakeAckFrame(largest_received, least_unacked));
   ack.received_info.delta_time_largest_observed = QuicTime::Delta::Zero();
   QuicFrames frames;
   frames.push_back(QuicFrame(&ack));
@@ -122,7 +122,7 @@
   header.fec_flag = false;
   header.fec_group = 0;
 
-  QuicAckFrame ack(largest_received, QuicTime::Zero(), least_unacked);
+  QuicAckFrame ack(MakeAckFrame(largest_received, least_unacked));
   ack.received_info.delta_time_largest_observed = QuicTime::Delta::Zero();
 
   QuicCongestionFeedbackFrame feedback;
diff --git a/net/quic/test_tools/quic_test_utils.cc b/net/quic/test_tools/quic_test_utils.cc
index fbba004..5e4d7f5 100644
--- a/net/quic/test_tools/quic_test_utils.cc
+++ b/net/quic/test_tools/quic_test_utils.cc
@@ -42,6 +42,16 @@
 
 }  // namespace
 
+QuicAckFrame MakeAckFrame(QuicPacketSequenceNumber largest_observed,
+                          QuicPacketSequenceNumber least_unacked) {
+  QuicAckFrame ack;
+  ack.received_info.largest_observed = largest_observed;
+  ack.received_info.entropy_hash = 0;
+  ack.sent_info.least_unacked = least_unacked;
+  ack.sent_info.entropy_hash = 0;
+  return ack;
+}
+
 MockFramerVisitor::MockFramerVisitor() {
   // By default, we want to accept packets.
   ON_CALL(*this, OnProtocolVersionMismatch(_))
@@ -69,6 +79,9 @@
   ON_CALL(*this, OnStopWaitingFrame(_))
       .WillByDefault(testing::Return(true));
 
+  ON_CALL(*this, OnPingFrame(_))
+      .WillByDefault(testing::Return(true));
+
   ON_CALL(*this, OnRstStreamFrame(_))
       .WillByDefault(testing::Return(true));
 
@@ -118,6 +131,10 @@
   return true;
 }
 
+bool NoOpFramerVisitor::OnPingFrame(const QuicPingFrame& frame) {
+  return true;
+}
+
 bool NoOpFramerVisitor::OnRstStreamFrame(
     const QuicRstStreamFrame& frame) {
   return true;
@@ -141,102 +158,6 @@
   return true;
 }
 
-FramerVisitorCapturingFrames::FramerVisitorCapturingFrames() : frame_count_(0) {
-}
-
-FramerVisitorCapturingFrames::~FramerVisitorCapturingFrames() {
-  Reset();
-}
-
-void FramerVisitorCapturingFrames::Reset() {
-  STLDeleteElements(&stream_data_);
-  stream_frames_.clear();
-  frame_count_ = 0;
-  ack_.reset();
-  feedback_.reset();
-  rst_.reset();
-  close_.reset();
-  goaway_.reset();
-  version_negotiation_packet_.reset();
-}
-
-bool FramerVisitorCapturingFrames::OnPacketHeader(
-    const QuicPacketHeader& header) {
-  header_ = header;
-  frame_count_ = 0;
-  return true;
-}
-
-bool FramerVisitorCapturingFrames::OnStreamFrame(const QuicStreamFrame& frame) {
-  // Make a copy of the frame and store a copy of underlying string, since
-  // frame.data may not exist outside this callback.
-  stream_data_.push_back(frame.GetDataAsString());
-  QuicStreamFrame frame_copy = frame;
-  frame_copy.data.Clear();
-  frame_copy.data.Append(const_cast<char*>(stream_data_.back()->data()),
-                         stream_data_.back()->size());
-  stream_frames_.push_back(frame_copy);
-  ++frame_count_;
-  return true;
-}
-
-bool FramerVisitorCapturingFrames::OnAckFrame(const QuicAckFrame& frame) {
-  ack_.reset(new QuicAckFrame(frame));
-  ++frame_count_;
-  return true;
-}
-
-bool FramerVisitorCapturingFrames::OnCongestionFeedbackFrame(
-    const QuicCongestionFeedbackFrame& frame) {
-  feedback_.reset(new QuicCongestionFeedbackFrame(frame));
-  ++frame_count_;
-  return true;
-}
-
-bool FramerVisitorCapturingFrames::OnStopWaitingFrame(
-    const QuicStopWaitingFrame& frame) {
-  stop_waiting_.reset(new QuicStopWaitingFrame(frame));
-  ++frame_count_;
-  return true;
-}
-
-bool FramerVisitorCapturingFrames::OnRstStreamFrame(
-    const QuicRstStreamFrame& frame) {
-  rst_.reset(new QuicRstStreamFrame(frame));
-  ++frame_count_;
-  return true;
-}
-
-bool FramerVisitorCapturingFrames::OnConnectionCloseFrame(
-    const QuicConnectionCloseFrame& frame) {
-  close_.reset(new QuicConnectionCloseFrame(frame));
-  ++frame_count_;
-  return true;
-}
-
-bool FramerVisitorCapturingFrames::OnGoAwayFrame(const QuicGoAwayFrame& frame) {
-  goaway_.reset(new QuicGoAwayFrame(frame));
-  ++frame_count_;
-  return true;
-}
-
-void FramerVisitorCapturingFrames::OnVersionNegotiationPacket(
-    const QuicVersionNegotiationPacket& packet) {
-  version_negotiation_packet_.reset(new QuicVersionNegotiationPacket(packet));
-  frame_count_ = 0;
-}
-
-FramerVisitorCapturingPublicReset::FramerVisitorCapturingPublicReset() {
-}
-
-FramerVisitorCapturingPublicReset::~FramerVisitorCapturingPublicReset() {
-}
-
-void FramerVisitorCapturingPublicReset::OnPublicResetPacket(
-    const QuicPublicResetPacket& public_reset) {
-  public_reset_packet_ = public_reset;
-}
-
 MockConnectionVisitor::MockConnectionVisitor() {
 }
 
diff --git a/net/quic/test_tools/quic_test_utils.h b/net/quic/test_tools/quic_test_utils.h
index 1214205..b3bcf3e 100644
--- a/net/quic/test_tools/quic_test_utils.h
+++ b/net/quic/test_tools/quic_test_utils.h
@@ -78,6 +78,11 @@
 // Returns a version vector consisting of |version|.
 QuicVersionVector SupportedVersions(QuicVersion version);
 
+// Testing convenience method to construct a QuicAckFrame with all packets
+// from least_unacked to largest_observed acked.
+QuicAckFrame MakeAckFrame(QuicPacketSequenceNumber largest_observed,
+                          QuicPacketSequenceNumber least_unacked);
+
 template<typename SaveType>
 class ValueRestore {
  public:
@@ -122,6 +127,7 @@
   MOCK_METHOD1(OnCongestionFeedbackFrame,
                bool(const QuicCongestionFeedbackFrame& frame));
   MOCK_METHOD1(OnStopWaitingFrame, bool(const QuicStopWaitingFrame& frame));
+  MOCK_METHOD1(OnPingFrame, bool(const QuicPingFrame& frame));
   MOCK_METHOD1(OnFecData, void(const QuicFecData& fec));
   MOCK_METHOD1(OnRstStreamFrame, bool(const QuicRstStreamFrame& frame));
   MOCK_METHOD1(OnConnectionCloseFrame,
@@ -158,6 +164,7 @@
       const QuicCongestionFeedbackFrame& frame) OVERRIDE;
   virtual bool OnStopWaitingFrame(
       const QuicStopWaitingFrame& frame) OVERRIDE;
+  virtual bool OnPingFrame(const QuicPingFrame& frame) OVERRIDE;
   virtual void OnFecData(const QuicFecData& fec) OVERRIDE {}
   virtual bool OnRstStreamFrame(const QuicRstStreamFrame& frame) OVERRIDE;
   virtual bool OnConnectionCloseFrame(
@@ -171,79 +178,6 @@
   DISALLOW_COPY_AND_ASSIGN(NoOpFramerVisitor);
 };
 
-class FramerVisitorCapturingPublicReset : public NoOpFramerVisitor {
- public:
-  FramerVisitorCapturingPublicReset();
-  virtual ~FramerVisitorCapturingPublicReset();
-
-  virtual void OnPublicResetPacket(
-      const QuicPublicResetPacket& packet) OVERRIDE;
-
-  const QuicPublicResetPacket public_reset_packet() {
-    return public_reset_packet_;
-  }
-
- private:
-  QuicPublicResetPacket public_reset_packet_;
-};
-
-class FramerVisitorCapturingFrames : public NoOpFramerVisitor {
- public:
-  FramerVisitorCapturingFrames();
-  virtual ~FramerVisitorCapturingFrames();
-
-  // Reset the visitor to it's initial state.
-  void Reset();
-
-  // NoOpFramerVisitor
-  virtual void OnVersionNegotiationPacket(
-      const QuicVersionNegotiationPacket& packet) OVERRIDE;
-  virtual bool OnPacketHeader(const QuicPacketHeader& header) OVERRIDE;
-  virtual bool OnStreamFrame(const QuicStreamFrame& frame) OVERRIDE;
-  virtual bool OnAckFrame(const QuicAckFrame& frame) OVERRIDE;
-  virtual bool OnCongestionFeedbackFrame(
-      const QuicCongestionFeedbackFrame& frame) OVERRIDE;
-  virtual bool OnStopWaitingFrame(
-      const QuicStopWaitingFrame& frame) OVERRIDE;
-  virtual bool OnRstStreamFrame(const QuicRstStreamFrame& frame) OVERRIDE;
-  virtual bool OnConnectionCloseFrame(
-      const QuicConnectionCloseFrame& frame) OVERRIDE;
-  virtual bool OnGoAwayFrame(const QuicGoAwayFrame& frame) OVERRIDE;
-
-  size_t frame_count() const { return frame_count_; }
-  QuicPacketHeader* header() { return &header_; }
-  const std::vector<QuicStreamFrame>* stream_frames() const {
-    return &stream_frames_;
-  }
-  const std::vector<string*>& stream_data() const {
-    return stream_data_;
-  }
-  QuicAckFrame* ack() { return ack_.get(); }
-  QuicCongestionFeedbackFrame* feedback() { return feedback_.get(); }
-  QuicStopWaitingFrame* stop_waiting() { return stop_waiting_.get(); }
-  QuicRstStreamFrame* rst() { return rst_.get(); }
-  QuicConnectionCloseFrame* close() { return close_.get(); }
-  QuicGoAwayFrame* goaway() { return goaway_.get(); }
-  QuicVersionNegotiationPacket* version_negotiation_packet() {
-    return version_negotiation_packet_.get();
-  }
-
- private:
-  size_t frame_count_;
-  QuicPacketHeader header_;
-  std::vector<QuicStreamFrame> stream_frames_;
-  std::vector<std::string*> stream_data_;
-  scoped_ptr<QuicAckFrame> ack_;
-  scoped_ptr<QuicCongestionFeedbackFrame> feedback_;
-  scoped_ptr<QuicStopWaitingFrame> stop_waiting_;
-  scoped_ptr<QuicRstStreamFrame> rst_;
-  scoped_ptr<QuicConnectionCloseFrame> close_;
-  scoped_ptr<QuicGoAwayFrame> goaway_;
-  scoped_ptr<QuicVersionNegotiationPacket> version_negotiation_packet_;
-
-  DISALLOW_COPY_AND_ASSIGN(FramerVisitorCapturingFrames);
-};
-
 class MockConnectionVisitor : public QuicConnectionVisitorInterface {
  public:
   MockConnectionVisitor();
@@ -261,6 +195,7 @@
   MOCK_METHOD0(OnCanWrite, void());
   MOCK_CONST_METHOD0(HasPendingWrites, bool());
   MOCK_CONST_METHOD0(HasPendingHandshake, bool());
+  MOCK_CONST_METHOD0(HasOpenDataStreams, bool());
   MOCK_METHOD1(OnSuccessfulVersionNegotiation,
                void(const QuicVersion& version));
   MOCK_METHOD0(OnConfigNegotiated, void());
@@ -281,6 +216,8 @@
  private:
   MockClock clock_;
   MockRandom random_generator_;
+
+  DISALLOW_COPY_AND_ASSIGN(MockHelper);
 };
 
 class MockConnection : public QuicConnection {
@@ -405,6 +342,7 @@
 
  private:
   QuicCryptoStream* crypto_stream_;
+
   DISALLOW_COPY_AND_ASSIGN(TestSession);
 };
 
@@ -429,6 +367,7 @@
 
  private:
   QuicCryptoStream* crypto_stream_;
+
   DISALLOW_COPY_AND_ASSIGN(TestClientSession);
 };
 
@@ -445,6 +384,9 @@
   MOCK_CONST_METHOD0(IsWriteBlockedDataBuffered, bool());
   MOCK_CONST_METHOD0(IsWriteBlocked, bool());
   MOCK_METHOD0(SetWritable, void());
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(MockPacketWriter);
 };
 
 class MockSendAlgorithm : public SendAlgorithmInterface {
@@ -489,6 +431,9 @@
                                  QuicPacketSequenceNumber largest_observed,
                                  const RttStats& rtt_stats));
   MOCK_CONST_METHOD0(GetLossTimeout, QuicTime());
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(MockLossAlgorithm);
 };
 
 class TestEntropyCalculator :
@@ -499,6 +444,9 @@
 
   virtual QuicPacketEntropyHash EntropyHash(
       QuicPacketSequenceNumber sequence_number) const OVERRIDE;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(TestEntropyCalculator);
 };
 
 class MockEntropyCalculator : public TestEntropyCalculator {
@@ -509,20 +457,27 @@
   MOCK_CONST_METHOD1(
       EntropyHash,
       QuicPacketEntropyHash(QuicPacketSequenceNumber sequence_number));
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(MockEntropyCalculator);
 };
 
 class MockAckNotifierDelegate : public QuicAckNotifier::DelegateInterface {
  public:
   MockAckNotifierDelegate();
 
-  MOCK_METHOD4(OnAckNotification, void(int num_original_packets,
+  MOCK_METHOD5(OnAckNotification, void(int num_original_packets,
                                        int num_original_bytes,
                                        int num_retransmitted_packets,
-                                       int num_retransmitted_bytes));
+                                       int num_retransmitted_bytes,
+                                       QuicTime::Delta delta_largest_observed));
 
  protected:
   // Object is ref counted.
   virtual ~MockAckNotifierDelegate();
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(MockAckNotifierDelegate);
 };
 
 }  // namespace test
diff --git a/net/quic/test_tools/reliable_quic_stream_peer.cc b/net/quic/test_tools/reliable_quic_stream_peer.cc
index 09b6280..6d1f112 100644
--- a/net/quic/test_tools/reliable_quic_stream_peer.cc
+++ b/net/quic/test_tools/reliable_quic_stream_peer.cc
@@ -39,50 +39,7 @@
   return stream->rst_sent_;
 }
 
-// static
-void ReliableQuicStreamPeer::SetFlowControlSendOffset(
-    ReliableQuicStream* stream,
-    QuicStreamOffset offset) {
-  stream->flow_control_send_limit_ = offset;
-}
 
-// static
-void ReliableQuicStreamPeer::SetFlowControlReceiveOffset(
-    ReliableQuicStream* stream,
-    QuicStreamOffset offset) {
-  stream->flow_control_receive_window_offset_bytes_ = offset;
-}
-
-// static
-void ReliableQuicStreamPeer::SetFlowControlMaxReceiveWindow(
-    ReliableQuicStream* stream,
-    uint64 window_size) {
-  stream->max_flow_control_receive_window_bytes_ = window_size;
-}
-
-// static
-QuicStreamOffset ReliableQuicStreamPeer::SendWindowOffset(
-    ReliableQuicStream* stream) {
-  return stream->flow_control_send_limit_;
-}
-
-// static
-QuicStreamOffset ReliableQuicStreamPeer::SendWindowSize(
-    ReliableQuicStream* stream) {
-  return stream->SendWindowSize();
-}
-
-// static
-QuicStreamOffset ReliableQuicStreamPeer::ReceiveWindowOffset(
-    ReliableQuicStream* stream) {
-  return stream->flow_control_receive_window_offset_bytes_;
-}
-
-// static
-uint64 ReliableQuicStreamPeer::ReceiveWindowSize(ReliableQuicStream* stream) {
-  return stream->flow_control_receive_window_offset_bytes_ -
-         stream->TotalReceivedBytes();
-}
 
 // static
 uint32 ReliableQuicStreamPeer::SizeOfQueuedData(ReliableQuicStream* stream) {
diff --git a/net/quic/test_tools/reliable_quic_stream_peer.h b/net/quic/test_tools/reliable_quic_stream_peer.h
index 38d4b1e..c23bf50 100644
--- a/net/quic/test_tools/reliable_quic_stream_peer.h
+++ b/net/quic/test_tools/reliable_quic_stream_peer.h
@@ -24,17 +24,6 @@
   static bool FinSent(ReliableQuicStream* stream);
   static bool RstSent(ReliableQuicStream* stream);
 
-  static void SetFlowControlSendOffset(ReliableQuicStream* stream,
-                                       QuicStreamOffset offset);
-  static void SetFlowControlReceiveOffset(ReliableQuicStream* stream,
-                                          QuicStreamOffset offset);
-  static void SetFlowControlMaxReceiveWindow(ReliableQuicStream* stream,
-                                             uint64 window_size);
-  static QuicStreamOffset SendWindowOffset(ReliableQuicStream* stream);
-  static uint64 SendWindowSize(ReliableQuicStream* stream);
-  static QuicStreamOffset ReceiveWindowOffset(ReliableQuicStream* stream);
-  static uint64 ReceiveWindowSize(ReliableQuicStream* stream);
-
   static uint32 SizeOfQueuedData(ReliableQuicStream* stream);
 
  private:
diff --git a/net/quic/test_tools/simple_quic_framer.cc b/net/quic/test_tools/simple_quic_framer.cc
index 6c1efb1..e780f6f 100644
--- a/net/quic/test_tools/simple_quic_framer.cc
+++ b/net/quic/test_tools/simple_quic_framer.cc
@@ -36,9 +36,14 @@
 
   virtual void OnPacket() OVERRIDE {}
   virtual void OnPublicResetPacket(
-      const QuicPublicResetPacket& packet) OVERRIDE {}
+      const QuicPublicResetPacket& packet) OVERRIDE {
+    public_reset_packet_.reset(new QuicPublicResetPacket(packet));
+  }
   virtual void OnVersionNegotiationPacket(
-      const QuicVersionNegotiationPacket& packet) OVERRIDE {}
+      const QuicVersionNegotiationPacket& packet) OVERRIDE {
+    version_negotiation_packet_.reset(
+        new QuicVersionNegotiationPacket(packet));
+  }
   virtual void OnRevivedPacket() OVERRIDE {}
 
   virtual bool OnUnauthenticatedPublicHeader(
@@ -85,6 +90,11 @@
     return true;
   }
 
+  virtual bool OnPingFrame(const QuicPingFrame& frame) OVERRIDE {
+    ping_frames_.push_back(frame);
+    return true;
+  }
+
   virtual void OnFecData(const QuicFecData& fec) OVERRIDE {
     fec_data_ = fec;
     fec_redundancy_ = fec_data_.redundancy.as_string();
@@ -140,19 +150,31 @@
   const vector<QuicStopWaitingFrame>& stop_waiting_frames() const {
     return stop_waiting_frames_;
   }
+  const vector<QuicPingFrame>& ping_frames() const {
+    return ping_frames_;
+  }
   const QuicFecData& fec_data() const {
     return fec_data_;
   }
+  const QuicVersionNegotiationPacket* version_negotiation_packet() const {
+    return version_negotiation_packet_.get();
+  }
+  const QuicPublicResetPacket* public_reset_packet() const {
+    return public_reset_packet_.get();
+  }
 
  private:
   QuicErrorCode error_;
   bool has_header_;
   QuicPacketHeader header_;
   QuicFecData fec_data_;
+  scoped_ptr<QuicVersionNegotiationPacket> version_negotiation_packet_;
+  scoped_ptr<QuicPublicResetPacket> public_reset_packet_;
   string fec_redundancy_;
   vector<QuicAckFrame> ack_frames_;
   vector<QuicCongestionFeedbackFrame> feedback_frames_;
   vector<QuicStopWaitingFrame> stop_waiting_frames_;
+  vector<QuicPingFrame> ping_frames_;
   vector<QuicStreamFrame> stream_frames_;
   vector<QuicRstStreamFrame> rst_stream_frames_;
   vector<QuicGoAwayFrame> goaway_frames_;
@@ -187,6 +209,11 @@
   return framer_.ProcessPacket(packet);
 }
 
+void SimpleQuicFramer::Reset() {
+  visitor_.reset(new SimpleFramerVisitor);
+}
+
+
 const QuicPacketHeader& SimpleQuicFramer::header() const {
   return visitor_->header();
 }
@@ -195,6 +222,15 @@
   return visitor_->fec_data();
 }
 
+const QuicVersionNegotiationPacket*
+SimpleQuicFramer::version_negotiation_packet() const {
+  return visitor_->version_negotiation_packet();
+}
+
+const QuicPublicResetPacket* SimpleQuicFramer::public_reset_packet() const {
+  return visitor_->public_reset_packet();
+}
+
 QuicFramer* SimpleQuicFramer::framer() {
   return &framer_;
 }
@@ -206,6 +242,7 @@
       rst_stream_frames().size() +
       stop_waiting_frames().size() +
       stream_frames().size() +
+      ping_frames().size() +
       connection_close_frames().size();
 }
 
@@ -218,6 +255,10 @@
   return visitor_->stop_waiting_frames();
 }
 
+const vector<QuicPingFrame>& SimpleQuicFramer::ping_frames() const {
+  return visitor_->ping_frames();
+}
+
 const vector<QuicStreamFrame>& SimpleQuicFramer::stream_frames() const {
   return visitor_->stream_frames();
 }
diff --git a/net/quic/test_tools/simple_quic_framer.h b/net/quic/test_tools/simple_quic_framer.h
index 6f4908a..7a31014 100644
--- a/net/quic/test_tools/simple_quic_framer.h
+++ b/net/quic/test_tools/simple_quic_framer.h
@@ -35,6 +35,7 @@
 
   bool ProcessPacket(const QuicEncryptedPacket& packet);
   bool ProcessPacket(const QuicPacket& packet);
+  void Reset();
 
   const QuicPacketHeader& header() const;
   size_t num_frames() const;
@@ -42,12 +43,20 @@
   const std::vector<QuicConnectionCloseFrame>& connection_close_frames() const;
   const std::vector<QuicCongestionFeedbackFrame>& feedback_frames() const;
   const std::vector<QuicStopWaitingFrame>& stop_waiting_frames() const;
+  const std::vector<QuicPingFrame>& ping_frames() const;
   const std::vector<QuicGoAwayFrame>& goaway_frames() const;
   const std::vector<QuicRstStreamFrame>& rst_stream_frames() const;
   const std::vector<QuicStreamFrame>& stream_frames() const;
   const QuicFecData& fec_data() const;
+  const QuicVersionNegotiationPacket* version_negotiation_packet() const;
+  const QuicPublicResetPacket* public_reset_packet() const;
+
   QuicFramer* framer();
 
+  void SetSupportedVersions(const QuicVersionVector& versions) {
+    framer_.SetSupportedVersions(versions);
+  }
+
  private:
   QuicFramer framer_;
   scoped_ptr<SimpleFramerVisitor> visitor_;
diff --git a/net/server/http_server_unittest.cc b/net/server/http_server_unittest.cc
index 3f14d1f..87c35b1 100644
--- a/net/server/http_server_unittest.cc
+++ b/net/server/http_server_unittest.cc
@@ -96,8 +96,7 @@
     int bytes_received = callback.WaitForResult();
     if (bytes_received <= 0)
       return false;
-    std::string io_buffer_contents(read_buffer_->data());
-    *message = io_buffer_contents.substr(0, bytes_received);
+    *message = std::string(read_buffer_->data(), bytes_received);
     return true;
   }
 
@@ -309,7 +308,8 @@
   ASSERT_TRUE(EndsWith(response, "Response!", true));
 }
 
-TEST_F(HttpServerTest, SendRaw) {
+// Flaky on at least OS X and Vista. http://crbug.com/365067.
+TEST_F(HttpServerTest, DISABLED_SendRaw) {
   TestHttpClient client;
   ASSERT_EQ(OK, client.ConnectAndWait(server_address_));
   client.Send("GET /test HTTP/1.1\r\n\r\n");
diff --git a/net/socket/ssl_client_socket_openssl.cc b/net/socket/ssl_client_socket_openssl.cc
index 126ce39..d6345f7 100644
--- a/net/socket/ssl_client_socket_openssl.cc
+++ b/net/socket/ssl_client_socket_openssl.cc
@@ -271,13 +271,11 @@
     SSL_CTX_set_client_cert_cb(ssl_ctx_.get(), ClientCertCallback);
     SSL_CTX_set_channel_id_cb(ssl_ctx_.get(), ChannelIDCallback);
     SSL_CTX_set_verify(ssl_ctx_.get(), SSL_VERIFY_PEER, NULL);
-#if defined(OPENSSL_NPN_NEGOTIATED)
     // TODO(kristianm): Only select this if ssl_config_.next_proto is not empty.
     // It would be better if the callback were not a global setting,
     // but that is an OpenSSL issue.
     SSL_CTX_set_next_proto_select_cb(ssl_ctx_.get(), SelectNextProtoCallback,
                                      NULL);
-#endif
   }
 
   static std::string GetSessionCacheKey(const SSL* ssl) {
@@ -821,22 +819,16 @@
   bool tls1_enabled = (ssl_config_.version_min <= SSL_PROTOCOL_VERSION_TLS1 &&
                        ssl_config_.version_max >= SSL_PROTOCOL_VERSION_TLS1);
   options.ConfigureFlag(SSL_OP_NO_TLSv1, !tls1_enabled);
-#if defined(SSL_OP_NO_TLSv1_1)
   bool tls1_1_enabled =
       (ssl_config_.version_min <= SSL_PROTOCOL_VERSION_TLS1_1 &&
        ssl_config_.version_max >= SSL_PROTOCOL_VERSION_TLS1_1);
   options.ConfigureFlag(SSL_OP_NO_TLSv1_1, !tls1_1_enabled);
-#endif
-#if defined(SSL_OP_NO_TLSv1_2)
   bool tls1_2_enabled =
       (ssl_config_.version_min <= SSL_PROTOCOL_VERSION_TLS1_2 &&
        ssl_config_.version_max >= SSL_PROTOCOL_VERSION_TLS1_2);
   options.ConfigureFlag(SSL_OP_NO_TLSv1_2, !tls1_2_enabled);
-#endif
 
-#if defined(SSL_OP_NO_COMPRESSION)
   options.ConfigureFlag(SSL_OP_NO_COMPRESSION, true);
-#endif
 
   // TODO(joth): Set this conditionally, see http://crbug.com/55410
   options.ConfigureFlag(SSL_OP_LEGACY_SERVER_CONNECT, true);
@@ -847,13 +839,10 @@
   // Same as above, this time for the SSL mode.
   SslSetClearMask mode;
 
-#if defined(SSL_MODE_RELEASE_BUFFERS)
   mode.ConfigureFlag(SSL_MODE_RELEASE_BUFFERS, true);
-#endif
 
-#if defined(SSL_MODE_SMALL_BUFFERS)
-  mode.ConfigureFlag(SSL_MODE_SMALL_BUFFERS, true);
-#endif
+  mode.ConfigureFlag(SSL_MODE_HANDSHAKE_CUTTHROUGH,
+                     ssl_config_.false_start_enabled);
 
   SSL_set_mode(ssl_, mode.set_mask);
   SSL_clear_mode(ssl_, mode.clear_mask);
@@ -1535,7 +1524,6 @@
                                                     unsigned char* outlen,
                                                     const unsigned char* in,
                                                     unsigned int inlen) {
-#if defined(OPENSSL_NPN_NEGOTIATED)
   if (ssl_config_.next_protos.empty()) {
     *out = reinterpret_cast<uint8*>(
         const_cast<char*>(kDefaultSupportedNPNProtocol));
@@ -1575,7 +1563,6 @@
   npn_proto_.assign(reinterpret_cast<const char*>(*out), *outlen);
   server_protos_.assign(reinterpret_cast<const char*>(in), inlen);
   DVLOG(2) << "next protocol: '" << npn_proto_ << "' status: " << npn_status_;
-#endif
   return SSL_TLSEXT_ERR_OK;
 }
 
diff --git a/net/socket/ssl_client_socket_openssl_unittest.cc b/net/socket/ssl_client_socket_openssl_unittest.cc
index 48a4813..91c9a93 100644
--- a/net/socket/ssl_client_socket_openssl_unittest.cc
+++ b/net/socket/ssl_client_socket_openssl_unittest.cc
@@ -49,6 +49,8 @@
 
 namespace {
 
+// These client auth tests are currently dependent on OpenSSL's struct X509.
+#if defined(USE_OPENSSL_CERTS)
 typedef OpenSSLClientKeyStore::ScopedEVP_PKEY ScopedEVP_PKEY;
 
 // BIO_free is a macro, it can't be used as a template parameter.
@@ -360,6 +362,7 @@
   EXPECT_EQ(ERR_UNEXPECTED, rv);
   EXPECT_FALSE(sock_->IsConnected());
 }
+#endif  // defined(USE_OPENSSL_CERTS)
 
 }  // namespace
 }  // namespace net
diff --git a/net/socket/ssl_client_socket_unittest.cc b/net/socket/ssl_client_socket_unittest.cc
index 7dd9d64..05844cd 100644
--- a/net/socket/ssl_client_socket_unittest.cc
+++ b/net/socket/ssl_client_socket_unittest.cc
@@ -6,6 +6,7 @@
 
 #include "base/callback_helpers.h"
 #include "base/memory/ref_counted.h"
+#include "base/run_loop.h"
 #include "net/base/address_list.h"
 #include "net/base/io_buffer.h"
 #include "net/base/net_errors.h"
@@ -327,144 +328,204 @@
   // Socket implementation:
   virtual int Read(IOBuffer* buf,
                    int buf_len,
-                   const CompletionCallback& callback) OVERRIDE {
-    return read_state_.RunWrappedFunction(buf, buf_len, callback);
-  }
+                   const CompletionCallback& callback) OVERRIDE;
   virtual int Write(IOBuffer* buf,
                     int buf_len,
-                    const CompletionCallback& callback) OVERRIDE {
-    return write_state_.RunWrappedFunction(buf, buf_len, callback);
-  }
+                    const CompletionCallback& callback) OVERRIDE;
 
-  // Causes the next call to Read() to return ERR_IO_PENDING, not completing
-  // (invoking the callback) until UnblockRead() has been called and the
-  // underlying transport has completed.
-  void SetNextReadShouldBlock() { read_state_.SetShouldBlock(); }
-  void UnblockRead() { read_state_.Unblock(); }
+  // Blocks read results on the socket. Reads will not complete until
+  // UnblockReadResult() has been called and a result is ready from the
+  // underlying transport. Note: if BlockReadResult() is called while there is a
+  // hanging asynchronous Read(), that Read is blocked.
+  void BlockReadResult();
+  void UnblockReadResult();
 
-  // Causes the next call to Write() to return ERR_IO_PENDING, not completing
-  // (invoking the callback) until UnblockWrite() has been called and the
-  // underlying transport has completed.
-  void SetNextWriteShouldBlock() { write_state_.SetShouldBlock(); }
-  void UnblockWrite() { write_state_.Unblock(); }
+  // Waits for the blocked Read() call to be complete at the underlying
+  // transport.
+  void WaitForReadResult();
+
+  // Causes the next call to Write() to return ERR_IO_PENDING, not beginning the
+  // underlying transport until UnblockWrite() has been called. Note: if there
+  // is a pending asynchronous write, it is NOT blocked. For purposes of
+  // blocking writes, data is considered to have reached the underlying
+  // transport as soon as Write() is called.
+  void BlockWrite();
+  void UnblockWrite();
+
+  // Waits for the blocked Write() call to be scheduled.
+  void WaitForWrite();
 
  private:
-  // Tracks the state for simulating a blocking Read/Write operation.
-  class BlockingState {
-   public:
-    // Wrapper for the underlying Socket function to call (ie: Read/Write).
-    typedef base::Callback<int(IOBuffer*, int, const CompletionCallback&)>
-        WrappedSocketFunction;
+  // Handles completion from the underlying transport read.
+  void OnReadCompleted(int result);
 
-    explicit BlockingState(const WrappedSocketFunction& function);
-    ~BlockingState() {}
+  // True if read callbacks are blocked.
+  bool should_block_read_;
 
-    // Sets the next call to RunWrappedFunction() to block, returning
-    // ERR_IO_PENDING and not invoking the user callback until Unblock() is
-    // called.
-    void SetShouldBlock();
+  // The user callback for the pending read call.
+  CompletionCallback pending_read_callback_;
 
-    // Unblocks the currently blocked pending function, invoking the user
-    // callback if the results are immediately available.
-    // Note: It's not valid to call this unless SetShouldBlock() has been
-    // called beforehand.
-    void Unblock();
+  // The result for the blocked read callback, or ERR_IO_PENDING if not
+  // completed.
+  int pending_read_result_;
 
-    // Performs the wrapped socket function on the underlying transport. If
-    // configured to block via SetShouldBlock(), then |user_callback| will not
-    // be invoked until Unblock() has been called.
-    int RunWrappedFunction(IOBuffer* buf,
-                           int len,
-                           const CompletionCallback& user_callback);
+  // WaitForReadResult() wait loop.
+  scoped_ptr<base::RunLoop> read_loop_;
 
-   private:
-    // Handles completion from the underlying wrapped socket function.
-    void OnCompleted(int result);
+  // True if write calls are blocked.
+  bool should_block_write_;
 
-    WrappedSocketFunction wrapped_function_;
-    bool should_block_;
-    bool have_result_;
-    int pending_result_;
-    CompletionCallback user_callback_;
-  };
+  // The buffer for the pending write, or NULL if not scheduled.
+  scoped_refptr<IOBuffer> pending_write_buf_;
 
-  BlockingState read_state_;
-  BlockingState write_state_;
+  // The callback for the pending write call.
+  CompletionCallback pending_write_callback_;
 
-  DISALLOW_COPY_AND_ASSIGN(FakeBlockingStreamSocket);
+  // The length for the pending write, or -1 if not scheduled.
+  int pending_write_len_;
+
+  // WaitForWrite() wait loop.
+  scoped_ptr<base::RunLoop> write_loop_;
 };
 
 FakeBlockingStreamSocket::FakeBlockingStreamSocket(
     scoped_ptr<StreamSocket> transport)
     : WrappedStreamSocket(transport.Pass()),
-      read_state_(base::Bind(&Socket::Read,
-                             base::Unretained(transport_.get()))),
-      write_state_(base::Bind(&Socket::Write,
-                              base::Unretained(transport_.get()))) {}
+      should_block_read_(false),
+      pending_read_result_(ERR_IO_PENDING),
+      should_block_write_(false),
+      pending_write_len_(-1) {}
 
-FakeBlockingStreamSocket::BlockingState::BlockingState(
-    const WrappedSocketFunction& function)
-    : wrapped_function_(function),
-      should_block_(false),
-      have_result_(false),
-      pending_result_(OK) {}
+int FakeBlockingStreamSocket::Read(IOBuffer* buf,
+                                   int len,
+                                   const CompletionCallback& callback) {
+  DCHECK(pending_read_callback_.is_null());
+  DCHECK_EQ(ERR_IO_PENDING, pending_read_result_);
+  DCHECK(!callback.is_null());
 
-void FakeBlockingStreamSocket::BlockingState::SetShouldBlock() {
-  DCHECK(!should_block_);
-  should_block_ = true;
-}
-
-void FakeBlockingStreamSocket::BlockingState::Unblock() {
-  DCHECK(should_block_);
-  should_block_ = false;
-
-  // If the operation is still pending in the underlying transport, immediately
-  // return - OnCompleted() will handle invoking the callback once the transport
-  // has completed.
-  if (!have_result_)
-    return;
-
-  have_result_ = false;
-
-  base::ResetAndReturn(&user_callback_).Run(pending_result_);
-}
-
-int FakeBlockingStreamSocket::BlockingState::RunWrappedFunction(
-    IOBuffer* buf,
-    int len,
-    const CompletionCallback& callback) {
-
-  // The callback to be called by the underlying transport. Either forward
-  // directly to the user's callback if not set to block, or intercept it with
-  // OnCompleted so that the user's callback is not invoked until Unblock() is
-  // called.
-  CompletionCallback transport_callback =
-      !should_block_ ? callback : base::Bind(&BlockingState::OnCompleted,
-                                             base::Unretained(this));
-  int rv = wrapped_function_.Run(buf, len, transport_callback);
-  if (should_block_) {
-    user_callback_ = callback;
-    // May have completed synchronously.
-    have_result_ = (rv != ERR_IO_PENDING);
-    pending_result_ = rv;
-    return ERR_IO_PENDING;
+  int rv = transport_->Read(buf, len, base::Bind(
+      &FakeBlockingStreamSocket::OnReadCompleted, base::Unretained(this)));
+  if (rv == ERR_IO_PENDING) {
+    // Save the callback to be called later.
+    pending_read_callback_ = callback;
+  } else if (should_block_read_) {
+    // Save the callback and read result to be called later.
+    pending_read_callback_ = callback;
+    OnReadCompleted(rv);
+    rv = ERR_IO_PENDING;
   }
-
   return rv;
 }
 
-void FakeBlockingStreamSocket::BlockingState::OnCompleted(int result) {
-  if (should_block_) {
+int FakeBlockingStreamSocket::Write(IOBuffer* buf,
+                                    int len,
+                                    const CompletionCallback& callback) {
+  DCHECK(buf);
+  DCHECK_LE(0, len);
+
+  if (!should_block_write_)
+    return transport_->Write(buf, len, callback);
+
+  // Schedule the write, but do nothing.
+  DCHECK(!pending_write_buf_);
+  DCHECK_EQ(-1, pending_write_len_);
+  DCHECK(pending_write_callback_.is_null());
+  DCHECK(!callback.is_null());
+  pending_write_buf_ = buf;
+  pending_write_len_ = len;
+  pending_write_callback_ = callback;
+
+  // Stop the write loop, if any.
+  if (write_loop_)
+    write_loop_->Quit();
+  return ERR_IO_PENDING;
+}
+
+void FakeBlockingStreamSocket::BlockReadResult() {
+  DCHECK(!should_block_read_);
+  should_block_read_ = true;
+}
+
+void FakeBlockingStreamSocket::UnblockReadResult() {
+  DCHECK(should_block_read_);
+  should_block_read_ = false;
+
+  // If the operation is still pending in the underlying transport, immediately
+  // return - OnReadCompleted() will handle invoking the callback once the
+  // transport has completed.
+  if (pending_read_result_ == ERR_IO_PENDING)
+    return;
+  int result = pending_read_result_;
+  pending_read_result_ = ERR_IO_PENDING;
+  base::ResetAndReturn(&pending_read_callback_).Run(result);
+}
+
+void FakeBlockingStreamSocket::WaitForReadResult() {
+  DCHECK(should_block_read_);
+  DCHECK(!read_loop_);
+
+  if (pending_read_result_ != ERR_IO_PENDING)
+    return;
+  read_loop_.reset(new base::RunLoop);
+  read_loop_->Run();
+  read_loop_.reset();
+  DCHECK_NE(ERR_IO_PENDING, pending_read_result_);
+}
+
+void FakeBlockingStreamSocket::BlockWrite() {
+  DCHECK(!should_block_write_);
+  should_block_write_ = true;
+}
+
+void FakeBlockingStreamSocket::UnblockWrite() {
+  DCHECK(should_block_write_);
+  should_block_write_ = false;
+
+  // Do nothing if UnblockWrite() was called after BlockWrite(),
+  // without a Write() in between.
+  if (!pending_write_buf_)
+    return;
+
+  int rv = transport_->Write(pending_write_buf_, pending_write_len_,
+                             pending_write_callback_);
+  pending_write_buf_ = NULL;
+  pending_write_len_ = -1;
+  if (rv == ERR_IO_PENDING) {
+    pending_write_callback_.Reset();
+  } else {
+    base::ResetAndReturn(&pending_write_callback_).Run(rv);
+  }
+}
+
+void FakeBlockingStreamSocket::WaitForWrite() {
+  DCHECK(should_block_write_);
+  DCHECK(!write_loop_);
+
+  if (pending_write_buf_)
+    return;
+  write_loop_.reset(new base::RunLoop);
+  write_loop_->Run();
+  write_loop_.reset();
+  DCHECK(pending_write_buf_);
+}
+
+void FakeBlockingStreamSocket::OnReadCompleted(int result) {
+  DCHECK_EQ(ERR_IO_PENDING, pending_read_result_);
+  DCHECK(!pending_read_callback_.is_null());
+
+  if (should_block_read_) {
     // Store the result so that the callback can be invoked once Unblock() is
     // called.
-    have_result_ = true;
-    pending_result_ = result;
-    return;
-  }
+    pending_read_result_ = result;
 
-  // Otherwise, the Unblock() function was called before the underlying
-  // transport completed, so run the user's callback immediately.
-  base::ResetAndReturn(&user_callback_).Run(result);
+    // Stop the WaitForReadResult() call if any.
+    if (read_loop_)
+      read_loop_->Quit();
+  } else {
+    // Either the Read() was never blocked or UnblockReadResult() was called
+    // before the Read() completed. Either way, run the callback.
+    base::ResetAndReturn(&pending_read_callback_).Run(result);
+  }
 }
 
 // CompletionCallback that will delete the associated StreamSocket when
@@ -565,6 +626,93 @@
   }
 };
 
+class SSLClientSocketFalseStartTest : public SSLClientSocketTest {
+ protected:
+  void TestFalseStart(const SpawnedTestServer::SSLOptions& server_options,
+                      const SSLConfig& client_config,
+                      bool expect_false_start) {
+    SpawnedTestServer test_server(SpawnedTestServer::TYPE_HTTPS,
+                                  server_options,
+                                  base::FilePath());
+    ASSERT_TRUE(test_server.Start());
+
+    AddressList addr;
+    ASSERT_TRUE(test_server.GetAddressList(&addr));
+
+    TestCompletionCallback callback;
+    scoped_ptr<StreamSocket> real_transport(
+        new TCPClientSocket(addr, NULL, NetLog::Source()));
+    scoped_ptr<FakeBlockingStreamSocket> transport(
+        new FakeBlockingStreamSocket(real_transport.Pass()));
+    int rv = callback.GetResult(transport->Connect(callback.callback()));
+    EXPECT_EQ(OK, rv);
+
+    FakeBlockingStreamSocket* raw_transport = transport.get();
+    scoped_ptr<SSLClientSocket> sock(
+        CreateSSLClientSocket(transport.PassAs<StreamSocket>(),
+                              test_server.host_port_pair(),
+                              client_config));
+
+    // Connect. Stop before the client processes the first server leg
+    // (ServerHello, etc.)
+    raw_transport->BlockReadResult();
+    rv = sock->Connect(callback.callback());
+    EXPECT_EQ(ERR_IO_PENDING, rv);
+    raw_transport->WaitForReadResult();
+
+    // Release the ServerHello and wait for the client to write
+    // ClientKeyExchange, etc. (A proxy for waiting for the entirety of the
+    // server's leg to complete, since it may span multiple reads.)
+    EXPECT_FALSE(callback.have_result());
+    raw_transport->BlockWrite();
+    raw_transport->UnblockReadResult();
+    raw_transport->WaitForWrite();
+
+    // And, finally, release that and block the next server leg
+    // (ChangeCipherSpec, Finished). Note: callback.have_result() may or may not
+    // be true at this point depending on whether the SSL implementation waits
+    // for the client second leg to clear the internal write buffer and hit the
+    // network.
+    raw_transport->BlockReadResult();
+    raw_transport->UnblockWrite();
+
+    if (expect_false_start) {
+      // When False Starting, the handshake should complete before receiving the
+      // Change Cipher Spec and Finished messages.
+      rv = callback.GetResult(rv);
+      EXPECT_EQ(OK, rv);
+      EXPECT_TRUE(sock->IsConnected());
+
+      const char request_text[] = "GET / HTTP/1.0\r\n\r\n";
+      static const int kRequestTextSize =
+          static_cast<int>(arraysize(request_text) - 1);
+      scoped_refptr<IOBuffer> request_buffer(new IOBuffer(kRequestTextSize));
+      memcpy(request_buffer->data(), request_text, kRequestTextSize);
+
+      // Write the request.
+      rv = callback.GetResult(sock->Write(request_buffer.get(),
+                                          kRequestTextSize,
+                                          callback.callback()));
+      EXPECT_EQ(kRequestTextSize, rv);
+
+      // The read will hang; it's waiting for the peer to complete the
+      // handshake, and the handshake is still blocked.
+      scoped_refptr<IOBuffer> buf(new IOBuffer(4096));
+      rv = sock->Read(buf.get(), 4096, callback.callback());
+
+      // After releasing reads, the connection proceeds.
+      raw_transport->UnblockReadResult();
+      rv = callback.GetResult(rv);
+      EXPECT_LT(0, rv);
+    } else {
+      // False Start is not enabled, so the handshake will not complete because
+      // the server second leg is blocked.
+      base::RunLoop().RunUntilIdle();
+      EXPECT_FALSE(callback.have_result());
+    }
+  }
+};
+
 //-----------------------------------------------------------------------------
 
 // LogContainsSSLConnectEndEvent returns true if the given index in the given
@@ -997,7 +1145,7 @@
   // Simulate an unclean/forcible shutdown on the underlying socket.
   // However, simulate this error asynchronously.
   raw_error_socket->SetNextWriteError(ERR_CONNECTION_RESET);
-  raw_transport->SetNextWriteShouldBlock();
+  raw_transport->BlockWrite();
 
   // This write should complete synchronously, because the TLS ciphertext
   // can be created and placed into the outgoing buffers independent of the
@@ -1142,8 +1290,8 @@
   raw_error_socket->SetNextWriteError(ERR_CONNECTION_RESET);
   // ... but have those errors returned asynchronously. Because the Write() will
   // return first, this will trigger the error.
-  raw_transport->SetNextReadShouldBlock();
-  raw_transport->SetNextWriteShouldBlock();
+  raw_transport->BlockReadResult();
+  raw_transport->BlockWrite();
 
   // Enqueue a Read() before calling Write(), which should "hang" due to
   // the ERR_IO_PENDING caused by SetReadShouldBlock() and thus return.
@@ -1267,7 +1415,7 @@
 
   // Start a hanging read.
   TestCompletionCallback read_callback;
-  raw_transport->SetNextReadShouldBlock();
+  raw_transport->BlockReadResult();
   scoped_refptr<IOBuffer> buf(new IOBuffer(4096));
   rv = sock->Read(buf.get(), 4096, read_callback.callback());
   EXPECT_EQ(ERR_IO_PENDING, rv);
@@ -1311,7 +1459,7 @@
 #endif
 
   // Release the read. Some bytes should go through.
-  raw_transport->UnblockRead();
+  raw_transport->UnblockReadResult();
   rv = read_callback.WaitForResult();
 
   // Per the fix for http://crbug.com/249848, write failures currently break
@@ -2183,4 +2331,36 @@
   // attempt to read one byte extra.
 }
 
+TEST_F(SSLClientSocketFalseStartTest, FalseStartEnabled) {
+  // False Start requires NPN and a forward-secret cipher suite.
+  SpawnedTestServer::SSLOptions server_options;
+  server_options.key_exchanges =
+      SpawnedTestServer::SSLOptions::KEY_EXCHANGE_DHE_RSA;
+  server_options.enable_npn = true;
+  SSLConfig client_config;
+  client_config.next_protos.push_back("http/1.1");
+  TestFalseStart(server_options, client_config, true);
+}
+
+// Test that False Start is disabled without NPN.
+TEST_F(SSLClientSocketFalseStartTest, NoNPN) {
+  SpawnedTestServer::SSLOptions server_options;
+  server_options.key_exchanges =
+      SpawnedTestServer::SSLOptions::KEY_EXCHANGE_DHE_RSA;
+  SSLConfig client_config;
+  client_config.next_protos.clear();
+  TestFalseStart(server_options, client_config, false);
+}
+
+// Test that False Start is disabled without a forward-secret cipher suite.
+TEST_F(SSLClientSocketFalseStartTest, NoForwardSecrecy) {
+  SpawnedTestServer::SSLOptions server_options;
+  server_options.key_exchanges =
+      SpawnedTestServer::SSLOptions::KEY_EXCHANGE_RSA;
+  server_options.enable_npn = true;
+  SSLConfig client_config;
+  client_config.next_protos.push_back("http/1.1");
+  TestFalseStart(server_options, client_config, false);
+}
+
 }  // namespace net
diff --git a/net/socket_stream/OWNERS b/net/socket_stream/OWNERS
index 8ef489a..a2bac60 100644
--- a/net/socket_stream/OWNERS
+++ b/net/socket_stream/OWNERS
@@ -1,8 +1 @@
 tyoshino@chromium.org
-
-# Have been inactive for a while.
-yutak@chromium.org
-toyoshim@chromium.org
-
-# On leave
-bashi@chromium.org
diff --git a/net/spdy/spdy_session.cc b/net/spdy/spdy_session.cc
index c7d5fa2..17a6c4b 100644
--- a/net/spdy/spdy_session.cc
+++ b/net/spdy/spdy_session.cc
@@ -1110,7 +1110,7 @@
   if (active_streams_.empty() && connection_->IsPoolStalled()) {
     CloseSessionResult result =
         DoCloseSession(ERR_CONNECTION_CLOSED, "Closing idle connection.");
-    DCHECK_NE(result, SESSION_ALREADY_CLOSED);
+    CHECK_NE(result, SESSION_ALREADY_CLOSED);
   }
 }
 
@@ -1155,25 +1155,25 @@
 
 void SpdySession::PumpReadLoop(ReadState expected_read_state, int result) {
   CHECK(!in_io_loop_);
-  DCHECK_NE(availability_state_, STATE_CLOSED);
-  DCHECK_EQ(read_state_, expected_read_state);
+  CHECK_NE(availability_state_, STATE_CLOSED);
+  CHECK_EQ(read_state_, expected_read_state);
 
   result = DoReadLoop(expected_read_state, result);
 
   if (availability_state_ == STATE_CLOSED) {
-    DCHECK_EQ(result, error_on_close_);
-    DCHECK_LT(error_on_close_, ERR_IO_PENDING);
+    CHECK_EQ(result, error_on_close_);
+    CHECK_LT(error_on_close_, ERR_IO_PENDING);
     RemoveFromPool();
     return;
   }
 
-  DCHECK(result == OK || result == ERR_IO_PENDING);
+  CHECK(result == OK || result == ERR_IO_PENDING);
 }
 
 int SpdySession::DoReadLoop(ReadState expected_read_state, int result) {
   CHECK(!in_io_loop_);
-  DCHECK_NE(availability_state_, STATE_CLOSED);
-  DCHECK_EQ(read_state_, expected_read_state);
+  CHECK_NE(availability_state_, STATE_CLOSED);
+  CHECK_EQ(read_state_, expected_read_state);
 
   in_io_loop_ = true;
 
@@ -1184,7 +1184,7 @@
   while (true) {
     switch (read_state_) {
       case READ_STATE_DO_READ:
-        DCHECK_EQ(result, OK);
+        CHECK_EQ(result, OK);
         result = DoRead();
         break;
       case READ_STATE_DO_READ_COMPLETE:
@@ -1198,8 +1198,8 @@
     }
 
     if (availability_state_ == STATE_CLOSED) {
-      DCHECK_EQ(result, error_on_close_);
-      DCHECK_LT(result, ERR_IO_PENDING);
+      CHECK_EQ(result, error_on_close_);
+      CHECK_LT(result, ERR_IO_PENDING);
       break;
     }
 
@@ -1225,7 +1225,7 @@
 
 int SpdySession::DoRead() {
   CHECK(in_io_loop_);
-  DCHECK_NE(availability_state_, STATE_CLOSED);
+  CHECK_NE(availability_state_, STATE_CLOSED);
 
   CHECK(connection_);
   CHECK(connection_->socket());
@@ -1368,19 +1368,16 @@
     }
 
     if (stream.get())
-      DCHECK(!stream->IsClosed());
+      CHECK(!stream->IsClosed());
 
     // Activate the stream only when sending the SYN_STREAM frame to
     // guarantee monotonically-increasing stream IDs.
     if (frame_type == SYN_STREAM) {
-      if (stream.get() && stream->stream_id() == 0) {
-        scoped_ptr<SpdyStream> owned_stream =
-            ActivateCreatedStream(stream.get());
-        InsertActivatedStream(owned_stream.Pass());
-      } else {
-        NOTREACHED();
-        return ERR_UNEXPECTED;
-      }
+      CHECK(stream.get());
+      CHECK_EQ(stream->stream_id(), 0u);
+      scoped_ptr<SpdyStream> owned_stream =
+          ActivateCreatedStream(stream.get());
+      InsertActivatedStream(owned_stream.Pass());
     }
 
     in_flight_write_ = producer->ProduceBuffer();
@@ -1532,14 +1529,14 @@
   if (active_streams_.empty() && availability_state_ != STATE_CLOSED) {
     CloseSessionResult result =
         DoCloseSession(ERR_CONNECTION_CLOSED, "Finished going away");
-    DCHECK_NE(result, SESSION_ALREADY_CLOSED);
+    CHECK_NE(result, SESSION_ALREADY_CLOSED);
   }
 }
 
 SpdySession::CloseSessionResult SpdySession::DoCloseSession(
     Error err,
     const std::string& description) {
-  DCHECK_LT(err, ERR_IO_PENDING);
+  CHECK_LT(err, ERR_IO_PENDING);
 
   if (availability_state_ == STATE_CLOSED)
     return SESSION_ALREADY_CLOSED;
@@ -1552,7 +1549,7 @@
   UMA_HISTOGRAM_CUSTOM_COUNTS("Net.SpdySession.BytesRead.OtherErrors",
                               total_bytes_received_, 1, 100000000, 50);
 
-  DCHECK(pool_);
+  CHECK(pool_);
   if (availability_state_ != STATE_GOING_AWAY)
     pool_->MakeSessionUnavailable(GetWeakPtr());
 
@@ -1751,14 +1748,14 @@
 }
 
 void SpdySession::InsertCreatedStream(scoped_ptr<SpdyStream> stream) {
-  DCHECK_EQ(stream->stream_id(), 0u);
-  DCHECK(created_streams_.find(stream.get()) == created_streams_.end());
+  CHECK_EQ(stream->stream_id(), 0u);
+  CHECK(created_streams_.find(stream.get()) == created_streams_.end());
   created_streams_.insert(stream.release());
 }
 
 scoped_ptr<SpdyStream> SpdySession::ActivateCreatedStream(SpdyStream* stream) {
-  DCHECK_EQ(stream->stream_id(), 0u);
-  DCHECK(created_streams_.find(stream) != created_streams_.end());
+  CHECK_EQ(stream->stream_id(), 0u);
+  CHECK(created_streams_.find(stream) != created_streams_.end());
   stream->set_stream_id(GetNewStreamId());
   scoped_ptr<SpdyStream> owned_stream(stream);
   created_streams_.erase(stream);
@@ -1767,15 +1764,12 @@
 
 void SpdySession::InsertActivatedStream(scoped_ptr<SpdyStream> stream) {
   SpdyStreamId stream_id = stream->stream_id();
-  DCHECK_NE(stream_id, 0u);
+  CHECK_NE(stream_id, 0u);
   std::pair<ActiveStreamMap::iterator, bool> result =
       active_streams_.insert(
           std::make_pair(stream_id, ActiveStreamInfo(stream.get())));
-  if (result.second) {
-    ignore_result(stream.release());
-  } else {
-    NOTREACHED();
-  }
+  CHECK(result.second);
+  ignore_result(stream.release());
 }
 
 void SpdySession::DeleteStream(scoped_ptr<SpdyStream> stream, int status) {
diff --git a/net/test/android/javatests/src/org/chromium/net/test/util/TestWebServer.java b/net/test/android/javatests/src/org/chromium/net/test/util/TestWebServer.java
index 5378ed4..1971f71 100644
--- a/net/test/android/javatests/src/org/chromium/net/test/util/TestWebServer.java
+++ b/net/test/android/javatests/src/org/chromium/net/test/util/TestWebServer.java
@@ -68,6 +68,7 @@
     public static final String SHUTDOWN_PREFIX = "/shutdown";
 
     private static TestWebServer sInstance;
+    private static TestWebServer sSecureInstance;
     private static Hashtable<Integer, String> sReasons;
 
     private final ServerThread mServerThread;
@@ -103,26 +104,23 @@
      * @throws Exception
      */
     public TestWebServer(boolean ssl) throws Exception {
-        if (sInstance != null) {
-            // attempt to start a new instance while one is still running
-            // shut down the old instance first
-            sInstance.shutdown();
-        }
-        setStaticInstance(this);
         mSsl = ssl;
         if (mSsl) {
+            if (sSecureInstance != null) {
+                sSecureInstance.shutdown();
+            }
             mServerUri = "https://localhost:" + SSL_SERVER_PORT;
         } else {
+            if (sInstance != null) {
+                sInstance.shutdown();
+            }
             mServerUri = "http://localhost:" + SERVER_PORT;
         }
+        setInstance(this, mSsl);
         mServerThread = new ServerThread(this, mSsl);
         mServerThread.start();
     }
 
-    private static void setStaticInstance(TestWebServer instance) {
-        sInstance = instance;
-    }
-
     /**
      * Terminate the http server.
      */
@@ -155,7 +153,15 @@
             throw new IllegalStateException(e);
         }
 
-        setStaticInstance(null);
+        setInstance(null, mSsl);
+    }
+
+    private static void setInstance(TestWebServer instance, boolean isSsl) {
+        if (isSsl) {
+            sSecureInstance = instance;
+        } else {
+            sInstance = instance;
+        }
     }
 
     private static final int RESPONSE_STATUS_NORMAL = 0;
diff --git a/net/test/spawned_test_server/base_test_server.cc b/net/test/spawned_test_server/base_test_server.cc
index ac37c70..a781c6e 100644
--- a/net/test/spawned_test_server/base_test_server.cc
+++ b/net/test/spawned_test_server/base_test_server.cc
@@ -40,6 +40,13 @@
   return BaseTestServer::kLocalhost;
 }
 
+void GetKeyExchangesList(int key_exchange, base::ListValue* values) {
+  if (key_exchange & BaseTestServer::SSLOptions::KEY_EXCHANGE_RSA)
+    values->Append(new base::StringValue("rsa"));
+  if (key_exchange & BaseTestServer::SSLOptions::KEY_EXCHANGE_DHE_RSA)
+    values->Append(new base::StringValue("dhe_rsa"));
+}
+
 void GetCiphersList(int cipher, base::ListValue* values) {
   if (cipher & BaseTestServer::SSLOptions::BULK_CIPHER_RC4)
     values->Append(new base::StringValue("rc4"));
@@ -58,11 +65,13 @@
       ocsp_status(OCSP_OK),
       cert_serial(0),
       request_client_certificate(false),
+      key_exchanges(SSLOptions::KEY_EXCHANGE_ANY),
       bulk_ciphers(SSLOptions::BULK_CIPHER_ANY),
       record_resume(false),
       tls_intolerant(TLS_INTOLERANT_NONE),
       fallback_scsv_enabled(false),
-      staple_ocsp_response(false) {}
+      staple_ocsp_response(false),
+      enable_npn(false) {}
 
 BaseTestServer::SSLOptions::SSLOptions(
     BaseTestServer::SSLOptions::ServerCertificate cert)
@@ -70,11 +79,13 @@
       ocsp_status(OCSP_OK),
       cert_serial(0),
       request_client_certificate(false),
+      key_exchanges(SSLOptions::KEY_EXCHANGE_ANY),
       bulk_ciphers(SSLOptions::BULK_CIPHER_ANY),
       record_resume(false),
       tls_intolerant(TLS_INTOLERANT_NONE),
       fallback_scsv_enabled(false),
-      staple_ocsp_response(false) {}
+      staple_ocsp_response(false),
+      enable_npn(false) {}
 
 BaseTestServer::SSLOptions::~SSLOptions() {}
 
@@ -389,6 +400,11 @@
                      base::Value::CreateIntegerValue(ssl_options_.cert_serial));
     }
 
+    // Check key exchange argument.
+    scoped_ptr<base::ListValue> key_exchange_values(new base::ListValue());
+    GetKeyExchangesList(ssl_options_.key_exchanges, key_exchange_values.get());
+    if (key_exchange_values->GetSize())
+      arguments->Set("ssl-key-exchange", key_exchange_values.release());
     // Check bulk cipher argument.
     scoped_ptr<base::ListValue> bulk_cipher_values(new base::ListValue());
     GetCiphersList(ssl_options_.bulk_ciphers, bulk_cipher_values.get());
@@ -410,6 +426,8 @@
     }
     if (ssl_options_.staple_ocsp_response)
       arguments->Set("staple-ocsp-response", base::Value::CreateNullValue());
+    if (ssl_options_.enable_npn)
+      arguments->Set("enable-npn", base::Value::CreateNullValue());
   }
 
   return GenerateAdditionalArguments(arguments);
diff --git a/net/test/spawned_test_server/base_test_server.h b/net/test/spawned_test_server/base_test_server.h
index 163808c..392a72b 100644
--- a/net/test/spawned_test_server/base_test_server.h
+++ b/net/test/spawned_test_server/base_test_server.h
@@ -72,6 +72,18 @@
       OCSP_UNKNOWN,
     };
 
+    // Bitmask of key exchange algorithms that the test server supports and that
+    // can be selectively enabled or disabled.
+    enum KeyExchange {
+      // Special value used to indicate that any algorithm the server supports
+      // is acceptable. Preferred over explicitly OR-ing all key exchange
+      // algorithms.
+      KEY_EXCHANGE_ANY     = 0,
+
+      KEY_EXCHANGE_RSA     = (1 << 0),
+      KEY_EXCHANGE_DHE_RSA = (1 << 1),
+    };
+
     // Bitmask of bulk encryption algorithms that the test server supports
     // and that can be selectively enabled or disabled.
     enum BulkCipher {
@@ -134,6 +146,11 @@
     // field of the CertificateRequest.
     std::vector<base::FilePath> client_authorities;
 
+    // A bitwise-OR of KeyExchnage that should be used by the
+    // HTTPS server, or KEY_EXCHANGE_ANY to indicate that all implemented
+    // key exchange algorithms are acceptable.
+    int key_exchanges;
+
     // A bitwise-OR of BulkCipher that should be used by the
     // HTTPS server, or BULK_CIPHER_ANY to indicate that all implemented
     // ciphers are acceptable.
@@ -165,6 +182,9 @@
 
     // Whether to staple the OCSP response.
     bool staple_ocsp_response;
+
+    // Whether to enable NPN support.
+    bool enable_npn;
   };
 
   // Pass as the 'host' parameter during construction to server on 127.0.0.1
diff --git a/net/third_party/nss/ssl/BUILD.gn b/net/third_party/nss/ssl/BUILD.gn
index 03385f6..bcc3668 100644
--- a/net/third_party/nss/ssl/BUILD.gn
+++ b/net/third_party/nss/ssl/BUILD.gn
@@ -57,7 +57,7 @@
     "bodge/secitem_array.c",
   ]
 
-  direct_dependent_settings = [ ":ssl_config" ]
+  direct_dependent_configs = [ ":ssl_config" ]
 
   cflags = []
   defines = [
@@ -78,12 +78,14 @@
     ]
     sources += [ "exports_win.def" ]
   } else if (is_linux) {
-    #visibility hidden thing.
+    configs -= [ "//build/config/gcc:symbol_visibility_hidden" ]
     libs = [ "dl" ]
 
     include_dirs = [ "bodge" ]
 
-    direct_dependent_configs = [
+    # Must be after ssl_config since we want our SSL headers to take
+    # precedence.
+    direct_dependent_configs += [
       "//third_party/nss:system_nss_no_ssl_config"
     ]
   } else if (is_mac) {
diff --git a/net/tools/quic/end_to_end_test.cc b/net/tools/quic/end_to_end_test.cc
index 60b5052..4109224 100644
--- a/net/tools/quic/end_to_end_test.cc
+++ b/net/tools/quic/end_to_end_test.cc
@@ -12,6 +12,7 @@
 #include "base/memory/singleton.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/time/time.h"
 #include "net/base/ip_endpoint.h"
 #include "net/quic/congestion_control/tcp_cubic_sender.h"
 #include "net/quic/crypto/aes_128_gcm_12_encrypter.h"
@@ -110,6 +111,12 @@
     for (size_t i = 1; i < all_supported_versions.size(); ++i) {
       QuicVersionVector server_supported_versions;
       server_supported_versions.push_back(all_supported_versions[i]);
+      if (all_supported_versions[i] >= QUIC_VERSION_17) {
+        // Until flow control is globally rolled out and we remove
+        // QUIC_VERSION_16, the server MUST support at least one QUIC version
+        // that does not use flow control.
+        server_supported_versions.push_back(QUIC_VERSION_16);
+      }
       params.push_back(TestParams(all_supported_versions,
                                   server_supported_versions,
                                   server_supported_versions[0],
@@ -163,8 +170,6 @@
 
     client_config_.SetDefaults();
     server_config_.SetDefaults();
-    server_config_.set_initial_round_trip_time_us(kMaxInitialRoundTripTimeUs,
-                                                  0);
 
     // Use different flow control windows for client/server.
     client_initial_flow_control_receive_window_ =
@@ -596,10 +601,15 @@
   EXPECT_EQ(2, client_->client()->session()->GetNumSentClientHellos());
 }
 
-// TODO(ianswett): Enable once b/9295090 is fixed.
-TEST_P(EndToEndTest, DISABLED_LargePostFEC) {
-  SetPacketLossPercentage(30);
+TEST_P(EndToEndTest, LargePostFEC) {
+  // Connect without packet loss to avoid issues with losing handshake packets,
+  // and then up the packet loss rate (b/10126687).
   ASSERT_TRUE(Initialize());
+
+  // Wait for the server SHLO before upping the packet loss.
+  client_->client()->WaitForCryptoHandshakeConfirmed();
+  SetPacketLossPercentage(30);
+
   client_->options()->max_packets_per_fec_group = 6;
 
   string body;
@@ -706,13 +716,10 @@
 // TODO(rtenneti): DISABLED_LimitCongestionWindowAndRTT seems to be flaky.
 // http://crbug.com/321870.
 TEST_P(EndToEndTest, DISABLED_LimitCongestionWindowAndRTT) {
-  server_config_.set_server_initial_congestion_window(kMaxInitialWindow,
-                                                      kDefaultInitialWindow);
-  // Client tries to negotiate twice the server's max and negotiation settles
-  // on the max.
-  client_config_.set_server_initial_congestion_window(2 * kMaxInitialWindow,
-                                                      kDefaultInitialWindow);
-  client_config_.set_initial_round_trip_time_us(1, 1);
+  // Client tries to request twice the server's max initial window, and the
+  // server limits it to the max.
+  client_config_.SetInitialCongestionWindowToSend(2 * kMaxInitialWindow);
+  client_config_.SetInitialRoundTripTimeUsToSend(1);
 
   ASSERT_TRUE(Initialize());
   client_->client()->WaitForCryptoHandshakeConfirmed();
@@ -724,17 +731,11 @@
       QuicServerPeer::GetDispatcher(server_thread_->server());
   ASSERT_EQ(1u, dispatcher->session_map().size());
   QuicSession* session = dispatcher->session_map().begin()->second;
-  QuicConfig* client_negotiated_config = client_->client()->session()->config();
-  QuicConfig* server_negotiated_config = session->config();
   const QuicSentPacketManager& client_sent_packet_manager =
       client_->client()->session()->connection()->sent_packet_manager();
   const QuicSentPacketManager& server_sent_packet_manager =
       session->connection()->sent_packet_manager();
 
-  EXPECT_EQ(kMaxInitialWindow,
-            client_negotiated_config->server_initial_congestion_window());
-  EXPECT_EQ(kMaxInitialWindow,
-            server_negotiated_config->server_initial_congestion_window());
   // The client shouldn't set it's initial window based on the negotiated value.
   EXPECT_EQ(kDefaultInitialWindow * kDefaultTCPMSS,
             client_sent_packet_manager.GetCongestionWindow());
@@ -746,8 +747,9 @@
   EXPECT_EQ(FLAGS_enable_quic_pacing,
             client_sent_packet_manager.using_pacing());
 
-  EXPECT_EQ(1u, client_negotiated_config->initial_round_trip_time_us());
-  EXPECT_EQ(1u, server_negotiated_config->initial_round_trip_time_us());
+  EXPECT_EQ(100000u,
+            client_sent_packet_manager.GetRttStats()->initial_rtt_us());
+  EXPECT_EQ(1u, server_sent_packet_manager.GetRttStats()->initial_rtt_us());
 
   // Now use the negotiated limits with packet loss.
   SetPacketLossPercentage(30);
@@ -765,11 +767,11 @@
   EXPECT_EQ(kFooResponseBody, client_->SendCustomSynchronousRequest(request));
 }
 
-TEST_P(EndToEndTest, InitialRTT) {
-  // Client tries to negotiate twice the server's max and negotiation settles
-  // on the max.
-  client_config_.set_initial_round_trip_time_us(2 * kMaxInitialRoundTripTimeUs,
-                                                0);
+TEST_P(EndToEndTest, MaxInitialRTT) {
+  // Client tries to suggest twice the server's max initial rtt and the server
+  // uses the max.
+  client_config_.SetInitialRoundTripTimeUsToSend(
+      2 * kMaxInitialRoundTripTimeUs);
 
   ASSERT_TRUE(Initialize());
   client_->client()->WaitForCryptoHandshakeConfirmed();
@@ -780,22 +782,52 @@
       QuicServerPeer::GetDispatcher(server_thread_->server());
   ASSERT_EQ(1u, dispatcher->session_map().size());
   QuicSession* session = dispatcher->session_map().begin()->second;
-  QuicConfig* client_negotiated_config = client_->client()->session()->config();
-  QuicConfig* server_negotiated_config = session->config();
   const QuicSentPacketManager& client_sent_packet_manager =
       client_->client()->session()->connection()->sent_packet_manager();
   const QuicSentPacketManager& server_sent_packet_manager =
       session->connection()->sent_packet_manager();
 
-  EXPECT_EQ(kMaxInitialRoundTripTimeUs,
-            client_negotiated_config->initial_round_trip_time_us());
-  EXPECT_EQ(kMaxInitialRoundTripTimeUs,
-            server_negotiated_config->initial_round_trip_time_us());
   // Now that acks have been exchanged, the RTT estimate has decreased on the
   // server and is not infinite on the client.
-  EXPECT_FALSE(client_sent_packet_manager.SmoothedRtt().IsInfinite());
-  EXPECT_GE(static_cast<int64>(kMaxInitialRoundTripTimeUs),
-            server_sent_packet_manager.SmoothedRtt().ToMicroseconds());
+  EXPECT_FALSE(
+      client_sent_packet_manager.GetRttStats()->SmoothedRtt().IsInfinite());
+  EXPECT_EQ(static_cast<int64>(kMaxInitialRoundTripTimeUs),
+            server_sent_packet_manager.GetRttStats()->initial_rtt_us());
+  EXPECT_GE(
+      static_cast<int64>(kMaxInitialRoundTripTimeUs),
+      server_sent_packet_manager.GetRttStats()->SmoothedRtt().ToMicroseconds());
+  server_thread_->Resume();
+}
+
+TEST_P(EndToEndTest, MinInitialRTT) {
+  // Client tries to suggest 0 and the server uses the default.
+  client_config_.SetInitialRoundTripTimeUsToSend(0);
+
+  ASSERT_TRUE(Initialize());
+  client_->client()->WaitForCryptoHandshakeConfirmed();
+  server_thread_->WaitForCryptoHandshakeConfirmed();
+
+  // Pause the server so we can access the server's internals without races.
+  server_thread_->Pause();
+  QuicDispatcher* dispatcher =
+      QuicServerPeer::GetDispatcher(server_thread_->server());
+  ASSERT_EQ(1u, dispatcher->session_map().size());
+  QuicSession* session = dispatcher->session_map().begin()->second;
+  const QuicSentPacketManager& client_sent_packet_manager =
+      client_->client()->session()->connection()->sent_packet_manager();
+  const QuicSentPacketManager& server_sent_packet_manager =
+      session->connection()->sent_packet_manager();
+
+  // Now that acks have been exchanged, the RTT estimate has decreased on the
+  // server and is not infinite on the client.
+  EXPECT_FALSE(
+      client_sent_packet_manager.GetRttStats()->SmoothedRtt().IsInfinite());
+  // Expect the default rtt of 100ms.
+  EXPECT_EQ(static_cast<int64>(100 * base::Time::kMicrosecondsPerMillisecond),
+            server_sent_packet_manager.GetRttStats()->initial_rtt_us());
+  // Ensure the bandwidth is valid.
+  client_sent_packet_manager.BandwidthEstimate();
+  server_sent_packet_manager.BandwidthEstimate();
   server_thread_->Resume();
 }
 
@@ -925,7 +957,7 @@
   EXPECT_EQ(kServerIFCW, client_->client()
                              ->session()
                              ->config()
-                             ->peer_initial_flow_control_window_bytes());
+                             ->ReceivedInitialFlowControlWindowBytes());
 
   // Server should have the right value for client's receive window.
   server_thread_->Pause();
@@ -933,7 +965,7 @@
       QuicServerPeer::GetDispatcher(server_thread_->server());
   QuicSession* session = dispatcher->session_map().begin()->second;
   EXPECT_EQ(kClientIFCW,
-            session->config()->peer_initial_flow_control_window_bytes());
+            session->config()->ReceivedInitialFlowControlWindowBytes());
   server_thread_->Resume();
 }
 
diff --git a/net/tools/quic/quic_client.cc b/net/tools/quic/quic_client.cc
index b66eab7..346010f 100644
--- a/net/tools/quic/quic_client.cc
+++ b/net/tools/quic/quic_client.cc
@@ -99,21 +99,13 @@
     overflow_supported_ = true;
   }
 
-  // Set the receive buffer size.
-  rc = setsockopt(fd_, SOL_SOCKET, SO_RCVBUF,
-                  &TcpReceiver::kReceiveWindowTCP,
-                  sizeof(TcpReceiver::kReceiveWindowTCP));
-  if (rc != 0) {
-    LOG(ERROR) << "Failed to set socket recv size";
+  if (!QuicSocketUtils::SetReceiveBufferSize(fd_,
+                                             TcpReceiver::kReceiveWindowTCP)) {
     return false;
   }
 
-  // Set the send buffer size.
-  rc = setsockopt(fd_, SOL_SOCKET, SO_SNDBUF,
-                  &TcpReceiver::kReceiveWindowTCP,
-                  sizeof(TcpReceiver::kReceiveWindowTCP));
-  if (rc != 0) {
-    LOG(ERROR) << "Failed to set socket send size";
+  if (!QuicSocketUtils::SetSendBufferSize(fd_,
+                                          TcpReceiver::kReceiveWindowTCP)) {
     return false;
   }
 
diff --git a/net/tools/quic/quic_client.h b/net/tools/quic/quic_client.h
index 183158a..688fef0 100644
--- a/net/tools/quic/quic_client.h
+++ b/net/tools/quic/quic_client.h
@@ -160,7 +160,6 @@
   }
 
   void SetSupportedVersions(const QuicVersionVector& versions) {
-    DCHECK(!session_.get());
     supported_versions_ = versions;
   }
 
diff --git a/net/tools/quic/quic_client_bin.cc b/net/tools/quic/quic_client_bin.cc
index 7e2ea98..204f3f5 100644
--- a/net/tools/quic/quic_client_bin.cc
+++ b/net/tools/quic/quic_client_bin.cc
@@ -21,6 +21,7 @@
 #include "net/base/ip_endpoint.h"
 #include "net/base/privacy_mode.h"
 #include "net/quic/quic_protocol.h"
+#include "net/quic/quic_server_id.h"
 #include "net/tools/quic/quic_client.h"
 
 // The port the quic client will connect to.
diff --git a/net/tools/quic/quic_default_packet_writer.h b/net/tools/quic/quic_default_packet_writer.h
index 5e8c25f..5add4d4 100644
--- a/net/tools/quic/quic_default_packet_writer.h
+++ b/net/tools/quic/quic_default_packet_writer.h
@@ -33,6 +33,8 @@
  private:
   int fd_;
   bool write_blocked_;
+
+  DISALLOW_COPY_AND_ASSIGN(QuicDefaultPacketWriter);
 };
 
 }  // namespace tools
diff --git a/net/tools/quic/quic_dispatcher.cc b/net/tools/quic/quic_dispatcher.cc
index 0fed4fd..02e0483 100644
--- a/net/tools/quic/quic_dispatcher.cc
+++ b/net/tools/quic/quic_dispatcher.cc
@@ -16,6 +16,7 @@
 #include "net/tools/quic/quic_epoll_connection_helper.h"
 #include "net/tools/quic/quic_packet_writer_wrapper.h"
 #include "net/tools/quic/quic_socket_utils.h"
+#include "net/tools/quic/quic_time_wait_list_manager.h"
 
 namespace net {
 
@@ -43,12 +44,14 @@
 class QuicDispatcher::QuicFramerVisitor : public QuicFramerVisitorInterface {
  public:
   explicit QuicFramerVisitor(QuicDispatcher* dispatcher)
-      : dispatcher_(dispatcher) {}
+      : dispatcher_(dispatcher),
+        connection_id_(0) {}
 
   // QuicFramerVisitorInterface implementation
   virtual void OnPacket() OVERRIDE {}
   virtual bool OnUnauthenticatedPublicHeader(
       const QuicPacketPublicHeader& header) OVERRIDE {
+    connection_id_ = header.connection_id;
     return dispatcher_->OnUnauthenticatedPublicHeader(header);
   }
   virtual bool OnUnauthenticatedHeader(
@@ -60,14 +63,23 @@
     DVLOG(1) << QuicUtils::ErrorToString(framer->error());
   }
 
+  virtual bool OnProtocolVersionMismatch(
+      QuicVersion /*received_version*/) OVERRIDE {
+    if (dispatcher_->time_wait_list_manager()->IsConnectionIdInTimeWait(
+            connection_id_)) {
+      // Keep processing after protocol mismatch - this will be dealt with by
+      // the TimeWaitListManager.
+      return true;
+    } else {
+      DLOG(DFATAL) << "Version mismatch, connection ID (" << connection_id_
+                   << ") not in time wait list.";
+      return false;
+    }
+  }
+
   // The following methods should never get called because we always return
   // false from OnUnauthenticatedHeader().  As a result, we never process the
   // payload of the packet.
-  virtual bool OnProtocolVersionMismatch(
-      QuicVersion /*received_version*/) OVERRIDE {
-    DCHECK(false);
-    return false;
-  }
   virtual void OnPublicResetPacket(
       const QuicPublicResetPacket& /*packet*/) OVERRIDE {
     DCHECK(false);
@@ -107,6 +119,10 @@
     DCHECK(false);
     return false;
   }
+  virtual bool OnPingFrame(const QuicPingFrame& /*frame*/) OVERRIDE {
+    DCHECK(false);
+    return false;
+  }
   virtual bool OnRstStreamFrame(const QuicRstStreamFrame& /*frame*/) OVERRIDE {
     DCHECK(false);
     return false;
@@ -135,6 +151,9 @@
 
  private:
   QuicDispatcher* dispatcher_;
+
+  // Latched in OnUnauthenticatedPublicHeader for use later.
+  QuicConnectionId connection_id_;
 };
 
 QuicDispatcher::QuicDispatcher(const QuicConfig& config,
@@ -164,9 +183,7 @@
 void QuicDispatcher::Initialize(int fd) {
   DCHECK(writer_ == NULL);
   writer_.reset(CreateWriterWrapper(CreateWriter(fd)));
-  time_wait_list_manager_.reset(
-      new QuicTimeWaitListManager(writer_.get(), this,
-                                  epoll_server(), supported_versions()));
+  time_wait_list_manager_.reset(CreateQuicTimeWaitListManager());
 
   // Remove all versions > QUIC_VERSION_16 from the
   // supported_versions_no_flow_control_ vector.
@@ -254,7 +271,8 @@
   time_wait_list_manager_->ProcessPacket(current_server_address_,
                                          current_client_address_,
                                          header.public_header.connection_id,
-                                         header.packet_sequence_number);
+                                         header.packet_sequence_number,
+                                         *current_packet_);
 }
 
 void QuicDispatcher::CleanUpSession(SessionMap::iterator it) {
@@ -382,6 +400,11 @@
   }
 }
 
+QuicTimeWaitListManager* QuicDispatcher::CreateQuicTimeWaitListManager() {
+  return new QuicTimeWaitListManager(
+      writer_.get(), this, epoll_server(), supported_versions());
+}
+
 void QuicDispatcher::set_writer(QuicPacketWriter* writer) {
   writer_->set_writer(writer);
 }
diff --git a/net/tools/quic/quic_dispatcher.h b/net/tools/quic/quic_dispatcher.h
index b8d7ee7..eb9e5ad 100644
--- a/net/tools/quic/quic_dispatcher.h
+++ b/net/tools/quic/quic_dispatcher.h
@@ -37,7 +37,6 @@
 
 class EpollServer;
 class QuicConfig;
-class QuicConnectionHelper;
 class QuicCryptoServerConfig;
 class QuicSession;
 
@@ -116,10 +115,19 @@
                                          const IPEndPoint& server_address,
                                          const IPEndPoint& client_address);
 
-  QuicConnection* CreateQuicConnection(QuicConnectionId connection_id,
-                                       const IPEndPoint& server_address,
-                                       const IPEndPoint& client_address,
-                                       uint32 initial_flow_control_window);
+  virtual QuicConnection* CreateQuicConnection(
+      QuicConnectionId connection_id,
+      const IPEndPoint& server_address,
+      const IPEndPoint& client_address,
+      uint32 initial_flow_control_window);
+
+  // Called by |framer_visitor_| when the public header has been parsed.
+  virtual bool OnUnauthenticatedPublicHeader(
+      const QuicPacketPublicHeader& header);
+
+  // Create and return the time wait list manager for this dispatcher, which
+  // will be owned by the dispatcher as time_wait_list_manager_
+  virtual QuicTimeWaitListManager* CreateQuicTimeWaitListManager();
 
   // Replaces the packet writer with |writer|. Takes ownership of |writer|.
   void set_writer(QuicPacketWriter* writer);
@@ -134,9 +142,9 @@
     return supported_versions_;
   }
 
-  // Called by |framer_visitor_| when the public header has been parsed.
-  virtual bool OnUnauthenticatedPublicHeader(
-      const QuicPacketPublicHeader& header);
+  const QuicVersionVector& supported_versions_no_flow_control() const {
+    return supported_versions_no_flow_control_;
+  }
 
   const IPEndPoint& current_server_address() {
     return current_server_address_;
@@ -154,6 +162,14 @@
 
   QuicFramer* framer() { return &framer_; }
 
+  QuicEpollConnectionHelper* helper() { return helper_.get(); }
+
+  QuicPacketWriterWrapper* writer() { return writer_.get(); }
+
+  const uint32 initial_flow_control_window_bytes() const {
+    return initial_flow_control_window_bytes_;
+  }
+
  private:
   class QuicFramerVisitor;
   friend class net::tools::test::QuicDispatcherPeer;
diff --git a/net/tools/quic/quic_dispatcher_test.cc b/net/tools/quic/quic_dispatcher_test.cc
index 0228e08..0f138c9 100644
--- a/net/tools/quic/quic_dispatcher_test.cc
+++ b/net/tools/quic/quic_dispatcher_test.cc
@@ -191,10 +191,11 @@
       : QuicTimeWaitListManager(writer, visitor, eps, QuicSupportedVersions()) {
   }
 
-  MOCK_METHOD4(ProcessPacket, void(const IPEndPoint& server_address,
+  MOCK_METHOD5(ProcessPacket, void(const IPEndPoint& server_address,
                                    const IPEndPoint& client_address,
                                    QuicConnectionId connection_id,
-                                   QuicPacketSequenceNumber sequence_number));
+                                   QuicPacketSequenceNumber sequence_number,
+                                   const QuicEncryptedPacket& packet));
 };
 
 TEST_F(QuicDispatcherTest, TimeWaitListManager) {
@@ -236,7 +237,7 @@
   // Dispatcher forwards subsequent packets for this connection_id to the time
   // wait list manager.
   EXPECT_CALL(*time_wait_list_manager,
-              ProcessPacket(_, _, connection_id, _)).Times(1);
+              ProcessPacket(_, _, connection_id, _, _)).Times(1);
   ProcessPacket(client_address, connection_id, true, "foo");
 }
 
@@ -254,7 +255,7 @@
   // list manager.
   EXPECT_CALL(dispatcher_, CreateQuicSession(_, _, _)).Times(0);
   EXPECT_CALL(*time_wait_list_manager,
-              ProcessPacket(_, _, connection_id, _)).Times(1);
+              ProcessPacket(_, _, connection_id, _, _)).Times(1);
   string data = "foo";
   ProcessPacket(client_address, connection_id, false, "foo");
 }
diff --git a/net/tools/quic/quic_epoll_clock.h b/net/tools/quic/quic_epoll_clock.h
index 76c0c50..d96bff6 100644
--- a/net/tools/quic/quic_epoll_clock.h
+++ b/net/tools/quic/quic_epoll_clock.h
@@ -32,6 +32,9 @@
 
  protected:
   EpollServer* epoll_server_;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(QuicEpollClock);
 };
 
 }  // namespace tools
diff --git a/net/tools/quic/quic_server.cc b/net/tools/quic/quic_server.cc
index 934e81f..2d1a52d 100644
--- a/net/tools/quic/quic_server.cc
+++ b/net/tools/quic/quic_server.cc
@@ -47,9 +47,6 @@
           kServerInitialFlowControlWindow) {
   // Use hardcoded crypto parameters for now.
   config_.SetDefaults();
-  config_.set_initial_round_trip_time_us(kMaxInitialRoundTripTimeUs, 0);
-  config_.set_server_initial_congestion_window(kMaxInitialWindow,
-                                               kDefaultInitialWindow);
   Initialize();
 }
 
@@ -114,6 +111,19 @@
     overflow_supported_ = true;
   }
 
+  // These send and receive buffer sizes are sized for a single connection,
+  // because the default usage of QuicServer is as a test server with one or
+  // two clients.  Adjust higher for use with many clients.
+  if (!QuicSocketUtils::SetReceiveBufferSize(fd_,
+                                             TcpReceiver::kReceiveWindowTCP)) {
+    return false;
+  }
+
+  if (!QuicSocketUtils::SetSendBufferSize(fd_,
+                                          TcpReceiver::kReceiveWindowTCP)) {
+    return false;
+  }
+
   // Enable the socket option that allows the local address to be
   // returned if the socket is bound to more than on address.
   int get_local_ip = 1;
@@ -128,24 +138,6 @@
     return false;
   }
 
-  // Set the receive buffer size.
-  rc = setsockopt(fd_, SOL_SOCKET, SO_RCVBUF,
-                  &TcpReceiver::kReceiveWindowTCP,
-                  sizeof(TcpReceiver::kReceiveWindowTCP));
-  if (rc != 0) {
-    LOG(ERROR) << "Failed to set socket recv size";
-    return false;
-  }
-
-  // Set the send buffer size.
-  rc = setsockopt(fd_, SOL_SOCKET, SO_SNDBUF,
-                  &TcpReceiver::kReceiveWindowTCP,
-                  sizeof(TcpReceiver::kReceiveWindowTCP));
-  if (rc != 0) {
-    LOG(ERROR) << "Failed to set socket send size";
-    return false;
-  }
-
   sockaddr_storage raw_addr;
   socklen_t raw_addr_len = sizeof(raw_addr);
   CHECK(address.ToSockAddr(reinterpret_cast<sockaddr*>(&raw_addr),
diff --git a/net/tools/quic/quic_server_session_test.cc b/net/tools/quic/quic_server_session_test.cc
index 8690886..507ac8d 100644
--- a/net/tools/quic/quic_server_session_test.cc
+++ b/net/tools/quic/quic_server_session_test.cc
@@ -85,7 +85,7 @@
   QuicRstStreamFrame rst1(stream_id, QUIC_STREAM_NO_ERROR, 0);
   if (version() > QUIC_VERSION_13) {
     EXPECT_CALL(*connection_,
-                SendRstStream(stream_id, QUIC_STREAM_NO_ERROR, 0));
+                SendRstStream(stream_id, QUIC_RST_FLOW_CONTROL_ACCOUNTING, 0));
   }
   visitor_->OnRstStream(rst1);
   EXPECT_EQ(0u, session_->GetNumOpenStreams());
@@ -104,7 +104,7 @@
   QuicRstStreamFrame rst1(stream_id, QUIC_STREAM_NO_ERROR, 0);
   if (version() > QUIC_VERSION_13) {
     EXPECT_CALL(*connection_,
-                SendRstStream(stream_id, QUIC_STREAM_NO_ERROR, 0));
+                SendRstStream(stream_id, QUIC_RST_FLOW_CONTROL_ACCOUNTING, 0));
   }
   visitor_->OnRstStream(rst1);
   EXPECT_EQ(0u, session_->GetNumOpenStreams());
@@ -134,7 +134,7 @@
   QuicRstStreamFrame rst(stream_id, QUIC_STREAM_NO_ERROR, 0);
   if (version() > QUIC_VERSION_13) {
     EXPECT_CALL(*connection_,
-                SendRstStream(stream_id, QUIC_STREAM_NO_ERROR, 0));
+                SendRstStream(stream_id, QUIC_RST_FLOW_CONTROL_ACCOUNTING, 0));
   }
   visitor_->OnRstStream(rst);
 
diff --git a/net/tools/quic/quic_socket_utils.cc b/net/tools/quic/quic_socket_utils.cc
index 1ab3bdf..7b97de3 100644
--- a/net/tools/quic/quic_socket_utils.cc
+++ b/net/tools/quic/quic_socket_utils.cc
@@ -80,6 +80,24 @@
 }
 
 // static
+bool QuicSocketUtils::SetSendBufferSize(int fd, size_t size) {
+  if (setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &size, sizeof(size)) != 0) {
+    LOG(ERROR) << "Failed to set socket send size";
+    return false;
+  }
+  return true;
+}
+
+// static
+bool QuicSocketUtils::SetReceiveBufferSize(int fd, size_t size) {
+  if (setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &size, sizeof(size)) != 0) {
+    LOG(ERROR) << "Failed to set socket recv size";
+    return false;
+  }
+  return true;
+}
+
+// static
 int QuicSocketUtils::ReadPacket(int fd, char* buffer, size_t buf_len,
                                 uint32* dropped_packets,
                                 IPAddressNumber* self_address,
diff --git a/net/tools/quic/quic_socket_utils.h b/net/tools/quic/quic_socket_utils.h
index 988c746..7341c87 100644
--- a/net/tools/quic/quic_socket_utils.h
+++ b/net/tools/quic/quic_socket_utils.h
@@ -33,6 +33,12 @@
   // address_family.  Returns the return code from setsockopt.
   static int SetGetAddressInfo(int fd, int address_family);
 
+  // Sets the send buffer size to |size| and returns false if it fails.
+  static bool SetSendBufferSize(int fd, size_t size);
+
+  // Sets the receive buffer size to |size| and returns false if it fails.
+  static bool SetReceiveBufferSize(int fd, size_t size);
+
   // Reads buf_len from the socket.  If reading is successful, returns bytes
   // read and sets peer_address to the peer address.  Otherwise returns -1.
   //
@@ -56,6 +62,9 @@
   static WriteResult WritePacket(int fd, const char* buffer, size_t buf_len,
                                  const IPAddressNumber& self_address,
                                  const IPEndPoint& peer_address);
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(QuicSocketUtils);
 };
 
 }  // namespace tools
diff --git a/net/tools/quic/quic_spdy_client_stream.h b/net/tools/quic/quic_spdy_client_stream.h
index 37b0812..1292e19 100644
--- a/net/tools/quic/quic_spdy_client_stream.h
+++ b/net/tools/quic/quic_spdy_client_stream.h
@@ -76,6 +76,8 @@
   bool response_headers_received_;
   size_t header_bytes_read_;
   size_t header_bytes_written_;
+
+  DISALLOW_COPY_AND_ASSIGN(QuicSpdyClientStream);
 };
 
 }  // namespace tools
diff --git a/net/tools/quic/quic_spdy_client_stream_test.cc b/net/tools/quic/quic_spdy_client_stream_test.cc
index d3d5667..67f9d89 100644
--- a/net/tools/quic/quic_spdy_client_stream_test.cc
+++ b/net/tools/quic/quic_spdy_client_stream_test.cc
@@ -44,7 +44,7 @@
 
     // New streams rely on having the peer's flow control receive window
     // negotiated in the config.
-    session_.config()->set_peer_initial_flow_control_window_bytes(
+    session_.config()->SetInitialFlowControlWindowToSend(
         kInitialFlowControlWindowForTest);
     stream_.reset(new QuicSpdyClientStream(3, &session_));
   }
diff --git a/net/tools/quic/quic_spdy_server_stream.h b/net/tools/quic/quic_spdy_server_stream.h
index 029e25f..741f786 100644
--- a/net/tools/quic/quic_spdy_server_stream.h
+++ b/net/tools/quic/quic_spdy_server_stream.h
@@ -57,6 +57,8 @@
   // Buffer into which response header data is read.
   scoped_refptr<GrowableIOBuffer> read_buf_;
   bool request_headers_received_;
+
+  DISALLOW_COPY_AND_ASSIGN(QuicSpdyServerStream);
 };
 
 }  // namespace tools
diff --git a/net/tools/quic/quic_spdy_server_stream_test.cc b/net/tools/quic/quic_spdy_server_stream_test.cc
index 9f17656..7d67b2e 100644
--- a/net/tools/quic/quic_spdy_server_stream_test.cc
+++ b/net/tools/quic/quic_spdy_server_stream_test.cc
@@ -85,7 +85,7 @@
     // New streams rely on having the peer's flow control receive window
     // negotiated in the config.
     const uint32 kInitialWindow = 10 * kMaxPacketSize;
-    session_.config()->set_peer_initial_flow_control_window_bytes(
+    session_.config()->SetInitialFlowControlWindowToSend(
         kInitialWindow);
     stream_.reset(new QuicSpdyServerStreamPeer(3, &session_));
   }
diff --git a/net/tools/quic/quic_time_wait_list_manager.cc b/net/tools/quic/quic_time_wait_list_manager.cc
index 780a473..4449a50 100644
--- a/net/tools/quic/quic_time_wait_list_manager.cc
+++ b/net/tools/quic/quic_time_wait_list_manager.cc
@@ -111,6 +111,7 @@
     QuicConnectionId connection_id,
     QuicVersion version,
     QuicEncryptedPacket* close_packet) {
+  DVLOG(1) << "Adding " << connection_id << " to the time wait list.";
   int num_packets = 0;
   ConnectionIdMap::iterator it = connection_id_map_.find(connection_id);
   if (it != connection_id_map_.end()) {  // Replace record if it is reinserted.
@@ -150,8 +151,10 @@
     const IPEndPoint& server_address,
     const IPEndPoint& client_address,
     QuicConnectionId connection_id,
-    QuicPacketSequenceNumber sequence_number) {
+    QuicPacketSequenceNumber sequence_number,
+    const QuicEncryptedPacket& /*packet*/) {
   DCHECK(IsConnectionIdInTimeWait(connection_id));
+  DVLOG(1) << "Processing " << connection_id << " in time wait state.";
   // TODO(satyamshekhar): Think about handling packets from different client
   // addresses.
   ConnectionIdMap::iterator it = connection_id_map_.find(connection_id);
@@ -199,11 +202,16 @@
   QueuedPacket* queued_packet = new QueuedPacket(
       server_address,
       client_address,
-      QuicFramer::BuildPublicResetPacket(packet));
+      BuildPublicReset(packet));
   // Takes ownership of the packet.
   SendOrQueuePacket(queued_packet);
 }
 
+QuicEncryptedPacket* QuicTimeWaitListManager::BuildPublicReset(
+    const QuicPublicResetPacket& packet) {
+  return QuicFramer::BuildPublicResetPacket(packet);
+}
+
 // Either sends the packet and deletes it or makes pending queue the
 // owner of the packet.
 void QuicTimeWaitListManager::SendOrQueuePacket(QueuedPacket* packet) {
diff --git a/net/tools/quic/quic_time_wait_list_manager.h b/net/tools/quic/quic_time_wait_list_manager.h
index 3b29123..dbe570c 100644
--- a/net/tools/quic/quic_time_wait_list_manager.h
+++ b/net/tools/quic/quic_time_wait_list_manager.h
@@ -75,7 +75,8 @@
   virtual void ProcessPacket(const IPEndPoint& server_address,
                              const IPEndPoint& client_address,
                              QuicConnectionId connection_id,
-                             QuicPacketSequenceNumber sequence_number);
+                             QuicPacketSequenceNumber sequence_number,
+                             const QuicEncryptedPacket& packet);
 
   // Called by the dispatcher when the underlying socket becomes writable again,
   // since we might need to send pending public reset packets which we didn't
@@ -90,6 +91,10 @@
   // QuicVersion associated with it.
   QuicVersion GetQuicVersionFromConnectionId(QuicConnectionId connection_id);
 
+ protected:
+  virtual QuicEncryptedPacket* BuildPublicReset(
+      const QuicPublicResetPacket& packet);
+
  private:
   friend class test::QuicTimeWaitListManagerPeer;
 
diff --git a/net/tools/quic/quic_time_wait_list_manager_test.cc b/net/tools/quic/quic_time_wait_list_manager_test.cc
index 66333d1..d58b4e1 100644
--- a/net/tools/quic/quic_time_wait_list_manager_test.cc
+++ b/net/tools/quic/quic_time_wait_list_manager_test.cc
@@ -21,7 +21,9 @@
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
-using net::test::FramerVisitorCapturingPublicReset;
+using net::test::NoOpFramerVisitor;
+using net::test::QuicVersionMax;
+using net::test::QuicVersionMin;
 using testing::_;
 using testing::Args;
 using testing::Assign;
@@ -39,6 +41,24 @@
 namespace tools {
 namespace test {
 
+class FramerVisitorCapturingPublicReset : public NoOpFramerVisitor {
+ public:
+  FramerVisitorCapturingPublicReset() {}
+  virtual ~FramerVisitorCapturingPublicReset() {}
+
+  virtual void OnPublicResetPacket(
+      const QuicPublicResetPacket& public_reset) OVERRIDE {
+    public_reset_packet_ = public_reset;
+  }
+
+  const QuicPublicResetPacket public_reset_packet() {
+    return public_reset_packet_;
+  }
+
+ private:
+  QuicPublicResetPacket public_reset_packet_;
+};
+
 class QuicTimeWaitListManagerPeer {
  public:
   static bool ShouldSendResponse(QuicTimeWaitListManager* manager,
@@ -85,7 +105,7 @@
   }
 
   void AddConnectionId(QuicConnectionId connection_id) {
-    AddConnectionId(connection_id, net::test::QuicVersionMax(), NULL);
+    AddConnectionId(connection_id, QuicVersionMax(), NULL);
   }
 
   void AddConnectionId(QuicConnectionId connection_id,
@@ -101,10 +121,12 @@
 
   void ProcessPacket(QuicConnectionId connection_id,
                      QuicPacketSequenceNumber sequence_number) {
+    QuicEncryptedPacket packet(NULL, 0);
     time_wait_list_manager_.ProcessPacket(server_address_,
                                           client_address_,
                                           connection_id,
-                                          sequence_number);
+                                          sequence_number,
+                                          packet);
   }
 
   QuicEncryptedPacket* ConstructEncryptedPacket(
@@ -202,7 +224,7 @@
   size_t kConnectionCloseLength = 100;
   AddConnectionId(
       connection_id_,
-      net::test::QuicVersionMax(),
+      QuicVersionMax(),
       new QuicEncryptedPacket(
           new char[kConnectionCloseLength], kConnectionCloseLength, true));
   const int kRandomSequenceNumber = 1;
@@ -354,17 +376,17 @@
   const int kConnectionId2 = 456;
   const int kConnectionId3 = 789;
 
-  AddConnectionId(kConnectionId1, net::test::QuicVersionMin(), NULL);
-  AddConnectionId(kConnectionId2, net::test::QuicVersionMax(), NULL);
-  AddConnectionId(kConnectionId3, net::test::QuicVersionMax(), NULL);
+  AddConnectionId(kConnectionId1, QuicVersionMin(), NULL);
+  AddConnectionId(kConnectionId2, QuicVersionMax(), NULL);
+  AddConnectionId(kConnectionId3, QuicVersionMax(), NULL);
 
-  EXPECT_EQ(net::test::QuicVersionMin(),
+  EXPECT_EQ(QuicVersionMin(),
             QuicTimeWaitListManagerPeer::GetQuicVersionFromConnectionId(
                 &time_wait_list_manager_, kConnectionId1));
-  EXPECT_EQ(net::test::QuicVersionMax(),
+  EXPECT_EQ(QuicVersionMax(),
             QuicTimeWaitListManagerPeer::GetQuicVersionFromConnectionId(
                 &time_wait_list_manager_, kConnectionId2));
-  EXPECT_EQ(net::test::QuicVersionMax(),
+  EXPECT_EQ(QuicVersionMax(),
             QuicTimeWaitListManagerPeer::GetQuicVersionFromConnectionId(
                 &time_wait_list_manager_, kConnectionId3));
 }
@@ -377,7 +399,7 @@
   size_t kConnectionCloseLength = 100;
   AddConnectionId(
       connection_id_,
-      net::test::QuicVersionMax(),
+      QuicVersionMax(),
       new QuicEncryptedPacket(
           new char[kConnectionCloseLength], kConnectionCloseLength, true));
   EXPECT_TRUE(IsConnectionIdInTimeWait(connection_id_));
diff --git a/net/tools/quic/spdy_utils.h b/net/tools/quic/spdy_utils.h
index cfad5f1..e0ae4ed 100644
--- a/net/tools/quic/spdy_utils.h
+++ b/net/tools/quic/spdy_utils.h
@@ -37,6 +37,9 @@
 
   static std::string SerializeUncompressedHeaders(
       const SpdyHeaderBlock& headers);
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(SpdyUtils);
 };
 
 }  // namespace tools
diff --git a/net/tools/quic/test_tools/mock_epoll_server.h b/net/tools/quic/test_tools/mock_epoll_server.h
index fbc1695..abead02 100644
--- a/net/tools/quic/test_tools/mock_epoll_server.h
+++ b/net/tools/quic/test_tools/mock_epoll_server.h
@@ -43,6 +43,8 @@
 
  private:
   int64 now_in_usec_;
+
+  DISALLOW_COPY_AND_ASSIGN(FakeTimeEpollServer);
 };
 
 class MockEpollServer : public FakeTimeEpollServer {
@@ -97,6 +99,8 @@
  private:  // members
   EventQueue event_queue_;
   int64 until_in_usec_;
+
+  DISALLOW_COPY_AND_ASSIGN(MockEpollServer);
 };
 
 }  // namespace test
diff --git a/net/tools/quic/test_tools/mock_quic_dispatcher.h b/net/tools/quic/test_tools/mock_quic_dispatcher.h
index a2fec0f..d155911 100644
--- a/net/tools/quic/test_tools/mock_quic_dispatcher.h
+++ b/net/tools/quic/test_tools/mock_quic_dispatcher.h
@@ -28,6 +28,9 @@
   MOCK_METHOD3(ProcessPacket, void(const IPEndPoint& server_address,
                                    const IPEndPoint& client_address,
                                    const QuicEncryptedPacket& packet));
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(MockQuicDispatcher);
 };
 
 }  // namespace test
diff --git a/net/tools/quic/test_tools/quic_client_peer.h b/net/tools/quic/test_tools/quic_client_peer.h
index b9621be..f070388 100644
--- a/net/tools/quic/test_tools/quic_client_peer.h
+++ b/net/tools/quic/test_tools/quic_client_peer.h
@@ -5,6 +5,8 @@
 #ifndef NET_TOOLS_QUIC_TEST_TOOLS_QUIC_CLIENT_PEER_H_
 #define NET_TOOLS_QUIC_TEST_TOOLS_QUIC_CLIENT_PEER_H_
 
+#include "base/basictypes.h"
+
 namespace net {
 
 class QuicCryptoClientConfig;
@@ -19,6 +21,9 @@
  public:
   static int GetFd(QuicClient* client);
   static QuicCryptoClientConfig* GetCryptoConfig(QuicClient* client);
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(QuicClientPeer);
 };
 
 }  // namespace test
diff --git a/net/tools/quic/test_tools/quic_dispatcher_peer.h b/net/tools/quic/test_tools/quic_dispatcher_peer.h
index fb93d6e..de25975 100644
--- a/net/tools/quic/test_tools/quic_dispatcher_peer.h
+++ b/net/tools/quic/test_tools/quic_dispatcher_peer.h
@@ -37,6 +37,9 @@
       const IPEndPoint& server,
       const IPEndPoint& client,
       uint32 initial_flow_control_window_bytes);
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(QuicDispatcherPeer);
 };
 
 }  // namespace test
diff --git a/net/tools/quic/test_tools/quic_server_peer.h b/net/tools/quic/test_tools/quic_server_peer.h
index a3d8c5e..f5f625d 100644
--- a/net/tools/quic/test_tools/quic_server_peer.h
+++ b/net/tools/quic/test_tools/quic_server_peer.h
@@ -5,6 +5,8 @@
 #ifndef NET_TOOLS_QUIC_TEST_TOOLS_QUIC_SERVER_PEER_H_
 #define NET_TOOLS_QUIC_TEST_TOOLS_QUIC_SERVER_PEER_H_
 
+#include "base/basictypes.h"
+
 namespace net {
 
 namespace tools {
@@ -19,6 +21,9 @@
   static bool SetSmallSocket(QuicServer* server);
   static void DisableRecvmmsg(QuicServer* server);
   static QuicDispatcher* GetDispatcher(QuicServer* server);
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(QuicServerPeer);
 };
 
 }  // namespace test
diff --git a/net/tools/quic/test_tools/quic_test_client.h b/net/tools/quic/test_tools/quic_test_client.h
index 616c463..11ede1a 100644
--- a/net/tools/quic/test_tools/quic_test_client.h
+++ b/net/tools/quic/test_tools/quic_test_client.h
@@ -53,6 +53,8 @@
  private:
   QuicConnectionId override_connection_id_;  // ConnectionId to use, if nonzero
   QuicPacketWriterWrapper* test_writer_;
+
+  DISALLOW_COPY_AND_ASSIGN(MockableQuicClient);
 };
 
 // A toy QUIC client used for testing, mostly following the SimpleClient APIs.
@@ -194,6 +196,8 @@
   // proof_verifier_ points to a RecordingProofVerifier that is owned by
   // client_.
   ProofVerifier* proof_verifier_;
+
+  DISALLOW_COPY_AND_ASSIGN(QuicTestClient);
 };
 
 }  // namespace test
diff --git a/net/tools/quic/test_tools/quic_test_utils.h b/net/tools/quic/test_tools/quic_test_utils.h
index c35bc7c..8eb0a57 100644
--- a/net/tools/quic/test_tools/quic_test_utils.h
+++ b/net/tools/quic/test_tools/quic_test_utils.h
@@ -44,6 +44,8 @@
 
  private:
   uint64 seed_;
+
+  DISALLOW_COPY_AND_ASSIGN(SimpleRandom);
 };
 
 class MockConnection : public QuicConnection {
@@ -112,10 +114,11 @@
 
   void SetCryptoStream(QuicCryptoStream* stream);
 
-  virtual QuicCryptoStream* GetCryptoStream();
+  virtual QuicCryptoStream* GetCryptoStream() OVERRIDE;
 
  private:
   QuicCryptoStream* crypto_stream_;
+
   DISALLOW_COPY_AND_ASSIGN(TestSession);
 };
 
@@ -132,6 +135,9 @@
   MOCK_CONST_METHOD0(IsWriteBlockedDataBuffered, bool());
   MOCK_CONST_METHOD0(IsWriteBlocked, bool());
   MOCK_METHOD0(SetWritable, void());
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(MockPacketWriter);
 };
 
 class MockQuicServerSessionVisitor : public QuicServerSessionVisitor {
@@ -141,20 +147,26 @@
   MOCK_METHOD2(OnConnectionClosed, void(QuicConnectionId connection_id,
                                         QuicErrorCode error));
   MOCK_METHOD1(OnWriteBlocked, void(QuicBlockedWriterInterface* writer));
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(MockQuicServerSessionVisitor);
 };
 
 class MockAckNotifierDelegate : public QuicAckNotifier::DelegateInterface {
  public:
   MockAckNotifierDelegate();
 
-  MOCK_METHOD4(OnAckNotification, void(int num_original_packets,
+  MOCK_METHOD5(OnAckNotification, void(int num_original_packets,
                                        int num_original_bytes,
                                        int num_retransmitted_packets,
-                                       int num_retransmitted_bytes));
+                                       int num_retransmitted_bytes,
+                                       QuicTime::Delta delta_largest_observed));
 
  protected:
   // Object is ref counted.
   virtual ~MockAckNotifierDelegate();
+
+  DISALLOW_COPY_AND_ASSIGN(MockAckNotifierDelegate);
 };
 
 }  // namespace test
diff --git a/net/tools/testserver/testserver.py b/net/tools/testserver/testserver.py
index 2b0c36c..9e86cf2 100755
--- a/net/tools/testserver/testserver.py
+++ b/net/tools/testserver/testserver.py
@@ -153,7 +153,7 @@
 
   def __init__(self, server_address, request_hander_class, pem_cert_and_key,
                ssl_client_auth, ssl_client_cas,
-               ssl_bulk_ciphers, ssl_key_exchanges,
+               ssl_bulk_ciphers, ssl_key_exchanges, enable_npn,
                record_resume_info, tls_intolerant, signed_cert_timestamps,
                fallback_scsv_enabled, ocsp_response):
     self.cert_chain = tlslite.api.X509CertChain()
@@ -167,6 +167,10 @@
                                                implementations=['python'])
     self.ssl_client_auth = ssl_client_auth
     self.ssl_client_cas = []
+    if enable_npn:
+      self.next_protos = ['http/1.1']
+    else:
+      self.next_protos = None
     if tls_intolerant == 0:
       self.tls_intolerant = None
     else:
@@ -207,6 +211,7 @@
                                     reqCert=self.ssl_client_auth,
                                     settings=self.ssl_handshake_settings,
                                     reqCAs=self.ssl_client_cas,
+                                    nextProtos=self.next_protos,
                                     tlsIntolerant=self.tls_intolerant,
                                     signedCertTimestamps=
                                     self.signed_cert_timestamps,
@@ -1986,6 +1991,7 @@
                              self.options.ssl_client_ca,
                              self.options.ssl_bulk_cipher,
                              self.options.ssl_key_exchange,
+                             self.options.enable_npn,
                              self.options.record_resume,
                              self.options.tls_intolerant,
                              self.options.signed_cert_timestamps_tls_ext.decode(
@@ -2182,6 +2188,13 @@
                                   'option may appear multiple times, '
                                   'indicating multiple algorithms should be '
                                   'enabled.');
+    # TODO(davidben): Add ALPN support to tlslite.
+    self.option_parser.add_option('--enable-npn', dest='enable_npn',
+                                  default=False, const=True,
+                                  action='store_const',
+                                  help='Enable server support for the NPN '
+                                  'extension. The server will advertise '
+                                  'support for exactly one protocol, http/1.1')
     self.option_parser.add_option('--file-root-url', default='/files/',
                                   help='Specify a root URL for files served.')
 
diff --git a/net/tools/tld_cleanup/BUILD.gn b/net/tools/tld_cleanup/BUILD.gn
new file mode 100644
index 0000000..bf89c00
--- /dev/null
+++ b/net/tools/tld_cleanup/BUILD.gn
@@ -0,0 +1,14 @@
+# 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.
+
+source_set("tld_cleanup") {
+  sources = [
+    "tld_cleanup_util.cc",
+    "tld_cleanup_util.h",
+  ]
+  deps = [
+    "//base",
+    "//url",
+  ]
+}
diff --git a/net/url_request/url_fetcher_response_writer.cc b/net/url_request/url_fetcher_response_writer.cc
index 7db614f..76c73df 100644
--- a/net/url_request/url_fetcher_response_writer.cc
+++ b/net/url_request/url_fetcher_response_writer.cc
@@ -64,7 +64,7 @@
 }
 
 int URLFetcherFileWriter::Initialize(const CompletionCallback& callback) {
-  file_stream_.reset(new FileStream(NULL));
+  file_stream_.reset(new FileStream());
 
   int result = ERR_IO_PENDING;
   if (file_path_.empty()) {
diff --git a/net/url_request/url_request_context_builder.cc b/net/url_request/url_request_context_builder.cc
index 8405163..ca92f74 100644
--- a/net/url_request/url_request_context_builder.cc
+++ b/net/url_request/url_request_context_builder.cc
@@ -124,45 +124,36 @@
 class BasicURLRequestContext : public URLRequestContext {
  public:
   BasicURLRequestContext()
-      : cache_thread_("Cache Thread"),
-        file_thread_("File Thread"),
-        storage_(this) {}
+      : storage_(this) {}
 
   URLRequestContextStorage* storage() {
     return &storage_;
   }
 
-  void StartCacheThread() {
-    cache_thread_.StartWithOptions(
-        base::Thread::Options(base::MessageLoop::TYPE_IO, 0));
+  base::Thread* GetCacheThread() {
+    if (!cache_thread_) {
+      cache_thread_.reset(new base::Thread("Cache Thread"));
+      cache_thread_->StartWithOptions(
+          base::Thread::Options(base::MessageLoop::TYPE_IO, 0));
+    }
+    return cache_thread_.get();
   }
 
-  scoped_refptr<base::MessageLoopProxy> cache_message_loop_proxy() {
-    DCHECK(cache_thread_.IsRunning());
-    return cache_thread_.message_loop_proxy();
-  }
-
-  void StartFileThread() {
-    file_thread_.StartWithOptions(
-        base::Thread::Options(base::MessageLoop::TYPE_DEFAULT, 0));
-  }
-
-  base::MessageLoop* file_message_loop() {
-    DCHECK(file_thread_.IsRunning());
-    return file_thread_.message_loop();
-  }
-
-  scoped_refptr<base::MessageLoopProxy> file_message_loop_proxy() {
-    DCHECK(file_thread_.IsRunning());
-    return file_thread_.message_loop_proxy();
+  base::Thread* GetFileThread() {
+    if (!file_thread_) {
+      file_thread_.reset(new base::Thread("File Thread"));
+      file_thread_->StartWithOptions(
+          base::Thread::Options(base::MessageLoop::TYPE_DEFAULT, 0));
+    }
+    return file_thread_.get();
   }
 
  protected:
   virtual ~BasicURLRequestContext() {}
 
  private:
-  base::Thread cache_thread_;
-  base::Thread file_thread_;
+  scoped_ptr<base::Thread> cache_thread_;
+  scoped_ptr<base::Thread> file_thread_;
   URLRequestContextStorage storage_;
   DISALLOW_COPY_AND_ASSIGN(BasicURLRequestContext);
 };
@@ -217,7 +208,7 @@
     host_resolver_ = net::HostResolver::CreateDefaultResolver(NULL);
   storage->set_host_resolver(host_resolver_.Pass());
 
-  context->StartFileThread();
+  storage->set_net_log(new net::NetLog);
 
   // TODO(willchan): Switch to using this code when
   // ProxyService::CreateSystemProxyConfigService()'s signature doesn't suck.
@@ -231,7 +222,7 @@
     proxy_config_service =
         ProxyService::CreateSystemProxyConfigService(
             base::ThreadTaskRunnerHandle::Get().get(),
-            context->file_message_loop());
+            context->GetFileThread()->message_loop());
   }
 #endif  // defined(OS_LINUX) || defined(OS_ANDROID)
   storage->set_proxy_service(
@@ -283,13 +274,12 @@
         context->server_bound_cert_service();
     HttpCache::BackendFactory* http_cache_backend = NULL;
     if (http_cache_params_.type == HttpCacheParams::DISK) {
-      context->StartCacheThread();
       http_cache_backend = new HttpCache::DefaultBackend(
           DISK_CACHE,
           net::CACHE_BACKEND_DEFAULT,
           http_cache_params_.path,
           http_cache_params_.max_size,
-          context->cache_message_loop_proxy().get());
+          context->GetCacheThread()->message_loop_proxy().get());
     } else {
       http_cache_backend =
           HttpCache::DefaultBackend::InMemory(http_cache_params_.max_size);
@@ -308,9 +298,11 @@
   URLRequestJobFactoryImpl* job_factory = new URLRequestJobFactoryImpl;
   if (data_enabled_)
     job_factory->SetProtocolHandler("data", new DataProtocolHandler);
-  if (file_enabled_)
+  if (file_enabled_) {
     job_factory->SetProtocolHandler(
-        "file", new FileProtocolHandler(context->file_message_loop_proxy()));
+    "file",
+    new FileProtocolHandler(context->GetFileThread()->message_loop_proxy()));
+  }
 #if !defined(DISABLE_FTP_SUPPORT)
   if (ftp_enabled_) {
     ftp_transaction_factory_.reset(
diff --git a/net/url_request/url_request_file_job.cc b/net/url_request/url_request_file_job.cc
index fbff75a..011a0da 100644
--- a/net/url_request/url_request_file_job.cc
+++ b/net/url_request/url_request_file_job.cc
@@ -60,7 +60,7 @@
     const scoped_refptr<base::TaskRunner>& file_task_runner)
     : URLRequestJob(request, network_delegate),
       file_path_(file_path),
-      stream_(new FileStream(NULL, file_task_runner)),
+      stream_(new FileStream(file_task_runner)),
       file_task_runner_(file_task_runner),
       remaining_bytes_(0),
       weak_ptr_factory_(this) {}
diff --git a/net/websockets/OWNERS b/net/websockets/OWNERS
index 8ef489a..6c81c61 100644
--- a/net/websockets/OWNERS
+++ b/net/websockets/OWNERS
@@ -1,8 +1,3 @@
 tyoshino@chromium.org
-
-# Have been inactive for a while.
-yutak@chromium.org
-toyoshim@chromium.org
-
-# On leave
-bashi@chromium.org
+ricea@chromium.org
+yhirano@chromium.org
diff --git a/net/websockets/websocket_channel.cc b/net/websockets/websocket_channel.cc
index 156fac3..7efc570 100644
--- a/net/websockets/websocket_channel.cc
+++ b/net/websockets/websocket_channel.cc
@@ -464,8 +464,10 @@
     // errata 3227 to RFC6455. If the renderer is sending us an invalid code or
     // reason it must be malfunctioning in some way, and based on that we
     // interpret this as an internal error.
-    if (SendClose(kWebSocketErrorInternalServerError, "") != CHANNEL_DELETED)
+    if (SendClose(kWebSocketErrorInternalServerError, "") != CHANNEL_DELETED) {
+      DCHECK_EQ(CONNECTED, state_);
       state_ = SEND_CLOSED;
+    }
     return;
   }
   if (SendClose(
@@ -473,6 +475,7 @@
           StreamingUtf8Validator::Validate(reason) ? reason : std::string()) ==
       CHANNEL_DELETED)
     return;
+  DCHECK_EQ(CONNECTED, state_);
   state_ = SEND_CLOSED;
 }
 
@@ -797,6 +800,7 @@
           state_ = RECV_CLOSED;
           if (SendClose(code, reason) == CHANNEL_DELETED)
             return CHANNEL_DELETED;
+          DCHECK_EQ(RECV_CLOSED, state_);
           state_ = CLOSE_WAIT;
 
           if (event_interface_->OnClosingHandshake() == CHANNEL_DELETED)
diff --git a/net/websockets/websocket_deflate_stream.cc b/net/websockets/websocket_deflate_stream.cc
index d37bf19..38de5fa 100644
--- a/net/websockets/websocket_deflate_stream.cc
+++ b/net/websockets/websocket_deflate_stream.cc
@@ -333,9 +333,7 @@
         scoped_ptr<WebSocketFrame> inflated(
             new WebSocketFrame(WebSocketFrameHeader::kOpCodeText));
         scoped_refptr<IOBufferWithSize> data = inflater_.GetOutput(size);
-        bool is_final = !inflater_.CurrentOutputSize();
-        // |is_final| can't be true if |frame->header.final| is false.
-        DCHECK(!(is_final && !frame->header.final));
+        bool is_final = !inflater_.CurrentOutputSize() && frame->header.final;
         if (!data) {
           DVLOG(1) << "WebSocket protocol error. "
                    << "inflater_.GetOutput() returns an error.";
diff --git a/net/websockets/websocket_deflate_stream_test.cc b/net/websockets/websocket_deflate_stream_test.cc
index 6d29a2b..a8b4e59 100644
--- a/net/websockets/websocket_deflate_stream_test.cc
+++ b/net/websockets/websocket_deflate_stream_test.cc
@@ -733,6 +733,47 @@
             ToString(frames[0]) + ToString(frames[1]) + ToString(frames[2]));
 }
 
+TEST_F(WebSocketDeflateStreamTest, InflaterInternalDataCanBeEmpty) {
+  WebSocketDeflater deflater(WebSocketDeflater::TAKE_OVER_CONTEXT);
+  deflater.Initialize(kWindowBits);
+  const std::string original_data(kChunkSize, 'a');
+  deflater.AddBytes(original_data.data(), original_data.size());
+  deflater.Finish();
+
+  ScopedVector<WebSocketFrame> frames_to_output;
+  AppendTo(&frames_to_output,
+           WebSocketFrameHeader::kOpCodeBinary,
+           kReserved1,
+           ToString(deflater.GetOutput(deflater.CurrentOutputSize())));
+  AppendTo(&frames_to_output,
+           WebSocketFrameHeader::kOpCodeBinary,
+           kFinal,
+           "");
+
+  ReadFramesStub stub(OK, &frames_to_output);
+  CompletionCallback callback;
+  ScopedVector<WebSocketFrame> frames;
+  {
+    InSequence s;
+    EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _))
+        .WillOnce(Invoke(&stub, &ReadFramesStub::Call));
+  }
+
+  ASSERT_EQ(OK, deflate_stream_->ReadFrames(&frames, callback));
+  ASSERT_EQ(2u, frames.size());
+  EXPECT_EQ(WebSocketFrameHeader::kOpCodeBinary, frames[0]->header.opcode);
+  EXPECT_FALSE(frames[0]->header.final);
+  EXPECT_FALSE(frames[0]->header.reserved1);
+  EXPECT_EQ(kChunkSize, static_cast<size_t>(frames[0]->header.payload_length));
+
+  EXPECT_EQ(WebSocketFrameHeader::kOpCodeContinuation,
+            frames[1]->header.opcode);
+  EXPECT_TRUE(frames[1]->header.final);
+  EXPECT_FALSE(frames[1]->header.reserved1);
+  EXPECT_EQ(0u, static_cast<size_t>(frames[1]->header.payload_length));
+  EXPECT_EQ(original_data, ToString(frames[0]) + ToString(frames[1]));
+}
+
 TEST_F(WebSocketDeflateStreamTest,
        Reserved1TurnsOnDuringReadingCompressedContinuationFrame) {
   const std::string data1("\xf2\x48\xcd", 3);
diff --git a/ppapi/api/private/ppb_nacl_private.idl b/ppapi/api/private/ppb_nacl_private.idl
index 418310d..4bc02e0 100644
--- a/ppapi/api/private/ppb_nacl_private.idl
+++ b/ppapi/api/private/ppb_nacl_private.idl
@@ -133,6 +133,27 @@
   PP_NACL_READY_STATE_DONE = 4
 };
 
+struct PP_PNaClOptions {
+  PP_Bool translate;
+  PP_Bool is_debug;
+  int32_t opt_level;
+};
+
+/* ManifestService to support irt_open_resource() function.
+ * All functions of the service should have PP_Bool return value. It represents
+ * whether the service is still alive or not. Trivially Quit() should always
+ * return false. However, other functions also can return false.
+ * Once false is called, as the service has been destructed, all functions
+ * should never be called afterwords.
+ */
+interface PP_ManifestService {
+  /* Called when ManifestService should be destructed. */
+  PP_Bool Quit([inout] mem_t user_data);
+
+  /* Called when PPAPI initialization in the NaCl plugin is finished. */
+  PP_Bool StartupInitializationComplete([inout] mem_t user_data);
+};
+
 /* PPB_NaCl_Private */
 interface PPB_NaCl_Private {
   /* Launches NaCl's sel_ldr process.  Returns PP_EXTERNAL_PLUGIN_OK on success
@@ -163,6 +184,8 @@
                     [in] PP_Bool enable_dyncode_syscalls,
                     [in] PP_Bool enable_exception_handling,
                     [in] PP_Bool enable_crash_throttling,
+                    [in] PP_ManifestService manifest_service_interface,
+                    [inout] mem_t manifest_service_user_data,
                     [out] mem_t imc_handle,
                     [out] PP_Var error_message,
                     [in] PP_CompletionCallback callback);
@@ -325,17 +348,9 @@
   /* Returns the NaCl readiness status for this instance. */
   PP_NaClReadyState GetNaClReadyState([in] PP_Instance instance);
 
-  /* Sets the NaCl readiness status for this instance. */
-  void SetNaClReadyState([in] PP_Instance instance,
-                         [in] PP_NaClReadyState ready_state);
-
   /* Returns true if the plugin is an installed app. */
   PP_Bool GetIsInstalled([in] PP_Instance instance);
 
-  /* Sets whether the plugin is an installed app. */
-  void SetIsInstalled([in] PP_Instance instance,
-                      [in] PP_Bool is_installed);
-
   /* Returns the exit status of the plugin process. */
   int32_t GetExitStatus([in] PP_Instance instance);
 
@@ -346,13 +361,28 @@
   /* Logs the message via VLOG. */
   void Vlog([in] str_t message);
 
-  /* Sets the time the plugin was initialized. */
-  void SetInitTime([in] PP_Instance instance);
+  /* Initializes internal state for a NaCl plugin. */
+  void InitializePlugin([in] PP_Instance instance);
 
   /* Returns the size of the nexe. */
   int64_t GetNexeSize([in] PP_Instance instance);
 
-  /* Sets the size of the nexe. */
-  void SetNexeSize([in] PP_Instance instance,
-                   [in] int64_t nexe_size);
+  /* Performs accounting for requesting the NaCl manifest at the given URL. */
+  PP_Bool RequestNaClManifest([in] PP_Instance instance,
+                              [in] str_t manifest_url,
+                              [out] PP_Bool is_data_uri);
+
+  PP_Var GetManifestBaseURL([in] PP_Instance instance);
+
+  PP_Bool ResolvesRelativeToPluginBaseUrl([in] PP_Instance instance,
+                                          [in] str_t url);
+
+  PP_Var ParseDataURL([in] str_t data_url);
+
+  /* Processes the NaCl manifest once it's been retrieved.
+   * TODO(teravest): Move the rest of the supporting logic out of the trusted
+   * plugin.
+   */
+  void ProcessNaClManifest([in] PP_Instance instance,
+                           [in] str_t program_url);
 };
diff --git a/ppapi/c/private/ppb_nacl_private.h b/ppapi/c/private/ppb_nacl_private.h
index 709463e..ab85b73 100644
--- a/ppapi/c/private/ppb_nacl_private.h
+++ b/ppapi/c/private/ppb_nacl_private.h
@@ -3,7 +3,7 @@
  * found in the LICENSE file.
  */
 
-/* From private/ppb_nacl_private.idl modified Tue Apr 15 09:24:03 2014. */
+/* From private/ppb_nacl_private.idl modified Wed Apr 23 12:56:55 2014. */
 
 #ifndef PPAPI_C_PRIVATE_PPB_NACL_PRIVATE_H_
 #define PPAPI_C_PRIVATE_PPB_NACL_PRIVATE_H_
@@ -15,6 +15,9 @@
 #include "ppapi/c/pp_stdint.h"
 #include "ppapi/c/pp_var.h"
 
+#define PP_MANIFESTSERVICE_INTERFACE_1_0 "PP_ManifestService;1.0"
+#define PP_MANIFESTSERVICE_INTERFACE PP_MANIFESTSERVICE_INTERFACE_1_0
+
 #define PPB_NACL_PRIVATE_INTERFACE_1_0 "PPB_NaCl_Private;1.0"
 #define PPB_NACL_PRIVATE_INTERFACE PPB_NACL_PRIVATE_INTERFACE_1_0
 
@@ -152,9 +155,38 @@
  */
 
 /**
+ * @addtogroup Structs
+ * @{
+ */
+struct PP_PNaClOptions {
+  PP_Bool translate;
+  PP_Bool is_debug;
+  int32_t opt_level;
+};
+/**
+ * @}
+ */
+
+/**
  * @addtogroup Interfaces
  * @{
  */
+/* ManifestService to support irt_open_resource() function.
+ * All functions of the service should have PP_Bool return value. It represents
+ * whether the service is still alive or not. Trivially Quit() should always
+ * return false. However, other functions also can return false.
+ * Once false is called, as the service has been destructed, all functions
+ * should never be called afterwords.
+ */
+struct PP_ManifestService_1_0 {
+  /* Called when ManifestService should be destructed. */
+  PP_Bool (*Quit)(void* user_data);
+  /* Called when PPAPI initialization in the NaCl plugin is finished. */
+  PP_Bool (*StartupInitializationComplete)(void* user_data);
+};
+
+typedef struct PP_ManifestService_1_0 PP_ManifestService;
+
 /* PPB_NaCl_Private */
 struct PPB_NaCl_Private_1_0 {
   /* Launches NaCl's sel_ldr process.  Returns PP_EXTERNAL_PLUGIN_OK on success
@@ -176,18 +208,21 @@
    * the nexe contribute to crash throttling statisics and whether nexe starts
    * are throttled by crash throttling.
    */
-  void (*LaunchSelLdr)(PP_Instance instance,
-                       const char* alleged_url,
-                       PP_Bool uses_irt,
-                       PP_Bool uses_ppapi,
-                       PP_Bool uses_nonsfi_mode,
-                       PP_Bool enable_ppapi_dev,
-                       PP_Bool enable_dyncode_syscalls,
-                       PP_Bool enable_exception_handling,
-                       PP_Bool enable_crash_throttling,
-                       void* imc_handle,
-                       struct PP_Var* error_message,
-                       struct PP_CompletionCallback callback);
+  void (*LaunchSelLdr)(
+      PP_Instance instance,
+      const char* alleged_url,
+      PP_Bool uses_irt,
+      PP_Bool uses_ppapi,
+      PP_Bool uses_nonsfi_mode,
+      PP_Bool enable_ppapi_dev,
+      PP_Bool enable_dyncode_syscalls,
+      PP_Bool enable_exception_handling,
+      PP_Bool enable_crash_throttling,
+      const struct PP_ManifestService_1_0* manifest_service_interface,
+      void* manifest_service_user_data,
+      void* imc_handle,
+      struct PP_Var* error_message,
+      struct PP_CompletionCallback callback);
   /* This function starts the IPC proxy so the nexe can communicate with the
    * browser.
    */
@@ -318,25 +353,31 @@
   void (*LogToConsole)(PP_Instance instance, const char* message);
   /* Returns the NaCl readiness status for this instance. */
   PP_NaClReadyState (*GetNaClReadyState)(PP_Instance instance);
-  /* Sets the NaCl readiness status for this instance. */
-  void (*SetNaClReadyState)(PP_Instance instance,
-                            PP_NaClReadyState ready_state);
   /* Returns true if the plugin is an installed app. */
   PP_Bool (*GetIsInstalled)(PP_Instance instance);
-  /* Sets whether the plugin is an installed app. */
-  void (*SetIsInstalled)(PP_Instance instance, PP_Bool is_installed);
   /* Returns the exit status of the plugin process. */
   int32_t (*GetExitStatus)(PP_Instance instance);
   /* Sets the exit status of the plugin process. */
   void (*SetExitStatus)(PP_Instance instance, int32_t exit_status);
   /* Logs the message via VLOG. */
   void (*Vlog)(const char* message);
-  /* Sets the time the plugin was initialized. */
-  void (*SetInitTime)(PP_Instance instance);
+  /* Initializes internal state for a NaCl plugin. */
+  void (*InitializePlugin)(PP_Instance instance);
   /* Returns the size of the nexe. */
   int64_t (*GetNexeSize)(PP_Instance instance);
-  /* Sets the size of the nexe. */
-  void (*SetNexeSize)(PP_Instance instance, int64_t nexe_size);
+  /* Performs accounting for requesting the NaCl manifest at the given URL. */
+  PP_Bool (*RequestNaClManifest)(PP_Instance instance,
+                                 const char* manifest_url,
+                                 PP_Bool* is_data_uri);
+  struct PP_Var (*GetManifestBaseURL)(PP_Instance instance);
+  PP_Bool (*ResolvesRelativeToPluginBaseUrl)(PP_Instance instance,
+                                             const char* url);
+  struct PP_Var (*ParseDataURL)(const char* data_url);
+  /* Processes the NaCl manifest once it's been retrieved.
+   * TODO(teravest): Move the rest of the supporting logic out of the trusted
+   * plugin.
+   */
+  void (*ProcessNaClManifest)(PP_Instance instance, const char* program_url);
 };
 
 typedef struct PPB_NaCl_Private_1_0 PPB_NaCl_Private;
diff --git a/ppapi/cpp/private/find_private.cc b/ppapi/cpp/private/find_private.cc
index 440bc74..2765ae0 100644
--- a/ppapi/cpp/private/find_private.cc
+++ b/ppapi/cpp/private/find_private.cc
@@ -86,12 +86,12 @@
 
 void Find_Private::SetTickmarks(const std::vector<pp::Rect>& tickmarks) {
   if (has_interface<PPB_Find_Private>()) {
-    if (tickmarks.empty())
-      return;
     std::vector<PP_Rect> tickmarks_converted(tickmarks.begin(),
                                              tickmarks.end());
+    PP_Rect* array =
+        tickmarks_converted.empty() ? NULL : &tickmarks_converted[0];
     get_interface<PPB_Find_Private>()->SetTickmarks(
-        associated_instance_.pp_instance(), &tickmarks_converted[0],
+        associated_instance_.pp_instance(), array,
         static_cast<uint32_t>(tickmarks.size()));
   }
 }
diff --git a/ppapi/nacl_irt/irt_start.cc b/ppapi/nacl_irt/irt_start.cc
index a286737..a7c12e6 100644
--- a/ppapi/nacl_irt/irt_start.cc
+++ b/ppapi/nacl_irt/irt_start.cc
@@ -17,7 +17,9 @@
   // In SFI mode, the FDs of IPC channels are NACL_CHROME_DESC_BASE and its
   // successor, which is set in nacl_listener.cc.
   ppapi::SetIPCFileDescriptors(
-      NACL_CHROME_DESC_BASE, NACL_CHROME_DESC_BASE + 1);
+      NACL_CHROME_DESC_BASE,
+      NACL_CHROME_DESC_BASE + 1,
+      -1);  // Currently manifest service is disabled on NaCl in SFI mode.
   ppapi::StartUpPlugin();
 
   nacl_irt_enter_user_code(info, chrome_irt_query);
diff --git a/ppapi/nacl_irt/manifest_service.cc b/ppapi/nacl_irt/manifest_service.cc
new file mode 100644
index 0000000..ed7c4eb
--- /dev/null
+++ b/ppapi/nacl_irt/manifest_service.cc
@@ -0,0 +1,34 @@
+// 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.
+
+#include "ppapi/nacl_irt/manifest_service.h"
+
+#include "base/message_loop/message_loop_proxy.h"
+#include "ipc/ipc_channel_handle.h"
+#include "ipc/ipc_channel_proxy.h"
+#include "ipc/ipc_sync_message_filter.h"
+#include "ppapi/proxy/ppapi_messages.h"
+
+namespace ppapi {
+
+ManifestService::ManifestService(
+    const IPC::ChannelHandle& handle,
+    scoped_refptr<base::MessageLoopProxy> io_message_loop,
+    base::WaitableEvent* shutdown_event) {
+  filter_ = new IPC::SyncMessageFilter(shutdown_event);
+  channel_.reset(new IPC::ChannelProxy(handle,
+                                       IPC::Channel::MODE_SERVER,
+                                       NULL, // Listener
+                                       io_message_loop));
+  channel_->AddFilter(filter_.get());
+}
+
+ManifestService::~ManifestService() {
+}
+
+void ManifestService::StartupInitializationComplete() {
+  filter_->Send(new PpapiHostMsg_StartupInitializationComplete);
+}
+
+}  // namespace ppapi
diff --git a/ppapi/nacl_irt/manifest_service.h b/ppapi/nacl_irt/manifest_service.h
new file mode 100644
index 0000000..ec5e38c
--- /dev/null
+++ b/ppapi/nacl_irt/manifest_service.h
@@ -0,0 +1,43 @@
+// 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.
+
+#ifndef PPAPI_NACL_IRT_MANIFEST_SERVICE_H_
+#define PPAPI_NACL_IRT_MANIFEST_SERVICE_H_
+
+#include "base/macros.h"
+#include "base/memory/ref_counted.h"
+#include "base/memory/scoped_ptr.h"
+
+namespace base {
+class MessageLoopProxy;
+class WaitableEvent;
+}  // namespace base
+
+namespace IPC {
+struct ChannelHandle;
+class ChannelProxy;
+class SyncMessageFilter;
+}  // namespace IPC
+
+namespace ppapi {
+
+class ManifestService {
+ public:
+  ManifestService(const IPC::ChannelHandle& handle,
+                  scoped_refptr<base::MessageLoopProxy> io_message_loop,
+                  base::WaitableEvent* shutdown_event);
+  ~ManifestService();
+
+  void StartupInitializationComplete();
+
+ private:
+  scoped_ptr<IPC::ChannelProxy> channel_;
+  scoped_refptr<IPC::SyncMessageFilter> filter_;
+
+  DISALLOW_COPY_AND_ASSIGN(ManifestService);
+};
+
+}  // namespace ppapi
+
+#endif  // PPAPI_NACL_IRT_MANIFEST_SERVICE_H_
diff --git a/ppapi/nacl_irt/plugin_main.cc b/ppapi/nacl_irt/plugin_main.cc
index eeeb50b..668f67a 100644
--- a/ppapi/nacl_irt/plugin_main.cc
+++ b/ppapi/nacl_irt/plugin_main.cc
@@ -24,15 +24,9 @@
 
 void PpapiPluginRegisterThreadCreator(
     const struct PP_ThreadFunctions* thread_functions) {
-#if defined(__native_client__)
-  // TODO(hidehiko): The thread creation for the PPB_Audio is not yet
-  // implemented on non-SFI mode. Support this. Now, this function invocation
-  // is just ignored.
-
   // Initialize all classes that need to create threads that call back into
   // user code.
   ppapi::PPB_Audio_Shared::SetThreadFunctions(thread_functions);
-#endif
 }
 
 int PpapiPluginMain() {
diff --git a/ppapi/nacl_irt/plugin_startup.cc b/ppapi/nacl_irt/plugin_startup.cc
index a3b5bc2..2061fc8 100644
--- a/ppapi/nacl_irt/plugin_startup.cc
+++ b/ppapi/nacl_irt/plugin_startup.cc
@@ -2,28 +2,59 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "ppapi/nacl_irt/plugin_startup.h"
+
+#include "base/bind.h"
+#include "base/file_descriptor_posix.h"
 #include "base/logging.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/threading/thread.h"
-#include "ppapi/nacl_irt/plugin_startup.h"
+#include "ipc/ipc_channel_handle.h"
+#include "ppapi/nacl_irt/manifest_service.h"
+#include "ppapi/shared_impl/ppb_audio_shared.h"
 
 namespace ppapi {
 namespace {
 
 int g_nacl_browser_ipc_fd = -1;
 int g_nacl_renderer_ipc_fd = -1;
+int g_manifest_service_fd = -1;
 
 base::WaitableEvent* g_shutdown_event = NULL;
 base::Thread* g_io_thread = NULL;
+ManifestService* g_manifest_service = NULL;
+
+// Creates the manifest service on IO thread so that its Listener's thread and
+// IO thread are shared. Upon completion of the manifest service creation,
+// event is signaled.
+void StartUpManifestServiceOnIOThread(base::WaitableEvent* event) {
+  // The start up must be called only once.
+  DCHECK(!g_manifest_service);
+  // manifest_service_fd must be set.
+  DCHECK_NE(g_manifest_service_fd, -1);
+  // IOThread and shutdown event must be initialized in advance.
+  DCHECK(g_io_thread);
+  DCHECK(g_shutdown_event);
+
+  g_manifest_service = new ManifestService(
+      IPC::ChannelHandle(
+          "NaCl IPC", base::FileDescriptor(g_manifest_service_fd, false)),
+      g_io_thread->message_loop_proxy(),
+      g_shutdown_event);
+  event->Signal();
+}
 
 }  // namespace
 
-void SetIPCFileDescriptors(int browser_ipc_fd, int renderer_ipc_fd) {
+void SetIPCFileDescriptors(
+    int browser_ipc_fd, int renderer_ipc_fd, int manifest_service_fd) {
   // The initialization must be only once.
   DCHECK_EQ(g_nacl_browser_ipc_fd, -1);
   DCHECK_EQ(g_nacl_renderer_ipc_fd, -1);
+  DCHECK_EQ(g_manifest_service_fd, -1);
   g_nacl_browser_ipc_fd = browser_ipc_fd;
   g_nacl_renderer_ipc_fd = renderer_ipc_fd;
+  g_manifest_service_fd = manifest_service_fd;
 }
 
 void StartUpPlugin() {
@@ -35,6 +66,22 @@
   g_io_thread = new base::Thread("Chrome_NaClIOThread");
   g_io_thread->StartWithOptions(
       base::Thread::Options(base::MessageLoop::TYPE_IO, 0));
+
+  if (g_manifest_service_fd != -1) {
+    // Manifest service must be created on IOThread so that the main message
+    // handling will be done on the thread, which has a message loop
+    // even before irt_ppapi_start invocation.
+    // TODO(hidehiko,dmichael): This works, but is probably not well designed
+    // usage. Once a better approach is made, replace this by that way.
+    // (crbug.com/364241).
+    base::WaitableEvent event(true, false);
+    g_io_thread->message_loop_proxy()->PostTask(
+        FROM_HERE,
+        base::Bind(StartUpManifestServiceOnIOThread, &event));
+    event.Wait();
+  }
+
+  PPB_Audio_Shared::SetNaClMode();
 }
 
 int GetBrowserIPCFileDescriptor() {
@@ -61,4 +108,8 @@
   return g_io_thread;
 }
 
+ManifestService* GetManifestService() {
+  return g_manifest_service;
+}
+
 }  // namespace ppapi
diff --git a/ppapi/nacl_irt/plugin_startup.h b/ppapi/nacl_irt/plugin_startup.h
index 73c3495..ea14836 100644
--- a/ppapi/nacl_irt/plugin_startup.h
+++ b/ppapi/nacl_irt/plugin_startup.h
@@ -14,11 +14,13 @@
 
 namespace ppapi {
 
+class ManifestService;
+
 // Sets the IPC channels for the browser and the renderer by the given FD
 // numbers. This will be used for non-SFI mode. Must be called before
 // PpapiPluginMain is called.
 PPAPI_PROXY_EXPORT void SetIPCFileDescriptors(
-    int browser_ipc_fd, int renderer_ipc_fd);
+    int browser_ipc_fd, int renderer_ipc_fd, int manifest_service_fd);
 
 // Runs start up procedure for the plugin.
 // Specifically, start background IO thread for IPC, and prepare
@@ -38,6 +40,12 @@
 // Returns the IOThread for the plugin. Must be called after StartUpPlugin().
 base::Thread* GetIOThread();
 
+// Returns the ManifestService interface. To use this, manifest_service_fd
+// needs to be set via SetIPCFileDescriptors. Must be called after
+// StartUpPlugin().
+// If not available, returns NULL.
+ManifestService* GetManifestService();
+
 }  // namespace ppapi
 
 #endif  // PPAPI_NACL_IRT_PLUGIN_STARTUP_H_
diff --git a/ppapi/nacl_irt/ppapi_dispatcher.cc b/ppapi/nacl_irt/ppapi_dispatcher.cc
index c0aa400..9ca76b2 100644
--- a/ppapi/nacl_irt/ppapi_dispatcher.cc
+++ b/ppapi/nacl_irt/ppapi_dispatcher.cc
@@ -23,6 +23,8 @@
 #include "ipc/ipc_message.h"
 #include "ppapi/c/ppp.h"
 #include "ppapi/c/ppp_instance.h"
+#include "ppapi/nacl_irt/manifest_service.h"
+#include "ppapi/nacl_irt/plugin_startup.h"
 #include "ppapi/proxy/plugin_dispatcher.h"
 #include "ppapi/proxy/plugin_globals.h"
 #include "ppapi/proxy/plugin_message_filter.h"
@@ -199,6 +201,11 @@
   }
   // From here, the dispatcher will manage its own lifetime according to the
   // lifetime of the attached channel.
+
+  // Notify the renderer process, if necessary.
+  ManifestService* manifest_service = GetManifestService();
+  if (manifest_service)
+    manifest_service->StartupInitializationComplete();
 }
 
 void PpapiDispatcher::OnPluginDispatcherMessageReceived(
diff --git a/ppapi/native_client/src/trusted/plugin/file_downloader.cc b/ppapi/native_client/src/trusted/plugin/file_downloader.cc
index 9bfe0e9..1118e1d 100644
--- a/ppapi/native_client/src/trusted/plugin/file_downloader.cc
+++ b/ppapi/native_client/src/trusted/plugin/file_downloader.cc
@@ -23,9 +23,6 @@
 
 namespace {
 
-const int32_t kExtensionUrlRequestStatusOk = 200;
-const int32_t kDataUriRequestStatusOk = 0;
-
 struct NaClFileInfo NoFileInfo() {
   struct NaClFileInfo info;
   memset(&info, 0, sizeof(info));
@@ -125,12 +122,10 @@
     return false;
 
   CHECK(instance_ != NULL);
-  open_time_ = NaClGetTimeOfDayMicroseconds();
   status_code_ = -1;
   url_ = url;
   file_open_notify_callback_ = callback;
   mode_ = mode;
-  buffer_.clear();
   file_info_.FreeResources();
   pp::URLRequestInfo url_request(instance_);
 
@@ -149,34 +144,10 @@
   // Note that we have the only reference to the underlying objects, so
   // this will implicitly close any pending IO and destroy them.
   url_loader_ = pp::URLLoader(instance_);
-  pp::Var url_var = pp::Var(url);
-  url_scheme_ = instance_->nacl_interface()->GetUrlScheme(url_var.pp_var());
-  bool grant_universal_access = false;
-  if (url_scheme_ == PP_SCHEME_DATA) {
-    // TODO(elijahtaylor) Remove this when data URIs can be read without
-    // universal access.
-    // https://bugs.webkit.org/show_bug.cgi?id=17352
-    if (mode_ == DOWNLOAD_TO_BUFFER) {
-      grant_universal_access = true;
-    } else {
-      // Open is to invoke a callback on success or failure. Schedule
-      // it asynchronously to follow PPAPI's convention and avoid reentrancy.
-      pp::Core* core = pp::Module::Get()->core();
-      core->CallOnMainThread(0, callback, PP_ERROR_NOACCESS);
-      PLUGIN_PRINTF(("FileDownloader::Open (pp_error=PP_ERROR_NOACCESS)\n"));
-      return true;
-    }
-  }
 
   url_request.SetRecordDownloadProgress(record_progress);
 
   if (url_loader_trusted_interface_ != NULL) {
-    if (grant_universal_access) {
-      // TODO(sehr,jvoung): See if we can remove this -- currently
-      // only used for data URIs.
-      url_loader_trusted_interface_->GrantUniversalAccess(
-          url_loader_.pp_resource());
-    }
     if (progress_callback != NULL) {
       url_loader_trusted_interface_->RegisterStatusCallback(
           url_loader_.pp_resource(), progress_callback);
@@ -211,7 +182,6 @@
 
   file_info_.FreeResources();
   CHECK(instance_ != NULL);
-  open_time_ = NaClGetTimeOfDayMicroseconds();
   status_code_ = NACL_HTTP_STATUS_OK;
   url_ = url;
   mode_ = DOWNLOAD_NONE;
@@ -236,15 +206,6 @@
   return info_to_return;
 }
 
-int64_t FileDownloader::TimeSinceOpenMilliseconds() const {
-  int64_t now = NaClGetTimeOfDayMicroseconds();
-  // If Open() wasn't called or we somehow return an earlier time now, just
-  // return the 0 rather than worse nonsense values.
-  if (open_time_ < 0 || now < open_time_)
-    return 0;
-  return (now - open_time_) / NACL_MICROS_PER_MILLI;
-}
-
 bool FileDownloader::InitialResponseIsValid() {
   // Process the response, validating the headers to confirm successful loading.
   url_response_ = url_loader_.GetResponseInfo();
@@ -262,30 +223,10 @@
   }
   full_url_ = full_url.AsString();
 
-  // Note that URLs in the data-URI scheme produce different error
-  // codes than other schemes.  This is because data-URI are really a
-  // special kind of file scheme, and therefore do not produce HTTP
-  // status codes.
-  bool status_ok = false;
   status_code_ = url_response_.GetStatusCode();
-  switch (url_scheme_) {
-    case PP_SCHEME_CHROME_EXTENSION:
-      PLUGIN_PRINTF(("FileDownloader::InitialResponseIsValid (chrome-extension "
-                     "response status_code=%" NACL_PRId32 ")\n", status_code_));
-      status_ok = (status_code_ == kExtensionUrlRequestStatusOk);
-      break;
-    case PP_SCHEME_DATA:
-      PLUGIN_PRINTF(("FileDownloader::InitialResponseIsValid (data URI "
-                     "response status_code=%" NACL_PRId32 ")\n", status_code_));
-      status_ok = (status_code_ == kDataUriRequestStatusOk);
-      break;
-    case PP_SCHEME_OTHER:
-      PLUGIN_PRINTF(("FileDownloader::InitialResponseIsValid (HTTP response "
-                     "status_code=%" NACL_PRId32 ")\n", status_code_));
-      status_ok = (status_code_ == NACL_HTTP_STATUS_OK);
-      break;
-  }
-  return status_ok;
+  PLUGIN_PRINTF(("FileDownloader::InitialResponseIsValid ("
+                 "response status_code=%" NACL_PRId32 ")\n", status_code_));
+  return status_code_ == NACL_HTTP_STATUS_OK;
 }
 
 void FileDownloader::URLLoadStartNotify(int32_t pp_error) {
@@ -356,8 +297,7 @@
   // Validate response again on load (though it should be the same
   // as it was during InitialResponseIsValid?).
   url_response_ = url_loader_.GetResponseInfo();
-  CHECK(url_response_.GetStatusCode() == NACL_HTTP_STATUS_OK ||
-        url_response_.GetStatusCode() == kExtensionUrlRequestStatusOk);
+  CHECK(url_response_.GetStatusCode() == NACL_HTTP_STATUS_OK);
 
   // Record the full url from the response.
   pp::Var full_url = url_response_.GetURL();
@@ -403,9 +343,7 @@
     }
     StreamFinishNotify(PP_OK);
   } else {
-    if (mode_ == DOWNLOAD_TO_BUFFER) {
-      buffer_.insert(buffer_.end(), &temp_buffer_[0], &temp_buffer_[pp_error]);
-    } else if (mode_ == DOWNLOAD_TO_BUFFER_AND_STREAM) {
+    if (mode_ == DOWNLOAD_TO_BUFFER_AND_STREAM) {
       PLUGIN_PRINTF(("Running data_stream_callback, temp_buffer_=%p\n",
                      &temp_buffer_[0]));
       StreamCallback cb = data_stream_callback_source_->GetCallback();
diff --git a/ppapi/native_client/src/trusted/plugin/file_downloader.h b/ppapi/native_client/src/trusted/plugin/file_downloader.h
index 86fa6ea..fa70a70 100644
--- a/ppapi/native_client/src/trusted/plugin/file_downloader.h
+++ b/ppapi/native_client/src/trusted/plugin/file_downloader.h
@@ -27,7 +27,6 @@
 
 typedef enum {
   DOWNLOAD_TO_FILE = 0,
-  DOWNLOAD_TO_BUFFER,
   DOWNLOAD_TO_BUFFER_AND_STREAM,
   DOWNLOAD_NONE
 } DownloadMode;
@@ -79,9 +78,7 @@
         stream_finish_callback_(pp::BlockUntilComplete()),
         file_io_private_interface_(NULL),
         url_loader_trusted_interface_(NULL),
-        open_time_(-1),
         mode_(DOWNLOAD_NONE),
-        url_scheme_(PP_SCHEME_OTHER),
         data_stream_callback_source_(NULL) {}
   ~FileDownloader() {}
 
@@ -133,9 +130,6 @@
   // delegate does not have to close it.
   struct NaClFileInfo GetFileInfo();
 
-  // Returns the time delta between the call to Open() and this function.
-  int64_t TimeSinceOpenMilliseconds() const;
-
   // Returns the url passed to Open().
   const nacl::string& url() const { return url_; }
 
@@ -161,9 +155,6 @@
   bool GetDownloadProgress(int64_t* bytes_received,
                            int64_t* total_bytes_to_be_received) const;
 
-  // Returns the buffer used for DOWNLOAD_TO_BUFFER mode.
-  const std::deque<char>& buffer() const { return buffer_; }
-
   int status_code() const { return status_code_; }
   nacl::string GetResponseHeaders() const;
 
@@ -178,14 +169,12 @@
   //   1) Ask the browser to start streaming |url_| as a file.
   //   2) Ask the browser to finish streaming if headers indicate success.
   //   3) Ask the browser to open the file, so we can get the file descriptor.
-  // For DOWNLOAD_TO_BUFFER, the process is very similar:
+  // For DOWNLOAD_TO_BUFFER_AND_STREAM, the process is very similar:
   //   1) Ask the browser to start streaming |url_| to an internal buffer.
   //   2) Ask the browser to finish streaming to |temp_buffer_| on success.
-  //   3) Wait for streaming to finish, filling |buffer_| incrementally.
+  //   3) Wait for streaming to finish, passing the data directly to the user.
   // Each step is done asynchronously using callbacks.  We create callbacks
   // through a factory to take advantage of ref-counting.
-  // DOWNLOAD_STREAM is similar to DOWNLOAD_TO_BUFFER except the downloaded
-  // data is passed directly to the user instead of saved in a buffer.
   // The public Open*() functions start step 1), and the public FinishStreaming
   // function proceeds to step 2) and 3).
   bool InitialResponseIsValid();
@@ -208,13 +197,10 @@
   const PPB_URLLoaderTrusted* url_loader_trusted_interface_;
   pp::URLLoader url_loader_;
   pp::CompletionCallbackFactory<FileDownloader> callback_factory_;
-  int64_t open_time_;
   int32_t status_code_;
   DownloadMode mode_;
   static const uint32_t kTempBufferSize = 16384;
   std::vector<char> temp_buffer_;
-  std::deque<char> buffer_;
-  PP_UrlSchemeType url_scheme_;
   StreamCallbackSource* data_stream_callback_source_;
   NaClFileInfoAutoCloser file_info_;
 };
diff --git a/ppapi/native_client/src/trusted/plugin/json_manifest.cc b/ppapi/native_client/src/trusted/plugin/json_manifest.cc
index 4ab5023..1fb51ea 100644
--- a/ppapi/native_client/src/trusted/plugin/json_manifest.cc
+++ b/ppapi/native_client/src/trusted/plugin/json_manifest.cc
@@ -15,10 +15,10 @@
 #include "native_client/src/include/nacl_string.h"
 #include "native_client/src/include/portability.h"
 #include "native_client/src/shared/platform/nacl_check.h"
+#include "ppapi/c/private/ppb_nacl_private.h"
 #include "ppapi/cpp/dev/url_util_dev.h"
 #include "ppapi/cpp/var.h"
 #include "ppapi/native_client/src/trusted/plugin/plugin_error.h"
-#include "ppapi/native_client/src/trusted/plugin/pnacl_options.h"
 #include "ppapi/native_client/src/trusted/plugin/utility.h"
 #include "third_party/jsoncpp/source/include/json/reader.h"
 
@@ -381,15 +381,20 @@
   return true;
 }
 
-void GrabUrlAndPnaclOptions(const Json::Value& url_spec,
+void GrabUrlAndPNaClOptions(const Json::Value& url_spec,
                             nacl::string* url,
-                            PnaclOptions* pnacl_options) {
+                            PP_PNaClOptions* pnacl_options) {
   *url = url_spec[kUrlKey].asString();
-  pnacl_options->set_translate(true);
+  pnacl_options->translate = PP_TRUE;
   if (url_spec.isMember(kOptLevelKey)) {
     int32_t opt_raw = url_spec[kOptLevelKey].asInt();
-    // set_opt_level will normalize the values.
-    pnacl_options->set_opt_level(opt_raw);
+    int32_t opt_level;
+    // Currently only allow 0 or 2, since that is what we test.
+    if (opt_raw <= 0)
+      opt_level = 0;
+    else
+      opt_level = 2;
+    pnacl_options->opt_level = opt_level;
   }
 }
 
@@ -503,7 +508,7 @@
 bool JsonManifest::GetURLFromISADictionary(const Json::Value& dictionary,
                                            const nacl::string& parent_key,
                                            nacl::string* url,
-                                           PnaclOptions* pnacl_options,
+                                           PP_PNaClOptions* pnacl_options,
                                            bool* uses_nonsfi_mode,
                                            ErrorInfo* error_info) const {
   DCHECK(url != NULL && pnacl_options != NULL && error_info != NULL);
@@ -546,14 +551,14 @@
   // If found, mark that it is a debug URL. Otherwise, fall back to
   // checking for pnacl-translate URLs, etc. and don't mark it as a debug URL.
   if (pnacl_debug_ && isa_spec.isMember(kPnaclDebugKey)) {
-    GrabUrlAndPnaclOptions(isa_spec[kPnaclDebugKey], url, pnacl_options);
-    pnacl_options->set_debug(true);
+    GrabUrlAndPNaClOptions(isa_spec[kPnaclDebugKey], url, pnacl_options);
+    pnacl_options->is_debug = PP_TRUE;
   } else if (isa_spec.isMember(kPnaclTranslateKey)) {
-    GrabUrlAndPnaclOptions(isa_spec[kPnaclTranslateKey], url, pnacl_options);
+    GrabUrlAndPNaClOptions(isa_spec[kPnaclTranslateKey], url, pnacl_options);
   } else {
     // NaCl
     *url = isa_spec[kUrlKey].asString();
-    pnacl_options->set_translate(false);
+    pnacl_options->translate = PP_FALSE;
   }
 
   return true;
@@ -562,7 +567,7 @@
 bool JsonManifest::GetKeyUrl(const Json::Value& dictionary,
                              const nacl::string& key,
                              nacl::string* full_url,
-                             PnaclOptions* pnacl_options,
+                             PP_PNaClOptions* pnacl_options,
                              ErrorInfo* error_info) const {
   DCHECK(full_url != NULL && pnacl_options != NULL && error_info != NULL);
   if (!dictionary.isMember(key)) {
@@ -581,7 +586,7 @@
 }
 
 bool JsonManifest::GetProgramURL(nacl::string* full_url,
-                                 PnaclOptions* pnacl_options,
+                                 PP_PNaClOptions* pnacl_options,
                                  bool* uses_nonsfi_mode,
                                  ErrorInfo* error_info) const {
   if (full_url == NULL || pnacl_options == NULL || error_info == NULL)
@@ -620,7 +625,7 @@
 
 bool JsonManifest::ResolveKey(const nacl::string& key,
                               nacl::string* full_url,
-                              PnaclOptions* pnacl_options,
+                              PP_PNaClOptions* pnacl_options,
                               ErrorInfo* error_info) const {
   NaClLog(3, "JsonManifest::ResolveKey(%s)\n", key.c_str());
   // key must be one of kProgramKey or kFileKey '/' file-section-key
diff --git a/ppapi/native_client/src/trusted/plugin/json_manifest.h b/ppapi/native_client/src/trusted/plugin/json_manifest.h
index e71abeb..1f4180c 100644
--- a/ppapi/native_client/src/trusted/plugin/json_manifest.h
+++ b/ppapi/native_client/src/trusted/plugin/json_manifest.h
@@ -18,6 +18,8 @@
 #include "ppapi/native_client/src/trusted/plugin/manifest.h"
 #include "third_party/jsoncpp/source/include/json/value.h"
 
+struct PP_PNaClOptions;
+
 namespace pp {
 class URLUtil_Dev;
 }  // namespace pp
@@ -25,7 +27,6 @@
 namespace plugin {
 
 class ErrorInfo;
-class PnaclOptions;
 
 class JsonManifest : public Manifest {
  public:
@@ -49,7 +50,7 @@
   // Gets the full program URL for the current sandbox ISA from the
   // manifest file.
   virtual bool GetProgramURL(nacl::string* full_url,
-                             PnaclOptions* pnacl_options,
+                             PP_PNaClOptions* pnacl_options,
                              bool* uses_nonsfi_mode,
                              ErrorInfo* error_info) const;
 
@@ -65,7 +66,7 @@
   // If there was an error, details are reported via error_info.
   virtual bool ResolveKey(const nacl::string& key,
                           nacl::string* full_url,
-                          PnaclOptions* pnacl_options,
+                          PP_PNaClOptions* pnacl_options,
                           ErrorInfo* error_info) const;
 
  private:
@@ -84,13 +85,13 @@
   bool GetKeyUrl(const Json::Value& dictionary,
                  const nacl::string& key,
                  nacl::string* full_url,
-                 PnaclOptions* pnacl_options,
+                 PP_PNaClOptions* pnacl_options,
                  ErrorInfo* error_info) const;
 
   bool GetURLFromISADictionary(const Json::Value& dictionary,
                                const nacl::string& parent_key,
                                nacl::string* url,
-                               PnaclOptions* pnacl_options,
+                               PP_PNaClOptions* pnacl_options,
                                bool* uses_nonsfi_mode,
                                ErrorInfo* error_info) const;
 
diff --git a/ppapi/native_client/src/trusted/plugin/manifest.h b/ppapi/native_client/src/trusted/plugin/manifest.h
index c430e1f..aa1ad3b 100644
--- a/ppapi/native_client/src/trusted/plugin/manifest.h
+++ b/ppapi/native_client/src/trusted/plugin/manifest.h
@@ -17,6 +17,8 @@
 #include "native_client/src/include/nacl_string.h"
 #include "third_party/jsoncpp/source/include/json/value.h"
 
+struct PP_PNaClOptions;
+
 namespace pp {
 class URLUtil_Dev;
 }  // namespace pp
@@ -24,7 +26,6 @@
 namespace plugin {
 
 class ErrorInfo;
-class PnaclOptions;
 
 class Manifest {
  public:
@@ -42,7 +43,7 @@
   // manifest file.  Fills in |pnacl_options| if the program requires
   // PNaCl translation.
   virtual bool GetProgramURL(nacl::string* full_url,
-                             PnaclOptions* pnacl_options,
+                             PP_PNaClOptions* pnacl_options,
                              bool* uses_nonsfi_mode,
                              ErrorInfo* error_info) const = 0;
 
@@ -60,7 +61,7 @@
   // If there was an error, details are reported via error_info.
   virtual bool ResolveKey(const nacl::string& key,
                           nacl::string* full_url,
-                          PnaclOptions* pnacl_options,
+                          PP_PNaClOptions* pnacl_options,
                           ErrorInfo* error_info) const = 0;
 
  protected:
diff --git a/ppapi/native_client/src/trusted/plugin/nacl_entry_points.h b/ppapi/native_client/src/trusted/plugin/nacl_entry_points.h
index 2f02d6b..4d4c923 100644
--- a/ppapi/native_client/src/trusted/plugin/nacl_entry_points.h
+++ b/ppapi/native_client/src/trusted/plugin/nacl_entry_points.h
@@ -16,6 +16,7 @@
 #include "ppapi/c/pp_completion_callback.h"
 #include "ppapi/c/pp_instance.h"
 #include "ppapi/c/private/ppb_instance_private.h"
+#include "ppapi/c/private/ppb_nacl_private.h"
 
 typedef PP_ExternalPluginResult (*LaunchNaClProcessFunc)(
     PP_Instance instance,
@@ -27,6 +28,8 @@
     PP_Bool enable_dyncode_syscalls,
     PP_Bool enable_exception_handling,
     PP_Bool enable_crash_throttling,
+    const PP_ManifestService* manifest_service_interface,
+    void* manifest_service_user_data,
     NaClHandle* result_socket,
     struct PP_Var* error_message,
     PP_CompletionCallback callback);
diff --git a/ppapi/native_client/src/trusted/plugin/plugin.cc b/ppapi/native_client/src/trusted/plugin/plugin.cc
index 270d71d..c4b1aaf 100644
--- a/ppapi/native_client/src/trusted/plugin/plugin.cc
+++ b/ppapi/native_client/src/trusted/plugin/plugin.cc
@@ -268,7 +268,10 @@
   // associated listener threads do not go unjoined because if they
   // outlive the Plugin object, they will not be memory safe.
   ShutDownSubprocesses();
-  SelLdrStartParams params(manifest_base_url(),
+  pp::Var manifest_base_url =
+      pp::Var(pp::PASS_REF, nacl_interface_->GetManifestBaseURL(pp_instance()));
+  std::string manifest_base_url_str = manifest_base_url.AsString();
+  SelLdrStartParams params(manifest_base_url_str,
                            true /* uses_irt */,
                            true /* uses_ppapi */,
                            uses_nonsfi_mode,
@@ -431,7 +434,7 @@
 // failure. Note that module loading functions will log their own errors.
 bool Plugin::Init(uint32_t argc, const char* argn[], const char* argv[]) {
   PLUGIN_PRINTF(("Plugin::Init (argc=%" NACL_PRIu32 ")\n", argc));
-  nacl_interface_->SetInitTime(pp_instance());
+  nacl_interface_->InitializePlugin(pp_instance());
 
   url_util_ = pp::URLUtil_Dev::Get();
   if (url_util_ == NULL)
@@ -461,16 +464,6 @@
     } else {
       manifest_url = LookupArgument(kSrcManifestAttribute);
     }
-    // Use the document URL as the base for resolving relative URLs to find the
-    // manifest.  This takes into account the setting of <base> tags that
-    // precede the embed/object.
-    CHECK(url_util_ != NULL);
-    pp::Var base_var = url_util_->GetDocumentURL(this);
-    if (!base_var.is_string()) {
-      PLUGIN_PRINTF(("Plugin::Init (unable to find document url)\n"));
-      return false;
-    }
-    set_plugin_base_url(base_var.AsString());
     if (manifest_url.empty()) {
       // TODO(sehr,polina): this should be a hard error when scripting
       // the src property is no longer allowed.
@@ -484,7 +477,7 @@
       // Issue a GET for the manifest_url.  The manifest file will be parsed to
       // determine the nexe URL.
       // Sets src property to full manifest URL.
-      RequestNaClManifest(manifest_url.c_str());
+      RequestNaClManifest(manifest_url);
     }
   }
 
@@ -499,6 +492,8 @@
       wrapper_factory_(NULL),
       enable_dev_interfaces_(false),
       time_of_last_progress_event_(0),
+      manifest_open_time_(-1),
+      nexe_open_time_(-1),
       nacl_interface_(NULL),
       uma_interface_(this) {
   PLUGIN_PRINTF(("Plugin::Plugin (this=%p, pp_instance=%"
@@ -592,6 +587,13 @@
       nexe_bytes_read = stat_buf.st_size;
   }
 
+  int64_t now = NaClGetTimeOfDayMicroseconds();
+  int64_t download_time;
+  if (now < nexe_open_time_)
+    download_time = 0;
+  else
+    download_time = now - nexe_open_time_;
+
   nacl_interface_->NexeFileDidOpen(
       pp_instance(),
       pp_error,
@@ -599,7 +601,7 @@
       nexe_downloader_.status_code(),
       nexe_bytes_read,
       nexe_downloader_.url().c_str(),
-      nexe_downloader_.TimeSinceOpenMilliseconds());
+      download_time / 1000);
 
   if (nexe_bytes_read == -1)
     return;
@@ -683,47 +685,17 @@
   }
 }
 
-void Plugin::NaClManifestBufferReady(int32_t pp_error) {
-  PLUGIN_PRINTF(("Plugin::NaClManifestBufferReady (pp_error=%"
-                 NACL_PRId32 ")\n", pp_error));
-  ErrorInfo error_info;
-  if (pp_error != PP_OK) {
-    if (pp_error == PP_ERROR_ABORTED) {
-      ReportLoadAbort();
-    } else {
-      error_info.SetReport(PP_NACL_ERROR_MANIFEST_LOAD_URL,
-                           "could not load manifest url.");
-      ReportLoadError(error_info);
-    }
-    return;
-  }
-
-  const std::deque<char>& buffer = nexe_downloader_.buffer();
-  size_t buffer_size = buffer.size();
-  if (buffer_size > kNaClManifestMaxFileBytes) {
-    error_info.SetReport(PP_NACL_ERROR_MANIFEST_TOO_LARGE,
-                         "manifest file too large.");
-    ReportLoadError(error_info);
-    return;
-  }
-  nacl::scoped_array<char> json_buffer(new char[buffer_size + 1]);
-  if (json_buffer == NULL) {
-    error_info.SetReport(PP_NACL_ERROR_MANIFEST_MEMORY_ALLOC,
-                         "could not allocate manifest memory.");
-    ReportLoadError(error_info);
-    return;
-  }
-  std::copy(buffer.begin(), buffer.begin() + buffer_size, &json_buffer[0]);
-  json_buffer[buffer_size] = '\0';
-
-  ProcessNaClManifest(json_buffer.get());
-}
-
 void Plugin::NaClManifestFileDidOpen(int32_t pp_error) {
   PLUGIN_PRINTF(("Plugin::NaClManifestFileDidOpen (pp_error=%"
                  NACL_PRId32 ")\n", pp_error));
+  int64_t now = NaClGetTimeOfDayMicroseconds();
+  int64_t download_time;
+  if (now < manifest_open_time_)
+    download_time = 0;
+  else
+    download_time = now - manifest_open_time_;
   HistogramTimeSmall("NaCl.Perf.StartupTime.ManifestDownload",
-                     nexe_downloader_.TimeSinceOpenMilliseconds());
+                     download_time / 1000);
   HistogramHTTPStatusCode(
       nacl_interface_->GetIsInstalled(pp_instance()) ?
           "NaCl.HttpStatusCodeClass.Manifest.InstalledApp" :
@@ -796,22 +768,15 @@
   }
 
   nacl::string program_url;
-  PnaclOptions pnacl_options;
+  PP_PNaClOptions pnacl_options = {PP_FALSE, PP_FALSE, 2};
   bool uses_nonsfi_mode;
   if (manifest_->GetProgramURL(
           &program_url, &pnacl_options, &uses_nonsfi_mode, &error_info)) {
-    pp::Var program_url_var(program_url);
-    nacl_interface_->SetIsInstalled(
-        pp_instance(),
-        PP_FromBool(
-            nacl_interface_->GetUrlScheme(program_url_var.pp_var()) ==
-            PP_SCHEME_CHROME_EXTENSION));
+    // TODO(teravest): Make ProcessNaClManifest take responsibility for more of
+    // this function.
+    nacl_interface_->ProcessNaClManifest(pp_instance(), program_url.c_str());
     uses_nonsfi_mode_ = uses_nonsfi_mode;
-    nacl_interface_->SetNaClReadyState(pp_instance(),
-                                       PP_NACL_READY_STATE_LOADING);
-    // Inform JavaScript that we found a nexe URL to load.
-    EnqueueProgressEvent(PP_NACL_EVENT_PROGRESS);
-    if (pnacl_options.translate()) {
+    if (pnacl_options.translate) {
       pp::CompletionCallback translate_callback =
           callback_factory_.NewCallback(&Plugin::BitcodeDidTranslate);
       // Will always call the callback on success or failure.
@@ -822,6 +787,7 @@
                                             translate_callback));
       return;
     } else {
+      nexe_open_time_ = NaClGetTimeOfDayMicroseconds();
       // Try the fast path first. This will only block if the file is installed.
       if (OpenURLFast(program_url, &nexe_downloader_)) {
         NexeFileDidOpen(PP_OK);
@@ -845,48 +811,34 @@
 
 void Plugin::RequestNaClManifest(const nacl::string& url) {
   PLUGIN_PRINTF(("Plugin::RequestNaClManifest (url='%s')\n", url.c_str()));
-  PLUGIN_PRINTF(("Plugin::RequestNaClManifest (plugin base url='%s')\n",
-                 plugin_base_url().c_str()));
-  // The full URL of the manifest file is relative to the base url.
-  CHECK(url_util_ != NULL);
-  pp::Var nmf_resolved_url =
-      url_util_->ResolveRelativeToURL(plugin_base_url(), pp::Var(url));
-  if (!nmf_resolved_url.is_string()) {
-    ErrorInfo error_info;
-    error_info.SetReport(
-        PP_NACL_ERROR_MANIFEST_RESOLVE_URL,
-        nacl::string("could not resolve URL \"") + url.c_str() +
-        "\" relative to \"" + plugin_base_url().c_str() + "\".");
-    ReportLoadError(error_info);
+  PP_Bool is_data_uri;
+  ErrorInfo error_info;
+  if (!nacl_interface_->RequestNaClManifest(pp_instance(), url.c_str(),
+                                            &is_data_uri))
     return;
-  }
-  PLUGIN_PRINTF(("Plugin::RequestNaClManifest (resolved url='%s')\n",
-                 nmf_resolved_url.AsString().c_str()));
-  nacl_interface_->SetIsInstalled(
-      pp_instance(),
-      PP_FromBool(
-          nacl_interface_->GetUrlScheme(nmf_resolved_url.pp_var()) ==
-          PP_SCHEME_CHROME_EXTENSION));
-  set_manifest_base_url(nmf_resolved_url.AsString());
-  // Inform JavaScript that a load is starting.
-  nacl_interface_->SetNaClReadyState(pp_instance(), PP_NACL_READY_STATE_OPENED);
-  EnqueueProgressEvent(PP_NACL_EVENT_LOADSTART);
-  bool is_data_uri =
-      (nacl_interface_->GetUrlScheme(nmf_resolved_url.pp_var()) ==
-       PP_SCHEME_DATA);
-  HistogramEnumerateManifestIsDataURI(static_cast<int>(is_data_uri));
+  pp::Var nmf_resolved_url =
+      pp::Var(pp::PASS_REF, nacl_interface_->GetManifestBaseURL(pp_instance()));
   if (is_data_uri) {
-    pp::CompletionCallback open_callback =
-        callback_factory_.NewCallback(&Plugin::NaClManifestBufferReady);
-    // Will always call the callback on success or failure.
-    CHECK(nexe_downloader_.Open(nmf_resolved_url.AsString(),
-                                DOWNLOAD_TO_BUFFER,
-                                open_callback,
-                                false,
-                                NULL));
+    std::string string_nmf_resolved_url = nmf_resolved_url.AsString();
+    pp::Var nmf_data = pp::Var(
+        pp::PASS_REF,
+        nacl_interface_->ParseDataURL(string_nmf_resolved_url.c_str()));
+    if (!nmf_data.is_string()) {
+      error_info.SetReport(PP_NACL_ERROR_MANIFEST_LOAD_URL,
+                           "could not load manifest url.");
+      ReportLoadError(error_info);
+    } else if (nmf_data.AsString().size() > kNaClManifestMaxFileBytes) {
+      error_info.SetReport(PP_NACL_ERROR_MANIFEST_TOO_LARGE,
+                           "manifest file too large.");
+      ReportLoadError(error_info);
+    } else {
+      // TODO(teravest): Does this have to be async for any reason?
+      ProcessNaClManifest(nmf_data.AsString());
+    }
   } else {
     pp::CompletionCallback open_callback =
         callback_factory_.NewCallback(&Plugin::NaClManifestFileDidOpen);
+    manifest_open_time_ = NaClGetTimeOfDayMicroseconds();
     // Will always call the callback on success or failure.
     CHECK(nexe_downloader_.Open(nmf_resolved_url.AsString(),
                                 DOWNLOAD_TO_FILE,
@@ -908,12 +860,15 @@
   bool is_pnacl = (mime_type() == kPnaclMIMEType);
   bool nonsfi_mode_enabled =
       PP_ToBool(nacl_interface_->IsNonSFIModeEnabled());
+  pp::Var manifest_base_url =
+      pp::Var(pp::PASS_REF, nacl_interface_->GetManifestBaseURL(pp_instance()));
+  std::string manifest_base_url_str = manifest_base_url.AsString();
   bool pnacl_debug = GetNaClInterface()->NaClDebugEnabledForURL(
-      manifest_base_url().c_str());
+      manifest_base_url_str.c_str());
   const char* sandbox_isa = nacl_interface_->GetSandboxArch();
   nacl::scoped_ptr<JsonManifest> json_manifest(
       new JsonManifest(url_util_,
-                       manifest_base_url(),
+                       manifest_base_url_str,
                        (is_pnacl ? kPortableArch : sandbox_isa),
                        nonsfi_mode_enabled,
                        pnacl_debug));
@@ -973,17 +928,11 @@
   FileDownloader* downloader = new FileDownloader();
   downloader->Initialize(this);
   url_downloaders_.insert(downloader);
+
   // Untrusted loads are always relative to the page's origin.
-  CHECK(url_util_ != NULL);
-  pp::Var resolved_url =
-      url_util_->ResolveRelativeToURL(pp::Var(plugin_base_url()), url);
-  if (!resolved_url.is_string()) {
-    PLUGIN_PRINTF(("Plugin::StreamAsFile: "
-                   "could not resolve url \"%s\" relative to plugin \"%s\".",
-                   url.c_str(),
-                   plugin_base_url().c_str()));
+  if (!GetNaClInterface()->ResolvesRelativeToPluginBaseUrl(pp_instance(),
+                                                           url.c_str()))
     return false;
-  }
 
   // Try the fast path first. This will only block if the file is installed.
   if (OpenURLFast(url, downloader)) {
@@ -1081,14 +1030,6 @@
   HistogramEnumerateSelLdrLoadStatus(static_cast<NaClErrorCode>(status));
 }
 
-void Plugin::EnqueueProgressEvent(PP_NaClEventType event_type) {
-  EnqueueProgressEvent(event_type,
-                       NACL_NO_URL,
-                       Plugin::LENGTH_IS_NOT_COMPUTABLE,
-                       Plugin::kUnknownBytes,
-                       Plugin::kUnknownBytes);
-}
-
 void Plugin::EnqueueProgressEvent(PP_NaClEventType event_type,
                                   const nacl::string& url,
                                   LengthComputable length_computable,
diff --git a/ppapi/native_client/src/trusted/plugin/plugin.gypi b/ppapi/native_client/src/trusted/plugin/plugin.gypi
index f8c8b8a..d9de561 100644
--- a/ppapi/native_client/src/trusted/plugin/plugin.gypi
+++ b/ppapi/native_client/src/trusted/plugin/plugin.gypi
@@ -13,7 +13,6 @@
       'nacl_subprocess.cc',
       'plugin.cc',
       'pnacl_coordinator.cc',
-      'pnacl_options.cc',
       'pnacl_resources.cc',
       'pnacl_translate_thread.cc',
       'sel_ldr_launcher_chrome.cc',
diff --git a/ppapi/native_client/src/trusted/plugin/plugin.h b/ppapi/native_client/src/trusted/plugin/plugin.h
index f786421..a1e12c3 100644
--- a/ppapi/native_client/src/trusted/plugin/plugin.h
+++ b/ppapi/native_client/src/trusted/plugin/plugin.h
@@ -134,7 +134,6 @@
   // event (loadstart, progress, error, abort, load, loadend).  Events are
   // enqueued on the JavaScript event loop, which then calls back through
   // DispatchProgressEvent.
-  void EnqueueProgressEvent(PP_NaClEventType event_type);
   void EnqueueProgressEvent(PP_NaClEventType event_type,
                             const nacl::string& url,
                             LengthComputable length_computable,
@@ -144,18 +143,6 @@
   // Report the error code that sel_ldr produces when starting a nexe.
   void ReportSelLdrLoadStatus(int status);
 
-  // URL resolution support.
-  // plugin_base_url is the URL used for resolving relative URLs used in
-  // src="...".
-  nacl::string plugin_base_url() const { return plugin_base_url_; }
-  void set_plugin_base_url(const nacl::string& url) { plugin_base_url_ = url; }
-  // manifest_base_url is the URL used for resolving relative URLs mentioned
-  // in manifest files.  If the manifest is a data URI, this is an empty string.
-  nacl::string manifest_base_url() const { return manifest_base_url_; }
-  void set_manifest_base_url(const nacl::string& url) {
-    manifest_base_url_ = url;
-  }
-
   nacl::DescWrapperFactory* wrapper_factory() const { return wrapper_factory_; }
 
   // Requests a NaCl manifest download from a |url| relative to the page origin.
@@ -297,9 +284,6 @@
   // chosen for the sandbox ISA, any current service runtime is shut down, the
   // .nexe is loaded and run.
 
-  // Callback used when getting the manifest file as a buffer (e.g., data URIs)
-  void NaClManifestBufferReady(int32_t pp_error);
-
   // Callback used when getting the manifest file as a local file descriptor.
   void NaClManifestFileDidOpen(int32_t pp_error);
 
@@ -413,6 +397,10 @@
   int64_t time_of_last_progress_event_;
   int exit_status_;
 
+  // Open times are in microseconds.
+  int64_t manifest_open_time_;
+  int64_t nexe_open_time_;
+
   const PPB_NaCl_Private* nacl_interface_;
   pp::UMAPrivate uma_interface_;
 };
diff --git a/ppapi/native_client/src/trusted/plugin/pnacl_coordinator.cc b/ppapi/native_client/src/trusted/plugin/pnacl_coordinator.cc
index 74e84eb..7c04043 100644
--- a/ppapi/native_client/src/trusted/plugin/pnacl_coordinator.cc
+++ b/ppapi/native_client/src/trusted/plugin/pnacl_coordinator.cc
@@ -42,7 +42,7 @@
   virtual ~PnaclManifest() { }
 
   virtual bool GetProgramURL(nacl::string* full_url,
-                             PnaclOptions* pnacl_options,
+                             PP_PNaClOptions* pnacl_options,
                              bool* uses_nonsfi_mode,
                              ErrorInfo* error_info) const {
     // Does not contain program urls.
@@ -65,10 +65,10 @@
 
   virtual bool ResolveKey(const nacl::string& key,
                           nacl::string* full_url,
-                          PnaclOptions* pnacl_options,
+                          PP_PNaClOptions* pnacl_options,
                           ErrorInfo* error_info) const {
     // All of the component files are native (do not require pnacl translate).
-    pnacl_options->set_translate(false);
+    pnacl_options->translate = PP_FALSE;
     // We can only resolve keys in the files/ namespace.
     const nacl::string kFilesPrefix = "files/";
     size_t files_prefix_pos = key.find(kFilesPrefix);
@@ -181,7 +181,7 @@
 PnaclCoordinator* PnaclCoordinator::BitcodeToNative(
     Plugin* plugin,
     const nacl::string& pexe_url,
-    const PnaclOptions& pnacl_options,
+    const PP_PNaClOptions& pnacl_options,
     const pp::CompletionCallback& translate_notify_callback) {
   PLUGIN_PRINTF(("PnaclCoordinator::BitcodeToNative (plugin=%p, pexe=%s)\n",
                  static_cast<void*>(plugin), pexe_url.c_str()));
@@ -207,7 +207,7 @@
 PnaclCoordinator::PnaclCoordinator(
     Plugin* plugin,
     const nacl::string& pexe_url,
-    const PnaclOptions& pnacl_options,
+    const PP_PNaClOptions& pnacl_options,
     const pp::CompletionCallback& translate_notify_callback)
   : translate_finish_error_(PP_OK),
     plugin_(plugin),
@@ -325,7 +325,7 @@
   }
 
   // If there are no errors, report stats from this thread (the main thread).
-  HistogramOptLevel(plugin_->uma_interface(), pnacl_options_.opt_level());
+  HistogramOptLevel(plugin_->uma_interface(), pnacl_options_.opt_level);
   HistogramKBPerSec(plugin_->uma_interface(),
                     "NaCl.Perf.PNaClLoadTime.CompileKBPerSec",
                     pexe_size_ / 1024.0,
@@ -483,7 +483,7 @@
           // TODO(dschuff): Get this value from the pnacl json file after it
           // rolls in from NaCl.
           1,
-          pnacl_options_.opt_level(),
+          pnacl_options_.opt_level,
           headers.c_str(),
           "", // No extra compile flags yet.
           &is_cache_hit_,
diff --git a/ppapi/native_client/src/trusted/plugin/pnacl_coordinator.h b/ppapi/native_client/src/trusted/plugin/pnacl_coordinator.h
index 20b3d85..99d6e70 100644
--- a/ppapi/native_client/src/trusted/plugin/pnacl_coordinator.h
+++ b/ppapi/native_client/src/trusted/plugin/pnacl_coordinator.h
@@ -21,9 +21,9 @@
 #include "ppapi/native_client/src/trusted/plugin/file_downloader.h"
 #include "ppapi/native_client/src/trusted/plugin/nacl_subprocess.h"
 #include "ppapi/native_client/src/trusted/plugin/plugin_error.h"
-#include "ppapi/native_client/src/trusted/plugin/pnacl_options.h"
 #include "ppapi/native_client/src/trusted/plugin/pnacl_resources.h"
 
+struct PP_PNaClOptions;
 
 namespace plugin {
 
@@ -86,7 +86,7 @@
   static PnaclCoordinator* BitcodeToNative(
       Plugin* plugin,
       const nacl::string& pexe_url,
-      const PnaclOptions& pnacl_options,
+      const PP_PNaClOptions& pnacl_options,
       const pp::CompletionCallback& translate_notify_callback);
 
   // Call this to take ownership of the FD of the translated nexe after
@@ -144,7 +144,7 @@
   // Therefore the constructor is private.
   PnaclCoordinator(Plugin* plugin,
                    const nacl::string& pexe_url,
-                   const PnaclOptions& pnacl_options,
+                   const PP_PNaClOptions& pnacl_options,
                    const pp::CompletionCallback& translate_notify_callback);
 
   // Invoke to issue a GET request for bitcode.
@@ -211,7 +211,7 @@
   // The URL for the pexe file.
   nacl::string pexe_url_;
   // Options for translation.
-  PnaclOptions pnacl_options_;
+  PP_PNaClOptions pnacl_options_;
 
   // Object file, produced by the translator and consumed by the linker.
   std::vector<TempFile*> obj_files_;
diff --git a/ppapi/native_client/src/trusted/plugin/pnacl_options.cc b/ppapi/native_client/src/trusted/plugin/pnacl_options.cc
deleted file mode 100644
index 46d7c24..0000000
--- a/ppapi/native_client/src/trusted/plugin/pnacl_options.cc
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright (c) 2013 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 "ppapi/native_client/src/trusted/plugin/pnacl_options.h"
-
-#include <iterator>
-#include <vector>
-
-#include "native_client/src/include/nacl_string.h"
-
-namespace plugin {
-
-PnaclOptions::PnaclOptions()
-    : translate_(false),
-      is_debug_(false),
-      opt_level_(2) {
-}
-
-PnaclOptions::~PnaclOptions() {
-}
-
-void PnaclOptions::set_opt_level(int32_t l) {
-  if (l <= 0) {
-    opt_level_ = 0;
-    return;
-  }
-  // Currently only allow 0 or 2, since that is what we test.
-  opt_level_ = 2;
-}
-
-std::vector<char> PnaclOptions::GetOptCommandline() const {
-  std::vector<char> result;
-  nacl::string str;
-
-  nacl::stringstream ss;
-  ss << "-O" << opt_level_;
-  str = ss.str();
-  std::copy(str.begin(), str.end(), std::back_inserter(result));
-  result.push_back('\x00');
-  // Debug info is only available in LLVM format pexes,
-  // not in PNaCl format pexes.
-  if (is_debug_) {
-    str = "-bitcode-format=llvm";
-    std::copy(str.begin(), str.end(), std::back_inserter(result));
-    result.push_back('\x00');
-  }
-
-  return result;
-}
-
-}  // namespace plugin
diff --git a/ppapi/native_client/src/trusted/plugin/pnacl_options.h b/ppapi/native_client/src/trusted/plugin/pnacl_options.h
deleted file mode 100644
index 2d30c3b..0000000
--- a/ppapi/native_client/src/trusted/plugin/pnacl_options.h
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright (c) 2013 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 NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_PNACL_OPTIONS_H_
-#define NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_PNACL_OPTIONS_H_
-
-#include <vector>
-
-#include "native_client/src/include/nacl_string.h"
-#include "native_client/src/include/portability.h"
-
-namespace plugin {
-
-// Options for PNaCl translation.
-class PnaclOptions {
-
- public:
-  PnaclOptions();
-  ~PnaclOptions();
-
-  // Return a character array of \x00 delimited commandline options.
-  std::vector<char> GetOptCommandline() const;
-
-  bool translate() const { return translate_; }
-  void set_translate(bool t) { translate_ = t; }
-
-  bool is_debug() const { return is_debug_; }
-  void set_debug(bool t) { is_debug_ = t; }
-
-  int32_t opt_level() const { return opt_level_; }
-  void set_opt_level(int32_t l);
-
- private:
-  // NOTE: There are users of this class that use the copy constructor.
-  // Currently the default copy constructor is good enough, but
-  // double-check that it is the case when more fields are added.
-  bool translate_;
-  bool is_debug_;
-  int32_t opt_level_;
-};
-
-}  // namespace plugin;
-#endif  // NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_PNACL_OPTIONS_H_
diff --git a/ppapi/native_client/src/trusted/plugin/pnacl_translate_thread.cc b/ppapi/native_client/src/trusted/plugin/pnacl_translate_thread.cc
index 7cb98b8..10f01bb 100644
--- a/ppapi/native_client/src/trusted/plugin/pnacl_translate_thread.cc
+++ b/ppapi/native_client/src/trusted/plugin/pnacl_translate_thread.cc
@@ -15,6 +15,25 @@
 #include "ppapi/native_client/src/trusted/plugin/utility.h"
 
 namespace plugin {
+namespace {
+
+nacl::string GetOptCommandLine(int32_t opt_level, bool is_debug) {
+  nacl::string str;
+  nacl::stringstream ss;
+  ss << "-O" << opt_level;
+  str = ss.str();
+  str += '\x00';
+
+  // Debug info is only available in LLVM format pexes,
+  // not in PNaCl format pexes.
+  if (is_debug) {
+    str += "-bitcode-format=llvm";
+    str += '\x00';
+  }
+  return str;
+}
+
+}  // namespace
 
 PnaclTranslateThread::PnaclTranslateThread() : llc_subprocess_active_(false),
                                                ld_subprocess_active_(false),
@@ -40,7 +59,7 @@
     nacl::DescWrapper* invalid_desc_wrapper,
     ErrorInfo* error_info,
     PnaclResources* resources,
-    PnaclOptions* pnacl_options,
+    PP_PNaClOptions* pnacl_options,
     PnaclCoordinator* coordinator,
     Plugin* plugin) {
   PLUGIN_PRINTF(("PnaclStreamingTranslateThread::RunTranslate)\n"));
@@ -187,7 +206,8 @@
   nacl::string split_arg = ss.str();
   std::copy(split_arg.begin(), split_arg.end(), std::back_inserter(split_args));
   split_args.push_back('\x00');
-  std::vector<char> options = pnacl_options_->GetOptCommandline();
+  nacl::string options = GetOptCommandLine(pnacl_options_->opt_level,
+                                           pnacl_options_->is_debug);
   std::copy(options.begin(), options.end(), std::back_inserter(split_args));
   init_success = llc_subprocess_->InvokeSrpcMethod(
       "StreamInitWithSplit",
diff --git a/ppapi/native_client/src/trusted/plugin/pnacl_translate_thread.h b/ppapi/native_client/src/trusted/plugin/pnacl_translate_thread.h
index 4de0963..db1dbf0 100644
--- a/ppapi/native_client/src/trusted/plugin/pnacl_translate_thread.h
+++ b/ppapi/native_client/src/trusted/plugin/pnacl_translate_thread.h
@@ -19,6 +19,8 @@
 #include "ppapi/native_client/src/trusted/plugin/plugin_error.h"
 #include "ppapi/native_client/src/trusted/plugin/service_runtime.h"
 
+struct PP_PNaClOptions;
+
 namespace nacl {
 class DescWrapper;
 }
@@ -30,7 +32,6 @@
 class NaClSubprocess;
 class Plugin;
 class PnaclCoordinator;
-class PnaclOptions;
 class PnaclResources;
 class TempFile;
 
@@ -48,7 +49,7 @@
                     nacl::DescWrapper* invalid_desc_wrapper,
                     ErrorInfo* error_info,
                     PnaclResources* resources,
-                    PnaclOptions* pnacl_options,
+                    PP_PNaClOptions* pnacl_options,
                     PnaclCoordinator* coordinator,
                     Plugin* plugin);
 
@@ -119,7 +120,7 @@
   nacl::DescWrapper* invalid_desc_wrapper_;
   ErrorInfo* coordinator_error_info_;
   PnaclResources* resources_;
-  PnaclOptions* pnacl_options_;
+  PP_PNaClOptions* pnacl_options_;
   PnaclCoordinator* coordinator_;
   Plugin* plugin_;
  private:
diff --git a/ppapi/native_client/src/trusted/plugin/sel_ldr_launcher_chrome.cc b/ppapi/native_client/src/trusted/plugin/sel_ldr_launcher_chrome.cc
index ce7b566..bd8ee9e 100644
--- a/ppapi/native_client/src/trusted/plugin/sel_ldr_launcher_chrome.cc
+++ b/ppapi/native_client/src/trusted/plugin/sel_ldr_launcher_chrome.cc
@@ -17,17 +17,20 @@
   return false;
 }
 
-void SelLdrLauncherChrome::Start(PP_Instance instance,
-                                 const char* url,
-                                 bool uses_irt,
-                                 bool uses_ppapi,
-                                 bool uses_nonsfi_mode,
-                                 bool enable_ppapi_dev,
-                                 bool enable_dyncode_syscalls,
-                                 bool enable_exception_handling,
-                                 bool enable_crash_throttling,
-                                 PP_Var* error_message,
-                                 pp::CompletionCallback callback) {
+void SelLdrLauncherChrome::Start(
+    PP_Instance instance,
+    const char* url,
+    bool uses_irt,
+    bool uses_ppapi,
+    bool uses_nonsfi_mode,
+    bool enable_ppapi_dev,
+    bool enable_dyncode_syscalls,
+    bool enable_exception_handling,
+    bool enable_crash_throttling,
+    const PP_ManifestService* manifest_service_interface,
+    void* manifest_service_user_data,
+    PP_Var* error_message,
+    pp::CompletionCallback callback) {
   if (!launch_nacl_process) {
     pp::Module::Get()->core()->CallOnMainThread(0, callback, PP_ERROR_FAILED);
     return;
@@ -41,6 +44,8 @@
                       PP_FromBool(enable_dyncode_syscalls),
                       PP_FromBool(enable_exception_handling),
                       PP_FromBool(enable_crash_throttling),
+                      manifest_service_interface,
+                      manifest_service_user_data,
                       &channel_,
                       error_message,
                       callback.pp_completion_callback());
diff --git a/ppapi/native_client/src/trusted/plugin/sel_ldr_launcher_chrome.h b/ppapi/native_client/src/trusted/plugin/sel_ldr_launcher_chrome.h
index f512535..50e8848 100644
--- a/ppapi/native_client/src/trusted/plugin/sel_ldr_launcher_chrome.h
+++ b/ppapi/native_client/src/trusted/plugin/sel_ldr_launcher_chrome.h
@@ -8,6 +8,7 @@
 #include "native_client/src/trusted/nonnacl_util/sel_ldr_launcher.h"
 #include "ppapi/c/pp_instance.h"
 #include "ppapi/c/pp_var.h"
+#include "ppapi/c/private/ppb_nacl_private.h"
 #include "ppapi/cpp/completion_callback.h"
 
 namespace plugin {
@@ -24,6 +25,8 @@
                      bool enable_dyncode_syscalls,
                      bool enable_exception_handling,
                      bool enable_crash_throttling,
+                     const PP_ManifestService* manifest_service_interface,
+                     void* manifest_service_user_data,
                      PP_Var* error_message,
                      pp::CompletionCallback callback);
 };
diff --git a/ppapi/native_client/src/trusted/plugin/service_runtime.cc b/ppapi/native_client/src/trusted/plugin/service_runtime.cc
index 2a3048e..e9eba18 100644
--- a/ppapi/native_client/src/trusted/plugin/service_runtime.cc
+++ b/ppapi/native_client/src/trusted/plugin/service_runtime.cc
@@ -50,12 +50,12 @@
 #include "ppapi/native_client/src/trusted/plugin/manifest.h"
 #include "ppapi/native_client/src/trusted/plugin/plugin.h"
 #include "ppapi/native_client/src/trusted/plugin/plugin_error.h"
-#include "ppapi/native_client/src/trusted/plugin/pnacl_options.h"
 #include "ppapi/native_client/src/trusted/plugin/pnacl_resources.h"
 #include "ppapi/native_client/src/trusted/plugin/sel_ldr_launcher_chrome.h"
 #include "ppapi/native_client/src/trusted/plugin/srpc_client.h"
 #include "ppapi/native_client/src/trusted/weak_ref/call_on_main_thread.h"
 
+namespace plugin {
 namespace {
 
 // For doing crude quota enforcement on writes to temp files.
@@ -64,9 +64,58 @@
 // should be plenty for static data
 const int64_t kMaxTempQuota = 0x8000000;
 
-}  // namespace
+class ManifestService {
+ public:
+  ManifestService(nacl::WeakRefAnchor* anchor,
+                  PluginReverseInterface* plugin_reverse)
+      : anchor_(anchor),
+        plugin_reverse_(plugin_reverse) {
+  }
 
-namespace plugin {
+  ~ManifestService() {
+    anchor_->Unref();
+  }
+
+  bool Quit() {
+    delete this;
+    return false;
+  }
+
+  bool StartupInitializationComplete() {
+    // Release this instance if the ServiceRuntime is already destructed.
+    if (anchor_->is_abandoned()) {
+      delete this;
+      return false;
+    }
+
+    plugin_reverse_->StartupInitializationComplete();
+    return true;
+  }
+
+  static PP_Bool QuitTrampoline(void* user_data) {
+    return PP_FromBool(static_cast<ManifestService*>(user_data)->Quit());
+  }
+
+  static PP_Bool StartupInitializationCompleteTrampoline(void* user_data) {
+    return PP_FromBool(static_cast<ManifestService*>(user_data)->
+                       StartupInitializationComplete());
+  }
+
+ private:
+  // Weak reference to check if plugin_reverse is legally accessible or not.
+  nacl::WeakRefAnchor* anchor_;
+  PluginReverseInterface* plugin_reverse_;
+
+  DISALLOW_COPY_AND_ASSIGN(ManifestService);
+};
+
+// Vtable to pass functions to LaunchSelLdr.
+const PP_ManifestService kManifestServiceVTable = {
+  &ManifestService::QuitTrampoline,
+  &ManifestService::StartupInitializationCompleteTrampoline,
+};
+
+}  // namespace
 
 PluginReverseInterface::PluginReverseInterface(
     nacl::WeakRefAnchor* anchor,
@@ -216,7 +265,7 @@
   NaClLog(4, "Entered OpenManifestEntry_MainThreadContinuation\n");
 
   std::string mapped_url;
-  PnaclOptions pnacl_options;
+  PP_PNaClOptions pnacl_options = {PP_FALSE, PP_FALSE, 2};
   ErrorInfo error_info;
   if (!manifest_->ResolveKey(p->url, &mapped_url,
                              &pnacl_options, &error_info)) {
@@ -236,9 +285,9 @@
   NaClLog(4,
           "OpenManifestEntry_MainThreadContinuation: "
           "ResolveKey: %s -> %s (pnacl_translate(%d))\n",
-          p->url.c_str(), mapped_url.c_str(), pnacl_options.translate());
+          p->url.c_str(), mapped_url.c_str(), pnacl_options.translate);
 
-  if (pnacl_options.translate()) {
+  if (pnacl_options.translate) {
     // Requires PNaCl translation, but that's not supported.
     NaClLog(4,
             "OpenManifestEntry_MainThreadContinuation: "
@@ -469,14 +518,7 @@
 
 bool ServiceRuntime::InitReverseService(ErrorInfo* error_info) {
   if (uses_nonsfi_mode_) {
-    // In non-SFI mode, open_resource() is not yet supported, so we do not
-    // need the reverse service. So, skip the initialization (with calling
-    // the completion callback).
-    // Note that there is on going work to replace SRPC by Chrome IPC (not only
-    // for non-SFI mode, but also for SFI mode) (crbug.com/333950),
-    // and non-SFI mode will use Chrome IPC for open_resource() after the
-    // refactoring is done.
-    rev_interface_->StartupInitializationComplete();
+    // In non-SFI mode, no reverse service is set up. Just returns success.
     return true;
   }
 
@@ -572,6 +614,8 @@
       callback_factory_.NewCallback(&ServiceRuntime::StartSelLdrContinuation,
                                     callback);
 
+  ManifestService* manifest_service =
+      new ManifestService(anchor_->Ref(), rev_interface_);
   tmp_subprocess->Start(plugin_->pp_instance(),
                         params.url.c_str(),
                         params.uses_irt,
@@ -581,6 +625,8 @@
                         params.enable_dyncode_syscalls,
                         params.enable_exception_handling,
                         params.enable_crash_throttling,
+                        &kManifestServiceVTable,
+                        manifest_service,
                         &start_sel_ldr_error_message_,
                         internal_callback);
   subprocess_.reset(tmp_subprocess.release());
diff --git a/ppapi/native_client/src/untrusted/irt_stub/thread_creator.h b/ppapi/native_client/src/untrusted/irt_stub/thread_creator.h
index ac4258f..7adbabe 100644
--- a/ppapi/native_client/src/untrusted/irt_stub/thread_creator.h
+++ b/ppapi/native_client/src/untrusted/irt_stub/thread_creator.h
@@ -10,6 +10,14 @@
 #include "native_client/src/untrusted/irt/irt.h"
 #include "ppapi/nacl_irt/public/irt_ppapi.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 void __nacl_register_thread_creator(const struct nacl_irt_ppapihook *hooks);
 
+#ifdef __cplusplus
+}  // extern "C"
+#endif
+
 #endif
diff --git a/ppapi/native_client/src/untrusted/pnacl_irt_shim/pnacl_shim.c b/ppapi/native_client/src/untrusted/pnacl_irt_shim/pnacl_shim.c
index 162e005..b085cfb 100644
--- a/ppapi/native_client/src/untrusted/pnacl_irt_shim/pnacl_shim.c
+++ b/ppapi/native_client/src/untrusted/pnacl_irt_shim/pnacl_shim.c
@@ -3085,11 +3085,13 @@
 
 /* End wrapper methods for PPB_IsolatedFileSystem_Private_0_2 */
 
+/* Not generating wrapper methods for PP_ManifestService_1_0 */
+
 /* Begin wrapper methods for PPB_NaCl_Private_1_0 */
 
-static void Pnacl_M25_PPB_NaCl_Private_LaunchSelLdr(PP_Instance instance, const char* alleged_url, PP_Bool uses_irt, PP_Bool uses_ppapi, PP_Bool uses_nonsfi_mode, PP_Bool enable_ppapi_dev, PP_Bool enable_dyncode_syscalls, PP_Bool enable_exception_handling, PP_Bool enable_crash_throttling, void* imc_handle, struct PP_Var* error_message, struct PP_CompletionCallback* callback) {
+static void Pnacl_M25_PPB_NaCl_Private_LaunchSelLdr(PP_Instance instance, const char* alleged_url, PP_Bool uses_irt, PP_Bool uses_ppapi, PP_Bool uses_nonsfi_mode, PP_Bool enable_ppapi_dev, PP_Bool enable_dyncode_syscalls, PP_Bool enable_exception_handling, PP_Bool enable_crash_throttling, const struct PP_ManifestService_1_0* manifest_service_interface, void* manifest_service_user_data, void* imc_handle, struct PP_Var* error_message, struct PP_CompletionCallback* callback) {
   const struct PPB_NaCl_Private_1_0 *iface = Pnacl_WrapperInfo_PPB_NaCl_Private_1_0.real_iface;
-  iface->LaunchSelLdr(instance, alleged_url, uses_irt, uses_ppapi, uses_nonsfi_mode, enable_ppapi_dev, enable_dyncode_syscalls, enable_exception_handling, enable_crash_throttling, imc_handle, error_message, *callback);
+  iface->LaunchSelLdr(instance, alleged_url, uses_irt, uses_ppapi, uses_nonsfi_mode, enable_ppapi_dev, enable_dyncode_syscalls, enable_exception_handling, enable_crash_throttling, manifest_service_interface, manifest_service_user_data, imc_handle, error_message, *callback);
 }
 
 static PP_Bool Pnacl_M25_PPB_NaCl_Private_StartPpapiProxy(PP_Instance instance) {
@@ -3212,21 +3214,11 @@
   return iface->GetNaClReadyState(instance);
 }
 
-static void Pnacl_M25_PPB_NaCl_Private_SetNaClReadyState(PP_Instance instance, PP_NaClReadyState ready_state) {
-  const struct PPB_NaCl_Private_1_0 *iface = Pnacl_WrapperInfo_PPB_NaCl_Private_1_0.real_iface;
-  iface->SetNaClReadyState(instance, ready_state);
-}
-
 static PP_Bool Pnacl_M25_PPB_NaCl_Private_GetIsInstalled(PP_Instance instance) {
   const struct PPB_NaCl_Private_1_0 *iface = Pnacl_WrapperInfo_PPB_NaCl_Private_1_0.real_iface;
   return iface->GetIsInstalled(instance);
 }
 
-static void Pnacl_M25_PPB_NaCl_Private_SetIsInstalled(PP_Instance instance, PP_Bool is_installed) {
-  const struct PPB_NaCl_Private_1_0 *iface = Pnacl_WrapperInfo_PPB_NaCl_Private_1_0.real_iface;
-  iface->SetIsInstalled(instance, is_installed);
-}
-
 static int32_t Pnacl_M25_PPB_NaCl_Private_GetExitStatus(PP_Instance instance) {
   const struct PPB_NaCl_Private_1_0 *iface = Pnacl_WrapperInfo_PPB_NaCl_Private_1_0.real_iface;
   return iface->GetExitStatus(instance);
@@ -3242,9 +3234,9 @@
   iface->Vlog(message);
 }
 
-static void Pnacl_M25_PPB_NaCl_Private_SetInitTime(PP_Instance instance) {
+static void Pnacl_M25_PPB_NaCl_Private_InitializePlugin(PP_Instance instance) {
   const struct PPB_NaCl_Private_1_0 *iface = Pnacl_WrapperInfo_PPB_NaCl_Private_1_0.real_iface;
-  iface->SetInitTime(instance);
+  iface->InitializePlugin(instance);
 }
 
 static int64_t Pnacl_M25_PPB_NaCl_Private_GetNexeSize(PP_Instance instance) {
@@ -3252,9 +3244,29 @@
   return iface->GetNexeSize(instance);
 }
 
-static void Pnacl_M25_PPB_NaCl_Private_SetNexeSize(PP_Instance instance, int64_t nexe_size) {
+static PP_Bool Pnacl_M25_PPB_NaCl_Private_RequestNaClManifest(PP_Instance instance, const char* manifest_url, PP_Bool* is_data_uri) {
   const struct PPB_NaCl_Private_1_0 *iface = Pnacl_WrapperInfo_PPB_NaCl_Private_1_0.real_iface;
-  iface->SetNexeSize(instance, nexe_size);
+  return iface->RequestNaClManifest(instance, manifest_url, is_data_uri);
+}
+
+static void Pnacl_M25_PPB_NaCl_Private_GetManifestBaseURL(struct PP_Var* _struct_result, PP_Instance instance) {
+  const struct PPB_NaCl_Private_1_0 *iface = Pnacl_WrapperInfo_PPB_NaCl_Private_1_0.real_iface;
+  *_struct_result = iface->GetManifestBaseURL(instance);
+}
+
+static PP_Bool Pnacl_M25_PPB_NaCl_Private_ResolvesRelativeToPluginBaseUrl(PP_Instance instance, const char* url) {
+  const struct PPB_NaCl_Private_1_0 *iface = Pnacl_WrapperInfo_PPB_NaCl_Private_1_0.real_iface;
+  return iface->ResolvesRelativeToPluginBaseUrl(instance, url);
+}
+
+static void Pnacl_M25_PPB_NaCl_Private_ParseDataURL(struct PP_Var* _struct_result, const char* data_url) {
+  const struct PPB_NaCl_Private_1_0 *iface = Pnacl_WrapperInfo_PPB_NaCl_Private_1_0.real_iface;
+  *_struct_result = iface->ParseDataURL(data_url);
+}
+
+static void Pnacl_M25_PPB_NaCl_Private_ProcessNaClManifest(PP_Instance instance, const char* program_url) {
+  const struct PPB_NaCl_Private_1_0 *iface = Pnacl_WrapperInfo_PPB_NaCl_Private_1_0.real_iface;
+  iface->ProcessNaClManifest(instance, program_url);
 }
 
 /* End wrapper methods for PPB_NaCl_Private_1_0 */
@@ -5130,8 +5142,10 @@
     .Open = (int32_t (*)(PP_Instance instance, PP_IsolatedFileSystemType_Private type, PP_Resource* file_system, struct PP_CompletionCallback callback))&Pnacl_M33_PPB_IsolatedFileSystem_Private_Open
 };
 
+/* Not generating wrapper interface for PP_ManifestService_1_0 */
+
 static const struct PPB_NaCl_Private_1_0 Pnacl_Wrappers_PPB_NaCl_Private_1_0 = {
-    .LaunchSelLdr = (void (*)(PP_Instance instance, const char* alleged_url, PP_Bool uses_irt, PP_Bool uses_ppapi, PP_Bool uses_nonsfi_mode, PP_Bool enable_ppapi_dev, PP_Bool enable_dyncode_syscalls, PP_Bool enable_exception_handling, PP_Bool enable_crash_throttling, void* imc_handle, struct PP_Var* error_message, struct PP_CompletionCallback callback))&Pnacl_M25_PPB_NaCl_Private_LaunchSelLdr,
+    .LaunchSelLdr = (void (*)(PP_Instance instance, const char* alleged_url, PP_Bool uses_irt, PP_Bool uses_ppapi, PP_Bool uses_nonsfi_mode, PP_Bool enable_ppapi_dev, PP_Bool enable_dyncode_syscalls, PP_Bool enable_exception_handling, PP_Bool enable_crash_throttling, const struct PP_ManifestService_1_0* manifest_service_interface, void* manifest_service_user_data, void* imc_handle, struct PP_Var* error_message, struct PP_CompletionCallback callback))&Pnacl_M25_PPB_NaCl_Private_LaunchSelLdr,
     .StartPpapiProxy = (PP_Bool (*)(PP_Instance instance))&Pnacl_M25_PPB_NaCl_Private_StartPpapiProxy,
     .UrandomFD = (int32_t (*)(void))&Pnacl_M25_PPB_NaCl_Private_UrandomFD,
     .Are3DInterfacesDisabled = (PP_Bool (*)(void))&Pnacl_M25_PPB_NaCl_Private_Are3DInterfacesDisabled,
@@ -5156,15 +5170,17 @@
     .GetUrlScheme = (PP_UrlSchemeType (*)(struct PP_Var url))&Pnacl_M25_PPB_NaCl_Private_GetUrlScheme,
     .LogToConsole = (void (*)(PP_Instance instance, const char* message))&Pnacl_M25_PPB_NaCl_Private_LogToConsole,
     .GetNaClReadyState = (PP_NaClReadyState (*)(PP_Instance instance))&Pnacl_M25_PPB_NaCl_Private_GetNaClReadyState,
-    .SetNaClReadyState = (void (*)(PP_Instance instance, PP_NaClReadyState ready_state))&Pnacl_M25_PPB_NaCl_Private_SetNaClReadyState,
     .GetIsInstalled = (PP_Bool (*)(PP_Instance instance))&Pnacl_M25_PPB_NaCl_Private_GetIsInstalled,
-    .SetIsInstalled = (void (*)(PP_Instance instance, PP_Bool is_installed))&Pnacl_M25_PPB_NaCl_Private_SetIsInstalled,
     .GetExitStatus = (int32_t (*)(PP_Instance instance))&Pnacl_M25_PPB_NaCl_Private_GetExitStatus,
     .SetExitStatus = (void (*)(PP_Instance instance, int32_t exit_status))&Pnacl_M25_PPB_NaCl_Private_SetExitStatus,
     .Vlog = (void (*)(const char* message))&Pnacl_M25_PPB_NaCl_Private_Vlog,
-    .SetInitTime = (void (*)(PP_Instance instance))&Pnacl_M25_PPB_NaCl_Private_SetInitTime,
+    .InitializePlugin = (void (*)(PP_Instance instance))&Pnacl_M25_PPB_NaCl_Private_InitializePlugin,
     .GetNexeSize = (int64_t (*)(PP_Instance instance))&Pnacl_M25_PPB_NaCl_Private_GetNexeSize,
-    .SetNexeSize = (void (*)(PP_Instance instance, int64_t nexe_size))&Pnacl_M25_PPB_NaCl_Private_SetNexeSize
+    .RequestNaClManifest = (PP_Bool (*)(PP_Instance instance, const char* manifest_url, PP_Bool* is_data_uri))&Pnacl_M25_PPB_NaCl_Private_RequestNaClManifest,
+    .GetManifestBaseURL = (struct PP_Var (*)(PP_Instance instance))&Pnacl_M25_PPB_NaCl_Private_GetManifestBaseURL,
+    .ResolvesRelativeToPluginBaseUrl = (PP_Bool (*)(PP_Instance instance, const char* url))&Pnacl_M25_PPB_NaCl_Private_ResolvesRelativeToPluginBaseUrl,
+    .ParseDataURL = (struct PP_Var (*)(const char* data_url))&Pnacl_M25_PPB_NaCl_Private_ParseDataURL,
+    .ProcessNaClManifest = (void (*)(PP_Instance instance, const char* program_url))&Pnacl_M25_PPB_NaCl_Private_ProcessNaClManifest
 };
 
 static const struct PPB_NetAddress_Private_0_1 Pnacl_Wrappers_PPB_NetAddress_Private_0_1 = {
diff --git a/ppapi/native_client/tests/nacl_browser/fault_injection/fault_pm_nameservice_test.cc b/ppapi/native_client/tests/nacl_browser/fault_injection/fault_pm_nameservice_test.cc
index 61ed0f3..72ae928 100644
--- a/ppapi/native_client/tests/nacl_browser/fault_injection/fault_pm_nameservice_test.cc
+++ b/ppapi/native_client/tests/nacl_browser/fault_injection/fault_pm_nameservice_test.cc
@@ -74,31 +74,6 @@
   sb->Printf("\n");
 }
 
-void EnumerateNames(NaClSrpcChannel *nschan, nacl::StringBuffer *sb) {
-  char      buffer[1024];
-  uint32_t  nbytes = sizeof buffer;
-
-  if (NACL_SRPC_RESULT_OK != NaClSrpcInvokeBySignature(nschan,
-                                                       NACL_NAME_SERVICE_LIST,
-                                                       &nbytes, buffer)) {
-    sb->Printf("NaClSrpcInvokeBySignature failed\n");
-    return;
-  }
-  sb->Printf("nbytes = %u\n", (size_t) nbytes);
-  if (nbytes == sizeof buffer) {
-    sb->Printf("Insufficent space for namespace enumeration\n");
-    return;
-  }
-
-  size_t name_len;
-  for (char *p = buffer;
-       static_cast<size_t>(p - buffer) < nbytes;
-       p += name_len) {
-    name_len = strlen(p) + 1;
-    sb->Printf("%s\n", p);
-  }
-}
-
 void Initialize(const pp::Var& message_data, nacl::StringBuffer* sb) {
   if (g_ns_channel_initialized) {
     return;
@@ -119,14 +94,6 @@
 }
 
 //
-// Return name service output
-//
-void NameServiceDump(const pp::Var& message_data, nacl::StringBuffer* sb) {
-  Initialize(message_data, sb);
-  EnumerateNames(&g_ns_channel, sb);
-}
-
-//
 // Dump RNG output into a string.
 //
 void RngDump(const pp::Var& message_data, nacl::StringBuffer* sb) {
@@ -203,7 +170,6 @@
 void MyInstance::HandleMessage(const pp::Var& message_data) {
   static struct PostMessageHandlerDesc kMsgHandlers[] = {
     { "init", Initialize },
-    { "nameservice", NameServiceDump },
     { "rng", RngDump },
     { "manifest_test", ManifestTest },
     { reinterpret_cast<char const *>(NULL),
diff --git a/ppapi/ppapi_proxy.gypi b/ppapi/ppapi_proxy.gypi
index 11eb697..f8605db 100644
--- a/ppapi/ppapi_proxy.gypi
+++ b/ppapi/ppapi_proxy.gypi
@@ -247,6 +247,8 @@
               'nacl_irt/irt_ppapi.cc',
               'nacl_irt/irt_ppapi.h',
               'nacl_irt/irt_start.cc',
+              'nacl_irt/manifest_service.cc',
+              'nacl_irt/manifest_service.h',
               'nacl_irt/plugin_main.cc',
               'nacl_irt/plugin_main.h',
               'nacl_irt/plugin_startup.cc',
diff --git a/ppapi/proxy/file_system_resource_unittest.cc b/ppapi/proxy/file_system_resource_unittest.cc
index f936954..9b5d981 100644
--- a/ppapi/proxy/file_system_resource_unittest.cc
+++ b/ppapi/proxy/file_system_resource_unittest.cc
@@ -74,7 +74,15 @@
 
 class FileSystemResourceTest : public PluginProxyTest {
  public:
-  FileSystemResourceTest() {}
+  const PPB_FileSystem_1_0* file_system_iface;
+  const PPB_FileRef_1_1* file_ref_iface;
+  const PPB_FileIO_1_1* file_io_iface;
+
+  FileSystemResourceTest()
+      : file_system_iface(thunk::GetPPB_FileSystem_1_0_Thunk()),
+        file_ref_iface(thunk::GetPPB_FileRef_1_1_Thunk()),
+        file_io_iface(thunk::GetPPB_FileIO_1_1_Thunk()) {
+  }
 
   void SendReply(const ResourceMessageCallParams& params,
                  int32_t result,
@@ -93,7 +101,7 @@
   // Opens the given file system.
   void OpenFileSystem(PP_Resource file_system) {
     MockCompletionCallback cb;
-    int32_t result = thunk::GetPPB_FileSystem_1_0_Thunk()->Open(
+    int32_t result = file_system_iface->Open(
         file_system,
         kExpectedFileSystemSize,
         PP_MakeCompletionCallback(&MockCompletionCallback::Callback, &cb));
@@ -119,7 +127,7 @@
                 PP_Resource file_ref,
                 PP_Resource file_system) {
     MockCompletionCallback cb;
-    int32_t result = thunk::GetPPB_FileIO_1_1_Thunk()->Open(
+    int32_t result = file_io_iface->Open(
         file_io,
         file_ref,
         PP_FILEOPENFLAG_WRITE,
@@ -149,14 +157,14 @@
 // Test that Open fails if either host returns failure. The other tests exercise
 // the case where both hosts return PP_OK.
 TEST_F(FileSystemResourceTest, OpenFailure) {
-  const PPB_FileSystem_1_0* fs_iface = thunk::GetPPB_FileSystem_1_0_Thunk();
   // Fail if the first reply doesn't return PP_OK.
   {
     LockingResourceReleaser file_system(
-        fs_iface->Create(pp_instance(), PP_FILESYSTEMTYPE_LOCALTEMPORARY));
+        file_system_iface->Create(pp_instance(),
+                                  PP_FILESYSTEMTYPE_LOCALTEMPORARY));
 
     MockCompletionCallback cb;
-    int32_t result = thunk::GetPPB_FileSystem_1_0_Thunk()->Open(
+    int32_t result = file_system_iface->Open(
         file_system.get(),
         kExpectedFileSystemSize,
         PP_MakeCompletionCallback(&MockCompletionCallback::Callback, &cb));
@@ -176,10 +184,11 @@
   // Fail if the second reply doesn't return PP_OK.
   {
     LockingResourceReleaser file_system(
-        fs_iface->Create(pp_instance(), PP_FILESYSTEMTYPE_LOCALTEMPORARY));
+        file_system_iface->Create(pp_instance(),
+                                  PP_FILESYSTEMTYPE_LOCALTEMPORARY));
 
     MockCompletionCallback cb;
-    int32_t result = thunk::GetPPB_FileSystem_1_0_Thunk()->Open(
+    int32_t result = file_system_iface->Open(
         file_system.get(),
         kExpectedFileSystemSize,
         PP_MakeCompletionCallback(&MockCompletionCallback::Callback, &cb));
@@ -199,24 +208,21 @@
 }
 
 TEST_F(FileSystemResourceTest, RequestQuota) {
-  const PPB_FileSystem_1_0* fs_iface = thunk::GetPPB_FileSystem_1_0_Thunk();
-  const PPB_FileRef_1_1* fref_iface = thunk::GetPPB_FileRef_1_1_Thunk();
-  const PPB_FileIO_1_1* fio_iface = thunk::GetPPB_FileIO_1_1_Thunk();
-
   LockingResourceReleaser file_system(
-      fs_iface->Create(pp_instance(), PP_FILESYSTEMTYPE_LOCALTEMPORARY));
+      file_system_iface->Create(pp_instance(),
+                                PP_FILESYSTEMTYPE_LOCALTEMPORARY));
 
   OpenFileSystem(file_system.get());
 
   // Create and open two files in the file system. FileIOResource calls
   // FileSystemResource::OpenQuotaFile on success.
   LockingResourceReleaser file_ref1(
-      fref_iface->Create(file_system.get(), "/file1"));
-  LockingResourceReleaser file_io1(fio_iface->Create(pp_instance()));
+      file_ref_iface->Create(file_system.get(), "/file1"));
+  LockingResourceReleaser file_io1(file_io_iface->Create(pp_instance()));
   OpenFile(file_io1.get(), file_ref1.get(), file_system.get());
   LockingResourceReleaser file_ref2(
-      fref_iface->Create(file_system.get(), "/file2"));
-  LockingResourceReleaser file_io2(fio_iface->Create(pp_instance()));
+      file_ref_iface->Create(file_system.get(), "/file2"));
+  LockingResourceReleaser file_io2(file_io_iface->Create(pp_instance()));
   OpenFile(file_io2.get(), file_ref2.get(), file_system.get());
 
   EnterResource<PPB_FileSystem_API> enter(file_system.get(), true);
diff --git a/ppapi/proxy/ppapi_command_buffer_proxy.cc b/ppapi/proxy/ppapi_command_buffer_proxy.cc
index 1e4820d..d747019 100644
--- a/ppapi/proxy/ppapi_command_buffer_proxy.cc
+++ b/ppapi/proxy/ppapi_command_buffer_proxy.cc
@@ -132,6 +132,7 @@
   // Map the shared memory on demand.
   if (!shared_memory->memory()) {
     if (!shared_memory->Map(handle.size())) {
+      *id = -1;
       return NULL;
     }
   }
diff --git a/ppapi/proxy/ppapi_messages.h b/ppapi/proxy/ppapi_messages.h
index e54dae7..e099b36 100644
--- a/ppapi/proxy/ppapi_messages.h
+++ b/ppapi/proxy/ppapi_messages.h
@@ -753,6 +753,9 @@
 IPC_MESSAGE_CONTROL1(PpapiHostMsg_ChannelCreated,
                      IPC::ChannelHandle /* handle */)
 
+// Notify the renderer that the PPAPI channel gets ready in the plugin.
+IPC_MESSAGE_CONTROL0(PpapiHostMsg_StartupInitializationComplete);
+
 // Logs the given message to the console of all instances.
 IPC_MESSAGE_CONTROL4(PpapiHostMsg_LogWithSource,
                      PP_Instance /* instance */,
diff --git a/ppapi/proxy/ppb_audio_proxy.cc b/ppapi/proxy/ppb_audio_proxy.cc
index 58f5abc..d84c3cb 100644
--- a/ppapi/proxy/ppb_audio_proxy.cc
+++ b/ppapi/proxy/ppb_audio_proxy.cc
@@ -95,6 +95,8 @@
 PP_Bool Audio::StartPlayback() {
   if (playing())
     return PP_TRUE;
+  if (!PPB_Audio_Shared::IsThreadFunctionReady())
+    return PP_FALSE;
   SetStartPlaybackState();
   PluginDispatcher::GetForResource(this)->Send(
       new PpapiHostMsg_PPBAudio_StartOrStop(
diff --git a/ppapi/proxy/ppb_instance_proxy.cc b/ppapi/proxy/ppb_instance_proxy.cc
index be0cc34..85f1f16 100644
--- a/ppapi/proxy/ppb_instance_proxy.cc
+++ b/ppapi/proxy/ppb_instance_proxy.cc
@@ -959,12 +959,11 @@
     const std::vector<PP_Rect>& tickmarks) {
   if (!dispatcher()->permissions().HasPermission(PERMISSION_PRIVATE))
     return;
-  if (tickmarks.empty())
-    return;
+  const PP_Rect* array = tickmarks.empty() ? NULL : &tickmarks[0];
   EnterInstanceNoLock enter(instance);
   if (enter.succeeded()) {
     enter.functions()->SetTickmarks(instance,
-                                    &tickmarks[0],
+                                    array,
                                     static_cast<uint32_t>(tickmarks.size()));
   }
 }
diff --git a/ppapi/shared_impl/ppb_audio_shared.cc b/ppapi/shared_impl/ppb_audio_shared.cc
index ced1146..741a86f 100644
--- a/ppapi/shared_impl/ppb_audio_shared.cc
+++ b/ppapi/shared_impl/ppb_audio_shared.cc
@@ -5,18 +5,18 @@
 #include "ppapi/shared_impl/ppb_audio_shared.h"
 
 #include "base/logging.h"
+#include "ppapi/nacl_irt/public/irt_ppapi.h"
 #include "ppapi/shared_impl/ppapi_globals.h"
 #include "ppapi/shared_impl/ppb_audio_config_shared.h"
 #include "ppapi/shared_impl/proxy_lock.h"
 
 namespace ppapi {
 
-#if defined(OS_NACL)
 namespace {
+bool g_nacl_mode = false;
 // Because this is static, the function pointers will be NULL initially.
-PP_ThreadFunctions thread_functions;
+PP_ThreadFunctions g_thread_functions;
 }
-#endif  // defined(OS_NACL)
 
 AudioCallbackCombined::AudioCallbackCombined()
     : callback_1_0_(NULL), callback_(NULL) {}
@@ -50,10 +50,7 @@
 PPB_Audio_Shared::PPB_Audio_Shared()
     : playing_(false),
       shared_memory_size_(0),
-#if defined(OS_NACL)
-      thread_id_(0),
-      thread_active_(false),
-#endif
+      nacl_thread_active_(false),
       user_data_(NULL),
       client_buffer_size_bytes_(0),
       bytes_per_second_(0),
@@ -75,11 +72,8 @@
 
 void PPB_Audio_Shared::SetStartPlaybackState() {
   DCHECK(!playing_);
-#if !defined(OS_NACL)
   DCHECK(!audio_thread_.get());
-#else
-  DCHECK(!thread_active_);
-#endif
+  DCHECK(!nacl_thread_active_);
   // If the socket doesn't exist, that means that the plugin has started before
   // the browser has had a chance to create all the shared memory info and
   // notify us. This is a common case. In this case, we just set the playing_
@@ -138,54 +132,68 @@
   // start up quickly enough.
   memset(shared_memory_->memory(), 0, shared_memory_size_);
   memset(client_buffer_.get(), 0, client_buffer_size_bytes_);
-#if !defined(OS_NACL)
-  DCHECK(!audio_thread_.get());
-  audio_thread_.reset(
-      new base::DelegateSimpleThread(this, "plugin_audio_thread"));
-  audio_thread_->Start();
-#else
-  // Use NaCl's special API for IRT code that creates threads that call back
-  // into user code.
-  if (NULL == thread_functions.thread_create ||
-      NULL == thread_functions.thread_join)
-    return;
 
-  int result = thread_functions.thread_create(&thread_id_, CallRun, this);
-  DCHECK_EQ(result, 0);
-  thread_active_ = true;
-#endif
+  if (g_nacl_mode) {
+    // Use NaCl's special API for IRT code that creates threads that call back
+    // into user code.
+    if (!IsThreadFunctionReady())
+      return;
+
+    DCHECK(!nacl_thread_active_);
+    int result =
+        g_thread_functions.thread_create(&nacl_thread_id_, CallRun, this);
+    DCHECK_EQ(0, result);
+    nacl_thread_active_ = true;
+  } else {
+    DCHECK(!audio_thread_.get());
+    audio_thread_.reset(
+        new base::DelegateSimpleThread(this, "plugin_audio_thread"));
+    audio_thread_->Start();
+  }
 }
 
 void PPB_Audio_Shared::StopThread() {
-#if !defined(OS_NACL)
-  if (audio_thread_.get()) {
-    // In general, the audio thread should not do Pepper calls, but it might
-    // anyway (for example, our Audio test does CallOnMainThread). If it did
-    // a pepper call which acquires the lock (most of them do), and we try to
-    // shut down the thread and Join it while holding the lock, we would
-    // deadlock. So we give up the lock here so that the thread at least _can_
-    // make Pepper calls without causing deadlock.
-    CallWhileUnlocked(base::Bind(&base::DelegateSimpleThread::Join,
-                                 base::Unretained(audio_thread_.get())));
-    audio_thread_.reset();
+  // In general, the audio thread should not do Pepper calls, but it might
+  // anyway (for example, our Audio test does CallOnMainThread). If it did a
+  // pepper call which acquires the lock (most of them do), and we try to shut
+  // down the thread and Join it while holding the lock, we would deadlock. So
+  // we give up the lock here so that the thread at least _can_ make Pepper
+  // calls without causing deadlock.
+  if (g_nacl_mode) {
+    if (nacl_thread_active_) {
+      int result =
+          CallWhileUnlocked(g_thread_functions.thread_join, nacl_thread_id_);
+      DCHECK_EQ(0, result);
+      nacl_thread_active_ = false;
+    }
+  } else {
+    if (audio_thread_.get()) {
+      CallWhileUnlocked(base::Bind(&base::DelegateSimpleThread::Join,
+                                   base::Unretained(audio_thread_.get())));
+      audio_thread_.reset();
+    }
   }
-#else
-  if (thread_active_) {
-    // See comment above about why we unlock here.
-    int result = CallWhileUnlocked(thread_functions.thread_join, thread_id_);
-    DCHECK_EQ(0, result);
-    thread_active_ = false;
-  }
-#endif
 }
 
-#if defined(OS_NACL)
+// static
+bool PPB_Audio_Shared::IsThreadFunctionReady() {
+  if (!g_nacl_mode)
+    return true;
+
+  return (g_thread_functions.thread_create != NULL &&
+          g_thread_functions.thread_join != NULL);
+}
+
+// static
+void PPB_Audio_Shared::SetNaClMode() {
+  g_nacl_mode = true;
+}
+
 // static
 void PPB_Audio_Shared::SetThreadFunctions(
     const struct PP_ThreadFunctions* functions) {
-  DCHECK(thread_functions.thread_create == NULL);
-  DCHECK(thread_functions.thread_join == NULL);
-  thread_functions = *functions;
+  DCHECK(g_nacl_mode);
+  g_thread_functions = *functions;
 }
 
 // static
@@ -193,7 +201,6 @@
   PPB_Audio_Shared* audio = static_cast<PPB_Audio_Shared*>(self);
   audio->Run();
 }
-#endif
 
 void PPB_Audio_Shared::Run() {
   int pending_data = 0;
diff --git a/ppapi/shared_impl/ppb_audio_shared.h b/ppapi/shared_impl/ppb_audio_shared.h
index 6ba8cac..31888c8 100644
--- a/ppapi/shared_impl/ppb_audio_shared.h
+++ b/ppapi/shared_impl/ppb_audio_shared.h
@@ -15,9 +15,7 @@
 #include "ppapi/shared_impl/resource.h"
 #include "ppapi/thunk/ppb_audio_api.h"
 
-#if defined(OS_NACL)
-#include "ppapi/nacl_irt/public/irt_ppapi.h"
-#endif
+struct PP_ThreadFunctions;
 
 namespace ppapi {
 
@@ -79,11 +77,20 @@
                      PP_AudioSampleRate sample_rate,
                      int sample_frame_count);
 
-#if defined(OS_NACL)
+  // Returns whether a thread can be created on the client context.
+  // In trusted plugin, this should always return true, as it uses Chrome's
+  // thread library. In NaCl plugin, this returns whether SetThreadFunctions
+  // was invoked properly.
+  static bool IsThreadFunctionReady();
+
+  // Configures this class to run in a NaCl plugin.
+  // If called, SetThreadFunctions() must be called before calling
+  // SetStartPlaybackState() on any instance of this class.
+  static void SetNaClMode();
+
   // NaCl has a special API for IRT code to create threads that can call back
   // into user code.
   static void SetThreadFunctions(const struct PP_ThreadFunctions* functions);
-#endif
 
  private:
   // Starts execution of the audio thread.
@@ -110,15 +117,12 @@
   // The size of the sample buffer in bytes.
   size_t shared_memory_size_;
 
-#if !defined(OS_NACL)
   // When the callback is set, this thread is spawned for calling it.
   scoped_ptr<base::DelegateSimpleThread> audio_thread_;
-#else
-  uintptr_t thread_id_;
-  bool thread_active_;
+  uintptr_t nacl_thread_id_;
+  bool nacl_thread_active_;
 
   static void CallRun(void* self);
-#endif
 
   // Callback to call when audio is ready to accept new samples.
   AudioCallbackCombined callback_;
diff --git a/ppapi/tests/DEPS b/ppapi/tests/DEPS
index 4f75714..06b64ab 100644
--- a/ppapi/tests/DEPS
+++ b/ppapi/tests/DEPS
@@ -12,6 +12,11 @@
   "+ppapi/lib",
   "+ppapi/tests",
   "+ppapi/utility",
+
+  # Test to confirm whether PPB_Audio_Shared works properly in NaCl needs to
+  # call nacl_irt_ppapihook internally to emulate some erroneous situation.
+  "+native_client/src/untrusted/irt/irt.h",
+  "+ppapi/native_client/src/untrusted/irt_stub/thread_creator.h",
 ]
 # checkdeps.py shouldn't check include paths for files in clang, which aren't
 # part of the chrome build.
diff --git a/ppapi/tests/test_audio.cc b/ppapi/tests/test_audio.cc
index 4fea6e8..1c1c9b5 100644
--- a/ppapi/tests/test_audio.cc
+++ b/ppapi/tests/test_audio.cc
@@ -12,10 +12,87 @@
 #include "ppapi/tests/testing_instance.h"
 #include "ppapi/tests/test_utils.h"
 
+#if defined(__native_client__)
+#include "native_client/src/untrusted/irt/irt.h"
+#include "ppapi/native_client/src/untrusted/irt_stub/thread_creator.h"
+#endif
+
 #define ARRAYSIZE_UNSAFE(a) \
   ((sizeof(a) / sizeof(*(a))) / \
    static_cast<size_t>(!(sizeof(a) % sizeof(*(a)))))
 
+#if defined(__native_client__)
+namespace {
+
+void GetNaClIrtPpapiHook(struct nacl_irt_ppapihook* hooks) {
+  nacl_interface_query(NACL_IRT_PPAPIHOOK_v0_1, hooks, sizeof(*hooks));
+}
+
+struct PP_ThreadFunctions g_thread_funcs = {};
+
+void ThreadFunctionsGetter(const struct PP_ThreadFunctions* thread_funcs) {
+  g_thread_funcs = *thread_funcs;
+}
+
+// In order to check if the thread_create is called, CountingThreadCreate()
+// increments this variable. Callers can check if the function is actually
+// called by looking at this value.
+int g_num_thread_create_called = 0;
+int g_num_thread_join_called = 0;
+
+int CountingThreadCreate(uintptr_t* tid,
+                         void (*func)(void* thread_argument),
+                         void* thread_argument) {
+  ++g_num_thread_create_called;
+  return g_thread_funcs.thread_create(tid, func, thread_argument);
+}
+
+int CountingThreadJoin(uintptr_t tid) {
+  ++g_num_thread_join_called;
+  return g_thread_funcs.thread_join(tid);
+}
+
+// Sets NULL for PP_ThreadFunctions to emulate the situation that
+// ppapi_register_thread_creator() is not yet called.
+void SetNullThreadFunctions() {
+  nacl_irt_ppapihook hooks;
+  GetNaClIrtPpapiHook(&hooks);
+  PP_ThreadFunctions thread_functions = {};
+  hooks.ppapi_register_thread_creator(&thread_functions);
+}
+
+void InjectCountingThreadFunctions() {
+  // First of all, we extract the system default thread functions.
+  // Internally, __nacl_register_thread_creator calls
+  // hooks.ppapi_register_thread_creator with default PP_ThreadFunctions
+  // instance. ThreadFunctionGetter stores it to g_thread_funcs.
+  nacl_irt_ppapihook hooks = { NULL, ThreadFunctionsGetter };
+  __nacl_register_thread_creator(&hooks);
+
+  // Here g_thread_funcs stores the thread functions.
+  // Inject the CountingThreadCreate.
+  PP_ThreadFunctions thread_functions = {
+    CountingThreadCreate,
+    CountingThreadJoin,
+  };
+  GetNaClIrtPpapiHook(&hooks);
+  hooks.ppapi_register_thread_creator(&thread_functions);
+}
+
+// Resets the PP_ThreadFunctions on exit from the scope.
+class ScopedThreadFunctionsResetter {
+ public:
+  ScopedThreadFunctionsResetter() {}
+  ~ScopedThreadFunctionsResetter() {
+    nacl_irt_ppapihook hooks;
+    GetNaClIrtPpapiHook(&hooks);
+    __nacl_register_thread_creator(&hooks);
+  }
+};
+
+}  // namespace
+#endif  // __native_client__
+
 REGISTER_TEST_CASE(Audio);
 
 TestAudio::TestAudio(TestingInstance* instance)
@@ -53,6 +130,11 @@
   RUN_TEST(AudioCallback2, filter);
   RUN_TEST(AudioCallback3, filter);
   RUN_TEST(AudioCallback4, filter);
+
+#if defined(__native_client__)
+  RUN_TEST(AudioThreadCreatorIsRequired, filter);
+  RUN_TEST(AudioThreadCreatorIsCalled, filter);
+#endif
 }
 
 // Test creating audio resources for all guaranteed sample rates and various
@@ -319,6 +401,91 @@
   PASS();
 }
 
+#if defined(__native_client__)
+// Tests the behavior of the thread_create functions.
+// For PPB_Audio_Shared to work properly, the user code must call
+// ppapi_register_thread_creator(). This test checks the error handling for the
+// case when user code doesn't call ppapi_register_thread_creator().
+std::string TestAudio::TestAudioThreadCreatorIsRequired() {
+  // We'll inject some thread functions in this test case.
+  // Reset them at the end of this case.
+  ScopedThreadFunctionsResetter thread_resetter;
+
+  // Set the thread functions to NULLs to emulate the situation where
+  // ppapi_register_thread_creator() is not called by user code.
+  SetNullThreadFunctions();
+
+  PP_Resource ac = CreateAudioConfig(PP_AUDIOSAMPLERATE_44100, 1024);
+  ASSERT_TRUE(ac);
+  audio_callback_method_ = NULL;
+  PP_Resource audio = audio_interface_->Create(
+      instance_->pp_instance(), ac, AudioCallbackTrampoline, this);
+  core_interface_->ReleaseResource(ac);
+  ac = 0;
+
+  // StartPlayback() fails, because no thread creating function
+  // is available.
+  ASSERT_FALSE(audio_interface_->StartPlayback(audio));
+
+  // If any more audio callbacks are generated,
+  // we should crash (which is good).
+  audio_callback_method_ = NULL;
+
+  core_interface_->ReleaseResource(audio);
+
+  PASS();
+}
+
+// Tests whether the thread functions passed from the user code are actually
+// called.
+std::string TestAudio::TestAudioThreadCreatorIsCalled() {
+  // We'll inject some thread functions in this test case.
+  // Reset them at the end of this case.
+  ScopedThreadFunctionsResetter thread_resetter;
+
+  // Inject the thread counting function. In the injected function,
+  // when called, g_num_thread_create_called is incremented.
+  g_num_thread_create_called = 0;
+  g_num_thread_join_called = 0;
+  InjectCountingThreadFunctions();
+
+  PP_Resource ac = CreateAudioConfig(PP_AUDIOSAMPLERATE_44100, 1024);
+  ASSERT_TRUE(ac);
+  audio_callback_method_ = NULL;
+  PP_Resource audio = audio_interface_->Create(
+      instance_->pp_instance(), ac, AudioCallbackTrampoline, this);
+  core_interface_->ReleaseResource(ac);
+  ac = 0;
+
+  audio_callback_event_.Reset();
+  test_done_ = false;
+
+  audio_callback_method_ = &TestAudio::AudioCallbackTest;
+  ASSERT_TRUE(audio_interface_->StartPlayback(audio));
+
+  // Wait for the audio callback to be called.
+  audio_callback_event_.Wait();
+  // Here, the injected thread_create is called, but thread_join is not yet.
+  ASSERT_EQ(1, g_num_thread_create_called);
+  ASSERT_EQ(0, g_num_thread_join_called);
+
+  ASSERT_TRUE(audio_interface_->StopPlayback(audio));
+
+  test_done_ = true;
+
+  // Here, the injected thread_join is called.
+  ASSERT_EQ(1, g_num_thread_join_called);
+
+  // If any more audio callbacks are generated,
+  // we should crash (which is good).
+  audio_callback_method_ = NULL;
+
+  core_interface_->ReleaseResource(audio);
+
+  PASS();
+}
+#endif
+
 // TODO(raymes): Test that actually playback happens correctly, etc.
 
 static void Crash() {
diff --git a/ppapi/tests/test_audio.h b/ppapi/tests/test_audio.h
index 56e6254..63e06f4 100644
--- a/ppapi/tests/test_audio.h
+++ b/ppapi/tests/test_audio.h
@@ -30,6 +30,11 @@
   std::string TestAudioCallback3();
   std::string TestAudioCallback4();
 
+#if defined(__native_client__)
+  std::string TestAudioThreadCreatorIsRequired();
+  std::string TestAudioThreadCreatorIsCalled();
+#endif
+
   // Calls |audio_callback_method_| (where |user_data| is "this").
   static void AudioCallbackTrampoline(void* sample_buffer,
                                       uint32_t buffer_size_in_bytes,
diff --git a/printing/print_destination_win.cc b/printing/print_destination_win.cc
deleted file mode 100644
index 3c4ebc4..0000000
--- a/printing/print_destination_win.cc
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright (c) 2012 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 "printing/print_destination_interface.h"
-
-#include "base/numerics/safe_conversions.h"
-#include "base/win/metro.h"
-#include "win8/util/win8_util.h"
-
-namespace printing {
-
-class PrintDestinationWin : public PrintDestinationInterface {
- public:
-  PrintDestinationWin()
-      : metro_set_print_page_count_(NULL),
-        metro_set_print_page_content_(NULL) {
-    HMODULE metro_module = base::win::GetMetroModule();
-    if (metro_module != NULL) {
-      metro_set_print_page_count_ =
-          reinterpret_cast<MetroSetPrintPageCount>(
-              ::GetProcAddress(metro_module, "MetroSetPrintPageCount"));
-      metro_set_print_page_content_ =
-          reinterpret_cast<MetroSetPrintPageContent>(
-              ::GetProcAddress(metro_module, "MetroSetPrintPageContent"));
-    }
-  }
-  virtual void SetPageCount(int page_count) {
-    if (metro_set_print_page_count_)
-      metro_set_print_page_count_(page_count);
-  }
-
-  virtual void SetPageContent(int page_number,
-                              void* content,
-                              size_t content_size) {
-    if (metro_set_print_page_content_)
-      metro_set_print_page_content_(page_number - 1, content,
-          base::checked_cast<UINT32>(content_size));
-  }
- private:
-  typedef void (*MetroSetPrintPageCount)(INT);
-  typedef void (*MetroSetPrintPageContent)(INT, VOID*, UINT32);
-  MetroSetPrintPageCount metro_set_print_page_count_;
-  MetroSetPrintPageContent metro_set_print_page_content_;
-};
-
-PrintDestinationInterface* CreatePrintDestination() {
-  // We currently only support the Metro print destination.
-  if (win8::IsSingleWindowMetroMode())
-    return new PrintDestinationWin;
-  else
-    return NULL;
-}
-
-}  // namespace printing
diff --git a/printing/printing.gyp b/printing/printing.gyp
index bd4940d..aea2c2e 100644
--- a/printing/printing.gyp
+++ b/printing/printing.gyp
@@ -61,7 +61,6 @@
         'pdf_metafile_skia.h',
         'print_destination_interface.h',
         'print_destination_none.cc',
-        'print_destination_win.cc',
         'print_dialog_gtk_interface.h',
         'print_job_constants.cc',
         'print_job_constants.h',
@@ -98,16 +97,6 @@
           'dependencies': [
             '<(DEPTH)/ui/aura/aura.gyp:aura',
           ],
-        }], 
-        ['toolkit_uses_gtk == 0',{
-            'sources/': [['exclude', '_cairo\\.cc$']]
-          }, {  # else: toolkit_uses_gtk == 1
-          'dependencies': [
-            # For FT_Init_FreeType and friends.
-            '../build/linux/system.gyp:freetype2',
-            '../build/linux/system.gyp:gtk',
-            '../build/linux/system.gyp:gtkprint',
-          ],
         }],
         # Mac-Aura does not support printing.
         ['OS=="mac" and use_aura==1',{
@@ -125,14 +114,8 @@
         }],
         ['OS=="win"', {
           'dependencies': [
-            '../win8/win8.gyp:win8_util',
+            '<(DEPTH)/ui/aura/aura.gyp:aura',
           ],
-          'conditions': [
-            ['use_aura==1', {
-              'dependencies': [
-                '<(DEPTH)/ui/aura/aura.gyp:aura',
-              ],
-          }]],
           'defines': [
             # PRINT_BACKEND_AVAILABLE disables the default dummy implementation
             # of the print backend and enables a custom implementation instead.
@@ -145,9 +128,6 @@
             'printing_context_win.cc',
             'printing_context_win.h',
           ],
-          'sources!': [
-            'print_destination_none.cc',
-          ],
         }],
         ['chromeos==1',{
           'sources': [
@@ -255,7 +235,6 @@
         'units_unittest.cc',
       ],
       'conditions': [
-        ['toolkit_uses_gtk == 0', {'sources/': [['exclude', '_gtk_unittest\\.cc$']]}],
         ['OS!="mac"', {'sources/': [['exclude', '_mac_unittest\\.(cc|mm?)$']]}],
         ['OS!="win"', {'sources/': [['exclude', '_win_unittest\\.cc$']]}],
         ['use_cups==1', {
@@ -266,11 +245,6 @@
             'backend/cups_helper_unittest.cc',
           ],
         }],
-        ['toolkit_uses_gtk == 1', {
-          'dependencies': [
-            '../build/linux/system.gyp:gtk',
-          ],
-        }],
         [ 'os_posix == 1 and OS != "mac" and OS != "android" and OS != "ios"', {
           'conditions': [
             # TODO(dmikurube): Kill linux_use_tcmalloc. http://crbug.com/345554
diff --git a/printing/printing.target.darwin-arm.mk b/printing/printing.target.darwin-arm.mk
index 1832a17..ef2a221 100644
--- a/printing/printing.target.darwin-arm.mk
+++ b/printing/printing.target.darwin-arm.mk
@@ -115,12 +115,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -236,12 +239,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -314,7 +320,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/printing/printing.target.darwin-mips.mk b/printing/printing.target.darwin-mips.mk
index b2fce60..86d055d 100644
--- a/printing/printing.target.darwin-mips.mk
+++ b/printing/printing.target.darwin-mips.mk
@@ -114,12 +114,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -234,12 +237,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -310,7 +316,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/printing/printing.target.darwin-x86.mk b/printing/printing.target.darwin-x86.mk
index cf75337..a188cde 100644
--- a/printing/printing.target.darwin-x86.mk
+++ b/printing/printing.target.darwin-x86.mk
@@ -116,12 +116,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -237,12 +240,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -312,7 +318,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/printing/printing.target.darwin-x86_64.mk b/printing/printing.target.darwin-x86_64.mk
index e11c378..4acab3d 100644
--- a/printing/printing.target.darwin-x86_64.mk
+++ b/printing/printing.target.darwin-x86_64.mk
@@ -116,12 +116,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -237,12 +240,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -312,7 +318,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/printing/printing.target.linux-arm.mk b/printing/printing.target.linux-arm.mk
index 1832a17..ef2a221 100644
--- a/printing/printing.target.linux-arm.mk
+++ b/printing/printing.target.linux-arm.mk
@@ -115,12 +115,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -236,12 +239,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -314,7 +320,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/printing/printing.target.linux-mips.mk b/printing/printing.target.linux-mips.mk
index b2fce60..86d055d 100644
--- a/printing/printing.target.linux-mips.mk
+++ b/printing/printing.target.linux-mips.mk
@@ -114,12 +114,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -234,12 +237,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -310,7 +316,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/printing/printing.target.linux-x86.mk b/printing/printing.target.linux-x86.mk
index cf75337..a188cde 100644
--- a/printing/printing.target.linux-x86.mk
+++ b/printing/printing.target.linux-x86.mk
@@ -116,12 +116,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -237,12 +240,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -312,7 +318,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/printing/printing.target.linux-x86_64.mk b/printing/printing.target.linux-x86_64.mk
index e11c378..4acab3d 100644
--- a/printing/printing.target.linux-x86_64.mk
+++ b/printing/printing.target.linux-x86_64.mk
@@ -116,12 +116,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -237,12 +240,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -312,7 +318,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/printing/printing_context_win.cc b/printing/printing_context_win.cc
index a9e22b3..7983d26 100644
--- a/printing/printing_context_win.cc
+++ b/printing/printing_context_win.cc
@@ -15,7 +15,6 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/time/time.h"
 #include "base/values.h"
-#include "base/win/metro.h"
 #include "printing/backend/print_backend.h"
 #include "printing/backend/printing_info_win.h"
 #include "printing/backend/win_helper.h"
@@ -25,7 +24,6 @@
 #include "printing/printing_utils.h"
 #include "printing/units.h"
 #include "skia/ext/platform_device.h"
-#include "win8/util/win8_util.h"
 
 #if defined(USE_AURA)
 #include "ui/aura/remote_window_tree_host_win.h"
@@ -175,24 +173,6 @@
     gfx::NativeView view, int max_pages, bool has_selection,
     const PrintSettingsCallback& callback) {
   DCHECK(!in_print_job_);
-  if (win8::IsSingleWindowMetroMode()) {
-    // The system dialog can not be opened while running in Metro.
-    // But we can programatically launch the Metro print device charm though.
-    HMODULE metro_module = base::win::GetMetroModule();
-    if (metro_module != NULL) {
-      typedef void (*MetroShowPrintUI)();
-      MetroShowPrintUI metro_show_print_ui =
-          reinterpret_cast<MetroShowPrintUI>(
-              ::GetProcAddress(metro_module, "MetroShowPrintUI"));
-      if (metro_show_print_ui) {
-        // TODO(mad): Remove this once we can send user metrics from the metro
-        // driver. crbug.com/142330
-        UMA_HISTOGRAM_ENUMERATION("Metro.Print", 1, 2);
-        metro_show_print_ui();
-      }
-    }
-    return callback.Run(CANCEL);
-  }
   dialog_box_dismissed_ = false;
 
   HWND window = GetRootWindow(view);
diff --git a/remoting/android/apk/src/org/chromium/chromoting/RemotingApplication.java b/remoting/android/apk/src/org/chromium/chromoting/RemotingApplication.java
new file mode 100644
index 0000000..b39afd2
--- /dev/null
+++ b/remoting/android/apk/src/org/chromium/chromoting/RemotingApplication.java
@@ -0,0 +1,11 @@
+// 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.
+
+package org.chromium.chromoting;
+
+import android.app.Application;
+
+/** Main context for the application. */
+public class RemotingApplication extends Application {
+}
diff --git a/remoting/resources/README b/remoting/android/java/README
similarity index 100%
rename from remoting/resources/README
rename to remoting/android/java/README
diff --git a/remoting/resources/android/drawable-hdpi/ic_action_keyboard.png b/remoting/android/java/res/drawable-hdpi/ic_action_keyboard.png
similarity index 100%
rename from remoting/resources/android/drawable-hdpi/ic_action_keyboard.png
rename to remoting/android/java/res/drawable-hdpi/ic_action_keyboard.png
Binary files differ
diff --git a/remoting/resources/android/drawable-mdpi/ic_action_keyboard.png b/remoting/android/java/res/drawable-mdpi/ic_action_keyboard.png
similarity index 100%
rename from remoting/resources/android/drawable-mdpi/ic_action_keyboard.png
rename to remoting/android/java/res/drawable-mdpi/ic_action_keyboard.png
Binary files differ
diff --git a/remoting/resources/android/drawable-xhdpi/ic_action_keyboard.png b/remoting/android/java/res/drawable-xhdpi/ic_action_keyboard.png
similarity index 100%
rename from remoting/resources/android/drawable-xhdpi/ic_action_keyboard.png
rename to remoting/android/java/res/drawable-xhdpi/ic_action_keyboard.png
Binary files differ
diff --git a/remoting/resources/android/drawable-xxhdpi/ic_action_keyboard.png b/remoting/android/java/res/drawable-xxhdpi/ic_action_keyboard.png
similarity index 100%
rename from remoting/resources/android/drawable-xxhdpi/ic_action_keyboard.png
rename to remoting/android/java/res/drawable-xxhdpi/ic_action_keyboard.png
Binary files differ
diff --git a/remoting/resources/android/drawable/empty_host_list.png b/remoting/android/java/res/drawable/empty_host_list.png
similarity index 100%
rename from remoting/resources/android/drawable/empty_host_list.png
rename to remoting/android/java/res/drawable/empty_host_list.png
Binary files differ
diff --git a/remoting/resources/android/drawable/icon_host_offline.png b/remoting/android/java/res/drawable/icon_host_offline.png
similarity index 100%
rename from remoting/resources/android/drawable/icon_host_offline.png
rename to remoting/android/java/res/drawable/icon_host_offline.png
Binary files differ
diff --git a/remoting/resources/android/drawable/list_item_disabled_selector.xml b/remoting/android/java/res/drawable/list_item_disabled_selector.xml
similarity index 100%
rename from remoting/resources/android/drawable/list_item_disabled_selector.xml
rename to remoting/android/java/res/drawable/list_item_disabled_selector.xml
diff --git a/remoting/resources/android/drawable/list_item_selector.xml b/remoting/android/java/res/drawable/list_item_selector.xml
similarity index 100%
rename from remoting/resources/android/drawable/list_item_selector.xml
rename to remoting/android/java/res/drawable/list_item_selector.xml
diff --git a/remoting/resources/android/layout/account_dropdown.xml b/remoting/android/java/res/layout/account_dropdown.xml
similarity index 100%
rename from remoting/resources/android/layout/account_dropdown.xml
rename to remoting/android/java/res/layout/account_dropdown.xml
diff --git a/remoting/resources/android/layout/account_selected.xml b/remoting/android/java/res/layout/account_selected.xml
similarity index 100%
rename from remoting/resources/android/layout/account_selected.xml
rename to remoting/android/java/res/layout/account_selected.xml
diff --git a/remoting/android/java/res/layout/desktop.xml b/remoting/android/java/res/layout/desktop.xml
new file mode 100644
index 0000000..897f9f8
--- /dev/null
+++ b/remoting/android/java/res/layout/desktop.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!-- 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.
+-->
+
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+        android:layout_height="match_parent"
+        android:layout_width="match_parent"
+        android:orientation="vertical">
+    <org.chromium.chromoting.DesktopView android:id="@+id/desktop_view"
+            android:layout_height="match_parent"
+            android:layout_width="match_parent"/>
+    <ImageButton android:id="@+id/desktop_overlay_button"
+            android:background="@android:color/transparent"
+            android:layout_gravity="top|end"
+            android:layout_height="wrap_content"
+            android:layout_width="wrap_content"
+            android:onClick="onOverlayButtonPressed"
+            android:src="@android:drawable/ic_menu_more"/>
+</FrameLayout>
diff --git a/remoting/android/java/res/layout/host.xml b/remoting/android/java/res/layout/host.xml
new file mode 100644
index 0000000..2226a8b
--- /dev/null
+++ b/remoting/android/java/res/layout/host.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!-- 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.
+-->
+
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+        android:background="@drawable/list_item_selector"
+        android:drawablePadding="16sp"
+        android:gravity="center_vertical"
+        android:id="@+id/host_label"
+        android:layout_height="wrap_content"
+        android:layout_width="match_parent"
+        android:paddingBottom="20sp"
+        android:paddingStart="16sp"
+        android:paddingEnd="16sp"
+        android:paddingTop="20sp"
+        style="@android:style/TextAppearance.Holo.Medium"/>
diff --git a/remoting/resources/android/layout/main.xml b/remoting/android/java/res/layout/main.xml
similarity index 100%
rename from remoting/resources/android/layout/main.xml
rename to remoting/android/java/res/layout/main.xml
diff --git a/remoting/resources/android/layout/pin_dialog.xml b/remoting/android/java/res/layout/pin_dialog.xml
similarity index 100%
rename from remoting/resources/android/layout/pin_dialog.xml
rename to remoting/android/java/res/layout/pin_dialog.xml
diff --git a/remoting/resources/android/menu/chromoting_actionbar.xml b/remoting/android/java/res/menu/chromoting_actionbar.xml
similarity index 100%
rename from remoting/resources/android/menu/chromoting_actionbar.xml
rename to remoting/android/java/res/menu/chromoting_actionbar.xml
diff --git a/remoting/resources/android/menu/desktop_actionbar.xml b/remoting/android/java/res/menu/desktop_actionbar.xml
similarity index 100%
rename from remoting/resources/android/menu/desktop_actionbar.xml
rename to remoting/android/java/res/menu/desktop_actionbar.xml
diff --git a/remoting/resources/android/menu/help_actionbar.xml b/remoting/android/java/res/menu/help_actionbar.xml
similarity index 100%
rename from remoting/resources/android/menu/help_actionbar.xml
rename to remoting/android/java/res/menu/help_actionbar.xml
diff --git a/remoting/resources/android/values-land/dimens.xml b/remoting/android/java/res/values-land/dimens.xml
similarity index 100%
rename from remoting/resources/android/values-land/dimens.xml
rename to remoting/android/java/res/values-land/dimens.xml
diff --git a/remoting/resources/android/values/styles.xml b/remoting/android/java/res/values-v17/styles.xml
similarity index 100%
rename from remoting/resources/android/values/styles.xml
rename to remoting/android/java/res/values-v17/styles.xml
diff --git a/remoting/resources/android/values/colors.xml b/remoting/android/java/res/values/colors.xml
similarity index 100%
rename from remoting/resources/android/values/colors.xml
rename to remoting/android/java/res/values/colors.xml
diff --git a/remoting/resources/android/values/dimens.xml b/remoting/android/java/res/values/dimens.xml
similarity index 100%
rename from remoting/resources/android/values/dimens.xml
rename to remoting/android/java/res/values/dimens.xml
diff --git a/remoting/android/java/src/org/chromium/chromoting/Chromoting.java b/remoting/android/java/src/org/chromium/chromoting/Chromoting.java
index 1e8b489..f8a9849 100644
--- a/remoting/android/java/src/org/chromium/chromoting/Chromoting.java
+++ b/remoting/android/java/src/org/chromium/chromoting/Chromoting.java
@@ -241,18 +241,16 @@
     /** Called whenever an action bar button is pressed. */
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
-        switch (item.getItemId()) {
-            case R.id.actionbar_directoryrefresh:
-                refreshHostList();
-                return true;
-
-            case R.id.actionbar_help:
-                HelpActivity.launch(this, HELP_URL);
-                return true;
-
-            default:
-                return super.onOptionsItemSelected(item);
+        int id = item.getItemId();
+        if (id == R.id.actionbar_directoryrefresh) {
+            refreshHostList();
+            return true;
         }
+        if (id == R.id.actionbar_help) {
+            HelpActivity.launch(this, HELP_URL);
+            return true;
+        }
+        return super.onOptionsItemSelected(item);
     }
 
     /** Called when the user touches hyperlinked text. */
diff --git a/remoting/android/java/src/org/chromium/chromoting/Desktop.java b/remoting/android/java/src/org/chromium/chromoting/Desktop.java
index 570fd80..e4a8d0c 100644
--- a/remoting/android/java/src/org/chromium/chromoting/Desktop.java
+++ b/remoting/android/java/src/org/chromium/chromoting/Desktop.java
@@ -6,6 +6,7 @@
 
 import android.app.Activity;
 import android.content.res.Configuration;
+import android.os.Build;
 import android.os.Bundle;
 import android.view.KeyEvent;
 import android.view.Menu;
@@ -19,7 +20,7 @@
 /**
  * A simple screen that does nothing except display a DesktopView and notify it of rotations.
  */
-public class Desktop extends Activity {
+public class Desktop extends Activity implements View.OnSystemUiVisibilityChangeListener {
     /** Web page to be displayed in the Help screen when launched from this activity. */
     private static final String HELP_URL =
             "http://support.google.com/chrome/?p=mobile_crd_connecthost";
@@ -41,6 +42,9 @@
 
         // Ensure the button is initially hidden.
         showActionBar();
+
+        View decorView = getWindow().getDecorView();
+        decorView.setOnSystemUiVisibilityChangeListener(this);
     }
 
     /** Called when the activity is finally finished. */
@@ -64,14 +68,59 @@
         return super.onCreateOptionsMenu(menu);
     }
 
+    /** Called whenever the visibility of the system status bar or navigation bar changes. */
+    @Override
+    public void onSystemUiVisibilityChange(int visibility) {
+        // Ensure the action-bar's visibility matches that of the system controls. This
+        // minimizes the number of states the UI can be in, to keep things simple for the user.
+
+        // Determine if the system is in fullscreen/lights-out mode. LOW_PROFILE is needed since
+        // it's the only flag supported in 4.0. But it is not sufficient in itself; when
+        // IMMERSIVE_STICKY mode is used, the system clears this flag (leaving the FULLSCREEN flag
+        // set) when the user swipes the edge to reveal the bars temporarily. When this happens,
+        // the action-bar should remain hidden.
+        int fullscreenFlags = View.SYSTEM_UI_FLAG_LOW_PROFILE;
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
+            fullscreenFlags |= View.SYSTEM_UI_FLAG_FULLSCREEN;
+        }
+        if ((visibility & fullscreenFlags) != 0) {
+            hideActionBar();
+        } else {
+            showActionBar();
+        }
+    }
+
     public void showActionBar() {
         mOverlayButton.setVisibility(View.INVISIBLE);
         getActionBar().show();
+
+        View decorView = getWindow().getDecorView();
+        decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
     }
 
     public void hideActionBar() {
         mOverlayButton.setVisibility(View.VISIBLE);
         getActionBar().hide();
+
+        View decorView = getWindow().getDecorView();
+
+        // LOW_PROFILE gives the status and navigation bars a "lights-out" appearance.
+        // FULLSCREEN hides the status bar on supported devices (4.1 and above).
+        int flags = View.SYSTEM_UI_FLAG_LOW_PROFILE;
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
+            flags |= View.SYSTEM_UI_FLAG_FULLSCREEN;
+        }
+
+        // HIDE_NAVIGATION hides the navigation bar. However, if the user touches the screen, the
+        // event is not seen by the application and instead the navigation bar is re-shown.
+        // IMMERSIVE(_STICKY) fixes this problem and allows the user to interact with the app while
+        // keeping the navigation controls hidden. This flag was introduced in 4.4, later than
+        // HIDE_NAVIGATION, and so a runtime check is needed before setting either of these flags.
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+            flags |= (View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
+        }
+
+        decorView.setSystemUiVisibility(flags);
     }
 
     /** The overlay button's onClick handler. */
@@ -82,42 +131,38 @@
     /** Called whenever an action bar button is pressed. */
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
-        switch (item.getItemId()) {
-            case R.id.actionbar_keyboard:
-                ((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)).toggleSoftInput(0, 0);
-                return true;
-
-            case R.id.actionbar_hide:
-                hideActionBar();
-                return true;
-
-            case R.id.actionbar_disconnect:
-                JniInterface.disconnectFromHost();
-                return true;
-
-            case R.id.actionbar_send_ctrl_alt_del:
-                {
-                    int[] keys = {
-                        KeyEvent.KEYCODE_CTRL_LEFT,
-                        KeyEvent.KEYCODE_ALT_LEFT,
-                        KeyEvent.KEYCODE_FORWARD_DEL,
-                    };
-                    for (int key : keys) {
-                        JniInterface.sendKeyEvent(key, true);
-                    }
-                    for (int key : keys) {
-                        JniInterface.sendKeyEvent(key, false);
-                    }
-                }
-                return true;
-
-            case R.id.actionbar_help:
-                HelpActivity.launch(this, HELP_URL);
-                return true;
-
-            default:
-                return super.onOptionsItemSelected(item);
+        int id = item.getItemId();
+        if (id == R.id.actionbar_keyboard) {
+            ((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)).toggleSoftInput(0, 0);
+            return true;
         }
+        if (id == R.id.actionbar_hide) {
+            hideActionBar();
+            return true;
+        }
+        if (id == R.id.actionbar_disconnect) {
+            JniInterface.disconnectFromHost();
+            return true;
+        }
+        if (id == R.id.actionbar_send_ctrl_alt_del) {
+            int[] keys = {
+                KeyEvent.KEYCODE_CTRL_LEFT,
+                KeyEvent.KEYCODE_ALT_LEFT,
+                KeyEvent.KEYCODE_FORWARD_DEL,
+            };
+            for (int key : keys) {
+                JniInterface.sendKeyEvent(key, true);
+            }
+            for (int key : keys) {
+                JniInterface.sendKeyEvent(key, false);
+            }
+            return true;
+        }
+        if (id == R.id.actionbar_help) {
+            HelpActivity.launch(this, HELP_URL);
+            return true;
+        }
+        return super.onOptionsItemSelected(item);
     }
 
     /**
diff --git a/remoting/android/java/src/org/chromium/chromoting/HelpActivity.java b/remoting/android/java/src/org/chromium/chromoting/HelpActivity.java
index efe1f21..24fbd34 100644
--- a/remoting/android/java/src/org/chromium/chromoting/HelpActivity.java
+++ b/remoting/android/java/src/org/chromium/chromoting/HelpActivity.java
@@ -132,17 +132,15 @@
 
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
-        switch (item.getItemId()) {
-            case R.id.actionbar_feedback:
-                sendFeedback();
-                return true;
-
-            case R.id.actionbar_play_store:
-                openUrl(PLAY_STORE_URL + getPackageName());
-                return true;
-
-            default:
-                return super.onOptionsItemSelected(item);
+        int id = item.getItemId();
+        if (id == R.id.actionbar_feedback) {
+            sendFeedback();
+            return true;
         }
+        if (id == R.id.actionbar_play_store) {
+            openUrl(PLAY_STORE_URL + getPackageName());
+            return true;
+        }
+        return super.onOptionsItemSelected(item);
     }
 }
diff --git a/remoting/client/plugin/pepper_view.cc b/remoting/client/plugin/pepper_view.cc
index d561bfb..ab0d550 100644
--- a/remoting/client/plugin/pepper_view.cc
+++ b/remoting/client/plugin/pepper_view.cc
@@ -140,12 +140,17 @@
     DCHECK(result) << "Couldn't bind the device context.";
   }
 
-  pp::Rect pp_clip = view.GetClipRect();
-  webrtc::DesktopRect new_clip = webrtc::DesktopRect::MakeLTRB(
-      floorf(pp_clip.x() * dips_to_view_scale_),
-      floorf(pp_clip.y() * dips_to_view_scale_),
-      ceilf(pp_clip.right() * dips_to_view_scale_),
-      ceilf(pp_clip.bottom() * dips_to_view_scale_));
+  // Ignore clip rectangle provided by the browser because it may not be
+  // correct. See crbug.com/360240 . In case when the plugin is not visible
+  // (e.g. another tab is selected) |clip_area_| is set to empty rectangle,
+  // otherwise it's set to a rectangle that covers the whole plugin.
+  //
+  // TODO(sergeyu): Use view.GetClipRect() here after bug 360240 is fixed.
+  webrtc::DesktopRect new_clip =
+      view.IsVisible() ? webrtc::DesktopRect::MakeWH(
+                             ceilf(pp_size.width() * dips_to_view_scale_),
+                             ceilf(pp_size.height() * dips_to_view_scale_))
+                       : webrtc::DesktopRect();
   if (!clip_area_.equals(new_clip)) {
     view_changed = true;
 
diff --git a/remoting/host/continue_window_linux.cc b/remoting/host/continue_window_linux.cc
index b880280..8e7a41d 100644
--- a/remoting/host/continue_window_linux.cc
+++ b/remoting/host/continue_window_linux.cc
@@ -9,7 +9,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "remoting/base/string_resources.h"
 #include "remoting/host/continue_window.h"
-#include "ui/base/gtk/gtk_signal.h"
+#include "ui/base/glib/glib_signal.h"
 #include "ui/base/l10n/l10n_util.h"
 
 namespace remoting {
@@ -27,7 +27,7 @@
  private:
   void CreateWindow();
 
-  CHROMEGTK_CALLBACK_1(ContinueWindowGtk, void, OnResponse, int);
+  CHROMEG_CALLBACK_1(ContinueWindowGtk, void, OnResponse, GtkDialog*, int);
 
   GtkWidget* continue_window_;
 
@@ -101,7 +101,7 @@
   gtk_widget_show_all(content_area);
 }
 
-void ContinueWindowGtk::OnResponse(GtkWidget* dialog, int response_id) {
+void ContinueWindowGtk::OnResponse(GtkDialog* dialog, int response_id) {
   DCHECK(CalledOnValidThread());
 
   if (response_id == GTK_RESPONSE_OK) {
diff --git a/remoting/host/disconnect_window_linux.cc b/remoting/host/disconnect_window_linux.cc
index eb2575a..4a9c36e 100644
--- a/remoting/host/disconnect_window_linux.cc
+++ b/remoting/host/disconnect_window_linux.cc
@@ -12,7 +12,7 @@
 #include "remoting/base/string_resources.h"
 #include "remoting/host/client_session_control.h"
 #include "remoting/host/host_window.h"
-#include "ui/base/gtk/gtk_signal.h"
+#include "ui/base/glib/glib_signal.h"
 #include "ui/base/l10n/l10n_util.h"
 
 namespace remoting {
@@ -30,12 +30,13 @@
       OVERRIDE;
 
  private:
-  CHROMEGTK_CALLBACK_1(DisconnectWindowGtk, gboolean, OnDelete, GdkEvent*);
-  CHROMEGTK_CALLBACK_0(DisconnectWindowGtk, void, OnClicked);
-  CHROMEGTK_CALLBACK_1(DisconnectWindowGtk, gboolean, OnConfigure,
-                       GdkEventConfigure*);
-  CHROMEGTK_CALLBACK_1(DisconnectWindowGtk, gboolean, OnButtonPress,
-                       GdkEventButton*);
+  CHROMEG_CALLBACK_1(DisconnectWindowGtk, gboolean, OnDelete,
+                     GtkWidget*, GdkEvent*);
+  CHROMEG_CALLBACK_0(DisconnectWindowGtk, void, OnClicked, GtkButton*);
+  CHROMEG_CALLBACK_1(DisconnectWindowGtk, gboolean, OnConfigure,
+                     GtkWidget*, GdkEventConfigure*);
+  CHROMEG_CALLBACK_1(DisconnectWindowGtk, gboolean, OnButtonPress,
+                     GtkWidget*, GdkEventButton*);
 
   // Used to disconnect the client session.
   base::WeakPtr<ClientSessionControl> client_session_control_;
@@ -168,7 +169,7 @@
   gtk_window_present(window);
 }
 
-void DisconnectWindowGtk::OnClicked(GtkWidget* button) {
+void DisconnectWindowGtk::OnClicked(GtkButton* button) {
   DCHECK(CalledOnValidThread());
 
   if (client_session_control_.get())
diff --git a/remoting/host/input_injector_mac.cc b/remoting/host/input_injector_mac.cc
index 30ea580..c5e8700 100644
--- a/remoting/host/input_injector_mac.cc
+++ b/remoting/host/input_injector_mac.cc
@@ -248,8 +248,9 @@
             webrtc::MacDesktopConfiguration::TopLeftOrigin);
 
     // Translate the mouse position into desktop coordinates.
-    mouse_pos_.add(webrtc::DesktopVector(desktop_config.pixel_bounds.left(),
-                                         desktop_config.pixel_bounds.top()));
+    mouse_pos_ = mouse_pos_.add(
+        webrtc::DesktopVector(desktop_config.pixel_bounds.left(),
+                              desktop_config.pixel_bounds.top()));
 
     // Constrain the mouse position to the desktop coordinates.
     mouse_pos_.set(
diff --git a/remoting/host/installer/win/chromoting.wxs b/remoting/host/installer/win/chromoting.wxs
index d6b5557..2dfb8cc 100644
--- a/remoting/host/installer/win/chromoting.wxs
+++ b/remoting/host/installer/win/chromoting.wxs
@@ -92,6 +92,9 @@
              Manufacturer="$(var.Manufacturer)"
              InstallScope="perMachine"/>
 
+    <PropertyRef Id="WIX_ACCOUNT_LOCALSYSTEM" />
+    <PropertyRef Id="WIX_ACCOUNT_ADMINISTRATORS" />
+
     <Condition
       Message="$(var.ChromotingHost) is only supported on Windows XP, Windows Server 2003, or higher.">
       <![CDATA[Installed OR (VersionNT >= 501)]]>
@@ -524,12 +527,11 @@
                  Windows Installer version 4.5 or lower. Also Cannot use
                  PermissionEx in WixUtilExtension because it automatically
                  inherits all the ACLs from the parent. -->
-            <Permission User="SYSTEM"
+            <Permission User="[WIX_ACCOUNT_LOCALSYSTEM]"
                         GenericAll="yes"
                         ChangePermission="yes"
                         TakeOwnership="yes"/>
-            <Permission User="Administrators"
-                        Domain="[LOCAL_MACHINE_NAME]"
+            <Permission User="[WIX_ACCOUNT_ADMINISTRATORS]"
                         GenericAll="yes"
                         ChangePermission="yes"
                         TakeOwnership="yes"/>
diff --git a/remoting/host/it2me/it2me_host.h b/remoting/host/it2me/it2me_host.h
index f38e5c3..a5d77a4 100644
--- a/remoting/host/it2me/it2me_host.h
+++ b/remoting/host/it2me/it2me_host.h
@@ -6,11 +6,16 @@
 #define REMOTING_HOST_IT2ME_IT2ME_HOST_H_
 
 #include "base/memory/ref_counted.h"
+#include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/single_thread_task_runner.h"
 #include "remoting/host/log_to_server.h"
 #include "remoting/jingle_glue/xmpp_signal_strategy.h"
 
+namespace base {
+class DictionaryValue;
+}
+
 namespace remoting {
 
 class RegisterSupportHostRequest;
diff --git a/remoting/jingle_glue/iq_sender.cc b/remoting/jingle_glue/iq_sender.cc
index 0f5460b..7b00c7f 100644
--- a/remoting/jingle_glue/iq_sender.cc
+++ b/remoting/jingle_glue/iq_sender.cc
@@ -102,19 +102,6 @@
   std::string from = stanza->Attr(buzz::QN_FROM);
 
   IqRequestMap::iterator it = requests_.find(id);
-
-  // This is a hack to workaround the issue with the WCS changing IDs
-  // of IQ responses sent from client to host. Whenever we receive a
-  // stanza with an unknown ID we try to match it with an outstanding
-  // request sent to the same peer.
-  if (it == requests_.end()) {
-    for (it = requests_.begin(); it != requests_.end(); ++it) {
-      if (it->second->addressee_ == from) {
-        break;
-      }
-    }
-  }
-
   if (it == requests_.end()) {
     return false;
   }
diff --git a/remoting/jingle_glue/iq_sender_unittest.cc b/remoting/jingle_glue/iq_sender_unittest.cc
index 606d246..dd776f9 100644
--- a/remoting/jingle_glue/iq_sender_unittest.cc
+++ b/remoting/jingle_glue/iq_sender_unittest.cc
@@ -138,24 +138,4 @@
   base::RunLoop().RunUntilIdle();
 }
 
-TEST_F(IqSenderTest, IdMatchingHack) {
-  ASSERT_NO_FATAL_FAILURE({
-    SendTestMessage();
-  });
-
-  scoped_ptr<XmlElement> response(new XmlElement(buzz::QN_IQ));
-  response->AddAttr(QName(std::string(), "type"), "result");
-  response->AddAttr(QName(std::string(), "id"), "DIFFERENT_ID");
-  response->AddAttr(QName(std::string(), "from"), kTo);
-
-  XmlElement* result = new XmlElement(
-      QName("test:namespace", "response-body"));
-  response->AddElement(result);
-
-  EXPECT_TRUE(sender_->OnSignalStrategyIncomingStanza(response.get()));
-
-  EXPECT_CALL(callback_, OnReply(request_.get(), XmlEq(response.get())));
-  base::RunLoop().RunUntilIdle();
-}
-
 }  // namespace remoting
diff --git a/remoting/remoting_android.gypi b/remoting/remoting_android.gypi
index 86b9e56..d0865d6 100644
--- a/remoting/remoting_android.gypi
+++ b/remoting/remoting_android.gypi
@@ -79,47 +79,51 @@
           }],
         },  # end of target 'remoting_apk_manifest'
         {
+          'target_name': 'remoting_android_client_java',
+          'type': 'none',
+          'variables': {
+            'java_in_dir': 'android/java',
+            'has_java_resources': 1,
+            'R_package': 'org.chromium.chromoting',
+            'R_package_relpath': 'org/chromium/chromoting',
+            'res_extra_dirs': [ '<(SHARED_INTERMEDIATE_DIR)/remoting/android/res' ],
+            'res_extra_files': [
+              '<!@pymod_do_main(grit_info <@(grit_defines) --outputs "<(SHARED_INTERMEDIATE_DIR)" resources/remoting_strings.grd)',
+              '<(SHARED_INTERMEDIATE_DIR)/remoting/android/res/drawable/chromoting128.png',
+              '<(SHARED_INTERMEDIATE_DIR)/remoting/android/res/drawable/icon_host.png',
+            ],
+          },
+          'dependencies': [
+            '../base/base.gyp:base_java',
+            '../ui/android/ui_android.gyp:ui_java',
+            'remoting_android_resources',
+          ],
+          'includes': [ '../build/java.gypi' ],
+        },
+        {
           'target_name': 'remoting_apk',
           'type': 'none',
           'dependencies': [
-            'remoting_android_resources',
             'remoting_apk_manifest',
             'remoting_client_jni',
+            'remoting_android_client_java',
           ],
           'variables': {
             'apk_name': '<!(python <(version_py_path) -f <(branding_path) -t "@APK_FILE_NAME@")',
             'android_app_version_name': '<(version_full)',
             'android_app_version_code': '<!(python tools/android_version.py <(android_app_version_name))',
             'android_manifest_path': '<(SHARED_INTERMEDIATE_DIR)/remoting/android/AndroidManifest.xml',
+            'java_in_dir': 'android/apk',
             'native_lib_target': 'libremoting_client_jni',
-            'java_in_dir': 'android/java',
-            'R_package': 'org.chromium.chromoting',
-            'package_name': '<(_target_name)',
-            'resource_dir': 'resources/android',
-            'additional_res_dirs': [ '<(SHARED_INTERMEDIATE_DIR)/remoting/android/res' ],
-            'additional_input_paths': [
-              '<(PRODUCT_DIR)/obj/remoting/remoting_android_resources.actions_rules_copies.stamp',
-              '<(PRODUCT_DIR)/obj/remoting/remoting_resources.actions_rules_copies.stamp',
-            ],
           },
           'includes': [ '../build/java_apk.gypi' ],
         },  # end of target 'remoting_apk'
         {
-          # remoting_apk creates a .jar file as a side effect. Any Java targets
-          # that need that .jar in their classpath should depend on this target.
-          'target_name': 'remoting_apk_java',
-          'type': 'none',
-          'dependencies': [
-            'remoting_apk',
-          ],
-          'includes': [ '../build/apk_fake_jar.gypi' ],
-        },  # end of target 'remoting_apk_java'
-        {
           'target_name': 'remoting_test_apk',
           'type': 'none',
           'dependencies': [
             '../base/base.gyp:base_java_test_support',
-            'remoting_apk_java',
+            'remoting_android_client_java',
           ],
           'variables': {
             'apk_name': 'ChromotingTest',
@@ -141,7 +145,6 @@
           ],
           'variables': {
             'test_suite_name': 'remoting_unittests',
-            'input_shlib_path': '<(SHARED_LIB_DIR)/<(SHARED_LIB_PREFIX)remoting_unittests<(SHARED_LIB_SUFFIX)',
           },
           'includes': [ '../build/apk_test.gypi' ],
         },
diff --git a/remoting/remoting_webapp_files.gypi b/remoting/remoting_webapp_files.gypi
index c4bcc69..cc94f6e 100644
--- a/remoting/remoting_webapp_files.gypi
+++ b/remoting/remoting_webapp_files.gypi
@@ -154,6 +154,7 @@
       'resources/disclosure_arrow_right.webp',
       'resources/host_setup_instructions.webp',
       'resources/icon_cross.webp',
+      'resources/icon_help.webp',
       'resources/icon_host.webp',
       'resources/icon_pencil.webp',
       'resources/icon_warning.webp',
diff --git a/remoting/resources/android/layout/desktop.xml b/remoting/resources/android/layout/desktop.xml
deleted file mode 100644
index d4ac3e5..0000000
--- a/remoting/resources/android/layout/desktop.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!-- 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.
--->
-
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-        android:layout_height="match_parent"
-        android:layout_width="match_parent"
-        android:orientation="vertical">
-    <org.chromium.chromoting.DesktopView android:id="@+id/desktop_view"
-            android:layout_height="match_parent"
-            android:layout_width="match_parent"/>
-    <ImageButton android:id="@+id/desktop_overlay_button"
-            android:background="@android:color/transparent"
-            android:layout_gravity="top|right"
-            android:layout_height="wrap_content"
-            android:layout_width="wrap_content"
-            android:onClick="onOverlayButtonPressed"
-            android:src="@android:drawable/ic_menu_more"/>
-</FrameLayout>
diff --git a/remoting/resources/android/layout/host.xml b/remoting/resources/android/layout/host.xml
deleted file mode 100644
index 1a37741..0000000
--- a/remoting/resources/android/layout/host.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!-- 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.
--->
-
-<TextView xmlns:android="http://schemas.android.com/apk/res/android"
-        android:background="@drawable/list_item_selector"
-        android:drawablePadding="16sp"
-        android:gravity="center_vertical"
-        android:id="@+id/host_label"
-        android:layout_height="wrap_content"
-        android:layout_width="match_parent"
-        android:paddingBottom="20sp"
-        android:paddingLeft="16sp"
-        android:paddingRight="16sp"
-        android:paddingTop="20sp"
-        style="@android:style/TextAppearance.Holo.Medium"/>
diff --git a/remoting/resources/icon_help.webp b/remoting/resources/icon_help.webp
new file mode 100644
index 0000000..9a98d48
--- /dev/null
+++ b/remoting/resources/icon_help.webp
Binary files differ
diff --git a/remoting/resources/remoting_strings.grd b/remoting/resources/remoting_strings.grd
index 3c41b2b..35367d1 100644
--- a/remoting/resources/remoting_strings.grd
+++ b/remoting/resources/remoting_strings.grd
@@ -500,9 +500,6 @@
       <message desc="Column header in the connection history table showing the email address of the client end of the connection (the initiator) which may be this or another computer." name="IDS_CONNECTION_FROM_HEADER">
         From
       </message>
-      <message desc="Label for the connection history button. Clicking this button opens a dialog showing recent connections." name="IDS_CONNECTION_HISTORY_BUTTON">
-        Connection history
-      </message>
       <message desc="Title for the connection history dialog. This dialog shows recent connections made to and from this computer" name="IDS_CONNECTION_HISTORY_TITLE">
         Connection History
       </message>
diff --git a/remoting/resources/remoting_strings_iw.xtb b/remoting/resources/remoting_strings_iw.xtb
index a0af384..691b114 100644
--- a/remoting/resources/remoting_strings_iw.xtb
+++ b/remoting/resources/remoting_strings_iw.xtb
@@ -1,114 +1,218 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="iw">
-<translation id="4176825807642096119">קוד גישה</translation>
-<translation id="8355326866731426344">תוקפו של קוד גישה זה יפוג בעוד <ph name="TIMEOUT"/></translation>
-<translation id="4068946408131579958">כל החיבורים</translation>
-<translation id="5601503069213153581">PIN</translation>
-<translation id="3362124771485993931">הקלד מחדש PIN</translation>
-<translation id="7658239707568436148">ביטול</translation>
-<translation id="6746493157771801606">נקה היסטוריה</translation>
-<translation id="6040143037577758943">סגור</translation>
-<translation id="5254120496627797685">יציאה מדף זה תסיים את הפעלת 'שולחן העבודה המרוחק של Chrome'.</translation>
-<translation id="5308380583665731573">התחבר</translation>
-<translation id="6985691951107243942">האם אתה בטוח שברצונך להשבית חיבורים מרוחקים אל <ph name="HOSTNAME"/>? אם תשנה את דעתך, תצטרך לבקר במחשב זה כדי להפעיל מחדש את החיבורים.</translation>
-<translation id="6748108480210050150">מאת</translation>
-<translation id="5714695932513333758">היסטוריית חיבורים</translation>
-<translation id="4736223761657662401">היסטוריית חיבורים</translation>
-<translation id="6998989275928107238">אל</translation>
-<translation id="2359808026110333948">המשך</translation>
-<translation id="2919669478609886916">אתה משתף כעת את המחשב הזה עם משתמש אחר. האם ברצונך להמשיך לשתף?</translation>
-<translation id="173559734173571936">כדי להשתמש ב'שולחן העבודה המרוחק של Chrome', עליך להעניק הרשאות גישה מורחבות למחשב שלך. יהיה עליך לעשות זאת פעם אחת בלבד.</translation>
-<translation id="1023096696228309145">בקש מהמשתמש שאל המחשב שלו ברצונך לגשת ללחוץ על 'שתף עכשיו' ולתת לך את קוד הגישה.</translation>
-<translation id="5379087427956679853">'שולחן העבודה המרוחק של Chrome' מאפשר לך לשתף את המחשב שלך באופן מאובטח דרך האינטרנט. על שני המשתמשים להפעיל את יישום 'שולחן העבודה המרוחק של Chrome', שניתן למצוא בכתובת <ph name="URL"/>.</translation>
-<translation id="4394049700291259645">השבת</translation>
-<translation id="4314644002001494905">התנתק (Ctrl+Alt+Esc)</translation>
-<translation id="8342538585421421741">התנתק (Opt+Ctrl+Esc)</translation>
-
-<translation id="4804818685124855865">ניתוק</translation>
-
-<translation id="6930242544192836755">משך הזמן</translation>
-<translation id="8172070902751707422">האימות נכשל. היכנס שוב לשולחן העבודה המרוחק של Chrome.</translation>
-<translation id="2707879711568641861">חלק מהרכיבים הדרושים עבור 'שולחן העבודה המרוחק של Chrome' חסרים. ודא שהתקנת את הגירסה האחרונה ונסה שוב.</translation>
-<translation id="2813770873348017932">החיבורים למחשב המרוחק נחסמים באופן זמני משום שמישהו ניסה להתחבר אליו עם PIN לא חוקי. נסה שוב מאוחר יותר.</translation>
-<translation id="3106379468611574572">המחשב המרוחק אינו מגיב לבקשות החיבור. ודא שהוא מחובר לאינטרנט ונסה שוב.</translation>
-<translation id="851521648418609391">המערכת זיהתה גירסה לא תואמת של 'שולחן העבודה המרוחק של Chrome'. ודא שהגרסה האחרונה של Google Chrome ושל 'שולחן העבודה המרוחק של Chrome' מותקנת בשני המחשבים ונסה שוב.</translation>
-<translation id="4277736576214464567">קוד הגישה אינו חוקי. נסה שוב.</translation>
-<translation id="2208514473086078157">הגדרות המדיניות לא מאפשרות שיתוף של מחשב זה כמארח שולחן עבודה מרוחק של Chrome. פנה למנהל המערכת שלך לקבלת סיוע.</translation>
-<translation id="2366718077645204424">לא ניתן להשיג את המארח. כנראה בשל תצורת הרשת שבה אתה משתמש.</translation>
-<translation id="7729639150174291243">לא נכנסת לשולחן העבודה המרוחק של Chrome. היכנס ונסה שוב.</translation>
-<translation id="4019628723432694459">חלק מהרכיבים הדרושים עבור 'שולחן העבודה המרוחק של Chrome' חסרים.  ודא שאתה משתמש בגירסה האחרונה של Google Chrome ונסה שוב.</translation>
-<translation id="2805036638902441020">השרת לא הצליח להגיב לבקשת הרשת.</translation>
-<translation id="5593560073513909978">השירות אינו זמין זמנית. נסה שוב מאוחר יותר.</translation>
-<translation id="1546934824884762070">אירעה שגיאה לא צפויה. דווח על בעיה זו למפתחים.</translation>
-<translation id="1742469581923031760">מתחבר…</translation>
-<translation id="4913529628896049296">ממתין לחיבור...</translation>
-<translation id="8525306231823319788">מסך מלא</translation>
-<translation id="4472575034687746823">התחל בעבודה</translation>
-<translation id="7649070708921625228">עזרה</translation>
-<translation id="4572065712096155137">גישה</translation>
-<translation id="1342297293546459414">הצג תוכן של מחשב משותף ושלוט בו</translation>
-<translation id="3258789396564295715">תוכל לגשת למחשב זה בצורה מאובטחת באמצעות שולחן עבודה מרוחק של Chrome.</translation>
-<translation id="6198252989419008588">שנה PIN</translation>
-<translation id="1199593201721843963">השבת חיבורים מרוחקים</translation>
 <translation id="7606912958770842224">הפעל חיבורים מרוחקים</translation>
-<translation id="4006787130661126000">עליך להפעיל חיבורים מרוחקים על מנת להשתמש בשולחן עבודה מרוחק של Chrome כדי לגשת למחשב.</translation>
-<translation id="4361728918881830843">כדי להפעיל חיבורים מרחוק למחשב אחר, התקן את 'שולחן עבודה מרוחק של Chrome' במחשב האחר ולחץ על &quot;<ph name="BUTTON_NAME"/>&quot;.</translation>
-<translation id="174018511426417793">אין לך מחשבים רשומים. כדי להפעיל חיבורים מרחוק למחשב, התקן את 'שולחן עבודה מרוחק של Chrome' במחשב ולחץ על &quot;<ph name="BUTTON_NAME"/>&quot;.</translation>
-<translation id="2499160551253595098">עזור לנו לשפר את שולחן העבודה המרוחק של Chrome בכך שתאפשר לנו לאסוף סטטיסטיקת שימוש ודוחות קריסה.</translation>
-<translation id="4156740505453712750">כדי להגן על הגישה למחשב זה, בחר PIN בן <ph name="BOLD_START"/>שש ספרות לפחות<ph name="BOLD_END"/>. PIN זה יידרש בעת התחברות ממיקום אחר.</translation>
-<translation id="154040539590487450">נכשלה הפעלת שירות גישה מרחוק.</translation>
-<translation id="2013884659108657024">Chrome מוריד את מתקין המארח של שולחן עבודה מרוחק של Chrome. לאחר סיום ההורדה, הפעל את המתקין לפני שתמשיך.</translation>
-<translation id="4207623512727273241">הפעל את המתקין לפני שתמשיך.</translation>
-<translation id="170207782578677537">הרישום של מחשב זה נכשל.</translation>
-<translation id="2089514346391228378">הופעלו חיבורים מרוחקים עבור מחשב זה.</translation>
-<translation id="7782471917492991422">בדוק את הגדרות ניהול צריכת החשמל של המחשב כדי לוודא שהוא לא מוגדר לעבור למצב שינה בזמן חוסר פעילות.</translation>
-<translation id="1654128982815600832">מפעיל חיבורים מרוחקים עבור מחשב זה...</translation>
-<translation id="2926340305933667314">נכשל הנסיון להשבית גישה מרחוק למחשב זה. נסה שוב מאוחר יותר.</translation>
-<translation id="7672203038394118626">הושבתו חיבורים מרוחקים עבור מחשב זה.</translation>
-<translation id="1841799852846221389">משבית חיבורים מרוחקים עבור מחשב זה...</translation>
-<translation id="6668065415969892472">ה-PIN שלך עודכן.</translation>
-<translation id="652218476070540101">ה-PIN עבור מחשב זה מתעדכן...</translation>
-<translation id="3020807351229499221">נכשל הנסיון לעדכן את ה-PIN. נסה שוב מאוחר יותר.</translation>
-<translation id="6527303717912515753">שתף</translation>
-<translation id="2235518894410572517">שתף מחשב זה ואפשר למשתמש אחר להציג את התוכן שלו ולשלוט בו.</translation>
-<translation id="5265129178187621741">(תכונה זו אינה זמינה עדיין עבור מחשבי Chromebook ... המשך לעקוב)</translation>
-<translation id="5619148062500147964">למחשב זה</translation>
-<translation id="9149992051684092333">כדי להתחיל בשיתוף שולחן העבודה שלך, תן את קוד הגישה המופיע בהמשך לאדם שיסייע לך.</translation>
-<translation id="2851674870054673688">לאחר שהמשתמש יזין את הקוד, פעילות השיתוף שלכם תתחיל.</translation>
-<translation id="7215059001581613786">הזן PIN המורכב משש ספרות או יותר.</translation>
-<translation id="8178433417677596899">שיתוף מסך משתמש-למשתמש, מושלם עבור תמיכה טכנית מרחוק.</translation>
-<translation id="5702987232842159181">מחובר:</translation>
-<translation id="811307782653349804">גישה למחשב שלך מכל מקום.</translation>
-<translation id="4430915108080446161">יוצר קוד גישה...</translation>
-<translation id="3776024066357219166">הפעלת 'שולחן העבודה המרוחק של Chrome' הסתיימה.</translation>
-<translation id="5708869785009007625">שולחן העבודה שלך משותף כרגע עם <ph name="USER"/>.</translation>
-<translation id="9188433529406846933">תן הרשאה</translation>
-<translation id="701976023053394610">סיוע מרחוק</translation>
-<translation id="809687642899217504">המחשבים שלי</translation>
-<translation id="6965382102122355670">אישור</translation>
-<translation id="5064360042339518108"><ph name="HOSTNAME"/> (מנותק)</translation>
-<translation id="4686372254213217147">גודל מקורי</translation>
-<translation id="837021510621780684">ממחשב זה</translation>
-
-<translation id="4808503597364150972">הזן PIN עבור <ph name="HOSTNAME"/>.</translation>
-<translation id="5156271271724754543">הזן את אותו PIN בשתי התיבות.</translation>
-<translation id="5625493749705183369">גש למחשבים אחרים או אפשר למשתמש אחר לגשת למחשב שלך באופן מאובטח דרך האינטרנט.</translation>
-<translation id="7401733114166276557">שולחן העבודה המרוחק של Chrome</translation>
-<translation id="579702532610384533">התחבר מחדש</translation>
-<translation id="7144878232160441200">נסה שוב</translation>
-<translation id="7948001860594368197">אפשרויות מסך</translation>
-<translation id="6146986332407778716">Ctrl-Alt-Del</translation>
-<translation id="6091564239975589852">שלח מקשים</translation>
-<translation id="1369030621715708553">PrtScn</translation>
-<translation id="3908017899227008678">הקטן להתאמה</translation>
-<translation id="3950820424414687140">היכנס</translation>
-<translation id="5222676887888702881">יציאה</translation>
-<translation id="7319983568955948908">הפסק את השיתוף</translation>
-<translation id="2841013758207633010">זמן התחברות</translation>
-<translation id="6193698048504518729">התחבר אל <ph name="HOSTNAME"/></translation>
-<translation id="4430435636878359009">השבת חיבורים מרוחקים עבור מחשב זה</translation>
-<translation id="332624996707057614">ערוך את שם המחשב</translation>
-<translation id="409800995205263688">הערה: הגדרות המדיניות מתירות חיבורים רק בין מחשבים בתוך הרשת שלך.</translation>
+<translation id="3785447812627779171">‏מארח
+Chromoting</translation>
+<translation id="1841799852846221389">משבית חיבורים מרוחקים למחשב זה...</translation>
+<translation id="2676780859508944670">עובד…</translation>
 <translation id="5843054235973879827">מדוע פעולה זו בטוחה?</translation>
-</translationbundle>
+<translation id="5619148062500147964">למחשב זה</translation>
+<translation id="4068946408131579958">כל החיבורים</translation>
+<translation id="2208514473086078157">‏הגדרות המדיניות אינן מאפשרות שיתוף של מחשב זה כמארח שולחן עבודה מרוחק של Chrome. פנה למנהל המערכת שלך לקבלת סיוע.</translation>
+<translation id="2801119484858626560">‏המערכת זיהתה גירסה לא תואמת של 'שולחן עבודה מרוחק של Chrome'. ודא שבשני המחשבים מותקנת הגירסה העדכנית ביותר של Google Chrome ושל 'שולחן עבודה מרוחק של Chrome' ונסה שוב.</translation>
+<translation id="6998989275928107238">אל</translation>
+<translation id="406849768426631008">‏רוצה לעזור למישהו תוך כדי שאתה גם מקיים אתו שיחת וידאו צ'אט? נסה את <ph name="LINK_BEGIN"/> שולחן העבודה המרוחק ב-Google Hangouts‏<ph name="LINK_END"/>.</translation>
+<translation id="5397086374758643919">‏מסיר ההתקנה של מארח שולחן העבודה המרוחק של Chrome‏</translation>
+<translation id="3258789396564295715">‏תוכל לגשת למחשב זה באופן מאובטח באמצעות 'שולחן עבודה מרוחק של Chrome'.</translation>
+<translation id="5070121137485264635">‏המארח המרוחק דורש שתבצע אימות מול אתר של צד שלישי. כדי להמשיך, עליך להעניק לשולחן העבודה המרוחק של Chrome הרשאות נוספות כדי לגשת לכתובת זו:</translation>
+<translation id="2124408767156847088">‏גש למחשבים שלך באופן מאובטח ממכשיר Android שלך.</translation>
+<translation id="4808503597364150972">‏הזן את ה-PIN של <ph name="HOSTNAME"/>.</translation>
+<translation id="7672203038394118626">חיבורים מרוחקים למחשב זה הושבתו.</translation>
+<translation id="8244400547700556338">למד כיצד.</translation>
+<translation id="4368630973089289038">‏רוצה לעזור לשפר את Chromoting‏? <ph name="LINK_BEGIN"/>השב על הסקר.<ph name="LINK_END"/></translation>
+<translation id="332624996707057614">ערוך את שם המחשב</translation>
+<translation id="1996161829609978754">‏Chrome מוריד את מתקין המארח של Chromoting. בסיום ההורדה, הפעל את המתקין לפני שתמשיך.</translation>
+<translation id="2046651113449445291">‏הלקוחות הבאים הותאמו למחשב זה ויכולים להתחבר מבלי לספק PIN. ניתן לבטל הרשאה זו בכל עת, בנפרד או עבור כל הלקוחות.</translation>
+<translation id="7658239707568436148">ביטול</translation>
+<translation id="7782471917492991422">בדוק את הגדרות ניהול צריכת החשמל של המחשב כדי לוודא שאינו מוגדר לעבור למצב שינה בזמן חוסר פעילות.</translation>
+<translation id="7665369617277396874">הוסף חשבון</translation>
+<translation id="2707879711568641861">‏חלק מהרכיבים הדרושים עבור 'שולחן עבודה מרוחק של Chrome' חסרים. ודא שהתקנת את הגירסה העדכנית ביותר ונסה שוב.</translation>
+<translation id="2499160551253595098">‏עזור לנו לשפר את 'שולחן עבודה מרוחק של Chrome' בכך שתאפשר לנו לאסוף סטטיסטיקות שימוש ודוחות קריסה.</translation>
+<translation id="7868137160098754906">‏הזן את מספר ה-PIN עבור המחשב המרוחק.</translation>
+<translation id="677755392401385740">המארח הופעל עבור המשתמש: <ph name="HOST_USERNAME"/>.</translation>
+<translation id="8864965950780407789">‏כדי להשתמש ב-Chromoting, עליך להעניק הרשאות גישה מורחבות למחשב שלך. יהיה עליך לעשות זאת פעם אחת בלבד.</translation>
+<translation id="3197730452537982411">שולחן עבודה מרוחק</translation>
+<translation id="8355326866731426344">התוקף של קוד גישה זה יפוג ב-<ph name="TIMEOUT"/></translation>
+<translation id="985602178874221306">‏מחברי Chromium</translation>
+<translation id="2498359688066513246">עזרה ומשוב</translation>
+<translation id="6198252989419008588">‏שנה PIN</translation>
+<translation id="170207782578677537">הרישום של מחשב זה נכשל.</translation>
+<translation id="4804818685124855865">נתק</translation>
+<translation id="5708869785009007625">שולחן העבודה שלך משותף כעת עם <ph name="USER"/>.</translation>
+<translation id="5601503069213153581">PIN</translation>
+<translation id="5222676887888702881">יציאה</translation>
+<translation id="6304318647555713317">לקוח</translation>
+<translation id="5064360042339518108"><ph name="HOSTNAME"/> (לא מקוון)</translation>
+<translation id="4472575034687746823">תחילת העבודה</translation>
+<translation id="2813770873348017932">‏החיבורים למחשב המרוחק חסומים באופן זמני משום שמישהו ניסה להתחבר אליו עם PIN לא חוקי. נסה שוב מאוחר יותר.</translation>
+<translation id="6746493157771801606">נקה היסטוריה</translation>
+<translation id="4430435636878359009">השבת חיבורים מרוחקים למחשב זה</translation>
+<translation id="6001953797859482435">‏העדפות מארח שולחן העבודה המרוחק של Chrome</translation>
+<translation id="9188433529406846933">מתן הרשאה</translation>
+<translation id="228809120910082333">‏אשר את החשבון ומספר ה-PIN שלך שמפורטים למטה, כדי לאפשר גישה באמצעות Chromoting.</translation>
+<translation id="7605995381616883502">חיבור חדש</translation>
+<translation id="5826423541626112308">‏מארח שולחן העבודה המרוחק של Chrome</translation>
+<translation id="2851674870054673688">לאחר שהמשתמש יזין את הקוד, השיתוף יתחיל לפעול.</translation>
+<translation id="5593560073513909978">באופן זמני, השירות אינו זמין. נסה שוב מאוחר יותר.</translation>
+<translation id="3908017899227008678">הקטן להתאמה</translation>
+<translation id="8073845705237259513">‏כדי להשתמש ב'שולחן עבודה מרוחק של Chrome', עליך להוסיף חשבון Google למכשיר שלך.</translation>
+<translation id="1199593201721843963">השבת חיבורים מרוחקים</translation>
+<translation id="5379087427956679853">‏'שולחן עבודה מרוחק של Chrome' מאפשר לך לשתף את המחשב שלך דרך האינטרנט באופן מאובטח. על שני המשתמשים להפעיל את היישום 'שולחן עבודה מרוחק של Chrome', שניתן למצוא בכתובת <ph name="URL"/>.</translation>
+<translation id="1409991159633941777">‏חלק מהרכיבים הדרושים עבור 'שולחן עבודה מרוחק של Chrome' חסרים.  ודא שאתה משתמש בגירסה העדכנית ביותר של Chrome ונסה שוב.</translation>
+<translation id="174018511426417793">‏אין לך מחשבים רשומים. כדי להפעיל חיבורים מרוחקים למחשב, התקן את 'שולחן עבודה מרוחק של Chrome' במחשב היעד ולחץ על '<ph name="BUTTON_NAME"/>'.</translation>
+<translation id="9126115402994542723">‏אל תבקש שוב PIN בעת התחברות למארח הזה ממכשיר זה.</translation>
+<translation id="253387295088602549">אפשר למשתמש אחר לגשת למחשב שלך דרך האינטרנט באופן מאובטח.</translation>
+<translation id="1300633907480909701">‏גש למחשבים שלך באופן מאובטח ממכשיר Android שלך.
+
+• בכל אחד מהמחשבים שלך, הגדר גישה מרחוק באמצעות אפליקציית שולחן העבודה המרוחק של Chrome, שבחנות האינטרנט של Chrome‏: https://chrome.google.com/remotedesktop
+• במכשיר Android, פתח את האפליקציה והקש על מחשב הנמצא במצב מקוון כדי להתחבר אליו.
+
+מחשבים מרוחקים שאין להם מקלדות עבור אנגלית של ארה&quot;ב עשויים לקבל קלט טקסט שגוי. בקרוב נוסיף תמיכה לפריסות מקלדת נוספות!
+
+למידע על פרטיות, עדיין במדיניות הפרטיות של Google ‏(http://goo.gl/SyrVzj) ומדיניות הפרטיות של Chrome ‏(http://goo.gl/0uXE5d).</translation>
+<translation id="629730747756840877">חשבון</translation>
+<translation id="8525306231823319788">מסך מלא</translation>
+<translation id="6204583485351780592"><ph name="HOSTNAME"/> (לא עדכני)</translation>
+<translation id="3884839335308961732">‏אשר את החשבון ומספר ה-PIN שלך שמפורטים למטה כדי לאפשר גישה באמצעות שולחן העבודה המרוחק של Chrome.</translation>
+<translation id="327263477022142889">‏רוצה לעזור לשפר את שולחן העבודה המרוחק של Chrome‏? <ph name="LINK_BEGIN"/>השב על הסקר.<ph name="LINK_END"/></translation>
+<translation id="5702987232842159181">מחובר:</translation>
+<translation id="8509907436388546015">תהליך השילוב של שולחנות עבודה</translation>
+<translation id="4736223761657662401">היסטוריית חיבורים</translation>
+<translation id="5285241842433869526">למד כיצד להגדיר מחשב לגישה מרחוק.</translation>
+<translation id="4430915108080446161">יוצר קוד גישה...</translation>
+<translation id="2013996867038862849">כל הלקוחות המותאמים נמחקו.</translation>
+<translation id="7081428606750359611">‏מארח Chromoting</translation>
+<translation id="8228265668171617545">‏זוהתה גירסה לא תואמת של Chromoting. ודא שאתה משתמש בגירסה העדכנית ביותר של Chrome ושל Chromoting בשני המחשבים ונסה שוב.</translation>
+<translation id="6985691951107243942">האם אתה בטוח שברצונך להשבית את החיבורים המרוחקים אל <ph name="HOSTNAME"/>? אם תשנה את דעתך, יהיה עליך להיכנס למחשב זה כדי להפעיל מחדש את החיבורים.</translation>
+<translation id="1436054138039008644"><ph name="HOSTNAME"/> (מועד אחרון במצב מקוון <ph name="DATE"/>)</translation>
+<translation id="9149992051684092333">כדי להתחיל לשתף את שולחן העבודה שלך, תן את קוד הגישה שלמטה לאדם שיסייע לך.</translation>
+<translation id="409800995205263688">הערה: הגדרות המדיניות מתירות חיבורים רק בין מחשבים הנמצאים בתוך הרשת שלך.</translation>
+<translation id="8513093439376855948">מארח העברת הודעות ייעודי עבור ניהול אירוח מרחוק</translation>
+<translation id="2353140552984634198">‏תוכל לגשת למחשב זה באופן מאובטח באמצעות Chromoting.</translation>
+<translation id="4481276415609939789">‏אין לך מחשבים רשומים. כדי להפעיל חיבורים מרוחקים למחשב, התקן את Chromoting במחשב היעד ולחץ על '<ph name="BUTTON_NAME"/>'.</translation>
+<translation id="2013884659108657024">‏Chrome מוריד את מתקין המארח של 'שולחן עבודה מרוחק של Chrome'. בסיום ההורדה, הפעל את המתקין לפני שתמשיך.</translation>
+<translation id="1742469581923031760">מתחבר…</translation>
+<translation id="8998327464021325874">‏בקר מארח שולחן העבודה המרוחק של Chrome</translation>
+<translation id="6748108480210050150">מ-</translation>
+<translation id="3950820424414687140">כניסה</translation>
+<translation id="1291443878853470558">‏אם ברצונך להשתמש ב-Chromoting כדי לגשת למחשב זה, עליך להפעיל חיבורים מרוחקים.</translation>
+<translation id="2599300881200251572">‏שירות זה מאפשר חיבורים נכנסים מלקוחות שולחן העבודה המרוחק של Chrome.</translation>
+<translation id="6091564239975589852">שלח מקשים</translation>
+<translation id="4572065712096155137">גישה</translation>
+<translation id="5908809458024685848">‏לא נכנסת ל-Chromoting. היכנס ונסה שוב.</translation>
+<translation id="7401733114166276557">‏שולחן עבודה מרוחק של Chrome</translation>
+<translation id="3362124771485993931">‏הקלד שוב את ה-PIN</translation>
+<translation id="154040539590487450">הפעלת שירות הגישה מרחוק נכשלה.</translation>
+<translation id="7948001860594368197">אפשרויות מסך</translation>
+<translation id="8172070902751707422">‏האימות נכשל. היכנס שוב ל'שולחן עבודה מרוחק של Chrome'.</translation>
+<translation id="6146986332407778716">Ctrl-Alt-Del</translation>
+<translation id="5254120496627797685">‏יציאה מדף זה תגרום לסיום הפעילות של 'שולחן עבודה מרוחק של Chrome'.</translation>
+<translation id="173559734173571936">‏כדי להשתמש ב'שולחן עבודה מרוחק של Chrome', עליך להעניק הרשאות גישה מורחבות למחשב שלך. יהיה עליך לעשות זאת פעם אחת בלבד.</translation>
+<translation id="9032136467203159543">‏חלק מהרכיבים הדרושים עבור Chromoting חסרים. ודא שהתקנת את הגירסה העדכנית ביותר ונסה שוב.</translation>
+<translation id="1342297293546459414">הצג תוכן של מחשב משותף ושלוט בו.</translation>
+<translation id="1520828917794284345">שנה את גודל שולחן העבודה</translation>
+<translation id="701976023053394610">סיוע מרחוק</translation>
+<translation id="6099500228377758828">‏שירות שולחן העבודה המרוחק של Chrome</translation>
+<translation id="2747641796667576127">עדכוני תוכנה מתבצעים בדרך כלל באופן אוטומטי, אבל במקרים נדירים הם עשויים להיכשל. עדכון התוכנה לא אמור לקחת יותר ממספר דקות, וניתן לבצע אותו כשאתה מחובר למחשב באופן מרוחק.</translation>
+<translation id="3933246213702324812">‏Chromoting ב-<ph name="HOSTNAME"/> אינו מעודכן ויש לעדכן אותו.</translation>
+<translation id="6193698048504518729">התחבר אל <ph name="HOSTNAME"/></translation>
+<translation id="8116630183974937060">אירעה שגיאת רשת. בדוק שהמכשיר מקוון ונסה שוב.</translation>
+<translation id="3020807351229499221">‏הניסיון לעדכן את ה-PIN נכשל. נסה שוב מאוחר יותר.</translation>
+<translation id="2647232381348739934">‏שירות Chromoting</translation>
+<translation id="579702532610384533">התחבר מחדש</translation>
+<translation id="4211066471404647515">‏חלק מהרכיבים הדרושים עבור Chromoting חסרים. ודא שאתה משתמש בגירסה העדכנית ביותר של Chrome ונסה שוב.</translation>
+<translation id="5773590752998175013">תאריך ההתאמה</translation>
+<translation id="5265129178187621741">‏(תכונה זו עדיין אינה זמינה למחשבי Chromebook ... המשך לעקוב)</translation>
+<translation id="5156271271724754543">‏הזן את אותו PIN בשתי התיבות.</translation>
+<translation id="2118549242412205620">‏גש למחשבים שלך באופן מאובטח ממכשיר Android שלך.
+
+• בכל אחד מהמחשבים שלך, הגדר גישה מרחוק באמצעות אפליקציית שולחן העבודה המרוחק של Chrome, שבחנות האינטרנט של Chrome‏: https://chrome.google.com/remotedesktop
+• במכשיר Android, פתח את האפליקציה והקש על מחשב הנמצא במצב מקוון כדי להתחבר אליו.
+
+למידע על פרטיות, עדיין במדיניות הפרטיות של Google ‏(http://goo.gl/SyrVzj) ומדיניות הפרטיות של Chrome ‏(http://goo.gl/0uXE5d).</translation>
+<translation id="4361728918881830843">‏כדי להפעיל חיבורים מרחוק למחשב אחר, התקן את 'שולחן עבודה מרוחק של Chrome' במחשב האחר ולחץ על '<ph name="BUTTON_NAME"/>'.</translation>
+<translation id="7444276978508498879">לקוח שהתחבר: <ph name="CLIENT_USERNAME"/>.</translation>
+<translation id="4913529628896049296">ממתין לחיבור...</translation>
+<translation id="5714695932513333758">היסטוריית חיבורים</translation>
+<translation id="811307782653349804">גש למחשב שלך מכל מקום.</translation>
+<translation id="2939145106548231838">אמת מול המארח</translation>
+<translation id="2366718077645204424">לא ניתן להשיג את המארח. הסיבה לכך יכולה להיות תצורת הרשת שבה אתה משתמש.</translation>
+<translation id="3776024066357219166">‏הפעילות של 'שולחן עבודה מרוחק של Chrome' הסתיימה.</translation>
+<translation id="5625493749705183369">גש למחשבים אחרים או אפשר למשתמש אחר לגשת למחשב שלך דרך האינטרנט באופן מאובטח.</translation>
+<translation id="2512228156274966424">‏שים לב: על מנת לוודא שכל מקשי הקיצור זמינים, ניתן להגדיר את שולחן העבודה המרוחק של Chrome ל'פתח כחלון'.</translation>
+<translation id="2699970397166997657">Chromoting</translation>
+<translation id="4812684235631257312">מארח</translation>
+<translation id="6178645564515549384">מארח העברת הודעות ייעודי עבור סיוע מרוחק</translation>
+<translation id="897805526397249209">‏כדי להפעיל חיבורים מרוחקים למחשב אחר, התקן את Chromoting במחשב האחר ולחץ על '<ph name="BUTTON_NAME"/>'.</translation>
+<translation id="1704090719919187045">‏העדפות מארח Chromoting</translation>
+<translation id="809687642899217504">המחשבים שלי</translation>
+<translation id="3106379468611574572">המחשב המרוחק אינו מגיב לבקשות החיבור. ודא שהוא מחובר לאינטרנט ונסה שוב.</translation>
+<translation id="2359808026110333948">המשך</translation>
+<translation id="2078880767960296260">תהליך מארח</translation>
+<translation id="1643640058022401035">‏יציאה מדף זה תגרום לסיום ההפעלה של Chromoting.</translation>
+<translation id="8261506727792406068">מחק</translation>
+<translation id="2235518894410572517">שתף מחשב זה ואפשר למשתמש אחר להציג את התוכן שלו ולשלוט בו.</translation>
+<translation id="6939719207673461467">הצג/הסתר מקלדת.</translation>
+<translation id="1023096696228309145">בקש מהמשתמש שברצונך לגשת אל המחשב שלו שילחץ על 'שתף עכשיו' וייתן לך את קוד הגישה.</translation>
+<translation id="4240294130679914010">‏מסיר ההתקנה של מארח Chromoting</translation>
+<translation id="80739703311984697">‏המארח המרוחק דורש שתבצע אימות מול אתר של צד שלישי. כדי להמשיך, עליך להעניק ל-Chromoting הרשאות נוספות כדי לגשת לכתובת זו:</translation>
+<translation id="4006787130661126000">‏אם ברצונך להשתמש ב'שולחן עבודה מרוחק של Chrome' כדי לגשת למחשב זה, עליך להפעיל חיבורים מרוחקים.</translation>
+<translation id="177096447311351977">‏IP הערוץ של הלקוח: <ph name="CLIENT_GAIA_IDENTIFIER"/> ip='<ph name="CLIENT_IP_ADDRESS_AND_PORT"/>' host_ip='<ph name="HOST_IP_ADDRESS_AND_PORT"/>' ערוץ='<ph name="CHANNEL_TYPE"/>' חיבור='<ph name="CONNECTION_TYPE"/>'.</translation>
+<translation id="6930242544192836755">משך החיבור</translation>
+<translation id="6527303717912515753">שתף</translation>
+<translation id="2926340305933667314">הניסיון להשבית גישה מרחוק למחשב זה נכשל. נסה שוב מאוחר יותר.</translation>
+<translation id="6865175692670882333">הצג/ערוך</translation>
+<translation id="5859141382851488196">חלון חדש…</translation>
+<translation id="2089514346391228378">הופעלו חיבורים מרוחקים למחשב זה.</translation>
+<translation id="7693372326588366043">רענן את רשימת המארחים</translation>
+<translation id="8445362773033888690">‏הצג בחנות Google Play</translation>
+<translation id="8246880134154544773">‏האימות נכשל. היכנס שוב ל-Chromoting.</translation>
+<translation id="1654128982815600832">מפעיל חיבורים מרוחקים למחשב זה...</translation>
+<translation id="8187079423890319756">‏Copyright 2013 The Chromium Authors. כל הזכויות שמורות.</translation>
+<translation id="7038683108611689168">‏עזור לנו לשפר את Chromoting בכך שתאפשר לנו לאסוף סטטיסטיקות שימוש ודוחות קריסה.</translation>
+<translation id="6040143037577758943">סגור</translation>
+<translation id="4405930547258349619">ספריית ליבה</translation>
+<translation id="310979712355504754">מחק הכל</translation>
+<translation id="7649070708921625228">עזרה</translation>
+<translation id="3581045510967524389">לא ניתן היה להתחבר לרשת. בדוק שהמכשיר שלך מקוון.</translation>
+<translation id="4517233780764084060">‏שים לב: על מנת לוודא שכל מקשי הקיצור זמינים, ניתן להגדיר את Chromoting ל'פתח כחלון'.</translation>
+<translation id="4176825807642096119">קוד גישה</translation>
+<translation id="7144878232160441200">נסה שוב</translation>
+<translation id="4573676252416618192">‏מארח שולחן העבודה
+המרוחק של Chrome</translation>
+<translation id="4703799847237267011">‏הפעילות של Chromoting הסתיימה.</translation>
+<translation id="1369030621715708553">PrtScn</translation>
+<translation id="8178433417677596899">שיתוף מסך ממשתמש למשתמש, הפתרון המושלם לתמיכה טכנית מרחוק.</translation>
+<translation id="652218476070540101">‏ה-PIN של מחשב זה מתעדכן...</translation>
+<translation id="4563926062592110512">לקוח שהתנתק: <ph name="CLIENT_USERNAME"/>.</translation>
+<translation id="5308380583665731573">התחבר</translation>
+<translation id="7319983568955948908">הפסק את השיתוף</translation>
+<translation id="6681800064886881394">‏Copyright © 2013 Google Inc.‎. כל הזכויות שמורות.</translation>
+<translation id="8038108135592087998">‏הגרסה הראשונה של שולחן העבודה המרוחק של Chrome עבור Android.</translation>
+<translation id="6668065415969892472">‏ה-PIN שלך עודכן.</translation>
+<translation id="4513946894732546136">משוב</translation>
+<translation id="4277736576214464567">קוד הגישה אינו חוקי. נסה שוב.</translation>
+<translation id="979100198331752041">‏שולחן העבודה המרוחק של Chrome ב-<ph name="HOSTNAME"/> אינו מעודכן ויש לעדכן אותו.</translation>
+<translation id="7729639150174291243">‏לא נכנסת ל'שולחן עבודה מרוחק של Chrome'. היכנס ונסה שוב.</translation>
+<translation id="2841013758207633010">שעה</translation>
+<translation id="6011539954251327702">‏Chromoting מאפשר לך לשתף את המחשב שלך דרך האינטרנט באופן מאובטח. על שני המשתמשים להפעיל את היישום Chromoting, שניתן למצוא בכתובת <ph name="URL"/>.</translation>
+<translation id="2919669478609886916">אתה משתף כעת את המחשב הזה עם משתמש אחר. האם ברצונך להמשיך את השיתוף?</translation>
+<translation id="4207623512727273241">הפעל את המתקין לפני שתמשיך.</translation>
+<translation id="3596628256176442606">‏שירות זה מאפשר חיבורים נכנסים מלקוחות Chromoting.</translation>
+<translation id="4277463233460010382">‏מחשב זה מוגדר לאפשר ללקוח אחד או יותר להתחבר מבלי להזין PIN.</translation>
+<translation id="837021510621780684">ממחשב זה</translation>
+<translation id="3870154837782082782">Google Inc.</translation>
+<translation id="7215059001581613786">‏הזן PIN המורכב משש ספרות או יותר.</translation>
+<translation id="8383794970363966105">‏כדי להשתמש ב-Chromoting, עליך להוסיף חשבון Google למכשיר שלך.</translation>
+<translation id="1546934824884762070">אירעה שגיאה לא צפויה. דווח על בעיה זו למפתחים.</translation>
+<translation id="6965382102122355670">אישור</translation>
+<translation id="7434397035092923453">נדחתה גישה עבור לקוח: <ph name="CLIENT_USERNAME"/>.</translation>
+<translation id="3403830762023901068">‏הגדרות המדיניות אינן מאפשרות שיתוף של מחשב זה כמארח Chromoting. פנה למנהל המערכת שלך לקבלת סיוע.</translation>
+<translation id="7312846573060934304">המארח אינו מקוון.</translation>
+<translation id="9016232822027372900">התחבר בכל זאת</translation>
+<translation id="1818475040640568770">אין לך מחשבים רשומים.</translation>
+<translation id="4394049700291259645">השבת</translation>
+<translation id="4156740505453712750">‏כדי להגן על הגישה למחשב זה, בחר PIN באורך <ph name="BOLD_START"/>שש ספרות לפחות<ph name="BOLD_END"/>. PIN זה יידרש בעת התחברות ממיקום אחר.</translation>
+<translation id="3286521253923406898">‏בקר מארח Chromoting</translation>
+</translationbundle>
\ No newline at end of file
diff --git a/remoting/resources/remoting_strings_no.xtb b/remoting/resources/remoting_strings_no.xtb
index f0456a8..02cdd42 100644
--- a/remoting/resources/remoting_strings_no.xtb
+++ b/remoting/resources/remoting_strings_no.xtb
@@ -1,114 +1,218 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="no">
-<translation id="4176825807642096119">Tilgangskode</translation>
-<translation id="8355326866731426344">Denne tilgangskoden utløper om <ph name="TIMEOUT"/></translation>
-<translation id="4068946408131579958">Alle tilkoblinger</translation>
-<translation id="5601503069213153581">PIN-kode</translation>
-<translation id="3362124771485993931">Tast inn PIN-koden på nytt</translation>
-<translation id="7658239707568436148">Avbryt</translation>
-<translation id="6746493157771801606">Tøm logg</translation>
-<translation id="6040143037577758943">Lukk</translation>
-<translation id="5254120496627797685">Hvis du forlater denne siden, avsluttes Chrome Eksternt skrivebord-økten.</translation>
-<translation id="5308380583665731573">Koble til</translation>
-<translation id="6985691951107243942">Er du sikker på at du vil deaktivere eksterne tilkoblinger til <ph name="HOSTNAME"/>? Hvis du ombestemmer deg må du tilbake til datamaskinen for å gjenopprette tilkoblingene.</translation>
-<translation id="6748108480210050150">Fra</translation>
-<translation id="5714695932513333758">Tilkoblingslogg</translation>
-<translation id="4736223761657662401">Tilkoblingslogg</translation>
-<translation id="6998989275928107238">Til</translation>
-<translation id="2359808026110333948">Fortsett</translation>
-<translation id="2919669478609886916">Du deler denne datamaskinen med en annen bruker. Vil du fortsette å dele?</translation>
-<translation id="173559734173571936">For å bruke Chrome Eksternt skrivebord må du gi utvidede tilgangstillatelser til datamaskinen din. Du trenger å gjøre dette bare én gang.</translation>
-<translation id="1023096696228309145">Be brukeren som har datamaskinen du ønsker tilgang til, om å klikke på «Del nå» og gi deg tilgangskoden.</translation>
-<translation id="5379087427956679853">Med Chrome Eksternt skrivebord kan du trygt dele datamaskinen via Internett. Begge brukerne må kjøre Chrome Eksternt skrivebord-programmet, som kan lastes ned på <ph name="URL"/>.</translation>
-<translation id="4394049700291259645">Deaktiver</translation>
-<translation id="4314644002001494905">Koble fra (Ctrl + Alt + Esc)</translation>
-<translation id="8342538585421421741">Koble fra (Opt + Ctrl + Esc)</translation>
-
-<translation id="4804818685124855865">Koble fra</translation>
-
-<translation id="6930242544192836755">Varighet</translation>
-<translation id="8172070902751707422">Autentiseringen mislyktes. Logg deg på Chrome Eksternt skrivebord på nytt.</translation>
-<translation id="2707879711568641861">Du mangler noen komponenter som kreves for Chrome Eksternt skrivebord. Kontroller at du har installert den nyeste versjonen, og prøv på nytt.</translation>
-<translation id="2813770873348017932">Tilkoblinger til den eksterne datamaskinen er midlertidig blokkert fordi noen prøvde å koble seg til med en ugyldig PIN-kode. Prøv på nytt senere.</translation>
-<translation id="3106379468611574572">Den eksterne datamaskinen svarer ikke på tilkoblingsforespørsler. Kontroller at datamaskinen er koblet til Internett, og prøv på nytt.</translation>
-<translation id="851521648418609391">En ikke-kompatibel versjon av Chrome Eksternt skrivebord ble oppdaget. Kontroller at du har den nyeste versjonen av Google Chrome og Chrome Eksternt skrivebord på begge maskinene, og prøv på nytt.</translation>
-<translation id="4277736576214464567">Tilgangskoden er ugyldig. Prøv på nytt.</translation>
-<translation id="2208514473086078157">Innstillingene for retningslinjene tillater ikke at denne datamaskinen deles som vert for Chrome Eksternt skrivebord. Ta kontakt med systemadministratoren for å få hjelp.</translation>
-<translation id="2366718077645204424">Kunne ikke nå verten. Dette er sannsynligvis på grunn av innstillingene for nettverket du bruker.</translation>
-<translation id="7729639150174291243">Du er ikke logget på Chrome Eksternt skrivebord. Logg deg på og prøv på nytt.</translation>
-<translation id="4019628723432694459">Du mangler noen komponenter som kreves for Chrome Eksternt skrivebord. Sørg for at du kjører den nyeste versjonen av Google Chrome, og prøv på nytt.</translation>
-<translation id="2805036638902441020">Tjeneren svarte ikke på nettverksforespørselen.</translation>
-<translation id="5593560073513909978">Tjenesten er ikke tilgjengelig for øyeblikket. Prøv på nytt senere.</translation>
-<translation id="1546934824884762070">Det oppsto en uventet feil. Rapporter dette problemet til utviklerne.</translation>
-<translation id="1742469581923031760">Kobler til …</translation>
-<translation id="4913529628896049296">venter på tilkobling …</translation>
-<translation id="8525306231823319788">Fullskjerm</translation>
-<translation id="4472575034687746823">Kom i gang</translation>
-<translation id="7649070708921625228">Hjelp</translation>
-<translation id="4572065712096155137">Tilgang</translation>
-<translation id="1342297293546459414">Se og kontroller en delt datamaskin.</translation>
-<translation id="3258789396564295715">Du kan få sikker tilgang til denne datamaskinen ved å bruke Chrome Eksternt skrivebord.</translation>
-<translation id="6198252989419008588">Endre PIN-koden</translation>
-<translation id="1199593201721843963">Deaktiver eksterne tilkoblinger</translation>
 <translation id="7606912958770842224">Aktiver eksterne tilkoblinger</translation>
-<translation id="4006787130661126000">Du må aktivere eksterne tilkoblinger hvis du vil ha tilgang til denne datamaskinen gjennom Chrome Eksternt skrivebord.</translation>
-<translation id="4361728918881830843">Du kan aktivere ekstern forbindelse til en annen datamaskin ved å installere Chrome Eksternt skrivebord der og klikke på <ph name="BUTTON_NAME"/>.</translation>
-<translation id="174018511426417793">Ingen datamaskiner er registrert i kontoen din. Du kan aktivere ekstern forbindelse til en annen datamaskin ved å installere Chrome Eksternt skrivebord der og klikke på <ph name="BUTTON_NAME"/>.</translation>
-<translation id="2499160551253595098">Hjelp oss med å forbedre Chrome Eksternt skrivebord ved å la oss å samle bruksstatistikk og programstopprapporter.</translation>
-<translation id="4156740505453712750">For å beskytte bruken av denne datamaskinen, må du velge en PIN-kode på <ph name="BOLD_START"/>minst seks siffer<ph name="BOLD_END"/>. Denne PIN-koden er nødvendig ved tilkobling.</translation>
-<translation id="154040539590487450">Kunne ikke starte tjenesten for ekstern tilgang.</translation>
-<translation id="2013884659108657024">Chrome laster ned installasjonsprogrammet for Chrome Eksternt skrivebord-vert. Når nedlastingen er ferdig må du kjøre installasjonsprogrammet før du fortsetter.</translation>
-<translation id="4207623512727273241">Kjør installasjonsprogrammet før du fortsetter.</translation>
-<translation id="170207782578677537">Kunne ikke registrere denne datamaskinen.</translation>
-<translation id="2089514346391228378">Eksterne tilkoblinger for denne datamaskinen har blitt aktivert.</translation>
-<translation id="7782471917492991422">Kontrollér datamaskinens strøminnstillinger og se til at den ikke er konfigurert til å gå i dvale når den ikke er i bruk.</translation>
-<translation id="1654128982815600832">Aktiverer eksterne tilkoblinger for denne datamaskinen …</translation>
-<translation id="2926340305933667314">Kunne ikke deaktivere fjerntilgang til denne datamaskinen. Prøv på nytt senere.</translation>
-<translation id="7672203038394118626">Eksterne tilkoblinger for denne datamaskinen har blitt deaktivert.</translation>
+<translation id="3785447812627779171">Chromoting
+Vert</translation>
 <translation id="1841799852846221389">Deaktiverer eksterne tilkoblinger for denne datamaskinen …</translation>
-<translation id="6668065415969892472">PIN-koden din er oppdatert.</translation>
-<translation id="652218476070540101">PIN-koden for denne datamaskinen oppdateres …</translation>
-<translation id="3020807351229499221">Kunne ikke oppdatere PIN-koden. Prøv på nytt senere.</translation>
-<translation id="6527303717912515753">Del</translation>
-<translation id="2235518894410572517">Del denne datamaskinen slik at en annen bruker kan se og kontrollere den.</translation>
-<translation id="5265129178187621741">(denne funksjonen er ikke tilgjengelig for Chromebooks ennå … følg med)</translation>
-<translation id="5619148062500147964">Til denne datamaskinen</translation>
-<translation id="9149992051684092333">Kom i gang med deling av skrivebordet ved å gi adgangskoden nedenfor til personen som skal hjelpe deg.</translation>
-<translation id="2851674870054673688">Når brukeren har skrevet inn koden, starter delingsøkten.</translation>
-<translation id="7215059001581613786">Skriv inn en PIN-kode på seks sifre eller fler.</translation>
-<translation id="8178433417677596899">Skjermdeling bruker-til-bruker, perfekt for ekstern teknisk brukerstøtte.</translation>
-<translation id="5702987232842159181">Tilkoblet:</translation>
-<translation id="811307782653349804">Bruk din egen datamaskin uansett hvor du er.</translation>
-<translation id="4430915108080446161">Genererer tilgangskode …</translation>
-<translation id="3776024066357219166">Chrome Eksternt skrivebord-økten din er avsluttet.</translation>
-<translation id="5708869785009007625">Skrivebordet ditt deles for øyeblikket med <ph name="USER"/>.</translation>
-<translation id="9188433529406846933">Godkjenn</translation>
-<translation id="701976023053394610">Fjernhjelp</translation>
-<translation id="809687642899217504">Mine datamaskiner</translation>
-<translation id="6965382102122355670">OK</translation>
-<translation id="5064360042339518108"><ph name="HOSTNAME"/> (frakoblet)</translation>
-<translation id="4686372254213217147">Opprinnelig størrelse</translation>
-<translation id="837021510621780684">Fra denne datamaskinen</translation>
-
-<translation id="4808503597364150972">Skriv inn PIN-koden for <ph name="HOSTNAME"/>.</translation>
-<translation id="5156271271724754543">Skriv inn samme PIN-kode i begge feltene.</translation>
-<translation id="5625493749705183369">Få tilgang til andre datamaskiner eller gi en annen bruker sikker tilgang til datamaskinen din via Internett.</translation>
-<translation id="7401733114166276557">Chrome Eksternt skrivebord</translation>
-<translation id="579702532610384533">Koble til på nytt</translation>
-<translation id="7144878232160441200">Prøv på nytt</translation>
-<translation id="7948001860594368197">Skjermalternativer</translation>
-<translation id="6146986332407778716">Ctrl+Alt+Del</translation>
-<translation id="6091564239975589852">Send nøkler</translation>
-<translation id="1369030621715708553">PrtScn</translation>
-<translation id="3908017899227008678">Minsk til den passer</translation>
-<translation id="3950820424414687140">Logg på</translation>
-<translation id="5222676887888702881">Logg av</translation>
-<translation id="7319983568955948908">Stopp deling</translation>
-<translation id="2841013758207633010">Tidspunkt</translation>
-<translation id="6193698048504518729">Koble til <ph name="HOSTNAME"/></translation>
-<translation id="4430435636878359009">Deaktiver eksterne tilkoblinger til denne datamaskinen.</translation>
-<translation id="332624996707057614">Rediger datamaskinnavnet</translation>
-<translation id="409800995205263688">MERK: I henhold til lokale retningslinjer er tilkobling tillatt bare mellom datamaskiner i nettverket ditt.</translation>
+<translation id="2676780859508944670">Behandler …</translation>
 <translation id="5843054235973879827">Hvorfor er dette trygt?</translation>
-</translationbundle>
+<translation id="5619148062500147964">Til denne datamaskinen</translation>
+<translation id="4068946408131579958">Alle tilkoblinger</translation>
+<translation id="2208514473086078157">Innstillingene tillater ikke at denne datamaskinen deles som vert for Chrome Eksternt skrivebord. Ta kontakt med systemadministratoren for å få hjelp.</translation>
+<translation id="2801119484858626560">En ikke-kompatibel versjon av Chrome Eksternt skrivebord ble oppdaget. Kontrollér at du har den nyeste versjonen av Chrome og Chrome Eksternt skrivebord på begge maskinene, og prøv på nytt.</translation>
+<translation id="6998989275928107238">Til</translation>
+<translation id="406849768426631008">Har du lyst til å hjelpe noen mens du har en videosamtale med dem? Prøv <ph name="LINK_BEGIN"/>Eksternt skrivebord i Google Hangouts<ph name="LINK_END"/>.</translation>
+<translation id="5397086374758643919">Avinstalleringsprogram for Chrome Eksternt skrivebord-vert</translation>
+<translation id="3258789396564295715">Du kan få sikker tilgang til denne datamaskinen ved å bruke Chrome Eksternt skrivebord.</translation>
+<translation id="5070121137485264635">Den eksterne verten krever at du godkjenner via et tredjepartsnettsted. For å fortsette må du gi Chrome Eksternt skrivebord ytterligere tillatelser til å åpne denne adressen:</translation>
+<translation id="2124408767156847088">Få sikker tilgang til datamaskinene dine fra Android-enheten din.</translation>
+<translation id="4808503597364150972">Skriv inn PIN-koden for <ph name="HOSTNAME"/>.</translation>
+<translation id="7672203038394118626">Eksterne tilkoblinger for denne datamaskinen har blitt deaktivert.</translation>
+<translation id="8244400547700556338">Finn ut hvordan.</translation>
+<translation id="4368630973089289038">Vil du være med på å forbedre Chromoting? <ph name="LINK_BEGIN"/>Delta i spørreundersøkelsen.<ph name="LINK_END"/></translation>
+<translation id="332624996707057614">Rediger datamaskinnavnet</translation>
+<translation id="1996161829609978754">Chrome laster ned installasjonsprogrammet for Chromoting-verten. Når nedlastingen er ferdig, må du kjøre installasjonsprogrammet før du fortsetter.</translation>
+<translation id="2046651113449445291">Følgende kunder har blitt tilknyttet denne datamaskinen og kan koble til uten å måtte oppgi PIN-kode. Du kan trekke tilbake denne tillatelsen når som helst, både individuelt og for alle klienter.</translation>
+<translation id="7658239707568436148">Avbryt</translation>
+<translation id="7782471917492991422">Kontrollér datamaskinens strøminnstillinger og sørg for at den ikke er konfigurert til å gå i dvale når den ikke er i bruk.</translation>
+<translation id="7665369617277396874">Legg til konto</translation>
+<translation id="2707879711568641861">Du mangler noen komponenter som kreves for Chrome Eksternt skrivebord. Kontrollér at du har installert den nyeste versjonen, og prøv på nytt.</translation>
+<translation id="2499160551253595098">Hjelp oss med å forbedre Chrome Eksternt skrivebord ved å gi oss tillatelse til å samle bruksstatistikk og programstopprapporter.</translation>
+<translation id="7868137160098754906">Skriv inn PIN-koden for den eksterne datamaskinen.</translation>
+<translation id="677755392401385740">Vert startet for brukeren: <ph name="HOST_USERNAME"/>.</translation>
+<translation id="8864965950780407789">For å bruke Chromoting må du gi utvidede tilgangstillatelser til datamaskinen din. Du trenger bare å gjøre dette én gang.</translation>
+<translation id="3197730452537982411">Eksternt skrivebord</translation>
+<translation id="8355326866731426344">Denne tilgangskoden utløper om <ph name="TIMEOUT"/></translation>
+<translation id="985602178874221306">The Chromium Authors</translation>
+<translation id="2498359688066513246">Hjelp og tilbakemeldinger</translation>
+<translation id="6198252989419008588">Endre personlig kode</translation>
+<translation id="170207782578677537">Kunne ikke registrere denne datamaskinen.</translation>
+<translation id="4804818685124855865">Koble fra</translation>
+<translation id="5708869785009007625">Skrivebordet ditt deles for øyeblikket med <ph name="USER"/>.</translation>
+<translation id="5601503069213153581">PIN</translation>
+<translation id="5222676887888702881">Logg av</translation>
+<translation id="6304318647555713317">Klient</translation>
+<translation id="5064360042339518108"><ph name="HOSTNAME"/> (ikke på nett)</translation>
+<translation id="4472575034687746823">Kom i gang</translation>
+<translation id="2813770873348017932">Tilkoblinger til den eksterne datamaskinen er midlertidig blokkert fordi noen prøvde å koble seg til med en ugyldig PIN-kode. Prøv på nytt senere.</translation>
+<translation id="6746493157771801606">Tøm logg</translation>
+<translation id="4430435636878359009">Deaktiver eksterne tilkoblinger til denne datamaskinen.</translation>
+<translation id="6001953797859482435">Alternativer for Chrome Eksternt skrivebord-vert</translation>
+<translation id="9188433529406846933">Autoriser</translation>
+<translation id="228809120910082333">Bekreft kontoen og PIN-koden din for å tillate tilgang via Chromoting.</translation>
+<translation id="7605995381616883502">Ny tilkobling</translation>
+<translation id="5826423541626112308">Chrome Eksternt skrivebord-vert</translation>
+<translation id="2851674870054673688">Når brukeren har skrevet inn koden, starter delingsøkten.</translation>
+<translation id="5593560073513909978">Tjenesten er ikke tilgjengelig for øyeblikket. Prøv på nytt senere.</translation>
+<translation id="3908017899227008678">Forminsk til den passer</translation>
+<translation id="8073845705237259513">Hvis du vil bruke Chrome Eksternt skrivebord, må du legge til en Google-konto på enheten din.</translation>
+<translation id="1199593201721843963">Deaktiver eksterne tilkoblinger</translation>
+<translation id="5379087427956679853">Med Chrome Eksternt skrivebord kan du trygt dele datamaskinen din på nettet. Begge brukerne må installere Chrome Eksternt skrivebord-appen, som er å finne på <ph name="URL"/></translation>
+<translation id="1409991159633941777">Du mangler noen komponenter som kreves for Chrome Eksternt skrivebord. Sørg for at du kjører den nyeste versjonen av Chrome, og prøv på nytt.</translation>
+<translation id="174018511426417793">Du har ikke registrert noen datamaskiner. For å aktivere ekstern tilkobling til en datamaskin må du installere Chrome Eksternt skrivebord på maskinen, og klikke på «<ph name="BUTTON_NAME"/>».</translation>
+<translation id="9126115402994542723">Ikke be om PIN-kode igjen når du kobler til denne verten fra denne enheten.</translation>
+<translation id="253387295088602549">Gi en annen bruker sikker tilgang til datamaskinen din via Internett.</translation>
+<translation id="1300633907480909701">Få sikker tilgang til datamaskinene dine fra Android-enheten din.
+
+• Konfigurer ekstern tilgang på alle datamaskinene dine via Chrome Ekstern tilgang-appen fra Chrome Nettmarked: https://chrome.google.com/remotedesktop
+• Åpne appen på Android-enheten, og trykk på en av datamaskinene som er på nett for å koble til den.
+
+Eksterne datamaskiner som bruker andre tastaturspråk enn engelsk (USA) kan ha problemer med tekstinndata. Støtte for andre tastaturoppsett kommer snart!
+
+Du kan finne informasjon om personvern i Googles personvernregler (http://goo.gl/SyrVzj) og personvernreglene for Chrome (http://goo.gl/0uXE5d).</translation>
+<translation id="629730747756840877">Konto</translation>
+<translation id="8525306231823319788">Full skjerm</translation>
+<translation id="6204583485351780592"><ph name="HOSTNAME"/> (utdatert)</translation>
+<translation id="3884839335308961732">Bekreft kontoen og PIN-koden din nedenfor for å tillate tilgang via Chrome Eksternt skrivebord.</translation>
+<translation id="327263477022142889">Vil du være med på å forbedre Chrome Eksternt skrivebord? <ph name="LINK_BEGIN"/>Delta i spørreundersøkelsen.<ph name="LINK_END"/></translation>
+<translation id="5702987232842159181">Tilkoblet:</translation>
+<translation id="8509907436388546015">Integrasjonsprosess for skrivebord</translation>
+<translation id="4736223761657662401">Tilkoblingslogg</translation>
+<translation id="5285241842433869526">Finn ut hvordan du konfigurerer en datamaskin for ekstern tilgang.</translation>
+<translation id="4430915108080446161">Genererer tilgangskode …</translation>
+<translation id="2013996867038862849">Alle tilknyttede klienter har blitt slettet.</translation>
+<translation id="7081428606750359611">Chromoting-vert</translation>
+<translation id="8228265668171617545">En ikke-kompatibel versjon av Chromoting ble funnet. Sørg for at du har den nyeste versjonen av Chrome og Chromoting på begge datamaskinene, og prøv på nytt.</translation>
+<translation id="6985691951107243942">Er du sikker på at du vil deaktivere eksterne tilkoblinger til <ph name="HOSTNAME"/>? Hvis du ombestemmer deg, må du tilbake til datamaskinen for å gjenopprette tilkoblingene.</translation>
+<translation id="1436054138039008644"><ph name="HOSTNAME"/> (sist på nett <ph name="DATE"/>)</translation>
+<translation id="9149992051684092333">Kom i gang med deling av skrivebordet ved å gi adgangskoden nedenfor til personen som skal hjelpe deg.</translation>
+<translation id="409800995205263688">MERK: I henhold til lokale retningslinjer er tilkobling tillatt bare mellom datamaskiner i nettverket ditt.</translation>
+<translation id="8513093439376855948">Innebygd meldingsvert for administrasjon av ekstern vert</translation>
+<translation id="2353140552984634198">Du kan trygt bruke denne datamaskinen med Chromoting.</translation>
+<translation id="4481276415609939789">Du har ikke registrert noen datamaskiner. For å aktivere eksterne tilkoblinger til en datamaskin, må du installere Chromoting på maskinen, og klikke på «<ph name="BUTTON_NAME"/>».</translation>
+<translation id="2013884659108657024">Chrome laster ned installasjonsprogrammet for Chrome Eksternt skrivebord-vert. Når nedlastingen er ferdig må du kjøre installasjonsprogrammet før du fortsetter.</translation>
+<translation id="1742469581923031760">Kobler til …</translation>
+<translation id="8998327464021325874">Kontroller for Chrome Eksternt skrivebord-vert</translation>
+<translation id="6748108480210050150">Fra</translation>
+<translation id="3950820424414687140">Logg på</translation>
+<translation id="1291443878853470558">Du må aktivere eksterne tilkoblinger hvis du ønsker å bruke Chromoting med denne datamaskinen.</translation>
+<translation id="2599300881200251572">Med denne tjenesten kan du motta innkommende tilkoblinger fra Chrome Eksternt skrivebord-klienter.</translation>
+<translation id="6091564239975589852">Send nøkler</translation>
+<translation id="4572065712096155137">Tilgang</translation>
+<translation id="5908809458024685848">Du er ikke logget på Chromoting. Logg på, og prøv på nytt.</translation>
+<translation id="7401733114166276557">Chrome Eksternt skrivebord</translation>
+<translation id="3362124771485993931">Tast inn PIN-koden på nytt</translation>
+<translation id="154040539590487450">Kunne ikke starte tjenesten for ekstern tilgang.</translation>
+<translation id="7948001860594368197">Skjermalternativer</translation>
+<translation id="8172070902751707422">Autentiseringen mislyktes. Logg på Chrome Eksternt skrivebord på nytt.</translation>
+<translation id="6146986332407778716">Ctrl+Alt+Del</translation>
+<translation id="5254120496627797685">Hvis du forlater denne siden, avsluttes Chrome Eksternt skrivebord-økten.</translation>
+<translation id="173559734173571936">For å bruke Chrome Eksternt skrivebord må du gi utvidede tilgangstillatelser til datamaskinen din. Du trenger bare å gjøre dette én gang.</translation>
+<translation id="9032136467203159543">Du mangler noen komponenter som kreves for Chromoting. Sørg for at du har installert den nyeste versjonen, og prøv på nytt.</translation>
+<translation id="1342297293546459414">Se og kontrollér en delt datamaskin.</translation>
+<translation id="1520828917794284345">Tilpass størrelsen på skrivebordet</translation>
+<translation id="701976023053394610">Fjernhjelp</translation>
+<translation id="6099500228377758828">Chrome Eksternt skrivebord-tjeneste</translation>
+<translation id="2747641796667576127">Programvareoppdateringer skjer vanligvis automatisk, men kan i noen sjeldne tilfeller mislykkes. Oppdateringen av programvare bør ikke ta mer enn noen få minutter og kan gjøres via ekstern tilgang.</translation>
+<translation id="3933246213702324812">Chromoting på <ph name="HOSTNAME"/> er utdatert og må oppdateres.</translation>
+<translation id="6193698048504518729">Koble til <ph name="HOSTNAME"/></translation>
+<translation id="8116630183974937060">Det oppsto en nettverksfeil. Kontrollér at enheten er tilkoblet nettet, og prøv på nytt.</translation>
+<translation id="3020807351229499221">Kunne ikke oppdatere PIN-koden. Prøv på nytt senere.</translation>
+<translation id="2647232381348739934">Chromoting-tjeneste</translation>
+<translation id="579702532610384533">Koble til på nytt</translation>
+<translation id="4211066471404647515">Noen komponenter som kreves for Chromoting mangler. Sørg for at du kjører den nyeste versjonen av Chrome, og prøv på nytt.</translation>
+<translation id="5773590752998175013">Tilknytningsdato</translation>
+<translation id="5265129178187621741">(denne funksjonen er ikke tilgjengelig for Chromebook ennå … følg med)</translation>
+<translation id="5156271271724754543">Skriv inn samme PIN-kode i begge feltene.</translation>
+<translation id="2118549242412205620">Få sikker tilgang til datamaskinene dine fra Android-enheten din.
+
+• Konfigurer ekstern tilgang på alle datamaskinene dine via Chrome Ekstern tilgang-appen fra Chrome Nettmarked: https://chrome.google.com/remotedesktop
+• Åpne appen på Android-enheten, og trykk på en datamaskinene som er på nett for å koble til den.
+
+Du kan finne informasjon om personvern i Googles personvernregler (http://goo.gl/SyrVzj) og personvernreglene for Chrome (http://goo.gl/0uXE5d).</translation>
+<translation id="4361728918881830843">For å muliggjøre ekstern tilkobling til en annen datamaskin må du installere Chrome Eksternt skrivebord på maskinen, og klikke på «<ph name="BUTTON_NAME"/>».</translation>
+<translation id="7444276978508498879">Klienten ble tilknyttet: <ph name="CLIENT_USERNAME"/>.</translation>
+<translation id="4913529628896049296">venter på tilkobling …</translation>
+<translation id="5714695932513333758">Tilkoblingslogg</translation>
+<translation id="811307782653349804">Bruk din egen datamaskin uansett hvor du er.</translation>
+<translation id="2939145106548231838">Autentiser for å være vert</translation>
+<translation id="2366718077645204424">Kunne ikke nå verten. Dette er sannsynligvis på grunn av innstillingene for nettverket du bruker.</translation>
+<translation id="3776024066357219166">Chrome Eksternt skrivebord-økten din er avsluttet.</translation>
+<translation id="5625493749705183369">Få tilgang til andre datamaskiner eller gi en annen bruker sikker tilgang til datamaskinen din via Internett.</translation>
+<translation id="2512228156274966424">MERK: For å sikre at alle hurtigtastene er tilgjengelige, kan du konfigurere Chrome Eksternt skrivebord til «Åpne som vindu».</translation>
+<translation id="2699970397166997657">Chromoting</translation>
+<translation id="4812684235631257312">Vert</translation>
+<translation id="6178645564515549384">Innebygd meldingsvert for ekstern hjelp</translation>
+<translation id="897805526397249209">For å aktivere eksterne tilkoblinger til en annen datamaskin, må du installere Chromoting på maskinen, og klikke på «<ph name="BUTTON_NAME"/>».</translation>
+<translation id="1704090719919187045">Alternativer for Chromoting-vert</translation>
+<translation id="809687642899217504">Mine datamaskiner</translation>
+<translation id="3106379468611574572">Den eksterne datamaskinen svarer ikke på tilkoblingsforespørsler. Kontrollér at datamaskinen er koblet til Internett, og prøv på nytt.</translation>
+<translation id="2359808026110333948">Fortsett</translation>
+<translation id="2078880767960296260">Vertsprosess</translation>
+<translation id="1643640058022401035">Hvis du forlater denne siden, avsluttes Chromoting-økten din.</translation>
+<translation id="8261506727792406068">Slett</translation>
+<translation id="2235518894410572517">Del denne datamaskinen slik at en annen bruker kan se og kontrollere den.</translation>
+<translation id="6939719207673461467">Vis/skjul tastaturet.</translation>
+<translation id="1023096696228309145">Be brukeren som har datamaskinen du ønsker tilgang til, om å klikke på «Del nå» og gi deg tilgangskoden.</translation>
+<translation id="4240294130679914010">Avinstalleringsprogram for Chromoting-vert</translation>
+<translation id="80739703311984697">Den eksterne verten krever at du godkjenner via et tredjepartsnettsted. For å fortsette må du gi Chromoting ytterligere tillatelser til å åpne denne adressen:</translation>
+<translation id="4006787130661126000">Du må aktivere eksterne tilkoblinger hvis du vil ha tilgang til denne datamaskinen gjennom Chrome Eksternt skrivebord.</translation>
+<translation id="177096447311351977">Kanal-IP for klienten: <ph name="CLIENT_GAIA_IDENTIFIER"/> ip='<ph name="CLIENT_IP_ADDRESS_AND_PORT"/>' host_ip='<ph name="HOST_IP_ADDRESS_AND_PORT"/>' channel='<ph name="CHANNEL_TYPE"/>' connection='<ph name="CONNECTION_TYPE"/>'.</translation>
+<translation id="6930242544192836755">Varighet</translation>
+<translation id="6527303717912515753">Del</translation>
+<translation id="2926340305933667314">Kunne ikke deaktivere fjerntilgang til denne datamaskinen. Prøv på nytt senere.</translation>
+<translation id="6865175692670882333">Se/rediger</translation>
+<translation id="5859141382851488196">Nytt vindu</translation>
+<translation id="2089514346391228378">Eksterne tilkoblinger for denne datamaskinen har blitt aktivert.</translation>
+<translation id="7693372326588366043">Oppdater vertslisten</translation>
+<translation id="8445362773033888690">Se oppføringen i Google Play-butikken</translation>
+<translation id="8246880134154544773">Autentiseringen mislyktes. Logg på Chromoting på nytt.</translation>
+<translation id="1654128982815600832">Aktiverer eksterne tilkoblinger for denne datamaskinen …</translation>
+<translation id="8187079423890319756">Copyright 2013 – The Chromium Authors. Med enerett.</translation>
+<translation id="7038683108611689168">Hjelp oss med å gjøre Chromoting bedre ved å samle inn bruksstatistikk og programstopprapporter.</translation>
+<translation id="6040143037577758943">Lukk</translation>
+<translation id="4405930547258349619">Core-bibliotek</translation>
+<translation id="310979712355504754">Slett alle</translation>
+<translation id="7649070708921625228">Hjelp</translation>
+<translation id="3581045510967524389">Kunne ikke koble til nettverket. Ssjekk at enheten har nettilkobling.</translation>
+<translation id="4517233780764084060">Merk: For å sikre at alle hurtigtastene er tilgjengelige, kan du angi at Chromoting skal «Åpnes som vindu».</translation>
+<translation id="4176825807642096119">Tilgangskode</translation>
+<translation id="7144878232160441200">Prøv på nytt</translation>
+<translation id="4573676252416618192">Chrome Eksternt
+skrivebord-vert</translation>
+<translation id="4703799847237267011">Chromoting-økten er avsluttet.</translation>
+<translation id="1369030621715708553">PrtScn</translation>
+<translation id="8178433417677596899">Skjermdeling bruker-til-bruker, perfekt for ekstern teknisk støttte.</translation>
+<translation id="652218476070540101">PIN-koden for denne datamaskinen oppdateres …</translation>
+<translation id="4563926062592110512">Klienten koblet fra: <ph name="CLIENT_USERNAME"/>.</translation>
+<translation id="5308380583665731573">Koble til</translation>
+<translation id="7319983568955948908">Stopp deling</translation>
+<translation id="6681800064886881394">Copyright 2013 Google Inc. Med enerett.</translation>
+<translation id="8038108135592087998">Første versjon av Chrome Eksternt skrivebord for Android.</translation>
+<translation id="6668065415969892472">PIN-koden din er oppdatert.</translation>
+<translation id="4513946894732546136">Google Feedback</translation>
+<translation id="4277736576214464567">Tilgangskoden er ugyldig. Prøv på nytt.</translation>
+<translation id="979100198331752041">Chrome Eksternt skrivebord på <ph name="HOSTNAME"/> er utdatert og må oppdateres.</translation>
+<translation id="7729639150174291243">Du er ikke logget på Chrome Eksternt skrivebord. Logg på og prøv på nytt.</translation>
+<translation id="2841013758207633010">Klokkeslett</translation>
+<translation id="6011539954251327702">Med Chromoting kan du trygt dele datamaskinen din på nettet. Begge brukerne må kjøre Chromoting-appen, som er å finne på <ph name="URL"/></translation>
+<translation id="2919669478609886916">Du deler denne datamaskinen med en annen bruker. Vil du fortsette å dele?</translation>
+<translation id="4207623512727273241">Kjør installasjonsprogrammet før du fortsetter.</translation>
+<translation id="3596628256176442606">Med denne tjenesten kan du motta innkommende tilkoblinger fra Chromoting-klienter.</translation>
+<translation id="4277463233460010382">Denne datamaskinen er konfigurer for å la én eller flere klienter koble til uten å skrive inn noen PIN-kode.</translation>
+<translation id="837021510621780684">Fra denne datamaskinen</translation>
+<translation id="3870154837782082782">Google Inc.</translation>
+<translation id="7215059001581613786">Skriv inn en PIN-kode på seks sifre eller fler.</translation>
+<translation id="8383794970363966105">Hvis du vil bruke Chromoting, må du legge til en Google-konto på enheten din.</translation>
+<translation id="1546934824884762070">Det oppsto en uventet feil. Rapportér dette problemet til utviklerne.</translation>
+<translation id="6965382102122355670">OK</translation>
+<translation id="7434397035092923453">Klienten ble nektet tilgang: <ph name="CLIENT_USERNAME"/>.</translation>
+<translation id="3403830762023901068">Innstillingene tillater ikke at denne datamaskinen deles som vert for Chromoting. Kontakt systemadministratoren for å få hjelp.</translation>
+<translation id="7312846573060934304">Verten er uten nett.</translation>
+<translation id="9016232822027372900">Koble til likevel</translation>
+<translation id="1818475040640568770">Du har ikke registrert noen datamaskiner.</translation>
+<translation id="4394049700291259645">Deaktiver</translation>
+<translation id="4156740505453712750">For å beskytte tilgangen til denne datamaskinen må du velge en PIN-kode bestående av <ph name="BOLD_START"/>minst seks tall<ph name="BOLD_END"/>. Denne PIN-koden kreves når man kobler til fra en annen posisjon.</translation>
+<translation id="3286521253923406898">Kontroller for Chromoting-vert</translation>
+</translationbundle>
\ No newline at end of file
diff --git a/remoting/resources/remoting_strings_th.xtb b/remoting/resources/remoting_strings_th.xtb
index caf5934..8f34410 100644
--- a/remoting/resources/remoting_strings_th.xtb
+++ b/remoting/resources/remoting_strings_th.xtb
@@ -9,7 +9,7 @@
 <translation id="5843054235973879827">เหตุใดการดำเนินการนี้จึงปลอดภัย</translation>
 <translation id="5619148062500147964">กับคอมพิวเตอร์เครื่องนี้</translation>
 <translation id="4068946408131579958">การเชื่อมต่อทั้งหมด</translation>
-<translation id="2208514473086078157">การตั้งค่านโยบายไม่อนุญาตให้แบ่งปันคอมพิวเตอร์นี้เป็นโฮสต์ Chrome Remote Desktop โปรดติดต่อขอรับความช่วยเหลือจากผู้ดูแลระบบของคุณ</translation>
+<translation id="2208514473086078157">การตั้งค่านโยบายไม่อนุญาตให้แชร์คอมพิวเตอร์นี้เป็นโฮสต์ Chrome Remote Desktop โปรดติดต่อขอรับความช่วยเหลือจากผู้ดูแลระบบของคุณ</translation>
 <translation id="2801119484858626560">ตรวจพบรุ่นที่เข้ากันไม่ได้ของ Chrome Remote Desktop โปรดตรวจสอบให้แน่ใจว่าคุณมี Chrome และ Chrome Remote Desktop เวอร์ชันล่าสุดบนคอมพิวเตอร์ทั้งสองเครื่องและลองอีกครั้ง</translation>
 <translation id="6998989275928107238">ถึง</translation>
 <translation id="406849768426631008">หากต้องการช่วยคนอื่นในขณะที่วิดีโอแชทกับพวกเขา ลองใช้<ph name="LINK_BEGIN"/> &quot;เดสก์ท็อปเครื่องอื่น&quot; ใน Google แฮงเอาท์<ph name="LINK_END"/></translation>
@@ -39,7 +39,7 @@
 <translation id="6198252989419008588">เปลี่ยน PIN</translation>
 <translation id="170207782578677537">ไม่สามารถลงทะเบียนคอมพิวเตอร์เครื่องนี้</translation>
 <translation id="4804818685124855865">ตัดการเชื่อมต่อ</translation>
-<translation id="5708869785009007625">ขณะนี้มีการแบ่งปันเดสก์ท็อปของคุณกับ <ph name="USER"/></translation>
+<translation id="5708869785009007625">ขณะนี้มีการแชร์เดสก์ท็อปของคุณกับ <ph name="USER"/></translation>
 <translation id="5601503069213153581">PIN</translation>
 <translation id="5222676887888702881">ออกจากระบบ</translation>
 <translation id="6304318647555713317">ไคลเอ็นต์</translation>
@@ -53,12 +53,12 @@
 <translation id="228809120910082333">โปรดยืนยันบัญชีและ PIN ของคุณด้านล่างเพื่อให้สามารถเข้าถึงโดย Chromoting</translation>
 <translation id="7605995381616883502">การเชื่อมต่อใหม่</translation>
 <translation id="5826423541626112308">Chrome Remote Desktop Host</translation>
-<translation id="2851674870054673688">เมื่อพวกเขาป้อนรหัสแล้ว เซสชันการแบ่งปันของคุณจะเริ่มขึ้น</translation>
+<translation id="2851674870054673688">เมื่อพวกเขาป้อนรหัสแล้ว เซสชันการแชร์ของคุณจะเริ่มขึ้น</translation>
 <translation id="5593560073513909978">ไม่สามารถให้บริการนี้ได้ชั่วคราว โปรดลองอีกครั้งในภายหลัง</translation>
 <translation id="3908017899227008678">ลดขนาดให้พอดี</translation>
 <translation id="8073845705237259513">ในการใช้ Chrome Remote Desktop คุณจะต้องเพิ่มบัญชี Google ลงในอุปกรณ์ของคุณ</translation>
 <translation id="1199593201721843963">ปิดใช้งานการเชื่อมต่อระยะไกล</translation>
-<translation id="5379087427956679853">Chrome Remote Desktop อนุญาตให้คุณแบ่งปันคอมพิวเตอร์ของคุณผ่านเว็บอย่างปลอดภัย ผู้ใช้ทั้งสองฝ่ายจะต้องเรียกใช้แอปพลิเคชัน Chrome Remote Desktop ซึ่งสามารถรับได้ที่ <ph name="URL"/></translation>
+<translation id="5379087427956679853">Chrome Remote Desktop อนุญาตให้คุณแชร์คอมพิวเตอร์ของคุณผ่านเว็บอย่างปลอดภัย ผู้ใช้ทั้งสองฝ่ายจะต้องเรียกใช้แอปพลิเคชัน Chrome Remote Desktop ซึ่งสามารถรับได้ที่ <ph name="URL"/></translation>
 <translation id="1409991159633941777">องค์ประกอบที่จำเป็นบางอย่างสำหรับ Chrome Remote Desktop ขาดหายไป โปรดตรวจสอบให้แน่ใจว่าคุณใช้ Chrome เวอร์ชันล่าสุดแล้วและลองอีกครั้ง</translation>
 <translation id="174018511426417793">คุณไม่มีคอมพิวเตอร์ที่ได้ลงทะเบียนไว้ หากต้องการเปิดใช้งานการเชื่อมต่อระยะไกลกับคอมพิวเตอร์ ให้ติดตั้ง Chrome Remote Desktop ที่คอมพิวเตอร์ที่ต้องการใช้งานและคลิก &quot;<ph name="BUTTON_NAME"/>&quot;</translation>
 <translation id="9126115402994542723">อย่าขอ PIN อีกเมื่อเชื่อมต่อไปยังโฮสต์นี้จากอุปกรณ์เครื่องนี้</translation>
@@ -86,7 +86,7 @@
 <translation id="8228265668171617545">พบ Chromoting ในเวอร์ชันที่ไม่สามารถทำงานร่วมกัน โปรดตรวจสอบให้แน่ใจว่าคุณมี Chrome และ Chromoting เวอร์ชันล่าสุดในคอมพิวเตอร์ทั้งสองเครื่องและลองอีกครั้ง</translation>
 <translation id="6985691951107243942">คุณแน่ใจหรือไม่ว่าต้องการปิดใช้งานการเชื่อมต่อระยะไกลกับ <ph name="HOSTNAME"/> หากคุณเปลี่ยนใจภายหลัง คุณจะต้องไปที่คอมพิวเตอร์เครื่องนั้นเพื่อเปิดใช้งานการเชื่อมต่ออีกครั้ง</translation>
 <translation id="1436054138039008644"><ph name="HOSTNAME"/> (ออนไลน์ล่าสุด <ph name="DATE"/>)</translation>
-<translation id="9149992051684092333">หากต้องการเริ่มการแบ่งปันเดสก์ท็อปของคุณ โปรดให้รหัสการเข้าถึงที่ด้านล่างนี้แก่บุคคลที่จะให้ความช่วยเหลือคุณ</translation>
+<translation id="9149992051684092333">หากต้องการเริ่มการแชร์เดสก์ท็อปของคุณ โปรดให้รหัสการเข้าถึงที่ด้านล่างนี้แก่บุคคลที่จะให้ความช่วยเหลือคุณ</translation>
 <translation id="409800995205263688">หมายเหตุ: การตั้งค่านโยบายอนุญาตเฉพาะการเชื่อมต่อระหว่างคอมพิวเตอร์ภายในเครือข่ายของคุณเท่านั้น</translation>
 <translation id="8513093439376855948">โฮสต์การรับส่งข้อความดั้งเดิมสำหรับการจัดการโฮสต์ระยะไกล</translation>
 <translation id="2353140552984634198">คุณสามารถเข้าถึงคอมพิวเตอร์เครื่องนี้ได้อย่างปลอดภัยโดยใช้ Chromoting</translation>
@@ -152,15 +152,15 @@
 <translation id="2078880767960296260">Host Process</translation>
 <translation id="1643640058022401035">การออกจากหน้าเว็บนี้จะเป็นการสิ้นสุดเซสชัน Chromoting ของคุณ</translation>
 <translation id="8261506727792406068">ลบ</translation>
-<translation id="2235518894410572517">แบ่งปันคอมพิวเตอร์นี้เพื่อให้ผู้ใช้อื่นเห็นและควบคุมคอมพิวเตอร์ได้</translation>
+<translation id="2235518894410572517">แชร์คอมพิวเตอร์นี้เพื่อให้ผู้ใช้อื่นเห็นและควบคุมคอมพิวเตอร์ได้</translation>
 <translation id="6939719207673461467">แสดง/ซ่อนแป้นพิมพ์</translation>
-<translation id="1023096696228309145">ขอให้ผู้ใช้ที่คุณต้องการเข้าถึงคอมพิวเตอร์ของเขาคลิกที่ &quot;แบ่งปันเดี๋ยวนี้&quot; และให้รหัสการเข้าถึงแก่คุณ</translation>
+<translation id="1023096696228309145">ขอให้ผู้ใช้ที่คุณต้องการเข้าถึงคอมพิวเตอร์ของเขาคลิกที่ &quot;แชร์เดี๋ยวนี้&quot; และให้รหัสการเข้าถึงแก่คุณ</translation>
 <translation id="4240294130679914010">Chromoting Host Uninstaller</translation>
 <translation id="80739703311984697">โฮสต์ระยะไกลกำหนดให้คุณตรวจสอบสิทธิ์กับเว็บไซต์ของบุคคลที่สาม หากต้องการดำเนินการต่อ คุณต้องให้สิทธิ์อนุญาตเพิ่มเติมแก่ Chromoting เพื่อเข้าถึงที่อยู่นี้:</translation>
 <translation id="4006787130661126000">คุณต้องเปิดใช้งานการเชื่อมต่อระยะไกลหากคุณต้องการใช้ Chrome Remote Desktop ในการเข้าถึงคอมพิวเตอร์เครื่องนี้</translation>
 <translation id="177096447311351977">IP ช่องสำหรับไคลเอ็นต์: <ph name="CLIENT_GAIA_IDENTIFIER"/> ip='<ph name="CLIENT_IP_ADDRESS_AND_PORT"/>' host_ip='<ph name="HOST_IP_ADDRESS_AND_PORT"/>' channel='<ph name="CHANNEL_TYPE"/>' connection='<ph name="CONNECTION_TYPE"/>'.</translation>
 <translation id="6930242544192836755">ระยะเวลา</translation>
-<translation id="6527303717912515753">แบ่งปัน</translation>
+<translation id="6527303717912515753">แชร์</translation>
 <translation id="2926340305933667314">ไม่สามารถปิดใช้งานการเข้าถึงคอมพิวเตอร์เครื่องนี้จากระยะไกล โปรดลองอีกครั้งในภายหลัง</translation>
 <translation id="6865175692670882333">ดู/แก้ไข</translation>
 <translation id="5859141382851488196">หน้าต่างใหม่…</translation>
@@ -183,11 +183,11 @@
 Desktop Host</translation>
 <translation id="4703799847237267011">เซสชัน Chromoting ของคุณได้สิ้นสุดลงแล้ว</translation>
 <translation id="1369030621715708553">PrtScn</translation>
-<translation id="8178433417677596899">การแบ่งปันหน้าจอระหว่างผู้ใช้กับผู้ใช้ เหมาะสำหรับการสนับสนุนทางเทคนิคจากระยะไกล</translation>
+<translation id="8178433417677596899">การแชร์หน้าจอระหว่างผู้ใช้กับผู้ใช้ เหมาะสำหรับการสนับสนุนทางเทคนิคจากระยะไกล</translation>
 <translation id="652218476070540101">กำลังอัปเดต PIN สำหรับคอมพิวเตอร์เครื่องนี้…</translation>
 <translation id="4563926062592110512">ไคลเอ็นต์ที่ยกเลิกการเชื่อมต่อ: <ph name="CLIENT_USERNAME"/></translation>
 <translation id="5308380583665731573">เชื่อมต่อ</translation>
-<translation id="7319983568955948908">หยุดการแบ่งปัน</translation>
+<translation id="7319983568955948908">หยุดการแชร์</translation>
 <translation id="6681800064886881394">ลิขสิทธิ์ 2013 Google Inc. สงวนลิขสิทธิ์</translation>
 <translation id="8038108135592087998">Chrome Remote Desktop รุ่นแรกสำหรับแอนดรอยด์</translation>
 <translation id="6668065415969892472">PIN ของคุณได้รับการอัปเดตแล้ว</translation>
@@ -196,8 +196,8 @@
 <translation id="979100198331752041">Chrome Remote Desktop บน <ph name="HOSTNAME"/> เก่าเกินไปและต้องมีการอัปเดต</translation>
 <translation id="7729639150174291243">คุณยังไม่ได้ลงชื่อเข้าใช้ Chrome Remote Desktop โปรดลงชื่อเข้าใช้และลองอีกครั้ง</translation>
 <translation id="2841013758207633010">เวลา</translation>
-<translation id="6011539954251327702">Chromoting ช่วยให้คุณแบ่งปันคอมพิวเตอร์ผ่านเว็บได้อย่างปลอดภัย ผู้ใช้ทั้งสองฝ่ายจะต้องใช้งานแอปพลิเคชัน Chromoting ซึ่งสามารถรับได้ที่ <ph name="URL"/></translation>
-<translation id="2919669478609886916">ขณะนี้คุณกำลังแบ่งปันคอมพิวเตอร์เครื่องนี้กับผู้ใช้อื่น คุณต้องการแบ่งปันต่อไปหรือไม่</translation>
+<translation id="6011539954251327702">Chromoting ช่วยให้คุณแชร์คอมพิวเตอร์ผ่านเว็บได้อย่างปลอดภัย ผู้ใช้ทั้งสองฝ่ายจะต้องใช้งานแอปพลิเคชัน Chromoting ซึ่งสามารถรับได้ที่ <ph name="URL"/></translation>
+<translation id="2919669478609886916">ขณะนี้คุณกำลังแชร์คอมพิวเตอร์เครื่องนี้กับผู้ใช้อื่น คุณต้องการแชร์ต่อไปหรือไม่</translation>
 <translation id="4207623512727273241">โปรดเรียกใช้ตัวติดตั้งก่อนดำเนินการต่อ</translation>
 <translation id="3596628256176442606">บริการนี้จะช่วยให้สามารถใช้การเชื่อมต่อขาเข้าจากไคลเอ็นต์ Chromoting</translation>
 <translation id="4277463233460010382">คอมพิวเตอร์เครื่องนี้ได้รับการกำหนดค่าให้อนุญาตไคลเอ็นต์หนึ่งหรือมากกว่าสามารถเชื่อมต่อโดยไม่ต้องป้อน PIN</translation>
@@ -208,7 +208,7 @@
 <translation id="1546934824884762070">เกิดข้อผิดพลาดที่ไม่คาดคิด โปรดรายงานปัญหานี้ให้นักพัฒนาซอฟต์แวร์ทราบ</translation>
 <translation id="6965382102122355670">ตกลง</translation>
 <translation id="7434397035092923453">การเข้าถึงถูกปฏิเสธสำหรับไคลเอ็นต์: <ph name="CLIENT_USERNAME"/></translation>
-<translation id="3403830762023901068">การตั้งค่านโยบายไม่อนุญาตให้แบ่งปันคอมพิวเตอร์นี้เป็นโฮสต์ Chromoting โปรดติดต่อขอรับความช่วยเหลือจากผู้ดูแลระบบของคุณ</translation>
+<translation id="3403830762023901068">การตั้งค่านโยบายไม่อนุญาตให้แชร์คอมพิวเตอร์นี้เป็นโฮสต์ Chromoting โปรดติดต่อขอรับความช่วยเหลือจากผู้ดูแลระบบของคุณ</translation>
 <translation id="7312846573060934304">โฮสต์ออฟไลน์</translation>
 <translation id="9016232822027372900">ยังต้องการเชื่อมต่อ</translation>
 <translation id="1818475040640568770">คอมพิวเตอร์ของคุณยังไม่ได้ลงทะเบียน</translation>
diff --git a/remoting/webapp/feedback.js b/remoting/webapp/feedback.js
index 1ecbc19..74e4ff9 100644
--- a/remoting/webapp/feedback.js
+++ b/remoting/webapp/feedback.js
@@ -10,14 +10,26 @@
  * Show or hide the feedback button based on whether or not the current version
  * of Chrome recognizes Chrome Remote Desktop as an authorized feedback source.
  *
- * @param {HTMLElement} feedbackButton
+ * @param {HTMLElement} helpIcon The parent <span> for the help icon and the
+ *     <ul> containing the help and feedback entries.
+ * @param {HTMLElement} helpButton The Help <li> associated with the help icon.
+ * @param {HTMLElement} feedbackButton The Feedback <li> associated with the
+ *     help icon.
+ * @constructor
  */
-remoting.initFeedback = function(feedbackButton) {
+remoting.Feedback = function(helpIcon, helpButton, feedbackButton) {
+  var menuButton = new remoting.MenuButton(helpIcon);
+  var showHelp = function() {
+    window.open('https://www.google.com/support/chrome/bin/answer.py?' +
+                'answer=1649523');
+  }
+  helpButton.addEventListener('click', showHelp, false);
   var chromeVersion = parseInt(
       window.navigator.appVersion.match(/Chrome\/(\d+)\./)[1], 10);
   if (chromeVersion >= 35) {
-    feedbackButton.hidden = false;
-    feedbackButton.addEventListener('click', remoting.sendFeedback, false);
+    feedbackButton.addEventListener('click',
+                                    this.sendFeedback_.bind(this),
+                                    false);
   } else {
     feedbackButton.hidden = true;
   }
@@ -27,7 +39,7 @@
  * Pass the current version of Chrome Remote Desktop to the Google Feedback
  * extension and instruct it to show the feedback dialog.
  */
-remoting.sendFeedback = function() {
+remoting.Feedback.prototype.sendFeedback_ = function() {
   var message = {
     requestFeedback: true,
     feedbackInfo: {
diff --git a/remoting/webapp/host_dispatcher.js b/remoting/webapp/host_dispatcher.js
index a156697..6861e38 100644
--- a/remoting/webapp/host_dispatcher.js
+++ b/remoting/webapp/host_dispatcher.js
@@ -334,8 +334,7 @@
 remoting.HostDispatcher.prototype.installHost = function(onDone, onError) {
   switch (this.state_) {
     case remoting.HostDispatcher.State.UNKNOWN:
-      this.pendingRequests_.push(
-          this.startDaemon.bind(this, config, consent, onDone, onError));
+      this.pendingRequests_.push(this.installHost.bind(this, onDone, onError));
       break;
     case remoting.HostDispatcher.State.NATIVE_MESSAGING:
       // Host already installed, no action needed.
diff --git a/remoting/webapp/html/toolbar.html b/remoting/webapp/html/toolbar.html
index 6838f49..eeead15 100644
--- a/remoting/webapp/html/toolbar.html
+++ b/remoting/webapp/html/toolbar.html
@@ -27,7 +27,7 @@
     </button>
 
     <span class="menu-button" id="send-keys-menu">
-      <button>
+      <button class="menu-button-activator">
         <span i18n-content="SEND_KEYS"></span>
         <img src="disclosure_arrow_down.webp"
              class="kd-disclosureindicator">
@@ -39,7 +39,7 @@
     </span>
 
     <span class="menu-button" id="screen-options-menu">
-      <button>
+      <button class="menu-button-activator">
         <span i18n-content="SCREEN_OPTIONS"></span>
         <img src="disclosure_arrow_down.webp"
              class="kd-disclosureindicator">
@@ -53,6 +53,14 @@
       </ul>
     </span>
 
+    <span class="menu-button" id="help-feedback-toolbar">
+      <img src="icon_help.webp" class="menu-button-activator help-icon">
+      <ul class="right-align">
+        <li id="help-toolbar" i18n-content="HELP"></li>
+        <li id="send-feedback-toolbar" i18n-content="ACTIONBAR_FEEDBACK"></li>
+      </ul>
+    </span>
+
   </div>
 
   <div class="toolbar-stub" id="toolbar-stub">
diff --git a/remoting/webapp/html/ui_header.html b/remoting/webapp/html/ui_header.html
index 45551fc..19e1795 100644
--- a/remoting/webapp/html/ui_header.html
+++ b/remoting/webapp/html/ui_header.html
@@ -12,18 +12,18 @@
 
   <div class="box-spacer"></div>
 
-  <div id="top-secondary">
+  <div id="top-secondary" data-ui-mode="home">
     <span id="current-email"></span>
-    <span data-ui-mode="home" class="apps-v1-only">
-      <a id="sign-out" href="#" i18n-content="SIGN_OUT_BUTTON"></a>
-      <!-- TODO(jamiewalch): Add this back in when we support it.
-           <a id="connection-history"
-              i18n-content="CONNECTION_HISTORY_BUTTON"></a> |
-           -->
-    </span> |
-    <a href="https://www.google.com/support/chrome/bin/answer.py?answer=1649523"
-       target="_blank" i18n-content="HELP"></a> |
-    <a id="send-feedback" i18n-content="ACTIONBAR_FEEDBACK"></a>
+    <a id="sign-out" href="#"
+       i18n-content="SIGN_OUT_BUTTON"
+       class="apps-v1-only"></a>
+    <span class="menu-button" id="help-feedback-main">
+      <img src="icon_help.webp" class="menu-button-activator help-icon">
+      <ul class="right-align">
+        <li id="help-main" i18n-content="HELP"></li>
+        <li id="send-feedback-main" i18n-content="ACTIONBAR_FEEDBACK"></li>
+      </ul>
+    </span>
   </div>
 
 </header>
diff --git a/remoting/webapp/menu_button.css b/remoting/webapp/menu_button.css
index d495624..d20750a 100644
--- a/remoting/webapp/menu_button.css
+++ b/remoting/webapp/menu_button.css
@@ -7,18 +7,24 @@
   position: relative;
 }
 
-.menu-button button + ul {
+.menu-button-activator + ul {
   visibility: hidden;
   position: absolute;
-  top: 22px;
+}
+
+.menu-button-activator + ul:not(.right-align) {
   left: 1px;
 }
 
-.menu-button button.active + ul {
+.menu-button-activator + ul.right-align {
+  right: 1px;
+}
+
+.menu-button-activator.active + ul {
   visibility: visible;
 }
 
-.menu-button button.active {
+.menu-button-activator.active {
   background-color: #EEE;
   background-image: -webkit-gradient(linear, left top, left bottom,
                                      from(#EEE), to(#E0E0E0));
@@ -27,7 +33,7 @@
   color: #333;
 }
 
-.menu-button button .kd-disclosureindicator {
+.menu-button-activator .kd-disclosureindicator {
   vertical-align: middle;
   margin-left: 7px;
   opacity: .8;
@@ -64,4 +70,20 @@
   background-image: url('tick.webp');
   background-position: left center;
   background-repeat: no-repeat;
+}
+
+.help-icon {
+  vertical-align: -4px;
+  border: 1px solid transparent;
+  opacity: 0.35;
+  -webkit-transition: opacity 0.218s;
+}
+
+.help-icon:hover, .help-icon.active {
+  opacity: 0.5;
+}
+
+#help-feedback-toolbar {
+  margin-left: 8px;
+  margin-top: 4px;
 }
\ No newline at end of file
diff --git a/remoting/webapp/menu_button.js b/remoting/webapp/menu_button.js
index c429210..225e0e7 100644
--- a/remoting/webapp/menu_button.js
+++ b/remoting/webapp/menu_button.js
@@ -24,7 +24,8 @@
    * @type {HTMLElement}
    * @private
    */
-  this.button_ = /** @type {HTMLElement} */ (container.querySelector('button'));
+  this.button_ = /** @type {HTMLElement} */
+      (container.querySelector('button,.menu-button-activator'));
 
   /**
    * @type {undefined|function():void}
diff --git a/remoting/webapp/remoting.js b/remoting/webapp/remoting.js
index b59ec6e..d015832 100644
--- a/remoting/webapp/remoting.js
+++ b/remoting/webapp/remoting.js
@@ -82,6 +82,14 @@
   var sandbox = /** @type {HTMLIFrameElement} */
       document.getElementById('wcs-sandbox');
   remoting.wcsSandbox = new remoting.WcsSandboxContainer(sandbox.contentWindow);
+  var menuFeedback = new remoting.Feedback(
+      document.getElementById('help-feedback-main'),
+      document.getElementById('help-main'),
+      document.getElementById('send-feedback-main'));
+  var toolbarFeedback = new remoting.Feedback(
+      document.getElementById('help-feedback-toolbar'),
+      document.getElementById('help-toolbar'),
+      document.getElementById('send-feedback-toolbar'));
 
   /** @param {remoting.Error} error */
   var onGetEmailError = function(error) {
@@ -102,7 +110,6 @@
   window.addEventListener('copy', pluginGotCopy_, false);
 
   remoting.initModalDialogs();
-  remoting.initFeedback(document.getElementById('send-feedback'));
 
   if (isHostModeSupported_()) {
     var noShare = document.getElementById('chrome-os-no-share');
diff --git a/rlz/lib/lib_values.cc b/rlz/lib/lib_values.cc
index 06113a8..80e987a 100644
--- a/rlz/lib/lib_values.cc
+++ b/rlz/lib/lib_values.cc
@@ -99,7 +99,10 @@
   case CHROMEOS_HOME_PAGE:            return "CB";
   case CHROMEOS_APP_LIST:             return "CC";
   case CHROME_IOS_OMNIBOX:            return "C9";
-  case CHROME_IOS_RESERVED:           return "C0";
+  // Returns an invalid access point value here as this value does not
+  // correspond to a defined access point, but need to be defined for
+  // code that iterates over all values of rlz_lib::AccessPoint.
+  case CHROME_IOS_RESERVED:           return "__";
   case CHROME_APP_LIST:               return "C7";
   case CHROME_MAC_APP_LIST:           return "C8";
   case UNDEFINED_AP_Q:                return "RQ";
diff --git a/rlz/lib/lib_values_unittest.cc b/rlz/lib/lib_values_unittest.cc
index 7e8fa83..3fcda4f 100644
--- a/rlz/lib/lib_values_unittest.cc
+++ b/rlz/lib/lib_values_unittest.cc
@@ -32,8 +32,13 @@
 
   EXPECT_FALSE(rlz_lib::GetAccessPointFromName("T4 ", &point));
   EXPECT_EQ(rlz_lib::NO_ACCESS_POINT, point);
-}
 
+  for (int ap = rlz_lib::NO_ACCESS_POINT + 1;
+       ap < rlz_lib::LAST_ACCESS_POINT; ++ap) {
+    rlz_lib::AccessPoint point = static_cast<rlz_lib::AccessPoint>(ap);
+    EXPECT_TRUE(GetAccessPointName(point) != NULL);
+  }
+}
 
 TEST(LibValuesUnittest, GetEventFromName) {
   rlz_lib::SetExpectedAssertion("GetEventFromName: event is NULL");
diff --git a/rlz/lib/rlz_lib.cc b/rlz/lib/rlz_lib.cc
index 39bec27..95e3e09 100644
--- a/rlz/lib/rlz_lib.cc
+++ b/rlz/lib/rlz_lib.cc
@@ -30,6 +30,7 @@
   switch (point) {
   case rlz_lib::NO_ACCESS_POINT:
   case rlz_lib::LAST_ACCESS_POINT:
+  case rlz_lib::CHROME_IOS_RESERVED:
 
   case rlz_lib::MOBILE_IDLE_SCREEN_BLACKBERRY:
   case rlz_lib::MOBILE_IDLE_SCREEN_WINMOB:
diff --git a/sandbox/linux/sandbox_linux.gypi b/sandbox/linux/sandbox_linux.gypi
index 75f37c9..0cccd2e 100644
--- a/sandbox/linux/sandbox_linux.gypi
+++ b/sandbox/linux/sandbox_linux.gypi
@@ -57,6 +57,22 @@
       ],
     },
     {
+      'target_name': 'sandbox_linux_test_utils',
+      'type': 'static_library',
+      'dependencies': [
+        '../testing/gtest.gyp:gtest',
+      ],
+      'include_dirs': [
+        '../..',
+      ],
+      'sources': [
+        'tests/test_utils.cc',
+        'tests/test_utils.h',
+        'tests/unit_tests.cc',
+        'tests/unit_tests.h',
+      ],
+    },
+    {
       # The main sandboxing test target.
       'target_name': 'sandbox_linux_unittests',
       'includes': [
@@ -294,10 +310,6 @@
         'type': 'none',
         'variables': {
           'test_suite_name': 'sandbox_linux_jni_unittests',
-          'input_shlib_path':
-              '<(SHARED_LIB_DIR)/<(SHARED_LIB_PREFIX)'
-              'sandbox_linux_jni_unittests'
-              '<(SHARED_LIB_SUFFIX)',
         },
         'dependencies': [
           'sandbox_linux_jni_unittests',
diff --git a/sandbox/linux/sandbox_linux_test_sources.gypi b/sandbox/linux/sandbox_linux_test_sources.gypi
index 01db0e9..ffbf9c6 100644
--- a/sandbox/linux/sandbox_linux_test_sources.gypi
+++ b/sandbox/linux/sandbox_linux_test_sources.gypi
@@ -7,6 +7,7 @@
 {
   'dependencies': [
     'sandbox',
+    'sandbox_linux_test_utils',
     '../base/base.gyp:base',
     '../base/base.gyp:test_support_base',
     '../testing/gtest.gyp:gtest',
@@ -16,10 +17,6 @@
   ],
   'sources': [
     'tests/main.cc',
-    'tests/test_utils.cc',
-    'tests/test_utils.h',
-    'tests/unit_tests.cc',
-    'tests/unit_tests.h',
     'tests/unit_tests_unittest.cc',
     'services/broker_process_unittest.cc',
     'services/scoped_process_unittest.cc',
diff --git a/sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.cc b/sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.cc
index 4cefa4c..47c9989 100644
--- a/sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.cc
+++ b/sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.cc
@@ -13,6 +13,11 @@
 #include "build/build_config.h"
 #include "sandbox/linux/seccomp-bpf/sandbox_bpf.h"
 
+#define SECCOMP_MESSAGE_COMMON_CONTENT "seccomp-bpf failure"
+#define SECCOMP_MESSAGE_CLONE_CONTENT "clone() failure"
+#define SECCOMP_MESSAGE_PRCTL_CONTENT "prctl() failure"
+#define SECCOMP_MESSAGE_IOCTL_CONTENT "ioctl() failure"
+
 namespace {
 
 inline bool IsArchitectureX86_64() {
@@ -54,7 +59,7 @@
     sysno_base10[i] = '0' + mod;
   }
   static const char kSeccompErrorPrefix[] =
-      __FILE__":**CRASHING**:seccomp-bpf failure in syscall ";
+      __FILE__":**CRASHING**:" SECCOMP_MESSAGE_COMMON_CONTENT " in syscall ";
   static const char kSeccompErrorPostfix[] = "\n";
   WriteToStdErr(kSeccompErrorPrefix, sizeof(kSeccompErrorPrefix) - 1);
   WriteToStdErr(sysno_base10, sizeof(sysno_base10));
@@ -95,7 +100,7 @@
 
 intptr_t SIGSYSCloneFailure(const struct arch_seccomp_data& args, void* aux) {
   static const char kSeccompCloneError[] =
-      __FILE__":**CRASHING**:clone() failure\n";
+      __FILE__":**CRASHING**:" SECCOMP_MESSAGE_CLONE_CONTENT "\n";
   WriteToStdErr(kSeccompCloneError, sizeof(kSeccompCloneError) - 1);
   // "flags" is the first argument in the kernel's clone().
   // Mark as volatile to be able to find the value on the stack in a minidump.
@@ -115,7 +120,7 @@
 intptr_t SIGSYSPrctlFailure(const struct arch_seccomp_data& args,
                             void* /* aux */) {
   static const char kSeccompPrctlError[] =
-      __FILE__":**CRASHING**:prctl() failure\n";
+      __FILE__":**CRASHING**:" SECCOMP_MESSAGE_PRCTL_CONTENT "\n";
   WriteToStdErr(kSeccompPrctlError, sizeof(kSeccompPrctlError) - 1);
   // Mark as volatile to be able to find the value on the stack in a minidump.
   volatile uint64_t option = args.args[0];
@@ -129,7 +134,7 @@
 intptr_t SIGSYSIoctlFailure(const struct arch_seccomp_data& args,
                             void* /* aux */) {
   static const char kSeccompIoctlError[] =
-      __FILE__":**CRASHING**:ioctl() failure\n";
+      __FILE__":**CRASHING**:" SECCOMP_MESSAGE_IOCTL_CONTENT "\n";
   WriteToStdErr(kSeccompIoctlError, sizeof(kSeccompIoctlError) - 1);
   // Make "request" volatile so that we can see it on the stack in a minidump.
   volatile uint64_t request = args.args[1];
@@ -142,4 +147,20 @@
     _exit(1);
 }
 
+const char* GetErrorMessageContentForTests() {
+  return SECCOMP_MESSAGE_COMMON_CONTENT;
+}
+
+const char* GetCloneErrorMessageContentForTests() {
+  return SECCOMP_MESSAGE_CLONE_CONTENT;
+}
+
+const char* GetPrctlErrorMessageContentForTests() {
+  return SECCOMP_MESSAGE_PRCTL_CONTENT;
+}
+
+const char* GetIoctlErrorMessageContentForTests() {
+  return SECCOMP_MESSAGE_IOCTL_CONTENT;
+}
+
 }  // namespace sandbox.
diff --git a/sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.h b/sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.h
index 0bada37..b8f626a 100644
--- a/sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.h
+++ b/sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.h
@@ -39,6 +39,13 @@
 SANDBOX_EXPORT intptr_t
     SIGSYSIoctlFailure(const struct arch_seccomp_data& args, void* aux);
 
+// Following four functions return substrings of error messages used
+// in the above four functions. They are useful in death tests.
+SANDBOX_EXPORT const char* GetErrorMessageContentForTests();
+SANDBOX_EXPORT const char* GetCloneErrorMessageContentForTests();
+SANDBOX_EXPORT const char* GetPrctlErrorMessageContentForTests();
+SANDBOX_EXPORT const char* GetIoctlErrorMessageContentForTests();
+
 }  // namespace sandbox.
 
 #endif  // SANDBOX_LINUX_SECCOMP_BPF_HELPERS_SIGSYS_HANDLERS_H_
diff --git a/sandbox/linux/seccomp-bpf/bpf_tests.h b/sandbox/linux/seccomp-bpf/bpf_tests.h
index cc3fc25..357e29c 100644
--- a/sandbox/linux/seccomp-bpf/bpf_tests.h
+++ b/sandbox/linux/seccomp-bpf/bpf_tests.h
@@ -44,6 +44,12 @@
 
 // Assertions are handled exactly the same as with a normal SANDBOX_TEST()
 #define BPF_ASSERT SANDBOX_ASSERT
+#define BPF_ASSERT_EQ(x, y) BPF_ASSERT((x) == (y))
+#define BPF_ASSERT_NE(x, y) BPF_ASSERT((x) != (y))
+#define BPF_ASSERT_LT(x, y) BPF_ASSERT((x) < (y))
+#define BPF_ASSERT_GT(x, y) BPF_ASSERT((x) > (y))
+#define BPF_ASSERT_LE(x, y) BPF_ASSERT((x) <= (y))
+#define BPF_ASSERT_GE(x, y) BPF_ASSERT((x) >= (y))
 
 // The "Aux" type is optional. We use an "empty" type by default, so that if
 // the caller doesn't provide any type, all the BPF_AUX related data compiles
diff --git a/sandbox/linux/services/broker_process_unittest.cc b/sandbox/linux/services/broker_process_unittest.cc
index 073eba8..a1f38df 100644
--- a/sandbox/linux/services/broker_process_unittest.cc
+++ b/sandbox/linux/services/broker_process_unittest.cc
@@ -6,6 +6,7 @@
 
 #include <errno.h>
 #include <fcntl.h>
+#include <sys/resource.h>
 #include <sys/stat.h>
 #include <sys/types.h>
 #include <sys/wait.h>
diff --git a/sandbox/linux/suid/client/setuid_sandbox_client.cc b/sandbox/linux/suid/client/setuid_sandbox_client.cc
index 8feec04..3300cb4 100644
--- a/sandbox/linux/suid/client/setuid_sandbox_client.cc
+++ b/sandbox/linux/suid/client/setuid_sandbox_client.cc
@@ -4,6 +4,7 @@
 
 #include "sandbox/linux/suid/client/setuid_sandbox_client.h"
 
+#include <fcntl.h>
 #include <sys/stat.h>
 #include <sys/types.h>
 #include <sys/wait.h>
@@ -13,10 +14,13 @@
 #include "base/environment.h"
 #include "base/file_util.h"
 #include "base/files/file_path.h"
+#include "base/files/scoped_file.h"
 #include "base/logging.h"
+#include "base/macros.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/path_service.h"
 #include "base/posix/eintr_wrapper.h"
+#include "base/process/launch.h"
 #include "base/process/process_metrics.h"
 #include "base/strings/string_number_conversions.h"
 #include "sandbox/linux/services/init_process_reaper.h"
@@ -25,6 +29,11 @@
 
 namespace {
 
+bool IsFileSystemAccessDenied() {
+  base::ScopedFD self_exe(HANDLE_EINTR(open(base::kProcSelfExe, O_RDONLY)));
+  return !self_exe.is_valid();
+}
+
 // Set an environment variable that reflects the API version we expect from the
 // setuid sandbox. Old versions of the sandbox will ignore this.
 void SetSandboxAPIEnvironmentVariable(base::Environment* env) {
@@ -32,6 +41,26 @@
               base::IntToString(sandbox::kSUIDSandboxApiNumber));
 }
 
+// Unset environment variables that are expected to be set by the setuid
+// sandbox. This is to allow nesting of one instance of the SUID sandbox
+// inside another.
+void UnsetExpectedEnvironmentVariables(base::EnvironmentMap* env_map) {
+  DCHECK(env_map);
+  const base::NativeEnvironmentString environment_vars[] = {
+      sandbox::kSandboxDescriptorEnvironmentVarName,
+      sandbox::kSandboxHelperPidEnvironmentVarName,
+      sandbox::kSandboxEnvironmentApiProvides,
+      sandbox::kSandboxPIDNSEnvironmentVarName,
+      sandbox::kSandboxNETNSEnvironmentVarName,
+  };
+
+  for (size_t i = 0; i < arraysize(environment_vars); ++i) {
+    // Setting values in EnvironmentMap to an empty-string will make
+    // sure that they get unset from the environment via AlterEnvironment().
+    (*env_map)[environment_vars[i]] = base::NativeEnvironmentString();
+  }
+}
+
 // Wrapper around a shared C function.
 // Returns the "saved" environment variable name corresponding to |envvar|
 // in a new string or NULL.
@@ -157,6 +186,7 @@
 
   // We now consider ourselves "fully sandboxed" as far as the
   // setuid sandbox is concerned.
+  CHECK(IsFileSystemAccessDenied());
   sandboxed_ = true;
   return true;
 }
@@ -196,6 +226,12 @@
   return false;
 }
 
+int SetuidSandboxClient::GetUniqueToChildFileDescriptor() {
+  // The setuid binary is hard-wired to close this in the helper process it
+  // creates.
+  return kZygoteIdFd;
+}
+
 base::FilePath SetuidSandboxClient::GetSandboxBinaryPath() {
   base::FilePath sandbox_binary;
   base::FilePath exe_dir;
@@ -220,8 +256,8 @@
   return sandbox_binary;
 }
 
-void SetuidSandboxClient::PrependWrapper(base::CommandLine* cmd_line) {
-  DCHECK(cmd_line);
+void SetuidSandboxClient::PrependWrapper(base::CommandLine* cmd_line,
+                                         base::LaunchOptions* options) {
   std::string sandbox_binary(GetSandboxBinaryPath().value());
   struct stat st;
   if (sandbox_binary.empty() || stat(sandbox_binary.c_str(), &st) != 0) {
@@ -237,10 +273,17 @@
                   "configured correctly. Rather than run without sandboxing "
                   "I'm aborting now. You need to make sure that "
                << sandbox_binary << " is owned by root and has mode 4755.";
+  }
 
-  } else {
+  if (cmd_line) {
     cmd_line->PrependWrapper(sandbox_binary);
   }
+
+  if (options) {
+    // Launching a setuid binary requires PR_SET_NO_NEW_PRIVS to not be used.
+    options->allow_new_privs = true;
+    UnsetExpectedEnvironmentVariables(&options->environ);
+  }
 }
 
 void SetuidSandboxClient::SetupLaunchEnvironment() {
diff --git a/sandbox/linux/suid/client/setuid_sandbox_client.h b/sandbox/linux/suid/client/setuid_sandbox_client.h
index 20a9905..332c63b 100644
--- a/sandbox/linux/suid/client/setuid_sandbox_client.h
+++ b/sandbox/linux/suid/client/setuid_sandbox_client.h
@@ -13,6 +13,7 @@
 namespace base {
 class CommandLine;
 class Environment;
+struct LaunchOptions;
 }
 
 namespace sandbox {
@@ -20,11 +21,30 @@
 // Helper class to use the setuid sandbox. This class is to be used both
 // before launching the setuid helper and after being executed through the
 // setuid helper.
+// This class is difficult to use. It has been created by refactoring very old
+// code scathered through the Chromium code base.
 //
-// A typical use would be:
-// 1. The browser calls SetupLaunchEnvironment()
-// 2. The browser launches a renderer through the setuid sandbox.
-// 3. The renderer requests being chroot-ed through ChrootMe() and
+// A typical use for "A" launching a sandboxed process "B" would be:
+// 1. A calls SetupLaunchEnvironment()
+// 2. A sets up a CommandLine and then amends it with
+//    PrependWrapper() (or manually, by relying on GetSandboxBinaryPath()).
+// 3. A makes sure that GetUniqueToChildFileDescriptor() is an existing file
+//    descriptor that can be closed by the helper process created by the
+//    setuid sandbox. (This is the right file descriptor to use for magic
+//    "must-be-unique" sockets that are use to identify processes across
+//    pid namespaces.)
+// 4. A launches B with base::LaunchProcess, using the amended CommandLine.
+// 5. B performs various initializations that require access to the file
+//    system.
+// 5.b (optional) B uses sandbox::Credentials::HasOpenDirectory() to verify
+//    that no directory is kept open (which would allow bypassing the setuid
+//    sandbox).
+// 6. B should be prepared to assume the role of init(1). In particular, B
+//    cannot receive any signal from any other process, excluding SIGKILL.
+//    If B dies, all the processes in the namespace will die.
+//    B can fork() and the parent can assume the role of init(1), by using
+//    CreateInitProcessReaper().
+// 7. B requests being chroot-ed through ChrootMe() and
 //    requests other sandboxing status via the status functions.
 class SANDBOX_EXPORT SetuidSandboxClient {
  public:
@@ -53,14 +73,25 @@
   // Are we done and fully sandboxed ?
   bool IsSandboxed() const;
 
+  // The setuid sandbox may still be disabled via the environment.
+  // This is tracked in crbug.com/245376.
   bool IsDisabledViaEnvironment();
+  // When using the setuid sandbox, an extra helper process is created.
+  // Unfortunately, this helper process is hard-wired to close a specific file
+  // descriptor.
+  // The caller must make sure that GetUniqueToChildFileDescriptor() is an
+  // existing file descriptor that can be closed by the helper process. It's ok
+  // to make it a dummy, useless file descriptor if needed.
+  int GetUniqueToChildFileDescriptor();
   // Get the sandbox binary path. This method knows about the
   // CHROME_DEVEL_SANDBOX environment variable used for user-managed builds. If
   // the sandbox binary cannot be found, it will return an empty FilePath.
   base::FilePath GetSandboxBinaryPath();
-  // Modify |cmd_line| to launch via the setuid sandbox. Crash if the setuid
-  // sandbox binary cannot be found.
-  void PrependWrapper(base::CommandLine* cmd_line);
+  // Modify |cmd_line| and |options| to launch via the setuid sandbox. Crash if
+  // the setuid sandbox binary cannot be found. Either can be NULL if the caller
+  // needs additional control.
+  void PrependWrapper(base::CommandLine* cmd_line,
+                      base::LaunchOptions* options);
   // Set-up the environment. This should be done prior to launching the setuid
   // helper.
   void SetupLaunchEnvironment();
diff --git a/sandbox/linux/tests/main.cc b/sandbox/linux/tests/main.cc
index 9ee384d..a736ea2 100644
--- a/sandbox/linux/tests/main.cc
+++ b/sandbox/linux/tests/main.cc
@@ -10,6 +10,9 @@
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace sandbox {
+
+extern const bool kAllowForkWithThreads = false;
+
 namespace {
 
 // Check for leaks in our tests.
diff --git a/sandbox/linux/tests/unit_tests.cc b/sandbox/linux/tests/unit_tests.cc
index eeb5616..42b85a8 100644
--- a/sandbox/linux/tests/unit_tests.cc
+++ b/sandbox/linux/tests/unit_tests.cc
@@ -8,6 +8,7 @@
 #include <stdio.h>
 #include <sys/resource.h>
 #include <sys/time.h>
+#include <time.h>
 #include <unistd.h>
 
 #include "base/file_util.h"
@@ -41,6 +42,8 @@
 
 namespace sandbox {
 
+extern bool kAllowForkWithThreads;
+
 bool IsAndroid() {
 #if defined(OS_ANDROID)
   return true;
@@ -109,17 +112,42 @@
   // We need to fork(), so we can't be multi-threaded, as threads could hold
   // locks.
   int num_threads = CountThreads();
-#if defined(THREAD_SANITIZER)
+#if !defined(THREAD_SANITIZER)
+  const int kNumExpectedThreads = 1;
+#else
   // Under TSAN, there is a special helper thread. It should be completely
   // invisible to our testing, so we ignore it. It should be ok to fork()
   // with this thread. It's currently buggy, but it's the best we can do until
   // there is a way to delay the start of the thread
   // (https://code.google.com/p/thread-sanitizer/issues/detail?id=19).
-  num_threads--;
+  const int kNumExpectedThreads = 2;
 #endif
-  ASSERT_EQ(1, num_threads) << "Running sandbox tests with multiple threads "
-                            << "is not supported and will make the tests "
-                            << "flaky.\n";
+
+  // The kernel is at liberty to wake a thread id futex before updating /proc.
+  // If another test running in the same process has stopped a thread, it may
+  // appear as still running in /proc.
+  // We poll /proc, with an exponential back-off. At most, we'll sleep around
+  // 2^iterations nanoseconds in nanosleep().
+  if (!kAllowForkWithThreads) {
+    for (unsigned int iteration = 0; iteration < 30; iteration++) {
+      struct timespec ts = {0, 1L << iteration /* nanoseconds */};
+      PCHECK(0 == HANDLE_EINTR(nanosleep(&ts, &ts)));
+      num_threads = CountThreads();
+      if (kNumExpectedThreads == num_threads)
+        break;
+    }
+  }
+
+  const std::string multiple_threads_error =
+      "Running sandbox tests with multiple threads "
+      "is not supported and will make the tests flaky.";
+  if (!kAllowForkWithThreads) {
+    ASSERT_EQ(kNumExpectedThreads, num_threads) << multiple_threads_error;
+  } else {
+    if (kNumExpectedThreads != num_threads)
+      LOG(ERROR) << multiple_threads_error;
+  }
+
   int fds[2];
   ASSERT_EQ(0, pipe(fds));
   // Check that our pipe is not on one of the standard file descriptor.
diff --git a/sandbox/linux/tests/unit_tests.h b/sandbox/linux/tests/unit_tests.h
index 0cb682b..bc1939c 100644
--- a/sandbox/linux/tests/unit_tests.h
+++ b/sandbox/linux/tests/unit_tests.h
@@ -19,6 +19,12 @@
 // Is Valgrind currently being used?
 bool IsRunningOnValgrind();
 
+#if defined(ADDRESS_SANITIZER)
+#define DISABLE_ON_ASAN(test_name) DISABLED_##test_name
+#else
+#define DISABLE_ON_ASAN(test_name) test_name
+#endif  // defined(ADDRESS_SANITIZER)
+
 #if defined(THREAD_SANITIZER)
 #define DISABLE_ON_TSAN(test_name) DISABLED_##test_name
 #else
diff --git a/sandbox/sandbox_services.target.darwin-arm.mk b/sandbox/sandbox_services.target.darwin-arm.mk
index 2888761..3a93b3e 100644
--- a/sandbox/sandbox_services.target.darwin-arm.mk
+++ b/sandbox/sandbox_services.target.darwin-arm.mk
@@ -227,7 +227,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/sandbox/sandbox_services.target.darwin-mips.mk b/sandbox/sandbox_services.target.darwin-mips.mk
index a3fc1e0..eefac82 100644
--- a/sandbox/sandbox_services.target.darwin-mips.mk
+++ b/sandbox/sandbox_services.target.darwin-mips.mk
@@ -223,7 +223,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/sandbox/sandbox_services.target.darwin-x86.mk b/sandbox/sandbox_services.target.darwin-x86.mk
index a8ec83e..47be915 100644
--- a/sandbox/sandbox_services.target.darwin-x86.mk
+++ b/sandbox/sandbox_services.target.darwin-x86.mk
@@ -225,7 +225,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/sandbox/sandbox_services.target.darwin-x86_64.mk b/sandbox/sandbox_services.target.darwin-x86_64.mk
index ce9dfb8..5982b2c 100644
--- a/sandbox/sandbox_services.target.darwin-x86_64.mk
+++ b/sandbox/sandbox_services.target.darwin-x86_64.mk
@@ -225,7 +225,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/sandbox/sandbox_services.target.linux-arm.mk b/sandbox/sandbox_services.target.linux-arm.mk
index 2888761..3a93b3e 100644
--- a/sandbox/sandbox_services.target.linux-arm.mk
+++ b/sandbox/sandbox_services.target.linux-arm.mk
@@ -227,7 +227,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/sandbox/sandbox_services.target.linux-mips.mk b/sandbox/sandbox_services.target.linux-mips.mk
index a3fc1e0..eefac82 100644
--- a/sandbox/sandbox_services.target.linux-mips.mk
+++ b/sandbox/sandbox_services.target.linux-mips.mk
@@ -223,7 +223,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/sandbox/sandbox_services.target.linux-x86.mk b/sandbox/sandbox_services.target.linux-x86.mk
index a8ec83e..47be915 100644
--- a/sandbox/sandbox_services.target.linux-x86.mk
+++ b/sandbox/sandbox_services.target.linux-x86.mk
@@ -225,7 +225,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/sandbox/sandbox_services.target.linux-x86_64.mk b/sandbox/sandbox_services.target.linux-x86_64.mk
index ce9dfb8..5982b2c 100644
--- a/sandbox/sandbox_services.target.linux-x86_64.mk
+++ b/sandbox/sandbox_services.target.linux-x86_64.mk
@@ -225,7 +225,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/sandbox/seccomp_bpf.target.darwin-arm.mk b/sandbox/seccomp_bpf.target.darwin-arm.mk
index 12bd54e..97a5d03 100644
--- a/sandbox/seccomp_bpf.target.darwin-arm.mk
+++ b/sandbox/seccomp_bpf.target.darwin-arm.mk
@@ -230,7 +230,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/sandbox/seccomp_bpf.target.darwin-x86.mk b/sandbox/seccomp_bpf.target.darwin-x86.mk
index 2fdb8d4..1feffcd 100644
--- a/sandbox/seccomp_bpf.target.darwin-x86.mk
+++ b/sandbox/seccomp_bpf.target.darwin-x86.mk
@@ -228,7 +228,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/sandbox/seccomp_bpf.target.darwin-x86_64.mk b/sandbox/seccomp_bpf.target.darwin-x86_64.mk
index 236ee5a..677a5ef 100644
--- a/sandbox/seccomp_bpf.target.darwin-x86_64.mk
+++ b/sandbox/seccomp_bpf.target.darwin-x86_64.mk
@@ -228,7 +228,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/sandbox/seccomp_bpf.target.linux-arm.mk b/sandbox/seccomp_bpf.target.linux-arm.mk
index 12bd54e..97a5d03 100644
--- a/sandbox/seccomp_bpf.target.linux-arm.mk
+++ b/sandbox/seccomp_bpf.target.linux-arm.mk
@@ -230,7 +230,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/sandbox/seccomp_bpf.target.linux-x86.mk b/sandbox/seccomp_bpf.target.linux-x86.mk
index 2fdb8d4..1feffcd 100644
--- a/sandbox/seccomp_bpf.target.linux-x86.mk
+++ b/sandbox/seccomp_bpf.target.linux-x86.mk
@@ -228,7 +228,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/sandbox/seccomp_bpf.target.linux-x86_64.mk b/sandbox/seccomp_bpf.target.linux-x86_64.mk
index 236ee5a..677a5ef 100644
--- a/sandbox/seccomp_bpf.target.linux-x86_64.mk
+++ b/sandbox/seccomp_bpf.target.linux-x86_64.mk
@@ -228,7 +228,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/sandbox/seccomp_bpf_helpers.target.darwin-arm.mk b/sandbox/seccomp_bpf_helpers.target.darwin-arm.mk
index f313af5..891944d 100644
--- a/sandbox/seccomp_bpf_helpers.target.darwin-arm.mk
+++ b/sandbox/seccomp_bpf_helpers.target.darwin-arm.mk
@@ -224,7 +224,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/sandbox/seccomp_bpf_helpers.target.darwin-x86.mk b/sandbox/seccomp_bpf_helpers.target.darwin-x86.mk
index a7625f0..9f6a442 100644
--- a/sandbox/seccomp_bpf_helpers.target.darwin-x86.mk
+++ b/sandbox/seccomp_bpf_helpers.target.darwin-x86.mk
@@ -222,7 +222,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/sandbox/seccomp_bpf_helpers.target.darwin-x86_64.mk b/sandbox/seccomp_bpf_helpers.target.darwin-x86_64.mk
index fb8cc51..1309413 100644
--- a/sandbox/seccomp_bpf_helpers.target.darwin-x86_64.mk
+++ b/sandbox/seccomp_bpf_helpers.target.darwin-x86_64.mk
@@ -222,7 +222,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/sandbox/seccomp_bpf_helpers.target.linux-arm.mk b/sandbox/seccomp_bpf_helpers.target.linux-arm.mk
index f313af5..891944d 100644
--- a/sandbox/seccomp_bpf_helpers.target.linux-arm.mk
+++ b/sandbox/seccomp_bpf_helpers.target.linux-arm.mk
@@ -224,7 +224,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/sandbox/seccomp_bpf_helpers.target.linux-x86.mk b/sandbox/seccomp_bpf_helpers.target.linux-x86.mk
index a7625f0..9f6a442 100644
--- a/sandbox/seccomp_bpf_helpers.target.linux-x86.mk
+++ b/sandbox/seccomp_bpf_helpers.target.linux-x86.mk
@@ -222,7 +222,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/sandbox/seccomp_bpf_helpers.target.linux-x86_64.mk b/sandbox/seccomp_bpf_helpers.target.linux-x86_64.mk
index fb8cc51..1309413 100644
--- a/sandbox/seccomp_bpf_helpers.target.linux-x86_64.mk
+++ b/sandbox/seccomp_bpf_helpers.target.linux-x86_64.mk
@@ -222,7 +222,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/sdch/sdch.target.darwin-arm.mk b/sdch/sdch.target.darwin-arm.mk
index a24f9da..5aab1eb 100644
--- a/sdch/sdch.target.darwin-arm.mk
+++ b/sdch/sdch.target.darwin-arm.mk
@@ -240,7 +240,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/sdch/sdch.target.darwin-mips.mk b/sdch/sdch.target.darwin-mips.mk
index fddac2e..1330470 100644
--- a/sdch/sdch.target.darwin-mips.mk
+++ b/sdch/sdch.target.darwin-mips.mk
@@ -236,7 +236,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/sdch/sdch.target.darwin-x86.mk b/sdch/sdch.target.darwin-x86.mk
index 06b2091..675d1f9 100644
--- a/sdch/sdch.target.darwin-x86.mk
+++ b/sdch/sdch.target.darwin-x86.mk
@@ -238,7 +238,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/sdch/sdch.target.darwin-x86_64.mk b/sdch/sdch.target.darwin-x86_64.mk
index b9e481f..4730456 100644
--- a/sdch/sdch.target.darwin-x86_64.mk
+++ b/sdch/sdch.target.darwin-x86_64.mk
@@ -238,7 +238,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/sdch/sdch.target.linux-arm.mk b/sdch/sdch.target.linux-arm.mk
index a24f9da..5aab1eb 100644
--- a/sdch/sdch.target.linux-arm.mk
+++ b/sdch/sdch.target.linux-arm.mk
@@ -240,7 +240,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/sdch/sdch.target.linux-mips.mk b/sdch/sdch.target.linux-mips.mk
index fddac2e..1330470 100644
--- a/sdch/sdch.target.linux-mips.mk
+++ b/sdch/sdch.target.linux-mips.mk
@@ -236,7 +236,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/sdch/sdch.target.linux-x86.mk b/sdch/sdch.target.linux-x86.mk
index 06b2091..675d1f9 100644
--- a/sdch/sdch.target.linux-x86.mk
+++ b/sdch/sdch.target.linux-x86.mk
@@ -238,7 +238,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/sdch/sdch.target.linux-x86_64.mk b/sdch/sdch.target.linux-x86_64.mk
index b9e481f..4730456 100644
--- a/sdch/sdch.target.linux-x86_64.mk
+++ b/sdch/sdch.target.linux-x86_64.mk
@@ -238,7 +238,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/skia/BUILD.gn b/skia/BUILD.gn
index 904e8b8..f65b2cc 100644
--- a/skia/BUILD.gn
+++ b/skia/BUILD.gn
@@ -74,11 +74,19 @@
   }
 }
 
-config("skia_dependent_config") {
-}
-
 # Internal-facing config for Skia library code.
 config("skia_library_config") {
+  # These include directories are only included for Skia code and are not
+  # exported to dependents. It's not clear if this is on purpose, but this
+  # matches the GYP build.
+  include_dirs = []
+  if (is_mac || is_ios) {
+    include_dirs += [ "//third_party/skia/include/utils/mac" ]
+  }
+  if (is_mac) {
+    include_dirs += [ "//third_party/skia/include/utils/ios" ]
+  }
+
   defines = [
     #skia_export_defines ???) TODO
 
@@ -250,8 +258,6 @@
       "//third_party/skia/src/ports/SkOSFile_posix.cpp",
       "//third_party/skia/src/ports/SkTime_Unix.cpp",
       "//third_party/skia/src/ports/SkTLS_pthread.cpp",
-      "//third_party/skia/src/ports/SkFontConfigInterface_direct.cpp",
-      "//third_party/skia/src/fonts/SkFontMgr_fontconfig.cpp",
     ]
   } else {
     sources -= [
@@ -277,6 +283,8 @@
   }
   if (!is_linux) {
     sources -= [
+      "//third_party/skia/src/fonts/SkFontMgr_fontconfig.cpp",
+      "//third_party/skia/src/ports/SkFontConfigInterface_direct.cpp",
       "//third_party/skia/src/ports/SkFontHost_FreeType.cpp",
       "//third_party/skia/src/ports/SkFontHost_FreeType_common.cpp",
       "//third_party/skia/src/ports/SkFontHost_fontconfig.cpp",
@@ -302,6 +310,13 @@
     ]
   }
 
+  if (is_clang) {
+    # Skia won't compile with some of the more strict clang warnings.
+    # e.g. it does:
+    #  SkASSERT(!"sk_out_of_memory");
+    configs -= [ "//build/config/clang:extra_warnings" ]
+  }
+
   configs -= [ "//build/config/compiler:chromium_code" ]
   configs += [
     ":skia_library_config",
@@ -356,6 +371,10 @@
 
       # Chrome-specific.
       "ext/convolver_SSE2.cc",
+
+      # These are header files used by this target from the skia one above.
+      "ext/convolver.h",
+      "//third_party/skia/include/core/SkTypes.h",
     ]
 
     if (is_linux || is_mac) {
@@ -371,6 +390,9 @@
     "//build/config/compiler:no_chromium_code"
   ]
 
-  # TODO(brettw) uncomment when visibility is supported.
-  #visibility = ":skia"
+  deps = [
+    "//base",
+  ]
+
+  visibility = ":skia"
 }
diff --git a/skia/ext/analysis_canvas.cc b/skia/ext/analysis_canvas.cc
index 524fd18..15ec6d8 100644
--- a/skia/ext/analysis_canvas.cc
+++ b/skia/ext/analysis_canvas.cc
@@ -214,45 +214,45 @@
   is_transparent_ = false;
 }
 
-void AnalysisCanvas::drawText(const void* text,
-                              size_t len,
-                              SkScalar x,
-                              SkScalar y,
-                              const SkPaint& paint) {
+void AnalysisCanvas::onDrawText(const void* text,
+                                size_t len,
+                                SkScalar x,
+                                SkScalar y,
+                                const SkPaint& paint) {
   is_solid_color_ = false;
   is_transparent_ = false;
   has_text_ = true;
 }
 
-void AnalysisCanvas::drawPosText(const void* text,
-                                 size_t byteLength,
-                                 const SkPoint pos[],
-                                 const SkPaint& paint) {
+void AnalysisCanvas::onDrawPosText(const void* text,
+                                   size_t byteLength,
+                                   const SkPoint pos[],
+                                   const SkPaint& paint) {
   is_solid_color_ = false;
   is_transparent_ = false;
   has_text_ = true;
 }
 
-void AnalysisCanvas::drawPosTextH(const void* text,
-                                  size_t byteLength,
-                                  const SkScalar xpos[],
-                                  SkScalar constY,
-                                  const SkPaint& paint) {
-  is_solid_color_ = false;
-  is_transparent_ = false;
-  has_text_ = true;
-}
-
-void AnalysisCanvas::drawTextOnPath(const void* text,
-                                    size_t len,
-                                    const SkPath& path,
-                                    const SkMatrix* matrix,
+void AnalysisCanvas::onDrawPosTextH(const void* text,
+                                    size_t byteLength,
+                                    const SkScalar xpos[],
+                                    SkScalar constY,
                                     const SkPaint& paint) {
   is_solid_color_ = false;
   is_transparent_ = false;
   has_text_ = true;
 }
 
+void AnalysisCanvas::onDrawTextOnPath(const void* text,
+                                      size_t len,
+                                      const SkPath& path,
+                                      const SkMatrix* matrix,
+                                      const SkPaint& paint) {
+  is_solid_color_ = false;
+  is_transparent_ = false;
+  has_text_ = true;
+}
+
 void AnalysisCanvas::drawVertices(SkCanvas::VertexMode,
                                   int vertex_count,
                                   const SkPoint verts[],
diff --git a/skia/ext/analysis_canvas.h b/skia/ext/analysis_canvas.h
index 922a3ee..efe9314 100644
--- a/skia/ext/analysis_canvas.h
+++ b/skia/ext/analysis_canvas.h
@@ -59,25 +59,6 @@
                               const SkPaint* paint = NULL) OVERRIDE;
   virtual void drawSprite(const SkBitmap&, int left, int top,
                           const SkPaint* paint = NULL) OVERRIDE;
-  virtual void drawText(const void* text,
-                        size_t byteLength,
-                        SkScalar x,
-                        SkScalar y,
-                        const SkPaint&) OVERRIDE;
-  virtual void drawPosText(const void* text,
-                           size_t byteLength,
-                           const SkPoint pos[],
-                           const SkPaint&) OVERRIDE;
-  virtual void drawPosTextH(const void* text,
-                            size_t byteLength,
-                            const SkScalar xpos[],
-                            SkScalar constY,
-                            const SkPaint&) OVERRIDE;
-  virtual void drawTextOnPath(const void* text,
-                              size_t byteLength,
-                              const SkPath& path,
-                              const SkMatrix* matrix,
-                              const SkPaint&) OVERRIDE;
   virtual void drawVertices(VertexMode,
                             int vertexCount,
                             const SkPoint vertices[],
@@ -105,7 +86,27 @@
                           SkRegion::Op op,
                           ClipEdgeStyle edge_style) OVERRIDE;
 
- private:
+  virtual void onDrawText(const void* text,
+                          size_t byteLength,
+                          SkScalar x,
+                          SkScalar y,
+                          const SkPaint&) OVERRIDE;
+  virtual void onDrawPosText(const void* text,
+                             size_t byteLength,
+                             const SkPoint pos[],
+                             const SkPaint&) OVERRIDE;
+  virtual void onDrawPosTextH(const void* text,
+                              size_t byteLength,
+                              const SkScalar xpos[],
+                              SkScalar constY,
+                              const SkPaint&) OVERRIDE;
+  virtual void onDrawTextOnPath(const void* text,
+                                size_t byteLength,
+                                const SkPath& path,
+                                const SkMatrix* matrix,
+                                const SkPaint&) OVERRIDE;
+
+private:
   typedef SkCanvas INHERITED;
 
   int saved_stack_size_;
diff --git a/skia/ext/benchmarking_canvas.cc b/skia/ext/benchmarking_canvas.cc
index ec2ff3c..f765cd1 100644
--- a/skia/ext/benchmarking_canvas.cc
+++ b/skia/ext/benchmarking_canvas.cc
@@ -114,33 +114,6 @@
     SkProxyCanvas::drawSprite(bitmap, left, top, paint);
   }
 
-  virtual void drawText(const void* text, size_t byteLength, SkScalar x,
-                        SkScalar y, const SkPaint& paint) OVERRIDE {
-    AutoStamper stamper(this);
-    SkProxyCanvas::drawText(text, byteLength, x, y, paint);
-  }
-
-  virtual void drawPosText(const void* text, size_t byteLength,
-                           const SkPoint pos[],
-                           const SkPaint& paint) OVERRIDE {
-    AutoStamper stamper(this);
-    SkProxyCanvas::drawPosText(text, byteLength, pos, paint);
-  }
-
-  virtual void drawPosTextH(const void* text, size_t byteLength,
-                            const SkScalar xpos[], SkScalar constY,
-                            const SkPaint& paint) OVERRIDE {
-    AutoStamper stamper(this);
-    SkProxyCanvas::drawPosTextH(text, byteLength, xpos, constY, paint);
-  }
-
-  virtual void drawTextOnPath(const void* text, size_t byteLength,
-                              const SkPath& path, const SkMatrix* matrix,
-                              const SkPaint& paint) OVERRIDE {
-    AutoStamper stamper(this);
-    SkProxyCanvas::drawTextOnPath(text, byteLength, path, matrix, paint);
-  }
-
   virtual void drawPicture(SkPicture& picture) OVERRIDE {
     AutoStamper stamper(this);
     SkProxyCanvas::drawPicture(picture);
@@ -162,6 +135,33 @@
   }
 
 protected:
+  virtual void onDrawText(const void* text, size_t byteLength, SkScalar x,
+                          SkScalar y, const SkPaint& paint) OVERRIDE {
+    AutoStamper stamper(this);
+    SkProxyCanvas::onDrawText(text, byteLength, x, y, paint);
+  }
+
+  virtual void onDrawPosText(const void* text, size_t byteLength,
+                             const SkPoint pos[],
+                             const SkPaint& paint) OVERRIDE {
+    AutoStamper stamper(this);
+    SkProxyCanvas::onDrawPosText(text, byteLength, pos, paint);
+  }
+
+  virtual void onDrawPosTextH(const void* text, size_t byteLength,
+                              const SkScalar xpos[], SkScalar constY,
+                              const SkPaint& paint) OVERRIDE {
+    AutoStamper stamper(this);
+    SkProxyCanvas::onDrawPosTextH(text, byteLength, xpos, constY, paint);
+  }
+
+  virtual void onDrawTextOnPath(const void* text, size_t byteLength,
+                                const SkPath& path, const SkMatrix* matrix,
+                                const SkPaint& paint) OVERRIDE {
+    AutoStamper stamper(this);
+    SkProxyCanvas::onDrawTextOnPath(text, byteLength, path, matrix, paint);
+  }
+
   virtual void onClipRect(const SkRect& rect, SkRegion::Op op,
                           ClipEdgeStyle edge_style) OVERRIDE {
     AutoStamper stamper(this);
diff --git a/skia/ext/pixel_ref_utils_unittest.cc b/skia/ext/pixel_ref_utils_unittest.cc
index 2bfbbbe..8ff3272 100644
--- a/skia/ext/pixel_ref_utils_unittest.cc
+++ b/skia/ext/pixel_ref_utils_unittest.cc
@@ -51,7 +51,16 @@
   }
 
   // Pure virtual implementaiton.
-  virtual void shadeSpan(int x, int y, SkPMColor[], int count) OVERRIDE {}
+  virtual SkShader::Context* createContext(const SkBitmap& device,
+                                           const SkPaint& paint,
+                                           const SkMatrix& matrix,
+                                           void* storage) const OVERRIDE {
+    return NULL;
+  };
+  virtual size_t contextSize() const OVERRIDE {
+    return sizeof(SkShader::Context);
+  }
+
   SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(TestDiscardableShader);
 
  private:
@@ -69,12 +78,11 @@
   bitmap->pixelRef()->setURI(uri);
 }
 
-SkCanvas* StartRecording(SkPicture* picture, gfx::Rect layer_rect) {
-  SkCanvas* canvas = picture->beginRecording(
+SkCanvas* StartRecording(SkPictureRecorder* recorder, gfx::Rect layer_rect) {
+  SkCanvas* canvas = recorder->beginRecording(
       layer_rect.width(),
       layer_rect.height(),
-      SkPicture::kUsePathBoundsForClip_RecordingFlag |
-          SkPicture::kOptimizeForClippedPlayback_RecordingFlag);
+      SkPicture::kUsePathBoundsForClip_RecordingFlag);
 
   canvas->save();
   canvas->translate(-layer_rect.x(), -layer_rect.y());
@@ -84,9 +92,9 @@
   return canvas;
 }
 
-void StopRecording(SkPicture* picture, SkCanvas* canvas) {
+SkPicture* StopRecording(SkPictureRecorder* recorder, SkCanvas* canvas) {
   canvas->restore();
-  picture->endRecording();
+  return recorder->endRecording();
 }
 
 }  // namespace
@@ -94,8 +102,8 @@
 TEST(PixelRefUtilsTest, DrawPaint) {
   gfx::Rect layer_rect(0, 0, 256, 256);
 
-  skia::RefPtr<SkPicture> picture = skia::AdoptRef(new SkPicture);
-  SkCanvas* canvas = StartRecording(picture.get(), layer_rect);
+  SkPictureRecorder recorder;
+  SkCanvas* canvas = StartRecording(&recorder, layer_rect);
 
   TestDiscardableShader first_shader;
   SkPaint first_paint;
@@ -116,7 +124,7 @@
   canvas->clipRect(SkRect::MakeWH(100, 100));
   canvas->drawPaint(third_paint);
 
-  StopRecording(picture.get(), canvas);
+  skia::RefPtr<SkPicture> picture = skia::AdoptRef(StopRecording(&recorder, canvas));
 
   std::vector<skia::PixelRefUtils::PositionPixelRef> pixel_refs;
   skia::PixelRefUtils::GatherDiscardablePixelRefs(picture.get(), &pixel_refs);
@@ -133,8 +141,8 @@
 TEST(PixelRefUtilsTest, DrawPoints) {
   gfx::Rect layer_rect(0, 0, 256, 256);
 
-  skia::RefPtr<SkPicture> picture = skia::AdoptRef(new SkPicture);
-  SkCanvas* canvas = StartRecording(picture.get(), layer_rect);
+  SkPictureRecorder recorder;
+  SkCanvas* canvas = StartRecording(&recorder, layer_rect);
 
   TestDiscardableShader first_shader;
   SkPaint first_paint;
@@ -169,7 +177,7 @@
   // (50, 55, 150, 145).
   canvas->drawPoints(SkCanvas::kPolygon_PointMode, 3, points, third_paint);
 
-  StopRecording(picture.get(), canvas);
+  skia::RefPtr<SkPicture> picture = skia::AdoptRef(StopRecording(&recorder, canvas));
 
   std::vector<skia::PixelRefUtils::PositionPixelRef> pixel_refs;
   skia::PixelRefUtils::GatherDiscardablePixelRefs(picture.get(), &pixel_refs);
@@ -186,8 +194,8 @@
 TEST(PixelRefUtilsTest, DrawRect) {
   gfx::Rect layer_rect(0, 0, 256, 256);
 
-  skia::RefPtr<SkPicture> picture = skia::AdoptRef(new SkPicture);
-  SkCanvas* canvas = StartRecording(picture.get(), layer_rect);
+  SkPictureRecorder recorder;
+  SkCanvas* canvas = StartRecording(&recorder, layer_rect);
 
   TestDiscardableShader first_shader;
   SkPaint first_paint;
@@ -217,6 +225,8 @@
   // (50, 50, 50, 50)
   canvas->drawRect(SkRect::MakeXYWH(0, 0, 100, 100), third_paint);
 
+  skia::RefPtr<SkPicture> picture = skia::AdoptRef(StopRecording(&recorder, canvas));
+
   std::vector<skia::PixelRefUtils::PositionPixelRef> pixel_refs;
   skia::PixelRefUtils::GatherDiscardablePixelRefs(picture.get(), &pixel_refs);
 
@@ -232,8 +242,8 @@
 TEST(PixelRefUtilsTest, DrawRRect) {
   gfx::Rect layer_rect(0, 0, 256, 256);
 
-  skia::RefPtr<SkPicture> picture = skia::AdoptRef(new SkPicture);
-  SkCanvas* canvas = StartRecording(picture.get(), layer_rect);
+  SkPictureRecorder recorder;
+  SkCanvas* canvas = StartRecording(&recorder, layer_rect);
 
   TestDiscardableShader first_shader;
   SkPaint first_paint;
@@ -268,6 +278,8 @@
   // (50, 50, 50, 50)
   canvas->drawRRect(rrect, third_paint);
 
+  skia::RefPtr<SkPicture> picture = skia::AdoptRef(StopRecording(&recorder, canvas));
+
   std::vector<skia::PixelRefUtils::PositionPixelRef> pixel_refs;
   skia::PixelRefUtils::GatherDiscardablePixelRefs(picture.get(), &pixel_refs);
 
@@ -283,8 +295,8 @@
 TEST(PixelRefUtilsTest, DrawOval) {
   gfx::Rect layer_rect(0, 0, 256, 256);
 
-  skia::RefPtr<SkPicture> picture = skia::AdoptRef(new SkPicture);
-  SkCanvas* canvas = StartRecording(picture.get(), layer_rect);
+  SkPictureRecorder recorder;
+  SkCanvas* canvas = StartRecording(&recorder, layer_rect);
 
   TestDiscardableShader first_shader;
   SkPaint first_paint;
@@ -318,6 +330,8 @@
   // (50, 50, 50, 50)
   canvas->drawRect(SkRect::MakeXYWH(0, 0, 100, 100), third_paint);
 
+  skia::RefPtr<SkPicture> picture = skia::AdoptRef(StopRecording(&recorder, canvas));
+
   std::vector<skia::PixelRefUtils::PositionPixelRef> pixel_refs;
   skia::PixelRefUtils::GatherDiscardablePixelRefs(picture.get(), &pixel_refs);
 
@@ -333,8 +347,8 @@
 TEST(PixelRefUtilsTest, DrawPath) {
   gfx::Rect layer_rect(0, 0, 256, 256);
 
-  skia::RefPtr<SkPicture> picture = skia::AdoptRef(new SkPicture);
-  SkCanvas* canvas = StartRecording(picture.get(), layer_rect);
+  SkPictureRecorder recorder;
+  SkCanvas* canvas = StartRecording(&recorder, layer_rect);
 
   TestDiscardableShader first_shader;
   SkPaint first_paint;
@@ -360,7 +374,7 @@
 
   canvas->restore();
 
-  StopRecording(picture.get(), canvas);
+  skia::RefPtr<SkPicture> picture = skia::AdoptRef(StopRecording(&recorder, canvas));
 
   std::vector<skia::PixelRefUtils::PositionPixelRef> pixel_refs;
   skia::PixelRefUtils::GatherDiscardablePixelRefs(picture.get(), &pixel_refs);
@@ -375,8 +389,8 @@
 TEST(PixelRefUtilsTest, DrawBitmap) {
   gfx::Rect layer_rect(0, 0, 256, 256);
 
-  skia::RefPtr<SkPicture> picture = skia::AdoptRef(new SkPicture);
-  SkCanvas* canvas = StartRecording(picture.get(), layer_rect);
+  SkPictureRecorder recorder;
+  SkCanvas* canvas = StartRecording(&recorder, layer_rect);
 
   SkBitmap first;
   CreateBitmap(gfx::Size(50, 50), "discardable", &first);
@@ -414,7 +428,7 @@
   // At (0, 0), scaled by 5 and 6
   canvas->drawBitmap(fifth, 0, 0);
 
-  StopRecording(picture.get(), canvas);
+  skia::RefPtr<SkPicture> picture = skia::AdoptRef(StopRecording(&recorder, canvas));
 
   std::vector<skia::PixelRefUtils::PositionPixelRef> pixel_refs;
   skia::PixelRefUtils::GatherDiscardablePixelRefs(picture.get(), &pixel_refs);
@@ -436,8 +450,8 @@
 TEST(PixelRefUtilsTest, DrawBitmapRect) {
   gfx::Rect layer_rect(0, 0, 256, 256);
 
-  skia::RefPtr<SkPicture> picture = skia::AdoptRef(new SkPicture);
-  SkCanvas* canvas = StartRecording(picture.get(), layer_rect);
+  SkPictureRecorder recorder;
+  SkCanvas* canvas = StartRecording(&recorder, layer_rect);
 
   SkBitmap first;
   CreateBitmap(gfx::Size(50, 50), "discardable", &first);
@@ -468,7 +482,7 @@
 
   canvas->restore();
 
-  StopRecording(picture.get(), canvas);
+  skia::RefPtr<SkPicture> picture = skia::AdoptRef(StopRecording(&recorder, canvas));
 
   std::vector<skia::PixelRefUtils::PositionPixelRef> pixel_refs;
   skia::PixelRefUtils::GatherDiscardablePixelRefs(picture.get(), &pixel_refs);
@@ -487,8 +501,8 @@
 TEST(PixelRefUtilsTest, DrawSprite) {
   gfx::Rect layer_rect(0, 0, 256, 256);
 
-  skia::RefPtr<SkPicture> picture = skia::AdoptRef(new SkPicture);
-  SkCanvas* canvas = StartRecording(picture.get(), layer_rect);
+  SkPictureRecorder recorder;
+  SkCanvas* canvas = StartRecording(&recorder, layer_rect);
 
   SkBitmap first;
   CreateBitmap(gfx::Size(50, 50), "discardable", &first);
@@ -531,7 +545,7 @@
   // (100, 100, 50, 50).
   canvas->drawSprite(fifth, 100, 100, &first_paint);
 
-  StopRecording(picture.get(), canvas);
+  skia::RefPtr<SkPicture> picture = skia::AdoptRef(StopRecording(&recorder, canvas));
 
   std::vector<skia::PixelRefUtils::PositionPixelRef> pixel_refs;
   skia::PixelRefUtils::GatherDiscardablePixelRefs(picture.get(), &pixel_refs);
@@ -554,8 +568,8 @@
 TEST(PixelRefUtilsTest, DrawText) {
   gfx::Rect layer_rect(0, 0, 256, 256);
 
-  skia::RefPtr<SkPicture> picture = skia::AdoptRef(new SkPicture);
-  SkCanvas* canvas = StartRecording(picture.get(), layer_rect);
+  SkPictureRecorder recorder;
+  SkCanvas* canvas = StartRecording(&recorder, layer_rect);
 
   TestDiscardableShader first_shader;
   SkPaint first_paint;
@@ -578,6 +592,8 @@
   canvas->drawPosText("text", 4, points, first_paint);
   canvas->drawTextOnPath("text", 4, path, NULL, first_paint);
 
+  skia::RefPtr<SkPicture> picture = skia::AdoptRef(StopRecording(&recorder, canvas));
+
   std::vector<skia::PixelRefUtils::PositionPixelRef> pixel_refs;
   skia::PixelRefUtils::GatherDiscardablePixelRefs(picture.get(), &pixel_refs);
 
@@ -587,8 +603,8 @@
 TEST(PixelRefUtilsTest, DrawVertices) {
   gfx::Rect layer_rect(0, 0, 256, 256);
 
-  skia::RefPtr<SkPicture> picture = skia::AdoptRef(new SkPicture);
-  SkCanvas* canvas = StartRecording(picture.get(), layer_rect);
+  SkPictureRecorder recorder;
+  SkCanvas* canvas = StartRecording(&recorder, layer_rect);
 
   TestDiscardableShader first_shader;
   SkPaint first_paint;
@@ -649,7 +665,7 @@
                        3,
                        third_paint);
 
-  StopRecording(picture.get(), canvas);
+  skia::RefPtr<SkPicture> picture = skia::AdoptRef(StopRecording(&recorder, canvas));
 
   std::vector<skia::PixelRefUtils::PositionPixelRef> pixel_refs;
   skia::PixelRefUtils::GatherDiscardablePixelRefs(picture.get(), &pixel_refs);
diff --git a/skia/skia_chrome.target.darwin-arm.mk b/skia/skia_chrome.target.darwin-arm.mk
index 54c1a57..e618521 100644
--- a/skia/skia_chrome.target.darwin-arm.mk
+++ b/skia/skia_chrome.target.darwin-arm.mk
@@ -114,7 +114,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -133,7 +137,6 @@
 	'-DSK_USE_POSIX_THREADS' \
 	'-D__ARM_HAVE_OPTIONAL_NEON_SUPPORT' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-DANDROID' \
@@ -244,7 +247,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -263,7 +270,6 @@
 	'-DSK_USE_POSIX_THREADS' \
 	'-D__ARM_HAVE_OPTIONAL_NEON_SUPPORT' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-DANDROID' \
@@ -328,7 +334,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/skia/skia_chrome.target.darwin-mips.mk b/skia/skia_chrome.target.darwin-mips.mk
index 095b8a1..9f52d0e 100644
--- a/skia/skia_chrome.target.darwin-mips.mk
+++ b/skia/skia_chrome.target.darwin-mips.mk
@@ -114,7 +114,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -132,7 +136,6 @@
 	'-DSK_GAMMA_CONTRAST=0.0' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-DANDROID' \
@@ -243,7 +246,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -261,7 +268,6 @@
 	'-DSK_GAMMA_CONTRAST=0.0' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-DANDROID' \
@@ -324,7 +330,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/skia/skia_chrome.target.darwin-x86.mk b/skia/skia_chrome.target.darwin-x86.mk
index 6db08a3..be58c75 100644
--- a/skia/skia_chrome.target.darwin-x86.mk
+++ b/skia/skia_chrome.target.darwin-x86.mk
@@ -115,7 +115,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -133,7 +137,6 @@
 	'-DSK_GAMMA_CONTRAST=0.0' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-DANDROID' \
@@ -244,7 +247,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -262,7 +269,6 @@
 	'-DSK_GAMMA_CONTRAST=0.0' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-DANDROID' \
@@ -324,7 +330,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/skia/skia_chrome.target.darwin-x86_64.mk b/skia/skia_chrome.target.darwin-x86_64.mk
index 9af99ab..5655890 100644
--- a/skia/skia_chrome.target.darwin-x86_64.mk
+++ b/skia/skia_chrome.target.darwin-x86_64.mk
@@ -115,7 +115,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -133,7 +137,6 @@
 	'-DSK_GAMMA_CONTRAST=0.0' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-DANDROID' \
@@ -244,7 +247,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -262,7 +269,6 @@
 	'-DSK_GAMMA_CONTRAST=0.0' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-DANDROID' \
@@ -324,7 +330,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/skia/skia_chrome.target.linux-arm.mk b/skia/skia_chrome.target.linux-arm.mk
index 54c1a57..e618521 100644
--- a/skia/skia_chrome.target.linux-arm.mk
+++ b/skia/skia_chrome.target.linux-arm.mk
@@ -114,7 +114,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -133,7 +137,6 @@
 	'-DSK_USE_POSIX_THREADS' \
 	'-D__ARM_HAVE_OPTIONAL_NEON_SUPPORT' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-DANDROID' \
@@ -244,7 +247,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -263,7 +270,6 @@
 	'-DSK_USE_POSIX_THREADS' \
 	'-D__ARM_HAVE_OPTIONAL_NEON_SUPPORT' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-DANDROID' \
@@ -328,7 +334,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/skia/skia_chrome.target.linux-mips.mk b/skia/skia_chrome.target.linux-mips.mk
index 095b8a1..9f52d0e 100644
--- a/skia/skia_chrome.target.linux-mips.mk
+++ b/skia/skia_chrome.target.linux-mips.mk
@@ -114,7 +114,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -132,7 +136,6 @@
 	'-DSK_GAMMA_CONTRAST=0.0' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-DANDROID' \
@@ -243,7 +246,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -261,7 +268,6 @@
 	'-DSK_GAMMA_CONTRAST=0.0' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-DANDROID' \
@@ -324,7 +330,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/skia/skia_chrome.target.linux-x86.mk b/skia/skia_chrome.target.linux-x86.mk
index 6db08a3..be58c75 100644
--- a/skia/skia_chrome.target.linux-x86.mk
+++ b/skia/skia_chrome.target.linux-x86.mk
@@ -115,7 +115,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -133,7 +137,6 @@
 	'-DSK_GAMMA_CONTRAST=0.0' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-DANDROID' \
@@ -244,7 +247,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -262,7 +269,6 @@
 	'-DSK_GAMMA_CONTRAST=0.0' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-DANDROID' \
@@ -324,7 +330,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/skia/skia_chrome.target.linux-x86_64.mk b/skia/skia_chrome.target.linux-x86_64.mk
index 9af99ab..5655890 100644
--- a/skia/skia_chrome.target.linux-x86_64.mk
+++ b/skia/skia_chrome.target.linux-x86_64.mk
@@ -115,7 +115,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -133,7 +137,6 @@
 	'-DSK_GAMMA_CONTRAST=0.0' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-DANDROID' \
@@ -244,7 +247,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -262,7 +269,6 @@
 	'-DSK_GAMMA_CONTRAST=0.0' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-DANDROID' \
@@ -324,7 +330,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/skia/skia_chrome_opts.target.darwin-arm.mk b/skia/skia_chrome_opts.target.darwin-arm.mk
index d2482e1..869326a 100644
--- a/skia/skia_chrome_opts.target.darwin-arm.mk
+++ b/skia/skia_chrome_opts.target.darwin-arm.mk
@@ -33,7 +33,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/skia/skia_chrome_opts.target.darwin-mips.mk b/skia/skia_chrome_opts.target.darwin-mips.mk
index 4c7996e..7fa30bb 100644
--- a/skia/skia_chrome_opts.target.darwin-mips.mk
+++ b/skia/skia_chrome_opts.target.darwin-mips.mk
@@ -224,7 +224,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/skia/skia_chrome_opts.target.darwin-x86.mk b/skia/skia_chrome_opts.target.darwin-x86.mk
index 8a8b6d5..52fc943 100644
--- a/skia/skia_chrome_opts.target.darwin-x86.mk
+++ b/skia/skia_chrome_opts.target.darwin-x86.mk
@@ -222,7 +222,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/skia/skia_chrome_opts.target.darwin-x86_64.mk b/skia/skia_chrome_opts.target.darwin-x86_64.mk
index 140b85a..61446d0 100644
--- a/skia/skia_chrome_opts.target.darwin-x86_64.mk
+++ b/skia/skia_chrome_opts.target.darwin-x86_64.mk
@@ -222,7 +222,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/skia/skia_chrome_opts.target.linux-arm.mk b/skia/skia_chrome_opts.target.linux-arm.mk
index d2482e1..869326a 100644
--- a/skia/skia_chrome_opts.target.linux-arm.mk
+++ b/skia/skia_chrome_opts.target.linux-arm.mk
@@ -33,7 +33,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/skia/skia_chrome_opts.target.linux-mips.mk b/skia/skia_chrome_opts.target.linux-mips.mk
index 4c7996e..7fa30bb 100644
--- a/skia/skia_chrome_opts.target.linux-mips.mk
+++ b/skia/skia_chrome_opts.target.linux-mips.mk
@@ -224,7 +224,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/skia/skia_chrome_opts.target.linux-x86.mk b/skia/skia_chrome_opts.target.linux-x86.mk
index 8a8b6d5..52fc943 100644
--- a/skia/skia_chrome_opts.target.linux-x86.mk
+++ b/skia/skia_chrome_opts.target.linux-x86.mk
@@ -222,7 +222,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/skia/skia_chrome_opts.target.linux-x86_64.mk b/skia/skia_chrome_opts.target.linux-x86_64.mk
index 140b85a..61446d0 100644
--- a/skia/skia_chrome_opts.target.linux-x86_64.mk
+++ b/skia/skia_chrome_opts.target.linux-x86_64.mk
@@ -222,7 +222,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/skia/skia_gn_files.gypi b/skia/skia_gn_files.gypi
index 61b49eb..a2be725 100644
--- a/skia/skia_gn_files.gypi
+++ b/skia/skia_gn_files.gypi
@@ -19,6 +19,7 @@
     'SK_SUPPORT_LEGACY_GETTOTALCLIP',
     'SK_SUPPORT_LEGACY_LAYERRASTERIZER_API=1',
     'SK_SUPPORT_LEGACY_N32_NAME',
+    'SK_SUPPORT_LEGACY_PROCXFERMODE',
     'SK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1',
     'SK_USE_DISCARDABLE_SCALEDIMAGECACHE',
     'SK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT',
@@ -279,8 +280,6 @@
     '<(skia_src_path)/core/SkBitmapProcState_sample.h',
     '<(skia_src_path)/core/SkBitmapScaler.h',
     '<(skia_src_path)/core/SkBitmapScaler.cpp',
-    '<(skia_src_path)/core/SkBitmapShader16BilerpTemplate.h',
-    '<(skia_src_path)/core/SkBitmapShaderTemplate.h',
     '<(skia_src_path)/core/SkBitmap_scroll.cpp',
     '<(skia_src_path)/core/SkBlitBWMaskTemplate.h',
     '<(skia_src_path)/core/SkBlitMask_D32.cpp',
@@ -362,7 +361,6 @@
     '<(skia_src_path)/core/SkMessageBus.h',
     '<(skia_src_path)/core/SkMetaData.cpp',
     '<(skia_src_path)/core/SkMipMap.cpp',
-    '<(skia_src_path)/core/SkOffsetTable.h',
     '<(skia_src_path)/core/SkPackBits.cpp',
     '<(skia_src_path)/core/SkPaint.cpp',
     '<(skia_src_path)/core/SkPaintOptionsAndroid.cpp',
@@ -801,7 +799,6 @@
     '<(skia_src_path)/utils/debugger/SkDrawCommand.h',
     '<(skia_src_path)/utils/debugger/SkObjectParser.cpp',
     '<(skia_src_path)/utils/debugger/SkObjectParser.h',
-    '<(skia_src_path)/utils/mac/SkCreateCGImageRef.cpp',
     '<(skia_src_path)/utils/SkBase64.cpp',
     '<(skia_src_path)/utils/SkBase64.h',
     '<(skia_src_path)/utils/SkBitmapHasher.cpp',
@@ -824,6 +821,8 @@
     '<(skia_src_path)/utils/SkGatherPixelRefsAndRects.h',
     '<(skia_src_path)/utils/SkInterpolator.cpp',
     '<(skia_src_path)/utils/SkLayer.cpp',
+    '<(skia_src_path)/utils/SkMatrix22.cpp',
+    '<(skia_src_path)/utils/SkMatrix22.h',
     '<(skia_src_path)/utils/SkMatrix44.cpp',
     '<(skia_src_path)/utils/SkMD5.cpp',
     '<(skia_src_path)/utils/SkMD5.h',
@@ -856,6 +855,7 @@
     #mac
     '<(skia_include_path)/utils/mac/SkCGUtils.h',
     '<(skia_src_path)/utils/mac/SkCreateCGImageRef.cpp',
+    '<(skia_src_path)/utils/mac/SkStream_mac.cpp',
 
     #windows
     '<(skia_include_path)/utils/win/SkAutoCoInitialize.h',
diff --git a/skia/skia_library.gypi b/skia/skia_library.gypi
index 3b15ec6..66ed8f2 100644
--- a/skia/skia_library.gypi
+++ b/skia/skia_library.gypi
@@ -84,6 +84,8 @@
     '../third_party/skia/src/utils/SkCanvasStateUtils.cpp',
     '../third_party/skia/src/utils/SkEventTracer.cpp',
     '../third_party/skia/src/utils/SkDeferredCanvas.cpp',
+    '../third_party/skia/src/utils/SkMatrix22.cpp',
+    '../third_party/skia/src/utils/SkMatrix22.h',
     '../third_party/skia/src/utils/SkMatrix44.cpp',
     '../third_party/skia/src/utils/SkNullCanvas.cpp',
     '../third_party/skia/include/utils/SkNWayCanvas.h',
diff --git a/skia/skia_library.target.darwin-arm.mk b/skia/skia_library.target.darwin-arm.mk
index 2de61f7..6041cef 100644
--- a/skia/skia_library.target.darwin-arm.mk
+++ b/skia/skia_library.target.darwin-arm.mk
@@ -52,6 +52,7 @@
 	third_party/skia/src/utils/SkCanvasStateUtils.cpp \
 	third_party/skia/src/utils/SkEventTracer.cpp \
 	third_party/skia/src/utils/SkDeferredCanvas.cpp \
+	third_party/skia/src/utils/SkMatrix22.cpp \
 	third_party/skia/src/utils/SkMatrix44.cpp \
 	third_party/skia/src/utils/SkNullCanvas.cpp \
 	third_party/skia/src/utils/SkNWayCanvas.cpp \
@@ -62,6 +63,7 @@
 	third_party/skia/src/core/SkAnnotation.cpp \
 	third_party/skia/src/core/SkAdvancedTypefaceMetrics.cpp \
 	third_party/skia/src/core/SkAlphaRuns.cpp \
+	third_party/skia/src/core/SkBBHFactory.cpp \
 	third_party/skia/src/core/SkBBoxRecord.cpp \
 	third_party/skia/src/core/SkBBoxHierarchyRecord.cpp \
 	third_party/skia/src/core/SkBitmap.cpp \
@@ -147,6 +149,7 @@
 	third_party/skia/src/core/SkPictureFlat.cpp \
 	third_party/skia/src/core/SkPicturePlayback.cpp \
 	third_party/skia/src/core/SkPictureRecord.cpp \
+	third_party/skia/src/core/SkPictureRecorder.cpp \
 	third_party/skia/src/core/SkPictureShader.cpp \
 	third_party/skia/src/core/SkPictureStateTree.cpp \
 	third_party/skia/src/core/SkPixelRef.cpp \
@@ -165,6 +168,7 @@
 	third_party/skia/src/core/SkRegion_path.cpp \
 	third_party/skia/src/core/SkRRect.cpp \
 	third_party/skia/src/core/SkRTree.cpp \
+	third_party/skia/src/core/SkRTreePicture.cpp \
 	third_party/skia/src/core/SkScaledImageCache.cpp \
 	third_party/skia/src/core/SkScalar.cpp \
 	third_party/skia/src/core/SkScalerContext.cpp \
@@ -467,7 +471,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -486,7 +494,6 @@
 	'-DSK_USE_POSIX_THREADS' \
 	'-D__ARM_HAVE_OPTIONAL_NEON_SUPPORT' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-DANDROID' \
@@ -608,7 +615,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -627,7 +638,6 @@
 	'-DSK_USE_POSIX_THREADS' \
 	'-D__ARM_HAVE_OPTIONAL_NEON_SUPPORT' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-DANDROID' \
@@ -703,7 +713,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/skia/skia_library.target.darwin-mips.mk b/skia/skia_library.target.darwin-mips.mk
index 979011f..01d7e2d 100644
--- a/skia/skia_library.target.darwin-mips.mk
+++ b/skia/skia_library.target.darwin-mips.mk
@@ -52,6 +52,7 @@
 	third_party/skia/src/utils/SkCanvasStateUtils.cpp \
 	third_party/skia/src/utils/SkEventTracer.cpp \
 	third_party/skia/src/utils/SkDeferredCanvas.cpp \
+	third_party/skia/src/utils/SkMatrix22.cpp \
 	third_party/skia/src/utils/SkMatrix44.cpp \
 	third_party/skia/src/utils/SkNullCanvas.cpp \
 	third_party/skia/src/utils/SkNWayCanvas.cpp \
@@ -62,6 +63,7 @@
 	third_party/skia/src/core/SkAnnotation.cpp \
 	third_party/skia/src/core/SkAdvancedTypefaceMetrics.cpp \
 	third_party/skia/src/core/SkAlphaRuns.cpp \
+	third_party/skia/src/core/SkBBHFactory.cpp \
 	third_party/skia/src/core/SkBBoxRecord.cpp \
 	third_party/skia/src/core/SkBBoxHierarchyRecord.cpp \
 	third_party/skia/src/core/SkBitmap.cpp \
@@ -147,6 +149,7 @@
 	third_party/skia/src/core/SkPictureFlat.cpp \
 	third_party/skia/src/core/SkPicturePlayback.cpp \
 	third_party/skia/src/core/SkPictureRecord.cpp \
+	third_party/skia/src/core/SkPictureRecorder.cpp \
 	third_party/skia/src/core/SkPictureShader.cpp \
 	third_party/skia/src/core/SkPictureStateTree.cpp \
 	third_party/skia/src/core/SkPixelRef.cpp \
@@ -165,6 +168,7 @@
 	third_party/skia/src/core/SkRegion_path.cpp \
 	third_party/skia/src/core/SkRRect.cpp \
 	third_party/skia/src/core/SkRTree.cpp \
+	third_party/skia/src/core/SkRTreePicture.cpp \
 	third_party/skia/src/core/SkScaledImageCache.cpp \
 	third_party/skia/src/core/SkScalar.cpp \
 	third_party/skia/src/core/SkScalerContext.cpp \
@@ -466,7 +470,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -484,7 +492,6 @@
 	'-DSK_GAMMA_CONTRAST=0.0' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-DANDROID' \
@@ -606,7 +613,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -624,7 +635,6 @@
 	'-DSK_GAMMA_CONTRAST=0.0' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-DANDROID' \
@@ -698,7 +708,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/skia/skia_library.target.darwin-x86.mk b/skia/skia_library.target.darwin-x86.mk
index 7297250..2e19a63 100644
--- a/skia/skia_library.target.darwin-x86.mk
+++ b/skia/skia_library.target.darwin-x86.mk
@@ -53,6 +53,7 @@
 	third_party/skia/src/utils/SkCanvasStateUtils.cpp \
 	third_party/skia/src/utils/SkEventTracer.cpp \
 	third_party/skia/src/utils/SkDeferredCanvas.cpp \
+	third_party/skia/src/utils/SkMatrix22.cpp \
 	third_party/skia/src/utils/SkMatrix44.cpp \
 	third_party/skia/src/utils/SkNullCanvas.cpp \
 	third_party/skia/src/utils/SkNWayCanvas.cpp \
@@ -63,6 +64,7 @@
 	third_party/skia/src/core/SkAnnotation.cpp \
 	third_party/skia/src/core/SkAdvancedTypefaceMetrics.cpp \
 	third_party/skia/src/core/SkAlphaRuns.cpp \
+	third_party/skia/src/core/SkBBHFactory.cpp \
 	third_party/skia/src/core/SkBBoxRecord.cpp \
 	third_party/skia/src/core/SkBBoxHierarchyRecord.cpp \
 	third_party/skia/src/core/SkBitmap.cpp \
@@ -148,6 +150,7 @@
 	third_party/skia/src/core/SkPictureFlat.cpp \
 	third_party/skia/src/core/SkPicturePlayback.cpp \
 	third_party/skia/src/core/SkPictureRecord.cpp \
+	third_party/skia/src/core/SkPictureRecorder.cpp \
 	third_party/skia/src/core/SkPictureShader.cpp \
 	third_party/skia/src/core/SkPictureStateTree.cpp \
 	third_party/skia/src/core/SkPixelRef.cpp \
@@ -166,6 +169,7 @@
 	third_party/skia/src/core/SkRegion_path.cpp \
 	third_party/skia/src/core/SkRRect.cpp \
 	third_party/skia/src/core/SkRTree.cpp \
+	third_party/skia/src/core/SkRTreePicture.cpp \
 	third_party/skia/src/core/SkScaledImageCache.cpp \
 	third_party/skia/src/core/SkScalar.cpp \
 	third_party/skia/src/core/SkScalerContext.cpp \
@@ -468,7 +472,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -486,7 +494,6 @@
 	'-DSK_GAMMA_CONTRAST=0.0' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-DANDROID' \
@@ -608,7 +615,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -626,7 +637,6 @@
 	'-DSK_GAMMA_CONTRAST=0.0' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-DANDROID' \
@@ -699,7 +709,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/skia/skia_library.target.darwin-x86_64.mk b/skia/skia_library.target.darwin-x86_64.mk
index 38e4ff9..1227738 100644
--- a/skia/skia_library.target.darwin-x86_64.mk
+++ b/skia/skia_library.target.darwin-x86_64.mk
@@ -53,6 +53,7 @@
 	third_party/skia/src/utils/SkCanvasStateUtils.cpp \
 	third_party/skia/src/utils/SkEventTracer.cpp \
 	third_party/skia/src/utils/SkDeferredCanvas.cpp \
+	third_party/skia/src/utils/SkMatrix22.cpp \
 	third_party/skia/src/utils/SkMatrix44.cpp \
 	third_party/skia/src/utils/SkNullCanvas.cpp \
 	third_party/skia/src/utils/SkNWayCanvas.cpp \
@@ -63,6 +64,7 @@
 	third_party/skia/src/core/SkAnnotation.cpp \
 	third_party/skia/src/core/SkAdvancedTypefaceMetrics.cpp \
 	third_party/skia/src/core/SkAlphaRuns.cpp \
+	third_party/skia/src/core/SkBBHFactory.cpp \
 	third_party/skia/src/core/SkBBoxRecord.cpp \
 	third_party/skia/src/core/SkBBoxHierarchyRecord.cpp \
 	third_party/skia/src/core/SkBitmap.cpp \
@@ -148,6 +150,7 @@
 	third_party/skia/src/core/SkPictureFlat.cpp \
 	third_party/skia/src/core/SkPicturePlayback.cpp \
 	third_party/skia/src/core/SkPictureRecord.cpp \
+	third_party/skia/src/core/SkPictureRecorder.cpp \
 	third_party/skia/src/core/SkPictureShader.cpp \
 	third_party/skia/src/core/SkPictureStateTree.cpp \
 	third_party/skia/src/core/SkPixelRef.cpp \
@@ -166,6 +169,7 @@
 	third_party/skia/src/core/SkRegion_path.cpp \
 	third_party/skia/src/core/SkRRect.cpp \
 	third_party/skia/src/core/SkRTree.cpp \
+	third_party/skia/src/core/SkRTreePicture.cpp \
 	third_party/skia/src/core/SkScaledImageCache.cpp \
 	third_party/skia/src/core/SkScalar.cpp \
 	third_party/skia/src/core/SkScalerContext.cpp \
@@ -468,7 +472,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -486,7 +494,6 @@
 	'-DSK_GAMMA_CONTRAST=0.0' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-DANDROID' \
@@ -608,7 +615,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -626,7 +637,6 @@
 	'-DSK_GAMMA_CONTRAST=0.0' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-DANDROID' \
@@ -699,7 +709,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/skia/skia_library.target.linux-arm.mk b/skia/skia_library.target.linux-arm.mk
index 2de61f7..6041cef 100644
--- a/skia/skia_library.target.linux-arm.mk
+++ b/skia/skia_library.target.linux-arm.mk
@@ -52,6 +52,7 @@
 	third_party/skia/src/utils/SkCanvasStateUtils.cpp \
 	third_party/skia/src/utils/SkEventTracer.cpp \
 	third_party/skia/src/utils/SkDeferredCanvas.cpp \
+	third_party/skia/src/utils/SkMatrix22.cpp \
 	third_party/skia/src/utils/SkMatrix44.cpp \
 	third_party/skia/src/utils/SkNullCanvas.cpp \
 	third_party/skia/src/utils/SkNWayCanvas.cpp \
@@ -62,6 +63,7 @@
 	third_party/skia/src/core/SkAnnotation.cpp \
 	third_party/skia/src/core/SkAdvancedTypefaceMetrics.cpp \
 	third_party/skia/src/core/SkAlphaRuns.cpp \
+	third_party/skia/src/core/SkBBHFactory.cpp \
 	third_party/skia/src/core/SkBBoxRecord.cpp \
 	third_party/skia/src/core/SkBBoxHierarchyRecord.cpp \
 	third_party/skia/src/core/SkBitmap.cpp \
@@ -147,6 +149,7 @@
 	third_party/skia/src/core/SkPictureFlat.cpp \
 	third_party/skia/src/core/SkPicturePlayback.cpp \
 	third_party/skia/src/core/SkPictureRecord.cpp \
+	third_party/skia/src/core/SkPictureRecorder.cpp \
 	third_party/skia/src/core/SkPictureShader.cpp \
 	third_party/skia/src/core/SkPictureStateTree.cpp \
 	third_party/skia/src/core/SkPixelRef.cpp \
@@ -165,6 +168,7 @@
 	third_party/skia/src/core/SkRegion_path.cpp \
 	third_party/skia/src/core/SkRRect.cpp \
 	third_party/skia/src/core/SkRTree.cpp \
+	third_party/skia/src/core/SkRTreePicture.cpp \
 	third_party/skia/src/core/SkScaledImageCache.cpp \
 	third_party/skia/src/core/SkScalar.cpp \
 	third_party/skia/src/core/SkScalerContext.cpp \
@@ -467,7 +471,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -486,7 +494,6 @@
 	'-DSK_USE_POSIX_THREADS' \
 	'-D__ARM_HAVE_OPTIONAL_NEON_SUPPORT' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-DANDROID' \
@@ -608,7 +615,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -627,7 +638,6 @@
 	'-DSK_USE_POSIX_THREADS' \
 	'-D__ARM_HAVE_OPTIONAL_NEON_SUPPORT' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-DANDROID' \
@@ -703,7 +713,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/skia/skia_library.target.linux-mips.mk b/skia/skia_library.target.linux-mips.mk
index 979011f..01d7e2d 100644
--- a/skia/skia_library.target.linux-mips.mk
+++ b/skia/skia_library.target.linux-mips.mk
@@ -52,6 +52,7 @@
 	third_party/skia/src/utils/SkCanvasStateUtils.cpp \
 	third_party/skia/src/utils/SkEventTracer.cpp \
 	third_party/skia/src/utils/SkDeferredCanvas.cpp \
+	third_party/skia/src/utils/SkMatrix22.cpp \
 	third_party/skia/src/utils/SkMatrix44.cpp \
 	third_party/skia/src/utils/SkNullCanvas.cpp \
 	third_party/skia/src/utils/SkNWayCanvas.cpp \
@@ -62,6 +63,7 @@
 	third_party/skia/src/core/SkAnnotation.cpp \
 	third_party/skia/src/core/SkAdvancedTypefaceMetrics.cpp \
 	third_party/skia/src/core/SkAlphaRuns.cpp \
+	third_party/skia/src/core/SkBBHFactory.cpp \
 	third_party/skia/src/core/SkBBoxRecord.cpp \
 	third_party/skia/src/core/SkBBoxHierarchyRecord.cpp \
 	third_party/skia/src/core/SkBitmap.cpp \
@@ -147,6 +149,7 @@
 	third_party/skia/src/core/SkPictureFlat.cpp \
 	third_party/skia/src/core/SkPicturePlayback.cpp \
 	third_party/skia/src/core/SkPictureRecord.cpp \
+	third_party/skia/src/core/SkPictureRecorder.cpp \
 	third_party/skia/src/core/SkPictureShader.cpp \
 	third_party/skia/src/core/SkPictureStateTree.cpp \
 	third_party/skia/src/core/SkPixelRef.cpp \
@@ -165,6 +168,7 @@
 	third_party/skia/src/core/SkRegion_path.cpp \
 	third_party/skia/src/core/SkRRect.cpp \
 	third_party/skia/src/core/SkRTree.cpp \
+	third_party/skia/src/core/SkRTreePicture.cpp \
 	third_party/skia/src/core/SkScaledImageCache.cpp \
 	third_party/skia/src/core/SkScalar.cpp \
 	third_party/skia/src/core/SkScalerContext.cpp \
@@ -466,7 +470,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -484,7 +492,6 @@
 	'-DSK_GAMMA_CONTRAST=0.0' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-DANDROID' \
@@ -606,7 +613,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -624,7 +635,6 @@
 	'-DSK_GAMMA_CONTRAST=0.0' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-DANDROID' \
@@ -698,7 +708,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/skia/skia_library.target.linux-x86.mk b/skia/skia_library.target.linux-x86.mk
index 7297250..2e19a63 100644
--- a/skia/skia_library.target.linux-x86.mk
+++ b/skia/skia_library.target.linux-x86.mk
@@ -53,6 +53,7 @@
 	third_party/skia/src/utils/SkCanvasStateUtils.cpp \
 	third_party/skia/src/utils/SkEventTracer.cpp \
 	third_party/skia/src/utils/SkDeferredCanvas.cpp \
+	third_party/skia/src/utils/SkMatrix22.cpp \
 	third_party/skia/src/utils/SkMatrix44.cpp \
 	third_party/skia/src/utils/SkNullCanvas.cpp \
 	third_party/skia/src/utils/SkNWayCanvas.cpp \
@@ -63,6 +64,7 @@
 	third_party/skia/src/core/SkAnnotation.cpp \
 	third_party/skia/src/core/SkAdvancedTypefaceMetrics.cpp \
 	third_party/skia/src/core/SkAlphaRuns.cpp \
+	third_party/skia/src/core/SkBBHFactory.cpp \
 	third_party/skia/src/core/SkBBoxRecord.cpp \
 	third_party/skia/src/core/SkBBoxHierarchyRecord.cpp \
 	third_party/skia/src/core/SkBitmap.cpp \
@@ -148,6 +150,7 @@
 	third_party/skia/src/core/SkPictureFlat.cpp \
 	third_party/skia/src/core/SkPicturePlayback.cpp \
 	third_party/skia/src/core/SkPictureRecord.cpp \
+	third_party/skia/src/core/SkPictureRecorder.cpp \
 	third_party/skia/src/core/SkPictureShader.cpp \
 	third_party/skia/src/core/SkPictureStateTree.cpp \
 	third_party/skia/src/core/SkPixelRef.cpp \
@@ -166,6 +169,7 @@
 	third_party/skia/src/core/SkRegion_path.cpp \
 	third_party/skia/src/core/SkRRect.cpp \
 	third_party/skia/src/core/SkRTree.cpp \
+	third_party/skia/src/core/SkRTreePicture.cpp \
 	third_party/skia/src/core/SkScaledImageCache.cpp \
 	third_party/skia/src/core/SkScalar.cpp \
 	third_party/skia/src/core/SkScalerContext.cpp \
@@ -468,7 +472,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -486,7 +494,6 @@
 	'-DSK_GAMMA_CONTRAST=0.0' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-DANDROID' \
@@ -608,7 +615,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -626,7 +637,6 @@
 	'-DSK_GAMMA_CONTRAST=0.0' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-DANDROID' \
@@ -699,7 +709,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/skia/skia_library.target.linux-x86_64.mk b/skia/skia_library.target.linux-x86_64.mk
index 38e4ff9..1227738 100644
--- a/skia/skia_library.target.linux-x86_64.mk
+++ b/skia/skia_library.target.linux-x86_64.mk
@@ -53,6 +53,7 @@
 	third_party/skia/src/utils/SkCanvasStateUtils.cpp \
 	third_party/skia/src/utils/SkEventTracer.cpp \
 	third_party/skia/src/utils/SkDeferredCanvas.cpp \
+	third_party/skia/src/utils/SkMatrix22.cpp \
 	third_party/skia/src/utils/SkMatrix44.cpp \
 	third_party/skia/src/utils/SkNullCanvas.cpp \
 	third_party/skia/src/utils/SkNWayCanvas.cpp \
@@ -63,6 +64,7 @@
 	third_party/skia/src/core/SkAnnotation.cpp \
 	third_party/skia/src/core/SkAdvancedTypefaceMetrics.cpp \
 	third_party/skia/src/core/SkAlphaRuns.cpp \
+	third_party/skia/src/core/SkBBHFactory.cpp \
 	third_party/skia/src/core/SkBBoxRecord.cpp \
 	third_party/skia/src/core/SkBBoxHierarchyRecord.cpp \
 	third_party/skia/src/core/SkBitmap.cpp \
@@ -148,6 +150,7 @@
 	third_party/skia/src/core/SkPictureFlat.cpp \
 	third_party/skia/src/core/SkPicturePlayback.cpp \
 	third_party/skia/src/core/SkPictureRecord.cpp \
+	third_party/skia/src/core/SkPictureRecorder.cpp \
 	third_party/skia/src/core/SkPictureShader.cpp \
 	third_party/skia/src/core/SkPictureStateTree.cpp \
 	third_party/skia/src/core/SkPixelRef.cpp \
@@ -166,6 +169,7 @@
 	third_party/skia/src/core/SkRegion_path.cpp \
 	third_party/skia/src/core/SkRRect.cpp \
 	third_party/skia/src/core/SkRTree.cpp \
+	third_party/skia/src/core/SkRTreePicture.cpp \
 	third_party/skia/src/core/SkScaledImageCache.cpp \
 	third_party/skia/src/core/SkScalar.cpp \
 	third_party/skia/src/core/SkScalerContext.cpp \
@@ -468,7 +472,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -486,7 +494,6 @@
 	'-DSK_GAMMA_CONTRAST=0.0' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-DANDROID' \
@@ -608,7 +615,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -626,7 +637,6 @@
 	'-DSK_GAMMA_CONTRAST=0.0' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-DANDROID' \
@@ -699,7 +709,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/skia/skia_opts.target.darwin-arm.mk b/skia/skia_opts.target.darwin-arm.mk
index 5550cd9..a0e3f04 100644
--- a/skia/skia_opts.target.darwin-arm.mk
+++ b/skia/skia_opts.target.darwin-arm.mk
@@ -100,7 +100,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -222,7 +226,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -296,7 +304,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/skia/skia_opts.target.darwin-mips.mk b/skia/skia_opts.target.darwin-mips.mk
index 1b02de0..b4ffe79 100644
--- a/skia/skia_opts.target.darwin-mips.mk
+++ b/skia/skia_opts.target.darwin-mips.mk
@@ -98,7 +98,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -218,7 +222,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -289,7 +297,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/skia/skia_opts.target.darwin-x86.mk b/skia/skia_opts.target.darwin-x86.mk
index ed48300..7d5decf 100644
--- a/skia/skia_opts.target.darwin-x86.mk
+++ b/skia/skia_opts.target.darwin-x86.mk
@@ -99,7 +99,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -218,7 +222,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -288,7 +296,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/skia/skia_opts.target.darwin-x86_64.mk b/skia/skia_opts.target.darwin-x86_64.mk
index a894ef8..7d95840 100644
--- a/skia/skia_opts.target.darwin-x86_64.mk
+++ b/skia/skia_opts.target.darwin-x86_64.mk
@@ -99,7 +99,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -218,7 +222,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -288,7 +296,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/skia/skia_opts.target.linux-arm.mk b/skia/skia_opts.target.linux-arm.mk
index 5550cd9..a0e3f04 100644
--- a/skia/skia_opts.target.linux-arm.mk
+++ b/skia/skia_opts.target.linux-arm.mk
@@ -100,7 +100,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -222,7 +226,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -296,7 +304,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/skia/skia_opts.target.linux-mips.mk b/skia/skia_opts.target.linux-mips.mk
index 1b02de0..b4ffe79 100644
--- a/skia/skia_opts.target.linux-mips.mk
+++ b/skia/skia_opts.target.linux-mips.mk
@@ -98,7 +98,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -218,7 +222,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -289,7 +297,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/skia/skia_opts.target.linux-x86.mk b/skia/skia_opts.target.linux-x86.mk
index ed48300..7d5decf 100644
--- a/skia/skia_opts.target.linux-x86.mk
+++ b/skia/skia_opts.target.linux-x86.mk
@@ -99,7 +99,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -218,7 +222,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -288,7 +296,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/skia/skia_opts.target.linux-x86_64.mk b/skia/skia_opts.target.linux-x86_64.mk
index a894ef8..7d95840 100644
--- a/skia/skia_opts.target.linux-x86_64.mk
+++ b/skia/skia_opts.target.linux-x86_64.mk
@@ -99,7 +99,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -218,7 +222,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -288,7 +296,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/skia/skia_opts_neon.target.darwin-arm.mk b/skia/skia_opts_neon.target.darwin-arm.mk
index 7d72ff5..8cc6365 100644
--- a/skia/skia_opts_neon.target.darwin-arm.mk
+++ b/skia/skia_opts_neon.target.darwin-arm.mk
@@ -101,7 +101,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -223,7 +227,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -299,7 +307,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/skia/skia_opts_neon.target.linux-arm.mk b/skia/skia_opts_neon.target.linux-arm.mk
index 7d72ff5..8cc6365 100644
--- a/skia/skia_opts_neon.target.linux-arm.mk
+++ b/skia/skia_opts_neon.target.linux-arm.mk
@@ -101,7 +101,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -223,7 +227,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -299,7 +307,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/skia/skia_opts_ssse3.target.darwin-x86.mk b/skia/skia_opts_ssse3.target.darwin-x86.mk
index 064a679..49200be 100644
--- a/skia/skia_opts_ssse3.target.darwin-x86.mk
+++ b/skia/skia_opts_ssse3.target.darwin-x86.mk
@@ -93,7 +93,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -212,7 +216,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -281,7 +289,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/skia/skia_opts_ssse3.target.darwin-x86_64.mk b/skia/skia_opts_ssse3.target.darwin-x86_64.mk
index e8966d1..27d8c06 100644
--- a/skia/skia_opts_ssse3.target.darwin-x86_64.mk
+++ b/skia/skia_opts_ssse3.target.darwin-x86_64.mk
@@ -93,7 +93,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -212,7 +216,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -281,7 +289,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/skia/skia_opts_ssse3.target.linux-x86.mk b/skia/skia_opts_ssse3.target.linux-x86.mk
index 064a679..49200be 100644
--- a/skia/skia_opts_ssse3.target.linux-x86.mk
+++ b/skia/skia_opts_ssse3.target.linux-x86.mk
@@ -93,7 +93,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -212,7 +216,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -281,7 +289,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/skia/skia_opts_ssse3.target.linux-x86_64.mk b/skia/skia_opts_ssse3.target.linux-x86_64.mk
index e8966d1..27d8c06 100644
--- a/skia/skia_opts_ssse3.target.linux-x86_64.mk
+++ b/skia/skia_opts_ssse3.target.linux-x86_64.mk
@@ -93,7 +93,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -212,7 +216,11 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0' \
@@ -281,7 +289,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/skia/skia_test_expectations.txt b/skia/skia_test_expectations.txt
index edb6b9d..1c56eff 100644
--- a/skia/skia_test_expectations.txt
+++ b/skia/skia_test_expectations.txt
@@ -55,4 +55,8 @@
 crbug.com/356644 fast/canvas/image-pattern-rotate.html [ ImageOnlyFailure ]
 crbug.com/356644 virtual/gpu/fast/canvas/image-object-in-canvas.html [ ImageOnlyFailure ]
 
+# Roll to 14271+ cases negligible changes to SkTwoPtConicalGradient.
+crbug.com/365698 fast/gradients/radial-centered.html [ ImageOnlyFailure ]
+crbug.com/365698 svg/custom/radialGradient-focal-radius.svg [ ImageOnlyFailure ]
+
 # END OVERRIDES HERE (this line ensures that the file is newline-terminated)
diff --git a/sql/sql.gyp b/sql/sql.gyp
index 0d861a8..f62a2eb 100644
--- a/sql/sql.gyp
+++ b/sql/sql.gyp
@@ -130,7 +130,6 @@
           ],
           'variables': {
             'test_suite_name': 'sql_unittests',
-            'input_shlib_path': '<(SHARED_LIB_DIR)/<(SHARED_LIB_PREFIX)sql_unittests<(SHARED_LIB_SUFFIX)',
           },
           'includes': [ '../build/apk_test.gypi' ],
         },
diff --git a/sql/sql.target.darwin-arm.mk b/sql/sql.target.darwin-arm.mk
index 9bdd471..6e1cdfa 100644
--- a/sql/sql.target.darwin-arm.mk
+++ b/sql/sql.target.darwin-arm.mk
@@ -232,7 +232,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/sql/sql.target.darwin-mips.mk b/sql/sql.target.darwin-mips.mk
index aabb6e1..fde2034 100644
--- a/sql/sql.target.darwin-mips.mk
+++ b/sql/sql.target.darwin-mips.mk
@@ -228,7 +228,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/sql/sql.target.darwin-x86.mk b/sql/sql.target.darwin-x86.mk
index cb9a2e9..c9bf1f4 100644
--- a/sql/sql.target.darwin-x86.mk
+++ b/sql/sql.target.darwin-x86.mk
@@ -230,7 +230,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/sql/sql.target.darwin-x86_64.mk b/sql/sql.target.darwin-x86_64.mk
index 86aa9d5..3f5d446 100644
--- a/sql/sql.target.darwin-x86_64.mk
+++ b/sql/sql.target.darwin-x86_64.mk
@@ -230,7 +230,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/sql/sql.target.linux-arm.mk b/sql/sql.target.linux-arm.mk
index 9bdd471..6e1cdfa 100644
--- a/sql/sql.target.linux-arm.mk
+++ b/sql/sql.target.linux-arm.mk
@@ -232,7 +232,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/sql/sql.target.linux-mips.mk b/sql/sql.target.linux-mips.mk
index aabb6e1..fde2034 100644
--- a/sql/sql.target.linux-mips.mk
+++ b/sql/sql.target.linux-mips.mk
@@ -228,7 +228,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/sql/sql.target.linux-x86.mk b/sql/sql.target.linux-x86.mk
index cb9a2e9..c9bf1f4 100644
--- a/sql/sql.target.linux-x86.mk
+++ b/sql/sql.target.linux-x86.mk
@@ -230,7 +230,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/sql/sql.target.linux-x86_64.mk b/sql/sql.target.linux-x86_64.mk
index 86aa9d5..3f5d446 100644
--- a/sql/sql.target.linux-x86_64.mk
+++ b/sql/sql.target.linux-x86_64.mk
@@ -230,7 +230,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/sync/OWNERS b/sync/OWNERS
index 037186c..345068b 100644
--- a/sync/OWNERS
+++ b/sync/OWNERS
@@ -5,6 +5,7 @@
 tim@chromium.org
 zea@chromium.org
 haitaol@chromium.org
+pavely@chromium.org
 
 per-file sync_android.gypi=nyquist@chromium.org
 per-file sync_android.gypi=yfriedman@chromium.org
diff --git a/sync/api/attachments/attachment_service.h b/sync/api/attachments/attachment_service.h
index d148b0c..81a1a63 100644
--- a/sync/api/attachments/attachment_service.h
+++ b/sync/api/attachments/attachment_service.h
@@ -20,22 +20,24 @@
 //
 // Outside of sync code, AttachmentService shouldn't be used directly. Instead
 // use the functionality provided by SyncData and SyncChangeProcessor.
+//
+// Destroying this object does not necessarily cancel outstanding async
+// operations. If you need cancel like semantics, use WeakPtr in the callbacks.
 class SYNC_EXPORT AttachmentService {
  public:
   // The result of a GetOrDownloadAttachments operation.
   enum GetOrDownloadResult {
-    GET_SUCCESS,            // No error.
-    GET_NOT_FOUND,          // Attachment was not found or does not exist.
+    GET_SUCCESS,            // No error, all attachments returned.
     GET_UNSPECIFIED_ERROR,  // An unspecified error occurred.
   };
 
   typedef base::Callback<
-      void(const GetOrDownloadResult&, const AttachmentMap& attachments)>
+      void(const GetOrDownloadResult&, scoped_ptr<AttachmentMap> attachments)>
       GetOrDownloadCallback;
 
   // The result of a DropAttachments operation.
   enum DropResult {
-    DROP_SUCCESS,            // No error.
+    DROP_SUCCESS,            // No error, all attachments dropped.
     DROP_UNSPECIFIED_ERROR,  // An unspecified error occurred.
   };
 
diff --git a/sync/api/attachments/attachment_service_proxy.cc b/sync/api/attachments/attachment_service_proxy.cc
index b95a41f..9bc40e5 100644
--- a/sync/api/attachments/attachment_service_proxy.cc
+++ b/sync/api/attachments/attachment_service_proxy.cc
@@ -21,8 +21,9 @@
     const scoped_refptr<base::SequencedTaskRunner>& task_runner,
     const AttachmentService::GetOrDownloadCallback& callback,
     const AttachmentService::GetOrDownloadResult& result,
-    const AttachmentMap& attachments) {
-  task_runner->PostTask(FROM_HERE, base::Bind(callback, result, attachments));
+    scoped_ptr<AttachmentMap> attachments) {
+  task_runner->PostTask(
+      FROM_HERE, base::Bind(callback, result, base::Passed(&attachments)));
 }
 
 // Invokes |callback| with |result| and |attachments| in the |task_runner|
diff --git a/sync/api/attachments/attachment_service_proxy_unittest.cc b/sync/api/attachments/attachment_service_proxy_unittest.cc
index eed5e6b..f6e3502 100644
--- a/sync/api/attachments/attachment_service_proxy_unittest.cc
+++ b/sync/api/attachments/attachment_service_proxy_unittest.cc
@@ -40,10 +40,12 @@
       OVERRIDE {
     CalledOnValidThread();
     Increment();
+    scoped_ptr<AttachmentMap> attachments(new AttachmentMap());
     base::MessageLoop::current()->PostTask(
         FROM_HERE,
-        base::Bind(
-            callback, AttachmentService::GET_NOT_FOUND, AttachmentMap()));
+        base::Bind(callback,
+                   AttachmentService::GET_UNSPECIFIED_ERROR,
+                   base::Passed(&attachments)));
   }
 
   virtual void DropAttachments(const AttachmentIdList& attachment_ids,
@@ -134,7 +136,7 @@
 
   // a GetOrDownloadCallback
   void IncrementGetOrDownload(const AttachmentService::GetOrDownloadResult&,
-                              const AttachmentMap&) {
+                              scoped_ptr<AttachmentMap>) {
     CalledOnValidThread();
     ++count_callback_get_or_download;
   }
diff --git a/sync/api/attachments/attachment_store.h b/sync/api/attachments/attachment_store.h
index 1d623ce..d86cd1b 100644
--- a/sync/api/attachments/attachment_store.h
+++ b/sync/api/attachments/attachment_store.h
@@ -8,6 +8,8 @@
 #include "base/callback.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/scoped_ptr.h"
+#include "sync/api/attachments/attachment.h"
+#include "sync/api/attachments/attachment_id.h"
 #include "sync/base/sync_export.h"
 
 namespace base {
@@ -20,6 +22,9 @@
 class AttachmentId;
 
 // A place to locally store and access Attachments.
+//
+// Destroying this object does not necessarily cancel outstanding async
+// operations. If you need cancel like semantics, use WeakPtr in the callbacks.
 class SYNC_EXPORT AttachmentStore {
  public:
   AttachmentStore();
@@ -29,36 +34,50 @@
   // resumable transfers (bug 353292).
 
   enum Result {
-    SUCCESS,            // No error.
-    NOT_FOUND,          // Attachment was not found or does not exist.
-    UNSPECIFIED_ERROR,  // An unspecified error occurred.
+    SUCCESS,            // No error, all completed successfully.
+    UNSPECIFIED_ERROR,  // An unspecified error occurred for one or more items.
   };
 
-  typedef base::Callback<void(const Result&, scoped_ptr<Attachment>)>
+  typedef base::Callback<void(const Result&, scoped_ptr<AttachmentMap>)>
       ReadCallback;
-  typedef base::Callback<void(const Result&, const AttachmentId& id)>
-      WriteCallback;
+  typedef base::Callback<void(const Result&)> WriteCallback;
   typedef base::Callback<void(const Result&)> DropCallback;
 
-  // Asynchronously reads the attachment identified by |id|.
+  // Asynchronously reads the attachments identified by |ids|.
   //
-  // |callback| will be invoked when finished. If the attachment does not exist,
-  // |callback|'s Result will be NOT_FOUND and |callback|'s attachment will be
-  // null.
-  virtual void Read(const AttachmentId& id, const ReadCallback& callback) = 0;
+  // |callback| will be invoked when finished. If any of the attachments do not
+  // exist or could not be read, |callback|'s Result will be UNSPECIFIED_ERROR
+  // and |callback| may receive a partial result. That is, AttachmentMap may be
+  // empty or may contain the attachments that were read successfully.
+  //
+  // Reads on individual attachments are treated atomically; |callback| will not
+  // read only part of an attachment.
+  virtual void Read(const AttachmentIdList& ids,
+                    const ReadCallback& callback) = 0;
 
-  // Asynchronously writes |bytes| to the store.
+  // Asynchronously writes |attachments| to the store.
   //
-  // |callback| will be invoked when finished.
-  virtual void Write(const scoped_refptr<base::RefCountedMemory>& bytes,
+  // Will not overwrite stored attachments. Attempting to overwrite an
+  // attachment that already exists is not an error.
+  //
+  // |callback| will be invoked when finished. If any of the attachments could
+  // not be written |callback|'s Result will be UNSPECIFIED_ERROR. When this
+  // happens, some or none of the attachments may have been written
+  // successfully.
+  virtual void Write(const AttachmentList& attachments,
                      const WriteCallback& callback) = 0;
 
-  // Asynchronously drops the attchment with the given id from this store.
+  // Asynchronously drops |attchments| from this store.
   //
-  // This does not remove the attachment from the server. |callback| will be
-  // invoked when finished. If the attachment does not exist, |callback|'s
-  // Result will be NOT_FOUND.
-  virtual void Drop(const AttachmentId& id, const DropCallback& callback) = 0;
+  // This does not remove attachments from the server.
+  //
+  // |callback| will be invoked when finished. Attempting to drop an attachment
+  // that does not exist is not an error. If any of the existing attachment
+  // could not be dropped, |callback|'s Result will be UNSPECIFIED_ERROR. When
+  // this happens, some or none of the attachments may have been dropped
+  // successfully.
+  virtual void Drop(const AttachmentIdList& ids,
+                    const DropCallback& callback) = 0;
 };
 
 }  // namespace syncer
diff --git a/sync/api/attachments/fake_attachment_service.cc b/sync/api/attachments/fake_attachment_service.cc
index 86dfaeb..8e9e867 100644
--- a/sync/api/attachments/fake_attachment_service.cc
+++ b/sync/api/attachments/fake_attachment_service.cc
@@ -4,14 +4,17 @@
 
 #include "sync/api/attachments/fake_attachment_service.h"
 
+#include "base/bind.h"
+#include "base/message_loop/message_loop.h"
 #include "base/test/test_simple_task_runner.h"
+#include "sync/api/attachments/attachment.h"
 #include "sync/api/attachments/fake_attachment_store.h"
 
 namespace syncer {
 
 FakeAttachmentService::FakeAttachmentService(
     scoped_ptr<AttachmentStore> attachment_store)
-    : attachment_store_(attachment_store.Pass()) {
+    : attachment_store_(attachment_store.Pass()), weak_ptr_factory_(this) {
   DCHECK(CalledOnValidThread());
   DCHECK(attachment_store_);
 }
@@ -34,16 +37,20 @@
     const AttachmentIdList& attachment_ids,
     const GetOrDownloadCallback& callback) {
   DCHECK(CalledOnValidThread());
-  // TODO(maniscalco): Fire off a bunch of AttachmentStore operations.  Invoke
-  // callback after all have completed (bug 356351).
+  attachment_store_->Read(attachment_ids,
+                          base::Bind(&FakeAttachmentService::ReadDone,
+                                     weak_ptr_factory_.GetWeakPtr(),
+                                     callback));
 }
 
 void FakeAttachmentService::DropAttachments(
     const AttachmentIdList& attachment_ids,
     const DropCallback& callback) {
   DCHECK(CalledOnValidThread());
-  // TODO(maniscalco): Fire off a bunch of AttachmentStore operations.  Invoke
-  // callback after all have completed (bug 356351).
+  attachment_store_->Drop(attachment_ids,
+                          base::Bind(&FakeAttachmentService::DropDone,
+                                     weak_ptr_factory_.GetWeakPtr(),
+                                     callback));
 }
 
 void FakeAttachmentService::OnSyncDataAdd(const SyncData& sync_data) {
@@ -69,4 +76,29 @@
   // attachments from local storage (bug 356351).
 }
 
+void FakeAttachmentService::ReadDone(const GetOrDownloadCallback& callback,
+                                     const AttachmentStore::Result& result,
+                                     scoped_ptr<AttachmentMap> attachments) {
+  AttachmentService::GetOrDownloadResult get_result =
+      AttachmentService::GET_UNSPECIFIED_ERROR;
+  if (result == AttachmentStore::SUCCESS) {
+    get_result = AttachmentService::GET_SUCCESS;
+  }
+  // TODO(maniscalco): Deal with case where an error occurred (bug 361251).
+  base::MessageLoop::current()->PostTask(
+      FROM_HERE, base::Bind(callback, get_result, base::Passed(&attachments)));
+}
+
+void FakeAttachmentService::DropDone(const DropCallback& callback,
+                                     const AttachmentStore::Result& result) {
+  AttachmentService::DropResult drop_result =
+      AttachmentService::DROP_UNSPECIFIED_ERROR;
+  if (result == AttachmentStore::SUCCESS) {
+    drop_result = AttachmentService::DROP_SUCCESS;
+  }
+  // TODO(maniscalco): Deal with case where an error occurred (bug 361251).
+  base::MessageLoop::current()->PostTask(FROM_HERE,
+                                         base::Bind(callback, drop_result));
+}
+
 }  // namespace syncer
diff --git a/sync/api/attachments/fake_attachment_service.h b/sync/api/attachments/fake_attachment_service.h
index 3bbd5d6..eb97c52 100644
--- a/sync/api/attachments/fake_attachment_service.h
+++ b/sync/api/attachments/fake_attachment_service.h
@@ -35,7 +35,15 @@
                                 const SyncData& updated_sync_data) OVERRIDE;
 
  private:
+  void ReadDone(const GetOrDownloadCallback& callback,
+                const AttachmentStore::Result& result,
+                scoped_ptr<AttachmentMap> attachments);
+  void DropDone(const DropCallback& callback,
+                const AttachmentStore::Result& result);
+
   const scoped_ptr<AttachmentStore> attachment_store_;
+  // Must be last data member.
+  base::WeakPtrFactory<FakeAttachmentService> weak_ptr_factory_;
 
   DISALLOW_COPY_AND_ASSIGN(FakeAttachmentService);
 };
diff --git a/sync/api/attachments/fake_attachment_store.cc b/sync/api/attachments/fake_attachment_store.cc
index 53e42a2..18dd927 100644
--- a/sync/api/attachments/fake_attachment_store.cc
+++ b/sync/api/attachments/fake_attachment_store.cc
@@ -22,10 +22,9 @@
   Backend(
       const scoped_refptr<base::SingleThreadTaskRunner>& frontend_task_runner);
 
-  void Read(const AttachmentId& id, const ReadCallback& callback);
-  void Write(const scoped_refptr<base::RefCountedMemory>& bytes,
-             const WriteCallback& callback);
-  void Drop(const AttachmentId& id, const DropCallback& callback);
+  void Read(const AttachmentIdList& ids, const ReadCallback& callback);
+  void Write(const AttachmentList& attachments, const WriteCallback& callback);
+  void Drop(const AttachmentIdList& ids, const DropCallback& callback);
 
  private:
   friend class base::RefCountedThreadSafe<Backend>;
@@ -42,36 +41,48 @@
 
 FakeAttachmentStore::Backend::~Backend() {}
 
-void FakeAttachmentStore::Backend::Read(const AttachmentId& id,
+void FakeAttachmentStore::Backend::Read(const AttachmentIdList& ids,
                                         const ReadCallback& callback) {
-  AttachmentMap::iterator iter = attachments_.find(id);
-  scoped_ptr<Attachment> attachment;
-  Result result = NOT_FOUND;
-  if (iter != attachments_.end()) {
-    attachment.reset(new Attachment(iter->second));
-    result = SUCCESS;
+  Result result_code = SUCCESS;
+  AttachmentIdList::const_iterator id_iter = ids.begin();
+  AttachmentIdList::const_iterator id_end = ids.end();
+  scoped_ptr<AttachmentMap> result_map(new AttachmentMap);
+  for (; id_iter != id_end; ++id_iter) {
+    const AttachmentId& id = *id_iter;
+    syncer::AttachmentMap::iterator attachment_iter =
+        attachments_.find(*id_iter);
+    if (attachment_iter != attachments_.end()) {
+      const Attachment& attachment = attachment_iter->second;
+      result_map->insert(std::make_pair(id, attachment));
+    } else {
+      result_code = UNSPECIFIED_ERROR;
+      break;
+    }
   }
   frontend_task_runner_->PostTask(
-      FROM_HERE, base::Bind(callback, result, base::Passed(&attachment)));
+      FROM_HERE, base::Bind(callback, result_code, base::Passed(&result_map)));
 }
 
-void FakeAttachmentStore::Backend::Write(
-    const scoped_refptr<base::RefCountedMemory>& bytes,
-    const WriteCallback& callback) {
-  Attachment attachment = Attachment::Create(bytes);
-  AttachmentId attachment_id(attachment.GetId());
-  attachments_.insert(AttachmentMap::value_type(attachment_id, attachment));
-  frontend_task_runner_->PostTask(FROM_HERE,
-                                  base::Bind(callback, SUCCESS, attachment_id));
+void FakeAttachmentStore::Backend::Write(const AttachmentList& attachments,
+                                         const WriteCallback& callback) {
+  AttachmentList::const_iterator iter = attachments.begin();
+  AttachmentList::const_iterator end = attachments.end();
+  for (; iter != end; ++iter) {
+    attachments_.insert(std::make_pair(iter->GetId(), *iter));
+  }
+  frontend_task_runner_->PostTask(FROM_HERE, base::Bind(callback, SUCCESS));
 }
 
-void FakeAttachmentStore::Backend::Drop(const AttachmentId& id,
+void FakeAttachmentStore::Backend::Drop(const AttachmentIdList& ids,
                                         const DropCallback& callback) {
-  Result result = NOT_FOUND;
-  AttachmentMap::iterator iter = attachments_.find(id);
-  if (iter != attachments_.end()) {
-    attachments_.erase(iter);
-    result = SUCCESS;
+  Result result = SUCCESS;
+  AttachmentIdList::const_iterator ids_iter = ids.begin();
+  AttachmentIdList::const_iterator ids_end = ids.end();
+  for (; ids_iter != ids_end; ++ids_iter) {
+    AttachmentMap::iterator attachments_iter = attachments_.find(*ids_iter);
+    if (attachments_iter != attachments_.end()) {
+      attachments_.erase(attachments_iter);
+    }
   }
   frontend_task_runner_->PostTask(FROM_HERE, base::Bind(callback, result));
 }
@@ -83,27 +94,28 @@
 
 FakeAttachmentStore::~FakeAttachmentStore() {}
 
-void FakeAttachmentStore::Read(const AttachmentId& id,
+void FakeAttachmentStore::Read(const AttachmentIdList& ids,
                                const ReadCallback& callback) {
   backend_task_runner_->PostTask(
       FROM_HERE,
-      base::Bind(&FakeAttachmentStore::Backend::Read, backend_, id, callback));
+      base::Bind(&FakeAttachmentStore::Backend::Read, backend_, ids, callback));
 }
 
-void FakeAttachmentStore::Write(
-    const scoped_refptr<base::RefCountedMemory>& bytes,
-    const WriteCallback& callback) {
+void FakeAttachmentStore::Write(const AttachmentList& attachments,
+                                const WriteCallback& callback) {
   backend_task_runner_->PostTask(
       FROM_HERE,
-      base::Bind(
-          &FakeAttachmentStore::Backend::Write, backend_, bytes, callback));
+      base::Bind(&FakeAttachmentStore::Backend::Write,
+                 backend_,
+                 attachments,
+                 callback));
 }
 
-void FakeAttachmentStore::Drop(const AttachmentId& id,
+void FakeAttachmentStore::Drop(const AttachmentIdList& ids,
                                const DropCallback& callback) {
   backend_task_runner_->PostTask(
       FROM_HERE,
-      base::Bind(&FakeAttachmentStore::Backend::Drop, backend_, id, callback));
+      base::Bind(&FakeAttachmentStore::Backend::Drop, backend_, ids, callback));
 }
 
 }  // namespace syncer
diff --git a/sync/api/attachments/fake_attachment_store.h b/sync/api/attachments/fake_attachment_store.h
index 41fd927..35fad17 100644
--- a/sync/api/attachments/fake_attachment_store.h
+++ b/sync/api/attachments/fake_attachment_store.h
@@ -39,11 +39,11 @@
   virtual ~FakeAttachmentStore();
 
   // AttachmentStore implementation.
-  virtual void Read(const AttachmentId& id,
+  virtual void Read(const AttachmentIdList& id,
                     const ReadCallback& callback) OVERRIDE;
-  virtual void Write(const scoped_refptr<base::RefCountedMemory>& bytes,
+  virtual void Write(const AttachmentList& attachments,
                      const WriteCallback& callback) OVERRIDE;
-  virtual void Drop(const AttachmentId& id,
+  virtual void Drop(const AttachmentIdList& id,
                     const DropCallback& callback) OVERRIDE;
 
  private:
diff --git a/sync/api/attachments/fake_attachment_store_unittest.cc b/sync/api/attachments/fake_attachment_store_unittest.cc
index e560697..b8dc2a1 100644
--- a/sync/api/attachments/fake_attachment_store_unittest.cc
+++ b/sync/api/attachments/fake_attachment_store_unittest.cc
@@ -14,124 +14,226 @@
 
 namespace syncer {
 
-const char kTestData[] = "some data";
+const char kTestData1[] = "test data 1";
+const char kTestData2[] = "test data 2";
 
 class FakeAttachmentStoreTest : public testing::Test {
  protected:
-  FakeAttachmentStoreTest() : id(AttachmentId::Create()) {}
-
-  virtual void SetUp() {
-    Clear();
-    read_callback =
-        base::Bind(&FakeAttachmentStoreTest::CopyAttachmentAndResult,
-                   base::Unretained(this),
-                   &result,
-                   &attachment);
-    write_callback = base::Bind(&FakeAttachmentStoreTest::CopyResultAndId,
-                                base::Unretained(this),
-                                &result,
-                                &id);
-    drop_callback = base::Bind(
-        &FakeAttachmentStoreTest::CopyResult, base::Unretained(this), &result);
-  }
-
-  virtual void ClearAndPumpLoop() {
-    Clear();
-    message_loop_.RunUntilIdle();
-  }
-
+  base::MessageLoop message_loop;
+  FakeAttachmentStore store;
   AttachmentStore::Result result;
-  AttachmentId id;
-  scoped_ptr<Attachment> attachment;
+  scoped_ptr<AttachmentMap> attachments;
 
   AttachmentStore::ReadCallback read_callback;
   AttachmentStore::WriteCallback write_callback;
   AttachmentStore::DropCallback drop_callback;
 
+  scoped_refptr<base::RefCountedString> some_data1;
+  scoped_refptr<base::RefCountedString> some_data2;
+
+  FakeAttachmentStoreTest() : store(base::MessageLoopProxy::current()) {}
+
+  virtual void SetUp() {
+    Clear();
+    read_callback = base::Bind(&FakeAttachmentStoreTest::CopyResultAttachments,
+                               base::Unretained(this),
+                               &result,
+                               &attachments);
+    write_callback = base::Bind(
+        &FakeAttachmentStoreTest::CopyResult, base::Unretained(this), &result);
+    drop_callback = write_callback;
+
+    some_data1 = new base::RefCountedString;
+    some_data1->data() = kTestData1;
+
+    some_data2 = new base::RefCountedString;
+    some_data2->data() = kTestData2;
+  }
+
+  virtual void ClearAndPumpLoop() {
+    Clear();
+    message_loop.RunUntilIdle();
+  }
+
  private:
   void Clear() {
     result = AttachmentStore::UNSPECIFIED_ERROR;
-    attachment.reset();
+    attachments.reset();
   }
 
-  void CopyResult(AttachmentStore::Result* destination,
-                  const AttachmentStore::Result& source) {
-    *destination = source;
+  void CopyResult(AttachmentStore::Result* destination_result,
+                  const AttachmentStore::Result& source_result) {
+    *destination_result = source_result;
   }
 
-  void CopyResultAndId(AttachmentStore::Result* destination_result,
-                       AttachmentId* destination_id,
-                       const AttachmentStore::Result& source_result,
-                       const AttachmentId& source_id) {
+  void CopyResultAttachments(AttachmentStore::Result* destination_result,
+                             scoped_ptr<AttachmentMap>* destination_attachments,
+                             const AttachmentStore::Result& source_result,
+                             scoped_ptr<AttachmentMap> source_attachments) {
     CopyResult(destination_result, source_result);
-    *destination_id = source_id;
+    *destination_attachments = source_attachments.Pass();
   }
-
-  void CopyAttachmentAndResult(AttachmentStore::Result* destination_result,
-                               scoped_ptr<Attachment>* destination_attachment,
-                               const AttachmentStore::Result& source_result,
-                               scoped_ptr<Attachment> source_attachment) {
-    CopyResult(destination_result, source_result);
-    *destination_attachment = source_attachment.Pass();
-  }
-
-  base::MessageLoop message_loop_;
 };
 
-TEST_F(FakeAttachmentStoreTest, WriteReadRoundTrip) {
-  FakeAttachmentStore store(base::MessageLoopProxy::current());
-  scoped_refptr<base::RefCountedString> some_data(new base::RefCountedString);
-  some_data->data() = kTestData;
+// Verify that we do not overwrite existing attachments and that we do not treat
+// it as an error.
+TEST_F(FakeAttachmentStoreTest, Write_NoOverwriteNoError) {
+  // Create two attachments with the same id but different data.
+  Attachment attachment1 = Attachment::Create(some_data1);
+  Attachment attachment2 =
+      Attachment::CreateWithId(attachment1.GetId(), some_data2);
 
-  store.Write(some_data, write_callback);
+  // Write the first one.
+  AttachmentList some_attachments;
+  some_attachments.push_back(attachment1);
+  store.Write(some_attachments, write_callback);
   ClearAndPumpLoop();
   EXPECT_EQ(result, AttachmentStore::SUCCESS);
-  AttachmentId id_written(id);
 
-  store.Read(id_written, read_callback);
+  // Write the second one.
+  some_attachments.clear();
+  some_attachments.push_back(attachment2);
+  store.Write(some_attachments, write_callback);
   ClearAndPumpLoop();
   EXPECT_EQ(result, AttachmentStore::SUCCESS);
-  EXPECT_EQ(id_written, attachment->GetId());
-  EXPECT_EQ(some_data, attachment->GetData());
+
+  // Read it back and see that it was not overwritten.
+  AttachmentIdList some_attachment_ids;
+  some_attachment_ids.push_back(attachment1.GetId());
+  store.Read(some_attachment_ids, read_callback);
+  ClearAndPumpLoop();
+  EXPECT_EQ(result, AttachmentStore::SUCCESS);
+  EXPECT_EQ(attachments->size(), 1U);
+  AttachmentMap::const_iterator a1 = attachments->find(attachment1.GetId());
+  EXPECT_TRUE(a1 != attachments->end());
+  EXPECT_TRUE(attachment1.GetData()->Equals(a1->second.GetData()));
 }
 
-TEST_F(FakeAttachmentStoreTest, Read_NotFound) {
-  FakeAttachmentStore store(base::MessageLoopProxy::current());
-  scoped_refptr<base::RefCountedString> some_data(new base::RefCountedString);
-  Attachment some_attachment = Attachment::Create(some_data);
-  AttachmentId some_id = some_attachment.GetId();
-  store.Read(some_id, read_callback);
+// Verify that we can write some attachments and read them back.
+TEST_F(FakeAttachmentStoreTest, Write_RoundTrip) {
+  Attachment attachment1 = Attachment::Create(some_data1);
+  Attachment attachment2 = Attachment::Create(some_data2);
+  AttachmentList some_attachments;
+  some_attachments.push_back(attachment1);
+  some_attachments.push_back(attachment2);
+
+  store.Write(some_attachments, write_callback);
   ClearAndPumpLoop();
-  EXPECT_EQ(result, AttachmentStore::NOT_FOUND);
-  EXPECT_EQ(NULL, attachment.get());
+  EXPECT_EQ(result, AttachmentStore::SUCCESS);
+
+  AttachmentIdList some_attachment_ids;
+  some_attachment_ids.push_back(attachment1.GetId());
+  some_attachment_ids.push_back(attachment2.GetId());
+  store.Read(some_attachment_ids, read_callback);
+  ClearAndPumpLoop();
+  EXPECT_EQ(result, AttachmentStore::SUCCESS);
+  EXPECT_EQ(attachments->size(), 2U);
+
+  AttachmentMap::const_iterator a1 = attachments->find(attachment1.GetId());
+  EXPECT_TRUE(a1 != attachments->end());
+  EXPECT_TRUE(attachment1.GetData()->Equals(a1->second.GetData()));
+
+  AttachmentMap::const_iterator a2 = attachments->find(attachment2.GetId());
+  EXPECT_TRUE(a2 != attachments->end());
+  EXPECT_TRUE(attachment2.GetData()->Equals(a2->second.GetData()));
 }
 
-TEST_F(FakeAttachmentStoreTest, Drop) {
-  FakeAttachmentStore store(base::MessageLoopProxy::current());
-  scoped_refptr<base::RefCountedString> some_data(new base::RefCountedString);
-  some_data->data() = kTestData;
-  store.Write(some_data, write_callback);
-  ClearAndPumpLoop();
-  EXPECT_EQ(result, AttachmentStore::SUCCESS);
-  AttachmentId id_written(id);
+// Try to read two attachments when only one exists.
+TEST_F(FakeAttachmentStoreTest, Read_OneNotFound) {
+  Attachment attachment1 = Attachment::Create(some_data1);
+  Attachment attachment2 = Attachment::Create(some_data2);
 
-  // First drop.
-  store.Drop(id_written, drop_callback);
+  AttachmentList some_attachments;
+  // Write attachment1 only.
+  some_attachments.push_back(attachment1);
+  store.Write(some_attachments, write_callback);
   ClearAndPumpLoop();
   EXPECT_EQ(result, AttachmentStore::SUCCESS);
 
-  store.Read(id_written, read_callback);
+  // Try to read both attachment1 and attachment2.
+  AttachmentIdList ids;
+  ids.push_back(attachment1.GetId());
+  ids.push_back(attachment2.GetId());
+  store.Read(ids, read_callback);
   ClearAndPumpLoop();
-  EXPECT_EQ(result, AttachmentStore::NOT_FOUND);
 
-  // Second drop.
-  store.Drop(id_written, drop_callback);
-  ClearAndPumpLoop();
-  EXPECT_EQ(result, AttachmentStore::NOT_FOUND);
+  // See that only attachment1 was read.
+  EXPECT_EQ(result, AttachmentStore::UNSPECIFIED_ERROR);
+  EXPECT_EQ(attachments->size(), 1U);
+}
 
-  store.Read(id_written, read_callback);
+// Try to drop two attachments when only one exists. Verify that no error occurs
+// and that the existing attachment was dropped.
+TEST_F(FakeAttachmentStoreTest, Drop_DropTwoButOnlyOneExists) {
+  // First, create two attachments.
+  Attachment attachment1 = Attachment::Create(some_data1);
+  Attachment attachment2 = Attachment::Create(some_data2);
+  AttachmentList some_attachments;
+  some_attachments.push_back(attachment1);
+  some_attachments.push_back(attachment2);
+  store.Write(some_attachments, write_callback);
   ClearAndPumpLoop();
-  EXPECT_EQ(result, AttachmentStore::NOT_FOUND);
+  EXPECT_EQ(result, AttachmentStore::SUCCESS);
+
+  // Drop attachment1 only.
+  AttachmentIdList ids;
+  ids.push_back(attachment1.GetId());
+  store.Drop(ids, drop_callback);
+  ClearAndPumpLoop();
+  EXPECT_EQ(result, AttachmentStore::SUCCESS);
+
+  // See that attachment1 is gone.
+  store.Read(ids, read_callback);
+  ClearAndPumpLoop();
+  EXPECT_EQ(result, AttachmentStore::UNSPECIFIED_ERROR);
+  EXPECT_EQ(attachments->size(), 0U);
+
+  // Drop both attachment1 and attachment2.
+  ids.clear();
+  ids.push_back(attachment1.GetId());
+  ids.push_back(attachment2.GetId());
+  store.Drop(ids, drop_callback);
+  ClearAndPumpLoop();
+  EXPECT_EQ(result, AttachmentStore::SUCCESS);
+
+  // See that attachment2 is now gone.
+  ids.clear();
+  ids.push_back(attachment2.GetId());
+  store.Read(ids, read_callback);
+  ClearAndPumpLoop();
+  EXPECT_EQ(result, AttachmentStore::UNSPECIFIED_ERROR);
+  EXPECT_EQ(attachments->size(), 0U);
+}
+
+// Verify that attempting to drop an attachment that does not exist is not an
+// error.
+TEST_F(FakeAttachmentStoreTest, Drop_DoesNotExist) {
+  Attachment attachment1 = Attachment::Create(some_data1);
+  AttachmentList some_attachments;
+  some_attachments.push_back(attachment1);
+  store.Write(some_attachments, write_callback);
+  ClearAndPumpLoop();
+  EXPECT_EQ(result, AttachmentStore::SUCCESS);
+
+  // Drop the attachment.
+  AttachmentIdList ids;
+  ids.push_back(attachment1.GetId());
+  store.Drop(ids, drop_callback);
+  ClearAndPumpLoop();
+  EXPECT_EQ(result, AttachmentStore::SUCCESS);
+
+  // See that it's gone.
+  store.Read(ids, read_callback);
+  ClearAndPumpLoop();
+  EXPECT_EQ(result, AttachmentStore::UNSPECIFIED_ERROR);
+  EXPECT_EQ(attachments->size(), 0U);
+
+  // Drop again, see that no error occurs.
+  ids.clear();
+  ids.push_back(attachment1.GetId());
+  store.Drop(ids, drop_callback);
+  ClearAndPumpLoop();
+  EXPECT_EQ(result, AttachmentStore::SUCCESS);
 }
 
 }  // namespace syncer
diff --git a/sync/engine/commit_util.cc b/sync/engine/commit_util.cc
index 1081446..45bc2bb 100644
--- a/sync/engine/commit_util.cc
+++ b/sync/engine/commit_util.cc
@@ -158,11 +158,11 @@
   sync_entry->set_ctime(TimeToProtoTime(meta_entry.GetCtime()));
   sync_entry->set_mtime(TimeToProtoTime(meta_entry.GetMtime()));
 
-  // Deletion is final on the server, let's move things and then delete them.
-  if (meta_entry.GetIsDel()) {
-    sync_entry->set_deleted(true);
-  } else {
-    if (meta_entry.GetSpecifics().has_bookmark()) {
+  // Handle bookmarks separately.
+  if (meta_entry.GetSpecifics().has_bookmark()) {
+    if (meta_entry.GetIsDel()) {
+      sync_entry->set_deleted(true);
+    } else {
       // Both insert_after_item_id and position_in_parent fields are set only
       // for legacy reasons.  See comments in sync.proto for more information.
       const Id& prev_id = meta_entry.GetPredecessorId();
@@ -174,11 +174,19 @@
       meta_entry.GetUniquePosition().ToProto(
           sync_entry->mutable_unique_position());
     }
+    // Always send specifics for bookmarks.
+    SetEntrySpecifics(meta_entry, sync_entry);
+    return;
+  }
+
+  // Deletion is final on the server, let's move things and then delete them.
+  if (meta_entry.GetIsDel()) {
+    sync_entry->set_deleted(true);
+  } else {
     SetEntrySpecifics(meta_entry, sync_entry);
   }
 }
 
-
 // Helpers for ProcessSingleCommitResponse.
 namespace {
 
diff --git a/sync/engine/syncer_proto_util.cc b/sync/engine/syncer_proto_util.cc
index dab228f..fe2a875 100644
--- a/sync/engine/syncer_proto_util.cc
+++ b/sync/engine/syncer_proto_util.cc
@@ -122,6 +122,8 @@
       return MIGRATION_DONE;
     case sync_pb::SyncEnums::DISABLED_BY_ADMIN:
       return DISABLED_BY_ADMIN;
+    case sync_pb::SyncEnums::USER_ROLLBACK:
+      return USER_ROLLBACK;
     case sync_pb::SyncEnums::UNKNOWN:
       return UNKNOWN_ERROR;
     case sync_pb::SyncEnums::USER_NOT_ACTIVATED:
@@ -331,7 +333,9 @@
     error.action = DISABLE_SYNC_ON_CLIENT;
   } else if (error_type == sync_pb::SyncEnums::DISABLED_BY_ADMIN) {
     error.action = STOP_SYNC_FOR_DISABLED_ACCOUNT;
-  }  // There is no other action we can compute for legacy server.
+  } else if (error_type == sync_pb::SyncEnums::USER_ROLLBACK) {
+    error.action = DISABLE_SYNC_AND_ROLLBACK;
+  } // There is no other action we can compute for legacy server.
   return error;
 }
 
@@ -467,6 +471,8 @@
       return SERVER_RETURN_NOT_MY_BIRTHDAY;
     case DISABLED_BY_ADMIN:
       return SERVER_RETURN_DISABLED_BY_ADMIN;
+    case USER_ROLLBACK:
+      return SERVER_RETURN_USER_ROLLBACK;
     default:
       NOTREACHED();
       return UNSET;
diff --git a/sync/internal_api/public/base/model_type.h b/sync/internal_api/public/base/model_type.h
index 831fd2c..f412716 100644
--- a/sync/internal_api/public/base/model_type.h
+++ b/sync/internal_api/public/base/model_type.h
@@ -317,6 +317,9 @@
 // TODO(haitaol): Make entries of act-once data types immutable.
 SYNC_EXPORT bool IsActOnceDataType(ModelType model_type);
 
+// Returns set of model types that should be backed up before first sync.
+SYNC_EXPORT ModelTypeSet BackupTypes();
+
 }  // namespace syncer
 
 #endif  // SYNC_INTERNAL_API_PUBLIC_BASE_MODEL_TYPE_H_
diff --git a/sync/internal_api/public/util/syncer_error.cc b/sync/internal_api/public/util/syncer_error.cc
index 81805d2..8130b1e 100644
--- a/sync/internal_api/public/util/syncer_error.cc
+++ b/sync/internal_api/public/util/syncer_error.cc
@@ -27,6 +27,7 @@
     ENUM_CASE(SERVER_RETURN_CONFLICT);
     ENUM_CASE(SERVER_RESPONSE_VALIDATION_FAILED);
     ENUM_CASE(SERVER_RETURN_DISABLED_BY_ADMIN);
+    ENUM_CASE(SERVER_RETURN_USER_ROLLBACK);
     ENUM_CASE(SERVER_MORE_TO_DOWNLOAD);
     ENUM_CASE(DATATYPE_TRIGGERED_RETRY);
     ENUM_CASE(SYNCER_OK);
diff --git a/sync/internal_api/public/util/syncer_error.h b/sync/internal_api/public/util/syncer_error.h
index 1a5ec79..05ad963 100644
--- a/sync/internal_api/public/util/syncer_error.h
+++ b/sync/internal_api/public/util/syncer_error.h
@@ -30,6 +30,7 @@
   SERVER_RETURN_CONFLICT,
   SERVER_RESPONSE_VALIDATION_FAILED,
   SERVER_RETURN_DISABLED_BY_ADMIN,
+  SERVER_RETURN_USER_ROLLBACK,
 
   // A datatype decided the sync cycle needed to be performed again.
   DATATYPE_TRIGGERED_RETRY,
diff --git a/sync/internal_api/public/write_node.h b/sync/internal_api/public/write_node.h
index 07c896b..e41c966 100644
--- a/sync/internal_api/public/write_node.h
+++ b/sync/internal_api/public/write_node.h
@@ -92,7 +92,7 @@
 
   // These Set() functions correspond to the Get() functions of BaseNode.
   void SetIsFolder(bool folder);
-  void SetTitle(const std::wstring& title);
+  void SetTitle(const std::string& title);
 
   // External ID is a client-only field, so setting it doesn't cause the item to
   // be synced again.
diff --git a/sync/internal_api/sync_backup_manager.cc b/sync/internal_api/sync_backup_manager.cc
new file mode 100644
index 0000000..f255ae6
--- /dev/null
+++ b/sync/internal_api/sync_backup_manager.cc
@@ -0,0 +1,112 @@
+// 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.
+
+#include "sync/internal_api/sync_backup_manager.h"
+
+#include "sync/internal_api/public/write_transaction.h"
+#include "sync/syncable/directory.h"
+#include "sync/syncable/mutable_entry.h"
+
+namespace syncer {
+
+SyncBackupManager::SyncBackupManager()
+    : in_normalization_(false) {
+}
+
+SyncBackupManager::~SyncBackupManager() {
+}
+
+void SyncBackupManager::Init(
+      const base::FilePath& database_location,
+      const WeakHandle<JsEventHandler>& event_handler,
+      const std::string& sync_server_and_path,
+      int sync_server_port,
+      bool use_ssl,
+      scoped_ptr<HttpPostProviderFactory> post_factory,
+      const std::vector<scoped_refptr<ModelSafeWorker> >& workers,
+      ExtensionsActivity* extensions_activity,
+      SyncManager::ChangeDelegate* change_delegate,
+      const SyncCredentials& credentials,
+      const std::string& invalidator_client_id,
+      const std::string& restored_key_for_bootstrapping,
+      const std::string& restored_keystore_key_for_bootstrapping,
+      InternalComponentsFactory* internal_components_factory,
+      Encryptor* encryptor,
+      scoped_ptr<UnrecoverableErrorHandler> unrecoverable_error_handler,
+      ReportUnrecoverableErrorFunction
+          report_unrecoverable_error_function,
+      CancelationSignal* cancelation_signal) {
+  SyncRollbackManagerBase::Init(database_location, event_handler,
+                                sync_server_and_path, sync_server_port,
+                                use_ssl, post_factory.Pass(),
+                                workers, extensions_activity, change_delegate,
+                                credentials, invalidator_client_id,
+                                restored_key_for_bootstrapping,
+                                restored_keystore_key_for_bootstrapping,
+                                internal_components_factory, encryptor,
+                                unrecoverable_error_handler.Pass(),
+                                report_unrecoverable_error_function,
+                                cancelation_signal);
+
+  GetUserShare()->directory->CollectMetaHandleCounts(
+      &status_.num_entries_by_type,
+      &status_.num_to_delete_entries_by_type);
+}
+
+void SyncBackupManager::SaveChanges() {
+  NormalizeEntries();
+  GetUserShare()->directory->SaveChanges();
+}
+
+SyncStatus SyncBackupManager::GetDetailedStatus() const {
+  return status_;
+}
+
+ModelTypeSet SyncBackupManager::HandleTransactionEndingChangeEvent(
+    const syncable::ImmutableWriteTransactionInfo& write_transaction_info,
+    syncable::BaseTransaction* trans) {
+  ModelTypeSet types;
+  if (in_normalization_) {
+    // Skip if in our own WriteTransaction from NormalizeEntries().
+    in_normalization_ = false;
+    return types;
+  }
+
+  for (syncable::EntryKernelMutationMap::const_iterator it =
+      write_transaction_info.Get().mutations.Get().begin();
+      it != write_transaction_info.Get().mutations.Get().end(); ++it) {
+    int64 id = it->first;
+    if (unsynced_.find(id) == unsynced_.end()) {
+      unsynced_.insert(id);
+
+      const syncable::EntryKernel& e = it->second.mutated;
+      ModelType type = e.GetModelType();
+      types.Put(type);
+      if (!e.ref(syncable::ID).ServerKnows())
+        status_.num_entries_by_type[type]++;
+      if (e.ref(syncable::IS_DEL))
+        status_.num_to_delete_entries_by_type[type]++;
+    }
+  }
+  return types;
+}
+
+void SyncBackupManager::NormalizeEntries() {
+  WriteTransaction trans(FROM_HERE, GetUserShare());
+  in_normalization_ = true;
+  for (std::set<int64>::const_iterator it = unsynced_.begin();
+      it != unsynced_.end(); ++it) {
+    syncable::MutableEntry entry(trans.GetWrappedWriteTrans(),
+                                 syncable::GET_BY_HANDLE, *it);
+    CHECK(entry.good());
+
+    if (!entry.GetId().ServerKnows())
+      entry.PutId(syncable::Id::CreateFromServerId(entry.GetId().value()));
+    entry.PutBaseVersion(1);
+    entry.PutIsUnsynced(false);
+  }
+  unsynced_.clear();
+}
+
+}  // namespace syncer
diff --git a/sync/internal_api/sync_backup_manager.h b/sync/internal_api/sync_backup_manager.h
new file mode 100644
index 0000000..1bee105
--- /dev/null
+++ b/sync/internal_api/sync_backup_manager.h
@@ -0,0 +1,69 @@
+// 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.
+
+#ifndef SYNC_INTERNAL_API_SYNC_BACKUP_MANAGER_H_
+#define SYNC_INTERNAL_API_SYNC_BACKUP_MANAGER_H_
+
+#include <set>
+
+#include "sync/internal_api/sync_rollback_manager_base.h"
+
+namespace syncer {
+
+// SyncBackupManager runs before user signs in to sync to back up user's data
+// before sync starts. The data that's backed up can be used to restore user's
+// settings to pre-sync state.
+class SYNC_EXPORT_PRIVATE SyncBackupManager : public SyncRollbackManagerBase {
+ public:
+  SyncBackupManager();
+  virtual ~SyncBackupManager();
+
+  // SyncManager implementation.
+  virtual void Init(
+      const base::FilePath& database_location,
+      const WeakHandle<JsEventHandler>& event_handler,
+      const std::string& sync_server_and_path,
+      int sync_server_port,
+      bool use_ssl,
+      scoped_ptr<HttpPostProviderFactory> post_factory,
+      const std::vector<scoped_refptr<ModelSafeWorker> >& workers,
+      ExtensionsActivity* extensions_activity,
+      SyncManager::ChangeDelegate* change_delegate,
+      const SyncCredentials& credentials,
+      const std::string& invalidator_client_id,
+      const std::string& restored_key_for_bootstrapping,
+      const std::string& restored_keystore_key_for_bootstrapping,
+      InternalComponentsFactory* internal_components_factory,
+      Encryptor* encryptor,
+      scoped_ptr<UnrecoverableErrorHandler> unrecoverable_error_handler,
+      ReportUnrecoverableErrorFunction
+          report_unrecoverable_error_function,
+      CancelationSignal* cancelation_signal) OVERRIDE;
+  virtual void SaveChanges() OVERRIDE;
+  virtual SyncStatus GetDetailedStatus() const OVERRIDE;
+
+  // DirectoryChangeDelegate implementation.
+  virtual ModelTypeSet HandleTransactionEndingChangeEvent(
+      const syncable::ImmutableWriteTransactionInfo& write_transaction_info,
+      syncable::BaseTransaction* trans) OVERRIDE;
+
+ private:
+  // Replaces local IDs with server IDs and clear unsynced bit of modified
+  // entries.
+  void NormalizeEntries();
+
+  // Handles of unsynced entries caused by local model changes.
+  std::set<int64> unsynced_;
+
+  // True if NormalizeEntries() is being called.
+  bool in_normalization_;
+
+  SyncStatus status_;
+
+  DISALLOW_COPY_AND_ASSIGN(SyncBackupManager);
+};
+
+}  // namespace syncer
+
+#endif  // SYNC_INTERNAL_API_SYNC_BACKUP_MANAGER_H_
diff --git a/sync/internal_api/sync_backup_manager_unittest.cc b/sync/internal_api/sync_backup_manager_unittest.cc
new file mode 100644
index 0000000..5de790b
--- /dev/null
+++ b/sync/internal_api/sync_backup_manager_unittest.cc
@@ -0,0 +1,112 @@
+// 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.
+
+#include "sync/internal_api/sync_backup_manager.h"
+
+#include "base/files/scoped_temp_dir.h"
+#include "sync/internal_api/public/read_node.h"
+#include "sync/internal_api/public/read_transaction.h"
+#include "sync/internal_api/public/test/test_internal_components_factory.h"
+#include "sync/internal_api/public/write_node.h"
+#include "sync/internal_api/public/write_transaction.h"
+#include "sync/syncable/entry.h"
+#include "sync/test/test_directory_backing_store.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace syncer {
+
+namespace {
+
+void OnConfigDone(bool success) {
+  EXPECT_TRUE(success);
+}
+
+class SyncBackupManagerTest : public testing::Test {
+ protected:
+  virtual void SetUp() OVERRIDE {
+    CHECK(temp_dir_.CreateUniqueTempDir());
+  }
+
+  void InitManager(SyncManager* manager) {
+    TestInternalComponentsFactory factory(InternalComponentsFactory::Switches(),
+                                          STORAGE_ON_DISK);
+
+    manager->Init(temp_dir_.path(),
+                  MakeWeakHandle(base::WeakPtr<JsEventHandler>()),
+                  "", 0, true, scoped_ptr<HttpPostProviderFactory>().Pass(),
+                  std::vector<scoped_refptr<ModelSafeWorker> >(),
+                  NULL, NULL, SyncCredentials(), "", "", "", &factory,
+                  NULL, scoped_ptr<UnrecoverableErrorHandler>().Pass(),
+                  NULL, NULL);
+    manager->ConfigureSyncer(
+          CONFIGURE_REASON_NEW_CLIENT,
+          ModelTypeSet(PREFERENCES),
+          ModelTypeSet(), ModelTypeSet(), ModelTypeSet(),
+          ModelSafeRoutingInfo(),
+          base::Bind(&OnConfigDone, true),
+          base::Bind(&OnConfigDone, false));
+  }
+
+  void CreateEntry(UserShare* user_share, ModelType type,
+                   const std::string& client_tag) {
+    WriteTransaction trans(FROM_HERE, user_share);
+    ReadNode type_root(&trans);
+    EXPECT_EQ(BaseNode::INIT_OK,
+              type_root.InitByTagLookup(ModelTypeToRootTag(type)));
+
+    WriteNode node(&trans);
+    EXPECT_EQ(WriteNode::INIT_SUCCESS,
+              node.InitUniqueByCreation(type, type_root, client_tag));
+  }
+
+  base::ScopedTempDir temp_dir_;
+  base::MessageLoop loop_;    // Needed for WeakHandle
+};
+
+TEST_F(SyncBackupManagerTest, NormalizeAndPersist) {
+  scoped_ptr<SyncBackupManager> manager(new SyncBackupManager);
+  InitManager(manager.get());
+
+  CreateEntry(manager->GetUserShare(), PREFERENCES, "test");
+
+  {
+    // New entry is local and unsynced at first.
+    ReadTransaction trans(FROM_HERE, manager->GetUserShare());
+    ReadNode pref(&trans);
+    EXPECT_EQ(BaseNode::INIT_OK,
+              pref.InitByClientTagLookup(PREFERENCES, "test"));
+    EXPECT_FALSE(pref.GetEntry()->GetId().ServerKnows());
+    EXPECT_TRUE(pref.GetEntry()->GetIsUnsynced());
+  }
+
+  manager->SaveChanges();
+
+  {
+    // New entry has server ID and unsynced bit is cleared after saving.
+    ReadTransaction trans(FROM_HERE, manager->GetUserShare());
+    ReadNode pref(&trans);
+    EXPECT_EQ(BaseNode::INIT_OK,
+              pref.InitByClientTagLookup(PREFERENCES, "test"));
+    EXPECT_TRUE(pref.GetEntry()->GetId().ServerKnows());
+    EXPECT_FALSE(pref.GetEntry()->GetIsUnsynced());
+  }
+  manager->ShutdownOnSyncThread();
+
+  // Reopen db to verify entry is persisted.
+  manager.reset(new SyncBackupManager);
+  InitManager(manager.get());
+  {
+    ReadTransaction trans(FROM_HERE, manager->GetUserShare());
+    ReadNode pref(&trans);
+    EXPECT_EQ(BaseNode::INIT_OK,
+              pref.InitByClientTagLookup(PREFERENCES, "test"));
+    EXPECT_TRUE(pref.GetEntry()->GetId().ServerKnows());
+    EXPECT_FALSE(pref.GetEntry()->GetIsUnsynced());
+  }
+}
+
+}  // anonymous namespace
+
+}  // namespace syncer
+
diff --git a/sync/internal_api/sync_manager_impl_unittest.cc b/sync/internal_api/sync_manager_impl_unittest.cc
index a8ee0be..a5c0c81 100644
--- a/sync/internal_api/sync_manager_impl_unittest.cc
+++ b/sync/internal_api/sync_manager_impl_unittest.cc
@@ -334,7 +334,7 @@
         wnode.InitUniqueByCreation(BOOKMARKS, root_node, "testtag");
     EXPECT_EQ(WriteNode::INIT_SUCCESS, result);
     wnode.SetIsFolder(false);
-    wnode.SetTitle(base::UTF8ToWide(test_title));
+    wnode.SetTitle(test_title);
 
     node_id = wnode.GetId();
   }
@@ -379,7 +379,7 @@
     EXPECT_EQ(wnode.GetParentId(), folder_node.GetId());
     EXPECT_EQ(wnode.GetId(), node_id);
     EXPECT_NE(wnode.GetTitle(), test_title);  // Title should be cleared
-    wnode.SetTitle(base::UTF8ToWide(test_title));
+    wnode.SetTitle(test_title);
   }
 
   // Now look up should work.
@@ -444,13 +444,13 @@
     WriteNode bookmark_node(&trans);
     ASSERT_TRUE(bookmark_node.InitBookmarkByCreation(root_node, NULL));
     bookmark_id = bookmark_node.GetId();
-    bookmark_node.SetTitle(base::UTF8ToWide("foo"));
+    bookmark_node.SetTitle("foo");
 
     WriteNode pref_node(&trans);
     WriteNode::InitUniqueByCreationResult result =
         pref_node.InitUniqueByCreation(PREFERENCES, root_node, "bar");
     ASSERT_EQ(WriteNode::INIT_SUCCESS, result);
-    pref_node.SetTitle(base::UTF8ToWide("bar"));
+    pref_node.SetTitle("bar");
   }
   {
     ReadTransaction trans(FROM_HERE, test_user_share_.user_share());
@@ -1653,7 +1653,7 @@
     WriteNode node(&trans);
     ASSERT_TRUE(node.InitBookmarkByCreation(bookmark_root, NULL));
     node.SetIsFolder(false);
-    node.SetTitle(base::UTF8ToWide(title));
+    node.SetTitle(title);
 
     sync_pb::BookmarkSpecifics bookmark_specifics(node.GetBookmarkSpecifics());
     bookmark_specifics.set_url(url);
@@ -1992,7 +1992,7 @@
     WriteNode node(&trans);
     EXPECT_EQ(BaseNode::INIT_OK,
               node.InitByClientTagLookup(BOOKMARKS, client_tag));
-    node.SetTitle(base::UTF8ToWide(client_tag));
+    node.SetTitle(client_tag);
   }
   EXPECT_FALSE(ResetUnsyncedEntry(BOOKMARKS, client_tag));
 
@@ -2002,7 +2002,7 @@
     WriteNode node(&trans);
     EXPECT_EQ(BaseNode::INIT_OK,
               node.InitByClientTagLookup(BOOKMARKS, client_tag));
-    node.SetTitle(base::UTF8ToWide("title2"));
+    node.SetTitle("title2");
   }
   EXPECT_TRUE(ResetUnsyncedEntry(BOOKMARKS, client_tag));
 }
@@ -2041,7 +2041,7 @@
     WriteNode node(&trans);
     EXPECT_EQ(BaseNode::INIT_OK,
               node.InitByClientTagLookup(BOOKMARKS, client_tag));
-    node.SetTitle(base::UTF8ToWide(client_tag));
+    node.SetTitle(client_tag);
     const syncable::Entry* node_entry = node.GetEntry();
     const sync_pb::EntitySpecifics& specifics = node_entry->GetSpecifics();
     EXPECT_TRUE(specifics.has_encrypted());
@@ -2056,7 +2056,7 @@
     WriteNode node(&trans);
     EXPECT_EQ(BaseNode::INIT_OK,
               node.InitByClientTagLookup(BOOKMARKS, client_tag));
-    node.SetTitle(base::UTF8ToWide("title2"));
+    node.SetTitle("title2");
     const syncable::Entry* node_entry = node.GetEntry();
     const sync_pb::EntitySpecifics& specifics = node_entry->GetSpecifics();
     EXPECT_TRUE(specifics.has_encrypted());
@@ -2087,7 +2087,7 @@
     WriteNode node(&trans);
     EXPECT_EQ(BaseNode::INIT_OK,
               node.InitByClientTagLookup(PREFERENCES, client_tag));
-    node.SetTitle(base::UTF8ToWide(client_tag));
+    node.SetTitle(client_tag);
   }
   EXPECT_FALSE(ResetUnsyncedEntry(PREFERENCES, client_tag));
 
@@ -2097,7 +2097,7 @@
     WriteNode node(&trans);
     EXPECT_EQ(BaseNode::INIT_OK,
               node.InitByClientTagLookup(PREFERENCES, client_tag));
-    node.SetTitle(base::UTF8ToWide("title2"));
+    node.SetTitle("title2");
   }
   EXPECT_TRUE(ResetUnsyncedEntry(PREFERENCES, client_tag));
 }
@@ -2138,7 +2138,7 @@
     WriteNode node(&trans);
     EXPECT_EQ(BaseNode::INIT_OK,
               node.InitByClientTagLookup(PREFERENCES, client_tag));
-    node.SetTitle(base::UTF8ToWide(client_tag));
+    node.SetTitle(client_tag);
     const syncable::Entry* node_entry = node.GetEntry();
     const sync_pb::EntitySpecifics& specifics = node_entry->GetSpecifics();
     EXPECT_TRUE(specifics.has_encrypted());
@@ -2153,7 +2153,7 @@
     WriteNode node(&trans);
     EXPECT_EQ(BaseNode::INIT_OK,
               node.InitByClientTagLookup(PREFERENCES, client_tag));
-    node.SetTitle(base::UTF8ToWide("title2"));
+    node.SetTitle("title2");
     const syncable::Entry* node_entry = node.GetEntry();
     const sync_pb::EntitySpecifics& specifics = node_entry->GetSpecifics();
     EXPECT_TRUE(specifics.has_encrypted());
@@ -2186,7 +2186,7 @@
     WriteNode node(&trans);
     EXPECT_EQ(BaseNode::INIT_OK,
               node.InitByClientTagLookup(PREFERENCES, kClientTag));
-    node.SetTitle(base::UTF8ToWide(title));
+    node.SetTitle(title);
     EXPECT_EQ(node.GetTitle(), title.substr(0, 255));
   }
   EXPECT_TRUE(ResetUnsyncedEntry(PREFERENCES, kClientTag));
@@ -2197,7 +2197,7 @@
     WriteNode node(&trans);
     EXPECT_EQ(BaseNode::INIT_OK,
               node.InitByClientTagLookup(PREFERENCES, kClientTag));
-    node.SetTitle(base::UTF8ToWide(title));
+    node.SetTitle(title);
     EXPECT_EQ(node.GetTitle(), title.substr(0, 255));
   }
   EXPECT_FALSE(ResetUnsyncedEntry(PREFERENCES, kClientTag));
@@ -2208,7 +2208,7 @@
     WriteNode node(&trans);
     EXPECT_EQ(BaseNode::INIT_OK,
               node.InitByClientTagLookup(PREFERENCES, kClientTag));
-    node.SetTitle(base::UTF8ToWide("title2"));
+    node.SetTitle("title2");
   }
   EXPECT_TRUE(ResetUnsyncedEntry(PREFERENCES, kClientTag));
 }
@@ -2655,7 +2655,7 @@
   // Take a snapshot to clear all the dirty bits.
   share->directory.get()->SaveChanges();
 
-   // Now request a purge for the unapplied types.
+  // Now request a purge for the unapplied types.
   disabled_types.PutAll(unapplied_types);
   sync_manager_.PurgeDisabledTypes(disabled_types,
                                    ModelTypeSet(),
@@ -2928,7 +2928,6 @@
                                    "childB");
     SetNodeProperties(&child_b);
     child_b_id = child_b.GetMetahandle();
-
   }
 
   // Close that transaction.  The above was to setup the initial scenario.  The
@@ -3047,4 +3046,4 @@
   EXPECT_FALSE(initialization_succeeded_);
 }
 
-}  // namespace
+}  // namespace syncer
diff --git a/sync/internal_api/sync_rollback_manager.cc b/sync/internal_api/sync_rollback_manager.cc
new file mode 100644
index 0000000..240218d
--- /dev/null
+++ b/sync/internal_api/sync_rollback_manager.cc
@@ -0,0 +1,133 @@
+// 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.
+
+#include "sync/internal_api/sync_rollback_manager.h"
+
+#include "sync/internal_api/public/base/model_type.h"
+#include "sync/internal_api/public/read_node.h"
+#include "sync/internal_api/public/read_transaction.h"
+#include "sync/internal_api/public/util/syncer_error.h"
+#include "sync/internal_api/public/write_transaction.h"
+#include "sync/syncable/directory.h"
+#include "sync/syncable/mutable_entry.h"
+
+namespace syncer {
+
+SyncRollbackManager::SyncRollbackManager()
+    : change_delegate_(NULL) {
+}
+
+SyncRollbackManager::~SyncRollbackManager() {
+}
+
+void SyncRollbackManager::Init(
+      const base::FilePath& database_location,
+      const WeakHandle<JsEventHandler>& event_handler,
+      const std::string& sync_server_and_path,
+      int sync_server_port,
+      bool use_ssl,
+      scoped_ptr<HttpPostProviderFactory> post_factory,
+      const std::vector<scoped_refptr<ModelSafeWorker> >& workers,
+      ExtensionsActivity* extensions_activity,
+      SyncManager::ChangeDelegate* change_delegate,
+      const SyncCredentials& credentials,
+      const std::string& invalidator_client_id,
+      const std::string& restored_key_for_bootstrapping,
+      const std::string& restored_keystore_key_for_bootstrapping,
+      InternalComponentsFactory* internal_components_factory,
+      Encryptor* encryptor,
+      scoped_ptr<UnrecoverableErrorHandler> unrecoverable_error_handler,
+      ReportUnrecoverableErrorFunction
+          report_unrecoverable_error_function,
+      CancelationSignal* cancelation_signal) {
+  SyncRollbackManagerBase::Init(database_location, event_handler,
+                                sync_server_and_path, sync_server_port,
+                                use_ssl, post_factory.Pass(),
+                                workers, extensions_activity, change_delegate,
+                                credentials, invalidator_client_id,
+                                restored_key_for_bootstrapping,
+                                restored_keystore_key_for_bootstrapping,
+                                internal_components_factory, encryptor,
+                                unrecoverable_error_handler.Pass(),
+                                report_unrecoverable_error_function,
+                                cancelation_signal);
+
+  change_delegate_ = change_delegate;
+
+  for (size_t i = 0; i < workers.size(); ++i) {
+    ModelSafeGroup group = workers[i]->GetModelSafeGroup();
+    CHECK(workers_.find(group) == workers_.end());
+    workers_[group] = workers[i];
+  }
+
+  rollback_ready_types_ = GetUserShare()->directory->InitialSyncEndedTypes();
+  rollback_ready_types_.RetainAll(BackupTypes());
+}
+
+void SyncRollbackManager::StartSyncingNormally(
+    const ModelSafeRoutingInfo& routing_info){
+  std::map<ModelType, syncable::Directory::Metahandles> to_delete;
+
+  {
+    WriteTransaction trans(FROM_HERE, GetUserShare());
+    syncable::Directory::Metahandles unsynced;
+    GetUserShare()->directory->GetUnsyncedMetaHandles(trans.GetWrappedTrans(),
+                                                      &unsynced);
+    for (size_t i = 0; i < unsynced.size(); ++i) {
+      syncable::MutableEntry e(trans.GetWrappedWriteTrans(),
+                               syncable::GET_BY_HANDLE, unsynced[i]);
+      if (!e.good() || e.GetIsDel() || e.GetId().ServerKnows())
+        continue;
+
+      // TODO(haitaol): roll back entries that are backed up but whose content
+      //                is merged with local model during association.
+
+      ModelType type = GetModelTypeFromSpecifics(e.GetSpecifics());
+      if (!rollback_ready_types_.Has(type))
+        continue;
+
+      to_delete[type].push_back(unsynced[i]);
+    }
+  }
+
+  for (std::map<ModelType, syncable::Directory::Metahandles>::iterator it =
+      to_delete.begin(); it != to_delete.end(); ++it) {
+    ModelSafeGroup group = routing_info.find(it->first)->second;
+    CHECK(workers_.find(group) != workers_.end());
+    workers_[group]->DoWorkAndWaitUntilDone(
+        base::Bind(&SyncRollbackManager::DeleteOnWorkerThread,
+                   base::Unretained(this),
+                   it->first, it->second));
+  }
+}
+
+SyncerError SyncRollbackManager::DeleteOnWorkerThread(
+    ModelType type, std::vector<int64> handles) {
+  CHECK(change_delegate_);
+
+  {
+    ChangeRecordList deletes;
+    WriteTransaction trans(FROM_HERE, GetUserShare());
+    for (size_t i = 0; i < handles.size(); ++i) {
+      syncable::MutableEntry e(trans.GetWrappedWriteTrans(),
+                               syncable::GET_BY_HANDLE, handles[i]);
+      if (!e.good() || e.GetIsDel())
+        continue;
+
+      ChangeRecord del;
+      del.action = ChangeRecord::ACTION_DELETE;
+      del.id = handles[i];
+      del.specifics = e.GetSpecifics();
+      deletes.push_back(del);
+    }
+
+    change_delegate_->OnChangesApplied(type, 1, &trans,
+                                       MakeImmutable(&deletes));
+  }
+
+  change_delegate_->OnChangesComplete(type);
+  return SYNCER_OK;
+}
+
+}  // namespace syncer
diff --git a/sync/internal_api/sync_rollback_manager.h b/sync/internal_api/sync_rollback_manager.h
new file mode 100644
index 0000000..c8b8719
--- /dev/null
+++ b/sync/internal_api/sync_rollback_manager.h
@@ -0,0 +1,62 @@
+// 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.
+
+#ifndef SYNC_INTERNAL_API_SYNC_ROLLBACK_MANAGER_H_
+#define SYNC_INTERNAL_API_SYNC_ROLLBACK_MANAGER_H_
+
+#include <string>
+#include <vector>
+
+#include "sync/internal_api/sync_rollback_manager_base.h"
+
+namespace syncer {
+
+// SyncRollbackManager restores user's data to pre-sync state using backup
+// DB created by SyncBackupManager.
+class SYNC_EXPORT_PRIVATE SyncRollbackManager : public SyncRollbackManagerBase {
+ public:
+  SyncRollbackManager();
+  virtual ~SyncRollbackManager();
+
+  // SyncManager implementation.
+  virtual void Init(
+      const base::FilePath& database_location,
+      const WeakHandle<JsEventHandler>& event_handler,
+      const std::string& sync_server_and_path,
+      int sync_server_port,
+      bool use_ssl,
+      scoped_ptr<HttpPostProviderFactory> post_factory,
+      const std::vector<scoped_refptr<ModelSafeWorker> >& workers,
+      ExtensionsActivity* extensions_activity,
+      SyncManager::ChangeDelegate* change_delegate,
+      const SyncCredentials& credentials,
+      const std::string& invalidator_client_id,
+      const std::string& restored_key_for_bootstrapping,
+      const std::string& restored_keystore_key_for_bootstrapping,
+      InternalComponentsFactory* internal_components_factory,
+      Encryptor* encryptor,
+      scoped_ptr<UnrecoverableErrorHandler> unrecoverable_error_handler,
+      ReportUnrecoverableErrorFunction
+          report_unrecoverable_error_function,
+      CancelationSignal* cancelation_signal) OVERRIDE;
+  virtual void StartSyncingNormally(
+      const ModelSafeRoutingInfo& routing_info) OVERRIDE;
+
+ private:
+  // Deletes specified entries in local model.
+  SyncerError DeleteOnWorkerThread(ModelType type, std::vector<int64> handles);
+
+  std::map<ModelSafeGroup, scoped_refptr<ModelSafeWorker> > workers_;
+
+  SyncManager::ChangeDelegate* change_delegate_;
+
+  // Types that can be rolled back.
+  ModelTypeSet rollback_ready_types_;
+
+  DISALLOW_COPY_AND_ASSIGN(SyncRollbackManager);
+};
+
+}  // namespace syncer
+
+#endif  // SYNC_INTERNAL_API_SYNC_ROLLBACK_MANAGER_H_
diff --git a/sync/internal_api/sync_rollback_manager_base.cc b/sync/internal_api/sync_rollback_manager_base.cc
new file mode 100644
index 0000000..98fcd48
--- /dev/null
+++ b/sync/internal_api/sync_rollback_manager_base.cc
@@ -0,0 +1,322 @@
+// 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.
+
+#include "sync/internal_api/sync_rollback_manager_base.h"
+
+#include "sync/internal_api/public/base/model_type.h"
+#include "sync/internal_api/public/internal_components_factory.h"
+#include "sync/internal_api/public/read_node.h"
+#include "sync/internal_api/public/read_transaction.h"
+#include "sync/internal_api/public/util/syncer_error.h"
+#include "sync/internal_api/public/write_transaction.h"
+#include "sync/syncable/directory_backing_store.h"
+#include "sync/syncable/mutable_entry.h"
+
+namespace {
+
+// Permanent bookmark folders as defined in bookmark_model_associator.cc.
+const char kBookmarkBarTag[] = "bookmark_bar";
+const char kMobileBookmarksTag[] = "synced_bookmarks";
+const char kOtherBookmarksTag[] = "other_bookmarks";
+
+}  // anonymous namespace
+
+namespace syncer {
+
+SyncRollbackManagerBase::SyncRollbackManagerBase()
+    : report_unrecoverable_error_function_(NULL),
+      weak_ptr_factory_(this) {
+}
+
+SyncRollbackManagerBase::~SyncRollbackManagerBase() {
+}
+
+void SyncRollbackManagerBase::Init(
+      const base::FilePath& database_location,
+      const WeakHandle<JsEventHandler>& event_handler,
+      const std::string& sync_server_and_path,
+      int sync_server_port,
+      bool use_ssl,
+      scoped_ptr<HttpPostProviderFactory> post_factory,
+      const std::vector<scoped_refptr<ModelSafeWorker> >& workers,
+      ExtensionsActivity* extensions_activity,
+      SyncManager::ChangeDelegate* change_delegate,
+      const SyncCredentials& credentials,
+      const std::string& invalidator_client_id,
+      const std::string& restored_key_for_bootstrapping,
+      const std::string& restored_keystore_key_for_bootstrapping,
+      InternalComponentsFactory* internal_components_factory,
+      Encryptor* encryptor,
+      scoped_ptr<UnrecoverableErrorHandler> unrecoverable_error_handler,
+      ReportUnrecoverableErrorFunction
+          report_unrecoverable_error_function,
+      CancelationSignal* cancelation_signal) {
+  unrecoverable_error_handler_ = unrecoverable_error_handler.Pass();
+  report_unrecoverable_error_function_ = report_unrecoverable_error_function;
+
+  if (!InitBackupDB(database_location, internal_components_factory)) {
+    NotifyInitializationFailure();
+    return;
+  }
+
+  NotifyInitializationSuccess();
+}
+
+void SyncRollbackManagerBase::ThrowUnrecoverableError() {
+  NOTREACHED();
+}
+
+ModelTypeSet SyncRollbackManagerBase::InitialSyncEndedTypes() {
+  return share_.directory->InitialSyncEndedTypes();
+}
+
+ModelTypeSet SyncRollbackManagerBase::GetTypesWithEmptyProgressMarkerToken(
+      ModelTypeSet types) {
+  ModelTypeSet inited_types = share_.directory->InitialSyncEndedTypes();
+  types.RemoveAll(inited_types);
+  return types;
+}
+
+bool SyncRollbackManagerBase::PurgePartiallySyncedTypes() {
+  NOTREACHED();
+  return true;
+}
+
+void SyncRollbackManagerBase::UpdateCredentials(
+    const SyncCredentials& credentials) {
+  NOTREACHED();
+}
+
+void SyncRollbackManagerBase::StartSyncingNormally(
+    const ModelSafeRoutingInfo& routing_info){
+}
+
+void SyncRollbackManagerBase::ConfigureSyncer(
+      ConfigureReason reason,
+      ModelTypeSet to_download,
+      ModelTypeSet to_purge,
+      ModelTypeSet to_journal,
+      ModelTypeSet to_unapply,
+      const ModelSafeRoutingInfo& new_routing_info,
+      const base::Closure& ready_task,
+      const base::Closure& retry_task) {
+  DCHECK(to_purge.Empty());
+  DCHECK(to_journal.Empty());
+  DCHECK(to_unapply.Empty());
+  for (ModelTypeSet::Iterator type = to_download.First();
+      type.Good(); type.Inc()) {
+    if (InitTypeRootNode(type.Get())) {
+      if (type.Get() == BOOKMARKS) {
+        InitBookmarkFolder(kBookmarkBarTag);
+        InitBookmarkFolder(kMobileBookmarksTag);
+        InitBookmarkFolder(kOtherBookmarksTag);
+      }
+    }
+  }
+
+  ready_task.Run();
+}
+
+void SyncRollbackManagerBase::OnInvalidatorStateChange(InvalidatorState state) {
+}
+
+void SyncRollbackManagerBase::OnIncomingInvalidation(
+      const ObjectIdInvalidationMap& invalidation_map) {
+  NOTREACHED();
+}
+
+void SyncRollbackManagerBase::AddObserver(SyncManager::Observer* observer) {
+  observers_.AddObserver(observer);
+}
+
+void SyncRollbackManagerBase::RemoveObserver(SyncManager::Observer* observer) {
+  observers_.RemoveObserver(observer);
+}
+
+SyncStatus SyncRollbackManagerBase::GetDetailedStatus() const {
+  return SyncStatus();
+}
+
+void SyncRollbackManagerBase::SaveChanges() {
+}
+
+void SyncRollbackManagerBase::ShutdownOnSyncThread() {
+  if (share_.directory) {
+    SaveChanges();
+    share_.directory->Close();
+    share_.directory.reset();
+  }
+}
+
+UserShare* SyncRollbackManagerBase::GetUserShare() {
+  return &share_;
+}
+
+const std::string SyncRollbackManagerBase::cache_guid() {
+  return share_.directory->cache_guid();
+}
+
+bool SyncRollbackManagerBase::ReceivedExperiment(Experiments* experiments) {
+  return false;
+}
+
+bool SyncRollbackManagerBase::HasUnsyncedItems() {
+  ReadTransaction trans(FROM_HERE, &share_);
+  syncable::Directory::Metahandles unsynced;
+  share_.directory->GetUnsyncedMetaHandles(trans.GetWrappedTrans(), &unsynced);
+  return !unsynced.empty();
+}
+
+SyncEncryptionHandler* SyncRollbackManagerBase::GetEncryptionHandler() {
+  return NULL;
+}
+
+void SyncRollbackManagerBase::RefreshTypes(ModelTypeSet types) {
+
+}
+
+void SyncRollbackManagerBase::HandleTransactionCompleteChangeEvent(
+    ModelTypeSet models_with_changes) {
+}
+
+ModelTypeSet SyncRollbackManagerBase::HandleTransactionEndingChangeEvent(
+      const syncable::ImmutableWriteTransactionInfo& write_transaction_info,
+      syncable::BaseTransaction* trans) {
+  return ModelTypeSet();
+}
+
+void SyncRollbackManagerBase::HandleCalculateChangesChangeEventFromSyncApi(
+      const syncable::ImmutableWriteTransactionInfo& write_transaction_info,
+      syncable::BaseTransaction* trans,
+      std::vector<int64>* entries_changed) {
+}
+
+void SyncRollbackManagerBase::HandleCalculateChangesChangeEventFromSyncer(
+      const syncable::ImmutableWriteTransactionInfo& write_transaction_info,
+      syncable::BaseTransaction* trans,
+      std::vector<int64>* entries_changed) {
+}
+
+void SyncRollbackManagerBase::OnTransactionWrite(
+    const syncable::ImmutableWriteTransactionInfo& write_transaction_info,
+    ModelTypeSet models_with_changes) {
+}
+
+void SyncRollbackManagerBase::NotifyInitializationSuccess() {
+  FOR_EACH_OBSERVER(
+      SyncManager::Observer, observers_,
+      OnInitializationComplete(
+          MakeWeakHandle(base::WeakPtr<JsBackend>()),
+          MakeWeakHandle(base::WeakPtr<DataTypeDebugInfoListener>()),
+          true, InitialSyncEndedTypes()));
+}
+
+void SyncRollbackManagerBase::NotifyInitializationFailure() {
+  FOR_EACH_OBSERVER(
+      SyncManager::Observer, observers_,
+      OnInitializationComplete(
+          MakeWeakHandle(base::WeakPtr<JsBackend>()),
+          MakeWeakHandle(base::WeakPtr<DataTypeDebugInfoListener>()),
+          false, InitialSyncEndedTypes()));
+}
+
+std::string SyncRollbackManagerBase::GetOwnerName() const {
+  return "";
+}
+
+syncer::SyncCoreProxy* SyncRollbackManagerBase::GetSyncCoreProxy() {
+  return NULL;
+}
+
+ScopedVector<syncer::ProtocolEvent>
+SyncRollbackManagerBase::GetBufferedProtocolEvents() {
+  return ScopedVector<syncer::ProtocolEvent>().Pass();
+}
+
+scoped_ptr<base::ListValue> SyncRollbackManagerBase::GetAllNodesForType(
+    syncer::ModelType type) {
+  ReadTransaction trans(FROM_HERE, GetUserShare());
+  scoped_ptr<base::ListValue> nodes(
+      trans.GetDirectory()->GetNodeDetailsForType(trans.GetWrappedTrans(),
+                                                  type));
+  return nodes.Pass();
+}
+
+bool SyncRollbackManagerBase::InitBackupDB(
+    const base::FilePath& sync_folder,
+    InternalComponentsFactory* internal_components_factory) {
+  base::FilePath backup_db_path = sync_folder.Append(
+      syncable::Directory::kSyncDatabaseFilename);
+  scoped_ptr<syncable::DirectoryBackingStore> backing_store =
+      internal_components_factory->BuildDirectoryBackingStore(
+          "backup", backup_db_path).Pass();
+
+  DCHECK(backing_store.get());
+  share_.directory.reset(
+      new syncable::Directory(
+          backing_store.release(),
+          unrecoverable_error_handler_.get(),
+          report_unrecoverable_error_function_,
+          NULL,
+          NULL));
+  return syncable::OPENED ==
+      share_.directory->Open(
+          "backup", this,
+          MakeWeakHandle(weak_ptr_factory_.GetWeakPtr()));
+}
+
+bool SyncRollbackManagerBase::InitTypeRootNode(ModelType type) {
+  WriteTransaction trans(FROM_HERE, &share_);
+  ReadNode root(&trans);
+  if (BaseNode::INIT_OK == root.InitByTagLookup(ModelTypeToRootTag(type)))
+    return true;
+
+  syncable::MutableEntry entry(trans.GetWrappedWriteTrans(),
+                               syncable::CREATE_NEW_UPDATE_ITEM,
+                               syncable::Id::CreateFromServerId(
+                                   ModelTypeToString(type)));
+  if (!entry.good())
+    return false;
+
+  entry.PutParentId(syncable::Id());
+  entry.PutBaseVersion(1);
+  entry.PutUniqueServerTag(ModelTypeToRootTag(type));
+  entry.PutNonUniqueName(ModelTypeToString(type));
+  entry.PutIsDel(false);
+  entry.PutIsDir(true);
+
+  sync_pb::EntitySpecifics specifics;
+  AddDefaultFieldValue(type, &specifics);
+  entry.PutSpecifics(specifics);
+
+  return true;
+}
+
+void SyncRollbackManagerBase::InitBookmarkFolder(const std::string& folder) {
+  WriteTransaction trans(FROM_HERE, &share_);
+  syncable::Entry bookmark_root(trans.GetWrappedTrans(),
+                                syncable::GET_BY_SERVER_TAG,
+                                ModelTypeToRootTag(BOOKMARKS));
+  if (!bookmark_root.good())
+    return;
+
+  syncable::MutableEntry entry(trans.GetWrappedWriteTrans(),
+                               syncable::CREATE_NEW_UPDATE_ITEM,
+                               syncable::Id::CreateFromServerId(folder));
+  if (!entry.good())
+    return;
+
+  entry.PutParentId(bookmark_root.GetId());
+  entry.PutBaseVersion(1);
+  entry.PutUniqueServerTag(folder);
+  entry.PutNonUniqueName(folder);
+  entry.PutIsDel(false);
+  entry.PutIsDir(true);
+
+  sync_pb::EntitySpecifics specifics;
+  AddDefaultFieldValue(BOOKMARKS, &specifics);
+  entry.PutSpecifics(specifics);
+}
+
+}  // namespace syncer
diff --git a/sync/internal_api/sync_rollback_manager_base.h b/sync/internal_api/sync_rollback_manager_base.h
new file mode 100644
index 0000000..d6ba564
--- /dev/null
+++ b/sync/internal_api/sync_rollback_manager_base.h
@@ -0,0 +1,140 @@
+// 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.
+
+#ifndef SYNC_INTERNAL_API_SYNC_ROLLBACK_MANAGER_BASE_H_
+#define SYNC_INTERNAL_API_SYNC_ROLLBACK_MANAGER_BASE_H_
+
+#include <string>
+#include <vector>
+
+#include "sync/base/sync_export.h"
+#include "sync/internal_api/public/http_post_provider_factory.h"
+#include "sync/internal_api/public/sync_manager.h"
+#include "sync/internal_api/public/user_share.h"
+#include "sync/syncable/directory_change_delegate.h"
+#include "sync/syncable/transaction_observer.h"
+
+namespace syncer {
+
+class WriteTransaction;
+
+// Base class of sync managers used for backup and rollback. Two major
+// functions are:
+//   * Init(): load backup DB into sync directory.
+//   * ConfigureSyncer(): initialize permanent sync nodes (root, bookmark
+//                        permanent folders) for configured type as needed.
+//
+// Most of other functions are no ops.
+class SYNC_EXPORT_PRIVATE SyncRollbackManagerBase :
+    public SyncManager,
+    public syncable::DirectoryChangeDelegate,
+    public syncable::TransactionObserver {
+ public:
+  SyncRollbackManagerBase();
+  virtual ~SyncRollbackManagerBase();
+
+  // SyncManager implementation.
+  virtual void Init(
+      const base::FilePath& database_location,
+      const WeakHandle<JsEventHandler>& event_handler,
+      const std::string& sync_server_and_path,
+      int sync_server_port,
+      bool use_ssl,
+      scoped_ptr<HttpPostProviderFactory> post_factory,
+      const std::vector<scoped_refptr<ModelSafeWorker> >& workers,
+      ExtensionsActivity* extensions_activity,
+      SyncManager::ChangeDelegate* change_delegate,
+      const SyncCredentials& credentials,
+      const std::string& invalidator_client_id,
+      const std::string& restored_key_for_bootstrapping,
+      const std::string& restored_keystore_key_for_bootstrapping,
+      InternalComponentsFactory* internal_components_factory,
+      Encryptor* encryptor,
+      scoped_ptr<UnrecoverableErrorHandler> unrecoverable_error_handler,
+      ReportUnrecoverableErrorFunction
+          report_unrecoverable_error_function,
+      CancelationSignal* cancelation_signal) OVERRIDE;
+  virtual void ThrowUnrecoverableError() OVERRIDE;
+  virtual ModelTypeSet InitialSyncEndedTypes() OVERRIDE;
+  virtual ModelTypeSet GetTypesWithEmptyProgressMarkerToken(
+      ModelTypeSet types) OVERRIDE;
+  virtual bool PurgePartiallySyncedTypes() OVERRIDE;
+  virtual void UpdateCredentials(const SyncCredentials& credentials) OVERRIDE;
+  virtual void StartSyncingNormally(const ModelSafeRoutingInfo& routing_info)
+      OVERRIDE;
+  virtual void ConfigureSyncer(
+      ConfigureReason reason,
+      ModelTypeSet to_download,
+      ModelTypeSet to_purge,
+      ModelTypeSet to_journal,
+      ModelTypeSet to_unapply,
+      const ModelSafeRoutingInfo& new_routing_info,
+      const base::Closure& ready_task,
+      const base::Closure& retry_task) OVERRIDE;
+  virtual void OnInvalidatorStateChange(InvalidatorState state) OVERRIDE;
+  virtual void OnIncomingInvalidation(
+      const ObjectIdInvalidationMap& invalidation_map) OVERRIDE;
+  virtual void AddObserver(SyncManager::Observer* observer) OVERRIDE;
+  virtual void RemoveObserver(SyncManager::Observer* observer) OVERRIDE;
+  virtual SyncStatus GetDetailedStatus() const OVERRIDE;
+  virtual void SaveChanges() OVERRIDE;
+  virtual void ShutdownOnSyncThread() OVERRIDE;
+  virtual UserShare* GetUserShare() OVERRIDE;
+  virtual const std::string cache_guid() OVERRIDE;
+  virtual bool ReceivedExperiment(Experiments* experiments) OVERRIDE;
+  virtual bool HasUnsyncedItems() OVERRIDE;
+  virtual SyncEncryptionHandler* GetEncryptionHandler() OVERRIDE;
+  virtual void RefreshTypes(ModelTypeSet types) OVERRIDE;
+  virtual std::string GetOwnerName() const OVERRIDE;
+  virtual SyncCoreProxy* GetSyncCoreProxy() OVERRIDE;
+  virtual ScopedVector<ProtocolEvent> GetBufferedProtocolEvents()
+      OVERRIDE;
+  virtual scoped_ptr<base::ListValue> GetAllNodesForType(
+      syncer::ModelType type) OVERRIDE;
+
+  // DirectoryChangeDelegate implementation.
+  virtual void HandleTransactionCompleteChangeEvent(
+      ModelTypeSet models_with_changes) OVERRIDE;
+  virtual ModelTypeSet HandleTransactionEndingChangeEvent(
+      const syncable::ImmutableWriteTransactionInfo& write_transaction_info,
+      syncable::BaseTransaction* trans) OVERRIDE;
+  virtual void HandleCalculateChangesChangeEventFromSyncApi(
+      const syncable::ImmutableWriteTransactionInfo& write_transaction_info,
+      syncable::BaseTransaction* trans,
+      std::vector<int64>* entries_changed) OVERRIDE;
+  virtual void HandleCalculateChangesChangeEventFromSyncer(
+      const syncable::ImmutableWriteTransactionInfo& write_transaction_info,
+      syncable::BaseTransaction* trans,
+      std::vector<int64>* entries_changed) OVERRIDE;
+
+  // syncable::TransactionObserver implementation.
+  virtual void OnTransactionWrite(
+      const syncable::ImmutableWriteTransactionInfo& write_transaction_info,
+      ModelTypeSet models_with_changes) OVERRIDE;
+
+ private:
+  void NotifyInitializationSuccess();
+  void NotifyInitializationFailure();
+
+  bool InitBackupDB(
+      const base::FilePath& sync_folder,
+      InternalComponentsFactory* internal_components_factory);
+
+  bool InitTypeRootNode(ModelType type);
+  void InitBookmarkFolder(const std::string& folder);
+
+  UserShare share_;
+  ObserverList<SyncManager::Observer> observers_;
+
+  scoped_ptr<UnrecoverableErrorHandler> unrecoverable_error_handler_;
+  ReportUnrecoverableErrorFunction report_unrecoverable_error_function_;
+
+  base::WeakPtrFactory<SyncRollbackManagerBase> weak_ptr_factory_;
+
+  DISALLOW_COPY_AND_ASSIGN(SyncRollbackManagerBase);
+};
+
+}  // namespace syncer
+
+#endif  // SYNC_INTERNAL_API_SYNC_ROLLBACK_MANAGER_BASE_H_
diff --git a/sync/internal_api/sync_rollback_manager_base_unittest.cc b/sync/internal_api/sync_rollback_manager_base_unittest.cc
new file mode 100644
index 0000000..5bb1548
--- /dev/null
+++ b/sync/internal_api/sync_rollback_manager_base_unittest.cc
@@ -0,0 +1,70 @@
+// 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.
+
+#include "sync/internal_api/sync_rollback_manager_base.h"
+
+#include "base/bind.h"
+#include "sync/internal_api/public/read_node.h"
+#include "sync/internal_api/public/read_transaction.h"
+#include "sync/internal_api/public/test/test_internal_components_factory.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace syncer {
+
+namespace {
+
+void OnConfigDone(bool success) {
+  EXPECT_TRUE(success);
+}
+
+class SyncRollbackManagerBaseTest : public testing::Test {
+ protected:
+  virtual void SetUp() OVERRIDE {
+    TestInternalComponentsFactory factory(InternalComponentsFactory::Switches(),
+                                          STORAGE_IN_MEMORY);
+    manager_.Init(base::FilePath(base::FilePath::kCurrentDirectory),
+                  MakeWeakHandle(base::WeakPtr<JsEventHandler>()),
+                  "", 0, true, scoped_ptr<HttpPostProviderFactory>().Pass(),
+                  std::vector<scoped_refptr<ModelSafeWorker> >(),
+                  NULL, NULL, SyncCredentials(), "", "", "", &factory,
+                  NULL, scoped_ptr<UnrecoverableErrorHandler>().Pass(),
+                  NULL, NULL);
+  }
+
+  SyncRollbackManagerBase manager_;
+  base::MessageLoop loop_;    // Needed for WeakHandle
+};
+
+TEST_F(SyncRollbackManagerBaseTest, InitTypeOnConfiguration) {
+  EXPECT_TRUE(manager_.InitialSyncEndedTypes().Empty());
+
+  manager_.ConfigureSyncer(
+      CONFIGURE_REASON_NEW_CLIENT,
+      ModelTypeSet(PREFERENCES, BOOKMARKS),
+      ModelTypeSet(), ModelTypeSet(), ModelTypeSet(), ModelSafeRoutingInfo(),
+      base::Bind(&OnConfigDone, true),
+      base::Bind(&OnConfigDone, false));
+
+  ReadTransaction trans(FROM_HERE, manager_.GetUserShare());
+  ReadNode pref_root(&trans);
+  EXPECT_EQ(BaseNode::INIT_OK,
+            pref_root.InitByTagLookup(ModelTypeToRootTag(PREFERENCES)));
+
+  ReadNode bookmark_root(&trans);
+  EXPECT_EQ(BaseNode::INIT_OK,
+            bookmark_root.InitByTagLookup(ModelTypeToRootTag(BOOKMARKS)));
+  ReadNode bookmark_bar(&trans);
+  EXPECT_EQ(BaseNode::INIT_OK,
+            bookmark_bar.InitByTagLookup("bookmark_bar"));
+  ReadNode bookmark_mobile(&trans);
+  EXPECT_EQ(BaseNode::INIT_OK,
+            bookmark_mobile.InitByTagLookup("synced_bookmarks"));
+  ReadNode bookmark_other(&trans);
+  EXPECT_EQ(BaseNode::INIT_OK,
+            bookmark_other.InitByTagLookup("other_bookmarks"));
+}
+
+}  // anonymous namespace
+
+}  // namespace syncer
diff --git a/sync/internal_api/sync_rollback_manager_unittest.cc b/sync/internal_api/sync_rollback_manager_unittest.cc
new file mode 100644
index 0000000..d2d00e4
--- /dev/null
+++ b/sync/internal_api/sync_rollback_manager_unittest.cc
@@ -0,0 +1,205 @@
+// 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.
+
+#include "sync/internal_api/sync_rollback_manager.h"
+
+#include "base/files/scoped_temp_dir.h"
+#include "sync/internal_api/public/read_node.h"
+#include "sync/internal_api/public/read_transaction.h"
+#include "sync/internal_api/public/test/test_internal_components_factory.h"
+#include "sync/internal_api/public/write_node.h"
+#include "sync/internal_api/public/write_transaction.h"
+#include "sync/internal_api/sync_backup_manager.h"
+#include "sync/syncable/entry.h"
+#include "sync/test/engine/fake_model_worker.h"
+#include "sync/test/test_directory_backing_store.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+using ::testing::_;
+using ::testing::DoDefault;
+using ::testing::Invoke;
+using ::testing::WithArgs;
+
+namespace syncer {
+
+namespace {
+
+class TestChangeDelegate : public SyncManager::ChangeDelegate {
+ public:
+  TestChangeDelegate() {
+    ON_CALL(*this, OnChangesApplied(_, _, _, _))
+        .WillByDefault(
+            WithArgs<3>(Invoke(this,
+                               &TestChangeDelegate::VerifyDeletes)));
+  }
+
+  void add_expected_delete(int64 v) {
+    expected_deletes_.insert(v);
+  }
+
+  MOCK_METHOD4(OnChangesApplied,
+               void(ModelType model_type,
+                    int64 model_version,
+                    const BaseTransaction* trans,
+                    const ImmutableChangeRecordList& changes));
+  MOCK_METHOD1(OnChangesComplete, void(ModelType model_type));
+
+ private:
+  void VerifyDeletes(const ImmutableChangeRecordList& changes) {
+    std::set<int64> deleted;
+    for (size_t i = 0; i < changes.Get().size(); ++i) {
+      const ChangeRecord& change = (changes.Get())[i];
+      EXPECT_EQ(ChangeRecord::ACTION_DELETE, change.action);
+      EXPECT_TRUE(deleted.find(change.id) == deleted.end());
+      deleted.insert(change.id);
+    }
+    EXPECT_TRUE(expected_deletes_ == deleted);
+  }
+
+  std::set<int64> expected_deletes_;
+};
+
+class SyncRollbackManagerTest : public testing::Test {
+ protected:
+  virtual void SetUp() OVERRIDE {
+    CHECK(temp_dir_.CreateUniqueTempDir());
+
+    worker_ = new FakeModelWorker(GROUP_UI);
+  }
+
+  void OnConfigDone(bool success) {
+    EXPECT_TRUE(success);
+  }
+
+  int64 CreateEntry(UserShare* user_share, ModelType type,
+                    const std::string& client_tag) {
+    WriteTransaction trans(FROM_HERE, user_share);
+    ReadNode type_root(&trans);
+    EXPECT_EQ(BaseNode::INIT_OK,
+              type_root.InitByTagLookup(ModelTypeToRootTag(type)));
+
+    WriteNode node(&trans);
+    EXPECT_EQ(WriteNode::INIT_SUCCESS,
+              node.InitUniqueByCreation(type, type_root, client_tag));
+    return node.GetEntry()->GetMetahandle();
+  }
+
+  void InitManager(SyncManager* manager, ModelTypeSet types,
+                   TestChangeDelegate* delegate) {
+    TestInternalComponentsFactory factory(InternalComponentsFactory::Switches(),
+                                          STORAGE_ON_DISK);
+
+    manager->Init(temp_dir_.path(),
+                  MakeWeakHandle(base::WeakPtr<JsEventHandler>()),
+                  "", 0, true, scoped_ptr<HttpPostProviderFactory>().Pass(),
+                  std::vector<scoped_refptr<ModelSafeWorker> >(1,
+                                                               worker_.get()),
+                  NULL, delegate, SyncCredentials(), "", "", "", &factory,
+                  NULL, scoped_ptr<UnrecoverableErrorHandler>().Pass(),
+                  NULL, NULL);
+    manager->ConfigureSyncer(
+        CONFIGURE_REASON_NEW_CLIENT,
+        types,
+        ModelTypeSet(), ModelTypeSet(), ModelTypeSet(), ModelSafeRoutingInfo(),
+        base::Bind(&SyncRollbackManagerTest::OnConfigDone,
+                   base::Unretained(this), true),
+        base::Bind(&SyncRollbackManagerTest::OnConfigDone,
+                   base::Unretained(this), false));
+  }
+
+  // Create and persist an entry by unique tag in DB.
+  void PrepopulateDb(ModelType type, const std::string& client_tag) {
+    SyncBackupManager backup_manager;
+    TestChangeDelegate delegate;
+    InitManager(&backup_manager, ModelTypeSet(type), &delegate);
+    CreateEntry(backup_manager.GetUserShare(), type, client_tag);
+    backup_manager.ShutdownOnSyncThread();
+  }
+
+  // Verify entry with |client_tag| exists in sync directory.
+  bool VerifyEntry(UserShare* user_share, ModelType type,
+                   const std::string& client_tag) {
+    ReadTransaction trans(FROM_HERE, user_share);
+    ReadNode node(&trans);
+    return BaseNode::INIT_OK == node.InitByClientTagLookup(type, client_tag);
+  }
+
+  base::ScopedTempDir temp_dir_;
+  scoped_refptr<ModelSafeWorker> worker_;
+  base::MessageLoop loop_;    // Needed for WeakHandle
+};
+
+TEST_F(SyncRollbackManagerTest, RollbackBasic) {
+  PrepopulateDb(PREFERENCES, "pref1");
+
+  TestChangeDelegate delegate;
+  SyncRollbackManager rollback_manager;
+  InitManager(&rollback_manager, ModelTypeSet(PREFERENCES), &delegate);
+
+  // Simulate a new entry added during type initialization.
+  int64 new_pref_id =
+      CreateEntry(rollback_manager.GetUserShare(), PREFERENCES, "pref2");
+
+  delegate.add_expected_delete(new_pref_id);
+  EXPECT_CALL(delegate, OnChangesApplied(_, _, _, _))
+      .Times(1)
+      .WillOnce(DoDefault());
+  EXPECT_CALL(delegate, OnChangesComplete(_)).Times(1);
+
+  ModelSafeRoutingInfo routing_info;
+  routing_info[PREFERENCES] = GROUP_UI;
+  rollback_manager.StartSyncingNormally(routing_info);
+}
+
+TEST_F(SyncRollbackManagerTest, NoRollbackOfTypesNotBackedUp) {
+  PrepopulateDb(PREFERENCES, "pref1");
+
+  TestChangeDelegate delegate;
+  SyncRollbackManager rollback_manager;
+  InitManager(&rollback_manager, ModelTypeSet(PREFERENCES, APPS), &delegate);
+
+  // Simulate new entry added during type initialization.
+  int64 new_pref_id =
+      CreateEntry(rollback_manager.GetUserShare(), PREFERENCES, "pref2");
+  CreateEntry(rollback_manager.GetUserShare(), APPS, "app1");
+
+  delegate.add_expected_delete(new_pref_id);
+  EXPECT_CALL(delegate, OnChangesApplied(_, _, _, _))
+      .Times(1)
+      .WillOnce(DoDefault());
+  EXPECT_CALL(delegate, OnChangesComplete(_)).Times(1);
+
+  ModelSafeRoutingInfo routing_info;
+  routing_info[PREFERENCES] = GROUP_UI;
+  rollback_manager.StartSyncingNormally(routing_info);
+
+  // APP entry is still valid.
+  EXPECT_TRUE(VerifyEntry(rollback_manager.GetUserShare(), APPS, "app1"));
+}
+
+TEST_F(SyncRollbackManagerTest, BackupDbNotChangedOnAbort) {
+  PrepopulateDb(PREFERENCES, "pref1");
+
+  TestChangeDelegate delegate;
+  scoped_ptr<SyncRollbackManager> rollback_manager(
+      new SyncRollbackManager);
+  InitManager(rollback_manager.get(), ModelTypeSet(PREFERENCES), &delegate);
+
+  // Simulate a new entry added during type initialization.
+  CreateEntry(rollback_manager->GetUserShare(), PREFERENCES, "pref2");
+
+  // Manager was shut down before sync starts.
+  rollback_manager->ShutdownOnSyncThread();
+
+  // Verify new entry was not persisted.
+  rollback_manager.reset(new SyncRollbackManager);
+  InitManager(rollback_manager.get(), ModelTypeSet(PREFERENCES), &delegate);
+  EXPECT_FALSE(VerifyEntry(rollback_manager->GetUserShare(), PREFERENCES,
+                           "pref2"));
+}
+
+}  // anonymous namespace
+
+}  // namespace syncer
diff --git a/sync/internal_api/syncapi_internal.h b/sync/internal_api/syncapi_internal.h
index 27e1400..2e7965d 100644
--- a/sync/internal_api/syncapi_internal.h
+++ b/sync/internal_api/syncapi_internal.h
@@ -26,7 +26,7 @@
     Cryptographer* crypto);
 
 SYNC_EXPORT void SyncAPINameToServerName(const std::string& syncer_name,
-                                                 std::string* out);
+                                         std::string* out);
 SYNC_EXPORT void ServerNameToSyncAPIName(const std::string& server_name,
                                          std::string* out);
 
diff --git a/sync/internal_api/write_node.cc b/sync/internal_api/write_node.cc
index 018f444..6a634eb 100644
--- a/sync/internal_api/write_node.cc
+++ b/sync/internal_api/write_node.cc
@@ -41,7 +41,7 @@
   MarkForSyncing();
 }
 
-void WriteNode::SetTitle(const std::wstring& title) {
+void WriteNode::SetTitle(const std::string& title) {
   DCHECK_NE(GetModelType(), UNSPECIFIED);
   ModelType type = GetModelType();
   // It's possible the nigori lost the set of encrypted types. If the current
@@ -57,7 +57,7 @@
   if (type != BOOKMARKS && needs_encryption) {
     new_legal_title = kEncryptedString;
   } else {
-    SyncAPINameToServerName(base::WideToUTF8(title), &new_legal_title);
+    SyncAPINameToServerName(title, &new_legal_title);
     base::TruncateUTF8ToByteSize(new_legal_title, 255, &new_legal_title);
   }
 
diff --git a/sync/notifier/fake_invalidation_state_tracker.cc b/sync/notifier/fake_invalidation_state_tracker.cc
index 47e2f0f..ccef53e 100644
--- a/sync/notifier/fake_invalidation_state_tracker.cc
+++ b/sync/notifier/fake_invalidation_state_tracker.cc
@@ -18,7 +18,7 @@
 
 FakeInvalidationStateTracker::~FakeInvalidationStateTracker() {}
 
-void FakeInvalidationStateTracker::SetInvalidatorClientId(
+void FakeInvalidationStateTracker::ClearAndSetNewClientId(
     const std::string& client_id) {
   Clear();
   invalidator_client_id_ = client_id;
diff --git a/sync/notifier/fake_invalidation_state_tracker.h b/sync/notifier/fake_invalidation_state_tracker.h
index d1daaba..eb62256 100644
--- a/sync/notifier/fake_invalidation_state_tracker.h
+++ b/sync/notifier/fake_invalidation_state_tracker.h
@@ -20,7 +20,7 @@
   virtual ~FakeInvalidationStateTracker();
 
   // InvalidationStateTracker implementation.
-  virtual void SetInvalidatorClientId(const std::string& client_id) OVERRIDE;
+  virtual void ClearAndSetNewClientId(const std::string& client_id) OVERRIDE;
   virtual std::string GetInvalidatorClientId() const OVERRIDE;
   virtual void SetBootstrapData(const std::string& data) OVERRIDE;
   virtual std::string GetBootstrapData() const OVERRIDE;
diff --git a/sync/notifier/invalidation_state_tracker.h b/sync/notifier/invalidation_state_tracker.h
index 81a07ea..22e3e6f 100644
--- a/sync/notifier/invalidation_state_tracker.h
+++ b/sync/notifier/invalidation_state_tracker.h
@@ -30,14 +30,16 @@
 
 namespace syncer {
 
-class InvalidationStateTracker {
+class SYNC_EXPORT InvalidationStateTracker {
  public:
   InvalidationStateTracker() {}
+  virtual ~InvalidationStateTracker() {}
 
   // The per-client unique ID used to register the invalidation client with the
   // server.  This is used to squelch invalidation notifications that originate
-  // from changes made by this client.
-  virtual void SetInvalidatorClientId(const std::string& data) = 0;
+  // from changes made by this client.  Setting the client ID clears all other
+  // state.
+  virtual void ClearAndSetNewClientId(const std::string& data) = 0;
   virtual std::string GetInvalidatorClientId() const = 0;
 
   // Used by invalidation::InvalidationClient for persistence. |data| is an
@@ -55,9 +57,6 @@
 
   // Erases invalidation versions, client ID, and state stored on disk.
   virtual void Clear() = 0;
-
- protected:
-  virtual ~InvalidationStateTracker() {}
 };
 
 }  // namespace syncer
diff --git a/sync/notifier/non_blocking_invalidator.cc b/sync/notifier/non_blocking_invalidator.cc
index db8d018..df40477 100644
--- a/sync/notifier/non_blocking_invalidator.cc
+++ b/sync/notifier/non_blocking_invalidator.cc
@@ -13,7 +13,9 @@
 #include "base/thread_task_runner_handle.h"
 #include "base/threading/thread.h"
 #include "jingle/notifier/listener/push_client.h"
+#include "sync/internal_api/public/util/weak_handle.h"
 #include "sync/notifier/gcm_network_channel_delegate.h"
+#include "sync/notifier/invalidation_handler.h"
 #include "sync/notifier/invalidation_notifier.h"
 #include "sync/notifier/object_id_invalidation_map.h"
 #include "sync/notifier/sync_system_resources.h"
@@ -95,10 +97,9 @@
       // InvalidationHandler to observe the InvalidationNotifier we create.
       public InvalidationHandler {
  public:
-  // Called on parent thread.  |delegate_observer| should be
-  // initialized.
+  // Called on parent thread.  |delegate_observer| should be initialized.
   explicit Core(
-      const WeakHandle<InvalidationHandler>& delegate_observer);
+      const WeakHandle<NonBlockingInvalidator>& delegate_observer);
 
   // Helpers called on I/O thread.
   void Initialize(
@@ -123,7 +124,7 @@
   virtual ~Core();
 
   // The variables below should be used only on the I/O thread.
-  const WeakHandle<InvalidationHandler> delegate_observer_;
+  const WeakHandle<NonBlockingInvalidator> delegate_observer_;
   scoped_ptr<InvalidationNotifier> invalidation_notifier_;
   scoped_refptr<base::SingleThreadTaskRunner> network_task_runner_;
 
@@ -131,7 +132,7 @@
 };
 
 NonBlockingInvalidator::Core::Core(
-    const WeakHandle<InvalidationHandler>& delegate_observer)
+    const WeakHandle<NonBlockingInvalidator>& delegate_observer)
     : delegate_observer_(delegate_observer) {
   DCHECK(delegate_observer_.IsInitialized());
 }
@@ -185,15 +186,16 @@
 void NonBlockingInvalidator::Core::OnInvalidatorStateChange(
     InvalidatorState reason) {
   DCHECK(network_task_runner_->BelongsToCurrentThread());
-  delegate_observer_.Call(
-      FROM_HERE, &InvalidationHandler::OnInvalidatorStateChange, reason);
+  delegate_observer_.Call(FROM_HERE,
+                          &NonBlockingInvalidator::OnInvalidatorStateChange,
+                          reason);
 }
 
 void NonBlockingInvalidator::Core::OnIncomingInvalidation(
     const ObjectIdInvalidationMap& invalidation_map) {
   DCHECK(network_task_runner_->BelongsToCurrentThread());
   delegate_observer_.Call(FROM_HERE,
-                          &InvalidationHandler::OnIncomingInvalidation,
+                          &NonBlockingInvalidator::OnIncomingInvalidation,
                           invalidation_map);
 }
 
@@ -206,11 +208,11 @@
     const std::string& invalidator_client_id,
     const UnackedInvalidationsMap& saved_invalidations,
     const std::string& invalidation_bootstrap_data,
-    const WeakHandle<InvalidationStateTracker>&
-        invalidation_state_tracker,
+    InvalidationStateTracker* invalidation_state_tracker,
     const std::string& client_info,
     const scoped_refptr<net::URLRequestContextGetter>& request_context_getter)
-    : parent_task_runner_(base::ThreadTaskRunnerHandle::Get()),
+    : invalidation_state_tracker_(invalidation_state_tracker),
+      parent_task_runner_(base::ThreadTaskRunnerHandle::Get()),
       network_task_runner_(request_context_getter->GetNetworkTaskRunner()),
       weak_ptr_factory_(this) {
   core_ = new Core(MakeWeakHandle(weak_ptr_factory_.GetWeakPtr()));
@@ -220,7 +222,7 @@
       invalidator_client_id,
       saved_invalidations,
       invalidation_bootstrap_data,
-      invalidation_state_tracker,
+      MakeWeakHandle(weak_ptr_factory_.GetWeakPtr()),
       client_info,
       request_context_getter);
 
@@ -298,19 +300,6 @@
   }
 }
 
-void NonBlockingInvalidator::OnInvalidatorStateChange(InvalidatorState state) {
-  DCHECK(parent_task_runner_->BelongsToCurrentThread());
-  registrar_.UpdateInvalidatorState(state);
-}
-
-void NonBlockingInvalidator::OnIncomingInvalidation(
-        const ObjectIdInvalidationMap& invalidation_map) {
-  DCHECK(parent_task_runner_->BelongsToCurrentThread());
-  registrar_.DispatchInvalidationsToHandlers(invalidation_map);
-}
-
-std::string NonBlockingInvalidator::GetOwnerName() const { return "Sync"; }
-
 NetworkChannelCreator
     NonBlockingInvalidator::MakePushClientChannelCreator(
         const notifier::NotifierOptions& notifier_options) {
@@ -326,4 +315,53 @@
                     base::Passed(&delegate));
 }
 
+void NonBlockingInvalidator::ClearAndSetNewClientId(const std::string& data) {
+  DCHECK(parent_task_runner_->BelongsToCurrentThread());
+  invalidation_state_tracker_->ClearAndSetNewClientId(data);
+}
+
+std::string NonBlockingInvalidator::GetInvalidatorClientId() const {
+  DCHECK(parent_task_runner_->BelongsToCurrentThread());
+  return invalidation_state_tracker_->GetInvalidatorClientId();
+}
+
+void NonBlockingInvalidator::SetBootstrapData(const std::string& data) {
+  DCHECK(parent_task_runner_->BelongsToCurrentThread());
+  invalidation_state_tracker_->SetBootstrapData(data);
+}
+
+std::string NonBlockingInvalidator::GetBootstrapData() const {
+  DCHECK(parent_task_runner_->BelongsToCurrentThread());
+  return invalidation_state_tracker_->GetBootstrapData();
+}
+
+void NonBlockingInvalidator::SetSavedInvalidations(
+      const UnackedInvalidationsMap& states) {
+  DCHECK(parent_task_runner_->BelongsToCurrentThread());
+  invalidation_state_tracker_->SetSavedInvalidations(states);
+}
+
+UnackedInvalidationsMap NonBlockingInvalidator::GetSavedInvalidations() const {
+  DCHECK(parent_task_runner_->BelongsToCurrentThread());
+  return invalidation_state_tracker_->GetSavedInvalidations();
+}
+
+void NonBlockingInvalidator::Clear() {
+  DCHECK(parent_task_runner_->BelongsToCurrentThread());
+  invalidation_state_tracker_->Clear();
+}
+
+void NonBlockingInvalidator::OnInvalidatorStateChange(InvalidatorState state) {
+  DCHECK(parent_task_runner_->BelongsToCurrentThread());
+  registrar_.UpdateInvalidatorState(state);
+}
+
+void NonBlockingInvalidator::OnIncomingInvalidation(
+        const ObjectIdInvalidationMap& invalidation_map) {
+  DCHECK(parent_task_runner_->BelongsToCurrentThread());
+  registrar_.DispatchInvalidationsToHandlers(invalidation_map);
+}
+
+std::string NonBlockingInvalidator::GetOwnerName() const { return "Sync"; }
+
 }  // namespace syncer
diff --git a/sync/notifier/non_blocking_invalidator.h b/sync/notifier/non_blocking_invalidator.h
index 47bd216..efdf89d 100644
--- a/sync/notifier/non_blocking_invalidator.h
+++ b/sync/notifier/non_blocking_invalidator.h
@@ -17,11 +17,11 @@
 #include "base/memory/weak_ptr.h"
 #include "jingle/notifier/base/notifier_options.h"
 #include "sync/base/sync_export.h"
-#include "sync/internal_api/public/util/weak_handle.h"
-#include "sync/notifier/invalidation_handler.h"
 #include "sync/notifier/invalidation_state_tracker.h"
 #include "sync/notifier/invalidator.h"
 #include "sync/notifier/invalidator_registrar.h"
+#include "sync/notifier/invalidator_state.h"
+#include "sync/notifier/unacked_invalidation_set.h"
 
 namespace base {
 class SingleThreadTaskRunner;
@@ -38,17 +38,15 @@
 
 class SYNC_EXPORT_PRIVATE NonBlockingInvalidator
     : public Invalidator,
-      // InvalidationHandler to "observe" our Core via WeakHandle.
-      public InvalidationHandler {
+      public InvalidationStateTracker {
  public:
-  // |invalidation_state_tracker| must be initialized.
+  // |invalidation_state_tracker| must be initialized and must outlive |this|.
   NonBlockingInvalidator(
       NetworkChannelCreator network_channel_creator,
       const std::string& invalidator_client_id,
       const UnackedInvalidationsMap& saved_invalidations,
       const std::string& invalidation_bootstrap_data,
-      const WeakHandle<InvalidationStateTracker>&
-          invalidation_state_tracker,
+      InvalidationStateTracker* invalidation_state_tracker,
       const std::string& client_info,
       const scoped_refptr<net::URLRequestContextGetter>&
           request_context_getter);
@@ -67,12 +65,6 @@
       base::Callback<void(const base::DictionaryValue&)> callback) const
       OVERRIDE;
 
-  // InvalidationHandler implementation.
-  virtual void OnInvalidatorStateChange(InvalidatorState state) OVERRIDE;
-  virtual void OnIncomingInvalidation(
-      const ObjectIdInvalidationMap& invalidation_map) OVERRIDE;
-  virtual std::string GetOwnerName() const OVERRIDE;
-
   // Static functions to construct callback that creates network channel for
   // SyncSystemResources. The goal is to pass network channel to invalidator at
   // the same time not exposing channel specific parameters to invalidator and
@@ -82,11 +74,29 @@
   static NetworkChannelCreator MakeGCMNetworkChannelCreator(
       scoped_refptr<net::URLRequestContextGetter> request_context_getter,
       scoped_ptr<GCMNetworkChannelDelegate> delegate);
+
+  // These methods are forwarded to the invalidation_state_tracker_.
+  virtual void ClearAndSetNewClientId(const std::string& data) OVERRIDE;
+  virtual std::string GetInvalidatorClientId() const OVERRIDE;
+  virtual void SetBootstrapData(const std::string& data) OVERRIDE;
+  virtual std::string GetBootstrapData() const OVERRIDE;
+  virtual void SetSavedInvalidations(
+      const UnackedInvalidationsMap& states) OVERRIDE;
+  virtual UnackedInvalidationsMap GetSavedInvalidations() const OVERRIDE;
+  virtual void Clear() OVERRIDE;
+
  private:
+  void OnInvalidatorStateChange(InvalidatorState state);
+  void OnIncomingInvalidation(const ObjectIdInvalidationMap& invalidation_map);
+  std::string GetOwnerName() const;
+
+  friend class NonBlockingInvalidatorTestDelegate;
+
   struct InitializeOptions;
   class Core;
 
   InvalidatorRegistrar registrar_;
+  InvalidationStateTracker* invalidation_state_tracker_;
 
   // The real guts of NonBlockingInvalidator, which allows this class to live
   // completely on the parent thread.
diff --git a/sync/notifier/non_blocking_invalidator_unittest.cc b/sync/notifier/non_blocking_invalidator_unittest.cc
index 3dd2dbb..07700a5 100644
--- a/sync/notifier/non_blocking_invalidator_unittest.cc
+++ b/sync/notifier/non_blocking_invalidator_unittest.cc
@@ -13,7 +13,6 @@
 #include "google/cacheinvalidation/types.pb.h"
 #include "jingle/notifier/base/fake_base_task.h"
 #include "net/url_request/url_request_test_util.h"
-#include "sync/internal_api/public/util/weak_handle.h"
 #include "sync/notifier/fake_invalidation_handler.h"
 #include "sync/notifier/invalidation_state_tracker.h"
 #include "sync/notifier/invalidator_test_template.h"
@@ -21,8 +20,6 @@
 
 namespace syncer {
 
-namespace {
-
 class NonBlockingInvalidatorTestDelegate {
  public:
   NonBlockingInvalidatorTestDelegate() : io_thread_("IO thread") {}
@@ -52,7 +49,7 @@
             invalidator_client_id,
             UnackedInvalidationsMap(),
             initial_state,
-            MakeWeakHandle(invalidation_state_tracker),
+            invalidation_state_tracker.get(),
             "fake_client_info",
             request_context_getter_));
   }
@@ -98,6 +95,4 @@
     NonBlockingInvalidatorTest, InvalidatorTest,
     NonBlockingInvalidatorTestDelegate);
 
-}  // namespace
-
 }  // namespace syncer
diff --git a/sync/protocol/password_specifics.proto b/sync/protocol/password_specifics.proto
index ad5a512..218bad4 100644
--- a/sync/protocol/password_specifics.proto
+++ b/sync/protocol/password_specifics.proto
@@ -17,7 +17,8 @@
 import "encryption.proto";
 
 // These are the properties that get serialized into the |encrypted| field of
-// PasswordSpecifics.
+// PasswordSpecifics. They correspond to fields in autofill::PasswordForm. See
+// components/autofill/core/common/password_form.h for more details.
 message PasswordSpecificsData {
   optional int32 scheme = 1;
   optional string signon_realm = 2;
@@ -31,6 +32,8 @@
   optional bool preferred = 10;
   optional int64 date_created = 11;
   optional bool blacklisted = 12;
+  optional int32 type = 13;
+  optional int32 times_used = 14;
 }
 
 // Properties of password sync objects.
diff --git a/sync/protocol/proto_enum_conversions.cc b/sync/protocol/proto_enum_conversions.cc
index edbe591..213a096 100644
--- a/sync/protocol/proto_enum_conversions.cc
+++ b/sync/protocol/proto_enum_conversions.cc
@@ -150,6 +150,7 @@
     ENUM_CASE(sync_pb::SyncEnums, TRANSIENT_ERROR);
     ENUM_CASE(sync_pb::SyncEnums, MIGRATION_DONE);
     ENUM_CASE(sync_pb::SyncEnums, DISABLED_BY_ADMIN);
+    ENUM_CASE(sync_pb::SyncEnums, USER_ROLLBACK);
     ENUM_CASE(sync_pb::SyncEnums, UNKNOWN);
   }
   NOTREACHED();
diff --git a/sync/protocol/proto_value_conversions.cc b/sync/protocol/proto_value_conversions.cc
index 04c5f06..85fd7de 100644
--- a/sync/protocol/proto_value_conversions.cc
+++ b/sync/protocol/proto_value_conversions.cc
@@ -205,6 +205,15 @@
   SET_INT32(http_status_code);
   SET_INT32(referrer_policy);
   SET_BOOL(is_restored);
+  SET_REP(navigation_redirect, NavigationRedirectToValue);
+  SET_STR(last_navigation_redirect_url);
+  return value;
+}
+
+base::DictionaryValue* NavigationRedirectToValue(
+    const sync_pb::NavigationRedirect& proto) {
+  base::DictionaryValue* value = new base::DictionaryValue();
+  SET_STR(url);
   return value;
 }
 
@@ -223,6 +232,8 @@
   SET_BOOL(preferred);
   SET_INT64(date_created);
   SET_BOOL(blacklisted);
+  SET_INT32(type);
+  SET_INT32(times_used);
   return value;
 }
 
@@ -248,6 +259,9 @@
   base::DictionaryValue* value = new base::DictionaryValue();
   SET_STR_REP(app_id);
   SET_STR(settings_display_name);
+  SET_STR(app_name);
+  SET_STR(settings_url);
+  SET_STR(info_url);
   SET(icon, SyncedNotificationImageToValue);
   // TODO(petewil): Add fields for the monochrome icon when it is available.
   return value;
diff --git a/sync/protocol/proto_value_conversions.h b/sync/protocol/proto_value_conversions.h
index bf936ee..c8e5166 100644
--- a/sync/protocol/proto_value_conversions.h
+++ b/sync/protocol/proto_value_conversions.h
@@ -50,6 +50,7 @@
 class ManagedUserSettingSpecifics;
 class ManagedUserSharedSettingSpecifics;
 class ManagedUserSpecifics;
+class NavigationRedirect;
 class NigoriSpecifics;
 class PasswordSpecifics;
 class PasswordSpecificsData;
@@ -118,6 +119,9 @@
 SYNC_EXPORT_PRIVATE base::DictionaryValue* TabNavigationToValue(
     const sync_pb::TabNavigation& tab_navigation);
 
+SYNC_EXPORT_PRIVATE base::DictionaryValue* NavigationRedirectToValue(
+    const sync_pb::NavigationRedirect& navigation_redirect);
+
 // Sub-protocol of PasswordSpecifics.
 
 SYNC_EXPORT_PRIVATE base::DictionaryValue* PasswordSpecificsDataToValue(
diff --git a/sync/protocol/proto_value_conversions_unittest.cc b/sync/protocol/proto_value_conversions_unittest.cc
index b2c84e6..664a6ab 100644
--- a/sync/protocol/proto_value_conversions_unittest.cc
+++ b/sync/protocol/proto_value_conversions_unittest.cc
@@ -84,6 +84,10 @@
   TestSpecificsToValue(TabNavigationToValue);
 }
 
+TEST_F(ProtoValueConversionsTest, NavigationRedirectToValue) {
+  TestSpecificsToValue(NavigationRedirectToValue);
+}
+
 TEST_F(ProtoValueConversionsTest, PasswordSpecificsData) {
   sync_pb::PasswordSpecificsData specifics;
   specifics.set_password_value("secret");
diff --git a/sync/protocol/session_specifics.proto b/sync/protocol/session_specifics.proto
index dc3670d..bde8924 100644
--- a/sync/protocol/session_specifics.proto
+++ b/sync/protocol/session_specifics.proto
@@ -134,9 +134,22 @@
   repeated string content_pack_categories = 19;
   // The status code from the last navigation.
   optional int32 http_status_code = 20;
+
   // Referrer policy. Valid enums are defined in
   // third_party/WebKit/public/platform/WebReferrerPolicy.h.
   optional int32 referrer_policy = 21 [default = 1];
   // True if created from restored navigation entry that hasn't been loaded.
   optional bool is_restored = 22;
+  // The chain of redirections for this navigation, from the original URL
+  // through the last URL that redirected.
+  repeated NavigationRedirect navigation_redirect = 23;
+  // Normally not present.
+  // The last URL traversed when different from the virtual_url.
+  optional string last_navigation_redirect_url = 24;
+}
+
+// Navigation information for a single redirection within a single navigation.
+message NavigationRedirect {
+  // A URL that redirected while navigating to the virtual_url.
+  optional string url = 1;
 }
diff --git a/sync/protocol/sync.proto b/sync/protocol/sync.proto
index 675c25b..1e9b66a 100644
--- a/sync/protocol/sync.proto
+++ b/sync/protocol/sync.proto
@@ -692,7 +692,7 @@
 
 message ClientToServerMessage {
   required string share = 1;
-  optional int32 protocol_version = 2 [default = 31];
+  optional int32 protocol_version = 2 [default = 32];
   enum Contents {
     COMMIT = 1;
     GET_UPDATES = 2;
diff --git a/sync/protocol/sync_enums.proto b/sync/protocol/sync_enums.proto
index 9305c67..6e1405b 100644
--- a/sync/protocol/sync_enums.proto
+++ b/sync/protocol/sync_enums.proto
@@ -98,6 +98,7 @@
                               // these data types only and then re-sync with
                               // a server.
     DISABLED_BY_ADMIN = 10;   // An administrator disabled sync for this domain.
+    USER_ROLLBACK     = 11;   // Client told to stop syncing and roll back.
     UNKNOWN            = 100; // Unknown value. This should never be explicitly
                               // used; it is the default value when an
                               // out-of-date client parses a value it doesn't
diff --git a/sync/protocol/sync_protocol_error.cc b/sync/protocol/sync_protocol_error.cc
index cd22e9a..ac9e2fd 100644
--- a/sync/protocol/sync_protocol_error.cc
+++ b/sync/protocol/sync_protocol_error.cc
@@ -23,6 +23,7 @@
     ENUM_CASE(MIGRATION_DONE);
     ENUM_CASE(INVALID_CREDENTIAL);
     ENUM_CASE(DISABLED_BY_ADMIN);
+    ENUM_CASE(USER_ROLLBACK);
     ENUM_CASE(UNKNOWN_ERROR);
   }
   NOTREACHED();
@@ -37,6 +38,7 @@
     ENUM_CASE(STOP_AND_RESTART_SYNC);
     ENUM_CASE(DISABLE_SYNC_ON_CLIENT);
     ENUM_CASE(STOP_SYNC_FOR_DISABLED_ACCOUNT);
+    ENUM_CASE(DISABLE_SYNC_AND_ROLLBACK);
     ENUM_CASE(UNKNOWN_ACTION);
   }
   NOTREACHED();
diff --git a/sync/protocol/sync_protocol_error.h b/sync/protocol/sync_protocol_error.h
index be9232d..aef7650 100644
--- a/sync/protocol/sync_protocol_error.h
+++ b/sync/protocol/sync_protocol_error.h
@@ -42,6 +42,9 @@
   // An administrator disabled sync for this domain.
   DISABLED_BY_ADMIN,
 
+  // Client told to stop syncing this device and roll back local data.
+  USER_ROLLBACK,
+
   // The default value.
   UNKNOWN_ERROR
 };
@@ -66,6 +69,9 @@
   // settings page that account is disabled.
   STOP_SYNC_FOR_DISABLED_ACCOUNT,
 
+  // Disable sync and roll back local model to pre-sync state.
+  DISABLE_SYNC_AND_ROLLBACK,
+
   // The default. No action.
   UNKNOWN_ACTION
 };
diff --git a/sync/protocol/synced_notification_app_info_specifics.proto b/sync/protocol/synced_notification_app_info_specifics.proto
index 09726ff..73ed92c 100644
--- a/sync/protocol/synced_notification_app_info_specifics.proto
+++ b/sync/protocol/synced_notification_app_info_specifics.proto
@@ -53,4 +53,4 @@
 
   // A repeated set of icons of different resolutions and types.
   repeated Icon app_icon = 7;
-}
\ No newline at end of file
+}
diff --git a/sync/sync_internal_api.gypi b/sync/sync_internal_api.gypi
index 3a572df..2e677fe 100644
--- a/sync/sync_internal_api.gypi
+++ b/sync/sync_internal_api.gypi
@@ -122,6 +122,8 @@
     'internal_api/public/write_transaction.h',
     'internal_api/read_node.cc',
     'internal_api/read_transaction.cc',
+    'internal_api/sync_backup_manager.cc',
+    'internal_api/sync_backup_manager.h',
     'internal_api/sync_core.cc',
     'internal_api/sync_core.h',
     'internal_api/sync_core_proxy.cc',
@@ -132,6 +134,10 @@
     'internal_api/sync_manager_factory.cc',
     'internal_api/sync_manager_impl.cc',
     'internal_api/sync_manager_impl.h',
+    'internal_api/sync_rollback_manager_base.cc',
+    'internal_api/sync_rollback_manager_base.h',    
+    'internal_api/sync_rollback_manager.cc',
+    'internal_api/sync_rollback_manager.h',    
     'internal_api/syncapi_internal.cc',
     'internal_api/syncapi_internal.h',
     'internal_api/syncapi_server_connection_manager.cc',
diff --git a/sync/sync_tests.gypi b/sync/sync_tests.gypi
index 6841bec..fffefa5 100644
--- a/sync/sync_tests.gypi
+++ b/sync/sync_tests.gypi
@@ -103,7 +103,8 @@
       'dependencies': [
         '../base/base.gyp:base',
         '../net/net.gyp:net',
-	'../third_party/protobuf/protobuf.gyp:protobuf_lite',
+        '../testing/gtest.gyp:gtest',
+        '../third_party/protobuf/protobuf.gyp:protobuf_lite',
         'sync',
       ],
       'export_dependent_settings': [
@@ -120,6 +121,8 @@
         'test/fake_server/fake_server_http_post_provider.h',
         'test/fake_server/fake_server_network_resources.cc',
         'test/fake_server/fake_server_network_resources.h',
+        'test/fake_server/fake_server_verifier.cc',
+        'test/fake_server/fake_server_verifier.h',
         'test/fake_server/permanent_entity.cc',
         'test/fake_server/permanent_entity.h',
         'test/fake_server/tombstone_entity.cc',
@@ -300,7 +303,10 @@
           'sessions/model_type_registry_unittest.cc',
           'sessions/nudge_tracker_unittest.cc',
           'sessions/status_controller_unittest.cc',
+          'syncable/directory_unittest.cc',
+          'syncable/directory_unittest.h',
           'syncable/directory_backing_store_unittest.cc',
+          'syncable/entry_kernel_unittest.cc',
           'syncable/model_type_unittest.cc',
           'syncable/nigori_util_unittest.cc',
           'syncable/parent_child_index_unittest.cc',
@@ -420,9 +426,12 @@
           'internal_api/protocol_event_buffer_unittest.cc',
           'internal_api/public/change_record_unittest.cc',
           'internal_api/public/sessions/sync_session_snapshot_unittest.cc',
+          'internal_api/sync_backup_manager_unittest.cc',
           'internal_api/sync_core_proxy_impl_unittest.cc',
           'internal_api/sync_encryption_handler_impl_unittest.cc',
-          'internal_api/sync_manager_impl_unittest.cc',
+          'internal_api/sync_manager_impl_unittest.cc',          
+          'internal_api/sync_rollback_manager_base_unittest.cc',
+          'internal_api/sync_rollback_manager_unittest.cc',
           'internal_api/syncapi_server_connection_manager_unittest.cc',
         ],
         'conditions': [
@@ -693,7 +702,6 @@
           ],
           'variables': {
             'test_suite_name': 'sync_unit_tests',
-            'input_shlib_path': '<(SHARED_LIB_DIR)/<(SHARED_LIB_PREFIX)sync_unit_tests<(SHARED_LIB_SUFFIX)',
           },
           'includes': [ '../build/apk_test.gypi' ],
         },
diff --git a/sync/syncable/directory_unittest.cc b/sync/syncable/directory_unittest.cc
new file mode 100644
index 0000000..503a12f
--- /dev/null
+++ b/sync/syncable/directory_unittest.cc
@@ -0,0 +1,1188 @@
+// 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.
+
+#include "sync/syncable/directory_unittest.h"
+
+#include "sync/syncable/syncable_proto_util.h"
+#include "sync/syncable/syncable_util.h"
+#include "sync/syncable/syncable_write_transaction.h"
+#include "sync/test/engine/test_syncable_utils.h"
+
+namespace syncer {
+
+namespace syncable {
+
+namespace {
+
+bool IsLegalNewParent(const Entry& a, const Entry& b) {
+  return IsLegalNewParent(a.trans(), a.GetId(), b.GetId());
+}
+
+}  // namespace
+
+const char SyncableDirectoryTest::kDirectoryName[] = "Foo";
+
+SyncableDirectoryTest::SyncableDirectoryTest() {
+}
+
+SyncableDirectoryTest::~SyncableDirectoryTest() {
+}
+
+void SyncableDirectoryTest::SetUp() {
+  dir_.reset(new Directory(new InMemoryDirectoryBackingStore(kDirectoryName),
+                           &handler_,
+                           NULL,
+                           NULL,
+                           NULL));
+  ASSERT_TRUE(dir_.get());
+  ASSERT_EQ(OPENED,
+            dir_->Open(kDirectoryName, &delegate_, NullTransactionObserver()));
+  ASSERT_TRUE(dir_->good());
+}
+
+void SyncableDirectoryTest::TearDown() {
+  if (dir_)
+    dir_->SaveChanges();
+  dir_.reset();
+}
+
+// Creates an empty entry and sets the ID field to a default one.
+void SyncableDirectoryTest::CreateEntry(const std::string& entryname) {
+  CreateEntry(entryname, TestIdFactory::FromNumber(-99));
+}
+
+// Creates an empty entry and sets the ID field to id.
+void SyncableDirectoryTest::CreateEntry(const std::string& entryname,
+                                        const int id) {
+  CreateEntry(entryname, TestIdFactory::FromNumber(id));
+}
+void SyncableDirectoryTest::CreateEntry(const std::string& entryname, Id id) {
+  WriteTransaction wtrans(FROM_HERE, UNITTEST, dir_.get());
+  MutableEntry me(&wtrans, CREATE, BOOKMARKS, wtrans.root_id(), entryname);
+  ASSERT_TRUE(me.good());
+  me.PutId(id);
+  me.PutIsUnsynced(true);
+}
+
+DirOpenResult SyncableDirectoryTest::SimulateSaveAndReloadDir() {
+  if (!dir_->SaveChanges())
+    return FAILED_IN_UNITTEST;
+
+  return ReloadDirImpl();
+}
+
+DirOpenResult SyncableDirectoryTest::SimulateCrashAndReloadDir() {
+  return ReloadDirImpl();
+}
+
+void SyncableDirectoryTest::GetAllMetaHandles(BaseTransaction* trans,
+                                              MetahandleSet* result) {
+  dir_->GetAllMetaHandles(trans, result);
+}
+
+void SyncableDirectoryTest::CheckPurgeEntriesWithTypeInSucceeded(
+    ModelTypeSet types_to_purge,
+    bool before_reload) {
+  SCOPED_TRACE(testing::Message("Before reload: ") << before_reload);
+  {
+    ReadTransaction trans(FROM_HERE, dir_.get());
+    MetahandleSet all_set;
+    dir_->GetAllMetaHandles(&trans, &all_set);
+    EXPECT_EQ(4U, all_set.size());
+    if (before_reload)
+      EXPECT_EQ(6U, dir_->kernel_->metahandles_to_purge.size());
+    for (MetahandleSet::iterator iter = all_set.begin(); iter != all_set.end();
+         ++iter) {
+      Entry e(&trans, GET_BY_HANDLE, *iter);
+      const ModelType local_type = e.GetModelType();
+      const ModelType server_type = e.GetServerModelType();
+
+      // Note the dance around incrementing |it|, since we sometimes erase().
+      if ((IsRealDataType(local_type) && types_to_purge.Has(local_type)) ||
+          (IsRealDataType(server_type) && types_to_purge.Has(server_type))) {
+        FAIL() << "Illegal type should have been deleted.";
+      }
+    }
+  }
+
+  for (ModelTypeSet::Iterator it = types_to_purge.First(); it.Good();
+       it.Inc()) {
+    EXPECT_FALSE(dir_->InitialSyncEndedForType(it.Get()));
+    sync_pb::DataTypeProgressMarker progress;
+    dir_->GetDownloadProgress(it.Get(), &progress);
+    EXPECT_EQ("", progress.token());
+
+    ReadTransaction trans(FROM_HERE, dir_.get());
+    sync_pb::DataTypeContext context;
+    dir_->GetDataTypeContext(&trans, it.Get(), &context);
+    EXPECT_TRUE(context.SerializeAsString().empty());
+  }
+  EXPECT_FALSE(types_to_purge.Has(BOOKMARKS));
+  EXPECT_TRUE(dir_->InitialSyncEndedForType(BOOKMARKS));
+}
+
+bool SyncableDirectoryTest::IsInDirtyMetahandles(int64 metahandle) {
+  return 1 == dir_->kernel_->dirty_metahandles.count(metahandle);
+}
+
+bool SyncableDirectoryTest::IsInMetahandlesToPurge(int64 metahandle) {
+  return 1 == dir_->kernel_->metahandles_to_purge.count(metahandle);
+}
+
+scoped_ptr<Directory>& SyncableDirectoryTest::dir() {
+  return dir_;
+}
+
+DirectoryChangeDelegate* SyncableDirectoryTest::directory_change_delegate() {
+  return &delegate_;
+}
+
+Encryptor* SyncableDirectoryTest::encryptor() {
+  return &encryptor_;
+}
+
+UnrecoverableErrorHandler*
+SyncableDirectoryTest::unrecoverable_error_handler() {
+  return &handler_;
+}
+
+void SyncableDirectoryTest::ValidateEntry(BaseTransaction* trans,
+                                          int64 id,
+                                          bool check_name,
+                                          const std::string& name,
+                                          int64 base_version,
+                                          int64 server_version,
+                                          bool is_del) {
+  Entry e(trans, GET_BY_ID, TestIdFactory::FromNumber(id));
+  ASSERT_TRUE(e.good());
+  if (check_name)
+    ASSERT_TRUE(name == e.GetNonUniqueName());
+  ASSERT_TRUE(base_version == e.GetBaseVersion());
+  ASSERT_TRUE(server_version == e.GetServerVersion());
+  ASSERT_TRUE(is_del == e.GetIsDel());
+}
+
+DirOpenResult SyncableDirectoryTest::ReloadDirImpl() {  // Do some tricky things
+                                                        // to preserve the
+                                                        // backing store.
+  DirectoryBackingStore* saved_store = dir_->store_.release();
+
+  // Close the current directory.
+  dir_->Close();
+  dir_.reset();
+
+  dir_.reset(new Directory(saved_store, &handler_, NULL, NULL, NULL));
+  DirOpenResult result =
+      dir_->OpenImpl(kDirectoryName, &delegate_, NullTransactionObserver());
+
+  // If something went wrong, we need to clear this member.  If we don't,
+  // TearDown() will be guaranteed to crash when it calls SaveChanges().
+  if (result != OPENED)
+    dir_.reset();
+
+  return result;
+}
+
+TEST_F(SyncableDirectoryTest, TakeSnapshotGetsMetahandlesToPurge) {
+  const int metas_to_create = 50;
+  MetahandleSet expected_purges;
+  MetahandleSet all_handles;
+  {
+    WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
+    for (int i = 0; i < metas_to_create; i++) {
+      MutableEntry e(&trans, CREATE, BOOKMARKS, trans.root_id(), "foo");
+      e.PutIsUnsynced(true);
+      sync_pb::EntitySpecifics specs;
+      if (i % 2 == 0) {
+        AddDefaultFieldValue(BOOKMARKS, &specs);
+        expected_purges.insert(e.GetMetahandle());
+        all_handles.insert(e.GetMetahandle());
+      } else {
+        AddDefaultFieldValue(PREFERENCES, &specs);
+        all_handles.insert(e.GetMetahandle());
+      }
+      e.PutSpecifics(specs);
+      e.PutServerSpecifics(specs);
+    }
+  }
+
+  ModelTypeSet to_purge(BOOKMARKS);
+  dir()->PurgeEntriesWithTypeIn(to_purge, ModelTypeSet(), ModelTypeSet());
+
+  Directory::SaveChangesSnapshot snapshot1;
+  base::AutoLock scoped_lock(dir()->kernel_->save_changes_mutex);
+  dir()->TakeSnapshotForSaveChanges(&snapshot1);
+  EXPECT_TRUE(expected_purges == snapshot1.metahandles_to_purge);
+
+  to_purge.Clear();
+  to_purge.Put(PREFERENCES);
+  dir()->PurgeEntriesWithTypeIn(to_purge, ModelTypeSet(), ModelTypeSet());
+
+  dir()->HandleSaveChangesFailure(snapshot1);
+
+  Directory::SaveChangesSnapshot snapshot2;
+  dir()->TakeSnapshotForSaveChanges(&snapshot2);
+  EXPECT_TRUE(all_handles == snapshot2.metahandles_to_purge);
+}
+
+TEST_F(SyncableDirectoryTest, TakeSnapshotGetsAllDirtyHandlesTest) {
+  const int metahandles_to_create = 100;
+  std::vector<int64> expected_dirty_metahandles;
+  {
+    WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
+    for (int i = 0; i < metahandles_to_create; i++) {
+      MutableEntry e(&trans, CREATE, BOOKMARKS, trans.root_id(), "foo");
+      expected_dirty_metahandles.push_back(e.GetMetahandle());
+      e.PutIsUnsynced(true);
+    }
+  }
+  // Fake SaveChanges() and make sure we got what we expected.
+  {
+    Directory::SaveChangesSnapshot snapshot;
+    base::AutoLock scoped_lock(dir()->kernel_->save_changes_mutex);
+    dir()->TakeSnapshotForSaveChanges(&snapshot);
+    // Make sure there's an entry for each new metahandle.  Make sure all
+    // entries are marked dirty.
+    ASSERT_EQ(expected_dirty_metahandles.size(), snapshot.dirty_metas.size());
+    for (EntryKernelSet::const_iterator i = snapshot.dirty_metas.begin();
+         i != snapshot.dirty_metas.end();
+         ++i) {
+      ASSERT_TRUE((*i)->is_dirty());
+    }
+    dir()->VacuumAfterSaveChanges(snapshot);
+  }
+  // Put a new value with existing transactions as well as adding new ones.
+  {
+    WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
+    std::vector<int64> new_dirty_metahandles;
+    for (std::vector<int64>::const_iterator i =
+             expected_dirty_metahandles.begin();
+         i != expected_dirty_metahandles.end();
+         ++i) {
+      // Change existing entries to directories to dirty them.
+      MutableEntry e1(&trans, GET_BY_HANDLE, *i);
+      e1.PutIsDir(true);
+      e1.PutIsUnsynced(true);
+      // Add new entries
+      MutableEntry e2(&trans, CREATE, BOOKMARKS, trans.root_id(), "bar");
+      e2.PutIsUnsynced(true);
+      new_dirty_metahandles.push_back(e2.GetMetahandle());
+    }
+    expected_dirty_metahandles.insert(expected_dirty_metahandles.end(),
+                                      new_dirty_metahandles.begin(),
+                                      new_dirty_metahandles.end());
+  }
+  // Fake SaveChanges() and make sure we got what we expected.
+  {
+    Directory::SaveChangesSnapshot snapshot;
+    base::AutoLock scoped_lock(dir()->kernel_->save_changes_mutex);
+    dir()->TakeSnapshotForSaveChanges(&snapshot);
+    // Make sure there's an entry for each new metahandle.  Make sure all
+    // entries are marked dirty.
+    EXPECT_EQ(expected_dirty_metahandles.size(), snapshot.dirty_metas.size());
+    for (EntryKernelSet::const_iterator i = snapshot.dirty_metas.begin();
+         i != snapshot.dirty_metas.end();
+         ++i) {
+      EXPECT_TRUE((*i)->is_dirty());
+    }
+    dir()->VacuumAfterSaveChanges(snapshot);
+  }
+}
+
+TEST_F(SyncableDirectoryTest, TakeSnapshotGetsOnlyDirtyHandlesTest) {
+  const int metahandles_to_create = 100;
+
+  // half of 2 * metahandles_to_create
+  const unsigned int number_changed = 100u;
+  std::vector<int64> expected_dirty_metahandles;
+  {
+    WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
+    for (int i = 0; i < metahandles_to_create; i++) {
+      MutableEntry e(&trans, CREATE, BOOKMARKS, trans.root_id(), "foo");
+      expected_dirty_metahandles.push_back(e.GetMetahandle());
+      e.PutIsUnsynced(true);
+    }
+  }
+  dir()->SaveChanges();
+  // Put a new value with existing transactions as well as adding new ones.
+  {
+    WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
+    std::vector<int64> new_dirty_metahandles;
+    for (std::vector<int64>::const_iterator i =
+             expected_dirty_metahandles.begin();
+         i != expected_dirty_metahandles.end();
+         ++i) {
+      // Change existing entries to directories to dirty them.
+      MutableEntry e1(&trans, GET_BY_HANDLE, *i);
+      ASSERT_TRUE(e1.good());
+      e1.PutIsDir(true);
+      e1.PutIsUnsynced(true);
+      // Add new entries
+      MutableEntry e2(&trans, CREATE, BOOKMARKS, trans.root_id(), "bar");
+      e2.PutIsUnsynced(true);
+      new_dirty_metahandles.push_back(e2.GetMetahandle());
+    }
+    expected_dirty_metahandles.insert(expected_dirty_metahandles.end(),
+                                      new_dirty_metahandles.begin(),
+                                      new_dirty_metahandles.end());
+  }
+  dir()->SaveChanges();
+  // Don't make any changes whatsoever and ensure nothing comes back.
+  {
+    WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
+    for (std::vector<int64>::const_iterator i =
+             expected_dirty_metahandles.begin();
+         i != expected_dirty_metahandles.end();
+         ++i) {
+      MutableEntry e(&trans, GET_BY_HANDLE, *i);
+      ASSERT_TRUE(e.good());
+      // We aren't doing anything to dirty these entries.
+    }
+  }
+  // Fake SaveChanges() and make sure we got what we expected.
+  {
+    Directory::SaveChangesSnapshot snapshot;
+    base::AutoLock scoped_lock(dir()->kernel_->save_changes_mutex);
+    dir()->TakeSnapshotForSaveChanges(&snapshot);
+    // Make sure there are no dirty_metahandles.
+    EXPECT_EQ(0u, snapshot.dirty_metas.size());
+    dir()->VacuumAfterSaveChanges(snapshot);
+  }
+  {
+    WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
+    bool should_change = false;
+    for (std::vector<int64>::const_iterator i =
+             expected_dirty_metahandles.begin();
+         i != expected_dirty_metahandles.end();
+         ++i) {
+      // Maybe change entries by flipping IS_DIR.
+      MutableEntry e(&trans, GET_BY_HANDLE, *i);
+      ASSERT_TRUE(e.good());
+      should_change = !should_change;
+      if (should_change) {
+        bool not_dir = !e.GetIsDir();
+        e.PutIsDir(not_dir);
+        e.PutIsUnsynced(true);
+      }
+    }
+  }
+  // Fake SaveChanges() and make sure we got what we expected.
+  {
+    Directory::SaveChangesSnapshot snapshot;
+    base::AutoLock scoped_lock(dir()->kernel_->save_changes_mutex);
+    dir()->TakeSnapshotForSaveChanges(&snapshot);
+    // Make sure there's an entry for each changed metahandle.  Make sure all
+    // entries are marked dirty.
+    EXPECT_EQ(number_changed, snapshot.dirty_metas.size());
+    for (EntryKernelSet::const_iterator i = snapshot.dirty_metas.begin();
+         i != snapshot.dirty_metas.end();
+         ++i) {
+      EXPECT_TRUE((*i)->is_dirty());
+    }
+    dir()->VacuumAfterSaveChanges(snapshot);
+  }
+}
+
+// Test delete journals management.
+TEST_F(SyncableDirectoryTest, ManageDeleteJournals) {
+  sync_pb::EntitySpecifics bookmark_specifics;
+  AddDefaultFieldValue(BOOKMARKS, &bookmark_specifics);
+  bookmark_specifics.mutable_bookmark()->set_url("url");
+
+  Id id1 = TestIdFactory::FromNumber(-1);
+  Id id2 = TestIdFactory::FromNumber(-2);
+  int64 handle1 = 0;
+  int64 handle2 = 0;
+  {
+    // Create two bookmark entries and save in database.
+    CreateEntry("item1", id1);
+    CreateEntry("item2", id2);
+    {
+      WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
+      MutableEntry item1(&trans, GET_BY_ID, id1);
+      ASSERT_TRUE(item1.good());
+      handle1 = item1.GetMetahandle();
+      item1.PutSpecifics(bookmark_specifics);
+      item1.PutServerSpecifics(bookmark_specifics);
+      MutableEntry item2(&trans, GET_BY_ID, id2);
+      ASSERT_TRUE(item2.good());
+      handle2 = item2.GetMetahandle();
+      item2.PutSpecifics(bookmark_specifics);
+      item2.PutServerSpecifics(bookmark_specifics);
+    }
+    ASSERT_EQ(OPENED, SimulateSaveAndReloadDir());
+  }
+
+  {  // Test adding and saving delete journals.
+    DeleteJournal* delete_journal = dir()->delete_journal();
+    {
+      WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
+      EntryKernelSet journal_entries;
+      delete_journal->GetDeleteJournals(&trans, BOOKMARKS, &journal_entries);
+      ASSERT_EQ(0u, journal_entries.size());
+
+      // Set SERVER_IS_DEL of the entries to true and they should be added to
+      // delete journals.
+      MutableEntry item1(&trans, GET_BY_ID, id1);
+      ASSERT_TRUE(item1.good());
+      item1.PutServerIsDel(true);
+      MutableEntry item2(&trans, GET_BY_ID, id2);
+      ASSERT_TRUE(item2.good());
+      item2.PutServerIsDel(true);
+      EntryKernel tmp;
+      tmp.put(ID, id1);
+      EXPECT_TRUE(delete_journal->delete_journals_.count(&tmp));
+      tmp.put(ID, id2);
+      EXPECT_TRUE(delete_journal->delete_journals_.count(&tmp));
+    }
+
+    // Save delete journals in database and verify memory clearing.
+    ASSERT_TRUE(dir()->SaveChanges());
+    {
+      ReadTransaction trans(FROM_HERE, dir().get());
+      EXPECT_EQ(0u, delete_journal->GetDeleteJournalSize(&trans));
+    }
+    ASSERT_EQ(OPENED, SimulateSaveAndReloadDir());
+  }
+
+  {
+    {
+      // Test reading delete journals from database.
+      WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
+      DeleteJournal* delete_journal = dir()->delete_journal();
+      EntryKernelSet journal_entries;
+      delete_journal->GetDeleteJournals(&trans, BOOKMARKS, &journal_entries);
+      ASSERT_EQ(2u, journal_entries.size());
+      EntryKernel tmp;
+      tmp.put(META_HANDLE, handle1);
+      EXPECT_TRUE(journal_entries.count(&tmp));
+      tmp.put(META_HANDLE, handle2);
+      EXPECT_TRUE(journal_entries.count(&tmp));
+
+      // Purge item2.
+      MetahandleSet to_purge;
+      to_purge.insert(handle2);
+      delete_journal->PurgeDeleteJournals(&trans, to_purge);
+
+      // Verify that item2 is purged from journals in memory and will be
+      // purged from database.
+      tmp.put(ID, id2);
+      EXPECT_FALSE(delete_journal->delete_journals_.count(&tmp));
+      EXPECT_EQ(1u, delete_journal->delete_journals_to_purge_.size());
+      EXPECT_TRUE(delete_journal->delete_journals_to_purge_.count(handle2));
+    }
+    ASSERT_EQ(OPENED, SimulateSaveAndReloadDir());
+  }
+
+  {
+    {
+      // Verify purged entry is gone in database.
+      WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
+      DeleteJournal* delete_journal = dir()->delete_journal();
+      EntryKernelSet journal_entries;
+      delete_journal->GetDeleteJournals(&trans, BOOKMARKS, &journal_entries);
+      ASSERT_EQ(1u, journal_entries.size());
+      EntryKernel tmp;
+      tmp.put(ID, id1);
+      tmp.put(META_HANDLE, handle1);
+      EXPECT_TRUE(journal_entries.count(&tmp));
+
+      // Undelete item1.
+      MutableEntry item1(&trans, GET_BY_ID, id1);
+      ASSERT_TRUE(item1.good());
+      item1.PutServerIsDel(false);
+      EXPECT_TRUE(delete_journal->delete_journals_.empty());
+      EXPECT_EQ(1u, delete_journal->delete_journals_to_purge_.size());
+      EXPECT_TRUE(delete_journal->delete_journals_to_purge_.count(handle1));
+    }
+    ASSERT_EQ(OPENED, SimulateSaveAndReloadDir());
+  }
+
+  {
+    // Verify undeleted entry is gone from database.
+    ReadTransaction trans(FROM_HERE, dir().get());
+    DeleteJournal* delete_journal = dir()->delete_journal();
+    ASSERT_EQ(0u, delete_journal->GetDeleteJournalSize(&trans));
+  }
+}
+
+TEST_F(SyncableDirectoryTest, TestBasicLookupNonExistantID) {
+  ReadTransaction rtrans(FROM_HERE, dir().get());
+  Entry e(&rtrans, GET_BY_ID, TestIdFactory::FromNumber(-99));
+  ASSERT_FALSE(e.good());
+}
+
+TEST_F(SyncableDirectoryTest, TestBasicLookupValidID) {
+  CreateEntry("rtc");
+  ReadTransaction rtrans(FROM_HERE, dir().get());
+  Entry e(&rtrans, GET_BY_ID, TestIdFactory::FromNumber(-99));
+  ASSERT_TRUE(e.good());
+}
+
+TEST_F(SyncableDirectoryTest, TestDelete) {
+  std::string name = "peanut butter jelly time";
+  WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
+  MutableEntry e1(&trans, CREATE, BOOKMARKS, trans.root_id(), name);
+  ASSERT_TRUE(e1.good());
+  e1.PutIsDel(true);
+  MutableEntry e2(&trans, CREATE, BOOKMARKS, trans.root_id(), name);
+  ASSERT_TRUE(e2.good());
+  e2.PutIsDel(true);
+  MutableEntry e3(&trans, CREATE, BOOKMARKS, trans.root_id(), name);
+  ASSERT_TRUE(e3.good());
+  e3.PutIsDel(true);
+
+  e1.PutIsDel(false);
+  e2.PutIsDel(false);
+  e3.PutIsDel(false);
+
+  e1.PutIsDel(true);
+  e2.PutIsDel(true);
+  e3.PutIsDel(true);
+}
+
+TEST_F(SyncableDirectoryTest, TestGetUnsynced) {
+  Directory::Metahandles handles;
+  int64 handle1, handle2;
+  {
+    WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
+
+    dir()->GetUnsyncedMetaHandles(&trans, &handles);
+    ASSERT_TRUE(0 == handles.size());
+
+    MutableEntry e1(&trans, CREATE, BOOKMARKS, trans.root_id(), "abba");
+    ASSERT_TRUE(e1.good());
+    handle1 = e1.GetMetahandle();
+    e1.PutBaseVersion(1);
+    e1.PutIsDir(true);
+    e1.PutId(TestIdFactory::FromNumber(101));
+
+    MutableEntry e2(&trans, CREATE, BOOKMARKS, e1.GetId(), "bread");
+    ASSERT_TRUE(e2.good());
+    handle2 = e2.GetMetahandle();
+    e2.PutBaseVersion(1);
+    e2.PutId(TestIdFactory::FromNumber(102));
+  }
+  dir()->SaveChanges();
+  {
+    WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
+
+    dir()->GetUnsyncedMetaHandles(&trans, &handles);
+    ASSERT_TRUE(0 == handles.size());
+
+    MutableEntry e3(&trans, GET_BY_HANDLE, handle1);
+    ASSERT_TRUE(e3.good());
+    e3.PutIsUnsynced(true);
+  }
+  dir()->SaveChanges();
+  {
+    WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
+    dir()->GetUnsyncedMetaHandles(&trans, &handles);
+    ASSERT_TRUE(1 == handles.size());
+    ASSERT_TRUE(handle1 == handles[0]);
+
+    MutableEntry e4(&trans, GET_BY_HANDLE, handle2);
+    ASSERT_TRUE(e4.good());
+    e4.PutIsUnsynced(true);
+  }
+  dir()->SaveChanges();
+  {
+    WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
+    dir()->GetUnsyncedMetaHandles(&trans, &handles);
+    ASSERT_TRUE(2 == handles.size());
+    if (handle1 == handles[0]) {
+      ASSERT_TRUE(handle2 == handles[1]);
+    } else {
+      ASSERT_TRUE(handle2 == handles[0]);
+      ASSERT_TRUE(handle1 == handles[1]);
+    }
+
+    MutableEntry e5(&trans, GET_BY_HANDLE, handle1);
+    ASSERT_TRUE(e5.good());
+    ASSERT_TRUE(e5.GetIsUnsynced());
+    ASSERT_TRUE(e5.PutIsUnsynced(false));
+    ASSERT_FALSE(e5.GetIsUnsynced());
+  }
+  dir()->SaveChanges();
+  {
+    WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
+    dir()->GetUnsyncedMetaHandles(&trans, &handles);
+    ASSERT_TRUE(1 == handles.size());
+    ASSERT_TRUE(handle2 == handles[0]);
+  }
+}
+
+TEST_F(SyncableDirectoryTest, TestGetUnappliedUpdates) {
+  std::vector<int64> handles;
+  int64 handle1, handle2;
+  const FullModelTypeSet all_types = FullModelTypeSet::All();
+  {
+    WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
+
+    dir()->GetUnappliedUpdateMetaHandles(&trans, all_types, &handles);
+    ASSERT_TRUE(0 == handles.size());
+
+    MutableEntry e1(&trans, CREATE, BOOKMARKS, trans.root_id(), "abba");
+    ASSERT_TRUE(e1.good());
+    handle1 = e1.GetMetahandle();
+    e1.PutIsUnappliedUpdate(false);
+    e1.PutBaseVersion(1);
+    e1.PutId(TestIdFactory::FromNumber(101));
+    e1.PutIsDir(true);
+
+    MutableEntry e2(&trans, CREATE, BOOKMARKS, e1.GetId(), "bread");
+    ASSERT_TRUE(e2.good());
+    handle2 = e2.GetMetahandle();
+    e2.PutIsUnappliedUpdate(false);
+    e2.PutBaseVersion(1);
+    e2.PutId(TestIdFactory::FromNumber(102));
+  }
+  dir()->SaveChanges();
+  {
+    WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
+
+    dir()->GetUnappliedUpdateMetaHandles(&trans, all_types, &handles);
+    ASSERT_TRUE(0 == handles.size());
+
+    MutableEntry e3(&trans, GET_BY_HANDLE, handle1);
+    ASSERT_TRUE(e3.good());
+    e3.PutIsUnappliedUpdate(true);
+  }
+  dir()->SaveChanges();
+  {
+    WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
+    dir()->GetUnappliedUpdateMetaHandles(&trans, all_types, &handles);
+    ASSERT_TRUE(1 == handles.size());
+    ASSERT_TRUE(handle1 == handles[0]);
+
+    MutableEntry e4(&trans, GET_BY_HANDLE, handle2);
+    ASSERT_TRUE(e4.good());
+    e4.PutIsUnappliedUpdate(true);
+  }
+  dir()->SaveChanges();
+  {
+    WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
+    dir()->GetUnappliedUpdateMetaHandles(&trans, all_types, &handles);
+    ASSERT_TRUE(2 == handles.size());
+    if (handle1 == handles[0]) {
+      ASSERT_TRUE(handle2 == handles[1]);
+    } else {
+      ASSERT_TRUE(handle2 == handles[0]);
+      ASSERT_TRUE(handle1 == handles[1]);
+    }
+
+    MutableEntry e5(&trans, GET_BY_HANDLE, handle1);
+    ASSERT_TRUE(e5.good());
+    e5.PutIsUnappliedUpdate(false);
+  }
+  dir()->SaveChanges();
+  {
+    WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
+    dir()->GetUnappliedUpdateMetaHandles(&trans, all_types, &handles);
+    ASSERT_TRUE(1 == handles.size());
+    ASSERT_TRUE(handle2 == handles[0]);
+  }
+}
+
+TEST_F(SyncableDirectoryTest, DeleteBug_531383) {
+  // Try to evoke a check failure...
+  TestIdFactory id_factory;
+  int64 grandchild_handle;
+  {
+    WriteTransaction wtrans(FROM_HERE, UNITTEST, dir().get());
+    MutableEntry parent(&wtrans, CREATE, BOOKMARKS, id_factory.root(), "Bob");
+    ASSERT_TRUE(parent.good());
+    parent.PutIsDir(true);
+    parent.PutId(id_factory.NewServerId());
+    parent.PutBaseVersion(1);
+    MutableEntry child(&wtrans, CREATE, BOOKMARKS, parent.GetId(), "Bob");
+    ASSERT_TRUE(child.good());
+    child.PutIsDir(true);
+    child.PutId(id_factory.NewServerId());
+    child.PutBaseVersion(1);
+    MutableEntry grandchild(&wtrans, CREATE, BOOKMARKS, child.GetId(), "Bob");
+    ASSERT_TRUE(grandchild.good());
+    grandchild.PutId(id_factory.NewServerId());
+    grandchild.PutBaseVersion(1);
+    grandchild.PutIsDel(true);
+    MutableEntry twin(&wtrans, CREATE, BOOKMARKS, child.GetId(), "Bob");
+    ASSERT_TRUE(twin.good());
+    twin.PutIsDel(true);
+    grandchild.PutIsDel(false);
+
+    grandchild_handle = grandchild.GetMetahandle();
+  }
+  dir()->SaveChanges();
+  {
+    WriteTransaction wtrans(FROM_HERE, UNITTEST, dir().get());
+    MutableEntry grandchild(&wtrans, GET_BY_HANDLE, grandchild_handle);
+    grandchild.PutIsDel(true);  // Used to CHECK fail here.
+  }
+}
+
+TEST_F(SyncableDirectoryTest, TestIsLegalNewParent) {
+  TestIdFactory id_factory;
+  WriteTransaction wtrans(FROM_HERE, UNITTEST, dir().get());
+  Entry root(&wtrans, GET_BY_ID, id_factory.root());
+  ASSERT_TRUE(root.good());
+  MutableEntry parent(&wtrans, CREATE, BOOKMARKS, root.GetId(), "Bob");
+  ASSERT_TRUE(parent.good());
+  parent.PutIsDir(true);
+  parent.PutId(id_factory.NewServerId());
+  parent.PutBaseVersion(1);
+  MutableEntry child(&wtrans, CREATE, BOOKMARKS, parent.GetId(), "Bob");
+  ASSERT_TRUE(child.good());
+  child.PutIsDir(true);
+  child.PutId(id_factory.NewServerId());
+  child.PutBaseVersion(1);
+  MutableEntry grandchild(&wtrans, CREATE, BOOKMARKS, child.GetId(), "Bob");
+  ASSERT_TRUE(grandchild.good());
+  grandchild.PutId(id_factory.NewServerId());
+  grandchild.PutBaseVersion(1);
+
+  MutableEntry parent2(&wtrans, CREATE, BOOKMARKS, root.GetId(), "Pete");
+  ASSERT_TRUE(parent2.good());
+  parent2.PutIsDir(true);
+  parent2.PutId(id_factory.NewServerId());
+  parent2.PutBaseVersion(1);
+  MutableEntry child2(&wtrans, CREATE, BOOKMARKS, parent2.GetId(), "Pete");
+  ASSERT_TRUE(child2.good());
+  child2.PutIsDir(true);
+  child2.PutId(id_factory.NewServerId());
+  child2.PutBaseVersion(1);
+  MutableEntry grandchild2(&wtrans, CREATE, BOOKMARKS, child2.GetId(), "Pete");
+  ASSERT_TRUE(grandchild2.good());
+  grandchild2.PutId(id_factory.NewServerId());
+  grandchild2.PutBaseVersion(1);
+  // resulting tree
+  //           root
+  //           /  |
+  //     parent    parent2
+  //          |    |
+  //      child    child2
+  //          |    |
+  // grandchild    grandchild2
+  ASSERT_TRUE(IsLegalNewParent(child, root));
+  ASSERT_TRUE(IsLegalNewParent(child, parent));
+  ASSERT_FALSE(IsLegalNewParent(child, child));
+  ASSERT_FALSE(IsLegalNewParent(child, grandchild));
+  ASSERT_TRUE(IsLegalNewParent(child, parent2));
+  ASSERT_TRUE(IsLegalNewParent(child, grandchild2));
+  ASSERT_FALSE(IsLegalNewParent(parent, grandchild));
+  ASSERT_FALSE(IsLegalNewParent(root, grandchild));
+  ASSERT_FALSE(IsLegalNewParent(parent, grandchild));
+}
+
+TEST_F(SyncableDirectoryTest, TestEntryIsInFolder) {
+  // Create a subdir and an entry.
+  int64 entry_handle;
+  syncable::Id folder_id;
+  syncable::Id entry_id;
+  std::string entry_name = "entry";
+
+  {
+    WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
+    MutableEntry folder(&trans, CREATE, BOOKMARKS, trans.root_id(), "folder");
+    ASSERT_TRUE(folder.good());
+    folder.PutIsDir(true);
+    EXPECT_TRUE(folder.PutIsUnsynced(true));
+    folder_id = folder.GetId();
+
+    MutableEntry entry(&trans, CREATE, BOOKMARKS, folder.GetId(), entry_name);
+    ASSERT_TRUE(entry.good());
+    entry_handle = entry.GetMetahandle();
+    entry.PutIsUnsynced(true);
+    entry_id = entry.GetId();
+  }
+
+  // Make sure we can find the entry in the folder.
+  {
+    ReadTransaction trans(FROM_HERE, dir().get());
+    EXPECT_EQ(0, CountEntriesWithName(&trans, trans.root_id(), entry_name));
+    EXPECT_EQ(1, CountEntriesWithName(&trans, folder_id, entry_name));
+
+    Entry entry(&trans, GET_BY_ID, entry_id);
+    ASSERT_TRUE(entry.good());
+    EXPECT_EQ(entry_handle, entry.GetMetahandle());
+    EXPECT_TRUE(entry.GetNonUniqueName() == entry_name);
+    EXPECT_TRUE(entry.GetParentId() == folder_id);
+  }
+}
+
+TEST_F(SyncableDirectoryTest, TestParentIdIndexUpdate) {
+  std::string child_name = "child";
+
+  WriteTransaction wt(FROM_HERE, UNITTEST, dir().get());
+  MutableEntry parent_folder(&wt, CREATE, BOOKMARKS, wt.root_id(), "folder1");
+  parent_folder.PutIsUnsynced(true);
+  parent_folder.PutIsDir(true);
+
+  MutableEntry parent_folder2(&wt, CREATE, BOOKMARKS, wt.root_id(), "folder2");
+  parent_folder2.PutIsUnsynced(true);
+  parent_folder2.PutIsDir(true);
+
+  MutableEntry child(&wt, CREATE, BOOKMARKS, parent_folder.GetId(), child_name);
+  child.PutIsDir(true);
+  child.PutIsUnsynced(true);
+
+  ASSERT_TRUE(child.good());
+
+  EXPECT_EQ(0, CountEntriesWithName(&wt, wt.root_id(), child_name));
+  EXPECT_EQ(parent_folder.GetId(), child.GetParentId());
+  EXPECT_EQ(1, CountEntriesWithName(&wt, parent_folder.GetId(), child_name));
+  EXPECT_EQ(0, CountEntriesWithName(&wt, parent_folder2.GetId(), child_name));
+  child.PutParentId(parent_folder2.GetId());
+  EXPECT_EQ(parent_folder2.GetId(), child.GetParentId());
+  EXPECT_EQ(0, CountEntriesWithName(&wt, parent_folder.GetId(), child_name));
+  EXPECT_EQ(1, CountEntriesWithName(&wt, parent_folder2.GetId(), child_name));
+}
+
+TEST_F(SyncableDirectoryTest, TestNoReindexDeletedItems) {
+  std::string folder_name = "folder";
+  std::string new_name = "new_name";
+
+  WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
+  MutableEntry folder(&trans, CREATE, BOOKMARKS, trans.root_id(), folder_name);
+  ASSERT_TRUE(folder.good());
+  folder.PutIsDir(true);
+  folder.PutIsDel(true);
+
+  EXPECT_EQ(0, CountEntriesWithName(&trans, trans.root_id(), folder_name));
+
+  MutableEntry deleted(&trans, GET_BY_ID, folder.GetId());
+  ASSERT_TRUE(deleted.good());
+  deleted.PutParentId(trans.root_id());
+  deleted.PutNonUniqueName(new_name);
+
+  EXPECT_EQ(0, CountEntriesWithName(&trans, trans.root_id(), folder_name));
+  EXPECT_EQ(0, CountEntriesWithName(&trans, trans.root_id(), new_name));
+}
+
+TEST_F(SyncableDirectoryTest, TestCaseChangeRename) {
+  WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
+  MutableEntry folder(&trans, CREATE, BOOKMARKS, trans.root_id(), "CaseChange");
+  ASSERT_TRUE(folder.good());
+  folder.PutParentId(trans.root_id());
+  folder.PutNonUniqueName("CASECHANGE");
+  folder.PutIsDel(true);
+}
+
+// Create items of each model type, and check that GetModelType and
+// GetServerModelType return the right value.
+TEST_F(SyncableDirectoryTest, GetModelType) {
+  TestIdFactory id_factory;
+  ModelTypeSet protocol_types = ProtocolTypes();
+  for (ModelTypeSet::Iterator iter = protocol_types.First(); iter.Good();
+       iter.Inc()) {
+    ModelType datatype = iter.Get();
+    SCOPED_TRACE(testing::Message("Testing model type ") << datatype);
+    switch (datatype) {
+      case UNSPECIFIED:
+      case TOP_LEVEL_FOLDER:
+        continue;  // Datatype isn't a function of Specifics.
+      default:
+        break;
+    }
+    sync_pb::EntitySpecifics specifics;
+    AddDefaultFieldValue(datatype, &specifics);
+
+    WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
+
+    MutableEntry folder(&trans, CREATE, BOOKMARKS, trans.root_id(), "Folder");
+    ASSERT_TRUE(folder.good());
+    folder.PutId(id_factory.NewServerId());
+    folder.PutSpecifics(specifics);
+    folder.PutBaseVersion(1);
+    folder.PutIsDir(true);
+    folder.PutIsDel(false);
+    ASSERT_EQ(datatype, folder.GetModelType());
+
+    MutableEntry item(&trans, CREATE, BOOKMARKS, trans.root_id(), "Item");
+    ASSERT_TRUE(item.good());
+    item.PutId(id_factory.NewServerId());
+    item.PutSpecifics(specifics);
+    item.PutBaseVersion(1);
+    item.PutIsDir(false);
+    item.PutIsDel(false);
+    ASSERT_EQ(datatype, item.GetModelType());
+
+    // It's critical that deletion records retain their datatype, so that
+    // they can be dispatched to the appropriate change processor.
+    MutableEntry deleted_item(
+        &trans, CREATE, BOOKMARKS, trans.root_id(), "Deleted Item");
+    ASSERT_TRUE(item.good());
+    deleted_item.PutId(id_factory.NewServerId());
+    deleted_item.PutSpecifics(specifics);
+    deleted_item.PutBaseVersion(1);
+    deleted_item.PutIsDir(false);
+    deleted_item.PutIsDel(true);
+    ASSERT_EQ(datatype, deleted_item.GetModelType());
+
+    MutableEntry server_folder(
+        &trans, CREATE_NEW_UPDATE_ITEM, id_factory.NewServerId());
+    ASSERT_TRUE(server_folder.good());
+    server_folder.PutServerSpecifics(specifics);
+    server_folder.PutBaseVersion(1);
+    server_folder.PutServerIsDir(true);
+    server_folder.PutServerIsDel(false);
+    ASSERT_EQ(datatype, server_folder.GetServerModelType());
+
+    MutableEntry server_item(
+        &trans, CREATE_NEW_UPDATE_ITEM, id_factory.NewServerId());
+    ASSERT_TRUE(server_item.good());
+    server_item.PutServerSpecifics(specifics);
+    server_item.PutBaseVersion(1);
+    server_item.PutServerIsDir(false);
+    server_item.PutServerIsDel(false);
+    ASSERT_EQ(datatype, server_item.GetServerModelType());
+
+    sync_pb::SyncEntity folder_entity;
+    folder_entity.set_id_string(SyncableIdToProto(id_factory.NewServerId()));
+    folder_entity.set_deleted(false);
+    folder_entity.set_folder(true);
+    folder_entity.mutable_specifics()->CopyFrom(specifics);
+    ASSERT_EQ(datatype, GetModelType(folder_entity));
+
+    sync_pb::SyncEntity item_entity;
+    item_entity.set_id_string(SyncableIdToProto(id_factory.NewServerId()));
+    item_entity.set_deleted(false);
+    item_entity.set_folder(false);
+    item_entity.mutable_specifics()->CopyFrom(specifics);
+    ASSERT_EQ(datatype, GetModelType(item_entity));
+  }
+}
+
+// A test that roughly mimics the directory interaction that occurs when a
+// bookmark folder and entry are created then synced for the first time.  It is
+// a more common variant of the 'DeletedAndUnsyncedChild' scenario tested below.
+TEST_F(SyncableDirectoryTest, ChangeEntryIDAndUpdateChildren_ParentAndChild) {
+  TestIdFactory id_factory;
+  Id orig_parent_id;
+  Id orig_child_id;
+
+  {
+    // Create two client-side items, a parent and child.
+    WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
+
+    MutableEntry parent(&trans, CREATE, BOOKMARKS, id_factory.root(), "parent");
+    parent.PutIsDir(true);
+    parent.PutIsUnsynced(true);
+
+    MutableEntry child(&trans, CREATE, BOOKMARKS, parent.GetId(), "child");
+    child.PutIsUnsynced(true);
+
+    orig_parent_id = parent.GetId();
+    orig_child_id = child.GetId();
+  }
+
+  {
+    // Simulate what happens after committing two items.  Their IDs will be
+    // replaced with server IDs.  The child is renamed first, then the parent.
+    WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
+
+    MutableEntry parent(&trans, GET_BY_ID, orig_parent_id);
+    MutableEntry child(&trans, GET_BY_ID, orig_child_id);
+
+    ChangeEntryIDAndUpdateChildren(&trans, &child, id_factory.NewServerId());
+    child.PutIsUnsynced(false);
+    child.PutBaseVersion(1);
+    child.PutServerVersion(1);
+
+    ChangeEntryIDAndUpdateChildren(&trans, &parent, id_factory.NewServerId());
+    parent.PutIsUnsynced(false);
+    parent.PutBaseVersion(1);
+    parent.PutServerVersion(1);
+  }
+
+  // Final check for validity.
+  EXPECT_EQ(OPENED, SimulateSaveAndReloadDir());
+}
+
+// A test based on the scenario where we create a bookmark folder and entry
+// locally, but with a twist.  In this case, the bookmark is deleted before we
+// are able to sync either it or its parent folder.  This scenario used to cause
+// directory corruption, see crbug.com/125381.
+TEST_F(SyncableDirectoryTest,
+       ChangeEntryIDAndUpdateChildren_DeletedAndUnsyncedChild) {
+  TestIdFactory id_factory;
+  Id orig_parent_id;
+  Id orig_child_id;
+
+  {
+    // Create two client-side items, a parent and child.
+    WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
+
+    MutableEntry parent(&trans, CREATE, BOOKMARKS, id_factory.root(), "parent");
+    parent.PutIsDir(true);
+    parent.PutIsUnsynced(true);
+
+    MutableEntry child(&trans, CREATE, BOOKMARKS, parent.GetId(), "child");
+    child.PutIsUnsynced(true);
+
+    orig_parent_id = parent.GetId();
+    orig_child_id = child.GetId();
+  }
+
+  {
+    // Delete the child.
+    WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
+
+    MutableEntry child(&trans, GET_BY_ID, orig_child_id);
+    child.PutIsDel(true);
+  }
+
+  {
+    // Simulate what happens after committing the parent.  Its ID will be
+    // replaced with server a ID.
+    WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
+
+    MutableEntry parent(&trans, GET_BY_ID, orig_parent_id);
+
+    ChangeEntryIDAndUpdateChildren(&trans, &parent, id_factory.NewServerId());
+    parent.PutIsUnsynced(false);
+    parent.PutBaseVersion(1);
+    parent.PutServerVersion(1);
+  }
+
+  // Final check for validity.
+  EXPECT_EQ(OPENED, SimulateSaveAndReloadDir());
+}
+
+// Ask the directory to generate a unique ID.  Close and re-open the database
+// without saving, then ask for another unique ID.  Verify IDs are not reused.
+// This scenario simulates a crash within the first few seconds of operation.
+TEST_F(SyncableDirectoryTest, LocalIdReuseTest) {
+  Id pre_crash_id = dir()->NextId();
+  SimulateCrashAndReloadDir();
+  Id post_crash_id = dir()->NextId();
+  EXPECT_NE(pre_crash_id, post_crash_id);
+}
+
+// Ask the directory to generate a unique ID.  Save the directory.  Close and
+// re-open the database without saving, then ask for another unique ID.  Verify
+// IDs are not reused.  This scenario simulates a steady-state crash.
+TEST_F(SyncableDirectoryTest, LocalIdReuseTestWithSave) {
+  Id pre_crash_id = dir()->NextId();
+  dir()->SaveChanges();
+  SimulateCrashAndReloadDir();
+  Id post_crash_id = dir()->NextId();
+  EXPECT_NE(pre_crash_id, post_crash_id);
+}
+
+// Ensure that the unsynced, is_del and server unkown entries that may have been
+// left in the database by old clients will be deleted when we open the old
+// database.
+TEST_F(SyncableDirectoryTest, OldClientLeftUnsyncedDeletedLocalItem) {
+  // We must create an entry with the offending properties.  This is done with
+  // some abuse of the MutableEntry's API; it doesn't expect us to modify an
+  // item after it is deleted.  If this hack becomes impractical we will need to
+  // find a new way to simulate this scenario.
+
+  TestIdFactory id_factory;
+
+  // Happy-path: These valid entries should not get deleted.
+  Id server_knows_id = id_factory.NewServerId();
+  Id not_is_del_id = id_factory.NewLocalId();
+
+  // The ID of the entry which will be unsynced, is_del and !ServerKnows().
+  Id zombie_id = id_factory.NewLocalId();
+
+  // We're about to do some bad things.  Tell the directory verification
+  // routines to look the other way.
+  dir()->SetInvariantCheckLevel(OFF);
+
+  {
+    WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
+
+    // Create an uncommitted tombstone entry.
+    MutableEntry server_knows(
+        &trans, CREATE, BOOKMARKS, id_factory.root(), "server_knows");
+    server_knows.PutId(server_knows_id);
+    server_knows.PutIsUnsynced(true);
+    server_knows.PutIsDel(true);
+    server_knows.PutBaseVersion(5);
+    server_knows.PutServerVersion(4);
+
+    // Create a valid update entry.
+    MutableEntry not_is_del(
+        &trans, CREATE, BOOKMARKS, id_factory.root(), "not_is_del");
+    not_is_del.PutId(not_is_del_id);
+    not_is_del.PutIsDel(false);
+    not_is_del.PutIsUnsynced(true);
+
+    // Create a tombstone which should never be sent to the server because the
+    // server never knew about the item's existence.
+    //
+    // New clients should never put entries into this state.  We work around
+    // this by setting IS_DEL before setting IS_UNSYNCED, something which the
+    // client should never do in practice.
+    MutableEntry zombie(&trans, CREATE, BOOKMARKS, id_factory.root(), "zombie");
+    zombie.PutId(zombie_id);
+    zombie.PutIsDel(true);
+    zombie.PutIsUnsynced(true);
+  }
+
+  ASSERT_EQ(OPENED, SimulateSaveAndReloadDir());
+
+  {
+    ReadTransaction trans(FROM_HERE, dir().get());
+
+    // The directory loading routines should have cleaned things up, making it
+    // safe to check invariants once again.
+    dir()->FullyCheckTreeInvariants(&trans);
+
+    Entry server_knows(&trans, GET_BY_ID, server_knows_id);
+    EXPECT_TRUE(server_knows.good());
+
+    Entry not_is_del(&trans, GET_BY_ID, not_is_del_id);
+    EXPECT_TRUE(not_is_del.good());
+
+    Entry zombie(&trans, GET_BY_ID, zombie_id);
+    EXPECT_FALSE(zombie.good());
+  }
+}
+
+TEST_F(SyncableDirectoryTest, PositionWithNullSurvivesSaveAndReload) {
+  TestIdFactory id_factory;
+  Id null_child_id;
+  const char null_cstr[] = "\0null\0test";
+  std::string null_str(null_cstr, arraysize(null_cstr) - 1);
+  // Pad up to the minimum length with 0x7f characters, then add a string that
+  // contains a few NULLs to the end.  This is slightly wrong, since the suffix
+  // part of a UniquePosition shouldn't contain NULLs, but it's good enough for
+  // this test.
+  std::string suffix =
+      std::string(UniquePosition::kSuffixLength - null_str.length(), '\x7f') +
+      null_str;
+  UniquePosition null_pos = UniquePosition::FromInt64(10, suffix);
+
+  {
+    WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
+
+    MutableEntry parent(&trans, CREATE, BOOKMARKS, id_factory.root(), "parent");
+    parent.PutIsDir(true);
+    parent.PutIsUnsynced(true);
+
+    MutableEntry child(&trans, CREATE, BOOKMARKS, parent.GetId(), "child");
+    child.PutIsUnsynced(true);
+    child.PutUniquePosition(null_pos);
+    child.PutServerUniquePosition(null_pos);
+
+    null_child_id = child.GetId();
+  }
+
+  EXPECT_EQ(OPENED, SimulateSaveAndReloadDir());
+
+  {
+    ReadTransaction trans(FROM_HERE, dir().get());
+
+    Entry null_ordinal_child(&trans, GET_BY_ID, null_child_id);
+    EXPECT_TRUE(null_pos.Equals(null_ordinal_child.GetUniquePosition()));
+    EXPECT_TRUE(null_pos.Equals(null_ordinal_child.GetServerUniquePosition()));
+  }
+}
+
+}  // namespace syncable
+
+}  // namespace syncer
diff --git a/sync/syncable/directory_unittest.h b/sync/syncable/directory_unittest.h
new file mode 100644
index 0000000..d924e8b
--- /dev/null
+++ b/sync/syncable/directory_unittest.h
@@ -0,0 +1,100 @@
+// 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.
+
+#ifndef SYNC_SYNCABLE_DIRECTORY_UNITTEST_H_
+#define SYNC_SYNCABLE_DIRECTORY_UNITTEST_H_
+
+#include <string>
+
+#include "base/basictypes.h"
+#include "base/message_loop/message_loop.h"
+#include "sync/syncable/in_memory_directory_backing_store.h"
+#include "sync/syncable/mutable_entry.h"
+#include "sync/syncable/syncable_read_transaction.h"
+#include "sync/syncable/syncable_write_transaction.h"
+#include "sync/test/engine/test_id_factory.h"
+#include "sync/test/fake_encryptor.h"
+#include "sync/test/null_directory_change_delegate.h"
+#include "sync/test/null_transaction_observer.h"
+#include "sync/util/test_unrecoverable_error_handler.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace syncer {
+
+namespace syncable {
+
+class BaseTransaction;
+
+// A test fixture for syncable::Directory.  Uses an in-memory database to keep
+// the unit tests fast.
+//
+// Serves as base class for several other test fixtures.
+class SyncableDirectoryTest : public testing::Test {
+ private:
+ protected:
+  static const char kDirectoryName[];
+
+  SyncableDirectoryTest();
+  virtual ~SyncableDirectoryTest();
+
+  virtual void SetUp();
+  virtual void TearDown();
+
+  // Creates an empty entry and sets the ID field to a default one.
+  void CreateEntry(const std::string& entryname);
+
+  // Creates an empty entry and sets the ID field to id.
+  void CreateEntry(const std::string& entryname, const int id);
+
+  void CreateEntry(const std::string& entryname, Id id);
+
+  // When a directory is saved then loaded from disk, it will pass through
+  // DropDeletedEntries().  This will remove some entries from the directory.
+  // This function is intended to simulate that process.
+  //
+  // WARNING: The directory will be deleted by this operation.  You should
+  // not have any pointers to the directory (open transactions included)
+  // when you call this.
+  DirOpenResult SimulateSaveAndReloadDir();
+
+  // This function will close and re-open the directory without saving any
+  // pending changes.  This is intended to simulate the recovery from a crash
+  // scenario.  The same warnings for SimulateSaveAndReloadDir apply here.
+  DirOpenResult SimulateCrashAndReloadDir();
+
+  void GetAllMetaHandles(BaseTransaction* trans, MetahandleSet* result);
+  void CheckPurgeEntriesWithTypeInSucceeded(ModelTypeSet types_to_purge,
+                                            bool before_reload);
+  bool IsInDirtyMetahandles(int64 metahandle);
+  bool IsInMetahandlesToPurge(int64 metahandle);
+
+  scoped_ptr<Directory>& dir();
+  DirectoryChangeDelegate* directory_change_delegate();
+  Encryptor* encryptor();
+  UnrecoverableErrorHandler* unrecoverable_error_handler();
+
+ private:
+  void ValidateEntry(BaseTransaction* trans,
+                     int64 id,
+                     bool check_name,
+                     const std::string& name,
+                     int64 base_version,
+                     int64 server_version,
+                     bool is_del);
+
+  // A helper function for Simulate{Save,Crash}AndReloadDir.
+  DirOpenResult ReloadDirImpl();
+
+  base::MessageLoop message_loop_;
+  scoped_ptr<Directory> dir_;
+  NullDirectoryChangeDelegate delegate_;
+  FakeEncryptor encryptor_;
+  TestUnrecoverableErrorHandler handler_;
+};
+
+}  // namespace syncable
+
+}  // namespace syncer
+
+#endif  // SYNC_SYNCABLE_DIRECTORY_UNITTEST_H_
diff --git a/sync/syncable/entry_kernel_unittest.cc b/sync/syncable/entry_kernel_unittest.cc
new file mode 100644
index 0000000..55563d5
--- /dev/null
+++ b/sync/syncable/entry_kernel_unittest.cc
@@ -0,0 +1,31 @@
+// 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.
+
+#include "sync/syncable/entry_kernel.h"
+
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace syncer {
+
+namespace syncable {
+
+class EntryKernelTest : public testing::Test {};
+
+TEST_F(EntryKernelTest, ToValue) {
+  EntryKernel kernel;
+  scoped_ptr<base::DictionaryValue> value(kernel.ToValue(NULL));
+  if (value) {
+    // Not much to check without repeating the ToValue() code.
+    EXPECT_TRUE(value->HasKey("isDirty"));
+    // The extra +2 is for "isDirty" and "serverModelType".
+    EXPECT_EQ(BIT_TEMPS_END - BEGIN_FIELDS + 2,
+              static_cast<int>(value->size()));
+  } else {
+    ADD_FAILURE();
+  }
+}
+
+}  // namespace syncable
+
+}  // namespace syncer
diff --git a/sync/syncable/model_type.cc b/sync/syncable/model_type.cc
index 8e96bfc..ecb54d6 100644
--- a/sync/syncable/model_type.cc
+++ b/sync/syncable/model_type.cc
@@ -438,6 +438,20 @@
   return result;
 }
 
+ModelTypeSet BackupTypes() {
+  ModelTypeSet result;
+  result.Put(BOOKMARKS);
+  result.Put(PREFERENCES);
+  result.Put(THEMES);
+  result.Put(EXTENSIONS);
+  result.Put(SEARCH_ENGINES);
+  result.Put(APPS);
+  result.Put(APP_SETTINGS);
+  result.Put(EXTENSION_SETTINGS);
+  result.Put(PRIORITY_PREFERENCES);
+  return result;
+}
+
 const char* ModelTypeToString(ModelType model_type) {
   // This is used in serialization routines as well as for displaying debug
   // information.  Do not attempt to change these string values unless you know
diff --git a/sync/syncable/syncable_unittest.cc b/sync/syncable/syncable_unittest.cc
index 01176c2..3a14560 100644
--- a/sync/syncable/syncable_unittest.cc
+++ b/sync/syncable/syncable_unittest.cc
@@ -22,6 +22,7 @@
 #include "sync/protocol/bookmark_specifics.pb.h"
 #include "sync/syncable/directory_backing_store.h"
 #include "sync/syncable/directory_change_delegate.h"
+#include "sync/syncable/directory_unittest.h"
 #include "sync/syncable/in_memory_directory_backing_store.h"
 #include "sync/syncable/metahandle_set.h"
 #include "sync/syncable/mutable_entry.h"
@@ -44,25 +45,8 @@
 using base::ExpectDictBooleanValue;
 using base::ExpectDictStringValue;
 
-class SyncableKernelTest : public testing::Test {};
-
-// TODO(akalin): Add unit tests for EntryKernel::ContainsString().
-
-TEST_F(SyncableKernelTest, ToValue) {
-  EntryKernel kernel;
-  scoped_ptr<base::DictionaryValue> value(kernel.ToValue(NULL));
-  if (value) {
-    // Not much to check without repeating the ToValue() code.
-    EXPECT_TRUE(value->HasKey("isDirty"));
-    // The extra +2 is for "isDirty" and "serverModelType".
-    EXPECT_EQ(BIT_TEMPS_END - BEGIN_FIELDS + 2,
-              static_cast<int>(value->size()));
-  } else {
-    ADD_FAILURE();
-  }
-}
-
 namespace {
+
 void PutDataAsBookmarkFavicon(WriteTransaction* wtrans,
                               MutableEntry* e,
                               const char* bytes,
@@ -83,6 +67,7 @@
   ASSERT_EQ(std::string(bytes, bytes_length),
             e->GetSpecifics().bookmark().favicon());
 }
+
 }  // namespace
 
 class SyncableGeneralTest : public testing::Test {
@@ -90,12 +75,12 @@
   static const char kIndexTestName[];
   virtual void SetUp() {
     ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
-    db_path_ = temp_dir_.path().Append(
-        FILE_PATH_LITERAL("SyncableTest.sqlite3"));
+    db_path_ =
+        temp_dir_.path().Append(FILE_PATH_LITERAL("SyncableTest.sqlite3"));
   }
 
-  virtual void TearDown() {
-  }
+  virtual void TearDown() {}
+
  protected:
   base::MessageLoop message_loop_;
   base::ScopedTempDir temp_dir_;
@@ -423,1136 +408,7 @@
   }
 }
 
-// A test fixture for syncable::Directory.  Uses an in-memory database to keep
-// the unit tests fast.
-class SyncableDirectoryTest : public testing::Test {
- protected:
-  base::MessageLoop message_loop_;
-  static const char kName[];
-
-  virtual void SetUp() {
-    dir_.reset(new Directory(new InMemoryDirectoryBackingStore(kName),
-                             &handler_,
-                             NULL,
-                             NULL,
-                             NULL));
-    ASSERT_TRUE(dir_.get());
-    ASSERT_EQ(OPENED, dir_->Open(kName, &delegate_,
-                                 NullTransactionObserver()));
-    ASSERT_TRUE(dir_->good());
-  }
-
-  virtual void TearDown() {
-    if (dir_)
-      dir_->SaveChanges();
-    dir_.reset();
-  }
-
-  void GetAllMetaHandles(BaseTransaction* trans, MetahandleSet* result) {
-    dir_->GetAllMetaHandles(trans, result);
-  }
-
-  bool IsInDirtyMetahandles(int64 metahandle) {
-    return 1 == dir_->kernel_->dirty_metahandles.count(metahandle);
-  }
-
-  bool IsInMetahandlesToPurge(int64 metahandle) {
-    return 1 == dir_->kernel_->metahandles_to_purge.count(metahandle);
-  }
-
-  void CheckPurgeEntriesWithTypeInSucceeded(ModelTypeSet types_to_purge,
-                                            bool before_reload) {
-    SCOPED_TRACE(testing::Message("Before reload: ") << before_reload);
-    {
-      ReadTransaction trans(FROM_HERE, dir_.get());
-      MetahandleSet all_set;
-      dir_->GetAllMetaHandles(&trans, &all_set);
-      EXPECT_EQ(4U, all_set.size());
-      if (before_reload)
-        EXPECT_EQ(6U, dir_->kernel_->metahandles_to_purge.size());
-      for (MetahandleSet::iterator iter = all_set.begin();
-           iter != all_set.end(); ++iter) {
-        Entry e(&trans, GET_BY_HANDLE, *iter);
-        const ModelType local_type = e.GetModelType();
-        const ModelType server_type = e.GetServerModelType();
-
-        // Note the dance around incrementing |it|, since we sometimes erase().
-        if ((IsRealDataType(local_type) &&
-             types_to_purge.Has(local_type)) ||
-            (IsRealDataType(server_type) &&
-             types_to_purge.Has(server_type))) {
-          FAIL() << "Illegal type should have been deleted.";
-        }
-      }
-    }
-
-    for (ModelTypeSet::Iterator it = types_to_purge.First();
-         it.Good(); it.Inc()) {
-      EXPECT_FALSE(dir_->InitialSyncEndedForType(it.Get()));
-      sync_pb::DataTypeProgressMarker progress;
-      dir_->GetDownloadProgress(it.Get(), &progress);
-      EXPECT_EQ("", progress.token());
-
-      ReadTransaction trans(FROM_HERE, dir_.get());
-      sync_pb::DataTypeContext context;
-      dir_->GetDataTypeContext(&trans, it.Get(), &context);
-      EXPECT_TRUE(context.SerializeAsString().empty());
-    }
-    EXPECT_FALSE(types_to_purge.Has(BOOKMARKS));
-    EXPECT_TRUE(dir_->InitialSyncEndedForType(BOOKMARKS));
-  }
-
-  FakeEncryptor encryptor_;
-  TestUnrecoverableErrorHandler handler_;
-  scoped_ptr<Directory> dir_;
-  NullDirectoryChangeDelegate delegate_;
-
-  // Creates an empty entry and sets the ID field to a default one.
-  void CreateEntry(const std::string& entryname) {
-    CreateEntry(entryname, TestIdFactory::FromNumber(-99));
-  }
-
-  // Creates an empty entry and sets the ID field to id.
-  void CreateEntry(const std::string& entryname, const int id) {
-    CreateEntry(entryname, TestIdFactory::FromNumber(id));
-  }
-  void CreateEntry(const std::string& entryname, Id id) {
-    WriteTransaction wtrans(FROM_HERE, UNITTEST, dir_.get());
-    MutableEntry me(&wtrans, CREATE, BOOKMARKS, wtrans.root_id(), entryname);
-    ASSERT_TRUE(me.good());
-    me.PutId(id);
-    me.PutIsUnsynced(true);
-  }
-
-  void ValidateEntry(BaseTransaction* trans,
-                     int64 id,
-                     bool check_name,
-                     const std::string& name,
-                     int64 base_version,
-                     int64 server_version,
-                     bool is_del);
-
-  // When a directory is saved then loaded from disk, it will pass through
-  // DropDeletedEntries().  This will remove some entries from the directory.
-  // This function is intended to simulate that process.
-  //
-  // WARNING: The directory will be deleted by this operation.  You should
-  // not have any pointers to the directory (open transactions included)
-  // when you call this.
-  DirOpenResult SimulateSaveAndReloadDir();
-
-  // This function will close and re-open the directory without saving any
-  // pending changes.  This is intended to simulate the recovery from a crash
-  // scenario.  The same warnings for SimulateSaveAndReloadDir apply here.
-  DirOpenResult SimulateCrashAndReloadDir();
-
- private:
-  // A helper function for Simulate{Save,Crash}AndReloadDir.
-  DirOpenResult ReloadDirImpl();
-};
-
-TEST_F(SyncableDirectoryTest, TakeSnapshotGetsMetahandlesToPurge) {
-  const int metas_to_create = 50;
-  MetahandleSet expected_purges;
-  MetahandleSet all_handles;
-  {
-    WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get());
-    for (int i = 0; i < metas_to_create; i++) {
-      MutableEntry e(&trans, CREATE, BOOKMARKS, trans.root_id(), "foo");
-      e.PutIsUnsynced(true);
-      sync_pb::EntitySpecifics specs;
-      if (i % 2 == 0) {
-        AddDefaultFieldValue(BOOKMARKS, &specs);
-        expected_purges.insert(e.GetMetahandle());
-        all_handles.insert(e.GetMetahandle());
-      } else {
-        AddDefaultFieldValue(PREFERENCES, &specs);
-        all_handles.insert(e.GetMetahandle());
-      }
-      e.PutSpecifics(specs);
-      e.PutServerSpecifics(specs);
-    }
-  }
-
-  ModelTypeSet to_purge(BOOKMARKS);
-  dir_->PurgeEntriesWithTypeIn(to_purge, ModelTypeSet(), ModelTypeSet());
-
-  Directory::SaveChangesSnapshot snapshot1;
-  base::AutoLock scoped_lock(dir_->kernel_->save_changes_mutex);
-  dir_->TakeSnapshotForSaveChanges(&snapshot1);
-  EXPECT_TRUE(expected_purges == snapshot1.metahandles_to_purge);
-
-  to_purge.Clear();
-  to_purge.Put(PREFERENCES);
-  dir_->PurgeEntriesWithTypeIn(to_purge, ModelTypeSet(), ModelTypeSet());
-
-  dir_->HandleSaveChangesFailure(snapshot1);
-
-  Directory::SaveChangesSnapshot snapshot2;
-  dir_->TakeSnapshotForSaveChanges(&snapshot2);
-  EXPECT_TRUE(all_handles == snapshot2.metahandles_to_purge);
-}
-
-TEST_F(SyncableDirectoryTest, TakeSnapshotGetsAllDirtyHandlesTest) {
-  const int metahandles_to_create = 100;
-  std::vector<int64> expected_dirty_metahandles;
-  {
-    WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get());
-    for (int i = 0; i < metahandles_to_create; i++) {
-      MutableEntry e(&trans, CREATE, BOOKMARKS, trans.root_id(), "foo");
-      expected_dirty_metahandles.push_back(e.GetMetahandle());
-      e.PutIsUnsynced(true);
-    }
-  }
-  // Fake SaveChanges() and make sure we got what we expected.
-  {
-    Directory::SaveChangesSnapshot snapshot;
-    base::AutoLock scoped_lock(dir_->kernel_->save_changes_mutex);
-    dir_->TakeSnapshotForSaveChanges(&snapshot);
-    // Make sure there's an entry for each new metahandle.  Make sure all
-    // entries are marked dirty.
-    ASSERT_EQ(expected_dirty_metahandles.size(), snapshot.dirty_metas.size());
-    for (EntryKernelSet::const_iterator i = snapshot.dirty_metas.begin();
-        i != snapshot.dirty_metas.end(); ++i) {
-      ASSERT_TRUE((*i)->is_dirty());
-    }
-    dir_->VacuumAfterSaveChanges(snapshot);
-  }
-  // Put a new value with existing transactions as well as adding new ones.
-  {
-    WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get());
-    std::vector<int64> new_dirty_metahandles;
-    for (std::vector<int64>::const_iterator i =
-        expected_dirty_metahandles.begin();
-        i != expected_dirty_metahandles.end(); ++i) {
-        // Change existing entries to directories to dirty them.
-        MutableEntry e1(&trans, GET_BY_HANDLE, *i);
-        e1.PutIsDir(true);
-        e1.PutIsUnsynced(true);
-        // Add new entries
-        MutableEntry e2(&trans, CREATE, BOOKMARKS, trans.root_id(), "bar");
-        e2.PutIsUnsynced(true);
-        new_dirty_metahandles.push_back(e2.GetMetahandle());
-    }
-    expected_dirty_metahandles.insert(expected_dirty_metahandles.end(),
-        new_dirty_metahandles.begin(), new_dirty_metahandles.end());
-  }
-  // Fake SaveChanges() and make sure we got what we expected.
-  {
-    Directory::SaveChangesSnapshot snapshot;
-    base::AutoLock scoped_lock(dir_->kernel_->save_changes_mutex);
-    dir_->TakeSnapshotForSaveChanges(&snapshot);
-    // Make sure there's an entry for each new metahandle.  Make sure all
-    // entries are marked dirty.
-    EXPECT_EQ(expected_dirty_metahandles.size(), snapshot.dirty_metas.size());
-    for (EntryKernelSet::const_iterator i = snapshot.dirty_metas.begin();
-        i != snapshot.dirty_metas.end(); ++i) {
-      EXPECT_TRUE((*i)->is_dirty());
-    }
-    dir_->VacuumAfterSaveChanges(snapshot);
-  }
-}
-
-TEST_F(SyncableDirectoryTest, TakeSnapshotGetsOnlyDirtyHandlesTest) {
-  const int metahandles_to_create = 100;
-
-  // half of 2 * metahandles_to_create
-  const unsigned int number_changed = 100u;
-  std::vector<int64> expected_dirty_metahandles;
-  {
-    WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get());
-    for (int i = 0; i < metahandles_to_create; i++) {
-      MutableEntry e(&trans, CREATE, BOOKMARKS, trans.root_id(), "foo");
-      expected_dirty_metahandles.push_back(e.GetMetahandle());
-      e.PutIsUnsynced(true);
-    }
-  }
-  dir_->SaveChanges();
-  // Put a new value with existing transactions as well as adding new ones.
-  {
-    WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get());
-    std::vector<int64> new_dirty_metahandles;
-    for (std::vector<int64>::const_iterator i =
-        expected_dirty_metahandles.begin();
-        i != expected_dirty_metahandles.end(); ++i) {
-        // Change existing entries to directories to dirty them.
-        MutableEntry e1(&trans, GET_BY_HANDLE, *i);
-        ASSERT_TRUE(e1.good());
-        e1.PutIsDir(true);
-        e1.PutIsUnsynced(true);
-        // Add new entries
-        MutableEntry e2(&trans, CREATE, BOOKMARKS, trans.root_id(), "bar");
-        e2.PutIsUnsynced(true);
-        new_dirty_metahandles.push_back(e2.GetMetahandle());
-    }
-    expected_dirty_metahandles.insert(expected_dirty_metahandles.end(),
-        new_dirty_metahandles.begin(), new_dirty_metahandles.end());
-  }
-  dir_->SaveChanges();
-  // Don't make any changes whatsoever and ensure nothing comes back.
-  {
-    WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get());
-    for (std::vector<int64>::const_iterator i =
-        expected_dirty_metahandles.begin();
-        i != expected_dirty_metahandles.end(); ++i) {
-      MutableEntry e(&trans, GET_BY_HANDLE, *i);
-      ASSERT_TRUE(e.good());
-      // We aren't doing anything to dirty these entries.
-    }
-  }
-  // Fake SaveChanges() and make sure we got what we expected.
-  {
-    Directory::SaveChangesSnapshot snapshot;
-    base::AutoLock scoped_lock(dir_->kernel_->save_changes_mutex);
-    dir_->TakeSnapshotForSaveChanges(&snapshot);
-    // Make sure there are no dirty_metahandles.
-    EXPECT_EQ(0u, snapshot.dirty_metas.size());
-    dir_->VacuumAfterSaveChanges(snapshot);
-  }
-  {
-    WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get());
-    bool should_change = false;
-    for (std::vector<int64>::const_iterator i =
-        expected_dirty_metahandles.begin();
-        i != expected_dirty_metahandles.end(); ++i) {
-        // Maybe change entries by flipping IS_DIR.
-        MutableEntry e(&trans, GET_BY_HANDLE, *i);
-        ASSERT_TRUE(e.good());
-        should_change = !should_change;
-        if (should_change) {
-          bool not_dir = !e.GetIsDir();
-          e.PutIsDir(not_dir);
-          e.PutIsUnsynced(true);
-        }
-    }
-  }
-  // Fake SaveChanges() and make sure we got what we expected.
-  {
-    Directory::SaveChangesSnapshot snapshot;
-    base::AutoLock scoped_lock(dir_->kernel_->save_changes_mutex);
-    dir_->TakeSnapshotForSaveChanges(&snapshot);
-    // Make sure there's an entry for each changed metahandle.  Make sure all
-    // entries are marked dirty.
-    EXPECT_EQ(number_changed, snapshot.dirty_metas.size());
-    for (EntryKernelSet::const_iterator i = snapshot.dirty_metas.begin();
-        i != snapshot.dirty_metas.end(); ++i) {
-      EXPECT_TRUE((*i)->is_dirty());
-    }
-    dir_->VacuumAfterSaveChanges(snapshot);
-  }
-}
-
-// Test delete journals management.
-TEST_F(SyncableDirectoryTest, ManageDeleteJournals) {
-  sync_pb::EntitySpecifics bookmark_specifics;
-  AddDefaultFieldValue(BOOKMARKS, &bookmark_specifics);
-  bookmark_specifics.mutable_bookmark()->set_url("url");
-
-  Id id1 = TestIdFactory::FromNumber(-1);
-  Id id2 = TestIdFactory::FromNumber(-2);
-  int64 handle1 = 0;
-  int64 handle2 = 0;
-  {
-    // Create two bookmark entries and save in database.
-    CreateEntry("item1", id1);
-    CreateEntry("item2", id2);
-    {
-      WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get());
-      MutableEntry item1(&trans, GET_BY_ID, id1);
-      ASSERT_TRUE(item1.good());
-      handle1 = item1.GetMetahandle();
-      item1.PutSpecifics(bookmark_specifics);
-      item1.PutServerSpecifics(bookmark_specifics);
-      MutableEntry item2(&trans, GET_BY_ID, id2);
-      ASSERT_TRUE(item2.good());
-      handle2 = item2.GetMetahandle();
-      item2.PutSpecifics(bookmark_specifics);
-      item2.PutServerSpecifics(bookmark_specifics);
-    }
-    ASSERT_EQ(OPENED, SimulateSaveAndReloadDir());
-  }
-
-  { // Test adding and saving delete journals.
-    DeleteJournal* delete_journal = dir_->delete_journal();
-    {
-      WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get());
-      EntryKernelSet journal_entries;
-      delete_journal->GetDeleteJournals(&trans, BOOKMARKS, &journal_entries);
-      ASSERT_EQ(0u, journal_entries.size());
-
-      // Set SERVER_IS_DEL of the entries to true and they should be added to
-      // delete journals.
-      MutableEntry item1(&trans, GET_BY_ID, id1);
-      ASSERT_TRUE(item1.good());
-      item1.PutServerIsDel(true);
-      MutableEntry item2(&trans, GET_BY_ID, id2);
-      ASSERT_TRUE(item2.good());
-      item2.PutServerIsDel(true);
-      EntryKernel tmp;
-      tmp.put(ID, id1);
-      EXPECT_TRUE(delete_journal->delete_journals_.count(&tmp));
-      tmp.put(ID, id2);
-      EXPECT_TRUE(delete_journal->delete_journals_.count(&tmp));
-    }
-
-    // Save delete journals in database and verify memory clearing.
-    ASSERT_TRUE(dir_->SaveChanges());
-    {
-      ReadTransaction trans(FROM_HERE, dir_.get());
-      EXPECT_EQ(0u, delete_journal->GetDeleteJournalSize(&trans));
-    }
-    ASSERT_EQ(OPENED, SimulateSaveAndReloadDir());
-  }
-
-  {
-    {
-      // Test reading delete journals from database.
-      WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get());
-      DeleteJournal* delete_journal = dir_->delete_journal();
-      EntryKernelSet journal_entries;
-      delete_journal->GetDeleteJournals(&trans, BOOKMARKS, &journal_entries);
-      ASSERT_EQ(2u, journal_entries.size());
-      EntryKernel tmp;
-      tmp.put(META_HANDLE, handle1);
-      EXPECT_TRUE(journal_entries.count(&tmp));
-      tmp.put(META_HANDLE, handle2);
-      EXPECT_TRUE(journal_entries.count(&tmp));
-
-      // Purge item2.
-      MetahandleSet to_purge;
-      to_purge.insert(handle2);
-      delete_journal->PurgeDeleteJournals(&trans, to_purge);
-
-      // Verify that item2 is purged from journals in memory and will be
-      // purged from database.
-      tmp.put(ID, id2);
-      EXPECT_FALSE(delete_journal->delete_journals_.count(&tmp));
-      EXPECT_EQ(1u, delete_journal->delete_journals_to_purge_.size());
-      EXPECT_TRUE(delete_journal->delete_journals_to_purge_.count(handle2));
-    }
-    ASSERT_EQ(OPENED, SimulateSaveAndReloadDir());
-  }
-
-  {
-    {
-      // Verify purged entry is gone in database.
-      WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get());
-      DeleteJournal* delete_journal = dir_->delete_journal();
-      EntryKernelSet journal_entries;
-      delete_journal->GetDeleteJournals(&trans, BOOKMARKS, &journal_entries);
-      ASSERT_EQ(1u, journal_entries.size());
-      EntryKernel tmp;
-      tmp.put(ID, id1);
-      tmp.put(META_HANDLE, handle1);
-      EXPECT_TRUE(journal_entries.count(&tmp));
-
-      // Undelete item1.
-      MutableEntry item1(&trans, GET_BY_ID, id1);
-      ASSERT_TRUE(item1.good());
-      item1.PutServerIsDel(false);
-      EXPECT_TRUE(delete_journal->delete_journals_.empty());
-      EXPECT_EQ(1u, delete_journal->delete_journals_to_purge_.size());
-      EXPECT_TRUE(delete_journal->delete_journals_to_purge_.count(handle1));
-    }
-    ASSERT_EQ(OPENED, SimulateSaveAndReloadDir());
-  }
-
-  {
-    // Verify undeleted entry is gone from database.
-    ReadTransaction trans(FROM_HERE, dir_.get());
-    DeleteJournal* delete_journal = dir_->delete_journal();
-    ASSERT_EQ(0u, delete_journal->GetDeleteJournalSize(&trans));
-  }
-}
-
-const char SyncableDirectoryTest::kName[] = "Foo";
-
-namespace {
-
-TEST_F(SyncableDirectoryTest, TestBasicLookupNonExistantID) {
-  ReadTransaction rtrans(FROM_HERE, dir_.get());
-  Entry e(&rtrans, GET_BY_ID, TestIdFactory::FromNumber(-99));
-  ASSERT_FALSE(e.good());
-}
-
-TEST_F(SyncableDirectoryTest, TestBasicLookupValidID) {
-  CreateEntry("rtc");
-  ReadTransaction rtrans(FROM_HERE, dir_.get());
-  Entry e(&rtrans, GET_BY_ID, TestIdFactory::FromNumber(-99));
-  ASSERT_TRUE(e.good());
-}
-
-TEST_F(SyncableDirectoryTest, TestDelete) {
-  std::string name = "peanut butter jelly time";
-  WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get());
-  MutableEntry e1(&trans, CREATE, BOOKMARKS, trans.root_id(), name);
-  ASSERT_TRUE(e1.good());
-  e1.PutIsDel(true);
-  MutableEntry e2(&trans, CREATE, BOOKMARKS, trans.root_id(), name);
-  ASSERT_TRUE(e2.good());
-  e2.PutIsDel(true);
-  MutableEntry e3(&trans, CREATE, BOOKMARKS, trans.root_id(), name);
-  ASSERT_TRUE(e3.good());
-  e3.PutIsDel(true);
-
-  e1.PutIsDel(false);
-  e2.PutIsDel(false);
-  e3.PutIsDel(false);
-
-  e1.PutIsDel(true);
-  e2.PutIsDel(true);
-  e3.PutIsDel(true);
-}
-
-TEST_F(SyncableDirectoryTest, TestGetUnsynced) {
-  Directory::Metahandles handles;
-  int64 handle1, handle2;
-  {
-    WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get());
-
-    dir_->GetUnsyncedMetaHandles(&trans, &handles);
-    ASSERT_TRUE(0 == handles.size());
-
-    MutableEntry e1(&trans, CREATE, BOOKMARKS, trans.root_id(), "abba");
-    ASSERT_TRUE(e1.good());
-    handle1 = e1.GetMetahandle();
-    e1.PutBaseVersion(1);
-    e1.PutIsDir(true);
-    e1.PutId(TestIdFactory::FromNumber(101));
-
-    MutableEntry e2(&trans, CREATE, BOOKMARKS, e1.GetId(), "bread");
-    ASSERT_TRUE(e2.good());
-    handle2 = e2.GetMetahandle();
-    e2.PutBaseVersion(1);
-    e2.PutId(TestIdFactory::FromNumber(102));
-  }
-  dir_->SaveChanges();
-  {
-    WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get());
-
-    dir_->GetUnsyncedMetaHandles(&trans, &handles);
-    ASSERT_TRUE(0 == handles.size());
-
-    MutableEntry e3(&trans, GET_BY_HANDLE, handle1);
-    ASSERT_TRUE(e3.good());
-    e3.PutIsUnsynced(true);
-  }
-  dir_->SaveChanges();
-  {
-    WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get());
-    dir_->GetUnsyncedMetaHandles(&trans, &handles);
-    ASSERT_TRUE(1 == handles.size());
-    ASSERT_TRUE(handle1 == handles[0]);
-
-    MutableEntry e4(&trans, GET_BY_HANDLE, handle2);
-    ASSERT_TRUE(e4.good());
-    e4.PutIsUnsynced(true);
-  }
-  dir_->SaveChanges();
-  {
-    WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get());
-    dir_->GetUnsyncedMetaHandles(&trans, &handles);
-    ASSERT_TRUE(2 == handles.size());
-    if (handle1 == handles[0]) {
-      ASSERT_TRUE(handle2 == handles[1]);
-    } else {
-      ASSERT_TRUE(handle2 == handles[0]);
-      ASSERT_TRUE(handle1 == handles[1]);
-    }
-
-    MutableEntry e5(&trans, GET_BY_HANDLE, handle1);
-    ASSERT_TRUE(e5.good());
-    ASSERT_TRUE(e5.GetIsUnsynced());
-    ASSERT_TRUE(e5.PutIsUnsynced(false));
-    ASSERT_FALSE(e5.GetIsUnsynced());
-  }
-  dir_->SaveChanges();
-  {
-    WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get());
-    dir_->GetUnsyncedMetaHandles(&trans, &handles);
-    ASSERT_TRUE(1 == handles.size());
-    ASSERT_TRUE(handle2 == handles[0]);
-  }
-}
-
-TEST_F(SyncableDirectoryTest, TestGetUnappliedUpdates) {
-  std::vector<int64> handles;
-  int64 handle1, handle2;
-  const FullModelTypeSet all_types = FullModelTypeSet::All();
-  {
-    WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get());
-
-    dir_->GetUnappliedUpdateMetaHandles(&trans, all_types, &handles);
-    ASSERT_TRUE(0 == handles.size());
-
-    MutableEntry e1(&trans, CREATE, BOOKMARKS, trans.root_id(), "abba");
-    ASSERT_TRUE(e1.good());
-    handle1 = e1.GetMetahandle();
-    e1.PutIsUnappliedUpdate(false);
-    e1.PutBaseVersion(1);
-    e1.PutId(TestIdFactory::FromNumber(101));
-    e1.PutIsDir(true);
-
-    MutableEntry e2(&trans, CREATE, BOOKMARKS, e1.GetId(), "bread");
-    ASSERT_TRUE(e2.good());
-    handle2 = e2.GetMetahandle();
-    e2.PutIsUnappliedUpdate(false);
-    e2.PutBaseVersion(1);
-    e2.PutId(TestIdFactory::FromNumber(102));
-  }
-  dir_->SaveChanges();
-  {
-    WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get());
-
-    dir_->GetUnappliedUpdateMetaHandles(&trans, all_types, &handles);
-    ASSERT_TRUE(0 == handles.size());
-
-    MutableEntry e3(&trans, GET_BY_HANDLE, handle1);
-    ASSERT_TRUE(e3.good());
-    e3.PutIsUnappliedUpdate(true);
-  }
-  dir_->SaveChanges();
-  {
-    WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get());
-    dir_->GetUnappliedUpdateMetaHandles(&trans, all_types, &handles);
-    ASSERT_TRUE(1 == handles.size());
-    ASSERT_TRUE(handle1 == handles[0]);
-
-    MutableEntry e4(&trans, GET_BY_HANDLE, handle2);
-    ASSERT_TRUE(e4.good());
-    e4.PutIsUnappliedUpdate(true);
-  }
-  dir_->SaveChanges();
-  {
-    WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get());
-    dir_->GetUnappliedUpdateMetaHandles(&trans, all_types, &handles);
-    ASSERT_TRUE(2 == handles.size());
-    if (handle1 == handles[0]) {
-      ASSERT_TRUE(handle2 == handles[1]);
-    } else {
-      ASSERT_TRUE(handle2 == handles[0]);
-      ASSERT_TRUE(handle1 == handles[1]);
-    }
-
-    MutableEntry e5(&trans, GET_BY_HANDLE, handle1);
-    ASSERT_TRUE(e5.good());
-    e5.PutIsUnappliedUpdate(false);
-  }
-  dir_->SaveChanges();
-  {
-    WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get());
-    dir_->GetUnappliedUpdateMetaHandles(&trans, all_types, &handles);
-    ASSERT_TRUE(1 == handles.size());
-    ASSERT_TRUE(handle2 == handles[0]);
-  }
-}
-
-
-TEST_F(SyncableDirectoryTest, DeleteBug_531383) {
-  // Try to evoke a check failure...
-  TestIdFactory id_factory;
-  int64 grandchild_handle;
-  {
-    WriteTransaction wtrans(FROM_HERE, UNITTEST, dir_.get());
-    MutableEntry parent(&wtrans, CREATE, BOOKMARKS, id_factory.root(), "Bob");
-    ASSERT_TRUE(parent.good());
-    parent.PutIsDir(true);
-    parent.PutId(id_factory.NewServerId());
-    parent.PutBaseVersion(1);
-    MutableEntry child(&wtrans, CREATE, BOOKMARKS, parent.GetId(), "Bob");
-    ASSERT_TRUE(child.good());
-    child.PutIsDir(true);
-    child.PutId(id_factory.NewServerId());
-    child.PutBaseVersion(1);
-    MutableEntry grandchild(&wtrans, CREATE, BOOKMARKS, child.GetId(), "Bob");
-    ASSERT_TRUE(grandchild.good());
-    grandchild.PutId(id_factory.NewServerId());
-    grandchild.PutBaseVersion(1);
-    grandchild.PutIsDel(true);
-    MutableEntry twin(&wtrans, CREATE, BOOKMARKS, child.GetId(), "Bob");
-    ASSERT_TRUE(twin.good());
-    twin.PutIsDel(true);
-    grandchild.PutIsDel(false);
-
-    grandchild_handle = grandchild.GetMetahandle();
-  }
-  dir_->SaveChanges();
-  {
-    WriteTransaction wtrans(FROM_HERE, UNITTEST, dir_.get());
-    MutableEntry grandchild(&wtrans, GET_BY_HANDLE, grandchild_handle);
-    grandchild.PutIsDel(true);  // Used to CHECK fail here.
-  }
-}
-
-static inline bool IsLegalNewParent(const Entry& a, const Entry& b) {
-  return IsLegalNewParent(a.trans(), a.GetId(), b.GetId());
-}
-
-TEST_F(SyncableDirectoryTest, TestIsLegalNewParent) {
-  TestIdFactory id_factory;
-  WriteTransaction wtrans(FROM_HERE, UNITTEST, dir_.get());
-  Entry root(&wtrans, GET_BY_ID, id_factory.root());
-  ASSERT_TRUE(root.good());
-  MutableEntry parent(&wtrans, CREATE, BOOKMARKS, root.GetId(), "Bob");
-  ASSERT_TRUE(parent.good());
-  parent.PutIsDir(true);
-  parent.PutId(id_factory.NewServerId());
-  parent.PutBaseVersion(1);
-  MutableEntry child(&wtrans, CREATE, BOOKMARKS, parent.GetId(), "Bob");
-  ASSERT_TRUE(child.good());
-  child.PutIsDir(true);
-  child.PutId(id_factory.NewServerId());
-  child.PutBaseVersion(1);
-  MutableEntry grandchild(&wtrans, CREATE, BOOKMARKS, child.GetId(), "Bob");
-  ASSERT_TRUE(grandchild.good());
-  grandchild.PutId(id_factory.NewServerId());
-  grandchild.PutBaseVersion(1);
-
-  MutableEntry parent2(&wtrans, CREATE, BOOKMARKS, root.GetId(), "Pete");
-  ASSERT_TRUE(parent2.good());
-  parent2.PutIsDir(true);
-  parent2.PutId(id_factory.NewServerId());
-  parent2.PutBaseVersion(1);
-  MutableEntry child2(&wtrans, CREATE, BOOKMARKS, parent2.GetId(), "Pete");
-  ASSERT_TRUE(child2.good());
-  child2.PutIsDir(true);
-  child2.PutId(id_factory.NewServerId());
-  child2.PutBaseVersion(1);
-  MutableEntry grandchild2(&wtrans, CREATE, BOOKMARKS, child2.GetId(), "Pete");
-  ASSERT_TRUE(grandchild2.good());
-  grandchild2.PutId(id_factory.NewServerId());
-  grandchild2.PutBaseVersion(1);
-  // resulting tree
-  //           root
-  //           /  |
-  //     parent    parent2
-  //          |    |
-  //      child    child2
-  //          |    |
-  // grandchild    grandchild2
-  ASSERT_TRUE(IsLegalNewParent(child, root));
-  ASSERT_TRUE(IsLegalNewParent(child, parent));
-  ASSERT_FALSE(IsLegalNewParent(child, child));
-  ASSERT_FALSE(IsLegalNewParent(child, grandchild));
-  ASSERT_TRUE(IsLegalNewParent(child, parent2));
-  ASSERT_TRUE(IsLegalNewParent(child, grandchild2));
-  ASSERT_FALSE(IsLegalNewParent(parent, grandchild));
-  ASSERT_FALSE(IsLegalNewParent(root, grandchild));
-  ASSERT_FALSE(IsLegalNewParent(parent, grandchild));
-}
-
-TEST_F(SyncableDirectoryTest, TestEntryIsInFolder) {
-  // Create a subdir and an entry.
-  int64 entry_handle;
-  syncable::Id folder_id;
-  syncable::Id entry_id;
-  std::string entry_name = "entry";
-
-  {
-    WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get());
-    MutableEntry folder(&trans, CREATE, BOOKMARKS, trans.root_id(), "folder");
-    ASSERT_TRUE(folder.good());
-    folder.PutIsDir(true);
-    EXPECT_TRUE(folder.PutIsUnsynced(true));
-    folder_id = folder.GetId();
-
-    MutableEntry entry(&trans, CREATE, BOOKMARKS, folder.GetId(), entry_name);
-    ASSERT_TRUE(entry.good());
-    entry_handle = entry.GetMetahandle();
-    entry.PutIsUnsynced(true);
-    entry_id = entry.GetId();
-  }
-
-  // Make sure we can find the entry in the folder.
-  {
-    ReadTransaction trans(FROM_HERE, dir_.get());
-    EXPECT_EQ(0, CountEntriesWithName(&trans, trans.root_id(), entry_name));
-    EXPECT_EQ(1, CountEntriesWithName(&trans, folder_id, entry_name));
-
-    Entry entry(&trans, GET_BY_ID, entry_id);
-    ASSERT_TRUE(entry.good());
-    EXPECT_EQ(entry_handle, entry.GetMetahandle());
-    EXPECT_TRUE(entry.GetNonUniqueName()== entry_name);
-    EXPECT_TRUE(entry.GetParentId()== folder_id);
-  }
-}
-
-TEST_F(SyncableDirectoryTest, TestParentIdIndexUpdate) {
-  std::string child_name = "child";
-
-  WriteTransaction wt(FROM_HERE, UNITTEST, dir_.get());
-  MutableEntry parent_folder(&wt, CREATE, BOOKMARKS, wt.root_id(), "folder1");
-  parent_folder.PutIsUnsynced(true);
-  parent_folder.PutIsDir(true);
-
-  MutableEntry parent_folder2(&wt, CREATE, BOOKMARKS, wt.root_id(), "folder2");
-  parent_folder2.PutIsUnsynced(true);
-  parent_folder2.PutIsDir(true);
-
-  MutableEntry child(&wt, CREATE, BOOKMARKS, parent_folder.GetId(), child_name);
-  child.PutIsDir(true);
-  child.PutIsUnsynced(true);
-
-  ASSERT_TRUE(child.good());
-
-  EXPECT_EQ(0, CountEntriesWithName(&wt, wt.root_id(), child_name));
-  EXPECT_EQ(parent_folder.GetId(), child.GetParentId());
-  EXPECT_EQ(1, CountEntriesWithName(&wt, parent_folder.GetId(), child_name));
-  EXPECT_EQ(0, CountEntriesWithName(&wt, parent_folder2.GetId(), child_name));
-  child.PutParentId(parent_folder2.GetId());
-  EXPECT_EQ(parent_folder2.GetId(), child.GetParentId());
-  EXPECT_EQ(0, CountEntriesWithName(&wt, parent_folder.GetId(), child_name));
-  EXPECT_EQ(1, CountEntriesWithName(&wt, parent_folder2.GetId(), child_name));
-}
-
-TEST_F(SyncableDirectoryTest, TestNoReindexDeletedItems) {
-  std::string folder_name = "folder";
-  std::string new_name = "new_name";
-
-  WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get());
-  MutableEntry folder(&trans, CREATE, BOOKMARKS, trans.root_id(), folder_name);
-  ASSERT_TRUE(folder.good());
-  folder.PutIsDir(true);
-  folder.PutIsDel(true);
-
-  EXPECT_EQ(0, CountEntriesWithName(&trans, trans.root_id(), folder_name));
-
-  MutableEntry deleted(&trans, GET_BY_ID, folder.GetId());
-  ASSERT_TRUE(deleted.good());
-  deleted.PutParentId(trans.root_id());
-  deleted.PutNonUniqueName(new_name);
-
-  EXPECT_EQ(0, CountEntriesWithName(&trans, trans.root_id(), folder_name));
-  EXPECT_EQ(0, CountEntriesWithName(&trans, trans.root_id(), new_name));
-}
-
-TEST_F(SyncableDirectoryTest, TestCaseChangeRename) {
-  WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get());
-  MutableEntry folder(&trans, CREATE, BOOKMARKS, trans.root_id(), "CaseChange");
-  ASSERT_TRUE(folder.good());
-  folder.PutParentId(trans.root_id());
-  folder.PutNonUniqueName("CASECHANGE");
-  folder.PutIsDel(true);
-}
-
-// Create items of each model type, and check that GetModelType and
-// GetServerModelType return the right value.
-TEST_F(SyncableDirectoryTest, GetModelType) {
-  TestIdFactory id_factory;
-  ModelTypeSet protocol_types = ProtocolTypes();
-  for (ModelTypeSet::Iterator iter = protocol_types.First(); iter.Good();
-       iter.Inc()) {
-    ModelType datatype = iter.Get();
-    SCOPED_TRACE(testing::Message("Testing model type ") << datatype);
-    switch (datatype) {
-      case UNSPECIFIED:
-      case TOP_LEVEL_FOLDER:
-        continue;  // Datatype isn't a function of Specifics.
-      default:
-        break;
-    }
-    sync_pb::EntitySpecifics specifics;
-    AddDefaultFieldValue(datatype, &specifics);
-
-    WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get());
-
-    MutableEntry folder(&trans, CREATE, BOOKMARKS, trans.root_id(), "Folder");
-    ASSERT_TRUE(folder.good());
-    folder.PutId(id_factory.NewServerId());
-    folder.PutSpecifics(specifics);
-    folder.PutBaseVersion(1);
-    folder.PutIsDir(true);
-    folder.PutIsDel(false);
-    ASSERT_EQ(datatype, folder.GetModelType());
-
-    MutableEntry item(&trans, CREATE, BOOKMARKS, trans.root_id(), "Item");
-    ASSERT_TRUE(item.good());
-    item.PutId(id_factory.NewServerId());
-    item.PutSpecifics(specifics);
-    item.PutBaseVersion(1);
-    item.PutIsDir(false);
-    item.PutIsDel(false);
-    ASSERT_EQ(datatype, item.GetModelType());
-
-    // It's critical that deletion records retain their datatype, so that
-    // they can be dispatched to the appropriate change processor.
-    MutableEntry deleted_item(
-        &trans, CREATE, BOOKMARKS, trans.root_id(), "Deleted Item");
-    ASSERT_TRUE(item.good());
-    deleted_item.PutId(id_factory.NewServerId());
-    deleted_item.PutSpecifics(specifics);
-    deleted_item.PutBaseVersion(1);
-    deleted_item.PutIsDir(false);
-    deleted_item.PutIsDel(true);
-    ASSERT_EQ(datatype, deleted_item.GetModelType());
-
-    MutableEntry server_folder(&trans, CREATE_NEW_UPDATE_ITEM,
-        id_factory.NewServerId());
-    ASSERT_TRUE(server_folder.good());
-    server_folder.PutServerSpecifics(specifics);
-    server_folder.PutBaseVersion(1);
-    server_folder.PutServerIsDir(true);
-    server_folder.PutServerIsDel(false);
-    ASSERT_EQ(datatype, server_folder.GetServerModelType());
-
-    MutableEntry server_item(&trans, CREATE_NEW_UPDATE_ITEM,
-        id_factory.NewServerId());
-    ASSERT_TRUE(server_item.good());
-    server_item.PutServerSpecifics(specifics);
-    server_item.PutBaseVersion(1);
-    server_item.PutServerIsDir(false);
-    server_item.PutServerIsDel(false);
-    ASSERT_EQ(datatype, server_item.GetServerModelType());
-
-    sync_pb::SyncEntity folder_entity;
-    folder_entity.set_id_string(SyncableIdToProto(id_factory.NewServerId()));
-    folder_entity.set_deleted(false);
-    folder_entity.set_folder(true);
-    folder_entity.mutable_specifics()->CopyFrom(specifics);
-    ASSERT_EQ(datatype, GetModelType(folder_entity));
-
-    sync_pb::SyncEntity item_entity;
-    item_entity.set_id_string(SyncableIdToProto(id_factory.NewServerId()));
-    item_entity.set_deleted(false);
-    item_entity.set_folder(false);
-    item_entity.mutable_specifics()->CopyFrom(specifics);
-    ASSERT_EQ(datatype, GetModelType(item_entity));
-  }
-}
-
-// A test that roughly mimics the directory interaction that occurs when a
-// bookmark folder and entry are created then synced for the first time.  It is
-// a more common variant of the 'DeletedAndUnsyncedChild' scenario tested below.
-TEST_F(SyncableDirectoryTest, ChangeEntryIDAndUpdateChildren_ParentAndChild) {
-  TestIdFactory id_factory;
-  Id orig_parent_id;
-  Id orig_child_id;
-
-  {
-    // Create two client-side items, a parent and child.
-    WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get());
-
-    MutableEntry parent(&trans, CREATE, BOOKMARKS, id_factory.root(), "parent");
-    parent.PutIsDir(true);
-    parent.PutIsUnsynced(true);
-
-    MutableEntry child(&trans, CREATE, BOOKMARKS, parent.GetId(), "child");
-    child.PutIsUnsynced(true);
-
-    orig_parent_id = parent.GetId();
-    orig_child_id = child.GetId();
-  }
-
-  {
-    // Simulate what happens after committing two items.  Their IDs will be
-    // replaced with server IDs.  The child is renamed first, then the parent.
-    WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get());
-
-    MutableEntry parent(&trans, GET_BY_ID, orig_parent_id);
-    MutableEntry child(&trans, GET_BY_ID, orig_child_id);
-
-    ChangeEntryIDAndUpdateChildren(&trans, &child, id_factory.NewServerId());
-    child.PutIsUnsynced(false);
-    child.PutBaseVersion(1);
-    child.PutServerVersion(1);
-
-    ChangeEntryIDAndUpdateChildren(&trans, &parent, id_factory.NewServerId());
-    parent.PutIsUnsynced(false);
-    parent.PutBaseVersion(1);
-    parent.PutServerVersion(1);
-  }
-
-  // Final check for validity.
-  EXPECT_EQ(OPENED, SimulateSaveAndReloadDir());
-}
-
-// A test based on the scenario where we create a bookmark folder and entry
-// locally, but with a twist.  In this case, the bookmark is deleted before we
-// are able to sync either it or its parent folder.  This scenario used to cause
-// directory corruption, see crbug.com/125381.
-TEST_F(SyncableDirectoryTest,
-       ChangeEntryIDAndUpdateChildren_DeletedAndUnsyncedChild) {
-  TestIdFactory id_factory;
-  Id orig_parent_id;
-  Id orig_child_id;
-
-  {
-    // Create two client-side items, a parent and child.
-    WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get());
-
-    MutableEntry parent(&trans, CREATE, BOOKMARKS, id_factory.root(), "parent");
-    parent.PutIsDir(true);
-    parent.PutIsUnsynced(true);
-
-    MutableEntry child(&trans, CREATE, BOOKMARKS, parent.GetId(), "child");
-    child.PutIsUnsynced(true);
-
-    orig_parent_id = parent.GetId();
-    orig_child_id = child.GetId();
-  }
-
-  {
-    // Delete the child.
-    WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get());
-
-    MutableEntry child(&trans, GET_BY_ID, orig_child_id);
-    child.PutIsDel(true);
-  }
-
-  {
-    // Simulate what happens after committing the parent.  Its ID will be
-    // replaced with server a ID.
-    WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get());
-
-    MutableEntry parent(&trans, GET_BY_ID, orig_parent_id);
-
-    ChangeEntryIDAndUpdateChildren(&trans, &parent, id_factory.NewServerId());
-    parent.PutIsUnsynced(false);
-    parent.PutBaseVersion(1);
-    parent.PutServerVersion(1);
-  }
-
-  // Final check for validity.
-  EXPECT_EQ(OPENED, SimulateSaveAndReloadDir());
-}
-
-// Ask the directory to generate a unique ID.  Close and re-open the database
-// without saving, then ask for another unique ID.  Verify IDs are not reused.
-// This scenario simulates a crash within the first few seconds of operation.
-TEST_F(SyncableDirectoryTest, LocalIdReuseTest) {
-  Id pre_crash_id = dir_->NextId();
-  SimulateCrashAndReloadDir();
-  Id post_crash_id = dir_->NextId();
-  EXPECT_NE(pre_crash_id, post_crash_id);
-}
-
-// Ask the directory to generate a unique ID.  Save the directory.  Close and
-// re-open the database without saving, then ask for another unique ID.  Verify
-// IDs are not reused.  This scenario simulates a steady-state crash.
-TEST_F(SyncableDirectoryTest, LocalIdReuseTestWithSave) {
-  Id pre_crash_id = dir_->NextId();
-  dir_->SaveChanges();
-  SimulateCrashAndReloadDir();
-  Id post_crash_id = dir_->NextId();
-  EXPECT_NE(pre_crash_id, post_crash_id);
-}
-
-// Ensure that the unsynced, is_del and server unkown entries that may have been
-// left in the database by old clients will be deleted when we open the old
-// database.
-TEST_F(SyncableDirectoryTest, OldClientLeftUnsyncedDeletedLocalItem) {
-  // We must create an entry with the offending properties.  This is done with
-  // some abuse of the MutableEntry's API; it doesn't expect us to modify an
-  // item after it is deleted.  If this hack becomes impractical we will need to
-  // find a new way to simulate this scenario.
-
-  TestIdFactory id_factory;
-
-  // Happy-path: These valid entries should not get deleted.
-  Id server_knows_id = id_factory.NewServerId();
-  Id not_is_del_id = id_factory.NewLocalId();
-
-  // The ID of the entry which will be unsynced, is_del and !ServerKnows().
-  Id zombie_id = id_factory.NewLocalId();
-
-  // We're about to do some bad things.  Tell the directory verification
-  // routines to look the other way.
-  dir_->SetInvariantCheckLevel(OFF);
-
-  {
-    WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get());
-
-    // Create an uncommitted tombstone entry.
-    MutableEntry server_knows(&trans, CREATE, BOOKMARKS, id_factory.root(),
-                              "server_knows");
-    server_knows.PutId(server_knows_id);
-    server_knows.PutIsUnsynced(true);
-    server_knows.PutIsDel(true);
-    server_knows.PutBaseVersion(5);
-    server_knows.PutServerVersion(4);
-
-    // Create a valid update entry.
-    MutableEntry not_is_del(
-        &trans, CREATE, BOOKMARKS, id_factory.root(), "not_is_del");
-    not_is_del.PutId(not_is_del_id);
-    not_is_del.PutIsDel(false);
-    not_is_del.PutIsUnsynced(true);
-
-    // Create a tombstone which should never be sent to the server because the
-    // server never knew about the item's existence.
-    //
-    // New clients should never put entries into this state.  We work around
-    // this by setting IS_DEL before setting IS_UNSYNCED, something which the
-    // client should never do in practice.
-    MutableEntry zombie(&trans, CREATE, BOOKMARKS, id_factory.root(), "zombie");
-    zombie.PutId(zombie_id);
-    zombie.PutIsDel(true);
-    zombie.PutIsUnsynced(true);
-  }
-
-  ASSERT_EQ(OPENED, SimulateSaveAndReloadDir());
-
-  {
-    ReadTransaction trans(FROM_HERE, dir_.get());
-
-    // The directory loading routines should have cleaned things up, making it
-    // safe to check invariants once again.
-    dir_->FullyCheckTreeInvariants(&trans);
-
-    Entry server_knows(&trans, GET_BY_ID, server_knows_id);
-    EXPECT_TRUE(server_knows.good());
-
-    Entry not_is_del(&trans, GET_BY_ID, not_is_del_id);
-    EXPECT_TRUE(not_is_del.good());
-
-    Entry zombie(&trans, GET_BY_ID, zombie_id);
-    EXPECT_FALSE(zombie.good());
-  }
-}
-
-TEST_F(SyncableDirectoryTest, PositionWithNullSurvivesSaveAndReload) {
-  TestIdFactory id_factory;
-  Id null_child_id;
-  const char null_cstr[] = "\0null\0test";
-  std::string null_str(null_cstr, arraysize(null_cstr) - 1);
-  // Pad up to the minimum length with 0x7f characters, then add a string that
-  // contains a few NULLs to the end.  This is slightly wrong, since the suffix
-  // part of a UniquePosition shouldn't contain NULLs, but it's good enough for
-  // this test.
-  std::string suffix =
-      std::string(UniquePosition::kSuffixLength - null_str.length(), '\x7f')
-      + null_str;
-  UniquePosition null_pos = UniquePosition::FromInt64(10, suffix);
-
-  {
-    WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get());
-
-    MutableEntry parent(&trans, CREATE, BOOKMARKS, id_factory.root(), "parent");
-    parent.PutIsDir(true);
-    parent.PutIsUnsynced(true);
-
-    MutableEntry child(&trans, CREATE, BOOKMARKS, parent.GetId(), "child");
-    child.PutIsUnsynced(true);
-    child.PutUniquePosition(null_pos);
-    child.PutServerUniquePosition(null_pos);
-
-    null_child_id = child.GetId();
-  }
-
-  EXPECT_EQ(OPENED, SimulateSaveAndReloadDir());
-
-  {
-    ReadTransaction trans(FROM_HERE, dir_.get());
-
-    Entry null_ordinal_child(&trans, GET_BY_ID, null_child_id);
-    EXPECT_TRUE(
-        null_pos.Equals(null_ordinal_child.GetUniquePosition()));
-    EXPECT_TRUE(
-        null_pos.Equals(null_ordinal_child.GetServerUniquePosition()));
-  }
-}
-
-// An OnDirectoryBackingStore that can be set to always fail SaveChanges.
+// An OnDiskDirectoryBackingStore that can be set to always fail SaveChanges.
 class TestBackingStore : public OnDiskDirectoryBackingStore {
  public:
   TestBackingStore(const std::string& dir_name,
@@ -1655,6 +511,7 @@
   // SetUp() is called before each test case is run.
   // The sqlite3 DB is deleted before each test is run.
   virtual void SetUp() {
+    SyncableDirectoryTest::SetUp();
     ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
     file_path_ = temp_dir_.path().Append(
         FILE_PATH_LITERAL("Test.sqlite3"));
@@ -1664,24 +521,27 @@
 
   virtual void TearDown() {
     // This also closes file handles.
-    dir_->SaveChanges();
-    dir_.reset();
+    dir()->SaveChanges();
+    dir().reset();
     base::DeleteFile(file_path_, true);
+    SyncableDirectoryTest::TearDown();
   }
 
   // Creates a new directory.  Deletes the old directory, if it exists.
   void CreateDirectory() {
-    test_directory_ =
-        TestDirectory::Create(&encryptor_, &handler_, kName, file_path_);
-    dir_.reset(test_directory_);
-    ASSERT_TRUE(dir_.get());
-    ASSERT_EQ(OPENED, dir_->Open(kName, &delegate_,
-                                 NullTransactionObserver()));
-    ASSERT_TRUE(dir_->good());
+    test_directory_ = TestDirectory::Create(
+        encryptor(), unrecoverable_error_handler(), kDirectoryName, file_path_);
+    dir().reset(test_directory_);
+    ASSERT_TRUE(dir().get());
+    ASSERT_EQ(OPENED,
+              dir()->Open(kDirectoryName,
+                          directory_change_delegate(),
+                          NullTransactionObserver()));
+    ASSERT_TRUE(dir()->good());
   }
 
   void SaveAndReloadDir() {
-    dir_->SaveChanges();
+    dir()->SaveChanges();
     CreateDirectory();
   }
 
@@ -1718,26 +578,23 @@
 
   ModelTypeSet types_to_purge(PREFERENCES, AUTOFILL);
 
-  dir_->SetDownloadProgress(BOOKMARKS,
-                            BuildProgress(BOOKMARKS));
-  dir_->SetDownloadProgress(PREFERENCES,
-                            BuildProgress(PREFERENCES));
-  dir_->SetDownloadProgress(AUTOFILL,
-                            BuildProgress(AUTOFILL));
+  dir()->SetDownloadProgress(BOOKMARKS, BuildProgress(BOOKMARKS));
+  dir()->SetDownloadProgress(PREFERENCES, BuildProgress(PREFERENCES));
+  dir()->SetDownloadProgress(AUTOFILL, BuildProgress(AUTOFILL));
 
   TestIdFactory id_factory;
   // Create some items for each type.
   {
-    WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get());
+    WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
 
-    dir_->SetDataTypeContext(&trans, BOOKMARKS, BuildContext(BOOKMARKS));
-    dir_->SetDataTypeContext(&trans, PREFERENCES, BuildContext(PREFERENCES));
-    dir_->SetDataTypeContext(&trans, AUTOFILL, BuildContext(AUTOFILL));
+    dir()->SetDataTypeContext(&trans, BOOKMARKS, BuildContext(BOOKMARKS));
+    dir()->SetDataTypeContext(&trans, PREFERENCES, BuildContext(PREFERENCES));
+    dir()->SetDataTypeContext(&trans, AUTOFILL, BuildContext(AUTOFILL));
 
     // Make it look like these types have completed initial sync.
-    CreateTypeRoot(&trans, dir_.get(), BOOKMARKS);
-    CreateTypeRoot(&trans, dir_.get(), PREFERENCES);
-    CreateTypeRoot(&trans, dir_.get(), AUTOFILL);
+    CreateTypeRoot(&trans, dir().get(), BOOKMARKS);
+    CreateTypeRoot(&trans, dir().get(), PREFERENCES);
+    CreateTypeRoot(&trans, dir().get(), AUTOFILL);
 
     // Add more nodes for this type.  Technically, they should be placed under
     // the proper type root nodes but the assertions in this test won't notice
@@ -1780,15 +637,15 @@
     item6.PutIsUnappliedUpdate(true);
   }
 
-  dir_->SaveChanges();
+  dir()->SaveChanges();
   {
-    ReadTransaction trans(FROM_HERE, dir_.get());
+    ReadTransaction trans(FROM_HERE, dir().get());
     MetahandleSet all_set;
     GetAllMetaHandles(&trans, &all_set);
     ASSERT_EQ(10U, all_set.size());
   }
 
-  dir_->PurgeEntriesWithTypeIn(types_to_purge, ModelTypeSet(), ModelTypeSet());
+  dir()->PurgeEntriesWithTypeIn(types_to_purge, ModelTypeSet(), ModelTypeSet());
 
   // We first query the in-memory data, and then reload the directory (without
   // saving) to verify that disk does not still have the data.
@@ -1798,37 +655,37 @@
 }
 
 TEST_F(OnDiskSyncableDirectoryTest, TestShareInfo) {
-  dir_->set_store_birthday("Jan 31st");
+  dir()->set_store_birthday("Jan 31st");
   const char* const bag_of_chips_array = "\0bag of chips";
   const std::string bag_of_chips_string =
       std::string(bag_of_chips_array, sizeof(bag_of_chips_array));
-  dir_->set_bag_of_chips(bag_of_chips_string);
+  dir()->set_bag_of_chips(bag_of_chips_string);
   {
-    ReadTransaction trans(FROM_HERE, dir_.get());
-    EXPECT_EQ("Jan 31st", dir_->store_birthday());
-    EXPECT_EQ(bag_of_chips_string, dir_->bag_of_chips());
+    ReadTransaction trans(FROM_HERE, dir().get());
+    EXPECT_EQ("Jan 31st", dir()->store_birthday());
+    EXPECT_EQ(bag_of_chips_string, dir()->bag_of_chips());
   }
-  dir_->set_store_birthday("April 10th");
+  dir()->set_store_birthday("April 10th");
   const char* const bag_of_chips2_array = "\0bag of chips2";
   const std::string bag_of_chips2_string =
       std::string(bag_of_chips2_array, sizeof(bag_of_chips2_array));
-  dir_->set_bag_of_chips(bag_of_chips2_string);
-  dir_->SaveChanges();
+  dir()->set_bag_of_chips(bag_of_chips2_string);
+  dir()->SaveChanges();
   {
-    ReadTransaction trans(FROM_HERE, dir_.get());
-    EXPECT_EQ("April 10th", dir_->store_birthday());
-    EXPECT_EQ(bag_of_chips2_string, dir_->bag_of_chips());
+    ReadTransaction trans(FROM_HERE, dir().get());
+    EXPECT_EQ("April 10th", dir()->store_birthday());
+    EXPECT_EQ(bag_of_chips2_string, dir()->bag_of_chips());
   }
   const char* const bag_of_chips3_array = "\0bag of chips3";
   const std::string bag_of_chips3_string =
       std::string(bag_of_chips3_array, sizeof(bag_of_chips3_array));
-  dir_->set_bag_of_chips(bag_of_chips3_string);
+  dir()->set_bag_of_chips(bag_of_chips3_string);
   // Restore the directory from disk.  Make sure that nothing's changed.
   SaveAndReloadDir();
   {
-    ReadTransaction trans(FROM_HERE, dir_.get());
-    EXPECT_EQ("April 10th", dir_->store_birthday());
-    EXPECT_EQ(bag_of_chips3_string, dir_->bag_of_chips());
+    ReadTransaction trans(FROM_HERE, dir().get());
+    EXPECT_EQ("April 10th", dir()->store_birthday());
+    EXPECT_EQ(bag_of_chips3_string, dir()->bag_of_chips());
   }
 }
 
@@ -1841,7 +698,7 @@
   std::string create_name =  "Create";
 
   {
-    WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get());
+    WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
     MutableEntry create(
         &trans, CREATE, BOOKMARKS, trans.root_id(), create_name);
     MutableEntry update(&trans, CREATE_NEW_UPDATE_ITEM, update_id);
@@ -1857,19 +714,23 @@
     create_id = create.GetId();
   }
 
-  dir_->SaveChanges();
-  dir_.reset(new Directory(new OnDiskDirectoryBackingStore(kName, file_path_),
-                           &handler_,
-                           NULL,
-                           NULL,
-                           NULL));
+  dir()->SaveChanges();
+  dir().reset(
+      new Directory(new OnDiskDirectoryBackingStore(kDirectoryName, file_path_),
+                    unrecoverable_error_handler(),
+                    NULL,
+                    NULL,
+                    NULL));
 
-  ASSERT_TRUE(dir_.get());
-  ASSERT_EQ(OPENED, dir_->Open(kName, &delegate_, NullTransactionObserver()));
-  ASSERT_TRUE(dir_->good());
+  ASSERT_TRUE(dir().get());
+  ASSERT_EQ(OPENED,
+            dir()->Open(kDirectoryName,
+                        directory_change_delegate(),
+                        NullTransactionObserver()));
+  ASSERT_TRUE(dir()->good());
 
   {
-    ReadTransaction trans(FROM_HERE, dir_.get());
+    ReadTransaction trans(FROM_HERE, dir().get());
     Entry create(&trans, GET_BY_ID, create_id);
     EXPECT_EQ(1, CountEntriesWithName(&trans, trans.root_id(), create_name));
     Entry update(&trans, GET_BY_ID, update_id);
@@ -1941,7 +802,7 @@
   int64 handle1 = 0;
   // Set up an item using a regular, saveable directory.
   {
-    WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get());
+    WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
 
     MutableEntry e1(&trans, CREATE, BOOKMARKS, trans.root_id(), "aguilera");
     ASSERT_TRUE(e1.good());
@@ -1953,12 +814,12 @@
     EXPECT_TRUE(e1.GetKernelCopy().is_dirty());
     EXPECT_TRUE(IsInDirtyMetahandles(handle1));
   }
-  ASSERT_TRUE(dir_->SaveChanges());
+  ASSERT_TRUE(dir()->SaveChanges());
 
   // Make sure the item is no longer dirty after saving,
   // and make a modification.
   {
-    WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get());
+    WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
 
     MutableEntry aguilera(&trans, GET_BY_HANDLE, handle1);
     ASSERT_TRUE(aguilera.good());
@@ -1968,15 +829,15 @@
     EXPECT_TRUE(aguilera.GetKernelCopy().is_dirty());
     EXPECT_TRUE(IsInDirtyMetahandles(handle1));
   }
-  ASSERT_TRUE(dir_->SaveChanges());
+  ASSERT_TRUE(dir()->SaveChanges());
 
   // Now do some operations when SaveChanges() will fail.
   StartFailingSaveChanges();
-  ASSERT_TRUE(dir_->good());
+  ASSERT_TRUE(dir()->good());
 
   int64 handle2 = 0;
   {
-    WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get());
+    WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
 
     MutableEntry aguilera(&trans, GET_BY_HANDLE, handle1);
     ASSERT_TRUE(aguilera.good());
@@ -2002,11 +863,11 @@
 
   // We are using an unsaveable directory, so this can't succeed.  However,
   // the HandleSaveChangesFailure code path should have been triggered.
-  ASSERT_FALSE(dir_->SaveChanges());
+  ASSERT_FALSE(dir()->SaveChanges());
 
   // Make sure things were rolled back and the world is as it was before call.
   {
-     ReadTransaction trans(FROM_HERE, dir_.get());
+    ReadTransaction trans(FROM_HERE, dir().get());
      Entry e1(&trans, GET_BY_HANDLE, handle1);
      ASSERT_TRUE(e1.good());
      EntryKernel aguilera = e1.GetKernelCopy();
@@ -2023,7 +884,7 @@
   int64 handle1 = 0;
   // Set up an item using a regular, saveable directory.
   {
-    WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get());
+    WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
 
     MutableEntry e1(&trans, CREATE, BOOKMARKS, trans.root_id(), "aguilera");
     ASSERT_TRUE(e1.good());
@@ -2040,74 +901,19 @@
     EXPECT_TRUE(e1.GetKernelCopy().is_dirty());
     EXPECT_TRUE(IsInDirtyMetahandles(handle1));
   }
-  ASSERT_TRUE(dir_->SaveChanges());
+  ASSERT_TRUE(dir()->SaveChanges());
 
   // Now do some operations while SaveChanges() is set to fail.
   StartFailingSaveChanges();
-  ASSERT_TRUE(dir_->good());
+  ASSERT_TRUE(dir()->good());
 
   ModelTypeSet set(BOOKMARKS);
-  dir_->PurgeEntriesWithTypeIn(set, ModelTypeSet(), ModelTypeSet());
+  dir()->PurgeEntriesWithTypeIn(set, ModelTypeSet(), ModelTypeSet());
   EXPECT_TRUE(IsInMetahandlesToPurge(handle1));
-  ASSERT_FALSE(dir_->SaveChanges());
+  ASSERT_FALSE(dir()->SaveChanges());
   EXPECT_TRUE(IsInMetahandlesToPurge(handle1));
 }
 
-}  // namespace
-
-void SyncableDirectoryTest::ValidateEntry(BaseTransaction* trans,
-                                          int64 id,
-                                          bool check_name,
-                                          const std::string& name,
-                                          int64 base_version,
-                                          int64 server_version,
-                                          bool is_del) {
-  Entry e(trans, GET_BY_ID, TestIdFactory::FromNumber(id));
-  ASSERT_TRUE(e.good());
-  if (check_name)
-    ASSERT_TRUE(name == e.GetNonUniqueName());
-  ASSERT_TRUE(base_version == e.GetBaseVersion());
-  ASSERT_TRUE(server_version == e.GetServerVersion());
-  ASSERT_TRUE(is_del == e.GetIsDel());
-}
-
-DirOpenResult SyncableDirectoryTest::SimulateSaveAndReloadDir() {
-  if (!dir_->SaveChanges())
-    return FAILED_IN_UNITTEST;
-
-  return ReloadDirImpl();
-}
-
-DirOpenResult SyncableDirectoryTest::SimulateCrashAndReloadDir() {
-  return ReloadDirImpl();
-}
-
-DirOpenResult SyncableDirectoryTest::ReloadDirImpl() {
-  // Do some tricky things to preserve the backing store.
-  DirectoryBackingStore* saved_store = dir_->store_.release();
-
-  // Close the current directory.
-  dir_->Close();
-  dir_.reset();
-
-  dir_.reset(new Directory(saved_store,
-                           &handler_,
-                           NULL,
-                           NULL,
-                           NULL));
-  DirOpenResult result = dir_->OpenImpl(kName, &delegate_,
-                                        NullTransactionObserver());
-
-  // If something went wrong, we need to clear this member.  If we don't,
-  // TearDown() will be guaranteed to crash when it calls SaveChanges().
-  if (result != OPENED)
-    dir_.reset();
-
-  return result;
-}
-
-namespace {
-
 class SyncableDirectoryManagement : public testing::Test {
  public:
   virtual void SetUp() {
@@ -2125,14 +931,14 @@
 };
 
 TEST_F(SyncableDirectoryManagement, TestFileRelease) {
-  base::FilePath path = temp_dir_.path().Append(
-      Directory::kSyncDatabaseFilename);
+  base::FilePath path =
+      temp_dir_.path().Append(Directory::kSyncDatabaseFilename);
 
-  syncable::Directory dir(new OnDiskDirectoryBackingStore("ScopeTest", path),
-                          &handler_,
-                          NULL,
-                          NULL,
-                          NULL);
+  Directory dir(new OnDiskDirectoryBackingStore("ScopeTest", path),
+                &handler_,
+                NULL,
+                NULL,
+                NULL);
   DirOpenResult result =
       dir.Open("ScopeTest", &delegate_, NullTransactionObserver());
   ASSERT_EQ(result, OPENED);
@@ -2145,8 +951,7 @@
 class StressTransactionsDelegate : public base::PlatformThread::Delegate {
  public:
   StressTransactionsDelegate(Directory* dir, int thread_number)
-      : dir_(dir),
-        thread_number_(thread_number) {}
+      : dir_(dir), thread_number_(thread_number) {}
 
  private:
   Directory* const dir_;
@@ -2226,7 +1031,7 @@
   SyncableClientTagTest() : test_name_("test_name"), test_tag_("dietcoke") {}
 
   bool CreateWithDefaultTag(Id id, bool deleted) {
-    WriteTransaction wtrans(FROM_HERE, UNITTEST, dir_.get());
+    WriteTransaction wtrans(FROM_HERE, UNITTEST, dir().get());
     MutableEntry me(&wtrans, CREATE, PREFERENCES,
                     wtrans.root_id(), test_name_);
     CHECK(me.good());
@@ -2243,7 +1048,7 @@
   // Verify an entry exists with the default tag.
   void VerifyTag(Id id, bool deleted) {
     // Should still be present and valid in the client tag index.
-    ReadTransaction trans(FROM_HERE, dir_.get());
+    ReadTransaction trans(FROM_HERE, dir().get());
     Entry me(&trans, GET_BY_CLIENT_TAG, test_tag_);
     CHECK(me.good());
     EXPECT_EQ(me.GetId(), id);
@@ -2264,13 +1069,13 @@
   Id server_id = factory_.NewServerId();
   EXPECT_TRUE(CreateWithDefaultTag(server_id, false));
   {
-    WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get());
+    WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
     MutableEntry me(&trans, GET_BY_CLIENT_TAG, test_tag_);
     EXPECT_TRUE(me.good());
     me.PutUniqueClientTag(std::string());
   }
   {
-    ReadTransaction trans(FROM_HERE, dir_.get());
+    ReadTransaction trans(FROM_HERE, dir().get());
     Entry by_tag(&trans, GET_BY_CLIENT_TAG, test_tag_);
     EXPECT_FALSE(by_tag.good());
 
@@ -2312,6 +1117,5 @@
   EXPECT_FALSE(CreateWithDefaultTag(factory_.NewLocalId(), true));
 }
 
-}  // namespace
 }  // namespace syncable
 }  // namespace syncer
diff --git a/sync/test/fake_server/fake_server.cc b/sync/test/fake_server/fake_server.cc
index 3827a85..d758e5d 100644
--- a/sync/test/fake_server/fake_server.cc
+++ b/sync/test/fake_server/fake_server.cc
@@ -32,6 +32,7 @@
 using base::AutoLock;
 using syncer::GetModelType;
 using syncer::ModelType;
+using syncer::ModelTypeSet;
 
 // The default birthday value.
 static const char kDefaultBirthday[] = "1234567890";
@@ -98,7 +99,7 @@
 
   // Returns the data type IDs of types being synced for the first time.
   vector<ModelType> GetFirstTimeTypes(
-      syncer::ModelTypeSet created_permanent_entity_types) const {
+      ModelTypeSet created_permanent_entity_types) const {
     vector<ModelType> types;
 
     ModelTypeToVersionMap::const_iterator it;
@@ -171,7 +172,7 @@
     const vector<ModelType>& first_time_types) {
   for (vector<ModelType>::const_iterator it = first_time_types.begin();
        it != first_time_types.end(); ++it) {
-    if (!syncer::ModelTypeSet::All().Has(*it)) {
+    if (!ModelTypeSet::All().Has(*it)) {
       NOTREACHED() << "An unexpected ModelType was encountered.";
     }
 
@@ -456,4 +457,36 @@
   return true;
 }
 
+scoped_ptr<base::DictionaryValue> FakeServer::GetEntitiesAsDictionaryValue() {
+  scoped_ptr<base::DictionaryValue> dictionary(new base::DictionaryValue());
+
+  // Initialize an empty ListValue for all ModelTypes.
+  ModelTypeSet all_types = ModelTypeSet::All();
+  for (ModelTypeSet::Iterator it = all_types.First(); it.Good(); it.Inc()) {
+    dictionary->Set(ModelTypeToString(it.Get()), new base::ListValue());
+  }
+
+  for (EntityMap::const_iterator it = entities_.begin(); it != entities_.end();
+       ++it) {
+    FakeServerEntity* entity = it->second;
+    if (entity->IsDeleted() || entity->IsFolder()) {
+      // Tombstones are ignored as they don't represent current data. Folders
+      // are also ignored as current verification infrastructure does not
+      // consider them.
+      continue;
+    }
+    base::ListValue* list_value;
+    if (!dictionary->GetList(ModelTypeToString(entity->GetModelType()),
+                                               &list_value)) {
+      return scoped_ptr<base::DictionaryValue>();
+    }
+    // TODO(pvalenzuela): Store more data for each entity so additional
+    // verification can be performed. One example of additional verification
+    // is checking the correctness of the bookmark hierarchy.
+    list_value->Append(new base::StringValue(entity->GetName()));
+  }
+
+  return dictionary.Pass();
+}
+
 }  // namespace fake_server
diff --git a/sync/test/fake_server/fake_server.h b/sync/test/fake_server/fake_server.h
index a13cc98..0621bbc 100644
--- a/sync/test/fake_server/fake_server.h
+++ b/sync/test/fake_server/fake_server.h
@@ -11,6 +11,7 @@
 #include "base/basictypes.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/synchronization/lock.h"
+#include "base/values.h"
 #include "sync/internal_api/public/base/model_type.h"
 #include "sync/protocol/sync.pb.h"
 #include "sync/test/fake_server/fake_server_entity.h"
@@ -30,6 +31,12 @@
                     int* response_code,
                     std::string* response);
 
+  // Creates a DicionaryValue representation of all entities present in the
+  // server. The dictionary keys are the strings generated by ModelTypeToString
+  // and the values are ListValues containing StringValue versions of entity
+  // names.
+  scoped_ptr<base::DictionaryValue> GetEntitiesAsDictionaryValue();
+
  private:
   typedef std::map<std::string, FakeServerEntity*> EntityMap;
 
diff --git a/sync/test/fake_server/fake_server_verifier.cc b/sync/test/fake_server/fake_server_verifier.cc
new file mode 100644
index 0000000..9c02075
--- /dev/null
+++ b/sync/test/fake_server/fake_server_verifier.cc
@@ -0,0 +1,99 @@
+// 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.
+
+#include "sync/test/fake_server/fake_server_verifier.h"
+
+#include "base/memory/scoped_ptr.h"
+#include "base/values.h"
+#include "sync/internal_api/public/base/model_type.h"
+#include "sync/test/fake_server/fake_server.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+using std::string;
+using testing::AssertionFailure;
+using testing::AssertionResult;
+using testing::AssertionSuccess;
+
+namespace {
+
+AssertionResult DictionaryCreationAssertionFailure() {
+  return AssertionFailure() << "FakeServer failed to create an entities "
+                            << "dictionary.";
+}
+
+AssertionResult VerificationCountAssertionFailure(size_t actual_count,
+                                                  size_t expected_count) {
+  return AssertionFailure() << "Actual count: " << actual_count << "; "
+                            << "Expected count: " << expected_count;
+}
+
+AssertionResult UnknownTypeAssertionFailure(const string& model_type) {
+  return AssertionFailure() << "Verification not attempted. Unknown ModelType: "
+                            << model_type;
+}
+
+}  // namespace
+
+namespace fake_server {
+
+FakeServerVerifier::FakeServerVerifier(FakeServer* fake_server)
+    : fake_server_(fake_server) { }
+
+FakeServerVerifier::~FakeServerVerifier() {}
+
+AssertionResult FakeServerVerifier::VerifyEntityCountByType(
+    size_t expected_count,
+    syncer::ModelType model_type) const {
+  scoped_ptr<base::DictionaryValue> entities =
+      fake_server_->GetEntitiesAsDictionaryValue();
+  if (!entities.get()) {
+    return DictionaryCreationAssertionFailure();
+  }
+
+  string model_type_string = ModelTypeToString(model_type);
+  base::ListValue* entity_list = NULL;
+  if (!entities->GetList(model_type_string, &entity_list)) {
+    return UnknownTypeAssertionFailure(model_type_string);
+  } else if  (expected_count != entity_list->GetSize()) {
+    return VerificationCountAssertionFailure(entity_list->GetSize(),
+                                             expected_count);
+  }
+
+  return AssertionSuccess();
+}
+
+AssertionResult FakeServerVerifier::VerifyEntityCountByTypeAndName(
+    size_t expected_count,
+    syncer::ModelType model_type,
+    const string& name) const {
+  scoped_ptr<base::DictionaryValue> entities =
+      fake_server_->GetEntitiesAsDictionaryValue();
+  if (!entities.get()) {
+    return DictionaryCreationAssertionFailure();
+  }
+
+  string model_type_string = ModelTypeToString(model_type);
+  base::ListValue* entity_list = NULL;
+  size_t actual_count = 0;
+  if (entities->GetList(model_type_string, &entity_list)) {
+    scoped_ptr<base::Value> name_value(new base::StringValue(name));
+    for (base::ListValue::const_iterator it = entity_list->begin();
+         it != entity_list->end(); ++it) {
+      if (name_value->Equals(*it)) {
+        actual_count++;
+      }
+    }
+  }
+
+  if (!entity_list) {
+    return UnknownTypeAssertionFailure(model_type_string);
+  } else if (actual_count != expected_count) {
+    return VerificationCountAssertionFailure(actual_count, expected_count)
+        << "; Name: " << name;
+  }
+
+  return AssertionSuccess();
+}
+
+}  // namespace fake_server
diff --git a/sync/test/fake_server/fake_server_verifier.h b/sync/test/fake_server/fake_server_verifier.h
new file mode 100644
index 0000000..c214286
--- /dev/null
+++ b/sync/test/fake_server/fake_server_verifier.h
@@ -0,0 +1,53 @@
+// 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.
+
+#ifndef SYNC_TEST_FAKE_SERVER_FAKE_SERVER_VERIFIER_H_
+#define SYNC_TEST_FAKE_SERVER_FAKE_SERVER_VERIFIER_H_
+
+#include <string>
+
+#include "base/memory/scoped_ptr.h"
+#include "base/values.h"
+#include "sync/internal_api/public/base/model_type.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace fake_server {
+
+class FakeServer;
+
+// Provides methods to verify the state of a FakeServer. The main use case of
+// this class is verifying committed data so that it does not have to be synced
+// down to another test client for verification. These methods are not present
+// on FakeServer so that its interface is not polluted.
+class FakeServerVerifier {
+ public:
+  // Creates a FakeServerVerifier for |fake_server|. This class does not take
+  // ownership of |fake_server|.
+  explicit FakeServerVerifier(FakeServer* fake_server);
+  virtual ~FakeServerVerifier();
+
+  // Returns a successful result if there are |expected_count| entities with the
+  // given |model_type|. A failure is returned if the count does not match or
+  // verification can't take place.
+  testing::AssertionResult VerifyEntityCountByType(
+      size_t expected_count,
+      syncer::ModelType model_type) const;
+
+  // Returns a successful result if there are |expected_count| entities with the
+  // given |model_type| and |name|. A failure is returned if the count does not
+  // match or verification can't take place.
+  testing::AssertionResult VerifyEntityCountByTypeAndName(
+      size_t expected_count,
+      syncer::ModelType model_type,
+      const std::string& name) const;
+
+ private:
+  FakeServer* const fake_server_;
+
+  DISALLOW_COPY_AND_ASSIGN(FakeServerVerifier);
+};
+
+}  // namespace fake_server
+
+#endif  // SYNC_TEST_FAKE_SERVER_FAKE_SERVER_VERIFIER_H_
diff --git a/sync/tools/null_invalidation_state_tracker.cc b/sync/tools/null_invalidation_state_tracker.cc
index 6823759..d7f949f 100644
--- a/sync/tools/null_invalidation_state_tracker.cc
+++ b/sync/tools/null_invalidation_state_tracker.cc
@@ -17,7 +17,7 @@
 NullInvalidationStateTracker::NullInvalidationStateTracker() {}
 NullInvalidationStateTracker::~NullInvalidationStateTracker() {}
 
-void NullInvalidationStateTracker::SetInvalidatorClientId(
+void NullInvalidationStateTracker::ClearAndSetNewClientId(
     const std::string& data) {
   LOG(INFO) << "Setting invalidator client ID to: " << data;
 }
diff --git a/sync/tools/null_invalidation_state_tracker.h b/sync/tools/null_invalidation_state_tracker.h
index a12844c..a08fe7d 100644
--- a/sync/tools/null_invalidation_state_tracker.h
+++ b/sync/tools/null_invalidation_state_tracker.h
@@ -18,7 +18,7 @@
   NullInvalidationStateTracker();
   virtual ~NullInvalidationStateTracker();
 
-  virtual void SetInvalidatorClientId(const std::string& data) OVERRIDE;
+  virtual void ClearAndSetNewClientId(const std::string& data) OVERRIDE;
   virtual std::string GetInvalidatorClientId() const OVERRIDE;
 
   virtual std::string GetBootstrapData() const OVERRIDE;
diff --git a/sync/tools/sync_client.cc b/sync/tools/sync_client.cc
index 953df92..5953871 100644
--- a/sync/tools/sync_client.cc
+++ b/sync/tools/sync_client.cc
@@ -41,7 +41,6 @@
 #include "sync/internal_api/public/util/weak_handle.h"
 #include "sync/js/js_event_details.h"
 #include "sync/js/js_event_handler.h"
-#include "sync/notifier/invalidation_state_tracker.h"
 #include "sync/notifier/non_blocking_invalidator.h"
 #include "sync/test/fake_encryptor.h"
 #include "sync/tools/null_invalidation_state_tracker.h"
@@ -280,8 +279,7 @@
       invalidator_id,
       null_invalidation_state_tracker.GetSavedInvalidations(),
       null_invalidation_state_tracker.GetBootstrapData(),
-      WeakHandle<InvalidationStateTracker>(
-          null_invalidation_state_tracker.AsWeakPtr()),
+      &null_invalidation_state_tracker,
       kClientInfo,
       notifier_options.request_context_getter));
 
diff --git a/sync/tools/sync_listen_notifications.cc b/sync/tools/sync_listen_notifications.cc
index b4e45e6..6a9a505 100644
--- a/sync/tools/sync_listen_notifications.cc
+++ b/sync/tools/sync_listen_notifications.cc
@@ -192,8 +192,7 @@
           base::RandBytesAsString(8),
           null_invalidation_state_tracker.GetSavedInvalidations(),
           null_invalidation_state_tracker.GetBootstrapData(),
-          WeakHandle<InvalidationStateTracker>(
-              null_invalidation_state_tracker.AsWeakPtr()),
+          &null_invalidation_state_tracker,
           kClientInfo,
           notifier_options.request_context_getter));
 
diff --git a/sync/tools/testserver/chromiumsync.py b/sync/tools/testserver/chromiumsync.py
index 1e87042..661366a 100644
--- a/sync/tools/testserver/chromiumsync.py
+++ b/sync/tools/testserver/chromiumsync.py
@@ -1196,12 +1196,7 @@
     entity.parent_id_string = self._ServerTagToId(
         'google_chrome_synced_notifications')
     entity.name = 'Synced notification added for testing'
-
-    # Set the version to one more than the greatest version number already seen.
-    entries = sorted(self._entries.values(), key=operator.attrgetter('version'))
-    if len(entries) < 1:
-      raise ClientNotConnectedError
-    entity.version = entries[-1].version + 1
+    entity.version = self._GetNextVersionNumber()
 
     entity.client_defined_unique_tag = self._CreateSyncedNotificationClientTag(
         specifics.synced_notification.coalesced_notification.key)
@@ -1212,6 +1207,13 @@
 
     return google.protobuf.text_format.MessageToString(entity)
 
+  def _GetNextVersionNumber(self):
+    """Set the version to one more than the greatest version number seen."""
+    entries = sorted(self._entries.values(), key=operator.attrgetter('version'))
+    if len(entries) < 1:
+      raise ClientNotConnectedError
+    return entries[-1].version + 1
+
   def _CreateSyncedNotificationEntitySpecifics(self, unique_id,
                                                serialized_notification):
     """Create the EntitySpecifics proto for a synced notification."""
@@ -1244,6 +1246,66 @@
     hash_input = serialized_type.SerializeToString() + key
     return base64.b64encode(hashlib.sha1(hash_input).digest())
 
+  def AddSyncedNotificationAppInfo(self, app_info):
+    """Adds an app info struct to the server data.
+
+    The notification will be delivered to the client on the next GetUpdates
+    call.
+
+    Args:
+      app_info: A serialized AppInfo.
+
+    Returns:
+      The string representation of the added SyncEntity.
+
+    Raises:
+      ClientNotConnectedError: if the client has not yet connected to this
+      server
+    """
+    specifics = self._CreateSyncedNotificationAppInfoEntitySpecifics(app_info)
+
+    # Create the root SyncEntity representing a single app info protobuf.
+    entity = sync_pb2.SyncEntity()
+    entity.specifics.CopyFrom(specifics)
+    entity.parent_id_string = self._ServerTagToId(
+        'google_chrome_synced_notification_app_info')
+    entity.name = 'App info added for testing'
+    entity.version = self._GetNextVersionNumber()
+
+    # App Infos do not have a strong id, it only needs to be unique.
+    entity.client_defined_unique_tag = "foo"
+    entity.id_string = "foo"
+
+    self._entries[entity.id_string] = copy.deepcopy(entity)
+
+    print "entity before exit is ", entity
+
+    return google.protobuf.text_format.MessageToString(entity)
+
+  def _CreateSyncedNotificationAppInfoEntitySpecifics(
+    self, synced_notification_app_info):
+    """Create the EntitySpecifics proto for a synced notification app info."""
+    # Create a single, empty app_info object
+    app_info = \
+      synced_notification_app_info_specifics_pb2.SyncedNotificationAppInfo()
+    # Fill the app_info object from the text format protobuf.
+    google.protobuf.text_format.Merge(synced_notification_app_info, app_info)
+
+    # Create a new specifics object with a contained app_info
+    specifics = sync_pb2.EntitySpecifics()
+    app_info_specifics = \
+        synced_notification_app_info_specifics_pb2.\
+        SyncedNotificationAppInfoSpecifics()
+
+    # Copy the app info from the text format protobuf
+    contained_app_info = app_info_specifics.synced_notification_app_info.add()
+    contained_app_info.CopyFrom(app_info)
+
+    # And put the new app_info_specifics into the specifics before returning.
+    specifics.synced_notification_app_info.CopyFrom(app_info_specifics)
+
+    return specifics
+
 class TestServer(object):
   """An object to handle requests for one (and only one) Chrome Sync account.
 
diff --git a/sync/tools/testserver/sync_testserver.py b/sync/tools/testserver/sync_testserver.py
index 5954e01..66789ea 100755
--- a/sync/tools/testserver/sync_testserver.py
+++ b/sync/tools/testserver/sync_testserver.py
@@ -156,6 +156,8 @@
                     self.GaiaSetOAuth2TokenResponseHandler,
                     self.TriggerSyncedNotificationHandler,
                     self.SyncedNotificationsPageHandler,
+                    self.TriggerSyncedNotificationAppInfoHandler,
+                    self.SyncedNotificationsAppInfoPageHandler,
                     self.CustomizeClientCommandHandler]
 
     post_handlers = [self.ChromiumSyncCommandHandler,
@@ -532,6 +534,37 @@
     self.wfile.write(reply)
     return True
 
+  def TriggerSyncedNotificationAppInfoHandler(self):
+    test_name = "/triggersyncednotificationappinfo"
+    if not self._ShouldHandleRequest(test_name):
+      return False
+
+    query = urlparse.urlparse(self.path)[4]
+    query_params = urlparse.parse_qs(query)
+
+    app_info = ''
+
+    if 'synced_notification_app_info' in query_params:
+      app_info = query_params['synced_notification_app_info'][0]
+
+    try:
+      app_info_string = self.server._sync_handler.account \
+          .AddSyncedNotificationAppInfo(app_info)
+      reply = "A synced notification app info was sent:\n\n"
+      reply += "<code>{}</code>.".format(app_info_string)
+      response_code = 200
+    except chromiumsync.ClientNotConnectedError:
+      reply = ('The client is not connected to the server, so the app info'
+               ' could not be created.')
+      response_code = 400
+
+    self.send_response(response_code)
+    self.send_header('Content-Type', 'text/html')
+    self.send_header('Content-Length', len(reply))
+    self.end_headers()
+    self.wfile.write(reply)
+    return True
+
   def CustomizeClientCommandHandler(self):
     test_name = "/customizeclientcommand"
     if not self._ShouldHandleRequest(test_name):
@@ -576,6 +609,21 @@
     self.wfile.write(html)
     return True
 
+  def SyncedNotificationsAppInfoPageHandler(self):
+    test_name = "/syncednotificationsappinfo"
+    if not self._ShouldHandleRequest(test_name):
+      return False
+
+    html = \
+      open('sync/tools/testserver/synced_notification_app_info.html', 'r').\
+      read()
+
+    self.send_response(200)
+    self.send_header('Content-Type', 'text/html')
+    self.send_header('Content-Length', len(html))
+    self.end_headers()
+    self.wfile.write(html)
+    return True
 
 class SyncServerRunner(testserver_base.TestServerRunner):
   """TestServerRunner for the net test servers."""
diff --git a/sync/tools/testserver/synced_notifications.html b/sync/tools/testserver/synced_notifications.html
index c06f80b..10cac30 100644
--- a/sync/tools/testserver/synced_notifications.html
+++ b/sync/tools/testserver/synced_notifications.html
@@ -47,5 +47,23 @@
           '  }\n' +
           '}');
     </script>
+    <br/>
+    <script type="text/javascript">
+      appendNotificationLink('New Service notification',
+          'key: \"foo\"\n' +
+          'app_id: \"maps_street_view\"\n' +
+          'priority: 2\n' +
+          'read_state: 1\n' +
+          'render_info {\n' +
+          '  collapsed_info {\n' +
+          '    creation_timestamp_usec: 42\n' +
+          '    simple_collapsed_layout {\n' +
+          '        annotation: \"787 6th Street South\"\n' +
+          '        description: \"Building B\"\n' +
+          '        heading: \"Google Kirkland\"\n' +
+          '    }\n' +
+          '  }\n' +
+          '}');
+    </script>
   </body>
 </html>
diff --git a/sync/tools/testserver/synced_notifications_app_info.html b/sync/tools/testserver/synced_notifications_app_info.html
new file mode 100644
index 0000000..42cbd12
--- /dev/null
+++ b/sync/tools/testserver/synced_notifications_app_info.html
@@ -0,0 +1,49 @@
+<html>
+  <head>
+    <title>Synced notification App Info</title>
+
+    <script type="text/javascript">
+      // Creates link (appended to the bottom of the page body) to trigger a
+      // new synced notification app info.  The link's title will be |title|
+      // and the ASCII-serialized app info will be
+      // |synced_notification_app_info|.
+      function appendSyncedNotificationAppInfoLink(title, app_info) {
+        var link = document.createElement('a');
+        link.innerHTML = title;
+        link.setAttribute('target', '_blank');
+        link.setAttribute('href', 'triggersyncednotificationappinfo?' +
+        'synced_notification_app_info=' +
+        encodeURIComponent(app_info));
+        document.body.appendChild(link);
+      }
+    </script>
+  </head>
+
+  <body>
+    <h1>Synced Notification App Info</h1>
+
+    <h2>Step 0: Sign in to the browser and set up Sync</h2>
+
+    <h2>Step 1: Click this link (only required once per server lifetime)</h2>
+
+    <a href="/customizeclientcommand?sessions_commit_delay_seconds=0">
+        Make synced notification app info triggering instant</a>
+
+    <h2>Step 2: Ctrl-Click the link below to send a synced notification app info</h2>
+
+    <script type="text/javascript">
+      // JSON version of an app info protobuf
+      appendSyncedNotificationAppInfoLink(
+        'Simple SyncedNotificationAppInfo',
+        'settings_display_name: \"Google Maps\"\n' +
+        'icon: {\n' +
+        '  alt_text: \"Google Maps\"\n' +
+        '  preferred_height: 80\n' +
+        '  preferred_width: 80\n' +
+        '  url: \"https://ssl.gstatic.com/s2/oz/images/notifications/app_icons/system-gplus_62d72f2ec5e1ef193f0dfa600eabcfeb.png\"\n' +
+        '}\n' +
+        'app_id: \"maps_street_view\"\n' +
+        'app_id: \"maps_earth_view\"\n');
+    </script>
+  </body>
+</html>
diff --git a/testing/buildbot/chromium.chromiumos.json b/testing/buildbot/chromium.chromiumos.json
index f54e648..e9797eb 100644
--- a/testing/buildbot/chromium.chromiumos.json
+++ b/testing/buildbot/chromium.chromiumos.json
@@ -22,7 +22,7 @@
       "sandbox_linux_unittests",
       "ui_unittests",
       "views_unittests",
-      "wm_core_unittests",
+      "wm_unittests",
       "aura_unittests",
       "ash_unittests",
       "app_list_unittests",
@@ -39,7 +39,8 @@
     "gtest_tests": [
       "interactive_ui_tests",
       "browser_tests",
-      "content_browsertests"
+      "content_browsertests",
+      "app_shell_browsertests"
     ]
   },
   "Linux ChromiumOS Tests (dbg)(1)": {
@@ -64,7 +65,7 @@
       "sandbox_linux_unittests",
       "ui_unittests",
       "views_unittests",
-      "wm_core_unittests",
+      "wm_unittests",
       "aura_unittests",
       "ash_unittests",
       "app_list_unittests",
@@ -80,7 +81,8 @@
   "Linux ChromiumOS Tests (dbg)(2)": {
     "gtest_tests": [
       "browser_tests",
-      "content_browsertests"
+      "content_browsertests",
+      "app_shell_browsertests"
     ]
   },
   "Linux ChromiumOS Tests (dbg)(3)": {
diff --git a/testing/buildbot/chromium.linux.json b/testing/buildbot/chromium.linux.json
index 6616686..8195c87 100644
--- a/testing/buildbot/chromium.linux.json
+++ b/testing/buildbot/chromium.linux.json
@@ -33,7 +33,7 @@
       "sync_unit_tests",
       "unit_tests",
       "views_unittests",
-      "wm_core_unittests",
+      "wm_unittests",
       "sql_unittests",
       "browser_tests",
       "content_browsertests",
@@ -131,7 +131,7 @@
       "sync_unit_tests",
       "unit_tests",
       "views_unittests",
-      "wm_core_unittests",
+      "wm_unittests",
       "sql_unittests",
       "webkit_compositor_bindings_unittests",
       "mojo_apps_js_unittests",
@@ -185,7 +185,7 @@
       "sync_unit_tests",
       "unit_tests",
       "views_unittests",
-      "wm_core_unittests",
+      "wm_unittests",
       "sql_unittests",
       "webkit_compositor_bindings_unittests",
       "mojo_apps_js_unittests",
diff --git a/testing/buildbot/chromium.win.json b/testing/buildbot/chromium.win.json
index 11e695d..9f3ab61 100644
--- a/testing/buildbot/chromium.win.json
+++ b/testing/buildbot/chromium.win.json
@@ -31,7 +31,7 @@
       "base_unittests",
       "net_unittests",
       "views_unittests",
-      "wm_core_unittests",
+      "wm_unittests",
       "aura_unittests",
       "ash_unittests",
       "compositor_unittests",
@@ -51,7 +51,7 @@
       "ui_unittests",
       "content_unittests",
       "views_unittests",
-      "wm_core_unittests",
+      "wm_unittests",
       {"test": "browser_tests", "shard_index": 2, "total_shards": 3}
     ]
   },
@@ -87,7 +87,7 @@
       "base_unittests",
       "net_unittests",
       "views_unittests",
-      "wm_core_unittests",
+      "wm_unittests",
       "aura_unittests",
       "ash_unittests",
       "compositor_unittests",
@@ -107,7 +107,7 @@
       "ui_unittests",
       "content_unittests",
       "views_unittests",
-      "wm_core_unittests",
+      "wm_unittests",
       {"test": "browser_tests", "shard_index": 2, "total_shards": 3}
     ]
   },
@@ -143,7 +143,7 @@
       "base_unittests",
       "net_unittests",
       "views_unittests",
-      "wm_core_unittests",
+      "wm_unittests",
       "aura_unittests",
       "ash_unittests",
       "compositor_unittests",
@@ -163,7 +163,7 @@
       "ui_unittests",
       "content_unittests",
       "views_unittests",
-      "wm_core_unittests",
+      "wm_unittests",
       {"test": "browser_tests", "shard_index": 2, "total_shards": 3}
     ]
   },
@@ -208,7 +208,7 @@
       "content_unittests",
       "ui_unittests",
       "views_unittests",
-      "wm_core_unittests",
+      "wm_unittests",
       "ipc_tests",
       "sync_unit_tests",
       "unit_tests",
@@ -245,7 +245,7 @@
       "ui_unittests",
       "content_unittests",
       "views_unittests",
-      "wm_core_unittests",
+      "wm_unittests",
       "installer_util_unittests",
       "webkit_compositor_bindings_unittests"
     ]
@@ -288,7 +288,7 @@
   "Win8 Aura": {
     "gtest_tests": [
       "views_unittests",
-      "wm_core_unittests",
+      "wm_unittests",
       "aura_unittests",
       "ash_unittests",
       "compositor_unittests",
diff --git a/testing/buildbot/chromium_trybot.json b/testing/buildbot/chromium_trybot.json
index 65bd064..0de64e4 100644
--- a/testing/buildbot/chromium_trybot.json
+++ b/testing/buildbot/chromium_trybot.json
@@ -1,7 +1,10 @@
 [
   "app_list_unittests",
   "base_unittests",
-  "browser_tests",
+  {
+    "test": "browser_tests",
+    "exclude_builders": ["tryserver.chromium:win_chromium_x64_rel"]
+  },
   "cacheinvalidation_unittests",
   "cc_unittests",
   "chromedriver_unittests",
@@ -14,7 +17,10 @@
   "gfx_unittests",
   "google_apis_unittests",
   "gpu_unittests",
-  "interactive_ui_tests",
+  {
+    "test": "interactive_ui_tests",
+    "exclude_builders": ["tryserver.chromium:win_chromium_x64_rel"]
+  },
   "ipc_tests",
   "jingle_unittests",
   "media_unittests",
@@ -38,6 +44,10 @@
   "ui_unittests",
   "unit_tests",
   {
+    "test": "app_shell_browsertests",
+    "chromium_configs": ["chromium_chromeos", "chromium_chromeos_clang"]
+  },
+  {
     "test": "sandbox_linux_unittests",
     "platforms": ["linux"],
     "args": ["--test-launcher-print-test-stdio=always"]
diff --git a/third_party/brotli/brotli.target.darwin-arm.mk b/third_party/brotli/brotli.target.darwin-arm.mk
index 635a5de..43031f9 100644
--- a/third_party/brotli/brotli.target.darwin-arm.mk
+++ b/third_party/brotli/brotli.target.darwin-arm.mk
@@ -223,7 +223,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/brotli/brotli.target.darwin-mips.mk b/third_party/brotli/brotli.target.darwin-mips.mk
index 6812bfd..ce8b827 100644
--- a/third_party/brotli/brotli.target.darwin-mips.mk
+++ b/third_party/brotli/brotli.target.darwin-mips.mk
@@ -221,7 +221,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/brotli/brotli.target.darwin-x86.mk b/third_party/brotli/brotli.target.darwin-x86.mk
index 15dd60f..b26c4fc 100644
--- a/third_party/brotli/brotli.target.darwin-x86.mk
+++ b/third_party/brotli/brotli.target.darwin-x86.mk
@@ -221,7 +221,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/brotli/brotli.target.darwin-x86_64.mk b/third_party/brotli/brotli.target.darwin-x86_64.mk
index 94b4ad5..29477f2 100644
--- a/third_party/brotli/brotli.target.darwin-x86_64.mk
+++ b/third_party/brotli/brotli.target.darwin-x86_64.mk
@@ -221,7 +221,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/brotli/brotli.target.linux-arm.mk b/third_party/brotli/brotli.target.linux-arm.mk
index 635a5de..43031f9 100644
--- a/third_party/brotli/brotli.target.linux-arm.mk
+++ b/third_party/brotli/brotli.target.linux-arm.mk
@@ -223,7 +223,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/brotli/brotli.target.linux-mips.mk b/third_party/brotli/brotli.target.linux-mips.mk
index 6812bfd..ce8b827 100644
--- a/third_party/brotli/brotli.target.linux-mips.mk
+++ b/third_party/brotli/brotli.target.linux-mips.mk
@@ -221,7 +221,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/brotli/brotli.target.linux-x86.mk b/third_party/brotli/brotli.target.linux-x86.mk
index 15dd60f..b26c4fc 100644
--- a/third_party/brotli/brotli.target.linux-x86.mk
+++ b/third_party/brotli/brotli.target.linux-x86.mk
@@ -221,7 +221,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/brotli/brotli.target.linux-x86_64.mk b/third_party/brotli/brotli.target.linux-x86_64.mk
index 94b4ad5..29477f2 100644
--- a/third_party/brotli/brotli.target.linux-x86_64.mk
+++ b/third_party/brotli/brotli.target.linux-x86_64.mk
@@ -221,7 +221,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/clang_format/README.chromium b/third_party/clang_format/README.chromium
index cdcca30..56cc631 100644
--- a/third_party/clang_format/README.chromium
+++ b/third_party/clang_format/README.chromium
@@ -2,7 +2,7 @@
 Short Name: clang-format
 URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-format/
 Version: 3.5
-Date: 26 February 2014
+Date: 11 April 2014
 Revision: See DEPS
 License: University of Illinois/NCSA Open Source License
 License File: NOT_SHIPPED
diff --git a/third_party/clang_format/bin/linux/clang-format.sha1 b/third_party/clang_format/bin/linux/clang-format.sha1
index ae8c35c..fffa354 100644
--- a/third_party/clang_format/bin/linux/clang-format.sha1
+++ b/third_party/clang_format/bin/linux/clang-format.sha1
@@ -1 +1 @@
-48ccf5e8701c112e9ae7169b6e5a780258027be6
\ No newline at end of file
+b26f74f07f51a99d79d34be57a28bc82dee42854
\ No newline at end of file
diff --git a/third_party/clang_format/bin/mac/clang-format.sha1 b/third_party/clang_format/bin/mac/clang-format.sha1
index 96e714a..ef60420 100644
--- a/third_party/clang_format/bin/mac/clang-format.sha1
+++ b/third_party/clang_format/bin/mac/clang-format.sha1
@@ -1 +1 @@
-b31a17e2f40169b658d23eae647814f92906d06c
\ No newline at end of file
+ce0718a133a059aca5da5f307a36bbc310df3e12
\ No newline at end of file
diff --git a/third_party/clang_format/bin/win/clang-format.exe.sha1 b/third_party/clang_format/bin/win/clang-format.exe.sha1
index 44a55d4..f25110d 100644
--- a/third_party/clang_format/bin/win/clang-format.exe.sha1
+++ b/third_party/clang_format/bin/win/clang-format.exe.sha1
@@ -1 +1 @@
-41ed9868a4557bc48a41e7ee3d903ab5194c49aa
\ No newline at end of file
+fc8a7cd2219eaa70daa01173844fad4c815394d7
\ No newline at end of file
diff --git a/third_party/harfbuzz-ng/harfbuzz-ng.target.darwin-arm.mk b/third_party/harfbuzz-ng/harfbuzz-ng.target.darwin-arm.mk
index 68288fd..f82ebb6 100644
--- a/third_party/harfbuzz-ng/harfbuzz-ng.target.darwin-arm.mk
+++ b/third_party/harfbuzz-ng/harfbuzz-ng.target.darwin-arm.mk
@@ -266,7 +266,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/harfbuzz-ng/harfbuzz-ng.target.darwin-mips.mk b/third_party/harfbuzz-ng/harfbuzz-ng.target.darwin-mips.mk
index 4bc268c..7ec650b 100644
--- a/third_party/harfbuzz-ng/harfbuzz-ng.target.darwin-mips.mk
+++ b/third_party/harfbuzz-ng/harfbuzz-ng.target.darwin-mips.mk
@@ -264,7 +264,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/harfbuzz-ng/harfbuzz-ng.target.darwin-x86.mk b/third_party/harfbuzz-ng/harfbuzz-ng.target.darwin-x86.mk
index 6771b00..0cf3898 100644
--- a/third_party/harfbuzz-ng/harfbuzz-ng.target.darwin-x86.mk
+++ b/third_party/harfbuzz-ng/harfbuzz-ng.target.darwin-x86.mk
@@ -264,7 +264,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/harfbuzz-ng/harfbuzz-ng.target.darwin-x86_64.mk b/third_party/harfbuzz-ng/harfbuzz-ng.target.darwin-x86_64.mk
index ef110ca..5bc524c 100644
--- a/third_party/harfbuzz-ng/harfbuzz-ng.target.darwin-x86_64.mk
+++ b/third_party/harfbuzz-ng/harfbuzz-ng.target.darwin-x86_64.mk
@@ -264,7 +264,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/harfbuzz-ng/harfbuzz-ng.target.linux-arm.mk b/third_party/harfbuzz-ng/harfbuzz-ng.target.linux-arm.mk
index 68288fd..f82ebb6 100644
--- a/third_party/harfbuzz-ng/harfbuzz-ng.target.linux-arm.mk
+++ b/third_party/harfbuzz-ng/harfbuzz-ng.target.linux-arm.mk
@@ -266,7 +266,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/harfbuzz-ng/harfbuzz-ng.target.linux-mips.mk b/third_party/harfbuzz-ng/harfbuzz-ng.target.linux-mips.mk
index 4bc268c..7ec650b 100644
--- a/third_party/harfbuzz-ng/harfbuzz-ng.target.linux-mips.mk
+++ b/third_party/harfbuzz-ng/harfbuzz-ng.target.linux-mips.mk
@@ -264,7 +264,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/harfbuzz-ng/harfbuzz-ng.target.linux-x86.mk b/third_party/harfbuzz-ng/harfbuzz-ng.target.linux-x86.mk
index 6771b00..0cf3898 100644
--- a/third_party/harfbuzz-ng/harfbuzz-ng.target.linux-x86.mk
+++ b/third_party/harfbuzz-ng/harfbuzz-ng.target.linux-x86.mk
@@ -264,7 +264,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/harfbuzz-ng/harfbuzz-ng.target.linux-x86_64.mk b/third_party/harfbuzz-ng/harfbuzz-ng.target.linux-x86_64.mk
index ef110ca..5bc524c 100644
--- a/third_party/harfbuzz-ng/harfbuzz-ng.target.linux-x86_64.mk
+++ b/third_party/harfbuzz-ng/harfbuzz-ng.target.linux-x86_64.mk
@@ -264,7 +264,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/hwcplus/LICENSE b/third_party/hwcplus/LICENSE
new file mode 100644
index 0000000..972bb2e
--- /dev/null
+++ b/third_party/hwcplus/LICENSE
@@ -0,0 +1,27 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//    * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//    * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//    * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/third_party/hwcplus/OWNERS b/third_party/hwcplus/OWNERS
new file mode 100644
index 0000000..0f483e5
--- /dev/null
+++ b/third_party/hwcplus/OWNERS
@@ -0,0 +1,2 @@
+rjkroege@chromium.org
+alexst@chromium.org
diff --git a/third_party/hwcplus/README.chromium b/third_party/hwcplus/README.chromium
new file mode 100644
index 0000000..c4a19ed
--- /dev/null
+++ b/third_party/hwcplus/README.chromium
@@ -0,0 +1,13 @@
+Name: Hardware Composer Plus
+Short hwcplus
+URL: https://chromium.googlesource.com/chromium/src/third_party/hwcplus/
+Version: 1.4
+License: Apache 2.0
+Security Critical: yes
+
+Description:
+The Android HAL graphics interface layer: hardware composer, gralloc, libsync extracted
+into a tree for possible future sharing between ChromeOS and Android.
+
+Local Modifications:
+*  Adds support for multiple monitors and additional mode setting facilities.
diff --git a/third_party/hwcplus/include/cutils/native_handle.h b/third_party/hwcplus/include/cutils/native_handle.h
new file mode 100644
index 0000000..268c5d3
--- /dev/null
+++ b/third_party/hwcplus/include/cutils/native_handle.h
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef NATIVE_HANDLE_H_
+#define NATIVE_HANDLE_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct native_handle
+{
+    int version;        /* sizeof(native_handle_t) */
+    int numFds;         /* number of file-descriptors at &data[0] */
+    int numInts;        /* number of ints at &data[numFds] */
+    int data[0];        /* numFds + numInts ints */
+} native_handle_t;
+
+/*
+ * native_handle_close
+ * 
+ * closes the file descriptors contained in this native_handle_t
+ * 
+ * return 0 on success, or a negative error code on failure
+ * 
+ */
+int native_handle_close(const native_handle_t* h);
+
+
+/*
+ * native_handle_create
+ * 
+ * creates a native_handle_t and initializes it. must be destroyed with
+ * native_handle_delete().
+ * 
+ */
+native_handle_t* native_handle_create(int numFds, int numInts);
+
+/*
+ * native_handle_delete
+ * 
+ * frees a native_handle_t allocated with native_handle_create().
+ * This ONLY frees the memory allocated for the native_handle_t, but doesn't
+ * close the file descriptors; which can be achieved with native_handle_close().
+ * 
+ * return 0 on success, or a negative error code on failure
+ * 
+ */
+int native_handle_delete(native_handle_t* h);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* NATIVE_HANDLE_H_ */
diff --git a/third_party/hwcplus/include/hardware/fb.h b/third_party/hwcplus/include/hardware/fb.h
new file mode 100644
index 0000000..135e4aa
--- /dev/null
+++ b/third_party/hwcplus/include/hardware/fb.h
@@ -0,0 +1,167 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef ANDROID_FB_INTERFACE_H
+#define ANDROID_FB_INTERFACE_H
+
+#include <stdint.h>
+#include <sys/cdefs.h>
+#include <sys/types.h>
+
+#include <cutils/native_handle.h>
+
+#include <hardware/hardware.h>
+
+__BEGIN_DECLS
+
+#define GRALLOC_HARDWARE_FB0 "fb0"
+
+/*****************************************************************************/
+
+
+/*****************************************************************************/
+
+typedef struct framebuffer_device_t {
+    struct hw_device_t common;
+
+    /* flags describing some attributes of the framebuffer */
+    const uint32_t  flags;
+
+    /* dimensions of the framebuffer in pixels */
+    const uint32_t  width;
+    const uint32_t  height;
+
+    /* frambuffer stride in pixels */
+    const int       stride;
+
+    /* framebuffer pixel format */
+    const int       format;
+
+    /* resolution of the framebuffer's display panel in pixel per inch*/
+    const float     xdpi;
+    const float     ydpi;
+
+    /* framebuffer's display panel refresh rate in frames per second */
+    const float     fps;
+
+    /* min swap interval supported by this framebuffer */
+    const int       minSwapInterval;
+
+    /* max swap interval supported by this framebuffer */
+    const int       maxSwapInterval;
+
+    /* Number of framebuffers supported*/
+    const int       numFramebuffers;
+
+    int reserved[7];
+
+    /*
+     * requests a specific swap-interval (same definition than EGL)
+     *
+     * Returns 0 on success or -errno on error.
+     */
+    int (*setSwapInterval)(struct framebuffer_device_t* window,
+            int interval);
+
+    /*
+     * This hook is OPTIONAL.
+     *
+     * It is non NULL If the framebuffer driver supports "update-on-demand"
+     * and the given rectangle is the area of the screen that gets
+     * updated during (*post)().
+     *
+     * This is useful on devices that are able to DMA only a portion of
+     * the screen to the display panel, upon demand -- as opposed to
+     * constantly refreshing the panel 60 times per second, for instance.
+     *
+     * Only the area defined by this rectangle is guaranteed to be valid, that
+     * is, the driver is not allowed to post anything outside of this
+     * rectangle.
+     *
+     * The rectangle evaluated during (*post)() and specifies which area
+     * of the buffer passed in (*post)() shall to be posted.
+     *
+     * return -EINVAL if width or height <=0, or if left or top < 0
+     */
+    int (*setUpdateRect)(struct framebuffer_device_t* window,
+            int left, int top, int width, int height);
+
+    /*
+     * Post <buffer> to the display (display it on the screen)
+     * The buffer must have been allocated with the
+     *   GRALLOC_USAGE_HW_FB usage flag.
+     * buffer must be the same width and height as the display and must NOT
+     * be locked.
+     *
+     * The buffer is shown during the next VSYNC.
+     *
+     * If the same buffer is posted again (possibly after some other buffer),
+     * post() will block until the the first post is completed.
+     *
+     * Internally, post() is expected to lock the buffer so that a
+     * subsequent call to gralloc_module_t::(*lock)() with USAGE_RENDER or
+     * USAGE_*_WRITE will block until it is safe; that is typically once this
+     * buffer is shown and another buffer has been posted.
+     *
+     * Returns 0 on success or -errno on error.
+     */
+    int (*post)(struct framebuffer_device_t* dev, buffer_handle_t buffer);
+
+
+    /*
+     * The (*compositionComplete)() method must be called after the
+     * compositor has finished issuing GL commands for client buffers.
+     */
+
+    int (*compositionComplete)(struct framebuffer_device_t* dev);
+
+    /*
+     * This hook is OPTIONAL.
+     *
+     * If non NULL it will be caused by SurfaceFlinger on dumpsys
+     */
+    void (*dump)(struct framebuffer_device_t* dev, char *buff, int buff_len);
+
+    /*
+     * (*enableScreen)() is used to either blank (enable=0) or
+     * unblank (enable=1) the screen this framebuffer is attached to.
+     *
+     * Returns 0 on success or -errno on error.
+     */
+    int (*enableScreen)(struct framebuffer_device_t* dev, int enable);
+
+    void* reserved_proc[6];
+
+} framebuffer_device_t;
+
+
+/** convenience API for opening and closing a supported device */
+
+static inline int framebuffer_open(const struct hw_module_t* module,
+        struct framebuffer_device_t** device) {
+    return module->methods->open(module,
+            GRALLOC_HARDWARE_FB0, (struct hw_device_t**)device);
+}
+
+static inline int framebuffer_close(struct framebuffer_device_t* device) {
+    return device->common.close(&device->common);
+}
+
+
+__END_DECLS
+
+#endif  // ANDROID_FB_INTERFACE_H
diff --git a/third_party/hwcplus/include/hardware/gralloc.h b/third_party/hwcplus/include/hardware/gralloc.h
new file mode 100644
index 0000000..0dbebcf
--- /dev/null
+++ b/third_party/hwcplus/include/hardware/gralloc.h
@@ -0,0 +1,313 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef ANDROID_GRALLOC_INTERFACE_H
+#define ANDROID_GRALLOC_INTERFACE_H
+
+#include <system/window.h>
+#include <system/graphics.h>
+#include <hardware/hardware.h>
+
+#include <stdint.h>
+#include <sys/cdefs.h>
+#include <sys/types.h>
+
+#include <cutils/native_handle.h>
+
+#include <hardware/hardware.h>
+#include <hardware/fb.h>
+
+__BEGIN_DECLS
+
+/**
+ * Module versioning information for the Gralloc hardware module, based on
+ * gralloc_module_t.common.module_api_version.
+ *
+ * Version History:
+ *
+ * GRALLOC_MODULE_API_VERSION_0_1:
+ * Initial Gralloc hardware module API.
+ *
+ * GRALLOC_MODULE_API_VERSION_0_2:
+ * Add support for flexible YCbCr format with (*lock_ycbcr)() method.
+ */
+
+#define GRALLOC_MODULE_API_VERSION_0_1  HARDWARE_MODULE_API_VERSION(0, 1)
+#define GRALLOC_MODULE_API_VERSION_0_2  HARDWARE_MODULE_API_VERSION(0, 2)
+
+#define GRALLOC_DEVICE_API_VERSION_0_1  HARDWARE_DEVICE_API_VERSION(0, 1)
+
+/**
+ * The id of this module
+ */
+#define GRALLOC_HARDWARE_MODULE_ID "gralloc"
+
+/**
+ * Name of the graphics device to open
+ */
+
+#define GRALLOC_HARDWARE_GPU0 "gpu0"
+
+enum {
+    /* buffer is never read in software */
+    GRALLOC_USAGE_SW_READ_NEVER         = 0x00000000,
+    /* buffer is rarely read in software */
+    GRALLOC_USAGE_SW_READ_RARELY        = 0x00000002,
+    /* buffer is often read in software */
+    GRALLOC_USAGE_SW_READ_OFTEN         = 0x00000003,
+    /* mask for the software read values */
+    GRALLOC_USAGE_SW_READ_MASK          = 0x0000000F,
+    
+    /* buffer is never written in software */
+    GRALLOC_USAGE_SW_WRITE_NEVER        = 0x00000000,
+    /* buffer is rarely written in software */
+    GRALLOC_USAGE_SW_WRITE_RARELY       = 0x00000020,
+    /* buffer is often written in software */
+    GRALLOC_USAGE_SW_WRITE_OFTEN        = 0x00000030,
+    /* mask for the software write values */
+    GRALLOC_USAGE_SW_WRITE_MASK         = 0x000000F0,
+
+    /* buffer will be used as an OpenGL ES texture */
+    GRALLOC_USAGE_HW_TEXTURE            = 0x00000100,
+    /* buffer will be used as an OpenGL ES render target */
+    GRALLOC_USAGE_HW_RENDER             = 0x00000200,
+    /* buffer will be used by the 2D hardware blitter */
+    GRALLOC_USAGE_HW_2D                 = 0x00000400,
+    /* buffer will be used by the HWComposer HAL module */
+    GRALLOC_USAGE_HW_COMPOSER           = 0x00000800,
+    /* buffer will be used with the framebuffer device */
+    GRALLOC_USAGE_HW_FB                 = 0x00001000,
+    /* buffer will be used with the HW video encoder */
+    GRALLOC_USAGE_HW_VIDEO_ENCODER      = 0x00010000,
+    /* buffer will be written by the HW camera pipeline */
+    GRALLOC_USAGE_HW_CAMERA_WRITE       = 0x00020000,
+    /* buffer will be read by the HW camera pipeline */
+    GRALLOC_USAGE_HW_CAMERA_READ        = 0x00040000,
+    /* buffer will be used as part of zero-shutter-lag queue */
+    GRALLOC_USAGE_HW_CAMERA_ZSL         = 0x00060000,
+    /* mask for the camera access values */
+    GRALLOC_USAGE_HW_CAMERA_MASK        = 0x00060000,
+    /* mask for the software usage bit-mask */
+    GRALLOC_USAGE_HW_MASK               = 0x00071F00,
+
+    /* buffer will be used as a RenderScript Allocation */
+    GRALLOC_USAGE_RENDERSCRIPT          = 0x00100000,
+
+    /* buffer should be displayed full-screen on an external display when
+     * possible
+     */
+    GRALLOC_USAGE_EXTERNAL_DISP         = 0x00002000,
+
+    /* Must have a hardware-protected path to external display sink for
+     * this buffer.  If a hardware-protected path is not available, then
+     * either don't composite only this buffer (preferred) to the
+     * external sink, or (less desirable) do not route the entire
+     * composition to the external sink.
+     */
+    GRALLOC_USAGE_PROTECTED             = 0x00004000,
+
+    /* implementation-specific private usage flags */
+    GRALLOC_USAGE_PRIVATE_0             = 0x10000000,
+    GRALLOC_USAGE_PRIVATE_1             = 0x20000000,
+    GRALLOC_USAGE_PRIVATE_2             = 0x40000000,
+    GRALLOC_USAGE_PRIVATE_3             = 0x80000000,
+    GRALLOC_USAGE_PRIVATE_MASK          = 0xF0000000,
+};
+
+/*****************************************************************************/
+
+/**
+ * Every hardware module must have a data structure named HAL_MODULE_INFO_SYM
+ * and the fields of this data structure must begin with hw_module_t
+ * followed by module specific information.
+ */
+typedef struct gralloc_module_t {
+    struct hw_module_t common;
+    
+    /*
+     * (*registerBuffer)() must be called before a buffer_handle_t that has not
+     * been created with (*alloc_device_t::alloc)() can be used.
+     * 
+     * This is intended to be used with buffer_handle_t's that have been
+     * received in this process through IPC.
+     * 
+     * This function checks that the handle is indeed a valid one and prepares
+     * it for use with (*lock)() and (*unlock)().
+     * 
+     * It is not necessary to call (*registerBuffer)() on a handle created 
+     * with (*alloc_device_t::alloc)().
+     * 
+     * returns an error if this buffer_handle_t is not valid.
+     */
+    int (*registerBuffer)(struct gralloc_module_t const* module,
+            buffer_handle_t handle);
+
+    /*
+     * (*unregisterBuffer)() is called once this handle is no longer needed in
+     * this process. After this call, it is an error to call (*lock)(),
+     * (*unlock)(), or (*registerBuffer)().
+     * 
+     * This function doesn't close or free the handle itself; this is done
+     * by other means, usually through libcutils's native_handle_close() and
+     * native_handle_free(). 
+     * 
+     * It is an error to call (*unregisterBuffer)() on a buffer that wasn't
+     * explicitly registered first.
+     */
+    int (*unregisterBuffer)(struct gralloc_module_t const* module,
+            buffer_handle_t handle);
+    
+    /*
+     * The (*lock)() method is called before a buffer is accessed for the 
+     * specified usage. This call may block, for instance if the h/w needs
+     * to finish rendering or if CPU caches need to be synchronized.
+     * 
+     * The caller promises to modify only pixels in the area specified 
+     * by (l,t,w,h).
+     * 
+     * The content of the buffer outside of the specified area is NOT modified
+     * by this call.
+     *
+     * If usage specifies GRALLOC_USAGE_SW_*, vaddr is filled with the address
+     * of the buffer in virtual memory.
+     *
+     * Note calling (*lock)() on HAL_PIXEL_FORMAT_YCbCr_*_888 buffers will fail
+     * and return -EINVAL.  These buffers must be locked with (*lock_ycbcr)()
+     * instead.
+     *
+     * THREADING CONSIDERATIONS:
+     *
+     * It is legal for several different threads to lock a buffer from 
+     * read access, none of the threads are blocked.
+     * 
+     * However, locking a buffer simultaneously for write or read/write is
+     * undefined, but:
+     * - shall not result in termination of the process
+     * - shall not block the caller
+     * It is acceptable to return an error or to leave the buffer's content
+     * into an indeterminate state.
+     *
+     * If the buffer was created with a usage mask incompatible with the
+     * requested usage flags here, -EINVAL is returned. 
+     * 
+     */
+    
+    int (*lock)(struct gralloc_module_t const* module,
+            buffer_handle_t handle, int usage,
+            int l, int t, int w, int h,
+            void** vaddr);
+
+    
+    /*
+     * The (*unlock)() method must be called after all changes to the buffer
+     * are completed.
+     */
+    
+    int (*unlock)(struct gralloc_module_t const* module,
+            buffer_handle_t handle);
+
+
+    /* reserved for future use */
+    int (*perform)(struct gralloc_module_t const* module,
+            int operation, ... );
+
+    /*
+     * The (*lock_ycbcr)() method is like the (*lock)() method, with the
+     * difference that it fills a struct ycbcr with a description of the buffer
+     * layout, and zeroes out the reserved fields.
+     *
+     * This will only work on buffers with HAL_PIXEL_FORMAT_YCbCr_*_888, and
+     * will return -EINVAL on any other buffer formats.
+     *
+     * Added in GRALLOC_MODULE_API_VERSION_0_2.
+     */
+
+    int (*lock_ycbcr)(struct gralloc_module_t const* module,
+            buffer_handle_t handle, int usage,
+            int l, int t, int w, int h,
+            struct android_ycbcr *ycbcr);
+
+    /* reserved for future use */
+    void* reserved_proc[6];
+} gralloc_module_t;
+
+/*****************************************************************************/
+
+/**
+ * Every device data structure must begin with hw_device_t
+ * followed by module specific public methods and attributes.
+ */
+
+typedef struct alloc_device_t {
+    struct hw_device_t common;
+
+    /* 
+     * (*alloc)() Allocates a buffer in graphic memory with the requested
+     * parameters and returns a buffer_handle_t and the stride in pixels to
+     * allow the implementation to satisfy hardware constraints on the width
+     * of a pixmap (eg: it may have to be multiple of 8 pixels). 
+     * The CALLER TAKES OWNERSHIP of the buffer_handle_t.
+     *
+     * If format is HAL_PIXEL_FORMAT_YCbCr_420_888, the returned stride must be
+     * 0, since the actual strides are available from the android_ycbcr
+     * structure.
+     * 
+     * Returns 0 on success or -errno on error.
+     */
+    
+    int (*alloc)(struct alloc_device_t* dev,
+            int w, int h, int format, int usage,
+            buffer_handle_t* handle, int* stride);
+
+    /*
+     * (*free)() Frees a previously allocated buffer. 
+     * Behavior is undefined if the buffer is still mapped in any process,
+     * but shall not result in termination of the program or security breaches
+     * (allowing a process to get access to another process' buffers).
+     * THIS FUNCTION TAKES OWNERSHIP of the buffer_handle_t which becomes
+     * invalid after the call. 
+     * 
+     * Returns 0 on success or -errno on error.
+     */
+    int (*free)(struct alloc_device_t* dev,
+            buffer_handle_t handle);
+
+    /* This hook is OPTIONAL.
+     *
+     * If non NULL it will be caused by SurfaceFlinger on dumpsys
+     */
+    void (*dump)(struct alloc_device_t *dev, char *buff, int buff_len);
+
+    void* reserved_proc[7];
+} alloc_device_t;
+
+
+/** convenience API for opening and closing a supported device */
+
+static inline int gralloc_open(const struct hw_module_t* module, 
+        struct alloc_device_t** device) {
+    return module->methods->open(module, 
+            GRALLOC_HARDWARE_GPU0, (struct hw_device_t**)device);
+}
+
+static inline int gralloc_close(struct alloc_device_t* device) {
+    return device->common.close(&device->common);
+}
+
+__END_DECLS
+
+#endif  // ANDROID_GRALLOC_INTERFACE_H
diff --git a/third_party/hwcplus/include/hardware/hardware.h b/third_party/hwcplus/include/hardware/hardware.h
new file mode 100644
index 0000000..416ae39
--- /dev/null
+++ b/third_party/hwcplus/include/hardware/hardware.h
@@ -0,0 +1,230 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef ANDROID_INCLUDE_HARDWARE_HARDWARE_H
+#define ANDROID_INCLUDE_HARDWARE_HARDWARE_H
+
+#include <stdint.h>
+#include <sys/cdefs.h>
+
+#include <cutils/native_handle.h>
+#include <system/graphics.h>
+
+__BEGIN_DECLS
+
+/*
+ * Value for the hw_module_t.tag field
+ */
+
+#define MAKE_TAG_CONSTANT(A,B,C,D) (((A) << 24) | ((B) << 16) | ((C) << 8) | (D))
+
+#define HARDWARE_MODULE_TAG MAKE_TAG_CONSTANT('H', 'W', 'M', 'T')
+#define HARDWARE_DEVICE_TAG MAKE_TAG_CONSTANT('H', 'W', 'D', 'T')
+
+#define HARDWARE_MAKE_API_VERSION(maj,min) \
+            ((((maj) & 0xff) << 8) | ((min) & 0xff))
+
+#define HARDWARE_MAKE_API_VERSION_2(maj,min,hdr) \
+            ((((maj) & 0xff) << 24) | (((min) & 0xff) << 16) | ((hdr) & 0xffff))
+#define HARDWARE_API_VERSION_2_MAJ_MIN_MASK 0xffff0000
+#define HARDWARE_API_VERSION_2_HEADER_MASK  0x0000ffff
+
+
+/*
+ * The current HAL API version.
+ *
+ * All module implementations must set the hw_module_t.hal_api_version field
+ * to this value when declaring the module with HAL_MODULE_INFO_SYM.
+ *
+ * Note that previous implementations have always set this field to 0.
+ * Therefore, libhardware HAL API will always consider versions 0.0 and 1.0
+ * to be 100% binary compatible.
+ *
+ */
+#define HARDWARE_HAL_API_VERSION HARDWARE_MAKE_API_VERSION(1, 0)
+
+/*
+ * Helper macros for module implementors.
+ *
+ * The derived modules should provide convenience macros for supported
+ * versions so that implementations can explicitly specify module/device
+ * versions at definition time.
+ *
+ * Use this macro to set the hw_module_t.module_api_version field.
+ */
+#define HARDWARE_MODULE_API_VERSION(maj,min) HARDWARE_MAKE_API_VERSION(maj,min)
+#define HARDWARE_MODULE_API_VERSION_2(maj,min,hdr) HARDWARE_MAKE_API_VERSION_2(maj,min,hdr)
+
+/*
+ * Use this macro to set the hw_device_t.version field
+ */
+#define HARDWARE_DEVICE_API_VERSION(maj,min) HARDWARE_MAKE_API_VERSION(maj,min)
+#define HARDWARE_DEVICE_API_VERSION_2(maj,min,hdr) HARDWARE_MAKE_API_VERSION_2(maj,min,hdr)
+
+struct hw_module_t;
+struct hw_module_methods_t;
+struct hw_device_t;
+
+/**
+ * Every hardware module must have a data structure named HAL_MODULE_INFO_SYM
+ * and the fields of this data structure must begin with hw_module_t
+ * followed by module specific information.
+ */
+typedef struct hw_module_t {
+    /** tag must be initialized to HARDWARE_MODULE_TAG */
+    uint32_t tag;
+
+    /**
+     * The API version of the implemented module. The module owner is
+     * responsible for updating the version when a module interface has
+     * changed.
+     *
+     * The derived modules such as gralloc and audio own and manage this field.
+     * The module user must interpret the version field to decide whether or
+     * not to inter-operate with the supplied module implementation.
+     * For example, SurfaceFlinger is responsible for making sure that
+     * it knows how to manage different versions of the gralloc-module API,
+     * and AudioFlinger must know how to do the same for audio-module API.
+     *
+     * The module API version should include a major and a minor component.
+     * For example, version 1.0 could be represented as 0x0100. This format
+     * implies that versions 0x0100-0x01ff are all API-compatible.
+     *
+     * In the future, libhardware will expose a hw_get_module_version()
+     * (or equivalent) function that will take minimum/maximum supported
+     * versions as arguments and would be able to reject modules with
+     * versions outside of the supplied range.
+     */
+    uint16_t module_api_version;
+#define version_major module_api_version
+    /**
+     * version_major/version_minor defines are supplied here for temporary
+     * source code compatibility. They will be removed in the next version.
+     * ALL clients must convert to the new version format.
+     */
+
+    /**
+     * The API version of the HAL module interface. This is meant to
+     * version the hw_module_t, hw_module_methods_t, and hw_device_t
+     * structures and definitions.
+     *
+     * The HAL interface owns this field. Module users/implementations
+     * must NOT rely on this value for version information.
+     *
+     * Presently, 0 is the only valid value.
+     */
+    uint16_t hal_api_version;
+#define version_minor hal_api_version
+
+    /** Identifier of module */
+    const char *id;
+
+    /** Name of this module */
+    const char *name;
+
+    /** Author/owner/implementor of the module */
+    const char *author;
+
+    /** Modules methods */
+    struct hw_module_methods_t* methods;
+
+    /** module's dso */
+    void* dso;
+
+    /** padding to 128 bytes, reserved for future use */
+    uint32_t reserved[32-7];
+
+} hw_module_t;
+
+typedef struct hw_module_methods_t {
+    /** Open a specific device */
+    int (*open)(const struct hw_module_t* module, const char* id,
+            struct hw_device_t** device);
+
+} hw_module_methods_t;
+
+/**
+ * Every device data structure must begin with hw_device_t
+ * followed by module specific public methods and attributes.
+ */
+typedef struct hw_device_t {
+    /** tag must be initialized to HARDWARE_DEVICE_TAG */
+    uint32_t tag;
+
+    /**
+     * Version of the module-specific device API. This value is used by
+     * the derived-module user to manage different device implementations.
+     *
+     * The module user is responsible for checking the module_api_version
+     * and device version fields to ensure that the user is capable of
+     * communicating with the specific module implementation.
+     *
+     * One module can support multiple devices with different versions. This
+     * can be useful when a device interface changes in an incompatible way
+     * but it is still necessary to support older implementations at the same
+     * time. One such example is the Camera 2.0 API.
+     *
+     * This field is interpreted by the module user and is ignored by the
+     * HAL interface itself.
+     */
+    uint32_t version;
+
+    /** reference to the module this device belongs to */
+    struct hw_module_t* module;
+
+    /** padding reserved for future use */
+    uint32_t reserved[12];
+
+    /** Close this device */
+    int (*close)(struct hw_device_t* device);
+
+} hw_device_t;
+
+/**
+ * Name of the hal_module_info
+ */
+#define HAL_MODULE_INFO_SYM         HMI
+
+/**
+ * Name of the hal_module_info as a string
+ */
+#define HAL_MODULE_INFO_SYM_AS_STR  "HMI"
+
+/**
+ * Get the module info associated with a module by id.
+ *
+ * @return: 0 == success, <0 == error and *module == NULL
+ */
+int hw_get_module(const char *id, const struct hw_module_t **module);
+
+/**
+ * Get the module info associated with a module instance by class 'class_id'
+ * and instance 'inst'.
+ *
+ * Some modules types necessitate multiple instances. For example audio supports
+ * multiple concurrent interfaces and thus 'audio' is the module class
+ * and 'primary' or 'a2dp' are module interfaces. This implies that the files
+ * providing these modules would be named audio.primary.<variant>.so and
+ * audio.a2dp.<variant>.so
+ *
+ * @return: 0 == success, <0 == error and *module == NULL
+ */
+int hw_get_module_by_class(const char *class_id, const char *inst,
+                           const struct hw_module_t **module);
+
+__END_DECLS
+
+#endif  /* ANDROID_INCLUDE_HARDWARE_HARDWARE_H */
diff --git a/third_party/hwcplus/include/hardware/hwcomposer.h b/third_party/hwcplus/include/hardware/hwcomposer.h
new file mode 100644
index 0000000..86479d3
--- /dev/null
+++ b/third_party/hwcplus/include/hardware/hwcomposer.h
@@ -0,0 +1,647 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef ANDROID_INCLUDE_HARDWARE_HWCOMPOSER_H
+#define ANDROID_INCLUDE_HARDWARE_HWCOMPOSER_H
+
+#include <stdint.h>
+#include <sys/cdefs.h>
+
+#include <hardware/gralloc.h>
+#include <hardware/hardware.h>
+#include <cutils/native_handle.h>
+
+#include <hardware/hwcomposer_defs.h>
+
+__BEGIN_DECLS
+
+/*****************************************************************************/
+
+/* for compatibility */
+#define HWC_MODULE_API_VERSION      HWC_MODULE_API_VERSION_0_1
+#define HWC_DEVICE_API_VERSION      HWC_DEVICE_API_VERSION_0_1
+#define HWC_API_VERSION             HWC_DEVICE_API_VERSION
+
+/*****************************************************************************/
+
+/**
+ * The id of this module
+ */
+#define HWC_HARDWARE_MODULE_ID "hwcomposer"
+
+/**
+ * Name of the sensors device to open
+ */
+#define HWC_HARDWARE_COMPOSER   "composer"
+
+typedef struct hwc_rect {
+    int left;
+    int top;
+    int right;
+    int bottom;
+} hwc_rect_t;
+
+typedef struct hwc_frect {
+    float left;
+    float top;
+    float right;
+    float bottom;
+} hwc_frect_t;
+
+typedef struct hwc_region {
+    size_t numRects;
+    hwc_rect_t const* rects;
+} hwc_region_t;
+
+typedef struct hwc_color {
+    uint8_t r;
+    uint8_t g;
+    uint8_t b;
+    uint8_t a;
+} hwc_color_t;
+
+typedef struct hwc_layer_1 {
+    /*
+     * compositionType is used to specify this layer's type and is set by either
+     * the hardware composer implementation, or by the caller (see below).
+     *
+     *  This field is always reset to HWC_BACKGROUND or HWC_FRAMEBUFFER
+     *  before (*prepare)() is called when the HWC_GEOMETRY_CHANGED flag is
+     *  also set, otherwise, this field is preserved between (*prepare)()
+     *  calls.
+     *
+     * HWC_BACKGROUND
+     *   Always set by the caller before calling (*prepare)(), this value
+     *   indicates this is a special "background" layer. The only valid field
+     *   is backgroundColor.
+     *   The HWC can toggle this value to HWC_FRAMEBUFFER to indicate it CANNOT
+     *   handle the background color.
+     *
+     *
+     * HWC_FRAMEBUFFER_TARGET
+     *   Always set by the caller before calling (*prepare)(), this value
+     *   indicates this layer is the framebuffer surface used as the target of
+     *   OpenGL ES composition. If the HWC sets all other layers to HWC_OVERLAY
+     *   or HWC_BACKGROUND, then no OpenGL ES composition will be done, and
+     *   this layer should be ignored during set().
+     *
+     *   This flag (and the framebuffer surface layer) will only be used if the
+     *   HWC version is HWC_DEVICE_API_VERSION_1_1 or higher. In older versions,
+     *   the OpenGL ES target surface is communicated by the (dpy, sur) fields
+     *   in hwc_compositor_device_1_t.
+     *
+     *   This value cannot be set by the HWC implementation.
+     *
+     *
+     * HWC_FRAMEBUFFER
+     *   Set by the caller before calling (*prepare)() ONLY when the
+     *   HWC_GEOMETRY_CHANGED flag is also set.
+     *
+     *   Set by the HWC implementation during (*prepare)(), this indicates
+     *   that the layer will be drawn into the framebuffer using OpenGL ES.
+     *   The HWC can toggle this value to HWC_OVERLAY to indicate it will
+     *   handle the layer.
+     *
+     *
+     * HWC_OVERLAY
+     *   Set by the HWC implementation during (*prepare)(), this indicates
+     *   that the layer will be handled by the HWC (ie: it must not be
+     *   composited with OpenGL ES).
+     *
+     */
+    int32_t compositionType;
+
+    /*
+     * hints is bit mask set by the HWC implementation during (*prepare)().
+     * It is preserved between (*prepare)() calls, unless the
+     * HWC_GEOMETRY_CHANGED flag is set, in which case it is reset to 0.
+     *
+     * see hwc_layer_t::hints
+     */
+    uint32_t hints;
+
+    /* see hwc_layer_t::flags */
+    uint32_t flags;
+
+    union {
+        /* color of the background.  hwc_color_t.a is ignored */
+        hwc_color_t backgroundColor;
+
+        struct {
+            /* handle of buffer to compose. This handle is guaranteed to have been
+             * allocated from gralloc using the GRALLOC_USAGE_HW_COMPOSER usage flag. If
+             * the layer's handle is unchanged across two consecutive prepare calls and
+             * the HWC_GEOMETRY_CHANGED flag is not set for the second call then the
+             * HWComposer implementation may assume that the contents of the buffer have
+             * not changed. */
+            buffer_handle_t handle;
+
+            /* transformation to apply to the buffer during composition */
+            uint32_t transform;
+
+            /* blending to apply during composition */
+            int32_t blending;
+
+            /* area of the source to consider, the origin is the top-left corner of
+             * the buffer. As of HWC_DEVICE_API_VERSION_1_3, sourceRect uses floats.
+             * If the h/w can't support a non-integer source crop rectangle, it should
+             * punt to OpenGL ES composition.
+             */
+            union {
+                // crop rectangle in integer (pre HWC_DEVICE_API_VERSION_1_3)
+                hwc_rect_t sourceCropi;
+                hwc_rect_t sourceCrop; // just for source compatibility
+                // crop rectangle in floats (as of HWC_DEVICE_API_VERSION_1_3)
+                hwc_frect_t sourceCropf;
+            };
+
+            /* where to composite the sourceCrop onto the display. The sourceCrop
+             * is scaled using linear filtering to the displayFrame. The origin is the
+             * top-left corner of the screen.
+             */
+            hwc_rect_t displayFrame;
+
+            /* visible region in screen space. The origin is the
+             * top-left corner of the screen.
+             * The visible region INCLUDES areas overlapped by a translucent layer.
+             */
+            hwc_region_t visibleRegionScreen;
+
+            /* Sync fence object that will be signaled when the buffer's
+             * contents are available. May be -1 if the contents are already
+             * available. This field is only valid during set(), and should be
+             * ignored during prepare(). The set() call must not wait for the
+             * fence to be signaled before returning, but the HWC must wait for
+             * all buffers to be signaled before reading from them.
+             *
+             * HWC_FRAMEBUFFER layers will never have an acquire fence, since
+             * reads from them are complete before the framebuffer is ready for
+             * display.
+             *
+             * The HWC takes ownership of the acquireFenceFd and is responsible
+             * for closing it when no longer needed.
+             */
+            int acquireFenceFd;
+
+            /* During set() the HWC must set this field to a file descriptor for
+             * a sync fence object that will signal after the HWC has finished
+             * reading from the buffer. The field is ignored by prepare(). Each
+             * layer should have a unique file descriptor, even if more than one
+             * refer to the same underlying fence object; this allows each to be
+             * closed independently.
+             *
+             * If buffer reads can complete at significantly different times,
+             * then using independent fences is preferred. For example, if the
+             * HWC handles some layers with a blit engine and others with
+             * overlays, then the blit layers can be reused immediately after
+             * the blit completes, but the overlay layers can't be reused until
+             * a subsequent frame has been displayed.
+             *
+             * Since HWC doesn't read from HWC_FRAMEBUFFER layers, it shouldn't
+             * produce a release fence for them. The releaseFenceFd will be -1
+             * for these layers when set() is called.
+             *
+             * The HWC client taks ownership of the releaseFenceFd and is
+             * responsible for closing it when no longer needed.
+             */
+            int releaseFenceFd;
+
+            /*
+             * Availability: HWC_DEVICE_API_VERSION_1_2
+             *
+             * Alpha value applied to the whole layer. The effective
+             * value of each pixel is computed as:
+             *
+             *   if (blending == HWC_BLENDING_PREMULT)
+             *      pixel.rgb = pixel.rgb * planeAlpha / 255
+             *   pixel.a = pixel.a * planeAlpha / 255
+             *
+             * Then blending proceeds as usual according to the "blending"
+             * field above.
+             *
+             * NOTE: planeAlpha applies to YUV layers as well:
+             *
+             *   pixel.rgb = yuv_to_rgb(pixel.yuv)
+             *   if (blending == HWC_BLENDING_PREMULT)
+             *      pixel.rgb = pixel.rgb * planeAlpha / 255
+             *   pixel.a = planeAlpha
+             *
+             *
+             * IMPLEMENTATION NOTE:
+             *
+             * If the source image doesn't have an alpha channel, then
+             * the h/w can use the HWC_BLENDING_COVERAGE equations instead of
+             * HWC_BLENDING_PREMULT and simply set the alpha channel to
+             * planeAlpha.
+             *
+             * e.g.:
+             *
+             *   if (blending == HWC_BLENDING_PREMULT)
+             *      blending = HWC_BLENDING_COVERAGE;
+             *   pixel.a = planeAlpha;
+             *
+             */
+            uint8_t planeAlpha;
+
+            /* reserved for future use */
+            uint8_t _pad[3];
+        };
+    };
+
+    /* Allow for expansion w/o breaking binary compatibility.
+     * Pad layer to 96 bytes, assuming 32-bit pointers.
+     */
+    int32_t reserved[24 - 19];
+
+} hwc_layer_1_t;
+
+/* This represents a display, typically an EGLDisplay object */
+typedef void* hwc_display_t;
+
+/* This represents a surface, typically an EGLSurface object  */
+typedef void* hwc_surface_t;
+
+/*
+ * hwc_display_contents_1_t::flags values
+ */
+enum {
+    /*
+     * HWC_GEOMETRY_CHANGED is set by SurfaceFlinger to indicate that the list
+     * passed to (*prepare)() has changed by more than just the buffer handles
+     * and acquire fences.
+     */
+    HWC_GEOMETRY_CHANGED = 0x00000001,
+};
+
+/*
+ * Description of the contents to output on a display.
+ *
+ * This is the top-level structure passed to the prepare and set calls to
+ * negotiate and commit the composition of a display image.
+ */
+typedef struct hwc_display_contents_1 {
+    /* File descriptor referring to a Sync HAL fence object which will signal
+     * when this composition is retired. For a physical display, a composition
+     * is retired when it has been replaced on-screen by a subsequent set. For
+     * a virtual display, the composition is retired when the writes to
+     * outputBuffer are complete and can be read. The fence object is created
+     * and returned by the set call; this field will be -1 on entry to prepare
+     * and set. SurfaceFlinger will close the returned file descriptor.
+     */
+    int retireFenceFd;
+
+    union {
+        /* Fields only relevant for HWC_DEVICE_VERSION_1_0. */
+        struct {
+            /* (dpy, sur) is the target of SurfaceFlinger's OpenGL ES
+             * composition for HWC_DEVICE_VERSION_1_0. They aren't relevant to
+             * prepare. The set call should commit this surface atomically to
+             * the display along with any overlay layers.
+             */
+            hwc_display_t dpy;
+            hwc_surface_t sur;
+        };
+
+        /* These fields are used for virtual displays when the h/w composer
+         * version is at least HWC_DEVICE_VERSION_1_3. */
+        struct {
+            /* outbuf is the buffer that receives the composed image for
+             * virtual displays. Writes to the outbuf must wait until
+             * outbufAcquireFenceFd signals. A fence that will signal when
+             * writes to outbuf are complete should be returned in
+             * retireFenceFd.
+             *
+             * This field is set before prepare(), so properties of the buffer
+             * can be used to decide which layers can be handled by h/w
+             * composer.
+             *
+             * If prepare() sets all layers to FRAMEBUFFER, then GLES
+             * composition will happen directly to the output buffer. In this
+             * case, both outbuf and the FRAMEBUFFER_TARGET layer's buffer will
+             * be the same, and set() has no work to do besides managing fences.
+             *
+             * If the TARGET_FORCE_HWC_FOR_VIRTUAL_DISPLAYS board config
+             * variable is defined (not the default), then this behavior is
+             * changed: if all layers are marked for FRAMEBUFFER, GLES
+             * composition will take place to a scratch framebuffer, and
+             * h/w composer must copy it to the output buffer. This allows the
+             * h/w composer to do format conversion if there are cases where
+             * that is more desirable than doing it in the GLES driver or at the
+             * virtual display consumer.
+             *
+             * If some or all layers are marked OVERLAY, then the framebuffer
+             * and output buffer will be different. As with physical displays,
+             * the framebuffer handle will not change between frames if all
+             * layers are marked for OVERLAY.
+             */
+            buffer_handle_t outbuf;
+
+            /* File descriptor for a fence that will signal when outbuf is
+             * ready to be written. The h/w composer is responsible for closing
+             * this when no longer needed.
+             *
+             * Will be -1 whenever outbuf is NULL, or when the outbuf can be
+             * written immediately.
+             */
+            int outbufAcquireFenceFd;
+        };
+    };
+
+    /* List of layers that will be composed on the display. The buffer handles
+     * in the list will be unique. If numHwLayers is 0, all composition will be
+     * performed by SurfaceFlinger.
+     */
+    uint32_t flags;
+    size_t numHwLayers;
+    hwc_layer_1_t hwLayers[0];
+
+} hwc_display_contents_1_t;
+
+/* see hwc_composer_device::registerProcs()
+ * All of the callbacks are required and non-NULL unless otherwise noted.
+ */
+typedef struct hwc_procs {
+    /*
+     * (*invalidate)() triggers a screen refresh, in particular prepare and set
+     * will be called shortly after this call is made. Note that there is
+     * NO GUARANTEE that the screen refresh will happen after invalidate()
+     * returns (in particular, it could happen before).
+     * invalidate() is GUARANTEED TO NOT CALL BACK into the h/w composer HAL and
+     * it is safe to call invalidate() from any of hwc_composer_device
+     * hooks, unless noted otherwise.
+     */
+    void (*invalidate)(const struct hwc_procs* procs);
+
+    /*
+     * (*vsync)() is called by the h/w composer HAL when a vsync event is
+     * received and HWC_EVENT_VSYNC is enabled on a display
+     * (see: hwc_event_control).
+     *
+     * the "disp" parameter indicates which display the vsync event is for.
+     * the "timestamp" parameter is the system monotonic clock timestamp in
+     *   nanosecond of when the vsync event happened.
+     *
+     * vsync() is GUARANTEED TO NOT CALL BACK into the h/w composer HAL.
+     *
+     * It is expected that vsync() is called from a thread of at least
+     * HAL_PRIORITY_URGENT_DISPLAY with as little latency as possible,
+     * typically less than 0.5 ms.
+     *
+     * It is a (silent) error to have HWC_EVENT_VSYNC enabled when calling
+     * hwc_composer_device.set(..., 0, 0, 0) (screen off). The implementation
+     * can either stop or continue to process VSYNC events, but must not
+     * crash or cause other problems.
+     */
+    void (*vsync)(const struct hwc_procs* procs, int disp, int64_t timestamp);
+
+    /*
+     * (*hotplug)() is called by the h/w composer HAL when a display is
+     * connected or disconnected. The PRIMARY display is always connected and
+     * the hotplug callback should not be called for it.
+     *
+     * The disp parameter indicates which display type this event is for.
+     * The connected parameter indicates whether the display has just been
+     *   connected (1) or disconnected (0).
+     *
+     * The hotplug() callback may call back into the h/w composer on the same
+     * thread to query refresh rate and dpi for the display. Additionally,
+     * other threads may be calling into the h/w composer while the callback
+     * is in progress.
+     *
+     * The h/w composer must serialize calls to the hotplug callback; only
+     * one thread may call it at a time.
+     *
+     * This callback will be NULL if the h/w composer is using
+     * HWC_DEVICE_API_VERSION_1_0.
+     */
+    void (*hotplug)(const struct hwc_procs* procs, int disp, int connected);
+
+} hwc_procs_t;
+
+
+/*****************************************************************************/
+
+typedef struct hwc_module {
+    struct hw_module_t common;
+} hwc_module_t;
+
+typedef struct hwc_composer_device_1 {
+    struct hw_device_t common;
+
+    /*
+     * (*prepare)() is called for each frame before composition and is used by
+     * SurfaceFlinger to determine what composition steps the HWC can handle.
+     *
+     * (*prepare)() can be called more than once, the last call prevails.
+     *
+     * The HWC responds by setting the compositionType field in each layer to
+     * either HWC_FRAMEBUFFER or HWC_OVERLAY. In the former case, the
+     * composition for the layer is handled by SurfaceFlinger with OpenGL ES,
+     * in the later case, the HWC will have to handle the layer's composition.
+     * compositionType and hints are preserved between (*prepare)() calles
+     * unless the HWC_GEOMETRY_CHANGED flag is set.
+     *
+     * (*prepare)() is called with HWC_GEOMETRY_CHANGED to indicate that the
+     * list's geometry has changed, that is, when more than just the buffer's
+     * handles have been updated. Typically this happens (but is not limited to)
+     * when a window is added, removed, resized or moved. In this case
+     * compositionType and hints are reset to their default value.
+     *
+     * For HWC 1.0, numDisplays will always be one, and displays[0] will be
+     * non-NULL.
+     *
+     * For HWC 1.1, numDisplays will always be HWC_NUM_PHYSICAL_DISPLAY_TYPES.
+     * Entries for unsupported or disabled/disconnected display types will be
+     * NULL.
+     *
+     * In HWC 1.3, numDisplays may be up to HWC_NUM_DISPLAY_TYPES. The extra
+     * entries correspond to enabled virtual displays, and will be non-NULL.
+     *
+     * returns: 0 on success. An negative error code on error. If an error is
+     * returned, SurfaceFlinger will assume that none of the layer will be
+     * handled by the HWC.
+     */
+    int (*prepare)(struct hwc_composer_device_1 *dev,
+                    size_t numDisplays, hwc_display_contents_1_t** displays);
+
+    /*
+     * (*set)() is used in place of eglSwapBuffers(), and assumes the same
+     * functionality, except it also commits the work list atomically with
+     * the actual eglSwapBuffers().
+     *
+     * The layer lists are guaranteed to be the same as the ones returned from
+     * the last call to (*prepare)().
+     *
+     * When this call returns the caller assumes that the displays will be
+     * updated in the near future with the content of their work lists, without
+     * artifacts during the transition from the previous frame.
+     *
+     * A display with zero layers indicates that the entire composition has
+     * been handled by SurfaceFlinger with OpenGL ES. In this case, (*set)()
+     * behaves just like eglSwapBuffers().
+     *
+     * For HWC 1.0, numDisplays will always be one, and displays[0] will be
+     * non-NULL.
+     *
+     * For HWC 1.1, numDisplays will always be HWC_NUM_PHYSICAL_DISPLAY_TYPES.
+     * Entries for unsupported or disabled/disconnected display types will be
+     * NULL.
+     *
+     * In HWC 1.3, numDisplays may be up to HWC_NUM_DISPLAY_TYPES. The extra
+     * entries correspond to enabled virtual displays, and will be non-NULL.
+     *
+     * IMPORTANT NOTE: There is an implicit layer containing opaque black
+     * pixels behind all the layers in the list. It is the responsibility of
+     * the hwcomposer module to make sure black pixels are output (or blended
+     * from).
+     *
+     * IMPORTANT NOTE: In the event of an error this call *MUST* still cause
+     * any fences returned in the previous call to set to eventually become
+     * signaled.  The caller may have already issued wait commands on these
+     * fences, and having set return without causing those fences to signal
+     * will likely result in a deadlock.
+     *
+     * returns: 0 on success. A negative error code on error:
+     *    HWC_EGL_ERROR: eglGetError() will provide the proper error code (only
+     *        allowed prior to HWComposer 1.1)
+     *    Another code for non EGL errors.
+     */
+    int (*set)(struct hwc_composer_device_1 *dev,
+                size_t numDisplays, hwc_display_contents_1_t** displays);
+
+    /*
+     * eventControl(..., event, enabled)
+     * Enables or disables h/w composer events for a display.
+     *
+     * eventControl can be called from any thread and takes effect
+     * immediately.
+     *
+     *  Supported events are:
+     *      HWC_EVENT_VSYNC
+     *
+     * returns -EINVAL if the "event" parameter is not one of the value above
+     * or if the "enabled" parameter is not 0 or 1.
+     */
+    int (*eventControl)(struct hwc_composer_device_1* dev, int disp,
+            int event, int enabled);
+
+    /*
+     * blank(..., blank)
+     * Blanks or unblanks a display's screen.
+     *
+     * Turns the screen off when blank is nonzero, on when blank is zero.
+     * Multiple sequential calls with the same blank value must be supported.
+     * The screen state transition must be be complete when the function
+     * returns.
+     *
+     * returns 0 on success, negative on error.
+     */
+    int (*blank)(struct hwc_composer_device_1* dev, int disp, int blank);
+
+    /*
+     * Used to retrieve information about the h/w composer
+     *
+     * Returns 0 on success or -errno on error.
+     */
+    int (*query)(struct hwc_composer_device_1* dev, int what, int* value);
+
+    /*
+     * (*registerProcs)() registers callbacks that the h/w composer HAL can
+     * later use. It will be called immediately after the composer device is
+     * opened with non-NULL procs. It is FORBIDDEN to call any of the callbacks
+     * from within registerProcs(). registerProcs() must save the hwc_procs_t
+     * pointer which is needed when calling a registered callback.
+     */
+    void (*registerProcs)(struct hwc_composer_device_1* dev,
+            hwc_procs_t const* procs);
+
+    /*
+     * This field is OPTIONAL and can be NULL.
+     *
+     * If non NULL it will be called by SurfaceFlinger on dumpsys
+     */
+    void (*dump)(struct hwc_composer_device_1* dev, char *buff, int buff_len);
+
+    /*
+     * (*getDisplayConfigs)() returns handles for the configurations available
+     * on the connected display. These handles must remain valid as long as the
+     * display is connected.
+     *
+     * Configuration handles are written to configs. The number of entries
+     * allocated by the caller is passed in *numConfigs; getDisplayConfigs must
+     * not try to write more than this number of config handles. On return, the
+     * total number of configurations available for the display is returned in
+     * *numConfigs. If *numConfigs is zero on entry, then configs may be NULL.
+     *
+     * HWC_DEVICE_API_VERSION_1_1 does not provide a way to choose a config.
+     * For displays that support multiple configurations, the h/w composer
+     * implementation should choose one and report it as the first config in
+     * the list. Reporting the not-chosen configs is not required.
+     *
+     * Returns 0 on success or -errno on error. If disp is a hotpluggable
+     * display type and no display is connected, an error should be returned.
+     *
+     * This field is REQUIRED for HWC_DEVICE_API_VERSION_1_1 and later.
+     * It should be NULL for previous versions.
+     */
+    int (*getDisplayConfigs)(struct hwc_composer_device_1* dev, int disp,
+            uint32_t* configs, size_t* numConfigs);
+
+    /*
+     * (*getDisplayAttributes)() returns attributes for a specific config of a
+     * connected display. The config parameter is one of the config handles
+     * returned by getDisplayConfigs.
+     *
+     * The list of attributes to return is provided in the attributes
+     * parameter, terminated by HWC_DISPLAY_NO_ATTRIBUTE. The value for each
+     * requested attribute is written in order to the values array. The
+     * HWC_DISPLAY_NO_ATTRIBUTE attribute does not have a value, so the values
+     * array will have one less value than the attributes array.
+     *
+     * This field is REQUIRED for HWC_DEVICE_API_VERSION_1_1 and later.
+     * It should be NULL for previous versions.
+     *
+     * If disp is a hotpluggable display type and no display is connected,
+     * or if config is not a valid configuration for the display, a negative
+     * value should be returned.
+     */
+    int (*getDisplayAttributes)(struct hwc_composer_device_1* dev, int disp,
+            uint32_t config, const uint32_t* attributes, int32_t* values);
+
+    /*
+     * Reserved for future use. Must be NULL.
+     */
+    void* reserved_proc[4];
+
+} hwc_composer_device_1_t;
+
+/** convenience API for opening and closing a device */
+
+static inline int hwc_open_1(const struct hw_module_t* module,
+        hwc_composer_device_1_t** device) {
+    return module->methods->open(module,
+            HWC_HARDWARE_COMPOSER, (struct hw_device_t**)device);
+}
+
+static inline int hwc_close_1(hwc_composer_device_1_t* device) {
+    return device->common.close(&device->common);
+}
+
+/*****************************************************************************/
+
+__END_DECLS
+
+#endif /* ANDROID_INCLUDE_HARDWARE_HWCOMPOSER_H */
diff --git a/third_party/hwcplus/include/hardware/hwcomposer_defs.h b/third_party/hwcplus/include/hardware/hwcomposer_defs.h
new file mode 100644
index 0000000..c69a4bc
--- /dev/null
+++ b/third_party/hwcplus/include/hardware/hwcomposer_defs.h
@@ -0,0 +1,201 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef ANDROID_INCLUDE_HARDWARE_HWCOMPOSER_DEFS_H
+#define ANDROID_INCLUDE_HARDWARE_HWCOMPOSER_DEFS_H
+
+#include <stdint.h>
+#include <sys/cdefs.h>
+
+#include <hardware/gralloc.h>
+#include <hardware/hardware.h>
+#include <cutils/native_handle.h>
+
+__BEGIN_DECLS
+
+/*****************************************************************************/
+
+#define HWC_HEADER_VERSION          1
+
+#define HWC_MODULE_API_VERSION_0_1  HARDWARE_MODULE_API_VERSION(0, 1)
+
+#define HWC_DEVICE_API_VERSION_1_0  HARDWARE_DEVICE_API_VERSION_2(1, 0, HWC_HEADER_VERSION)
+#define HWC_DEVICE_API_VERSION_1_1  HARDWARE_DEVICE_API_VERSION_2(1, 1, HWC_HEADER_VERSION)
+#define HWC_DEVICE_API_VERSION_1_2  HARDWARE_DEVICE_API_VERSION_2(1, 2, HWC_HEADER_VERSION)
+#define HWC_DEVICE_API_VERSION_1_3  HARDWARE_DEVICE_API_VERSION_2(1, 3, HWC_HEADER_VERSION)
+
+enum {
+    /* hwc_composer_device_t::set failed in EGL */
+    HWC_EGL_ERROR = -1
+};
+
+/*
+ * hwc_layer_t::hints values
+ * Hints are set by the HAL and read by SurfaceFlinger
+ */
+enum {
+    /*
+     * HWC can set the HWC_HINT_TRIPLE_BUFFER hint to indicate to SurfaceFlinger
+     * that it should triple buffer this layer. Typically HWC does this when
+     * the layer will be unavailable for use for an extended period of time,
+     * e.g. if the display will be fetching data directly from the layer and
+     * the layer can not be modified until after the next set().
+     */
+    HWC_HINT_TRIPLE_BUFFER  = 0x00000001,
+
+    /*
+     * HWC sets HWC_HINT_CLEAR_FB to tell SurfaceFlinger that it should clear the
+     * framebuffer with transparent pixels where this layer would be.
+     * SurfaceFlinger will only honor this flag when the layer has no blending
+     *
+     */
+    HWC_HINT_CLEAR_FB       = 0x00000002
+};
+
+/*
+ * hwc_layer_t::flags values
+ * Flags are set by SurfaceFlinger and read by the HAL
+ */
+enum {
+    /*
+     * HWC_SKIP_LAYER is set by SurfaceFlnger to indicate that the HAL
+     * shall not consider this layer for composition as it will be handled
+     * by SurfaceFlinger (just as if compositionType was set to HWC_OVERLAY).
+     */
+    HWC_SKIP_LAYER = 0x00000001,
+};
+
+/*
+ * hwc_layer_t::compositionType values
+ */
+enum {
+    /* this layer is to be drawn into the framebuffer by SurfaceFlinger */
+    HWC_FRAMEBUFFER = 0,
+
+    /* this layer will be handled in the HWC */
+    HWC_OVERLAY = 1,
+
+    /* this is the background layer. it's used to set the background color.
+     * there is only a single background layer */
+    HWC_BACKGROUND = 2,
+
+    /* this layer holds the result of compositing the HWC_FRAMEBUFFER layers.
+     * Added in HWC_DEVICE_API_VERSION_1_1. */
+    HWC_FRAMEBUFFER_TARGET = 3,
+};
+
+/*
+ * hwc_layer_t::blending values
+ */
+enum {
+    /* no blending */
+    HWC_BLENDING_NONE     = 0x0100,
+
+    /* ONE / ONE_MINUS_SRC_ALPHA */
+    HWC_BLENDING_PREMULT  = 0x0105,
+
+    /* SRC_ALPHA / ONE_MINUS_SRC_ALPHA */
+    HWC_BLENDING_COVERAGE = 0x0405
+};
+
+/*
+ * hwc_layer_t::transform values
+ */
+enum {
+    /* flip source image horizontally */
+    HWC_TRANSFORM_FLIP_H = HAL_TRANSFORM_FLIP_H,
+    /* flip source image vertically */
+    HWC_TRANSFORM_FLIP_V = HAL_TRANSFORM_FLIP_V,
+    /* rotate source image 90 degrees clock-wise */
+    HWC_TRANSFORM_ROT_90 = HAL_TRANSFORM_ROT_90,
+    /* rotate source image 180 degrees */
+    HWC_TRANSFORM_ROT_180 = HAL_TRANSFORM_ROT_180,
+    /* rotate source image 270 degrees clock-wise */
+    HWC_TRANSFORM_ROT_270 = HAL_TRANSFORM_ROT_270,
+};
+
+/* attributes queriable with query() */
+enum {
+    /*
+     * Must return 1 if the background layer is supported, 0 otherwise.
+     */
+    HWC_BACKGROUND_LAYER_SUPPORTED      = 0,
+
+    /*
+     * Returns the vsync period in nanoseconds.
+     *
+     * This query is not used for HWC_DEVICE_API_VERSION_1_1 and later.
+     * Instead, the per-display attribute HWC_DISPLAY_VSYNC_PERIOD is used.
+     */
+    HWC_VSYNC_PERIOD                    = 1,
+
+    /*
+     * Availability: HWC_DEVICE_API_VERSION_1_1
+     * Returns a mask of supported display types.
+     */
+    HWC_DISPLAY_TYPES_SUPPORTED         = 2,
+};
+
+/* display attributes returned by getDisplayAttributes() */
+enum {
+    /* Indicates the end of an attribute list */
+    HWC_DISPLAY_NO_ATTRIBUTE                = 0,
+
+    /* The vsync period in nanoseconds */
+    HWC_DISPLAY_VSYNC_PERIOD                = 1,
+
+    /* The number of pixels in the horizontal and vertical directions. */
+    HWC_DISPLAY_WIDTH                       = 2,
+    HWC_DISPLAY_HEIGHT                      = 3,
+
+    /* The number of pixels per thousand inches of this configuration.
+     *
+     * Scaling DPI by 1000 allows it to be stored in an int without losing
+     * too much precision.
+     *
+     * If the DPI for a configuration is unavailable or the HWC implementation
+     * considers it unreliable, it should set these attributes to zero.
+     */
+    HWC_DISPLAY_DPI_X                       = 4,
+    HWC_DISPLAY_DPI_Y                       = 5,
+};
+
+/* Allowed events for hwc_methods::eventControl() */
+enum {
+    HWC_EVENT_VSYNC     = 0
+};
+
+/* Display types and associated mask bits. */
+enum {
+    HWC_DISPLAY_PRIMARY     = 0,
+    HWC_DISPLAY_EXTERNAL    = 1,    // HDMI, DP, etc.
+    HWC_DISPLAY_VIRTUAL     = 2,
+
+    HWC_NUM_PHYSICAL_DISPLAY_TYPES = 2,
+    HWC_NUM_DISPLAY_TYPES          = 3,
+};
+
+enum {
+    HWC_DISPLAY_PRIMARY_BIT     = 1 << HWC_DISPLAY_PRIMARY,
+    HWC_DISPLAY_EXTERNAL_BIT    = 1 << HWC_DISPLAY_EXTERNAL,
+    HWC_DISPLAY_VIRTUAL_BIT     = 1 << HWC_DISPLAY_VIRTUAL,
+};
+
+/*****************************************************************************/
+
+__END_DECLS
+
+#endif /* ANDROID_INCLUDE_HARDWARE_HWCOMPOSER_DEFS_H */
diff --git a/third_party/hwcplus/include/sync/sync.h b/third_party/hwcplus/include/sync/sync.h
new file mode 100644
index 0000000..2e5d82f
--- /dev/null
+++ b/third_party/hwcplus/include/sync/sync.h
@@ -0,0 +1,54 @@
+/*
+ *  sync.h
+ *
+ *   Copyright 2012 Google, Inc
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+#ifndef __SYS_CORE_SYNC_H
+#define __SYS_CORE_SYNC_H
+
+#include <sys/cdefs.h>
+#include <stdint.h>
+
+__BEGIN_DECLS
+
+// XXX: These structs are copied from the header "linux/sync.h".
+struct sync_fence_info_data {
+ uint32_t len;
+ char name[32];
+ int32_t status;
+ uint8_t pt_info[0];
+};
+
+struct sync_pt_info {
+ uint32_t len;
+ char obj_name[32];
+ char driver_name[32];
+ int32_t status;
+ uint64_t timestamp_ns;
+ uint8_t driver_data[0];
+};
+
+/* timeout in msecs */
+int sync_wait(int fd, int timeout);
+int sync_merge(const char *name, int fd1, int fd2);
+struct sync_fence_info_data *sync_fence_info(int fd);
+struct sync_pt_info *sync_pt_info(struct sync_fence_info_data *info,
+                                  struct sync_pt_info *itr);
+void sync_fence_info_free(struct sync_fence_info_data *info);
+
+__END_DECLS
+
+#endif /* __SYS_CORE_SYNC_H */
diff --git a/third_party/hwcplus/include/system/graphics.h b/third_party/hwcplus/include/system/graphics.h
new file mode 100644
index 0000000..be86ae4
--- /dev/null
+++ b/third_party/hwcplus/include/system/graphics.h
@@ -0,0 +1,304 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef SYSTEM_CORE_INCLUDE_ANDROID_GRAPHICS_H
+#define SYSTEM_CORE_INCLUDE_ANDROID_GRAPHICS_H
+
+#include <stdint.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * If the HAL needs to create service threads to handle graphics related
+ * tasks, these threads need to run at HAL_PRIORITY_URGENT_DISPLAY priority
+ * if they can block the main rendering thread in any way.
+ *
+ * the priority of the current thread can be set with:
+ *
+ *      #include <sys/resource.h>
+ *      setpriority(PRIO_PROCESS, 0, HAL_PRIORITY_URGENT_DISPLAY);
+ *
+ */
+
+#define HAL_PRIORITY_URGENT_DISPLAY     (-8)
+
+/**
+ * pixel format definitions
+ */
+
+enum {
+    /*
+     * "linear" color pixel formats:
+     *
+     * The pixel formats below contain sRGB data but are otherwise treated
+     * as linear formats, i.e.: no special operation is performed when
+     * reading or writing into a buffer in one of these formats
+     */
+    HAL_PIXEL_FORMAT_RGBA_8888          = 1,
+    HAL_PIXEL_FORMAT_RGBX_8888          = 2,
+    HAL_PIXEL_FORMAT_RGB_888            = 3,
+    HAL_PIXEL_FORMAT_RGB_565            = 4,
+    HAL_PIXEL_FORMAT_BGRA_8888          = 5,
+
+    /*
+     * sRGB color pixel formats:
+     *
+     * The red, green and blue components are stored in sRGB space, and converted
+     * to linear space when read, using the standard sRGB to linear equation:
+     *
+     * Clinear = Csrgb / 12.92                  for Csrgb <= 0.04045
+     *         = (Csrgb + 0.055 / 1.055)^2.4    for Csrgb >  0.04045
+     *
+     * When written the inverse transformation is performed:
+     *
+     * Csrgb = 12.92 * Clinear                  for Clinear <= 0.0031308
+     *       = 1.055 * Clinear^(1/2.4) - 0.055  for Clinear >  0.0031308
+     *
+     *
+     *  The alpha component, if present, is always stored in linear space and
+     *  is left unmodified when read or written.
+     *
+     */
+    HAL_PIXEL_FORMAT_sRGB_A_8888        = 0xC,
+    HAL_PIXEL_FORMAT_sRGB_X_8888        = 0xD,
+
+    /*
+     * 0x100 - 0x1FF
+     *
+     * This range is reserved for pixel formats that are specific to the HAL
+     * implementation.  Implementations can use any value in this range to
+     * communicate video pixel formats between their HAL modules.  These formats
+     * must not have an alpha channel.  Additionally, an EGLimage created from a
+     * gralloc buffer of one of these formats must be supported for use with the
+     * GL_OES_EGL_image_external OpenGL ES extension.
+     */
+
+    /*
+     * Android YUV format:
+     *
+     * This format is exposed outside of the HAL to software decoders and
+     * applications.  EGLImageKHR must support it in conjunction with the
+     * OES_EGL_image_external extension.
+     *
+     * YV12 is a 4:2:0 YCrCb planar format comprised of a WxH Y plane followed
+     * by (W/2) x (H/2) Cr and Cb planes.
+     *
+     * This format assumes
+     * - an even width
+     * - an even height
+     * - a horizontal stride multiple of 16 pixels
+     * - a vertical stride equal to the height
+     *
+     *   y_size = stride * height
+     *   c_stride = ALIGN(stride/2, 16)
+     *   c_size = c_stride * height/2
+     *   size = y_size + c_size * 2
+     *   cr_offset = y_size
+     *   cb_offset = y_size + c_size
+     *
+     */
+    HAL_PIXEL_FORMAT_YV12   = 0x32315659, // YCrCb 4:2:0 Planar
+
+
+    /*
+     * Android Y8 format:
+     *
+     * This format is exposed outside of the HAL to the framework.
+     * The expected gralloc usage flags are SW_* and HW_CAMERA_*,
+     * and no other HW_ flags will be used.
+     *
+     * Y8 is a YUV planar format comprised of a WxH Y plane,
+     * with each pixel being represented by 8 bits.
+     *
+     * It is equivalent to just the Y plane from YV12.
+     *
+     * This format assumes
+     * - an even width
+     * - an even height
+     * - a horizontal stride multiple of 16 pixels
+     * - a vertical stride equal to the height
+     *
+     *   size = stride * height
+     *
+     */
+    HAL_PIXEL_FORMAT_Y8     = 0x20203859,
+
+    /*
+     * Android Y16 format:
+     *
+     * This format is exposed outside of the HAL to the framework.
+     * The expected gralloc usage flags are SW_* and HW_CAMERA_*,
+     * and no other HW_ flags will be used.
+     *
+     * Y16 is a YUV planar format comprised of a WxH Y plane,
+     * with each pixel being represented by 16 bits.
+     *
+     * It is just like Y8, but has double the bits per pixel (little endian).
+     *
+     * This format assumes
+     * - an even width
+     * - an even height
+     * - a horizontal stride multiple of 16 pixels
+     * - a vertical stride equal to the height
+     * - strides are specified in pixels, not in bytes
+     *
+     *   size = stride * height * 2
+     *
+     */
+    HAL_PIXEL_FORMAT_Y16    = 0x20363159,
+
+    /*
+     * Android RAW sensor format:
+     *
+     * This format is exposed outside of the HAL to applications.
+     *
+     * RAW_SENSOR is a single-channel 16-bit format, typically representing raw
+     * Bayer-pattern images from an image sensor, with minimal processing.
+     *
+     * The exact pixel layout of the data in the buffer is sensor-dependent, and
+     * needs to be queried from the camera device.
+     *
+     * Generally, not all 16 bits are used; more common values are 10 or 12
+     * bits. All parameters to interpret the raw data (black and white points,
+     * color space, etc) must be queried from the camera device.
+     *
+     * This format assumes
+     * - an even width
+     * - an even height
+     * - a horizontal stride multiple of 16 pixels (32 bytes).
+     */
+    HAL_PIXEL_FORMAT_RAW_SENSOR = 0x20,
+
+    /*
+     * Android binary blob graphics buffer format:
+     *
+     * This format is used to carry task-specific data which does not have a
+     * standard image structure. The details of the format are left to the two
+     * endpoints.
+     *
+     * A typical use case is for transporting JPEG-compressed images from the
+     * Camera HAL to the framework or to applications.
+     *
+     * Buffers of this format must have a height of 1, and width equal to their
+     * size in bytes.
+     */
+    HAL_PIXEL_FORMAT_BLOB = 0x21,
+
+    /*
+     * Android format indicating that the choice of format is entirely up to the
+     * device-specific Gralloc implementation.
+     *
+     * The Gralloc implementation should examine the usage bits passed in when
+     * allocating a buffer with this format, and it should derive the pixel
+     * format from those usage flags.  This format will never be used with any
+     * of the GRALLOC_USAGE_SW_* usage flags.
+     *
+     * If a buffer of this format is to be used as an OpenGL ES texture, the
+     * framework will assume that sampling the texture will always return an
+     * alpha value of 1.0 (i.e. the buffer contains only opaque pixel values).
+     *
+     */
+    HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED = 0x22,
+
+    /*
+     * Android flexible YCbCr formats
+     *
+     * This format allows platforms to use an efficient YCbCr/YCrCb buffer
+     * layout, while still describing the buffer layout in a way accessible to
+     * the CPU in a device-independent manner.  While called YCbCr, it can be
+     * used to describe formats with either chromatic ordering, as well as
+     * whole planar or semiplanar layouts.
+     *
+     * struct android_ycbcr (below) is the the struct used to describe it.
+     *
+     * This format must be accepted by the gralloc module when
+     * USAGE_HW_CAMERA_WRITE and USAGE_SW_READ_* are set.
+     *
+     * This format is locked for use by gralloc's (*lock_ycbcr) method, and
+     * locking with the (*lock) method will return an error.
+     */
+    HAL_PIXEL_FORMAT_YCbCr_420_888 = 0x23,
+
+    /* Legacy formats (deprecated), used by ImageFormat.java */
+    HAL_PIXEL_FORMAT_YCbCr_422_SP       = 0x10, // NV16
+    HAL_PIXEL_FORMAT_YCrCb_420_SP       = 0x11, // NV21
+    HAL_PIXEL_FORMAT_YCbCr_422_I        = 0x14, // YUY2
+};
+
+/*
+ * Structure for describing YCbCr formats for consumption by applications.
+ * This is used with HAL_PIXEL_FORMAT_YCbCr_*_888.
+ *
+ * Buffer chroma subsampling is defined in the format.
+ * e.g. HAL_PIXEL_FORMAT_YCbCr_420_888 has subsampling 4:2:0.
+ *
+ * Buffers must have a 8 bit depth.
+ *
+ * @y, @cb, and @cr point to the first byte of their respective planes.
+ *
+ * Stride describes the distance in bytes from the first value of one row of
+ * the image to the first value of the next row.  It includes the width of the
+ * image plus padding.
+ * @ystride is the stride of the luma plane.
+ * @cstride is the stride of the chroma planes.
+ *
+ * @chroma_step is the distance in bytes from one chroma pixel value to the
+ * next.  This is 2 bytes for semiplanar (because chroma values are interleaved
+ * and each chroma value is one byte) and 1 for planar.
+ */
+
+struct android_ycbcr {
+    void *y;
+    void *cb;
+    void *cr;
+    size_t ystride;
+    size_t cstride;
+    size_t chroma_step;
+
+    /** reserved for future use, set to 0 by gralloc's (*lock_ycbcr)() */
+    uint32_t reserved[8];
+};
+
+/**
+ * Transformation definitions
+ *
+ * IMPORTANT NOTE:
+ * HAL_TRANSFORM_ROT_90 is applied CLOCKWISE and AFTER HAL_TRANSFORM_FLIP_{H|V}.
+ *
+ */
+
+enum {
+    /* flip source image horizontally (around the vertical axis) */
+    HAL_TRANSFORM_FLIP_H    = 0x01,
+    /* flip source image vertically (around the horizontal axis)*/
+    HAL_TRANSFORM_FLIP_V    = 0x02,
+    /* rotate source image 90 degrees clockwise */
+    HAL_TRANSFORM_ROT_90    = 0x04,
+    /* rotate source image 180 degrees */
+    HAL_TRANSFORM_ROT_180   = 0x03,
+    /* rotate source image 270 degrees clockwise */
+    HAL_TRANSFORM_ROT_270   = 0x07,
+    /* don't use. see system/window.h */
+    HAL_TRANSFORM_RESERVED  = 0x08,
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* SYSTEM_CORE_INCLUDE_ANDROID_GRAPHICS_H */
diff --git a/third_party/hwcplus/include/system/window.h b/third_party/hwcplus/include/system/window.h
new file mode 100644
index 0000000..588f9c6
--- /dev/null
+++ b/third_party/hwcplus/include/system/window.h
@@ -0,0 +1,841 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef SYSTEM_CORE_INCLUDE_ANDROID_WINDOW_H
+#define SYSTEM_CORE_INCLUDE_ANDROID_WINDOW_H
+
+#include <cutils/native_handle.h>
+#include <errno.h>
+#include <limits.h>
+#include <stdint.h>
+#include <string.h>
+#include <sys/cdefs.h>
+#include <system/graphics.h>
+#include <unistd.h>
+
+__BEGIN_DECLS
+
+/*****************************************************************************/
+
+#define ANDROID_NATIVE_MAKE_CONSTANT(a,b,c,d) \
+    (((unsigned)(a)<<24)|((unsigned)(b)<<16)|((unsigned)(c)<<8)|(unsigned)(d))
+
+#define ANDROID_NATIVE_WINDOW_MAGIC \
+    ANDROID_NATIVE_MAKE_CONSTANT('_','w','n','d')
+
+#define ANDROID_NATIVE_BUFFER_MAGIC \
+    ANDROID_NATIVE_MAKE_CONSTANT('_','b','f','r')
+
+// ---------------------------------------------------------------------------
+
+// This #define may be used to conditionally compile device-specific code to
+// support either the prior ANativeWindow interface, which did not pass libsync
+// fences around, or the new interface that does.  This #define is only present
+// when the ANativeWindow interface does include libsync support.
+#define ANDROID_NATIVE_WINDOW_HAS_SYNC 1
+
+// ---------------------------------------------------------------------------
+
+typedef const native_handle_t* buffer_handle_t;
+
+// ---------------------------------------------------------------------------
+
+typedef struct android_native_rect_t
+{
+    int32_t left;
+    int32_t top;
+    int32_t right;
+    int32_t bottom;
+} android_native_rect_t;
+
+// ---------------------------------------------------------------------------
+
+typedef struct android_native_base_t
+{
+    /* a magic value defined by the actual EGL native type */
+    int magic;
+
+    /* the sizeof() of the actual EGL native type */
+    int version;
+
+    void* reserved[4];
+
+    /* reference-counting interface */
+    void (*incRef)(struct android_native_base_t* base);
+    void (*decRef)(struct android_native_base_t* base);
+} android_native_base_t;
+
+typedef struct ANativeWindowBuffer
+{
+#ifdef __cplusplus
+    ANativeWindowBuffer() {
+        common.magic = ANDROID_NATIVE_BUFFER_MAGIC;
+        common.version = sizeof(ANativeWindowBuffer);
+        memset(common.reserved, 0, sizeof(common.reserved));
+    }
+
+    // Implement the methods that sp<ANativeWindowBuffer> expects so that it
+    // can be used to automatically refcount ANativeWindowBuffer's.
+    void incStrong(const void* id) const {
+        common.incRef(const_cast<android_native_base_t*>(&common));
+    }
+    void decStrong(const void* id) const {
+        common.decRef(const_cast<android_native_base_t*>(&common));
+    }
+#endif
+
+    struct android_native_base_t common;
+
+    int width;
+    int height;
+    int stride;
+    int format;
+    int usage;
+
+    void* reserved[2];
+
+    buffer_handle_t handle;
+
+    void* reserved_proc[8];
+} ANativeWindowBuffer_t;
+
+// Old typedef for backwards compatibility.
+typedef ANativeWindowBuffer_t android_native_buffer_t;
+
+// ---------------------------------------------------------------------------
+
+/* attributes queriable with query() */
+enum {
+    NATIVE_WINDOW_WIDTH     = 0,
+    NATIVE_WINDOW_HEIGHT    = 1,
+    NATIVE_WINDOW_FORMAT    = 2,
+
+    /* The minimum number of buffers that must remain un-dequeued after a buffer
+     * has been queued.  This value applies only if set_buffer_count was used to
+     * override the number of buffers and if a buffer has since been queued.
+     * Users of the set_buffer_count ANativeWindow method should query this
+     * value before calling set_buffer_count.  If it is necessary to have N
+     * buffers simultaneously dequeued as part of the steady-state operation,
+     * and this query returns M then N+M buffers should be requested via
+     * native_window_set_buffer_count.
+     *
+     * Note that this value does NOT apply until a single buffer has been
+     * queued.  In particular this means that it is possible to:
+     *
+     * 1. Query M = min undequeued buffers
+     * 2. Set the buffer count to N + M
+     * 3. Dequeue all N + M buffers
+     * 4. Cancel M buffers
+     * 5. Queue, dequeue, queue, dequeue, ad infinitum
+     */
+    NATIVE_WINDOW_MIN_UNDEQUEUED_BUFFERS = 3,
+
+    /* Check whether queueBuffer operations on the ANativeWindow send the buffer
+     * to the window compositor.  The query sets the returned 'value' argument
+     * to 1 if the ANativeWindow DOES send queued buffers directly to the window
+     * compositor and 0 if the buffers do not go directly to the window
+     * compositor.
+     *
+     * This can be used to determine whether protected buffer content should be
+     * sent to the ANativeWindow.  Note, however, that a result of 1 does NOT
+     * indicate that queued buffers will be protected from applications or users
+     * capturing their contents.  If that behavior is desired then some other
+     * mechanism (e.g. the GRALLOC_USAGE_PROTECTED flag) should be used in
+     * conjunction with this query.
+     */
+    NATIVE_WINDOW_QUEUES_TO_WINDOW_COMPOSER = 4,
+
+    /* Get the concrete type of a ANativeWindow.  See below for the list of
+     * possible return values.
+     *
+     * This query should not be used outside the Android framework and will
+     * likely be removed in the near future.
+     */
+    NATIVE_WINDOW_CONCRETE_TYPE = 5,
+
+
+    /*
+     * Default width and height of ANativeWindow buffers, these are the
+     * dimensions of the window buffers irrespective of the
+     * NATIVE_WINDOW_SET_BUFFERS_DIMENSIONS call and match the native window
+     * size unless overridden by NATIVE_WINDOW_SET_BUFFERS_USER_DIMENSIONS.
+     */
+    NATIVE_WINDOW_DEFAULT_WIDTH = 6,
+    NATIVE_WINDOW_DEFAULT_HEIGHT = 7,
+
+    /*
+     * transformation that will most-likely be applied to buffers. This is only
+     * a hint, the actual transformation applied might be different.
+     *
+     * INTENDED USE:
+     *
+     * The transform hint can be used by a producer, for instance the GLES
+     * driver, to pre-rotate the rendering such that the final transformation
+     * in the composer is identity. This can be very useful when used in
+     * conjunction with the h/w composer HAL, in situations where it
+     * cannot handle arbitrary rotations.
+     *
+     * 1. Before dequeuing a buffer, the GL driver (or any other ANW client)
+     *    queries the ANW for NATIVE_WINDOW_TRANSFORM_HINT.
+     *
+     * 2. The GL driver overrides the width and height of the ANW to
+     *    account for NATIVE_WINDOW_TRANSFORM_HINT. This is done by querying
+     *    NATIVE_WINDOW_DEFAULT_{WIDTH | HEIGHT}, swapping the dimensions
+     *    according to NATIVE_WINDOW_TRANSFORM_HINT and calling
+     *    native_window_set_buffers_dimensions().
+     *
+     * 3. The GL driver dequeues a buffer of the new pre-rotated size.
+     *
+     * 4. The GL driver renders to the buffer such that the image is
+     *    already transformed, that is applying NATIVE_WINDOW_TRANSFORM_HINT
+     *    to the rendering.
+     *
+     * 5. The GL driver calls native_window_set_transform to apply
+     *    inverse transformation to the buffer it just rendered.
+     *    In order to do this, the GL driver needs
+     *    to calculate the inverse of NATIVE_WINDOW_TRANSFORM_HINT, this is
+     *    done easily:
+     *
+     *        int hintTransform, inverseTransform;
+     *        query(..., NATIVE_WINDOW_TRANSFORM_HINT, &hintTransform);
+     *        inverseTransform = hintTransform;
+     *        if (hintTransform & HAL_TRANSFORM_ROT_90)
+     *            inverseTransform ^= HAL_TRANSFORM_ROT_180;
+     *
+     *
+     * 6. The GL driver queues the pre-transformed buffer.
+     *
+     * 7. The composer combines the buffer transform with the display
+     *    transform.  If the buffer transform happens to cancel out the
+     *    display transform then no rotation is needed.
+     *
+     */
+    NATIVE_WINDOW_TRANSFORM_HINT = 8,
+
+    /*
+     * Boolean that indicates whether the consumer is running more than
+     * one buffer behind the producer.
+     */
+    NATIVE_WINDOW_CONSUMER_RUNNING_BEHIND = 9,
+
+    /*
+     * The consumer gralloc usage bits currently set by the consumer.
+     * The values are defined in hardware/libhardware/include/gralloc.h.
+     */
+    NATIVE_WINDOW_CONSUMER_USAGE_BITS = 10
+};
+
+/* Valid operations for the (*perform)() hook.
+ *
+ * Values marked as 'deprecated' are supported, but have been superceded by
+ * other functionality.
+ *
+ * Values marked as 'private' should be considered private to the framework.
+ * HAL implementation code with access to an ANativeWindow should not use these,
+ * as it may not interact properly with the framework's use of the
+ * ANativeWindow.
+ */
+enum {
+    NATIVE_WINDOW_SET_USAGE                 =  0,
+    NATIVE_WINDOW_CONNECT                   =  1,   /* deprecated */
+    NATIVE_WINDOW_DISCONNECT                =  2,   /* deprecated */
+    NATIVE_WINDOW_SET_CROP                  =  3,   /* private */
+    NATIVE_WINDOW_SET_BUFFER_COUNT          =  4,
+    NATIVE_WINDOW_SET_BUFFERS_GEOMETRY      =  5,   /* deprecated */
+    NATIVE_WINDOW_SET_BUFFERS_TRANSFORM     =  6,
+    NATIVE_WINDOW_SET_BUFFERS_TIMESTAMP     =  7,
+    NATIVE_WINDOW_SET_BUFFERS_DIMENSIONS    =  8,
+    NATIVE_WINDOW_SET_BUFFERS_FORMAT        =  9,
+    NATIVE_WINDOW_SET_SCALING_MODE          = 10,   /* private */
+    NATIVE_WINDOW_LOCK                      = 11,   /* private */
+    NATIVE_WINDOW_UNLOCK_AND_POST           = 12,   /* private */
+    NATIVE_WINDOW_API_CONNECT               = 13,   /* private */
+    NATIVE_WINDOW_API_DISCONNECT            = 14,   /* private */
+    NATIVE_WINDOW_SET_BUFFERS_USER_DIMENSIONS = 15, /* private */
+    NATIVE_WINDOW_SET_POST_TRANSFORM_CROP   = 16,   /* private */
+};
+
+/* parameter for NATIVE_WINDOW_[API_][DIS]CONNECT */
+enum {
+    /* Buffers will be queued by EGL via eglSwapBuffers after being filled using
+     * OpenGL ES.
+     */
+    NATIVE_WINDOW_API_EGL = 1,
+
+    /* Buffers will be queued after being filled using the CPU
+     */
+    NATIVE_WINDOW_API_CPU = 2,
+
+    /* Buffers will be queued by Stagefright after being filled by a video
+     * decoder.  The video decoder can either be a software or hardware decoder.
+     */
+    NATIVE_WINDOW_API_MEDIA = 3,
+
+    /* Buffers will be queued by the the camera HAL.
+     */
+    NATIVE_WINDOW_API_CAMERA = 4,
+};
+
+/* parameter for NATIVE_WINDOW_SET_BUFFERS_TRANSFORM */
+enum {
+    /* flip source image horizontally */
+    NATIVE_WINDOW_TRANSFORM_FLIP_H = HAL_TRANSFORM_FLIP_H ,
+    /* flip source image vertically */
+    NATIVE_WINDOW_TRANSFORM_FLIP_V = HAL_TRANSFORM_FLIP_V,
+    /* rotate source image 90 degrees clock-wise, and is applied after TRANSFORM_FLIP_{H|V} */
+    NATIVE_WINDOW_TRANSFORM_ROT_90 = HAL_TRANSFORM_ROT_90,
+    /* rotate source image 180 degrees */
+    NATIVE_WINDOW_TRANSFORM_ROT_180 = HAL_TRANSFORM_ROT_180,
+    /* rotate source image 270 degrees clock-wise */
+    NATIVE_WINDOW_TRANSFORM_ROT_270 = HAL_TRANSFORM_ROT_270,
+    /* transforms source by the inverse transform of the screen it is displayed onto. This
+     * transform is applied last */
+    NATIVE_WINDOW_TRANSFORM_INVERSE_DISPLAY = 0x08
+};
+
+/* parameter for NATIVE_WINDOW_SET_SCALING_MODE */
+enum {
+    /* the window content is not updated (frozen) until a buffer of
+     * the window size is received (enqueued)
+     */
+    NATIVE_WINDOW_SCALING_MODE_FREEZE           = 0,
+    /* the buffer is scaled in both dimensions to match the window size */
+    NATIVE_WINDOW_SCALING_MODE_SCALE_TO_WINDOW  = 1,
+    /* the buffer is scaled uniformly such that the smaller dimension
+     * of the buffer matches the window size (cropping in the process)
+     */
+    NATIVE_WINDOW_SCALING_MODE_SCALE_CROP       = 2,
+    /* the window is clipped to the size of the buffer's crop rectangle; pixels
+     * outside the crop rectangle are treated as if they are completely
+     * transparent.
+     */
+    NATIVE_WINDOW_SCALING_MODE_NO_SCALE_CROP    = 3,
+};
+
+/* values returned by the NATIVE_WINDOW_CONCRETE_TYPE query */
+enum {
+    NATIVE_WINDOW_FRAMEBUFFER               = 0, /* FramebufferNativeWindow */
+    NATIVE_WINDOW_SURFACE                   = 1, /* Surface */
+};
+
+/* parameter for NATIVE_WINDOW_SET_BUFFERS_TIMESTAMP
+ *
+ * Special timestamp value to indicate that timestamps should be auto-generated
+ * by the native window when queueBuffer is called.  This is equal to INT64_MIN,
+ * defined directly to avoid problems with C99/C++ inclusion of stdint.h.
+ */
+static const int64_t NATIVE_WINDOW_TIMESTAMP_AUTO = (-9223372036854775807LL-1);
+
+struct ANativeWindow
+{
+#ifdef __cplusplus
+    ANativeWindow()
+        : flags(0), minSwapInterval(0), maxSwapInterval(0), xdpi(0), ydpi(0)
+    {
+        common.magic = ANDROID_NATIVE_WINDOW_MAGIC;
+        common.version = sizeof(ANativeWindow);
+        memset(common.reserved, 0, sizeof(common.reserved));
+    }
+
+    /* Implement the methods that sp<ANativeWindow> expects so that it
+       can be used to automatically refcount ANativeWindow's. */
+    void incStrong(const void* id) const {
+        common.incRef(const_cast<android_native_base_t*>(&common));
+    }
+    void decStrong(const void* id) const {
+        common.decRef(const_cast<android_native_base_t*>(&common));
+    }
+#endif
+
+    struct android_native_base_t common;
+
+    /* flags describing some attributes of this surface or its updater */
+    const uint32_t flags;
+
+    /* min swap interval supported by this updated */
+    const int   minSwapInterval;
+
+    /* max swap interval supported by this updated */
+    const int   maxSwapInterval;
+
+    /* horizontal and vertical resolution in DPI */
+    const float xdpi;
+    const float ydpi;
+
+    /* Some storage reserved for the OEM's driver. */
+    intptr_t    oem[4];
+
+    /*
+     * Set the swap interval for this surface.
+     *
+     * Returns 0 on success or -errno on error.
+     */
+    int     (*setSwapInterval)(struct ANativeWindow* window,
+                int interval);
+
+    /*
+     * Hook called by EGL to acquire a buffer. After this call, the buffer
+     * is not locked, so its content cannot be modified. This call may block if
+     * no buffers are available.
+     *
+     * The window holds a reference to the buffer between dequeueBuffer and
+     * either queueBuffer or cancelBuffer, so clients only need their own
+     * reference if they might use the buffer after queueing or canceling it.
+     * Holding a reference to a buffer after queueing or canceling it is only
+     * allowed if a specific buffer count has been set.
+     *
+     * Returns 0 on success or -errno on error.
+     *
+     * XXX: This function is deprecated.  It will continue to work for some
+     * time for binary compatibility, but the new dequeueBuffer function that
+     * outputs a fence file descriptor should be used in its place.
+     */
+    int     (*dequeueBuffer_DEPRECATED)(struct ANativeWindow* window,
+                struct ANativeWindowBuffer** buffer);
+
+    /*
+     * hook called by EGL to lock a buffer. This MUST be called before modifying
+     * the content of a buffer. The buffer must have been acquired with
+     * dequeueBuffer first.
+     *
+     * Returns 0 on success or -errno on error.
+     *
+     * XXX: This function is deprecated.  It will continue to work for some
+     * time for binary compatibility, but it is essentially a no-op, and calls
+     * to it should be removed.
+     */
+    int     (*lockBuffer_DEPRECATED)(struct ANativeWindow* window,
+                struct ANativeWindowBuffer* buffer);
+
+    /*
+     * Hook called by EGL when modifications to the render buffer are done.
+     * This unlocks and post the buffer.
+     *
+     * The window holds a reference to the buffer between dequeueBuffer and
+     * either queueBuffer or cancelBuffer, so clients only need their own
+     * reference if they might use the buffer after queueing or canceling it.
+     * Holding a reference to a buffer after queueing or canceling it is only
+     * allowed if a specific buffer count has been set.
+     *
+     * Buffers MUST be queued in the same order than they were dequeued.
+     *
+     * Returns 0 on success or -errno on error.
+     *
+     * XXX: This function is deprecated.  It will continue to work for some
+     * time for binary compatibility, but the new queueBuffer function that
+     * takes a fence file descriptor should be used in its place (pass a value
+     * of -1 for the fence file descriptor if there is no valid one to pass).
+     */
+    int     (*queueBuffer_DEPRECATED)(struct ANativeWindow* window,
+                struct ANativeWindowBuffer* buffer);
+
+    /*
+     * hook used to retrieve information about the native window.
+     *
+     * Returns 0 on success or -errno on error.
+     */
+    int     (*query)(const struct ANativeWindow* window,
+                int what, int* value);
+
+    /*
+     * hook used to perform various operations on the surface.
+     * (*perform)() is a generic mechanism to add functionality to
+     * ANativeWindow while keeping backward binary compatibility.
+     *
+     * DO NOT CALL THIS HOOK DIRECTLY.  Instead, use the helper functions
+     * defined below.
+     *
+     *  (*perform)() returns -ENOENT if the 'what' parameter is not supported
+     *  by the surface's implementation.
+     *
+     * The valid operations are:
+     *     NATIVE_WINDOW_SET_USAGE
+     *     NATIVE_WINDOW_CONNECT               (deprecated)
+     *     NATIVE_WINDOW_DISCONNECT            (deprecated)
+     *     NATIVE_WINDOW_SET_CROP              (private)
+     *     NATIVE_WINDOW_SET_BUFFER_COUNT
+     *     NATIVE_WINDOW_SET_BUFFERS_GEOMETRY  (deprecated)
+     *     NATIVE_WINDOW_SET_BUFFERS_TRANSFORM
+     *     NATIVE_WINDOW_SET_BUFFERS_TIMESTAMP
+     *     NATIVE_WINDOW_SET_BUFFERS_DIMENSIONS
+     *     NATIVE_WINDOW_SET_BUFFERS_FORMAT
+     *     NATIVE_WINDOW_SET_SCALING_MODE       (private)
+     *     NATIVE_WINDOW_LOCK                   (private)
+     *     NATIVE_WINDOW_UNLOCK_AND_POST        (private)
+     *     NATIVE_WINDOW_API_CONNECT            (private)
+     *     NATIVE_WINDOW_API_DISCONNECT         (private)
+     *     NATIVE_WINDOW_SET_BUFFERS_USER_DIMENSIONS (private)
+     *     NATIVE_WINDOW_SET_POST_TRANSFORM_CROP (private)
+     *
+     */
+
+    int     (*perform)(struct ANativeWindow* window,
+                int operation, ... );
+
+    /*
+     * Hook used to cancel a buffer that has been dequeued.
+     * No synchronization is performed between dequeue() and cancel(), so
+     * either external synchronization is needed, or these functions must be
+     * called from the same thread.
+     *
+     * The window holds a reference to the buffer between dequeueBuffer and
+     * either queueBuffer or cancelBuffer, so clients only need their own
+     * reference if they might use the buffer after queueing or canceling it.
+     * Holding a reference to a buffer after queueing or canceling it is only
+     * allowed if a specific buffer count has been set.
+     *
+     * XXX: This function is deprecated.  It will continue to work for some
+     * time for binary compatibility, but the new cancelBuffer function that
+     * takes a fence file descriptor should be used in its place (pass a value
+     * of -1 for the fence file descriptor if there is no valid one to pass).
+     */
+    int     (*cancelBuffer_DEPRECATED)(struct ANativeWindow* window,
+                struct ANativeWindowBuffer* buffer);
+
+    /*
+     * Hook called by EGL to acquire a buffer. This call may block if no
+     * buffers are available.
+     *
+     * The window holds a reference to the buffer between dequeueBuffer and
+     * either queueBuffer or cancelBuffer, so clients only need their own
+     * reference if they might use the buffer after queueing or canceling it.
+     * Holding a reference to a buffer after queueing or canceling it is only
+     * allowed if a specific buffer count has been set.
+     *
+     * The libsync fence file descriptor returned in the int pointed to by the
+     * fenceFd argument will refer to the fence that must signal before the
+     * dequeued buffer may be written to.  A value of -1 indicates that the
+     * caller may access the buffer immediately without waiting on a fence.  If
+     * a valid file descriptor is returned (i.e. any value except -1) then the
+     * caller is responsible for closing the file descriptor.
+     *
+     * Returns 0 on success or -errno on error.
+     */
+    int     (*dequeueBuffer)(struct ANativeWindow* window,
+                struct ANativeWindowBuffer** buffer, int* fenceFd);
+
+    /*
+     * Hook called by EGL when modifications to the render buffer are done.
+     * This unlocks and post the buffer.
+     *
+     * The window holds a reference to the buffer between dequeueBuffer and
+     * either queueBuffer or cancelBuffer, so clients only need their own
+     * reference if they might use the buffer after queueing or canceling it.
+     * Holding a reference to a buffer after queueing or canceling it is only
+     * allowed if a specific buffer count has been set.
+     *
+     * The fenceFd argument specifies a libsync fence file descriptor for a
+     * fence that must signal before the buffer can be accessed.  If the buffer
+     * can be accessed immediately then a value of -1 should be used.  The
+     * caller must not use the file descriptor after it is passed to
+     * queueBuffer, and the ANativeWindow implementation is responsible for
+     * closing it.
+     *
+     * Returns 0 on success or -errno on error.
+     */
+    int     (*queueBuffer)(struct ANativeWindow* window,
+                struct ANativeWindowBuffer* buffer, int fenceFd);
+
+    /*
+     * Hook used to cancel a buffer that has been dequeued.
+     * No synchronization is performed between dequeue() and cancel(), so
+     * either external synchronization is needed, or these functions must be
+     * called from the same thread.
+     *
+     * The window holds a reference to the buffer between dequeueBuffer and
+     * either queueBuffer or cancelBuffer, so clients only need their own
+     * reference if they might use the buffer after queueing or canceling it.
+     * Holding a reference to a buffer after queueing or canceling it is only
+     * allowed if a specific buffer count has been set.
+     *
+     * The fenceFd argument specifies a libsync fence file decsriptor for a
+     * fence that must signal before the buffer can be accessed.  If the buffer
+     * can be accessed immediately then a value of -1 should be used.
+     *
+     * Note that if the client has not waited on the fence that was returned
+     * from dequeueBuffer, that same fence should be passed to cancelBuffer to
+     * ensure that future uses of the buffer are preceded by a wait on that
+     * fence.  The caller must not use the file descriptor after it is passed
+     * to cancelBuffer, and the ANativeWindow implementation is responsible for
+     * closing it.
+     *
+     * Returns 0 on success or -errno on error.
+     */
+    int     (*cancelBuffer)(struct ANativeWindow* window,
+                struct ANativeWindowBuffer* buffer, int fenceFd);
+};
+
+ /* Backwards compatibility: use ANativeWindow (struct ANativeWindow in C).
+  * android_native_window_t is deprecated.
+  */
+typedef struct ANativeWindow ANativeWindow;
+typedef struct ANativeWindow android_native_window_t;
+
+/*
+ *  native_window_set_usage(..., usage)
+ *  Sets the intended usage flags for the next buffers
+ *  acquired with (*lockBuffer)() and on.
+ *  By default (if this function is never called), a usage of
+ *      GRALLOC_USAGE_HW_RENDER | GRALLOC_USAGE_HW_TEXTURE
+ *  is assumed.
+ *  Calling this function will usually cause following buffers to be
+ *  reallocated.
+ */
+
+static inline int native_window_set_usage(
+        struct ANativeWindow* window, int usage)
+{
+    return window->perform(window, NATIVE_WINDOW_SET_USAGE, usage);
+}
+
+/* deprecated. Always returns 0. Don't call. */
+static inline int native_window_connect(
+        struct ANativeWindow* window, int api) {
+    return 0;
+}
+
+/* deprecated. Always returns 0. Don't call. */
+static inline int native_window_disconnect(
+        struct ANativeWindow* window, int api) {
+    return 0;
+}
+
+/*
+ * native_window_set_crop(..., crop)
+ * Sets which region of the next queued buffers needs to be considered.
+ * Depending on the scaling mode, a buffer's crop region is scaled and/or
+ * cropped to match the surface's size.  This function sets the crop in
+ * pre-transformed buffer pixel coordinates.
+ *
+ * The specified crop region applies to all buffers queued after it is called.
+ *
+ * If 'crop' is NULL, subsequently queued buffers won't be cropped.
+ *
+ * An error is returned if for instance the crop region is invalid, out of the
+ * buffer's bound or if the window is invalid.
+ */
+static inline int native_window_set_crop(
+        struct ANativeWindow* window,
+        android_native_rect_t const * crop)
+{
+    return window->perform(window, NATIVE_WINDOW_SET_CROP, crop);
+}
+
+/*
+ * native_window_set_post_transform_crop(..., crop)
+ * Sets which region of the next queued buffers needs to be considered.
+ * Depending on the scaling mode, a buffer's crop region is scaled and/or
+ * cropped to match the surface's size.  This function sets the crop in
+ * post-transformed pixel coordinates.
+ *
+ * The specified crop region applies to all buffers queued after it is called.
+ *
+ * If 'crop' is NULL, subsequently queued buffers won't be cropped.
+ *
+ * An error is returned if for instance the crop region is invalid, out of the
+ * buffer's bound or if the window is invalid.
+ */
+static inline int native_window_set_post_transform_crop(
+        struct ANativeWindow* window,
+        android_native_rect_t const * crop)
+{
+    return window->perform(window, NATIVE_WINDOW_SET_POST_TRANSFORM_CROP, crop);
+}
+
+/*
+ * native_window_set_active_rect(..., active_rect)
+ *
+ * This function is deprecated and will be removed soon.  For now it simply
+ * sets the post-transform crop for compatibility while multi-project commits
+ * get checked.
+ */
+static inline int native_window_set_active_rect(
+        struct ANativeWindow* window,
+        android_native_rect_t const * active_rect)
+{
+    return native_window_set_post_transform_crop(window, active_rect);
+}
+
+/*
+ * native_window_set_buffer_count(..., count)
+ * Sets the number of buffers associated with this native window.
+ */
+static inline int native_window_set_buffer_count(
+        struct ANativeWindow* window,
+        size_t bufferCount)
+{
+    return window->perform(window, NATIVE_WINDOW_SET_BUFFER_COUNT, bufferCount);
+}
+
+/*
+ * native_window_set_buffers_geometry(..., int w, int h, int format)
+ * All buffers dequeued after this call will have the dimensions and format
+ * specified.  A successful call to this function has the same effect as calling
+ * native_window_set_buffers_size and native_window_set_buffers_format.
+ *
+ * XXX: This function is deprecated.  The native_window_set_buffers_dimensions
+ * and native_window_set_buffers_format functions should be used instead.
+ */
+static inline int native_window_set_buffers_geometry(
+        struct ANativeWindow* window,
+        int w, int h, int format)
+{
+    return window->perform(window, NATIVE_WINDOW_SET_BUFFERS_GEOMETRY,
+            w, h, format);
+}
+
+/*
+ * native_window_set_buffers_dimensions(..., int w, int h)
+ * All buffers dequeued after this call will have the dimensions specified.
+ * In particular, all buffers will have a fixed-size, independent from the
+ * native-window size. They will be scaled according to the scaling mode
+ * (see native_window_set_scaling_mode) upon window composition.
+ *
+ * If w and h are 0, the normal behavior is restored. That is, dequeued buffers
+ * following this call will be sized to match the window's size.
+ *
+ * Calling this function will reset the window crop to a NULL value, which
+ * disables cropping of the buffers.
+ */
+static inline int native_window_set_buffers_dimensions(
+        struct ANativeWindow* window,
+        int w, int h)
+{
+    return window->perform(window, NATIVE_WINDOW_SET_BUFFERS_DIMENSIONS,
+            w, h);
+}
+
+/*
+ * native_window_set_buffers_user_dimensions(..., int w, int h)
+ *
+ * Sets the user buffer size for the window, which overrides the
+ * window's size.  All buffers dequeued after this call will have the
+ * dimensions specified unless overridden by
+ * native_window_set_buffers_dimensions.  All buffers will have a
+ * fixed-size, independent from the native-window size. They will be
+ * scaled according to the scaling mode (see
+ * native_window_set_scaling_mode) upon window composition.
+ *
+ * If w and h are 0, the normal behavior is restored. That is, the
+ * default buffer size will match the windows's size.
+ *
+ * Calling this function will reset the window crop to a NULL value, which
+ * disables cropping of the buffers.
+ */
+static inline int native_window_set_buffers_user_dimensions(
+        struct ANativeWindow* window,
+        int w, int h)
+{
+    return window->perform(window, NATIVE_WINDOW_SET_BUFFERS_USER_DIMENSIONS,
+            w, h);
+}
+
+/*
+ * native_window_set_buffers_format(..., int format)
+ * All buffers dequeued after this call will have the format specified.
+ *
+ * If the specified format is 0, the default buffer format will be used.
+ */
+static inline int native_window_set_buffers_format(
+        struct ANativeWindow* window,
+        int format)
+{
+    return window->perform(window, NATIVE_WINDOW_SET_BUFFERS_FORMAT, format);
+}
+
+/*
+ * native_window_set_buffers_transform(..., int transform)
+ * All buffers queued after this call will be displayed transformed according
+ * to the transform parameter specified.
+ */
+static inline int native_window_set_buffers_transform(
+        struct ANativeWindow* window,
+        int transform)
+{
+    return window->perform(window, NATIVE_WINDOW_SET_BUFFERS_TRANSFORM,
+            transform);
+}
+
+/*
+ * native_window_set_buffers_timestamp(..., int64_t timestamp)
+ * All buffers queued after this call will be associated with the timestamp
+ * parameter specified. If the timestamp is set to NATIVE_WINDOW_TIMESTAMP_AUTO
+ * (the default), timestamps will be generated automatically when queueBuffer is
+ * called. The timestamp is measured in nanoseconds, and is normally monotonically
+ * increasing. The timestamp should be unaffected by time-of-day adjustments,
+ * and for a camera should be strictly monotonic but for a media player may be
+ * reset when the position is set.
+ */
+static inline int native_window_set_buffers_timestamp(
+        struct ANativeWindow* window,
+        int64_t timestamp)
+{
+    return window->perform(window, NATIVE_WINDOW_SET_BUFFERS_TIMESTAMP,
+            timestamp);
+}
+
+/*
+ * native_window_set_scaling_mode(..., int mode)
+ * All buffers queued after this call will be associated with the scaling mode
+ * specified.
+ */
+static inline int native_window_set_scaling_mode(
+        struct ANativeWindow* window,
+        int mode)
+{
+    return window->perform(window, NATIVE_WINDOW_SET_SCALING_MODE,
+            mode);
+}
+
+/*
+ * native_window_api_connect(..., int api)
+ * connects an API to this window. only one API can be connected at a time.
+ * Returns -EINVAL if for some reason the window cannot be connected, which
+ * can happen if it's connected to some other API.
+ */
+static inline int native_window_api_connect(
+        struct ANativeWindow* window, int api)
+{
+    return window->perform(window, NATIVE_WINDOW_API_CONNECT, api);
+}
+
+/*
+ * native_window_api_disconnect(..., int api)
+ * disconnect the API from this window.
+ * An error is returned if for instance the window wasn't connected in the
+ * first place.
+ */
+static inline int native_window_api_disconnect(
+        struct ANativeWindow* window, int api)
+{
+    return window->perform(window, NATIVE_WINDOW_API_DISCONNECT, api);
+}
+
+/*
+ * native_window_dequeue_buffer_and_wait(...)
+ * Dequeue a buffer and wait on the fence associated with that buffer.  The
+ * buffer may safely be accessed immediately upon this function returning.  An
+ * error is returned if either of the dequeue or the wait operations fail.
+ */
+static inline int native_window_dequeue_buffer_and_wait(ANativeWindow *anw,
+        struct ANativeWindowBuffer** anb) {
+    return anw->dequeueBuffer_DEPRECATED(anw, anb);
+}
+
+
+__END_DECLS
+
+#endif /* SYSTEM_CORE_INCLUDE_ANDROID_WINDOW_H */
diff --git a/third_party/hwcplus/src/hardware.c b/third_party/hwcplus/src/hardware.c
new file mode 100644
index 0000000..6713ea0
--- /dev/null
+++ b/third_party/hwcplus/src/hardware.c
@@ -0,0 +1,200 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <hardware/hardware.h>
+
+#include <cutils/properties.h>
+
+#include <dlfcn.h>
+#include <string.h>
+#include <pthread.h>
+#include <errno.h>
+#include <limits.h>
+
+#define LOG_TAG "HAL"
+#include <utils/Log.h>
+
+/** Base path of the hal modules */
+#if defined(__LP64__)
+#define HAL_LIBRARY_PATH1 "/system/lib64/hw"
+#define HAL_LIBRARY_PATH2 "/vendor/lib64/hw"
+#else
+#define HAL_LIBRARY_PATH1 "/system/lib/hw"
+#define HAL_LIBRARY_PATH2 "/vendor/lib/hw"
+#endif
+
+/**
+ * There are a set of variant filename for modules. The form of the filename
+ * is "<MODULE_ID>.variant.so" so for the led module the Dream variants 
+ * of base "ro.product.board", "ro.board.platform" and "ro.arch" would be:
+ *
+ * led.trout.so
+ * led.msm7k.so
+ * led.ARMV6.so
+ * led.default.so
+ */
+
+static const char *variant_keys[] = {
+    "ro.hardware",  /* This goes first so that it can pick up a different
+                       file on the emulator. */
+    "ro.product.board",
+    "ro.board.platform",
+    "ro.arch"
+};
+
+static const int HAL_VARIANT_KEYS_COUNT =
+    (sizeof(variant_keys)/sizeof(variant_keys[0]));
+
+/**
+ * Load the file defined by the variant and if successful
+ * return the dlopen handle and the hmi.
+ * @return 0 = success, !0 = failure.
+ */
+static int load(const char *id,
+        const char *path,
+        const struct hw_module_t **pHmi)
+{
+    int status;
+    void *handle;
+    struct hw_module_t *hmi;
+
+    /*
+     * load the symbols resolving undefined symbols before
+     * dlopen returns. Since RTLD_GLOBAL is not or'd in with
+     * RTLD_NOW the external symbols will not be global
+     */
+    handle = dlopen(path, RTLD_NOW);
+    if (handle == NULL) {
+        char const *err_str = dlerror();
+        ALOGE("load: module=%s\n%s", path, err_str?err_str:"unknown");
+        status = -EINVAL;
+        goto done;
+    }
+
+    /* Get the address of the struct hal_module_info. */
+    const char *sym = HAL_MODULE_INFO_SYM_AS_STR;
+    hmi = (struct hw_module_t *)dlsym(handle, sym);
+    if (hmi == NULL) {
+        ALOGE("load: couldn't find symbol %s", sym);
+        status = -EINVAL;
+        goto done;
+    }
+
+    /* Check that the id matches */
+    if (strcmp(id, hmi->id) != 0) {
+        ALOGE("load: id=%s != hmi->id=%s", id, hmi->id);
+        status = -EINVAL;
+        goto done;
+    }
+
+    hmi->dso = handle;
+
+    /* success */
+    status = 0;
+
+    done:
+    if (status != 0) {
+        hmi = NULL;
+        if (handle != NULL) {
+            dlclose(handle);
+            handle = NULL;
+        }
+    } else {
+        ALOGV("loaded HAL id=%s path=%s hmi=%p handle=%p",
+                id, path, *pHmi, handle);
+    }
+
+    *pHmi = hmi;
+
+    return status;
+}
+
+/*
+ * Check if a HAL with given name and subname exists, if so return 0, otherwise
+ * otherwise return negative.  On success path will contain the path to the HAL.
+ */
+static int hw_module_exists(char *path, size_t path_len, const char *name,
+                            const char *subname)
+{
+    snprintf(path, path_len, "%s/%s.%s.so",
+             HAL_LIBRARY_PATH2, name, subname);
+    if (access(path, R_OK) == 0)
+        return 0;
+
+    snprintf(path, path_len, "%s/%s.%s.so",
+             HAL_LIBRARY_PATH1, name, subname);
+    if (access(path, R_OK) == 0)
+        return 0;
+
+    return -ENOENT;
+}
+
+int hw_get_module_by_class(const char *class_id, const char *inst,
+                           const struct hw_module_t **module)
+{
+    int i;
+    char prop[PATH_MAX];
+    char path[PATH_MAX];
+    char name[PATH_MAX];
+    char prop_name[PATH_MAX];
+
+    if (inst)
+        snprintf(name, PATH_MAX, "%s.%s", class_id, inst);
+    else
+        strlcpy(name, class_id, PATH_MAX);
+
+    /*
+     * Here we rely on the fact that calling dlopen multiple times on
+     * the same .so will simply increment a refcount (and not load
+     * a new copy of the library).
+     * We also assume that dlopen() is thread-safe.
+     */
+
+    /* First try a property specific to the class and possibly instance */
+    snprintf(prop_name, sizeof(prop_name), "ro.hardware.%s", name);
+    if (property_get(prop_name, prop, NULL) > 0) {
+        if (hw_module_exists(path, sizeof(path), name, prop) == 0) {
+            goto found;
+        }
+    }
+
+    /* Loop through the configuration variants looking for a module */
+    for (i=0 ; i<HAL_VARIANT_KEYS_COUNT; i++) {
+        if (property_get(variant_keys[i], prop, NULL) == 0) {
+            continue;
+        }
+        if (hw_module_exists(path, sizeof(path), name, prop) == 0) {
+            goto found;
+        }
+    }
+
+    /* Nothing found, try the default */
+    if (hw_module_exists(path, sizeof(path), name, "default") == 0) {
+        goto found;
+    }
+
+    return -ENOENT;
+
+found:
+    /* load the module, if this fails, we're doomed, and we should not try
+     * to load a different variant. */
+    return load(class_id, path, module);
+}
+
+int hw_get_module(const char *id, const struct hw_module_t **module)
+{
+    return hw_get_module_by_class(id, NULL, module);
+}
diff --git a/third_party/iccjpeg/iccjpeg.target.darwin-arm.mk b/third_party/iccjpeg/iccjpeg.target.darwin-arm.mk
index 29f4ffe..f9c1c8c 100644
--- a/third_party/iccjpeg/iccjpeg.target.darwin-arm.mk
+++ b/third_party/iccjpeg/iccjpeg.target.darwin-arm.mk
@@ -222,7 +222,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/iccjpeg/iccjpeg.target.darwin-mips.mk b/third_party/iccjpeg/iccjpeg.target.darwin-mips.mk
index 2b03e66..27c3f8d 100644
--- a/third_party/iccjpeg/iccjpeg.target.darwin-mips.mk
+++ b/third_party/iccjpeg/iccjpeg.target.darwin-mips.mk
@@ -220,7 +220,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/iccjpeg/iccjpeg.target.darwin-x86.mk b/third_party/iccjpeg/iccjpeg.target.darwin-x86.mk
index 2b0a8c4..a89d8b6 100644
--- a/third_party/iccjpeg/iccjpeg.target.darwin-x86.mk
+++ b/third_party/iccjpeg/iccjpeg.target.darwin-x86.mk
@@ -220,7 +220,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/iccjpeg/iccjpeg.target.darwin-x86_64.mk b/third_party/iccjpeg/iccjpeg.target.darwin-x86_64.mk
index 33d0a34..1822d2b 100644
--- a/third_party/iccjpeg/iccjpeg.target.darwin-x86_64.mk
+++ b/third_party/iccjpeg/iccjpeg.target.darwin-x86_64.mk
@@ -220,7 +220,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/iccjpeg/iccjpeg.target.linux-arm.mk b/third_party/iccjpeg/iccjpeg.target.linux-arm.mk
index 29f4ffe..f9c1c8c 100644
--- a/third_party/iccjpeg/iccjpeg.target.linux-arm.mk
+++ b/third_party/iccjpeg/iccjpeg.target.linux-arm.mk
@@ -222,7 +222,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/iccjpeg/iccjpeg.target.linux-mips.mk b/third_party/iccjpeg/iccjpeg.target.linux-mips.mk
index 2b03e66..27c3f8d 100644
--- a/third_party/iccjpeg/iccjpeg.target.linux-mips.mk
+++ b/third_party/iccjpeg/iccjpeg.target.linux-mips.mk
@@ -220,7 +220,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/iccjpeg/iccjpeg.target.linux-x86.mk b/third_party/iccjpeg/iccjpeg.target.linux-x86.mk
index 2b0a8c4..a89d8b6 100644
--- a/third_party/iccjpeg/iccjpeg.target.linux-x86.mk
+++ b/third_party/iccjpeg/iccjpeg.target.linux-x86.mk
@@ -220,7 +220,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/iccjpeg/iccjpeg.target.linux-x86_64.mk b/third_party/iccjpeg/iccjpeg.target.linux-x86_64.mk
index 33d0a34..1822d2b 100644
--- a/third_party/iccjpeg/iccjpeg.target.linux-x86_64.mk
+++ b/third_party/iccjpeg/iccjpeg.target.linux-x86_64.mk
@@ -220,7 +220,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/leveldatabase/leveldatabase.gyp b/third_party/leveldatabase/leveldatabase.gyp
index f6956ed..58504f3 100644
--- a/third_party/leveldatabase/leveldatabase.gyp
+++ b/third_party/leveldatabase/leveldatabase.gyp
@@ -25,7 +25,6 @@
         ],
         'variables': {
           'test_suite_name': 'env_chromium_unittests',
-          'input_shlib_path': '<(SHARED_LIB_DIR)/<(SHARED_LIB_PREFIX)env_chromium_unittests<(SHARED_LIB_SUFFIX)',
         },
         'includes': [ '../../build/apk_test.gypi' ],
       }],
diff --git a/third_party/leveldatabase/leveldatabase.target.darwin-arm.mk b/third_party/leveldatabase/leveldatabase.target.darwin-arm.mk
index 059cc60..f7cb3a3 100644
--- a/third_party/leveldatabase/leveldatabase.target.darwin-arm.mk
+++ b/third_party/leveldatabase/leveldatabase.target.darwin-arm.mk
@@ -269,7 +269,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/leveldatabase/leveldatabase.target.darwin-mips.mk b/third_party/leveldatabase/leveldatabase.target.darwin-mips.mk
index ad06366..87a0aba 100644
--- a/third_party/leveldatabase/leveldatabase.target.darwin-mips.mk
+++ b/third_party/leveldatabase/leveldatabase.target.darwin-mips.mk
@@ -267,7 +267,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/leveldatabase/leveldatabase.target.darwin-x86.mk b/third_party/leveldatabase/leveldatabase.target.darwin-x86.mk
index 38a6d3d..76ddae3 100644
--- a/third_party/leveldatabase/leveldatabase.target.darwin-x86.mk
+++ b/third_party/leveldatabase/leveldatabase.target.darwin-x86.mk
@@ -267,7 +267,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/leveldatabase/leveldatabase.target.darwin-x86_64.mk b/third_party/leveldatabase/leveldatabase.target.darwin-x86_64.mk
index d0c6a29..7084ead 100644
--- a/third_party/leveldatabase/leveldatabase.target.darwin-x86_64.mk
+++ b/third_party/leveldatabase/leveldatabase.target.darwin-x86_64.mk
@@ -267,7 +267,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/leveldatabase/leveldatabase.target.linux-arm.mk b/third_party/leveldatabase/leveldatabase.target.linux-arm.mk
index 059cc60..f7cb3a3 100644
--- a/third_party/leveldatabase/leveldatabase.target.linux-arm.mk
+++ b/third_party/leveldatabase/leveldatabase.target.linux-arm.mk
@@ -269,7 +269,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/leveldatabase/leveldatabase.target.linux-mips.mk b/third_party/leveldatabase/leveldatabase.target.linux-mips.mk
index ad06366..87a0aba 100644
--- a/third_party/leveldatabase/leveldatabase.target.linux-mips.mk
+++ b/third_party/leveldatabase/leveldatabase.target.linux-mips.mk
@@ -267,7 +267,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/leveldatabase/leveldatabase.target.linux-x86.mk b/third_party/leveldatabase/leveldatabase.target.linux-x86.mk
index 38a6d3d..76ddae3 100644
--- a/third_party/leveldatabase/leveldatabase.target.linux-x86.mk
+++ b/third_party/leveldatabase/leveldatabase.target.linux-x86.mk
@@ -267,7 +267,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/leveldatabase/leveldatabase.target.linux-x86_64.mk b/third_party/leveldatabase/leveldatabase.target.linux-x86_64.mk
index d0c6a29..7084ead 100644
--- a/third_party/leveldatabase/leveldatabase.target.linux-x86_64.mk
+++ b/third_party/leveldatabase/leveldatabase.target.linux-x86_64.mk
@@ -267,7 +267,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libaddressinput/chromium/chrome_rule_test.cc b/third_party/libaddressinput/chromium/chrome_rule_test.cc
index b56e56b..064e7da 100644
--- a/third_party/libaddressinput/chromium/chrome_rule_test.cc
+++ b/third_party/libaddressinput/chromium/chrome_rule_test.cc
@@ -51,7 +51,7 @@
     const std::string expected_output(base::WideToUTF8(expectations[i].output));
     std::string output;
     EXPECT_EQ(!expected_output.empty(),
-              rule.CanonicalizeSubKey(input, &output))
+              rule.CanonicalizeSubKey(input, true, &output))
         << "Failed for input " << input;
     EXPECT_EQ(expected_output, output);
   }
diff --git a/third_party/libaddressinput/chromium/cpp/src/address_validator.cc b/third_party/libaddressinput/chromium/cpp/src/address_validator.cc
index 435f75d..2832548 100644
--- a/third_party/libaddressinput/chromium/cpp/src/address_validator.cc
+++ b/third_party/libaddressinput/chromium/cpp/src/address_validator.cc
@@ -220,7 +220,7 @@
       const std::string& user_input = address.GetFieldValue(sub_field_type);
       if (!user_input.empty() &&
           FilterAllows(filter, sub_field_type, AddressProblem::UNKNOWN_VALUE) &&
-          !rule.CanonicalizeSubKey(user_input, &sub_key)) {
+          !rule.CanonicalizeSubKey(user_input, false, &sub_key)) {
         problems->push_back(AddressProblem(
             sub_field_type,
             AddressProblem::UNKNOWN_VALUE,
@@ -443,6 +443,7 @@
         ruleset_it->second->GetLanguageCodeRule(address_data->language_code);
 
     return rule.CanonicalizeSubKey(address_data->administrative_area,
+                                   true,  // Keep input latin.
                                    &address_data->administrative_area);
   }
 
diff --git a/third_party/libaddressinput/chromium/cpp/src/rule.cc b/third_party/libaddressinput/chromium/cpp/src/rule.cc
index 791ac9e..1d5c408 100644
--- a/third_party/libaddressinput/chromium/cpp/src/rule.cc
+++ b/third_party/libaddressinput/chromium/cpp/src/rule.cc
@@ -197,6 +197,25 @@
   return INVALID_MESSAGE_ID;
 }
 
+// Finds |target| in |values_to_compare| and sets |selected_value| to the
+// associated value from |values_to_select|. Returns true if |target| is in
+// |values_to_compare|. |selected_value| should not be NULL. |values_to_compare|
+// should not be larger than |values_to_select|.
+bool GetMatchingValue(const std::string& target,
+                      const std::vector<std::string>& values_to_compare,
+                      const std::vector<std::string>& values_to_select,
+                      std::string* selected_value) {
+  assert(selected_value != NULL);
+  assert(values_to_select.size() >= values_to_compare.size());
+  for (size_t i = 0; i < values_to_compare.size(); ++i) {
+    if (LooseStringCompare(values_to_compare[i], target)) {
+      *selected_value = values_to_select[i];
+      return true;
+    }
+  }
+  return false;
+}
+
 }  // namespace
 
 FormatElement::FormatElement(AddressField field)
@@ -376,27 +395,20 @@
 }
 
 bool Rule::CanonicalizeSubKey(const std::string& user_input,
+                              bool keep_input_latin,
                               std::string* sub_key) const {
+  assert(sub_key != NULL);
+
   if (sub_keys_.empty()) {
     *sub_key = user_input;
     return true;
   }
 
-  return GetMatchingSubKey(user_input, sub_keys_, sub_key) ||
-      GetMatchingSubKey(user_input, sub_names_, sub_key) ||
-      GetMatchingSubKey(user_input, sub_lnames_, sub_key);
-}
-
-bool Rule::GetMatchingSubKey(const std::string& target,
-                             const std::vector<std::string>& values,
-                             std::string* sub_key) const {
-  for (size_t i = 0; i < values.size(); ++i) {
-    if (LooseStringCompare(values[i], target)) {
-      *sub_key = sub_keys_[i];
-      return true;
-    }
-  }
-  return false;
+  return GetMatchingValue(user_input, sub_keys_, sub_keys_, sub_key) ||
+      GetMatchingValue(user_input, sub_names_, sub_keys_, sub_key) ||
+      (keep_input_latin &&
+       GetMatchingValue(user_input, sub_lnames_, sub_lnames_, sub_key)) ||
+      GetMatchingValue(user_input, sub_lnames_, sub_keys_, sub_key);
 }
 
 }  // namespace addressinput
diff --git a/third_party/libaddressinput/chromium/cpp/src/rule.h b/third_party/libaddressinput/chromium/cpp/src/rule.h
index cc0a3d7..604ec0a 100644
--- a/third_party/libaddressinput/chromium/cpp/src/rule.h
+++ b/third_party/libaddressinput/chromium/cpp/src/rule.h
@@ -166,16 +166,18 @@
 
   // Outputs the sub key for a given user input. For example, Texas will map to
   // TX.
+  //
+  // If |keep_input_latin| is true, then does not convert a latinized region
+  // name into a sub key. For example, tOKYo will change to TOKYO. If
+  // |keep_input_latin| is false, then converts a latinized region name into a
+  // sub key. For example, tOKYo becomes 東京都.
+  //
+  // |sub_key| should not be NULL.
   bool CanonicalizeSubKey(const std::string& user_input,
+                          bool keep_input_latin,
                           std::string* sub_key) const;
 
  private:
-  // Finds |target| in |values| and sets |sub_key| to the associated value from
-  // |sub_keys_|, or returns false if |target| is not in |values|.
-  bool GetMatchingSubKey(const std::string& target,
-                         const std::vector<std::string>& values,
-                         std::string* sub_key) const;
-
   std::string key_;
   std::string name_;
   std::string latin_name_;
diff --git a/third_party/libaddressinput/chromium/cpp/test/address_validator_test.cc b/third_party/libaddressinput/chromium/cpp/test/address_validator_test.cc
index f0d2095..891de35 100644
--- a/third_party/libaddressinput/chromium/cpp/test/address_validator_test.cc
+++ b/third_party/libaddressinput/chromium/cpp/test/address_validator_test.cc
@@ -556,5 +556,39 @@
   }
 }
 
+TEST_F(AddressValidatorTest, CanonicalizeUsAdminAreaName) {
+  AddressData address;
+  address.country_code = "US";
+  address.administrative_area = "cALIFORNIa";
+  EXPECT_TRUE(validator_->CanonicalizeAdministrativeArea(&address));
+  EXPECT_EQ("CA", address.administrative_area);
+}
+
+TEST_F(AddressValidatorTest, CanonicalizeUsAdminAreaKey) {
+  AddressData address;
+  address.country_code = "US";
+  address.administrative_area = "CA";
+  EXPECT_TRUE(validator_->CanonicalizeAdministrativeArea(&address));
+  EXPECT_EQ("CA", address.administrative_area);
+}
+
+TEST_F(AddressValidatorTest, CanonicalizeJpAdminAreaKey) {
+  validator_->LoadRules("JP");
+  AddressData address;
+  address.country_code = "JP";
+  address.administrative_area = "東京都";
+  EXPECT_TRUE(validator_->CanonicalizeAdministrativeArea(&address));
+  EXPECT_EQ("東京都", address.administrative_area);
+}
+
+TEST_F(AddressValidatorTest, CanonicalizeJpAdminAreaLatinName) {
+  validator_->LoadRules("JP");
+  AddressData address;
+  address.country_code = "JP";
+  address.administrative_area = "tOKYo";
+  EXPECT_TRUE(validator_->CanonicalizeAdministrativeArea(&address));
+  EXPECT_EQ("TOKYO", address.administrative_area);
+}
+
 }  // namespace addressinput
 }  // namespace i18n
diff --git a/third_party/libaddressinput/chromium/cpp/test/rule_test.cc b/third_party/libaddressinput/chromium/cpp/test/rule_test.cc
index ae3cfc3..c158955 100644
--- a/third_party/libaddressinput/chromium/cpp/test/rule_test.cc
+++ b/third_party/libaddressinput/chromium/cpp/test/rule_test.cc
@@ -329,19 +329,25 @@
   EXPECT_EQ(3U, rule.GetSubKeys().size());
 
   std::string sub_key;
-  EXPECT_TRUE(rule.CanonicalizeSubKey("BAR", &sub_key));
+  EXPECT_TRUE(rule.CanonicalizeSubKey("BAR", false, &sub_key));
   EXPECT_EQ("BAR", sub_key);
   sub_key.clear();
 
-  EXPECT_TRUE(rule.CanonicalizeSubKey("Bartopolis", &sub_key));
+  EXPECT_TRUE(rule.CanonicalizeSubKey("Bartopolis", false, &sub_key));
   EXPECT_EQ("BAR", sub_key);
   sub_key.clear();
 
-  EXPECT_TRUE(rule.CanonicalizeSubKey("Bartopolis2", &sub_key));
+  // Unlatinize.
+  EXPECT_TRUE(rule.CanonicalizeSubKey("Bartopolis2", false, &sub_key));
   EXPECT_EQ("BAR", sub_key);
   sub_key.clear();
 
-  EXPECT_FALSE(rule.CanonicalizeSubKey("Beertopia", &sub_key));
+  // Keep input latin.
+  EXPECT_TRUE(rule.CanonicalizeSubKey("Bartopolis2", true, &sub_key));
+  EXPECT_EQ("Bartopolis2", sub_key);
+  sub_key.clear();
+
+  EXPECT_FALSE(rule.CanonicalizeSubKey("Beertopia", false, &sub_key));
   EXPECT_EQ("", sub_key);
 }
 
diff --git a/third_party/libc++abi/libc++abi.gyp b/third_party/libc++abi/libc++abi.gyp
index 64c114b..3d97735 100644
--- a/third_party/libc++abi/libc++abi.gyp
+++ b/third_party/libc++abi/libc++abi.gyp
@@ -86,6 +86,8 @@
       ],
       'libraries': [
         '-lrt',
+        '-lgcc_s',
+        '-lpthread',
         '-lc',
       ]
     },
diff --git a/third_party/libevent/libevent.target.darwin-arm.mk b/third_party/libevent/libevent.target.darwin-arm.mk
index 0ac5cd9..2d04cc0 100644
--- a/third_party/libevent/libevent.target.darwin-arm.mk
+++ b/third_party/libevent/libevent.target.darwin-arm.mk
@@ -234,7 +234,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libevent/libevent.target.darwin-mips.mk b/third_party/libevent/libevent.target.darwin-mips.mk
index de538e9..89d5938 100644
--- a/third_party/libevent/libevent.target.darwin-mips.mk
+++ b/third_party/libevent/libevent.target.darwin-mips.mk
@@ -232,7 +232,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libevent/libevent.target.darwin-x86.mk b/third_party/libevent/libevent.target.darwin-x86.mk
index dd6a649..df14f06 100644
--- a/third_party/libevent/libevent.target.darwin-x86.mk
+++ b/third_party/libevent/libevent.target.darwin-x86.mk
@@ -232,7 +232,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libevent/libevent.target.darwin-x86_64.mk b/third_party/libevent/libevent.target.darwin-x86_64.mk
index dcf1496..19bb0fe 100644
--- a/third_party/libevent/libevent.target.darwin-x86_64.mk
+++ b/third_party/libevent/libevent.target.darwin-x86_64.mk
@@ -232,7 +232,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libevent/libevent.target.linux-arm.mk b/third_party/libevent/libevent.target.linux-arm.mk
index 0ac5cd9..2d04cc0 100644
--- a/third_party/libevent/libevent.target.linux-arm.mk
+++ b/third_party/libevent/libevent.target.linux-arm.mk
@@ -234,7 +234,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libevent/libevent.target.linux-mips.mk b/third_party/libevent/libevent.target.linux-mips.mk
index de538e9..89d5938 100644
--- a/third_party/libevent/libevent.target.linux-mips.mk
+++ b/third_party/libevent/libevent.target.linux-mips.mk
@@ -232,7 +232,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libevent/libevent.target.linux-x86.mk b/third_party/libevent/libevent.target.linux-x86.mk
index dd6a649..df14f06 100644
--- a/third_party/libevent/libevent.target.linux-x86.mk
+++ b/third_party/libevent/libevent.target.linux-x86.mk
@@ -232,7 +232,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libevent/libevent.target.linux-x86_64.mk b/third_party/libevent/libevent.target.linux-x86_64.mk
index dcf1496..19bb0fe 100644
--- a/third_party/libevent/libevent.target.linux-x86_64.mk
+++ b/third_party/libevent/libevent.target.linux-x86_64.mk
@@ -232,7 +232,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libexif/README.chromium b/third_party/libexif/README.chromium
index d8dc543..24043ff 100644
--- a/third_party/libexif/README.chromium
+++ b/third_party/libexif/README.chromium
@@ -4,7 +4,7 @@
 License: LGPL 2.1
 License File: sources/COPYING
 Date: 2012-06-04
-Security Critical: yes.
+Security Critical: yes
 
 Description:
 libexif is a library for parsing, editing, and saving EXIF data. Many maker
@@ -21,3 +21,5 @@
   INSTALL, install-sh, Makefile-files, *.sym, *.am, *.in, *.pc.in, *.spec, *.sh
   and *.txt files.
 - Removed "doc", "po", "NEWS", "mkinstalldirs", "missing", "nls" folders.
+- Removed inline from exif_tag_table_count function in exif_tag.c, to build
+  cleanly with MSVC's non-standard inline rules.
diff --git a/third_party/libexif/README.security b/third_party/libexif/README.security
new file mode 100644
index 0000000..d194b90
--- /dev/null
+++ b/third_party/libexif/README.security
@@ -0,0 +1 @@
+This library has NOT been approved for unsandboxed usage. Contact security@chromium.org for any questions.
diff --git a/third_party/libexif/chromium.patch b/third_party/libexif/chromium.patch
index 02c9399..79e6a77 100644
--- a/third_party/libexif/chromium.patch
+++ b/third_party/libexif/chromium.patch
@@ -1,6 +1,6 @@
 diff -urN libexif-0.6.21/config.h libexif-0.6.21.modified/config.h
 --- libexif-0.6.21/config.h	1969-12-31 16:00:00.000000000 -0800
-+++ libexif-0.6.21.modified/config.h	2012-07-14 15:31:49.614388000 -0700
++++ libexif-0.6.21.modified/config.h	1969-12-31 16:00:00.000000000 -0800
 @@ -0,0 +1,360 @@
 +#if defined(_WIN32)
 +/* config.h.  Generated by configure.  */
@@ -363,20 +363,19 @@
 +
 +#endif  // _WIN32
 diff -urN libexif-0.6.21/libexif/canon/mnote-canon-tag.c libexif-0.6.21.modified/libexif/canon/mnote-canon-tag.c
---- libexif-0.6.21/libexif/canon/mnote-canon-tag.c	2012-06-19 14:47:28.000000000 -0700
-+++ libexif-0.6.21.modified/libexif/canon/mnote-canon-tag.c	2012-07-14 15:51:50.883304000 -0700
-@@ -159,8 +159,9 @@
- mnote_canon_tag_get_title (MnoteCanonTag t)
+--- libexif-0.6.21/libexif/canon/mnote-canon-tag.c	1969-12-31 16:00:00.000000000 -0800
++++ libexif-0.6.21.modified/libexif/canon/mnote-canon-tag.c	1969-12-31 16:00:00.000000000 -0800
+@@ -160,7 +160,9 @@
  {
  	unsigned int i;
--
+ 
 +#if defined(BIND_TEXTDOMAIN)
  	bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR); 
 +#endif
  	for (i = 0; i < sizeof (table) / sizeof (table[0]); i++)
  		if (table[i].tag == t) return (_(table[i].title));
  	return NULL;
-@@ -194,7 +195,9 @@
+@@ -194,7 +196,9 @@
  		if (table[i].tag == t) {
  			if (!table[i].description || !*table[i].description)
  				return "";
@@ -387,62 +386,70 @@
  		}
  	return NULL;
 diff -urN libexif-0.6.21/libexif/exif-entry.c libexif-0.6.21.modified/libexif/exif-entry.c
---- libexif-0.6.21/libexif/exif-entry.c	2012-07-12 11:31:56.000000000 -0700
-+++ libexif-0.6.21.modified/libexif/exif-entry.c	2012-07-14 15:52:26.955243000 -0700
-@@ -860,8 +860,9 @@
+--- libexif-0.6.21/libexif/exif-entry.c	1969-12-31 16:00:00.000000000 -0800
++++ libexif-0.6.21.modified/libexif/exif-entry.c	1969-12-31 16:00:00.000000000 -0800
+@@ -860,7 +860,9 @@
  	 * 
  	 * bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
  	 */
 +#if defined(BIND_TEXTDOMAIN)
  	bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
--
 +#endif
+ 
  	if (!e || !e->parent || !e->parent->parent || !maxlen)
  		return val;
- 
 diff -urN libexif-0.6.21/libexif/exif-format.c libexif-0.6.21.modified/libexif/exif-format.c
---- libexif-0.6.21/libexif/exif-format.c	2009-11-07 22:59:07.000000000 -0800
-+++ libexif-0.6.21.modified/libexif/exif-format.c	2012-07-14 15:19:07.203071000 -0700
-@@ -61,8 +61,9 @@
+--- libexif-0.6.21/libexif/exif-format.c	1969-12-31 16:00:00.000000000 -0800
++++ libexif-0.6.21.modified/libexif/exif-format.c	1969-12-31 16:00:00.000000000 -0800
+@@ -61,7 +61,9 @@
  	 * 
  	 * bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
  	 */
 +#if defined(BIND_TEXTDOMAIN)
  	bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
--
 +#endif
+ 
  	for (i = 0; ExifFormatTable[i].name; i++)
  		if (ExifFormatTable[i].format == format)
- 			return _(ExifFormatTable[i].name);
 diff -urN libexif-0.6.21/libexif/exif-mem.c libexif-0.6.21.modified/libexif/exif-mem.c
---- libexif-0.6.21/libexif/exif-mem.c	2009-09-24 23:35:48.000000000 -0700
-+++ libexif-0.6.21.modified/libexif/exif-mem.c	2012-07-14 15:26:44.722234000 -0700
-@@ -1,3 +1,22 @@
-+/* exif-mem.c
-+ *
-+ * Copyright (c) 2003 Lutz Mueller <lutz@users.sourceforge.net>
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the
-+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-+ * Boston, MA  02110-1301  USA.
-+ */
+--- libexif-0.6.21/libexif/exif-mem.c	1969-12-31 16:00:00.000000000 -0800
++++ libexif-0.6.21.modified/libexif/exif-mem.c	1969-12-31 16:00:00.000000000 -0800
+@@ -1,3 +1,23 @@
++ /* exif-mem.c
++  *
++  * Copyright (c) 2003 Lutz Mueller <lutz@users.sourceforge.net>
++  *
++  * This library is free software; you can redistribute it and/or
++  * modify it under the terms of the GNU Lesser General Public
++  * License as published by the Free Software Foundation; either
++  * version 2 of the License, or (at your option) any later version.
++  *
++  * This library is distributed in the hope that it will be useful,
++  * but WITHOUT ANY WARRANTY; without even the implied warranty of
++  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++  * Lesser General Public License for more details.
++  *
++  * You should have received a copy of the GNU Lesser General Public
++  * License along with this library; if not, write to the
++  * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
++  * Boston, MA  02110-1301  USA.
++  */
++
  #include <libexif/exif-mem.h>
  
  #include <stdlib.h>
 diff -urN libexif-0.6.21/libexif/exif-tag.c libexif-0.6.21.modified/libexif/exif-tag.c
---- libexif-0.6.21/libexif/exif-tag.c	2011-05-18 21:41:02.000000000 -0700
-+++ libexif-0.6.21.modified/libexif/exif-tag.c	2012-07-14 15:53:31.642803000 -0700
+--- libexif-0.6.21/libexif/exif-tag.c	1969-12-31 16:00:00.000000000 -0800
++++ libexif-0.6.21.modified/libexif/exif-tag.c	1969-12-31 16:00:00.000000000 -0800
+@@ -877,7 +877,7 @@
+  * Return the number of entries in the EXIF tag table, including the
+  * terminating NULL entry.
+  */
+-inline unsigned int
++unsigned int
+ exif_tag_table_count (void)
+ {
+ 	return sizeof (ExifTagTable) / sizeof (ExifTagTable[0]);
 @@ -990,7 +990,9 @@
  	 * 
  	 * bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
@@ -464,19 +471,19 @@
  }
  
 diff -urN libexif-0.6.21/libexif/exif-utils.h libexif-0.6.21.modified/libexif/exif-utils.h
---- libexif-0.6.21/libexif/exif-utils.h	2009-10-26 23:06:11.000000000 -0700
-+++ libexif-0.6.21.modified/libexif/exif-utils.h	2012-07-14 15:27:36.664810000 -0700
-@@ -30,6 +30,7 @@
- #include <libexif/exif-byte-order.h>
+--- libexif-0.6.21/libexif/exif-utils.h	1969-12-31 16:00:00.000000000 -0800
++++ libexif-0.6.21.modified/libexif/exif-utils.h	1969-12-31 16:00:00.000000000 -0800
+@@ -31,6 +31,7 @@
  #include <libexif/exif-format.h>
  #include <libexif/_stdint.h>
+ 
 +#include "config.h"
  
- 
  /* If these definitions don't work for you, please let us fix the 
+  * macro generating _stdint.h */
 diff -urN libexif-0.6.21/libexif/fuji/mnote-fuji-tag.c libexif-0.6.21.modified/libexif/fuji/mnote-fuji-tag.c
---- libexif-0.6.21/libexif/fuji/mnote-fuji-tag.c	2012-06-19 14:47:28.000000000 -0700
-+++ libexif-0.6.21.modified/libexif/fuji/mnote-fuji-tag.c	2012-07-14 15:54:31.132701000 -0700
+--- libexif-0.6.21/libexif/fuji/mnote-fuji-tag.c	1969-12-31 16:00:00.000000000 -0800
++++ libexif-0.6.21.modified/libexif/fuji/mnote-fuji-tag.c	1969-12-31 16:00:00.000000000 -0800
 @@ -83,7 +83,9 @@
  {
  	unsigned int i;
@@ -498,8 +505,8 @@
  		}
  	return NULL;
 diff -urN libexif-0.6.21/libexif/olympus/mnote-olympus-tag.c libexif-0.6.21.modified/libexif/olympus/mnote-olympus-tag.c
---- libexif-0.6.21/libexif/olympus/mnote-olympus-tag.c	2011-05-18 21:41:02.000000000 -0700
-+++ libexif-0.6.21.modified/libexif/olympus/mnote-olympus-tag.c	2012-07-14 15:55:36.303176000 -0700
+--- libexif-0.6.21/libexif/olympus/mnote-olympus-tag.c	1969-12-31 16:00:00.000000000 -0800
++++ libexif-0.6.21.modified/libexif/olympus/mnote-olympus-tag.c	1969-12-31 16:00:00.000000000 -0800
 @@ -208,7 +208,9 @@
  {
  	unsigned int i;
@@ -521,8 +528,8 @@
  		}
  	return NULL;
 diff -urN libexif-0.6.21/libexif/pentax/mnote-pentax-tag.c libexif-0.6.21.modified/libexif/pentax/mnote-pentax-tag.c
---- libexif-0.6.21/libexif/pentax/mnote-pentax-tag.c	2011-05-18 21:41:02.000000000 -0700
-+++ libexif-0.6.21.modified/libexif/pentax/mnote-pentax-tag.c	2012-07-14 15:56:30.122590000 -0700
+--- libexif-0.6.21/libexif/pentax/mnote-pentax-tag.c	1969-12-31 16:00:00.000000000 -0800
++++ libexif-0.6.21.modified/libexif/pentax/mnote-pentax-tag.c	1969-12-31 16:00:00.000000000 -0800
 @@ -153,7 +153,9 @@
  {
  	unsigned int i;
@@ -544,8 +551,8 @@
  		}
  	return NULL;
 diff -urN libexif-0.6.21/libexif/_stdint.h libexif-0.6.21.modified/libexif/_stdint.h
---- libexif-0.6.21/libexif/_stdint.h	2012-07-12 13:34:01.000000000 -0700
-+++ libexif-0.6.21.modified/libexif/_stdint.h	2012-07-14 15:30:09.884802000 -0700
+--- libexif-0.6.21/libexif/_stdint.h	1969-12-31 16:00:00.000000000 -0800
++++ libexif-0.6.21.modified/libexif/_stdint.h	1969-12-31 16:00:00.000000000 -0800
 @@ -1,2 +1,15 @@
  /* This file is generated automatically by configure */
 +#if defined(_WIN32)
diff --git a/third_party/libexif/libexif.gyp b/third_party/libexif/libexif.gyp
index 1b18af0..eebb875 100644
--- a/third_party/libexif/libexif.gyp
+++ b/third_party/libexif/libexif.gyp
@@ -92,6 +92,7 @@
                 'inline=__inline',
               ],
               'msvs_disabled_warnings': [
+                4018, # size/unsigned mismatch
                 4267, # size_t -> ExifLong truncation on amd64
               ],
             }],
diff --git a/third_party/libjingle/README.chromium b/third_party/libjingle/README.chromium
index 15b5fec..e51a17f 100644
--- a/third_party/libjingle/README.chromium
+++ b/third_party/libjingle/README.chromium
@@ -1,7 +1,7 @@
 Name: libjingle
 URL: http://code.google.com/p/webrtc/
 Version: unknown
-Revision: 5884
+Revision: 5963
 License: BSD
 License File: source/talk/COPYING
 Security Critical: yes
diff --git a/third_party/libjingle/libjingle.target.darwin-arm.mk b/third_party/libjingle/libjingle.target.darwin-arm.mk
index 993f87a..46310de 100644
--- a/third_party/libjingle/libjingle.target.darwin-arm.mk
+++ b/third_party/libjingle/libjingle.target.darwin-arm.mk
@@ -397,7 +397,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libjingle/libjingle.target.darwin-mips.mk b/third_party/libjingle/libjingle.target.darwin-mips.mk
index 03f1c39..fc4d3ea 100644
--- a/third_party/libjingle/libjingle.target.darwin-mips.mk
+++ b/third_party/libjingle/libjingle.target.darwin-mips.mk
@@ -395,7 +395,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libjingle/libjingle.target.darwin-x86.mk b/third_party/libjingle/libjingle.target.darwin-x86.mk
index e7c9342..a3050ee 100644
--- a/third_party/libjingle/libjingle.target.darwin-x86.mk
+++ b/third_party/libjingle/libjingle.target.darwin-x86.mk
@@ -393,7 +393,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libjingle/libjingle.target.darwin-x86_64.mk b/third_party/libjingle/libjingle.target.darwin-x86_64.mk
index 63990c0..0158c63 100644
--- a/third_party/libjingle/libjingle.target.darwin-x86_64.mk
+++ b/third_party/libjingle/libjingle.target.darwin-x86_64.mk
@@ -397,7 +397,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libjingle/libjingle.target.linux-arm.mk b/third_party/libjingle/libjingle.target.linux-arm.mk
index 993f87a..46310de 100644
--- a/third_party/libjingle/libjingle.target.linux-arm.mk
+++ b/third_party/libjingle/libjingle.target.linux-arm.mk
@@ -397,7 +397,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libjingle/libjingle.target.linux-mips.mk b/third_party/libjingle/libjingle.target.linux-mips.mk
index 03f1c39..fc4d3ea 100644
--- a/third_party/libjingle/libjingle.target.linux-mips.mk
+++ b/third_party/libjingle/libjingle.target.linux-mips.mk
@@ -395,7 +395,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libjingle/libjingle.target.linux-x86.mk b/third_party/libjingle/libjingle.target.linux-x86.mk
index e7c9342..a3050ee 100644
--- a/third_party/libjingle/libjingle.target.linux-x86.mk
+++ b/third_party/libjingle/libjingle.target.linux-x86.mk
@@ -393,7 +393,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libjingle/libjingle.target.linux-x86_64.mk b/third_party/libjingle/libjingle.target.linux-x86_64.mk
index 63990c0..0158c63 100644
--- a/third_party/libjingle/libjingle.target.linux-x86_64.mk
+++ b/third_party/libjingle/libjingle.target.linux-x86_64.mk
@@ -397,7 +397,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libjingle/libjingle_p2p_constants.target.darwin-arm.mk b/third_party/libjingle/libjingle_p2p_constants.target.darwin-arm.mk
index 62e6f11..04e4293 100644
--- a/third_party/libjingle/libjingle_p2p_constants.target.darwin-arm.mk
+++ b/third_party/libjingle/libjingle_p2p_constants.target.darwin-arm.mk
@@ -279,7 +279,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libjingle/libjingle_p2p_constants.target.darwin-mips.mk b/third_party/libjingle/libjingle_p2p_constants.target.darwin-mips.mk
index fa094fb..ab32884 100644
--- a/third_party/libjingle/libjingle_p2p_constants.target.darwin-mips.mk
+++ b/third_party/libjingle/libjingle_p2p_constants.target.darwin-mips.mk
@@ -277,7 +277,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libjingle/libjingle_p2p_constants.target.darwin-x86.mk b/third_party/libjingle/libjingle_p2p_constants.target.darwin-x86.mk
index ebb0f09..89f2876 100644
--- a/third_party/libjingle/libjingle_p2p_constants.target.darwin-x86.mk
+++ b/third_party/libjingle/libjingle_p2p_constants.target.darwin-x86.mk
@@ -275,7 +275,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libjingle/libjingle_p2p_constants.target.darwin-x86_64.mk b/third_party/libjingle/libjingle_p2p_constants.target.darwin-x86_64.mk
index ef08fb7..aecccc7 100644
--- a/third_party/libjingle/libjingle_p2p_constants.target.darwin-x86_64.mk
+++ b/third_party/libjingle/libjingle_p2p_constants.target.darwin-x86_64.mk
@@ -279,7 +279,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libjingle/libjingle_p2p_constants.target.linux-arm.mk b/third_party/libjingle/libjingle_p2p_constants.target.linux-arm.mk
index 62e6f11..04e4293 100644
--- a/third_party/libjingle/libjingle_p2p_constants.target.linux-arm.mk
+++ b/third_party/libjingle/libjingle_p2p_constants.target.linux-arm.mk
@@ -279,7 +279,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libjingle/libjingle_p2p_constants.target.linux-mips.mk b/third_party/libjingle/libjingle_p2p_constants.target.linux-mips.mk
index fa094fb..ab32884 100644
--- a/third_party/libjingle/libjingle_p2p_constants.target.linux-mips.mk
+++ b/third_party/libjingle/libjingle_p2p_constants.target.linux-mips.mk
@@ -277,7 +277,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libjingle/libjingle_p2p_constants.target.linux-x86.mk b/third_party/libjingle/libjingle_p2p_constants.target.linux-x86.mk
index ebb0f09..89f2876 100644
--- a/third_party/libjingle/libjingle_p2p_constants.target.linux-x86.mk
+++ b/third_party/libjingle/libjingle_p2p_constants.target.linux-x86.mk
@@ -275,7 +275,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libjingle/libjingle_p2p_constants.target.linux-x86_64.mk b/third_party/libjingle/libjingle_p2p_constants.target.linux-x86_64.mk
index ef08fb7..aecccc7 100644
--- a/third_party/libjingle/libjingle_p2p_constants.target.linux-x86_64.mk
+++ b/third_party/libjingle/libjingle_p2p_constants.target.linux-x86_64.mk
@@ -279,7 +279,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libjingle/libjingle_webrtc.target.darwin-arm.mk b/third_party/libjingle/libjingle_webrtc.target.darwin-arm.mk
index 62fdca5..76e0acd 100644
--- a/third_party/libjingle/libjingle_webrtc.target.darwin-arm.mk
+++ b/third_party/libjingle/libjingle_webrtc.target.darwin-arm.mk
@@ -281,7 +281,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libjingle/libjingle_webrtc.target.darwin-mips.mk b/third_party/libjingle/libjingle_webrtc.target.darwin-mips.mk
index b0e993d..90b551a 100644
--- a/third_party/libjingle/libjingle_webrtc.target.darwin-mips.mk
+++ b/third_party/libjingle/libjingle_webrtc.target.darwin-mips.mk
@@ -279,7 +279,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libjingle/libjingle_webrtc.target.darwin-x86.mk b/third_party/libjingle/libjingle_webrtc.target.darwin-x86.mk
index 68c1e33..bf3625d 100644
--- a/third_party/libjingle/libjingle_webrtc.target.darwin-x86.mk
+++ b/third_party/libjingle/libjingle_webrtc.target.darwin-x86.mk
@@ -277,7 +277,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libjingle/libjingle_webrtc.target.darwin-x86_64.mk b/third_party/libjingle/libjingle_webrtc.target.darwin-x86_64.mk
index cbb6935..0f73d97 100644
--- a/third_party/libjingle/libjingle_webrtc.target.darwin-x86_64.mk
+++ b/third_party/libjingle/libjingle_webrtc.target.darwin-x86_64.mk
@@ -281,7 +281,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libjingle/libjingle_webrtc.target.linux-arm.mk b/third_party/libjingle/libjingle_webrtc.target.linux-arm.mk
index 62fdca5..76e0acd 100644
--- a/third_party/libjingle/libjingle_webrtc.target.linux-arm.mk
+++ b/third_party/libjingle/libjingle_webrtc.target.linux-arm.mk
@@ -281,7 +281,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libjingle/libjingle_webrtc.target.linux-mips.mk b/third_party/libjingle/libjingle_webrtc.target.linux-mips.mk
index b0e993d..90b551a 100644
--- a/third_party/libjingle/libjingle_webrtc.target.linux-mips.mk
+++ b/third_party/libjingle/libjingle_webrtc.target.linux-mips.mk
@@ -279,7 +279,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libjingle/libjingle_webrtc.target.linux-x86.mk b/third_party/libjingle/libjingle_webrtc.target.linux-x86.mk
index 68c1e33..bf3625d 100644
--- a/third_party/libjingle/libjingle_webrtc.target.linux-x86.mk
+++ b/third_party/libjingle/libjingle_webrtc.target.linux-x86.mk
@@ -277,7 +277,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libjingle/libjingle_webrtc.target.linux-x86_64.mk b/third_party/libjingle/libjingle_webrtc.target.linux-x86_64.mk
index cbb6935..0f73d97 100644
--- a/third_party/libjingle/libjingle_webrtc.target.linux-x86_64.mk
+++ b/third_party/libjingle/libjingle_webrtc.target.linux-x86_64.mk
@@ -281,7 +281,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libjingle/libjingle_webrtc_common.target.darwin-arm.mk b/third_party/libjingle/libjingle_webrtc_common.target.darwin-arm.mk
index 2e9889d..73688a8 100644
--- a/third_party/libjingle/libjingle_webrtc_common.target.darwin-arm.mk
+++ b/third_party/libjingle/libjingle_webrtc_common.target.darwin-arm.mk
@@ -390,7 +390,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libjingle/libjingle_webrtc_common.target.darwin-mips.mk b/third_party/libjingle/libjingle_webrtc_common.target.darwin-mips.mk
index 8153cd6..e68611d 100644
--- a/third_party/libjingle/libjingle_webrtc_common.target.darwin-mips.mk
+++ b/third_party/libjingle/libjingle_webrtc_common.target.darwin-mips.mk
@@ -390,7 +390,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libjingle/libjingle_webrtc_common.target.darwin-x86.mk b/third_party/libjingle/libjingle_webrtc_common.target.darwin-x86.mk
index 0a52b25..68221e4 100644
--- a/third_party/libjingle/libjingle_webrtc_common.target.darwin-x86.mk
+++ b/third_party/libjingle/libjingle_webrtc_common.target.darwin-x86.mk
@@ -388,7 +388,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libjingle/libjingle_webrtc_common.target.darwin-x86_64.mk b/third_party/libjingle/libjingle_webrtc_common.target.darwin-x86_64.mk
index 21e5bc5..3e5f1c6 100644
--- a/third_party/libjingle/libjingle_webrtc_common.target.darwin-x86_64.mk
+++ b/third_party/libjingle/libjingle_webrtc_common.target.darwin-x86_64.mk
@@ -392,7 +392,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libjingle/libjingle_webrtc_common.target.linux-arm.mk b/third_party/libjingle/libjingle_webrtc_common.target.linux-arm.mk
index 2e9889d..73688a8 100644
--- a/third_party/libjingle/libjingle_webrtc_common.target.linux-arm.mk
+++ b/third_party/libjingle/libjingle_webrtc_common.target.linux-arm.mk
@@ -390,7 +390,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libjingle/libjingle_webrtc_common.target.linux-mips.mk b/third_party/libjingle/libjingle_webrtc_common.target.linux-mips.mk
index 8153cd6..e68611d 100644
--- a/third_party/libjingle/libjingle_webrtc_common.target.linux-mips.mk
+++ b/third_party/libjingle/libjingle_webrtc_common.target.linux-mips.mk
@@ -390,7 +390,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libjingle/libjingle_webrtc_common.target.linux-x86.mk b/third_party/libjingle/libjingle_webrtc_common.target.linux-x86.mk
index 0a52b25..68221e4 100644
--- a/third_party/libjingle/libjingle_webrtc_common.target.linux-x86.mk
+++ b/third_party/libjingle/libjingle_webrtc_common.target.linux-x86.mk
@@ -388,7 +388,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libjingle/libjingle_webrtc_common.target.linux-x86_64.mk b/third_party/libjingle/libjingle_webrtc_common.target.linux-x86_64.mk
index 21e5bc5..3e5f1c6 100644
--- a/third_party/libjingle/libjingle_webrtc_common.target.linux-x86_64.mk
+++ b/third_party/libjingle/libjingle_webrtc_common.target.linux-x86_64.mk
@@ -392,7 +392,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libjingle/libpeerconnection.target.darwin-arm.mk b/third_party/libjingle/libpeerconnection.target.darwin-arm.mk
index 8aab7b6..f2eb519 100644
--- a/third_party/libjingle/libpeerconnection.target.darwin-arm.mk
+++ b/third_party/libjingle/libpeerconnection.target.darwin-arm.mk
@@ -294,7 +294,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libjingle/libpeerconnection.target.darwin-mips.mk b/third_party/libjingle/libpeerconnection.target.darwin-mips.mk
index 7cce282..e1738a7 100644
--- a/third_party/libjingle/libpeerconnection.target.darwin-mips.mk
+++ b/third_party/libjingle/libpeerconnection.target.darwin-mips.mk
@@ -292,7 +292,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libjingle/libpeerconnection.target.darwin-x86.mk b/third_party/libjingle/libpeerconnection.target.darwin-x86.mk
index be24d05..ee68221 100644
--- a/third_party/libjingle/libpeerconnection.target.darwin-x86.mk
+++ b/third_party/libjingle/libpeerconnection.target.darwin-x86.mk
@@ -290,7 +290,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libjingle/libpeerconnection.target.darwin-x86_64.mk b/third_party/libjingle/libpeerconnection.target.darwin-x86_64.mk
index cc6121f..bd2ec00 100644
--- a/third_party/libjingle/libpeerconnection.target.darwin-x86_64.mk
+++ b/third_party/libjingle/libpeerconnection.target.darwin-x86_64.mk
@@ -294,7 +294,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libjingle/libpeerconnection.target.linux-arm.mk b/third_party/libjingle/libpeerconnection.target.linux-arm.mk
index 8aab7b6..f2eb519 100644
--- a/third_party/libjingle/libpeerconnection.target.linux-arm.mk
+++ b/third_party/libjingle/libpeerconnection.target.linux-arm.mk
@@ -294,7 +294,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libjingle/libpeerconnection.target.linux-mips.mk b/third_party/libjingle/libpeerconnection.target.linux-mips.mk
index 7cce282..e1738a7 100644
--- a/third_party/libjingle/libpeerconnection.target.linux-mips.mk
+++ b/third_party/libjingle/libpeerconnection.target.linux-mips.mk
@@ -292,7 +292,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libjingle/libpeerconnection.target.linux-x86.mk b/third_party/libjingle/libpeerconnection.target.linux-x86.mk
index be24d05..ee68221 100644
--- a/third_party/libjingle/libpeerconnection.target.linux-x86.mk
+++ b/third_party/libjingle/libpeerconnection.target.linux-x86.mk
@@ -290,7 +290,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libjingle/libpeerconnection.target.linux-x86_64.mk b/third_party/libjingle/libpeerconnection.target.linux-x86_64.mk
index cc6121f..bd2ec00 100644
--- a/third_party/libjingle/libpeerconnection.target.linux-x86_64.mk
+++ b/third_party/libjingle/libpeerconnection.target.linux-x86_64.mk
@@ -294,7 +294,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libphonenumber/libphonenumber.target.darwin-arm.mk b/third_party/libphonenumber/libphonenumber.target.darwin-arm.mk
index ef8dc36..46b959e 100644
--- a/third_party/libphonenumber/libphonenumber.target.darwin-arm.mk
+++ b/third_party/libphonenumber/libphonenumber.target.darwin-arm.mk
@@ -245,7 +245,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libphonenumber/libphonenumber.target.darwin-mips.mk b/third_party/libphonenumber/libphonenumber.target.darwin-mips.mk
index e833689..e912bec 100644
--- a/third_party/libphonenumber/libphonenumber.target.darwin-mips.mk
+++ b/third_party/libphonenumber/libphonenumber.target.darwin-mips.mk
@@ -243,7 +243,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libphonenumber/libphonenumber.target.darwin-x86.mk b/third_party/libphonenumber/libphonenumber.target.darwin-x86.mk
index 0bea442..3cfb241 100644
--- a/third_party/libphonenumber/libphonenumber.target.darwin-x86.mk
+++ b/third_party/libphonenumber/libphonenumber.target.darwin-x86.mk
@@ -243,7 +243,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libphonenumber/libphonenumber.target.darwin-x86_64.mk b/third_party/libphonenumber/libphonenumber.target.darwin-x86_64.mk
index c20fe0e..eeba15f 100644
--- a/third_party/libphonenumber/libphonenumber.target.darwin-x86_64.mk
+++ b/third_party/libphonenumber/libphonenumber.target.darwin-x86_64.mk
@@ -243,7 +243,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libphonenumber/libphonenumber.target.linux-arm.mk b/third_party/libphonenumber/libphonenumber.target.linux-arm.mk
index ef8dc36..46b959e 100644
--- a/third_party/libphonenumber/libphonenumber.target.linux-arm.mk
+++ b/third_party/libphonenumber/libphonenumber.target.linux-arm.mk
@@ -245,7 +245,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libphonenumber/libphonenumber.target.linux-mips.mk b/third_party/libphonenumber/libphonenumber.target.linux-mips.mk
index e833689..e912bec 100644
--- a/third_party/libphonenumber/libphonenumber.target.linux-mips.mk
+++ b/third_party/libphonenumber/libphonenumber.target.linux-mips.mk
@@ -243,7 +243,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libphonenumber/libphonenumber.target.linux-x86.mk b/third_party/libphonenumber/libphonenumber.target.linux-x86.mk
index 0bea442..3cfb241 100644
--- a/third_party/libphonenumber/libphonenumber.target.linux-x86.mk
+++ b/third_party/libphonenumber/libphonenumber.target.linux-x86.mk
@@ -243,7 +243,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libphonenumber/libphonenumber.target.linux-x86_64.mk b/third_party/libphonenumber/libphonenumber.target.linux-x86_64.mk
index c20fe0e..eeba15f 100644
--- a/third_party/libphonenumber/libphonenumber.target.linux-x86_64.mk
+++ b/third_party/libphonenumber/libphonenumber.target.linux-x86_64.mk
@@ -243,7 +243,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libphonenumber/libphonenumber_without_metadata.target.darwin-arm.mk b/third_party/libphonenumber/libphonenumber_without_metadata.target.darwin-arm.mk
index 6fbab6d..8a9944b 100644
--- a/third_party/libphonenumber/libphonenumber_without_metadata.target.darwin-arm.mk
+++ b/third_party/libphonenumber/libphonenumber_without_metadata.target.darwin-arm.mk
@@ -309,7 +309,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libphonenumber/libphonenumber_without_metadata.target.darwin-mips.mk b/third_party/libphonenumber/libphonenumber_without_metadata.target.darwin-mips.mk
index f633e67..a6cf6e8 100644
--- a/third_party/libphonenumber/libphonenumber_without_metadata.target.darwin-mips.mk
+++ b/third_party/libphonenumber/libphonenumber_without_metadata.target.darwin-mips.mk
@@ -307,7 +307,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libphonenumber/libphonenumber_without_metadata.target.darwin-x86.mk b/third_party/libphonenumber/libphonenumber_without_metadata.target.darwin-x86.mk
index ce83b5f..9c6121a 100644
--- a/third_party/libphonenumber/libphonenumber_without_metadata.target.darwin-x86.mk
+++ b/third_party/libphonenumber/libphonenumber_without_metadata.target.darwin-x86.mk
@@ -307,7 +307,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libphonenumber/libphonenumber_without_metadata.target.darwin-x86_64.mk b/third_party/libphonenumber/libphonenumber_without_metadata.target.darwin-x86_64.mk
index 4a2f08f..c230914 100644
--- a/third_party/libphonenumber/libphonenumber_without_metadata.target.darwin-x86_64.mk
+++ b/third_party/libphonenumber/libphonenumber_without_metadata.target.darwin-x86_64.mk
@@ -307,7 +307,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libphonenumber/libphonenumber_without_metadata.target.linux-arm.mk b/third_party/libphonenumber/libphonenumber_without_metadata.target.linux-arm.mk
index 6fbab6d..8a9944b 100644
--- a/third_party/libphonenumber/libphonenumber_without_metadata.target.linux-arm.mk
+++ b/third_party/libphonenumber/libphonenumber_without_metadata.target.linux-arm.mk
@@ -309,7 +309,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libphonenumber/libphonenumber_without_metadata.target.linux-mips.mk b/third_party/libphonenumber/libphonenumber_without_metadata.target.linux-mips.mk
index f633e67..a6cf6e8 100644
--- a/third_party/libphonenumber/libphonenumber_without_metadata.target.linux-mips.mk
+++ b/third_party/libphonenumber/libphonenumber_without_metadata.target.linux-mips.mk
@@ -307,7 +307,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libphonenumber/libphonenumber_without_metadata.target.linux-x86.mk b/third_party/libphonenumber/libphonenumber_without_metadata.target.linux-x86.mk
index ce83b5f..9c6121a 100644
--- a/third_party/libphonenumber/libphonenumber_without_metadata.target.linux-x86.mk
+++ b/third_party/libphonenumber/libphonenumber_without_metadata.target.linux-x86.mk
@@ -307,7 +307,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libphonenumber/libphonenumber_without_metadata.target.linux-x86_64.mk b/third_party/libphonenumber/libphonenumber_without_metadata.target.linux-x86_64.mk
index 4a2f08f..c230914 100644
--- a/third_party/libphonenumber/libphonenumber_without_metadata.target.linux-x86_64.mk
+++ b/third_party/libphonenumber/libphonenumber_without_metadata.target.linux-x86_64.mk
@@ -307,7 +307,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libpng/libpng.target.darwin-arm.mk b/third_party/libpng/libpng.target.darwin-arm.mk
index bf75522..3a8eb5e 100644
--- a/third_party/libpng/libpng.target.darwin-arm.mk
+++ b/third_party/libpng/libpng.target.darwin-arm.mk
@@ -241,7 +241,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libpng/libpng.target.darwin-mips.mk b/third_party/libpng/libpng.target.darwin-mips.mk
index 6b52572..b49a07d 100644
--- a/third_party/libpng/libpng.target.darwin-mips.mk
+++ b/third_party/libpng/libpng.target.darwin-mips.mk
@@ -239,7 +239,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libpng/libpng.target.darwin-x86.mk b/third_party/libpng/libpng.target.darwin-x86.mk
index 4a8a9ed..7346dde 100644
--- a/third_party/libpng/libpng.target.darwin-x86.mk
+++ b/third_party/libpng/libpng.target.darwin-x86.mk
@@ -239,7 +239,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libpng/libpng.target.darwin-x86_64.mk b/third_party/libpng/libpng.target.darwin-x86_64.mk
index b2f3655..1a73106 100644
--- a/third_party/libpng/libpng.target.darwin-x86_64.mk
+++ b/third_party/libpng/libpng.target.darwin-x86_64.mk
@@ -239,7 +239,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libpng/libpng.target.linux-arm.mk b/third_party/libpng/libpng.target.linux-arm.mk
index bf75522..3a8eb5e 100644
--- a/third_party/libpng/libpng.target.linux-arm.mk
+++ b/third_party/libpng/libpng.target.linux-arm.mk
@@ -241,7 +241,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libpng/libpng.target.linux-mips.mk b/third_party/libpng/libpng.target.linux-mips.mk
index 6b52572..b49a07d 100644
--- a/third_party/libpng/libpng.target.linux-mips.mk
+++ b/third_party/libpng/libpng.target.linux-mips.mk
@@ -239,7 +239,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libpng/libpng.target.linux-x86.mk b/third_party/libpng/libpng.target.linux-x86.mk
index 4a8a9ed..7346dde 100644
--- a/third_party/libpng/libpng.target.linux-x86.mk
+++ b/third_party/libpng/libpng.target.linux-x86.mk
@@ -239,7 +239,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libpng/libpng.target.linux-x86_64.mk b/third_party/libpng/libpng.target.linux-x86_64.mk
index b2f3655..1a73106 100644
--- a/third_party/libpng/libpng.target.linux-x86_64.mk
+++ b/third_party/libpng/libpng.target.linux-x86_64.mk
@@ -239,7 +239,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libwebp/BUILD.gn b/third_party/libwebp/BUILD.gn
new file mode 100644
index 0000000..cf7dccd
--- /dev/null
+++ b/third_party/libwebp/BUILD.gn
@@ -0,0 +1,162 @@
+# 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.
+
+config("libwebp_config") {
+  include_dirs = [ "." ]
+}
+
+source_set("libwebp_dec") {
+  sources = [
+    "dec/alpha.c",
+    "dec/buffer.c",
+    "dec/frame.c",
+    "dec/idec.c",
+    "dec/io.c",
+    "dec/layer.c",
+    "dec/quant.c",
+    "dec/tree.c",
+    "dec/vp8.c",
+    "dec/vp8l.c",
+    "dec/webp.c",
+  ]
+  deps = [
+    ":libwebp_dsp",
+# TODO(GYP):
+#    ":libwebp_dsp_neon",
+    ":libwebp_utils",
+  ]
+  all_dependent_configs = [
+    ":libwebp_config"
+  ]
+}
+
+source_set("libwebp_demux") {
+  sources = [
+    "demux/demux.c",
+  ]
+  all_dependent_configs = [
+    ":libwebp_config"
+  ]
+}
+
+
+source_set("libwebp_dsp") {
+  sources = [
+    "dsp/cpu.c",
+    "dsp/dec.c",
+    "dsp/dec_sse2.c",
+    "dsp/enc.c",
+    "dsp/enc_sse2.c",
+    "dsp/lossless.c",
+    "dsp/upsampling.c",
+    "dsp/upsampling_sse2.c",
+    "dsp/yuv.c",
+  ]
+  all_dependent_configs = [
+    ":libwebp_config"
+  ]
+  deps = []
+  if (is_android) {
+    deps += [ "//third_party/android_tools:cpu_features" ]
+  }
+# TODO(GYP):
+#      'conditions': [
+#        ['order_profiling != 0', {
+#          'target_conditions' : [
+#            ['_toolset=="target"', {
+#              'cflags!': [ '-finstrument-functions' ],
+#            }],
+#          ],
+#        }],
+#      ],
+}
+
+# TODO(GYP):
+#    {
+#      'target_name': 'libwebp_dsp_neon',
+#      'conditions': [
+#        ['target_arch == "arm" and arm_version >= 7 and (arm_neon == 1 or arm_neon_optional == 1)', {
+#          'type': 'static_library',
+#          'include_dirs': ['.'],
+#          'sources': [
+#            'dsp/dec_neon.c',
+#            'dsp/enc_neon.c',
+#            'dsp/upsampling_neon.c',
+#          ],
+#          # behavior similar to *.c.neon in an Android.mk
+#          'cflags!': [ '-mfpu=vfpv3-d16' ],
+#          'cflags': [ '-mfpu=neon' ],
+#        },{  # "target_arch != "arm" or arm_version < 7"
+#          'type': 'none',
+#        }],
+#        ['order_profiling != 0', {
+#          'target_conditions' : [
+#            ['_toolset=="target"', {
+#              'cflags!': [ '-finstrument-functions' ],
+#            }],
+#          ],
+#        }],
+#      ],
+#    },
+
+source_set("libwebp_enc") {
+  sources = [
+    "enc/alpha.c",
+    "enc/analysis.c",
+    "enc/backward_references.c",
+    "enc/config.c",
+    "enc/cost.c",
+    "enc/filter.c",
+    "enc/frame.c",
+    "enc/histogram.c",
+    "enc/iterator.c",
+    "enc/layer.c",
+    "enc/picture.c",
+    "enc/quant.c",
+    "enc/syntax.c",
+    "enc/token.c",
+    "enc/tree.c",
+    "enc/vp8l.c",
+    "enc/webpenc.c",
+  ]
+  all_dependent_configs = [
+    ":libwebp_config"
+  ]
+}
+
+source_set("libwebp_utils") {
+  sources = [
+    "utils/alpha_processing.c",
+    "utils/bit_reader.c",
+    "utils/bit_writer.c",
+    "utils/color_cache.c",
+    "utils/filters.c",
+    "utils/huffman.c",
+    "utils/huffman_encode.c",
+    "utils/quant_levels.c",
+    "utils/quant_levels_dec.c",
+    "utils/random.c",
+    "utils/rescaler.c",
+    "utils/thread.c",
+    "utils/utils.c",
+  ]
+  all_dependent_configs = [
+    ":libwebp_config"
+  ]
+}
+
+group("libwebp") {
+  deps = [
+    ":libwebp_dec",
+    ":libwebp_demux",
+    ":libwebp_dsp",
+# TODO(GYP):
+#    ":libwebp_dsp_neon",
+    ":libwebp_enc",
+    ":libwebp_utils",
+  ]
+  direct_dependent_configs = [
+    ":libwebp_config"
+  ]
+}
diff --git a/third_party/libwebp/README.chromium b/third_party/libwebp/README.chromium
index b994f80..f53b59d 100644
--- a/third_party/libwebp/README.chromium
+++ b/third_party/libwebp/README.chromium
@@ -24,3 +24,4 @@
   Revert patch f7fc4bc: dec/webp.c: don't wait for data before reporting w/h
   c1cb193 disable NEON for arm64 platform
   207d03b fix out-of-bound read during alpha-plane decoding
+  8c7cd72 Bugfix for incremental decode of lossy-alpha
diff --git a/third_party/libwebp/libwebp_dec.target.darwin-arm.mk b/third_party/libwebp/libwebp_dec.target.darwin-arm.mk
index afa4c5b..b3770b7 100644
--- a/third_party/libwebp/libwebp_dec.target.darwin-arm.mk
+++ b/third_party/libwebp/libwebp_dec.target.darwin-arm.mk
@@ -229,7 +229,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libwebp/libwebp_dec.target.darwin-mips.mk b/third_party/libwebp/libwebp_dec.target.darwin-mips.mk
index 0c76c96..5672ef1 100644
--- a/third_party/libwebp/libwebp_dec.target.darwin-mips.mk
+++ b/third_party/libwebp/libwebp_dec.target.darwin-mips.mk
@@ -228,7 +228,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libwebp/libwebp_dec.target.darwin-x86.mk b/third_party/libwebp/libwebp_dec.target.darwin-x86.mk
index 1fce2df..57ffcd5 100644
--- a/third_party/libwebp/libwebp_dec.target.darwin-x86.mk
+++ b/third_party/libwebp/libwebp_dec.target.darwin-x86.mk
@@ -228,7 +228,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libwebp/libwebp_dec.target.darwin-x86_64.mk b/third_party/libwebp/libwebp_dec.target.darwin-x86_64.mk
index 9dce3cf..17dffda 100644
--- a/third_party/libwebp/libwebp_dec.target.darwin-x86_64.mk
+++ b/third_party/libwebp/libwebp_dec.target.darwin-x86_64.mk
@@ -228,7 +228,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libwebp/libwebp_dec.target.linux-arm.mk b/third_party/libwebp/libwebp_dec.target.linux-arm.mk
index afa4c5b..b3770b7 100644
--- a/third_party/libwebp/libwebp_dec.target.linux-arm.mk
+++ b/third_party/libwebp/libwebp_dec.target.linux-arm.mk
@@ -229,7 +229,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libwebp/libwebp_dec.target.linux-mips.mk b/third_party/libwebp/libwebp_dec.target.linux-mips.mk
index 0c76c96..5672ef1 100644
--- a/third_party/libwebp/libwebp_dec.target.linux-mips.mk
+++ b/third_party/libwebp/libwebp_dec.target.linux-mips.mk
@@ -228,7 +228,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libwebp/libwebp_dec.target.linux-x86.mk b/third_party/libwebp/libwebp_dec.target.linux-x86.mk
index 1fce2df..57ffcd5 100644
--- a/third_party/libwebp/libwebp_dec.target.linux-x86.mk
+++ b/third_party/libwebp/libwebp_dec.target.linux-x86.mk
@@ -228,7 +228,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libwebp/libwebp_dec.target.linux-x86_64.mk b/third_party/libwebp/libwebp_dec.target.linux-x86_64.mk
index 9dce3cf..17dffda 100644
--- a/third_party/libwebp/libwebp_dec.target.linux-x86_64.mk
+++ b/third_party/libwebp/libwebp_dec.target.linux-x86_64.mk
@@ -228,7 +228,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libwebp/libwebp_demux.target.darwin-arm.mk b/third_party/libwebp/libwebp_demux.target.darwin-arm.mk
index 64e84ef..b19a5c8 100644
--- a/third_party/libwebp/libwebp_demux.target.darwin-arm.mk
+++ b/third_party/libwebp/libwebp_demux.target.darwin-arm.mk
@@ -219,7 +219,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libwebp/libwebp_demux.target.darwin-mips.mk b/third_party/libwebp/libwebp_demux.target.darwin-mips.mk
index 2579e8b..d6b7387 100644
--- a/third_party/libwebp/libwebp_demux.target.darwin-mips.mk
+++ b/third_party/libwebp/libwebp_demux.target.darwin-mips.mk
@@ -217,7 +217,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libwebp/libwebp_demux.target.darwin-x86.mk b/third_party/libwebp/libwebp_demux.target.darwin-x86.mk
index 73d5e5a..b8278e0 100644
--- a/third_party/libwebp/libwebp_demux.target.darwin-x86.mk
+++ b/third_party/libwebp/libwebp_demux.target.darwin-x86.mk
@@ -217,7 +217,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libwebp/libwebp_demux.target.darwin-x86_64.mk b/third_party/libwebp/libwebp_demux.target.darwin-x86_64.mk
index 3d81096..d22c037 100644
--- a/third_party/libwebp/libwebp_demux.target.darwin-x86_64.mk
+++ b/third_party/libwebp/libwebp_demux.target.darwin-x86_64.mk
@@ -217,7 +217,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libwebp/libwebp_demux.target.linux-arm.mk b/third_party/libwebp/libwebp_demux.target.linux-arm.mk
index 64e84ef..b19a5c8 100644
--- a/third_party/libwebp/libwebp_demux.target.linux-arm.mk
+++ b/third_party/libwebp/libwebp_demux.target.linux-arm.mk
@@ -219,7 +219,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libwebp/libwebp_demux.target.linux-mips.mk b/third_party/libwebp/libwebp_demux.target.linux-mips.mk
index 2579e8b..d6b7387 100644
--- a/third_party/libwebp/libwebp_demux.target.linux-mips.mk
+++ b/third_party/libwebp/libwebp_demux.target.linux-mips.mk
@@ -217,7 +217,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libwebp/libwebp_demux.target.linux-x86.mk b/third_party/libwebp/libwebp_demux.target.linux-x86.mk
index 73d5e5a..b8278e0 100644
--- a/third_party/libwebp/libwebp_demux.target.linux-x86.mk
+++ b/third_party/libwebp/libwebp_demux.target.linux-x86.mk
@@ -217,7 +217,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libwebp/libwebp_demux.target.linux-x86_64.mk b/third_party/libwebp/libwebp_demux.target.linux-x86_64.mk
index 3d81096..d22c037 100644
--- a/third_party/libwebp/libwebp_demux.target.linux-x86_64.mk
+++ b/third_party/libwebp/libwebp_demux.target.linux-x86_64.mk
@@ -217,7 +217,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libwebp/libwebp_dsp.target.darwin-arm.mk b/third_party/libwebp/libwebp_dsp.target.darwin-arm.mk
index 913d1d8..9409727 100644
--- a/third_party/libwebp/libwebp_dsp.target.darwin-arm.mk
+++ b/third_party/libwebp/libwebp_dsp.target.darwin-arm.mk
@@ -227,7 +227,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libwebp/libwebp_dsp.target.darwin-mips.mk b/third_party/libwebp/libwebp_dsp.target.darwin-mips.mk
index be4feff..f2fc9d5 100644
--- a/third_party/libwebp/libwebp_dsp.target.darwin-mips.mk
+++ b/third_party/libwebp/libwebp_dsp.target.darwin-mips.mk
@@ -225,7 +225,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libwebp/libwebp_dsp.target.darwin-x86.mk b/third_party/libwebp/libwebp_dsp.target.darwin-x86.mk
index 3cce003..04d7f87 100644
--- a/third_party/libwebp/libwebp_dsp.target.darwin-x86.mk
+++ b/third_party/libwebp/libwebp_dsp.target.darwin-x86.mk
@@ -225,7 +225,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libwebp/libwebp_dsp.target.darwin-x86_64.mk b/third_party/libwebp/libwebp_dsp.target.darwin-x86_64.mk
index ec68297..abdd0d8 100644
--- a/third_party/libwebp/libwebp_dsp.target.darwin-x86_64.mk
+++ b/third_party/libwebp/libwebp_dsp.target.darwin-x86_64.mk
@@ -225,7 +225,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libwebp/libwebp_dsp.target.linux-arm.mk b/third_party/libwebp/libwebp_dsp.target.linux-arm.mk
index 913d1d8..9409727 100644
--- a/third_party/libwebp/libwebp_dsp.target.linux-arm.mk
+++ b/third_party/libwebp/libwebp_dsp.target.linux-arm.mk
@@ -227,7 +227,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libwebp/libwebp_dsp.target.linux-mips.mk b/third_party/libwebp/libwebp_dsp.target.linux-mips.mk
index be4feff..f2fc9d5 100644
--- a/third_party/libwebp/libwebp_dsp.target.linux-mips.mk
+++ b/third_party/libwebp/libwebp_dsp.target.linux-mips.mk
@@ -225,7 +225,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libwebp/libwebp_dsp.target.linux-x86.mk b/third_party/libwebp/libwebp_dsp.target.linux-x86.mk
index 3cce003..04d7f87 100644
--- a/third_party/libwebp/libwebp_dsp.target.linux-x86.mk
+++ b/third_party/libwebp/libwebp_dsp.target.linux-x86.mk
@@ -225,7 +225,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libwebp/libwebp_dsp.target.linux-x86_64.mk b/third_party/libwebp/libwebp_dsp.target.linux-x86_64.mk
index ec68297..abdd0d8 100644
--- a/third_party/libwebp/libwebp_dsp.target.linux-x86_64.mk
+++ b/third_party/libwebp/libwebp_dsp.target.linux-x86_64.mk
@@ -225,7 +225,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libwebp/libwebp_dsp_neon.target.darwin-arm.mk b/third_party/libwebp/libwebp_dsp_neon.target.darwin-arm.mk
index f28dd02..c877d1a 100644
--- a/third_party/libwebp/libwebp_dsp_neon.target.darwin-arm.mk
+++ b/third_party/libwebp/libwebp_dsp_neon.target.darwin-arm.mk
@@ -223,7 +223,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libwebp/libwebp_dsp_neon.target.linux-arm.mk b/third_party/libwebp/libwebp_dsp_neon.target.linux-arm.mk
index f28dd02..c877d1a 100644
--- a/third_party/libwebp/libwebp_dsp_neon.target.linux-arm.mk
+++ b/third_party/libwebp/libwebp_dsp_neon.target.linux-arm.mk
@@ -223,7 +223,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libwebp/libwebp_enc.target.darwin-arm.mk b/third_party/libwebp/libwebp_enc.target.darwin-arm.mk
index be7cfd7..fbf8a17 100644
--- a/third_party/libwebp/libwebp_enc.target.darwin-arm.mk
+++ b/third_party/libwebp/libwebp_enc.target.darwin-arm.mk
@@ -235,7 +235,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libwebp/libwebp_enc.target.darwin-mips.mk b/third_party/libwebp/libwebp_enc.target.darwin-mips.mk
index 0a31ebc..37ec0aa 100644
--- a/third_party/libwebp/libwebp_enc.target.darwin-mips.mk
+++ b/third_party/libwebp/libwebp_enc.target.darwin-mips.mk
@@ -233,7 +233,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libwebp/libwebp_enc.target.darwin-x86.mk b/third_party/libwebp/libwebp_enc.target.darwin-x86.mk
index ded99ff..2d2d0da 100644
--- a/third_party/libwebp/libwebp_enc.target.darwin-x86.mk
+++ b/third_party/libwebp/libwebp_enc.target.darwin-x86.mk
@@ -233,7 +233,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libwebp/libwebp_enc.target.darwin-x86_64.mk b/third_party/libwebp/libwebp_enc.target.darwin-x86_64.mk
index 7672b94..f2de0e7 100644
--- a/third_party/libwebp/libwebp_enc.target.darwin-x86_64.mk
+++ b/third_party/libwebp/libwebp_enc.target.darwin-x86_64.mk
@@ -233,7 +233,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libwebp/libwebp_enc.target.linux-arm.mk b/third_party/libwebp/libwebp_enc.target.linux-arm.mk
index be7cfd7..fbf8a17 100644
--- a/third_party/libwebp/libwebp_enc.target.linux-arm.mk
+++ b/third_party/libwebp/libwebp_enc.target.linux-arm.mk
@@ -235,7 +235,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libwebp/libwebp_enc.target.linux-mips.mk b/third_party/libwebp/libwebp_enc.target.linux-mips.mk
index 0a31ebc..37ec0aa 100644
--- a/third_party/libwebp/libwebp_enc.target.linux-mips.mk
+++ b/third_party/libwebp/libwebp_enc.target.linux-mips.mk
@@ -233,7 +233,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libwebp/libwebp_enc.target.linux-x86.mk b/third_party/libwebp/libwebp_enc.target.linux-x86.mk
index ded99ff..2d2d0da 100644
--- a/third_party/libwebp/libwebp_enc.target.linux-x86.mk
+++ b/third_party/libwebp/libwebp_enc.target.linux-x86.mk
@@ -233,7 +233,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libwebp/libwebp_enc.target.linux-x86_64.mk b/third_party/libwebp/libwebp_enc.target.linux-x86_64.mk
index 7672b94..f2de0e7 100644
--- a/third_party/libwebp/libwebp_enc.target.linux-x86_64.mk
+++ b/third_party/libwebp/libwebp_enc.target.linux-x86_64.mk
@@ -233,7 +233,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libwebp/libwebp_utils.target.darwin-arm.mk b/third_party/libwebp/libwebp_utils.target.darwin-arm.mk
index b15c6d7..a147fb9 100644
--- a/third_party/libwebp/libwebp_utils.target.darwin-arm.mk
+++ b/third_party/libwebp/libwebp_utils.target.darwin-arm.mk
@@ -231,7 +231,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libwebp/libwebp_utils.target.darwin-mips.mk b/third_party/libwebp/libwebp_utils.target.darwin-mips.mk
index 0ac0568..66addc2 100644
--- a/third_party/libwebp/libwebp_utils.target.darwin-mips.mk
+++ b/third_party/libwebp/libwebp_utils.target.darwin-mips.mk
@@ -229,7 +229,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libwebp/libwebp_utils.target.darwin-x86.mk b/third_party/libwebp/libwebp_utils.target.darwin-x86.mk
index 2182b0a..0924ca2 100644
--- a/third_party/libwebp/libwebp_utils.target.darwin-x86.mk
+++ b/third_party/libwebp/libwebp_utils.target.darwin-x86.mk
@@ -229,7 +229,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libwebp/libwebp_utils.target.darwin-x86_64.mk b/third_party/libwebp/libwebp_utils.target.darwin-x86_64.mk
index 84521e9..25e7455 100644
--- a/third_party/libwebp/libwebp_utils.target.darwin-x86_64.mk
+++ b/third_party/libwebp/libwebp_utils.target.darwin-x86_64.mk
@@ -229,7 +229,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libwebp/libwebp_utils.target.linux-arm.mk b/third_party/libwebp/libwebp_utils.target.linux-arm.mk
index b15c6d7..a147fb9 100644
--- a/third_party/libwebp/libwebp_utils.target.linux-arm.mk
+++ b/third_party/libwebp/libwebp_utils.target.linux-arm.mk
@@ -231,7 +231,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libwebp/libwebp_utils.target.linux-mips.mk b/third_party/libwebp/libwebp_utils.target.linux-mips.mk
index 0ac0568..66addc2 100644
--- a/third_party/libwebp/libwebp_utils.target.linux-mips.mk
+++ b/third_party/libwebp/libwebp_utils.target.linux-mips.mk
@@ -229,7 +229,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libwebp/libwebp_utils.target.linux-x86.mk b/third_party/libwebp/libwebp_utils.target.linux-x86.mk
index 2182b0a..0924ca2 100644
--- a/third_party/libwebp/libwebp_utils.target.linux-x86.mk
+++ b/third_party/libwebp/libwebp_utils.target.linux-x86.mk
@@ -229,7 +229,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libwebp/libwebp_utils.target.linux-x86_64.mk b/third_party/libwebp/libwebp_utils.target.linux-x86_64.mk
index 84521e9..25e7455 100644
--- a/third_party/libwebp/libwebp_utils.target.linux-x86_64.mk
+++ b/third_party/libwebp/libwebp_utils.target.linux-x86_64.mk
@@ -229,7 +229,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libwebp/utils/bit_reader.c b/third_party/libwebp/utils/bit_reader.c
index bfa4d7d..79f64d3 100644
--- a/third_party/libwebp/utils/bit_reader.c
+++ b/third_party/libwebp/utils/bit_reader.c
@@ -141,14 +141,24 @@
   }
 }
 
+// Special version that assumes br->pos_ <= br_len_.
+static int IsEndOfStreamSpecial(const VP8LBitReader* const br) {
+  assert(br->pos_ <= br->len_);
+  return br->pos_ == br->len_ && br->bit_pos_ >= LBITS;
+}
+
+static int IsEndOfStream(const VP8LBitReader* const br) {
+  return (br->pos_ > br->len_) || IsEndOfStreamSpecial(br);
+}
+
 void VP8LBitReaderSetBuffer(VP8LBitReader* const br,
                             const uint8_t* const buf, size_t len) {
   assert(br != NULL);
   assert(buf != NULL);
   assert(len < 0xfffffff8u);   // can't happen with a RIFF chunk.
-  br->eos_ = (br->pos_ >= len);
   br->buf_ = buf;
   br->len_ = len;
+  br->eos_ = IsEndOfStream(br);
 }
 
 // If not at EOS, reload up to LBITS byte-by-byte
@@ -175,9 +185,7 @@
     }
 #endif
     ShiftBytes(br);       // Slow path.
-    if (br->pos_ == br->len_ && br->bit_pos_ >= LBITS) {
-      br->eos_ = 1;
-    }
+    br->eos_ = IsEndOfStreamSpecial(br);
   }
 }
 
@@ -190,11 +198,7 @@
     const int new_bits = br->bit_pos_ + n_bits;
     br->bit_pos_ = new_bits;
     // If this read is going to cross the read buffer, set the eos flag.
-    if (br->pos_ == br->len_) {
-      if (new_bits >= LBITS) {
-        br->eos_ = 1;
-      }
-    }
+    br->eos_ = IsEndOfStreamSpecial(br);
     ShiftBytes(br);
     return val;
   } else {
diff --git a/third_party/libxml/libxml.target.darwin-arm.mk b/third_party/libxml/libxml.target.darwin-arm.mk
index 7f2ba01..0958041 100644
--- a/third_party/libxml/libxml.target.darwin-arm.mk
+++ b/third_party/libxml/libxml.target.darwin-arm.mk
@@ -282,7 +282,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libxml/libxml.target.darwin-mips.mk b/third_party/libxml/libxml.target.darwin-mips.mk
index db9aeb7..eac8428 100644
--- a/third_party/libxml/libxml.target.darwin-mips.mk
+++ b/third_party/libxml/libxml.target.darwin-mips.mk
@@ -280,7 +280,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libxml/libxml.target.darwin-x86.mk b/third_party/libxml/libxml.target.darwin-x86.mk
index fb5bc67..150d2d1 100644
--- a/third_party/libxml/libxml.target.darwin-x86.mk
+++ b/third_party/libxml/libxml.target.darwin-x86.mk
@@ -280,7 +280,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libxml/libxml.target.darwin-x86_64.mk b/third_party/libxml/libxml.target.darwin-x86_64.mk
index 668c751..6e12fd1 100644
--- a/third_party/libxml/libxml.target.darwin-x86_64.mk
+++ b/third_party/libxml/libxml.target.darwin-x86_64.mk
@@ -280,7 +280,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libxml/libxml.target.linux-arm.mk b/third_party/libxml/libxml.target.linux-arm.mk
index 7f2ba01..0958041 100644
--- a/third_party/libxml/libxml.target.linux-arm.mk
+++ b/third_party/libxml/libxml.target.linux-arm.mk
@@ -282,7 +282,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libxml/libxml.target.linux-mips.mk b/third_party/libxml/libxml.target.linux-mips.mk
index db9aeb7..eac8428 100644
--- a/third_party/libxml/libxml.target.linux-mips.mk
+++ b/third_party/libxml/libxml.target.linux-mips.mk
@@ -280,7 +280,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libxml/libxml.target.linux-x86.mk b/third_party/libxml/libxml.target.linux-x86.mk
index fb5bc67..150d2d1 100644
--- a/third_party/libxml/libxml.target.linux-x86.mk
+++ b/third_party/libxml/libxml.target.linux-x86.mk
@@ -280,7 +280,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libxml/libxml.target.linux-x86_64.mk b/third_party/libxml/libxml.target.linux-x86_64.mk
index 668c751..6e12fd1 100644
--- a/third_party/libxml/libxml.target.linux-x86_64.mk
+++ b/third_party/libxml/libxml.target.linux-x86_64.mk
@@ -280,7 +280,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libxslt/libxslt.target.darwin-arm.mk b/third_party/libxslt/libxslt.target.darwin-arm.mk
index e301220..2f139fc 100644
--- a/third_party/libxslt/libxslt.target.darwin-arm.mk
+++ b/third_party/libxslt/libxslt.target.darwin-arm.mk
@@ -255,7 +255,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libxslt/libxslt.target.darwin-mips.mk b/third_party/libxslt/libxslt.target.darwin-mips.mk
index d8f0a14..1c7aea0 100644
--- a/third_party/libxslt/libxslt.target.darwin-mips.mk
+++ b/third_party/libxslt/libxslt.target.darwin-mips.mk
@@ -253,7 +253,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libxslt/libxslt.target.darwin-x86.mk b/third_party/libxslt/libxslt.target.darwin-x86.mk
index 76bf85b..ccb093d 100644
--- a/third_party/libxslt/libxslt.target.darwin-x86.mk
+++ b/third_party/libxslt/libxslt.target.darwin-x86.mk
@@ -253,7 +253,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libxslt/libxslt.target.darwin-x86_64.mk b/third_party/libxslt/libxslt.target.darwin-x86_64.mk
index 5b62ab3..739b5b8 100644
--- a/third_party/libxslt/libxslt.target.darwin-x86_64.mk
+++ b/third_party/libxslt/libxslt.target.darwin-x86_64.mk
@@ -253,7 +253,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libxslt/libxslt.target.linux-arm.mk b/third_party/libxslt/libxslt.target.linux-arm.mk
index e301220..2f139fc 100644
--- a/third_party/libxslt/libxslt.target.linux-arm.mk
+++ b/third_party/libxslt/libxslt.target.linux-arm.mk
@@ -255,7 +255,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libxslt/libxslt.target.linux-mips.mk b/third_party/libxslt/libxslt.target.linux-mips.mk
index d8f0a14..1c7aea0 100644
--- a/third_party/libxslt/libxslt.target.linux-mips.mk
+++ b/third_party/libxslt/libxslt.target.linux-mips.mk
@@ -253,7 +253,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libxslt/libxslt.target.linux-x86.mk b/third_party/libxslt/libxslt.target.linux-x86.mk
index 76bf85b..ccb093d 100644
--- a/third_party/libxslt/libxslt.target.linux-x86.mk
+++ b/third_party/libxslt/libxslt.target.linux-x86.mk
@@ -253,7 +253,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/libxslt/libxslt.target.linux-x86_64.mk b/third_party/libxslt/libxslt.target.linux-x86_64.mk
index 5b62ab3..739b5b8 100644
--- a/third_party/libxslt/libxslt.target.linux-x86_64.mk
+++ b/third_party/libxslt/libxslt.target.linux-x86_64.mk
@@ -253,7 +253,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/lzma_sdk/lzma_sdk.target.darwin-arm.mk b/third_party/lzma_sdk/lzma_sdk.target.darwin-arm.mk
index 2d3bc81..468d6bf 100644
--- a/third_party/lzma_sdk/lzma_sdk.target.darwin-arm.mk
+++ b/third_party/lzma_sdk/lzma_sdk.target.darwin-arm.mk
@@ -240,7 +240,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/lzma_sdk/lzma_sdk.target.darwin-mips.mk b/third_party/lzma_sdk/lzma_sdk.target.darwin-mips.mk
index a05427f..e4d6923 100644
--- a/third_party/lzma_sdk/lzma_sdk.target.darwin-mips.mk
+++ b/third_party/lzma_sdk/lzma_sdk.target.darwin-mips.mk
@@ -238,7 +238,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/lzma_sdk/lzma_sdk.target.darwin-x86.mk b/third_party/lzma_sdk/lzma_sdk.target.darwin-x86.mk
index 12572b1..f7807a2 100644
--- a/third_party/lzma_sdk/lzma_sdk.target.darwin-x86.mk
+++ b/third_party/lzma_sdk/lzma_sdk.target.darwin-x86.mk
@@ -238,7 +238,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/lzma_sdk/lzma_sdk.target.darwin-x86_64.mk b/third_party/lzma_sdk/lzma_sdk.target.darwin-x86_64.mk
index 06d67ed..e49f5bc 100644
--- a/third_party/lzma_sdk/lzma_sdk.target.darwin-x86_64.mk
+++ b/third_party/lzma_sdk/lzma_sdk.target.darwin-x86_64.mk
@@ -238,7 +238,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/lzma_sdk/lzma_sdk.target.linux-arm.mk b/third_party/lzma_sdk/lzma_sdk.target.linux-arm.mk
index 2d3bc81..468d6bf 100644
--- a/third_party/lzma_sdk/lzma_sdk.target.linux-arm.mk
+++ b/third_party/lzma_sdk/lzma_sdk.target.linux-arm.mk
@@ -240,7 +240,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/lzma_sdk/lzma_sdk.target.linux-mips.mk b/third_party/lzma_sdk/lzma_sdk.target.linux-mips.mk
index a05427f..e4d6923 100644
--- a/third_party/lzma_sdk/lzma_sdk.target.linux-mips.mk
+++ b/third_party/lzma_sdk/lzma_sdk.target.linux-mips.mk
@@ -238,7 +238,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/lzma_sdk/lzma_sdk.target.linux-x86.mk b/third_party/lzma_sdk/lzma_sdk.target.linux-x86.mk
index 12572b1..f7807a2 100644
--- a/third_party/lzma_sdk/lzma_sdk.target.linux-x86.mk
+++ b/third_party/lzma_sdk/lzma_sdk.target.linux-x86.mk
@@ -238,7 +238,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/lzma_sdk/lzma_sdk.target.linux-x86_64.mk b/third_party/lzma_sdk/lzma_sdk.target.linux-x86_64.mk
index 06d67ed..e49f5bc 100644
--- a/third_party/lzma_sdk/lzma_sdk.target.linux-x86_64.mk
+++ b/third_party/lzma_sdk/lzma_sdk.target.linux-x86_64.mk
@@ -238,7 +238,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/mesa/README.chromium b/third_party/mesa/README.chromium
index 3f9739b..bc729c6 100644
--- a/third_party/mesa/README.chromium
+++ b/third_party/mesa/README.chromium
@@ -45,5 +45,8 @@
 - #pragma optimize off around _swrast_write_zoomed_z_span, ICEing on
   VS2013: http://crbug.com/348350.
 
+- Disabled "#pragma export" usage in gl.h and osmesa.h,
+  https://bugs.freedesktop.org/show_bug.cgi?id=77749
+
 - Porting to x64 Android. Remove redefinitions of log2 and log2f.
   https://codereview.chromium.org/216773005/
diff --git a/third_party/mesa/mesa.gyp b/third_party/mesa/mesa.gyp
index 25423d4..8cba151 100644
--- a/third_party/mesa/mesa.gyp
+++ b/third_party/mesa/mesa.gyp
@@ -90,14 +90,6 @@
         'include_dirs': [
           'src/include',
         ],
-        'xcode_settings': {
-          'WARNING_CFLAGS': [
-            '-Wno-unknown-pragmas',
-          ],
-        },
-        'cflags': [
-          '-Wno-unknown-pragmas',
-        ],
       },
       'conditions': [
         ['use_x11==0', {
diff --git a/third_party/modp_b64/modp_b64.target.darwin-arm.mk b/third_party/modp_b64/modp_b64.target.darwin-arm.mk
index 7b32c43..ec79080 100644
--- a/third_party/modp_b64/modp_b64.target.darwin-arm.mk
+++ b/third_party/modp_b64/modp_b64.target.darwin-arm.mk
@@ -220,7 +220,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/modp_b64/modp_b64.target.darwin-mips.mk b/third_party/modp_b64/modp_b64.target.darwin-mips.mk
index 1ac2ea5..f862bb7 100644
--- a/third_party/modp_b64/modp_b64.target.darwin-mips.mk
+++ b/third_party/modp_b64/modp_b64.target.darwin-mips.mk
@@ -218,7 +218,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/modp_b64/modp_b64.target.darwin-x86.mk b/third_party/modp_b64/modp_b64.target.darwin-x86.mk
index b928e0e..0080dbb 100644
--- a/third_party/modp_b64/modp_b64.target.darwin-x86.mk
+++ b/third_party/modp_b64/modp_b64.target.darwin-x86.mk
@@ -218,7 +218,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/modp_b64/modp_b64.target.darwin-x86_64.mk b/third_party/modp_b64/modp_b64.target.darwin-x86_64.mk
index 2f2441e..224d28c 100644
--- a/third_party/modp_b64/modp_b64.target.darwin-x86_64.mk
+++ b/third_party/modp_b64/modp_b64.target.darwin-x86_64.mk
@@ -218,7 +218,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/modp_b64/modp_b64.target.linux-arm.mk b/third_party/modp_b64/modp_b64.target.linux-arm.mk
index 7b32c43..ec79080 100644
--- a/third_party/modp_b64/modp_b64.target.linux-arm.mk
+++ b/third_party/modp_b64/modp_b64.target.linux-arm.mk
@@ -220,7 +220,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/modp_b64/modp_b64.target.linux-mips.mk b/third_party/modp_b64/modp_b64.target.linux-mips.mk
index 1ac2ea5..f862bb7 100644
--- a/third_party/modp_b64/modp_b64.target.linux-mips.mk
+++ b/third_party/modp_b64/modp_b64.target.linux-mips.mk
@@ -218,7 +218,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/modp_b64/modp_b64.target.linux-x86.mk b/third_party/modp_b64/modp_b64.target.linux-x86.mk
index b928e0e..0080dbb 100644
--- a/third_party/modp_b64/modp_b64.target.linux-x86.mk
+++ b/third_party/modp_b64/modp_b64.target.linux-x86.mk
@@ -218,7 +218,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/modp_b64/modp_b64.target.linux-x86_64.mk b/third_party/modp_b64/modp_b64.target.linux-x86_64.mk
index 2f2441e..224d28c 100644
--- a/third_party/modp_b64/modp_b64.target.linux-x86_64.mk
+++ b/third_party/modp_b64/modp_b64.target.linux-x86_64.mk
@@ -218,7 +218,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/opus/opus.target.darwin-arm.mk b/third_party/opus/opus.target.darwin-arm.mk
index 9284a80..8b5ec28 100644
--- a/third_party/opus/opus.target.darwin-arm.mk
+++ b/third_party/opus/opus.target.darwin-arm.mk
@@ -394,7 +394,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/opus/opus.target.darwin-mips.mk b/third_party/opus/opus.target.darwin-mips.mk
index 215920e..8d58c29 100644
--- a/third_party/opus/opus.target.darwin-mips.mk
+++ b/third_party/opus/opus.target.darwin-mips.mk
@@ -367,7 +367,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/opus/opus.target.darwin-x86.mk b/third_party/opus/opus.target.darwin-x86.mk
index 11b67f4..e3a995d 100644
--- a/third_party/opus/opus.target.darwin-x86.mk
+++ b/third_party/opus/opus.target.darwin-x86.mk
@@ -367,7 +367,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/opus/opus.target.darwin-x86_64.mk b/third_party/opus/opus.target.darwin-x86_64.mk
index 9046965..9e7aaec 100644
--- a/third_party/opus/opus.target.darwin-x86_64.mk
+++ b/third_party/opus/opus.target.darwin-x86_64.mk
@@ -367,7 +367,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/opus/opus.target.linux-arm.mk b/third_party/opus/opus.target.linux-arm.mk
index 9284a80..8b5ec28 100644
--- a/third_party/opus/opus.target.linux-arm.mk
+++ b/third_party/opus/opus.target.linux-arm.mk
@@ -394,7 +394,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/opus/opus.target.linux-mips.mk b/third_party/opus/opus.target.linux-mips.mk
index 215920e..8d58c29 100644
--- a/third_party/opus/opus.target.linux-mips.mk
+++ b/third_party/opus/opus.target.linux-mips.mk
@@ -367,7 +367,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/opus/opus.target.linux-x86.mk b/third_party/opus/opus.target.linux-x86.mk
index 11b67f4..e3a995d 100644
--- a/third_party/opus/opus.target.linux-x86.mk
+++ b/third_party/opus/opus.target.linux-x86.mk
@@ -367,7 +367,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/opus/opus.target.linux-x86_64.mk b/third_party/opus/opus.target.linux-x86_64.mk
index 9046965..9e7aaec 100644
--- a/third_party/opus/opus.target.linux-x86_64.mk
+++ b/third_party/opus/opus.target.linux-x86_64.mk
@@ -367,7 +367,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/protobuf/protobuf_lite.target.darwin-arm.mk b/third_party/protobuf/protobuf_lite.target.darwin-arm.mk
index 433ca8c..dadf1ed 100644
--- a/third_party/protobuf/protobuf_lite.target.darwin-arm.mk
+++ b/third_party/protobuf/protobuf_lite.target.darwin-arm.mk
@@ -242,7 +242,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/protobuf/protobuf_lite.target.darwin-mips.mk b/third_party/protobuf/protobuf_lite.target.darwin-mips.mk
index 59dd3ad..d6d9db9 100644
--- a/third_party/protobuf/protobuf_lite.target.darwin-mips.mk
+++ b/third_party/protobuf/protobuf_lite.target.darwin-mips.mk
@@ -240,7 +240,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/protobuf/protobuf_lite.target.darwin-x86.mk b/third_party/protobuf/protobuf_lite.target.darwin-x86.mk
index a1df3bb..d6fa2e0 100644
--- a/third_party/protobuf/protobuf_lite.target.darwin-x86.mk
+++ b/third_party/protobuf/protobuf_lite.target.darwin-x86.mk
@@ -240,7 +240,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/protobuf/protobuf_lite.target.darwin-x86_64.mk b/third_party/protobuf/protobuf_lite.target.darwin-x86_64.mk
index 0645d80..2d711fc 100644
--- a/third_party/protobuf/protobuf_lite.target.darwin-x86_64.mk
+++ b/third_party/protobuf/protobuf_lite.target.darwin-x86_64.mk
@@ -240,7 +240,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/protobuf/protobuf_lite.target.linux-arm.mk b/third_party/protobuf/protobuf_lite.target.linux-arm.mk
index 433ca8c..dadf1ed 100644
--- a/third_party/protobuf/protobuf_lite.target.linux-arm.mk
+++ b/third_party/protobuf/protobuf_lite.target.linux-arm.mk
@@ -242,7 +242,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/protobuf/protobuf_lite.target.linux-mips.mk b/third_party/protobuf/protobuf_lite.target.linux-mips.mk
index 59dd3ad..d6d9db9 100644
--- a/third_party/protobuf/protobuf_lite.target.linux-mips.mk
+++ b/third_party/protobuf/protobuf_lite.target.linux-mips.mk
@@ -240,7 +240,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/protobuf/protobuf_lite.target.linux-x86.mk b/third_party/protobuf/protobuf_lite.target.linux-x86.mk
index a1df3bb..d6fa2e0 100644
--- a/third_party/protobuf/protobuf_lite.target.linux-x86.mk
+++ b/third_party/protobuf/protobuf_lite.target.linux-x86.mk
@@ -240,7 +240,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/protobuf/protobuf_lite.target.linux-x86_64.mk b/third_party/protobuf/protobuf_lite.target.linux-x86_64.mk
index 0645d80..2d711fc 100644
--- a/third_party/protobuf/protobuf_lite.target.linux-x86_64.mk
+++ b/third_party/protobuf/protobuf_lite.target.linux-x86_64.mk
@@ -240,7 +240,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/qcms/qcms.target.darwin-arm.mk b/third_party/qcms/qcms.target.darwin-arm.mk
index ad136e1..9af603f 100644
--- a/third_party/qcms/qcms.target.darwin-arm.mk
+++ b/third_party/qcms/qcms.target.darwin-arm.mk
@@ -221,7 +221,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/qcms/qcms.target.darwin-mips.mk b/third_party/qcms/qcms.target.darwin-mips.mk
index 55d7b62..c1a8f3f 100644
--- a/third_party/qcms/qcms.target.darwin-mips.mk
+++ b/third_party/qcms/qcms.target.darwin-mips.mk
@@ -219,7 +219,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/qcms/qcms.target.darwin-x86.mk b/third_party/qcms/qcms.target.darwin-x86.mk
index f395e41..d7a74a8 100644
--- a/third_party/qcms/qcms.target.darwin-x86.mk
+++ b/third_party/qcms/qcms.target.darwin-x86.mk
@@ -223,7 +223,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/qcms/qcms.target.darwin-x86_64.mk b/third_party/qcms/qcms.target.darwin-x86_64.mk
index a080b9f..35c5cc4 100644
--- a/third_party/qcms/qcms.target.darwin-x86_64.mk
+++ b/third_party/qcms/qcms.target.darwin-x86_64.mk
@@ -223,7 +223,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/qcms/qcms.target.linux-arm.mk b/third_party/qcms/qcms.target.linux-arm.mk
index ad136e1..9af603f 100644
--- a/third_party/qcms/qcms.target.linux-arm.mk
+++ b/third_party/qcms/qcms.target.linux-arm.mk
@@ -221,7 +221,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/qcms/qcms.target.linux-mips.mk b/third_party/qcms/qcms.target.linux-mips.mk
index 55d7b62..c1a8f3f 100644
--- a/third_party/qcms/qcms.target.linux-mips.mk
+++ b/third_party/qcms/qcms.target.linux-mips.mk
@@ -219,7 +219,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/qcms/qcms.target.linux-x86.mk b/third_party/qcms/qcms.target.linux-x86.mk
index f395e41..d7a74a8 100644
--- a/third_party/qcms/qcms.target.linux-x86.mk
+++ b/third_party/qcms/qcms.target.linux-x86.mk
@@ -223,7 +223,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/qcms/qcms.target.linux-x86_64.mk b/third_party/qcms/qcms.target.linux-x86_64.mk
index a080b9f..35c5cc4 100644
--- a/third_party/qcms/qcms.target.linux-x86_64.mk
+++ b/third_party/qcms/qcms.target.linux-x86_64.mk
@@ -223,7 +223,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/re2/re2.target.darwin-arm.mk b/third_party/re2/re2.target.darwin-arm.mk
index 0d54899..8c732cb 100644
--- a/third_party/re2/re2.target.darwin-arm.mk
+++ b/third_party/re2/re2.target.darwin-arm.mk
@@ -246,7 +246,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/re2/re2.target.darwin-mips.mk b/third_party/re2/re2.target.darwin-mips.mk
index 7917fbc..ba9259f 100644
--- a/third_party/re2/re2.target.darwin-mips.mk
+++ b/third_party/re2/re2.target.darwin-mips.mk
@@ -244,7 +244,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/re2/re2.target.darwin-x86.mk b/third_party/re2/re2.target.darwin-x86.mk
index 5ac0ddb..e780e4f 100644
--- a/third_party/re2/re2.target.darwin-x86.mk
+++ b/third_party/re2/re2.target.darwin-x86.mk
@@ -244,7 +244,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/re2/re2.target.darwin-x86_64.mk b/third_party/re2/re2.target.darwin-x86_64.mk
index faa8ee6..a76c609 100644
--- a/third_party/re2/re2.target.darwin-x86_64.mk
+++ b/third_party/re2/re2.target.darwin-x86_64.mk
@@ -244,7 +244,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/re2/re2.target.linux-arm.mk b/third_party/re2/re2.target.linux-arm.mk
index 0d54899..8c732cb 100644
--- a/third_party/re2/re2.target.linux-arm.mk
+++ b/third_party/re2/re2.target.linux-arm.mk
@@ -246,7 +246,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/re2/re2.target.linux-mips.mk b/third_party/re2/re2.target.linux-mips.mk
index 7917fbc..ba9259f 100644
--- a/third_party/re2/re2.target.linux-mips.mk
+++ b/third_party/re2/re2.target.linux-mips.mk
@@ -244,7 +244,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/re2/re2.target.linux-x86.mk b/third_party/re2/re2.target.linux-x86.mk
index 5ac0ddb..e780e4f 100644
--- a/third_party/re2/re2.target.linux-x86.mk
+++ b/third_party/re2/re2.target.linux-x86.mk
@@ -244,7 +244,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/re2/re2.target.linux-x86_64.mk b/third_party/re2/re2.target.linux-x86_64.mk
index faa8ee6..a76c609 100644
--- a/third_party/re2/re2.target.linux-x86_64.mk
+++ b/third_party/re2/re2.target.linux-x86_64.mk
@@ -244,7 +244,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/sfntly/sfntly.target.darwin-arm.mk b/third_party/sfntly/sfntly.target.darwin-arm.mk
index 485cdcb..704c379 100644
--- a/third_party/sfntly/sfntly.target.darwin-arm.mk
+++ b/third_party/sfntly/sfntly.target.darwin-arm.mk
@@ -280,7 +280,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/sfntly/sfntly.target.darwin-mips.mk b/third_party/sfntly/sfntly.target.darwin-mips.mk
index f56be78..d4ed6af 100644
--- a/third_party/sfntly/sfntly.target.darwin-mips.mk
+++ b/third_party/sfntly/sfntly.target.darwin-mips.mk
@@ -276,7 +276,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/sfntly/sfntly.target.darwin-x86.mk b/third_party/sfntly/sfntly.target.darwin-x86.mk
index e15ccba..76b7a8f 100644
--- a/third_party/sfntly/sfntly.target.darwin-x86.mk
+++ b/third_party/sfntly/sfntly.target.darwin-x86.mk
@@ -278,7 +278,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/sfntly/sfntly.target.darwin-x86_64.mk b/third_party/sfntly/sfntly.target.darwin-x86_64.mk
index 0b1910d..2920bf9 100644
--- a/third_party/sfntly/sfntly.target.darwin-x86_64.mk
+++ b/third_party/sfntly/sfntly.target.darwin-x86_64.mk
@@ -278,7 +278,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/sfntly/sfntly.target.linux-arm.mk b/third_party/sfntly/sfntly.target.linux-arm.mk
index 485cdcb..704c379 100644
--- a/third_party/sfntly/sfntly.target.linux-arm.mk
+++ b/third_party/sfntly/sfntly.target.linux-arm.mk
@@ -280,7 +280,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/sfntly/sfntly.target.linux-mips.mk b/third_party/sfntly/sfntly.target.linux-mips.mk
index f56be78..d4ed6af 100644
--- a/third_party/sfntly/sfntly.target.linux-mips.mk
+++ b/third_party/sfntly/sfntly.target.linux-mips.mk
@@ -276,7 +276,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/sfntly/sfntly.target.linux-x86.mk b/third_party/sfntly/sfntly.target.linux-x86.mk
index e15ccba..76b7a8f 100644
--- a/third_party/sfntly/sfntly.target.linux-x86.mk
+++ b/third_party/sfntly/sfntly.target.linux-x86.mk
@@ -278,7 +278,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/sfntly/sfntly.target.linux-x86_64.mk b/third_party/sfntly/sfntly.target.linux-x86_64.mk
index 0b1910d..2920bf9 100644
--- a/third_party/sfntly/sfntly.target.linux-x86_64.mk
+++ b/third_party/sfntly/sfntly.target.linux-x86_64.mk
@@ -278,7 +278,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/smhasher/cityhash.target.darwin-arm.mk b/third_party/smhasher/cityhash.target.darwin-arm.mk
index d416716..ef9a167 100644
--- a/third_party/smhasher/cityhash.target.darwin-arm.mk
+++ b/third_party/smhasher/cityhash.target.darwin-arm.mk
@@ -217,7 +217,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/smhasher/cityhash.target.darwin-mips.mk b/third_party/smhasher/cityhash.target.darwin-mips.mk
index 2da2e04..ea39ae3 100644
--- a/third_party/smhasher/cityhash.target.darwin-mips.mk
+++ b/third_party/smhasher/cityhash.target.darwin-mips.mk
@@ -215,7 +215,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/smhasher/cityhash.target.darwin-x86.mk b/third_party/smhasher/cityhash.target.darwin-x86.mk
index 1d4f327..9e86cad 100644
--- a/third_party/smhasher/cityhash.target.darwin-x86.mk
+++ b/third_party/smhasher/cityhash.target.darwin-x86.mk
@@ -215,7 +215,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/smhasher/cityhash.target.darwin-x86_64.mk b/third_party/smhasher/cityhash.target.darwin-x86_64.mk
index 3f93ee4..5b74964 100644
--- a/third_party/smhasher/cityhash.target.darwin-x86_64.mk
+++ b/third_party/smhasher/cityhash.target.darwin-x86_64.mk
@@ -215,7 +215,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/smhasher/cityhash.target.linux-arm.mk b/third_party/smhasher/cityhash.target.linux-arm.mk
index d416716..ef9a167 100644
--- a/third_party/smhasher/cityhash.target.linux-arm.mk
+++ b/third_party/smhasher/cityhash.target.linux-arm.mk
@@ -217,7 +217,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/smhasher/cityhash.target.linux-mips.mk b/third_party/smhasher/cityhash.target.linux-mips.mk
index 2da2e04..ea39ae3 100644
--- a/third_party/smhasher/cityhash.target.linux-mips.mk
+++ b/third_party/smhasher/cityhash.target.linux-mips.mk
@@ -215,7 +215,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/smhasher/cityhash.target.linux-x86.mk b/third_party/smhasher/cityhash.target.linux-x86.mk
index 1d4f327..9e86cad 100644
--- a/third_party/smhasher/cityhash.target.linux-x86.mk
+++ b/third_party/smhasher/cityhash.target.linux-x86.mk
@@ -215,7 +215,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/smhasher/cityhash.target.linux-x86_64.mk b/third_party/smhasher/cityhash.target.linux-x86_64.mk
index 3f93ee4..5b74964 100644
--- a/third_party/smhasher/cityhash.target.linux-x86_64.mk
+++ b/third_party/smhasher/cityhash.target.linux-x86_64.mk
@@ -215,7 +215,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/sqlite/BUILD.gn b/third_party/sqlite/BUILD.gn
new file mode 100644
index 0000000..b78bd11
--- /dev/null
+++ b/third_party/sqlite/BUILD.gn
@@ -0,0 +1,117 @@
+# Copyright (c) 2013 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.
+
+config("sqlite_config") {
+  include_dirs = [ "." ]
+}
+
+source_set("sqlite") {
+  sources = [
+    "amalgamation/sqlite3.h",
+    "amalgamation/sqlite3.c",
+    # fts2.c currently has a lot of conflicts when added to
+    # the amalgamation.  It is probably not worth fixing that.
+    "src/ext/fts2/fts2.c",
+    "src/ext/fts2/fts2.h",
+    "src/ext/fts2/fts2_hash.c",
+    "src/ext/fts2/fts2_hash.h",
+    "src/ext/fts2/fts2_icu.c",
+    "src/ext/fts2/fts2_porter.c",
+    "src/ext/fts2/fts2_tokenizer.c",
+    "src/ext/fts2/fts2_tokenizer.h",
+    "src/ext/fts2/fts2_tokenizer1.c",
+  ]
+
+  cflags = []
+  defines = [
+    "SQLITE_CORE",
+    "SQLITE_ENABLE_BROKEN_FTS2",
+    "SQLITE_ENABLE_FTS2",
+    "SQLITE_ENABLE_FTS3",
+    "SQLITE_ENABLE_ICU",
+    "SQLITE_ENABLE_MEMORY_MANAGEMENT",
+    "SQLITE_SECURE_DELETE",
+    "SQLITE_SEPARATE_CACHE_POOLS",
+    "THREADSAFE",
+    "_HAS_EXCEPTIONS=0",
+  ]
+  if (is_chromeos) {
+    defines += [
+      # Despite obvious warnings about not using this flag in deployment, we
+      # are turning off sync in ChromeOS and relying on the underlying
+      # journaling filesystem to do error recovery properly. It's much faster.
+      "SQLITE_NO_SYNC",
+    ]
+  }
+
+  include_dirs = [
+    "amalgamation",
+    "src/src",  # Needed for fts2 to build.
+  ]
+
+  configs -= [ "//build/config/compiler:chromium_code" ]
+  configs += [ "//build/config/compiler:no_chromium_code" ]
+
+  if (is_win) {
+    cflags += [ "/wd4267" ]  # Conversion from size_t to "type".
+  } else if (is_linux) {
+    cflags += [
+      # SQLite doesn"t believe in compiler warnings,
+      # preferring testing.
+      #   http://www.sqlite.org/faq.html#q17
+      "-Wno-int-to-pointer-cast",
+      "-Wno-pointer-to-int-cast",
+    ]
+    libs = [ "dl" ]
+  } else if (is_mac || is_ios) {
+    libs = [ "CoreFoundation.framework" ]
+  } else if (is_android) {
+    defines += [
+      "HAVE_USLEEP=1",
+      "SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT=1048576",
+      "SQLITE_DEFAULT_AUTOVACUUM=1",
+      "SQLITE_TEMP_STORE=3",
+      "SQLITE_ENABLE_FTS3_BACKWARDS",
+      "DSQLITE_DEFAULT_FILE_FORMAT=4",
+    ]
+  }
+
+  if (is_clang) {
+    cflags += [
+      # sqlite does `if (*a++ && *b++);` in a non-buggy way.
+      "-Wno-empty-body",
+      # sqlite has some `unsigned < 0` checks.
+      "-Wno-tautological-compare",
+    ]
+  }
+
+  direct_dependent_configs = [ ":sqlite_config" ]
+
+  deps = [
+    "//third_party/icu",
+  ]
+}
+
+if (is_linux) {
+  executable("sqlite_shell") {
+    sources = [
+      "src/src/shell.c",
+      "src/src/shell_icu_linux.c",
+      # Include a dummy c++ file to force linking of libstdc++.
+      "build_as_cpp.cc",
+    ]
+
+    deps = [
+      ":sqlite",
+      "//third_party/icu",
+    ]
+  }
+}
+
+if (is_ios) {
+  source_set("sqlite_regexp") {
+    sources = [ "src/ext/icu/icu.c" ]
+    deps = [ "//third_party/icu" ]
+  }
+}
diff --git a/third_party/sqlite/sqlite.target.darwin-arm.mk b/third_party/sqlite/sqlite.target.darwin-arm.mk
index 538e69f..e191e29 100644
--- a/third_party/sqlite/sqlite.target.darwin-arm.mk
+++ b/third_party/sqlite/sqlite.target.darwin-arm.mk
@@ -271,7 +271,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/sqlite/sqlite.target.darwin-mips.mk b/third_party/sqlite/sqlite.target.darwin-mips.mk
index dcb1725..8dc8175 100644
--- a/third_party/sqlite/sqlite.target.darwin-mips.mk
+++ b/third_party/sqlite/sqlite.target.darwin-mips.mk
@@ -269,7 +269,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/sqlite/sqlite.target.darwin-x86.mk b/third_party/sqlite/sqlite.target.darwin-x86.mk
index 12670fa..f420831 100644
--- a/third_party/sqlite/sqlite.target.darwin-x86.mk
+++ b/third_party/sqlite/sqlite.target.darwin-x86.mk
@@ -269,7 +269,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/sqlite/sqlite.target.darwin-x86_64.mk b/third_party/sqlite/sqlite.target.darwin-x86_64.mk
index a63a57d..aeca9f4 100644
--- a/third_party/sqlite/sqlite.target.darwin-x86_64.mk
+++ b/third_party/sqlite/sqlite.target.darwin-x86_64.mk
@@ -269,7 +269,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/sqlite/sqlite.target.linux-arm.mk b/third_party/sqlite/sqlite.target.linux-arm.mk
index 538e69f..e191e29 100644
--- a/third_party/sqlite/sqlite.target.linux-arm.mk
+++ b/third_party/sqlite/sqlite.target.linux-arm.mk
@@ -271,7 +271,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/sqlite/sqlite.target.linux-mips.mk b/third_party/sqlite/sqlite.target.linux-mips.mk
index dcb1725..8dc8175 100644
--- a/third_party/sqlite/sqlite.target.linux-mips.mk
+++ b/third_party/sqlite/sqlite.target.linux-mips.mk
@@ -269,7 +269,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/sqlite/sqlite.target.linux-x86.mk b/third_party/sqlite/sqlite.target.linux-x86.mk
index 12670fa..f420831 100644
--- a/third_party/sqlite/sqlite.target.linux-x86.mk
+++ b/third_party/sqlite/sqlite.target.linux-x86.mk
@@ -269,7 +269,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/sqlite/sqlite.target.linux-x86_64.mk b/third_party/sqlite/sqlite.target.linux-x86_64.mk
index a63a57d..aeca9f4 100644
--- a/third_party/sqlite/sqlite.target.linux-x86_64.mk
+++ b/third_party/sqlite/sqlite.target.linux-x86_64.mk
@@ -269,7 +269,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/tcmalloc/chromium/src/system-alloc.cc b/third_party/tcmalloc/chromium/src/system-alloc.cc
index 2141d41..d1ae71d 100644
--- a/third_party/tcmalloc/chromium/src/system-alloc.cc
+++ b/third_party/tcmalloc/chromium/src/system-alloc.cc
@@ -100,7 +100,7 @@
   return true;
 }
 
-#if (defined(OS_LINUX) || defined(OS_CHROMEOS)) && defined(__x86_64__)
+#if defined(OS_LINUX) && defined(__x86_64__)
 #define ASLR_IS_SUPPORTED
 #endif
 
diff --git a/third_party/usrsctp/usrsctplib.target.darwin-arm.mk b/third_party/usrsctp/usrsctplib.target.darwin-arm.mk
index 01fbdb5..0bb6508 100644
--- a/third_party/usrsctp/usrsctplib.target.darwin-arm.mk
+++ b/third_party/usrsctp/usrsctplib.target.darwin-arm.mk
@@ -260,7 +260,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/usrsctp/usrsctplib.target.darwin-mips.mk b/third_party/usrsctp/usrsctplib.target.darwin-mips.mk
index 88973f6..b59f1c9 100644
--- a/third_party/usrsctp/usrsctplib.target.darwin-mips.mk
+++ b/third_party/usrsctp/usrsctplib.target.darwin-mips.mk
@@ -258,7 +258,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/usrsctp/usrsctplib.target.darwin-x86.mk b/third_party/usrsctp/usrsctplib.target.darwin-x86.mk
index 318ea63..6cd8c18 100644
--- a/third_party/usrsctp/usrsctplib.target.darwin-x86.mk
+++ b/third_party/usrsctp/usrsctplib.target.darwin-x86.mk
@@ -258,7 +258,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/usrsctp/usrsctplib.target.darwin-x86_64.mk b/third_party/usrsctp/usrsctplib.target.darwin-x86_64.mk
index e93e0c1..6947ff0 100644
--- a/third_party/usrsctp/usrsctplib.target.darwin-x86_64.mk
+++ b/third_party/usrsctp/usrsctplib.target.darwin-x86_64.mk
@@ -260,7 +260,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/usrsctp/usrsctplib.target.linux-arm.mk b/third_party/usrsctp/usrsctplib.target.linux-arm.mk
index 01fbdb5..0bb6508 100644
--- a/third_party/usrsctp/usrsctplib.target.linux-arm.mk
+++ b/third_party/usrsctp/usrsctplib.target.linux-arm.mk
@@ -260,7 +260,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/usrsctp/usrsctplib.target.linux-mips.mk b/third_party/usrsctp/usrsctplib.target.linux-mips.mk
index 88973f6..b59f1c9 100644
--- a/third_party/usrsctp/usrsctplib.target.linux-mips.mk
+++ b/third_party/usrsctp/usrsctplib.target.linux-mips.mk
@@ -258,7 +258,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/usrsctp/usrsctplib.target.linux-x86.mk b/third_party/usrsctp/usrsctplib.target.linux-x86.mk
index 318ea63..6cd8c18 100644
--- a/third_party/usrsctp/usrsctplib.target.linux-x86.mk
+++ b/third_party/usrsctp/usrsctplib.target.linux-x86.mk
@@ -258,7 +258,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/usrsctp/usrsctplib.target.linux-x86_64.mk b/third_party/usrsctp/usrsctplib.target.linux-x86_64.mk
index e93e0c1..6947ff0 100644
--- a/third_party/usrsctp/usrsctplib.target.linux-x86_64.mk
+++ b/third_party/usrsctp/usrsctplib.target.linux-x86_64.mk
@@ -260,7 +260,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/zlib/google/zip.target.darwin-arm.mk b/third_party/zlib/google/zip.target.darwin-arm.mk
index a7b9714..033bb4a 100644
--- a/third_party/zlib/google/zip.target.darwin-arm.mk
+++ b/third_party/zlib/google/zip.target.darwin-arm.mk
@@ -226,7 +226,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/zlib/google/zip.target.darwin-mips.mk b/third_party/zlib/google/zip.target.darwin-mips.mk
index 25751e5..6e951dc 100644
--- a/third_party/zlib/google/zip.target.darwin-mips.mk
+++ b/third_party/zlib/google/zip.target.darwin-mips.mk
@@ -224,7 +224,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/zlib/google/zip.target.darwin-x86.mk b/third_party/zlib/google/zip.target.darwin-x86.mk
index 4c9c79f..e05e7b2 100644
--- a/third_party/zlib/google/zip.target.darwin-x86.mk
+++ b/third_party/zlib/google/zip.target.darwin-x86.mk
@@ -224,7 +224,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/zlib/google/zip.target.darwin-x86_64.mk b/third_party/zlib/google/zip.target.darwin-x86_64.mk
index d94754d..c471d4f 100644
--- a/third_party/zlib/google/zip.target.darwin-x86_64.mk
+++ b/third_party/zlib/google/zip.target.darwin-x86_64.mk
@@ -224,7 +224,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/zlib/google/zip.target.linux-arm.mk b/third_party/zlib/google/zip.target.linux-arm.mk
index a7b9714..033bb4a 100644
--- a/third_party/zlib/google/zip.target.linux-arm.mk
+++ b/third_party/zlib/google/zip.target.linux-arm.mk
@@ -226,7 +226,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/zlib/google/zip.target.linux-mips.mk b/third_party/zlib/google/zip.target.linux-mips.mk
index 25751e5..6e951dc 100644
--- a/third_party/zlib/google/zip.target.linux-mips.mk
+++ b/third_party/zlib/google/zip.target.linux-mips.mk
@@ -224,7 +224,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/zlib/google/zip.target.linux-x86.mk b/third_party/zlib/google/zip.target.linux-x86.mk
index 4c9c79f..e05e7b2 100644
--- a/third_party/zlib/google/zip.target.linux-x86.mk
+++ b/third_party/zlib/google/zip.target.linux-x86.mk
@@ -224,7 +224,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/zlib/google/zip.target.linux-x86_64.mk b/third_party/zlib/google/zip.target.linux-x86_64.mk
index d94754d..c471d4f 100644
--- a/third_party/zlib/google/zip.target.linux-x86_64.mk
+++ b/third_party/zlib/google/zip.target.linux-x86_64.mk
@@ -224,7 +224,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/zlib/minizip.target.darwin-arm.mk b/third_party/zlib/minizip.target.darwin-arm.mk
index 051a9df..20bb9de 100644
--- a/third_party/zlib/minizip.target.darwin-arm.mk
+++ b/third_party/zlib/minizip.target.darwin-arm.mk
@@ -225,7 +225,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/zlib/minizip.target.darwin-mips.mk b/third_party/zlib/minizip.target.darwin-mips.mk
index 54c8a14..176573c 100644
--- a/third_party/zlib/minizip.target.darwin-mips.mk
+++ b/third_party/zlib/minizip.target.darwin-mips.mk
@@ -223,7 +223,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/zlib/minizip.target.darwin-x86.mk b/third_party/zlib/minizip.target.darwin-x86.mk
index 50a77d2..be064af 100644
--- a/third_party/zlib/minizip.target.darwin-x86.mk
+++ b/third_party/zlib/minizip.target.darwin-x86.mk
@@ -223,7 +223,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/zlib/minizip.target.darwin-x86_64.mk b/third_party/zlib/minizip.target.darwin-x86_64.mk
index 35bc7f7..dad07e7 100644
--- a/third_party/zlib/minizip.target.darwin-x86_64.mk
+++ b/third_party/zlib/minizip.target.darwin-x86_64.mk
@@ -223,7 +223,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/zlib/minizip.target.linux-arm.mk b/third_party/zlib/minizip.target.linux-arm.mk
index 051a9df..20bb9de 100644
--- a/third_party/zlib/minizip.target.linux-arm.mk
+++ b/third_party/zlib/minizip.target.linux-arm.mk
@@ -225,7 +225,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/zlib/minizip.target.linux-mips.mk b/third_party/zlib/minizip.target.linux-mips.mk
index 54c8a14..176573c 100644
--- a/third_party/zlib/minizip.target.linux-mips.mk
+++ b/third_party/zlib/minizip.target.linux-mips.mk
@@ -223,7 +223,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/zlib/minizip.target.linux-x86.mk b/third_party/zlib/minizip.target.linux-x86.mk
index 50a77d2..be064af 100644
--- a/third_party/zlib/minizip.target.linux-x86.mk
+++ b/third_party/zlib/minizip.target.linux-x86.mk
@@ -223,7 +223,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/zlib/minizip.target.linux-x86_64.mk b/third_party/zlib/minizip.target.linux-x86_64.mk
index 35bc7f7..dad07e7 100644
--- a/third_party/zlib/minizip.target.linux-x86_64.mk
+++ b/third_party/zlib/minizip.target.linux-x86_64.mk
@@ -223,7 +223,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/zlib/zlib.target.darwin-arm.mk b/third_party/zlib/zlib.target.darwin-arm.mk
index 1412b18..d713bc3 100644
--- a/third_party/zlib/zlib.target.darwin-arm.mk
+++ b/third_party/zlib/zlib.target.darwin-arm.mk
@@ -233,7 +233,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/zlib/zlib.target.darwin-mips.mk b/third_party/zlib/zlib.target.darwin-mips.mk
index 1b9e5f3..8ab64bc 100644
--- a/third_party/zlib/zlib.target.darwin-mips.mk
+++ b/third_party/zlib/zlib.target.darwin-mips.mk
@@ -231,7 +231,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/zlib/zlib.target.darwin-x86.mk b/third_party/zlib/zlib.target.darwin-x86.mk
index bb03229..8075de2 100644
--- a/third_party/zlib/zlib.target.darwin-x86.mk
+++ b/third_party/zlib/zlib.target.darwin-x86.mk
@@ -231,7 +231,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/zlib/zlib.target.darwin-x86_64.mk b/third_party/zlib/zlib.target.darwin-x86_64.mk
index 39f1672..0108417 100644
--- a/third_party/zlib/zlib.target.darwin-x86_64.mk
+++ b/third_party/zlib/zlib.target.darwin-x86_64.mk
@@ -231,7 +231,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/zlib/zlib.target.linux-arm.mk b/third_party/zlib/zlib.target.linux-arm.mk
index 1412b18..d713bc3 100644
--- a/third_party/zlib/zlib.target.linux-arm.mk
+++ b/third_party/zlib/zlib.target.linux-arm.mk
@@ -233,7 +233,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/zlib/zlib.target.linux-mips.mk b/third_party/zlib/zlib.target.linux-mips.mk
index 1b9e5f3..8ab64bc 100644
--- a/third_party/zlib/zlib.target.linux-mips.mk
+++ b/third_party/zlib/zlib.target.linux-mips.mk
@@ -231,7 +231,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/zlib/zlib.target.linux-x86.mk b/third_party/zlib/zlib.target.linux-x86.mk
index bb03229..8075de2 100644
--- a/third_party/zlib/zlib.target.linux-x86.mk
+++ b/third_party/zlib/zlib.target.linux-x86.mk
@@ -231,7 +231,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/third_party/zlib/zlib.target.linux-x86_64.mk b/third_party/zlib/zlib.target.linux-x86_64.mk
index 39f1672..0108417 100644
--- a/third_party/zlib/zlib.target.linux-x86_64.mk
+++ b/third_party/zlib/zlib.target.linux-x86_64.mk
@@ -231,7 +231,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/tools/android/adb_remote_setup.sh b/tools/android/adb_remote_setup.sh
index 04b7d4f..bf209cd 100755
--- a/tools/android/adb_remote_setup.sh
+++ b/tools/android/adb_remote_setup.sh
@@ -50,6 +50,12 @@
 remote_host="$1"
 remote_adb="${2:-adb}"
 
+# Ensure adb is in the local machine's path.
+if ! which adb >/dev/null; then
+  echo "error: adb must be in your local machine's path."
+  exit 1
+fi
+
 if which kinit >/dev/null; then
   # Allow ssh to succeed without typing your password multiple times.
   kinit -R || kinit
diff --git a/tools/binary_size/README.txt b/tools/binary_size/README.txt
index 1af78d9..a8d204f 100644
--- a/tools/binary_size/README.txt
+++ b/tools/binary_size/README.txt
@@ -116,8 +116,8 @@
 Feature Requests and Bug Reports
 --------------------------------------------------------------------------------
 Please file bugs and feature requests here, making sure to use the label
-"Binary-Size-Tool":
-  https://code.google.com/p/chromium/issues/entry?labels=Binary-Size-Tool
+"Tools-BinarySize":
+  https://code.google.com/p/chromium/issues/entry?labels=Tools-BinarySize
 
 View all open issues here:
-  https://code.google.com/p/chromium/issues/list?can=2&q=label:Binary-Size-Tool
\ No newline at end of file
+  https://code.google.com/p/chromium/issues/list?can=2&q=label:Tools-BinarySize
diff --git a/tools/binary_size/template/.gitignore b/tools/binary_size/legacy_template/.gitignore
similarity index 100%
rename from tools/binary_size/template/.gitignore
rename to tools/binary_size/legacy_template/.gitignore
diff --git a/tools/binary_size/legacy_template/index.html b/tools/binary_size/legacy_template/index.html
new file mode 100644
index 0000000..b73958a
--- /dev/null
+++ b/tools/binary_size/legacy_template/index.html
@@ -0,0 +1,190 @@
+<!DOCTYPE html>
+<!--
+  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.
+-->
+<html>
+<head>
+  <title>Binary Size Analysis</title>
+  <link rel='stylesheet' href='webtreemap/webtreemap.css'>
+  <style>
+    body { font-family: sans-serif; }
+    tt, pre { font-family: WebKitWorkaround, monospace; }
+    #map {
+      margin: 0 auto;
+      position: relative;
+      cursor: pointer;
+      -webkit-user-select: none;
+    }
+    #table {
+      border: 1px solid black;
+    }
+    .treemaplegend {
+      margin: 0 auto;
+      position: relative;
+    }
+    .webtreemap-symbol-vtable {
+      background: #FFFFAA;
+    }
+    .webtreemap-node:hover {
+      border-color: red;
+      background: linear-gradient(rgb(240,240,200), rgb(180,180,200));
+    }
+  </style>
+  <script src='webtreemap/webtreemap.js'></script>
+  <script src='treemap-dump.js'></script>
+  <script src='largest-symbols.js'></script>
+  <script src='largest-sources.js'></script>
+  <script src='largest-vtables.js'></script>
+</head>
+<body onload='show_report_treemap()'>
+<div style='text-align: center; margin-bottom: 2em;'>
+  <h1>Binary Size Analysis</h1>
+  <a href='#' onclick='show_report_treemap()'>Spatial Treemap</a>
+  ~
+  <a href='#' onclick='show_report_largest_sources()'>Largest Sources</a>
+  ~
+  <a href='#' onclick='show_report_largest_symbols()'>Largest Symbols</a>
+  ~
+  <a href='#' onclick='show_report_largest_vtables()'>Largest VTables</a>
+</div>
+<div id='report'></div>
+<script>
+function escape(str) { 
+  return str.replace(/&/g, '&amp;')
+            .replace(/"/g, '&quot;')
+            .replace(/</g, '&lt;')
+            .replace(/>/g, '&gt;');
+}
+
+var treemap_width = 800;
+var treemap_height = 450;
+function show_report_treemap() {
+  console.log('displaying treemap')
+  var div = document.getElementById('report');
+  var w = window.treemap_width;
+  var h = window.treemap_height;
+  div.innerHTML = '<div style=\'text-align: center;\'>' +
+                  '<button onclick=\'zoomInTreemap()\'>Bigger (More Detail)</button>' +
+                  ', <button onclick=\'zoomOutTreemap()\'>Smaller (Less Detail)</button>' +
+                  ' or resize to: ' +
+                  '<input type=text size=5 id=treemap_width value=' + w + '>x' +
+                  '<input type=text size=5 id=treemap_height value=' + h + '>' +
+                  '<button onclick=\'resizeTreemap()\'>Go</button>' +
+                  '<br><em>Click on a box to zoom in and reveal more detail. ' +
+                  'Click on the outermost box to zoom out.</em>' +
+                  '<br>Legend: <table border=1 class=\'treemaplegend\' cellborder=1><tr>' +
+                  '<td class=\'webtreemap-symbol-bss\'>BSS</td>' +
+                  '<td class=\'webtreemap-symbol-data\'>Data</td>' +
+                  '<td class=\'webtreemap-symbol-code\'>Code</td>' +
+                  '<td class=\'webtreemap-symbol-read-only_data\'>RO Data</td>' +
+                  '<td class=\'webtreemap-symbol-weak_symbol\'>Weak</td>' +
+                  '<td class=\'webtreemap-symbol-vtable\'>VTable</td>' +
+                  '</tr></table>' +
+                  '<br>' +
+                  '<div id=\'map\' ' +
+                  'style=\'width: ' + w + 'px; height: ' + h + 'px;\'>' +
+                  '</div></div>';
+  var map = document.getElementById('map');
+  appendTreemap(map, kTree);
+}
+
+function zoomInTreemap() {
+  window.treemap_width = Math.round(window.treemap_width * 1.25);
+  window.treemap_height = Math.round(window.treemap_height * 1.25);
+  show_report_treemap();
+}
+
+function zoomOutTreemap() {
+  window.treemap_width = Math.round(window.treemap_width / 1.25);
+  window.treemap_height = Math.round(window.treemap_height / 1.25);
+  show_report_treemap();
+}
+
+function resizeTreemap() {
+  window.treemap_width = document.getElementById('treemap_width').value;
+  window.treemap_height = document.getElementById('treemap_height').value;
+  show_report_treemap();
+}
+
+function show_report_largest_symbols() {
+  console.log('displaying largest-symbols report')
+  var div = document.getElementById('report');
+  div.innerHTML = '<div><table id=\'list\' border=1><tr>' +
+                  '<th>Rank</th><th>Size</th><th>Type</th><th>Source</th>' +
+                  '</tr></table>';
+  var list = document.getElementById('list');
+  for (var i = 0; i < largestSymbols.length; i++) {
+    var record = largestSymbols[i];
+    var link;
+    if (record.location.indexOf('out') == 0) {
+      link = record.location;
+    } else {
+      link = '<a href="https://code.google.com/p/chromium/codesearch#chromium/src/'
+             + record.location + '">' + escape(record.location) + '</a>';
+    }
+    list.innerHTML += '<tr>'
+      + '<td>' + (i+1) + '</td>'
+      + '<td>' + escape(record.size) + '</td>'
+      + '<td style=\'white-space: nowrap;\'>' + escape(record.type) + '</td>'
+      + '<td>' + link + ':<br>'
+      + escape(record.symbol) + '</td>'
+      + '</tr>';
+  }
+}
+
+function show_report_largest_sources() {
+  console.log('displaying largest-sources report')
+  var div = document.getElementById('report');
+  div.innerHTML = '<div><table id=\'list\' border=1><tr>' +
+                  '<th>Rank</th><th>Size</th><th>Symbol Count</th><th>Source</th>' +
+                  '</tr></table>';
+  var list = document.getElementById('list');
+  for (var i = 0; i < largestSources.length; i++) {
+    var record = largestSources[i];
+    var link;
+    if (record.location.indexOf('out') == 0) {
+      link = record.location;
+    } else {
+      link = '<a href="https://code.google.com/p/chromium/codesearch#chromium/src/'
+             + record.location + '">' + escape(record.location) + '</a>';
+    }
+
+    list.innerHTML += '<tr>'
+      + '<td>' + (i+1) + '</td>'
+      + '<td>' + escape(record.size) + '</td>'
+      + '<td>' + escape(record.symbol_count) + '</td>'
+      + '<td>' + link + '</td>'
+      + '</tr>';
+  }
+}
+
+function show_report_largest_vtables() {
+  console.log('displaying largest-vtables report')
+  var div = document.getElementById('report');
+  div.innerHTML = '<div><table id=\'list\' border=1><tr>' +
+                  '<th>Rank</th><th>Size</th><th>Symbol</th><th>Source</th>' +
+                  '</tr></table>';
+  var list = document.getElementById('list');
+  for (var i = 0; i < largestVTables.length; i++) {
+    var record = largestVTables[i];
+    var link;
+    if (record.location.indexOf('out') == 0) {
+      link = record.location;
+    } else {
+      link = '<a href="https://code.google.com/p/chromium/codesearch#chromium/src/'
+             + record.location + '">' + escape(record.location) + '</a>';
+    }
+
+    list.innerHTML += '<tr>'
+      + '<td>' + (i+1) + '</td>'
+      + '<td>' + escape(record.size) + '</td>'
+      + '<td>' + escape(record.symbol) + '</td>'
+      + '<td>' + link + '</td>'
+      + '</tr>';
+  }
+}
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/tools/binary_size/run_binary_size_analysis.py b/tools/binary_size/run_binary_size_analysis.py
index 37c8254..2a75faf 100755
--- a/tools/binary_size/run_binary_size_analysis.py
+++ b/tools/binary_size/run_binary_size_analysis.py
@@ -23,6 +23,7 @@
 import tempfile
 
 
+# TODO(andrewhayden): Only used for legacy reports. Delete.
 def FormatBytes(bytes):
   """Pretty-print a number of bytes."""
   if bytes > 1e6:
@@ -34,6 +35,7 @@
   return str(bytes)
 
 
+# TODO(andrewhayden): Only used for legacy reports. Delete.
 def SymbolTypeToHuman(type):
   """Convert a symbol type as printed by nm into a human-readable name."""
   return {'b': 'bss',
@@ -70,10 +72,7 @@
     if match:
       size, type, sym = match.groups()[0:3]
       size = int(size, 16)
-      type = type.lower()
-      if type == 'v':
-        type = 'w'  # just call them all weak
-      if type == 'b':
+      if type.lower() == 'b':
         continue  # skip all BSS for now
       path = match.group(4)
       yield sym, type, size, path
@@ -93,6 +92,66 @@
     print >>sys.stderr, 'unparsed:', repr(line)
 
 
+def _MkChild(node, name):
+  child = None
+  for test in node['children']:
+    if test['n'] == name:
+      child = test
+      break
+  if not child:
+    child = {'n': name, 'children': []}
+    node['children'].append(child)
+  return child
+
+
+def MakeCompactTree(symbols):
+  result = {'n': '/', 'children': [], 'k': 'p', 'maxDepth': 0}
+  for symbol_name, symbol_type, symbol_size, file_path in symbols:
+
+    if 'vtable for ' in symbol_name:
+      symbol_type = '@' # hack to categorize these separately
+    # Take path like '/foo/bar/baz', convert to ['foo', 'bar', 'baz']
+    if file_path:
+      file_path = os.path.normpath(file_path)
+    else:
+      file_path = '(No Path)'
+
+    if file_path.startswith('/'):
+      file_path = file_path[1:]
+    path_parts = file_path.split('/')
+
+    # Find pre-existing node in tree, or update if it already exists
+    node = result
+    depth = 0
+    while len(path_parts) > 0:
+      path_part = path_parts.pop(0)
+      if len(path_part) == 0:
+        continue
+      depth += 1
+      node = _MkChild(node, path_part);
+      node['k'] = 'p' # p for path
+
+    # 'node' is now the file node. Find the symbol-type bucket.
+    node['lastPathElement'] = True
+    node = _MkChild(node, symbol_type)
+    node['t'] = symbol_type
+    node['k'] = 'b' # b for bucket
+    depth += 1
+
+    # 'node' is now the symbol-type bucket. Make the child entry.
+    node = _MkChild(node, symbol_name)
+    if 'children' in node: # Only possible if we're adding duplicate entries!!!
+      del node['children']
+    node['value'] = symbol_size
+    node['t'] = symbol_type
+    node['k'] = 's' # s for symbol
+    depth += 1
+    result['maxDepth'] = max(result['maxDepth'], depth);
+
+  return result
+
+
+# TODO(andrewhayden): Only used for legacy reports. Delete.
 def TreeifySymbols(symbols):
   """Convert symbols into a path-based tree, calculating size information
   along the way.
@@ -188,6 +247,7 @@
   return dirs
 
 
+# TODO(andrewhayden): Only used for legacy reports. Delete.
 def JsonifyTree(tree, name):
   """Convert TreeifySymbols output to a JSON treemap.
 
@@ -224,7 +284,16 @@
           'data': { '$area': tree['size'] },
           'children': children }
 
+def DumpCompactTree(symbols, outfile):
+  out = open(outfile, 'w')
+  try:
+    out.write('var tree_data = ' + json.dumps(MakeCompactTree(symbols)))
+  finally:
+    out.flush()
+    out.close()
 
+
+# TODO(andrewhayden): Only used for legacy reports. Delete.
 def DumpTreemap(symbols, outfile):
   dirs = TreeifySymbols(symbols)
   out = open(outfile, 'w')
@@ -235,6 +304,7 @@
     out.close()
 
 
+# TODO(andrewhayden): Only used for legacy reports. Delete.
 def DumpLargestSymbols(symbols, outfile, n):
   # a list of (sym, type, size, path); sort by size.
   symbols = sorted(symbols, key=lambda x: -x[2])
@@ -278,6 +348,7 @@
   return sources
 
 
+# TODO(andrewhayden): Only used for legacy reports. Delete.
 def DumpLargestSources(symbols, outfile, n):
   map = MakeSourceMap(symbols)
   sources = sorted(map.values(), key=lambda x: -x['size'])
@@ -300,6 +371,7 @@
     out.close()
 
 
+# TODO(andrewhayden): Only used for legacy reports. Delete.
 def DumpLargestVTables(symbols, outfile, n):
   vtables = []
   for symbol, type, size, path in symbols:
@@ -325,6 +397,7 @@
     out.close()
 
 
+# TODO(andrewhayden): Switch to Primiano's python-based version.
 def RunParallelAddress2Line(outfile, library, arch, jobs, verbose):
   """Run a parallel addr2line processing engine to dump and resolve symbols."""
   out_dir = os.getenv('CHROMIUM_OUT_DIR', 'out')
@@ -342,15 +415,15 @@
     cmd.append('--verbose')
   prefix = os.path.join('third_party', 'android_tools', 'ndk', 'toolchains')
   if arch == 'android-arm':
-    prefix = os.path.join(prefix, 'arm-linux-androideabi-4.7', 'prebuilt',
+    prefix = os.path.join(prefix, 'arm-linux-androideabi-4.8', 'prebuilt',
                           'linux-x86_64', 'bin', 'arm-linux-androideabi-')
     cmd.extend(['--nm', prefix + 'nm', '--addr2line', prefix + 'addr2line'])
   elif arch == 'android-mips':
-    prefix = os.path.join(prefix, 'mipsel-linux-android-4.7', 'prebuilt',
+    prefix = os.path.join(prefix, 'mipsel-linux-android-4.8', 'prebuilt',
                           'linux-x86_64', 'bin', 'mipsel-linux-android-')
     cmd.extend(['--nm', prefix + 'nm', '--addr2line', prefix + 'addr2line'])
   elif arch == 'android-x86':
-    prefix = os.path.join(prefix, 'x86-4.7', 'prebuilt',
+    prefix = os.path.join(prefix, 'x86-4.8', 'prebuilt',
                           'linux-x86_64', 'bin', 'i686-linux-android-')
     cmd.extend(['--nm', prefix + 'nm', '--addr2line', prefix + 'addr2line'])
   # else, use whatever is in PATH (don't pass --nm or --addr2line)
@@ -441,6 +514,8 @@
                     'mapped to source locations. By default, a tempfile is '
                     'used and is deleted when the program terminates.'
                     'This argument is only valid when using --library.')
+  parser.add_option('--legacy', action='store_true',
+                    help='emit legacy binary size report instead of modern')
   opts, args = parser.parse_args()
 
   if ((not opts.library) and (not opts.nm_in)) or (opts.library and opts.nm_in):
@@ -464,27 +539,40 @@
   if not os.path.exists(opts.destdir):
     os.makedirs(opts.destdir, 0755)
 
-  DumpTreemap(symbols, os.path.join(opts.destdir, 'treemap-dump.js'))
-  DumpLargestSymbols(symbols,
-                       os.path.join(opts.destdir, 'largest-symbols.js'), 100)
-  DumpLargestSources(symbols,
-                       os.path.join(opts.destdir, 'largest-sources.js'), 100)
-  DumpLargestVTables(symbols,
-                       os.path.join(opts.destdir, 'largest-vtables.js'), 100)
 
-  # TODO(andrewhayden): Switch to D3 for greater flexibility
-  treemap_out = os.path.join(opts.destdir, 'webtreemap')
-  if not os.path.exists(treemap_out):
-    os.makedirs(treemap_out, 0755)
-  treemap_src = os.path.join('third_party', 'webtreemap', 'src')
-  shutil.copy(os.path.join(treemap_src, 'COPYING'), treemap_out)
-  shutil.copy(os.path.join(treemap_src, 'webtreemap.js'), treemap_out)
-  shutil.copy(os.path.join(treemap_src, 'webtreemap.css'), treemap_out)
-  shutil.copy(os.path.join('tools', 'binary_size', 'template', 'index.html'),
-              opts.destdir)
+  if opts.legacy: # legacy report
+    DumpTreemap(symbols, os.path.join(opts.destdir, 'treemap-dump.js'))
+    DumpLargestSymbols(symbols,
+                         os.path.join(opts.destdir, 'largest-symbols.js'), 100)
+    DumpLargestSources(symbols,
+                         os.path.join(opts.destdir, 'largest-sources.js'), 100)
+    DumpLargestVTables(symbols,
+                         os.path.join(opts.destdir, 'largest-vtables.js'), 100)
+    treemap_out = os.path.join(opts.destdir, 'webtreemap')
+    if not os.path.exists(treemap_out):
+      os.makedirs(treemap_out, 0755)
+    treemap_src = os.path.join('third_party', 'webtreemap', 'src')
+    shutil.copy(os.path.join(treemap_src, 'COPYING'), treemap_out)
+    shutil.copy(os.path.join(treemap_src, 'webtreemap.js'), treemap_out)
+    shutil.copy(os.path.join(treemap_src, 'webtreemap.css'), treemap_out)
+    shutil.copy(os.path.join('tools', 'binary_size', 'legacy_template',
+                             'index.html'), opts.destdir)
+  else: # modern report
+    DumpCompactTree(symbols, os.path.join(opts.destdir, 'data.js'))
+    d3_out = os.path.join(opts.destdir, 'd3')
+    if not os.path.exists(d3_out):
+      os.makedirs(d3_out, 0755)
+    d3_src = os.path.join('third_party', 'd3', 'src')
+    template_src = os.path.join('tools', 'binary_size',
+                                'template')
+    shutil.copy(os.path.join(d3_src, 'LICENSE'), d3_out)
+    shutil.copy(os.path.join(d3_src, 'd3.js'), d3_out)
+    shutil.copy(os.path.join(template_src, 'index.html'), opts.destdir)
+    shutil.copy(os.path.join(template_src, 'D3SymbolTreeMap.js'), opts.destdir)
+
   if opts.verbose:
     print 'Report saved to ' + opts.destdir + '/index.html'
 
 
 if __name__ == '__main__':
-  sys.exit(main())
\ No newline at end of file
+  sys.exit(main())
diff --git a/tools/binary_size/template/D3SymbolTreeMap.js b/tools/binary_size/template/D3SymbolTreeMap.js
new file mode 100644
index 0000000..4bbe82f
--- /dev/null
+++ b/tools/binary_size/template/D3SymbolTreeMap.js
@@ -0,0 +1,938 @@
+// 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.
+
+// TODO:
+// 1. Visibility functions: base on boxPadding.t, not 15
+// 2. Track a maxDisplayDepth that is user-settable:
+//    maxDepth == currentRoot.depth + maxDisplayDepth
+function D3SymbolTreeMap(mapWidth, mapHeight, levelsToShow) {
+  this._mapContainer = undefined;
+  this._mapWidth = mapWidth;
+  this._mapHeight = mapHeight;
+  this.boxPadding = {'l': 5, 'r': 5, 't': 20, 'b': 5};
+  this.infobox = undefined;
+  this._maskContainer = undefined;
+  this._highlightContainer = undefined;
+  // Transition in this order:
+  // 1. Exiting items go away.
+  // 2. Updated items move.
+  // 3. New items enter.
+  this._exitDuration=500;
+  this._updateDuration=500;
+  this._enterDuration=500;
+  this._firstTransition=true;
+  this._layout = undefined;
+  this._currentRoot = undefined;
+  this._currentNodes = undefined;
+  this._treeData = undefined;
+  this._maxLevelsToShow = levelsToShow;
+  this._currentMaxDepth = this._maxLevelsToShow;
+}
+
+/**
+ * Make a number pretty, with comma separators.
+ */
+D3SymbolTreeMap._pretty = function(num) {
+  var asString = String(num);
+  var result = '';
+  var counter = 0;
+  for (var x = asString.length - 1; x >= 0; x--) {
+    counter++;
+    if (counter === 4) {
+      result = ',' + result;
+      counter = 1;
+    }
+    result = asString.charAt(x) + result;
+  }
+  return result;
+}
+
+/**
+ * Express a number in terms of KiB, MiB, GiB, etc.
+ * Note that these are powers of 2, not of 10.
+ */
+D3SymbolTreeMap._byteify = function(num) {
+  var suffix;
+  if (num >= 1024) {
+    if (num >= 1024 * 1024 * 1024) {
+      suffix = 'GiB';
+      num = num / (1024 * 1024 * 1024);
+    } else if (num >= 1024 * 1024) {
+      suffix = 'MiB';
+      num = num / (1024 * 1024);
+    } else if (num >= 1024) {
+      suffix = 'KiB'
+      num = num / 1024;
+    }
+    return num.toFixed(2) + ' ' + suffix;
+  }
+  return num + ' B';
+}
+
+D3SymbolTreeMap._NM_SYMBOL_TYPE_DESCRIPTIONS = {
+  // Definitions concisely derived from the nm 'man' page
+  'A': 'Global absolute (A)',
+  'B': 'Global uninitialized data (B)',
+  'b': 'Local uninitialized data (b)',
+  'C': 'Global uninitialized common (C)',
+  'D': 'Global initialized data (D)',
+  'd': 'Local initialized data (d)',
+  'G': 'Global small initialized data (G)',
+  'g': 'Local small initialized data (g)',
+  'i': 'Indirect function (i)',
+  'N': 'Debugging (N)',
+  'p': 'Stack unwind (p)',
+  'R': 'Global read-only data (R)',
+  'r': 'Local read-only data (r)',
+  'S': 'Global small uninitialized data (S)',
+  's': 'Local small uninitialized data (s)',
+  'T': 'Global code (T)',
+  't': 'Local code (t)',
+  'U': 'Undefined (U)',
+  'u': 'Unique (u)',
+  'V': 'Global weak object (V)',
+  'v': 'Local weak object (v)',
+  'W': 'Global weak symbol (W)',
+  'w': 'Local weak symbol (w)',
+  '@': 'Vtable entry (@)', // non-standard, hack.
+  '-': 'STABS debugging (-)',
+  '?': 'Unrecognized (?)',
+};
+D3SymbolTreeMap._NM_SYMBOL_TYPES = '';
+for (var symbol_type in D3SymbolTreeMap._NM_SYMBOL_TYPE_DESCRIPTIONS) {
+  D3SymbolTreeMap._NM_SYMBOL_TYPES += symbol_type;
+}
+
+/**
+ * Given a symbol type code, look up and return a human-readable description
+ * of that symbol type. If the symbol type does not match one of the known
+ * types, the unrecognized description (corresponding to symbol type '?') is
+ * returned instead of null or undefined.
+ */
+D3SymbolTreeMap._getSymbolDescription = function(type) {
+  var result = D3SymbolTreeMap._NM_SYMBOL_TYPE_DESCRIPTIONS[type];
+  if (result === undefined) {
+    result = D3SymbolTreeMap._NM_SYMBOL_TYPE_DESCRIPTIONS['?'];
+  }
+  return result;
+}
+
+// Qualitative 12-value pastel Brewer palette.
+D3SymbolTreeMap._colorArray = [
+  'rgb(141,211,199)',
+  'rgb(255,255,179)',
+  'rgb(190,186,218)',
+  'rgb(251,128,114)',
+  'rgb(128,177,211)',
+  'rgb(253,180,98)',
+  'rgb(179,222,105)',
+  'rgb(252,205,229)',
+  'rgb(217,217,217)',
+  'rgb(188,128,189)',
+  'rgb(204,235,197)',
+  'rgb(255,237,111)'];
+
+D3SymbolTreeMap._initColorMap = function() {
+  var map = {};
+  var numColors = D3SymbolTreeMap._colorArray.length;
+  var count = 0;
+  for (var key in D3SymbolTreeMap._NM_SYMBOL_TYPE_DESCRIPTIONS) {
+    var index = count++ % numColors;
+    map[key] = d3.rgb(D3SymbolTreeMap._colorArray[index]);
+  }
+  D3SymbolTreeMap._colorMap = map;
+}
+D3SymbolTreeMap._initColorMap();
+
+D3SymbolTreeMap.getColorForType = function(type) {
+  var result = D3SymbolTreeMap._colorMap[type];
+  if (result === undefined) return d3.rgb('rgb(255,255,255)');
+  return result;
+}
+
+D3SymbolTreeMap.prototype.init = function() {
+  this.infobox = this._createInfoBox();
+  this._mapContainer = d3.select('body').append('div')
+      .style('position', 'relative')
+      .style('width', this._mapWidth)
+      .style('height', this._mapHeight)
+      .style('padding', 0)
+      .style('margin', 0)
+      .style('box-shadow', '5px 5px 5px #888');
+  this._layout = this._createTreeMapLayout();
+  this._setData(tree_data); // TODO: Don't use global 'tree_data'
+}
+
+/**
+ * Sets the data displayed by the treemap and layint out the map.
+ */
+D3SymbolTreeMap.prototype._setData = function(data) {
+  this._treeData = data;
+  console.time('_crunchStats');
+  this._crunchStats(data);
+  console.timeEnd('_crunchStats');
+  this._currentRoot = this._treeData;
+  this._currentNodes = this._layout.nodes(this._currentRoot);
+  this._currentMaxDepth = this._maxLevelsToShow;
+  this._doLayout();
+}
+
+/**
+ * Recursively traverses the entire tree starting from the specified node,
+ * computing statistics and recording metadata as it goes. Call this method
+ * only once per imported tree.
+ */
+D3SymbolTreeMap.prototype._crunchStats = function(node) {
+  var stack = [];
+  stack.idCounter = 0;
+  this._crunchStatsHelper(stack, node);
+}
+
+/**
+ * Invoke the specified visitor function on all data elements currently shown
+ * in the treemap including any and all of their children, starting at the
+ * currently-displayed root and descening recursively. The function will be
+ * passed the datum element representing each node. No traversal guarantees
+ * are made.
+ */
+D3SymbolTreeMap.prototype.visitFromDisplayedRoot = function(visitor) {
+  this._visit(this._currentRoot, visitor);
+}
+
+/**
+ * Helper function for visit functions.
+ */
+D3SymbolTreeMap.prototype._visit = function(datum, visitor) {
+  visitor.call(this, datum);
+  if (datum.children) for (var i = 0; i < datum.children.length; i++) {
+    this._visit(datum.children[i], visitor);
+  }
+}
+
+D3SymbolTreeMap.prototype._crunchStatsHelper = function(stack, node) {
+  // Only overwrite the node ID if it isn't already set.
+  // This allows stats to be crunched multiple times on subsets of data
+  // without breaking the data-to-ID bindings. New nodes get new IDs.
+  if (node.id === undefined) node.id = stack.idCounter++;
+  if (node.children === undefined) {
+    // Leaf node (symbol); accumulate stats.
+    for (var i = 0; i < stack.length; i++) {
+      var ancestor = stack[i];
+      if (!ancestor.symbol_stats) ancestor.symbol_stats = {};
+      if (ancestor.symbol_stats[node.t] === undefined) {
+        // New symbol type we haven't seen before, just record.
+        ancestor.symbol_stats[node.t] = {'count': 1,
+                                         'size': node.value};
+      } else {
+        // Existing symbol type, increment.
+        ancestor.symbol_stats[node.t].count++;
+        ancestor.symbol_stats[node.t].size += node.value;
+      }
+    }
+  } else for (var i = 0; i < node.children.length; i++) {
+    stack.push(node);
+    this._crunchStatsHelper(stack, node.children[i]);
+    stack.pop();
+  }
+}
+
+D3SymbolTreeMap.prototype._createTreeMapLayout = function() {
+  var result = d3.layout.treemap()
+      .padding([this.boxPadding.t, this.boxPadding.r,
+                this.boxPadding.b, this.boxPadding.l])
+      .size([this._mapWidth, this._mapHeight]);
+  return result;
+}
+
+D3SymbolTreeMap.prototype.resize = function(width, height) {
+  this._mapWidth = width;
+  this._mapHeight = height;
+  this._mapContainer.style('width', width).style('height', height);
+  this._layout.size([this._mapWidth, this._mapHeight]);
+  this._currentNodes = this._layout.nodes(this._currentRoot);
+  this._doLayout();
+}
+
+D3SymbolTreeMap.prototype._zoomDatum = function(datum) {
+  if (this._currentRoot === datum) return; // already here
+  this._hideHighlight(datum);
+  this._hideInfoBox(datum);
+  this._currentRoot = datum;
+  this._currentNodes = this._layout.nodes(this._currentRoot);
+  this._currentMaxDepth = this._currentRoot.depth + this._maxLevelsToShow;
+  console.log('zooming into datum ' + this._currentRoot.n);
+  this._doLayout();
+}
+
+D3SymbolTreeMap.prototype.setMaxLevels = function(levelsToShow) {
+  this._maxLevelsToShow = levelsToShow;
+  this._currentNodes = this._layout.nodes(this._currentRoot);
+  this._currentMaxDepth = this._currentRoot.depth + this._maxLevelsToShow;
+  console.log('setting max levels to show: ' + this._maxLevelsToShow);
+  this._doLayout();
+}
+
+/**
+ * Clone the specified tree, returning an independent copy of the data.
+ * Only the original attributes expected to exist prior to invoking
+ * _crunchStatsHelper are retained, with the exception of the 'id' attribute
+ * (which must be retained for proper transitions).
+ * If the optional filter parameter is provided, it will be called with 'this'
+ * set to this treemap instance and passed the 'datum' object as an argument.
+ * When specified, the copy will retain only the data for which the filter
+ * function returns true.
+ */
+D3SymbolTreeMap.prototype._clone = function(datum, filter) {
+  var trackingStats = false;
+  if (this.__cloneState === undefined) {
+    console.time('_clone');
+    trackingStats = true;
+    this.__cloneState = {'accepted': 0, 'rejected': 0,
+                         'forced': 0, 'pruned': 0};
+  }
+
+  // Must go depth-first. All parents of children that are accepted by the
+  // filter must be preserved!
+  var copy = {'n': datum.n, 'k': datum.k};
+  var childAccepted = false;
+  if (datum.children !== undefined) {
+    for (var i = 0; i < datum.children.length; i++) {
+      var copiedChild = this._clone(datum.children[i], filter);
+      if (copiedChild !== undefined) {
+        childAccepted = true; // parent must also be accepted.
+        if (copy.children === undefined) copy.children = [];
+        copy.children.push(copiedChild);
+      }
+    }
+  }
+
+  // Ignore nodes that don't match the filter, when present.
+  var accept = false;
+  if (childAccepted) {
+    // Parent of an accepted child must also be accepted.
+    this.__cloneState.forced++;
+    accept = true;
+  } else if (filter !== undefined && filter.call(this, datum) !== true) {
+    this.__cloneState.rejected++;
+  } else if (datum.children === undefined) {
+    // Accept leaf nodes that passed the filter
+    this.__cloneState.accepted++;
+    accept = true;
+  } else {
+    // Non-leaf node. If no children are accepted, prune it.
+    this.__cloneState.pruned++;
+  }
+
+  if (accept) {
+    if (datum.id !== undefined) copy.id = datum.id;
+    if (datum.lastPathElement !== undefined) {
+      copy.lastPathElement = datum.lastPathElement;
+    }
+    if (datum.t !== undefined) copy.t = datum.t;
+    if (datum.value !== undefined && datum.children === undefined) {
+      copy.value = datum.value;
+    }
+  } else {
+    // Discard the copy we were going to return
+    copy = undefined;
+  }
+
+  if (trackingStats === true) {
+    // We are the fist call in the recursive chain.
+    console.timeEnd('_clone');
+    var totalAccepted = this.__cloneState.accepted +
+                        this.__cloneState.forced;
+    console.log(
+        totalAccepted + ' nodes retained (' +
+        this.__cloneState.forced + ' forced by accepted children, ' +
+        this.__cloneState.accepted + ' accepted on their own merits), ' +
+        this.__cloneState.rejected + ' nodes (and their children) ' +
+                                     'filtered out,' +
+        this.__cloneState.pruned + ' nodes pruned because because no ' +
+                                   'children remained.');
+    delete this.__cloneState;
+  }
+  return copy;
+}
+
+D3SymbolTreeMap.prototype.filter = function(filter) {
+  // Ensure we have a copy of the original root.
+  if (this._backupTree === undefined) this._backupTree = this._treeData;
+  this._mapContainer.selectAll('div').remove();
+  this._setData(this._clone(this._backupTree, filter));
+}
+
+D3SymbolTreeMap.prototype._doLayout = function() {
+  console.time('_doLayout');
+  this._handleInodes();
+  this._handleLeaves();
+  this._firstTransition = false;
+  console.timeEnd('_doLayout');
+}
+
+D3SymbolTreeMap.prototype._highlightElement = function(datum, selection) {
+  this._showHighlight(datum, selection);
+}
+
+D3SymbolTreeMap.prototype._unhighlightElement = function(datum, selection) {
+  this._hideHighlight(datum, selection);
+}
+
+D3SymbolTreeMap.prototype._handleInodes = function() {
+  console.time('_handleInodes');
+  var thisTreeMap = this;
+  var inodes = this._currentNodes.filter(function(datum){
+    return (datum.depth <= thisTreeMap._currentMaxDepth) &&
+            datum.children !== undefined;
+  });
+  var cellsEnter = this._mapContainer.selectAll('div.inode')
+      .data(inodes, function(datum) { return datum.id; })
+      .enter()
+      .append('div').attr('class', 'inode').attr('id', function(datum){
+          return 'node-' + datum.id;});
+
+
+  // Define enter/update/exit for inodes
+  cellsEnter
+      .append('div')
+      .attr('class', 'rect inode_rect_entering')
+      .style('z-index', function(datum) { return datum.id * 2; })
+      .style('position', 'absolute')
+      .style('left', function(datum) { return datum.x; })
+      .style('top', function(datum){ return datum.y; })
+      .style('width', function(datum){ return datum.dx; })
+      .style('height', function(datum){ return datum.dy; })
+      .style('opacity', '0')
+      .style('border', '1px solid black')
+      .style('background-image', function(datum) {
+        return thisTreeMap._makeSymbolBucketBackgroundImage.call(
+               thisTreeMap, datum);
+      })
+      .style('background-color', function(datum) {
+        if (datum.t === undefined) return 'rgb(220,220,220)';
+        return D3SymbolTreeMap.getColorForType(datum.t).toString();
+      })
+      .on('mouseover', function(datum){
+        thisTreeMap._highlightElement.call(
+            thisTreeMap, datum, d3.select(this));
+        thisTreeMap._showInfoBox.call(thisTreeMap, datum);
+      })
+      .on('mouseout', function(datum){
+        thisTreeMap._unhighlightElement.call(
+            thisTreeMap, datum, d3.select(this));
+        thisTreeMap._hideInfoBox.call(thisTreeMap, datum);
+      })
+      .on('mousemove', function(){
+          thisTreeMap._moveInfoBox.call(thisTreeMap, event);
+      })
+      .on('dblclick', function(datum){
+        if (datum !== thisTreeMap._currentRoot) {
+          // Zoom into the selection
+          thisTreeMap._zoomDatum(datum);
+        } else if (datum.parent) {
+          console.log('event.shiftKey=' + event.shiftKey);
+          if (event.shiftKey === true) {
+            // Back to root
+            thisTreeMap._zoomDatum(thisTreeMap._treeData);
+          } else {
+            // Zoom out of the selection
+            thisTreeMap._zoomDatum(datum.parent);
+          }
+        }
+      });
+  cellsEnter
+      .append('div')
+      .attr('class', 'label inode_label_entering')
+      .style('z-index', function(datum) { return (datum.id * 2) + 1; })
+      .style('position', 'absolute')
+      .style('left', function(datum){ return datum.x; })
+      .style('top', function(datum){ return datum.y; })
+      .style('width', function(datum) { return datum.dx; })
+      .style('height', function(datum) { return thisTreeMap.boxPadding.t; })
+      .style('opacity', '0')
+      .style('pointer-events', 'none')
+      .style('-webkit-user-select', 'none')
+      .style('overflow', 'hidden') // required for ellipsis
+      .style('white-space', 'nowrap') // required for ellipsis
+      .style('text-overflow', 'ellipsis')
+      .style('text-align', 'center')
+      .style('vertical-align', 'top')
+      .style('visibility', function(datum) {
+        return (datum.dx < 15 || datum.dy < 15) ? 'hidden' : 'visible';
+      })
+      .text(function(datum) {
+        var sizeish = ' [' + D3SymbolTreeMap._byteify(datum.value) + ']'
+        var text;
+        if (datum.k === 'b') { // bucket
+          if (datum === thisTreeMap._currentRoot) {
+            text = thisTreeMap.pathFor(datum) + ': '
+                + D3SymbolTreeMap._getSymbolDescription(datum.t)
+          } else {
+            text = D3SymbolTreeMap._getSymbolDescription(datum.t);
+          }
+        } else if (datum === thisTreeMap._currentRoot) {
+          // The top-most level should always show the complete path
+          text = thisTreeMap.pathFor(datum);
+        } else {
+          // Anything that isn't a bucket or a leaf (symbol) or the
+          // current root should just show its name.
+          text = datum.n;
+        }
+        return text + sizeish;
+      }
+  );
+
+  // Complicated transition logic:
+  // For nodes that are entering, we want to fade them in in-place AFTER
+  // any adjusting nodes have resized and moved around. That way, new nodes
+  // seamlessly appear in the right spot after their containers have resized
+  // and moved around.
+  // To do this we do some trickery:
+  // 1. Define a '_entering' class on the entering elements
+  // 2. Use this to select only the entering elements and apply the opacity
+  //    transition.
+  // 3. Use the same transition to drop the '_entering' suffix, so that they
+  //    will correctly update in later zoom/resize/whatever operations.
+  // 4. The update transition is achieved by selecting the elements without
+  //    the '_entering_' suffix and applying movement and resizing transition
+  //    effects.
+  this._mapContainer.selectAll('div.inode_rect_entering').transition()
+      .duration(thisTreeMap._enterDuration).delay(
+          this._firstTransition ? 0 : thisTreeMap._exitDuration +
+              thisTreeMap._updateDuration)
+      .attr('class', 'rect inode_rect')
+      .style('opacity', '1')
+  this._mapContainer.selectAll('div.inode_label_entering').transition()
+      .duration(thisTreeMap._enterDuration).delay(
+          this._firstTransition ? 0 : thisTreeMap._exitDuration +
+              thisTreeMap._updateDuration)
+      .attr('class', 'label inode_label')
+      .style('opacity', '1')
+  this._mapContainer.selectAll('div.inode_rect').transition()
+      .duration(thisTreeMap._updateDuration).delay(thisTreeMap._exitDuration)
+      .style('opacity', '1')
+      .style('background-image', function(datum) {
+        return thisTreeMap._makeSymbolBucketBackgroundImage.call(
+            thisTreeMap, datum);
+      })
+      .style('left', function(datum) { return datum.x; })
+      .style('top', function(datum){ return datum.y; })
+      .style('width', function(datum){ return datum.dx; })
+      .style('height', function(datum){ return datum.dy; });
+  this._mapContainer.selectAll('div.inode_label').transition()
+      .duration(thisTreeMap._updateDuration).delay(thisTreeMap._exitDuration)
+      .style('opacity', '1')
+      .style('visibility', function(datum) {
+        return (datum.dx < 15 || datum.dy < 15) ? 'hidden' : 'visible';
+      })
+      .style('left', function(datum){ return datum.x; })
+      .style('top', function(datum){ return datum.y; })
+      .style('width', function(datum) { return datum.dx; })
+      .style('height', function(datum) { return thisTreeMap.boxPadding.t; })
+      .text(function(datum) {
+        var sizeish = ' [' + D3SymbolTreeMap._byteify(datum.value) + ']'
+        var text;
+        if (datum.k === 'b') {
+          if (datum === thisTreeMap._currentRoot) {
+            text = thisTreeMap.pathFor(datum) + ': ' +
+                D3SymbolTreeMap._getSymbolDescription(datum.t)
+          } else {
+            text = D3SymbolTreeMap._getSymbolDescription(datum.t);
+          }
+        } else if (datum === thisTreeMap._currentRoot) {
+          // The top-most level should always show the complete path
+          text = thisTreeMap.pathFor(datum);
+        } else {
+          // Anything that isn't a bucket or a leaf (symbol) or the
+          // current root should just show its name.
+          text = datum.n;
+        }
+        return text + sizeish;
+      });
+  var exit = this._mapContainer.selectAll('div.inode')
+      .data(inodes, function(datum) { return 'inode-' + datum.id; })
+      .exit();
+  exit.selectAll('div.inode_rect').transition().duration(
+      thisTreeMap._exitDuration).style('opacity', 0);
+  exit.selectAll('div.inode_label').transition().duration(
+      thisTreeMap._exitDuration).style('opacity', 0);
+  exit.transition().delay(thisTreeMap._exitDuration + 1).remove();
+
+  console.log(inodes.length + ' inodes layed out.');
+  console.timeEnd('_handleInodes');
+}
+
+D3SymbolTreeMap.prototype._handleLeaves = function() {
+  console.time('_handleLeaves');
+  var color_fn = d3.scale.category10();
+  var thisTreeMap = this;
+  var leaves = this._currentNodes.filter(function(datum){
+    return (datum.depth <= thisTreeMap._currentMaxDepth) &&
+        datum.children === undefined; });
+  var cellsEnter = this._mapContainer.selectAll('div.leaf')
+      .data(leaves, function(datum) { return datum.id; })
+      .enter()
+      .append('div').attr('class', 'leaf').attr('id', function(datum){
+        return 'node-' + datum.id;
+      });
+
+  // Define enter/update/exit for leaves
+  cellsEnter
+      .append('div')
+      .attr('class', 'rect leaf_rect_entering')
+      .style('z-index', function(datum) { return datum.id * 2; })
+      .style('position', 'absolute')
+      .style('left', function(datum){ return datum.x; })
+      .style('top', function(datum){ return datum.y; })
+      .style('width', function(datum){ return datum.dx; })
+      .style('height', function(datum){ return datum.dy; })
+      .style('opacity', '0')
+      .style('background-color', function(datum) {
+        if (datum.t === undefined) return 'rgb(220,220,220)';
+        return D3SymbolTreeMap.getColorForType(datum.t)
+            .darker(0.3).toString();
+      })
+      .style('border', '1px solid black')
+      .on('mouseover', function(datum){
+        thisTreeMap._highlightElement.call(
+            thisTreeMap, datum, d3.select(this));
+        thisTreeMap._showInfoBox.call(thisTreeMap, datum);
+      })
+      .on('mouseout', function(datum){
+        thisTreeMap._unhighlightElement.call(
+            thisTreeMap, datum, d3.select(this));
+        thisTreeMap._hideInfoBox.call(thisTreeMap, datum);
+      })
+      .on('mousemove', function(){ thisTreeMap._moveInfoBox.call(
+        thisTreeMap, event);
+      });
+  cellsEnter
+      .append('div')
+      .attr('class', 'label leaf_label_entering')
+      .style('z-index', function(datum) { return (datum.id * 2) + 1; })
+      .style('position', 'absolute')
+      .style('left', function(datum){ return datum.x; })
+      .style('top', function(datum){ return datum.y; })
+      .style('width', function(datum) { return datum.dx; })
+      .style('height', function(datum) { return datum.dy; })
+      .style('opacity', '0')
+      .style('pointer-events', 'none')
+      .style('-webkit-user-select', 'none')
+      .style('overflow', 'hidden') // required for ellipsis
+      .style('white-space', 'nowrap') // required for ellipsis
+      .style('text-overflow', 'ellipsis')
+      .style('text-align', 'center')
+      .style('vertical-align', 'middle')
+      .style('visibility', function(datum) {
+        return (datum.dx < 15 || datum.dy < 15) ? 'hidden' : 'visible';
+      })
+      .text(function(datum) { return datum.n; });
+
+  // Complicated transition logic: See note in _handleInodes()
+  this._mapContainer.selectAll('div.leaf_rect_entering').transition()
+      .duration(thisTreeMap._enterDuration).delay(
+          this._firstTransition ? 0 : thisTreeMap._exitDuration +
+              thisTreeMap._updateDuration)
+      .attr('class', 'rect leaf_rect')
+      .style('opacity', '1')
+  this._mapContainer.selectAll('div.leaf_label_entering').transition()
+      .duration(thisTreeMap._enterDuration).delay(
+          this._firstTransition ? 0 : thisTreeMap._exitDuration +
+              thisTreeMap._updateDuration)
+      .attr('class', 'label leaf_label')
+      .style('opacity', '1')
+  this._mapContainer.selectAll('div.leaf_rect').transition()
+      .duration(thisTreeMap._updateDuration).delay(thisTreeMap._exitDuration)
+      .style('opacity', '1')
+      .style('left', function(datum){ return datum.x; })
+      .style('top', function(datum){ return datum.y; })
+      .style('width', function(datum){ return datum.dx; })
+      .style('height', function(datum){ return datum.dy; });
+  this._mapContainer.selectAll('div.leaf_label').transition()
+      .duration(thisTreeMap._updateDuration).delay(thisTreeMap._exitDuration)
+      .style('opacity', '1')
+      .style('visibility', function(datum) {
+          return (datum.dx < 15 || datum.dy < 15) ? 'hidden' : 'visible';
+      })
+      .style('left', function(datum){ return datum.x; })
+      .style('top', function(datum){ return datum.y; })
+      .style('width', function(datum) { return datum.dx; })
+      .style('height', function(datum) { return datum.dy; });
+  var exit = this._mapContainer.selectAll('div.leaf')
+      .data(leaves, function(datum) { return 'leaf-' + datum.id; })
+      .exit();
+  exit.selectAll('div.leaf_rect').transition()
+      .duration(thisTreeMap._exitDuration)
+      .style('opacity', 0);
+  exit.selectAll('div.leaf_label').transition()
+      .duration(thisTreeMap._exitDuration)
+      .style('opacity', 0);
+  exit.transition().delay(thisTreeMap._exitDuration + 1).remove();
+
+  console.log(leaves.length + ' leaves layed out.');
+  console.timeEnd('_handleLeaves');
+}
+
+D3SymbolTreeMap.prototype._makeSymbolBucketBackgroundImage = function(datum) {
+  if (!(datum.t === undefined && datum.depth == this._currentMaxDepth)) {
+    return 'none';
+  }
+  var text = '';
+  var lastStop = 0;
+  for (var x = 0; x < D3SymbolTreeMap._NM_SYMBOL_TYPES.length; x++) {
+    symbol_type = D3SymbolTreeMap._NM_SYMBOL_TYPES.charAt(x);
+    var stats = datum.symbol_stats[symbol_type];
+    if (stats !== undefined) {
+      if (text.length !== 0) {
+        text += ', ';
+      }
+      var percent = 100 * (stats.size / datum.value);
+      var nowStop = lastStop + percent;
+      var tempcolor = D3SymbolTreeMap.getColorForType(symbol_type);
+      var color = d3.rgb(tempcolor).toString();
+      text += color + ' ' + lastStop + '%, ' + color + ' ' +
+          nowStop + '%';
+      lastStop = nowStop;
+    }
+  }
+  return 'linear-gradient(' + (datum.dx > datum.dy ? 'to right' :
+                               'to bottom') + ', ' + text + ')';
+}
+
+D3SymbolTreeMap.prototype.pathFor = function(datum) {
+  if (datum.__path) return datum.__path;
+  parts=[];
+  node = datum;
+  while (node) {
+    if (node.k === 'p') { // path node
+      if(node.n !== '/') parts.unshift(node.n);
+    }
+    node = node.parent;
+  }
+  datum.__path = '/' + parts.join('/');
+  return datum.__path;
+}
+
+D3SymbolTreeMap.prototype._createHighlight = function(datum, selection) {
+  var x = parseInt(selection.style('left'));
+  var y = parseInt(selection.style('top'));
+  var w = parseInt(selection.style('width'));
+  var h = parseInt(selection.style('height'));
+  datum.highlight = this._mapContainer.append('div')
+      .attr('id', 'h-' + datum.id)
+      .attr('class', 'highlight')
+      .style('pointer-events', 'none')
+      .style('-webkit-user-select', 'none')
+      .style('z-index', '999999')
+      .style('position', 'absolute')
+      .style('top', y-2)
+      .style('left', x-2)
+      .style('width', w+4)
+      .style('height', h+4)
+      .style('margin', 0)
+      .style('padding', 0)
+      .style('border', '4px outset rgba(250,40,200,0.9)')
+      .style('box-sizing', 'border-box')
+      .style('opacity', 0.0);
+}
+
+D3SymbolTreeMap.prototype._showHighlight = function(datum, selection) {
+  if (datum === this._currentRoot) return;
+  if (datum.highlight === undefined) {
+    this._createHighlight(datum, selection);
+  }
+  datum.highlight.transition().duration(200).style('opacity', 1.0);
+}
+
+D3SymbolTreeMap.prototype._hideHighlight = function(datum, selection) {
+  if (datum.highlight === undefined) return;
+  datum.highlight.transition().duration(750)
+      .style('opacity', 0)
+      .each('end', function(){
+        if (datum.highlight) datum.highlight.remove();
+        delete datum.highlight;
+      });
+}
+
+D3SymbolTreeMap.prototype._createInfoBox = function() {
+  return d3.select('body')
+      .append('div')
+      .attr('id', 'infobox')
+      .style('z-index', '2147483647') // (2^31) - 1: Hopefully safe :)
+      .style('position', 'absolute')
+      .style('visibility', 'hidden')
+      .style('background-color', 'rgba(255,255,255, 0.9)')
+      .style('border', '1px solid black')
+      .style('padding', '10px')
+      .style('-webkit-user-select', 'none')
+      .style('box-shadow', '3px 3px rgba(70,70,70,0.5)')
+      .style('border-radius', '10px')
+      .style('white-space', 'nowrap');
+}
+
+D3SymbolTreeMap.prototype._showInfoBox = function(datum) {
+  this.infobox.text('');
+  var numSymbols = 0;
+  var sizeish = D3SymbolTreeMap._pretty(datum.value) + ' bytes (' +
+      D3SymbolTreeMap._byteify(datum.value) + ')';
+  if (datum.k === 'p' || datum.k === 'b') { // path or bucket
+    if (datum.symbol_stats) { // can be empty if filters are applied
+      for (var x = 0; x < D3SymbolTreeMap._NM_SYMBOL_TYPES.length; x++) {
+        symbol_type = D3SymbolTreeMap._NM_SYMBOL_TYPES.charAt(x);
+        var stats = datum.symbol_stats[symbol_type];
+        if (stats !== undefined) numSymbols += stats.count;
+      }
+    }
+  } else if (datum.k === 's') { // symbol
+    numSymbols = 1;
+  }
+
+  if (datum.k === 'p' && !datum.lastPathElement) {
+    this.infobox.append('div').text('Directory: ' + this.pathFor(datum))
+    this.infobox.append('div').text('Size: ' + sizeish);
+  } else {
+    if (datum.k === 'p') { // path
+      this.infobox.append('div').text('File: ' + this.pathFor(datum))
+      this.infobox.append('div').text('Size: ' + sizeish);
+    } else if (datum.k === 'b') { // bucket
+      this.infobox.append('div').text('Symbol Bucket: ' +
+          D3SymbolTreeMap._getSymbolDescription(datum.t));
+      this.infobox.append('div').text('Count: ' + numSymbols);
+      this.infobox.append('div').text('Size: ' + sizeish);
+      this.infobox.append('div').text('Location: ' + this.pathFor(datum))
+    } else if (datum.k === 's') { // symbol
+      this.infobox.append('div').text('Symbol: ' + datum.n);
+      this.infobox.append('div').text('Type: ' +
+          D3SymbolTreeMap._getSymbolDescription(datum.t));
+      this.infobox.append('div').text('Size: ' + sizeish);
+      this.infobox.append('div').text('Location: ' + this.pathFor(datum))
+    }
+  }
+  if (datum.k === 'p') {
+    this.infobox.append('div')
+        .text('Number of symbols: ' + D3SymbolTreeMap._pretty(numSymbols));
+    if (datum.symbol_stats) { // can be empty if filters are applied
+      var table = this.infobox.append('table')
+          .attr('border', 1).append('tbody');
+      var header = table.append('tr');
+      header.append('th').text('Type');
+      header.append('th').text('Count');
+      header.append('th')
+          .style('white-space', 'nowrap')
+          .text('Total Size (Bytes)');
+      for (var x = 0; x < D3SymbolTreeMap._NM_SYMBOL_TYPES.length; x++) {
+        symbol_type = D3SymbolTreeMap._NM_SYMBOL_TYPES.charAt(x);
+        var stats = datum.symbol_stats[symbol_type];
+        if (stats !== undefined) {
+          var tr = table.append('tr');
+          tr.append('td')
+              .style('white-space', 'nowrap')
+              .text(D3SymbolTreeMap._getSymbolDescription(
+                  symbol_type));
+          tr.append('td').text(D3SymbolTreeMap._pretty(stats.count));
+          tr.append('td').text(D3SymbolTreeMap._pretty(stats.size));
+        }
+      }
+    }
+  }
+  this.infobox.style('visibility', 'visible');
+}
+
+D3SymbolTreeMap.prototype._hideInfoBox = function(datum) {
+  this.infobox.style('visibility', 'hidden');
+}
+
+D3SymbolTreeMap.prototype._moveInfoBox = function(event) {
+  var element = document.getElementById('infobox');
+  var w = element.offsetWidth;
+  var h = element.offsetHeight;
+  var offsetLeft = 10;
+  var offsetTop = 10;
+
+  var rightLimit = window.innerWidth;
+  var rightEdge = event.pageX + offsetLeft + w;
+  if (rightEdge > rightLimit) {
+    // Too close to screen edge, reflect around the cursor
+    offsetLeft = -1 * (w + offsetLeft);
+  }
+
+  var bottomLimit = window.innerHeight;
+  var bottomEdge = event.pageY + offsetTop + h;
+  if (bottomEdge > bottomLimit) {
+    // Too close ot screen edge, reflect around the cursor
+    offsetTop = -1 * (h + offsetTop);
+  }
+
+  this.infobox.style('top', (event.pageY + offsetTop) + 'px')
+      .style('left', (event.pageX + offsetLeft) + 'px');
+}
+
+D3SymbolTreeMap.prototype.biggestSymbols = function(maxRecords) {
+  var result = undefined;
+  var smallest = undefined;
+  var sortFunction = function(a,b) {
+    var result = b.value - a.value;
+    if (result !== 0) return result; // sort by size
+    var pathA = treemap.pathFor(a); // sort by path
+    var pathB = treemap.pathFor(b);
+    if (pathA > pathB) return 1;
+    if (pathB > pathA) return -1;
+    return a.n - b.n; // sort by symbol name
+  };
+  this.visitFromDisplayedRoot(function(datum) {
+    if (datum.children) return; // ignore non-leaves
+    if (!result) { // first element
+      result = [datum];
+      smallest = datum.value;
+      return;
+    }
+    if (result.length < maxRecords) { // filling the array
+      result.push(datum);
+      return;
+    }
+    if (datum.value > smallest) { // array is already full
+      result.push(datum);
+      result.sort(sortFunction);
+      result.pop(); // get rid of smallest element
+      smallest = result[maxRecords - 1].value; // new threshold for entry
+    }
+  });
+  result.sort(sortFunction);
+  return result;
+}
+
+D3SymbolTreeMap.prototype.biggestPaths = function(maxRecords) {
+  var result = undefined;
+  var smallest = undefined;
+  var sortFunction = function(a,b) {
+    var result = b.value - a.value;
+    if (result !== 0) return result; // sort by size
+    var pathA = treemap.pathFor(a); // sort by path
+    var pathB = treemap.pathFor(b);
+    if (pathA > pathB) return 1;
+    if (pathB > pathA) return -1;
+    console.log('warning, multiple entries for the same path: ' + pathA);
+    return 0; // should be impossible
+  };
+  this.visitFromDisplayedRoot(function(datum) {
+    if (!datum.lastPathElement) return; // ignore non-files
+    if (!result) { // first element
+      result = [datum];
+      smallest = datum.value;
+      return;
+    }
+    if (result.length < maxRecords) { // filling the array
+      result.push(datum);
+      return;
+    }
+    if (datum.value > smallest) { // array is already full
+      result.push(datum);
+      result.sort(sortFunction);
+      result.pop(); // get rid of smallest element
+      smallest = result[maxRecords - 1].value; // new threshold for entry
+    }
+  });
+  result.sort(sortFunction);
+  return result;
+}
diff --git a/tools/binary_size/template/index.html b/tools/binary_size/template/index.html
index b73958a..b3a86ad 100644
--- a/tools/binary_size/template/index.html
+++ b/tools/binary_size/template/index.html
@@ -1,4 +1,3 @@
-<!DOCTYPE html>
 <!--
   Copyright 2014 The Chromium Authors. All rights reserved.
   Use of this source code is governed by a BSD-style license that can be
@@ -6,185 +5,521 @@
 -->
 <html>
 <head>
-  <title>Binary Size Analysis</title>
-  <link rel='stylesheet' href='webtreemap/webtreemap.css'>
-  <style>
-    body { font-family: sans-serif; }
-    tt, pre { font-family: WebKitWorkaround, monospace; }
-    #map {
-      margin: 0 auto;
-      position: relative;
-      cursor: pointer;
-      -webkit-user-select: none;
-    }
-    #table {
-      border: 1px solid black;
-    }
-    .treemaplegend {
-      margin: 0 auto;
-      position: relative;
-    }
-    .webtreemap-symbol-vtable {
-      background: #FFFFAA;
-    }
-    .webtreemap-node:hover {
-      border-color: red;
-      background: linear-gradient(rgb(240,240,200), rgb(180,180,200));
-    }
-  </style>
-  <script src='webtreemap/webtreemap.js'></script>
-  <script src='treemap-dump.js'></script>
-  <script src='largest-symbols.js'></script>
-  <script src='largest-sources.js'></script>
-  <script src='largest-vtables.js'></script>
-</head>
-<body onload='show_report_treemap()'>
-<div style='text-align: center; margin-bottom: 2em;'>
-  <h1>Binary Size Analysis</h1>
-  <a href='#' onclick='show_report_treemap()'>Spatial Treemap</a>
-  ~
-  <a href='#' onclick='show_report_largest_sources()'>Largest Sources</a>
-  ~
-  <a href='#' onclick='show_report_largest_symbols()'>Largest Symbols</a>
-  ~
-  <a href='#' onclick='show_report_largest_vtables()'>Largest VTables</a>
-</div>
-<div id='report'></div>
+<title>Binary Size Analysis</title>
+<script src="d3/d3.js" charset="utf-8"></script>
+<script src="D3SymbolTreeMap.js" charset="utf-8"></script>
+<script src="data.js" charset="utf-8"></script>
+<style>
+body {
+    margin: 0px;
+    padding: 5px;
+}
+.swatch {
+    border: 1px solid rgb(100,100,100);
+    -webkit-user-select: none;
+    cursor: default;
+}
+</style>
 <script>
-function escape(str) { 
-  return str.replace(/&/g, '&amp;')
-            .replace(/"/g, '&quot;')
-            .replace(/</g, '&lt;')
-            .replace(/>/g, '&gt;');
-}
+var treemap;
+var filterChanging = false;
+var savedSettings = {};
 
-var treemap_width = 800;
-var treemap_height = 450;
-function show_report_treemap() {
-  console.log('displaying treemap')
-  var div = document.getElementById('report');
-  var w = window.treemap_width;
-  var h = window.treemap_height;
-  div.innerHTML = '<div style=\'text-align: center;\'>' +
-                  '<button onclick=\'zoomInTreemap()\'>Bigger (More Detail)</button>' +
-                  ', <button onclick=\'zoomOutTreemap()\'>Smaller (Less Detail)</button>' +
-                  ' or resize to: ' +
-                  '<input type=text size=5 id=treemap_width value=' + w + '>x' +
-                  '<input type=text size=5 id=treemap_height value=' + h + '>' +
-                  '<button onclick=\'resizeTreemap()\'>Go</button>' +
-                  '<br><em>Click on a box to zoom in and reveal more detail. ' +
-                  'Click on the outermost box to zoom out.</em>' +
-                  '<br>Legend: <table border=1 class=\'treemaplegend\' cellborder=1><tr>' +
-                  '<td class=\'webtreemap-symbol-bss\'>BSS</td>' +
-                  '<td class=\'webtreemap-symbol-data\'>Data</td>' +
-                  '<td class=\'webtreemap-symbol-code\'>Code</td>' +
-                  '<td class=\'webtreemap-symbol-read-only_data\'>RO Data</td>' +
-                  '<td class=\'webtreemap-symbol-weak_symbol\'>Weak</td>' +
-                  '<td class=\'webtreemap-symbol-vtable\'>VTable</td>' +
-                  '</tr></table>' +
-                  '<br>' +
-                  '<div id=\'map\' ' +
-                  'style=\'width: ' + w + 'px; height: ' + h + 'px;\'>' +
-                  '</div></div>';
-  var map = document.getElementById('map');
-  appendTreemap(map, kTree);
-}
-
-function zoomInTreemap() {
-  window.treemap_width = Math.round(window.treemap_width * 1.25);
-  window.treemap_height = Math.round(window.treemap_height * 1.25);
-  show_report_treemap();
-}
-
-function zoomOutTreemap() {
-  window.treemap_width = Math.round(window.treemap_width / 1.25);
-  window.treemap_height = Math.round(window.treemap_height / 1.25);
-  show_report_treemap();
-}
-
-function resizeTreemap() {
-  window.treemap_width = document.getElementById('treemap_width').value;
-  window.treemap_height = document.getElementById('treemap_height').value;
-  show_report_treemap();
-}
-
-function show_report_largest_symbols() {
-  console.log('displaying largest-symbols report')
-  var div = document.getElementById('report');
-  div.innerHTML = '<div><table id=\'list\' border=1><tr>' +
-                  '<th>Rank</th><th>Size</th><th>Type</th><th>Source</th>' +
-                  '</tr></table>';
-  var list = document.getElementById('list');
-  for (var i = 0; i < largestSymbols.length; i++) {
-    var record = largestSymbols[i];
-    var link;
-    if (record.location.indexOf('out') == 0) {
-      link = record.location;
-    } else {
-      link = '<a href="https://code.google.com/p/chromium/codesearch#chromium/src/'
-             + record.location + '">' + escape(record.location) + '</a>';
+function init() {
+    if (window.metadata !== undefined && window.metadata.subtitle) {
+        document.getElementById('subtitle').innerHTML = ': ' + escape(metadata.subtitle);
     }
-    list.innerHTML += '<tr>'
-      + '<td>' + (i+1) + '</td>'
-      + '<td>' + escape(record.size) + '</td>'
-      + '<td style=\'white-space: nowrap;\'>' + escape(record.type) + '</td>'
-      + '<td>' + link + ':<br>'
-      + escape(record.symbol) + '</td>'
-      + '</tr>';
-  }
+    initFilterOptions();
+    treemap = new D3SymbolTreeMap(
+        savedSettings.width,
+        savedSettings.height,
+        savedSettings.maxLevels);
+    treemap.init();
 }
 
-function show_report_largest_sources() {
-  console.log('displaying largest-sources report')
-  var div = document.getElementById('report');
-  div.innerHTML = '<div><table id=\'list\' border=1><tr>' +
-                  '<th>Rank</th><th>Size</th><th>Symbol Count</th><th>Source</th>' +
-                  '</tr></table>';
-  var list = document.getElementById('list');
-  for (var i = 0; i < largestSources.length; i++) {
-    var record = largestSources[i];
-    var link;
-    if (record.location.indexOf('out') == 0) {
-      link = record.location;
-    } else {
-      link = '<a href="https://code.google.com/p/chromium/codesearch#chromium/src/'
-             + record.location + '">' + escape(record.location) + '</a>';
+function getIdealSizes() {
+    var width = window.innerWidth - 20;
+    var height = window.innerHeight - 70;
+    return {'width': width, 'height': height};
+}
+
+function showReport(title, data, headers, dataFunction, styleFunction) {
+    var div =  d3.select('body').append('div')
+        .style('margin', '0')
+        .style('padding', '5px')
+        .style('position', 'absolute')
+        .style('top', '10%')
+        .style('left', '10%')
+        .style('background-color', 'rgba(255,255,255,0.9)')
+        .style('width', '80%')
+        .style('height', '80%')
+        .style('z-index', '2147483647')
+        .style('border', '3px ridge grey')
+        .style('box-shadow', '10px 10px 5px rgba(80,80,80,0.7)')
+        .style('text-align', 'center')
+        .style('border-radius', '10px');
+    var titlebar = div.append('div')
+        .style('margin', '0')
+        .style('padding', '5px')
+        .style('position', 'absolute')
+        .style('top', '0%')
+        .style('left', '0%')
+        .style('width', '100%')
+        .style('height', '10%')
+        .style('font-size', 'x-large');
+    titlebar.text(title);
+    var controls = div.append('div')
+        .style('margin', '0')
+        .style('padding', '5px')
+        .style('position', 'absolute')
+        .style('top', '90%')
+        .style('left', '0%')
+        .style('width', '100%')
+        .style('height', '10%');
+    controls.append('input').attr('type', 'button')
+        .attr('value', 'Dismiss')
+        .on('click', function(){div.remove();});
+
+    var tableDiv = div.append('div')
+        .style('overflow', 'auto')
+        .style('position', 'absolute')
+        .style('top', '10%')
+        .style('left', '0%')
+        .style('width', '100%')
+        .style('height', '80%')
+        .style('border-top', '1px solid rgb(230,230,230)')
+        .style('border-bottom', '1px solid rgb(230,230,230)');
+    var table = tableDiv.append('table')
+        .attr('border', '1')
+        .attr('cellspacing', '0')
+        .attr('cellpadding', '2')
+        .style('margin-left', 'auto')
+        .style('margin-right', 'auto');
+    var header = table.append('tr');
+    for (var i = 0; i < headers.length; i++) {
+        header.append('th').text(headers[i]);
     }
 
-    list.innerHTML += '<tr>'
-      + '<td>' + (i+1) + '</td>'
-      + '<td>' + escape(record.size) + '</td>'
-      + '<td>' + escape(record.symbol_count) + '</td>'
-      + '<td>' + link + '</td>'
-      + '</tr>';
-  }
+    for (var i = 0; i < data.length; i++) {
+        var row = table.append('tr');
+        for (j = 0; j < headers.length; j++) {
+            var td = row.append('td');
+            if (styleFunction) {
+                styleFunction.call(this, td, j);
+            }
+            dataFunction.call(this, data[i], j, td);
+        }
+    }
 }
 
-function show_report_largest_vtables() {
-  console.log('displaying largest-vtables report')
-  var div = document.getElementById('report');
-  div.innerHTML = '<div><table id=\'list\' border=1><tr>' +
-                  '<th>Rank</th><th>Size</th><th>Symbol</th><th>Source</th>' +
-                  '</tr></table>';
-  var list = document.getElementById('list');
-  for (var i = 0; i < largestVTables.length; i++) {
-    var record = largestVTables[i];
-    var link;
-    if (record.location.indexOf('out') == 0) {
-      link = record.location;
-    } else {
-      link = '<a href="https://code.google.com/p/chromium/codesearch#chromium/src/'
-             + record.location + '">' + escape(record.location) + '</a>';
+function bigSymbolsReport() {
+    var list = treemap.biggestSymbols(100);
+    var headers = ['Rank', 'Size (Bytes)', 'Type', 'Location'];
+    var styleFunction = function(selection, index) {
+        if (index === 3) {
+            selection.style('font-family', 'monospace');
+        }
+    };
+    var recordIndex = 1;
+    var dataFunction = function(record, index, cell) {
+        if (index === 0) {
+            cell.text(recordIndex++);
+        } else if (index === 1) {
+            cell.text(D3SymbolTreeMap._pretty(record.value));
+        } else if (index === 2) {
+            cell.text(record.t);
+        } else {
+            if (treemap.pathFor(record).indexOf('/out') == 0) {
+                cell.append('span').text(treemap.pathFor(record));
+                cell.append('br');
+                cell.append('span').text('Symbol: ');
+                cell.append('span').text(escape(record.n));
+            } else {
+                var href = 'https://code.google.com/p/chromium/codesearch#chromium/src'
+                    + treemap.pathFor(record)
+                    + '&q='
+                    + escape(record.n);
+                cell.append('a')
+                    .attr('href', href)
+                    .attr('target', '_blank')
+                    .text(escape(treemap.pathFor(record)));
+                cell.append('br');
+                cell.append('span').text('Symbol: ');
+                cell.append('span').text(escape(record.n));
+            }
+        }
+    };
+    showReport('100 Largest Symbols', list, headers, dataFunction, styleFunction);
+}
+
+function bigPathsReport() {
+    var list = treemap.biggestPaths(100);
+    var headers = ['Rank', 'Size (Bytes)', 'Location'];
+    var styleFunction = function(selection, index) {
+        if (index === 2) {
+            selection.style('font-family', 'monospace');
+        }
+    };
+    var recordIndex = 1;
+    var dataFunction = function(record, index, cell) {
+        if (index === 0) {
+            cell.text(recordIndex++);
+        } else if (index === 1) {
+            cell.text(D3SymbolTreeMap._pretty(record.value));
+        } else if (index === 2) {
+            if (treemap.pathFor(record).indexOf('/out') == 0) {
+                cell.text(treemap.pathFor(record));
+            } else {
+                var href = 'https://code.google.com/p/chromium/codesearch#chromium/src' + treemap.pathFor(record);
+                cell.append('a')
+                    .attr('href', href)
+                    .attr('target', '_blank')
+                    .text(escape(treemap.pathFor(record)));
+            }
+
+        }
+    };
+    showReport('100 Largest Paths', list, headers, dataFunction, styleFunction);
+}
+
+function symbolFilterTextChanged() {
+    if (filterChanging) return true;
+    filterChanging = true;
+    var enabled = document.getElementById('symbol_types_filter').value;
+    for (var x=0; x<=25; x++) {
+        var checkBox = document.getElementById('check_' + x);
+        checkBox.checked = (enabled.indexOf(checkBox.value) != -1);
+    }
+    filterChanging = false;
+}
+
+function updateFilterText() {
+    if (filterChanging) return true;
+    filterChanging = true;
+    var text = '';
+    for (var x=0; x<=25; x++) {
+        var checkBox = document.getElementById('check_' + x);
+        if (checkBox.checked) {
+            text += checkBox.value;
+        }
+    }
+    document.getElementById('symbol_types_filter').value=text;
+    filterChanging = false;
+}
+
+function initFilterOptions() {
+    updateFilterText();
+    for (var x=0; x<=25; x++) {
+        var checkBox = document.getElementById('check_' + x);
+        checkBox.onchange=updateFilterText;
+        var swatch = document.getElementById('swatch_' + x);
+        swatch.style.backgroundColor = D3SymbolTreeMap.getColorForType(checkBox.value).toString();
+    }
+    var gteCheckbox = document.getElementById('check_gte');
+    gteCheckbox.onchange = function() {
+        document.getElementById('symbol_filter_gte').disabled = !gteCheckbox.checked;
+    }
+    var regexCheckbox = document.getElementById('check_regex');
+    regexCheckbox.onchange = function() {
+        document.getElementById('symbol_filter_regex').disabled = !regexCheckbox.checked;
+    }
+    var excludeRegexCheckbox = document.getElementById('check_exclude_regex');
+    excludeRegexCheckbox.onchange = function() {
+        document.getElementById('symbol_filter_exclude_regex').disabled = !excludeRegexCheckbox.checked;
+    }
+    var idealSizes = getIdealSizes();
+    document.getElementById('width').value = idealSizes.width;
+    document.getElementById('height').value = idealSizes.height;
+    saveFilterSettings();
+}
+
+function filterSetAll(enabled) {
+    for (var x=0; x<=25; x++) {
+        var checkBox = document.getElementById('check_' + x);
+        checkBox.checked = enabled;
+    }
+    updateFilterText();
+}
+
+function showOptions() {
+    loadFilterSettings();
+    var container = document.getElementById('options_container');
+    var w = container.offsetWidth;
+    var h = container.offsetHeight;
+    container.style.margin = '-' + (h/2) + 'px 0 0 -' + (w/2) + 'px';
+    container.style.visibility = 'visible';
+}
+
+function hideOptions() {
+    var container = document.getElementById('options_container');
+    container.style.visibility = 'hidden';
+}
+
+function applySettings() {
+    hideOptions();
+    var oldWidth = savedSettings.width;
+    var oldHeight = savedSettings.height;
+    var oldSymbols = savedSettings.symbolTypes;
+    var oldRegex = savedSettings.regex;
+    var oldExcludeRegex = savedSettings.excludeRegex;
+    var oldGte = savedSettings.gte;
+    var oldMaxLevels = savedSettings.maxLevels;
+    saveFilterSettings();
+    var resizeNeeded = oldWidth !== savedSettings.width || oldHeight !== savedSettings.height;
+    var regexChanged = oldRegex !== savedSettings.regex;
+    var excludeRegexChanged = oldExcludeRegex !== savedSettings.excludeRegex;
+    var symbolsChanged = oldSymbols !== savedSettings.symbolTypes;
+    var gteChanged = oldGte !== savedSettings.gte;
+    var filterChanged = regexChanged || excludeRegexChanged || symbolsChanged || gteChanged;
+    var maxLevelsChanged = oldMaxLevels !== savedSettings.maxLevels;
+
+    if (filterChanged) {
+        // Type filters
+        typeFilter = function(datum) {
+            if (datum.depth === 0) return true; // root node
+            if (datum.t === undefined) return true;
+            return savedSettings.symbolTypes !== undefined &&
+                savedSettings.symbolTypes.indexOf(datum.t) !== -1;
+        }
+
+        // Regex filter
+        var regexFilter = undefined;
+        if (savedSettings.regex !== undefined && savedSettings.regex.length > 0) {
+            console.log('filter: regex is "' + savedSettings.regex + '"');
+            var regex = new RegExp(savedSettings.regex);
+            regexFilter = function(datum) {
+                if (datum.depth === 0) return true; // root node
+                var fullName = this.pathFor(datum);
+                if (datum.children === undefined) { // it is a leaf node (symbol)
+                    fullName += ':' + datum.n;
+                }
+                return regex.test(fullName);
+            }
+        }
+
+        // Exclude regex filter
+        var excludeRegexFilter = undefined;
+        if (savedSettings.excludeRegex !== undefined && savedSettings.excludeRegex.length > 0) {
+            console.log('filter: exclude-regex is "' + savedSettings.excludeRegex + '"');
+            var excludeRegex = new RegExp(savedSettings.excludeRegex);
+            excludeRegexFilter = function(datum) {
+                if (datum.depth === 0) return true; // root node
+                var fullName = this.pathFor(datum);
+                if (datum.children === undefined) { // it is a leaf node (symbol)
+                    fullName += ':' + datum.n;
+                }
+                return !excludeRegex.test(fullName);
+            }
+        }
+
+        // Size filter
+        var sizeFilter = undefined;
+        if (savedSettings.gte !== undefined) {
+            console.log('filter: minimum size is ' + savedSettings.gte + ' bytes');
+            sizeFilter = function(datum) {
+                if (datum.children !== undefined) return true; // non-leaf
+                if (datum.value === undefined) console.log('whoops');
+                return datum.value >= savedSettings.gte;
+            }
+        }
+
+        // Make a filter to apply to the tree
+        var filter = function(datum) {
+            if (typeFilter && !typeFilter.call(this, datum)) return false;
+            if (regexFilter && !regexFilter.call(this, datum)) return false;
+            if (excludeRegexFilter && !excludeRegexFilter.call(this, datum)) return false;
+            if (sizeFilter && !sizeFilter.call(this, datum)) return false;
+            return true;
+        };
+        treemap.filter(filter);
     }
 
-    list.innerHTML += '<tr>'
-      + '<td>' + (i+1) + '</td>'
-      + '<td>' + escape(record.size) + '</td>'
-      + '<td>' + escape(record.symbol) + '</td>'
-      + '<td>' + link + '</td>'
-      + '</tr>';
-  }
+    // Adjust levels if needed.
+    if (maxLevelsChanged) {
+        treemap.setMaxLevels(savedSettings.maxLevels);
+    }
+
+    // Resize map if necessary.
+    if (resizeNeeded) {
+        console.log('desired treemap dimensions have changed, requesting resize');
+        treemap.resize(savedSettings.width, savedSettings.height);
+    }
+}
+
+function cancelSettings() {
+    hideOptions();
+    loadFilterSettings();
+}
+
+function saveFilterSettings() {
+    savedSettings.symbolTypes = document.getElementById('symbol_types_filter').value;
+    if (document.getElementById('check_regex').checked) {
+        savedSettings.regex = document.getElementById('symbol_filter_regex').value;
+    } else {
+        savedSettings.regex = undefined;
+    }
+    if (document.getElementById('check_exclude_regex').checked) {
+        savedSettings.excludeRegex = document.getElementById('symbol_filter_exclude_regex').value;
+    } else {
+        savedSettings.excludeRegex = undefined;
+    }
+    if (document.getElementById('check_gte').checked) {
+        savedSettings.gte = parseInt(document.getElementById('symbol_filter_gte').value);
+    } else {
+        savedSettings.gte = undefined;
+    }
+    savedSettings.width = parseInt(document.getElementById('width').value);
+    savedSettings.height = parseInt(document.getElementById('height').value);
+    savedSettings.maxLevels = parseInt(document.getElementById('max_levels').value);
+}
+
+function loadFilterSettings() {
+    document.getElementById('symbol_types_filter').value = savedSettings.symbolTypes;
+    symbolFilterTextChanged();
+    if (savedSettings.regex !== undefined) {
+        document.getElementById('check_regex').checked = true;
+        document.getElementById('symbol_filter_regex').value = savedSettings.regex;
+    } else {
+        document.getElementById('check_regex').checked = false;
+    }
+    if (savedSettings.excludeRegex !== undefined) {
+        document.getElementById('check_exclude_regex').checked = true;
+        document.getElementById('symbol_filter_exclude_regex').value = savedSettings.excludeRegex;
+    } else {
+        document.getElementById('check_exclude_regex').checked = false;
+    }
+    if (savedSettings.gte !== undefined) {
+        document.getElementById('check_gte').checked = true;
+        document.getElementById('symbol_filter_gte').value = savedSettings.gte;
+    } else {
+        document.getElementById('check_gte').checked = false;
+    }
+    document.getElementById('width').value = savedSettings.width;
+    document.getElementById('height').value = savedSettings.height;
+    document.getElementById('max_levels').value = savedSettings.maxLevels;
+}
+
+function escape(str) {
+    return str.replace(/&/g, '&amp;')
+              .replace(/"/g, '&quot;')
+              .replace(/</g, '&lt;')
+              .replace(/>/g, '&gt;');
 }
 </script>
+</head>
+<body onload='init()'>
+<div style='position: absolute; top: 5px; left: 5px;'>
+  <input type='button' onclick='showOptions()' value='Options &amp; Legend...'>
+  <span style='-webkit-user-select: none; cursor: help;' title='Click to view the symbol legend or to configure filters and options for the treemap'>[?]</span>
+</div>
+<div style='position: absolute; right: 5px; top: 5px; white-space: nowrap;'>
+    Reports:
+    <input type='button' onclick='bigSymbolsReport()' value='Large Symbols' title='Click to view a report of the largest 100 symbols that are with the bounds of the treemap that is currently displayed.'>
+    <input type='button' onclick='bigPathsReport()' value='Large Files' title='Click to view a report of the largest 100 source files that are with the bounds of the treemap that is currently displayed.'>
+</div>
+<div style='text-align: center; margin-bottom: 5px;'>
+    <span style='font-size: x-large; font-weight: bold; font-variant: small-caps'>Binary Size Analysis<span id='subtitle'></span></span>
+    <br><span style='font-size: small; font-style: italic;'>Double-click a box to zoom in, double-click outermost title to zoom out.</span>
+</div>
+<table id='options_container' style='visibility: hidden; border: 3px ridge grey; padding: 0px; top: 50%; left: 50%; position: fixed; z-index: 2147483646; overflow: auto; background-color: rgba(255,255,255,0.9); border-radius: 10px; box-shadow: 10px 10px 5px rgba(80,80,80,0.7);'><tr><td style='vertical-align: top'>
+    <table cellspacing=0 cellborder=0 style='width:100%'>
+        <tr><th colspan=3 style='padding-bottom: .25em; text-decoration: underline;'>Symbol Types To Show</th></tr>
+        <tr>
+            <td style='width: 33%; white-space: nowrap; vertical-align: top;'>
+                    <span class='swatch' id='swatch_0'>&nbsp;&nbsp;&nbsp;</span><input checked type='checkbox' id='check_0' value='A'>Global absolute (A)
+                <br><span class='swatch' id='swatch_1'>&nbsp;&nbsp;&nbsp;</span><input checked type='checkbox' id='check_1' value='B'>Global uninitialized data (B)
+                <br><span class='swatch' id='swatch_2'>&nbsp;&nbsp;&nbsp;</span><input checked type='checkbox' id='check_2' value='b'>Local uninitialized data (b)
+                <br><span class='swatch' id='swatch_3'>&nbsp;&nbsp;&nbsp;</span><input checked type='checkbox' id='check_3' value='C'>Global uninitialized common (C)
+                <br><span class='swatch' id='swatch_4'>&nbsp;&nbsp;&nbsp;</span><input checked type='checkbox' id='check_4' value='D'>Global initialized data (D)
+                <br><span class='swatch' id='swatch_5'>&nbsp;&nbsp;&nbsp;</span><input checked type='checkbox' id='check_5' value='d'>Local initialized data (d)
+                <br><span class='swatch' id='swatch_6'>&nbsp;&nbsp;&nbsp;</span><input checked type='checkbox' id='check_6' value='G'>Global small initialized data (G)
+                <br><span class='swatch' id='swatch_7'>&nbsp;&nbsp;&nbsp;</span><input checked type='checkbox' id='check_7' value='g'>Local small initialized data (g)
+                <br><span class='swatch' id='swatch_8'>&nbsp;&nbsp;&nbsp;</span><input checked type='checkbox' id='check_8' value='i'>Indirect function (i)
+            </td>
+            <td style='width: 33%; white-space: nowrap; vertical-align: top;'>
+                    <span class='swatch' id='swatch_9'>&nbsp;&nbsp;&nbsp;</span><input checked type='checkbox' id='check_9' value='N'>Debugging (N)
+                <br><span class='swatch' id='swatch_10'>&nbsp;&nbsp;&nbsp;</span><input checked type='checkbox' id='check_10' value='p'>Stack unwind (p)
+                <br><span class='swatch' id='swatch_11'>&nbsp;&nbsp;&nbsp;</span><input checked type='checkbox' id='check_11' value='R'>Global read-only data (R)
+                <br><span class='swatch' id='swatch_12'>&nbsp;&nbsp;&nbsp;</span><input checked type='checkbox' id='check_12' value='r'>Local read-only data (r)
+                <br><span class='swatch' id='swatch_13'>&nbsp;&nbsp;&nbsp;</span><input checked type='checkbox' id='check_13' value='S'>Global small uninitialized data (S)
+                <br><span class='swatch' id='swatch_14'>&nbsp;&nbsp;&nbsp;</span><input checked type='checkbox' id='check_14' value='s'>Local small uninitialized data (s)
+                <br><span class='swatch' id='swatch_15'>&nbsp;&nbsp;&nbsp;</span><input checked type='checkbox' id='check_15' value='T'>Global code (T)
+                <br><span class='swatch' id='swatch_16'>&nbsp;&nbsp;&nbsp;</span><input checked type='checkbox' id='check_16' value='t'>Local code (t)
+                <br><span class='swatch' id='swatch_17'>&nbsp;&nbsp;&nbsp;</span><input checked type='checkbox' id='check_17' value='U'>Undefined (U)
+            </td>
+            <td style='width: 33%; white-space: nowrap; vertical-align: top;'>
+                    <span class='swatch' id='swatch_18'>&nbsp;&nbsp;&nbsp;</span><input checked type='checkbox' id='check_18' value='u'>Unique (u)
+                <br><span class='swatch' id='swatch_19'>&nbsp;&nbsp;&nbsp;</span><input checked type='checkbox' id='check_19' value='V'>Global weak object (V)
+                <br><span class='swatch' id='swatch_20'>&nbsp;&nbsp;&nbsp;</span><input checked type='checkbox' id='check_20' value='v'>Local weak object (v)
+                <br><span class='swatch' id='swatch_21'>&nbsp;&nbsp;&nbsp;</span><input checked type='checkbox' id='check_21' value='W'>Global weak symbol (W)
+                <br><span class='swatch' id='swatch_22'>&nbsp;&nbsp;&nbsp;</span><input checked type='checkbox' id='check_22' value='w'>Local weak symbol (w)
+                <br><span class='swatch' id='swatch_23'>&nbsp;&nbsp;&nbsp;</span><input checked type='checkbox' id='check_23' value='@'>Vtable entry (@)
+                <br><span class='swatch' id='swatch_24'>&nbsp;&nbsp;&nbsp;</span><input checked type='checkbox' id='check_24' value='-'>STABS debugging (-)
+                <br><span class='swatch' id='swatch_25'>&nbsp;&nbsp;&nbsp;</span><input checked type='checkbox' id='check_25' value='?'>Unrecognized (?)
+            </td>
+        </tr>
+        <tr><td colspan=3 style='text-align: center; white-space: nowrap; padding-top: 1em;'>
+            Select <input type='button' onclick='filterSetAll(true)' value='All'>,
+            <input type='button' onclick='filterSetAll(false)' value='None'>,
+            or type a string: <input id='symbol_types_filter' size=30 value='' onkeyup='symbolFilterTextChanged()' onblur='updateFilterText()'>
+            <span style='-webkit-user-select: none; cursor: help;' title='Enter codes from the list above for the symbols you want to see. The checkboxes will update automatically to match the string that you enter.'>[?]</span>
+        </td></tr>
+   </table>
+</td></tr><tr><td style='vertical-align: top; padding-top: 10px; border-top: 1px solid grey;'>
+    <table cellspacing=0 cellborder=0 style='width: 100%'>
+        <tr><th colspan=2 style='padding-bottom: .25em; text-decoration: underline;'>Advanced Options</th></tr>
+        <tr>
+            <td style='white-space: nowrap; vertical-align: top;'>
+                <input type='checkbox' id='check_regex'>
+                Only include symbols matching this regex:
+            </td>
+            <td style='text-align: right; vertical-align: top;'>
+                <input disabled id='symbol_filter_regex' size=30 value='' style='text-align: right;'>
+                <span style='-webkit-user-select: none; cursor: help;' title='Enter a javascript regex. Only symbols that match this regex will be shown. This filter applies before any exclusion regex specified below. The format of each symbol is [path]:[symbol_name]'>[?]</span>
+            </td>
+        </tr>
+        <tr>
+            <td style='white-space: nowrap; vertical-align: top;'>
+                <input type='checkbox' id='check_exclude_regex'>
+                Exclude all symbols matching this regex:
+            </td>
+            <td style='text-align: right; vertical-align: top;'>
+                <input disabled id='symbol_filter_exclude_regex' size=30 value='' style='text-align: right;'>
+                <span style='-webkit-user-select: none; cursor: help;' title='Enter a javascript regex. Symbols that match this tegex will not be shown. This filter applies after any inclusion filter specified above. The format of each symbol is [path]:[symbol_name]'>[?]</span>
+            </td>
+        </tr>
+        <tr>
+            <td style='white-space: nowrap; vertical-align: top;'>
+                <input type='checkbox' id='check_gte'>
+                Only include symbols that are at least <span style='font-style: italic;'>n</span> bytes:
+            </td>
+            <td style='text-align: right; vertical-align: top;'>
+                <input disabled id='symbol_filter_gte' size=8 value='' style='text-align: right;'>
+                <span style='-webkit-user-select: none; cursor: help;' title='Symbols whose size is less than this value will be hidden.'>[?]</span>
+            </td>
+        </tr>
+        <tr>
+            <td style='white-space: nowrap vertical-align: top;;'>
+                Show at most <span style='font-style: italic;'>n</span> levels of detail at a time:
+            </td>
+            <td style='text-align: right; vertical-align: top;'>
+                <input id='max_levels' size=4 value='2' style='text-align: right;'><span style='-webkit-user-select: none; cursor: help;' title='Increasing this value shows more detail without the need to zoom, but uses more computing power.'>[?]</span>
+            </td>
+        </tr>
+        <tr>
+            <td style='white-space: nowrap vertical-align: top;;'>
+                Set the size of the treemap to <span style='font-style: italic;'>W x H</span> pixels:
+            </td>
+            <td style='text-align: right; vertical-align: top;'>
+                <input id='width' size=4 value='' style='text-align: right;'>
+                &nbsp;x&nbsp;<input id='height' size=4 value='' style='text-align: right;'>
+            </td>
+        </tr>
+    </table>
+</td></tr>
+<tr><td style='padding-top: 10px; text-align: right; border-top: 1px solid grey'>
+    <input type='button' value='Apply' onclick='applySettings()'>
+    <input type='button' value='Cancel' onclick='cancelSettings()'>
+</td></tr></table>
 </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/tools/binary_size/template/test-data-generator.html b/tools/binary_size/template/test-data-generator.html
new file mode 100644
index 0000000..9c6790a
--- /dev/null
+++ b/tools/binary_size/template/test-data-generator.html
@@ -0,0 +1,157 @@
+<!DOCTYPE html>
+<!--
+  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.
+-->
+<html>
+<head>
+<script>
+function rnd(max) {
+    return Math.round(Math.random()*max);
+}
+
+function gen() {
+  var dirs1=['usr1', 'etc1', 'var1'];
+  var dirs2=['aaa2', 'bbb2', 'ccc2', 'ddd2', 'eee2', 'fff2', 'ggg2', 'hhh2',
+             'frobozz2', 'kazaam2', 'shazam2'];
+  var dirs3=['iii3', 'jjj3', 'kkk3', 'lll3', 'mmm3', 'nnn3', 'ooo3', 'ppp3',
+             'wonderllama3', 'excelsior3', 'src3'];
+  var filenames=['awesome.cc', 'rad.h', 'tubular.cxx', 'cool.cc', 'groovy.h',
+                 'excellent.c', 'gnarly.h', 'green.C', 'articulate.cc'];
+  //All possible types (we only see a subset in practice): 'ABbCDdGgiNpRrSsTtUuVvWw-?';
+  var nm_symbol_types = 'trd';
+  var minSize = 4;
+  var maxSize = 10000;
+  var numGen = 300000;
+  var text = 'var nm_data=[\n';
+  var vtablePercent = 5;
+  for (var x=0; x<numGen; x++) {
+    var path = '/' +
+        dirs1[rnd(dirs1.length - 1)] + '/' +
+        dirs2[rnd(dirs2.length - 1)] + '/' +
+        dirs3[rnd(dirs3.length - 1)] + '/' +
+        filenames[rnd(filenames.length - 1)];
+    var isVtable = Math.floor((Math.random()*100)+1) <= vtablePercent;
+    var size = rnd(maxSize);
+    var symbol_name;
+    var type;
+    if (!isVtable) {
+      symbol_name = 'sym' + x.toString(16);
+      type = nm_symbol_types.charAt(rnd(nm_symbol_types.length - 1));
+    } else {
+      symbol_name = 'vtable for ' + x.toString(16);
+      type = '@'
+    }
+    text = text + "{'n': '" + symbol_name +
+        "', 't': '" + type +
+        "', 's': " + size +
+        ", 'p': '" + path + "'},\n";
+  }
+  text += '];';
+
+  eval(text);
+  var treeified = to_d3_tree(nm_data);
+  generateDownloadLink('tree_data=' + JSON.stringify(treeified));
+}
+
+function generateDownloadLink(content) {
+  var blob = new Blob([content], {type: 'text/plain'});
+  var link = document.createElement('a');
+  link.download = 'generated-content.txt';
+  link.href = window.URL.createObjectURL(blob);
+  link.textContent = 'Download ready, click here.';
+  link.dataset.downloadurl = ['text/plain', link.download, link.href].join(':');
+  link.onclick = function(e) {
+    if ('disabled' in this.dataset) { return false; }
+    link.dataset.disabled = true;
+    setTimeout(function() { window.URL.revokeObjectURL(link.href); }, 1500);
+  };
+  document.getElementById('linkcontainer').innerHTML = '';
+  document.getElementById('linkcontainer').appendChild(link);
+}
+
+/**
+ * This function takes in an array of nm records and converts them into a
+ * hierarchical data structure suitable for use in a d3-base treemap layout.
+ * Leaves are individual symbols. The parents of the leaves are logical
+ * groupings by common symbol-type (for BSS, read-only data, code, etc).
+ * Above this, each node represents part of a filesystem path relative
+ * to the parent node. The root node has the name '/', and represents
+ * a root (though not necessarily THE root) of a file system traversal.
+ * The root node also has a special property, 'maxDepth', to which is bound
+ * the deepest level of nesting that was found during conversion: for the
+ * record at path /a/b/c/d.foo, the maxDepth will be 6; the file 'd.foo'
+ * is at depth 4, the type-bucket is depth 5 and the symbols are depth 6.
+ */
+function to_d3_tree(records) {
+  var result = {'n': '/', 'children': [], 'k': 'p'};
+  var maxDepth = 0;
+  //{'n': 'symbol1', 't': 'b', 's': 1000, 'p': '/usr/local/foo/foo.cc'},
+  for (index in records) {
+    var record = records[index];
+    var parts = record.p.split("/");
+    var node = result;
+    var depth = 0;
+    // Walk the tree and find the file that is named by the "location"
+    // field of the record. We create any intermediate nodes required.
+    // This is directly analogous to "mkdir -p".
+    while(parts.length > 0) {
+      var part = parts.shift();
+      if (part.length == 0) continue;
+      depth++;
+      node = _mk_child(node, part, record.s);
+      node.k = 'p'; // p for path
+    }
+    node.lastPathElement = true;
+
+    // 'node' is now the file node. Find the symbol-type bucket.
+    node = _mk_child(node, record.t, record.s);
+    node.t = record.t;
+    node.k = 'b'; // b for bucket
+    depth++;
+    // 'node' is now the symbol-type bucket. Make the child entry.
+    node = _mk_child(node, record.n, record.s);
+    delete node.children;
+    node.value = record.s;
+    node.t = record.t;
+    node.k = 's'; // s for symbol
+    depth++;
+
+    maxDepth = Math.max(maxDepth, depth);
+  }
+  result.maxDepth = maxDepth;
+  return result;
+}
+
+/**
+ * Given a node and a name, return the child within node.children whose
+ * name matches the specified name. If necessary, a new child node is
+ * created and appended to node.children.
+ * If this method creates a new node, the 'name' attribute is set to the
+ * specified name and the 'children' attribute is an empty array, and
+ * total_size is the specified size. Otherwise, the existing node is
+ * returned and its total_size value is incremented by the specified size.
+ */
+function _mk_child(node, name, size) {
+  var child = undefined;
+  for (child_index in node.children) {
+    if (node.children[child_index].n == name) {
+      child = node.children[child_index];
+    }
+  }
+  if (child === undefined) {
+    child = {'n': name, 'children': []};
+    node.children.push(child);
+  }
+  return child;
+}
+</script>
+</head>
+<body style='white-space: pre; font-family: monospace;'>
+This script generates sample data for use in D3SymbolTreeMap, and can be used
+for testing.
+<input type=button onclick='gen();' value='Generate data'></input>
+<div id='linkcontainer'></div>
+</body>
+</html>
diff --git a/tools/bisect-perf-regression.py b/tools/bisect-perf-regression.py
index 56892cd..6b98b4b 100755
--- a/tools/bisect-perf-regression.py
+++ b/tools/bisect-perf-regression.py
@@ -291,6 +291,29 @@
   return std_dev
 
 
+def CalculateRelativeChange(before, after):
+  """Returns the relative change of before and after, relative to before.
+
+  There are several different ways to define relative difference between
+  two numbers; sometimes it is defined as relative to the smaller number,
+  or to the mean of the two numbers. This version returns the difference
+  relative to the first of the two numbers.
+
+  Args:
+    before: A number representing an earlier value.
+    after: Another number, representing a later value.
+
+  Returns:
+    A non-negative floating point number; 0.1 represents a 10% change.
+  """
+  if before == after:
+    return 0.0
+  if before == 0:
+    return float('nan')
+  difference = after - before
+  return math.fabs(difference / before)
+
+
 def CalculatePooledStandardError(work_sets):
   numerator = 0.0
   denominator1 = 0.0
@@ -520,8 +543,9 @@
 
 
 def RunProcess(command):
-  """Run an arbitrary command. If output from the call is needed, use
-  RunProcessAndRetrieveOutput instead.
+  """Runs an arbitrary command.
+
+  If output from the call is needed, use RunProcessAndRetrieveOutput instead.
 
   Args:
     command: A list containing the command and args to execute.
@@ -535,23 +559,33 @@
 
 
 def RunProcessAndRetrieveOutput(command, cwd=None):
-  """Run an arbitrary command, returning its output and return code. Since
-  output is collected via communicate(), there will be no output until the
-  call terminates. If you need output while the program runs (ie. so
+  """Runs an arbitrary command, returning its output and return code.
+
+  Since output is collected via communicate(), there will be no output until
+  the call terminates. If you need output while the program runs (ie. so
   that the buildbot doesn't terminate the script), consider RunProcess().
 
   Args:
     command: A list containing the command and args to execute.
+    cwd: A directory to change to while running the command. The command can be
+        relative to this directory. If this is None, the command will be run in
+        the current directory.
 
   Returns:
     A tuple of the output and return code.
   """
+  if cwd:
+    original_cwd = os.getcwd()
+    os.chdir(cwd)
+
   # On Windows, use shell=True to get PATH interpretation.
   shell = IsWindows()
-  proc = subprocess.Popen(command, shell=shell, stdout=subprocess.PIPE, cwd=cwd)
-
+  proc = subprocess.Popen(command, shell=shell, stdout=subprocess.PIPE)
   (output, _) = proc.communicate()
 
+  if cwd:
+    os.chdir(original_cwd)
+
   return (output, proc.returncode)
 
 
@@ -560,6 +594,7 @@
 
   Args:
     command: A list containing the args to git.
+    cwd: A directory to change to while running the git command (optional).
 
   Returns:
     A tuple of the output and return code.
@@ -782,7 +817,7 @@
     super(AndroidBuilder, self).__init__(opts)
 
   def _GetTargets(self):
-    return ['chrome_shell', 'cc_perftests_apk', 'android_tools']
+    return ['chrome_shell_apk', 'cc_perftests_apk', 'android_tools']
 
   def Build(self, depot, opts):
     """Builds the android content shell and other necessary tools using options
@@ -1172,10 +1207,13 @@
 
     return [o for o in output.split('\n') if o]
 
+
 class BisectPerformanceMetrics(object):
-  """BisectPerformanceMetrics performs a bisection against a list of range
-  of revisions to narrow down where performance regressions may have
-  occurred."""
+  """This class contains functionality to perform a bisection of a range of
+  revisions to narrow down where performance regressions may have occurred.
+
+  The main entry-point is the Run method.
+  """
 
   def __init__(self, source_control, opts):
     super(BisectPerformanceMetrics, self).__init__()
@@ -1335,7 +1373,6 @@
     Returns:
       A dict in the format {depot:revision} if successful, otherwise None.
     """
-
     cwd = os.getcwd()
     self.ChangeToDepotWorkingDirectory(depot)
 
@@ -1444,7 +1481,7 @@
     return None
 
   def DownloadCurrentBuild(self, revision, build_type='Release', patch=None):
-    """Download the build archive for the given revision.
+    """Downloads the build archive for the given revision.
 
     Args:
       revision: The SVN revision to build.
@@ -1825,7 +1862,7 @@
     return values_list
 
   def TryParseResultValuesFromOutput(self, metric, text):
-    """Attempts to parse a metric in the format RESULT <graph: <trace>.
+    """Attempts to parse a metric in the format RESULT <graph>: <trace>= ...
 
     Args:
       metric: The metric as a list of [<trace>, <value>] strings.
@@ -1931,22 +1968,37 @@
       return False
     return True
 
-  def RunPerformanceTestAndParseResults(self, command_to_run, metric,
-      reset_on_first_run=False, upload_on_last_run=False, results_label=None):
-    """Runs a performance test on the current revision by executing the
-    'command_to_run' and parses the results.
+  def RunPerformanceTestAndParseResults(
+      self, command_to_run, metric, reset_on_first_run=False,
+      upload_on_last_run=False, results_label=None):
+    """Runs a performance test on the current revision and parses the results.
 
     Args:
       command_to_run: The command to be run to execute the performance test.
       metric: The metric to parse out from the results of the performance test.
+          This is the result chart name and trace name, separated by slash.
+      reset_on_first_run: If True, pass the flag --reset-results on first run.
+      upload_on_last_run: If True, pass the flag --upload-results on last run.
+      results_label: A value for the option flag --results-label.
+          The arguments reset_on_first_run, upload_on_last_run and results_label
+          are all ignored if the test is not a Telemetry test.
 
     Returns:
-      On success, it will return a tuple of the average value of the metric,
-      and a success code of 0.
+      (values dict, 0) if --debug_ignore_perf_test was passed.
+      (values dict, 0, test output) if the test was run successfully.
+      (error message, -1) if the test couldn't be run.
+      (error message, -1, test output) if the test ran but there was an error.
     """
+    success_code, failure_code = 0, -1
 
     if self.opts.debug_ignore_perf_test:
-      return ({'mean': 0.0, 'std_err': 0.0, 'std_dev': 0.0, 'values': [0.0]}, 0)
+      fake_results = {
+          'mean': 0.0,
+          'std_err': 0.0,
+          'std_dev': 0.0,
+          'values': [0.0]
+      }
+      return (fake_results, success_code)
 
     if IsWindows():
       command_to_run = command_to_run.replace('/', r'\\')
@@ -1954,18 +2006,16 @@
     args = shlex.split(command_to_run)
 
     if not self._GenerateProfileIfNecessary(args):
-      return ('Failed to generate profile for performance test.', -1)
+      err_text = 'Failed to generate profile for performance test.'
+      return (err_text, failure_code)
 
-    # If running a telemetry test for cros, insert the remote ip, and
+    # If running a Telemetry test for Chrome OS, insert the remote IP and
     # identity parameters.
     is_telemetry = bisect_utils.IsTelemetryCommand(command_to_run)
     if self.opts.target_platform == 'cros' and is_telemetry:
       args.append('--remote=%s' % self.opts.cros_remote_ip)
       args.append('--identity=%s' % CROS_TEST_KEY_PATH)
 
-    cwd = os.getcwd()
-    os.chdir(self.src_cwd)
-
     start_time = time.time()
 
     metric_values = []
@@ -1981,18 +2031,19 @@
             current_args.append('--upload-results')
           if results_label:
             current_args.append('--results-label=%s' % results_label)
-        (output, return_code) = RunProcessAndRetrieveOutput(current_args)
+        (output, return_code) = RunProcessAndRetrieveOutput(current_args,
+                                                            cwd=self.src_cwd)
       except OSError, e:
         if e.errno == errno.ENOENT:
-          err_text  = ("Something went wrong running the performance test. "
-              "Please review the command line:\n\n")
+          err_text  = ('Something went wrong running the performance test. '
+                       'Please review the command line:\n\n')
           if 'src/' in ' '.join(args):
-            err_text += ("Check that you haven't accidentally specified a path "
-                "with src/ in the command.\n\n")
+            err_text += ('Check that you haven\'t accidentally specified a '
+                         'path with src/ in the command.\n\n')
           err_text += ' '.join(args)
           err_text += '\n'
 
-          return (err_text, -1)
+          return (err_text, failure_code)
         raise
 
       output_of_all_runs += output
@@ -2006,29 +2057,29 @@
       if elapsed_minutes >= self.opts.max_time_minutes or not metric_values:
         break
 
-    os.chdir(cwd)
+    if len(metric_values) == 0:
+      err_text = 'Metric %s was not found in the test output.' % metric
+      # TODO(qyearsley): Consider also getting and displaying a list of metrics
+      # that were found in the output here.
+      return (err_text, failure_code, output_of_all_runs)
 
     # Need to get the average value if there were multiple values.
-    if metric_values:
-      truncated_mean = CalculateTruncatedMean(metric_values,
-          self.opts.truncate_percent)
-      standard_err = CalculateStandardError(metric_values)
-      standard_dev = CalculateStandardDeviation(metric_values)
+    truncated_mean = CalculateTruncatedMean(metric_values,
+        self.opts.truncate_percent)
+    standard_err = CalculateStandardError(metric_values)
+    standard_dev = CalculateStandardDeviation(metric_values)
 
-      values = {
-        'mean': truncated_mean,
-        'std_err': standard_err,
-        'std_dev': standard_dev,
-        'values': metric_values,
-      }
+    values = {
+      'mean': truncated_mean,
+      'std_err': standard_err,
+      'std_dev': standard_dev,
+      'values': metric_values,
+    }
 
-      print 'Results of performance test: %12f %12f' % (
-          truncated_mean, standard_err)
-      print
-      return (values, 0, output_of_all_runs)
-    else:
-      return ('Invalid metric specified, or no values returned from '
-          'performance test.', -1, output_of_all_runs)
+    print 'Results of performance test: %12f %12f' % (
+        truncated_mean, standard_err)
+    print
+    return (values, success_code, output_of_all_runs)
 
   def FindAllRevisionsToSync(self, revision, depot):
     """Finds all dependant revisions and depots that need to be synced for a
@@ -3137,8 +3188,10 @@
       mean_of_bad_runs = CalculateMean(broken_mean)
       mean_of_good_runs = CalculateMean(working_mean)
 
-      regression_size = math.fabs(max(mean_of_good_runs, mean_of_bad_runs) /
-          max(0.0001, min(mean_of_good_runs, mean_of_bad_runs))) * 100.0 - 100.0
+      regression_size = 100 * CalculateRelativeChange(mean_of_good_runs,
+                                                      mean_of_bad_runs)
+      if math.isnan(regression_size):
+        regression_size = 'zero-to-nonzero'
 
       regression_std_err = math.fabs(CalculatePooledStandardError(
           [working_mean, broken_mean]) /
diff --git a/tools/bisect-perf-regression_test.py b/tools/bisect-perf-regression_test.py
index 44d526e..5d77643 100644
--- a/tools/bisect-perf-regression_test.py
+++ b/tools/bisect-perf-regression_test.py
@@ -2,6 +2,7 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
+import math
 import unittest
 
 # Special import necessary because filename contains dash characters.
@@ -75,5 +76,27 @@
     self.assertEqual(
         100, bisect_perf_module.CalculateConfidence(bad_values, good_values))
 
+  def testCalculateRelativeChange(self):
+    """Tests the common cases for calculating relative change."""
+    # The change is relative to the first value, regardless of which is bigger.
+    self.assertEqual(0.5, bisect_perf_module.CalculateRelativeChange(1.0, 1.5))
+    self.assertEqual(0.5, bisect_perf_module.CalculateRelativeChange(2.0, 1.0))
+
+  def testCalculateRelativeChangeFromZero(self):
+    """Tests what happens when relative change from zero is calculated."""
+    # If the first number is zero, then the result is not a number.
+    self.assertEqual(0, bisect_perf_module.CalculateRelativeChange(0, 0))
+    self.assertTrue(
+        math.isnan(bisect_perf_module.CalculateRelativeChange(0, 1)))
+    self.assertTrue(
+        math.isnan(bisect_perf_module.CalculateRelativeChange(0, -1)))
+
+  def testCalculateRelativeChangeWithNegatives(self):
+    """Tests that relative change given is always positive."""
+    self.assertEqual(3.0, bisect_perf_module.CalculateRelativeChange(-1, 2))
+    self.assertEqual(3.0, bisect_perf_module.CalculateRelativeChange(1, -2))
+    self.assertEqual(1.0, bisect_perf_module.CalculateRelativeChange(-1, -2))
+
+
 if __name__ == '__main__':
   unittest.main()
diff --git a/tools/bisect_utils.py b/tools/bisect_utils.py
index 50454f0..68dc19a 100644
--- a/tools/bisect_utils.py
+++ b/tools/bisect_utils.py
@@ -454,6 +454,15 @@
   for line in out.splitlines():
     (k, _, v) = line.partition('=')
     os.environ[k] = v
+  # envsetup.sh no longer sets OS=android to GYP_DEFINES env variable
+  # (CL/170273005). Set this variable explicitly inorder to build chrome on
+  # android.
+  try:
+    if 'OS=android' not in os.environ['GYP_DEFINES']:
+      os.environ['GYP_DEFINES'] = '%s %s' % (os.environ['GYP_DEFINES'],
+                                              'OS=android')
+  except KeyError:
+    os.environ['GYP_DEFINES'] = 'OS=android'
 
   return not proc.returncode
 
diff --git a/tools/checkdeps/builddeps.py b/tools/checkdeps/builddeps.py
index 5fa3793..01e107b 100755
--- a/tools/checkdeps/builddeps.py
+++ b/tools/checkdeps/builddeps.py
@@ -120,16 +120,14 @@
       being_tested: Set to true to ignore the DEPS file at tools/checkdeps/DEPS.
       ignore_temp_rules: Ignore rules that start with Rule.TEMP_ALLOW ("!").
     """
-    self.base_directory = base_directory
+    base_directory = (base_directory or
+                      os.path.join(os.path.dirname(__file__), '..', '..'))
+    self.base_directory = os.path.abspath(base_directory)
     self.verbose = verbose
     self._under_test = being_tested
     self._ignore_temp_rules = ignore_temp_rules
     self._ignore_specific_rules = ignore_specific_rules
 
-    if not base_directory:
-      self.base_directory = os.path.abspath(
-        os.path.join(os.path.abspath(os.path.dirname(__file__)), '..', '..'))
-
     self.git_source_directories = set()
     self._AddGitSourceDirectories()
 
diff --git a/tools/checkdeps/checkdeps.py b/tools/checkdeps/checkdeps.py
index 3789b0e..6e815c0 100755
--- a/tools/checkdeps/checkdeps.py
+++ b/tools/checkdeps/checkdeps.py
@@ -195,21 +195,26 @@
                              verbose=options.verbose,
                              ignore_temp_rules=options.ignore_temp_rules,
                              skip_tests=options.skip_tests)
+  base_directory = deps_checker.base_directory  # Default if needed, normalized
 
   # Figure out which directory we have to check.
-  start_dir = deps_checker.base_directory
+  start_dir = base_directory
   if len(args) == 1:
     # Directory specified. Start here. It's supposed to be relative to the
     # base directory.
-    start_dir = os.path.abspath(
-        os.path.join(deps_checker.base_directory, args[0]))
+    start_dir = os.path.abspath(os.path.join(base_directory, args[0]))
   elif len(args) >= 2 or (options.generate_temp_rules and
                           options.count_violations):
     # More than one argument, or incompatible flags, we don't handle this.
     PrintUsage()
     return 1
 
-  print 'Using base directory:', deps_checker.base_directory
+  if not start_dir.startswith(deps_checker.base_directory):
+    print 'Directory to check must be a subdirectory of the base directory,'
+    print 'but %s is not a subdirectory of %s' % (start_dir, base_directory)
+    return 1
+
+  print 'Using base directory:', base_directory
   print 'Checking:', start_dir
 
   if options.generate_temp_rules:
diff --git a/tools/clang/blink_gc_plugin/Makefile b/tools/clang/blink_gc_plugin/Makefile
index f6ef456..92a71ea 100644
--- a/tools/clang/blink_gc_plugin/Makefile
+++ b/tools/clang/blink_gc_plugin/Makefile
@@ -9,7 +9,7 @@
 CLANG_LEVEL := ../..
 
 # This line is read by update.sh and other scripts in tools/clang/scripts
-LIBRARYNAME = BlinkGCPlugin_5
+LIBRARYNAME = BlinkGCPlugin_7
 
 LINK_LIBS_IN_SHARED = 0
 SHARED_LIBRARY = 1
diff --git a/tools/clang/plugins/tests/test.sh b/tools/clang/plugins/tests/test.sh
index 1a27f48..cbb32e7 100755
--- a/tools/clang/plugins/tests/test.sh
+++ b/tools/clang/plugins/tests/test.sh
@@ -27,6 +27,11 @@
   if [ -e "${3}" ]; then
     flags="$(cat "${3}")"
   fi
+
+  if [ "$(uname -s)" = "Darwin" ]; then
+    flags="${flags} -isysroot $(xcrun --show-sdk-path) -stdlib=libstdc++"
+  fi
+
   local output="$("${CLANG_DIR}"/bin/clang -c -Wno-c++11-extensions \
       -Xclang -load -Xclang "${CLANG_DIR}"/lib/libFindBadConstructs.${LIB} \
       -Xclang -add-plugin -Xclang find-bad-constructs ${flags} ${1} 2>&1)"
diff --git a/tools/clang/scripts/update.sh b/tools/clang/scripts/update.sh
index a40224c..bdf701d 100755
--- a/tools/clang/scripts/update.sh
+++ b/tools/clang/scripts/update.sh
@@ -8,7 +8,7 @@
 # Do NOT CHANGE this if you don't know what you're doing -- see
 # https://code.google.com/p/chromium/wiki/UpdatingClang
 # Reverting problematic clang rolls is safe, though.
-CLANG_REVISION=204777
+CLANG_REVISION=206824
 
 THIS_DIR="$(dirname "${0}")"
 LLVM_DIR="${THIS_DIR}/../../../third_party/llvm"
@@ -319,6 +319,9 @@
   # Use the specified gcc installation for building.
   export CC="$gcc_toolchain/bin/gcc"
   export CXX="$gcc_toolchain/bin/g++"
+  # Set LD_LIBRARY_PATH to make auxiliary targets (tablegen, bootstrap compiler,
+  # etc.) find the .so.
+  export LD_LIBRARY_PATH="$(dirname $(${CXX} -print-file-name=libstdc++.so.6))"
 fi
 
 export CFLAGS=""
diff --git a/tools/find_runtime_symbols/find_runtime_symbols.py b/tools/find_runtime_symbols/find_runtime_symbols.py
index e96db4f..0388741 100755
--- a/tools/find_runtime_symbols/find_runtime_symbols.py
+++ b/tools/find_runtime_symbols/find_runtime_symbols.py
@@ -201,7 +201,7 @@
   symbols_dict = find_runtime_symbols(FUNCTION_SYMBOLS,
                                       symbols_in_process,
                                       sys.stdin)
-  for address, symbol in symbols_dict:
+  for address, symbol in symbols_dict.iteritems():
     if symbol:
       print '%016x %s' % (address, symbol)
     else:
diff --git a/tools/gdb/gdb_chrome.py b/tools/gdb/gdb_chrome.py
index 8c5405c..aa2e55a 100644
--- a/tools/gdb/gdb_chrome.py
+++ b/tools/gdb/gdb_chrome.py
@@ -45,6 +45,25 @@
     return '((%s)%s)' % (ptr.dynamic_type, ptr)
 
 
+def yield_fields(val):
+    """Use this in a printer's children() method to print an object's fields.
+
+    e.g.
+      def children():
+        for result in yield_fields(self.val):
+          yield result
+    """
+    try:
+        fields = val.type.target().fields()
+    except:
+        fields = val.type.fields()
+    for field in fields:
+        if field.is_base_class:
+            yield (field.name, val.cast(gdb.lookup_type(field.name)))
+        else:
+            yield (field.name, val[field.name])
+
+
 class Printer(object):
     def __init__(self, val):
         self.val = val
@@ -141,6 +160,18 @@
                    LocationPrinter)
 
 
+class PendingTaskPrinter(Printer):
+    def to_string(self):
+        return 'From %s' % (self.val['posted_from'],)
+
+    def children(self):
+        for result in yield_fields(self.val):
+            if result[0] not in ('task', 'posted_from'):
+                yield result
+pp_set.add_printer('base::PendingTask', '^base::PendingTask$',
+                   PendingTaskPrinter)
+
+
 class LockPrinter(Printer):
     def to_string(self):
         try:
@@ -201,8 +232,7 @@
 
     def children(self):
         yield ('header_', self.header().dereference())
-        yield ('capacity_', self.val['capacity_'])
-        yield ('variable_buffer_offset_', self.val['variable_buffer_offset_'])
+        yield ('capacity_after_header_', self.val['capacity_after_header_'])
         for field in self.val.type.fields():
             if field.is_base_class:
                 continue
@@ -275,8 +305,9 @@
 
     def children(self):
         yield ('id_', self.val['id_'])
-        yield ('render_widget_hosts_',
-               self.val['render_widget_hosts_']['data_'])
+        yield ('listeners_',
+               self.val['listeners_']['data_'])
+        yield ('worker_ref_count_', self.val['worker_ref_count_'])
         yield ('fast_shutdown_started_', self.val['fast_shutdown_started_'])
         yield ('deleting_soon_', self.val['deleting_soon_'])
         yield ('pending_views_', self.val['pending_views_'])
diff --git a/tools/gn/BUILD.gn b/tools/gn/BUILD.gn
index 20aea83..9712706 100644
--- a/tools/gn/BUILD.gn
+++ b/tools/gn/BUILD.gn
@@ -173,6 +173,7 @@
   sources = [
     "builder_unittest.cc",
     "c_include_iterator_unittest.cc",
+    "config_values_extractors_unittest.cc",
     "escape_unittest.cc",
     "filesystem_utils_unittest.cc",
     "file_template_unittest.cc",
diff --git a/tools/gn/bin/linux/args.txt b/tools/gn/bin/linux/args.txt
new file mode 100644
index 0000000..6e992f4
--- /dev/null
+++ b/tools/gn/bin/linux/args.txt
@@ -0,0 +1,2 @@
+# These are the build arguments used for a 64-bit Linux build:
+use_ozone=true symbol_level=0 is_official_build=true is_debug=false is_chrome_branded=true cpu_arch="x64"
diff --git a/tools/gn/bin/linux/args32.txt b/tools/gn/bin/linux/args32.txt
new file mode 100644
index 0000000..b17b413
--- /dev/null
+++ b/tools/gn/bin/linux/args32.txt
@@ -0,0 +1,2 @@
+# These are the build arguments used for a 32-bit Linux build:
+use_ozone=true symbol_level=0 is_official_build=true is_debug=false is_chrome_branded=true cpu_arch="x86"
diff --git a/tools/gn/bin/linux/gn.sha1 b/tools/gn/bin/linux/gn.sha1
index 853d740..a97f17c 100644
--- a/tools/gn/bin/linux/gn.sha1
+++ b/tools/gn/bin/linux/gn.sha1
@@ -1 +1 @@
-757c4f0da61041a2de8ae881e88107c8ed7d1942
\ No newline at end of file
+5d83f785d62856cc6f9817608c5e25fc11803748
\ No newline at end of file
diff --git a/tools/gn/bin/linux/gn32.sha1 b/tools/gn/bin/linux/gn32.sha1
index 58424e9..5f5ef66 100644
--- a/tools/gn/bin/linux/gn32.sha1
+++ b/tools/gn/bin/linux/gn32.sha1
@@ -1 +1 @@
-058076b1160c3c32b7d660a7452f77e5f732b1a5
\ No newline at end of file
+cdb58345bba399de11e45c255f9b598aba984820
\ No newline at end of file
diff --git a/tools/gn/bin/linux/upload b/tools/gn/bin/linux/upload
new file mode 100755
index 0000000..591676c
--- /dev/null
+++ b/tools/gn/bin/linux/upload
@@ -0,0 +1,3 @@
+#!/bin/sh
+upload_to_google_storage.py -b chromium-gn gn
+upload_to_google_storage.py -b chromium-gn gn32
diff --git a/tools/gn/bin/mac/args.txt b/tools/gn/bin/mac/args.txt
new file mode 100644
index 0000000..d83bbd8
--- /dev/null
+++ b/tools/gn/bin/mac/args.txt
@@ -0,0 +1,2 @@
+# These are the build arguments for a Mac release GN build:
+is_debug=false symbol_level=0
diff --git a/tools/gn/bin/mac/gn.sha1 b/tools/gn/bin/mac/gn.sha1
index 02f099d..6d33175 100644
--- a/tools/gn/bin/mac/gn.sha1
+++ b/tools/gn/bin/mac/gn.sha1
@@ -1 +1 @@
-1a3cf3a53f691546d0660d6c2b7e4661f6200fcc
+1d037c843cc1ae86203dee80d6461720b1058413
diff --git a/tools/gn/bin/mac/upload b/tools/gn/bin/mac/upload
new file mode 100755
index 0000000..8930b32
--- /dev/null
+++ b/tools/gn/bin/mac/upload
@@ -0,0 +1,2 @@
+#!/bin/sh
+upload_to_google_storage.py -b chromium-gn gn
diff --git a/tools/gn/bin/win/args.txt b/tools/gn/bin/win/args.txt
new file mode 100644
index 0000000..e4562fc
--- /dev/null
+++ b/tools/gn/bin/win/args.txt
@@ -0,0 +1,2 @@
+# These are the build arguments for a Windows release build.
+is_official_build=true symbol_level=2 is_debug=false
diff --git a/tools/gn/bin/win/gn.exe.sha1 b/tools/gn/bin/win/gn.exe.sha1
index 0b31676..86893a2 100644
--- a/tools/gn/bin/win/gn.exe.sha1
+++ b/tools/gn/bin/win/gn.exe.sha1
@@ -1 +1,2 @@
-7462bcb2bb0b8877dbf6ba6d7ae5090b1093817e
+deb2bfcaaa9eb465ada1b9f407e19361f03370e9
+
diff --git a/tools/gn/bin/win/upload.bat b/tools/gn/bin/win/upload.bat
new file mode 100755
index 0000000..8a3d651
--- /dev/null
+++ b/tools/gn/bin/win/upload.bat
@@ -0,0 +1 @@
+python C:\apps\depot_tools\upload_to_google_storage.py -b chromium-gn gn.exe
diff --git a/tools/gn/bootstrap/bootstrap.py b/tools/gn/bootstrap/bootstrap.py
index d98894c..c44cd2e 100755
--- a/tools/gn/bootstrap/bootstrap.py
+++ b/tools/gn/bootstrap/bootstrap.py
@@ -68,7 +68,7 @@
       build_gn_with_ninja_manually(tempdir)
 
       print 'Building gn using itself to %s...' % build_rel
-      build_gn_with_gn(os.path.join(tempdir, 'gn'), build_root, options.debug)
+      build_gn_with_gn(os.path.join(tempdir, 'gn'), build_rel, options.debug)
 
       if options.output:
         # Preserve the executable permission bit.
@@ -129,6 +129,7 @@
       'base/files/file_enumerator.cc',
       'base/files/file_path.cc',
       'base/files/file_path_constants.cc',
+      'base/files/scoped_file.cc',
       'base/json/json_parser.cc',
       'base/json/json_reader.cc',
       'base/json/json_string_value_serializer.cc',
@@ -315,7 +316,7 @@
 
 
 def build_gn_with_gn(temp_gn, build_dir, debug):
-  cmd = [temp_gn, '--output=%s' % build_dir]
+  cmd = [temp_gn, 'gen', build_dir]
   if not debug:
     cmd.append('--args=is_debug=false')
   check_call(cmd)
diff --git a/tools/gn/config_values_extractors_unittest.cc b/tools/gn/config_values_extractors_unittest.cc
new file mode 100644
index 0000000..0076b9e
--- /dev/null
+++ b/tools/gn/config_values_extractors_unittest.cc
@@ -0,0 +1,121 @@
+// 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.
+
+#include <sstream>
+
+#include "testing/gtest/include/gtest/gtest.h"
+#include "tools/gn/config.h"
+#include "tools/gn/config_values_extractors.h"
+#include "tools/gn/target.h"
+#include "tools/gn/test_with_scope.h"
+
+namespace {
+
+struct FlagWriter {
+  void operator()(const std::string& dir, std::ostream& out) const {
+    out << dir << " ";
+  }
+};
+
+struct IncludeWriter {
+  void operator()(const SourceDir& dir, std::ostream& out) const {
+    out << dir.value() << " ";
+  }
+};
+
+}  // namespace
+
+TEST(ConfigValuesExtractors, IncludeOrdering) {
+  TestWithScope setup;
+
+  // Construct a chain of dependencies: target -> dep1 -> dep2
+  // Add representative values: cflags (opaque, always copied) and include_dirs
+  // (uniquified) to each one so we can check what comes out the other end.
+
+  // Set up dep2, direct and all dependent configs.
+  Config dep2_all(setup.settings(), Label(SourceDir("//dep2/"), "all"));
+  dep2_all.config_values().cflags().push_back("--dep2-all");
+  dep2_all.config_values().include_dirs().push_back(SourceDir("//dep2/all/"));
+
+  Config dep2_direct(setup.settings(), Label(SourceDir("//dep2/"), "direct"));
+  dep2_direct.config_values().cflags().push_back("--dep2-direct");
+  dep2_direct.config_values().include_dirs().push_back(
+      SourceDir("//dep2/direct/"));
+
+  Target dep2(setup.settings(), Label(SourceDir("//dep2/"), "dep2"));
+  dep2.set_output_type(Target::SOURCE_SET);
+  dep2.all_dependent_configs().push_back(LabelConfigPair(&dep2_all));
+  dep2.direct_dependent_configs().push_back(LabelConfigPair(&dep2_direct));
+
+  // Set up dep1, direct and all dependent configs.
+  Config dep1_all(setup.settings(), Label(SourceDir("//dep1/"), "all"));
+  dep1_all.config_values().cflags().push_back("--dep1-all");
+  dep1_all.config_values().include_dirs().push_back(SourceDir("//dep1/all/"));
+
+  Config dep1_direct(setup.settings(), Label(SourceDir("//dep1/"), "direct"));
+  dep1_direct.config_values().cflags().push_back("--dep1-direct");
+  dep1_direct.config_values().include_dirs().push_back(
+      SourceDir("//dep1/direct/"));
+
+  Target dep1(setup.settings(), Label(SourceDir("//dep1/"), "dep1"));
+  dep1.set_output_type(Target::SOURCE_SET);
+  dep1.all_dependent_configs().push_back(LabelConfigPair(&dep1_all));
+  dep1.direct_dependent_configs().push_back(LabelConfigPair(&dep1_direct));
+  dep1.deps().push_back(LabelTargetPair(&dep2));
+
+  // Set up target, direct and all dependent configs.
+  Config target_all(setup.settings(), Label(SourceDir("//target/"), "all"));
+  target_all.config_values().cflags().push_back("--target-all");
+  target_all.config_values().include_dirs().push_back(
+      SourceDir("//target/all/"));
+
+  Config target_direct(setup.settings(),
+                       Label(SourceDir("//target/"), "direct"));
+  target_direct.config_values().cflags().push_back("--target-direct");
+  target_direct.config_values().include_dirs().push_back(
+      SourceDir("//target/direct/"));
+
+  // This config is applied directly to target.
+  Config target_config(setup.settings(),
+                       Label(SourceDir("//target/"), "config"));
+  target_config.config_values().cflags().push_back("--target-config");
+  target_config.config_values().include_dirs().push_back(
+      SourceDir("//target/config/"));
+
+  Target target(setup.settings(), Label(SourceDir("//target/"), "target"));
+  target.set_output_type(Target::SOURCE_SET);
+  target.all_dependent_configs().push_back(LabelConfigPair(&target_all));
+  target.direct_dependent_configs().push_back(LabelConfigPair(&target_direct));
+  target.configs().push_back(LabelConfigPair(&target_config));
+  target.deps().push_back(LabelTargetPair(&dep1));
+
+
+  // Additionally add some values directly on "target".
+  target.config_values().cflags().push_back("--target");
+  target.config_values().include_dirs().push_back(
+      SourceDir("//target/"));
+
+  // Mark targets resolved. This should push dependent configs.
+  dep2.OnResolved();
+  dep1.OnResolved();
+  target.OnResolved();
+
+  // Verify cflags by serializing.
+  std::ostringstream flag_out;
+  FlagWriter flag_writer;
+  RecursiveTargetConfigToStream<std::string, FlagWriter>(
+      &target, &ConfigValues::cflags, flag_writer, flag_out);
+  EXPECT_EQ(flag_out.str(),
+            "--target --target-config --target-all --target-direct "
+            "--dep1-all --dep2-all --dep1-direct ");
+
+  // Verify include dirs by serializing.
+  std::ostringstream include_out;
+  IncludeWriter include_writer;
+  RecursiveTargetConfigToStream<SourceDir, IncludeWriter>(
+      &target, &ConfigValues::include_dirs, include_writer, include_out);
+  EXPECT_EQ(include_out.str(),
+            "//target/ //target/config/ //target/all/ //target/direct/ "
+            "//dep1/all/ //dep2/all/ //dep1/direct/ ");
+}
diff --git a/tools/gn/filesystem_utils.cc b/tools/gn/filesystem_utils.cc
index 4e7e604..a5787a2 100644
--- a/tools/gn/filesystem_utils.cc
+++ b/tools/gn/filesystem_utils.cc
@@ -179,7 +179,7 @@
     return SOURCE_MM;
   if (extension == "rc")
     return SOURCE_RC;
-  if (extension == "S")
+  if (extension == "S" || extension == "s")
     return SOURCE_S;
 
   return SOURCE_UNKNOWN;
diff --git a/tools/gn/gn.gyp b/tools/gn/gn.gyp
index 0ae37ca..75f72c4 100644
--- a/tools/gn/gn.gyp
+++ b/tools/gn/gn.gyp
@@ -174,6 +174,7 @@
       'sources': [
         'builder_unittest.cc',
         'c_include_iterator_unittest.cc',
+        'config_values_extractors_unittest.cc',
         'escape_unittest.cc',
         'filesystem_utils_unittest.cc',
         'file_template_unittest.cc',
diff --git a/tools/gn/ninja_helper.cc b/tools/gn/ninja_helper.cc
index f84d2b1..e5d1ff8 100644
--- a/tools/gn/ninja_helper.cc
+++ b/tools/gn/ninja_helper.cc
@@ -212,23 +212,16 @@
     return prefix + "cc";
   if (type == SOURCE_CC)
     return prefix + "cxx";
+  if (type == SOURCE_M)
+    return prefix + "objc";
+  if (type == SOURCE_MM)
+    return prefix + "objcxx";
+  if (type == SOURCE_RC)
+    return prefix + "rc";
+  if (type == SOURCE_S)
+    return prefix + "cc";  // Assembly files just get compiled by CC.
 
   // TODO(brettw) asm files.
 
-  if (settings->IsMac()) {
-    if (type == SOURCE_M)
-      return prefix + "objc";
-    if (type == SOURCE_MM)
-      return prefix + "objcxx";
-  }
-
-  if (settings->IsWin()) {
-    if (type == SOURCE_RC)
-      return prefix + "rc";
-  } else {
-    if (type == SOURCE_S)
-      return prefix + "cc";  // Assembly files just get compiled by CC.
-  }
-
   return std::string();
 }
diff --git a/tools/gn/operators.cc b/tools/gn/operators.cc
index d22b7d1..30da234 100644
--- a/tools/gn/operators.cc
+++ b/tools/gn/operators.cc
@@ -53,6 +53,25 @@
   }
 }
 
+Value GetValueOrFillError(const BinaryOpNode* op_node,
+                          const ParseNode* node,
+                          const char* name,
+                          Scope* scope,
+                          Err* err) {
+  Value value = node->Execute(scope, err);
+  if (err->has_error())
+    return Value();
+  if (value.type() == Value::NONE) {
+    *err = Err(op_node->op(),
+               "Operator requires a value.",
+               "This thing on the " + std::string(name) +
+                   " does not evaluate to a value.");
+    err->AppendRange(node->GetRange());
+    return Value();
+  }
+  return value;
+}
+
 void RemoveMatchesFromList(const BinaryOpNode* op_node,
                            Value* list,
                            const Value& to_remove,
@@ -412,34 +431,55 @@
 
 Value ExecuteOr(Scope* scope,
                 const BinaryOpNode* op_node,
-                const Value& left,
-                const Value& right,
+                const ParseNode* left_node,
+                const ParseNode* right_node,
                 Err* err) {
+  Value left = GetValueOrFillError(op_node, left_node, "left", scope, err);
+  if (err->has_error())
+    return Value();
   if (left.type() != Value::BOOLEAN) {
     *err = Err(op_node->left(), "Left side of || operator is not a boolean.",
         "Type is \"" + std::string(Value::DescribeType(left.type())) +
         "\" instead.");
     return Value();
-  } else if (right.type() != Value::BOOLEAN) {
+  }
+  if (left.boolean_value())
+    return Value(op_node, left.boolean_value());
+
+  Value right = GetValueOrFillError(op_node, right_node, "right", scope, err);
+  if (err->has_error())
+    return Value();
+  if (right.type() != Value::BOOLEAN) {
     *err = Err(op_node->right(), "Right side of || operator is not a boolean.",
         "Type is \"" + std::string(Value::DescribeType(right.type())) +
         "\" instead.");
     return Value();
   }
+
   return Value(op_node, left.boolean_value() || right.boolean_value());
 }
 
 Value ExecuteAnd(Scope* scope,
                  const BinaryOpNode* op_node,
-                 const Value& left,
-                 const Value& right,
+                 const ParseNode* left_node,
+                 const ParseNode* right_node,
                  Err* err) {
+  Value left = GetValueOrFillError(op_node, left_node, "left", scope, err);
+  if (err->has_error())
+    return Value();
   if (left.type() != Value::BOOLEAN) {
     *err = Err(op_node->left(), "Left side of && operator is not a boolean.",
         "Type is \"" + std::string(Value::DescribeType(left.type())) +
         "\" instead.");
     return Value();
-  } else if (right.type() != Value::BOOLEAN) {
+  }
+  if (!left.boolean_value())
+    return Value(op_node, left.boolean_value());
+
+  Value right = GetValueOrFillError(op_node, right_node, "right", scope, err);
+  if (err->has_error())
+    return Value();
+  if (right.type() != Value::BOOLEAN) {
     *err = Err(op_node->right(), "Right side of && operator is not a boolean.",
         "Type is \"" + std::string(Value::DescribeType(right.type())) +
         "\" instead.");
@@ -544,28 +584,15 @@
     return Value();
   }
 
-  // Left value.
-  Value left_value = left->Execute(scope, err);
-  if (err->has_error())
-    return Value();
-  if (left_value.type() == Value::NONE) {
-    *err = Err(op, "Operator requires a value.",
-               "This thing on the left does not evaluate to a value.");
-    err->AppendRange(left->GetRange());
-    return Value();
-  }
+  // ||, &&. Passed the node instead of the value so that they can avoid
+  // evaluating the RHS on early-out.
+  if (op.type() == Token::BOOLEAN_OR)
+    return ExecuteOr(scope, op_node, left, right, err);
+  if (op.type() == Token::BOOLEAN_AND)
+    return ExecuteAnd(scope, op_node, left, right, err);
 
-  // Right value. Note: don't move this above to share code with the lvalue
-  // version since in this case we want to execute the left side first.
-  Value right_value = right->Execute(scope, err);
-  if (err->has_error())
-    return Value();
-  if (right_value.type() == Value::NONE) {
-    *err = Err(op, "Operator requires a value.",
-               "This thing on the right does not evaluate to a value.");
-    err->AppendRange(right->GetRange());
-    return Value();
-  }
+  Value left_value = GetValueOrFillError(op_node, left, "left", scope, err);
+  Value right_value = GetValueOrFillError(op_node, right, "right", scope, err);
 
   // +, -.
   if (op.type() == Token::MINUS)
@@ -587,11 +614,5 @@
   if (op.type() == Token::LESS_THAN)
     return ExecuteLess(scope, op_node, left_value, right_value, err);
 
-  // ||, &&.
-  if (op.type() == Token::BOOLEAN_OR)
-    return ExecuteOr(scope, op_node, left_value, right_value, err);
-  if (op.type() == Token::BOOLEAN_AND)
-    return ExecuteAnd(scope, op_node, left_value, right_value, err);
-
   return Value();
 }
diff --git a/tools/gn/operators_unittest.cc b/tools/gn/operators_unittest.cc
index 529c883..2ad91b8 100644
--- a/tools/gn/operators_unittest.cc
+++ b/tools/gn/operators_unittest.cc
@@ -151,3 +151,53 @@
   ExecuteBinaryOperator(setup.scope(), &node, node.left(), node.right(), &err);
   EXPECT_TRUE(err.has_error());
 }
+
+TEST(Operators, ShortCircuitAnd) {
+  Err err;
+  TestWithScope setup;
+
+  // Set up the operator.
+  BinaryOpNode node;
+  const char token_value[] = "&&";
+  Token op(Location(), Token::BOOLEAN_AND, token_value);
+  node.set_op(op);
+
+  // Set the left to false.
+  const char false_str[] = "false";
+  Token false_tok(Location(), Token::FALSE_TOKEN, false_str);
+  node.set_left(scoped_ptr<ParseNode>(new LiteralNode(false_tok)));
+
+  // Set right as foo, but don't define a value for it.
+  const char foo[] = "foo";
+  Token identifier_token(Location(), Token::IDENTIFIER, foo);
+  node.set_right(scoped_ptr<ParseNode>(new IdentifierNode(identifier_token)));
+
+  Value ret = ExecuteBinaryOperator(setup.scope(), &node, node.left(),
+                                    node.right(), &err);
+  EXPECT_FALSE(err.has_error());
+}
+
+TEST(Operators, ShortCircuitOr) {
+  Err err;
+  TestWithScope setup;
+
+  // Set up the operator.
+  BinaryOpNode node;
+  const char token_value[] = "||";
+  Token op(Location(), Token::BOOLEAN_OR, token_value);
+  node.set_op(op);
+
+  // Set the left to false.
+  const char false_str[] = "true";
+  Token false_tok(Location(), Token::TRUE_TOKEN, false_str);
+  node.set_left(scoped_ptr<ParseNode>(new LiteralNode(false_tok)));
+
+  // Set right as foo, but don't define a value for it.
+  const char foo[] = "foo";
+  Token identifier_token(Location(), Token::IDENTIFIER, foo);
+  node.set_right(scoped_ptr<ParseNode>(new IdentifierNode(identifier_token)));
+
+  Value ret = ExecuteBinaryOperator(setup.scope(), &node, node.left(),
+                                    node.right(), &err);
+  EXPECT_FALSE(err.has_error());
+}
diff --git a/tools/gn/secondary/chrome/BUILD.gn b/tools/gn/secondary/chrome/BUILD.gn
index 4ffae6d..1d77368 100644
--- a/tools/gn/secondary/chrome/BUILD.gn
+++ b/tools/gn/secondary/chrome/BUILD.gn
@@ -81,7 +81,7 @@
 }
 
 static_library("common") {
-  if (use_nss && is_linux) {
+  if (!use_openssl && is_linux) {
     # common/net uses NSS.
     # TODO(brettw) have a better way to express this without having to do
     # "if (use_nss)" everywhere.
@@ -94,19 +94,23 @@
 # TODO(brettw) move to browser/devtools/BUILD.gn
 source_set("debugger") {
   sources = [
-    "browser/devtools/adb/android_rsa.cc",
-    "browser/devtools/adb/android_rsa.h",
-    "browser/devtools/adb/android_usb_device.cc",
-    "browser/devtools/adb/android_usb_device.h",
-    "browser/devtools/adb/android_usb_socket.cc",
-    "browser/devtools/adb/android_usb_socket.h",
-    "browser/devtools/adb_client_socket.cc",
-    "browser/devtools/adb_client_socket.h",
-    "browser/devtools/adb_web_socket.cc",
+    "browser/devtools/device/adb/adb_client_socket.cc",
+    "browser/devtools/device/adb/adb_client_socket.h",
+    "browser/devtools/device/android_device_manager.cc",
+    "browser/devtools/device/android_device_manager.h",
+    "browser/devtools/device/android_web_socket.cc",
+    "browser/devtools/device/devtools_android_bridge.cc",
+    "browser/devtools/device/devtools_android_bridge.h",
+    "browser/devtools/device/port_forwarding_controller.cc",
+    "browser/devtools/device/port_forwarding_controller.h",
+    "browser/devtools/device/usb/android_rsa.cc",
+    "browser/devtools/device/usb/android_rsa.h",
+    "browser/devtools/device/usb/android_usb_device.cc",
+    "browser/devtools/device/usb/android_usb_device.h",
+    "browser/devtools/device/usb/android_usb_socket.cc",
+    "browser/devtools/device/usb/android_usb_socket.h",
     "browser/devtools/browser_list_tabcontents_provider.cc",
     "browser/devtools/browser_list_tabcontents_provider.h",
-    "browser/devtools/devtools_adb_bridge.cc",
-    "browser/devtools/devtools_adb_bridge.h",
     "browser/devtools/devtools_contents_resizing_strategy.cc",
     "browser/devtools/devtools_contents_resizing_strategy.h",
     "browser/devtools/devtools_embedder_message_dispatcher.cc",
@@ -120,8 +124,6 @@
     "browser/devtools/devtools_toggle_action.h",
     "browser/devtools/devtools_window.cc",
     "browser/devtools/devtools_window.h",
-    "browser/devtools/port_forwarding_controller.cc",
-    "browser/devtools/port_forwarding_controller.h",
     "browser/devtools/remote_debugging_server.cc",
     "browser/devtools/remote_debugging_server.h",
   ]
diff --git a/tools/gn/secondary/net/BUILD.gn b/tools/gn/secondary/net/BUILD.gn
deleted file mode 100644
index 8aaf55d..0000000
--- a/tools/gn/secondary/net/BUILD.gn
+++ /dev/null
@@ -1,1221 +0,0 @@
-# Copyright (c) 2013 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/crypto.gni")
-import("//tools/grit/grit_rule.gni")
-
-component("net") {
-  sources = [
-    "android/cert_verify_result_android.h",
-    "android/cert_verify_result_android_list.h",
-    "android/gurl_utils.cc",
-    "android/gurl_utils.h",
-    "android/keystore.cc",
-    "android/keystore.h",
-    "android/keystore_openssl.cc",
-    "android/keystore_openssl.h",
-    "android/net_jni_registrar.cc",
-    "android/net_jni_registrar.h",
-    "android/network_change_notifier_android.cc",
-    "android/network_change_notifier_android.h",
-    "android/network_change_notifier_delegate_android.cc",
-    "android/network_change_notifier_delegate_android.h",
-    "android/network_change_notifier_factory_android.cc",
-    "android/network_change_notifier_factory_android.h",
-    "android/network_library.cc",
-    "android/network_library.h",
-    "base/address_family.h",
-    "base/address_list.cc",
-    "base/address_list.h",
-    "base/address_tracker_linux.cc",
-    "base/address_tracker_linux.h",
-    "base/auth.cc",
-    "base/auth.h",
-    "base/backoff_entry.cc",
-    "base/backoff_entry.h",
-    "base/bandwidth_metrics.cc",
-    "base/bandwidth_metrics.h",
-    "base/big_endian.cc",
-    "base/big_endian.h",
-    "base/cache_type.h",
-    "base/completion_callback.h",
-    "base/connection_type_histograms.cc",
-    "base/connection_type_histograms.h",
-    "base/crypto_module.h",
-    "base/crypto_module_nss.cc",
-    "base/crypto_module_openssl.cc",
-    "base/data_url.cc",
-    "base/data_url.h",
-    "base/directory_lister.cc",
-    "base/directory_lister.h",
-    "base/dns_reloader.cc",
-    "base/dns_reloader.h",
-    "base/dns_util.cc",
-    "base/dns_util.h",
-    "base/escape.cc",
-    "base/escape.h",
-    "base/expiring_cache.h",
-    "base/file_stream.cc",
-    "base/file_stream.h",
-    "base/file_stream_context.cc",
-    "base/file_stream_context.h",
-    "base/file_stream_context_posix.cc",
-    "base/file_stream_context_win.cc",
-    "base/file_stream_metrics.cc",
-    "base/file_stream_metrics.h",
-    "base/file_stream_metrics_posix.cc",
-    "base/file_stream_metrics_win.cc",
-    "base/file_stream_net_log_parameters.cc",
-    "base/file_stream_net_log_parameters.h",
-    "base/file_stream_whence.h",
-    "base/filter.cc",
-    "base/filter.h",
-    "base/int128.cc",
-    "base/int128.h",
-    "base/gzip_filter.cc",
-    "base/gzip_filter.h",
-    "base/gzip_header.cc",
-    "base/gzip_header.h",
-    "base/hash_value.cc",
-    "base/hash_value.h",
-    "base/host_mapping_rules.cc",
-    "base/host_mapping_rules.h",
-    "base/host_port_pair.cc",
-    "base/host_port_pair.h",
-    "base/io_buffer.cc",
-    "base/io_buffer.h",
-    "base/iovec.h",
-    "base/ip_endpoint.cc",
-    "base/ip_endpoint.h",
-    "base/keygen_handler.cc",
-    "base/keygen_handler.h",
-    "base/keygen_handler_mac.cc",
-    "base/keygen_handler_nss.cc",
-    "base/keygen_handler_openssl.cc",
-    "base/keygen_handler_win.cc",
-    "base/linked_hash_map.h",
-    "base/load_flags.h",
-    "base/load_flags_list.h",
-    "base/load_states.h",
-    "base/load_states_list.h",
-    "base/load_timing_info.cc",
-    "base/load_timing_info.h",
-    "base/mime_sniffer.cc",
-    "base/mime_sniffer.h",
-    "base/mime_util.cc",
-    "base/mime_util.h",
-    "base/net_error_list.h",
-    "base/net_errors.cc",
-    "base/net_errors.h",
-    "base/net_errors_posix.cc",
-    "base/net_errors_win.cc",
-    "base/net_export.h",
-    "base/net_log.cc",
-    "base/net_log.h",
-    "base/net_log_logger.cc",
-    "base/net_log_logger.h",
-    "base/net_log_event_type_list.h",
-    "base/net_log_source_type_list.h",
-    "base/net_module.cc",
-    "base/net_module.h",
-    "base/net_util.cc",
-    "base/net_util.h",
-    "base/net_util_icu.cc",
-    "base/net_util_posix.cc",
-    "base/net_util_win.cc",
-    "base/network_change_notifier.cc",
-    "base/network_change_notifier.h",
-    "base/network_change_notifier_factory.h",
-    "base/network_change_notifier_linux.cc",
-    "base/network_change_notifier_linux.h",
-    "base/network_change_notifier_mac.cc",
-    "base/network_change_notifier_mac.h",
-    "base/network_change_notifier_win.cc",
-    "base/network_change_notifier_win.h",
-    "base/network_config_watcher_mac.cc",
-    "base/network_config_watcher_mac.h",
-    "base/network_delegate.cc",
-    "base/network_delegate.h",
-    "base/network_time_notifier.cc",
-    "base/network_time_notifier.h",
-    "base/nss_memio.c",
-    "base/nss_memio.h",
-    "base/openssl_private_key_store.h",
-    "base/openssl_private_key_store_android.cc",
-    "base/openssl_private_key_store_memory.cc",
-    "base/platform_mime_util.h",
-    # TODO(tc): gnome-vfs? xdgmime? /etc/mime.types?
-    "base/platform_mime_util_linux.cc",
-    "base/platform_mime_util_mac.mm",
-    "base/platform_mime_util_win.cc",
-    "base/prioritized_dispatcher.cc",
-    "base/prioritized_dispatcher.h",
-    "base/priority_queue.h",
-    "base/rand_callback.h",
-    "base/registry_controlled_domains/registry_controlled_domain.cc",
-    "base/registry_controlled_domains/registry_controlled_domain.h",
-    "base/request_priority.h",
-    "base/sdch_filter.cc",
-    "base/sdch_filter.h",
-    "base/sdch_manager.cc",
-    "base/sdch_manager.h",
-    "base/static_cookie_policy.cc",
-    "base/static_cookie_policy.h",
-    "base/sys_addrinfo.h",
-    "base/test_data_stream.cc",
-    "base/test_data_stream.h",
-    "base/upload_bytes_element_reader.cc",
-    "base/upload_bytes_element_reader.h",
-    "base/upload_data.cc",
-    "base/upload_data.h",
-    "base/upload_data_stream.cc",
-    "base/upload_data_stream.h",
-    "base/upload_element.cc",
-    "base/upload_element.h",
-    "base/upload_element_reader.cc",
-    "base/upload_element_reader.h",
-    "base/upload_file_element_reader.cc",
-    "base/upload_file_element_reader.h",
-    "base/upload_progress.h",
-    "base/url_util.cc",
-    "base/url_util.h",
-    "base/winsock_init.cc",
-    "base/winsock_init.h",
-    "base/winsock_util.cc",
-    "base/winsock_util.h",
-    "base/zap.cc",
-    "base/zap.h",
-    "cert/asn1_util.cc",
-    "cert/asn1_util.h",
-    "cert/cert_database.cc",
-    "cert/cert_database.h",
-    "cert/cert_database_android.cc",
-    "cert/cert_database_ios.cc",
-    "cert/cert_database_mac.cc",
-    "cert/cert_database_nss.cc",
-    "cert/cert_database_openssl.cc",
-    "cert/cert_database_win.cc",
-    "cert/cert_status_flags.cc",
-    "cert/cert_status_flags.h",
-    "cert/cert_trust_anchor_provider.h",
-    "cert/cert_verifier.cc",
-    "cert/cert_verifier.h",
-    "cert/cert_verify_proc.cc",
-    "cert/cert_verify_proc.h",
-    "cert/cert_verify_proc_android.cc",
-    "cert/cert_verify_proc_android.h",
-    "cert/cert_verify_proc_mac.cc",
-    "cert/cert_verify_proc_mac.h",
-    "cert/cert_verify_proc_nss.cc",
-    "cert/cert_verify_proc_nss.h",
-    "cert/cert_verify_proc_openssl.cc",
-    "cert/cert_verify_proc_openssl.h",
-    "cert/cert_verify_proc_win.cc",
-    "cert/cert_verify_proc_win.h",
-    "cert/cert_verify_result.cc",
-    "cert/cert_verify_result.h",
-    "cert/crl_set.cc",
-    "cert/crl_set.h",
-    "cert/ev_root_ca_metadata.cc",
-    "cert/ev_root_ca_metadata.h",
-    "cert/jwk_serializer_nss.cc",
-    "cert/jwk_serializer_openssl.cc",
-    "cert/jwk_serializer.h",
-    "cert/multi_threaded_cert_verifier.cc",
-    "cert/multi_threaded_cert_verifier.h",
-    "cert/nss_cert_database.cc",
-    "cert/nss_cert_database.h",
-    "cert/pem_tokenizer.cc",
-    "cert/pem_tokenizer.h",
-    "cert/single_request_cert_verifier.cc",
-    "cert/single_request_cert_verifier.h",
-    "cert/test_root_certs.cc",
-    "cert/test_root_certs.h",
-    "cert/test_root_certs_mac.cc",
-    "cert/test_root_certs_nss.cc",
-    "cert/test_root_certs_openssl.cc",
-    "cert/test_root_certs_android.cc",
-    "cert/test_root_certs_win.cc",
-    "cert/x509_cert_types.cc",
-    "cert/x509_cert_types.h",
-    "cert/x509_cert_types_mac.cc",
-    "cert/x509_cert_types_win.cc",
-    "cert/x509_certificate.cc",
-    "cert/x509_certificate.h",
-    "cert/x509_certificate_ios.cc",
-    "cert/x509_certificate_mac.cc",
-    "cert/x509_certificate_net_log_param.cc",
-    "cert/x509_certificate_net_log_param.h",
-    "cert/x509_certificate_nss.cc",
-    "cert/x509_certificate_openssl.cc",
-    "cert/x509_certificate_win.cc",
-    "cert/x509_util.h",
-    "cert/x509_util.cc",
-    "cert/x509_util_android.cc",
-    "cert/x509_util_android.h",
-    "cert/x509_util_ios.cc",
-    "cert/x509_util_ios.h",
-    "cert/x509_util_mac.cc",
-    "cert/x509_util_mac.h",
-    "cert/x509_util_nss.cc",
-    "cert/x509_util_nss.h",
-    "cert/x509_util_openssl.cc",
-    "cert/x509_util_openssl.h",
-    "cookies/canonical_cookie.cc",
-    "cookies/canonical_cookie.h",
-    "cookies/cookie_constants.cc",
-    "cookies/cookie_constants.h",
-    "cookies/cookie_monster.cc",
-    "cookies/cookie_monster.h",
-    "cookies/cookie_options.h",
-    "cookies/cookie_store.cc",
-    "cookies/cookie_store.h",
-    "cookies/cookie_util.cc",
-    "cookies/cookie_util.h",
-    "cookies/parsed_cookie.cc",
-    "cookies/parsed_cookie.h",
-    "disk_cache/addr.cc",
-    "disk_cache/addr.h",
-    "disk_cache/backend_impl.cc",
-    "disk_cache/backend_impl.h",
-    "disk_cache/bitmap.cc",
-    "disk_cache/bitmap.h",
-    "disk_cache/block_files.cc",
-    "disk_cache/block_files.h",
-    "disk_cache/cache_creator.cc",
-    "disk_cache/cache_util.h",
-    "disk_cache/cache_util.cc",
-    "disk_cache/cache_util_posix.cc",
-    "disk_cache/cache_util_win.cc",
-    "disk_cache/disk_cache.h",
-    "disk_cache/disk_format.cc",
-    "disk_cache/disk_format.h",
-    "disk_cache/disk_format_base.h",
-    "disk_cache/entry_impl.cc",
-    "disk_cache/entry_impl.h",
-    "disk_cache/errors.h",
-    "disk_cache/eviction.cc",
-    "disk_cache/eviction.h",
-    "disk_cache/experiments.h",
-    "disk_cache/file.cc",
-    "disk_cache/file.h",
-    "disk_cache/file_block.h",
-    "disk_cache/file_lock.cc",
-    "disk_cache/file_lock.h",
-    "disk_cache/file_posix.cc",
-    "disk_cache/file_win.cc",
-    "disk_cache/histogram_macros.h",
-    "disk_cache/in_flight_backend_io.cc",
-    "disk_cache/in_flight_backend_io.h",
-    "disk_cache/in_flight_io.cc",
-    "disk_cache/in_flight_io.h",
-    "disk_cache/mapped_file.h",
-    "disk_cache/mapped_file_posix.cc",
-    "disk_cache/mapped_file_avoid_mmap_posix.cc",
-    "disk_cache/mapped_file_win.cc",
-    "disk_cache/mem_backend_impl.cc",
-    "disk_cache/mem_backend_impl.h",
-    "disk_cache/mem_entry_impl.cc",
-    "disk_cache/mem_entry_impl.h",
-    "disk_cache/mem_rankings.cc",
-    "disk_cache/mem_rankings.h",
-    "disk_cache/net_log_parameters.cc",
-    "disk_cache/net_log_parameters.h",
-    "disk_cache/rankings.cc",
-    "disk_cache/rankings.h",
-    "disk_cache/sparse_control.cc",
-    "disk_cache/sparse_control.h",
-    "disk_cache/stats.cc",
-    "disk_cache/stats.h",
-    "disk_cache/stats_histogram.cc",
-    "disk_cache/stats_histogram.h",
-    "disk_cache/storage_block-inl.h",
-    "disk_cache/storage_block.h",
-    "disk_cache/stress_support.h",
-    "disk_cache/trace.cc",
-    "disk_cache/trace.h",
-    "disk_cache/tracing_cache_backend.cc",
-    "disk_cache/tracing_cache_backend.h",
-    "disk_cache/simple/simple_backend_impl.cc",
-    "disk_cache/simple/simple_backend_impl.h",
-    "disk_cache/simple/simple_entry_format.cc",
-    "disk_cache/simple/simple_entry_format.h",
-    "disk_cache/simple/simple_entry_impl.cc",
-    "disk_cache/simple/simple_entry_impl.h",
-    "disk_cache/simple/simple_entry_operation.cc",
-    "disk_cache/simple/simple_entry_operation.h",
-    "disk_cache/simple/simple_index.cc",
-    "disk_cache/simple/simple_index.h",
-    "disk_cache/simple/simple_index_file.cc",
-    "disk_cache/simple/simple_index_file.h",
-    "disk_cache/simple/simple_index_file_posix.cc",
-    "disk_cache/simple/simple_index_file_win.cc",
-    "disk_cache/simple/simple_net_log_parameters.cc",
-    "disk_cache/simple/simple_net_log_parameters.h",
-    "disk_cache/simple/simple_synchronous_entry.cc",
-    "disk_cache/simple/simple_synchronous_entry.h",
-    "disk_cache/simple/simple_util.cc",
-    "disk_cache/simple/simple_util.h",
-    "disk_cache/flash/flash_entry_impl.cc",
-    "disk_cache/flash/flash_entry_impl.h",
-    "disk_cache/flash/format.h",
-    "disk_cache/flash/internal_entry.cc",
-    "disk_cache/flash/internal_entry.h",
-    "disk_cache/flash/log_store.cc",
-    "disk_cache/flash/log_store.h",
-    "disk_cache/flash/log_store_entry.cc",
-    "disk_cache/flash/log_store_entry.h",
-    "disk_cache/flash/segment.cc",
-    "disk_cache/flash/segment.h",
-    "disk_cache/flash/storage.cc",
-    "disk_cache/flash/storage.h",
-    "disk_cache/v3/disk_format_v3.h",
-    "dns/address_sorter.h",
-    "dns/address_sorter_posix.cc",
-    "dns/address_sorter_posix.h",
-    "dns/address_sorter_win.cc",
-    "dns/dns_client.cc",
-    "dns/dns_client.h",
-    "dns/dns_config_service.cc",
-    "dns/dns_config_service.h",
-    "dns/dns_config_service_posix.cc",
-    "dns/dns_config_service_posix.h",
-    "dns/dns_config_service_win.cc",
-    "dns/dns_config_service_win.h",
-    "dns/dns_hosts.cc",
-    "dns/dns_hosts.h",
-    "dns/dns_protocol.h",
-    "dns/dns_query.cc",
-    "dns/dns_query.h",
-    "dns/dns_response.cc",
-    "dns/dns_response.h",
-    "dns/dns_session.cc",
-    "dns/dns_session.h",
-    "dns/dns_socket_pool.cc",
-    "dns/dns_socket_pool.h",
-    "dns/dns_transaction.cc",
-    "dns/dns_transaction.h",
-    "dns/host_cache.cc",
-    "dns/host_cache.h",
-    "dns/host_resolver.cc",
-    "dns/host_resolver.h",
-    "dns/host_resolver_impl.cc",
-    "dns/host_resolver_impl.h",
-    "dns/host_resolver_proc.cc",
-    "dns/host_resolver_proc.h",
-    "dns/mapped_host_resolver.cc",
-    "dns/mapped_host_resolver.h",
-    "dns/mdns_cache.cc",
-    "dns/mdns_cache.h",
-    "dns/mdns_client.cc",
-    "dns/mdns_client.h",
-    "dns/mdns_client_impl.cc",
-    "dns/mdns_client_impl.h",
-    "dns/notify_watcher_mac.cc",
-    "dns/notify_watcher_mac.h",
-    "dns/record_parsed.cc",
-    "dns/record_parsed.h",
-    "dns/record_rdata.cc",
-    "dns/record_rdata.h",
-    "dns/serial_worker.cc",
-    "dns/serial_worker.h",
-    "dns/single_request_host_resolver.cc",
-    "dns/single_request_host_resolver.h",
-    "ftp/ftp_auth_cache.cc",
-    "ftp/ftp_auth_cache.h",
-    "ftp/ftp_ctrl_response_buffer.cc",
-    "ftp/ftp_ctrl_response_buffer.h",
-    "ftp/ftp_directory_listing_parser.cc",
-    "ftp/ftp_directory_listing_parser.h",
-    "ftp/ftp_directory_listing_parser_ls.cc",
-    "ftp/ftp_directory_listing_parser_ls.h",
-    "ftp/ftp_directory_listing_parser_netware.cc",
-    "ftp/ftp_directory_listing_parser_netware.h",
-    "ftp/ftp_directory_listing_parser_os2.cc",
-    "ftp/ftp_directory_listing_parser_os2.h",
-    "ftp/ftp_directory_listing_parser_vms.cc",
-    "ftp/ftp_directory_listing_parser_vms.h",
-    "ftp/ftp_directory_listing_parser_windows.cc",
-    "ftp/ftp_directory_listing_parser_windows.h",
-    "ftp/ftp_network_layer.cc",
-    "ftp/ftp_network_layer.h",
-    "ftp/ftp_network_session.cc",
-    "ftp/ftp_network_session.h",
-    "ftp/ftp_network_transaction.cc",
-    "ftp/ftp_network_transaction.h",
-    "ftp/ftp_request_info.h",
-    "ftp/ftp_response_info.cc",
-    "ftp/ftp_response_info.h",
-    "ftp/ftp_server_type_histograms.cc",
-    "ftp/ftp_server_type_histograms.h",
-    "ftp/ftp_transaction.h",
-    "ftp/ftp_transaction_factory.h",
-    "ftp/ftp_util.cc",
-    "ftp/ftp_util.h",
-    "http/des.cc",
-    "http/des.h",
-    "http/http_atom_list.h",
-    "http/http_auth.cc",
-    "http/http_auth.h",
-    "http/http_auth_cache.cc",
-    "http/http_auth_cache.h",
-    "http/http_auth_controller.cc",
-    "http/http_auth_controller.h",
-    "http/http_auth_filter.cc",
-    "http/http_auth_filter.h",
-    "http/http_auth_filter_win.h",
-    "http/http_auth_gssapi_posix.cc",
-    "http/http_auth_gssapi_posix.h",
-    "http/http_auth_handler.cc",
-    "http/http_auth_handler.h",
-    "http/http_auth_handler_basic.cc",
-    "http/http_auth_handler_basic.h",
-    "http/http_auth_handler_digest.cc",
-    "http/http_auth_handler_digest.h",
-    "http/http_auth_handler_factory.cc",
-    "http/http_auth_handler_factory.h",
-    "http/http_auth_handler_negotiate.cc",
-    "http/http_auth_handler_negotiate.h",
-    "http/http_auth_handler_ntlm.cc",
-    "http/http_auth_handler_ntlm.h",
-    "http/http_auth_handler_ntlm_portable.cc",
-    "http/http_auth_handler_ntlm_win.cc",
-    "http/http_auth_sspi_win.cc",
-    "http/http_auth_sspi_win.h",
-    "http/http_basic_stream.cc",
-    "http/http_basic_stream.h",
-    "http/http_byte_range.cc",
-    "http/http_byte_range.h",
-    "http/http_cache.cc",
-    "http/http_cache.h",
-    "http/http_cache_transaction.cc",
-    "http/http_cache_transaction.h",
-    "http/http_content_disposition.cc",
-    "http/http_content_disposition.h",
-    "http/http_chunked_decoder.cc",
-    "http/http_chunked_decoder.h",
-    "http/http_network_layer.cc",
-    "http/http_network_layer.h",
-    "http/http_network_session.cc",
-    "http/http_network_session.h",
-    "http/http_network_session_peer.cc",
-    "http/http_network_session_peer.h",
-    "http/http_network_transaction.cc",
-    "http/http_network_transaction.h",
-    "http/http_pipelined_connection.h",
-    "http/http_pipelined_connection_impl.cc",
-    "http/http_pipelined_connection_impl.h",
-    "http/http_pipelined_host.cc",
-    "http/http_pipelined_host.h",
-    "http/http_pipelined_host_capability.h",
-    "http/http_pipelined_host_forced.cc",
-    "http/http_pipelined_host_forced.h",
-    "http/http_pipelined_host_impl.cc",
-    "http/http_pipelined_host_impl.h",
-    "http/http_pipelined_host_pool.cc",
-    "http/http_pipelined_host_pool.h",
-    "http/http_pipelined_stream.cc",
-    "http/http_pipelined_stream.h",
-    "http/http_proxy_client_socket.cc",
-    "http/http_proxy_client_socket.h",
-    "http/http_proxy_client_socket_pool.cc",
-    "http/http_proxy_client_socket_pool.h",
-    "http/http_request_headers.cc",
-    "http/http_request_headers.h",
-    "http/http_request_info.cc",
-    "http/http_request_info.h",
-    "http/http_response_body_drainer.cc",
-    "http/http_response_body_drainer.h",
-    "http/http_response_headers.cc",
-    "http/http_response_headers.h",
-    "http/http_response_info.cc",
-    "http/http_response_info.h",
-    "http/http_security_headers.cc",
-    "http/http_security_headers.h",
-    "http/http_server_properties.cc",
-    "http/http_server_properties.h",
-    "http/http_server_properties_impl.cc",
-    "http/http_server_properties_impl.h",
-    "http/http_status_code.cc",
-    "http/http_status_code.h",
-    "http/http_stream.h",
-    "http/http_stream_base.h",
-    "http/http_stream_factory.cc",
-    "http/http_stream_factory.h",
-    "http/http_stream_factory_impl.cc",
-    "http/http_stream_factory_impl.h",
-    "http/http_stream_factory_impl_job.cc",
-    "http/http_stream_factory_impl_job.h",
-    "http/http_stream_factory_impl_request.cc",
-    "http/http_stream_factory_impl_request.h",
-    "http/http_stream_parser.cc",
-    "http/http_stream_parser.h",
-    "http/http_transaction.h",
-    "http/http_transaction_delegate.h",
-    "http/http_transaction_factory.h",
-    "http/http_util.cc",
-    "http/http_util.h",
-    "http/http_util_icu.cc",
-    "http/http_vary_data.cc",
-    "http/http_vary_data.h",
-    "http/http_version.h",
-    "http/md4.cc",
-    "http/md4.h",
-    "http/partial_data.cc",
-    "http/partial_data.h",
-    "http/proxy_client_socket.h",
-    "http/proxy_client_socket.cc",
-    "http/proxy_connect_redirect_http_stream.h",
-    "http/proxy_connect_redirect_http_stream.cc",
-    "http/transport_security_state.cc",
-    "http/transport_security_state.h",
-    "http/transport_security_state_static.h",
-    "http/url_security_manager.cc",
-    "http/url_security_manager.h",
-    "http/url_security_manager_posix.cc",
-    "http/url_security_manager_win.cc",
-    "ocsp/nss_ocsp.cc",
-    "ocsp/nss_ocsp.h",
-    "proxy/dhcp_proxy_script_adapter_fetcher_win.cc",
-    "proxy/dhcp_proxy_script_adapter_fetcher_win.h",
-    "proxy/dhcp_proxy_script_fetcher.cc",
-    "proxy/dhcp_proxy_script_fetcher.h",
-    "proxy/dhcp_proxy_script_fetcher_factory.cc",
-    "proxy/dhcp_proxy_script_fetcher_factory.h",
-    "proxy/dhcp_proxy_script_fetcher_win.cc",
-    "proxy/dhcp_proxy_script_fetcher_win.h",
-    "proxy/dhcpcsvc_init_win.cc",
-    "proxy/dhcpcsvc_init_win.h",
-    "proxy/multi_threaded_proxy_resolver.cc",
-    "proxy/multi_threaded_proxy_resolver.h",
-    "proxy/network_delegate_error_observer.cc",
-    "proxy/network_delegate_error_observer.h",
-    "proxy/polling_proxy_config_service.cc",
-    "proxy/polling_proxy_config_service.h",
-    "proxy/proxy_bypass_rules.cc",
-    "proxy/proxy_bypass_rules.h",
-    "proxy/proxy_config.cc",
-    "proxy/proxy_config.h",
-    "proxy/proxy_config_service.h",
-    "proxy/proxy_config_service_android.cc",
-    "proxy/proxy_config_service_android.h",
-    "proxy/proxy_config_service_fixed.cc",
-    "proxy/proxy_config_service_fixed.h",
-    "proxy/proxy_config_service_ios.cc",
-    "proxy/proxy_config_service_ios.h",
-    "proxy/proxy_config_service_linux.cc",
-    "proxy/proxy_config_service_linux.h",
-    "proxy/proxy_config_service_mac.cc",
-    "proxy/proxy_config_service_mac.h",
-    "proxy/proxy_config_service_win.cc",
-    "proxy/proxy_config_service_win.h",
-    "proxy/proxy_config_source.cc",
-    "proxy/proxy_config_source.h",
-    "proxy/proxy_info.cc",
-    "proxy/proxy_info.h",
-    "proxy/proxy_list.cc",
-    "proxy/proxy_list.h",
-    "proxy/proxy_resolver.h",
-    "proxy/proxy_resolver_error_observer.h",
-    "proxy/proxy_resolver_mac.cc",
-    "proxy/proxy_resolver_mac.h",
-    "proxy/proxy_resolver_script.h",
-    "proxy/proxy_resolver_script_data.cc",
-    "proxy/proxy_resolver_script_data.h",
-    "proxy/proxy_resolver_winhttp.cc",
-    "proxy/proxy_resolver_winhttp.h",
-    "proxy/proxy_retry_info.h",
-    "proxy/proxy_script_decider.cc",
-    "proxy/proxy_script_decider.h",
-    "proxy/proxy_script_fetcher.h",
-    "proxy/proxy_script_fetcher_impl.cc",
-    "proxy/proxy_script_fetcher_impl.h",
-    "proxy/proxy_server.cc",
-    "proxy/proxy_server.h",
-    "proxy/proxy_server_mac.cc",
-    "proxy/proxy_service.cc",
-    "proxy/proxy_service.h",
-    "quic/congestion_control/available_channel_estimator.cc",
-    "quic/congestion_control/available_channel_estimator.h",
-    "quic/congestion_control/channel_estimator.cc",
-    "quic/congestion_control/channel_estimator.h",
-    "quic/congestion_control/cube_root.cc",
-    "quic/congestion_control/cube_root.h",
-    "quic/congestion_control/cubic.cc",
-    "quic/congestion_control/cubic.h",
-    "quic/congestion_control/fix_rate_receiver.cc",
-    "quic/congestion_control/fix_rate_receiver.h",
-    "quic/congestion_control/fix_rate_sender.cc",
-    "quic/congestion_control/fix_rate_sender.h",
-    "quic/congestion_control/hybrid_slow_start.cc",
-    "quic/congestion_control/hybrid_slow_start.h",
-    "quic/congestion_control/inter_arrival_bitrate_ramp_up.cc",
-    "quic/congestion_control/inter_arrival_bitrate_ramp_up.h",
-    "quic/congestion_control/inter_arrival_overuse_detector.cc",
-    "quic/congestion_control/inter_arrival_overuse_detector.h",
-    "quic/congestion_control/inter_arrival_probe.cc",
-    "quic/congestion_control/inter_arrival_probe.h",
-    "quic/congestion_control/inter_arrival_receiver.cc",
-    "quic/congestion_control/inter_arrival_receiver.h",
-    "quic/congestion_control/inter_arrival_sender.cc",
-    "quic/congestion_control/inter_arrival_sender.h",
-    "quic/congestion_control/inter_arrival_state_machine.cc",
-    "quic/congestion_control/inter_arrival_state_machine.h",
-    "quic/congestion_control/leaky_bucket.cc",
-    "quic/congestion_control/leaky_bucket.h",
-    "quic/congestion_control/paced_sender.cc",
-    "quic/congestion_control/paced_sender.h",
-    "quic/congestion_control/quic_max_sized_map.h",
-    "quic/congestion_control/receive_algorithm_interface.cc",
-    "quic/congestion_control/receive_algorithm_interface.h",
-    "quic/congestion_control/send_algorithm_interface.cc",
-    "quic/congestion_control/send_algorithm_interface.h",
-    "quic/congestion_control/tcp_cubic_sender.cc",
-    "quic/congestion_control/tcp_cubic_sender.h",
-    "quic/congestion_control/tcp_receiver.cc",
-    "quic/congestion_control/tcp_receiver.h",
-    "quic/crypto/aes_128_gcm_12_decrypter.h",
-    "quic/crypto/aes_128_gcm_12_decrypter_nss.cc",
-    "quic/crypto/aes_128_gcm_12_decrypter_openssl.cc",
-    "quic/crypto/aes_128_gcm_12_encrypter.h",
-    "quic/crypto/aes_128_gcm_12_encrypter_nss.cc",
-    "quic/crypto/aes_128_gcm_12_encrypter_openssl.cc",
-    "quic/crypto/cert_compressor.cc",
-    "quic/crypto/cert_compressor.h",
-    "quic/crypto/channel_id.cc",
-    "quic/crypto/channel_id.h",
-    "quic/crypto/channel_id_nss.cc",
-    "quic/crypto/channel_id_openssl.cc",
-    "quic/crypto/common_cert_set.cc",
-    "quic/crypto/common_cert_set.h",
-    "quic/crypto/crypto_framer.cc",
-    "quic/crypto/crypto_framer.h",
-    "quic/crypto/crypto_handshake.cc",
-    "quic/crypto/crypto_handshake.h",
-    "quic/crypto/crypto_protocol.h",
-    "quic/crypto/crypto_secret_boxer.cc",
-    "quic/crypto/crypto_secret_boxer.h",
-    "quic/crypto/crypto_server_config_protobuf.cc",
-    "quic/crypto/crypto_server_config_protobuf.h",
-    "quic/crypto/crypto_utils.cc",
-    "quic/crypto/crypto_utils.h",
-    "quic/crypto/curve25519_key_exchange.cc",
-    "quic/crypto/curve25519_key_exchange.h",
-    "quic/crypto/ephemeral_key_source.h",
-    "quic/crypto/key_exchange.h",
-    "quic/crypto/null_decrypter.cc",
-    "quic/crypto/null_decrypter.h",
-    "quic/crypto/null_encrypter.cc",
-    "quic/crypto/null_encrypter.h",
-    "quic/crypto/p256_key_exchange.h",
-    "quic/crypto/p256_key_exchange_nss.cc",
-    "quic/crypto/p256_key_exchange_openssl.cc",
-    "quic/crypto/proof_source.h",
-    "quic/crypto/proof_source_chromium.cc",
-    "quic/crypto/proof_source_chromium.h",
-    "quic/crypto/proof_verifier.cc",
-    "quic/crypto/proof_verifier_chromium.cc",
-    "quic/crypto/proof_verifier_chromium.h",
-    "quic/crypto/quic_decrypter.cc",
-    "quic/crypto/quic_decrypter.h",
-    "quic/crypto/quic_encrypter.cc",
-    "quic/crypto/quic_encrypter.h",
-    "quic/crypto/quic_random.cc",
-    "quic/crypto/quic_random.h",
-    "quic/crypto/scoped_evp_cipher_ctx.cc",
-    "quic/crypto/scoped_evp_cipher_ctx.h",
-    "quic/crypto/strike_register.cc",
-    "quic/crypto/strike_register.h",
-    "quic/crypto/source_address_token.cc",
-    "quic/crypto/source_address_token.h",
-    "quic/quic_alarm.cc",
-    "quic/quic_alarm.h",
-    "quic/quic_bandwidth.cc",
-    "quic/quic_bandwidth.h",
-    "quic/quic_blocked_writer_interface.h",
-    "quic/quic_client_session.cc",
-    "quic/quic_client_session.h",
-    "quic/quic_config.cc",
-    "quic/quic_config.h",
-    "quic/quic_crypto_client_stream.cc",
-    "quic/quic_crypto_client_stream.h",
-    "quic/quic_crypto_client_stream_factory.h",
-    "quic/quic_crypto_server_stream.cc",
-    "quic/quic_crypto_server_stream.h",
-    "quic/quic_crypto_stream.cc",
-    "quic/quic_crypto_stream.h",
-    "quic/quic_clock.cc",
-    "quic/quic_clock.h",
-    "quic/quic_connection.cc",
-    "quic/quic_connection.h",
-    "quic/quic_connection_helper.cc",
-    "quic/quic_connection_helper.h",
-    "quic/quic_connection_logger.cc",
-    "quic/quic_connection_logger.h",
-    "quic/quic_connection_stats.cc",
-    "quic/quic_connection_stats.h",
-    "quic/quic_data_reader.cc",
-    "quic/quic_data_reader.h",
-    "quic/quic_data_writer.cc",
-    "quic/quic_data_writer.h",
-    "quic/quic_fec_group.cc",
-    "quic/quic_fec_group.h",
-    "quic/quic_framer.cc",
-    "quic/quic_framer.h",
-    "quic/quic_http_stream.cc",
-    "quic/quic_http_stream.h",
-    "quic/quic_packet_creator.cc",
-    "quic/quic_packet_creator.h",
-    "quic/quic_packet_generator.cc",
-    "quic/quic_packet_generator.h",
-    "quic/quic_protocol.cc",
-    "quic/quic_protocol.h",
-    "quic/quic_received_packet_manager.cc",
-    "quic/quic_received_packet_manager.h",
-    "quic/quic_reliable_client_stream.cc",
-    "quic/quic_reliable_client_stream.h",
-    "quic/quic_sent_entropy_manager.cc",
-    "quic/quic_sent_entropy_manager.h",
-    "quic/quic_session.cc",
-    "quic/quic_session.h",
-    "quic/quic_spdy_compressor.cc",
-    "quic/quic_spdy_compressor.h",
-    "quic/quic_spdy_decompressor.cc",
-    "quic/quic_spdy_decompressor.h",
-    "quic/quic_stream_factory.cc",
-    "quic/quic_stream_factory.h",
-    "quic/quic_stream_sequencer.cc",
-    "quic/quic_stream_sequencer.h",
-    "quic/quic_time.cc",
-    "quic/quic_time.h",
-    "quic/quic_utils.cc",
-    "quic/quic_utils.h",
-    "quic/reliable_quic_stream.cc",
-    "quic/reliable_quic_stream.h",
-    "quic/spdy_utils.cc",
-    "quic/spdy_utils.h",
-    "socket/buffered_write_stream_socket.cc",
-    "socket/buffered_write_stream_socket.h",
-    "socket/client_socket_factory.cc",
-    "socket/client_socket_factory.h",
-    "socket/client_socket_handle.cc",
-    "socket/client_socket_handle.h",
-    "socket/client_socket_pool.cc",
-    "socket/client_socket_pool.h",
-    "socket/client_socket_pool_base.cc",
-    "socket/client_socket_pool_base.h",
-    "socket/client_socket_pool_histograms.cc",
-    "socket/client_socket_pool_histograms.h",
-    "socket/client_socket_pool_manager.cc",
-    "socket/client_socket_pool_manager.h",
-    "socket/client_socket_pool_manager_impl.cc",
-    "socket/client_socket_pool_manager_impl.h",
-    "socket/next_proto.h",
-    "socket/nss_ssl_util.cc",
-    "socket/nss_ssl_util.h",
-    "socket/server_socket.h",
-    "socket/socket_net_log_params.cc",
-    "socket/socket_net_log_params.h",
-    "socket/socket.h",
-    "socket/socks5_client_socket.cc",
-    "socket/socks5_client_socket.h",
-    "socket/socks_client_socket.cc",
-    "socket/socks_client_socket.h",
-    "socket/socks_client_socket_pool.cc",
-    "socket/socks_client_socket_pool.h",
-    "socket/ssl_client_socket.cc",
-    "socket/ssl_client_socket.h",
-    "socket/ssl_client_socket_nss.cc",
-    "socket/ssl_client_socket_nss.h",
-    "socket/ssl_client_socket_openssl.cc",
-    "socket/ssl_client_socket_openssl.h",
-    "socket/ssl_client_socket_pool.cc",
-    "socket/ssl_client_socket_pool.h",
-    "socket/ssl_error_params.cc",
-    "socket/ssl_error_params.h",
-    "socket/ssl_server_socket.h",
-    "socket/ssl_server_socket_nss.cc",
-    "socket/ssl_server_socket_nss.h",
-    "socket/ssl_server_socket_openssl.cc",
-    "socket/ssl_socket.h",
-    "socket/stream_listen_socket.cc",
-    "socket/stream_listen_socket.h",
-    "socket/stream_socket.cc",
-    "socket/stream_socket.h",
-    "socket/tcp_client_socket.cc",
-    "socket/tcp_client_socket.h",
-    "socket/tcp_listen_socket.cc",
-    "socket/tcp_listen_socket.h",
-    "socket/tcp_server_socket.cc",
-    "socket/tcp_server_socket.h",
-    "socket/tcp_socket_libevent.cc",
-    "socket/tcp_socket_libevent.h",
-    "socket/tcp_socket_win.cc",
-    "socket/tcp_socket_win.h",
-    "socket/transport_client_socket_pool.cc",
-    "socket/transport_client_socket_pool.h",
-    "socket/unix_domain_socket_posix.cc",
-    "socket/unix_domain_socket_posix.h",
-    "socket_stream/socket_stream.cc",
-    "socket_stream/socket_stream.h",
-    "socket_stream/socket_stream_job.cc",
-    "socket_stream/socket_stream_job.h",
-    "socket_stream/socket_stream_job_manager.cc",
-    "socket_stream/socket_stream_job_manager.h",
-    "socket_stream/socket_stream_metrics.cc",
-    "socket_stream/socket_stream_metrics.h",
-    "spdy/buffered_spdy_framer.cc",
-    "spdy/buffered_spdy_framer.h",
-    "spdy/spdy_bitmasks.h",
-    "spdy/spdy_buffer.cc",
-    "spdy/spdy_buffer.h",
-    "spdy/spdy_buffer_producer.cc",
-    "spdy/spdy_buffer_producer.h",
-    "spdy/spdy_frame_builder.cc",
-    "spdy/spdy_frame_builder.h",
-    "spdy/spdy_frame_reader.cc",
-    "spdy/spdy_frame_reader.h",
-    "spdy/spdy_framer.cc",
-    "spdy/spdy_framer.h",
-    "spdy/spdy_header_block.cc",
-    "spdy/spdy_header_block.h",
-    "spdy/spdy_http_stream.cc",
-    "spdy/spdy_http_stream.h",
-    "spdy/spdy_http_utils.cc",
-    "spdy/spdy_http_utils.h",
-    "spdy/spdy_priority_forest.h",
-    "spdy/spdy_protocol.cc",
-    "spdy/spdy_protocol.h",
-    "spdy/spdy_proxy_client_socket.cc",
-    "spdy/spdy_proxy_client_socket.h",
-    "spdy/spdy_read_queue.cc",
-    "spdy/spdy_read_queue.h",
-    "spdy/spdy_session.cc",
-    "spdy/spdy_session.h",
-    "spdy/spdy_session_key.cc",
-    "spdy/spdy_session_key.h",
-    "spdy/spdy_session_pool.cc",
-    "spdy/spdy_session_pool.h",
-    "spdy/spdy_stream.cc",
-    "spdy/spdy_stream.h",
-    "spdy/spdy_websocket_stream.cc",
-    "spdy/spdy_websocket_stream.h",
-    "spdy/spdy_write_queue.cc",
-    "spdy/spdy_write_queue.h",
-    "spdy/write_blocked_list.h",
-    "ssl/client_cert_store.h",
-    "ssl/client_cert_store_chromeos.cc",
-    "ssl/client_cert_store_chromeos.h",
-    "ssl/client_cert_store_mac.cc",
-    "ssl/client_cert_store_mac.h",
-    "ssl/client_cert_store_nss.cc",
-    "ssl/client_cert_store_nss.h",
-    "ssl/client_cert_store_win.cc",
-    "ssl/client_cert_store_win.h",
-    "ssl/default_server_bound_cert_store.cc",
-    "ssl/default_server_bound_cert_store.h",
-    "ssl/openssl_client_key_store.cc",
-    "ssl/openssl_client_key_store.h",
-    "ssl/server_bound_cert_service.cc",
-    "ssl/server_bound_cert_service.h",
-    "ssl/server_bound_cert_store.cc",
-    "ssl/server_bound_cert_store.h",
-    "ssl/ssl_cert_request_info.cc",
-    "ssl/ssl_cert_request_info.h",
-    "ssl/ssl_cipher_suite_names.cc",
-    "ssl/ssl_cipher_suite_names.h",
-    "ssl/ssl_client_auth_cache.cc",
-    "ssl/ssl_client_auth_cache.h",
-    "ssl/ssl_client_cert_type.h",
-    "ssl/ssl_config_service.cc",
-    "ssl/ssl_config_service.h",
-    "ssl/ssl_config_service_defaults.cc",
-    "ssl/ssl_config_service_defaults.h",
-    "ssl/ssl_info.cc",
-    "ssl/ssl_info.h",
-    "third_party/mozilla_security_manager/nsKeygenHandler.cpp",
-    "third_party/mozilla_security_manager/nsKeygenHandler.h",
-    "third_party/mozilla_security_manager/nsNSSCertificateDB.cpp",
-    "third_party/mozilla_security_manager/nsNSSCertificateDB.h",
-    "third_party/mozilla_security_manager/nsPKCS12Blob.cpp",
-    "third_party/mozilla_security_manager/nsPKCS12Blob.h",
-    "udp/datagram_client_socket.h",
-    "udp/datagram_server_socket.h",
-    "udp/datagram_socket.h",
-    "udp/udp_client_socket.cc",
-    "udp/udp_client_socket.h",
-    "udp/udp_net_log_parameters.cc",
-    "udp/udp_net_log_parameters.h",
-    "udp/udp_server_socket.cc",
-    "udp/udp_server_socket.h",
-    "udp/udp_socket.h",
-    "udp/udp_socket_libevent.cc",
-    "udp/udp_socket_libevent.h",
-    "udp/udp_socket_win.cc",
-    "udp/udp_socket_win.h",
-    "url_request/data_protocol_handler.cc",
-    "url_request/data_protocol_handler.h",
-    "url_request/file_protocol_handler.cc",
-    "url_request/file_protocol_handler.h",
-    "url_request/fraudulent_certificate_reporter.h",
-    "url_request/ftp_protocol_handler.cc",
-    "url_request/ftp_protocol_handler.h",
-    "url_request/http_user_agent_settings.h",
-    "url_request/protocol_intercept_job_factory.cc",
-    "url_request/protocol_intercept_job_factory.h",
-    "url_request/static_http_user_agent_settings.cc",
-    "url_request/static_http_user_agent_settings.h",
-    "url_request/url_fetcher.cc",
-    "url_request/url_fetcher.h",
-    "url_request/url_fetcher_core.cc",
-    "url_request/url_fetcher_core.h",
-    "url_request/url_fetcher_delegate.cc",
-    "url_request/url_fetcher_delegate.h",
-    "url_request/url_fetcher_factory.h",
-    "url_request/url_fetcher_impl.cc",
-    "url_request/url_fetcher_impl.h",
-    "url_request/url_fetcher_response_writer.cc",
-    "url_request/url_fetcher_response_writer.h",
-    "url_request/url_range_request_job.cc",
-    "url_request/url_range_request_job.h",
-    "url_request/url_request.cc",
-    "url_request/url_request.h",
-    "url_request/url_request_about_job.cc",
-    "url_request/url_request_about_job.h",
-    "url_request/url_request_context.cc",
-    "url_request/url_request_context.h",
-    "url_request/url_request_context_builder.cc",
-    "url_request/url_request_context_builder.h",
-    "url_request/url_request_context_getter.cc",
-    "url_request/url_request_context_getter.h",
-    "url_request/url_request_context_storage.cc",
-    "url_request/url_request_context_storage.h",
-    "url_request/url_request_data_job.cc",
-    "url_request/url_request_data_job.h",
-    "url_request/url_request_error_job.cc",
-    "url_request/url_request_error_job.h",
-    "url_request/url_request_file_dir_job.cc",
-    "url_request/url_request_file_dir_job.h",
-    "url_request/url_request_file_job.cc",
-    "url_request/url_request_file_job.h",
-    "url_request/url_request_filter.cc",
-    "url_request/url_request_filter.h",
-    "url_request/url_request_ftp_job.cc",
-    "url_request/url_request_ftp_job.h",
-    "url_request/url_request_http_job.cc",
-    "url_request/url_request_http_job.h",
-    "url_request/url_request_job.cc",
-    "url_request/url_request_job.h",
-    "url_request/url_request_job_factory.cc",
-    "url_request/url_request_job_factory.h",
-    "url_request/url_request_job_factory_impl.cc",
-    "url_request/url_request_job_factory_impl.h",
-    "url_request/url_request_job_manager.cc",
-    "url_request/url_request_job_manager.h",
-    "url_request/url_request_netlog_params.cc",
-    "url_request/url_request_netlog_params.h",
-    "url_request/url_request_redirect_job.cc",
-    "url_request/url_request_redirect_job.h",
-    "url_request/url_request_simple_job.cc",
-    "url_request/url_request_simple_job.h",
-    "url_request/url_request_status.h",
-    "url_request/url_request_test_job.cc",
-    "url_request/url_request_test_job.h",
-    "url_request/url_request_throttler_entry.cc",
-    "url_request/url_request_throttler_entry.h",
-    "url_request/url_request_throttler_entry_interface.h",
-    "url_request/url_request_throttler_header_adapter.cc",
-    "url_request/url_request_throttler_header_adapter.h",
-    "url_request/url_request_throttler_header_interface.h",
-    "url_request/url_request_throttler_manager.cc",
-    "url_request/url_request_throttler_manager.h",
-    "url_request/view_cache_helper.cc",
-    "url_request/view_cache_helper.h",
-    "websockets/websocket_channel.cc",
-    "websockets/websocket_channel.h",
-    "websockets/websocket_errors.cc",
-    "websockets/websocket_errors.h",
-    "websockets/websocket_frame.cc",
-    "websockets/websocket_frame.h",
-    "websockets/websocket_frame_parser.cc",
-    "websockets/websocket_frame_parser.h",
-    "websockets/websocket_handshake_handler.cc",
-    "websockets/websocket_handshake_handler.h",
-    "websockets/websocket_job.cc",
-    "websockets/websocket_job.h",
-    "websockets/websocket_mux.h",
-    "websockets/websocket_net_log_params.cc",
-    "websockets/websocket_net_log_params.h",
-    "websockets/websocket_stream.cc",
-    "websockets/websocket_stream.h",
-    "websockets/websocket_stream_base.h",
-    "websockets/websocket_throttle.cc",
-    "websockets/websocket_throttle.h",
-  ]
-
-  defines = [ "NET_IMPLEMENTATION" ]
-
-  deps = [
-    #":net_resources",
-    "//base",
-    "//base:i18n",
-    "//base/third_party/dynamic_annotations",
-    "//crypto",
-    "//crypto:ssl",
-    "//sdch",
-    "//third_party/icu",
-    "//third_party/zlib",
-    "//url",
-  ]
-
-  if (is_win) {
-    sources -= [
-      "http/http_auth_handler_ntlm_portable.cc",
-      "socket/tcp_socket_libevent.cc",
-      "socket/tcp_socket_libevent.h",
-      "ssl/client_cert_store_nss.cc",
-      "ssl/client_cert_store_nss.h",
-      "udp/udp_socket_libevent.cc",
-      "udp/udp_socket_libevent.h",
-    ]
-    deps += [
-      #"//net/third_party/nss:ssl",
-      #"//third_party/nss:nspr",
-      #"//third_party/nss:nss",
-    ]
-  } else {  # !is_win
-    sources -= [
-      "base/winsock_init.cc",
-      "base/winsock_init.h",
-      "base/winsock_util.cc",
-      "base/winsock_util.h",
-      "proxy/proxy_resolver_winhttp.cc",
-      "proxy/proxy_resolver_winhttp.h",
-    ]
-  }
-
-  if (is_mac) {
-    sources -= [
-      "ssl/client_cert_store_nss.cc",
-      "ssl/client_cert_store_nss.h",
-    ]
-    deps += [
-      #"//net/third_party/nss:ssl",
-      #"//third_party/nss:nspr",
-      #"//third_party/nss:nss",
-    ]
-  }
-
-  if (is_linux && use_nss) {
-    configs += [ "//third_party/nss:nss_linux_config" ]
-  }
-
-  if (is_chromeos) {
-    sources -= [
-       "base/network_change_notifier_linux.cc",
-       "base/network_change_notifier_linux.h",
-       "proxy/proxy_config_service_linux.cc",
-       "proxy/proxy_config_service_linux.h",
-    ]
-  }
-
-  if (use_openssl) {
-    sources -= [
-      "base/crypto_module_nss.cc",
-      "base/keygen_handler_nss.cc",
-      "base/nss_memio.c",
-      "base/nss_memio.h",
-      "cert/cert_database_nss.cc",
-      "cert/cert_verify_proc_nss.cc",
-      "cert/cert_verify_proc_nss.h",
-      "cert/jwk_serializer_nss.cc",
-      "cert/nss_cert_database.cc",
-      "cert/nss_cert_database.h",
-      "cert/test_root_certs_nss.cc",
-      "cert/x509_certificate_nss.cc",
-      "cert/x509_util_nss.cc",
-      "cert/x509_util_nss.h",
-      "ocsp/nss_ocsp.cc",
-      "ocsp/nss_ocsp.h",
-      "quic/crypto/aes_128_gcm_12_decrypter_nss.cc",
-      "quic/crypto/aes_128_gcm_12_encrypter_nss.cc",
-      "quic/crypto/channel_id_nss.cc",
-      "quic/crypto/p256_key_exchange_nss.cc",
-      "socket/nss_ssl_util.cc",
-      "socket/nss_ssl_util.h",
-      "socket/ssl_client_socket_nss.cc",
-      "socket/ssl_client_socket_nss.h",
-      "socket/ssl_server_socket_nss.cc",
-      "socket/ssl_server_socket_nss.h",
-      "ssl/client_cert_store_nss.cc",
-      "third_party/mozilla_security_manager/nsKeygenHandler.cpp",
-      "third_party/mozilla_security_manager/nsKeygenHandler.h",
-      "third_party/mozilla_security_manager/nsNSSCertificateDB.cpp",
-      "third_party/mozilla_security_manager/nsNSSCertificateDB.h",
-      "third_party/mozilla_security_manager/nsPKCS12Blob.cpp",
-      "third_party/mozilla_security_manager/nsPKCS12Blob.h",
-    ]
-  } else {  # !use_openssl
-    sources -= [
-      "base/crypto_module_openssl.cc",
-      "base/keygen_handler_openssl.cc",
-      "base/openssl_private_key_store.h",
-      #"base/openssl_private_key_store_android.cc",
-      "base/openssl_private_key_store_memory.cc",
-      "cert/cert_database_openssl.cc",
-      "cert/cert_verify_proc_openssl.cc",
-      "cert/cert_verify_proc_openssl.h",
-      "cert/jwk_serializer_openssl.cc",
-      "cert/test_root_certs_openssl.cc",
-      "cert/x509_certificate_openssl.cc",
-      "cert/x509_util_openssl.cc",
-      "cert/x509_util_openssl.h",
-      "quic/crypto/aes_128_gcm_12_decrypter_openssl.cc",
-      "quic/crypto/aes_128_gcm_12_encrypter_openssl.cc",
-      "quic/crypto/channel_id_openssl.cc",
-      "quic/crypto/p256_key_exchange_openssl.cc",
-      "quic/crypto/scoped_evp_cipher_ctx.cc",
-      "quic/crypto/scoped_evp_cipher_ctx.h",
-      "socket/ssl_client_socket_openssl.cc",
-      "socket/ssl_client_socket_openssl.h",
-      "socket/ssl_server_socket_openssl.cc",
-      "ssl/openssl_client_key_store.cc",
-      "ssl/openssl_client_key_store.h",
-    ]
-  }
-
-  if (is_posix) {
-    posix_avoid_mmap = false  # TODO(brettw) should be true on 32-bit Android.
-    if (posix_avoid_mmap) {
-      defines = [ "POSIX_AVOID_MMAP" ]
-      sources -= [ "disk_cache/mapped_file_posix.cc" ]
-    } else {  # !posix_avoid_mmap
-      sources -= [ "disk_cache/mapped_file_avoid_mmap_posix.cc" ]
-    }
-  }
-}
-
-#grit("net_resources") {
-#  source = "base/net_resources.grd"
-#}
-
-static_library("http_server") {
-  sources = [
-    "server/http_connection.cc",
-    "server/http_connection.h",
-    "server/http_server.cc",
-    "server/http_server.h",
-    "server/http_server_request_info.cc",
-    "server/http_server_request_info.h",
-    "server/http_server_response_info.cc",
-    "server/http_server_response_info.h",
-    "server/web_socket.cc",
-    "server/web_socket.h",
-  ]
-  configs += [ "//build/config/compiler:wexit_time_destructors" ]
-  deps = [
-    ":net",
-    "//base",
-  ]
-}
diff --git a/tools/gn/secondary/testing/gtest/BUILD.gn b/tools/gn/secondary/testing/gtest/BUILD.gn
index 90f027d..44307fa 100644
--- a/tools/gn/secondary/testing/gtest/BUILD.gn
+++ b/tools/gn/secondary/testing/gtest/BUILD.gn
@@ -43,7 +43,7 @@
       # implementation. gtest supports this scenario by providing its
       # own implementation but we must opt in to it.
       "GTEST_USE_OWN_TR1_TUPLE=1",
-           
+
       # GTEST_USE_OWN_TR1_TUPLE only works if GTEST_HAS_TR1_TUPLE is set.
       # gtest r625 made it so that GTEST_HAS_TR1_TUPLE is set to 0
       # automatically on android, so it has to be set explicitly here.
diff --git a/tools/gn/secondary/third_party/android_tools/BUILD.gn b/tools/gn/secondary/third_party/android_tools/BUILD.gn
new file mode 100644
index 0000000..b5f6ebd
--- /dev/null
+++ b/tools/gn/secondary/third_party/android_tools/BUILD.gn
@@ -0,0 +1,15 @@
+# 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.
+
+config("cpu_features_include") {
+  include_dirs = [ "ndk/sources/android/cpufeatures" ]
+}
+
+source_set("cpu_features") {
+  sources = [ "ndk/sources/android/cpufeatures/cpu-features.c" ]
+  direct_dependent_configs = [ ":cpu_features_include" ]
+
+  configs -= [ "//build/config/compiler:chromium_code" ]
+  configs += [ "//build/config/compiler:no_chromium_code" ]
+}
diff --git a/tools/gn/secondary/third_party/icu/BUILD.gn b/tools/gn/secondary/third_party/icu/BUILD.gn
index fc9da5e..21c4efa 100644
--- a/tools/gn/secondary/third_party/icu/BUILD.gn
+++ b/tools/gn/secondary/third_party/icu/BUILD.gn
@@ -223,6 +223,19 @@
 
   configs += [ ":icu_code" ]
   direct_dependent_configs = [ ":icu_config" ]
+
+  if (is_clang) {
+    # uspoof.h has a U_NAMESPACE_USE macro. That's a bug,
+    # the header should use U_NAMESPACE_BEGIN instead.
+    # http://bugs.icu-project.org/trac/ticket/9054
+    configs -= [ "//build/config/clang:extra_warnings" ]
+
+    cflags = [
+      "-Wno-header-hygiene",
+      # Looks like a real issue, see http://crbug.com/114660
+      "-Wno-return-type-c-linkage",
+    ]
+  }
 }
 
 component("icuuc") {
diff --git a/tools/gn/secondary/third_party/leveldatabase/BUILD.gn b/tools/gn/secondary/third_party/leveldatabase/BUILD.gn
index 127c8a0..4fe2c7a 100644
--- a/tools/gn/secondary/third_party/leveldatabase/BUILD.gn
+++ b/tools/gn/secondary/third_party/leveldatabase/BUILD.gn
@@ -128,209 +128,211 @@
   }
 }
 
-test("env_chromium_unittests") {
-  sources = [
-    "env_chromium_unittest.cc",
-  ]
-  deps = [
-    ":leveldatabase",
-    "//base/test:test_support",
-    "//testing/gtest",
-  ]
-}
+if (!is_android) {
+  test("env_chromium_unittests") {
+    sources = [
+      "env_chromium_unittest.cc",
+    ]
+    deps = [
+      ":leveldatabase",
+      "//base/test:test_support",
+      "//testing/gtest",
+    ]
+  }
 
-static_library("leveldb_testutil") {
-  sources = [
-    "src/util/histogram.cc",
-    "src/util/histogram.h",
-    "src/util/testharness.cc",
-    "src/util/testharness.h",
-    "src/util/testutil.cc",
-    "src/util/testutil.h",
-  ]
+  static_library("leveldb_testutil") {
+    sources = [
+      "src/util/histogram.cc",
+      "src/util/histogram.h",
+      "src/util/testharness.cc",
+      "src/util/testharness.h",
+      "src/util/testutil.cc",
+      "src/util/testutil.h",
+    ]
 
-  forward_dependent_configs_from = [ ":leveldatabase" ]
-  configs -= [ "//build/config/compiler:chromium_code" ]
-  configs += [ "//build/config/compiler:no_chromium_code" ]
+    forward_dependent_configs_from = [ ":leveldatabase" ]
+    configs -= [ "//build/config/compiler:chromium_code" ]
+    configs += [ "//build/config/compiler:no_chromium_code" ]
 
-  deps = [
-    ":leveldatabase",
-    "//base",
-  ]
-}
+    deps = [
+      ":leveldatabase",
+      "//base",
+    ]
+  }
 
-test("leveldb_arena_test") {
-  sources = [
-    "src/util/arena_test.cc",
-  ]
-  configs -= [ "//build/config/compiler:chromium_code" ]
-  configs += [ "//build/config/compiler:no_chromium_code" ]
-  deps = [
-    ":leveldb_testutil",
-  ]
-}
+  test("leveldb_arena_test") {
+    sources = [
+      "src/util/arena_test.cc",
+    ]
+    configs -= [ "//build/config/compiler:chromium_code" ]
+    configs += [ "//build/config/compiler:no_chromium_code" ]
+    deps = [
+      ":leveldb_testutil",
+    ]
+  }
 
-test("leveldb_bloom_test") {
-  sources = [
-    "src/util/bloom_test.cc",
-  ]
-  configs -= [ "//build/config/compiler:chromium_code" ]
-  configs += [ "//build/config/compiler:no_chromium_code" ]
-  deps = [
-    ":leveldb_testutil",
-  ]
-}
+  test("leveldb_bloom_test") {
+    sources = [
+      "src/util/bloom_test.cc",
+    ]
+    configs -= [ "//build/config/compiler:chromium_code" ]
+    configs += [ "//build/config/compiler:no_chromium_code" ]
+    deps = [
+      ":leveldb_testutil",
+    ]
+  }
 
-test("leveldb_cache_test") {
-  sources = [
-    "src/util/cache_test.cc",
-  ]
-  configs -= [ "//build/config/compiler:chromium_code" ]
-  configs += [ "//build/config/compiler:no_chromium_code" ]
-  deps = [
-    ":leveldb_testutil",
-  ]
-}
+  test("leveldb_cache_test") {
+    sources = [
+      "src/util/cache_test.cc",
+    ]
+    configs -= [ "//build/config/compiler:chromium_code" ]
+    configs += [ "//build/config/compiler:no_chromium_code" ]
+    deps = [
+      ":leveldb_testutil",
+    ]
+  }
 
-test("leveldb_corruption_test") {
-  sources = [
-    "src/db/corruption_test.cc",
-  ]
-  configs -= [ "//build/config/compiler:chromium_code" ]
-  configs += [ "//build/config/compiler:no_chromium_code" ]
-  deps = [
-    ":leveldb_testutil",
-  ]
-}
+  test("leveldb_corruption_test") {
+    sources = [
+      "src/db/corruption_test.cc",
+    ]
+    configs -= [ "//build/config/compiler:chromium_code" ]
+    configs += [ "//build/config/compiler:no_chromium_code" ]
+    deps = [
+      ":leveldb_testutil",
+    ]
+  }
 
-test("leveldb_crc32c_test") {
-  sources = [
-    "src/util/crc32c_test.cc"
-  ]
-  configs -= [ "//build/config/compiler:chromium_code" ]
-  configs += [ "//build/config/compiler:no_chromium_code" ]
-  deps = [
-    ":leveldb_testutil",
-  ]
-}
+  test("leveldb_crc32c_test") {
+    sources = [
+      "src/util/crc32c_test.cc"
+    ]
+    configs -= [ "//build/config/compiler:chromium_code" ]
+    configs += [ "//build/config/compiler:no_chromium_code" ]
+    deps = [
+      ":leveldb_testutil",
+    ]
+  }
 
-test("leveldb_db_bench") {
-  sources = [
-    "src/db/db_bench.cc",
-  ]
-  configs -= [ "//build/config/compiler:chromium_code" ]
-  configs += [ "//build/config/compiler:no_chromium_code" ]
-  deps = [
-    ":leveldb_testutil",
-  ]
-}
+  test("leveldb_db_bench") {
+    sources = [
+      "src/db/db_bench.cc",
+    ]
+    configs -= [ "//build/config/compiler:chromium_code" ]
+    configs += [ "//build/config/compiler:no_chromium_code" ]
+    deps = [
+      ":leveldb_testutil",
+    ]
+  }
 
-test("leveldb_db_test") {
-  sources = [
-    "src/db/db_test.cc",
-  ]
-  configs -= [ "//build/config/compiler:chromium_code" ]
-  configs += [ "//build/config/compiler:no_chromium_code" ]
-  deps = [
-    ":leveldb_testutil",
-  ]
-}
+  test("leveldb_db_test") {
+    sources = [
+      "src/db/db_test.cc",
+    ]
+    configs -= [ "//build/config/compiler:chromium_code" ]
+    configs += [ "//build/config/compiler:no_chromium_code" ]
+    deps = [
+      ":leveldb_testutil",
+    ]
+  }
 
-test("leveldb_dbformat_test") {
-  sources = [
-    "src/db/dbformat_test.cc",
-  ]
-  configs -= [ "//build/config/compiler:chromium_code" ]
-  configs += [ "//build/config/compiler:no_chromium_code" ]
-  deps = [
-    ":leveldb_testutil",
-  ]
-}
+  test("leveldb_dbformat_test") {
+    sources = [
+      "src/db/dbformat_test.cc",
+    ]
+    configs -= [ "//build/config/compiler:chromium_code" ]
+    configs += [ "//build/config/compiler:no_chromium_code" ]
+    deps = [
+      ":leveldb_testutil",
+    ]
+  }
 
-test("leveldb_env_test") {
-  sources = [
-    "src/util/env_test.cc",
-  ]
-  configs -= [ "//build/config/compiler:chromium_code" ]
-  configs += [ "//build/config/compiler:no_chromium_code" ]
-  deps = [
-    ":leveldb_testutil",
-  ]
-}
+  test("leveldb_env_test") {
+    sources = [
+      "src/util/env_test.cc",
+    ]
+    configs -= [ "//build/config/compiler:chromium_code" ]
+    configs += [ "//build/config/compiler:no_chromium_code" ]
+    deps = [
+      ":leveldb_testutil",
+    ]
+  }
 
-test("leveldb_filename_test") {
-  sources = [
-    "src/db/filename_test.cc",
-  ]
-  configs -= [ "//build/config/compiler:chromium_code" ]
-  configs += [ "//build/config/compiler:no_chromium_code" ]
-  deps = [
-    ":leveldb_testutil",
-  ]
-}
+  test("leveldb_filename_test") {
+    sources = [
+      "src/db/filename_test.cc",
+    ]
+    configs -= [ "//build/config/compiler:chromium_code" ]
+    configs += [ "//build/config/compiler:no_chromium_code" ]
+    deps = [
+      ":leveldb_testutil",
+    ]
+  }
 
-test("leveldb_filter_block_test") {
-  sources = [
-    "src/table/filter_block_test.cc",
-  ]
-  configs -= [ "//build/config/compiler:chromium_code" ]
-  configs += [ "//build/config/compiler:no_chromium_code" ]
-  deps = [
-    ":leveldb_testutil",
-  ]
-}
+  test("leveldb_filter_block_test") {
+    sources = [
+      "src/table/filter_block_test.cc",
+    ]
+    configs -= [ "//build/config/compiler:chromium_code" ]
+    configs += [ "//build/config/compiler:no_chromium_code" ]
+    deps = [
+      ":leveldb_testutil",
+    ]
+  }
 
-test("leveldb_log_test") {
-  sources = [
-    "src/db/log_test.cc",
-  ]
-  configs -= [ "//build/config/compiler:chromium_code" ]
-  configs += [ "//build/config/compiler:no_chromium_code" ]
-  deps = [
-    ":leveldb_testutil",
-  ]
-}
+  test("leveldb_log_test") {
+    sources = [
+      "src/db/log_test.cc",
+    ]
+    configs -= [ "//build/config/compiler:chromium_code" ]
+    configs += [ "//build/config/compiler:no_chromium_code" ]
+    deps = [
+      ":leveldb_testutil",
+    ]
+  }
 
-test("leveldb_skiplist_test") {
-  sources = [
-    "src/db/skiplist_test.cc",
-  ]
-  configs -= [ "//build/config/compiler:chromium_code" ]
-  configs += [ "//build/config/compiler:no_chromium_code" ]
-  deps = [
-    ":leveldb_testutil",
-  ]
-}
+  test("leveldb_skiplist_test") {
+    sources = [
+      "src/db/skiplist_test.cc",
+    ]
+    configs -= [ "//build/config/compiler:chromium_code" ]
+    configs += [ "//build/config/compiler:no_chromium_code" ]
+    deps = [
+      ":leveldb_testutil",
+    ]
+  }
 
-test("leveldb_table_test") {
-  sources = [
-    "src/table/table_test.cc",
-  ]
-  configs -= [ "//build/config/compiler:chromium_code" ]
-  configs += [ "//build/config/compiler:no_chromium_code" ]
-  deps = [
-    ":leveldb_testutil",
-  ]
-}
+  test("leveldb_table_test") {
+    sources = [
+      "src/table/table_test.cc",
+    ]
+    configs -= [ "//build/config/compiler:chromium_code" ]
+    configs += [ "//build/config/compiler:no_chromium_code" ]
+    deps = [
+      ":leveldb_testutil",
+    ]
+  }
 
-test("leveldb_version_edit_test") {
-  sources = [
-    "src/db/version_edit_test.cc",
-  ]
-  configs -= [ "//build/config/compiler:chromium_code" ]
-  configs += [ "//build/config/compiler:no_chromium_code" ]
-  deps = [
-    ":leveldb_testutil",
-  ]
-}
+  test("leveldb_version_edit_test") {
+    sources = [
+      "src/db/version_edit_test.cc",
+    ]
+    configs -= [ "//build/config/compiler:chromium_code" ]
+    configs += [ "//build/config/compiler:no_chromium_code" ]
+    deps = [
+      ":leveldb_testutil",
+    ]
+  }
 
-test("leveldb_write_batch_test") {
-  sources = [
-    "src/db/write_batch_test.cc",
-  ]
-  configs -= [ "//build/config/compiler:chromium_code" ]
-  configs += [ "//build/config/compiler:no_chromium_code" ]
-  deps = [
-    ":leveldb_testutil",
-  ]
+  test("leveldb_write_batch_test") {
+    sources = [
+      "src/db/write_batch_test.cc",
+    ]
+    configs -= [ "//build/config/compiler:chromium_code" ]
+    configs += [ "//build/config/compiler:no_chromium_code" ]
+    deps = [
+      ":leveldb_testutil",
+    ]
+  }
 }
diff --git a/tools/gn/secondary/third_party/libxml/BUILD.gn b/tools/gn/secondary/third_party/libxml/BUILD.gn
index 16fe1b3..e3f26a1 100644
--- a/tools/gn/secondary/third_party/libxml/BUILD.gn
+++ b/tools/gn/secondary/third_party/libxml/BUILD.gn
@@ -175,6 +175,13 @@
       # See http://crbug.com/138571#c8
       "-Wno-ignored-attributes",
     ]
+    if (is_mac) {
+      # Mac Clang warnings.
+      cflags += [
+        # debugXML.c compares array 'arg' to NULL.
+        "-Wno-tautological-pointer-compare",
+      ]
+    }
   }
 
   include_dirs = [
diff --git a/tools/gn/secondary/third_party/nss/BUILD.gn b/tools/gn/secondary/third_party/nss/BUILD.gn
index 340180d..61fbd2a 100644
--- a/tools/gn/secondary/third_party/nss/BUILD.gn
+++ b/tools/gn/secondary/third_party/nss/BUILD.gn
@@ -16,5 +16,1144 @@
     packages = [ "nss" ]
     extra_args = [ "-v", "-lssl3" ]
   }
-}
+} else {
+  include_nss_root_certs = is_ios
+  include_nss_libpkix = is_ios
+
+  config("nspr_config") {
+    defines = [ "NO_NSPR_10_SUPPORT" ]
+    include_dirs = [
+      "nspr/pr/include",
+      "nspr/lib/ds",
+      "nspr/lib/libc/include",
+    ]
+
+    if (component_mode != "shared_library") {
+      defines += [ "NSPR_STATIC" ]
+    }
+  }
+
+  component("nspr") {
+    output_name = "crnspr"
+    sources = [
+      "nspr/lib/ds/plarena.c",
+      "nspr/lib/ds/plarena.h",
+      "nspr/lib/ds/plarenas.h",
+      "nspr/lib/ds/plhash.c",
+      "nspr/lib/ds/plhash.h",
+      "nspr/lib/libc/include/plbase64.h",
+      "nspr/lib/libc/include/plerror.h",
+      "nspr/lib/libc/include/plgetopt.h",
+      "nspr/lib/libc/include/plstr.h",
+      "nspr/lib/libc/src/base64.c",
+      "nspr/lib/libc/src/plerror.c",
+      "nspr/lib/libc/src/plgetopt.c",
+      "nspr/lib/libc/src/strcase.c",
+      "nspr/lib/libc/src/strcat.c",
+      "nspr/lib/libc/src/strchr.c",
+      "nspr/lib/libc/src/strcmp.c",
+      "nspr/lib/libc/src/strcpy.c",
+      "nspr/lib/libc/src/strdup.c",
+      "nspr/lib/libc/src/strlen.c",
+      "nspr/lib/libc/src/strpbrk.c",
+      "nspr/lib/libc/src/strstr.c",
+      "nspr/lib/libc/src/strtok.c",
+      "nspr/pr/include/md/prosdep.h",
+      "nspr/pr/include/md/_darwin.cfg",
+      "nspr/pr/include/md/_darwin.h",
+      "nspr/pr/include/md/_pcos.h",
+      "nspr/pr/include/md/_pth.h",
+      "nspr/pr/include/md/_unixos.h",
+      "nspr/pr/include/md/_unix_errors.h",
+      "nspr/pr/include/md/_win32_errors.h",
+      "nspr/pr/include/md/_win95.cfg",
+      "nspr/pr/include/md/_win95.h",
+      "nspr/pr/include/nspr.h",
+      "nspr/pr/include/obsolete/pralarm.h",
+      "nspr/pr/include/obsolete/probslet.h",
+      "nspr/pr/include/obsolete/protypes.h",
+      "nspr/pr/include/obsolete/prsem.h",
+      "nspr/pr/include/pratom.h",
+      "nspr/pr/include/prbit.h",
+      "nspr/pr/include/prclist.h",
+      "nspr/pr/include/prcmon.h",
+      "nspr/pr/include/prcountr.h",
+      "nspr/pr/include/prcpucfg.h",
+      "nspr/pr/include/prcvar.h",
+      "nspr/pr/include/prdtoa.h",
+      "nspr/pr/include/prenv.h",
+      "nspr/pr/include/prerr.h",
+      "nspr/pr/include/prerror.h",
+      "nspr/pr/include/prinet.h",
+      "nspr/pr/include/prinit.h",
+      "nspr/pr/include/prinrval.h",
+      "nspr/pr/include/prio.h",
+      "nspr/pr/include/pripcsem.h",
+      "nspr/pr/include/private/pprio.h",
+      "nspr/pr/include/private/pprmwait.h",
+      "nspr/pr/include/private/pprthred.h",
+      "nspr/pr/include/private/primpl.h",
+      "nspr/pr/include/private/prpriv.h",
+      "nspr/pr/include/prlink.h",
+      "nspr/pr/include/prlock.h",
+      "nspr/pr/include/prlog.h",
+      "nspr/pr/include/prlong.h",
+      "nspr/pr/include/prmem.h",
+      "nspr/pr/include/prmon.h",
+      "nspr/pr/include/prmwait.h",
+      "nspr/pr/include/prnetdb.h",
+      "nspr/pr/include/prolock.h",
+      "nspr/pr/include/prpdce.h",
+      "nspr/pr/include/prprf.h",
+      "nspr/pr/include/prproces.h",
+      "nspr/pr/include/prrng.h",
+      "nspr/pr/include/prrwlock.h",
+      "nspr/pr/include/prshm.h",
+      "nspr/pr/include/prshma.h",
+      "nspr/pr/include/prsystem.h",
+      "nspr/pr/include/prthread.h",
+      "nspr/pr/include/prtime.h",
+      "nspr/pr/include/prtpool.h",
+      "nspr/pr/include/prtrace.h",
+      "nspr/pr/include/prtypes.h",
+      "nspr/pr/include/prvrsion.h",
+      "nspr/pr/include/prwin16.h",
+      "nspr/pr/src/io/prdir.c",
+      "nspr/pr/src/io/prfdcach.c",
+      "nspr/pr/src/io/prfile.c",
+      "nspr/pr/src/io/prio.c",
+      "nspr/pr/src/io/priometh.c",
+      "nspr/pr/src/io/pripv6.c",
+      "nspr/pr/src/io/prlayer.c",
+      "nspr/pr/src/io/prlog.c",
+      "nspr/pr/src/io/prmapopt.c",
+      "nspr/pr/src/io/prmmap.c",
+      "nspr/pr/src/io/prmwait.c",
+      "nspr/pr/src/io/prpolevt.c",
+      "nspr/pr/src/io/prprf.c",
+      "nspr/pr/src/io/prscanf.c",
+      "nspr/pr/src/io/prsocket.c",
+      "nspr/pr/src/io/prstdio.c",
+      "nspr/pr/src/linking/prlink.c",
+      "nspr/pr/src/malloc/prmalloc.c",
+      "nspr/pr/src/malloc/prmem.c",
+      "nspr/pr/src/md/prosdep.c",
+      "nspr/pr/src/md/unix/darwin.c",
+      "nspr/pr/src/md/unix/os_Darwin.s",
+      "nspr/pr/src/md/unix/unix.c",
+      "nspr/pr/src/md/unix/unix_errors.c",
+      "nspr/pr/src/md/unix/uxproces.c",
+      "nspr/pr/src/md/unix/uxrng.c",
+      "nspr/pr/src/md/unix/uxshm.c",
+      "nspr/pr/src/md/unix/uxwrap.c",
+      "nspr/pr/src/md/windows/ntgc.c",
+      "nspr/pr/src/md/windows/ntinrval.c",
+      "nspr/pr/src/md/windows/ntmisc.c",
+      "nspr/pr/src/md/windows/ntsec.c",
+      "nspr/pr/src/md/windows/ntsem.c",
+      "nspr/pr/src/md/windows/w32ipcsem.c",
+      "nspr/pr/src/md/windows/w32poll.c",
+      "nspr/pr/src/md/windows/w32rng.c",
+      "nspr/pr/src/md/windows/w32shm.c",
+      "nspr/pr/src/md/windows/w95cv.c",
+      "nspr/pr/src/md/windows/w95dllmain.c",
+      "nspr/pr/src/md/windows/w95io.c",
+      "nspr/pr/src/md/windows/w95sock.c",
+      "nspr/pr/src/md/windows/w95thred.c",
+      "nspr/pr/src/md/windows/win32_errors.c",
+      "nspr/pr/src/memory/prseg.c",
+      "nspr/pr/src/memory/prshm.c",
+      "nspr/pr/src/memory/prshma.c",
+      "nspr/pr/src/misc/pralarm.c",
+      "nspr/pr/src/misc/pratom.c",
+      "nspr/pr/src/misc/praton.c",
+      "nspr/pr/src/misc/prcountr.c",
+      "nspr/pr/src/misc/prdtoa.c",
+      "nspr/pr/src/misc/prenv.c",
+      "nspr/pr/src/misc/prerr.c",
+      "nspr/pr/src/misc/prerror.c",
+      "nspr/pr/src/misc/prerrortable.c",
+      "nspr/pr/src/misc/prinit.c",
+      "nspr/pr/src/misc/prinrval.c",
+      "nspr/pr/src/misc/pripc.c",
+      "nspr/pr/src/misc/pripcsem.c",
+      "nspr/pr/src/misc/prlog2.c",
+      "nspr/pr/src/misc/prlong.c",
+      "nspr/pr/src/misc/prnetdb.c",
+      "nspr/pr/src/misc/prolock.c",
+      "nspr/pr/src/misc/prrng.c",
+      "nspr/pr/src/misc/prsystem.c",
+      "nspr/pr/src/misc/prthinfo.c",
+      "nspr/pr/src/misc/prtime.c",
+      "nspr/pr/src/misc/prtpool.c",
+      "nspr/pr/src/misc/prtrace.c",
+      "nspr/pr/src/pthreads/ptio.c",
+      "nspr/pr/src/pthreads/ptmisc.c",
+      "nspr/pr/src/pthreads/ptsynch.c",
+      "nspr/pr/src/pthreads/ptthread.c",
+      "nspr/pr/src/threads/combined/prucpu.c",
+      "nspr/pr/src/threads/combined/prucv.c",
+      "nspr/pr/src/threads/combined/prulock.c",
+      "nspr/pr/src/threads/combined/prustack.c",
+      "nspr/pr/src/threads/combined/pruthr.c",
+      "nspr/pr/src/threads/prcmon.c",
+      "nspr/pr/src/threads/prcthr.c",
+      "nspr/pr/src/threads/prdump.c",
+      "nspr/pr/src/threads/prmon.c",
+      "nspr/pr/src/threads/prrwlock.c",
+      "nspr/pr/src/threads/prsem.c",
+      "nspr/pr/src/threads/prtpd.c",
+    ]
+
+    direct_dependent_configs = [ ":nspr_config" ]
+
+    configs -= [
+      "//build/config/compiler:chromium_code",
+    ]
+    if (is_win) {
+      configs -= [
+        "//build/config/win:unicode",  # Requires 8-bit mode.
+        "//build/config/win:lean_and_mean",  # Won"t compile with lean and mean.
+      ]
+    }
+    configs += [ "//build/config/compiler:no_chromium_code" ]
+
+    cflags = []
+    defines = [
+      "_NSPR_BUILD",
+      "FORCE_PR_LOG",
+    ]
+
+    include_dirs = [
+      "nspr/pr/include/private",
+    ]
+
+    if (is_win) {
+      cflags = [
+        "/wd4554",  # Check precidence.
+        "/wd4267",  # Conversion from size_t to "type".
+      ]
+      defines += [
+        "XP_PC",
+        "WIN32",
+        "WIN95",
+        "_PR_GLOBAL_THREADS_ONLY",
+        "_CRT_SECURE_NO_WARNINGS",
+      ]
+    } else {
+      sources -= [
+        "nspr/pr/src/md/windows/ntgc.c",
+        "nspr/pr/src/md/windows/ntinrval.c",
+        "nspr/pr/src/md/windows/ntmisc.c",
+        "nspr/pr/src/md/windows/ntsec.c",
+        "nspr/pr/src/md/windows/ntsem.c",
+        "nspr/pr/src/md/windows/w32ipcsem.c",
+        "nspr/pr/src/md/windows/w32poll.c",
+        "nspr/pr/src/md/windows/w32rng.c",
+        "nspr/pr/src/md/windows/w32shm.c",
+        "nspr/pr/src/md/windows/w95cv.c",
+        "nspr/pr/src/md/windows/w95dllmain.c",
+        "nspr/pr/src/md/windows/w95io.c",
+        "nspr/pr/src/md/windows/w95sock.c",
+        "nspr/pr/src/md/windows/w95thred.c",
+        "nspr/pr/src/md/windows/win32_errors.c",
+        "nspr/pr/src/threads/combined/prucpu.c",
+        "nspr/pr/src/threads/combined/prucv.c",
+        "nspr/pr/src/threads/combined/prulock.c",
+        "nspr/pr/src/threads/combined/prustack.c",
+        "nspr/pr/src/threads/combined/pruthr.c",
+      ]
+    }
+
+    if (!is_posix) {
+      sources -= [
+        "nspr/pr/src/md/unix/darwin.c",
+        "nspr/pr/src/md/unix/os_Darwin.s",
+        "nspr/pr/src/md/unix/unix.c",
+        "nspr/pr/src/md/unix/unix_errors.c",
+        "nspr/pr/src/md/unix/uxproces.c",
+        "nspr/pr/src/md/unix/uxrng.c",
+        "nspr/pr/src/md/unix/uxshm.c",
+        "nspr/pr/src/md/unix/uxwrap.c",
+        "nspr/pr/src/pthreads/ptio.c",
+        "nspr/pr/src/pthreads/ptmisc.c",
+        "nspr/pr/src/pthreads/ptsynch.c",
+        "nspr/pr/src/pthreads/ptthread.c",
+      ]
+    }
+
+    if (cpu_arch == "x86") {
+      defines += [ "_X86_" ]
+    } else if (cpu_arch == "x64") {
+      defines += [ "_AMD64_" ]
+    }
+
+    if (is_mac || is_ios) {
+      sources -= [
+        "nspr/pr/src/io/prdir.c",
+        "nspr/pr/src/io/prfile.c",
+        "nspr/pr/src/io/prio.c",
+        "nspr/pr/src/io/prsocket.c",
+        "nspr/pr/src/misc/pripcsem.c",
+        "nspr/pr/src/threads/prcthr.c",
+        "nspr/pr/src/threads/prdump.c",
+        "nspr/pr/src/threads/prmon.c",
+        "nspr/pr/src/threads/prsem.c",
+      ]
+      defines += [
+        "XP_UNIX",
+        "DARWIN",
+        "XP_MACOSX",
+        "_PR_PTHREADS",
+        "HAVE_BSD_FLOCK",
+        "HAVE_DLADDR",
+        "HAVE_LCHOWN",
+        "HAVE_SOCKLEN_T",
+        "HAVE_STRERROR",
+      ]
+    }
+
+    if (is_mac) {
+      defines += [
+        "HAVE_CRT_EXTERNS_H",
+      ]
+      libs = [
+        "CoreFoundation.framework",
+        "CoreServices.framework",
+      ]
+    }
+
+    if (is_clang) {
+      cflags += [
+        # nspr uses a bunch of deprecated functions (NSLinkModule etc) in
+        # prlink.c on mac.
+        "-Wno-deprecated-declarations",
+        # nspr passes "const char*" through "void*".
+        "-Wno-incompatible-pointer-types",
+        # nspr passes "int*" through "unsigned int*".
+        "-Wno-pointer-sign",
+
+        "-Wno-incompatible-pointer-types",
+        "-Wno-pointer-sign",
+      ]
+    }
+  }
+
+  component("nss") {
+    output_name = "crnss"
+    sources = [
+      # Ensure at least one object file is produced, so that MSVC does not
+      # warn when creating the static/shared library. See the note for
+      # the "nssckbi" target for why the "nss" target was split as such.
+      "nss/lib/nss/nssver.c",
+    ]
+
+    deps = [ ":nss_static" ]
+
+    if (include_nss_root_certs) {
+      deps += [ ":nssckbi" ]
+    }
+
+    if (component_mode == "shared_library") {
+      if (is_mac) {
+        cflags = [ "-all_load" ]
+      } else if (is_win) {
+        # Pass the def file to the linker.
+        ldflags += [ rebase_path("nss/exports_win.def", root_build_dir) ]
+      }
+    }
+
+    forward_dependent_configs_from = deps
+  }
+
+  config("nssckbi_config") {
+    include_dirs = [ "nss/lib/ckfw/builtins" ]
+  }
+
+  # This is really more of a pseudo-target to work around the fact that
+  # a single static_library target cannot contain two object files of the
+  # same name (hash.o / hash.obj). Logically, this is part of the
+  # "nss_static" target. By separating it out, it creates a possible
+  # circular dependency between "nss_static" and "nssckbi" when
+  # "exclude_nss_root_certs" is not specified, as "nss_static" depends on
+  # the "builtinsC_GetFunctionList" exported by this target. This is an
+  # artifact of how NSS is being statically built, which is not an
+  # officially supported configuration - normally, "nssckbi.dll/so" would
+  # depend on libnss3.dll/so, and the higher layer caller would instruct
+  # libnss3.dll to dynamically load nssckbi.dll, breaking the circle.
+  #
+  # TODO(rsleevi): http://crbug.com/128134 - Break the circular dependency
+  # without requiring nssckbi to be built as a shared library.
+  source_set("nssckbi") {
+    visibility = ":nss"  # This target is internal implementation detail.
+
+    sources = [
+      "nss/lib/ckfw/builtins/anchor.c",
+      "nss/lib/ckfw/builtins/bfind.c",
+      "nss/lib/ckfw/builtins/binst.c",
+      "nss/lib/ckfw/builtins/bobject.c",
+      "nss/lib/ckfw/builtins/bsession.c",
+      "nss/lib/ckfw/builtins/bslot.c",
+      "nss/lib/ckfw/builtins/btoken.c",
+      "nss/lib/ckfw/builtins/builtins.h",
+      "nss/lib/ckfw/builtins/certdata.c",
+      "nss/lib/ckfw/builtins/ckbiver.c",
+      "nss/lib/ckfw/builtins/constants.c",
+      "nss/lib/ckfw/builtins/nssckbi.h",
+      "nss/lib/ckfw/ck.h",
+      "nss/lib/ckfw/ckfw.h",
+      "nss/lib/ckfw/ckfwm.h",
+      "nss/lib/ckfw/ckfwtm.h",
+      "nss/lib/ckfw/ckmd.h",
+      "nss/lib/ckfw/ckt.h",
+      "nss/lib/ckfw/crypto.c",
+      "nss/lib/ckfw/find.c",
+      "nss/lib/ckfw/hash.c",
+      "nss/lib/ckfw/instance.c",
+      "nss/lib/ckfw/mechanism.c",
+      "nss/lib/ckfw/mutex.c",
+      "nss/lib/ckfw/nssck.api",
+      "nss/lib/ckfw/nssckepv.h",
+      "nss/lib/ckfw/nssckft.h",
+      "nss/lib/ckfw/nssckfw.h",
+      "nss/lib/ckfw/nssckfwc.h",
+      "nss/lib/ckfw/nssckfwt.h",
+      "nss/lib/ckfw/nssckg.h",
+      "nss/lib/ckfw/nssckmdt.h",
+      "nss/lib/ckfw/nssckt.h",
+      "nss/lib/ckfw/object.c",
+      "nss/lib/ckfw/session.c",
+      "nss/lib/ckfw/sessobj.c",
+      "nss/lib/ckfw/slot.c",
+      "nss/lib/ckfw/token.c",
+      "nss/lib/ckfw/wrap.c",
+    ]
+
+    configs -= [
+      "//build/config/compiler:chromium_code"
+    ]
+
+    if (is_win) {
+      configs -= [
+        "//build/config/win:unicode",  # Requires 8-bit mode.
+      ]
+    }
+    configs += [ "//build/config/compiler:no_chromium_code" ]
+
+    include_dirs = [ "nss/lib/ckfw" ]
+    direct_dependent_configs = [ ":nssckbi_config" ]
+
+    deps = [
+      ":nss_static",
+    ]
+    forward_dependent_configs_from = deps
+  }
+
+  config("nss_static_config") {
+    defines = [
+      "NSS_STATIC",
+      "NSS_USE_STATIC_LIBS",
+      "USE_UTIL_DIRECTLY",
+    ]
+    if (is_win) {
+      defines += [ "_WINDOWS" ]
+    }
+    include_dirs = [
+      "nspr/pr/include",
+      "nspr/lib/ds",
+      "nspr/lib/libc/include",
+      "nss/lib/base",
+      "nss/lib/certdb",
+      "nss/lib/certhigh",
+      "nss/lib/cryptohi",
+      "nss/lib/dev",
+      "nss/lib/freebl",
+      "nss/lib/freebl/ecl",
+      "nss/lib/nss",
+      "nss/lib/pk11wrap",
+      "nss/lib/pkcs7",
+      "nss/lib/pki",
+      "nss/lib/smime",
+      "nss/lib/softoken",
+      "nss/lib/util",
+    ]
+  }
+
+  source_set("nss_static") {
+    visibility = [ ":*" ]  # Internal implementation detail.
+
+    sources = [
+      "nss/lib/base/arena.c",
+      "nss/lib/base/base.h",
+      "nss/lib/base/baset.h",
+      "nss/lib/base/error.c",
+      "nss/lib/base/errorval.c",
+      "nss/lib/base/hash.c",
+      "nss/lib/base/hashops.c",
+      "nss/lib/base/item.c",
+      "nss/lib/base/libc.c",
+      "nss/lib/base/list.c",
+      "nss/lib/base/nssbase.h",
+      "nss/lib/base/nssbaset.h",
+      "nss/lib/base/nssutf8.c",
+      "nss/lib/base/tracker.c",
+      "nss/lib/certdb/alg1485.c",
+      "nss/lib/certdb/cert.h",
+      "nss/lib/certdb/certdb.c",
+      "nss/lib/certdb/certdb.h",
+      "nss/lib/certdb/certi.h",
+      "nss/lib/certdb/certt.h",
+      "nss/lib/certdb/certv3.c",
+      "nss/lib/certdb/certxutl.c",
+      "nss/lib/certdb/certxutl.h",
+      "nss/lib/certdb/crl.c",
+      "nss/lib/certdb/genname.c",
+      "nss/lib/certdb/genname.h",
+      "nss/lib/certdb/polcyxtn.c",
+      "nss/lib/certdb/secname.c",
+      "nss/lib/certdb/stanpcertdb.c",
+      "nss/lib/certdb/xauthkid.c",
+      "nss/lib/certdb/xbsconst.c",
+      "nss/lib/certdb/xconst.c",
+      "nss/lib/certdb/xconst.h",
+      "nss/lib/certhigh/certhigh.c",
+      "nss/lib/certhigh/certhtml.c",
+      "nss/lib/certhigh/certreq.c",
+      "nss/lib/certhigh/certvfy.c",
+      "nss/lib/certhigh/crlv2.c",
+      "nss/lib/certhigh/ocsp.c",
+      "nss/lib/certhigh/ocsp.h",
+      "nss/lib/certhigh/ocspi.h",
+      "nss/lib/certhigh/ocspsig.c",
+      "nss/lib/certhigh/ocspt.h",
+      "nss/lib/certhigh/ocspti.h",
+      "nss/lib/certhigh/xcrldist.c",
+      "nss/lib/cryptohi/cryptohi.h",
+      "nss/lib/cryptohi/cryptoht.h",
+      "nss/lib/cryptohi/dsautil.c",
+      "nss/lib/cryptohi/key.h",
+      "nss/lib/cryptohi/keyhi.h",
+      "nss/lib/cryptohi/keyi.h",
+      "nss/lib/cryptohi/keyt.h",
+      "nss/lib/cryptohi/keythi.h",
+      "nss/lib/cryptohi/sechash.c",
+      "nss/lib/cryptohi/sechash.h",
+      "nss/lib/cryptohi/seckey.c",
+      "nss/lib/cryptohi/secsign.c",
+      "nss/lib/cryptohi/secvfy.c",
+      "nss/lib/dev/ckhelper.c",
+      "nss/lib/dev/ckhelper.h",
+      "nss/lib/dev/dev.h",
+      "nss/lib/dev/devm.h",
+      "nss/lib/dev/devslot.c",
+      "nss/lib/dev/devt.h",
+      "nss/lib/dev/devtm.h",
+      "nss/lib/dev/devtoken.c",
+      "nss/lib/dev/devutil.c",
+      "nss/lib/dev/nssdev.h",
+      "nss/lib/dev/nssdevt.h",
+      "nss/lib/freebl/aeskeywrap.c",
+      "nss/lib/freebl/alg2268.c",
+      "nss/lib/freebl/alghmac.c",
+      "nss/lib/freebl/alghmac.h",
+      "nss/lib/freebl/arcfive.c",
+      "nss/lib/freebl/arcfour.c",
+      "nss/lib/freebl/blapi.h",
+      "nss/lib/freebl/blapii.h",
+      "nss/lib/freebl/blapit.h",
+      "nss/lib/freebl/build_config_mac.h",
+      "nss/lib/freebl/camellia.c",
+      "nss/lib/freebl/camellia.h",
+      "nss/lib/freebl/chacha20/chacha20.c",
+      "nss/lib/freebl/chacha20/chacha20.h",
+      "nss/lib/freebl/chacha20/chacha20_vec.c",
+      "nss/lib/freebl/chacha20poly1305.c",
+      "nss/lib/freebl/chacha20poly1305.h",
+      "nss/lib/freebl/ctr.c",
+      "nss/lib/freebl/ctr.h",
+      "nss/lib/freebl/cts.c",
+      "nss/lib/freebl/cts.h",
+      "nss/lib/freebl/des.c",
+      "nss/lib/freebl/des.h",
+      "nss/lib/freebl/desblapi.c",
+      "nss/lib/freebl/dh.c",
+      "nss/lib/freebl/drbg.c",
+      "nss/lib/freebl/dsa.c",
+      "nss/lib/freebl/ec.c",
+      "nss/lib/freebl/ec.h",
+      "nss/lib/freebl/ecl/ec2.h",
+      "nss/lib/freebl/ecl/ecl-curve.h",
+      "nss/lib/freebl/ecl/ecl-exp.h",
+      "nss/lib/freebl/ecl/ecl-priv.h",
+      "nss/lib/freebl/ecl/ecl.c",
+      "nss/lib/freebl/ecl/ecl.h",
+      "nss/lib/freebl/ecl/ecl_curve.c",
+      "nss/lib/freebl/ecl/ecl_gf.c",
+      "nss/lib/freebl/ecl/ecl_mult.c",
+      "nss/lib/freebl/ecl/ecp.h",
+      "nss/lib/freebl/ecl/ecp_256.c",
+      "nss/lib/freebl/ecl/ecp_256_32.c",
+      "nss/lib/freebl/ecl/ecp_384.c",
+      "nss/lib/freebl/ecl/ecp_521.c",
+      "nss/lib/freebl/ecl/ecp_aff.c",
+      "nss/lib/freebl/ecl/ecp_jac.c",
+      "nss/lib/freebl/ecl/ecp_jm.c",
+      "nss/lib/freebl/ecl/ecp_mont.c",
+      "nss/lib/freebl/ecl/ec_naf.c",
+      "nss/lib/freebl/gcm.c",
+      "nss/lib/freebl/gcm.h",
+      "nss/lib/freebl/hmacct.c",
+      "nss/lib/freebl/hmacct.h",
+      "nss/lib/freebl/jpake.c",
+      "nss/lib/freebl/md2.c",
+      "nss/lib/freebl/md5.c",
+      "nss/lib/freebl/mpi/logtab.h",
+      "nss/lib/freebl/mpi/mpcpucache.c",
+      "nss/lib/freebl/mpi/mpi-config.h",
+      "nss/lib/freebl/mpi/mpi-priv.h",
+      "nss/lib/freebl/mpi/mpi.c",
+      "nss/lib/freebl/mpi/mpi.h",
+      "nss/lib/freebl/mpi/mpi_amd64.c",
+      "nss/lib/freebl/mpi/mpi_arm.c",
+      "nss/lib/freebl/mpi/mpi_arm_mac.c",
+      "nss/lib/freebl/mpi/mpi_x86_asm.c",
+      "nss/lib/freebl/mpi/mplogic.c",
+      "nss/lib/freebl/mpi/mplogic.h",
+      "nss/lib/freebl/mpi/mpmontg.c",
+      "nss/lib/freebl/mpi/mpprime.c",
+      "nss/lib/freebl/mpi/mpprime.h",
+      "nss/lib/freebl/mpi/mp_gf2m-priv.h",
+      "nss/lib/freebl/mpi/mp_gf2m.c",
+      "nss/lib/freebl/mpi/mp_gf2m.h",
+      "nss/lib/freebl/mpi/primes.c",
+      "nss/lib/freebl/poly1305/poly1305-donna-x64-sse2-incremental-source.c",
+      "nss/lib/freebl/poly1305/poly1305.c",
+      "nss/lib/freebl/poly1305/poly1305.h",
+      "nss/lib/freebl/pqg.c",
+      "nss/lib/freebl/pqg.h",
+      "nss/lib/freebl/rawhash.c",
+      "nss/lib/freebl/rijndael.c",
+      "nss/lib/freebl/rijndael.h",
+      "nss/lib/freebl/rijndael32.tab",
+      "nss/lib/freebl/rsa.c",
+      "nss/lib/freebl/rsapkcs.c",
+      "nss/lib/freebl/secmpi.h",
+      "nss/lib/freebl/secrng.h",
+      "nss/lib/freebl/seed.c",
+      "nss/lib/freebl/seed.h",
+      "nss/lib/freebl/sha256.h",
+      "nss/lib/freebl/sha512.c",
+      "nss/lib/freebl/sha_fast.c",
+      "nss/lib/freebl/sha_fast.h",
+      "nss/lib/freebl/shsign.h",
+      "nss/lib/freebl/shvfy.c",
+      "nss/lib/freebl/sysrand.c",
+      "nss/lib/freebl/tlsprfalg.c",
+      "nss/lib/freebl/unix_rand.c",
+      "nss/lib/freebl/win_rand.c",
+      "nss/lib/nss/nss.h",
+      "nss/lib/nss/nssinit.c",
+      "nss/lib/nss/nssrenam.h",
+      "nss/lib/nss/utilwrap.c",
+      "nss/lib/pk11wrap/debug_module.c",
+      "nss/lib/pk11wrap/dev3hack.c",
+      "nss/lib/pk11wrap/dev3hack.h",
+      "nss/lib/pk11wrap/pk11akey.c",
+      "nss/lib/pk11wrap/pk11auth.c",
+      "nss/lib/pk11wrap/pk11cert.c",
+      "nss/lib/pk11wrap/pk11cxt.c",
+      "nss/lib/pk11wrap/pk11err.c",
+      "nss/lib/pk11wrap/pk11func.h",
+      "nss/lib/pk11wrap/pk11kea.c",
+      "nss/lib/pk11wrap/pk11list.c",
+      "nss/lib/pk11wrap/pk11load.c",
+      "nss/lib/pk11wrap/pk11mech.c",
+      "nss/lib/pk11wrap/pk11merge.c",
+      "nss/lib/pk11wrap/pk11nobj.c",
+      "nss/lib/pk11wrap/pk11obj.c",
+      "nss/lib/pk11wrap/pk11pars.c",
+      "nss/lib/pk11wrap/pk11pbe.c",
+      "nss/lib/pk11wrap/pk11pk12.c",
+      "nss/lib/pk11wrap/pk11pqg.c",
+      "nss/lib/pk11wrap/pk11pqg.h",
+      "nss/lib/pk11wrap/pk11priv.h",
+      "nss/lib/pk11wrap/pk11pub.h",
+      "nss/lib/pk11wrap/pk11sdr.c",
+      "nss/lib/pk11wrap/pk11sdr.h",
+      "nss/lib/pk11wrap/pk11skey.c",
+      "nss/lib/pk11wrap/pk11slot.c",
+      "nss/lib/pk11wrap/pk11util.c",
+      "nss/lib/pk11wrap/secmod.h",
+      "nss/lib/pk11wrap/secmodi.h",
+      "nss/lib/pk11wrap/secmodt.h",
+      "nss/lib/pk11wrap/secmodti.h",
+      "nss/lib/pk11wrap/secpkcs5.h",
+      "nss/lib/pkcs7/certread.c",
+      "nss/lib/pkcs7/p7common.c",
+      "nss/lib/pkcs7/p7create.c",
+      "nss/lib/pkcs7/p7decode.c",
+      "nss/lib/pkcs7/p7encode.c",
+      "nss/lib/pkcs7/p7local.c",
+      "nss/lib/pkcs7/p7local.h",
+      "nss/lib/pkcs7/pkcs7t.h",
+      "nss/lib/pkcs7/secmime.c",
+      "nss/lib/pkcs7/secmime.h",
+      "nss/lib/pkcs7/secpkcs7.h",
+      "nss/lib/pki/asymmkey.c",
+      "nss/lib/pki/certdecode.c",
+      "nss/lib/pki/certificate.c",
+      "nss/lib/pki/cryptocontext.c",
+      "nss/lib/pki/nsspki.h",
+      "nss/lib/pki/nsspkit.h",
+      "nss/lib/pki/pki.h",
+      "nss/lib/pki/pki3hack.c",
+      "nss/lib/pki/pki3hack.h",
+      "nss/lib/pki/pkibase.c",
+      "nss/lib/pki/pkim.h",
+      "nss/lib/pki/pkistore.c",
+      "nss/lib/pki/pkistore.h",
+      "nss/lib/pki/pkit.h",
+      "nss/lib/pki/pkitm.h",
+      "nss/lib/pki/symmkey.c",
+      "nss/lib/pki/tdcache.c",
+      "nss/lib/pki/trustdomain.c",
+      "nss/lib/smime/cms.h",
+      "nss/lib/smime/cmslocal.h",
+      "nss/lib/smime/cmsreclist.h",
+      "nss/lib/smime/cmst.h",
+      "nss/lib/smime/smime.h",
+      "nss/lib/softoken/ecdecode.c",
+      "nss/lib/softoken/fipsaudt.c",
+      "nss/lib/softoken/fipstest.c",
+      "nss/lib/softoken/fipstokn.c",
+      "nss/lib/softoken/jpakesftk.c",
+      "nss/lib/softoken/lgglue.c",
+      "nss/lib/softoken/lgglue.h",
+      "nss/lib/softoken/lowkey.c",
+      "nss/lib/softoken/lowkeyi.h",
+      "nss/lib/softoken/lowkeyti.h",
+      "nss/lib/softoken/lowpbe.c",
+      "nss/lib/softoken/lowpbe.h",
+      "nss/lib/softoken/padbuf.c",
+      "nss/lib/softoken/pkcs11.c",
+      "nss/lib/softoken/pkcs11c.c",
+      "nss/lib/softoken/pkcs11i.h",
+      "nss/lib/softoken/pkcs11ni.h",
+      "nss/lib/softoken/pkcs11u.c",
+      "nss/lib/softoken/sdb.c",
+      "nss/lib/softoken/sdb.h",
+      "nss/lib/softoken/sftkdb.c",
+      "nss/lib/softoken/sftkdb.h",
+      "nss/lib/softoken/sftkdbt.h",
+      "nss/lib/softoken/sftkdbti.h",
+      "nss/lib/softoken/sftkhmac.c",
+      "nss/lib/softoken/sftkpars.c",
+      "nss/lib/softoken/sftkpars.h",
+      "nss/lib/softoken/sftkpwd.c",
+      "nss/lib/softoken/softkver.c",
+      "nss/lib/softoken/softkver.h",
+      "nss/lib/softoken/softoken.h",
+      "nss/lib/softoken/softoknt.h",
+      "nss/lib/softoken/tlsprf.c",
+      "nss/lib/ssl/sslerr.h",
+      "nss/lib/util/SECerrs.h",
+      "nss/lib/util/base64.h",
+      "nss/lib/util/ciferfam.h",
+      "nss/lib/util/derdec.c",
+      "nss/lib/util/derenc.c",
+      "nss/lib/util/dersubr.c",
+      "nss/lib/util/dertime.c",
+      "nss/lib/util/errstrs.c",
+      "nss/lib/util/hasht.h",
+      "nss/lib/util/nssb64.h",
+      "nss/lib/util/nssb64d.c",
+      "nss/lib/util/nssb64e.c",
+      "nss/lib/util/nssb64t.h",
+      "nss/lib/util/nssilckt.h",
+      "nss/lib/util/nssilock.c",
+      "nss/lib/util/nssilock.h",
+      "nss/lib/util/nsslocks.h",
+      "nss/lib/util/nssrwlk.c",
+      "nss/lib/util/nssrwlk.h",
+      "nss/lib/util/nssrwlkt.h",
+      "nss/lib/util/nssutil.h",
+      "nss/lib/util/oidstring.c",
+      "nss/lib/util/pkcs11.h",
+      "nss/lib/util/pkcs11f.h",
+      "nss/lib/util/pkcs11n.h",
+      "nss/lib/util/pkcs11p.h",
+      "nss/lib/util/pkcs11t.h",
+      "nss/lib/util/pkcs11u.h",
+      "nss/lib/util/portreg.c",
+      "nss/lib/util/portreg.h",
+      "nss/lib/util/quickder.c",
+      "nss/lib/util/secalgid.c",
+      "nss/lib/util/secasn1.h",
+      "nss/lib/util/secasn1d.c",
+      "nss/lib/util/secasn1e.c",
+      "nss/lib/util/secasn1t.h",
+      "nss/lib/util/secasn1u.c",
+      "nss/lib/util/seccomon.h",
+      "nss/lib/util/secder.h",
+      "nss/lib/util/secdert.h",
+      "nss/lib/util/secdig.c",
+      "nss/lib/util/secdig.h",
+      "nss/lib/util/secdigt.h",
+      "nss/lib/util/secerr.h",
+      "nss/lib/util/secitem.c",
+      "nss/lib/util/secitem.h",
+      "nss/lib/util/secoid.c",
+      "nss/lib/util/secoid.h",
+      "nss/lib/util/secoidt.h",
+      "nss/lib/util/secport.c",
+      "nss/lib/util/secport.h",
+      "nss/lib/util/sectime.c",
+      "nss/lib/util/templates.c",
+      "nss/lib/util/utf8.c",
+      "nss/lib/util/utilmod.c",
+      "nss/lib/util/utilmodt.h",
+      "nss/lib/util/utilpars.c",
+      "nss/lib/util/utilpars.h",
+      "nss/lib/util/utilparst.h",
+      "nss/lib/util/utilrename.h",
+    ]
+
+    sources -= [
+      # mpi_arm.c is included by mpi_arm_mac.c.
+      # NOTE: mpi_arm.c can be used directly on Linux. mpi_arm.c will need
+      # to be excluded conditionally if we start to build NSS on Linux.
+      "nss/lib/freebl/mpi/mpi_arm.c",
+      # primes.c is included by mpprime.c.
+      "nss/lib/freebl/mpi/primes.c",
+      # unix_rand.c and win_rand.c are included by sysrand.c.
+      "nss/lib/freebl/unix_rand.c",
+      "nss/lib/freebl/win_rand.c",
+      # debug_module.c is included by pk11load.c.
+      "nss/lib/pk11wrap/debug_module.c",
+    ]
+
+    configs -= [
+      "//build/config/compiler:chromium_code"
+    ]
+    if (is_win) {
+      configs -= [
+        "//build/config/win:unicode",  # Requires 8-bit mode.
+      ]
+    }
+    configs += [ "//build/config/compiler:no_chromium_code" ]
+    direct_dependent_configs = [ ":nss_static_config" ]
+
+    cflags = []
+
+    # Only need the defines and includes not in nss_static_config.
+    defines = [
+      "MP_API_COMPATIBLE",
+      "NSS_DISABLE_DBM",
+      "RIJNDAEL_INCLUDE_TABLES",
+      "SHLIB_VERSION=\"3\"",
+      "SOFTOKEN_SHLIB_VERSION=\"3\"",
+    ]
+    include_dirs = [
+      "nss/lib/freebl/mpi",
+      "nss/lib/ssl",
+    ]
+
+    if (is_win) {
+      cflags += [
+        "/wd4101",  # Unreferenced local variable.
+        "/wd4267",  # Conversion from size_t to "type".
+      ]
+    }
+
+    if (include_nss_libpkix) {
+      sources += [
+        "nss/lib/certhigh/certvfypkix.c",
+        "nss/lib/certhigh/certvfypkixprint.c",
+        "nss/lib/libpkix/include/pkix.h",
+        "nss/lib/libpkix/include/pkix_certsel.h",
+        "nss/lib/libpkix/include/pkix_certstore.h",
+        "nss/lib/libpkix/include/pkix_checker.h",
+        "nss/lib/libpkix/include/pkix_crlsel.h",
+        "nss/lib/libpkix/include/pkix_errorstrings.h",
+        "nss/lib/libpkix/include/pkix_params.h",
+        "nss/lib/libpkix/include/pkix_pl_pki.h",
+        "nss/lib/libpkix/include/pkix_pl_system.h",
+        "nss/lib/libpkix/include/pkix_results.h",
+        "nss/lib/libpkix/include/pkix_revchecker.h",
+        "nss/lib/libpkix/include/pkix_sample_modules.h",
+        "nss/lib/libpkix/include/pkix_util.h",
+        "nss/lib/libpkix/include/pkixt.h",
+        "nss/lib/libpkix/pkix/certsel/pkix_certselector.c",
+        "nss/lib/libpkix/pkix/certsel/pkix_certselector.h",
+        "nss/lib/libpkix/pkix/certsel/pkix_comcertselparams.c",
+        "nss/lib/libpkix/pkix/certsel/pkix_comcertselparams.h",
+        "nss/lib/libpkix/pkix/checker/pkix_basicconstraintschecker.c",
+        "nss/lib/libpkix/pkix/checker/pkix_basicconstraintschecker.h",
+        "nss/lib/libpkix/pkix/checker/pkix_certchainchecker.c",
+        "nss/lib/libpkix/pkix/checker/pkix_certchainchecker.h",
+        "nss/lib/libpkix/pkix/checker/pkix_crlchecker.c",
+        "nss/lib/libpkix/pkix/checker/pkix_crlchecker.h",
+        "nss/lib/libpkix/pkix/checker/pkix_ekuchecker.c",
+        "nss/lib/libpkix/pkix/checker/pkix_ekuchecker.h",
+        "nss/lib/libpkix/pkix/checker/pkix_expirationchecker.c",
+        "nss/lib/libpkix/pkix/checker/pkix_expirationchecker.h",
+        "nss/lib/libpkix/pkix/checker/pkix_namechainingchecker.c",
+        "nss/lib/libpkix/pkix/checker/pkix_namechainingchecker.h",
+        "nss/lib/libpkix/pkix/checker/pkix_nameconstraintschecker.c",
+        "nss/lib/libpkix/pkix/checker/pkix_nameconstraintschecker.h",
+        "nss/lib/libpkix/pkix/checker/pkix_ocspchecker.c",
+        "nss/lib/libpkix/pkix/checker/pkix_ocspchecker.h",
+        "nss/lib/libpkix/pkix/checker/pkix_policychecker.c",
+        "nss/lib/libpkix/pkix/checker/pkix_policychecker.h",
+        "nss/lib/libpkix/pkix/checker/pkix_revocationchecker.c",
+        "nss/lib/libpkix/pkix/checker/pkix_revocationchecker.h",
+        "nss/lib/libpkix/pkix/checker/pkix_revocationmethod.c",
+        "nss/lib/libpkix/pkix/checker/pkix_revocationmethod.h",
+        "nss/lib/libpkix/pkix/checker/pkix_signaturechecker.c",
+        "nss/lib/libpkix/pkix/checker/pkix_signaturechecker.h",
+        "nss/lib/libpkix/pkix/checker/pkix_targetcertchecker.c",
+        "nss/lib/libpkix/pkix/checker/pkix_targetcertchecker.h",
+        "nss/lib/libpkix/pkix/crlsel/pkix_comcrlselparams.c",
+        "nss/lib/libpkix/pkix/crlsel/pkix_comcrlselparams.h",
+        "nss/lib/libpkix/pkix/crlsel/pkix_crlselector.c",
+        "nss/lib/libpkix/pkix/crlsel/pkix_crlselector.h",
+        "nss/lib/libpkix/pkix/params/pkix_procparams.c",
+        "nss/lib/libpkix/pkix/params/pkix_procparams.h",
+        "nss/lib/libpkix/pkix/params/pkix_resourcelimits.c",
+        "nss/lib/libpkix/pkix/params/pkix_resourcelimits.h",
+        "nss/lib/libpkix/pkix/params/pkix_trustanchor.c",
+        "nss/lib/libpkix/pkix/params/pkix_trustanchor.h",
+        "nss/lib/libpkix/pkix/params/pkix_valparams.c",
+        "nss/lib/libpkix/pkix/params/pkix_valparams.h",
+        "nss/lib/libpkix/pkix/results/pkix_buildresult.c",
+        "nss/lib/libpkix/pkix/results/pkix_buildresult.h",
+        "nss/lib/libpkix/pkix/results/pkix_policynode.c",
+        "nss/lib/libpkix/pkix/results/pkix_policynode.h",
+        "nss/lib/libpkix/pkix/results/pkix_valresult.c",
+        "nss/lib/libpkix/pkix/results/pkix_valresult.h",
+        "nss/lib/libpkix/pkix/results/pkix_verifynode.c",
+        "nss/lib/libpkix/pkix/results/pkix_verifynode.h",
+        "nss/lib/libpkix/pkix/store/pkix_store.c",
+        "nss/lib/libpkix/pkix/store/pkix_store.h",
+        "nss/lib/libpkix/pkix/top/pkix_build.c",
+        "nss/lib/libpkix/pkix/top/pkix_build.h",
+        "nss/lib/libpkix/pkix/top/pkix_lifecycle.c",
+        "nss/lib/libpkix/pkix/top/pkix_lifecycle.h",
+        "nss/lib/libpkix/pkix/top/pkix_validate.c",
+        "nss/lib/libpkix/pkix/top/pkix_validate.h",
+        "nss/lib/libpkix/pkix/util/pkix_error.c",
+        "nss/lib/libpkix/pkix/util/pkix_error.h",
+        "nss/lib/libpkix/pkix/util/pkix_errpaths.c",
+        "nss/lib/libpkix/pkix/util/pkix_list.c",
+        "nss/lib/libpkix/pkix/util/pkix_list.h",
+        "nss/lib/libpkix/pkix/util/pkix_logger.c",
+        "nss/lib/libpkix/pkix/util/pkix_logger.h",
+        "nss/lib/libpkix/pkix/util/pkix_tools.c",
+        "nss/lib/libpkix/pkix/util/pkix_tools.h",
+        "nss/lib/libpkix/pkix_pl_nss/module/pkix_pl_aiamgr.c",
+        "nss/lib/libpkix/pkix_pl_nss/module/pkix_pl_aiamgr.h",
+        "nss/lib/libpkix/pkix_pl_nss/module/pkix_pl_colcertstore.c",
+        "nss/lib/libpkix/pkix_pl_nss/module/pkix_pl_colcertstore.h",
+        "nss/lib/libpkix/pkix_pl_nss/module/pkix_pl_httpcertstore.c",
+        "nss/lib/libpkix/pkix_pl_nss/module/pkix_pl_httpcertstore.h",
+        "nss/lib/libpkix/pkix_pl_nss/module/pkix_pl_httpdefaultclient.c",
+        "nss/lib/libpkix/pkix_pl_nss/module/pkix_pl_httpdefaultclient.h",
+        "nss/lib/libpkix/pkix_pl_nss/module/pkix_pl_nsscontext.c",
+        "nss/lib/libpkix/pkix_pl_nss/module/pkix_pl_nsscontext.h",
+        "nss/lib/libpkix/pkix_pl_nss/module/pkix_pl_pk11certstore.c",
+        "nss/lib/libpkix/pkix_pl_nss/module/pkix_pl_pk11certstore.h",
+        "nss/lib/libpkix/pkix_pl_nss/module/pkix_pl_socket.c",
+        "nss/lib/libpkix/pkix_pl_nss/module/pkix_pl_socket.h",
+        "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_basicconstraints.c",
+        "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_basicconstraints.h",
+        "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_cert.c",
+        "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_cert.h",
+        "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_certpolicyinfo.c",
+        "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_certpolicyinfo.h",
+        "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_certpolicymap.c",
+        "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_certpolicymap.h",
+        "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_certpolicyqualifier.c",
+        "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_certpolicyqualifier.h",
+        "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_crl.c",
+        "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_crl.h",
+        "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_crldp.c",
+        "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_crldp.h",
+        "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_crlentry.c",
+        "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_crlentry.h",
+        "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_date.c",
+        "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_date.h",
+        "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_generalname.c",
+        "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_generalname.h",
+        "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_infoaccess.c",
+        "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_infoaccess.h",
+        "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_nameconstraints.c",
+        "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_nameconstraints.h",
+        "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_ocspcertid.c",
+        "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_ocspcertid.h",
+        "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_ocsprequest.c",
+        "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_ocsprequest.h",
+        "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_ocspresponse.c",
+        "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_ocspresponse.h",
+        "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_publickey.c",
+        "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_publickey.h",
+        "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_x500name.c",
+        "nss/lib/libpkix/pkix_pl_nss/pki/pkix_pl_x500name.h",
+        "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_bigint.c",
+        "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_bigint.h",
+        "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_bytearray.c",
+        "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_bytearray.h",
+        "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_common.c",
+        "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_common.h",
+        "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_error.c",
+        "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_hashtable.c",
+        "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_hashtable.h",
+        "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_lifecycle.c",
+        "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_lifecycle.h",
+        "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_mem.c",
+        "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_mem.h",
+        "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_monitorlock.c",
+        "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_monitorlock.h",
+        "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_mutex.c",
+        "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_mutex.h",
+        "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_object.c",
+        "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_object.h",
+        "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_oid.c",
+        "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_oid.h",
+        "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_primhash.c",
+        "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_primhash.h",
+        "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_rwlock.c",
+        "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_rwlock.h",
+        "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_string.c",
+        "nss/lib/libpkix/pkix_pl_nss/system/pkix_pl_string.h",
+      ]
+
+      # Disable the LDAP code in libpkix.
+      defines += [ "NSS_PKIX_NO_LDAP" ]
+
+      include_dirs += [
+        "nss/lib/libpkix/include",
+        "nss/lib/libpkix/pkix/certsel",
+        "nss/lib/libpkix/pkix/checker",
+        "nss/lib/libpkix/pkix/crlsel",
+        "nss/lib/libpkix/pkix/params",
+        "nss/lib/libpkix/pkix/results",
+        "nss/lib/libpkix/pkix/store",
+        "nss/lib/libpkix/pkix/top",
+        "nss/lib/libpkix/pkix/util",
+        "nss/lib/libpkix/pkix_pl_nss/module",
+        "nss/lib/libpkix/pkix_pl_nss/pki",
+        "nss/lib/libpkix/pkix_pl_nss/system",
+      ]
+    } else {
+      defines += [ "NSS_DISABLE_LIBPKIX" ]
+    }
+
+    if (!include_nss_root_certs) {
+      defines += [ "NSS_DISABLE_ROOT_CERTS" ]
+    }
+
+    if (cpu_arch == "x64" && !is_win) {
+      sources -= [
+        "nss/lib/freebl/chacha20/chacha20.c",
+        "nss/lib/freebl/poly1305/poly1305.c",
+      ]
+    } else {
+      sources -= [
+        "nss/lib/freebl/chacha20/chacha20_vec.c",
+        "nss/lib/freebl/poly1305/poly1305-donna-x64-sse2-incremental-source.c",
+      ]
+    }
+
+    if (is_mac || is_ios) {
+      sources -= [
+        "nss/lib/freebl/mpi/mpi_amd64.c",
+      ]
+      cflags += [
+        "-include",
+        rebase_path("//third_party/nss/nss/lib/freebl/build_config_mac.h",
+                    root_build_dir),
+      ]
+      defines += [
+        "XP_UNIX",
+        "DARWIN",
+        "HAVE_STRERROR",
+        "HAVE_BSD_FLOCK",
+        "SHLIB_SUFFIX=\"dylib\"",
+        "SHLIB_PREFIX=\"lib\"",
+        "SOFTOKEN_LIB_NAME=\"libsoftokn3.dylib\"",
+      ]
+
+      configs -= [ "//build/config/gcc:symbol_visibility_hidden" ]
+    } else {
+      # Not Mac/iOS.
+      sources -= [ "nss/lib/freebl/mpi/mpi_arm_mac.c" ]
+    }
+
+    if (is_win) {
+      sources -= [
+        "nss/lib/freebl/mpi/mpi_amd64.c",
+        "nss/lib/freebl/mpi/mpi_x86_asm.c",
+      ]
+      defines += [
+        "SHLIB_SUFFIX=\"dll\"",
+        "SHLIB_PREFIX=\"\"",
+        "SOFTOKEN_LIB_NAME=\"softokn3.dll\"",
+        "XP_PC",
+        "WIN32",
+        "WIN95",
+      ]
+
+      if (cpu_arch == "x86") {
+        defines += [
+          "NSS_X86_OR_X64",
+          "NSS_X86",
+          "_X86_",
+          "MP_ASSEMBLY_MULTIPLY",
+          "MP_ASSEMBLY_SQUARE",
+          "MP_ASSEMBLY_DIV_2DX1D",
+          "MP_USE_UINT_DIGIT",
+          "MP_NO_MP_WORD",
+        ]
+      } else if (cpu_arch == "x64") {
+        defines += [
+          "NSS_USE_64",
+          "NSS_X86_OR_X64",
+          "NSS_X64",
+          "_AMD64_",
+          "MP_CHAR_STORE_SLOW",
+          "MP_IS_LITTLE_ENDIAN",
+          "WIN64",
+        ]
+      }
+    } else {
+      # Not Windows.
+      sources -= [
+        # mpi_x86_asm.c contains MSVC inline assembly code.
+        "nss/lib/freebl/mpi/mpi_x86_asm.c",
+      ]
+    }
+
+    if (is_clang) {
+      cflags += [
+        # nss doesn"t explicitly cast between different enum types.
+        "-Wno-conversion",
+        # nss passes "const char*" through "void*".
+        "-Wno-incompatible-pointer-types",
+        # nss prefers `a && b || c` over `(a && b) || c`.
+        "-Wno-logical-op-parentheses",
+        # nss doesn"t use exhaustive switches on enums
+        "-Wno-switch",
+        # nss has some `unsigned < 0` checks.
+        "-Wno-tautological-compare",
+      ]
+    }
+
+    deps = [
+      ":nspr",
+      "//third_party/sqlite",
+    ]
+
+    forward_dependent_configs_from = [ ":nspr" ]
+  }
+}  # Windows/Mac/iOS.
 
diff --git a/tools/gn/secondary/third_party/snappy/BUILD.gn b/tools/gn/secondary/third_party/snappy/BUILD.gn
index 5a0313f..705cb8a 100644
--- a/tools/gn/secondary/third_party/snappy/BUILD.gn
+++ b/tools/gn/secondary/third_party/snappy/BUILD.gn
@@ -33,22 +33,14 @@
   configs += [ "//build/config/compiler:no_chromium_code" ]
   direct_dependent_configs = [ ":snappy_config" ]
 
-  #['OS=="win"', {
-  #          # Signed/unsigned comparison
-  #          'msvs_disabled_warnings': [
-  #            # https://code.google.com/p/snappy/issues/detail?id=71
-  #            4018,
-  #            # https://code.google.com/p/snappy/issues/detail?id=75
-  #            4267,
-  #          ],
-  #        }],
-  #      ['clang == 1', {
-  #          # snappy-stubs-internal.h unapologetically has: using namespace std
-  #          # https://code.google.com/p/snappy/issues/detail?id=70
-  #          'xcode_settings': {
-  #            'WARNING_CFLAGS!': [ '-Wheader-hygiene' ],
-  #          },
-  #          'cflags!': [ '-Wheader-hygiene' ],
-  #        }],
-  #    ],
+  if (is_clang) {
+    # snappy-stubs-internal.h unapologetically has: using namespace std
+    # https://code.google.com/p/snappy/issues/detail?id=70
+    configs -= [ "//build/config/clang:extra_warnings" ]
+  }
+
+  if (is_win) {
+    # https://code.google.com/p/snappy/issues/detail?id=75
+    cflags = [ "/wd4267" ]  # Conversion from size_t to 'type'.
+  }
 }
diff --git a/tools/gn/secondary/third_party/zlib/BUILD.gn b/tools/gn/secondary/third_party/zlib/BUILD.gn
index 033d462..323ff86 100644
--- a/tools/gn/secondary/third_party/zlib/BUILD.gn
+++ b/tools/gn/secondary/third_party/zlib/BUILD.gn
@@ -65,7 +65,8 @@
       "contrib/minizip/iowin32.c",
       "contrib/minizip/iowin32.h",
     ]
-  } else if (is_mac || is_ios || is_android) {
+  }
+  if (is_mac || is_ios || is_android) {
     # Mac, Android and the BSDs don't have fopen64, ftello64, or fseeko64. We
     # use fopen, ftell, and fseek instead on these systems.
     defines = [ "USE_FILE32API" ]
@@ -83,17 +84,19 @@
   direct_dependent_configs = [ ":zlib_config" ]
 }
 
-static_library("zip") {
-  sources = [
-    "google/zip.cc",
-    "google/zip.h",
-    "google/zip_internal.cc",
-    "google/zip_internal.h",
-    "google/zip_reader.cc",
-    "google/zip_reader.h",
-  ]
-  deps = [
-    ":minizip",
-    "//base",
-  ]
+if (!is_android) {
+  static_library("zip") {
+    sources = [
+      "google/zip.cc",
+      "google/zip.h",
+      "google/zip_internal.cc",
+      "google/zip_internal.h",
+      "google/zip_reader.cc",
+      "google/zip_reader.h",
+    ]
+    deps = [
+      ":minizip",
+      "//base",
+    ]
+  }
 }
diff --git a/tools/gn/secondary/tools/grit/grit_rule.gni b/tools/gn/secondary/tools/grit/grit_rule.gni
index f14a175..3836e71 100644
--- a/tools/gn/secondary/tools/grit/grit_rule.gni
+++ b/tools/gn/secondary/tools/grit/grit_rule.gni
@@ -44,9 +44,15 @@
     [ "--outputs", "$output_dir", source_path, "-f", resource_ids ] +
     grit_flags,
     "list lines")
+
   # The inputs are relative to the current (build) directory, rebase to
   # the current one.
-  grit_outputs = rebase_path(grit_outputs_build_rel, root_build_dir)
+  grit_outputs = rebase_path(grit_outputs_build_rel, ".", root_build_dir)
+
+  # The config and the action below get this visibility son only the generated
+  # source set can depend on them. The variable "target_name" will get
+  # overwritten inside the innter classes so we need to compute it here.
+  target_visibility = ":$target_name"
 
   # The current grit setup makes an file in $target_gen_dir/grit/foo.h that
   # the source code expects to include via "grit/foo.h". It would be nice to
@@ -55,14 +61,13 @@
   grit_config = target_name + "_grit_config"
   config(grit_config) {
     include_dirs = [ target_gen_dir ]
-
-    # Only our generated static library can depend on this.
-    visibility = ":" + target_name
+    visibility = target_visibility
   }
 
   grit_custom_target = target_name + "_grit"
   action(grit_custom_target) {
     script = "//tools/grit/grit.py"
+    hard_dep = true
     source_prereqs = grit_inputs
     outputs = grit_outputs
 
@@ -73,13 +78,12 @@
       "-o", output_dir,
     ] + grit_flags
 
-    # Only our generated static library can depend on this.
-    visibility = ":" + target_name
+    visibility = target_visibility
   }
 
   # This is the thing that people actually link with, it must be named the
   # same as the argument the template was invoked with.
-  static_library(target_name) {
+  source_set(target_name) {
     # Since we generate a file, we need to be run before the targets that
     # depend on us.
     hard_dep = true
@@ -87,12 +91,14 @@
 
     # Deps set on the template invocation will go on the grit script running
     # target rather than this library.
-    deps = []
     deps = [ ":$grit_custom_target" ]
     direct_dependent_configs = [ ":$grit_config" ]
 
     if (defined(invoker.visibility)) {
       visibility = invoker.visibility
     }
+    if (defined(invoker.output_name)) {
+      output_name = invoker.output_name
+    }
   }
 }
diff --git a/tools/gn/secondary/v8/BUILD.gn b/tools/gn/secondary/v8/BUILD.gn
new file mode 100644
index 0000000..f704b4f
--- /dev/null
+++ b/tools/gn/secondary/v8/BUILD.gn
@@ -0,0 +1,706 @@
+# 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.
+
+# These will need to be user-settable to support standalone V8 builds.
+v8_compress_startup_data = "off"
+v8_enable_i18n_support = true
+v8_use_default_platform = false
+
+# Shared configuration for our internal targets.
+config("internal_config") {
+  visibility = ":*"  # Only targets in this file can depend on this.
+
+  include_dirs = [ "src" ]
+
+  if (component_mode == "shared_library") {
+    defines = [
+      "BUILDING_V8_SHARED",
+      "V8_SHARED",
+    ]
+  }
+}
+
+# TODO(brettw) Fix v8_base on Android and re-enable.
+if (is_android) {
+  source_set("v8_base") {
+  }
+} else {
+
+source_set("v8_base") {
+  sources = [
+    "src/accessors.cc",
+    "src/accessors.h",
+    "src/allocation.cc",
+    "src/allocation.h",
+    "src/allocation-site-scopes.cc",
+    "src/allocation-site-scopes.h",
+    "src/allocation-tracker.cc",
+    "src/allocation-tracker.h",
+    "src/api.cc",
+    "src/api.h",
+    "src/arguments.cc",
+    "src/arguments.h",
+    "src/assembler.cc",
+    "src/assembler.h",
+    "src/assert-scope.h",
+    "src/assert-scope.cc",
+    "src/ast.cc",
+    "src/ast.h",
+    "src/atomicops.h",
+    "src/atomicops_internals_x86_gcc.cc",
+    "src/bignum-dtoa.cc",
+    "src/bignum-dtoa.h",
+    "src/bignum.cc",
+    "src/bignum.h",
+    "src/bootstrapper.cc",
+    "src/bootstrapper.h",
+    "src/builtins.cc",
+    "src/builtins.h",
+    "src/bytecodes-irregexp.h",
+    "src/cached-powers.cc",
+    "src/cached-powers.h",
+    "src/char-predicates-inl.h",
+    "src/char-predicates.h",
+    "src/checks.cc",
+    "src/checks.h",
+    "src/circular-queue-inl.h",
+    "src/circular-queue.h",
+    "src/code-stubs.cc",
+    "src/code-stubs.h",
+    "src/code-stubs-hydrogen.cc",
+    "src/code.h",
+    "src/codegen.cc",
+    "src/codegen.h",
+    "src/compilation-cache.cc",
+    "src/compilation-cache.h",
+    "src/compiler.cc",
+    "src/compiler.h",
+    "src/contexts.cc",
+    "src/contexts.h",
+    "src/conversions-inl.h",
+    "src/conversions.cc",
+    "src/conversions.h",
+    "src/counters.cc",
+    "src/counters.h",
+    "src/cpu-profiler-inl.h",
+    "src/cpu-profiler.cc",
+    "src/cpu-profiler.h",
+    "src/cpu.cc",
+    "src/cpu.h",
+    "src/data-flow.cc",
+    "src/data-flow.h",
+    "src/date.cc",
+    "src/date.h",
+    "src/dateparser-inl.h",
+    "src/dateparser.cc",
+    "src/dateparser.h",
+    "src/debug-agent.cc",
+    "src/debug-agent.h",
+    "src/debug.cc",
+    "src/debug.h",
+    "src/deoptimizer.cc",
+    "src/deoptimizer.h",
+    "src/disasm.h",
+    "src/disassembler.cc",
+    "src/disassembler.h",
+    "src/diy-fp.cc",
+    "src/diy-fp.h",
+    "src/double.h",
+    "src/dtoa.cc",
+    "src/dtoa.h",
+    "src/effects.h",
+    "src/elements-kind.cc",
+    "src/elements-kind.h",
+    "src/elements.cc",
+    "src/elements.h",
+    "src/execution.cc",
+    "src/execution.h",
+    "src/extensions/externalize-string-extension.cc",
+    "src/extensions/externalize-string-extension.h",
+    "src/extensions/free-buffer-extension.cc",
+    "src/extensions/free-buffer-extension.h",
+    "src/extensions/gc-extension.cc",
+    "src/extensions/gc-extension.h",
+    "src/extensions/statistics-extension.cc",
+    "src/extensions/statistics-extension.h",
+    "src/extensions/trigger-failure-extension.cc",
+    "src/extensions/trigger-failure-extension.h",
+    "src/factory.cc",
+    "src/factory.h",
+    "src/fast-dtoa.cc",
+    "src/fast-dtoa.h",
+    "src/feedback-slots.h",
+    "src/fixed-dtoa.cc",
+    "src/fixed-dtoa.h",
+    "src/flag-definitions.h",
+    "src/flags.cc",
+    "src/flags.h",
+    "src/frames-inl.h",
+    "src/frames.cc",
+    "src/frames.h",
+    "src/full-codegen.cc",
+    "src/full-codegen.h",
+    "src/func-name-inferrer.cc",
+    "src/func-name-inferrer.h",
+    "src/gdb-jit.cc",
+    "src/gdb-jit.h",
+    "src/global-handles.cc",
+    "src/global-handles.h",
+    "src/globals.h",
+    "src/handles-inl.h",
+    "src/handles.cc",
+    "src/handles.h",
+    "src/hashmap.h",
+    "src/heap-inl.h",
+    "src/heap-profiler.cc",
+    "src/heap-profiler.h",
+    "src/heap-snapshot-generator-inl.h",
+    "src/heap-snapshot-generator.cc",
+    "src/heap-snapshot-generator.h",
+    "src/heap.cc",
+    "src/heap.h",
+    "src/hydrogen-alias-analysis.h",
+    "src/hydrogen-bce.cc",
+    "src/hydrogen-bce.h",
+    "src/hydrogen-bch.cc",
+    "src/hydrogen-bch.h",
+    "src/hydrogen-canonicalize.cc",
+    "src/hydrogen-canonicalize.h",
+    "src/hydrogen-check-elimination.cc",
+    "src/hydrogen-check-elimination.h",
+    "src/hydrogen-dce.cc",
+    "src/hydrogen-dce.h",
+    "src/hydrogen-dehoist.cc",
+    "src/hydrogen-dehoist.h",
+    "src/hydrogen-environment-liveness.cc",
+    "src/hydrogen-environment-liveness.h",
+    "src/hydrogen-escape-analysis.cc",
+    "src/hydrogen-escape-analysis.h",
+    "src/hydrogen-flow-engine.h",
+    "src/hydrogen-instructions.cc",
+    "src/hydrogen-instructions.h",
+    "src/hydrogen.cc",
+    "src/hydrogen.h",
+    "src/hydrogen-gvn.cc",
+    "src/hydrogen-gvn.h",
+    "src/hydrogen-infer-representation.cc",
+    "src/hydrogen-infer-representation.h",
+    "src/hydrogen-infer-types.cc",
+    "src/hydrogen-infer-types.h",
+    "src/hydrogen-load-elimination.cc",
+    "src/hydrogen-load-elimination.h",
+    "src/hydrogen-mark-deoptimize.cc",
+    "src/hydrogen-mark-deoptimize.h",
+    "src/hydrogen-mark-unreachable.cc",
+    "src/hydrogen-mark-unreachable.h",
+    "src/hydrogen-osr.cc",
+    "src/hydrogen-osr.h",
+    "src/hydrogen-range-analysis.cc",
+    "src/hydrogen-range-analysis.h",
+    "src/hydrogen-redundant-phi.cc",
+    "src/hydrogen-redundant-phi.h",
+    "src/hydrogen-removable-simulates.cc",
+    "src/hydrogen-removable-simulates.h",
+    "src/hydrogen-representation-changes.cc",
+    "src/hydrogen-representation-changes.h",
+    "src/hydrogen-sce.cc",
+    "src/hydrogen-sce.h",
+    "src/hydrogen-store-elimination.cc",
+    "src/hydrogen-store-elimination.h",
+    "src/hydrogen-uint32-analysis.cc",
+    "src/hydrogen-uint32-analysis.h",
+    "src/i18n.cc",
+    "src/i18n.h",
+    "src/icu_util.cc",
+    "src/icu_util.h",
+    "src/ic-inl.h",
+    "src/ic.cc",
+    "src/ic.h",
+    "src/incremental-marking.cc",
+    "src/incremental-marking.h",
+    "src/interface.cc",
+    "src/interface.h",
+    "src/interpreter-irregexp.cc",
+    "src/interpreter-irregexp.h",
+    "src/isolate.cc",
+    "src/isolate.h",
+    "src/json-parser.h",
+    "src/json-stringifier.h",
+    "src/jsregexp-inl.h",
+    "src/jsregexp.cc",
+    "src/jsregexp.h",
+    "src/lazy-instance.h",
+    # TODO(jochen): move libplatform/ files to their own target.
+    "src/libplatform/default-platform.cc",
+    "src/libplatform/default-platform.h",
+    "src/libplatform/task-queue.cc",
+    "src/libplatform/task-queue.h",
+    "src/libplatform/worker-thread.cc",
+    "src/libplatform/worker-thread.h",
+    "src/list-inl.h",
+    "src/list.h",
+    "src/lithium-allocator-inl.h",
+    "src/lithium-allocator.cc",
+    "src/lithium-allocator.h",
+    "src/lithium-codegen.cc",
+    "src/lithium-codegen.h",
+    "src/lithium.cc",
+    "src/lithium.h",
+    "src/liveedit.cc",
+    "src/liveedit.h",
+    "src/log-inl.h",
+    "src/log-utils.cc",
+    "src/log-utils.h",
+    "src/log.cc",
+    "src/log.h",
+    "src/macro-assembler.h",
+    "src/mark-compact.cc",
+    "src/mark-compact.h",
+    "src/messages.cc",
+    "src/messages.h",
+    "src/msan.h",
+    "src/natives.h",
+    "src/objects-debug.cc",
+    "src/objects-inl.h",
+    "src/objects-printer.cc",
+    "src/objects-visiting.cc",
+    "src/objects-visiting.h",
+    "src/objects.cc",
+    "src/objects.h",
+    "src/once.cc",
+    "src/once.h",
+    "src/optimizing-compiler-thread.h",
+    "src/optimizing-compiler-thread.cc",
+    "src/parser.cc",
+    "src/parser.h",
+    "src/platform/elapsed-timer.h",
+    "src/platform/time.cc",
+    "src/platform/time.h",
+    "src/platform.h",
+    "src/platform/condition-variable.cc",
+    "src/platform/condition-variable.h",
+    "src/platform/mutex.cc",
+    "src/platform/mutex.h",
+    "src/platform/semaphore.cc",
+    "src/platform/semaphore.h",
+    "src/platform/socket.cc",
+    "src/platform/socket.h",
+    "src/preparse-data-format.h",
+    "src/preparse-data.cc",
+    "src/preparse-data.h",
+    "src/preparser.cc",
+    "src/preparser.h",
+    "src/prettyprinter.cc",
+    "src/prettyprinter.h",
+    "src/profile-generator-inl.h",
+    "src/profile-generator.cc",
+    "src/profile-generator.h",
+    "src/property-details.h",
+    "src/property.cc",
+    "src/property.h",
+    "src/regexp-macro-assembler-irregexp-inl.h",
+    "src/regexp-macro-assembler-irregexp.cc",
+    "src/regexp-macro-assembler-irregexp.h",
+    "src/regexp-macro-assembler-tracer.cc",
+    "src/regexp-macro-assembler-tracer.h",
+    "src/regexp-macro-assembler.cc",
+    "src/regexp-macro-assembler.h",
+    "src/regexp-stack.cc",
+    "src/regexp-stack.h",
+    "src/rewriter.cc",
+    "src/rewriter.h",
+    "src/runtime-profiler.cc",
+    "src/runtime-profiler.h",
+    "src/runtime.cc",
+    "src/runtime.h",
+    "src/safepoint-table.cc",
+    "src/safepoint-table.h",
+    "src/sampler.cc",
+    "src/sampler.h",
+    "src/scanner-character-streams.cc",
+    "src/scanner-character-streams.h",
+    "src/scanner.cc",
+    "src/scanner.h",
+    "src/scopeinfo.cc",
+    "src/scopeinfo.h",
+    "src/scopes.cc",
+    "src/scopes.h",
+    "src/serialize.cc",
+    "src/serialize.h",
+    "src/small-pointer-list.h",
+    "src/smart-pointers.h",
+    "src/snapshot-common.cc",
+    "src/snapshot.h",
+    "src/spaces-inl.h",
+    "src/spaces.cc",
+    "src/spaces.h",
+    "src/store-buffer-inl.h",
+    "src/store-buffer.cc",
+    "src/store-buffer.h",
+    "src/string-search.cc",
+    "src/string-search.h",
+    "src/string-stream.cc",
+    "src/string-stream.h",
+    "src/strtod.cc",
+    "src/strtod.h",
+    "src/stub-cache.cc",
+    "src/stub-cache.h",
+    "src/sweeper-thread.h",
+    "src/sweeper-thread.cc",
+    "src/token.cc",
+    "src/token.h",
+    "src/transitions-inl.h",
+    "src/transitions.cc",
+    "src/transitions.h",
+    "src/type-info.cc",
+    "src/type-info.h",
+    "src/types-inl.h",
+    "src/types.cc",
+    "src/types.h",
+    "src/typing.cc",
+    "src/typing.h",
+    "src/unbound-queue-inl.h",
+    "src/unbound-queue.h",
+    "src/unicode-inl.h",
+    "src/unicode.cc",
+    "src/unicode.h",
+    "src/unique.h",
+    "src/uri.h",
+    "src/utils-inl.h",
+    "src/utils.cc",
+    "src/utils.h",
+    "src/utils/random-number-generator.cc",
+    "src/utils/random-number-generator.h",
+    "src/v8-counters.cc",
+    "src/v8-counters.h",
+    "src/v8.cc",
+    "src/v8.h",
+    "src/v8checks.h",
+    "src/v8conversions.cc",
+    "src/v8conversions.h",
+    "src/v8globals.h",
+    "src/v8memory.h",
+    "src/v8threads.cc",
+    "src/v8threads.h",
+    "src/v8utils.cc",
+    "src/v8utils.h",
+    "src/variables.cc",
+    "src/variables.h",
+    "src/version.cc",
+    "src/version.h",
+    "src/vm-state-inl.h",
+    "src/vm-state.h",
+    "src/zone-inl.h",
+    "src/zone.cc",
+    "src/zone.h",
+  ]
+
+  if (cpu_arch == "x86") {
+    # TODO(brettw) the GYP file has
+    #   or v8_target_arch=="mac" or OS=="mac"
+    # which I don't understand.
+    sources += [
+      "src/ia32/assembler-ia32-inl.h",
+      "src/ia32/assembler-ia32.cc",
+      "src/ia32/assembler-ia32.h",
+      "src/ia32/builtins-ia32.cc",
+      "src/ia32/code-stubs-ia32.cc",
+      "src/ia32/code-stubs-ia32.h",
+      "src/ia32/codegen-ia32.cc",
+      "src/ia32/codegen-ia32.h",
+      "src/ia32/cpu-ia32.cc",
+      "src/ia32/debug-ia32.cc",
+      "src/ia32/deoptimizer-ia32.cc",
+      "src/ia32/disasm-ia32.cc",
+      "src/ia32/frames-ia32.cc",
+      "src/ia32/frames-ia32.h",
+      "src/ia32/full-codegen-ia32.cc",
+      "src/ia32/ic-ia32.cc",
+      "src/ia32/lithium-codegen-ia32.cc",
+      "src/ia32/lithium-codegen-ia32.h",
+      "src/ia32/lithium-gap-resolver-ia32.cc",
+      "src/ia32/lithium-gap-resolver-ia32.h",
+      "src/ia32/lithium-ia32.cc",
+      "src/ia32/lithium-ia32.h",
+      "src/ia32/macro-assembler-ia32.cc",
+      "src/ia32/macro-assembler-ia32.h",
+      "src/ia32/regexp-macro-assembler-ia32.cc",
+      "src/ia32/regexp-macro-assembler-ia32.h",
+      "src/ia32/stub-cache-ia32.cc",
+    ]
+  } else if (cpu_arch == "x64") {
+    sources += [
+      "src/x64/assembler-x64-inl.h",
+      "src/x64/assembler-x64.cc",
+      "src/x64/assembler-x64.h",
+      "src/x64/builtins-x64.cc",
+      "src/x64/code-stubs-x64.cc",
+      "src/x64/code-stubs-x64.h",
+      "src/x64/codegen-x64.cc",
+      "src/x64/codegen-x64.h",
+      "src/x64/cpu-x64.cc",
+      "src/x64/debug-x64.cc",
+      "src/x64/deoptimizer-x64.cc",
+      "src/x64/disasm-x64.cc",
+      "src/x64/frames-x64.cc",
+      "src/x64/frames-x64.h",
+      "src/x64/full-codegen-x64.cc",
+      "src/x64/ic-x64.cc",
+      "src/x64/lithium-codegen-x64.cc",
+      "src/x64/lithium-codegen-x64.h",
+      "src/x64/lithium-gap-resolver-x64.cc",
+      "src/x64/lithium-gap-resolver-x64.h",
+      "src/x64/lithium-x64.cc",
+      "src/x64/lithium-x64.h",
+      "src/x64/macro-assembler-x64.cc",
+      "src/x64/macro-assembler-x64.h",
+      "src/x64/regexp-macro-assembler-x64.cc",
+      "src/x64/regexp-macro-assembler-x64.h",
+      "src/x64/stub-cache-x64.cc",
+    ]
+  } else if (cpu_arch == "arm") {
+    sources += [
+      "src/arm/assembler-arm-inl.h",
+      "src/arm/assembler-arm.cc",
+      "src/arm/assembler-arm.h",
+      "src/arm/builtins-arm.cc",
+      "src/arm/code-stubs-arm.cc",
+      "src/arm/code-stubs-arm.h",
+      "src/arm/codegen-arm.cc",
+      "src/arm/codegen-arm.h",
+      "src/arm/constants-arm.h",
+      "src/arm/constants-arm.cc",
+      "src/arm/cpu-arm.cc",
+      "src/arm/debug-arm.cc",
+      "src/arm/deoptimizer-arm.cc",
+      "src/arm/disasm-arm.cc",
+      "src/arm/frames-arm.cc",
+      "src/arm/frames-arm.h",
+      "src/arm/full-codegen-arm.cc",
+      "src/arm/ic-arm.cc",
+      "src/arm/lithium-arm.cc",
+      "src/arm/lithium-arm.h",
+      "src/arm/lithium-codegen-arm.cc",
+      "src/arm/lithium-codegen-arm.h",
+      "src/arm/lithium-gap-resolver-arm.cc",
+      "src/arm/lithium-gap-resolver-arm.h",
+      "src/arm/macro-assembler-arm.cc",
+      "src/arm/macro-assembler-arm.h",
+      "src/arm/regexp-macro-assembler-arm.cc",
+      "src/arm/regexp-macro-assembler-arm.h",
+      "src/arm/simulator-arm.cc",
+      "src/arm/stub-cache-arm.cc",
+    ]
+  } else if (cpu_arch == "arm64") {
+    sources += [
+      "src/arm64/assembler-arm64.cc",
+      "src/arm64/assembler-arm64.h",
+      "src/arm64/assembler-arm64-inl.h",
+      "src/arm64/builtins-arm64.cc",
+      "src/arm64/codegen-arm64.cc",
+      "src/arm64/codegen-arm64.h",
+      "src/arm64/code-stubs-arm64.cc",
+      "src/arm64/code-stubs-arm64.h",
+      "src/arm64/constants-arm64.h",
+      "src/arm64/cpu-arm64.cc",
+      "src/arm64/cpu-arm64.h",
+      "src/arm64/debug-arm64.cc",
+      "src/arm64/decoder-arm64.cc",
+      "src/arm64/decoder-arm64.h",
+      "src/arm64/decoder-arm64-inl.h",
+      "src/arm64/deoptimizer-arm64.cc",
+      "src/arm64/disasm-arm64.cc",
+      "src/arm64/disasm-arm64.h",
+      "src/arm64/frames-arm64.cc",
+      "src/arm64/frames-arm64.h",
+      "src/arm64/full-codegen-arm64.cc",
+      "src/arm64/ic-arm64.cc",
+      "src/arm64/instructions-arm64.cc",
+      "src/arm64/instructions-arm64.h",
+      "src/arm64/instrument-arm64.cc",
+      "src/arm64/instrument-arm64.h",
+      "src/arm64/lithium-arm64.cc",
+      "src/arm64/lithium-arm64.h",
+      "src/arm64/lithium-codegen-arm64.cc",
+      "src/arm64/lithium-codegen-arm64.h",
+      "src/arm64/lithium-gap-resolver-arm64.cc",
+      "src/arm64/lithium-gap-resolver-arm64.h",
+      "src/arm64/macro-assembler-arm64.cc",
+      "src/arm64/macro-assembler-arm64.h",
+      "src/arm64/macro-assembler-arm64-inl.h",
+      "src/arm64/regexp-macro-assembler-arm64.cc",
+      "src/arm64/regexp-macro-assembler-arm64.h",
+      "src/arm64/simulator-arm64.cc",
+      "src/arm64/simulator-arm64.h",
+      "src/arm64/stub-cache-arm64.cc",
+      "src/arm64/utils-arm64.cc",
+      "src/arm64/utils-arm64.h",
+    ]
+  } else if (cpu_arch == "mipsel") {
+    sources += [
+      "src/mips/assembler-mips.cc",
+      "src/mips/assembler-mips.h",
+      "src/mips/assembler-mips-inl.h",
+      "src/mips/builtins-mips.cc",
+      "src/mips/codegen-mips.cc",
+      "src/mips/codegen-mips.h",
+      "src/mips/code-stubs-mips.cc",
+      "src/mips/code-stubs-mips.h",
+      "src/mips/constants-mips.cc",
+      "src/mips/constants-mips.h",
+      "src/mips/cpu-mips.cc",
+      "src/mips/debug-mips.cc",
+      "src/mips/deoptimizer-mips.cc",
+      "src/mips/disasm-mips.cc",
+      "src/mips/frames-mips.cc",
+      "src/mips/frames-mips.h",
+      "src/mips/full-codegen-mips.cc",
+      "src/mips/ic-mips.cc",
+      "src/mips/lithium-codegen-mips.cc",
+      "src/mips/lithium-codegen-mips.h",
+      "src/mips/lithium-gap-resolver-mips.cc",
+      "src/mips/lithium-gap-resolver-mips.h",
+      "src/mips/lithium-mips.cc",
+      "src/mips/lithium-mips.h",
+      "src/mips/macro-assembler-mips.cc",
+      "src/mips/macro-assembler-mips.h",
+      "src/mips/regexp-macro-assembler-mips.cc",
+      "src/mips/regexp-macro-assembler-mips.h",
+      "src/mips/simulator-mips.cc",
+      "src/mips/stub-cache-mips.cc",
+    ]
+  }
+
+  configs += [ ":internal_config" ]
+
+  defines = []
+  deps = []
+
+  if (is_posix) {
+    sources += [
+      "src/platform-posix.cc"
+    ]
+  }
+
+  if (is_linux) {
+    sources += [
+      "src/platform-linux.cc"
+    ]
+
+    # TODO(brettw)
+    # 'conditions': [
+    #  ['v8_compress_startup_data=="bz2"', {
+    #    'libraries': [
+    #      '-lbz2',
+    #    ]
+    #   }],
+    # ],
+
+    libs = [ "rt" ]
+  } else if (is_android) {
+    # TODO(brettW) OS=="android" condition from tools/gyp/v8.gyp
+  } else if (is_mac) {
+    sources += [ "src/platform-macoscc" ]
+  } else if (is_win) {
+    sources += [
+      "src/platform-win32.cc",
+      "src/win32-math.cc",
+      "src/win32-math.h",
+    ]
+
+    defines += [ "_CRT_RAND_S" ]  # for rand_s()
+
+    libs = [ "winmm.lib", "ws2_32.lib" ]
+  }
+
+
+  if (v8_enable_i18n_support) {
+    deps += [ "//third_party/icu" ]
+    if (is_win) {
+      deps += [ "//third_party/icu:icudata" ]
+    }
+  } else {
+    sources -= [
+      "src/i18n.cc",
+      "src/i18n.h",
+    ]
+  }
+
+  # TODO(brettw) other conditions from v8.gyp
+  # TODO(brettw) icu_use_data_file_flag
+}
+
+action("js2c") {
+  script = "tools/js2c.py"
+
+  # The script depends on this other script, this rule causes a rebuild if it
+  # changes.
+  source_prereqs = [ "tools/jsmin.py" ]
+
+  sources = [
+    "src/runtime.js",
+    "src/v8natives.js",
+    "src/array.js",
+    "src/string.js",
+    "src/uri.js",
+    "src/math.js",
+    "src/messages.js",
+    "src/apinatives.js",
+    "src/debug-debugger.js",
+    "src/mirror-debugger.js",
+    "src/liveedit-debugger.js",
+    "src/date.js",
+    "src/json.js",
+    "src/regexp.js",
+    "src/arraybuffer.js",
+    "src/typedarray.js",
+    "src/object-observe.js",
+    "src/macros.py",
+  ]
+
+  outputs = [
+    "$target_gen_dir/libraries.cc"
+  ]
+
+  if (v8_enable_i18n_support) {
+    sources += [ "src/i18n.js" ]
+  }
+
+  args =
+    rebase_path(outputs, root_build_dir) +
+    [ "CORE", v8_compress_startup_data ] + 
+    rebase_path(sources, root_build_dir)
+}
+
+source_set("v8_nosnapshot") {
+  visibility = ":*"  # Only targets in this file can depend on this.
+
+  sources = [
+
+  ]
+
+  configs += [ ":internal_config" ]
+}
+
+# TODO finish this, currently has linker errors.
+#executable("mksnapshot") {
+#  visibility = ":*"  # Only targets in this file can depend on this.
+#
+#  sources = [
+#    "src/mksnapshot.cc",
+#  ]
+#
+#  configs += [ ":internal_config" ]
+#
+#  deps = [
+#    ":v8_base",
+#    ":v8_nosnapshot",
+#  ]
+#
+#  if (v8_compress_startup_data == "bz2") {
+#    libs = [ "bz2" ]
+#  }
+#}
+
+}  # end Android commenting-out.
diff --git a/tools/gn/variables.cc b/tools/gn/variables.cc
index 4b49f60..344a9d9 100644
--- a/tools/gn/variables.cc
+++ b/tools/gn/variables.cc
@@ -240,6 +240,25 @@
 
 // Target variables ------------------------------------------------------------
 
+#define COMMON_ORDERING_HELP \
+    "\n" \
+    "Ordering of flags and values:\n" \
+    "\n" \
+    "  1. Those set on the current target (not in a config).\n" \
+    "  2. Those set on the \"configs\" on the target in order that the\n" \
+    "     configs appear in the list.\n" \
+    "  3. Those set on the \"all_dependent_configs\" on the target in order\n" \
+    "     that the configs appear in the list.\n" \
+    "  4. Those set on the \"direct_dependent_configs\" on the target in\n" \
+    "     order that those configs appear in the list.\n" \
+    "  5. all_dependent_configs pulled from dependencies, in the order of\n" \
+    "     the \"deps\" list. This is done recursively. If a config appears\n" \
+    "     more than once, only the first occurance will be used.\n" \
+    "  6. direct_dependent_configs pulled from dependencies, in the order\n" \
+    "     of the \"deps\" list. If a dependency has\n" \
+    "     \"forward_dependent_configs_from\", they will be applied\n" \
+    "     recursively.\n"
+
 const char kAllDependentConfigs[] = "all_dependent_configs";
 const char kAllDependentConfigs_HelpShort[] =
     "all_dependent_configs: [label list] Configs to be forced on dependents.";
@@ -259,7 +278,8 @@
     "  capability should generally only be used to add defines and include\n"
     "  directories necessary to compile a target's headers.\n"
     "\n"
-    "  See also \"direct_dependent_configs\".\n";
+    "  See also \"direct_dependent_configs\".\n"
+    COMMON_ORDERING_HELP;
 
 const char kArgs[] = "args";
 const char kArgs_HelpShort[] =
@@ -294,7 +314,8 @@
     "  To target one of these variants individually, use \"cflags_c\",\n"
     "  \"cflags_cc\", \"cflags_objc\", and \"cflags_objcc\", respectively.\n"
     "  These variant-specific versions will be appended to the \"cflags\".\n"
-    COMMON_FLAGS_HELP;
+    COMMON_FLAGS_HELP
+    COMMON_ORDERING_HELP;
 const char* kCflags_Help = kCommonCflagsHelp;
 
 const char kCflagsC[] = "cflags_c";
@@ -334,6 +355,7 @@
     "  configs applying to a given target type (see \"set_defaults\").\n"
     "  When a target is being defined, it can add to or remove from this\n"
     "  list.\n"
+    COMMON_ORDERING_HELP
     "\n"
     "Example:\n"
     "  static_library(\"foo\") {\n"
@@ -392,6 +414,7 @@
     "\n"
     "  These strings will be passed to the C/C++ compiler as #defines. The\n"
     "  strings may or may not include an \"=\" to assign a value.\n"
+    COMMON_ORDERING_HELP
     "\n"
     "Example:\n"
     "  defines = [ \"AWESOME_FEATURE\", \"LOG_LEVEL=3\" ]\n";
@@ -464,7 +487,8 @@
     "  capability should generally only be used to add defines and include\n"
     "  directories necessary to compile a target's headers.\n"
     "\n"
-    "  See also \"all_dependent_configs\".\n";
+    "  See also \"all_dependent_configs\".\n"
+    COMMON_ORDERING_HELP;
 
 const char kForwardDependentConfigsFrom[] = "forward_dependent_configs_from";
 const char kForwardDependentConfigsFrom_HelpShort[] =
@@ -551,6 +575,7 @@
     "\n"
     "  The directories in this list will be added to the include path for\n"
     "  the files in the affected target.\n"
+    COMMON_ORDERING_HELP
     "\n"
     "Example:\n"
     "  include_dirs = [ \"src/include\", \"//third_party/foo\" ]\n";
@@ -566,6 +591,11 @@
     "  These flags are passed on the command-line to the linker and generally\n"
     "  specify various linking options. Most targets will not need these and\n"
     "  will use \"libs\" and \"lib_dirs\" instead.\n"
+    "\n"
+    "  ldflags are NOT pushed to dependents, so applying ldflags to source\n"
+    "  sets or static libraries will be a no-op. If you want to apply ldflags\n"
+    "  to dependent targets, put them in a config and set it in the\n"
+    "  all_dependent_configs or direct_dependent_configs.\n"
     COMMON_FLAGS_HELP;
 
 #define COMMON_LIB_INHERITANCE_HELP \
@@ -574,13 +604,7 @@
     "  First, then are inherited across static library boundaries until a\n" \
     "  shared library or executable target is reached. Second, they are\n" \
     "  uniquified so each one is only passed once (the first instance of it\n" \
-    "  will be the one used).\n" \
-    "\n" \
-    "  The order that libs/lib_dirs apply is:\n" \
-    "    1. Ones set on the target itself.\n" \
-    "    2. Ones from the configs applying to the target.\n" \
-    "    3. Ones from deps of the target, in order (recursively following\n" \
-    "       these rules).\n"
+    "  will be the one used).\n"
 
 const char kLibDirs[] = "lib_dirs";
 const char kLibDirs_HelpShort[] =
@@ -594,6 +618,7 @@
     "  for the required libraries. If an item is not an absolute path, it\n"
     "  will be treated as being relative to the current build file.\n"
     COMMON_LIB_INHERITANCE_HELP
+    COMMON_ORDERING_HELP
     "\n"
     "Example:\n"
     "  lib_dirs = [ \"/usr/lib/foo\", \"lib/doom_melon\" ]\n";
@@ -621,6 +646,7 @@
     "  special-cased: the switch \"-framework\" will be prepended instead of\n"
     "  the lib_prefix, and the \".framework\" suffix will be trimmed.\n"
     COMMON_LIB_INHERITANCE_HELP
+    COMMON_ORDERING_HELP
     "\n"
     "Examples:\n"
     "  On Windows:\n"
diff --git a/tools/gritsettings/resource_ids b/tools/gritsettings/resource_ids
index 32f91ae..7a1c7f7 100644
--- a/tools/gritsettings/resource_ids
+++ b/tools/gritsettings/resource_ids
@@ -165,6 +165,10 @@
   "chrome/common/extensions_api_resources.grd": {
     "includes": [26500],
   },
+  # TODO(jamescook): Add extensions/extensions_resources.grd here.
+  "extensions/extensions_strings.grd": {
+    "messages": [27000],
+  },
   "chrome/browser/resources/memory_internals_resources.grd": {
     "includes": [27500],
   },
@@ -177,6 +181,9 @@
   "ui/keyboard/keyboard_resources.grd": {
     "includes": [28050],
   },
+  "ui/file_manager/file_manager_resources.grd": {
+    "includes": [28100],
+  },
   "chrome/browser/resources/translate_internals_resources.grd": {
     "includes": [28500],
   },
diff --git a/tools/gtk_clipboard_dump/gtk_clipboard_dump.cc b/tools/gtk_clipboard_dump/gtk_clipboard_dump.cc
deleted file mode 100644
index 4ddf1a2..0000000
--- a/tools/gtk_clipboard_dump/gtk_clipboard_dump.cc
+++ /dev/null
@@ -1,85 +0,0 @@
-// Copyright (c) 2006-2008 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 <gtk/gtk.h>
-#include <stdio.h>
-#include <string.h>
-#include <string>
-
-namespace {
-
-void PrintClipboardContents(GtkClipboard* clip) {
-  GdkAtom* targets;
-  int num_targets = 0;
-
-  // This call is bugged, the cache it checks is often stale; see
-  // <http://bugzilla.gnome.org/show_bug.cgi?id=557315>.
-  // gtk_clipboard_wait_for_targets(clip, &targets, &num_targets);
-
-  GtkSelectionData* target_data =
-      gtk_clipboard_wait_for_contents(clip,
-                                      gdk_atom_intern("TARGETS", false));
-  if (!target_data) {
-    printf("failed to get the contents!\n");
-    return;
-  }
-
-  gtk_selection_data_get_targets(target_data, &targets, &num_targets);
-
-  printf("%d available targets:\n---------------\n", num_targets);
-
-  for (int i = 0; i < num_targets; i++) {
-    gchar* target_name_cstr = gdk_atom_name(targets[i]);
-    std::string target_name(target_name_cstr);
-    g_free(target_name_cstr);
-    printf("  [format: %s", target_name.c_str());
-    GtkSelectionData* data = gtk_clipboard_wait_for_contents(clip, targets[i]);
-    if (!data) {
-      printf("]: NULL\n\n");
-      continue;
-    }
-
-    printf(" / length: %d / bits %d]: ", data->length, data->format);
-
-    if (strstr(target_name.c_str(), "image")) {
-      printf("(image omitted)\n\n");
-    } else if (strstr(target_name.c_str(), "TIMESTAMP")) {
-      // TODO(estade): Print the time stamp in human readable format.
-      printf("(time omitted)\n\n");
-    } else {
-      for (int j = 0; j < data->length; j++) {
-        // Output data one byte at a time. Currently wide strings look
-        // pretty weird.
-        printf("%c", (data->data[j] == 0 ? '_' : data->data[j]));
-      }
-      printf("\n\n");
-    }
-    gtk_selection_data_free(data);
-  }
-
-  if (num_targets <= 0) {
-    printf("No targets advertised. Text is: ");
-    gchar* text = gtk_clipboard_wait_for_text(clip);
-    printf("%s\n", text ? text : "NULL");
-    g_free(text);
-  }
-
-  g_free(targets);
-  gtk_selection_data_free(target_data);
-}
-
-}
-
-/* Small program to dump the contents of GTK's clipboards to the terminal.
- * Feel free to add to it or improve formatting or whatnot.
- */
-int main(int argc, char* argv[]) {
-  gtk_init(&argc, &argv);
-
-  printf("Desktop clipboard\n");
-  PrintClipboardContents(gtk_clipboard_get(GDK_SELECTION_CLIPBOARD));
-
-  printf("X clipboard\n");
-  PrintClipboardContents(gtk_clipboard_get(GDK_SELECTION_PRIMARY));
-}
diff --git a/tools/gtk_clipboard_dump/gtk_clipboard_dump.gyp b/tools/gtk_clipboard_dump/gtk_clipboard_dump.gyp
deleted file mode 100644
index 2112108..0000000
--- a/tools/gtk_clipboard_dump/gtk_clipboard_dump.gyp
+++ /dev/null
@@ -1,14 +0,0 @@
-{
-  'targets': [
-    {
-      'target_name': 'gtk_clipboard_dump',
-      'type': 'executable',
-      'dependencies': [
-        '../../build/linux/system.gyp:gtk',
-      ],
-      'sources': [
-        'gtk_clipboard_dump.cc',
-      ],
-    },
-  ],
-}
diff --git a/tools/ipc_fuzzer/message_lib/message_lib.gyp b/tools/ipc_fuzzer/message_lib/message_lib.gyp
index ed2527d..ae8a801 100644
--- a/tools/ipc_fuzzer/message_lib/message_lib.gyp
+++ b/tools/ipc_fuzzer/message_lib/message_lib.gyp
@@ -14,7 +14,7 @@
         '../../../base/base.gyp:base',
         '../../../chrome/chrome.gyp:common',
         '../../../ipc/ipc.gyp:ipc',
-        '../../../media/cast/transport/cast_transport.gyp:cast_transport',
+        '../../../media/cast/cast.gyp:cast_transport',
         '../../../skia/skia.gyp:skia',
         '../../../third_party/libjingle/libjingle.gyp:libjingle',
         '../../../ui/accessibility/accessibility.gyp:ax_gen',
diff --git a/tools/ipc_fuzzer/mutate/mutate.gyp b/tools/ipc_fuzzer/mutate/mutate.gyp
index 2dbe6e6..7b13599 100644
--- a/tools/ipc_fuzzer/mutate/mutate.gyp
+++ b/tools/ipc_fuzzer/mutate/mutate.gyp
@@ -14,7 +14,7 @@
         '../../../base/base.gyp:base',
         '../../../chrome/chrome.gyp:common',
         '../../../ipc/ipc.gyp:ipc',
-        '../../../media/cast/transport/cast_transport.gyp:cast_transport',
+        '../../../media/cast/cast.gyp:cast_transport',
         '../../../ppapi/ppapi_internal.gyp:ppapi_ipc',
         '../../../skia/skia.gyp:skia',
         '../../../third_party/libjingle/libjingle.gyp:libjingle',
@@ -41,7 +41,7 @@
         '../../../base/base.gyp:base',
         '../../../chrome/chrome.gyp:common',
         '../../../ipc/ipc.gyp:ipc',
-        '../../../media/cast/transport/cast_transport.gyp:cast_transport',
+        '../../../media/cast/cast.gyp:cast_transport',
         '../../../ppapi/ppapi_internal.gyp:ppapi_ipc',
         '../../../skia/skia.gyp:skia',
         '../../../third_party/libjingle/libjingle.gyp:libjingle',
diff --git a/tools/ipc_fuzzer/replay/replay.gyp b/tools/ipc_fuzzer/replay/replay.gyp
index 1a46f9f..ae47cc8 100644
--- a/tools/ipc_fuzzer/replay/replay.gyp
+++ b/tools/ipc_fuzzer/replay/replay.gyp
@@ -15,7 +15,7 @@
         '../../../base/base.gyp:base',
         '../../../chrome/chrome.gyp:common',
         '../../../ipc/ipc.gyp:ipc',
-        '../../../media/cast/transport/cast_transport.gyp:cast_transport',
+        '../../../media/cast/cast.gyp:cast_transport',
       ],
       'sources': [
         'replay.cc',
diff --git a/tools/json_schema_compiler/api_gen_util.target.darwin-arm.mk b/tools/json_schema_compiler/api_gen_util.target.darwin-arm.mk
index c6dc17f..49306f3 100644
--- a/tools/json_schema_compiler/api_gen_util.target.darwin-arm.mk
+++ b/tools/json_schema_compiler/api_gen_util.target.darwin-arm.mk
@@ -219,7 +219,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/tools/json_schema_compiler/api_gen_util.target.darwin-mips.mk b/tools/json_schema_compiler/api_gen_util.target.darwin-mips.mk
index d0c5dae..6823ded 100644
--- a/tools/json_schema_compiler/api_gen_util.target.darwin-mips.mk
+++ b/tools/json_schema_compiler/api_gen_util.target.darwin-mips.mk
@@ -215,7 +215,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/tools/json_schema_compiler/api_gen_util.target.darwin-x86.mk b/tools/json_schema_compiler/api_gen_util.target.darwin-x86.mk
index 945f9dd..9380123 100644
--- a/tools/json_schema_compiler/api_gen_util.target.darwin-x86.mk
+++ b/tools/json_schema_compiler/api_gen_util.target.darwin-x86.mk
@@ -217,7 +217,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/tools/json_schema_compiler/api_gen_util.target.darwin-x86_64.mk b/tools/json_schema_compiler/api_gen_util.target.darwin-x86_64.mk
index 037a03d..e2a4835 100644
--- a/tools/json_schema_compiler/api_gen_util.target.darwin-x86_64.mk
+++ b/tools/json_schema_compiler/api_gen_util.target.darwin-x86_64.mk
@@ -217,7 +217,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/tools/json_schema_compiler/api_gen_util.target.linux-arm.mk b/tools/json_schema_compiler/api_gen_util.target.linux-arm.mk
index c6dc17f..49306f3 100644
--- a/tools/json_schema_compiler/api_gen_util.target.linux-arm.mk
+++ b/tools/json_schema_compiler/api_gen_util.target.linux-arm.mk
@@ -219,7 +219,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/tools/json_schema_compiler/api_gen_util.target.linux-mips.mk b/tools/json_schema_compiler/api_gen_util.target.linux-mips.mk
index d0c5dae..6823ded 100644
--- a/tools/json_schema_compiler/api_gen_util.target.linux-mips.mk
+++ b/tools/json_schema_compiler/api_gen_util.target.linux-mips.mk
@@ -215,7 +215,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/tools/json_schema_compiler/api_gen_util.target.linux-x86.mk b/tools/json_schema_compiler/api_gen_util.target.linux-x86.mk
index 945f9dd..9380123 100644
--- a/tools/json_schema_compiler/api_gen_util.target.linux-x86.mk
+++ b/tools/json_schema_compiler/api_gen_util.target.linux-x86.mk
@@ -217,7 +217,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/tools/json_schema_compiler/api_gen_util.target.linux-x86_64.mk b/tools/json_schema_compiler/api_gen_util.target.linux-x86_64.mk
index 037a03d..e2a4835 100644
--- a/tools/json_schema_compiler/api_gen_util.target.linux-x86_64.mk
+++ b/tools/json_schema_compiler/api_gen_util.target.linux-x86_64.mk
@@ -217,7 +217,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/tools/memory_inspector/memory_inspector/backends/android/android_backend.py b/tools/memory_inspector/memory_inspector/backends/android/android_backend.py
index c49a504..b75e723 100644
--- a/tools/memory_inspector/memory_inspector/backends/android/android_backend.py
+++ b/tools/memory_inspector/memory_inspector/backends/android/android_backend.py
@@ -8,19 +8,25 @@
 """
 
 import datetime
+import glob
 import hashlib
 import json
 import os
+import posixpath
 
 from memory_inspector import constants
 from memory_inspector.backends import prebuilts_fetcher
 from memory_inspector.backends.android import dumpheap_native_parser
 from memory_inspector.backends.android import memdump_parser
 from memory_inspector.core import backends
+from memory_inspector.core import exceptions
+from memory_inspector.core import native_heap
+from memory_inspector.core import symbol
 
-# The embedder of this module (unittest runner, web server, ...) is expected
-# to add the <CHROME_SRC>/build/android to the PYTHONPATH for pylib.
+# The memory_inspector/__init__ module will add the <CHROME_SRC>/build/android
+# deps to the PYTHONPATH for pylib.
 from pylib import android_commands  # pylint: disable=F0401
+from pylib.symbols import elf_symbolizer  # pylint: disable=F0401
 
 
 _MEMDUMP_PREBUILT_PATH = os.path.join(constants.PROJECT_SRC,
@@ -60,6 +66,86 @@
         self._devices[device_id] = device
       yield device
 
+  def ExtractSymbols(self, native_heaps, sym_paths):
+    """Performs symbolization. Returns a |symbol.Symbols| from |NativeHeap|s.
+
+    This method performs the symbolization but does NOT decorate (i.e. add
+    symbol/source info) to the stack frames of |native_heaps|. The heaps
+    can be decorated as needed using the native_heap.SymbolizeUsingSymbolDB()
+    method. Rationale: the most common use case in this application is:
+    symbolize-and-store-symbols and load-symbols-and-decorate-heaps (in two
+    different stages at two different times).
+
+    Args:
+      native_heaps: a collection of native_heap.NativeHeap instances.
+      sym_paths: either a list of or a string of comma-separated symbol paths.
+    """
+    assert(all(isinstance(x, native_heap.NativeHeap) for x in native_heaps))
+    symbols = symbol.Symbols()
+
+    # Find addr2line in toolchain_path.
+    if isinstance(sym_paths, basestring):
+      sym_paths = sym_paths.split(',')
+    matches = glob.glob(os.path.join(self.settings['toolchain_path'],
+                                     '*addr2line'))
+    if not matches:
+      raise exceptions.MemoryInspectorException('Cannot find addr2line')
+    addr2line_path = matches[0]
+
+    # First group all the stack frames together by lib path.
+    frames_by_lib = {}
+    for nheap in native_heaps:
+      for stack_frame in nheap.stack_frames.itervalues():
+        frames = frames_by_lib.setdefault(stack_frame.exec_file_rel_path, set())
+        frames.add(stack_frame)
+
+    # The symbolization process is asynchronous (but yet single-threaded). This
+    # callback is invoked every time the symbol info for a stack frame is ready.
+    def SymbolizeAsyncCallback(sym_info, stack_frame):
+      if not sym_info.name:
+        return
+      sym = symbol.Symbol(name=sym_info.name,
+                          source_file_path=sym_info.source_path,
+                          line_number=sym_info.source_line)
+      symbols.Add(stack_frame.exec_file_rel_path, stack_frame.offset, sym)
+      # TODO(primiano): support inline sym info (i.e. |sym_info.inlined_by|).
+
+    # Perform the actual symbolization (ordered by lib).
+    for exec_file_rel_path, frames in frames_by_lib.iteritems():
+      # Look up the full path of the symbol in the sym paths.
+      exec_file_name = posixpath.basename(exec_file_rel_path)
+      if exec_file_rel_path.startswith('/'):
+        exec_file_rel_path = exec_file_rel_path[1:]
+      exec_file_abs_path = ''
+      for sym_path in sym_paths:
+        # First try to locate the symbol file following the full relative path
+        # e.g. /host/syms/ + /system/lib/foo.so => /host/syms/system/lib/foo.so.
+        exec_file_abs_path = os.path.join(sym_path, exec_file_rel_path)
+        if os.path.exists(exec_file_abs_path):
+          break
+
+        # If no luck, try looking just for the file name in the sym path,
+        # e.g. /host/syms/ + (/system/lib/)foo.so => /host/syms/foo.so
+        exec_file_abs_path = os.path.join(sym_path, exec_file_name)
+        if os.path.exists(exec_file_abs_path):
+          break
+
+      if not os.path.exists(exec_file_abs_path):
+        continue
+
+      symbolizer = elf_symbolizer.ELFSymbolizer(
+          elf_file_path=exec_file_abs_path,
+          addr2line_path=addr2line_path,
+          callback=SymbolizeAsyncCallback,
+          inlines=False)
+
+      # Kick off the symbolizer and then wait that all callbacks are issued.
+      for stack_frame in sorted(frames, key=lambda x: x.offset):
+        symbolizer.SymbolizeAsync(stack_frame.offset, stack_frame)
+      symbolizer.Join()
+
+    return symbols
+
   @property
   def name(self):
     return 'Android'
diff --git a/tools/memory_inspector/memory_inspector/classification/native_heap_classifier.py b/tools/memory_inspector/memory_inspector/classification/native_heap_classifier.py
index 4cdc3b0..c837ee5 100644
--- a/tools/memory_inspector/memory_inspector/classification/native_heap_classifier.py
+++ b/tools/memory_inspector/memory_inspector/classification/native_heap_classifier.py
@@ -8,16 +8,24 @@
 
 {'name': 'rule-1', 'stacktrace': 'foo' }
 {'name': 'rule-2', 'stacktrace': ['foo', r'bar\s+baz']}
+{'name': 'rule-3', 'source_path': 'sk.*allocator'}
+{'name': 'rule-3', 'source_path': 'sk', 'stacktrace': 'SkAllocator'}
+
 
 rule-1 will match any allocation that has 'foo' in one of its  stack frames.
 rule-2 will match any allocation that has a stack frame matching 'foo' AND a
 followed by a stack frame matching 'bar baz'. Note that order matters, so rule-2
 will not match a stacktrace like ['bar baz', 'foo'].
+rule-3 will match any allocation in which at least one of the source paths in
+its stack frames matches the regex sk.*allocator.
+rule-4 will match any allocation which satisfies both the conditions.
 
 TODO(primiano): introduce more filters after the first prototype with UI, for
-instance, filter by source file path, library file name or by allocation size.
+instance, filter by library file name or by allocation size.
 """
 
+import collections
+import posixpath
 import re
 
 from memory_inspector.classification import results
@@ -39,7 +47,7 @@
 
 
 def Classify(nativeheap, rule_tree):
-  """Create aggregated results of native heaps using the provided rules.
+  """Creates aggregated results of native heaps using the provided rules.
 
   Args:
     nativeheap: the heap dump being processed (a |NativeHeap| instance).
@@ -57,12 +65,102 @@
   return res
 
 
+def InferHeuristicRulesFromHeap(nheap, max_depth=3, threshold=0.02):
+  """Infers the rules tree from a symbolized heap snapshot.
+
+  In lack of a specific set of rules, this method can be invoked to infer a
+  meaningful rule tree starting from a heap snapshot. It will build a compact
+  radix tree from the source paths of the stack traces, which height is at most
+  |max_depth|, selecting only those nodes which contribute for at least
+  |threshold| (1.0 = 100%) w.r.t. the total allocation of the heap snapshot.
+  """
+  assert(isinstance(nheap, native_heap.NativeHeap))
+
+  def RadixTreeInsert(node, path):
+    """Inserts a string (path) into a radix tree (a python recursive dict).
+
+    e.g.: [/a/b/c, /a/b/d, /z/h] -> {'/a/b/': {'c': {}, 'd': {}}, '/z/h': {}}
+    """
+
+    def GetCommonPrefix(args):
+      """Returns the common prefix between two paths (no partial paths).
+
+      e.g.: /tmp/bar, /tmp/baz will return /tmp/ (and not /tmp/ba as the dumb
+      posixpath.commonprefix implementation would do)
+      """
+      parts = posixpath.commonprefix(args).rpartition(posixpath.sep)[0]
+      return parts + posixpath.sep if parts else ''
+
+    for node_path in node.iterkeys():
+      pfx = GetCommonPrefix([node_path, path])
+      if not pfx:
+        continue
+      if len(pfx) < len(node_path):
+        node[pfx] = {node_path[len(pfx):] : node[node_path]}
+        del node[node_path]
+      if len(path) > len(pfx):
+        RadixTreeInsert(node[pfx], path[len(pfx):])
+      return
+    node[path] = {}  # No common prefix, create new child in current node.
+
+  # Given an allocation of size N and its stack trace, heuristically determines
+  # the source directory to be blamed for the N bytes.
+  # The blamed_dir is the one which appears more times in the top 8 stack frames
+  # (excluding the first 2, which usually are just the (m|c)alloc call sites).
+  # At the end, this will generate a *leaderboard* (|blamed_dirs|) which
+  # associates, to each source path directory, the number of bytes allocated.
+
+  blamed_dirs = collections.Counter()  # '/s/path' : bytes_from_this_path (int)
+  total_allocated = 0
+  for alloc in nheap.allocations:
+    dir_histogram = collections.Counter()
+    for frame in alloc.stack_trace.frames[2:10]:
+      # Compute a histogram (for each allocation) of the top source dirs.
+      if not frame.symbol or not frame.symbol.source_info:
+        continue
+      src_file = frame.symbol.source_info[0].source_file_path
+      src_dir = posixpath.dirname(src_file.replace('\\', '/')) + '/'
+      dir_histogram.update([src_dir])
+    if not dir_histogram:
+      continue
+    # Add the blamed dir to the leaderboard.
+    blamed_dir = dir_histogram.most_common()[0][0]
+    blamed_dirs.update({blamed_dir : alloc.total_size})
+    total_allocated += alloc.total_size
+
+  # Select only the top paths from the leaderboard which contribute for more
+  # than |threshold| and make a radix tree out of them.
+  radix_tree = {}
+  for blamed_dir, alloc_size in blamed_dirs.most_common():
+    if (1.0 * alloc_size / total_allocated) < threshold:
+      break
+    RadixTreeInsert(radix_tree, blamed_dir)
+
+  # The final step consists in generating a rule tree from the radix tree. This
+  # is a pretty straightforward tree-clone operation, they have the same shape.
+  def GenRulesFromRadixTree(radix_tree_node, max_depth, parent_path=''):
+    children = []
+    if max_depth > 0:
+      for node_path, node_children in radix_tree_node.iteritems():
+        child_rule = {
+            'name': node_path[-16:],
+            'source_path': '^' + re.escape(parent_path + node_path),
+            'children': GenRulesFromRadixTree(
+                node_children, max_depth - 1, parent_path + node_path)}
+        children += [child_rule]
+    return children
+
+  rules_tree = GenRulesFromRadixTree(radix_tree, max_depth)
+  return LoadRules(str(rules_tree))
+
+
 class _NHeapRule(rules.Rule):
   def __init__(self, name, filters):
     super(_NHeapRule, self).__init__(name)
-    stacktrace_regexs = filters.get('stacktrace', [])
+
     # The 'stacktrace' filter can be either a string (simple case, one regex) or
     # a list of strings (complex case, see doc in the header of this file).
+    stacktrace_regexs = filters.get('stacktrace', [])
     if isinstance(stacktrace_regexs, basestring):
       stacktrace_regexs = [stacktrace_regexs]
     self._stacktrace_regexs = []
@@ -71,9 +169,32 @@
         self._stacktrace_regexs.append(re.compile(regex))
       except re.error, descr:
         raise exceptions.MemoryInspectorException(
-            'Regex parse error "%s" : %s' % (regex, descr))
+            'Stacktrace regex error "%s" : %s' % (regex, descr))
+
+    # The 'source_path' regex, instead, simply matches the source file path.
+    self._path_regex = None
+    path_regex = filters.get('source_path')
+    if path_regex:
+      try:
+        self._path_regex = re.compile(path_regex)
+      except re.error, descr:
+        raise exceptions.MemoryInspectorException(
+            'Path regex error "%s" : %s' % (path_regex, descr))
 
   def Match(self, allocation):
+    # Match the source file path, if the 'source_path' filter is specified.
+    if self._path_regex:
+      path_matches = False
+      for frame in allocation.stack_trace.frames:
+        if frame.symbol and frame.symbol.source_info:
+          if self._path_regex.search(
+              frame.symbol.source_info[0].source_file_path):
+            path_matches = True
+            break
+      if not path_matches:
+        return False
+
+    # Match the stack traces symbols, if the 'stacktrace' filter is specified.
     if not self._stacktrace_regexs:
       return True
     cur_regex_idx = 0
diff --git a/tools/memory_inspector/memory_inspector/classification/native_heap_classifier_unittest.py b/tools/memory_inspector/memory_inspector/classification/native_heap_classifier_unittest.py
index 977c4f7..26e0ced 100644
--- a/tools/memory_inspector/memory_inspector/classification/native_heap_classifier_unittest.py
+++ b/tools/memory_inspector/memory_inspector/classification/native_heap_classifier_unittest.py
@@ -14,11 +14,12 @@
 [
 {
   'name': 'content',
-  'stacktrace': r'content::',
+  'source_path': r'content/',
   'children': [
     {
       'name': 'browser',
       'stacktrace': r'content::browser',
+      'source_path': r'content/browser',
     },
     {
       'name': 'renderer',
@@ -34,53 +35,111 @@
 """
 
 _TEST_STACK_TRACES = [
-    (3, ['stack_frame_0::foo()', 'this_goes_under_totals_other']),
-    (5, ['foo', 'content::browser::something()', 'bar']),
-    (7, ['content::browser::something_else()']),
-    (11, ['content::browser::something_else_more()', 'foo']),
-    (13, ['foo', 'content::renderer::something()', 'bar']),
-    (17, ['content::renderer::something_else()']),
-    (19, ['content::renderer::something_else_more()', 'foo']),
-    (23, ['content::something_different']),
-    (29, ['foo', 'sk::something', 'not_ashsmem_goes_into_totals_other']),
-    (31, ['foo', 'sk::something', 'foo::bar', 'sk::foo::ashmem::alloc()']),
-    (37, ['foo', 'sk::something', 'sk::foo::ashmem::alloc()']),
-    (43, ['foo::ashmem::alloc()', 'sk::foo', 'wrong_order_goes_into_totals'])
+    (3, [('stack_frame_0::foo()', '/ignored.c'),
+         ('this_goes_under_totals_other', '/ignored.c')]),
+    (5, [('foo', '/ignored.c'),
+         ('content::browser::something()', '/content/browser/something.cc'),
+         ('bar', '/ignored.c')]),
+    (7, [('content::browser::something_else()', '/content/browser/else.cc')]),
+    (11, [('content::browser::not_really()', '/content/subtle/something.cc'),
+          ('foo', '/ignored.c')]),
+    (13, [('foo', '/ignored.c'),
+          ('content::renderer::something()', '/content/renderer/foo.c'),
+          ('bar', '/ignored.c')]),
+    (17, [('content::renderer::something_else()', '/content/renderer/foo.c')]),
+    (19, [('content::renderer::something_else_2()', '/content/renderer/bar.c'),
+          ('foo', '/ignored.c')]),
+    (23, [('content::something_different', '/content/foo.c')]),
+    (29, [('foo', '/ignored.c'),
+          ('sk::something', '/skia/something.c'),
+          ('not_ashsmem_goes_into_totals_other', '/ignored.c')]),
+    (31, [('foo', '/ignored.c'),
+          ('sk::something', '/skia/something.c'),
+          ('foo::bar', '/ignored.c'),
+          ('sk::foo::ashmem::alloc()', '/skia/ashmem.c')]),
+    (37, [('foo', '/ignored.c'),
+          ('sk::something', '/ignored.c'),
+          ('sk::foo::ashmem::alloc()', '/ignored.c')]),
+    (43, [('foo::ashmem::alloc()', '/ignored.c'),
+          ('sk::foo', '/ignored.c'),
+          ('wrong_order_goes_into_totals', '/ignored.c')])
 ]
 
 _EXPECTED_RESULTS = {
     'Total':                         [238],
     'Total::content':                [95],
-    'Total::content::browser':       [23],  # 5 + 7 + 11.
+    'Total::content::browser':       [12],  # 5 + 7.
     'Total::content::renderer':      [49],  # 13 + 17 + 19.
-    'Total::content::content-other': [23],
+    'Total::content::content-other': [34],
     'Total::ashmem_in_skia':         [68],  # 31 + 37.
     'Total::Total-other':            [75],  # 3 + 29 + 43.
 }
 
+_HEURISTIC_TEST_STACK_TRACES = [
+    (10, '/root/base1/foo/bar/file.cc'),  # Contrib: 0.13
+    (20, '/root/base1/foo/baz/file.cc'),  # Contrib: 0.26
+    (1, '/root/base1/foo/nah/file.cc'),   # Contrib: 0.01
+    (3, '/root/base2/file.cc'),           # Contrib: 0.03
+    (22, '/root/base2/subpath/file.cc'),  # Contrib: 0.28
+    (18, '/root/base2/subpath2/file.cc'), # Contrib: 0.23
+    (2, '/root/whatever/file.cc'),        # Contrib: 0.02
+]
+
+_HEURISTIC_EXPECTED_RESULTS = {
+    'Total':                                        [76],
+    'Total::/root/':                                [76],
+    'Total::/root/::base1/foo/':                    [31],  # 10 + 20 +1
+    'Total::/root/::base1/foo/::bar/':              [10],
+    'Total::/root/::base1/foo/::baz/':              [20],
+    'Total::/root/::base1/foo/::base1/foo/-other':  [1],
+    'Total::/root/::base2/':                        [43],  # 3 + 22 + 18
+    'Total::/root/::base2/::subpath/':              [22],
+    'Total::/root/::base2/::subpath2/':             [18],
+    'Total::/root/::base2/::base2/-other':          [3],
+    'Total::/root/::/root/-other':                  [2],
+    'Total::Total-other':                           [0],
+}
+
 
 class NativeHeapClassifierTest(unittest.TestCase):
-  def runTest(self):
+  def testStandardRuleParsingAndProcessing(self):
     rule_tree = native_heap_classifier.LoadRules(_TEST_RULES)
     nheap = native_heap.NativeHeap()
     mock_addr = 0
     for test_entry in _TEST_STACK_TRACES:
       mock_strace = stacktrace.Stacktrace()
-      for mock_btstr in test_entry[1]:
+      for (mock_btstr, mock_source_path) in test_entry[1]:
         mock_addr += 4  # Addr is irrelevant, just keep it distinct.
         mock_frame = stacktrace.Frame(mock_addr)
-        mock_frame.SetSymbolInfo(symbol.Symbol(mock_btstr))
+        mock_frame.SetSymbolInfo(symbol.Symbol(mock_btstr, mock_source_path))
         mock_strace.Add(mock_frame)
       nheap.Add(native_heap.Allocation(
           size=test_entry[0], count=1, stack_trace=mock_strace))
 
     res = native_heap_classifier.Classify(nheap, rule_tree)
+    self._CheckResult(res.total, '', _EXPECTED_RESULTS)
 
-    def CheckResult(node, prefix):
-      node_name = prefix + node.name
-      self.assertIn(node_name, _EXPECTED_RESULTS)
-      self.assertEqual(node.values, _EXPECTED_RESULTS[node_name])
-      for child in node.children:
-        CheckResult(child, node_name + '::')
+  def testInferHeuristicRules(self):
+    nheap = native_heap.NativeHeap()
+    mock_addr = 0
+    for (mock_alloc_size, mock_source_path) in _HEURISTIC_TEST_STACK_TRACES:
+      mock_strace = stacktrace.Stacktrace()
+      mock_addr += 4  # Addr is irrelevant, just keep it distinct.
+      mock_frame = stacktrace.Frame(mock_addr)
+      mock_frame.SetSymbolInfo(symbol.Symbol(str(mock_addr), mock_source_path))
+      for _ in xrange(10):  # Just repeat the same stack frame 10 times
+        mock_strace.Add(mock_frame)
+      nheap.Add(native_heap.Allocation(
+          size=mock_alloc_size, count=1, stack_trace=mock_strace))
 
-    CheckResult(res.total, '')
\ No newline at end of file
+    rule_tree = native_heap_classifier.InferHeuristicRulesFromHeap(
+        nheap, threshold=0.05)
+    res = native_heap_classifier.Classify(nheap, rule_tree)
+    self._CheckResult(res.total, '', _HEURISTIC_EXPECTED_RESULTS)
+
+  def _CheckResult(self, node, prefix, expected_results):
+    node_name = prefix + node.name
+    self.assertIn(node_name, expected_results)
+    self.assertEqual(node.values, expected_results[node_name])
+    for child in node.children:
+      self._CheckResult(child, node_name + '::', expected_results)
\ No newline at end of file
diff --git a/tools/memory_inspector/memory_inspector/core/backends.py b/tools/memory_inspector/memory_inspector/core/backends.py
index 752a036..8a9f8ea 100644
--- a/tools/memory_inspector/memory_inspector/core/backends.py
+++ b/tools/memory_inspector/memory_inspector/core/backends.py
@@ -61,6 +61,10 @@
     """
     raise NotImplementedError()
 
+  def ExtractSymbols(self, native_heaps, sym_paths):
+    """Performs symbolization. Returns a |symbol.Symbols| from |NativeHeap|s."""
+    raise NotImplementedError()
+
   @property
   def name(self):
     """A unique name which identifies the backend.
diff --git a/tools/memory_inspector/memory_inspector/core/backends_unittest.py b/tools/memory_inspector/memory_inspector/core/backends_unittest.py
index f204028..5f72df2 100644
--- a/tools/memory_inspector/memory_inspector/core/backends_unittest.py
+++ b/tools/memory_inspector/memory_inspector/core/backends_unittest.py
@@ -32,6 +32,9 @@
     yield MockDevice(self, 'device-1')
     yield MockDevice(self, 'device-2')
 
+  def ExtractSymbols(self, native_heaps, sym_paths):
+    raise NotImplementedError()
+
   @property
   def name(self):
     return self.backend_name
diff --git a/tools/memory_inspector/memory_inspector/core/native_heap.py b/tools/memory_inspector/memory_inspector/core/native_heap.py
index a186f16..b7a2e93 100644
--- a/tools/memory_inspector/memory_inspector/core/native_heap.py
+++ b/tools/memory_inspector/memory_inspector/core/native_heap.py
@@ -3,6 +3,7 @@
 # found in the LICENSE file.
 
 from memory_inspector.core import stacktrace
+from memory_inspector.core import symbol
 
 
 class NativeHeap(object):
@@ -27,6 +28,13 @@
       self.stack_frames[absolute_addr] = stack_frame
     return stack_frame
 
+  def SymbolizeUsingSymbolDB(self, symbols):
+    assert(isinstance(symbols, symbol.Symbols))
+    for stack_frame in self.stack_frames.itervalues():
+      sym = symbols.Lookup(stack_frame.exec_file_rel_path, stack_frame.offset)
+      if sym:
+        stack_frame.SetSymbolInfo(sym)
+
 
 class Allocation(object):
   """A Native allocation, modeled in a size*count fashion.
diff --git a/tools/memory_inspector/memory_inspector/core/stacktrace.py b/tools/memory_inspector/memory_inspector/core/stacktrace.py
index 0441bd4..b137a03 100644
--- a/tools/memory_inspector/memory_inspector/core/stacktrace.py
+++ b/tools/memory_inspector/memory_inspector/core/stacktrace.py
@@ -69,10 +69,15 @@
     """Returns the file name (stripped of the path) of the executable."""
     return os.path.basename(self.exec_file_rel_path)
 
+  @property
+  def raw_address(self):
+    if self.exec_file_rel_path:
+      return '%s +0x%x' % (self.exec_file_name, self.offset)
+    else:
+      return '0x%x' % self.address
+
   def __str__(self):
     if self.symbol:
       return str(self.symbol)
     elif self.exec_file_rel_path:
-      return '%s +0x%x' % (self.exec_file_name, self.offset)
-    else:
-      return '0x%x' % self.address
+      return self.raw_address
\ No newline at end of file
diff --git a/tools/memory_inspector/memory_inspector/core/symbol.py b/tools/memory_inspector/memory_inspector/core/symbol.py
index 07c2718..b1a3748 100644
--- a/tools/memory_inspector/memory_inspector/core/symbol.py
+++ b/tools/memory_inspector/memory_inspector/core/symbol.py
@@ -37,8 +37,8 @@
   def __init__(self, name, source_file_path=None, line_number=None):
     self.name = name
     self.source_info = []
-    if source_file_path and line_number:
-      self.AddSourceLineInfo(source_file_path, line_number)
+    if source_file_path:
+      self.AddSourceLineInfo(source_file_path, line_number or 0)
 
   def AddSourceLineInfo(self, source_file_path, line_number):
     self.source_info += [SourceInfo(source_file_path, line_number)]
diff --git a/tools/memory_inspector/memory_inspector/frontends/background_tasks.py b/tools/memory_inspector/memory_inspector/frontends/background_tasks.py
index 09323ba..1d6d602 100644
--- a/tools/memory_inspector/memory_inspector/frontends/background_tasks.py
+++ b/tools/memory_inspector/memory_inspector/frontends/background_tasks.py
@@ -78,6 +78,7 @@
   datetime_str = datetime.datetime.now().strftime('%Y-%m-%d_%H-%M')
   archive_name = '%s - %s - %s' % (datetime_str, device.name, process.name)
   archive = storage.OpenArchive(archive_name, create=True)
+  heaps_to_symbolize = []
 
   for i in xrange(1, count + 1):  # [1, count] range is easier to handle.
     process = device.GetProcess(pid)
@@ -96,10 +97,22 @@
       nheap = process.DumpNativeHeap()
       log.put((completion, 'Dumped %d native allocs' % len(nheap.allocations)))
       archive.StoreNativeHeap(nheap)
+      heaps_to_symbolize += [nheap]
 
     if i < count:
       time.sleep(interval)
 
+  log.put((90, 'Symbolizing'))
+  symbols = backend.ExtractSymbols(heaps_to_symbolize,
+                                   device.settings['native_symbol_paths'] or '')
+
+  expected_symbols_count = len(set.union(
+      *[set(x.stack_frames.iterkeys()) for x in heaps_to_symbolize]))
+  log.put((99, 'Symbolization complete. Got %d symbols (%.1f%%).' % (
+      len(symbols), 100.0 * len(symbols) / expected_symbols_count)))
+
+  archive.StoreSymbols(symbols)
+
   log.put((100, 'Trace complete.'))
   return 0
 
diff --git a/tools/memory_inspector/memory_inspector/frontends/command_line.py b/tools/memory_inspector/memory_inspector/frontends/command_line.py
index d85a2c7..cfcb7c8 100644
--- a/tools/memory_inspector/memory_inspector/frontends/command_line.py
+++ b/tools/memory_inspector/memory_inspector/frontends/command_line.py
@@ -4,15 +4,20 @@
 
 """Command line frontend for Memory Inspector"""
 
+import json
 import memory_inspector
 import optparse
+import os
 import time
 
+from memory_inspector.classification import mmap_classifier
 from memory_inspector.core import backends
+from memory_inspector.data import serialization
 
 
-def main(argv):
-  usage = '%prog [options] devices | ps | stats'
+def main():
+  COMMANDS = ['devices', 'ps', 'stats', 'mmaps', 'classified_mmaps']
+  usage = ('%prog [options] ' + ' | '.join(COMMANDS))
   parser = optparse.OptionParser(usage=usage)
   parser.add_option('-b', '--backend', help='Backend name '
                     '(e.g., Android)', type='string', default='Android')
@@ -22,13 +27,18 @@
                     type='int')
   parser.add_option('-m', '--filter_process_name', help='Process '
                     'name to match', type='string')
+  parser.add_option('-r', '--mmap_rule',
+                    help='mmap rule', type='string',
+                    default=
+                    'classification_rules/default/mmap-android.py')
   (options, args) = parser.parse_args()
 
   memory_inspector.RegisterAllBackends()
 
-  if not args:
+  if not args or args[0] not in COMMANDS:
     parser.print_help()
     return -1
+
   if args[0] == 'devices':
     _ListDevices(options.backend)
     return 0
@@ -52,23 +62,53 @@
         ' --device_id')
     return -1
 
+  device = backends.GetDevice(options.backend, device_id)
+  if not device:
+    print 'Device', device_id, 'does not exist'
+    return -1
+
+  device.Initialize()
   if args[0] == 'ps':
-    _ListProcesses(options.backend, device_id,
-                     options.filter_process_name)
+    if not options.filter_process_name:
+      print 'Listing all processes'
+    else:
+      print ('Listing processes matching '
+          + options.filter_process_name.lower())
+    print ''
+    print '%-10s : %-50s : %12s %12s %12s' % (
+        'Process ID', 'Process Name', 'RUN_TIME', 'THREADS',
+        'MEM_RSS_KB')
+    print ''
+    for process in device.ListProcesses():
+      if (not options.filter_process_name or
+          options.filter_process_name.lower() in process.name.lower()):
+        stats = process.GetStats()
+        run_time_min, run_time_sec = divmod(stats.run_time, 60)
+        print '%10s : %-50s : %6s m %2s s %8s %12s' % (
+            process.pid, process.name, run_time_min, run_time_sec,
+            stats.threads, stats.vm_rss)
     return 0
 
-  if args[0] == 'stats':
-    if not options.process_id:
-      print 'You need to provide --process_id'
-      return -1
-    else:
-      _ListProcessStats(options.backend, device_id,
-                        options.process_id)
-    return 0
-  else:
-    print 'Invalid command entered'
+  if not options.process_id:
+    print 'You need to provide --process_id'
     return -1
 
+  process = device.GetProcess(options.process_id)
+
+  if not process:
+    print 'Cannot find process [%d] on device %s' % (
+        options.process_id, device.id)
+    return -1
+  elif args[0] == 'stats':
+    _ListProcessStats(process)
+    return 0
+  elif args[0] == 'mmaps':
+    _ListProcessMmaps(process)
+    return 0
+  elif args[0] == 'classified_mmaps':
+    _ListProcessClassifiedMmaps(process, options.mmap_rule)
+    return 0
+
 
 def _ListDevices(backend_name):
   print 'Device list:'
@@ -78,71 +118,51 @@
       print '%-16s : %s' % (device.id, device.name)
 
 
-def _ListProcesses(backend_name, device_id, filter_process_name):
-  device = backends.GetDevice(backend_name, device_id)
-  if not device:
-    print 'Device', device_id, 'does not exist'
-    return
-  if not filter_process_name:
-    print 'Listing all processes'
-  else:
-    print 'Listing processes matching ' + filter_process_name.lower()
-  print ''
-  device.Initialize()
-  _PrintProcessHeadingLine()
-  for process in device.ListProcesses():
-    if (not filter_process_name or
-        filter_process_name.lower() in process.name.lower()):
-      stats = process.GetStats()
-      _PrintProcess(process, stats)
-
-
-def _ListProcessStats(backend_name, device_id, process_id):
-  """Prints process stats periodically and displays an error if the
-     process or device does not exist.
+def _ListProcessStats(process):
+  """Prints process stats periodically
   """
-  device = backends.GetDevice(backend_name, device_id)
-  if not device:
-    print 'Device', device_id, 'does not exist'
-  else:
-    device.Initialize()
-    process = device.GetProcess(process_id)
-    if not process:
-      print 'Cannot find process [%d] on device %s' % (
-            process_id, device_id)
-      return
-    print 'Stats for process: [%d] %s' % (process_id, process.name)
-    _PrintProcessStatsHeadingLine()
-    while True:
-      stats = process.GetStats()
-      _PrintProcessStats(process, stats)
-      time.sleep(1)
-
-
-def _PrintProcessHeadingLine():
-  print '%-10s : %-50s : %12s %12s %12s' % (
-      'Process ID', 'Process Name', 'RUN_TIME', 'THREADS','MEM_RSS_KB')
-  print ''
-
-
-def _PrintProcess(process, stats):
-  run_time_min, run_time_sec = divmod(stats.run_time, 60)
-  print '%10s : %-50s : %6s m %2s s %8s %12s' % (
-      process.pid, process.name, run_time_min, run_time_sec,
-      stats.threads, stats.vm_rss)
-
-
-def _PrintProcessStatsHeadingLine():
+  print 'Stats for process: [%d] %s' % (process.pid, process.name)
   print '%-10s : %-50s : %12s %12s %13s %12s %14s' % (
-        'Process ID', 'Process Name', 'RUN_TIME', 'THREADS',
-        'CPU_USAGE', 'MEM_RSS_KB', 'PAGE_FAULTS')
+      'Process ID', 'Process Name', 'RUN_TIME', 'THREADS',
+      'CPU_USAGE', 'MEM_RSS_KB', 'PAGE_FAULTS')
   print ''
-
-
-def _PrintProcessStats(process, stats):
-  run_time_min, run_time_sec = divmod(stats.run_time, 60)
-  print '%10s : %-50s : %6s m %2s s %8s %12s %13s %11s' % (
+  while True:
+    stats = process.GetStats()
+    run_time_min, run_time_sec = divmod(stats.run_time, 60)
+    print '%10s : %-50s : %6s m %2s s %8s %12s %13s %11s' % (
         process.pid, process.name, run_time_min, run_time_sec,
         stats.threads, stats.cpu_usage, stats.vm_rss, stats.page_faults)
+    time.sleep(1)
+
+
+def _ListProcessMmaps(process):
+  """Prints process memory maps
+  """
+  print 'Memory Maps for process: [%d] %s' % (process.pid, process.name)
+  print '%-10s %-10s %6s %12s %12s %13s %13s %-40s' % (
+      'START', 'END', 'FLAGS', 'PRIV.DIRTY', 'PRIV.CLEAN',
+      'SHARED DIRTY', 'SHARED CLEAN', 'MAPPED_FILE')
+  print '%38s %12s %12s %13s' % ('(kb)', '(kb)', '(kb)', '(kb)')
+  print ''
+  maps = process.DumpMemoryMaps()
+  for entry in maps.entries:
+    print '%-10x %-10x %6s %12s %12s %13s %13s %-40s' % (
+        entry.start, entry.end, entry.prot_flags,
+        entry.priv_dirty_bytes / 1024, entry.priv_clean_bytes / 1024,
+        entry.shared_dirty_bytes / 1024,
+        entry.shared_clean_bytes / 1024, entry.mapped_file)
+
+
+def _ListProcessClassifiedMmaps(process, mmap_rule):
+  """Prints process classified memory maps
+  """
+  maps = process.DumpMemoryMaps()
+  if not os.path.exists(mmap_rule):
+    print 'File', mmap_rule, 'not found'
+    return
+  with open(mmap_rule) as f:
+    rules = mmap_classifier.LoadRules(f.read())
+  classified_results_tree =  mmap_classifier.Classify(maps, rules)
+  print json.dumps(classified_results_tree, cls=serialization.Encoder)
 
 
diff --git a/tools/memory_inspector/memory_inspector/frontends/www_content/css/nheap.css b/tools/memory_inspector/memory_inspector/frontends/www_content/css/nheap.css
new file mode 100644
index 0000000..358237c
--- /dev/null
+++ b/tools/memory_inspector/memory_inspector/frontends/www_content/css/nheap.css
@@ -0,0 +1,16 @@
+/* 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. */
+
+#nheap-table dl {
+  line-height: 1em;
+  -webkit-user-select: text;
+}
+
+#nheap-table dt {
+}
+
+#nheap-table dd {
+  display: inline;
+  float: right;
+}
diff --git a/tools/memory_inspector/memory_inspector/frontends/www_content/css/processes.css b/tools/memory_inspector/memory_inspector/frontends/www_content/css/processes.css
index f8d99b2..0aa1f9d 100644
--- a/tools/memory_inspector/memory_inspector/frontends/www_content/css/processes.css
+++ b/tools/memory_inspector/memory_inspector/frontends/www_content/css/processes.css
@@ -15,4 +15,9 @@
   clear: both;
   font-size: 0.9em;
   margin-bottom: 1em;
+}
+
+#ps-tracer-dialog > div > :last-child {
+  float: right;
+  width: 60%;
 }
\ No newline at end of file
diff --git a/tools/memory_inspector/memory_inspector/frontends/www_content/index.html b/tools/memory_inspector/memory_inspector/frontends/www_content/index.html
index e1df30c..514fa18 100644
--- a/tools/memory_inspector/memory_inspector/frontends/www_content/index.html
+++ b/tools/memory_inspector/memory_inspector/frontends/www_content/index.html
@@ -11,6 +11,7 @@
   <link href='//fonts.googleapis.com/css?family=Coda' rel='stylesheet' type='text/css'>
   <link href="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/themes/flick/jquery-ui.css" rel="stylesheet">
   <link href="/css/mmap.css" rel="stylesheet" type="text/css">
+  <link href="/css/nheap.css" rel="stylesheet" type="text/css">
   <link href="/css/processes.css" rel="stylesheet" type="text/css">
   <link href="/css/profiler.css" rel="stylesheet" type="text/css">
   <link href="/css/rootUi.css" rel="stylesheet" type="text/css">
@@ -24,6 +25,7 @@
   </script>
   <script src="/js/devices.js"></script>
   <script src="/js/mmap.js"></script>
+  <script src="/js/nheap.js"></script>
   <script src="/js/processes.js"></script>
   <script src="/js/profiler.js"></script>
   <script src="/js/rootUi.js"></script>
@@ -40,6 +42,7 @@
         <li><a href="#tabs-ps">Processes</a></li>
         <li><a href="#tabs-prof">Profiler</a></li>
         <li><a href="#tabs-mm">Memory maps table</a></li>
+        <li><a href="#tabs-nheap">Native S.Traces</a></li>
         <li><a href="#tabs-storage">Archived traces</a></li>
         <li><a href="#tabs-settings">Settings</a></li>
       </ul>
@@ -89,6 +92,10 @@
             <label for="ps-tracer-snapshots">Num snapshots</label>
             <input type="text" id="ps-tracer-snapshots" value="1">
           </div>
+          <div>
+            <input type="checkbox" id="ps-tracer-bt" class="ui-widget-content">
+            <label for="ps-tracer-bt">Detailed (w/ backtraces)</label>
+          </div>
         </div>
       </div>
 
@@ -159,12 +166,26 @@
         <div id="mm-table"></div>
       </div>
 
+      <div id="tabs-nheap">
+        <div id="nheap-toolbar" class="ui-widget-header ui-corner-all">
+          <label>Totals: </label>
+          <input type="text" id="nheap-totals" values="0 KB" readonly>
+          <label>Selected: </label>
+          <input type="text" id="nheap-selected" values="0 KB" readonly>
+          <label>Filter: </label>
+          <input type="text" id="nheap-filter">
+        </div>
+        <div id="nheap-table"></div>
+      </div>
+
       <div id="tabs-storage">
         <div id="storage-toolbar" class="ui-widget-header ui-corner-all">
           <label>Group:</label>
           <button id="storage-profile-mmaps">Profile memory maps</button>
+          <button id="storage-profile-native">Profile native allocations</button>
           <label>Single snapshot:</label>
           <button id="storage-dump-mmaps">Show memory maps</button>
+          <button id="storage-dump-nheap">Show native heap</button>
         </div>
         <div id="storage-table"></div>
       </div>
diff --git a/tools/memory_inspector/memory_inspector/frontends/www_content/js/devices.js b/tools/memory_inspector/memory_inspector/frontends/www_content/js/devices.js
index 9d3ac04..2686ef1 100644
--- a/tools/memory_inspector/memory_inspector/frontends/www_content/js/devices.js
+++ b/tools/memory_inspector/memory_inspector/frontends/www_content/js/devices.js
@@ -75,15 +75,20 @@
   if (!this.selDeviceUri_)
     return;
 
-  // Initialize device and start processes / OS stats (it is a POST request).
+  this.initializeSelectedDevice(false);
+};
+
+this.initializeSelectedDevice = function(enableNativeTracing) {
   webservice.ajaxRequest(
       '/initialize/' + this.selDeviceUri_,
       this.onDeviceInitializationComplete_.bind(this),
       null,  // default error handler.
-      {});
+      {enableNativeTracing: (enableNativeTracing ? '1' : '')});
 };
 
-this.onDeviceInitializationComplete_ = function() {
+this.onDeviceInitializationComplete_ = function(data) {
+  this.devices_[this.selDeviceUri_].isNativeTracingEnabled =
+     data.isNativeTracingEnabled;
   processes.startPsTable();
   processes.startDeviceStats();
 };
diff --git a/tools/memory_inspector/memory_inspector/frontends/www_content/js/nheap.js b/tools/memory_inspector/memory_inspector/frontends/www_content/js/nheap.js
new file mode 100644
index 0000000..005a42a
--- /dev/null
+++ b/tools/memory_inspector/memory_inspector/frontends/www_content/js/nheap.js
@@ -0,0 +1,86 @@
+// 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.
+
+nheap = new (function() {
+
+this.COL_STACKTRACE = 3;
+this.COL_TOTAL = 0;
+
+this.nheapData_ = null;
+this.nheapTable_ = null;
+this.nheapFilter_ = null;
+
+this.onDomReady_ = function() {
+  // Create the mmaps table.
+  this.nheapTable_ = new google.visualization.Table($('#nheap-table')[0]);
+  google.visualization.events.addListener(
+      this.nheapTable_, 'select', this.onNheapTableRowSelect_.bind(this));
+  $('#nheap-filter').on('change', this.applyTableFilters_.bind(this));
+};
+
+this.dumpNheapFromStorage = function(archiveName, snapshot) {
+  webservice.ajaxRequest('/storage/' + archiveName + '/' + snapshot + '/nheap',
+                         this.onDumpAjaxResponse_.bind(this));
+  rootUi.showDialog('Loading native heap allocs from archive ...');
+  this.resetTableFilters_();
+};
+
+this.onDumpAjaxResponse_ = function(data) {
+  this.nheapData_ = new google.visualization.DataTable(data);  // TODO remove .table form mmap
+  this.nheapFilter_ = new google.visualization.DataView(this.nheapData_);
+  this.applyTableFilters_();
+  rootUi.hideDialog();
+};
+
+this.resetTableFilters_ = function() {
+  $('#nheap-filter').val('');
+}
+
+this.applyTableFilters_ = function() {
+  // Filters the rows according to the user-provided file and prot regexps.
+  if (!this.nheapFilter_)
+    return;
+
+  var rx = $('#nheap-filter').val();
+  var rows = [];
+  var total = 0;
+
+  for (var row = 0; row < this.nheapData_.getNumberOfRows(); ++row) {
+     stackTrace = this.nheapData_.getValue(row, this.COL_STACKTRACE);
+     if (!stackTrace.match(rx))
+      continue;
+    rows.push(row);
+    total += this.nheapData_.getValue(row, this.COL_TOTAL);
+  }
+
+  $('#nheap-totals').val(Math.floor(total / 1024) + ' KB');
+  this.nheapFilter_.setRows(rows);
+  this.redraw();
+};
+
+this.onNheapTableRowSelect_ = function() {
+  if (!this.nheapFilter_)
+    return;
+
+  var total = 0;
+
+  this.nheapTable_.getSelection().forEach(function(sel) {
+    var row = sel.row;
+    total += this.nheapFilter_.getValue(row, this.COL_TOTAL);
+  }, this);
+
+  $('#nheap-selected').val(Math.floor(total / 1024) + ' KB');
+};
+
+this.redraw = function() {
+  if (!this.nheapFilter_)
+    return;
+  this.nheapTable_.draw(this.nheapFilter_, {allowHtml: true,
+                                            page: 'enable',
+                                            pageSize: 25});
+};
+
+$(document).ready(this.onDomReady_.bind(this));
+
+})();
\ No newline at end of file
diff --git a/tools/memory_inspector/memory_inspector/frontends/www_content/js/processes.js b/tools/memory_inspector/memory_inspector/frontends/www_content/js/processes.js
index 4c38c03..deac58b 100644
--- a/tools/memory_inspector/memory_inspector/frontends/www_content/js/processes.js
+++ b/tools/memory_inspector/memory_inspector/frontends/www_content/js/processes.js
@@ -87,12 +87,23 @@
 this.startTracingSelectedProcess_ = function() {
   if (!this.selProcUri_)
     return alert('The process ' + this.selProcUri_ + ' died.');
+  var traceNativeHeap = $('#ps-tracer-bt').prop('checked');
 
   $('#ps-tracer-dialog').dialog('close');
 
+  if (traceNativeHeap && !devices.getSelectedDevice().isNativeTracingEnabled) {
+    var shouldProvision = confirm('Native heap tracing is not enabled.\n' +
+        'Do you want to enable it (will cause a reboot on Android)?');
+    if (shouldProvision) {
+      devices.initializeSelectedDevice(true);
+      alert('Wait device to complete reboot and then retry.');
+      return;
+    }
+  }
+
   var postArgs = {interval: $('#ps-tracer-period').val(),
                   count: $('#ps-tracer-snapshots').val(),
-                  traceNativeHeap: false};
+                  traceNativeHeap: traceNativeHeap};
 
   webservice.ajaxRequest('/tracer/start/' + this.selProcUri_,
                          this.onStartTracerAjaxResponse_.bind(this),
diff --git a/tools/memory_inspector/memory_inspector/frontends/www_content/js/profiler.js b/tools/memory_inspector/memory_inspector/frontends/www_content/js/profiler.js
index ea8841d..1920aa7 100644
--- a/tools/memory_inspector/memory_inspector/frontends/www_content/js/profiler.js
+++ b/tools/memory_inspector/memory_inspector/frontends/www_content/js/profiler.js
@@ -65,7 +65,7 @@
 };
 
 this.profileArchivedMmaps = function(archiveName, snapshots) {
-  // Creates a profile using the data from the storage.
+  // Creates a mmap profile using the data from the storage.
   webservice.ajaxRequest('/profile/create',  // This is a POST request.
                          this.onProfileAjaxResponse_.bind(this),
                          null,  // use the default error handler.
@@ -76,6 +76,19 @@
                           ruleset: $('#prof-ruleset').val()});
 };
 
+this.profileArchivedNHeaps = function(archiveName, snapshots) {
+  // Creates a native-heap profile using the data from the storage.
+  webservice.ajaxRequest('/profile/create',  // This is a POST request.
+                         this.onProfileAjaxResponse_.bind(this),
+                         null,  // use the default error handler.
+                         {type: 'nheap',
+                          source: 'archive',
+                          archive: archiveName,
+                          snapshots: snapshots,
+                          ruleset: 'heuristic'});
+  // TODO(primiano): Next CLs: support custom rules, not just the heuristic one.
+};
+
 this.onProfileAjaxResponse_ = function(data) {
   // This AJAX response contains a summary of the profile requested via the
   // /profile endpoint, which consists of:
diff --git a/tools/memory_inspector/memory_inspector/frontends/www_content/js/rootUi.js b/tools/memory_inspector/memory_inspector/frontends/www_content/js/rootUi.js
index 5da2a04..d135188 100644
--- a/tools/memory_inspector/memory_inspector/frontends/www_content/js/rootUi.js
+++ b/tools/memory_inspector/memory_inspector/frontends/www_content/js/rootUi.js
@@ -34,6 +34,8 @@
       return profiler.redraw();
     case 'mm':
       return mmap.redraw();
+    case 'nheap':
+      return nheap.redraw();
     case 'settings':
       return settings.reload();
     case 'storage':
diff --git a/tools/memory_inspector/memory_inspector/frontends/www_content/js/storage.js b/tools/memory_inspector/memory_inspector/frontends/www_content/js/storage.js
index f67af86..1c9c336 100644
--- a/tools/memory_inspector/memory_inspector/frontends/www_content/js/storage.js
+++ b/tools/memory_inspector/memory_inspector/frontends/www_content/js/storage.js
@@ -15,6 +15,8 @@
       .click(this.dumpMmapForSelectedSnapshot_.bind(this));
   $('#storage-profile-native').button({icons:{primary: 'ui-icon-image'}})
       .click(this.profileNativeForSelectedSnapshots.bind(this));
+  $('#storage-dump-nheap').button({icons:{primary: 'ui-icon-calculator'}})
+      .click(this.dumpNheapForSelectedSnapshot_.bind(this));
 
   // Create the table.
   this.table_ = new google.visualization.Table($('#storage-table')[0]);
@@ -64,10 +66,53 @@
   rootUi.showTab('mm');
 };
 
-this.profileNativeForSelectedSnapshots = function() {
+this.dumpNheapForSelectedSnapshot_ = function() {
+  var sel = this.table_.getSelection();
+  if (sel.length != 1) {
+    alert('Please select only one snapshot.')
+    return;
+  }
 
+  var row = sel[0].row;
+  if (!this.checkHasNativeHapDump_(row))
+    return;
+  nheap.dumpNheapFromStorage(this.tableData_.getValue(row, 0),
+                             this.tableData_.getValue(row, 1))
+  rootUi.showTab('nheap');
 };
 
+this.profileNativeForSelectedSnapshots = function() {
+  // Generates a native heap profile for the selected snapshots.
+  var sel = this.table_.getSelection();
+  if (!sel.length || !this.tableData_)
+    return;
+  var archiveName = null;
+  var snapshots = [];
+
+  for (var i = 0; i < sel.length; ++i) {
+    var row = sel[i].row;
+    var curArchive = this.tableData_.getValue(row, 0);
+    if (archiveName && curArchive != archiveName) {
+      alert('All the selected snapshots must belong to the same archive!');
+      return;
+    }
+    if (!this.checkHasNativeHapDump_(row))
+      return;
+    archiveName = curArchive;
+    snapshots.push(this.tableData_.getValue(row, 1));
+  }
+  profiler.profileArchivedNHeaps(archiveName, snapshots);
+  rootUi.showTab('prof');
+};
+
+this.checkHasNativeHapDump_ = function(row) {
+  if (!this.tableData_.getValue(row, 3)) {
+    alert('The selected snapshot doesn\'t have a heap dump!');
+    return false;
+  }
+  return true;
+}
+
 this.redraw = function() {
   if (!this.tableData_)
     return;
diff --git a/tools/memory_inspector/memory_inspector/frontends/www_server.py b/tools/memory_inspector/memory_inspector/frontends/www_server.py
index d1a54ae..3d120d4 100644
--- a/tools/memory_inspector/memory_inspector/frontends/www_server.py
+++ b/tools/memory_inspector/memory_inspector/frontends/www_server.py
@@ -18,6 +18,7 @@
     This typically happens when the target device is disconnected.
 """
 
+import cgi
 import collections
 import datetime
 import dateutil.parser
@@ -33,6 +34,7 @@
 from memory_inspector.core import backends
 from memory_inspector.core import memory_map
 from memory_inspector.classification import mmap_classifier
+from memory_inspector.classification import native_heap_classifier
 from memory_inspector.data import serialization
 from memory_inspector.data import file_storage
 from memory_inspector.frontends import background_tasks
@@ -154,8 +156,10 @@
   if not device:
     return _HTTP_GONE, [], 'Device not found'
   device.Initialize()
+  if req_vars['enableNativeTracing']:
+    device.EnableNativeTracing(True)
   return _HTTP_OK, [], {
-    'isNativeTracingEnabled': device.IsNativeTracingEnabled()}
+      'isNativeTracingEnabled': device.IsNativeTracingEnabled()}
 
 
 @AjaxHandler(r'/ajax/profile/create', 'POST')
@@ -173,41 +177,58 @@
   # Step 1: collect the memory dumps, according to what the client specified in
   # the 'type' and 'source' POST arguments.
 
-  # Case 1: Generate a profile from a set of mmap dumps.
-  if req_vars['type'] == 'mmap':
-    classifier = mmap_classifier
-    # Case 1a: Use a cached mmap dumps.
-    if req_vars['source'] == 'cache':
-      dumps[0] = _GetCacheObject(req_vars['id'])
-    # Case 1b: Load mem dumps from an archive.
-    elif req_vars['source'] == 'archive':
-      archive = _persistent_storage.OpenArchive(req_vars['archive'])
-      if not archive:
-        return _HTTP_GONE, [], 'Cannot open archive %s' % req_vars['archive']
-      first_timestamp = None
-      for timestamp_str in req_vars['snapshots']:
-        timestamp = dateutil.parser.parse(timestamp_str)
-        first_timestamp = timestamp if not first_timestamp else first_timestamp
-        time_delta = int((timestamp - first_timestamp).total_seconds())
+  # Case 1a: The client requests to load data from an archive.
+  if req_vars['source'] == 'archive':
+    archive = _persistent_storage.OpenArchive(req_vars['archive'])
+    if not archive:
+      return _HTTP_GONE, [], 'Cannot open archive %s' % req_vars['archive']
+    first_timestamp = None
+    for timestamp_str in req_vars['snapshots']:
+      timestamp = dateutil.parser.parse(timestamp_str)
+      first_timestamp = first_timestamp or timestamp
+      time_delta = int((timestamp - first_timestamp).total_seconds())
+      if req_vars['type'] == 'mmap':
         dumps[time_delta] = archive.LoadMemMaps(timestamp)
+      elif req_vars['type'] == 'nheap':
+        dumps[time_delta] = archive.LoadNativeHeap(timestamp)
 
-  # TODO(primiano): Add support for native_heap types.
+  # Case 1b: Use a dump recently cached (only mmap, via _DumpMmapsForProcess).
+  elif req_vars['source'] == 'cache':
+    assert(req_vars['type'] == 'mmap'), 'Only cached mmap dumps are supported.'
+    dumps[0] = _GetCacheObject(req_vars['id'])
 
-  # Step 2: Load the rule-set specified by the client in the 'ruleset' POST arg.
-  # Also, perform some basic sanity checking.
-  rules_path = os.path.join(memory_inspector.ROOT_DIR, 'classification_rules',
-                            req_vars['ruleset'])
-  if not classifier:
-    return _HTTP_GONE, [], 'Classifier %s not supported.' % req_vars['type']
   if not dumps:
     return _HTTP_GONE, [], 'No memory dumps could be retrieved'
-  if not os.path.isfile(rules_path):
-    return _HTTP_GONE, [], 'Cannot find the rule-set %s' % rules_path
-  with open(rules_path) as f:
-    rules = mmap_classifier.LoadRules(f.read())
 
-  # Step 3: Aggregate the data using the desired classifier and generate the
-  # profile dictionary (which will be kept cached here in the server).
+  # Initialize the classifier (mmap or nheap) and prepare symbols for nheap.
+  if req_vars['type'] == 'mmap':
+    classifier = mmap_classifier
+  elif req_vars['type'] == 'nheap':
+    classifier = native_heap_classifier
+    if not archive.HasSymbols():
+      return _HTTP_GONE, [], 'No symbols in archive %s' % req_vars['archive']
+    symbols = archive.LoadSymbols()
+    for nheap in dumps.itervalues():
+      nheap.SymbolizeUsingSymbolDB(symbols)
+
+  if not classifier:
+    return _HTTP_GONE, [], 'Classifier %s not supported.' % req_vars['type']
+
+  # Step 2: Load the rule-set specified by the client in the 'ruleset' POST arg.
+  if req_vars['ruleset'] == 'heuristic':
+    assert(req_vars['type'] == 'nheap'), (
+        'heuristic rules are supported only for nheap')
+    rules = native_heap_classifier.InferHeuristicRulesFromHeap(dumps[0])
+  else:
+    rules_path = os.path.join(
+        memory_inspector.ROOT_DIR, 'classification_rules', req_vars['ruleset'])
+    if not os.path.isfile(rules_path):
+      return _HTTP_GONE, [], 'Cannot find the rule-set %s' % rules_path
+    with open(rules_path) as f:
+      rules = classifier.LoadRules(f.read())
+
+  # Step 3: Aggregate the dump data using the classifier and generate the
+  # profile data (which will be kept cached here in the server).
   # The resulting profile will consist of 1+ snapshots (depending on the number
   # dumps the client has requested to process) and a number of 1+ metrics
   # (depending on the buckets' keys returned by the classifier).
@@ -223,8 +244,6 @@
   profile_id = _CacheObject(snapshots)
 
   first_snapshot = next(snapshots.itervalues())
-
-  # |metrics| is the key set of any of the aggregated result
   return _HTTP_OK, [], {'id': profile_id,
                         'times': snapshots.keys(),
                         'metrics': first_snapshot.keys,
@@ -531,6 +550,51 @@
   return _HTTP_OK, [], {'table': _ConvertMmapToGTable(mmap)}
 
 
+@AjaxHandler(r'/ajax/storage/(.+)/(.+)/nheap')
+def _LoadNheapFromStorage(args, req_vars):
+  """Returns a Google Charts DataTable dictionary for the nheap."""
+  archive = _persistent_storage.OpenArchive(args[0])
+  if not archive:
+    return _HTTP_GONE, [], 'Cannot open archive %s' % req_vars['archive']
+
+  timestamp = dateutil.parser.parse(args[1])
+  if not archive.HasNativeHeap(timestamp):
+    return _HTTP_GONE, [], 'No native heap dump for snapshot %s' % timestamp
+
+  nheap = archive.LoadNativeHeap(timestamp)
+  symbols = archive.LoadSymbols()
+  nheap.SymbolizeUsingSymbolDB(symbols)
+
+  resp = {
+      'cols': [
+          {'label': 'Total size [KB]', 'type':'number'},
+          {'label': 'Alloc size [B]', 'type':'number'},
+          {'label': 'Count', 'type':'number'},
+          {'label': 'Stack Trace', 'type':'string'},
+        ],
+      'rows': []}
+  for alloc in nheap.allocations:
+    strace = '<dl>'
+    for frame in alloc.stack_trace.frames:
+      # Use the fallback libname.so+0xaddr if symbol info is not available.
+      symbol_name = frame.symbol.name if frame.symbol else '??'
+      source_info = (str(frame.symbol.source_info[0]) if
+          frame.symbol and frame.symbol.source_info else frame.raw_address)
+      strace += '<dd title="%s">%s</dd><dt>%s</dt>' % (
+          cgi.escape(source_info),
+          cgi.escape(os.path.basename(source_info)),
+          cgi.escape(symbol_name))
+    strace += '</dl>'
+
+    resp['rows'] += [{'c': [
+        {'v': alloc.total_size, 'f': alloc.total_size / 1024},
+        {'v': alloc.size, 'f': None},
+        {'v': alloc.count, 'f': None},
+        {'v': strace, 'f': None},
+    ]}]
+  return _HTTP_OK, [], resp
+
+
 # /ajax/tracer/start/Android/device-id/pid
 @AjaxHandler(r'/ajax/tracer/start/(\w+)/(\w+)/(\d+)', 'POST')
 def _StartTracer(args, req_vars):
diff --git a/tools/memory_inspector/memory_inspector_cli b/tools/memory_inspector/memory_inspector_cli
index ead2754..774a50f 100755
--- a/tools/memory_inspector/memory_inspector_cli
+++ b/tools/memory_inspector/memory_inspector_cli
@@ -11,4 +11,4 @@
 
 
 if __name__ == '__main__':
-  sys.exit(command_line.main(sys.argv))
+  sys.exit(command_line.main())
diff --git a/tools/metrics/actions/actions.xml b/tools/metrics/actions/actions.xml
index 731bc11..8c21bfd 100644
--- a/tools/metrics/actions/actions.xml
+++ b/tools/metrics/actions/actions.xml
@@ -1677,11 +1677,13 @@
 <action name="BrowserPlugin.Guest.PermissionRequest.JSDialog">
   <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
   <description>Please enter the description of this user action.</description>
+  <obsolete>This permission has been moved to the chrome layer.</obsolete>
 </action>
 
 <action name="BrowserPlugin.Guest.PermissionRequest.Media">
   <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
   <description>Please enter the description of this user action.</description>
+  <obsolete>This permission has been moved to the chrome layer.</obsolete>
 </action>
 
 <action name="BrowserPlugin.Guest.PermissionRequest.NewWindow">
@@ -1692,6 +1694,7 @@
 <action name="BrowserPlugin.Guest.PermissionRequest.PointerLock">
   <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
   <description>Please enter the description of this user action.</description>
+  <obsolete>This permission has been moved to the chrome layer.</obsolete>
 </action>
 
 <action name="BrowserPlugin.Guest.Responsive">
@@ -1712,6 +1715,7 @@
 <action name="BrowserPlugin.PermissionAllow.Download">
   <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
   <description>Please enter the description of this user action.</description>
+  <obsolete>This permission has been moved to the chrome layer.</obsolete>
 </action>
 
 <action name="BrowserPlugin.PermissionAllow.Geolocation">
@@ -1723,11 +1727,13 @@
 <action name="BrowserPlugin.PermissionAllow.JSDialog">
   <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
   <description>Please enter the description of this user action.</description>
+  <obsolete>This permission has been moved to the chrome layer.</obsolete>
 </action>
 
 <action name="BrowserPlugin.PermissionAllow.Media">
   <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
   <description>Please enter the description of this user action.</description>
+  <obsolete>This permission has been moved to the chrome layer.</obsolete>
 </action>
 
 <action name="BrowserPlugin.PermissionAllow.NewWindow">
@@ -1738,11 +1744,13 @@
 <action name="BrowserPlugin.PermissionAllow.PointerLock">
   <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
   <description>Please enter the description of this user action.</description>
+  <obsolete>This permission has been moved to the chrome layer.</obsolete>
 </action>
 
 <action name="BrowserPlugin.PermissionDeny.Download">
   <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
   <description>Please enter the description of this user action.</description>
+  <obsolete>This permission has been moved to the chrome layer.</obsolete>
 </action>
 
 <action name="BrowserPlugin.PermissionDeny.Geolocation">
@@ -1753,11 +1761,13 @@
 <action name="BrowserPlugin.PermissionDeny.JSDialog">
   <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
   <description>Please enter the description of this user action.</description>
+  <obsolete>This permission has been moved to the chrome layer.</obsolete>
 </action>
 
 <action name="BrowserPlugin.PermissionDeny.Media">
   <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
   <description>Please enter the description of this user action.</description>
+  <obsolete>This permission has been moved to the chrome layer.</obsolete>
 </action>
 
 <action name="BrowserPlugin.PermissionDeny.NewWindow">
@@ -1768,6 +1778,7 @@
 <action name="BrowserPlugin.PermissionDeny.PointerLock">
   <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
   <description>Please enter the description of this user action.</description>
+  <obsolete>This permission has been moved to the chrome layer.</obsolete>
 </action>
 
 <action name="CanCommitURL_BlockedAndKilled">
@@ -10710,6 +10721,14 @@
   <description>Please enter the description of this user action.</description>
 </action>
 
+<action name="WebView.PermissionAllow.Download">
+  <owner>fsamuel@chromium.org</owner>
+  <owner>lazyboy@chromium.org</owner>
+  <description>
+    Tracks when the download permission is explicitly allowed on a webview.
+  </description>
+</action>
+
 <action name="WebView.PermissionAllow.Geolocation">
   <owner>fsamuel@chromium.org</owner>
   <owner>lazyboy@chromium.org</owner>
@@ -10718,6 +10737,38 @@
   </description>
 </action>
 
+<action name="WebView.PermissionAllow.JSDialog">
+  <owner>fsamuel@chromium.org</owner>
+  <owner>lazyboy@chromium.org</owner>
+  <description>
+    Tracks when the dialog permission is explicitly allowed on a webview.
+  </description>
+</action>
+
+<action name="WebView.PermissionAllow.Media">
+  <owner>fsamuel@chromium.org</owner>
+  <owner>lazyboy@chromium.org</owner>
+  <description>
+    Tracks when the media permission is explicitly allowed on a webview.
+  </description>
+</action>
+
+<action name="WebView.PermissionAllow.PointerLock">
+  <owner>fsamuel@chromium.org</owner>
+  <owner>lazyboy@chromium.org</owner>
+  <description>
+    Tracks when the pointerLock permission is explicitly allowed on a webview.
+  </description>
+</action>
+
+<action name="WebView.PermissionDeny.Download">
+  <owner>fsamuel@chromium.org</owner>
+  <owner>lazyboy@chromium.org</owner>
+  <description>
+    Tracks when the download permission is explicitly denied on a webview.
+  </description>
+</action>
+
 <action name="WebView.PermissionDeny.Geolocation">
   <owner>fsamuel@chromium.org</owner>
   <owner>lazyboy@chromium.org</owner>
@@ -10726,6 +10777,30 @@
   </description>
 </action>
 
+<action name="WebView.PermissionDeny.JSDialog">
+  <owner>fsamuel@chromium.org</owner>
+  <owner>lazyboy@chromium.org</owner>
+  <description>
+    Tracks when the dialog permission is explicitly denied on a webview.
+  </description>
+</action>
+
+<action name="WebView.PermissionDeny.Media">
+  <owner>fsamuel@chromium.org</owner>
+  <owner>lazyboy@chromium.org</owner>
+  <description>
+    Tracks when the media permission is explicitly denied on a webview.
+  </description>
+</action>
+
+<action name="WebView.PermissionDeny.PointerLock">
+  <owner>fsamuel@chromium.org</owner>
+  <owner>lazyboy@chromium.org</owner>
+  <description>
+    Tracks when the pointerLock permission is explicitly denied on a webview.
+  </description>
+</action>
+
 <action name="WebView.Reload">
   <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
   <description>Please enter the description of this user action.</description>
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index 25cc5bd..56a9984 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -5344,6 +5344,30 @@
   </summary>
 </histogram>
 
+<histogram name="ExtensionActivity.AdInjected" units="Extension Count">
+  <owner>felt@chromium.org</owner>
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    For each pageload, the number of extensions that inject at least one new ad.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionActivity.AdRemoved" units="Extension Count">
+  <owner>felt@chromium.org</owner>
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    For each pageload, the number of extensions that remove at least one ad.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionActivity.AdReplaced" units="Extension Count">
+  <owner>felt@chromium.org</owner>
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    For each pageload, the number of extensions that replace at least one ad.
+  </summary>
+</histogram>
+
 <histogram name="ExtensionActivity.ContentScript">
   <owner>felt@chromium.org</owner>
   <summary>
@@ -6724,6 +6748,52 @@
   </summary>
 </histogram>
 
+<histogram name="ExtensionUrlRequest.HashTimeMs" units="milliseconds">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    The total time taken to compute a cryptographic hash of the content read for
+    a chrome-extension:// URL, logged at the end of each request we load from
+    the corresponding file for that URL in the filesystem.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionUrlRequest.OnReadCompleteError" enum="NetErrorCodes">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    The error code for failures of incremental reads of a file stream for a
+    chrome-extension:// URL. (See also ExtensionUrlRequest.OnReadCompleteResult
+    for the success case).
+  </summary>
+</histogram>
+
+<histogram name="ExtensionUrlRequest.OnReadCompleteResult">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    The result of an incremental read of a file stream for a chrome-extension://
+    URL, representing a byte count. Logged in success cases (see also
+    ExtensionUrlRequest.OnReadCompleteError).
+  </summary>
+</histogram>
+
+<histogram name="ExtensionUrlRequest.SeekPosition">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    When fetching a chrome-extension:// URL, this indicates the first byte
+    position we read from. This will be greater than 0 in cases such as XHR's
+    with a Range header, but will normally be 0 in the typical case of reading
+    the entire file. This helps identify how frequently partial file reads are
+    taking place.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionUrlRequest.TotalKbRead" units="KB">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    The total number of bytes read for a chrome-extension:// URL, logged when
+    the job is finished (either successfully or not).
+  </summary>
+</histogram>
+
 <histogram name="FileBrowser.Create" enum="FileDialogType">
   <owner>joshwoodward@google.com</owner>
   <summary>Chrome OS File Browser opening mode.</summary>
@@ -8102,6 +8172,40 @@
   </summary>
 </histogram>
 
+<histogram name="InstantSearchClicks.PreviewScrollState"
+    enum="InstantSearchClicks_PreviewScrollState">
+  <owner>ksimbili@chromium.org</owner>
+  <summary>
+    Records the scroll state on the preview page when instant search clicks
+    feature is triggered.
+  </summary>
+</histogram>
+
+<histogram name="InstantSearchClicks.ReasonForSwap"
+    enum="InstantSearchClicks_ReasonForSwap">
+  <owner>ksimbili@chromium.org</owner>
+  <summary>
+    Records the reason that triggered the page swap when instant search clicks
+    feature is triggered.
+  </summary>
+</histogram>
+
+<histogram name="InstantSearchClicks.TimeInPreview" units="milliseconds">
+  <owner>ksimbili@chromium.org</owner>
+  <summary>
+    The time spent by the user in preview page before swapping to original or
+    navigating out of preview page.
+  </summary>
+</histogram>
+
+<histogram name="InstantSearchClicks.TimeToSwap" units="milliseconds">
+  <owner>ksimbili@chromium.org</owner>
+  <summary>
+    The time it took for swap to trigger for all swaps. The is the time between
+    preview page load start to preview page swap with the original page.
+  </summary>
+</histogram>
+
 <histogram name="interstitial.authority_invalid_time" units="milliseconds">
   <obsolete>
     Removed on 8/1/13.
@@ -8429,6 +8533,15 @@
   </summary>
 </histogram>
 
+<histogram name="LibraryLoader.NativeLibraryHack" enum="BooleanUsage">
+  <owner>feng@chromium.org</owner>
+  <summary>
+    A boolean that indicates whether the workaround of a Sony framework bug was
+    used. The metric is Android-specific, and is logged when the browser starts.
+    See more details at http://crbug.com/311644.
+  </summary>
+</histogram>
+
 <histogram name="Linux.GlibcVersion" enum="LinuxGlibcVersion">
   <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
   <summary>The version of glibc used. (Linux only)</summary>
@@ -12211,7 +12324,10 @@
 </histogram>
 
 <histogram name="Net.Ping_ResponseStartedTime" units="milliseconds">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <obsolete>
+    Deprecated 4/16/2014. No longer tracked.
+  </obsolete>
+  <owner>davidben@chromium.org</owner>
   <summary>
     How long it took for an &lt;a ping&gt; request to receive a response. Only
     recorded if a response was received.
@@ -12219,7 +12335,10 @@
 </histogram>
 
 <histogram name="Net.Ping_Result" enum="PingResult">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <obsolete>
+    Deprecated 4/16/2014. No longer tracked.
+  </obsolete>
+  <owner>davidben@chromium.org</owner>
   <summary>
     The result of an &lt;a ping&gt; request, whether it received a response or
     timed out or failed for some other reason.
@@ -13058,52 +13177,70 @@
 </histogram>
 
 <histogram name="Net.SocketStream.ConnectionEstablish" units="milliseconds">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <owner>yhirano@chromium.org</owner>
+  <owner>ricea@chromium.org</owner>
+  <owner>tyoshino@chromium.org</owner>
   <summary>The time from the connection start to connection establish.</summary>
 </histogram>
 
 <histogram name="Net.SocketStream.ConnectionLatency" units="milliseconds">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <owner>yhirano@chromium.org</owner>
+  <owner>ricea@chromium.org</owner>
+  <owner>tyoshino@chromium.org</owner>
   <summary>The time waiting to be ready to start connecting.</summary>
 </histogram>
 
 <histogram name="Net.SocketStream.ConnectionType"
     enum="SocketStreamConnectionType">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <owner>yhirano@chromium.org</owner>
+  <owner>ricea@chromium.org</owner>
+  <owner>tyoshino@chromium.org</owner>
   <summary>
     Each bucket is the number of connection type of socket stream.
   </summary>
 </histogram>
 
 <histogram name="Net.SocketStream.Duration" units="milliseconds">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <owner>yhirano@chromium.org</owner>
+  <owner>ricea@chromium.org</owner>
+  <owner>tyoshino@chromium.org</owner>
   <summary>The time a socket stream was open.</summary>
 </histogram>
 
 <histogram name="Net.SocketStream.ProtocolType" enum="SocketStreamProtocolType">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <owner>yhirano@chromium.org</owner>
+  <owner>ricea@chromium.org</owner>
+  <owner>tyoshino@chromium.org</owner>
   <summary>
     Each bucket is the number of protocol type on socket stream.
   </summary>
 </histogram>
 
 <histogram name="Net.SocketStream.ReceivedBytes" units="bytes">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <owner>yhirano@chromium.org</owner>
+  <owner>ricea@chromium.org</owner>
+  <owner>tyoshino@chromium.org</owner>
   <summary>Number of bytes on a socket stream.</summary>
 </histogram>
 
 <histogram name="Net.SocketStream.ReceivedCounts">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <owner>yhirano@chromium.org</owner>
+  <owner>ricea@chromium.org</owner>
+  <owner>tyoshino@chromium.org</owner>
   <summary>Number of reads on a socket stream.</summary>
 </histogram>
 
 <histogram name="Net.SocketStream.SentBytes" units="bytes">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <owner>yhirano@chromium.org</owner>
+  <owner>ricea@chromium.org</owner>
+  <owner>tyoshino@chromium.org</owner>
   <summary>Number of bytes on a socket stream.</summary>
 </histogram>
 
 <histogram name="Net.SocketStream.SentCounts">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <owner>yhirano@chromium.org</owner>
+  <owner>ricea@chromium.org</owner>
+  <owner>tyoshino@chromium.org</owner>
   <summary>Number of Write on a socket stream.</summary>
 </histogram>
 
@@ -14951,6 +15088,14 @@
   <summary>Chrome OS connection manager service errors seen.</summary>
 </histogram>
 
+<histogram name="Network.Shill.ServicesOnSameNetwork">
+  <owner>zqiu@chromium.org</owner>
+  <summary>
+    Chrome OS network metric sampling the number of services that are connected
+    to the currently connected network.
+  </summary>
+</histogram>
+
 <histogram name="Network.Shill.TerminationActionResult"
     enum="ShillTerminationActionResult">
   <obsolete>
@@ -15087,6 +15232,22 @@
   </summary>
 </histogram>
 
+<histogram name="Network.Shill.WiFi.AutoConnectableServices">
+  <owner>zqiu@chromium.org</owner>
+  <summary>
+    Chrome OS network metric sampling the number of wifi services available for
+    auto-connect when auto-connect is initiated for wifi device.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.WiFi.AvailableBSSesAtConnect">
+  <owner>zqiu@chromium.org</owner>
+  <summary>
+    Chrome OS network metric sampling the number of BSSes (endpoints) available
+    for the currently connecting wifi service.
+  </summary>
+</histogram>
+
 <histogram name="Network.Shill.Wifi.Channel" enum="NetworkChannelType">
   <owner>quiche@chromium.org</owner>
   <summary>
@@ -16216,6 +16377,14 @@
   </summary>
 </histogram>
 
+<histogram name="Omnibox.SaveStateForTabSwitch.UserInputInProgress"
+    units="count">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    When a user switches tabs, whether the omnibox had an edit in progress.
+  </summary>
+</histogram>
+
 <histogram name="Omnibox.SearchEngine" enum="OmniboxSearchEngine">
   <obsolete>
     Made obsolete around Chrome 32.  Use Omnibox.SearchEngineType instead.
@@ -20869,6 +21038,17 @@
   </summary>
 </histogram>
 
+<histogram name="Renderer4.CompositorScrollHitTestResult"
+    enum="CompositorScrollResult">
+  <owner>vollick@chromium.org</owner>
+  <summary>
+    It's possible for compositor hit testing to determine conclusively that
+    compositor thread scrolling can or cannot be done. It's also possible that
+    the hit testing result is inconclusive. We would like to see the I-don't-
+    know result as little as possible. This histogram tracks the ratios.
+  </summary>
+</histogram>
+
 <histogram name="Renderer4.CompositorThreadImplDrawDelay" units="milliseconds">
   <owner>wiltzius@chromium.org</owner>
   <summary>
@@ -25267,6 +25447,47 @@
   <summary>The outcome of Entry::WriteData in the simple cache.</summary>
 </histogram>
 
+<histogram name="SimpleGeolocation.Request.Event"
+    enum="SimpleGeolocationRequestEvent">
+  <owner>alemate@chromium.org</owner>
+  <summary>Events in reqests processing of IP-based SimpleGeolocation.</summary>
+</histogram>
+
+<histogram name="SimpleGeolocation.Request.ResponseCode"
+    enum="HttpResponseCode">
+  <owner>alemate@chromium.org</owner>
+  <summary>Http response codes in IP-based SimpleGeolocation.</summary>
+</histogram>
+
+<histogram name="SimpleGeolocation.Request.ResponseFailureTime"
+    units="milliseconds">
+  <owner>alemate@chromium.org</owner>
+  <summary>
+    The time elapsed between the sending of the first API request and the time
+    the final (failed) response was recorded. Includes all retries.
+  </summary>
+</histogram>
+
+<histogram name="SimpleGeolocation.Request.ResponseSuccessTime"
+    units="milliseconds">
+  <owner>alemate@chromium.org</owner>
+  <summary>
+    The time elapsed between the sending of the first API request and the time
+    the final (successfull) response was recorded. Includes all retries.
+  </summary>
+</histogram>
+
+<histogram name="SimpleGeolocation.Request.Result"
+    enum="SimpleGeolocationRequestResult">
+  <owner>alemate@chromium.org</owner>
+  <summary>Result of SimpleGeolocationRequest.</summary>
+</histogram>
+
+<histogram name="SimpleGeolocation.Request.Retries">
+  <owner>alemate@chromium.org</owner>
+  <summary>Number of retries until the final response was recorded.</summary>
+</histogram>
+
 <histogram name="SiteIsolation.AllResponses">
   <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
   <summary>
@@ -28519,6 +28740,17 @@
   </summary>
 </histogram>
 
+<histogram name="UpdateEngine.Rollback.Result" enum="BooleanSuccess">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    Whether rollback worked.
+
+    This is reported every time there's a rollback request.
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
 <histogram name="UpdateEngine.SuccessfulUpdate.AttemptCount" units="count">
   <owner>zeuthen@chromium.org</owner>
   <summary>
@@ -29509,7 +29741,9 @@
 
 <histogram name="WebCore.WebSocket.HandshakeResult"
     enum="WebSocketHandshakeResult">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <owner>yhirano@chromium.org</owner>
+  <owner>ricea@chromium.org</owner>
+  <owner>tyoshino@chromium.org</owner>
   <summary>
     Count the number of WebSocket handshake for each result. Use this histogram
     as a baseline for investigating feature usage counters.
@@ -29893,14 +30127,14 @@
 </histogram>
 
 <histogram name="WebRTC.DataChannelCounters" enum="DataChannelCounters">
-  <owner>tommi@chromium.org</owner>
+  <owner>perkj@chromium.org</owner>
   <summary>
     Counters on creation, opening, and a few main attributes of data channels.
   </summary>
 </histogram>
 
 <histogram name="WebRTC.NumDataChannelsPerPeerConnection">
-  <owner>tommi@chromium.org</owner>
+  <owner>perkj@chromium.org</owner>
   <summary>
     Number of data channels created per PeerConnection. Sample added to the
     histogram when the PeerConnection is destroyed. Note that this is done
@@ -29929,7 +30163,7 @@
 </histogram>
 
 <histogram name="WebRTC.ReliableDataChannelMessageSize" units="bytes">
-  <owner>tommi@chromium.org</owner>
+  <owner>perkj@chromium.org</owner>
   <summary>
     Sizes of messages sent over reliable data channels. The size of an
     individual message is added to the histogram as a sample immediately when a
@@ -29965,17 +30199,16 @@
 </histogram>
 
 <histogram name="WebRTC.webkitApiCount" enum="JavaScriptAPIName">
-  <owner>tommi@chromium.org</owner>
+  <owner>perkj@chromium.org</owner>
   <summary>Counts number of calls to WebRTC APIs from JavaScript.</summary>
 </histogram>
 
 <histogram name="WebRTC.webkitApiCountPerSession" enum="JavaScriptAPIName">
-  <owner>tommi@chromium.org</owner>
+  <owner>perkj@chromium.org</owner>
   <summary>
-    Counts number of calls to WebRTC APIs from JavaScript, once   per
-    &quot;session&quot; which is demarcated by the total number of MediaStreams
-    within a renderer process that are being sent over a PeerConnection
-    transitioning from or to 0.
+    Counts the number of calls to WebRTC APIs from JavaScript once per session.
+    A session is a crude estimate since its implemented as the lifetime of the
+    render process that called the WebRTC API.
   </summary>
 </histogram>
 
@@ -31133,6 +31366,13 @@
   <int value="2" label="Will use composited scrolling"/>
 </enum>
 
+<enum name="CompositorScrollResult" type="int">
+  <int value="0" label="ScrollOnMainThread"/>
+  <int value="1" label="ScrollStarted"/>
+  <int value="2" label="ScrollIgnored"/>
+  <int value="3" label="ScrollUnknown"/>
+</enum>
+
 <enum name="CompositorType" type="int">
   <int value="0" label="Software compositor"/>
   <int value="1" label="GPU compositor"/>
@@ -33347,6 +33587,19 @@
   <int value="720" label="WEBCAMPRIVATE_SET"/>
   <int value="721" label="WEBCAMPRIVATE_RESET"/>
   <int value="722" label="WEBCAMPRIVATE_GET"/>
+  <int value="723" label="BLUETOOTHLOWENERGY_GETSERVICE"/>
+  <int value="724" label="BLUETOOTHLOWENERGY_GETSERVICES"/>
+  <int value="725" label="BLUETOOTHLOWENERGY_GETCHARACTERISTIC"/>
+  <int value="726" label="BLUETOOTHLOWENERGY_GETCHARACTERISTICS"/>
+  <int value="727" label="BLUETOOTHLOWENERGY_GETINCLUDEDSERVICES"/>
+  <int value="728" label="BLUETOOTHLOWENERGY_GETDESCRIPTOR"/>
+  <int value="729" label="BLUETOOTHLOWENERGY_GETDESCRIPTORS"/>
+  <int value="730" label="BLUETOOTHLOWENERGY_READCHARACTERISTICVALUE"/>
+  <int value="731" label="BLUETOOTHLOWENERGY_WRITECHARACTERISTICVALUE"/>
+  <int value="732" label="BLUETOOTHLOWENERGY_READDESCRIPTORVALUE"/>
+  <int value="733" label="BLUETOOTHLOWENERGY_WRITEDESCRIPTORVALUE"/>
+  <int value="734" label="BOOKMARKMANAGERPRIVATE_CREATEWITHMETAINFO"/>
+  <int value="735" label="BOOKMARKMANAGERPRIVATE_UPDATEMETAINFO"/>
 </enum>
 
 <enum name="ExtensionInstallCause" type="int">
@@ -33520,6 +33773,9 @@
   <int value="57" label="kScreenlockPrivate"/>
   <int value="58" label="kOverrideBookmarksUI"/>
   <int value="59" label="kAutomation"/>
+  <int value="60" label="kAccessibilityFeaturesModify"/>
+  <int value="61" label="kAccessibilityFeaturesRead"/>
+  <int value="62" label="kBluetoothPrivate"/>
 </enum>
 
 <enum name="ExtensionServiceVerifyAllSuccess" type="int">
@@ -33638,7 +33894,7 @@
 </enum>
 
 <enum name="FeatureObserver" type="int">
-<!-- See http://src.chromium.org/viewvc/blink/trunk/Source/core/page/UseCounter.h -->
+<!-- Generated from ../../../third_party/WebKit/Source/core/frame/UseCounter.h -->
 
   <int value="0" label="PageDestruction"/>
   <int value="1" label="LegacyNotifications"/>
@@ -33646,7 +33902,7 @@
   <int value="3" label="PrefixedIndexedDB"/>
   <int value="4" label="WorkerStart"/>
   <int value="5" label="SharedWorkerStart"/>
-  <int value="6" label="LegacyWebAudioNoteOn"/>
+  <int value="6" label="LegacyWebAudio"/>
   <int value="7" label="WebAudioStart"/>
   <int value="8" label="PrefixedContentSecurityPolicy"/>
   <int value="9" label="UnprefixedIndexedDB"/>
@@ -33697,7 +33953,7 @@
   <int value="54" label="Unused: CSSOverflowMarquee"/>
   <int value="55" label="Reflection"/>
   <int value="56" label="CursorVisibility"/>
-  <int value="57" label="StorageInfo"/>
+  <int value="57" label="PrefixedStorageInfo"/>
   <int value="58" label="XFrameOptions"/>
   <int value="59" label="XFrameOptionsSameOrigin"/>
   <int value="60" label="XFrameOptionsSameOriginWithBadAncestorChain"/>
@@ -33723,7 +33979,7 @@
   <int value="80" label="SVGSwitchElement"/>
   <int value="81" label="PrefixedDocumentRegister"/>
   <int value="82" label="HTMLShadowElementOlderShadowRoot"/>
-  <int value="83" label="Document.all()"/>
+  <int value="83" label="DocumentAll"/>
   <int value="84" label="FormElement"/>
   <int value="85" label="DemotedFormElement"/>
   <int value="86" label="CaptureAttributeAsEnum"/>
@@ -33824,9 +34080,9 @@
   <int value="181" label="BarPropScrollbars"/>
   <int value="182" label="BarPropStatusbar"/>
   <int value="183" label="BarPropToolbar"/>
-  <int value="184" label="input[type=email][multiple]"/>
-  <int value="185" label="input[type=email][maxlength]"/>
-  <int value="186" label="input[type=email][multiple][maxlength]"/>
+  <int value="184" label="InputTypeEmailMultiple"/>
+  <int value="185" label="InputTypeEmailMaxLength"/>
+  <int value="186" label="InputTypeEmailMultipleMaxLength"/>
   <int value="187" label="TextTrackCueConstructor"/>
   <int value="188" label="CSSStyleDeclarationPropertyName"/>
   <int value="189" label="CSSStyleDeclarationFloatPropertyName"/>
@@ -33922,7 +34178,7 @@
   <int value="279" label="SVGClassName"/>
   <int value="280" label="HTMLAppletElement"/>
   <int value="281" label="HTMLMediaElementSeekToFragmentStart"/>
-  <int value="282" label="HTMLMediaElementSeekToFragmentEnd"/>
+  <int value="282" label="HTMLMediaElementPauseAtFragmentEnd"/>
   <int value="283" label="PrefixedWindowURL"/>
   <int value="284" label="PrefixedWorkerURL"/>
   <int value="285" label="WindowOrientation"/>
@@ -33969,6 +34225,18 @@
   <int value="326" label="PrefixedElementRequestPointerLock"/>
   <int value="327" label="SelectionSetPosition"/>
   <int value="328" label="AnimationPlayerFinishEvent"/>
+  <int value="329" label="SVGSVGElementInXMLDocument"/>
+  <int value="330" label="CanvasRenderingContext2DSetAlpha"/>
+  <int value="331" label="CanvasRenderingContext2DSetCompositeOperation"/>
+  <int value="332" label="CanvasRenderingContext2DSetLineWidth"/>
+  <int value="333" label="CanvasRenderingContext2DSetLineCap"/>
+  <int value="334" label="CanvasRenderingContext2DSetLineJoin"/>
+  <int value="335" label="CanvasRenderingContext2DSetMiterLimit"/>
+  <int value="336" label="CanvasRenderingContext2DClearShadow"/>
+  <int value="337" label="CanvasRenderingContext2DSetStrokeColor"/>
+  <int value="338" label="CanvasRenderingContext2DSetFillColor"/>
+  <int value="339" label="CanvasRenderingContext2DDrawImageFromRect"/>
+  <int value="340" label="CanvasRenderingContext2DSetShadow"/>
 </enum>
 
 <enum name="FFmpegCodecs" type="int">
@@ -35086,6 +35354,20 @@
   <int value="5" label="Opted out both"/>
 </enum>
 
+<enum name="InstantSearchClicks_PreviewScrollState" type="int">
+  <int value="0" label="No scroll"/>
+  <int value="1" label="Scrolled but not to bottom"/>
+  <int value="2" label="Scrolled to bottom."/>
+</enum>
+
+<enum name="InstantSearchClicks_ReasonForSwap" type="int">
+  <int value="0" label="Regular swap"/>
+  <int value="1" label="Swapped on timeout"/>
+  <int value="2" label="Swap aborted due to navigation"/>
+  <int value="3" label="No swap as preview failed"/>
+  <int value="4" label="Swapped as original failed"/>
+</enum>
+
 <enum name="InstantSessionStorageNamespace" type="int">
   <int value="0" label="different"/>
   <int value="1" label="identical"/>
@@ -40128,6 +40410,21 @@
   <int value="5" label="Fast Empty Return (Success)"/>
 </enum>
 
+<enum name="SimpleGeolocationRequestEvent" type="int">
+  <int value="0" label="Request start"/>
+  <int value="1" label="Response success"/>
+  <int value="2" label="Response not OK"/>
+  <int value="3" label="Response empty"/>
+  <int value="4" label="Response malformed"/>
+</enum>
+
+<enum name="SimpleGeolocationRequestResult" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="Failure"/>
+  <int value="2" label="Server error"/>
+  <int value="3" label="Request is cancelled."/>
+</enum>
+
 <enum name="SimpleIndexState" type="int">
   <int value="0" label="Corrupt"/>
   <int value="1" label="Stale"/>
diff --git a/tools/metrics/histograms/update_extension_functions.py b/tools/metrics/histograms/update_extension_functions.py
index dd390a2..1d00033 100644
--- a/tools/metrics/histograms/update_extension_functions.py
+++ b/tools/metrics/histograms/update_extension_functions.py
@@ -9,10 +9,16 @@
 """
 
 import os
+import sys
 
 from update_histogram_enum import UpdateHistogramEnum
 
 if __name__ == '__main__':
+  if len(sys.argv) > 1:
+    print >>sys.stderr, 'No arguments expected!'
+    sys.stderr.write(__doc__)
+    sys.exit(1)
+
   UpdateHistogramEnum(histogram_enum_name='ExtensionFunctions',
                       source_enum_path=
                           os.path.join('..', '..', '..', 'extensions',
diff --git a/tools/metrics/histograms/update_extension_permission.py b/tools/metrics/histograms/update_extension_permission.py
index 1672841..5c01fe5 100644
--- a/tools/metrics/histograms/update_extension_permission.py
+++ b/tools/metrics/histograms/update_extension_permission.py
@@ -9,10 +9,16 @@
 """
 
 import os
+import sys
 
 from update_histogram_enum import UpdateHistogramEnum
 
 if __name__ == '__main__':
+  if len(sys.argv) > 1:
+    print >>sys.stderr, 'No arguments expected!'
+    sys.stderr.write(__doc__)
+    sys.exit(1)
+
   UpdateHistogramEnum(histogram_enum_name='ExtensionPermission2',
                       source_enum_path=os.path.join('..', '..', '..',
                                                     'extensions', 'common',
diff --git a/tools/metrics/histograms/update_histogram_enum.py b/tools/metrics/histograms/update_histogram_enum.py
index 61104ad..03acea7 100644
--- a/tools/metrics/histograms/update_histogram_enum.py
+++ b/tools/metrics/histograms/update_histogram_enum.py
@@ -31,16 +31,6 @@
   logging.info(message)
 
 
-def ExtractRegexGroup(line, regex):
-  m = re.match(regex, line)
-  if m:
-    # TODO(ahernandez.miralles): This can throw an IndexError
-    # if no groups are present; enclose in try catch block
-    return m.group(1)
-  else:
-    return None
-
-
 def ReadHistogramValues(filename, start_marker, end_marker):
   """Reads in values from |filename|, returning a list of (label, value) pairs
   corresponding to the enum framed by |start_marker| and |end_marker|.
@@ -49,56 +39,101 @@
   with open(filename) as f:
     content = f.readlines()
 
+  START_REGEX = re.compile(start_marker)
+  ITEM_REGEX = re.compile(r'^(\w+)')
+  ITEM_REGEX_WITH_INIT = re.compile(r'(\w+)\s*=\s*(\d+)')
+  END_REGEX = re.compile(end_marker)
+
   # Locate the enum definition and collect all entries in it
   inside_enum = False # We haven't found the enum definition yet
-  result = []
+  result = {}
   for line in content:
     line = line.strip()
     if inside_enum:
       # Exit condition: we reached last enum value
-      if re.match(end_marker, line):
+      if END_REGEX.match(line):
         inside_enum = False
       else:
         # Inside enum: generate new xml entry
-        label = ExtractRegexGroup(line.strip(), "^([\w]+)")
-        if label:
-          result.append((label, enum_value))
-          enum_value += 1
+        m = ITEM_REGEX_WITH_INIT.match(line)
+        if m:
+          enum_value = int(m.group(2))
+          label = m.group(1)
+        else:
+          m = ITEM_REGEX.match(line)
+          if m:
+            label = m.group(1)
+          else:
+            continue
+        result[enum_value] = label
+        enum_value += 1
     else:
-      if re.match(start_marker, line):
+      if START_REGEX.match(line):
         inside_enum = True
-        enum_value = 0 # Start at 'UNKNOWN'
+        enum_value = 0
   return result
 
 
+def CreateEnumItemNode(document, value, label):
+  """Creates an int element to append to an enum."""
+  item_node = document.createElement('int')
+  item_node.attributes['value'] = str(value)
+  item_node.attributes['label'] = label
+  return item_node
+
+
 def UpdateHistogramDefinitions(histogram_enum_name, source_enum_values,
                                source_enum_path, document):
-  """Sets the children of <enum name=|histogram_enum_name| ...> node in
-  |document| to values generated from (label, value) pairs contained in
-  |source_enum_values|.
+  """Updates the enum node named |histogram_enum_name| based on the definition
+  stored in |source_enum_values|. Existing items for which |source_enum_values|
+  doesn't contain any corresponding data will be preserved. |source_enum_path|
+  will be used to insert a comment.
   """
-  # Find ExtensionFunctions enum.
+  # Get a dom of <enum name=|name| ...> node in |document|.
   for enum_node in document.getElementsByTagName('enum'):
     if enum_node.attributes['name'].value == histogram_enum_name:
-      histogram_enum_node = enum_node
       break
   else:
-    raise UserError('No {0} enum node found'.format(histogram_enum_name))
+    raise UserError('No {0} enum node found'.format(name))
 
-  # Remove existing values.
-  while histogram_enum_node.hasChildNodes():
-    histogram_enum_node.removeChild(histogram_enum_node.lastChild)
+  new_children = []
 
-  # Add a "Generated from (...)" comment
-  comment = ' Generated from {0} '.format(source_enum_path)
-  histogram_enum_node.appendChild(document.createComment(comment))
+  # Add a "Generated from (...)" comment.
+  new_children.append(
+      document.createComment(' Generated from {0} '.format(source_enum_path)))
 
-  # Add values generated from policy templates.
-  for (label, value) in source_enum_values:
-    node = document.createElement('int')
-    node.attributes['value'] = str(value)
-    node.attributes['label'] = label
-    histogram_enum_node.appendChild(node)
+  # Scan existing nodes in |enum_node| and build |new_children|.
+  # - For each int node in |enum_node|, if there is a corresponding entry in
+  #   |source_enum_values|, drop the existing node and add a node newly created
+  #   from |source_enum_values| to |new_children|.
+  # - Drop existing "Generated from (...)" comment in |enum_node|.
+  # - Copy anything else.
+  SOURCE_COMMENT_REGEX = re.compile('^ Generated from ')
+  for child in enum_node.childNodes:
+    if child.nodeName == 'int':
+      value = int(child.attributes['value'].value)
+      if source_enum_values.has_key(value):
+        new_children.append(
+            CreateEnumItemNode(document, value, source_enum_values[value]))
+        del source_enum_values[value]
+      else:
+        new_children.append(child)
+    # Drop existing source comments if any.
+    elif (child.nodeType != minidom.Node.COMMENT_NODE or
+          SOURCE_COMMENT_REGEX.match(child.data) is None):
+      new_children.append(child)
+
+  # Add remaining entries i.e. new enum values, in the |source_enum_values| to
+  # the |new_children|.
+  for value in sorted(source_enum_values.iterkeys()):
+    new_children.append(
+        CreateEnumItemNode(document, value, source_enum_values[value]))
+
+  # Update |enum_node|.
+  while enum_node.hasChildNodes():
+    enum_node.removeChild(enum_node.lastChild)
+  for child in new_children:
+    enum_node.appendChild(child)
 
 
 def UpdateHistogramEnum(histogram_enum_name, source_enum_path,
@@ -111,11 +146,6 @@
   # file in this directory; factor out into a central location
   HISTOGRAMS_PATH = 'histograms.xml'
 
-  if len(sys.argv) > 1:
-    print >>sys.stderr, 'No arguments expected!'
-    sys.stderr.write(__doc__)
-    sys.exit(1)
-
   Log('Reading histogram enum definition from "{0}".'.format(source_enum_path))
   source_enum_values = ReadHistogramValues(source_enum_path, start_marker,
                                            end_marker)
@@ -132,8 +162,12 @@
 
   Log('Writing out new histograms file.')
   new_xml = print_style.GetPrintStyle().PrettyPrintNode(histograms_doc)
-  if PromptUserToAcceptDiff(xml, new_xml, 'Is the updated version acceptable?'):
-    with open(HISTOGRAMS_PATH, 'wb') as f:
-      f.write(new_xml)
+  if not PromptUserToAcceptDiff(
+      xml, new_xml, 'Is the updated version acceptable?'):
+    Log('Cancelled.')
+    return
+
+  with open(HISTOGRAMS_PATH, 'wb') as f:
+    f.write(new_xml)
 
   Log('Done.')
diff --git a/tools/metrics/histograms/update_use_counter_feature_enum.py b/tools/metrics/histograms/update_use_counter_feature_enum.py
new file mode 100755
index 0000000..8bb139d
--- /dev/null
+++ b/tools/metrics/histograms/update_use_counter_feature_enum.py
@@ -0,0 +1,51 @@
+#!/usr/bin/env python
+# 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.
+
+"""Scans the Chromium source of UseCounter, formats the Feature enum for
+histograms.xml and merges it. This script can also generate a python code
+snippet to put in uma.py of Chromium Dashboard. Make sure that you review the
+output for correctness.
+"""
+
+import optparse
+import os
+import sys
+
+sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'common'))
+from update_histogram_enum import ReadHistogramValues
+from update_histogram_enum import UpdateHistogramEnum
+
+
+def print_enum_for_dashboard(enum_dict):
+  """Prints enum_items formatted for use in uma.py of Chromium dashboard."""
+  for key in sorted(enum_dict.iterkeys()):
+    print '  %d: \'%s\',' % (key, enum_dict[key])
+
+
+if __name__ == '__main__':
+  parser = optparse.OptionParser()
+  parser.add_option('--for-dashboard', action='store_true', dest='dashboard',
+                    default=False,
+                    help='Print enum definition formatted for use in uma.py of '
+                    'Chromium dashboard developed at '
+                    'https://github.com/GoogleChrome/chromium-dashboard')
+  options, args = parser.parse_args()
+
+  source_path = os.path.join(
+      '..', '..', '..',
+      'third_party', 'WebKit', 'Source', 'core', 'frame', 'UseCounter.h')
+
+  START_MARKER = '^enum Feature {'
+  END_MARKER = '^NumberOfFeatures'
+
+  if options.dashboard:
+    enum_dict = ReadHistogramValues(source_path, START_MARKER, END_MARKER)
+    print_enum_for_dashboard(enum_items)
+  else:
+    UpdateHistogramEnum(
+        histogram_enum_name='FeatureObserver',
+        source_enum_path=source_path,
+        start_marker=START_MARKER,
+        end_marker=END_MARKER)
diff --git a/tools/msan/blacklist.txt b/tools/msan/blacklist.txt
index ac7bd86..0860784 100644
--- a/tools/msan/blacklist.txt
+++ b/tools/msan/blacklist.txt
@@ -13,3 +13,6 @@
 # Uninit in Mesa. http://crbug.com/347967
 fun:unpack_RGBA8888
 fun:unpack_RGB888
+
+# http://crbug.com/363487
+fun:*WebCore*RenderLayerCompositor*updateIfNeeded*
diff --git a/tools/perf/benchmarks/blink_perf.py b/tools/perf/benchmarks/blink_perf.py
index d735198..7bba799 100644
--- a/tools/perf/benchmarks/blink_perf.py
+++ b/tools/perf/benchmarks/blink_perf.py
@@ -13,16 +13,16 @@
 def _CreatePageSetFromPath(path):
   assert os.path.exists(path)
 
-  page_set_dict = {'pages': []}
+  page_urls = []
+  serving_dirs = set()
 
   def _AddPage(path):
     if not path.endswith('.html'):
       return
     if '../' in open(path, 'r').read():
       # If the page looks like it references its parent dir, include it.
-      page_set_dict['serving_dirs'] = [os.path.dirname(os.path.dirname(path))]
-    page_set_dict['pages'].append({'url':
-                                   'file://' + path.replace('\\', '/')})
+      serving_dirs.add(os.path.dirname(os.path.dirname(path)))
+    page_urls.append('file://' + path.replace('\\', '/'))
 
   def _AddDir(dir_path, skipped):
     for candidate_path in os.listdir(dir_path):
@@ -48,7 +48,10 @@
     _AddDir(path, skipped)
   else:
     _AddPage(path)
-  return page_set.PageSet.FromDict(page_set_dict, os.getcwd() + os.sep)
+  ps = page_set.PageSet(file_path=os.getcwd()+os.sep, serving_dirs=serving_dirs)
+  for url in page_urls:
+    ps.AddPageWithDefaultRunNavigate(url)
+  return ps
 
 
 class _BlinkPerfMeasurement(page_measurement.PageMeasurement):
diff --git a/tools/perf/benchmarks/endure.py b/tools/perf/benchmarks/endure.py
index f96ebda..7cbffff 100644
--- a/tools/perf/benchmarks/endure.py
+++ b/tools/perf/benchmarks/endure.py
@@ -29,15 +29,15 @@
 
 
 class EndureCalendarForwardBackward(_EndureBenchmark):
-  page_set = 'page_sets/calendar_forward_backward.json'
+  page_set = 'page_sets/calendar_forward_backward.py'
 
 
 class EndureBrowserControl(_EndureBenchmark):
-  page_set = 'page_sets/browser_control.json'
+  page_set = 'page_sets/browser_control.py'
 
 
 class EndureBrowserControlClick(_EndureBenchmark):
-  page_set = 'page_sets/browser_control_click.json'
+  page_set = 'page_sets/browser_control_click.py'
 
 
 class EndureGmailAltThreadlistConversation(_EndureBenchmark):
@@ -53,11 +53,11 @@
 
 
 class EndureIndexedDBOffline(_EndureBenchmark):
-  page_set = 'page_sets/indexeddb_offline.json'
+  page_set = 'page_sets/indexeddb_offline.py'
 
 
 class EndurePlusAltPostsPhotos(_EndureBenchmark):
-  page_set = 'page_sets/plus_alt_posts_photos.json'
+  page_set = 'page_sets/plus_alt_posts_photos.py'
 
 
 class EndureGmailRefresh(test.Test):
diff --git a/tools/perf/benchmarks/image_decoding.py b/tools/perf/benchmarks/image_decoding.py
index c83f88b..7611f58 100644
--- a/tools/perf/benchmarks/image_decoding.py
+++ b/tools/perf/benchmarks/image_decoding.py
@@ -9,5 +9,5 @@
 
 class ImageDecodingToughImageCases(test.Test):
   test = image_decoding.ImageDecoding
-  # TODO: Rename this page set to tough_image_cases.json
-  page_set = 'page_sets/image_decoding_measurement.json'
+  # TODO: Rename this page set to tough_image_cases.py
+  page_set = 'page_sets/image_decoding_measurement.py'
diff --git a/tools/perf/benchmarks/media.py b/tools/perf/benchmarks/media.py
index 3d9fed8..f881547 100644
--- a/tools/perf/benchmarks/media.py
+++ b/tools/perf/benchmarks/media.py
@@ -26,11 +26,10 @@
   page_set = 'page_sets/tough_video_cases.py'
 
 
-@test.Disabled('mac')  # http://crbug.com/353268
 class MediaNetworkSimulation(test.Test):
   """Obtains media metrics under different network simulations."""
   test = media.Media
-  page_set = 'page_sets/media_cns_cases.json'
+  page_set = 'page_sets/media_cns_cases.py'
 
 
 class MediaAndroid(test.Test):
@@ -71,7 +70,7 @@
 class MediaSourceExtensions(test.Test):
   """Obtains media metrics for key media source extensions functions."""
   test = _MSEMeasurement
-  page_set = 'page_sets/mse_cases.json'
+  page_set = 'page_sets/mse_cases.py'
 
   def CustomizeBrowserOptions(self, options):
     # Needed to allow XHR requests to return stream objects.
diff --git a/tools/perf/benchmarks/memory.py b/tools/perf/benchmarks/memory.py
index d04d2ce..9e8b7a6 100644
--- a/tools/perf/benchmarks/memory.py
+++ b/tools/perf/benchmarks/memory.py
@@ -8,12 +8,12 @@
 
 class MemoryMobile(test.Test):
   test = memory.Memory
-  page_set = 'page_sets/mobile_memory.json'
+  page_set = 'page_sets/mobile_memory.py'
 
 
 class MemoryTop25(test.Test):
   test = memory.Memory
-  page_set = 'page_sets/top_25.json'
+  page_set = 'page_sets/top_25.py'
 
 
 class Reload2012Q3(test.Test):
diff --git a/tools/perf/benchmarks/memory_pressure.py b/tools/perf/benchmarks/memory_pressure.py
index 316f55f..e1e2181 100644
--- a/tools/perf/benchmarks/memory_pressure.py
+++ b/tools/perf/benchmarks/memory_pressure.py
@@ -7,5 +7,5 @@
 
 class MemoryPressure(test.Test):
   test = memory_pressure.MemoryPressure
-  page_set = 'page_sets/typical_25.json'
+  page_set = 'page_sets/typical_25.py'
   options = {'pageset_repeat': 6}
diff --git a/tools/perf/benchmarks/page_cycler.py b/tools/perf/benchmarks/page_cycler.py
index b67843e..95692a7 100644
--- a/tools/perf/benchmarks/page_cycler.py
+++ b/tools/perf/benchmarks/page_cycler.py
@@ -84,7 +84,7 @@
 
 class PageCyclerTop10Mobile(test.Test):
   test = page_cycler.PageCycler
-  page_set = 'page_sets/top_10_mobile.json'
+  page_set = 'page_sets/top_10_mobile.py'
   options = {'pageset_repeat': 10}
 
 
@@ -105,5 +105,5 @@
 @test.Disabled('android', 'win')
 class PageCyclerTypical25(test.Test):
   test = page_cycler.PageCycler
-  page_set = 'page_sets/typical_25.json'
+  page_set = 'page_sets/typical_25.py'
   options = {'pageset_repeat': 10}
diff --git a/tools/perf/benchmarks/pica.py b/tools/perf/benchmarks/pica.py
index 9dfb752..98b316e 100644
--- a/tools/perf/benchmarks/pica.py
+++ b/tools/perf/benchmarks/pica.py
@@ -18,4 +18,4 @@
 
 class Pica(test.Test):
   test = _PicaMeasurement
-  page_set = 'page_sets/pica.json'
+  page_set = 'page_sets/pica.py'
diff --git a/tools/perf/benchmarks/rasterize_and_record.py b/tools/perf/benchmarks/rasterize_and_record.py
deleted file mode 100644
index 55305c9..0000000
--- a/tools/perf/benchmarks/rasterize_and_record.py
+++ /dev/null
@@ -1,53 +0,0 @@
-# Copyright 2013 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.
-
-from telemetry import test
-
-from benchmarks import silk_flags
-from measurements import rasterize_and_record
-
-
-# RasterizeAndRecord disabled on linux because no raster times are reported and
-# on mac because Chrome DCHECKS.
-# TODO: Re-enable when unittests are happy on linux and mac: crbug.com/350684.
-
-@test.Disabled('linux', 'mac')
-class RasterizeAndRecordTop25(test.Test):
-  """Measures rasterize and record performance on the top 25 web pages.
-
-  http://www.chromium.org/developers/design-documents/rendering-benchmarks"""
-  test = rasterize_and_record.RasterizeAndRecord
-  page_set = 'page_sets/top_25.json'
-
-
-@test.Disabled('linux', 'mac')
-class RasterizeAndRecordKeyMobileSites(test.Test):
-  """Measures rasterize and record performance on the key mobile sites.
-
-  http://www.chromium.org/developers/design-documents/rendering-benchmarks"""
-  test = rasterize_and_record.RasterizeAndRecord
-  page_set = 'page_sets/key_mobile_sites.py'
-
-
-@test.Disabled('linux', 'mac')
-class RasterizeAndRecordSilk(test.Test):
-  """Measures rasterize and record performance on the silk sites.
-
-  http://www.chromium.org/developers/design-documents/rendering-benchmarks"""
-  test = rasterize_and_record.RasterizeAndRecord
-  page_set = 'page_sets/key_silk_cases.py'
-
-
-@test.Disabled('linux', 'mac')
-class RasterizeAndRecordFastPathSilk(test.Test):
-  """Measures rasterize and record performance on the silk sites.
-
-  Uses bleeding edge rendering fast paths.
-
-  http://www.chromium.org/developers/design-documents/rendering-benchmarks"""
-  tag = 'fast_path'
-  test = rasterize_and_record.RasterizeAndRecord
-  page_set = 'page_sets/key_silk_cases.py'
-  def CustomizeBrowserOptions(self, options):
-    silk_flags.CustomizeBrowserOptionsForFastPath(options)
diff --git a/tools/perf/benchmarks/rasterize_and_record_micro.py b/tools/perf/benchmarks/rasterize_and_record_micro.py
index 07a8951..9d02b8c 100644
--- a/tools/perf/benchmarks/rasterize_and_record_micro.py
+++ b/tools/perf/benchmarks/rasterize_and_record_micro.py
@@ -7,20 +7,14 @@
 from telemetry import test
 
 
-# RasterizeAndRecord disabled on mac because Chrome DCHECKS.
-# TODO: Re-enable when unittests are happy: crbug.com/350684.
-# TODO(skyostil): Re-enable on windows (crbug.com/360666).
-
-@test.Disabled
 class RasterizeAndRecordMicroTop25(test.Test):
   """Measures rasterize and record performance on the top 25 web pages.
 
   http://www.chromium.org/developers/design-documents/rendering-benchmarks"""
   test = rasterize_and_record_micro.RasterizeAndRecordMicro
-  page_set = 'page_sets/top_25.json'
+  page_set = 'page_sets/top_25.py'
 
 
-@test.Disabled('mac')
 class RasterizeAndRecordMicroKeyMobileSites(test.Test):
   """Measures rasterize and record performance on the key mobile sites.
 
@@ -29,7 +23,6 @@
   page_set = 'page_sets/key_mobile_sites.py'
 
 
-@test.Disabled('mac')
 class RasterizeAndRecordMicroKeySilkCases(test.Test):
   """Measures rasterize and record performance on the silk sites.
 
@@ -38,7 +31,6 @@
   page_set = 'page_sets/key_silk_cases.py'
 
 
-@test.Disabled('mac')
 class RasterizeAndRecordMicroFastPathKeySilkCases(test.Test):
   """Measures rasterize and record performance on the silk sites.
 
diff --git a/tools/perf/benchmarks/session_restore.py b/tools/perf/benchmarks/session_restore.py
index e4bc98e..a5f2a8c 100644
--- a/tools/perf/benchmarks/session_restore.py
+++ b/tools/perf/benchmarks/session_restore.py
@@ -11,7 +11,7 @@
 class SessionRestoreColdTypical25(test.Test):
   tag = 'cold'
   test = session_restore.SessionRestore
-  page_set = 'page_sets/typical_25.json'
+  page_set = 'page_sets/typical_25.py'
   options = {'cold': True,
              'pageset_repeat': 5}
 
@@ -19,6 +19,6 @@
 class SessionRestoreWarmTypical25(test.Test):
   tag = 'warm'
   test = session_restore.SessionRestore
-  page_set = 'page_sets/typical_25.json'
+  page_set = 'page_sets/typical_25.py'
   options = {'warm': True,
              'pageset_repeat': 20}
diff --git a/tools/perf/benchmarks/session_restore_with_url.py b/tools/perf/benchmarks/session_restore_with_url.py
index 26ddf89..d4914e7 100644
--- a/tools/perf/benchmarks/session_restore_with_url.py
+++ b/tools/perf/benchmarks/session_restore_with_url.py
@@ -10,7 +10,7 @@
   """Measure Chrome cold session restore with startup URLs."""
   tag = 'cold'
   test = session_restore_with_url.SessionRestoreWithUrl
-  page_set = 'page_sets/startup_pages.json'
+  page_set = 'page_sets/startup_pages.py'
   options = {'cold': True,
              'pageset_repeat': 5}
 
@@ -18,7 +18,7 @@
   """Measure Chrome warm session restore with startup URLs."""
   tag = 'warm'
   test = session_restore_with_url.SessionRestoreWithUrl
-  page_set = 'page_sets/startup_pages.json'
+  page_set = 'page_sets/startup_pages.py'
   options = {'warm': True,
              'pageset_repeat': 10}
 
diff --git a/tools/perf/benchmarks/smoothness.py b/tools/perf/benchmarks/smoothness.py
index f0cc1dd..f0e2ed7 100644
--- a/tools/perf/benchmarks/smoothness.py
+++ b/tools/perf/benchmarks/smoothness.py
@@ -12,7 +12,7 @@
 
   http://www.chromium.org/developers/design-documents/rendering-benchmarks"""
   test = smoothness.Smoothness
-  page_set = 'page_sets/top_25.json'
+  page_set = 'page_sets/top_25.py'
 
 
 @test.Disabled('mac')
@@ -28,7 +28,7 @@
 
 class SmoothnessMaps(test.Test):
   test = smoothness.Smoothness
-  page_set = 'page_sets/maps.json'
+  page_set = 'page_sets/maps.py'
 
 
 class SmoothnessKeyMobileSites(test.Test):
@@ -69,7 +69,7 @@
   """
   tag = 'gpu_rasterization'
   test = smoothness.Smoothness
-  page_set = 'page_sets/top_25.json'
+  page_set = 'page_sets/top_25.py'
   def CustomizeBrowserOptions(self, options):
     options.AppendExtraBrowserArgs('--enable-threaded-compositing')
     options.AppendExtraBrowserArgs('--force-compositing-mode')
diff --git a/tools/perf/benchmarks/start_with_url.py b/tools/perf/benchmarks/start_with_url.py
index 9a7a5e1..ed726fc 100644
--- a/tools/perf/benchmarks/start_with_url.py
+++ b/tools/perf/benchmarks/start_with_url.py
@@ -11,7 +11,7 @@
   """Measure time to start Chrome cold with startup URLs"""
   tag = 'cold'
   test = startup.StartWithUrl
-  page_set = 'page_sets/startup_pages.json'
+  page_set = 'page_sets/startup_pages.py'
   options = {'cold': True,
              'pageset_repeat': 5}
 
@@ -19,7 +19,7 @@
   """Measure time to start Chrome warm with startup URLs"""
   tag = 'warm'
   test = startup.StartWithUrl
-  page_set = 'page_sets/startup_pages.json'
+  page_set = 'page_sets/startup_pages.py'
   options = {'warm': True,
              'pageset_repeat': 10}
 
diff --git a/tools/perf/benchmarks/tab_switching.py b/tools/perf/benchmarks/tab_switching.py
index 132cd24..d04cafe 100644
--- a/tools/perf/benchmarks/tab_switching.py
+++ b/tools/perf/benchmarks/tab_switching.py
@@ -13,7 +13,7 @@
 
 class TabSwitchingFiveBlankTabs(test.Test):
   test = tab_switching.TabSwitching
-  page_set = 'page_sets/five_blank_pages.json'
+  page_set = 'page_sets/five_blank_pages.py'
   options = {'pageset_repeat': 10}
 
 class TabSwitchingToughEnergyCases(test.Test):
diff --git a/tools/perf/benchmarks/webrtc.py b/tools/perf/benchmarks/webrtc.py
index c5f547d..4a92e9a 100644
--- a/tools/perf/benchmarks/webrtc.py
+++ b/tools/perf/benchmarks/webrtc.py
@@ -9,4 +9,4 @@
 class WebRTC(test.Test):
   """Obtains WebRTC metrics for a real-time video tests."""
   test = webrtc.WebRTC
-  page_set = 'page_sets/webrtc_cases.json'
+  page_set = 'page_sets/webrtc_cases.py'
diff --git a/tools/perf/measurements/loading_measurement_analyzer.py b/tools/perf/measurements/loading_measurement_analyzer.py
index 1d2b183..37d97b3 100755
--- a/tools/perf/measurements/loading_measurement_analyzer.py
+++ b/tools/perf/measurements/loading_measurement_analyzer.py
@@ -8,7 +8,7 @@
 Example usage:
 $ tools/perf/run_measurement --browser=release \
     --output-format=csv --output=/path/to/loading_measurement_output.csv \
-    loading_measurement tools/perf/page_sets/top_1m.json
+    loading_measurement tools/perf/page_sets/top_1m.py
 $ tools/perf/measurements/loading_measurement_analyzer.py \
     --num-slowest-urls=100 --rank-csv-file=/path/to/top-1m.csv \
     /path/to/loading_measurement_output.csv
diff --git a/tools/perf/measurements/loading_trace.py b/tools/perf/measurements/loading_trace.py
index 61613e7..7ada1db 100644
--- a/tools/perf/measurements/loading_trace.py
+++ b/tools/perf/measurements/loading_trace.py
@@ -37,7 +37,7 @@
     timeline_metric.AddResults(
       self._timeline_controller.model,
       renderer_thread,
-      record,
+      [record],
       results)
 
   def CleanUpAfterPage(self, _, tab):
diff --git a/tools/perf/measurements/measurement_unittest.py b/tools/perf/measurements/measurement_unittest.py
index fe40a90..8386be3 100644
--- a/tools/perf/measurements/measurement_unittest.py
+++ b/tools/perf/measurements/measurement_unittest.py
@@ -15,7 +15,7 @@
 class MeasurementUnitTest(unittest.TestCase):
 
   # TODO(achuith): Fix crbug.com/351114.
-  @test.Disabled('chromeos')
+  @test.Disabled('android', 'chromeos')
   def testMeasurementSmoke(self):
     # Run all Measurements against the first Page in the PageSet of the first
     # Benchmark that uses them.
diff --git a/tools/perf/measurements/rasterize_and_record.py b/tools/perf/measurements/rasterize_and_record.py
deleted file mode 100644
index b1e1196..0000000
--- a/tools/perf/measurements/rasterize_and_record.py
+++ /dev/null
@@ -1,127 +0,0 @@
-# Copyright (c) 2012 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 time
-
-from metrics import rendering_stats
-from telemetry.page import page_measurement
-from telemetry.page import page_test
-from telemetry.page.perf_tests_helper import FlattenList
-import telemetry.core.timeline.bounds as timeline_bounds
-from telemetry.core.timeline.model import TimelineModel
-from telemetry.core.timeline.model import MarkerMismatchError
-from telemetry.core.timeline.model import MarkerOverlapError
-
-TIMELINE_MARKER = 'RasterizeAndRecord'
-
-
-class RasterizeAndRecord(page_measurement.PageMeasurement):
-  def __init__(self):
-    super(RasterizeAndRecord, self).__init__('', True)
-    self._metrics = None
-    self._compositing_features_enabled = False
-
-  @classmethod
-  def AddCommandLineArgs(cls, parser):
-    parser.add_option('--raster-record-repeat', type='int',
-                      default=20,
-                      help='Repetitions in raster and record loops.'
-                      'Higher values reduce variance, but can cause'
-                      'instability (timeouts, event buffer overflows, etc.).')
-    parser.add_option('--start-wait-time', type='float',
-                      default=5,
-                      help='Wait time before the benchmark is started '
-                      '(must be long enought to load all content)')
-    parser.add_option('--stop-wait-time', type='float',
-                      default=15,
-                      help='Wait time before measurement is taken '
-                      '(must be long enough to render one frame)')
-
-  def CustomizeBrowserOptions(self, options):
-    # Run each raster task N times. This allows us to report the time for the
-    # best run, effectively excluding cache effects and time when the thread is
-    # de-scheduled.
-    options.AppendExtraBrowserArgs([
-        '--enable-gpu-benchmarking',
-        '--slow-down-raster-scale-factor=%d' % options.raster_record_repeat,
-        # Enable impl-side-painting. Current version of benchmark only works for
-        # this mode.
-        '--enable-impl-side-painting',
-        '--force-compositing-mode',
-        '--enable-threaded-compositing'
-    ])
-
-  def DidStartBrowser(self, browser):
-    # Check if the we actually have threaded forced compositing enabled.
-    system_info = browser.GetSystemInfo()
-    if (system_info.gpu.feature_status
-        and system_info.gpu.feature_status.get(
-            'compositing', None) == 'enabled_force_threaded'):
-      self._compositing_features_enabled = True
-
-  def MeasurePage(self, page, tab, results):
-    if not self._compositing_features_enabled:
-      raise page_test.TestNotSupportedOnPlatformFailure(
-          'Compositing feature status unknown or not '+
-          'forced and threaded. Skipping measurement.')
-
-    # Rasterize only what's visible.
-    tab.ExecuteJavaScript(
-        'chrome.gpuBenchmarking.setRasterizeOnlyVisibleContent();')
-
-    # Wait until the page has loaded and come to a somewhat steady state.
-    # Needs to be adjusted for every device (~2 seconds for workstation).
-    time.sleep(self.options.start_wait_time)
-
-    # Render one frame before we start gathering a trace. On some pages, the
-    # first frame requested has more variance in the number of pixels
-    # rasterized.
-    tab.ExecuteJavaScript(
-        'window.__rafFired = false;'
-        'window.webkitRequestAnimationFrame(function() {'
-          'chrome.gpuBenchmarking.setNeedsDisplayOnAllLayers();'
-          'window.__rafFired  = true;'
-        '});')
-
-    time.sleep(self.options.stop_wait_time)
-    tab.browser.StartTracing('webkit.console,benchmark', 60)
-
-    tab.ExecuteJavaScript(
-        'window.__rafFired = false;'
-        'window.webkitRequestAnimationFrame(function() {'
-          'chrome.gpuBenchmarking.setNeedsDisplayOnAllLayers();'
-          'console.time("' + TIMELINE_MARKER + '");'
-          'window.__rafFired  = true;'
-        '});')
-    # Wait until the frame was drawn.
-    # Needs to be adjusted for every device and for different
-    # raster_record_repeat counts.
-    # TODO(ernstm): replace by call-back.
-    time.sleep(self.options.stop_wait_time)
-    tab.ExecuteJavaScript(
-        'console.timeEnd("' + TIMELINE_MARKER + '")')
-
-    tracing_timeline_data = tab.browser.StopTracing()
-    timeline = TimelineModel(timeline_data=tracing_timeline_data)
-    try:
-      timeline_markers = timeline.FindTimelineMarkers(TIMELINE_MARKER)
-    except (MarkerMismatchError, MarkerOverlapError) as e:
-      raise page_measurement.MeasurementFailure(str(e))
-    timeline_ranges = [ timeline_bounds.Bounds.CreateFromEvent(marker)
-                        for marker in timeline_markers ]
-    renderer_process = timeline.GetRendererProcessFromTab(tab)
-
-    stats = rendering_stats.RenderingStats(
-        renderer_process, timeline.browser_process, timeline_ranges)
-
-    results.Add('rasterize_time', 'ms', max(FlattenList(stats.rasterize_times)))
-    results.Add('record_time', 'ms', max(FlattenList(stats.record_times)))
-    results.Add('rasterized_pixels', 'pixels',
-                max(FlattenList(stats.rasterized_pixel_counts)))
-    results.Add('recorded_pixels', 'pixels',
-                max(FlattenList(stats.recorded_pixel_counts)))
-
-  def CleanUpAfterPage(self, page, tab):
-    if tab.browser.is_tracing_running:
-      tab.browser.StopTracing()
diff --git a/tools/perf/measurements/rasterize_and_record_micro.py b/tools/perf/measurements/rasterize_and_record_micro.py
index 373eba6..aa0bfd0 100644
--- a/tools/perf/measurements/rasterize_and_record_micro.py
+++ b/tools/perf/measurements/rasterize_and_record_micro.py
@@ -12,7 +12,6 @@
 class RasterizeAndRecordMicro(page_measurement.PageMeasurement):
   def __init__(self):
     super(RasterizeAndRecordMicro, self).__init__('', True)
-    self._compositing_features_enabled = False
     self._chrome_branch_number = None
 
   @classmethod
@@ -56,19 +55,7 @@
           'rasterize_and_record_micro requires Chrome branch 1713 '
           'or later. Skipping measurement.')
 
-    # Check if the we actually have threaded forced compositing enabled.
-    system_info = browser.GetSystemInfo()
-    if (system_info.gpu.feature_status
-        and system_info.gpu.feature_status.get(
-            'compositing', None) == 'enabled_force_threaded'):
-      self._compositing_features_enabled = True
-
   def MeasurePage(self, page, tab, results):
-    if not self._compositing_features_enabled:
-      raise page_test.TestNotSupportedOnPlatformFailure(
-          'Compositing feature status unknown or not '+
-          'forced and threaded. Skipping measurement.')
-
     try:
       tab.WaitForJavaScriptExpression("document.readyState == 'complete'", 10)
     except TimeoutException:
diff --git a/tools/perf/measurements/rasterize_and_record_micro_unittest.py b/tools/perf/measurements/rasterize_and_record_micro_unittest.py
index 8aa4038..b30e80d 100644
--- a/tools/perf/measurements/rasterize_and_record_micro_unittest.py
+++ b/tools/perf/measurements/rasterize_and_record_micro_unittest.py
@@ -5,7 +5,6 @@
 import logging
 
 from measurements import rasterize_and_record_micro
-from telemetry import test
 from telemetry.core import wpr_modes
 from telemetry.page import page_measurement_unittest_base
 from telemetry.page import page_test
@@ -29,7 +28,6 @@
     self._options.start_wait_time = 0.0
     self._options.report_detailed_results = True
 
-  @test.Disabled
   def testRasterizeAndRecordMicro(self):
     ps = self.CreatePageSetFromFileInUnittestDataDir('blank.html')
     measurement = rasterize_and_record_micro.RasterizeAndRecordMicro()
diff --git a/tools/perf/measurements/rasterize_and_record_unittest.py b/tools/perf/measurements/rasterize_and_record_unittest.py
deleted file mode 100644
index 9a7afb8..0000000
--- a/tools/perf/measurements/rasterize_and_record_unittest.py
+++ /dev/null
@@ -1,61 +0,0 @@
-# Copyright 2013 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 logging
-
-from measurements import rasterize_and_record
-from telemetry import test
-from telemetry.core import wpr_modes
-from telemetry.page import page_measurement_unittest_base
-from telemetry.page import page_test
-from telemetry.unittest import options_for_unittests
-
-
-class RasterizeAndRecordUnitTest(
-      page_measurement_unittest_base.PageMeasurementUnitTestBase):
-  """Smoke test for rasterize_and_record measurement
-
-     Runs rasterize_and_record measurement on a simple page and verifies that
-     all metrics were added to the results. The test is purely functional,
-     i.e. it only checks if the metrics are present and non-zero.
-  """
-
-  def setUp(self):
-    self._options = options_for_unittests.GetCopy()
-    self._options.browser_options.wpr_mode = wpr_modes.WPR_OFF
-    self._options.raster_record_repeat = 1
-    self._options.start_wait_time = 0.0
-    self._options.stop_wait_time = 2.0
-
-  @test.Disabled
-  def testRasterizeAndRecord(self):
-    ps = self.CreatePageSetFromFileInUnittestDataDir('blank.html')
-    measurement = rasterize_and_record.RasterizeAndRecord()
-    try:
-      results = self.RunMeasurement(measurement, ps, options=self._options)
-    except page_test.TestNotSupportedOnPlatformFailure as failure:
-      logging.warning(str(failure))
-      return
-    self.assertEquals(0, len(results.failures))
-
-    rasterize_time = results.FindAllPageSpecificValuesNamed('rasterize_time')
-    self.assertEquals(len(rasterize_time), 1)
-    self.assertGreater(rasterize_time[0].GetRepresentativeNumber(), 0)
-
-    record_time = results.FindAllPageSpecificValuesNamed('record_time')
-    self.assertEquals(len(record_time), 1)
-    self.assertGreater(record_time[0].GetRepresentativeNumber(), 0)
-
-    rasterized_pixels = results.FindAllPageSpecificValuesNamed(
-        'rasterized_pixels')
-    self.assertEquals(len(rasterized_pixels), 1)
-    self.assertGreater(rasterized_pixels[0].GetRepresentativeNumber(), 0)
-
-    recorded_pixels = results.FindAllPageSpecificValuesNamed('recorded_pixels')
-    self.assertEquals(len(recorded_pixels), 1)
-    self.assertGreater(recorded_pixels[0].GetRepresentativeNumber(), 0)
-
-  def testCleanUpTrace(self):
-    self.TestTracingCleanedUp(rasterize_and_record.RasterizeAndRecord,
-                              self._options)
diff --git a/tools/perf/measurements/repaint_unittest.py b/tools/perf/measurements/repaint_unittest.py
index 69f0520..85a5313 100644
--- a/tools/perf/measurements/repaint_unittest.py
+++ b/tools/perf/measurements/repaint_unittest.py
@@ -3,6 +3,7 @@
 # found in the LICENSE file.
 
 from measurements import repaint
+from telemetry import test
 from telemetry.core import wpr_modes
 from telemetry.page import page_measurement_unittest_base
 from telemetry.unittest import options_for_unittests
@@ -21,6 +22,7 @@
     self._options = options_for_unittests.GetCopy()
     self._options.browser_options.wpr_mode = wpr_modes.WPR_OFF
 
+  @test.Disabled('android')
   def testRepaint(self):
     ps = self.CreatePageSetFromFileInUnittestDataDir('blank.html')
     measurement = repaint.Repaint()
@@ -43,5 +45,6 @@
     self.assertEquals(len(mostly_smooth), 1)
     self.assertGreaterEqual(mostly_smooth[0].GetRepresentativeNumber(), 0)
 
+  @test.Disabled('android')
   def testCleanUpTrace(self):
     self.TestTracingCleanedUp(repaint.Repaint, self._options)
diff --git a/tools/perf/measurements/session_restore.py b/tools/perf/measurements/session_restore.py
index 352aded..fffabcd 100644
--- a/tools/perf/measurements/session_restore.py
+++ b/tools/perf/measurements/session_restore.py
@@ -1,6 +1,7 @@
 # Copyright 2013 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 collections
 
 from measurements import startup
 from metrics import cpu
@@ -35,15 +36,18 @@
     pass
 
   def ValidatePageSet(self, page_set):
-    # Reject any pageset that contains more than one WPR archive.
-    wpr_archives = {}
+    wpr_archive_names_to_page_urls = collections.defaultdict(list)
+    # Construct the map from pages' wpr archive names to pages' urls.
     for page in page_set:
-      if not page.is_local:
-        wpr_archives[page_set.WprFilePathForPage(page)] = True
+      if page.is_local:
+        continue
+      wpr_archive_name = page_set.WprFilePathForPage(page)
+      wpr_archive_names_to_page_urls[wpr_archive_name].append(page.url)
 
-    if len(wpr_archives.keys()) > 1:
+    # Reject any pageset that contains more than one WPR archive.
+    if len(wpr_archive_names_to_page_urls.keys()) > 1:
       raise Exception("Invalid pageset: more than 1 WPR archive found.: " +
-          ', '.join(wpr_archives.keys()))
+          repr(wpr_archive_names_to_page_urls))
 
   def DidStartBrowser(self, browser):
     self._cpu_metric = cpu.CpuMetric(browser)
@@ -58,4 +62,4 @@
 
     startup_metric.StartupMetric().AddResults(tab, results)
 
-    # TODO(jeremy): Measure time to load - first, last and frontmost tab here.
\ No newline at end of file
+    # TODO(jeremy): Measure time to load - first, last and frontmost tab here.
diff --git a/tools/perf/measurements/skpicture_printer_unittest.py b/tools/perf/measurements/skpicture_printer_unittest.py
index 6530ccc..cc762b8 100644
--- a/tools/perf/measurements/skpicture_printer_unittest.py
+++ b/tools/perf/measurements/skpicture_printer_unittest.py
@@ -1,10 +1,12 @@
 # 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 shutil
 import tempfile
 
 from measurements import skpicture_printer
+from telemetry import test
 from telemetry.page import page_measurement_unittest_base
 from telemetry.unittest import options_for_unittests
 
@@ -18,6 +20,7 @@
   def tearDown(self):
     shutil.rmtree(self._options.skp_outdir)
 
+  @test.Disabled('android')
   def testSkpicturePrinter(self):
     ps = self.CreatePageSetFromFileInUnittestDataDir('blank.html')
     measurement = skpicture_printer.SkpicturePrinter()
diff --git a/tools/perf/measurements/smooth_gesture_util.py b/tools/perf/measurements/smooth_gesture_util.py
new file mode 100644
index 0000000..ebd7fbd
--- /dev/null
+++ b/tools/perf/measurements/smooth_gesture_util.py
@@ -0,0 +1,32 @@
+# 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 copy
+
+from telemetry.web_perf import timeline_interaction_record as tir_module
+
+
+def GetAdjustedInteractionIfContainGesture(timeline, interaction_record):
+  """ Returns a new interaction record if interaction_record contains geture
+  whose time range that overlaps with interaction_record's range. If not,
+  returns a clone of original interaction_record.
+  The synthetic gesture controller inserts a trace marker to precisely
+  demarcate when the gesture was running. We check for overlap, not inclusion,
+  because gesture_actions can start/end slightly outside the telemetry markers
+  on Windows. This problem is probably caused by a race condition between
+  the browser and renderer process submitting the trace events for the
+  markers.
+  """
+  gesture_events = [
+    ev for ev
+    in timeline.GetAllEventsOfName('SyntheticGestureController::running', True)
+    if ev.start <= interaction_record.end and
+    ev.end >= interaction_record.start]
+  if len(gesture_events) == 0:
+    return copy.copy(interaction_record)
+  if len(gesture_events) > 1:
+    raise Exception('More than one possible synthetic gesture marker found in '
+                    'interaction_record %s.' % interaction_record.logical_name)
+  return tir_module.TimelineInteractionRecord(interaction_record.logical_name,
+                                              gesture_events[0].start,
+                                              gesture_events[0].end)
diff --git a/tools/perf/measurements/smooth_gesture_util_unittest.py b/tools/perf/measurements/smooth_gesture_util_unittest.py
new file mode 100644
index 0000000..a825dce
--- /dev/null
+++ b/tools/perf/measurements/smooth_gesture_util_unittest.py
@@ -0,0 +1,59 @@
+# 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 unittest
+
+from telemetry.core.timeline import model as model_module
+from telemetry.web_perf import timeline_interaction_record as tir_module
+from measurements import smooth_gesture_util as sg_util
+
+class SmoothGestureUtilTest(unittest.TestCase):
+  def testGetAdjustedInteractionIfContainGesture(self):
+    model = model_module.TimelineModel()
+    renderer_main = model.GetOrCreateProcess(1).GetOrCreateThread(2)
+    renderer_main.name = 'CrRendererMain'
+
+    #      [          X          ]                   [   Y  ]
+    #          [   record_1 ]
+    #  [  record_2 ]          [ record_3 ]
+    #  [           record_4              ]
+    #                                [ record_5 ]
+    renderer_main.BeginSlice('X', 'SyntheticGestureController::running', 10, 0)
+    renderer_main.EndSlice(30, 30)
+    renderer_main.BeginSlice('Y', 'SyntheticGestureController::running', 60, 0)
+    renderer_main.EndSlice(80, 80)
+
+    model.FinalizeImport(shift_world_to_zero=False)
+
+    record_1 = tir_module.TimelineInteractionRecord('included', 15, 25)
+    record_2 = tir_module.TimelineInteractionRecord('overlapped_left', 5, 25)
+    record_3 = tir_module.TimelineInteractionRecord('overlapped_right', 25, 35)
+    record_4 = tir_module.TimelineInteractionRecord('containing', 5, 35)
+    record_5 = tir_module.TimelineInteractionRecord('non_overlapped', 35, 45)
+
+    adjusted_record_1 = sg_util.GetAdjustedInteractionIfContainGesture(
+      model, record_1)
+    self.assertEquals(adjusted_record_1.start, 10)
+    self.assertEquals(adjusted_record_1.end, 30)
+    self.assertTrue(adjusted_record_1 is not record_1)
+
+    adjusted_record_2 = sg_util.GetAdjustedInteractionIfContainGesture(
+      model, record_2)
+    self.assertEquals(adjusted_record_2.start, 10)
+    self.assertEquals(adjusted_record_2.end, 30)
+
+    adjusted_record_3 = sg_util.GetAdjustedInteractionIfContainGesture(
+      model, record_3)
+    self.assertEquals(adjusted_record_3.start, 10)
+    self.assertEquals(adjusted_record_3.end, 30)
+
+    adjusted_record_4 = sg_util.GetAdjustedInteractionIfContainGesture(
+      model, record_4)
+    self.assertEquals(adjusted_record_4.start, 10)
+    self.assertEquals(adjusted_record_4.end, 30)
+
+    adjusted_record_5 = sg_util.GetAdjustedInteractionIfContainGesture(
+      model, record_5)
+    self.assertEquals(adjusted_record_5.start, 35)
+    self.assertEquals(adjusted_record_5.end, 45)
+    self.assertTrue(adjusted_record_5 is not record_5)
diff --git a/tools/perf/measurements/smoothness_controller.py b/tools/perf/measurements/smoothness_controller.py
index 1626a7b..c80834f 100644
--- a/tools/perf/measurements/smoothness_controller.py
+++ b/tools/perf/measurements/smoothness_controller.py
@@ -2,6 +2,7 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
+from measurements import smooth_gesture_util
 from metrics import smoothness
 from telemetry.core.timeline.model import TimelineModel
 from telemetry.page import page_measurement
@@ -9,10 +10,13 @@
 from telemetry.web_perf import timeline_interaction_record as tir_module
 
 
+RUN_SMOOTH_ACTIONS = 'RunSmoothAllActions'
+
+
 class MissingDisplayFrameRateError(page_measurement.MeasurementFailure):
   def __init__(self, name):
     super(MissingDisplayFrameRateError, self).__init__(
-        'Missing display frame rate metrics: ' + name)
+      'Missing display frame rate metrics: ' + name)
 
 class SmoothnessController(object):
   def __init__(self):
@@ -26,12 +30,12 @@
       tab.browser.platform.StartRawDisplayFrameRateMeasurement()
     # Start the smooth marker for all smooth actions.
     runner = action_runner.ActionRunner(None, tab)
-    runner.BeginInteraction('RunSmoothActions', [tir_module.IS_SMOOTH])
+    runner.BeginInteraction(RUN_SMOOTH_ACTIONS, [tir_module.IS_SMOOTH])
 
   def Stop(self, tab):
     # End the smooth marker for all smooth actions.
     runner = action_runner.ActionRunner(None, tab)
-    runner.EndInteraction('RunSmoothActions', [tir_module.IS_SMOOTH])
+    runner.EndInteraction(RUN_SMOOTH_ACTIONS, [tir_module.IS_SMOOTH])
     # Stop tracing for smoothness metric.
     if tab.browser.platform.IsRawDisplayFrameRateSupported():
       tab.browser.platform.StopRawDisplayFrameRateMeasurement()
@@ -40,22 +44,42 @@
 
   def AddResults(self, tab, results):
     # Add results of smoothness metric. This computes the smoothness metric for
-    # the time range between the first action starts and the last action ends.
-    # To get the measurement for each action, use
-    # measurement.TimelineBasedMeasurement.
+    # the time ranges of gestures, if there is at least one, else the the time
+    # ranges from the first action to the last action.
+
+    renderer_thread = self._timeline_model.GetRendererThreadFromTab(tab)
+    run_smooth_actions_record = None
+    smooth_records = []
+    for event in renderer_thread.async_slices:
+      if not tir_module.IsTimelineInteractionRecord(event.name):
+        continue
+      r = tir_module.TimelineInteractionRecord.FromEvent(event)
+      if r.logical_name == RUN_SMOOTH_ACTIONS:
+        assert run_smooth_actions_record is None, (
+          'SmoothnessController cannot issue more than 1 %s record' %
+          RUN_SMOOTH_ACTIONS)
+        run_smooth_actions_record = r
+      elif r.is_smooth:
+        smooth_records.append(
+          smooth_gesture_util.GetAdjustedInteractionIfContainGesture(
+            self._timeline_model, r))
+
+    # If there is no other smooth records, we make measurements on time range
+    # marked smoothness_controller itself.
+    # TODO(nednguyen): when crbug.com/239179 is marked fixed, makes sure that
+    # page sets are responsible for issueing the markers themselves.
+    if len(smooth_records) == 0:
+      assert run_smooth_actions_record, (
+        'SmoothnessController fails to issue markers for the whole '
+        'interaction.')
+      smooth_records = [run_smooth_actions_record]
+
     # Create an interaction_record for this legacy measurement. Since we don't
     # wrap the results that is sent to smoothnes metric, the logical_name will
     # not be used.
-    renderer_thread = self._timeline_model.GetRendererThreadFromTab(tab)
-    records = [tir_module.TimelineInteractionRecord.FromEvent(event) for
-               event in renderer_thread.async_slices
-               if tir_module.IsTimelineInteractionRecord(event.name)]
-    assert len(records) == 1
     smoothness_metric = smoothness.SmoothnessMetric()
-    smoothness_metric.AddResults(self._timeline_model,
-                                       renderer_thread,
-                                       records[0],
-                                       results)
+    smoothness_metric.AddResults(
+      self._timeline_model, renderer_thread, smooth_records, results)
     if tab.browser.platform.IsRawDisplayFrameRateSupported():
       for r in tab.browser.platform.GetRawDisplayFrameRateMeasurements():
         if r.value is None:
diff --git a/tools/perf/measurements/smoothness_unittest.py b/tools/perf/measurements/smoothness_unittest.py
index d49ee1f..a335486 100644
--- a/tools/perf/measurements/smoothness_unittest.py
+++ b/tools/perf/measurements/smoothness_unittest.py
@@ -108,5 +108,16 @@
       self.assertGreater(
           mean_touch_scroll_latency[0].GetRepresentativeNumber(), 0)
 
+  def testSmoothnessForPageWithNoGesture(self):
+    ps = self.CreatePageSetFromFileInUnittestDataDir('animated_page.html')
+    setattr(ps.pages[0], 'RunSmoothness', {'action': 'wait', 'seconds' : 1})
+    measurement = smoothness.Smoothness()
+    results = self.RunMeasurement(measurement, ps, options=self._options)
+    self.assertEquals(0, len(results.failures))
+
+    mostly_smooth = results.FindAllPageSpecificValuesNamed('mostly_smooth')
+    self.assertEquals(len(mostly_smooth), 1)
+    self.assertGreaterEqual(mostly_smooth[0].GetRepresentativeNumber(), 0)
+
   def testCleanUpTrace(self):
     self.TestTracingCleanedUp(smoothness.Smoothness, self._options)
diff --git a/tools/perf/measurements/thread_times.py b/tools/perf/measurements/thread_times.py
index 9a76dc5..3f106fc 100644
--- a/tools/perf/measurements/thread_times.py
+++ b/tools/perf/measurements/thread_times.py
@@ -39,14 +39,12 @@
     metric = timeline.ThreadTimesTimelineMetric()
     renderer_thread = \
         self._timeline_controller.model.GetRendererThreadFromTab(tab)
-    assert len(self._timeline_controller.action_ranges) == 1
     if self.options.report_silk_results:
       metric.results_to_report = timeline.ReportSilkResults
     if self.options.report_silk_details:
       metric.details_to_report = timeline.ReportSilkDetails
     metric.AddResults(self._timeline_controller.model, renderer_thread,
-                      self._timeline_controller.interaction_record, results)
-
+                      self._timeline_controller.smooth_records, results)
 
   def CleanUpAfterPage(self, _, tab):
     self._timeline_controller.CleanUp(tab)
diff --git a/tools/perf/measurements/thread_times_unittest.py b/tools/perf/measurements/thread_times_unittest.py
index e893c67..132a8c4 100644
--- a/tools/perf/measurements/thread_times_unittest.py
+++ b/tools/perf/measurements/thread_times_unittest.py
@@ -1,11 +1,14 @@
 # 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.
+
 from measurements import thread_times
+from metrics import timeline
+from telemetry import test
 from telemetry.core import wpr_modes
 from telemetry.page import page_measurement_unittest_base
 from telemetry.unittest import options_for_unittests
-from metrics import timeline
+
 
 class ThreadTimesUnitTest(
       page_measurement_unittest_base.PageMeasurementUnitTestBase):
@@ -13,6 +16,7 @@
     self._options = options_for_unittests.GetCopy()
     self._options.browser_options.wpr_mode = wpr_modes.WPR_OFF
 
+  @test.Disabled('android')
   def testBasic(self):
     ps = self.CreatePageSetFromFileInUnittestDataDir('scrollable_page.html')
     measurement = thread_times.ThreadTimes()
@@ -25,5 +29,20 @@
       cpu_time = results.FindAllPageSpecificValuesNamed(cpu_time_name)
       self.assertEquals(len(cpu_time), 1)
 
+  def testBasicForPageWithNoGesture(self):
+    ps = self.CreatePageSetFromFileInUnittestDataDir('animated_page.html')
+    setattr(ps.pages[0], 'RunSmoothness', {'action': 'wait', 'seconds' : 1})
+
+    measurement = thread_times.ThreadTimes()
+    timeline_options = self._options
+    results = self.RunMeasurement(measurement, ps, options = timeline_options)
+    self.assertEquals(0, len(results.failures))
+
+    for category in timeline.TimelineThreadCategories.values():
+      cpu_time_name = timeline.ThreadCpuTimeResultName(category)
+      cpu_time = results.FindAllPageSpecificValuesNamed(cpu_time_name)
+      self.assertEquals(len(cpu_time), 1)
+
+
   def testCleanUpTrace(self):
     self.TestTracingCleanedUp(thread_times.ThreadTimes, self._options)
diff --git a/tools/perf/measurements/timeline_based_measurement.py b/tools/perf/measurements/timeline_based_measurement.py
index a4b596c..5194c38 100644
--- a/tools/perf/measurements/timeline_based_measurement.py
+++ b/tools/perf/measurements/timeline_based_measurement.py
@@ -64,7 +64,7 @@
       wrapped_results = _ResultsWrapper(results, interaction)
       for m in metrics:
         m.AddResults(self._model, self._renderer_thread,
-                     interaction, wrapped_results)
+                     [interaction], wrapped_results)
 
 
 class TimelineBasedMeasurement(page_measurement.PageMeasurement):
diff --git a/tools/perf/measurements/timeline_based_measurement_unittest.py b/tools/perf/measurements/timeline_based_measurement_unittest.py
index 55343da..66b6c17 100644
--- a/tools/perf/measurements/timeline_based_measurement_unittest.py
+++ b/tools/perf/measurements/timeline_based_measurement_unittest.py
@@ -56,13 +56,14 @@
     results = page_measurement_results.PageMeasurementResults()
     class FakeSmoothMetric(timeline_based_metric.TimelineBasedMetric):
       def AddResults(self, model, renderer_thread,
-                     interaction_record, results):
+                     interaction_records, results):
         results.Add('FakeSmoothMetric', 'ms', 1)
 
     class FakeLoadingMetric(timeline_based_metric.TimelineBasedMetric):
       def AddResults(self, model, renderer_thread,
-                     interaction_record, results):
-        assert interaction_record.logical_name == 'LogicalName2'
+                     interaction_records, results):
+        for r in interaction_records:
+          assert r.logical_name == 'LogicalName2'
         results.Add('FakeLoadingMetric', 'ms', 2)
 
     def CreateMetricsForTimelineInteractionRecord(interaction):
diff --git a/tools/perf/measurements/timeline_controller.py b/tools/perf/measurements/timeline_controller.py
index 414b0fc..1b8f2f1 100644
--- a/tools/perf/measurements/timeline_controller.py
+++ b/tools/perf/measurements/timeline_controller.py
@@ -1,6 +1,8 @@
 # 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.
+from measurements import smooth_gesture_util
+
 from telemetry.core.timeline.model import TimelineModel
 from telemetry.page.actions import action_runner
 from telemetry.web_perf import timeline_interaction_record as tir_module
@@ -16,6 +18,7 @@
                             "webkit.console,"
                             "trace_event_overhead")
 
+RUN_SMOOTH_ACTIONS = 'RunSmoothAllActions'
 
 class TimelineController(object):
   def __init__(self):
@@ -23,8 +26,7 @@
     self.trace_categories = DEFAULT_TRACE_CATEGORIES
     self._model = None
     self._renderer_process = None
-    self._action_ranges = []
-    self._interaction_record = None
+    self._smooth_records = []
 
   def Start(self, page, tab):
     """Starts gathering timeline data.
@@ -33,7 +35,6 @@
     # Resets these member variables incase this object is reused.
     self._model = None
     self._renderer_process = None
-    self._action_ranges = []
     if not tab.browser.supports_tracing:
       raise Exception('Not supported')
     if self.trace_categories:
@@ -44,24 +45,40 @@
     tab.browser.StartTracing(','.join(categories))
     # Start the smooth marker for all actions.
     runner = action_runner.ActionRunner(None, tab)
-    runner.BeginInteraction('RunActions', [tir_module.IS_SMOOTH])
+    runner.BeginInteraction(RUN_SMOOTH_ACTIONS, [tir_module.IS_SMOOTH])
 
   def Stop(self, tab):
     # End the smooth marker for all actions.
     runner = action_runner.ActionRunner(None, tab)
-    runner.EndInteraction('RunActions', [tir_module.IS_SMOOTH])
+    runner.EndInteraction(RUN_SMOOTH_ACTIONS, [tir_module.IS_SMOOTH])
     # Stop tracing.
     timeline_data = tab.browser.StopTracing()
     self._model = TimelineModel(timeline_data)
     self._renderer_process = self._model.GetRendererProcessFromTab(tab)
     renderer_thread = self.model.GetRendererThreadFromTab(tab)
-    records = [tir_module.TimelineInteractionRecord.FromEvent(event) for
-               event in renderer_thread.async_slices if
-               tir_module.IsTimelineInteractionRecord(event.name)]
-    self._action_ranges = [r.GetBounds() for r in records]
-    if records:
-      assert len(records) == 1
-      self._interaction_record = records[0]
+
+    run_smooth_actions_record = None
+    self._smooth_records = []
+    for event in renderer_thread.async_slices:
+      if not tir_module.IsTimelineInteractionRecord(event.name):
+        continue
+      r = tir_module.TimelineInteractionRecord.FromEvent(event)
+      if r.logical_name == RUN_SMOOTH_ACTIONS:
+        assert run_smooth_actions_record is None, (
+          'TimelineController cannot issue more than 1 %s record' %
+          RUN_SMOOTH_ACTIONS)
+        run_smooth_actions_record = r
+      elif r.is_smooth:
+        self._smooth_records.append(
+          smooth_gesture_util.GetAdjustedInteractionIfContainGesture(
+            self.model, r))
+
+    # If there is no other smooth records, we make measurements on time range
+    # marked by timeline_controller itself.
+    # TODO(nednguyen): when crbug.com/239179 is marked fixed, makes sure that
+    # page sets are responsible for issueing the markers themselves.
+    if len(self._smooth_records) == 0 and run_smooth_actions_record:
+      self._smooth_records = [run_smooth_actions_record]
 
 
   def CleanUp(self, tab):
@@ -77,9 +94,5 @@
     return self._renderer_process
 
   @property
-  def action_ranges(self):
-    return self._action_ranges
-
-  @property
-  def interaction_record(self):
-    return self._interaction_record
+  def smooth_records(self):
+    return self._smooth_records
diff --git a/tools/perf/metrics/chrome_proxy.js b/tools/perf/metrics/chrome_proxy.js
new file mode 100644
index 0000000..b79b19c
--- /dev/null
+++ b/tools/perf/metrics/chrome_proxy.js
@@ -0,0 +1,59 @@
+// 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.
+
+// This file contains common utilities to find chrome proxy related elements on
+// a page and collect info from them.
+
+(function() {
+  var PROXY_VIEW_ID = 'proxy-view-tab-content';
+  var PROXY_VIEW_EFFECTIVE_SETTINGS_ID = 'proxy-view-effective-settings';
+  var PROXY_VIEW_BAD_PROXIES_ID = 'proxy-view-bad-proxies-div';
+  var PROXY_VIEW_BAD_PROXIES_TBODY = 'proxy-view-bad-proxies-tbody';
+  var PRXOY_SETTINGS_PREFIX = 'Proxy server for HTTP: '
+  var PROXY_SETTINGS_SIGNATURE = 'proxy.googlezip.net:443, ' +
+    'compress.googlezip.net:80, direct://';
+
+  function getEffectiveProxySettings(doc) {
+    var settings = doc.getElementById(PROXY_VIEW_EFFECTIVE_SETTINGS_ID);
+    if (settings && settings.innerHTML &&
+      settings.innerHTML.indexOf(PRXOY_SETTINGS_PREFIX) == 0) {
+      return settings.innerHTML.substr(PRXOY_SETTINGS_PREFIX.length);
+    }
+    return "";
+  }
+
+  function getBadProxyList(doc) {
+    var bad_proxies = doc.getElementById(PROXY_VIEW_BAD_PROXIES_ID);
+    if (bad_proxies.hasAttribute('style') &&
+        ('cssText' in bad_proxies.style) &&
+        bad_proxies.style.cssText == 'display: none;') {
+          return null;
+        }
+    var tbody = doc.getElementById(PROXY_VIEW_BAD_PROXIES_TBODY);
+    results = [];
+    for (var r = 0, n = tbody.rows.length; r < n; r++) {
+      results[r] = {};
+      results[r].proxy = tbody.rows[r].cells[0].innerHTML;
+      timeSpan = tbody.rows[r].cells[1].getElementsByTagName('span')[0];
+      if (timeSpan.hasAttribute('title') && timeSpan.title.indexOf('t=') == 0) {
+        results[r].retry = timeSpan.title.substr(2);
+      } else {
+        results[r].retry = '-1';
+      }
+    }
+    return results;
+  }
+
+  function getChromeProxyInfo() {
+    if (!document.getElementById(PROXY_VIEW_ID)) {
+      return null;
+    }
+    info = {};
+    info.settings = getEffectiveProxySettings(document);
+    info.enabled = (info.settings.indexOf(PROXY_SETTINGS_SIGNATURE) >= 0);
+    info.badProxies = getBadProxyList(document);
+    return info;
+  };
+  window.__getChromeProxyInfo = getChromeProxyInfo;
+})();
diff --git a/tools/perf/metrics/chrome_proxy.py b/tools/perf/metrics/chrome_proxy.py
index 9c319d1..a17d9e7 100644
--- a/tools/perf/metrics/chrome_proxy.py
+++ b/tools/perf/metrics/chrome_proxy.py
@@ -2,6 +2,9 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
+import datetime
+import os
+
 from telemetry.page import page_measurement
 from metrics import network
 
@@ -13,6 +16,27 @@
 CHROME_PROXY_VIA_HEADER = 'Chrome-Compression-Proxy'
 CHROME_PROXY_VIA_HEADER_DEPRECATED = '1.1 Chrome Compression Proxy'
 
+ALL_PROXIES = ['compress.googlezip.net:80', 'https://proxy.googlezip.net:443']
+
+# The default Chrome Proxy bypass time is a range from one to five mintues.
+# See ProxyList::UpdateRetryInfoOnFallback in net/proxy/proxy_list.cc.
+DEFAULT_BYPASS_MIN_SECONDS = 60
+DEFAULT_BYPASS_MAX_SECONDS = 5 * 60
+
+def GetProxyInfoFromNetworkInternals(tab):
+  tab.Navigate('chrome://net-internals#proxy')
+  with open(os.path.join(os.path.dirname(__file__), 'chrome_proxy.js')) as f:
+    js = f.read()
+    tab.ExecuteJavaScript(js)
+  tab.WaitForJavaScriptExpression('performance.timing.loadEventStart', 300)
+  info = tab.EvaluateJavaScript('window.__getChromeProxyInfo()')
+  return info
+
+
+def ProxyRetryTimeInRange(retry_time, low, high, grace_seconds=30):
+  return (retry_time >= low and
+          (retry_time < high + datetime.timedelta(seconds=grace_seconds)))
+
 
 class ChromeProxyResponse(network.HTTPResponse):
   """ Represents an HTTP response from a timeleine event."""
@@ -100,6 +124,39 @@
                 r.url, r.GetHeader('Via'), r.GetHeader('Referer'), r.status))
     results.Add('checked_via_header', 'count', via_count)
 
+  @staticmethod
+  def VerifyBadProxies(
+      badProxies, expected_proxies,
+      retry_seconds_low = DEFAULT_BYPASS_MIN_SECONDS,
+      retry_seconds_high = DEFAULT_BYPASS_MAX_SECONDS):
+    """."""
+    if not badProxies or (len(badProxies) != len(expected_proxies)):
+      return False
+
+    # Check all expected proxies.
+    proxies = [p['proxy'] for p in badProxies]
+    expected_proxies.sort()
+    proxies.sort()
+    if not expected_proxies == proxies:
+      raise ChromeProxyMetricException, (
+          'Bad proxies: got %s want %s' % (
+              str(badProxies), str(expected_proxies)))
+
+    # Check retry time
+    for p in badProxies:
+      retry_time_low = (datetime.datetime.now() +
+                        datetime.timedelta(seconds=retry_seconds_low))
+      retry_time_high = (datetime.datetime.now() +
+                        datetime.timedelta(seconds=retry_seconds_high))
+      got_retry_time = datetime.datetime.fromtimestamp(int(p['retry'])/1000)
+      if not ProxyRetryTimeInRange(
+          got_retry_time, retry_time_low, retry_time_high):
+        raise ChromeProxyMetricException, (
+            'Bad proxy %s retry time (%s) should be within range (%s-%s).' % (
+                p['proxy'], str(got_retry_time), str(retry_time_low),
+                str(retry_time_high)))
+    return True
+
   def AddResultsForBypass(self, tab, results):
     bypass_count = 0
     for resp in self.IterResponses(tab):
@@ -109,6 +166,14 @@
             '%s: Should not have Via header (%s) (refer=%s, status=%d)' % (
                 r.url, r.GetHeader('Via'), r.GetHeader('Referer'), r.status))
       bypass_count += 1
+
+    if tab:
+      info = GetProxyInfoFromNetworkInternals(tab)
+      if not info['enabled']:
+        raise ChromeProxyMetricException, (
+            "Chrome proxy should be enabled. proxy info: %s" % info)
+      self.VerifyBadProxies(info['badProxies'], ALL_PROXIES)
+
     results.Add('bypass', 'count', bypass_count)
 
   def AddResultsForSafebrowsing(self, tab, results):
diff --git a/tools/perf/metrics/smoothness.py b/tools/perf/metrics/smoothness.py
index 64141e9..cc94bd9 100644
--- a/tools/perf/metrics/smoothness.py
+++ b/tools/perf/metrics/smoothness.py
@@ -6,20 +6,17 @@
 from metrics import rendering_stats
 from telemetry.page.perf_tests_helper import FlattenList
 from telemetry.util import statistics
-from telemetry.core.timeline import bounds
 
 
 class SmoothnessMetric(timeline_based_metric.TimelineBasedMetric):
   def __init__(self):
     super(SmoothnessMetric, self).__init__()
 
-  def AddResults(self, model, renderer_thread, interaction_record, results):
+  def AddResults(self, model, renderer_thread, interaction_records, results):
     renderer_process = renderer_thread.parent
-    time_bounds = bounds.Bounds()
-    time_bounds.AddValue(interaction_record.start)
-    time_bounds.AddValue(interaction_record.end)
     stats = rendering_stats.RenderingStats(
-      renderer_process, model.browser_process, [time_bounds])
+      renderer_process, model.browser_process,
+      [r.GetBounds() for r in interaction_records])
     if stats.mouse_wheel_scroll_latency:
       mean_mouse_wheel_scroll_latency = statistics.ArithmeticMean(
         stats.mouse_wheel_scroll_latency)
diff --git a/tools/perf/metrics/timeline.py b/tools/perf/metrics/timeline.py
index 2ec3823..3de78e9 100644
--- a/tools/perf/metrics/timeline.py
+++ b/tools/perf/metrics/timeline.py
@@ -11,8 +11,12 @@
     super(LoadTimesTimelineMetric, self).__init__()
     self.report_main_thread_only = True
 
-  def AddResults(self, model, renderer_thread, interaction_record, results):
+  def AddResults(self, model, renderer_thread, interaction_records, results):
     assert model
+    assert len(interaction_records) == 1, (
+      'LoadTimesTimelineMetric cannot compute metrics for more than 1 time '
+      'range.')
+    interaction_record = interaction_records[0]
     if self.report_main_thread_only:
       thread_filter = 'CrRendererMain'
     else:
@@ -210,12 +214,12 @@
         count += 1
     return count
 
-  def AddResults(self, model, _, interaction_record, results):
+  def AddResults(self, model, _, interaction_records, results):
     # Set up each thread category for consistant results.
     thread_category_results = {}
     for name in TimelineThreadCategories.values():
       thread_category_results[name] = ResultsForThread(
-        model, [interaction_record.GetBounds()], name)
+        model, [r.GetBounds() for r in interaction_records], name)
 
     # Group the slices by their thread category.
     for thread in model.GetAllThreads():
diff --git a/tools/perf/metrics/timeline_based_metric.py b/tools/perf/metrics/timeline_based_metric.py
index ecfc343..0a4f56e 100644
--- a/tools/perf/metrics/timeline_based_metric.py
+++ b/tools/perf/metrics/timeline_based_metric.py
@@ -10,15 +10,14 @@
     """
     super(TimelineBasedMetric, self).__init__()
 
-  def AddResults(self, model, renderer_thread,
-                 interaction_record, results):
-    """Computes and adds metrics for the interaction_record's time range.
+  def AddResults(self, model, renderer_thread, interaction_records, results):
+    """Computes and adds metrics for the interaction_records' time ranges.
 
     The override of this method should compute results on the data **only**
-    within the interaction_record's start and end time.
+    within the interaction_records' start and end time ranges.
 
     model is an instance of telemetry.core.timeline.model.TimelineModel.
-    interaction_record is an instance of TimelineInteractionRecord.
+    interaction_records is a list of instances of TimelineInteractionRecord.
     results is an instance of page.PageTestResults.
 
     """
diff --git a/tools/perf/metrics/timeline_unittest.py b/tools/perf/metrics/timeline_unittest.py
index ca1451d..0e24ff4 100644
--- a/tools/perf/metrics/timeline_unittest.py
+++ b/tools/perf/metrics/timeline_unittest.py
@@ -10,15 +10,13 @@
 from telemetry.web_perf import timeline_interaction_record as tir_module
 
 def _GetInteractionRecord(start, end):
-  return tir_module.TimelineInteractionRecord("test-record",
-                                                               start, end)
-
+  return tir_module.TimelineInteractionRecord("test-record", start, end)
 
 
 class LoadTimesTimelineMetric(unittest.TestCase):
-  def GetResults(self, metric, model, renderer_thread, interaction_record):
+  def GetResults(self, metric, model, renderer_thread, interaction_records):
     results = test_page_measurement_results.TestPageMeasurementResults(self)
-    metric.AddResults(model, renderer_thread, interaction_record, results)
+    metric.AddResults(model, renderer_thread, interaction_records, results)
     return results
 
   def testSanitizing(self):
@@ -35,7 +33,7 @@
     metric = timeline.LoadTimesTimelineMetric()
     results = self.GetResults(
       metric, model=model, renderer_thread=renderer_main,
-      interaction_record=_GetInteractionRecord(0, float('inf')))
+      interaction_records=[_GetInteractionRecord(0, float('inf'))])
     results.AssertHasPageSpecificScalarValue(
       'CrRendererMain|x_y', 'ms', 10)
     results.AssertHasPageSpecificScalarValue(
@@ -58,9 +56,9 @@
     model.FinalizeImport()
 
     metric = timeline.LoadTimesTimelineMetric()
-    results = self.GetResults(metric, model=model,
-                              renderer_thread=renderer_main,
-                              interaction_record=_GetInteractionRecord(10, 20))
+    results = self.GetResults(
+      metric, model=model, renderer_thread=renderer_main,
+      interaction_records=[_GetInteractionRecord(10, 20)])
     results.AssertHasPageSpecificScalarValue(
       'CrRendererMain|x_y', 'ms', 10)
     results.AssertHasPageSpecificScalarValue(
@@ -83,7 +81,7 @@
     metric = timeline.LoadTimesTimelineMetric()
     results = self.GetResults(
       metric, model=model, renderer_thread=renderer_main,
-      interaction_record=_GetInteractionRecord(0, float('inf')))
+      interaction_records=[_GetInteractionRecord(0, float('inf'))])
     results.AssertHasPageSpecificScalarValue(
       'cat_x_y', 'count', 3)
     results.AssertHasPageSpecificScalarValue(
@@ -105,7 +103,7 @@
     metric = timeline.ThreadTimesTimelineMetric()
     metric.details_to_report = timeline.ReportMainThreadOnly
     results = self.GetResults(metric, model, renderer_main.parent,
-                              _GetInteractionRecord(1,2))
+                              [_GetInteractionRecord(1,2)])
 
     # Test that all result thread categories exist
     for name in timeline.TimelineThreadCategories.values():
@@ -138,7 +136,7 @@
     metric = timeline.ThreadTimesTimelineMetric()
     metric.details_to_report = timeline.ReportMainThreadOnly
     results = self.GetResults(metric, model, renderer_main.parent,
-                              _GetInteractionRecord(10, 30))
+                              [_GetInteractionRecord(10, 30)])
 
 
     # Test a couple specific results.
@@ -176,7 +174,7 @@
     metric = timeline.ThreadTimesTimelineMetric()
     metric.details_to_report = timeline.ReportMainThreadOnly
     results = self.GetResults(metric, model, renderer_main.parent,
-                              _GetInteractionRecord(10, 30))
+                              [_GetInteractionRecord(10, 30)])
 
     # Test a couple specific results.
     assert_results = {
diff --git a/tools/perf/page_sets/PRESUBMIT.py b/tools/perf/page_sets/PRESUBMIT.py
index c83a9f1..98623e7 100644
--- a/tools/perf/page_sets/PRESUBMIT.py
+++ b/tools/perf/page_sets/PRESUBMIT.py
@@ -127,25 +127,11 @@
 def _GetNewJsonPageSets(input_api):
   return input_api.AffectedFiles(file_filter=_IsNewJsonPageSet)
 
-# TODO(nednguyen): Remove this check when crbug.com/239179 is marked fixed.
-def _NewJsonPageSetsCheck(input_api, output_api):
-  """Validates that no new json page set are added.
-  """
-  results = []
-  for path in _GetNewJsonPageSets(input_api):
-    results.append(output_api.PresubmitError(
-      'Json page set will soon be deprecated (see: crbug.com/239179), '
-      'please convert %s to a python page set.' % path))
-  return results
-
-
 def CheckChangeOnUpload(input_api, output_api):
   results = _SyncFilesToCloud(input_api, output_api)
-  results.extend(_NewJsonPageSetsCheck(input_api, output_api))
   return results
 
 
 def CheckChangeOnCommit(input_api, output_api):
   results = _VerifyFilesInCloud(input_api, output_api)
-  results.extend(_NewJsonPageSetsCheck(input_api, output_api))
   return results
diff --git a/tools/perf/page_sets/browser_control.json b/tools/perf/page_sets/browser_control.json
deleted file mode 100644
index 1ac76a7..0000000
--- a/tools/perf/page_sets/browser_control.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
-  "description": "Chrome Endure control test for the browser.",
-  "user_agent_type": "desktop",
-  "pages": [
-    {
-      "url": "file://endure/browser_control.html",
-      "name": "browser_control",
-      "why": "Continually attach and detach a DOM tree from a basic document.",
-      "endure": { "action": "wait", "seconds": 2 }
-    }
-  ]
-}
diff --git a/tools/perf/page_sets/browser_control.py b/tools/perf/page_sets/browser_control.py
new file mode 100644
index 0000000..3bf327e
--- /dev/null
+++ b/tools/perf/page_sets/browser_control.py
@@ -0,0 +1,32 @@
+# 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.
+# pylint: disable=W0401,W0614
+from telemetry.page.actions.all_page_actions import *
+from telemetry.page import page as page_module
+from telemetry.page import page_set as page_set_module
+
+
+class BrowserControlPage(page_module.PageWithDefaultRunNavigate):
+  """ Why: Continually attach and detach a DOM tree from a basic document. """
+
+  def __init__(self, page_set):
+    super(BrowserControlPage, self).__init__(
+      url='file://endure/browser_control.html',
+      page_set=page_set)
+    self.user_agent_type = 'desktop'
+    self.name = 'browser_control'
+
+  def RunEndure(self, action_runner):
+    action_runner.RunAction(WaitAction({'seconds': 2}))
+
+
+class BrowserControlPageSet(page_set_module.PageSet):
+
+  """ Chrome Endure control test for the browser. """
+
+  def __init__(self):
+    super(BrowserControlPageSet, self).__init__(
+      user_agent_type='desktop')
+
+    self.AddPage(BrowserControlPage(self))
diff --git a/tools/perf/page_sets/browser_control_click.json b/tools/perf/page_sets/browser_control_click.json
deleted file mode 100644
index 845ded6..0000000
--- a/tools/perf/page_sets/browser_control_click.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
-  "description": "Chrome Endure control test for the browser.",
-  "user_agent_type": "desktop",
-  "pages": [
-    {
-      "url": "file://endure/browser_control_click.html",
-      "name": "browser_control_click",
-      "why": "Use a JavaScript .click() call to attach and detach a DOM tree from a basic document.",
-      "navigate_steps": [
-        { "action": "navigate" },
-        { "action": "wait", "condition": "element", "xpath": "id(\"attach\")" }
-      ],
-      "endure": [
-        { "action": "javascript_click", "xpath": "id(\"attach\")" },
-        { "action": "wait", "seconds": 0.5 },
-        { "action": "javascript_click", "xpath": "id(\"detach\")" },
-        { "action": "wait", "seconds": 0.5 }
-      ]
-    }
-  ]
-}
diff --git a/tools/perf/page_sets/browser_control_click.py b/tools/perf/page_sets/browser_control_click.py
new file mode 100644
index 0000000..b6e1015
--- /dev/null
+++ b/tools/perf/page_sets/browser_control_click.py
@@ -0,0 +1,58 @@
+# 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.
+# pylint: disable=W0401,W0614
+from telemetry.page.actions.all_page_actions import *
+from telemetry.page import page as page_module
+from telemetry.page import page_set as page_set_module
+
+
+class BrowserControlClickPage(page_module.PageWithDefaultRunNavigate):
+
+  """ Why: Use a JavaScript .click() call to attach and detach a DOM tree
+  from a basic document.
+  """
+
+  def __init__(self, page_set):
+    super(BrowserControlClickPage, self).__init__(
+      url='file://endure/browser_control_click.html',
+      page_set=page_set)
+    self.user_agent_type = 'desktop'
+    self.name = 'browser_control_click'
+
+  def RunNavigateSteps(self, action_runner):
+    action_runner.RunAction(NavigateAction())
+    action_runner.RunAction(WaitAction(
+      {
+        'xpath': 'id("attach")',
+        'condition': 'element'
+      }))
+
+  def RunEndure(self, action_runner):
+    action_runner.RunAction(ClickElementAction(
+      {
+        'xpath': 'id("attach")'
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'seconds': 0.5
+      }))
+    action_runner.RunAction(ClickElementAction(
+      {
+        'xpath': 'id("detach")'
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'seconds': 0.5
+      }))
+
+
+class BrowserControlClickPageSet(page_set_module.PageSet):
+
+  """ Chrome Endure control test for the browser. """
+
+  def __init__(self):
+    super(BrowserControlClickPageSet, self).__init__(
+      user_agent_type='desktop')
+
+    self.AddPage(BrowserControlClickPage(self))
diff --git a/tools/perf/page_sets/calendar_forward_backward.json b/tools/perf/page_sets/calendar_forward_backward.json
deleted file mode 100644
index a3b48e1..0000000
--- a/tools/perf/page_sets/calendar_forward_backward.json
+++ /dev/null
@@ -1,46 +0,0 @@
-{
-  "description": "Chrome Endure test for Google Calendar.",
-  "archive_data_file": "data/calendar_forward_backward.json",
-  "credentials_path": "data/credentials.json",
-  "user_agent_type": "desktop",
-  "pages": [
-    {
-      "url": "https://www.google.com/calendar/",
-      "name": "calendar_forward_backward",
-      "why": "Click forward(4x) and backwards(4x) repeatedly",
-      "credentials": "google",
-      "navigate_steps" : [
-        { "action": "navigate" },
-        { "action": "wait", "seconds": 2 },
-        { "action": "wait", "condition": "element", "selector":  "div[class~=\"navForward\"]" },
-        { "action": "javascript", "expression": "(function() { var elem = document.createElement('meta');elem.name='viewport';elem.content='initial-scale=1';document.body.appendChild(elem); })();" }
-      ],
-      "endure": [
-        { "action": "javascript_click", "selector": "div[class~=\"navForward\"]" },
-        { "action": "wait", "seconds": 2 },
-        { "action": "wait", "condition": "element", "selector": "div[class~=\"navForward\"]" },
-        { "action": "javascript_click", "selector": "div[class~=\"navForward\"]" },
-        { "action": "wait", "seconds": 2 },
-        { "action": "wait", "condition": "element", "selector": "div[class~=\"navForward\"]" },
-        { "action": "javascript_click", "selector": "div[class~=\"navForward\"]" },
-        { "action": "wait", "seconds": 2 },
-        { "action": "wait", "condition": "element", "selector": "div[class~=\"navForward\"]" },
-        { "action": "javascript_click", "selector": "div[class~=\"navForward\"]" },
-        { "action": "wait", "seconds": 2 },
-        { "action": "wait", "condition": "element", "selector": "div[class~=\"navBack\"]" },
-        { "action": "javascript_click", "selector": "div[class~=\"navBack\"]" },
-        { "action": "wait", "seconds": 2 },
-        { "action": "wait", "condition": "element", "selector": "div[class~=\"navBack\"]" },
-        { "action": "javascript_click", "selector": "div[class~=\"navBack\"]" },
-        { "action": "wait", "seconds": 2 },
-        { "action": "wait", "condition": "element", "selector": "div[class~=\"navBack\"]" },
-        { "action": "javascript_click", "selector": "div[class~=\"navBack\"]" },
-        { "action": "wait", "seconds": 2 },
-        { "action": "wait", "condition": "element", "selector": "div[class~=\"navBack\"]" },
-        { "action": "javascript_click", "selector": "div[class~=\"navBack\"]" },
-        { "action": "wait", "seconds": 2 },
-        { "action": "wait", "condition": "element", "selector": "div[class~=\"navForward\"]" }
-      ]
-    }
-  ]
-}
diff --git a/tools/perf/page_sets/calendar_forward_backward.py b/tools/perf/page_sets/calendar_forward_backward.py
new file mode 100644
index 0000000..b8b6825
--- /dev/null
+++ b/tools/perf/page_sets/calendar_forward_backward.py
@@ -0,0 +1,163 @@
+# 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.
+# pylint: disable=W0401,W0614
+from telemetry.page.actions.all_page_actions import *
+from telemetry.page import page as page_module
+from telemetry.page import page_set as page_set_module
+
+
+class CalendarForwardBackwardPage(page_module.PageWithDefaultRunNavigate):
+
+  """ Why: Click forward(4x) and backwards(4x) repeatedly """
+
+  def __init__(self, page_set):
+    super(CalendarForwardBackwardPage, self).__init__(
+      url='https://www.google.com/calendar/',
+      page_set=page_set)
+    self.credentials_path = 'data/credentials.json'
+    self.credentials = 'google'
+    self.user_agent_type = 'desktop'
+    self.archive_data_file = 'data/calendar_forward_backward.json'
+    self.name = 'calendar_forward_backward'
+
+  def RunNavigateSteps(self, action_runner):
+    action_runner.RunAction(NavigateAction())
+    action_runner.RunAction(WaitAction(
+      {
+        'seconds': 2
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'condition': 'element',
+        'selector': 'div[class~="navForward"]'
+      }))
+    action_runner.RunAction(JavascriptAction(
+      {
+        'expression': '''
+          (function() {
+            var elem = document.createElement('meta');
+            elem.name='viewport';
+            elem.content='initial-scale=1';
+            document.body.appendChild(elem);
+          })();'''
+      }))
+
+  def RunEndure(self, action_runner):
+    action_runner.RunAction(ClickElementAction(
+      {
+        'selector': 'div[class~="navForward"]'
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'seconds': 2
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'condition': 'element',
+        'selector': 'div[class~="navForward"]'
+      }))
+    action_runner.RunAction(ClickElementAction(
+      {
+        'selector': 'div[class~="navForward"]'
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'seconds': 2
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'condition': 'element',
+        'selector': 'div[class~="navForward"]'
+      }))
+    action_runner.RunAction(ClickElementAction(
+      {
+        'selector': 'div[class~="navForward"]'
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'seconds': 2
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'condition': 'element',
+        'selector': 'div[class~="navForward"]'
+      }))
+    action_runner.RunAction(ClickElementAction(
+      {
+        'selector': 'div[class~="navForward"]'
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'seconds': 2
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'condition': 'element',
+        'selector': 'div[class~="navBack"]'
+      }))
+    action_runner.RunAction(ClickElementAction(
+      {
+        'selector': 'div[class~="navBack"]'
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'seconds': 2
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'condition': 'element',
+        'selector': 'div[class~="navBack"]'
+      }))
+    action_runner.RunAction(ClickElementAction(
+      {
+        'selector': 'div[class~="navBack"]'
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'seconds': 2
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'condition': 'element',
+        'selector': 'div[class~="navBack"]'
+      }))
+    action_runner.RunAction(ClickElementAction(
+      {
+        'selector': 'div[class~="navBack"]'
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'seconds': 2
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'condition': 'element',
+        'selector': 'div[class~="navBack"]'
+      }))
+    action_runner.RunAction(ClickElementAction(
+      {
+        'selector': 'div[class~="navBack"]'
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'seconds': 2
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'condition': 'element',
+        'selector': 'div[class~="navForward"]'
+      }))
+
+
+class CalendarForwardBackwardPageSet(page_set_module.PageSet):
+
+  """ Chrome Endure test for Google Calendar. """
+
+  def __init__(self):
+    super(CalendarForwardBackwardPageSet, self).__init__(
+      credentials_path='data/credentials.json',
+      user_agent_type='desktop',
+      archive_data_file='data/calendar_forward_backward.json')
+
+    self.AddPage(CalendarForwardBackwardPage(self))
diff --git a/tools/perf/page_sets/data/key_silk_cases.json b/tools/perf/page_sets/data/key_silk_cases.json
index cf5f100..24303f6 100644
--- a/tools/perf/page_sets/data/key_silk_cases.json
+++ b/tools/perf/page_sets/data/key_silk_cases.json
@@ -1,6 +1,9 @@
 {
     "description": "Describes the Web Page Replay archives for a page set. Don't edit by hand! Use record_wpr for updating.", 
     "archives": {
+        "key_silk_cases_009.wpr": [
+            "http://jsfiddle.net/TLXLu/2/embedded/result/"
+        ], 
         "key_silk_cases_000.wpr": [
             "http://staff.tumblr.com/", 
             "http://jsfiddle.net/mdxJ7/3/show", 
@@ -25,6 +28,19 @@
             "http://famo.us?scroll", 
             "http://famo.us?tap"
         ], 
+        "key_silk_cases_004.wpr": [
+            "http://jankfree.org/silk/text-mask.html", 
+            "http://jankfree.org/silk/rectangle_transition.html"
+        ], 
+        "key_silk_cases_006.wpr": [
+            "http://jsfiddle.net/rF9Gh/3/embedded/result/"
+        ], 
+        "key_silk_cases_008.wpr": [
+            "http://jsfiddle.net/jx5De/13/embedded/result"
+        ], 
+        "key_silk_cases_011.wpr": [
+            "http://jsfiddle.net/vBQHH/10/embedded/result/"
+        ], 
         "key_silk_cases_001.wpr": [
             "http://groupcloned.com/test/plain/list-recycle-transform.html", 
             "http://groupcloned.com/test/plain/list-animation-simple.html", 
@@ -47,12 +63,11 @@
             "http://jsfiddle.net/FtR7p/42/embedded/result/", 
             "http://jsfiddle.net/ugkd4/9/embedded/result/"
         ], 
-        "key_silk_cases_004.wpr": [
-            "http://jankfree.org/silk/text-mask.html", 
-            "http://jankfree.org/silk/rectangle_transition.html"
+        "key_silk_cases_012.wpr": [
+            "http://jsfiddle.net/xLuvC/embedded/result/"
         ], 
-        "key_silk_cases_006.wpr": [
-            "http://jsfiddle.net/rF9Gh/3/embedded/result/"
+        "key_silk_cases_010.wpr": [
+            "http://jsfiddle.net/cKB9D/6/embedded/result/"
         ], 
         "key_silk_cases_005.wpr": [
             "http://jsfiddle.net/3yDKh/4/embedded/result", 
@@ -60,6 +75,9 @@
         ], 
         "key_silk_cases_007.wpr": [
             "http://jsfiddle.net/jx5De/12/embedded/result"
+        ], 
+        "key_silk_cases_013.wpr": [
+            "http://jsfiddle.net/bNp2h/1/embedded/result/"
         ]
     }
 }
\ No newline at end of file
diff --git a/tools/perf/page_sets/data/key_silk_cases_008.wpr.sha1 b/tools/perf/page_sets/data/key_silk_cases_008.wpr.sha1
new file mode 100644
index 0000000..8ba8031
--- /dev/null
+++ b/tools/perf/page_sets/data/key_silk_cases_008.wpr.sha1
@@ -0,0 +1 @@
+4315d6b9211058b5ddbe9e91a87bb6e981e19489
\ No newline at end of file
diff --git a/tools/perf/page_sets/data/key_silk_cases_009.wpr.sha1 b/tools/perf/page_sets/data/key_silk_cases_009.wpr.sha1
new file mode 100644
index 0000000..bb029ed
--- /dev/null
+++ b/tools/perf/page_sets/data/key_silk_cases_009.wpr.sha1
@@ -0,0 +1 @@
+6f35bc3ace29295f48f806f4164ef281b2700fec
\ No newline at end of file
diff --git a/tools/perf/page_sets/data/key_silk_cases_010.wpr.sha1 b/tools/perf/page_sets/data/key_silk_cases_010.wpr.sha1
new file mode 100644
index 0000000..02ba950
--- /dev/null
+++ b/tools/perf/page_sets/data/key_silk_cases_010.wpr.sha1
@@ -0,0 +1 @@
+7f544c90f5ee49045703b0a2632f3760d3c722ee
\ No newline at end of file
diff --git a/tools/perf/page_sets/data/key_silk_cases_011.wpr.sha1 b/tools/perf/page_sets/data/key_silk_cases_011.wpr.sha1
new file mode 100644
index 0000000..595d268
--- /dev/null
+++ b/tools/perf/page_sets/data/key_silk_cases_011.wpr.sha1
@@ -0,0 +1 @@
+2b4d20dbb2d7fade36f2e02c1530e0428f6e4d7a
\ No newline at end of file
diff --git a/tools/perf/page_sets/data/key_silk_cases_012.wpr.sha1 b/tools/perf/page_sets/data/key_silk_cases_012.wpr.sha1
new file mode 100644
index 0000000..2e5e148
--- /dev/null
+++ b/tools/perf/page_sets/data/key_silk_cases_012.wpr.sha1
@@ -0,0 +1 @@
+c970c478472e6e74ee59cf37301ae8f0315997c3
\ No newline at end of file
diff --git a/tools/perf/page_sets/data/key_silk_cases_013.wpr.sha1 b/tools/perf/page_sets/data/key_silk_cases_013.wpr.sha1
new file mode 100644
index 0000000..6c6e37b
--- /dev/null
+++ b/tools/perf/page_sets/data/key_silk_cases_013.wpr.sha1
@@ -0,0 +1 @@
+db2b609daea2d1be1c39e453e8ab693b78f68a5f
\ No newline at end of file
diff --git a/tools/perf/page_sets/data/pica.json b/tools/perf/page_sets/data/pica.json
index c0a0b01..be7c361 100644
--- a/tools/perf/page_sets/data/pica.json
+++ b/tools/perf/page_sets/data/pica.json
@@ -1,8 +1,8 @@
 {
     "description": "Describes the Web Page Replay archives for a page set. Don't edit by hand! Use record_wpr for updating.", 
     "archives": {
-        "pica_006.wpr": [
+        "pica_007.wpr": [
             "http://localhost/polymer/projects/pica/"
         ]
     }
-}
\ No newline at end of file
+}
diff --git a/tools/perf/page_sets/data/pica_007.wpr.sha1 b/tools/perf/page_sets/data/pica_007.wpr.sha1
new file mode 100644
index 0000000..6a282f9
--- /dev/null
+++ b/tools/perf/page_sets/data/pica_007.wpr.sha1
@@ -0,0 +1 @@
+c352efdd35e3da6e12cfd21ad6d27e37f659e056
\ No newline at end of file
diff --git a/tools/perf/page_sets/five_blank_pages.json b/tools/perf/page_sets/five_blank_pages.json
deleted file mode 100644
index 9b1de59..0000000
--- a/tools/perf/page_sets/five_blank_pages.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-  "description": "Five blank pages.",
-  "pages": [
-    { "url": "file://blank_page/blank_page.html" },
-    { "url": "file://blank_page/blank_page.html" },
-    { "url": "file://blank_page/blank_page.html" },
-    { "url": "file://blank_page/blank_page.html" },
-    { "url": "file://blank_page/blank_page.html" }
-  ]
-}
diff --git a/tools/perf/page_sets/five_blank_pages.py b/tools/perf/page_sets/five_blank_pages.py
new file mode 100644
index 0000000..eec1a92
--- /dev/null
+++ b/tools/perf/page_sets/five_blank_pages.py
@@ -0,0 +1,17 @@
+# 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.
+# pylint: disable=W0401,W0614
+from telemetry.page.actions.all_page_actions import *
+from telemetry.page import page as page_module
+from telemetry.page import page_set as page_set_module
+
+class FiveBlankPagesPageSet(page_set_module.PageSet):
+
+  """ Five blank pages. """
+
+  def __init__(self):
+    super(FiveBlankPagesPageSet, self).__init__()
+    for _ in xrange(5):
+      self.AddPage(page_module.PageWithDefaultRunNavigate(
+        'file://blank_page/blank_page.html', self))
diff --git a/tools/perf/page_sets/image_decoding_measurement.json b/tools/perf/page_sets/image_decoding_measurement.json
deleted file mode 100644
index 0b09e95..0000000
--- a/tools/perf/page_sets/image_decoding_measurement.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
-  "description": "A directed benchmark of image decoding performance",
-  "navigate_steps": [
-    { "action": "navigate" },
-    { "action": "javascript", "expression": "runBenchmark();" },
-    { "action": "wait", "javascript": "isDone" }
-  ],
-  "image_decoding_measurement_limit_results_to_min_iterations": true,
-  "pages": [
-    { "url": "file://../../../chrome/test/data/image_decoding/image_decoding.html?gif" },
-    { "url": "file://../../../chrome/test/data/image_decoding/image_decoding.html?jpg" },
-    { "url": "file://../../../chrome/test/data/image_decoding/image_decoding.html?png" },
-    { "url": "file://../../../chrome/test/data/image_decoding/image_decoding.html?webp" }
-  ]
-}
diff --git a/tools/perf/page_sets/image_decoding_measurement.py b/tools/perf/page_sets/image_decoding_measurement.py
new file mode 100644
index 0000000..4ee3267
--- /dev/null
+++ b/tools/perf/page_sets/image_decoding_measurement.py
@@ -0,0 +1,45 @@
+# 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.
+# pylint: disable=W0401,W0614
+from telemetry.page.actions.all_page_actions import *
+from telemetry.page import page as page_module
+from telemetry.page import page_set as page_set_module
+
+
+class ImageDecodingMeasurementPage(page_module.PageWithDefaultRunNavigate):
+
+  def __init__(self, url, page_set):
+    super(ImageDecodingMeasurementPage, self).__init__(url=url,
+                                                       page_set=page_set)
+    self.image_decoding_measurement_limit_results_to_min_iterations = True
+
+  def RunNavigateSteps(self, action_runner):
+    action_runner.RunAction(NavigateAction())
+    action_runner.RunAction(JavascriptAction(
+      {
+        'expression': 'runBenchmark();'
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'javascript': 'isDone'
+      }))
+
+
+class ImageDecodingMeasurementPageSet(page_set_module.PageSet):
+
+  """ A directed benchmark of image decoding performance """
+
+  def __init__(self):
+    super(ImageDecodingMeasurementPageSet, self).__init__()
+    self.image_decoding_measurement_limit_results_to_min_iterations = True
+
+    urls_list = [
+      'file://../../../chrome/test/data/image_decoding/image_decoding.html?gif',
+      'file://../../../chrome/test/data/image_decoding/image_decoding.html?jpg',
+      'file://../../../chrome/test/data/image_decoding/image_decoding.html?png',
+      'file://../../../chrome/test/data/image_decoding/image_decoding.html?webp'
+    ]
+
+    for url in urls_list:
+      self.AddPage(ImageDecodingMeasurementPage(url, self))
diff --git a/tools/perf/page_sets/indexeddb_offline.json b/tools/perf/page_sets/indexeddb_offline.json
deleted file mode 100644
index 0c349ae..0000000
--- a/tools/perf/page_sets/indexeddb_offline.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
-  "description": "Chrome Endure test for IndexedDB.",
-  "user_agent_type": "desktop",
-  "pages": [
-    {
-      "url": "file://endure/indexeddb_app.html",
-      "name": "indexeddb_offline",
-      "why": "Simulates user input while offline and sync while online.",
-      "navigate_steps": [
-        { "action": "navigate" },
-        { "action": "wait", "condition": "element", "text": "initialized" }
-      ],
-      "endure": [
-        { "action": "wait", "condition": "element", "selector": "button[id=\"online\"]:not(disabled)" },
-        { "action": "javascript_click", "selector": "button[id=\"online\"]:not(disabled)" },
-        { "action": "wait", "condition": "element", "xpath": "id(\"state\")[text()=\"online\"]" },
-        { "action": "wait", "seconds": 1 },
-        { "action": "wait", "condition": "element", "selector": "button[id=\"offline\"]:not(disabled)" },
-        { "action": "javascript_click", "selector": "button[id=\"offline\"]:not(disabled)" },
-        { "action": "wait", "condition": "element", "xpath": "id(\"state\")[text()=\"offline\"]" }
-      ]
-    }
-  ]
-}
diff --git a/tools/perf/page_sets/indexeddb_offline.py b/tools/perf/page_sets/indexeddb_offline.py
new file mode 100644
index 0000000..e322b16
--- /dev/null
+++ b/tools/perf/page_sets/indexeddb_offline.py
@@ -0,0 +1,72 @@
+# 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.
+# pylint: disable=W0401,W0614
+from telemetry.page.actions.all_page_actions import *
+from telemetry.page import page as page_module
+from telemetry.page import page_set as page_set_module
+
+
+class IndexeddbOfflinePage(page_module.PageWithDefaultRunNavigate):
+
+  """ Why: Simulates user input while offline and sync while online. """
+
+  def __init__(self, page_set):
+    super(IndexeddbOfflinePage, self).__init__(
+      url='file://endure/indexeddb_app.html',
+      page_set=page_set)
+    self.user_agent_type = 'desktop'
+    self.name = 'indexeddb_offline'
+
+  def RunNavigateSteps(self, action_runner):
+    action_runner.RunAction(NavigateAction())
+    action_runner.RunAction(WaitAction(
+        {
+            'text': 'initialized',
+            'condition': 'element'
+        }))
+
+  def RunEndure(self, action_runner):
+    action_runner.RunAction(WaitAction(
+        {
+            'condition': 'element',
+            'selector': 'button[id="online"]:not(disabled)'
+        }))
+    action_runner.RunAction(ClickElementAction(
+        {
+            'selector': 'button[id="online"]:not(disabled)'
+        }))
+    action_runner.RunAction(WaitAction(
+        {
+            'xpath': 'id("state")[text()="online"]',
+            'condition': 'element'
+        }))
+    action_runner.RunAction(WaitAction(
+        {
+            "seconds": 1
+        }))
+    action_runner.RunAction(WaitAction(
+        {
+            'condition': 'element',
+            'selector': 'button[id="offline"]:not(disabled)'
+        }))
+    action_runner.RunAction(ClickElementAction(
+        {
+            'selector': 'button[id="offline"]:not(disabled)'
+        }))
+    action_runner.RunAction(WaitAction(
+        {
+            'xpath': 'id("state")[text()="offline"]',
+            'condition': 'element'
+        }))
+
+
+class IndexeddbOfflinePageSet(page_set_module.PageSet):
+
+  """ Chrome Endure test for IndexedDB. """
+
+  def __init__(self):
+    super(IndexeddbOfflinePageSet, self).__init__(
+        user_agent_type='desktop')
+
+    self.AddPage(IndexeddbOfflinePage(self))
diff --git a/tools/perf/page_sets/key_desktop_sites.py b/tools/perf/page_sets/key_desktop_sites.py
index 44da75c..71ef2d0 100644
--- a/tools/perf/page_sets/key_desktop_sites.py
+++ b/tools/perf/page_sets/key_desktop_sites.py
@@ -450,7 +450,7 @@
       'http://www2.warnerbros.com',
       'http://jpl.nasa.gov',
       'http://yola.com',
-      'http://bom.gov.a',
+      'http://bom.gov.au',
       'http://nationalpost.com',
       'http://booking.com',
       'http://tripadvisor.com',
@@ -511,11 +511,11 @@
       'http://wunderground.com',
       'http://accuweather.com',
       'http://examiner.com',
-      'http://news.com.a',
+      'http://news.com.au',
       'http://time.com',
       'http://alarabiya.net',
       'http://businessweek.com',
-      'http://smh.com.a',
+      'http://smh.com.au',
       'http://weather.yahoo.com',
       'http://foxnews.com/politics/',
       'http://economictimes.indiatimes.com',
@@ -550,26 +550,26 @@
       'http://classmates.com',
       'http://blackboard.com',
       'http://justanswer.com',
-      'http://mit.ed',
+      'http://mit.edu',
       'http://medterms.com',
-      'http://stanford.ed',
+      'http://stanford.edu',
       'http://brainyquote.com',
-      'http://harvard.ed',
+      'http://harvard.edu',
       'http://superpages.com',
       'http://mylife.com',
       'http://en.wiktionary.org',
       'http://investopedia.com',
       'http://lumosity.com',
-      'http://phoenix.ed',
-      'http://berkeley.ed',
+      'http://phoenix.edu',
+      'http://berkeley.edu',
       'http://ecollege.com',
       'http://ed.gov',
       'http://yellowpages.sulekha.com',
       'http://wisegeek.com',
-      'http://utexas.ed',
+      'http://utexas.edu',
       'http://wwp.greenwichmeantime.com',
-      'http://cornell.ed',
-      'http://psu.ed',
+      'http://cornell.edu',
+      'http://psu.edu',
       'http://maps.yahoo.com',
       'http://linkedin.com/answers',
       'http://yahoo.co.jp',
@@ -607,7 +607,7 @@
       'http://metric-conversions.org',
       'http://news.nationalgeographic.com/index.rss',
       'http://bbc.co.uk/news/science_and_environment/',
-      'http://colorado.ed',
+      'http://colorado.edu',
       'http://popsci.com',
       'http://amazon.com',
       'http://ebay.com',
@@ -663,7 +663,7 @@
       'http://hi5.com',
       'http://ancestry.com',
       'http://sulekha.com',
-      'http://europa.e',
+      'http://europa.eu',
       'http://biblegateway.com',
       'http://slate.com',
       'http://correios.com.br',
@@ -674,7 +674,7 @@
       'http://askmen.com',
       'http://infowars.com',
       'http://wnd.com',
-      'http://ec.europa.e',
+      'http://ec.europa.eu',
       'http://justjared.com',
       'http://sheknows.com',
       'http://slashdot.org',
diff --git a/tools/perf/page_sets/key_mobile_sites.py b/tools/perf/page_sets/key_mobile_sites.py
index 8d3bd48..81acf65 100644
--- a/tools/perf/page_sets/key_mobile_sites.py
+++ b/tools/perf/page_sets/key_mobile_sites.py
@@ -79,9 +79,6 @@
       url='http://www.theverge.com/2012/10/28/3568746/amazon-7-inch-fire-hd-ipad-mini-ad-ballsy',
       page_set=page_set)
 
-    self.disabled = ('Does not work with rasterize_and_record benchmark on N5;'
-                     'crbug.com/317141')
-
   def RunNavigateSteps(self, action_runner):
     action_runner.RunAction(NavigateAction())
     action_runner.RunAction(WaitAction(
@@ -447,8 +444,8 @@
     action_runner.RunAction(NavigateAction())
     action_runner.RunAction(WaitAction(
       {
-        'javascript': ('typeof NEWS_telemetryReady !== "undefined" &&'
-                       'NEWS_telemetryReady == True')
+        'javascript': ('typeof NEWS_telemetryReady !== "undefined" && '
+                       'NEWS_telemetryReady == true')
       }))
 
 
@@ -512,9 +509,9 @@
     self.AddPage(Page10(self))
     self.AddPage(Page11(self))
     self.AddPage(Page12(self))
-    self.AddPage(Page13(self))
+#    self.AddPage(Page13(self))
     self.AddPage(Page14(self))
-    self.AddPage(Page15(self))
+#    self.AddPage(Page15(self))
     self.AddPage(Page16(self))
     self.AddPage(Page17(self))
     self.AddPage(Page18(self))
@@ -522,7 +519,7 @@
     self.AddPage(Page20(self))
     self.AddPage(Page21(self))
     self.AddPage(Page22(self))
-    self.AddPage(Page23(self))
+#    self.AddPage(Page23(self))
     self.AddPage(Page24(self))
     self.AddPage(Page25(self))
 
diff --git a/tools/perf/page_sets/key_silk_cases.py b/tools/perf/page_sets/key_silk_cases.py
index cac2b6b..41e6f6d 100644
--- a/tools/perf/page_sets/key_silk_cases.py
+++ b/tools/perf/page_sets/key_silk_cases.py
@@ -5,6 +5,7 @@
 from telemetry.page.actions.all_page_actions import *
 from telemetry.page import page as page_module
 from telemetry.page import page_set as page_set_module
+from telemetry.web_perf import timeline_interaction_record as tir_module
 
 
 class KeySilkCasesPage(page_module.PageWithDefaultRunNavigate):
@@ -105,7 +106,7 @@
 
   def __init__(self, page_set):
     super(Page5, self).__init__(
-      url='http://jsfiddle.net/jx5De/12/embedded/result',
+      url='http://jsfiddle.net/jx5De/13/embedded/result',
       page_set=page_set)
 
     self.gpu_raster = True
@@ -173,7 +174,7 @@
 
   def __init__(self, page_set):
     super(Page9, self).__init__(
-      url='http://jsfiddle.net/humper/yEX8u/3/embedded/result/',
+      url='http://jsfiddle.net/TLXLu/2/embedded/result/',
       page_set=page_set)
 
     self.gpu_raster = True
@@ -191,7 +192,7 @@
 
   def __init__(self, page_set):
     super(Page10, self).__init__(
-      url='http://jsfiddle.net/humper/cKB9D/3/embedded/result/',
+      url='http://jsfiddle.net/cKB9D/6/embedded/result/',
       page_set=page_set)
 
     self.gpu_raster = True
@@ -209,7 +210,7 @@
 
   def __init__(self, page_set):
     super(Page11, self).__init__(
-      url='http://jsfiddle.net/vBQHH/3/embedded/result/',
+      url='http://jsfiddle.net/vBQHH/10/embedded/result/',
       page_set=page_set)
 
     self.gpu_raster = True
@@ -237,7 +238,7 @@
 
   def __init__(self, page_set):
     super(Page13, self).__init__(
-      url='http://jankfree.org/silk/text-mask.html',
+      url='http://jsfiddle.net/xLuvC/embedded/result/',
       page_set=page_set)
 
     self.gpu_raster = True
@@ -252,7 +253,7 @@
 
   def __init__(self, page_set):
     super(Page14, self).__init__(
-      url='http://jankfree.org/silk/rectangle_transition.html',
+      url='http://jsfiddle.net/bNp2h/1/embedded/result/',
       page_set=page_set)
 
     self.gpu_raster = True
@@ -291,9 +292,6 @@
         'left_start_percentage': 0.8,
         'distance': 200,
         'direction': 'left',
-        'wait_after': {
-          'javascript': 'document.getElementsByClassName("message").length < 18'
-        },
         'top_start_percentage': 0.2,
         'element_function': '''
           function(callback) {
@@ -301,6 +299,11 @@
           }''',
         'speed': 5000
       }))
+    action_runner.BeginInteraction('Wait', [tir_module.IS_SMOOTH])
+    action_runner.RunAction(WaitAction({
+      'javascript': 'document.getElementsByClassName("message").length < 18'
+    }))
+    action_runner.EndInteraction('Wait', [tir_module.IS_SMOOTH])
 
   def RunSmoothness(self, action_runner):
     self.SwipeToDismiss(action_runner)
@@ -371,9 +374,11 @@
   def ToggleDrawer(self, action_runner):
     action_runner.RunAction(TapAction(
       {
-        'wait_after': {'seconds': 1},
         'selector': '#menu-button'
       }))
+    action_runner.BeginInteraction('Wait', [tir_module.IS_SMOOTH])
+    action_runner.RunAction(WaitAction({'seconds': 1}))
+    action_runner.EndInteraction('Wait', [tir_module.IS_SMOOTH])
 
 
 class Page19(KeySilkCasesPage):
@@ -386,11 +391,14 @@
   def ToggleDrawer(self, action_runner):
     action_runner.RunAction(TapAction(
       {
-        'wait_after': {
-          'javascript': 'document.getElementById("nav-drawer").active'
-        },
         'selector': '#menu-button'
       }))
+    action_runner.BeginInteraction('Wait', [tir_module.IS_SMOOTH])
+    action_runner.RunAction(WaitAction({
+      'javascript': 'document.getElementById("nav-drawer").active'
+    }))
+    action_runner.EndInteraction('Wait', [tir_module.IS_SMOOTH])
+
 
   def RunNavigateSteps(self, action_runner):
     action_runner.RunAction(NavigateAction())
@@ -406,15 +414,17 @@
         'left_start_percentage': 0.8,
         'distance': 200,
         'direction': 'left',
-        'wait_after': {
-          'javascript': '!document.getElementById("nav-drawer").active'
-        },
         'top_start_percentage': 0.2,
         'element_function': '''
           function(callback) {
             callback(document.getElementById('nav-drawer').children[0]);
           }'''
       }))
+    action_runner.BeginInteraction('Wait', [tir_module.IS_SMOOTH])
+    action_runner.RunAction(WaitAction({
+      'javascript': '!document.getElementById("nav-drawer").active'
+    }))
+    action_runner.EndInteraction('Wait', [tir_module.IS_SMOOTH])
 
 
 class Page20(KeySilkCasesPage):
@@ -450,11 +460,11 @@
       {
         'scroll_distance_function': '''
           function() {
-            return
-              document.getElementById('kno-result')
-                      .getBoundingClientRect().top -
-              document.body.scrollTop;
-          }'''
+            var el = document.getElementById('kno-result');
+            var bound = el.getBoundingClientRect();
+            return bound.top - document.body.scrollTop;
+          }
+        '''
       }))
 
   def ExpandKnowledgeCard(self, action_runner):
@@ -464,9 +474,12 @@
         'element_function': '''
           function(callback) {
             callback(document.getElementsByClassName("vk_arc")[0]);
-          }''',
-       'wait_after': { 'seconds': 2 }
+          }'''
       }))
+    action_runner.BeginInteraction('Wait', [tir_module.IS_SMOOTH])
+    action_runner.RunAction(WaitAction({'seconds' : 2}))
+    action_runner.EndInteraction('Wait', [tir_module.IS_SMOOTH])
+
 
   def RunNavigateSteps(self, action_runner):
     action_runner.RunAction(NavigateAction())
@@ -525,10 +538,12 @@
       {
         'direction': 'down',
         'scroll_requires_touch': True,
-        'wait_after': { 'seconds': 1 },
         'scroll_distance_function':
           'function() { return window.innerHeight / 2; }'
       }))
+    action_runner.BeginInteraction('Wait', [tir_module.IS_SMOOTH])
+    action_runner.RunAction(WaitAction({'seconds' : 1}))
+    action_runner.EndInteraction('Wait', [tir_module.IS_SMOOTH])
 
 
 class Page24(KeySilkCasesPage):
@@ -589,9 +604,11 @@
         'element_function': '''
           function(callback) {
             callback(document.getElementById(':f'));
-          }''',
-        'wait_after': { 'seconds': 1 }
+          }'''
       }))
+    action_runner.BeginInteraction('Wait', [tir_module.IS_SMOOTH])
+    action_runner.RunAction(WaitAction({'seconds' : 1}))
+    action_runner.EndInteraction('Wait', [tir_module.IS_SMOOTH])
 
 
 class Page26(KeySilkCasesPage):
diff --git a/tools/perf/page_sets/maps.json b/tools/perf/page_sets/maps.json
deleted file mode 100644
index d3b8f85..0000000
--- a/tools/perf/page_sets/maps.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
-  "description": "Google Maps examples",
-  "archive_data_file": "data/maps.json",
-  "make_javascript_deterministic": false,
-  "navigate_steps": [
-    { "action": "navigate" },
-    { "action": "wait", "seconds": 3 }
-  ],
-  "smoothness": { "action": "wait", "javascript": "window.testDone" },
-  "pages": [
-    {
-      "name": "Maps.maps_001",
-      "url":"http://localhost:10020/tracker.html"
-    }
-  ]
-}
diff --git a/tools/perf/page_sets/maps.py b/tools/perf/page_sets/maps.py
new file mode 100644
index 0000000..ca56029
--- /dev/null
+++ b/tools/perf/page_sets/maps.py
@@ -0,0 +1,35 @@
+# 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.
+# pylint: disable=W0401,W0614
+from telemetry.page.actions.all_page_actions import *
+from telemetry.page import page as page_module
+from telemetry.page import page_set as page_set_module
+
+
+class MapsPage(page_module.PageWithDefaultRunNavigate):
+
+  def __init__(self, page_set):
+    super(MapsPage, self).__init__(
+      url='http://localhost:10020/tracker.html',
+      page_set=page_set)
+    self.archive_data_file = 'data/maps.json'
+    self.name = 'Maps.maps_001'
+
+  def RunNavigateSteps(self, action_runner):
+    action_runner.RunAction(NavigateAction())
+    action_runner.RunAction(WaitAction({'seconds': 3}))
+
+  def RunSmoothness(self, action_runner):
+    action_runner.RunAction(WaitAction({'javascript': 'window.testDone'}))
+
+
+class MapsPageSet(page_set_module.PageSet):
+
+  """ Google Maps examples """
+
+  def __init__(self):
+    super(MapsPageSet, self).__init__(
+        archive_data_file='data/maps.json')
+
+    self.AddPage(MapsPage(self))
diff --git a/tools/perf/page_sets/media_cns_cases.json b/tools/perf/page_sets/media_cns_cases.json
deleted file mode 100644
index 1cf20a7..0000000
--- a/tools/perf/page_sets/media_cns_cases.json
+++ /dev/null
@@ -1,139 +0,0 @@
-{
-  "description": "Media benchmark on network constrained conditions.",
-  "media_metrics": {"action": "play-action"},
-  "add_browser_metrics": true,
-  "play-action": [
-    { "action": "play",
-      "wait_for_playing": true,
-      "wait_for_ended": true
-    }
-  ],
-  "seek_before_and_after_playhead": [
-    { "action": "play",
-      "wait_for_playing": true,
-      "wait_for_ended": false
-    },
-    { "_comment": "Wait for 1 second so that we know the play-head is at ~1s.",
-      "action": "wait", "seconds": 1
-    },
-    { "_comment": "Seek to before the play-head location.",
-      "action": "seek",
-      "wait_for_seeked": true,
-      "seek_time": "0.5",
-      "seek_label": "seek_warm"
-    },
-    { "_comment": "Seek to after the play-head location.",
-      "action": "seek",
-      "wait_for_seeked": true,
-      "seek_time": 15,
-      "seek_label": "seek_cold"
-    }
-  ],
-  "pages": [
-    {
-      "url": "file://tough_video_cases/video.html?id=no_constraints_webm&src=tulip2.webm&net=none"
-    },
-    {
-      "url": "file://tough_video_cases/video.html?id=cable_webm&src=tulip2.webm&net=cable"
-    },
-    {
-      "url": "file://tough_video_cases/video.html?id=wifi_webm&src=tulip2.webm&net=wifi"
-    },
-    {
-      "url": "file://tough_video_cases/video.html?id=no_constraints_ogv&src=tulip2.ogv&net=none"
-    },
-    {
-      "url": "file://tough_video_cases/video.html?id=cable_ogv&src=tulip2.ogv&net=cable"
-    },
-    {
-      "url": "file://tough_video_cases/video.html?id=wifi_ogv&src=tulip2.ogv&net=wifi"
-    },
-    {
-      "url": "file://tough_video_cases/video.html?id=no_constraints_mp4&src=tulip2.mp4&net=none"
-    },
-    {
-      "url": "file://tough_video_cases/video.html?id=cable_mp4&src=tulip2.mp4&net=cable"
-    },
-    {
-      "url": "file://tough_video_cases/video.html?id=wifi_mp4&src=tulip2.mp4&net=wifi"
-    },
-    {
-      "url": "file://tough_video_cases/video.html?id=no_constraints_wav&src=tulip2.wav&type=audio&net=none"
-    },
-    {
-      "url": "file://tough_video_cases/video.html?id=cable_wav&src=tulip2.wav&type=audio&net=cable"
-    },
-    {
-      "url": "file://tough_video_cases/video.html?id=wifi_wav&src=tulip2.wav&type=audio&net=wifi"
-    },
-    {
-      "url": "file://tough_video_cases/video.html?id=no_constraints_ogg&src=tulip2.ogg&type=audio&net=none"
-    },
-    {
-      "url": "file://tough_video_cases/video.html?id=cable_ogg&src=tulip2.ogg&type=audio&net=cable"
-    },
-    {
-      "url": "file://tough_video_cases/video.html?id=wifi_ogg&src=tulip2.ogg&type=audio&net=wifi"
-    },
-    {
-      "url": "file://tough_video_cases/video.html?id=no_constraints_mp3&src=tulip2.mp3&type=audio&net=none"
-    },
-    {
-      "url": "file://tough_video_cases/video.html?id=cable_mp3&src=tulip2.mp3&type=audio&net=cable"
-    },
-    {
-      "url": "file://tough_video_cases/video.html?id=wifi_mp3&src=tulip2.mp3&type=audio&net=wifi"
-    },
-    {
-      "url": "file://tough_video_cases/video.html?id=no_constraints_m4a&src=tulip2.m4a&type=audio&net=none"
-    },
-    {
-      "url": "file://tough_video_cases/video.html?id=cable_m4a&src=tulip2.m4a&type=audio&net=cable"
-    },
-    {
-      "url": "file://tough_video_cases/video.html?id=wifi_m4a&src=tulip2.m4a&type=audio&net=wifi"
-    },
-    {
-      "url": "file://tough_video_cases/video.html?id=wifi_mp3&src=tulip2.mp3&type=audio&net=wifi",
-      "skip_basic_metrics": true,
-      "add_browser_metrics": false,
-      "media_metrics": {"action": "seek_before_and_after_playhead"}
-    },
-    {
-      "url": "file://tough_video_cases/video.html?id=wifi_m4a&src=tulip2.m4a&type=audio&net=wifi",
-      "skip_basic_metrics": true,
-      "add_browser_metrics": false,
-      "media_metrics": {"action": "seek_before_and_after_playhead"}
-    },
-    {
-      "url": "file://tough_video_cases/video.html?id=wifi_ogg&src=tulip2.ogg&type=audio&net=wifi",
-      "skip_basic_metrics": true,
-      "add_browser_metrics": false,
-      "media_metrics": {"action": "seek_before_and_after_playhead"}
-    },
-    {
-      "url": "file://tough_video_cases/video.html?id=wifi_wav&src=tulip2.wav&type=audio&net=wifi",
-      "skip_basic_metrics": true,
-      "add_browser_metrics": false,
-      "media_metrics": {"action": "seek_before_and_after_playhead"}
-    },
-    {
-      "url": "file://tough_video_cases/video.html?id=wifi_mp4&src=tulip2.mp4&type=audio&net=wifi",
-      "skip_basic_metrics": true,
-      "add_browser_metrics": false,
-      "media_metrics": {"action": "seek_before_and_after_playhead"}
-    },
-    {
-      "url": "file://tough_video_cases/video.html?id=wifi_ogv&src=tulip2.ogv&type=audio&net=wifi",
-      "skip_basic_metrics": true,
-      "add_browser_metrics": false,
-      "media_metrics": {"action": "seek_before_and_after_playhead"}
-    },
-    {
-      "url": "file://tough_video_cases/video.html?id=wifi_webm&src=tulip2.webm&type=audio&net=wifi",
-      "skip_basic_metrics": true,
-      "add_browser_metrics": false,
-      "media_metrics": {"action": "seek_before_and_after_playhead"}
-    }
-  ]
-}
diff --git a/tools/perf/page_sets/media_cns_cases.py b/tools/perf/page_sets/media_cns_cases.py
new file mode 100644
index 0000000..7e90902
--- /dev/null
+++ b/tools/perf/page_sets/media_cns_cases.py
@@ -0,0 +1,136 @@
+# 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.
+# pylint: disable=W0401,W0614
+from telemetry.page.actions.all_page_actions import *
+from telemetry.page import page as page_module
+from telemetry.page import page_set as page_set_module
+
+
+class BasicPlayPage(page_module.PageWithDefaultRunNavigate):
+
+  def __init__(self, url, page_set):
+    super(BasicPlayPage, self).__init__(url=url, page_set=page_set)
+    self.add_browser_metrics = True
+
+  def PlayAction(self, action_runner):
+    action_runner.RunAction(PlayAction(
+      {
+        'wait_for_playing': True,
+        'wait_for_ended': True
+      }))
+
+  def RunMediaMetrics(self, action_runner):
+    self.PlayAction(action_runner)
+
+  def SeekBeforeAndAfterPlayhead(self, action_runner):
+    action_runner.RunAction(PlayAction(
+      {
+        'wait_for_playing': True,
+        'wait_for_ended': False
+      }))
+    # Wait for 1 second so that we know the play-head is at ~1s.
+    action_runner.RunAction(WaitAction(
+      {
+        'seconds': 1
+      }))
+    # Seek to before the play-head location.
+    action_runner.RunAction(SeekAction(
+      {
+        'seek_time': '0.5',
+        'wait_for_seeked': True,
+        'seek_label': 'seek_warm'
+      }))
+    # Seek to after the play-head location.
+    action_runner.RunAction(SeekAction(
+      {
+        'seek_time': 15,
+        'wait_for_seeked': True,
+        'seek_label': 'seek_cold'
+      }))
+
+class SeekBeforeAndAfterPlayheadPage(BasicPlayPage):
+
+  def __init__(self, url, page_set):
+    super(SeekBeforeAndAfterPlayheadPage, self).__init__(url=url,
+                                                         page_set=page_set)
+    self.add_browser_metrics = False
+
+  def RunMediaMetrics(self, action_runner):
+    self.SeekBeforeAndAfterPlayhead(action_runner)
+
+
+class MediaCnsCasesPageSet(page_set_module.PageSet):
+
+  """ Media benchmark on network constrained conditions. """
+
+  def __init__(self):
+    super(MediaCnsCasesPageSet, self).__init__()
+
+    urls_list = [
+      # pylint: disable=C0301
+      'file://tough_video_cases/video.html?id=no_constraints_webm&src=tulip2.webm&net=none',
+      # pylint: disable=C0301
+      'file://tough_video_cases/video.html?id=cable_webm&src=tulip2.webm&net=cable',
+      # pylint: disable=C0301
+      'file://tough_video_cases/video.html?id=wifi_webm&src=tulip2.webm&net=wifi',
+      # pylint: disable=C0301
+      'file://tough_video_cases/video.html?id=no_constraints_ogv&src=tulip2.ogv&net=none',
+      # pylint: disable=C0301
+      'file://tough_video_cases/video.html?id=cable_ogv&src=tulip2.ogv&net=cable',
+      # pylint: disable=C0301
+      'file://tough_video_cases/video.html?id=wifi_ogv&src=tulip2.ogv&net=wifi',
+      # pylint: disable=C0301
+      'file://tough_video_cases/video.html?id=no_constraints_mp4&src=tulip2.mp4&net=none',
+      # pylint: disable=C0301
+      'file://tough_video_cases/video.html?id=cable_mp4&src=tulip2.mp4&net=cable',
+      # pylint: disable=C0301
+      'file://tough_video_cases/video.html?id=wifi_mp4&src=tulip2.mp4&net=wifi',
+      # pylint: disable=C0301
+      'file://tough_video_cases/video.html?id=no_constraints_wav&src=tulip2.wav&type=audio&net=none',
+      # pylint: disable=C0301
+      'file://tough_video_cases/video.html?id=cable_wav&src=tulip2.wav&type=audio&net=cable',
+      # pylint: disable=C0301
+      'file://tough_video_cases/video.html?id=wifi_wav&src=tulip2.wav&type=audio&net=wifi',
+      # pylint: disable=C0301
+      'file://tough_video_cases/video.html?id=no_constraints_ogg&src=tulip2.ogg&type=audio&net=none',
+      # pylint: disable=C0301
+      'file://tough_video_cases/video.html?id=cable_ogg&src=tulip2.ogg&type=audio&net=cable',
+      # pylint: disable=C0301
+      'file://tough_video_cases/video.html?id=wifi_ogg&src=tulip2.ogg&type=audio&net=wifi',
+      # pylint: disable=C0301
+      'file://tough_video_cases/video.html?id=no_constraints_mp3&src=tulip2.mp3&type=audio&net=none',
+      # pylint: disable=C0301
+      'file://tough_video_cases/video.html?id=cable_mp3&src=tulip2.mp3&type=audio&net=cable',
+      # pylint: disable=C0301
+      'file://tough_video_cases/video.html?id=wifi_mp3&src=tulip2.mp3&type=audio&net=wifi',
+      # pylint: disable=C0301
+      'file://tough_video_cases/video.html?id=no_constraints_m4a&src=tulip2.m4a&type=audio&net=none',
+      # pylint: disable=C0301
+      'file://tough_video_cases/video.html?id=cable_m4a&src=tulip2.m4a&type=audio&net=cable',
+      # pylint: disable=C0301
+      'file://tough_video_cases/video.html?id=wifi_m4a&src=tulip2.m4a&type=audio&net=wifi'
+    ]
+
+    for url in urls_list:
+      self.AddPage(BasicPlayPage(url, self))
+
+    urls_list2 = [
+      # pylint: disable=C0301
+      'file://tough_video_cases/video.html?id=wifi_mp3&src=tulip2.mp3&type=audio&net=wifi',
+      # pylint: disable=C0301
+      'file://tough_video_cases/video.html?id=wifi_m4a&src=tulip2.m4a&type=audio&net=wifi',
+      # pylint: disable=C0301
+      'file://tough_video_cases/video.html?id=wifi_ogg&src=tulip2.ogg&type=audio&net=wifi',
+      # pylint: disable=C0301
+      'file://tough_video_cases/video.html?id=wifi_wav&src=tulip2.wav&type=audio&net=wifi',
+      # pylint: disable=C0301
+      'file://tough_video_cases/video.html?id=wifi_mp4&src=tulip2.mp4&type=audio&net=wifi',
+      # pylint: disable=C0301
+      'file://tough_video_cases/video.html?id=wifi_ogv&src=tulip2.ogv&type=audio&net=wifi',
+      # pylint: disable=C0301
+      'file://tough_video_cases/video.html?id=wifi_webm&src=tulip2.webm&type=audio&net=wifi'
+    ]
+
+    for url in urls_list2:
+      self.AddPage(SeekBeforeAndAfterPlayheadPage(url, self))
diff --git a/tools/perf/page_sets/mobile_memory.json b/tools/perf/page_sets/mobile_memory.json
deleted file mode 100644
index 2ea41b7..0000000
--- a/tools/perf/page_sets/mobile_memory.json
+++ /dev/null
@@ -1,57 +0,0 @@
-{
-  "description": "Mobile sites with interesting memory characteristics",
-  "archive_data_file": "data/mobile_memory.json",
-  "credentials_path": "data/credentials.json",
-  "user_agent_type": "mobile",
-  "pages": [
-    {
-      "url": "https://mail.google.com/mail/mu",
-      "credentials": "google",
-      "reload_and_gc": [
-        {"action": "reload" },
-        {"action": "wait", "seconds": 15 },
-        {"action": "js_collect_garbage" }
-      ],
-      "stress_memory": { "action": "reload_and_gc", "repeat": 3 }
-    },
-    {
-      "url": "https://www.google.com/search?site=&tbm=isch&q=google",
-      "why": "Tests usage of discardable memory",
-      "stress_memory": [
-        { "action": "scroll" },
-        { "action": "wait", "seconds": 3 },
-        { "action": "scroll" },
-        { "action": "wait", "seconds": 3 },
-        { "action": "scroll" },
-        { "action": "wait", "seconds": 3 },
-        { "action": "scroll" },
-        { "action": "wait", "javascript": "document.getElementById('rg_s').childElementCount > 300" }
-      ]
-    },
-    {
-      "url": "http://techcrunch.com",
-      "why": "Renderer process memory bloat",
-      "stress_memory": [
-        { "action": "scroll" }
-      ]
-    },
-    {
-      "url": "http://techcrunch.com/2014/02/17/pixel-brings-brings-old-school-video-game-art-to-life-in-your-home/",
-      "stress_memory": [
-        { "action": "scroll" }
-      ]
-    },
-    {
-      "url": "http://techcrunch.com/2014/02/15/kickstarter-coins-2/",
-      "stress_memory": [
-        { "action": "scroll" }
-      ]
-    },
-    {
-      "url": "http://techcrunch.com/2014/02/15/was-y-combinator-worth-it/",
-      "stress_memory": [
-        { "action": "scroll" }
-      ]
-    }
-  ]
-}
diff --git a/tools/perf/page_sets/mobile_memory.py b/tools/perf/page_sets/mobile_memory.py
new file mode 100644
index 0000000..270865e
--- /dev/null
+++ b/tools/perf/page_sets/mobile_memory.py
@@ -0,0 +1,110 @@
+# 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.
+# pylint: disable=W0401,W0614
+from telemetry.page.actions.all_page_actions import *
+from telemetry.page import page as page_module
+from telemetry.page import page_set as page_set_module
+
+
+class MobileMemoryPage(page_module.PageWithDefaultRunNavigate):
+
+  def __init__(self, url, page_set):
+    super(MobileMemoryPage, self).__init__(url=url, page_set=page_set)
+    self.credentials_path = 'data/credentials.json'
+    self.user_agent_type = 'mobile'
+    self.archive_data_file = 'data/mobile_memory.json'
+
+
+class GmailPage(MobileMemoryPage):
+
+  def __init__(self, page_set):
+    super(GmailPage, self).__init__(
+        url='https://mail.google.com/mail/mu',
+        page_set=page_set)
+
+    self.reload_and_gc = [{'action': 'reload'},
+                          {'action': 'wait',
+                           'seconds': 15},
+                          {'action': 'js_collect_garbage'}]
+    self.credentials = 'google'
+
+  def ReloadAndGc(self, action_runner):
+    action_runner.RunAction(ReloadAction())
+    action_runner.RunAction(WaitAction(
+        {
+            'seconds': 15
+        }))
+    action_runner.RunAction(JsCollectGarbageAction())
+
+  def RunStressMemory(self, action_runner):
+    for _ in xrange(3):
+      self.ReloadAndGc(action_runner)
+
+
+class GoogleSearchPage(MobileMemoryPage):
+
+  """ Why: Tests usage of discardable memory """
+
+  def __init__(self, page_set):
+    super(GoogleSearchPage, self).__init__(
+        url='https://www.google.com/search?site=&tbm=isch&q=google',
+        page_set=page_set)
+
+  def RunStressMemory(self, action_runner):
+    action_runner.RunAction(ScrollAction())
+    action_runner.RunAction(WaitAction(
+        {
+            'seconds': 3
+        }))
+    action_runner.RunAction(ScrollAction())
+    action_runner.RunAction(WaitAction(
+        {
+            'seconds': 3
+        }))
+    action_runner.RunAction(ScrollAction())
+    action_runner.RunAction(WaitAction(
+        {
+            'seconds': 3
+        }))
+    action_runner.RunAction(ScrollAction())
+    action_runner.RunAction(WaitAction(
+        {
+            'javascript':
+              'document.getElementById("rg_s").childElementCount > 300'
+        }))
+
+
+class ScrollPage(MobileMemoryPage):
+
+  def __init__(self, url, page_set):
+    super(ScrollPage, self).__init__(url=url, page_set=page_set)
+
+  def RunStressMemory(self, action_runner):
+    action_runner.RunAction(ScrollAction())
+
+
+class MobileMemoryPageSet(page_set_module.PageSet):
+
+  """ Mobile sites with interesting memory characteristics """
+
+  def __init__(self):
+    super(MobileMemoryPageSet, self).__init__(
+        credentials_path='data/credentials.json',
+        user_agent_type='mobile',
+        archive_data_file='data/mobile_memory.json')
+
+    self.AddPage(GmailPage(self))
+    self.AddPage(GoogleSearchPage(self))
+
+    urls_list = [
+      # Why: Renderer process memory bloat
+      'http://techcrunch.com',
+      # pylint: disable=C0301
+      'http://techcrunch.com/2014/02/17/pixel-brings-brings-old-school-video-game-art-to-life-in-your-home/',
+      'http://techcrunch.com/2014/02/15/kickstarter-coins-2/',
+      'http://techcrunch.com/2014/02/15/was-y-combinator-worth-it/',
+    ]
+
+    for url in urls_list:
+      self.AddPage(ScrollPage(url, self))
diff --git a/tools/perf/page_sets/mse_cases.json b/tools/perf/page_sets/mse_cases.json
deleted file mode 100644
index fb8e414..0000000
--- a/tools/perf/page_sets/mse_cases.json
+++ /dev/null
@@ -1,45 +0,0 @@
-{
-  "description": "Media source extensions perf benchmark",
-  "navigate_steps" : [
-    { "action": "navigate" },
-    { "action": "wait", "javascript": "window.__testDone == true" }
-  ],
-  "pages": [
-    {
-      "url": "file://mse_cases/startup_test.html?testType=AV"
-    },
-    {
-      "url": "file://mse_cases/startup_test.html?testType=AV&useAppendStream=true"
-    },
-    {
-      "url": "file://mse_cases/startup_test.html?testType=AV&doNotWaitForBodyOnLoad=true"
-    },
-    {
-      "url": "file://mse_cases/startup_test.html?testType=AV&useAppendStream=true&doNotWaitForBodyOnLoad=true"
-    },
-    {
-      "url": "file://mse_cases/startup_test.html?testType=V"
-    },
-    {
-      "url": "file://mse_cases/startup_test.html?testType=V&useAppendStream=true"
-    },
-    {
-      "url": "file://mse_cases/startup_test.html?testType=V&doNotWaitForBodyOnLoad=true"
-    },
-    {
-      "url": "file://mse_cases/startup_test.html?testType=V&useAppendStream=true&doNotWaitForBodyOnLoad=true"
-    },
-    {
-      "url": "file://mse_cases/startup_test.html?testType=A"
-    },
-    {
-      "url": "file://mse_cases/startup_test.html?testType=A&useAppendStream=true"
-    },
-    {
-      "url": "file://mse_cases/startup_test.html?testType=A&doNotWaitForBodyOnLoad=true"
-    },
-    {
-      "url": "file://mse_cases/startup_test.html?testType=A&useAppendStream=true&doNotWaitForBodyOnLoad=true"
-    }
-  ]
-}
diff --git a/tools/perf/page_sets/mse_cases.py b/tools/perf/page_sets/mse_cases.py
new file mode 100644
index 0000000..ff943b4
--- /dev/null
+++ b/tools/perf/page_sets/mse_cases.py
@@ -0,0 +1,52 @@
+# 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.
+# pylint: disable=W0401,W0614
+from telemetry.page.actions.all_page_actions import *
+from telemetry.page import page as page_module
+from telemetry.page import page_set as page_set_module
+
+
+class MseCasesPage(page_module.PageWithDefaultRunNavigate):
+
+  def __init__(self, url, page_set):
+    super(MseCasesPage, self).__init__(url=url, page_set=page_set)
+
+  def RunNavigateSteps(self, action_runner):
+    action_runner.RunAction(NavigateAction())
+    action_runner.RunAction(WaitAction(
+      {
+        'javascript': 'window.__testDone == true'
+      }))
+
+
+class MseCasesPageSet(page_set_module.PageSet):
+
+  """ Media source extensions perf benchmark """
+
+  def __init__(self):
+    super(MseCasesPageSet, self).__init__()
+
+    urls_list = [
+      'file://mse_cases/startup_test.html?testType=AV',
+      'file://mse_cases/startup_test.html?testType=AV&useAppendStream=true',
+      # pylint: disable=C0301
+      'file://mse_cases/startup_test.html?testType=AV&doNotWaitForBodyOnLoad=true',
+      # pylint: disable=C0301
+      'file://mse_cases/startup_test.html?testType=AV&useAppendStream=true&doNotWaitForBodyOnLoad=true',
+      'file://mse_cases/startup_test.html?testType=V',
+      'file://mse_cases/startup_test.html?testType=V&useAppendStream=true',
+      # pylint: disable=C0301
+      'file://mse_cases/startup_test.html?testType=V&doNotWaitForBodyOnLoad=true',
+      # pylint: disable=C0301
+      'file://mse_cases/startup_test.html?testType=V&useAppendStream=true&doNotWaitForBodyOnLoad=true',
+      'file://mse_cases/startup_test.html?testType=A',
+      'file://mse_cases/startup_test.html?testType=A&useAppendStream=true',
+      # pylint: disable=C0301
+      'file://mse_cases/startup_test.html?testType=A&doNotWaitForBodyOnLoad=true',
+      # pylint: disable=C0301
+      'file://mse_cases/startup_test.html?testType=A&useAppendStream=true&doNotWaitForBodyOnLoad=true',
+    ]
+
+    for url in urls_list:
+      self.AddPage(MseCasesPage(url, self))
diff --git a/tools/perf/page_sets/mse_cases/startup_test.js b/tools/perf/page_sets/mse_cases/startup_test.js
index 2fa4ba9..98f714b 100644
--- a/tools/perf/page_sets/mse_cases/startup_test.js
+++ b/tools/perf/page_sets/mse_cases/startup_test.js
@@ -370,8 +370,10 @@
         return;
 
       if (mediaElement.readyState < mediaElement.HAVE_METADATA ||
-          mediaElement.currentTime <= 0)
+          mediaElement.currentTime <= 0) {
+        listener = window.requestAnimationFrame(checkForCurrentTimeChange);
         return;
+      }
 
       for (var i = 0; i < appenders.length; ++i) {
         appenders[i].onPlaybackStarted(mediaSource);
@@ -425,15 +427,14 @@
       doneCallback(stats, timestamps);
     };
 
-    mediaElement.addEventListener('timeupdate', checkForCurrentTimeChange);
+    listener = window.requestAnimationFrame(checkForCurrentTimeChange);
 
-    listener = setInterval(checkForCurrentTimeChange, 15);
     timeout = setTimeout(function() {
       if (testDone)
         return;
 
       testDone = true;
-      window.clearInterval(listener);
+      window.cancelAnimationFrame(listener);
 
       mediaElement.pause();
       doneCallback(null);
diff --git a/tools/perf/page_sets/page_set_unittest.py b/tools/perf/page_sets/page_set_unittest.py
new file mode 100644
index 0000000..db235b3
--- /dev/null
+++ b/tools/perf/page_sets/page_set_unittest.py
@@ -0,0 +1,43 @@
+# 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 logging
+import os
+import unittest
+
+from telemetry.core import discover
+from telemetry.page import page_set as page_set_module
+from telemetry.page import page_set_archive_info
+
+
+class PageSetUnitTest(unittest.TestCase):
+
+  def testSmoke(self):
+    # Instantiate all page sets and verify that all URLs have an associated
+    # archive.
+    page_sets_dir = os.path.dirname(__file__)
+    page_sets = discover.GetAllPageSetFilenames(page_sets_dir)
+    for path in page_sets:
+      page_set = page_set_module.PageSet.FromFile(path)
+
+      # TODO: Eventually these should be fatal.
+      if not page_set.archive_data_file:
+        logging.warning('Skipping %s: missing archive data file', path)
+        continue
+      if not os.path.exists(os.path.join(page_sets_dir,
+                                         page_set.archive_data_file)):
+        logging.warning('Skipping %s: archive data file not found', path)
+        continue
+
+      wpr_archive_info = page_set_archive_info.PageSetArchiveInfo.FromFile(
+        os.path.join(page_sets_dir, page_set.archive_data_file),
+        ignore_archive=True)
+
+      logging.info('Testing %s', path)
+      for page in page_set.pages:
+        if not page.url.startswith('http'):
+          continue
+        self.assertTrue(wpr_archive_info.WprFilePathForPage(page),
+                        msg='No archive found for %s in %s' % (
+                            page.url, page_set.archive_data_file))
diff --git a/tools/perf/page_sets/pica.json b/tools/perf/page_sets/pica.json
deleted file mode 100644
index fe8ce48..0000000
--- a/tools/perf/page_sets/pica.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
-  "description": "Pica demo app for the Polymer UI toolkit",
-  "archive_data_file": "data/pica.json",
-  "pages": [
-    { "url": "http://localhost/polymer/projects/pica/",
-      "script_to_evaluate_on_commit":
-          "document.addEventListener('polymer-ready', function(){var unused = document.body.offsetHeight; window.__pica_load_time = performance.now(); setTimeout(function(){window.__polymer_ready=true}, 1000)})",
-      "navigate_steps" : [
-        { "action": "navigate" },
-        { "action": "wait", "javascript": "window.__polymer_ready" }
-      ]
-    }
-  ]
-}
diff --git a/tools/perf/page_sets/pica.py b/tools/perf/page_sets/pica.py
new file mode 100644
index 0000000..cc4867a
--- /dev/null
+++ b/tools/perf/page_sets/pica.py
@@ -0,0 +1,40 @@
+# 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.
+# pylint: disable=W0401,W0614
+from telemetry.page.actions.all_page_actions import *
+from telemetry.page import page as page_module
+from telemetry.page import page_set as page_set_module
+
+
+class PicaPage(page_module.PageWithDefaultRunNavigate):
+
+  def __init__(self, page_set):
+    super(PicaPage, self).__init__(
+      url='http://localhost/polymer/projects/pica/',
+      page_set=page_set)
+    self.archive_data_file = 'data/pica.json'
+    self.script_to_evaluate_on_commit = '''
+    document.addEventListener('polymer-ready', function() {
+      var unused = document.body.offsetHeight;
+      window.__pica_load_time = performance.now();
+      setTimeout(function(){window.__polymer_ready=true}, 1000)
+    })'''
+
+  def RunNavigateSteps(self, action_runner):
+    action_runner.RunAction(NavigateAction())
+    action_runner.RunAction(WaitAction(
+      {
+        'javascript': 'window.__polymer_ready'
+      }))
+
+
+class PicaPageSet(page_set_module.PageSet):
+
+  """ Pica demo app for the Polymer UI toolkit """
+
+  def __init__(self):
+    super(PicaPageSet, self).__init__(
+      archive_data_file='data/pica.json')
+
+    self.AddPage(PicaPage(self))
diff --git a/tools/perf/page_sets/plus_alt_posts_photos.json b/tools/perf/page_sets/plus_alt_posts_photos.json
deleted file mode 100644
index a60cee0..0000000
--- a/tools/perf/page_sets/plus_alt_posts_photos.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
-  "description": "Chrome Endure test for Google Plus.",
-  "archive_data_file": "data/plus_alt_posts_photos.json",
-  "credentials_path": "data/credentials.json",
-  "user_agent_type": "desktop",
-  "pages": [
-    {
-      "url": "https://plus.google.com/+BarackObama/posts",
-      "name": "plus_alt_posts_photos",
-      "why": "Alternate between clicking posts and albums",
-      "credentials": "google",
-      "navigate_steps": [
-        { "action": "navigate" },
-        { "action": "wait", "condition": "element", "text": "Barack Obama" },
-        { "action": "wait", "condition": "element", "selector": "span[guidedhelpid=\"posts_tab_profile\"][class*=\"s6U8x\"]" }
-      ],
-      "endure": [
-        { "action": "javascript_click", "selector": "span[guidedhelpid=\"posts_tab_profile\"]" },
-        { "action": "wait", "condition": "element", "selector": "span[guidedhelpid=\"posts_tab_profile\"][class*=\"s6U8x\"]" },
-        { "action": "wait", "seconds": 5 },
-        { "action": "javascript_click", "selector": "span[guidedhelpid=\"photos_tab_profile\"]" },
-        { "action": "wait", "condition": "element", "selector": "span[guidedhelpid=\"photos_tab_profile\"][class*=\"s6U8x\"]" },
-        { "action": "wait", "seconds": 5 }
-      ]
-    }
-  ]
-}
diff --git a/tools/perf/page_sets/plus_alt_posts_photos.py b/tools/perf/page_sets/plus_alt_posts_photos.py
new file mode 100644
index 0000000..19b5ab9
--- /dev/null
+++ b/tools/perf/page_sets/plus_alt_posts_photos.py
@@ -0,0 +1,76 @@
+# 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.
+# pylint: disable=W0401,W0614
+from telemetry.page.actions.all_page_actions import *
+from telemetry.page import page as page_module
+from telemetry.page import page_set as page_set_module
+
+
+class PlusAltPostsPhotosPage(page_module.PageWithDefaultRunNavigate):
+
+  """ Why: Alternate between clicking posts and albums """
+
+  def __init__(self, page_set):
+    super(PlusAltPostsPhotosPage, self).__init__(
+      url='https://plus.google.com/+BarackObama/posts',
+      page_set=page_set)
+    self.credentials_path = 'data/credentials.json'
+    self.credentials = 'google'
+    self.user_agent_type = 'desktop'
+    self.archive_data_file = 'data/plus_alt_posts_photos.json'
+    self.name = 'plus_alt_posts_photos'
+
+  def RunNavigateSteps(self, action_runner):
+    action_runner.RunAction(NavigateAction())
+    action_runner.RunAction(WaitAction(
+      {
+        'text': 'Barack Obama',
+        'condition': 'element'
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'condition': 'element',
+        'selector': 'span[guidedhelpid="posts_tab_profile"][class*="s6U8x"]'
+      }))
+
+  def RunEndure(self, action_runner):
+    action_runner.RunAction(ClickElementAction(
+      {
+        'selector': 'span[guidedhelpid="posts_tab_profile"]'
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'condition': 'element',
+        'selector': 'span[guidedhelpid="posts_tab_profile"][class*="s6U8x"]'
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'seconds': 5
+      }))
+    action_runner.RunAction(ClickElementAction(
+      {
+        'selector': 'span[guidedhelpid="photos_tab_profile"]'
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'condition': 'element',
+        'selector': 'span[guidedhelpid="photos_tab_profile"][class*="s6U8x"]'
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'seconds': 5
+      }))
+
+
+class PlusAltPostsPhotosPageSet(page_set_module.PageSet):
+
+  """ Chrome Endure test for Google Plus. """
+
+  def __init__(self):
+    super(PlusAltPostsPhotosPageSet, self).__init__(
+      credentials_path='data/credentials.json',
+      user_agent_type='desktop',
+      archive_data_file='data/plus_alt_posts_photos.json')
+
+    self.AddPage(PlusAltPostsPhotosPage(self))
diff --git a/tools/perf/page_sets/presubmit_unittest.py b/tools/perf/page_sets/presubmit_unittest.py
index 9a1cd5f..6e8962d 100644
--- a/tools/perf/page_sets/presubmit_unittest.py
+++ b/tools/perf/page_sets/presubmit_unittest.py
@@ -124,16 +124,6 @@
     results = self._CheckUpload([], ['/path/to/deleted.wpr.sha1'])
     self.assertResultCount(results, 0, 0)
 
-  def testNewJsonPageSetError(self):
-    results = self._CheckUpload([], [],
-                                ['/data/to/page_sets/new_page_set.json'])
-    self.assertResultCount(results, 1, 0)
-
-  def testNoNewJsonPageSetError(self):
-    results = self._CheckUpload([], [],
-                                ['/path/page_sets/data/new_page_set.json'])
-    self.assertResultCount(results, 0, 0)
-
   def testIgnoreNonHashes(self):
     results = self._CheckUpload(['/path/to/irrelevant.py'])
     self.assertResultCount(results, 0, 0)
diff --git a/tools/perf/page_sets/startup_pages.json b/tools/perf/page_sets/startup_pages.json
deleted file mode 100644
index 5f21cc7..0000000
--- a/tools/perf/page_sets/startup_pages.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
-  "description": [
-  "Pages for testing starting Chrome with a URL. ",
-  "Note that this file can't be used with record_wpr, since record_wpr ",
-  "requires a true navigate step, which we do not want for startup testing.",
-  "Instead use record_wpr startup_pages_record to record data for this test."],
-  "archive_data_file": "data/startup_pages.json",
-  "pages": [
-    {
-      "url": "about:blank",
-      "startup_url": "about:blank",
-      "why": "typical page",
-      "navigate_steps" : [
-        {"action": "wait", "seconds": 10 }
-      ]
-    },
-    {
-      "url": "http://bbc.co.uk",
-      "why": "typical page",
-      "startup_url": "http://bbc.co.uk",
-      "navigate_steps" : [
-        {"action": "wait", "seconds": 10 }
-      ]
-    },
-    {
-      "url": "http://kapook.com",
-      "why": "Horribly complex page - stress test!",
-      "startup_url": "http://kapook.com",
-      "navigate_steps" : [
-        {"action": "wait", "seconds": 10 }
-      ]
-    }
-  ]
-}
diff --git a/tools/perf/page_sets/startup_pages.py b/tools/perf/page_sets/startup_pages.py
new file mode 100644
index 0000000..f10dace
--- /dev/null
+++ b/tools/perf/page_sets/startup_pages.py
@@ -0,0 +1,37 @@
+# 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.
+# pylint: disable=W0401,W0614
+from telemetry.page.actions.all_page_actions import *
+from telemetry.page import page as page_module
+from telemetry.page import page_set as page_set_module
+
+
+class StartedPage(page_module.PageWithDefaultRunNavigate):
+
+  def __init__(self, url, startup_url, page_set):
+    super(StartedPage, self).__init__(url=url, page_set=page_set)
+    self.archive_data_file = 'data/startup_pages.json'
+    self.startup_url = startup_url
+
+  def RunNavigateSteps(self, action_runner):
+    action_runner.RunAction(WaitAction({'seconds': 10}))
+
+class StartupPagesPageSet(page_set_module.PageSet):
+
+  """ Pages for testing starting Chrome with a URL.
+  Note that this file can't be used with record_wpr, since record_wpr requires
+  a true navigate step, which we do not want for startup testing. Instead use
+  record_wpr startup_pages_record to record data for this test.
+  """
+
+  def __init__(self):
+    super(StartupPagesPageSet, self).__init__(
+        archive_data_file='data/startup_pages.json')
+
+    # Typical page.
+    self.AddPage(StartedPage('about:blank', 'about:blank', self))
+    # Typical page.
+    self.AddPage(StartedPage('http://bbc.co.uk', 'http://bbc.co.uk', self))
+    # Horribly complex page - stress test!
+    self.AddPage(StartedPage('http://kapook.com', 'http://kapook.com', self))
diff --git a/tools/perf/page_sets/startup_pages_record.json b/tools/perf/page_sets/startup_pages_record.json
deleted file mode 100644
index fd1aec9..0000000
--- a/tools/perf/page_sets/startup_pages_record.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
-  "description": 
-  ["Pages to record data for testing starting Chrome with a URL. We can't use",
-   "startup_pages.json with record_wpr, since record_wpr requires a default", 
-   "navigate step, which we don't want for startup testing; but we do want to",
-   "record the pages it uses.",
-   "Also, record_wpr fails on about:blank, which we want to include in startup", 
-   "testing."],
-  "archive_data_file": "data/startup_pages.json",
-  "pages": [
-    {
-      "url": "http://bbc.co.uk",
-      "why": "typical page"
-    },
-    {
-      "url": "http://kapook.com",
-      "why": "Horribly complex page - stress test!"
-    }
-  ]
-}
\ No newline at end of file
diff --git a/tools/perf/page_sets/startup_pages_record.py b/tools/perf/page_sets/startup_pages_record.py
new file mode 100644
index 0000000..66d144e
--- /dev/null
+++ b/tools/perf/page_sets/startup_pages_record.py
@@ -0,0 +1,38 @@
+# 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.
+# pylint: disable=W0401,W0614
+from telemetry.page.actions.all_page_actions import *
+from telemetry.page import page as page_module
+from telemetry.page import page_set as page_set_module
+
+
+class StartupPagesRecordPage(page_module.PageWithDefaultRunNavigate):
+
+  def __init__(self, url, page_set):
+    super(StartupPagesRecordPage, self).__init__(url=url, page_set=page_set)
+    self.archive_data_file = 'data/startup_pages.json'
+
+
+class StartupPagesRecordPageSet(page_set_module.PageSet):
+
+  """ Pages to record data for testing starting Chrome with a URL.
+      We can't use startup_pages.json with record_wpr, since record_wpr
+      requires a default navigate step, which we don't want for startup
+      testing; but we do want to record the pages it uses. Also, record_wpr
+      fails on about:blank, which we want to include in startup testing.
+  """
+
+  def __init__(self):
+    super(StartupPagesRecordPageSet, self).__init__(
+        archive_data_file='data/startup_pages.json')
+
+    urls_list = [
+        # Why: typical page
+        'http://bbc.co.uk',
+        # Why: Horribly complex page - stress test!
+        'http://kapook.com',
+    ]
+
+    for url in urls_list:
+      self.AddPage(StartupPagesRecordPage(url, self))
diff --git a/tools/perf/page_sets/top_10_mobile.json b/tools/perf/page_sets/top_10_mobile.json
deleted file mode 100644
index 7ffd4b3..0000000
--- a/tools/perf/page_sets/top_10_mobile.json
+++ /dev/null
@@ -1,49 +0,0 @@
-{
-  "description": "Top 10 mobile sites",
-  "archive_data_file": "data/top_10_mobile.json",
-  "credentials_path": "data/credentials.json",
-  "user_agent_type": "mobile",
-  "smoothness": { "action": "scroll" },
-  "pages": [
-    {
-      "url": "https://www.google.com/#hl=en&q=science",
-      "why": "#1 (Alexa) most visited page worldwide, picked a reasonable search term"
-    },
-    {
-      "url": "https://m.facebook.com/rihanna",
-      "why": "#2 (Alexa) most visited page worldwide, picked the most liked page"
-    },
-    {
-      "url": "http://m.youtube.com/results?q=science",
-      "why": "#3 (Alexa) most visited page worldwide, picked a reasonable search term"
-    },
-    {
-      "url": "http://search.yahoo.com/search;_ylt=?p=google",
-      "why": "#4 (Alexa) most visited page worldwide, picked a reasonable search term"
-    },
-    {
-      "url": "http://www.baidu.com/s?word=google",
-      "why": "#5 (Alexa) most visited page worldwide, picked a reasonable search term"
-    },
-    {
-      "url": "http://en.m.wikipedia.org/wiki/Science",
-      "why": "#6 (Alexa) most visited page worldwide, picked a reasonable page"
-    },
-    {
-      "url": "https://mobile.twitter.com/justinbieber?skip_interstitial=true",
-      "why": "#10 (Alexa) most visited page worldwide, picked the most followed user"
-    },
-    {
-      "url": "http://www.amazon.com/gp/aw/s/?k=nexus",
-      "why": "#11 (Alexa) most visited page worldwide, picked a reasonable page"
-    },
-    {
-      "url": "http://m.taobao.com/channel/act/mobile/20131111-women.html",
-      "why": "#13 (Alexa) most visited page worldwide, picked the first real page"
-    },
-    {
-      "url": "http://yandex.ru/touchsearch?text=science",
-      "why": "#18 (Alexa) most visited page worldwide, picked a reasonable search term"
-    }
-  ]
-}
diff --git a/tools/perf/page_sets/top_10_mobile.py b/tools/perf/page_sets/top_10_mobile.py
new file mode 100644
index 0000000..27fc272
--- /dev/null
+++ b/tools/perf/page_sets/top_10_mobile.py
@@ -0,0 +1,65 @@
+# 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.
+# pylint: disable=W0401,W0614
+from telemetry.page.actions.all_page_actions import *
+from telemetry.page import page as page_module
+from telemetry.page import page_set as page_set_module
+
+
+class Top10MobilePage(page_module.PageWithDefaultRunNavigate):
+
+  def __init__(self, url, page_set):
+    super(Top10MobilePage, self).__init__(url=url, page_set=page_set)
+    self.credentials_path = 'data/credentials.json'
+    self.user_agent_type = 'mobile'
+    self.archive_data_file = 'data/top_10_mobile.json'
+
+  def RunSmoothness(self, action_runner):
+    action_runner.RunAction(ScrollAction())
+
+
+class Top10MobilePageSet(page_set_module.PageSet):
+
+  """ Top 10 mobile sites """
+
+  def __init__(self):
+    super(Top10MobilePageSet, self).__init__(
+      credentials_path='data/credentials.json',
+      user_agent_type='mobile',
+      archive_data_file='data/top_10_mobile.json')
+
+    urls_list = [
+      # Why: #1 (Alexa) most visited page worldwide, picked a reasonable
+      # search term
+      'https://www.google.com/#hl=en&q=science',
+      # Why: #2 (Alexa) most visited page worldwide, picked the most liked
+      # page
+      'https://m.facebook.com/rihanna',
+      # Why: #3 (Alexa) most visited page worldwide, picked a reasonable
+      # search term
+      'http://m.youtube.com/results?q=science',
+      # Why: #4 (Alexa) most visited page worldwide, picked a reasonable search
+      # term
+      'http://search.yahoo.com/search;_ylt=?p=google',
+      # Why: #5 (Alexa) most visited page worldwide, picked a reasonable search
+      # term
+      'http://www.baidu.com/s?word=google',
+      # Why: #6 (Alexa) most visited page worldwide, picked a reasonable page
+      'http://en.m.wikipedia.org/wiki/Science',
+      # Why: #10 (Alexa) most visited page worldwide, picked the most followed
+      # user
+      'https://mobile.twitter.com/justinbieber?skip_interstitial=true',
+      # Why: #11 (Alexa) most visited page worldwide, picked a reasonable
+      # page
+      'http://www.amazon.com/gp/aw/s/?k=nexus',
+      # Why: #13 (Alexa) most visited page worldwide, picked the first real
+      # page
+      'http://m.taobao.com/channel/act/mobile/20131111-women.html',
+      # Why: #18 (Alexa) most visited page worldwide, picked a reasonable
+      # search term
+      'http://yandex.ru/touchsearch?text=science',
+    ]
+
+    for url in urls_list:
+      self.AddPage(Top10MobilePage(url, self))
diff --git a/tools/perf/page_sets/top_25.json b/tools/perf/page_sets/top_25.json
deleted file mode 100644
index 0155baa..0000000
--- a/tools/perf/page_sets/top_25.json
+++ /dev/null
@@ -1,325 +0,0 @@
-{
-  "description": "Pages hand-picked for 2012 CrOS scrolling tuning efforts.",
-  "archive_data_file": "data/top_25.json",
-  "credentials_path": "data/credentials.json",
-  "user_agent_type": "desktop",
-  "smoothness": { "action": "scroll" },
-  "repaint": { "action": "repaint_continuously", "seconds": 5 },
-  "pages": [
-    {
-      "url": "https://www.google.com/#hl=en&q=barack+obama",
-      "why": "top google property; a google tab is often open",
-      "navigate_steps" : [
-        { "action": "navigate" },
-        { "action": "wait", "condition": "element", "text": "Next" }
-      ],
-      "stress_memory": [
-        { "action": "scroll" },
-        { "action": "javascript_click", "text": "Next",
-          "wait_until" : {"condition": "href_change" }},
-        { "action": "wait", "condition": "element", "text": "Next" },
-        { "action": "scroll" },
-        { "action": "javascript_click", "text": "Next",
-          "wait_until" : {"condition": "href_change" }},
-        { "action": "wait", "condition": "element", "text": "Next" },
-        { "action": "scroll" },
-        { "action": "javascript_click", "text": "Next",
-          "wait_until" : {"condition": "href_change" }},
-        { "action": "wait", "condition": "element", "text": "Previous" },
-        { "action": "scroll" },
-        { "action": "javascript_click", "text": "Previous",
-          "wait_until" : {"condition": "href_change" }},
-        { "action": "wait", "condition": "element", "text": "Previous" },
-        { "action": "scroll" },
-        { "action": "javascript_click", "text": "Previous",
-          "wait_until" : {"condition": "href_change" }},
-        { "action": "wait", "condition": "element", "text": "Previous" },
-        { "action": "scroll" },
-        { "action": "javascript_click", "text": "Previous",
-          "wait_until" : {"condition": "href_change" }},
-        { "action": "wait", "condition": "element", "text": "Images" },
-        { "action": "scroll" },
-        { "action": "javascript_click", "text": "Images",
-          "wait_until" : {"condition": "href_change" }},
-        { "action": "wait", "condition": "element", "text": "Images" }
-      ]
-    },
-    {
-      "url": "https://mail.google.com/mail/",
-      "why": "productivity, top google properties",
-      "credentials": "google",
-      "navigate_steps" : [
-        { "action": "navigate" },
-        { "action": "wait", "javascript": "window.gmonkey !== undefined && document.getElementById('gb') !== null" }
-      ],
-      "smoothness": {
-        "action": "scroll",
-        "scrollable_element_function": "function(callback) { gmonkey.load('2.0', function(api) { callback(api.getScrollableElement()); }); }"
-      },
-      "stress_memory": [
-        { "action": "javascript_click", "selector": "a[href=\"https://mail.google.com/mail/u/0/?shva=1#starred\"]",
-            "wait_until" : {"condition": "href_change" }},
-        { "action": "javascript_click", "selector": "a[href=\"https://mail.google.com/mail/u/0/?shva=1#inbox\"]",
-            "wait_until" : {"condition": "href_change" }}
-      ]
-    },
-    {
-      "url": "https://www.google.com/calendar/",
-      "why": "productivity, top google properties",
-      "credentials": "google",
-      "navigate_steps" : [
-        { "action": "navigate" },
-        { "action": "wait", "seconds":  2 },
-        { "action": "wait", "condition": "element", "selector":  "div[class~=\"navForward\"]" },
-        { "action": "javascript", "expression": "(function() { var elem = document.createElement('meta');elem.name='viewport';elem.content='initial-scale=1';document.body.appendChild(elem); })();" },
-        { "action": "wait", "seconds":  1 }
-      ],
-      "smoothness": {
-        "action": "scroll",
-        "scrollable_element_function": "function(callback) { callback(document.getElementById('scrolltimedeventswk')); }"
-      },
-      "stress_memory": [
-        { "action": "javascript_click", "selector": "div[class~=\"navForward\"]" },
-        { "action": "wait", "seconds": 2 },
-        { "action": "wait", "condition": "element", "selector": "div[class~=\"navForward\"]" },
-        { "action": "javascript_click", "selector": "div[class~=\"navForward\"]" },
-        { "action": "wait", "seconds": 2 },
-        { "action": "wait", "condition": "element", "selector": "div[class~=\"navForward\"]" },
-        { "action": "javascript_click", "selector": "div[class~=\"navForward\"]" },
-        { "action": "wait", "seconds": 2 },
-        { "action": "wait", "condition": "element", "selector": "div[class~=\"navForward\"]" },
-        { "action": "javascript_click", "selector": "div[class~=\"navForward\"]" },
-        { "action": "wait", "seconds": 2 },
-        { "action": "wait", "condition": "element", "selector": "div[class~=\"navBack\"]" },
-        { "action": "javascript_click", "selector": "div[class~=\"navBack\"]" },
-        { "action": "wait", "seconds": 2 },
-        { "action": "wait", "condition": "element", "selector": "div[class~=\"navBack\"]" },
-        { "action": "javascript_click", "selector": "div[class~=\"navBack\"]" },
-        { "action": "wait", "seconds": 2 },
-        { "action": "wait", "condition": "element", "selector": "div[class~=\"navBack\"]" },
-        { "action": "javascript_click", "selector": "div[class~=\"navBack\"]" },
-        { "action": "wait", "seconds": 2 },
-        { "action": "wait", "condition": "element", "selector": "div[class~=\"navBack\"]" },
-        { "action": "javascript_click", "selector": "div[class~=\"navBack\"]" },
-        { "action": "wait", "seconds": 2 },
-        { "action": "wait", "condition": "element", "selector": "div[class~=\"navBack\"]" }
-      ]
-    },
-    {
-      "url": "https://www.google.com/search?q=cats&tbm=isch",
-      "why": "tough image case; top google properties",
-      "credentials": "google"
-    },
-    {
-      "name": "Docs  (1 open document tab)",
-      "url": "https://docs.google.com/document/d/1X-IKNjtEnx-WW5JIKRLsyhz5sbsat3mfTpAPUSX3_s4/view",
-      "why": "productivity, top google properties; Sample doc in the link",
-      "credentials": "google",
-      "navigate_steps" : [
-        { "action": "navigate" },
-        { "action": "wait", "seconds": 2 },
-        { "action": "wait", "javascript": "document.getElementsByClassName('kix-appview-editor').length" }
-      ],
-      "smoothness": {
-        "action": "scroll",
-        "scrollable_element_function": "function(callback) { callback(document.getElementsByClassName('kix-appview-editor')[0]); }"
-      }
-    },
-    {
-      "url": "https://plus.google.com/110031535020051778989/posts",
-      "why": "social; top google property; Public profile; infinite scrolls",
-      "credentials": "google",
-      "navigate_steps" : [
-        { "action": "navigate" },
-        { "action": "wait", "condition": "element", "text": "Home" }
-      ],
-      "smoothness": {
-        "action": "scroll",
-        "scroll_is_infinite": true
-      },
-      "stress_memory": [
-        { "action": "javascript_click", "text": "Home" },
-        { "action": "wait", "seconds": 2 },
-        { "action": "wait", "condition": "element", "text": "Profile" },
-        { "action": "javascript_click", "text": "Profile" },
-        { "action": "wait", "seconds": 2 },
-        { "action": "wait", "condition": "element", "text": "Explore" },
-        { "action": "javascript_click", "text": "Explore" },
-        { "action": "wait", "seconds": 2 },
-        { "action": "wait", "condition": "element", "text": "Events" },
-        { "action": "javascript_click", "text": "Events" },
-        { "action": "wait", "seconds": 2 },
-        { "action": "wait", "condition": "element", "text": "Communities" },
-        { "action": "javascript_click", "text": "Communities" },
-        { "action": "wait", "seconds": 2 },
-        { "action": "wait", "condition": "element", "text": "Home" }
-      ]
-    },
-    {
-      "url": "http://www.youtube.com",
-      "why": "#3 (Alexa global)",
-      "navigate_steps" : [
-        { "action": "navigate" },
-        { "action": "wait", "seconds": 2 }
-      ],
-      "credentials": "google"
-    },
-    {
-      "name": "Blogger",
-      "url": "http://googlewebmastercentral.blogspot.com/",
-      "why": "#11 (Alexa global), google property; some blogger layouts have infinite scroll but more interesting",
-      "navigate_steps" : [
-        { "action": "navigate" },
-        { "action": "wait", "condition": "element", "text": "accessibility" }
-      ],
-      "stress_memory": [
-        { "action": "javascript_click", "text": "accessibility",
-          "wait_until" : {"condition": "navigate" }},
-        { "action": "scroll" },
-        { "action": "javascript_click", "text": "advanced",
-          "wait_until" : {"condition": "navigate" }},
-        { "action": "scroll" },
-        { "action": "javascript_click", "text": "beginner",
-          "wait_until" : {"condition": "navigate" }},
-        { "action": "scroll" },
-        { "action": "javascript_click", "text": "Home",
-          "wait_until" : {"condition": "navigate" }}
-      ]
-    },
-    {
-      "name": "Wordpress",
-      "url": "http://en.blog.wordpress.com/2012/09/04/freshly-pressed-editors-picks-for-august-2012/",
-      "why": "#18 (Alexa global), Picked an interesting post",
-      "navigate_steps" : [
-        { "action": "navigate" },
-        { "action": "wait", "condition": "element", "selector": "a[href=\"http://en.blog.wordpress.com/2012/08/30/new-themes-able-and-sight/\"]" }
-      ],
-      "stress_memory": [
-        { "action": "scroll" },
-        { "action": "javascript_click", "selector": "a[href=\"http://en.blog.wordpress.com/2012/08/30/new-themes-able-and-sight/\"]",
-          "wait_until" : { "condition": "navigate" }},
-        { "action": "scroll" },
-        { "action": "javascript_click", "text": "Features",
-          "wait_until" : { "condition": "navigate" }},
-        { "action": "scroll" },
-        { "action": "javascript_click", "text": "News",
-          "wait_until" : { "condition": "navigate" }},
-        { "action": "scroll" }
-      ]
-    },
-    {
-      "name": "Facebook",
-      "url": "http://www.facebook.com/barackobama",
-      "why": "top social,Public profile",
-      "credentials": "facebook",
-      "navigate_steps" : [
-        { "action": "navigate" },
-        { "action": "wait", "condition": "element", "text": "About" }
-      ],
-      "smoothness": {
-        "action": "scroll",
-        "scroll_is_infinite": true
-      },
-      "stress_memory": [
-        { "action": "javascript_click", "text": "About",
-          "wait_until" : { "condition": "navigate" }},
-        { "action": "javascript_click", "text": "The Audacity of Hope",
-          "wait_until" : { "condition": "navigate" }},
-        { "action": "javascript_click", "text": "Back to Barack Obama's Timeline",
-          "wait_until" : { "condition": "navigate" }},
-        { "action": "javascript_click", "text": "About",
-          "wait_until" : { "condition": "navigate" }},
-        { "action": "javascript_click", "text": "Elected to U.S. Senate",
-          "wait_until" : { "condition": "navigate" }},
-        { "action": "javascript_click", "text": "Home",
-          "wait_until" : { "condition": "navigate" }}
-      ]
-    },
-    {
-      "name": "LinkedIn",
-      "url": "http://www.linkedin.com/in/linustorvalds",
-      "why": "#12 (Alexa global),Public profile"
-    },
-    {
-      "name": "Wikipedia (1 tab)",
-      "url": "http://en.wikipedia.org/wiki/Wikipedia",
-      "why": "#6 (Alexa) most visited worldwide,Picked an interesting page"
-    },
-    {
-      "name": "Twitter",
-      "url": "https://twitter.com/katyperry",
-      "why": "#8 (Alexa global),Picked an interesting page",
-      "navigate_steps" : [
-        { "action": "navigate" },
-        { "action": "wait", "seconds": 2 }
-      ],
-      "smoothness": {
-        "action": "scroll",
-        "scroll_is_infinite": true
-      }
-    },
-    {
-      "name": "Pinterest",
-      "url": "http://pinterest.com",
-      "why": "#37 (Alexa global)",
-      "smoothness": {
-        "action": "scroll",
-        "scroll_is_infinite": true
-      }
-    },
-    {
-      "name": "ESPN",
-      "url": "http://espn.go.com",
-      "why": "#1 sports",
-      "smoothness": {
-        "action": "scroll",
-        "left_start_percentage": 0.1
-      }
-    },
-    {
-      "url": "http://news.yahoo.com",
-      "why": "#1 news worldwide (Alexa global)"
-    },
-    {
-      "url": "http://www.cnn.com",
-      "why": "#2 news worldwide"
-    },
-    {
-      "name": "Weather.com",
-      "url": "http://www.weather.com/weather/right-now/Mountain+View+CA+94043",
-      "why": "#7 (Alexa news); #27 total time spent,Picked interesting page"
-    },
-    {
-      "url": "http://www.amazon.com",
-      "why": "#1 world commerce website by visits; #3 commerce in the US by time spent"
-    },
-    {
-      "url": "http://www.ebay.com",
-      "why": "#1 commerce website by time spent by users in US"
-    },
-    {
-      "url": "http://games.yahoo.com",
-      "why": "#1 games according to Alexa (with actual games in it)",
-      "navigate_steps" : [
-        { "action": "navigate" },
-        { "action": "wait", "seconds": 2 }
-      ]
-    },
-    {
-      "url": "http://booking.com",
-      "why": "#1 Alexa recreation"
-    },
-    {
-      "url": "http://answers.yahoo.com",
-      "why": "#1 Alexa reference"
-    },
-    {
-      "url": "http://sports.yahoo.com/",
-      "why": "#1 Alexa sports"
-    },
-    {
-      "url": "http://techcrunch.com",
-      "why": "top tech blog"
-    }
-  ]
-}
diff --git a/tools/perf/page_sets/top_25.py b/tools/perf/page_sets/top_25.py
new file mode 100644
index 0000000..43899c0
--- /dev/null
+++ b/tools/perf/page_sets/top_25.py
@@ -0,0 +1,839 @@
+# 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.
+# pylint: disable=W0401,W0614
+from telemetry.page.actions.all_page_actions import *
+from telemetry.page import page as page_module
+from telemetry.page import page_set as page_set_module
+
+
+class Top25Page(page_module.PageWithDefaultRunNavigate):
+
+  def __init__(self, url, page_set):
+    super(Top25Page, self).__init__(url=url, page_set=page_set)
+    self.credentials_path = 'data/credentials.json'
+    self.user_agent_type = 'desktop'
+    self.archive_data_file = 'data/top_25.json'
+
+  def RunSmoothness(self, action_runner):
+    action_runner.RunAction(ScrollAction())
+
+  def RunRepaint(self, action_runner):
+    action_runner.RunAction(RepaintContinuouslyAction(
+      {
+        'seconds': 5
+      }))
+
+
+class GoogleWebSearchPage(Top25Page):
+
+  """ Why: top google property; a google tab is often open """
+
+  def __init__(self, page_set):
+    super(GoogleWebSearchPage, self).__init__(
+      url='https://www.google.com/#hl=en&q=barack+obama',
+      page_set=page_set)
+
+  def RunNavigateSteps(self, action_runner):
+    action_runner.RunAction(NavigateAction())
+    action_runner.RunAction(WaitAction(
+      {
+        'text' : 'Next',
+        'condition': 'element'
+      }))
+
+  def RunStressMemory(self, action_runner):
+    action_runner.RunAction(ScrollAction())
+    action_runner.RunAction(ClickElementAction(
+      {
+        'text' : 'Next',
+        'wait_until': {
+          'condition': 'href_change'
+        }
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'text' : 'Next',
+        'condition': 'element'
+      }))
+    action_runner.RunAction(ScrollAction())
+    action_runner.RunAction(ClickElementAction(
+      {
+        'text' : 'Next',
+        'wait_until': {
+          'condition': 'href_change'
+        }
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'text' : 'Next',
+        'condition': 'element'
+      }))
+    action_runner.RunAction(ScrollAction())
+    action_runner.RunAction(ClickElementAction(
+      {
+        'text' : 'Next',
+        'wait_until': {
+          'condition': 'href_change'
+        }
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'text' : 'Previous',
+        'condition': 'element'
+      }))
+    action_runner.RunAction(ScrollAction())
+    action_runner.RunAction(ClickElementAction(
+      {
+        'text' : 'Previous',
+        'wait_until': {
+          'condition': 'href_change'
+        }
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'text' : 'Previous',
+        'condition': 'element'
+      }))
+    action_runner.RunAction(ScrollAction())
+    action_runner.RunAction(ClickElementAction(
+      {
+        'text' : 'Previous',
+        'wait_until': {
+          'condition': 'href_change'
+        }
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'text' : 'Previous',
+        'condition': 'element'
+      }))
+    action_runner.RunAction(ScrollAction())
+    action_runner.RunAction(ClickElementAction(
+      {
+        'text' : 'Previous',
+        'wait_until': {
+          'condition': 'href_change'
+        }
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'text' : 'Images',
+        'condition': 'element'
+      }))
+    action_runner.RunAction(ScrollAction())
+    action_runner.RunAction(ClickElementAction(
+      {
+        'text' : 'Images',
+        'wait_until': {
+          'condition': 'href_change'
+        }
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'text' : 'Images',
+        'condition': 'element'
+      }))
+
+
+class GmailPage(Top25Page):
+
+  """ Why: productivity, top google properties """
+
+  def __init__(self, page_set):
+    super(GmailPage, self).__init__(
+      url='https://mail.google.com/mail/',
+      page_set=page_set)
+
+    self.credentials = 'google'
+
+  def RunNavigateSteps(self, action_runner):
+    action_runner.RunAction(NavigateAction())
+    action_runner.RunAction(WaitAction(
+      {
+        'javascript': ('window.gmonkey !== undefined &&'
+                       'document.getElementById("gb") !== null')
+      }))
+
+  def RunStressMemory(self, action_runner):
+    action_runner.RunAction(ClickElementAction(
+      {
+        'wait_until': {
+          'condition': 'href_change'
+        },
+        'selector': 'a[href="https://mail.google.com/mail/u/0/?shva=1#starred"]'
+      }))
+    action_runner.RunAction(ClickElementAction(
+      {
+        'wait_until': {
+          'condition': 'href_change'
+        },
+        'selector': 'a[href="https://mail.google.com/mail/u/0/?shva=1#inbox"]'
+      }))
+
+  def RunSmoothness(self, action_runner):
+    action_runner.RunAction(ScrollAction(
+      {
+        'scrollable_element_function': '''
+          function(callback) {
+            gmonkey.load('2.0', function(api) {
+              callback(api.getScrollableElement());
+            });
+          }'''
+      }))
+
+
+class GoogleCalendarPage(Top25Page):
+
+  """ Why: productivity, top google properties """
+
+  def __init__(self, page_set):
+    super(GoogleCalendarPage, self).__init__(
+      url='https://www.google.com/calendar/',
+      page_set=page_set)
+
+    self.credentials = 'google'
+
+  def RunNavigateSteps(self, action_runner):
+    action_runner.RunAction(NavigateAction())
+    action_runner.RunAction(WaitAction(
+      {
+        'seconds': 2
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'condition': 'element',
+        'selector': 'div[class~="navForward"]'
+      }))
+    action_runner.RunAction(JavascriptAction(
+      {
+        'expression': '''
+          (function() {
+            var elem = document.createElement('meta');
+            elem.name='viewport';
+            elem.content='initial-scale=1';
+            document.body.appendChild(elem);
+          })();'''
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'seconds': 1
+      }))
+
+  def RunStressMemory(self, action_runner):
+    action_runner.RunAction(ClickElementAction(
+      {
+        'selector': 'div[class~="navForward"]'
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'seconds': 2
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'condition': 'element',
+        'selector': 'div[class~="navForward"]'
+      }))
+    action_runner.RunAction(ClickElementAction(
+      {
+        'selector': 'div[class~="navForward"]'
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'seconds': 2
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'condition': 'element',
+        'selector': 'div[class~="navForward"]'
+      }))
+    action_runner.RunAction(ClickElementAction(
+      {
+        'selector': 'div[class~="navForward"]'
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'seconds': 2
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'condition': 'element',
+        'selector': 'div[class~="navForward"]'
+      }))
+    action_runner.RunAction(ClickElementAction(
+      {
+        'selector': 'div[class~="navForward"]'
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'seconds': 2
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'condition': 'element',
+        'selector': 'div[class~="navBack"]'
+      }))
+    action_runner.RunAction(ClickElementAction(
+      {
+        'selector': 'div[class~="navBack"]'
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'seconds': 2
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'condition': 'element',
+        'selector': 'div[class~="navBack"]'
+      }))
+    action_runner.RunAction(ClickElementAction(
+      {
+        'selector': 'div[class~="navBack"]'
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'seconds': 2
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'condition': 'element',
+        'selector': 'div[class~="navBack"]'
+      }))
+    action_runner.RunAction(ClickElementAction(
+      {
+        'selector': 'div[class~="navBack"]'
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'seconds': 2
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'condition': 'element',
+        'selector': 'div[class~="navBack"]'
+      }))
+    action_runner.RunAction(ClickElementAction(
+      {
+        'selector': 'div[class~="navBack"]'
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'seconds': 2
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'condition': 'element',
+        'selector': 'div[class~="navBack"]'
+      }))
+
+  def RunSmoothness(self, action_runner):
+    action_runner.RunAction(ScrollAction(
+      {
+        'scrollable_element_function': '''
+          function(callback) {
+            callback(document.getElementById('scrolltimedeventswk'));
+          }'''
+      }))
+
+
+class GoogleImageSearchPage(Top25Page):
+
+  """ Why: tough image case; top google properties """
+
+  def __init__(self, page_set):
+    super(GoogleImageSearchPage, self).__init__(
+      url='https://www.google.com/search?q=cats&tbm=isch',
+      page_set=page_set)
+
+    self.credentials = 'google'
+
+
+class GoogleDocPage(Top25Page):
+
+  """ Why: productivity, top google properties; Sample doc in the link """
+
+  def __init__(self, page_set):
+    super(GoogleDocPage, self).__init__(
+      # pylint: disable=C0301
+      url='https://docs.google.com/document/d/1X-IKNjtEnx-WW5JIKRLsyhz5sbsat3mfTpAPUSX3_s4/view',
+      page_set=page_set)
+
+    self.name = 'Docs  (1 open document tab)'
+    self.credentials = 'google'
+
+  def RunNavigateSteps(self, action_runner):
+    action_runner.RunAction(NavigateAction())
+    action_runner.RunAction(WaitAction(
+      {
+        'seconds': 2
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'javascript':
+          'document.getElementsByClassName("kix-appview-editor").length'
+      }))
+
+  def RunSmoothness(self, action_runner):
+    action_runner.RunAction(ScrollAction(
+      {
+        'scrollable_element_function': '''
+          function(callback) {
+            callback(document.getElementsByClassName('kix-appview-editor')[0]);
+          }'''
+      }))
+
+
+class GooglePlusPage(Top25Page):
+
+  """ Why: social; top google property; Public profile; infinite scrolls """
+
+  def __init__(self, page_set):
+    super(GooglePlusPage, self).__init__(
+      url='https://plus.google.com/110031535020051778989/posts',
+      page_set=page_set)
+
+    self.credentials = 'google'
+
+  def RunNavigateSteps(self, action_runner):
+    action_runner.RunAction(NavigateAction())
+    action_runner.RunAction(WaitAction(
+      {
+        'text' : 'Home',
+        'condition': 'element'
+      }))
+
+  def RunStressMemory(self, action_runner):
+    action_runner.RunAction(ClickElementAction(
+      {
+        'text' : 'Home'
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'seconds': 2
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'text' : 'Profile',
+        'condition': 'element'
+      }))
+    action_runner.RunAction(ClickElementAction(
+      {
+        'text' : 'Profile'
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'seconds': 2
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'text' : 'Explore',
+        'condition': 'element'
+      }))
+    action_runner.RunAction(ClickElementAction(
+      {
+        'text' : 'Explore'
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'seconds': 2
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'text' : 'Events',
+        'condition': 'element'
+      }))
+    action_runner.RunAction(ClickElementAction(
+      {
+        'text' : 'Events'
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'seconds': 2
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'text' : 'Communities',
+        'condition': 'element'
+      }))
+    action_runner.RunAction(ClickElementAction(
+      {
+        'text' : 'Communities'
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'seconds': 2
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'text' : 'Home',
+        'condition': 'element'
+      }))
+
+  def RunSmoothness(self, action_runner):
+    action_runner.RunAction(ScrollAction(
+      {
+        "scroll_is_infinite": True
+      }))
+
+
+class YoutubePage(Top25Page):
+
+  """ Why: #3 (Alexa global) """
+
+  def __init__(self, page_set):
+    super(YoutubePage, self).__init__(
+      url='http://www.youtube.com',
+      page_set=page_set)
+
+    self.credentials = 'google'
+
+  def RunNavigateSteps(self, action_runner):
+    action_runner.RunAction(NavigateAction())
+    action_runner.RunAction(WaitAction(
+      {
+        'seconds': 2
+      }))
+
+
+class BlogspotPage(Top25Page):
+
+  """ Why: #11 (Alexa global), google property; some blogger layouts have
+  infinite scroll but more interesting """
+
+  def __init__(self, page_set):
+    super(BlogspotPage, self).__init__(
+      url='http://googlewebmastercentral.blogspot.com/',
+      page_set=page_set)
+
+    self.name = 'Blogger'
+
+  def RunNavigateSteps(self, action_runner):
+    action_runner.RunAction(NavigateAction())
+    action_runner.RunAction(WaitAction(
+      {
+        'text' : 'accessibility',
+        'condition': 'element'
+      }))
+
+  def RunStressMemory(self, action_runner):
+    action_runner.RunAction(ClickElementAction(
+      {
+        'text' : 'accessibility',
+        'wait_until': {
+          'condition': 'navigate'
+        }
+      }))
+    action_runner.RunAction(ScrollAction())
+    action_runner.RunAction(ClickElementAction(
+      {
+        'text' : 'advanced',
+        'wait_until': {
+          'condition': 'navigate'
+        }
+      }))
+    action_runner.RunAction(ScrollAction())
+    action_runner.RunAction(ClickElementAction(
+      {
+        'text' : 'beginner',
+        'wait_until': {
+          'condition': 'navigate'
+        }
+      }))
+    action_runner.RunAction(ScrollAction())
+    action_runner.RunAction(ClickElementAction(
+      {
+        'text' : 'Home',
+        'wait_until': {
+          'condition': 'navigate'
+        }
+      }))
+
+
+class WordpressPage(Top25Page):
+
+  """ Why: #18 (Alexa global), Picked an interesting post """
+
+  def __init__(self, page_set):
+    super(WordpressPage, self).__init__(
+      # pylint: disable=C0301
+      url='http://en.blog.wordpress.com/2012/09/04/freshly-pressed-editors-picks-for-august-2012/',
+      page_set=page_set)
+
+    self.name = 'Wordpress'
+
+  def RunNavigateSteps(self, action_runner):
+    action_runner.RunAction(NavigateAction())
+    action_runner.RunAction(WaitAction(
+      {
+        'condition': 'element',
+        'selector':
+          # pylint: disable=C0301
+          'a[href="http://en.blog.wordpress.com/2012/08/30/new-themes-able-and-sight/"]'
+      }))
+
+  def RunStressMemory(self, action_runner):
+    action_runner.RunAction(ScrollAction())
+    action_runner.RunAction(ClickElementAction(
+      {
+        'wait_until': {
+          'condition': 'navigate'
+        },
+        'selector':
+          # pylint: disable=C0301
+          'a[href="http://en.blog.wordpress.com/2012/08/30/new-themes-able-and-sight/"]'
+      }))
+    action_runner.RunAction(ScrollAction())
+    action_runner.RunAction(ClickElementAction(
+      {
+        'text' : 'Features',
+        'wait_until': {
+          'condition': 'navigate'
+        }
+      }))
+    action_runner.RunAction(ScrollAction())
+    action_runner.RunAction(ClickElementAction(
+      {
+        'text' : 'News',
+        'wait_until': {
+          'condition': 'navigate'
+        }
+      }))
+    action_runner.RunAction(ScrollAction())
+
+
+class FacebookPage(Top25Page):
+
+  """ Why: top social,Public profile """
+
+  def __init__(self, page_set):
+    super(FacebookPage, self).__init__(
+      url='http://www.facebook.com/barackobama',
+      page_set=page_set)
+
+    self.name = 'Facebook'
+    self.credentials = 'facebook'
+
+  def RunNavigateSteps(self, action_runner):
+    action_runner.RunAction(NavigateAction())
+    action_runner.RunAction(WaitAction(
+      {
+        'text' : 'About',
+        'condition': 'element'
+      }))
+
+  def RunStressMemory(self, action_runner):
+    action_runner.RunAction(ClickElementAction(
+      {
+        'text' : 'About',
+        'wait_until': {
+          'condition': 'navigate'
+        }
+      }))
+    action_runner.RunAction(ClickElementAction(
+      {
+        'text' : 'The Audacity of Hope',
+        'wait_until': {
+          'condition': 'navigate'
+        }
+      }))
+    action_runner.RunAction(ClickElementAction(
+      {
+        'text' : 'Back to Barack Obama\'s Timeline',
+        'wait_until': {
+          'condition': 'navigate'
+        }
+      }))
+    action_runner.RunAction(ClickElementAction(
+      {
+        'text' : 'About',
+        'wait_until': {
+          'condition': 'navigate'
+        }
+      }))
+    action_runner.RunAction(ClickElementAction(
+      {
+        'text' : 'Elected to U.S. Senate',
+        'wait_until': {
+          'condition': 'navigate'
+        }
+      }))
+    action_runner.RunAction(ClickElementAction(
+      {
+        'text' : 'Home',
+        'wait_until': {
+          'condition': 'navigate'
+        }
+      }))
+
+  def RunSmoothness(self, action_runner):
+    action_runner.RunAction(ScrollAction(
+      {
+        'scroll_is_infinite': True
+      }))
+
+
+class LinkedinPage(Top25Page):
+
+  """ Why: #12 (Alexa global),Public profile """
+
+  def __init__(self, page_set):
+    super(LinkedinPage, self).__init__(
+      url='http://www.linkedin.com/in/linustorvalds',
+      page_set=page_set)
+
+    self.name = 'LinkedIn'
+
+
+class WikipediaPage(Top25Page):
+
+  """ Why: #6 (Alexa) most visited worldwide,Picked an interesting page """
+
+  def __init__(self, page_set):
+    super(WikipediaPage, self).__init__(
+      url='http://en.wikipedia.org/wiki/Wikipedia',
+      page_set=page_set)
+
+    self.name = 'Wikipedia (1 tab)'
+
+
+class TwitterPage(Top25Page):
+
+  """ Why: #8 (Alexa global),Picked an interesting page """
+
+  def __init__(self, page_set):
+    super(TwitterPage, self).__init__(
+      url='https://twitter.com/katyperry',
+      page_set=page_set)
+
+    self.name = 'Twitter'
+
+  def RunNavigateSteps(self, action_runner):
+    action_runner.RunAction(NavigateAction())
+    action_runner.RunAction(WaitAction(
+      {
+        'seconds': 2
+      }))
+
+  def RunSmoothness(self, action_runner):
+    action_runner.RunAction(ScrollAction(
+      {
+        'scroll_is_infinite': True
+      }))
+
+
+class PinterestPage(Top25Page):
+
+  """ Why: #37 (Alexa global) """
+
+  def __init__(self, page_set):
+    super(PinterestPage, self).__init__(
+      url='http://pinterest.com',
+      page_set=page_set)
+
+    self.name = 'Pinterest'
+
+  def RunSmoothness(self, action_runner):
+    action_runner.RunAction(ScrollAction(
+      {
+        'scroll_is_infinite': True
+      }))
+
+
+class ESPNPage(Top25Page):
+
+  """ Why: #1 sports """
+
+  def __init__(self, page_set):
+    super(ESPNPage, self).__init__(
+      url='http://espn.go.com',
+      page_set=page_set)
+
+    self.name = 'ESPN'
+
+  def RunSmoothness(self, action_runner):
+    action_runner.RunAction(ScrollAction(
+      {
+        'left_start_percentage': 0.1
+      }))
+
+
+class WeatherDotComPage(Top25Page):
+
+  """ Why: #7 (Alexa news); #27 total time spent,Picked interesting page """
+
+  def __init__(self, page_set):
+    super(WeatherDotComPage, self).__init__(
+      # pylint: disable=C0301
+      url='http://www.weather.com/weather/right-now/Mountain+View+CA+94043',
+      page_set=page_set)
+
+    self.name = 'Weather.com'
+
+
+class YahooGamesPage(Top25Page):
+
+  """ Why: #1 games according to Alexa (with actual games in it) """
+
+  def __init__(self, page_set):
+    super(YahooGamesPage, self).__init__(
+      url='http://games.yahoo.com',
+      page_set=page_set)
+
+  def RunNavigateSteps(self, action_runner):
+    action_runner.RunAction(NavigateAction())
+    action_runner.RunAction(WaitAction(
+      {
+        'seconds': 2
+      }))
+
+
+class Top25PageSet(page_set_module.PageSet):
+
+  """ Pages hand-picked for 2012 CrOS scrolling tuning efforts. """
+
+  def __init__(self):
+    super(Top25PageSet, self).__init__(
+      credentials_path='data/credentials.json',
+      user_agent_type='desktop',
+      archive_data_file='data/top_25.json')
+
+    self.AddPage(GoogleWebSearchPage(self))
+    self.AddPage(GmailPage(self))
+    self.AddPage(GoogleCalendarPage(self))
+    self.AddPage(GoogleImageSearchPage(self))
+    self.AddPage(GoogleDocPage(self))
+    self.AddPage(GooglePlusPage(self))
+    self.AddPage(YoutubePage(self))
+    self.AddPage(BlogspotPage(self))
+    self.AddPage(WordpressPage(self))
+    self.AddPage(FacebookPage(self))
+    self.AddPage(LinkedinPage(self))
+    self.AddPage(WikipediaPage(self))
+    self.AddPage(TwitterPage(self))
+    self.AddPage(PinterestPage(self))
+    self.AddPage(ESPNPage(self))
+    self.AddPage(WeatherDotComPage(self))
+    self.AddPage(YahooGamesPage(self))
+
+    other_urls = [
+      # Why: #1 news worldwide (Alexa global)
+      'http://news.yahoo.com',
+      # Why: #2 news worldwide
+      'http://www.cnn.com',
+      # Why: #1 world commerce website by visits; #3 commerce in the US by time
+      # spent
+      'http://www.amazon.com',
+      # Why: #1 commerce website by time spent by users in US
+      'http://www.ebay.com',
+      # Why: #1 Alexa recreation
+      'http://booking.com',
+      # Why: #1 Alexa reference
+      'http://answers.yahoo.com',
+      # Why: #1 Alexa sports
+      'http://sports.yahoo.com/',
+      # Why: top tech blog
+      'http://techcrunch.com'
+    ]
+
+    for url in other_urls:
+      self.AddPage(Top25Page(url, self))
diff --git a/tools/perf/page_sets/top_desktop_sites_2012Q3.py b/tools/perf/page_sets/top_desktop_sites_2012Q3.py
index b7c639a..285dea6 100644
--- a/tools/perf/page_sets/top_desktop_sites_2012Q3.py
+++ b/tools/perf/page_sets/top_desktop_sites_2012Q3.py
@@ -199,7 +199,7 @@
       'http://download.cnet.com/windows/?tag=hdr;brandnav',
       'https://rapidshare.com/#!shop',
       'http://people.com.cn',
-      'http://ucoz.r',
+      'http://ucoz.ru',
       'http://free.fr',
       'http://nicovideo.jp',
       # pylint: disable=C0301
@@ -232,7 +232,7 @@
       'http://wsj.com',
       'http://web.de',
       'http://sweetim.com',
-      'http://rambler.r',
+      'http://rambler.ru',
       'http://gmx.net',
       'http://www.indeed.com/jobs?q=software&l=Mountain+View%2C+CA',
       'http://ilivid.com',
diff --git a/tools/perf/page_sets/tough_canvas_cases.py b/tools/perf/page_sets/tough_canvas_cases.py
index 1f7236d..09312be 100644
--- a/tools/perf/page_sets/tough_canvas_cases.py
+++ b/tools/perf/page_sets/tough_canvas_cases.py
@@ -50,10 +50,12 @@
 
     self.AddPage(MicrosofFirefliesPage(self))
 
+    # Failing on Nexus 5 (http://crbug.com/364248):
+    # 'http://geoapis.appspot.com/agdnZW9hcGlzchMLEgtFeGFtcGxlQ29kZRjh1wIM',
+
     urls_list = [
       'http://mudcu.be/labs/JS1k/BreathingGalaxies.html',
       'http://runway.countlessprojects.com/prototype/performance_test.html',
-      'http://geoapis.appspot.com/agdnZW9hcGlzchMLEgtFeGFtcGxlQ29kZRjh1wIM',
       # pylint: disable=C0301
       'http://ie.microsoft.com/testdrive/Performance/FishIETank/Default.html',
       'http://ie.microsoft.com/testdrive/Performance/SpeedReading/Default.html',
diff --git a/tools/perf/page_sets/tough_pinch_zoom_cases.py b/tools/perf/page_sets/tough_pinch_zoom_cases.py
index 8683b2d..7a5d2c7 100644
--- a/tools/perf/page_sets/tough_pinch_zoom_cases.py
+++ b/tools/perf/page_sets/tough_pinch_zoom_cases.py
@@ -71,7 +71,7 @@
 
   def RunNavigateSteps(self, action_runner):
     action_runner.RunAction(NavigateAction())
-    action_runner.RunAction(WaitAction({'second':2}))
+    action_runner.RunAction(WaitAction({'seconds':2}))
 
   def RunSmoothness(self, action_runner):
     action_runner.RunAction(PinchAction(
@@ -135,7 +135,7 @@
 
   def RunNavigateSteps(self, action_runner):
     action_runner.RunAction(NavigateAction())
-    action_runner.RunAction(WaitAction({'second':2}))
+    action_runner.RunAction(WaitAction({'seconds':2}))
 
 class BlogSpotPage(ToughPinchZoomCasesPage):
 
@@ -218,7 +218,7 @@
 
   def RunNavigateSteps(self, action_runner):
     action_runner.RunAction(NavigateAction())
-    action_runner.RunAction(WaitAction({'second':2}))
+    action_runner.RunAction(WaitAction({'seconds':2}))
 
 class ESPNPage(ToughPinchZoomCasesPage):
 
@@ -256,7 +256,7 @@
 
   def RunNavigateSteps(self, action_runner):
     action_runner.RunAction(NavigateAction())
-    action_runner.RunAction(WaitAction({'second':2}))
+    action_runner.RunAction(WaitAction({'seconds':2}))
 
 class ToughPinchZoomCasesPageSet(page_set_module.PageSet):
 
diff --git a/tools/perf/page_sets/tough_scheduling_cases.py b/tools/perf/page_sets/tough_scheduling_cases.py
index 7a96065..5f853fe 100644
--- a/tools/perf/page_sets/tough_scheduling_cases.py
+++ b/tools/perf/page_sets/tough_scheduling_cases.py
@@ -296,6 +296,27 @@
         "seconds": 3
       }))
 
+class Page20(ToughSchedulingCasesPage):
+
+  """ Why: Simple JS touch dragging """
+
+  def __init__(self, page_set):
+    super(Page20, self).__init__(
+      url='file://tough_scheduling_cases/simple_touch_drag.html',
+      page_set=page_set)
+
+  def RunSmoothness(self, action_runner):
+    action_runner.RunAction(ScrollAction(
+      {
+        'scrollable_element_function': '''
+          function(callback) {
+            callback(document.getElementById('card'));
+          }''',
+        'scroll_requires_touch': True,
+        'direction': 'up',
+        'speed': 150,
+        'scroll_distance_function': 'function() { return 400; }'
+      }))
 
 class ToughSchedulingCasesPageSet(page_set_module.PageSet):
 
@@ -347,4 +368,4 @@
     self.AddPage(Page17(self))
     self.AddPage(Page18(self))
     self.AddPage(Page19(self))
-
+    self.AddPage(Page20(self))
diff --git a/tools/perf/page_sets/tough_scheduling_cases/simple_touch_drag.html b/tools/perf/page_sets/tough_scheduling_cases/simple_touch_drag.html
new file mode 100644
index 0000000..d53cce9
--- /dev/null
+++ b/tools/perf/page_sets/tough_scheduling_cases/simple_touch_drag.html
@@ -0,0 +1,68 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset=utf-8 />
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<title>Touch handler dragging</title>
+
+<style type="text/css">
+  #card {
+    background-color: blue;
+    border: 1px solid black;
+    width: 100px;
+    height: 50px;
+  }
+</style>
+<script>
+  /*
+   This test case drags a div on touch move events. This serves as the baseline
+   of latency measurement for pages with non-empty JS touch handler.
+  */
+  var card;
+  var startX = 0;
+  var startY = 0;
+  var deltaX = 0;
+  var deltaY = 0;
+  function startExperiment() {
+    card = document.getElementById('card');
+    card.addEventListener('touchstart', onTouchStart, false);
+    card.addEventListener('touchmove', onTouchMove, false);
+    card.addEventListener('touchend', onTouchEnd, false);
+    card.addEventListener('touchcancel', onTouchEnd, false);
+  }
+
+  window.addEventListener('load', startExperiment);
+
+  function onTouchStart(e) {
+    var touch = e.targetTouches[0];
+    startX = touch.clientX;
+    startY = touch.clientY;
+    e.preventDefault();
+  }
+
+  function onTouchMove(e) {
+    var touch = e.targetTouches[0];
+    deltaX = touch.clientX - startX;
+    deltaY = touch.clientY - startY;
+    window.requestAnimationFrame(onAnimationTouchMove);
+    e.preventDefault();
+  }
+
+  function onAnimationTouchMove() {
+    card.style.webkitTransform = 'translate(' + deltaX + 'px, ' + deltaY + 'px)';
+  }
+
+  function onTouchEnd(e) {
+    window.requestAnimationFrame(onAnimationTouchEnd);
+    e.preventDefault();
+  }
+
+  function onAnimationTouchEnd() {
+    card.style.webkitTransform = '';
+  }
+</script>
+</head>
+<body>
+    <div id='card'></div>
+</body>
+</html>
diff --git a/tools/perf/page_sets/typical_25.json b/tools/perf/page_sets/typical_25.json
deleted file mode 100644
index 0fb5b98..0000000
--- a/tools/perf/page_sets/typical_25.json
+++ /dev/null
@@ -1,92 +0,0 @@
-{
-  "description": "Pages designed to represent the median, not highly optimized web",
-  "archive_data_file": "data/typical_25.json",
-  "user_agent_type": "desktop",
-  "smoothness": { "action": "scroll" },
-  "pages": [
-    {
-      "url": "http://www.nick.com/games",
-      "why": "Alexa games #48"
-    },
-    {
-      "url": "http://www.rei.com/",
-      "why": "Alexa sports #45"
-    },
-    {
-      "url": "http://www.fifa.com/",
-      "why": "Alexa sports #50"
-    },
-    {
-      "url": "http://www.gamestop.com/ps3",
-      "why": "Alexa shopping #41"
-    },
-    {
-      "url": "http://www.barnesandnoble.com/u/books-bestselling-books/379003057/",
-      "why": "Alexa shopping #25"
-    },
-    {
-      "url": "http://www.economist.com/news/science-and-technology/21573529-small-models-cosmic-phenomena-are-shedding-light-real-thing-how-build",
-      "why": "Alexa news #55"
-    },
-    {
-      "url": "http://www.theonion.com",
-      "why": "Alexa news #67"
-    },
-    {
-      "url": "http://arstechnica.com/"
-    },
-    {
-      "url": "http://allrecipes.com/Recipe/Pull-Apart-Hot-Cross-Buns/Detail.aspx",
-      "why": "Alexa home #10"
-    },
-    {
-      "url": "http://www.html5rocks.com/en/"
-    },
-    {
-      "url": "http://www.mlb.com/"
-    },
-    {
-      "url": "http://gawker.com/5939683/based-on-a-true-story-is-a-rotten-lie-i-hope-you-never-believe"
-    },
-    {
-      "url": "http://www.imdb.com/title/tt0910970/"
-    },
-    {
-      "url": "http://www.flickr.com/search/?q=monkeys&f=hp"
-    },
-    {
-      "url": "http://money.cnn.com/"
-    },
-    {
-      "url": "http://www.nationalgeographic.com/"
-    },
-    {
-      "url": "http://premierleague.com"
-    },
-    {
-      "url": "http://www.osubeavers.com/"
-    },
-    {
-      "url": "http://walgreens.com"
-    },
-    {
-      "url": "http://colorado.edu"
-    },
-    {
-      "url": "http://www.ticketmaster.com/JAY-Z-and-Justin-Timberlake-tickets/artist/1837448?brand=none&tm_link=tm_homeA_rc_name2"
-    },
-    {
-      "url": "http://www.theverge.com/2013/3/5/4061684/inside-ted-the-smartest-bubble-in-the-world"
-    },
-    {
-      "url": "http://www.airbnb.com/"
-    },
-    {
-      "url": "http://www.ign.com/"
-    },
-    {
-      "url": "http://www.fda.gov",
-      "why": "Alexa health #25"
-    }
-  ]
-}
diff --git a/tools/perf/page_sets/typical_25.py b/tools/perf/page_sets/typical_25.py
new file mode 100644
index 0000000..c2454f3
--- /dev/null
+++ b/tools/perf/page_sets/typical_25.py
@@ -0,0 +1,72 @@
+# 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.
+# pylint: disable=W0401,W0614
+from telemetry.page.actions.all_page_actions import *
+from telemetry.page import page as page_module
+from telemetry.page import page_set as page_set_module
+
+
+class Typical25Page(page_module.PageWithDefaultRunNavigate):
+
+  def __init__(self, url, page_set):
+    super(Typical25Page, self).__init__(url=url, page_set=page_set)
+    self.user_agent_type = 'desktop'
+    self.archive_data_file = 'data/typical_25.json'
+
+  def RunSmoothness(self, action_runner):
+    action_runner.RunAction(ScrollAction())
+
+
+class Typical25PageSet(page_set_module.PageSet):
+
+  """ Pages designed to represent the median, not highly optimized web """
+
+  def __init__(self):
+    super(Typical25PageSet, self).__init__(
+      user_agent_type='desktop',
+      archive_data_file='data/typical_25.json')
+
+    urls_list = [
+      # Why: Alexa games #48
+      'http://www.nick.com/games',
+      # Why: Alexa sports #45
+      'http://www.rei.com/',
+      # Why: Alexa sports #50
+      'http://www.fifa.com/',
+      # Why: Alexa shopping #41
+      'http://www.gamestop.com/ps3',
+      # Why: Alexa shopping #25
+      'http://www.barnesandnoble.com/u/books-bestselling-books/379003057/',
+      # Why: Alexa news #55
+      ('http://www.economist.com/news/science-and-technology/21573529-small-'
+       'models-cosmic-phenomena-are-shedding-light-real-thing-how-build'),
+      # Why: Alexa news #67
+      'http://www.theonion.com',
+      'http://arstechnica.com/',
+      # Why: Alexa home #10
+      'http://allrecipes.com/Recipe/Pull-Apart-Hot-Cross-Buns/Detail.aspx',
+      'http://www.html5rocks.com/en/',
+      'http://www.mlb.com/',
+      # pylint: disable=C0301
+      'http://gawker.com/5939683/based-on-a-true-story-is-a-rotten-lie-i-hope-you-never-believe',
+      'http://www.imdb.com/title/tt0910970/',
+      'http://www.flickr.com/search/?q=monkeys&f=hp',
+      'http://money.cnn.com/',
+      'http://www.nationalgeographic.com/',
+      'http://premierleague.com',
+      'http://www.osubeavers.com/',
+      'http://walgreens.com',
+      'http://colorado.edu',
+      ('http://www.ticketmaster.com/JAY-Z-and-Justin-Timberlake-tickets/artist/'
+       '1837448?brand=none&tm_link=tm_homeA_rc_name2'),
+      # pylint: disable=C0301
+      'http://www.theverge.com/2013/3/5/4061684/inside-ted-the-smartest-bubble-in-the-world',
+      'http://www.airbnb.com/',
+      'http://www.ign.com/',
+      # Why: Alexa health #25
+      'http://www.fda.gov',
+    ]
+
+    for url in urls_list:
+      self.AddPage(Typical25Page(url, self))
diff --git a/tools/perf/page_sets/webrtc_cases.json b/tools/perf/page_sets/webrtc_cases.json
deleted file mode 100644
index c5e9f95..0000000
--- a/tools/perf/page_sets/webrtc_cases.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "description": "WebRTC tests for Real-time audio and video communication.",
-  "serving_dirs": ["third_party/webrtc/samples/js"],
-  "pages": [
-    {
-      "url": "file://webrtc/local-video.html",
-      "why": "Simple test page only showing a local video stream",
-      "webrtc": [
-        { "action": "navigate" },
-        { "action": "wait", "seconds": 10 },
-        { "action": "javascript", "expression": "checkForErrors();" }
-      ]
-    },
-    {
-      "url": "file://third_party/webrtc/samples/js/demos/html/pc1.html",
-      "why": "Loopback video call using the PeerConnection API.",
-      "webrtc": [
-        { "action": "javascript_click", "selector": "button[id=\"btn1\"]" },
-        { "action": "wait", "seconds": 2 },
-        { "action": "javascript_click", "selector": "button[id=\"btn2\"]" },
-        { "action": "wait", "seconds": 10 },
-        { "action": "javascript_click", "selector": "button[id=\"btn3\"]" }
-      ],
-      "endure": [
-        { "action": "javascript_click", "selector": "button[id=\"btn1\"]" },
-        { "action": "wait", "seconds": 2 },
-        { "action": "javascript_click", "selector": "button[id=\"btn2\"]" },
-        { "action": "wait", "seconds": 10 },
-        { "action": "javascript_click", "selector": "button[id=\"btn3\"]" }
-      ]
-    }
-  ]
-}
diff --git a/tools/perf/page_sets/webrtc_cases.py b/tools/perf/page_sets/webrtc_cases.py
new file mode 100644
index 0000000..a02b1c8
--- /dev/null
+++ b/tools/perf/page_sets/webrtc_cases.py
@@ -0,0 +1,100 @@
+# 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.
+# pylint: disable=W0401,W0614
+from telemetry.page.actions.all_page_actions import *
+from telemetry.page import page as page_module
+from telemetry.page import page_set as page_set_module
+
+
+class WebrtcCasesPage(page_module.PageWithDefaultRunNavigate):
+
+  def __init__(self, url, page_set):
+    super(WebrtcCasesPage, self).__init__(url=url, page_set=page_set)
+
+
+class Page1(WebrtcCasesPage):
+
+  """ Why: Simple test page only showing a local video stream """
+
+  def __init__(self, page_set):
+    super(Page1, self).__init__(
+      url='file://webrtc/local-video.html',
+      page_set=page_set)
+
+  def RunWebrtc(self, action_runner):
+    action_runner.RunAction(NavigateAction())
+    action_runner.RunAction(WaitAction(
+      {
+        'seconds': 10
+      }))
+    action_runner.RunAction(JavascriptAction(
+      {
+        'expression': 'checkForErrors();'
+      }))
+
+
+class Page2(WebrtcCasesPage):
+
+  """ Why: Loopback video call using the PeerConnection API. """
+
+  def __init__(self, page_set):
+    super(Page2, self).__init__(
+      url='file://third_party/webrtc/samples/js/demos/html/pc1.html',
+      page_set=page_set)
+
+  def RunEndure(self, action_runner):
+    action_runner.RunAction(ClickElementAction(
+      {
+        'selector': 'button[id="btn1"]'
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'seconds': 2
+      }))
+    action_runner.RunAction(ClickElementAction(
+      {
+        'selector': 'button[id="btn2"]'
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'seconds': 10
+      }))
+    action_runner.RunAction(ClickElementAction(
+      {
+        'selector': 'button[id="btn3"]'
+      }))
+
+  def RunWebrtc(self, action_runner):
+    action_runner.RunAction(ClickElementAction(
+      {
+        'selector': 'button[id="btn1"]'
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'seconds': 2
+      }))
+    action_runner.RunAction(ClickElementAction(
+      {
+        'selector': 'button[id="btn2"]'
+      }))
+    action_runner.RunAction(WaitAction(
+      {
+        'seconds': 10
+      }))
+    action_runner.RunAction(ClickElementAction(
+      {
+        'selector': 'button[id="btn3"]'
+      }))
+
+
+class WebrtcCasesPageSet(page_set_module.PageSet):
+
+  """ WebRTC tests for Real-time audio and video communication. """
+
+  def __init__(self):
+    super(WebrtcCasesPageSet, self).__init__(
+      serving_dirs=['third_party/webrtc/samples/js'])
+
+    self.AddPage(Page1(self))
+    self.AddPage(Page2(self))
diff --git a/tools/perf/profile_creators/small_profile_creator.py b/tools/perf/profile_creators/small_profile_creator.py
index 71fe137..b9c2de8 100644
--- a/tools/perf/profile_creators/small_profile_creator.py
+++ b/tools/perf/profile_creators/small_profile_creator.py
@@ -16,7 +16,7 @@
 
   def __init__(self):
     super(SmallProfileCreator, self).__init__()
-    typical_25 = os.path.join(util.GetBaseDir(), 'page_sets', 'typical_25.json')
+    typical_25 = os.path.join(util.GetBaseDir(), 'page_sets', 'typical_25.py')
     self._page_set = page_set.PageSet.FromFile(typical_25)
 
     # Open all links in the same tab save for the last _NUM_TABS links which
diff --git a/tools/perf_expectations/perf_expectations.json b/tools/perf_expectations/perf_expectations.json
index 7fdd164..a2d3429 100644
--- a/tools/perf_expectations/perf_expectations.json
+++ b/tools/perf_expectations/perf_expectations.json
@@ -372,8 +372,8 @@
  "linux-release/sizes/nacl_helper-bss/bss": {"reva": 252556, "revb": 252565, "type": "absolute", "better": "lower", "improve": 120631, "regress": 133329, "sha1": "7839f502"},
  "linux-release/sizes/nacl_helper-data/data": {"reva": 252556, "revb": 252565, "type": "absolute", "better": "lower", "improve": 118392, "regress": 130856, "sha1": "65801b05"},
  "linux-release/sizes/nacl_helper-si/initializers": {"reva": 193069, "revb": 193093, "type": "absolute", "better": "lower", "improve": 15, "regress": 17, "sha1": "d7d27d7d"},
- "linux-release/sizes/nacl_helper-text/text": {"reva": 255987, "revb": 256040, "type": "absolute", "better": "lower", "improve": 5055513, "regress": 5587673, "sha1": "03763ed9"},
- "linux-release/sizes/nacl_helper-textrel/textrel": {"reva": 117081, "revb": 117299, "type": "absolute", "better": "lower", "improve": 0, "regress": 0, "sha1": "309d1763"},
+ "linux-release/sizes/nacl_helper-text/text": {"reva": 264283, "revb": 264283, "type": "absolute", "better": "lower", "improve": 5331362, "regress": 5892560, "sha1": "334fb958"},
+ "linux-release/sizes/nacl_helper-textrel/textrel": {"reva": 264283, "revb": 264283, "type": "absolute", "better": "lower", "improve": 0, "regress": 0, "sha1": "0efaa99f"},
  "linux-release/sizes/nacl_helper/nacl_helper": {"reva": 252556, "revb": 252565, "type": "absolute", "better": "lower", "improve": 7107875, "regress": 7856073, "sha1": "010f0c67"},
  "linux-release/sizes/nacl_helper_bootstrap-bss/bss": {"reva": 114822, "revb": 115019, "type": "absolute", "better": "lower", "improve": 1019980807, "regress": 1127347209, "sha1": "a4ff54ab"},
  "linux-release/sizes/nacl_helper_bootstrap-data/data": {"reva": 114822, "revb": 115019, "type": "absolute", "better": "lower", "improve": 19, "regress": 21, "sha1": "6a3e92f4"},
diff --git a/tools/resources/find_used_resources.py b/tools/resources/find_used_resources.py
index adce50e..63bcaa0 100755
--- a/tools/resources/find_used_resources.py
+++ b/tools/resources/find_used_resources.py
@@ -9,7 +9,7 @@
 
 usage = """find_used_resources.py
 
-Prints out (to sdout) the sorted list of resource ids that are part of unknown
+Prints out (to stdout) the sorted list of resource ids that are part of unknown
 pragma warning in the given build log (via stdin).
 
 This script is used to find the resources that are actually compiled in Chrome
@@ -32,11 +32,11 @@
   """
   used_resources = set()
   unknown_pragma_warning_pattern = re.compile(
-      'whitelisted_resource_(?P<resource_id>[0-9]*)')
+      'whitelisted_resource_(?P<resource_id>[0-9]+)')
   for ln in input:
     match = unknown_pragma_warning_pattern.search(ln)
     if match:
-      resource_id = match.group('resource_id')
+      resource_id = int(match.group('resource_id'))
       used_resources.add(resource_id)
   return sorted(used_resources)
 
@@ -46,8 +46,8 @@
     sys.exit(1)
   else:
     used_resources = GetResourceIdsInPragmaWarnings(sys.stdin)
-    for rid in used_resources:
-      sys.stdout.write(rid + '\n')
+    for resource_id in used_resources:
+      sys.stdout.write('%d\n' % resource_id)
 
 if __name__ == '__main__':
   Main()
diff --git a/tools/telemetry/OWNERS b/tools/telemetry/OWNERS
index 440be18..d1d6fd7 100644
--- a/tools/telemetry/OWNERS
+++ b/tools/telemetry/OWNERS
@@ -1,11 +1,16 @@
+# For more information about telemetry development, please see:
+# http://dev.chromium.org/developers/telemetry/telemetry-feature-guidelines
+
 # The set noparent is temporary until src/OWNERS isn't *.
 set noparent
+
+# For CrOS-related changes.
+achuith@chromium.org
+
 bulach@chromium.org
 dtu@chromium.org
-nduca@chromium.org
-tonyg@chromium.org
+ernstm@chromium.org
 hartmanng@chromium.org
 marja@chromium.org
-
-# for cros-related changes.
-achuith@chromium.org 
+nduca@chromium.org
+tonyg@chromium.org
diff --git a/tools/telemetry/bin/.gitignore b/tools/telemetry/bin/.gitignore
new file mode 100644
index 0000000..3f1bb9d
--- /dev/null
+++ b/tools/telemetry/bin/.gitignore
@@ -0,0 +1,2 @@
+*/*
+!**.sha1
diff --git a/tools/telemetry/bin/prebuilt/android/README.txt b/tools/telemetry/bin/README.txt
similarity index 100%
rename from tools/telemetry/bin/prebuilt/android/README.txt
rename to tools/telemetry/bin/README.txt
diff --git a/tools/telemetry/bin/prebuilt/android/device_forwarder.sha1 b/tools/telemetry/bin/android/device_forwarder.sha1
similarity index 100%
rename from tools/telemetry/bin/prebuilt/android/device_forwarder.sha1
rename to tools/telemetry/bin/android/device_forwarder.sha1
diff --git a/tools/telemetry/bin/prebuilt/android/file_poller.sha1 b/tools/telemetry/bin/android/file_poller.sha1
similarity index 100%
rename from tools/telemetry/bin/prebuilt/android/file_poller.sha1
rename to tools/telemetry/bin/android/file_poller.sha1
diff --git a/tools/telemetry/bin/prebuilt/android/md5sum_bin.sha1 b/tools/telemetry/bin/android/md5sum_bin.sha1
similarity index 100%
rename from tools/telemetry/bin/prebuilt/android/md5sum_bin.sha1
rename to tools/telemetry/bin/android/md5sum_bin.sha1
diff --git a/tools/telemetry/bin/prebuilt/android/perf.sha1 b/tools/telemetry/bin/android/perf.sha1
similarity index 100%
rename from tools/telemetry/bin/prebuilt/android/perf.sha1
rename to tools/telemetry/bin/android/perf.sha1
diff --git a/tools/telemetry/bin/prebuilt/android/perfhost.sha1 b/tools/telemetry/bin/android/perfhost.sha1
similarity index 100%
rename from tools/telemetry/bin/prebuilt/android/perfhost.sha1
rename to tools/telemetry/bin/android/perfhost.sha1
diff --git a/tools/telemetry/bin/prebuilt/android/purge_ashmem.sha1 b/tools/telemetry/bin/android/purge_ashmem.sha1
similarity index 100%
rename from tools/telemetry/bin/prebuilt/android/purge_ashmem.sha1
rename to tools/telemetry/bin/android/purge_ashmem.sha1
diff --git a/tools/telemetry/bin/prebuilt/android/tcpdump.sha1 b/tools/telemetry/bin/android/tcpdump.sha1
similarity index 100%
rename from tools/telemetry/bin/prebuilt/android/tcpdump.sha1
rename to tools/telemetry/bin/android/tcpdump.sha1
diff --git a/tools/telemetry/bin/avconv.sha1 b/tools/telemetry/bin/linux/avconv.sha1
similarity index 100%
rename from tools/telemetry/bin/avconv.sha1
rename to tools/telemetry/bin/linux/avconv.sha1
diff --git a/tools/telemetry/bin/prebuilt/android/bitmaptools.sha1 b/tools/telemetry/bin/linux/bitmaptools.sha1
similarity index 100%
rename from tools/telemetry/bin/prebuilt/android/bitmaptools.sha1
rename to tools/telemetry/bin/linux/bitmaptools.sha1
diff --git a/tools/telemetry/bin/linux/clear_system_cache.sha1 b/tools/telemetry/bin/linux/clear_system_cache.sha1
new file mode 100644
index 0000000..b731dc6
--- /dev/null
+++ b/tools/telemetry/bin/linux/clear_system_cache.sha1
@@ -0,0 +1 @@
+20739db88864685f6a0be66879e34a83813352cc
\ No newline at end of file
diff --git a/tools/telemetry/bin/prebuilt/android/host_forwarder.sha1 b/tools/telemetry/bin/linux/host_forwarder.sha1
similarity index 100%
rename from tools/telemetry/bin/prebuilt/android/host_forwarder.sha1
rename to tools/telemetry/bin/linux/host_forwarder.sha1
diff --git a/tools/telemetry/bin/ipfw.sha1 b/tools/telemetry/bin/linux/ipfw.sha1
similarity index 100%
rename from tools/telemetry/bin/ipfw.sha1
rename to tools/telemetry/bin/linux/ipfw.sha1
diff --git a/tools/telemetry/bin/ipfw_mod.ko.sha1 b/tools/telemetry/bin/linux/ipfw_mod.ko.sha1
similarity index 100%
rename from tools/telemetry/bin/ipfw_mod.ko.sha1
rename to tools/telemetry/bin/linux/ipfw_mod.ko.sha1
diff --git a/tools/telemetry/bin/prebuilt/android/md5sum_bin_host.sha1 b/tools/telemetry/bin/linux/md5sum_bin_host.sha1
similarity index 100%
rename from tools/telemetry/bin/prebuilt/android/md5sum_bin_host.sha1
rename to tools/telemetry/bin/linux/md5sum_bin_host.sha1
diff --git a/tools/telemetry/bin/linux/minidump_stackwalk.sha1 b/tools/telemetry/bin/linux/minidump_stackwalk.sha1
new file mode 100644
index 0000000..05fbd09
--- /dev/null
+++ b/tools/telemetry/bin/linux/minidump_stackwalk.sha1
@@ -0,0 +1 @@
+a200a58176ababbdbc69021d4163954f60be7ab5
\ No newline at end of file
diff --git a/tools/telemetry/bin/mac/bitmaptools.sha1 b/tools/telemetry/bin/mac/bitmaptools.sha1
new file mode 100644
index 0000000..32d44fe
--- /dev/null
+++ b/tools/telemetry/bin/mac/bitmaptools.sha1
@@ -0,0 +1 @@
+c7b1bfc6399dc683058e88dac1ef0f877edea74b
\ No newline at end of file
diff --git a/tools/telemetry/bin/mac/clear_system_cache.sha1 b/tools/telemetry/bin/mac/clear_system_cache.sha1
new file mode 100644
index 0000000..84a8751
--- /dev/null
+++ b/tools/telemetry/bin/mac/clear_system_cache.sha1
@@ -0,0 +1 @@
+0f0ef42a9223592fa234ee5d248f6216fee2b677
\ No newline at end of file
diff --git a/tools/telemetry/bin/mac/md5sum_bin_host.sha1 b/tools/telemetry/bin/mac/md5sum_bin_host.sha1
new file mode 100644
index 0000000..ad82153
--- /dev/null
+++ b/tools/telemetry/bin/mac/md5sum_bin_host.sha1
@@ -0,0 +1 @@
+b068e3ba81a1fb7dbfe121edd2dac0c3942eb7e6
\ No newline at end of file
diff --git a/tools/telemetry/bin/mac/minidump_stackwalk.sha1 b/tools/telemetry/bin/mac/minidump_stackwalk.sha1
new file mode 100644
index 0000000..98f9d5e
--- /dev/null
+++ b/tools/telemetry/bin/mac/minidump_stackwalk.sha1
@@ -0,0 +1 @@
+f6243ea3cc4da9a8ad17d16bfa4101e9a50c8ffc
\ No newline at end of file
diff --git a/tools/telemetry/bin/prebuilt/android/.gitignore b/tools/telemetry/bin/prebuilt/android/.gitignore
deleted file mode 100644
index 99156a5..0000000
--- a/tools/telemetry/bin/prebuilt/android/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-*
-!*.sha1
-!*.txt
diff --git a/tools/telemetry/bin/IEDriverServer_32.exe.sha1 b/tools/telemetry/bin/win/IEDriverServer_32.exe.sha1
similarity index 100%
rename from tools/telemetry/bin/IEDriverServer_32.exe.sha1
rename to tools/telemetry/bin/win/IEDriverServer_32.exe.sha1
diff --git a/tools/telemetry/bin/IEDriverServer_64.exe.sha1 b/tools/telemetry/bin/win/IEDriverServer_64.exe.sha1
similarity index 100%
rename from tools/telemetry/bin/IEDriverServer_64.exe.sha1
rename to tools/telemetry/bin/win/IEDriverServer_64.exe.sha1
diff --git a/tools/telemetry/bin/win/bitmaptools.exe.sha1 b/tools/telemetry/bin/win/bitmaptools.exe.sha1
new file mode 100644
index 0000000..06dd372
--- /dev/null
+++ b/tools/telemetry/bin/win/bitmaptools.exe.sha1
@@ -0,0 +1 @@
+ac4fee89a51662b9d920bce443c19b9b2929b198
\ No newline at end of file
diff --git a/tools/telemetry/bin/win/clear_system_cache.exe.sha1 b/tools/telemetry/bin/win/clear_system_cache.exe.sha1
new file mode 100644
index 0000000..25f9eb4
--- /dev/null
+++ b/tools/telemetry/bin/win/clear_system_cache.exe.sha1
@@ -0,0 +1 @@
+afe4fc71151f3aa176bc7137f0f6c9396bc18f3b
\ No newline at end of file
diff --git a/tools/telemetry/bin/win/crash_service.exe.sha1 b/tools/telemetry/bin/win/crash_service.exe.sha1
new file mode 100644
index 0000000..5e20218
--- /dev/null
+++ b/tools/telemetry/bin/win/crash_service.exe.sha1
@@ -0,0 +1 @@
+4a0961e972895f4af3b7cfab959c5bfd4de7174b
\ No newline at end of file
diff --git a/tools/telemetry/cloud_storage b/tools/telemetry/cloud_storage
index 9081b33..cd55be2 100755
--- a/tools/telemetry/cloud_storage
+++ b/tools/telemetry/cloud_storage
@@ -7,6 +7,7 @@
 import logging
 import os
 import subprocess
+import sys
 
 from telemetry.core import command_line
 from telemetry.page import cloud_storage
@@ -192,25 +193,10 @@
       subprocess.call(['git', 'add', hash_path])
 
 
-COMMANDS = (Ls, Mv, Rm, Upload)
-
-
-def main():
-  logging.getLogger().setLevel(logging.INFO)
-
-  parser = argparse.ArgumentParser()
-  subparsers = parser.add_subparsers()
-
-  for command in COMMANDS:
-    subparser = subparsers.add_parser(
-        command.Name(), help=command.Description())
-    subparser.set_defaults(command=command)
-    command.AddCommandLineArgs(subparser)
-
-  args = parser.parse_args()
-  args.command.ProcessCommandLineArgs(parser, args)
-  args.command().Run(args)
+class CloudStorageCommand(command_line.SubcommandCommand):
+  commands = (Ls, Mv, Rm, Upload)
 
 
 if __name__ == '__main__':
-  main()
+  logging.getLogger().setLevel(logging.INFO)
+  sys.exit(CloudStorageCommand.main())
diff --git a/tools/telemetry/telemetry/core/backends/adb_commands.py b/tools/telemetry/telemetry/core/backends/adb_commands.py
index 38111ac..c02df46 100644
--- a/tools/telemetry/telemetry/core/backends/adb_commands.py
+++ b/tools/telemetry/telemetry/core/backends/adb_commands.py
@@ -9,24 +9,23 @@
 import os
 import shutil
 import stat
-import sys
 
 from telemetry.core import util
-from telemetry.core.platform.profiler import android_prebuilt_profiler_helper
+from telemetry.core.platform import factory
+from telemetry.util import support_binaries
 
 # This is currently a thin wrapper around Chrome Android's
 # build scripts, located in chrome/build/android. This file exists mainly to
 # deal with locating the module.
 
 util.AddDirToPythonPath(util.GetChromiumSrcDir(), 'build', 'android')
+from pylib import android_commands  # pylint: disable=F0401
+from pylib import constants  # pylint: disable=F0401
 try:
-  from pylib import android_commands  # pylint: disable=F0401
-  from pylib import constants  # pylint: disable=F0401
   from pylib import ports  # pylint: disable=F0401
-  from pylib.utils import apk_helper  # pylint: disable=F0401
-  from pylib.utils import test_environment  # pylint: disable=F0401
 except Exception:
-  android_commands = None
+  ports = None
+from pylib.utils import apk_helper  # pylint: disable=F0401
 
 
 def IsAndroidSupported():
@@ -41,10 +40,6 @@
   return android_commands.GetAttachedDevices()
 
 
-def CleanupLeftoverProcesses():
-  test_environment.CleanupLeftoverProcesses()
-
-
 def AllocateTestServerPort():
   return ports.AllocateTestServerPort()
 
@@ -105,37 +100,44 @@
 
 
 def SetupPrebuiltTools(adb):
-  # TODO(bulach): build the host tools for mac, and the targets for x86/mips.
-  # Prebuilt tools from r226197.
-  prebuilt_tools = [
-      'bitmaptools',
-      'file_poller',
-      'forwarder_dist/device_forwarder',
-      'host_forwarder',
-      'md5sum_dist/md5sum_bin',
-      'md5sum_bin_host',
-      'purge_ashmem',
+  """Some of the android pylib scripts we depend on are lame and expect
+  binaries to be in the out/ directory. So we copy any prebuilt binaries there
+  as a prereq."""
+
+  # TODO(bulach): Build the targets for x86/mips.
+  device_tools = [
+    'file_poller',
+    'forwarder_dist/device_forwarder',
+    'md5sum_dist/md5sum_bin',
+    'purge_ashmem',
   ]
-  has_prebuilt = (
-    sys.platform.startswith('linux') and
-    adb.system_properties['ro.product.cpu.abi'].startswith('armeabi'))
-  if not has_prebuilt:
-    return all([util.FindSupportBinary(t) for t in prebuilt_tools])
+
+  host_tools = [
+    'bitmaptools',
+    'host_forwarder',
+    'md5sum_bin_host',
+  ]
+
+  has_device_prebuilt = adb.system_properties['ro.product.cpu.abi'].startswith(
+      'armeabi')
+  if not has_device_prebuilt:
+    return all([support_binaries.FindLocallyBuiltPath(t) for t in device_tools])
 
   build_type = None
-  for t in prebuilt_tools:
-    src = os.path.basename(t)
-    android_prebuilt_profiler_helper.GetIfChanged(src)
-    bin_path = util.FindSupportBinary(t)
+  for t in device_tools + host_tools:
+    executable = os.path.basename(t)
+    locally_built_path = support_binaries.FindLocallyBuiltPath(t)
     if not build_type:
-      build_type = GetBuildTypeOfPath(bin_path) or 'Release'
+      build_type = GetBuildTypeOfPath(locally_built_path) or 'Release'
       constants.SetBuildType(build_type)
     dest = os.path.join(constants.GetOutDirectory(), t)
-    if not bin_path:
-      logging.warning('Setting up prebuilt %s', dest)
+    if not locally_built_path:
+      logging.info('Setting up prebuilt %s', dest)
       if not os.path.exists(os.path.dirname(dest)):
         os.makedirs(os.path.dirname(dest))
-      prebuilt_path = android_prebuilt_profiler_helper.GetHostPath(src)
+      platform_name = ('android' if t in device_tools else
+                       factory.GetPlatformBackendForCurrentOS().GetOSName())
+      prebuilt_path = support_binaries.FindPath(executable, platform_name)
       if not os.path.exists(prebuilt_path):
         raise NotImplementedError("""
 %s must be checked into cloud storage.
diff --git a/tools/telemetry/telemetry/core/backends/chrome/android_browser_finder.py b/tools/telemetry/telemetry/core/backends/chrome/android_browser_finder.py
index 3961caa..6adca50 100644
--- a/tools/telemetry/telemetry/core/backends/chrome/android_browser_finder.py
+++ b/tools/telemetry/telemetry/core/backends/chrome/android_browser_finder.py
@@ -218,7 +218,8 @@
       # flake out during the test. We skip this if Telemetry is running under a
       # buildbot because build/android/test_runner.py wrapper already took care
       # of it before starting the shards.
-      adb_commands.CleanupLeftoverProcesses()
+      adb.RestartAdbdOnDevice()
+      adb.WaitForDevicePm()
 
   packages = adb.RunShellCommand('pm list packages')
   possible_browsers = []
diff --git a/tools/telemetry/telemetry/core/backends/chrome/cros_browser_backend.py b/tools/telemetry/telemetry/core/backends/chrome/cros_browser_backend.py
index b405c44..e31a439 100644
--- a/tools/telemetry/telemetry/core/backends/chrome/cros_browser_backend.py
+++ b/tools/telemetry/telemetry/core/backends/chrome/cros_browser_backend.py
@@ -215,6 +215,8 @@
 
     self._RestartUI() # Logs out.
 
+    util.WaitFor(lambda: not self._IsCryptohomeMounted(), 30)
+
     if self._forwarder:
       self._forwarder.Close()
       self._forwarder = None
@@ -268,10 +270,14 @@
       }
     ''')
 
+  def _IsCryptohomeMounted(self):
+    username = '$guest' if self._is_guest else self.browser_options.username
+    return self._cri.IsCryptohomeMounted(username, self._is_guest)
+
   def _IsLoggedIn(self):
     """Returns True if cryptohome has mounted, the browser is
     responsive to devtools requests, and the oobe has been dismissed."""
-    return (self._cri.IsCryptohomeMounted(self.browser_options.username) and
+    return (self._IsCryptohomeMounted() and
             self.HasBrowserFinishedLaunching() and
             not self.oobe_exists)
 
@@ -330,7 +336,7 @@
       self._WaitForSigninScreen()
       self._ClickBrowseAsGuest()
 
-    util.WaitFor(lambda: self._cri.IsCryptohomeMounted('$guest'), 30)
+    util.WaitFor(self._IsCryptohomeMounted, 30)
 
   def _NavigateFakeLogin(self):
     """Logs in using Oobe.loginForTesting."""
diff --git a/tools/telemetry/telemetry/core/backends/chrome/cros_interface.py b/tools/telemetry/telemetry/core/backends/chrome/cros_interface.py
index bb49ced..edc6f8d 100644
--- a/tools/telemetry/telemetry/core/backends/chrome/cros_interface.py
+++ b/tools/telemetry/telemetry/core/backends/chrome/cros_interface.py
@@ -357,11 +357,11 @@
     return self.RunCmdOnDevice(
         ['cryptohome-path', 'user', "'%s'" % user])[0].strip()
 
-  def IsCryptohomeMounted(self, username):
+  def IsCryptohomeMounted(self, username, is_guest):
     """Returns True iff |user|'s cryptohome is mounted."""
     profile_path = self.CryptohomePath(username)
     mount = self.FilesystemMountedAt(profile_path)
-    mount_prefix = 'guestfs' if username == '$guest' else '/home/.shadow/'
+    mount_prefix = 'guestfs' if is_guest else '/home/.shadow/'
     return mount and mount.startswith(mount_prefix)
 
   def TakeScreenShot(self, screenshot_prefix):
diff --git a/tools/telemetry/telemetry/core/backends/chrome/desktop_browser_backend.py b/tools/telemetry/telemetry/core/backends/chrome/desktop_browser_backend.py
index e72238a..3ae5b60 100644
--- a/tools/telemetry/telemetry/core/backends/chrome/desktop_browser_backend.py
+++ b/tools/telemetry/telemetry/core/backends/chrome/desktop_browser_backend.py
@@ -16,6 +16,7 @@
 from telemetry.core import util
 from telemetry.core.backends import browser_backend
 from telemetry.core.backends.chrome import chrome_browser_backend
+from telemetry.util import support_binaries
 
 
 class DesktopBrowserBackend(chrome_browser_backend.ChromeBrowserBackend):
@@ -167,7 +168,8 @@
       return ''
 
   def GetStackTrace(self):
-    stackwalk = util.FindSupportBinary('minidump_stackwalk')
+    stackwalk = support_binaries.FindPath('minidump_stackwalk',
+                                          self._browser.platform.GetOSName())
     if not stackwalk:
       logging.warning('minidump_stackwalk binary not found. Must build it to '
                       'symbolize crash dumps. Returning browser stdout.')
diff --git a/tools/telemetry/telemetry/core/backends/chrome/desktop_browser_finder.py b/tools/telemetry/telemetry/core/backends/chrome/desktop_browser_finder.py
index 90fbe4a..2394634 100644
--- a/tools/telemetry/telemetry/core/backends/chrome/desktop_browser_finder.py
+++ b/tools/telemetry/telemetry/core/backends/chrome/desktop_browser_finder.py
@@ -142,7 +142,7 @@
                                              normalized_executable, flash_path,
                                              False, browser_directory))
     else:
-      logging.warning('%s specified by browser_executable does not exist',
+      raise Exception('%s specified by --browser-executable does not exist',
                       normalized_executable)
 
   def AddIfFound(browser_type, build_dir, type_dir, app_name, content_shell):
diff --git a/tools/telemetry/telemetry/core/backends/chrome/inspector_backend.py b/tools/telemetry/telemetry/core/backends/chrome/inspector_backend.py
index ce74b76..dd627a3 100644
--- a/tools/telemetry/telemetry/core/backends/chrome/inspector_backend.py
+++ b/tools/telemetry/telemetry/core/backends/chrome/inspector_backend.py
@@ -2,12 +2,9 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-import json
 import logging
 import os
-import socket
 import sys
-import time
 
 from telemetry import decorators
 from telemetry.core import bitmap
@@ -19,6 +16,7 @@
 from telemetry.core.backends.chrome import inspector_page
 from telemetry.core.backends.chrome import inspector_runtime
 from telemetry.core.backends.chrome import inspector_timeline
+from telemetry.core.backends.chrome import inspector_websocket
 from telemetry.core.backends.chrome import websocket
 from telemetry.core.heap import model
 from telemetry.core.timeline import model as timeline_model
@@ -29,16 +27,26 @@
   pass
 
 
-class InspectorBackend(object):
+class InspectorBackend(inspector_websocket.InspectorWebsocket):
   def __init__(self, browser_backend, context, timeout=60):
+    super(InspectorBackend, self).__init__(self._HandleNotification,
+                                           self._HandleError)
+
     self._browser_backend = browser_backend
     self._context = context
-    self._socket = None
     self._domain_handlers = {}
-    self._cur_socket_timeout = 0
-    self._next_request_id = 0
 
-    self._Connect()
+    logging.debug('InspectorBackend._Connect() to %s' % self.debugger_url)
+    try:
+      self.Connect(self.debugger_url)
+    except (websocket.WebSocketException, util.TimeoutException):
+      err_msg = sys.exc_info()[1]
+      if not self._browser_backend.IsBrowserRunning():
+        raise exceptions.BrowserGoneException(err_msg)
+      elif not self._browser_backend.HasBrowserFinishedLaunching():
+        raise exceptions.BrowserConnectionGoneException(err_msg)
+      else:
+        raise exceptions.TabCrashException(err_msg)
 
     self._console = inspector_console.InspectorConsole(self)
     self._memory = inspector_memory.InspectorMemory(self)
@@ -49,37 +57,15 @@
     self._timeline_model = None
 
   def __del__(self):
-    self._Disconnect()
+    self.Disconnect()
 
-  def _Connect(self, timeout=10):
-    assert not self._socket
-    logging.debug('InspectorBackend._Connect() to %s' % self.debugger_url)
-    try:
-      self._socket = websocket.create_connection(self.debugger_url,
-          timeout=timeout)
-    except (websocket.WebSocketException, util.TimeoutException):
-      err_msg = sys.exc_info()[1]
-      if not self._browser_backend.IsBrowserRunning():
-        raise exceptions.BrowserGoneException(err_msg)
-      elif not self._browser_backend.HasBrowserFinishedLaunching():
-        raise exceptions.BrowserConnectionGoneException(err_msg)
-      else:
-        raise exceptions.TabCrashException(err_msg)
-
-    self._cur_socket_timeout = 0
-    self._next_request_id = 0
-
-  def _Disconnect(self):
+  def Disconnect(self):
     for _, handlers in self._domain_handlers.items():
       _, will_close_handler = handlers
       will_close_handler()
     self._domain_handlers = {}
 
-    if self._socket:
-      self._socket.close()
-      self._socket = None
-
-  # General public methods.
+    super(InspectorBackend, self).Disconnect()
 
   @property
   def browser(self):
@@ -225,35 +211,10 @@
 
   # Methods used internally by other backends.
 
-  def DispatchNotifications(self, timeout=10):
-    self._SetTimeout(timeout)
-    res = self._ReceiveJsonData(timeout)
-    if 'method' in res:
-      self._HandleNotification(res)
-
   def _IsInspectable(self):
     contexts = self._browser_backend.ListInspectableContexts()
     return self.id in [c['id'] for c in contexts]
 
-  def _ReceiveJsonData(self, timeout):
-    try:
-      start_time = time.time()
-      data = self._socket.recv()
-    except (socket.error, websocket.WebSocketException):
-      if self._IsInspectable():
-        elapsed_time = time.time() - start_time
-        raise util.TimeoutException(
-            'Received a socket error in the browser connection and the tab '
-            'still exists, assuming it timed out. '
-            'Timeout=%ds Elapsed=%ds Error=%s' % (
-                timeout, elapsed_time, sys.exc_info()[1]))
-      raise exceptions.TabCrashException(
-          'Received a socket error in the browser connection and the tab no '
-          'longer exists, assuming it crashed. Error=%s' % sys.exc_info()[1])
-    res = json.loads(data)
-    logging.debug('got [%s]', data)
-    return res
-
   def _HandleNotification(self, res):
     if (res['method'] == 'Inspector.detached' and
         res.get('params', {}).get('reason','') == 'replaced_with_devtools'):
@@ -274,28 +235,27 @@
     else:
       logging.debug('Unhandled inspector message: %s', res)
 
-  def SendAndIgnoreResponse(self, req):
-    req['id'] = self._next_request_id
-    self._next_request_id += 1
-    data = json.dumps(req)
-    self._socket.send(data)
-    logging.debug('sent [%s]', data)
-
-  def _SetTimeout(self, timeout):
-    if self._cur_socket_timeout != timeout:
-      self._socket.settimeout(timeout)
-      self._cur_socket_timeout = timeout
+  def _HandleError(self, elapsed_time):
+    if self._IsInspectable():
+      raise util.TimeoutException(
+          'Received a socket error in the browser connection and the tab '
+          'still exists, assuming it timed out. '
+          'Elapsed=%ds Error=%s' % (elapsed_time, sys.exc_info()[1]))
+    raise exceptions.TabCrashException(
+        'Received a socket error in the browser connection and the tab no '
+        'longer exists, assuming it crashed. Error=%s' % sys.exc_info()[1])
 
   def _WaitForInspectorToGoAwayAndReconnect(self):
     sys.stderr.write('The connection to Chrome was lost to the Inspector UI.\n')
     sys.stderr.write('Telemetry is waiting for the inspector to be closed...\n')
+    super(InspectorBackend, self).Disconnect()
     self._socket.close()
     self._socket = None
     def IsBack():
       if not self._IsInspectable():
         return False
       try:
-        self._Connect()
+        self.Connect(self.debugger_url)
       except exceptions.TabCrashException, ex:
         if ex.message.message.find('Handshake Status 500') == 0:
           return False
@@ -305,20 +265,6 @@
     sys.stderr.write('\n')
     sys.stderr.write('Inspector\'s UI closed. Telemetry will now resume.\n')
 
-  def SyncRequest(self, req, timeout=10):
-    self._SetTimeout(timeout)
-    self.SendAndIgnoreResponse(req)
-
-    while True:
-      res = self._ReceiveJsonData(timeout)
-      if 'method' in res:
-        self._HandleNotification(res)
-        continue
-      if 'id' not in res or res['id'] != req['id']:
-        logging.debug('Dropped reply: %s', json.dumps(res))
-        continue
-      return res
-
   def RegisterDomain(self,
       domain_name, notification_handler, will_close_handler):
     """Registers a given domain for handling notification methods.
diff --git a/tools/telemetry/telemetry/core/backends/chrome/inspector_websocket.py b/tools/telemetry/telemetry/core/backends/chrome/inspector_websocket.py
new file mode 100644
index 0000000..26dac9b
--- /dev/null
+++ b/tools/telemetry/telemetry/core/backends/chrome/inspector_websocket.py
@@ -0,0 +1,108 @@
+# 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 json
+import logging
+import socket
+import threading
+import time
+
+from telemetry.core.backends.chrome import websocket
+
+
+class InspectorWebsocket(object):
+
+  def __init__(self, notification_handler=None, error_handler=None):
+    """Create a websocket handler for communicating with Inspectors.
+
+    Args:
+      notification_handler: A callback for notifications received as a result of
+        calling DispatchNotifications() or StartAsyncDispatchNotifications().
+        Must accept a single JSON object containing the Inspector's
+        notification. May return True to indicate the stop async dispatching.
+      error_handler: A callback for errors in communicating with the Inspector.
+        Must accept a single numeric parameter indicated the time elapsed before
+        the error.
+    """
+    self._socket = None
+    self._thread = None
+    self._cur_socket_timeout = 0
+    self._next_request_id = 0
+    self._notification_handler = notification_handler
+    self._error_handler = error_handler
+
+  @property
+  def is_dispatching_async_notifications(self):
+    return self._thread != None
+
+  def Connect(self, url, timeout=10):
+    assert not self._socket
+    self._socket = websocket.create_connection(url, timeout=timeout)
+    self._cur_socket_timeout = 0
+    self._next_request_id = 0
+
+  def Disconnect(self):
+    if self._socket:
+      self._socket.close()
+      self._socket = None
+
+  def SendAndIgnoreResponse(self, req):
+    req['id'] = self._next_request_id
+    self._next_request_id += 1
+    data = json.dumps(req)
+    self._socket.send(data)
+    logging.debug('sent [%s]', data)
+
+  def SyncRequest(self, req, timeout=10):
+    assert not self._thread, 'Cannot be used during async dispatching.'
+    self.SendAndIgnoreResponse(req)
+
+    while self._socket:
+      res = self._Receive(timeout)
+      if 'id' in res and res['id'] == req['id']:
+        return res
+
+  def DispatchNotifications(self, timeout=10):
+    assert not self._thread, 'Cannot be used during async dispatching.'
+    self._Receive(timeout)
+
+  def StartAsyncDispatchNotifications(self):
+    assert not self._thread, 'Cannot be started twice.'
+    self._thread = threading.Thread(target=self._AsyncDispatcher)
+    self._thread.daemon = True
+    self._thread.start()
+
+  def StopAsyncDispatchNotifications(self):
+    self._thread.join(timeout=30)
+    if self._thread.is_alive():
+      raise RuntimeError('Timed out waiting for async dispatch notifications.')
+    self._thread = None
+
+  def _AsyncDispatcher(self):
+    while self._socket:
+      try:
+        if not self._Receive():
+          break
+      except websocket.WebSocketTimeoutException:
+        pass
+
+  def _SetTimeout(self, timeout):
+    if self._cur_socket_timeout != timeout:
+      self._socket.settimeout(timeout)
+      self._cur_socket_timeout = timeout
+
+  def _Receive(self, timeout=10):
+    self._SetTimeout(timeout)
+    start_time = time.time()
+    try:
+      while self._socket:
+        data = self._socket.recv()
+        res = json.loads(data)
+        logging.debug('got [%s]', data)
+        if 'method' in res and self._notification_handler(res):
+          return None
+        return res
+    except (socket.error, websocket.WebSocketException):
+      elapsed_time = time.time() - start_time
+      self._error_handler(elapsed_time)
diff --git a/tools/telemetry/telemetry/core/backends/chrome/system_info_backend.py b/tools/telemetry/telemetry/core/backends/chrome/system_info_backend.py
index ad45afa..3a8a08c 100644
--- a/tools/telemetry/telemetry/core/backends/chrome/system_info_backend.py
+++ b/tools/telemetry/telemetry/core/backends/chrome/system_info_backend.py
@@ -5,21 +5,22 @@
 from telemetry import decorators
 from telemetry.core import camel_case
 from telemetry.core import system_info
-from telemetry.core.backends.chrome import websocket_browser_connection
+from telemetry.core.backends.chrome import inspector_websocket
 
 
 class SystemInfoBackend(object):
   def __init__(self, devtools_port):
-    self._conn = websocket_browser_connection.WebSocketBrowserConnection(
-        devtools_port)
+    self._port = devtools_port
 
   @decorators.Cache
   def GetSystemInfo(self, timeout=10):
     req = {'method': 'SystemInfo.getInfo'}
+    websocket = inspector_websocket.InspectorWebsocket()
     try:
-      res = self._conn.SyncRequest(req, timeout)
+      websocket.Connect('ws://127.0.0.1:%i/devtools/browser' % self._port)
+      res = websocket.SyncRequest(req, timeout)
     finally:
-      self._conn.Close()
+      websocket.Disconnect()
     if 'error' in res:
       return None
     return system_info.SystemInfo.FromDict(
diff --git a/tools/telemetry/telemetry/core/backends/chrome/tracing_backend.py b/tools/telemetry/telemetry/core/backends/chrome/tracing_backend.py
index 166d5ff..1e1c405 100644
--- a/tools/telemetry/telemetry/core/backends/chrome/tracing_backend.py
+++ b/tools/telemetry/telemetry/core/backends/chrome/tracing_backend.py
@@ -2,16 +2,12 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-import json
 import logging
 import re
-import socket
-import threading
 import weakref
 
+from telemetry.core.backends.chrome import inspector_websocket
 from telemetry.core.backends.chrome import tracing_timeline_data
-from telemetry.core.backends.chrome import websocket
-from telemetry.core.backends.chrome import websocket_browser_connection
 
 
 class TracingUnsupportedException(Exception):
@@ -91,9 +87,12 @@
 
 class TracingBackend(object):
   def __init__(self, devtools_port):
-    self._conn = websocket_browser_connection.WebSocketBrowserConnection(
-        devtools_port)
-    self._thread = None
+    self._inspector_websocket = inspector_websocket.InspectorWebsocket(
+        self._NotificationHandler,
+        self._ErrorHandler)
+
+    self._inspector_websocket.Connect(
+        'ws://127.0.0.1:%i/devtools/browser' % devtools_port)
     self._category_filter = None
     self._nesting = 0
     self._tracing_data = []
@@ -104,7 +103,7 @@
 
   @property
   def is_tracing_running(self):
-    return self._thread != None
+    return self._inspector_websocket.is_dispatching_async_notifications
 
   def AddTabToMarkerMapping(self, tab, marker):
     self._tab_to_marker_mapping[tab] = marker
@@ -127,12 +126,10 @@
     self._category_filter = CategoryFilter(custom_categories)
     if custom_categories:
       req['params'] = {'categories': custom_categories}
-    self._conn.SyncRequest(req, timeout)
+    self._inspector_websocket.SyncRequest(req, timeout)
     # Tracing.start will send asynchronous notifications containing trace
     # data, until Tracing.end is called.
-    self._thread = threading.Thread(target=self._TracingReader)
-    self._thread.daemon = True
-    self._thread.start()
+    self._inspector_websocket.StartAsyncDispatchNotifications()
     return True
 
   def StopTracing(self):
@@ -144,11 +141,8 @@
     assert self._nesting >= 0
     if self.is_tracing_running:
       req = {'method': 'Tracing.end'}
-      self._conn.SendRequest(req)
-      self._thread.join(timeout=60)
-      if self._thread.is_alive():
-        raise RuntimeError('Timed out waiting for tracing thread to join.')
-      self._thread = None
+      self._inspector_websocket.SendAndIgnoreResponse(req)
+      self._inspector_websocket.StopAsyncDispatchNotifications()
     if self._nesting == 0:
       self._category_filter = None
       return self._GetTraceResultAndReset()
@@ -168,39 +162,30 @@
     self._tracing_data = []
     return result
 
-  def _TracingReader(self):
-    while self._conn.socket:
-      try:
-        data = self._conn.socket.recv()
-        if not data:
-          break
-        res = json.loads(data)
-        logging.debug('got [%s]', data)
-        if 'Tracing.dataCollected' == res.get('method'):
-          value = res.get('params', {}).get('value')
-          if type(value) in [str, unicode]:
-            self._tracing_data.append(value)
-          elif type(value) is list:
-            self._tracing_data.extend(value)
-          else:
-            logging.warning('Unexpected type in tracing data')
-        elif 'Tracing.tracingComplete' == res.get('method'):
-          break
-      except websocket.WebSocketTimeoutException as e:
-        logging.warning('Unusual timeout waiting for tracing response (%s).',
-                        e)
-      except (socket.error, websocket.WebSocketException) as e:
-        logging.warning('Unrecoverable exception when reading tracing response '
-                        '(%s, %s).', type(e), e)
-        raise
+  def _ErrorHandler(self, elapsed):
+    logging.error('Unrecoverable error after %ds reading tracing response.',
+                  elapsed)
+    raise
+
+  def _NotificationHandler(self, res):
+    if 'Tracing.dataCollected' == res.get('method'):
+      value = res.get('params', {}).get('value')
+      if type(value) in [str, unicode]:
+        self._tracing_data.append(value)
+      elif type(value) is list:
+        self._tracing_data.extend(value)
+      else:
+        logging.warning('Unexpected type in tracing data')
+    elif 'Tracing.tracingComplete' == res.get('method'):
+      return True
 
   def Close(self):
-    self._conn.Close()
+    self._inspector_websocket.Disconnect()
 
   def _CheckNotificationSupported(self):
     """Ensures we're running against a compatible version of chrome."""
     req = {'method': 'Tracing.hasCompleted'}
-    res = self._conn.SyncRequest(req)
+    res = self._inspector_websocket.SyncRequest(req)
     if res.get('response'):
       raise TracingUnsupportedException(
           'Tracing not supported for this browser')
diff --git a/tools/telemetry/telemetry/core/backends/chrome/websocket_browser_connection.py b/tools/telemetry/telemetry/core/backends/chrome/websocket_browser_connection.py
deleted file mode 100644
index a88ed43..0000000
--- a/tools/telemetry/telemetry/core/backends/chrome/websocket_browser_connection.py
+++ /dev/null
@@ -1,59 +0,0 @@
-# Copyright 2013 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 json
-import logging
-import socket
-
-from telemetry.core import util
-from telemetry.core.backends.chrome import websocket
-
-class WebSocketBrowserConnection(object):
-  """Represents a websocket connection to the browser for backends
-     which use one."""
-
-  def __init__(self, devtools_port):
-    debugger_url = 'ws://localhost:%i/devtools/browser' % devtools_port
-    self._socket = websocket.create_connection(debugger_url)
-    self._next_request_id = 0
-    self._cur_socket_timeout = 0
-
-  def Close(self):
-    if self._socket:
-      self._socket.close()
-      self._socket = None
-
-  def SendRequest(self, req, timeout=10):
-    self._SetTimeout(timeout)
-    req['id'] = self._next_request_id
-    self._next_request_id += 1
-    data = json.dumps(req)
-    logging.debug('will send [%s]', data)
-    self._socket.send(data)
-
-  def SyncRequest(self, req, timeout=10):
-    self.SendRequest(req, timeout)
-    while True:
-      try:
-        data = self._socket.recv()
-      except (socket.error, websocket.WebSocketException):
-        raise util.TimeoutException(
-            "Timed out waiting for reply. This is unusual.")
-      res = json.loads(data)
-      logging.debug('got [%s]', data)
-      if res['id'] != req['id']:
-        logging.debug('Dropped reply: %s', json.dumps(res))
-        continue
-      return res
-
-  @property
-  def socket(self):
-    """Returns the socket for raw access. Please be sure you know what
-       you are doing."""
-    return self._socket
-
-  def _SetTimeout(self, timeout):
-    if self._cur_socket_timeout != timeout:
-      self._socket.settimeout(timeout)
-      self._cur_socket_timeout = timeout
diff --git a/tools/telemetry/telemetry/core/backends/webdriver/webdriver_desktop_browser_finder.py b/tools/telemetry/telemetry/core/backends/webdriver/webdriver_desktop_browser_finder.py
index d9fe3f3..83d9564 100644
--- a/tools/telemetry/telemetry/core/backends/webdriver/webdriver_desktop_browser_finder.py
+++ b/tools/telemetry/telemetry/core/backends/webdriver/webdriver_desktop_browser_finder.py
@@ -12,7 +12,7 @@
 from telemetry.core import util
 from telemetry.core.backends.webdriver import webdriver_ie_backend
 from telemetry.core.platform import factory
-from telemetry.page import cloud_storage
+from telemetry.util import support_binaries
 
 # Try to import the selenium python lib which may be not available.
 util.AddDirToPythonPath(
@@ -75,9 +75,8 @@
   def CreateWebDriverBackend(self, platform_backend):
     assert webdriver
     def DriverCreator():
-      ie_driver_exe = os.path.join(util.GetTelemetryDir(), 'bin',
-                                   'IEDriverServer_%s.exe' % self._architecture)
-      cloud_storage.GetIfChanged(ie_driver_exe, cloud_storage.PUBLIC_BUCKET)
+      ie_driver_exe = support_binaries.FindPath(
+          'IEDriverServer_%s' % self._architecture, 'win')
       return webdriver.Ie(executable_path=ie_driver_exe)
     return webdriver_ie_backend.WebDriverIEBackend(
         platform_backend, DriverCreator, self.finder_options.browser_options)
diff --git a/tools/telemetry/telemetry/core/bitmap.py b/tools/telemetry/telemetry/core/bitmap.py
index e9b5913..9f23b17 100644
--- a/tools/telemetry/telemetry/core/bitmap.py
+++ b/tools/telemetry/telemetry/core/bitmap.py
@@ -13,9 +13,10 @@
 import collections
 import struct
 import subprocess
-import sys
 
 from telemetry.core import util
+from telemetry.core.platform import factory
+from telemetry.util import support_binaries
 
 util.AddDirToPythonPath(util.GetTelemetryDir(), 'third_party', 'png')
 import png  # pylint: disable=F0401
@@ -121,8 +122,8 @@
   BOUNDING_BOX = 2
 
   def __init__(self, dimensions, pixels):
-    suffix = '.exe' if sys.platform == 'win32' else ''
-    binary = util.FindSupportBinary('bitmaptools' + suffix)
+    binary = support_binaries.FindPath(
+        'bitmaptools', factory.GetPlatformBackendForCurrentOS().GetOSName())
     assert binary, 'You must build bitmaptools first!'
 
     self._popen = subprocess.Popen([binary],
diff --git a/tools/telemetry/telemetry/core/browser.py b/tools/telemetry/telemetry/core/browser.py
index a452d3e..668e059 100644
--- a/tools/telemetry/telemetry/core/browser.py
+++ b/tools/telemetry/telemetry/core/browser.py
@@ -297,8 +297,8 @@
       else:
         self.platform.FlushEntireSystemCache()
 
-    self._browser_backend.Start()
     self._browser_backend.SetBrowser(self)
+    self._browser_backend.Start()
 
   def Close(self):
     """Closes this browser."""
diff --git a/tools/telemetry/telemetry/core/browser_finder.py b/tools/telemetry/telemetry/core/browser_finder.py
index 66bf22e..af06220 100644
--- a/tools/telemetry/telemetry/core/browser_finder.py
+++ b/tools/telemetry/telemetry/core/browser_finder.py
@@ -78,13 +78,13 @@
 
       logging.warning('--browser omitted. Using most recent local build: %s' %
                       default_browser.browser_type)
-      # TODO: We should do this even when --browser is specified.
       default_browser.UpdateExecutableIfNeeded()
       return default_browser
 
     if len(browsers) == 1:
       logging.warning('--browser omitted. Using only available browser: %s' %
                       browsers[0].browser_type)
+      browsers[0].UpdateExecutableIfNeeded()
       return browsers[0]
 
     raise BrowserTypeRequiredException(
@@ -99,6 +99,7 @@
       return x_idx - y_idx
     browsers.sort(CompareBrowsersOnTypePriority)
     if len(browsers) >= 1:
+      browsers[0].UpdateExecutableIfNeeded()
       return browsers[0]
     else:
       return None
@@ -117,6 +118,7 @@
 
   if chosen_browser:
     logging.info('Chose browser: %s' % (repr(chosen_browser)))
+    chosen_browser.UpdateExecutableIfNeeded()
 
   return chosen_browser
 
diff --git a/tools/telemetry/telemetry/core/command_line.py b/tools/telemetry/telemetry/core/command_line.py
index f9c69e1..dd026df 100644
--- a/tools/telemetry/telemetry/core/command_line.py
+++ b/tools/telemetry/telemetry/core/command_line.py
@@ -29,24 +29,7 @@
 
 
 class Command(ArgumentHandlerMixIn):
-  """Represents a command-line sub-command for use with an argparse sub-parser.
-
-  E.g. "svn checkout", "svn update", and "svn commit" are separate sub-commands.
-
-  Example usage, to set up argparse to use these commands:
-    parser = argparse.ArgumentParser()
-    subparsers = parser.add_subparsers()
-
-    for command in COMMANDS:
-      subparser = subparsers.add_parser(
-          command.Name(), help=command.Description())
-      subparser.set_defaults(command=command)
-      command.AddCommandLineArgs(subparser)
-
-    args = parser.parse_args()
-    args.command.ProcessCommandLineArgs(parser, args)
-    args.command().Run(args)
-  """
+  """An abstraction for things that run from the command-line."""
 
   @classmethod
   def Name(cls):
@@ -64,11 +47,12 @@
 
   @classmethod
   def main(cls):
+    """Main method to run this command as a standalone script."""
     parser = argparse.ArgumentParser()
     cls.AddCommandLineArgs(parser)
     args = parser.parse_args()
     cls.ProcessCommandLineArgs(parser, args)
-    cls().Run(args)
+    return cls().Run(args)
 
 
 # TODO: Convert everything to argparse.
@@ -84,9 +68,43 @@
 
   @classmethod
   def main(cls):
-    parser = optparse.OptionParser()
+    """Main method to run this command as a standalone script."""
+    parser = cls.CreateParser()
     cls.AddCommandLineArgs(parser)
     options, args = parser.parse_args()
     options.positional_args = args
     cls.ProcessCommandLineArgs(parser, options)
-    cls().Run(options)
+    return cls().Run(options)
+
+
+class SubcommandCommand(Command):
+  """Combines Commands into one big command with sub-commands.
+
+  E.g. "svn checkout", "svn update", and "svn commit" are separate sub-commands.
+
+  Example usage:
+    class MyCommand(command_line.SubcommandCommand):
+      commands = (Help, List, Run)
+
+    if __name__ == '__main__':
+      sys.exit(MyCommand.main())
+  """
+
+  commands = ()
+
+  @classmethod
+  def AddCommandLineArgs(cls, parser):
+    subparsers = parser.add_subparsers()
+
+    for command in cls.commands:
+      subparser = subparsers.add_parser(
+          command.Name(), help=command.Description())
+      subparser.set_defaults(command=command)
+      command.AddCommandLineArgs(subparser)
+
+  @classmethod
+  def ProcessCommandLineArgs(cls, parser, args):
+    args.command.ProcessCommandLineArgs(parser, args)
+
+  def Run(self, args):
+    args.command().Run(args)
diff --git a/tools/telemetry/telemetry/core/discover.py b/tools/telemetry/telemetry/core/discover.py
index 3f71345..c68dab8 100644
--- a/tools/telemetry/telemetry/core/discover.py
+++ b/tools/telemetry/telemetry/core/discover.py
@@ -10,6 +10,7 @@
 from telemetry import decorators
 from telemetry.core import camel_case
 from telemetry.core import util
+from telemetry.page import page_set
 
 
 @decorators.Cache
@@ -70,57 +71,76 @@
   modules = DiscoverModules(start_dir, top_level_dir, pattern)
   classes = {}
   for module in modules:
-    for _, obj in inspect.getmembers(module):
-      # Ensure object is a class.
-      if not inspect.isclass(obj):
-        continue
-      # Include only subclasses of base_class.
-      if not issubclass(obj, base_class):
-        continue
-      # Exclude the base_class itself.
-      if obj is base_class:
-        continue
-      # Exclude protected or private classes.
-      if obj.__name__.startswith('_'):
-        continue
-      # Include only the module in which the class is defined.
-      # If a class is imported by another module, exclude those duplicates.
-      if obj.__module__ != module.__name__:
-        continue
+    new_classes = DiscoverClassesInModule(
+        module, base_class, index_by_class_name)
+    classes = dict(classes.items() + new_classes.items())
+  return classes
 
-      if index_by_class_name:
-        key_name = camel_case.ToUnderscore(obj.__name__)
-      else:
-        key_name = module.__name__.split('.')[-1]
-      classes[key_name] = obj
+@decorators.Cache
+def DiscoverClassesInModule(module, base_class, index_by_class_name=False):
+  """Discover all classes in |module| which subclass |base_class|.
+
+  Base classes that contain subclasses are ignored by default.
+
+  Args:
+    module: The module to search.
+    base_class: The base class to search for.
+    index_by_class_name: If True, use class name converted to
+        lowercase_with_underscores instead of module name in return dict keys.
+
+  Returns:
+    dict of {module_name: class} or {underscored_class_name: class}
+  """
+  classes = {}
+  for _, obj in inspect.getmembers(module):
+    # Ensure object is a class.
+    if not inspect.isclass(obj):
+      continue
+    # Include only subclasses of base_class.
+    if not issubclass(obj, base_class):
+      continue
+    # Exclude the base_class itself.
+    if obj is base_class:
+      continue
+    # Exclude protected or private classes.
+    if obj.__name__.startswith('_'):
+      continue
+    # Include only the module in which the class is defined.
+    # If a class is imported by another module, exclude those duplicates.
+    if obj.__module__ != module.__name__:
+      continue
+
+    if index_by_class_name:
+      key_name = camel_case.ToUnderscore(obj.__name__)
+    else:
+      key_name = module.__name__.split('.')[-1]
+    classes[key_name] = obj
 
   return classes
 
+
 _counter = [0]
 def _GetUniqueModuleName():
   _counter[0] += 1
   return "module_" + str(_counter[0])
 
+
 def IsPageSetFile(file_path):
   root_name, ext_name = os.path.splitext(file_path)
-  if ('unittest' in root_name or
-      'page_sets/data' in root_name or
-      root_name in ('PRESUBMIT', '__init__')):
+  if 'unittest' in root_name or 'page_sets/data' in root_name:
     return False
-  if ext_name == '.json':
-    return True
-  elif ext_name != '.py':
+  if ext_name != '.py':
     return False
   module = util.GetPythonPageSetModule(file_path)
-  for class_name in dir(module):
-    if class_name.endswith('PageSet') and class_name != 'PageSet':
-      return True
-  return False
+  return bool(DiscoverClassesInModule(module, page_set.PageSet))
+
 
 def GetAllPageSetFilenames(dir_path):
   results = []
   for sub_path, _, filenames in os.walk(dir_path):
     for f in filenames:
+      if f.startswith('.'):
+        continue
       filename = os.path.join(sub_path, f)
       if IsPageSetFile(filename):
         results.append(filename)
diff --git a/tools/telemetry/telemetry/core/platform/desktop_platform_backend.py b/tools/telemetry/telemetry/core/platform/desktop_platform_backend.py
index 10f58b9..e734049 100644
--- a/tools/telemetry/telemetry/core/platform/desktop_platform_backend.py
+++ b/tools/telemetry/telemetry/core/platform/desktop_platform_backend.py
@@ -5,8 +5,8 @@
 import os
 import subprocess
 
-from telemetry.core import util
 from telemetry.core.platform import platform_backend
+from telemetry.util import support_binaries
 
 
 class DesktopPlatformBackend(platform_backend.PlatformBackend):
@@ -14,15 +14,12 @@
   # This is an abstract class. It is OK to have abstract methods.
   # pylint: disable=W0223
 
-  def GetFlushUtilityName(self):
-    return NotImplementedError()
-
   def FlushSystemCacheForDirectory(self, directory, ignoring=None):
     assert directory and os.path.exists(directory), \
         'Target directory %s must exist' % directory
-    flush_command = util.FindSupportBinary(self.GetFlushUtilityName())
-    assert flush_command, \
-        'You must build %s first' % self.GetFlushUtilityName()
+    flush_command = support_binaries.FindPath('clear_system_cache',
+                                              self.GetOSName())
+    assert flush_command, 'You must build clear_system_cache first'
 
     args = []
     directory_contents = os.listdir(directory)
diff --git a/tools/telemetry/telemetry/core/platform/linux_platform_backend.py b/tools/telemetry/telemetry/core/platform/linux_platform_backend.py
index 40dc647..044a994 100644
--- a/tools/telemetry/telemetry/core/platform/linux_platform_backend.py
+++ b/tools/telemetry/telemetry/core/platform/linux_platform_backend.py
@@ -13,6 +13,7 @@
 from telemetry.core.platform import posix_platform_backend
 from telemetry.core.platform import proc_supporting_platform_backend
 from telemetry.page import cloud_storage
+from telemetry.util import support_binaries
 
 
 class LinuxPlatformBackend(
@@ -81,8 +82,8 @@
         ['lsmod'], stdout=subprocess.PIPE).communicate()[0]
 
   def _InstallIpfw(self):
-    ipfw_bin = os.path.join(util.GetTelemetryDir(), 'bin', 'ipfw')
-    ipfw_mod = os.path.join(util.GetTelemetryDir(), 'bin', 'ipfw_mod.ko')
+    ipfw_bin = support_binaries.FindPath('ipfw', self.GetOSName())
+    ipfw_mod = support_binaries.FindPath('ipfw_mod.ko', self.GetOSName())
 
     try:
       changed = cloud_storage.GetIfChanged(
@@ -104,9 +105,9 @@
     assert self.CanLaunchApplication('ipfw'), 'Failed to install ipfw'
 
   def _InstallAvconv(self):
-    telemetry_bin_dir = os.path.join(util.GetTelemetryDir(), 'bin')
-    avconv_bin = os.path.join(telemetry_bin_dir, 'avconv')
-    os.environ['PATH'] += os.pathsep + telemetry_bin_dir
+    avconv_bin = support_binaries.FindPath('avconv', self.GetOSName())
+    os.environ['PATH'] += os.pathsep + os.path.join(util.GetTelemetryDir(),
+                                                    'bin')
 
     try:
       cloud_storage.GetIfChanged(avconv_bin, cloud_storage.INTERNAL_BUCKET)
diff --git a/tools/telemetry/telemetry/core/platform/posix_platform_backend.py b/tools/telemetry/telemetry/core/platform/posix_platform_backend.py
index 38781b0..9a867fd 100644
--- a/tools/telemetry/telemetry/core/platform/posix_platform_backend.py
+++ b/tools/telemetry/telemetry/core/platform/posix_platform_backend.py
@@ -68,9 +68,6 @@
     command = self._GetPsOutput(['command'], pid)
     return command[0] if command else None
 
-  def GetFlushUtilityName(self):
-    return 'clear_system_cache'
-
   def CanLaunchApplication(self, application):
     return bool(distutils.spawn.find_executable(application))
 
diff --git a/tools/telemetry/telemetry/core/platform/power_monitor/android_temperature_monitor.py b/tools/telemetry/telemetry/core/platform/power_monitor/android_temperature_monitor.py
index 355f3fa..90d32a5 100644
--- a/tools/telemetry/telemetry/core/platform/power_monitor/android_temperature_monitor.py
+++ b/tools/telemetry/telemetry/core/platform/power_monitor/android_temperature_monitor.py
@@ -39,6 +39,8 @@
     # Take the current temperature as average based on the assumption that the
     # temperature changes slowly during measurement time.
     average_temperature = self._GetBoardTemperatureCelsius()
+    if average_temperature is None:
+      return power_data
 
     # Insert temperature into the appropriate position in the dictionary
     # returned by StopMonitoringPower() creating appropriate sub-dictionaries on
@@ -57,5 +59,7 @@
 
   def _GetBoardTemperatureCelsius(self):
     contents = self._adb.GetFileContents(_TEMPERATURE_FILE)
-    return float(contents[0])
+    if len(contents) > 0:
+      return float(contents[0])
+    return None
 
diff --git a/tools/telemetry/telemetry/core/platform/power_monitor/android_temperature_monitor_unittest.py b/tools/telemetry/telemetry/core/platform/power_monitor/android_temperature_monitor_unittest.py
index 17fb506..eac74b3 100644
--- a/tools/telemetry/telemetry/core/platform/power_monitor/android_temperature_monitor_unittest.py
+++ b/tools/telemetry/telemetry/core/platform/power_monitor/android_temperature_monitor_unittest.py
@@ -8,12 +8,15 @@
 from telemetry.unittest import simple_mock
 
 
-class TemperatureDecoratorForTesting(
+_ = simple_mock.DONT_CARE
+
+
+class TemperatureMonitorForTesting(
     android_temperature_monitor.AndroidTemperatureMonitor):
   """Overrides interaction with ADB to test the rest."""
 
   def __init__(self, power_monitor, expected_temperature):
-    super(TemperatureDecoratorForTesting, self).__init__(power_monitor, None)
+    super(TemperatureMonitorForTesting, self).__init__(power_monitor, None)
     self._expected_temperature = expected_temperature
 
   def _GetBoardTemperatureCelsius(self):
@@ -28,25 +31,42 @@
 
 class AndroidTemperatureMonitorTest(unittest.TestCase):
   def testNoAttmptToMonitorIfIncapable(self):
-    power_monitor = simple_mock.MockObject()
-    power_monitor.ExpectCall('CanMonitorPower').WillReturn(False)
+    mock_power_monitor = simple_mock.MockObject()
+    mock_power_monitor.ExpectCall('CanMonitorPower').WillReturn(False)
 
-    delegate = TemperatureDecoratorForTesting(power_monitor, 42.0)
-    self.assertTrue(delegate.CanMonitorPower())
-    delegate.StartMonitoringPower(None)
-    power_results = delegate.StopMonitoringPower()
-    self.assertTrue(delegate.PowerMeasurementsConsistent(power_results))
+    temperature_monitor = TemperatureMonitorForTesting(mock_power_monitor, 42.0)
+    self.assertTrue(temperature_monitor.CanMonitorPower())
+    temperature_monitor.StartMonitoringPower(None)
+    power_results = temperature_monitor.StopMonitoringPower()
+    self.assertTrue(
+        temperature_monitor.PowerMeasurementsConsistent(power_results))
 
   def testPowerMonitoringResultsWereUpdated(self):
-    power_monitor = simple_mock.MockObject()
-    power_monitor.ExpectCall('CanMonitorPower').WillReturn(True)
+    mock_power_monitor = simple_mock.MockObject()
+    mock_power_monitor.ExpectCall('CanMonitorPower').WillReturn(True)
     fake_measurement = {'identifier' : '123'}
-    power_monitor.ExpectCall('StartMonitoringPower', simple_mock.DONT_CARE)
-    power_monitor.ExpectCall('StopMonitoringPower').WillReturn(fake_measurement)
+    mock_power_monitor.ExpectCall('StartMonitoringPower', _)
+    mock_power_monitor.ExpectCall('StopMonitoringPower').WillReturn(
+        fake_measurement)
 
-    delegate = TemperatureDecoratorForTesting(power_monitor, 24.0)
-    self.assertTrue(delegate.CanMonitorPower())
-    delegate.StartMonitoringPower(None)
-    measurements = delegate.StopMonitoringPower()
-    self.assertTrue(delegate.PowerMeasurementsConsistent(measurements))
+    temperature_monitor = TemperatureMonitorForTesting(mock_power_monitor, 24.0)
+    self.assertTrue(temperature_monitor.CanMonitorPower())
+    temperature_monitor.StartMonitoringPower(None)
+    measurements = temperature_monitor.StopMonitoringPower()
+    self.assertTrue(
+        temperature_monitor.PowerMeasurementsConsistent(measurements))
     self.assertEqual('123', measurements['identifier'])
+
+  def testSysfsReadFailed(self):
+    mock_power_monitor = simple_mock.MockObject()
+    mock_power_monitor.ExpectCall('CanMonitorPower').WillReturn(False)
+    mock_adb = simple_mock.MockObject()
+    mock_adb.ExpectCall('GetFileContents', _).WillReturn([])
+
+    monitor = android_temperature_monitor.AndroidTemperatureMonitor(
+        mock_power_monitor, mock_adb)
+    self.assertTrue(monitor.CanMonitorPower())
+    monitor.StartMonitoringPower(None)
+    measurements = monitor.StopMonitoringPower()
+    self.assertTrue('identifier' in measurements)
+    self.assertTrue('component_utilization' not in measurements)
diff --git a/tools/telemetry/telemetry/core/platform/profiler/android_prebuilt_profiler_helper.py b/tools/telemetry/telemetry/core/platform/profiler/android_prebuilt_profiler_helper.py
index 0e39cb2..17abf08 100644
--- a/tools/telemetry/telemetry/core/platform/profiler/android_prebuilt_profiler_helper.py
+++ b/tools/telemetry/telemetry/core/platform/profiler/android_prebuilt_profiler_helper.py
@@ -2,20 +2,13 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-"""Android-specific, downloads and installs pre-built profilers.
-
-These pre-built binaries are stored in Cloud Storage, and they were
-built from AOSP source. Specific profilers using this helper class contain
-more detailed information.
-"""
+"""Android-specific, installs pre-built profilers."""
 
 import logging
 import os
-import sys
 
 from telemetry import decorators
-from telemetry.core import util
-from telemetry.page import cloud_storage
+from telemetry.util import support_binaries
 
 
 _DEVICE_PROFILER_DIR = '/data/local/tmp/profilers/'
@@ -25,31 +18,15 @@
   return os.path.join(_DEVICE_PROFILER_DIR, os.path.basename(profiler_binary))
 
 
-def GetHostPath(profiler_binary):
-  return os.path.join(util.GetTelemetryDir(),
-                      'bin', 'prebuilt', 'android', profiler_binary)
-
-def GetIfChanged(profiler_binary):
-  cloud_storage.GetIfChanged(GetHostPath(profiler_binary),
-                             cloud_storage.PUBLIC_BUCKET)
-
-
 @decorators.Cache
 def InstallOnDevice(adb, profiler_binary):
-  host_binary_path = util.FindSupportBinary(profiler_binary)
-  if not host_binary_path:
-    has_prebuilt = (
-        sys.platform.startswith('linux') and
-        adb.system_properties['ro.product.cpu.abi'].startswith('armeabi'))
-    if has_prebuilt:
-      GetIfChanged(profiler_binary)
-      host_binary_path = GetHostPath(profiler_binary)
-    else:
-      logging.error('Profiler binary "%s" not found. Could not be installed',
-          profiler_binary)
-      return False
+  host_path = support_binaries.FindPath(profiler_binary, 'android')
+  if not host_path:
+    logging.error('Profiler binary "%s" not found. Could not be installed',
+                  host_path)
+    return False
 
   device_binary_path = GetDevicePath(profiler_binary)
-  adb.PushIfNeeded(host_binary_path, device_binary_path)
+  adb.PushIfNeeded(host_path, device_binary_path)
   adb.RunShellCommand('chmod 777 ' + device_binary_path)
   return True
diff --git a/tools/telemetry/telemetry/core/platform/profiler/oomkiller_profiler.py b/tools/telemetry/telemetry/core/platform/profiler/oomkiller_profiler.py
index 7cdb42a..e73eac1 100644
--- a/tools/telemetry/telemetry/core/platform/profiler/oomkiller_profiler.py
+++ b/tools/telemetry/telemetry/core/platform/profiler/oomkiller_profiler.py
@@ -4,9 +4,9 @@
 
 import os
 
-from telemetry.core import util
 from telemetry.core.backends.chrome import android_browser_finder
 from telemetry.core.platform import profiler
+from telemetry.util import support_binaries
 
 
 class UnableToFindApplicationException(Exception):
@@ -29,9 +29,8 @@
         browser_backend, platform_backend, output_path, state)
     if not 'mem_consumer_launched' in state:
       state['mem_consumer_launched'] = True
-      mem_consumer_path = util.FindSupportBinary(
-          os.path.join('apks', 'MemConsumer.apk'),
-          executable=False)
+      mem_consumer_path = support_binaries.FindPath(
+          os.path.join('apks', 'MemConsumer.apk'), 'android')
       assert mem_consumer_path, ('Could not find memconsumer app. Please build '
                                  'memconsumer target.')
       self._browser_backend.adb.Install(mem_consumer_path)
diff --git a/tools/telemetry/telemetry/core/platform/win_platform_backend.py b/tools/telemetry/telemetry/core/platform/win_platform_backend.py
index 7597488..c7dfa73 100644
--- a/tools/telemetry/telemetry/core/platform/win_platform_backend.py
+++ b/tools/telemetry/telemetry/core/platform/win_platform_backend.py
@@ -157,9 +157,6 @@
   def CanFlushIndividualFilesFromSystemCache(self):
     return True
 
-  def GetFlushUtilityName(self):
-    return 'clear_system_cache.exe'
-
   def _GetWin32ProcessInfo(self, func, pid):
     mask = (win32con.PROCESS_QUERY_INFORMATION |
             win32con.PROCESS_VM_READ)
diff --git a/tools/telemetry/telemetry/core/timeline/OWNERS b/tools/telemetry/telemetry/core/timeline/OWNERS
index db4ac41..d12cc95 100644
--- a/tools/telemetry/telemetry/core/timeline/OWNERS
+++ b/tools/telemetry/telemetry/core/timeline/OWNERS
@@ -1,2 +1 @@
 tengs@chromium.org
-ernstm@chromium.org
diff --git a/tools/telemetry/telemetry/core/util.py b/tools/telemetry/telemetry/core/util.py
index e44bd26..2ae9d72 100644
--- a/tools/telemetry/telemetry/core/util.py
+++ b/tools/telemetry/telemetry/core/util.py
@@ -1,6 +1,7 @@
 # Copyright (c) 2012 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 imp
 import inspect
 import logging
@@ -147,23 +148,3 @@
   for build_dir in build_dirs:
     for build_type in build_types:
       yield build_dir, build_type
-
-def FindSupportBinary(binary_name, executable=True):
-  """Returns the path to the given binary name."""
-  # TODO(tonyg/dtu): This should support finding binaries in cloud storage.
-  command = None
-  command_mtime = 0
-  required_mode = os.R_OK
-  if executable:
-    required_mode = os.X_OK
-
-  chrome_root = GetChromiumSrcDir()
-  for build_dir, build_type in GetBuildDirectories():
-    candidate = os.path.join(chrome_root, build_dir, build_type, binary_name)
-    if os.path.isfile(candidate) and os.access(candidate, required_mode):
-      candidate_mtime = os.stat(candidate).st_mtime
-      if candidate_mtime > command_mtime:
-        command = candidate
-        command_mtime = candidate_mtime
-
-  return command
diff --git a/tools/telemetry/telemetry/page/actions/gesture_action.py b/tools/telemetry/telemetry/page/actions/gesture_action.py
index 3c9ecb1..09a41fc 100644
--- a/tools/telemetry/telemetry/page/actions/gesture_action.py
+++ b/tools/telemetry/telemetry/page/actions/gesture_action.py
@@ -2,9 +2,11 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-import telemetry.core.timeline.bounds as timeline_bounds
 from telemetry.page.actions import page_action
 from telemetry.page.actions import wait
+from telemetry import decorators
+from telemetry.page.actions import action_runner
+from telemetry.web_perf import timeline_interaction_record as tir_module
 
 class GestureAction(page_action.PageAction):
   def __init__(self, attributes=None):
@@ -14,21 +16,17 @@
     else:
       self.wait_action = None
 
-    assert self.wait_until is None or self.wait_action is None, '''gesture
-cannot have wait_after and wait_until at the same time.'''
-
+    assert self.wait_until is None or self.wait_action is None, (
+      'gesture cannot have wait_after and wait_until at the same time.')
 
   def RunAction(self, page, tab):
-    tab.ExecuteJavaScript(
-        'console.time("' + self._GetUniqueTimelineMarkerName() + '")')
-
+    runner = action_runner.ActionRunner(None, tab)
+    interaction_name = 'Gesture_%s' % self.__class__.__name__
+    runner.BeginInteraction(interaction_name, [tir_module.IS_SMOOTH])
     self.RunGesture(page, tab)
-
-    tab.ExecuteJavaScript(
-        'console.timeEnd("' + self._GetUniqueTimelineMarkerName() + '")')
-
     if self.wait_action:
       self.wait_action.RunAction(page, tab)
+    runner.EndInteraction(interaction_name, [tir_module.IS_SMOOTH])
 
   def RunGesture(self, page, tab):
     raise NotImplementedError()
@@ -38,36 +36,18 @@
     gesture_source_type = tab.browser.synthetic_gesture_source_type
     return 'chrome.gpuBenchmarking.' + gesture_source_type.upper() + '_INPUT'
 
-  def GetActiveRangeOnTimeline(self, timeline):
-    action_range = super(GestureAction, self).GetActiveRangeOnTimeline(timeline)
-    if action_range.is_empty:
-      raise page_action.PageActionInvalidTimelineMarker(
-          'Gesture action requires timeline marker to determine active range.')
+  @staticmethod
+  @decorators.Cache
+  def IsGestureSourceTypeSupported(tab, gesture_source_type):
+    # TODO(dominikg): remove once support for
+    #                 'chrome.gpuBenchmarking.gestureSourceTypeSupported' has
+    #                 been rolled into reference build.
+    if tab.EvaluateJavaScript("""
+        typeof chrome.gpuBenchmarking.gestureSourceTypeSupported ===
+            'undefined'"""):
+      return True
 
-    # The synthetic gesture controller inserts a trace marker to precisely
-    # demarcate when the gesture was running. Find the trace marker that belongs
-    # to this action. We check for overlap, not inclusion, because
-    # gesture_actions can start/end slightly outside the action_range on
-    # Windows. This problem is probably caused by a race condition between
-    # the browser and renderer process submitting the trace events for the
-    # markers.
-    gesture_events = [
-        ev for ev
-        in timeline.GetAllEventsOfName('SyntheticGestureController::running',
-                                       True)
-        if ev.start <= action_range.max and
-           ev.start + ev.duration >= action_range.min ]
-    if len(gesture_events) == 0:
-      raise page_action.PageActionInvalidTimelineMarker(
-          'No valid synthetic gesture marker found in timeline.')
-    if len(gesture_events) > 1:
-      raise page_action.PageActionInvalidTimelineMarker(
-          'More than one possible synthetic gesture marker found in timeline.')
-
-    active_range = timeline_bounds.Bounds.CreateFromEvent(gesture_events[0])
-
-    if self.wait_action:
-      active_range.AddBounds(
-          self.wait_action.GetActiveRangeOnTimeline(timeline))
-
-    return active_range
+    return tab.EvaluateJavaScript("""
+        chrome.gpuBenchmarking.gestureSourceTypeSupported(
+            chrome.gpuBenchmarking.%s_INPUT)"""
+        % (gesture_source_type.upper()))
diff --git a/tools/telemetry/telemetry/page/actions/gesture_action_unittest.py b/tools/telemetry/telemetry/page/actions/gesture_action_unittest.py
index 1a666fa..9c6f909 100644
--- a/tools/telemetry/telemetry/page/actions/gesture_action_unittest.py
+++ b/tools/telemetry/telemetry/page/actions/gesture_action_unittest.py
@@ -11,7 +11,6 @@
   """Mock gesture action that simply sleeps for a specified amount of time."""
   def __init__(self, attributes=None):
     super(MockGestureAction, self).__init__(attributes)
-    self._SetTimelineMarkerBaseName('MockGestureAction::RunAction')
 
   def RunGesture(self, page, tab):
     duration = getattr(self, 'duration', 2)
diff --git a/tools/telemetry/telemetry/page/actions/interact.py b/tools/telemetry/telemetry/page/actions/interact.py
index b60cc00..4f30830 100644
--- a/tools/telemetry/telemetry/page/actions/interact.py
+++ b/tools/telemetry/telemetry/page/actions/interact.py
@@ -7,11 +7,6 @@
 class InteractAction(page_action.PageAction):
   def __init__(self, attributes=None):
     super(InteractAction, self).__init__(attributes)
-    self._SetTimelineMarkerBaseName('InteractAction::RunAction')
 
   def RunAction(self, page, tab):
-    tab.ExecuteJavaScript(
-        'console.time("' + self._GetUniqueTimelineMarkerName() + '")')
     raw_input("Interacting... Press Enter to continue.")
-    tab.ExecuteJavaScript(
-        'console.timeEnd("' + self._GetUniqueTimelineMarkerName() + '")')
diff --git a/tools/telemetry/telemetry/page/actions/page_action.py b/tools/telemetry/telemetry/page/actions/page_action.py
index f342888..5b78467 100644
--- a/tools/telemetry/telemetry/page/actions/page_action.py
+++ b/tools/telemetry/telemetry/page/actions/page_action.py
@@ -1,9 +1,6 @@
 # Copyright (c) 2012 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 telemetry.core.timeline.bounds as timeline_bounds
 from telemetry.page.actions import wait_until
 
 class PageActionNotSupported(Exception):
@@ -12,19 +9,14 @@
 class PageActionFailed(Exception):
   pass
 
-class PageActionInvalidTimelineMarker(Exception):
-  pass
 
 class PageAction(object):
   """Represents an action that a user might try to perform to a page."""
-  _next_timeline_marker_id = 0
 
   def __init__(self, attributes=None):
     if attributes:
       for k, v in attributes.iteritems():
         setattr(self, k, v)
-    self._timeline_marker_base_name = None
-    self._timeline_marker_id = None
     if hasattr(self, 'wait_until'):
       self.wait_until = wait_until.WaitUntil(self, self.wait_until)
     else:
@@ -70,32 +62,3 @@
       stop_js: JavaScript code that stops measurements.
     """
     raise Exception('This action cannot be bound.')
-
-  @staticmethod
-  def ResetNextTimelineMarkerId():
-    PageAction._next_timeline_marker_id = 0
-
-  def _SetTimelineMarkerBaseName(self, name):
-    self._timeline_marker_base_name = name
-    self._timeline_marker_id = PageAction._next_timeline_marker_id
-    PageAction._next_timeline_marker_id += 1
-
-  def _GetUniqueTimelineMarkerName(self):
-    if self._timeline_marker_base_name:
-      return \
-        '%s_%d' % (self._timeline_marker_base_name, self._timeline_marker_id)
-    else:
-      return None
-
-  def GetActiveRangeOnTimeline(self, timeline):
-    active_range = timeline_bounds.Bounds()
-
-    if self._GetUniqueTimelineMarkerName():
-      active_range.AddEvent(
-          timeline.GetEventOfName(self._GetUniqueTimelineMarkerName(),
-                                  True, True))
-    if self.wait_until:
-      active_range.AddBounds(
-          self.wait_until.GetActiveRangeOnTimeline(timeline))
-
-    return active_range
diff --git a/tools/telemetry/telemetry/page/actions/pinch.py b/tools/telemetry/telemetry/page/actions/pinch.py
index f600427..b7085c5 100644
--- a/tools/telemetry/telemetry/page/actions/pinch.py
+++ b/tools/telemetry/telemetry/page/actions/pinch.py
@@ -9,7 +9,6 @@
 class PinchAction(GestureAction):
   def __init__(self, attributes=None):
     super(PinchAction, self).__init__(attributes)
-    self._SetTimelineMarkerBaseName('PinchAction::RunAction')
 
   def WillRunAction(self, page, tab):
     for js_file in ['gesture_common.js', 'pinch.js']:
@@ -27,6 +26,10 @@
       raise page_action.PageActionNotSupported(
           'Pinch page action does not support mouse input')
 
+    if not GestureAction.IsGestureSourceTypeSupported(tab, 'touch'):
+      raise page_action.PageActionNotSupported(
+          'Touch input not supported for this browser')
+
     done_callback = 'function() { window.__pinchActionDone = true; }'
     tab.ExecuteJavaScript("""
         window.__pinchActionDone = false;
@@ -37,7 +40,7 @@
     left_anchor_percentage = getattr(self, 'left_anchor_percentage', 0.5)
     top_anchor_percentage = getattr(self, 'top_anchor_percentage', 0.5)
     zoom_in = getattr(self, 'zoom_in', True)
-    pixels_to_cover = getattr(self, 'pixels_to_cover', 4000)
+    pixels_to_cover = getattr(self, 'pixels_to_cover', 500)
     speed = getattr(self, 'speed', 800)
 
     if hasattr(self, 'element_function'):
diff --git a/tools/telemetry/telemetry/page/actions/repaint_continuously.py b/tools/telemetry/telemetry/page/actions/repaint_continuously.py
index c6578ab..d4e3c78 100644
--- a/tools/telemetry/telemetry/page/actions/repaint_continuously.py
+++ b/tools/telemetry/telemetry/page/actions/repaint_continuously.py
@@ -13,12 +13,9 @@
   """
   def __init__(self, attributes=None):
     super(RepaintContinuouslyAction, self).__init__(attributes)
-    self._SetTimelineMarkerBaseName('RepaintContinuouslyAction::RunAction')
 
   def RunAction(self, page, tab):
     assert(hasattr(self, 'seconds'))
-    tab.ExecuteJavaScript(
-        'console.time("' + self._GetUniqueTimelineMarkerName() + '")')
     start_time = time.time()
     tab.ExecuteJavaScript(
         'window.__rafCount = 0;'
@@ -42,6 +39,3 @@
       elif elapsed_time > self.seconds and raf_count > min_rafs:
         break
       time.sleep(1)
-
-    tab.ExecuteJavaScript(
-        'console.timeEnd("' + self._GetUniqueTimelineMarkerName() + '")')
diff --git a/tools/telemetry/telemetry/page/actions/scroll.py b/tools/telemetry/telemetry/page/actions/scroll.py
index 5b990e4..eddc535 100644
--- a/tools/telemetry/telemetry/page/actions/scroll.py
+++ b/tools/telemetry/telemetry/page/actions/scroll.py
@@ -9,7 +9,6 @@
 class ScrollAction(GestureAction):
   def __init__(self, attributes=None):
     super(ScrollAction, self).__init__(attributes)
-    self._SetTimelineMarkerBaseName('ScrollAction::RunAction')
 
   def WillRunAction(self, page, tab):
     for js_file in ['gesture_common.js', 'scroll.js']:
@@ -23,12 +22,9 @@
           'Synthetic scroll not supported for this browser')
 
     # Fail if this action requires touch and we can't send touch events.
-    # TODO(dominikg): Query synthetic gesture target to check if touch is
-    #                 supported.
     if hasattr(self, 'scroll_requires_touch'):
       if (self.scroll_requires_touch and not
-          tab.EvaluateJavaScript(
-            'chrome.gpuBenchmarking.smoothScrollBySendsTouch()')):
+          GestureAction.IsGestureSourceTypeSupported(tab, 'touch')):
         raise page_action.PageActionNotSupported(
             'Touch scroll not supported for this browser')
 
diff --git a/tools/telemetry/telemetry/page/actions/swipe.py b/tools/telemetry/telemetry/page/actions/swipe.py
index dc9dbe4..e5e7d53 100644
--- a/tools/telemetry/telemetry/page/actions/swipe.py
+++ b/tools/telemetry/telemetry/page/actions/swipe.py
@@ -9,7 +9,6 @@
 class SwipeAction(GestureAction):
   def __init__(self, attributes=None):
     super(SwipeAction, self).__init__(attributes)
-    self._SetTimelineMarkerBaseName('SwipeAction::RunAction')
 
   def WillRunAction(self, page, tab):
     for js_file in ['gesture_common.js', 'swipe.js']:
@@ -27,8 +26,9 @@
       raise page_action.PageActionNotSupported(
           'Swipe page action does not support mouse input')
 
-    # TODO(dominikg): Query synthetic gesture target to check if touch is
-    #                 supported.
+    if not GestureAction.IsGestureSourceTypeSupported(tab, 'touch'):
+      raise page_action.PageActionNotSupported(
+          'Touch input not supported for this browser')
 
     done_callback = 'function() { window.__swipeActionDone = true; }'
     tab.ExecuteJavaScript("""
diff --git a/tools/telemetry/telemetry/page/actions/tap.py b/tools/telemetry/telemetry/page/actions/tap.py
index 716109a..f238359 100644
--- a/tools/telemetry/telemetry/page/actions/tap.py
+++ b/tools/telemetry/telemetry/page/actions/tap.py
@@ -15,7 +15,6 @@
 class TapAction(GestureAction):
   def __init__(self, attributes=None):
     super(TapAction, self).__init__(attributes)
-    self._SetTimelineMarkerBaseName('TapAction::RunAction')
 
   def WillRunAction(self, page, tab):
     for js_file in ['gesture_common.js', 'tap.js']:
diff --git a/tools/telemetry/telemetry/page/actions/wait.py b/tools/telemetry/telemetry/page/actions/wait.py
index 22afba2..9185faa 100644
--- a/tools/telemetry/telemetry/page/actions/wait.py
+++ b/tools/telemetry/telemetry/page/actions/wait.py
@@ -12,7 +12,6 @@
   def __init__(self, attributes=None):
     self.timeout = 60
     super(WaitAction, self).__init__(attributes)
-    self._SetTimelineMarkerBaseName('WaitAction::RunAction')
 
   def _RunsPreviousAction(self):
     return (getattr(self, 'condition', None) == 'navigate' or
@@ -22,8 +21,6 @@
     assert not self._RunsPreviousAction(), \
         ('"navigate" and "href_change" support for wait is deprecated, use '
          'wait_until instead')
-    tab.ExecuteJavaScript(
-        'console.time("' + self._GetUniqueTimelineMarkerName() + '")')
 
     if hasattr(self, 'seconds'):
       time.sleep(self.seconds)
@@ -52,6 +49,3 @@
       tab.WaitForJavaScriptExpression(self.javascript, self.timeout)
     else:
       raise page_action.PageActionFailed('No wait condition found')
-
-    tab.ExecuteJavaScript(
-        'console.timeEnd("' + self._GetUniqueTimelineMarkerName() + '")')
diff --git a/tools/telemetry/telemetry/page/actions/wait_until.py b/tools/telemetry/telemetry/page/actions/wait_until.py
index 34c0be1..559e62c 100644
--- a/tools/telemetry/telemetry/page/actions/wait_until.py
+++ b/tools/telemetry/telemetry/page/actions/wait_until.py
@@ -2,14 +2,7 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-import telemetry.core.timeline.bounds as timeline_bounds
-
-
-WAIT_UNTIL_TIMELINE_MARKER = "WaitUntil"
-
-
 class WaitUntil(object):
-  _timeline_marker_id = 0
 
   def __init__(self, previous_action, attributes=None):
     assert previous_action is not None, 'wait_until must have a previous action'
@@ -19,20 +12,7 @@
         setattr(self, k, v)
     self._previous_action = previous_action
 
-  @staticmethod
-  def _IncrementMarkerId():
-    WaitUntil._timeline_marker_id += 1
-
-  def _GetUniqueTimelineMarkerName(self):
-    marker = \
-      '%s_%d' % (WAIT_UNTIL_TIMELINE_MARKER, WaitUntil._timeline_marker_id)
-    return marker
-
   def RunActionAndWait(self, page, tab):
-    self._IncrementMarkerId()
-    tab.ExecuteJavaScript(
-        'console.time("' + self._GetUniqueTimelineMarkerName() + '")')
-
     if getattr(self, 'condition', None) == 'navigate':
       self._previous_action.WillRunAction(page, tab)
       action_to_perform = lambda: self._previous_action.RunAction(page, tab)
@@ -46,11 +26,3 @@
       tab.WaitForJavaScriptExpression(
           'document.location.href != "%s"' % old_url, self.timeout)
 
-    tab.ExecuteJavaScript(
-        'console.timeEnd("' + self._GetUniqueTimelineMarkerName() + '")')
-
-  def GetActiveRangeOnTimeline(self, timeline):
-    active_range = timeline_bounds.Bounds()
-    active_range.AddEvent(
-      timeline.GetEventOfName(self._GetUniqueTimelineMarkerName(),True, True))
-    return active_range
diff --git a/tools/telemetry/telemetry/page/extensions_profile_creator.py b/tools/telemetry/telemetry/page/extensions_profile_creator.py
index 4fec966..2ea15bd 100644
--- a/tools/telemetry/telemetry/page/extensions_profile_creator.py
+++ b/tools/telemetry/telemetry/page/extensions_profile_creator.py
@@ -84,7 +84,7 @@
 
   def __init__(self):
     super(ExtensionsProfileCreator, self).__init__()
-    typical_25 = os.path.join(util.GetBaseDir(), 'page_sets', 'typical_25.json')
+    typical_25 = os.path.join(util.GetBaseDir(), 'page_sets', 'typical_25.py')
     self._page_set = page_set.PageSet.FromFile(typical_25)
 
     # Directory into which the output profile is written.
diff --git a/tools/telemetry/telemetry/page/page_runner.py b/tools/telemetry/telemetry/page/page_runner.py
index 1f579a4..21a4ce1 100644
--- a/tools/telemetry/telemetry/page/page_runner.py
+++ b/tools/telemetry/telemetry/page/page_runner.py
@@ -19,6 +19,7 @@
 from telemetry.core import util
 from telemetry.core import wpr_modes
 from telemetry.core.platform.profiler import profiler_finder
+from telemetry.page import cloud_storage
 from telemetry.page import page_filter
 from telemetry.page import page_runner_repeat
 from telemetry.page import page_test
@@ -211,11 +212,9 @@
 
   # WPR options
   group = optparse.OptionGroup(parser, 'Web Page Replay options')
-  group.add_option('--allow-live-sites',
-      dest='allow_live_sites', action='store_true',
-      help='Run against live sites if the Web Page Replay archives don\'t '
-           'exist. Without this flag, the test will just fail instead '
-           'of running against live sites.')
+  group.add_option('--use-live-sites',
+      dest='use_live_sites', action='store_true',
+      help='Run against live sites and ignore the Web Page Replay archives.')
   parser.add_option_group(group)
 
 
@@ -312,6 +311,35 @@
         raise
 
 
+def _UpdatePageSetArchivesIfChanged(page_set):
+  # Attempt to download the credentials file.
+  if page_set.credentials_path:
+    try:
+      cloud_storage.GetIfChanged(
+          os.path.join(page_set.base_dir, page_set.credentials_path))
+    except (cloud_storage.CredentialsError, cloud_storage.PermissionError):
+      logging.warning('Cannot retrieve credential file: %s',
+                      page_set.credentials_path)
+  # Scan every serving directory for .sha1 files
+  # and download them from Cloud Storage. Assume all data is public.
+  all_serving_dirs = page_set.serving_dirs.copy()
+  # Add individual page dirs to all serving dirs.
+  for page in page_set:
+    if page.is_file:
+      all_serving_dirs.add(page.serving_dir)
+  # Scan all serving dirs.
+  for serving_dir in all_serving_dirs:
+    if os.path.splitdrive(serving_dir)[1] == '/':
+      raise ValueError('Trying to serve root directory from HTTP server.')
+    for dirpath, _, filenames in os.walk(serving_dir):
+      for filename in filenames:
+        path, extension = os.path.splitext(
+            os.path.join(dirpath, filename))
+        if extension != '.sha1':
+          continue
+        cloud_storage.GetIfChanged(path)
+
+
 def Run(test, page_set, expectations, finder_options):
   """Runs a given test against a given page_set with the given options."""
   results = results_options.PrepareResults(test, finder_options)
@@ -342,8 +370,9 @@
   # Reorder page set based on options.
   pages = _ShuffleAndFilterPageSet(page_set, finder_options)
 
-  if (not finder_options.allow_live_sites and
+  if (not finder_options.use_live_sites and
       browser_options.wpr_mode != wpr_modes.WPR_RECORD):
+    _UpdatePageSetArchivesIfChanged(page_set)
     pages = _CheckArchives(page_set, pages, results)
 
   # Verify credentials path.
@@ -438,7 +467,7 @@
     if not page_set.archive_data_file:
       logging.warning('The page set is missing an "archive_data_file" '
                       'property. Skipping any live sites. To include them, '
-                      'pass the flag --allow-live-sites.')
+                      'pass the flag --use-live-sites.')
     if not page_set.wpr_archive_info:
       logging.warning('The archive info file is missing. '
                       'To fix this, either add svn-internal to your '
@@ -462,13 +491,13 @@
     logging.warning('The page set archives for some pages do not exist. '
                     'Skipping those pages. To fix this, record those pages '
                     'using record_wpr. To ignore this warning and run '
-                    'against live sites, pass the flag --allow-live-sites.')
+                    'against live sites, pass the flag --use-live-sites.')
   if pages_missing_archive_data:
     logging.warning('The page set archives for some pages are missing. '
                     'Someone forgot to check them in, or they were deleted. '
                     'Skipping those pages. To fix this, record those pages '
                     'using record_wpr. To ignore this warning and run '
-                    'against live sites, pass the flag --allow-live-sites.')
+                    'against live sites, pass the flag --use-live-sites.')
 
   for page in pages_missing_archive_path + pages_missing_archive_data:
     results.StartTest(page)
@@ -489,8 +518,6 @@
 
   page_state = PageState(page, test.TabForPage(page, state.browser))
 
-  page_action.PageAction.ResetNextTimelineMarkerId()
-
   def ProcessError():
     logging.error('%s:', page.url)
     exception_formatter.PrintFormattedException()
diff --git a/tools/telemetry/telemetry/page/page_set.py b/tools/telemetry/telemetry/page/page_set.py
index a090786..b746ca4 100644
--- a/tools/telemetry/telemetry/page/page_set.py
+++ b/tools/telemetry/telemetry/page/page_set.py
@@ -4,13 +4,10 @@
 
 import csv
 import inspect
-import json
-import logging
 import os
 import sys
 
 from telemetry.core import util
-from telemetry.page import cloud_storage
 from telemetry.page import page as page_module
 from telemetry.page import page_set_archive_info
 from telemetry.page.actions.navigate import NavigateAction
@@ -35,7 +32,7 @@
 class PageSet(object):
   def __init__(self, file_path='', description='', archive_data_file='',
                credentials_path=None, user_agent_type=None,
-               make_javascript_deterministic=True, startup_url='', pages=None,
+               make_javascript_deterministic=True, startup_url='',
                serving_dirs=None):
     self.file_path = file_path
     # These attributes can be set dynamically by the page set.
@@ -44,12 +41,9 @@
     self.credentials_path = credentials_path
     self.user_agent_type = user_agent_type
     self.make_javascript_deterministic = make_javascript_deterministic
-    self.wpr_archive_info = None
+    self._wpr_archive_info = None
     self.startup_url = startup_url
-    if pages:
-      self.pages = pages
-    else:
-      self.pages = []
+    self.pages = []
     if serving_dirs:
       self.serving_dirs = serving_dirs
     else:
@@ -69,7 +63,7 @@
       for page_attributes in attributes['pages']:
         url = page_attributes.pop('url')
         page = page_module.Page(
-            url, self, base_dir=self._base_dir)
+            url, self, base_dir=self.base_dir)
         for k, v in page_attributes.iteritems():
           setattr(page, k, v)
         page._SchemeErrorCheck()  # pylint: disable=W0212
@@ -80,7 +74,7 @@
             delattr(page, legacy_name)
         self.AddPage(page)
 
-    # Prepend _base_dir to our serving dirs.
+    # Prepend base_dir to our serving dirs.
     # Always use realpath to ensure no duplicates in set.
     self.serving_dirs = set()
     if attributes and 'serving_dirs' in attributes:
@@ -88,48 +82,19 @@
         raise ValueError('serving_dirs must be a list.')
       for serving_dir in attributes['serving_dirs']:
         self.serving_dirs.add(
-            os.path.realpath(os.path.join(self._base_dir, serving_dir)))
-    self._Initialize()
-
-  def _Initialize(self):
-    # Create a PageSetArchiveInfo object.
-    if self.archive_data_file:
-      self.wpr_archive_info = page_set_archive_info.PageSetArchiveInfo.FromFile(
-          os.path.join(self._base_dir, self.archive_data_file))
-
-    # Attempt to download the credentials file.
-    if self.credentials_path:
-      try:
-        cloud_storage.GetIfChanged(
-            os.path.join(self._base_dir, self.credentials_path))
-      except (cloud_storage.CredentialsError,
-              cloud_storage.PermissionError):
-        logging.warning('Cannot retrieve credential file: %s',
-                        self.credentials_path)
-
-    # Scan every serving directory for .sha1 files
-    # and download them from Cloud Storage. Assume all data is public.
-    all_serving_dirs = self.serving_dirs.copy()
-    # Add individual page dirs to all serving dirs.
-    for page in self:
-      if page.is_file:
-        all_serving_dirs.add(page.serving_dir)
-    # Scan all serving dirs.
-    for serving_dir in all_serving_dirs:
-      if os.path.splitdrive(serving_dir)[1] == '/':
-        raise ValueError('Trying to serve root directory from HTTP server.')
-      for dirpath, _, filenames in os.walk(serving_dir):
-        for filename in filenames:
-          path, extension = os.path.splitext(
-              os.path.join(dirpath, filename))
-          if extension != '.sha1':
-            continue
-          cloud_storage.GetIfChanged(path)
+            os.path.realpath(os.path.join(self.base_dir, serving_dir)))
 
   def AddPage(self, page):
     assert page.page_set is self
     self.pages.append(page)
 
+  def AddPageWithDefaultRunNavigate(self, page_url):
+    """ Add a simple page with url equals to page_url that contains only default
+    RunNavigateSteps.
+    """
+    self.AddPage(page_module.PageWithDefaultRunNavigate(
+      page_url, self, self.base_dir))
+
   # In json page_set, a page inherits attributes from its page_set. With
   # python page_set, this property will no longer be needed since pages can
   # share property through a common ancestor class.
@@ -140,9 +105,7 @@
   @staticmethod
   def FromFile(file_path):
     _, ext_name = os.path.splitext(file_path)
-    if ext_name == '.json':
-      return PageSet.FromJSONFile(file_path)
-    elif ext_name == '.py':
+    if ext_name == '.py':
       return PageSet.FromPythonFile(file_path)
     else:
       raise PageSetError("Pageset %s has unsupported file type" % file_path)
@@ -164,7 +127,7 @@
       abs_serving_dirs = set()
       for serving_dir in page_set.serving_dirs:
         abs_serving_dirs.add(os.path.realpath(os.path.join(
-          page_set._base_dir,  # pylint: disable=W0212
+          page_set.base_dir,  # pylint: disable=W0212
           serving_dir)))
       page_set.serving_dirs = abs_serving_dirs
     for page in page_set.pages:
@@ -178,34 +141,39 @@
             raise PageSetError("""Definition of Run<...> method of all
 pages in %s must be in the form of def Run<...>(self, action_runner):"""
                                      % file_path)
-      # Set page's _base_dir attribute.
+      # Set page's base_dir attribute.
       page_file_path = sys.modules[page_class.__module__].__file__
       page._base_dir = os.path.dirname(page_file_path)
 
-    page_set._Initialize() # pylint: disable=W0212
     return page_set
 
-
-  @staticmethod
-  def FromJSONFile(file_path):
-    with open(file_path, 'r') as f:
-      contents = f.read()
-    data = json.loads(contents)
-    return PageSet.FromDict(data, file_path)
-
   @staticmethod
   def FromDict(attributes, file_path=''):
     page_set = PageSet(file_path)
-    page_set._InitializeFromDict(attributes) # pylint: disable=W0212
+    # pylint: disable=W0212
+    page_set._InitializeFromDict(attributes)
     return page_set
 
   @property
-  def _base_dir(self):
+  def base_dir(self):
     if os.path.isfile(self.file_path):
       return os.path.dirname(self.file_path)
     else:
       return self.file_path
 
+  @property
+  def wpr_archive_info(self):  # pylint: disable=E0202
+    """Lazily constructs wpr_archive_info if it's not set and returns it."""
+    if self.archive_data_file and not self._wpr_archive_info:
+      self._wpr_archive_info = (
+          page_set_archive_info.PageSetArchiveInfo.FromFile(
+            os.path.join(self.base_dir, self.archive_data_file)))
+    return self._wpr_archive_info
+
+  @wpr_archive_info.setter
+  def wpr_archive_info(self, value):  # pylint: disable=E0202
+    self._wpr_archive_info = value
+
   def ContainsOnlyFileURLs(self):
     for page in self.pages:
       if not page.is_file:
diff --git a/tools/telemetry/telemetry/page/page_set_archive_info.py b/tools/telemetry/telemetry/page/page_set_archive_info.py
index d69314d..c9a7959 100644
--- a/tools/telemetry/telemetry/page/page_set_archive_info.py
+++ b/tools/telemetry/telemetry/page/page_set_archive_info.py
@@ -12,7 +12,7 @@
 
 
 class PageSetArchiveInfo(object):
-  def __init__(self, file_path, data):
+  def __init__(self, file_path, data, ignore_archive=False):
     self._file_path = file_path
     self._base_dir = os.path.dirname(file_path)
 
@@ -21,17 +21,17 @@
       os.makedirs(self._base_dir)
 
     # Download all .wpr files.
-    for archive_path in data['archives']:
-      archive_path = self._WprFileNameToPath(archive_path)
-      try:
-        cloud_storage.GetIfChanged(archive_path)
-      except (cloud_storage.CredentialsError,
-              cloud_storage.PermissionError):
-        if os.path.exists(archive_path):
-          # If the archive exists, assume the user recorded their own and
-          # simply warn.
-          logging.warning('Need credentials to update WPR archive: %s',
-                          archive_path)
+    if not ignore_archive:
+      for archive_path in data['archives']:
+        archive_path = self._WprFileNameToPath(archive_path)
+        try:
+          cloud_storage.GetIfChanged(archive_path)
+        except (cloud_storage.CredentialsError, cloud_storage.PermissionError):
+          if os.path.exists(archive_path):
+            # If the archive exists, assume the user recorded their own and
+            # simply warn.
+            logging.warning('Need credentials to update WPR archive: %s',
+                            archive_path)
 
     # Map from the relative path (as it appears in the metadata file) of the
     # .wpr file to a list of page names it supports.
@@ -48,12 +48,12 @@
     self.temp_target_wpr_file_path = None
 
   @classmethod
-  def FromFile(cls, file_path):
+  def FromFile(cls, file_path, ignore_archive=False):
     if os.path.exists(file_path):
       with open(file_path, 'r') as f:
         data = json.load(f)
-        return cls(file_path, data)
-    return cls(file_path, {'archives': {}})
+        return cls(file_path, data, ignore_archive=ignore_archive)
+    return cls(file_path, {'archives': {}}, ignore_archive=ignore_archive)
 
   def WprFilePathForPage(self, page):
     if self.temp_target_wpr_file_path:
diff --git a/tools/telemetry/telemetry/page/page_set_unittest.py b/tools/telemetry/telemetry/page/page_set_unittest.py
index f7aa93e..c5e9e46 100644
--- a/tools/telemetry/telemetry/page/page_set_unittest.py
+++ b/tools/telemetry/telemetry/page/page_set_unittest.py
@@ -10,49 +10,7 @@
 from telemetry.page import page_set
 
 
-simple_archive_info = """
-{
-"archives": {
-  "data_01.wpr": ["http://www.foo.com/"],
-  "data_02.wpr": ["http://www.bar.com/"]
-}
-}
-"""
-
-
-simple_set = """
-{"description": "hello",
- "archive_data_file": "%s",
- "pages": [
-   {"url": "http://www.foo.com/"},
-   {"url": "http://www.bar.com/"}
- ]
-}
-"""
-
-
 class TestPageSet(unittest.TestCase):
-  def testSimpleSet(self):
-    try:
-      with tempfile.NamedTemporaryFile(delete=False, suffix=".json") as f:
-        f.write(simple_archive_info)
-
-      with tempfile.NamedTemporaryFile(delete=False, suffix=".json") as f2:
-        f2.write(simple_set % f.name.replace('\\', '\\\\'))
-
-      ps = page_set.PageSet.FromFile(f2.name)
-    finally:
-      os.remove(f.name)
-      os.remove(f2.name)
-
-    self.assertEquals('hello', ps.description)
-    self.assertEquals(f.name, ps.archive_data_file)
-    self.assertEquals(2, len(ps.pages))
-    self.assertEquals('http://www.foo.com/', ps.pages[0].url)
-    self.assertEquals('http://www.bar.com/', ps.pages[1].url)
-    self.assertEquals('data_01.wpr', os.path.basename(ps.pages[0].archive_path))
-    self.assertEquals('data_02.wpr', os.path.basename(ps.pages[1].archive_path))
-
   def testServingDirs(self):
     directory_path = tempfile.mkdtemp()
     try:
diff --git a/tools/telemetry/telemetry/test.py b/tools/telemetry/telemetry/test.py
index b3cc4d9..5f52aff 100644
--- a/tools/telemetry/telemetry/test.py
+++ b/tools/telemetry/telemetry/test.py
@@ -173,7 +173,7 @@
     if not hasattr(cls, 'page_set'):
       raise NotImplementedError('This test has no "page_set" attribute.')
     return page_set.PageSet.FromFile(
-        os.path.join(util.GetBaseDir(), cls.page_set))
+        file_path=os.path.join(util.GetBaseDir(), cls.page_set))
 
   @classmethod
   def CreateExpectations(cls, ps):  # pylint: disable=W0613
diff --git a/tools/telemetry/telemetry/util/support_binaries.py b/tools/telemetry/telemetry/util/support_binaries.py
new file mode 100644
index 0000000..e3a4d89
--- /dev/null
+++ b/tools/telemetry/telemetry/util/support_binaries.py
@@ -0,0 +1,50 @@
+# 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 os
+
+from telemetry import decorators
+from telemetry.core import util
+from telemetry.page import cloud_storage
+
+
+def _GetBinPath(binary_name, platform_name):
+  # TODO(tonyg): Add another nesting level for architecture_name.
+  return os.path.join(util.GetTelemetryDir(), 'bin', platform_name, binary_name)
+
+
+def _IsInCloudStorage(binary_name, platform_name):
+  return os.path.exists(_GetBinPath(binary_name, platform_name) + '.sha1')
+
+
+@decorators.Cache
+def FindLocallyBuiltPath(binary_name):
+  """Finds the most recently built |binary_name|."""
+  command = None
+  command_mtime = 0
+  chrome_root = util.GetChromiumSrcDir()
+  required_mode = os.X_OK
+  if binary_name.endswith('.apk'):
+    required_mode = os.R_OK
+  for build_dir, build_type in util.GetBuildDirectories():
+    candidate = os.path.join(chrome_root, build_dir, build_type, binary_name)
+    if os.path.isfile(candidate) and os.access(candidate, required_mode):
+      candidate_mtime = os.stat(candidate).st_mtime
+      if candidate_mtime > command_mtime:
+        command = candidate
+        command_mtime = candidate_mtime
+  return command
+
+
+@decorators.Cache
+def FindPath(binary_name, platform_name):
+  """Returns the path to the given binary name, pulling from the cloud if
+  necessary."""
+  if platform_name == 'win':
+    binary_name += '.exe'
+  command = FindLocallyBuiltPath(binary_name)
+  if not command and _IsInCloudStorage(binary_name, platform_name):
+    cloud_storage.GetIfChanged(_GetBinPath(binary_name, platform_name))
+    command = _GetBinPath(binary_name, platform_name)
+  return command
diff --git a/tools/telemetry/unittest_data/animated_page.html b/tools/telemetry/unittest_data/animated_page.html
new file mode 100644
index 0000000..3eb9502
--- /dev/null
+++ b/tools/telemetry/unittest_data/animated_page.html
@@ -0,0 +1,21 @@
+<!doctype html>
+<html>
+  <head>
+    <style type="text/css">
+    @-webkit-keyframes rotating {
+      from{
+        -webkit-transform: rotate(0deg);
+      }
+      to{
+        -webkit-transform: rotate(360deg);
+      }
+    }
+    .rotating {
+      -webkit-animation: rotating 2s linear infinite;
+    }
+    </style>
+  </head>
+  <body>
+    <img src="image.png" class="rotating">
+  </body>
+</html>
diff --git a/tools/valgrind/chrome_tests.py b/tools/valgrind/chrome_tests.py
index 94ea001..79d4fce 100755
--- a/tools/valgrind/chrome_tests.py
+++ b/tools/valgrind/chrome_tests.py
@@ -29,7 +29,7 @@
 
 class ChromeTests:
   SLOW_TOOLS = ["memcheck", "tsan", "tsan_rv", "drmemory"]
-  LAYOUT_TESTS_DEFAULT_CHUNK_SIZE = 400
+  LAYOUT_TESTS_DEFAULT_CHUNK_SIZE = 300
 
   def __init__(self, options, args, test):
     if ':' in test:
@@ -281,9 +281,6 @@
   def TestContent(self):
     return self.SimpleTest("content", "content_unittests")
 
-  def TestContentBrowser(self):
-    return self.SimpleTest("content", "content_browsertests")
-
   def TestCourgette(self):
     return self.SimpleTest("courgette", "courgette_unittests")
 
@@ -391,6 +388,11 @@
                            valgrind_test_args=self.BROWSER_VALGRIND_ARGS,
                            cmd_args=self.BROWSER_TEST_ARGS)
 
+  def TestContentBrowser(self):
+    return self.SimpleTest("content", "content_browsertests",
+                           valgrind_test_args=self.BROWSER_VALGRIND_ARGS,
+                           cmd_args=self.BROWSER_TEST_ARGS)
+
   def TestInteractiveUI(self):
     return self.SimpleTest("chrome", "interactive_ui_tests",
                            valgrind_test_args=self.UI_VALGRIND_ARGS,
diff --git a/tools/valgrind/drmemory/suppressions.txt b/tools/valgrind/drmemory/suppressions.txt
index c8f014b..3096679 100644
--- a/tools/valgrind/drmemory/suppressions.txt
+++ b/tools/valgrind/drmemory/suppressions.txt
@@ -232,13 +232,6 @@
 name=::Crasher::Run deliberate crash
 *!base::`anonymous namespace'::Crasher::Run
 
-UNADDRESSABLE ACCESS
-name=intentional OOM in layout test: fast/js/string-replacement-outofmemory.html
-*!WebCore::reportFatalErrorInMainThread
-*!v8::internal::V8::FatalProcessOutOfMemory
-...
-*!WebCore::HTMLScriptRunner::executePendingScriptAndDispatchEvent
-
 ############################
 # Benign issues in Chromium
 
@@ -453,3 +446,12 @@
 KERNEL32.dll!DuplicateHandle*
 base.dll!base::`anonymous namespace'::ThreadFunc
 KERNEL32.dll!BaseThreadInitThunk
+
+HANDLE LEAK
+name=http://crbug.com/366246
+system call NtDuplicateObject
+KERNELBASE.dll!DuplicateHandle
+KERNEL32.dll!DuplicateHandle
+base.dll!base::SharedMemory::ShareToProcessCommon
+content.dll!content::ResourceBuffer::ShareToProcess
+content.dll!content::AsyncResourceHandler::OnReadCompleted
diff --git a/tools/valgrind/drmemory/suppressions_full.txt b/tools/valgrind/drmemory/suppressions_full.txt
index 86839a8..99822b6 100644
--- a/tools/valgrind/drmemory/suppressions_full.txt
+++ b/tools/valgrind/drmemory/suppressions_full.txt
@@ -1954,6 +1954,7 @@
 
 UNADDRESSABLE ACCESS
 name=bug_340752
+...
 blink_heap.dll!WebCore::ThreadState::visitStack
 blink_heap.dll!WebCore::ThreadState::trace
 blink_heap.dll!WebCore::ThreadState::visitRoots
@@ -1998,8 +1999,7 @@
 ...
 content.dll!content::BrowserAccessibilityManagerWin::*
 ...
-content.dll!content::BrowserAccessibilityManager::UpdateNode
-content.dll!content::BrowserAccessibilityManager::UpdateNodes
+*!*::UpdateNode
 
 UNINITIALIZED READ
 name=bug_347976
@@ -2023,3 +2023,45 @@
 gpu.dll!gpu::gles2::GLES2DecoderImpl::HandleDrawElements
 gpu.dll!gpu::gles2::GLES2DecoderImpl::DoCommand
 gpu.dll!gpu::CommandParser::ProcessCommand
+
+UNINITIALIZED READ
+name=bug_361594
+...
+skia.dll!SkA8_Shader_Blitter::blitH
+skia.dll!SkBlitter::blitRect
+skia.dll!blitrect
+skia.dll!SkScan::FillIRect
+...
+skia.dll!SkDraw::drawRect
+skia.dll!SkDraw::drawBitmap
+skia.dll!SkBitmapDevice::drawBitmap
+skia.dll!SkCanvas::internalDrawBitmap
+skia.dll!SkCanvas::drawBitmap
+content.dll!content::ScreenshotData::EncodeOnWorker
+
+UNINITIALIZED READ
+name=bug_363487
+blink_web.dll!WebCore::RenderLayerCompositor::updateIfNeeded
+blink_web.dll!WebCore::RenderLayerCompositor::updateIfNeededRecursive
+blink_web.dll!WebCore::FrameView::updateLayoutAndStyleForPainting
+blink_web.dll!WebCore::PageAnimator::updateLayoutAndStyleForPainting
+
+UNINITIALIZED READ
+name=bug_364675
+blink_web.dll!WebCore::AutoTableLayout::layout
+blink_web.dll!WebCore::RenderTable::layout
+blink_web.dll!WebCore::RenderBlockFlow::layoutBlockChild
+blink_web.dll!WebCore::RenderBlockFlow::layoutBlockChildren
+blink_web.dll!WebCore::RenderBlockFlow::layoutBlockFlow
+blink_web.dll!WebCore::RenderBlockFlow::layoutBlock
+blink_web.dll!WebCore::RenderBlock::layout
+
+UNINITIALIZED READ
+name=bug_365101
+*!device::BluetoothAdapterWin::AdapterStateChanged
+
+UNINITIALIZED READ
+name=bug_364146
+...
+v8.dll!*
+net_with_v8.dll!net::ProxyResolverV8::Context::*
diff --git a/tools/valgrind/fixed_suppressions.sh b/tools/valgrind/fixed_suppressions.sh
new file mode 100755
index 0000000..d2aae91
--- /dev/null
+++ b/tools/valgrind/fixed_suppressions.sh
@@ -0,0 +1,15 @@
+#!/bin/bash
+# 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.
+
+bugs=$(egrep -o 'bug_[0-9]+' tools/valgrind/memcheck/suppressions.txt |\
+    sed -e 's/bug_//' | sort -n | uniq);
+fixed_status='(Fixed|Verified|Duplicate|FixUnreleased|WontFix|Invalid|IceBox)'
+fixed_status="${fixed_status}</span>"
+for bug in $bugs; do
+  echo "Checking bug #$bug";
+  curl -s "http://code.google.com/p/chromium/issues/detail?id=$bug" |\
+     egrep -q $fixed_status;
+  if [ $? -eq 0 ]; then echo "Bug #$bug seems to be closed (http://crbug.com/$bug)"; fi
+done
diff --git a/tools/valgrind/gtest_exclude/content_browsertests.gtest-drmemory_win32.txt b/tools/valgrind/gtest_exclude/content_browsertests.gtest-drmemory_win32.txt
new file mode 100644
index 0000000..8e06c50
--- /dev/null
+++ b/tools/valgrind/gtest_exclude/content_browsertests.gtest-drmemory_win32.txt
@@ -0,0 +1,4 @@
+# Dr.Memory-i#1528-c#1
+RenderViewImplTest.SendProgressCompletionUpdates
+WebRtcBrowserTests/WebRtcBrowserTest.Ca*
+WebRtcBrowserTests/WebRtcBrowserTest.NegotiateOfferWithBLine*
diff --git a/tools/valgrind/gtest_exclude/content_unittests.gtest_mac.txt b/tools/valgrind/gtest_exclude/content_unittests.gtest_mac.txt
index 0e4aa7b..1deed43 100644
--- a/tools/valgrind/gtest_exclude/content_unittests.gtest_mac.txt
+++ b/tools/valgrind/gtest_exclude/content_unittests.gtest_mac.txt
@@ -49,3 +49,6 @@
 # http://crbug.com/303709
 GamepadProviderTest.PollingAccess
 GamepadProviderTest.UserGesture
+
+# Flaky. http://crbug.com/365715
+AppCacheRequestHandlerTest.MainResource_Miss
diff --git a/tools/valgrind/memcheck/suppressions.txt b/tools/valgrind/memcheck/suppressions.txt
index 536a8e1..35be718 100644
--- a/tools/valgrind/memcheck/suppressions.txt
+++ b/tools/valgrind/memcheck/suppressions.txt
@@ -360,9 +360,9 @@
    Memcheck:Leak
    fun:_Znw*
    fun:_ZN7content17WorkerProcessHost20CreateMessageFiltersEi
-   fun:_ZN7content17WorkerProcessHost4InitEi
+   fun:_ZN7content17WorkerProcessHost4InitE*
    fun:_ZN7content17WorkerServiceImpl24CreateWorkerFromInstanceENS_17WorkerProcessHost14WorkerInstanceE
-   fun:_ZN7content17WorkerServiceImpl12CreateWorkerERK31ViewHostMsg_CreateWorker_ParamsiPNS_19WorkerMessageFilterEPNS_15ResourceContextERKNS_22WorkerStoragePartitionE
+   fun:_ZN7content17WorkerServiceImpl12CreateWorkerE*
    fun:_ZN7content19WorkerMessageFilter14OnCreateWorkerERK31ViewHostMsg_CreateWorker_ParamsPi
 }
 {
@@ -407,14 +407,6 @@
    fun:_ZN3ash5ShellC1EPNS_13ShellDelegateE
    fun:_ZN3ash5Shell14CreateInstanceEPNS_13ShellDelegateE
 }
-{
-   intentional OOM in layout test: fast/js/string-replacement-outofmemory.html
-   Memcheck:Unaddressable
-   fun:_ZN7WebCoreL28reportFatalErrorInMainThreadEPKcS1_
-   fun:_ZN2v88internal2V823FatalProcessOutOfMemoryEPKcb
-   ...
-   fun:_ZN7WebCore16HTMLScriptRunner36executePendingScriptAndDispatchEventERNS_13PendingScriptE
-}
 
 # http://crbug.com/269278 causes really widespread, flaky leaks in
 # value objects that own some memory.  These suppressions will cover
@@ -451,29 +443,6 @@
 # These should all be in chromium's bug tracking system (but a few aren't yet).
 
 {
-   # Chromium flakily leaks tasks at shutdown, see
-   # http://crbug.com/6532
-   # http://codereview.chromium.org/20067
-   # http://codereview.chromium.org/42083
-   # To reproduce, run ipc tests
-   # This is the -O0 case
-   # In Purify, they don't even try to free them anymore.
-   # For now, in Valgrind, we'll add suppressions to ignore these leaks.
-   bug_6532
-   Memcheck:Leak
-   fun:_Znw*
-   fun:_Z17NewRunnableMethodIN3IPC12ChannelProxy7ContextEMS2_FvvEEP14CancelableTaskPT_T0_
-}
-{
-   # See http://crbug.com/6532
-   # This is the -O1 case
-   bug_6532b
-   Memcheck:Leak
-   ...
-   fun:_ZN3IPC12ChannelProxy7Context14OnChannelErrorEv
-   fun:_ZN3IPC7Channel11ChannelImpl28OnFileCanReadWithoutBlockingEi
-}
-{
    # webkit leak?  See http://crbug.com/9503
    bug_9503
    Memcheck:Leak
@@ -1870,12 +1839,6 @@
    fun:_ZN27TestURLRequestContextGetter20GetURLRequestContextEv
 }
 {
-   bug_16089 WorkerPool threads can leak by design
-   Memcheck:Leak
-   fun:_Znw*
-   fun:_ZN4base22PosixDynamicThreadPool8PostTask*
-}
-{
    bug_80462_a
    Memcheck:Leak
    fun:malloc
@@ -3799,13 +3762,6 @@
    fun:_ZN3gfx30JPEGCodec_EncodeDecodeRGB_Test8TestBodyEv
 }
 {
-   bug_16089 WorkerPool threads and its tasks can leak by design
-   Memcheck:Leak
-   fun:_Znw*
-   fun:_ZN4base22PosixDynamicThreadPool7AddTaskEPNS_11PendingTaskE
-   fun:_ZN4base22PosixDynamicThreadPool8PostTask*
-}
-{
    bug_139467
    Memcheck:Uninitialized
    fun:_ZNK7WebCore18AccessibilityTable9roleValueEv
@@ -5680,16 +5636,6 @@
    fun:_ZN7content20ChildProcessLauncher25GetChildTerminationStatusEbPi
 }
 {
-   bug_288787
-   Memcheck:Leak
-   fun:_Znw*
-   fun:_ZN10extensions22ManagedValueStoreCache16ExtensionTracker7ObserveEiRKN7content18NotificationSourceERKNS2_19NotificationDetailsE
-   fun:_ZN7content23NotificationServiceImpl6NotifyEiRKNS_18NotificationSourceERKNS_19NotificationDetailsE
-   fun:_ZN16ExtensionService23NotifyExtensionUnloadedEPKN10extensions9ExtensionEN14extension_misc23UnloadedExtensionReasonE
-   fun:_ZN16ExtensionService16DisableExtensionERKSsN10extensions9Extension13DisableReasonE
-   fun:_ZN22theme_service_internal40ThemeServiceTest_DisableUnusedTheme_Test8TestBodyEv
-}
-{
    bug_288804
    Memcheck:Leak
    fun:_Znw*
@@ -6146,7 +6092,7 @@
    fun:_ZN7WebCore10LocalFrame*
    fun:_ZN7WebCore10LocalFrame*
    fun:_ZN7WebCore10LocalFrame6create*
-   fun:_ZN5blink12WebFrameImpl21initializeAsMainFrameEPN7WebCore4PageE
+   fun:_ZN5blink17WebLocalFrameImpl21initializeAsMainFrameEPN7WebCore4PageE
    fun:_ZN5blink11WebViewImpl12setMainFrameEPNS_8WebFrameE
    fun:_ZN7content22BufferedDataSourceTestC2Ev
 }
@@ -6265,3 +6211,155 @@
   ...
   fun:*content*ScreenshotData*EncodeOnWorker*
 }
+{
+  bug_363819
+  Memcheck:Uninitialized
+  fun:strlen
+  fun:*
+  fun:_ZN3net12_GLOBAL__N_114TestHttpClient4ReadEPSs
+  fun:_ZN3net*HttpServerTest*
+}
+{
+  bug_364274
+  Memcheck:Uninitialized
+  fun:_ZN7WebCore21RenderLayerCompositor14updateIfNeededEv
+}
+{
+  bug_364619
+  Memcheck:Leak
+  fun:_Znw*
+  fun:_ZN7content20ChildProcessLauncherC1EPNS_32SandboxedProcessLauncherDelegateEPN4base11CommandLineEiPNS0_6ClientE
+  fun:_ZN7content21RenderProcessHostImpl4InitEv
+  fun:_ZN7content18RenderViewHostImpl16CreateRenderViewERKSbItN4base20string16_char_traitsESaItEEiib
+  fun:_ZN7content15WebContentsImpl32CreateRenderViewForRenderManagerEPNS_14RenderViewHostEiPNS_26CrossProcessFrameConnectorE
+  fun:_ZN7content22RenderFrameHostManager14InitRenderViewEPNS_14RenderViewHostEi
+  fun:_ZN7content22RenderFrameHostManager8NavigateERKNS_19NavigationEntryImplE
+  fun:_ZN7content13NavigatorImpl15NavigateToEntryEPNS_19RenderFrameHostImplERKNS_19NavigationEntryImplENS_20NavigationController10ReloadTypeE
+  fun:_ZN7content13NavigatorImpl22NavigateToPendingEntryEPNS_19RenderFrameHostImplENS_20NavigationController10ReloadTypeE
+  fun:_ZN7content15WebContentsImpl22NavigateToPendingEntryENS_20NavigationController10ReloadTypeE
+  fun:_ZN7content24NavigationControllerImpl22NavigateToPendingEntryENS_20NavigationController10ReloadTypeE
+  fun:_ZN7content24NavigationControllerImpl9LoadEntryEPNS_19NavigationEntryImplE
+  fun:_ZN7content24NavigationControllerImpl17LoadURLWithParamsERKNS_20NavigationController13LoadURLParamsE
+  fun:_ZN7content5Shell15LoadURLForFrameERK4GURLRKSs
+  fun:_ZN7content5Shell7LoadURLERK4GURL
+  fun:_ZN7content20WebKitTestController20PrepareForLayoutTestERK4GURLRKN4base8FilePathEbRKSs
+  fun:_ZN12_GLOBAL__N_110RunOneTestERKSsPbRK10scoped_ptrIN7content17BrowserMainRunnerEN4base14DefaultDeleterIS5_EEE
+  fun:_Z16ShellBrowserMainRKN7content18MainFunctionParamsERK10scoped_ptrINS_17BrowserMainRunnerEN4base14DefaultDeleterIS4_EEE
+  fun:_ZN7content17ShellMainDelegate10RunProcessERKSsRKNS_18MainFunctionParamsE
+  fun:_ZN7content23RunNamedProcessTypeMainERKSsRKNS_18MainFunctionParamsEPNS_19ContentMainDelegateE
+  fun:_ZN7content21ContentMainRunnerImpl3RunEv
+  fun:_ZN7content11ContentMainERKNS_17ContentMainParamsE
+}
+{
+  bug_364619_b
+  Memcheck:Leak
+  fun:_Znw*
+  fun:_ZN7content21RenderProcessHostImpl4InitEv
+  fun:_ZN7content18RenderViewHostImpl16CreateRenderViewERKSbItN4base20string16_char_traitsESaItEEiib
+  fun:_ZN7content15WebContentsImpl32CreateRenderViewForRenderManagerEPNS_14RenderViewHostEiPNS_26CrossProcessFrameConnectorE
+  fun:_ZN7content22RenderFrameHostManager14InitRenderViewEPNS_14RenderViewHostEi
+  fun:_ZN7content22RenderFrameHostManager8NavigateERKNS_19NavigationEntryImplE
+  fun:_ZN7content13NavigatorImpl15NavigateToEntryEPNS_19RenderFrameHostImplERKNS_19NavigationEntryImplENS_20NavigationController10ReloadTypeE
+  fun:_ZN7content13NavigatorImpl22NavigateToPendingEntryEPNS_19RenderFrameHostImplENS_20NavigationController10ReloadTypeE
+  fun:_ZN7content15WebContentsImpl22NavigateToPendingEntryENS_20NavigationController10ReloadTypeE
+  fun:_ZN7content24NavigationControllerImpl22NavigateToPendingEntryENS_20NavigationController10ReloadTypeE
+  fun:_ZN7content24NavigationControllerImpl9LoadEntryEPNS_19NavigationEntryImplE
+  fun:_ZN7content24NavigationControllerImpl17LoadURLWithParamsERKNS_20NavigationController13LoadURLParamsE
+  fun:_ZN7content5Shell15LoadURLForFrameERK4GURLRKSs
+  fun:_ZN7content5Shell7LoadURLERK4GURL
+  fun:_ZN7content20WebKitTestController20PrepareForLayoutTestERK4GURLRKN4base8FilePathEbRKSs
+  fun:_ZN12_GLOBAL__N_110RunOneTestERKSsPbRK10scoped_ptrIN7content17BrowserMainRunnerEN4base14DefaultDeleterIS5_EEE
+  fun:_Z16ShellBrowserMainRKN7content18MainFunctionParamsERK10scoped_ptrINS_17BrowserMainRunnerEN4base14DefaultDeleterIS4_EEE
+  fun:_ZN7content17ShellMainDelegate10RunProcessERKSsRKNS_18MainFunctionParamsE
+  fun:_ZN7content23RunNamedProcessTypeMainERKSsRKNS_18MainFunctionParamsEPNS_19ContentMainDelegateE
+  fun:_ZN7content21ContentMainRunnerImpl3RunEv
+  fun:_ZN7content11ContentMainERKNS_17ContentMainParamsE
+}
+{
+  bug_364619_c
+  Memcheck:Leak
+  fun:_Znw*
+  fun:_ZN7content21RenderProcessHostImpl20CreateMessageFiltersEv
+  fun:_ZN7content21RenderProcessHostImpl4InitEv
+  fun:_ZN7content18RenderViewHostImpl16CreateRenderViewERKSbItN4base20string16_char_traitsESaItEEiib
+  fun:_ZN7content15WebContentsImpl32CreateRenderViewForRenderManagerEPNS_14RenderViewHostEiPNS_26CrossProcessFrameConnectorE
+  fun:_ZN7content22RenderFrameHostManager14InitRenderViewEPNS_14RenderViewHostEi
+  fun:_ZN7content22RenderFrameHostManager8NavigateERKNS_19NavigationEntryImplE
+  fun:_ZN7content13NavigatorImpl15NavigateToEntryEPNS_19RenderFrameHostImplERKNS_19NavigationEntryImplENS_20NavigationController10ReloadTypeE
+  fun:_ZN7content13NavigatorImpl22NavigateToPendingEntryEPNS_19RenderFrameHostImplENS_20NavigationController10ReloadTypeE
+  fun:_ZN7content15WebContentsImpl22NavigateToPendingEntryENS_20NavigationController10ReloadTypeE
+  fun:_ZN7content24NavigationControllerImpl22NavigateToPendingEntryENS_20NavigationController10ReloadTypeE
+  fun:_ZN7content24NavigationControllerImpl9LoadEntryEPNS_19NavigationEntryImplE
+  fun:_ZN7content24NavigationControllerImpl17LoadURLWithParamsERKNS_20NavigationController13LoadURLParamsE
+  fun:_ZN7content5Shell15LoadURLForFrameERK4GURLRKSs
+  fun:_ZN7content5Shell7LoadURLERK4GURL
+  fun:_ZN7content20WebKitTestController20PrepareForLayoutTestERK4GURLRKN4base8FilePathEbRKSs
+  fun:_ZN12_GLOBAL__N_110RunOneTestERKSsPbRK10scoped_ptrIN7content17BrowserMainRunnerEN4base14DefaultDeleterIS5_EEE
+  fun:_Z16ShellBrowserMainRKN7content18MainFunctionParamsERK10scoped_ptrINS_17BrowserMainRunnerEN4base14DefaultDeleterIS4_EEE
+  fun:_ZN7content17ShellMainDelegate10RunProcessERKSsRKNS_18MainFunctionParamsE
+  fun:_ZN7content23RunNamedProcessTypeMainERKSsRKNS_18MainFunctionParamsEPNS_19ContentMainDelegateE
+  fun:_ZN7content21ContentMainRunnerImpl3RunEv
+  fun:_ZN7content11ContentMainERKNS_17ContentMainParamsE
+}
+{
+   bug_364724
+   Memcheck:Param
+   write(buf)
+   obj:/lib/x86_64-linux-gnu/libpthread-2.15.so
+   fun:_ZN3IPC7Channel11ChannelImpl23ProcessOutgoingMessagesEv
+   fun:_ZN3IPC7Channel11ChannelImpl29OnFileCanWriteWithoutBlockingEi
+   fun:_ZN4base19MessagePumpLibevent21FileDescriptorWatcher29OnFileCanWriteWithoutBlockingEiPS0_
+   ...
+   fun:event_process_active
+   fun:event_base_loop
+}
+{
+   bug_364821
+   Memcheck:Leak
+   fun:malloc
+   fun:_ZN3WTF10fastMallocEm
+   fun:_ZN3WTF10RefCountedIN7WebCore14NewScriptStateEEnwEm
+   fun:_ZN7WebCore14NewScriptState6createEN2v86HandleINS1_7ContextEEEN3WTF10PassRefPtrINS_15DOMWrapperWorldEEE
+   fun:_ZN7WebCore22WorkerScriptController25initializeContextIfNeededEv
+   fun:_ZN7WebCore22WorkerScriptController8evaluateERKN3WTF6StringES4_RKNS1_12TextPositionEPNS_31WorkerGlobalScopeExecutionStateE
+   fun:_ZN7WebCore22WorkerScriptController8evaluateERKNS_16ScriptSourceCodeEPN3WTF6RefPtrINS_10ErrorEventEEE
+   fun:_ZN7WebCore12WorkerThread12workerThreadEv
+   fun:_ZN7WebCore12WorkerThread17workerThreadStartEPv
+   fun:_ZN3WTFL16threadEntryPointEPv
+   fun:_ZN3WTFL19wtfThreadEntryPointEPv
+}
+{
+   bug_365258
+   Memcheck:Leak
+   fun:malloc
+   fun:_ZN3WTF10fastMallocEm
+   fun:_ZN7WebCore8ResourcenwEm
+   fun:_ZN7WebCoreL14createResourceENS_8Resource4TypeERKNS_15ResourceRequestERKN3WTF6StringE
+   fun:_ZN7WebCore15ResourceFetcher18revalidateResourceERKNS_12FetchRequestEPNS_8ResourceE
+   fun:_ZN7WebCore15ResourceFetcher15requestResourceENS_8Resource4TypeERNS_12FetchRequestE
+   fun:_ZN7WebCore15ResourceFetcher11fetchScriptERNS_12FetchRequestE
+   fun:_ZN7WebCore12ScriptLoader11fetchScriptERKN3WTF6StringE
+   fun:_ZN7WebCore12ScriptLoader13prepareScriptERKN3WTF12TextPositionENS0_17LegacyTypeSupportE
+   fun:_ZN7WebCore16HTMLScriptRunner9runScriptEPNS_7ElementERKN3WTF12TextPositionE
+   fun:_ZN7WebCore16HTMLScriptRunner7executeEN3WTF10PassRefPtrINS_7ElementEEERKNS1_12TextPositionE
+   fun:_ZN7WebCore18HTMLDocumentParser30runScriptsForPausedTreeBuilderEv
+   fun:_ZN7WebCore18HTMLDocumentParser38processParsedChunkFromBackgroundParserEN3WTF10PassOwnPtrINS0_11ParsedChunkEEE
+   fun:_ZN7WebCore18HTMLDocumentParser23pumpPendingSpeculationsEv
+   fun:_ZN7WebCore18HTMLDocumentParser41didReceiveParsedChunkFromBackgroundParserEN3WTF10PassOwnPtrINS0_11ParsedChunkEEE
+   fun:_ZN3WTF15FunctionWrapperIMN7WebCore18HTMLDocumentParserEFvNS_10PassOwnPtrINS2_11ParsedChunkEEEEEclERKNS_7WeakPtrIS2_EES5_
+   fun:_ZN3WTF17BoundFunctionImplINS_15FunctionWrapperIMN7WebCore18HTMLDocumentParserEFvNS_10PassOwnPtrINS3_11ParsedChunkEEEEEEFvNS_7WeakPtrIS3_EES6_EEclEv
+   fun:_ZNK3WTF8FunctionIFvvEEclEv
+   fun:_ZN3WTFL18callFunctionObjectEPv
+}
+{
+   bug_365259
+   Memcheck:Leak
+   fun:malloc
+   fun:_ZN3WTF10fastMallocEm
+   fun:_ZN3WTF10RefCountedIN7WebCore20IDBDatabaseCallbacksEEnwEm
+   fun:_ZN7WebCore20IDBDatabaseCallbacks6createEv
+   fun:_ZN7WebCore10IDBFactory12openInternalEPNS_16ExecutionContextERKN3WTF6StringElRNS_14ExceptionStateE
+   fun:_ZN7WebCore10IDBFactory4openEPNS_16ExecutionContextERKN3WTF6StringERNS_14ExceptionStateE
+   fun:_ZN7WebCore20IDBFactoryV8InternalL10openMethodERKN2v820FunctionCallbackInfoINS1_5ValueEEE
+   fun:_ZN7WebCore20IDBFactoryV8InternalL18openMethodCallbackERKN2v820FunctionCallbackInfoINS1_5ValueEEE
+}
diff --git a/tools/valgrind/memcheck/suppressions_mac.txt b/tools/valgrind/memcheck/suppressions_mac.txt
index 4b8fc48..098c7b9 100644
--- a/tools/valgrind/memcheck/suppressions_mac.txt
+++ b/tools/valgrind/memcheck/suppressions_mac.txt
@@ -152,6 +152,7 @@
    bug_264886
    Memcheck:Leak
    fun:_Znw*
+   ...
    fun:_ZN4base26MessagePumpInstrumentation6CreateERKNS_9TimeDeltaES3_
    fun:_ZN4base24MessagePumpCFRunLoopBase21EnableInstrumentationEv
    fun:_ZN4base24MessagePumpNSApplicationC2Ev
diff --git a/tools/valgrind/test_suppressions.py b/tools/valgrind/test_suppressions.py
index d5ecba8..285ad21 100755
--- a/tools/valgrind/test_suppressions.py
+++ b/tools/valgrind/test_suppressions.py
@@ -5,6 +5,7 @@
 
 import argparse
 from collections import defaultdict
+import json
 import os
 import re
 import subprocess
@@ -87,6 +88,12 @@
   for (symbol, suppressions) in sorted_reports[:top_count]:
     print "%4d occurrences : %s" % (len(suppressions), symboltable[symbol])
 
+def ReadHashExclusions(exclusions):
+  input_file = file(exclusions, 'r')
+  contents = json.load(input_file)
+  return contents['hashes']
+
+
 def main(argv):
   supp = suppressions.GetSuppressions()
 
@@ -105,14 +112,27 @@
   parser.add_argument('--exclude-symbol', action='append',
     help='Filter out all suppressions containing the specified symbol(s). '
          'Matches against the mangled names.')
+  parser.add_argument('--exclude-hashes', action='append',
+    help='Specify a .json file with a list of hashes to exclude.')
 
   parser.add_argument('reports', metavar='report file', nargs='+',
     help='List of report files')
   args = parser.parse_args(argv)
 
+  # exclude_hashes is a list of strings, each string an error hash.
+  exclude_hashes = []
+
+  exclude_hashes = []
+  if args.exclude_hashes:
+    for excl in args.exclude_hashes:
+      print "reading exclusion", excl
+      exclude_hashes += ReadHashExclusions(excl)
+
   for f in args.reports:
     f_reports, url = ReadReportsFromFile(f)
     for (hash, report) in f_reports:
+      if hash in exclude_hashes:
+        continue
       all_reports[report] += [url]
       report_hashes[report] = hash
 
diff --git a/tools/valgrind/tsan/suppressions.txt b/tools/valgrind/tsan/suppressions.txt
index 9d8cd5d..1db560d 100644
--- a/tools/valgrind/tsan/suppressions.txt
+++ b/tools/valgrind/tsan/suppressions.txt
@@ -1044,13 +1044,6 @@
   fun:base::internal::RunnableAdapter::Run
 }
 {
-  bug_330903
-  ThreadSanitizer:Race
-  fun:gcm::GCMClientMock::SetIsLoading
-  fun:gcm::GCMProfileServiceRegisterTest_GCMClientLoadingCompletedAfterReadingRegistration_Test::TestBody
-  fun:testing::internal::HandleSehExceptionsInMethodIfSupported
-}
-{
   bug_344704
   ThreadSanitizer:Race
   fun:base::Thread::message_loop
@@ -1068,3 +1061,9 @@
   fun:decode_tiles
   fun:vp9_decode_frame
 }
+{
+  bug_343802
+  ThreadSanitizer:Race
+  ...
+  fun:base::debug::TraceLog::GetCategoryGroupEnabledInternal
+}
diff --git a/tools/valgrind/tsan_v2/suppressions.txt b/tools/valgrind/tsan_v2/suppressions.txt
index f6815c0..03ae3a7 100644
--- a/tools/valgrind/tsan_v2/suppressions.txt
+++ b/tools/valgrind/tsan_v2/suppressions.txt
@@ -245,3 +245,15 @@
 
 # http://crbug.com/350982
 race:libvpx/vp9/decoder/vp9_thread.c
+
+# http://crbug.com/361790
+race:workerGlobalScopeDestroyed
+
+# http://crbug.com/363999
+race:v8::internal::EnterDebugger::*EnterDebugger
+
+# http://crbug.com/364006
+race:gfx::ImageFamily::~ImageFamily
+
+# http://crbug.com/364014
+race:WTF::Latin1Encoding()::globalLatin1Encoding
diff --git a/tools/vim/chromium.ycm_extra_conf.py b/tools/vim/chromium.ycm_extra_conf.py
index 6329b39..0f3daf1 100644
--- a/tools/vim/chromium.ycm_extra_conf.py
+++ b/tools/vim/chromium.ycm_extra_conf.py
@@ -78,10 +78,19 @@
 
 # Largely copied from ninja-build.vim (guess_configuration)
 def GetNinjaOutputDirectory(chrome_root):
-  """Returns either <chrome_root>/out/Release or <chrome_root>/out/Debug.
+  """Returns <chrome_root>/<output_dir>/(Release|Debug).
 
-  The configuration chosen is the one most recently generated/built."""
-  root = os.path.join(chrome_root, 'out')
+  The configuration chosen is the one most recently generated/built. Detects
+  a custom output_dir specified by GYP_GENERATOR_FLAGS."""
+
+  output_dir = 'out'
+  generator_flags = os.getenv('GYP_GENERATOR_FLAGS', '').split(' ')
+  for flag in generator_flags:
+    name_value = flag.split('=', 1)
+    if len(name_value) == 2 and name_value[0] == 'output_dir':
+      output_dir = name_value[1]
+
+  root = os.path.join(chrome_root, output_dir)
   debug_path = os.path.join(root, 'Debug')
   release_path = os.path.join(root, 'Release')
 
diff --git a/tools/win/static_initializers/static_initializers.gyp b/tools/win/static_initializers/static_initializers.gyp
index ebf4e83..724091f 100644
--- a/tools/win/static_initializers/static_initializers.gyp
+++ b/tools/win/static_initializers/static_initializers.gyp
@@ -6,17 +6,23 @@
   'variables': {
     'chromium_code': 1,
   },
-  'targets': [
-    {
-      'target_name': 'static_initializers',
-      'type': 'executable',
-      'sources': [
-        'static_initializers.cc',
+  'conditions': [
+    ['not msvs_express', {
+      'targets': [
+        {
+          'target_name': 'static_initializers',
+          'type': 'executable',
+          'sources': [
+            'static_initializers.cc',
+          ],
+          'include_dirs': [
+            '$(VSInstallDir)/DIA SDK/include',
+          ],
+        },
       ],
-      'include_dirs': [
-        '$(VSInstallDir)/DIA SDK/include',
-      ],
-    },
-  ],
+    }, {
+      'targets': [],
+    }],
+  ]
 }
 
diff --git a/ui/accessibility/accessibility.target.darwin-arm.mk b/ui/accessibility/accessibility.target.darwin-arm.mk
index 1c1e01f..f9a1b0c 100644
--- a/ui/accessibility/accessibility.target.darwin-arm.mk
+++ b/ui/accessibility/accessibility.target.darwin-arm.mk
@@ -99,12 +99,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -220,12 +223,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -298,7 +304,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/accessibility/accessibility.target.darwin-mips.mk b/ui/accessibility/accessibility.target.darwin-mips.mk
index 9e8d30c..f791285 100644
--- a/ui/accessibility/accessibility.target.darwin-mips.mk
+++ b/ui/accessibility/accessibility.target.darwin-mips.mk
@@ -98,12 +98,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -218,12 +221,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -294,7 +300,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/accessibility/accessibility.target.darwin-x86.mk b/ui/accessibility/accessibility.target.darwin-x86.mk
index fc3ac1b..a39a23a 100644
--- a/ui/accessibility/accessibility.target.darwin-x86.mk
+++ b/ui/accessibility/accessibility.target.darwin-x86.mk
@@ -100,12 +100,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -221,12 +224,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -296,7 +302,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/accessibility/accessibility.target.darwin-x86_64.mk b/ui/accessibility/accessibility.target.darwin-x86_64.mk
index 43ddd79..4644939 100644
--- a/ui/accessibility/accessibility.target.darwin-x86_64.mk
+++ b/ui/accessibility/accessibility.target.darwin-x86_64.mk
@@ -100,12 +100,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -221,12 +224,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -296,7 +302,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/accessibility/accessibility.target.linux-arm.mk b/ui/accessibility/accessibility.target.linux-arm.mk
index 1c1e01f..f9a1b0c 100644
--- a/ui/accessibility/accessibility.target.linux-arm.mk
+++ b/ui/accessibility/accessibility.target.linux-arm.mk
@@ -99,12 +99,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -220,12 +223,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -298,7 +304,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/accessibility/accessibility.target.linux-mips.mk b/ui/accessibility/accessibility.target.linux-mips.mk
index 9e8d30c..f791285 100644
--- a/ui/accessibility/accessibility.target.linux-mips.mk
+++ b/ui/accessibility/accessibility.target.linux-mips.mk
@@ -98,12 +98,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -218,12 +221,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -294,7 +300,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/accessibility/accessibility.target.linux-x86.mk b/ui/accessibility/accessibility.target.linux-x86.mk
index fc3ac1b..a39a23a 100644
--- a/ui/accessibility/accessibility.target.linux-x86.mk
+++ b/ui/accessibility/accessibility.target.linux-x86.mk
@@ -100,12 +100,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -221,12 +224,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -296,7 +302,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/accessibility/accessibility.target.linux-x86_64.mk b/ui/accessibility/accessibility.target.linux-x86_64.mk
index 43ddd79..4644939 100644
--- a/ui/accessibility/accessibility.target.linux-x86_64.mk
+++ b/ui/accessibility/accessibility.target.linux-x86_64.mk
@@ -100,12 +100,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -221,12 +224,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -296,7 +302,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/accessibility/ax_gen.target.darwin-arm.mk b/ui/accessibility/ax_gen.target.darwin-arm.mk
index 427222e..96328b1 100644
--- a/ui/accessibility/ax_gen.target.darwin-arm.mk
+++ b/ui/accessibility/ax_gen.target.darwin-arm.mk
@@ -266,7 +266,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/accessibility/ax_gen.target.darwin-mips.mk b/ui/accessibility/ax_gen.target.darwin-mips.mk
index 77c4db8..82a261f 100644
--- a/ui/accessibility/ax_gen.target.darwin-mips.mk
+++ b/ui/accessibility/ax_gen.target.darwin-mips.mk
@@ -262,7 +262,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/accessibility/ax_gen.target.darwin-x86.mk b/ui/accessibility/ax_gen.target.darwin-x86.mk
index 549c639..083a186 100644
--- a/ui/accessibility/ax_gen.target.darwin-x86.mk
+++ b/ui/accessibility/ax_gen.target.darwin-x86.mk
@@ -264,7 +264,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/accessibility/ax_gen.target.darwin-x86_64.mk b/ui/accessibility/ax_gen.target.darwin-x86_64.mk
index 6b6f0c5..4870072 100644
--- a/ui/accessibility/ax_gen.target.darwin-x86_64.mk
+++ b/ui/accessibility/ax_gen.target.darwin-x86_64.mk
@@ -264,7 +264,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/accessibility/ax_gen.target.linux-arm.mk b/ui/accessibility/ax_gen.target.linux-arm.mk
index 427222e..96328b1 100644
--- a/ui/accessibility/ax_gen.target.linux-arm.mk
+++ b/ui/accessibility/ax_gen.target.linux-arm.mk
@@ -266,7 +266,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/accessibility/ax_gen.target.linux-mips.mk b/ui/accessibility/ax_gen.target.linux-mips.mk
index 77c4db8..82a261f 100644
--- a/ui/accessibility/ax_gen.target.linux-mips.mk
+++ b/ui/accessibility/ax_gen.target.linux-mips.mk
@@ -262,7 +262,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/accessibility/ax_gen.target.linux-x86.mk b/ui/accessibility/ax_gen.target.linux-x86.mk
index 549c639..083a186 100644
--- a/ui/accessibility/ax_gen.target.linux-x86.mk
+++ b/ui/accessibility/ax_gen.target.linux-x86.mk
@@ -264,7 +264,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/accessibility/ax_gen.target.linux-x86_64.mk b/ui/accessibility/ax_gen.target.linux-x86_64.mk
index 6b6f0c5..4870072 100644
--- a/ui/accessibility/ax_gen.target.linux-x86_64.mk
+++ b/ui/accessibility/ax_gen.target.linux-x86_64.mk
@@ -264,7 +264,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/accessibility/ax_node.cc b/ui/accessibility/ax_node.cc
index 8adb940..587f737 100644
--- a/ui/accessibility/ax_node.cc
+++ b/ui/accessibility/ax_node.cc
@@ -19,6 +19,10 @@
   data_ = src;
 }
 
+void AXNode::SetLocation(const gfx::Rect& new_location) {
+  data_.location = new_location;
+}
+
 void AXNode::SetIndexInParent(int index_in_parent) {
   index_in_parent_ = index_in_parent;
 }
@@ -31,4 +35,13 @@
   delete this;
 }
 
+bool AXNode::IsDescendantOf(AXNode* ancestor) {
+  if (this == ancestor)
+    return true;
+  else if (parent())
+    return parent()->IsDescendantOf(ancestor);
+
+  return false;
+}
+
 }  // namespace ui
diff --git a/ui/accessibility/ax_node.h b/ui/accessibility/ax_node.h
index b7e3125..5da7340 100644
--- a/ui/accessibility/ax_node.h
+++ b/ui/accessibility/ax_node.h
@@ -24,27 +24,36 @@
   int child_count() const { return static_cast<int>(children_.size()); }
   const AXNodeData& data() const { return data_; }
   const std::vector<AXNode*>& children() const { return children_; }
+  int index_in_parent() const { return index_in_parent_; }
 
   // Get the child at the given index.
   AXNode* ChildAtIndex(int index) const { return children_[index]; }
 
   // Set the node's accessibility data. This may be done during initial
   // initialization or later when the node data changes.
-  virtual void SetData(const AXNodeData& src);
+  void SetData(const AXNodeData& src);
+
+  // Update this node's location. This is separate from SetData just because
+  // changing only the location is common and should be more efficient than
+  // re-copying all of the data.
+  void SetLocation(const gfx::Rect& new_location);
 
   // Set the index in parent, for example if siblings were inserted or deleted.
   void SetIndexInParent(int index_in_parent);
 
   // Swap the internal children vector with |children|. This instance
   // now owns all of the passed children.
-  virtual void SwapChildren(std::vector<AXNode*>& children);
+  void SwapChildren(std::vector<AXNode*>& children);
 
   // This is called when the AXTree no longer includes this node in the
   // tree. Reference counting is used on some platforms because the
   // operating system may hold onto a reference to an AXNode
   // object even after we're through with it, so this may decrement the
   // reference count and clear out the object's data.
-  virtual void Destroy();
+  void Destroy();
+
+  // Return true if this object is equal to or a descendant of |ancestor|.
+  bool IsDescendantOf(AXNode* ancestor);
 
  private:
   int index_in_parent_;
diff --git a/ui/accessibility/ax_node_data.cc b/ui/accessibility/ax_node_data.cc
index d287ac9..78987ef 100644
--- a/ui/accessibility/ax_node_data.cc
+++ b/ui/accessibility/ax_node_data.cc
@@ -6,7 +6,6 @@
 
 #include <set>
 
-#include "base/containers/hash_tables.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
diff --git a/ui/accessibility/ax_tree.cc b/ui/accessibility/ax_tree.cc
index 1711274..c0ec9ac 100644
--- a/ui/accessibility/ax_tree.cc
+++ b/ui/accessibility/ax_tree.cc
@@ -15,9 +15,7 @@
 namespace {
 
 std::string TreeToStringHelper(AXNode* node, int indent) {
-  std::string result;
-  for (int i = 0; i < indent; i++)
-    result += "  ";
+  std::string result = std::string(2 * indent, ' ');
   result += node->data().ToString() + "\n";
   for (int i = 0; i < node->child_count(); ++i)
     result += TreeToStringHelper(node->ChildAtIndex(i), indent + 1);
@@ -47,7 +45,7 @@
 AXTree::AXTree()
     : delegate_(NULL), root_(NULL) {
   AXNodeData root;
-  root.id = 0;
+  root.id = -1;
   root.role = AX_ROLE_ROOT_WEB_AREA;
 
   AXTreeUpdate initial_state;
@@ -119,10 +117,10 @@
     for (size_t i = 0; i < update.nodes.size(); ++i) {
       AXNode* node = GetFromId(update.nodes[i].id);
       if (update_state.new_nodes.find(node) != update_state.new_nodes.end()) {
-        delegate_->OnNodeCreated(node);
+        delegate_->OnNodeCreationFinished(node);
         update_state.new_nodes.erase(node);
       } else {
-        delegate_->OnNodeChanged(node);
+        delegate_->OnNodeChangeFinished(node);
       }
     }
     if (root_->id() != old_root_id)
@@ -136,8 +134,13 @@
   return TreeToStringHelper(root_, 0);
 }
 
-AXNode* AXTree::CreateNode(AXNode* parent, int32 id, int32 index_in_parent) {
-  return new AXNode(parent, id, index_in_parent);
+AXNode* AXTree::CreateNode(
+    AXNode* parent, int32 id, int32 index_in_parent) {
+  AXNode* new_node = new AXNode(parent, id, index_in_parent);
+  id_map_[new_node->id()] = new_node;
+  if (delegate_)
+    delegate_->OnNodeCreated(new_node);
+  return new_node;
 }
 
 bool AXTree::UpdateNode(
@@ -150,25 +153,31 @@
   // of the tree is being swapped, or we're out of sync with the source
   // and this is a serious error.
   AXNode* node = GetFromId(src.id);
+  AXNode* new_node = NULL;
   if (node) {
     update_state->pending_nodes.erase(node);
+    node->SetData(src);
+    if (delegate_)
+      delegate_->OnNodeChanged(node);
   } else {
     if (src.role != AX_ROLE_ROOT_WEB_AREA) {
       error_ = base::StringPrintf(
           "%d is not in the tree and not the new root", src.id);
       return false;
     }
-    node = CreateAndInitializeNode(NULL, src.id, 0);
+    new_node = CreateNode(NULL, src.id, 0);
+    node = new_node;
     update_state->new_nodes.insert(node);
+    node->SetData(src);
   }
 
-  // Set the node's data.
-  node->SetData(src);
-
   // First, delete nodes that used to be children of this node but aren't
   // anymore.
-  if (!DeleteOldChildren(node, src.child_ids))
+  if (!DeleteOldChildren(node, src.child_ids)) {
+    if (new_node)
+      DestroyNodeAndSubtree(new_node);
     return false;
+  }
 
   // Now build a new children vector, reusing nodes when possible,
   // and swap it in.
@@ -188,13 +197,6 @@
   return success;
 }
 
-AXNode* AXTree::CreateAndInitializeNode(
-    AXNode* parent, int32 id, int32 index_in_parent) {
-  AXNode* node = CreateNode(parent, id, index_in_parent);
-  id_map_[node->id()] = node;
-  return node;
-}
-
 void AXTree::DestroyNodeAndSubtree(AXNode* node) {
   id_map_.erase(node->id());
   for (int i = 0; i < node->child_count(); ++i)
@@ -253,7 +255,7 @@
       }
       child->SetIndexInParent(index_in_parent);
     } else {
-      child = CreateAndInitializeNode(node, child_id, index_in_parent);
+      child = CreateNode(node, child_id, index_in_parent);
       update_state->pending_nodes.insert(child);
       update_state->new_nodes.insert(child);
     }
diff --git a/ui/accessibility/ax_tree.h b/ui/accessibility/ax_tree.h
index 6a4134c..b4baac4 100644
--- a/ui/accessibility/ax_tree.h
+++ b/ui/accessibility/ax_tree.h
@@ -17,6 +17,20 @@
 struct AXTreeUpdateState;
 
 // Used when you want to be notified when changes happen to the tree.
+//
+// Some of the notifications are called in the middle of an update operation.
+// Be careful, as the tree may be in an inconsistent state at this time;
+// don't walk the parents and children at this time:
+//   OnNodeWillBeDeleted
+//   OnNodeCreated
+//   OnNodeChanged
+//
+// Other notifications are called at the end of an atomic update operation.
+// From these, it's safe to walk the tree and do any initialization that
+// assumes the tree is in a consistent state.
+//   OnNodeCreationFinished
+//   OnNodeChangeFinished
+//   OnRootChanged
 class AX_EXPORT AXTreeDelegate {
  public:
   AXTreeDelegate();
@@ -27,16 +41,23 @@
   // in the middle of an update, the tree may be in an invalid state!
   virtual void OnNodeWillBeDeleted(AXNode* node) = 0;
 
-  // Called after a new node is created. It's guaranteed to be called
-  // after it's been fully initialized, so you can rely on its data and
-  // links to parents and children being valid. This will be called on
-  // parents before it's called on their children.
+  // Called immediately after a new node is created. The tree may be in
+  // the middle of an update, don't walk the parents and children now.
   virtual void OnNodeCreated(AXNode* node) = 0;
 
-  // Called when a node changes its data or children.
+  // Called when a node changes its data or children. The tree may be in
+  // the middle of an update, don't walk the parents and children now.
   virtual void OnNodeChanged(AXNode* node) = 0;
 
-  // Called when the root node changes.
+  // Called for each new node at the end of an update operation,
+  // when the tree is in a consistent state.
+  virtual void OnNodeCreationFinished(AXNode* node) = 0;
+
+  // Called for each existing node that changed at the end of an update
+  // operation, when the tree is in a consistent state.
+  virtual void OnNodeChangeFinished(AXNode* node) = 0;
+
+  // Called at the end of an update operation when the root node changes.
   virtual void OnRootChanged(AXNode* new_root) = 0;
 };
 
@@ -76,10 +97,6 @@
 
   void OnRootChanged();
 
-  // Convenience function to create a node and call Initialize on it.
-  AXNode* CreateAndInitializeNode(
-      AXNode* parent, int32 id, int32 index_in_parent);
-
   // Call Destroy() on |node|, and delete it from the id map, and then
   // call recursively on all nodes in its subtree.
   void DestroyNodeAndSubtree(AXNode* node);
diff --git a/ui/accessibility/ax_tree_unittest.cc b/ui/accessibility/ax_tree_unittest.cc
index f4c609e..9d734f8 100644
--- a/ui/accessibility/ax_tree_unittest.cc
+++ b/ui/accessibility/ax_tree_unittest.cc
@@ -28,18 +28,31 @@
     changed_ids_.push_back(node->id());
   }
 
+  virtual void OnNodeCreationFinished(AXNode* node) OVERRIDE {
+    creation_finished_ids_.push_back(node->id());
+  }
+
+  virtual void OnNodeChangeFinished(AXNode* node) OVERRIDE {
+    change_finished_ids_.push_back(node->id());
+  }
+
   virtual void OnRootChanged(AXNode* new_root) OVERRIDE {
     new_root_ids_.push_back(new_root->id());
   }
 
   const std::vector<int32>& deleted_ids() { return deleted_ids_; }
   const std::vector<int32>& created_ids() { return created_ids_; }
+  const std::vector<int32>& creation_finished_ids() {
+    return creation_finished_ids_;
+  }
   const std::vector<int32>& new_root_ids() { return new_root_ids_; }
 
  private:
   std::vector<int32> deleted_ids_;
   std::vector<int32> created_ids_;
+  std::vector<int32> creation_finished_ids_;
   std::vector<int32> changed_ids_;
+  std::vector<int32> change_finished_ids_;
   std::vector<int32> new_root_ids_;
 };
 
@@ -103,6 +116,44 @@
       dst_tree.ToString());
 }
 
+TEST(AXTreeTest, SerializeAXTreeUpdate) {
+  AXNodeData list;
+  list.id = 3;
+  list.role = AX_ROLE_LIST;
+  list.state = 0;
+  list.child_ids.push_back(4);
+  list.child_ids.push_back(5);
+  list.child_ids.push_back(6);
+
+  AXNodeData list_item_2;
+  list_item_2.id = 5;
+  list_item_2.role = AX_ROLE_LIST_ITEM;
+  list_item_2.state = 0;
+
+  AXNodeData list_item_3;
+  list_item_3.id = 6;
+  list_item_3.role = AX_ROLE_LIST_ITEM;
+  list_item_3.state = 0;
+
+  AXNodeData button;
+  button.id = 7;
+  button.role = AX_ROLE_BUTTON;
+  button.state = 0;
+
+  AXTreeUpdate update;
+  update.nodes.push_back(list);
+  update.nodes.push_back(list_item_2);
+  update.nodes.push_back(list_item_3);
+  update.nodes.push_back(button);
+
+  EXPECT_EQ(
+      "id=3 list (0, 0)-(0, 0) child_ids=4,5,6\n"
+      "  id=5 list_item (0, 0)-(0, 0)\n"
+      "  id=6 list_item (0, 0)-(0, 0)\n"
+      "id=7 button (0, 0)-(0, 0)\n",
+      update.ToString());
+}
+
 TEST(AXTreeTest, DeleteUnknownSubtreeFails) {
   AXNodeData root;
   root.id = 1;
@@ -234,6 +285,10 @@
   EXPECT_EQ(2, fake_delegate.created_ids()[0]);
   EXPECT_EQ(3, fake_delegate.created_ids()[1]);
 
+  ASSERT_EQ(2U, fake_delegate.creation_finished_ids().size());
+  EXPECT_EQ(2, fake_delegate.creation_finished_ids()[0]);
+  EXPECT_EQ(3, fake_delegate.creation_finished_ids()[1]);
+
   ASSERT_EQ(1U, fake_delegate.new_root_ids().size());
   EXPECT_EQ(2, fake_delegate.new_root_ids()[0]);
 
diff --git a/ui/accessibility/ax_tree_update.cc b/ui/accessibility/ax_tree_update.cc
index dc785d9..8e9d019 100644
--- a/ui/accessibility/ax_tree_update.cc
+++ b/ui/accessibility/ax_tree_update.cc
@@ -4,6 +4,9 @@
 
 #include "ui/accessibility/ax_tree_update.h"
 
+#include "base/containers/hash_tables.h"
+#include "base/strings/string_number_conversions.h"
+
 namespace ui {
 
 AXTreeUpdate::AXTreeUpdate() : node_id_to_clear(0) {
@@ -12,4 +15,28 @@
 AXTreeUpdate::~AXTreeUpdate() {
 }
 
+std::string AXTreeUpdate::ToString() const {
+  std::string result;
+  if (node_id_to_clear != 0) {
+    result += "AXTreeUpdate: clear node " +
+        base::IntToString(node_id_to_clear) + "\n";
+  }
+
+  // The challenge here is that we want to indent the nodes being updated
+  // so that parent/child relationships are clear, but we don't have access
+  // to the rest of the tree for context, so we have to try to show the
+  // relative indentation of child nodes in this update relative to their
+  // parents.
+  base::hash_map<int32, int> id_to_indentation;
+  for (size_t i = 0; i < nodes.size(); ++i) {
+    int indent = id_to_indentation[nodes[i].id];
+    result += std::string(2 * indent, ' ');
+    result += nodes[i].ToString() + "\n";
+    for (size_t j = 0; j < nodes[i].child_ids.size(); ++j)
+      id_to_indentation[nodes[i].child_ids[j]] = indent + 1;
+  }
+
+  return result;
+}
+
 }  // namespace ui
diff --git a/ui/accessibility/ax_tree_update.h b/ui/accessibility/ax_tree_update.h
index 0280efe..314a78f 100644
--- a/ui/accessibility/ax_tree_update.h
+++ b/ui/accessibility/ax_tree_update.h
@@ -50,6 +50,9 @@
   // A vector of nodes to update, according to the rules above.
   std::vector<AXNodeData> nodes;
 
+  // Return a multi-line indented string representation, for logging.
+  std::string ToString() const;
+
   // TODO(dmazzoni): location changes
 };
 
diff --git a/ui/android/java/res/drawable-hdpi/dropdown_popup_background_down.9.png b/ui/android/java/res/drawable-hdpi/dropdown_popup_background_down.9.png
new file mode 100644
index 0000000..62478fc
--- /dev/null
+++ b/ui/android/java/res/drawable-hdpi/dropdown_popup_background_down.9.png
Binary files differ
diff --git a/ui/android/java/res/drawable-hdpi/dropdown_popup_background_up.9.png b/ui/android/java/res/drawable-hdpi/dropdown_popup_background_up.9.png
new file mode 100644
index 0000000..290f526
--- /dev/null
+++ b/ui/android/java/res/drawable-hdpi/dropdown_popup_background_up.9.png
Binary files differ
diff --git a/ui/android/java/res/drawable-xhdpi/dropdown_popup_background_down.9.png b/ui/android/java/res/drawable-xhdpi/dropdown_popup_background_down.9.png
new file mode 100644
index 0000000..ab4d02c
--- /dev/null
+++ b/ui/android/java/res/drawable-xhdpi/dropdown_popup_background_down.9.png
Binary files differ
diff --git a/ui/android/java/res/drawable-xhdpi/dropdown_popup_background_up.9.png b/ui/android/java/res/drawable-xhdpi/dropdown_popup_background_up.9.png
new file mode 100644
index 0000000..cf3f9e6
--- /dev/null
+++ b/ui/android/java/res/drawable-xhdpi/dropdown_popup_background_up.9.png
Binary files differ
diff --git a/ui/android/java/res/drawable/dropdown_popup_background_down.9.png b/ui/android/java/res/drawable/dropdown_popup_background_down.9.png
new file mode 100644
index 0000000..0fb3b87
--- /dev/null
+++ b/ui/android/java/res/drawable/dropdown_popup_background_down.9.png
Binary files differ
diff --git a/ui/android/java/res/drawable/dropdown_popup_background_up.9.png b/ui/android/java/res/drawable/dropdown_popup_background_up.9.png
new file mode 100644
index 0000000..4ab1786
--- /dev/null
+++ b/ui/android/java/res/drawable/dropdown_popup_background_up.9.png
Binary files differ
diff --git a/ui/android/java/src/org/chromium/ui/UiUtils.java b/ui/android/java/src/org/chromium/ui/UiUtils.java
index 6e6bf54..e46e6fe 100644
--- a/ui/android/java/src/org/chromium/ui/UiUtils.java
+++ b/ui/android/java/src/org/chromium/ui/UiUtils.java
@@ -30,6 +30,31 @@
     /** The minimum size of the bottom margin below the app to detect a keyboard. */
     private static final float KEYBOARD_DETECT_BOTTOM_THRESHOLD_DP = 100;
 
+    /** A delegate that allows disabling keyboard visibility detection. */
+    private static KeyboardShowingDelegate sKeyboardShowingDelegate;
+
+    /**
+     * A delegate that can be implemented to override whether or not keyboard detection will be
+     * used.
+     */
+    public interface KeyboardShowingDelegate {
+        /**
+         * Will be called to determine whether or not to detect if the keyboard is visible.
+         * @param context A {@link Context} instance.
+         * @param view    A {@link View}.
+         * @return        Whether or not the keyboard check should be disabled.
+         */
+        boolean disableKeyboardCheck(Context context, View view);
+    }
+
+    /**
+     * Allows setting a delegate to override the default software keyboard visibility detection.
+     * @param delegate A {@link KeyboardShowingDelegate} instance.
+     */
+    public static void setKeyboardShowingDelegate(KeyboardShowingDelegate delegate) {
+        sKeyboardShowingDelegate = delegate;
+    }
+
     /**
      * Shows the software keyboard if necessary.
      * @param view The currently focused {@link View}, which would receive soft keyboard input.
@@ -54,7 +79,19 @@
         return imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
     }
 
+    /**
+     * Detects whether or not the keyboard is showing.  This is a best guess as there is no
+     * standardized/foolproof way to do this.
+     * @param context A {@link Context} instance.
+     * @param view    A {@link View}.
+     * @return        Whether or not the software keyboard is visible and taking up screen space.
+     */
     public static boolean isKeyboardShowing(Context context, View view) {
+        if (sKeyboardShowingDelegate != null
+                && sKeyboardShowingDelegate.disableKeyboardCheck(context, view)) {
+            return false;
+        }
+
         View rootView = view.getRootView();
         if (rootView == null) return false;
         Rect appRect = new Rect();
diff --git a/ui/android/java/src/org/chromium/ui/autofill/OWNERS b/ui/android/java/src/org/chromium/ui/autofill/OWNERS
new file mode 100644
index 0000000..812e8d9
--- /dev/null
+++ b/ui/android/java/src/org/chromium/ui/autofill/OWNERS
@@ -0,0 +1 @@
+aurimas@chromium.org
diff --git a/ui/android/java/src/org/chromium/ui/gfx/DeviceDisplayInfo.java b/ui/android/java/src/org/chromium/ui/gfx/DeviceDisplayInfo.java
index 5f7e1c5..81c4993 100644
--- a/ui/android/java/src/org/chromium/ui/gfx/DeviceDisplayInfo.java
+++ b/ui/android/java/src/org/chromium/ui/gfx/DeviceDisplayInfo.java
@@ -10,6 +10,7 @@
 import android.os.Build;
 import android.util.DisplayMetrics;
 import android.view.Display;
+import android.view.Surface;
 import android.view.WindowManager;
 
 import org.chromium.base.CalledByNative;
@@ -154,6 +155,30 @@
     }
 
     /**
+     * @return the screen's rotation angle from its 'natural' orientation.
+     * Expected values are one of { 0, 90, 180, 270 }.
+     * See http://developer.android.com/reference/android/view/Display.html#getRotation()
+     * for more information about Display.getRotation() behavior.
+     */
+    @CalledByNative
+    private int getRotationDegrees() {
+        switch (getDisplay().getRotation()) {
+            case Surface.ROTATION_0:
+                return 0;
+            case Surface.ROTATION_90:
+                return 90;
+            case Surface.ROTATION_180:
+                return 180;
+            case Surface.ROTATION_270:
+                return 270;
+        }
+
+        // This should not happen.
+        assert false;
+        return 0;
+    }
+
+    /**
      * Inform the native implementation to update its cached representation of
      * the DeviceDisplayInfo values.
      */
@@ -162,7 +187,7 @@
                 getDisplayHeight(), getDisplayWidth(),
                 getPhysicalDisplayHeight(), getPhysicalDisplayWidth(),
                 getBitsPerPixel(), getBitsPerComponent(),
-                getDIPScale(), getSmallestDIPWidth());
+                getDIPScale(), getSmallestDIPWidth(), getRotationDegrees());
     }
 
     private Display getDisplay() {
@@ -184,6 +209,6 @@
             int displayHeight, int displayWidth,
             int physicalDisplayHeight, int physicalDisplayWidth,
             int bitsPerPixel, int bitsPerComponent, double dipScale,
-            int smallestDIPWidth);
+            int smallestDIPWidth, int rotationDegrees);
 
 }
diff --git a/ui/android/java/src/org/chromium/ui/gfx/ViewConfigurationHelper.java b/ui/android/java/src/org/chromium/ui/gfx/ViewConfigurationHelper.java
index ae007b4..e8fc5b9 100644
--- a/ui/android/java/src/org/chromium/ui/gfx/ViewConfigurationHelper.java
+++ b/ui/android/java/src/org/chromium/ui/gfx/ViewConfigurationHelper.java
@@ -8,6 +8,7 @@
 import android.content.Context;
 import android.content.res.Configuration;
 import android.content.res.Resources;
+import android.util.TypedValue;
 import android.view.ViewConfiguration;
 
 import org.chromium.base.CalledByNative;
@@ -21,6 +22,12 @@
  */
 @JNINamespace("gfx")
 public class ViewConfigurationHelper {
+
+    // Fallback constants when resource lookup fails, see
+    // ui/android/java/res/values/dimens.xml.
+    private static final float MIN_SCALING_SPAN_MM = 27.0f;
+    private static final float MIN_SCALING_TOUCH_MAJOR_DIP = 48.0f;
+
     private final Context mAppContext;
     private ViewConfiguration mViewConfiguration;
 
@@ -104,8 +111,13 @@
         int id = res.getIdentifier("config_minScalingSpan", "dimen", "android");
         // Fall back to a sensible default if the internal identifier does not exist.
         if (id == 0) id = R.dimen.config_min_scaling_span;
-        return res.getDimensionPixelSize(id);
-
+        try {
+            return res.getDimensionPixelSize(id);
+        } catch (Resources.NotFoundException e) {
+            assert false : "MinScalingSpan resource lookup failed.";
+            return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_MM, MIN_SCALING_SPAN_MM,
+                    res.getDisplayMetrics());
+        }
     }
 
     @CalledByNative
@@ -114,7 +126,13 @@
         int id = res.getIdentifier("config_minScalingTouchMajor", "dimen", "android");
         // Fall back to a sensible default if the internal identifier does not exist.
         if (id == 0) id = R.dimen.config_min_scaling_touch_major;
-        return res.getDimensionPixelSize(id);
+        try {
+            return res.getDimensionPixelSize(id);
+        } catch (Resources.NotFoundException e) {
+            assert false : "MinScalingTouchMajor resource lookup failed.";
+            return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
+                    MIN_SCALING_TOUCH_MAJOR_DIP, res.getDisplayMetrics());
+        }
     }
 
     @CalledByNative
diff --git a/ui/app_list/app_list.gyp b/ui/app_list/app_list.gyp
index 182d9c6..13ba5e7 100644
--- a/ui/app_list/app_list.gyp
+++ b/ui/app_list/app_list.gyp
@@ -151,7 +151,7 @@
             '../events/events.gyp:events',
             '../views/controls/webview/webview.gyp:webview',
             '../views/views.gyp:views',
-            '../wm/wm.gyp:wm_core',
+            '../wm/wm.gyp:wm',
           ],
         }, {  # toolkit_views==0
           'sources/': [
diff --git a/ui/app_list/app_list_switches.cc b/ui/app_list/app_list_switches.cc
index be0e021..406519e 100644
--- a/ui/app_list/app_list_switches.cc
+++ b/ui/app_list/app_list_switches.cc
@@ -29,7 +29,7 @@
 const char kEnableSyncAppList[] = "enable-sync-app-list";
 
 bool IsAppListSyncEnabled() {
-#if defined(OS_CHROMEOS)
+#if defined(TOOLKIT_VIEWS)
   return !CommandLine::ForCurrentProcess()->HasSwitch(kDisableSyncAppList);
 #else
   return CommandLine::ForCurrentProcess()->HasSwitch(kEnableSyncAppList);
diff --git a/ui/app_list/views/app_list_item_view.cc b/ui/app_list/views/app_list_item_view.cc
index 3ce3e9c..9ab2a5b 100644
--- a/ui/app_list/views/app_list_item_view.cc
+++ b/ui/app_list/views/app_list_item_view.cc
@@ -147,7 +147,6 @@
 
   ui_state_ = state;
 
-#if defined(USE_AURA)
   switch (ui_state_) {
     case UI_STATE_NORMAL:
       title_->SetVisible(!item_->is_installing());
@@ -176,10 +175,9 @@
     case UI_STATE_DROPPING_IN_FOLDER:
       break;
   }
+#endif  // !OS_WIN
 
   SchedulePaint();
-#endif  // !OS_WIN
-#endif  // USE_AURA
 }
 
 void AppListItemView::SetTouchDragging(bool touch_dragging) {
diff --git a/ui/app_list/views/apps_grid_view.cc b/ui/app_list/views/apps_grid_view.cc
index d5d7078..470632d 100644
--- a/ui/app_list/views/apps_grid_view.cc
+++ b/ui/app_list/views/apps_grid_view.cc
@@ -232,8 +232,7 @@
     SetupExchangeData(&data);
 
     // Hide the dragged view because the OS is going to create its own.
-    const gfx::Size drag_view_size = drag_view_->size();
-    drag_view_->SetSize(gfx::Size(0, 0));
+    drag_view_->SetVisible(false);
 
     // Blocks until the drag is finished. Calls into the ui::DragSourceWin
     // methods.
@@ -243,8 +242,8 @@
 
     // If |drag_view_| is NULL the drag was ended by some reentrant code.
     if (drag_view_) {
-      // Restore the dragged view to its original size.
-      drag_view_->SetSize(drag_view_size);
+      // Make the drag view visible again.
+      drag_view_->SetVisible(true);
       drag_view_->OnSyncDragEnd();
 
       grid_view_->EndDrag(canceled_ || !IsCursorWithinGridView());
diff --git a/ui/aura/aura.gyp b/ui/aura/aura.gyp
index 26be1c3..a9dae30 100644
--- a/ui/aura/aura.gyp
+++ b/ui/aura/aura.gyp
@@ -143,13 +143,13 @@
         '../../skia/skia.gyp:skia',
         '../../testing/gtest.gyp:gtest',
         '../base/ui_base.gyp:ui_base',
+        '../base/ui_base.gyp:ui_base_test_support',
         '../compositor/compositor.gyp:compositor_test_support',
         '../events/events.gyp:events',
         '../events/events.gyp:events_base',
         '../events/events.gyp:events_test_support',
         '../gfx/gfx.gyp:gfx',
         '../gfx/gfx.gyp:gfx_geometry',
-        '../ui_unittests.gyp:ui_test_support',
         'aura',
       ],
       'include_dirs': [
@@ -257,6 +257,7 @@
         '../../skia/skia.gyp:skia',
         '../../testing/gtest.gyp:gtest',
         '../base/ui_base.gyp:ui_base',
+        '../base/ui_base.gyp:ui_base_test_support',
         '../compositor/compositor.gyp:compositor',
         '../compositor/compositor.gyp:compositor_test_support',
         '../events/events.gyp:events',
@@ -264,7 +265,6 @@
         '../gfx/gfx.gyp:gfx',
         '../gfx/gfx.gyp:gfx_geometry',
         '../gl/gl.gyp:gl',
-        '../ui_unittests.gyp:ui_test_support',
         'aura_test_support',
         'aura',
       ],
diff --git a/ui/aura/demo/demo_main.cc b/ui/aura/demo/demo_main.cc
index 21d1dda..23262fa 100644
--- a/ui/aura/demo/demo_main.cc
+++ b/ui/aura/demo/demo_main.cc
@@ -27,6 +27,10 @@
 #include "ui/gfx/x/x11_connection.h"
 #endif
 
+#if defined(OS_WIN)
+#include "ui/gfx/win/dpi.h"
+#endif
+
 namespace {
 
 // Trivial WindowDelegate implementation that draws a colored background.
@@ -112,6 +116,10 @@
 
   gfx::GLSurface::InitializeOneOff();
 
+#if defined(OS_WIN)
+  gfx::InitDeviceScaleFactor(1.0f);
+#endif
+
   // The ContextFactory must exist before any Compositors are created.
   scoped_ptr<ui::InProcessContextFactory> context_factory(
       new ui::InProcessContextFactory());
diff --git a/ui/aura/env.cc b/ui/aura/env.cc
index 7e25c4c..f701695 100644
--- a/ui/aura/env.cc
+++ b/ui/aura/env.cc
@@ -4,14 +4,11 @@
 
 #include "ui/aura/env.h"
 
-#include "base/command_line.h"
-#include "base/message_loop/message_pump_dispatcher.h"
 #include "ui/aura/env_observer.h"
 #include "ui/aura/input_state_lookup.h"
-#include "ui/aura/window.h"
 #include "ui/compositor/compositor.h"
-#include "ui/compositor/compositor_switches.h"
 #include "ui/events/event_target_iterator.h"
+#include "ui/events/platform/platform_event_source.h"
 
 namespace aura {
 
@@ -72,6 +69,9 @@
 
 void Env::Init() {
   ui::Compositor::Initialize();
+
+  if (!ui::PlatformEventSource::GetInstance())
+    event_source_ = ui::PlatformEventSource::CreateDefault();
 }
 
 void Env::NotifyWindowInitialized(Window* window) {
diff --git a/ui/aura/env.h b/ui/aura/env.h
index 68576ec..1d6c19d 100644
--- a/ui/aura/env.h
+++ b/ui/aura/env.h
@@ -12,6 +12,9 @@
 #include "ui/events/event_target.h"
 #include "ui/gfx/point.h"
 
+namespace ui {
+class PlatformEventSource;
+}
 namespace aura {
 
 namespace test {
@@ -36,6 +39,7 @@
   void AddObserver(EnvObserver* observer);
   void RemoveObserver(EnvObserver* observer);
 
+  const int mouse_button_flags() const { return mouse_button_flags_; }
   void set_mouse_button_flags(int mouse_button_flags) {
     mouse_button_flags_ = mouse_button_flags;
   }
@@ -85,6 +89,7 @@
   bool is_touch_down_;
 
   scoped_ptr<InputStateLookup> input_state_lookup_;
+  scoped_ptr<ui::PlatformEventSource> event_source_;
 
   DISALLOW_COPY_AND_ASSIGN(Env);
 };
diff --git a/ui/aura/gestures/gesture_recognizer_unittest.cc b/ui/aura/gestures/gesture_recognizer_unittest.cc
index 212db84..e87cffa 100644
--- a/ui/aura/gestures/gesture_recognizer_unittest.cc
+++ b/ui/aura/gestures/gesture_recognizer_unittest.cc
@@ -242,12 +242,8 @@
         scroll_update_ = true;
         scroll_x_ += gesture->details().scroll_x();
         scroll_y_ += gesture->details().scroll_y();
-        scroll_velocity_x_ = gesture->details().velocity_x();
-        scroll_velocity_y_ = gesture->details().velocity_y();
         scroll_x_ordinal_ += gesture->details().scroll_x_ordinal();
         scroll_y_ordinal_ += gesture->details().scroll_y_ordinal();
-        scroll_velocity_x_ordinal_ = gesture->details().velocity_x_ordinal();
-        scroll_velocity_y_ordinal_ = gesture->details().velocity_y_ordinal();
         break;
       case ui::ET_GESTURE_SCROLL_END:
         EXPECT_TRUE(velocity_x_ == 0 && velocity_y_ == 0);
@@ -1123,14 +1119,8 @@
   tes.SendScrollEvent(event_processor(), 130, 230, kTouchId, delegate.get());
   EXPECT_1_EVENT(delegate->events(),
                  ui::ET_GESTURE_SCROLL_UPDATE);
-  EXPECT_GT(delegate->scroll_velocity_x(), 0);
-  EXPECT_GT(delegate->scroll_velocity_y(), 0);
   total_scroll.set_x(total_scroll.x() + delegate->scroll_x());
   total_scroll.set_y(total_scroll.y() + delegate->scroll_y());
-  EXPECT_EQ((int)(29 + delegate->scroll_velocity_x() * prediction_interval),
-            (int)(total_scroll.x()));
-  EXPECT_EQ((int)(29 + delegate->scroll_velocity_y() * prediction_interval),
-            (int)(total_scroll.y()));
 
   // Move some more to generate a few more scroll updates.
   tes.LeapForward(30);
@@ -1138,20 +1128,12 @@
   EXPECT_1_EVENT(delegate->events(), ui::ET_GESTURE_SCROLL_UPDATE);
   total_scroll.set_x(total_scroll.x() + delegate->scroll_x());
   total_scroll.set_y(total_scroll.y() + delegate->scroll_y());
-  EXPECT_EQ((int)(9 + delegate->scroll_velocity_x() * prediction_interval),
-            (int)(total_scroll.x()));
-  EXPECT_EQ((int)(10 + delegate->scroll_velocity_y() * prediction_interval),
-            (int)(total_scroll.y()));
 
   tes.LeapForward(30);
   tes.SendScrollEvent(event_processor(), 140, 215, kTouchId, delegate.get());
   EXPECT_1_EVENT(delegate->events(), ui::ET_GESTURE_SCROLL_UPDATE);
   total_scroll.set_x(total_scroll.x() + delegate->scroll_x());
   total_scroll.set_y(total_scroll.y() + delegate->scroll_y());
-  EXPECT_EQ((int)(39 + delegate->scroll_velocity_x() * prediction_interval),
-            (int)(total_scroll.x()));
-  EXPECT_EQ((int)(14 + delegate->scroll_velocity_y() * prediction_interval),
-            (int)(total_scroll.y()));
 
   // Release the touch. This should end the scroll.
   delegate->Reset();
@@ -1252,10 +1234,6 @@
                    100, 10, kTouchId, 1,
                    ui::GestureConfiguration::points_buffered_for_velocity(),
                    delegate.get());
-  // The y-velocity during the scroll should be 0 since this is in a horizontal
-  // rail scroll.
-  EXPECT_GT(delegate->scroll_velocity_x(), 0);
-  EXPECT_EQ(0, delegate->scroll_velocity_y());
 
   delegate->Reset();
   ui::TouchEvent release(ui::ET_TOUCH_RELEASED, gfx::Point(101, 201),
@@ -1297,7 +1275,6 @@
   EXPECT_EQ(0, delegate->scroll_x());
   EXPECT_EQ(1, delegate->scroll_x_ordinal());
   EXPECT_EQ(0, delegate->scroll_velocity_x());
-  EXPECT_GT(delegate->scroll_velocity_x_ordinal(), 0);
 
   // Get a high y velocity, while still staying on the rail
   tes.SendScrollEvents(event_processor(), 1, 6,
@@ -1305,7 +1282,6 @@
                        ui::GestureConfiguration::points_buffered_for_velocity(),
                        delegate.get());
   EXPECT_EQ(0, delegate->scroll_velocity_x());
-  EXPECT_GT(delegate->scroll_velocity_y(), 0);
 
   delegate->Reset();
   ui::TouchEvent release(ui::ET_TOUCH_RELEASED, gfx::Point(101, 206),
@@ -1587,10 +1563,6 @@
                        6, 100, kTouchId, 1,
                        ui::GestureConfiguration::points_buffered_for_velocity(),
                        delegate.get());
-  // Since the scroll is not longer railing, the velocity should be set for both
-  // axis.
-  EXPECT_GT(delegate->scroll_velocity_x(), 0);
-  EXPECT_GT(delegate->scroll_velocity_y(), 0);
 
   tes.SendScrollEvent(event_processor(), 5, 0, kTouchId, delegate.get());
   tes.SendScrollEvent(event_processor(), 10, 5, kTouchId, delegate.get());
@@ -1641,8 +1613,6 @@
                        100, 1, kTouchId, 1,
                        ui::GestureConfiguration::points_buffered_for_velocity(),
                        delegate.get());
-  EXPECT_GT(delegate->scroll_velocity_x(), 0);
-  EXPECT_GT(delegate->scroll_velocity_y(), 0);
 
   tes.SendScrollEvent(event_processor(), 0, 5, kTouchId, delegate.get());
   tes.SendScrollEvent(event_processor(), 5, 10, kTouchId, delegate.get());
@@ -2857,19 +2827,23 @@
   aura::test::EventGenerator generator(root_window(), window.get());
 
   for (int count = 2; count <= kTouchPoints; ++count) {
-    generator.GestureMultiFingerScroll(count, points, 15, kSteps, 0, -150);
+    generator.GestureMultiFingerScroll(
+        count, points, 1000, kSteps, 0, -11 * kSteps);
     EXPECT_TRUE(delegate->swipe_up());
     delegate->Reset();
 
-    generator.GestureMultiFingerScroll(count, points, 15, kSteps, 0, 150);
+    generator.GestureMultiFingerScroll(
+        count, points, 1000, kSteps, 0, 11 * kSteps);
     EXPECT_TRUE(delegate->swipe_down());
     delegate->Reset();
 
-    generator.GestureMultiFingerScroll(count, points, 15, kSteps, -150, 0);
+    generator.GestureMultiFingerScroll(
+        count, points, 1000, kSteps, -11 * kSteps, 0);
     EXPECT_TRUE(delegate->swipe_left());
     delegate->Reset();
 
-    generator.GestureMultiFingerScroll(count, points, 15, kSteps, 150, 0);
+    generator.GestureMultiFingerScroll(
+        count, points, 1000, kSteps, 11 * kSteps, 0);
     EXPECT_TRUE(delegate->swipe_right());
     delegate->Reset();
   }
diff --git a/ui/aura/test/aura_test_base.cc b/ui/aura/test/aura_test_base.cc
index ec7eb95..b6aecf9 100644
--- a/ui/aura/test/aura_test_base.cc
+++ b/ui/aura/test/aura_test_base.cc
@@ -69,6 +69,7 @@
   ui::GestureConfiguration::set_fling_acceleration_curve_coefficients(
       3, 0.8f);
   ui::GestureConfiguration::set_fling_velocity_cap(15000.0f);
+  ui::GestureConfiguration::set_min_swipe_speed(10);
 
   // The ContextFactory must exist before any Compositors are created.
   bool enable_pixel_output = false;
diff --git a/ui/aura/window.cc b/ui/aura/window.cc
index 2c9aab8..87874f8 100644
--- a/ui/aura/window.cc
+++ b/ui/aura/window.cc
@@ -517,13 +517,14 @@
 
   gfx::Vector2d offset;
   aura::Window* ancestor_with_layer = GetAncestorWithLayer(&offset);
+
+  child->parent_ = this;
+
   if (ancestor_with_layer) {
     offset += child->bounds().OffsetFromOrigin();
     child->ReparentLayers(ancestor_with_layer->layer(), offset);
   }
 
-  child->parent_ = this;
-
   children_.push_back(child);
   if (layout_manager_)
     layout_manager_->OnWindowAddedToLayout(child);
@@ -635,14 +636,6 @@
   return delegate_ ? delegate_->GetCursor(point) : gfx::kNullCursor;
 }
 
-void Window::SetEventFilter(ui::EventHandler* event_filter) {
-  if (event_filter_)
-    RemovePreTargetHandler(event_filter_.get());
-  event_filter_.reset(event_filter);
-  if (event_filter)
-    AddPreTargetHandler(event_filter);
-}
-
 void Window::AddObserver(WindowObserver* observer) {
   observers_.AddObserver(observer);
 }
diff --git a/ui/aura/window.h b/ui/aura/window.h
index 6fbea36..4455cd6 100644
--- a/ui/aura/window.h
+++ b/ui/aura/window.h
@@ -147,7 +147,7 @@
   // |aura::client::ScreenPositionClient| interface.
   gfx::Rect GetBoundsInScreen() const;
 
-  virtual void SetTransform(const gfx::Transform& transform);
+  void SetTransform(const gfx::Transform& transform);
 
   // Assigns a LayoutManager to size and place child windows.
   // The Window takes ownership of the LayoutManager.
@@ -220,12 +220,6 @@
   // Returns the cursor for the specified point, in window coordinates.
   gfx::NativeCursor GetCursor(const gfx::Point& point) const;
 
-  // Sets an 'event filter' for the window. An 'event filter' for a Window is
-  // a pre-target event handler, where the window owns the handler. A window
-  // can have only one such event filter. Setting a new filter removes and
-  // destroys any previously installed filter.
-  void SetEventFilter(ui::EventHandler* event_filter);
-
   // Add/remove observer.
   void AddObserver(WindowObserver* observer);
   void RemoveObserver(WindowObserver* observer);
@@ -518,7 +512,6 @@
   // Whether layer is initialized as non-opaque.
   bool transparent_;
 
-  scoped_ptr<ui::EventHandler> event_filter_;
   scoped_ptr<LayoutManager> layout_manager_;
   scoped_ptr<ui::EventTargeter> targeter_;
 
diff --git a/ui/aura/window_event_dispatcher.cc b/ui/aura/window_event_dispatcher.cc
index c566d1b..823c8e8 100644
--- a/ui/aura/window_event_dispatcher.cc
+++ b/ui/aura/window_event_dispatcher.cc
@@ -121,7 +121,7 @@
 void WindowEventDispatcher::OnMouseEventsEnableStateChanged(bool enabled) {
   // Send entered / exited so that visual state can be updated to match
   // mouse events state.
-  PostSynthesizeMouseMove();
+  PostSynthesizeMouseMove(ui::EF_NONE);
   // TODO(mazda): Add code to disable mouse events when |enabled| == false.
 }
 
@@ -379,7 +379,7 @@
       mouse_moved_handler_ = new_capture;
   } else {
     // Make sure mouse_moved_handler gets updated.
-    DispatchDetails details = SynthesizeMouseMoveEvent();
+    DispatchDetails details = SynthesizeMouseMoveEvent(ui::EF_NONE);
     if (details.dispatcher_destroyed)
       return;
   }
@@ -562,7 +562,7 @@
     return;
 
   if (window->ContainsPointInRoot(GetLastMouseLocationInRoot()))
-    PostSynthesizeMouseMove();
+    PostSynthesizeMouseMove(ui::EF_NONE);
 
   // Hiding the window releases capture which can implicitly destroy the window
   // so the window may no longer be valid after this call.
@@ -594,7 +594,7 @@
     synthesize_mouse_move_ = false;
   }
 
-  if (window->IsVisible()) {
+  if (window->IsVisible() && !window->ignore_events()) {
     gfx::Rect old_bounds_in_root = old_bounds, new_bounds_in_root = new_bounds;
     Window::ConvertRectToTarget(window->parent(), host_->window(),
                                 &old_bounds_in_root);
@@ -603,7 +603,7 @@
     gfx::Point last_mouse_location = GetLastMouseLocationInRoot();
     if (old_bounds_in_root.Contains(last_mouse_location) !=
         new_bounds_in_root.Contains(last_mouse_location)) {
-      PostSynthesizeMouseMove();
+      PostSynthesizeMouseMove(Env::GetInstance()->mouse_button_flags());
     }
   }
 }
@@ -669,7 +669,7 @@
   return dispatch_details;
 }
 
-void WindowEventDispatcher::PostSynthesizeMouseMove() {
+void WindowEventDispatcher::PostSynthesizeMouseMove(int mouse_button_flags) {
   if (synthesize_mouse_move_)
     return;
   synthesize_mouse_move_ = true;
@@ -677,18 +677,20 @@
       FROM_HERE,
       base::Bind(base::IgnoreResult(
           &WindowEventDispatcher::SynthesizeMouseMoveEvent),
-          held_event_factory_.GetWeakPtr()));
+          held_event_factory_.GetWeakPtr(),
+          mouse_button_flags));
 }
 
 void WindowEventDispatcher::SynthesizeMouseMoveAfterChangeToWindow(
     Window* window) {
   if (window->IsVisible() &&
       window->ContainsPointInRoot(GetLastMouseLocationInRoot())) {
-    PostSynthesizeMouseMove();
+    PostSynthesizeMouseMove(ui::EF_NONE);
   }
 }
 
-ui::EventDispatchDetails WindowEventDispatcher::SynthesizeMouseMoveEvent() {
+ui::EventDispatchDetails WindowEventDispatcher::SynthesizeMouseMoveEvent(
+    int mouse_button_flags) {
   DispatchDetails details;
   if (!synthesize_mouse_move_)
     return details;
@@ -698,11 +700,12 @@
     return details;
   gfx::Point host_mouse_location = root_mouse_location;
   host_->ConvertPointToHost(&host_mouse_location);
-  ui::MouseEvent event(ui::ET_MOUSE_MOVED,
-                       host_mouse_location,
-                       host_mouse_location,
-                       ui::EF_IS_SYNTHESIZED,
-                       0);
+  ui::MouseEvent event(
+      mouse_button_flags ? ui::ET_MOUSE_DRAGGED : ui::ET_MOUSE_MOVED,
+      host_mouse_location,
+      host_mouse_location,
+      ui::EF_IS_SYNTHESIZED | mouse_button_flags,
+      0);
   return OnEventFromSource(&event);
 }
 
diff --git a/ui/aura/window_event_dispatcher.h b/ui/aura/window_event_dispatcher.h
index 6b476b7..aeae27c 100644
--- a/ui/aura/window_event_dispatcher.h
+++ b/ui/aura/window_event_dispatcher.h
@@ -216,11 +216,12 @@
 
   // Posts a task to send synthesized mouse move event if there is no a pending
   // task.
-  void PostSynthesizeMouseMove();
+  void PostSynthesizeMouseMove(int mouse_button_flags);
 
   // Creates and dispatches synthesized mouse move event using the
   // current mouse location.
-  ui::EventDispatchDetails SynthesizeMouseMoveEvent() WARN_UNUSED_RESULT;
+  ui::EventDispatchDetails SynthesizeMouseMoveEvent(int mouse_button_flags)
+      WARN_UNUSED_RESULT;
 
   // Calls SynthesizeMouseMove() if |window| is currently visible and contains
   // the mouse cursor.
diff --git a/ui/aura/window_event_dispatcher_unittest.cc b/ui/aura/window_event_dispatcher_unittest.cc
index d0985b4..a7b6d03 100644
--- a/ui/aura/window_event_dispatcher_unittest.cc
+++ b/ui/aura/window_event_dispatcher_unittest.cc
@@ -289,10 +289,10 @@
   TestEventClient client(root_window());
   test::TestWindowDelegate d;
 
-  ui::test::TestEventHandler* nonlock_ef = new ui::test::TestEventHandler;
-  ui::test::TestEventHandler* lock_ef = new ui::test::TestEventHandler;
-  client.GetNonLockWindow()->SetEventFilter(nonlock_ef);
-  client.GetLockWindow()->SetEventFilter(lock_ef);
+  ui::test::TestEventHandler nonlock_ef;
+  ui::test::TestEventHandler lock_ef;
+  client.GetNonLockWindow()->AddPreTargetHandler(&nonlock_ef);
+  client.GetLockWindow()->AddPreTargetHandler(&lock_ef);
 
   Window* w1 = test::CreateTestWindowWithBounds(gfx::Rect(10, 10, 20, 20),
                                                 client.GetNonLockWindow());
@@ -328,12 +328,12 @@
     // i.e. never sent to the non-lock container's event filter.
     test::EventGenerator generator(root_window(), w1);
     generator.ClickLeftButton();
-    EXPECT_EQ(0, nonlock_ef->num_mouse_events());
+    EXPECT_EQ(0, nonlock_ef.num_mouse_events());
 
     // Events sent to a window in the lock container will be processed.
     test::EventGenerator generator3(root_window(), w3.get());
     generator3.PressLeftButton();
-    EXPECT_EQ(1, lock_ef->num_mouse_events());
+    EXPECT_EQ(1, lock_ef.num_mouse_events());
   }
 
   // Prevent w3 from being deleted by the hierarchy since its delegate is owned
@@ -342,18 +342,18 @@
 }
 
 TEST_F(WindowEventDispatcherTest, IgnoreUnknownKeys) {
-  ui::test::TestEventHandler* filter = new ConsumeKeyHandler;
-  root_window()->SetEventFilter(filter);  // passes ownership
+  ConsumeKeyHandler handler;
+  root_window()->AddPreTargetHandler(&handler);
 
   ui::KeyEvent unknown_event(ui::ET_KEY_PRESSED, ui::VKEY_UNKNOWN, 0, false);
   DispatchEventUsingWindowDispatcher(&unknown_event);
   EXPECT_FALSE(unknown_event.handled());
-  EXPECT_EQ(0, filter->num_key_events());
+  EXPECT_EQ(0, handler.num_key_events());
 
   ui::KeyEvent known_event(ui::ET_KEY_PRESSED, ui::VKEY_A, 0, false);
   DispatchEventUsingWindowDispatcher(&known_event);
   EXPECT_TRUE(known_event.handled());
-  EXPECT_EQ(1, filter->num_key_events());
+  EXPECT_EQ(1, handler.num_key_events());
 }
 
 TEST_F(WindowEventDispatcherTest, NoDelegateWindowReceivesKeyEvents) {
@@ -374,28 +374,28 @@
 // Tests that touch-events that are beyond the bounds of the root-window do get
 // propagated to the event filters correctly with the root as the target.
 TEST_F(WindowEventDispatcherTest, TouchEventsOutsideBounds) {
-  ui::test::TestEventHandler* filter = new ui::test::TestEventHandler;
-  root_window()->SetEventFilter(filter);  // passes ownership
+  ui::test::TestEventHandler handler;
+  root_window()->AddPreTargetHandler(&handler);
 
   gfx::Point position = root_window()->bounds().origin();
   position.Offset(-10, -10);
   ui::TouchEvent press(ui::ET_TOUCH_PRESSED, position, 0, base::TimeDelta());
   DispatchEventUsingWindowDispatcher(&press);
-  EXPECT_EQ(1, filter->num_touch_events());
+  EXPECT_EQ(1, handler.num_touch_events());
 
   position = root_window()->bounds().origin();
   position.Offset(root_window()->bounds().width() + 10,
                   root_window()->bounds().height() + 10);
   ui::TouchEvent release(ui::ET_TOUCH_RELEASED, position, 0, base::TimeDelta());
   DispatchEventUsingWindowDispatcher(&release);
-  EXPECT_EQ(2, filter->num_touch_events());
+  EXPECT_EQ(2, handler.num_touch_events());
 }
 
 // Tests that scroll events are dispatched correctly.
 TEST_F(WindowEventDispatcherTest, ScrollEventDispatch) {
   base::TimeDelta now = ui::EventTimeForNow();
-  ui::test::TestEventHandler* filter = new ui::test::TestEventHandler;
-  root_window()->SetEventFilter(filter);
+  ui::test::TestEventHandler handler;
+  root_window()->AddPreTargetHandler(&handler);
 
   test::TestWindowDelegate delegate;
   scoped_ptr<Window> w1(CreateNormalWindow(1, root_window(), &delegate));
@@ -410,7 +410,7 @@
                           0, -10,
                           2);
   DispatchEventUsingWindowDispatcher(&scroll1);
-  EXPECT_EQ(1, filter->num_scroll_events());
+  EXPECT_EQ(1, handler.num_scroll_events());
 
   // Scroll event on a window should be dispatched properly.
   ui::ScrollEvent scroll2(ui::ET_SCROLL,
@@ -421,7 +421,8 @@
                           -10, 0,
                           2);
   DispatchEventUsingWindowDispatcher(&scroll2);
-  EXPECT_EQ(2, filter->num_scroll_events());
+  EXPECT_EQ(2, handler.num_scroll_events());
+  root_window()->RemovePreTargetHandler(&handler);
 }
 
 namespace {
@@ -431,6 +432,7 @@
  public:
   typedef std::vector<ui::EventType> Events;
   typedef std::vector<gfx::Point> EventLocations;
+  typedef std::vector<int> EventFlags;
 
   EventFilterRecorder()
       : wait_until_event_(ui::ET_UNKNOWN) {
@@ -441,6 +443,7 @@
   const EventLocations& mouse_locations() const { return mouse_locations_; }
   gfx::Point mouse_location(int i) const { return mouse_locations_[i]; }
   const EventLocations& touch_locations() const { return touch_locations_; }
+  const EventFlags& mouse_event_flags() const { return mouse_event_flags_; }
 
   void WaitUntilReceivedEvent(ui::EventType type) {
     wait_until_event_ = type;
@@ -458,6 +461,7 @@
     events_.clear();
     mouse_locations_.clear();
     touch_locations_.clear();
+    mouse_event_flags_.clear();
   }
 
   // ui::EventHandler overrides:
@@ -472,6 +476,7 @@
 
   virtual void OnMouseEvent(ui::MouseEvent* event) OVERRIDE {
     mouse_locations_.push_back(event->location());
+    mouse_event_flags_.push_back(event->flags());
   }
 
   virtual void OnTouchEvent(ui::TouchEvent* event) OVERRIDE {
@@ -485,6 +490,7 @@
   Events events_;
   EventLocations mouse_locations_;
   EventLocations touch_locations_;
+  EventFlags mouse_event_flags_;
 
   DISALLOW_COPY_AND_ASSIGN(EventFilterRecorder);
 };
@@ -585,10 +591,10 @@
   // over |window| and verify |window| gets it (|window| gets it because it has
   // capture).
   EXPECT_FALSE(Env::GetInstance()->IsMouseButtonDown());
+  EventFilterRecorder recorder;
   scoped_ptr<Window> window(CreateNormalWindow(1, root_window(), NULL));
   window->SetBounds(gfx::Rect(20, 20, 40, 30));
-  EventFilterRecorder* recorder = new EventFilterRecorder;
-  window->SetEventFilter(recorder);  // Takes ownership.
+  window->AddPreTargetHandler(&recorder);
   window->SetCapture();
   const ui::MouseEvent press_event(
       ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(),
@@ -596,13 +602,13 @@
   host()->dispatcher()->RepostEvent(press_event);
   RunAllPendingInMessageLoop();  // Necessitated by RepostEvent().
   // Mouse moves/enters may be generated. We only care about a pressed.
-  EXPECT_TRUE(EventTypesToString(recorder->events()).find("MOUSE_PRESSED") !=
-              std::string::npos) << EventTypesToString(recorder->events());
+  EXPECT_TRUE(EventTypesToString(recorder.events()).find("MOUSE_PRESSED") !=
+              std::string::npos) << EventTypesToString(recorder.events());
 }
 
 TEST_F(WindowEventDispatcherTest, MouseMovesHeld) {
-  EventFilterRecorder* filter = new EventFilterRecorder;
-  root_window()->SetEventFilter(filter);  // passes ownership
+  EventFilterRecorder recorder;
+  root_window()->AddPreTargetHandler(&recorder);
 
   test::TestWindowDelegate delegate;
   scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate(
@@ -612,7 +618,7 @@
                                   gfx::Point(0, 0), 0, 0);
   DispatchEventUsingWindowDispatcher(&mouse_move_event);
   // Discard MOUSE_ENTER.
-  filter->Reset();
+  recorder.Reset();
 
   host()->dispatcher()->HoldPointerMoves();
 
@@ -620,7 +626,7 @@
   ui::MouseEvent mouse_dragged_event(ui::ET_MOUSE_DRAGGED, gfx::Point(0, 0),
                                      gfx::Point(0, 0), 0, 0);
   DispatchEventUsingWindowDispatcher(&mouse_dragged_event);
-  EXPECT_TRUE(filter->events().empty());
+  EXPECT_TRUE(recorder.events().empty());
 
   // Check that we do dispatch the held MOUSE_DRAGGED event before another type
   // of event.
@@ -628,28 +634,28 @@
                                      gfx::Point(0, 0), 0, 0);
   DispatchEventUsingWindowDispatcher(&mouse_pressed_event);
   EXPECT_EQ("MOUSE_DRAGGED MOUSE_PRESSED",
-            EventTypesToString(filter->events()));
-  filter->Reset();
+            EventTypesToString(recorder.events()));
+  recorder.Reset();
 
   // Check that we coalesce held MOUSE_DRAGGED events.
   ui::MouseEvent mouse_dragged_event2(ui::ET_MOUSE_DRAGGED, gfx::Point(10, 10),
                                       gfx::Point(10, 10), 0, 0);
   DispatchEventUsingWindowDispatcher(&mouse_dragged_event);
   DispatchEventUsingWindowDispatcher(&mouse_dragged_event2);
-  EXPECT_TRUE(filter->events().empty());
+  EXPECT_TRUE(recorder.events().empty());
   DispatchEventUsingWindowDispatcher(&mouse_pressed_event);
   EXPECT_EQ("MOUSE_DRAGGED MOUSE_PRESSED",
-            EventTypesToString(filter->events()));
-  filter->Reset();
+            EventTypesToString(recorder.events()));
+  recorder.Reset();
 
   // Check that on ReleasePointerMoves, held events are not dispatched
   // immediately, but posted instead.
   DispatchEventUsingWindowDispatcher(&mouse_dragged_event);
   host()->dispatcher()->ReleasePointerMoves();
-  EXPECT_TRUE(filter->events().empty());
+  EXPECT_TRUE(recorder.events().empty());
   RunAllPendingInMessageLoop();
-  EXPECT_EQ("MOUSE_DRAGGED", EventTypesToString(filter->events()));
-  filter->Reset();
+  EXPECT_EQ("MOUSE_DRAGGED", EventTypesToString(recorder.events()));
+  recorder.Reset();
 
   // However if another message comes in before the dispatch of the posted
   // event, check that the posted event is dispatched before this new event.
@@ -658,10 +664,10 @@
   host()->dispatcher()->ReleasePointerMoves();
   DispatchEventUsingWindowDispatcher(&mouse_pressed_event);
   EXPECT_EQ("MOUSE_DRAGGED MOUSE_PRESSED",
-            EventTypesToString(filter->events()));
-  filter->Reset();
+            EventTypesToString(recorder.events()));
+  recorder.Reset();
   RunAllPendingInMessageLoop();
-  EXPECT_TRUE(filter->events().empty());
+  EXPECT_TRUE(recorder.events().empty());
 
   // Check that if the other message is another MOUSE_DRAGGED, we still coalesce
   // them.
@@ -669,10 +675,10 @@
   DispatchEventUsingWindowDispatcher(&mouse_dragged_event);
   host()->dispatcher()->ReleasePointerMoves();
   DispatchEventUsingWindowDispatcher(&mouse_dragged_event2);
-  EXPECT_EQ("MOUSE_DRAGGED", EventTypesToString(filter->events()));
-  filter->Reset();
+  EXPECT_EQ("MOUSE_DRAGGED", EventTypesToString(recorder.events()));
+  recorder.Reset();
   RunAllPendingInMessageLoop();
-  EXPECT_TRUE(filter->events().empty());
+  EXPECT_TRUE(recorder.events().empty());
 
   // Check that synthetic mouse move event has a right location when issued
   // while holding pointer moves.
@@ -684,17 +690,18 @@
   window->SetBounds(gfx::Rect(15, 15, 80, 80));
   DispatchEventUsingWindowDispatcher(&mouse_dragged_event3);
   RunAllPendingInMessageLoop();
-  EXPECT_TRUE(filter->events().empty());
+  EXPECT_TRUE(recorder.events().empty());
   host()->dispatcher()->ReleasePointerMoves();
   RunAllPendingInMessageLoop();
-  EXPECT_EQ("MOUSE_MOVED", EventTypesToString(filter->events()));
-  EXPECT_EQ(gfx::Point(13, 13), filter->mouse_location(0));
-  filter->Reset();
+  EXPECT_EQ("MOUSE_MOVED", EventTypesToString(recorder.events()));
+  EXPECT_EQ(gfx::Point(13, 13), recorder.mouse_location(0));
+  recorder.Reset();
+  root_window()->RemovePreTargetHandler(&recorder);
 }
 
 TEST_F(WindowEventDispatcherTest, TouchMovesHeld) {
-  EventFilterRecorder* filter = new EventFilterRecorder;
-  root_window()->SetEventFilter(filter);  // passes ownership
+  EventFilterRecorder recorder;
+  root_window()->AddPreTargetHandler(&recorder);
 
   test::TestWindowDelegate delegate;
   scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate(
@@ -707,8 +714,8 @@
   ui::TouchEvent touch_pressed_event(ui::ET_TOUCH_PRESSED, touch_location,
                                      0, base::TimeDelta());
   DispatchEventUsingWindowDispatcher(&touch_pressed_event);
-  filter->WaitUntilReceivedEvent(ui::ET_GESTURE_SHOW_PRESS);
-  filter->Reset();
+  recorder.WaitUntilReceivedEvent(ui::ET_GESTURE_SHOW_PRESS);
+  recorder.Reset();
 
   host()->dispatcher()->HoldPointerMoves();
 
@@ -716,32 +723,32 @@
   ui::TouchEvent touch_moved_event(ui::ET_TOUCH_MOVED, touch_location,
                                    0, base::TimeDelta());
   DispatchEventUsingWindowDispatcher(&touch_moved_event);
-  EXPECT_TRUE(filter->events().empty());
+  EXPECT_TRUE(recorder.events().empty());
 
   // Check that on ReleasePointerMoves, held events are not dispatched
   // immediately, but posted instead.
   DispatchEventUsingWindowDispatcher(&touch_moved_event);
   host()->dispatcher()->ReleasePointerMoves();
-  EXPECT_TRUE(filter->events().empty());
+  EXPECT_TRUE(recorder.events().empty());
 
   RunAllPendingInMessageLoop();
-  EXPECT_EQ("TOUCH_MOVED", EventTypesToString(filter->events()));
-  filter->Reset();
+  EXPECT_EQ("TOUCH_MOVED", EventTypesToString(recorder.events()));
+  recorder.Reset();
 
   // If another touch event occurs then the held touch should be dispatched
   // immediately before it.
   ui::TouchEvent touch_released_event(ui::ET_TOUCH_RELEASED, touch_location,
                                       0, base::TimeDelta());
-  filter->Reset();
+  recorder.Reset();
   host()->dispatcher()->HoldPointerMoves();
   DispatchEventUsingWindowDispatcher(&touch_moved_event);
   DispatchEventUsingWindowDispatcher(&touch_released_event);
   EXPECT_EQ("TOUCH_MOVED TOUCH_RELEASED GESTURE_TAP_CANCEL GESTURE_END",
-            EventTypesToString(filter->events()));
-  filter->Reset();
+            EventTypesToString(recorder.events()));
+  recorder.Reset();
   host()->dispatcher()->ReleasePointerMoves();
   RunAllPendingInMessageLoop();
-  EXPECT_TRUE(filter->events().empty());
+  EXPECT_TRUE(recorder.events().empty());
 }
 
 class HoldPointerOnScrollHandler : public ui::test::TestEventHandler {
@@ -777,10 +784,10 @@
 // Tests that touch-move events don't contribute to an in-progress scroll
 // gesture if touch-move events are being held by the dispatcher.
 TEST_F(WindowEventDispatcherTest, TouchMovesHeldOnScroll) {
-  EventFilterRecorder* filter = new EventFilterRecorder;
-  root_window()->SetEventFilter(filter);
+  EventFilterRecorder recorder;
+  root_window()->AddPreTargetHandler(&recorder);
   test::TestWindowDelegate delegate;
-  HoldPointerOnScrollHandler handler(host()->dispatcher(), filter);
+  HoldPointerOnScrollHandler handler(host()->dispatcher(), &recorder);
   scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate(
       &delegate, 1, gfx::Rect(50, 50, 100, 100), root_window()));
   window->AddPreTargetHandler(&handler);
@@ -795,21 +802,21 @@
   // touch-release), the held touch-move event will have been dispatched first,
   // along with the subsequent events (i.e. touch-release, scroll-end, and
   // gesture-end).
-  const EventFilterRecorder::Events& events = filter->events();
+  const EventFilterRecorder::Events& events = recorder.events();
   EXPECT_EQ("TOUCH_MOVED TOUCH_RELEASED GESTURE_SCROLL_END GESTURE_END",
             EventTypesToString(events));
-  ASSERT_EQ(2u, filter->touch_locations().size());
+  ASSERT_EQ(2u, recorder.touch_locations().size());
   EXPECT_EQ(gfx::Point(-40, 10).ToString(),
-            filter->touch_locations()[0].ToString());
+            recorder.touch_locations()[0].ToString());
   EXPECT_EQ(gfx::Point(-40, 10).ToString(),
-            filter->touch_locations()[1].ToString());
+            recorder.touch_locations()[1].ToString());
 }
 
 // Tests that synthetic mouse events are ignored when mouse
 // events are disabled.
 TEST_F(WindowEventDispatcherTest, DispatchSyntheticMouseEvents) {
-  EventFilterRecorder* filter = new EventFilterRecorder;
-  root_window()->SetEventFilter(filter);  // passes ownership
+  EventFilterRecorder recorder;
+  root_window()->AddPreTargetHandler(&recorder);
 
   test::TestWindowDelegate delegate;
   scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate(
@@ -823,27 +830,113 @@
   ui::MouseEvent mouse1(ui::ET_MOUSE_MOVED, gfx::Point(10, 10),
                         gfx::Point(10, 10), 0, 0);
   DispatchEventUsingWindowDispatcher(&mouse1);
-  EXPECT_FALSE(filter->events().empty());
-  filter->Reset();
+  EXPECT_FALSE(recorder.events().empty());
+  recorder.Reset();
 
   // Dispatch a synthetic mouse event when mouse events are enabled.
   ui::MouseEvent mouse2(ui::ET_MOUSE_MOVED, gfx::Point(10, 10),
                         gfx::Point(10, 10), ui::EF_IS_SYNTHESIZED, 0);
   DispatchEventUsingWindowDispatcher(&mouse2);
-  EXPECT_FALSE(filter->events().empty());
-  filter->Reset();
+  EXPECT_FALSE(recorder.events().empty());
+  recorder.Reset();
 
   // Dispatch a synthetic mouse event when mouse events are disabled.
   cursor_client.DisableMouseEvents();
   DispatchEventUsingWindowDispatcher(&mouse2);
-  EXPECT_TRUE(filter->events().empty());
+  EXPECT_TRUE(recorder.events().empty());
+  root_window()->RemovePreTargetHandler(&recorder);
+}
+
+// Tests synthetic mouse events generated when window bounds changes such that
+// the cursor previously outside the window becomes inside, or vice versa.
+// - Synthesize MOVED events when the mouse button is up;
+// - Synthesize DRAGGED events with correct flags when mouse button is down;
+// - Do not synthesize events if the window ignores events or is invisible.
+TEST_F(WindowEventDispatcherTest, SynthesizeMouseEventsOnWindowBoundsChanged) {
+  test::TestWindowDelegate delegate;
+  scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate(
+      &delegate, 1234, gfx::Rect(5, 5, 100, 100), root_window()));
+  window->Show();
+  window->SetCapture();
+
+  EventFilterRecorder recorder;
+  window->AddPreTargetHandler(&recorder);
+
+  // Dispatch a non-synthetic mouse event to place cursor inside window bounds.
+  ui::MouseEvent mouse(ui::ET_MOUSE_MOVED, gfx::Point(10, 10),
+                       gfx::Point(10, 10), 0, 0);
+  DispatchEventUsingWindowDispatcher(&mouse);
+  EXPECT_FALSE(recorder.events().empty());
+  recorder.Reset();
+
+  // Update the window bounds so that cursor is now outside the window.
+  // This should trigger a synthetic MOVED event.
+  gfx::Rect bounds1(20, 20, 100, 100);
+  window->SetBounds(bounds1);
+  RunAllPendingInMessageLoop();
+  ASSERT_FALSE(recorder.events().empty());
+  ASSERT_FALSE(recorder.mouse_event_flags().empty());
+  EXPECT_EQ(ui::ET_MOUSE_MOVED, recorder.events().back());
+  EXPECT_EQ(ui::EF_IS_SYNTHESIZED, recorder.mouse_event_flags().back());
+  recorder.Reset();
+
+  // Hold down the LEFT mouse button.
+  Env::GetInstance()->set_mouse_button_flags(ui::EF_LEFT_MOUSE_BUTTON);
+
+  // Update the window bounds so that cursor is back inside the window.
+  // This should trigger a synthetic DRAGGED event with the left button flag.
+  gfx::Rect bounds2(5, 5, 100, 100);
+  window->SetBounds(bounds2);
+  RunAllPendingInMessageLoop();
+  ASSERT_FALSE(recorder.events().empty());
+  ASSERT_FALSE(recorder.mouse_event_flags().empty());
+  EXPECT_EQ(ui::ET_MOUSE_DRAGGED, recorder.events().back());
+  EXPECT_EQ(ui::EF_IS_SYNTHESIZED | ui::EF_LEFT_MOUSE_BUTTON,
+            recorder.mouse_event_flags().back());
+  recorder.Reset();
+
+  // Hold down the RIGHT mouse button.
+  Env::GetInstance()->set_mouse_button_flags(ui::EF_RIGHT_MOUSE_BUTTON);
+
+  // Update the window bounds so that cursor is outside the window.
+  // This should trigger a synthetic DRAGGED event with the right button flag.
+  window->SetBounds(bounds1);
+  RunAllPendingInMessageLoop();
+  ASSERT_FALSE(recorder.events().empty());
+  ASSERT_FALSE(recorder.mouse_event_flags().empty());
+  EXPECT_EQ(ui::ET_MOUSE_DRAGGED, recorder.events().back());
+  EXPECT_EQ(ui::EF_IS_SYNTHESIZED | ui::EF_RIGHT_MOUSE_BUTTON,
+            recorder.mouse_event_flags().back());
+  recorder.Reset();
+
+  // Release mouse button and set window to ignore events.
+  Env::GetInstance()->set_mouse_button_flags(0);
+  window->set_ignore_events(true);
+
+  // Update the window bounds so that cursor is back inside the window.
+  // This should not trigger a synthetic event.
+  window->SetBounds(bounds2);
+  RunAllPendingInMessageLoop();
+  EXPECT_TRUE(recorder.events().empty());
+  recorder.Reset();
+
+  // Set window to accept events but invisible.
+  window->set_ignore_events(false);
+  window->Hide();
+  recorder.Reset();
+
+  // Update the window bounds so that cursor is outside the window.
+  // This should not trigger a synthetic event.
+  window->SetBounds(bounds1);
+  RunAllPendingInMessageLoop();
+  EXPECT_TRUE(recorder.events().empty());
 }
 
 // Tests that a mouse exit is dispatched to the last known cursor location
 // when the cursor becomes invisible.
 TEST_F(WindowEventDispatcherTest, DispatchMouseExitWhenCursorHidden) {
-  EventFilterRecorder* filter = new EventFilterRecorder;
-  root_window()->SetEventFilter(filter);  // passes ownership
+  EventFilterRecorder recorder;
+  root_window()->AddPreTargetHandler(&recorder);
 
   test::TestWindowDelegate delegate;
   gfx::Point window_origin(7, 18);
@@ -856,30 +949,31 @@
   gfx::Point mouse_location(gfx::Point(15, 25));
   ui::MouseEvent mouse1(ui::ET_MOUSE_MOVED, mouse_location,
                         mouse_location, 0, 0);
-  EXPECT_TRUE(filter->events().empty());
+  EXPECT_TRUE(recorder.events().empty());
   DispatchEventUsingWindowDispatcher(&mouse1);
-  EXPECT_FALSE(filter->events().empty());
-  filter->Reset();
+  EXPECT_FALSE(recorder.events().empty());
+  recorder.Reset();
 
   // Hide the cursor and verify a mouse exit was dispatched.
   host()->OnCursorVisibilityChanged(false);
-  EXPECT_FALSE(filter->events().empty());
-  EXPECT_EQ("MOUSE_EXITED", EventTypesToString(filter->events()));
+  EXPECT_FALSE(recorder.events().empty());
+  EXPECT_EQ("MOUSE_EXITED", EventTypesToString(recorder.events()));
 
   // Verify the mouse exit was dispatched at the correct location
   // (in the correct coordinate space).
   int translated_x = mouse_location.x() - window_origin.x();
   int translated_y = mouse_location.y() - window_origin.y();
   gfx::Point translated_point(translated_x, translated_y);
-  EXPECT_EQ(filter->mouse_location(0).ToString(), translated_point.ToString());
+  EXPECT_EQ(recorder.mouse_location(0).ToString(), translated_point.ToString());
+  root_window()->RemovePreTargetHandler(&recorder);
 }
 
 // Tests that a synthetic mouse exit is dispatched to the last known cursor
 // location after mouse events are disabled on the cursor client.
 TEST_F(WindowEventDispatcherTest,
        DispatchSyntheticMouseExitAfterMouseEventsDisabled) {
-  EventFilterRecorder* filter = new EventFilterRecorder;
-  root_window()->SetEventFilter(filter);  // passes ownership
+  EventFilterRecorder recorder;
+  root_window()->AddPreTargetHandler(&recorder);
 
   test::TestWindowDelegate delegate;
   gfx::Point window_origin(7, 18);
@@ -892,10 +986,10 @@
   gfx::Point mouse_location(gfx::Point(15, 25));
   ui::MouseEvent mouse1(ui::ET_MOUSE_MOVED, mouse_location,
                         mouse_location, 0, 0);
-  EXPECT_TRUE(filter->events().empty());
+  EXPECT_TRUE(recorder.events().empty());
   DispatchEventUsingWindowDispatcher(&mouse1);
-  EXPECT_FALSE(filter->events().empty());
-  filter->Reset();
+  EXPECT_FALSE(recorder.events().empty());
+  recorder.Reset();
 
   test::TestCursorClient cursor_client(root_window());
   cursor_client.DisableMouseEvents();
@@ -905,17 +999,18 @@
                         gfx::Point(150, 150), ui::EF_IS_SYNTHESIZED, 0);
   DispatchEventUsingWindowDispatcher(&mouse2);
 
-  EXPECT_FALSE(filter->events().empty());
+  EXPECT_FALSE(recorder.events().empty());
   // We get the mouse exited event twice in our filter. Once during the
   // predispatch phase and during the actual dispatch.
-  EXPECT_EQ("MOUSE_EXITED MOUSE_EXITED", EventTypesToString(filter->events()));
+  EXPECT_EQ("MOUSE_EXITED MOUSE_EXITED", EventTypesToString(recorder.events()));
 
   // Verify the mouse exit was dispatched at the correct location
   // (in the correct coordinate space).
   int translated_x = mouse_exit_location.x() - window_origin.x();
   int translated_y = mouse_exit_location.y() - window_origin.y();
   gfx::Point translated_point(translated_x, translated_y);
-  EXPECT_EQ(filter->mouse_location(0).ToString(), translated_point.ToString());
+  EXPECT_EQ(recorder.mouse_location(0).ToString(), translated_point.ToString());
+  root_window()->RemovePreTargetHandler(&recorder);
 }
 
 class DeletingEventFilter : public ui::EventHandler {
@@ -989,8 +1084,8 @@
   DeletingWindowDelegate d11;
   Window* w11 = CreateNormalWindow(11, w1.get(), &d11);
   WindowTracker tracker;
-  DeletingEventFilter* w1_filter = new DeletingEventFilter;
-  w1->SetEventFilter(w1_filter);
+  DeletingEventFilter w1_filter;
+  w1->AddPreTargetHandler(&w1_filter);
   client::GetFocusClient(w1.get())->FocusWindow(w11);
 
   test::EventGenerator generator(root_window(), w11);
@@ -1005,7 +1100,7 @@
   generator.ReleaseLeftButton();
 
   // Delegate deletes w11. This will prevent the post-handle step from applying.
-  w1_filter->Reset(false);
+  w1_filter.Reset(false);
   d11.Reset(w11, true);
   generator.PressKey(ui::VKEY_A, 0);
   EXPECT_FALSE(tracker.Contains(w11));
@@ -1014,7 +1109,7 @@
   // Pre-handle step deletes w11. This will prevent the delegate and the post-
   // handle steps from applying.
   w11 = CreateNormalWindow(11, w1.get(), &d11);
-  w1_filter->Reset(true);
+  w1_filter.Reset(true);
   d11.Reset(w11, false);
   generator.PressLeftButton();
   EXPECT_FALSE(tracker.Contains(w11));
@@ -1124,8 +1219,8 @@
 
 // Tests whether we can repost the Tap down gesture event.
 TEST_F(WindowEventDispatcherTest, RepostTapdownGestureTest) {
-  EventFilterRecorder* filter = new EventFilterRecorder;
-  root_window()->SetEventFilter(filter);  // passes ownership
+  EventFilterRecorder recorder;
+  root_window()->AddPreTargetHandler(&recorder);
 
   test::TestWindowDelegate delegate;
   scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate(
@@ -1144,9 +1239,10 @@
   host()->dispatcher()->RepostEvent(event);
   RunAllPendingInMessageLoop();
   // TODO(rbyers): Currently disabled - crbug.com/170987
-  EXPECT_FALSE(EventTypesToString(filter->events()).find("GESTURE_TAP_DOWN") !=
+  EXPECT_FALSE(EventTypesToString(recorder.events()).find("GESTURE_TAP_DOWN") !=
               std::string::npos);
-  filter->Reset();
+  recorder.Reset();
+  root_window()->RemovePreTargetHandler(&recorder);
 }
 
 // This class inherits from the EventFilterRecorder class which provides a
@@ -1227,9 +1323,9 @@
   scoped_ptr<aura::Window> repost_source(CreateTestWindowWithDelegate(
       &delegate, 1, gfx::Rect(0, 0, 50, 50), root_window()));
 
-  RepostGestureEventRecorder* repost_event_recorder =
-      new RepostGestureEventRecorder(repost_source.get(), repost_target.get());
-  root_window()->SetEventFilter(repost_event_recorder);  // passes ownership
+  RepostGestureEventRecorder repost_event_recorder(repost_source.get(),
+                                                   repost_target.get());
+  root_window()->AddPreTargetHandler(&repost_event_recorder);
 
   // Generate a tap down gesture for the repost_source. This will be reposted
   // to repost_target.
@@ -1246,8 +1342,8 @@
   RunAllPendingInMessageLoop();
 
   int tap_down_count = 0;
-  for (size_t i = 0; i < repost_event_recorder->events().size(); ++i) {
-    if (repost_event_recorder->events()[i] == ui::ET_GESTURE_TAP_DOWN)
+  for (size_t i = 0; i < repost_event_recorder.events().size(); ++i) {
+    if (repost_event_recorder.events()[i] == ui::ET_GESTURE_TAP_DOWN)
       ++tap_down_count;
   }
 
@@ -1257,7 +1353,8 @@
   EXPECT_EQ(1, tap_down_count);
 
   EXPECT_EQ(kExpectedTargetEvents,
-            EventTypesToString(repost_event_recorder->events()));
+            EventTypesToString(repost_event_recorder.events()));
+  root_window()->RemovePreTargetHandler(&repost_event_recorder);
 }
 
 class OnMouseExitDeletingEventFilter : public EventFilterRecorder {
@@ -1291,9 +1388,8 @@
   // Create window 1 and set its event filter. Window 1 will take ownership of
   // the event filter.
   scoped_ptr<Window> w1(CreateNormalWindow(1, root_window(), NULL));
-  OnMouseExitDeletingEventFilter* w1_filter =
-      new OnMouseExitDeletingEventFilter();
-  w1->SetEventFilter(w1_filter);
+  OnMouseExitDeletingEventFilter w1_filter;
+  w1->AddPreTargetHandler(&w1_filter);
   w1->SetBounds(gfx::Rect(20, 20, 60, 60));
   EXPECT_EQ(NULL, host()->dispatcher()->mouse_moved_handler());
 
@@ -1311,7 +1407,7 @@
 
   // Set window 2 as the window that is to be deleted when a mouse-exited event
   // happens on window 1.
-  w1_filter->set_window_to_delete(w2);
+  w1_filter.set_window_to_delete(w2);
 
   // Move mosue over window 2. This should generate a mouse-exited event for
   // window 1 resulting in deletion of window 2. The original mouse-moved event
@@ -1322,7 +1418,7 @@
 
   // Check events received by window 1.
   EXPECT_EQ("MOUSE_ENTERED MOUSE_MOVED MOUSE_EXITED",
-            EventTypesToString(w1_filter->events()));
+            EventTypesToString(w1_filter.events()));
 }
 
 namespace {
@@ -1485,8 +1581,8 @@
 }
 
 TEST_F(WindowEventDispatcherTest, WindowHideCancelsActiveTouches) {
-  EventFilterRecorder* filter = new EventFilterRecorder;
-  root_window()->SetEventFilter(filter);  // passes ownership
+  EventFilterRecorder recorder;
+  root_window()->AddPreTargetHandler(&recorder);
 
   test::TestWindowDelegate delegate;
   scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate(
@@ -1497,17 +1593,18 @@
   DispatchEventUsingWindowDispatcher(&press);
 
   EXPECT_EQ("TOUCH_PRESSED GESTURE_BEGIN GESTURE_TAP_DOWN",
-            EventTypesToString(filter->GetAndResetEvents()));
+            EventTypesToString(recorder.GetAndResetEvents()));
 
   window->Hide();
 
   EXPECT_EQ("TOUCH_CANCELLED GESTURE_TAP_CANCEL GESTURE_END",
-            EventTypesToString(filter->events()));
+            EventTypesToString(recorder.events()));
+  root_window()->RemovePreTargetHandler(&recorder);
 }
 
 TEST_F(WindowEventDispatcherTest, WindowHideCancelsActiveGestures) {
-  EventFilterRecorder* filter = new EventFilterRecorder;
-  root_window()->SetEventFilter(filter);  // passes ownership
+  EventFilterRecorder recorder;
+  root_window()->AddPreTargetHandler(&recorder);
 
   test::TestWindowDelegate delegate;
   scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate(
@@ -1527,29 +1624,30 @@
   EXPECT_EQ("TOUCH_PRESSED GESTURE_BEGIN GESTURE_TAP_DOWN TOUCH_MOVED "
             "GESTURE_TAP_CANCEL GESTURE_SCROLL_BEGIN GESTURE_SCROLL_UPDATE "
             "TOUCH_PRESSED GESTURE_BEGIN GESTURE_PINCH_BEGIN",
-            EventTypesToString(filter->GetAndResetEvents()));
+            EventTypesToString(recorder.GetAndResetEvents()));
 
   window->Hide();
 
   EXPECT_EQ("TOUCH_CANCELLED GESTURE_PINCH_END GESTURE_END TOUCH_CANCELLED "
             "GESTURE_SCROLL_END GESTURE_END",
-            EventTypesToString(filter->events()));
+            EventTypesToString(recorder.events()));
+  root_window()->RemovePreTargetHandler(&recorder);
 }
 
 // Places two windows side by side. Presses down on one window, and starts a
 // scroll. Sets capture on the other window and ensures that the "ending" events
 // aren't sent to the window which gained capture.
 TEST_F(WindowEventDispatcherTest, EndingEventDoesntRetarget) {
+  EventFilterRecorder recorder1;
+  EventFilterRecorder recorder2;
   scoped_ptr<Window> window1(CreateNormalWindow(1, root_window(), NULL));
   window1->SetBounds(gfx::Rect(0, 0, 40, 40));
 
   scoped_ptr<Window> window2(CreateNormalWindow(2, root_window(), NULL));
   window2->SetBounds(gfx::Rect(40, 0, 40, 40));
 
-  EventFilterRecorder* filter1 = new EventFilterRecorder();
-  window1->SetEventFilter(filter1);  // passes ownership
-  EventFilterRecorder* filter2 = new EventFilterRecorder();
-  window2->SetEventFilter(filter2);  // passes ownership
+  window1->AddPreTargetHandler(&recorder1);
+  window2->AddPreTargetHandler(&recorder2);
 
   gfx::Point position = window1->bounds().origin();
   ui::TouchEvent press(ui::ET_TOUCH_PRESSED, position, 0, base::TimeDelta());
@@ -1564,9 +1662,9 @@
   EXPECT_EQ("TOUCH_PRESSED GESTURE_BEGIN GESTURE_TAP_DOWN TOUCH_MOVED "
             "GESTURE_TAP_CANCEL GESTURE_SCROLL_BEGIN GESTURE_SCROLL_UPDATE "
             "TOUCH_CANCELLED GESTURE_SCROLL_END GESTURE_END",
-            EventTypesToString(filter1->events()));
+            EventTypesToString(recorder1.events()));
 
-  EXPECT_TRUE(filter2->events().empty());
+  EXPECT_TRUE(recorder2.events().empty());
 }
 
 namespace {
@@ -1763,10 +1861,10 @@
 }
 
 TEST_F(WindowEventDispatcherTestInHighDPI, TouchMovesHeldOnScroll) {
-  EventFilterRecorder* filter = new EventFilterRecorder;
-  root_window()->SetEventFilter(filter);
+  EventFilterRecorder recorder;
+  root_window()->AddPreTargetHandler(&recorder);
   test::TestWindowDelegate delegate;
-  HoldPointerOnScrollHandler handler(host()->dispatcher(), filter);
+  HoldPointerOnScrollHandler handler(host()->dispatcher(), &recorder);
   scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate(
       &delegate, 1, gfx::Rect(50, 50, 100, 100), root_window()));
   window->AddPreTargetHandler(&handler);
@@ -1781,14 +1879,14 @@
   // touch-release), the held touch-move event will have been dispatched first,
   // along with the subsequent events (i.e. touch-release, scroll-end, and
   // gesture-end).
-  const EventFilterRecorder::Events& events = filter->events();
+  const EventFilterRecorder::Events& events = recorder.events();
   EXPECT_EQ("TOUCH_MOVED TOUCH_RELEASED GESTURE_SCROLL_END GESTURE_END",
             EventTypesToString(events));
-  ASSERT_EQ(2u, filter->touch_locations().size());
+  ASSERT_EQ(2u, recorder.touch_locations().size());
   EXPECT_EQ(gfx::Point(-40, 10).ToString(),
-            filter->touch_locations()[0].ToString());
+            recorder.touch_locations()[0].ToString());
   EXPECT_EQ(gfx::Point(-40, 10).ToString(),
-            filter->touch_locations()[1].ToString());
+            recorder.touch_locations()[1].ToString());
 }
 
 class SelfDestructDelegate : public test::TestWindowDelegate {
diff --git a/ui/aura/window_tree_host.cc b/ui/aura/window_tree_host.cc
index a88d9a0..8b1ad4e 100644
--- a/ui/aura/window_tree_host.cc
+++ b/ui/aura/window_tree_host.cc
@@ -109,7 +109,7 @@
 void WindowTreeHost::UpdateRootWindowSize(const gfx::Size& host_size) {
   gfx::Rect bounds(host_size);
   gfx::RectF new_bounds(ui::ConvertRectToDIP(window()->layer(), bounds));
-  GetRootTransform().TransformRect(&new_bounds);
+  window()->layer()->transform().TransformRect(&new_bounds);
   window()->SetBounds(gfx::Rect(gfx::ToFlooredSize(new_bounds.size())));
 }
 
diff --git a/ui/aura/window_tree_host_x11.cc b/ui/aura/window_tree_host_x11.cc
index 22b0bfe..6fa75e7 100644
--- a/ui/aura/window_tree_host_x11.cc
+++ b/ui/aura/window_tree_host_x11.cc
@@ -298,6 +298,7 @@
                    False,
                    SubstructureRedirectMask | SubstructureNotifyMask,
                    &reply_event);
+        XFlush(xdisplay_);
       }
       break;
     }
@@ -488,6 +489,7 @@
       break;
   }
   XSendEvent(xdisplay_, xwindow_, False, 0, &xevent);
+  XFlush(xdisplay_);
 }
 
 void WindowTreeHostX11::OnDeviceScaleFactorChanged(
diff --git a/ui/aura/window_unittest.cc b/ui/aura/window_unittest.cc
index be2257c..bdd4f73 100644
--- a/ui/aura/window_unittest.cc
+++ b/ui/aura/window_unittest.cc
@@ -1947,8 +1947,8 @@
   scoped_ptr<Window> w(
       CreateTestWindow(SK_ColorWHITE, 1, gfx::Rect(0, 0, 100, 100),
                        root_window()));
-  scoped_ptr<ui::Layer>acquired_layer(w->AcquireLayer());
-  scoped_ptr<ui::Layer>doubly_acquired_layer(w->RecreateLayer());
+  scoped_ptr<ui::Layer> acquired_layer(w->AcquireLayer());
+  scoped_ptr<ui::Layer> doubly_acquired_layer(w->RecreateLayer());
   EXPECT_EQ(NULL, doubly_acquired_layer.get());
 
   // Destroy window before layer gets destroyed.
@@ -2206,6 +2206,57 @@
   EXPECT_EQ(2, observer.removed_count());
 }
 
+class BoundsChangedWindowObserver : public WindowObserver {
+ public:
+  BoundsChangedWindowObserver() : root_set_(false) {}
+
+  virtual void OnWindowBoundsChanged(Window* window,
+                                     const gfx::Rect& old_bounds,
+                                     const gfx::Rect& new_bounds) OVERRIDE {
+    root_set_ = window->GetRootWindow() != NULL;
+  }
+
+  bool root_set() const { return root_set_; }
+
+ private:
+  bool root_set_;
+
+  DISALLOW_COPY_AND_ASSIGN(BoundsChangedWindowObserver);
+};
+
+TEST_F(WindowTest, RootWindowSetWhenReparenting) {
+  Window parent1(NULL);
+  parent1.Init(aura::WINDOW_LAYER_NOT_DRAWN);
+  Window parent2(NULL);
+  parent2.Init(aura::WINDOW_LAYER_NOT_DRAWN);
+  ParentWindow(&parent1);
+  ParentWindow(&parent2);
+  parent1.SetBounds(gfx::Rect(10, 10, 300, 300));
+  parent2.SetBounds(gfx::Rect(20, 20, 300, 300));
+
+  Window child(NULL);
+  child.Init(aura::WINDOW_LAYER_NOT_DRAWN);
+  child.SetBounds(gfx::Rect(5, 5, 100, 100));
+  parent1.AddChild(&child);
+
+  // We need animations to start in order to observe the bounds changes.
+  ui::ScopedAnimationDurationScaleMode animation_duration_mode(
+      ui::ScopedAnimationDurationScaleMode::NORMAL_DURATION);
+  ui::ScopedLayerAnimationSettings settings1(child.layer()->GetAnimator());
+  settings1.SetTransitionDuration(base::TimeDelta::FromMilliseconds(100));
+  child.SetBounds(gfx::Rect(35, 35, 100, 100));
+
+  BoundsChangedWindowObserver observer;
+  child.AddObserver(&observer);
+
+  // Reparenting the |child| will cause it to get moved. During this move
+  // the window should still have root window set.
+  parent2.AddChild(&child);
+  EXPECT_TRUE(observer.root_set());
+
+  // TODO(varkha): Check that the target bounds didn't change after reparenting.
+}
+
 TEST_F(WindowTest, OwnedByParentFalse) {
   // By default, a window is owned by its parent. If this is set to false, the
   // window will not be destroyed when its parent is.
diff --git a/ui/base/android/view_android.cc b/ui/base/android/view_android.cc
index ffb510f..30e4316 100644
--- a/ui/base/android/view_android.cc
+++ b/ui/base/android/view_android.cc
@@ -5,7 +5,7 @@
 #include "ui/base/android/view_android.h"
 
 #include "base/android/jni_android.h"
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/android/scoped_java_ref.h"
 #include "jni/ViewAndroid_jni.h"
 #include "ui/base/android/window_android.h"
diff --git a/ui/base/android/view_android.h b/ui/base/android/view_android.h
index fbaabc7..0205fdf 100644
--- a/ui/base/android/view_android.h
+++ b/ui/base/android/view_android.h
@@ -6,7 +6,7 @@
 #define UI_BASE_ANDROID_VIEW_ANDROID_H_
 
 #include <jni.h>
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/android/scoped_java_ref.h"
 #include "ui/base/ui_base_export.h"
 
diff --git a/ui/base/android/window_android.cc b/ui/base/android/window_android.cc
index 75389c9..b7a7e13 100644
--- a/ui/base/android/window_android.cc
+++ b/ui/base/android/window_android.cc
@@ -6,7 +6,7 @@
 
 #include "base/android/jni_android.h"
 #include "base/android/jni_array.h"
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/android/scoped_java_ref.h"
 #include "jni/WindowAndroid_jni.h"
 #include "ui/base/android/window_android_compositor.h"
diff --git a/ui/base/android/window_android.h b/ui/base/android/window_android.h
index 2563679..842bc4c 100644
--- a/ui/base/android/window_android.h
+++ b/ui/base/android/window_android.h
@@ -7,7 +7,7 @@
 
 #include <jni.h>
 #include <vector>
-#include "base/android/jni_helper.h"
+#include "base/android/jni_weak_ref.h"
 #include "base/android/scoped_java_ref.h"
 #include "base/observer_list.h"
 #include "ui/base/ui_base_export.h"
diff --git a/ui/base/cursor/cursor_loader.h b/ui/base/cursor/cursor_loader.h
index 8526e29..d4a0c3d 100644
--- a/ui/base/cursor/cursor_loader.h
+++ b/ui/base/cursor/cursor_loader.h
@@ -16,17 +16,15 @@
 
 class UI_BASE_EXPORT CursorLoader {
  public:
-  CursorLoader() : scale_(1.f) {}
+  CursorLoader() : scale_(1.f), rotation_(gfx::Display::ROTATE_0) {}
   virtual ~CursorLoader() {}
 
-  // Returns the display the loader loads images for.
-  const gfx::Display& display() const {
-    return display_;
+  gfx::Display::Rotation rotation() const {
+    return rotation_;
   }
 
-  // Sets the display the loader loads images for.
-  void set_display(const gfx::Display& display) {
-    display_ = display;
+  void set_rotation(gfx::Display::Rotation rotation) {
+    rotation_ = rotation;
   }
 
   // Returns the current scale of the mouse cursor icon.
@@ -64,12 +62,12 @@
   static CursorLoader* Create();
 
  private:
-  // The display the loader loads images for.
-  gfx::Display display_;
-
   // The current scale of the mouse cursor icon.
   float scale_;
 
+  // The current rotation of the mouse cursor icon.
+  gfx::Display::Rotation rotation_;
+
   DISALLOW_COPY_AND_ASSIGN(CursorLoader);
 };
 
diff --git a/ui/base/cursor/cursor_loader_ozone.cc b/ui/base/cursor/cursor_loader_ozone.cc
index 19dddf5..b56648f 100644
--- a/ui/base/cursor/cursor_loader_ozone.cc
+++ b/ui/base/cursor/cursor_loader_ozone.cc
@@ -21,7 +21,7 @@
   const gfx::ImageSkia* image =
       ResourceBundle::GetSharedInstance().GetImageSkiaNamed(resource_id);
   const gfx::ImageSkiaRep& image_rep =
-      image->GetRepresentation(display().device_scale_factor());
+      image->GetRepresentation(scale());
   SkBitmap bitmap = image_rep.sk_bitmap();
   cursors_[id] =
       CursorFactoryOzone::GetInstance()->CreateImageCursor(bitmap, hot);
diff --git a/ui/base/cursor/cursor_loader_x11.cc b/ui/base/cursor/cursor_loader_x11.cc
index 0161da2..9c2f609 100644
--- a/ui/base/cursor/cursor_loader_x11.cc
+++ b/ui/base/cursor/cursor_loader_x11.cc
@@ -159,12 +159,11 @@
                                       const gfx::Point& hot) {
   const gfx::ImageSkia* image =
       ResourceBundle::GetSharedInstance().GetImageSkiaNamed(resource_id);
-  const gfx::ImageSkiaRep& image_rep = image->GetRepresentation(
-      display().device_scale_factor());
+  const gfx::ImageSkiaRep& image_rep = image->GetRepresentation(scale());
   SkBitmap bitmap = image_rep.sk_bitmap();
   gfx::Point hotpoint = hot;
   ScaleAndRotateCursorBitmapAndHotpoint(
-      scale(), display().rotation(), &bitmap, &hotpoint);
+      scale(), rotation(), &bitmap, &hotpoint);
 
   XcursorImage* x_image = SkBitmapToXcursorImage(&bitmap, hotpoint);
   cursors_[id] = CreateReffedCustomXCursor(x_image);
@@ -177,8 +176,7 @@
                                          int frame_delay_ms) {
   const gfx::ImageSkia* image =
       ResourceBundle::GetSharedInstance().GetImageSkiaNamed(resource_id);
-  const gfx::ImageSkiaRep& image_rep = image->GetRepresentation(
-      display().device_scale_factor());
+  const gfx::ImageSkiaRep& image_rep = image->GetRepresentation(scale());
   SkBitmap bitmap = image_rep.sk_bitmap();
   int frame_width = bitmap.height();
   int frame_height = frame_width;
@@ -233,8 +231,7 @@
     xcursor =  invisible_cursor_.get();
   else if (*cursor == kCursorCustom)
     xcursor = cursor->platform();
-  else if (display().device_scale_factor() == 1.0f &&
-           display().rotation() == gfx::Display::ROTATE_0) {
+  else if (scale() == 1.0f && rotation() == gfx::Display::ROTATE_0) {
     xcursor = GetXCursor(CursorShapeFromNative(*cursor));
   } else {
     xcursor = ImageCursorFromNative(kCursorPointer);
diff --git a/ui/base/dragdrop/os_exchange_data_provider_aurax11.h b/ui/base/dragdrop/os_exchange_data_provider_aurax11.h
index 54ca445..702cc7e 100644
--- a/ui/base/dragdrop/os_exchange_data_provider_aurax11.h
+++ b/ui/base/dragdrop/os_exchange_data_provider_aurax11.h
@@ -13,7 +13,6 @@
 #include <map>
 
 #include "base/files/file_path.h"
-#include "base/message_loop/message_pump_dispatcher.h"
 #include "base/pickle.h"
 #include "ui/base/dragdrop/os_exchange_data.h"
 #include "ui/base/x/selection_owner.h"
diff --git a/ui/base/dragdrop/os_exchange_data_provider_win.cc b/ui/base/dragdrop/os_exchange_data_provider_win.cc
index afc7ddb..ab06c32 100644
--- a/ui/base/dragdrop/os_exchange_data_provider_win.cc
+++ b/ui/base/dragdrop/os_exchange_data_provider_win.cc
@@ -64,7 +64,7 @@
 // some sort of sequential data (why not just use an array?). See comments
 // throughout.
 //
-class FormatEtcEnumerator : public IEnumFORMATETC {
+class FormatEtcEnumerator FINAL : public IEnumFORMATETC {
  public:
   FormatEtcEnumerator(DataObjectImpl::StoredData::const_iterator begin,
                       DataObjectImpl::StoredData::const_iterator end);
@@ -897,7 +897,7 @@
 static STGMEDIUM* GetStorageForString(const std::basic_string<T>& data) {
   return GetStorageForBytes(
       data.c_str(),
-      (data.size() + 1) * sizeof(std::basic_string<T>::value_type));
+      (data.size() + 1) * sizeof(typename std::basic_string<T>::value_type));
 }
 
 static void GetInternetShortcutFileContents(const GURL& url,
diff --git a/ui/base/gtk/OWNERS b/ui/base/gtk/OWNERS
deleted file mode 100644
index 0573e6b..0000000
--- a/ui/base/gtk/OWNERS
+++ /dev/null
@@ -1,2 +0,0 @@
-erg@chromium.org
-estade@chromium.org
diff --git a/ui/base/gtk/gtk_signal.h b/ui/base/gtk/gtk_signal.h
deleted file mode 100644
index ca6fa23..0000000
--- a/ui/base/gtk/gtk_signal.h
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright (c) 2011 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 UI_BASE_GTK_GTK_SIGNAL_H_
-#define UI_BASE_GTK_GTK_SIGNAL_H_
-
-#include "ui/base/glib/glib_signal.h"
-
-typedef struct _GtkWidget GtkWidget;
-
-// These macros handle the common case where the sender object will be a
-// GtkWidget*.
-#define CHROMEGTK_CALLBACK_0(CLASS, RETURN, METHOD) \
-  CHROMEG_CALLBACK_0(CLASS, RETURN, METHOD, GtkWidget*);
-
-#define CHROMEGTK_CALLBACK_1(CLASS, RETURN, METHOD, ARG1) \
-  CHROMEG_CALLBACK_1(CLASS, RETURN, METHOD, GtkWidget*, ARG1);
-
-#define CHROMEGTK_CALLBACK_2(CLASS, RETURN, METHOD, ARG1, ARG2) \
-  CHROMEG_CALLBACK_2(CLASS, RETURN, METHOD, GtkWidget*, ARG1, ARG2);
-
-#define CHROMEGTK_CALLBACK_3(CLASS, RETURN, METHOD, ARG1, ARG2, ARG3) \
-  CHROMEG_CALLBACK_3(CLASS, RETURN, METHOD, GtkWidget*, ARG1, ARG2, ARG3);
-
-#define CHROMEGTK_CALLBACK_4(CLASS, RETURN, METHOD, ARG1, ARG2, ARG3, ARG4) \
-  CHROMEG_CALLBACK_4(CLASS, RETURN, METHOD, GtkWidget*, ARG1, ARG2, ARG3,   \
-                     ARG4);
-
-#define CHROMEGTK_CALLBACK_5(CLASS, RETURN, METHOD, ARG1, ARG2, ARG3, ARG4, \
-                             ARG5)                                          \
-  CHROMEG_CALLBACK_5(CLASS, RETURN, METHOD, GtkWidget*, ARG1, ARG2, ARG3,   \
-                     ARG4, ARG5);
-
-#define CHROMEGTK_CALLBACK_6(CLASS, RETURN, METHOD, ARG1, ARG2, ARG3, ARG4, \
-                             ARG5, ARG6)                                    \
-  CHROMEG_CALLBACK_6(CLASS, RETURN, METHOD, GtkWidget*, ARG1, ARG2, ARG3,   \
-                     ARG4, ARG5, ARG6);
-
-#define CHROMEGTK_VIRTUAL_CALLBACK_0(CLASS, RETURN, METHOD) \
-  CHROMEG_VIRTUAL_CALLBACK_0(CLASS, RETURN, METHOD, GtkWidget*);
-
-#define CHROMEGTK_VIRTUAL_CALLBACK_1(CLASS, RETURN, METHOD, ARG1) \
-  CHROMEG_VIRTUAL_CALLBACK_1(CLASS, RETURN, METHOD, GtkWidget*, ARG1);
-
-#define CHROMEGTK_VIRTUAL_CALLBACK_2(CLASS, RETURN, METHOD, ARG1, ARG2) \
-  CHROMEG_VIRTUAL_CALLBACK_2(CLASS, RETURN, METHOD, GtkWidget*, ARG1, ARG2);
-
-#define CHROMEGTK_VIRTUAL_CALLBACK_3(CLASS, RETURN, METHOD, ARG1, ARG2, ARG3) \
-  CHROMEG_VIRTUAL_CALLBACK_3(CLASS, RETURN, METHOD, GtkWidget*, ARG1, ARG2,   \
-                             ARG3);
-
-#define CHROMEGTK_VIRTUAL_CALLBACK_4(CLASS, RETURN, METHOD, ARG1, ARG2, ARG3, \
-                                     ARG4) \
-  CHROMEG_VIRTUAL_CALLBACK_4(CLASS, RETURN, METHOD, GtkWidget*, ARG1, ARG2,   \
-                             ARG3, ARG4);
-
-#define CHROMEGTK_VIRTUAL_CALLBACK_5(CLASS, RETURN, METHOD, ARG1, ARG2, ARG3, \
-                                     ARG4, ARG5)                              \
-  CHROMEG_VIRTUAL_CALLBACK_5(CLASS, RETURN, METHOD, GtkWidget*, ARG1, ARG2,   \
-                             ARG3, ARG4, ARG5);
-
-#define CHROMEGTK_VIRTUAL_CALLBACK_6(CLASS, RETURN, METHOD, ARG1, ARG2, ARG3, \
-                                     ARG4, ARG5, ARG6)                        \
-  CHROMEG_VIRTUAL_CALLBACK_6(CLASS, RETURN, METHOD, GtkWidget*, ARG1, ARG2,   \
-                             ARG3, ARG4, ARG5, ARG6);
-
-#endif  // UI_BASE_GTK_GTK_SIGNAL_H_
diff --git a/ui/base/gtk/gtk_signal_registrar.cc b/ui/base/gtk/gtk_signal_registrar.cc
deleted file mode 100644
index 82527e8..0000000
--- a/ui/base/gtk/gtk_signal_registrar.cc
+++ /dev/null
@@ -1,98 +0,0 @@
-// Copyright (c) 2011 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 "ui/base/gtk/gtk_signal_registrar.h"
-
-#include <glib-object.h>
-
-#include "base/logging.h"
-#include "ui/base/gtk/g_object_destructor_filo.h"
-
-namespace ui {
-
-GtkSignalRegistrar::GtkSignalRegistrar() {
-}
-
-GtkSignalRegistrar::~GtkSignalRegistrar() {
-  for (HandlerMap::iterator list_iter = handler_lists_.begin();
-       list_iter != handler_lists_.end(); ++list_iter) {
-    GObject* object = list_iter->first;
-    GObjectDestructorFILO::GetInstance()->Disconnect(
-        object, WeakNotifyThunk, this);
-
-    HandlerList& handlers = list_iter->second;
-    for (HandlerList::iterator ids_iter = handlers.begin();
-         ids_iter != handlers.end(); ++ids_iter) {
-      g_signal_handler_disconnect(object, *ids_iter);
-    }
-  }
-}
-
-glong GtkSignalRegistrar::Connect(gpointer instance,
-                                  const gchar* detailed_signal,
-                                  GCallback signal_handler,
-                                  gpointer data) {
-  return ConnectInternal(instance, detailed_signal, signal_handler, data,
-                         false);
-}
-
-glong GtkSignalRegistrar::ConnectAfter(gpointer instance,
-                                       const gchar* detailed_signal,
-                                       GCallback signal_handler,
-                                       gpointer data) {
-  return ConnectInternal(instance, detailed_signal, signal_handler, data, true);
-}
-
-glong GtkSignalRegistrar::ConnectInternal(gpointer instance,
-                                          const gchar* detailed_signal,
-                                          GCallback signal_handler,
-                                          gpointer data,
-                                          bool after) {
-  GObject* object = G_OBJECT(instance);
-
-  HandlerMap::iterator iter = handler_lists_.find(object);
-  if (iter == handler_lists_.end()) {
-    GObjectDestructorFILO::GetInstance()->Connect(
-        object, WeakNotifyThunk, this);
-    handler_lists_[object] = HandlerList();
-    iter = handler_lists_.find(object);
-  }
-
-  glong handler_id = after ?
-      g_signal_connect_after(instance, detailed_signal, signal_handler, data) :
-      g_signal_connect(instance, detailed_signal, signal_handler, data);
-  iter->second.push_back(handler_id);
-
-  return handler_id;
-}
-
-void GtkSignalRegistrar::WeakNotify(GObject* where_the_object_was) {
-  HandlerMap::iterator iter = handler_lists_.find(where_the_object_was);
-  if (iter == handler_lists_.end()) {
-    NOTREACHED();
-    return;
-  }
-  // The signal handlers will be disconnected automatically. Just erase the
-  // handler id list.
-  handler_lists_.erase(iter);
-}
-
-void GtkSignalRegistrar::DisconnectAll(gpointer instance) {
-  GObject* object = G_OBJECT(instance);
-  HandlerMap::iterator iter = handler_lists_.find(object);
-  if (iter == handler_lists_.end())
-    return;
-
-  GObjectDestructorFILO::GetInstance()->Disconnect(
-      object, WeakNotifyThunk, this);
-  HandlerList& handlers = iter->second;
-  for (HandlerList::iterator ids_iter = handlers.begin();
-       ids_iter != handlers.end(); ++ids_iter) {
-    g_signal_handler_disconnect(object, *ids_iter);
-  }
-
-  handler_lists_.erase(iter);
-}
-
-}  // namespace ui
diff --git a/ui/base/gtk/gtk_signal_registrar.h b/ui/base/gtk/gtk_signal_registrar.h
deleted file mode 100644
index 37b8710..0000000
--- a/ui/base/gtk/gtk_signal_registrar.h
+++ /dev/null
@@ -1,75 +0,0 @@
-// Copyright (c) 2011 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 UI_BASE_GTK_GTK_SIGNAL_REGISTRAR_H_
-#define UI_BASE_GTK_GTK_SIGNAL_REGISTRAR_H_
-
-#include <glib.h>
-#include <map>
-#include <vector>
-
-#include "base/basictypes.h"
-#include "ui/base/ui_base_export.h"
-
-typedef void (*GCallback) (void);
-typedef struct _GObject GObject;
-typedef struct _GtkWidget GtkWidget;
-
-namespace ui {
-
-// A class that ensures that callbacks don't run on stale owner objects. Similar
-// in spirit to NotificationRegistrar. Use as follows:
-//
-//   class ChromeObject {
-//    public:
-//     ChromeObject() {
-//       ...
-//
-//       signals_.Connect(widget, "event", CallbackThunk, this);
-//     }
-//
-//     ...
-//
-//    private:
-//     GtkSignalRegistrar signals_;
-//   };
-//
-// When |signals_| goes down, it will disconnect the handlers connected via
-// Connect.
-class UI_BASE_EXPORT GtkSignalRegistrar {
- public:
-  GtkSignalRegistrar();
-  ~GtkSignalRegistrar();
-
-  // Connect before the default handler. Returns the handler id.
-  glong Connect(gpointer instance, const gchar* detailed_signal,
-                GCallback signal_handler, gpointer data);
-  // Connect after the default handler. Returns the handler id.
-  glong ConnectAfter(gpointer instance, const gchar* detailed_signal,
-                     GCallback signal_handler, gpointer data);
-
-  // Disconnects all signal handlers connected to |instance|.
-  void DisconnectAll(gpointer instance);
-
- private:
-  typedef std::vector<glong> HandlerList;
-  typedef std::map<GObject*, HandlerList> HandlerMap;
-
-  static void WeakNotifyThunk(gpointer data, GObject* where_the_object_was) {
-    reinterpret_cast<GtkSignalRegistrar*>(data)->WeakNotify(
-        where_the_object_was);
-  }
-  void WeakNotify(GObject* where_the_object_was);
-
-  glong ConnectInternal(gpointer instance, const gchar* detailed_signal,
-                        GCallback signal_handler, gpointer data, bool after);
-
-  HandlerMap handler_lists_;
-
-  DISALLOW_COPY_AND_ASSIGN(GtkSignalRegistrar);
-};
-
-}  // namespace ui
-
-#endif  // UI_BASE_GTK_GTK_SIGNAL_REGISTRAR_H_
diff --git a/ui/base/ime/chromeos/ime_bridge.cc b/ui/base/ime/chromeos/ime_bridge.cc
index 6d07e6e..49d0f73 100644
--- a/ui/base/ime/chromeos/ime_bridge.cc
+++ b/ui/base/ime/chromeos/ime_bridge.cc
@@ -18,7 +18,8 @@
   IMEBridgeImpl()
     : input_context_handler_(NULL),
       engine_handler_(NULL),
-      candidate_window_handler_(NULL) {
+      candidate_window_handler_(NULL),
+      current_text_input_(ui::TEXT_INPUT_TYPE_NONE) {
   }
 
   virtual ~IMEBridgeImpl() {
@@ -59,10 +60,21 @@
     candidate_window_handler_ = handler;
   }
 
+  // IMEBridge override.
+  virtual void SetCurrentTextInputType(ui::TextInputType input_type) OVERRIDE {
+    current_text_input_ = input_type;
+  }
+
+  // IMEBridge override.
+  virtual ui::TextInputType GetCurrentTextInputType() const OVERRIDE {
+    return current_text_input_;
+  }
+
  private:
   IMEInputContextHandlerInterface* input_context_handler_;
   IMEEngineHandlerInterface* engine_handler_;
   IMECandidateWindowHandlerInterface* candidate_window_handler_;
+  ui::TextInputType current_text_input_;
 
   DISALLOW_COPY_AND_ASSIGN(IMEBridgeImpl);
 };
diff --git a/ui/base/ime/chromeos/ime_bridge.h b/ui/base/ime/chromeos/ime_bridge.h
index 3c6ed0a..2464f3f 100644
--- a/ui/base/ime/chromeos/ime_bridge.h
+++ b/ui/base/ime/chromeos/ime_bridge.h
@@ -173,6 +173,12 @@
   virtual void SetCandidateWindowHandler(
       IMECandidateWindowHandlerInterface* handler) = 0;
 
+  // Updates current text input type.
+  virtual void SetCurrentTextInputType(ui::TextInputType input_type) = 0;
+
+  // Returns the current text input type.
+  virtual ui::TextInputType GetCurrentTextInputType() const = 0;
+
  protected:
   IMEBridge();
 
diff --git a/ui/base/ime/ime.gypi b/ui/base/ime/ime.gypi
index 7732946..f3b08bb 100644
--- a/ui/base/ime/ime.gypi
+++ b/ui/base/ime/ime.gypi
@@ -114,5 +114,10 @@
         'chromeos/character_composer.h',
       ],
     }],
+    ['OS=="android"', {
+      'dependencies!' : [
+        '<(DEPTH)/ui/events/events.gyp:events',
+      ],
+    }]
   ],
 }
diff --git a/ui/base/ime/input_method_chromeos.cc b/ui/base/ime/input_method_chromeos.cc
index bd5666e..5e1f2ec 100644
--- a/ui/base/ime/input_method_chromeos.cc
+++ b/ui/base/ime/input_method_chromeos.cc
@@ -292,11 +292,12 @@
   if (candidate_window)
     candidate_window->FocusStateChanged(IsInputFieldFocused());
 
+  const TextInputType current_text_input_type = GetTextInputType();
+  chromeos::IMEBridge::Get()->SetCurrentTextInputType(current_text_input_type);
+
   if (!GetEngine())
     return;
 
-  const TextInputType current_text_input_type = GetTextInputType();
-
   // When focus is not changed, a text input type change causes a focus
   // blink. The focus in to or out from password field should also notify
   // engine.
diff --git a/ui/base/ime/win/tsf_input_scope.cc b/ui/base/ime/win/tsf_input_scope.cc
index ccfda53..f40f928 100644
--- a/ui/base/ime/win/tsf_input_scope.cc
+++ b/ui/base/ime/win/tsf_input_scope.cc
@@ -29,7 +29,7 @@
   input_scopes->push_back(input_scope);
 }
 
-class TSFInputScope : public ITfInputScope {
+class TSFInputScope FINAL : public ITfInputScope {
  public:
   explicit TSFInputScope(const std::vector<InputScope>& input_scopes)
       : input_scopes_(input_scopes),
diff --git a/ui/base/l10n/formatter.cc b/ui/base/l10n/formatter.cc
index 2131ff2..14f49ae 100644
--- a/ui/base/l10n/formatter.cc
+++ b/ui/base/l10n/formatter.cc
@@ -23,28 +23,28 @@
 };
 
 static const Pluralities IDS_ELAPSED_SHORT_SEC = {
-  { IDS_TIME_ELAPSED_SECS_DEFAULT, IDS_TIME_ELAPSED_SEC_SINGULAR,
+  { IDS_TIME_ELAPSED_SECS_DEFAULT, IDS_TIME_ELAPSED_SECS_SINGULAR,
     IDS_TIME_ELAPSED_SECS_ZERO, IDS_TIME_ELAPSED_SECS_TWO,
     IDS_TIME_ELAPSED_SECS_FEW, IDS_TIME_ELAPSED_SECS_MANY },
   "one{# sec ago}",
   " other{# secs ago}"
 };
 static const Pluralities IDS_ELAPSED_SHORT_MIN = {
-  { IDS_TIME_ELAPSED_MINS_DEFAULT, IDS_TIME_ELAPSED_MIN_SINGULAR,
+  { IDS_TIME_ELAPSED_MINS_DEFAULT, IDS_TIME_ELAPSED_MINS_SINGULAR,
     IDS_TIME_ELAPSED_MINS_ZERO, IDS_TIME_ELAPSED_MINS_TWO,
     IDS_TIME_ELAPSED_MINS_FEW, IDS_TIME_ELAPSED_MINS_MANY },
   "one{# min ago}",
   " other{# mins ago}"
 };
 static const Pluralities IDS_ELAPSED_HOUR = {
-  { IDS_TIME_ELAPSED_HOURS_DEFAULT, IDS_TIME_ELAPSED_HOUR_SINGULAR,
+  { IDS_TIME_ELAPSED_HOURS_DEFAULT, IDS_TIME_ELAPSED_HOURS_SINGULAR,
     IDS_TIME_ELAPSED_HOURS_ZERO, IDS_TIME_ELAPSED_HOURS_TWO,
     IDS_TIME_ELAPSED_HOURS_FEW, IDS_TIME_ELAPSED_HOURS_MANY },
   "one{# hour ago}",
   " other{# hours ago}"
 };
 static const Pluralities IDS_ELAPSED_DAY = {
-  { IDS_TIME_ELAPSED_DAYS_DEFAULT, IDS_TIME_ELAPSED_DAY_SINGULAR,
+  { IDS_TIME_ELAPSED_DAYS_DEFAULT, IDS_TIME_ELAPSED_DAYS_SINGULAR,
     IDS_TIME_ELAPSED_DAYS_ZERO, IDS_TIME_ELAPSED_DAYS_TWO,
     IDS_TIME_ELAPSED_DAYS_FEW, IDS_TIME_ELAPSED_DAYS_MANY },
   "one{# day ago}",
@@ -52,14 +52,14 @@
 };
 
 static const Pluralities IDS_REMAINING_SHORT_SEC = {
-  { IDS_TIME_REMAINING_SECS_DEFAULT, IDS_TIME_REMAINING_SEC_SINGULAR,
+  { IDS_TIME_REMAINING_SECS_DEFAULT, IDS_TIME_REMAINING_SECS_SINGULAR,
     IDS_TIME_REMAINING_SECS_ZERO, IDS_TIME_REMAINING_SECS_TWO,
     IDS_TIME_REMAINING_SECS_FEW, IDS_TIME_REMAINING_SECS_MANY },
   "one{# sec left}",
   " other{# secs left}"
 };
 static const Pluralities IDS_REMAINING_SHORT_MIN = {
-  { IDS_TIME_REMAINING_MINS_DEFAULT, IDS_TIME_REMAINING_MIN_SINGULAR,
+  { IDS_TIME_REMAINING_MINS_DEFAULT, IDS_TIME_REMAINING_MINS_SINGULAR,
     IDS_TIME_REMAINING_MINS_ZERO, IDS_TIME_REMAINING_MINS_TWO,
     IDS_TIME_REMAINING_MINS_FEW, IDS_TIME_REMAINING_MINS_MANY },
   "one{# min left}",
@@ -67,28 +67,28 @@
 };
 
 static const Pluralities IDS_REMAINING_LONG_SEC = {
-  { IDS_TIME_REMAINING_LONG_SECS_DEFAULT, IDS_TIME_REMAINING_LONG_SEC_SINGULAR,
+  { IDS_TIME_REMAINING_LONG_SECS_DEFAULT, IDS_TIME_REMAINING_LONG_SECS_SINGULAR,
     IDS_TIME_REMAINING_LONG_SECS_ZERO, IDS_TIME_REMAINING_LONG_SECS_TWO,
     IDS_TIME_REMAINING_LONG_SECS_FEW, IDS_TIME_REMAINING_LONG_SECS_MANY },
   "one{# second left}",
   " other{# seconds left}"
 };
 static const Pluralities IDS_REMAINING_LONG_MIN = {
-  { IDS_TIME_REMAINING_LONG_MINS_DEFAULT, IDS_TIME_REMAINING_LONG_MIN_SINGULAR,
+  { IDS_TIME_REMAINING_LONG_MINS_DEFAULT, IDS_TIME_REMAINING_LONG_MINS_SINGULAR,
     IDS_TIME_REMAINING_LONG_MINS_ZERO, IDS_TIME_REMAINING_LONG_MINS_TWO,
     IDS_TIME_REMAINING_LONG_MINS_FEW, IDS_TIME_REMAINING_LONG_MINS_MANY },
   "one{# minute left}",
   " other{# minutes left}"
 };
 static const Pluralities IDS_REMAINING_HOUR = {
-  { IDS_TIME_REMAINING_HOURS_DEFAULT, IDS_TIME_REMAINING_HOUR_SINGULAR,
+  { IDS_TIME_REMAINING_HOURS_DEFAULT, IDS_TIME_REMAINING_HOURS_SINGULAR,
     IDS_TIME_REMAINING_HOURS_ZERO, IDS_TIME_REMAINING_HOURS_TWO,
     IDS_TIME_REMAINING_HOURS_FEW, IDS_TIME_REMAINING_HOURS_MANY },
   "one{# hour left}",
   " other{# hours left}"
 };
 static const Pluralities IDS_REMAINING_DAY = {
-  { IDS_TIME_REMAINING_DAYS_DEFAULT, IDS_TIME_REMAINING_DAY_SINGULAR,
+  { IDS_TIME_REMAINING_DAYS_DEFAULT, IDS_TIME_REMAINING_DAYS_SINGULAR,
     IDS_TIME_REMAINING_DAYS_ZERO, IDS_TIME_REMAINING_DAYS_TWO,
     IDS_TIME_REMAINING_DAYS_FEW, IDS_TIME_REMAINING_DAYS_MANY },
   "one{# day left}",
@@ -96,82 +96,82 @@
 };
 
 static const Pluralities IDS_DURATION_SHORT_SEC = {
-  { IDS_TIME_SECS_DEFAULT, IDS_TIME_SEC_SINGULAR, IDS_TIME_SECS_ZERO,
+  { IDS_TIME_SECS_DEFAULT, IDS_TIME_SECS_SINGULAR, IDS_TIME_SECS_ZERO,
     IDS_TIME_SECS_TWO, IDS_TIME_SECS_FEW, IDS_TIME_SECS_MANY },
   "one{# sec}",
   " other{# secs}"
 };
 static const Pluralities IDS_DURATION_SHORT_MIN = {
-  { IDS_TIME_MINS_DEFAULT, IDS_TIME_MIN_SINGULAR, IDS_TIME_MINS_ZERO,
+  { IDS_TIME_MINS_DEFAULT, IDS_TIME_MINS_SINGULAR, IDS_TIME_MINS_ZERO,
     IDS_TIME_MINS_TWO, IDS_TIME_MINS_FEW, IDS_TIME_MINS_MANY },
   "one{# min}",
   " other{# mins}"
 };
 
 static const Pluralities IDS_LONG_SEC = {
-  { IDS_TIME_LONG_SECS_DEFAULT, IDS_TIME_LONG_SEC_SINGULAR,
+  { IDS_TIME_LONG_SECS_DEFAULT, IDS_TIME_LONG_SECS_SINGULAR,
     IDS_TIME_LONG_SECS_ZERO, IDS_TIME_LONG_SECS_TWO,
     IDS_TIME_LONG_SECS_FEW, IDS_TIME_LONG_SECS_MANY },
   "one{# second}",
   " other{# seconds}"
 };
 static const Pluralities IDS_LONG_MIN = {
-  { IDS_TIME_LONG_MINS_DEFAULT, IDS_TIME_LONG_MIN_SINGULAR,
+  { IDS_TIME_LONG_MINS_DEFAULT, IDS_TIME_LONG_MINS_SINGULAR,
     IDS_TIME_LONG_MINS_ZERO, IDS_TIME_LONG_MINS_TWO,
     IDS_TIME_LONG_MINS_FEW, IDS_TIME_LONG_MINS_MANY },
   "one{# minute}",
   " other{# minutes}"
 };
 static const Pluralities IDS_DURATION_HOUR = {
-  { IDS_TIME_HOURS_DEFAULT, IDS_TIME_HOUR_SINGULAR, IDS_TIME_HOURS_ZERO,
+  { IDS_TIME_HOURS_DEFAULT, IDS_TIME_HOURS_SINGULAR, IDS_TIME_HOURS_ZERO,
     IDS_TIME_HOURS_TWO, IDS_TIME_HOURS_FEW, IDS_TIME_HOURS_MANY },
   "one{# hour}",
   " other{# hours}"
 };
 static const Pluralities IDS_DURATION_DAY = {
-  { IDS_TIME_DAYS_DEFAULT, IDS_TIME_DAY_SINGULAR, IDS_TIME_DAYS_ZERO,
+  { IDS_TIME_DAYS_DEFAULT, IDS_TIME_DAYS_SINGULAR, IDS_TIME_DAYS_ZERO,
     IDS_TIME_DAYS_TWO, IDS_TIME_DAYS_FEW, IDS_TIME_DAYS_MANY },
   "one{# day}",
   " other{# days}"
 };
 
 static const Pluralities IDS_LONG_MIN_1ST = {
-  { IDS_TIME_LONG_MINS_1ST_DEFAULT, IDS_TIME_LONG_MIN_1ST_SINGULAR,
+  { IDS_TIME_LONG_MINS_1ST_DEFAULT, IDS_TIME_LONG_MINS_1ST_SINGULAR,
     IDS_TIME_LONG_MINS_1ST_ZERO, IDS_TIME_LONG_MINS_1ST_TWO,
     IDS_TIME_LONG_MINS_1ST_FEW, IDS_TIME_LONG_MINS_1ST_MANY },
   "one{# minute }",
   " other{# minutes }"
 };
 static const Pluralities IDS_LONG_SEC_2ND = {
-  { IDS_TIME_LONG_SECS_2ND_DEFAULT, IDS_TIME_LONG_SEC_2ND_SINGULAR,
+  { IDS_TIME_LONG_SECS_2ND_DEFAULT, IDS_TIME_LONG_SECS_2ND_SINGULAR,
     IDS_TIME_LONG_SECS_2ND_ZERO, IDS_TIME_LONG_SECS_2ND_TWO,
     IDS_TIME_LONG_SECS_2ND_FEW, IDS_TIME_LONG_SECS_2ND_MANY },
   "one{# second}",
   " other{# seconds}"
 };
 static const Pluralities IDS_DURATION_HOUR_1ST = {
-  { IDS_TIME_HOURS_1ST_DEFAULT, IDS_TIME_HOUR_1ST_SINGULAR,
+  { IDS_TIME_HOURS_1ST_DEFAULT, IDS_TIME_HOURS_1ST_SINGULAR,
     IDS_TIME_HOURS_1ST_ZERO, IDS_TIME_HOURS_1ST_TWO,
     IDS_TIME_HOURS_1ST_FEW, IDS_TIME_HOURS_1ST_MANY },
   "one{# hour }",
   " other{# hours }"
 };
 static const Pluralities IDS_LONG_MIN_2ND = {
-  { IDS_TIME_LONG_MINS_2ND_DEFAULT, IDS_TIME_LONG_MIN_2ND_SINGULAR,
+  { IDS_TIME_LONG_MINS_2ND_DEFAULT, IDS_TIME_LONG_MINS_2ND_SINGULAR,
     IDS_TIME_LONG_MINS_2ND_ZERO, IDS_TIME_LONG_MINS_2ND_TWO,
     IDS_TIME_LONG_MINS_2ND_FEW, IDS_TIME_LONG_MINS_2ND_MANY },
   "one{# minute}",
   " other{# minutes}"
 };
 static const Pluralities IDS_DURATION_DAY_1ST = {
-  { IDS_TIME_DAYS_1ST_DEFAULT, IDS_TIME_DAY_1ST_SINGULAR,
+  { IDS_TIME_DAYS_1ST_DEFAULT, IDS_TIME_DAYS_1ST_SINGULAR,
     IDS_TIME_DAYS_1ST_ZERO, IDS_TIME_DAYS_1ST_TWO,
     IDS_TIME_DAYS_1ST_FEW, IDS_TIME_DAYS_1ST_MANY },
   "one{# day }",
   " other{# days }"
 };
 static const Pluralities IDS_DURATION_HOUR_2ND = {
-  { IDS_TIME_HOURS_2ND_DEFAULT, IDS_TIME_HOUR_2ND_SINGULAR,
+  { IDS_TIME_HOURS_2ND_DEFAULT, IDS_TIME_HOURS_2ND_SINGULAR,
     IDS_TIME_HOURS_2ND_ZERO, IDS_TIME_HOURS_2ND_TWO,
     IDS_TIME_HOURS_2ND_FEW, IDS_TIME_HOURS_2ND_MANY },
   "one{# hour}",
diff --git a/ui/base/resource/resource_bundle.cc b/ui/base/resource/resource_bundle.cc
index daea33f..e2a9144 100644
--- a/ui/base/resource/resource_bundle.cc
+++ b/ui/base/resource/resource_bundle.cc
@@ -632,8 +632,8 @@
 void ResourceBundle::AddDataPack(DataPack* data_pack) {
   data_packs_.push_back(data_pack);
 
-  if (GetImageScale(data_pack->GetScaleFactor()) >
-      GetImageScale(max_scale_factor_))
+  if (GetScaleForScaleFactor(data_pack->GetScaleFactor()) >
+      GetScaleForScaleFactor(max_scale_factor_))
     max_scale_factor_ = data_pack->GetScaleFactor();
 }
 
diff --git a/ui/base/strings/ui_strings.grd b/ui/base/strings/ui_strings.grd
index 5012ba7..499ee19 100644
--- a/ui/base/strings/ui_strings.grd
+++ b/ui/base/strings/ui_strings.grd
@@ -219,13 +219,13 @@
       </message>
 
       <if expr="lang not in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
-      <message name="IDS_TIME_SEC_SINGULAR"
+      <message name="IDS_TIME_SECS_SINGULAR"
                desc="NUMBER_ONE is a one or one-like number: 1 (many European and most Indian languages), 1 and 0 (French, Brazilian Portuguese and Hindi), 1, 21, 31, ... (Russian, Ukrainian, Croatian, Serbian, Latvian, Lithuanian), or 1, 101, 201, ... (Slovenian). Do NOT translate this for CJK, Vietnamese, Turkish and Kannada.">
         <ph name="NUMBER_ONE"><ex>1</ex>#</ph> sec
       </message>
       </if>
       <if expr="lang in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
-      <message translateable="false" name="IDS_TIME_SEC_SINGULAR"
+      <message translateable="false" name="IDS_TIME_SECS_SINGULAR"
                desc="">
         NA
       </message>
@@ -290,13 +290,13 @@
       </message>
 
       <if expr="lang not in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
-      <message name="IDS_TIME_LONG_SEC_SINGULAR"
+      <message name="IDS_TIME_LONG_SECS_SINGULAR"
                desc="NUMBER_ONE is a one or one-like number: 1 (many European and most Indian languages), 1 and 0 (French, Brazilian Portuguese and Hindi), 1, 21, 31, ... (Russian, Ukrainian, Croatian, Serbian, Latvian, Lithuanian), or 1, 101, 201, ... (Slovenian). Do NOT translate this for CJK, Vietnamese, Turkish and Kannada.">
         <ph name="NUMBER_ONE"><ex>1</ex>#</ph> second
       </message>
       </if>
       <if expr="lang in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
-      <message translateable="false" name="IDS_TIME_LONG_SEC_SINGULAR"
+      <message translateable="false" name="IDS_TIME_LONG_SECS_SINGULAR"
                desc="">
         NA
       </message>
@@ -361,13 +361,13 @@
       </message>
 
       <if expr="lang not in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
-      <message name="IDS_TIME_LONG_SEC_2ND_SINGULAR"
+      <message name="IDS_TIME_LONG_SECS_2ND_SINGULAR"
                desc="Second part of 'xx minutes yy seconds' time format where yy (NUMBER_ONE) is a one or one-like number: 1 (many European and most Indian languages), 1 and 0 (French, Brazilian Portuguese and Hindi), 1, 21, 31, ... (Russian, Ukrainian, Croatian, Serbian, Latvian, Lithuanian), or 1, 101, 201, ... (Slovenian). Do NOT translate this for CJK, Vietnamese, Turkish and Kannada.">
         <ph name="NUMBER_ONE"><ex>1</ex>#</ph> second
       </message>
       </if>
       <if expr="lang in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
-      <message translateable="false" name="IDS_TIME_LONG_SEC_2ND_SINGULAR"
+      <message translateable="false" name="IDS_TIME_LONG_SECS_2NDS_SINGULAR"
                desc="">
         NA
       </message>
@@ -432,13 +432,13 @@
       </message>
 
       <if expr="lang not in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
-      <message name="IDS_TIME_MIN_SINGULAR"
+      <message name="IDS_TIME_MINS_SINGULAR"
                desc="NUMBER_ONE is a one or one-like number: 1 (many European and most Indian languages), 1 and 0 (French, Brazilian Portuguese and Hindi), 1, 21, 31, ... (Russian, Ukrainian, Croatian, Serbian, Latvian, Lithuanian), or 1, 101, 201, ... (Slovenian). Do NOT translate this for CJK, Vietnamese, Turkish and Kannada.">
         <ph name="NUMBER_ONE"><ex>1</ex>#</ph> min
       </message>
       </if>
       <if expr="lang in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
-      <message translateable="false" name="IDS_TIME_MIN_SINGULAR"
+      <message translateable="false" name="IDS_TIME_MINS_SINGULAR"
                desc="">
         NA
       </message>
@@ -503,13 +503,13 @@
       </message>
 
       <if expr="lang not in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
-      <message name="IDS_TIME_LONG_MIN_SINGULAR"
+      <message name="IDS_TIME_LONG_MINS_SINGULAR"
                desc="NUMBER_ONE is a one or one-like number: 1 (many European and most Indian languages), 1 and 0 (French, Brazilian Portuguese and Hindi), 1, 21, 31, ... (Russian, Ukrainian, Croatian, Serbian, Latvian, Lithuanian), or 1, 101, 201, ... (Slovenian). Do NOT translate this for CJK, Vietnamese, Turkish and Kannada.">
         <ph name="NUMBER_ONE"><ex>1</ex>#</ph> minute
       </message>
       </if>
       <if expr="lang in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
-      <message translateable="false" name="IDS_TIME_LONG_MIN_SINGULAR"
+      <message translateable="false" name="IDS_TIME_LONG_MINS_SINGULAR"
                desc="">
         NA
       </message>
@@ -574,13 +574,13 @@
       </message>
 
       <if expr="lang not in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
-      <message name="IDS_TIME_LONG_MIN_1ST_SINGULAR"
+      <message name="IDS_TIME_LONG_MINS_1ST_SINGULAR"
                desc="First part of 'xx minutes yy seconds' time format (including the space between first and second part, if the language requires a space there) where xx (NUMBER_ONE) is a one or one-like number: 1 (many European and most Indian languages), 1 and 0 (French, Brazilian Portuguese and Hindi), 1, 21, 31, ... (Russian, Ukrainian, Croatian, Serbian, Latvian, Lithuanian), or 1, 101, 201, ... (Slovenian). Do NOT translate this for CJK, Vietnamese, Turkish and Kannada.">
         <ph name="NUMBER_ONE"><ex>1</ex>#</ph> minute '''
       </message>
       </if>
       <if expr="lang in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
-      <message translateable="false" name="IDS_TIME_LONG_MIN_1ST_SINGULAR"
+      <message translateable="false" name="IDS_TIME_LONG_MINS_1ST_SINGULAR"
                desc="">
         NA
       </message>
@@ -645,13 +645,13 @@
       </message>
 
       <if expr="lang not in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
-      <message name="IDS_TIME_LONG_MIN_2ND_SINGULAR"
+      <message name="IDS_TIME_LONG_MINS_2ND_SINGULAR"
                desc="Second part of 'xx hours yy minutes' time format where yy (NUMBER_ONE) is a one or one-like number: 1 (many European and most Indian languages), 1 and 0 (French, Brazilian Portuguese and Hindi), 1, 21, 31, ... (Russian, Ukrainian, Croatian, Serbian, Latvian, Lithuanian), or 1, 101, 201, ... (Slovenian). Do NOT translate this for CJK, Vietnamese, Turkish and Kannada.">
         <ph name="NUMBER_ONE"><ex>1</ex>#</ph> minute
       </message>
       </if>
       <if expr="lang in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
-      <message translateable="false" name="IDS_TIME_LONG_MIN_2ND_SINGULAR"
+      <message translateable="false" name="IDS_TIME_LONG_MINS_2ND_SINGULAR"
                desc="">
         NA
       </message>
@@ -716,13 +716,13 @@
       </message>
 
       <if expr="lang not in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
-      <message name="IDS_TIME_HOUR_SINGULAR"
+      <message name="IDS_TIME_HOURS_SINGULAR"
                desc="NUMBER_ONE is a one or one-like number: 1 (many European and most Indian languages), 1 and 0 (French, Brazilian Portuguese and Hindi), 1, 21, 31, ... (Russian, Ukrainian, Croatian, Serbian, Latvian, Lithuanian), or 1, 101, 201, ... (Slovenian). Do NOT translate this for CJK, Vietnamese, Turkish and Kannada.">
         <ph name="NUMBER_ONE"><ex>1</ex>#</ph> hour
       </message>
       </if>
       <if expr="lang in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
-      <message translateable="false" name="IDS_TIME_HOUR_SINGULAR"
+      <message translateable="false" name="IDS_TIME_HOURS_SINGULAR"
                desc="">
         NA
       </message>
@@ -787,13 +787,13 @@
       </message>
 
       <if expr="lang not in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
-      <message name="IDS_TIME_HOUR_1ST_SINGULAR"
+      <message name="IDS_TIME_HOURS_1ST_SINGULAR"
                desc="First part of 'xx hours yy minutes' time format (including the space between first and second part, if the language requires a space there) where xx (NUMBER_ONE) is a one or one-like number: 1 (many European and most Indian languages), 1 and 0 (French, Brazilian Portuguese and Hindi), 1, 21, 31, ... (Russian, Ukrainian, Croatian, Serbian, Latvian, Lithuanian), or 1, 101, 201, ... (Slovenian). Do NOT translate this for CJK, Vietnamese, Turkish and Kannada.">
         <ph name="NUMBER_ONE"><ex>1</ex>#</ph> hour '''
       </message>
       </if>
       <if expr="lang in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
-      <message translateable="false" name="IDS_TIME_HOUR_1ST_SINGULAR"
+      <message translateable="false" name="IDS_TIME_HOURS_1ST_SINGULAR"
                desc="">
         NA
       </message>
@@ -858,13 +858,13 @@
       </message>
 
       <if expr="lang not in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
-      <message name="IDS_TIME_HOUR_2ND_SINGULAR"
+      <message name="IDS_TIME_HOURS_2ND_SINGULAR"
                desc="Second part of 'xx days yy hours' time format where yy (NUMBER_ONE) is a one or one-like number: 1 (many European and most Indian languages), 1 and 0 (French, Brazilian Portuguese and Hindi), 1, 21, 31, ... (Russian, Ukrainian, Croatian, Serbian, Latvian, Lithuanian), or 1, 101, 201, ... (Slovenian). Do NOT translate this for CJK, Vietnamese, Turkish and Kannada.">
         <ph name="NUMBER_ONE"><ex>1</ex>#</ph> hour
       </message>
       </if>
       <if expr="lang in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
-      <message translateable="false" name="IDS_TIME_HOUR_2ND_SINGULAR"
+      <message translateable="false" name="IDS_TIME_HOURS_2ND_SINGULAR"
                desc="">
         NA
       </message>
@@ -929,13 +929,13 @@
       </message>
 
       <if expr="lang not in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
-      <message name="IDS_TIME_DAY_SINGULAR"
+      <message name="IDS_TIME_DAYS_SINGULAR"
                desc="NUMBER_ONE is a one or one-like number: 1 (many European and most Indian languages), 1 and 0 (French, Brazilian Portuguese and Hindi), 1, 21, 31, ... (Russian, Ukrainian, Croatian, Serbian, Latvian, Lithuanian), or 1, 101, 201, ... (Slovenian). Do NOT translate this for CJK, Vietnamese, Turkish and Kannada.">
         <ph name="NUMBER_ONE"><ex>1</ex>#</ph> day
       </message>
       </if>
       <if expr="lang in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
-      <message translateable="false" name="IDS_TIME_DAY_SINGULAR"
+      <message translateable="false" name="IDS_TIME_DAYS_SINGULAR"
                desc="">
         NA
       </message>
@@ -1000,13 +1000,13 @@
       </message>
 
       <if expr="lang not in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
-      <message name="IDS_TIME_DAY_1ST_SINGULAR"
+      <message name="IDS_TIME_DAYS_1ST_SINGULAR"
                desc="First part of 'xx days yy hours' time format (including the space between first and second part, if the language requires a space there) where xx (NUMBER_ONE) is a one or one-like number: 1 (many European and most Indian languages), 1 and 0 (French, Brazilian Portuguese and Hindi), 1, 21, 31, ... (Russian, Ukrainian, Croatian, Serbian, Latvian, Lithuanian), or 1, 101, 201, ... (Slovenian). Do NOT translate this for CJK, Vietnamese, Turkish and Kannada.">
         <ph name="NUMBER_ONE"><ex>1</ex>#</ph> day '''
       </message>
       </if>
       <if expr="lang in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
-      <message translateable="false" name="IDS_TIME_DAY_1ST_SINGULAR"
+      <message translateable="false" name="IDS_TIME_DAYS_1ST_SINGULAR"
                desc="">
         NA
       </message>
@@ -1071,13 +1071,13 @@
       </message>
 
       <if expr="lang not in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
-      <message name="IDS_TIME_REMAINING_SEC_SINGULAR"
+      <message name="IDS_TIME_REMAINING_SECS_SINGULAR"
                desc="NUMBER_ONE is a one or one-like number: 1 (many European and most Indian languages), 1 and 0 (French, Brazilian Portuguese and Hindi), 1, 21, 31, ... (Russian, Ukrainian, Croatian, Serbian, Latvian, Lithuanian), or 1, 101, 201, ... (Slovenian). Do NOT translate this for CJK, Vietnamese, Turkish and Kannada.">
         <ph name="NUMBER_ONE"><ex>1</ex>#</ph> sec left
       </message>
       </if>
       <if expr="lang in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
-      <message translateable="false" name="IDS_TIME_REMAINING_SEC_SINGULAR"
+      <message translateable="false" name="IDS_TIME_REMAINING_SECS_SINGULAR"
                desc="">
         NA
       </message>
@@ -1142,13 +1142,13 @@
       </message>
 
       <if expr="lang not in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
-      <message name="IDS_TIME_REMAINING_LONG_SEC_SINGULAR"
+      <message name="IDS_TIME_REMAINING_LONG_SECS_SINGULAR"
                desc="NUMBER_ONE is a one or one-like number: 1 (many European and most Indian languages), 1 and 0 (French, Brazilian Portuguese and Hindi), 1, 21, 31, ... (Russian, Ukrainian, Croatian, Serbian, Latvian, Lithuanian), or 1, 101, 201, ... (Slovenian). Do NOT translate this for CJK, Vietnamese, Turkish and Kannada.">
         <ph name="NUMBER_ONE"><ex>1</ex>#</ph> second left
       </message>
       </if>
       <if expr="lang in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
-      <message translateable="false" name="IDS_TIME_REMAINING_SEC_SINGULAR"
+      <message translateable="false" name="IDS_TIME_REMAINING_SECS_SINGULAR"
                desc="">
         NA
       </message>
@@ -1213,13 +1213,13 @@
       </message>
 
       <if expr="lang not in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
-      <message name="IDS_TIME_REMAINING_MIN_SINGULAR"
+      <message name="IDS_TIME_REMAINING_MINS_SINGULAR"
                desc="NUMBER_ONE is a one or one-like number: 1 (many European and most Indian languages), 1 and 0 (French, Brazilian Portuguese and Hindi), 1, 21, 31, ... (Russian, Ukrainian, Croatian, Serbian, Latvian, Lithuanian), or 1, 101, 201, ... (Slovenian). Do NOT translate this for CJK, Vietnamese, Turkish and Kannada.">
         <ph name="NUMBER_ONE"><ex>1</ex>#</ph> min left
       </message>
       </if>
       <if expr="lang in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
-      <message translateable="false" name="IDS_TIME_REMAINING_MIN_SINGULAR"
+      <message translateable="false" name="IDS_TIME_REMAINING_MINS_SINGULAR"
                desc="">
         NA
       </message>
@@ -1283,13 +1283,13 @@
       </message>
 
       <if expr="lang not in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
-      <message name="IDS_TIME_REMAINING_LONG_MIN_SINGULAR"
+      <message name="IDS_TIME_REMAINING_LONG_MINS_SINGULAR"
                desc="NUMBER_ONE is a one or one-like number: 1 (many European and most Indian languages), 1 and 0 (French, Brazilian Portuguese and Hindi), 1, 21, 31, ... (Russian, Ukrainian, Croatian, Serbian, Latvian, Lithuanian), or 1, 101, 201, ... (Slovenian). Do NOT translate this for CJK, Vietnamese, Turkish and Kannada.">
         <ph name="NUMBER_ONE"><ex>1</ex>#</ph> minute left
       </message>
       </if>
       <if expr="lang in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
-      <message translateable="false" name="IDS_TIME_REMAINING_LONG_MIN_SINGULAR"
+      <message translateable="false" name="IDS_TIME_REMAINING_LONG_MINS_SINGULAR"
                desc="">
         NA
       </message>
@@ -1353,13 +1353,13 @@
       </message>
 
       <if expr="lang not in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
-      <message name="IDS_TIME_REMAINING_HOUR_SINGULAR"
+      <message name="IDS_TIME_REMAINING_HOURS_SINGULAR"
                desc="NUMBER_ONE is a one or one-like number: 1 (many European and most Indian languages), 1 and 0 (French, Brazilian Portuguese and Hindi), 1, 21, 31, ... (Russian, Ukrainian, Croatian, Serbian, Latvian, Lithuanian), or 1, 101, 201, ... (Slovenian). Do NOT translate this for CJK, Vietnamese, Turkish and Kannada.">
         <ph name="NUMBER_ONE"><ex>1</ex>#</ph> hour left
       </message>
       </if>
       <if expr="lang in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
-      <message translateable="false" name="IDS_TIME_REMAINING_HOUR_SINGULAR"
+      <message translateable="false" name="IDS_TIME_REMAINING_HOURS_SINGULAR"
                desc="">
         NA
       </message>
@@ -1424,13 +1424,13 @@
       </message>
 
       <if expr="lang not in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
-      <message name="IDS_TIME_REMAINING_DAY_SINGULAR"
+      <message name="IDS_TIME_REMAINING_DAYS_SINGULAR"
                desc="NUMBER_ONE is a one or one-like number: 1 (many European and most Indian languages), 1 and 0 (French, Brazilian Portuguese and Hindi), 1, 21, 31, ... (Russian, Ukrainian, Croatian, Serbian, Latvian, Lithuanian), or 1, 101, 201, ... (Slovenian). Do NOT translate this for CJK, Vietnamese, Turkish and Kannada.">
         <ph name="NUMBER_ONE"><ex>1</ex>#</ph> day left
       </message>
       </if>
       <if expr="lang in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
-      <message translateable="false" name="IDS_TIME_REMAINING_DAY_SINGULAR"
+      <message translateable="false" name="IDS_TIME_REMAINING_DAYS_SINGULAR"
                desc="">
         NA
       </message>
@@ -1494,13 +1494,13 @@
       </message>
 
       <if expr="lang not in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
-      <message name="IDS_TIME_ELAPSED_SEC_SINGULAR"
+      <message name="IDS_TIME_ELAPSED_SECS_SINGULAR"
                desc="NUMBER_ONE is a one or one-like number: 1 (many European and most Indian languages), 1 and 0 (French, Brazilian Portuguese and Hindi), 1, 21, 31, ... (Russian, Ukrainian, Croatian, Serbian, Latvian, Lithuanian), or 1, 101, 201, ... (Slovenian). Do NOT translate this for CJK, Vietnamese, Turkish and Kannada.">
         <ph name="NUMBER_ONE"><ex>1</ex>#</ph> sec ago
       </message>
       </if>
       <if expr="lang in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
-      <message translateable="false" name="IDS_TIME_ELAPSED_SEC_SINGULAR"
+      <message translateable="false" name="IDS_TIME_ELAPSED_SECS_SINGULAR"
                desc="">
         NA
       </message>
@@ -1565,13 +1565,13 @@
       </message>
 
       <if expr="lang not in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
-      <message name="IDS_TIME_ELAPSED_MIN_SINGULAR"
+      <message name="IDS_TIME_ELAPSED_MINS_SINGULAR"
                desc="NUMBER_ONE is a one or one-like number: 1 (many European and most Indian languages), 1 and 0 (French, Brazilian Portuguese and Hindi), 1, 21, 31, ... (Russian, Ukrainian, Croatian, Serbian, Latvian, Lithuanian), or 1, 101, 201, ... (Slovenian). Do NOT translate this for CJK, Vietnamese, Turkish and Kannada.">
         <ph name="NUMBER_ONE"><ex>1</ex>#</ph> min ago
       </message>
       </if>
       <if expr="lang in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
-      <message translateable="false" name="IDS_TIME_ELAPSED_MIN_SINGULAR"
+      <message translateable="false" name="IDS_TIME_ELAPSED_MINS_SINGULAR"
                desc="">
         NA
       </message>
@@ -1636,13 +1636,13 @@
       </message>
 
       <if expr="lang not in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
-      <message name="IDS_TIME_ELAPSED_HOUR_SINGULAR"
+      <message name="IDS_TIME_ELAPSED_HOURS_SINGULAR"
                desc="NUMBER_ONE is a one or one-like number: 1 (many European and most Indian languages), 1 and 0 (French, Brazilian Portuguese and Hindi), 1, 21, 31, ... (Russian, Ukrainian, Croatian, Serbian, Latvian, Lithuanian), or 1, 101, 201, ... (Slovenian). Do NOT translate this for CJK, Vietnamese, Turkish and Kannada.">
         <ph name="NUMBER_ONE"><ex>1</ex>#</ph> hour ago
       </message>
       </if>
       <if expr="lang in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
-      <message translateable="false" name="IDS_TIME_ELAPSED_HOUR_SINGULAR"
+      <message translateable="false" name="IDS_TIME_ELAPSED_HOURS_SINGULAR"
                desc="">
         NA
       </message>
@@ -1707,13 +1707,13 @@
       </message>
 
       <if expr="lang not in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
-      <message name="IDS_TIME_ELAPSED_DAY_SINGULAR"
+      <message name="IDS_TIME_ELAPSED_DAYS_SINGULAR"
                desc="NUMBER_ONE is a one or one-like number: 1 (many European and most Indian languages), 1 and 0 (French, Brazilian Portuguese and Hindi), 1, 21, 31, ... (Russian, Ukrainian, Croatian, Serbian, Latvian, Lithuanian), or 1, 101, 201, ... (Slovenian). Do NOT translate this for CJK, Vietnamese, Turkish and Kannada.">
         <ph name="NUMBER_ONE"><ex>1</ex>#</ph> day ago
       </message>
       </if>
       <if expr="lang in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
-      <message translateable="false" name="IDS_TIME_ELAPSED_DAY_SINGULAR"
+      <message translateable="false" name="IDS_TIME_ELAPSED_DAYS_SINGULAR"
                desc="">
         NA
       </message>
diff --git a/ui/base/strings/ui_strings_am.xtb b/ui/base/strings/ui_strings_am.xtb
index 349f686..b2bc258 100644
--- a/ui/base/strings/ui_strings_am.xtb
+++ b/ui/base/strings/ui_strings_am.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> ባ</translation>
 <translation id="3660179305079774227">የላይ ቀስት</translation>
+<translation id="3969863827134279083">ወደላይ አውጣ</translation>
 <translation id="7062130397825382308"><ph name="NUMBER_ONE"/> ሁለተኛ ግራ</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> ሜባ/ሰ</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> ሰዓት</translation>
 <translation id="3990502903496589789">የቀኝ ጠርዝ</translation>
 <translation id="9038489124413477075">ያልተሰየመ አቃፊ</translation>
+<translation id="1940483897317142625">ወደ የመስመር መጨረሻ ሰርዝ</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/> ደቂቃ</translation>
 <translation id="3520476450377425184"><ph name="NUMBER_MANY"/> ቀናት ይቀራሉ</translation>
 <translation id="932327136139879170">መነሻ</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011">ከ<ph name="NUMBER_FEW"/> ቀናት በፊት</translation>
 <translation id="5076340679995252485">&amp;ለጥፍ</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> ቴባ</translation>
+<translation id="7139614227326422685">ቃል ወደ ቀኝ ውሰድ</translation>
 <translation id="364720409959344976">የሚሰቀል ዓቃፊ ይምረጡ</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016">ከ<ph name="NUMBER_TWO"/> ደቂቃ በፊት</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">ማሳወቂያ ዝጋ</translation>
 <translation id="6364916375976753737">ወደ ግራ ሸብልል</translation>
 <translation id="2629089419211541119">ከ<ph name="NUMBER_ONE"/> ሰዓት በፊት</translation>
+<translation id="4218160142017529598">ወደኋላ ሰርዝ</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> ደቂቃዎች</translation>
 <translation id="6982279413068714821">ከ<ph name="NUMBER_DEFAULT"/> ደቂቃ በፊት</translation>
 <translation id="6945221475159498467">ይምረጡ</translation>
 <translation id="6620110761915583480">ፋይል አስቀምጥ</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> ሰከንዶች</translation>
+<translation id="8924469368910458384">ወደ የመስመር መጀመሪያ ሰርዝ</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> ሰዓት</translation>
 <translation id="7836361698254323868"><ph name="NUMBER_ONE"/> ደቂቃ ቀርቷል</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> ደቂቃ</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863"><ph name="NUMBER_MANY"/> ቀናት</translation>
 <translation id="7163503212501929773"><ph name="NUMBER_MANY"/> ሰዓቶች ይቀራሉ</translation>
 <translation id="5329858601952122676">&amp;ሠርዝ</translation>
+<translation id="6556866813142980365">ድገም</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> ሴኮንድ</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> ኪባ</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> ደቂቃዎች</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> ደቂቃዎች</translation>
 <translation id="50960180632766478"><ph name="NUMBER_FEW"/> ደቂቃ ይቀራል</translation>
 <translation id="5517291721709019259"><ph name="NUMBER_FEW"/> ሰከንዶች ቀርተዋል</translation>
+<translation id="6903282483217634857">ወደ ቀኝ ውሰድ</translation>
 <translation id="6659594942844771486">ትር</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> ሜባ</translation>
 <translation id="4988273303304146523">ከ<ph name="NUMBER_DEFAULT"/> ቀን በፊት</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/> ደቂቃ</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> ሰዓት ይቀራል</translation>
 <translation id="7135556860107312402">ማሳወቂያዎች ከሚከተሉት እንዲመጡ ፍቀድ፦</translation>
+<translation id="2479520428668657293">ወደ ቀኝ ውሰድ እና ምርጫ ቀይር</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/> ሰዓቶች</translation>
 <translation id="1398853756734560583">አስፋ</translation>
 <translation id="4250229828105606438">ቅጽበታዊ ገጽ እይታ</translation>
 <translation id="6690744523875189208"><ph name="NUMBER_TWO"/> ሰዓቶች</translation>
 <translation id="5260878308685146029"><ph name="NUMBER_TWO"/> ደቂቃ ይቀራል</translation>
+<translation id="2557207087669398617">ወደ የመስመር መጀመሪያ ውሰድ</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> ጊባ</translation>
 <translation id="1901303067676059328">&amp;ሁሉንም ምረጥ</translation>
 <translation id="2168039046890040389">ወደላይ አንቀሳቅስ</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> ደቂቃ</translation>
 <translation id="9107059250669762581"><ph name="NUMBER_DEFAULT"/> ቀን</translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> ደቂቃ</translation>
+<translation id="6122334925474904337">ቃል ወደ ቀኝ ውሰድ እና ምርጫ ቀይር</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> ደቂቃ</translation>
 <translation id="8448317557906454022">ከ<ph name="NUMBER_ZERO"/> ሴኮንድ በፊት</translation>
 <translation id="4927753642311223124">እዚህ ምንም የሚታይ ነገር የለም፣ ይቀጥሉ።</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> ቀን</translation>
 <translation id="3183922693828471536">ወደ እዚህ ሸብልል</translation>
 <translation id="4552416320897244156">PgDwn</translation>
+<translation id="3066573403916685335">ወደታች አውርድ</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/> ሰዓቶች</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> ኪባ/ሰ</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780"><ph name="NUMBER_ONE"/> ሰዓት ይቀራል</translation>
 <translation id="1413622004203049571">ከ<ph name="NOTIFIER_NAME"/> የሚመጡ ማሳወቂያዎችን አሰናክል</translation>
 <translation id="2666092431469916601">ላይ</translation>
+<translation id="2538759511191347839">ወደ የመስመር መጨረሻ ውሰድ እና ምርጫ ቀይር</translation>
+<translation id="928465423150706909">ወደ የመስመር መጨረሻ ውሰድ</translation>
 <translation id="8331626408530291785">ወደ ላይ ሸብልል</translation>
 <translation id="7907591526440419938">ፋይል ክፈት</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> ቀን ይቀራል</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">ሚዲያ አቁም</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> ደቂቃ ይቀራል</translation>
 <translation id="3157931365184549694">እነበረበት መልስ</translation>
+<translation id="5349525451964472598">ወደ ግራ ውሰድ እና ምርጫ ቀይር</translation>
+<translation id="1781701194097416995">ቃል ወደ ግራ ውሰድ</translation>
 <translation id="1243314992276662751">ስቀል</translation>
 <translation id="50030952220075532"><ph name="NUMBER_ONE"/> ቀን ይቀራል</translation>
 <translation id="8179976553408161302">አስገባ</translation>
+<translation id="8471049483003785219">ቃል ወደ ግራ ውሰድ እና ምርጫ ቀይር</translation>
 <translation id="945522503751344254">ግብረ መልስ ላክ</translation>
 <translation id="9170848237812810038">&amp;ቀልብስ</translation>
 <translation id="1285266685456062655">ከ<ph name="NUMBER_FEW"/> ሰዓቶች በፊት</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350">ከ<ph name="NUMBER_ZERO"/> ሰዓት በፊት</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> ጊባ/ሰ</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/> ቀን</translation>
+<translation id="2704295676501803339">ወደ ግራ ውሰድ</translation>
 <translation id="9098468523912235228">ከ<ph name="NUMBER_DEFAULT"/> ሴኮንድ በፊት</translation>
 <translation id="494645311413743213"><ph name="NUMBER_TWO"/> ሴኮንድ ይቀራል</translation>
 <translation id="4570886800634958009">ማሳወቂያ ዘርጋ</translation>
+<translation id="566737009157135450">ወደኋላ ሰርዝ</translation>
 <translation id="436869212180315161">ተጫን</translation>
 <translation id="4860787810836767172">ከ<ph name="NUMBER_FEW"/> ሴኮንድ በፊት</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> ቴባ/ሰ</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497">ከ<ph name="NUMBER_MANY"/> ደቂቃ በፊት</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> ባ/ሰ</translation>
 <translation id="7649070708921625228">እገዛ</translation>
+<translation id="2405367043325750948">ወደፊት ሰርዝ</translation>
 <translation id="6699343763173986273">የሚዲያ ቀጣይ ትራክ</translation>
 <translation id="5445120697129764393"><ph name="NUMBER_DEFAULT"/> ሰከንዶች ቀርተዋል</translation>
 <translation id="8226233771743600312">ለአንድ ቀን አትረብሽ</translation>
+<translation id="4252565523989510616">ቃል ወደፊት ሰርዝ</translation>
 <translation id="7457942297256758195">ሁሉንም አጽዳ</translation>
 <translation id="822618367988303761">ከ<ph name="NUMBER_TWO"/> ቀናት በፊት</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> ደቂቃ</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> ፔባ/ሰ</translation>
 <translation id="2743387203779672305">ወደ ቅንጥብ ሰሌዳ ገልብጥ</translation>
 <translation id="8371695176452482769">አሁን ይናገሩ</translation>
+<translation id="1167268268675672572">ወደ የመስመር መጀመሪያ ውሰድ እና ምርጫ ቀይር</translation>
 <translation id="6965382102122355670">ይሁን</translation>
 <translation id="7850320739366109486">አትረብሽ</translation>
 <translation id="6978839998405419496">ከ<ph name="NUMBER_ZERO"/> ቀን በፊት</translation>
diff --git a/ui/base/strings/ui_strings_ar.xtb b/ui/base/strings/ui_strings_ar.xtb
index 4f384be..db81eaf 100644
--- a/ui/base/strings/ui_strings_ar.xtb
+++ b/ui/base/strings/ui_strings_ar.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> بايت</translation>
 <translation id="3660179305079774227">مفتاح سهم إلى أعلى</translation>
+<translation id="3969863827134279083">تحريك لأعلى</translation>
 <translation id="7062130397825382308">يتبقى <ph name="NUMBER_ONE"/> ثانية</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> ميغابايات/ثانية</translation>
 <translation id="5608669887400696928">عدد الساعات: <ph name="NUMBER_DEFAULT"/></translation>
 <translation id="3990502903496589789">الحافة اليسرى</translation>
 <translation id="9038489124413477075">مجلد بدون اسم</translation>
+<translation id="1940483897317142625">حذف إلى نهاية السطر</translation>
 <translation id="8507996248087185956">عدد الدقائق: <ph name="NUMBER_DEFAULT"/></translation>
 <translation id="3520476450377425184">عدد الأيام المتبقيّة <ph name="NUMBER_MANY"/></translation>
 <translation id="932327136139879170">الصفحة الرئيسية</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011">قبل <ph name="NUMBER_FEW"/> يوم</translation>
 <translation id="5076340679995252485">ل&amp;صق</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> تيرابايت</translation>
+<translation id="7139614227326422685">الانتقال كلمة يمينًا</translation>
 <translation id="364720409959344976">حدد مجلدًا للتحميل</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016">قبل <ph name="NUMBER_TWO"/> دقيقة</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">إغلاق الإشعار</translation>
 <translation id="6364916375976753737">التمرير إلى اليمين</translation>
 <translation id="2629089419211541119">قبل <ph name="NUMBER_ONE"/> ساعة</translation>
+<translation id="4218160142017529598">حذف للخلف</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> دقيقة</translation>
 <translation id="6982279413068714821">قبل <ph name="NUMBER_DEFAULT"/> دقيقة</translation>
 <translation id="6945221475159498467">تحديد</translation>
 <translation id="6620110761915583480">حفظ الملف</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> بلا ثوانٍ</translation>
+<translation id="8924469368910458384">حذف إلى بداية السطر</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> ساعة</translation>
 <translation id="7836361698254323868">عدد الدقائق المتبقية: <ph name="NUMBER_ONE"/></translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> دقيقة</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863"><ph name="NUMBER_MANY"/> يومًا</translation>
 <translation id="7163503212501929773">عدد الساعات المتبقية: <ph name="NUMBER_MANY"/></translation>
 <translation id="5329858601952122676">&amp;حذف</translation>
+<translation id="6556866813142980365">إعادة</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> ثانية</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> كيلوبايت</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> دقيقة</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412">دقيقتان (<ph name="NUMBER_TWO"/>)</translation>
 <translation id="50960180632766478">عدد الدقائق المتبقية: <ph name="NUMBER_FEW"/></translation>
 <translation id="5517291721709019259">يتبقى <ph name="NUMBER_FEW"/> ثواني</translation>
+<translation id="6903282483217634857">الانتقال يمينًا</translation>
 <translation id="6659594942844771486">علامة تبويب</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> ميغابايت</translation>
 <translation id="4988273303304146523">قبل <ph name="NUMBER_DEFAULT"/> يوم</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773">عدد الدقائق: <ph name="NUMBER_TWO"/></translation>
 <translation id="5149131957118398098">متبقٍ <ph name="NUMBER_ZERO"/> ساعة</translation>
 <translation id="7135556860107312402">السماح بالإشعارات من الجهات التالية:</translation>
+<translation id="2479520428668657293">الانتقال يمينًا وتعديل التحديد</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/> ساعات</translation>
 <translation id="1398853756734560583">تكبير</translation>
 <translation id="4250229828105606438">لقطة شاشة</translation>
 <translation id="6690744523875189208">عدد الساعات: <ph name="NUMBER_TWO"/></translation>
 <translation id="5260878308685146029">عدد الدقائق المتبقية: <ph name="NUMBER_TWO"/></translation>
+<translation id="2557207087669398617">الانتقال إلى بداية السطر</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> غيغابايت</translation>
 <translation id="1901303067676059328">تح&amp;ديد الكلّ</translation>
 <translation id="2168039046890040389">صفحة  إلى أعلى</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> دقيقة</translation>
 <translation id="9107059250669762581">عدد الأيام <ph name="NUMBER_DEFAULT"/></translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> دقيقة</translation>
+<translation id="6122334925474904337">الانتقال كلمة يمينًا وتعديل التحديد</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> دقيقة واحدة</translation>
 <translation id="8448317557906454022">قبل <ph name="NUMBER_ZERO"/> ثانية</translation>
 <translation id="4927753642311223124">ليس هناك شيء تراه هنا، انتقل إلى مكان آخر.</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> يوم</translation>
 <translation id="3183922693828471536">التمرير إلى هنا</translation>
 <translation id="4552416320897244156">‏مفتاح PgDwn (صفحة إلى أسفل)</translation>
+<translation id="3066573403916685335">الانتقال لأسفل</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/> ساعة</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> كيلوبايت/ثانية</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780">عدد الساعات المتبقية: <ph name="NUMBER_ONE"/></translation>
 <translation id="1413622004203049571">تعطيل الإشعارات من <ph name="NOTIFIER_NAME"/></translation>
 <translation id="2666092431469916601">أعلى</translation>
+<translation id="2538759511191347839">الانتقال إلى نهاية السطر وتعديل التحديد</translation>
+<translation id="928465423150706909">الانتقال إلى نهاية السطر</translation>
 <translation id="8331626408530291785">التمرير إلى أعلى</translation>
 <translation id="7907591526440419938">فتح ملف</translation>
 <translation id="2864069933652346933">متبقٍ <ph name="NUMBER_ZERO"/> يوم</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">إيقاف الوسائط</translation>
 <translation id="1308727876662951186">متبقٍ <ph name="NUMBER_ZERO"/> دقيقة</translation>
 <translation id="3157931365184549694">استعادة</translation>
+<translation id="5349525451964472598">الانتقال ي</translation>
+<translation id="1781701194097416995">الانتقال كلمة يسارًا</translation>
 <translation id="1243314992276662751">تحميل</translation>
 <translation id="50030952220075532">عدد الأيام المتبقية <ph name="NUMBER_ONE"/></translation>
 <translation id="8179976553408161302">تفضل</translation>
+<translation id="8471049483003785219">الانتقال كلمة يسارًا وتعديل التحديد</translation>
 <translation id="945522503751344254">إرسال تعليقات</translation>
 <translation id="9170848237812810038">&amp;إلغاء</translation>
 <translation id="1285266685456062655">قبل <ph name="NUMBER_FEW"/> ساعة</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350">قبل <ph name="NUMBER_ZERO"/> ساعة</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> غيغابايت/ثانية</translation>
 <translation id="6644971472240498405">عدد الأيام <ph name="NUMBER_ONE"/></translation>
+<translation id="2704295676501803339">الانتقال يسارًا</translation>
 <translation id="9098468523912235228">قبل <ph name="NUMBER_DEFAULT"/> ثانية</translation>
 <translation id="494645311413743213">عدد الثواني المتبقية: <ph name="NUMBER_TWO"/></translation>
 <translation id="4570886800634958009">توسيع الإشعار</translation>
+<translation id="566737009157135450">حذف كلمة للخلف</translation>
 <translation id="436869212180315161">اضغط</translation>
 <translation id="4860787810836767172">قبل <ph name="NUMBER_FEW"/> ثانية</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> تيرابايت/ثانية</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497">قبل <ph name="NUMBER_MANY"/> دقيقة</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> بايت/ثانية</translation>
 <translation id="7649070708921625228">مساعدة</translation>
+<translation id="2405367043325750948">حذف للأمام</translation>
 <translation id="6699343763173986273">المقطع الصوتي التالي للوسائط</translation>
 <translation id="5445120697129764393">يتبقى <ph name="NUMBER_DEFAULT"/> ثانية</translation>
 <translation id="8226233771743600312">الرجاء عدم الإزعاج لمدة يوم واحد</translation>
+<translation id="4252565523989510616">حذف كلمة للأمام</translation>
 <translation id="7457942297256758195">محو الكل</translation>
 <translation id="822618367988303761">قبل <ph name="NUMBER_TWO"/> يوم</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> دقيقة</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> بيتابايت/ثانية</translation>
 <translation id="2743387203779672305">نسخ إلى الحافظة</translation>
 <translation id="8371695176452482769">تحدث الآن</translation>
+<translation id="1167268268675672572">الانتقال إلى بداية السطر وتعديل التحديد</translation>
 <translation id="6965382102122355670">موافق</translation>
 <translation id="7850320739366109486">الرجاء عدم الإزعاج</translation>
 <translation id="6978839998405419496">قبل <ph name="NUMBER_ZERO"/> يوم</translation>
diff --git a/ui/base/strings/ui_strings_bg.xtb b/ui/base/strings/ui_strings_bg.xtb
index 1f4e8d9..caaf7a5 100644
--- a/ui/base/strings/ui_strings_bg.xtb
+++ b/ui/base/strings/ui_strings_bg.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> Б</translation>
 <translation id="3660179305079774227">Стрелка нагоре</translation>
+<translation id="3969863827134279083">Преместване нагоре</translation>
 <translation id="7062130397825382308">Остава <ph name="NUMBER_ONE"/> секунда</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> МБ/сек</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> часа</translation>
 <translation id="3990502903496589789">Десн край</translation>
 <translation id="9038489124413477075">Папка без име</translation>
+<translation id="1940483897317142625">Изтриване до края на реда</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/> мин</translation>
 <translation id="3520476450377425184">Остават <ph name="NUMBER_MANY"/> дни</translation>
 <translation id="932327136139879170">Home</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011">преди <ph name="NUMBER_FEW"/> дни</translation>
 <translation id="5076340679995252485">&amp;Поставяне</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> ТБ</translation>
+<translation id="7139614227326422685">Преместване надясно с една дума</translation>
 <translation id="364720409959344976">Избиране на папка за качване</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016">преди <ph name="NUMBER_TWO"/> мин</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">Затваряне на известието</translation>
 <translation id="6364916375976753737">Превъртане наляво</translation>
 <translation id="2629089419211541119">преди <ph name="NUMBER_ONE"/> час/а</translation>
+<translation id="4218160142017529598">Изтриване назад</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> минути</translation>
 <translation id="6982279413068714821">преди <ph name="NUMBER_DEFAULT"/> мин</translation>
 <translation id="6945221475159498467">Изберете</translation>
 <translation id="6620110761915583480">Запазване на файл</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> секунди</translation>
+<translation id="8924469368910458384">Изтриване до началото на реда</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> hours</translation>
 <translation id="7836361698254323868">Остава <ph name="NUMBER_ONE"/> минута</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> мин</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863"><ph name="NUMBER_MANY"/> дни</translation>
 <translation id="7163503212501929773">Остават <ph name="NUMBER_MANY"/> часа</translation>
 <translation id="5329858601952122676">&amp;Изтриване</translation>
+<translation id="6556866813142980365">Възстановяване</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> сек</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> KБ</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> минути</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> минути</translation>
 <translation id="50960180632766478">Остават <ph name="NUMBER_FEW"/> мин</translation>
 <translation id="5517291721709019259">Остават <ph name="NUMBER_FEW"/> секунди</translation>
+<translation id="6903282483217634857">Преместване надясно</translation>
 <translation id="6659594942844771486">Раздел</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> МБ</translation>
 <translation id="4988273303304146523">преди <ph name="NUMBER_DEFAULT"/> дни</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/> мин</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> hours left</translation>
 <translation id="7135556860107312402">Разрешаване на известията от следните неща:</translation>
+<translation id="2479520428668657293">Преместване надясно и промяна на избраното</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/> часа</translation>
 <translation id="1398853756734560583">Увеличаване</translation>
 <translation id="4250229828105606438">Eкранна снимка</translation>
 <translation id="6690744523875189208"><ph name="NUMBER_TWO"/> часа</translation>
 <translation id="5260878308685146029">Остават <ph name="NUMBER_TWO"/> мин</translation>
+<translation id="2557207087669398617">Преместване до началото на реда</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> ГБ</translation>
 <translation id="1901303067676059328">&amp;Избиране на всички</translation>
 <translation id="2168039046890040389">Страница нагоре</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> mins</translation>
 <translation id="9107059250669762581"><ph name="NUMBER_DEFAULT"/> дни</translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> мин</translation>
+<translation id="6122334925474904337">Преместване надясно с една дума и промяна на избраното</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> минута</translation>
 <translation id="8448317557906454022">преди <ph name="NUMBER_ZERO"/> сек</translation>
 <translation id="4927753642311223124">Тук няма нищо, продължете нататък.</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> days</translation>
 <translation id="3183922693828471536">Превъртане до тук</translation>
 <translation id="4552416320897244156">PgDwn</translation>
+<translation id="3066573403916685335">Преместване надолу</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/> часа</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> КБ/сек</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780">Остава <ph name="NUMBER_ONE"/> час</translation>
 <translation id="1413622004203049571">Деактивиране на известията от <ph name="NOTIFIER_NAME"/></translation>
 <translation id="2666092431469916601">Най-горе</translation>
+<translation id="2538759511191347839">Преместване до края на реда и промяна на избраното</translation>
+<translation id="928465423150706909">Преместване до края на реда</translation>
 <translation id="8331626408530291785">Превъртане нагоре</translation>
 <translation id="7907591526440419938">Отваряне на файл</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> days left</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">Мултимедия, стоп</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> mins left</translation>
 <translation id="3157931365184549694">Възстановяване</translation>
+<translation id="5349525451964472598">Преместване наляво и промяна на избраното</translation>
+<translation id="1781701194097416995">Преместване наляво с една дума</translation>
 <translation id="1243314992276662751">Качване</translation>
 <translation id="50030952220075532">Остава <ph name="NUMBER_ONE"/> ден</translation>
 <translation id="8179976553408161302">Влизане</translation>
+<translation id="8471049483003785219">Преместване наляво с една дума и промяна на избраното</translation>
 <translation id="945522503751344254">Изпращане на отзиви</translation>
 <translation id="9170848237812810038">&amp;Отмяна</translation>
 <translation id="1285266685456062655">преди <ph name="NUMBER_FEW"/> часа</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> hours ago</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> ГБ/сек</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/> ден</translation>
+<translation id="2704295676501803339">Преместване наляво</translation>
 <translation id="9098468523912235228">преди <ph name="NUMBER_DEFAULT"/> сек</translation>
 <translation id="494645311413743213">Остават <ph name="NUMBER_TWO"/> сек</translation>
 <translation id="4570886800634958009">Разгъване на известието</translation>
+<translation id="566737009157135450">Изтриване назад дума по дума</translation>
 <translation id="436869212180315161">Натиснете</translation>
 <translation id="4860787810836767172">преди <ph name="NUMBER_FEW"/> сек</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> ТБ/сек</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497">преди <ph name="NUMBER_MANY"/> мин</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> Б/сек</translation>
 <translation id="7649070708921625228">Помощ</translation>
+<translation id="2405367043325750948">Изтриване напред</translation>
 <translation id="6699343763173986273">Мултимедия, следващият запис</translation>
 <translation id="5445120697129764393">Остават <ph name="NUMBER_DEFAULT"/> секунди</translation>
 <translation id="8226233771743600312">Не безпокойте за един ден</translation>
+<translation id="4252565523989510616">Изтриване напред дума по дума</translation>
 <translation id="7457942297256758195">Изчистване на всички</translation>
 <translation id="822618367988303761">преди <ph name="NUMBER_TWO"/> дни</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> мин</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> ПБ/сек</translation>
 <translation id="2743387203779672305">Копиране в буферната памет</translation>
 <translation id="8371695176452482769">Говорете сега</translation>
+<translation id="1167268268675672572">Преместване до началото на реда и промяна на избраното</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7850320739366109486">Не безпокойте</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> days ago</translation>
diff --git a/ui/base/strings/ui_strings_bn.xtb b/ui/base/strings/ui_strings_bn.xtb
index 7a70c1a..3290305 100644
--- a/ui/base/strings/ui_strings_bn.xtb
+++ b/ui/base/strings/ui_strings_bn.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> B</translation>
 <translation id="3660179305079774227">Up Arrow</translation>
+<translation id="3969863827134279083">উপরে যান</translation>
 <translation id="7062130397825382308"><ph name="NUMBER_ONE"/> সেকেন্ড বাকি</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> MB/s</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> ঘন্টা</translation>
 <translation id="3990502903496589789">ডান প্রান্ত</translation>
 <translation id="9038489124413477075">নামবিহীন ফোল্ডার</translation>
+<translation id="1940483897317142625">লাইনের শেষ পর্যন্ত মুছে ফেলুন</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/> মিনিট</translation>
 <translation id="3520476450377425184"><ph name="NUMBER_MANY"/> দিন বাকি</translation>
 <translation id="932327136139879170">হোম</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011"><ph name="NUMBER_FEW"/> days ago</translation>
 <translation id="5076340679995252485">&amp;প্রতিলেপন</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> TB</translation>
+<translation id="7139614227326422685">ডানদিকে শব্দ সরান</translation>
 <translation id="364720409959344976">আপলোড করার জন্য ফোল্ডার নির্বাচন করুন</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016"><ph name="NUMBER_TWO"/> mins ago</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">বিজ্ঞপ্তি বন্ধ করা হয়েছে</translation>
 <translation id="6364916375976753737">বাম দিকে স্ক্রোল করুন</translation>
 <translation id="2629089419211541119"><ph name="NUMBER_ONE"/> hour ago</translation>
+<translation id="4218160142017529598">পিছনের দিকে মুছুন</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> মিনিট</translation>
 <translation id="6982279413068714821"><ph name="NUMBER_DEFAULT"/> মিনিট আগে</translation>
 <translation id="6945221475159498467">নির্বাচন</translation>
 <translation id="6620110761915583480">ফাইল সংরক্ষণ করুন</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> সেকেন্ড</translation>
+<translation id="8924469368910458384">লাইনের শুরু পর্যন্ত মুছে ফেলুন</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> hours</translation>
 <translation id="7836361698254323868"><ph name="NUMBER_ONE"/> মিনিট বাকি</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> মিনিট</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863"><ph name="NUMBER_MANY"/> দিন</translation>
 <translation id="7163503212501929773"><ph name="NUMBER_MANY"/> ঘন্টা বাকি</translation>
 <translation id="5329858601952122676">&amp;মুছুন</translation>
+<translation id="6556866813142980365">পুনরায় করুন</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> সেকেন্ড</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> KB</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> মিনিট</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> মিনিট</translation>
 <translation id="50960180632766478"><ph name="NUMBER_FEW"/> মিনিট বাকি</translation>
 <translation id="5517291721709019259"><ph name="NUMBER_FEW"/> সেকেন্ড বাকি</translation>
+<translation id="6903282483217634857">ডানদিকে সরান</translation>
 <translation id="6659594942844771486">ট্যাব</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> MB</translation>
 <translation id="4988273303304146523"><ph name="NUMBER_DEFAULT"/> দিন আগে</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/> মিনিট</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> hours left</translation>
 <translation id="7135556860107312402">নিম্নলিখিত থেকে বিজ্ঞপ্তিগুলি মঞ্জুরি করুন:</translation>
+<translation id="2479520428668657293">ডানদিকে সরান এবং নির্বাচন পরিবর্তন করুন</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/> ঘন্টা</translation>
 <translation id="1398853756734560583">বড় করুন</translation>
 <translation id="4250229828105606438">স্ক্রীনশট</translation>
 <translation id="6690744523875189208"><ph name="NUMBER_TWO"/> ঘন্টা</translation>
 <translation id="5260878308685146029"><ph name="NUMBER_TWO"/> মিনিট বাকি</translation>
+<translation id="2557207087669398617">লাইনের শুরু পর্যন্ত সরান</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> GB</translation>
 <translation id="1901303067676059328">&amp;সকল নির্বাচন করুন</translation>
 <translation id="2168039046890040389">পৃষ্ঠা নীচে</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> mins</translation>
 <translation id="9107059250669762581"><ph name="NUMBER_DEFAULT"/> দিন</translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> মিনিট</translation>
+<translation id="6122334925474904337">শব্দকে ডানদিকে সরান এবং নির্বাচন পরিবর্তন করুন</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> মিনিট</translation>
 <translation id="8448317557906454022"><ph name="NUMBER_ZERO"/> secs ago</translation>
 <translation id="4927753642311223124">এখানে দেখার কিছু নেই , এগিয়ে যান৷</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> days</translation>
 <translation id="3183922693828471536">এখান পর্যন্ত স্ক্রোল করুন</translation>
 <translation id="4552416320897244156">PgDwn</translation>
+<translation id="3066573403916685335">নীচে যান</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/> ঘন্টা</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> KB/s</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780"><ph name="NUMBER_ONE"/> ঘন্টা বাকি</translation>
 <translation id="1413622004203049571"><ph name="NOTIFIER_NAME"/> এর থেকে বিজ্ঞপ্তিগুলি অক্ষম করুন</translation>
 <translation id="2666092431469916601">শীর্ষ</translation>
+<translation id="2538759511191347839">লাইনের শেষ অবধি সরান এবং নির্বাচন পরিবর্তন করুন</translation>
+<translation id="928465423150706909">লাইনের শেষ পর্যন্ত সরান</translation>
 <translation id="8331626408530291785">উপরে স্ক্রোল করুন</translation>
 <translation id="7907591526440419938">খোলা ফাইল</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> days left</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">মিডিয়া থামান</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> mins left</translation>
 <translation id="3157931365184549694">পুনরুদ্ধার করুন</translation>
+<translation id="5349525451964472598">বামদিকে সরান এবং নির্বাচন পরিবর্তন করুন</translation>
+<translation id="1781701194097416995">শব্দকে বামদিকে সরান</translation>
 <translation id="1243314992276662751">আপলোড</translation>
 <translation id="50030952220075532"><ph name="NUMBER_ONE"/> দিন বাকি</translation>
 <translation id="8179976553408161302">প্রবেশ করুন</translation>
+<translation id="8471049483003785219">শব্দকে বামদিকে সরান এবং নির্বাচন পরিবর্তন করুন</translation>
 <translation id="945522503751344254">প্রতিক্রিয়া প্রেরণ করুন</translation>
 <translation id="9170848237812810038">&amp;পূর্বাবস্থায় ফিরুন</translation>
 <translation id="1285266685456062655"><ph name="NUMBER_FEW"/> hours ago</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> hours ago</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> GB/s</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/> দিন</translation>
+<translation id="2704295676501803339">বামদিকে সরান</translation>
 <translation id="9098468523912235228"><ph name="NUMBER_DEFAULT"/> সেকেন্ড আগে</translation>
 <translation id="494645311413743213"><ph name="NUMBER_TWO"/> সেকেন্ড বাকি</translation>
 <translation id="4570886800634958009">বিজ্ঞপ্তি প্রসারিত করুন</translation>
+<translation id="566737009157135450">পিছনের দিকে শব্দকে মুছুন</translation>
 <translation id="436869212180315161">টিপুন</translation>
 <translation id="4860787810836767172"><ph name="NUMBER_FEW"/> secs ago</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> TB/s</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497"><ph name="NUMBER_MANY"/> mins ago</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> B/s</translation>
 <translation id="7649070708921625228">সহায়তা</translation>
+<translation id="2405367043325750948">সামনের দিকে মুছুন</translation>
 <translation id="6699343763173986273">মিডিয়া পরবর্তী ট্র্যাক</translation>
 <translation id="5445120697129764393"><ph name="NUMBER_DEFAULT"/> সেকেন্ড বাকি</translation>
 <translation id="8226233771743600312">এক দিনের জন্য বিরক্ত করবেন না</translation>
+<translation id="4252565523989510616">শব্দকে সামনের দিকে মুছুন</translation>
 <translation id="7457942297256758195">সমস্ত সাফ করুন</translation>
 <translation id="822618367988303761"><ph name="NUMBER_TWO"/> days ago</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> মিনিট</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> PB/s</translation>
 <translation id="2743387203779672305">ক্লিপবোর্ডে অনুলিপি করুন</translation>
 <translation id="8371695176452482769">এখনই বলুন</translation>
+<translation id="1167268268675672572">লাইনের শুরু পর্যন্ত সরান এবং নির্বাচন পরিবর্তন করুন</translation>
 <translation id="6965382102122355670">ওকে</translation>
 <translation id="7850320739366109486">বিরক্ত করবেন না</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> days ago</translation>
diff --git a/ui/base/strings/ui_strings_ca.xtb b/ui/base/strings/ui_strings_ca.xtb
index a373c75..5a7f049 100644
--- a/ui/base/strings/ui_strings_ca.xtb
+++ b/ui/base/strings/ui_strings_ca.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> B</translation>
 <translation id="3660179305079774227">Fletxa amunt</translation>
+<translation id="3969863827134279083">Mou cap amunt</translation>
 <translation id="7062130397825382308">Queda <ph name="NUMBER_ONE"/> segon.</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> MB/s</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> hores</translation>
 <translation id="3990502903496589789">Extrem dret</translation>
 <translation id="9038489124413477075">Carpeta sense nom</translation>
+<translation id="1940483897317142625">Suprimeix fins al final de la línia</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/> minuts</translation>
 <translation id="3520476450377425184"><ph name="NUMBER_MANY"/> dies restants</translation>
 <translation id="932327136139879170">Inici</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011">Fa <ph name="NUMBER_FEW"/> dies</translation>
 <translation id="5076340679995252485">Engan&amp;xa</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> TB</translation>
+<translation id="7139614227326422685">Mou la paraula a la dreta</translation>
 <translation id="364720409959344976">Selecció d'una carpeta per penjar</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016">Fa <ph name="NUMBER_TWO"/> minuts</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">Tanca la notificació</translation>
 <translation id="6364916375976753737">Desplaçament a l'esquerra</translation>
 <translation id="2629089419211541119">Fa <ph name="NUMBER_ONE"/> hora</translation>
+<translation id="4218160142017529598">Suprimeix cap enrere</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> minuts</translation>
 <translation id="6982279413068714821">Fa <ph name="NUMBER_DEFAULT"/> minuts</translation>
 <translation id="6945221475159498467">Selecciona</translation>
 <translation id="6620110761915583480">Desa el fitxer</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> segons</translation>
+<translation id="8924469368910458384">Suprimeix fins al començament de la línia</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> hours</translation>
 <translation id="7836361698254323868">Queda <ph name="NUMBER_ONE"/> minut</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> minut</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863"><ph name="NUMBER_MANY"/> dies</translation>
 <translation id="7163503212501929773"><ph name="NUMBER_MANY"/> hores restants</translation>
 <translation id="5329858601952122676">&amp;Suprimeix</translation>
+<translation id="6556866813142980365">Refés</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> segons</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> KB</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> minuts</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> minuts</translation>
 <translation id="50960180632766478"><ph name="NUMBER_FEW"/> minuts restants</translation>
 <translation id="5517291721709019259">Queden <ph name="NUMBER_FEW"/> segons</translation>
+<translation id="6903282483217634857">Mou a la dreta</translation>
 <translation id="6659594942844771486">Pestanya</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> MB</translation>
 <translation id="4988273303304146523">Fa <ph name="NUMBER_DEFAULT"/> dies</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/> minuts</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> hours left</translation>
 <translation id="7135556860107312402">Permet notificacions de les fonts següents:</translation>
+<translation id="2479520428668657293">Mou a la dreta i modifica la selecció</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/> hores</translation>
 <translation id="1398853756734560583">Maximitza</translation>
 <translation id="4250229828105606438">Captura de pantalla</translation>
 <translation id="6690744523875189208"><ph name="NUMBER_TWO"/> hores</translation>
 <translation id="5260878308685146029"><ph name="NUMBER_TWO"/> minuts restants</translation>
+<translation id="2557207087669398617">Mou al començament de la línia</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> GB</translation>
 <translation id="1901303067676059328">Selecciona-ho &amp;tot</translation>
 <translation id="2168039046890040389">Re Pàg</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> mins</translation>
 <translation id="9107059250669762581"><ph name="NUMBER_DEFAULT"/> dies</translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> minuts</translation>
+<translation id="6122334925474904337">Mou la paraula a la dreta i modifica la selecció</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> minut</translation>
 <translation id="8448317557906454022">Fa <ph name="NUMBER_ZERO"/> segons</translation>
 <translation id="4927753642311223124">No hi ha cap notificació, podeu continuar.</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> days</translation>
 <translation id="3183922693828471536">Desplaçament fins aquí</translation>
 <translation id="4552416320897244156">Av Pàg</translation>
+<translation id="3066573403916685335">Mou cap avall</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/> hores</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> KB/s</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780"><ph name="NUMBER_ONE"/> hores restants</translation>
 <translation id="1413622004203049571">Desactiva les notificacions de <ph name="NOTIFIER_NAME"/></translation>
 <translation id="2666092431469916601">Superior</translation>
+<translation id="2538759511191347839">Mou al final de la línia i modifica la selecció</translation>
+<translation id="928465423150706909">Mou al final de la línia</translation>
 <translation id="8331626408530291785">Desplaçament amunt</translation>
 <translation id="7907591526440419938">Obre un fitxer</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> days left</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">Fitxer multimèdia: atura</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> mins left</translation>
 <translation id="3157931365184549694">Restaura</translation>
+<translation id="5349525451964472598">Mou a l'esquerra i modifica la selecció</translation>
+<translation id="1781701194097416995">Mou la paraula a l'esquerra</translation>
 <translation id="1243314992276662751">Penja</translation>
 <translation id="50030952220075532"><ph name="NUMBER_ONE"/> dia restant</translation>
 <translation id="8179976553408161302">Intro</translation>
+<translation id="8471049483003785219">Mou la paraula a l'esquerra i modifica la selecció</translation>
 <translation id="945522503751344254">Envia comentaris</translation>
 <translation id="9170848237812810038">&amp;Desfés</translation>
 <translation id="1285266685456062655">Fa <ph name="NUMBER_FEW"/> hores</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> hours ago</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> GB/s</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/> dia</translation>
+<translation id="2704295676501803339">Mou a l'esquerra</translation>
 <translation id="9098468523912235228">Fa <ph name="NUMBER_DEFAULT"/> segons</translation>
 <translation id="494645311413743213"><ph name="NUMBER_TWO"/> segons restants</translation>
 <translation id="4570886800634958009">Amplia la notificació</translation>
+<translation id="566737009157135450">Suprimeix la paraula cap enrere</translation>
 <translation id="436869212180315161">Prem</translation>
 <translation id="4860787810836767172">Fa <ph name="NUMBER_FEW"/> segons</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> TB/s</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497">Fa <ph name="NUMBER_MANY"/> minuts</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> B/s</translation>
 <translation id="7649070708921625228">Ajuda</translation>
+<translation id="2405367043325750948">Suprimeix cap endavant</translation>
 <translation id="6699343763173986273">Fitxer multimèdia: pista següent</translation>
 <translation id="5445120697129764393">Queden <ph name="NUMBER_DEFAULT"/> segons.</translation>
 <translation id="8226233771743600312">No molesteu durant un dia</translation>
+<translation id="4252565523989510616">Suprimeix la paraula cap endavant</translation>
 <translation id="7457942297256758195">Esborra-ho tot</translation>
 <translation id="822618367988303761">Fa <ph name="NUMBER_TWO"/> dies</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> minuts</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> PB/s</translation>
 <translation id="2743387203779672305">Copia al porta-retalls</translation>
 <translation id="8371695176452482769">Parleu ara</translation>
+<translation id="1167268268675672572">Mou al començament de la línia i modifica la selecció</translation>
 <translation id="6965382102122355670">D'acord</translation>
 <translation id="7850320739366109486">No molesteu</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> days ago</translation>
diff --git a/ui/base/strings/ui_strings_cs.xtb b/ui/base/strings/ui_strings_cs.xtb
index e26b1f2..ece04e7 100644
--- a/ui/base/strings/ui_strings_cs.xtb
+++ b/ui/base/strings/ui_strings_cs.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> B</translation>
 <translation id="3660179305079774227">Klávesa šipka nahoru</translation>
+<translation id="3969863827134279083">Přesunout nahoru</translation>
 <translation id="7062130397825382308">Zbývá <ph name="NUMBER_ONE"/> sekunda</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> MB/s</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> hod</translation>
 <translation id="3990502903496589789">Pravý okraj</translation>
 <translation id="9038489124413477075">Nepojmenovaná složka</translation>
+<translation id="1940483897317142625">Smazat do konce řádku</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/> minut</translation>
 <translation id="3520476450377425184">Zbývá: <ph name="NUMBER_MANY"/> dnů</translation>
 <translation id="932327136139879170">Domů</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011">Před <ph name="NUMBER_FEW"/> dny</translation>
 <translation id="5076340679995252485">Vložit</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> TB</translation>
+<translation id="7139614227326422685">Přesunout slovo doprava</translation>
 <translation id="364720409959344976">Vyberte složku pro nahrávání</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016"><ph name="NUMBER_TWO"/> mins ago</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">Zavřít oznámení</translation>
 <translation id="6364916375976753737">Posuv doleva</translation>
 <translation id="2629089419211541119">Před <ph name="NUMBER_ONE"/> hodinou</translation>
+<translation id="4218160142017529598">Smazat zpět</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> min</translation>
 <translation id="6982279413068714821">před <ph name="NUMBER_DEFAULT"/> minutami</translation>
 <translation id="6945221475159498467">Vybrat</translation>
 <translation id="6620110761915583480">Uložit soubor</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> s</translation>
+<translation id="8924469368910458384">Smazat k začátku řádku</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> hours</translation>
 <translation id="7836361698254323868">Zbývá <ph name="NUMBER_ONE"/> minuta</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> min</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863"><ph name="NUMBER_MANY"/> dnů</translation>
 <translation id="7163503212501929773">Zbývá: <ph name="NUMBER_MANY"/> hod</translation>
 <translation id="5329858601952122676">&amp;Smazat</translation>
+<translation id="6556866813142980365">Opakovat</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> s</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> kB</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> min</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> min</translation>
 <translation id="50960180632766478">Zbývá: <ph name="NUMBER_FEW"/> min</translation>
 <translation id="5517291721709019259">Zbývají <ph name="NUMBER_FEW"/> sekundy</translation>
+<translation id="6903282483217634857">Přesunout doprava</translation>
 <translation id="6659594942844771486">Karta</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> MB</translation>
 <translation id="4988273303304146523">Před <ph name="NUMBER_DEFAULT"/> dny</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/> min</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> hours left</translation>
 <translation id="7135556860107312402">Povolit oznámení z následujících zdrojů:</translation>
+<translation id="2479520428668657293">Přesunout doprava a změnit výběr</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/> hod</translation>
 <translation id="1398853756734560583">Maximalizovat</translation>
 <translation id="4250229828105606438">Snímek obrazovky</translation>
 <translation id="6690744523875189208"><ph name="NUMBER_TWO"/> hod</translation>
 <translation id="5260878308685146029">Zbývá: <ph name="NUMBER_TWO"/> min</translation>
+<translation id="2557207087669398617">Přesunout na začátek řádku</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> GB</translation>
 <translation id="1901303067676059328">&amp;Vybrat vše</translation>
 <translation id="2168039046890040389">Klávesa PageUp</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> mins</translation>
 <translation id="9107059250669762581"><ph name="NUMBER_DEFAULT"/> dnů</translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> min</translation>
+<translation id="6122334925474904337">Přesunout slovo doprava a změnit výběr</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> min</translation>
 <translation id="8448317557906454022"><ph name="NUMBER_ZERO"/> secs ago</translation>
 <translation id="4927753642311223124">Tady není nic k vidění, rozejděte se.</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> days</translation>
 <translation id="3183922693828471536">Posunout sem</translation>
 <translation id="4552416320897244156">Klávesa PgDwn</translation>
+<translation id="3066573403916685335">Posunout dolů</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/> hod</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> kB/s</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780">Zbývá: <ph name="NUMBER_ONE"/> hod</translation>
 <translation id="1413622004203049571">Deaktivovat oznámení ze služby <ph name="NOTIFIER_NAME"/></translation>
 <translation id="2666092431469916601">Nahoru</translation>
+<translation id="2538759511191347839">Přesunout na konec řádku a změnit výběr</translation>
+<translation id="928465423150706909">Přesunout na konec řádku</translation>
 <translation id="8331626408530291785">Posuv nahoru</translation>
 <translation id="7907591526440419938">Otevřít soubor</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> days left</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">Média – zastavit</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> mins left</translation>
 <translation id="3157931365184549694">Obnovit</translation>
+<translation id="5349525451964472598">Přesunout doleva a upravit výběr</translation>
+<translation id="1781701194097416995">Přesunout slovo doleva</translation>
 <translation id="1243314992276662751">Nahrát</translation>
 <translation id="50030952220075532">Zbývá: <ph name="NUMBER_ONE"/> den</translation>
 <translation id="8179976553408161302">Začít</translation>
+<translation id="8471049483003785219">Přesunout slovo doleva a upravit výběr</translation>
 <translation id="945522503751344254">Odeslat zpětnou vazbu</translation>
 <translation id="9170848237812810038">Z&amp;pět</translation>
 <translation id="1285266685456062655">Před <ph name="NUMBER_FEW"/> hodinami</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> hours ago</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> GB/s</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/> den</translation>
+<translation id="2704295676501803339">Přesunout doleva</translation>
 <translation id="9098468523912235228">Před <ph name="NUMBER_DEFAULT"/> sekundami</translation>
 <translation id="494645311413743213">Zbývá: <ph name="NUMBER_TWO"/> s</translation>
 <translation id="4570886800634958009">Rozbalit oznámení</translation>
+<translation id="566737009157135450">Smazat slovo zpět</translation>
 <translation id="436869212180315161">Tisk</translation>
 <translation id="4860787810836767172">Před <ph name="NUMBER_FEW"/> sekundami</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> TB/s</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497"><ph name="NUMBER_MANY"/> mins ago</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> B/s</translation>
 <translation id="7649070708921625228">Nápověda</translation>
+<translation id="2405367043325750948">Smazat vpřed</translation>
 <translation id="6699343763173986273">Média – další skladba</translation>
 <translation id="5445120697129764393">Zbývá <ph name="NUMBER_DEFAULT"/> sekund</translation>
 <translation id="8226233771743600312">Nerušit jeden den</translation>
+<translation id="4252565523989510616">Smazat slovo vpřed</translation>
 <translation id="7457942297256758195">Vymazat vše</translation>
 <translation id="822618367988303761"><ph name="NUMBER_TWO"/> days ago</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> min</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> PB/s</translation>
 <translation id="2743387203779672305">Zkopírovat do schránky</translation>
 <translation id="8371695176452482769">Mluvte</translation>
+<translation id="1167268268675672572">Přesunout na začátek řádku a upravit výběr</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7850320739366109486">Nerušit</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> days ago</translation>
diff --git a/ui/base/strings/ui_strings_da.xtb b/ui/base/strings/ui_strings_da.xtb
index bd40433..e5afe75 100644
--- a/ui/base/strings/ui_strings_da.xtb
+++ b/ui/base/strings/ui_strings_da.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> B</translation>
 <translation id="3660179305079774227">Pil opad</translation>
+<translation id="3969863827134279083">Flyt op</translation>
 <translation id="7062130397825382308"><ph name="NUMBER_ONE"/> sekund tilbage</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> MB/sek.</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> timer</translation>
 <translation id="3990502903496589789">Højre kant</translation>
 <translation id="9038489124413477075">Unavngiven mappe</translation>
+<translation id="1940483897317142625">Slet til slutningen af linjen</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/> minutter</translation>
 <translation id="3520476450377425184"><ph name="NUMBER_MANY"/> dage tilbage</translation>
 <translation id="932327136139879170">Start</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011"><ph name="NUMBER_FEW"/> dage siden</translation>
 <translation id="5076340679995252485">&amp;Indsæt</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> TB</translation>
+<translation id="7139614227326422685">Flyt til højre efter ordet</translation>
 <translation id="364720409959344976">Vælg den mappe, der skal uploades</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016"><ph name="NUMBER_TWO"/> minutter siden</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">Luk underretning</translation>
 <translation id="6364916375976753737">Scroll Left</translation>
 <translation id="2629089419211541119"><ph name="NUMBER_ONE"/> time siden</translation>
+<translation id="4218160142017529598">Slet bagud</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> minutter</translation>
 <translation id="6982279413068714821"><ph name="NUMBER_DEFAULT"/> minutter siden</translation>
 <translation id="6945221475159498467">Vælg</translation>
 <translation id="6620110761915583480">Gem fil</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> sekunder</translation>
+<translation id="8924469368910458384">Slet til begyndelsen af linjen</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> hours</translation>
 <translation id="7836361698254323868"><ph name="NUMBER_ONE"/> minut tilbage</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> min.</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863"><ph name="NUMBER_MANY"/> dage</translation>
 <translation id="7163503212501929773"><ph name="NUMBER_MANY"/> timer tilbage</translation>
 <translation id="5329858601952122676">&amp;Slet</translation>
+<translation id="6556866813142980365">Gør det igen</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> sek.</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> kB</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> minutter</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> minutter</translation>
 <translation id="50960180632766478"><ph name="NUMBER_FEW"/> minutter tilbage</translation>
 <translation id="5517291721709019259"><ph name="NUMBER_FEW"/> sekunder tilbage</translation>
+<translation id="6903282483217634857">Flyt til højre</translation>
 <translation id="6659594942844771486">Fane</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> MB</translation>
 <translation id="4988273303304146523"><ph name="NUMBER_DEFAULT"/> dage siden</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/> minutter</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> hours left</translation>
 <translation id="7135556860107312402">Tillad underretninger fra følgende:</translation>
+<translation id="2479520428668657293">Flyt til højre, og rediger markering</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/> timer</translation>
 <translation id="1398853756734560583">Maksimer</translation>
 <translation id="4250229828105606438">Skærmbillede</translation>
 <translation id="6690744523875189208"><ph name="NUMBER_TWO"/> timer</translation>
 <translation id="5260878308685146029"><ph name="NUMBER_TWO"/> minutter tilbage</translation>
+<translation id="2557207087669398617">Flyt til begyndelsen af linjen</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> GB</translation>
 <translation id="1901303067676059328">Vælg &amp;alle</translation>
 <translation id="2168039046890040389">Side op</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> mins</translation>
 <translation id="9107059250669762581"><ph name="NUMBER_DEFAULT"/> dage</translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> minutter</translation>
+<translation id="6122334925474904337">Flyt ordet til højre, og rediger markering</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> minut</translation>
 <translation id="8448317557906454022"><ph name="NUMBER_ZERO"/> sekunder siden</translation>
 <translation id="4927753642311223124">Der er intet at se her, så du kan bare gå videre.</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> days</translation>
 <translation id="3183922693828471536">Scroll hertil</translation>
 <translation id="4552416320897244156">PgDwn</translation>
+<translation id="3066573403916685335">Flyt ned</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/> timer</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> kB/sek.</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780"><ph name="NUMBER_ONE"/> timer tilbage</translation>
 <translation id="1413622004203049571">Deaktiver underretninger fra <ph name="NOTIFIER_NAME"/></translation>
 <translation id="2666092431469916601">Top</translation>
+<translation id="2538759511191347839">Flyt til slutningen af ​​linjen, og rediger markering</translation>
+<translation id="928465423150706909">Flyt til slutningen af ​​linjen</translation>
 <translation id="8331626408530291785">Scroll Up</translation>
 <translation id="7907591526440419938">Åbn fil</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> days left</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">Medie: Stop</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> mins left</translation>
 <translation id="3157931365184549694">Gendan</translation>
+<translation id="5349525451964472598">Flyt til venstre, og rediger markering</translation>
+<translation id="1781701194097416995">Flyt til venstre efter ordet</translation>
 <translation id="1243314992276662751">Upload</translation>
 <translation id="50030952220075532"><ph name="NUMBER_ONE"/> dage tilbage</translation>
 <translation id="8179976553408161302">Start</translation>
+<translation id="8471049483003785219">Flyt ord til venstre, og rediger markering</translation>
 <translation id="945522503751344254">Send feedback</translation>
 <translation id="9170848237812810038">&amp;Fortryd</translation>
 <translation id="1285266685456062655"><ph name="NUMBER_FEW"/> timer siden</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> hours ago</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> GB/sek.</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/>dag</translation>
+<translation id="2704295676501803339">Flyt til vestre</translation>
 <translation id="9098468523912235228"><ph name="NUMBER_DEFAULT"/> sekunder siden</translation>
 <translation id="494645311413743213"><ph name="NUMBER_TWO"/> sek. tilbage</translation>
 <translation id="4570886800634958009">Udvid underretning</translation>
+<translation id="566737009157135450">Slet baglæns med et ord</translation>
 <translation id="436869212180315161">Tryk</translation>
 <translation id="4860787810836767172"><ph name="NUMBER_FEW"/> sekunder siden</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> TB/sek.</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497"><ph name="NUMBER_MANY"/> minutter siden</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> B/sek.</translation>
 <translation id="7649070708921625228">Hjælp</translation>
+<translation id="2405367043325750948">Slet fremad</translation>
 <translation id="6699343763173986273">Medie: Næste nummer</translation>
 <translation id="5445120697129764393"><ph name="NUMBER_DEFAULT"/> sekunder tilbage</translation>
 <translation id="8226233771743600312">Vil ikke forstyrres i et døgn</translation>
+<translation id="4252565523989510616">Slet fremad med et ord</translation>
 <translation id="7457942297256758195">Ryd alle</translation>
 <translation id="822618367988303761"><ph name="NUMBER_TWO"/> dage siden</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> minutter</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> PB/sek.</translation>
 <translation id="2743387203779672305">Kopiér til udklipsholderen</translation>
 <translation id="8371695176452482769">Indtal nu</translation>
+<translation id="1167268268675672572">Flyt til begyndelsen af linjen, og rediger markering</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7850320739366109486">Vil ikke forstyrres</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> days ago</translation>
diff --git a/ui/base/strings/ui_strings_de.xtb b/ui/base/strings/ui_strings_de.xtb
index 39c0099..4062ce5 100644
--- a/ui/base/strings/ui_strings_de.xtb
+++ b/ui/base/strings/ui_strings_de.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> B</translation>
 <translation id="3660179305079774227">Aufwärtspfeil</translation>
+<translation id="3969863827134279083">Nach oben</translation>
 <translation id="7062130397825382308">Noch <ph name="NUMBER_ONE"/> Sekunde</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> MB/s</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> Stunden</translation>
 <translation id="3990502903496589789">Rechter Rand</translation>
 <translation id="9038489124413477075">Unbenannter Ordner</translation>
+<translation id="1940483897317142625">Bis zum Zeilenende löschen</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/> Minuten</translation>
 <translation id="3520476450377425184"><ph name="NUMBER_MANY"/> Tage übrig</translation>
 <translation id="932327136139879170">Startseite</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011"><ph name="NUMBER_FEW"/> days ago</translation>
 <translation id="5076340679995252485">&amp;Einfügen</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> TB</translation>
+<translation id="7139614227326422685">Ein Wort nach rechts</translation>
 <translation id="364720409959344976">Ordner zum Hochladen auswählen</translation>
 <translation id="4999762576397546063">Strg+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016"><ph name="NUMBER_TWO"/> mins ago</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">Benachrichtigung schließen</translation>
 <translation id="6364916375976753737">Nach links blättern</translation>
 <translation id="2629089419211541119">Vor <ph name="NUMBER_ONE"/> Stunde</translation>
+<translation id="4218160142017529598">Letztes Zeichen löschen</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> Minuten</translation>
 <translation id="6982279413068714821">Vor <ph name="NUMBER_DEFAULT"/> Minuten</translation>
 <translation id="6945221475159498467">Auswählen</translation>
 <translation id="6620110761915583480">Datei speichern</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> Sekunden</translation>
+<translation id="8924469368910458384">Bis zum Zeilenanfang löschen</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> hours</translation>
 <translation id="7836361698254323868">Noch <ph name="NUMBER_ONE"/> Minute</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> Minute</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863"><ph name="NUMBER_MANY"/> Tage</translation>
 <translation id="7163503212501929773"><ph name="NUMBER_MANY"/> Stunden übrig</translation>
 <translation id="5329858601952122676">&amp;Löschen</translation>
+<translation id="6556866813142980365">Wiederholen</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> Sekunden</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> KB</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> Minuten</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> Minuten</translation>
 <translation id="50960180632766478"><ph name="NUMBER_FEW"/> Minuten übrig</translation>
 <translation id="5517291721709019259">Noch <ph name="NUMBER_FEW"/> Sekunden</translation>
+<translation id="6903282483217634857">Nach rechts</translation>
 <translation id="6659594942844771486">Tab</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> MB</translation>
 <translation id="4988273303304146523">Vor <ph name="NUMBER_DEFAULT"/> Tagen</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/> Minuten</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> hours left</translation>
 <translation id="7135556860107312402">Alle Benachrichtigungen zulassen von:</translation>
+<translation id="2479520428668657293">Nach rechts und Auswahl ändern</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/> Stunden</translation>
 <translation id="1398853756734560583">Vergrößern</translation>
 <translation id="4250229828105606438">Screenshot</translation>
 <translation id="6690744523875189208"><ph name="NUMBER_TWO"/> Stunden</translation>
 <translation id="5260878308685146029"><ph name="NUMBER_TWO"/> Minuten übrig</translation>
+<translation id="2557207087669398617">Zum Zeilenanfang</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> GB</translation>
 <translation id="1901303067676059328">&amp;Alles auswählen</translation>
 <translation id="2168039046890040389">Nach oben</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> mins</translation>
 <translation id="9107059250669762581"><ph name="NUMBER_DEFAULT"/> Tage</translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> Minuten</translation>
+<translation id="6122334925474904337">Ein Wort nach rechts und Auswahl ändern</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> Minute</translation>
 <translation id="8448317557906454022"><ph name="NUMBER_ZERO"/> secs ago</translation>
 <translation id="4927753642311223124">Sie haben keine Benachrichtigungen.</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> days</translation>
 <translation id="3183922693828471536">Hierher blättern</translation>
 <translation id="4552416320897244156">BildAb</translation>
+<translation id="3066573403916685335">Nach unten</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/> Stunden</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> KB/s</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780"><ph name="NUMBER_ONE"/> Stunde übrig</translation>
 <translation id="1413622004203049571">Benachrichtigungen von <ph name="NOTIFIER_NAME"/> deaktivieren</translation>
 <translation id="2666092431469916601">Oben</translation>
+<translation id="2538759511191347839">Zum Zeilenende und Auswahl ändern</translation>
+<translation id="928465423150706909">Zum Zeilenende</translation>
 <translation id="8331626408530291785">Nach oben blättern</translation>
 <translation id="7907591526440419938">Datei öffnen</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> days left</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">Medien – Stopp</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> mins left</translation>
 <translation id="3157931365184549694">Wiederherstellen</translation>
+<translation id="5349525451964472598">Nach links und Auswahl ändern</translation>
+<translation id="1781701194097416995">Ein Wort nach links</translation>
 <translation id="1243314992276662751">Hochladen</translation>
 <translation id="50030952220075532"><ph name="NUMBER_ONE"/> Tag übrig</translation>
 <translation id="8179976553408161302">Enter</translation>
+<translation id="8471049483003785219">Ein Wort nach links und Auswahl ändern</translation>
 <translation id="945522503751344254">Feedback geben</translation>
 <translation id="9170848237812810038">&amp;Rückgängig</translation>
 <translation id="1285266685456062655"><ph name="NUMBER_FEW"/> hours ago</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> hours ago</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> GB/s</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/> Tag</translation>
+<translation id="2704295676501803339">Nach links</translation>
 <translation id="9098468523912235228">Vor <ph name="NUMBER_DEFAULT"/> Sekunden</translation>
 <translation id="494645311413743213"><ph name="NUMBER_TWO"/> Sekunden übrig</translation>
 <translation id="4570886800634958009">Benachrichtigung anzeigen</translation>
+<translation id="566737009157135450">Letztes Wort löschen</translation>
 <translation id="436869212180315161">Klicken</translation>
 <translation id="4860787810836767172"><ph name="NUMBER_FEW"/> secs ago</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> TB/s</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497"><ph name="NUMBER_MANY"/> mins ago</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> Byte/s</translation>
 <translation id="7649070708921625228">Hilfe</translation>
+<translation id="2405367043325750948">Nächstes Zeichen löschen</translation>
 <translation id="6699343763173986273">Medien – nächster Titel</translation>
 <translation id="5445120697129764393">Noch <ph name="NUMBER_DEFAULT"/> Sekunden</translation>
 <translation id="8226233771743600312">1 Tag nicht stören</translation>
+<translation id="4252565523989510616">Nächstes Wort löschen</translation>
 <translation id="7457942297256758195">Alle löschen</translation>
 <translation id="822618367988303761"><ph name="NUMBER_TWO"/> days ago</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> Minuten</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> PB/s</translation>
 <translation id="2743387203779672305">In Zwischenablage kopieren</translation>
 <translation id="8371695176452482769">Jetzt sprechen</translation>
+<translation id="1167268268675672572">Zum Zeilenanfang und Auswahl ändern</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7850320739366109486">Nicht stören</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> days ago</translation>
diff --git a/ui/base/strings/ui_strings_el.xtb b/ui/base/strings/ui_strings_el.xtb
index c331a60..ff3650e 100644
--- a/ui/base/strings/ui_strings_el.xtb
+++ b/ui/base/strings/ui_strings_el.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> Β</translation>
 <translation id="3660179305079774227">Πάνω βέλος</translation>
+<translation id="3969863827134279083">Μετακίνηση επάνω</translation>
 <translation id="7062130397825382308">Απομένει <ph name="NUMBER_ONE"/> δευτερόλεπτο</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> MB/s</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> ώρες</translation>
 <translation id="3990502903496589789">Δεξιά άκρη</translation>
 <translation id="9038489124413477075">Φάκελος χωρίς όνομα</translation>
+<translation id="1940483897317142625">Διαγραφή έως το τέλος της γραμμής</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/> λεπτά</translation>
 <translation id="3520476450377425184">Υπολείπονται <ph name="NUMBER_MANY"/> ημέρες</translation>
 <translation id="932327136139879170">Αρχική σελίδα</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011">Πριν από <ph name="NUMBER_FEW"/> ημέρες</translation>
 <translation id="5076340679995252485">&amp;Επικόλληση</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> TB</translation>
+<translation id="7139614227326422685">Μετακίνηση στην επόμενη λέξη δεξιά</translation>
 <translation id="364720409959344976">Επιλέξτε φάκελο για μεταφόρτωση</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016">Πριν από <ph name="NUMBER_TWO"/> λεπτά</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">Κλείσιμο ειδοποίησης</translation>
 <translation id="6364916375976753737">Κύλιση αριστερά</translation>
 <translation id="2629089419211541119">Πριν από <ph name="NUMBER_ONE"/> ώρα</translation>
+<translation id="4218160142017529598">Διαγραφή προς τα πίσω</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> λεπτά</translation>
 <translation id="6982279413068714821">Πριν από <ph name="NUMBER_DEFAULT"/> λεπτά</translation>
 <translation id="6945221475159498467">Επιλογή</translation>
 <translation id="6620110761915583480">Αποθήκευση Αρχείου</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> δευτερόλεπτα</translation>
+<translation id="8924469368910458384">Διαγραφή έως την αρχή της γραμμής</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> hours</translation>
 <translation id="7836361698254323868">Υπολείπεται <ph name="NUMBER_ONE"/> λεπτό</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> λεπτό</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863"><ph name="NUMBER_MANY"/> ημέρες</translation>
 <translation id="7163503212501929773">Υπολείπονται <ph name="NUMBER_MANY"/> ώρες</translation>
 <translation id="5329858601952122676">&amp;Διαγραφή</translation>
+<translation id="6556866813142980365">Επανάληψη ενέργειας</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> δευτερόλεπτα</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> KB</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> λεπτά</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> λεπτά</translation>
 <translation id="50960180632766478">Υπολείπονται <ph name="NUMBER_FEW"/> λεπτά</translation>
 <translation id="5517291721709019259">Απομένουν <ph name="NUMBER_FEW"/> δευτερόλεπτα</translation>
+<translation id="6903282483217634857">Μετακίνηση δεξιά</translation>
 <translation id="6659594942844771486">Καρτέλα</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> MB</translation>
 <translation id="4988273303304146523">Πριν από <ph name="NUMBER_DEFAULT"/> ημέρες</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/> λεπτά</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> hours left</translation>
 <translation id="7135556860107312402">Να επιτρέπονται ειδοποιήσεις από:</translation>
+<translation id="2479520428668657293">Μετακίνηση δεξιά και τροποποίηση επιλογής</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/> ώρες</translation>
 <translation id="1398853756734560583">Μεγιστοποίηση</translation>
 <translation id="4250229828105606438">Στιγμιότυπο οθόνης</translation>
 <translation id="6690744523875189208"><ph name="NUMBER_TWO"/> ώρες</translation>
 <translation id="5260878308685146029">Υπολείπονται <ph name="NUMBER_TWO"/> λεπτά</translation>
+<translation id="2557207087669398617">Μετακίνηση στην αρχή της γραμμής</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> GB</translation>
 <translation id="1901303067676059328">Επιλογή όλ&amp;ων</translation>
 <translation id="2168039046890040389">Προηγούμενη σελίδα</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> mins</translation>
 <translation id="9107059250669762581"><ph name="NUMBER_DEFAULT"/> ημέρες</translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> λεπτά</translation>
+<translation id="6122334925474904337">Μετακίνηση στην επόμενη λέξη δεξιά και τροποποίηση επιλογής</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> λεπτό</translation>
 <translation id="8448317557906454022">Πριν από <ph name="NUMBER_ZERO"/> δευτερόλεπτα</translation>
 <translation id="4927753642311223124">Δεν υπάρχει τίποτα να δείτε εδώ, συνεχίστε με αυτό που κάνατε.</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> days</translation>
 <translation id="3183922693828471536">Κύλιση εδώ</translation>
 <translation id="4552416320897244156">PgDwn</translation>
+<translation id="3066573403916685335">Μετακίνηση κάτω</translation>
 <translation id="7052633198403197513">Πλήκτρο F1</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/> ώρες</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> KB/s</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780">Υπολείπεται <ph name="NUMBER_ONE"/> ώρα</translation>
 <translation id="1413622004203049571">Απενεργοποίηση ειδοποιήσεων από <ph name="NOTIFIER_NAME"/></translation>
 <translation id="2666092431469916601">Κορυφή</translation>
+<translation id="2538759511191347839">Μετακίνηση στο τέλος της γραμμής και τροποποίηση επιλογής</translation>
+<translation id="928465423150706909">Μετακίνηση στο τέλος της γραμμής</translation>
 <translation id="8331626408530291785">Κύλιση επάνω</translation>
 <translation id="7907591526440419938">Άνοιγμα Αρχείου</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> days left</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">Διακοπή πολυμέσων</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> mins left</translation>
 <translation id="3157931365184549694">Επαναφορά</translation>
+<translation id="5349525451964472598">Μετακίνηση αριστερά και τροποποίηση επιλογής</translation>
+<translation id="1781701194097416995">Μετακίνηση στην προηγούμενη λέξη προς τα αριστερά</translation>
 <translation id="1243314992276662751">Μεταφόρτωση</translation>
 <translation id="50030952220075532">Υπολείπεται <ph name="NUMBER_ONE"/> ημέρα</translation>
 <translation id="8179976553408161302">Είσοδος</translation>
+<translation id="8471049483003785219">Μετακίνηση στην προηγούμενη λέξη προς τα αριστερά και τροποποίηση επιλογής</translation>
 <translation id="945522503751344254">Αποστολή σχολίων</translation>
 <translation id="9170848237812810038">Αναί&amp;ρεση</translation>
 <translation id="1285266685456062655">Πριν από <ph name="NUMBER_FEW"/> ώρες</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> hours ago</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> GB/s</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/> ημέρα</translation>
+<translation id="2704295676501803339">Μετακίνηση αριστερά</translation>
 <translation id="9098468523912235228">Πριν από <ph name="NUMBER_DEFAULT"/> δευτερόλεπτα</translation>
 <translation id="494645311413743213">Υπολείπονται <ph name="NUMBER_TWO"/> δευτερόλεπτα</translation>
 <translation id="4570886800634958009">Επέκταση ειδοποίησης</translation>
+<translation id="566737009157135450">Διαγραφή λέξης προς τα πίσω</translation>
 <translation id="436869212180315161">Πιέστε</translation>
 <translation id="4860787810836767172">Πριν από <ph name="NUMBER_FEW"/> δευτερόλεπτα</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> TB/s</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497">Πριν από <ph name="NUMBER_MANY"/> λεπτά</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> B/s</translation>
 <translation id="7649070708921625228">Βοήθεια</translation>
+<translation id="2405367043325750948">Διαγραφή προς τα εμπρός</translation>
 <translation id="6699343763173986273">Επόμενο κομμάτι πολυμέσων</translation>
 <translation id="5445120697129764393">Απομένουν <ph name="NUMBER_DEFAULT"/> δευτερόλεπτα</translation>
 <translation id="8226233771743600312">Μην ενοχλείτε για μία ημέρα</translation>
+<translation id="4252565523989510616">Διαγραφή επόμενης λέξης προς τα εμπρός</translation>
 <translation id="7457942297256758195">Εκκαθάριση όλων</translation>
 <translation id="822618367988303761">Πριν από <ph name="NUMBER_TWO"/> ημέρες</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> λεπτά</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> PB/s</translation>
 <translation id="2743387203779672305">Αντιγραφή στο πρόχειρο</translation>
 <translation id="8371695176452482769">Μιλήστε τώρα</translation>
+<translation id="1167268268675672572">Μετακίνηση στην αρχή της γραμμής και τροποποίηση επιλογής</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7850320739366109486">Μην ενοχλείτε</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> days ago</translation>
diff --git a/ui/base/strings/ui_strings_en-GB.xtb b/ui/base/strings/ui_strings_en-GB.xtb
index cb6de0b..5c5aa58 100644
--- a/ui/base/strings/ui_strings_en-GB.xtb
+++ b/ui/base/strings/ui_strings_en-GB.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> B</translation>
 <translation id="3660179305079774227">Up Arrow</translation>
+<translation id="3969863827134279083">Move Up</translation>
 <translation id="7062130397825382308"><ph name="NUMBER_ONE"/> second left</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> MB/s</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> hours</translation>
 <translation id="3990502903496589789">Right Edge</translation>
 <translation id="9038489124413477075">Unnamed Folder</translation>
+<translation id="1940483897317142625">Delete To End Of Line</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/> mins</translation>
 <translation id="3520476450377425184"><ph name="NUMBER_MANY"/> days left</translation>
 <translation id="932327136139879170">Home</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011"><ph name="NUMBER_FEW"/> days ago</translation>
 <translation id="5076340679995252485">&amp;Paste</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> TB</translation>
+<translation id="7139614227326422685">Move Word Right</translation>
 <translation id="364720409959344976">Select Folder to Upload</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016"><ph name="NUMBER_TWO"/> mins ago</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">Notification close</translation>
 <translation id="6364916375976753737">Scroll Left</translation>
 <translation id="2629089419211541119"><ph name="NUMBER_ONE"/> hour ago</translation>
+<translation id="4218160142017529598">Delete Backward</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> minutes</translation>
 <translation id="6982279413068714821"><ph name="NUMBER_DEFAULT"/> mins ago</translation>
 <translation id="6945221475159498467">Select</translation>
 <translation id="6620110761915583480">Save File</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> seconds</translation>
+<translation id="8924469368910458384">Delete To Beginning Of Line</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> hours</translation>
 <translation id="7836361698254323868"><ph name="NUMBER_ONE"/> minute left</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> min</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863"><ph name="NUMBER_MANY"/> days</translation>
 <translation id="7163503212501929773"><ph name="NUMBER_MANY"/> hours left</translation>
 <translation id="5329858601952122676">&amp;Delete</translation>
+<translation id="6556866813142980365">Redo</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> secs</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> KB</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> minutes</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> minutes</translation>
 <translation id="50960180632766478"><ph name="NUMBER_FEW"/> mins left</translation>
 <translation id="5517291721709019259"><ph name="NUMBER_FEW"/> seconds left</translation>
+<translation id="6903282483217634857">Move Right</translation>
 <translation id="6659594942844771486">Tab</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> MB</translation>
 <translation id="4988273303304146523"><ph name="NUMBER_DEFAULT"/> days ago</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/> mins</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> hours left</translation>
 <translation id="7135556860107312402">Allow notifications from the following:</translation>
+<translation id="2479520428668657293">Move Right And Modify Selection</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/> hours</translation>
 <translation id="1398853756734560583">Maximise</translation>
 <translation id="4250229828105606438">Screenshot</translation>
 <translation id="6690744523875189208"><ph name="NUMBER_TWO"/> hours</translation>
 <translation id="5260878308685146029"><ph name="NUMBER_TWO"/> mins left</translation>
+<translation id="2557207087669398617">Move To Beginning Of Line</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> GB</translation>
 <translation id="1901303067676059328">Select &amp;all</translation>
 <translation id="2168039046890040389">Page Up</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> mins</translation>
 <translation id="9107059250669762581"><ph name="NUMBER_DEFAULT"/> days</translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> mins</translation>
+<translation id="6122334925474904337">Move Word Right And Modify Selection</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> minute</translation>
 <translation id="8448317557906454022"><ph name="NUMBER_ZERO"/> secs ago</translation>
 <translation id="4927753642311223124">Nothing to see here, move along.</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> days</translation>
 <translation id="3183922693828471536">Scroll to Here</translation>
 <translation id="4552416320897244156">PgDwn</translation>
+<translation id="3066573403916685335">Move Down</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/> hours</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> KB/s</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780"><ph name="NUMBER_ONE"/> hour left</translation>
 <translation id="1413622004203049571">Disable notifications from <ph name="NOTIFIER_NAME"/></translation>
 <translation id="2666092431469916601">Top</translation>
+<translation id="2538759511191347839">Move To End Of Line And Modify Selection</translation>
+<translation id="928465423150706909">Move To End Of Line</translation>
 <translation id="8331626408530291785">Scroll Up</translation>
 <translation id="7907591526440419938">Open File</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> days left</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">Media Stop</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> mins left</translation>
 <translation id="3157931365184549694">Restore</translation>
+<translation id="5349525451964472598">Move Left And Modify Selection</translation>
+<translation id="1781701194097416995">Move Word Left</translation>
 <translation id="1243314992276662751">Upload</translation>
 <translation id="50030952220075532"><ph name="NUMBER_ONE"/> day left</translation>
 <translation id="8179976553408161302">Enter</translation>
+<translation id="8471049483003785219">Move Word Left And Modify Selection</translation>
 <translation id="945522503751344254">Send feedback</translation>
 <translation id="9170848237812810038">&amp;Undo</translation>
 <translation id="1285266685456062655"><ph name="NUMBER_FEW"/> hours ago</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> hours ago</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> GB/s</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/> day</translation>
+<translation id="2704295676501803339">Move Left</translation>
 <translation id="9098468523912235228"><ph name="NUMBER_DEFAULT"/> secs ago</translation>
 <translation id="494645311413743213"><ph name="NUMBER_TWO"/> secs left</translation>
 <translation id="4570886800634958009">Notification expand</translation>
+<translation id="566737009157135450">Delete Word Backward</translation>
 <translation id="436869212180315161">Press</translation>
 <translation id="4860787810836767172"><ph name="NUMBER_FEW"/> secs ago</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> TB/s</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497"><ph name="NUMBER_MANY"/> mins ago</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> B/s</translation>
 <translation id="7649070708921625228">Help</translation>
+<translation id="2405367043325750948">Delete Forward</translation>
 <translation id="6699343763173986273">Media Next Track</translation>
 <translation id="5445120697129764393"><ph name="NUMBER_DEFAULT"/> seconds left</translation>
 <translation id="8226233771743600312">Do not disturb for one day</translation>
+<translation id="4252565523989510616">Delete Word Forward</translation>
 <translation id="7457942297256758195">Clear All</translation>
 <translation id="822618367988303761"><ph name="NUMBER_TWO"/> days ago</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> mins</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> PB/s</translation>
 <translation id="2743387203779672305">Copy to clipboard</translation>
 <translation id="8371695176452482769">Speak now</translation>
+<translation id="1167268268675672572">Move To Beginning Of Line And Modify Selection</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7850320739366109486">Do Not Disturb</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> days ago</translation>
diff --git a/ui/base/strings/ui_strings_es-419.xtb b/ui/base/strings/ui_strings_es-419.xtb
index 79b04ff..903cb8c 100644
--- a/ui/base/strings/ui_strings_es-419.xtb
+++ b/ui/base/strings/ui_strings_es-419.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> B</translation>
 <translation id="3660179305079774227">Flecha arriba</translation>
+<translation id="3969863827134279083">Subir</translation>
 <translation id="7062130397825382308">Falta <ph name="NUMBER_ONE"/> segundo.</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> de MB</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> horas</translation>
 <translation id="3990502903496589789">Borde derecho</translation>
 <translation id="9038489124413477075">Carpeta sin nombre</translation>
+<translation id="1940483897317142625">Eliminar hasta el final de la línea</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/> minutos</translation>
 <translation id="3520476450377425184">Faltan <ph name="NUMBER_MANY"/> días</translation>
 <translation id="932327136139879170">Inicio</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011">Hace <ph name="NUMBER_FEW"/> días</translation>
 <translation id="5076340679995252485">&amp;Pegar</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> TB</translation>
+<translation id="7139614227326422685">Mover una palabra a la derecha</translation>
 <translation id="364720409959344976">Seleccionar carpeta para cargar</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016">Hace <ph name="NUMBER_TWO"/> minutos</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">Cerrar notificación</translation>
 <translation id="6364916375976753737">Desplazar hacia la izquierda</translation>
 <translation id="2629089419211541119">Hace <ph name="NUMBER_ONE"/> hora</translation>
+<translation id="4218160142017529598">Eliminar anterior</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> minutos</translation>
 <translation id="6982279413068714821">Hace <ph name="NUMBER_DEFAULT"/> minutos</translation>
 <translation id="6945221475159498467">Seleccionar</translation>
 <translation id="6620110761915583480">Guardar archivo</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> seconds</translation>
+<translation id="8924469368910458384">Eliminar hasta el principio de la línea</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> hours</translation>
 <translation id="7836361698254323868">Falta <ph name="NUMBER_ONE"/> minuto.</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> min</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863"><ph name="NUMBER_MANY"/> días</translation>
 <translation id="7163503212501929773">Faltan <ph name="NUMBER_MANY"/> horas</translation>
 <translation id="5329858601952122676">&amp;Suprimir</translation>
+<translation id="6556866813142980365">Rehacer</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> seg.</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> KB</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> minutes</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> minutes</translation>
 <translation id="50960180632766478">Faltan <ph name="NUMBER_FEW"/> minutos</translation>
 <translation id="5517291721709019259">Faltan <ph name="NUMBER_FEW"/> segundos.</translation>
+<translation id="6903282483217634857">Mover hacia la derecha</translation>
 <translation id="6659594942844771486">Pestaña</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> MB</translation>
 <translation id="4988273303304146523">Hace <ph name="NUMBER_DEFAULT"/> días</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/> minutos</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> hours left</translation>
 <translation id="7135556860107312402">Permitir notificaciones de:</translation>
+<translation id="2479520428668657293">Mover hacia la derecha y modificar selección</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/> horas</translation>
 <translation id="1398853756734560583">Maximizar</translation>
 <translation id="4250229828105606438">Captura de pantalla</translation>
 <translation id="6690744523875189208"><ph name="NUMBER_TWO"/> horas</translation>
 <translation id="5260878308685146029">Faltan <ph name="NUMBER_TWO"/> minutos</translation>
+<translation id="2557207087669398617">Mover hasta el principio de la línea</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> GB</translation>
 <translation id="1901303067676059328">Seleccionar &amp;todo</translation>
 <translation id="2168039046890040389">Retroceder página</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> mins</translation>
 <translation id="9107059250669762581"><ph name="NUMBER_DEFAULT"/> días</translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> minutos</translation>
+<translation id="6122334925474904337">Mover una palabra hacia la derecha y modificar selección</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> minuto</translation>
 <translation id="8448317557906454022">Hace <ph name="NUMBER_ZERO"/> segundos</translation>
 <translation id="4927753642311223124">No hay ningún elemento que mostrar.</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> days</translation>
 <translation id="3183922693828471536">Desplazarse hasta aquí</translation>
 <translation id="4552416320897244156">AvPág</translation>
+<translation id="3066573403916685335">Bajar</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/> horas</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> KB/s</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780">Falta <ph name="NUMBER_ONE"/> hora</translation>
 <translation id="1413622004203049571">Inhabilitar notificaciones de <ph name="NOTIFIER_NAME"/></translation>
 <translation id="2666092431469916601">Superior</translation>
+<translation id="2538759511191347839">Mover hasta el final de la línea y modificar selección</translation>
+<translation id="928465423150706909">Mover hasta el final de la línea</translation>
 <translation id="8331626408530291785">Desplazar hacia arriba</translation>
 <translation id="7907591526440419938">Abrir archivo</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> days left</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">Detener contenido multimedia</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> mins left</translation>
 <translation id="3157931365184549694">Restaurar</translation>
+<translation id="5349525451964472598">Mover hacia la izquierda y modificar selección</translation>
+<translation id="1781701194097416995">Mover una palabra a la izquierda</translation>
 <translation id="1243314992276662751">Cargar</translation>
 <translation id="50030952220075532">Falta <ph name="NUMBER_ONE"/> día</translation>
 <translation id="8179976553408161302">Entrar</translation>
+<translation id="8471049483003785219">Mover una palabra a la izquierda y modificar selección</translation>
 <translation id="945522503751344254">Enviar comentarios</translation>
 <translation id="9170848237812810038">&amp;Deshacer</translation>
 <translation id="1285266685456062655">Hace <ph name="NUMBER_FEW"/> horas</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> hours ago</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> GB/s</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/> día</translation>
+<translation id="2704295676501803339">Mover hacia la izquierda</translation>
 <translation id="9098468523912235228">Hace <ph name="NUMBER_DEFAULT"/> segundos</translation>
 <translation id="494645311413743213">Faltan <ph name="NUMBER_TWO"/> segundos</translation>
 <translation id="4570886800634958009">Ampliar notificación</translation>
+<translation id="566737009157135450">Eliminar palabra anterior</translation>
 <translation id="436869212180315161">Hacer clic</translation>
 <translation id="4860787810836767172">Hace <ph name="NUMBER_FEW"/> segundos</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> TB/s</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497">Hace <ph name="NUMBER_MANY"/> minutos</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> B/s</translation>
 <translation id="7649070708921625228">Ayuda</translation>
+<translation id="2405367043325750948">Eliminar siguiente</translation>
 <translation id="6699343763173986273">Pista multimedia siguiente</translation>
 <translation id="5445120697129764393">Faltan <ph name="NUMBER_DEFAULT"/> segundos.</translation>
 <translation id="8226233771743600312">No molestar durante un día</translation>
+<translation id="4252565523989510616">Eliminar palabra siguiente</translation>
 <translation id="7457942297256758195">Borrar todo</translation>
 <translation id="822618367988303761">Hace <ph name="NUMBER_TWO"/> días</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> minutos</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> PB/s</translation>
 <translation id="2743387203779672305">Copiar al portapapeles</translation>
 <translation id="8371695176452482769">Hablar ahora</translation>
+<translation id="1167268268675672572">Mover hasta el principio de la línea y modificar selección</translation>
 <translation id="6965382102122355670">Aceptar</translation>
 <translation id="7850320739366109486">No molestar</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> days ago</translation>
diff --git a/ui/base/strings/ui_strings_es.xtb b/ui/base/strings/ui_strings_es.xtb
index 93a6ca6..295f3a3 100644
--- a/ui/base/strings/ui_strings_es.xtb
+++ b/ui/base/strings/ui_strings_es.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> B</translation>
 <translation id="3660179305079774227">Flecha arriba</translation>
+<translation id="3969863827134279083">Mover hacia arriba</translation>
 <translation id="7062130397825382308">Queda <ph name="NUMBER_ONE"/> segundo</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> MB/s</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> horas</translation>
 <translation id="3990502903496589789">Borde derecho</translation>
 <translation id="9038489124413477075">Carpeta sin nombre</translation>
+<translation id="1940483897317142625">Eliminar hasta el final de la línea</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/> minutos</translation>
 <translation id="3520476450377425184"><ph name="NUMBER_MANY"/> días restantes</translation>
 <translation id="932327136139879170">Inicio</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011">hace <ph name="NUMBER_FEW"/> días</translation>
 <translation id="5076340679995252485">&amp;Pegar</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> TB</translation>
+<translation id="7139614227326422685">Mover una palabra a la derecha</translation>
 <translation id="364720409959344976">Seleccionar una carpeta para subirla</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016">hace <ph name="NUMBER_TWO"/> minutos</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">Cerrar notificación</translation>
 <translation id="6364916375976753737">Desplazar hacia la izquierda</translation>
 <translation id="2629089419211541119">hace <ph name="NUMBER_ONE"/> hora</translation>
+<translation id="4218160142017529598">Eliminar anterior</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> minutos</translation>
 <translation id="6982279413068714821">hace <ph name="NUMBER_DEFAULT"/> minutos</translation>
 <translation id="6945221475159498467">Seleccionar</translation>
 <translation id="6620110761915583480">Guardar archivo</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> segundos</translation>
+<translation id="8924469368910458384">Eliminar hasta el inicio de la línea</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> hours</translation>
 <translation id="7836361698254323868">Queda <ph name="NUMBER_ONE"/> minuto</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> min</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863"><ph name="NUMBER_MANY"/> días</translation>
 <translation id="7163503212501929773"><ph name="NUMBER_MANY"/> horas restantes</translation>
 <translation id="5329858601952122676">&amp;Suprimir</translation>
+<translation id="6556866813142980365">Rehacer</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> seg.</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> KB</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> minutos</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> minutos</translation>
 <translation id="50960180632766478"><ph name="NUMBER_FEW"/> minutos restantes</translation>
 <translation id="5517291721709019259">Quedan <ph name="NUMBER_FEW"/> segundos</translation>
+<translation id="6903282483217634857">Mover hacia la derecha</translation>
 <translation id="6659594942844771486">Pestaña</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> MB</translation>
 <translation id="4988273303304146523">hace <ph name="NUMBER_DEFAULT"/> días</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/> minutos</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> hours left</translation>
 <translation id="7135556860107312402">Permitir notificaciones de:</translation>
+<translation id="2479520428668657293">Mover hacia la derecha y modificar selección</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/> horas</translation>
 <translation id="1398853756734560583">Maximizar</translation>
 <translation id="4250229828105606438">Captura de pantalla</translation>
 <translation id="6690744523875189208"><ph name="NUMBER_TWO"/> horas</translation>
 <translation id="5260878308685146029">Faltan <ph name="NUMBER_TWO"/> minutos</translation>
+<translation id="2557207087669398617">Mover hasta el inicio de la línea</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> GB</translation>
 <translation id="1901303067676059328">Seleccionar &amp;todo</translation>
 <translation id="2168039046890040389">Retroceder página</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> mins</translation>
 <translation id="9107059250669762581"><ph name="NUMBER_DEFAULT"/> días</translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> minutos</translation>
+<translation id="6122334925474904337">Mover una palabra a la derecha y modificar selección</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> minuto</translation>
 <translation id="8448317557906454022">hace <ph name="NUMBER_ZERO"/> segundos</translation>
 <translation id="4927753642311223124">Aquí no hay nada que ver, circulen...</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> days</translation>
 <translation id="3183922693828471536">Desplazarse hasta aquí</translation>
 <translation id="4552416320897244156">AvPág</translation>
+<translation id="3066573403916685335">Mover hacia abajo</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/> horas</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> KB/s</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780">Falta <ph name="NUMBER_ONE"/> hora</translation>
 <translation id="1413622004203049571">Inhabilitar notificaciones de <ph name="NOTIFIER_NAME"/></translation>
 <translation id="2666092431469916601">Superior</translation>
+<translation id="2538759511191347839">Mover hasta el final de la línea y modificar selección</translation>
+<translation id="928465423150706909">Mover hasta el final de la línea</translation>
 <translation id="8331626408530291785">Desplazar hacia arriba</translation>
 <translation id="7907591526440419938">Abrir archivo</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> days left</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">Detener contenido multimedia</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> mins left</translation>
 <translation id="3157931365184549694">Restaurar</translation>
+<translation id="5349525451964472598">Mover hacia la izquierda y modificar selección</translation>
+<translation id="1781701194097416995">Mover una palabra a la izquierda</translation>
 <translation id="1243314992276662751">Subir</translation>
 <translation id="50030952220075532">Falta <ph name="NUMBER_ONE"/> día</translation>
 <translation id="8179976553408161302">Entrar</translation>
+<translation id="8471049483003785219">Mover una palabra a la izquierda y modificar selección</translation>
 <translation id="945522503751344254">Danos tu opinión</translation>
 <translation id="9170848237812810038">&amp;Deshacer</translation>
 <translation id="1285266685456062655">hace <ph name="NUMBER_FEW"/> horas</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> hours ago</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> GB/s</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/> día</translation>
+<translation id="2704295676501803339">Mover hacia la izquierda</translation>
 <translation id="9098468523912235228">hace <ph name="NUMBER_DEFAULT"/> segundos</translation>
 <translation id="494645311413743213">Faltan <ph name="NUMBER_TWO"/> segundos</translation>
 <translation id="4570886800634958009">Ampliar notificación</translation>
+<translation id="566737009157135450">Eliminar palabra anterior</translation>
 <translation id="436869212180315161">Pulsar</translation>
 <translation id="4860787810836767172">hace <ph name="NUMBER_FEW"/> segundos</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> TB/s</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497">hace <ph name="NUMBER_MANY"/> minutos</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> B/s</translation>
 <translation id="7649070708921625228">Ayuda</translation>
+<translation id="2405367043325750948">Eliminar siguiente</translation>
 <translation id="6699343763173986273">Siguiente pista multimedia</translation>
 <translation id="5445120697129764393">Quedan <ph name="NUMBER_DEFAULT"/> segundos</translation>
 <translation id="8226233771743600312">No molestar durante un día</translation>
+<translation id="4252565523989510616">Eliminar palabra siguiente</translation>
 <translation id="7457942297256758195">Borrar todo</translation>
 <translation id="822618367988303761">hace <ph name="NUMBER_TWO"/> días</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> minutos</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> PB/s</translation>
 <translation id="2743387203779672305">Copiar al portapapeles</translation>
 <translation id="8371695176452482769">Habla ahora</translation>
+<translation id="1167268268675672572">Mover hasta el inicio de la línea y modificar selección</translation>
 <translation id="6965382102122355670">Aceptar</translation>
 <translation id="7850320739366109486">No molestar</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> days ago</translation>
diff --git a/ui/base/strings/ui_strings_et.xtb b/ui/base/strings/ui_strings_et.xtb
index 80706e2..1126797 100644
--- a/ui/base/strings/ui_strings_et.xtb
+++ b/ui/base/strings/ui_strings_et.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> B</translation>
 <translation id="3660179305079774227">Ülesnool</translation>
+<translation id="3969863827134279083">Liiguta üles</translation>
 <translation id="7062130397825382308"><ph name="NUMBER_ONE"/> sekund jäänud</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> MB/s</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> tundi</translation>
 <translation id="3990502903496589789">Parem serv</translation>
 <translation id="9038489124413477075">Nimeta kaust</translation>
+<translation id="1940483897317142625">Kustuta rea lõpuni</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/> minutit</translation>
 <translation id="3520476450377425184"><ph name="NUMBER_MANY"/>päeva jäänud</translation>
 <translation id="932327136139879170">Home</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011"><ph name="NUMBER_FEW"/> päeva tagasi</translation>
 <translation id="5076340679995252485">&amp;Kleebi</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> TB</translation>
+<translation id="7139614227326422685">Liiguta sõna võrra paremale</translation>
 <translation id="364720409959344976">Kausta valimine üleslaadimiseks</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016"><ph name="NUMBER_TWO"/> minutit tagasi</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">Märguande sulgemine</translation>
 <translation id="6364916375976753737">Keri vasakule</translation>
 <translation id="2629089419211541119"><ph name="NUMBER_ONE"/> tund tagasi</translation>
+<translation id="4218160142017529598">Kustuta tagasisuunas</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> minutit</translation>
 <translation id="6982279413068714821"><ph name="NUMBER_DEFAULT"/> minutit tagasi</translation>
 <translation id="6945221475159498467">Vali</translation>
 <translation id="6620110761915583480">Faili salvestamine</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> seconds</translation>
+<translation id="8924469368910458384">Kustuta rea alguseni</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> hours</translation>
 <translation id="7836361698254323868"><ph name="NUMBER_ONE"/> minut on jäänud</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> minut</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863"><ph name="NUMBER_MANY"/> päeva</translation>
 <translation id="7163503212501929773"><ph name="NUMBER_MANY"/> tundi jäänud</translation>
 <translation id="5329858601952122676">&amp;Kustuta</translation>
+<translation id="6556866813142980365">Tee uuesti</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> sekundit</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> kB</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> minutes</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> minutes</translation>
 <translation id="50960180632766478"><ph name="NUMBER_FEW"/> minutit jäänud</translation>
 <translation id="5517291721709019259"><ph name="NUMBER_FEW"/> sekundit jäänud</translation>
+<translation id="6903282483217634857">Liiguta paremale</translation>
 <translation id="6659594942844771486">Vaheleht</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> MB</translation>
 <translation id="4988273303304146523"><ph name="NUMBER_DEFAULT"/> päeva tagasi</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/> minutit</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> hours left</translation>
 <translation id="7135556860107312402">Luba märguanded järgmistest kohtadest:</translation>
+<translation id="2479520428668657293">Liiguta paremale ja muuda valikut</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/> tundi</translation>
 <translation id="1398853756734560583">Maksimeeri</translation>
 <translation id="4250229828105606438">Ekraanipilt</translation>
 <translation id="6690744523875189208"><ph name="NUMBER_TWO"/> tundi</translation>
 <translation id="5260878308685146029"><ph name="NUMBER_TWO"/> minutit jäänud</translation>
+<translation id="2557207087669398617">Liiguta rea algusesse</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> GB</translation>
 <translation id="1901303067676059328">Vali &amp;kõik</translation>
 <translation id="2168039046890040389">Lehekülje üles</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> mins</translation>
 <translation id="9107059250669762581"><ph name="NUMBER_DEFAULT"/> päeva</translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> minutit</translation>
+<translation id="6122334925474904337">Liiguta sõna võrra paremale ja muuda valikut</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> minut</translation>
 <translation id="8448317557906454022"><ph name="NUMBER_ZERO"/> sekundit tagasi</translation>
 <translation id="4927753642311223124">Siin pole ühtegi märguannet, liikuge edasi.</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> days</translation>
 <translation id="3183922693828471536">Keri siia</translation>
 <translation id="4552416320897244156">PgDwn</translation>
+<translation id="3066573403916685335">Liiguta allapoole</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/> tundi</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> kB/s</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780"><ph name="NUMBER_ONE"/> tundi jäänud</translation>
 <translation id="1413622004203049571">Keela märguanded: <ph name="NOTIFIER_NAME"/></translation>
 <translation id="2666092431469916601">Üles</translation>
+<translation id="2538759511191347839">Liiguta rea lõppu ja muuda valikut</translation>
+<translation id="928465423150706909">Liiguta rea lõppu</translation>
 <translation id="8331626408530291785">Keri üles</translation>
 <translation id="7907591526440419938">Faili avamine</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> days left</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">Meediumi peatamine</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> mins left</translation>
 <translation id="3157931365184549694">Taasta</translation>
+<translation id="5349525451964472598">Liiguta vasakule ja muuda valikut</translation>
+<translation id="1781701194097416995">Liiguta sõna võrra vasakule</translation>
 <translation id="1243314992276662751">Laadi üles</translation>
 <translation id="50030952220075532"><ph name="NUMBER_ONE"/> päev jäänud</translation>
 <translation id="8179976553408161302">Sisestusklahv</translation>
+<translation id="8471049483003785219">Liiguta sõna võrra vasakule ja muuda valikut</translation>
 <translation id="945522503751344254">Saada tagasisidet</translation>
 <translation id="9170848237812810038">&amp;Võta tagasi</translation>
 <translation id="1285266685456062655"><ph name="NUMBER_FEW"/> tundi tagasi</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> hours ago</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> GB/s</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/> päev</translation>
+<translation id="2704295676501803339">Liiguta vasakule</translation>
 <translation id="9098468523912235228"><ph name="NUMBER_DEFAULT"/> sekundit tagasi</translation>
 <translation id="494645311413743213"><ph name="NUMBER_TWO"/> sekundit jäänud</translation>
 <translation id="4570886800634958009">Märguande laiendamine</translation>
+<translation id="566737009157135450">Kustuta sõna tagasisuunas</translation>
 <translation id="436869212180315161">Vajuta</translation>
 <translation id="4860787810836767172"><ph name="NUMBER_FEW"/> sekundit tagasi</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> TB/s</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497"><ph name="NUMBER_MANY"/> minutit tagasi</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> B/s</translation>
 <translation id="7649070708921625228">Abi</translation>
+<translation id="2405367043325750948">Kustuta edasisuunas</translation>
 <translation id="6699343763173986273">Meediumi järgmine lugu</translation>
 <translation id="5445120697129764393"><ph name="NUMBER_DEFAULT"/> sekundit jäänud</translation>
 <translation id="8226233771743600312">Mitte segada üks päev</translation>
+<translation id="4252565523989510616">Kustuta sõna edasisuunas</translation>
 <translation id="7457942297256758195">Kustuta kõik</translation>
 <translation id="822618367988303761"><ph name="NUMBER_TWO"/> päeva tagasi</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> minutit</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> PB/s</translation>
 <translation id="2743387203779672305">Kopeeri lõikelauale</translation>
 <translation id="8371695176452482769">Alustage rääkimist</translation>
+<translation id="1167268268675672572">Liiguta rea algusesse ja muuda valikut</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7850320739366109486">Mitte segada</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> days ago</translation>
diff --git a/ui/base/strings/ui_strings_fa.xtb b/ui/base/strings/ui_strings_fa.xtb
index f29be16..a436c03 100644
--- a/ui/base/strings/ui_strings_fa.xtb
+++ b/ui/base/strings/ui_strings_fa.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> بایت</translation>
 <translation id="3660179305079774227">پیکان بالا</translation>
+<translation id="3969863827134279083">حرکت به بالا</translation>
 <translation id="7062130397825382308"><ph name="NUMBER_ONE"/> ثانیه باقی مانده است</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> مگابایت/ثانیه</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> ساعت</translation>
 <translation id="3990502903496589789">حاشیه راست</translation>
 <translation id="9038489124413477075">پوشه بدون نام</translation>
+<translation id="1940483897317142625">حذف تا پایان خط</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/> دقیقه</translation>
 <translation id="3520476450377425184"><ph name="NUMBER_MANY"/> days left</translation>
 <translation id="932327136139879170">صفحهٔ اصلی</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011"><ph name="NUMBER_FEW"/> days ago</translation>
 <translation id="5076340679995252485">&amp;جاگذاری</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> ترابایت</translation>
+<translation id="7139614227326422685">حرکت به کلمه راست</translation>
 <translation id="364720409959344976">انتخاب پوشه برای آپلود</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016"><ph name="NUMBER_TWO"/> mins ago</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">بستن اعلان</translation>
 <translation id="6364916375976753737">پیمایش به چپ</translation>
 <translation id="2629089419211541119"><ph name="NUMBER_ONE"/> ساعت قبل</translation>
+<translation id="4218160142017529598">حذف به سمت عقب</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> دقیقه</translation>
 <translation id="6982279413068714821"><ph name="NUMBER_DEFAULT"/> دقیقه قبل</translation>
 <translation id="6945221475159498467">انتخاب</translation>
 <translation id="6620110761915583480">ذخیره کردن فایل</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> ثانیه</translation>
+<translation id="8924469368910458384">حذف تا ابتدای خط</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> hours</translation>
 <translation id="7836361698254323868"><ph name="NUMBER_ONE"/> دقیقه باقیمانده</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> دقیقه</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863"><ph name="NUMBER_MANY"/> days</translation>
 <translation id="7163503212501929773"><ph name="NUMBER_MANY"/> hours left</translation>
 <translation id="5329858601952122676">&amp;حذف</translation>
+<translation id="6556866813142980365">انجام مجدد</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> secs</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> کیلوبایت</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> دقیقه</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> دقیقه</translation>
 <translation id="50960180632766478"><ph name="NUMBER_FEW"/> mins left</translation>
 <translation id="5517291721709019259"><ph name="NUMBER_FEW"/> seconds left</translation>
+<translation id="6903282483217634857">حرکت به راست</translation>
 <translation id="6659594942844771486">Tab</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> مگابایت</translation>
 <translation id="4988273303304146523"><ph name="NUMBER_DEFAULT"/> روز قبل</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/> mins</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> hours left</translation>
 <translation id="7135556860107312402">اعلان موارد زیر مجاز باشد:</translation>
+<translation id="2479520428668657293">حرکت به راست و اصلاح انتخاب</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/> hours</translation>
 <translation id="1398853756734560583">بزرگ کردن</translation>
 <translation id="4250229828105606438">عکس از صفحه نمایش</translation>
 <translation id="6690744523875189208"><ph name="NUMBER_TWO"/> hours</translation>
 <translation id="5260878308685146029"><ph name="NUMBER_TWO"/> mins left</translation>
+<translation id="2557207087669398617">حرکت به ابتدای خط</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> گیگابایت</translation>
 <translation id="1901303067676059328">انتخاب &amp;همه</translation>
 <translation id="2168039046890040389">صفحه بالا</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> mins</translation>
 <translation id="9107059250669762581"><ph name="NUMBER_DEFAULT"/> روز</translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> mins</translation>
+<translation id="6122334925474904337">خرکت به کلمه راست و اصلاح انتخاب</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> دقیقه</translation>
 <translation id="8448317557906454022"><ph name="NUMBER_ZERO"/> secs ago</translation>
 <translation id="4927753642311223124">اینجا خبری نیست، برگردید.</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> days</translation>
 <translation id="3183922693828471536">پیمایش به اینجا</translation>
 <translation id="4552416320897244156">PgDwn</translation>
+<translation id="3066573403916685335">حرکت به پایین</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/> hours</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> کیلوبایت/ثانیه</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780"><ph name="NUMBER_ONE"/> ساعت مانده</translation>
 <translation id="1413622004203049571">غیرفعال کردن اعلان‌ها از <ph name="NOTIFIER_NAME"/></translation>
 <translation id="2666092431469916601">بالا</translation>
+<translation id="2538759511191347839">حرکت به انتهای خط و اصلاح انتخاب</translation>
+<translation id="928465423150706909">حرکت به انتهای خط</translation>
 <translation id="8331626408530291785">پیمایش به بالا</translation>
 <translation id="7907591526440419938">باز کردن فایل</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> days left</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">توقف رسانه</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> mins left</translation>
 <translation id="3157931365184549694">بازیابی</translation>
+<translation id="5349525451964472598">حرکت به چپ و اصلاح انتخاب</translation>
+<translation id="1781701194097416995">حرکت به کلمه چپ</translation>
 <translation id="1243314992276662751">آپلود</translation>
 <translation id="50030952220075532"><ph name="NUMBER_ONE"/> روز مانده</translation>
 <translation id="8179976553408161302">ورود</translation>
+<translation id="8471049483003785219">حرکت به کلمه چپ و اصلاح انتخاب</translation>
 <translation id="945522503751344254">ارسال بازخورد</translation>
 <translation id="9170848237812810038">&amp;واگرد</translation>
 <translation id="1285266685456062655"><ph name="NUMBER_FEW"/> hours ago</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> hours ago</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> گیگابایت/ثانیه</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/> روز</translation>
+<translation id="2704295676501803339">حرکت به چپ</translation>
 <translation id="9098468523912235228"><ph name="NUMBER_DEFAULT"/> ثانیه قبل</translation>
 <translation id="494645311413743213"><ph name="NUMBER_TWO"/> secs left</translation>
 <translation id="4570886800634958009">باز کردن اعلان</translation>
+<translation id="566737009157135450">حذف کلمه قبلی</translation>
 <translation id="436869212180315161">فشار دادن</translation>
 <translation id="4860787810836767172"><ph name="NUMBER_FEW"/> secs ago</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> ترابایت/ثانیه</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497"><ph name="NUMBER_MANY"/> mins ago</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> بایت/ثانیه</translation>
 <translation id="7649070708921625228">راهنما</translation>
+<translation id="2405367043325750948">حذف به سمت جلو</translation>
 <translation id="6699343763173986273">آهنگ بعدی رسانه</translation>
 <translation id="5445120697129764393"><ph name="NUMBER_DEFAULT"/> ثانیه باقی مانده است</translation>
 <translation id="8226233771743600312">یک روز مزاحم نشوید</translation>
+<translation id="4252565523989510616">حذف کلمه بعدی</translation>
 <translation id="7457942297256758195">پاک کردن همه</translation>
 <translation id="822618367988303761"><ph name="NUMBER_TWO"/> days ago</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> mins</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> پتابایت/ثانیه</translation>
 <translation id="2743387203779672305">کپی در کلیپ‌بورد</translation>
 <translation id="8371695176452482769">اکنون صحبت کنید</translation>
+<translation id="1167268268675672572">حرکت به ابتدای خط و اصلاح انتخاب</translation>
 <translation id="6965382102122355670">تأیید</translation>
 <translation id="7850320739366109486">مزاحم نشوید</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> days ago</translation>
diff --git a/ui/base/strings/ui_strings_fi.xtb b/ui/base/strings/ui_strings_fi.xtb
index 80b5e81..e24b615 100644
--- a/ui/base/strings/ui_strings_fi.xtb
+++ b/ui/base/strings/ui_strings_fi.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> t</translation>
 <translation id="3660179305079774227">Nuoli yl.</translation>
+<translation id="3969863827134279083">Siirrä ylös</translation>
 <translation id="7062130397825382308"><ph name="NUMBER_ONE"/> sekunti jäljellä</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> Mt/s</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> tuntia</translation>
 <translation id="3990502903496589789">Oikea reuna</translation>
 <translation id="9038489124413477075">Nimetön kansio</translation>
+<translation id="1940483897317142625">Poista rivin loppuun asti</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/> minuuttia</translation>
 <translation id="3520476450377425184"><ph name="NUMBER_MANY"/> päivää jäljellä</translation>
 <translation id="932327136139879170">Home</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011"><ph name="NUMBER_FEW"/> days ago</translation>
 <translation id="5076340679995252485">&amp;Liitä</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> Tt</translation>
+<translation id="7139614227326422685">Siirrä sanan oikealle puolelle</translation>
 <translation id="364720409959344976">Valitse lähetettävä kansio</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016"><ph name="NUMBER_TWO"/> mins ago</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">Ilmoitus sulje</translation>
 <translation id="6364916375976753737">Vieritä vasemmalle</translation>
 <translation id="2629089419211541119"><ph name="NUMBER_ONE"/> tunti sitten</translation>
+<translation id="4218160142017529598">Poista taaksepäin</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> minuuttia</translation>
 <translation id="6982279413068714821"><ph name="NUMBER_DEFAULT"/> minuuttia sitten</translation>
 <translation id="6945221475159498467">Valitse</translation>
 <translation id="6620110761915583480">Tallenna tiedosto</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> sekuntia</translation>
+<translation id="8924469368910458384">Poista rivin alkuun asti</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> hours</translation>
 <translation id="7836361698254323868"><ph name="NUMBER_ONE"/> minuutti jäljellä</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> minuuttia</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863"><ph name="NUMBER_MANY"/> päivää</translation>
 <translation id="7163503212501929773"><ph name="NUMBER_MANY"/> tuntia jäljellä</translation>
 <translation id="5329858601952122676">&amp;Poista</translation>
+<translation id="6556866813142980365">Tee uudelleen</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> sekuntia</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> kt</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> minutes</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> minutes</translation>
 <translation id="50960180632766478"><ph name="NUMBER_FEW"/> minuuttia jäljellä</translation>
 <translation id="5517291721709019259"><ph name="NUMBER_FEW"/> seconds left</translation>
+<translation id="6903282483217634857">Siirrä oikealle</translation>
 <translation id="6659594942844771486">Välilehti</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> Mt</translation>
 <translation id="4988273303304146523"><ph name="NUMBER_DEFAULT"/> päivää sitten</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/> minuuttia</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> hours left</translation>
 <translation id="7135556860107312402">Salli ilmoitukset seuraavista:</translation>
+<translation id="2479520428668657293">Siirrä oikealle ja muokkaa valintaa</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/> tuntia</translation>
 <translation id="1398853756734560583">Suurenna</translation>
 <translation id="4250229828105606438">Kuvakaappaus</translation>
 <translation id="6690744523875189208"><ph name="NUMBER_TWO"/> tuntia</translation>
 <translation id="5260878308685146029"><ph name="NUMBER_TWO"/> minuuttia jäljellä</translation>
+<translation id="2557207087669398617">Siirrä rivin alkuun</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> Gt</translation>
 <translation id="1901303067676059328">Valitse &amp;kaikki</translation>
 <translation id="2168039046890040389">Sivu ylös</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> mins</translation>
 <translation id="9107059250669762581"><ph name="NUMBER_DEFAULT"/> päivää</translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> minuuttia</translation>
+<translation id="6122334925474904337">Siirrä sanan oikealle puolelle ja muokkaa valintaa</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> minuutti</translation>
 <translation id="8448317557906454022"><ph name="NUMBER_ZERO"/> secs ago</translation>
 <translation id="4927753642311223124">Täällä ei ole mitään nähtävää.</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> days</translation>
 <translation id="3183922693828471536">Vieritä tähän</translation>
 <translation id="4552416320897244156">Sivu alas</translation>
+<translation id="3066573403916685335">Siirrä alas</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/> tuntia</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> kt/s</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780"><ph name="NUMBER_ONE"/> tuntia jäljellä</translation>
 <translation id="1413622004203049571">Poista ilmoitukset käytöstä sovellukselta <ph name="NOTIFIER_NAME"/></translation>
 <translation id="2666092431469916601">Yleisin</translation>
+<translation id="2538759511191347839">Siirrä rivin loppuun ja muokkaa valintaa</translation>
+<translation id="928465423150706909">Siirrä rivin loppuun</translation>
 <translation id="8331626408530291785">Vieritä ylös</translation>
 <translation id="7907591526440419938">Avaa tiedosto</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> days left</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">Media: pysäytä</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> mins left</translation>
 <translation id="3157931365184549694">Palauta</translation>
+<translation id="5349525451964472598">Siirrä vasemmalle ja muokkaa valintaa</translation>
+<translation id="1781701194097416995">Siirrä sanan vasemmalle puolelle</translation>
 <translation id="1243314992276662751">Lähetä</translation>
 <translation id="50030952220075532"><ph name="NUMBER_ONE"/> päivää jäljellä</translation>
 <translation id="8179976553408161302">Sisään</translation>
+<translation id="8471049483003785219">Siirrä sanan vasemmalle puolelle ja muokkaa valintaa</translation>
 <translation id="945522503751344254">Lähetä palautetta</translation>
 <translation id="9170848237812810038">K&amp;umoa</translation>
 <translation id="1285266685456062655"><ph name="NUMBER_FEW"/> hours ago</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> hours ago</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> Gt/s</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/> päivää</translation>
+<translation id="2704295676501803339">Siirrä vasemmalle</translation>
 <translation id="9098468523912235228"><ph name="NUMBER_DEFAULT"/> sekuntia sitten</translation>
 <translation id="494645311413743213"><ph name="NUMBER_TWO"/> sekuntia jäljellä</translation>
 <translation id="4570886800634958009">Ilmoitus laajenna</translation>
+<translation id="566737009157135450">Poista edellinen sana</translation>
 <translation id="436869212180315161">Paina</translation>
 <translation id="4860787810836767172"><ph name="NUMBER_FEW"/> secs ago</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> Tt/s</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497"><ph name="NUMBER_MANY"/> mins ago</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> t/s</translation>
 <translation id="7649070708921625228">Ohje</translation>
+<translation id="2405367043325750948">Poista eteenpäin</translation>
 <translation id="6699343763173986273">Media: seuraava kappale</translation>
 <translation id="5445120697129764393"><ph name="NUMBER_DEFAULT"/> sekuntia jäljellä</translation>
 <translation id="8226233771743600312">Älä häiritse päivään</translation>
+<translation id="4252565523989510616">Poista seuraava sana</translation>
 <translation id="7457942297256758195">Tyhjennä kaikki</translation>
 <translation id="822618367988303761"><ph name="NUMBER_TWO"/> days ago</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> minuuttia</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> Pt/s</translation>
 <translation id="2743387203779672305">Kopioi leikepöydälle</translation>
 <translation id="8371695176452482769">Puhu nyt</translation>
+<translation id="1167268268675672572">Siirrä rivin alkuun ja muokkaa valintaa</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7850320739366109486">Älä häiritse</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> days ago</translation>
diff --git a/ui/base/strings/ui_strings_fil.xtb b/ui/base/strings/ui_strings_fil.xtb
index 65e2806..5788c9e 100644
--- a/ui/base/strings/ui_strings_fil.xtb
+++ b/ui/base/strings/ui_strings_fil.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> (na) B</translation>
 <translation id="3660179305079774227">Up Arrow</translation>
+<translation id="3969863827134279083">Lumipat Pataas</translation>
 <translation id="7062130397825382308"><ph name="NUMBER_ONE"/> segundo ang natitira</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> (na) MB/s</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> mga oras</translation>
 <translation id="3990502903496589789">Tamang Lamang</translation>
 <translation id="9038489124413477075">Walang Pangalan na Folder</translation>
+<translation id="1940483897317142625">Tanggalin Papunta Sa Dulo Ng Linya</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/> mga minuto</translation>
 <translation id="3520476450377425184"><ph name="NUMBER_MANY"/> mga nalalabing araw</translation>
 <translation id="932327136139879170">Home</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011"><ph name="NUMBER_FEW"/> araw ang nakalipas</translation>
 <translation id="5076340679995252485">&amp;Ilagay</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> (na) TB</translation>
+<translation id="7139614227326422685">Lumipat Sa Kanan Ng Salita</translation>
 <translation id="364720409959344976">Pumili ng Folder na I-a-upload</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016"><ph name="NUMBER_TWO"/> minuto ang nakalipas</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">Isara ang notification</translation>
 <translation id="6364916375976753737">Mag-scroll Pakaliwa</translation>
 <translation id="2629089419211541119"><ph name="NUMBER_ONE"/> oras ang nakalipas</translation>
+<translation id="4218160142017529598">Tanggalin Ang Nakaraan (Na Salita)</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> (na) minuto</translation>
 <translation id="6982279413068714821"><ph name="NUMBER_DEFAULT"/> minuto ang nakalipas</translation>
 <translation id="6945221475159498467">Pumili</translation>
 <translation id="6620110761915583480">I-save ang File</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> na segundo</translation>
+<translation id="8924469368910458384">Tanggalin Papunta Sa Umpisa Ng Linya</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> hours</translation>
 <translation id="7836361698254323868"><ph name="NUMBER_ONE"/> minuto ang natitira</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> minuto</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863"><ph name="NUMBER_MANY"/> mga araw</translation>
 <translation id="7163503212501929773"><ph name="NUMBER_MANY"/> mga oras na nalalabi</translation>
 <translation id="5329858601952122676">&amp;Tanggalin</translation>
+<translation id="6556866813142980365">Redo</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> seg</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> KB</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> (na) minuto</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> minuto</translation>
 <translation id="50960180632766478"><ph name="NUMBER_FEW"/> natitirang minuto</translation>
 <translation id="5517291721709019259"><ph name="NUMBER_FEW"/> seconds left</translation>
+<translation id="6903282483217634857">Lumipat Pakanan</translation>
 <translation id="6659594942844771486">Tab</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> (na) MB</translation>
 <translation id="4988273303304146523"><ph name="NUMBER_DEFAULT"/> araw ang nakalipas</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/> minuto</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> hours left</translation>
 <translation id="7135556860107312402">Payagan ang mga notification mula sa sumusunod:</translation>
+<translation id="2479520428668657293">Lumipat Pakanan At Baguhin ang Pinili</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/>mga oras</translation>
 <translation id="1398853756734560583">Maximize</translation>
 <translation id="4250229828105606438">Screenshot</translation>
 <translation id="6690744523875189208"><ph name="NUMBER_TWO"/> mga oras</translation>
 <translation id="5260878308685146029"><ph name="NUMBER_TWO"/> natitirang minuto</translation>
+<translation id="2557207087669398617">Lumipat Sa Umpisa Ng Linya</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> (na) GB</translation>
 <translation id="1901303067676059328">Piliin ang &amp;lahat</translation>
 <translation id="2168039046890040389">Pataas</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> mins</translation>
 <translation id="9107059250669762581"><ph name="NUMBER_DEFAULT"/> mga araw</translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> mga minuto</translation>
+<translation id="6122334925474904337">Lumipat Sa Kanan ng Salita At Baguhin ang Pinili</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> minuto</translation>
 <translation id="8448317557906454022"><ph name="NUMBER_ZERO"/> segundo ang nakalipas</translation>
 <translation id="4927753642311223124">Walang makikita rito, magpatuloy.</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> days</translation>
 <translation id="3183922693828471536">Mag-scroll dito</translation>
 <translation id="4552416320897244156">PgDwn</translation>
+<translation id="3066573403916685335">Lumipat Pababa</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/> mga oras</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> KB/s</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780"><ph name="NUMBER_ONE"/> natitirang oras</translation>
 <translation id="1413622004203049571">I-disable ang mga notification mula sa <ph name="NOTIFIER_NAME"/></translation>
 <translation id="2666092431469916601">Tuktok</translation>
+<translation id="2538759511191347839">Lumipat Papunta Sa Dulo ng Linya At Baguhin ang Pinili</translation>
+<translation id="928465423150706909">Lumipat Sa Dulo Ng Linya</translation>
 <translation id="8331626408530291785">Mag-scroll Pataas</translation>
 <translation id="7907591526440419938">Buksan ang File</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> days left</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">Media Ihinto</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> mins left</translation>
 <translation id="3157931365184549694">Ipanumbalik</translation>
+<translation id="5349525451964472598">Lumipat Pakaliwa At Baguhin ang Pinili</translation>
+<translation id="1781701194097416995">Lumipat Sa Kaliwa Ng Salita</translation>
 <translation id="1243314992276662751">I-upload</translation>
 <translation id="50030952220075532"><ph name="NUMBER_ONE"/> natitirang araw</translation>
 <translation id="8179976553408161302">Pumasok</translation>
+<translation id="8471049483003785219">Lumipat Sa Kaliwa Ng Salita At Baguhin ang Pinili</translation>
 <translation id="945522503751344254">Magpadala ng feedback...</translation>
 <translation id="9170848237812810038">&amp;I-undo</translation>
 <translation id="1285266685456062655"><ph name="NUMBER_FEW"/> (na) oras ang nakalipas</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> hours ago</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> (na) GB/s</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/> araw</translation>
+<translation id="2704295676501803339">Lumipat Pakaliwa</translation>
 <translation id="9098468523912235228"><ph name="NUMBER_DEFAULT"/> segundo ang nakalipas</translation>
 <translation id="494645311413743213"><ph name="NUMBER_TWO"/> mga natitirang segundo</translation>
 <translation id="4570886800634958009">Palawakin ang notification</translation>
+<translation id="566737009157135450">Tanggalin Ang Nakaraang Salita</translation>
 <translation id="436869212180315161">Pindutin</translation>
 <translation id="4860787810836767172"><ph name="NUMBER_FEW"/> segundo ang nakalipas</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> (na) TB/s</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497"><ph name="NUMBER_MANY"/> minuto ang nakalipas</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> (na) B/s</translation>
 <translation id="7649070708921625228">Tulong</translation>
+<translation id="2405367043325750948">Tanggalin Ang Susunod (Na Salita)</translation>
 <translation id="6699343763173986273">Susunod na Track ng Media</translation>
 <translation id="5445120697129764393"><ph name="NUMBER_DEFAULT"/> (na) segundo ang natitira</translation>
 <translation id="8226233771743600312">Huwag istorbohin sa loob ng isang araw</translation>
+<translation id="4252565523989510616">Tanggalin Ang Susunod Na Salita</translation>
 <translation id="7457942297256758195">I-clear Lahat</translation>
 <translation id="822618367988303761"><ph name="NUMBER_TWO"/> araw ang nakalipas</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> mga minuto</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> (na) PB/s</translation>
 <translation id="2743387203779672305">Kopyahin sa clipboard</translation>
 <translation id="8371695176452482769">Magsalita ngayon</translation>
+<translation id="1167268268675672572">Lumipat Sa Umpisa Ng Linya At Baguhin ang Pinili</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7850320739366109486">Huwag Istorbohin</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> days ago</translation>
diff --git a/ui/base/strings/ui_strings_fr.xtb b/ui/base/strings/ui_strings_fr.xtb
index a6b3d4b..f34d2d3 100644
--- a/ui/base/strings/ui_strings_fr.xtb
+++ b/ui/base/strings/ui_strings_fr.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> o</translation>
 <translation id="3660179305079774227">Haut</translation>
+<translation id="3969863827134279083">Déplacer vers le haut</translation>
 <translation id="7062130397825382308"><ph name="NUMBER_ONE"/> seconde restante</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> Mo/s</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> heures</translation>
 <translation id="3990502903496589789">Côté droit</translation>
 <translation id="9038489124413477075">Dossier sans nom</translation>
+<translation id="1940483897317142625">Supprimer jusqu'à la fin de la ligne</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/> minutes</translation>
 <translation id="3520476450377425184"><ph name="NUMBER_MANY"/> jours restants</translation>
 <translation id="932327136139879170">Début</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011"><ph name="NUMBER_FEW"/> days ago</translation>
 <translation id="5076340679995252485">C&amp;oller</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> To</translation>
+<translation id="7139614227326422685">Déplacer jusqu'au prochain mot sur la droite</translation>
 <translation id="364720409959344976">Sélectionner le dossier d'importation</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016">il y a <ph name="NUMBER_TWO"/> minutes</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">Fermer la notification</translation>
 <translation id="6364916375976753737">Défilement vers la gauche</translation>
 <translation id="2629089419211541119">il y a <ph name="NUMBER_ONE"/> heure</translation>
+<translation id="4218160142017529598">Supprimer en arrière</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> minutes</translation>
 <translation id="6982279413068714821">il y a <ph name="NUMBER_DEFAULT"/> minutes</translation>
 <translation id="6945221475159498467">Sélectionner</translation>
 <translation id="6620110761915583480">Enregistrer le fichier</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> seconds</translation>
+<translation id="8924469368910458384">Supprimer jusqu'au début de la ligne</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> hours</translation>
 <translation id="7836361698254323868"><ph name="NUMBER_ONE"/> minute restante</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> minute</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863"><ph name="NUMBER_MANY"/> jours</translation>
 <translation id="7163503212501929773"><ph name="NUMBER_MANY"/> heures restantes</translation>
 <translation id="5329858601952122676">&amp;Supprimer</translation>
+<translation id="6556866813142980365">Rétablir</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> secondes</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> Ko</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> minutes</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> minutes</translation>
 <translation id="50960180632766478"><ph name="NUMBER_FEW"/> minutes restantes</translation>
 <translation id="5517291721709019259"><ph name="NUMBER_FEW"/> seconds left</translation>
+<translation id="6903282483217634857">Déplacer vers la droite</translation>
 <translation id="6659594942844771486">Onglet</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> Mo</translation>
 <translation id="4988273303304146523">il y a <ph name="NUMBER_DEFAULT"/> jours</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/> minutes</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> hours left</translation>
 <translation id="7135556860107312402">Autoriser les notifications des éléments suivants :</translation>
+<translation id="2479520428668657293">Déplacer vers la droite et modifier la sélection</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/> heures</translation>
 <translation id="1398853756734560583">Agrandir</translation>
 <translation id="4250229828105606438">Capture d'écran</translation>
 <translation id="6690744523875189208"><ph name="NUMBER_TWO"/> heures</translation>
 <translation id="5260878308685146029"><ph name="NUMBER_TWO"/> minutes restantes</translation>
+<translation id="2557207087669398617">Déplacer vers le début de la ligne</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> Go</translation>
 <translation id="1901303067676059328">&amp;Tout sélectionner</translation>
 <translation id="2168039046890040389">Page précédente</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> mins</translation>
 <translation id="9107059250669762581"><ph name="NUMBER_DEFAULT"/> jours</translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> minutes</translation>
+<translation id="6122334925474904337">Déplacer jusqu'au prochain mot sur la droite et modifier la sélection</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> minute</translation>
 <translation id="8448317557906454022"><ph name="NUMBER_ZERO"/> secs ago</translation>
 <translation id="4927753642311223124">Aucune notification</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> days</translation>
 <translation id="3183922693828471536">Défilement jusqu'ici</translation>
 <translation id="4552416320897244156">PgSuiv</translation>
+<translation id="3066573403916685335">Déplacer vers le bas</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/> heures</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> Ko/s</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780"><ph name="NUMBER_ONE"/> heure restante</translation>
 <translation id="1413622004203049571">Désactiver les notifications <ph name="NOTIFIER_NAME"/></translation>
 <translation id="2666092431469916601">En haut</translation>
+<translation id="2538759511191347839">Déplacer à la fin de la ligne et modifier la sélection</translation>
+<translation id="928465423150706909">Déplacer à la fin de la ligne</translation>
 <translation id="8331626408530291785">Défilement vers le haut</translation>
 <translation id="7907591526440419938">Ouvrir le fichier</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> days left</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">Contenu multimédia : arrêt</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> mins left</translation>
 <translation id="3157931365184549694">Restaurer</translation>
+<translation id="5349525451964472598">Déplacer vers la gauche et modifier la sélection</translation>
+<translation id="1781701194097416995">Déplacer jusqu'au mot précédent sur la gauche</translation>
 <translation id="1243314992276662751">Importer</translation>
 <translation id="50030952220075532"><ph name="NUMBER_ONE"/> jour restant</translation>
 <translation id="8179976553408161302">Entrer</translation>
+<translation id="8471049483003785219">Déplacer jusqu'au mot précédent sur la gauche et modifier la sélection</translation>
 <translation id="945522503751344254">Envoyer le commentaire</translation>
 <translation id="9170848237812810038">Ann&amp;uler</translation>
 <translation id="1285266685456062655"><ph name="NUMBER_FEW"/> hours ago</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> hours ago</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> Go/s</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/> jour</translation>
+<translation id="2704295676501803339">Déplacer vers la gauche</translation>
 <translation id="9098468523912235228">il y a <ph name="NUMBER_DEFAULT"/> secondes</translation>
 <translation id="494645311413743213"><ph name="NUMBER_TWO"/> secondes restantes</translation>
 <translation id="4570886800634958009">Développer la notification</translation>
+<translation id="566737009157135450">Supprimer un mot en arrière</translation>
 <translation id="436869212180315161">Cliquer</translation>
 <translation id="4860787810836767172"><ph name="NUMBER_FEW"/> secs ago</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> To/s</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497"><ph name="NUMBER_MANY"/> mins ago</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> o/s</translation>
 <translation id="7649070708921625228">Aide</translation>
+<translation id="2405367043325750948">Supprimer vers l'avant</translation>
 <translation id="6699343763173986273">Contenu multimédia : titre suivant</translation>
 <translation id="5445120697129764393"><ph name="NUMBER_DEFAULT"/> secondes restantes</translation>
 <translation id="8226233771743600312">Ne pas déranger pendant un jour</translation>
+<translation id="4252565523989510616">Supprimer un mot vers l'avant</translation>
 <translation id="7457942297256758195">Tout effacer</translation>
 <translation id="822618367988303761">il y a <ph name="NUMBER_TWO"/> jours</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> minutes</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> Po/s</translation>
 <translation id="2743387203779672305">Copier dans le Presse-papier</translation>
 <translation id="8371695176452482769">Parlez maintenant</translation>
+<translation id="1167268268675672572">Déplacer au début de la ligne et modifier la sélection</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7850320739366109486">Ne pas déranger</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> days ago</translation>
diff --git a/ui/base/strings/ui_strings_gu.xtb b/ui/base/strings/ui_strings_gu.xtb
index c3c2007..12bd88f 100644
--- a/ui/base/strings/ui_strings_gu.xtb
+++ b/ui/base/strings/ui_strings_gu.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> અબજ</translation>
 <translation id="3660179305079774227">ઉપર એરો</translation>
+<translation id="3969863827134279083">ઉપર ખસેડો</translation>
 <translation id="7062130397825382308"><ph name="NUMBER_ONE"/> સેકંડ બાકી</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> MB/s</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> કલાક</translation>
 <translation id="3990502903496589789">જમણી કિનારી</translation>
 <translation id="9038489124413477075">અનામાંકિત ફોલ્ડર</translation>
+<translation id="1940483897317142625">લીટીના અંત સુધીનું કાઢી નાખો</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/> મિનિટ</translation>
 <translation id="3520476450377425184"><ph name="NUMBER_MANY"/> દિવસ બાકી</translation>
 <translation id="932327136139879170">હોમ</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011"><ph name="NUMBER_FEW"/> days ago</translation>
 <translation id="5076340679995252485">પેસ્ટ કરો</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> TB</translation>
+<translation id="7139614227326422685">શબ્દની જમણી બાજુએ ખસેડો</translation>
 <translation id="364720409959344976">અપલોડ કરવા માટે ફોલ્ડર પસંદ કરો</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016"><ph name="NUMBER_TWO"/> mins ago</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">સૂચના બંધ છે</translation>
 <translation id="6364916375976753737">ડાબે સ્ક્રોલ કરો</translation>
 <translation id="2629089419211541119"><ph name="NUMBER_ONE"/> hour ago</translation>
+<translation id="4218160142017529598">પાછળનું કાઢી નાખો</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> મિનિટ</translation>
 <translation id="6982279413068714821"><ph name="NUMBER_DEFAULT"/> mins ago</translation>
 <translation id="6945221475159498467">પસંદ કરો</translation>
 <translation id="6620110761915583480">ફાઇલ સાચવો</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> સેકંડ</translation>
+<translation id="8924469368910458384">લીટીની શરૂઆત સુધીનું કાઢી નાખો</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> કલાક</translation>
 <translation id="7836361698254323868"><ph name="NUMBER_ONE"/> મિનિટ બાકી</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> મિનિટ</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863"><ph name="NUMBER_MANY"/> દિવસ</translation>
 <translation id="7163503212501929773"><ph name="NUMBER_MANY"/> કલાક બાકી</translation>
 <translation id="5329858601952122676">&amp;કાઢી નાખો</translation>
+<translation id="6556866813142980365">ફરી કરો</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> સેકંડ</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> KB</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> મિનિટ</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> મિનિટ</translation>
 <translation id="50960180632766478"><ph name="NUMBER_FEW"/> મિનિટ બાકી</translation>
 <translation id="5517291721709019259"><ph name="NUMBER_FEW"/> સેકંડ બાકી</translation>
+<translation id="6903282483217634857">જમણી બાજુએ ખસેડો</translation>
 <translation id="6659594942844771486">ટૅબ</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/>MB</translation>
 <translation id="4988273303304146523"><ph name="NUMBER_DEFAULT"/> days ago</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/> મિનિટ</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> કલાક બાકી</translation>
 <translation id="7135556860107312402">નીચેના પરથી સૂચનાઓને મંજૂરી આપો:</translation>
+<translation id="2479520428668657293">જમણી બાજુએ ખસેડો અને પસંદગી સંશોધિત કરો</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/> કલાક</translation>
 <translation id="1398853756734560583">મોટું કરો</translation>
 <translation id="4250229828105606438">સ્ક્રીનશૉટ</translation>
 <translation id="6690744523875189208"><ph name="NUMBER_TWO"/> કલાક</translation>
 <translation id="5260878308685146029"><ph name="NUMBER_TWO"/> મિનિટ બાકી</translation>
+<translation id="2557207087669398617">લીટીની શરૂઆતમાં ખસેડો</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> GB</translation>
 <translation id="1901303067676059328">&amp;બધા પસંદ કરો</translation>
 <translation id="2168039046890040389">પૃષ્ઠ ઉપર</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> મિનિટ</translation>
 <translation id="9107059250669762581"><ph name="NUMBER_DEFAULT"/> દિવસ</translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> મિનિટ્સ</translation>
+<translation id="6122334925474904337">શબ્દની જમણી બાજુએ ખસેડો અને પસંદગી સંશોધિત કરો</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> મિનિટ</translation>
 <translation id="8448317557906454022"><ph name="NUMBER_ZERO"/> secs ago</translation>
 <translation id="4927753642311223124">અહીં જોવા માટે કંઈ નથી, આગળ વધો.</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> દિવસ</translation>
 <translation id="3183922693828471536">અહીં સુધી સ્ક્રોલ કરો</translation>
 <translation id="4552416320897244156">PgDwn</translation>
+<translation id="3066573403916685335">નીચે ખસેડો</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/> કલાક</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> KB/s</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780"><ph name="NUMBER_ONE"/> કલાક બાકી</translation>
 <translation id="1413622004203049571"><ph name="NOTIFIER_NAME"/> તરફથી સૂચનાઓ અક્ષમ કરો</translation>
 <translation id="2666092431469916601">ઉપર</translation>
+<translation id="2538759511191347839">લીટીની અંતમાં ખસેડો અને પસંદગી સંશોધિત કરો</translation>
+<translation id="928465423150706909">લીટીના અંતમાં ખસેડો</translation>
 <translation id="8331626408530291785">ઉપર સ્ક્રોલ કરો</translation>
 <translation id="7907591526440419938">ફાઇલ ખોલો</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> દિવસ બાકી</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">મીડિયા સ્ટોપ</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> મિનિટ બાકી</translation>
 <translation id="3157931365184549694">પુનઃસ્થાપિત કરો</translation>
+<translation id="5349525451964472598">ડાબે ખસેડો અને પસંદગી સંશોધિત કરો</translation>
+<translation id="1781701194097416995">શબ્દની ડાબી બાજુએ ખસેડો</translation>
 <translation id="1243314992276662751">અપલોડ કરો</translation>
 <translation id="50030952220075532"><ph name="NUMBER_ONE"/> દિવસ બાકી</translation>
 <translation id="8179976553408161302">દાખલ કરો</translation>
+<translation id="8471049483003785219">શબ્દની ડાબી બાજુએ ખસેડો અને પસંદગી સંશોધિત કરો</translation>
 <translation id="945522503751344254">પ્રતિસાદ મોકલો</translation>
 <translation id="9170848237812810038">&amp;પૂર્વવત્ કરો</translation>
 <translation id="1285266685456062655"><ph name="NUMBER_FEW"/> hours ago</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> કલાક પહેલા</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> GB/s</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/> દિવસ</translation>
+<translation id="2704295676501803339">ડાબે ખસેડો</translation>
 <translation id="9098468523912235228"><ph name="NUMBER_DEFAULT"/> secs ago</translation>
 <translation id="494645311413743213"><ph name="NUMBER_TWO"/> સેકન્ડ બાકી</translation>
 <translation id="4570886800634958009">સૂચના વિસ્તૃત છે</translation>
+<translation id="566737009157135450">શબ્દની પાછળનું કાઢી નાખો</translation>
 <translation id="436869212180315161">દબાવો</translation>
 <translation id="4860787810836767172"><ph name="NUMBER_FEW"/> secs ago</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> TB/s</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497"><ph name="NUMBER_MANY"/> mins ago</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> B/s</translation>
 <translation id="7649070708921625228">સહાય</translation>
+<translation id="2405367043325750948">આગળનું કાઢી નાખો</translation>
 <translation id="6699343763173986273">મીડિયા આગલો ટ્રૅક</translation>
 <translation id="5445120697129764393"><ph name="NUMBER_DEFAULT"/> સેકંડ બાકી</translation>
 <translation id="8226233771743600312">એક દિવસ માટે ખલેલ પાડશો નહીં</translation>
+<translation id="4252565523989510616">શબ્દની આગળનું કાઢી નાખો</translation>
 <translation id="7457942297256758195">બધું સાફ કરો</translation>
 <translation id="822618367988303761"><ph name="NUMBER_TWO"/> days ago</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> મિનિટ</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> PB/s</translation>
 <translation id="2743387203779672305">ક્લિપબોર્ડ પર કૉપિ કરો</translation>
 <translation id="8371695176452482769">હવે બોલો</translation>
+<translation id="1167268268675672572">લીટીની શરૂઆતમાં ખસેડો અને પસંદગી સંશોધિત કરો</translation>
 <translation id="6965382102122355670">ઓકે</translation>
 <translation id="7850320739366109486">ખલેલ પાડશો નહીં</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> દિવસ પહેલા</translation>
diff --git a/ui/base/strings/ui_strings_hi.xtb b/ui/base/strings/ui_strings_hi.xtb
index 5009c75..c1a889f 100644
--- a/ui/base/strings/ui_strings_hi.xtb
+++ b/ui/base/strings/ui_strings_hi.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> बाइट</translation>
 <translation id="3660179305079774227">ऊपर तीर</translation>
+<translation id="3969863827134279083">ऊपर ले जाएं</translation>
 <translation id="7062130397825382308"><ph name="NUMBER_ONE"/> सेकंड शेष</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> MB/s</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> घंटे</translation>
 <translation id="3990502903496589789">दायां सिरा</translation>
 <translation id="9038489124413477075">अनाम फ़ोल्डर</translation>
+<translation id="1940483897317142625">पंक्ति के अंत तक हटाएं</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/> मिनट</translation>
 <translation id="3520476450377425184"><ph name="NUMBER_MANY"/> days left</translation>
 <translation id="932327136139879170">मुख्यपृष्ठ</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011"><ph name="NUMBER_FEW"/> दिन पहले</translation>
 <translation id="5076340679995252485">&amp;चिपकाएं</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> TB</translation>
+<translation id="7139614227326422685">शब्द के दाईं ओर ले जाएं</translation>
 <translation id="364720409959344976">अपलोड करने के लिए फ़ोल्‍डर चुनें</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016"><ph name="NUMBER_TWO"/> mins ago</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">सूचना बंद करें</translation>
 <translation id="6364916375976753737">बाएं स्क्रॉल करें</translation>
 <translation id="2629089419211541119"><ph name="NUMBER_ONE"/> घंटे पहले</translation>
+<translation id="4218160142017529598">पीछे की ओर का शब्द हटाएं</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> मिनट</translation>
 <translation id="6982279413068714821"><ph name="NUMBER_DEFAULT"/> mins ago</translation>
 <translation id="6945221475159498467">चुनें</translation>
 <translation id="6620110761915583480">फ़ाइल सहेजें</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> सेकंड</translation>
+<translation id="8924469368910458384">पंक्ति की शुरुआत तक हटाएं</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> घंटे</translation>
 <translation id="7836361698254323868"><ph name="NUMBER_ONE"/> मिनट शेष</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> मिनट</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863"><ph name="NUMBER_MANY"/> दिन</translation>
 <translation id="7163503212501929773"><ph name="NUMBER_MANY"/> hours left</translation>
 <translation id="5329858601952122676">&amp;हटाएं</translation>
+<translation id="6556866813142980365">पुन: करें</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> सेकंड</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> KB</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> मिनट</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> मिनट</translation>
 <translation id="50960180632766478"><ph name="NUMBER_FEW"/> mins left</translation>
 <translation id="5517291721709019259"><ph name="NUMBER_FEW"/> seconds left</translation>
+<translation id="6903282483217634857">दाईं ओर ले जाएं</translation>
 <translation id="6659594942844771486">टैब</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> MB</translation>
 <translation id="4988273303304146523"><ph name="NUMBER_DEFAULT"/> दिन पहले</translation>
@@ -90,17 +97,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/> मिनट</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> hours left</translation>
 <translation id="7135556860107312402">निम्न से आने वाली सूचनाओं की अनुमति दें:</translation>
+<translation id="2479520428668657293">दाईं ओर ले जाएं और चयन बदलें</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/> घंटे</translation>
 <translation id="1398853756734560583">बड़ा करें</translation>
 <translation id="4250229828105606438">स्क्रीनशॉट</translation>
 <translation id="6690744523875189208"><ph name="NUMBER_TWO"/> घंटे</translation>
 <translation id="5260878308685146029"><ph name="NUMBER_TWO"/> mins left</translation>
+<translation id="2557207087669398617">पंक्ति के प्रारंभ में ले जाएं</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> GB</translation>
 <translation id="1901303067676059328">&amp;सभी को चुनें</translation>
 <translation id="2168039046890040389">पृष्ठ ऊपर</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> मिनट</translation>
 <translation id="9107059250669762581"><ph name="NUMBER_DEFAULT"/> दिन</translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> मिनट</translation>
+<translation id="6122334925474904337">शब्द के दाईं ओर ले जाएं और चयन बदलें</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> मिनट</translation>
 <translation id="8448317557906454022"><ph name="NUMBER_ZERO"/> secs ago</translation>
 <translation id="4927753642311223124">यहां देखने के लिए कुछ भी नहीं है, आगे चलें.</translation>
@@ -108,6 +118,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> दिन</translation>
 <translation id="3183922693828471536">यहां तक स्क्रॉल करें</translation>
 <translation id="4552416320897244156">PgDwn</translation>
+<translation id="3066573403916685335">नीचे ले जाएं</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/> घंटे</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> KB/s</translation>
@@ -124,6 +135,8 @@
 <translation id="7414887922320653780"><ph name="NUMBER_ONE"/> घंटे शेष</translation>
 <translation id="1413622004203049571"><ph name="NOTIFIER_NAME"/> से सूचनाएं अक्षम करें</translation>
 <translation id="2666092431469916601">शीर्ष</translation>
+<translation id="2538759511191347839">पंक्ति के अंत में ले जाएं और चयन बदलें</translation>
+<translation id="928465423150706909">पंक्ति के अंत में ले जाएं</translation>
 <translation id="8331626408530291785">ऊपर स्क्रॉल करें</translation>
 <translation id="7907591526440419938">फ़ाइल खोलें</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> days left</translation>
@@ -133,9 +146,12 @@
 <translation id="6808150112686056157">मीडिया रोकें</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> mins left</translation>
 <translation id="3157931365184549694">पुनर्स्थापित करें</translation>
+<translation id="5349525451964472598">बाईं ओर ले जाएं और चयन बदलें</translation>
+<translation id="1781701194097416995">शब्द के बाईं ओर ले जाएं</translation>
 <translation id="1243314992276662751">अपलोड करें</translation>
 <translation id="50030952220075532"><ph name="NUMBER_ONE"/> दिन शेष</translation>
 <translation id="8179976553408161302">प्रविष्ट करें</translation>
+<translation id="8471049483003785219">शब्द के बाईं ओर ले जाएं और चयन बदलें</translation>
 <translation id="945522503751344254">सुझाव भेजें</translation>
 <translation id="9170848237812810038">&amp;पूर्ववत् करें</translation>
 <translation id="1285266685456062655"><ph name="NUMBER_FEW"/> घंटे पहले</translation>
@@ -159,9 +175,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> घंटे पहले</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> GB/s</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/> दिन</translation>
+<translation id="2704295676501803339">बाईं ओर ले जाएं</translation>
 <translation id="9098468523912235228"><ph name="NUMBER_DEFAULT"/> सेकंड पहले</translation>
 <translation id="494645311413743213"><ph name="NUMBER_TWO"/> secs left</translation>
 <translation id="4570886800634958009">सूचना विस्‍तार</translation>
+<translation id="566737009157135450">पीछे की ओर एक शब्द हटाएं</translation>
 <translation id="436869212180315161">दबाएं</translation>
 <translation id="4860787810836767172"><ph name="NUMBER_FEW"/> secs ago</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> TB/s</translation>
@@ -171,9 +189,11 @@
 <translation id="1101671447232096497"><ph name="NUMBER_MANY"/> mins ago</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> B/s</translation>
 <translation id="7649070708921625228">सहायता</translation>
+<translation id="2405367043325750948">आगे की ओर हटाएं</translation>
 <translation id="6699343763173986273">मीडिया अगला ट्रैक</translation>
 <translation id="5445120697129764393"><ph name="NUMBER_DEFAULT"/> seconds left</translation>
 <translation id="8226233771743600312">एक दिन तक परेशान न करें</translation>
+<translation id="4252565523989510616">आगे की ओर एक शब्द हटाएं</translation>
 <translation id="7457942297256758195">सभी साफ़ करें</translation>
 <translation id="822618367988303761"><ph name="NUMBER_TWO"/> दिन पहले</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> मिनट</translation>
@@ -189,6 +209,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> PB/s</translation>
 <translation id="2743387203779672305">क्लिपबोर्ड पर प्रतिलिपि बनाएं</translation>
 <translation id="8371695176452482769">अब बोलें</translation>
+<translation id="1167268268675672572">पंक्ति के प्रारंभ में ले जाएं और चयन बदलें</translation>
 <translation id="6965382102122355670">ठीक</translation>
 <translation id="7850320739366109486">परेशान न करें</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> दिन पहले</translation>
diff --git a/ui/base/strings/ui_strings_hr.xtb b/ui/base/strings/ui_strings_hr.xtb
index 4382680..82fa96f 100644
--- a/ui/base/strings/ui_strings_hr.xtb
+++ b/ui/base/strings/ui_strings_hr.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> B</translation>
 <translation id="3660179305079774227">Strelica prema gore</translation>
+<translation id="3969863827134279083">Premjesti prema gore</translation>
 <translation id="7062130397825382308">Preostalo <ph name="NUMBER_ONE"/> s</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> MB/s</translation>
 <translation id="5608669887400696928">Broj sati: <ph name="NUMBER_DEFAULT"/></translation>
 <translation id="3990502903496589789">Desni rub</translation>
 <translation id="9038489124413477075">Neimenovana mapa</translation>
+<translation id="1940483897317142625">Izbriši do kraja retka</translation>
 <translation id="8507996248087185956">Broj minuta: <ph name="NUMBER_DEFAULT"/></translation>
 <translation id="3520476450377425184">Preostalo dana: <ph name="NUMBER_MANY"/></translation>
 <translation id="932327136139879170">Home</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011">Prije <ph name="NUMBER_FEW"/> dana</translation>
 <translation id="5076340679995252485">&amp;Zalijepi</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> TB</translation>
+<translation id="7139614227326422685">Premjesti riječ udesno</translation>
 <translation id="364720409959344976">Odabir mape za prijenos</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016">Prije <ph name="NUMBER_TWO"/> minute</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">Zatvaranje obavijesti</translation>
 <translation id="6364916375976753737">Pomakni se lijevo</translation>
 <translation id="2629089419211541119">Prije <ph name="NUMBER_ONE"/> sat</translation>
+<translation id="4218160142017529598">Izbriši unatrag</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> minuta</translation>
 <translation id="6982279413068714821">Prije <ph name="NUMBER_DEFAULT"/> minuta</translation>
 <translation id="6945221475159498467">Odaberi</translation>
 <translation id="6620110761915583480">Spremi datoteku</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> seconds</translation>
+<translation id="8924469368910458384">Izbriši do početka retka</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> hours</translation>
 <translation id="7836361698254323868">Preostalo minuta: <ph name="NUMBER_ONE"/></translation>
 <translation id="2953767478223974804">Broj minuta: <ph name="NUMBER_ONE"/></translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863">Broj dana: <ph name="NUMBER_MANY"/></translation>
 <translation id="7163503212501929773">Preostalo sati: <ph name="NUMBER_MANY"/></translation>
 <translation id="5329858601952122676">&amp;Obriši</translation>
+<translation id="6556866813142980365">Ponovi</translation>
 <translation id="8088823334188264070">Sekundi: <ph name="NUMBER_MANY"/></translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> KB</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> minutes</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> minutes</translation>
 <translation id="50960180632766478">Preostalo minuta: <ph name="NUMBER_FEW"/></translation>
 <translation id="5517291721709019259">Preostalo <ph name="NUMBER_FEW"/> s</translation>
+<translation id="6903282483217634857">Premjesti udesno</translation>
 <translation id="6659594942844771486">Kartica</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> MB</translation>
 <translation id="4988273303304146523">Prije <ph name="NUMBER_DEFAULT"/> dana</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773">Broj minuta: <ph name="NUMBER_TWO"/></translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> hours left</translation>
 <translation id="7135556860107312402">Omogućite obavijesti iz sljedećih izvora:</translation>
+<translation id="2479520428668657293">Premjesti udesno i izmijeni odabir</translation>
 <translation id="8112886015144590373">Broj sati: <ph name="NUMBER_FEW"/></translation>
 <translation id="1398853756734560583">Maksimiziraj</translation>
 <translation id="4250229828105606438">Snimka zaslona</translation>
 <translation id="6690744523875189208">Broj sati: <ph name="NUMBER_TWO"/></translation>
 <translation id="5260878308685146029">Preostalo minuta: <ph name="NUMBER_TWO"/></translation>
+<translation id="2557207087669398617">Premjesti na početak retka</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> GB</translation>
 <translation id="1901303067676059328">Odaberi &amp;sve</translation>
 <translation id="2168039046890040389">Stranica prema gore</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> mins</translation>
 <translation id="9107059250669762581">Broj dana: <ph name="NUMBER_DEFAULT"/></translation>
 <translation id="6463061331681402734">Broj minuta: <ph name="NUMBER_MANY"/></translation>
+<translation id="6122334925474904337">Premjesti riječ udesno i izmijeni odabir</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> minuta</translation>
 <translation id="8448317557906454022"><ph name="NUMBER_ZERO"/> secs ago</translation>
 <translation id="4927753642311223124">Nema nikakvih obavijesti.</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> days</translation>
 <translation id="3183922693828471536">Pomakni ovdje</translation>
 <translation id="4552416320897244156">PgDwn</translation>
+<translation id="3066573403916685335">Premjesti dolje</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401">Sati: <ph name="NUMBER_MANY"/></translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> KB/s</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780">Preostalo sati: <ph name="NUMBER_ONE"/></translation>
 <translation id="1413622004203049571">Onemogući obavijesti pošiljatelja <ph name="NOTIFIER_NAME"/></translation>
 <translation id="2666092431469916601">Gornji</translation>
+<translation id="2538759511191347839">Premjesti na kraj retka i izmijeni odabir</translation>
+<translation id="928465423150706909">Premjesti na kraj retka</translation>
 <translation id="8331626408530291785">Pomakni se gore</translation>
 <translation id="7907591526440419938">Otvori datoteku</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> days left</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">Zaustavi Medije</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> mins left</translation>
 <translation id="3157931365184549694">Vrati</translation>
+<translation id="5349525451964472598">Premjesti ulijevo i izmijeni odabir</translation>
+<translation id="1781701194097416995">Premjesti riječ ulijevo</translation>
 <translation id="1243314992276662751">Prenesi</translation>
 <translation id="50030952220075532">Preostalo dana: <ph name="NUMBER_ONE"/></translation>
 <translation id="8179976553408161302">Pridružite se</translation>
+<translation id="8471049483003785219">Premjesti riječ ulijevo i izmijeni odabir</translation>
 <translation id="945522503751344254">Slanje povratnih informacija</translation>
 <translation id="9170848237812810038">&amp;Poništi</translation>
 <translation id="1285266685456062655">Prije <ph name="NUMBER_FEW"/> sata</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> hours ago</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> GB/s</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/>dan</translation>
+<translation id="2704295676501803339">Premjesti ulijevo</translation>
 <translation id="9098468523912235228">Prije <ph name="NUMBER_DEFAULT"/> sekundi</translation>
 <translation id="494645311413743213">Preostalo sekundi <ph name="NUMBER_TWO"/></translation>
 <translation id="4570886800634958009">Proširivanje obavijesti</translation>
+<translation id="566737009157135450">Izbriši prethodnu riječ</translation>
 <translation id="436869212180315161">Pritisnite</translation>
 <translation id="4860787810836767172">Prije <ph name="NUMBER_FEW"/> sek</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> TB/s</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497"><ph name="NUMBER_MANY"/> mins ago</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> B/s</translation>
 <translation id="7649070708921625228">Pomoć</translation>
+<translation id="2405367043325750948">Izbriši prema naprijed</translation>
 <translation id="6699343763173986273">Sljedeći zapis Medija</translation>
 <translation id="5445120697129764393">Preostalo <ph name="NUMBER_DEFAULT"/> s</translation>
 <translation id="8226233771743600312">Ne ometaj jedan dan</translation>
+<translation id="4252565523989510616">Izbriši sljedeću riječ</translation>
 <translation id="7457942297256758195">Očisti sve</translation>
 <translation id="822618367988303761">Prije <ph name="NUMBER_TWO"/> dana</translation>
 <translation id="4745438305783437565">Broj minuta: <ph name="NUMBER_FEW"/></translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> PB/s</translation>
 <translation id="2743387203779672305">Kopiraj u međuspremnik</translation>
 <translation id="8371695176452482769">Govorite sad</translation>
+<translation id="1167268268675672572">Pomakni na početak retka i izmijeni odabir</translation>
 <translation id="6965382102122355670">U redu</translation>
 <translation id="7850320739366109486">Ne ometaj</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> days ago</translation>
diff --git a/ui/base/strings/ui_strings_hu.xtb b/ui/base/strings/ui_strings_hu.xtb
index 7240269..984a0c5 100644
--- a/ui/base/strings/ui_strings_hu.xtb
+++ b/ui/base/strings/ui_strings_hu.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> bájt</translation>
 <translation id="3660179305079774227">Felfelé nyíl</translation>
+<translation id="3969863827134279083">Fel</translation>
 <translation id="7062130397825382308"><ph name="NUMBER_ONE"/> másodperc van hátra</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> MB/s</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> óra</translation>
 <translation id="3990502903496589789">Jobb sarok</translation>
 <translation id="9038489124413477075">Név nélküli mappa</translation>
+<translation id="1940483897317142625">Törlés a sor végéig</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/> perc</translation>
 <translation id="3520476450377425184"><ph name="NUMBER_MANY"/> nap van hátra</translation>
 <translation id="932327136139879170">Főoldal</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011"><ph name="NUMBER_FEW"/> days ago</translation>
 <translation id="5076340679995252485">&amp;Beillesztés</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> TB</translation>
+<translation id="7139614227326422685">Egy szóval jobbra</translation>
 <translation id="364720409959344976">Mappa kiválasztása a feltöltéshez</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016"><ph name="NUMBER_TWO"/> mins ago</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">Értesítés bezárása</translation>
 <translation id="6364916375976753737">Görgetés balra</translation>
 <translation id="2629089419211541119"><ph name="NUMBER_ONE"/> órája</translation>
+<translation id="4218160142017529598">Törlés visszafelé</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> perc</translation>
 <translation id="6982279413068714821"><ph name="NUMBER_DEFAULT"/> perce</translation>
 <translation id="6945221475159498467">Kiválasztás</translation>
 <translation id="6620110761915583480">Fájl mentése</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> másodperc</translation>
+<translation id="8924469368910458384">Törlés a sor elejéig</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> hours</translation>
 <translation id="7836361698254323868"><ph name="NUMBER_ONE"/> perc van hátra</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> perc</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863"><ph name="NUMBER_MANY"/> nap</translation>
 <translation id="7163503212501929773"><ph name="NUMBER_MANY"/> óra van hátra</translation>
 <translation id="5329858601952122676">&amp;Törlés</translation>
+<translation id="6556866813142980365">Újra</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> másodperc</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> kB</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> perc</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> perc</translation>
 <translation id="50960180632766478"><ph name="NUMBER_FEW"/> perc van hátra</translation>
 <translation id="5517291721709019259"><ph name="NUMBER_FEW"/> seconds left</translation>
+<translation id="6903282483217634857">Jobbra</translation>
 <translation id="6659594942844771486">Lap</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> MB</translation>
 <translation id="4988273303304146523"><ph name="NUMBER_DEFAULT"/> napja</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/> perc</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> hours left</translation>
 <translation id="7135556860107312402">Értesítések engedélyezése a következőtől:</translation>
+<translation id="2479520428668657293">Jobbra és kijelölés módosítása</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/> óra</translation>
 <translation id="1398853756734560583">Teljes méret</translation>
 <translation id="4250229828105606438">Képernyőkép</translation>
 <translation id="6690744523875189208"><ph name="NUMBER_TWO"/> óra</translation>
 <translation id="5260878308685146029"><ph name="NUMBER_TWO"/> perc van hátra</translation>
+<translation id="2557207087669398617">Sor elejére</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> GB</translation>
 <translation id="1901303067676059328">Össz&amp;es kiválasztása</translation>
 <translation id="2168039046890040389">Oldal fel</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> mins</translation>
 <translation id="9107059250669762581"><ph name="NUMBER_DEFAULT"/> nap</translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> perc</translation>
+<translation id="6122334925474904337">Egy szóval jobbra és kijelölés módosítása</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> perc</translation>
 <translation id="8448317557906454022"><ph name="NUMBER_ZERO"/> secs ago</translation>
 <translation id="4927753642311223124">Itt nincs semmi, továbbmehet.</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> days</translation>
 <translation id="3183922693828471536">Görgessen ide</translation>
 <translation id="4552416320897244156">PgDwn</translation>
+<translation id="3066573403916685335">Le</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/> óra</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> kB/s</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780"><ph name="NUMBER_ONE"/> óra van hátra</translation>
 <translation id="1413622004203049571">A(z) <ph name="NOTIFIER_NAME"/> értesítéseinek kikapcsolása</translation>
 <translation id="2666092431469916601">Felülre</translation>
+<translation id="2538759511191347839">Sor végére és kijelölés módosítása</translation>
+<translation id="928465423150706909">Sor végére</translation>
 <translation id="8331626408530291785">Görgetés felfelé</translation>
 <translation id="7907591526440419938">Fájl megnyitása</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> days left</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">Leállítás</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> mins left</translation>
 <translation id="3157931365184549694">Visszaállítás</translation>
+<translation id="5349525451964472598">Lefelé és kijelölés módosítása</translation>
+<translation id="1781701194097416995">Egy szóval lefelé</translation>
 <translation id="1243314992276662751">Feltöltés</translation>
 <translation id="50030952220075532"><ph name="NUMBER_ONE"/> nap van hátra</translation>
 <translation id="8179976553408161302">Belépés</translation>
+<translation id="8471049483003785219">Egy szóval balra és kijelölés módosítása</translation>
 <translation id="945522503751344254">Visszajelzés küldése</translation>
 <translation id="9170848237812810038">&amp;Visszavonás</translation>
 <translation id="1285266685456062655"><ph name="NUMBER_FEW"/> hours ago</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> hours ago</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> GB/s</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/> nap</translation>
+<translation id="2704295676501803339">Balra</translation>
 <translation id="9098468523912235228"><ph name="NUMBER_DEFAULT"/> másodperce</translation>
 <translation id="494645311413743213"><ph name="NUMBER_TWO"/> másodperc van hátra.</translation>
 <translation id="4570886800634958009">Értesítés kibontása</translation>
+<translation id="566737009157135450">Szó törlése visszafelé</translation>
 <translation id="436869212180315161">Sajtó</translation>
 <translation id="4860787810836767172"><ph name="NUMBER_FEW"/> secs ago</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> TB/s</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497"><ph name="NUMBER_MANY"/> mins ago</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> B/s</translation>
 <translation id="7649070708921625228">Súgó</translation>
+<translation id="2405367043325750948">Törlés előrefelé</translation>
 <translation id="6699343763173986273">Következő szám</translation>
 <translation id="5445120697129764393"><ph name="NUMBER_DEFAULT"/> másodperc van hátra</translation>
 <translation id="8226233771743600312">Ne zavarj egy napig</translation>
+<translation id="4252565523989510616">Szó törlése előrefelé</translation>
 <translation id="7457942297256758195">Összes törlése</translation>
 <translation id="822618367988303761"><ph name="NUMBER_TWO"/> days ago</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> perc</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> PB/s</translation>
 <translation id="2743387203779672305">Másolás a vágólapra</translation>
 <translation id="8371695176452482769">Most beszéljen</translation>
+<translation id="1167268268675672572">Sor elejére és kijelölés módosítása</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7850320739366109486">Ne zavarj</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> days ago</translation>
diff --git a/ui/base/strings/ui_strings_id.xtb b/ui/base/strings/ui_strings_id.xtb
index 5927d2d..82c3623 100644
--- a/ui/base/strings/ui_strings_id.xtb
+++ b/ui/base/strings/ui_strings_id.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> B</translation>
 <translation id="3660179305079774227">Panah Atas</translation>
+<translation id="3969863827134279083">Pindah ke Atas</translation>
 <translation id="7062130397825382308"><ph name="NUMBER_ONE"/> detik lagi</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> MB/dtk</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> jam</translation>
 <translation id="3990502903496589789">Tepi Kanan</translation>
 <translation id="9038489124413477075">Folder Tanpa Nama</translation>
+<translation id="1940483897317142625">Hapus Sampai Akhir Baris</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/> menit</translation>
 <translation id="3520476450377425184">Tersisa <ph name="NUMBER_MANY"/> hari</translation>
 <translation id="932327136139879170">Beranda</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011"><ph name="NUMBER_FEW"/> hari yang lalu</translation>
 <translation id="5076340679995252485">Tem&amp;pel</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> TB</translation>
+<translation id="7139614227326422685">Pindahkan ke Kanan Kata</translation>
 <translation id="364720409959344976">Pilih Folder untuk Diunggah</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016"><ph name="NUMBER_TWO"/> mnt. yang lalu</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">Tutup pemberitahuan</translation>
 <translation id="6364916375976753737">Gulir ke Kiri</translation>
 <translation id="2629089419211541119"><ph name="NUMBER_ONE"/> jam yang lalu</translation>
+<translation id="4218160142017529598">Hapus dari Belakang</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> menit</translation>
 <translation id="6982279413068714821"><ph name="NUMBER_DEFAULT"/> mnt. yang lalu</translation>
 <translation id="6945221475159498467">Pilih</translation>
 <translation id="6620110761915583480">Simpan File</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> detik</translation>
+<translation id="8924469368910458384">Hapus Sampai Awal Baris</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> hours</translation>
 <translation id="7836361698254323868">Tersisa <ph name="NUMBER_ONE"/> menit</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> menit</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863"><ph name="NUMBER_MANY"/> hari</translation>
 <translation id="7163503212501929773">Tersisa <ph name="NUMBER_MANY"/> jam</translation>
 <translation id="5329858601952122676">&amp;Hapus</translation>
+<translation id="6556866813142980365">Urungkan</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> detik</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> KB</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> menit</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> menit</translation>
 <translation id="50960180632766478">Tersisa <ph name="NUMBER_FEW"/> menit</translation>
 <translation id="5517291721709019259"><ph name="NUMBER_FEW"/> seconds left</translation>
+<translation id="6903282483217634857">Pindah ke Kanan</translation>
 <translation id="6659594942844771486">Tab</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> MB</translation>
 <translation id="4988273303304146523"><ph name="NUMBER_DEFAULT"/> hari yang lalu</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/> menit</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> hours left</translation>
 <translation id="7135556860107312402">Izinkan pemberitahuan dari yang berikut:</translation>
+<translation id="2479520428668657293">Pindah ke Kanan dan Ubah Pilihan</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/> jam</translation>
 <translation id="1398853756734560583">Perbesar</translation>
 <translation id="4250229828105606438">Tangkapan layar</translation>
 <translation id="6690744523875189208"><ph name="NUMBER_TWO"/> jam</translation>
 <translation id="5260878308685146029">Tersisa <ph name="NUMBER_TWO"/> menit</translation>
+<translation id="2557207087669398617">Pindah ke Awal Baris</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> GB</translation>
 <translation id="1901303067676059328">Pilih semu&amp;a</translation>
 <translation id="2168039046890040389">Page Up</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> mins</translation>
 <translation id="9107059250669762581"><ph name="NUMBER_DEFAULT"/> hari</translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> menit</translation>
+<translation id="6122334925474904337">Pindah ke Kanan Kata dan Ubah Pilihan</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> menit</translation>
 <translation id="8448317557906454022"><ph name="NUMBER_ZERO"/> dtk. yang lalu</translation>
 <translation id="4927753642311223124">Tidak ada apa-apa di sini, lihat yang lain saja.</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> days</translation>
 <translation id="3183922693828471536">Gulir ke Sini</translation>
 <translation id="4552416320897244156">PgDwn</translation>
+<translation id="3066573403916685335">Turunkan</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/> jam</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> KB/dtk</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780">Tersisa <ph name="NUMBER_ONE"/> jam</translation>
 <translation id="1413622004203049571">Nonaktifkan pemberitahuan dari <ph name="NOTIFIER_NAME"/></translation>
 <translation id="2666092431469916601">Atas</translation>
+<translation id="2538759511191347839">Pindah ke Akhir Baris dan Ubah Pilihan</translation>
+<translation id="928465423150706909">Pindah ke Akhir Baris</translation>
 <translation id="8331626408530291785">Gulir ke Atas</translation>
 <translation id="7907591526440419938">Buka File</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> days left</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">Hentikan Media</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> mins left</translation>
 <translation id="3157931365184549694">Pulihkan</translation>
+<translation id="5349525451964472598">Pindah ke Kiri dan Ubah Pilihan</translation>
+<translation id="1781701194097416995">Pindah ke Kiri Kata</translation>
 <translation id="1243314992276662751">Unggah</translation>
 <translation id="50030952220075532">Tersisa <ph name="NUMBER_ONE"/> hari</translation>
 <translation id="8179976553408161302">Masuk</translation>
+<translation id="8471049483003785219">Pindah ke Kiri Kata dan Ubah Pilihan</translation>
 <translation id="945522503751344254">Kirim masukan</translation>
 <translation id="9170848237812810038">&amp;Urung</translation>
 <translation id="1285266685456062655"><ph name="NUMBER_FEW"/> jam yang lalu</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> hours ago</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> GB/dtk</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/> hari</translation>
+<translation id="2704295676501803339">Pindah ke Kiri</translation>
 <translation id="9098468523912235228"><ph name="NUMBER_DEFAULT"/> dtk. yang lalu</translation>
 <translation id="494645311413743213">Tersisa <ph name="NUMBER_TWO"/> detik</translation>
 <translation id="4570886800634958009">Luaskan pemberitahuan</translation>
+<translation id="566737009157135450">Hapus dari Belakang Per Kata</translation>
 <translation id="436869212180315161">Tekan</translation>
 <translation id="4860787810836767172"><ph name="NUMBER_FEW"/> dtk. yang lalu</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> TB/dtk</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497"><ph name="NUMBER_MANY"/> mnt. yang lalu</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> B/dtk</translation>
 <translation id="7649070708921625228">Bantuan</translation>
+<translation id="2405367043325750948">Hapus dari Depan</translation>
 <translation id="6699343763173986273">Lacak Media Berikutnya</translation>
 <translation id="5445120697129764393"><ph name="NUMBER_DEFAULT"/> detik lagi</translation>
 <translation id="8226233771743600312">Jangan ganggu selama satu hari</translation>
+<translation id="4252565523989510616">Hapus dari Depan Per Kata</translation>
 <translation id="7457942297256758195">Hapus Semua</translation>
 <translation id="822618367988303761"><ph name="NUMBER_TWO"/> hari yang lalu</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> menit</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> PB/dtk</translation>
 <translation id="2743387203779672305">Salin ke papan klip</translation>
 <translation id="8371695176452482769">Bicaralah sekarang</translation>
+<translation id="1167268268675672572">Pindah ke Awal Baris dan Ubah Pilihan</translation>
 <translation id="6965382102122355670">Oke</translation>
 <translation id="7850320739366109486">Jangan Ganggu</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> days ago</translation>
diff --git a/ui/base/strings/ui_strings_it.xtb b/ui/base/strings/ui_strings_it.xtb
index 7d2abdb..88e31b4 100644
--- a/ui/base/strings/ui_strings_it.xtb
+++ b/ui/base/strings/ui_strings_it.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> B</translation>
 <translation id="3660179305079774227">Freccia SU</translation>
+<translation id="3969863827134279083">Sposta su</translation>
 <translation id="7062130397825382308"><ph name="NUMBER_ONE"/> secondo rimasto</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> MB/s</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> ore</translation>
 <translation id="3990502903496589789">Margine destro</translation>
 <translation id="9038489124413477075">Cartella senza nome</translation>
+<translation id="1940483897317142625">Elimina fino a fine riga</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/> min.</translation>
 <translation id="3520476450377425184"><ph name="NUMBER_MANY"/> giorni rimanenti</translation>
 <translation id="932327136139879170">Home</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011"><ph name="NUMBER_FEW"/> giorni fa</translation>
 <translation id="5076340679995252485">&amp;Incolla</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> TB</translation>
+<translation id="7139614227326422685">Sposta di una parola a destra</translation>
 <translation id="364720409959344976">Seleziona la cartella da caricare</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016"><ph name="NUMBER_TWO"/> minuti fa</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">Chiusura notifica</translation>
 <translation id="6364916375976753737">Scorri a sinistra</translation>
 <translation id="2629089419211541119"><ph name="NUMBER_ONE"/> ora fa</translation>
+<translation id="4218160142017529598">Elimina indietro</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> minuti</translation>
 <translation id="6982279413068714821"><ph name="NUMBER_DEFAULT"/> minuti fa</translation>
 <translation id="6945221475159498467">Seleziona</translation>
 <translation id="6620110761915583480">Salva file</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> secondi</translation>
+<translation id="8924469368910458384">Elimina fino a inizio riga</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> hours</translation>
 <translation id="7836361698254323868"><ph name="NUMBER_ONE"/> minuto rimanente</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> min.</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863"><ph name="NUMBER_MANY"/> giorni</translation>
 <translation id="7163503212501929773"><ph name="NUMBER_MANY"/> ore rimanenti</translation>
 <translation id="5329858601952122676">&amp;Elimina</translation>
+<translation id="6556866813142980365">Ripeti</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> sec.</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> kB</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> minutes</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> minutes</translation>
 <translation id="50960180632766478"><ph name="NUMBER_FEW"/> min. rimanenti</translation>
 <translation id="5517291721709019259"><ph name="NUMBER_FEW"/> secondi rimasti</translation>
+<translation id="6903282483217634857">Sposta a destra</translation>
 <translation id="6659594942844771486">TAB</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> MB</translation>
 <translation id="4988273303304146523"><ph name="NUMBER_DEFAULT"/> giorni fa</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/> min.</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> hours left</translation>
 <translation id="7135556860107312402">Consenti notifiche da:</translation>
+<translation id="2479520428668657293">Sposta a destra e modifica selezione</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/> ore</translation>
 <translation id="1398853756734560583">Ingrandisci</translation>
 <translation id="4250229828105606438">Screenshot</translation>
 <translation id="6690744523875189208"><ph name="NUMBER_TWO"/> ore</translation>
 <translation id="5260878308685146029"><ph name="NUMBER_TWO"/> min. rimanenti</translation>
+<translation id="2557207087669398617">Sposta fino a inizio riga</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> GB</translation>
 <translation id="1901303067676059328">Seleziona &amp;tutto</translation>
 <translation id="2168039046890040389">Pagina su</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> mins</translation>
 <translation id="9107059250669762581"><ph name="NUMBER_DEFAULT"/> giorni</translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> min.</translation>
+<translation id="6122334925474904337">Sposta di una parola a destra e modifica selezione</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> minuto</translation>
 <translation id="8448317557906454022"><ph name="NUMBER_ZERO"/> secondi fa</translation>
 <translation id="4927753642311223124">Nessuna notifica.</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> days</translation>
 <translation id="3183922693828471536">Scorri fino a qui</translation>
 <translation id="4552416320897244156">PGGIÙ</translation>
+<translation id="3066573403916685335">Sposta giù</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/> ore</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> kB/s</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780"><ph name="NUMBER_ONE"/> ora rimanente</translation>
 <translation id="1413622004203049571">Disabilita notifiche da <ph name="NOTIFIER_NAME"/></translation>
 <translation id="2666092431469916601">In alto</translation>
+<translation id="2538759511191347839">Sposta fino a fine riga e modifica selezione</translation>
+<translation id="928465423150706909">Sposta fino a fine riga</translation>
 <translation id="8331626408530291785">Scorri verso l'alto</translation>
 <translation id="7907591526440419938">Apri file</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> days left</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">Interrompi contenuti multimediali</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> mins left</translation>
 <translation id="3157931365184549694">Ripristina</translation>
+<translation id="5349525451964472598">Sposta a sinistra e modifica selezione</translation>
+<translation id="1781701194097416995">Sposta di una parola a sinistra</translation>
 <translation id="1243314992276662751">Carica</translation>
 <translation id="50030952220075532"><ph name="NUMBER_ONE"/> giorno rimanente</translation>
 <translation id="8179976553408161302">Invia</translation>
+<translation id="8471049483003785219">Sposta di una parola a sinistra e modifica selezione</translation>
 <translation id="945522503751344254">Invia feedback</translation>
 <translation id="9170848237812810038">&amp;Annulla</translation>
 <translation id="1285266685456062655"><ph name="NUMBER_FEW"/> ore fa</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> hours ago</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> GB/s</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/> giorno</translation>
+<translation id="2704295676501803339">Sposta a sinistra</translation>
 <translation id="9098468523912235228"><ph name="NUMBER_DEFAULT"/> secondi fa</translation>
 <translation id="494645311413743213"><ph name="NUMBER_TWO"/> sec. rimanenti</translation>
 <translation id="4570886800634958009">Espansione notifica</translation>
+<translation id="566737009157135450">Elimina una parola indietro</translation>
 <translation id="436869212180315161">Premi</translation>
 <translation id="4860787810836767172"><ph name="NUMBER_FEW"/> secondi fa</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> TB/s</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497"><ph name="NUMBER_MANY"/> minuti fa</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> B/s</translation>
 <translation id="7649070708921625228">Guida</translation>
+<translation id="2405367043325750948">Elimina avanti</translation>
 <translation id="6699343763173986273">Traccia successiva contenuti multimediali</translation>
 <translation id="5445120697129764393"><ph name="NUMBER_DEFAULT"/> secondi rimasti</translation>
 <translation id="8226233771743600312">Non disturbare per un giorno</translation>
+<translation id="4252565523989510616">Elimina una parola avanti</translation>
 <translation id="7457942297256758195">Cancella tutto</translation>
 <translation id="822618367988303761"><ph name="NUMBER_TWO"/> giorni fa</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> min.</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> PB/s</translation>
 <translation id="2743387203779672305">Copia negli appunti</translation>
 <translation id="8371695176452482769">Parla adesso</translation>
+<translation id="1167268268675672572">Sposta fino a inizio riga e modifica selezione</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7850320739366109486">Non disturbare</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> days ago</translation>
diff --git a/ui/base/strings/ui_strings_iw.xtb b/ui/base/strings/ui_strings_iw.xtb
index 693594b..f39dfc8 100644
--- a/ui/base/strings/ui_strings_iw.xtb
+++ b/ui/base/strings/ui_strings_iw.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> B</translation>
 <translation id="3660179305079774227">חץ למעלה</translation>
+<translation id="3969863827134279083">עלה למעלה</translation>
 <translation id="7062130397825382308">נותרה שנייה <ph name="NUMBER_ONE"/></translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> MB/s</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> שעות</translation>
 <translation id="3990502903496589789">קצה ימני</translation>
 <translation id="9038489124413477075">תיקייה ללא שם</translation>
+<translation id="1940483897317142625">מחק עד סוף השורה</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/> דקות</translation>
 <translation id="3520476450377425184">נותרו <ph name="NUMBER_MANY"/> ימים</translation>
 <translation id="932327136139879170">בית</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011">לפני <ph name="NUMBER_FEW"/> ימים</translation>
 <translation id="5076340679995252485">&amp;הדבק</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> TB</translation>
+<translation id="7139614227326422685">העבר את המילה ימינה</translation>
 <translation id="364720409959344976">בחירת תיקיה להעלאה</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016">לפני <ph name="NUMBER_TWO"/> דקות</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">סגירת הודעה</translation>
 <translation id="6364916375976753737">גלול שמאלה</translation>
 <translation id="2629089419211541119">לפני <ph name="NUMBER_ONE"/> שעה</translation>
+<translation id="4218160142017529598">מחק לאחור</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> דקות</translation>
 <translation id="6982279413068714821">לפני <ph name="NUMBER_DEFAULT"/> דקות</translation>
 <translation id="6945221475159498467">בחר</translation>
 <translation id="6620110761915583480">שמור קובץ</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> שניות</translation>
+<translation id="8924469368910458384">מחק עד תחילת השורה</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> hours</translation>
 <translation id="7836361698254323868">נותרה דקה <ph name="NUMBER_ONE"/></translation>
 <translation id="2953767478223974804">דקה <ph name="NUMBER_ONE"/></translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863"><ph name="NUMBER_MANY"/> ימים</translation>
 <translation id="7163503212501929773">נותרו <ph name="NUMBER_MANY"/> שעות</translation>
 <translation id="5329858601952122676">&amp;מחק</translation>
+<translation id="6556866813142980365">בצע מחדש</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> שניות</translation>
 <translation id="8901569739625249689">‏<ph name="QUANTITY"/> KB‏</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> דקות</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> דקות</translation>
 <translation id="50960180632766478">נותרו <ph name="NUMBER_FEW"/> דקות</translation>
 <translation id="5517291721709019259">נותרו <ph name="NUMBER_FEW"/> שניות</translation>
+<translation id="6903282483217634857">העבר ימינה</translation>
 <translation id="6659594942844771486">Tab</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> MB</translation>
 <translation id="4988273303304146523">לפני <ph name="NUMBER_DEFAULT"/> ימים</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/> דקות</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> hours left</translation>
 <translation id="7135556860107312402">אפשר התראות ממקורות אלה:</translation>
+<translation id="2479520428668657293">העבר ימינה ושנה את הבחירה</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/> שעות</translation>
 <translation id="1398853756734560583">הגדל</translation>
 <translation id="4250229828105606438">צילום מסך</translation>
 <translation id="6690744523875189208"><ph name="NUMBER_TWO"/> שעות</translation>
 <translation id="5260878308685146029"><ph name="NUMBER_TWO"/> דקות נותרו</translation>
+<translation id="2557207087669398617">העבר לתחילת השורה</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> GB</translation>
 <translation id="1901303067676059328">בחר &amp;הכל</translation>
 <translation id="2168039046890040389">דף למעלה</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> mins</translation>
 <translation id="9107059250669762581"><ph name="NUMBER_DEFAULT"/> ימים</translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> דקות</translation>
+<translation id="6122334925474904337">העבר את המילה ימינה ושנה את הבחירה</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> דקה</translation>
 <translation id="8448317557906454022">לפני <ph name="NUMBER_ZERO"/> שניות</translation>
 <translation id="4927753642311223124">אין התראות להצגה, המשך הלאה.</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> days</translation>
 <translation id="3183922693828471536">גלול ל'כאן'</translation>
 <translation id="4552416320897244156">דף למטה</translation>
+<translation id="3066573403916685335">העבר למטה</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/> שעות</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> KB/s‎</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780">נותרו <ph name="NUMBER_ONE"/> שעות</translation>
 <translation id="1413622004203049571">השבת הודעות מאת <ph name="NOTIFIER_NAME"/></translation>
 <translation id="2666092431469916601">למעלה</translation>
+<translation id="2538759511191347839">העבר לסוף השורה ושנה את הבחירה</translation>
+<translation id="928465423150706909">העבר לסוף השורה</translation>
 <translation id="8331626408530291785">גלול למעלה</translation>
 <translation id="7907591526440419938">פתח קובץ</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> days left</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">עצור מדיה</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> mins left</translation>
 <translation id="3157931365184549694">שחזר</translation>
+<translation id="5349525451964472598">העבר שמאלה ושנה את הבחירה</translation>
+<translation id="1781701194097416995">העבר את המילה שמאלה</translation>
 <translation id="1243314992276662751">העלה</translation>
 <translation id="50030952220075532">נותר יום <ph name="NUMBER_ONE"/></translation>
 <translation id="8179976553408161302">היכנס</translation>
+<translation id="8471049483003785219">העבר את המילה שמאלה ושנה את הבחירה</translation>
 <translation id="945522503751344254">שלח משוב</translation>
 <translation id="9170848237812810038">&amp;ביטול</translation>
 <translation id="1285266685456062655">לפני <ph name="NUMBER_FEW"/> שעות</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> hours ago</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> GB/s</translation>
 <translation id="6644971472240498405">יום <ph name="NUMBER_ONE"/></translation>
+<translation id="2704295676501803339">העבר שמאלה</translation>
 <translation id="9098468523912235228">לפני <ph name="NUMBER_DEFAULT"/> שניות</translation>
 <translation id="494645311413743213"><ph name="NUMBER_TWO"/> שניות נותרו</translation>
 <translation id="4570886800634958009">הרחבת הודעה</translation>
+<translation id="566737009157135450">מחק את המילה לאחור</translation>
 <translation id="436869212180315161">לחץ</translation>
 <translation id="4860787810836767172">לפני <ph name="NUMBER_FEW"/> שניות</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> TB/s</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497">לפני <ph name="NUMBER_MANY"/> דקות</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> B/s</translation>
 <translation id="7649070708921625228">עזרה</translation>
+<translation id="2405367043325750948">מחק קדימה</translation>
 <translation id="6699343763173986273">הרצועה הבאה במדיה</translation>
 <translation id="5445120697129764393">נותרו <ph name="NUMBER_DEFAULT"/> שניות</translation>
 <translation id="8226233771743600312">נא לא להפריע ליום אחד</translation>
+<translation id="4252565523989510616">מחק את המילה קדימה</translation>
 <translation id="7457942297256758195">נקה הכל</translation>
 <translation id="822618367988303761">לפני <ph name="NUMBER_TWO"/> ימים</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> דקות</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> PB/s</translation>
 <translation id="2743387203779672305">העתק ללוח</translation>
 <translation id="8371695176452482769">דבר עכשיו</translation>
+<translation id="1167268268675672572">העבר לתחילת השורה ושנה את הבחירה</translation>
 <translation id="6965382102122355670">אישור</translation>
 <translation id="7850320739366109486">נא לא להפריע</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> days ago</translation>
diff --git a/ui/base/strings/ui_strings_ja.xtb b/ui/base/strings/ui_strings_ja.xtb
index 0990fba..7b0f346 100644
--- a/ui/base/strings/ui_strings_ja.xtb
+++ b/ui/base/strings/ui_strings_ja.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> B</translation>
 <translation id="3660179305079774227">上矢印キー</translation>
+<translation id="3969863827134279083">上に移動</translation>
 <translation id="7062130397825382308">残り <ph name="NUMBER_ONE"/> 秒</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> MB/秒</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> 時間</translation>
 <translation id="3990502903496589789">右端</translation>
 <translation id="9038489124413477075">名前のないフォルダ</translation>
+<translation id="1940483897317142625">行末まで削除</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/> 分</translation>
 <translation id="3520476450377425184">残り <ph name="NUMBER_MANY"/> 日</translation>
 <translation id="932327136139879170">Home</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011"><ph name="NUMBER_FEW"/> 日前</translation>
 <translation id="5076340679995252485">貼り付け(&amp;P)</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> TB</translation>
+<translation id="7139614227326422685">右の単語に移動</translation>
 <translation id="364720409959344976">アップロードするフォルダを選択</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016"><ph name="NUMBER_TWO"/> 分前</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">通知を閉じる</translation>
 <translation id="6364916375976753737">左にスクロール</translation>
 <translation id="2629089419211541119"><ph name="NUMBER_ONE"/> 時間前</translation>
+<translation id="4218160142017529598">後方削除</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> 分</translation>
 <translation id="6982279413068714821"><ph name="NUMBER_DEFAULT"/> 分前</translation>
 <translation id="6945221475159498467">選択</translation>
 <translation id="6620110761915583480">ファイルを保存</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> 秒</translation>
+<translation id="8924469368910458384">行頭まで削除</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> hours</translation>
 <translation id="7836361698254323868">残り <ph name="NUMBER_ONE"/> 分</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> 分</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863"><ph name="NUMBER_MANY"/> 日</translation>
 <translation id="7163503212501929773">残り <ph name="NUMBER_MANY"/> 時間</translation>
 <translation id="5329858601952122676">削除(&amp;D)</translation>
+<translation id="6556866813142980365">やり直す</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> 秒</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> KB</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> 分</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> 分</translation>
 <translation id="50960180632766478">残り <ph name="NUMBER_FEW"/> 分</translation>
 <translation id="5517291721709019259">残り <ph name="NUMBER_FEW"/> 秒</translation>
+<translation id="6903282483217634857">右に移動</translation>
 <translation id="6659594942844771486">Tab</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> MB</translation>
 <translation id="4988273303304146523"><ph name="NUMBER_DEFAULT"/> 日前</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/> 分</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> hours left</translation>
 <translation id="7135556860107312402">次の通知を許可:</translation>
+<translation id="2479520428668657293">右に移動して選択範囲を変更</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/> 時間</translation>
 <translation id="1398853756734560583">最大化</translation>
 <translation id="4250229828105606438">スクリーンショット</translation>
 <translation id="6690744523875189208"><ph name="NUMBER_TWO"/> 時間</translation>
 <translation id="5260878308685146029">残り <ph name="NUMBER_TWO"/> 分</translation>
+<translation id="2557207087669398617">行頭に移動</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> GB</translation>
 <translation id="1901303067676059328">すべて選択(&amp;A)</translation>
 <translation id="2168039046890040389">前のページへ</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> mins</translation>
 <translation id="9107059250669762581"><ph name="NUMBER_DEFAULT"/> 日</translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> 分</translation>
+<translation id="6122334925474904337">右の単語に移動して選択範囲を変更</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> 分</translation>
 <translation id="8448317557906454022"><ph name="NUMBER_ZERO"/> 秒前</translation>
 <translation id="4927753642311223124">表示する通知はありません。続行してください。</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> days</translation>
 <translation id="3183922693828471536">ここまでスクロール</translation>
 <translation id="4552416320897244156">PageDown</translation>
+<translation id="3066573403916685335">下に移動</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/> 時間</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> KB/秒</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780">残り <ph name="NUMBER_ONE"/> 時間</translation>
 <translation id="1413622004203049571"><ph name="NOTIFIER_NAME"/> からの通知を無効にする</translation>
 <translation id="2666092431469916601">一番上</translation>
+<translation id="2538759511191347839">行末に移動して選択範囲を変更</translation>
+<translation id="928465423150706909">行末に移動</translation>
 <translation id="8331626408530291785">上にスクロール</translation>
 <translation id="7907591526440419938">ファイルを開く</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> days left</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">メディアの停止</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> mins left</translation>
 <translation id="3157931365184549694">復元</translation>
+<translation id="5349525451964472598">左に移動して選択範囲を変更</translation>
+<translation id="1781701194097416995">左の単語に移動</translation>
 <translation id="1243314992276662751">アップロード</translation>
 <translation id="50030952220075532">残り <ph name="NUMBER_ONE"/> 日</translation>
 <translation id="8179976553408161302">Enter</translation>
+<translation id="8471049483003785219">左の単語に移動して選択範囲を変更</translation>
 <translation id="945522503751344254">フィードバックを送信</translation>
 <translation id="9170848237812810038">取消(&amp;U)</translation>
 <translation id="1285266685456062655"><ph name="NUMBER_FEW"/> 時間前</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> hours ago</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> GB/秒</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/> 日</translation>
+<translation id="2704295676501803339">左に移動</translation>
 <translation id="9098468523912235228"><ph name="NUMBER_DEFAULT"/> 秒前</translation>
 <translation id="494645311413743213">残り <ph name="NUMBER_TWO"/> 秒</translation>
 <translation id="4570886800634958009">通知を展開</translation>
+<translation id="566737009157135450">後方の単語を削除</translation>
 <translation id="436869212180315161">押す</translation>
 <translation id="4860787810836767172"><ph name="NUMBER_FEW"/> 秒前</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> TB/秒</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497"><ph name="NUMBER_MANY"/> 分前</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> B/秒</translation>
 <translation id="7649070708921625228">ヘルプ</translation>
+<translation id="2405367043325750948">前方削除</translation>
 <translation id="6699343763173986273">メディアの次のトラック</translation>
 <translation id="5445120697129764393">残り <ph name="NUMBER_DEFAULT"/> 秒</translation>
 <translation id="8226233771743600312">通知を 1 日間ミュート</translation>
+<translation id="4252565523989510616">前方の単語を削除</translation>
 <translation id="7457942297256758195">すべて消去</translation>
 <translation id="822618367988303761"><ph name="NUMBER_TWO"/> 日前</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> 分</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> PB/秒</translation>
 <translation id="2743387203779672305">クリップボードにコピー</translation>
 <translation id="8371695176452482769">お話しください</translation>
+<translation id="1167268268675672572">行頭に移動して選択範囲を変更</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7850320739366109486">通知を一時的にミュート</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> days ago</translation>
diff --git a/ui/base/strings/ui_strings_kn.xtb b/ui/base/strings/ui_strings_kn.xtb
index 732e856..05490dd 100644
--- a/ui/base/strings/ui_strings_kn.xtb
+++ b/ui/base/strings/ui_strings_kn.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> B</translation>
 <translation id="3660179305079774227">ಮೇಲಿನ ಬಾಣದ ಗುರುತು</translation>
+<translation id="3969863827134279083">ಮೇಲಕ್ಕೆ ಸರಿಸಿ</translation>
 <translation id="7062130397825382308"><ph name="NUMBER_ONE"/> ಸೆಕೆಂಡ್ ಉಳಿದಿದೆ</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> MB/s</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> ಗಂಟೆಗಳು</translation>
 <translation id="3990502903496589789">ಬಲ ತುದಿ</translation>
 <translation id="9038489124413477075">ಹೆಸರಿಸದ ಫೋಲ್ಡರ್</translation>
+<translation id="1940483897317142625">ಸಾಲಿನ ಕೊನೆಯವರೆಗೆ ಅಳಿಸಿ</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/> ನಿಮಿಷಗಳು</translation>
 <translation id="3520476450377425184"><ph name="NUMBER_MANY"/> ದಿನಗಳು ಉಳಿದಿವೆ</translation>
 <translation id="932327136139879170">ಮುಖಪುಟ</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011"><ph name="NUMBER_FEW"/> days ago</translation>
 <translation id="5076340679995252485">&amp;ಅಂಟಿಸಿ</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> TB</translation>
+<translation id="7139614227326422685">ಪದವನ್ನು ಬಲಕ್ಕೆ ಸರಿಸಿ</translation>
 <translation id="364720409959344976">ಅಪ್‌ಲೋಡ್ ಮಾಡಲು ಫೋಲ್ಡರ್ ಆಯ್ಕೆಮಾಡಿ</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016"><ph name="NUMBER_TWO"/> mins ago</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">ಅಧಿಸೂಚನೆ ಮುಚ್ಚು</translation>
 <translation id="6364916375976753737">ಎಡಕ್ಕೆ ಸ್ಕ್ರೋಲ್ ಮಾಡಿ</translation>
 <translation id="2629089419211541119"><ph name="NUMBER_ONE"/> hour ago</translation>
+<translation id="4218160142017529598">ಹಿಮ್ಮುಖವಾಗಿ ಅಳಿಸಿ</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> ನಿಮಿಷಗಳು</translation>
 <translation id="6982279413068714821"><ph name="NUMBER_DEFAULT"/> mins ago</translation>
 <translation id="6945221475159498467">ಆಯ್ಕೆಮಾಡಿ</translation>
 <translation id="6620110761915583480">ಫೈಲ್ ಉಳಿಸು</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> ಸೆಕೆಂಡುಗಳು</translation>
+<translation id="8924469368910458384">ಸಾಲಿನ ಪ್ರಾರಂಭದವರೆಗೆ ಅಳಿಸಿ</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> hours</translation>
 <translation id="7836361698254323868"><ph name="NUMBER_ONE"/> ನಿಮಿಷ ಉಳಿದಿದೆ</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> ನಿಮಿಷ</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863"><ph name="NUMBER_MANY"/> ದಿನಗಳು</translation>
 <translation id="7163503212501929773"><ph name="NUMBER_MANY"/> ಗಂಟೆಗಳು ಉಳಿದಿದೆ</translation>
 <translation id="5329858601952122676">&amp;ಅಳಿಸು</translation>
+<translation id="6556866813142980365">ಮತ್ತೆಮಾಡು</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> ಸೆಕೆಂಡುಗಳು</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> KB</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> ನಿಮಿಷಗಳು</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> ನಿಮಿಷಗಳು</translation>
 <translation id="50960180632766478"><ph name="NUMBER_FEW"/> ನಿಮಿಷಗಳು ಉಳಿದಿದೆ</translation>
 <translation id="5517291721709019259"><ph name="NUMBER_FEW"/> ಸೆಕೆಂಡ್‍ಗಳು ಉಳಿದಿವೆ</translation>
+<translation id="6903282483217634857">ಬಲಕ್ಕೆ ಸರಿಸಿ</translation>
 <translation id="6659594942844771486">ಟ್ಯಾಬ್</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> MB</translation>
 <translation id="4988273303304146523"><ph name="NUMBER_DEFAULT"/> days ago</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/> ನಿಮಿಷಗಳು</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> hours left</translation>
 <translation id="7135556860107312402">ಕೆಳಗಿನವುಗಳಿಂದ ಅಧಿಸೂಚನೆಗಳನ್ನು ಅನುಮತಿಸಿ:</translation>
+<translation id="2479520428668657293">ಬಲಕ್ಕೆ ಸರಿಸಿ ಮತ್ತು ಆಯ್ಕೆಯನ್ನು ಮಾರ್ಪಡಿಸಿ</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/> ಗಂಟೆಗಳು</translation>
 <translation id="1398853756734560583">ಗರಿಷ್ಠಗೊಳಿಸು</translation>
 <translation id="4250229828105606438">ಸ್ಕ್ರೀನ್‌ಶಾಟ್</translation>
 <translation id="6690744523875189208"><ph name="NUMBER_TWO"/> ಗಂಟೆಗಳು</translation>
 <translation id="5260878308685146029"><ph name="NUMBER_TWO"/> ನಿಮಿಷಗಳು ಉಳಿದಿವೆ</translation>
+<translation id="2557207087669398617">ಸಾಲಿನ ಪ್ರಾರಂಭಕ್ಕೆ ಸರಿಸಿ</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> GB</translation>
 <translation id="1901303067676059328">&amp;ಎಲ್ಲ ಆಯ್ಕೆ ಮಾಡಿ</translation>
 <translation id="2168039046890040389">ಪುಟ ಮೇಲೆ</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> mins</translation>
 <translation id="9107059250669762581"><ph name="NUMBER_DEFAULT"/> ದಿನಗಳು</translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> ನಿಮಿಷಗಳು</translation>
+<translation id="6122334925474904337">ಪದವನ್ನು ಬಲಕ್ಕೆ ಸರಿಸಿ ಮತ್ತು ಆಯ್ಕೆಯನ್ನು ಮಾರ್ಪಡಿಸಿ</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> ನಿಮಿಷ</translation>
 <translation id="8448317557906454022"><ph name="NUMBER_ZERO"/> secs ago</translation>
 <translation id="4927753642311223124">ಇಲ್ಲಿ ನೋಡಲು ಏನೂ ಇಲ್ಲ, ಮುಂದೆ ಸಾಗಿ.</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> days</translation>
 <translation id="3183922693828471536">ಇಲ್ಲಿಗೆ ಸ್ಕ್ರೋಲ್ ಮಾಡಿ</translation>
 <translation id="4552416320897244156">PgDwn</translation>
+<translation id="3066573403916685335">ಕೆಳಕ್ಕೆ ಸರಿಸಿ</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/> ಗಂಟೆಗಳು</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> KB/s </translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780"><ph name="NUMBER_ONE"/> ಗಂಟೆಗಳು ಉಳಿದಿದೆ</translation>
 <translation id="1413622004203049571"><ph name="NOTIFIER_NAME"/> ಅವರ ಅಧಿಸೂಚನೆಗಳನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ</translation>
 <translation id="2666092431469916601">ಮೇಲೆ</translation>
+<translation id="2538759511191347839">ಸಾಲಿನ ಅಂತ್ಯಕ್ಕೆ ಸರಿಸಿ ಮತ್ತು ಆಯ್ಕೆಯನ್ನು ಮಾರ್ಪಡಿಸಿ</translation>
+<translation id="928465423150706909">ಸಾಲಿನ ಅಂತ್ಯಕ್ಕೆ ಸರಿಸಿ</translation>
 <translation id="8331626408530291785">ಮೇಲೆ ಸ್ಕ್ರೋಲ್ ಮಾಡು</translation>
 <translation id="7907591526440419938">ಫೈಲ್ ತೆರೆಯಿರಿ</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> days left</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">ಮೀಡಿಯಾ ನಿಲುಗಡೆ</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> mins left</translation>
 <translation id="3157931365184549694">ಪುನಃಸ್ಥಾಪನೆ</translation>
+<translation id="5349525451964472598">ಎಡಕ್ಕೆ ಸರಿಸಿ ಮತ್ತು ಆಯ್ಕೆಯನ್ನು ಮಾರ್ಪಡಿಸಿ</translation>
+<translation id="1781701194097416995">ಪದವನ್ನು ಎಡಕ್ಕೆ ಸರಿಸಿ</translation>
 <translation id="1243314992276662751">ಅಪ್‌ಲೋಡ್</translation>
 <translation id="50030952220075532"><ph name="NUMBER_ONE"/> ದಿನಗಳು ಉಳಿದಿವೆ</translation>
 <translation id="8179976553408161302">ನಮೂದಿಸಿ</translation>
+<translation id="8471049483003785219">ಪದವನ್ನು ಎಡಕ್ಕೆ ಸರಿಸಿ ಮತ್ತು ಆಯ್ಕೆಯನ್ನು ಮಾರ್ಪಡಿಸಿ</translation>
 <translation id="945522503751344254">ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ಕಳುಹಿಸಿ</translation>
 <translation id="9170848237812810038">&amp;ರದ್ದುಮಾಡು</translation>
 <translation id="1285266685456062655"><ph name="NUMBER_FEW"/> hours ago</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> hours ago</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> GB/s</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/> ದಿನ</translation>
+<translation id="2704295676501803339">ಎಡಕ್ಕೆ ಸರಿಸಿ</translation>
 <translation id="9098468523912235228"><ph name="NUMBER_DEFAULT"/> secs ago</translation>
 <translation id="494645311413743213"><ph name="NUMBER_TWO"/> ಸೆಕೆಂಡುಗಳು ಉಳಿದಿದೆ</translation>
 <translation id="4570886800634958009">ಅಧಿಸೂಚನೆ ವಿಸ್ತರಿಸು</translation>
+<translation id="566737009157135450">ಪದವನ್ನು ಹಿಂದಕ್ಕೆ ಅಳಿಸಿ</translation>
 <translation id="436869212180315161">ಒತ್ತಿರಿ</translation>
 <translation id="4860787810836767172"><ph name="NUMBER_FEW"/> secs ago</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> TB/s</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497"><ph name="NUMBER_MANY"/> mins ago</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> B/s</translation>
 <translation id="7649070708921625228">ಸಹಾಯ</translation>
+<translation id="2405367043325750948">ಮುಂದಕ್ಕೆ ಅಳಿಸಿ</translation>
 <translation id="6699343763173986273">ಮೀಡಿಯಾದ ಮುಂದಿನ ಟ್ರ್ಯಾಕ್</translation>
 <translation id="5445120697129764393"><ph name="NUMBER_DEFAULT"/> ಸೆಕೆಂಡ್‍ಗಳು ಉಳಿದಿವೆ</translation>
 <translation id="8226233771743600312">ಒಂದು ದಿನದವರೆಗೆ ಅಡಚಣೆ ಮಾಡಬೇಡಿ</translation>
+<translation id="4252565523989510616">ಪದದ ಮುಂದಕ್ಕೆ ಅಳಿಸಿ</translation>
 <translation id="7457942297256758195">ಎಲ್ಲವನ್ನೂ ತೆರವುಗೊಳಿಸಿ</translation>
 <translation id="822618367988303761"><ph name="NUMBER_TWO"/> days ago</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> ನಿಮಿಷಗಳು</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> PB/s</translation>
 <translation id="2743387203779672305">ಕ್ಲಿಪ್‌ಬೋರ್ಡ್‌ಗೆ ನಕಲಿಸಿ</translation>
 <translation id="8371695176452482769">ಈಗ ಮಾತನಾಡಿ</translation>
+<translation id="1167268268675672572">ಸಾಲಿನ ಪ್ರಾರಂಭಕ್ಕೆ ಸರಿಸಿ ಮತ್ತು ಆಯ್ಕೆಯನ್ನು ಮಾರ್ಪಡಿಸಿ</translation>
 <translation id="6965382102122355670">ಸರಿ</translation>
 <translation id="7850320739366109486">ಅಡಚಣೆ ಮಾಡಬೇಡಿ</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> days ago</translation>
diff --git a/ui/base/strings/ui_strings_ko.xtb b/ui/base/strings/ui_strings_ko.xtb
index 026a6dc..3d0c470 100644
--- a/ui/base/strings/ui_strings_ko.xtb
+++ b/ui/base/strings/ui_strings_ko.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/>B</translation>
 <translation id="3660179305079774227">위쪽 화살표</translation>
+<translation id="3969863827134279083">위로 이동</translation>
 <translation id="7062130397825382308"><ph name="NUMBER_ONE"/>초 남음</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/>MB/초</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/>시간</translation>
 <translation id="3990502903496589789">오른쪽 모서리</translation>
 <translation id="9038489124413477075">이름이 없는 폴더</translation>
+<translation id="1940483897317142625">마지막 줄까지 삭제</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/>분</translation>
 <translation id="3520476450377425184"><ph name="NUMBER_MANY"/>일 남음</translation>
 <translation id="932327136139879170">홈</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011"><ph name="NUMBER_FEW"/>일 전</translation>
 <translation id="5076340679995252485">붙여넣기(&amp;P)</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/>TB</translation>
+<translation id="7139614227326422685">단어 오른쪽으로 이동</translation>
 <translation id="364720409959344976">업로드할 폴더 선택</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016"><ph name="NUMBER_TWO"/>분 전</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">알림 닫기</translation>
 <translation id="6364916375976753737">왼쪽으로 스크롤</translation>
 <translation id="2629089419211541119"><ph name="NUMBER_ONE"/>시간 전</translation>
+<translation id="4218160142017529598">이전 삭제</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/>분</translation>
 <translation id="6982279413068714821"><ph name="NUMBER_DEFAULT"/>분 전</translation>
 <translation id="6945221475159498467">선택</translation>
 <translation id="6620110761915583480">파일 저장</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/>초</translation>
+<translation id="8924469368910458384">첫 줄까지 삭제</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> hours</translation>
 <translation id="7836361698254323868"><ph name="NUMBER_ONE"/> minute left</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/>분</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863"><ph name="NUMBER_MANY"/>일</translation>
 <translation id="7163503212501929773"><ph name="NUMBER_MANY"/>시간 남음</translation>
 <translation id="5329858601952122676">삭제(&amp;D)</translation>
+<translation id="6556866813142980365">다시실행</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/>초</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/>KB</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/>분</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/>분</translation>
 <translation id="50960180632766478"><ph name="NUMBER_FEW"/>분 남음</translation>
 <translation id="5517291721709019259"><ph name="NUMBER_FEW"/>초 남음</translation>
+<translation id="6903282483217634857">오른쪽으로 이동</translation>
 <translation id="6659594942844771486">탭</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/>MB</translation>
 <translation id="4988273303304146523"><ph name="NUMBER_DEFAULT"/>일 전</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/>분</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> hours left</translation>
 <translation id="7135556860107312402">다음 항목에 알림 허용:</translation>
+<translation id="2479520428668657293">오른쪽으로 이동 및 선택사항 수정</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/>시간</translation>
 <translation id="1398853756734560583">최대화</translation>
 <translation id="4250229828105606438">캡처화면</translation>
 <translation id="6690744523875189208"><ph name="NUMBER_TWO"/>시간</translation>
 <translation id="5260878308685146029"><ph name="NUMBER_TWO"/>분 남음</translation>
+<translation id="2557207087669398617">첫 줄로 이동</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/>GB</translation>
 <translation id="1901303067676059328">전체 선택(&amp;A)</translation>
 <translation id="2168039046890040389">페이지 위로</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> mins</translation>
 <translation id="9107059250669762581"><ph name="NUMBER_DEFAULT"/>일</translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/>분</translation>
+<translation id="6122334925474904337">오른쪽으로 이동 및 선택사항 수정</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/>분</translation>
 <translation id="8448317557906454022"><ph name="NUMBER_ZERO"/>초 전</translation>
 <translation id="4927753642311223124">표시할 내용이 없습니다.</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> days</translation>
 <translation id="3183922693828471536">여기로 스크롤</translation>
 <translation id="4552416320897244156">PageDown</translation>
+<translation id="3066573403916685335">아래로 이동</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/>시간</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/>KB/초</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780"><ph name="NUMBER_ONE"/>시간 남음</translation>
 <translation id="1413622004203049571"><ph name="NOTIFIER_NAME"/>의 알림 사용 중지</translation>
 <translation id="2666092431469916601">맨 위</translation>
+<translation id="2538759511191347839">마지막 줄로 이동 및 선택사항 수정</translation>
+<translation id="928465423150706909">마지막 줄로 이동</translation>
 <translation id="8331626408530291785">위로 스크롤</translation>
 <translation id="7907591526440419938">파일 열기</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> days left</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">미디어 중지</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> mins left</translation>
 <translation id="3157931365184549694">복구</translation>
+<translation id="5349525451964472598">왼쪽으로 이동 및 선택사항 수정</translation>
+<translation id="1781701194097416995">단어 왼쪽으로 이동</translation>
 <translation id="1243314992276662751">업로드</translation>
 <translation id="50030952220075532"><ph name="NUMBER_ONE"/>일 남음</translation>
 <translation id="8179976553408161302">Enter</translation>
+<translation id="8471049483003785219">단어 왼쪽으로 이동 및 선택사항 수정</translation>
 <translation id="945522503751344254">의견 보내기</translation>
 <translation id="9170848237812810038">실행 취소(&amp;U)</translation>
 <translation id="1285266685456062655"><ph name="NUMBER_FEW"/>시간 전</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> hours ago</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/>GB/s</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/>일</translation>
+<translation id="2704295676501803339">왼쪽으로 이동</translation>
 <translation id="9098468523912235228"><ph name="NUMBER_DEFAULT"/>초 전</translation>
 <translation id="494645311413743213"><ph name="NUMBER_TWO"/>초 남음</translation>
 <translation id="4570886800634958009">알림 펼치기</translation>
+<translation id="566737009157135450">이전 단어 삭제</translation>
 <translation id="436869212180315161">누르기</translation>
 <translation id="4860787810836767172"><ph name="NUMBER_FEW"/>초 전</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/>TB/s</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497"><ph name="NUMBER_MANY"/>분 전</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/>B/s</translation>
 <translation id="7649070708921625228">도움말</translation>
+<translation id="2405367043325750948">다음 삭제</translation>
 <translation id="6699343763173986273">미디어 다음 트랙</translation>
 <translation id="5445120697129764393"><ph name="NUMBER_DEFAULT"/>초 남음</translation>
 <translation id="8226233771743600312">하루 동안 알림 일시중지</translation>
+<translation id="4252565523989510616">다음 단어 삭제</translation>
 <translation id="7457942297256758195">모두 지우기</translation>
 <translation id="822618367988303761"><ph name="NUMBER_TWO"/>일 전</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/>분</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/>PB/s</translation>
 <translation id="2743387203779672305">클립보드로 복사</translation>
 <translation id="8371695176452482769">지금 말하기</translation>
+<translation id="1167268268675672572">첫 줄로 이동 및 선택사항 수정</translation>
 <translation id="6965382102122355670">확인</translation>
 <translation id="7850320739366109486">알림 일시중지</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> days ago</translation>
diff --git a/ui/base/strings/ui_strings_lt.xtb b/ui/base/strings/ui_strings_lt.xtb
index 8aa5b44..a773364 100644
--- a/ui/base/strings/ui_strings_lt.xtb
+++ b/ui/base/strings/ui_strings_lt.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> B</translation>
 <translation id="3660179305079774227">Rodyklė „Aukštyn“</translation>
+<translation id="3969863827134279083">Perkelti į viršų</translation>
 <translation id="7062130397825382308">Liko <ph name="NUMBER_ONE"/> sekundė</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> MB/s</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> val.</translation>
 <translation id="3990502903496589789">Dešinysis kraštas</translation>
 <translation id="9038489124413477075">Aplankas be pavadinimo</translation>
+<translation id="1940483897317142625">Trinti iki eilutės pabaigos</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/> min.</translation>
 <translation id="3520476450377425184">liko <ph name="NUMBER_MANY"/> dienos (-ų)</translation>
 <translation id="932327136139879170">Pradžia</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011">Prieš <ph name="NUMBER_FEW"/> dienas (-ų)</translation>
 <translation id="5076340679995252485">&amp;Įklijuoti</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> TB</translation>
+<translation id="7139614227326422685">Perkelti per vieną žodį į dešinę</translation>
 <translation id="364720409959344976">Pasirinkite norimą įkelti aplanką</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016">Prieš <ph name="NUMBER_TWO"/> min.</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">Uždaryti pranešimus</translation>
 <translation id="6364916375976753737">Slinkti į kairę</translation>
 <translation id="2629089419211541119">Prieš <ph name="NUMBER_ONE"/> val.</translation>
+<translation id="4218160142017529598">Trinti atgal</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> min.</translation>
 <translation id="6982279413068714821">Prieš <ph name="NUMBER_DEFAULT"/> min.</translation>
 <translation id="6945221475159498467">Pasirinkti</translation>
 <translation id="6620110761915583480">Išsaugoti failą</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> sek.</translation>
+<translation id="8924469368910458384">Trinti iki eilutės pradžios</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> hours</translation>
 <translation id="7836361698254323868">Liko <ph name="NUMBER_ONE"/> min.</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> min.</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863"><ph name="NUMBER_MANY"/> dienos</translation>
 <translation id="7163503212501929773">liko <ph name="NUMBER_MANY"/> valandos (-ų)</translation>
 <translation id="5329858601952122676">&amp;Pašalinti</translation>
+<translation id="6556866813142980365">Grąžinti</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> sek.</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> KB</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> min.</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> min.</translation>
 <translation id="50960180632766478">liko <ph name="NUMBER_FEW"/> min.</translation>
 <translation id="5517291721709019259"><ph name="NUMBER_FEW"/> seconds left</translation>
+<translation id="6903282483217634857">Perkelti į dešinę</translation>
 <translation id="6659594942844771486">Skirtukas</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> MB</translation>
 <translation id="4988273303304146523">Prieš <ph name="NUMBER_DEFAULT"/> dienas (-ų)</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/> min.</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> hours left</translation>
 <translation id="7135556860107312402">Leisti pranešimus iš šių plėtinių:</translation>
+<translation id="2479520428668657293">Perkelti į dešinę ir pakeisti pažymėtą tekstą</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/> valandos (-ų)</translation>
 <translation id="1398853756734560583">Išskleisti</translation>
 <translation id="4250229828105606438">Ekrano kopija</translation>
 <translation id="6690744523875189208"><ph name="NUMBER_TWO"/> valandos (-ų)</translation>
 <translation id="5260878308685146029">liko <ph name="NUMBER_TWO"/> min.</translation>
+<translation id="2557207087669398617">Perkelti į eilutės pradžią</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> GB</translation>
 <translation id="1901303067676059328">Pasirinkti &amp;viską</translation>
 <translation id="2168039046890040389">Puslapį į viršų</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> mins</translation>
 <translation id="9107059250669762581"><ph name="NUMBER_DEFAULT"/> dienos</translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> min.</translation>
+<translation id="6122334925474904337">Perkelti per vieną žodį į dešinę ir pakeisti pažymėtą tekstą</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> min.</translation>
 <translation id="8448317557906454022">Prieš <ph name="NUMBER_ZERO"/> sek.</translation>
 <translation id="4927753642311223124">Čia nieko nėra, slinkite toliau.</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> days</translation>
 <translation id="3183922693828471536">Slinkti iki čia</translation>
 <translation id="4552416320897244156">PgDwn</translation>
+<translation id="3066573403916685335">Perkelti žemyn</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/> valandos (-ų)</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> KB per sek.</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780">liko <ph name="NUMBER_ONE"/> val.</translation>
 <translation id="1413622004203049571">Išjungti pranešimus nuo <ph name="NOTIFIER_NAME"/></translation>
 <translation id="2666092431469916601">Į viršų</translation>
+<translation id="2538759511191347839">Perkelti į eilutės pabaigą ir pakeisti pažymėtą tekstą</translation>
+<translation id="928465423150706909">Perkelti į eilutės pabaigą</translation>
 <translation id="8331626408530291785">Slinkti į viršų</translation>
 <translation id="7907591526440419938">Atidaryti failą</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> days left</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">Sustabdyti mediją</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> mins left</translation>
 <translation id="3157931365184549694">Atkurti</translation>
+<translation id="5349525451964472598">Perkelti į kairę ir pakeisti pažymėtą tekstą</translation>
+<translation id="1781701194097416995">Perkelti per vieną žodį į kairę</translation>
 <translation id="1243314992276662751">Įkelti</translation>
 <translation id="50030952220075532">liko <ph name="NUMBER_ONE"/> diena</translation>
 <translation id="8179976553408161302">Įvesti</translation>
+<translation id="8471049483003785219">Perkelti per vieną žodį į kairę ir pakeisti pažymėtą tekstą</translation>
 <translation id="945522503751344254">Siųsti atsiliepimą</translation>
 <translation id="9170848237812810038">&amp;Atšaukti</translation>
 <translation id="1285266685456062655">Prieš <ph name="NUMBER_FEW"/> val.</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> hours ago</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> GB/s</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/> diena</translation>
+<translation id="2704295676501803339">Perkelti į kairę</translation>
 <translation id="9098468523912235228">Prieš <ph name="NUMBER_DEFAULT"/> sek.</translation>
 <translation id="494645311413743213">liko <ph name="NUMBER_TWO"/> sek.</translation>
 <translation id="4570886800634958009">Išplėsti pranešimą</translation>
+<translation id="566737009157135450">Trinti žodį atgal</translation>
 <translation id="436869212180315161">Spustelėti</translation>
 <translation id="4860787810836767172">Prieš <ph name="NUMBER_FEW"/> sek.</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> TB/s</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497">Prieš <ph name="NUMBER_MANY"/> min.</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> B/s</translation>
 <translation id="7649070708921625228">Žinynas</translation>
+<translation id="2405367043325750948">Trinti pirmyn</translation>
 <translation id="6699343763173986273">Kitas medijos takelis</translation>
 <translation id="5445120697129764393">Liko <ph name="NUMBER_DEFAULT"/> sekundžių</translation>
 <translation id="8226233771743600312">Netrukdyti vieną dieną</translation>
+<translation id="4252565523989510616">Trinti žodį pirmyn</translation>
 <translation id="7457942297256758195">Išvalyti viską</translation>
 <translation id="822618367988303761">Prieš <ph name="NUMBER_TWO"/> dienas</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> min.</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> PB/s</translation>
 <translation id="2743387203779672305">Kopijuoti į iškarpinę</translation>
 <translation id="8371695176452482769">Kalbėti dabar</translation>
+<translation id="1167268268675672572">Perkelti į eilutės pradžią ir pakeisti pažymėtą tekstą</translation>
 <translation id="6965382102122355670">Gerai</translation>
 <translation id="7850320739366109486">Netrukdyti</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> days ago</translation>
diff --git a/ui/base/strings/ui_strings_lv.xtb b/ui/base/strings/ui_strings_lv.xtb
index 144d2d3..9e340f4 100644
--- a/ui/base/strings/ui_strings_lv.xtb
+++ b/ui/base/strings/ui_strings_lv.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> B</translation>
 <translation id="3660179305079774227">Bulta augšup</translation>
+<translation id="3969863827134279083">Pārvietot augšup</translation>
 <translation id="7062130397825382308">Atlikusi <ph name="NUMBER_ONE"/> sekunde</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> MB/s</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> stundas</translation>
 <translation id="3990502903496589789">Labā puse</translation>
 <translation id="9038489124413477075">Mape bez nosaukuma</translation>
+<translation id="1940483897317142625">Dzēst līdz rindiņas beigām</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/> minūtes</translation>
 <translation id="3520476450377425184"><ph name="NUMBER_MANY"/> dienas atlikušas</translation>
 <translation id="932327136139879170">Sākumvieta</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011">Pirms <ph name="NUMBER_FEW"/> dienām</translation>
 <translation id="5076340679995252485">&amp;Ielīmēt</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> TB</translation>
+<translation id="7139614227326422685">Pārvietot pa labi par vienu vārdu</translation>
 <translation id="364720409959344976">Augšupielādējamās mapes atlase</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016"><ph name="NUMBER_TWO"/> mins ago</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">Paziņojuma aizvēršana</translation>
 <translation id="6364916375976753737">Ritināt pa kreisi</translation>
 <translation id="2629089419211541119">Pirms <ph name="NUMBER_ONE"/> stundas</translation>
+<translation id="4218160142017529598">Dzēst iepriekšējo</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> minūtes</translation>
 <translation id="6982279413068714821">Pirms <ph name="NUMBER_DEFAULT"/> minūtēm</translation>
 <translation id="6945221475159498467">Atlasīt</translation>
 <translation id="6620110761915583480">Saglabāt failu</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> sekunžu</translation>
+<translation id="8924469368910458384">Dzēst līdz rindiņas sākumam</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> hours</translation>
 <translation id="7836361698254323868">Atlikusi <ph name="NUMBER_ONE"/> minūte</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> minūtes</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863"><ph name="NUMBER_MANY"/> dienas</translation>
 <translation id="7163503212501929773"><ph name="NUMBER_MANY"/>stundas atlikušas</translation>
 <translation id="5329858601952122676">Dzēst</translation>
+<translation id="6556866813142980365">Atcelt atsaukšanu</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> sekundes</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> KB</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> minutes</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> minutes</translation>
 <translation id="50960180632766478"><ph name="NUMBER_FEW"/> minūtes atlikušas</translation>
 <translation id="5517291721709019259"><ph name="NUMBER_FEW"/> seconds left</translation>
+<translation id="6903282483217634857">Pārvietot pa labi</translation>
 <translation id="6659594942844771486">Cilne</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> MB</translation>
 <translation id="4988273303304146523">Pirms <ph name="NUMBER_DEFAULT"/> dienām</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/> minūtes</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> hours left</translation>
 <translation id="7135556860107312402">Atļaut paziņojumu saņemšanu no:</translation>
+<translation id="2479520428668657293">Pārvietot pa labi un mainīt atlasi</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/> stundas</translation>
 <translation id="1398853756734560583">Maksimizēt</translation>
 <translation id="4250229828105606438">Ekrānuzņēmums</translation>
 <translation id="6690744523875189208"><ph name="NUMBER_TWO"/> stundas</translation>
 <translation id="5260878308685146029"><ph name="NUMBER_TWO"/> minūtes atlikušas</translation>
+<translation id="2557207087669398617">Pārvietot uz rindiņas sākumu</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> GB</translation>
 <translation id="1901303067676059328">Izvēlēties visus</translation>
 <translation id="2168039046890040389">Augšup</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> mins</translation>
 <translation id="9107059250669762581"><ph name="NUMBER_DEFAULT"/>dienas</translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> minūtes</translation>
+<translation id="6122334925474904337">Pārvietot pa labi par vienu vārdu un mainīt atlasi</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> minūte</translation>
 <translation id="8448317557906454022">Pirms <ph name="NUMBER_ZERO"/> sekundēm</translation>
 <translation id="4927753642311223124">Te nekā nav, varat doties tālāk!</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> days</translation>
 <translation id="3183922693828471536">Ritināt šeit</translation>
 <translation id="4552416320897244156">Lejup</translation>
+<translation id="3066573403916685335">Pārvietot lejup</translation>
 <translation id="7052633198403197513">taustiņš F1</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/> stundas</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> KB/s</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780"><ph name="NUMBER_ONE"/> stundas atlikušas</translation>
 <translation id="1413622004203049571">Atspējot paziņojumu saņemšanu no: <ph name="NOTIFIER_NAME"/></translation>
 <translation id="2666092431469916601">Augša</translation>
+<translation id="2538759511191347839">Pārvietot uz rindiņas beigām un mainīt atlasi</translation>
+<translation id="928465423150706909">Pārvietot uz rindiņas beigām</translation>
 <translation id="8331626408530291785">Ritināt augšup</translation>
 <translation id="7907591526440419938">Atvērt failu</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> days left</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">Multivide — pārtraukt</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> mins left</translation>
 <translation id="3157931365184549694">Atjaunot</translation>
+<translation id="5349525451964472598">Pārvietot pa kreisi un mainīt atlasi</translation>
+<translation id="1781701194097416995">Pārvietot pa kreisi par vienu vārdu</translation>
 <translation id="1243314992276662751">Augšupielādēt</translation>
 <translation id="50030952220075532"><ph name="NUMBER_ONE"/> dienas atlikušas</translation>
 <translation id="8179976553408161302">Ievadīt</translation>
+<translation id="8471049483003785219">Pārvietot pa kreisi par vienu vārdu un mainīt atlasi</translation>
 <translation id="945522503751344254">Sūtīt atsauksmes</translation>
 <translation id="9170848237812810038">&amp;Atsaukt</translation>
 <translation id="1285266685456062655">Pirms <ph name="NUMBER_FEW"/> stundām</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> hours ago</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> GB/s</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/> diena</translation>
+<translation id="2704295676501803339">Pārvietot pa kreisi</translation>
 <translation id="9098468523912235228">Pirms <ph name="NUMBER_DEFAULT"/> sekundēm</translation>
 <translation id="494645311413743213"><ph name="NUMBER_TWO"/> sekundes atlikušas</translation>
 <translation id="4570886800634958009">Paziņojuma izvēršana</translation>
+<translation id="566737009157135450">Dzēst iepriekšējo vārdu</translation>
 <translation id="436869212180315161">Nospiediet</translation>
 <translation id="4860787810836767172">Pirms <ph name="NUMBER_FEW"/> sekundēm</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> TB/s</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497"><ph name="NUMBER_MANY"/> mins ago</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> B/s</translation>
 <translation id="7649070708921625228">Palīdzība</translation>
+<translation id="2405367043325750948">Dzēst nākamo</translation>
 <translation id="6699343763173986273">Multivide — nākamā dziesma</translation>
 <translation id="5445120697129764393">Atlikušas <ph name="NUMBER_DEFAULT"/> sekundes</translation>
 <translation id="8226233771743600312">Netraucēt dienu</translation>
+<translation id="4252565523989510616">Dzēst nākamo vārdu</translation>
 <translation id="7457942297256758195">Notīrīt visu</translation>
 <translation id="822618367988303761"><ph name="NUMBER_TWO"/> days ago</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> minūtes</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> PB/s</translation>
 <translation id="2743387203779672305">Kopēt starpliktuvē</translation>
 <translation id="8371695176452482769">Runājiet tūlīt</translation>
+<translation id="1167268268675672572">Pārvietot uz rindiņas sākumu un mainīt atlasi</translation>
 <translation id="6965382102122355670">Labi</translation>
 <translation id="7850320739366109486">Netraucēt</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> days ago</translation>
diff --git a/ui/base/strings/ui_strings_ml.xtb b/ui/base/strings/ui_strings_ml.xtb
index d74c461..e1e5fc9 100644
--- a/ui/base/strings/ui_strings_ml.xtb
+++ b/ui/base/strings/ui_strings_ml.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> B</translation>
 <translation id="3660179305079774227">മുകളിലേക്കുള്ള അമ്പടയാളം</translation>
+<translation id="3969863827134279083">മുകളിലേക്ക് നീക്കുക</translation>
 <translation id="7062130397825382308"><ph name="NUMBER_ONE"/> നിമിഷം ശേഷിക്കുന്നു</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> MB/s</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> മണിക്കൂര്‍</translation>
 <translation id="3990502903496589789">വലത് അഗ്രം</translation>
 <translation id="9038489124413477075">പേരിടാത്ത ഫോൾഡർ</translation>
+<translation id="1940483897317142625">വരിയുടെ അവസാനം വരെ ഇല്ലാതാക്കുക</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/> മിനിറ്റ്</translation>
 <translation id="3520476450377425184"><ph name="NUMBER_MANY"/> ദിവസം‍ ശേഷിക്കുന്നു</translation>
 <translation id="932327136139879170">ഹോം</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011"><ph name="NUMBER_FEW"/> days ago</translation>
 <translation id="5076340679995252485">&amp;ഒട്ടിക്കുക</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> TB</translation>
+<translation id="7139614227326422685">വലതുവശത്തുള്ള പദത്തിലേക്ക് നീക്കുക</translation>
 <translation id="364720409959344976">അപ്‌ലോഡുചെയ്യുന്നതിന് ഫോൾഡർ തിരഞ്ഞെടുക്കുക</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016"><ph name="NUMBER_TWO"/> mins ago</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">അറിയിപ്പ് അടയ്‌ക്കൽ</translation>
 <translation id="6364916375976753737">ഇടത്തേക്ക് സ്ക്രോള്‍ ചെയ്യുക</translation>
 <translation id="2629089419211541119"><ph name="NUMBER_ONE"/> hour ago</translation>
+<translation id="4218160142017529598">പുറകിലേക്ക് ഇല്ലാതാക്കുക</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> മിനിറ്റ്</translation>
 <translation id="6982279413068714821"><ph name="NUMBER_DEFAULT"/> mins ago</translation>
 <translation id="6945221475159498467">തിരഞ്ഞെടുക്കുക</translation>
 <translation id="6620110761915583480">ഫയല്‍‌ സംരക്ഷിക്കുക</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> സെക്കൻഡ്</translation>
+<translation id="8924469368910458384">വരിയുടെ തുടക്കം വരെ  ഇല്ലാതാക്കുക</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> hours</translation>
 <translation id="7836361698254323868"><ph name="NUMBER_ONE"/> മിനിറ്റ് ശേഷിക്കുന്നു</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> മിനിറ്റ്</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863"><ph name="NUMBER_MANY"/> ദിവസം</translation>
 <translation id="7163503212501929773"><ph name="NUMBER_MANY"/> മണിക്കൂര്‍ ശേഷിക്കുന്നു</translation>
 <translation id="5329858601952122676">&amp;ഇല്ലാതാക്കൂ</translation>
+<translation id="6556866813142980365">വീണ്ടുംചെയ്യുക</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> സെക്കന്റ്</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> KB</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> മിനിറ്റ്</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> മിനിറ്റ്</translation>
 <translation id="50960180632766478"><ph name="NUMBER_FEW"/> മിനിറ്റ്‍ അവശേഷിക്കുന്നു</translation>
 <translation id="5517291721709019259"><ph name="NUMBER_FEW"/> നിമിഷം ശേഷിക്കുന്നു</translation>
+<translation id="6903282483217634857">വലതുവശത്തേക്ക് നീക്കുക</translation>
 <translation id="6659594942844771486">ടാബ്</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> MB</translation>
 <translation id="4988273303304146523"><ph name="NUMBER_DEFAULT"/> days ago</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/> മിനിറ്റ്</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> hours left</translation>
 <translation id="7135556860107312402">ഇനിപ്പറയുന്നതിൽ നിന്നുള്ള അറിയിപ്പുകൾ അനുവദിക്കുക:</translation>
+<translation id="2479520428668657293">വലതുവശത്തേക്ക് നീക്കി തിരഞ്ഞെടുത്തത് പരിഷ്‌ക്കരിക്കുക</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/> മണിക്കൂര്‍</translation>
 <translation id="1398853756734560583">വലുതാക്കുക</translation>
 <translation id="4250229828105606438">സ്‌ക്രീൻഷോട്ട്</translation>
 <translation id="6690744523875189208"><ph name="NUMBER_TWO"/> മണിക്കൂര്‍</translation>
 <translation id="5260878308685146029"><ph name="NUMBER_TWO"/> മിനിറ്റ് അവശേഷിക്കുന്നു</translation>
+<translation id="2557207087669398617">വരിയുടെ തുടക്കത്തിലേക്ക് നീക്കുക</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> GB</translation>
 <translation id="1901303067676059328">എല്ലാം &amp;തിരഞ്ഞെടുക്കൂ</translation>
 <translation id="2168039046890040389">പേജ് മുകളിലേയ്ക്ക്</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> mins</translation>
 <translation id="9107059250669762581"><ph name="NUMBER_DEFAULT"/> ദിവസം</translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> മിനിറ്റ്</translation>
+<translation id="6122334925474904337">വലതുവശത്തുള്ള പദത്തിലേക്ക് നീക്കി തിരഞ്ഞെടുത്തത് പരിഷ്‌ക്കരിക്കുക</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> മിനിറ്റ്</translation>
 <translation id="8448317557906454022"><ph name="NUMBER_ZERO"/> secs ago</translation>
 <translation id="4927753642311223124">ഇവിടെ കാണുന്നതിനായി ഒന്നുമില്ല, തുടരുക.</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> days</translation>
 <translation id="3183922693828471536">ഇവിടെ സ്ക്രോള്‍ ചെയ്യുക</translation>
 <translation id="4552416320897244156">PgDwn</translation>
+<translation id="3066573403916685335">താഴേക്ക് നീക്കുക</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/> മണിക്കൂര്‍</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> KB/s</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780"><ph name="NUMBER_ONE"/> മണിക്കൂര്‍ ശേഷിക്കുന്നു</translation>
 <translation id="1413622004203049571"><ph name="NOTIFIER_NAME"/> എന്നതിൽ നിന്നുള്ള അറിയിപ്പുകൾ പ്രവർത്തനരഹിതമാക്കുക</translation>
 <translation id="2666092431469916601">മുകളിലേക്ക്</translation>
+<translation id="2538759511191347839">വരിയുടെ അവസാനത്തിലേക്ക് നീക്കി തിരഞ്ഞെടുത്തത് പരിഷ്‌ക്കരിക്കുക</translation>
+<translation id="928465423150706909">വരിയുടെ അവസാനത്തിലേക്ക് നീക്കുക</translation>
 <translation id="8331626408530291785">മുകളിലേക്ക് സ്ക്രോള്‍ ചെയ്യൂ</translation>
 <translation id="7907591526440419938">ഫയല്‍ തുറക്കുക</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> days left</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">മീഡിയ ‌നിർത്തുക</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> mins left</translation>
 <translation id="3157931365184549694">പുനഃസ്ഥാപിക്കുക</translation>
+<translation id="5349525451964472598">ഇടത് വശത്തേക്ക് നീക്കി തിരഞ്ഞെടുത്തത് പരിഷ്‌ക്കരിക്കുക</translation>
+<translation id="1781701194097416995">ഇടതുവശത്തുള്ള പദത്തിലേക്ക് നീക്കുക</translation>
 <translation id="1243314992276662751">അപ്‌ലോഡുചെയ്യുക</translation>
 <translation id="50030952220075532"><ph name="NUMBER_ONE"/> ദിവസം അവശേഷിക്കുന്നു</translation>
 <translation id="8179976553408161302">നൽകുക</translation>
+<translation id="8471049483003785219">ഇടതുവശത്തുള്ള പദത്തിലേക്ക് നീക്കി തിരഞ്ഞെടുത്ത് പരിഷ്‌ക്കരിക്കുക</translation>
 <translation id="945522503751344254">ഫീഡ്ബാക്ക് അയയ്ക്കുക</translation>
 <translation id="9170848237812810038">‍&amp;പൂര്‍വാവസ്ഥയിലാക്കുക</translation>
 <translation id="1285266685456062655"><ph name="NUMBER_FEW"/> hours ago</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> hours ago</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> GB/s</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/> ദിവസം</translation>
+<translation id="2704295676501803339">ഇടതുവശത്തേക്ക് നീക്കുക</translation>
 <translation id="9098468523912235228"><ph name="NUMBER_DEFAULT"/> സെക്കന്റ് മുമ്പ്</translation>
 <translation id="494645311413743213"><ph name="NUMBER_TWO"/> സെക്കന്റ് അവശേഷിക്കുന്നു</translation>
 <translation id="4570886800634958009">അറിയിപ്പ് വിപുലീകരണം</translation>
+<translation id="566737009157135450">പദം പുറകിലേക്ക് ഇല്ലാതാക്കുക</translation>
 <translation id="436869212180315161">അമര്‍ത്തുക</translation>
 <translation id="4860787810836767172"><ph name="NUMBER_FEW"/> secs ago</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> TB/s</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497"><ph name="NUMBER_MANY"/> mins ago</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> B/s</translation>
 <translation id="7649070708921625228">സഹായം</translation>
+<translation id="2405367043325750948">മുമ്പിലേക്ക് ഇല്ലാതാക്കുക</translation>
 <translation id="6699343763173986273">അടുത്ത മീഡിയ ട്രാക്ക്</translation>
 <translation id="5445120697129764393"><ph name="NUMBER_DEFAULT"/> നിമിഷം ശേഷിക്കുന്നു</translation>
 <translation id="8226233771743600312">ഒരു ദിവസത്തേക്ക് ശല്യപ്പെടുത്തരുത്</translation>
+<translation id="4252565523989510616">പദം മുമ്പിലേക്ക് ഇല്ലാതാക്കുക</translation>
 <translation id="7457942297256758195">എല്ലാം മായ്‌ക്കുക</translation>
 <translation id="822618367988303761"><ph name="NUMBER_TWO"/> days ago</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> മിനിറ്റ്</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> PB/s</translation>
 <translation id="2743387203779672305">ക്ലിപ്പ്ബോർഡിലേക്ക് പകർത്തുക</translation>
 <translation id="8371695176452482769">ഇപ്പോള്‍ സംസാരിക്കുക</translation>
+<translation id="1167268268675672572">വരിയുടെ തുടക്കത്തിലേക്ക് നീക്കി തിരഞ്ഞെടുത്തത് പരിഷ്‌ക്കരിക്കുക</translation>
 <translation id="6965382102122355670">ശരി</translation>
 <translation id="7850320739366109486">ശല്യം ചെയ്യരുത്</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> days ago</translation>
diff --git a/ui/base/strings/ui_strings_mr.xtb b/ui/base/strings/ui_strings_mr.xtb
index e951afc..6a7b562 100644
--- a/ui/base/strings/ui_strings_mr.xtb
+++ b/ui/base/strings/ui_strings_mr.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> B</translation>
 <translation id="3660179305079774227">Up Arrow</translation>
+<translation id="3969863827134279083">वर हलवा</translation>
 <translation id="7062130397825382308"><ph name="NUMBER_ONE"/> सेकंद शिल्लक</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> MB/s</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> तास</translation>
 <translation id="3990502903496589789">उजवा काठ</translation>
 <translation id="9038489124413477075">अनामित फोल्डर</translation>
+<translation id="1940483897317142625">ओळीच्या समाप्तीपर्यंत हटवा</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/> मि</translation>
 <translation id="3520476450377425184"><ph name="NUMBER_MANY"/> दिवस बाकी</translation>
 <translation id="932327136139879170">मुख्यपृष्ठ</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011"><ph name="NUMBER_FEW"/> days ago</translation>
 <translation id="5076340679995252485">&amp;पेस्ट करा</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> TB</translation>
+<translation id="7139614227326422685">शब्द उजवीकडे हलवा</translation>
 <translation id="364720409959344976">अपलोड करण्यासाठी फोल्डर निवडा</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016"><ph name="NUMBER_TWO"/> mins ago</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">सूचना बंद</translation>
 <translation id="6364916375976753737">डावीकडे स्क्रोल करा</translation>
 <translation id="2629089419211541119"><ph name="NUMBER_ONE"/> hour ago</translation>
+<translation id="4218160142017529598">मागील हटवा</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> मिनिटे</translation>
 <translation id="6982279413068714821"><ph name="NUMBER_DEFAULT"/> mins ago</translation>
 <translation id="6945221475159498467">निवडा</translation>
 <translation id="6620110761915583480">फाइल जतन करा</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> सेकंद</translation>
+<translation id="8924469368910458384">ओळीच्या सुरुवातीपर्यंत हटवा</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> hours</translation>
 <translation id="7836361698254323868"><ph name="NUMBER_ONE"/> मिनिट शिल्लक</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> मि</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863"><ph name="NUMBER_MANY"/> दिवस</translation>
 <translation id="7163503212501929773"><ph name="NUMBER_MANY"/> तास बाकी</translation>
 <translation id="5329858601952122676">&amp;हटवा</translation>
+<translation id="6556866813142980365">पुन्हा करा</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> से</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> KB</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> मिनिटे</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> मिनिटे</translation>
 <translation id="50960180632766478"><ph name="NUMBER_FEW"/> मि बाकी</translation>
 <translation id="5517291721709019259"><ph name="NUMBER_FEW"/> सेकंद शिल्लक</translation>
+<translation id="6903282483217634857">उजवीकडे हलवा</translation>
 <translation id="6659594942844771486">टॅब</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> MB</translation>
 <translation id="4988273303304146523"><ph name="NUMBER_DEFAULT"/> days ago</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/> मि</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> hours left</translation>
 <translation id="7135556860107312402">खालील लोकांकडील सूचनांना अनुमत करा:</translation>
+<translation id="2479520428668657293">उजवीकडे हलवा आणि निवड सुधारित करा</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/> तास</translation>
 <translation id="1398853756734560583">वाढवा</translation>
 <translation id="4250229828105606438">स्क्रीनशॉट</translation>
 <translation id="6690744523875189208"><ph name="NUMBER_TWO"/> तास</translation>
 <translation id="5260878308685146029"><ph name="NUMBER_TWO"/> मि बाकी</translation>
+<translation id="2557207087669398617">ओळीच्या सुरुवातीस हलवा</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> GB</translation>
 <translation id="1901303067676059328">&amp;सर्व निवडा</translation>
 <translation id="2168039046890040389">पृष्ठ वर</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> mins</translation>
 <translation id="9107059250669762581"><ph name="NUMBER_DEFAULT"/> दिवस</translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> मि</translation>
+<translation id="6122334925474904337">शब्द उजवीकडे हलवा आणि निवड सुधारित करा</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> मिनिट</translation>
 <translation id="8448317557906454022"><ph name="NUMBER_ZERO"/> secs ago</translation>
 <translation id="4927753642311223124">येथे पाहण्यासाठी काही नाही, पुढे चला.</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> days</translation>
 <translation id="3183922693828471536">येथे स्क्रोल करा</translation>
 <translation id="4552416320897244156">PgDwn</translation>
+<translation id="3066573403916685335">खाली हलवा</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/> तास</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> KB/s</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780"><ph name="NUMBER_ONE"/> तास बाकी</translation>
 <translation id="1413622004203049571"><ph name="NOTIFIER_NAME"/> वरील सूचना अक्षम करा</translation>
 <translation id="2666092431469916601">शीर्ष</translation>
+<translation id="2538759511191347839">ओळीच्या समाप्तीवर हलवा आणि निवड सुधारित करा</translation>
+<translation id="928465423150706909">ओळीच्या समाप्तीवर हलवा</translation>
 <translation id="8331626408530291785">वर स्क्रोल करा</translation>
 <translation id="7907591526440419938">फाइल उघडा</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> days left</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">मीडिया थांबवा</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> mins left</translation>
 <translation id="3157931365184549694">पुनर्संचयित करा</translation>
+<translation id="5349525451964472598">डावीकडे हलवा आणि निवड सुधारित करा</translation>
+<translation id="1781701194097416995">शब्द डावीकडे हलवा</translation>
 <translation id="1243314992276662751">अपलोड करा</translation>
 <translation id="50030952220075532"><ph name="NUMBER_ONE"/> दिवस बाकी</translation>
 <translation id="8179976553408161302">प्रवेश करा</translation>
+<translation id="8471049483003785219">शब्द डावीकडे हलवा आणि निवड सुधारित करा</translation>
 <translation id="945522503751344254">अभिप्राय पाठवा</translation>
 <translation id="9170848237812810038">&amp;पूर्ववत करा</translation>
 <translation id="1285266685456062655"><ph name="NUMBER_FEW"/> hours ago</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> hours ago</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> GB/s</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/> दिवस</translation>
+<translation id="2704295676501803339">डावीकडे हलवा</translation>
 <translation id="9098468523912235228"><ph name="NUMBER_DEFAULT"/> secs ago</translation>
 <translation id="494645311413743213"><ph name="NUMBER_TWO"/> से बाकी</translation>
 <translation id="4570886800634958009">सूचना विस्तार</translation>
+<translation id="566737009157135450">मागचा शब्द हटवा</translation>
 <translation id="436869212180315161">दाबा</translation>
 <translation id="4860787810836767172"><ph name="NUMBER_FEW"/> secs ago</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> TB/s</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497"><ph name="NUMBER_MANY"/> mins ago</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> B/s</translation>
 <translation id="7649070708921625228">मदत</translation>
+<translation id="2405367043325750948">पुढचा हटवा</translation>
 <translation id="6699343763173986273">मीडिया पुढील ट्रॅक</translation>
 <translation id="5445120697129764393"><ph name="NUMBER_DEFAULT"/> सेकंद शिल्लक</translation>
 <translation id="8226233771743600312">एक दिवस व्यत्यय आणू नका</translation>
+<translation id="4252565523989510616">पुढचा शब्द हटवा</translation>
 <translation id="7457942297256758195">सर्व साफ करा</translation>
 <translation id="822618367988303761"><ph name="NUMBER_TWO"/> days ago</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> मि</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> PB/s</translation>
 <translation id="2743387203779672305">क्लिपबोर्डवर कॉपी करा</translation>
 <translation id="8371695176452482769">आता बोला</translation>
+<translation id="1167268268675672572">ओळीच्या सुरुवातीवर हलवा आणि निवड सुधारित करा</translation>
 <translation id="6965382102122355670">ठिक आहे</translation>
 <translation id="7850320739366109486">व्यत्यय आणू नका</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> days ago</translation>
diff --git a/ui/base/strings/ui_strings_ms.xtb b/ui/base/strings/ui_strings_ms.xtb
index 04b3cc4..c94b4f1 100644
--- a/ui/base/strings/ui_strings_ms.xtb
+++ b/ui/base/strings/ui_strings_ms.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> B</translation>
 <translation id="3660179305079774227">Anak Panah Atas</translation>
+<translation id="3969863827134279083">Alihkan ke Atas</translation>
 <translation id="7062130397825382308"><ph name="NUMBER_ONE"/> saat lagi</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> MB/s</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> jam</translation>
 <translation id="3990502903496589789">Tepi Kanan</translation>
 <translation id="9038489124413477075">Folder Tanpa Nama</translation>
+<translation id="1940483897317142625">Padamkan Hingga Akhir Baris</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/> mins</translation>
 <translation id="3520476450377425184"><ph name="NUMBER_MANY"/> hari lagi</translation>
 <translation id="932327136139879170">Halaman Utama</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011"><ph name="NUMBER_FEW"/> hari yang lalu</translation>
 <translation id="5076340679995252485">&amp;Tampal</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> TB</translation>
+<translation id="7139614227326422685">Alihkan Perkataan ke Kanan</translation>
 <translation id="364720409959344976">Pilih Folder untuk Dimuat Naik</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016"><ph name="NUMBER_TWO"/> minit lalu</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">Tutup Pemberitahuan</translation>
 <translation id="6364916375976753737">Tatal Ke Kiri</translation>
 <translation id="2629089419211541119"><ph name="NUMBER_ONE"/> jam yang lalu</translation>
+<translation id="4218160142017529598">Padamkan ke Belakang</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> minit</translation>
 <translation id="6982279413068714821"><ph name="NUMBER_DEFAULT"/> minit yang lalu</translation>
 <translation id="6945221475159498467">Pilih</translation>
 <translation id="6620110761915583480">Simpan Fail</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> saat</translation>
+<translation id="8924469368910458384">Padamkan Hingga Permulaan Baris</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> jam</translation>
 <translation id="7836361698254323868">Tinggal <ph name="NUMBER_ONE"/> minit</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> minit</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863"><ph name="NUMBER_MANY"/> hari</translation>
 <translation id="7163503212501929773"><ph name="NUMBER_MANY"/> jam lagi</translation>
 <translation id="5329858601952122676">&amp;Padam</translation>
+<translation id="6556866813142980365">Buat semula</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> saat</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> KB</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> minit</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> minit</translation>
 <translation id="50960180632766478"><ph name="NUMBER_FEW"/> minit lagi</translation>
 <translation id="5517291721709019259"><ph name="NUMBER_FEW"/> saat lagi</translation>
+<translation id="6903282483217634857">Alihkan Ke Kanan</translation>
 <translation id="6659594942844771486">Tab</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> MB</translation>
 <translation id="4988273303304146523"><ph name="NUMBER_DEFAULT"/> hari yang lalu</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/> mins</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> jam lagi</translation>
 <translation id="7135556860107312402">Benarkan pemberitahuan daripada yang berikut:</translation>
+<translation id="2479520428668657293">Alihkan Ke Kanan Dan Ubah Suai Pilihan</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/> jam</translation>
 <translation id="1398853756734560583">Maksimumkan</translation>
 <translation id="4250229828105606438">Tangkapan skrin</translation>
 <translation id="6690744523875189208"><ph name="NUMBER_TWO"/> jam</translation>
 <translation id="5260878308685146029"><ph name="NUMBER_TWO"/> minit lagi</translation>
+<translation id="2557207087669398617">Alihkan Ke Permulaan Baris</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> GB</translation>
 <translation id="1901303067676059328">Pilih &amp;semua</translation>
 <translation id="2168039046890040389">Halaman Ke Atas</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> mins</translation>
 <translation id="9107059250669762581"><ph name="NUMBER_DEFAULT"/> hari</translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> mins</translation>
+<translation id="6122334925474904337">Alihkan Perkataan ke Kanan Dan Ubah Suai Pilihan</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> minit</translation>
 <translation id="8448317557906454022"><ph name="NUMBER_ZERO"/> saat yang lalu</translation>
 <translation id="4927753642311223124">Tiada apa-apa untuk dilihat di sini, teruskan.</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> hari</translation>
 <translation id="3183922693828471536">Tatal ke Sini</translation>
 <translation id="4552416320897244156">BwhHlmn</translation>
+<translation id="3066573403916685335">Alihkan Ke Bawah</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/> jam</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> KB/s</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780"><ph name="NUMBER_ONE"/> jam lagi</translation>
 <translation id="1413622004203049571">Lumpuhkan pemberitahuan daripada <ph name="NOTIFIER_NAME"/></translation>
 <translation id="2666092431469916601">Atas</translation>
+<translation id="2538759511191347839">Alihkan Ke Hujung Baris Dan Ubah Suai Pilihan</translation>
+<translation id="928465423150706909">Alihkan Ke Hujung Baris</translation>
 <translation id="8331626408530291785">Tatal Ke Atas</translation>
 <translation id="7907591526440419938">Buka Fail</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> hari lagi</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">Media Berhenti</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> minit lagi</translation>
 <translation id="3157931365184549694">Pulihkan</translation>
+<translation id="5349525451964472598">Alihkan Ke Kiri Dan Ubah Suai Pilihan</translation>
+<translation id="1781701194097416995">Alihkan Perkataan Ke Kiri</translation>
 <translation id="1243314992276662751">Muat naik</translation>
 <translation id="50030952220075532"><ph name="NUMBER_ONE"/> hari lagi</translation>
 <translation id="8179976553408161302">Masuk</translation>
+<translation id="8471049483003785219">Alihkan Perkataan Ke Kiri dan Ubah Suai Pilihan</translation>
 <translation id="945522503751344254">Hantar maklum balas</translation>
 <translation id="9170848237812810038">&amp;Buat asal</translation>
 <translation id="1285266685456062655"><ph name="NUMBER_FEW"/> jam yang lalu</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> jam yang lalu</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> GB/s</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/> hari</translation>
+<translation id="2704295676501803339">Alihkan Ke Kiri</translation>
 <translation id="9098468523912235228"><ph name="NUMBER_DEFAULT"/> saat yang lalu</translation>
 <translation id="494645311413743213"><ph name="NUMBER_TWO"/> saat lagi</translation>
 <translation id="4570886800634958009">Kembangkan pemberitahuan</translation>
+<translation id="566737009157135450">Padamkan Perkataan Ke Belakang</translation>
 <translation id="436869212180315161">Tekan</translation>
 <translation id="4860787810836767172"><ph name="NUMBER_FEW"/> saat yang lalu</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> TB/s</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497"><ph name="NUMBER_MANY"/> minit yang lalu</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> B/s</translation>
 <translation id="7649070708921625228">Bantuan</translation>
+<translation id="2405367043325750948">Padamkan Ke Hadapan</translation>
 <translation id="6699343763173986273">Lagu Media Seterusnya</translation>
 <translation id="5445120697129764393"><ph name="NUMBER_DEFAULT"/> saat lagi</translation>
 <translation id="8226233771743600312">Jangan ganggu selama sehari</translation>
+<translation id="4252565523989510616">Padamkan Perkataan Ke Hadapan</translation>
 <translation id="7457942297256758195">Kosongkan Semua</translation>
 <translation id="822618367988303761"><ph name="NUMBER_TWO"/> hari yang lalu</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> mins</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> PB/s</translation>
 <translation id="2743387203779672305">Salin ke papan keratan</translation>
 <translation id="8371695176452482769">Cakap sekarang</translation>
+<translation id="1167268268675672572">Alihkan Ke Permulaan Baris Dan Ubah Suai Pilihan</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7850320739366109486">Jangan Ganggu</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> hari yang lalu</translation>
diff --git a/ui/base/strings/ui_strings_nl.xtb b/ui/base/strings/ui_strings_nl.xtb
index 9d174b7..5cbf083 100644
--- a/ui/base/strings/ui_strings_nl.xtb
+++ b/ui/base/strings/ui_strings_nl.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> B</translation>
 <translation id="3660179305079774227">Pijl-omhoog</translation>
+<translation id="3969863827134279083">Naar boven</translation>
 <translation id="7062130397825382308"><ph name="NUMBER_ONE"/> seconde resterend</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> MB/s</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> uur</translation>
 <translation id="3990502903496589789">Rechterzijde</translation>
 <translation id="9038489124413477075">Naamloze map</translation>
+<translation id="1940483897317142625">Verwijderen tot einde van regel</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/> minuten</translation>
 <translation id="3520476450377425184"><ph name="NUMBER_MANY"/> dagen resterend</translation>
 <translation id="932327136139879170">Home</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011"><ph name="NUMBER_FEW"/> dagen geleden</translation>
 <translation id="5076340679995252485">&amp;Plakken</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> TB</translation>
+<translation id="7139614227326422685">Eén woord naar rechts</translation>
 <translation id="364720409959344976">Map voor uploaden selecteren</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016"><ph name="NUMBER_TWO"/> minuten geleden</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">Melding sluiten</translation>
 <translation id="6364916375976753737">Naar links bladeren</translation>
 <translation id="2629089419211541119"><ph name="NUMBER_ONE"/> uur geleden</translation>
+<translation id="4218160142017529598">Achterwaarts verwijderen</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> minuten</translation>
 <translation id="6982279413068714821"><ph name="NUMBER_DEFAULT"/> minuten geleden</translation>
 <translation id="6945221475159498467">Selecteren</translation>
 <translation id="6620110761915583480">Bestand opslaan</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> seconden</translation>
+<translation id="8924469368910458384">Verwijderen tot begin van regel</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> hours</translation>
 <translation id="7836361698254323868"><ph name="NUMBER_ONE"/> minuut resterend</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> minuut</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863"><ph name="NUMBER_MANY"/> dagen</translation>
 <translation id="7163503212501929773"><ph name="NUMBER_MANY"/> uur resterend</translation>
 <translation id="5329858601952122676">Verwij&amp;deren</translation>
+<translation id="6556866813142980365">Opnieuw</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> seconden</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> kB</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> minutes</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> minuten</translation>
 <translation id="50960180632766478"><ph name="NUMBER_FEW"/> minuten resterend</translation>
 <translation id="5517291721709019259"><ph name="NUMBER_FEW"/> seconden resterend</translation>
+<translation id="6903282483217634857">Naar rechts verplaatsen</translation>
 <translation id="6659594942844771486">Tabblad</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> MB</translation>
 <translation id="4988273303304146523"><ph name="NUMBER_DEFAULT"/> dagen geleden</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/> minuten</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> hours left</translation>
 <translation id="7135556860107312402">Meldingen toestaan van het volgende:</translation>
+<translation id="2479520428668657293">Naar rechts verplaatsen en selectie aanpassen</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/> uur</translation>
 <translation id="1398853756734560583">Maximaliseren</translation>
 <translation id="4250229828105606438">Screenshot</translation>
 <translation id="6690744523875189208"><ph name="NUMBER_TWO"/> uur</translation>
 <translation id="5260878308685146029"><ph name="NUMBER_TWO"/> minuten resterend</translation>
+<translation id="2557207087669398617">Naar begin van regel verplaatsen</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> GB</translation>
 <translation id="1901303067676059328">&amp;Alles selecteren</translation>
 <translation id="2168039046890040389">Pagina omhoog</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> mins</translation>
 <translation id="9107059250669762581"><ph name="NUMBER_DEFAULT"/> dagen</translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> minuten</translation>
+<translation id="6122334925474904337">Eén woord naar rechts verplaatsen en selectie aanpassen</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> minuut</translation>
 <translation id="8448317557906454022"><ph name="NUMBER_ZERO"/> seconden geleden</translation>
 <translation id="4927753642311223124">Er zijn geen meldingen.</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> days</translation>
 <translation id="3183922693828471536">Hiernaartoe bladeren</translation>
 <translation id="4552416320897244156">PgDwn</translation>
+<translation id="3066573403916685335">Naar beneden</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/> uur</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> kB/s</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780"><ph name="NUMBER_ONE"/> uur resterend</translation>
 <translation id="1413622004203049571">Meldingen van <ph name="NOTIFIER_NAME"/> uitschakelen</translation>
 <translation id="2666092431469916601">Boven</translation>
+<translation id="2538759511191347839">Naar einde van regel verplaatsen en selectie aanpassen</translation>
+<translation id="928465423150706909">Naar einde van regel verplaatsen</translation>
 <translation id="8331626408530291785">Omhoog bladeren</translation>
 <translation id="7907591526440419938">Bestand openen</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> days left</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">Media stoppen</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> mins left</translation>
 <translation id="3157931365184549694">Herstellen</translation>
+<translation id="5349525451964472598">Naar links verplaatsen en selectie aanpassen</translation>
+<translation id="1781701194097416995">Eén woord naar links verplaatsen</translation>
 <translation id="1243314992276662751">Uploaden</translation>
 <translation id="50030952220075532"><ph name="NUMBER_ONE"/> dag resterend</translation>
 <translation id="8179976553408161302">Beginnen</translation>
+<translation id="8471049483003785219">Eén woord naar links verplaatsen en selectie aanpassen</translation>
 <translation id="945522503751344254">Feedback verzenden</translation>
 <translation id="9170848237812810038">&amp;Ongedaan maken</translation>
 <translation id="1285266685456062655"><ph name="NUMBER_FEW"/> uur geleden</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> hours ago</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> GB/s</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/> dag</translation>
+<translation id="2704295676501803339">Naar links verplaatsen</translation>
 <translation id="9098468523912235228"><ph name="NUMBER_DEFAULT"/> seconden geleden</translation>
 <translation id="494645311413743213"><ph name="NUMBER_TWO"/> seconden resterend</translation>
 <translation id="4570886800634958009">Melding uitbreiden</translation>
+<translation id="566737009157135450">Het voorgaande woord verwijderen</translation>
 <translation id="436869212180315161">Drukken</translation>
 <translation id="4860787810836767172"><ph name="NUMBER_FEW"/> seconden geleden</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> TB/s</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497"><ph name="NUMBER_MANY"/> minuten geleden</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> B/s</translation>
 <translation id="7649070708921625228">Help</translation>
+<translation id="2405367043325750948">Voorwaarts verwijderen</translation>
 <translation id="6699343763173986273">Volgende track voor media</translation>
 <translation id="5445120697129764393"><ph name="NUMBER_DEFAULT"/> seconden resterend</translation>
 <translation id="8226233771743600312">Een dag niet storen</translation>
+<translation id="4252565523989510616">Het volgende woord verwijderen</translation>
 <translation id="7457942297256758195">Alles wissen</translation>
 <translation id="822618367988303761"><ph name="NUMBER_TWO"/> dagen geleden</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> minuten</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> PB/s</translation>
 <translation id="2743387203779672305">Kopiëren naar klembord</translation>
 <translation id="8371695176452482769">Begin nu te spreken</translation>
+<translation id="1167268268675672572">Naar begin van regel verplaatsen en selectie aanpassen</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7850320739366109486">Niet storen</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> days ago</translation>
diff --git a/ui/base/strings/ui_strings_no.xtb b/ui/base/strings/ui_strings_no.xtb
index 1a45a24..01243cd 100644
--- a/ui/base/strings/ui_strings_no.xtb
+++ b/ui/base/strings/ui_strings_no.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> B</translation>
 <translation id="3660179305079774227">Pil opp</translation>
+<translation id="3969863827134279083">Flytt opp</translation>
 <translation id="7062130397825382308"><ph name="NUMBER_ONE"/> sekund igjen</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> MB per sek.</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> timer</translation>
 <translation id="3990502903496589789">Høyre kant</translation>
 <translation id="9038489124413477075">Mappe uten navn</translation>
+<translation id="1940483897317142625">Slett til slutten av linjen</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/> minutter</translation>
 <translation id="3520476450377425184"><ph name="NUMBER_MANY"/> dager igjen</translation>
 <translation id="932327136139879170">Home</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011"><ph name="NUMBER_FEW"/> days ago</translation>
 <translation id="5076340679995252485">&amp;Lim inn</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> TB</translation>
+<translation id="7139614227326422685">Flytt ett ord til høyre</translation>
 <translation id="364720409959344976">Velg mappen du vil laste opp</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016"><ph name="NUMBER_TWO"/> mins ago</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">Lukk varsel</translation>
 <translation id="6364916375976753737">Rull mot venstre</translation>
 <translation id="2629089419211541119">For <ph name="NUMBER_ONE"/> time siden</translation>
+<translation id="4218160142017529598">Slett bakover</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> minutter</translation>
 <translation id="6982279413068714821">For <ph name="NUMBER_DEFAULT"/> minutter siden</translation>
 <translation id="6945221475159498467">Velg</translation>
 <translation id="6620110761915583480">Lagre fil</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> sekunder</translation>
+<translation id="8924469368910458384">Slett til begynnelsen av linjen</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> hours</translation>
 <translation id="7836361698254323868"><ph name="NUMBER_ONE"/> minutt igjen</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> minutt</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863"><ph name="NUMBER_MANY"/> dager</translation>
 <translation id="7163503212501929773"><ph name="NUMBER_MANY"/> timer igjen</translation>
 <translation id="5329858601952122676">&amp;Slett</translation>
+<translation id="6556866813142980365">Gjør om</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> sekunder</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> kB</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> minutter</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> minutter</translation>
 <translation id="50960180632766478"><ph name="NUMBER_FEW"/> minutter igjen</translation>
 <translation id="5517291721709019259"><ph name="NUMBER_FEW"/> sekunder igjen</translation>
+<translation id="6903282483217634857">Flytt til høyre</translation>
 <translation id="6659594942844771486">Tab</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> MB</translation>
 <translation id="4988273303304146523">For <ph name="NUMBER_DEFAULT"/> dager siden</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/> minutter</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> hours left</translation>
 <translation id="7135556860107312402">Tillat varsler fra følgende:</translation>
+<translation id="2479520428668657293">Flytt til høyre og endre merkingen</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/> timer</translation>
 <translation id="1398853756734560583">Maksimer</translation>
 <translation id="4250229828105606438">Skjermdump</translation>
 <translation id="6690744523875189208"><ph name="NUMBER_TWO"/> timer</translation>
 <translation id="5260878308685146029"><ph name="NUMBER_TWO"/> minutter igjen</translation>
+<translation id="2557207087669398617">Flytt til begynnelsen av linjen</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> GB</translation>
 <translation id="1901303067676059328">Marker &amp;alt</translation>
 <translation id="2168039046890040389">Opp 1 s.</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> mins</translation>
 <translation id="9107059250669762581"><ph name="NUMBER_DEFAULT"/> dager</translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> minutter</translation>
+<translation id="6122334925474904337">Flytt ett ord til høyre og endre merkingen</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> minutt</translation>
 <translation id="8448317557906454022">For <ph name="NUMBER_ZERO"/> sekunder siden</translation>
 <translation id="4927753642311223124">Det er ikke noe å se her. Gå videre.</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> days</translation>
 <translation id="3183922693828471536">Rull hit</translation>
 <translation id="4552416320897244156">PgDwn</translation>
+<translation id="3066573403916685335">Flytt ned</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/> timer</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> kB per sek</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780"><ph name="NUMBER_ONE"/> time igjen</translation>
 <translation id="1413622004203049571">Deaktiver varsler fra <ph name="NOTIFIER_NAME"/></translation>
 <translation id="2666092431469916601">Topp</translation>
+<translation id="2538759511191347839">Flytt til slutten av linjen og endre merkingen</translation>
+<translation id="928465423150706909">Flytt til slutten av linjen</translation>
 <translation id="8331626408530291785">Rull opp</translation>
 <translation id="7907591526440419938">Åpne filen</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> days left</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">Media – stopp</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> mins left</translation>
 <translation id="3157931365184549694">Gjenopprett</translation>
+<translation id="5349525451964472598">Flytt til venstre og endre merkingen</translation>
+<translation id="1781701194097416995">Flytt ett ord til venstre</translation>
 <translation id="1243314992276662751">Last opp</translation>
 <translation id="50030952220075532"><ph name="NUMBER_ONE"/> dag igjen</translation>
 <translation id="8179976553408161302">Start</translation>
+<translation id="8471049483003785219">Flytt ett ord til venstre og endre merkingen</translation>
 <translation id="945522503751344254">Gi tilbakemelding</translation>
 <translation id="9170848237812810038">&amp;Angre</translation>
 <translation id="1285266685456062655"><ph name="NUMBER_FEW"/> hours ago</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> hours ago</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> GB per sek</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/> dag</translation>
+<translation id="2704295676501803339">Flytt til venstre</translation>
 <translation id="9098468523912235228">For <ph name="NUMBER_DEFAULT"/> sekunder siden</translation>
 <translation id="494645311413743213"><ph name="NUMBER_TWO"/> sekunder igjen</translation>
 <translation id="4570886800634958009">Utvid varsel</translation>
+<translation id="566737009157135450">Slett ett ord bakover</translation>
 <translation id="436869212180315161">Trykk</translation>
 <translation id="4860787810836767172"><ph name="NUMBER_FEW"/> secs ago</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> TB per sek</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497"><ph name="NUMBER_MANY"/> mins ago</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> B per sek</translation>
 <translation id="7649070708921625228">Hjelp</translation>
+<translation id="2405367043325750948">Slett fremover</translation>
 <translation id="6699343763173986273">Media – neste spor</translation>
 <translation id="5445120697129764393"><ph name="NUMBER_DEFAULT"/> sekunder igjen</translation>
 <translation id="8226233771743600312">Ikke forstyrr i en dag</translation>
+<translation id="4252565523989510616">Slett ett ord fremover</translation>
 <translation id="7457942297256758195">Fjern alle</translation>
 <translation id="822618367988303761"><ph name="NUMBER_TWO"/> days ago</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> minutter</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> PB per sek</translation>
 <translation id="2743387203779672305">Kopiér til utklippstavlen</translation>
 <translation id="8371695176452482769">Snakk nå</translation>
+<translation id="1167268268675672572">Flytt til begynnelsen av linjen og endre merkingen</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7850320739366109486">Ikke forstyrr</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> days ago</translation>
diff --git a/ui/base/strings/ui_strings_pl.xtb b/ui/base/strings/ui_strings_pl.xtb
index 407920a..4e91ca2 100644
--- a/ui/base/strings/ui_strings_pl.xtb
+++ b/ui/base/strings/ui_strings_pl.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> B</translation>
 <translation id="3660179305079774227">Strzałka w górę</translation>
+<translation id="3969863827134279083">Przejdź do góry</translation>
 <translation id="7062130397825382308">Pozostała <ph name="NUMBER_ONE"/> sekunda</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> MB/s</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> godz.</translation>
 <translation id="3990502903496589789">Krawędź po prawej</translation>
 <translation id="9038489124413477075">Folder bez nazwy</translation>
+<translation id="1940483897317142625">Usuń do końca wiersza</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/> min</translation>
 <translation id="3520476450377425184"><ph name="NUMBER_MANY"/> dni</translation>
 <translation id="932327136139879170">Home</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011"><ph name="NUMBER_FEW"/> dni temu</translation>
 <translation id="5076340679995252485">&amp;Wklej</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> TB</translation>
+<translation id="7139614227326422685">Przejdź o słowo w prawo</translation>
 <translation id="364720409959344976">Wybierz folder do przesłania</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016"><ph name="NUMBER_TWO"/> min temu</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">Zamknięcie powiadomienia</translation>
 <translation id="6364916375976753737">Przewiń w lewo</translation>
 <translation id="2629089419211541119"><ph name="NUMBER_ONE"/> godz. temu</translation>
+<translation id="4218160142017529598">Usuń przed kursorem</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> minuty</translation>
 <translation id="6982279413068714821"><ph name="NUMBER_DEFAULT"/> min temu</translation>
 <translation id="6945221475159498467">Wybierz</translation>
 <translation id="6620110761915583480">Zapisz plik</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> seconds</translation>
+<translation id="8924469368910458384">Usuń do początku wiersza</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> hours</translation>
 <translation id="7836361698254323868">Pozostała <ph name="NUMBER_ONE"/> minuta</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> min</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863">Liczba dni: <ph name="NUMBER_MANY"/></translation>
 <translation id="7163503212501929773"><ph name="NUMBER_MANY"/> godz</translation>
 <translation id="5329858601952122676">&amp;Usuń</translation>
+<translation id="6556866813142980365">Ponów</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> s</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> kB</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> minutes</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> minutes</translation>
 <translation id="50960180632766478"><ph name="NUMBER_FEW"/> min</translation>
 <translation id="5517291721709019259">Pozostały <ph name="NUMBER_FEW"/> sekundy</translation>
+<translation id="6903282483217634857">Przejdź w prawo</translation>
 <translation id="6659594942844771486">Tab</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> MB</translation>
 <translation id="4988273303304146523"><ph name="NUMBER_DEFAULT"/> dni temu</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/> min</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> hours left</translation>
 <translation id="7135556860107312402">Zezwalaj na powiadomienia z:</translation>
+<translation id="2479520428668657293">Przejdź w prawo i zmodyfikuj zaznaczenie</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/> godz.</translation>
 <translation id="1398853756734560583">Maksymalizuj</translation>
 <translation id="4250229828105606438">Zrzut ekranu</translation>
 <translation id="6690744523875189208"><ph name="NUMBER_TWO"/> godz.</translation>
 <translation id="5260878308685146029"><ph name="NUMBER_TWO"/> min</translation>
+<translation id="2557207087669398617">Przejdź na początek wiersza</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> GB</translation>
 <translation id="1901303067676059328">Zaznacz &amp;wszystko</translation>
 <translation id="2168039046890040389">Strona do góry</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> mins</translation>
 <translation id="9107059250669762581">Liczba dni: <ph name="NUMBER_DEFAULT"/></translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> min</translation>
+<translation id="6122334925474904337">Przejdź o słowo w prawo i zmodyfikuj zaznaczenie</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> minuta</translation>
 <translation id="8448317557906454022"><ph name="NUMBER_ZERO"/> secs ago</translation>
 <translation id="4927753642311223124">Nic tu nie ma.</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> days</translation>
 <translation id="3183922693828471536">Przewiń tutaj</translation>
 <translation id="4552416320897244156">PgDwn</translation>
+<translation id="3066573403916685335">Przejdź w dół</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/> godz.</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> kB/s</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780">Pozostała <ph name="NUMBER_ONE"/> godzina</translation>
 <translation id="1413622004203049571">Wyłącz powiadomienia z <ph name="NOTIFIER_NAME"/></translation>
 <translation id="2666092431469916601">Do góry</translation>
+<translation id="2538759511191347839">Przejdź na koniec wiersza i zmodyfikuj zaznaczenie</translation>
+<translation id="928465423150706909">Przejdź na koniec wiersza</translation>
 <translation id="8331626408530291785">Przewiń w górę</translation>
 <translation id="7907591526440419938">Otwórz plik</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> days left</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">Zatrzymaj multimedia</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> mins left</translation>
 <translation id="3157931365184549694">Przywróć</translation>
+<translation id="5349525451964472598">Przejdź w lewo i zmodyfikuj zaznaczenie</translation>
+<translation id="1781701194097416995">Przejdź o słowo w lewo</translation>
 <translation id="1243314992276662751">Prześlij</translation>
 <translation id="50030952220075532">Pozostał <ph name="NUMBER_ONE"/> dzień</translation>
 <translation id="8179976553408161302">Start</translation>
+<translation id="8471049483003785219">Przejdź o słowo w lewo i zmodyfikuj zaznaczenie</translation>
 <translation id="945522503751344254">Wyślij zgłoszenie</translation>
 <translation id="9170848237812810038">&amp;Cofnij</translation>
 <translation id="1285266685456062655"><ph name="NUMBER_FEW"/> godz. temu</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> hours ago</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> GB/s</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/> dzień</translation>
+<translation id="2704295676501803339">Przejdź w lewo</translation>
 <translation id="9098468523912235228"><ph name="NUMBER_DEFAULT"/> s temu</translation>
 <translation id="494645311413743213"><ph name="NUMBER_TWO"/> sek</translation>
 <translation id="4570886800634958009">Rozwinięcie powiadomienia</translation>
+<translation id="566737009157135450">Usuń słowo przed kursorem</translation>
 <translation id="436869212180315161">Kliknij</translation>
 <translation id="4860787810836767172"><ph name="NUMBER_FEW"/> s temu</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> TB/s</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497"><ph name="NUMBER_MANY"/> mins ago</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> B/s</translation>
 <translation id="7649070708921625228">Pomoc</translation>
+<translation id="2405367043325750948">Usuń za kursorem</translation>
 <translation id="6699343763173986273">Następny utwór multimedialny</translation>
 <translation id="5445120697129764393">Pozostało <ph name="NUMBER_DEFAULT"/> sekund</translation>
 <translation id="8226233771743600312">Nie przeszkadzać przez jeden dzień</translation>
+<translation id="4252565523989510616">Usuń słowo za kursorem</translation>
 <translation id="7457942297256758195">Wyczyść wszystkie</translation>
 <translation id="822618367988303761"><ph name="NUMBER_TWO"/> dni temu</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> min</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> PB/s</translation>
 <translation id="2743387203779672305">Skopiuj do schowka</translation>
 <translation id="8371695176452482769">Mów teraz</translation>
+<translation id="1167268268675672572">Przejdź na początek wiersza i zmodyfikuj zaznaczenie</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7850320739366109486">Nie przeszkadzać</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> days ago</translation>
diff --git a/ui/base/strings/ui_strings_pt-BR.xtb b/ui/base/strings/ui_strings_pt-BR.xtb
index 089dda7..f0855dc 100644
--- a/ui/base/strings/ui_strings_pt-BR.xtb
+++ b/ui/base/strings/ui_strings_pt-BR.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> bytes</translation>
 <translation id="3660179305079774227">Seta para cima</translation>
+<translation id="3969863827134279083">Mover para cima</translation>
 <translation id="7062130397825382308"><ph name="NUMBER_ONE"/> segundo restante</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> MB/s</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> horas</translation>
 <translation id="3990502903496589789">Borda direita</translation>
 <translation id="9038489124413477075">Pasta sem nome</translation>
+<translation id="1940483897317142625">Excluir até o fim da linha</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/> minutos</translation>
 <translation id="3520476450377425184"><ph name="NUMBER_MANY"/> dias restantes</translation>
 <translation id="932327136139879170">Página inicial</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011"><ph name="NUMBER_FEW"/> days ago</translation>
 <translation id="5076340679995252485">&amp;Colar</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> TB</translation>
+<translation id="7139614227326422685">Mover para palavra à direita</translation>
 <translation id="364720409959344976">Selecionar pasta para upload</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016"><ph name="NUMBER_TWO"/> mins ago</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">Fechar notificação</translation>
 <translation id="6364916375976753737">Percorrer à esquerda</translation>
 <translation id="2629089419211541119"><ph name="NUMBER_ONE"/> hora atrás</translation>
+<translation id="4218160142017529598">Excluir para trás</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> minutos</translation>
 <translation id="6982279413068714821"><ph name="NUMBER_DEFAULT"/> minutos atrás</translation>
 <translation id="6945221475159498467">Selecionar</translation>
 <translation id="6620110761915583480">Salvar arquivo</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> segundos</translation>
+<translation id="8924469368910458384">Excluir até o começo da linha</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> hours</translation>
 <translation id="7836361698254323868"><ph name="NUMBER_ONE"/> minuto restante</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> minuto</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863"><ph name="NUMBER_MANY"/> dias</translation>
 <translation id="7163503212501929773"><ph name="NUMBER_MANY"/> horas restantes</translation>
 <translation id="5329858601952122676">&amp;Excluir</translation>
+<translation id="6556866813142980365">Refazer</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> s</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> KB</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> minutos</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> minutos</translation>
 <translation id="50960180632766478"><ph name="NUMBER_FEW"/> minutos restantes</translation>
 <translation id="5517291721709019259"><ph name="NUMBER_FEW"/> seconds left</translation>
+<translation id="6903282483217634857">Mover para a direita</translation>
 <translation id="6659594942844771486">Guia</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> MB</translation>
 <translation id="4988273303304146523"><ph name="NUMBER_DEFAULT"/> dias atrás</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/> minutos</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> hours left</translation>
 <translation id="7135556860107312402">Permitir as seguintes notificações:</translation>
+<translation id="2479520428668657293">Mover para a direita e modificar seleção</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/> horas</translation>
 <translation id="1398853756734560583">Maximizar</translation>
 <translation id="4250229828105606438">Captura de tela</translation>
 <translation id="6690744523875189208"><ph name="NUMBER_TWO"/> horas</translation>
 <translation id="5260878308685146029"><ph name="NUMBER_TWO"/> minutos restantes</translation>
+<translation id="2557207087669398617">Mover para o início da linha</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> GB</translation>
 <translation id="1901303067676059328">Selecionar &amp;tudo</translation>
 <translation id="2168039046890040389">Página para cima</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> mins</translation>
 <translation id="9107059250669762581"><ph name="NUMBER_DEFAULT"/> dias</translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> minutos</translation>
+<translation id="6122334925474904337">Mover para palavra à direita e modificar seleção</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> minuto</translation>
 <translation id="8448317557906454022"><ph name="NUMBER_ZERO"/> secs ago</translation>
 <translation id="4927753642311223124">Nada para ver aqui, siga em frente.</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> days</translation>
 <translation id="3183922693828471536">Percorrer até aqui</translation>
 <translation id="4552416320897244156">PgDwn</translation>
+<translation id="3066573403916685335">Mover para baixo</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/> horas</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> KB/s</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780"><ph name="NUMBER_ONE"/> hora restante</translation>
 <translation id="1413622004203049571">Desativar notificações de <ph name="NOTIFIER_NAME"/></translation>
 <translation id="2666092431469916601">Parte superior</translation>
+<translation id="2538759511191347839">Mover para o fim da linha e modificar seleção</translation>
+<translation id="928465423150706909">Mover para o fim da linha</translation>
 <translation id="8331626408530291785">Percorrer para cima</translation>
 <translation id="7907591526440419938">Abrir arquivo</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> days left</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">Parar mídia</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> mins left</translation>
 <translation id="3157931365184549694">Restaurar</translation>
+<translation id="5349525451964472598">Mover para a esquerda e modificar seleção</translation>
+<translation id="1781701194097416995">Mover para palavra à esquerda</translation>
 <translation id="1243314992276662751">Fazer upload</translation>
 <translation id="50030952220075532"><ph name="NUMBER_ONE"/> dia restante</translation>
 <translation id="8179976553408161302">Entrar</translation>
+<translation id="8471049483003785219">Mover para palavra à esquerda e modificar seleção</translation>
 <translation id="945522503751344254">Enviar comentários</translation>
 <translation id="9170848237812810038">&amp;Desfazer</translation>
 <translation id="1285266685456062655"><ph name="NUMBER_FEW"/> hours ago</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> hours ago</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> GB/s</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/> dia</translation>
+<translation id="2704295676501803339">Mover para a esquerda</translation>
 <translation id="9098468523912235228"><ph name="NUMBER_DEFAULT"/> segundos atrás</translation>
 <translation id="494645311413743213"><ph name="NUMBER_TWO"/> segundos restantes</translation>
 <translation id="4570886800634958009">Expandir notificação</translation>
+<translation id="566737009157135450">Excluir palavra anterior</translation>
 <translation id="436869212180315161">Apertar</translation>
 <translation id="4860787810836767172"><ph name="NUMBER_FEW"/> secs ago</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> TB/s</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497"><ph name="NUMBER_MANY"/> mins ago</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> B/s</translation>
 <translation id="7649070708921625228">Ajuda</translation>
+<translation id="2405367043325750948">Excluir para frente</translation>
 <translation id="6699343763173986273">Próxima faixa da mídia</translation>
 <translation id="5445120697129764393"><ph name="NUMBER_DEFAULT"/> segundos restantes</translation>
 <translation id="8226233771743600312">Não perturbe por um dia</translation>
+<translation id="4252565523989510616">Excluir palavra da frente</translation>
 <translation id="7457942297256758195">Limpar tudo</translation>
 <translation id="822618367988303761"><ph name="NUMBER_TWO"/> days ago</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> minutos</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> PB/s</translation>
 <translation id="2743387203779672305">Copiar para a área de trabalho</translation>
 <translation id="8371695176452482769">Fale agora</translation>
+<translation id="1167268268675672572">Mover para o começo da linha e modificar seleção</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7850320739366109486">Não Perturbe</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> days ago</translation>
diff --git a/ui/base/strings/ui_strings_pt-PT.xtb b/ui/base/strings/ui_strings_pt-PT.xtb
index 573c190..3310e4d 100644
--- a/ui/base/strings/ui_strings_pt-PT.xtb
+++ b/ui/base/strings/ui_strings_pt-PT.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> B</translation>
 <translation id="3660179305079774227">Seta para cima</translation>
+<translation id="3969863827134279083">Mover para cima</translation>
 <translation id="7062130397825382308">Falta <ph name="NUMBER_ONE"/> segundo</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> MB/s</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> horas</translation>
 <translation id="3990502903496589789">Margem direita</translation>
 <translation id="9038489124413477075">Pasta sem nome</translation>
+<translation id="1940483897317142625">Eliminar para o fim da linha</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/> min.</translation>
 <translation id="3520476450377425184"><ph name="NUMBER_MANY"/> dias restantes</translation>
 <translation id="932327136139879170">Home</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011">Há <ph name="NUMBER_FEW"/> dias</translation>
 <translation id="5076340679995252485">C&amp;olar</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> TB</translation>
+<translation id="7139614227326422685">Mover palavra para a direita</translation>
 <translation id="364720409959344976">Selecionar Pasta a Carregar</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016">Há <ph name="NUMBER_TWO"/> min.</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">Fechar notificação</translation>
 <translation id="6364916375976753737">Deslocar-se para a esquerda</translation>
 <translation id="2629089419211541119">Há <ph name="NUMBER_ONE"/> hora</translation>
+<translation id="4218160142017529598">Eliminar para trás</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> minutos</translation>
 <translation id="6982279413068714821">Há <ph name="NUMBER_DEFAULT"/> min.</translation>
 <translation id="6945221475159498467">Seleccionar</translation>
 <translation id="6620110761915583480">Guardar ficheiro</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> segundos</translation>
+<translation id="8924469368910458384">Eliminar para o início da linha</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> hours</translation>
 <translation id="7836361698254323868">Falta <ph name="NUMBER_ONE"/> minuto</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> min.</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863"><ph name="NUMBER_MANY"/> dias</translation>
 <translation id="7163503212501929773"><ph name="NUMBER_MANY"/> horas restantes</translation>
 <translation id="5329858601952122676">E&amp;liminar</translation>
+<translation id="6556866813142980365">Refazer</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> seg.</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> KB</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> minutos</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> minutos</translation>
 <translation id="50960180632766478"><ph name="NUMBER_FEW"/> min. restantes</translation>
 <translation id="5517291721709019259">Faltam <ph name="NUMBER_FEW"/> segundos</translation>
+<translation id="6903282483217634857">Mover para a direita</translation>
 <translation id="6659594942844771486">Tab</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> MB</translation>
 <translation id="4988273303304146523">Há <ph name="NUMBER_DEFAULT"/> dias</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/> min.</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> hours left</translation>
 <translation id="7135556860107312402">Permitir notificações de:</translation>
+<translation id="2479520428668657293">Mover para a direita e modificar seleção</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/> horas</translation>
 <translation id="1398853756734560583">Maximizar</translation>
 <translation id="4250229828105606438">Captura de ecrã</translation>
 <translation id="6690744523875189208"><ph name="NUMBER_TWO"/> horas</translation>
 <translation id="5260878308685146029"><ph name="NUMBER_TWO"/> min. restantes</translation>
+<translation id="2557207087669398617">Mover para o início da linha</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> GB</translation>
 <translation id="1901303067676059328">Seleccion&amp;ar tudo</translation>
 <translation id="2168039046890040389">Página para cima</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> mins</translation>
 <translation id="9107059250669762581"><ph name="NUMBER_DEFAULT"/> dias</translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> min.</translation>
+<translation id="6122334925474904337">Mover palavra para a direita e modificar seleção</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> minuto</translation>
 <translation id="8448317557906454022">Há <ph name="NUMBER_ZERO"/> seg.</translation>
 <translation id="4927753642311223124">Nada de novo a apresentar por aqui.</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> days</translation>
 <translation id="3183922693828471536">Deslocar-se para aqui</translation>
 <translation id="4552416320897244156">PgDwn</translation>
+<translation id="3066573403916685335">Mover para baixo</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/> horas</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> KB/s</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780"><ph name="NUMBER_ONE"/> hora restante</translation>
 <translation id="1413622004203049571">Desativar notificações de <ph name="NOTIFIER_NAME"/></translation>
 <translation id="2666092431469916601">Parte superior</translation>
+<translation id="2538759511191347839">Mover para o fim da linha e modificar seleção</translation>
+<translation id="928465423150706909">Mover para o fim da linha</translation>
 <translation id="8331626408530291785">Deslocar-se para cima</translation>
 <translation id="7907591526440419938">Abrir ficheiro</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> days left</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">Parar multimédia</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> mins left</translation>
 <translation id="3157931365184549694">Restaurar</translation>
+<translation id="5349525451964472598">Mover para a esquerda e modificar seleção</translation>
+<translation id="1781701194097416995">Mover palavra para a esquerda</translation>
 <translation id="1243314992276662751">Carregar</translation>
 <translation id="50030952220075532"><ph name="NUMBER_ONE"/> dia restante</translation>
 <translation id="8179976553408161302">Entrar</translation>
+<translation id="8471049483003785219">Mover palavra para a esquerda e modificar seleção</translation>
 <translation id="945522503751344254">Enviar comentários</translation>
 <translation id="9170848237812810038">An&amp;ular</translation>
 <translation id="1285266685456062655">Há <ph name="NUMBER_FEW"/> horas</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> hours ago</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> GB/s</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/> dia</translation>
+<translation id="2704295676501803339">Mover para a esquerda</translation>
 <translation id="9098468523912235228">Há <ph name="NUMBER_DEFAULT"/> seg.</translation>
 <translation id="494645311413743213"><ph name="NUMBER_TWO"/> seg. restantes</translation>
 <translation id="4570886800634958009">Expandir notificação</translation>
+<translation id="566737009157135450">Eliminar uma palavra para trás</translation>
 <translation id="436869212180315161">Premir</translation>
 <translation id="4860787810836767172">Há <ph name="NUMBER_FEW"/> seg.</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> TB/s</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497">Há <ph name="NUMBER_MANY"/> min.</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> B/s</translation>
 <translation id="7649070708921625228">Ajuda</translation>
+<translation id="2405367043325750948">Eliminar para a frente</translation>
 <translation id="6699343763173986273">Faixa seguinte de multimédia</translation>
 <translation id="5445120697129764393">Faltam <ph name="NUMBER_DEFAULT"/> segundos</translation>
 <translation id="8226233771743600312">Não incomodar durante um dia</translation>
+<translation id="4252565523989510616">Eliminar uma palavra para a frente</translation>
 <translation id="7457942297256758195">Limpar Tudo</translation>
 <translation id="822618367988303761">Há <ph name="NUMBER_TWO"/> dias</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> min.</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> PB/s</translation>
 <translation id="2743387203779672305">Copiar para a área de transferência</translation>
 <translation id="8371695176452482769">Falar agora</translation>
+<translation id="1167268268675672572">Mover para o início da linha e modificar seleção</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7850320739366109486">Não incomodar</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> days ago</translation>
diff --git a/ui/base/strings/ui_strings_ro.xtb b/ui/base/strings/ui_strings_ro.xtb
index c797175..91cc92c 100644
--- a/ui/base/strings/ui_strings_ro.xtb
+++ b/ui/base/strings/ui_strings_ro.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> O</translation>
 <translation id="3660179305079774227">Săgeata în sus</translation>
+<translation id="3969863827134279083">Mutați în sus</translation>
 <translation id="7062130397825382308"><ph name="NUMBER_ONE"/> secundă rămasă</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> MO/s</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> ore</translation>
 <translation id="3990502903496589789">Marginea dreaptă</translation>
 <translation id="9038489124413477075">Dosar fără nume</translation>
+<translation id="1940483897317142625">Ștergeți până la sfârșitul rândului</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/> minute</translation>
 <translation id="3520476450377425184"><ph name="NUMBER_MANY"/> zile rămase</translation>
 <translation id="932327136139879170">Pagina de pornire</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011">Cu <ph name="NUMBER_FEW"/> zile în urmă</translation>
 <translation id="5076340679995252485">&amp;Inserați</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> TO</translation>
+<translation id="7139614227326422685">Mutați la cuvântul următor</translation>
 <translation id="364720409959344976">Selectați un dosar de încărcat</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016">Cu <ph name="NUMBER_TWO"/> minute în urmă</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">Buton de închidere a notificării</translation>
 <translation id="6364916375976753737">Derulați spre stânga</translation>
 <translation id="2629089419211541119">Cu <ph name="NUMBER_ONE"/> oră în urmă</translation>
+<translation id="4218160142017529598">Ștergeți înapoi</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> minute</translation>
 <translation id="6982279413068714821">Cu <ph name="NUMBER_DEFAULT"/> (de) minute în urmă</translation>
 <translation id="6945221475159498467">Selectați</translation>
 <translation id="6620110761915583480">Salvați fișierul</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> secunde</translation>
+<translation id="8924469368910458384">Ștergeți până la începutul rândului</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> ore</translation>
 <translation id="7836361698254323868"><ph name="NUMBER_ONE"/> minut rămas</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> minut</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863"><ph name="NUMBER_MANY"/> zile</translation>
 <translation id="7163503212501929773"><ph name="NUMBER_MANY"/> ore rămase</translation>
 <translation id="5329858601952122676">Ș&amp;tergeți</translation>
+<translation id="6556866813142980365">Refaceți</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> secunde</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> KO</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> minutes</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> minute</translation>
 <translation id="50960180632766478"><ph name="NUMBER_FEW"/> minute rămase</translation>
 <translation id="5517291721709019259"><ph name="NUMBER_FEW"/> secunde rămase</translation>
+<translation id="6903282483217634857">Mutați spre dreapta</translation>
 <translation id="6659594942844771486">Tab</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> MO</translation>
 <translation id="4988273303304146523">Cu <ph name="NUMBER_DEFAULT"/> zile în urmă</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/> minute</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> ore rămase</translation>
 <translation id="7135556860107312402">Permiteți notificările de la următoarele:</translation>
+<translation id="2479520428668657293">Mutați spre dreapta și modificați selecția</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/> ore</translation>
 <translation id="1398853756734560583">Maximizați</translation>
 <translation id="4250229828105606438">Captură de ecran</translation>
 <translation id="6690744523875189208"><ph name="NUMBER_TWO"/> ore</translation>
 <translation id="5260878308685146029"><ph name="NUMBER_TWO"/> minute rămase</translation>
+<translation id="2557207087669398617">Mutați la începutul rândului</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> GO</translation>
 <translation id="1901303067676059328">Select&amp;ați tot</translation>
 <translation id="2168039046890040389">O pagină mai sus</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> minute</translation>
 <translation id="9107059250669762581"><ph name="NUMBER_DEFAULT"/> zile</translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> minute</translation>
+<translation id="6122334925474904337">Mutați la cuvântul următor și modificați selecția</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> minut</translation>
 <translation id="8448317557906454022">Cu <ph name="NUMBER_ZERO"/> secunde în urmă</translation>
 <translation id="4927753642311223124">Nimic de văzut aici, treceți mai departe.</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> zile</translation>
 <translation id="3183922693828471536">Derulați până aici</translation>
 <translation id="4552416320897244156">PgDwn (o pagină mai jos)</translation>
+<translation id="3066573403916685335">Mutați în jos</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/> ore</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> KO/s</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780"><ph name="NUMBER_ONE"/> oră rămasă</translation>
 <translation id="1413622004203049571">Dezactivați notificările de la <ph name="NOTIFIER_NAME"/></translation>
 <translation id="2666092431469916601">Sus</translation>
+<translation id="2538759511191347839">Mutați la sfârșitul rândului și modificați selecția</translation>
+<translation id="928465423150706909">Mutați la sfârșitul rândului</translation>
 <translation id="8331626408530291785">Derulați în sus</translation>
 <translation id="7907591526440419938">Deschideți fișierul</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> zile rămase</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">Opriți conținutul media</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> minute rămase</translation>
 <translation id="3157931365184549694">Restabiliți</translation>
+<translation id="5349525451964472598">Mutați spre stânga și modificați selecția</translation>
+<translation id="1781701194097416995">Mutați la cuvântul anterior</translation>
 <translation id="1243314992276662751">Încărcați</translation>
 <translation id="50030952220075532"><ph name="NUMBER_ONE"/> zi rămasă</translation>
 <translation id="8179976553408161302">Intrați</translation>
+<translation id="8471049483003785219">Mutați la cuvântul anterior și modificați selecția</translation>
 <translation id="945522503751344254">Trimiteți feedback</translation>
 <translation id="9170848237812810038">&amp;Anulați</translation>
 <translation id="1285266685456062655">Cu <ph name="NUMBER_FEW"/> ore în urmă</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350">Cu <ph name="NUMBER_ZERO"/> ore în urmă</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> GO/s</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/> zi</translation>
+<translation id="2704295676501803339">Mutați spre stânga</translation>
 <translation id="9098468523912235228">Cu <ph name="NUMBER_DEFAULT"/> (de) secunde în urmă</translation>
 <translation id="494645311413743213"><ph name="NUMBER_TWO"/> secunde rămase</translation>
 <translation id="4570886800634958009">Buton de extindere a notificării</translation>
+<translation id="566737009157135450">Ștergeți înapoi un cuvânt</translation>
 <translation id="436869212180315161">Apăsați</translation>
 <translation id="4860787810836767172">Cu <ph name="NUMBER_FEW"/> secunde în urmă</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> TO/s</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497">Cu <ph name="NUMBER_MANY"/> (de) minute în urmă</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> O/s</translation>
 <translation id="7649070708921625228">Ajutor</translation>
+<translation id="2405367043325750948">Ștergeți înainte</translation>
 <translation id="6699343763173986273">Melodia următoare din conținutul media</translation>
 <translation id="5445120697129764393"><ph name="NUMBER_DEFAULT"/> de secunde rămase</translation>
 <translation id="8226233771743600312">Nu deranja o zi</translation>
+<translation id="4252565523989510616">Ștergeți înainte un cuvânt</translation>
 <translation id="7457942297256758195">Ștergeți-le pe toate</translation>
 <translation id="822618367988303761">Cu <ph name="NUMBER_TWO"/> zile în urmă</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> minute</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> PO/s</translation>
 <translation id="2743387203779672305">Copiați în clipboard</translation>
 <translation id="8371695176452482769">Vorbiți acum</translation>
+<translation id="1167268268675672572">Mutați la începutul rândului și modificați selecția</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7850320739366109486">Nu deranja</translation>
 <translation id="6978839998405419496">Cu <ph name="NUMBER_ZERO"/> zile în urmă</translation>
diff --git a/ui/base/strings/ui_strings_ru.xtb b/ui/base/strings/ui_strings_ru.xtb
index 55e8c54..9eb0224 100644
--- a/ui/base/strings/ui_strings_ru.xtb
+++ b/ui/base/strings/ui_strings_ru.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> Б</translation>
 <translation id="3660179305079774227">Стрелка вверх</translation>
+<translation id="3969863827134279083">Перейти вверх</translation>
 <translation id="7062130397825382308">Осталась <ph name="NUMBER_ONE"/> секунда</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> МБ/с</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> ч.</translation>
 <translation id="3990502903496589789">Правый край</translation>
 <translation id="9038489124413477075">Без названия</translation>
+<translation id="1940483897317142625">Удалить текст до конца строки</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/> мин.</translation>
 <translation id="3520476450377425184"><ph name="NUMBER_MANY"/> дн.</translation>
 <translation id="932327136139879170">На главную</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011"><ph name="NUMBER_FEW"/> дн. назад</translation>
 <translation id="5076340679995252485">&amp;Вставить</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> ТБ</translation>
+<translation id="7139614227326422685">Перейти вправо к следующему слову</translation>
 <translation id="364720409959344976">Выберите папку для загрузки</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016"><ph name="NUMBER_TWO"/> mins ago</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">Закрыть оповещение</translation>
 <translation id="6364916375976753737">Прокрутка влево</translation>
 <translation id="2629089419211541119"><ph name="NUMBER_ONE"/> ч. назад</translation>
+<translation id="4218160142017529598">Удалить предыдущий символ</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> мин.</translation>
 <translation id="6982279413068714821"><ph name="NUMBER_DEFAULT"/> мин. назад</translation>
 <translation id="6945221475159498467">Выбрать</translation>
 <translation id="6620110761915583480">Сохранить файл</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> сек.</translation>
+<translation id="8924469368910458384">Удалить текст до начала строки</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> hours</translation>
 <translation id="7836361698254323868">Осталась <ph name="NUMBER_ONE"/> минута</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> мин.</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863"><ph name="NUMBER_MANY"/> дн.</translation>
 <translation id="7163503212501929773"><ph name="NUMBER_MANY"/> ч.</translation>
 <translation id="5329858601952122676">&amp;Удалить</translation>
+<translation id="6556866813142980365">Повторить</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> сек.</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> КБ</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> мин.</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> мин.</translation>
 <translation id="50960180632766478"><ph name="NUMBER_FEW"/> мин.</translation>
 <translation id="5517291721709019259">Осталось <ph name="NUMBER_FEW"/> секунды</translation>
+<translation id="6903282483217634857">Перейти вправо</translation>
 <translation id="6659594942844771486">Вкладка</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> МБ</translation>
 <translation id="4988273303304146523"><ph name="NUMBER_DEFAULT"/> дн. назад</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/> мин.</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> hours left</translation>
 <translation id="7135556860107312402">Разрешить оповещения от:</translation>
+<translation id="2479520428668657293">Перейти вправо и изменить выделение</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/> ч.</translation>
 <translation id="1398853756734560583">Развернуть</translation>
 <translation id="4250229828105606438">Скриншот</translation>
 <translation id="6690744523875189208"><ph name="NUMBER_TWO"/> ч.</translation>
 <translation id="5260878308685146029"><ph name="NUMBER_TWO"/> мин.</translation>
+<translation id="2557207087669398617">Перейти к началу строки</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> ГБ</translation>
 <translation id="1901303067676059328">Выделить &amp;все</translation>
 <translation id="2168039046890040389">Вверх</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> mins</translation>
 <translation id="9107059250669762581"><ph name="NUMBER_DEFAULT"/> дн.</translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> мин.</translation>
+<translation id="6122334925474904337">Перейти вправо к следующему слову и изменить выделение</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> мин.</translation>
 <translation id="8448317557906454022"><ph name="NUMBER_ZERO"/> secs ago</translation>
 <translation id="4927753642311223124">Оповещений нет.</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> days</translation>
 <translation id="3183922693828471536">Прокрутить до этого места</translation>
 <translation id="4552416320897244156">PgDwn</translation>
+<translation id="3066573403916685335">Перейти вниз</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/> ч.</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> КБ/с</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780"><ph name="NUMBER_ONE"/> ч.</translation>
 <translation id="1413622004203049571">Отключить оповещения от <ph name="NOTIFIER_NAME"/></translation>
 <translation id="2666092431469916601">Наверх</translation>
+<translation id="2538759511191347839">Перейти к концу строки и изменить выделение</translation>
+<translation id="928465423150706909">Перейти к концу строки</translation>
 <translation id="8331626408530291785">Прокрутка вверх</translation>
 <translation id="7907591526440419938">Открытие файла</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> days left</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">Остановить</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> mins left</translation>
 <translation id="3157931365184549694">Восстановить</translation>
+<translation id="5349525451964472598">Перейти влево и изменить выделение</translation>
+<translation id="1781701194097416995">Перейти влево к следующему слову</translation>
 <translation id="1243314992276662751">Загрузить</translation>
 <translation id="50030952220075532">Остался <ph name="NUMBER_ONE"/> день</translation>
 <translation id="8179976553408161302">Войти</translation>
+<translation id="8471049483003785219">Перейти влево к следующему слову и изменить выделение</translation>
 <translation id="945522503751344254">Отправить отзыв</translation>
 <translation id="9170848237812810038">&amp;Отменить</translation>
 <translation id="1285266685456062655"><ph name="NUMBER_FEW"/> ч. назад</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> hours ago</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> ГБ/с</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/> день</translation>
+<translation id="2704295676501803339">Перейти влево</translation>
 <translation id="9098468523912235228"><ph name="NUMBER_DEFAULT"/> с. назад</translation>
 <translation id="494645311413743213"><ph name="NUMBER_TWO"/> сек.</translation>
 <translation id="4570886800634958009">Раскрыть оповещение</translation>
+<translation id="566737009157135450">Удалить предыдущее слово</translation>
 <translation id="436869212180315161">Нажать</translation>
 <translation id="4860787810836767172"><ph name="NUMBER_FEW"/> с. назад</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> ТБ/с</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497"><ph name="NUMBER_MANY"/> mins ago</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> Б/с</translation>
 <translation id="7649070708921625228">Справка</translation>
+<translation id="2405367043325750948">Удалить следующий символ</translation>
 <translation id="6699343763173986273">Следующий трек</translation>
 <translation id="5445120697129764393">Осталось <ph name="NUMBER_DEFAULT"/> секунд</translation>
 <translation id="8226233771743600312">Не беспокоить (1 день)</translation>
+<translation id="4252565523989510616">Удалить следующее слово</translation>
 <translation id="7457942297256758195">Очистить все</translation>
 <translation id="822618367988303761"><ph name="NUMBER_TWO"/> days ago</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> мин.</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> ПБ/с</translation>
 <translation id="2743387203779672305">Скопировать в буфер</translation>
 <translation id="8371695176452482769">Говорите</translation>
+<translation id="1167268268675672572">Перейти к началу строки и изменить выделение</translation>
 <translation id="6965382102122355670">ОК</translation>
 <translation id="7850320739366109486">Не беспокоить</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> days ago</translation>
diff --git a/ui/base/strings/ui_strings_sk.xtb b/ui/base/strings/ui_strings_sk.xtb
index 876626c..050bd59 100644
--- a/ui/base/strings/ui_strings_sk.xtb
+++ b/ui/base/strings/ui_strings_sk.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> B</translation>
 <translation id="3660179305079774227">Šípka nahor</translation>
+<translation id="3969863827134279083">Presunúť nahor</translation>
 <translation id="7062130397825382308">Zostáva <ph name="NUMBER_ONE"/> sekunda</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> MB/s</translation>
 <translation id="5608669887400696928">Počet hodín: <ph name="NUMBER_DEFAULT"/></translation>
 <translation id="3990502903496589789">Pravý okraj</translation>
 <translation id="9038489124413477075">Priečinok bez názvu</translation>
+<translation id="1940483897317142625">Odstrániť po koniec riadka</translation>
 <translation id="8507996248087185956">Počet minút: <ph name="NUMBER_DEFAULT"/></translation>
 <translation id="3520476450377425184">Počet zvyšných dní: <ph name="NUMBER_MANY"/></translation>
 <translation id="932327136139879170">Home</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011">Pred <ph name="NUMBER_FEW"/> dňami</translation>
 <translation id="5076340679995252485">&amp;Vložiť</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> TB</translation>
+<translation id="7139614227326422685">Presunúť slovo doprava</translation>
 <translation id="364720409959344976">Výber priečinka na nahranie</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016"><ph name="NUMBER_TWO"/> mins ago</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">Zavrieť upozornenie</translation>
 <translation id="6364916375976753737">Rolovať doľava</translation>
 <translation id="2629089419211541119">Pred <ph name="NUMBER_ONE"/> hod</translation>
+<translation id="4218160142017529598">Odstrániť predchádzajúci znak</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> min</translation>
 <translation id="6982279413068714821">Pred <ph name="NUMBER_DEFAULT"/> minútami</translation>
 <translation id="6945221475159498467">Vybrať</translation>
 <translation id="6620110761915583480">Uložiť súbor</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> sekúnd</translation>
+<translation id="8924469368910458384">Odstrániť po začiatok riadka</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> hours</translation>
 <translation id="7836361698254323868">Zostáva <ph name="NUMBER_ONE"/> minúta</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> minúta</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863">Počet dní: <ph name="NUMBER_MANY"/></translation>
 <translation id="7163503212501929773">Počet zvyšných hodín: <ph name="NUMBER_MANY"/></translation>
 <translation id="5329858601952122676">&amp;Odstrániť</translation>
+<translation id="6556866813142980365">Znova</translation>
 <translation id="8088823334188264070">Počet sekúnd: <ph name="NUMBER_MANY"/></translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> kB</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> minutes</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> minúty</translation>
 <translation id="50960180632766478">Počet zvyšných minút: <ph name="NUMBER_FEW"/></translation>
 <translation id="5517291721709019259">Zostávajú <ph name="NUMBER_FEW"/> sekundy</translation>
+<translation id="6903282483217634857">Presunúť doprava</translation>
 <translation id="6659594942844771486">Tab</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> MB</translation>
 <translation id="4988273303304146523">Pred <ph name="NUMBER_DEFAULT"/> dňami</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773">Počet minút: <ph name="NUMBER_TWO"/></translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> hours left</translation>
 <translation id="7135556860107312402">Povoliť prijímanie upozornení od:</translation>
+<translation id="2479520428668657293">Presunúť doprava a upraviť výber</translation>
 <translation id="8112886015144590373">Počet hodín: <ph name="NUMBER_FEW"/></translation>
 <translation id="1398853756734560583">Maximalizovať</translation>
 <translation id="4250229828105606438">Snímka obrazovky</translation>
 <translation id="6690744523875189208">Počet hodín: <ph name="NUMBER_TWO"/></translation>
 <translation id="5260878308685146029">Počet zvyšných minút: <ph name="NUMBER_TWO"/></translation>
+<translation id="2557207087669398617">Presunúť na začiatok riadka</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> GB</translation>
 <translation id="1901303067676059328">Vybrať &amp;všetko</translation>
 <translation id="2168039046890040389">Page Up</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> mins</translation>
 <translation id="9107059250669762581">Počet dní: <ph name="NUMBER_DEFAULT"/></translation>
 <translation id="6463061331681402734">Počet minút: <ph name="NUMBER_MANY"/></translation>
+<translation id="6122334925474904337">Presunúť slovo doprava a upraviť výber</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> minúta</translation>
 <translation id="8448317557906454022"><ph name="NUMBER_ZERO"/> secs ago</translation>
 <translation id="4927753642311223124">Tu sa nič nenachádza, pokračujte ďalej.</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> days</translation>
 <translation id="3183922693828471536">Rolovať na toto miesto</translation>
 <translation id="4552416320897244156">PgDwn</translation>
+<translation id="3066573403916685335">Presunúť nadol</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401">Počet hodín: <ph name="NUMBER_MANY"/></translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> kB/s</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780">Zostáva <ph name="NUMBER_ONE"/> hodina</translation>
 <translation id="1413622004203049571">Zakázať upozornenia od <ph name="NOTIFIER_NAME"/></translation>
 <translation id="2666092431469916601">Vrch</translation>
+<translation id="2538759511191347839">Presunúť na koniec riadka a upraviť výber</translation>
+<translation id="928465423150706909">Presunúť na koniec riadka</translation>
 <translation id="8331626408530291785">Rolovať nahor</translation>
 <translation id="7907591526440419938">Otvoriť súbor</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> days left</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">Médiá – zastaviť</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> mins left</translation>
 <translation id="3157931365184549694">Obnoviť</translation>
+<translation id="5349525451964472598">Presunúť doľava a upraviť výber</translation>
+<translation id="1781701194097416995">Presunúť slovo doľava</translation>
 <translation id="1243314992276662751">Nahrať</translation>
 <translation id="50030952220075532">Zostáva <ph name="NUMBER_ONE"/> deň</translation>
 <translation id="8179976553408161302">Začať</translation>
+<translation id="8471049483003785219">Presunúť slovo doľava a upraviť výber</translation>
 <translation id="945522503751344254">Poslať pripomienky</translation>
 <translation id="9170848237812810038">&amp;Naspäť</translation>
 <translation id="1285266685456062655">Pred <ph name="NUMBER_FEW"/> hodinami</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> hours ago</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> GB/s</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/> deň</translation>
+<translation id="2704295676501803339">Presunúť doľava</translation>
 <translation id="9098468523912235228">Pred <ph name="NUMBER_DEFAULT"/> s</translation>
 <translation id="494645311413743213">Počet zvyšných sekúnd: <ph name="NUMBER_TWO"/></translation>
 <translation id="4570886800634958009">Rozbaliť upozornenie</translation>
+<translation id="566737009157135450">Odstrániť predchádzajúce slovo</translation>
 <translation id="436869212180315161">Stlačiť</translation>
 <translation id="4860787810836767172">Pred <ph name="NUMBER_FEW"/> s</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> TB/s</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497"><ph name="NUMBER_MANY"/> mins ago</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> B/s</translation>
 <translation id="7649070708921625228">Pomocník</translation>
+<translation id="2405367043325750948">Odstrániť nasledujúci znak</translation>
 <translation id="6699343763173986273">Média – ďalšia stopa</translation>
 <translation id="5445120697129764393">Zostáva <ph name="NUMBER_DEFAULT"/> sekúnd</translation>
 <translation id="8226233771743600312">Nerušiť jeden deň</translation>
+<translation id="4252565523989510616">Odstrániť nasledujúce slovo</translation>
 <translation id="7457942297256758195">Vymazať všetky</translation>
 <translation id="822618367988303761"><ph name="NUMBER_TWO"/> days ago</translation>
 <translation id="4745438305783437565">Počet minút: <ph name="NUMBER_FEW"/></translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> PB/s</translation>
 <translation id="2743387203779672305">Kopírovať do schránky</translation>
 <translation id="8371695176452482769">Začnite hovoriť</translation>
+<translation id="1167268268675672572">Presunúť na začiatok riadka a upraviť výber</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7850320739366109486">Nerušiť</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> days ago</translation>
diff --git a/ui/base/strings/ui_strings_sl.xtb b/ui/base/strings/ui_strings_sl.xtb
index d2e184c..1e3db6e 100644
--- a/ui/base/strings/ui_strings_sl.xtb
+++ b/ui/base/strings/ui_strings_sl.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> B</translation>
 <translation id="3660179305079774227">Puščica gor</translation>
+<translation id="3969863827134279083">Premik gor</translation>
 <translation id="7062130397825382308">Še <ph name="NUMBER_ONE"/> sekundo</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> MB/s</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> h</translation>
 <translation id="3990502903496589789">Desni rob</translation>
 <translation id="9038489124413477075">Neimenovana mapa</translation>
+<translation id="1940483897317142625">Brisanje do konca vrstice</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/> min</translation>
 <translation id="3520476450377425184">še <ph name="NUMBER_MANY"/> dni</translation>
 <translation id="932327136139879170">Home</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011">Pred <ph name="NUMBER_FEW"/> dnevi</translation>
 <translation id="5076340679995252485">&amp;Prilepi</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> TB</translation>
+<translation id="7139614227326422685">Premik besede desno</translation>
 <translation id="364720409959344976">Izberite mapo, ki jo želite prenesti</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016">Pred <ph name="NUMBER_TWO"/> min</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">Zapri obvestilo</translation>
 <translation id="6364916375976753737">Pomik levo</translation>
 <translation id="2629089419211541119">Pred <ph name="NUMBER_ONE"/> h</translation>
+<translation id="4218160142017529598">Brisanje nazaj</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> min</translation>
 <translation id="6982279413068714821">Pred <ph name="NUMBER_DEFAULT"/> min</translation>
 <translation id="6945221475159498467">Izberi</translation>
 <translation id="6620110761915583480">Shrani datoteko</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> seconds</translation>
+<translation id="8924469368910458384">Brisanje do začetka vrstice</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> hours</translation>
 <translation id="7836361698254323868">še <ph name="NUMBER_ONE"/> min</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> min</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863"><ph name="NUMBER_MANY"/> days</translation>
 <translation id="7163503212501929773">še <ph name="NUMBER_MANY"/> ur</translation>
 <translation id="5329858601952122676">&amp;Izbriši</translation>
+<translation id="6556866813142980365">Uveljavi</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> secs</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> KB</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> minutes</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> minuti</translation>
 <translation id="50960180632766478">še <ph name="NUMBER_FEW"/> min</translation>
 <translation id="5517291721709019259">Še <ph name="NUMBER_FEW"/> sekunde</translation>
+<translation id="6903282483217634857">Premik desno</translation>
 <translation id="6659594942844771486">Tabulator</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> MB</translation>
 <translation id="4988273303304146523">Pred <ph name="NUMBER_DEFAULT"/> dnevi</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/> min</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> hours left</translation>
 <translation id="7135556860107312402">Omogočanje obvestil teh aplikacij:</translation>
+<translation id="2479520428668657293">Premik desno in sprememba izbire</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/> ur</translation>
 <translation id="1398853756734560583">Povečaj</translation>
 <translation id="4250229828105606438">Posnetek zaslona</translation>
 <translation id="6690744523875189208"><ph name="NUMBER_TWO"/> uri</translation>
 <translation id="5260878308685146029">še <ph name="NUMBER_TWO"/> min</translation>
+<translation id="2557207087669398617">Premik na začetek vrstice</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> GB</translation>
 <translation id="1901303067676059328">Izberi &amp;vse</translation>
 <translation id="2168039046890040389">Stran gor</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> mins</translation>
 <translation id="9107059250669762581"><ph name="NUMBER_DEFAULT"/> dni</translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> mins</translation>
+<translation id="6122334925474904337">Premik besede desno in sprememba izbire</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> minuta</translation>
 <translation id="8448317557906454022">Pred <ph name="NUMBER_ZERO"/> s</translation>
 <translation id="4927753642311223124">Tu ni ničesar, pomaknite se naprej.</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> days</translation>
 <translation id="3183922693828471536">Pomik do sem</translation>
 <translation id="4552416320897244156">PgDwn</translation>
+<translation id="3066573403916685335">Premik dol</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/> ur</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> KB/s</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780">še <ph name="NUMBER_ONE"/> ura</translation>
 <translation id="1413622004203049571">Izklop obvestil za <ph name="NOTIFIER_NAME"/></translation>
 <translation id="2666092431469916601">Na vrh</translation>
+<translation id="2538759511191347839">Premik na konec vrstice in sprememba izbire</translation>
+<translation id="928465423150706909">Premik na konec vrstice</translation>
 <translation id="8331626408530291785">Pomik gor</translation>
 <translation id="7907591526440419938">Odpri datoteko</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> days left</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">Ustavitev</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> mins left</translation>
 <translation id="3157931365184549694">Obnovi</translation>
+<translation id="5349525451964472598">Premik levo in sprememba izbire</translation>
+<translation id="1781701194097416995">Premik besede levo</translation>
 <translation id="1243314992276662751">Prenesi</translation>
 <translation id="50030952220075532">še <ph name="NUMBER_ONE"/> dan</translation>
 <translation id="8179976553408161302">Potrdi</translation>
+<translation id="8471049483003785219">Premik besede levo in sprememba izbire</translation>
 <translation id="945522503751344254">Pošlji povratne informacije</translation>
 <translation id="9170848237812810038">&amp;Razveljavi</translation>
 <translation id="1285266685456062655">Pred <ph name="NUMBER_FEW"/> h</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> hours ago</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> GB/s</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/> dan</translation>
+<translation id="2704295676501803339">Premik levo</translation>
 <translation id="9098468523912235228">Pred <ph name="NUMBER_DEFAULT"/> s</translation>
 <translation id="494645311413743213">še <ph name="NUMBER_TWO"/> sek</translation>
 <translation id="4570886800634958009">Razširi obvestilo</translation>
+<translation id="566737009157135450">Brisanje besede nazaj</translation>
 <translation id="436869212180315161">Pritisnite</translation>
 <translation id="4860787810836767172">Pred <ph name="NUMBER_FEW"/> s</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> TB/s</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497">Pred <ph name="NUMBER_MANY"/> min</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> B/s</translation>
 <translation id="7649070708921625228">Pomoč</translation>
+<translation id="2405367043325750948">Brisanje naprej</translation>
 <translation id="6699343763173986273">Naslednja skladba</translation>
 <translation id="5445120697129764393">Še <ph name="NUMBER_DEFAULT"/> sekund</translation>
 <translation id="8226233771743600312">Ne moti en dan</translation>
+<translation id="4252565523989510616">Brisanje besede naprej</translation>
 <translation id="7457942297256758195">Izbriši vse</translation>
 <translation id="822618367988303761">Pred <ph name="NUMBER_TWO"/> dnevoma</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> min</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> PB/s</translation>
 <translation id="2743387203779672305">Kopiraj v odložišče</translation>
 <translation id="8371695176452482769">Začnite govoriti</translation>
+<translation id="1167268268675672572">Premik na začetek vrstice in sprememba izbire</translation>
 <translation id="6965382102122355670">V redu</translation>
 <translation id="7850320739366109486">Ne moti</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> days ago</translation>
diff --git a/ui/base/strings/ui_strings_sr.xtb b/ui/base/strings/ui_strings_sr.xtb
index 97b177a..5e833cb 100644
--- a/ui/base/strings/ui_strings_sr.xtb
+++ b/ui/base/strings/ui_strings_sr.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> B</translation>
 <translation id="3660179305079774227">Стрелица нагоре</translation>
+<translation id="3969863827134279083">Помери нагоре</translation>
 <translation id="7062130397825382308">Још <ph name="NUMBER_ONE"/> секунда</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> MB/s</translation>
 <translation id="5608669887400696928">Сати: <ph name="NUMBER_DEFAULT"/></translation>
 <translation id="3990502903496589789">Десна ивица</translation>
 <translation id="9038489124413477075">Неименовани директоријум</translation>
+<translation id="1940483897317142625">Избриши до краја реда</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/> мин.</translation>
 <translation id="3520476450377425184">Преостало <ph name="NUMBER_MANY"/> дана</translation>
 <translation id="932327136139879170">Home</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011">Пре <ph name="NUMBER_FEW"/> дана</translation>
 <translation id="5076340679995252485">&amp;Налепи</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> TB</translation>
+<translation id="7139614227326422685">Помери удесно за реч</translation>
 <translation id="364720409959344976">Избор директоријума за отпремање</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016">Пре <ph name="NUMBER_TWO"/> минута</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">Затвори обавештење</translation>
 <translation id="6364916375976753737">Помери налево</translation>
 <translation id="2629089419211541119">Пре <ph name="NUMBER_ONE"/> сат</translation>
+<translation id="4218160142017529598">Избриши уназад</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> мин</translation>
 <translation id="6982279413068714821">Пре <ph name="NUMBER_DEFAULT"/> минута</translation>
 <translation id="6945221475159498467">Изабери</translation>
 <translation id="6620110761915583480">Чување датотеке</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> секунди</translation>
+<translation id="8924469368910458384">Избриши до почетка реда</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> hours</translation>
 <translation id="7836361698254323868">Преостао је <ph name="NUMBER_ONE"/> минут</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> мин.</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863">Дана: <ph name="NUMBER_MANY"/></translation>
 <translation id="7163503212501929773">Преостало сати: <ph name="NUMBER_MANY"/></translation>
 <translation id="5329858601952122676">&amp;Избриши</translation>
+<translation id="6556866813142980365">Понови</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> сек.</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> KB</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> минута</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> минута</translation>
 <translation id="50960180632766478">Преостало <ph name="NUMBER_FEW"/> мин.</translation>
 <translation id="5517291721709019259">Још <ph name="NUMBER_FEW"/> секунде</translation>
+<translation id="6903282483217634857">Помери удесно</translation>
 <translation id="6659594942844771486">Tab</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> MB</translation>
 <translation id="4988273303304146523">Пре <ph name="NUMBER_DEFAULT"/> дана</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/> мин.</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> hours left</translation>
 <translation id="7135556860107312402">Дозволи обавештења из следећих извора:</translation>
+<translation id="2479520428668657293">Помери удесно и измени избор</translation>
 <translation id="8112886015144590373">Сати: <ph name="NUMBER_FEW"/></translation>
 <translation id="1398853756734560583">Увећај</translation>
 <translation id="4250229828105606438">Снимак екрана</translation>
 <translation id="6690744523875189208">Сати: <ph name="NUMBER_TWO"/></translation>
 <translation id="5260878308685146029">Преостало <ph name="NUMBER_TWO"/> мин.</translation>
+<translation id="2557207087669398617">Помери на почетак реда</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> GB</translation>
 <translation id="1901303067676059328">Изабери &amp;све</translation>
 <translation id="2168039046890040389">Страница нагоре</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> mins</translation>
 <translation id="9107059250669762581">Дана: <ph name="NUMBER_DEFAULT"/></translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> мин.</translation>
+<translation id="6122334925474904337">Помери удесно за реч и измени избор</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> минут</translation>
 <translation id="8448317557906454022"><ph name="NUMBER_ZERO"/> secs ago</translation>
 <translation id="4927753642311223124">Нема шта да се види овде. Наставите даље.</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> days</translation>
 <translation id="3183922693828471536">Помери се овде</translation>
 <translation id="4552416320897244156">Page Down</translation>
+<translation id="3066573403916685335">Помери надоле</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401">Сати: <ph name="NUMBER_MANY"/></translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> KB/s</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780">Преостао <ph name="NUMBER_ONE"/> сат</translation>
 <translation id="1413622004203049571">Онемогући обавештења од <ph name="NOTIFIER_NAME"/></translation>
 <translation id="2666092431469916601">Врх</translation>
+<translation id="2538759511191347839">Помери до краја реда и измени избор</translation>
+<translation id="928465423150706909">Помери до краја реда</translation>
 <translation id="8331626408530291785">Помери нагоре</translation>
 <translation id="7907591526440419938">Отварање датотеке</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> days left</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">Заустављање медија</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> mins left</translation>
 <translation id="3157931365184549694">Поново отвори</translation>
+<translation id="5349525451964472598">Помери улево и измени избор</translation>
+<translation id="1781701194097416995">Помери улево за реч</translation>
 <translation id="1243314992276662751">Отпреми</translation>
 <translation id="50030952220075532">Преостао <ph name="NUMBER_ONE"/> дан</translation>
 <translation id="8179976553408161302">Унеси</translation>
+<translation id="8471049483003785219">Помери улево за реч и измени избор</translation>
 <translation id="945522503751344254">Пошаљи повратне информације</translation>
 <translation id="9170848237812810038">&amp;Опозови</translation>
 <translation id="1285266685456062655">Пре <ph name="NUMBER_FEW"/> сата</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> hours ago</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> GB/s</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/> дан</translation>
+<translation id="2704295676501803339">Помери улево</translation>
 <translation id="9098468523912235228">Пре <ph name="NUMBER_DEFAULT"/> секунди</translation>
 <translation id="494645311413743213">Преостало <ph name="NUMBER_TWO"/> сек.</translation>
 <translation id="4570886800634958009">Прошири обавештење</translation>
+<translation id="566737009157135450">Избриши реч уназад</translation>
 <translation id="436869212180315161">Притисните</translation>
 <translation id="4860787810836767172">Пре <ph name="NUMBER_FEW"/> секунде</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> TB/s</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497"><ph name="NUMBER_MANY"/> mins ago</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> B/s</translation>
 <translation id="7649070708921625228">Помоћ</translation>
+<translation id="2405367043325750948">Избриши унапред</translation>
 <translation id="6699343763173986273">Следећа песма медија</translation>
 <translation id="5445120697129764393">Још <ph name="NUMBER_DEFAULT"/> секунди</translation>
 <translation id="8226233771743600312">Не узнемиравај у периоду од једног дана</translation>
+<translation id="4252565523989510616">Избриши реч унапред</translation>
 <translation id="7457942297256758195">Обриши све</translation>
 <translation id="822618367988303761">Пре <ph name="NUMBER_TWO"/> дана</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> мин.</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> PB/s</translation>
 <translation id="2743387203779672305">Копирај у меморију</translation>
 <translation id="8371695176452482769">Почните да говорите</translation>
+<translation id="1167268268675672572">Помери на почетак реда и измени избор</translation>
 <translation id="6965382102122355670">Потврди</translation>
 <translation id="7850320739366109486">Не узнемиравај</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> days ago</translation>
diff --git a/ui/base/strings/ui_strings_sv.xtb b/ui/base/strings/ui_strings_sv.xtb
index d967817..bd33ee9 100644
--- a/ui/base/strings/ui_strings_sv.xtb
+++ b/ui/base/strings/ui_strings_sv.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> B</translation>
 <translation id="3660179305079774227">Uppil</translation>
+<translation id="3969863827134279083">Flytta upp</translation>
 <translation id="7062130397825382308"><ph name="NUMBER_ONE"/> sekund kvar</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> MB/sek</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> timmar</translation>
 <translation id="3990502903496589789">Högerkant</translation>
 <translation id="9038489124413477075">Namnlös mapp</translation>
+<translation id="1940483897317142625">Radera till slutet av raden</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/> minuter</translation>
 <translation id="3520476450377425184"><ph name="NUMBER_MANY"/> dagar kvar</translation>
 <translation id="932327136139879170">Startsida</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011"><ph name="NUMBER_FEW"/> days ago</translation>
 <translation id="5076340679995252485">K&amp;listra in</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> TB</translation>
+<translation id="7139614227326422685">Flytta ett ord åt höger</translation>
 <translation id="364720409959344976">Välj en mapp för överföring</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016"><ph name="NUMBER_TWO"/> mins ago</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">Meddelande om stängning</translation>
 <translation id="6364916375976753737">Rulla åt vänster</translation>
 <translation id="2629089419211541119">För <ph name="NUMBER_ONE"/> timme sedan</translation>
+<translation id="4218160142017529598">Radera bakåt</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> minuter</translation>
 <translation id="6982279413068714821">För <ph name="NUMBER_DEFAULT"/> minuter sedan</translation>
 <translation id="6945221475159498467">Välj</translation>
 <translation id="6620110761915583480">Spara fil</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> sekunder</translation>
+<translation id="8924469368910458384">Radera till radens början</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> hours</translation>
 <translation id="7836361698254323868"><ph name="NUMBER_ONE"/> minut kvar</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> minut</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863"><ph name="NUMBER_MANY"/> dagar</translation>
 <translation id="7163503212501929773"><ph name="NUMBER_MANY"/> timmar kvar</translation>
 <translation id="5329858601952122676">&amp;Ta bort</translation>
+<translation id="6556866813142980365">Upprepa</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> sekunder</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> kB</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> minuter</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> minuter</translation>
 <translation id="50960180632766478"><ph name="NUMBER_FEW"/> minuter kvar</translation>
 <translation id="5517291721709019259"><ph name="NUMBER_FEW"/> sekunder kvar</translation>
+<translation id="6903282483217634857">Flytta åt höger</translation>
 <translation id="6659594942844771486">Flik</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> MB</translation>
 <translation id="4988273303304146523">För <ph name="NUMBER_DEFAULT"/> dagar sedan</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/> minuter</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> hours left</translation>
 <translation id="7135556860107312402">Tillåt meddelanden från följande:</translation>
+<translation id="2479520428668657293">Flytta åt höger och ändra markeringen</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/> timmar</translation>
 <translation id="1398853756734560583">Maximera</translation>
 <translation id="4250229828105606438">Skärmdump</translation>
 <translation id="6690744523875189208"><ph name="NUMBER_TWO"/> timmar</translation>
 <translation id="5260878308685146029"><ph name="NUMBER_TWO"/> minuter kvar</translation>
+<translation id="2557207087669398617">Flytta till radens början</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> GB</translation>
 <translation id="1901303067676059328">Välj &amp;alla</translation>
 <translation id="2168039046890040389">Page Up</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> mins</translation>
 <translation id="9107059250669762581"><ph name="NUMBER_DEFAULT"/> dagar</translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> minuter</translation>
+<translation id="6122334925474904337">Flytta ett ord åt höger och ändra markeringen</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> minut</translation>
 <translation id="8448317557906454022"><ph name="NUMBER_ZERO"/> secs ago</translation>
 <translation id="4927753642311223124">Här finns inget att se, fortsätt.</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> days</translation>
 <translation id="3183922693828471536">Rulla hit</translation>
 <translation id="4552416320897244156">Page Down</translation>
+<translation id="3066573403916685335">Flytta ner</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/> timmar</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> kB/sek</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780"><ph name="NUMBER_ONE"/> timmar kvar</translation>
 <translation id="1413622004203049571">Inaktivera aviseringar från <ph name="NOTIFIER_NAME"/></translation>
 <translation id="2666092431469916601">Överst</translation>
+<translation id="2538759511191347839">Flytta till slutet av raden och ändra markeringen</translation>
+<translation id="928465423150706909">Flytta till slutet av raden</translation>
 <translation id="8331626408530291785">Rulla uppåt</translation>
 <translation id="7907591526440419938">Öppna fil</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> days left</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">Stoppa</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> mins left</translation>
 <translation id="3157931365184549694">Återställ</translation>
+<translation id="5349525451964472598">Flytta åt vänster och ändra markeringen</translation>
+<translation id="1781701194097416995">Flytta ett ord åt vänster</translation>
 <translation id="1243314992276662751">Överför</translation>
 <translation id="50030952220075532"><ph name="NUMBER_ONE"/> dag kvar</translation>
 <translation id="8179976553408161302">Start</translation>
+<translation id="8471049483003785219">Flytta ett ord åt vänster och ändra markeringen</translation>
 <translation id="945522503751344254">Skicka synpunkter</translation>
 <translation id="9170848237812810038">&amp;Ångra</translation>
 <translation id="1285266685456062655"><ph name="NUMBER_FEW"/> hours ago</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> hours ago</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> GB/sek</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/> dag</translation>
+<translation id="2704295676501803339">Flytta åt vänster</translation>
 <translation id="9098468523912235228">För <ph name="NUMBER_DEFAULT"/> sekunder sedan</translation>
 <translation id="494645311413743213"><ph name="NUMBER_TWO"/> sekunder kvar</translation>
 <translation id="4570886800634958009">Meddelande om utökning</translation>
+<translation id="566737009157135450">Radera ett ord bakåt</translation>
 <translation id="436869212180315161">Pressen</translation>
 <translation id="4860787810836767172"><ph name="NUMBER_FEW"/> secs ago</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> TB/sek</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497"><ph name="NUMBER_MANY"/> mins ago</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> B/sek</translation>
 <translation id="7649070708921625228">Hjälp</translation>
+<translation id="2405367043325750948">Radera framåt</translation>
 <translation id="6699343763173986273">Nästa spår</translation>
 <translation id="5445120697129764393"><ph name="NUMBER_DEFAULT"/> sekunder kvar</translation>
 <translation id="8226233771743600312">Stör inte i en dag</translation>
+<translation id="4252565523989510616">Radera ett ord framåt</translation>
 <translation id="7457942297256758195">Ta bort alla</translation>
 <translation id="822618367988303761"><ph name="NUMBER_TWO"/> days ago</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> minuter</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> PB/sek</translation>
 <translation id="2743387203779672305">Kopiera till Urklipp</translation>
 <translation id="8371695176452482769">Prata nu</translation>
+<translation id="1167268268675672572">Flytta till radens början och ändra markeringen</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7850320739366109486">Stör inte</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> days ago</translation>
diff --git a/ui/base/strings/ui_strings_sw.xtb b/ui/base/strings/ui_strings_sw.xtb
index c3e1852..53b939a 100644
--- a/ui/base/strings/ui_strings_sw.xtb
+++ b/ui/base/strings/ui_strings_sw.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658">B <ph name="QUANTITY"/></translation>
 <translation id="3660179305079774227">Mshale Juu</translation>
+<translation id="3969863827134279083">Sogeza Juu</translation>
 <translation id="7062130397825382308">Imesalia sekunde <ph name="NUMBER_ONE"/></translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> MB/s</translation>
 <translation id="5608669887400696928">saa <ph name="NUMBER_DEFAULT"/></translation>
 <translation id="3990502903496589789">Ncha ya Kulia</translation>
 <translation id="9038489124413477075">Folda isiyo na jina</translation>
+<translation id="1940483897317142625">Futa Hadi Mwisho Wa Mstari</translation>
 <translation id="8507996248087185956">dakika <ph name="NUMBER_DEFAULT"/></translation>
 <translation id="3520476450377425184">zimesalia siku <ph name="NUMBER_MANY"/></translation>
 <translation id="932327136139879170">Nyumbani</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011">siku <ph name="NUMBER_FEW"/> zilizopita</translation>
 <translation id="5076340679995252485">&amp;Bandika</translation>
 <translation id="7460907917090416791">TB <ph name="QUANTITY"/></translation>
+<translation id="7139614227326422685">Sogeza Upande Wa Kulia Wa Neno</translation>
 <translation id="364720409959344976">Chagua Folda ya Kupakia</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016">dakika <ph name="NUMBER_TWO"/> zilizopita</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">Funga arifa</translation>
 <translation id="6364916375976753737">Sogeza Kushoto</translation>
 <translation id="2629089419211541119">saa <ph name="NUMBER_ONE"/> lililopita</translation>
+<translation id="4218160142017529598">Futa Kuelekea Nyuma</translation>
 <translation id="2994641463185352298">Dakika <ph name="NUMBER_DEFAULT"/></translation>
 <translation id="6982279413068714821">dakika <ph name="NUMBER_DEFAULT"/> zilizopita</translation>
 <translation id="6945221475159498467">Chagua</translation>
 <translation id="6620110761915583480">Hifadhi Faili</translation>
 <translation id="4349181486102621992">Sekunde <ph name="NUMBER_ZERO"/></translation>
+<translation id="8924469368910458384">Futa Hadi Mwanzo Wa Mstari</translation>
 <translation id="6719684875142564568">saa <ph name="NUMBER_ZERO"/></translation>
 <translation id="7836361698254323868">Imesalia dakika <ph name="NUMBER_ONE"/></translation>
 <translation id="2953767478223974804">dakika <ph name="NUMBER_ONE"/></translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863">siku <ph name="NUMBER_MANY"/></translation>
 <translation id="7163503212501929773">zimesalia saa <ph name="NUMBER_MANY"/></translation>
 <translation id="5329858601952122676">&amp;Futa</translation>
+<translation id="6556866813142980365">Rudia</translation>
 <translation id="8088823334188264070">sekunde <ph name="NUMBER_MANY"/></translation>
 <translation id="8901569739625249689">KB <ph name="QUANTITY"/></translation>
 <translation id="7712011264267466734">Dakika <ph name="NUMBER_MANY"/></translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412">Dakika <ph name="NUMBER_TWO"/></translation>
 <translation id="50960180632766478">zimesalia dakika <ph name="NUMBER_FEW"/></translation>
 <translation id="5517291721709019259">Zimesalia sekunde <ph name="NUMBER_FEW"/></translation>
+<translation id="6903282483217634857">Sogeza Kulia</translation>
 <translation id="6659594942844771486">Kichupo</translation>
 <translation id="3049748772180311791">MB <ph name="QUANTITY"/></translation>
 <translation id="4988273303304146523">siku <ph name="NUMBER_DEFAULT"/> zilizopita</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773">dakika <ph name="NUMBER_TWO"/></translation>
 <translation id="5149131957118398098">Zimesalia saa <ph name="NUMBER_ZERO"/></translation>
 <translation id="7135556860107312402">Ruhusu arifa kutoka kwa:</translation>
+<translation id="2479520428668657293">Sogeza Kulia Na Ubadilisha Uteuzi</translation>
 <translation id="8112886015144590373">saa <ph name="NUMBER_FEW"/></translation>
 <translation id="1398853756734560583">Tanua</translation>
 <translation id="4250229828105606438">Picha ya skrini</translation>
 <translation id="6690744523875189208">saa <ph name="NUMBER_TWO"/></translation>
 <translation id="5260878308685146029">zimesalia dakika <ph name="NUMBER_TWO"/></translation>
+<translation id="2557207087669398617">Sogeza Hadi Mwanzo Wa Mstari</translation>
 <translation id="3757388668994797779">GB <ph name="QUANTITY"/></translation>
 <translation id="1901303067676059328">Chagua &amp;yote</translation>
 <translation id="2168039046890040389">Ukurasa mmoja juu</translation>
 <translation id="7363290921156020669">dakika <ph name="NUMBER_ZERO"/></translation>
 <translation id="9107059250669762581">siku <ph name="NUMBER_DEFAULT"/></translation>
 <translation id="6463061331681402734">dakika <ph name="NUMBER_MANY"/></translation>
+<translation id="6122334925474904337">Sogeza Upande Wa Kulia Wa Neno Na Ubadilishe Uteuzi</translation>
 <translation id="7634624804467787019">Dakika <ph name="NUMBER_ONE"/></translation>
 <translation id="8448317557906454022">sekunde <ph name="NUMBER_ZERO"/> zilizopita</translation>
 <translation id="4927753642311223124">Hakuna cha kuangalia hapa, endelea.</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075">siku <ph name="NUMBER_ZERO"/></translation>
 <translation id="3183922693828471536">Sogeza Hadi Hapa</translation>
 <translation id="4552416320897244156">PgDwn</translation>
+<translation id="3066573403916685335">Sogeza Chini</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401">saa <ph name="NUMBER_MANY"/></translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> KB/s</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780">limesalia saa <ph name="NUMBER_ONE"/></translation>
 <translation id="1413622004203049571">Zima arifa kutoka <ph name="NOTIFIER_NAME"/></translation>
 <translation id="2666092431469916601">Ya Juu</translation>
+<translation id="2538759511191347839">Sogeza Hadi Mwisho Wa Mstari Na Ubadilishe Uteuzi</translation>
+<translation id="928465423150706909">Sogeza Mwisho Wa Mstari</translation>
 <translation id="8331626408530291785">Sogeza Juu</translation>
 <translation id="7907591526440419938">Fungua Faili</translation>
 <translation id="2864069933652346933">zimesalia siku <ph name="NUMBER_ZERO"/></translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">Simamisha Media</translation>
 <translation id="1308727876662951186">zimesalia dakika <ph name="NUMBER_ZERO"/></translation>
 <translation id="3157931365184549694">Rejesha</translation>
+<translation id="5349525451964472598">Sogeza Kushoto Na Ubadilishe Uteuzi</translation>
+<translation id="1781701194097416995">Sogeza Upande Wa Kulia Wa Neno</translation>
 <translation id="1243314992276662751">Pakia</translation>
 <translation id="50030952220075532">imesalia siku <ph name="NUMBER_ONE"/></translation>
 <translation id="8179976553408161302">Enter</translation>
+<translation id="8471049483003785219">Sogeza Upande Wa Kulia Wa Neno Na Ubadilishe Uteuzi</translation>
 <translation id="945522503751344254">Tuma maoni</translation>
 <translation id="9170848237812810038">&amp;Tendua</translation>
 <translation id="1285266685456062655">Saa <ph name="NUMBER_FEW"/> zilizopita</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350">Saa <ph name="NUMBER_ZERO"/> zilizopita</translation>
 <translation id="3740362395218339114">GB/s <ph name="QUANTITY"/></translation>
 <translation id="6644971472240498405">siku <ph name="NUMBER_ONE"/></translation>
+<translation id="2704295676501803339">Sogeza Kushoto</translation>
 <translation id="9098468523912235228">sekunde <ph name="NUMBER_DEFAULT"/> zilizopita</translation>
 <translation id="494645311413743213">zimesalia sekunde <ph name="NUMBER_TWO"/></translation>
 <translation id="4570886800634958009">Panua arifa</translation>
+<translation id="566737009157135450">Futa Neno Kwa Kuelekea Nyuma</translation>
 <translation id="436869212180315161">Bofya</translation>
 <translation id="4860787810836767172">sekunde <ph name="NUMBER_FEW"/> zilizopita</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> TB/s</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497">dakika <ph name="NUMBER_MANY"/> zilizopita</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> B/s</translation>
 <translation id="7649070708921625228">Usaidizi</translation>
+<translation id="2405367043325750948">Futa Ukielekea Upande Wa Mbele</translation>
 <translation id="6699343763173986273">Wimbo Unaofuata kwenye Media</translation>
 <translation id="5445120697129764393">Zimesalia sekunde <ph name="NUMBER_DEFAULT"/></translation>
 <translation id="8226233771743600312">Usinisumbue kwa siku moja</translation>
+<translation id="4252565523989510616">Futa Neno Ukielekea Upande Wa Mbele</translation>
 <translation id="7457942297256758195">Futa Zote</translation>
 <translation id="822618367988303761">siku <ph name="NUMBER_TWO"/> zilizopita</translation>
 <translation id="4745438305783437565">dakika <ph name="NUMBER_FEW"/></translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> PB/s</translation>
 <translation id="2743387203779672305">Nakili kwenye ubao wa kunakili</translation>
 <translation id="8371695176452482769">Ongea sasa</translation>
+<translation id="1167268268675672572">Sogeza Hadi Mwanzo Wa Mstari Na Ubadilishe Uteuzi</translation>
 <translation id="6965382102122355670">Sawa</translation>
 <translation id="7850320739366109486">Usinisumbue</translation>
 <translation id="6978839998405419496">siku <ph name="NUMBER_ZERO"/> zilizopita</translation>
diff --git a/ui/base/strings/ui_strings_ta.xtb b/ui/base/strings/ui_strings_ta.xtb
index e216520..62b0f03 100644
--- a/ui/base/strings/ui_strings_ta.xtb
+++ b/ui/base/strings/ui_strings_ta.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> பை</translation>
 <translation id="3660179305079774227">மேல்நோக்கிய அம்பு</translation>
+<translation id="3969863827134279083">மேலே நகர்த்து</translation>
 <translation id="7062130397825382308"><ph name="NUMBER_ONE"/> வினாடி உள்ளது</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> மெ.பை/வி</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> மணி நேரம்</translation>
 <translation id="3990502903496589789">வலது விளிம்பு</translation>
 <translation id="9038489124413477075">பெயரிடப்படாதக் கோப்புறை</translation>
+<translation id="1940483897317142625">வரியின் இறுதிவரை நீக்கு</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/> நிமிடங்கள்</translation>
 <translation id="3520476450377425184">இன்னும் <ph name="NUMBER_MANY"/> நாட்கள் உள்ளன</translation>
 <translation id="932327136139879170">முகப்பு</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011"><ph name="NUMBER_FEW"/> days ago</translation>
 <translation id="5076340679995252485">&amp;ஒட்டு</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> டெ.பை</translation>
+<translation id="7139614227326422685">வார்த்தையின் வலதுபுறம் நகர்த்து</translation>
 <translation id="364720409959344976">பதிவேற்றுவதற்குக் கோப்புறையைத் தேர்ந்தெடு</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016"><ph name="NUMBER_TWO"/> mins ago</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">அறிவிப்பை மூடு</translation>
 <translation id="6364916375976753737">இடப்புறம் உருட்டு</translation>
 <translation id="2629089419211541119"><ph name="NUMBER_ONE"/> hour ago</translation>
+<translation id="4218160142017529598">பின்னோக்கி நீக்கு</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> நிமிடங்கள்</translation>
 <translation id="6982279413068714821"><ph name="NUMBER_DEFAULT"/> mins ago</translation>
 <translation id="6945221475159498467">தேர்ந்தெடு</translation>
 <translation id="6620110761915583480">கோப்பைச் சேமி</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> வினாடிகள்</translation>
+<translation id="8924469368910458384">வரியின் துவக்கம்வரை நீக்கு</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> hours</translation>
 <translation id="7836361698254323868"><ph name="NUMBER_ONE"/> நிமிடம் உள்ளது</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> நிமிடம்</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863"><ph name="NUMBER_MANY"/> நாட்கள்</translation>
 <translation id="7163503212501929773">இன்னும் <ph name="NUMBER_MANY"/> மணிநேரம் உள்ளது</translation>
 <translation id="5329858601952122676">&amp;நீக்கு</translation>
+<translation id="6556866813142980365">மீண்டும் செய்</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> நொடிகள்</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> கி.பை.</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> நிமிடங்கள்</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> நிமிடங்கள்</translation>
 <translation id="50960180632766478">இன்னும் <ph name="NUMBER_FEW"/> நிமிடங்கள் உள்ளன</translation>
 <translation id="5517291721709019259"><ph name="NUMBER_FEW"/> வினாடிகள் உள்ளன</translation>
+<translation id="6903282483217634857">வலதுபுறமாக நகர்த்து</translation>
 <translation id="6659594942844771486">Tab</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> மெ.பை</translation>
 <translation id="4988273303304146523"><ph name="NUMBER_DEFAULT"/> days ago</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/> நிமிடங்கள்</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> hours left</translation>
 <translation id="7135556860107312402">பின்வருபவற்றிலிருந்து வரும் அறிவிப்புகளை அனுமதி:</translation>
+<translation id="2479520428668657293">வலதுபுறமாக நகர்ந்து தேர்வை மாற்று</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/> மணி நேரம்</translation>
 <translation id="1398853756734560583">பெரிதாக்கு</translation>
 <translation id="4250229828105606438">ஸ்கிரீன் ஷாட்</translation>
 <translation id="6690744523875189208"><ph name="NUMBER_TWO"/> மணி நேரம்</translation>
 <translation id="5260878308685146029">இன்னும் <ph name="NUMBER_TWO"/> நிமிடங்கள் உள்ளன</translation>
+<translation id="2557207087669398617">வரியின் துவக்கத்திற்கு நகர்த்து</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> GB</translation>
 <translation id="1901303067676059328">அ&amp;னைத்தையும் தேர்ந்தெடு</translation>
 <translation id="2168039046890040389">பக்கத்தின் மேலே</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> mins</translation>
 <translation id="9107059250669762581"><ph name="NUMBER_DEFAULT"/> நாட்கள்</translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> நிமிடங்கள்</translation>
+<translation id="6122334925474904337">வார்த்தையின் வலதுபுறம் நகர்ந்து தேர்வை மாற்று</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> நிமிடம்</translation>
 <translation id="8448317557906454022"><ph name="NUMBER_ZERO"/> secs ago</translation>
 <translation id="4927753642311223124">பார்க்க இங்கு எதுவுமில்லை, தொடரவும்.</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> days</translation>
 <translation id="3183922693828471536">இங்கே உருட்டு</translation>
 <translation id="4552416320897244156">PgDwn</translation>
+<translation id="3066573403916685335">கீழே நகர்த்து</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/> மணிநேரம்</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> கி.பை./வி</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780">இன்னும் <ph name="NUMBER_ONE"/> மணிநேரம் உள்ளது</translation>
 <translation id="1413622004203049571"><ph name="NOTIFIER_NAME"/> இடமிருந்து வரும் அறிவிப்புகளை முடக்கு</translation>
 <translation id="2666092431469916601">மேலே</translation>
+<translation id="2538759511191347839">வரியின் இறுதிக்கு நகர்ந்து தேர்வை மாற்று</translation>
+<translation id="928465423150706909">வரியின் இறுதிக்கு நகர்த்து</translation>
 <translation id="8331626408530291785">மேலே உருட்டு</translation>
 <translation id="7907591526440419938">கோப்பைத் திற</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> days left</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">ஊடகத்தை நிறுத்து</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> mins left</translation>
 <translation id="3157931365184549694">மீட்டமை</translation>
+<translation id="5349525451964472598">இடதுபுறமாக நகர்ந்து தேர்வை மாற்று</translation>
+<translation id="1781701194097416995">வார்த்தையின் இடதுபுறம் நகர்த்து</translation>
 <translation id="1243314992276662751">பதிவேற்று</translation>
 <translation id="50030952220075532">இன்னும் <ph name="NUMBER_ONE"/> நாட்கள் உள்ளன</translation>
 <translation id="8179976553408161302">உள்ளிடு</translation>
+<translation id="8471049483003785219">வார்த்தையின் இடதுபுறம் நகர்ந்து தேர்வை மாற்று</translation>
 <translation id="945522503751344254">பின்னூட்டம் அனுப்புக</translation>
 <translation id="9170848237812810038">&amp;செயல்தவிர்</translation>
 <translation id="1285266685456062655"><ph name="NUMBER_FEW"/> hours ago</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> hours ago</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> ஜி.பை/வி</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/> நாள்</translation>
+<translation id="2704295676501803339">இடதுபுறமாக நகர்த்து</translation>
 <translation id="9098468523912235228"><ph name="NUMBER_DEFAULT"/> secs ago</translation>
 <translation id="494645311413743213"><ph name="NUMBER_TWO"/> வினாடிகள் உள்ளன</translation>
 <translation id="4570886800634958009">அறிவிப்பை விரிவாக்கு</translation>
+<translation id="566737009157135450">வார்த்தையைப் பின்னோக்கி நீக்கு</translation>
 <translation id="436869212180315161">அழுத்து</translation>
 <translation id="4860787810836767172"><ph name="NUMBER_FEW"/> secs ago</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> டெ.பை/வி</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497"><ph name="NUMBER_MANY"/> mins ago</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> பை/வி</translation>
 <translation id="7649070708921625228">உதவி</translation>
+<translation id="2405367043325750948">முன்புறமாக நீக்கு</translation>
 <translation id="6699343763173986273">ஊடகத்தின் அடுத்த டிராக்</translation>
 <translation id="5445120697129764393"><ph name="NUMBER_DEFAULT"/> வினாடிகள் உள்ளன</translation>
 <translation id="8226233771743600312">ஒரு நாள் தொந்தரவு செய்ய வேண்டாம்</translation>
+<translation id="4252565523989510616">வார்த்தையை முன்புறமாக நீக்கு</translation>
 <translation id="7457942297256758195">அனைத்தையும் அழி</translation>
 <translation id="822618367988303761"><ph name="NUMBER_TWO"/> days ago</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> நிமிடங்கள்</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> பெ.பை/வி</translation>
 <translation id="2743387203779672305">கிளிப்போர்டுக்கு நகலெடு</translation>
 <translation id="8371695176452482769">இப்போது பேசுக</translation>
+<translation id="1167268268675672572">வரியின் துவக்கத்திற்கு நகர்ந்து தேர்வை மாற்று</translation>
 <translation id="6965382102122355670">சரி</translation>
 <translation id="7850320739366109486">தொந்தரவு செய்ய வேண்டாம்</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> days ago</translation>
diff --git a/ui/base/strings/ui_strings_te.xtb b/ui/base/strings/ui_strings_te.xtb
index 30e4587..1717834 100644
--- a/ui/base/strings/ui_strings_te.xtb
+++ b/ui/base/strings/ui_strings_te.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> B</translation>
 <translation id="3660179305079774227">ఎగువ బాణం</translation>
+<translation id="3969863827134279083">పైకి తరలించండి</translation>
 <translation id="7062130397825382308"><ph name="NUMBER_ONE"/> సెకను మిగిలి ఉంది</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> MB/s</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> గంటలు</translation>
 <translation id="3990502903496589789">కుడి సరిహద్దు</translation>
 <translation id="9038489124413477075">పేరులేని ఫోల్డర్</translation>
+<translation id="1940483897317142625">పంక్తి చివరికి తొలగించండి</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/> నిమిషాలు</translation>
 <translation id="3520476450377425184"><ph name="NUMBER_MANY"/> రోజులు మిగిలి ఉన్నాయి</translation>
 <translation id="932327136139879170">హోమ్</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011"><ph name="NUMBER_FEW"/> days ago</translation>
 <translation id="5076340679995252485">&amp;అతికించు</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> TB</translation>
+<translation id="7139614227326422685">పదం కుడివైపుకి తరలించండి</translation>
 <translation id="364720409959344976">అప్‌లోడ్ చేయడానికి ఫోల్డర్‌ని ఎంచుకోండి</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016"><ph name="NUMBER_TWO"/> mins ago</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">నోటిఫికేషన్‌ను మూసివేయి</translation>
 <translation id="6364916375976753737">ఎడమకి స్క్రోల్ చేయి</translation>
 <translation id="2629089419211541119"><ph name="NUMBER_ONE"/> hour ago</translation>
+<translation id="4218160142017529598">వెనుకకు తొలగించండి</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> నిమిషాలు</translation>
 <translation id="6982279413068714821"><ph name="NUMBER_DEFAULT"/> mins ago</translation>
 <translation id="6945221475159498467">ఎంచుకోండి</translation>
 <translation id="6620110761915583480">ఫైల్‌ను సేవ్ చేయి</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> సెకన్లు</translation>
+<translation id="8924469368910458384">పంక్తి మొదటికి తొలగించండి</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> hours</translation>
 <translation id="7836361698254323868"><ph name="NUMBER_ONE"/> నిమిషం మిగిలి ఉంది</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> నిమిషం</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863"><ph name="NUMBER_MANY"/> రోజులు</translation>
 <translation id="7163503212501929773"><ph name="NUMBER_MANY"/> గంటలు మిగిలి ఉన్నాయి</translation>
 <translation id="5329858601952122676">&amp;తొలగించు</translation>
+<translation id="6556866813142980365">చర్య పునరావృతం</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> సెకన్లు</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> KB</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> నిమిషాలు</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> నిమిషాలు</translation>
 <translation id="50960180632766478"><ph name="NUMBER_FEW"/> నిమిషాలు మిగిలిలాయి</translation>
 <translation id="5517291721709019259"><ph name="NUMBER_FEW"/> సెకన్ల సమయం మిగిలి ఉంది</translation>
+<translation id="6903282483217634857">కుడివైపు తరలించండి</translation>
 <translation id="6659594942844771486">టాబ్</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> MB</translation>
 <translation id="4988273303304146523"><ph name="NUMBER_DEFAULT"/> days ago</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/> నిమిషాలు</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> hours left</translation>
 <translation id="7135556860107312402">వీటి నుండి నోటిఫికేషన్‌లను అనుమతించు:</translation>
+<translation id="2479520428668657293">కుడివైపు తరలించి, ఎంపికను సవరించండి</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/> గంటలు</translation>
 <translation id="1398853756734560583">గరిష్ఠీకరించు</translation>
 <translation id="4250229828105606438">స్క్రీన్‌షాట్</translation>
 <translation id="6690744523875189208"><ph name="NUMBER_TWO"/> గంటలు</translation>
 <translation id="5260878308685146029"><ph name="NUMBER_TWO"/> నిమిషాలు మిగిలాయి</translation>
+<translation id="2557207087669398617">పంక్తి మొదటికి తరలించండి</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> GB</translation>
 <translation id="1901303067676059328">&amp;అన్నీ ఎంచుకోండి</translation>
 <translation id="2168039046890040389">పేజీ పైకి</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> mins</translation>
 <translation id="9107059250669762581"><ph name="NUMBER_DEFAULT"/> రోజులు</translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> నిమిషాలు</translation>
+<translation id="6122334925474904337">పదం కుడివైపుకి తరలించి, ఎంపికను సవరించండి</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> నిమిషం</translation>
 <translation id="8448317557906454022"><ph name="NUMBER_ZERO"/> secs ago</translation>
 <translation id="4927753642311223124">ఇక్కడ చూడటానికి ఏమీ లేదు, కొనసాగండి.</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> days</translation>
 <translation id="3183922693828471536">ఇక్కడ స్క్రోల్ చెయ్యండి</translation>
 <translation id="4552416320897244156">PgDwn</translation>
+<translation id="3066573403916685335">క్రిందికి తరలించండి</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/> గంటలు</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> KB/సె</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780"><ph name="NUMBER_ONE"/> గంటలు మిగిలా యి</translation>
 <translation id="1413622004203049571"><ph name="NOTIFIER_NAME"/> నుండి వచ్చే నోటిఫికేషన్‌లను నిలిపివేయి</translation>
 <translation id="2666092431469916601">పైన</translation>
+<translation id="2538759511191347839">పంక్తి చివరికి తరలించి, ఎంపికను సవరించండి</translation>
+<translation id="928465423150706909">పంక్తి చివరికి తరలించండి</translation>
 <translation id="8331626408530291785">పైకి స్క్రోల్ చెయ్యి</translation>
 <translation id="7907591526440419938">ఫైల్‌ను తెరువు</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> days left</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">మీడియా ఆపివేయి</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> mins left</translation>
 <translation id="3157931365184549694">పునరుద్ధరించు</translation>
+<translation id="5349525451964472598">ఎడమవైపు తరలించి, ఎంపికను సవరించండి</translation>
+<translation id="1781701194097416995">పదం ఎడమవైపుకి తరలించండి</translation>
 <translation id="1243314992276662751">అప్‌లోడ్ చేయి</translation>
 <translation id="50030952220075532"><ph name="NUMBER_ONE"/> రోజులు మిగిలి ఉన్నాయి</translation>
 <translation id="8179976553408161302">నమోదు చేయండి</translation>
+<translation id="8471049483003785219">పదం ఎడమవైపుకు తరలించి, ఎంపికను సవరించండి</translation>
 <translation id="945522503751344254">అభిప్రాయాన్ని పంపండి</translation>
 <translation id="9170848237812810038">&amp;అన్డు</translation>
 <translation id="1285266685456062655"><ph name="NUMBER_FEW"/> hours ago</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> hours ago</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> GB/s</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/> రోజు</translation>
+<translation id="2704295676501803339">ఎడమవైపుకు తరలించండి</translation>
 <translation id="9098468523912235228"><ph name="NUMBER_DEFAULT"/> secs ago</translation>
 <translation id="494645311413743213"><ph name="NUMBER_TWO"/> సెకన్లు మిగిలి ఉన్నాయి</translation>
 <translation id="4570886800634958009">నోటిఫికేషన్‌ను విస్తరించు</translation>
+<translation id="566737009157135450">పదం నుండి వెనుకవైపుకు తొలగించండి</translation>
 <translation id="436869212180315161">నొక్కు</translation>
 <translation id="4860787810836767172"><ph name="NUMBER_FEW"/> secs ago</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> TB/s</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497"><ph name="NUMBER_MANY"/> mins ago</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> B/s</translation>
 <translation id="7649070708921625228">సహాయం</translation>
+<translation id="2405367043325750948">ముందుకు తొలగించండి</translation>
 <translation id="6699343763173986273">మీడియా తదుపరి ట్రాక్</translation>
 <translation id="5445120697129764393"><ph name="NUMBER_DEFAULT"/> సెకన్ల సమయం మిగిలి ఉంది</translation>
 <translation id="8226233771743600312">ఒక రోజుపాటు అంతరాయం కలిగించవద్దు</translation>
+<translation id="4252565523989510616">పదం నుండి ముందువైపుకు తొలగించండి</translation>
 <translation id="7457942297256758195">అన్నీ క్లియర్ చేయి</translation>
 <translation id="822618367988303761"><ph name="NUMBER_TWO"/> days ago</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> నిమిషాలు</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> PB/s</translation>
 <translation id="2743387203779672305">క్లిప్‌బోర్డ్‌కు కాపీ చేయి</translation>
 <translation id="8371695176452482769">ఇప్పుడు మాట్లాడండి</translation>
+<translation id="1167268268675672572">పంక్తి మొదటికి తరలించి, ఎంపికను సవరించండి</translation>
 <translation id="6965382102122355670">సరే</translation>
 <translation id="7850320739366109486">అంతరాయం కలిగించవద్దు</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> days ago</translation>
diff --git a/ui/base/strings/ui_strings_th.xtb b/ui/base/strings/ui_strings_th.xtb
index a3fb419..65bad62 100644
--- a/ui/base/strings/ui_strings_th.xtb
+++ b/ui/base/strings/ui_strings_th.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> B</translation>
 <translation id="3660179305079774227">ลูกศรขึ้น</translation>
+<translation id="3969863827134279083">เลื่อนขึ้น</translation>
 <translation id="7062130397825382308">เหลือ <ph name="NUMBER_ONE"/> วินาที</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> MB/วินาที</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> ชั่วโมง</translation>
 <translation id="3990502903496589789">ขอบขวา</translation>
 <translation id="9038489124413477075">โฟลเดอร์ที่ไม่มีชื่อ</translation>
+<translation id="1940483897317142625">ลบจนถึงท้ายบรรทัด</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/> นาที</translation>
 <translation id="3520476450377425184">เหลือ <ph name="NUMBER_MANY"/> วัน</translation>
 <translation id="932327136139879170">Home</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011"><ph name="NUMBER_FEW"/> วันที่ผ่านมา</translation>
 <translation id="5076340679995252485">&amp;วาง</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> TB</translation>
+<translation id="7139614227326422685">ย้ายคำมาทางขวา</translation>
 <translation id="364720409959344976">เลือกโฟลเดอร์เพื่ออัปโหลด</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016"><ph name="NUMBER_TWO"/> นาทีที่ผ่านมา</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">ปิดการแจ้งเตือน</translation>
 <translation id="6364916375976753737">เลื่อนทางซ้าย</translation>
 <translation id="2629089419211541119"><ph name="NUMBER_ONE"/> ชั่วโมงที่ผ่านมา</translation>
+<translation id="4218160142017529598">ลบย้อนหลัง</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> นาที</translation>
 <translation id="6982279413068714821"><ph name="NUMBER_DEFAULT"/> นาทีที่ผ่านมา</translation>
 <translation id="6945221475159498467">เลือก</translation>
 <translation id="6620110761915583480">บันทึกไฟล์</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> seconds</translation>
+<translation id="8924469368910458384">ลบจนถึงจุดเริ่มต้นบรรทัด</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> hours</translation>
 <translation id="7836361698254323868">เหลือ <ph name="NUMBER_ONE"/> นาที</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> นาที</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863"><ph name="NUMBER_MANY"/> วัน</translation>
 <translation id="7163503212501929773">เหลือ <ph name="NUMBER_MANY"/> ชั่วโมง</translation>
 <translation id="5329858601952122676">&amp;ลบ</translation>
+<translation id="6556866813142980365">ทำซ้ำ</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> วินาที</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> KB</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> minutes</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> minutes</translation>
 <translation id="50960180632766478">เหลือ <ph name="NUMBER_FEW"/> นาที</translation>
 <translation id="5517291721709019259"><ph name="NUMBER_FEW"/> seconds left</translation>
+<translation id="6903282483217634857">ย้ายไปทางขวา</translation>
 <translation id="6659594942844771486">แท็บ</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> MB</translation>
 <translation id="4988273303304146523"><ph name="NUMBER_DEFAULT"/> วันที่ผ่านมา</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/> นาที</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> hours left</translation>
 <translation id="7135556860107312402">อนุญาตให้มีการแจ้งเตือนจากรายการต่อไปนี้</translation>
+<translation id="2479520428668657293">ย้ายไปทางขวาและปรับการเลือก</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/> ชั่วโมง</translation>
 <translation id="1398853756734560583">ย่อ</translation>
 <translation id="4250229828105606438">ภาพหน้าจอ</translation>
 <translation id="6690744523875189208"><ph name="NUMBER_TWO"/> ชั่วโมง</translation>
 <translation id="5260878308685146029">เหลือ <ph name="NUMBER_TWO"/> นาที</translation>
+<translation id="2557207087669398617">ย้ายไปจุดเริ่มต้นบรรทัด</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> GB</translation>
 <translation id="1901303067676059328">เลือก&amp;ทั้งหมด</translation>
 <translation id="2168039046890040389">เลื่อนหน้าขึ้น</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> mins</translation>
 <translation id="9107059250669762581"><ph name="NUMBER_DEFAULT"/> วัน</translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> นาที</translation>
+<translation id="6122334925474904337">ย้ายคำไปทางขวาและปรับการเลือก</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> นาที</translation>
 <translation id="8448317557906454022"><ph name="NUMBER_ZERO"/> วินาทีที่ผ่านมา</translation>
 <translation id="4927753642311223124">ที่นี่ไม่มีอะไรต้องดู ไปต่อได้</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> days</translation>
 <translation id="3183922693828471536">เลื่อนมาที่นี่</translation>
 <translation id="4552416320897244156">PgDwn</translation>
+<translation id="3066573403916685335">เลื่อนลง</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/> ชั่วโมง</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> KB/วินาที</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780">เหลือ <ph name="NUMBER_ONE"/> ชั่วโมง</translation>
 <translation id="1413622004203049571">ปิดการแจ้งเตือนจาก <ph name="NOTIFIER_NAME"/></translation>
 <translation id="2666092431469916601">ด้านบน</translation>
+<translation id="2538759511191347839">ย้ายไปท้ายบรรทัดและปรับการเลือก</translation>
+<translation id="928465423150706909">ย้ายไปท้ายบรรทัด</translation>
 <translation id="8331626408530291785">เลื่อนขึ้น</translation>
 <translation id="7907591526440419938">เปิดไฟล์</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> days left</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">หยุดสื่อ</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> mins left</translation>
 <translation id="3157931365184549694">คืนค่า</translation>
+<translation id="5349525451964472598">ย้ายไปทางซ้ายและปรับการเลือก</translation>
+<translation id="1781701194097416995">ย้ายคำไปทางซ้าย</translation>
 <translation id="1243314992276662751">อัปโหลด</translation>
 <translation id="50030952220075532">เหลือ <ph name="NUMBER_ONE"/> วัน</translation>
 <translation id="8179976553408161302">เข้าใช้</translation>
+<translation id="8471049483003785219">ย้ายคำไปทางซ้ายและปรับการเลือก</translation>
 <translation id="945522503751344254">ส่งความคิดเห็น</translation>
 <translation id="9170848237812810038">เ&amp;ลิกทำ</translation>
 <translation id="1285266685456062655"><ph name="NUMBER_FEW"/> ชั่วโมงที่ผ่านมา</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> hours ago</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> GB/วินาที</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/> วัน</translation>
+<translation id="2704295676501803339">ย้ายไปทางซ้าย</translation>
 <translation id="9098468523912235228"><ph name="NUMBER_DEFAULT"/> วินาทีที่ผ่านมา</translation>
 <translation id="494645311413743213">เหลือ <ph name="NUMBER_TWO"/> วินาที</translation>
 <translation id="4570886800634958009">ขยายการแจ้งเตือน</translation>
+<translation id="566737009157135450">ลบคำย้อนหลัง</translation>
 <translation id="436869212180315161">กด</translation>
 <translation id="4860787810836767172"><ph name="NUMBER_FEW"/> วินาทีที่ผ่านมา</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> TB/วินาที</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497"><ph name="NUMBER_MANY"/> นาทีที่ผ่านมา</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> B/วินาที</translation>
 <translation id="7649070708921625228">ช่วยเหลือ</translation>
+<translation id="2405367043325750948">ลบไปข้างหน้า</translation>
 <translation id="6699343763173986273">แทร็กถัดไปของสื่อ</translation>
 <translation id="5445120697129764393">เหลือ <ph name="NUMBER_DEFAULT"/> วินาที</translation>
 <translation id="8226233771743600312">ห้ามรบกวนเป็นเวลาหนึ่งวัน</translation>
+<translation id="4252565523989510616">ลบคำไปข้างหน้า</translation>
 <translation id="7457942297256758195">ล้างทั้งหมด</translation>
 <translation id="822618367988303761"><ph name="NUMBER_TWO"/> วันที่ผ่านมา</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> นาที</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> PB/วินาที</translation>
 <translation id="2743387203779672305">คัดลอกไว้ที่คลิปบอร์ด</translation>
 <translation id="8371695176452482769">เชิญพูดเลย</translation>
+<translation id="1167268268675672572">ย้ายไปจุดเริ่มต้นของบรรทัดและปรับการเลือก</translation>
 <translation id="6965382102122355670">ตกลง</translation>
 <translation id="7850320739366109486">ห้ามรบกวน</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> days ago</translation>
diff --git a/ui/base/strings/ui_strings_tr.xtb b/ui/base/strings/ui_strings_tr.xtb
index 7b66855..eb884a8 100644
--- a/ui/base/strings/ui_strings_tr.xtb
+++ b/ui/base/strings/ui_strings_tr.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> B</translation>
 <translation id="3660179305079774227">Yukarı Ok</translation>
+<translation id="3969863827134279083">Yukarı Git</translation>
 <translation id="7062130397825382308"><ph name="NUMBER_ONE"/> second left</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> MB/sn</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> saat</translation>
 <translation id="3990502903496589789">Sağ Kenar</translation>
 <translation id="9038489124413477075">Adsız Klasör</translation>
+<translation id="1940483897317142625">Satırın Sonuna Kadar Sil</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/> dakika</translation>
 <translation id="3520476450377425184"><ph name="NUMBER_MANY"/> gün kaldı</translation>
 <translation id="932327136139879170">Ana Sayfa</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011"><ph name="NUMBER_FEW"/> gün önce</translation>
 <translation id="5076340679995252485">&amp;Yapıştır</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> TB</translation>
+<translation id="7139614227326422685">Bir Kelime Sağa Git</translation>
 <translation id="364720409959344976">Yüklenecek Klasörü Seçin</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016"><ph name="NUMBER_TWO"/> dakika önce</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">Bildirimi kapat</translation>
 <translation id="6364916375976753737">Sola Kaydır</translation>
 <translation id="2629089419211541119"><ph name="NUMBER_ONE"/> saat önce</translation>
+<translation id="4218160142017529598">Geriye Doğru Sil</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> dakika</translation>
 <translation id="6982279413068714821"><ph name="NUMBER_DEFAULT"/> dakika önce</translation>
 <translation id="6945221475159498467">Seç</translation>
 <translation id="6620110761915583480">Dosyayı Kaydet</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> seconds</translation>
+<translation id="8924469368910458384">Satırın Başına Kadar Sil</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> hours</translation>
 <translation id="7836361698254323868"><ph name="NUMBER_ONE"/> dakika kaldı</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> dakika</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863"><ph name="NUMBER_MANY"/> gün</translation>
 <translation id="7163503212501929773"><ph name="NUMBER_MANY"/> saat kaldı</translation>
 <translation id="5329858601952122676">&amp;Sil</translation>
+<translation id="6556866813142980365">Yeniden Yap</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> saniye</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> KB</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> minutes</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> minutes</translation>
 <translation id="50960180632766478"><ph name="NUMBER_FEW"/> dakika kaldı</translation>
 <translation id="5517291721709019259"><ph name="NUMBER_FEW"/> seconds left</translation>
+<translation id="6903282483217634857">Sağa Git</translation>
 <translation id="6659594942844771486">Sekme</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> MB</translation>
 <translation id="4988273303304146523"><ph name="NUMBER_DEFAULT"/> gün önce</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/> dakika</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> hours left</translation>
 <translation id="7135556860107312402">Şunlardan gelen bildirimlere izin ver:</translation>
+<translation id="2479520428668657293">Sağa Git ve Seçimi Değiştir</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/> saat</translation>
 <translation id="1398853756734560583">Büyüt</translation>
 <translation id="4250229828105606438">Ekran görüntüsü</translation>
 <translation id="6690744523875189208"><ph name="NUMBER_TWO"/> saat</translation>
 <translation id="5260878308685146029"><ph name="NUMBER_TWO"/> dakika kaldı</translation>
+<translation id="2557207087669398617">Satırın Başına Git</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> GB</translation>
 <translation id="1901303067676059328">Tümünü &amp;seç</translation>
 <translation id="2168039046890040389">Page Up</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> mins</translation>
 <translation id="9107059250669762581"><ph name="NUMBER_DEFAULT"/> gün</translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> dakika</translation>
+<translation id="6122334925474904337">Bir Kelime Sağa Git ve Seçimi Değiştir</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> minute</translation>
 <translation id="8448317557906454022"><ph name="NUMBER_ZERO"/> saniye önce</translation>
 <translation id="4927753642311223124">Burada görülecek bir şey yok, devam edin.</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> days</translation>
 <translation id="3183922693828471536">Buraya Kaydır</translation>
 <translation id="4552416320897244156">PgDwn</translation>
+<translation id="3066573403916685335">Aşağı Git</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/> saat</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> KB/sn</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780"><ph name="NUMBER_ONE"/> saat kaldı</translation>
 <translation id="1413622004203049571"><ph name="NOTIFIER_NAME"/> bildirimlerini devre dışı bırak</translation>
 <translation id="2666092431469916601">Üst</translation>
+<translation id="2538759511191347839">Satırın Sonuna Git ve Seçimi Değiştir</translation>
+<translation id="928465423150706909">Satırın Sonuna Git</translation>
 <translation id="8331626408530291785">Yukarı Kaydır</translation>
 <translation id="7907591526440419938">Dosya Aç</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> days left</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">Medyayı Durdur</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> mins left</translation>
 <translation id="3157931365184549694">Geri yükle</translation>
+<translation id="5349525451964472598">Sola Git ve Seçimi Değiştir</translation>
+<translation id="1781701194097416995">Bir Kelime Sola Git</translation>
 <translation id="1243314992276662751">Yükle</translation>
 <translation id="50030952220075532"><ph name="NUMBER_ONE"/> gün kaldı</translation>
 <translation id="8179976553408161302">Giriş</translation>
+<translation id="8471049483003785219">Bir Kelime Sola Git ve Seçimi Değiştir</translation>
 <translation id="945522503751344254">Geri bildirim gönder</translation>
 <translation id="9170848237812810038">&amp;Geri al</translation>
 <translation id="1285266685456062655"><ph name="NUMBER_FEW"/> saat önce</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> hours ago</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> GB/sn</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/> gün</translation>
+<translation id="2704295676501803339">Sola Git</translation>
 <translation id="9098468523912235228"><ph name="NUMBER_DEFAULT"/> saniye önce</translation>
 <translation id="494645311413743213"><ph name="NUMBER_TWO"/> saniye kaldı</translation>
 <translation id="4570886800634958009">Bildirimi genişlet</translation>
+<translation id="566737009157135450">Geriye Doğru Bir Kelime Sil</translation>
 <translation id="436869212180315161">Basın</translation>
 <translation id="4860787810836767172"><ph name="NUMBER_FEW"/> saniye önce</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> TB/sn</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497"><ph name="NUMBER_MANY"/> dakika önce</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> B/sn</translation>
 <translation id="7649070708921625228">Yardım</translation>
+<translation id="2405367043325750948">İleriye Doğru Sil</translation>
 <translation id="6699343763173986273">Medya Sonraki Parça</translation>
 <translation id="5445120697129764393"><ph name="NUMBER_DEFAULT"/> saniye kaldı</translation>
 <translation id="8226233771743600312">Bir gün süreyle rahatsız etmeyin</translation>
+<translation id="4252565523989510616">İleriye Doğru Bir Kelime Sil</translation>
 <translation id="7457942297256758195">Tümünü Temizle</translation>
 <translation id="822618367988303761"><ph name="NUMBER_TWO"/> gün önce</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> dakika</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> PB/sn</translation>
 <translation id="2743387203779672305">Panoya kopyala</translation>
 <translation id="8371695176452482769">Şimdi konuşun</translation>
+<translation id="1167268268675672572">Satırın Başına Git ve Seçimi Değiştir</translation>
 <translation id="6965382102122355670">Tamam</translation>
 <translation id="7850320739366109486">Rahatsız Etmeyin</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> days ago</translation>
diff --git a/ui/base/strings/ui_strings_uk.xtb b/ui/base/strings/ui_strings_uk.xtb
index fbe079f..beede81 100644
--- a/ui/base/strings/ui_strings_uk.xtb
+++ b/ui/base/strings/ui_strings_uk.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> б</translation>
 <translation id="3660179305079774227">Курсор угору</translation>
+<translation id="3969863827134279083">Перемістити курсор угору</translation>
 <translation id="7062130397825382308">Залишилася <ph name="NUMBER_ONE"/> секунда</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> Мб/сек.</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> годин</translation>
 <translation id="3990502903496589789">Правий край</translation>
 <translation id="9038489124413477075">Папка без назви</translation>
+<translation id="1940483897317142625">Видалити символи до кінця рядка</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/> хв.</translation>
 <translation id="3520476450377425184"><ph name="NUMBER_MANY"/> days left</translation>
 <translation id="932327136139879170">Home</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011"><ph name="NUMBER_FEW"/> дн. тому</translation>
 <translation id="5076340679995252485">&amp;Вставити</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> Тб</translation>
+<translation id="7139614227326422685">Перемістити курсор на одне слово праворуч</translation>
 <translation id="364720409959344976">Виберіть папку для завантаження</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016"><ph name="NUMBER_TWO"/> mins ago</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">Закрити сповіщення</translation>
 <translation id="6364916375976753737">Прокрутка вліво</translation>
 <translation id="2629089419211541119"><ph name="NUMBER_ONE"/> год. тому</translation>
+<translation id="4218160142017529598">Видалити символи перед курсором</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> хв</translation>
 <translation id="6982279413068714821"><ph name="NUMBER_DEFAULT"/> хв. тому</translation>
 <translation id="6945221475159498467">Вибрати</translation>
 <translation id="6620110761915583480">Зберегти файл</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> seconds</translation>
+<translation id="8924469368910458384">Видалити символи до початку рядка</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> hours</translation>
 <translation id="7836361698254323868">Залишилася <ph name="NUMBER_ONE"/> хвилина</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> хв.</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863"><ph name="NUMBER_MANY"/> days</translation>
 <translation id="7163503212501929773"><ph name="NUMBER_MANY"/> hours left</translation>
 <translation id="5329858601952122676">&amp;Видалити</translation>
+<translation id="6556866813142980365">Повторити</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> secs</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> Кб</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> minutes</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> minutes</translation>
 <translation id="50960180632766478"><ph name="NUMBER_FEW"/> хв. залишилось</translation>
 <translation id="5517291721709019259">Залишилося <ph name="NUMBER_FEW"/> секунди</translation>
+<translation id="6903282483217634857">Перемістити курсор праворуч</translation>
 <translation id="6659594942844771486">Вкладка</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> Мб</translation>
 <translation id="4988273303304146523"><ph name="NUMBER_DEFAULT"/> дн. тому</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/> mins</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> hours left</translation>
 <translation id="7135556860107312402">Дозволити сповіщення з перелічених нижче джерел.</translation>
+<translation id="2479520428668657293">Перемістити курсор праворуч і змінити виділений фрагмент</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/> годин</translation>
 <translation id="1398853756734560583">Збільшити</translation>
 <translation id="4250229828105606438">Знімок екрана</translation>
 <translation id="6690744523875189208"><ph name="NUMBER_TWO"/> hours</translation>
 <translation id="5260878308685146029"><ph name="NUMBER_TWO"/> mins left</translation>
+<translation id="2557207087669398617">Перемістити курсор на початок рядка</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> Гб</translation>
 <translation id="1901303067676059328">Вибрати &amp;всі</translation>
 <translation id="2168039046890040389">Сторінка вгору</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> mins</translation>
 <translation id="9107059250669762581"><ph name="NUMBER_DEFAULT"/> днів</translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> mins</translation>
+<translation id="6122334925474904337">Перемістити курсор на одне слово праворуч і змінити виділений фрагмент</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> хвилина</translation>
 <translation id="8448317557906454022"><ph name="NUMBER_ZERO"/> secs ago</translation>
 <translation id="4927753642311223124">Сповіщень немає.</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> days</translation>
 <translation id="3183922693828471536">Прокрутка до цього місця</translation>
 <translation id="4552416320897244156">PgDwn</translation>
+<translation id="3066573403916685335">Перемістити курсор униз</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/> годин</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> Кб/сек.</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780"><ph name="NUMBER_ONE"/> година залишилась</translation>
 <translation id="1413622004203049571">Вимкнути сповіщення від <ph name="NOTIFIER_NAME"/></translation>
 <translation id="2666092431469916601">Верх</translation>
+<translation id="2538759511191347839">Перемістити курсор у кінець рядка та змінити виділений фрагмент</translation>
+<translation id="928465423150706909">Перемістити курсор у кінець рядка</translation>
 <translation id="8331626408530291785">Прокрутка вгору</translation>
 <translation id="7907591526440419938">Відкрити файл</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> days left</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">Зупинити</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> mins left</translation>
 <translation id="3157931365184549694">Відновити</translation>
+<translation id="5349525451964472598">Перемістити курсор ліворуч і змінити виділений фрагмент</translation>
+<translation id="1781701194097416995">Перемістити курсор на одне слово ліворуч</translation>
 <translation id="1243314992276662751">Завантажити</translation>
 <translation id="50030952220075532"><ph name="NUMBER_ONE"/> день залишився</translation>
 <translation id="8179976553408161302">Увійти</translation>
+<translation id="8471049483003785219">Перемістити курсор на одне слово ліворуч і змінити виділений фрагмент</translation>
 <translation id="945522503751344254">Надіслати відгук</translation>
 <translation id="9170848237812810038">&amp;Скасувати</translation>
 <translation id="1285266685456062655"><ph name="NUMBER_FEW"/> год. тому</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> hours ago</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> Гб/сек.</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/> день</translation>
+<translation id="2704295676501803339">Перемістити курсор ліворуч</translation>
 <translation id="9098468523912235228"><ph name="NUMBER_DEFAULT"/> сек. тому</translation>
 <translation id="494645311413743213"><ph name="NUMBER_TWO"/> secs left</translation>
 <translation id="4570886800634958009">Розгорнути сповіщення</translation>
+<translation id="566737009157135450">Видалити слово перед курсором</translation>
 <translation id="436869212180315161">Натиснути</translation>
 <translation id="4860787810836767172"><ph name="NUMBER_FEW"/> сек. тому</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> Тб/сек.</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497"><ph name="NUMBER_MANY"/> mins ago</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> б/сек.</translation>
 <translation id="7649070708921625228">Довідка</translation>
+<translation id="2405367043325750948">Видалити символи після курсора</translation>
 <translation id="6699343763173986273">Наступна композиція</translation>
 <translation id="5445120697129764393">Залишилося <ph name="NUMBER_DEFAULT"/> секунд</translation>
 <translation id="8226233771743600312">Не турбувати впродовж одного дня</translation>
+<translation id="4252565523989510616">Видалити слово після курсора</translation>
 <translation id="7457942297256758195">Очистити все</translation>
 <translation id="822618367988303761"><ph name="NUMBER_TWO"/> days ago</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> хв.</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> Пб/сек.</translation>
 <translation id="2743387203779672305">Копіювати в буфер</translation>
 <translation id="8371695176452482769">Диктуйте</translation>
+<translation id="1167268268675672572">Перемістити курсор на початок рядка та змінити виділений фрагмент</translation>
 <translation id="6965382102122355670">ОК</translation>
 <translation id="7850320739366109486">Не турбувати</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> days ago</translation>
diff --git a/ui/base/strings/ui_strings_vi.xtb b/ui/base/strings/ui_strings_vi.xtb
index 37c4af4..18071af 100644
--- a/ui/base/strings/ui_strings_vi.xtb
+++ b/ui/base/strings/ui_strings_vi.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> B</translation>
 <translation id="3660179305079774227">Phím mũi tên Lên</translation>
+<translation id="3969863827134279083">Di chuyển lên</translation>
 <translation id="7062130397825382308">Còn <ph name="NUMBER_ONE"/> giây</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> MB/giây</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> giờ</translation>
 <translation id="3990502903496589789">Cạnh bên Phải</translation>
 <translation id="9038489124413477075">Thư mục không có tên</translation>
+<translation id="1940483897317142625">Xóa đến cuối dòng</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/> phút</translation>
 <translation id="3520476450377425184"><ph name="NUMBER_MANY"/> ngày còn lại</translation>
 <translation id="932327136139879170">Trang chủ</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011"><ph name="NUMBER_FEW"/> days ago</translation>
 <translation id="5076340679995252485">&amp;Dán</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> TB</translation>
+<translation id="7139614227326422685">Di chuyển sang bên phải từ</translation>
 <translation id="364720409959344976">Chọn thư mục để tải lên</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016"><ph name="NUMBER_TWO"/> mins ago</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">Đóng thông báo</translation>
 <translation id="6364916375976753737">Cuộn qua Trái</translation>
 <translation id="2629089419211541119"><ph name="NUMBER_ONE"/> hour ago</translation>
+<translation id="4218160142017529598">Xóa lùi</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> phút</translation>
 <translation id="6982279413068714821"><ph name="NUMBER_DEFAULT"/> phút trước</translation>
 <translation id="6945221475159498467">Chọn</translation>
 <translation id="6620110761915583480">Lưu Tệp</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> giây</translation>
+<translation id="8924469368910458384">Xóa đến đầu dòng</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> hours</translation>
 <translation id="7836361698254323868">Còn lại <ph name="NUMBER_ONE"/> phút</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> phút</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863"><ph name="NUMBER_MANY"/> ngày</translation>
 <translation id="7163503212501929773"><ph name="NUMBER_MANY"/> giờ còn lại</translation>
 <translation id="5329858601952122676">&amp;Xoá</translation>
+<translation id="6556866813142980365">Làm lại</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> giây</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> KB</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> phút</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> phút</translation>
 <translation id="50960180632766478"><ph name="NUMBER_FEW"/> phút còn lại</translation>
 <translation id="5517291721709019259">Còn <ph name="NUMBER_FEW"/> giây</translation>
+<translation id="6903282483217634857">Di chuyển sang phải</translation>
 <translation id="6659594942844771486">Tab</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> MB</translation>
 <translation id="4988273303304146523"><ph name="NUMBER_DEFAULT"/> ngày trước</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/> phút</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> hours left</translation>
 <translation id="7135556860107312402">Cho phép thông báo từ:</translation>
+<translation id="2479520428668657293">Di chuyển sang phải và sửa đổi lựa chọn</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/> giờ</translation>
 <translation id="1398853756734560583">Phóng to</translation>
 <translation id="4250229828105606438">Ảnh chụp màn hình</translation>
 <translation id="6690744523875189208"><ph name="NUMBER_TWO"/> giờ</translation>
 <translation id="5260878308685146029"><ph name="NUMBER_TWO"/> phút còn lại</translation>
+<translation id="2557207087669398617">Di chuyển tới đầu dòng</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> GB</translation>
 <translation id="1901303067676059328">Chọn &amp;tất cả</translation>
 <translation id="2168039046890040389">Page Up</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> mins</translation>
 <translation id="9107059250669762581"><ph name="NUMBER_DEFAULT"/> ngày</translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> phút</translation>
+<translation id="6122334925474904337">Di chuyển sang bên phải từ và sửa đổi lựa chọn</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> phút</translation>
 <translation id="8448317557906454022"><ph name="NUMBER_ZERO"/> secs ago</translation>
 <translation id="4927753642311223124">Không có nội dung nào để xem ở đây, hãy tiếp tục.</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> days</translation>
 <translation id="3183922693828471536">Cuộn tới Đây</translation>
 <translation id="4552416320897244156">Trang Dưới</translation>
+<translation id="3066573403916685335">Di chuyển xuống</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/> giờ</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> KB/s</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780"><ph name="NUMBER_ONE"/> giờ còn lại</translation>
 <translation id="1413622004203049571">Tắt thông báo từ <ph name="NOTIFIER_NAME"/></translation>
 <translation id="2666092431469916601">Hàng đầu</translation>
+<translation id="2538759511191347839">Di chuyển đến cuối dòng và sửa đổi lựa chọn</translation>
+<translation id="928465423150706909">Di chuyển đến cuối dòng</translation>
 <translation id="8331626408530291785">Cuộn Lên</translation>
 <translation id="7907591526440419938">Mở Tệp</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> days left</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">Dừng trình phát phương tiện</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> mins left</translation>
 <translation id="3157931365184549694">Khôi phục</translation>
+<translation id="5349525451964472598">Di chuyển sang trái và sửa đổi lựa chọn</translation>
+<translation id="1781701194097416995">Di chuyển sang bên trái từ</translation>
 <translation id="1243314992276662751">Tải lên</translation>
 <translation id="50030952220075532"><ph name="NUMBER_ONE"/> ngày còn lại</translation>
 <translation id="8179976553408161302">Vào</translation>
+<translation id="8471049483003785219">Di chuyển sang bên trái từ và sửa đổi lựa chọn</translation>
 <translation id="945522503751344254">Gửi phản hồi</translation>
 <translation id="9170848237812810038">H&amp;oàn tác</translation>
 <translation id="1285266685456062655"><ph name="NUMBER_FEW"/> hours ago</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> hours ago</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> GB/giây</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/> ngày</translation>
+<translation id="2704295676501803339">Di chuyển sang trái</translation>
 <translation id="9098468523912235228"><ph name="NUMBER_DEFAULT"/> giây trước</translation>
 <translation id="494645311413743213"><ph name="NUMBER_TWO"/> giây còn lại</translation>
 <translation id="4570886800634958009">Mở rộng thông báo</translation>
+<translation id="566737009157135450">Xóa lùi từ</translation>
 <translation id="436869212180315161">Nhấp vào</translation>
 <translation id="4860787810836767172"><ph name="NUMBER_FEW"/> secs ago</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> TB/giây</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497"><ph name="NUMBER_MANY"/> mins ago</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> B/giây</translation>
 <translation id="7649070708921625228">Trợ giúp</translation>
+<translation id="2405367043325750948">Xóa tiến</translation>
 <translation id="6699343763173986273">Bản nhạc tiếp theo của trình phát phương tiện</translation>
 <translation id="5445120697129764393">Còn <ph name="NUMBER_DEFAULT"/> giây</translation>
 <translation id="8226233771743600312">Không làm phiền trong một ngày</translation>
+<translation id="4252565523989510616">Xóa tiến từ</translation>
 <translation id="7457942297256758195">Xóa tất cả</translation>
 <translation id="822618367988303761"><ph name="NUMBER_TWO"/> days ago</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> phút</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> PB/giây</translation>
 <translation id="2743387203779672305">Sao chép vào khay nhớ tạm</translation>
 <translation id="8371695176452482769">Nói ngay bây giờ</translation>
+<translation id="1167268268675672572">Di chuyển tới đầu dòng và sửa đổi lựa chọn</translation>
 <translation id="6965382102122355670">OK</translation>
 <translation id="7850320739366109486">Không làm phiền</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> days ago</translation>
diff --git a/ui/base/strings/ui_strings_zh-CN.xtb b/ui/base/strings/ui_strings_zh-CN.xtb
index 88ba74d..0020688 100644
--- a/ui/base/strings/ui_strings_zh-CN.xtb
+++ b/ui/base/strings/ui_strings_zh-CN.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> B</translation>
 <translation id="3660179305079774227">向上箭头</translation>
+<translation id="3969863827134279083">上移</translation>
 <translation id="7062130397825382308">还剩<ph name="NUMBER_ONE"/>秒</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> MB/s</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> 小时</translation>
 <translation id="3990502903496589789">右边缘</translation>
 <translation id="9038489124413477075">未命名的文件夹</translation>
+<translation id="1940483897317142625">删除至行末</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/> 分钟</translation>
 <translation id="3520476450377425184"><ph name="NUMBER_MANY"/> days left</translation>
 <translation id="932327136139879170">主页</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011"><ph name="NUMBER_FEW"/> 天前</translation>
 <translation id="5076340679995252485">粘贴(&amp;P)</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> TB</translation>
+<translation id="7139614227326422685">向右移一个字</translation>
 <translation id="364720409959344976">选择要上传的文件夹</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016"><ph name="NUMBER_TWO"/> 分钟前</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">关闭通知</translation>
 <translation id="6364916375976753737">向左滚动</translation>
 <translation id="2629089419211541119"><ph name="NUMBER_ONE"/> 小时前</translation>
+<translation id="4218160142017529598">向前删除</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> 分钟</translation>
 <translation id="6982279413068714821"><ph name="NUMBER_DEFAULT"/> 分钟前</translation>
 <translation id="6945221475159498467">选择</translation>
 <translation id="6620110761915583480">保存文件</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> 秒</translation>
+<translation id="8924469368910458384">删除至行首</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> hours</translation>
 <translation id="7836361698254323868">还剩 <ph name="NUMBER_ONE"/> 分钟</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> min</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863"><ph name="NUMBER_MANY"/> days</translation>
 <translation id="7163503212501929773"><ph name="NUMBER_MANY"/> hours left</translation>
 <translation id="5329858601952122676">删除(&amp;D)</translation>
+<translation id="6556866813142980365">重做</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> secs</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> KB</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> 分钟</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> 分钟</translation>
 <translation id="50960180632766478"><ph name="NUMBER_FEW"/> mins left</translation>
 <translation id="5517291721709019259">还剩<ph name="NUMBER_FEW"/>秒</translation>
+<translation id="6903282483217634857">右移</translation>
 <translation id="6659594942844771486">Tab</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> MB</translation>
 <translation id="4988273303304146523"><ph name="NUMBER_DEFAULT"/> 天前</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/> mins</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> hours left</translation>
 <translation id="7135556860107312402">允许以下来源的通知：</translation>
+<translation id="2479520428668657293">右移并更改选择范围</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/> hours</translation>
 <translation id="1398853756734560583">最大化</translation>
 <translation id="4250229828105606438">屏幕截图</translation>
 <translation id="6690744523875189208"><ph name="NUMBER_TWO"/> hours</translation>
 <translation id="5260878308685146029"><ph name="NUMBER_TWO"/> mins left</translation>
+<translation id="2557207087669398617">移至行首</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> GB</translation>
 <translation id="1901303067676059328">全选(&amp;A)</translation>
 <translation id="2168039046890040389">向上翻页</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> mins</translation>
 <translation id="9107059250669762581"><ph name="NUMBER_DEFAULT"/> 天</translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> mins</translation>
+<translation id="6122334925474904337">向右移一个字并更改选择范围</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> 分钟</translation>
 <translation id="8448317557906454022"><ph name="NUMBER_ZERO"/> 秒前</translation>
 <translation id="4927753642311223124">这里没有任何通知，往前走吧。</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> days</translation>
 <translation id="3183922693828471536">滚动到此处</translation>
 <translation id="4552416320897244156">PgDwn</translation>
+<translation id="3066573403916685335">下移</translation>
 <translation id="7052633198403197513">F1</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/> hours</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> KB/s</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780"><ph name="NUMBER_ONE"/> hour left</translation>
 <translation id="1413622004203049571">停用来自“<ph name="NOTIFIER_NAME"/>”的通知</translation>
 <translation id="2666092431469916601">顶部</translation>
+<translation id="2538759511191347839">移至行末并更改选择范围</translation>
+<translation id="928465423150706909">移至行末</translation>
 <translation id="8331626408530291785">向上滚动</translation>
 <translation id="7907591526440419938">打开文件</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> days left</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">媒体停止</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> mins left</translation>
 <translation id="3157931365184549694">恢复</translation>
+<translation id="5349525451964472598">左移并更改选择范围</translation>
+<translation id="1781701194097416995">向左移一个字</translation>
 <translation id="1243314992276662751">上传</translation>
 <translation id="50030952220075532"><ph name="NUMBER_ONE"/> day left</translation>
 <translation id="8179976553408161302">进入</translation>
+<translation id="8471049483003785219">向左移一个字并更改选择范围</translation>
 <translation id="945522503751344254">发送反馈</translation>
 <translation id="9170848237812810038">撤消(&amp;U)</translation>
 <translation id="1285266685456062655"><ph name="NUMBER_FEW"/> 小时前</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> hours ago</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> GB/s</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/> day</translation>
+<translation id="2704295676501803339">左移</translation>
 <translation id="9098468523912235228"><ph name="NUMBER_DEFAULT"/> 秒前</translation>
 <translation id="494645311413743213"><ph name="NUMBER_TWO"/> secs left</translation>
 <translation id="4570886800634958009">展开通知</translation>
+<translation id="566737009157135450">向前删除一个字</translation>
 <translation id="436869212180315161">按</translation>
 <translation id="4860787810836767172"><ph name="NUMBER_FEW"/> 秒前</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> TB/s</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497"><ph name="NUMBER_MANY"/> 分钟前</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> B/s</translation>
 <translation id="7649070708921625228">帮助</translation>
+<translation id="2405367043325750948">向后删除</translation>
 <translation id="6699343763173986273">媒体下一曲</translation>
 <translation id="5445120697129764393">还剩<ph name="NUMBER_DEFAULT"/>秒</translation>
 <translation id="8226233771743600312">1 天内请勿打扰</translation>
+<translation id="4252565523989510616">向后删除一个字</translation>
 <translation id="7457942297256758195">全部清除</translation>
 <translation id="822618367988303761"><ph name="NUMBER_TWO"/> 天前</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> mins</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> PB/s</translation>
 <translation id="2743387203779672305">复制到剪贴板</translation>
 <translation id="8371695176452482769">请开始说话</translation>
+<translation id="1167268268675672572">移至行首并更改选择范围</translation>
 <translation id="6965382102122355670">确定</translation>
 <translation id="7850320739366109486">请勿打扰</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> days ago</translation>
diff --git a/ui/base/strings/ui_strings_zh-TW.xtb b/ui/base/strings/ui_strings_zh-TW.xtb
index 30ca641..2686aa8 100644
--- a/ui/base/strings/ui_strings_zh-TW.xtb
+++ b/ui/base/strings/ui_strings_zh-TW.xtb
@@ -24,11 +24,13 @@
 <translation id="7222373446505536781">F11</translation>
 <translation id="1761785978543082658"><ph name="QUANTITY"/> B</translation>
 <translation id="3660179305079774227">向上鍵</translation>
+<translation id="3969863827134279083">上移</translation>
 <translation id="7062130397825382308">剩下 <ph name="NUMBER_ONE"/> 秒</translation>
 <translation id="1809410197924942083"><ph name="QUANTITY"/> MB/秒</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> 小時</translation>
 <translation id="3990502903496589789">右邊緣</translation>
 <translation id="9038489124413477075">未命名的資料夾</translation>
+<translation id="1940483897317142625">刪除到行尾</translation>
 <translation id="8507996248087185956"><ph name="NUMBER_DEFAULT"/> 分鐘</translation>
 <translation id="3520476450377425184">剩下 <ph name="NUMBER_MANY"/> 天</translation>
 <translation id="932327136139879170">首頁</translation>
@@ -41,6 +43,7 @@
 <translation id="3353284378027041011"><ph name="NUMBER_FEW"/> 天前</translation>
 <translation id="5076340679995252485">貼上(&amp;P)</translation>
 <translation id="7460907917090416791"><ph name="QUANTITY"/> TB</translation>
+<translation id="7139614227326422685">右移到文字分行</translation>
 <translation id="364720409959344976">選取要上傳的資料夾</translation>
 <translation id="4999762576397546063">Ctrl+<ph name="KEY_COMBO_NAME"/></translation>
 <translation id="7770995925463083016"><ph name="NUMBER_TWO"/> 分鐘前</translation>
@@ -51,11 +54,13 @@
 <translation id="1860796786778352021">通知關閉</translation>
 <translation id="6364916375976753737">向左捲動</translation>
 <translation id="2629089419211541119"><ph name="NUMBER_ONE"/> 小時前</translation>
+<translation id="4218160142017529598">向後刪除</translation>
 <translation id="2994641463185352298"><ph name="NUMBER_DEFAULT"/> 分鐘</translation>
 <translation id="6982279413068714821"><ph name="NUMBER_DEFAULT"/> 分鐘前</translation>
 <translation id="6945221475159498467">選取</translation>
 <translation id="6620110761915583480">儲存檔案</translation>
 <translation id="4349181486102621992"><ph name="NUMBER_ZERO"/> 秒</translation>
+<translation id="8924469368910458384">刪除到行首</translation>
 <translation id="6719684875142564568"><ph name="NUMBER_ZERO"/> hours</translation>
 <translation id="7836361698254323868">剩下 <ph name="NUMBER_ONE"/> 分鐘</translation>
 <translation id="2953767478223974804"><ph name="NUMBER_ONE"/> 分鐘</translation>
@@ -63,6 +68,7 @@
 <translation id="1572103024875503863"><ph name="NUMBER_MANY"/> 天</translation>
 <translation id="7163503212501929773">剩下 <ph name="NUMBER_MANY"/> 小時</translation>
 <translation id="5329858601952122676">刪除(&amp;D)</translation>
+<translation id="6556866813142980365">重做</translation>
 <translation id="8088823334188264070"><ph name="NUMBER_MANY"/> 秒</translation>
 <translation id="8901569739625249689"><ph name="QUANTITY"/> KB</translation>
 <translation id="7712011264267466734"><ph name="NUMBER_MANY"/> 分鐘</translation>
@@ -71,6 +77,7 @@
 <translation id="3424538384153559412"><ph name="NUMBER_TWO"/> 分鐘</translation>
 <translation id="50960180632766478">剩下 <ph name="NUMBER_FEW"/> 分鐘</translation>
 <translation id="5517291721709019259">剩下 <ph name="NUMBER_FEW"/> 秒</translation>
+<translation id="6903282483217634857">右移</translation>
 <translation id="6659594942844771486">Tab</translation>
 <translation id="3049748772180311791"><ph name="QUANTITY"/> MB</translation>
 <translation id="4988273303304146523"><ph name="NUMBER_DEFAULT"/> 天前</translation>
@@ -89,17 +96,20 @@
 <translation id="290555789621781773"><ph name="NUMBER_TWO"/> 分鐘</translation>
 <translation id="5149131957118398098"><ph name="NUMBER_ZERO"/> hours left</translation>
 <translation id="7135556860107312402">允許接收下列來源發出的通知：</translation>
+<translation id="2479520428668657293">右移並修改選取範圍</translation>
 <translation id="8112886015144590373"><ph name="NUMBER_FEW"/> 小時</translation>
 <translation id="1398853756734560583">放到最大</translation>
 <translation id="4250229828105606438">螢幕擷取畫面</translation>
 <translation id="6690744523875189208"><ph name="NUMBER_TWO"/> 小時</translation>
 <translation id="5260878308685146029">剩下 <ph name="NUMBER_TWO"/> 分鐘</translation>
+<translation id="2557207087669398617">移到行首</translation>
 <translation id="3757388668994797779"><ph name="QUANTITY"/> GB</translation>
 <translation id="1901303067676059328">選取全部(&amp;A)</translation>
 <translation id="2168039046890040389">向上翻頁</translation>
 <translation id="7363290921156020669"><ph name="NUMBER_ZERO"/> mins</translation>
 <translation id="9107059250669762581"><ph name="NUMBER_DEFAULT"/> 天</translation>
 <translation id="6463061331681402734"><ph name="NUMBER_MANY"/> 分鐘</translation>
+<translation id="6122334925474904337">右移到文字分行並修改選取範圍</translation>
 <translation id="7634624804467787019"><ph name="NUMBER_ONE"/> 分鐘</translation>
 <translation id="8448317557906454022"><ph name="NUMBER_ZERO"/> 秒前</translation>
 <translation id="4927753642311223124">這裡沒有任何通知訊息，以後再來看看吧！</translation>
@@ -107,6 +117,7 @@
 <translation id="6357135709975569075"><ph name="NUMBER_ZERO"/> days</translation>
 <translation id="3183922693828471536">捲動至此</translation>
 <translation id="4552416320897244156">PgDwn</translation>
+<translation id="3066573403916685335">下移</translation>
 <translation id="7052633198403197513">F1 鍵</translation>
 <translation id="2052389551707911401"><ph name="NUMBER_MANY"/> 小時</translation>
 <translation id="8677655579646609597"><ph name="QUANTITY"/> KB/秒</translation>
@@ -123,6 +134,8 @@
 <translation id="7414887922320653780">剩下 <ph name="NUMBER_ONE"/> 小時</translation>
 <translation id="1413622004203049571">停用「<ph name="NOTIFIER_NAME"/>」的通知</translation>
 <translation id="2666092431469916601">置頂</translation>
+<translation id="2538759511191347839">移到行尾並修改選取範圍</translation>
+<translation id="928465423150706909">移到行尾</translation>
 <translation id="8331626408530291785">向上捲動</translation>
 <translation id="7907591526440419938">開啟檔案</translation>
 <translation id="2864069933652346933"><ph name="NUMBER_ZERO"/> days left</translation>
@@ -132,9 +145,12 @@
 <translation id="6808150112686056157">停止媒體播放</translation>
 <translation id="1308727876662951186"><ph name="NUMBER_ZERO"/> mins left</translation>
 <translation id="3157931365184549694">還原</translation>
+<translation id="5349525451964472598">左移並修改選取範圍</translation>
+<translation id="1781701194097416995">左移到文字分行</translation>
 <translation id="1243314992276662751">上傳</translation>
 <translation id="50030952220075532">剩下 <ph name="NUMBER_ONE"/> 天</translation>
 <translation id="8179976553408161302">進入</translation>
+<translation id="8471049483003785219">左移到文字分行並修改選取範圍</translation>
 <translation id="945522503751344254">提供意見</translation>
 <translation id="9170848237812810038">取消(&amp;U)</translation>
 <translation id="1285266685456062655"><ph name="NUMBER_FEW"/> 小時前</translation>
@@ -157,9 +173,11 @@
 <translation id="8788572795284305350"><ph name="NUMBER_ZERO"/> hours ago</translation>
 <translation id="3740362395218339114"><ph name="QUANTITY"/> GB/秒</translation>
 <translation id="6644971472240498405"><ph name="NUMBER_ONE"/> 天</translation>
+<translation id="2704295676501803339">左移</translation>
 <translation id="9098468523912235228"><ph name="NUMBER_DEFAULT"/> 秒前</translation>
 <translation id="494645311413743213">剩下 <ph name="NUMBER_TWO"/> 秒</translation>
 <translation id="4570886800634958009">通知展開</translation>
+<translation id="566737009157135450">向後刪除文字</translation>
 <translation id="436869212180315161">按下</translation>
 <translation id="4860787810836767172"><ph name="NUMBER_FEW"/> 秒前</translation>
 <translation id="2297836609126180313"><ph name="QUANTITY"/> TB/秒</translation>
@@ -169,9 +187,11 @@
 <translation id="1101671447232096497"><ph name="NUMBER_MANY"/> 分鐘前</translation>
 <translation id="6142413573757616983"><ph name="QUANTITY"/> B/秒</translation>
 <translation id="7649070708921625228">說明</translation>
+<translation id="2405367043325750948">向前刪除</translation>
 <translation id="6699343763173986273">下一首媒體曲目</translation>
 <translation id="5445120697129764393">剩下 <ph name="NUMBER_DEFAULT"/> 秒</translation>
 <translation id="8226233771743600312">1 天內請勿打擾</translation>
+<translation id="4252565523989510616">向前刪除文字</translation>
 <translation id="7457942297256758195">全部清除</translation>
 <translation id="822618367988303761"><ph name="NUMBER_TWO"/> 天前</translation>
 <translation id="4745438305783437565"><ph name="NUMBER_FEW"/> 分鐘</translation>
@@ -187,6 +207,7 @@
 <translation id="6907759265145635167"><ph name="QUANTITY"/> PB/秒</translation>
 <translation id="2743387203779672305">複製到剪貼簿</translation>
 <translation id="8371695176452482769">請說話</translation>
+<translation id="1167268268675672572">移到行首並修改選取範圍</translation>
 <translation id="6965382102122355670">確定</translation>
 <translation id="7850320739366109486">請勿打擾</translation>
 <translation id="6978839998405419496"><ph name="NUMBER_ZERO"/> days ago</translation>
diff --git a/ui/base/ui_base.gyp b/ui/base/ui_base.gyp
index 2ee7723..3d9214f 100644
--- a/ui/base/ui_base.gyp
+++ b/ui/base/ui_base.gyp
@@ -376,7 +376,6 @@
         }],
         ['use_glib == 1', {
           'dependencies': [
-            # font_gtk.cc uses fontconfig.
             '../../build/linux/system.gyp:fontconfig',
             '../../build/linux/system.gyp:glib',
           ],
@@ -566,6 +565,46 @@
         }],
       ],
     },
+    {
+      'target_name': 'ui_base_test_support',
+      'dependencies': [
+        '../../base/base.gyp:base',
+        '../../skia/skia.gyp:skia',
+        '../../testing/gtest.gyp:gtest',
+        '../gfx/gfx.gyp:gfx',
+        '../gfx/gfx.gyp:gfx_geometry',
+      ],
+      'sources': [
+        'test/ui_controls.h',
+        'test/ui_controls_aura.cc',
+        'test/ui_controls_internal_win.cc',
+        'test/ui_controls_internal_win.h',
+        'test/ui_controls_mac.mm',
+        'test/ui_controls_win.cc',
+      ],
+      'include_dirs': [
+        '../..',
+      ],
+      'conditions': [
+        ['OS!="ios"', {
+          'type': 'static_library',
+          'includes': [ 'ime/ime_test_support.gypi' ],
+        }, {  # OS=="ios"
+          # None of the sources in this target are built on iOS, resulting in
+          # link errors when building targets that depend on this target
+          # because the static library isn't found. If this target is changed
+          # to have sources that are built on iOS, the target should be changed
+          # to be of type static_library on all platforms.
+          'type': 'none',
+        }],
+        ['use_aura==1', {
+          'sources!': [
+            'test/ui_controls_mac.mm',
+            'test/ui_controls_win.cc',
+          ],
+        }],
+      ],
+    },
   ],
   'conditions': [
     ['OS=="android"' , {
diff --git a/ui/base/ui_base.target.darwin-arm.mk b/ui/base/ui_base.target.darwin-arm.mk
index 4b43a10..b814021 100644
--- a/ui/base/ui_base.target.darwin-arm.mk
+++ b/ui/base/ui_base.target.darwin-arm.mk
@@ -145,12 +145,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -270,12 +273,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -351,7 +357,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/base/ui_base.target.darwin-mips.mk b/ui/base/ui_base.target.darwin-mips.mk
index f31f2d7..3af7d1b 100644
--- a/ui/base/ui_base.target.darwin-mips.mk
+++ b/ui/base/ui_base.target.darwin-mips.mk
@@ -144,12 +144,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -268,12 +271,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -347,7 +353,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/base/ui_base.target.darwin-x86.mk b/ui/base/ui_base.target.darwin-x86.mk
index 992f78f..07cd479 100644
--- a/ui/base/ui_base.target.darwin-x86.mk
+++ b/ui/base/ui_base.target.darwin-x86.mk
@@ -145,12 +145,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -269,12 +272,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -347,7 +353,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/base/ui_base.target.darwin-x86_64.mk b/ui/base/ui_base.target.darwin-x86_64.mk
index 268a87d..af066fc 100644
--- a/ui/base/ui_base.target.darwin-x86_64.mk
+++ b/ui/base/ui_base.target.darwin-x86_64.mk
@@ -146,12 +146,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -271,12 +274,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -349,7 +355,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/base/ui_base.target.linux-arm.mk b/ui/base/ui_base.target.linux-arm.mk
index 4b43a10..b814021 100644
--- a/ui/base/ui_base.target.linux-arm.mk
+++ b/ui/base/ui_base.target.linux-arm.mk
@@ -145,12 +145,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -270,12 +273,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -351,7 +357,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/base/ui_base.target.linux-mips.mk b/ui/base/ui_base.target.linux-mips.mk
index f31f2d7..3af7d1b 100644
--- a/ui/base/ui_base.target.linux-mips.mk
+++ b/ui/base/ui_base.target.linux-mips.mk
@@ -144,12 +144,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -268,12 +271,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -347,7 +353,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/base/ui_base.target.linux-x86.mk b/ui/base/ui_base.target.linux-x86.mk
index 992f78f..07cd479 100644
--- a/ui/base/ui_base.target.linux-x86.mk
+++ b/ui/base/ui_base.target.linux-x86.mk
@@ -145,12 +145,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -269,12 +272,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -347,7 +353,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/base/ui_base.target.linux-x86_64.mk b/ui/base/ui_base.target.linux-x86_64.mk
index 268a87d..af066fc 100644
--- a/ui/base/ui_base.target.linux-x86_64.mk
+++ b/ui/base/ui_base.target.linux-x86_64.mk
@@ -146,12 +146,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -271,12 +274,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -349,7 +355,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/base/x/selection_requestor.cc b/ui/base/x/selection_requestor.cc
index 080007a..8757c72 100644
--- a/ui/base/x/selection_requestor.cc
+++ b/ui/base/x/selection_requestor.cc
@@ -69,12 +69,16 @@
   DCHECK_EQ(&pending_request, pending_requests_.back());
   pending_requests_.pop_back();
 
-  if (pending_request.returned_property != property_to_set)
-    return false;
-
-  return ui::GetRawBytesOfProperty(x_window_, pending_request.returned_property,
-                                   out_data, out_data_bytes, out_data_items,
-                                   out_type);
+  bool success = false;
+  if (pending_request.returned_property == property_to_set) {
+    success =  ui::GetRawBytesOfProperty(x_window_,
+                                         pending_request.returned_property,
+                                         out_data, out_data_bytes,
+                                         out_data_items, out_type);
+  }
+  if (pending_request.returned_property != None)
+    XDeleteProperty(x_display_, x_window_, pending_request.returned_property);
+  return success;
 }
 
 SelectionData SelectionRequestor::RequestAndWaitForTypes(
@@ -118,8 +122,14 @@
   // This event doesn't correspond to any XConvertSelection calls that we
   // issued in PerformBlockingConvertSelection. This shouldn't happen, but any
   // client can send any message, so it can happen.
-  if (!request_notified)
+  if (!request_notified) {
+    // ICCCM requires us to delete the property passed into SelectionNotify. If
+    // |request_notified| is true, the property will be deleted when the run
+    // loop has quit.
+    if (event.property != None)
+      XDeleteProperty(x_display_, x_window_, event.property);
     return;
+  }
 
   request_notified->returned_property = event.property;
   request_notified->returned = true;
diff --git a/ui/base/x/x11_util.cc b/ui/base/x/x11_util.cc
index 3d733dd..dd5444e 100644
--- a/ui/base/x/x11_util.cc
+++ b/ui/base/x/x11_util.cc
@@ -601,8 +601,11 @@
                                                   rectangle_kind[kind_index],
                                                   &shape_rects_size,
                                                   &dummy);
-    if (!shape_rects)
-      continue;
+    if (!shape_rects) {
+      // The shape is empty. This can occur when |window| is minimized.
+      DCHECK_EQ(0, shape_rects_size);
+      return false;
+    }
     bool is_in_shape_rects = false;
     for (int i = 0; i < shape_rects_size; ++i) {
       // The ShapeInput and ShapeBounding rects are to be in window space, so we
diff --git a/ui/chromeos/OWNERS b/ui/chromeos/OWNERS
new file mode 100644
index 0000000..50cce3e
--- /dev/null
+++ b/ui/chromeos/OWNERS
@@ -0,0 +1,4 @@
+derat@chromium.org
+jamescook@chromium.org
+oshima@chromium.org
+stevenjb@chromium.org
diff --git a/ui/chromeos/ui_chromeos.gyp b/ui/chromeos/ui_chromeos.gyp
index c00d576..7f7362e 100644
--- a/ui/chromeos/ui_chromeos.gyp
+++ b/ui/chromeos/ui_chromeos.gyp
@@ -13,14 +13,14 @@
       'dependencies': [
         '../../base/base.gyp:base',
         '../events/events.gyp:events',
-        '../wm/wm.gyp:wm_core',
+        '../wm/wm.gyp:wm',
       ],
       'defines': [
         'UI_CHROMEOS_IMPLEMENTATION',
       ],
       'sources': [
-        'user_activity_notifier.cc',
-        'user_activity_notifier.h',
+        'user_activity_power_manager_notifier.cc',
+        'user_activity_power_manager_notifier.h',
       ],
     },
   ],
diff --git a/ui/chromeos/user_activity_notifier.cc b/ui/chromeos/user_activity_notifier.cc
deleted file mode 100644
index 53f3129..0000000
--- a/ui/chromeos/user_activity_notifier.cc
+++ /dev/null
@@ -1,65 +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.
-
-#include "ui/chromeos/user_activity_notifier.h"
-
-#include "chromeos/dbus/dbus_thread_manager.h"
-#include "chromeos/dbus/power_manager_client.h"
-#include "ui/events/event.h"
-#include "ui/events/event_constants.h"
-#include "ui/events/keycodes/keyboard_codes_posix.h"
-#include "ui/wm/core/user_activity_detector.h"
-
-namespace ui {
-namespace {
-
-// Minimum number of seconds between notifications.
-const int kNotifyIntervalSec = 5;
-
-// Returns a UserActivityType describing |event|.
-power_manager::UserActivityType GetUserActivityTypeForEvent(
-    const Event* event) {
-  if (!event || event->type() != ET_KEY_PRESSED)
-    return power_manager::USER_ACTIVITY_OTHER;
-
-  switch (static_cast<const KeyEvent*>(event)->key_code()) {
-    case VKEY_BRIGHTNESS_DOWN:
-      return power_manager::USER_ACTIVITY_BRIGHTNESS_DOWN_KEY_PRESS;
-    case VKEY_BRIGHTNESS_UP:
-      return power_manager::USER_ACTIVITY_BRIGHTNESS_UP_KEY_PRESS;
-    case VKEY_VOLUME_DOWN:
-      return power_manager::USER_ACTIVITY_VOLUME_DOWN_KEY_PRESS;
-    case VKEY_VOLUME_MUTE:
-      return power_manager::USER_ACTIVITY_VOLUME_MUTE_KEY_PRESS;
-    case VKEY_VOLUME_UP:
-      return power_manager::USER_ACTIVITY_VOLUME_UP_KEY_PRESS;
-    default:
-      return power_manager::USER_ACTIVITY_OTHER;
-  }
-}
-
-}  // namespace
-
-UserActivityNotifier::UserActivityNotifier(::wm::UserActivityDetector* detector)
-    : detector_(detector) {
-  detector_->AddObserver(this);
-}
-
-UserActivityNotifier::~UserActivityNotifier() {
-  detector_->RemoveObserver(this);
-}
-
-void UserActivityNotifier::OnUserActivity(const Event* event) {
-  base::TimeTicks now = base::TimeTicks::Now();
-  // InSeconds() truncates rather than rounding, so it's fine for this
-  // comparison.
-  if (last_notify_time_.is_null() ||
-      (now - last_notify_time_).InSeconds() >= kNotifyIntervalSec) {
-    chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->
-        NotifyUserActivity(GetUserActivityTypeForEvent(event));
-    last_notify_time_ = now;
-  }
-}
-
-}  // namespace ui
diff --git a/ui/chromeos/user_activity_notifier.h b/ui/chromeos/user_activity_notifier.h
deleted file mode 100644
index dab5955..0000000
--- a/ui/chromeos/user_activity_notifier.h
+++ /dev/null
@@ -1,41 +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.
-
-#ifndef UI_CHROMEOS_USER_ACTIVITY_NOTIFIER_H_
-#define UI_CHROMEOS_USER_ACTIVITY_NOTIFIER_H_
-
-#include "base/basictypes.h"
-#include "base/compiler_specific.h"
-#include "base/time/time.h"
-#include "ui/chromeos/ui_chromeos_export.h"
-#include "ui/wm/core/user_activity_observer.h"
-
-namespace wm {
-class UserActivityDetector;
-}  // namespace wm
-
-namespace ui {
-
-// Notifies the power manager when the user is active.
-class UI_CHROMEOS_EXPORT UserActivityNotifier
-    : public ::wm::UserActivityObserver {
- public:
-  explicit UserActivityNotifier(::wm::UserActivityDetector* detector);
-  virtual ~UserActivityNotifier();
-
-  // UserActivityObserver implementation.
-  virtual void OnUserActivity(const Event* event) OVERRIDE;
-
- private:
-  ::wm::UserActivityDetector* detector_;  // not owned
-
-  // Last time that the power manager was notified.
-  base::TimeTicks last_notify_time_;
-
-  DISALLOW_COPY_AND_ASSIGN(UserActivityNotifier);
-};
-
-}  // namespace ui
-
-#endif  // UI_CHROMEOS_USER_ACTIVITY_NOTIFIER_H_
diff --git a/ui/chromeos/user_activity_power_manager_notifier.cc b/ui/chromeos/user_activity_power_manager_notifier.cc
new file mode 100644
index 0000000..7952b59
--- /dev/null
+++ b/ui/chromeos/user_activity_power_manager_notifier.cc
@@ -0,0 +1,66 @@
+// 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.
+
+#include "ui/chromeos/user_activity_power_manager_notifier.h"
+
+#include "chromeos/dbus/dbus_thread_manager.h"
+#include "chromeos/dbus/power_manager_client.h"
+#include "ui/events/event.h"
+#include "ui/events/event_constants.h"
+#include "ui/events/keycodes/keyboard_codes_posix.h"
+#include "ui/wm/core/user_activity_detector.h"
+
+namespace ui {
+namespace {
+
+// Minimum number of seconds between notifications.
+const int kNotifyIntervalSec = 5;
+
+// Returns a UserActivityType describing |event|.
+power_manager::UserActivityType GetUserActivityTypeForEvent(
+    const Event* event) {
+  if (!event || event->type() != ET_KEY_PRESSED)
+    return power_manager::USER_ACTIVITY_OTHER;
+
+  switch (static_cast<const KeyEvent*>(event)->key_code()) {
+    case VKEY_BRIGHTNESS_DOWN:
+      return power_manager::USER_ACTIVITY_BRIGHTNESS_DOWN_KEY_PRESS;
+    case VKEY_BRIGHTNESS_UP:
+      return power_manager::USER_ACTIVITY_BRIGHTNESS_UP_KEY_PRESS;
+    case VKEY_VOLUME_DOWN:
+      return power_manager::USER_ACTIVITY_VOLUME_DOWN_KEY_PRESS;
+    case VKEY_VOLUME_MUTE:
+      return power_manager::USER_ACTIVITY_VOLUME_MUTE_KEY_PRESS;
+    case VKEY_VOLUME_UP:
+      return power_manager::USER_ACTIVITY_VOLUME_UP_KEY_PRESS;
+    default:
+      return power_manager::USER_ACTIVITY_OTHER;
+  }
+}
+
+}  // namespace
+
+UserActivityPowerManagerNotifier::UserActivityPowerManagerNotifier(
+    ::wm::UserActivityDetector* detector)
+    : detector_(detector) {
+  detector_->AddObserver(this);
+}
+
+UserActivityPowerManagerNotifier::~UserActivityPowerManagerNotifier() {
+  detector_->RemoveObserver(this);
+}
+
+void UserActivityPowerManagerNotifier::OnUserActivity(const Event* event) {
+  base::TimeTicks now = base::TimeTicks::Now();
+  // InSeconds() truncates rather than rounding, so it's fine for this
+  // comparison.
+  if (last_notify_time_.is_null() ||
+      (now - last_notify_time_).InSeconds() >= kNotifyIntervalSec) {
+    chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->
+        NotifyUserActivity(GetUserActivityTypeForEvent(event));
+    last_notify_time_ = now;
+  }
+}
+
+}  // namespace ui
diff --git a/ui/chromeos/user_activity_power_manager_notifier.h b/ui/chromeos/user_activity_power_manager_notifier.h
new file mode 100644
index 0000000..483f1b5
--- /dev/null
+++ b/ui/chromeos/user_activity_power_manager_notifier.h
@@ -0,0 +1,42 @@
+// 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.
+
+#ifndef UI_CHROMEOS_USER_ACTIVITY_POWER_MANAGER_NOTIFIER_H_
+#define UI_CHROMEOS_USER_ACTIVITY_POWER_MANAGER_NOTIFIER_H_
+
+#include "base/basictypes.h"
+#include "base/compiler_specific.h"
+#include "base/time/time.h"
+#include "ui/chromeos/ui_chromeos_export.h"
+#include "ui/wm/core/user_activity_observer.h"
+
+namespace wm {
+class UserActivityDetector;
+}  // namespace wm
+
+namespace ui {
+
+// Notifies the power manager when the user is active.
+class UI_CHROMEOS_EXPORT UserActivityPowerManagerNotifier
+    : public ::wm::UserActivityObserver {
+ public:
+  explicit UserActivityPowerManagerNotifier(
+      ::wm::UserActivityDetector* detector);
+  virtual ~UserActivityPowerManagerNotifier();
+
+  // UserActivityObserver implementation.
+  virtual void OnUserActivity(const Event* event) OVERRIDE;
+
+ private:
+  ::wm::UserActivityDetector* detector_;  // not owned
+
+  // Last time that the power manager was notified.
+  base::TimeTicks last_notify_time_;
+
+  DISALLOW_COPY_AND_ASSIGN(UserActivityPowerManagerNotifier);
+};
+
+}  // namespace ui
+
+#endif  // UI_CHROMEOS_USER_ACTIVITY_POWER_MANAGER_NOTIFIER_H_
diff --git a/ui/compositor/dip_util.cc b/ui/compositor/dip_util.cc
index 2d95af6..fcecf24 100644
--- a/ui/compositor/dip_util.cc
+++ b/ui/compositor/dip_util.cc
@@ -60,6 +60,14 @@
 gfx::Rect ConvertRectToPixel(const Layer* layer,
                              const gfx::Rect& rect_in_dip) {
   float scale = GetDeviceScaleFactor(layer);
-  return gfx::ToFlooredRectDeprecated(gfx::ScaleRect(rect_in_dip, scale));
+  // Use ToEnclosingRect() to ensure we paint all the possible pixels
+  // touched. ToEnclosingRect() floors the origin, and ceils the max
+  // coordinate. To do otherwise (such as flooring the size) potentially
+  // results in rounding down and not drawing all the pixels that are
+  // touched.
+  return gfx::ToEnclosingRect(
+      gfx::RectF(gfx::ScalePoint(rect_in_dip.origin(), scale),
+                 gfx::ScaleSize(rect_in_dip.size(), scale)));
 }
+
 }  // namespace ui
diff --git a/ui/compositor/layer.cc b/ui/compositor/layer.cc
index c93ca68..df67e90 100644
--- a/ui/compositor/layer.cc
+++ b/ui/compositor/layer.cc
@@ -329,6 +329,12 @@
   SetLayerBackgroundFilters();
 }
 
+void Layer::SetAlphaShape(scoped_ptr<SkRegion> region) {
+  alpha_shape_ = region.Pass();
+
+  SetLayerFilters();
+}
+
 void Layer::SetLayerFilters() {
   cc::FilterOperations filters;
   if (layer_saturation_) {
@@ -348,6 +354,10 @@
     filters.Append(cc::FilterOperation::CreateSaturatingBrightnessFilter(
         layer_brightness_));
   }
+  if (alpha_shape_) {
+    filters.Append(cc::FilterOperation::CreateAlphaThresholdFilter(
+            *alpha_shape_, 1.f, 0.f));
+  }
 
   cc_layer_->SetFilters(filters);
 }
diff --git a/ui/compositor/layer.h b/ui/compositor/layer.h
index fea3c51..c42cbfe 100644
--- a/ui/compositor/layer.h
+++ b/ui/compositor/layer.h
@@ -192,6 +192,9 @@
   // edge across |inset| pixels.
   void SetBackgroundZoom(float zoom, int inset);
 
+  // Set the shape of this layer.
+  void SetAlphaShape(scoped_ptr<SkRegion> region);
+
   // Invert the layer.
   bool layer_inverted() const { return layer_inverted_; }
   void SetLayerInverted(bool inverted);
@@ -447,6 +450,9 @@
   // Width of the border in pixels, where the scaling is blended.
   int zoom_inset_;
 
+  // Shape of the window.
+  scoped_ptr<SkRegion> alpha_shape_;
+
   std::string name_;
 
   LayerDelegate* delegate_;
diff --git a/ui/compositor/layer_owner.cc b/ui/compositor/layer_owner.cc
index f72666b..8e6c29f 100644
--- a/ui/compositor/layer_owner.cc
+++ b/ui/compositor/layer_owner.cc
@@ -21,10 +21,10 @@
   layer_->owner_ = this;
 }
 
-Layer* LayerOwner::AcquireLayer() {
+scoped_ptr<Layer> LayerOwner::AcquireLayer() {
   if (layer_owner_)
     layer_owner_->owner_ = NULL;
-  return layer_owner_.release();
+  return layer_owner_.Pass();
 }
 
 scoped_ptr<Layer> LayerOwner::RecreateLayer() {
diff --git a/ui/compositor/layer_owner.h b/ui/compositor/layer_owner.h
index 4828e74..27002e5 100644
--- a/ui/compositor/layer_owner.h
+++ b/ui/compositor/layer_owner.h
@@ -26,7 +26,7 @@
   // function, and the caller is then responsible for disposing of the layer
   // once any animation completes. Note that layer() will remain valid until the
   // end of ~LayerOwner().
-  Layer* AcquireLayer() WARN_UNUSED_RESULT;
+  scoped_ptr<Layer> AcquireLayer();
 
   // Asks the owner to recreate the layer, returning the old Layer. NULL is
   // returned if there is no existing layer, or recreate is not supported.
diff --git a/ui/display/chromeos/x11/native_display_delegate_x11.cc b/ui/display/chromeos/x11/native_display_delegate_x11.cc
index 2258fa3..3dff81b 100644
--- a/ui/display/chromeos/x11/native_display_delegate_x11.cc
+++ b/ui/display/chromeos/x11/native_display_delegate_x11.cc
@@ -19,7 +19,7 @@
 #include "ui/display/chromeos/x11/display_util_x11.h"
 #include "ui/display/chromeos/x11/native_display_event_dispatcher_x11.h"
 #include "ui/display/types/chromeos/native_display_observer.h"
-#include "ui/display/x11/edid_parser_x11.h"
+#include "ui/display/util/x11/edid_parser_x11.h"
 #include "ui/events/platform/platform_event_observer.h"
 #include "ui/events/platform/platform_event_source.h"
 #include "ui/gfx/x/x11_error_tracker.h"
@@ -149,7 +149,8 @@
 NativeDisplayDelegateX11::NativeDisplayDelegateX11()
     : display_(gfx::GetXDisplay()),
       window_(DefaultRootWindow(display_)),
-      screen_(NULL) {}
+      screen_(NULL),
+      background_color_argb_(0) {}
 
 NativeDisplayDelegateX11::~NativeDisplayDelegateX11() {
   if (ui::PlatformEventSource::GetInstance()) {
@@ -201,22 +202,7 @@
 void NativeDisplayDelegateX11::SyncWithServer() { XSync(display_, 0); }
 
 void NativeDisplayDelegateX11::SetBackgroundColor(uint32_t color_argb) {
-  // Configuring CRTCs/Framebuffer clears the boot screen image.  Set the
-  // same background color while configuring the display to minimize the
-  // duration of black screen at boot time. The background is filled with
-  // black later in ash::DisplayManager.  crbug.com/171050.
-  XSetWindowAttributes swa = {0};
-  XColor color;
-  Colormap colormap = DefaultColormap(display_, 0);
-  // XColor uses 16 bits per color.
-  color.red = (color_argb & 0x00FF0000) >> 8;
-  color.green = (color_argb & 0x0000FF00);
-  color.blue = (color_argb & 0x000000FF) << 8;
-  color.flags = DoRed | DoGreen | DoBlue;
-  XAllocColor(display_, colormap, &color);
-  swa.background_pixel = color.pixel;
-  XChangeWindowAttributes(display_, window_, CWBackPixel, &swa);
-  XFreeColors(display_, colormap, &color.pixel, 1, 0);
+  background_color_argb_ = color_argb;
 }
 
 void NativeDisplayDelegateX11::ForceDPMSOn() {
@@ -316,6 +302,21 @@
   int mm_height = size.height() * kPixelsToMmScale;
   XRRSetScreenSize(
       display_, window_, size.width(), size.height(), mm_width, mm_height);
+  // We don't wait for root window resize, therefore this end up with drawing
+  // in the old window size, which we care during the boot.
+  DrawBackground();
+
+  // Don't redraw the background upon framebuffer change again. This should
+  // happen only once after boot.
+  background_color_argb_ = 0;
+}
+
+void NativeDisplayDelegateX11::AddObserver(NativeDisplayObserver* observer) {
+  observers_.AddObserver(observer);
+}
+
+void NativeDisplayDelegateX11::RemoveObserver(NativeDisplayObserver* observer) {
+  observers_.RemoveObserver(observer);
 }
 
 void NativeDisplayDelegateX11::InitModes() {
@@ -651,12 +652,29 @@
   return NULL;
 }
 
-void NativeDisplayDelegateX11::AddObserver(NativeDisplayObserver* observer) {
-  observers_.AddObserver(observer);
-}
+void NativeDisplayDelegateX11::DrawBackground() {
+  if (!background_color_argb_)
+    return;
+  // Configuring CRTCs/Framebuffer clears the boot screen image.  Paint the
+  // same background color after updating framebuffer to minimize the
+  // duration of black screen at boot time.
+  XColor color;
+  Colormap colormap = DefaultColormap(display_, 0);
+  // XColor uses 16 bits per color.
+  color.red = (background_color_argb_ & 0x00FF0000) >> 8;
+  color.green = (background_color_argb_ & 0x0000FF00);
+  color.blue = (background_color_argb_ & 0x000000FF) << 8;
+  color.flags = DoRed | DoGreen | DoBlue;
+  XAllocColor(display_, colormap, &color);
 
-void NativeDisplayDelegateX11::RemoveObserver(NativeDisplayObserver* observer) {
-  observers_.RemoveObserver(observer);
+  GC gc = XCreateGC(display_, window_, 0, 0);
+  XSetForeground(display_, gc, color.pixel);
+  XSetFillStyle(display_, gc, FillSolid);
+  int width = DisplayWidth(display_, DefaultScreen(display_));
+  int height = DisplayHeight(display_, DefaultScreen(display_));
+  XFillRectangle(display_, window_, gc, 0, 0, width, height);
+  XFreeGC(display_, gc);
+  XFreeColors(display_, colormap, &color.pixel, 1, 0);
 }
 
 }  // namespace ui
diff --git a/ui/display/chromeos/x11/native_display_delegate_x11.h b/ui/display/chromeos/x11/native_display_delegate_x11.h
index 5112197..f9eade3 100644
--- a/ui/display/chromeos/x11/native_display_delegate_x11.h
+++ b/ui/display/chromeos/x11/native_display_delegate_x11.h
@@ -124,6 +124,8 @@
       const DisplaySnapshotX11& x11_output,
       ColorCalibrationProfile new_profile);
 
+  void DrawBackground();
+
   Display* display_;
   Window window_;
 
@@ -149,6 +151,9 @@
   // List of observers waiting for display configuration change events.
   ObserverList<NativeDisplayObserver> observers_;
 
+  // A background color used during boot time + multi displays.
+  uint32_t background_color_argb_;
+
   DISALLOW_COPY_AND_ASSIGN(NativeDisplayDelegateX11);
 };
 
diff --git a/ui/display/display.gyp b/ui/display/display.gyp
index 3cc5d8e..44a3038 100644
--- a/ui/display/display.gyp
+++ b/ui/display/display.gyp
@@ -23,7 +23,7 @@
         'types/chromeos/display_snapshot.cc',
         'types/chromeos/display_snapshot.h',
         'types/chromeos/native_display_delegate.h',
-        'types/chromeos/native_display_observer',
+        'types/chromeos/native_display_observer.h',
         'types/display_constants.h',
         'types/display_types_export.h',
       ],
@@ -35,6 +35,7 @@
         '../../base/base.gyp:base',
         '../../ui/gfx/gfx.gyp:gfx',
         '../../ui/gfx/gfx.gyp:gfx_geometry',
+        'display_util',
       ],
       'defines': [
         'DISPLAY_IMPLEMENTATION',
@@ -61,12 +62,6 @@
         'display_export.h',
         'display_switches.cc',
         'display_switches.h',
-        'display_util.cc',
-        'display_util.h',
-        'edid_parser.cc',
-        'edid_parser.h',
-        'x11/edid_parser_x11.cc',
-        'x11/edid_parser_x11.h',
       ],
       'conditions': [
         ['use_x11 == 1', {
@@ -82,6 +77,44 @@
             'display_types',
           ],
         }],
+        ['use_ozone == 1', {
+          'dependencies': [
+            '../../ui/ozone/ozone.gyp:ozone',
+          ],
+        }],
+      ],
+    },
+    {
+      'target_name': 'display_util',
+      'type': '<(component)',
+      'dependencies': [
+        '../../base/base.gyp:base',
+        '../../ui/gfx/gfx.gyp:gfx_geometry',
+      ],
+      'defines': [
+        'DISPLAY_UTIL_IMPLEMENTATION',
+      ],
+      'sources': [
+        'util/display_util.cc',
+        'util/display_util.h',
+        'util/display_util_export.h',
+        'util/edid_parser.cc',
+        'util/edid_parser.h',
+        'util/x11/edid_parser_x11.cc',
+        'util/x11/edid_parser_x11.h',
+      ],
+      'conditions': [
+        ['use_x11 == 1', {
+          'dependencies': [
+            '../../build/linux/system.gyp:xrandr',
+            '../../ui/gfx/gfx.gyp:gfx',
+          ],
+        }],
+        ['chromeos == 1', {
+          'dependencies': [
+            'display_types',
+          ],
+        }],
       ],
     },
     {
diff --git a/ui/display/display_unittests.gypi b/ui/display/display_unittests.gypi
index 75f5c77..b266a1a 100644
--- a/ui/display/display_unittests.gypi
+++ b/ui/display/display_unittests.gypi
@@ -8,15 +8,15 @@
   'dependencies': [
     '../base/base.gyp:test_support_base',
     '../testing/gtest.gyp:gtest',
-    '../ui/display/display.gyp:display',
+    '../ui/display/display.gyp:display_util',
     '../ui/gfx/gfx.gyp:gfx_geometry',
   ],
   'sources': [
-    'edid_parser_unittest.cc',
     'chromeos/display_configurator_unittest.cc',
     'chromeos/x11/display_util_x11_unittest.cc',
     'chromeos/x11/native_display_event_dispatcher_x11_unittest.cc',
-    'display_util_unittest.cc',
+    'util/display_util_unittest.cc',
+    'util/edid_parser_unittest.cc',
   ],
   'conditions': [
     # TODO(dnicoara) When we add non-chromeos display code this dependency can
@@ -24,6 +24,7 @@
     # not like empty libraries.
     ['chromeos == 1', {
       'dependencies': [
+        '../ui/display/display.gyp:display',
         '../ui/display/display.gyp:display_test_util',
         '../ui/display/display.gyp:display_types',
       ],
diff --git a/ui/display/display_util.cc b/ui/display/display_util.cc
deleted file mode 100644
index aeaeed9..0000000
--- a/ui/display/display_util.cc
+++ /dev/null
@@ -1,71 +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.
-
-#include "ui/display/display_util.h"
-
-#include "base/logging.h"
-
-namespace ui {
-
-namespace {
-
-// A list of bogus sizes in mm that should be ignored.
-// See crbug.com/136533. The first element maintains the minimum
-// size required to be valid size.
-const int kInvalidDisplaySizeList[][2] = {
-  {40, 30},
-  {50, 40},
-  {160, 90},
-  {160, 100},
-};
-
-// The DPI threshold to detect high density screen.
-// Higher DPI than this will use device_scale_factor=2.
-const unsigned int kHighDensityDPIThresholdSmall = 170;
-
-// The HiDPI threshold for large (usually external) monitors. Lower threshold
-// makes sense for large monitors, because such monitors should be located
-// farther from the user's face usually. See http://crbug.com/348279
-const unsigned int kHighDensityDPIThresholdLarge = 150;
-
-// The width threshold in mm for "large" monitors.
-const int kLargeDisplayWidthThresholdMM = 500;
-
-// 1 inch in mm.
-const float kInchInMm = 25.4f;
-
-}  // namespace
-
-bool IsDisplaySizeBlackListed(const gfx::Size& physical_size) {
-  // Ignore if the reported display is smaller than minimum size.
-  if (physical_size.width() <= kInvalidDisplaySizeList[0][0] ||
-      physical_size.height() <= kInvalidDisplaySizeList[0][1]) {
-    LOG(WARNING) << "Smaller than minimum display size";
-    return true;
-  }
-  for (size_t i = 1; i < arraysize(kInvalidDisplaySizeList); ++i) {
-    const gfx::Size size(kInvalidDisplaySizeList[i][0],
-                         kInvalidDisplaySizeList[i][1]);
-    if (physical_size == size) {
-      LOG(WARNING) << "Black listed display size detected:" << size.ToString();
-      return true;
-    }
-  }
-  return false;
-}
-
-float GetScaleFactor(const gfx::Size& physical_size_in_mm,
-                     const gfx::Size& screen_size_in_pixels) {
-  if (IsDisplaySizeBlackListed(physical_size_in_mm))
-    return 1.0f;
-
-  const unsigned int dpi = (kInchInMm * screen_size_in_pixels.width() /
-                            physical_size_in_mm.width());
-  const unsigned int threshold =
-      (physical_size_in_mm.width() >= kLargeDisplayWidthThresholdMM) ?
-      kHighDensityDPIThresholdLarge : kHighDensityDPIThresholdSmall;
-  return (dpi > threshold) ? 2.0f : 1.0f;
-}
-
-}  // namespace ui
diff --git a/ui/display/display_util.h b/ui/display/display_util.h
deleted file mode 100644
index 0928ef5..0000000
--- a/ui/display/display_util.h
+++ /dev/null
@@ -1,25 +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.
-
-#ifndef UI_DISPLAY_DISPLAY_UTIL_H_
-#define UI_DISPLAY_DISPLAY_UTIL_H_
-
-#include "ui/display/display_export.h"
-#include "ui/gfx/geometry/size.h"
-
-namespace ui {
-
-// Returns true if a given size is in the list of bogus sizes in mm that should
-// be ignored.
-DISPLAY_EXPORT bool IsDisplaySizeBlackListed(const gfx::Size& physical_size);
-
-// Returns the desired device scale factor for the display with the given
-// physical_size and resoultion.
-DISPLAY_EXPORT float GetScaleFactor(
-    const gfx::Size& physical_size_in_mm,
-    const gfx::Size& screen_size_in_pixels);
-
-}  // namespace ui
-
-#endif  // UI_DISPLAY_DISPLAY_UTIL_H_
diff --git a/ui/display/display_util_unittest.cc b/ui/display/display_util_unittest.cc
deleted file mode 100644
index 8b42673..0000000
--- a/ui/display/display_util_unittest.cc
+++ /dev/null
@@ -1,53 +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.
-
-#include "ui/display/display_util.h"
-
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace ui {
-
-TEST(DisplayUtilTest, TestBlackListedDisplay) {
-  EXPECT_TRUE(IsDisplaySizeBlackListed(gfx::Size(10, 10)));
-  EXPECT_TRUE(IsDisplaySizeBlackListed(gfx::Size(40, 30)));
-  EXPECT_TRUE(IsDisplaySizeBlackListed(gfx::Size(50, 40)));
-  EXPECT_TRUE(IsDisplaySizeBlackListed(gfx::Size(160, 90)));
-  EXPECT_TRUE(IsDisplaySizeBlackListed(gfx::Size(160, 100)));
-
-  EXPECT_FALSE(IsDisplaySizeBlackListed(gfx::Size(50, 60)));
-  EXPECT_FALSE(IsDisplaySizeBlackListed(gfx::Size(100, 70)));
-  EXPECT_FALSE(IsDisplaySizeBlackListed(gfx::Size(272, 181)));
-}
-
-TEST(DisplayUtilTest, GetScaleFactor) {
-  // Normal chromebook spec. DPI ~= 130
-  EXPECT_EQ(1.0f, GetScaleFactor(
-      gfx::Size(256, 144), gfx::Size(1366, 768)));
-
-  // HiDPI like Pixel. DPI ~= 240
-  EXPECT_EQ(2.0f, GetScaleFactor(
-      gfx::Size(272, 181), gfx::Size(2560, 1700)));
-
-  // A large external display but normal pixel density. DPI ~= 100
-  EXPECT_EQ(1.0f, GetScaleFactor(
-      gfx::Size(641, 400), gfx::Size(2560, 1600)));
-
-  // A large external display with high pixel density. DPI ~= 157
-  EXPECT_EQ(2.0f, GetScaleFactor(
-      gfx::Size(621, 341), gfx::Size(3840, 2160)));
-
-  // 4K resolution but the display is physically even larger. DPI ~= 114
-  EXPECT_EQ(1.0f, GetScaleFactor(
-      gfx::Size(854, 481), gfx::Size(3840, 2160)));
-
-  // 21.5 inch, 1080p. DPI ~= 102
-  EXPECT_EQ(1.0f, GetScaleFactor(
-      gfx::Size(476, 267), gfx::Size(1920, 1080)));
-
-  // Corner case; slightly higher density but smaller screens. DPI ~= 165
-  EXPECT_EQ(1.0f, GetScaleFactor(
-      gfx::Size(293, 165), gfx::Size(1920, 1080)));
-}
-
-}  // namespace ui
diff --git a/ui/display/edid_parser.cc b/ui/display/edid_parser.cc
deleted file mode 100644
index 686b071..0000000
--- a/ui/display/edid_parser.cc
+++ /dev/null
@@ -1,197 +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.
-
-#include "ui/display/edid_parser.h"
-
-#include <algorithm>
-
-#include "base/hash.h"
-#include "base/strings/string_util.h"
-#include "base/sys_byteorder.h"
-
-namespace ui {
-
-namespace {
-
-// Returns 64-bit persistent ID for the specified manufacturer's ID and
-// product_code_hash, and the index of the output it is connected to.
-// |output_index| is used to distinguish the displays of the same type. For
-// example, swapping two identical display between two outputs will not be
-// treated as swap. The 'serial number' field in EDID isn't used here because
-// it is not guaranteed to have unique number and it may have the same fixed
-// value (like 0).
-int64_t GetID(uint16_t manufacturer_id,
-              uint32_t product_code_hash,
-              uint8_t output_index) {
-  return ((static_cast<int64_t>(manufacturer_id) << 40) |
-          (static_cast<int64_t>(product_code_hash) << 8) | output_index);
-}
-
-}  // namespace
-
-bool GetDisplayIdFromEDID(const std::vector<uint8_t>& edid,
-                          uint8_t output_index,
-                          int64_t* display_id_out) {
-  uint16_t manufacturer_id = 0;
-  std::string product_name;
-
-  // ParseOutputDeviceData fails if it doesn't have product_name.
-  ParseOutputDeviceData(edid, &manufacturer_id, &product_name);
-
-  // Generates product specific value from product_name instead of product code.
-  // See crbug.com/240341
-  uint32_t product_code_hash = product_name.empty() ?
-      0 : base::Hash(product_name);
-  if (manufacturer_id != 0) {
-    // An ID based on display's index will be assigned later if this call
-    // fails.
-    *display_id_out = GetID(
-        manufacturer_id, product_code_hash, output_index);
-    return true;
-  }
-  return false;
-}
-
-bool ParseOutputDeviceData(const std::vector<uint8_t>& edid,
-                           uint16_t* manufacturer_id,
-                           std::string* human_readable_name) {
-  // See http://en.wikipedia.org/wiki/Extended_display_identification_data
-  // for the details of EDID data format.  We use the following data:
-  //   bytes 8-9: manufacturer EISA ID, in big-endian
-  //   bytes 54-125: four descriptors (18-bytes each) which may contain
-  //     the display name.
-  const unsigned int kManufacturerOffset = 8;
-  const unsigned int kManufacturerLength = 2;
-  const unsigned int kDescriptorOffset = 54;
-  const unsigned int kNumDescriptors = 4;
-  const unsigned int kDescriptorLength = 18;
-  // The specifier types.
-  const unsigned char kMonitorNameDescriptor = 0xfc;
-
-  if (manufacturer_id) {
-    if (edid.size() < kManufacturerOffset + kManufacturerLength) {
-      LOG(ERROR) << "too short EDID data: manifacturer id";
-      return false;
-    }
-
-    *manufacturer_id =
-        *reinterpret_cast<const uint16_t*>(&edid[kManufacturerOffset]);
-#if defined(ARCH_CPU_LITTLE_ENDIAN)
-    *manufacturer_id = base::ByteSwap(*manufacturer_id);
-#endif
-  }
-
-  if (!human_readable_name)
-    return true;
-
-  human_readable_name->clear();
-  for (unsigned int i = 0; i < kNumDescriptors; ++i) {
-    if (edid.size() < kDescriptorOffset + (i + 1) * kDescriptorLength)
-      break;
-
-    size_t offset = kDescriptorOffset + i * kDescriptorLength;
-    // If the descriptor contains the display name, it has the following
-    // structure:
-    //   bytes 0-2, 4: \0
-    //   byte 3: descriptor type, defined above.
-    //   bytes 5-17: text data, ending with \r, padding with spaces
-    // we should check bytes 0-2 and 4, since it may have other values in
-    // case that the descriptor contains other type of data.
-    if (edid[offset] == 0 && edid[offset + 1] == 0 && edid[offset + 2] == 0 &&
-        edid[offset + 3] == kMonitorNameDescriptor && edid[offset + 4] == 0) {
-      std::string found_name(reinterpret_cast<const char*>(&edid[offset + 5]),
-                             kDescriptorLength - 5);
-      base::TrimWhitespaceASCII(
-          found_name, base::TRIM_TRAILING, human_readable_name);
-      break;
-    }
-  }
-
-  // Verify if the |human_readable_name| consists of printable characters only.
-  for (size_t i = 0; i < human_readable_name->size(); ++i) {
-    char c = (*human_readable_name)[i];
-    if (!isascii(c) || !isprint(c)) {
-      human_readable_name->clear();
-      LOG(ERROR) << "invalid EDID: human unreadable char in name";
-      return false;
-    }
-  }
-
-  return true;
-}
-
-bool ParseOutputOverscanFlag(const std::vector<uint8_t>& edid,
-                             bool* flag) {
-  // See http://en.wikipedia.org/wiki/Extended_display_identification_data
-  // for the extension format of EDID.  Also see EIA/CEA-861 spec for
-  // the format of the extensions and how video capability is encoded.
-  //  - byte 0: tag.  should be 02h.
-  //  - byte 1: revision.  only cares revision 3 (03h).
-  //  - byte 4-: data block.
-  const unsigned int kExtensionBase = 128;
-  const unsigned int kExtensionSize = 128;
-  const unsigned int kNumExtensionsOffset = 126;
-  const unsigned int kDataBlockOffset = 4;
-  const unsigned char kCEAExtensionTag = '\x02';
-  const unsigned char kExpectedExtensionRevision = '\x03';
-  const unsigned char kExtendedTag = 7;
-  const unsigned char kExtendedVideoCapabilityTag = 0;
-  const unsigned int kPTOverscan = 4;
-  const unsigned int kITOverscan = 2;
-  const unsigned int kCEOverscan = 0;
-
-  if (edid.size() <= kNumExtensionsOffset)
-    return false;
-
-  unsigned char num_extensions = edid[kNumExtensionsOffset];
-
-  for (size_t i = 0; i < num_extensions; ++i) {
-    // Skip parsing the whole extension if size is not enough.
-    if (edid.size() < kExtensionBase + (i + 1) * kExtensionSize)
-      break;
-
-    size_t extension_offset = kExtensionBase + i * kExtensionSize;
-    unsigned char tag = edid[extension_offset];
-    unsigned char revision = edid[extension_offset + 1];
-    if (tag != kCEAExtensionTag || revision != kExpectedExtensionRevision)
-      continue;
-
-    unsigned char timing_descriptors_start = std::min(
-        edid[extension_offset + 2], static_cast<unsigned char>(kExtensionSize));
-
-    for (size_t data_offset = extension_offset + kDataBlockOffset;
-         data_offset < extension_offset + timing_descriptors_start;) {
-      // A data block is encoded as:
-      // - byte 1 high 3 bits: tag. '07' for extended tags.
-      // - byte 1 remaining bits: the length of data block.
-      // - byte 2: the extended tag.  '0' for video capability.
-      // - byte 3: the capability.
-      unsigned char tag = edid[data_offset] >> 5;
-      unsigned char payload_length = edid[data_offset] & 0x1f;
-      if (data_offset + payload_length > edid.size())
-        break;
-
-      if (tag != kExtendedTag || payload_length < 2 ||
-          edid[data_offset + 1] != kExtendedVideoCapabilityTag) {
-        data_offset += payload_length + 1;
-        continue;
-      }
-
-      // The difference between preferred, IT, and CE video formats
-      // doesn't matter. Sets |flag| to true if any of these flags are true.
-      if ((edid[data_offset + 2] & (1 << kPTOverscan)) ||
-          (edid[data_offset + 2] & (1 << kITOverscan)) ||
-          (edid[data_offset + 2] & (1 << kCEOverscan))) {
-        *flag = true;
-      } else {
-        *flag = false;
-      }
-      return true;
-    }
-  }
-
-  return false;
-}
-
-}  // namespace ui
diff --git a/ui/display/edid_parser.h b/ui/display/edid_parser.h
deleted file mode 100644
index 2527abf..0000000
--- a/ui/display/edid_parser.h
+++ /dev/null
@@ -1,40 +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.
-
-#ifndef UI_DISPLAY_EDID_PARSER_H_
-#define UI_DISPLAY_EDID_PARSER_H_
-
-#include <stdint.h>
-
-#include <string>
-#include <vector>
-
-#include "ui/display/display_export.h"
-
-// EDID (Extended Display Identification Data) is a format for monitor
-// metadata. This provides a parser for the data.
-
-namespace ui {
-
-// Generates the display id for the pair of |edid| and |index|, and store in
-// |display_id_out|. Returns true if the display id is successfully generated,
-// or false otherwise.
-DISPLAY_EXPORT bool GetDisplayIdFromEDID(const std::vector<uint8_t>& edid,
-                                         uint8_t index,
-                                         int64_t* display_id_out);
-
-// Parses |edid| as EDID data and stores extracted data into |manufacturer_id|
-// and |human_readable_name| and returns true. NULL can be passed for unwanted
-// output parameters. Some devices (especially internal displays) may not have
-// the field for |human_readable_name|, and it will return true in that case.
-DISPLAY_EXPORT bool ParseOutputDeviceData(const std::vector<uint8_t>& edid,
-                                          uint16_t* manufacturer_id,
-                                          std::string* human_readable_name);
-
-DISPLAY_EXPORT bool ParseOutputOverscanFlag(const std::vector<uint8_t>& edid,
-                                            bool* flag);
-
-}  // namespace ui
-
-#endif // UI_DISPLAY_EDID_PARSER_H_
diff --git a/ui/display/edid_parser_unittest.cc b/ui/display/edid_parser_unittest.cc
deleted file mode 100644
index cac630e..0000000
--- a/ui/display/edid_parser_unittest.cc
+++ /dev/null
@@ -1,229 +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.
-
-#include "ui/display/edid_parser.h"
-
-#include "base/memory/scoped_ptr.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace ui {
-
-namespace {
-
-// Returns the number of characters in the string literal but doesn't count its
-// terminator NULL byte.
-#define charsize(str) (arraysize(str) - 1)
-
-// Sample EDID data extracted from real devices.
-const unsigned char kNormalDisplay[] =
-    "\x00\xff\xff\xff\xff\xff\xff\x00\x22\xf0\x6c\x28\x01\x01\x01\x01"
-    "\x02\x16\x01\x04\xb5\x40\x28\x78\xe2\x8d\x85\xad\x4f\x35\xb1\x25"
-    "\x0e\x50\x54\x00\x00\x00\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01"
-    "\x01\x01\x01\x01\x01\x01\xe2\x68\x00\xa0\xa0\x40\x2e\x60\x30\x20"
-    "\x36\x00\x81\x90\x21\x00\x00\x1a\xbc\x1b\x00\xa0\x50\x20\x17\x30"
-    "\x30\x20\x36\x00\x81\x90\x21\x00\x00\x1a\x00\x00\x00\xfc\x00\x48"
-    "\x50\x20\x5a\x52\x33\x30\x77\x0a\x20\x20\x20\x20\x00\x00\x00\xff"
-    "\x00\x43\x4e\x34\x32\x30\x32\x31\x33\x37\x51\x0a\x20\x20\x00\x71";
-
-const unsigned char kInternalDisplay[] =
-    "\x00\xff\xff\xff\xff\xff\xff\x00\x4c\xa3\x42\x31\x00\x00\x00\x00"
-    "\x00\x15\x01\x03\x80\x1a\x10\x78\x0a\xd3\xe5\x95\x5c\x60\x90\x27"
-    "\x19\x50\x54\x00\x00\x00\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01"
-    "\x01\x01\x01\x01\x01\x01\x9e\x1b\x00\xa0\x50\x20\x12\x30\x10\x30"
-    "\x13\x00\x05\xa3\x10\x00\x00\x19\x00\x00\x00\x0f\x00\x00\x00\x00"
-    "\x00\x00\x00\x00\x00\x23\x87\x02\x64\x00\x00\x00\x00\xfe\x00\x53"
-    "\x41\x4d\x53\x55\x4e\x47\x0a\x20\x20\x20\x20\x20\x00\x00\x00\xfe"
-    "\x00\x31\x32\x31\x41\x54\x31\x31\x2d\x38\x30\x31\x0a\x20\x00\x45";
-
-const unsigned char kOverscanDisplay[] =
-    "\x00\xff\xff\xff\xff\xff\xff\x00\x4c\x2d\xfe\x08\x00\x00\x00\x00"
-    "\x29\x15\x01\x03\x80\x10\x09\x78\x0a\xee\x91\xa3\x54\x4c\x99\x26"
-    "\x0f\x50\x54\xbd\xef\x80\x71\x4f\x81\xc0\x81\x00\x81\x80\x95\x00"
-    "\xa9\xc0\xb3\x00\x01\x01\x02\x3a\x80\x18\x71\x38\x2d\x40\x58\x2c"
-    "\x45\x00\xa0\x5a\x00\x00\x00\x1e\x66\x21\x56\xaa\x51\x00\x1e\x30"
-    "\x46\x8f\x33\x00\xa0\x5a\x00\x00\x00\x1e\x00\x00\x00\xfd\x00\x18"
-    "\x4b\x0f\x51\x17\x00\x0a\x20\x20\x20\x20\x20\x20\x00\x00\x00\xfc"
-    "\x00\x53\x41\x4d\x53\x55\x4e\x47\x0a\x20\x20\x20\x20\x20\x01\x1d"
-    "\x02\x03\x1f\xf1\x47\x90\x04\x05\x03\x20\x22\x07\x23\x09\x07\x07"
-    "\x83\x01\x00\x00\xe2\x00\x0f\x67\x03\x0c\x00\x20\x00\xb8\x2d\x01"
-    "\x1d\x80\x18\x71\x1c\x16\x20\x58\x2c\x25\x00\xa0\x5a\x00\x00\x00"
-    "\x9e\x01\x1d\x00\x72\x51\xd0\x1e\x20\x6e\x28\x55\x00\xa0\x5a\x00"
-    "\x00\x00\x1e\x8c\x0a\xd0\x8a\x20\xe0\x2d\x10\x10\x3e\x96\x00\xa0"
-    "\x5a\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
-    "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
-    "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc6";
-
-// The EDID info misdetecting overscan once. see crbug.com/226318
-const unsigned char kMisdetectedDisplay[] =
-    "\x00\xff\xff\xff\xff\xff\xff\x00\x10\xac\x64\x40\x4c\x30\x30\x32"
-    "\x0c\x15\x01\x03\x80\x40\x28\x78\xea\x8d\x85\xad\x4f\x35\xb1\x25"
-    "\x0e\x50\x54\xa5\x4b\x00\x71\x4f\x81\x00\x81\x80\xd1\x00\xa9\x40"
-    "\x01\x01\x01\x01\x01\x01\x28\x3c\x80\xa0\x70\xb0\x23\x40\x30\x20"
-    "\x36\x00\x81\x91\x21\x00\x00\x1a\x00\x00\x00\xff\x00\x50\x48\x35"
-    "\x4e\x59\x31\x33\x4e\x32\x30\x30\x4c\x0a\x00\x00\x00\xfc\x00\x44"
-    "\x45\x4c\x4c\x20\x55\x33\x30\x31\x31\x0a\x20\x20\x00\x00\x00\xfd"
-    "\x00\x31\x56\x1d\x5e\x12\x00\x0a\x20\x20\x20\x20\x20\x20\x01\x38"
-    "\x02\x03\x29\xf1\x50\x90\x05\x04\x03\x02\x07\x16\x01\x06\x11\x12"
-    "\x15\x13\x14\x1f\x20\x23\x0d\x7f\x07\x83\x0f\x00\x00\x67\x03\x0c"
-    "\x00\x10\x00\x38\x2d\xe3\x05\x03\x01\x02\x3a\x80\x18\x71\x38\x2d"
-    "\x40\x58\x2c\x45\x00\x81\x91\x21\x00\x00\x1e\x01\x1d\x80\x18\x71"
-    "\x1c\x16\x20\x58\x2c\x25\x00\x81\x91\x21\x00\x00\x9e\x01\x1d\x00"
-    "\x72\x51\xd0\x1e\x20\x6e\x28\x55\x00\x81\x91\x21\x00\x00\x1e\x8c"
-    "\x0a\xd0\x8a\x20\xe0\x2d\x10\x10\x3e\x96\x00\x81\x91\x21\x00\x00"
-    "\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x94";
-
-const unsigned char kLP2565A[] =
-    "\x00\xFF\xFF\xFF\xFF\xFF\xFF\x00\x22\xF0\x76\x26\x01\x01\x01\x01"
-    "\x02\x12\x01\x03\x80\x34\x21\x78\xEE\xEF\x95\xA3\x54\x4C\x9B\x26"
-    "\x0F\x50\x54\xA5\x6B\x80\x81\x40\x81\x80\x81\x99\x71\x00\xA9\x00"
-    "\xA9\x40\xB3\x00\xD1\x00\x28\x3C\x80\xA0\x70\xB0\x23\x40\x30\x20"
-    "\x36\x00\x07\x44\x21\x00\x00\x1A\x00\x00\x00\xFD\x00\x30\x55\x1E"
-    "\x5E\x11\x00\x0A\x20\x20\x20\x20\x20\x20\x00\x00\x00\xFC\x00\x48"
-    "\x50\x20\x4C\x50\x32\x34\x36\x35\x0A\x20\x20\x20\x00\x00\x00\xFF"
-    "\x00\x43\x4E\x4B\x38\x30\x32\x30\x34\x48\x4D\x0A\x20\x20\x00\xA4";
-
-const unsigned char kLP2565B[] =
-    "\x00\xFF\xFF\xFF\xFF\xFF\xFF\x00\x22\xF0\x75\x26\x01\x01\x01\x01"
-    "\x02\x12\x01\x03\x6E\x34\x21\x78\xEE\xEF\x95\xA3\x54\x4C\x9B\x26"
-    "\x0F\x50\x54\xA5\x6B\x80\x81\x40\x71\x00\xA9\x00\xA9\x40\xA9\x4F"
-    "\xB3\x00\xD1\xC0\xD1\x00\x28\x3C\x80\xA0\x70\xB0\x23\x40\x30\x20"
-    "\x36\x00\x07\x44\x21\x00\x00\x1A\x00\x00\x00\xFD\x00\x30\x55\x1E"
-    "\x5E\x15\x00\x0A\x20\x20\x20\x20\x20\x20\x00\x00\x00\xFC\x00\x48"
-    "\x50\x20\x4C\x50\x32\x34\x36\x35\x0A\x20\x20\x20\x00\x00\x00\xFF"
-    "\x00\x43\x4E\x4B\x38\x30\x32\x30\x34\x48\x4D\x0A\x20\x20\x00\x45";
-
-}  // namespace
-
-TEST(EDIDParserTest, ParseOverscanFlag) {
-  bool flag = false;
-  std::vector<uint8_t> edid(
-      kNormalDisplay, kNormalDisplay + charsize(kNormalDisplay));
-  EXPECT_FALSE(ParseOutputOverscanFlag(edid, &flag));
-
-  flag = false;
-  edid.assign(kInternalDisplay, kInternalDisplay + charsize(kInternalDisplay));
-  EXPECT_FALSE(ParseOutputOverscanFlag(edid, &flag));
-
-  flag = false;
-  edid.assign(kOverscanDisplay, kOverscanDisplay + charsize(kOverscanDisplay));
-  EXPECT_TRUE(ParseOutputOverscanFlag(edid, &flag));
-  EXPECT_TRUE(flag);
-
-  flag = false;
-  edid.assign(
-      kMisdetectedDisplay, kMisdetectedDisplay + charsize(kMisdetectedDisplay));
-  EXPECT_FALSE(ParseOutputOverscanFlag(edid, &flag));
-
-  flag = false;
-  // Copy |kOverscanDisplay| and set flags to false in it. The overscan flags
-  // are embedded at byte 150 in this specific example. Fix here too when the
-  // contents of kOverscanDisplay is altered.
-  edid.assign(kOverscanDisplay, kOverscanDisplay + charsize(kOverscanDisplay));
-  edid[150] = '\0';
-  EXPECT_TRUE(ParseOutputOverscanFlag(edid, &flag));
-  EXPECT_FALSE(flag);
-}
-
-TEST(EDIDParserTest, ParseBrokenOverscanData) {
-  // Do not fill valid data here because it anyway fails to parse the data.
-  std::vector<uint8_t> data;
-  bool flag = false;
-  EXPECT_FALSE(ParseOutputOverscanFlag(data, &flag));
-  data.assign(126, '\0');
-  EXPECT_FALSE(ParseOutputOverscanFlag(data, &flag));
-
-  // extending data because ParseOutputOverscanFlag() will access the data.
-  data.assign(128, '\0');
-  // The number of CEA extensions is stored at byte 126.
-  data[126] = '\x01';
-  EXPECT_FALSE(ParseOutputOverscanFlag(data, &flag));
-
-  data.assign(150, '\0');
-  data[126] = '\x01';
-  EXPECT_FALSE(ParseOutputOverscanFlag(data, &flag));
-}
-
-TEST(EDIDParserTest, ParseEDID) {
-  uint16_t manufacturer_id = 0;
-  std::string human_readable_name;
-  std::vector<uint8_t> edid(
-      kNormalDisplay, kNormalDisplay + charsize(kNormalDisplay));
-  EXPECT_TRUE(ParseOutputDeviceData(
-      edid, &manufacturer_id, &human_readable_name));
-  EXPECT_EQ(0x22f0u, manufacturer_id);
-  EXPECT_EQ("HP ZR30w", human_readable_name);
-
-  manufacturer_id = 0;
-  human_readable_name.clear();
-  edid.assign(kInternalDisplay, kInternalDisplay + charsize(kInternalDisplay));
-  EXPECT_TRUE(ParseOutputDeviceData(edid, &manufacturer_id, NULL));
-  EXPECT_EQ(0x4ca3u, manufacturer_id);
-  EXPECT_EQ("", human_readable_name);
-
-  // Internal display doesn't have name.
-  EXPECT_TRUE(ParseOutputDeviceData(edid, NULL, &human_readable_name));
-  EXPECT_TRUE(human_readable_name.empty());
-
-  manufacturer_id = 0;
-  human_readable_name.clear();
-  edid.assign(kOverscanDisplay, kOverscanDisplay + charsize(kOverscanDisplay));
-  EXPECT_TRUE(ParseOutputDeviceData(
-      edid, &manufacturer_id, &human_readable_name));
-  EXPECT_EQ(0x4c2du, manufacturer_id);
-  EXPECT_EQ("SAMSUNG", human_readable_name);
-}
-
-TEST(EDIDParserTest, ParseBrokenEDID) {
-  uint16_t manufacturer_id = 0;
-  std::string human_readable_name;
-  std::vector<uint8_t> edid;
-
-  // length == 0
-  EXPECT_FALSE(ParseOutputDeviceData(
-      edid, &manufacturer_id, &human_readable_name));
-
-  // name is broken. Copying kNormalDisplay and substitute its name data by
-  // some control code.
-  edid.assign(kNormalDisplay, kNormalDisplay + charsize(kNormalDisplay));
-
-  // display's name data is embedded in byte 95-107 in this specific example.
-  // Fix here too when the contents of kNormalDisplay is altered.
-  edid[97] = '\x1b';
-  EXPECT_FALSE(ParseOutputDeviceData(
-      edid, &manufacturer_id, &human_readable_name));
-
-  // If |human_readable_name| isn't specified, it skips parsing the name.
-  manufacturer_id = 0;
-  EXPECT_TRUE(ParseOutputDeviceData(edid, &manufacturer_id, NULL));
-  EXPECT_EQ(0x22f0u, manufacturer_id);
-}
-
-TEST(EDIDParserTest, GetDisplayId) {
-  // EDID of kLP2565A and B are slightly different but actually the same device.
-  int64_t id1 = -1;
-  int64_t id2 = -1;
-  std::vector<uint8_t> edid(kLP2565A, kLP2565A + charsize(kLP2565A));
-  EXPECT_TRUE(GetDisplayIdFromEDID(edid, 0, &id1));
-  edid.assign(kLP2565B, kLP2565B + charsize(kLP2565B));
-  EXPECT_TRUE(GetDisplayIdFromEDID(edid, 0, &id2));
-  EXPECT_EQ(id1, id2);
-  EXPECT_NE(-1, id1);
-}
-
-TEST(EDIDParserTest, GetDisplayIdFromInternal) {
-  int64_t id = -1;
-  std::vector<uint8_t> edid(
-      kInternalDisplay, kInternalDisplay + charsize(kInternalDisplay));
-  EXPECT_TRUE(GetDisplayIdFromEDID(edid, 0, &id));
-  EXPECT_NE(-1, id);
-}
-
-TEST(EDIDParserTest, GetDisplayIdFailure) {
-  int64_t id = -1;
-  std::vector<uint8_t> edid;
-  EXPECT_FALSE(GetDisplayIdFromEDID(edid, 0, &id));
-  EXPECT_EQ(-1, id);
-}
-
-}   // namespace ui
diff --git a/ui/display/util/display_util.cc b/ui/display/util/display_util.cc
new file mode 100644
index 0000000..aa23ec6
--- /dev/null
+++ b/ui/display/util/display_util.cc
@@ -0,0 +1,71 @@
+// 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.
+
+#include "ui/display/util/display_util.h"
+
+#include "base/logging.h"
+
+namespace ui {
+
+namespace {
+
+// A list of bogus sizes in mm that should be ignored.
+// See crbug.com/136533. The first element maintains the minimum
+// size required to be valid size.
+const int kInvalidDisplaySizeList[][2] = {
+  {40, 30},
+  {50, 40},
+  {160, 90},
+  {160, 100},
+};
+
+// The DPI threshold to detect high density screen.
+// Higher DPI than this will use device_scale_factor=2.
+const unsigned int kHighDensityDPIThresholdSmall = 170;
+
+// The HiDPI threshold for large (usually external) monitors. Lower threshold
+// makes sense for large monitors, because such monitors should be located
+// farther from the user's face usually. See http://crbug.com/348279
+const unsigned int kHighDensityDPIThresholdLarge = 150;
+
+// The width threshold in mm for "large" monitors.
+const int kLargeDisplayWidthThresholdMM = 500;
+
+// 1 inch in mm.
+const float kInchInMm = 25.4f;
+
+}  // namespace
+
+bool IsDisplaySizeBlackListed(const gfx::Size& physical_size) {
+  // Ignore if the reported display is smaller than minimum size.
+  if (physical_size.width() <= kInvalidDisplaySizeList[0][0] ||
+      physical_size.height() <= kInvalidDisplaySizeList[0][1]) {
+    VLOG(1) << "Smaller than minimum display size";
+    return true;
+  }
+  for (size_t i = 1; i < arraysize(kInvalidDisplaySizeList); ++i) {
+    const gfx::Size size(kInvalidDisplaySizeList[i][0],
+                         kInvalidDisplaySizeList[i][1]);
+    if (physical_size == size) {
+      VLOG(1) << "Black listed display size detected:" << size.ToString();
+      return true;
+    }
+  }
+  return false;
+}
+
+float GetScaleFactor(const gfx::Size& physical_size_in_mm,
+                     const gfx::Size& screen_size_in_pixels) {
+  if (IsDisplaySizeBlackListed(physical_size_in_mm))
+    return 1.0f;
+
+  const unsigned int dpi = (kInchInMm * screen_size_in_pixels.width() /
+                            physical_size_in_mm.width());
+  const unsigned int threshold =
+      (physical_size_in_mm.width() >= kLargeDisplayWidthThresholdMM) ?
+      kHighDensityDPIThresholdLarge : kHighDensityDPIThresholdSmall;
+  return (dpi > threshold) ? 2.0f : 1.0f;
+}
+
+}  // namespace ui
diff --git a/ui/display/util/display_util.h b/ui/display/util/display_util.h
new file mode 100644
index 0000000..012269d
--- /dev/null
+++ b/ui/display/util/display_util.h
@@ -0,0 +1,26 @@
+// 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.
+
+#ifndef UI_DISPLAY_UTIL_DISPLAY_UTIL_H_
+#define UI_DISPLAY_UTIL_DISPLAY_UTIL_H_
+
+#include "ui/display/util/display_util_export.h"
+#include "ui/gfx/geometry/size.h"
+
+namespace ui {
+
+// Returns true if a given size is in the list of bogus sizes in mm that should
+// be ignored.
+DISPLAY_UTIL_EXPORT bool IsDisplaySizeBlackListed(
+    const gfx::Size& physical_size);
+
+// Returns the desired device scale factor for the display with the given
+// physical_size and resoultion.
+DISPLAY_UTIL_EXPORT float GetScaleFactor(
+    const gfx::Size& physical_size_in_mm,
+    const gfx::Size& screen_size_in_pixels);
+
+}  // namespace ui
+
+#endif  // UI_DISPLAY_UTIL_DISPLAY_UTIL_H_
diff --git a/ui/display/util/display_util_export.h b/ui/display/util/display_util_export.h
new file mode 100644
index 0000000..8eeb30d
--- /dev/null
+++ b/ui/display/util/display_util_export.h
@@ -0,0 +1,37 @@
+// 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.
+
+#ifndef UI_DISPLAY_UTIL_DISPLAY_UTIL_EXPORT_H_
+#define UI_DISPLAY_UTIL_DISPLAY_UTIL_EXPORT_H_
+
+// Defines DISPLAY_UTIL_EXPORT so that functionality implemented by the
+// display_util module can be exported to consumers.
+
+#if defined(COMPONENT_BUILD)
+
+#if defined(WIN32)
+
+#if defined(DISPLAY_UTIL_IMPLEMENTATION)
+#define DISPLAY_UTIL_EXPORT __declspec(dllexport)
+#else
+#define DISPLAY_UTIL_EXPORT __declspec(dllimport)
+#endif
+
+#else  // !defined(WIN32)
+
+#if defined(DISPLAY_UTIL_IMPLEMENTATION)
+#define DISPLAY_UTIL_EXPORT __attribute__((visibility("default")))
+#else
+#define DISPLAY_UTIL_EXPORT
+#endif
+
+#endif
+
+#else  // !defined(COMPONENT_BUILD)
+
+#define DISPLAY_UTIL_EXPORT
+
+#endif
+
+#endif  // UI_DISPLAY_UTIL_DISPLAY_UTIL_EXPORT_H_
diff --git a/ui/display/util/display_util_unittest.cc b/ui/display/util/display_util_unittest.cc
new file mode 100644
index 0000000..ddb4a1c
--- /dev/null
+++ b/ui/display/util/display_util_unittest.cc
@@ -0,0 +1,53 @@
+// 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.
+
+#include "ui/display/util/display_util.h"
+
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace ui {
+
+TEST(DisplayUtilTest, TestBlackListedDisplay) {
+  EXPECT_TRUE(IsDisplaySizeBlackListed(gfx::Size(10, 10)));
+  EXPECT_TRUE(IsDisplaySizeBlackListed(gfx::Size(40, 30)));
+  EXPECT_TRUE(IsDisplaySizeBlackListed(gfx::Size(50, 40)));
+  EXPECT_TRUE(IsDisplaySizeBlackListed(gfx::Size(160, 90)));
+  EXPECT_TRUE(IsDisplaySizeBlackListed(gfx::Size(160, 100)));
+
+  EXPECT_FALSE(IsDisplaySizeBlackListed(gfx::Size(50, 60)));
+  EXPECT_FALSE(IsDisplaySizeBlackListed(gfx::Size(100, 70)));
+  EXPECT_FALSE(IsDisplaySizeBlackListed(gfx::Size(272, 181)));
+}
+
+TEST(DisplayUtilTest, GetScaleFactor) {
+  // Normal chromebook spec. DPI ~= 130
+  EXPECT_EQ(1.0f, GetScaleFactor(
+      gfx::Size(256, 144), gfx::Size(1366, 768)));
+
+  // HiDPI like Pixel. DPI ~= 240
+  EXPECT_EQ(2.0f, GetScaleFactor(
+      gfx::Size(272, 181), gfx::Size(2560, 1700)));
+
+  // A large external display but normal pixel density. DPI ~= 100
+  EXPECT_EQ(1.0f, GetScaleFactor(
+      gfx::Size(641, 400), gfx::Size(2560, 1600)));
+
+  // A large external display with high pixel density. DPI ~= 157
+  EXPECT_EQ(2.0f, GetScaleFactor(
+      gfx::Size(621, 341), gfx::Size(3840, 2160)));
+
+  // 4K resolution but the display is physically even larger. DPI ~= 114
+  EXPECT_EQ(1.0f, GetScaleFactor(
+      gfx::Size(854, 481), gfx::Size(3840, 2160)));
+
+  // 21.5 inch, 1080p. DPI ~= 102
+  EXPECT_EQ(1.0f, GetScaleFactor(
+      gfx::Size(476, 267), gfx::Size(1920, 1080)));
+
+  // Corner case; slightly higher density but smaller screens. DPI ~= 165
+  EXPECT_EQ(1.0f, GetScaleFactor(
+      gfx::Size(293, 165), gfx::Size(1920, 1080)));
+}
+
+}  // namespace ui
diff --git a/ui/display/util/edid_parser.cc b/ui/display/util/edid_parser.cc
new file mode 100644
index 0000000..b95eef4
--- /dev/null
+++ b/ui/display/util/edid_parser.cc
@@ -0,0 +1,197 @@
+// 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.
+
+#include "ui/display/util/edid_parser.h"
+
+#include <algorithm>
+
+#include "base/hash.h"
+#include "base/strings/string_util.h"
+#include "base/sys_byteorder.h"
+
+namespace ui {
+
+namespace {
+
+// Returns 64-bit persistent ID for the specified manufacturer's ID and
+// product_code_hash, and the index of the output it is connected to.
+// |output_index| is used to distinguish the displays of the same type. For
+// example, swapping two identical display between two outputs will not be
+// treated as swap. The 'serial number' field in EDID isn't used here because
+// it is not guaranteed to have unique number and it may have the same fixed
+// value (like 0).
+int64_t GetID(uint16_t manufacturer_id,
+              uint32_t product_code_hash,
+              uint8_t output_index) {
+  return ((static_cast<int64_t>(manufacturer_id) << 40) |
+          (static_cast<int64_t>(product_code_hash) << 8) | output_index);
+}
+
+}  // namespace
+
+bool GetDisplayIdFromEDID(const std::vector<uint8_t>& edid,
+                          uint8_t output_index,
+                          int64_t* display_id_out) {
+  uint16_t manufacturer_id = 0;
+  std::string product_name;
+
+  // ParseOutputDeviceData fails if it doesn't have product_name.
+  ParseOutputDeviceData(edid, &manufacturer_id, &product_name);
+
+  // Generates product specific value from product_name instead of product code.
+  // See crbug.com/240341
+  uint32_t product_code_hash = product_name.empty() ?
+      0 : base::Hash(product_name);
+  if (manufacturer_id != 0) {
+    // An ID based on display's index will be assigned later if this call
+    // fails.
+    *display_id_out = GetID(
+        manufacturer_id, product_code_hash, output_index);
+    return true;
+  }
+  return false;
+}
+
+bool ParseOutputDeviceData(const std::vector<uint8_t>& edid,
+                           uint16_t* manufacturer_id,
+                           std::string* human_readable_name) {
+  // See http://en.wikipedia.org/wiki/Extended_display_identification_data
+  // for the details of EDID data format.  We use the following data:
+  //   bytes 8-9: manufacturer EISA ID, in big-endian
+  //   bytes 54-125: four descriptors (18-bytes each) which may contain
+  //     the display name.
+  const unsigned int kManufacturerOffset = 8;
+  const unsigned int kManufacturerLength = 2;
+  const unsigned int kDescriptorOffset = 54;
+  const unsigned int kNumDescriptors = 4;
+  const unsigned int kDescriptorLength = 18;
+  // The specifier types.
+  const unsigned char kMonitorNameDescriptor = 0xfc;
+
+  if (manufacturer_id) {
+    if (edid.size() < kManufacturerOffset + kManufacturerLength) {
+      LOG(ERROR) << "too short EDID data: manifacturer id";
+      return false;
+    }
+
+    *manufacturer_id =
+        *reinterpret_cast<const uint16_t*>(&edid[kManufacturerOffset]);
+#if defined(ARCH_CPU_LITTLE_ENDIAN)
+    *manufacturer_id = base::ByteSwap(*manufacturer_id);
+#endif
+  }
+
+  if (!human_readable_name)
+    return true;
+
+  human_readable_name->clear();
+  for (unsigned int i = 0; i < kNumDescriptors; ++i) {
+    if (edid.size() < kDescriptorOffset + (i + 1) * kDescriptorLength)
+      break;
+
+    size_t offset = kDescriptorOffset + i * kDescriptorLength;
+    // If the descriptor contains the display name, it has the following
+    // structure:
+    //   bytes 0-2, 4: \0
+    //   byte 3: descriptor type, defined above.
+    //   bytes 5-17: text data, ending with \r, padding with spaces
+    // we should check bytes 0-2 and 4, since it may have other values in
+    // case that the descriptor contains other type of data.
+    if (edid[offset] == 0 && edid[offset + 1] == 0 && edid[offset + 2] == 0 &&
+        edid[offset + 3] == kMonitorNameDescriptor && edid[offset + 4] == 0) {
+      std::string found_name(reinterpret_cast<const char*>(&edid[offset + 5]),
+                             kDescriptorLength - 5);
+      base::TrimWhitespaceASCII(
+          found_name, base::TRIM_TRAILING, human_readable_name);
+      break;
+    }
+  }
+
+  // Verify if the |human_readable_name| consists of printable characters only.
+  for (size_t i = 0; i < human_readable_name->size(); ++i) {
+    char c = (*human_readable_name)[i];
+    if (!isascii(c) || !isprint(c)) {
+      human_readable_name->clear();
+      LOG(ERROR) << "invalid EDID: human unreadable char in name";
+      return false;
+    }
+  }
+
+  return true;
+}
+
+bool ParseOutputOverscanFlag(const std::vector<uint8_t>& edid,
+                             bool* flag) {
+  // See http://en.wikipedia.org/wiki/Extended_display_identification_data
+  // for the extension format of EDID.  Also see EIA/CEA-861 spec for
+  // the format of the extensions and how video capability is encoded.
+  //  - byte 0: tag.  should be 02h.
+  //  - byte 1: revision.  only cares revision 3 (03h).
+  //  - byte 4-: data block.
+  const unsigned int kExtensionBase = 128;
+  const unsigned int kExtensionSize = 128;
+  const unsigned int kNumExtensionsOffset = 126;
+  const unsigned int kDataBlockOffset = 4;
+  const unsigned char kCEAExtensionTag = '\x02';
+  const unsigned char kExpectedExtensionRevision = '\x03';
+  const unsigned char kExtendedTag = 7;
+  const unsigned char kExtendedVideoCapabilityTag = 0;
+  const unsigned int kPTOverscan = 4;
+  const unsigned int kITOverscan = 2;
+  const unsigned int kCEOverscan = 0;
+
+  if (edid.size() <= kNumExtensionsOffset)
+    return false;
+
+  unsigned char num_extensions = edid[kNumExtensionsOffset];
+
+  for (size_t i = 0; i < num_extensions; ++i) {
+    // Skip parsing the whole extension if size is not enough.
+    if (edid.size() < kExtensionBase + (i + 1) * kExtensionSize)
+      break;
+
+    size_t extension_offset = kExtensionBase + i * kExtensionSize;
+    unsigned char tag = edid[extension_offset];
+    unsigned char revision = edid[extension_offset + 1];
+    if (tag != kCEAExtensionTag || revision != kExpectedExtensionRevision)
+      continue;
+
+    unsigned char timing_descriptors_start = std::min(
+        edid[extension_offset + 2], static_cast<unsigned char>(kExtensionSize));
+
+    for (size_t data_offset = extension_offset + kDataBlockOffset;
+         data_offset < extension_offset + timing_descriptors_start;) {
+      // A data block is encoded as:
+      // - byte 1 high 3 bits: tag. '07' for extended tags.
+      // - byte 1 remaining bits: the length of data block.
+      // - byte 2: the extended tag.  '0' for video capability.
+      // - byte 3: the capability.
+      unsigned char tag = edid[data_offset] >> 5;
+      unsigned char payload_length = edid[data_offset] & 0x1f;
+      if (data_offset + payload_length > edid.size())
+        break;
+
+      if (tag != kExtendedTag || payload_length < 2 ||
+          edid[data_offset + 1] != kExtendedVideoCapabilityTag) {
+        data_offset += payload_length + 1;
+        continue;
+      }
+
+      // The difference between preferred, IT, and CE video formats
+      // doesn't matter. Sets |flag| to true if any of these flags are true.
+      if ((edid[data_offset + 2] & (1 << kPTOverscan)) ||
+          (edid[data_offset + 2] & (1 << kITOverscan)) ||
+          (edid[data_offset + 2] & (1 << kCEOverscan))) {
+        *flag = true;
+      } else {
+        *flag = false;
+      }
+      return true;
+    }
+  }
+
+  return false;
+}
+
+}  // namespace ui
diff --git a/ui/display/util/edid_parser.h b/ui/display/util/edid_parser.h
new file mode 100644
index 0000000..4f12d40
--- /dev/null
+++ b/ui/display/util/edid_parser.h
@@ -0,0 +1,42 @@
+// 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.
+
+#ifndef UI_DISPLAY_UTIL_EDID_PARSER_H_
+#define UI_DISPLAY_UTIL_EDID_PARSER_H_
+
+#include <stdint.h>
+
+#include <string>
+#include <vector>
+
+#include "ui/display/util/display_util_export.h"
+
+// EDID (Extended Display Identification Data) is a format for monitor
+// metadata. This provides a parser for the data.
+
+namespace ui {
+
+// Generates the display id for the pair of |edid| and |index|, and store in
+// |display_id_out|. Returns true if the display id is successfully generated,
+// or false otherwise.
+DISPLAY_UTIL_EXPORT bool GetDisplayIdFromEDID(const std::vector<uint8_t>& edid,
+                                              uint8_t index,
+                                              int64_t* display_id_out);
+
+// Parses |edid| as EDID data and stores extracted data into |manufacturer_id|
+// and |human_readable_name| and returns true. NULL can be passed for unwanted
+// output parameters. Some devices (especially internal displays) may not have
+// the field for |human_readable_name|, and it will return true in that case.
+DISPLAY_UTIL_EXPORT bool ParseOutputDeviceData(
+    const std::vector<uint8_t>& edid,
+    uint16_t* manufacturer_id,
+    std::string* human_readable_name);
+
+DISPLAY_UTIL_EXPORT bool ParseOutputOverscanFlag(
+    const std::vector<uint8_t>& edid,
+    bool* flag);
+
+}  // namespace ui
+
+#endif // UI_DISPLAY_UTIL_EDID_PARSER_H_
diff --git a/ui/display/util/edid_parser_unittest.cc b/ui/display/util/edid_parser_unittest.cc
new file mode 100644
index 0000000..ef55bd6
--- /dev/null
+++ b/ui/display/util/edid_parser_unittest.cc
@@ -0,0 +1,229 @@
+// 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.
+
+#include "ui/display/util/edid_parser.h"
+
+#include "base/memory/scoped_ptr.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace ui {
+
+namespace {
+
+// Returns the number of characters in the string literal but doesn't count its
+// terminator NULL byte.
+#define charsize(str) (arraysize(str) - 1)
+
+// Sample EDID data extracted from real devices.
+const unsigned char kNormalDisplay[] =
+    "\x00\xff\xff\xff\xff\xff\xff\x00\x22\xf0\x6c\x28\x01\x01\x01\x01"
+    "\x02\x16\x01\x04\xb5\x40\x28\x78\xe2\x8d\x85\xad\x4f\x35\xb1\x25"
+    "\x0e\x50\x54\x00\x00\x00\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01"
+    "\x01\x01\x01\x01\x01\x01\xe2\x68\x00\xa0\xa0\x40\x2e\x60\x30\x20"
+    "\x36\x00\x81\x90\x21\x00\x00\x1a\xbc\x1b\x00\xa0\x50\x20\x17\x30"
+    "\x30\x20\x36\x00\x81\x90\x21\x00\x00\x1a\x00\x00\x00\xfc\x00\x48"
+    "\x50\x20\x5a\x52\x33\x30\x77\x0a\x20\x20\x20\x20\x00\x00\x00\xff"
+    "\x00\x43\x4e\x34\x32\x30\x32\x31\x33\x37\x51\x0a\x20\x20\x00\x71";
+
+const unsigned char kInternalDisplay[] =
+    "\x00\xff\xff\xff\xff\xff\xff\x00\x4c\xa3\x42\x31\x00\x00\x00\x00"
+    "\x00\x15\x01\x03\x80\x1a\x10\x78\x0a\xd3\xe5\x95\x5c\x60\x90\x27"
+    "\x19\x50\x54\x00\x00\x00\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01"
+    "\x01\x01\x01\x01\x01\x01\x9e\x1b\x00\xa0\x50\x20\x12\x30\x10\x30"
+    "\x13\x00\x05\xa3\x10\x00\x00\x19\x00\x00\x00\x0f\x00\x00\x00\x00"
+    "\x00\x00\x00\x00\x00\x23\x87\x02\x64\x00\x00\x00\x00\xfe\x00\x53"
+    "\x41\x4d\x53\x55\x4e\x47\x0a\x20\x20\x20\x20\x20\x00\x00\x00\xfe"
+    "\x00\x31\x32\x31\x41\x54\x31\x31\x2d\x38\x30\x31\x0a\x20\x00\x45";
+
+const unsigned char kOverscanDisplay[] =
+    "\x00\xff\xff\xff\xff\xff\xff\x00\x4c\x2d\xfe\x08\x00\x00\x00\x00"
+    "\x29\x15\x01\x03\x80\x10\x09\x78\x0a\xee\x91\xa3\x54\x4c\x99\x26"
+    "\x0f\x50\x54\xbd\xef\x80\x71\x4f\x81\xc0\x81\x00\x81\x80\x95\x00"
+    "\xa9\xc0\xb3\x00\x01\x01\x02\x3a\x80\x18\x71\x38\x2d\x40\x58\x2c"
+    "\x45\x00\xa0\x5a\x00\x00\x00\x1e\x66\x21\x56\xaa\x51\x00\x1e\x30"
+    "\x46\x8f\x33\x00\xa0\x5a\x00\x00\x00\x1e\x00\x00\x00\xfd\x00\x18"
+    "\x4b\x0f\x51\x17\x00\x0a\x20\x20\x20\x20\x20\x20\x00\x00\x00\xfc"
+    "\x00\x53\x41\x4d\x53\x55\x4e\x47\x0a\x20\x20\x20\x20\x20\x01\x1d"
+    "\x02\x03\x1f\xf1\x47\x90\x04\x05\x03\x20\x22\x07\x23\x09\x07\x07"
+    "\x83\x01\x00\x00\xe2\x00\x0f\x67\x03\x0c\x00\x20\x00\xb8\x2d\x01"
+    "\x1d\x80\x18\x71\x1c\x16\x20\x58\x2c\x25\x00\xa0\x5a\x00\x00\x00"
+    "\x9e\x01\x1d\x00\x72\x51\xd0\x1e\x20\x6e\x28\x55\x00\xa0\x5a\x00"
+    "\x00\x00\x1e\x8c\x0a\xd0\x8a\x20\xe0\x2d\x10\x10\x3e\x96\x00\xa0"
+    "\x5a\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+    "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+    "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc6";
+
+// The EDID info misdetecting overscan once. see crbug.com/226318
+const unsigned char kMisdetectedDisplay[] =
+    "\x00\xff\xff\xff\xff\xff\xff\x00\x10\xac\x64\x40\x4c\x30\x30\x32"
+    "\x0c\x15\x01\x03\x80\x40\x28\x78\xea\x8d\x85\xad\x4f\x35\xb1\x25"
+    "\x0e\x50\x54\xa5\x4b\x00\x71\x4f\x81\x00\x81\x80\xd1\x00\xa9\x40"
+    "\x01\x01\x01\x01\x01\x01\x28\x3c\x80\xa0\x70\xb0\x23\x40\x30\x20"
+    "\x36\x00\x81\x91\x21\x00\x00\x1a\x00\x00\x00\xff\x00\x50\x48\x35"
+    "\x4e\x59\x31\x33\x4e\x32\x30\x30\x4c\x0a\x00\x00\x00\xfc\x00\x44"
+    "\x45\x4c\x4c\x20\x55\x33\x30\x31\x31\x0a\x20\x20\x00\x00\x00\xfd"
+    "\x00\x31\x56\x1d\x5e\x12\x00\x0a\x20\x20\x20\x20\x20\x20\x01\x38"
+    "\x02\x03\x29\xf1\x50\x90\x05\x04\x03\x02\x07\x16\x01\x06\x11\x12"
+    "\x15\x13\x14\x1f\x20\x23\x0d\x7f\x07\x83\x0f\x00\x00\x67\x03\x0c"
+    "\x00\x10\x00\x38\x2d\xe3\x05\x03\x01\x02\x3a\x80\x18\x71\x38\x2d"
+    "\x40\x58\x2c\x45\x00\x81\x91\x21\x00\x00\x1e\x01\x1d\x80\x18\x71"
+    "\x1c\x16\x20\x58\x2c\x25\x00\x81\x91\x21\x00\x00\x9e\x01\x1d\x00"
+    "\x72\x51\xd0\x1e\x20\x6e\x28\x55\x00\x81\x91\x21\x00\x00\x1e\x8c"
+    "\x0a\xd0\x8a\x20\xe0\x2d\x10\x10\x3e\x96\x00\x81\x91\x21\x00\x00"
+    "\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x94";
+
+const unsigned char kLP2565A[] =
+    "\x00\xFF\xFF\xFF\xFF\xFF\xFF\x00\x22\xF0\x76\x26\x01\x01\x01\x01"
+    "\x02\x12\x01\x03\x80\x34\x21\x78\xEE\xEF\x95\xA3\x54\x4C\x9B\x26"
+    "\x0F\x50\x54\xA5\x6B\x80\x81\x40\x81\x80\x81\x99\x71\x00\xA9\x00"
+    "\xA9\x40\xB3\x00\xD1\x00\x28\x3C\x80\xA0\x70\xB0\x23\x40\x30\x20"
+    "\x36\x00\x07\x44\x21\x00\x00\x1A\x00\x00\x00\xFD\x00\x30\x55\x1E"
+    "\x5E\x11\x00\x0A\x20\x20\x20\x20\x20\x20\x00\x00\x00\xFC\x00\x48"
+    "\x50\x20\x4C\x50\x32\x34\x36\x35\x0A\x20\x20\x20\x00\x00\x00\xFF"
+    "\x00\x43\x4E\x4B\x38\x30\x32\x30\x34\x48\x4D\x0A\x20\x20\x00\xA4";
+
+const unsigned char kLP2565B[] =
+    "\x00\xFF\xFF\xFF\xFF\xFF\xFF\x00\x22\xF0\x75\x26\x01\x01\x01\x01"
+    "\x02\x12\x01\x03\x6E\x34\x21\x78\xEE\xEF\x95\xA3\x54\x4C\x9B\x26"
+    "\x0F\x50\x54\xA5\x6B\x80\x81\x40\x71\x00\xA9\x00\xA9\x40\xA9\x4F"
+    "\xB3\x00\xD1\xC0\xD1\x00\x28\x3C\x80\xA0\x70\xB0\x23\x40\x30\x20"
+    "\x36\x00\x07\x44\x21\x00\x00\x1A\x00\x00\x00\xFD\x00\x30\x55\x1E"
+    "\x5E\x15\x00\x0A\x20\x20\x20\x20\x20\x20\x00\x00\x00\xFC\x00\x48"
+    "\x50\x20\x4C\x50\x32\x34\x36\x35\x0A\x20\x20\x20\x00\x00\x00\xFF"
+    "\x00\x43\x4E\x4B\x38\x30\x32\x30\x34\x48\x4D\x0A\x20\x20\x00\x45";
+
+}  // namespace
+
+TEST(EDIDParserTest, ParseOverscanFlag) {
+  bool flag = false;
+  std::vector<uint8_t> edid(
+      kNormalDisplay, kNormalDisplay + charsize(kNormalDisplay));
+  EXPECT_FALSE(ParseOutputOverscanFlag(edid, &flag));
+
+  flag = false;
+  edid.assign(kInternalDisplay, kInternalDisplay + charsize(kInternalDisplay));
+  EXPECT_FALSE(ParseOutputOverscanFlag(edid, &flag));
+
+  flag = false;
+  edid.assign(kOverscanDisplay, kOverscanDisplay + charsize(kOverscanDisplay));
+  EXPECT_TRUE(ParseOutputOverscanFlag(edid, &flag));
+  EXPECT_TRUE(flag);
+
+  flag = false;
+  edid.assign(
+      kMisdetectedDisplay, kMisdetectedDisplay + charsize(kMisdetectedDisplay));
+  EXPECT_FALSE(ParseOutputOverscanFlag(edid, &flag));
+
+  flag = false;
+  // Copy |kOverscanDisplay| and set flags to false in it. The overscan flags
+  // are embedded at byte 150 in this specific example. Fix here too when the
+  // contents of kOverscanDisplay is altered.
+  edid.assign(kOverscanDisplay, kOverscanDisplay + charsize(kOverscanDisplay));
+  edid[150] = '\0';
+  EXPECT_TRUE(ParseOutputOverscanFlag(edid, &flag));
+  EXPECT_FALSE(flag);
+}
+
+TEST(EDIDParserTest, ParseBrokenOverscanData) {
+  // Do not fill valid data here because it anyway fails to parse the data.
+  std::vector<uint8_t> data;
+  bool flag = false;
+  EXPECT_FALSE(ParseOutputOverscanFlag(data, &flag));
+  data.assign(126, '\0');
+  EXPECT_FALSE(ParseOutputOverscanFlag(data, &flag));
+
+  // extending data because ParseOutputOverscanFlag() will access the data.
+  data.assign(128, '\0');
+  // The number of CEA extensions is stored at byte 126.
+  data[126] = '\x01';
+  EXPECT_FALSE(ParseOutputOverscanFlag(data, &flag));
+
+  data.assign(150, '\0');
+  data[126] = '\x01';
+  EXPECT_FALSE(ParseOutputOverscanFlag(data, &flag));
+}
+
+TEST(EDIDParserTest, ParseEDID) {
+  uint16_t manufacturer_id = 0;
+  std::string human_readable_name;
+  std::vector<uint8_t> edid(
+      kNormalDisplay, kNormalDisplay + charsize(kNormalDisplay));
+  EXPECT_TRUE(ParseOutputDeviceData(
+      edid, &manufacturer_id, &human_readable_name));
+  EXPECT_EQ(0x22f0u, manufacturer_id);
+  EXPECT_EQ("HP ZR30w", human_readable_name);
+
+  manufacturer_id = 0;
+  human_readable_name.clear();
+  edid.assign(kInternalDisplay, kInternalDisplay + charsize(kInternalDisplay));
+  EXPECT_TRUE(ParseOutputDeviceData(edid, &manufacturer_id, NULL));
+  EXPECT_EQ(0x4ca3u, manufacturer_id);
+  EXPECT_EQ("", human_readable_name);
+
+  // Internal display doesn't have name.
+  EXPECT_TRUE(ParseOutputDeviceData(edid, NULL, &human_readable_name));
+  EXPECT_TRUE(human_readable_name.empty());
+
+  manufacturer_id = 0;
+  human_readable_name.clear();
+  edid.assign(kOverscanDisplay, kOverscanDisplay + charsize(kOverscanDisplay));
+  EXPECT_TRUE(ParseOutputDeviceData(
+      edid, &manufacturer_id, &human_readable_name));
+  EXPECT_EQ(0x4c2du, manufacturer_id);
+  EXPECT_EQ("SAMSUNG", human_readable_name);
+}
+
+TEST(EDIDParserTest, ParseBrokenEDID) {
+  uint16_t manufacturer_id = 0;
+  std::string human_readable_name;
+  std::vector<uint8_t> edid;
+
+  // length == 0
+  EXPECT_FALSE(ParseOutputDeviceData(
+      edid, &manufacturer_id, &human_readable_name));
+
+  // name is broken. Copying kNormalDisplay and substitute its name data by
+  // some control code.
+  edid.assign(kNormalDisplay, kNormalDisplay + charsize(kNormalDisplay));
+
+  // display's name data is embedded in byte 95-107 in this specific example.
+  // Fix here too when the contents of kNormalDisplay is altered.
+  edid[97] = '\x1b';
+  EXPECT_FALSE(ParseOutputDeviceData(
+      edid, &manufacturer_id, &human_readable_name));
+
+  // If |human_readable_name| isn't specified, it skips parsing the name.
+  manufacturer_id = 0;
+  EXPECT_TRUE(ParseOutputDeviceData(edid, &manufacturer_id, NULL));
+  EXPECT_EQ(0x22f0u, manufacturer_id);
+}
+
+TEST(EDIDParserTest, GetDisplayId) {
+  // EDID of kLP2565A and B are slightly different but actually the same device.
+  int64_t id1 = -1;
+  int64_t id2 = -1;
+  std::vector<uint8_t> edid(kLP2565A, kLP2565A + charsize(kLP2565A));
+  EXPECT_TRUE(GetDisplayIdFromEDID(edid, 0, &id1));
+  edid.assign(kLP2565B, kLP2565B + charsize(kLP2565B));
+  EXPECT_TRUE(GetDisplayIdFromEDID(edid, 0, &id2));
+  EXPECT_EQ(id1, id2);
+  EXPECT_NE(-1, id1);
+}
+
+TEST(EDIDParserTest, GetDisplayIdFromInternal) {
+  int64_t id = -1;
+  std::vector<uint8_t> edid(
+      kInternalDisplay, kInternalDisplay + charsize(kInternalDisplay));
+  EXPECT_TRUE(GetDisplayIdFromEDID(edid, 0, &id));
+  EXPECT_NE(-1, id);
+}
+
+TEST(EDIDParserTest, GetDisplayIdFailure) {
+  int64_t id = -1;
+  std::vector<uint8_t> edid;
+  EXPECT_FALSE(GetDisplayIdFromEDID(edid, 0, &id));
+  EXPECT_EQ(-1, id);
+}
+
+}   // namespace ui
diff --git a/ui/display/x11/DEPS b/ui/display/util/x11/DEPS
similarity index 100%
rename from ui/display/x11/DEPS
rename to ui/display/util/x11/DEPS
diff --git a/ui/display/util/x11/edid_parser_x11.cc b/ui/display/util/x11/edid_parser_x11.cc
new file mode 100644
index 0000000..407639b
--- /dev/null
+++ b/ui/display/util/x11/edid_parser_x11.cc
@@ -0,0 +1,122 @@
+// 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.
+
+#include "ui/display/util/x11/edid_parser_x11.h"
+
+#include <X11/extensions/Xrandr.h>
+#include <X11/Xatom.h>
+#include <X11/Xlib.h>
+
+#include "base/strings/string_util.h"
+#include "ui/display/util/edid_parser.h"
+#include "ui/gfx/x/x11_types.h"
+
+namespace ui {
+
+namespace {
+
+bool IsRandRAvailable() {
+  int randr_version_major = 0;
+  int randr_version_minor = 0;
+  static bool is_randr_available = XRRQueryVersion(
+      gfx::GetXDisplay(), &randr_version_major, &randr_version_minor);
+  return is_randr_available;
+}
+
+// Get the EDID data from the |output| and stores to |edid|.
+// Returns true if EDID property is successfully obtained. Otherwise returns
+// false and does not touch |edid|.
+bool GetEDIDProperty(XID output, std::vector<uint8_t>* edid) {
+  if (!IsRandRAvailable())
+    return false;
+
+  Display* display = gfx::GetXDisplay();
+
+  static Atom edid_property = XInternAtom(
+      gfx::GetXDisplay(),
+      RR_PROPERTY_RANDR_EDID, false);
+
+  bool has_edid_property = false;
+  int num_properties = 0;
+  Atom* properties = XRRListOutputProperties(display, output, &num_properties);
+  for (int i = 0; i < num_properties; ++i) {
+    if (properties[i] == edid_property) {
+      has_edid_property = true;
+      break;
+    }
+  }
+  XFree(properties);
+  if (!has_edid_property)
+    return false;
+
+  Atom actual_type;
+  int actual_format;
+  unsigned long bytes_after;
+  unsigned long nitems = 0;
+  unsigned char* prop = NULL;
+  XRRGetOutputProperty(display,
+                       output,
+                       edid_property,
+                       0,                // offset
+                       128,              // length
+                       false,            // _delete
+                       false,            // pending
+                       AnyPropertyType,  // req_type
+                       &actual_type,
+                       &actual_format,
+                       &nitems,
+                       &bytes_after,
+                       &prop);
+  DCHECK_EQ(XA_INTEGER, actual_type);
+  DCHECK_EQ(8, actual_format);
+  edid->assign(prop, prop + nitems);
+  XFree(prop);
+  return true;
+}
+
+// Gets some useful data from the specified output device, such like
+// manufacturer's ID, product code, and human readable name. Returns false if it
+// fails to get those data and doesn't touch manufacturer ID/product code/name.
+// NULL can be passed for unwanted output parameters.
+bool GetOutputDeviceData(XID output,
+                         uint16_t* manufacturer_id,
+                         std::string* human_readable_name) {
+  std::vector<uint8_t> edid;
+  if (!GetEDIDProperty(output, &edid))
+    return false;
+
+  bool result = ParseOutputDeviceData(
+      edid, manufacturer_id, human_readable_name);
+  return result;
+}
+
+}  // namespace
+
+bool GetDisplayId(XID output_id,
+                  uint8_t output_index,
+                  int64_t* display_id_out) {
+  std::vector<uint8_t> edid;
+  if (!GetEDIDProperty(output_id, &edid))
+    return false;
+
+  bool result = GetDisplayIdFromEDID(edid, output_index, display_id_out);
+  return result;
+}
+
+std::string GetDisplayName(RROutput output) {
+  std::string display_name;
+  GetOutputDeviceData(output, NULL, &display_name);
+  return display_name;
+}
+
+bool GetOutputOverscanFlag(RROutput output, bool* flag) {
+  std::vector<uint8_t> edid;
+  if (!GetEDIDProperty(output, &edid))
+    return false;
+
+  bool found = ParseOutputOverscanFlag(edid, flag);
+  return found;
+}
+
+}  // namespace ui
diff --git a/ui/display/util/x11/edid_parser_x11.h b/ui/display/util/x11/edid_parser_x11.h
new file mode 100644
index 0000000..55048e6
--- /dev/null
+++ b/ui/display/util/x11/edid_parser_x11.h
@@ -0,0 +1,40 @@
+// 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.
+
+#ifndef UI_DISPLAY_UTIL_X11_EDID_PARSER_X11_H_
+#define UI_DISPLAY_UTIL_X11_EDID_PARSER_X11_H_
+
+#include <stdint.h>
+
+#include <string>
+
+#include "ui/display/types/display_constants.h"
+#include "ui/display/util/display_util_export.h"
+
+typedef unsigned long XID;
+typedef XID RROutput;
+
+// Xrandr utility functions to help get EDID information.
+
+namespace ui {
+
+// Gets the EDID data from |output| and generates the display id through
+// |GetDisplayIdFromEDID|.
+DISPLAY_UTIL_EXPORT bool GetDisplayId(XID output,
+                                      uint8_t index,
+                                      int64_t* display_id_out);
+
+// Generate the human readable string from EDID obtained from |output|.
+DISPLAY_UTIL_EXPORT std::string GetDisplayName(RROutput output);
+
+// Gets the overscan flag from |output| and stores to |flag|. Returns true if
+// the flag is found. Otherwise returns false and doesn't touch |flag|. The
+// output will produce overscan if |flag| is set to true, but the output may
+// still produce overscan even though it returns true and |flag| is set to
+// false.
+DISPLAY_UTIL_EXPORT bool GetOutputOverscanFlag(RROutput output, bool* flag);
+
+}  // namespace ui
+
+#endif  // UI_DISPLAY_UTIL_X11_EDID_PARSER_X11_H_
diff --git a/ui/display/x11/edid_parser_x11.cc b/ui/display/x11/edid_parser_x11.cc
deleted file mode 100644
index 55fa62b..0000000
--- a/ui/display/x11/edid_parser_x11.cc
+++ /dev/null
@@ -1,123 +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.
-
-#include "ui/display/x11/edid_parser_x11.h"
-
-#include <X11/extensions/Xrandr.h>
-#include <X11/Xatom.h>
-#include <X11/Xlib.h>
-
-#include "base/strings/string_util.h"
-#include "ui/display/edid_parser.h"
-#include "ui/gfx/x/x11_types.h"
-
-namespace ui {
-
-namespace {
-
-bool IsRandRAvailable() {
-  int randr_version_major = 0;
-  int randr_version_minor = 0;
-  static bool is_randr_available = XRRQueryVersion(
-      gfx::GetXDisplay(),
-      &randr_version_major, &randr_version_minor);
-  return is_randr_available;
-}
-
-// Get the EDID data from the |output| and stores to |edid|.
-// Returns true if EDID property is successfully obtained. Otherwise returns
-// false and does not touch |edid|.
-bool GetEDIDProperty(XID output, std::vector<uint8_t>* edid) {
-  if (!IsRandRAvailable())
-    return false;
-
-  Display* display = gfx::GetXDisplay();
-
-  static Atom edid_property = XInternAtom(
-      gfx::GetXDisplay(),
-      RR_PROPERTY_RANDR_EDID, false);
-
-  bool has_edid_property = false;
-  int num_properties = 0;
-  Atom* properties = XRRListOutputProperties(display, output, &num_properties);
-  for (int i = 0; i < num_properties; ++i) {
-    if (properties[i] == edid_property) {
-      has_edid_property = true;
-      break;
-    }
-  }
-  XFree(properties);
-  if (!has_edid_property)
-    return false;
-
-  Atom actual_type;
-  int actual_format;
-  unsigned long bytes_after;
-  unsigned long nitems = 0;
-  unsigned char* prop = NULL;
-  XRRGetOutputProperty(display,
-                       output,
-                       edid_property,
-                       0,                // offset
-                       128,              // length
-                       false,            // _delete
-                       false,            // pending
-                       AnyPropertyType,  // req_type
-                       &actual_type,
-                       &actual_format,
-                       &nitems,
-                       &bytes_after,
-                       &prop);
-  DCHECK_EQ(XA_INTEGER, actual_type);
-  DCHECK_EQ(8, actual_format);
-  edid->assign(prop, prop + nitems);
-  XFree(prop);
-  return true;
-}
-
-// Gets some useful data from the specified output device, such like
-// manufacturer's ID, product code, and human readable name. Returns false if it
-// fails to get those data and doesn't touch manufacturer ID/product code/name.
-// NULL can be passed for unwanted output parameters.
-bool GetOutputDeviceData(XID output,
-                         uint16_t* manufacturer_id,
-                         std::string* human_readable_name) {
-  std::vector<uint8_t> edid;
-  if (!GetEDIDProperty(output, &edid))
-    return false;
-
-  bool result = ParseOutputDeviceData(
-      edid, manufacturer_id, human_readable_name);
-  return result;
-}
-
-}  // namespace
-
-bool GetDisplayId(XID output_id,
-                  uint8_t output_index,
-                  int64_t* display_id_out) {
-  std::vector<uint8_t> edid;
-  if (!GetEDIDProperty(output_id, &edid))
-    return false;
-
-  bool result = GetDisplayIdFromEDID(edid, output_index, display_id_out);
-  return result;
-}
-
-std::string GetDisplayName(RROutput output) {
-  std::string display_name;
-  GetOutputDeviceData(output, NULL, &display_name);
-  return display_name;
-}
-
-bool GetOutputOverscanFlag(RROutput output, bool* flag) {
-  std::vector<uint8_t> edid;
-  if (!GetEDIDProperty(output, &edid))
-    return false;
-
-  bool found = ParseOutputOverscanFlag(edid, flag);
-  return found;
-}
-
-}  // namespace ui
diff --git a/ui/display/x11/edid_parser_x11.h b/ui/display/x11/edid_parser_x11.h
deleted file mode 100644
index d6ac9b9..0000000
--- a/ui/display/x11/edid_parser_x11.h
+++ /dev/null
@@ -1,40 +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.
-
-#ifndef UI_DISPLAY_X11_EDID_PARSER_X11_H_
-#define UI_DISPLAY_X11_EDID_PARSER_X11_H_
-
-#include <stdint.h>
-
-#include <string>
-
-#include "ui/display/display_export.h"
-#include "ui/display/types/display_constants.h"
-
-typedef unsigned long XID;
-typedef XID RROutput;
-
-// Xrandr utility functions to help get EDID information.
-
-namespace ui {
-
-// Gets the EDID data from |output| and generates the display id through
-// |GetDisplayIdFromEDID|.
-DISPLAY_EXPORT bool GetDisplayId(XID output,
-                                 uint8_t index,
-                                 int64_t* display_id_out);
-
-// Generate the human readable string from EDID obtained from |output|.
-DISPLAY_EXPORT std::string GetDisplayName(RROutput output);
-
-// Gets the overscan flag from |output| and stores to |flag|. Returns true if
-// the flag is found. Otherwise returns false and doesn't touch |flag|. The
-// output will produce overscan if |flag| is set to true, but the output may
-// still produce overscan even though it returns true and |flag| is set to
-// false.
-DISPLAY_EXPORT bool GetOutputOverscanFlag(RROutput output, bool* flag);
-
-}  // namespace ui
-
-#endif  // UI_DISPLAY_X11_EDID_PARSER_X11_H_
diff --git a/ui/events/BUILD.gn b/ui/events/BUILD.gn
index 91c32ff..a6061ed 100644
--- a/ui/events/BUILD.gn
+++ b/ui/events/BUILD.gn
@@ -215,7 +215,7 @@
   }
 
   if (!use_aura && !is_android) {
-    sources -= [ "gesture_detection/gesture_config_helper.cc" ]
+    sources -= [ "gesture_detection/gesture_config_helper_aura.cc" ]
   }
 }
 
@@ -259,7 +259,7 @@
   }
 }
 
-test("events_unittest") {
+test("events_unittests") {
   sources = [
     "cocoa/cocoa_event_utils_unittest.mm",
     "event_dispatcher_unittest.cc",
@@ -300,5 +300,6 @@
     "//base",
     "//base/test:run_all_unittests",
     "//testing/gtest",
+    "//ui/gfx:gfx_test_support",
   ]
 }
diff --git a/ui/events/dom4_keycode_converter.target.darwin-arm.mk b/ui/events/dom4_keycode_converter.target.darwin-arm.mk
index 53cc173..b0a045c 100644
--- a/ui/events/dom4_keycode_converter.target.darwin-arm.mk
+++ b/ui/events/dom4_keycode_converter.target.darwin-arm.mk
@@ -219,7 +219,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/events/dom4_keycode_converter.target.darwin-mips.mk b/ui/events/dom4_keycode_converter.target.darwin-mips.mk
index cb61e35..514ad3d 100644
--- a/ui/events/dom4_keycode_converter.target.darwin-mips.mk
+++ b/ui/events/dom4_keycode_converter.target.darwin-mips.mk
@@ -215,7 +215,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/events/dom4_keycode_converter.target.darwin-x86.mk b/ui/events/dom4_keycode_converter.target.darwin-x86.mk
index 7355649..ed11429 100644
--- a/ui/events/dom4_keycode_converter.target.darwin-x86.mk
+++ b/ui/events/dom4_keycode_converter.target.darwin-x86.mk
@@ -217,7 +217,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/events/dom4_keycode_converter.target.darwin-x86_64.mk b/ui/events/dom4_keycode_converter.target.darwin-x86_64.mk
index 6a5bd35..da5b2ad 100644
--- a/ui/events/dom4_keycode_converter.target.darwin-x86_64.mk
+++ b/ui/events/dom4_keycode_converter.target.darwin-x86_64.mk
@@ -217,7 +217,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/events/dom4_keycode_converter.target.linux-arm.mk b/ui/events/dom4_keycode_converter.target.linux-arm.mk
index 53cc173..b0a045c 100644
--- a/ui/events/dom4_keycode_converter.target.linux-arm.mk
+++ b/ui/events/dom4_keycode_converter.target.linux-arm.mk
@@ -219,7 +219,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/events/dom4_keycode_converter.target.linux-mips.mk b/ui/events/dom4_keycode_converter.target.linux-mips.mk
index cb61e35..514ad3d 100644
--- a/ui/events/dom4_keycode_converter.target.linux-mips.mk
+++ b/ui/events/dom4_keycode_converter.target.linux-mips.mk
@@ -215,7 +215,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/events/dom4_keycode_converter.target.linux-x86.mk b/ui/events/dom4_keycode_converter.target.linux-x86.mk
index 7355649..ed11429 100644
--- a/ui/events/dom4_keycode_converter.target.linux-x86.mk
+++ b/ui/events/dom4_keycode_converter.target.linux-x86.mk
@@ -217,7 +217,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/events/dom4_keycode_converter.target.linux-x86_64.mk b/ui/events/dom4_keycode_converter.target.linux-x86_64.mk
index 6a5bd35..da5b2ad 100644
--- a/ui/events/dom4_keycode_converter.target.linux-x86_64.mk
+++ b/ui/events/dom4_keycode_converter.target.linux-x86_64.mk
@@ -217,7 +217,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/events/event_constants.h b/ui/events/event_constants.h
index 467a9fa..a19a136 100644
--- a/ui/events/event_constants.h
+++ b/ui/events/event_constants.h
@@ -92,6 +92,11 @@
   EF_MOD3_DOWN           = 1 << 11,
 };
 
+// Flags specific to key events
+enum KeyEventFlags {
+  EF_NUMPAD_KEY         = 1 << 16,  // Key originates from number pad (Xkb only)
+};
+
 // Flags specific to mouse events
 enum MouseEventFlags {
   EF_IS_DOUBLE_CLICK    = 1 << 16,
diff --git a/ui/events/event_switches.cc b/ui/events/event_switches.cc
index 314370a..829b9d0 100644
--- a/ui/events/event_switches.cc
+++ b/ui/events/event_switches.cc
@@ -27,7 +27,7 @@
 const char kTouchDevices[] = "touch-devices";
 #endif
 
-#if defined(USE_XI2_MT)
+#if defined(USE_XI2_MT) || defined(USE_OZONE)
 // The calibration factors given as "<left>,<right>,<top>,<bottom>".
 const char kTouchCalibration[] = "touch-calibration";
 #endif
diff --git a/ui/events/event_switches.h b/ui/events/event_switches.h
index caaa779..7ac2722 100644
--- a/ui/events/event_switches.h
+++ b/ui/events/event_switches.h
@@ -20,7 +20,7 @@
 EVENTS_BASE_EXPORT extern const char kTouchDevices[];
 #endif
 
-#if defined(USE_XI2_MT)
+#if defined(USE_XI2_MT) || defined(USE_OZONE)
 EVENTS_BASE_EXPORT extern const char kTouchCalibration[];
 #endif
 
diff --git a/ui/events/events.gyp b/ui/events/events.gyp
index c7dd93b..00f5186 100644
--- a/ui/events/events.gyp
+++ b/ui/events/events.gyp
@@ -117,6 +117,14 @@
         'gestures/gesture_types.h',
         'gestures/velocity_calculator.cc',
         'gestures/velocity_calculator.h',
+        'ozone/evdev/libgestures_glue/event_reader_libevdev_cros.cc',
+        'ozone/evdev/libgestures_glue/event_reader_libevdev_cros.h',
+        'ozone/evdev/libgestures_glue/gesture_interpreter_libevdev_cros.cc',
+        'ozone/evdev/libgestures_glue/gesture_interpreter_libevdev_cros.h',
+        'ozone/evdev/libgestures_glue/gesture_logging.cc',
+        'ozone/evdev/libgestures_glue/gesture_logging.h',
+        'ozone/evdev/libgestures_glue/gesture_timer_provider.cc',
+        'ozone/evdev/libgestures_glue/gesture_timer_provider.h',
         'ozone/evdev/device_manager_evdev.cc',
         'ozone/evdev/device_manager_evdev.h',
         'ozone/evdev/device_manager_udev.cc',
@@ -146,6 +154,8 @@
         'platform/scoped_event_dispatcher.h',
         'platform/x11/x11_event_source.cc',
         'platform/x11/x11_event_source.h',
+        'platform/x11/x11_event_source_glib.cc',
+        'platform/x11/x11_event_source_libevent.cc',
         'win/events_win.cc',
         'x/events_x.cc',
         'linux/text_edit_command_auralinux.cc',
@@ -182,6 +192,14 @@
           'dependencies': [
             '../../build/linux/system.gyp:glib',
           ],
+          'sources!': [
+            'platform/x11/x11_event_source_libevent.cc',
+          ],
+        }, {
+          # use_glib == 0
+          'sources!': [
+            'platform/x11/x11_event_source_glib.cc',
+          ],
         }],
         ['use_ozone_evdev==1', {
           'defines': ['USE_OZONE_EVDEV=1'],
@@ -191,6 +209,19 @@
             '<(DEPTH)/build/linux/system.gyp:udev',
           ],
         }],
+        ['use_ozone_evdev==1 and use_evdev_gestures==1', {
+          'dependencies': [
+            '<(DEPTH)/build/linux/system.gyp:libgestures',
+            '<(DEPTH)/build/linux/system.gyp:libevdev-cros',
+          ],
+          'defines': [
+            'USE_EVDEV_GESTURES',
+          ],
+        }, {
+          'sources/': [
+            ['exclude', '^ozone/evdev/libgestures_glue/'],
+          ],
+        }],
         ['use_udev==0', {
           'sources!': [
             'ozone/evdev/device_manager_udev.cc',
@@ -361,7 +392,6 @@
           ],
           'variables': {
             'test_suite_name': 'events_unittests',
-            'input_shlib_path': '<(SHARED_LIB_DIR)/<(SHARED_LIB_PREFIX)events_unittests<(SHARED_LIB_SUFFIX)',
           },
           'includes': [ '../../build/apk_test.gypi' ],
         },
diff --git a/ui/events/events.target.darwin-arm.mk b/ui/events/events.target.darwin-arm.mk
deleted file mode 100644
index d2be3d5..0000000
--- a/ui/events/events.target.darwin-arm.mk
+++ /dev/null
@@ -1,353 +0,0 @@
-# This file is generated by gyp; do not edit.
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := ui_events_events_gyp
-LOCAL_MODULE_SUFFIX := .a
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
-gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
-gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
-
-# Make sure our deps are built first.
-GYP_TARGET_DEPENDENCIES := \
-	$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a
-
-GYP_GENERATED_OUTPUTS :=
-
-# Make sure our deps and generated files are built first.
-LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
-
-LOCAL_CPP_EXTENSION := .cc
-LOCAL_GENERATED_SOURCES :=
-
-GYP_COPIED_SOURCE_ORIGIN_DIRS :=
-
-LOCAL_SRC_FILES := \
-	ui/events/event.cc \
-	ui/events/event_dispatcher.cc \
-	ui/events/event_handler.cc \
-	ui/events/event_processor.cc \
-	ui/events/event_source.cc \
-	ui/events/event_target.cc \
-	ui/events/event_targeter.cc \
-	ui/events/event_utils.cc \
-	ui/events/events_stub.cc \
-	ui/events/gestures/gesture_configuration.cc \
-	ui/events/gestures/gesture_point.cc \
-	ui/events/gestures/gesture_recognizer_impl.cc \
-	ui/events/gestures/gesture_sequence.cc \
-	ui/events/gestures/velocity_calculator.cc \
-	ui/events/platform/platform_event_source.cc \
-	ui/events/platform/platform_event_source_stub.cc \
-	ui/events/platform/scoped_event_dispatcher.cc
-
-
-# Flags passed to both C and C++ files.
-MY_CFLAGS_Debug := \
-	-fstack-protector \
-	--param=ssp-buffer-size=4 \
-	-Werror \
-	-fno-exceptions \
-	-fno-strict-aliasing \
-	-Wall \
-	-Wno-unused-parameter \
-	-Wno-missing-field-initializers \
-	-fvisibility=hidden \
-	-pipe \
-	-fPIC \
-	-fno-tree-sra \
-	-fuse-ld=gold \
-	-Wno-psabi \
-	-ffunction-sections \
-	-funwind-tables \
-	-g \
-	-fstack-protector \
-	-fno-short-enums \
-	-finline-limit=64 \
-	-Wa,--noexecstack \
-	-U_FORTIFY_SOURCE \
-	-Wno-extra \
-	-Wno-ignored-qualifiers \
-	-Wno-type-limits \
-	-Wno-unused-but-set-variable \
-	-Os \
-	-g \
-	-fomit-frame-pointer \
-	-fdata-sections \
-	-ffunction-sections \
-	-funwind-tables
-
-MY_DEFS_Debug := \
-	'-DV8_DEPRECATION_WARNINGS' \
-	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
-	'-D_FILE_OFFSET_BITS=64' \
-	'-DNO_TCMALLOC' \
-	'-DDISABLE_NACL' \
-	'-DCHROMIUM_BUILD' \
-	'-DUSE_LIBJPEG_TURBO=1' \
-	'-DENABLE_WEBRTC=1' \
-	'-DUSE_PROPRIETARY_CODECS' \
-	'-DENABLE_CONFIGURATION_POLICY' \
-	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
-	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DENABLE_EGLIMAGE=1' \
-	'-DCLD_VERSION=1' \
-	'-DENABLE_PRINTING=1' \
-	'-DENABLE_MANAGED_USERS=1' \
-	'-DEVENTS_IMPLEMENTATION' \
-	'-DSK_ENABLE_INST_COUNT=0' \
-	'-DSK_SUPPORT_GPU=1' \
-	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
-	'-DSK_ENABLE_LEGACY_API_ALIASING=1' \
-	'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
-	'-DGR_GL_IGNORE_ES3_MSAA=0' \
-	'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
-	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
-	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
-	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
-	'-DSK_SUPPORT_LEGACY_N32_NAME' \
-	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
-	'-DSK_BUILD_FOR_ANDROID' \
-	'-DSK_USE_POSIX_THREADS' \
-	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
-	'-DU_USING_ICU_NAMESPACE=0' \
-	'-DUSE_OPENSSL=1' \
-	'-DUSE_OPENSSL_CERTS=1' \
-	'-D__STDC_CONSTANT_MACROS' \
-	'-D__STDC_FORMAT_MACROS' \
-	'-DANDROID' \
-	'-D__GNU_SOURCE=1' \
-	'-DUSE_STLPORT=1' \
-	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
-	'-DCHROME_BUILD_ID=""' \
-	'-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
-	'-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
-	'-D_DEBUG'
-
-
-# Include paths placed before CFLAGS/CPPFLAGS
-LOCAL_C_INCLUDES_Debug := \
-	$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
-	$(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
-	$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
-	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/skia/config \
-	$(LOCAL_PATH)/third_party/skia/src/core \
-	$(LOCAL_PATH)/third_party/skia/include/core \
-	$(LOCAL_PATH)/third_party/skia/include/effects \
-	$(LOCAL_PATH)/third_party/skia/include/pdf \
-	$(LOCAL_PATH)/third_party/skia/include/gpu \
-	$(LOCAL_PATH)/third_party/skia/include/lazy \
-	$(LOCAL_PATH)/third_party/skia/include/pathops \
-	$(LOCAL_PATH)/third_party/skia/include/pipe \
-	$(LOCAL_PATH)/third_party/skia/include/ports \
-	$(LOCAL_PATH)/third_party/skia/include/utils \
-	$(LOCAL_PATH)/skia/ext \
-	$(PWD)/external/icu4c/common \
-	$(PWD)/external/icu4c/i18n \
-	$(PWD)/frameworks/wilhelm/include \
-	$(PWD)/bionic \
-	$(PWD)/external/stlport/stlport
-
-
-# Flags passed to only C++ (and not C) files.
-LOCAL_CPPFLAGS_Debug := \
-	-fno-rtti \
-	-fno-threadsafe-statics \
-	-fvisibility-inlines-hidden \
-	-Wsign-compare \
-	-Wno-abi \
-	-Wno-non-virtual-dtor \
-	-Wno-sign-promo
-
-
-# Flags passed to both C and C++ files.
-MY_CFLAGS_Release := \
-	-fstack-protector \
-	--param=ssp-buffer-size=4 \
-	-Werror \
-	-fno-exceptions \
-	-fno-strict-aliasing \
-	-Wall \
-	-Wno-unused-parameter \
-	-Wno-missing-field-initializers \
-	-fvisibility=hidden \
-	-pipe \
-	-fPIC \
-	-fno-tree-sra \
-	-fuse-ld=gold \
-	-Wno-psabi \
-	-ffunction-sections \
-	-funwind-tables \
-	-g \
-	-fstack-protector \
-	-fno-short-enums \
-	-finline-limit=64 \
-	-Wa,--noexecstack \
-	-U_FORTIFY_SOURCE \
-	-Wno-extra \
-	-Wno-ignored-qualifiers \
-	-Wno-type-limits \
-	-Wno-unused-but-set-variable \
-	-Os \
-	-fno-ident \
-	-fdata-sections \
-	-ffunction-sections \
-	-fomit-frame-pointer \
-	-funwind-tables
-
-MY_DEFS_Release := \
-	'-DV8_DEPRECATION_WARNINGS' \
-	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
-	'-D_FILE_OFFSET_BITS=64' \
-	'-DNO_TCMALLOC' \
-	'-DDISABLE_NACL' \
-	'-DCHROMIUM_BUILD' \
-	'-DUSE_LIBJPEG_TURBO=1' \
-	'-DENABLE_WEBRTC=1' \
-	'-DUSE_PROPRIETARY_CODECS' \
-	'-DENABLE_CONFIGURATION_POLICY' \
-	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
-	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DENABLE_EGLIMAGE=1' \
-	'-DCLD_VERSION=1' \
-	'-DENABLE_PRINTING=1' \
-	'-DENABLE_MANAGED_USERS=1' \
-	'-DEVENTS_IMPLEMENTATION' \
-	'-DSK_ENABLE_INST_COUNT=0' \
-	'-DSK_SUPPORT_GPU=1' \
-	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
-	'-DSK_ENABLE_LEGACY_API_ALIASING=1' \
-	'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
-	'-DGR_GL_IGNORE_ES3_MSAA=0' \
-	'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
-	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
-	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
-	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
-	'-DSK_SUPPORT_LEGACY_N32_NAME' \
-	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
-	'-DSK_BUILD_FOR_ANDROID' \
-	'-DSK_USE_POSIX_THREADS' \
-	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
-	'-DU_USING_ICU_NAMESPACE=0' \
-	'-DUSE_OPENSSL=1' \
-	'-DUSE_OPENSSL_CERTS=1' \
-	'-D__STDC_CONSTANT_MACROS' \
-	'-D__STDC_FORMAT_MACROS' \
-	'-DANDROID' \
-	'-D__GNU_SOURCE=1' \
-	'-DUSE_STLPORT=1' \
-	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
-	'-DCHROME_BUILD_ID=""' \
-	'-DNDEBUG' \
-	'-DNVALGRIND' \
-	'-DDYNAMIC_ANNOTATIONS_ENABLED=0' \
-	'-D_FORTIFY_SOURCE=2'
-
-
-# Include paths placed before CFLAGS/CPPFLAGS
-LOCAL_C_INCLUDES_Release := \
-	$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
-	$(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
-	$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
-	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/skia/config \
-	$(LOCAL_PATH)/third_party/skia/src/core \
-	$(LOCAL_PATH)/third_party/skia/include/core \
-	$(LOCAL_PATH)/third_party/skia/include/effects \
-	$(LOCAL_PATH)/third_party/skia/include/pdf \
-	$(LOCAL_PATH)/third_party/skia/include/gpu \
-	$(LOCAL_PATH)/third_party/skia/include/lazy \
-	$(LOCAL_PATH)/third_party/skia/include/pathops \
-	$(LOCAL_PATH)/third_party/skia/include/pipe \
-	$(LOCAL_PATH)/third_party/skia/include/ports \
-	$(LOCAL_PATH)/third_party/skia/include/utils \
-	$(LOCAL_PATH)/skia/ext \
-	$(PWD)/external/icu4c/common \
-	$(PWD)/external/icu4c/i18n \
-	$(PWD)/frameworks/wilhelm/include \
-	$(PWD)/bionic \
-	$(PWD)/external/stlport/stlport
-
-
-# Flags passed to only C++ (and not C) files.
-LOCAL_CPPFLAGS_Release := \
-	-fno-rtti \
-	-fno-threadsafe-statics \
-	-fvisibility-inlines-hidden \
-	-Wsign-compare \
-	-Wno-abi \
-	-Wno-non-virtual-dtor \
-	-Wno-sign-promo
-
-
-LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION))
-LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))
-LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))
-LOCAL_ASFLAGS := $(LOCAL_CFLAGS)
-### Rules for final target.
-
-LOCAL_LDFLAGS_Debug := \
-	-Wl,-z,now \
-	-Wl,-z,relro \
-	-Wl,--fatal-warnings \
-	-Wl,-z,noexecstack \
-	-fPIC \
-	-Wl,-z,relro \
-	-Wl,-z,now \
-	-fuse-ld=gold \
-	-nostdlib \
-	-Wl,--no-undefined \
-	-Wl,--exclude-libs=ALL \
-	-Wl,--icf=safe \
-	-Wl,--gc-sections \
-	-Wl,--warn-shared-textrel \
-	-Wl,-O1 \
-	-Wl,--as-needed
-
-
-LOCAL_LDFLAGS_Release := \
-	-Wl,-z,now \
-	-Wl,-z,relro \
-	-Wl,--fatal-warnings \
-	-Wl,-z,noexecstack \
-	-fPIC \
-	-Wl,-z,relro \
-	-Wl,-z,now \
-	-fuse-ld=gold \
-	-nostdlib \
-	-Wl,--no-undefined \
-	-Wl,--exclude-libs=ALL \
-	-Wl,--icf=safe \
-	-Wl,-O1 \
-	-Wl,--as-needed \
-	-Wl,--gc-sections \
-	-Wl,--warn-shared-textrel
-
-
-LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
-
-LOCAL_STATIC_LIBRARIES := \
-	skia_skia_library_gyp
-
-# Enable grouping to fix circular references
-LOCAL_GROUP_STATIC_LIBRARIES := true
-
-LOCAL_SHARED_LIBRARIES := \
-	libstlport \
-	libdl
-
-# Add target alias to "gyp_all_modules" target.
-.PHONY: gyp_all_modules
-gyp_all_modules: ui_events_events_gyp
-
-# Alias gyp target name.
-.PHONY: events
-events: ui_events_events_gyp
-
-include $(BUILD_STATIC_LIBRARY)
diff --git a/ui/events/events.target.darwin-mips.mk b/ui/events/events.target.darwin-mips.mk
deleted file mode 100644
index 34eae58..0000000
--- a/ui/events/events.target.darwin-mips.mk
+++ /dev/null
@@ -1,347 +0,0 @@
-# This file is generated by gyp; do not edit.
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := ui_events_events_gyp
-LOCAL_MODULE_SUFFIX := .a
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
-gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
-gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
-
-# Make sure our deps are built first.
-GYP_TARGET_DEPENDENCIES := \
-	$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a
-
-GYP_GENERATED_OUTPUTS :=
-
-# Make sure our deps and generated files are built first.
-LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
-
-LOCAL_CPP_EXTENSION := .cc
-LOCAL_GENERATED_SOURCES :=
-
-GYP_COPIED_SOURCE_ORIGIN_DIRS :=
-
-LOCAL_SRC_FILES := \
-	ui/events/event.cc \
-	ui/events/event_dispatcher.cc \
-	ui/events/event_handler.cc \
-	ui/events/event_processor.cc \
-	ui/events/event_source.cc \
-	ui/events/event_target.cc \
-	ui/events/event_targeter.cc \
-	ui/events/event_utils.cc \
-	ui/events/events_stub.cc \
-	ui/events/gestures/gesture_configuration.cc \
-	ui/events/gestures/gesture_point.cc \
-	ui/events/gestures/gesture_recognizer_impl.cc \
-	ui/events/gestures/gesture_sequence.cc \
-	ui/events/gestures/velocity_calculator.cc \
-	ui/events/platform/platform_event_source.cc \
-	ui/events/platform/platform_event_source_stub.cc \
-	ui/events/platform/scoped_event_dispatcher.cc
-
-
-# Flags passed to both C and C++ files.
-MY_CFLAGS_Debug := \
-	-fstack-protector \
-	--param=ssp-buffer-size=4 \
-	 \
-	-fno-exceptions \
-	-fno-strict-aliasing \
-	-Wall \
-	-Wno-unused-parameter \
-	-Wno-missing-field-initializers \
-	-fvisibility=hidden \
-	-pipe \
-	-fPIC \
-	-EL \
-	-mhard-float \
-	-ffunction-sections \
-	-funwind-tables \
-	-g \
-	-fstack-protector \
-	-fno-short-enums \
-	-finline-limit=64 \
-	-Wa,--noexecstack \
-	-U_FORTIFY_SOURCE \
-	-Wno-extra \
-	-Wno-ignored-qualifiers \
-	-Wno-type-limits \
-	-Wno-unused-but-set-variable \
-	-Os \
-	-g \
-	-fomit-frame-pointer \
-	-fdata-sections \
-	-ffunction-sections \
-	-funwind-tables
-
-MY_DEFS_Debug := \
-	'-DV8_DEPRECATION_WARNINGS' \
-	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
-	'-D_FILE_OFFSET_BITS=64' \
-	'-DNO_TCMALLOC' \
-	'-DDISABLE_NACL' \
-	'-DCHROMIUM_BUILD' \
-	'-DUSE_LIBJPEG_TURBO=1' \
-	'-DENABLE_WEBRTC=1' \
-	'-DUSE_PROPRIETARY_CODECS' \
-	'-DENABLE_CONFIGURATION_POLICY' \
-	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
-	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DENABLE_EGLIMAGE=1' \
-	'-DCLD_VERSION=1' \
-	'-DENABLE_PRINTING=1' \
-	'-DENABLE_MANAGED_USERS=1' \
-	'-DEVENTS_IMPLEMENTATION' \
-	'-DSK_ENABLE_INST_COUNT=0' \
-	'-DSK_SUPPORT_GPU=1' \
-	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
-	'-DSK_ENABLE_LEGACY_API_ALIASING=1' \
-	'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
-	'-DGR_GL_IGNORE_ES3_MSAA=0' \
-	'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
-	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
-	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
-	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
-	'-DSK_SUPPORT_LEGACY_N32_NAME' \
-	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
-	'-DSK_BUILD_FOR_ANDROID' \
-	'-DSK_USE_POSIX_THREADS' \
-	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
-	'-DU_USING_ICU_NAMESPACE=0' \
-	'-DUSE_OPENSSL=1' \
-	'-DUSE_OPENSSL_CERTS=1' \
-	'-D__STDC_CONSTANT_MACROS' \
-	'-D__STDC_FORMAT_MACROS' \
-	'-DANDROID' \
-	'-D__GNU_SOURCE=1' \
-	'-DUSE_STLPORT=1' \
-	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
-	'-DCHROME_BUILD_ID=""' \
-	'-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
-	'-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
-	'-D_DEBUG'
-
-
-# Include paths placed before CFLAGS/CPPFLAGS
-LOCAL_C_INCLUDES_Debug := \
-	$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
-	$(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
-	$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
-	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/skia/config \
-	$(LOCAL_PATH)/third_party/skia/src/core \
-	$(LOCAL_PATH)/third_party/skia/include/core \
-	$(LOCAL_PATH)/third_party/skia/include/effects \
-	$(LOCAL_PATH)/third_party/skia/include/pdf \
-	$(LOCAL_PATH)/third_party/skia/include/gpu \
-	$(LOCAL_PATH)/third_party/skia/include/lazy \
-	$(LOCAL_PATH)/third_party/skia/include/pathops \
-	$(LOCAL_PATH)/third_party/skia/include/pipe \
-	$(LOCAL_PATH)/third_party/skia/include/ports \
-	$(LOCAL_PATH)/third_party/skia/include/utils \
-	$(LOCAL_PATH)/skia/ext \
-	$(PWD)/external/icu4c/common \
-	$(PWD)/external/icu4c/i18n \
-	$(PWD)/frameworks/wilhelm/include \
-	$(PWD)/bionic \
-	$(PWD)/external/stlport/stlport
-
-
-# Flags passed to only C++ (and not C) files.
-LOCAL_CPPFLAGS_Debug := \
-	-fno-rtti \
-	-fno-threadsafe-statics \
-	-fvisibility-inlines-hidden \
-	-Wsign-compare \
-	-Wno-uninitialized \
-	-Wno-non-virtual-dtor \
-	-Wno-sign-promo
-
-
-# Flags passed to both C and C++ files.
-MY_CFLAGS_Release := \
-	-fstack-protector \
-	--param=ssp-buffer-size=4 \
-	 \
-	-fno-exceptions \
-	-fno-strict-aliasing \
-	-Wall \
-	-Wno-unused-parameter \
-	-Wno-missing-field-initializers \
-	-fvisibility=hidden \
-	-pipe \
-	-fPIC \
-	-EL \
-	-mhard-float \
-	-ffunction-sections \
-	-funwind-tables \
-	-g \
-	-fstack-protector \
-	-fno-short-enums \
-	-finline-limit=64 \
-	-Wa,--noexecstack \
-	-U_FORTIFY_SOURCE \
-	-Wno-extra \
-	-Wno-ignored-qualifiers \
-	-Wno-type-limits \
-	-Wno-unused-but-set-variable \
-	-Os \
-	-fno-ident \
-	-fdata-sections \
-	-ffunction-sections \
-	-fomit-frame-pointer \
-	-funwind-tables
-
-MY_DEFS_Release := \
-	'-DV8_DEPRECATION_WARNINGS' \
-	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
-	'-D_FILE_OFFSET_BITS=64' \
-	'-DNO_TCMALLOC' \
-	'-DDISABLE_NACL' \
-	'-DCHROMIUM_BUILD' \
-	'-DUSE_LIBJPEG_TURBO=1' \
-	'-DENABLE_WEBRTC=1' \
-	'-DUSE_PROPRIETARY_CODECS' \
-	'-DENABLE_CONFIGURATION_POLICY' \
-	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
-	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DENABLE_EGLIMAGE=1' \
-	'-DCLD_VERSION=1' \
-	'-DENABLE_PRINTING=1' \
-	'-DENABLE_MANAGED_USERS=1' \
-	'-DEVENTS_IMPLEMENTATION' \
-	'-DSK_ENABLE_INST_COUNT=0' \
-	'-DSK_SUPPORT_GPU=1' \
-	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
-	'-DSK_ENABLE_LEGACY_API_ALIASING=1' \
-	'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
-	'-DGR_GL_IGNORE_ES3_MSAA=0' \
-	'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
-	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
-	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
-	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
-	'-DSK_SUPPORT_LEGACY_N32_NAME' \
-	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
-	'-DSK_BUILD_FOR_ANDROID' \
-	'-DSK_USE_POSIX_THREADS' \
-	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
-	'-DU_USING_ICU_NAMESPACE=0' \
-	'-DUSE_OPENSSL=1' \
-	'-DUSE_OPENSSL_CERTS=1' \
-	'-D__STDC_CONSTANT_MACROS' \
-	'-D__STDC_FORMAT_MACROS' \
-	'-DANDROID' \
-	'-D__GNU_SOURCE=1' \
-	'-DUSE_STLPORT=1' \
-	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
-	'-DCHROME_BUILD_ID=""' \
-	'-DNDEBUG' \
-	'-DNVALGRIND' \
-	'-DDYNAMIC_ANNOTATIONS_ENABLED=0' \
-	'-D_FORTIFY_SOURCE=2'
-
-
-# Include paths placed before CFLAGS/CPPFLAGS
-LOCAL_C_INCLUDES_Release := \
-	$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
-	$(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
-	$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
-	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/skia/config \
-	$(LOCAL_PATH)/third_party/skia/src/core \
-	$(LOCAL_PATH)/third_party/skia/include/core \
-	$(LOCAL_PATH)/third_party/skia/include/effects \
-	$(LOCAL_PATH)/third_party/skia/include/pdf \
-	$(LOCAL_PATH)/third_party/skia/include/gpu \
-	$(LOCAL_PATH)/third_party/skia/include/lazy \
-	$(LOCAL_PATH)/third_party/skia/include/pathops \
-	$(LOCAL_PATH)/third_party/skia/include/pipe \
-	$(LOCAL_PATH)/third_party/skia/include/ports \
-	$(LOCAL_PATH)/third_party/skia/include/utils \
-	$(LOCAL_PATH)/skia/ext \
-	$(PWD)/external/icu4c/common \
-	$(PWD)/external/icu4c/i18n \
-	$(PWD)/frameworks/wilhelm/include \
-	$(PWD)/bionic \
-	$(PWD)/external/stlport/stlport
-
-
-# Flags passed to only C++ (and not C) files.
-LOCAL_CPPFLAGS_Release := \
-	-fno-rtti \
-	-fno-threadsafe-statics \
-	-fvisibility-inlines-hidden \
-	-Wsign-compare \
-	-Wno-uninitialized \
-	-Wno-non-virtual-dtor \
-	-Wno-sign-promo
-
-
-LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION))
-LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))
-LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))
-LOCAL_ASFLAGS := $(LOCAL_CFLAGS)
-### Rules for final target.
-
-LOCAL_LDFLAGS_Debug := \
-	-Wl,-z,now \
-	-Wl,-z,relro \
-	-Wl,--fatal-warnings \
-	-Wl,-z,noexecstack \
-	-fPIC \
-	-EL \
-	-Wl,--no-keep-memory \
-	-nostdlib \
-	-Wl,--no-undefined \
-	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
-	-Wl,--warn-shared-textrel \
-	-Wl,-O1 \
-	-Wl,--as-needed
-
-
-LOCAL_LDFLAGS_Release := \
-	-Wl,-z,now \
-	-Wl,-z,relro \
-	-Wl,--fatal-warnings \
-	-Wl,-z,noexecstack \
-	-fPIC \
-	-EL \
-	-Wl,--no-keep-memory \
-	-nostdlib \
-	-Wl,--no-undefined \
-	-Wl,--exclude-libs=ALL \
-	-Wl,-O1 \
-	-Wl,--as-needed \
-	-Wl,--gc-sections \
-	-Wl,--warn-shared-textrel
-
-
-LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
-
-LOCAL_STATIC_LIBRARIES := \
-	skia_skia_library_gyp
-
-# Enable grouping to fix circular references
-LOCAL_GROUP_STATIC_LIBRARIES := true
-
-LOCAL_SHARED_LIBRARIES := \
-	libstlport \
-	libdl
-
-# Add target alias to "gyp_all_modules" target.
-.PHONY: gyp_all_modules
-gyp_all_modules: ui_events_events_gyp
-
-# Alias gyp target name.
-.PHONY: events
-events: ui_events_events_gyp
-
-include $(BUILD_STATIC_LIBRARY)
diff --git a/ui/events/events.target.darwin-x86.mk b/ui/events/events.target.darwin-x86.mk
deleted file mode 100644
index c56cc1d..0000000
--- a/ui/events/events.target.darwin-x86.mk
+++ /dev/null
@@ -1,349 +0,0 @@
-# This file is generated by gyp; do not edit.
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := ui_events_events_gyp
-LOCAL_MODULE_SUFFIX := .a
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
-gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
-gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
-
-# Make sure our deps are built first.
-GYP_TARGET_DEPENDENCIES := \
-	$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a
-
-GYP_GENERATED_OUTPUTS :=
-
-# Make sure our deps and generated files are built first.
-LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
-
-LOCAL_CPP_EXTENSION := .cc
-LOCAL_GENERATED_SOURCES :=
-
-GYP_COPIED_SOURCE_ORIGIN_DIRS :=
-
-LOCAL_SRC_FILES := \
-	ui/events/event.cc \
-	ui/events/event_dispatcher.cc \
-	ui/events/event_handler.cc \
-	ui/events/event_processor.cc \
-	ui/events/event_source.cc \
-	ui/events/event_target.cc \
-	ui/events/event_targeter.cc \
-	ui/events/event_utils.cc \
-	ui/events/events_stub.cc \
-	ui/events/gestures/gesture_configuration.cc \
-	ui/events/gestures/gesture_point.cc \
-	ui/events/gestures/gesture_recognizer_impl.cc \
-	ui/events/gestures/gesture_sequence.cc \
-	ui/events/gestures/velocity_calculator.cc \
-	ui/events/platform/platform_event_source.cc \
-	ui/events/platform/platform_event_source_stub.cc \
-	ui/events/platform/scoped_event_dispatcher.cc
-
-
-# Flags passed to both C and C++ files.
-MY_CFLAGS_Debug := \
-	--param=ssp-buffer-size=4 \
-	-Werror \
-	-fno-exceptions \
-	-fno-strict-aliasing \
-	-Wall \
-	-Wno-unused-parameter \
-	-Wno-missing-field-initializers \
-	-fvisibility=hidden \
-	-pipe \
-	-fPIC \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
-	-ffunction-sections \
-	-funwind-tables \
-	-g \
-	-fno-short-enums \
-	-finline-limit=64 \
-	-Wa,--noexecstack \
-	-U_FORTIFY_SOURCE \
-	-Wno-extra \
-	-Wno-ignored-qualifiers \
-	-Wno-type-limits \
-	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
-	-Os \
-	-g \
-	-fomit-frame-pointer \
-	-fdata-sections \
-	-ffunction-sections \
-	-funwind-tables
-
-MY_DEFS_Debug := \
-	'-DV8_DEPRECATION_WARNINGS' \
-	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
-	'-D_FILE_OFFSET_BITS=64' \
-	'-DNO_TCMALLOC' \
-	'-DDISABLE_NACL' \
-	'-DCHROMIUM_BUILD' \
-	'-DUSE_LIBJPEG_TURBO=1' \
-	'-DENABLE_WEBRTC=1' \
-	'-DUSE_PROPRIETARY_CODECS' \
-	'-DENABLE_CONFIGURATION_POLICY' \
-	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
-	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DENABLE_EGLIMAGE=1' \
-	'-DCLD_VERSION=1' \
-	'-DENABLE_PRINTING=1' \
-	'-DENABLE_MANAGED_USERS=1' \
-	'-DEVENTS_IMPLEMENTATION' \
-	'-DSK_ENABLE_INST_COUNT=0' \
-	'-DSK_SUPPORT_GPU=1' \
-	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
-	'-DSK_ENABLE_LEGACY_API_ALIASING=1' \
-	'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
-	'-DGR_GL_IGNORE_ES3_MSAA=0' \
-	'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
-	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
-	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
-	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
-	'-DSK_SUPPORT_LEGACY_N32_NAME' \
-	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
-	'-DSK_BUILD_FOR_ANDROID' \
-	'-DSK_USE_POSIX_THREADS' \
-	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
-	'-DU_USING_ICU_NAMESPACE=0' \
-	'-DUSE_OPENSSL=1' \
-	'-DUSE_OPENSSL_CERTS=1' \
-	'-D__STDC_CONSTANT_MACROS' \
-	'-D__STDC_FORMAT_MACROS' \
-	'-DANDROID' \
-	'-D__GNU_SOURCE=1' \
-	'-DUSE_STLPORT=1' \
-	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
-	'-DCHROME_BUILD_ID=""' \
-	'-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
-	'-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
-	'-D_DEBUG'
-
-
-# Include paths placed before CFLAGS/CPPFLAGS
-LOCAL_C_INCLUDES_Debug := \
-	$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
-	$(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
-	$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
-	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/skia/config \
-	$(LOCAL_PATH)/third_party/skia/src/core \
-	$(LOCAL_PATH)/third_party/skia/include/core \
-	$(LOCAL_PATH)/third_party/skia/include/effects \
-	$(LOCAL_PATH)/third_party/skia/include/pdf \
-	$(LOCAL_PATH)/third_party/skia/include/gpu \
-	$(LOCAL_PATH)/third_party/skia/include/lazy \
-	$(LOCAL_PATH)/third_party/skia/include/pathops \
-	$(LOCAL_PATH)/third_party/skia/include/pipe \
-	$(LOCAL_PATH)/third_party/skia/include/ports \
-	$(LOCAL_PATH)/third_party/skia/include/utils \
-	$(LOCAL_PATH)/skia/ext \
-	$(PWD)/external/icu4c/common \
-	$(PWD)/external/icu4c/i18n \
-	$(PWD)/frameworks/wilhelm/include \
-	$(PWD)/bionic \
-	$(PWD)/external/stlport/stlport
-
-
-# Flags passed to only C++ (and not C) files.
-LOCAL_CPPFLAGS_Debug := \
-	-fno-rtti \
-	-fno-threadsafe-statics \
-	-fvisibility-inlines-hidden \
-	-Wsign-compare \
-	-Wno-non-virtual-dtor \
-	-Wno-sign-promo
-
-
-# Flags passed to both C and C++ files.
-MY_CFLAGS_Release := \
-	--param=ssp-buffer-size=4 \
-	-Werror \
-	-fno-exceptions \
-	-fno-strict-aliasing \
-	-Wall \
-	-Wno-unused-parameter \
-	-Wno-missing-field-initializers \
-	-fvisibility=hidden \
-	-pipe \
-	-fPIC \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
-	-ffunction-sections \
-	-funwind-tables \
-	-g \
-	-fno-short-enums \
-	-finline-limit=64 \
-	-Wa,--noexecstack \
-	-U_FORTIFY_SOURCE \
-	-Wno-extra \
-	-Wno-ignored-qualifiers \
-	-Wno-type-limits \
-	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
-	-Os \
-	-fno-ident \
-	-fdata-sections \
-	-ffunction-sections \
-	-fomit-frame-pointer \
-	-funwind-tables
-
-MY_DEFS_Release := \
-	'-DV8_DEPRECATION_WARNINGS' \
-	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
-	'-D_FILE_OFFSET_BITS=64' \
-	'-DNO_TCMALLOC' \
-	'-DDISABLE_NACL' \
-	'-DCHROMIUM_BUILD' \
-	'-DUSE_LIBJPEG_TURBO=1' \
-	'-DENABLE_WEBRTC=1' \
-	'-DUSE_PROPRIETARY_CODECS' \
-	'-DENABLE_CONFIGURATION_POLICY' \
-	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
-	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DENABLE_EGLIMAGE=1' \
-	'-DCLD_VERSION=1' \
-	'-DENABLE_PRINTING=1' \
-	'-DENABLE_MANAGED_USERS=1' \
-	'-DEVENTS_IMPLEMENTATION' \
-	'-DSK_ENABLE_INST_COUNT=0' \
-	'-DSK_SUPPORT_GPU=1' \
-	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
-	'-DSK_ENABLE_LEGACY_API_ALIASING=1' \
-	'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
-	'-DGR_GL_IGNORE_ES3_MSAA=0' \
-	'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
-	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
-	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
-	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
-	'-DSK_SUPPORT_LEGACY_N32_NAME' \
-	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
-	'-DSK_BUILD_FOR_ANDROID' \
-	'-DSK_USE_POSIX_THREADS' \
-	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
-	'-DU_USING_ICU_NAMESPACE=0' \
-	'-DUSE_OPENSSL=1' \
-	'-DUSE_OPENSSL_CERTS=1' \
-	'-D__STDC_CONSTANT_MACROS' \
-	'-D__STDC_FORMAT_MACROS' \
-	'-DANDROID' \
-	'-D__GNU_SOURCE=1' \
-	'-DUSE_STLPORT=1' \
-	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
-	'-DCHROME_BUILD_ID=""' \
-	'-DNDEBUG' \
-	'-DNVALGRIND' \
-	'-DDYNAMIC_ANNOTATIONS_ENABLED=0' \
-	'-D_FORTIFY_SOURCE=2'
-
-
-# Include paths placed before CFLAGS/CPPFLAGS
-LOCAL_C_INCLUDES_Release := \
-	$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
-	$(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
-	$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
-	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/skia/config \
-	$(LOCAL_PATH)/third_party/skia/src/core \
-	$(LOCAL_PATH)/third_party/skia/include/core \
-	$(LOCAL_PATH)/third_party/skia/include/effects \
-	$(LOCAL_PATH)/third_party/skia/include/pdf \
-	$(LOCAL_PATH)/third_party/skia/include/gpu \
-	$(LOCAL_PATH)/third_party/skia/include/lazy \
-	$(LOCAL_PATH)/third_party/skia/include/pathops \
-	$(LOCAL_PATH)/third_party/skia/include/pipe \
-	$(LOCAL_PATH)/third_party/skia/include/ports \
-	$(LOCAL_PATH)/third_party/skia/include/utils \
-	$(LOCAL_PATH)/skia/ext \
-	$(PWD)/external/icu4c/common \
-	$(PWD)/external/icu4c/i18n \
-	$(PWD)/frameworks/wilhelm/include \
-	$(PWD)/bionic \
-	$(PWD)/external/stlport/stlport
-
-
-# Flags passed to only C++ (and not C) files.
-LOCAL_CPPFLAGS_Release := \
-	-fno-rtti \
-	-fno-threadsafe-statics \
-	-fvisibility-inlines-hidden \
-	-Wsign-compare \
-	-Wno-non-virtual-dtor \
-	-Wno-sign-promo
-
-
-LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION))
-LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))
-LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))
-LOCAL_ASFLAGS := $(LOCAL_CFLAGS)
-### Rules for final target.
-
-LOCAL_LDFLAGS_Debug := \
-	-Wl,-z,now \
-	-Wl,-z,relro \
-	-Wl,--fatal-warnings \
-	-Wl,-z,noexecstack \
-	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
-	-nostdlib \
-	-Wl,--no-undefined \
-	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
-	-Wl,--warn-shared-textrel \
-	-Wl,-O1 \
-	-Wl,--as-needed
-
-
-LOCAL_LDFLAGS_Release := \
-	-Wl,-z,now \
-	-Wl,-z,relro \
-	-Wl,--fatal-warnings \
-	-Wl,-z,noexecstack \
-	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
-	-nostdlib \
-	-Wl,--no-undefined \
-	-Wl,--exclude-libs=ALL \
-	-Wl,-O1 \
-	-Wl,--as-needed \
-	-Wl,--gc-sections \
-	-Wl,--warn-shared-textrel
-
-
-LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
-
-LOCAL_STATIC_LIBRARIES := \
-	skia_skia_library_gyp
-
-# Enable grouping to fix circular references
-LOCAL_GROUP_STATIC_LIBRARIES := true
-
-LOCAL_SHARED_LIBRARIES := \
-	libstlport \
-	libdl
-
-# Add target alias to "gyp_all_modules" target.
-.PHONY: gyp_all_modules
-gyp_all_modules: ui_events_events_gyp
-
-# Alias gyp target name.
-.PHONY: events
-events: ui_events_events_gyp
-
-include $(BUILD_STATIC_LIBRARY)
diff --git a/ui/events/events.target.darwin-x86_64.mk b/ui/events/events.target.darwin-x86_64.mk
deleted file mode 100644
index 00e97fd..0000000
--- a/ui/events/events.target.darwin-x86_64.mk
+++ /dev/null
@@ -1,349 +0,0 @@
-# This file is generated by gyp; do not edit.
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := ui_events_events_gyp
-LOCAL_MODULE_SUFFIX := .a
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
-gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
-gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
-
-# Make sure our deps are built first.
-GYP_TARGET_DEPENDENCIES := \
-	$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a
-
-GYP_GENERATED_OUTPUTS :=
-
-# Make sure our deps and generated files are built first.
-LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
-
-LOCAL_CPP_EXTENSION := .cc
-LOCAL_GENERATED_SOURCES :=
-
-GYP_COPIED_SOURCE_ORIGIN_DIRS :=
-
-LOCAL_SRC_FILES := \
-	ui/events/event.cc \
-	ui/events/event_dispatcher.cc \
-	ui/events/event_handler.cc \
-	ui/events/event_processor.cc \
-	ui/events/event_source.cc \
-	ui/events/event_target.cc \
-	ui/events/event_targeter.cc \
-	ui/events/event_utils.cc \
-	ui/events/events_stub.cc \
-	ui/events/gestures/gesture_configuration.cc \
-	ui/events/gestures/gesture_point.cc \
-	ui/events/gestures/gesture_recognizer_impl.cc \
-	ui/events/gestures/gesture_sequence.cc \
-	ui/events/gestures/velocity_calculator.cc \
-	ui/events/platform/platform_event_source.cc \
-	ui/events/platform/platform_event_source_stub.cc \
-	ui/events/platform/scoped_event_dispatcher.cc
-
-
-# Flags passed to both C and C++ files.
-MY_CFLAGS_Debug := \
-	-fstack-protector \
-	--param=ssp-buffer-size=4 \
-	-Werror \
-	-fno-exceptions \
-	-fno-strict-aliasing \
-	-Wall \
-	-Wno-unused-parameter \
-	-Wno-missing-field-initializers \
-	-fvisibility=hidden \
-	-pipe \
-	-fPIC \
-	-Wno-unused-local-typedefs \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
-	-ffunction-sections \
-	-funwind-tables \
-	-g \
-	-fstack-protector \
-	-fno-short-enums \
-	-finline-limit=64 \
-	-Wa,--noexecstack \
-	-U_FORTIFY_SOURCE \
-	-Wno-extra \
-	-Wno-ignored-qualifiers \
-	-Wno-type-limits \
-	-Wno-unused-but-set-variable \
-	-Os \
-	-g \
-	-fomit-frame-pointer \
-	-fdata-sections \
-	-ffunction-sections \
-	-funwind-tables
-
-MY_DEFS_Debug := \
-	'-DV8_DEPRECATION_WARNINGS' \
-	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
-	'-D_FILE_OFFSET_BITS=64' \
-	'-DNO_TCMALLOC' \
-	'-DDISABLE_NACL' \
-	'-DCHROMIUM_BUILD' \
-	'-DUSE_LIBJPEG_TURBO=1' \
-	'-DENABLE_WEBRTC=1' \
-	'-DUSE_PROPRIETARY_CODECS' \
-	'-DENABLE_CONFIGURATION_POLICY' \
-	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
-	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DENABLE_EGLIMAGE=1' \
-	'-DCLD_VERSION=1' \
-	'-DENABLE_PRINTING=1' \
-	'-DENABLE_MANAGED_USERS=1' \
-	'-DEVENTS_IMPLEMENTATION' \
-	'-DSK_ENABLE_INST_COUNT=0' \
-	'-DSK_SUPPORT_GPU=1' \
-	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
-	'-DSK_ENABLE_LEGACY_API_ALIASING=1' \
-	'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
-	'-DGR_GL_IGNORE_ES3_MSAA=0' \
-	'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
-	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
-	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
-	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
-	'-DSK_SUPPORT_LEGACY_N32_NAME' \
-	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
-	'-DSK_BUILD_FOR_ANDROID' \
-	'-DSK_USE_POSIX_THREADS' \
-	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
-	'-DU_USING_ICU_NAMESPACE=0' \
-	'-DUSE_OPENSSL=1' \
-	'-DUSE_OPENSSL_CERTS=1' \
-	'-D__STDC_CONSTANT_MACROS' \
-	'-D__STDC_FORMAT_MACROS' \
-	'-DANDROID' \
-	'-D__GNU_SOURCE=1' \
-	'-DUSE_STLPORT=1' \
-	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
-	'-DCHROME_BUILD_ID=""' \
-	'-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
-	'-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
-	'-D_DEBUG'
-
-
-# Include paths placed before CFLAGS/CPPFLAGS
-LOCAL_C_INCLUDES_Debug := \
-	$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
-	$(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
-	$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
-	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/skia/config \
-	$(LOCAL_PATH)/third_party/skia/src/core \
-	$(LOCAL_PATH)/third_party/skia/include/core \
-	$(LOCAL_PATH)/third_party/skia/include/effects \
-	$(LOCAL_PATH)/third_party/skia/include/pdf \
-	$(LOCAL_PATH)/third_party/skia/include/gpu \
-	$(LOCAL_PATH)/third_party/skia/include/lazy \
-	$(LOCAL_PATH)/third_party/skia/include/pathops \
-	$(LOCAL_PATH)/third_party/skia/include/pipe \
-	$(LOCAL_PATH)/third_party/skia/include/ports \
-	$(LOCAL_PATH)/third_party/skia/include/utils \
-	$(LOCAL_PATH)/skia/ext \
-	$(PWD)/external/icu4c/common \
-	$(PWD)/external/icu4c/i18n \
-	$(PWD)/frameworks/wilhelm/include \
-	$(PWD)/bionic \
-	$(PWD)/external/stlport/stlport
-
-
-# Flags passed to only C++ (and not C) files.
-LOCAL_CPPFLAGS_Debug := \
-	-fno-rtti \
-	-fno-threadsafe-statics \
-	-fvisibility-inlines-hidden \
-	-Wsign-compare \
-	-Wno-non-virtual-dtor \
-	-Wno-sign-promo
-
-
-# Flags passed to both C and C++ files.
-MY_CFLAGS_Release := \
-	-fstack-protector \
-	--param=ssp-buffer-size=4 \
-	-Werror \
-	-fno-exceptions \
-	-fno-strict-aliasing \
-	-Wall \
-	-Wno-unused-parameter \
-	-Wno-missing-field-initializers \
-	-fvisibility=hidden \
-	-pipe \
-	-fPIC \
-	-Wno-unused-local-typedefs \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
-	-ffunction-sections \
-	-funwind-tables \
-	-g \
-	-fstack-protector \
-	-fno-short-enums \
-	-finline-limit=64 \
-	-Wa,--noexecstack \
-	-U_FORTIFY_SOURCE \
-	-Wno-extra \
-	-Wno-ignored-qualifiers \
-	-Wno-type-limits \
-	-Wno-unused-but-set-variable \
-	-Os \
-	-fno-ident \
-	-fdata-sections \
-	-ffunction-sections \
-	-fomit-frame-pointer \
-	-funwind-tables
-
-MY_DEFS_Release := \
-	'-DV8_DEPRECATION_WARNINGS' \
-	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
-	'-D_FILE_OFFSET_BITS=64' \
-	'-DNO_TCMALLOC' \
-	'-DDISABLE_NACL' \
-	'-DCHROMIUM_BUILD' \
-	'-DUSE_LIBJPEG_TURBO=1' \
-	'-DENABLE_WEBRTC=1' \
-	'-DUSE_PROPRIETARY_CODECS' \
-	'-DENABLE_CONFIGURATION_POLICY' \
-	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
-	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DENABLE_EGLIMAGE=1' \
-	'-DCLD_VERSION=1' \
-	'-DENABLE_PRINTING=1' \
-	'-DENABLE_MANAGED_USERS=1' \
-	'-DEVENTS_IMPLEMENTATION' \
-	'-DSK_ENABLE_INST_COUNT=0' \
-	'-DSK_SUPPORT_GPU=1' \
-	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
-	'-DSK_ENABLE_LEGACY_API_ALIASING=1' \
-	'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
-	'-DGR_GL_IGNORE_ES3_MSAA=0' \
-	'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
-	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
-	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
-	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
-	'-DSK_SUPPORT_LEGACY_N32_NAME' \
-	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
-	'-DSK_BUILD_FOR_ANDROID' \
-	'-DSK_USE_POSIX_THREADS' \
-	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
-	'-DU_USING_ICU_NAMESPACE=0' \
-	'-DUSE_OPENSSL=1' \
-	'-DUSE_OPENSSL_CERTS=1' \
-	'-D__STDC_CONSTANT_MACROS' \
-	'-D__STDC_FORMAT_MACROS' \
-	'-DANDROID' \
-	'-D__GNU_SOURCE=1' \
-	'-DUSE_STLPORT=1' \
-	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
-	'-DCHROME_BUILD_ID=""' \
-	'-DNDEBUG' \
-	'-DNVALGRIND' \
-	'-DDYNAMIC_ANNOTATIONS_ENABLED=0' \
-	'-D_FORTIFY_SOURCE=2'
-
-
-# Include paths placed before CFLAGS/CPPFLAGS
-LOCAL_C_INCLUDES_Release := \
-	$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
-	$(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
-	$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
-	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/skia/config \
-	$(LOCAL_PATH)/third_party/skia/src/core \
-	$(LOCAL_PATH)/third_party/skia/include/core \
-	$(LOCAL_PATH)/third_party/skia/include/effects \
-	$(LOCAL_PATH)/third_party/skia/include/pdf \
-	$(LOCAL_PATH)/third_party/skia/include/gpu \
-	$(LOCAL_PATH)/third_party/skia/include/lazy \
-	$(LOCAL_PATH)/third_party/skia/include/pathops \
-	$(LOCAL_PATH)/third_party/skia/include/pipe \
-	$(LOCAL_PATH)/third_party/skia/include/ports \
-	$(LOCAL_PATH)/third_party/skia/include/utils \
-	$(LOCAL_PATH)/skia/ext \
-	$(PWD)/external/icu4c/common \
-	$(PWD)/external/icu4c/i18n \
-	$(PWD)/frameworks/wilhelm/include \
-	$(PWD)/bionic \
-	$(PWD)/external/stlport/stlport
-
-
-# Flags passed to only C++ (and not C) files.
-LOCAL_CPPFLAGS_Release := \
-	-fno-rtti \
-	-fno-threadsafe-statics \
-	-fvisibility-inlines-hidden \
-	-Wsign-compare \
-	-Wno-non-virtual-dtor \
-	-Wno-sign-promo
-
-
-LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION))
-LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))
-LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))
-LOCAL_ASFLAGS := $(LOCAL_CFLAGS)
-### Rules for final target.
-
-LOCAL_LDFLAGS_Debug := \
-	-Wl,-z,now \
-	-Wl,-z,relro \
-	-Wl,--fatal-warnings \
-	-Wl,-z,noexecstack \
-	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
-	-nostdlib \
-	-Wl,--no-undefined \
-	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
-	-Wl,--warn-shared-textrel \
-	-Wl,-O1 \
-	-Wl,--as-needed
-
-
-LOCAL_LDFLAGS_Release := \
-	-Wl,-z,now \
-	-Wl,-z,relro \
-	-Wl,--fatal-warnings \
-	-Wl,-z,noexecstack \
-	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
-	-nostdlib \
-	-Wl,--no-undefined \
-	-Wl,--exclude-libs=ALL \
-	-Wl,-O1 \
-	-Wl,--as-needed \
-	-Wl,--gc-sections \
-	-Wl,--warn-shared-textrel
-
-
-LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
-
-LOCAL_STATIC_LIBRARIES := \
-	skia_skia_library_gyp
-
-# Enable grouping to fix circular references
-LOCAL_GROUP_STATIC_LIBRARIES := true
-
-LOCAL_SHARED_LIBRARIES := \
-	libstlport \
-	libdl
-
-# Add target alias to "gyp_all_modules" target.
-.PHONY: gyp_all_modules
-gyp_all_modules: ui_events_events_gyp
-
-# Alias gyp target name.
-.PHONY: events
-events: ui_events_events_gyp
-
-include $(BUILD_STATIC_LIBRARY)
diff --git a/ui/events/events.target.linux-arm.mk b/ui/events/events.target.linux-arm.mk
deleted file mode 100644
index d2be3d5..0000000
--- a/ui/events/events.target.linux-arm.mk
+++ /dev/null
@@ -1,353 +0,0 @@
-# This file is generated by gyp; do not edit.
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := ui_events_events_gyp
-LOCAL_MODULE_SUFFIX := .a
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
-gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
-gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
-
-# Make sure our deps are built first.
-GYP_TARGET_DEPENDENCIES := \
-	$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a
-
-GYP_GENERATED_OUTPUTS :=
-
-# Make sure our deps and generated files are built first.
-LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
-
-LOCAL_CPP_EXTENSION := .cc
-LOCAL_GENERATED_SOURCES :=
-
-GYP_COPIED_SOURCE_ORIGIN_DIRS :=
-
-LOCAL_SRC_FILES := \
-	ui/events/event.cc \
-	ui/events/event_dispatcher.cc \
-	ui/events/event_handler.cc \
-	ui/events/event_processor.cc \
-	ui/events/event_source.cc \
-	ui/events/event_target.cc \
-	ui/events/event_targeter.cc \
-	ui/events/event_utils.cc \
-	ui/events/events_stub.cc \
-	ui/events/gestures/gesture_configuration.cc \
-	ui/events/gestures/gesture_point.cc \
-	ui/events/gestures/gesture_recognizer_impl.cc \
-	ui/events/gestures/gesture_sequence.cc \
-	ui/events/gestures/velocity_calculator.cc \
-	ui/events/platform/platform_event_source.cc \
-	ui/events/platform/platform_event_source_stub.cc \
-	ui/events/platform/scoped_event_dispatcher.cc
-
-
-# Flags passed to both C and C++ files.
-MY_CFLAGS_Debug := \
-	-fstack-protector \
-	--param=ssp-buffer-size=4 \
-	-Werror \
-	-fno-exceptions \
-	-fno-strict-aliasing \
-	-Wall \
-	-Wno-unused-parameter \
-	-Wno-missing-field-initializers \
-	-fvisibility=hidden \
-	-pipe \
-	-fPIC \
-	-fno-tree-sra \
-	-fuse-ld=gold \
-	-Wno-psabi \
-	-ffunction-sections \
-	-funwind-tables \
-	-g \
-	-fstack-protector \
-	-fno-short-enums \
-	-finline-limit=64 \
-	-Wa,--noexecstack \
-	-U_FORTIFY_SOURCE \
-	-Wno-extra \
-	-Wno-ignored-qualifiers \
-	-Wno-type-limits \
-	-Wno-unused-but-set-variable \
-	-Os \
-	-g \
-	-fomit-frame-pointer \
-	-fdata-sections \
-	-ffunction-sections \
-	-funwind-tables
-
-MY_DEFS_Debug := \
-	'-DV8_DEPRECATION_WARNINGS' \
-	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
-	'-D_FILE_OFFSET_BITS=64' \
-	'-DNO_TCMALLOC' \
-	'-DDISABLE_NACL' \
-	'-DCHROMIUM_BUILD' \
-	'-DUSE_LIBJPEG_TURBO=1' \
-	'-DENABLE_WEBRTC=1' \
-	'-DUSE_PROPRIETARY_CODECS' \
-	'-DENABLE_CONFIGURATION_POLICY' \
-	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
-	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DENABLE_EGLIMAGE=1' \
-	'-DCLD_VERSION=1' \
-	'-DENABLE_PRINTING=1' \
-	'-DENABLE_MANAGED_USERS=1' \
-	'-DEVENTS_IMPLEMENTATION' \
-	'-DSK_ENABLE_INST_COUNT=0' \
-	'-DSK_SUPPORT_GPU=1' \
-	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
-	'-DSK_ENABLE_LEGACY_API_ALIASING=1' \
-	'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
-	'-DGR_GL_IGNORE_ES3_MSAA=0' \
-	'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
-	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
-	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
-	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
-	'-DSK_SUPPORT_LEGACY_N32_NAME' \
-	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
-	'-DSK_BUILD_FOR_ANDROID' \
-	'-DSK_USE_POSIX_THREADS' \
-	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
-	'-DU_USING_ICU_NAMESPACE=0' \
-	'-DUSE_OPENSSL=1' \
-	'-DUSE_OPENSSL_CERTS=1' \
-	'-D__STDC_CONSTANT_MACROS' \
-	'-D__STDC_FORMAT_MACROS' \
-	'-DANDROID' \
-	'-D__GNU_SOURCE=1' \
-	'-DUSE_STLPORT=1' \
-	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
-	'-DCHROME_BUILD_ID=""' \
-	'-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
-	'-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
-	'-D_DEBUG'
-
-
-# Include paths placed before CFLAGS/CPPFLAGS
-LOCAL_C_INCLUDES_Debug := \
-	$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
-	$(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
-	$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
-	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/skia/config \
-	$(LOCAL_PATH)/third_party/skia/src/core \
-	$(LOCAL_PATH)/third_party/skia/include/core \
-	$(LOCAL_PATH)/third_party/skia/include/effects \
-	$(LOCAL_PATH)/third_party/skia/include/pdf \
-	$(LOCAL_PATH)/third_party/skia/include/gpu \
-	$(LOCAL_PATH)/third_party/skia/include/lazy \
-	$(LOCAL_PATH)/third_party/skia/include/pathops \
-	$(LOCAL_PATH)/third_party/skia/include/pipe \
-	$(LOCAL_PATH)/third_party/skia/include/ports \
-	$(LOCAL_PATH)/third_party/skia/include/utils \
-	$(LOCAL_PATH)/skia/ext \
-	$(PWD)/external/icu4c/common \
-	$(PWD)/external/icu4c/i18n \
-	$(PWD)/frameworks/wilhelm/include \
-	$(PWD)/bionic \
-	$(PWD)/external/stlport/stlport
-
-
-# Flags passed to only C++ (and not C) files.
-LOCAL_CPPFLAGS_Debug := \
-	-fno-rtti \
-	-fno-threadsafe-statics \
-	-fvisibility-inlines-hidden \
-	-Wsign-compare \
-	-Wno-abi \
-	-Wno-non-virtual-dtor \
-	-Wno-sign-promo
-
-
-# Flags passed to both C and C++ files.
-MY_CFLAGS_Release := \
-	-fstack-protector \
-	--param=ssp-buffer-size=4 \
-	-Werror \
-	-fno-exceptions \
-	-fno-strict-aliasing \
-	-Wall \
-	-Wno-unused-parameter \
-	-Wno-missing-field-initializers \
-	-fvisibility=hidden \
-	-pipe \
-	-fPIC \
-	-fno-tree-sra \
-	-fuse-ld=gold \
-	-Wno-psabi \
-	-ffunction-sections \
-	-funwind-tables \
-	-g \
-	-fstack-protector \
-	-fno-short-enums \
-	-finline-limit=64 \
-	-Wa,--noexecstack \
-	-U_FORTIFY_SOURCE \
-	-Wno-extra \
-	-Wno-ignored-qualifiers \
-	-Wno-type-limits \
-	-Wno-unused-but-set-variable \
-	-Os \
-	-fno-ident \
-	-fdata-sections \
-	-ffunction-sections \
-	-fomit-frame-pointer \
-	-funwind-tables
-
-MY_DEFS_Release := \
-	'-DV8_DEPRECATION_WARNINGS' \
-	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
-	'-D_FILE_OFFSET_BITS=64' \
-	'-DNO_TCMALLOC' \
-	'-DDISABLE_NACL' \
-	'-DCHROMIUM_BUILD' \
-	'-DUSE_LIBJPEG_TURBO=1' \
-	'-DENABLE_WEBRTC=1' \
-	'-DUSE_PROPRIETARY_CODECS' \
-	'-DENABLE_CONFIGURATION_POLICY' \
-	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
-	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DENABLE_EGLIMAGE=1' \
-	'-DCLD_VERSION=1' \
-	'-DENABLE_PRINTING=1' \
-	'-DENABLE_MANAGED_USERS=1' \
-	'-DEVENTS_IMPLEMENTATION' \
-	'-DSK_ENABLE_INST_COUNT=0' \
-	'-DSK_SUPPORT_GPU=1' \
-	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
-	'-DSK_ENABLE_LEGACY_API_ALIASING=1' \
-	'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
-	'-DGR_GL_IGNORE_ES3_MSAA=0' \
-	'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
-	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
-	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
-	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
-	'-DSK_SUPPORT_LEGACY_N32_NAME' \
-	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
-	'-DSK_BUILD_FOR_ANDROID' \
-	'-DSK_USE_POSIX_THREADS' \
-	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
-	'-DU_USING_ICU_NAMESPACE=0' \
-	'-DUSE_OPENSSL=1' \
-	'-DUSE_OPENSSL_CERTS=1' \
-	'-D__STDC_CONSTANT_MACROS' \
-	'-D__STDC_FORMAT_MACROS' \
-	'-DANDROID' \
-	'-D__GNU_SOURCE=1' \
-	'-DUSE_STLPORT=1' \
-	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
-	'-DCHROME_BUILD_ID=""' \
-	'-DNDEBUG' \
-	'-DNVALGRIND' \
-	'-DDYNAMIC_ANNOTATIONS_ENABLED=0' \
-	'-D_FORTIFY_SOURCE=2'
-
-
-# Include paths placed before CFLAGS/CPPFLAGS
-LOCAL_C_INCLUDES_Release := \
-	$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
-	$(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
-	$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
-	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/skia/config \
-	$(LOCAL_PATH)/third_party/skia/src/core \
-	$(LOCAL_PATH)/third_party/skia/include/core \
-	$(LOCAL_PATH)/third_party/skia/include/effects \
-	$(LOCAL_PATH)/third_party/skia/include/pdf \
-	$(LOCAL_PATH)/third_party/skia/include/gpu \
-	$(LOCAL_PATH)/third_party/skia/include/lazy \
-	$(LOCAL_PATH)/third_party/skia/include/pathops \
-	$(LOCAL_PATH)/third_party/skia/include/pipe \
-	$(LOCAL_PATH)/third_party/skia/include/ports \
-	$(LOCAL_PATH)/third_party/skia/include/utils \
-	$(LOCAL_PATH)/skia/ext \
-	$(PWD)/external/icu4c/common \
-	$(PWD)/external/icu4c/i18n \
-	$(PWD)/frameworks/wilhelm/include \
-	$(PWD)/bionic \
-	$(PWD)/external/stlport/stlport
-
-
-# Flags passed to only C++ (and not C) files.
-LOCAL_CPPFLAGS_Release := \
-	-fno-rtti \
-	-fno-threadsafe-statics \
-	-fvisibility-inlines-hidden \
-	-Wsign-compare \
-	-Wno-abi \
-	-Wno-non-virtual-dtor \
-	-Wno-sign-promo
-
-
-LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION))
-LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))
-LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))
-LOCAL_ASFLAGS := $(LOCAL_CFLAGS)
-### Rules for final target.
-
-LOCAL_LDFLAGS_Debug := \
-	-Wl,-z,now \
-	-Wl,-z,relro \
-	-Wl,--fatal-warnings \
-	-Wl,-z,noexecstack \
-	-fPIC \
-	-Wl,-z,relro \
-	-Wl,-z,now \
-	-fuse-ld=gold \
-	-nostdlib \
-	-Wl,--no-undefined \
-	-Wl,--exclude-libs=ALL \
-	-Wl,--icf=safe \
-	-Wl,--gc-sections \
-	-Wl,--warn-shared-textrel \
-	-Wl,-O1 \
-	-Wl,--as-needed
-
-
-LOCAL_LDFLAGS_Release := \
-	-Wl,-z,now \
-	-Wl,-z,relro \
-	-Wl,--fatal-warnings \
-	-Wl,-z,noexecstack \
-	-fPIC \
-	-Wl,-z,relro \
-	-Wl,-z,now \
-	-fuse-ld=gold \
-	-nostdlib \
-	-Wl,--no-undefined \
-	-Wl,--exclude-libs=ALL \
-	-Wl,--icf=safe \
-	-Wl,-O1 \
-	-Wl,--as-needed \
-	-Wl,--gc-sections \
-	-Wl,--warn-shared-textrel
-
-
-LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
-
-LOCAL_STATIC_LIBRARIES := \
-	skia_skia_library_gyp
-
-# Enable grouping to fix circular references
-LOCAL_GROUP_STATIC_LIBRARIES := true
-
-LOCAL_SHARED_LIBRARIES := \
-	libstlport \
-	libdl
-
-# Add target alias to "gyp_all_modules" target.
-.PHONY: gyp_all_modules
-gyp_all_modules: ui_events_events_gyp
-
-# Alias gyp target name.
-.PHONY: events
-events: ui_events_events_gyp
-
-include $(BUILD_STATIC_LIBRARY)
diff --git a/ui/events/events.target.linux-mips.mk b/ui/events/events.target.linux-mips.mk
deleted file mode 100644
index 34eae58..0000000
--- a/ui/events/events.target.linux-mips.mk
+++ /dev/null
@@ -1,347 +0,0 @@
-# This file is generated by gyp; do not edit.
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := ui_events_events_gyp
-LOCAL_MODULE_SUFFIX := .a
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
-gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
-gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
-
-# Make sure our deps are built first.
-GYP_TARGET_DEPENDENCIES := \
-	$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a
-
-GYP_GENERATED_OUTPUTS :=
-
-# Make sure our deps and generated files are built first.
-LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
-
-LOCAL_CPP_EXTENSION := .cc
-LOCAL_GENERATED_SOURCES :=
-
-GYP_COPIED_SOURCE_ORIGIN_DIRS :=
-
-LOCAL_SRC_FILES := \
-	ui/events/event.cc \
-	ui/events/event_dispatcher.cc \
-	ui/events/event_handler.cc \
-	ui/events/event_processor.cc \
-	ui/events/event_source.cc \
-	ui/events/event_target.cc \
-	ui/events/event_targeter.cc \
-	ui/events/event_utils.cc \
-	ui/events/events_stub.cc \
-	ui/events/gestures/gesture_configuration.cc \
-	ui/events/gestures/gesture_point.cc \
-	ui/events/gestures/gesture_recognizer_impl.cc \
-	ui/events/gestures/gesture_sequence.cc \
-	ui/events/gestures/velocity_calculator.cc \
-	ui/events/platform/platform_event_source.cc \
-	ui/events/platform/platform_event_source_stub.cc \
-	ui/events/platform/scoped_event_dispatcher.cc
-
-
-# Flags passed to both C and C++ files.
-MY_CFLAGS_Debug := \
-	-fstack-protector \
-	--param=ssp-buffer-size=4 \
-	 \
-	-fno-exceptions \
-	-fno-strict-aliasing \
-	-Wall \
-	-Wno-unused-parameter \
-	-Wno-missing-field-initializers \
-	-fvisibility=hidden \
-	-pipe \
-	-fPIC \
-	-EL \
-	-mhard-float \
-	-ffunction-sections \
-	-funwind-tables \
-	-g \
-	-fstack-protector \
-	-fno-short-enums \
-	-finline-limit=64 \
-	-Wa,--noexecstack \
-	-U_FORTIFY_SOURCE \
-	-Wno-extra \
-	-Wno-ignored-qualifiers \
-	-Wno-type-limits \
-	-Wno-unused-but-set-variable \
-	-Os \
-	-g \
-	-fomit-frame-pointer \
-	-fdata-sections \
-	-ffunction-sections \
-	-funwind-tables
-
-MY_DEFS_Debug := \
-	'-DV8_DEPRECATION_WARNINGS' \
-	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
-	'-D_FILE_OFFSET_BITS=64' \
-	'-DNO_TCMALLOC' \
-	'-DDISABLE_NACL' \
-	'-DCHROMIUM_BUILD' \
-	'-DUSE_LIBJPEG_TURBO=1' \
-	'-DENABLE_WEBRTC=1' \
-	'-DUSE_PROPRIETARY_CODECS' \
-	'-DENABLE_CONFIGURATION_POLICY' \
-	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
-	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DENABLE_EGLIMAGE=1' \
-	'-DCLD_VERSION=1' \
-	'-DENABLE_PRINTING=1' \
-	'-DENABLE_MANAGED_USERS=1' \
-	'-DEVENTS_IMPLEMENTATION' \
-	'-DSK_ENABLE_INST_COUNT=0' \
-	'-DSK_SUPPORT_GPU=1' \
-	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
-	'-DSK_ENABLE_LEGACY_API_ALIASING=1' \
-	'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
-	'-DGR_GL_IGNORE_ES3_MSAA=0' \
-	'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
-	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
-	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
-	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
-	'-DSK_SUPPORT_LEGACY_N32_NAME' \
-	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
-	'-DSK_BUILD_FOR_ANDROID' \
-	'-DSK_USE_POSIX_THREADS' \
-	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
-	'-DU_USING_ICU_NAMESPACE=0' \
-	'-DUSE_OPENSSL=1' \
-	'-DUSE_OPENSSL_CERTS=1' \
-	'-D__STDC_CONSTANT_MACROS' \
-	'-D__STDC_FORMAT_MACROS' \
-	'-DANDROID' \
-	'-D__GNU_SOURCE=1' \
-	'-DUSE_STLPORT=1' \
-	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
-	'-DCHROME_BUILD_ID=""' \
-	'-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
-	'-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
-	'-D_DEBUG'
-
-
-# Include paths placed before CFLAGS/CPPFLAGS
-LOCAL_C_INCLUDES_Debug := \
-	$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
-	$(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
-	$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
-	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/skia/config \
-	$(LOCAL_PATH)/third_party/skia/src/core \
-	$(LOCAL_PATH)/third_party/skia/include/core \
-	$(LOCAL_PATH)/third_party/skia/include/effects \
-	$(LOCAL_PATH)/third_party/skia/include/pdf \
-	$(LOCAL_PATH)/third_party/skia/include/gpu \
-	$(LOCAL_PATH)/third_party/skia/include/lazy \
-	$(LOCAL_PATH)/third_party/skia/include/pathops \
-	$(LOCAL_PATH)/third_party/skia/include/pipe \
-	$(LOCAL_PATH)/third_party/skia/include/ports \
-	$(LOCAL_PATH)/third_party/skia/include/utils \
-	$(LOCAL_PATH)/skia/ext \
-	$(PWD)/external/icu4c/common \
-	$(PWD)/external/icu4c/i18n \
-	$(PWD)/frameworks/wilhelm/include \
-	$(PWD)/bionic \
-	$(PWD)/external/stlport/stlport
-
-
-# Flags passed to only C++ (and not C) files.
-LOCAL_CPPFLAGS_Debug := \
-	-fno-rtti \
-	-fno-threadsafe-statics \
-	-fvisibility-inlines-hidden \
-	-Wsign-compare \
-	-Wno-uninitialized \
-	-Wno-non-virtual-dtor \
-	-Wno-sign-promo
-
-
-# Flags passed to both C and C++ files.
-MY_CFLAGS_Release := \
-	-fstack-protector \
-	--param=ssp-buffer-size=4 \
-	 \
-	-fno-exceptions \
-	-fno-strict-aliasing \
-	-Wall \
-	-Wno-unused-parameter \
-	-Wno-missing-field-initializers \
-	-fvisibility=hidden \
-	-pipe \
-	-fPIC \
-	-EL \
-	-mhard-float \
-	-ffunction-sections \
-	-funwind-tables \
-	-g \
-	-fstack-protector \
-	-fno-short-enums \
-	-finline-limit=64 \
-	-Wa,--noexecstack \
-	-U_FORTIFY_SOURCE \
-	-Wno-extra \
-	-Wno-ignored-qualifiers \
-	-Wno-type-limits \
-	-Wno-unused-but-set-variable \
-	-Os \
-	-fno-ident \
-	-fdata-sections \
-	-ffunction-sections \
-	-fomit-frame-pointer \
-	-funwind-tables
-
-MY_DEFS_Release := \
-	'-DV8_DEPRECATION_WARNINGS' \
-	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
-	'-D_FILE_OFFSET_BITS=64' \
-	'-DNO_TCMALLOC' \
-	'-DDISABLE_NACL' \
-	'-DCHROMIUM_BUILD' \
-	'-DUSE_LIBJPEG_TURBO=1' \
-	'-DENABLE_WEBRTC=1' \
-	'-DUSE_PROPRIETARY_CODECS' \
-	'-DENABLE_CONFIGURATION_POLICY' \
-	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
-	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DENABLE_EGLIMAGE=1' \
-	'-DCLD_VERSION=1' \
-	'-DENABLE_PRINTING=1' \
-	'-DENABLE_MANAGED_USERS=1' \
-	'-DEVENTS_IMPLEMENTATION' \
-	'-DSK_ENABLE_INST_COUNT=0' \
-	'-DSK_SUPPORT_GPU=1' \
-	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
-	'-DSK_ENABLE_LEGACY_API_ALIASING=1' \
-	'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
-	'-DGR_GL_IGNORE_ES3_MSAA=0' \
-	'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
-	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
-	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
-	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
-	'-DSK_SUPPORT_LEGACY_N32_NAME' \
-	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
-	'-DSK_BUILD_FOR_ANDROID' \
-	'-DSK_USE_POSIX_THREADS' \
-	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
-	'-DU_USING_ICU_NAMESPACE=0' \
-	'-DUSE_OPENSSL=1' \
-	'-DUSE_OPENSSL_CERTS=1' \
-	'-D__STDC_CONSTANT_MACROS' \
-	'-D__STDC_FORMAT_MACROS' \
-	'-DANDROID' \
-	'-D__GNU_SOURCE=1' \
-	'-DUSE_STLPORT=1' \
-	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
-	'-DCHROME_BUILD_ID=""' \
-	'-DNDEBUG' \
-	'-DNVALGRIND' \
-	'-DDYNAMIC_ANNOTATIONS_ENABLED=0' \
-	'-D_FORTIFY_SOURCE=2'
-
-
-# Include paths placed before CFLAGS/CPPFLAGS
-LOCAL_C_INCLUDES_Release := \
-	$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
-	$(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
-	$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
-	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/skia/config \
-	$(LOCAL_PATH)/third_party/skia/src/core \
-	$(LOCAL_PATH)/third_party/skia/include/core \
-	$(LOCAL_PATH)/third_party/skia/include/effects \
-	$(LOCAL_PATH)/third_party/skia/include/pdf \
-	$(LOCAL_PATH)/third_party/skia/include/gpu \
-	$(LOCAL_PATH)/third_party/skia/include/lazy \
-	$(LOCAL_PATH)/third_party/skia/include/pathops \
-	$(LOCAL_PATH)/third_party/skia/include/pipe \
-	$(LOCAL_PATH)/third_party/skia/include/ports \
-	$(LOCAL_PATH)/third_party/skia/include/utils \
-	$(LOCAL_PATH)/skia/ext \
-	$(PWD)/external/icu4c/common \
-	$(PWD)/external/icu4c/i18n \
-	$(PWD)/frameworks/wilhelm/include \
-	$(PWD)/bionic \
-	$(PWD)/external/stlport/stlport
-
-
-# Flags passed to only C++ (and not C) files.
-LOCAL_CPPFLAGS_Release := \
-	-fno-rtti \
-	-fno-threadsafe-statics \
-	-fvisibility-inlines-hidden \
-	-Wsign-compare \
-	-Wno-uninitialized \
-	-Wno-non-virtual-dtor \
-	-Wno-sign-promo
-
-
-LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION))
-LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))
-LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))
-LOCAL_ASFLAGS := $(LOCAL_CFLAGS)
-### Rules for final target.
-
-LOCAL_LDFLAGS_Debug := \
-	-Wl,-z,now \
-	-Wl,-z,relro \
-	-Wl,--fatal-warnings \
-	-Wl,-z,noexecstack \
-	-fPIC \
-	-EL \
-	-Wl,--no-keep-memory \
-	-nostdlib \
-	-Wl,--no-undefined \
-	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
-	-Wl,--warn-shared-textrel \
-	-Wl,-O1 \
-	-Wl,--as-needed
-
-
-LOCAL_LDFLAGS_Release := \
-	-Wl,-z,now \
-	-Wl,-z,relro \
-	-Wl,--fatal-warnings \
-	-Wl,-z,noexecstack \
-	-fPIC \
-	-EL \
-	-Wl,--no-keep-memory \
-	-nostdlib \
-	-Wl,--no-undefined \
-	-Wl,--exclude-libs=ALL \
-	-Wl,-O1 \
-	-Wl,--as-needed \
-	-Wl,--gc-sections \
-	-Wl,--warn-shared-textrel
-
-
-LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
-
-LOCAL_STATIC_LIBRARIES := \
-	skia_skia_library_gyp
-
-# Enable grouping to fix circular references
-LOCAL_GROUP_STATIC_LIBRARIES := true
-
-LOCAL_SHARED_LIBRARIES := \
-	libstlport \
-	libdl
-
-# Add target alias to "gyp_all_modules" target.
-.PHONY: gyp_all_modules
-gyp_all_modules: ui_events_events_gyp
-
-# Alias gyp target name.
-.PHONY: events
-events: ui_events_events_gyp
-
-include $(BUILD_STATIC_LIBRARY)
diff --git a/ui/events/events.target.linux-x86.mk b/ui/events/events.target.linux-x86.mk
deleted file mode 100644
index c56cc1d..0000000
--- a/ui/events/events.target.linux-x86.mk
+++ /dev/null
@@ -1,349 +0,0 @@
-# This file is generated by gyp; do not edit.
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := ui_events_events_gyp
-LOCAL_MODULE_SUFFIX := .a
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
-gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
-gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
-
-# Make sure our deps are built first.
-GYP_TARGET_DEPENDENCIES := \
-	$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a
-
-GYP_GENERATED_OUTPUTS :=
-
-# Make sure our deps and generated files are built first.
-LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
-
-LOCAL_CPP_EXTENSION := .cc
-LOCAL_GENERATED_SOURCES :=
-
-GYP_COPIED_SOURCE_ORIGIN_DIRS :=
-
-LOCAL_SRC_FILES := \
-	ui/events/event.cc \
-	ui/events/event_dispatcher.cc \
-	ui/events/event_handler.cc \
-	ui/events/event_processor.cc \
-	ui/events/event_source.cc \
-	ui/events/event_target.cc \
-	ui/events/event_targeter.cc \
-	ui/events/event_utils.cc \
-	ui/events/events_stub.cc \
-	ui/events/gestures/gesture_configuration.cc \
-	ui/events/gestures/gesture_point.cc \
-	ui/events/gestures/gesture_recognizer_impl.cc \
-	ui/events/gestures/gesture_sequence.cc \
-	ui/events/gestures/velocity_calculator.cc \
-	ui/events/platform/platform_event_source.cc \
-	ui/events/platform/platform_event_source_stub.cc \
-	ui/events/platform/scoped_event_dispatcher.cc
-
-
-# Flags passed to both C and C++ files.
-MY_CFLAGS_Debug := \
-	--param=ssp-buffer-size=4 \
-	-Werror \
-	-fno-exceptions \
-	-fno-strict-aliasing \
-	-Wall \
-	-Wno-unused-parameter \
-	-Wno-missing-field-initializers \
-	-fvisibility=hidden \
-	-pipe \
-	-fPIC \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
-	-ffunction-sections \
-	-funwind-tables \
-	-g \
-	-fno-short-enums \
-	-finline-limit=64 \
-	-Wa,--noexecstack \
-	-U_FORTIFY_SOURCE \
-	-Wno-extra \
-	-Wno-ignored-qualifiers \
-	-Wno-type-limits \
-	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
-	-Os \
-	-g \
-	-fomit-frame-pointer \
-	-fdata-sections \
-	-ffunction-sections \
-	-funwind-tables
-
-MY_DEFS_Debug := \
-	'-DV8_DEPRECATION_WARNINGS' \
-	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
-	'-D_FILE_OFFSET_BITS=64' \
-	'-DNO_TCMALLOC' \
-	'-DDISABLE_NACL' \
-	'-DCHROMIUM_BUILD' \
-	'-DUSE_LIBJPEG_TURBO=1' \
-	'-DENABLE_WEBRTC=1' \
-	'-DUSE_PROPRIETARY_CODECS' \
-	'-DENABLE_CONFIGURATION_POLICY' \
-	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
-	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DENABLE_EGLIMAGE=1' \
-	'-DCLD_VERSION=1' \
-	'-DENABLE_PRINTING=1' \
-	'-DENABLE_MANAGED_USERS=1' \
-	'-DEVENTS_IMPLEMENTATION' \
-	'-DSK_ENABLE_INST_COUNT=0' \
-	'-DSK_SUPPORT_GPU=1' \
-	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
-	'-DSK_ENABLE_LEGACY_API_ALIASING=1' \
-	'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
-	'-DGR_GL_IGNORE_ES3_MSAA=0' \
-	'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
-	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
-	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
-	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
-	'-DSK_SUPPORT_LEGACY_N32_NAME' \
-	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
-	'-DSK_BUILD_FOR_ANDROID' \
-	'-DSK_USE_POSIX_THREADS' \
-	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
-	'-DU_USING_ICU_NAMESPACE=0' \
-	'-DUSE_OPENSSL=1' \
-	'-DUSE_OPENSSL_CERTS=1' \
-	'-D__STDC_CONSTANT_MACROS' \
-	'-D__STDC_FORMAT_MACROS' \
-	'-DANDROID' \
-	'-D__GNU_SOURCE=1' \
-	'-DUSE_STLPORT=1' \
-	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
-	'-DCHROME_BUILD_ID=""' \
-	'-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
-	'-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
-	'-D_DEBUG'
-
-
-# Include paths placed before CFLAGS/CPPFLAGS
-LOCAL_C_INCLUDES_Debug := \
-	$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
-	$(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
-	$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
-	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/skia/config \
-	$(LOCAL_PATH)/third_party/skia/src/core \
-	$(LOCAL_PATH)/third_party/skia/include/core \
-	$(LOCAL_PATH)/third_party/skia/include/effects \
-	$(LOCAL_PATH)/third_party/skia/include/pdf \
-	$(LOCAL_PATH)/third_party/skia/include/gpu \
-	$(LOCAL_PATH)/third_party/skia/include/lazy \
-	$(LOCAL_PATH)/third_party/skia/include/pathops \
-	$(LOCAL_PATH)/third_party/skia/include/pipe \
-	$(LOCAL_PATH)/third_party/skia/include/ports \
-	$(LOCAL_PATH)/third_party/skia/include/utils \
-	$(LOCAL_PATH)/skia/ext \
-	$(PWD)/external/icu4c/common \
-	$(PWD)/external/icu4c/i18n \
-	$(PWD)/frameworks/wilhelm/include \
-	$(PWD)/bionic \
-	$(PWD)/external/stlport/stlport
-
-
-# Flags passed to only C++ (and not C) files.
-LOCAL_CPPFLAGS_Debug := \
-	-fno-rtti \
-	-fno-threadsafe-statics \
-	-fvisibility-inlines-hidden \
-	-Wsign-compare \
-	-Wno-non-virtual-dtor \
-	-Wno-sign-promo
-
-
-# Flags passed to both C and C++ files.
-MY_CFLAGS_Release := \
-	--param=ssp-buffer-size=4 \
-	-Werror \
-	-fno-exceptions \
-	-fno-strict-aliasing \
-	-Wall \
-	-Wno-unused-parameter \
-	-Wno-missing-field-initializers \
-	-fvisibility=hidden \
-	-pipe \
-	-fPIC \
-	-msse2 \
-	-mfpmath=sse \
-	-mmmx \
-	-m32 \
-	-fuse-ld=gold \
-	-ffunction-sections \
-	-funwind-tables \
-	-g \
-	-fno-short-enums \
-	-finline-limit=64 \
-	-Wa,--noexecstack \
-	-U_FORTIFY_SOURCE \
-	-Wno-extra \
-	-Wno-ignored-qualifiers \
-	-Wno-type-limits \
-	-Wno-unused-but-set-variable \
-	-fno-stack-protector \
-	-Os \
-	-fno-ident \
-	-fdata-sections \
-	-ffunction-sections \
-	-fomit-frame-pointer \
-	-funwind-tables
-
-MY_DEFS_Release := \
-	'-DV8_DEPRECATION_WARNINGS' \
-	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
-	'-D_FILE_OFFSET_BITS=64' \
-	'-DNO_TCMALLOC' \
-	'-DDISABLE_NACL' \
-	'-DCHROMIUM_BUILD' \
-	'-DUSE_LIBJPEG_TURBO=1' \
-	'-DENABLE_WEBRTC=1' \
-	'-DUSE_PROPRIETARY_CODECS' \
-	'-DENABLE_CONFIGURATION_POLICY' \
-	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
-	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DENABLE_EGLIMAGE=1' \
-	'-DCLD_VERSION=1' \
-	'-DENABLE_PRINTING=1' \
-	'-DENABLE_MANAGED_USERS=1' \
-	'-DEVENTS_IMPLEMENTATION' \
-	'-DSK_ENABLE_INST_COUNT=0' \
-	'-DSK_SUPPORT_GPU=1' \
-	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
-	'-DSK_ENABLE_LEGACY_API_ALIASING=1' \
-	'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
-	'-DGR_GL_IGNORE_ES3_MSAA=0' \
-	'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
-	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
-	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
-	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
-	'-DSK_SUPPORT_LEGACY_N32_NAME' \
-	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
-	'-DSK_BUILD_FOR_ANDROID' \
-	'-DSK_USE_POSIX_THREADS' \
-	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
-	'-DU_USING_ICU_NAMESPACE=0' \
-	'-DUSE_OPENSSL=1' \
-	'-DUSE_OPENSSL_CERTS=1' \
-	'-D__STDC_CONSTANT_MACROS' \
-	'-D__STDC_FORMAT_MACROS' \
-	'-DANDROID' \
-	'-D__GNU_SOURCE=1' \
-	'-DUSE_STLPORT=1' \
-	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
-	'-DCHROME_BUILD_ID=""' \
-	'-DNDEBUG' \
-	'-DNVALGRIND' \
-	'-DDYNAMIC_ANNOTATIONS_ENABLED=0' \
-	'-D_FORTIFY_SOURCE=2'
-
-
-# Include paths placed before CFLAGS/CPPFLAGS
-LOCAL_C_INCLUDES_Release := \
-	$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
-	$(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
-	$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
-	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/skia/config \
-	$(LOCAL_PATH)/third_party/skia/src/core \
-	$(LOCAL_PATH)/third_party/skia/include/core \
-	$(LOCAL_PATH)/third_party/skia/include/effects \
-	$(LOCAL_PATH)/third_party/skia/include/pdf \
-	$(LOCAL_PATH)/third_party/skia/include/gpu \
-	$(LOCAL_PATH)/third_party/skia/include/lazy \
-	$(LOCAL_PATH)/third_party/skia/include/pathops \
-	$(LOCAL_PATH)/third_party/skia/include/pipe \
-	$(LOCAL_PATH)/third_party/skia/include/ports \
-	$(LOCAL_PATH)/third_party/skia/include/utils \
-	$(LOCAL_PATH)/skia/ext \
-	$(PWD)/external/icu4c/common \
-	$(PWD)/external/icu4c/i18n \
-	$(PWD)/frameworks/wilhelm/include \
-	$(PWD)/bionic \
-	$(PWD)/external/stlport/stlport
-
-
-# Flags passed to only C++ (and not C) files.
-LOCAL_CPPFLAGS_Release := \
-	-fno-rtti \
-	-fno-threadsafe-statics \
-	-fvisibility-inlines-hidden \
-	-Wsign-compare \
-	-Wno-non-virtual-dtor \
-	-Wno-sign-promo
-
-
-LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION))
-LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))
-LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))
-LOCAL_ASFLAGS := $(LOCAL_CFLAGS)
-### Rules for final target.
-
-LOCAL_LDFLAGS_Debug := \
-	-Wl,-z,now \
-	-Wl,-z,relro \
-	-Wl,--fatal-warnings \
-	-Wl,-z,noexecstack \
-	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
-	-nostdlib \
-	-Wl,--no-undefined \
-	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
-	-Wl,--warn-shared-textrel \
-	-Wl,-O1 \
-	-Wl,--as-needed
-
-
-LOCAL_LDFLAGS_Release := \
-	-Wl,-z,now \
-	-Wl,-z,relro \
-	-Wl,--fatal-warnings \
-	-Wl,-z,noexecstack \
-	-fPIC \
-	-m32 \
-	-fuse-ld=gold \
-	-nostdlib \
-	-Wl,--no-undefined \
-	-Wl,--exclude-libs=ALL \
-	-Wl,-O1 \
-	-Wl,--as-needed \
-	-Wl,--gc-sections \
-	-Wl,--warn-shared-textrel
-
-
-LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
-
-LOCAL_STATIC_LIBRARIES := \
-	skia_skia_library_gyp
-
-# Enable grouping to fix circular references
-LOCAL_GROUP_STATIC_LIBRARIES := true
-
-LOCAL_SHARED_LIBRARIES := \
-	libstlport \
-	libdl
-
-# Add target alias to "gyp_all_modules" target.
-.PHONY: gyp_all_modules
-gyp_all_modules: ui_events_events_gyp
-
-# Alias gyp target name.
-.PHONY: events
-events: ui_events_events_gyp
-
-include $(BUILD_STATIC_LIBRARY)
diff --git a/ui/events/events.target.linux-x86_64.mk b/ui/events/events.target.linux-x86_64.mk
deleted file mode 100644
index 00e97fd..0000000
--- a/ui/events/events.target.linux-x86_64.mk
+++ /dev/null
@@ -1,349 +0,0 @@
-# This file is generated by gyp; do not edit.
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-LOCAL_MODULE := ui_events_events_gyp
-LOCAL_MODULE_SUFFIX := .a
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_TARGET_ARCH := $(TARGET_$(GYP_VAR_PREFIX)ARCH)
-gyp_intermediate_dir := $(call local-intermediates-dir,,$(GYP_VAR_PREFIX))
-gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared,,,$(GYP_VAR_PREFIX))
-
-# Make sure our deps are built first.
-GYP_TARGET_DEPENDENCIES := \
-	$(call intermediates-dir-for,GYP,skia_skia_gyp,,,$(GYP_VAR_PREFIX))/skia.stamp \
-	$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp,,,$(GYP_VAR_PREFIX))/skia_skia_library_gyp.a
-
-GYP_GENERATED_OUTPUTS :=
-
-# Make sure our deps and generated files are built first.
-LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
-
-LOCAL_CPP_EXTENSION := .cc
-LOCAL_GENERATED_SOURCES :=
-
-GYP_COPIED_SOURCE_ORIGIN_DIRS :=
-
-LOCAL_SRC_FILES := \
-	ui/events/event.cc \
-	ui/events/event_dispatcher.cc \
-	ui/events/event_handler.cc \
-	ui/events/event_processor.cc \
-	ui/events/event_source.cc \
-	ui/events/event_target.cc \
-	ui/events/event_targeter.cc \
-	ui/events/event_utils.cc \
-	ui/events/events_stub.cc \
-	ui/events/gestures/gesture_configuration.cc \
-	ui/events/gestures/gesture_point.cc \
-	ui/events/gestures/gesture_recognizer_impl.cc \
-	ui/events/gestures/gesture_sequence.cc \
-	ui/events/gestures/velocity_calculator.cc \
-	ui/events/platform/platform_event_source.cc \
-	ui/events/platform/platform_event_source_stub.cc \
-	ui/events/platform/scoped_event_dispatcher.cc
-
-
-# Flags passed to both C and C++ files.
-MY_CFLAGS_Debug := \
-	-fstack-protector \
-	--param=ssp-buffer-size=4 \
-	-Werror \
-	-fno-exceptions \
-	-fno-strict-aliasing \
-	-Wall \
-	-Wno-unused-parameter \
-	-Wno-missing-field-initializers \
-	-fvisibility=hidden \
-	-pipe \
-	-fPIC \
-	-Wno-unused-local-typedefs \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
-	-ffunction-sections \
-	-funwind-tables \
-	-g \
-	-fstack-protector \
-	-fno-short-enums \
-	-finline-limit=64 \
-	-Wa,--noexecstack \
-	-U_FORTIFY_SOURCE \
-	-Wno-extra \
-	-Wno-ignored-qualifiers \
-	-Wno-type-limits \
-	-Wno-unused-but-set-variable \
-	-Os \
-	-g \
-	-fomit-frame-pointer \
-	-fdata-sections \
-	-ffunction-sections \
-	-funwind-tables
-
-MY_DEFS_Debug := \
-	'-DV8_DEPRECATION_WARNINGS' \
-	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
-	'-D_FILE_OFFSET_BITS=64' \
-	'-DNO_TCMALLOC' \
-	'-DDISABLE_NACL' \
-	'-DCHROMIUM_BUILD' \
-	'-DUSE_LIBJPEG_TURBO=1' \
-	'-DENABLE_WEBRTC=1' \
-	'-DUSE_PROPRIETARY_CODECS' \
-	'-DENABLE_CONFIGURATION_POLICY' \
-	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
-	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DENABLE_EGLIMAGE=1' \
-	'-DCLD_VERSION=1' \
-	'-DENABLE_PRINTING=1' \
-	'-DENABLE_MANAGED_USERS=1' \
-	'-DEVENTS_IMPLEMENTATION' \
-	'-DSK_ENABLE_INST_COUNT=0' \
-	'-DSK_SUPPORT_GPU=1' \
-	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
-	'-DSK_ENABLE_LEGACY_API_ALIASING=1' \
-	'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
-	'-DGR_GL_IGNORE_ES3_MSAA=0' \
-	'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
-	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
-	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
-	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
-	'-DSK_SUPPORT_LEGACY_N32_NAME' \
-	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
-	'-DSK_BUILD_FOR_ANDROID' \
-	'-DSK_USE_POSIX_THREADS' \
-	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
-	'-DU_USING_ICU_NAMESPACE=0' \
-	'-DUSE_OPENSSL=1' \
-	'-DUSE_OPENSSL_CERTS=1' \
-	'-D__STDC_CONSTANT_MACROS' \
-	'-D__STDC_FORMAT_MACROS' \
-	'-DANDROID' \
-	'-D__GNU_SOURCE=1' \
-	'-DUSE_STLPORT=1' \
-	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
-	'-DCHROME_BUILD_ID=""' \
-	'-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
-	'-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
-	'-D_DEBUG'
-
-
-# Include paths placed before CFLAGS/CPPFLAGS
-LOCAL_C_INCLUDES_Debug := \
-	$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
-	$(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
-	$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
-	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/skia/config \
-	$(LOCAL_PATH)/third_party/skia/src/core \
-	$(LOCAL_PATH)/third_party/skia/include/core \
-	$(LOCAL_PATH)/third_party/skia/include/effects \
-	$(LOCAL_PATH)/third_party/skia/include/pdf \
-	$(LOCAL_PATH)/third_party/skia/include/gpu \
-	$(LOCAL_PATH)/third_party/skia/include/lazy \
-	$(LOCAL_PATH)/third_party/skia/include/pathops \
-	$(LOCAL_PATH)/third_party/skia/include/pipe \
-	$(LOCAL_PATH)/third_party/skia/include/ports \
-	$(LOCAL_PATH)/third_party/skia/include/utils \
-	$(LOCAL_PATH)/skia/ext \
-	$(PWD)/external/icu4c/common \
-	$(PWD)/external/icu4c/i18n \
-	$(PWD)/frameworks/wilhelm/include \
-	$(PWD)/bionic \
-	$(PWD)/external/stlport/stlport
-
-
-# Flags passed to only C++ (and not C) files.
-LOCAL_CPPFLAGS_Debug := \
-	-fno-rtti \
-	-fno-threadsafe-statics \
-	-fvisibility-inlines-hidden \
-	-Wsign-compare \
-	-Wno-non-virtual-dtor \
-	-Wno-sign-promo
-
-
-# Flags passed to both C and C++ files.
-MY_CFLAGS_Release := \
-	-fstack-protector \
-	--param=ssp-buffer-size=4 \
-	-Werror \
-	-fno-exceptions \
-	-fno-strict-aliasing \
-	-Wall \
-	-Wno-unused-parameter \
-	-Wno-missing-field-initializers \
-	-fvisibility=hidden \
-	-pipe \
-	-fPIC \
-	-Wno-unused-local-typedefs \
-	-m64 \
-	-march=x86-64 \
-	-fuse-ld=gold \
-	-ffunction-sections \
-	-funwind-tables \
-	-g \
-	-fstack-protector \
-	-fno-short-enums \
-	-finline-limit=64 \
-	-Wa,--noexecstack \
-	-U_FORTIFY_SOURCE \
-	-Wno-extra \
-	-Wno-ignored-qualifiers \
-	-Wno-type-limits \
-	-Wno-unused-but-set-variable \
-	-Os \
-	-fno-ident \
-	-fdata-sections \
-	-ffunction-sections \
-	-fomit-frame-pointer \
-	-funwind-tables
-
-MY_DEFS_Release := \
-	'-DV8_DEPRECATION_WARNINGS' \
-	'-DBLINK_SCALE_FILTERS_AT_RECORD_TIME' \
-	'-D_FILE_OFFSET_BITS=64' \
-	'-DNO_TCMALLOC' \
-	'-DDISABLE_NACL' \
-	'-DCHROMIUM_BUILD' \
-	'-DUSE_LIBJPEG_TURBO=1' \
-	'-DENABLE_WEBRTC=1' \
-	'-DUSE_PROPRIETARY_CODECS' \
-	'-DENABLE_CONFIGURATION_POLICY' \
-	'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
-	'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
-	'-DENABLE_EGLIMAGE=1' \
-	'-DCLD_VERSION=1' \
-	'-DENABLE_PRINTING=1' \
-	'-DENABLE_MANAGED_USERS=1' \
-	'-DEVENTS_IMPLEMENTATION' \
-	'-DSK_ENABLE_INST_COUNT=0' \
-	'-DSK_SUPPORT_GPU=1' \
-	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
-	'-DSK_ENABLE_LEGACY_API_ALIASING=1' \
-	'-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
-	'-DGR_GL_IGNORE_ES3_MSAA=0' \
-	'-DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT' \
-	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
-	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
-	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
-	'-DSK_SUPPORT_LEGACY_N32_NAME' \
-	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
-	'-DSK_BUILD_FOR_ANDROID' \
-	'-DSK_USE_POSIX_THREADS' \
-	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
-	'-DU_USING_ICU_NAMESPACE=0' \
-	'-DUSE_OPENSSL=1' \
-	'-DUSE_OPENSSL_CERTS=1' \
-	'-D__STDC_CONSTANT_MACROS' \
-	'-D__STDC_FORMAT_MACROS' \
-	'-DANDROID' \
-	'-D__GNU_SOURCE=1' \
-	'-DUSE_STLPORT=1' \
-	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
-	'-DCHROME_BUILD_ID=""' \
-	'-DNDEBUG' \
-	'-DNVALGRIND' \
-	'-DDYNAMIC_ANNOTATIONS_ENABLED=0' \
-	'-D_FORTIFY_SOURCE=2'
-
-
-# Include paths placed before CFLAGS/CPPFLAGS
-LOCAL_C_INCLUDES_Release := \
-	$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
-	$(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
-	$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
-	$(LOCAL_PATH) \
-	$(LOCAL_PATH)/skia/config \
-	$(LOCAL_PATH)/third_party/skia/src/core \
-	$(LOCAL_PATH)/third_party/skia/include/core \
-	$(LOCAL_PATH)/third_party/skia/include/effects \
-	$(LOCAL_PATH)/third_party/skia/include/pdf \
-	$(LOCAL_PATH)/third_party/skia/include/gpu \
-	$(LOCAL_PATH)/third_party/skia/include/lazy \
-	$(LOCAL_PATH)/third_party/skia/include/pathops \
-	$(LOCAL_PATH)/third_party/skia/include/pipe \
-	$(LOCAL_PATH)/third_party/skia/include/ports \
-	$(LOCAL_PATH)/third_party/skia/include/utils \
-	$(LOCAL_PATH)/skia/ext \
-	$(PWD)/external/icu4c/common \
-	$(PWD)/external/icu4c/i18n \
-	$(PWD)/frameworks/wilhelm/include \
-	$(PWD)/bionic \
-	$(PWD)/external/stlport/stlport
-
-
-# Flags passed to only C++ (and not C) files.
-LOCAL_CPPFLAGS_Release := \
-	-fno-rtti \
-	-fno-threadsafe-statics \
-	-fvisibility-inlines-hidden \
-	-Wsign-compare \
-	-Wno-non-virtual-dtor \
-	-Wno-sign-promo
-
-
-LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION))
-LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))
-LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))
-LOCAL_ASFLAGS := $(LOCAL_CFLAGS)
-### Rules for final target.
-
-LOCAL_LDFLAGS_Debug := \
-	-Wl,-z,now \
-	-Wl,-z,relro \
-	-Wl,--fatal-warnings \
-	-Wl,-z,noexecstack \
-	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
-	-nostdlib \
-	-Wl,--no-undefined \
-	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
-	-Wl,--warn-shared-textrel \
-	-Wl,-O1 \
-	-Wl,--as-needed
-
-
-LOCAL_LDFLAGS_Release := \
-	-Wl,-z,now \
-	-Wl,-z,relro \
-	-Wl,--fatal-warnings \
-	-Wl,-z,noexecstack \
-	-fPIC \
-	-m64 \
-	-fuse-ld=gold \
-	-nostdlib \
-	-Wl,--no-undefined \
-	-Wl,--exclude-libs=ALL \
-	-Wl,-O1 \
-	-Wl,--as-needed \
-	-Wl,--gc-sections \
-	-Wl,--warn-shared-textrel
-
-
-LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
-
-LOCAL_STATIC_LIBRARIES := \
-	skia_skia_library_gyp
-
-# Enable grouping to fix circular references
-LOCAL_GROUP_STATIC_LIBRARIES := true
-
-LOCAL_SHARED_LIBRARIES := \
-	libstlport \
-	libdl
-
-# Add target alias to "gyp_all_modules" target.
-.PHONY: gyp_all_modules
-gyp_all_modules: ui_events_events_gyp
-
-# Alias gyp target name.
-.PHONY: events
-events: ui_events_events_gyp
-
-include $(BUILD_STATIC_LIBRARY)
diff --git a/ui/events/events_base.target.darwin-arm.mk b/ui/events/events_base.target.darwin-arm.mk
index 19e3baa..570bc45 100644
--- a/ui/events/events_base.target.darwin-arm.mk
+++ b/ui/events/events_base.target.darwin-arm.mk
@@ -95,12 +95,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -215,12 +218,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -292,7 +298,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/events/events_base.target.darwin-mips.mk b/ui/events/events_base.target.darwin-mips.mk
index 3e9e19d..6420e34 100644
--- a/ui/events/events_base.target.darwin-mips.mk
+++ b/ui/events/events_base.target.darwin-mips.mk
@@ -94,12 +94,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -213,12 +216,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -288,7 +294,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/events/events_base.target.darwin-x86.mk b/ui/events/events_base.target.darwin-x86.mk
index b15bb08..b1557b4 100644
--- a/ui/events/events_base.target.darwin-x86.mk
+++ b/ui/events/events_base.target.darwin-x86.mk
@@ -96,12 +96,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -216,12 +219,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -290,7 +296,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/events/events_base.target.darwin-x86_64.mk b/ui/events/events_base.target.darwin-x86_64.mk
index 26c84cd..0c25552 100644
--- a/ui/events/events_base.target.darwin-x86_64.mk
+++ b/ui/events/events_base.target.darwin-x86_64.mk
@@ -96,12 +96,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -216,12 +219,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -290,7 +296,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/events/events_base.target.linux-arm.mk b/ui/events/events_base.target.linux-arm.mk
index 19e3baa..570bc45 100644
--- a/ui/events/events_base.target.linux-arm.mk
+++ b/ui/events/events_base.target.linux-arm.mk
@@ -95,12 +95,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -215,12 +218,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -292,7 +298,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/events/events_base.target.linux-mips.mk b/ui/events/events_base.target.linux-mips.mk
index 3e9e19d..6420e34 100644
--- a/ui/events/events_base.target.linux-mips.mk
+++ b/ui/events/events_base.target.linux-mips.mk
@@ -94,12 +94,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -213,12 +216,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -288,7 +294,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/events/events_base.target.linux-x86.mk b/ui/events/events_base.target.linux-x86.mk
index b15bb08..b1557b4 100644
--- a/ui/events/events_base.target.linux-x86.mk
+++ b/ui/events/events_base.target.linux-x86.mk
@@ -96,12 +96,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -216,12 +219,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -290,7 +296,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/events/events_base.target.linux-x86_64.mk b/ui/events/events_base.target.linux-x86_64.mk
index 26c84cd..0c25552 100644
--- a/ui/events/events_base.target.linux-x86_64.mk
+++ b/ui/events/events_base.target.linux-x86_64.mk
@@ -96,12 +96,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -216,12 +219,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -290,7 +296,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/events/gesture_detection.target.darwin-arm.mk b/ui/events/gesture_detection.target.darwin-arm.mk
index 86dd26c..a684bbc 100644
--- a/ui/events/gesture_detection.target.darwin-arm.mk
+++ b/ui/events/gesture_detection.target.darwin-arm.mk
@@ -101,12 +101,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -221,12 +224,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -298,7 +304,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/events/gesture_detection.target.darwin-mips.mk b/ui/events/gesture_detection.target.darwin-mips.mk
index 766cbdc..76e78d1 100644
--- a/ui/events/gesture_detection.target.darwin-mips.mk
+++ b/ui/events/gesture_detection.target.darwin-mips.mk
@@ -100,12 +100,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -219,12 +222,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -294,7 +300,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/events/gesture_detection.target.darwin-x86.mk b/ui/events/gesture_detection.target.darwin-x86.mk
index 2134ec1..c35addd 100644
--- a/ui/events/gesture_detection.target.darwin-x86.mk
+++ b/ui/events/gesture_detection.target.darwin-x86.mk
@@ -102,12 +102,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -222,12 +225,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -296,7 +302,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/events/gesture_detection.target.darwin-x86_64.mk b/ui/events/gesture_detection.target.darwin-x86_64.mk
index 489761d..e59f0d6 100644
--- a/ui/events/gesture_detection.target.darwin-x86_64.mk
+++ b/ui/events/gesture_detection.target.darwin-x86_64.mk
@@ -102,12 +102,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -222,12 +225,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -296,7 +302,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/events/gesture_detection.target.linux-arm.mk b/ui/events/gesture_detection.target.linux-arm.mk
index 86dd26c..a684bbc 100644
--- a/ui/events/gesture_detection.target.linux-arm.mk
+++ b/ui/events/gesture_detection.target.linux-arm.mk
@@ -101,12 +101,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -221,12 +224,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -298,7 +304,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/events/gesture_detection.target.linux-mips.mk b/ui/events/gesture_detection.target.linux-mips.mk
index 766cbdc..76e78d1 100644
--- a/ui/events/gesture_detection.target.linux-mips.mk
+++ b/ui/events/gesture_detection.target.linux-mips.mk
@@ -100,12 +100,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -219,12 +222,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -294,7 +300,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/events/gesture_detection.target.linux-x86.mk b/ui/events/gesture_detection.target.linux-x86.mk
index 2134ec1..c35addd 100644
--- a/ui/events/gesture_detection.target.linux-x86.mk
+++ b/ui/events/gesture_detection.target.linux-x86.mk
@@ -102,12 +102,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -222,12 +225,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -296,7 +302,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/events/gesture_detection.target.linux-x86_64.mk b/ui/events/gesture_detection.target.linux-x86_64.mk
index 489761d..e59f0d6 100644
--- a/ui/events/gesture_detection.target.linux-x86_64.mk
+++ b/ui/events/gesture_detection.target.linux-x86_64.mk
@@ -102,12 +102,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -222,12 +225,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -296,7 +302,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/events/gesture_detection/filtered_gesture_provider.cc b/ui/events/gesture_detection/filtered_gesture_provider.cc
index 9e3c493..76ee520 100644
--- a/ui/events/gesture_detection/filtered_gesture_provider.cc
+++ b/ui/events/gesture_detection/filtered_gesture_provider.cc
@@ -41,12 +41,9 @@
   gesture_filter_.OnTouchEventAck(event_consumed);
 }
 
-void FilteredGestureProvider::ResetGestureDetectors() {
-  gesture_provider_.ResetGestureDetectors();
-}
-
-void FilteredGestureProvider::SetMultiTouchSupportEnabled(bool enabled) {
-  gesture_provider_.SetMultiTouchSupportEnabled(enabled);
+void FilteredGestureProvider::SetMultiTouchZoomSupportEnabled(
+    bool enabled) {
+  gesture_provider_.SetMultiTouchZoomSupportEnabled(enabled);
 }
 
 void FilteredGestureProvider::SetDoubleTapSupportForPlatformEnabled(
diff --git a/ui/events/gesture_detection/filtered_gesture_provider.h b/ui/events/gesture_detection/filtered_gesture_provider.h
index b1f71e3..4d63be6 100644
--- a/ui/events/gesture_detection/filtered_gesture_provider.h
+++ b/ui/events/gesture_detection/filtered_gesture_provider.h
@@ -33,8 +33,7 @@
   void OnTouchEventAck(bool event_consumed);
 
   // Methods delegated to |gesture_provider_|.
-  void ResetGestureDetectors();
-  void SetMultiTouchSupportEnabled(bool enabled);
+  void SetMultiTouchZoomSupportEnabled(bool enabled);
   void SetDoubleTapSupportForPlatformEnabled(bool enabled);
   void SetDoubleTapSupportForPageEnabled(bool enabled);
   const ui::MotionEvent* GetCurrentDownEvent() const;
diff --git a/ui/events/gesture_detection/gesture_detector.cc b/ui/events/gesture_detection/gesture_detector.cc
index 1628c26..e086ef0 100644
--- a/ui/events/gesture_detection/gesture_detector.cc
+++ b/ui/events/gesture_detection/gesture_detector.cc
@@ -347,6 +347,24 @@
   return handled;
 }
 
+void GestureDetector::SetDoubleTapListener(
+    DoubleTapListener* double_tap_listener) {
+  if (double_tap_listener == double_tap_listener_)
+    return;
+
+  DCHECK(!is_double_tapping_);
+
+  // Null'ing the double-tap listener should flush an active tap timeout.
+  if (!double_tap_listener) {
+    if (timeout_handler_->HasTimeout(TAP)) {
+      timeout_handler_->StopTimeout(TAP);
+      OnTapTimeout();
+    }
+  }
+
+  double_tap_listener_ = double_tap_listener;
+}
+
 void GestureDetector::Init(const Config& config) {
   DCHECK(listener_);
 
diff --git a/ui/events/gesture_detection/gesture_detector.h b/ui/events/gesture_detection/gesture_detector.h
index c09b31f..5fe6a27 100644
--- a/ui/events/gesture_detection/gesture_detector.h
+++ b/ui/events/gesture_detection/gesture_detector.h
@@ -93,10 +93,10 @@
 
   bool OnTouchEvent(const MotionEvent& ev);
 
-  void set_doubletap_listener(DoubleTapListener* double_tap_listener) {
-    DCHECK(!is_double_tapping_ || double_tap_listener_);
-    double_tap_listener_ = double_tap_listener;
-  }
+  // Setting a valid |double_tap_listener| will enable double-tap detection,
+  // wherein calls to |OnSimpleTapConfirmed| are delayed by the tap timeout.
+  // Note: The listener must never be changed while |is_double_tapping| is true.
+  void SetDoubleTapListener(DoubleTapListener* double_tap_listener);
 
   bool has_doubletap_listener() const { return double_tap_listener_ != NULL; }
 
diff --git a/ui/events/gesture_detection/gesture_event_data.cc b/ui/events/gesture_detection/gesture_event_data.cc
index 0177d96..9cd92b3 100644
--- a/ui/events/gesture_detection/gesture_event_data.cc
+++ b/ui/events/gesture_detection/gesture_event_data.cc
@@ -14,6 +14,7 @@
                                    float x,
                                    float y,
                                    int touch_point_count,
+                                   const gfx::RectF& bounding_box,
                                    const GestureEventDetails& details)
     : type(type),
       motion_event_id(motion_event_id),
@@ -25,6 +26,7 @@
   DCHECK_NE(0, touch_point_count);
   DCHECK(ET_GESTURE_TYPE_START <= type && type <= ET_GESTURE_TYPE_END);
   this->details.set_touch_points(touch_point_count);
+  this->details.set_bounding_box(bounding_box);
 }
 
 GestureEventData::GestureEventData(EventType type,
@@ -32,7 +34,8 @@
                                    base::TimeTicks time,
                                    float x,
                                    float y,
-                                   int touch_point_count)
+                                   int touch_point_count,
+                                   const gfx::RectF& bounding_box)
     : type(type),
       motion_event_id(motion_event_id),
       time(time),
@@ -43,6 +46,7 @@
   DCHECK_NE(0, touch_point_count);
   DCHECK(ET_GESTURE_TYPE_START <= type && type <= ET_GESTURE_TYPE_END);
   details.set_touch_points(touch_point_count);
+  details.set_bounding_box(bounding_box);
 }
 
 GestureEventData::GestureEventData() : type(ET_UNKNOWN), x(0), y(0) {}
diff --git a/ui/events/gesture_detection/gesture_event_data.h b/ui/events/gesture_detection/gesture_event_data.h
index 4953284..c5e24e0 100644
--- a/ui/events/gesture_detection/gesture_event_data.h
+++ b/ui/events/gesture_detection/gesture_event_data.h
@@ -21,6 +21,7 @@
                    float x,
                    float y,
                    int touch_point_count,
+                   const gfx::RectF& bounding_box,
                    const GestureEventDetails& details);
 
   GestureEventData(EventType type,
@@ -28,7 +29,8 @@
                    base::TimeTicks time,
                    float x,
                    float y,
-                   int touch_point_count);
+                   int touch_point_count,
+                   const gfx::RectF& bounding_box);
 
   EventType type;
   int motion_event_id;
diff --git a/ui/events/gesture_detection/gesture_provider.cc b/ui/events/gesture_detection/gesture_provider.cc
index d932a02..84fb854 100644
--- a/ui/events/gesture_detection/gesture_provider.cc
+++ b/ui/events/gesture_detection/gesture_provider.cc
@@ -30,12 +30,25 @@
   return "";
 }
 
+gfx::RectF GetBoundingBox(const MotionEvent& event) {
+  gfx::RectF bounds;
+  for (size_t i = 0; i < event.GetPointerCount(); ++i) {
+    float diameter = event.GetTouchMajor(i);
+    bounds.Union(gfx::RectF(event.GetX(i) - diameter / 2,
+                            event.GetY(i) - diameter / 2,
+                            diameter,
+                            diameter));
+  }
+  return bounds;
+}
+
 GestureEventData CreateGesture(EventType type,
                                int motion_event_id,
                                base::TimeTicks time,
                                float x,
                                float y,
                                size_t touch_point_count,
+                               const gfx::RectF& bounding_box,
                                const GestureEventDetails& details) {
   return GestureEventData(type,
                           motion_event_id,
@@ -43,6 +56,7 @@
                           x,
                           y,
                           static_cast<int>(touch_point_count),
+                          bounding_box,
                           details);
 }
 
@@ -51,9 +65,15 @@
                                base::TimeTicks time,
                                float x,
                                float y,
-                               size_t touch_point_count) {
-  return GestureEventData(
-      type, motion_event_id, time, x, y, static_cast<int>(touch_point_count));
+                               size_t touch_point_count,
+                               const gfx::RectF& bounding_box) {
+  return GestureEventData(type,
+                          motion_event_id,
+                          time,
+                          x,
+                          y,
+                          static_cast<int>(touch_point_count),
+                          bounding_box);
 }
 
 GestureEventData CreateGesture(EventType type,
@@ -65,6 +85,7 @@
                        event.GetX(),
                        event.GetY(),
                        event.GetPointerCount(),
+                       GetBoundingBox(event),
                        details);
 }
 
@@ -75,7 +96,8 @@
                        event.GetEventTime(),
                        event.GetX(),
                        event.GetY(),
-                       event.GetPointerCount());
+                       event.GetPointerCount(),
+                       GetBoundingBox(event));
 }
 
 GestureEventDetails CreateTapGestureDetails(EventType type,
@@ -84,8 +106,6 @@
   // consistent with double tap behavior on a mobile viewport. See
   // crbug.com/234986 for context.
   GestureEventDetails tap_details(type, 1, 0);
-  tap_details.set_bounding_box(
-      gfx::RectF(event.GetTouchMajor(), event.GetTouchMajor()));
   return tap_details;
 }
 
@@ -142,7 +162,8 @@
                                   detector.GetEventTime(),
                                   0,
                                   0,
-                                  e.GetPointerCount()));
+                                  e.GetPointerCount(),
+                                  GetBoundingBox(e)));
     pinch_event_sent_ = false;
   }
 
@@ -157,7 +178,8 @@
                                     detector.GetEventTime(),
                                     detector.GetFocusX(),
                                     detector.GetFocusY(),
-                                    e.GetPointerCount()));
+                                    e.GetPointerCount(),
+                                    GetBoundingBox(e)));
     }
 
     float scale = detector.GetScaleFactor();
@@ -183,6 +205,7 @@
                                   detector.GetFocusX(),
                                   detector.GetFocusY(),
                                   e.GetPointerCount(),
+                                  GetBoundingBox(e),
                                   pinch_details));
     return true;
   }
@@ -192,12 +215,12 @@
     scale_gesture_detector_.SetQuickScaleEnabled(enabled);
   }
 
-  void SetMultiTouchEnabled(bool value) {
+  void SetMultiTouchEnabled(bool enabled) {
     // Note that returning false from OnScaleBegin / OnScale makes the
     // gesture detector not to emit further scaling notifications
     // related to this gesture. Thus, if detector events are enabled in
     // the middle of the gesture, we don't need to do anything.
-    ignore_multitouch_events_ = value;
+    ignore_multitouch_events_ = !enabled;
   }
 
   bool IsDoubleTapInProgress() const {
@@ -270,8 +293,6 @@
     seen_first_scroll_event_ = false;
 
     GestureEventDetails tap_details(ET_GESTURE_TAP_DOWN, 0, 0);
-    tap_details.set_bounding_box(
-        gfx::RectF(e.GetTouchMajor(), e.GetTouchMajor()));
     provider_->Send(CreateGesture(ET_GESTURE_TAP_DOWN, e, tap_details));
 
     // Return true to indicate that we want to handle touch.
@@ -320,6 +341,7 @@
                                     e1.GetX(),
                                     e1.GetY(),
                                     e2.GetPointerCount(),
+                                    GetBoundingBox(e2),
                                     scroll_details));
     }
 
@@ -351,9 +373,6 @@
 
   virtual void OnShowPress(const MotionEvent& e) OVERRIDE {
     GestureEventDetails show_press_details(ET_GESTURE_SHOW_PRESS, 0, 0);
-    // TODO(jdduke): Expose minor axis length and rotation in |MotionEvent|.
-    show_press_details.set_bounding_box(
-        gfx::RectF(e.GetTouchMajor(), e.GetTouchMajor()));
     provider_->Send(
         CreateGesture(ET_GESTURE_SHOW_PRESS, e, show_press_details));
   }
@@ -430,8 +449,6 @@
     SetIgnoreSingleTap(true);
 
     GestureEventDetails long_press_details(ET_GESTURE_LONG_PRESS, 0, 0);
-    long_press_details.set_bounding_box(
-        gfx::RectF(e.GetTouchMajor(), e.GetTouchMajor()));
     provider_->Send(
         CreateGesture(ET_GESTURE_LONG_PRESS, e, long_press_details));
 
@@ -443,16 +460,9 @@
 
   void SetDoubleTapEnabled(bool enabled) {
     DCHECK(!IsDoubleTapInProgress());
-    if (enabled) {
-      gesture_detector_.set_doubletap_listener(this);
-    } else {
-      // TODO(jdduke): Send GESTURE_TAP if GESTURE_TAP_UNCONFIRMED already sent.
-      gesture_detector_.set_doubletap_listener(NULL);
-    }
+    gesture_detector_.SetDoubleTapListener(enabled ? this : NULL);
   }
 
-  bool IsClickDelayDisabled() const { return disable_click_delay_; }
-
   bool IsDoubleTapInProgress() const {
     return gesture_detector_.is_double_tapping();
   }
@@ -526,24 +536,20 @@
   return true;
 }
 
-void GestureProvider::ResetGestureDetectors() {
-  if (!current_down_event_)
-    return;
-  scoped_ptr<MotionEvent> cancel_event = current_down_event_->Cancel();
-  gesture_listener_->OnTouchEvent(*cancel_event, false);
-  scale_gesture_listener_->OnTouchEvent(*cancel_event);
-}
-
-void GestureProvider::SetMultiTouchSupportEnabled(bool enabled) {
-  scale_gesture_listener_->SetMultiTouchEnabled(!enabled);
+void GestureProvider::SetMultiTouchZoomSupportEnabled(bool enabled) {
+  scale_gesture_listener_->SetMultiTouchEnabled(enabled);
 }
 
 void GestureProvider::SetDoubleTapSupportForPlatformEnabled(bool enabled) {
+  if (double_tap_support_for_platform_ == enabled)
+    return;
   double_tap_support_for_platform_ = enabled;
   UpdateDoubleTapDetectionSupport();
 }
 
 void GestureProvider::SetDoubleTapSupportForPageEnabled(bool enabled) {
+  if (double_tap_support_for_page_ == enabled)
+    return;
   double_tap_support_for_page_ = enabled;
   UpdateDoubleTapDetectionSupport();
 }
@@ -561,14 +567,6 @@
          scale_gesture_listener_->IsDoubleTapInProgress();
 }
 
-bool GestureProvider::IsDoubleTapSupported() const {
-  return double_tap_support_for_page_ && double_tap_support_for_platform_;
-}
-
-bool GestureProvider::IsClickDelayDisabled() const {
-  return gesture_listener_->IsClickDelayDisabled();
-}
-
 void GestureProvider::InitGestureDetectors(const Config& config) {
   TRACE_EVENT0("input", "GestureProvider::InitGestureDetectors");
   gesture_listener_.reset(
@@ -640,7 +638,8 @@
                            gesture.time,
                            gesture.x,
                            gesture.y,
-                           gesture.details.touch_points()));
+                           gesture.details.touch_points(),
+                           gesture.details.bounding_box()));
       touch_scroll_in_progress_ = false;
       break;
     case ET_GESTURE_PINCH_BEGIN:
@@ -651,7 +650,8 @@
                            gesture.time,
                            gesture.x,
                            gesture.y,
-                           gesture.details.touch_points()));
+                           gesture.details.touch_points(),
+                           gesture.details.bounding_box()));
       pinch_in_progress_ = true;
       break;
     case ET_GESTURE_PINCH_END:
@@ -676,8 +676,6 @@
       !current_longpress_time_.is_null() &&
       !scale_gesture_listener_->IsScaleGestureDetectionInProgress()) {
     GestureEventDetails long_tap_details(ET_GESTURE_LONG_TAP, 0, 0);
-    long_tap_details.set_bounding_box(
-        gfx::RectF(event.GetTouchMajor(), event.GetTouchMajor()));
     Send(CreateGesture(ET_GESTURE_LONG_TAP, event, long_tap_details));
     return true;
   }
@@ -693,15 +691,6 @@
   touch_scroll_in_progress_ = false;
 }
 
-void GestureProvider::UpdateDoubleTapDetectionSupport() {
-  if (current_down_event_ || IsDoubleTapInProgress())
-    return;
-
-  const bool supports_double_tap = IsDoubleTapSupported();
-  gesture_listener_->SetDoubleTapEnabled(supports_double_tap);
-  scale_gesture_listener_->SetDoubleTapEnabled(supports_double_tap);
-}
-
 void GestureProvider::OnTouchEventHandlingBegin(const MotionEvent& event) {
   switch (event.GetAction()) {
     case MotionEvent::ACTION_DOWN:
@@ -750,4 +739,17 @@
   }
 }
 
+void GestureProvider::UpdateDoubleTapDetectionSupport() {
+  // The GestureDetector requires that any provided DoubleTapListener remain
+  // attached to it for the duration of a touch sequence. Defer any potential
+  // null'ing of the listener until the sequence has ended.
+  if (current_down_event_)
+    return;
+
+  const bool double_tap_enabled = double_tap_support_for_page_ &&
+                                  double_tap_support_for_platform_;
+  gesture_listener_->SetDoubleTapEnabled(double_tap_enabled);
+  scale_gesture_listener_->SetDoubleTapEnabled(double_tap_enabled);
+}
+
 }  //  namespace ui
diff --git a/ui/events/gesture_detection/gesture_provider.h b/ui/events/gesture_detection/gesture_provider.h
index 41f0990..22558f1 100644
--- a/ui/events/gesture_detection/gesture_provider.h
+++ b/ui/events/gesture_detection/gesture_provider.h
@@ -54,21 +54,15 @@
   // be handled.
   bool OnTouchEvent(const MotionEvent& event);
 
-  // Resets all gesture detectors; called on DidStartLoading().
-  void ResetGestureDetectors();
+  // Update whether multi-touch pinch zoom is supported by the platform.
+  void SetMultiTouchZoomSupportEnabled(bool enabled);
 
-  // Update whether multi-touch gestures are supported.
-  void SetMultiTouchSupportEnabled(bool enabled);
-
-  // Update whether double-tap gestures are supported. This allows
-  // double-tap gesture suppression independent of whether or not the page's
-  // viewport and scale would normally prevent double-tap.
-  // Note: This should not be called while a double-tap gesture is in progress.
+  // Update whether double-tap gestures are supported by the platform.
   void SetDoubleTapSupportForPlatformEnabled(bool enabled);
 
-  // Update whether double-tap gesture detection should be suppressed due to
-  // the viewport or scale of the current page. Suppressing double-tap gesture
-  // detection allows for rapid and responsive single-tap gestures.
+  // Update whether double-tap gesture detection should be suppressed, e.g.,
+  // if the page scale is fixed or the page has a mobile viewport. This disables
+  // the tap delay, allowing rapid and responsive single-tap gestures.
   void SetDoubleTapSupportForPageEnabled(bool enabled);
 
   // Whether a scroll gesture is in-progress.
@@ -82,13 +76,6 @@
   // double-tap drag zoom).
   bool IsDoubleTapInProgress() const;
 
-  // Whether double-tap gesture detection is supported.
-  bool IsDoubleTapSupported() const;
-
-  // Whether the tap gesture delay is explicitly disabled (independent of
-  // whether double-tap is supported), see |Config.disable_click_delay|.
-  bool IsClickDelayDisabled() const;
-
   // May be NULL if there is no currently active touch sequence.
   const ui::MotionEvent* current_down_event() const {
     return current_down_event_.get();
diff --git a/ui/events/gesture_detection/gesture_provider_unittest.cc b/ui/events/gesture_detection/gesture_provider_unittest.cc
index 5d9c664..9720a20 100644
--- a/ui/events/gesture_detection/gesture_provider_unittest.cc
+++ b/ui/events/gesture_detection/gesture_provider_unittest.cc
@@ -26,6 +26,7 @@
 const TimeDelta kOneSecond = TimeDelta::FromSeconds(1);
 const TimeDelta kOneMicrosecond = TimeDelta::FromMicroseconds(1);
 const TimeDelta kDeltaTimeForFlingSequences = TimeDelta::FromMilliseconds(5);
+const float kMockTouchRadius = MockMotionEvent::TOUCH_MAJOR / 2;
 
 GestureProvider::Config CreateDefaultConfig() {
   GestureProvider::Config sConfig;
@@ -44,6 +45,11 @@
   return sConfig;
 }
 
+gfx::RectF BoundsForSingleMockTouchAtLocation(float x, float y) {
+  float diameter = MockMotionEvent::TOUCH_MAJOR;
+  return gfx::RectF(x - diameter / 2, y - diameter / 2, diameter, diameter);
+}
+
 }  // namespace
 
 class GestureProviderTest : public testing::Test, public GestureProviderClient {
@@ -75,7 +81,7 @@
   // Test
   virtual void SetUp() OVERRIDE {
     gesture_provider_.reset(new GestureProvider(GetDefaultConfig(), this));
-    gesture_provider_->SetMultiTouchSupportEnabled(false);
+    gesture_provider_->SetMultiTouchZoomSupportEnabled(false);
   }
 
   virtual void TearDown() OVERRIDE {
@@ -110,7 +116,7 @@
     return gestures_.back();
   }
 
-  const EventType GetMostRecentGestureEventType() const {
+  EventType GetMostRecentGestureEventType() const {
     EXPECT_FALSE(gestures_.empty());
     return gestures_.back().type;
   }
@@ -147,7 +153,7 @@
     GestureProvider::Config config = GetDefaultConfig();
     config.gesture_begin_end_types_enabled = true;
     gesture_provider_.reset(new GestureProvider(config, this));
-    gesture_provider_->SetMultiTouchSupportEnabled(false);
+    gesture_provider_->SetMultiTouchZoomSupportEnabled(false);
   }
 
   bool HasDownEvent() const { return gesture_provider_->current_down_event(); }
@@ -177,6 +183,8 @@
     EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_BEGIN));
     EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id);
     EXPECT_EQ(ET_GESTURE_SCROLL_UPDATE, GetMostRecentGestureEventType());
+    EXPECT_EQ(BoundsForSingleMockTouchAtLocation(scroll_to_x, scroll_to_y),
+              GetMostRecentGestureEvent().details.bounding_box());
     ASSERT_EQ(3U, GetReceivedGestureCount()) << "Only TapDown, "
                                                 "ScrollBegin and ScrollBy "
                                                 "should have been sent";
@@ -196,6 +204,8 @@
     EXPECT_EQ(ET_GESTURE_SCROLL_END, GetMostRecentGestureEventType());
     EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id);
     EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
+    EXPECT_EQ(BoundsForSingleMockTouchAtLocation(scroll_to_x, scroll_to_y),
+              GetMostRecentGestureEvent().details.bounding_box());
   }
 
   static void RunTasksAndWait(base::TimeDelta delay) {
@@ -224,6 +234,8 @@
   EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
   EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType());
   EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
+  EXPECT_EQ(BoundsForSingleMockTouchAtLocation(kFakeCoordX, kFakeCoordY),
+            GetMostRecentGestureEvent().details.bounding_box());
 
   event = ObtainMotionEvent(event_time + kOneMicrosecond,
                             MotionEvent::ACTION_UP);
@@ -232,11 +244,11 @@
   EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
   EXPECT_EQ(ET_GESTURE_TAP, GetMostRecentGestureEventType());
   // Ensure tap details have been set.
-  EXPECT_EQ(10, GetMostRecentGestureEvent().details.bounding_box().width());
-  EXPECT_EQ(10, GetMostRecentGestureEvent().details.bounding_box().height());
   EXPECT_EQ(1, GetMostRecentGestureEvent().details.tap_count());
   EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id);
   EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
+  EXPECT_EQ(BoundsForSingleMockTouchAtLocation(kFakeCoordX, kFakeCoordY),
+            GetMostRecentGestureEvent().details.bounding_box());
 }
 
 // Verify that a DOWN followed shortly by an UP will trigger
@@ -255,6 +267,8 @@
   EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType());
   EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id);
   EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
+  EXPECT_EQ(BoundsForSingleMockTouchAtLocation(kFakeCoordX, kFakeCoordY),
+            GetMostRecentGestureEvent().details.bounding_box());
 
   event = ObtainMotionEvent(event_time + kOneMicrosecond,
                             MotionEvent::ACTION_UP);
@@ -263,11 +277,11 @@
   EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
   EXPECT_EQ(ET_GESTURE_TAP_UNCONFIRMED, GetMostRecentGestureEventType());
   // Ensure tap details have been set.
-  EXPECT_EQ(10, GetMostRecentGestureEvent().details.bounding_box().width());
-  EXPECT_EQ(10, GetMostRecentGestureEvent().details.bounding_box().height());
   EXPECT_EQ(1, GetMostRecentGestureEvent().details.tap_count());
   EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id);
   EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
+  EXPECT_EQ(BoundsForSingleMockTouchAtLocation(kFakeCoordX, kFakeCoordY),
+            GetMostRecentGestureEvent().details.bounding_box());
 
   EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_TAP));
 }
@@ -305,6 +319,9 @@
   EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id);
   EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
   EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_LONG_PRESS));
+  EXPECT_EQ(
+      BoundsForSingleMockTouchAtLocation(kFakeCoordX * 10, kFakeCoordY * 10),
+      GetMostRecentGestureEvent().details.bounding_box());
 }
 
 // Verify that for a normal scroll the following events are sent:
@@ -504,6 +521,8 @@
   EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
   EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_BEGIN));
   ASSERT_EQ(ET_GESTURE_PINCH_BEGIN, GetMostRecentGestureEventType());
+  EXPECT_EQ(BoundsForSingleMockTouchAtLocation(kFakeCoordX, kFakeCoordY + 100),
+            GetMostRecentGestureEvent().details.bounding_box());
 
   event = ObtainMotionEvent(down_time_2 + kOneMicrosecond * 2,
                             MotionEvent::ACTION_MOVE,
@@ -512,6 +531,8 @@
   EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
   ASSERT_EQ(ET_GESTURE_PINCH_UPDATE, GetMostRecentGestureEventType());
   EXPECT_LT(1.f, GetMostRecentGestureEvent().details.scale());
+  EXPECT_EQ(BoundsForSingleMockTouchAtLocation(kFakeCoordX, kFakeCoordY + 200),
+            GetMostRecentGestureEvent().details.bounding_box());
 
   event = ObtainMotionEvent(down_time_2 + kOneMicrosecond * 3,
                             MotionEvent::ACTION_MOVE,
@@ -520,6 +541,8 @@
   EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
   ASSERT_EQ(ET_GESTURE_PINCH_UPDATE, GetMostRecentGestureEventType());
   EXPECT_GT(1.f, GetMostRecentGestureEvent().details.scale());
+  EXPECT_EQ(BoundsForSingleMockTouchAtLocation(kFakeCoordX, kFakeCoordY + 100),
+            GetMostRecentGestureEvent().details.bounding_box());
 
   event = ObtainMotionEvent(down_time_2 + kOneMicrosecond * 4,
                             MotionEvent::ACTION_UP,
@@ -528,6 +551,8 @@
   EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
   EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_PINCH_END));
   EXPECT_EQ(ET_GESTURE_SCROLL_END, GetMostRecentGestureEventType());
+  EXPECT_EQ(BoundsForSingleMockTouchAtLocation(kFakeCoordX, kFakeCoordY - 200),
+            GetMostRecentGestureEvent().details.bounding_box());
 }
 
 // Generate a scroll gesture and verify that the resulting scroll motion event
@@ -696,11 +721,15 @@
 
   EXPECT_EQ(ET_GESTURE_LONG_PRESS, GetMostRecentGestureEventType());
   EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
+  EXPECT_EQ(BoundsForSingleMockTouchAtLocation(kFakeCoordX, kFakeCoordY),
+            GetMostRecentGestureEvent().details.bounding_box());
 
   event = ObtainMotionEvent(event_time + kOneSecond, MotionEvent::ACTION_UP);
   gesture_provider_->OnTouchEvent(event);
   EXPECT_EQ(ET_GESTURE_LONG_TAP, GetMostRecentGestureEventType());
   EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
+  EXPECT_EQ(BoundsForSingleMockTouchAtLocation(kFakeCoordX, kFakeCoordY),
+            GetMostRecentGestureEvent().details.bounding_box());
 }
 
 TEST_F(GestureProviderTest, GestureLongPressDoesNotPreventScrolling) {
@@ -862,15 +891,14 @@
 }
 
 TEST_F(GestureProviderTest, NoDoubleTapWhenExplicitlyDisabled) {
+  // Ensure that double-tap gestures can be disabled.
   gesture_provider_->SetDoubleTapSupportForPlatformEnabled(false);
 
   base::TimeTicks event_time = base::TimeTicks::Now();
   MockMotionEvent event = ObtainMotionEvent(
       event_time, MotionEvent::ACTION_DOWN, kFakeCoordX, kFakeCoordY);
   EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
-  EXPECT_EQ(1U, GetReceivedGestureCount());
   EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType());
-  EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
 
   event = ObtainMotionEvent(event_time + kOneMicrosecond,
                             MotionEvent::ACTION_UP,
@@ -878,7 +906,6 @@
                             kFakeCoordY);
   EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
   EXPECT_EQ(ET_GESTURE_TAP, GetMostRecentGestureEventType());
-  EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
 
   event = ObtainMotionEvent(event_time + kOneMicrosecond * 2,
                             MotionEvent::ACTION_DOWN,
@@ -886,7 +913,6 @@
                             kFakeCoordY);
   EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
   EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType());
-  EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
 
   event = ObtainMotionEvent(event_time + kOneMicrosecond * 3,
                             MotionEvent::ACTION_UP,
@@ -894,7 +920,86 @@
                             kFakeCoordY);
   EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
   EXPECT_EQ(ET_GESTURE_TAP, GetMostRecentGestureEventType());
-  EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
+
+  // Ensure that double-tap gestures can be interrupted.
+  gesture_provider_->SetDoubleTapSupportForPlatformEnabled(true);
+
+  event_time = base::TimeTicks::Now();
+  event = ObtainMotionEvent(
+      event_time, MotionEvent::ACTION_DOWN, kFakeCoordX, kFakeCoordY);
+  EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
+  EXPECT_EQ(5U, GetReceivedGestureCount());
+
+  event = ObtainMotionEvent(event_time + kOneMicrosecond,
+                            MotionEvent::ACTION_UP,
+                            kFakeCoordX,
+                            kFakeCoordY);
+  EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
+  EXPECT_EQ(ET_GESTURE_TAP_UNCONFIRMED, GetMostRecentGestureEventType());
+
+  gesture_provider_->SetDoubleTapSupportForPlatformEnabled(false);
+  EXPECT_EQ(ET_GESTURE_TAP, GetMostRecentGestureEventType());
+
+  // Ensure that double-tap gestures can be resumed.
+  gesture_provider_->SetDoubleTapSupportForPlatformEnabled(true);
+
+  event = ObtainMotionEvent(event_time + kOneMicrosecond * 2,
+                            MotionEvent::ACTION_DOWN,
+                            kFakeCoordX,
+                            kFakeCoordY);
+  EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
+  EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType());
+
+  event = ObtainMotionEvent(event_time + kOneMicrosecond * 3,
+                            MotionEvent::ACTION_UP,
+                            kFakeCoordX,
+                            kFakeCoordY);
+  EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
+  EXPECT_EQ(ET_GESTURE_TAP_UNCONFIRMED, GetMostRecentGestureEventType());
+
+  event = ObtainMotionEvent(event_time + kOneMicrosecond * 4,
+                            MotionEvent::ACTION_DOWN,
+                            kFakeCoordX,
+                            kFakeCoordY);
+  EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
+  EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType());
+
+  event = ObtainMotionEvent(event_time + kOneMicrosecond * 5,
+                            MotionEvent::ACTION_UP,
+                            kFakeCoordX,
+                            kFakeCoordY);
+  EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
+  EXPECT_EQ(ET_GESTURE_DOUBLE_TAP, GetMostRecentGestureEventType());
+}
+
+TEST_F(GestureProviderTest, NoDelayedTapWhenDoubleTapSupportToggled) {
+  gesture_provider_->SetDoubleTapSupportForPlatformEnabled(true);
+
+  base::TimeTicks event_time = base::TimeTicks::Now();
+  MockMotionEvent event = ObtainMotionEvent(
+      event_time, MotionEvent::ACTION_DOWN, kFakeCoordX, kFakeCoordY);
+  EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
+  EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType());
+  EXPECT_EQ(1U, GetReceivedGestureCount());
+
+  event = ObtainMotionEvent(event_time + kOneMicrosecond,
+                            MotionEvent::ACTION_UP,
+                            kFakeCoordX,
+                            kFakeCoordY);
+  EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
+  EXPECT_EQ(ET_GESTURE_TAP_UNCONFIRMED, GetMostRecentGestureEventType());
+  EXPECT_EQ(2U, GetReceivedGestureCount());
+
+  // Disabling double-tap during the tap timeout should flush the delayed tap.
+  gesture_provider_->SetDoubleTapSupportForPlatformEnabled(false);
+  EXPECT_EQ(ET_GESTURE_TAP, GetMostRecentGestureEventType());
+  EXPECT_EQ(3U, GetReceivedGestureCount());
+
+  // No further timeout gestures should arrive.
+  const base::TimeDelta long_press_timeout =
+      GetLongPressTimeout() + GetShowPressTimeout() + kOneMicrosecond;
+  RunTasksAndWait(long_press_timeout);
+  EXPECT_EQ(3U, GetReceivedGestureCount());
 }
 
 TEST_F(GestureProviderTest, NoDoubleTapDragZoomWhenDisabledOnPlatform) {
@@ -1098,7 +1203,7 @@
 
   gesture_provider_->SetDoubleTapSupportForPageEnabled(false);
   gesture_provider_->SetDoubleTapSupportForPlatformEnabled(true);
-  gesture_provider_->SetMultiTouchSupportEnabled(true);
+  gesture_provider_->SetMultiTouchZoomSupportEnabled(true);
 
   int secondary_coord_x = kFakeCoordX + 20 * touch_slop;
   int secondary_coord_y = kFakeCoordY + 20 * touch_slop;
@@ -1109,6 +1214,8 @@
   EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
   EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType());
   EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
+  EXPECT_EQ(BoundsForSingleMockTouchAtLocation(kFakeCoordX, kFakeCoordY),
+            GetMostRecentGestureEvent().details.bounding_box());
 
   // Toggling double-tap support should not take effect until the next sequence.
   gesture_provider_->SetDoubleTapSupportForPageEnabled(true);
@@ -1124,6 +1231,8 @@
   gesture_provider_->OnTouchEvent(event);
   EXPECT_EQ(1U, GetReceivedGestureCount());
   EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
+  EXPECT_EQ(BoundsForSingleMockTouchAtLocation(kFakeCoordX, kFakeCoordY),
+            GetMostRecentGestureEvent().details.bounding_box());
 
   secondary_coord_x += 5 * touch_slop;
   secondary_coord_y += 5 * touch_slop;
@@ -1144,6 +1253,12 @@
   EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_PINCH_BEGIN));
   EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_BEGIN));
   EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_UPDATE));
+  EXPECT_EQ(
+      gfx::RectF(kFakeCoordX - kMockTouchRadius,
+                 kFakeCoordY - kMockTouchRadius,
+                 secondary_coord_x - kFakeCoordX + kMockTouchRadius * 2,
+                 secondary_coord_y - kFakeCoordY + kMockTouchRadius * 2),
+      GetMostRecentGestureEvent().details.bounding_box());
 
   secondary_coord_x += 2 * touch_slop;
   secondary_coord_y += 2 * touch_slop;
@@ -1164,6 +1279,12 @@
   EXPECT_EQ(ET_GESTURE_PINCH_UPDATE, GetMostRecentGestureEventType());
   EXPECT_EQ(2, GetMostRecentGestureEvent().details.touch_points());
   EXPECT_LT(1.f, GetMostRecentGestureEvent().details.scale());
+  EXPECT_EQ(
+      gfx::RectF(kFakeCoordX - kMockTouchRadius,
+                 kFakeCoordY - kMockTouchRadius,
+                 secondary_coord_x - kFakeCoordX + kMockTouchRadius * 2,
+                 secondary_coord_y - kFakeCoordY + kMockTouchRadius * 2),
+      GetMostRecentGestureEvent().details.bounding_box());
 
   event = ObtainMotionEvent(event_time,
                             MotionEvent::ACTION_POINTER_UP,
@@ -1178,11 +1299,22 @@
   EXPECT_EQ(ET_GESTURE_PINCH_END, GetMostRecentGestureEventType());
   EXPECT_EQ(2, GetMostRecentGestureEvent().details.touch_points());
   EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_SCROLL_END));
+  EXPECT_EQ(
+      gfx::RectF(kFakeCoordX - kMockTouchRadius,
+                 kFakeCoordY - kMockTouchRadius,
+                 secondary_coord_x - kFakeCoordX + kMockTouchRadius * 2,
+                 secondary_coord_y - kFakeCoordY + kMockTouchRadius * 2),
+      GetMostRecentGestureEvent().details.bounding_box());
 
   event = ObtainMotionEvent(event_time, MotionEvent::ACTION_UP);
   gesture_provider_->OnTouchEvent(event);
   EXPECT_EQ(ET_GESTURE_SCROLL_END, GetMostRecentGestureEventType());
   EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
+  EXPECT_EQ(gfx::RectF(kFakeCoordX - kMockTouchRadius,
+                       kFakeCoordY - kMockTouchRadius,
+                       kMockTouchRadius * 2,
+                       kMockTouchRadius * 2),
+            GetMostRecentGestureEvent().details.bounding_box());
 }
 
 // Verify that the timer of LONG_PRESS will be cancelled when scrolling begins
@@ -1319,6 +1451,11 @@
   EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType());
   EXPECT_EQ(2U, GetReceivedGestureCount());
   EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
+  EXPECT_EQ(gfx::RectF(kFakeCoordX - kMockTouchRadius,
+                       kFakeCoordY - kMockTouchRadius,
+                       kMockTouchRadius * 2,
+                       kMockTouchRadius * 2),
+            GetMostRecentGestureEvent().details.bounding_box());
 
   event = ObtainMotionEvent(event_time, MotionEvent::ACTION_POINTER_DOWN);
   event.pointer_count = 2;
diff --git a/ui/events/gesture_detection/mock_motion_event.cc b/ui/events/gesture_detection/mock_motion_event.cc
index cf29387..65bfe03 100644
--- a/ui/events/gesture_detection/mock_motion_event.cc
+++ b/ui/events/gesture_detection/mock_motion_event.cc
@@ -9,9 +9,6 @@
 using base::TimeTicks;
 
 namespace ui {
-namespace {
-const float kTouchMajor = 10.f;
-}  // namespace
 
 MockMotionEvent::MockMotionEvent()
     : action(ACTION_CANCEL), pointer_count(1), id(0) {}
@@ -79,7 +76,7 @@
 }
 
 float MockMotionEvent::GetTouchMajor(size_t pointer_index) const {
-  return kTouchMajor;
+  return TOUCH_MAJOR;
 }
 
 float MockMotionEvent::GetPressure(size_t pointer_index) const {
diff --git a/ui/events/gesture_detection/mock_motion_event.h b/ui/events/gesture_detection/mock_motion_event.h
index 9793494..c9f43d9 100644
--- a/ui/events/gesture_detection/mock_motion_event.h
+++ b/ui/events/gesture_detection/mock_motion_event.h
@@ -11,6 +11,7 @@
 
 struct MockMotionEvent : public MotionEvent {
   enum { MAX_POINTERS = 3 };
+  enum { TOUCH_MAJOR = 10 };
 
   MockMotionEvent();
   explicit MockMotionEvent(Action action);
@@ -54,7 +55,6 @@
   void MovePoint(size_t index, float x, float y);
   void ReleasePoint();
   void CancelPoint();
-
   MotionEvent::Action action;
   size_t pointer_count;
   gfx::PointF points[MAX_POINTERS];
diff --git a/ui/events/gesture_detection/touch_disposition_gesture_filter.cc b/ui/events/gesture_detection/touch_disposition_gesture_filter.cc
index 2e14aaf..d4ba635 100644
--- a/ui/events/gesture_detection/touch_disposition_gesture_filter.cc
+++ b/ui/events/gesture_detection/touch_disposition_gesture_filter.cc
@@ -17,13 +17,15 @@
 
 GestureEventData CreateGesture(EventType type,
                                int motion_event_id) {
+  GestureEventDetails details(type, 0, 0);
   return GestureEventData(type,
                           motion_event_id,
                           base::TimeTicks(),
                           0,
                           0,
                           1,
-                          GestureEventDetails(type, 0, 0));
+                          gfx::RectF(0, 0, 0, 0),
+                          details);
 }
 
 enum RequiredTouches {
@@ -37,8 +39,8 @@
   int required_touches;
   EventType antecedent_event_type;
 
-  DispositionHandlingInfo(int required_touches)
-      : required_touches(required_touches) {}
+  explicit DispositionHandlingInfo(int required_touches)
+      : required_touches(required_touches), antecedent_event_type(ET_UNKNOWN) {}
 
   DispositionHandlingInfo(int required_touches,
                           EventType antecedent_event_type)
@@ -104,6 +106,8 @@
 }
 
 int GetGestureTypeIndex(EventType type) {
+  DCHECK_GE(type, ET_GESTURE_TYPE_START);
+  DCHECK_LE(type, ET_GESTURE_TYPE_END);
   return type - ET_GESTURE_TYPE_START;
 }
 
@@ -337,10 +341,13 @@
       GetDispositionHandlingInfo(gesture_type);
 
   int required_touches = disposition_handling_info.required_touches;
+  EventType antecedent_event_type =
+      disposition_handling_info.antecedent_event_type;
   if ((required_touches & RT_START && start_touch_consumed_) ||
       (required_touches & RT_CURRENT && current_touch_consumed_) ||
-      (last_gesture_of_type_dropped_.has_bit(GetGestureTypeIndex(
-          disposition_handling_info.antecedent_event_type)))) {
+      (antecedent_event_type != ET_UNKNOWN &&
+       last_gesture_of_type_dropped_.has_bit(
+           GetGestureTypeIndex(antecedent_event_type)))) {
     last_gesture_of_type_dropped_.mark_bit(GetGestureTypeIndex(gesture_type));
     return true;
   }
diff --git a/ui/events/gesture_detection/touch_disposition_gesture_filter_unittest.cc b/ui/events/gesture_detection/touch_disposition_gesture_filter_unittest.cc
index 837ec7d..d201c87 100644
--- a/ui/events/gesture_detection/touch_disposition_gesture_filter_unittest.cc
+++ b/ui/events/gesture_detection/touch_disposition_gesture_filter_unittest.cc
@@ -168,7 +168,8 @@
   }
 
   static GestureEventData CreateGesture(EventType type) {
-    return GestureEventData(type, 0, base::TimeTicks(), 0, 0, 1);
+    return GestureEventData(
+        type, 0, base::TimeTicks(), 0, 0, 1, gfx::RectF(0, 0, 0, 0));
   }
 
  private:
diff --git a/ui/events/gesture_event_details.cc b/ui/events/gesture_event_details.cc
index ead9f4a..389a924 100644
--- a/ui/events/gesture_event_details.cc
+++ b/ui/events/gesture_event_details.cc
@@ -95,17 +95,6 @@
   }
 }
 
-void GestureEventDetails::SetScrollVelocity(float velocity_x,
-                                            float velocity_y,
-                                            float velocity_x_ordinal,
-                                            float velocity_y_ordinal) {
-  CHECK_EQ(ui::ET_GESTURE_SCROLL_UPDATE, type_);
-  data.scroll_update.velocity_x = velocity_x;
-  data.scroll_update.velocity_y = velocity_y;
-  data.scroll_update.velocity_x_ordinal = velocity_x_ordinal;
-  data.scroll_update.velocity_y_ordinal = velocity_y_ordinal;
-}
-
 GestureEventDetails::Details::Details() {
   memset(this, 0, sizeof(Details));
 }
diff --git a/ui/events/gesture_event_details.h b/ui/events/gesture_event_details.h
index c97ca84..17c73ac 100644
--- a/ui/events/gesture_event_details.h
+++ b/ui/events/gesture_event_details.h
@@ -37,9 +37,6 @@
 
   void set_bounding_box(const gfx::RectF& box) { bounding_box_ = box; }
 
-  void SetScrollVelocity(float velocity_x, float velocity_y,
-                         float velocity_x_ordinal, float velocity_y_ordinal);
-
   float scroll_x_hint() const {
     DCHECK_EQ(ui::ET_GESTURE_SCROLL_BEGIN, type_);
     return data.scroll_begin.x_hint;
@@ -61,17 +58,13 @@
   }
 
   float velocity_x() const {
-    DCHECK(type_ == ui::ET_GESTURE_SCROLL_UPDATE ||
-          type_ == ui::ET_SCROLL_FLING_START);
-    return type_ == ui::ET_SCROLL_FLING_START ? data.fling_velocity.x :
-                                                data.scroll_update.velocity_x;
+    DCHECK(type_ == ui::ET_SCROLL_FLING_START);
+    return data.fling_velocity.x;
   }
 
   float velocity_y() const {
-    DCHECK(type_ == ui::ET_GESTURE_SCROLL_UPDATE ||
-          type_ == ui::ET_SCROLL_FLING_START);
-    return type_ == ui::ET_SCROLL_FLING_START ? data.fling_velocity.y :
-                                                data.scroll_update.velocity_y;
+    DCHECK(type_ == ui::ET_SCROLL_FLING_START);
+    return data.fling_velocity.y;
   }
 
   // *_ordinal values are unmodified by rail based clamping.
@@ -86,19 +79,13 @@
   }
 
   float velocity_x_ordinal() const {
-    DCHECK(type_ == ui::ET_GESTURE_SCROLL_UPDATE ||
-          type_ == ui::ET_SCROLL_FLING_START);
-    return type_ == ui::ET_SCROLL_FLING_START ?
-        data.fling_velocity.x_ordinal :
-        data.scroll_update.velocity_x_ordinal;
+    DCHECK(type_ == ui::ET_SCROLL_FLING_START);
+    return data.fling_velocity.x_ordinal;
   }
 
   float velocity_y_ordinal() const {
-    DCHECK(type_ == ui::ET_GESTURE_SCROLL_UPDATE ||
-          type_ == ui::ET_SCROLL_FLING_START);
-    return type_ == ui::ET_SCROLL_FLING_START ?
-        data.fling_velocity.y_ordinal :
-        data.scroll_update.velocity_y_ordinal;
+    DCHECK(type_ == ui::ET_SCROLL_FLING_START);
+    return data.fling_velocity.y_ordinal;
   }
 
   float first_finger_width() const {
@@ -157,12 +144,8 @@
     struct {  // SCROLL delta.
       float x;
       float y;
-      float velocity_x;
-      float velocity_y;
       float x_ordinal;
       float y_ordinal;
-      float velocity_x_ordinal;
-      float velocity_y_ordinal;
     } scroll_update;
 
     float scale;  // PINCH scale.
diff --git a/ui/events/gestures/gesture_sequence.cc b/ui/events/gestures/gesture_sequence.cc
index f0513dd..d9a5e68 100644
--- a/ui/events/gestures/gesture_sequence.cc
+++ b/ui/events/gestures/gesture_sequence.cc
@@ -1055,11 +1055,6 @@
 
   GestureEventDetails details(ui::ET_GESTURE_SCROLL_UPDATE,
                               d.x(), d.y(), o.x(), o.y());
-  details.SetScrollVelocity(
-      scroll_type_ == ST_VERTICAL ? 0 : point.XVelocity(),
-      scroll_type_ == ST_HORIZONTAL ? 0 : point.YVelocity(),
-      point.XVelocity(),
-      point.YVelocity());
   gestures->push_back(CreateGestureEvent(
       details,
       location,
@@ -1423,7 +1418,6 @@
   }
 
   float min_velocity = GestureConfiguration::min_swipe_speed();
-  min_velocity *= min_velocity;
 
   velocity_x = fabs(velocity_x / point_count_);
   velocity_y = fabs(velocity_y / point_count_);
diff --git a/ui/events/ozone/evdev/event_converter_evdev.cc b/ui/events/ozone/evdev/event_converter_evdev.cc
index d3d9aed..0a54fc4 100644
--- a/ui/events/ozone/evdev/event_converter_evdev.cc
+++ b/ui/events/ozone/evdev/event_converter_evdev.cc
@@ -11,6 +11,9 @@
 
 EventConverterEvdev::EventConverterEvdev() {}
 
+EventConverterEvdev::EventConverterEvdev(const EventDispatchCallback& callback)
+    : dispatch_callback_(callback) {}
+
 EventConverterEvdev::~EventConverterEvdev() {}
 
 void EventConverterEvdev::DispatchEventToCallback(ui::Event* event) {
diff --git a/ui/events/ozone/evdev/event_converter_evdev.h b/ui/events/ozone/evdev/event_converter_evdev.h
index 5dd9988..7f6223d 100644
--- a/ui/events/ozone/evdev/event_converter_evdev.h
+++ b/ui/events/ozone/evdev/event_converter_evdev.h
@@ -15,16 +15,15 @@
 class Event;
 class EventModifiersEvdev;
 
+typedef base::Callback<void(Event*)> EventDispatchCallback;
+
 // Base class for device-specific evdev event conversion.
 class EVENTS_EXPORT EventConverterEvdev {
  public:
   EventConverterEvdev();
+  explicit EventConverterEvdev(const EventDispatchCallback& callback);
   virtual ~EventConverterEvdev();
 
-  void SetDispatchCallback(base::Callback<void(void*)> callback) {
-    dispatch_callback_ = callback;
-  }
-
   // Start converting events.
   virtual void Start() = 0;
 
@@ -37,7 +36,7 @@
   virtual void DispatchEventToCallback(ui::Event* event);
 
  private:
-  base::Callback<void(void*)> dispatch_callback_;
+  EventDispatchCallback dispatch_callback_;
 
   DISALLOW_COPY_AND_ASSIGN(EventConverterEvdev);
 };
diff --git a/ui/events/ozone/evdev/event_device_info.cc b/ui/events/ozone/evdev/event_device_info.cc
index 858f57c..2734b9d 100644
--- a/ui/events/ozone/evdev/event_device_info.cc
+++ b/ui/events/ozone/evdev/event_device_info.cc
@@ -149,4 +149,41 @@
   return abs_info_[code].maximum;
 }
 
+bool EventDeviceInfo::HasAbsXY() const {
+  if (HasAbsEvent(ABS_X) && HasAbsEvent(ABS_Y))
+    return true;
+
+  if (HasAbsEvent(ABS_MT_POSITION_X) && HasAbsEvent(ABS_MT_POSITION_Y))
+    return true;
+
+  return false;
+}
+
+bool EventDeviceInfo::HasRelXY() const {
+  return HasRelEvent(REL_X) && HasRelEvent(REL_Y);
+}
+
+bool EventDeviceInfo::IsMappedToScreen() const {
+  // Device position is mapped directly to the screen.
+  if (HasProp(INPUT_PROP_DIRECT))
+    return true;
+
+  // Device position moves the cursor.
+  if (HasProp(INPUT_PROP_POINTER))
+    return false;
+
+  // Tablets are mapped to the screen.
+  if (HasKeyEvent(BTN_TOOL_PEN) || HasKeyEvent(BTN_STYLUS) ||
+      HasKeyEvent(BTN_STYLUS2))
+    return true;
+
+  // Touchpads are not mapped to the screen.
+  if (HasKeyEvent(BTN_LEFT) || HasKeyEvent(BTN_MIDDLE) ||
+      HasKeyEvent(BTN_RIGHT) || HasKeyEvent(BTN_TOOL_FINGER))
+    return false;
+
+  // Touchscreens are mapped to the screen.
+  return true;
+}
+
 }  // namespace ui
diff --git a/ui/events/ozone/evdev/event_device_info.h b/ui/events/ozone/evdev/event_device_info.h
index 284d1e8..309ee38 100644
--- a/ui/events/ozone/evdev/event_device_info.h
+++ b/ui/events/ozone/evdev/event_device_info.h
@@ -44,6 +44,16 @@
   // Check input device properties.
   bool HasProp(unsigned int code) const;
 
+  // Has absolute X & Y axes.
+  bool HasAbsXY() const;
+
+  // Has relativeX & Y axes.
+  bool HasRelXY() const;
+
+  // Determine whether absolute device X/Y coordinates are mapped onto the
+  // screen. This is the case for touchscreens and tablets but not touchpads.
+  bool IsMappedToScreen() const;
+
  private:
   unsigned long ev_bits_[EVDEV_BITS_TO_LONGS(EV_CNT)];
   unsigned long key_bits_[EVDEV_BITS_TO_LONGS(KEY_CNT)];
diff --git a/ui/events/ozone/evdev/event_factory_evdev.cc b/ui/events/ozone/evdev/event_factory_evdev.cc
index 78d34b8..a36d9e7 100644
--- a/ui/events/ozone/evdev/event_factory_evdev.cc
+++ b/ui/events/ozone/evdev/event_factory_evdev.cc
@@ -20,6 +20,11 @@
 #include "ui/events/ozone/evdev/device_manager_udev.h"
 #endif
 
+#if defined(USE_EVDEV_GESTURES)
+#include "ui/events/ozone/evdev/libgestures_glue/event_reader_libevdev_cros.h"
+#include "ui/events/ozone/evdev/libgestures_glue/gesture_interpreter_libevdev_cros.h"
+#endif
+
 #ifndef EVIOCSCLOCKID
 #define EVIOCSCLOCKID  _IOW('E', 0xa0, int)
 #endif
@@ -28,16 +33,49 @@
 
 namespace {
 
-bool IsTouchPad(const EventDeviceInfo& devinfo) {
-  if (!devinfo.HasEventType(EV_ABS))
-    return false;
+#if defined(USE_EVDEV_GESTURES)
+bool UseGesturesLibraryForDevice(const EventDeviceInfo& devinfo) {
+  if (devinfo.HasAbsXY() && !devinfo.IsMappedToScreen())
+    return true;  // touchpad
 
-  return devinfo.HasKeyEvent(BTN_LEFT) || devinfo.HasKeyEvent(BTN_MIDDLE) ||
-         devinfo.HasKeyEvent(BTN_RIGHT) || devinfo.HasKeyEvent(BTN_TOOL_FINGER);
+  if (devinfo.HasRelXY())
+    return true;  // mouse
+
+  return false;
 }
+#endif
 
-bool IsTouchScreen(const EventDeviceInfo& devinfo) {
-  return devinfo.HasEventType(EV_ABS) && !IsTouchPad(devinfo);
+scoped_ptr<EventConverterEvdev> CreateConverter(
+    int fd,
+    const base::FilePath& path,
+    const EventDeviceInfo& devinfo,
+    const EventDispatchCallback& dispatch,
+    EventModifiersEvdev* modifiers,
+    CursorDelegateEvdev* cursor) {
+#if defined(USE_EVDEV_GESTURES)
+  // Touchpad or mouse: use gestures library.
+  // EventReaderLibevdevCros -> GestureInterpreterLibevdevCros -> DispatchEvent
+  if (UseGesturesLibraryForDevice(devinfo)) {
+    scoped_ptr<GestureInterpreterLibevdevCros> gesture_interp = make_scoped_ptr(
+        new GestureInterpreterLibevdevCros(modifiers, cursor, dispatch));
+    scoped_ptr<EventReaderLibevdevCros> libevdev_reader =
+        make_scoped_ptr(new EventReaderLibevdevCros(
+            fd,
+            path,
+            gesture_interp.PassAs<EventReaderLibevdevCros::Delegate>()));
+    return libevdev_reader.PassAs<EventConverterEvdev>();
+  }
+#endif
+
+  // Touchscreen: use TouchEventConverterEvdev.
+  scoped_ptr<EventConverterEvdev> converter;
+  if (devinfo.HasAbsXY())
+    return make_scoped_ptr<EventConverterEvdev>(
+        new TouchEventConverterEvdev(fd, path, devinfo, dispatch));
+
+  // Everything else: use KeyEventConverterEvdev.
+  return make_scoped_ptr<EventConverterEvdev>(
+      new KeyEventConverterEvdev(fd, path, modifiers, dispatch));
 }
 
 // Open an input device. Opening may put the calling thread to sleep, and
@@ -51,6 +89,7 @@
     EventModifiersEvdev* modifiers,
     CursorDelegateEvdev* cursor,
     scoped_refptr<base::TaskRunner> reply_runner,
+    const EventDispatchCallback& dispatch,
     base::Callback<void(scoped_ptr<EventConverterEvdev>)> reply_callback) {
   TRACE_EVENT1("ozone", "OpenInputDevice", "path", path.value());
 
@@ -74,26 +113,12 @@
     return;
   }
 
-  if (IsTouchPad(devinfo)) {
-    LOG(WARNING) << "touchpad device not supported: " << path.value();
-    close(fd);
-    return;
-  }
+  scoped_ptr<EventConverterEvdev> converter =
+      CreateConverter(fd, path, devinfo, dispatch, modifiers, cursor);
 
-  // TODO(spang) Add more device types.
-  scoped_ptr<EventConverterEvdev> converter;
-  if (IsTouchScreen(devinfo))
-    converter.reset(new TouchEventConverterEvdev(fd, path, devinfo));
-  else if (devinfo.HasEventType(EV_KEY))
-    converter.reset(new KeyEventConverterEvdev(fd, path, modifiers));
-
-  if (converter) {
-    // Reply with the constructed converter.
-    reply_runner->PostTask(
-        FROM_HERE, base::Bind(reply_callback, base::Passed(&converter)));
-  } else {
-    close(fd);
-  }
+  // Reply with the constructed converter.
+  reply_runner->PostTask(FROM_HERE,
+                         base::Bind(reply_callback, base::Passed(&converter)));
 }
 
 // Close an input device. Closing may put the calling thread to sleep, and
@@ -111,16 +136,26 @@
     : ui_task_runner_(base::MessageLoopProxy::current()),
       file_task_runner_(base::MessageLoopProxy::current()),
       cursor_(NULL),
+      dispatch_callback_(
+          base::Bind(base::IgnoreResult(&EventFactoryEvdev::DispatchUiEvent),
+                     base::Unretained(this))),
       weak_ptr_factory_(this) {}
 
 EventFactoryEvdev::EventFactoryEvdev(CursorDelegateEvdev* cursor)
     : ui_task_runner_(base::MessageLoopProxy::current()),
       file_task_runner_(base::MessageLoopProxy::current()),
       cursor_(cursor),
+      dispatch_callback_(
+          base::Bind(base::IgnoreResult(&EventFactoryEvdev::DispatchUiEvent),
+                     base::Unretained(this))),
       weak_ptr_factory_(this) {}
 
 EventFactoryEvdev::~EventFactoryEvdev() { STLDeleteValues(&converters_); }
 
+void EventFactoryEvdev::DispatchUiEvent(Event* event) {
+  EventFactoryOzone::DispatchEvent(event);
+}
+
 void EventFactoryEvdev::AttachInputDevice(
     const base::FilePath& path,
     scoped_ptr<EventConverterEvdev> converter) {
@@ -134,9 +169,6 @@
 
   // Add initialized device to map.
   converters_[path] = converter.release();
-  converters_[path]->SetDispatchCallback(
-      base::Bind(base::IgnoreResult(&EventFactoryEvdev::DispatchEvent),
-                 base::Unretained(this)));
   converters_[path]->Start();
 }
 
@@ -151,6 +183,7 @@
                  &modifiers_,
                  cursor_,
                  ui_task_runner_,
+                 dispatch_callback_,
                  base::Bind(&EventFactoryEvdev::AttachInputDevice,
                             weak_ptr_factory_.GetWeakPtr(),
                             path)));
diff --git a/ui/events/ozone/evdev/event_factory_evdev.h b/ui/events/ozone/evdev/event_factory_evdev.h
index 39d61ba..b1802fd 100644
--- a/ui/events/ozone/evdev/event_factory_evdev.h
+++ b/ui/events/ozone/evdev/event_factory_evdev.h
@@ -27,6 +27,8 @@
   explicit EventFactoryEvdev(CursorDelegateEvdev* cursor);
   virtual ~EventFactoryEvdev();
 
+  void DispatchUiEvent(Event* event);
+
   // EventFactoryOzone:
   virtual void StartProcessingEvents() OVERRIDE;
   virtual void SetFileTaskRunner(scoped_refptr<base::TaskRunner> task_runner)
@@ -66,6 +68,9 @@
   // Cursor movement.
   CursorDelegateEvdev* cursor_;
 
+  // Dispatch callback for events.
+  EventDispatchCallback dispatch_callback_;
+
   // Support weak pointers for attach & detach callbacks.
   base::WeakPtrFactory<EventFactoryEvdev> weak_ptr_factory_;
 
diff --git a/ui/events/ozone/evdev/event_modifiers_evdev.cc b/ui/events/ozone/evdev/event_modifiers_evdev.cc
index 05d4bd6..d867b5e 100644
--- a/ui/events/ozone/evdev/event_modifiers_evdev.cc
+++ b/ui/events/ozone/evdev/event_modifiers_evdev.cc
@@ -71,4 +71,9 @@
 
 int EventModifiersEvdev::GetModifierFlags() { return modifier_flags_; }
 
+// static
+int EventModifiersEvdev::GetEventFlagFromModifier(unsigned int modifier) {
+  return kEventFlagFromModifiers[modifier];
+}
+
 }  // namespace ui
diff --git a/ui/events/ozone/evdev/event_modifiers_evdev.h b/ui/events/ozone/evdev/event_modifiers_evdev.h
index 4b8f21a..e767758 100644
--- a/ui/events/ozone/evdev/event_modifiers_evdev.h
+++ b/ui/events/ozone/evdev/event_modifiers_evdev.h
@@ -53,6 +53,9 @@
   // Return current flags to use for incoming events.
   int GetModifierFlags();
 
+  // Return the mask for the specified modifier.
+  static int GetEventFlagFromModifier(unsigned int modifier);
+
  private:
   // Count of keys pressed for each modifier.
   int modifiers_down_[EVDEV_NUM_MODIFIERS];
diff --git a/ui/events/ozone/evdev/key_event_converter_evdev.cc b/ui/events/ozone/evdev/key_event_converter_evdev.cc
index e17498c..6f990d4 100644
--- a/ui/events/ozone/evdev/key_event_converter_evdev.cc
+++ b/ui/events/ozone/evdev/key_event_converter_evdev.cc
@@ -187,10 +187,15 @@
 
 }  // namespace
 
-KeyEventConverterEvdev::KeyEventConverterEvdev(int fd,
-                                               base::FilePath path,
-                                               EventModifiersEvdev* modifiers)
-    : fd_(fd), path_(path), modifiers_(modifiers) {
+KeyEventConverterEvdev::KeyEventConverterEvdev(
+    int fd,
+    base::FilePath path,
+    EventModifiersEvdev* modifiers,
+    const EventDispatchCallback& callback)
+    : EventConverterEvdev(callback),
+      fd_(fd),
+      path_(path),
+      modifiers_(modifiers) {
   // TODO(spang): Initialize modifiers using EVIOCGKEY.
 }
 
diff --git a/ui/events/ozone/evdev/key_event_converter_evdev.h b/ui/events/ozone/evdev/key_event_converter_evdev.h
index a30c58c..ea0d983 100644
--- a/ui/events/ozone/evdev/key_event_converter_evdev.h
+++ b/ui/events/ozone/evdev/key_event_converter_evdev.h
@@ -22,7 +22,8 @@
  public:
   KeyEventConverterEvdev(int fd,
                          base::FilePath path,
-                         EventModifiersEvdev* modifiers);
+                         EventModifiersEvdev* modifiers,
+                         const EventDispatchCallback& dispatch);
   virtual ~KeyEventConverterEvdev();
 
   // Start & stop watching for events.
diff --git a/ui/events/ozone/evdev/key_event_converter_evdev_unittest.cc b/ui/events/ozone/evdev/key_event_converter_evdev_unittest.cc
index 52cc62e..88ee646 100644
--- a/ui/events/ozone/evdev/key_event_converter_evdev_unittest.cc
+++ b/ui/events/ozone/evdev/key_event_converter_evdev_unittest.cc
@@ -19,7 +19,10 @@
 class MockKeyEventConverterEvdev : public KeyEventConverterEvdev {
  public:
   MockKeyEventConverterEvdev(int fd, EventModifiersEvdev* modifiers)
-      : KeyEventConverterEvdev(fd, base::FilePath(kTestDevicePath), modifiers) {
+      : KeyEventConverterEvdev(fd,
+                               base::FilePath(kTestDevicePath),
+                               modifiers,
+                               EventDispatchCallback()) {
     Start();
   }
   virtual ~MockKeyEventConverterEvdev() {};
diff --git a/ui/events/ozone/evdev/libgestures_glue/event_reader_libevdev_cros.cc b/ui/events/ozone/evdev/libgestures_glue/event_reader_libevdev_cros.cc
new file mode 100644
index 0000000..86f8834
--- /dev/null
+++ b/ui/events/ozone/evdev/libgestures_glue/event_reader_libevdev_cros.cc
@@ -0,0 +1,107 @@
+// 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.
+
+#include "ui/events/ozone/evdev/libgestures_glue/event_reader_libevdev_cros.h"
+
+#include <errno.h>
+#include <libevdev/libevdev.h>
+#include <linux/input.h>
+
+#include "base/message_loop/message_loop.h"
+#include "base/strings/string_util.h"
+#include "base/strings/stringprintf.h"
+
+namespace ui {
+
+namespace {
+
+std::string FormatLog(const char* fmt, va_list args) {
+  std::string msg = base::StringPrintV(fmt, args);
+  if (!msg.empty() && msg[msg.size() - 1] == '\n')
+    msg.erase(msg.end() - 1, msg.end());
+  return msg;
+}
+
+}  // namespace
+
+EventReaderLibevdevCros::EventReaderLibevdevCros(int fd,
+                                                 const base::FilePath& path,
+                                                 scoped_ptr<Delegate> delegate)
+    : path_(path), delegate_(delegate.Pass()) {
+  memset(&evdev_, 0, sizeof(evdev_));
+  evdev_.log = OnLogMessage;
+  evdev_.log_udata = this;
+  evdev_.syn_report = OnSynReport;
+  evdev_.syn_report_udata = this;
+  evdev_.fd = fd;
+
+  memset(&evstate_, 0, sizeof(evstate_));
+  evdev_.evstate = &evstate_;
+  Event_Init(&evdev_);
+
+  Event_Open(&evdev_);
+
+  delegate_->OnLibEvdevCrosOpen(&evdev_, &evstate_);
+}
+
+EventReaderLibevdevCros::~EventReaderLibevdevCros() {
+  Stop();
+  EvdevClose(&evdev_);
+}
+
+EventReaderLibevdevCros::Delegate::~Delegate() {}
+
+void EventReaderLibevdevCros::Start() {
+  base::MessageLoopForUI::current()->WatchFileDescriptor(
+      evdev_.fd,
+      true,
+      base::MessagePumpLibevent::WATCH_READ,
+      &controller_,
+      this);
+}
+
+void EventReaderLibevdevCros::Stop() {
+  controller_.StopWatchingFileDescriptor();
+}
+
+void EventReaderLibevdevCros::OnFileCanReadWithoutBlocking(int fd) {
+  if (EvdevRead(&evdev_)) {
+    if (errno == EINTR || errno == EAGAIN)
+      return;
+    if (errno != ENODEV)
+      PLOG(ERROR) << "error reading device " << path_.value();
+    Stop();
+    return;
+  }
+}
+
+void EventReaderLibevdevCros::OnFileCanWriteWithoutBlocking(int fd) {
+  NOTREACHED();
+}
+
+// static
+void EventReaderLibevdevCros::OnSynReport(void* data,
+                                          EventStateRec* evstate,
+                                          struct timeval* tv) {
+  EventReaderLibevdevCros* reader = static_cast<EventReaderLibevdevCros*>(data);
+  reader->delegate_->OnLibEvdevCrosEvent(&reader->evdev_, evstate, *tv);
+}
+
+// static
+void EventReaderLibevdevCros::OnLogMessage(void* data,
+                                           int level,
+                                           const char* fmt,
+                                           ...) {
+  va_list args;
+  va_start(args, fmt);
+  if (level >= LOGLEVEL_ERROR)
+    LOG(ERROR) << "libevdev: " << FormatLog(fmt, args);
+  else if (level >= LOGLEVEL_WARNING)
+    LOG(WARNING) << "libevdev: " << FormatLog(fmt, args);
+  else
+    VLOG(3) << "libevdev: " << FormatLog(fmt, args);
+  va_end(args);
+}
+
+}  // namespace ui
diff --git a/ui/events/ozone/evdev/libgestures_glue/event_reader_libevdev_cros.h b/ui/events/ozone/evdev/libgestures_glue/event_reader_libevdev_cros.h
new file mode 100644
index 0000000..1631c5b
--- /dev/null
+++ b/ui/events/ozone/evdev/libgestures_glue/event_reader_libevdev_cros.h
@@ -0,0 +1,78 @@
+// 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.
+
+#ifndef UI_EVENTS_OZONE_EVDEV_LIBGESTURES_GLUE_EVENT_READER_LIBEVDEV_CROS_H_
+#define UI_EVENTS_OZONE_EVDEV_LIBGESTURES_GLUE_EVENT_READER_LIBEVDEV_CROS_H_
+
+#include <libevdev/libevdev.h>
+
+#include "base/files/file_path.h"
+#include "base/message_loop/message_loop.h"
+#include "ui/events/ozone/evdev/event_converter_evdev.h"
+
+namespace ui {
+
+// Basic wrapper for libevdev-cros.
+//
+// This drives libevdev-cros from a file descriptor and calls delegate
+// with the updated event state from libevdev-cros.
+//
+// The library doesn't support all devices currently. In particular there
+// is no support for keyboard events.
+class EventReaderLibevdevCros : public base::MessagePumpLibevent::Watcher,
+                                public EventConverterEvdev {
+ public:
+  class Delegate {
+   public:
+    virtual ~Delegate();
+
+    // Notifier for open. This is called with the initial event state.
+    virtual void OnLibEvdevCrosOpen(Evdev* evdev, EventStateRec* evstate) = 0;
+
+    // Notifier for event. This is called with the updated event state.
+    virtual void OnLibEvdevCrosEvent(Evdev* evdev,
+                                     EventStateRec* state,
+                                     const timeval& time) = 0;
+  };
+
+  EventReaderLibevdevCros(int fd,
+                          const base::FilePath& path,
+                          scoped_ptr<Delegate> delegate);
+  ~EventReaderLibevdevCros();
+
+  // Overridden from ui::EventDeviceEvdev.
+  void Start() OVERRIDE;
+  void Stop() OVERRIDE;
+
+  // Overidden from MessagePumpLibevent::Watcher.
+  virtual void OnFileCanReadWithoutBlocking(int fd) OVERRIDE;
+  virtual void OnFileCanWriteWithoutBlocking(int fd) OVERRIDE;
+
+ private:
+  static void OnSynReport(void* data,
+                          EventStateRec* evstate,
+                          struct timeval* tv);
+  static void OnLogMessage(void*, int level, const char*, ...);
+
+  // Libevdev state.
+  Evdev evdev_;
+
+  // Event state.
+  EventStateRec evstate_;
+
+  // Path to input device.
+  base::FilePath path_;
+
+  // Delegate for event processing.
+  scoped_ptr<Delegate> delegate_;
+
+  // Controller for watching the input fd.
+  base::MessagePumpLibevent::FileDescriptorWatcher controller_;
+
+  DISALLOW_COPY_AND_ASSIGN(EventReaderLibevdevCros);
+};
+
+}  // namspace ui
+
+#endif  // UI_EVENTS_OZONE_EVDEV_LIBGESTURES_GLUE_EVENT_READER_LIBEVDEV_CROS_H_
diff --git a/ui/events/ozone/evdev/libgestures_glue/gesture_interpreter_libevdev_cros.cc b/ui/events/ozone/evdev/libgestures_glue/gesture_interpreter_libevdev_cros.cc
new file mode 100644
index 0000000..503155a
--- /dev/null
+++ b/ui/events/ozone/evdev/libgestures_glue/gesture_interpreter_libevdev_cros.cc
@@ -0,0 +1,266 @@
+// 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.
+
+#include "ui/events/ozone/evdev/libgestures_glue/gesture_interpreter_libevdev_cros.h"
+
+#include <gestures/gestures.h>
+#include <libevdev/libevdev.h>
+
+#include "base/strings/stringprintf.h"
+#include "base/timer/timer.h"
+#include "ui/events/event.h"
+#include "ui/events/ozone/evdev/cursor_delegate_evdev.h"
+#include "ui/events/ozone/evdev/event_modifiers_evdev.h"
+#include "ui/events/ozone/evdev/libgestures_glue/gesture_timer_provider.h"
+#include "ui/gfx/geometry/point_f.h"
+
+namespace ui {
+
+namespace {
+
+// Convert libevdev device class to libgestures device class.
+GestureInterpreterDeviceClass GestureDeviceClass(Evdev* evdev) {
+  switch (evdev->info.evdev_class) {
+    case EvdevClassMouse:
+      return GESTURES_DEVCLASS_MOUSE;
+    case EvdevClassMultitouchMouse:
+      return GESTURES_DEVCLASS_MULTITOUCH_MOUSE;
+    case EvdevClassTouchpad:
+      return GESTURES_DEVCLASS_TOUCHPAD;
+    case EvdevClassTouchscreen:
+      return GESTURES_DEVCLASS_TOUCHSCREEN;
+    default:
+      return GESTURES_DEVCLASS_UNKNOWN;
+  }
+}
+
+// Convert libevdev state to libgestures hardware properties.
+HardwareProperties GestureHardwareProperties(Evdev* evdev) {
+  HardwareProperties hwprops;
+  hwprops.left = Event_Get_Left(evdev);
+  hwprops.top = Event_Get_Top(evdev);
+  hwprops.right = Event_Get_Right(evdev);
+  hwprops.bottom = Event_Get_Bottom(evdev);
+  hwprops.res_x = Event_Get_Res_X(evdev);
+  hwprops.res_y = Event_Get_Res_Y(evdev);
+  hwprops.screen_x_dpi = 133;
+  hwprops.screen_y_dpi = 133;
+  hwprops.orientation_minimum = Event_Get_Orientation_Minimum(evdev);
+  hwprops.orientation_maximum = Event_Get_Orientation_Maximum(evdev);
+  hwprops.max_finger_cnt = Event_Get_Slot_Count(evdev);
+  hwprops.max_touch_cnt = Event_Get_Touch_Count_Max(evdev);
+  hwprops.supports_t5r2 = Event_Get_T5R2(evdev);
+  hwprops.support_semi_mt = Event_Get_Semi_MT(evdev);
+  /* buttonpad means a physical button under the touch surface */
+  hwprops.is_button_pad = Event_Get_Button_Pad(evdev);
+  return hwprops;
+}
+
+// Callback from libgestures when a gesture is ready.
+void OnGestureReadyHelper(void* client_data, const Gesture* gesture) {
+  GestureInterpreterLibevdevCros* interpreter =
+      static_cast<GestureInterpreterLibevdevCros*>(client_data);
+  interpreter->OnGestureReady(gesture);
+}
+
+// Convert gestures timestamp (stime_t) to ui::Event timestamp.
+base::TimeDelta StimeToTimedelta(stime_t timestamp) {
+  return base::TimeDelta::FromMicroseconds(timestamp *
+                                           base::Time::kMicrosecondsPerSecond);
+}
+
+// Number of fingers for scroll gestures.
+const int kGestureScrollFingerCount = 2;
+
+}  // namespace
+
+GestureInterpreterLibevdevCros::GestureInterpreterLibevdevCros(
+    EventModifiersEvdev* modifiers,
+    CursorDelegateEvdev* cursor,
+    const EventDispatchCallback& callback)
+    : modifiers_(modifiers),
+      cursor_(cursor),
+      dispatch_callback_(callback),
+      interpreter_(NULL) {}
+
+GestureInterpreterLibevdevCros::~GestureInterpreterLibevdevCros() {
+  if (interpreter_) {
+    DeleteGestureInterpreter(interpreter_);
+    interpreter_ = NULL;
+  }
+}
+
+void GestureInterpreterLibevdevCros::OnLibEvdevCrosOpen(
+    Evdev* evdev,
+    EventStateRec* evstate) {
+  CHECK(evdev->info.is_monotonic) << "libevdev must use monotonic timestamps";
+  VLOG(9) << "HACK DO NOT REMOVE OR LINK WILL FAIL" << (void*)gestures_log;
+
+  HardwareProperties hwprops = GestureHardwareProperties(evdev);
+  GestureInterpreterDeviceClass devclass = GestureDeviceClass(evdev);
+
+  // Create & initialize GestureInterpreter.
+  CHECK(!interpreter_);
+  interpreter_ = NewGestureInterpreter();
+  GestureInterpreterInitialize(interpreter_, devclass);
+  GestureInterpreterSetHardwareProperties(interpreter_, &hwprops);
+  GestureInterpreterSetTimerProvider(
+      interpreter_,
+      const_cast<GesturesTimerProvider*>(&kGestureTimerProvider),
+      this);
+  GestureInterpreterSetCallback(interpreter_, OnGestureReadyHelper, this);
+}
+
+void GestureInterpreterLibevdevCros::OnLibEvdevCrosEvent(Evdev* evdev,
+                                                         EventStateRec* evstate,
+                                                         const timeval& time) {
+  HardwareState hwstate;
+  memset(&hwstate, 0, sizeof(hwstate));
+  hwstate.timestamp = StimeFromTimeval(&time);
+
+  // Mouse.
+  hwstate.rel_x = evstate->rel_x;
+  hwstate.rel_y = evstate->rel_y;
+  hwstate.rel_wheel = evstate->rel_wheel;
+  hwstate.rel_hwheel = evstate->rel_hwheel;
+
+  // Touch.
+  FingerState fingers[Event_Get_Slot_Count(evdev)];
+  memset(&fingers, 0, sizeof(fingers));
+  int current_finger = 0;
+  for (int i = 0; i < evstate->slot_count; i++) {
+    MtSlotPtr slot = &evstate->slots[i];
+    if (slot->tracking_id == -1)
+      continue;
+    fingers[current_finger].touch_major = slot->touch_major;
+    fingers[current_finger].touch_minor = slot->touch_minor;
+    fingers[current_finger].width_major = slot->width_major;
+    fingers[current_finger].width_minor = slot->width_minor;
+    fingers[current_finger].pressure = slot->pressure;
+    fingers[current_finger].orientation = slot->orientation;
+    fingers[current_finger].position_x = slot->position_x;
+    fingers[current_finger].position_y = slot->position_y;
+    fingers[current_finger].tracking_id = slot->tracking_id;
+    current_finger++;
+  }
+  hwstate.touch_cnt = Event_Get_Touch_Count(evdev);
+  hwstate.finger_cnt = current_finger;
+  hwstate.fingers = fingers;
+
+  // Buttons.
+  if (Event_Get_Button_Left(evdev))
+    hwstate.buttons_down |= GESTURES_BUTTON_LEFT;
+  if (Event_Get_Button_Middle(evdev))
+    hwstate.buttons_down |= GESTURES_BUTTON_MIDDLE;
+  if (Event_Get_Button_Right(evdev))
+    hwstate.buttons_down |= GESTURES_BUTTON_RIGHT;
+
+  GestureInterpreterPushHardwareState(interpreter_, &hwstate);
+}
+
+void GestureInterpreterLibevdevCros::OnGestureReady(const Gesture* gesture) {
+  switch (gesture->type) {
+    case kGestureTypeMove:
+      OnGestureMove(gesture, &gesture->details.move);
+      break;
+    case kGestureTypeScroll:
+      OnGestureScroll(gesture, &gesture->details.scroll);
+      break;
+    case kGestureTypeButtonsChange:
+      OnGestureButtonsChange(gesture, &gesture->details.buttons);
+      break;
+    case kGestureTypeContactInitiated:
+    case kGestureTypeFling:
+    case kGestureTypeSwipe:
+    case kGestureTypeSwipeLift:
+    case kGestureTypePinch:
+    case kGestureTypeMetrics:
+      // TODO(spang): Support remaining gestures.
+      NOTIMPLEMENTED();
+      break;
+    default:
+      LOG(WARNING) << base::StringPrintf("Unrecognized gesture type (%u)",
+                                         gesture->type);
+      break;
+  }
+}
+
+void GestureInterpreterLibevdevCros::OnGestureMove(const Gesture* gesture,
+                                                   const GestureMove* move) {
+  DVLOG(3) << base::StringPrintf("Gesture Move: (%f, %f) [%f, %f]",
+                                 move->dx,
+                                 move->dy,
+                                 move->ordinal_dx,
+                                 move->ordinal_dy);
+  if (!cursor_)
+    return;  // No cursor!
+  cursor_->MoveCursor(gfx::Vector2dF(move->dx, move->dy));
+  // TODO(spang): Use move->ordinal_dx, move->ordinal_dy
+  // TODO(spang): Use move->start_time, move->end_time
+  MouseEvent event(ET_MOUSE_MOVED,
+                   cursor_->location(),
+                   cursor_->location(),
+                   modifiers_->GetModifierFlags(),
+                   /* changed_button_flags */ 0);
+  Dispatch(&event);
+}
+
+void GestureInterpreterLibevdevCros::OnGestureScroll(
+    const Gesture* gesture,
+    const GestureScroll* scroll) {
+  DVLOG(3) << base::StringPrintf("Gesture Scroll: (%f, %f) [%f, %f]",
+                                 scroll->dx,
+                                 scroll->dy,
+                                 scroll->ordinal_dx,
+                                 scroll->ordinal_dy);
+  // TODO(spang): Support SetNaturalScroll
+  // TODO(spang): Use scroll->start_time
+  ScrollEvent event(ET_SCROLL,
+                    cursor_->location(),
+                    StimeToTimedelta(gesture->end_time),
+                    modifiers_->GetModifierFlags(),
+                    scroll->dx,
+                    scroll->dy,
+                    scroll->ordinal_dx,
+                    scroll->ordinal_dy,
+                    kGestureScrollFingerCount);
+  Dispatch(&event);
+}
+
+void GestureInterpreterLibevdevCros::OnGestureButtonsChange(
+    const Gesture* gesture,
+    const GestureButtonsChange* buttons) {
+  DVLOG(3) << base::StringPrintf("Gesture Button Change: down=0x%02x up=0x%02x",
+                                 buttons->down,
+                                 buttons->up);
+  // TODO(spang): Use buttons->start_time, buttons->end_time
+  if (buttons->down & GESTURES_BUTTON_LEFT)
+    DispatchMouseButton(EVDEV_MODIFIER_LEFT_MOUSE_BUTTON, true);
+  if (buttons->down & GESTURES_BUTTON_MIDDLE)
+    DispatchMouseButton(EVDEV_MODIFIER_MIDDLE_MOUSE_BUTTON, true);
+  if (buttons->down & GESTURES_BUTTON_RIGHT)
+    DispatchMouseButton(EVDEV_MODIFIER_RIGHT_MOUSE_BUTTON, true);
+  if (buttons->up & GESTURES_BUTTON_LEFT)
+    DispatchMouseButton(EVDEV_MODIFIER_LEFT_MOUSE_BUTTON, false);
+  if (buttons->up & GESTURES_BUTTON_MIDDLE)
+    DispatchMouseButton(EVDEV_MODIFIER_MIDDLE_MOUSE_BUTTON, false);
+  if (buttons->up & GESTURES_BUTTON_RIGHT)
+    DispatchMouseButton(EVDEV_MODIFIER_RIGHT_MOUSE_BUTTON, false);
+}
+
+void GestureInterpreterLibevdevCros::Dispatch(Event* event) {
+  dispatch_callback_.Run(event);
+}
+
+void GestureInterpreterLibevdevCros::DispatchMouseButton(unsigned int modifier,
+                                                         bool down) {
+  const gfx::PointF& loc = cursor_->location();
+  int flag = modifiers_->GetEventFlagFromModifier(modifier);
+  EventType type = (down ? ET_MOUSE_PRESSED : ET_MOUSE_RELEASED);
+  modifiers_->UpdateModifier(modifier, down);
+  MouseEvent event(type, loc, loc, modifiers_->GetModifierFlags() | flag, flag);
+  Dispatch(&event);
+}
+
+}  // namespace ui
diff --git a/ui/events/ozone/evdev/libgestures_glue/gesture_interpreter_libevdev_cros.h b/ui/events/ozone/evdev/libgestures_glue/gesture_interpreter_libevdev_cros.h
new file mode 100644
index 0000000..66bbef3
--- /dev/null
+++ b/ui/events/ozone/evdev/libgestures_glue/gesture_interpreter_libevdev_cros.h
@@ -0,0 +1,82 @@
+// 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.
+
+#ifndef UI_EVENTS_OZONE_EVDEV_LIBGESTURES_GLUE_GESTURE_INTERPRETER_LIBEVDEV_CROS_H_
+#define UI_EVENTS_OZONE_EVDEV_LIBGESTURES_GLUE_GESTURE_INTERPRETER_LIBEVDEV_CROS_H_
+
+#include <gestures/gestures.h>
+#include <libevdev/libevdev.h>
+
+#include "base/callback.h"
+#include "base/memory/scoped_ptr.h"
+#include "ui/events/events_export.h"
+#include "ui/events/ozone/evdev/cursor_delegate_evdev.h"
+#include "ui/events/ozone/evdev/libgestures_glue/event_reader_libevdev_cros.h"
+
+namespace ui {
+
+class Event;
+class EventDeviceInfo;
+class EventModifiersEvdev;
+class CursorDelegateEvdev;
+
+typedef base::Callback<void(Event*)> EventDispatchCallback;
+
+// Convert libevdev-cros events to ui::Events using libgestures.
+//
+// This builds a GestureInterpreter for an input device (touchpad or
+// mouse).
+//
+// Raw input events must be preprocessed into a form suitable for
+// libgestures. The kernel protocol only emits changes to the device state,
+// so changes must be accumulated until a sync event. The full device state
+// at sync is then processed by libgestures.
+//
+// Once we have the state at sync, we convert it to a HardwareState object
+// and forward it to libgestures. If any gestures are produced, they are
+// converted to ui::Events and dispatched.
+class EVENTS_EXPORT GestureInterpreterLibevdevCros
+    : public EventReaderLibevdevCros::Delegate {
+ public:
+  GestureInterpreterLibevdevCros(EventModifiersEvdev* modifiers,
+                                 CursorDelegateEvdev* cursor,
+                                 const EventDispatchCallback& callback);
+  virtual ~GestureInterpreterLibevdevCros();
+
+  // Overriden from ui::EventReaderLibevdevCros::Delegate
+  virtual void OnLibEvdevCrosOpen(Evdev* evdev,
+                                  EventStateRec* evstate) OVERRIDE;
+  virtual void OnLibEvdevCrosEvent(Evdev* evdev,
+                                   EventStateRec* evstate,
+                                   const timeval& time) OVERRIDE;
+
+  // Handler for gesture events generated from libgestures.
+  void OnGestureReady(const Gesture* gesture);
+
+ private:
+  void OnGestureMove(const Gesture* gesture, const GestureMove* move);
+  void OnGestureScroll(const Gesture* gesture, const GestureScroll* move);
+  void OnGestureButtonsChange(const Gesture* gesture,
+                              const GestureButtonsChange* move);
+  void Dispatch(Event* event);
+  void DispatchMouseButton(unsigned int modifier, bool down);
+
+  // Shared modifier state.
+  EventModifiersEvdev* modifiers_;
+
+  // Shared cursor state.
+  CursorDelegateEvdev* cursor_;
+
+  // Callback for dispatching events.
+  EventDispatchCallback dispatch_callback_;
+
+  // Gestures interpretation state.
+  gestures::GestureInterpreter* interpreter_;
+
+  DISALLOW_COPY_AND_ASSIGN(GestureInterpreterLibevdevCros);
+};
+
+}  // namspace ui
+
+#endif  // UI_EVENTS_OZONE_EVDEV_LIBGESTURES_GLUE_GESTURE_INTERPRETER_LIBEVDEV_CROS_H_
diff --git a/ui/events/ozone/evdev/libgestures_glue/gesture_logging.cc b/ui/events/ozone/evdev/libgestures_glue/gesture_logging.cc
new file mode 100644
index 0000000..009fc93
--- /dev/null
+++ b/ui/events/ozone/evdev/libgestures_glue/gesture_logging.cc
@@ -0,0 +1,32 @@
+// 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.
+
+#include "ui/events/ozone/evdev/libgestures_glue/gesture_logging.h"
+
+#include <gestures/gestures.h>
+#include <stdarg.h>
+
+#include "base/logging.h"
+#include "base/strings/stringprintf.h"
+
+namespace {
+
+std::string FormatLog(const char* fmt, va_list args) {
+  std::string msg = base::StringPrintV(fmt, args);
+  if (!msg.empty() && msg[msg.size() - 1] == '\n')
+    msg.erase(msg.end() - 1, msg.end());
+  return msg;
+}
+
+}  // namespace
+
+void gestures_log(int verb, const char* fmt, ...) {
+  va_list args;
+  va_start(args, fmt);
+  if (verb <= GESTURES_LOG_ERROR)
+    LOG(ERROR) << "gestures: " << FormatLog(fmt, args);
+  else if (verb <= GESTURES_LOG_INFO)
+    VLOG(3) << "gestures: " << FormatLog(fmt, args);
+  va_end(args);
+}
diff --git a/ui/events/ozone/evdev/libgestures_glue/gesture_logging.h b/ui/events/ozone/evdev/libgestures_glue/gesture_logging.h
new file mode 100644
index 0000000..a5f5435
--- /dev/null
+++ b/ui/events/ozone/evdev/libgestures_glue/gesture_logging.h
@@ -0,0 +1,15 @@
+// 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.
+
+#ifndef UI_EVENTS_OZONE_EVDEV_LIBGESTURES_GLUE_GESTURE_LOGGING_H_
+#define UI_EVENTS_OZONE_EVDEV_LIBGESTURES_GLUE_GESTURE_LOGGING_H_
+
+// libgestures.so binds to this function for logging.
+// TODO(spang): Fix libgestures to not require this.
+extern "C"
+    __attribute__((visibility("default"))) void gestures_log(int verb,
+                                                             const char* fmt,
+                                                             ...);
+
+#endif  // UI_EVENTS_OZONE_EVDEV_LIBGESTURES_GLUE_GESTURE_LOGGING_H_
diff --git a/ui/events/ozone/evdev/libgestures_glue/gesture_timer_provider.cc b/ui/events/ozone/evdev/libgestures_glue/gesture_timer_provider.cc
new file mode 100644
index 0000000..92f15b7
--- /dev/null
+++ b/ui/events/ozone/evdev/libgestures_glue/gesture_timer_provider.cc
@@ -0,0 +1,72 @@
+// 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.
+
+#include "ui/events/ozone/evdev/libgestures_glue/gesture_timer_provider.h"
+
+#include <gestures/gestures.h>
+
+#include "base/timer/timer.h"
+
+// libgestures requires that this be in the top level namespace.
+class GesturesTimer {
+ public:
+  GesturesTimer() : callback_(NULL), callback_data_(NULL) {}
+  ~GesturesTimer() {}
+
+  void Set(stime_t delay, GesturesTimerCallback callback, void* callback_data) {
+    callback_ = callback;
+    callback_data_ = callback_data;
+    timer_.Start(FROM_HERE,
+                 base::TimeDelta::FromMicroseconds(
+                     delay * base::Time::kMicrosecondsPerSecond),
+                 this,
+                 &GesturesTimer::OnTimerExpired);
+  }
+
+  void Cancel() { timer_.Stop(); }
+
+ private:
+  void OnTimerExpired() {
+    struct timespec ts;
+    CHECK(!clock_gettime(CLOCK_MONOTONIC, &ts));
+    stime_t next_delay = callback_(StimeFromTimespec(&ts), callback_data_);
+    if (next_delay >= 0) {
+      timer_.Start(FROM_HERE,
+                   base::TimeDelta::FromMicroseconds(
+                       next_delay * base::Time::kMicrosecondsPerSecond),
+                   this,
+                   &GesturesTimer::OnTimerExpired);
+    }
+  }
+
+  GesturesTimerCallback callback_;
+  void* callback_data_;
+  base::OneShotTimer<GesturesTimer> timer_;
+};
+
+namespace ui {
+
+namespace {
+
+GesturesTimer* GesturesTimerCreate(void* data) { return new GesturesTimer; }
+
+void GesturesTimerSet(void* data,
+                      GesturesTimer* timer,
+                      stime_t delay,
+                      GesturesTimerCallback callback,
+                      void* callback_data) {
+  timer->Set(delay, callback, callback_data);
+}
+
+void GesturesTimerCancel(void* data, GesturesTimer* timer) { timer->Cancel(); }
+
+void GesturesTimerFree(void* data, GesturesTimer* timer) { delete timer; }
+
+}  // namespace
+
+const GesturesTimerProvider kGestureTimerProvider = {
+    GesturesTimerCreate, GesturesTimerSet, GesturesTimerCancel,
+    GesturesTimerFree};
+
+}  // namespace ui
diff --git a/ui/events/ozone/evdev/libgestures_glue/gesture_timer_provider.h b/ui/events/ozone/evdev/libgestures_glue/gesture_timer_provider.h
new file mode 100644
index 0000000..edc20ba
--- /dev/null
+++ b/ui/events/ozone/evdev/libgestures_glue/gesture_timer_provider.h
@@ -0,0 +1,16 @@
+// 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.
+
+#ifndef UI_EVENTS_OZONE_EVDEV_LIBGESTURES_GLUE_GESTURE_TIMER_PROVIDER_H_
+#define UI_EVENTS_OZONE_EVDEV_LIBGESTURES_GLUE_GESTURE_TIMER_PROVIDER_H_
+
+#include <gestures/gestures.h>
+
+namespace ui {
+
+extern const GesturesTimerProvider kGestureTimerProvider;
+
+}  // namspace ui
+
+#endif  // UI_EVENTS_OZONE_EVDEV_LIBGESTURES_GLUE_GESTURE_TIMER_PROVIDER_H_
diff --git a/ui/events/ozone/evdev/touch_event_converter_evdev.cc b/ui/events/ozone/evdev/touch_event_converter_evdev.cc
index 8d27e84..9efa8fc 100644
--- a/ui/events/ozone/evdev/touch_event_converter_evdev.cc
+++ b/ui/events/ozone/evdev/touch_event_converter_evdev.cc
@@ -16,11 +16,16 @@
 
 #include "base/bind.h"
 #include "base/callback.h"
+#include "base/command_line.h"
 #include "base/logging.h"
 #include "base/memory/scoped_vector.h"
 #include "base/message_loop/message_loop.h"
+#include "base/strings/string_number_conversions.h"
+#include "base/strings/string_util.h"
+#include "base/strings/stringprintf.h"
 #include "ui/events/event.h"
 #include "ui/events/event_constants.h"
+#include "ui/events/event_switches.h"
 #include "ui/events/ozone/event_factory_ozone.h"
 #include "ui/gfx/screen.h"
 
@@ -30,21 +35,60 @@
 // TODO(rjkroege): Configure this per device.
 const float kFingerWidth = 25.f;
 
+struct TouchCalibration {
+  int bezel_left;
+  int bezel_right;
+  int bezel_top;
+  int bezel_bottom;
+};
+
+void GetTouchCalibration(TouchCalibration* cal) {
+  std::vector<std::string> parts;
+  if (Tokenize(CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
+                   switches::kTouchCalibration),
+               ",",
+               &parts) >= 4) {
+    if (!base::StringToInt(parts[0], &cal->bezel_left))
+      DLOG(ERROR) << "Incorrect left border calibration value passed.";
+    if (!base::StringToInt(parts[1], &cal->bezel_right))
+      DLOG(ERROR) << "Incorrect right border calibration value passed.";
+    if (!base::StringToInt(parts[2], &cal->bezel_top))
+      DLOG(ERROR) << "Incorrect top border calibration value passed.";
+    if (!base::StringToInt(parts[3], &cal->bezel_bottom))
+      DLOG(ERROR) << "Incorrect bottom border calibration value passed.";
+  }
+}
+
+float TuxelsToPixels(float val,
+                     float min_tuxels,
+                     float num_tuxels,
+                     float min_pixels,
+                     float num_pixels) {
+  // Map [min_tuxels, min_tuxels + num_tuxels) to
+  //     [min_pixels, min_pixels + num_pixels).
+  return min_pixels + (val - min_tuxels) * num_pixels / num_tuxels;
+}
+
 }  // namespace
 
 namespace ui {
 
-TouchEventConverterEvdev::TouchEventConverterEvdev(int fd,
-                                                   base::FilePath path,
-                                                   const EventDeviceInfo& info)
-    : pressure_min_(info.GetAbsMinimum(ABS_MT_PRESSURE)),
+TouchEventConverterEvdev::TouchEventConverterEvdev(
+    int fd,
+    base::FilePath path,
+    const EventDeviceInfo& info,
+    const EventDispatchCallback& callback)
+    : EventConverterEvdev(callback),
+      pressure_min_(info.GetAbsMinimum(ABS_MT_PRESSURE)),
       pressure_max_(info.GetAbsMaximum(ABS_MT_PRESSURE)),
-      x_scale_(1.),
-      y_scale_(1.),
-      x_min_(info.GetAbsMinimum(ABS_MT_POSITION_X)),
-      x_max_(info.GetAbsMaximum(ABS_MT_POSITION_X)),
-      y_min_(info.GetAbsMinimum(ABS_MT_POSITION_Y)),
-      y_max_(info.GetAbsMaximum(ABS_MT_POSITION_Y)),
+      x_min_tuxels_(info.GetAbsMinimum(ABS_MT_POSITION_X)),
+      x_num_tuxels_(info.GetAbsMaximum(ABS_MT_POSITION_X) - x_min_tuxels_ + 1),
+      y_min_tuxels_(info.GetAbsMinimum(ABS_MT_POSITION_Y)),
+      y_num_tuxels_(info.GetAbsMaximum(ABS_MT_POSITION_Y) - y_min_tuxels_ + 1),
+      x_min_pixels_(x_min_tuxels_),
+      x_num_pixels_(x_num_tuxels_),
+      y_min_pixels_(y_min_tuxels_),
+      y_num_pixels_(y_num_tuxels_),
       current_slot_(0),
       fd_(fd),
       path_(path) {
@@ -63,9 +107,29 @@
   gfx::Display display = screen->GetPrimaryDisplay();
   gfx::Size size = display.GetSizeInPixel();
 
-  x_scale_ = (double)size.width() / (x_max_ - x_min_);
-  y_scale_ = (double)size.height() / (y_max_ - y_min_);
-  VLOG(1) << "touch scaling x_scale=" << x_scale_ << " y_scale=" << y_scale_;
+  // Map coordinates onto screen.
+  x_min_pixels_ = 0;
+  y_min_pixels_ = 0;
+  x_num_pixels_ = size.width();
+  y_num_pixels_ = size.height();
+
+  VLOG(1) << "mapping touch coordinates to screen coordinates: "
+          << base::StringPrintf("%dx%d", size.width(), size.height());
+
+  // Apply --touch-calibration.
+  TouchCalibration cal = {};
+  GetTouchCalibration(&cal);
+  x_min_tuxels_ += cal.bezel_left;
+  x_num_tuxels_ -= cal.bezel_left + cal.bezel_right;
+  y_min_tuxels_ += cal.bezel_top;
+  y_num_tuxels_ -= cal.bezel_top + cal.bezel_bottom;
+
+  VLOG(1) << "applying touch calibration: "
+          << base::StringPrintf("[%d, %d, %d, %d]",
+                                cal.bezel_left,
+                                cal.bezel_right,
+                                cal.bezel_top,
+                                cal.bezel_bottom);
 }
 
 void TouchEventConverterEvdev::Start() {
@@ -106,12 +170,20 @@
         case ABS_X:
         case ABS_MT_POSITION_X:
           altered_slots_.set(current_slot_);
-          events_[current_slot_].x_ = roundf(input.value * x_scale_);
+          events_[current_slot_].x_ = TuxelsToPixels(input.value,
+                                                     x_min_tuxels_,
+                                                     x_num_tuxels_,
+                                                     x_min_pixels_,
+                                                     x_num_pixels_);
           break;
         case ABS_Y:
         case ABS_MT_POSITION_Y:
           altered_slots_.set(current_slot_);
-          events_[current_slot_].y_ = roundf(input.value * y_scale_);
+          events_[current_slot_].y_ = TuxelsToPixels(input.value,
+                                                     y_min_tuxels_,
+                                                     y_num_tuxels_,
+                                                     y_min_pixels_,
+                                                     y_num_pixels_);
           break;
         case ABS_MT_TRACKING_ID:
           altered_slots_.set(current_slot_);
@@ -143,8 +215,7 @@
               // TODO(rjkroege): Support elliptical finger regions.
               touch_events.push_back(new TouchEvent(
                   events_[j].type_,
-                  gfx::Point(std::min(x_max_, events_[j].x_),
-                             std::min(y_max_, events_[j].y_)),
+                  gfx::PointF(events_[j].x_, events_[j].y_),
                   /* flags */ 0,
                   /* touch_id */ j,
                   base::TimeDelta::FromMicroseconds(
diff --git a/ui/events/ozone/evdev/touch_event_converter_evdev.h b/ui/events/ozone/evdev/touch_event_converter_evdev.h
index dea3ce8..a1b81a6 100644
--- a/ui/events/ozone/evdev/touch_event_converter_evdev.h
+++ b/ui/events/ozone/evdev/touch_event_converter_evdev.h
@@ -28,7 +28,8 @@
   };
   TouchEventConverterEvdev(int fd,
                            base::FilePath path,
-                           const EventDeviceInfo& info);
+                           const EventDeviceInfo& info,
+                           const EventDispatchCallback& dispatch);
   virtual ~TouchEventConverterEvdev();
 
   // Start & stop watching for events.
@@ -49,17 +50,21 @@
   int pressure_min_;
   int pressure_max_;  // Used to normalize pressure values.
 
-  // Touch scaling.
-  float x_scale_;
-  float y_scale_;
+  // Input range for x-axis.
+  float x_min_tuxels_;
+  float x_num_tuxels_;
 
-  // Range for x-axis.
-  int x_min_;
-  int x_max_;
+  // Input range for y-axis.
+  float y_min_tuxels_;
+  float y_num_tuxels_;
 
-  // Range for y-axis.
-  int y_min_;
-  int y_max_;
+  // Output range for x-axis.
+  float x_min_pixels_;
+  float x_num_pixels_;
+
+  // Output range for y-axis.
+  float y_min_pixels_;
+  float y_num_pixels_;
 
   // Touch point currently being updated from the /dev/input/event* stream.
   int current_slot_;
@@ -75,8 +80,8 @@
   std::bitset<MAX_FINGERS> altered_slots_;
 
   struct InProgressEvents {
-    int x_;
-    int y_;
+    float x_;
+    float y_;
     int id_;  // Device reported "unique" touch point id; -1 means not active
     int finger_;  // "Finger" id starting from 0; -1 means not active
 
diff --git a/ui/events/ozone/evdev/touch_event_converter_evdev_unittest.cc b/ui/events/ozone/evdev/touch_event_converter_evdev_unittest.cc
index 472e79e..3fddb46 100644
--- a/ui/events/ozone/evdev/touch_event_converter_evdev_unittest.cc
+++ b/ui/events/ozone/evdev/touch_event_converter_evdev_unittest.cc
@@ -53,7 +53,7 @@
     base::RunLoop().RunUntilIdle();
   }
 
-  void DispatchCallback(void* event) {
+  void DispatchCallback(Event* event) {
     dispatched_events_.push_back(
         new TouchEvent(*static_cast<TouchEvent*>(event)));
   }
@@ -69,15 +69,20 @@
 
 MockTouchEventConverterEvdev::MockTouchEventConverterEvdev(int fd,
                                                            base::FilePath path)
-    : TouchEventConverterEvdev(fd, path, EventDeviceInfo()) {
+    : TouchEventConverterEvdev(
+          fd,
+          path,
+          EventDeviceInfo(),
+          base::Bind(&MockTouchEventConverterEvdev::DispatchCallback,
+                     base::Unretained(this))) {
   pressure_min_ = 30;
   pressure_max_ = 60;
 
   // TODO(rjkroege): Check test axes.
-  x_min_ = 0;
-  x_max_ = std::numeric_limits<int>::max();
-  y_min_ = 0;
-  y_max_ = std::numeric_limits<int>::max();
+  x_min_pixels_ = x_min_tuxels_ = 0;
+  x_num_pixels_ = x_num_tuxels_ = std::numeric_limits<int>::max();
+  y_min_pixels_ = y_min_tuxels_ = 0;
+  y_num_pixels_ = y_num_tuxels_ = std::numeric_limits<int>::max();
 
   int fds[2];
 
@@ -122,9 +127,6 @@
     loop_ = new base::MessageLoopForUI;
     device_ = new ui::MockTouchEventConverterEvdev(
         events_in_, base::FilePath(kTestDevicePath));
-    device_->SetDispatchCallback(
-        base::Bind(&ui::MockTouchEventConverterEvdev::DispatchCallback,
-                   base::Unretained(device_)));
   }
 
   virtual void TearDown() OVERRIDE {
diff --git a/ui/events/platform/platform_event_source.cc b/ui/events/platform/platform_event_source.cc
index a1a79ce..4abb4ba 100644
--- a/ui/events/platform/platform_event_source.cc
+++ b/ui/events/platform/platform_event_source.cc
@@ -34,17 +34,12 @@
 void PlatformEventSource::AddPlatformEventDispatcher(
     PlatformEventDispatcher* dispatcher) {
   CHECK(dispatcher);
-  DCHECK(std::find(dispatchers_.begin(), dispatchers_.end(), dispatcher) ==
-         dispatchers_.end());
-  dispatchers_.push_back(dispatcher);
+  dispatchers_.AddObserver(dispatcher);
 }
 
 void PlatformEventSource::RemovePlatformEventDispatcher(
     PlatformEventDispatcher* dispatcher) {
-  PlatformEventDispatcherList::iterator remove =
-      std::remove(dispatchers_.begin(), dispatchers_.end(), dispatcher);
-  if (remove != dispatchers_.end())
-    dispatchers_.erase(remove);
+  dispatchers_.RemoveObserver(dispatcher);
 }
 
 scoped_ptr<ScopedEventDispatcher> PlatformEventSource::OverrideDispatcher(
@@ -77,11 +72,10 @@
     action = overridden_dispatcher_->DispatchEvent(platform_event);
   should_quit = !!(action & POST_DISPATCH_QUIT_LOOP);
 
-  if (action & POST_DISPATCH_PERFORM_DEFAULT) {
-    for (PlatformEventDispatcherList::iterator i = dispatchers_.begin();
-         i != dispatchers_.end();
-         ++i) {
-      PlatformEventDispatcher* dispatcher = *(i);
+  if ((action & POST_DISPATCH_PERFORM_DEFAULT) &&
+      dispatchers_.might_have_observers()) {
+    ObserverList<PlatformEventDispatcher>::Iterator iter(dispatchers_);
+    while (PlatformEventDispatcher* dispatcher = iter.GetNext()) {
       if (dispatcher->CanDispatchEvent(platform_event))
         action = dispatcher->DispatchEvent(platform_event);
       if (action & POST_DISPATCH_QUIT_LOOP)
diff --git a/ui/events/platform/platform_event_source.h b/ui/events/platform/platform_event_source.h
index 407085c..d5867cd 100644
--- a/ui/events/platform/platform_event_source.h
+++ b/ui/events/platform/platform_event_source.h
@@ -30,7 +30,14 @@
 
   static PlatformEventSource* GetInstance();
 
+  // Adds a dispatcher to the dispatcher list. If a dispatcher is added during
+  // dispatching an event, then the newly added dispatcher also receives that
+  // event.
   void AddPlatformEventDispatcher(PlatformEventDispatcher* dispatcher);
+
+  // Removes a dispatcher from the dispatcher list. Dispatchers can safely be
+  // removed from the dispatcher list during an event is being dispatched,
+  // without affecting the dispatch of the event to other existing dispatchers.
   void RemovePlatformEventDispatcher(PlatformEventDispatcher* dispatcher);
 
   // Installs a PlatformEventDispatcher that receives all the events. The
@@ -65,7 +72,10 @@
 
   void OnOverriddenDispatcherRestored();
 
-  typedef std::vector<PlatformEventDispatcher*> PlatformEventDispatcherList;
+  // Use an ObserverList<> instead of an std::vector<> to store the list of
+  // dispatchers, so that adding/removing dispatchers during an event dispatch
+  // is well-defined.
+  typedef ObserverList<PlatformEventDispatcher> PlatformEventDispatcherList;
   PlatformEventDispatcherList dispatchers_;
   PlatformEventDispatcher* overridden_dispatcher_;
 
diff --git a/ui/events/platform/platform_event_source_unittest.cc b/ui/events/platform/platform_event_source_unittest.cc
index 78b7cc4..fa5e9ef 100644
--- a/ui/events/platform/platform_event_source_unittest.cc
+++ b/ui/events/platform/platform_event_source_unittest.cc
@@ -27,6 +27,20 @@
 template <typename T>
 void DestroyScopedPtr(scoped_ptr<T> object) {}
 
+void RemoveDispatcher(PlatformEventDispatcher* dispatcher) {
+  PlatformEventSource::GetInstance()->RemovePlatformEventDispatcher(dispatcher);
+}
+
+void RemoveDispatchers(PlatformEventDispatcher* first,
+                       PlatformEventDispatcher* second) {
+  PlatformEventSource::GetInstance()->RemovePlatformEventDispatcher(first);
+  PlatformEventSource::GetInstance()->RemovePlatformEventDispatcher(second);
+}
+
+void AddDispatcher(PlatformEventDispatcher* dispatcher) {
+  PlatformEventSource::GetInstance()->AddPlatformEventDispatcher(dispatcher);
+}
+
 }  // namespace
 
 class TestPlatformEventSource : public PlatformEventSource {
@@ -302,6 +316,170 @@
   EXPECT_EQ(10, list[2]);
 }
 
+// Runs a callback during an event dispatch.
+class RunCallbackDuringDispatch : public TestPlatformEventDispatcher {
+ public:
+  RunCallbackDuringDispatch(int id, std::vector<int>* list)
+      : TestPlatformEventDispatcher(id, list) {}
+  virtual ~RunCallbackDuringDispatch() {}
+
+  void set_callback(const base::Closure& callback) {
+    callback_ = callback;
+  }
+
+ protected:
+  // PlatformEventDispatcher:
+  virtual uint32_t DispatchEvent(const PlatformEvent& event) OVERRIDE {
+    if (!callback_.is_null())
+      callback_.Run();
+    return TestPlatformEventDispatcher::DispatchEvent(event);
+  }
+
+ private:
+  base::Closure callback_;
+
+  DISALLOW_COPY_AND_ASSIGN(RunCallbackDuringDispatch);
+};
+
+// Test that if a dispatcher removes another dispatcher that is later in the
+// dispatcher list during dispatching an event, then event dispatching still
+// continues correctly.
+TEST_F(PlatformEventTest, DispatcherRemovesNextDispatcherDuringDispatch) {
+  std::vector<int> list;
+  TestPlatformEventDispatcher first(10, &list);
+  RunCallbackDuringDispatch second(15, &list);
+  TestPlatformEventDispatcher third(20, &list);
+  TestPlatformEventDispatcher fourth(30, &list);
+
+  second.set_callback(base::Bind(&RemoveDispatcher, base::Unretained(&third)));
+
+  scoped_ptr<PlatformEvent> event(CreatePlatformEvent());
+  source()->Dispatch(*event);
+  // |second| removes |third| from the dispatcher list during dispatch. So the
+  // event should only reach |first|, |second|, and |fourth|.
+  ASSERT_EQ(3u, list.size());
+  EXPECT_EQ(10, list[0]);
+  EXPECT_EQ(15, list[1]);
+  EXPECT_EQ(30, list[2]);
+}
+
+// Tests that if a dispatcher removes itself from the dispatcher list during
+// dispatching an event, then event dispatching continues correctly.
+TEST_F(PlatformEventTest, DispatcherRemovesSelfDuringDispatch) {
+  std::vector<int> list;
+  TestPlatformEventDispatcher first(10, &list);
+  RunCallbackDuringDispatch second(15, &list);
+  TestPlatformEventDispatcher third(20, &list);
+
+  second.set_callback(base::Bind(&RemoveDispatcher, base::Unretained(&second)));
+
+  scoped_ptr<PlatformEvent> event(CreatePlatformEvent());
+  source()->Dispatch(*event);
+  // |second| removes itself from the dispatcher list during dispatch. So the
+  // event should reach all three dispatchers in the list.
+  ASSERT_EQ(3u, list.size());
+  EXPECT_EQ(10, list[0]);
+  EXPECT_EQ(15, list[1]);
+  EXPECT_EQ(20, list[2]);
+}
+
+// Tests that if a dispatcher removes itself from the dispatcher list during
+// dispatching an event, and this dispatcher is last in the dispatcher-list,
+// then event dispatching ends correctly.
+TEST_F(PlatformEventTest, DispatcherRemovesSelfDuringDispatchLast) {
+  std::vector<int> list;
+  TestPlatformEventDispatcher first(10, &list);
+  RunCallbackDuringDispatch second(15, &list);
+
+  second.set_callback(base::Bind(&RemoveDispatcher, base::Unretained(&second)));
+
+  scoped_ptr<PlatformEvent> event(CreatePlatformEvent());
+  source()->Dispatch(*event);
+  // |second| removes itself during dispatch. So both dispatchers will have
+  // received the event.
+  ASSERT_EQ(2u, list.size());
+  EXPECT_EQ(10, list[0]);
+  EXPECT_EQ(15, list[1]);
+}
+
+// Tests that if a dispatcher removes a single dispatcher that comes before it
+// in the dispatcher list, then dispatch continues correctly.
+TEST_F(PlatformEventTest, DispatcherRemovesPrevDispatcherDuringDispatch) {
+  std::vector<int> list;
+  TestPlatformEventDispatcher first(10, &list);
+  RunCallbackDuringDispatch second(15, &list);
+  TestPlatformEventDispatcher third(20, &list);
+
+  second.set_callback(base::Bind(&RemoveDispatcher, base::Unretained(&first)));
+
+  scoped_ptr<PlatformEvent> event(CreatePlatformEvent());
+  source()->Dispatch(*event);
+  // |second| removes |first| from the dispatcher list during dispatch. The
+  // event should reach all three dispatchers.
+  ASSERT_EQ(3u, list.size());
+  EXPECT_EQ(10, list[0]);
+  EXPECT_EQ(15, list[1]);
+  EXPECT_EQ(20, list[2]);
+}
+
+// Tests that if a dispatcher removes multiple dispatchers that comes before it
+// in the dispatcher list, then dispatch continues correctly.
+TEST_F(PlatformEventTest, DispatcherRemovesPrevDispatchersDuringDispatch) {
+  std::vector<int> list;
+  TestPlatformEventDispatcher first(10, &list);
+  TestPlatformEventDispatcher second(12, &list);
+  RunCallbackDuringDispatch third(15, &list);
+  TestPlatformEventDispatcher fourth(20, &list);
+
+  third.set_callback(base::Bind(&RemoveDispatchers,
+                                base::Unretained(&first),
+                                base::Unretained(&second)));
+
+  scoped_ptr<PlatformEvent> event(CreatePlatformEvent());
+  source()->Dispatch(*event);
+  // |third| removes |first| and |second| from the dispatcher list during
+  // dispatch. The event should reach all three dispatchers.
+  ASSERT_EQ(4u, list.size());
+  EXPECT_EQ(10, list[0]);
+  EXPECT_EQ(12, list[1]);
+  EXPECT_EQ(15, list[2]);
+  EXPECT_EQ(20, list[3]);
+}
+
+// Tests that adding a dispatcher during dispatching an event receives that
+// event.
+TEST_F(PlatformEventTest, DispatcherAddedDuringDispatchReceivesEvent) {
+  std::vector<int> list;
+  TestPlatformEventDispatcher first(10, &list);
+  RunCallbackDuringDispatch second(15, &list);
+  TestPlatformEventDispatcher third(20, &list);
+  TestPlatformEventDispatcher fourth(30, &list);
+  RemoveDispatchers(&third, &fourth);
+
+  scoped_ptr<PlatformEvent> event(CreatePlatformEvent());
+  source()->Dispatch(*event);
+  ASSERT_EQ(2u, list.size());
+  EXPECT_EQ(10, list[0]);
+  EXPECT_EQ(15, list[1]);
+
+  second.set_callback(base::Bind(&AddDispatcher, base::Unretained(&third)));
+  list.clear();
+  source()->Dispatch(*event);
+  ASSERT_EQ(3u, list.size());
+  EXPECT_EQ(10, list[0]);
+  EXPECT_EQ(15, list[1]);
+  EXPECT_EQ(20, list[2]);
+
+  second.set_callback(base::Bind(&AddDispatcher, base::Unretained(&fourth)));
+  list.clear();
+  source()->Dispatch(*event);
+  ASSERT_EQ(4u, list.size());
+  EXPECT_EQ(10, list[0]);
+  EXPECT_EQ(15, list[1]);
+  EXPECT_EQ(20, list[2]);
+  EXPECT_EQ(30, list[3]);
+}
+
 // Provides mechanism for running tests from inside an active message-loop.
 class PlatformEventTestWithMessageLoop : public PlatformEventTest {
  public:
diff --git a/ui/events/platform/x11/x11_event_source.cc b/ui/events/platform/x11/x11_event_source.cc
index 910578f..e074bc8 100644
--- a/ui/events/platform/x11/x11_event_source.cc
+++ b/ui/events/platform/x11/x11_event_source.cc
@@ -4,7 +4,6 @@
 
 #include "ui/events/platform/x11/x11_event_source.h"
 
-#include <glib.h>
 #include <X11/extensions/XInput2.h>
 #include <X11/X.h>
 #include <X11/Xlib.h>
@@ -19,42 +18,6 @@
 
 namespace {
 
-struct GLibX11Source : public GSource {
-  // Note: The GLibX11Source is created and destroyed by GLib. So its
-  // constructor/destructor may or may not get called.
-  XDisplay* display;
-  GPollFD* poll_fd;
-};
-
-gboolean XSourcePrepare(GSource* source, gint* timeout_ms) {
-  GLibX11Source* gxsource = static_cast<GLibX11Source*>(source);
-  if (XPending(gxsource->display))
-    *timeout_ms = 0;
-  else
-    *timeout_ms = -1;
-  return FALSE;
-}
-
-gboolean XSourceCheck(GSource* source) {
-  GLibX11Source* gxsource = static_cast<GLibX11Source*>(source);
-  return XPending(gxsource->display);
-}
-
-gboolean XSourceDispatch(GSource* source,
-                         GSourceFunc unused_func,
-                         gpointer data) {
-  X11EventSource* x11_source = static_cast<X11EventSource*>(data);
-  x11_source->DispatchXEvents();
-  return TRUE;
-}
-
-GSourceFuncs XSourceFuncs = {
-  XSourcePrepare,
-  XSourceCheck,
-  XSourceDispatch,
-  NULL
-};
-
 int g_xinput_opcode = -1;
 
 bool InitializeXInput2(XDisplay* display) {
@@ -117,18 +80,13 @@
 }  // namespace
 
 X11EventSource::X11EventSource(XDisplay* display)
-    : display_(display),
-      x_source_(NULL) {
+    : display_(display) {
   CHECK(display_);
   InitializeXInput2(display_);
   InitializeXkb(display_);
-
-  InitXSource();
 }
 
 X11EventSource::~X11EventSource() {
-  g_source_destroy(x_source_);
-  g_source_unref(x_source_);
 }
 
 // static
@@ -166,27 +124,6 @@
 ////////////////////////////////////////////////////////////////////////////////
 // X11EventSource, private
 
-void X11EventSource::InitXSource() {
-  CHECK(!x_source_);
-  CHECK(display_) << "Unable to get connection to X server";
-
-  x_poll_.reset(new GPollFD());
-  x_poll_->fd = ConnectionNumber(display_);
-  x_poll_->events = G_IO_IN;
-  x_poll_->revents = 0;
-
-  GLibX11Source* glib_x_source = static_cast<GLibX11Source*>
-      (g_source_new(&XSourceFuncs, sizeof(GLibX11Source)));
-  glib_x_source->display = display_;
-  glib_x_source->poll_fd = x_poll_.get();
-
-  x_source_ = glib_x_source;
-  g_source_add_poll(x_source_, x_poll_.get());
-  g_source_set_can_recurse(x_source_, TRUE);
-  g_source_set_callback(x_source_, NULL, this, NULL);
-  g_source_attach(x_source_, g_main_context_default());
-}
-
 uint32_t X11EventSource::DispatchEvent(XEvent* xevent) {
   bool have_cookie = false;
   if (xevent->type == GenericEvent &&
@@ -205,9 +142,4 @@
   return action;
 }
 
-scoped_ptr<PlatformEventSource> PlatformEventSource::CreateDefault() {
-  return scoped_ptr<PlatformEventSource>(
-      new X11EventSource(gfx::GetXDisplay()));
-}
-
 }  // namespace ui
diff --git a/ui/events/platform/x11/x11_event_source.h b/ui/events/platform/x11/x11_event_source.h
index 93a371e..b05918d 100644
--- a/ui/events/platform/x11/x11_event_source.h
+++ b/ui/events/platform/x11/x11_event_source.h
@@ -41,22 +41,16 @@
   // functions which require a mapped window.
   void BlockUntilWindowMapped(XID window);
 
- private:
-  // Initializes the glib event source for X.
-  void InitXSource();
+ protected:
+  XDisplay* display() { return display_; }
 
+ private:
   // PlatformEventSource:
   virtual uint32_t DispatchEvent(XEvent* xevent) OVERRIDE;
 
   // The connection to the X11 server used to receive the events.
   XDisplay* display_;
 
-  // The GLib event source for X events.
-  GSource* x_source_;
-
-  // The poll attached to |x_source_|.
-  scoped_ptr<GPollFD> x_poll_;
-
   DISALLOW_COPY_AND_ASSIGN(X11EventSource);
 };
 
diff --git a/ui/events/platform/x11/x11_event_source_glib.cc b/ui/events/platform/x11/x11_event_source_glib.cc
new file mode 100644
index 0000000..9504422
--- /dev/null
+++ b/ui/events/platform/x11/x11_event_source_glib.cc
@@ -0,0 +1,101 @@
+// 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.
+
+#include "ui/events/platform/x11/x11_event_source.h"
+
+#include <glib.h>
+#include <X11/Xlib.h>
+
+namespace ui {
+
+namespace {
+
+struct GLibX11Source : public GSource {
+  // Note: The GLibX11Source is created and destroyed by GLib. So its
+  // constructor/destructor may or may not get called.
+  XDisplay* display;
+  GPollFD* poll_fd;
+};
+
+gboolean XSourcePrepare(GSource* source, gint* timeout_ms) {
+  GLibX11Source* gxsource = static_cast<GLibX11Source*>(source);
+  if (XPending(gxsource->display))
+    *timeout_ms = 0;
+  else
+    *timeout_ms = -1;
+  return FALSE;
+}
+
+gboolean XSourceCheck(GSource* source) {
+  GLibX11Source* gxsource = static_cast<GLibX11Source*>(source);
+  return XPending(gxsource->display);
+}
+
+gboolean XSourceDispatch(GSource* source,
+                         GSourceFunc unused_func,
+                         gpointer data) {
+  X11EventSource* x11_source = static_cast<X11EventSource*>(data);
+  x11_source->DispatchXEvents();
+  return TRUE;
+}
+
+GSourceFuncs XSourceFuncs = {
+  XSourcePrepare,
+  XSourceCheck,
+  XSourceDispatch,
+  NULL
+};
+
+class X11EventSourceGlib : public X11EventSource {
+ public:
+  explicit X11EventSourceGlib(XDisplay* display)
+      : X11EventSource(display),
+        x_source_(NULL) {
+    InitXSource(ConnectionNumber(display));
+  }
+
+  virtual ~X11EventSourceGlib() {
+    g_source_destroy(x_source_);
+    g_source_unref(x_source_);
+  }
+
+ private:
+  void InitXSource(int fd) {
+    CHECK(!x_source_);
+    CHECK(display()) << "Unable to get connection to X server";
+
+    x_poll_.reset(new GPollFD());
+    x_poll_->fd = fd;
+    x_poll_->events = G_IO_IN;
+    x_poll_->revents = 0;
+
+    GLibX11Source* glib_x_source = static_cast<GLibX11Source*>
+        (g_source_new(&XSourceFuncs, sizeof(GLibX11Source)));
+    glib_x_source->display = display();
+    glib_x_source->poll_fd = x_poll_.get();
+
+    x_source_ = glib_x_source;
+    g_source_add_poll(x_source_, x_poll_.get());
+    g_source_set_can_recurse(x_source_, TRUE);
+    g_source_set_callback(x_source_, NULL, this, NULL);
+    g_source_attach(x_source_, g_main_context_default());
+  }
+
+  // The GLib event source for X events.
+  GSource* x_source_;
+
+  // The poll attached to |x_source_|.
+  scoped_ptr<GPollFD> x_poll_;
+
+  DISALLOW_COPY_AND_ASSIGN(X11EventSourceGlib);
+};
+
+}  // namespace
+
+scoped_ptr<PlatformEventSource> PlatformEventSource::CreateDefault() {
+  return scoped_ptr<PlatformEventSource>(
+      new X11EventSourceGlib(gfx::GetXDisplay()));
+}
+
+}  // namespace ui
diff --git a/ui/events/platform/x11/x11_event_source_libevent.cc b/ui/events/platform/x11/x11_event_source_libevent.cc
new file mode 100644
index 0000000..0f27e69
--- /dev/null
+++ b/ui/events/platform/x11/x11_event_source_libevent.cc
@@ -0,0 +1,51 @@
+// 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.
+
+#include "ui/events/platform/x11/x11_event_source.h"
+
+#include <X11/Xlib.h>
+
+#include "base/message_loop/message_loop.h"
+#include "base/message_loop/message_pump_libevent.h"
+
+namespace ui {
+
+namespace {
+
+class X11EventSourceLibevent : public X11EventSource,
+                               public base::MessagePumpLibevent::Watcher {
+ public:
+  explicit X11EventSourceLibevent(XDisplay* display)
+      : X11EventSource(display) {
+    int fd = ConnectionNumber(display);
+    base::MessageLoopForUI::current()->WatchFileDescriptor(fd, true,
+        base::MessagePumpLibevent::WATCH_READ, &watcher_controller_, this);
+  }
+
+  virtual ~X11EventSourceLibevent() {
+  }
+
+ private:
+  // base::MessagePumpLibevent::Watcher:
+  virtual void OnFileCanReadWithoutBlocking(int fd) OVERRIDE {
+    DispatchXEvents();
+  }
+
+  virtual void OnFileCanWriteWithoutBlocking(int fd) OVERRIDE {
+    NOTREACHED();
+  }
+
+  base::MessagePumpLibevent::FileDescriptorWatcher watcher_controller_;
+
+  DISALLOW_COPY_AND_ASSIGN(X11EventSourceLibevent);
+};
+
+}  // namespace
+
+scoped_ptr<PlatformEventSource> PlatformEventSource::CreateDefault() {
+  return scoped_ptr<PlatformEventSource>(
+      new X11EventSourceLibevent(gfx::GetXDisplay()));
+}
+
+}  // namespace ui
diff --git a/ui/events/win/events_win.cc b/ui/events/win/events_win.cc
index 1588562..7b559a6 100644
--- a/ui/events/win/events_win.cc
+++ b/ui/events/win/events_win.cc
@@ -236,7 +236,7 @@
     native_point.y = GET_Y_LPARAM(native_event.lParam);
   }
   ScreenToClient(native_event.hwnd, &native_point);
-  return gfx::win::ScreenToDIPPoint(gfx::Point(native_point));
+  return gfx::Point(native_point);
 }
 
 gfx::Point EventSystemLocationFromNative(
diff --git a/ui/events/x/events_x.cc b/ui/events/x/events_x.cc
index 15b1adc..7a3ff70 100644
--- a/ui/events/x/events_x.cc
+++ b/ui/events/x/events_x.cc
@@ -9,6 +9,7 @@
 #include <X11/extensions/XInput.h>
 #include <X11/extensions/XInput2.h>
 #include <X11/Xlib.h>
+#include <X11/Xutil.h>
 
 #include "base/logging.h"
 #include "base/memory/singleton.h"
@@ -147,6 +148,11 @@
   return flags;
 }
 
+int GetEventFlagsFromXKeyEvent(XEvent* xevent) {
+  return GetEventFlagsFromXState(xevent->xkey.state) |
+         (IsKeypadKey(XLookupKeysym(&xevent->xkey, 0)) ? ui::EF_NUMPAD_KEY : 0);
+}
+
 // Get the event flag for the button in XButtonEvent. During a ButtonPress
 // event, |state| in XButtonEvent does not include the button that has just been
 // pressed. Instead |state| contains flags for the buttons (if any) that had
@@ -327,7 +333,7 @@
     case KeyPress:
     case KeyRelease: {
       XModifierStateWatcher::GetInstance()->UpdateStateFromEvent(native_event);
-      return GetEventFlagsFromXState(native_event->xkey.state);
+      return GetEventFlagsFromXKeyEvent(native_event);
     }
     case ButtonPress:
     case ButtonRelease: {
diff --git a/ui/events/x/events_x_unittest.cc b/ui/events/x/events_x_unittest.cc
index d4fc3af..368682c 100644
--- a/ui/events/x/events_x_unittest.cc
+++ b/ui/events/x/events_x_unittest.cc
@@ -6,6 +6,8 @@
 
 #include <X11/extensions/XInput2.h>
 #include <X11/Xlib.h>
+#include <X11/Xutil.h>
+#include <X11/XKBlib.h>
 
 // Generically-named #defines from Xlib that conflict with symbols in GTest.
 #undef Bool
@@ -40,6 +42,23 @@
   button_event->state = state;
 }
 
+// Initializes the passed-in Xlib event.
+void InitKeyEvent(Display* display,
+                  XEvent* event,
+                  bool is_press,
+                  int keycode,
+                  int state) {
+  memset(event, 0, sizeof(*event));
+
+  // We don't bother setting fields that the event code doesn't use, such as
+  // x_root/y_root and window/root/subwindow.
+  XKeyEvent* key_event = &(event->xkey);
+  key_event->display = display;
+  key_event->type = is_press ? KeyPress : KeyRelease;
+  key_event->keycode = keycode;
+  key_event->state = state;
+}
+
 }  // namespace
 
 TEST(EventsXTest, ButtonEvents) {
@@ -238,4 +257,117 @@
   EXPECT_FLOAT_EQ(GetTouchForce(scoped_xevent), 0.5f);
 }
 #endif
+
+TEST(EventsXTest, NumpadKeyEvents) {
+  XEvent event;
+  Display* display = gfx::GetXDisplay();
+
+  struct {
+    bool is_numpad_key;
+    int x_keysym;
+    ui::KeyboardCode ui_keycode;
+  } keys[] = {
+    // XK_KP_Space and XK_KP_Equal are the extrema in the conventional
+    // keysymdef.h numbering.
+    { true,  XK_KP_Space },
+    { true,  XK_KP_Equal },
+    // Other numpad keysyms. (This is actually exhaustive in the current list.)
+    { true,  XK_KP_Tab },
+    { true,  XK_KP_Enter },
+    { true,  XK_KP_F1 },
+    { true,  XK_KP_F2 },
+    { true,  XK_KP_F3 },
+    { true,  XK_KP_F4 },
+    { true,  XK_KP_Home },
+    { true,  XK_KP_Left },
+    { true,  XK_KP_Up },
+    { true,  XK_KP_Right },
+    { true,  XK_KP_Down },
+    { true,  XK_KP_Prior },
+    { true,  XK_KP_Page_Up },
+    { true,  XK_KP_Next },
+    { true,  XK_KP_Page_Down },
+    { true,  XK_KP_End },
+    { true,  XK_KP_Begin },
+    { true,  XK_KP_Insert },
+    { true,  XK_KP_Delete },
+    { true,  XK_KP_Multiply },
+    { true,  XK_KP_Add },
+    { true,  XK_KP_Separator },
+    { true,  XK_KP_Subtract },
+    { true,  XK_KP_Decimal },
+    { true,  XK_KP_Divide },
+    { true,  XK_KP_0 },
+    { true,  XK_KP_1 },
+    { true,  XK_KP_2 },
+    { true,  XK_KP_3 },
+    { true,  XK_KP_4 },
+    { true,  XK_KP_5 },
+    { true,  XK_KP_6 },
+    { true,  XK_KP_7 },
+    { true,  XK_KP_8 },
+    { true,  XK_KP_9 },
+    // Largest keysym preceding XK_KP_Space.
+    { false, XK_Num_Lock },
+    // Smallest keysym following XK_KP_Equal.
+    { false, XK_F1 },
+    // Non-numpad analogues of numpad keysyms.
+    { false, XK_Tab },
+    { false, XK_Return },
+    { false, XK_F1 },
+    { false, XK_F2 },
+    { false, XK_F3 },
+    { false, XK_F4 },
+    { false, XK_Home },
+    { false, XK_Left },
+    { false, XK_Up },
+    { false, XK_Right },
+    { false, XK_Down },
+    { false, XK_Prior },
+    { false, XK_Page_Up },
+    { false, XK_Next },
+    { false, XK_Page_Down },
+    { false, XK_End },
+    { false, XK_Insert },
+    { false, XK_Delete },
+    { false, XK_multiply },
+    { false, XK_plus },
+    { false, XK_minus },
+    { false, XK_period },
+    { false, XK_slash },
+    { false, XK_0 },
+    { false, XK_1 },
+    { false, XK_2 },
+    { false, XK_3 },
+    { false, XK_4 },
+    { false, XK_5 },
+    { false, XK_6 },
+    { false, XK_7 },
+    { false, XK_8 },
+    { false, XK_9 },
+    // Miscellaneous other keysyms.
+    { false, XK_BackSpace },
+    { false, XK_Scroll_Lock },
+    { false, XK_Multi_key },
+    { false, XK_Select },
+    { false, XK_Num_Lock },
+    { false, XK_Shift_L },
+    { false, XK_space },
+    { false, XK_A },
+  };
+
+  for (size_t k = 0; k < ARRAYSIZE_UNSAFE(keys); ++k) {
+    int x_keycode = XKeysymToKeycode(display, keys[k].x_keysym);
+    // Exclude keysyms for which the server has no corresponding keycode.
+    if (x_keycode) {
+      InitKeyEvent(display, &event, true, x_keycode, 0);
+      // int keysym = XLookupKeysym(&event.xkey, 0);
+      // if (keysym) {
+      ui::KeyEvent ui_key_event(&event, false);
+      EXPECT_EQ(keys[k].is_numpad_key ? ui::EF_NUMPAD_KEY : 0,
+                ui_key_event.flags() & ui::EF_NUMPAD_KEY);
+    }
+  }
+}
+
 }  // namespace ui
diff --git a/ui/file_manager/DEPS b/ui/file_manager/DEPS
new file mode 100644
index 0000000..a99be7d
--- /dev/null
+++ b/ui/file_manager/DEPS
@@ -0,0 +1,6 @@
+include_rules = [
+  "+grit/file_manager_resources.h",
+  "+grit/file_manager_resources_map.h",
+  "+ui/base",
+  "+ui/webui",
+]
diff --git a/ui/file_manager/OWNERS b/ui/file_manager/OWNERS
new file mode 100644
index 0000000..bca0cd9
--- /dev/null
+++ b/ui/file_manager/OWNERS
@@ -0,0 +1,3 @@
+hirono@chromium.org
+mtomasz@chromium.org
+yoshiki@chromium.org
diff --git a/ui/file_manager/file_manager.gyp b/ui/file_manager/file_manager.gyp
new file mode 100644
index 0000000..ec12f68
--- /dev/null
+++ b/ui/file_manager/file_manager.gyp
@@ -0,0 +1,52 @@
+# 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.
+
+{
+  'variables': {
+    'chromium_code': 1,
+    'grit_out_dir': '<(SHARED_INTERMEDIATE_DIR)/ui/file_manager',
+  },
+  'targets': [
+    {
+      'target_name': 'file_manager_resources',
+      'type': 'none',
+      'actions': [
+        {
+          'action_name': 'file_manager_resources',
+          'variables': {
+            'grit_grd_file': 'file_manager_resources.grd',
+          },
+          'includes': [ '../../build/grit_action.gypi' ],
+        },
+      ],
+      'includes': [ '../../build/grit_target.gypi' ],
+      'copies': [
+        {
+          'destination': '<(PRODUCT_DIR)',
+          'files': [
+            '<(SHARED_INTERMEDIATE_DIR)/ui/file_manager/file_manager_resources.pak',
+          ],
+        },
+      ],
+    },
+    {
+      'target_name': 'file_manager',
+      'type': '<(component)',
+      'dependencies': [
+        '../../base/base.gyp:base',
+        'file_manager_resources',
+      ],
+      'defines': [
+        'FILE_MANAGER_IMPLEMENTATION',
+      ],
+      'sources': [
+        'file_manager_export.h',
+        'file_manager_resource_util.cc',
+        'file_manager_resource_util.h',
+        '<(grit_out_dir)/grit/file_manager_resources_map.cc',
+        '<(grit_out_dir)/grit/file_manager_resources_map.h',
+      ]
+    },
+  ],
+}
diff --git a/ui/file_manager/file_manager_export.h b/ui/file_manager/file_manager_export.h
new file mode 100644
index 0000000..a61bf83
--- /dev/null
+++ b/ui/file_manager/file_manager_export.h
@@ -0,0 +1,32 @@
+// 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.
+
+#ifndef UI_FILE_MANAGER_FILE_MANAGER_EXPORT_H_
+#define UI_FILE_MANAGER_FILE_MANAGER_EXPORT_H_
+
+// Defines FILE_MANAGER_EXPORT so that functionality implemented by the
+// FILE_MANAGER module can be exported to consumers.
+
+#if defined(COMPONENT_BUILD)
+#if defined(WIN32)
+
+#if defined(FILE_MANAGER_IMPLEMENTATION)
+#define FILE_MANAGER_EXPORT __declspec(dllexport)
+#else
+#define FILE_MANAGER_EXPORT __declspec(dllimport)
+#endif  // defined(FILE_MANAGER_IMPLEMENTATION)
+
+#else  // defined(WIN32)
+#if defined(FILE_MANAGER_IMPLEMENTATION)
+#define FILE_MANAGER_EXPORT __attribute__((visibility("default")))
+#else
+#define FILE_MANAGER_EXPORT
+#endif
+#endif
+
+#else  // defined(COMPONENT_BUILD)
+#define FILE_MANAGER_EXPORT
+#endif
+
+#endif  // UI_FILE_MANAGER_FILE_MANAGER_EXPORT_H_
diff --git a/ui/file_manager/file_manager_resource_util.cc b/ui/file_manager/file_manager_resource_util.cc
new file mode 100644
index 0000000..5e89720
--- /dev/null
+++ b/ui/file_manager/file_manager_resource_util.cc
@@ -0,0 +1,18 @@
+// 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.
+
+#include "ui/file_manager/file_manager_resource_util.h"
+
+#include "grit/file_manager_resources_map.h"
+#include "ui/base/resource/resource_bundle.h"
+
+namespace file_manager {
+
+const GritResourceMap* GetFileManagerResources(size_t* size) {
+  DCHECK(size);
+  *size = kFileManagerResourcesSize;
+  return kFileManagerResources;
+}
+
+}  // namespace keyboard
diff --git a/ui/file_manager/file_manager_resource_util.h b/ui/file_manager/file_manager_resource_util.h
new file mode 100644
index 0000000..826eb99
--- /dev/null
+++ b/ui/file_manager/file_manager_resource_util.h
@@ -0,0 +1,23 @@
+// 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.
+
+#ifndef UI_FILE_MANAGER_FILE_MANAGER_RESOURCE_UTIL_H_
+#define UI_FILE_MANAGER_FILE_MANAGER_RESOURCE_UTIL_H_
+
+#include <cstddef>
+
+#include "ui/file_manager/file_manager_export.h"
+
+struct GritResourceMap;
+
+namespace file_manager {
+
+// Get the list of resources. |size| is populated with the number of resources
+// in the returned array.
+FILE_MANAGER_EXPORT const GritResourceMap* GetFileManagerResources(
+    size_t* size);
+
+}  // namespace file_manager
+
+#endif  // UI_FILE_MANAGER_FILE_MANAGER_RESOURCE_UTIL_H_
diff --git a/ui/file_manager/file_manager_resources.grd b/ui/file_manager/file_manager_resources.grd
new file mode 100644
index 0000000..3473d92
--- /dev/null
+++ b/ui/file_manager/file_manager_resources.grd
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grit latest_public_release="0" current_release="1">
+  <outputs>
+    <output filename="grit/file_manager_resources.h" type="rc_header">
+      <emit emit_type='prepend'></emit>
+    </output>
+    <output filename="grit/file_manager_resources_map.cc" type="resource_file_map_source" />
+    <output filename="grit/file_manager_resources_map.h" type="resource_map_header" />
+    <output filename="file_manager_resources.pak" type="data_package" />
+    <output filename="file_manager_resources.rc" type="rc_all" />
+  </outputs>
+  <release seq="1">
+    <includes>
+      <!-- VideoPlayer.app pages and scripts. -->
+      <include name="IDR_VIDEO_PLAYER_MANIFEST" file="video_player/manifest.json" type="BINDATA" />
+      <include name="IDR_VIDEO_PLAYER" file="video_player/video_player.html" allowexternalscript="true" flattenhtml="true" type="BINDATA" />
+      <include name="IDR_VIDEO_PLAYER_JS" file="video_player/js/video_player_scripts.js" flattenhtml="true" type="BINDATA" />
+      <include name="IDR_VIDEO_PLAYER_BKGND_JS" file="video_player/js/background.js" flattenhtml="true" type="BINDATA" />
+      <include name="IDR_VIDEO_PLAYER_TEST_UTIL_JS" file="video_player/js/test_util.js" flattenhtml="false" type="BINDATA" />
+      <include name="IDR_VIDEO_PLAYER_ERROR_UTIL_JS" file="video_player/js/error_util.js" flattenhtml="false" type="BINDATA" />
+      <include name="IDR_VIDEO_PLAYER_ICON_16" file="video_player/images/100/icon.png" type="BINDATA" />
+      <include name="IDR_VIDEO_PLAYER_ICON_32" file="video_player/images/200/icon.png" type="BINDATA" />
+
+      <!-- Gallery.app pages and scripts. -->
+      <include name="IDR_GALLERY_MANIFEST" file="gallery/manifest.json" type="BINDATA" />
+      <include name="IDR_GALLERY" file="gallery/gallery.html" allowexternalscript="true" flattenhtml="true" type="BINDATA" />
+      <include name="IDR_GALLERY_JS" file="gallery/js/gallery_scripts.js" flattenhtml="true" type="BINDATA" />
+      <include name="IDR_GALLERY_BKGND_JS" file="gallery/js/background.js" flattenhtml="true" type="BINDATA" />
+      <include name="IDR_GALLERY_TEST_UTIL_JS" file="gallery/js/test_util.js" flattenhtml="false" type="BINDATA" />
+      <include name="IDR_GALLERY_ERROR_UTIL_JS" file="gallery/js/error_util.js" flattenhtml="false" type="BINDATA" />
+      <include name="IDR_GALLERY_ICON_16" file="gallery/images/100/icon.png" type="BINDATA" />
+      <include name="IDR_GALLERY_ICON_32" file="gallery/images/200/icon.png" type="BINDATA" />
+
+      <!-- Image loader extension manifest and scripts. -->
+      <if expr="image_loader_extension">
+        <include name="IDR_IMAGE_LOADER_MANIFEST" file="image_loader/manifest.json" type="BINDATA" />
+        <include name="IDR_IMAGE_LOADER_IMAGE_LOADER_JS" file="image_loader/image_loader.js" type="BINDATA" />
+        <include name="IDR_IMAGE_LOADER_CACHE_JS" file="image_loader/cache.js" type="BINDATA" />
+        <include name="IDR_IMAGE_LOADER_WORKER_JS" file="image_loader/worker.js" type="BINDATA" />
+        <include name="IDR_IMAGE_LOADER_REQUEST_JS" file="image_loader/request.js" type="BINDATA" />
+        <include name="IDR_IMAGE_LOADER_BACKGROUND_JS" file="image_loader/background.js" type="BINDATA" />
+        <include name="IDR_IMAGE_LOADER_CLIENT_JS" file="image_loader/image_loader_client.js" type="BINDATA" />
+      </if>
+    </includes>
+  </release>
+</grit>
diff --git a/ui/file_manager/gallery/css/gallery.css b/ui/file_manager/gallery/css/gallery.css
new file mode 100644
index 0000000..ae32e96
--- /dev/null
+++ b/ui/file_manager/gallery/css/gallery.css
@@ -0,0 +1,1381 @@
+/* Copyright (c) 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. */
+
+body {
+  -webkit-user-select: none;
+  font-family: Open Sans, Droid Sans Fallback, sans-serif;
+  font-size: 84%;
+  margin: 0;
+}
+
+.gallery,
+.gallery .content {
+  bottom: 0;
+  left: 0;
+  overflow: hidden;
+  position: absolute;
+  right: 0;
+  top: 0;
+}
+
+/* Common background for both mosaic and slide mode. */
+.gallery .content {
+  background-color: black;
+}
+
+/* Close button */
+
+/* We actually want (left,top) to be (0,0) but for some weird reason
+   this triggers :hover style on page reload which is ugly. */
+.gallery > .back-button {
+  cursor: pointer;
+  left: 1px;
+  position: absolute;
+  top: 1px;
+  z-index: 200;
+}
+
+/* The close icon is in a nested div so that its opacity can be manipulated
+   independently from its parent (which can be dimmed when the crop frame
+   overlaps it) */
+.gallery > .back-button div {
+  background-image: -webkit-image-set(
+    url('../images/100/back_to_files.png') 1x,
+    url('../images/200/back_to_files.png') 2x);
+  background-position: center center;
+  background-repeat: no-repeat;
+  height: 40px;
+  opacity: 0;
+  width: 64px;
+}
+
+.gallery[tools] > .back-button div {
+  opacity: 0.5;
+}
+
+.gallery[tools] > .back-button div:hover {
+  opacity: 1;
+}
+
+/* Image container and canvas elements */
+
+.gallery .image-container {
+  cursor: none;   /* Only visible when the toolbar is active */
+  height: 100%;
+  position: absolute;
+  width: 100%;
+}
+
+.gallery[tools] .image-container[cursor='default'] {
+  cursor: default;
+}
+
+.gallery[tools] .image-container[cursor='move'] {
+  cursor: -webkit-image-set(
+    url('../images/100/cursor_move.png') 1x,
+    url('../images/200/cursor_move.png') 2x) 15 15, auto;
+}
+
+.gallery[tools] .image-container[cursor='crop'] {
+  cursor: -webkit-image-set(
+    url('../images/100/cursor_crop.png') 1x,
+    url('../images/200/cursor_crop.png') 2x) 15 15, auto;
+}
+
+.gallery[tools] .image-container[cursor='n-resize'],
+.gallery[tools] .image-container[cursor='s-resize'] {
+  cursor: -webkit-image-set(
+    url('../images/100/cursor_updown.png') 1x,
+    url('../images/200/cursor_updown.png') 2x) 15 15, auto;
+}
+
+.gallery[tools] .image-container[cursor='e-resize'],
+.gallery[tools] .image-container[cursor='w-resize'] {
+  cursor: -webkit-image-set(
+    url('../images/100/cursor_leftright.png') 1x,
+    url('../images/200/cursor_leftright.png') 2x) 15 15, auto;
+}
+
+.gallery[tools] .image-container[cursor='nw-resize'],
+.gallery[tools] .image-container[cursor='se-resize'] {
+  cursor: -webkit-image-set(
+    url('../images/100/cursor_nwse.png') 1x,
+    url('../images/200/cursor_nwse.png') 2x) 15 15, auto;
+}
+
+.gallery[tools] .image-container[cursor='ne-resize'],
+.gallery[tools] .image-container[cursor='sw-resize'] {
+  cursor: -webkit-image-set(
+    url('../images/100/cursor_swne.png') 1x,
+    url('../images/200/cursor_swne.png') 2x) 15 15, auto;
+}
+
+.gallery .image-container > .image {
+  pointer-events: none;
+  position: absolute;
+  /* Duration and timing function are set in Javascript. */
+  transition-property: -webkit-transform, opacity;
+}
+
+.gallery .image-container > .image[fade] {
+  opacity: 0;
+}
+
+/* Full resolution image is invisible unless printing. */
+.gallery .image-container > canvas.fullres {
+  display: none;
+}
+
+@media print {
+  /* Do not print anything but the image content. */
+  .gallery > :not(.content) {
+    display: none !important;
+  }
+
+  /* Center the printed image. */
+  .gallery .image-container {
+    -webkit-box-align: center;
+    -webkit-box-orient: horizontal;
+    -webkit-box-pack: center;
+    display: -webkit-box;
+  }
+
+  /* Do not print the screen resolution image. */
+  .gallery .image-container > canvas.image {
+    display: none !important;
+  }
+
+  /* Print the full resolution image instead. */
+  .gallery .image-container > canvas.fullres {
+    display: block !important;
+    max-height: 100%;
+    max-width: 100%;
+  }
+
+  /* Print video at the center of the page */
+  .gallery .image-container > video.image {
+    position: auto !important;
+  }
+}
+
+/* Toolbar */
+
+.gallery > .header,
+.gallery > .toolbar {
+  -webkit-box-align: stretch;
+  -webkit-box-orient: horizontal;
+  -webkit-box-pack: start;
+  background-color: rgba(30, 30, 30, 0.8);
+  display: -webkit-box;
+  left: 0;
+  opacity: 0;
+  padding: 0 10px;
+  pointer-events: none;
+  position: absolute;
+  right: 0;
+  transition: opacity 300ms ease;
+}
+
+.gallery > .header {
+  -webkit-box-align: center;
+  -webkit-box-pack: end;
+  border-bottom: 1px solid rgba(50, 50, 50, 0.8);
+  display: -webkit-box;
+  height: 45px;
+  top: 0;
+}
+
+.gallery > .toolbar {
+  border-top: 1px solid rgba(50, 50, 50, 0.8);
+  bottom: 0;
+  height: 55px;
+  min-width: 800px;
+}
+
+.gallery[tools]:not([slideshow]) > .header,
+.gallery[tools]:not([slideshow]) > .toolbar {
+  opacity: 1;
+  pointer-events: auto;
+}
+
+/* Hide immediately when entering the slideshow. */
+.gallery[tools][slideshow] > .toolbar {
+  transition-duration: 0;
+}
+
+.gallery[tools][locked] > .toolbar {
+  pointer-events: none;
+}
+
+.gallery .arrow-box {
+  -webkit-box-align: center;
+  -webkit-box-orient: horizontal;
+  -webkit-box-pack: center;
+  display: -webkit-box;
+  height: 100%;
+  pointer-events: none;
+  position: absolute;
+  width: 100%;
+  z-index: 100;
+}
+
+.gallery .arrow-box .arrow {
+  opacity: 0;
+  pointer-events: none;
+}
+
+.gallery .arrow-box .arrow-spacer {
+  -webkit-box-flex: 1;
+  pointer-events: none;
+}
+
+.gallery[tools] .arrow-box[active] .arrow {
+  cursor: pointer;
+  opacity: 1;
+  pointer-events: auto;
+}
+
+/* The arrow icons are in nested divs so that their opacity can be manipulated
+ * independently from their parent (which can be dimmed when the crop frame
+ * overlaps it) */
+.gallery .arrow div {
+  background-position: center center;
+  background-repeat: no-repeat;
+  height: 193px;
+  opacity: 0;
+  width: 105px;
+}
+
+.gallery[tools] .arrow-box[active] .arrow div {
+  opacity: 0.25;
+}
+
+.gallery[tools] .arrow-box[active] .arrow div:hover {
+  opacity: 1;
+}
+
+.gallery .arrow.left div {
+  background-image: -webkit-image-set(
+    url('../images/100/arrow_left.png') 1x,
+    url('../images/200/arrow_left.png') 2x);
+}
+
+.gallery .arrow.right div {
+  background-image: -webkit-image-set(
+    url('../images/100/arrow_right.png') 1x,
+    url('../images/200/arrow_right.png') 2x);
+}
+
+/* Special behavior on mouse drag.
+  Redundant .gallery attributes included to make the rules more specific */
+
+/* Everything but the image container should become mouse-transparent */
+.gallery[tools][editing][mousedrag] * {
+  pointer-events: none;
+}
+
+.gallery[tools][editing][mousedrag] .image-container {
+  pointer-events: auto;
+}
+
+/* The editor marks elements with 'dimmed' attribute to get them out of the way
+   of the crop frame */
+.gallery[tools][editing] [dimmed],
+.gallery[tools][editing] [dimmed] * {
+  pointer-events: none;
+}
+
+.gallery[tools][editing] [dimmed] {
+  opacity: 0.2;
+}
+
+/* Filename */
+
+.gallery .filename-spacer {
+  position: relative;
+  width: 270px;
+}
+
+.gallery .filename-spacer > * {
+  background-color: transparent;
+  overflow: hidden;
+  position: absolute;
+  transition: visibility 0 linear 180ms, all 180ms linear;
+  width: 260px;
+}
+
+.gallery .filename-spacer * {
+  color: white;
+}
+
+.gallery .filename-spacer .namebox {
+  height: 22px;
+  top: 15px;
+}
+
+.gallery[editing] .filename-spacer .namebox {
+  height: 21px;
+  top: 5px;
+}
+
+
+.gallery .filename-spacer .namebox {
+  background-color: transparent;
+  border: none;
+  box-sizing: border-box;
+  cursor: pointer;
+  display: block;
+  font-size: 120%;
+  outline: none;
+  overflow: hidden;
+  padding: 0 3px;
+  position: absolute;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+
+.gallery .filename-spacer .namebox[disabled] {
+  -webkit-user-select: none;
+  cursor: default;
+}
+
+.gallery .filename-spacer .namebox:not([disabled]):not(:focus):hover {
+  background-color: rgba(48, 48, 48, 1.0);
+}
+
+.gallery .filename-spacer .namebox:focus {
+  background-color: white;
+  color: black;
+  cursor: text;
+}
+
+.gallery .filename-spacer .options {
+  -webkit-box-align: center;
+  -webkit-box-orient: horizontal;
+  -webkit-box-pack: start;
+  display: -webkit-box;
+  opacity: 0;
+  top: 50px;
+  visibility: hidden;
+}
+
+.gallery[editing] .filename-spacer .options {
+  opacity: 1;
+  top: 28px;
+  visibility: visible;
+}
+
+.gallery .filename-spacer .saved,
+.gallery .filename-spacer .overwrite-original {
+  cursor: inherit;
+  font-size: 90%;
+  margin-left: 3px;
+  margin-right: 18px;
+  opacity: 0;
+  pointer-events: none;
+  transition: all linear 120ms;
+}
+
+.gallery[editing] .filename-spacer .saved {
+  color: white;
+  opacity: 0.5;
+}
+
+.gallery[editing] .filename-spacer .overwrite-original,
+.gallery[editing] .filename-spacer .overwrite-original > * {
+  cursor: pointer;
+  opacity: 1;
+  pointer-events: auto;
+}
+
+.gallery[editing] .options[saved] .overwrite-original {
+  opacity: 0.5;
+}
+
+.gallery[editing] .options[saved] .overwrite-original,
+.gallery[editing] .options[saved] .overwrite-original > * {
+  cursor: default;
+  pointer-events: none;
+}
+
+.gallery .filename-spacer .overwrite-original input {
+  margin-bottom: -2px;
+  margin-right: 6px;
+}
+
+.gallery .filename-spacer .saved[highlighted] {
+  -webkit-transform: scaleX(1.1) scaleY(1.1) rotate(0);
+  opacity: 1;
+}
+
+/* Bubble */
+.gallery .toolbar .bubble {
+  bottom: 65px;
+  font-size: 85%;
+  left: 50px;
+  position: absolute;
+  width: 220px;
+}
+
+.gallery:not([editing]) .toolbar .bubble {
+  display: none;
+}
+
+/* Toolbar buttons */
+
+.gallery .button-spacer {
+  -webkit-box-flex: 1;
+  display: -webkit-box;
+}
+
+/* Thumbnails */
+
+.gallery .ribbon-spacer {
+  -webkit-box-align: center;
+  -webkit-box-orient: horizontal;
+  -webkit-box-pack: center;
+  display: -webkit-box;
+  height: 100%;
+  left: 280px;
+  position: absolute;
+  right: 280px;
+}
+
+.gallery .toolbar .ribbon {
+  -webkit-box-flex: 0;
+  -webkit-box-orient: horizontal;
+  -webkit-box-pack: start;
+  display: -webkit-box;
+  height: 100%;
+  overflow: hidden;
+  transition: opacity 180ms linear, visibility 0 linear;
+  z-index: 0;
+}
+
+.gallery[editing] .toolbar .ribbon {
+  opacity: 0;
+  transition-delay: 0, 180ms;
+  visibility: hidden;
+}
+
+.gallery .ribbon-image {
+  -webkit-box-align: center;
+  -webkit-box-orient: horizontal;
+  -webkit-box-pack: center;
+  border: 2px solid rgba(255, 255, 255, 0);  /* transparent white */
+  cursor: pointer;
+  display: -webkit-box;
+  height: 47px;
+  margin: 2px;
+  overflow: hidden;
+  transition: all 180ms linear;
+  width: 47px;
+}
+
+.ribbon-image[vanishing='smooth'] {
+  border-left-width: 0;
+  border-right-width: 0;
+  margin-left: 0;
+  margin-right: 0;
+  width: 0;
+}
+
+.gallery .ribbon-image[selected] {
+  border: 2px solid rgba(255, 233, 168, 1);
+}
+
+.gallery .toolbar .ribbon.fade-left {
+  -webkit-mask-image: linear-gradient(to right, rgba(0, 0, 0, 0) 0,
+                                                rgba(0, 0, 0, 1) 40px);
+}
+
+.gallery .toolbar .ribbon.fade-right {
+  -webkit-mask-image: linear-gradient(to left, rgba(0, 0, 0, 0) 0,
+                                               rgba(0, 0, 0, 1) 40px);
+}
+
+.gallery .toolbar .ribbon.fade-left.fade-right {
+  -webkit-mask-image: linear-gradient(to right, rgba(0, 0, 0, 0) 0,
+                                                rgba(0, 0, 0, 1) 40px,
+                                                rgba(0, 0, 0, 1) 230px,
+                                                rgba(0, 0, 0, 0) 100%);
+}
+
+.gallery .image-wrapper {
+  background-size: 45px 45px;
+  border: 1px solid rgba(0, 0, 0, 0);  /* transparent black */
+  height: 45px;
+  overflow: hidden;
+  position: relative;
+  width: 45px;
+}
+
+.gallery .image-wrapper > img {
+  position: absolute;
+}
+
+.gallery .image-wrapper > img:not(.cached) {
+  -webkit-animation: fadeIn 500ms ease-in;
+}
+
+/* Editor buttons */
+
+.gallery .edit-bar-spacer {
+  -webkit-box-align: center;
+  -webkit-box-orient: horizontal;
+  -webkit-box-pack: center;
+  display: -webkit-box;
+  height: 100%;
+  left: 280px;
+  opacity: 0;
+  position: absolute;
+  right: 280px;
+  transition: opacity 180ms linear, visibility 0 linear 180ms;
+  visibility: hidden;
+}
+
+.gallery .toolbar .edit-main {
+  -webkit-box-orient: horizontal;
+  -webkit-box-pack: center;
+  color: white;
+  display: -webkit-box;
+  height: 55px;
+  overflow: visible;
+}
+
+.gallery[editing] .edit-bar-spacer {
+  opacity: 1.0;
+  pointer-events: auto;
+  transition-delay: 100ms, 100ms;
+  visibility: visible;
+}
+
+.gallery .header button,
+.gallery .toolbar button,
+.gallery .header button[disabled],
+.gallery .toolbar button[disabled] {
+  -webkit-box-align: center;
+  -webkit-box-flex: 0;
+  -webkit-box-orient: horizontal;
+  -webkit-box-pack: end;
+  background-color: rgba(0, 0, 0, 0);
+  background-position: center;
+  background-repeat: no-repeat;
+  border: none;
+  box-shadow: none;
+  color: white;
+  cursor: pointer;
+  display: -webkit-box;
+  opacity: 0.99;  /* Workaround for http://crosbug.com/21065 */
+  padding: 1px;  /* Instead of a border. */
+  position: relative;
+  z-index: 10;
+}
+
+.gallery .header button,
+.gallery .toolbar button {
+  height: 40px;
+  margin: 6px 0;
+  min-width: 40px;  /* Reset. */
+  width: 40px;
+}
+
+/* By default, labels are hidden. */
+.gallery > .toolbar button span {
+  display: none;
+}
+
+/* Show labels if there is enough space. */
+@media (min-width: 1180px) {
+
+  .gallery .edit-main button,
+  .gallery .edit-main button[disabled] {
+    background-position: 5px center;
+    max-width: 60px;
+    min-width: 0;  /* Reset. */
+    padding: 0 10px 0 35px;
+    width: auto;
+  }
+
+  .gallery > .toolbar button span {
+    display: inline;
+  }
+
+}
+
+.gallery .header button:hover,
+.gallery .toolbar button:hover {
+  background-color: rgba(31, 31, 31, 1);
+  color: white;
+}
+
+.gallery .header button:active,
+.gallery .toolbar button:active,
+.gallery .header button[pressed],
+.gallery .toolbar button[pressed],
+.gallery .header button[pressed]:hover,
+.gallery .toolbar button[pressed]:hover {
+  background-color: rgba(240, 240, 240, 1);
+  color: black;
+}
+
+.gallery > .toolbar button.autofix {
+  background-image: -webkit-image-set(
+    url('../images/100/icon_autofix.png') 1x,
+    url('../images/200/icon_autofix.png') 2x);
+}
+
+.gallery > .toolbar button.autofix:active,
+.gallery > .toolbar button.autofix[pressed] {
+  background-image: -webkit-image-set(
+    url('../images/100/icon_autofix_selected.png') 1x,
+    url('../images/200/icon_autofix_selected.png') 2x);
+}
+
+.gallery > .toolbar button.crop {
+  background-image:  -webkit-image-set(
+    url('../images/100/icon_crop.png') 1x,
+    url('../images/200/icon_crop.png') 2x);
+}
+
+.gallery > .toolbar button.crop:active,
+.gallery > .toolbar button.crop[pressed] {
+  background-image:  -webkit-image-set(
+    url('../images/100/icon_crop_selected.png') 1x,
+    url('../images/200/icon_crop_selected.png') 2x);
+}
+
+.gallery > .toolbar button.exposure {
+  background-image: -webkit-image-set(
+    url('../images/100/icon_brightness.png') 1x,
+    url('../images/200/icon_brightness.png') 2x);
+}
+
+.gallery > .toolbar button.exposure:active,
+.gallery > .toolbar button.exposure[pressed] {
+  background-image: -webkit-image-set(
+    url('../images/100/icon_brightness_selected.png') 1x,
+    url('../images/200/icon_brightness_selected.png') 2x);
+}
+
+.gallery > .toolbar button.rotate_right {
+  background-image: -webkit-image-set(
+    url('../images/100/icon_rotate.png') 1x,
+    url('../images/200/icon_rotate.png') 2x);
+}
+
+.gallery > .toolbar button.rotate_right:active,
+.gallery > .toolbar button.rotate_right[pressed] {
+  background-image: -webkit-image-set(
+    url('../images/100/icon_rotate_selected.png') 1x,
+    url('../images/200/icon_rotate_selected.png') 2x);
+}
+
+.gallery > .toolbar button.rotate_left {
+  background-image: -webkit-image-set(
+    url('../images/100/icon_rotate_left.png') 1x,
+    url('../images/200/icon_rotate_left.png') 2x);
+}
+
+.gallery > .toolbar button.rotate_left:active,
+.gallery > .toolbar button.rotate_left[pressed] {
+  background-image: -webkit-image-set(
+    url('../images/100/icon_rotate_left_selected.png') 1x,
+    url('../images/200/icon_rotate_left_selected.png') 2x);
+}
+
+.gallery > .toolbar button.undo {
+  background-image: -webkit-image-set(
+    url('../images/100/icon_undo.png') 1x,
+    url('../images/200/icon_undo.png') 2x);
+}
+
+.gallery > .toolbar button.undo:active,
+.gallery > .toolbar button.undo[pressed] {
+  background-image: -webkit-image-set(
+    url('../images/100/icon_undo_selected.png') 1x,
+    url('../images/200/icon_undo_selected.png') 2x);
+}
+
+.gallery > .toolbar button.redo {
+  background-image: -webkit-image-set(
+    url('../images/100/icon_redo.png') 1x,
+    url('../images/200/icon_redo.png') 2x);
+  position: absolute;  /* Exclude from center-packing*/
+}
+
+.gallery > .toolbar button.redo:active,
+.gallery > .toolbar button.redo[pressed] {
+  background-image: -webkit-image-set(
+    url('../images/100/icon_redo_selected.png') 1x,
+    url('../images/200/icon_redo_selected.png') 2x);
+}
+
+.gallery > .toolbar button[disabled],
+.gallery[tools][locked] > .toolbar button {
+  opacity: 0.5;
+  pointer-events: none;
+}
+
+.gallery > .toolbar button[hidden] {
+  display: none;
+}
+
+.gallery[mode='slide'] > .toolbar > button.mode {
+  background-image: -webkit-image-set(
+    url('../images/100/icon_mosaic.png') 1x,
+    url('../images/200/icon_mosaic.png') 2x);
+}
+
+.gallery[mode='slide'] > .toolbar > button.mode:active {
+  background-image: -webkit-image-set(
+    url('../images/100/icon_mosaic_selected.png') 1x,
+    url('../images/200/icon_mosaic_selected.png') 2x);
+}
+
+.gallery[mode='mosaic'] > .toolbar > button.mode {
+  background-image: -webkit-image-set(
+    url('../images/100/icon_1up.png') 1x,
+    url('../images/200/icon_1up.png') 2x);
+}
+
+.gallery[mode='mosaic'] > .toolbar > button.mode:active {
+  background-image: -webkit-image-set(
+    url('../images/100/icon_1up_selected.png') 1x,
+    url('../images/200/icon_1up_selected.png') 2x);
+}
+
+.gallery > .toolbar > button.slideshow {
+  background-image: -webkit-image-set(
+    url('../images/100/icon_slideshow.png') 1x,
+    url('../images/200/icon_slideshow.png') 2x);
+}
+
+.gallery > .toolbar > button.slideshow:active,
+.gallery > .toolbar > button.slideshow[pressed] {
+    background-image: -webkit-image-set(
+        url('../images/100/icon_slideshow_selected.png') 1x,
+        url('../images/200/icon_slideshow_selected.png') 2x);
+}
+
+.gallery > .toolbar > button.delete {
+  background-image: -webkit-image-set(
+    url('../images/100/icon_delete.png') 1x,
+    url('../images/200/icon_delete.png') 2x);
+}
+
+.gallery > .toolbar > button.delete:active {
+  background-image: -webkit-image-set(
+    url('../images/100/icon_delete_selected.png') 1x,
+    url('../images/200/icon_delete_selected.png') 2x);
+}
+
+.gallery > .toolbar > button.edit {
+  background-image: -webkit-image-set(
+    url('../images/100/icon_edit.png') 1x,
+    url('../images/200/icon_edit.png') 2x);
+}
+
+.gallery > .toolbar > button.edit:active,
+.gallery > .toolbar > button.edit[pressed] {
+  background-image: -webkit-image-set(
+    url('../images/100/icon_edit_selected.png') 1x,
+    url('../images/200/icon_edit_selected.png') 2x);
+}
+
+.gallery > .toolbar > button.print {
+  background-image: -webkit-image-set(
+    url('../images/100/icon_print.png') 1x,
+    url('../images/200/icon_print.png') 2x);
+}
+
+.gallery > .toolbar > button.print:active,
+.gallery > .toolbar > button.print[pressed] {
+  background-image: -webkit-image-set(
+    url('../images/100/icon_print_selected.png') 1x,
+    url('../images/200/icon_print_selected.png') 2x);
+}
+
+.gallery > .toolbar > button.share {
+  background-image: -webkit-image-set(
+    url('../images/100/icon_share.png') 1x,
+    url('../images/200/icon_share.png') 2x);
+}
+
+.gallery > .toolbar > button.share:active,
+.gallery > .toolbar > button.share[pressed] {
+  background-image: -webkit-image-set(
+    url('../images/100/icon_share_selected.png') 1x,
+    url('../images/200/icon_share_selected.png') 2x);
+}
+
+.gallery > .toolbar > button.share[disabled] {
+  display: none;
+}
+
+/* Secondary toolbar (mode-specific tools) */
+
+.gallery .edit-modal {
+  -webkit-box-orient: horizontal;
+  -webkit-box-pack: center;
+  bottom: 80px;
+  display: -webkit-box;
+  height: 40px;
+  pointer-events: none;
+  position: absolute;
+  width: 100%;
+}
+
+.gallery .edit-modal-wrapper[hidden] {
+  display: none;
+}
+
+.gallery .edit-modal-wrapper {
+  -webkit-box-align: center;
+  -webkit-box-orient: horizontal;
+  -webkit-box-pack: center;
+  background-color: rgba(0, 0, 0, 0.75);
+  color: white;
+  display: -webkit-box;
+  padding-right: 5px;
+  pointer-events: auto;
+}
+
+.gallery .edit-modal .label {
+  -webkit-box-align: center;
+  -webkit-box-orient: horizontal;
+  background-position: 20px center;
+  background-repeat: no-repeat;
+  display: -webkit-box;
+  height: 20px;
+  padding-left: 50px;
+  padding-right: 10px;
+}
+
+.gallery .edit-modal .label.brightness {
+  background-image: -webkit-image-set(
+    url('../images/100/icon_brightness.png') 1x,
+    url('../images/200/icon_brightness.png') 2x);
+}
+
+.gallery .edit-modal .label.contrast {
+  background-image: -webkit-image-set(
+    url('../images/100/icon_contrast.png') 1x,
+    url('../images/200/icon_contrast.png') 2x);
+  height: 24px;
+  margin-left: 15px;
+}
+
+.gallery .edit-modal .range {
+  -webkit-appearance: none !important;
+  height: 3px;
+  margin-right: 10px;
+  margin-top: 1px;
+}
+
+.gallery .edit-modal .range::-webkit-slider-thumb {
+  -webkit-appearance: none;
+  background-image: -webkit-image-set(
+    url('../images/100/slider_thumb.png') 1x,
+    url('../images/200/slider_thumb.png') 2x);
+  height: 29px;
+  width: 16px;
+}
+
+/* Crop frame */
+
+.gallery .crop-overlay {
+  -webkit-box-orient: vertical;
+  display: -webkit-box;
+  pointer-events: none;
+  position: absolute;
+}
+
+.gallery .crop-overlay .shadow {
+  background-color: rgba(0, 0, 0, 0.65);
+}
+
+.gallery .crop-overlay .middle-box {
+  -webkit-box-flex: 1;
+  -webkit-box-orient: horizontal;
+  display: -webkit-box;
+}
+
+.gallery .crop-frame {
+  -webkit-box-flex: 1;
+  display: -webkit-box;
+  position: relative;
+}
+
+.gallery .crop-frame div {
+  background-color: rgba(255, 255, 255, 1);
+  box-shadow: 0 0 3px rgba(0, 0, 0, 0.75);
+  position: absolute;
+}
+
+.gallery .crop-frame .horizontal {
+  height: 1px;
+  left: 7px;
+  right: 7px;
+}
+
+.gallery .crop-frame .horizontal.top {
+  top: 0;
+}
+
+.gallery .crop-frame .horizontal.bottom {
+  bottom: 0;
+}
+
+.gallery .crop-frame .vertical {
+  bottom: 7px;
+  top: 7px;
+  width: 1px;
+}
+
+.gallery .crop-frame .vertical.left {
+  left: 0;
+}
+
+.gallery .crop-frame .vertical.right {
+  right: 0;
+}
+
+.gallery .crop-frame .corner {
+  border-radius: 6px;
+  height: 13px;
+  width: 13px;
+}
+
+.gallery .crop-frame .corner.left {
+  left: -6px;
+}
+
+.gallery .crop-frame .corner.right {
+  right: -6px;
+}
+
+.gallery .crop-frame .corner.top {
+  top: -6px;
+}
+
+.gallery .crop-frame .corner.bottom {
+  bottom: -6px;
+}
+
+/* Prompt/notification panel */
+
+.gallery .prompt-wrapper {
+  -webkit-box-orient: horizontal;
+  -webkit-box-pack: center;
+  display: -webkit-box;
+  height: 100%;
+  pointer-events: none;
+  position: absolute;
+  width: 100%;
+}
+
+.gallery .prompt-wrapper[pos=top] {
+  -webkit-box-align: start;
+}
+
+.gallery .prompt-wrapper[pos=center] {
+  -webkit-box-align: center;
+}
+
+.gallery .prompt-wrapper[pos=center] .back-button {
+  display: none;
+}
+
+.gallery .prompt-wrapper > div.dimmable {
+  opacity: 1;
+  transition: opacity 220ms ease;
+}
+
+.gallery .prompt {
+  -webkit-box-align: center;
+  -webkit-box-orient: horizontal;
+  background-color: rgba(0, 0, 0, 0.8);
+  color: white;
+  display: -webkit-box;
+  font-size: 120%;
+  height: 40px;
+  opacity: 0;
+  padding: 0 20px;
+  position: relative;
+  top: 5px;
+  transition: all 180ms ease;
+}
+
+.gallery .prompt[state='fadein'] {
+  opacity: 1;
+  top: 0;
+}
+
+.gallery .prompt[state='fadeout'] {
+  opacity: 0;
+  top: 0;
+}
+
+.gallery .prompt-wrapper[pos=top] .prompt {
+  padding-right: 10px;
+}
+
+.gallery .prompt .back-button {
+  background-image: -webkit-image-set(
+    url('../images/100/butterbar_close_button.png') 1x,
+    url('../images/200/butterbar_close_button.png') 2x);
+  background-position: center center;
+  background-repeat: no-repeat;
+  height: 16px;
+  margin-left: 16px;
+  opacity: 0.65;
+  pointer-events: auto;
+  width: 16px;
+}
+
+.gallery .prompt .back-button:hover {
+  background-color: rgba(81, 81, 81, 1);
+  opacity: 1.0;
+}
+
+.gallery .share-menu {
+  -webkit-box-align: stretch;
+  -webkit-box-orient: vertical;
+  -webkit-box-pack: start;
+  background-color: white;
+  border: 1px solid #7f7f7f;
+  border-radius: 1px;
+  bottom: 60px;
+  display: -webkit-box;
+  opacity: 1.0;
+  padding: 8px;
+  position: absolute;
+  right: 10px;
+  transition: opacity 500ms ease-in-out;
+}
+
+.gallery .share-menu .bubble-point {
+  background-image: -webkit-image-set(
+    url('../images/100/bubble_point.png') 1x,
+    url('../images/200/bubble_point.png') 2x);
+  background-position: center top;
+  background-repeat: no-repeat;
+  bottom: -8px;
+  height: 8px;
+  padding: 0;
+  position: absolute;
+  right: 20px;
+  width: 20px;
+}
+
+.gallery .share-menu[hidden] {
+  bottom: -100%;  /* Offscreen so that 'dimmed' attribute does not show it. */
+  opacity: 0;
+  pointer-events: none;
+}
+
+.gallery .share-menu > .item {
+  background-color: rgba(0, 0, 0, 0);
+  background-position: 5px center;
+  background-repeat: no-repeat;
+  cursor: pointer;
+  padding: 5px;
+  padding-left: 26px;
+}
+
+.gallery .share-menu > .item:hover {
+  background-color: rgba(240, 240, 240, 1);
+}
+
+.gallery .share-menu > div > img {
+  display: block;
+  margin-right: 5px;
+}
+
+/* Load spinner and error banner. */
+
+.gallery .spinner {
+  background-image: url(../images/100/common/spinner.svg);
+  background-size: 100%;
+  height: 16px;
+  left: 50%;
+  margin-left: -8px;
+  margin-top: -8px;
+  position: absolute;
+  top: 50%;
+  width: 16px;
+}
+
+.gallery:not([spinner]) .spinner {
+  display: none;
+}
+
+.gallery .error-banner {
+  -webkit-box-align: center;
+  -webkit-box-orient: horizontal;
+  -webkit-box-pack: center;
+  background-color: rgba(24, 24, 24, 1);
+  background-image: -webkit-image-set(
+    url('../images/100/media/error.png') 1x,
+    url('../images/100/media/2x/error.png') 2x);
+  background-position: 25px center;
+  background-repeat: no-repeat;
+  color: white;
+  display: -webkit-box;
+  height: 54px;
+  padding-left: 70px;
+  padding-right: 35px;
+}
+
+.gallery:not([error]) .error-banner {
+  display: none;
+}
+
+/* Video playback support. */
+
+.gallery video {
+  height: 100%;
+  position: absolute;
+  width: 100%;
+}
+
+.gallery .video-controls-spacer {
+  -webkit-box-align: center;
+  -webkit-box-orient: horizontal;
+  -webkit-box-pack: center;
+  bottom: 60px;  /* Just above the toolbar */
+  display: -webkit-box;
+  height: 30px;
+  left: 0;
+  opacity: 0;
+  pointer-events: none;
+  position: absolute;
+  right: 0;
+}
+
+.gallery[video] .video-controls-spacer {
+  /* Animate opacity on 'tools' attribute toggle. */
+  /* Change opacity immediately on 'video' attribute change. */
+  transition: opacity 280ms ease;
+}
+
+.gallery[video][tools] .video-controls-spacer {
+  opacity: 1;
+}
+
+.gallery .video-controls {
+  display: none;
+  max-width: 800px;
+}
+
+.gallery[video] .video-controls {
+  -webkit-box-flex: 1;
+  display: -webkit-box;
+}
+
+.gallery[video] > .toolbar .edit-main {
+  display: none;
+}
+
+/* Mosaic view. */
+.mosaic {
+  bottom: 55px;  /* Toolbar height. */
+  left: 0;
+  overflow-x: scroll;
+  overflow-y: hidden;
+  position: absolute;
+  right: 0;
+  top: 0;
+
+  /* transition-duration is set in Javascript. */
+  transition-property: -webkit-transform;
+  transition-timing-function: linear;
+}
+
+.mosaic::-webkit-scrollbar {
+  background: transparent;
+}
+
+.mosaic::-webkit-scrollbar-thumb {
+  background: rgb(31, 31, 31);
+}
+
+.gallery:not([mode='mosaic']) .mosaic::-webkit-scrollbar-thumb {
+  background: transparent;
+}
+
+.mosaic-tile {
+  position: absolute;
+  /* Tile's zoom factor is animated on hover. We apply the transform to
+  the entire tile so that the image outline is included into the animation. */
+  transition: -webkit-transform 150ms linear;
+}
+
+/* Mosaic tile's opacity is controlled by |visible| attribute which changes
+   separately from .gallery[mode] */
+.mosaic:not([visible]) .mosaic-tile .img-border {
+  opacity: 0;
+}
+
+/* Animate tile's opacity, except for the selected tile which should show/hide
+  instantly (this looks better when zooming to/from the slide mode). */
+.mosaic-tile:not([selected]) .img-border {
+  transition: opacity 350ms linear;
+}
+
+/* Must be in sync with mosaic_mode.js.
+  Mosaic.Layout.SPACING should be equal to
+    top + bottom + border-top-width + border-bottom-width AND
+    left + right + border-left-width + border-right-width */
+.mosaic-tile .img-border {
+  border: 1px solid black;  /* Space between the outline and the image. */
+  bottom: 4px;
+  left: 4px;
+  outline: 2px solid transparent;
+  overflow: hidden;
+  position: absolute;
+  right: 4px;
+  top: 4px;
+}
+
+/* Selected and hover state are only visible when zoom transition is over. */
+.mosaic[visible='normal'] .mosaic-tile[selected] .img-border {
+  outline-color: rgb(51, 153, 255);
+}
+
+.mosaic[visible='normal'].hover-visible .mosaic-tile:hover {
+  -webkit-transform: scale(1.05);
+  z-index: 50;
+}
+
+.mosaic[visible='normal'].hover-visible
+    .mosaic-tile:hover:not([selected]) .img-border {
+  outline-color: rgb(182, 212, 252);
+}
+
+.mosaic-tile .img-wrapper {
+  bottom: 0;
+  left: 0;
+  position: absolute;
+  right: 0;
+  top: 0;
+}
+
+.mosaic-tile .img-wrapper[generic-thumbnail],
+.mosaic-tile .img-wrapper.animated:not([generic-thumbnail])
+    canvas:not(.cached) {
+  -webkit-animation: fadeIn ease-in 1;
+  -webkit-animation-duration: 500ms;
+  -webkit-animation-fill-mode: forwards;
+}
+
+@-webkit-keyframes fadeIn {
+  from {
+    opacity: 0;
+  }
+  to {
+    opacity: 1;
+  }
+}
+
+/* In order to do mode animated transitions smoothly we keep both mosaic and
+  image-container but transparent. */
+.gallery:not([mode='mosaic']) .mosaic,
+.gallery:not([mode='slide']) .image-container {
+  pointer-events: none;
+}
+
+.gallery:not([mode='slide']) .ribbon,
+.gallery:not([mode='slide']) .arrow-box {
+  opacity: 0;
+  pointer-events: none;
+}
+
+/* Temporary. Remove this along with the delete confirmation dialog
+  when Undo delete is implemented. */
+.cr-dialog-shield {
+  background-color: black;
+}
+
+/* Slideshow controls */
+
+.slideshow-toolbar {
+  -webkit-box-align: center;
+  -webkit-box-orient: horizontal;
+  -webkit-box-pack: center;
+  bottom: 0;
+  display: none;
+  left: 0;
+  padding-bottom: 6px;
+  pointer-events: none;
+  position: absolute;
+  right: 0;
+}
+
+.gallery[tools][slideshow] .slideshow-toolbar {
+  display: -webkit-box;
+}
+
+.slideshow-toolbar > div {
+  background-position: center;
+  background-repeat: no-repeat;
+  height: 68px;
+  opacity: 0.5;
+  pointer-events: auto;
+  width: 68px;
+}
+
+.slideshow-toolbar > div:hover {
+  opacity: 1;
+}
+
+.slideshow-toolbar > .slideshow-play {
+  background-image: -webkit-image-set(
+    url('../images/100/slideshow-play.png') 1x,
+    url('../images/200/slideshow-play.png') 2x);
+  margin-right: -2px;
+}
+
+.gallery[slideshow='playing'] .slideshow-toolbar > .slideshow-play {
+  background-image: -webkit-image-set(
+    url('../images/100/slideshow-pause.png') 1x,
+    url('../images/200/slideshow-pause.png') 2x);
+}
+
+.slideshow-toolbar > .slideshow-end {
+  background-image: -webkit-image-set(
+    url('../images/100/slideshow-end.png') 1x,
+    url('../images/200/slideshow-end.png') 2x);
+  margin-left: -2px;
+}
+
+.gallery > .header > button {
+  -webkit-margin-start: 10px;
+  cursor: default;
+  height: 32px;
+  min-width: 32px;
+  width: 32px;
+}
+
+.gallery > .header > .minimize-button {
+  background: -webkit-image-set(
+    url('chrome://resources/images/apps/topbar_button_minimize.png') 1x,
+    url('chrome://resources/images/2x/apps/topbar_button_minimize.png') 2x)
+    center;
+}
+
+.gallery > .header > .maximize-button {
+  background: -webkit-image-set(
+    url('chrome://resources/images/apps/topbar_button_maximize.png') 1x,
+    url('chrome://resources/images/2x/apps/topbar_button_maximize.png') 2x)
+    center;
+}
+
+.gallery > .header > .close-button {
+  background: -webkit-image-set(
+    url('chrome://resources/images/apps/topbar_button_close.png') 1x,
+    url('chrome://resources/images/2x/apps/topbar_button_close.png') 2x)
+    center;
+}
diff --git a/mojo/public/tools/bindings/pylib/generate/__init__.py b/ui/file_manager/gallery/gallery.html
similarity index 100%
copy from mojo/public/tools/bindings/pylib/generate/__init__.py
copy to ui/file_manager/gallery/gallery.html
diff --git a/ui/file_manager/gallery/images/100/arrow_left.png b/ui/file_manager/gallery/images/100/arrow_left.png
new file mode 100644
index 0000000..85e687a
--- /dev/null
+++ b/ui/file_manager/gallery/images/100/arrow_left.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/100/arrow_right.png b/ui/file_manager/gallery/images/100/arrow_right.png
new file mode 100644
index 0000000..0361556
--- /dev/null
+++ b/ui/file_manager/gallery/images/100/arrow_right.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/100/back_to_files.png b/ui/file_manager/gallery/images/100/back_to_files.png
new file mode 100644
index 0000000..96e420a
--- /dev/null
+++ b/ui/file_manager/gallery/images/100/back_to_files.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/100/bubble_point.png b/ui/file_manager/gallery/images/100/bubble_point.png
new file mode 100644
index 0000000..a4a44e0
--- /dev/null
+++ b/ui/file_manager/gallery/images/100/bubble_point.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/100/butterbar_close_button.png b/ui/file_manager/gallery/images/100/butterbar_close_button.png
new file mode 100644
index 0000000..3c65c23
--- /dev/null
+++ b/ui/file_manager/gallery/images/100/butterbar_close_button.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/100/cursor_crop.png b/ui/file_manager/gallery/images/100/cursor_crop.png
new file mode 100644
index 0000000..6084188
--- /dev/null
+++ b/ui/file_manager/gallery/images/100/cursor_crop.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/100/cursor_leftright.png b/ui/file_manager/gallery/images/100/cursor_leftright.png
new file mode 100644
index 0000000..30eeb03
--- /dev/null
+++ b/ui/file_manager/gallery/images/100/cursor_leftright.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/100/cursor_move.png b/ui/file_manager/gallery/images/100/cursor_move.png
new file mode 100644
index 0000000..c5026d1
--- /dev/null
+++ b/ui/file_manager/gallery/images/100/cursor_move.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/100/cursor_nwse.png b/ui/file_manager/gallery/images/100/cursor_nwse.png
new file mode 100644
index 0000000..87fb564
--- /dev/null
+++ b/ui/file_manager/gallery/images/100/cursor_nwse.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/100/cursor_swne.png b/ui/file_manager/gallery/images/100/cursor_swne.png
new file mode 100644
index 0000000..5e34475
--- /dev/null
+++ b/ui/file_manager/gallery/images/100/cursor_swne.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/100/cursor_updown.png b/ui/file_manager/gallery/images/100/cursor_updown.png
new file mode 100644
index 0000000..f3a4224
--- /dev/null
+++ b/ui/file_manager/gallery/images/100/cursor_updown.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/100/icon.png b/ui/file_manager/gallery/images/100/icon.png
new file mode 100644
index 0000000..9ec2dbd
--- /dev/null
+++ b/ui/file_manager/gallery/images/100/icon.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/100/icon_1up.png b/ui/file_manager/gallery/images/100/icon_1up.png
new file mode 100644
index 0000000..546e87a
--- /dev/null
+++ b/ui/file_manager/gallery/images/100/icon_1up.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/100/icon_1up_selected.png b/ui/file_manager/gallery/images/100/icon_1up_selected.png
new file mode 100644
index 0000000..a3043a8
--- /dev/null
+++ b/ui/file_manager/gallery/images/100/icon_1up_selected.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/100/icon_autofix.png b/ui/file_manager/gallery/images/100/icon_autofix.png
new file mode 100644
index 0000000..0fb5b82
--- /dev/null
+++ b/ui/file_manager/gallery/images/100/icon_autofix.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/100/icon_autofix_selected.png b/ui/file_manager/gallery/images/100/icon_autofix_selected.png
new file mode 100644
index 0000000..fb5972d
--- /dev/null
+++ b/ui/file_manager/gallery/images/100/icon_autofix_selected.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/100/icon_brightness.png b/ui/file_manager/gallery/images/100/icon_brightness.png
new file mode 100644
index 0000000..ec9c114
--- /dev/null
+++ b/ui/file_manager/gallery/images/100/icon_brightness.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/100/icon_brightness_selected.png b/ui/file_manager/gallery/images/100/icon_brightness_selected.png
new file mode 100644
index 0000000..88ee722
--- /dev/null
+++ b/ui/file_manager/gallery/images/100/icon_brightness_selected.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/100/icon_contrast.png b/ui/file_manager/gallery/images/100/icon_contrast.png
new file mode 100644
index 0000000..0188d48
--- /dev/null
+++ b/ui/file_manager/gallery/images/100/icon_contrast.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/100/icon_crop.png b/ui/file_manager/gallery/images/100/icon_crop.png
new file mode 100644
index 0000000..efff5ba
--- /dev/null
+++ b/ui/file_manager/gallery/images/100/icon_crop.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/100/icon_crop_selected.png b/ui/file_manager/gallery/images/100/icon_crop_selected.png
new file mode 100644
index 0000000..18b8317
--- /dev/null
+++ b/ui/file_manager/gallery/images/100/icon_crop_selected.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/100/icon_delete.png b/ui/file_manager/gallery/images/100/icon_delete.png
new file mode 100644
index 0000000..efb132a
--- /dev/null
+++ b/ui/file_manager/gallery/images/100/icon_delete.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/100/icon_delete_selected.png b/ui/file_manager/gallery/images/100/icon_delete_selected.png
new file mode 100644
index 0000000..f2f88d8
--- /dev/null
+++ b/ui/file_manager/gallery/images/100/icon_delete_selected.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/100/icon_edit.png b/ui/file_manager/gallery/images/100/icon_edit.png
new file mode 100644
index 0000000..fc72ecf
--- /dev/null
+++ b/ui/file_manager/gallery/images/100/icon_edit.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/100/icon_edit_selected.png b/ui/file_manager/gallery/images/100/icon_edit_selected.png
new file mode 100644
index 0000000..61540b5
--- /dev/null
+++ b/ui/file_manager/gallery/images/100/icon_edit_selected.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/100/icon_mosaic.png b/ui/file_manager/gallery/images/100/icon_mosaic.png
new file mode 100644
index 0000000..6e49d3c
--- /dev/null
+++ b/ui/file_manager/gallery/images/100/icon_mosaic.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/100/icon_mosaic_selected.png b/ui/file_manager/gallery/images/100/icon_mosaic_selected.png
new file mode 100644
index 0000000..86edb6e
--- /dev/null
+++ b/ui/file_manager/gallery/images/100/icon_mosaic_selected.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/100/icon_print.png b/ui/file_manager/gallery/images/100/icon_print.png
new file mode 100644
index 0000000..b235536
--- /dev/null
+++ b/ui/file_manager/gallery/images/100/icon_print.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/100/icon_print_selected.png b/ui/file_manager/gallery/images/100/icon_print_selected.png
new file mode 100644
index 0000000..657b9c8
--- /dev/null
+++ b/ui/file_manager/gallery/images/100/icon_print_selected.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/100/icon_redo.png b/ui/file_manager/gallery/images/100/icon_redo.png
new file mode 100644
index 0000000..7b4703b
--- /dev/null
+++ b/ui/file_manager/gallery/images/100/icon_redo.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/100/icon_redo_selected.png b/ui/file_manager/gallery/images/100/icon_redo_selected.png
new file mode 100644
index 0000000..0022a13
--- /dev/null
+++ b/ui/file_manager/gallery/images/100/icon_redo_selected.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/100/icon_rotate.png b/ui/file_manager/gallery/images/100/icon_rotate.png
new file mode 100644
index 0000000..c60f258
--- /dev/null
+++ b/ui/file_manager/gallery/images/100/icon_rotate.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/100/icon_rotate_left.png b/ui/file_manager/gallery/images/100/icon_rotate_left.png
new file mode 100644
index 0000000..ef2f21f
--- /dev/null
+++ b/ui/file_manager/gallery/images/100/icon_rotate_left.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/100/icon_rotate_left_selected.png b/ui/file_manager/gallery/images/100/icon_rotate_left_selected.png
new file mode 100644
index 0000000..1e4c1d6
--- /dev/null
+++ b/ui/file_manager/gallery/images/100/icon_rotate_left_selected.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/100/icon_rotate_selected.png b/ui/file_manager/gallery/images/100/icon_rotate_selected.png
new file mode 100644
index 0000000..445350f
--- /dev/null
+++ b/ui/file_manager/gallery/images/100/icon_rotate_selected.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/100/icon_share.png b/ui/file_manager/gallery/images/100/icon_share.png
new file mode 100644
index 0000000..36bb221
--- /dev/null
+++ b/ui/file_manager/gallery/images/100/icon_share.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/100/icon_share_selected.png b/ui/file_manager/gallery/images/100/icon_share_selected.png
new file mode 100644
index 0000000..438e8a2
--- /dev/null
+++ b/ui/file_manager/gallery/images/100/icon_share_selected.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/100/icon_slideshow.png b/ui/file_manager/gallery/images/100/icon_slideshow.png
new file mode 100644
index 0000000..72763d4
--- /dev/null
+++ b/ui/file_manager/gallery/images/100/icon_slideshow.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/100/icon_slideshow_selected.png b/ui/file_manager/gallery/images/100/icon_slideshow_selected.png
new file mode 100644
index 0000000..4f80a48
--- /dev/null
+++ b/ui/file_manager/gallery/images/100/icon_slideshow_selected.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/100/icon_undo.png b/ui/file_manager/gallery/images/100/icon_undo.png
new file mode 100644
index 0000000..79e3fdd
--- /dev/null
+++ b/ui/file_manager/gallery/images/100/icon_undo.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/100/icon_undo_selected.png b/ui/file_manager/gallery/images/100/icon_undo_selected.png
new file mode 100644
index 0000000..d5d13a7
--- /dev/null
+++ b/ui/file_manager/gallery/images/100/icon_undo_selected.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/100/slider_thumb.png b/ui/file_manager/gallery/images/100/slider_thumb.png
new file mode 100644
index 0000000..cb2d712
--- /dev/null
+++ b/ui/file_manager/gallery/images/100/slider_thumb.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/100/slideshow-end.png b/ui/file_manager/gallery/images/100/slideshow-end.png
new file mode 100644
index 0000000..f437111
--- /dev/null
+++ b/ui/file_manager/gallery/images/100/slideshow-end.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/100/slideshow-pause.png b/ui/file_manager/gallery/images/100/slideshow-pause.png
new file mode 100644
index 0000000..2170ce9
--- /dev/null
+++ b/ui/file_manager/gallery/images/100/slideshow-pause.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/100/slideshow-play.png b/ui/file_manager/gallery/images/100/slideshow-play.png
new file mode 100644
index 0000000..f949121
--- /dev/null
+++ b/ui/file_manager/gallery/images/100/slideshow-play.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/200/arrow_left.png b/ui/file_manager/gallery/images/200/arrow_left.png
new file mode 100644
index 0000000..6e4fb66
--- /dev/null
+++ b/ui/file_manager/gallery/images/200/arrow_left.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/200/arrow_right.png b/ui/file_manager/gallery/images/200/arrow_right.png
new file mode 100644
index 0000000..22a6c73
--- /dev/null
+++ b/ui/file_manager/gallery/images/200/arrow_right.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/200/back_to_files.png b/ui/file_manager/gallery/images/200/back_to_files.png
new file mode 100644
index 0000000..e04d9d3
--- /dev/null
+++ b/ui/file_manager/gallery/images/200/back_to_files.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/200/bubble_point.png b/ui/file_manager/gallery/images/200/bubble_point.png
new file mode 100644
index 0000000..161e4c0
--- /dev/null
+++ b/ui/file_manager/gallery/images/200/bubble_point.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/200/butterbar_close_button.png b/ui/file_manager/gallery/images/200/butterbar_close_button.png
new file mode 100644
index 0000000..aa6c816
--- /dev/null
+++ b/ui/file_manager/gallery/images/200/butterbar_close_button.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/200/cursor_crop.png b/ui/file_manager/gallery/images/200/cursor_crop.png
new file mode 100644
index 0000000..6202fa9
--- /dev/null
+++ b/ui/file_manager/gallery/images/200/cursor_crop.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/200/cursor_leftright.png b/ui/file_manager/gallery/images/200/cursor_leftright.png
new file mode 100644
index 0000000..a7ee09c
--- /dev/null
+++ b/ui/file_manager/gallery/images/200/cursor_leftright.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/200/cursor_move.png b/ui/file_manager/gallery/images/200/cursor_move.png
new file mode 100644
index 0000000..faa3c8a
--- /dev/null
+++ b/ui/file_manager/gallery/images/200/cursor_move.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/200/cursor_nwse.png b/ui/file_manager/gallery/images/200/cursor_nwse.png
new file mode 100644
index 0000000..0cd6399
--- /dev/null
+++ b/ui/file_manager/gallery/images/200/cursor_nwse.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/200/cursor_swne.png b/ui/file_manager/gallery/images/200/cursor_swne.png
new file mode 100644
index 0000000..04d9dc0
--- /dev/null
+++ b/ui/file_manager/gallery/images/200/cursor_swne.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/200/cursor_updown.png b/ui/file_manager/gallery/images/200/cursor_updown.png
new file mode 100644
index 0000000..1e9adfb
--- /dev/null
+++ b/ui/file_manager/gallery/images/200/cursor_updown.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/200/icon.png b/ui/file_manager/gallery/images/200/icon.png
new file mode 100644
index 0000000..df61101
--- /dev/null
+++ b/ui/file_manager/gallery/images/200/icon.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/200/icon_1up.png b/ui/file_manager/gallery/images/200/icon_1up.png
new file mode 100644
index 0000000..58cbc28
--- /dev/null
+++ b/ui/file_manager/gallery/images/200/icon_1up.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/200/icon_1up_selected.png b/ui/file_manager/gallery/images/200/icon_1up_selected.png
new file mode 100644
index 0000000..a0ca726
--- /dev/null
+++ b/ui/file_manager/gallery/images/200/icon_1up_selected.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/200/icon_autofix.png b/ui/file_manager/gallery/images/200/icon_autofix.png
new file mode 100644
index 0000000..8ce4917
--- /dev/null
+++ b/ui/file_manager/gallery/images/200/icon_autofix.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/200/icon_autofix_selected.png b/ui/file_manager/gallery/images/200/icon_autofix_selected.png
new file mode 100644
index 0000000..8838d5c
--- /dev/null
+++ b/ui/file_manager/gallery/images/200/icon_autofix_selected.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/200/icon_brightness.png b/ui/file_manager/gallery/images/200/icon_brightness.png
new file mode 100644
index 0000000..ffcd385
--- /dev/null
+++ b/ui/file_manager/gallery/images/200/icon_brightness.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/200/icon_brightness_selected.png b/ui/file_manager/gallery/images/200/icon_brightness_selected.png
new file mode 100644
index 0000000..90bf03b
--- /dev/null
+++ b/ui/file_manager/gallery/images/200/icon_brightness_selected.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/200/icon_contrast.png b/ui/file_manager/gallery/images/200/icon_contrast.png
new file mode 100644
index 0000000..eec931d
--- /dev/null
+++ b/ui/file_manager/gallery/images/200/icon_contrast.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/200/icon_crop.png b/ui/file_manager/gallery/images/200/icon_crop.png
new file mode 100644
index 0000000..7c12fb5
--- /dev/null
+++ b/ui/file_manager/gallery/images/200/icon_crop.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/200/icon_crop_selected.png b/ui/file_manager/gallery/images/200/icon_crop_selected.png
new file mode 100644
index 0000000..bb2e9e6
--- /dev/null
+++ b/ui/file_manager/gallery/images/200/icon_crop_selected.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/200/icon_delete.png b/ui/file_manager/gallery/images/200/icon_delete.png
new file mode 100644
index 0000000..a55ac6c
--- /dev/null
+++ b/ui/file_manager/gallery/images/200/icon_delete.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/200/icon_delete_selected.png b/ui/file_manager/gallery/images/200/icon_delete_selected.png
new file mode 100644
index 0000000..af54168
--- /dev/null
+++ b/ui/file_manager/gallery/images/200/icon_delete_selected.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/200/icon_edit.png b/ui/file_manager/gallery/images/200/icon_edit.png
new file mode 100644
index 0000000..288bc5b
--- /dev/null
+++ b/ui/file_manager/gallery/images/200/icon_edit.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/200/icon_edit_selected.png b/ui/file_manager/gallery/images/200/icon_edit_selected.png
new file mode 100644
index 0000000..bcf9933
--- /dev/null
+++ b/ui/file_manager/gallery/images/200/icon_edit_selected.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/200/icon_mosaic.png b/ui/file_manager/gallery/images/200/icon_mosaic.png
new file mode 100644
index 0000000..3e1a621
--- /dev/null
+++ b/ui/file_manager/gallery/images/200/icon_mosaic.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/200/icon_mosaic_selected.png b/ui/file_manager/gallery/images/200/icon_mosaic_selected.png
new file mode 100644
index 0000000..d9e329d
--- /dev/null
+++ b/ui/file_manager/gallery/images/200/icon_mosaic_selected.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/200/icon_print.png b/ui/file_manager/gallery/images/200/icon_print.png
new file mode 100644
index 0000000..b5a9be0
--- /dev/null
+++ b/ui/file_manager/gallery/images/200/icon_print.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/200/icon_print_selected.png b/ui/file_manager/gallery/images/200/icon_print_selected.png
new file mode 100644
index 0000000..048a341
--- /dev/null
+++ b/ui/file_manager/gallery/images/200/icon_print_selected.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/200/icon_redo.png b/ui/file_manager/gallery/images/200/icon_redo.png
new file mode 100644
index 0000000..075275d
--- /dev/null
+++ b/ui/file_manager/gallery/images/200/icon_redo.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/200/icon_redo_selected.png b/ui/file_manager/gallery/images/200/icon_redo_selected.png
new file mode 100644
index 0000000..beed584
--- /dev/null
+++ b/ui/file_manager/gallery/images/200/icon_redo_selected.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/200/icon_rotate.png b/ui/file_manager/gallery/images/200/icon_rotate.png
new file mode 100644
index 0000000..db2c0b0
--- /dev/null
+++ b/ui/file_manager/gallery/images/200/icon_rotate.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/200/icon_rotate_left.png b/ui/file_manager/gallery/images/200/icon_rotate_left.png
new file mode 100644
index 0000000..da57329
--- /dev/null
+++ b/ui/file_manager/gallery/images/200/icon_rotate_left.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/200/icon_rotate_left_selected.png b/ui/file_manager/gallery/images/200/icon_rotate_left_selected.png
new file mode 100644
index 0000000..d1b00a7
--- /dev/null
+++ b/ui/file_manager/gallery/images/200/icon_rotate_left_selected.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/200/icon_rotate_selected.png b/ui/file_manager/gallery/images/200/icon_rotate_selected.png
new file mode 100644
index 0000000..b3a9bf6
--- /dev/null
+++ b/ui/file_manager/gallery/images/200/icon_rotate_selected.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/200/icon_share.png b/ui/file_manager/gallery/images/200/icon_share.png
new file mode 100644
index 0000000..b1da6d9
--- /dev/null
+++ b/ui/file_manager/gallery/images/200/icon_share.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/200/icon_share_selected.png b/ui/file_manager/gallery/images/200/icon_share_selected.png
new file mode 100644
index 0000000..b3cd00f
--- /dev/null
+++ b/ui/file_manager/gallery/images/200/icon_share_selected.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/200/icon_slideshow.png b/ui/file_manager/gallery/images/200/icon_slideshow.png
new file mode 100644
index 0000000..fec87c0
--- /dev/null
+++ b/ui/file_manager/gallery/images/200/icon_slideshow.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/200/icon_slideshow_selected.png b/ui/file_manager/gallery/images/200/icon_slideshow_selected.png
new file mode 100644
index 0000000..4e1ed5a
--- /dev/null
+++ b/ui/file_manager/gallery/images/200/icon_slideshow_selected.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/200/icon_undo.png b/ui/file_manager/gallery/images/200/icon_undo.png
new file mode 100644
index 0000000..c51fd62
--- /dev/null
+++ b/ui/file_manager/gallery/images/200/icon_undo.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/200/icon_undo_selected.png b/ui/file_manager/gallery/images/200/icon_undo_selected.png
new file mode 100644
index 0000000..92d3a01
--- /dev/null
+++ b/ui/file_manager/gallery/images/200/icon_undo_selected.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/200/slider_thumb.png b/ui/file_manager/gallery/images/200/slider_thumb.png
new file mode 100644
index 0000000..e100da6
--- /dev/null
+++ b/ui/file_manager/gallery/images/200/slider_thumb.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/200/slideshow-end.png b/ui/file_manager/gallery/images/200/slideshow-end.png
new file mode 100644
index 0000000..5e19f8d
--- /dev/null
+++ b/ui/file_manager/gallery/images/200/slideshow-end.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/200/slideshow-pause.png b/ui/file_manager/gallery/images/200/slideshow-pause.png
new file mode 100644
index 0000000..13457d9
--- /dev/null
+++ b/ui/file_manager/gallery/images/200/slideshow-pause.png
Binary files differ
diff --git a/ui/file_manager/gallery/images/200/slideshow-play.png b/ui/file_manager/gallery/images/200/slideshow-play.png
new file mode 100644
index 0000000..aa9bd88
--- /dev/null
+++ b/ui/file_manager/gallery/images/200/slideshow-play.png
Binary files differ
diff --git a/mojo/public/tools/bindings/pylib/generate/__init__.py b/ui/file_manager/gallery/js/background.js
similarity index 100%
copy from mojo/public/tools/bindings/pylib/generate/__init__.py
copy to ui/file_manager/gallery/js/background.js
diff --git a/mojo/public/tools/bindings/pylib/generate/__init__.py b/ui/file_manager/gallery/js/error_util.js
similarity index 100%
copy from mojo/public/tools/bindings/pylib/generate/__init__.py
copy to ui/file_manager/gallery/js/error_util.js
diff --git a/mojo/public/tools/bindings/pylib/generate/__init__.py b/ui/file_manager/gallery/js/gallery.js
similarity index 100%
copy from mojo/public/tools/bindings/pylib/generate/__init__.py
copy to ui/file_manager/gallery/js/gallery.js
diff --git a/ui/file_manager/gallery/js/gallery_scripts.js b/ui/file_manager/gallery/js/gallery_scripts.js
new file mode 100644
index 0000000..a9286e0
--- /dev/null
+++ b/ui/file_manager/gallery/js/gallery_scripts.js
@@ -0,0 +1,20 @@
+// 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.
+
+// The include directives are put into Javascript-style comments to prevent
+// parsing errors in non-flattened mode. The flattener still sees them.
+// Note that this makes the flattener to comment out the first line of the
+// included file but that's all right since any javascript file should start
+// with a copyright comment anyway.
+
+//<include src="error_util.js"/>
+
+//<include src="../../../webui/resources/js/cr.js"/>
+//<include src="../../../webui/resources/js/load_time_data.js"/>
+
+(function() {
+'use strict';
+
+//<include src="gallery.js"/>
+})();
diff --git a/mojo/public/tools/bindings/pylib/generate/__init__.py b/ui/file_manager/gallery/js/test_util.js
similarity index 100%
copy from mojo/public/tools/bindings/pylib/generate/__init__.py
copy to ui/file_manager/gallery/js/test_util.js
diff --git a/ui/file_manager/gallery/manifest.json b/ui/file_manager/gallery/manifest.json
new file mode 100644
index 0000000..3dbeda2
--- /dev/null
+++ b/ui/file_manager/gallery/manifest.json
@@ -0,0 +1,50 @@
+{
+  // chrome-extension://jcgeabjmjgoblfofpppfkcoakmfobdko/
+  "key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw0/gRbJc545iEGRZs20Rl/HtrSUp8H3gJd4Y6hCe0CG1xQiJhZ5nc8qZyxa96gMxRAKBq54S6sjVVtV6uS70oU6FvrvwItByYkkqr4ZE7eMJKwMqnGItxWbh6KBodf89lpKoIy6MtYTqubBhXB/IQBZsXah90tXwRzaaJNWw+2BBRIhcPsH3ng+wgN7rwFxo4HIv9ZpqkYlx90rwkfjOmKPPnSXyXFIBJfmqfdbd8PLtcxzzOTE+vxwoXZuYWrthKm4uKfNqXIYns74sSJlqyKfctuR+nQdNh8uePv0e+/Ul3wER1/jIXULLjfyoaklyDs+ak3SDf+xWScJ+0LJ0AwIDAQAB",
+  "manifest_version": 2,
+  "name": "Gallery",
+  "version": "2.0",
+  "description": "Picture and video browser app.",
+  "display_in_launcher": false,
+  "incognito" : "split",
+  "icons": {
+    "16": "images/100/icon.png",
+    "32": "images/200/icon.png"
+  },
+  "permissions": [
+    "fileSystem",
+    "fileBrowserPrivate",
+    "fullscreen",
+    "mediaPlayerPrivate",
+    "storage",
+    "chrome://theme/"
+  ],
+  "file_handlers": {
+    "video": {
+      "types": [
+        "image/*"
+      ],
+      "extensions": [
+        "bmp",
+        "gif",
+        "ico",
+        "jpg",
+        "jpeg",
+        "png",
+        "webp"
+      ],
+      // TODO(hirono): Rename and localize this.
+      "title": "Open in new Gallery"
+    }
+  },
+  "app": {
+    "background": {
+      "scripts": [
+        "js/error_util.js",
+        "js/test_util.js",
+        "js/background.js"
+      ]
+    },
+    "content_security_policy": "default-src 'none'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' chrome://theme data:; media-src 'self'; object-src 'self'"
+  }
+}
diff --git a/chrome/browser/resources/image_loader/background.js b/ui/file_manager/image_loader/background.js
similarity index 100%
rename from chrome/browser/resources/image_loader/background.js
rename to ui/file_manager/image_loader/background.js
diff --git a/chrome/browser/resources/image_loader/cache.js b/ui/file_manager/image_loader/cache.js
similarity index 100%
rename from chrome/browser/resources/image_loader/cache.js
rename to ui/file_manager/image_loader/cache.js
diff --git a/chrome/browser/resources/image_loader/image_loader.js b/ui/file_manager/image_loader/image_loader.js
similarity index 100%
rename from chrome/browser/resources/image_loader/image_loader.js
rename to ui/file_manager/image_loader/image_loader.js
diff --git a/chrome/browser/resources/image_loader/image_loader_client.js b/ui/file_manager/image_loader/image_loader_client.js
similarity index 100%
rename from chrome/browser/resources/image_loader/image_loader_client.js
rename to ui/file_manager/image_loader/image_loader_client.js
diff --git a/chrome/browser/resources/image_loader/manifest.json b/ui/file_manager/image_loader/manifest.json
similarity index 100%
rename from chrome/browser/resources/image_loader/manifest.json
rename to ui/file_manager/image_loader/manifest.json
diff --git a/chrome/browser/resources/image_loader/request.js b/ui/file_manager/image_loader/request.js
similarity index 100%
rename from chrome/browser/resources/image_loader/request.js
rename to ui/file_manager/image_loader/request.js
diff --git a/chrome/browser/resources/image_loader/worker.js b/ui/file_manager/image_loader/worker.js
similarity index 100%
rename from chrome/browser/resources/image_loader/worker.js
rename to ui/file_manager/image_loader/worker.js
diff --git a/chrome/browser/resources/video_player/OWNERS b/ui/file_manager/video_player/OWNERS
similarity index 100%
rename from chrome/browser/resources/video_player/OWNERS
rename to ui/file_manager/video_player/OWNERS
diff --git a/chrome/browser/resources/video_player/css/video_player.css b/ui/file_manager/video_player/css/video_player.css
similarity index 100%
rename from chrome/browser/resources/video_player/css/video_player.css
rename to ui/file_manager/video_player/css/video_player.css
diff --git a/chrome/browser/resources/video_player/images/100/error.png b/ui/file_manager/video_player/images/100/error.png
similarity index 100%
rename from chrome/browser/resources/video_player/images/100/error.png
rename to ui/file_manager/video_player/images/100/error.png
Binary files differ
diff --git a/chrome/browser/resources/video_player/images/100/icon.png b/ui/file_manager/video_player/images/100/icon.png
similarity index 100%
rename from chrome/browser/resources/video_player/images/100/icon.png
rename to ui/file_manager/video_player/images/100/icon.png
Binary files differ
diff --git a/chrome/browser/resources/video_player/images/200/error.png b/ui/file_manager/video_player/images/200/error.png
similarity index 100%
rename from chrome/browser/resources/video_player/images/200/error.png
rename to ui/file_manager/video_player/images/200/error.png
Binary files differ
diff --git a/chrome/browser/resources/video_player/images/200/icon.png b/ui/file_manager/video_player/images/200/icon.png
similarity index 100%
rename from chrome/browser/resources/video_player/images/200/icon.png
rename to ui/file_manager/video_player/images/200/icon.png
Binary files differ
diff --git a/chrome/browser/resources/video_player/js/background.js b/ui/file_manager/video_player/js/background.js
similarity index 100%
rename from chrome/browser/resources/video_player/js/background.js
rename to ui/file_manager/video_player/js/background.js
diff --git a/chrome/browser/resources/video_player/js/error_util.js b/ui/file_manager/video_player/js/error_util.js
similarity index 100%
rename from chrome/browser/resources/video_player/js/error_util.js
rename to ui/file_manager/video_player/js/error_util.js
diff --git a/chrome/browser/resources/video_player/js/test_util.js b/ui/file_manager/video_player/js/test_util.js
similarity index 100%
rename from chrome/browser/resources/video_player/js/test_util.js
rename to ui/file_manager/video_player/js/test_util.js
diff --git a/chrome/browser/resources/video_player/js/video_player.js b/ui/file_manager/video_player/js/video_player.js
similarity index 100%
rename from chrome/browser/resources/video_player/js/video_player.js
rename to ui/file_manager/video_player/js/video_player.js
diff --git a/ui/file_manager/video_player/js/video_player_scripts.js b/ui/file_manager/video_player/js/video_player_scripts.js
new file mode 100644
index 0000000..a3f6c6a
--- /dev/null
+++ b/ui/file_manager/video_player/js/video_player_scripts.js
@@ -0,0 +1,27 @@
+// 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.
+
+// The include directives are put into Javascript-style comments to prevent
+// parsing errors in non-flattened mode. The flattener still sees them.
+// Note that this makes the flattener to comment out the first line of the
+// included file but that's all right since any javascript file should start
+// with a copyright comment anyway.
+
+//<include src="error_util.js"/>
+
+//<include src="../../../webui/resources/js/cr.js"/>
+//<include src="../../../webui/resources/js/load_time_data.js"/>
+
+(function() {
+'use strict';
+
+//<include src="../../../../chrome/browser/resources/file_manager/common/js/util.js"/>
+//<include src="../../../../chrome/browser/resources/file_manager/foreground/js/media/media_controls.js"/>
+//<include src="../../../../chrome/browser/resources/file_manager/foreground/js/media/util.js"/>
+
+//<include src="video_player.js"/>
+
+window.unload = unload;
+
+})();
diff --git a/chrome/browser/resources/video_player/manifest.json b/ui/file_manager/video_player/manifest.json
similarity index 100%
rename from chrome/browser/resources/video_player/manifest.json
rename to ui/file_manager/video_player/manifest.json
diff --git a/ui/file_manager/video_player/video_player.html b/ui/file_manager/video_player/video_player.html
new file mode 100644
index 0000000..52b50f0
--- /dev/null
+++ b/ui/file_manager/video_player/video_player.html
@@ -0,0 +1,28 @@
+<!--
+  -- 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.
+  -->
+<html>
+<head>
+  <title>#xFEFF;</title>
+  <link rel="icon" type="image/png" href="images/200/icon.png">
+  <link rel="stylesheet" type="text/css"
+        href="../../../chrome/browser/resources/file_manager/foreground/css/media_controls.css">
+  <link rel="stylesheet" type="text/css" href="css/video_player.css">
+
+  <script src="js/video_player_scripts.js"></script>
+</head>
+<body>
+  <div id="video-player" tools>
+    <div id="video-container">
+    </div>
+    <div id="controls-wrapper">
+      <div id="controls" class="tool"></div>
+    </div>
+    <div id="error-wrapper">
+      <div id="error"></div>
+    </div>
+  </div>
+</body>
+</html>
diff --git a/ui/gfx/BUILD.gn b/ui/gfx/BUILD.gn
index 02d2e77..7833945 100644
--- a/ui/gfx/BUILD.gn
+++ b/ui/gfx/BUILD.gn
@@ -7,6 +7,16 @@
   import("//build/config/android/config.gni")
 }
 
+# Several targets want to include this header file, and some of them are
+# child dependencies of "gfx". Therefore, we separate it out here so multiple
+# targets can all have a dependency for header checking purposes without
+# creating circular dependencies.
+source_set("gfx_export") {
+  sources = [
+    "gfx_export.h",
+  ]
+}
+
 component("gfx") {
   sources = [
     "android/device_display_info.cc",
@@ -84,7 +94,6 @@
     "frame_time.h",
     "gdi_util.cc",
     "gdi_util.h",
-    "gfx_export.h",
     "gfx_paths.cc",
     "gfx_paths.h",
     "gpu_memory_buffer.cc",
@@ -235,6 +244,7 @@
   defines = [ "GFX_IMPLEMENTATION" ]
 
   deps = [
+    ":gfx_export",
     "//base",
     "//base:i18n",
     "//base:base_static",
@@ -347,13 +357,20 @@
     sources -= [
       "nine_image_painter.cc",
       "nine_image_painter.h",
+      "path_aura.cc",
     ]
   }
+
   if (use_x11) {
     deps += [
       ":gfx_x11",
     ]
+  } else {
+    sources -= [
+      "path_x11.cc",
+    ]
   }
+
   if (use_pango) {
     sources -= [
       "platform_font_ozone.cc",
@@ -382,6 +399,7 @@
 
   deps = [
     "//base",
+    "//base/test:test_support",
     "//skia",
     "//testing/gtest",
   ]
diff --git a/ui/gfx/android/device_display_info.cc b/ui/gfx/android/device_display_info.cc
index f7c9eed..4d2c80c 100644
--- a/ui/gfx/android/device_display_info.cc
+++ b/ui/gfx/android/device_display_info.cc
@@ -47,4 +47,8 @@
   return SharedDeviceDisplayInfo::GetInstance()->GetSmallestDIPWidth();
 }
 
+int DeviceDisplayInfo::GetRotationDegrees() {
+  return SharedDeviceDisplayInfo::GetInstance()->GetRotationDegrees();
+}
+
 }  // namespace gfx
diff --git a/ui/gfx/android/device_display_info.h b/ui/gfx/android/device_display_info.h
index 2c6db28..74e0ada 100644
--- a/ui/gfx/android/device_display_info.h
+++ b/ui/gfx/android/device_display_info.h
@@ -51,6 +51,11 @@
   // Smallest possible screen size in density-independent pixels.
   int GetSmallestDIPWidth();
 
+  // Returns the display rotation angle from its natural orientation. Expected
+  // values are one of { 0, 90, 180, 270 }.
+  // See DeviceDispayInfo.java for more information.
+  int GetRotationDegrees();
+
  private:
   DISALLOW_COPY_AND_ASSIGN(DeviceDisplayInfo);
 };
diff --git a/ui/gfx/android/shared_device_display_info.cc b/ui/gfx/android/shared_device_display_info.cc
index ae02ef5..c58813d 100644
--- a/ui/gfx/android/shared_device_display_info.cc
+++ b/ui/gfx/android/shared_device_display_info.cc
@@ -21,12 +21,13 @@
                                           jint bits_per_pixel,
                                           jint bits_per_component,
                                           jdouble dip_scale,
-                                          jint smallest_dip_width) {
+                                          jint smallest_dip_width,
+                                          jint rotation_degrees) {
   SharedDeviceDisplayInfo::GetInstance()->InvokeUpdate(env, obj,
       display_height, display_width,
       physical_display_height, physical_display_width,
       bits_per_pixel, bits_per_component,
-      dip_scale, smallest_dip_width);
+      dip_scale, smallest_dip_width, rotation_degrees);
 }
 
 // static
@@ -80,6 +81,11 @@
   return smallest_dip_width_;
 }
 
+int SharedDeviceDisplayInfo::GetRotationDegrees() {
+  base::AutoLock autolock(lock_);
+  return rotation_degrees_;
+}
+
 // static
 bool SharedDeviceDisplayInfo::RegisterSharedDeviceDisplayInfo(JNIEnv* env) {
   return RegisterNativesImpl(env);
@@ -94,14 +100,15 @@
                                            jint bits_per_pixel,
                                            jint bits_per_component,
                                            jdouble dip_scale,
-                                           jint smallest_dip_width) {
+                                           jint smallest_dip_width,
+                                           jint rotation_degrees) {
   base::AutoLock autolock(lock_);
 
   UpdateDisplayInfo(env, obj,
       display_height, display_width,
       physical_display_height, physical_display_width,
       bits_per_pixel, bits_per_component, dip_scale,
-      smallest_dip_width);
+      smallest_dip_width, rotation_degrees);
 }
 
 SharedDeviceDisplayInfo::SharedDeviceDisplayInfo()
@@ -124,7 +131,8 @@
       Java_DeviceDisplayInfo_getBitsPerPixel(env, j_device_info_.obj()),
       Java_DeviceDisplayInfo_getBitsPerComponent(env, j_device_info_.obj()),
       Java_DeviceDisplayInfo_getDIPScale(env, j_device_info_.obj()),
-      Java_DeviceDisplayInfo_getSmallestDIPWidth(env, j_device_info_.obj()));
+      Java_DeviceDisplayInfo_getSmallestDIPWidth(env, j_device_info_.obj()),
+      Java_DeviceDisplayInfo_getRotationDegrees(env, j_device_info_.obj()));
 }
 
 SharedDeviceDisplayInfo::~SharedDeviceDisplayInfo() {
@@ -139,7 +147,8 @@
                                                 jint bits_per_pixel,
                                                 jint bits_per_component,
                                                 jdouble dip_scale,
-                                                jint smallest_dip_width) {
+                                                jint smallest_dip_width,
+                                                jint rotation_degrees) {
   display_height_ = static_cast<int>(display_height);
   display_width_ = static_cast<int>(display_width);
   physical_display_height_ = static_cast<int>(physical_display_height);
@@ -148,6 +157,7 @@
   bits_per_component_ = static_cast<int>(bits_per_component);
   dip_scale_ = static_cast<double>(dip_scale);
   smallest_dip_width_ = static_cast<int>(smallest_dip_width);
+  rotation_degrees_ = static_cast<int>(rotation_degrees);
 }
 
 }  // namespace gfx
diff --git a/ui/gfx/android/shared_device_display_info.h b/ui/gfx/android/shared_device_display_info.h
index 7d81353..e6983e5 100644
--- a/ui/gfx/android/shared_device_display_info.h
+++ b/ui/gfx/android/shared_device_display_info.h
@@ -27,6 +27,7 @@
   int GetBitsPerComponent();
   double GetDIPScale();
   int GetSmallestDIPWidth();
+  int GetRotationDegrees();
 
   // Registers methods with JNI and returns true if succeeded.
   static bool RegisterSharedDeviceDisplayInfo(JNIEnv* env);
@@ -40,7 +41,8 @@
                     jint bits_per_pixel,
                     jint bits_per_component,
                     jdouble dip_scale,
-                    jint smallest_dip_width);
+                    jint smallest_dip_width,
+                    jint rotation_degrees);
  private:
   friend struct DefaultSingletonTraits<SharedDeviceDisplayInfo>;
 
@@ -55,7 +57,8 @@
                          jint bits_per_pixel,
                          jint bits_per_component,
                          jdouble dip_scale,
-                         jint smallest_dip_width);
+                         jint smallest_dip_width,
+                         jint rotation_degrees);
 
   base::Lock lock_;
   base::android::ScopedJavaGlobalRef<jobject> j_device_info_;
@@ -68,6 +71,7 @@
   int bits_per_component_;
   double dip_scale_;
   int smallest_dip_width_;
+  int rotation_degrees_;
 
   DISALLOW_COPY_AND_ASSIGN(SharedDeviceDisplayInfo);
 };
diff --git a/ui/gfx/display.cc b/ui/gfx/display.cc
index 2cdc9a5..069c79e 100644
--- a/ui/gfx/display.cc
+++ b/ui/gfx/display.cc
@@ -85,6 +85,42 @@
 Display::~Display() {
 }
 
+int Display::RotationAsDegree() const {
+  switch (rotation_) {
+    case ROTATE_0:
+      return 0;
+    case ROTATE_90:
+      return 90;
+    case ROTATE_180:
+      return 180;
+    case ROTATE_270:
+      return 270;
+  }
+
+  NOTREACHED();
+  return 0;
+}
+
+void Display::SetRotationAsDegree(int rotation) {
+  switch (rotation) {
+    case 0:
+      rotation_ = ROTATE_0;
+      break;
+    case 90:
+      rotation_ = ROTATE_90;
+      break;
+    case 180:
+      rotation_ = ROTATE_180;
+      break;
+    case 270:
+      rotation_ = ROTATE_270;
+      break;
+    default:
+      // We should not reach that but we will just ignore the call if we do.
+      NOTREACHED();
+  }
+}
+
 Insets Display::GetWorkAreaInsets() const {
   return gfx::Insets(work_area_.y() - bounds_.y(),
                      work_area_.x() - bounds_.x(),
diff --git a/ui/gfx/display.h b/ui/gfx/display.h
index eb35a5f..90fc42f 100644
--- a/ui/gfx/display.h
+++ b/ui/gfx/display.h
@@ -73,6 +73,8 @@
 
   Rotation rotation() const { return rotation_; }
   void set_rotation(Rotation rotation) { rotation_ = rotation; }
+  int RotationAsDegree() const;
+  void SetRotationAsDegree(int rotation);
 
   TouchSupport touch_support() const { return touch_support_; }
   void set_touch_support(TouchSupport support) { touch_support_ = support; }
diff --git a/ui/gfx/gdk_compat.h b/ui/gfx/gdk_compat.h
deleted file mode 100644
index b11d779..0000000
--- a/ui/gfx/gdk_compat.h
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright (c) 2012 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 UI_GFX_GDK_COMPAT_H_
-#define UI_GFX_GDK_COMPAT_H_
-
-#include <gtk/gtk.h>
-#include <gdk/gdkx.h>
-
-// Google Chrome must depend on GTK 2.18, at least until the next LTS drops
-// (and we might have to extend which version of GTK we want to target due to
-// RHEL). To make our porting job for GTK3 easier, we define all the methods
-// that replace deprecated APIs in this file and then include it everywhere.
-//
-// This file is organized first by version, and then with each version,
-// alphabetically by method.
-
-#if !GTK_CHECK_VERSION(2, 24, 0)
-inline GdkWindow* gdk_x11_window_lookup_for_display(GdkDisplay* display,
-                                                    Window window) {
-  return static_cast<GdkWindow*>(gdk_xid_table_lookup_for_display(display,
-                                                                  window));
-}
-#endif
-
-#endif  // UI_GFX_GDK_COMPAT_H_
diff --git a/ui/gfx/geometry/BUILD.gn b/ui/gfx/geometry/BUILD.gn
index ac10b11..9492ced 100644
--- a/ui/gfx/geometry/BUILD.gn
+++ b/ui/gfx/geometry/BUILD.gn
@@ -56,5 +56,6 @@
 
   deps = [
     "//base",
+    "//ui/gfx:gfx_export",
   ]
 }
diff --git a/ui/gfx/gfx.gyp b/ui/gfx/gfx.gyp
index f0b4099..cb94431 100644
--- a/ui/gfx/gfx.gyp
+++ b/ui/gfx/gfx.gyp
@@ -201,18 +201,6 @@
         'nine_image_painter.cc',
         'nine_image_painter.h',
         'overlay_transform.h',
-        'ozone/dri/dri_buffer.cc',
-        'ozone/dri/dri_buffer.h',
-        'ozone/dri/dri_surface.cc',
-        'ozone/dri/dri_surface.h',
-        'ozone/dri/dri_surface_factory.cc',
-        'ozone/dri/dri_surface_factory.h',
-        'ozone/dri/dri_vsync_provider.cc',
-        'ozone/dri/dri_vsync_provider.h',
-        'ozone/dri/dri_wrapper.cc',
-        'ozone/dri/dri_wrapper.h',
-        'ozone/dri/hardware_display_controller.cc',
-        'ozone/dri/hardware_display_controller.h',
         'ozone/impl/file_surface_factory.cc',
         'ozone/impl/file_surface_factory.h',
         'ozone/surface_factory_ozone.cc',
@@ -402,11 +390,6 @@
             'render_text_ozone.cc',
           ],
         }],
-        ['ozone_platform_dri==1', {
-          'dependencies': [
-          '<(DEPTH)/build/linux/system.gyp:dridrm',
-          ],
-        }],
         ['desktop_linux==1 or chromeos==1', {
           'dependencies': [
             # font_render_params_linux.cc uses fontconfig
diff --git a/ui/gfx/gfx.target.darwin-arm.mk b/ui/gfx/gfx.target.darwin-arm.mk
index faada44..e9fb59f 100644
--- a/ui/gfx/gfx.target.darwin-arm.mk
+++ b/ui/gfx/gfx.target.darwin-arm.mk
@@ -151,12 +151,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -279,12 +282,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -364,7 +370,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/gfx/gfx.target.darwin-mips.mk b/ui/gfx/gfx.target.darwin-mips.mk
index 9902bbb..0c02a51 100644
--- a/ui/gfx/gfx.target.darwin-mips.mk
+++ b/ui/gfx/gfx.target.darwin-mips.mk
@@ -150,12 +150,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -277,12 +280,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -360,7 +366,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/gfx/gfx.target.darwin-x86.mk b/ui/gfx/gfx.target.darwin-x86.mk
index 063a641..6bda3fc 100644
--- a/ui/gfx/gfx.target.darwin-x86.mk
+++ b/ui/gfx/gfx.target.darwin-x86.mk
@@ -152,12 +152,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -280,12 +283,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -362,7 +368,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/gfx/gfx.target.darwin-x86_64.mk b/ui/gfx/gfx.target.darwin-x86_64.mk
index 490fd47..c07caa0 100644
--- a/ui/gfx/gfx.target.darwin-x86_64.mk
+++ b/ui/gfx/gfx.target.darwin-x86_64.mk
@@ -152,12 +152,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -280,12 +283,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -362,7 +368,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/gfx/gfx.target.linux-arm.mk b/ui/gfx/gfx.target.linux-arm.mk
index faada44..e9fb59f 100644
--- a/ui/gfx/gfx.target.linux-arm.mk
+++ b/ui/gfx/gfx.target.linux-arm.mk
@@ -151,12 +151,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -279,12 +282,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -364,7 +370,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/gfx/gfx.target.linux-mips.mk b/ui/gfx/gfx.target.linux-mips.mk
index 9902bbb..0c02a51 100644
--- a/ui/gfx/gfx.target.linux-mips.mk
+++ b/ui/gfx/gfx.target.linux-mips.mk
@@ -150,12 +150,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -277,12 +280,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -360,7 +366,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/gfx/gfx.target.linux-x86.mk b/ui/gfx/gfx.target.linux-x86.mk
index 063a641..6bda3fc 100644
--- a/ui/gfx/gfx.target.linux-x86.mk
+++ b/ui/gfx/gfx.target.linux-x86.mk
@@ -152,12 +152,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -280,12 +283,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -362,7 +368,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/gfx/gfx.target.linux-x86_64.mk b/ui/gfx/gfx.target.linux-x86_64.mk
index 490fd47..c07caa0 100644
--- a/ui/gfx/gfx.target.linux-x86_64.mk
+++ b/ui/gfx/gfx.target.linux-x86_64.mk
@@ -152,12 +152,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -280,12 +283,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -362,7 +368,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/gfx/gfx_geometry.target.darwin-arm.mk b/ui/gfx/gfx_geometry.target.darwin-arm.mk
index b791ca6..0bb7755 100644
--- a/ui/gfx/gfx_geometry.target.darwin-arm.mk
+++ b/ui/gfx/gfx_geometry.target.darwin-arm.mk
@@ -240,7 +240,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/gfx/gfx_geometry.target.darwin-mips.mk b/ui/gfx/gfx_geometry.target.darwin-mips.mk
index 91d8873..e9af83c 100644
--- a/ui/gfx/gfx_geometry.target.darwin-mips.mk
+++ b/ui/gfx/gfx_geometry.target.darwin-mips.mk
@@ -236,7 +236,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/gfx/gfx_geometry.target.darwin-x86.mk b/ui/gfx/gfx_geometry.target.darwin-x86.mk
index 8d943f4..33945e1 100644
--- a/ui/gfx/gfx_geometry.target.darwin-x86.mk
+++ b/ui/gfx/gfx_geometry.target.darwin-x86.mk
@@ -238,7 +238,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/gfx/gfx_geometry.target.darwin-x86_64.mk b/ui/gfx/gfx_geometry.target.darwin-x86_64.mk
index 74957f4..c4f41b8 100644
--- a/ui/gfx/gfx_geometry.target.darwin-x86_64.mk
+++ b/ui/gfx/gfx_geometry.target.darwin-x86_64.mk
@@ -238,7 +238,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/gfx/gfx_geometry.target.linux-arm.mk b/ui/gfx/gfx_geometry.target.linux-arm.mk
index b791ca6..0bb7755 100644
--- a/ui/gfx/gfx_geometry.target.linux-arm.mk
+++ b/ui/gfx/gfx_geometry.target.linux-arm.mk
@@ -240,7 +240,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/gfx/gfx_geometry.target.linux-mips.mk b/ui/gfx/gfx_geometry.target.linux-mips.mk
index 91d8873..e9af83c 100644
--- a/ui/gfx/gfx_geometry.target.linux-mips.mk
+++ b/ui/gfx/gfx_geometry.target.linux-mips.mk
@@ -236,7 +236,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/gfx/gfx_geometry.target.linux-x86.mk b/ui/gfx/gfx_geometry.target.linux-x86.mk
index 8d943f4..33945e1 100644
--- a/ui/gfx/gfx_geometry.target.linux-x86.mk
+++ b/ui/gfx/gfx_geometry.target.linux-x86.mk
@@ -238,7 +238,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/gfx/gfx_geometry.target.linux-x86_64.mk b/ui/gfx/gfx_geometry.target.linux-x86_64.mk
index 74957f4..c4f41b8 100644
--- a/ui/gfx/gfx_geometry.target.linux-x86_64.mk
+++ b/ui/gfx/gfx_geometry.target.linux-x86_64.mk
@@ -238,7 +238,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/gfx/ozone/dri/dri_buffer.cc b/ui/gfx/ozone/dri/dri_buffer.cc
deleted file mode 100644
index ce487a4..0000000
--- a/ui/gfx/ozone/dri/dri_buffer.cc
+++ /dev/null
@@ -1,124 +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.
-
-#include "ui/gfx/ozone/dri/dri_buffer.h"
-
-#include <errno.h>
-#include <sys/mman.h>
-#include <sys/types.h>
-#include <xf86drm.h>
-
-#include "base/logging.h"
-#include "third_party/skia/include/core/SkCanvas.h"
-#include "ui/gfx/ozone/dri/dri_wrapper.h"
-
-namespace gfx {
-
-namespace {
-
-void DestroyDumbBuffer(int fd, uint32_t handle) {
-  struct drm_mode_destroy_dumb destroy_request;
-  destroy_request.handle = handle;
-  drmIoctl(fd, DRM_IOCTL_MODE_DESTROY_DUMB, &destroy_request);
-}
-
-bool CreateDumbBuffer(DriWrapper* dri,
-                      const SkImageInfo& info,
-                      uint32_t* handle,
-                      uint32_t* stride,
-                      void** pixels) {
-  struct drm_mode_create_dumb request;
-  request.width = info.width();
-  request.height = info.height();
-  request.bpp = info.bytesPerPixel() << 3;
-  request.flags = 0;
-
-  if (drmIoctl(dri->get_fd(), DRM_IOCTL_MODE_CREATE_DUMB, &request) < 0) {
-    DLOG(ERROR) << "Cannot create dumb buffer (" << errno << ") "
-                << strerror(errno);
-    return false;
-  }
-
-  *handle = request.handle;
-  *stride = request.pitch;
-
-  struct drm_mode_map_dumb map_request;
-  map_request.handle = request.handle;
-  if (drmIoctl(dri->get_fd(), DRM_IOCTL_MODE_MAP_DUMB, &map_request)) {
-    DLOG(ERROR) << "Cannot prepare dumb buffer for mapping (" << errno << ") "
-                << strerror(errno);
-    DestroyDumbBuffer(dri->get_fd(), request.handle);
-    return false;
-  }
-
-  *pixels = mmap(0,
-                 request.size,
-                 PROT_READ | PROT_WRITE,
-                 MAP_SHARED,
-                 dri->get_fd(),
-                 map_request.offset);
-  if (*pixels == MAP_FAILED) {
-    DLOG(ERROR) << "Cannot mmap dumb buffer (" << errno << ") "
-                << strerror(errno);
-    DestroyDumbBuffer(dri->get_fd(), request.handle);
-    return false;
-  }
-
-  return true;
-}
-
-}  // namespace
-
-DriBuffer::DriBuffer(DriWrapper* dri)
-    : dri_(dri), handle_(0), framebuffer_(0) {}
-
-DriBuffer::~DriBuffer() {
-  if (!surface_)
-    return;
-
-  SkImageInfo info;
-  void* pixels = const_cast<void*>(surface_->peekPixels(&info, NULL));
-  if (!pixels)
-    return;
-
-  munmap(pixels, info.getSafeSize(stride_));
-  DestroyDumbBuffer(dri_->get_fd(), handle_);
-}
-
-bool DriBuffer::Initialize(const SkImageInfo& info) {
-  void* pixels = NULL;
-  if (!CreateDumbBuffer(dri_, info, &handle_, &stride_, &pixels)) {
-    DLOG(ERROR) << "Cannot allocate drm dumb buffer";
-    return false;
-  }
-
-  surface_ = skia::AdoptRef(SkSurface::NewRasterDirect(info, pixels, stride_));
-  if (!surface_) {
-    DLOG(ERROR) << "Cannot install Skia pixels for drm buffer";
-    return false;
-  }
-
-  return true;
-}
-
-uint8_t DriBuffer::GetColorDepth() const {
-  switch (surface_->getCanvas()->imageInfo().colorType()) {
-    case kUnknown_SkColorType:
-    case kAlpha_8_SkColorType:
-      return 0;
-    case kIndex_8_SkColorType:
-      return 8;
-    case kRGB_565_SkColorType:
-      return 16;
-    case kARGB_4444_SkColorType:
-      return 12;
-    case kPMColor_SkColorType:
-      return 24;
-    default:
-      NOTREACHED();
-      return 0;
-  }
-}
-
-}  // namespace gfx
diff --git a/ui/gfx/ozone/dri/dri_buffer.h b/ui/gfx/ozone/dri/dri_buffer.h
deleted file mode 100644
index ccf6b88..0000000
--- a/ui/gfx/ozone/dri/dri_buffer.h
+++ /dev/null
@@ -1,64 +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.
-
-#ifndef UI_GFX_OZONE_DRI_DRI_BUFFER_H_
-#define UI_GFX_OZONE_DRI_DRI_BUFFER_H_
-
-#include "base/macros.h"
-#include "skia/ext/refptr.h"
-#include "third_party/skia/include/core/SkSurface.h"
-#include "ui/gfx/gfx_export.h"
-
-class SkCanvas;
-
-namespace gfx {
-
-class DriWrapper;
-
-// Wrapper for a DRM allocated buffer. Keeps track of the native properties of
-// the buffer and wraps the pixel memory into a SkSurface which can be used to
-// draw into using Skia.
-class GFX_EXPORT DriBuffer {
- public:
-  DriBuffer(DriWrapper* dri);
-  virtual ~DriBuffer();
-
-  uint32_t stride() const { return stride_; }
-  uint32_t handle() const { return handle_; }
-  uint32_t framebuffer() const { return framebuffer_; }
-  SkCanvas* canvas() { return surface_->getCanvas(); }
-
-  // Return the color depth of a pixel in this buffer.
-  uint8_t GetColorDepth() const;
-
-  // Allocates the backing pixels and wraps them in |surface_|. |info| is used
-  // to describe the buffer characteristics (size, color format).
-  virtual bool Initialize(const SkImageInfo& info);
-
- protected:
-  friend class HardwareDisplayController;
-
-  void set_framebuffer(uint32_t framebuffer) { framebuffer_ = framebuffer; }
-
-  DriWrapper* dri_;  // Not owned.
-
-  // Wrapper around the native pixel memory.
-  skia::RefPtr<SkSurface> surface_;
-
-  // Length of a row of pixels.
-  uint32_t stride_;
-
-  // Buffer handle used by the DRM allocator.
-  uint32_t handle_;
-
-  // Buffer ID used by the DRM modesettings API. This is set when the buffer is
-  // registered with the CRTC.
-  uint32_t framebuffer_;
-
-  DISALLOW_COPY_AND_ASSIGN(DriBuffer);
-};
-
-}  // namespace gfx
-
-#endif  // UI_GFX_OZONE_DRI_DRI_BUFFER_H_
diff --git a/ui/gfx/ozone/dri/dri_surface.cc b/ui/gfx/ozone/dri/dri_surface.cc
deleted file mode 100644
index d6568f5..0000000
--- a/ui/gfx/ozone/dri/dri_surface.cc
+++ /dev/null
@@ -1,104 +0,0 @@
-// Copyright 2013 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 "ui/gfx/ozone/dri/dri_surface.h"
-
-#include <errno.h>
-#include <sys/mman.h>
-#include <sys/types.h>
-#include <xf86drm.h>
-
-#include "base/logging.h"
-#include "third_party/skia/include/core/SkCanvas.h"
-#include "ui/gfx/geometry/rect.h"
-#include "ui/gfx/ozone/dri/dri_buffer.h"
-#include "ui/gfx/ozone/dri/dri_wrapper.h"
-#include "ui/gfx/skia_util.h"
-
-namespace gfx {
-
-namespace {
-
-// TODO(dnicoara) Remove this once Skia implements this between 2 SkCanvases.
-void CopyRect(DriBuffer* dst, DriBuffer* src, const gfx::Rect& damage) {
-  SkImageInfo src_info, dst_info;
-  size_t src_stride, dst_stride;
-  uint8_t* src_pixels = static_cast<uint8_t*>(
-      const_cast<void*>(src->canvas()->peekPixels(&src_info, &src_stride)));
-  uint8_t* dst_pixels = static_cast<uint8_t*>(
-      const_cast<void*>(dst->canvas()->peekPixels(&dst_info, &dst_stride)));
-
-  // The 2 buffers should have the same properties.
-  DCHECK(src_info == dst_info);
-  DCHECK(src_stride == dst_stride);
-
-  int bpp = src_info.bytesPerPixel();
-  for (int height = damage.y(); height < damage.y() + damage.height(); ++height)
-    memcpy(dst_pixels + height * dst_stride + damage.x() * bpp,
-           src_pixels + height * src_stride + damage.x() * bpp,
-           damage.width() * bpp);
-}
-
-}  // namespace
-
-DriSurface::DriSurface(
-    DriWrapper* dri, const gfx::Size& size)
-    : dri_(dri),
-      bitmaps_(),
-      front_buffer_(0),
-      size_(size) {
-}
-
-DriSurface::~DriSurface() {
-}
-
-bool DriSurface::Initialize() {
-  for (size_t i = 0; i < arraysize(bitmaps_); ++i) {
-    bitmaps_[i].reset(CreateBuffer());
-    // TODO(dnicoara) Should select the configuration based on what the
-    // underlying system supports.
-    SkImageInfo info = SkImageInfo::Make(size_.width(),
-                                         size_.height(),
-                                         kPMColor_SkColorType,
-                                         kPremul_SkAlphaType);
-    if (!bitmaps_[i]->Initialize(info)) {
-      return false;
-    }
-  }
-
-  return true;
-}
-
-uint32_t DriSurface::GetFramebufferId() const {
-  CHECK(backbuffer());
-  return backbuffer()->framebuffer();
-}
-
-uint32_t DriSurface::GetHandle() const {
-  CHECK(backbuffer());
-  return backbuffer()->handle();
-}
-
-// This call is made after the hardware just started displaying our back buffer.
-// We need to update our pointer reference and synchronize the two buffers.
-void DriSurface::SwapBuffers() {
-  CHECK(frontbuffer());
-  CHECK(backbuffer());
-
-  // Update our front buffer pointer.
-  front_buffer_ ^= 1;
-
-  SkIRect device_damage;
-  frontbuffer()->canvas()->getClipDeviceBounds(&device_damage);
-  CopyRect(backbuffer(), frontbuffer(), SkIRectToRect(device_damage));
-}
-
-SkCanvas* DriSurface::GetDrawableForWidget() {
-  CHECK(backbuffer());
-  return backbuffer()->canvas();
-}
-
-DriBuffer* DriSurface::CreateBuffer() { return new DriBuffer(dri_); }
-
-}  // namespace gfx
diff --git a/ui/gfx/ozone/dri/dri_surface.h b/ui/gfx/ozone/dri/dri_surface.h
deleted file mode 100644
index 62d4832..0000000
--- a/ui/gfx/ozone/dri/dri_surface.h
+++ /dev/null
@@ -1,173 +0,0 @@
-// Copyright 2013 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 UI_GFX_OZONE_DRI_DRI_SURFACE_H_
-#define UI_GFX_OZONE_DRI_DRI_SURFACE_H_
-
-#include "base/compiler_specific.h"
-#include "base/memory/scoped_ptr.h"
-#include "ui/gfx/geometry/size.h"
-#include "ui/gfx/gfx_export.h"
-#include "ui/gfx/skia_util.h"
-
-class SkCanvas;
-
-namespace gfx {
-
-class DriBuffer;
-class DriWrapper;
-
-// DriSurface is used to represent a surface that can be scanned out
-// to a monitor. It will store the internal state associated with the drawing
-// surface associated with it. DriSurface also performs all the needed
-// operations to initialize and update the drawing surface.
-//
-// The implementation uses dumb buffers, which is used for software rendering.
-// The intent is to have one DriSurface implementation for a
-// HardwareDisplayController.
-//
-// DoubleBufferedSurface is intended to be the software analog to
-// EGLNativeSurface while DriSurface is intended to provide the glue
-// necessary to initialize and display the surface to the screen.
-//
-// The typical usage pattern is:
-// -----------------------------------------------------------------------------
-// HardwareDisplayController controller;
-// // Initialize controller
-//
-// DriSurface* surface = new DriSurface(dri_wrapper, size);
-// surface.Initialize();
-// controller.BindSurfaceToController(surface);
-//
-// while (true) {
-//   SkCanvas* canvas = surface->GetDrawableForWidget();
-//   DrawStuff(canvas);
-//   controller.SchedulePageFlip();
-//
-//   Wait for page flip event. The DRM page flip handler will call
-//   surface.SwapBuffers();
-// }
-//
-// delete surface;
-// -----------------------------------------------------------------------------
-// In the above example the wait consists of reading a DRM pageflip event from
-// the graphics card file descriptor. This is done by calling |drmHandleEvent|,
-// which will read and process the event. |drmHandleEvent| will call a callback
-// registered by |SchedulePageFlip| which will update the internal state.
-//
-// |SchedulePageFlip| can also be used to limit drawing to the screen's vsync
-// since page flips only happen on vsync. In a threaded environment a message
-// loop would listen on the graphics card file descriptor for an event and
-// |drmHandleEvent| would be called from the message loop. The event handler
-// would also be responsible for updating the renderer's state and signal that
-// it is OK to start drawing the next frame.
-//
-// The following example will illustrate the system state transitions in one
-// iteration of the above loop.
-//
-// 1. Both buffers contain the same image with b[0] being the front buffer
-// (star will represent the frontbuffer).
-// -------  -------
-// |     |  |     |
-// |     |  |     |
-// |     |  |     |
-// |     |  |     |
-// -------  -------
-// b[0]*    b[1]
-//
-// 2. Call |GetBackbuffer| to get a SkCanvas wrapper for the backbuffer and draw
-// to it.
-// -------  -------
-// |     |  |     |
-// |     |  |  d  |
-// |     |  |     |
-// |     |  |     |
-// -------  -------
-// b[0]*    b[1]
-//
-// 3. Call |SchedulePageFlip| to display the backbuffer. At this point we can't
-// modify b[0] because it is the frontbuffer and we can't modify b[1] since it
-// has been scheduled for pageflip. If we do draw in b[1] it is possible that
-// the pageflip and draw happen at the same time and we could get tearing.
-//
-// 4. The pageflip callback is called which will call |SwapSurfaces|. Before
-// |SwapSurfaces| is called the state is as following from the hardware's
-// perspective:
-// -------  -------
-// |     |  |     |
-// |     |  |  d  |
-// |     |  |     |
-// |     |  |     |
-// -------  -------
-// b[0]     b[1]*
-//
-// 5. |SwapSurfaces| will update out internal reference to the front buffer and
-// synchronize the damaged area such that both buffers are identical. The
-// damaged area is used from the SkCanvas clip.
-// -------  -------
-// |     |  |     |
-// |  d  |  |  d  |
-// |     |  |     |
-// |     |  |     |
-// -------  -------
-// b[0]     b[1]*
-//
-// The synchronization consists of copying the damaged area from the frontbuffer
-// to the backbuffer.
-//
-// At this point we're back to step 1 and can start a new draw iteration.
-class GFX_EXPORT DriSurface {
- public:
-  DriSurface(DriWrapper* dri, const gfx::Size& size);
-
-  virtual ~DriSurface();
-
-  // Used to allocate all necessary buffers for this surface. If the
-  // initialization succeeds, the device is ready to be used for drawing
-  // operations.
-  // Returns true if the initialization is successful, false otherwise.
-  bool Initialize();
-
-  // Returns the ID of the current backbuffer.
-  uint32_t GetFramebufferId() const;
-
-  // Returns the handle for the current backbuffer.
-  uint32_t GetHandle() const;
-
-  // Synchronizes and swaps the back buffer with the front buffer.
-  void SwapBuffers();
-
-  // Get a Skia canvas for a backbuffer.
-  SkCanvas* GetDrawableForWidget();
-
-  const gfx::Size& size() const { return size_; }
-
- private:
-  friend class HardwareDisplayController;
-
-  DriBuffer* frontbuffer() const { return bitmaps_[front_buffer_].get(); }
-  DriBuffer* backbuffer() const { return bitmaps_[front_buffer_ ^ 1].get(); }
-
-  // Used to create the backing buffers.
-  virtual DriBuffer* CreateBuffer();
-
-  // Stores the connection to the graphics card. Pointer not owned by this
-  // class.
-  DriWrapper* dri_;
-
-  // The actual buffers used for painting.
-  scoped_ptr<DriBuffer> bitmaps_[2];
-
-  // Keeps track of which bitmap is |buffers_| is the frontbuffer.
-  int front_buffer_;
-
-  // Surface size.
-  gfx::Size size_;
-
-  DISALLOW_COPY_AND_ASSIGN(DriSurface);
-};
-
-}  // namespace gfx
-
-#endif  // UI_GFX_OZONE_DRI_DRI_SURFACE_H_
diff --git a/ui/gfx/ozone/dri/dri_surface_factory.cc b/ui/gfx/ozone/dri/dri_surface_factory.cc
deleted file mode 100644
index 51725c3..0000000
--- a/ui/gfx/ozone/dri/dri_surface_factory.cc
+++ /dev/null
@@ -1,421 +0,0 @@
-// Copyright 2013 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 "ui/gfx/ozone/dri/dri_surface_factory.h"
-
-#include <drm.h>
-#include <errno.h>
-#include <xf86drm.h>
-
-#include "base/message_loop/message_loop.h"
-#include "third_party/skia/include/core/SkBitmap.h"
-#include "third_party/skia/include/core/SkDevice.h"
-#include "ui/gfx/native_widget_types.h"
-#include "ui/gfx/ozone/dri/dri_surface.h"
-#include "ui/gfx/ozone/dri/dri_vsync_provider.h"
-#include "ui/gfx/ozone/dri/dri_wrapper.h"
-#include "ui/gfx/ozone/dri/hardware_display_controller.h"
-#include "ui/gfx/ozone/surface_ozone_canvas.h"
-
-namespace gfx {
-
-namespace {
-
-const char kDefaultGraphicsCardPath[] = "/dev/dri/card0";
-const char kDPMSProperty[] = "DPMS";
-
-const gfx::AcceleratedWidget kDefaultWidgetHandle = 1;
-
-// TODO(dnicoara) Read the cursor plane size from the hardware.
-const gfx::Size kCursorSize(64, 64);
-
-// DRM callback on page flip events. This callback is triggered after the
-// page flip has happened and the backbuffer is now the new frontbuffer
-// The old frontbuffer is no longer used by the hardware and can be used for
-// future draw operations.
-//
-// |device| will contain a reference to the |DriSurface| object which
-// the event belongs to.
-//
-// TODO(dnicoara) When we have a FD handler for the DRM calls in the message
-// loop, we can move this function in the handler.
-void HandlePageFlipEvent(int fd,
-                         unsigned int frame,
-                         unsigned int seconds,
-                         unsigned int useconds,
-                         void* controller) {
-  static_cast<HardwareDisplayController*>(controller)
-      ->OnPageFlipEvent(frame, seconds, useconds);
-}
-
-uint32_t GetDriProperty(int fd, drmModeConnector* connector, const char* name) {
-  for (int i = 0; i < connector->count_props; ++i) {
-    drmModePropertyPtr property = drmModeGetProperty(fd, connector->props[i]);
-    if (!property)
-      continue;
-
-    if (strcmp(property->name, name) == 0) {
-      uint32_t id = property->prop_id;
-      drmModeFreeProperty(property);
-      return id;
-    }
-
-    drmModeFreeProperty(property);
-  }
-  return 0;
-}
-
-uint32_t GetCrtc(int fd, drmModeRes* resources, drmModeConnector* connector) {
-  // If the connector already has an encoder try to re-use.
-  if (connector->encoder_id) {
-    drmModeEncoder* encoder = drmModeGetEncoder(fd, connector->encoder_id);
-    if (encoder) {
-      if (encoder->crtc_id) {
-        uint32_t crtc = encoder->crtc_id;
-        drmModeFreeEncoder(encoder);
-        return crtc;
-      }
-      drmModeFreeEncoder(encoder);
-    }
-  }
-
-  // Try to find an encoder for the connector.
-  for (int i = 0; i < connector->count_encoders; ++i) {
-    drmModeEncoder* encoder = drmModeGetEncoder(fd, connector->encoders[i]);
-    if (!encoder)
-      continue;
-
-    for (int j = 0; j < resources->count_crtcs; ++j) {
-      // Check if the encoder is compatible with this CRTC
-      if (!(encoder->possible_crtcs & (1 << j)))
-        continue;
-
-      drmModeFreeEncoder(encoder);
-      return resources->crtcs[j];
-    }
-  }
-
-  return 0;
-}
-
-void UpdateCursorImage(DriSurface* cursor, const SkBitmap& image) {
-  SkRect damage;
-  image.getBounds(&damage);
-
-  // Clear to transparent in case |image| is smaller than the canvas.
-  SkCanvas* canvas = cursor->GetDrawableForWidget();
-  canvas->clear(SK_ColorTRANSPARENT);
-
-  SkRect clip;
-  clip.set(
-      0, 0, canvas->getDeviceSize().width(), canvas->getDeviceSize().height());
-  canvas->clipRect(clip, SkRegion::kReplace_Op);
-  canvas->drawBitmapRectToRect(image, &damage, damage);
-}
-
-// Adapter from SurfaceOzone to DriSurfaceFactory
-//
-// This class is derived from SurfaceOzone and owned by the compositor.
-//
-// For DRI the hadware surface & canvas are owned by the platform, so
-// the compositor merely owns this proxy object.
-//
-// TODO(spang): Should the compositor own any bits of the DriSurface?
-class DriSurfaceAdapter : public SurfaceOzoneCanvas {
- public:
-  DriSurfaceAdapter(gfx::AcceleratedWidget w, DriSurfaceFactory* dri)
-      : widget_(w), dri_(dri) {}
-  virtual ~DriSurfaceAdapter() {}
-
-  // SurfaceOzoneCanvas overrides:
-  virtual skia::RefPtr<SkCanvas> GetCanvas() OVERRIDE {
-    return skia::SharePtr(dri_->GetCanvasForWidget(widget_));
-  }
-  virtual bool ResizeCanvas(const gfx::Size& viewport_size) OVERRIDE {
-    NOTIMPLEMENTED();
-    return false;
-  }
-  virtual bool PresentCanvas() OVERRIDE {
-    return dri_->SchedulePageFlip(widget_);
-  }
-  virtual scoped_ptr<gfx::VSyncProvider> CreateVSyncProvider() OVERRIDE {
-    return dri_->CreateVSyncProvider(widget_);
-  }
-
- private:
-  gfx::AcceleratedWidget widget_;
-  DriSurfaceFactory* dri_;
-};
-
-}  // namespace
-
-DriSurfaceFactory::DriSurfaceFactory()
-    : drm_(),
-      state_(UNINITIALIZED),
-      controller_() {
-}
-
-DriSurfaceFactory::~DriSurfaceFactory() {
-  if (state_ == INITIALIZED)
-    ShutdownHardware();
-}
-
-SurfaceFactoryOzone::HardwareState
-DriSurfaceFactory::InitializeHardware() {
-  CHECK(state_ == UNINITIALIZED);
-
-  // TODO(dnicoara): Short-cut right now. What we want is to look at all the
-  // graphics devices available and select the primary one.
-  drm_.reset(CreateWrapper());
-  if (drm_->get_fd() < 0) {
-    LOG(ERROR) << "Cannot open graphics card '"
-               << kDefaultGraphicsCardPath << "': " << strerror(errno);
-    state_ = FAILED;
-    return state_;
-  }
-
-  cursor_surface_.reset(CreateSurface(kCursorSize));
-  if (!cursor_surface_->Initialize()) {
-    LOG(ERROR) << "Failed to initialize cursor surface";
-    state_ = FAILED;
-    return state_;
-  }
-
-  state_ = INITIALIZED;
-  return state_;
-}
-
-void DriSurfaceFactory::ShutdownHardware() {
-  CHECK(state_ == INITIALIZED);
-
-  controller_.reset();
-  drm_.reset();
-
-  state_ = UNINITIALIZED;
-}
-
-gfx::AcceleratedWidget DriSurfaceFactory::GetAcceleratedWidget() {
-  CHECK(state_ != FAILED);
-
-  // TODO(dnicoara) When there's more information on which display we want,
-  // then we can return the widget associated with the display.
-  // For now just assume we have 1 display device and return it.
-  if (!controller_.get())
-    controller_.reset(new HardwareDisplayController());
-
-  // TODO(dnicoara) We only have 1 display for now, so only 1 AcceleratedWidget.
-  // When we'll support multiple displays this needs to be changed to return a
-  // different handle for every display.
-  return kDefaultWidgetHandle;
-}
-
-scoped_ptr<SurfaceOzoneCanvas> DriSurfaceFactory::CreateCanvasForWidget(
-    gfx::AcceleratedWidget w) {
-  CHECK(state_ == INITIALIZED);
-  // TODO(dnicoara) Once we can handle multiple displays this needs to be
-  // changed.
-  CHECK(w == kDefaultWidgetHandle);
-
-  CHECK(controller_->get_state() ==
-        HardwareDisplayController::UNASSOCIATED);
-
-  // Until now the controller is just a stub. Initializing it will link it to a
-  // hardware display.
-  if (!InitializeControllerForPrimaryDisplay(drm_.get(), controller_.get())) {
-    LOG(ERROR) << "Failed to initialize controller";
-    return scoped_ptr<SurfaceOzoneCanvas>();
-  }
-
-  // Create a surface suitable for the current controller.
-  scoped_ptr<DriSurface> surface(CreateSurface(
-      Size(controller_->get_mode().hdisplay,
-           controller_->get_mode().vdisplay)));
-
-  if (!surface->Initialize()) {
-    LOG(ERROR) << "Failed to initialize surface";
-    return scoped_ptr<SurfaceOzoneCanvas>();
-  }
-
-  // Bind the surface to the controller. This will register the backing buffers
-  // with the hardware CRTC such that we can show the buffers. The controller
-  // takes ownership of the surface.
-  if (!controller_->BindSurfaceToController(surface.Pass())) {
-    LOG(ERROR) << "Failed to bind surface to controller";
-    return scoped_ptr<SurfaceOzoneCanvas>();
-  }
-
-  // Initial cursor set.
-  ResetCursor();
-
-  return make_scoped_ptr<SurfaceOzoneCanvas>(new DriSurfaceAdapter(w, this));
-}
-
-bool DriSurfaceFactory::LoadEGLGLES2Bindings(
-      AddGLLibraryCallback add_gl_library,
-      SetGLGetProcAddressProcCallback set_gl_get_proc_address) {
-  return false;
-}
-
-bool DriSurfaceFactory::SchedulePageFlip(gfx::AcceleratedWidget w) {
-  CHECK(state_ == INITIALIZED);
-  // TODO(dnicoara) Change this CHECK once we're running with the threaded
-  // compositor.
-  CHECK(base::MessageLoopForUI::IsCurrent());
-
-  // TODO(dnicoara) Once we can handle multiple displays this needs to be
-  // changed.
-  CHECK(w == kDefaultWidgetHandle);
-
-  if (!controller_->SchedulePageFlip())
-    return false;
-
-  // Only wait for the page flip event to finish if it was properly scheduled.
-  //
-  // TODO(dnicoara) The following call will wait for the page flip event to
-  // complete. This means that it will block until the next VSync. Ideally the
-  // wait should happen in the message loop. The message loop would then
-  // schedule the next draw event. Alternatively, the VSyncProvider could be
-  // used to schedule the next draw. Unfortunately, at this point,
-  // DriOutputDevice does not provide any means to use any of the above
-  // solutions. Note that if the DRM callback does not schedule the next draw,
-  // then some sort of synchronization needs to take place since starting a new
-  // draw before the page flip happened is considered an error. However we can
-  // not use any lock constructs unless we're using the threaded compositor.
-  // Note that the following call does not use any locks, so it is safe to be
-  // made on the UI thread (thought not ideal).
-  WaitForPageFlipEvent(drm_->get_fd());
-
-  return true;
-}
-
-SkCanvas* DriSurfaceFactory::GetCanvasForWidget(
-    gfx::AcceleratedWidget w) {
-  CHECK(state_ == INITIALIZED);
-  CHECK_EQ(kDefaultWidgetHandle, w);
-  return controller_->get_surface()->GetDrawableForWidget();
-}
-
-scoped_ptr<gfx::VSyncProvider> DriSurfaceFactory::CreateVSyncProvider(
-    gfx::AcceleratedWidget w) {
-  CHECK(state_ == INITIALIZED);
-  return scoped_ptr<VSyncProvider>(new DriVSyncProvider(controller_.get()));
-}
-
-void DriSurfaceFactory::SetHardwareCursor(gfx::AcceleratedWidget window,
-                                          const SkBitmap& image,
-                                          const gfx::Point& location) {
-  cursor_bitmap_ = image;
-  cursor_location_ = location;
-
-  if (state_ != INITIALIZED)
-    return;
-
-  ResetCursor();
-}
-
-void DriSurfaceFactory::MoveHardwareCursor(gfx::AcceleratedWidget window,
-                                           const gfx::Point& location) {
-  cursor_location_ = location;
-
-  if (state_ != INITIALIZED)
-    return;
-
-  controller_->MoveCursor(location);
-}
-
-void DriSurfaceFactory::UnsetHardwareCursor(gfx::AcceleratedWidget window) {
-  cursor_bitmap_.reset();
-
-  if (state_ != INITIALIZED)
-    return;
-
-  ResetCursor();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// DriSurfaceFactory private
-
-DriSurface* DriSurfaceFactory::CreateSurface(const gfx::Size& size) {
-  return new DriSurface(drm_.get(), size);
-}
-
-DriWrapper* DriSurfaceFactory::CreateWrapper() {
-  return new DriWrapper(kDefaultGraphicsCardPath);
-}
-
-bool DriSurfaceFactory::InitializeControllerForPrimaryDisplay(
-    DriWrapper* drm,
-    HardwareDisplayController* controller) {
-  CHECK(state_ == SurfaceFactoryOzone::INITIALIZED);
-
-  drmModeRes* resources = drmModeGetResources(drm->get_fd());
-
-  // Search for an active connector.
-  for (int i = 0; i < resources->count_connectors; ++i) {
-    drmModeConnector* connector = drmModeGetConnector(
-        drm->get_fd(),
-        resources->connectors[i]);
-
-    if (!connector)
-      continue;
-
-    if (connector->connection != DRM_MODE_CONNECTED ||
-        connector->count_modes == 0) {
-      drmModeFreeConnector(connector);
-      continue;
-    }
-
-    uint32_t crtc = GetCrtc(drm->get_fd(), resources, connector);
-
-    if (!crtc)
-      continue;
-
-    uint32_t dpms_property_id = GetDriProperty(drm->get_fd(),
-                                               connector,
-                                               kDPMSProperty);
-
-    // TODO(dnicoara) Select one mode for now. In the future we may need to
-    // save all the modes and allow the user to choose a specific mode. Or
-    // even some fullscreen applications may need to change the mode.
-    controller->SetControllerInfo(
-        drm,
-        connector->connector_id,
-        crtc,
-        dpms_property_id,
-        connector->modes[0]);
-
-    drmModeFreeConnector(connector);
-
-    return true;
-  }
-
-  return false;
-}
-
-void DriSurfaceFactory::WaitForPageFlipEvent(int fd) {
-  drmEventContext drm_event;
-  drm_event.version = DRM_EVENT_CONTEXT_VERSION;
-  drm_event.page_flip_handler = HandlePageFlipEvent;
-  drm_event.vblank_handler = NULL;
-
-  // Wait for the page-flip to complete.
-  drmHandleEvent(fd, &drm_event);
-}
-
-void DriSurfaceFactory::ResetCursor() {
-  if (!cursor_bitmap_.empty()) {
-    // Draw new cursor into backbuffer.
-    UpdateCursorImage(cursor_surface_.get(), cursor_bitmap_);
-
-    // Reset location & buffer.
-    controller_->MoveCursor(cursor_location_);
-    controller_->SetCursor(cursor_surface_.get());
-  } else {
-    // No cursor set.
-    controller_->UnsetCursor();
-  }
-}
-
-
-}  // namespace gfx
diff --git a/ui/gfx/ozone/dri/dri_surface_factory.h b/ui/gfx/ozone/dri/dri_surface_factory.h
deleted file mode 100644
index 993dc07..0000000
--- a/ui/gfx/ozone/dri/dri_surface_factory.h
+++ /dev/null
@@ -1,89 +0,0 @@
-// Copyright 2013 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 UI_GFX_OZONE_DRI_DRI_SURFACE_FACTORY_H_
-#define UI_GFX_OZONE_DRI_DRI_SURFACE_FACTORY_H_
-
-#include "base/memory/scoped_ptr.h"
-#include "third_party/skia/include/core/SkBitmap.h"
-#include "ui/gfx/ozone/surface_factory_ozone.h"
-
-namespace gfx {
-
-class DriSurface;
-class DriWrapper;
-class HardwareDisplayController;
-class SurfaceOzoneCanvas;
-
-// SurfaceFactoryOzone implementation on top of DRM/KMS using dumb buffers.
-// This implementation is used in conjunction with the software rendering
-// path.
-class GFX_EXPORT DriSurfaceFactory : public SurfaceFactoryOzone {
- public:
-  DriSurfaceFactory();
-  virtual ~DriSurfaceFactory();
-
-  virtual HardwareState InitializeHardware() OVERRIDE;
-  virtual void ShutdownHardware() OVERRIDE;
-
-  virtual gfx::AcceleratedWidget GetAcceleratedWidget() OVERRIDE;
-
-  virtual scoped_ptr<SurfaceOzoneCanvas> CreateCanvasForWidget(
-      gfx::AcceleratedWidget w) OVERRIDE;
-
-  virtual bool LoadEGLGLES2Bindings(
-      AddGLLibraryCallback add_gl_library,
-      SetGLGetProcAddressProcCallback set_gl_get_proc_address) OVERRIDE;
-
-  virtual bool SchedulePageFlip(gfx::AcceleratedWidget w);
-
-  virtual SkCanvas* GetCanvasForWidget(gfx::AcceleratedWidget w);
-
-  virtual scoped_ptr<gfx::VSyncProvider> CreateVSyncProvider(
-      gfx::AcceleratedWidget w);
-
-  void SetHardwareCursor(AcceleratedWidget window,
-                         const SkBitmap& image,
-                         const gfx::Point& location);
-
-  void MoveHardwareCursor(AcceleratedWidget window, const gfx::Point& location);
-
-  void UnsetHardwareCursor(AcceleratedWidget window);
-
- private:
-  virtual DriSurface* CreateSurface(const gfx::Size& size);
-
-  virtual DriWrapper* CreateWrapper();
-
-  virtual bool InitializeControllerForPrimaryDisplay(
-    DriWrapper* drm,
-    HardwareDisplayController* controller);
-
-  // Blocks until a DRM event is read.
-  // TODO(dnicoara) Remove once we can safely move DRM event processing in the
-  // message loop while correctly signaling when we're done displaying the
-  // pending frame.
-  virtual void WaitForPageFlipEvent(int fd);
-
-  // Draw the last set cursor & update the cursor plane.
-  void ResetCursor();
-
-  scoped_ptr<DriWrapper> drm_;
-
-  HardwareState state_;
-
-  // Active output.
-  scoped_ptr<HardwareDisplayController> controller_;
-
-  scoped_ptr<DriSurface> cursor_surface_;
-
-  SkBitmap cursor_bitmap_;
-  gfx::Point cursor_location_;
-
-  DISALLOW_COPY_AND_ASSIGN(DriSurfaceFactory);
-};
-
-}  // namespace gfx
-
-#endif  // UI_GFX_OZONE_DRI_DRI_SURFACE_FACTORY_H_
diff --git a/ui/gfx/ozone/dri/dri_surface_factory_unittest.cc b/ui/gfx/ozone/dri/dri_surface_factory_unittest.cc
deleted file mode 100644
index 446fdb9..0000000
--- a/ui/gfx/ozone/dri/dri_surface_factory_unittest.cc
+++ /dev/null
@@ -1,364 +0,0 @@
-// Copyright 2013 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 <vector>
-
-#include "base/memory/scoped_ptr.h"
-#include "base/message_loop/message_loop.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/skia/include/core/SkCanvas.h"
-#include "third_party/skia/include/core/SkColor.h"
-#include "ui/gfx/ozone/dri/dri_buffer.h"
-#include "ui/gfx/ozone/dri/dri_surface.h"
-#include "ui/gfx/ozone/dri/dri_surface_factory.h"
-#include "ui/gfx/ozone/dri/dri_wrapper.h"
-#include "ui/gfx/ozone/dri/hardware_display_controller.h"
-#include "ui/gfx/ozone/surface_factory_ozone.h"
-#include "ui/gfx/ozone/surface_ozone_canvas.h"
-
-namespace {
-
-const drmModeModeInfo kDefaultMode =
-    {0, 6, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, {'\0'}};
-
-// Mock file descriptor ID.
-const int kFd = 3;
-
-// Mock connector ID.
-const uint32_t kConnectorId = 1;
-
-// Mock CRTC ID.
-const uint32_t kCrtcId = 1;
-
-const uint32_t kDPMSPropertyId = 1;
-
-const gfx::AcceleratedWidget kDefaultWidgetHandle = 1;
-
-// The real DriWrapper makes actual DRM calls which we can't use in unit tests.
-class MockDriWrapper : public gfx::DriWrapper {
- public:
-  MockDriWrapper(int fd) : DriWrapper(""),
-                                add_framebuffer_expectation_(true),
-                                page_flip_expectation_(true) {
-    fd_ = fd;
-  }
-
-  virtual ~MockDriWrapper() { fd_ = -1; }
-
-  virtual drmModeCrtc* GetCrtc(uint32_t crtc_id) OVERRIDE {
-    return new drmModeCrtc;
-  }
-
-  virtual void FreeCrtc(drmModeCrtc* crtc) OVERRIDE {
-    delete crtc;
-  }
-
-  virtual bool SetCrtc(uint32_t crtc_id,
-                       uint32_t framebuffer,
-                       uint32_t* connectors,
-                       drmModeModeInfo* mode) OVERRIDE {
-    return true;
-  }
-
-  virtual bool SetCrtc(drmModeCrtc* crtc, uint32_t* connectors) OVERRIDE {
-    return true;
-  }
-
-  virtual bool AddFramebuffer(const drmModeModeInfo& mode,
-                              uint8_t depth,
-                              uint8_t bpp,
-                              uint32_t stride,
-                              uint32_t handle,
-                              uint32_t* framebuffer) OVERRIDE {
-    return add_framebuffer_expectation_;
-  }
-
-  virtual bool RemoveFramebuffer(uint32_t framebuffer) OVERRIDE { return true; }
-
-  virtual bool PageFlip(uint32_t crtc_id,
-                        uint32_t framebuffer,
-                        void* data) OVERRIDE {
-    static_cast<gfx::HardwareDisplayController*>(data)->get_surface()
-        ->SwapBuffers();
-    return page_flip_expectation_;
-  }
-
-  virtual bool ConnectorSetProperty(uint32_t connector_id,
-                                    uint32_t property_id,
-                                    uint64_t value) OVERRIDE { return true; }
-
-  virtual bool SetCursor(uint32_t crtc_id,
-                         uint32_t handle,
-                         uint32_t width,
-                         uint32_t height) OVERRIDE { return true; }
-
-  virtual bool MoveCursor(uint32_t crtc_id, int x, int y) OVERRIDE {
-    return true;
-  }
-
-  void set_add_framebuffer_expectation(bool state) {
-    add_framebuffer_expectation_ = state;
-  }
-
-  void set_page_flip_expectation(bool state) {
-    page_flip_expectation_ = state;
-  }
-
- private:
-  bool add_framebuffer_expectation_;
-  bool page_flip_expectation_;
-
-  DISALLOW_COPY_AND_ASSIGN(MockDriWrapper);
-};
-
-class MockDriBuffer : public gfx::DriBuffer {
- public:
-  MockDriBuffer(gfx::DriWrapper* dri) : DriBuffer(dri) {}
-  virtual ~MockDriBuffer() {
-    surface_.clear();
-  }
-
-  virtual bool Initialize(const SkImageInfo& info) OVERRIDE {
-    surface_ = skia::AdoptRef(SkSurface::NewRaster(info));
-    surface_->getCanvas()->clear(SK_ColorBLACK);
-
-    return true;
-  }
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(MockDriBuffer);
-};
-
-class MockDriSurface : public gfx::DriSurface {
- public:
-  MockDriSurface(gfx::DriWrapper* dri, const gfx::Size& size)
-      : DriSurface(dri, size), dri_(dri) {}
-  virtual ~MockDriSurface() {}
-
-  const std::vector<MockDriBuffer*>& bitmaps() const { return bitmaps_; }
-
- private:
-  virtual gfx::DriBuffer* CreateBuffer() OVERRIDE {
-    MockDriBuffer* bitmap = new MockDriBuffer(dri_);
-    bitmaps_.push_back(bitmap);
-
-    return bitmap;
-  }
-
-  gfx::DriWrapper* dri_;                 // Not owned.
-  std::vector<MockDriBuffer*> bitmaps_;  // Not owned.
-
-  DISALLOW_COPY_AND_ASSIGN(MockDriSurface);
-};
-
-// SSFO would normally allocate DRM resources. We can't rely on having a DRM
-// backend to allocate and display our buffers. Thus, we replace these
-// resources with stubs. For DRM calls, we simply use stubs that do nothing and
-// for buffers we use the default SkBitmap allocator.
-class MockDriSurfaceFactory
-    : public gfx::DriSurfaceFactory {
- public:
-  MockDriSurfaceFactory()
-      : DriSurfaceFactory(),
-        mock_drm_(NULL),
-        drm_wrapper_expectation_(true),
-        initialize_controller_expectation_(true) {}
-  virtual ~MockDriSurfaceFactory() {};
-
-  void set_drm_wrapper_expectation(bool state) {
-    drm_wrapper_expectation_ = state;
-  }
-
-  void set_initialize_controller_expectation(bool state) {
-    initialize_controller_expectation_ = state;
-  }
-
-  MockDriWrapper* get_drm() const {
-    return mock_drm_;
-  }
-
-  const std::vector<MockDriSurface*>& get_surfaces() const { return surfaces_; }
-
- private:
-  virtual gfx::DriSurface* CreateSurface(const gfx::Size& size) OVERRIDE {
-    MockDriSurface* surface = new MockDriSurface(mock_drm_, size);
-    surfaces_.push_back(surface);
-    return surface;
-  }
-
-  virtual gfx::DriWrapper* CreateWrapper() OVERRIDE {
-    if (drm_wrapper_expectation_)
-      mock_drm_ = new MockDriWrapper(kFd);
-    else
-      mock_drm_ = new MockDriWrapper(-1);
-
-    return mock_drm_;
-  }
-
-  // Normally we'd use DRM to figure out the controller configuration. But we
-  // can't use DRM in unit tests, so we just create a fake configuration.
-  virtual bool InitializeControllerForPrimaryDisplay(
-      gfx::DriWrapper* drm,
-      gfx::HardwareDisplayController* controller) OVERRIDE {
-    if (initialize_controller_expectation_) {
-      controller->SetControllerInfo(drm,
-                                    kConnectorId,
-                                    kCrtcId,
-                                    kDPMSPropertyId,
-                                    kDefaultMode);
-      return true;
-    } else {
-      return false;
-    }
-  }
-
-  virtual void WaitForPageFlipEvent(int fd) OVERRIDE {}
-
-  MockDriWrapper* mock_drm_;
-  bool drm_wrapper_expectation_;
-  bool initialize_controller_expectation_;
-  std::vector<MockDriSurface*> surfaces_;  // Not owned.
-
-  DISALLOW_COPY_AND_ASSIGN(MockDriSurfaceFactory);
-};
-
-}  // namespace
-
-class DriSurfaceFactoryTest : public testing::Test {
- public:
-  DriSurfaceFactoryTest() {}
-
-  virtual void SetUp() OVERRIDE;
-  virtual void TearDown() OVERRIDE;
- protected:
-  scoped_ptr<base::MessageLoop> message_loop_;
-  scoped_ptr<MockDriSurfaceFactory> factory_;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(DriSurfaceFactoryTest);
-};
-
-void DriSurfaceFactoryTest::SetUp() {
-  message_loop_.reset(new base::MessageLoopForUI);
-  factory_.reset(new MockDriSurfaceFactory());
-}
-
-void DriSurfaceFactoryTest::TearDown() {
-  factory_.reset();
-  message_loop_.reset();
-}
-
-TEST_F(DriSurfaceFactoryTest, FailInitialization) {
-  factory_->set_drm_wrapper_expectation(false);
-
-  EXPECT_EQ(gfx::SurfaceFactoryOzone::FAILED, factory_->InitializeHardware());
-}
-
-TEST_F(DriSurfaceFactoryTest, SuccessfulInitialization) {
-  EXPECT_EQ(gfx::SurfaceFactoryOzone::INITIALIZED,
-            factory_->InitializeHardware());
-}
-
-TEST_F(DriSurfaceFactoryTest, FailSurfaceInitialization) {
-  factory_->set_initialize_controller_expectation(false);
-
-  EXPECT_EQ(gfx::SurfaceFactoryOzone::INITIALIZED,
-            factory_->InitializeHardware());
-
-  gfx::AcceleratedWidget w = factory_->GetAcceleratedWidget();
-  EXPECT_EQ(kDefaultWidgetHandle, w);
-
-  EXPECT_FALSE(factory_->CreateCanvasForWidget(w));
-}
-
-TEST_F(DriSurfaceFactoryTest, FailBindingSurfaceToController) {
-  EXPECT_EQ(gfx::SurfaceFactoryOzone::INITIALIZED,
-            factory_->InitializeHardware());
-
-  factory_->get_drm()->set_add_framebuffer_expectation(false);
-
-  gfx::AcceleratedWidget w = factory_->GetAcceleratedWidget();
-  EXPECT_EQ(kDefaultWidgetHandle, w);
-
-  EXPECT_FALSE(factory_->CreateCanvasForWidget(w));
-}
-
-TEST_F(DriSurfaceFactoryTest, SuccessfulWidgetRealization) {
-  EXPECT_EQ(gfx::SurfaceFactoryOzone::INITIALIZED,
-            factory_->InitializeHardware());
-
-  gfx::AcceleratedWidget w = factory_->GetAcceleratedWidget();
-  EXPECT_EQ(kDefaultWidgetHandle, w);
-
-  EXPECT_TRUE(factory_->CreateCanvasForWidget(w));
-}
-
-TEST_F(DriSurfaceFactoryTest, FailSchedulePageFlip) {
-  EXPECT_EQ(gfx::SurfaceFactoryOzone::INITIALIZED,
-            factory_->InitializeHardware());
-
-  factory_->get_drm()->set_page_flip_expectation(false);
-
-  gfx::AcceleratedWidget w = factory_->GetAcceleratedWidget();
-  EXPECT_EQ(kDefaultWidgetHandle, w);
-
-  scoped_ptr<gfx::SurfaceOzoneCanvas> surf = factory_->CreateCanvasForWidget(w);
-  EXPECT_TRUE(surf);
-
-  EXPECT_FALSE(factory_->SchedulePageFlip(w));
-}
-
-TEST_F(DriSurfaceFactoryTest, SuccessfulSchedulePageFlip) {
-  EXPECT_EQ(gfx::SurfaceFactoryOzone::INITIALIZED,
-            factory_->InitializeHardware());
-
-  gfx::AcceleratedWidget w = factory_->GetAcceleratedWidget();
-  EXPECT_EQ(kDefaultWidgetHandle, w);
-
-  scoped_ptr<gfx::SurfaceOzoneCanvas> surf = factory_->CreateCanvasForWidget(w);
-  EXPECT_TRUE(surf);
-
-  EXPECT_TRUE(factory_->SchedulePageFlip(w));
-}
-
-TEST_F(DriSurfaceFactoryTest, SetCursorImage) {
-  EXPECT_EQ(gfx::SurfaceFactoryOzone::INITIALIZED,
-            factory_->InitializeHardware());
-
-  gfx::AcceleratedWidget w = factory_->GetAcceleratedWidget();
-  EXPECT_EQ(kDefaultWidgetHandle, w);
-
-  scoped_ptr<gfx::SurfaceOzoneCanvas> surf = factory_->CreateCanvasForWidget(w);
-  EXPECT_TRUE(surf);
-
-  SkBitmap image;
-  SkImageInfo info = SkImageInfo::Make(
-      6, 4, kPMColor_SkColorType, kPremul_SkAlphaType);
-  image.allocPixels(info);
-  image.eraseColor(SK_ColorWHITE);
-
-  factory_->SetHardwareCursor(w, image, gfx::Point(4, 2));
-  const std::vector<MockDriSurface*>& surfaces = factory_->get_surfaces();
-
-  // The first surface is the cursor surface since it is allocated early in the
-  // initialization process.
-  const std::vector<MockDriBuffer*>& bitmaps = surfaces[0]->bitmaps();
-
-  // The surface should have been initialized to a double-buffered surface.
-  EXPECT_EQ(2u, bitmaps.size());
-
-  SkBitmap cursor;
-  bitmaps[1]->canvas()->readPixels(&cursor, 0, 0);
-
-  // Check that the frontbuffer is displaying the right image as set above.
-  for (int i = 0; i < cursor.height(); ++i) {
-    for (int j = 0; j < cursor.width(); ++j) {
-      if (j < info.width() && i < info.height())
-        EXPECT_EQ(SK_ColorWHITE, cursor.getColor(j, i));
-      else
-        EXPECT_EQ(static_cast<SkColor>(SK_ColorTRANSPARENT),
-                  cursor.getColor(j, i));
-    }
-  }
-}
diff --git a/ui/gfx/ozone/dri/dri_surface_unittest.cc b/ui/gfx/ozone/dri/dri_surface_unittest.cc
deleted file mode 100644
index 4ddadb5..0000000
--- a/ui/gfx/ozone/dri/dri_surface_unittest.cc
+++ /dev/null
@@ -1,214 +0,0 @@
-// Copyright 2013 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 "testing/gtest/include/gtest/gtest.h"
-#include "third_party/skia/include/core/SkCanvas.h"
-#include "third_party/skia/include/core/SkColor.h"
-#include "third_party/skia/include/core/SkDevice.h"
-#include "ui/gfx/ozone/dri/dri_buffer.h"
-#include "ui/gfx/ozone/dri/dri_surface.h"
-#include "ui/gfx/ozone/dri/hardware_display_controller.h"
-
-namespace {
-
-// Create a basic mode for a 6x4 screen.
-const drmModeModeInfo kDefaultMode =
-    {0, 6, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, {'\0'}};
-
-// Mock file descriptor ID.
-const int kFd = 3;
-
-// Mock connector ID.
-const uint32_t kConnectorId = 1;
-
-// Mock CRTC ID.
-const uint32_t kCrtcId = 1;
-
-// Mock DPMS property ID.
-const uint32_t kDPMSPropertyId = 1;
-
-class MockDriWrapper : public gfx::DriWrapper {
- public:
-  MockDriWrapper() : DriWrapper(""), id_(1) { fd_ = kFd; }
-  virtual ~MockDriWrapper() { fd_ = -1; }
-
-  virtual drmModeCrtc* GetCrtc(uint32_t crtc_id) OVERRIDE { return NULL; }
-  virtual void FreeCrtc(drmModeCrtc* crtc) OVERRIDE {}
-  virtual bool SetCrtc(uint32_t crtc_id,
-                       uint32_t framebuffer,
-                       uint32_t* connectors,
-                       drmModeModeInfo* mode) OVERRIDE { return true; }
-  virtual bool SetCrtc(drmModeCrtc* crtc, uint32_t* connectors) OVERRIDE {
-    return true;
-  }
-  virtual bool AddFramebuffer(const drmModeModeInfo& mode,
-                              uint8_t depth,
-                              uint8_t bpp,
-                              uint32_t stride,
-                              uint32_t handle,
-                              uint32_t* framebuffer) OVERRIDE {
-    *framebuffer = id_++;
-    return true;
-  }
-  virtual bool RemoveFramebuffer(uint32_t framebuffer) OVERRIDE { return true; }
-  virtual bool PageFlip(uint32_t crtc_id,
-                        uint32_t framebuffer,
-                        void* data) OVERRIDE {
-    return true;
-  }
-  virtual bool ConnectorSetProperty(uint32_t connector_id,
-                                    uint32_t property_id,
-                                    uint64_t value) OVERRIDE { return true; }
-
- private:
-  int id_;
-  DISALLOW_COPY_AND_ASSIGN(MockDriWrapper);
-};
-
-class MockDriBuffer : public gfx::DriBuffer {
- public:
-  MockDriBuffer(gfx::DriWrapper* dri, bool initialize_expectation)
-      : DriBuffer(dri), initialize_expectation_(initialize_expectation) {}
-  virtual ~MockDriBuffer() {
-    surface_.clear();
-  }
-
-  virtual bool Initialize(const SkImageInfo& info) OVERRIDE {
-    if (!initialize_expectation_)
-      return false;
-
-    surface_ = skia::AdoptRef(SkSurface::NewRaster(info));
-    surface_->getCanvas()->clear(SK_ColorBLACK);
-
-    return true;
-  }
-
- private:
-  bool initialize_expectation_;
-
-  DISALLOW_COPY_AND_ASSIGN(MockDriBuffer);
-};
-
-class MockDriSurface : public gfx::DriSurface {
- public:
-  MockDriSurface(gfx::DriWrapper* dri, const gfx::Size& size)
-      : DriSurface(dri, size), dri_(dri), initialize_expectation_(true) {}
-  virtual ~MockDriSurface() {}
-
-  void set_initialize_expectation(bool state) {
-    initialize_expectation_ = state;
-  }
-
- private:
-  virtual gfx::DriBuffer* CreateBuffer() OVERRIDE {
-    return new MockDriBuffer(dri_, initialize_expectation_);
-  }
-
-  gfx::DriWrapper* dri_;
-  bool initialize_expectation_;
-
-  DISALLOW_COPY_AND_ASSIGN(MockDriSurface);
-};
-
-}  // namespace
-
-class DriSurfaceTest : public testing::Test {
- public:
-  DriSurfaceTest() {}
-
-  virtual void SetUp() OVERRIDE;
-  virtual void TearDown() OVERRIDE;
-
- protected:
-  scoped_ptr<MockDriWrapper> drm_;
-  scoped_ptr<gfx::HardwareDisplayController> controller_;
-  scoped_ptr<MockDriSurface> surface_;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(DriSurfaceTest);
-};
-
-void DriSurfaceTest::SetUp() {
-  drm_.reset(new MockDriWrapper());
-  controller_.reset(new gfx::HardwareDisplayController());
-  controller_->SetControllerInfo(
-      drm_.get(), kConnectorId, kCrtcId, kDPMSPropertyId, kDefaultMode);
-
-  surface_.reset(new MockDriSurface(drm_.get(),
-                                    gfx::Size(kDefaultMode.hdisplay,
-                                              kDefaultMode.vdisplay)));
-}
-
-void DriSurfaceTest::TearDown() {
-  surface_.reset();
-  controller_.reset();
-  drm_.reset();
-}
-
-TEST_F(DriSurfaceTest, FailInitialization) {
-  surface_->set_initialize_expectation(false);
-  EXPECT_FALSE(surface_->Initialize());
-}
-
-TEST_F(DriSurfaceTest, SuccessfulInitialization) {
-  EXPECT_TRUE(surface_->Initialize());
-}
-
-TEST_F(DriSurfaceTest, CheckFBIDOnSwap) {
-  EXPECT_TRUE(surface_->Initialize());
-  controller_->BindSurfaceToController(
-      surface_.PassAs<gfx::DriSurface>());
-
-  // Check that the framebuffer ID is correct.
-  EXPECT_EQ(2u, controller_->get_surface()->GetFramebufferId());
-
-  controller_->get_surface()->SwapBuffers();
-
-  EXPECT_EQ(1u, controller_->get_surface()->GetFramebufferId());
-}
-
-TEST_F(DriSurfaceTest, CheckPixelPointerOnSwap) {
-  EXPECT_TRUE(surface_->Initialize());
-
-  void* bitmap_pixels1 = surface_->GetDrawableForWidget()->getDevice()
-      ->accessBitmap(false).getPixels();
-
-  surface_->SwapBuffers();
-
-  void* bitmap_pixels2 = surface_->GetDrawableForWidget()->getDevice()
-      ->accessBitmap(false).getPixels();
-
-  // Check that once the buffers have been swapped the drawable's underlying
-  // pixels have been changed.
-  EXPECT_NE(bitmap_pixels1, bitmap_pixels2);
-}
-
-TEST_F(DriSurfaceTest, CheckCorrectBufferSync) {
-  EXPECT_TRUE(surface_->Initialize());
-
-  SkCanvas* canvas = surface_->GetDrawableForWidget();
-  SkRect clip;
-  // Modify part of the canvas.
-  clip.set(0, 0,
-           canvas->getDeviceSize().width() / 2,
-           canvas->getDeviceSize().height() / 2);
-  canvas->clipRect(clip, SkRegion::kReplace_Op);
-
-  canvas->drawColor(SK_ColorWHITE);
-
-  surface_->SwapBuffers();
-
-  // Verify that the modified contents have been copied over on swap (make sure
-  // the 2 buffers have the same content).
-  for (int i = 0; i < canvas->getDeviceSize().height(); ++i) {
-    for (int j = 0; j < canvas->getDeviceSize().width(); ++j) {
-      if (i < clip.height() && j < clip.width())
-        EXPECT_EQ(SK_ColorWHITE,
-                  canvas->getDevice()->accessBitmap(false).getColor(j, i));
-      else
-        EXPECT_EQ(SK_ColorBLACK,
-                  canvas->getDevice()->accessBitmap(false).getColor(j, i));
-    }
-  }
-}
diff --git a/ui/gfx/ozone/dri/dri_vsync_provider.cc b/ui/gfx/ozone/dri/dri_vsync_provider.cc
deleted file mode 100644
index b5717e6..0000000
--- a/ui/gfx/ozone/dri/dri_vsync_provider.cc
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2013 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 "ui/gfx/ozone/dri/dri_vsync_provider.h"
-
-#include "base/time/time.h"
-#include "ui/gfx/ozone/dri/hardware_display_controller.h"
-
-namespace gfx {
-
-DriVSyncProvider::DriVSyncProvider(HardwareDisplayController* controller)
-    : controller_(controller) {}
-
-DriVSyncProvider::~DriVSyncProvider() {}
-
-void DriVSyncProvider::GetVSyncParameters(const UpdateVSyncCallback& callback) {
-  // The value is invalid, so we can't update the parameters.
-  if (controller_->get_time_of_last_flip() == 0)
-    return;
-
-  // Stores the time of the last refresh.
-  base::TimeTicks timebase =
-      base::TimeTicks::FromInternalValue(controller_->get_time_of_last_flip());
-  // Stores the refresh rate.
-  base::TimeDelta interval =
-      base::TimeDelta::FromSeconds(1) / controller_->get_mode().vrefresh;
-
-  callback.Run(timebase, interval);
-}
-
-}  // namespace gfx
diff --git a/ui/gfx/ozone/dri/dri_vsync_provider.h b/ui/gfx/ozone/dri/dri_vsync_provider.h
deleted file mode 100644
index b6cb604..0000000
--- a/ui/gfx/ozone/dri/dri_vsync_provider.h
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2013 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 UI_GFX_OZONE_IMPL_DRI_VSYNC_PROVIDER_H_
-#define UI_GFX_OZONE_IMPL_DRI_VSYNC_PROVIDER_H_
-
-#include "ui/gfx/vsync_provider.h"
-
-namespace gfx {
-
-class HardwareDisplayController;
-
-class DriVSyncProvider : public VSyncProvider {
- public:
-  DriVSyncProvider(HardwareDisplayController* controller);
-  virtual ~DriVSyncProvider();
-
-  virtual void GetVSyncParameters(const UpdateVSyncCallback& callback) OVERRIDE;
-
- private:
-  HardwareDisplayController* controller_;
-
-  DISALLOW_COPY_AND_ASSIGN(DriVSyncProvider);
-};
-
-}  // namespace gfx
-
-#endif  // UI_GFX_OZONE_IMPL_DRI_VSYNC_PROVIDER_H_
diff --git a/ui/gfx/ozone/dri/dri_wrapper.cc b/ui/gfx/ozone/dri/dri_wrapper.cc
deleted file mode 100644
index 7eec1a7..0000000
--- a/ui/gfx/ozone/dri/dri_wrapper.cc
+++ /dev/null
@@ -1,106 +0,0 @@
-// Copyright 2013 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 "ui/gfx/ozone/dri/dri_wrapper.h"
-
-#include <fcntl.h>
-#include <unistd.h>
-#include <xf86drmMode.h>
-
-#include "base/logging.h"
-
-namespace gfx {
-
-DriWrapper::DriWrapper(const char* device_path) {
-  fd_ = open(device_path, O_RDWR | O_CLOEXEC);
-}
-
-DriWrapper::~DriWrapper() {
-  if (fd_ >= 0)
-    close(fd_);
-}
-
-drmModeCrtc* DriWrapper::GetCrtc(uint32_t crtc_id) {
-  CHECK(fd_ >= 0);
-  return drmModeGetCrtc(fd_, crtc_id);
-}
-
-void DriWrapper::FreeCrtc(drmModeCrtc* crtc) {
-  drmModeFreeCrtc(crtc);
-}
-
-bool DriWrapper::SetCrtc(uint32_t crtc_id,
-                              uint32_t framebuffer,
-                              uint32_t* connectors,
-                              drmModeModeInfo* mode) {
-  CHECK(fd_ >= 0);
-  return !drmModeSetCrtc(fd_, crtc_id, framebuffer, 0, 0, connectors, 1, mode);
-}
-
-bool DriWrapper::SetCrtc(drmModeCrtc* crtc, uint32_t* connectors) {
-  CHECK(fd_ >= 0);
-  return !drmModeSetCrtc(fd_,
-                         crtc->crtc_id,
-                         crtc->buffer_id,
-                         crtc->x,
-                         crtc->y,
-                         connectors,
-                         1,
-                         &crtc->mode);
-}
-
-bool DriWrapper::AddFramebuffer(const drmModeModeInfo& mode,
-                                     uint8_t depth,
-                                     uint8_t bpp,
-                                     uint32_t stride,
-                                     uint32_t handle,
-                                     uint32_t* framebuffer) {
-  CHECK(fd_ >= 0);
-  return !drmModeAddFB(fd_,
-                       mode.hdisplay,
-                       mode.vdisplay,
-                       depth,
-                       bpp,
-                       stride,
-                       handle,
-                       framebuffer);
-}
-
-bool DriWrapper::RemoveFramebuffer(uint32_t framebuffer) {
-  CHECK(fd_ >= 0);
-  return !drmModeRmFB(fd_, framebuffer);
-}
-
-bool DriWrapper::PageFlip(uint32_t crtc_id,
-                               uint32_t framebuffer,
-                               void* data) {
-  CHECK(fd_ >= 0);
-  return !drmModePageFlip(fd_,
-                          crtc_id,
-                          framebuffer,
-                          DRM_MODE_PAGE_FLIP_EVENT,
-                          data);
-}
-
-bool DriWrapper::ConnectorSetProperty(uint32_t connector_id,
-                                      uint32_t property_id,
-                                      uint64_t value) {
-  CHECK(fd_ >= 0);
-  return !drmModeConnectorSetProperty(fd_, connector_id, property_id, value);
-}
-
-bool DriWrapper::SetCursor(uint32_t crtc_id,
-                           uint32_t handle,
-                           uint32_t width,
-                           uint32_t height) {
-  CHECK(fd_ >= 0);
-  return !drmModeSetCursor(fd_, crtc_id, handle, width, height);
-}
-
-bool DriWrapper::MoveCursor(uint32_t crtc_id, int x, int y) {
-  CHECK(fd_ >= 0);
-  return !drmModeMoveCursor(fd_, crtc_id, x, y);
-}
-
-}  // namespace gfx
diff --git a/ui/gfx/ozone/dri/dri_wrapper.h b/ui/gfx/ozone/dri/dri_wrapper.h
deleted file mode 100644
index f81eb21..0000000
--- a/ui/gfx/ozone/dri/dri_wrapper.h
+++ /dev/null
@@ -1,97 +0,0 @@
-// Copyright 2013 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 UI_GFX_OZONE_DRI_DRI_WRAPPER_H_
-#define UI_GFX_OZONE_DRI_DRI_WRAPPER_H_
-
-#include <stdint.h>
-
-#include "base/basictypes.h"
-#include "ui/gfx/gfx_export.h"
-
-typedef struct _drmModeCrtc drmModeCrtc;
-typedef struct _drmModeModeInfo drmModeModeInfo;
-
-namespace gfx {
-
-// Wraps DRM calls into a nice interface. Used to provide different
-// implementations of the DRM calls. For the actual implementation the DRM API
-// would be called. In unit tests this interface would be stubbed.
-class GFX_EXPORT DriWrapper {
- public:
-  DriWrapper(const char* device_path);
-  virtual ~DriWrapper();
-
-  // Get the CRTC state. This is generally used to save state before using the
-  // CRTC. When the user finishes using the CRTC, the user should restore the
-  // CRTC to it's initial state. Use |SetCrtc| to restore the state.
-  virtual drmModeCrtc* GetCrtc(uint32_t crtc_id);
-
-  // Frees the CRTC mode object.
-  virtual void FreeCrtc(drmModeCrtc* crtc);
-
-  // Used to configure CRTC with ID |crtc_id| to use the connector in
-  // |connectors|. The CRTC will be configured with mode |mode| and will display
-  // the framebuffer with ID |framebuffer|. Before being able to display the
-  // framebuffer, it should be registered with the CRTC using |AddFramebuffer|.
-  virtual bool SetCrtc(uint32_t crtc_id,
-                       uint32_t framebuffer,
-                       uint32_t* connectors,
-                       drmModeModeInfo* mode);
-
-  // Used to set a specific configuration to the CRTC. Normally this function
-  // would be called with a CRTC saved state (from |GetCrtc|) to restore it to
-  // its original configuration.
-  virtual bool SetCrtc(drmModeCrtc* crtc, uint32_t* connectors);
-
-  // Register a buffer with the CRTC. On successful registration, the CRTC will
-  // assign a framebuffer ID to |framebuffer|.
-  virtual bool AddFramebuffer(const drmModeModeInfo& mode,
-                              uint8_t depth,
-                              uint8_t bpp,
-                              uint32_t stride,
-                              uint32_t handle,
-                              uint32_t* framebuffer);
-
-  // Deregister the given |framebuffer|.
-  virtual bool RemoveFramebuffer(uint32_t framebuffer);
-
-  // Schedules a pageflip for CRTC |crtc_id|. This function will return
-  // immediately. Upon completion of the pageflip event, the CRTC will be
-  // displaying the buffer with ID |framebuffer| and will have a DRM event
-  // queued on |fd_|. |data| is a generic pointer to some information the user
-  // will receive when processing the pageflip event.
-  virtual bool PageFlip(uint32_t crtc_id, uint32_t framebuffer, void* data);
-
-  // Sets the value of property with ID |property_id| to |value|. The property
-  // is applied to the connector with ID |connector_id|.
-  virtual bool ConnectorSetProperty(uint32_t connector_id,
-                                    uint32_t property_id,
-                                    uint64_t value);
-
-  // Set the cursor to be displayed in CRTC |crtc_id|. (width, height) is the
-  // cursor size pointed by |handle|.
-  virtual bool SetCursor(uint32_t crtc_id,
-                         uint32_t handle,
-                         uint32_t width,
-                         uint32_t height);
-
-
-  // Move the cursor on CRTC |crtc_id| to (x, y);
-  virtual bool MoveCursor(uint32_t crtc_id, int x, int y);
-
-  int get_fd() const { return fd_; }
-
- protected:
-  // The file descriptor associated with this wrapper. All DRM operations will
-  // be performed using this FD.
-  int fd_;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(DriWrapper);
-};
-
-}  // namespace gfx
-
-#endif  // UI_GFX_OZONE_DRI_DRI_WRAPPER_H_
diff --git a/ui/gfx/ozone/dri/hardware_display_controller.cc b/ui/gfx/ozone/dri/hardware_display_controller.cc
deleted file mode 100644
index e676bef..0000000
--- a/ui/gfx/ozone/dri/hardware_display_controller.cc
+++ /dev/null
@@ -1,158 +0,0 @@
-// Copyright 2013 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 "ui/gfx/ozone/dri/hardware_display_controller.h"
-
-#include <errno.h>
-#include <string.h>
-
-#include "base/basictypes.h"
-#include "base/logging.h"
-#include "base/time/time.h"
-#include "third_party/skia/include/core/SkCanvas.h"
-#include "ui/gfx/geometry/point.h"
-#include "ui/gfx/ozone/dri/dri_buffer.h"
-#include "ui/gfx/ozone/dri/dri_surface.h"
-#include "ui/gfx/ozone/dri/dri_wrapper.h"
-
-namespace gfx {
-
-HardwareDisplayController::HardwareDisplayController()
-    : drm_(NULL),
-      connector_id_(0),
-      crtc_id_(0),
-      mode_(),
-      saved_crtc_(NULL),
-      state_(UNASSOCIATED),
-      surface_(),
-      time_of_last_flip_(0) {}
-
-void HardwareDisplayController::SetControllerInfo(
-    DriWrapper* drm,
-    uint32_t connector_id,
-    uint32_t crtc_id,
-    uint32_t dpms_property_id,
-    drmModeModeInfo mode) {
-  drm_ = drm;
-  connector_id_ = connector_id;
-  crtc_id_ = crtc_id;
-  dpms_property_id_ = dpms_property_id;
-  mode_ = mode;
-  saved_crtc_ = drm_->GetCrtc(crtc_id_);
-  state_ = UNINITIALIZED;
-}
-
-HardwareDisplayController::~HardwareDisplayController() {
-  if (state_ == UNASSOCIATED)
-    return;
-
-  // Reset the cursor.
-  UnsetCursor();
-
-  if (saved_crtc_) {
-    if (!drm_->SetCrtc(saved_crtc_, &connector_id_))
-      DLOG(ERROR) << "Failed to restore CRTC state: " << strerror(errno);
-    drm_->FreeCrtc(saved_crtc_);
-  }
-
-  if (surface_.get()) {
-    // Unregister the buffers.
-    for (size_t i = 0; i < arraysize(surface_->bitmaps_); ++i) {
-      if (!drm_->RemoveFramebuffer(surface_->bitmaps_[i]->framebuffer()))
-        DLOG(ERROR) << "Failed to remove FB: " << strerror(errno);
-    }
-  }
-}
-
-bool
-HardwareDisplayController::BindSurfaceToController(
-    scoped_ptr<DriSurface> surface) {
-  CHECK(state_ == UNINITIALIZED);
-
-  // Register the buffers.
-  for (size_t i = 0; i < arraysize(surface->bitmaps_); ++i) {
-    uint32_t fb_id;
-    if (!drm_->AddFramebuffer(
-            mode_,
-            surface->bitmaps_[i]->GetColorDepth(),
-            surface->bitmaps_[i]->canvas()->imageInfo().bytesPerPixel() << 3,
-            surface->bitmaps_[i]->stride(),
-            surface->bitmaps_[i]->handle(),
-            &fb_id)) {
-      DLOG(ERROR) << "Failed to register framebuffer: " << strerror(errno);
-      state_ = FAILED;
-      return false;
-    }
-    surface->bitmaps_[i]->set_framebuffer(fb_id);
-  }
-
-  surface_.reset(surface.release());
-  state_ = SURFACE_INITIALIZED;
-  return true;
-}
-
-bool HardwareDisplayController::SchedulePageFlip() {
-  CHECK(state_ == SURFACE_INITIALIZED || state_ == INITIALIZED);
-
-  if (state_ == SURFACE_INITIALIZED) {
-    // Perform the initial modeset.
-    if (!drm_->SetCrtc(crtc_id_,
-                       surface_->GetFramebufferId(),
-                       &connector_id_,
-                       &mode_)) {
-      DLOG(ERROR) << "Cannot set CRTC: " << strerror(errno);
-      state_ = FAILED;
-      return false;
-    } else {
-      state_ = INITIALIZED;
-    }
-
-    if (dpms_property_id_)
-      drm_->ConnectorSetProperty(connector_id_,
-                                 dpms_property_id_,
-                                 DRM_MODE_DPMS_ON);
-  }
-
-  if (!drm_->PageFlip(crtc_id_,
-                      surface_->GetFramebufferId(),
-                      this)) {
-    state_ = FAILED;
-    LOG(ERROR) << "Cannot page flip: " << strerror(errno);
-    return false;
-  }
-
-  return true;
-}
-
-void HardwareDisplayController::OnPageFlipEvent(unsigned int frame,
-                                                unsigned int seconds,
-                                                unsigned int useconds) {
-  time_of_last_flip_ =
-      static_cast<uint64_t>(seconds) * base::Time::kMicrosecondsPerSecond +
-      useconds;
-
-  surface_->SwapBuffers();
-}
-
-bool HardwareDisplayController::SetCursor(DriSurface* surface) {
-  CHECK(state_ != UNASSOCIATED);
-  bool ret = drm_->SetCursor(crtc_id_,
-                         surface->GetHandle(),
-                         surface->size().width(),
-                         surface->size().height());
-  surface->SwapBuffers();
-  return ret;
-}
-
-bool HardwareDisplayController::UnsetCursor() {
-  CHECK(state_ != UNASSOCIATED);
-  return drm_->SetCursor(crtc_id_, 0, 0, 0);
-}
-
-bool HardwareDisplayController::MoveCursor(const gfx::Point& location) {
-  CHECK(state_ != UNASSOCIATED);
-  return drm_->MoveCursor(crtc_id_, location.x(), location.y());
-}
-
-}  // namespace gfx
diff --git a/ui/gfx/ozone/dri/hardware_display_controller.h b/ui/gfx/ozone/dri/hardware_display_controller.h
deleted file mode 100644
index 46861a1..0000000
--- a/ui/gfx/ozone/dri/hardware_display_controller.h
+++ /dev/null
@@ -1,199 +0,0 @@
-// Copyright 2013 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 UI_GFX_OZONE_DRI_HARDWARE_DISPLAY_CONTROLLER_H_
-#define UI_GFX_OZONE_DRI_HARDWARE_DISPLAY_CONTROLLER_H_
-
-#include <stddef.h>
-#include <stdint.h>
-#include <xf86drmMode.h>
-#include <vector>
-
-#include "base/basictypes.h"
-#include "base/memory/scoped_ptr.h"
-#include "ui/gfx/gfx_export.h"
-#include "ui/gfx/ozone/dri/dri_wrapper.h"
-
-namespace gfx {
-
-class DriSurface;
-class Point;
-
-// The HDCOz will handle modesettings and scannout operations for hardware
-// devices.
-//
-// In the DRM world there are 3 components that need to be paired up to be able
-// to display an image to the monitor: CRTC (cathode ray tube controller),
-// encoder and connector. The CRTC determines which framebuffer to read, when
-// to scanout and where to scanout. Encoders converts the stream from the CRTC
-// to the appropriate format for the connector. The connector is the physical
-// connection that monitors connect to.
-//
-// There is no 1:1:1 pairing for these components. It is possible for an encoder
-// to be compatible to multiple CRTCs and each connector can be used with
-// multiple encoders. In addition, it is possible to use one CRTC with multiple
-// connectors such that we can display the same image on multiple monitors.
-//
-// For example, the following configuration shows 2 different screens being
-// initialized separately.
-// -------------      -------------
-// | Connector |      | Connector |
-// |   HDMI    |      |    VGA    |
-// -------------      -------------
-//       ^                  ^
-//       |                  |
-// -------------      -------------
-// |  Encoder1  |     |  Encoder2 |
-// -------------      -------------
-//       ^                  ^
-//       |                  |
-// -------------      -------------
-// |   CRTC1   |      |   CRTC2   |
-// -------------      -------------
-//
-// In the following configuration 2 different screens are associated with the
-// same CRTC, so on scanout the same framebuffer will be displayed on both
-// monitors.
-// -------------      -------------
-// | Connector |      | Connector |
-// |   HDMI    |      |    VGA    |
-// -------------      -------------
-//       ^                  ^
-//       |                  |
-// -------------      -------------
-// |  Encoder1  |     |  Encoder2 |
-// -------------      -------------
-//       ^                  ^
-//       |                  |
-//      ----------------------
-//      |        CRTC1       |
-//      ----------------------
-//
-// Note that it is possible to have more connectors than CRTCs which means that
-// only a subset of connectors can be active independently, showing different
-// framebuffers. Though, in this case, it would be possible to have all
-// connectors active if some use the same CRTC to mirror the display.
-//
-// TODO(dnicoara) Need to have a way to detect events (such as monitor
-// connected or disconnected).
-class GFX_EXPORT HardwareDisplayController {
- public:
-  // Controller states. The state transitions will happen from top to bottom.
-  enum State {
-    // When we allocate a HDCO as a stub. At this point there is no connector
-    // and CRTC associated with this device.
-    UNASSOCIATED,
-
-    // When |SetControllerInfo| is called and the HDCO has the information of
-    // the hardware it will control. At this point it knows everything it needs
-    // to control the hardware but doesn't have a surface.
-    UNINITIALIZED,
-
-    // A surface is associated with the HDCO. This means that the controller can
-    // potentially display the backing surface to the display. Though the
-    // surface framebuffer still needs to be registered with the CRTC.
-    SURFACE_INITIALIZED,
-
-    // The CRTC now knows about the surface attributes.
-    INITIALIZED,
-
-    // Error state if any of the initialization steps fail.
-    FAILED,
-  };
-
-  HardwareDisplayController();
-
-  ~HardwareDisplayController();
-
-  // Set the hardware configuration for this HDCO. Once this is set, the HDCO is
-  // responsible for keeping track of the connector and CRTC and cleaning up
-  // when it is destroyed.
-  void SetControllerInfo(DriWrapper* drm,
-                         uint32_t connector_id,
-                         uint32_t crtc_id,
-                         uint32_t dpms_property_id,
-                         drmModeModeInfo mode);
-
-  // Associate the HDCO with a surface implementation and initialize it.
-  bool BindSurfaceToController(scoped_ptr<DriSurface> surface);
-
-  // Schedules the |surface_|'s framebuffer to be displayed on the next vsync
-  // event. The event will be posted on the graphics card file descriptor |fd_|
-  // and it can be read and processed by |drmHandleEvent|. That function can
-  // define the callback for the page flip event. A generic data argument will
-  // be presented to the callback. We use that argument to pass in the HDCO
-  // object the event belongs to.
-  //
-  // Between this call and the callback, the framebuffer used in this call
-  // should not be modified in any way as it would cause screen tearing if the
-  // hardware performed the flip. Note that the frontbuffer should also not
-  // be modified as it could still be displayed.
-  //
-  // Note that this function does not block. Also, this function should not be
-  // called again before the page flip occurrs.
-  //
-  // Returns true if the page flip was successfully registered, false otherwise.
-  bool SchedulePageFlip();
-
-  // Called when the page flip event occurred. The event is provided by the
-  // kernel when a VBlank event finished. This allows the controller to
-  // update internal state and propagate the update to the surface.
-  // The tuple (seconds, useconds) represents the event timestamp. |seconds|
-  // represents the number of seconds while |useconds| represents the
-  // microseconds (< 1 second) in the timestamp.
-  void OnPageFlipEvent(unsigned int frame,
-                       unsigned int seconds,
-                       unsigned int useconds);
-
-  // Set the hardware cursor to show the contents of |surface|.
-  bool SetCursor(DriSurface* surface);
-
-  bool UnsetCursor();
-
-  // Moves the hardware cursor to |location|.
-  bool MoveCursor(const gfx::Point& location);
-
-  State get_state() const { return state_; };
-
-  int get_fd() const { return drm_->get_fd(); };
-
-  const drmModeModeInfo& get_mode() const { return mode_; };
-
-  DriSurface* get_surface() const { return surface_.get(); };
-
-  uint64_t get_time_of_last_flip() const {
-    return time_of_last_flip_;
-  };
-
- private:
-  // Object containing the connection to the graphics device and wraps the API
-  // calls to control it.
-  DriWrapper* drm_;
-
-  // TODO(dnicoara) Need to allow a CRTC to have multiple connectors.
-  uint32_t connector_id_;
-
-  uint32_t crtc_id_;
-
-  uint32_t dpms_property_id_;
-
-  // TODO(dnicoara) Need to store all the modes.
-  drmModeModeInfo mode_;
-
-  // Saved CRTC state from before we used it. Need it to restore state once we
-  // are finished using this device.
-  drmModeCrtc* saved_crtc_;
-
-  State state_;
-
-  scoped_ptr<DriSurface> surface_;
-
-  uint64_t time_of_last_flip_;
-
-  DISALLOW_COPY_AND_ASSIGN(HardwareDisplayController);
-};
-
-}  // namespace gfx
-
-#endif  // UI_GFX_OZONE_DRI_HARDWARE_DISPLAY_CONTROLLER_H_
diff --git a/ui/gfx/ozone/dri/hardware_display_controller_unittest.cc b/ui/gfx/ozone/dri/hardware_display_controller_unittest.cc
deleted file mode 100644
index da0e7b4..0000000
--- a/ui/gfx/ozone/dri/hardware_display_controller_unittest.cc
+++ /dev/null
@@ -1,322 +0,0 @@
-// Copyright 2013 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 "testing/gtest/include/gtest/gtest.h"
-#include "third_party/skia/include/core/SkCanvas.h"
-#include "ui/gfx/ozone/dri/dri_buffer.h"
-#include "ui/gfx/ozone/dri/dri_surface.h"
-#include "ui/gfx/ozone/dri/dri_wrapper.h"
-#include "ui/gfx/ozone/dri/hardware_display_controller.h"
-
-namespace {
-
-// Create a basic mode for a 6x4 screen.
-const drmModeModeInfo kDefaultMode =
-    {0, 6, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, {'\0'}};
-
-const gfx::Size kDefaultModeSize(kDefaultMode.hdisplay, kDefaultMode.vdisplay);
-
-// Mock file descriptor ID.
-const int kFd = 3;
-
-// Mock connector ID.
-const uint32_t kConnectorId = 1;
-
-// Mock CRTC ID.
-const uint32_t kCrtcId = 1;
-
-const uint32_t kDPMSPropertyId = 1;
-
-// The real DriWrapper makes actual DRM calls which we can't use in unit tests.
-class MockDriWrapper : public gfx::DriWrapper {
- public:
-  MockDriWrapper(int fd) : DriWrapper(""),
-                                get_crtc_call_count_(0),
-                                free_crtc_call_count_(0),
-                                restore_crtc_call_count_(0),
-                                add_framebuffer_call_count_(0),
-                                remove_framebuffer_call_count_(0),
-                                set_crtc_expectation_(true),
-                                add_framebuffer_expectation_(true),
-                                page_flip_expectation_(true) {
-    fd_ = fd;
-  }
-
-  virtual ~MockDriWrapper() { fd_ = -1; }
-
-  virtual drmModeCrtc* GetCrtc(uint32_t crtc_id) OVERRIDE {
-    get_crtc_call_count_++;
-    return new drmModeCrtc;
-  }
-
-  virtual void FreeCrtc(drmModeCrtc* crtc) OVERRIDE {
-    free_crtc_call_count_++;
-    delete crtc;
-  }
-
-  virtual bool SetCrtc(uint32_t crtc_id,
-                       uint32_t framebuffer,
-                       uint32_t* connectors,
-                       drmModeModeInfo* mode) OVERRIDE {
-    return set_crtc_expectation_;
-  }
-
-  virtual bool SetCrtc(drmModeCrtc* crtc, uint32_t* connectors) OVERRIDE {
-    restore_crtc_call_count_++;
-    return true;
-  }
-
-  virtual bool AddFramebuffer(const drmModeModeInfo& mode,
-                              uint8_t depth,
-                              uint8_t bpp,
-                              uint32_t stride,
-                              uint32_t handle,
-                              uint32_t* framebuffer) OVERRIDE {
-    add_framebuffer_call_count_++;
-    return add_framebuffer_expectation_;
-  }
-
-  virtual bool RemoveFramebuffer(uint32_t framebuffer) OVERRIDE {
-    remove_framebuffer_call_count_++;
-    return true;
-  }
-
-  virtual bool PageFlip(uint32_t crtc_id,
-                        uint32_t framebuffer,
-                        void* data) OVERRIDE {
-    return page_flip_expectation_;
-  }
-
-  virtual bool ConnectorSetProperty(uint32_t connector_id,
-                                    uint32_t property_id,
-                                    uint64_t value) OVERRIDE { return true; }
-
-  virtual bool SetCursor(uint32_t crtc_id,
-                         uint32_t handle,
-                         uint32_t width,
-                         uint32_t height) OVERRIDE { return true; }
-
-  virtual bool MoveCursor(uint32_t crtc_id, int x, int y) OVERRIDE {
-    return true;
-  }
-
-  int get_get_crtc_call_count() const {
-    return get_crtc_call_count_;
-  }
-
-  int get_free_crtc_call_count() const {
-    return free_crtc_call_count_;
-  }
-
-  int get_restore_crtc_call_count() const {
-    return restore_crtc_call_count_;
-  }
-
-  int get_add_framebuffer_call_count() const {
-    return add_framebuffer_call_count_;
-  }
-
-  int get_remove_framebuffer_call_count() const {
-    return remove_framebuffer_call_count_;
-  }
-
-  void set_set_crtc_expectation(bool state) {
-    set_crtc_expectation_ = state;
-  }
-
-  void set_add_framebuffer_expectation(bool state) {
-    add_framebuffer_expectation_ = state;
-  }
-
-  void set_page_flip_expectation(bool state) {
-    page_flip_expectation_ = state;
-  }
-
- private:
-  int get_crtc_call_count_;
-  int free_crtc_call_count_;
-  int restore_crtc_call_count_;
-  int add_framebuffer_call_count_;
-  int remove_framebuffer_call_count_;
-
-  bool set_crtc_expectation_;
-  bool add_framebuffer_expectation_;
-  bool page_flip_expectation_;
-
-  DISALLOW_COPY_AND_ASSIGN(MockDriWrapper);
-};
-
-class MockDriBuffer : public gfx::DriBuffer {
- public:
-  MockDriBuffer(gfx::DriWrapper* dri) : DriBuffer(dri) {}
-  virtual ~MockDriBuffer() {
-    surface_.clear();
-  }
-
-  virtual bool Initialize(const SkImageInfo& info) OVERRIDE {
-    surface_ = skia::AdoptRef(SkSurface::NewRaster(info));
-    surface_->getCanvas()->clear(SK_ColorBLACK);
-
-    return true;
-  }
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(MockDriBuffer);
-};
-
-class MockDriSurface : public gfx::DriSurface {
- public:
-  MockDriSurface(gfx::DriWrapper* dri, const gfx::Size& size)
-      : DriSurface(dri, size), dri_(dri) {}
-  virtual ~MockDriSurface() {}
-
- private:
-  virtual gfx::DriBuffer* CreateBuffer() OVERRIDE {
-    return new MockDriBuffer(dri_);
-  }
-
-  gfx::DriWrapper* dri_;
-
-  DISALLOW_COPY_AND_ASSIGN(MockDriSurface);
-};
-
-}  // namespace
-
-class HardwareDisplayControllerTest : public testing::Test {
- public:
-  HardwareDisplayControllerTest() {}
-  virtual ~HardwareDisplayControllerTest() {}
-
-  virtual void SetUp() OVERRIDE;
-  virtual void TearDown() OVERRIDE;
- protected:
-  scoped_ptr<gfx::HardwareDisplayController> controller_;
-  scoped_ptr<MockDriWrapper> drm_;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(HardwareDisplayControllerTest);
-};
-
-void HardwareDisplayControllerTest::SetUp() {
-  controller_.reset(new gfx::HardwareDisplayController());
-  drm_.reset(new MockDriWrapper(kFd));
-}
-
-void HardwareDisplayControllerTest::TearDown() {
-  controller_.reset();
-  drm_.reset();
-}
-
-TEST_F(HardwareDisplayControllerTest, CheckInitialState) {
-  EXPECT_EQ(gfx::HardwareDisplayController::UNASSOCIATED,
-            controller_->get_state());
-}
-
-TEST_F(HardwareDisplayControllerTest,
-       CheckStateAfterControllerIsInitialized) {
-  controller_->SetControllerInfo(
-      drm_.get(), kConnectorId, kCrtcId, kDPMSPropertyId, kDefaultMode);
-
-  EXPECT_EQ(1, drm_->get_get_crtc_call_count());
-  EXPECT_EQ(gfx::HardwareDisplayController::UNINITIALIZED,
-            controller_->get_state());
-}
-
-TEST_F(HardwareDisplayControllerTest, CheckStateAfterSurfaceIsBound) {
-  controller_->SetControllerInfo(
-      drm_.get(), kConnectorId, kCrtcId, kDPMSPropertyId, kDefaultMode);
-  scoped_ptr<gfx::DriSurface> surface(
-      new MockDriSurface(drm_.get(), kDefaultModeSize));
-
-  EXPECT_TRUE(surface->Initialize());
-  EXPECT_TRUE(controller_->BindSurfaceToController(surface.Pass()));
-
-  EXPECT_EQ(2, drm_->get_add_framebuffer_call_count());
-  EXPECT_EQ(gfx::HardwareDisplayController::SURFACE_INITIALIZED,
-            controller_->get_state());
-}
-
-TEST_F(HardwareDisplayControllerTest, CheckStateIfBindingFails) {
-  drm_->set_add_framebuffer_expectation(false);
-
-  controller_->SetControllerInfo(
-      drm_.get(), kConnectorId, kCrtcId, kDPMSPropertyId, kDefaultMode);
-  scoped_ptr<gfx::DriSurface> surface(
-      new MockDriSurface(drm_.get(), kDefaultModeSize));
-
-  EXPECT_TRUE(surface->Initialize());
-  EXPECT_FALSE(controller_->BindSurfaceToController(surface.Pass()));
-
-  EXPECT_EQ(1, drm_->get_add_framebuffer_call_count());
-  EXPECT_EQ(gfx::HardwareDisplayController::FAILED,
-            controller_->get_state());
-}
-
-TEST_F(HardwareDisplayControllerTest, CheckStateAfterPageFlip) {
-  controller_->SetControllerInfo(
-      drm_.get(), kConnectorId, kCrtcId, kDPMSPropertyId, kDefaultMode);
-  scoped_ptr<gfx::DriSurface> surface(
-      new MockDriSurface(drm_.get(), kDefaultModeSize));
-
-  EXPECT_TRUE(surface->Initialize());
-  EXPECT_TRUE(controller_->BindSurfaceToController(surface.Pass()));
-
-  controller_->SchedulePageFlip();
-
-  EXPECT_EQ(gfx::HardwareDisplayController::INITIALIZED,
-            controller_->get_state());
-}
-
-TEST_F(HardwareDisplayControllerTest, CheckStateIfModesetFails) {
-  drm_->set_set_crtc_expectation(false);
-
-  controller_->SetControllerInfo(
-      drm_.get(), kConnectorId, kCrtcId, kDPMSPropertyId, kDefaultMode);
-  scoped_ptr<gfx::DriSurface> surface(
-      new MockDriSurface(drm_.get(), kDefaultModeSize));
-
-  EXPECT_TRUE(surface->Initialize());
-  EXPECT_TRUE(controller_->BindSurfaceToController(surface.Pass()));
-
-  controller_->SchedulePageFlip();
-
-  EXPECT_EQ(gfx::HardwareDisplayController::FAILED,
-            controller_->get_state());
-}
-
-TEST_F(HardwareDisplayControllerTest, CheckStateIfPageFlipFails) {
-  drm_->set_page_flip_expectation(false);
-
-  controller_->SetControllerInfo(
-      drm_.get(), kConnectorId, kCrtcId, kDPMSPropertyId, kDefaultMode);
-  scoped_ptr<gfx::DriSurface> surface(
-      new MockDriSurface(drm_.get(), kDefaultModeSize));
-
-  EXPECT_TRUE(surface->Initialize());
-  EXPECT_TRUE(controller_->BindSurfaceToController(surface.Pass()));
-
-  controller_->SchedulePageFlip();
-
-  EXPECT_EQ(gfx::HardwareDisplayController::FAILED,
-            controller_->get_state());
-}
-
-TEST_F(HardwareDisplayControllerTest, CheckProperDestruction) {
-  controller_->SetControllerInfo(
-      drm_.get(), kConnectorId, kCrtcId, kDPMSPropertyId, kDefaultMode);
-  scoped_ptr<gfx::DriSurface> surface(
-      new MockDriSurface(drm_.get(), kDefaultModeSize));
-
-  EXPECT_TRUE(surface->Initialize());
-  EXPECT_TRUE(controller_->BindSurfaceToController(surface.Pass()));
-
-  EXPECT_EQ(gfx::HardwareDisplayController::SURFACE_INITIALIZED,
-            controller_->get_state());
-
-  controller_.reset();
-
-  EXPECT_EQ(2, drm_->get_remove_framebuffer_call_count());
-  EXPECT_EQ(1, drm_->get_restore_crtc_call_count());
-  EXPECT_EQ(1, drm_->get_free_crtc_call_count());
-}
diff --git a/ui/gfx/screen_android.cc b/ui/gfx/screen_android.cc
index e90bb76..9114b85 100644
--- a/ui/gfx/screen_android.cc
+++ b/ui/gfx/screen_android.cc
@@ -43,6 +43,7 @@
     gfx::Display display(0, bounds_in_dip);
     if (!gfx::Display::HasForceDeviceScaleFactor())
       display.set_device_scale_factor(device_scale_factor);
+    display.SetRotationAsDegree(device_info.GetRotationDegrees());
     return display;
   }
 
diff --git a/ui/gfx/win/dpi.cc b/ui/gfx/win/dpi.cc
index fbcbb77..1afd515 100644
--- a/ui/gfx/win/dpi.cc
+++ b/ui/gfx/win/dpi.cc
@@ -44,6 +44,10 @@
 
 float GetModernUIScaleWrapper() {
   float result = 1.0f;
+  // TODO(cpu) : Fix scale for Win7.
+  if (base::win::GetVersion() < base::win::VERSION_WIN8)
+    return result;
+
   typedef float(WINAPI *GetModernUIScalePtr)(VOID);
   HMODULE lib = LoadLibraryA("metro_driver.dll");
   if (lib) {
@@ -191,12 +195,8 @@
 }
 
 Point ScreenToDIPPoint(const Point& pixel_point) {
-  static float scaling_factor =
-      GetDeviceScaleFactor() > GetUnforcedDeviceScaleFactor() ?
-      1.0f / GetDeviceScaleFactor() :
-      1.0f;
   return ToFlooredPoint(ScalePoint(pixel_point,
-      scaling_factor));
+      1.0f / GetDeviceScaleFactor()));
 }
 
 Point DIPToScreenPoint(const Point& dip_point) {
diff --git a/ui/gfx/x/x11_error_tracker.cc b/ui/gfx/x/x11_error_tracker.cc
index 16ed595..110f79c 100644
--- a/ui/gfx/x/x11_error_tracker.cc
+++ b/ui/gfx/x/x11_error_tracker.cc
@@ -2,6 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "base/logging.h"
 #include "ui/gfx/x/x11_error_tracker.h"
 
 #include "ui/gfx/x/x11_types.h"
@@ -9,6 +10,7 @@
 namespace {
 
 unsigned char g_x11_error_code = 0;
+static gfx::X11ErrorTracker* g_handler = NULL;
 
 int X11ErrorHandler(Display* display, XErrorEvent* error) {
   g_x11_error_code = error->error_code;
@@ -19,10 +21,19 @@
 namespace gfx {
 
 X11ErrorTracker::X11ErrorTracker() {
+  // This is a poor-man's check for incorrect usage. It disallows nested
+  // X11ErrorTracker instances on the same thread.
+  DCHECK(g_handler == NULL);
+  g_handler = this;
+  XSync(GetXDisplay(), False);
   old_handler_ = XSetErrorHandler(X11ErrorHandler);
+  g_x11_error_code = 0;
 }
 
-X11ErrorTracker::~X11ErrorTracker() { XSetErrorHandler(old_handler_); }
+X11ErrorTracker::~X11ErrorTracker() {
+  g_handler = NULL;
+  XSetErrorHandler(old_handler_);
+}
 
 bool X11ErrorTracker::FoundNewError() {
   XSync(GetXDisplay(), False);
diff --git a/ui/gl/gl.target.darwin-arm.mk b/ui/gl/gl.target.darwin-arm.mk
index 44322bb..fb24817 100644
--- a/ui/gl/gl.target.darwin-arm.mk
+++ b/ui/gl/gl.target.darwin-arm.mk
@@ -139,7 +139,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-fno-tree-sra \
 	-fuse-ld=gold \
 	-Wno-psabi \
@@ -192,12 +191,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -268,7 +270,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-fno-tree-sra \
 	-fuse-ld=gold \
 	-Wno-psabi \
@@ -321,12 +322,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -404,7 +408,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/gl/gl.target.darwin-mips.mk b/ui/gl/gl.target.darwin-mips.mk
index 38fb605..f8cf564 100644
--- a/ui/gl/gl.target.darwin-mips.mk
+++ b/ui/gl/gl.target.darwin-mips.mk
@@ -139,7 +139,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-EL \
 	-mhard-float \
 	-ffunction-sections \
@@ -191,12 +190,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -267,7 +269,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-EL \
 	-mhard-float \
 	-ffunction-sections \
@@ -319,12 +320,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -400,7 +404,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/gl/gl.target.darwin-x86.mk b/ui/gl/gl.target.darwin-x86.mk
index 486ad80..bba382d 100644
--- a/ui/gl/gl.target.darwin-x86.mk
+++ b/ui/gl/gl.target.darwin-x86.mk
@@ -138,7 +138,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-msse2 \
 	-mfpmath=sse \
 	-mmmx \
@@ -193,12 +192,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -267,7 +269,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-msse2 \
 	-mfpmath=sse \
 	-mmmx \
@@ -322,12 +323,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -402,7 +406,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/gl/gl.target.darwin-x86_64.mk b/ui/gl/gl.target.darwin-x86_64.mk
index ba2e9d5..f4811f3 100644
--- a/ui/gl/gl.target.darwin-x86_64.mk
+++ b/ui/gl/gl.target.darwin-x86_64.mk
@@ -140,7 +140,6 @@
 	-pipe \
 	-fPIC \
 	-Wno-unused-local-typedefs \
-	-Wno-unknown-pragmas \
 	-m64 \
 	-march=x86-64 \
 	-fuse-ld=gold \
@@ -193,12 +192,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -269,7 +271,6 @@
 	-pipe \
 	-fPIC \
 	-Wno-unused-local-typedefs \
-	-Wno-unknown-pragmas \
 	-m64 \
 	-march=x86-64 \
 	-fuse-ld=gold \
@@ -322,12 +323,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -402,7 +406,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/gl/gl.target.linux-arm.mk b/ui/gl/gl.target.linux-arm.mk
index 44322bb..fb24817 100644
--- a/ui/gl/gl.target.linux-arm.mk
+++ b/ui/gl/gl.target.linux-arm.mk
@@ -139,7 +139,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-fno-tree-sra \
 	-fuse-ld=gold \
 	-Wno-psabi \
@@ -192,12 +191,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -268,7 +270,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-fno-tree-sra \
 	-fuse-ld=gold \
 	-Wno-psabi \
@@ -321,12 +322,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -404,7 +408,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/gl/gl.target.linux-mips.mk b/ui/gl/gl.target.linux-mips.mk
index 38fb605..f8cf564 100644
--- a/ui/gl/gl.target.linux-mips.mk
+++ b/ui/gl/gl.target.linux-mips.mk
@@ -139,7 +139,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-EL \
 	-mhard-float \
 	-ffunction-sections \
@@ -191,12 +190,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -267,7 +269,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-EL \
 	-mhard-float \
 	-ffunction-sections \
@@ -319,12 +320,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -400,7 +404,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/gl/gl.target.linux-x86.mk b/ui/gl/gl.target.linux-x86.mk
index 486ad80..bba382d 100644
--- a/ui/gl/gl.target.linux-x86.mk
+++ b/ui/gl/gl.target.linux-x86.mk
@@ -138,7 +138,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-msse2 \
 	-mfpmath=sse \
 	-mmmx \
@@ -193,12 +192,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -267,7 +269,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-msse2 \
 	-mfpmath=sse \
 	-mmmx \
@@ -322,12 +323,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -402,7 +406,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/gl/gl.target.linux-x86_64.mk b/ui/gl/gl.target.linux-x86_64.mk
index ba2e9d5..f4811f3 100644
--- a/ui/gl/gl.target.linux-x86_64.mk
+++ b/ui/gl/gl.target.linux-x86_64.mk
@@ -140,7 +140,6 @@
 	-pipe \
 	-fPIC \
 	-Wno-unused-local-typedefs \
-	-Wno-unknown-pragmas \
 	-m64 \
 	-march=x86-64 \
 	-fuse-ld=gold \
@@ -193,12 +192,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -269,7 +271,6 @@
 	-pipe \
 	-fPIC \
 	-Wno-unused-local-typedefs \
-	-Wno-unknown-pragmas \
 	-m64 \
 	-march=x86-64 \
 	-fuse-ld=gold \
@@ -322,12 +323,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -402,7 +406,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/gl/gl_bindings.h b/ui/gl/gl_bindings.h
index 8e0f2c6..8b13608 100644
--- a/ui/gl/gl_bindings.h
+++ b/ui/gl/gl_bindings.h
@@ -128,6 +128,9 @@
 #define GL_ASYNC_PIXEL_UNPACK_COMPLETED_CHROMIUM         0x84F5
 #define GL_ASYNC_PIXEL_PACK_COMPLETED_CHROMIUM           0x84F6
 
+// GL_CHROMIUM_sync_query
+#define GL_COMMANDS_COMPLETED_CHROMIUM                   0x84F7
+
 // GL_OES_texure_3D
 #define GL_SAMPLER_3D_OES                                0x8B5F
 
diff --git a/ui/gl/gl_fence.cc b/ui/gl/gl_fence.cc
index 262de48..def030b 100644
--- a/ui/gl/gl_fence.cc
+++ b/ui/gl/gl_fence.cc
@@ -7,6 +7,7 @@
 #include "base/compiler_specific.h"
 #include "ui/gl/gl_bindings.h"
 #include "ui/gl/gl_context.h"
+#include "ui/gl/gl_version_info.h"
 
 namespace {
 
@@ -165,7 +166,8 @@
     return new EGLFenceSync(flush);
 #endif
   // Prefer ARB_sync which supports server-side wait.
-  if (gfx::g_driver_gl.ext.b_GL_ARB_sync)
+  if (gfx::g_driver_gl.ext.b_GL_ARB_sync ||
+      gfx::GLContext::GetCurrent()->GetVersionInfo()->is_es3)
     return new GLFenceARBSync(flush);
   if (gfx::g_driver_gl.ext.b_GL_NV_fence)
     return new GLFenceNVFence(flush);
diff --git a/ui/keyboard/keyboard.gyp b/ui/keyboard/keyboard.gyp
index fe359c6..153b38c 100644
--- a/ui/keyboard/keyboard.gyp
+++ b/ui/keyboard/keyboard.gyp
@@ -48,7 +48,7 @@
         '../events/events.gyp:events',
         '../gfx/gfx.gyp:gfx',
         '../gfx/gfx.gyp:gfx_geometry',
-        '../wm/wm.gyp:wm_core',
+        '../wm/wm.gyp:wm',
         'keyboard_resources',
       ],
       'defines': [
diff --git a/ui/keyboard/keyboard_controller.cc b/ui/keyboard/keyboard_controller.cc
index 4dd085c..52c7c14 100644
--- a/ui/keyboard/keyboard_controller.cc
+++ b/ui/keyboard/keyboard_controller.cc
@@ -275,9 +275,9 @@
   observer_list_.RemoveObserver(observer);
 }
 
-void KeyboardController::ShowAndLockKeyboard() {
-  set_lock_keyboard(true);
-  OnShowImeIfNeeded();
+void KeyboardController::ShowKeyboard(bool lock) {
+  set_lock_keyboard(lock);
+  ShowKeyboardInternal();
 }
 
 void KeyboardController::OnWindowHierarchyChanged(
@@ -298,7 +298,7 @@
     return;
 
   if (IsKeyboardUsabilityExperimentEnabled()) {
-    OnShowImeIfNeeded();
+    ShowKeyboardInternal();
     return;
   }
 
@@ -337,6 +337,10 @@
 }
 
 void KeyboardController::OnShowImeIfNeeded() {
+  ShowKeyboardInternal();
+}
+
+void KeyboardController::ShowKeyboardInternal() {
   if (!container_.get())
     return;
 
@@ -350,7 +354,7 @@
 
   proxy_->ReloadKeyboardIfNeeded();
 
-  if (keyboard_visible_)
+  if (keyboard_visible_ || proxy_->GetKeyboardWindow()->bounds().height() == 0)
     return;
 
   keyboard_visible_ = true;
@@ -370,10 +374,6 @@
       !container_->layer()->GetAnimator()->is_animating())
     return;
 
-  ShowKeyboard();
-}
-
-void KeyboardController::ShowKeyboard() {
   ToggleTouchEventLogging(false);
   ui::LayerAnimator* container_animator = container_->layer()->GetAnimator();
 
@@ -394,6 +394,8 @@
                  base::Unretained(this))));
   container_animator->AddObserver(animation_observer_.get());
 
+  proxy_->ShowKeyboardContainer(container_.get());
+
   {
     // Scope the following animation settings as we don't want to animate
     // visibility change that triggered by a call to the base class function
@@ -406,8 +408,6 @@
     container_->SetTransform(gfx::Transform());
     container_->layer()->SetOpacity(1.0);
   }
-
-  proxy_->ShowKeyboardContainer(container_.get());
 }
 
 bool KeyboardController::WillHideKeyboard() const {
diff --git a/ui/keyboard/keyboard_controller.h b/ui/keyboard/keyboard_controller.h
index 0541165..d623062 100644
--- a/ui/keyboard/keyboard_controller.h
+++ b/ui/keyboard/keyboard_controller.h
@@ -76,8 +76,9 @@
 
   void set_lock_keyboard(bool lock) { lock_keyboard_ = lock; }
 
-  // Force the keyboard to show up if not showing and lock the keyboard.
-  void ShowAndLockKeyboard();
+  // Force the keyboard to show up if not showing and lock the keyboard if
+  // |lock| is true.
+  void ShowKeyboard(bool lock);
 
   // Sets the active keyboard controller. KeyboardController takes ownership of
   // the instance. Calling ResetIntance with a new instance destroys the
@@ -118,7 +119,7 @@
   virtual void OnShowImeIfNeeded() OVERRIDE;
 
   // Show virtual keyboard immediately with animation.
-  void ShowKeyboard();
+  void ShowKeyboardInternal();
 
   // Returns true if keyboard is scheduled to hide.
   bool WillHideKeyboard() const;
diff --git a/ui/keyboard/keyboard_controller_proxy.cc b/ui/keyboard/keyboard_controller_proxy.cc
index acd78f8..9286946 100644
--- a/ui/keyboard/keyboard_controller_proxy.cc
+++ b/ui/keyboard/keyboard_controller_proxy.cc
@@ -54,9 +54,7 @@
     int new_height = pos.height();
     bounds.set_y(bounds.y() + bounds.height() - new_height);
     bounds.set_height(new_height);
-    proxy_->set_resizing_from_contents(true);
     keyboard->SetBounds(bounds);
-    proxy_->set_resizing_from_contents(false);
   }
 
   // Overridden from content::WebContentsDelegate:
@@ -81,7 +79,7 @@
 namespace keyboard {
 
 KeyboardControllerProxy::KeyboardControllerProxy()
-    : default_url_(kKeyboardURL), resizing_from_contents_(false) {
+    : default_url_(kKeyboardURL) {
 }
 
 KeyboardControllerProxy::~KeyboardControllerProxy() {
diff --git a/ui/keyboard/keyboard_controller_proxy.h b/ui/keyboard/keyboard_controller_proxy.h
index f05f6f2..0884cd9 100644
--- a/ui/keyboard/keyboard_controller_proxy.h
+++ b/ui/keyboard/keyboard_controller_proxy.h
@@ -52,19 +52,10 @@
   // with the proxy.
   virtual aura::Window* GetKeyboardWindow();
 
-  // Whether the keyboard window is resizing from its web contents.
-  bool resizing_from_contents() const { return resizing_from_contents_; }
-
   // Whether the keyboard window is created. The keyboard window is tied to a
   // WebContent so we can just check if the WebContent is created or not.
   virtual bool HasKeyboardWindow() const;
 
-  // Sets the flag of whether the keyboard window is resizing from
-  // its web contents.
-  void set_resizing_from_contents(bool resizing) {
-    resizing_from_contents_ = resizing;
-  }
-
   // Gets the InputMethod that will provide notifications about changes in the
   // text input context.
   virtual ui::InputMethod* GetInputMethod() = 0;
@@ -130,9 +121,6 @@
 
   scoped_ptr<content::WebContents> keyboard_contents_;
 
-  // Whether the current keyboard window is resizing from its web content.
-  bool resizing_from_contents_;
-
   DISALLOW_COPY_AND_ASSIGN(KeyboardControllerProxy);
 };
 
diff --git a/ui/keyboard/keyboard_controller_unittest.cc b/ui/keyboard/keyboard_controller_unittest.cc
index cee5581..4333c84 100644
--- a/ui/keyboard/keyboard_controller_unittest.cc
+++ b/ui/keyboard/keyboard_controller_unittest.cc
@@ -27,6 +27,7 @@
 #include "ui/keyboard/keyboard_controller_observer.h"
 #include "ui/keyboard/keyboard_controller_proxy.h"
 #include "ui/keyboard/keyboard_switches.h"
+#include "ui/keyboard/keyboard_util.h"
 
 namespace keyboard {
 namespace {
@@ -193,8 +194,15 @@
   void SetFocus(ui::TextInputClient* client) {
     ui::InputMethod* input_method = proxy()->GetInputMethod();
     input_method->SetFocusedTextInputClient(client);
-    if (client && client->GetTextInputType() != ui::TEXT_INPUT_TYPE_NONE)
+    if (client && client->GetTextInputType() != ui::TEXT_INPUT_TYPE_NONE) {
       input_method->ShowImeIfNeeded();
+      if (proxy_->GetKeyboardWindow()->bounds().height() == 0) {
+        // Set initial bounds for test keyboard window.
+        proxy_->GetKeyboardWindow()->SetBounds(
+            KeyboardBoundsFromWindowBounds(
+                controller()->GetContainerWindow()->bounds(), 100));
+      }
+    }
   }
 
   bool WillHideKeyboard() {
@@ -214,17 +222,27 @@
 
 TEST_F(KeyboardControllerTest, KeyboardSize) {
   aura::Window* container(controller()->GetContainerWindow());
-  gfx::Rect bounds(0, 0, 100, 100);
-  container->SetBounds(bounds);
+  aura::Window* keyboard(proxy()->GetKeyboardWindow());
+  container->SetBounds(gfx::Rect(0, 0, 200, 100));
 
-  const gfx::Rect& before_bounds = proxy()->GetKeyboardWindow()->bounds();
+  container->AddChild(keyboard);
+  const gfx::Rect& before_bounds = keyboard->bounds();
+  // The initial keyboard should be positioned at the bottom of container and
+  // has 0 height.
+  ASSERT_EQ(gfx::Rect(0, 100, 200, 0), before_bounds);
+
   gfx::Rect new_bounds(
-      before_bounds.x(), before_bounds.y(),
-      before_bounds.width() / 2, before_bounds.height() / 2);
+      before_bounds.x(), before_bounds.y() - 50,
+      before_bounds.width(), 50);
 
-  // The KeyboardController's LayoutManager shouldn't let this happen
-  proxy()->GetKeyboardWindow()->SetBounds(new_bounds);
-  ASSERT_EQ(before_bounds, proxy()->GetKeyboardWindow()->bounds());
+  keyboard->SetBounds(new_bounds);
+  ASSERT_EQ(new_bounds, keyboard->bounds());
+
+  // Mock a screen rotation.
+  container->SetBounds(gfx::Rect(0, 0, 100, 200));
+  // The above call should resize keyboard to new width while keeping the old
+  // height.
+  ASSERT_EQ(gfx::Rect(0, 150, 100, 50), keyboard->bounds());
 }
 
 // Tests that tapping/clicking inside the keyboard does not give it focus.
@@ -393,33 +411,6 @@
   EXPECT_FALSE(keyboard_container->IsVisible());
 }
 
-TEST_F(KeyboardControllerTest, KeyboardResizingFromContents) {
-  aura::Window* keyboard_container = controller()->GetContainerWindow();
-  aura::Window* keyboard_window = proxy()->GetKeyboardWindow();
-  keyboard_container->SetBounds(gfx::Rect(800, 600));
-  keyboard_container->AddChild(keyboard_window);
-
-  int original_height = keyboard_window->bounds().height();
-
-  // Resizes from contents when flag is unset.
-  keyboard_window->SetBounds(gfx::Rect(100, 80));
-  EXPECT_EQ(original_height, keyboard_window->bounds().height());
-
-  // Resizes from contents when flag is set.
-  proxy()->set_resizing_from_contents(true);
-  keyboard_window->SetBounds(gfx::Rect(100, 80));
-  EXPECT_EQ(80, keyboard_window->bounds().height());
-
-  // Resizes from container when flag is set.
-  keyboard_container->SetBounds(gfx::Rect(400, 300));
-  EXPECT_EQ(80, keyboard_window->bounds().height());
-
-  // Resizes from container when flag is unset.
-  proxy()->set_resizing_from_contents(false);
-  keyboard_container->SetBounds(gfx::Rect(800, 600));
-  EXPECT_EQ(original_height, keyboard_window->bounds().height());
-}
-
 class KeyboardControllerAnimationTest : public KeyboardControllerTest,
                                         public KeyboardControllerObserver {
  public:
diff --git a/ui/keyboard/keyboard_layout_manager.cc b/ui/keyboard/keyboard_layout_manager.cc
index 3208541..d7faf0f 100644
--- a/ui/keyboard/keyboard_layout_manager.cc
+++ b/ui/keyboard/keyboard_layout_manager.cc
@@ -4,6 +4,7 @@
 
 #include "ui/keyboard/keyboard_layout_manager.h"
 
+#include "ui/compositor/layer_animator.h"
 #include "ui/keyboard/keyboard_controller.h"
 #include "ui/keyboard/keyboard_controller_proxy.h"
 #include "ui/keyboard/keyboard_util.h"
@@ -12,14 +13,24 @@
 
 // Overridden from aura::LayoutManager
 void KeyboardLayoutManager::OnWindowResized() {
-  if (keyboard_ && !controller_->proxy()->resizing_from_contents())
-    ResizeKeyboardToDefault(keyboard_);
+  if (keyboard_) {
+    gfx::Rect window_bounds = controller_->GetContainerWindow()->bounds();
+    // Keep the same height when window resize. It usually get called when
+    // screen rotate.
+    int height = keyboard_->bounds().height();
+    keyboard_->SetBounds(gfx::Rect(
+        window_bounds.x(),
+        window_bounds.bottom() - height,
+        window_bounds.width(),
+        height));
+  }
 }
 
 void KeyboardLayoutManager::OnWindowAddedToLayout(aura::Window* child) {
   DCHECK(!keyboard_);
   keyboard_ = child;
-  ResizeKeyboardToDefault(keyboard_);
+  keyboard_->SetBounds(DefaultKeyboardBoundsFromWindowBounds(
+      controller_->GetContainerWindow()->bounds()));
 }
 
 void KeyboardLayoutManager::SetChildBounds(aura::Window* child,
@@ -28,16 +39,25 @@
   // resizing from the contents (through window.resizeTo call in JS).
   // The flag resizing_from_contents() is used to determine the source of the
   // resize.
-  if (controller_->proxy()->resizing_from_contents()) {
-    controller_->NotifyKeyboardBoundsChanging(requested_bounds);
-    SetChildBoundsDirect(child, requested_bounds);
-  }
-}
+  DCHECK(child == keyboard_);
 
-void KeyboardLayoutManager::ResizeKeyboardToDefault(aura::Window* child) {
-  gfx::Rect keyboard_bounds = DefaultKeyboardBoundsFromWindowBounds(
-      controller_->GetContainerWindow()->bounds());
-  SetChildBoundsDirect(child, keyboard_bounds);
+  ui::LayerAnimator* animator =
+      controller_->GetContainerWindow()->layer()->GetAnimator();
+  // Stops previous animation if a window resize is requested during animation.
+  if (animator->is_animating())
+    animator->StopAnimating();
+
+  gfx::Rect old_bounds = child->bounds();
+  SetChildBoundsDirect(child, requested_bounds);
+  if (old_bounds.height() == 0 && child->bounds().height() != 0) {
+    // The window height is set to 0 initially. If the height of |old_bounds| is
+    // 0 and the new bounds is not 0, it probably means window.resizeTo is
+    // called to set the window height. We should try to show keyboard again in
+    // case the show keyboard request is called before the height is set.
+    controller_->ShowKeyboard(false);
+  } else {
+    controller_->NotifyKeyboardBoundsChanging(requested_bounds);
+  }
 }
 
 }  // namespace keyboard
diff --git a/ui/keyboard/keyboard_layout_manager.h b/ui/keyboard/keyboard_layout_manager.h
index 52af5c9..bc13f16 100644
--- a/ui/keyboard/keyboard_layout_manager.h
+++ b/ui/keyboard/keyboard_layout_manager.h
@@ -32,8 +32,6 @@
                               const gfx::Rect& requested_bounds) OVERRIDE;
 
  private:
-  void ResizeKeyboardToDefault(aura::Window* child);
-
   KeyboardController* controller_;
   aura::Window* keyboard_;
 
diff --git a/ui/keyboard/keyboard_util.cc b/ui/keyboard/keyboard_util.cc
index 7048be2..1e06795 100644
--- a/ui/keyboard/keyboard_util.cc
+++ b/ui/keyboard/keyboard_util.cc
@@ -43,26 +43,6 @@
 
 base::LazyInstance<GURL> g_override_content_url = LAZY_INSTANCE_INITIALIZER;
 
-// The ratio between the height of the keyboard and the screen when using the
-// usability keyboard.
-const float kUsabilityKeyboardHeightRatio = 1.0f;
-
-// The default ratio between the height of the keyboard and the screen.
-const float kDefaultKeyboardHeightRatio = 0.41f;
-
-// The ratio between the height of the keyboard and the screen when using the
-// accessibility keyboard.
-const float kAccessibilityKeyboardHeightRatio = 0.3f;
-
-float GetKeyboardHeightRatio(){
-  if (keyboard::IsKeyboardUsabilityExperimentEnabled()) {
-    return kUsabilityKeyboardHeightRatio;
-  } else if (keyboard::GetAccessibilityKeyboardEnabled()) {
-    return kAccessibilityKeyboardHeightRatio;
-  }
-  return kDefaultKeyboardHeightRatio;
-}
-
 bool g_touch_keyboard_enabled = false;
 
 }  // namespace
@@ -71,12 +51,23 @@
 
 gfx::Rect DefaultKeyboardBoundsFromWindowBounds(
     const gfx::Rect& window_bounds) {
-  const float kKeyboardHeightRatio = GetKeyboardHeightRatio();
+  // Initialize default keyboard height to 0. The keyboard window height should
+  // only be set by window.resizeTo in virtual keyboard web contents. Otherwise,
+  // the default height may conflict with the new height and causing some
+  // strange animation issues. For keyboard usability experiments, a full screen
+  // virtual keyboard window is always preferred.
   int keyboard_height =
-      static_cast<int>(window_bounds.height() * kKeyboardHeightRatio);
+      keyboard::IsKeyboardUsabilityExperimentEnabled() ?
+          window_bounds.height() : 0;
+
+  return KeyboardBoundsFromWindowBounds(window_bounds, keyboard_height);
+}
+
+gfx::Rect KeyboardBoundsFromWindowBounds(const gfx::Rect& window_bounds,
+                                         int keyboard_height) {
   return gfx::Rect(
       window_bounds.x(),
-      window_bounds.y() + window_bounds.height() - keyboard_height,
+      window_bounds.bottom() - keyboard_height,
       window_bounds.width(),
       keyboard_height);
 }
diff --git a/ui/keyboard/keyboard_util.h b/ui/keyboard/keyboard_util.h
index a3a1f8a..4e09d96 100644
--- a/ui/keyboard/keyboard_util.h
+++ b/ui/keyboard/keyboard_util.h
@@ -42,6 +42,11 @@
 KEYBOARD_EXPORT gfx::Rect DefaultKeyboardBoundsFromWindowBounds(
     const gfx::Rect& window_bounds);
 
+// Gets the caculated keyboard bounds from |window_bounds|. The keyboard height
+// is specified by |keyboard_height|.
+KEYBOARD_EXPORT gfx::Rect KeyboardBoundsFromWindowBounds(
+    const gfx::Rect& window_bounds, int keyboard_height);
+
 // Sets the state of the a11y onscreen keyboard.
 KEYBOARD_EXPORT void SetAccessibilityKeyboardEnabled(bool enabled);
 
diff --git a/ui/keyboard/resources/constants.js b/ui/keyboard/resources/constants.js
index 9636559..9b01704 100644
--- a/ui/keyboard/resources/constants.js
+++ b/ui/keyboard/resources/constants.js
@@ -59,6 +59,18 @@
 var KEY_ASPECT_RATIO_LANDSCAPE = 1.46;
 
 /**
+ * The ratio between the height and width of the compact keyboard.
+ * @type {number}
+ */
+var DEFAULT_KEYBOARD_ASPECT_RATIO = 0.3;
+
+/**
+ * The ratio between the height and width of the a11y keyboard.
+ * @type {number}
+ */
+var DEFAULT_A11Y_KEYBOARD_ASPECT_RATIO = 0.41;
+
+/**
  * The default weight of a key.
  * @type {number}
  */
diff --git a/ui/keyboard/resources/elements/kb-key.html b/ui/keyboard/resources/elements/kb-key.html
index 6b9103a..4a947be 100644
--- a/ui/keyboard/resources/elements/kb-key.html
+++ b/ui/keyboard/resources/elements/kb-key.html
@@ -9,13 +9,13 @@
   <template>
     <style>
       :host {
-        background-color: #3b3b3e;
-        border-radius: 2px;
+        background-color: #ffffff;
+        border-radius: 1px;
         border-style: solid;
-        border-width: 1px 0px;
-        color: #ffffff;
-        font-family: roboto-bold;
-        font-weight: 300;
+        border-width: 0px 0px;
+        color: #666666;
+        font-family: 'Droid Sans';
+        font-weight: 100;
       }
 
       :host .key {
@@ -58,20 +58,20 @@
         height: 80%;
       }
 
+      :host .hint,
+      :host([invert]) key {
+        color: #bbbbbb;
+      }
+
       :host .hint {
-        color: #313131;
         font-size: 70%;
         position: absolute;
         right: 7%;
         top: 5%;
       }
 
-      :host([invert]) .key {
-        color: #313131;
-      }
-
       :host([invert]) .hint {
-        color: #ffffff;
+        color: #666666;
       }
 
       :host(.dark) {
@@ -79,26 +79,17 @@
       }
 
       :host(.active) {
-        -webkit-box-shadow: inset 0px 1px #969696, inset 0px -1px #6f6f6f;
-        background-image: -webkit-linear-gradient(#8b8b8b, #7d7d7d);
+        background-color: #dddddd;
         background-size: cover;
-        border-bottom-color: #5b5b5b;
-        border-top-color: #a4a4a4;
       }
 
       :host(.dark:not(.active)) {
-        -webkit-box-shadow: inset 0px 1px #313131, inset 0px -1px #202020;
-        background-color: #222222;
-        border-bottom-color: #1c1c1c;
-        border-top-color: #4f4f4f;
+        background-color: #555555;
       }
 
       :host(:not(.dark):not(.active)) {
-        -webkit-box-shadow: inset 0px 1px #6f6f6f, inset 0px -1px #565656;
-        background-image: -webkit-linear-gradient(#636363, #5b5b5b);
+        background-color: #ffffff;
         background-size: cover;
-        border-bottom-color: #4a4a4a;
-        border-top-color: #878787;
       }
     </style>
     <div id="key" class="key">
diff --git a/ui/keyboard/resources/elements/kb-keyboard.html b/ui/keyboard/resources/elements/kb-keyboard.html
index 4d32229..b0b3ca6 100644
--- a/ui/keyboard/resources/elements/kb-keyboard.html
+++ b/ui/keyboard/resources/elements/kb-keyboard.html
@@ -15,8 +15,7 @@
     <style>
       :host {
         -webkit-user-select: none;
-        background-image: -webkit-linear-gradient(#282828, #000000);
-        background-size: cover;
+        background-color: #eeeeee;
         bottom: 0;
         cursor: default;
         left: 0;
diff --git a/ui/keyboard/resources/elements/kb-shift-key.html b/ui/keyboard/resources/elements/kb-shift-key.html
index 4deab64..1e1e734 100644
--- a/ui/keyboard/resources/elements/kb-shift-key.html
+++ b/ui/keyboard/resources/elements/kb-shift-key.html
@@ -19,13 +19,9 @@
       }
 
       .shift-light {
-        -webkit-box-shadow: inset 0 1px #101010, inset 0 -1px #444444;
-        background-image: -webkit-linear-gradient(#101010, #000000);
-        border: solid;
-        border-bottom-color: #1d1d1d;
-        border-top-color: #2d2d2d;
-        border-width: 1px 0;
-        height: 0.3em;
+        background-color: #ffffff;
+        border: none;
+        height: 0.2em;
         margin: 0 auto;
         position: relative;
         width: 1.8em;
diff --git a/ui/keyboard/resources/images/back.svg b/ui/keyboard/resources/images/back.svg
index 33d519a..61895dc 100644
--- a/ui/keyboard/resources/images/back.svg
+++ b/ui/keyboard/resources/images/back.svg
@@ -24,4 +24,4 @@
          d="m 0,0 -6.845,0 2.8,2.8 -1.132,1.132 -4.697,-4.699 4.688,-4.764 1.14,1.122 L -6.81,-1.6 0,-1.6 0,0 z"
          inkscape:connector-curvature="0"
          id="path14"
-         style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" /></g></g></svg>
\ No newline at end of file
+         style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" /></g></g></svg>
diff --git a/ui/keyboard/resources/images/backspace.svg b/ui/keyboard/resources/images/backspace.svg
index 9e195ab..eab8171 100644
--- a/ui/keyboard/resources/images/backspace.svg
+++ b/ui/keyboard/resources/images/backspace.svg
@@ -9,7 +9,7 @@
 	</sodipodi:namedview>
 <g id="layer1" inkscape:label="Layer 1" inkscape:groupmode="layer">
 	<g id="g1722" transform="matrix(1.25,0,0,-1.25,31.657411,29.649286)">
-		<path id="path1724" inkscape:connector-curvature="0" fill="#FFFFFF" d="M-0.626,0.41l-3.181,3.177l-3.176-3.18l-1.106,1.106
+		<path id="path1724" inkscape:connector-curvature="0" fill="#666666" d="M-0.626,0.41l-3.181,3.177l-3.176-3.18l-1.106,1.106
 			l3.179,3.181l-3.179,3.179l1.106,1.107l3.176-3.18l3.181,3.18l1.103-1.107L-2.7,4.692l3.177-3.18L-0.626,0.41z M-18.792,4.47
 			l6.248-6.231H6.54V10.8h-19.084L-18.792,4.47z"/>
 	</g>
diff --git a/ui/keyboard/resources/images/down.svg b/ui/keyboard/resources/images/down.svg
index 45f6466..f83fdd0 100644
--- a/ui/keyboard/resources/images/down.svg
+++ b/ui/keyboard/resources/images/down.svg
@@ -24,4 +24,4 @@
          d="M 0,0 3.57,-3.57 7.199,0"
          inkscape:connector-curvature="0"
          id="path14"
-         style="fill:none;stroke:#ffffff;stroke-width:1.60000002;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /></g></g></svg>
\ No newline at end of file
+         style="fill:none;stroke:#666666;stroke-width:1.60000002;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /></g></g></svg>
diff --git a/ui/keyboard/resources/images/hide-keyboard.svg b/ui/keyboard/resources/images/hide-keyboard.svg
index 3c2d0f3..55d59eb 100644
--- a/ui/keyboard/resources/images/hide-keyboard.svg
+++ b/ui/keyboard/resources/images/hide-keyboard.svg
@@ -4,11 +4,11 @@
 <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
 	 width="48px" height="48px" viewBox="0 0 48 48" enable-background="new 0 0 48 48" xml:space="preserve">
 <symbol  id="ic_x5F_keyboard_x0D_" viewBox="0 -24 24 24">
-	<path fill="#FFFFFF" d="M21-5H3C1.896-5,1.01-5.896,1.01-7L1-18c0-1.104,0.896-2,2-2h18c1.104,0,2,0.896,2,2v11
+	<path fill="#666666" d="M21-5H3C1.896-5,1.01-5.896,1.01-7L1-18c0-1.104,0.896-2,2-2h18c1.104,0,2,0.896,2,2v11
 		C23-5.896,22.104-5,21-5z M11-8h2v-2h-2V-8z M11-11h2v-2h-2V-11z M8-8h2v-2H8V-8z M8-11h2v-2H8V-11z M7-13H5v2h2V-13z M7-10H5v2h2
 		V-10z M16-17H8v2h8V-17z M16-13h-2v2h2V-13z M16-10h-2v2h2V-10z M19-13h-2v2h2V-13z M19-10h-2v2h2V-10z"/>
 	<polygon fill="none" points="24,-24 0,-24 0,0 24,0 	"/>
 </symbol>
 <use xlink:href="#ic_x5F_keyboard_x0D_"  width="24" height="24" id="XMLID_144_" y="-24" transform="matrix(1 0 0 -1 12 10)" overflow="visible"/>
-<polygon fill="#FFFFFF" points="21,32 27,32 24,35 "/>
+<polygon fill="#666666" points="21,32 27,32 24,35 "/>
 </svg>
diff --git a/ui/keyboard/resources/images/left.svg b/ui/keyboard/resources/images/left.svg
index 0d31feb..8c2e743 100644
--- a/ui/keyboard/resources/images/left.svg
+++ b/ui/keyboard/resources/images/left.svg
@@ -24,4 +24,4 @@
          d="M 0,0 -3.57,-3.57 0,-7.199"
          inkscape:connector-curvature="0"
          id="path14"
-         style="fill:none;stroke:#ffffff;stroke-width:1.60000002;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /></g></g></svg>
\ No newline at end of file
+         style="fill:none;stroke:#666666;stroke-width:1.60000002;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /></g></g></svg>
diff --git a/ui/keyboard/resources/images/return.svg b/ui/keyboard/resources/images/return.svg
index 3d69631..d83cc06 100644
--- a/ui/keyboard/resources/images/return.svg
+++ b/ui/keyboard/resources/images/return.svg
@@ -9,7 +9,7 @@
 	</sodipodi:namedview>
 <g id="layer1" inkscape:groupmode="layer" inkscape:label="Layer 1">
 	<g id="g1718" transform="matrix(1.25,0,0,-1.25,39.764197,19.091786)">
-		<path id="path1720" inkscape:connector-curvature="0" fill="#FFFFFF" d="M0.457,0.572v-3.598h-18v6.295l-9.936-7.197l9.936-7.193
+		<path id="path1720" inkscape:connector-curvature="0" fill="#666666" d="M0.457,0.572v-3.598h-18v6.295l-9.936-7.197l9.936-7.193
 			v6.295h19.8v5.398H0.457z"/>
 	</g>
 </g>
diff --git a/ui/keyboard/resources/images/right.svg b/ui/keyboard/resources/images/right.svg
index 09f2e28..9417842 100644
--- a/ui/keyboard/resources/images/right.svg
+++ b/ui/keyboard/resources/images/right.svg
@@ -24,4 +24,4 @@
          d="M 0,0 3.57,3.57 0,7.199"
          inkscape:connector-curvature="0"
          id="path14"
-         style="fill:none;stroke:#ffffff;stroke-width:1.60000002;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /></g></g></svg>
\ No newline at end of file
+         style="fill:none;stroke:#666666;stroke-width:1.60000002;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /></g></g></svg>
diff --git a/ui/keyboard/resources/images/search.svg b/ui/keyboard/resources/images/search.svg
index 9628a3c..5a5a783 100644
--- a/ui/keyboard/resources/images/search.svg
+++ b/ui/keyboard/resources/images/search.svg
@@ -9,7 +9,7 @@
 	</sodipodi:namedview>
 <g id="layer1" inkscape:groupmode="layer" inkscape:label="Layer 1">
 	<g id="g1682" transform="matrix(1.25,0,0,-1.25,36.051257,32.440573)">
-		<path id="path1684" inkscape:connector-curvature="0" fill="#FFFFFF" d="M0.114-0.8l-5.342,5.346h-1.102L-6.819,5.03
+		<path id="path1684" inkscape:connector-curvature="0" fill="#666666" d="M0.114-0.8l-5.342,5.346h-1.102L-6.819,5.03
 			c2.267,2.885,2.064,6.957-0.52,9.551c-2.802,2.799-7.329,2.799-10.138,0c-2.786-2.809-2.788-7.338,0-10.139
 			c2.598-2.58,6.629-2.792,9.557-0.513l0.486-0.485V2.342l5.338-5.347c0.324-0.32,1.108-0.198,1.756,0.447
 			C0.307-1.908,0.441-1.126,0.114-0.8 M-8.772,5.897L-8.772,5.897h-0.02V5.878c-2.006-1.991-5.24-1.987-7.244,0.008
diff --git a/ui/keyboard/resources/images/shift-filled.svg b/ui/keyboard/resources/images/shift-filled.svg
index 12cccf6..a6a87bb 100644
--- a/ui/keyboard/resources/images/shift-filled.svg
+++ b/ui/keyboard/resources/images/shift-filled.svg
@@ -9,7 +9,7 @@
 	</sodipodi:namedview>
 <g id="layer1" inkscape:groupmode="layer" inkscape:label="Layer 1">
 	<g id="g1726" transform="matrix(1.25,0,0,-1.25,24.286964,10.049732)">
-		<path id="path1728" inkscape:connector-curvature="0" fill="#FFFFFF" d="M-0.229-0.686l-7.02-7.051l-7.021-7.054h8.134v-6.845
+		<path id="path1728" inkscape:connector-curvature="0" fill="#666666" d="M-0.229-0.686l-7.02-7.051l-7.021-7.054h8.134v-6.845
 			H5.256v6.845h8.555L6.795-7.736L-0.229-0.686z"/>
 	</g>
 </g>
diff --git a/ui/keyboard/resources/images/shift.svg b/ui/keyboard/resources/images/shift.svg
index 4f0f95f..39f25d2 100644
--- a/ui/keyboard/resources/images/shift.svg
+++ b/ui/keyboard/resources/images/shift.svg
@@ -9,7 +9,7 @@
 	</sodipodi:namedview>
 <g id="layer1" inkscape:groupmode="layer" inkscape:label="Layer 1">
 	<g id="g1726" transform="matrix(1.25,0,0,-1.25,24.286964,10.049732)">
-		<path id="path1728" inkscape:connector-curvature="0" fill="#FFFFFF" d="M-0.229-0.686l-7.02-7.051l-7.021-7.054h8.134v-6.845
+		<path id="path1728" inkscape:connector-curvature="0" fill="#666666" d="M-0.229-0.686l-7.02-7.051l-7.021-7.054h8.134v-6.845
 			H5.256v6.845h8.555L6.795-7.736L-0.229-0.686z M-0.229-3.873l5.428-5.45l3.198-3.216H5.256h-2.25v-2.25v-4.595h-6.891v4.595v2.25
 			h-2.25h-2.72l3.201,3.215L-0.229-3.873z"/>
 	</g>
diff --git a/ui/keyboard/resources/images/tab.svg b/ui/keyboard/resources/images/tab.svg
index 89c2f62..cb64ebd 100644
--- a/ui/keyboard/resources/images/tab.svg
+++ b/ui/keyboard/resources/images/tab.svg
@@ -9,11 +9,11 @@
 	</sodipodi:namedview>
 <g id="layer1" inkscape:groupmode="layer" inkscape:label="Layer 1">
 	<g id="g1736" transform="matrix(1.25,0,0,-1.25,38.01192,16.333282)">
-		<path id="path1738" inkscape:connector-curvature="0" fill="#FFFFFF" d="M1.422-0.841h-15.969v-5.077l-8.011,5.802l8.011,5.805
+		<path id="path1738" inkscape:connector-curvature="0" fill="#666666" d="M1.422-0.841h-15.969v-5.077l-8.011,5.802l8.011,5.805
 			V0.611H1.422V-0.841z"/>
 	</g>
 	<g id="g1742" transform="matrix(1.25,0,0,-1.25,6.434791,29.565652)">
-		<path id="path1744" inkscape:connector-curvature="0" fill="#FFFFFF" d="M1.421-0.841h15.97v5.076l8.011-5.801L17.391-7.37v5.076
+		<path id="path1744" inkscape:connector-curvature="0" fill="#666666" d="M1.421-0.841h15.97v5.076l8.011-5.801L17.391-7.37v5.076
 			H1.421V-0.841z"/>
 	</g>
 </g>
diff --git a/ui/keyboard/resources/images/up.svg b/ui/keyboard/resources/images/up.svg
index 3b55bd7..696f92f 100644
--- a/ui/keyboard/resources/images/up.svg
+++ b/ui/keyboard/resources/images/up.svg
@@ -24,4 +24,4 @@
          d="M 0,0 -3.57,3.57 -7.199,0"
          inkscape:connector-curvature="0"
          id="path14"
-         style="fill:none;stroke:#ffffff;stroke-width:1.60000002;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /></g></g></svg>
\ No newline at end of file
+         style="fill:none;stroke:#666666;stroke-width:1.60000002;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /></g></g></svg>
diff --git a/ui/keyboard/resources/main.css b/ui/keyboard/resources/main.css
index 99c2c27..b206ea4 100644
--- a/ui/keyboard/resources/main.css
+++ b/ui/keyboard/resources/main.css
@@ -15,7 +15,7 @@
  */
 kb-keyboard.ctrl-active kb-modifier-key[char=Ctrl],
 kb-keyboard.alt-active kb-modifier-key[char=Alt] {
-  color: lightblue;
+  background-color: #bbbbbb;
 }
 
 kb-keyboard[keyset="upper"] kb-shift-key.dark /deep/ .key {
@@ -31,74 +31,24 @@
 */
 kb-keyboard.caps-locked kb-shift-key.dark /deep/
     .shift-light {
-  -webkit-box-shadow: 0 1px 1px rgba(213, 213, 213, 0.5),
-    0 -1px 1px rgba(213, 213, 213, 0.5);
-  background-image: -webkit-linear-gradient(#d5d5d5, #d5d5d5);
-  border: none;
-  height: 0.2em;
-}
-kb-keyboard.caps-locked kb-shift-key.dark /deep/
-    .shift-light-wrapper {
-  bottom: 2px;
+    background-color: rgba(0, 0, 255, 0.5);
 }
 
 kb-keyboard.ctrl-active kb-modifier-key[char=Ctrl],
 kb-keyboard.ctrl-active kb-modifier-key[char=Ctrl]  {
-  color: lightblue;
+  color: blue;
 }
 
-/** TODO(rsadam@): Move these rules to kb-row once we uprev to latest Polymer.*/
-kb-row:nth-child(2) kb-key:not(.dark):not(.active){
-  -webkit-box-shadow: inset 0px 1px #666666, inset 0px -1px #4c4c4c;
-  background-image: -webkit-linear-gradient(#5a5a5a, #515151);
-  background-size: cover;
-  border-bottom-color: #414141;
-  border-top-color: #7f7f7f;
-}
-
-kb-row:nth-child(3) kb-key:not(.dark):not(.active){
-  -webkit-box-shadow: inset 0px 1px #5d5d5d, inset 0px -1px #444444;
-  background-image: -webkit-linear-gradient(#505050, #494949);
-  background-size: cover;
-  border-bottom-color: #3a3a3a;
-  border-top-color: #787878;
-}
-
-kb-row:nth-child(n+3) kb-key:not(.dark):not(.active){
-  -webkit-box-shadow: inset 0px 1px #565656, inset 0px -1px #434343;
-  background-image: -webkit-linear-gradient(#484848, #474747);
-  background-size: cover;
-  border-bottom-color: #393939;
-  border-top-color: #717171;
-}
-
-kb-row:nth-child(2) kb-key:not([invert]) /deep/ .hint {
-  color: #2C2C2C;
-}
-
-kb-row:nth-child(3) kb-key:not([invert]) /deep/ .hint {
-  color: #272727;
-}
-
-kb-row:nth-child(n+3) kb-key:not([invert]) /deep/ .hint {
-  color: #232323;
-}
-
+.space,
 .dark {
   font-size: 70%;
 }
 
-.dark:not(.active) {
-  -webkit-box-shadow: inset 0px 1px #313131, inset 0px -1px #202020;
-  background-color: #222222;
-  border-bottom-color: #1c1c1c;
-  border-top-color: #4f4f4f;
+.dark:not(.active),
+:not(kb-altkey-set) > :not(.dark).active {
+  background-color: #dddddd;
 }
 
-:not(kb-altkey-set) > .active {
-  -webkit-box-shadow: inset 0px 1px #969696, inset 0px -1px #6f6f6f;
-  background-image: -webkit-linear-gradient(#8b8b8b, #7d7d7d);
-  background-size: cover;
-  border-bottom-color: #5b5b5b;
-  border-top-color: #a4a4a4;
+.space {
+  color: bbbbbb;
 }
diff --git a/ui/keyboard/resources/main.js b/ui/keyboard/resources/main.js
index 8eb8d5b..c837aed 100644
--- a/ui/keyboard/resources/main.js
+++ b/ui/keyboard/resources/main.js
@@ -205,9 +205,14 @@
    * @return {Array.<String, number>} The bounds of the keyboard container.
    */
   function getKeyboardBounds_() {
+    var keyboard = $('keyboard');
+    var ratio = DEFAULT_KEYBOARD_ASPECT_RATIO;
+    if (keyboard.config && keyboard.config.a11ymode) {
+      ratio = DEFAULT_A11Y_KEYBOARD_ASPECT_RATIO;
+    }
     return {
-      "width": window.innerWidth,
-      "height": window.innerHeight,
+      "width": screen.width,
+      "height": screen.height * ratio
     };
   }
 
@@ -566,8 +571,7 @@
    */
   function resizeKeyboardContainer(opt_params) {
     var params = opt_params ? opt_params : new AlignmentOptions();
-    var bounds = getKeyboardBounds();
-    if (Math.abs(bounds.height - params.height) > RESIZE_THRESHOLD) {
+    if (Math.abs(window.innerHeight - params.height) > RESIZE_THRESHOLD) {
       // Cannot resize more than 50% of screen height due to crbug.com/338829.
       window.resizeTo(params.width, params.height);
     }
diff --git a/ui/message_center/cocoa/opaque_views.h b/ui/message_center/cocoa/opaque_views.h
new file mode 100644
index 0000000..1a2f3b0
--- /dev/null
+++ b/ui/message_center/cocoa/opaque_views.h
@@ -0,0 +1,36 @@
+// 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.
+
+#ifndef UI_MESSAGE_CENTER_COCOA_OPAQUE_VIEWS_H_
+#define UI_MESSAGE_CENTER_COCOA_OPAQUE_VIEWS_H_
+
+#import <Cocoa/Cocoa.h>
+
+#include "base/mac/scoped_nsobject.h"
+
+// MCDropDown is the same as an NSPopupButton except that it fills its
+// background with a settable color.
+@interface MCDropDown : NSPopUpButton {
+ @private
+  base::scoped_nsobject<NSColor> backgroundColor_;
+}
+
+// Gets and sets the bubble's background color.
+- (NSColor*)backgroundColor;
+- (void)setBackgroundColor:(NSColor*)backgroundColor;
+@end
+
+// MCTextField fills its background with an opaque color.  It also configures
+// the view to have a plan appearance, without bezel, border, editing, etc.
+@interface MCTextField : NSTextField {
+ @private
+  base::scoped_nsobject<NSColor> backgroundColor_;
+}
+
+// Use this method to create the text field.  The color is required so it
+// can correctly subpixel antialias.
+- (id)initWithFrame:(NSRect)frameRect backgroundColor:(NSColor*)color;
+@end
+
+#endif  // UI_MESSAGE_CENTER_COCOA_OPAQUE_VIEWS_H_
diff --git a/ui/message_center/cocoa/opaque_views.mm b/ui/message_center/cocoa/opaque_views.mm
new file mode 100644
index 0000000..b6e054f
--- /dev/null
+++ b/ui/message_center/cocoa/opaque_views.mm
@@ -0,0 +1,63 @@
+// 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 "ui/message_center/cocoa/opaque_views.h"
+
+@implementation MCDropDown
+// The view must be opaque to render subpixel antialiasing.
+- (BOOL)isOpaque {
+  return YES;
+}
+
+// The view must also fill its background to render subpixel antialiasing.
+- (void)drawRect:(NSRect)dirtyRect {
+  [backgroundColor_ set];
+  NSRectFill(dirtyRect);
+  [super drawRect:dirtyRect];
+}
+
+- (NSColor*)backgroundColor {
+  return backgroundColor_;
+}
+
+- (void)setBackgroundColor:(NSColor*)backgroundColor {
+  backgroundColor_.reset([backgroundColor retain]);
+}
+@end
+
+@implementation MCTextField
+- (id)initWithFrame:(NSRect)frameRect backgroundColor:(NSColor*)color {
+  self = [self initWithFrame:frameRect];
+  if (self) {
+    [self setBackgroundColor:color];
+    backgroundColor_.reset([color retain]);
+  }
+  return self;
+}
+
+- (id)initWithFrame:(NSRect)frameRect {
+  self = [super initWithFrame:frameRect];
+  if (self) {
+    [self setAutoresizingMask:NSViewMinYMargin];
+    [self setBezeled:NO];
+    [self setBordered:NO];
+    [self setEditable:NO];
+    [self setSelectable:NO];
+    [self setDrawsBackground:YES];
+  }
+  return self;
+}
+
+// The view must be opaque to render subpixel antialiasing.
+- (BOOL)isOpaque {
+  return YES;
+}
+
+// The view must also fill its background to render subpixel antialiasing.
+- (void)drawRect:(NSRect)dirtyRect {
+  [backgroundColor_ set];
+  NSRectFill(dirtyRect);
+  [super drawRect:dirtyRect];
+}
+@end
diff --git a/ui/message_center/cocoa/settings_controller.h b/ui/message_center/cocoa/settings_controller.h
index 522e7e7..9869206 100644
--- a/ui/message_center/cocoa/settings_controller.h
+++ b/ui/message_center/cocoa/settings_controller.h
@@ -9,6 +9,7 @@
 
 #import "base/mac/scoped_nsobject.h"
 #include "base/memory/scoped_ptr.h"
+#import "ui/message_center/cocoa/opaque_views.h"
 #import "ui/message_center/cocoa/settings_entry_view.h"
 #include "ui/message_center/message_center_export.h"
 #include "ui/message_center/notifier_settings.h"
@@ -53,7 +54,7 @@
   base::scoped_nsobject<NSTextField> detailsText_;
 
   // The profile switcher.
-  base::scoped_nsobject<NSPopUpButton> groupDropDownButton_;
+  base::scoped_nsobject<MCDropDown> groupDropDownButton_;
 
   // Container for all the checkboxes.
   base::scoped_nsobject<NSScrollView> scrollView_;
diff --git a/ui/message_center/cocoa/settings_controller.mm b/ui/message_center/cocoa/settings_controller.mm
index 1f8e204..0bf9d5a 100644
--- a/ui/message_center/cocoa/settings_controller.mm
+++ b/ui/message_center/cocoa/settings_controller.mm
@@ -13,6 +13,7 @@
 #include "grit/ui_strings.h"
 #include "skia/ext/skia_utils_mac.h"
 #include "ui/base/l10n/l10n_util.h"
+#import "ui/message_center/cocoa/opaque_views.h"
 #import "ui/message_center/cocoa/settings_entry_view.h"
 #import "ui/message_center/cocoa/tray_view_controller.h"
 #include "ui/message_center/message_center_style.h"
@@ -104,12 +105,11 @@
 }
 
 - (NSTextField*)newLabelWithFrame:(NSRect)frame {
-  NSTextField* label = [[NSTextField alloc] initWithFrame:frame];
-  [label setDrawsBackground:NO];
-  [label setBezeled:NO];
-  [label setEditable:NO];
-  [label setSelectable:NO];
-  [label setAutoresizingMask:NSViewMinYMargin];
+  NSColor* color = gfx::SkColorToCalibratedNSColor(
+      message_center::kMessageCenterBackgroundColor);
+  MCTextField* label =
+      [[MCTextField alloc] initWithFrame:frame backgroundColor:color];
+
   return label;
 }
 
@@ -141,7 +141,6 @@
                                   NSWidth(fullFrame),
                                   NSHeight(fullFrame));
   settingsText_.reset([self newLabelWithFrame:headerFrame]);
-  [settingsText_ setAutoresizingMask:NSViewMinYMargin];
   [settingsText_ setTextColor:
           gfx::SkColorToCalibratedNSColor(message_center::kRegularTextColor)];
   [settingsText_
@@ -161,7 +160,6 @@
                                      NSWidth(fullFrame),
                                      NSHeight(fullFrame));
   detailsText_.reset([self newLabelWithFrame:subheaderFrame]);
-  [detailsText_ setAutoresizingMask:NSViewMinYMargin];
   [detailsText_ setTextColor:
       gfx::SkColorToCalibratedNSColor(message_center::kDimTextColor)];
   [detailsText_
@@ -186,8 +184,10 @@
                                      NSWidth(fullFrame),
                                      NSHeight(fullFrame));
     groupDropDownButton_.reset(
-        [[NSPopUpButton alloc] initWithFrame:dropDownButtonFrame
-                                   pullsDown:YES]);
+        [[MCDropDown alloc] initWithFrame:dropDownButtonFrame pullsDown:YES]);
+    [groupDropDownButton_
+        setBackgroundColor:gfx::SkColorToCalibratedNSColor(
+                               message_center::kMessageCenterBackgroundColor)];
     [groupDropDownButton_ setAction:@selector(notifierGroupSelectionChanged:)];
     [groupDropDownButton_ setTarget:self];
     // Add a dummy item for pull-down.
diff --git a/ui/message_center/cocoa/settings_entry_view.mm b/ui/message_center/cocoa/settings_entry_view.mm
index 0607247..ab73d98 100644
--- a/ui/message_center/cocoa/settings_entry_view.mm
+++ b/ui/message_center/cocoa/settings_entry_view.mm
@@ -56,6 +56,23 @@
 const int kCorrectedEntryRightPadding =
     kInternalHorizontalSpacing - kIntrinsicLearnMorePadding;
 
+////////////////////////////////////////////////////////////////////////////////
+
+@interface MCSettingsButton : NSButton
+@end
+
+@implementation MCSettingsButton
+// drawRect: needs to fill the button with a background, otherwise we don't get
+// subpixel antialiasing.
+- (void)drawRect:(NSRect)dirtyRect {
+  NSColor* color = gfx::SkColorToCalibratedNSColor(
+      message_center::kMessageCenterBackgroundColor);
+  [color set];
+  NSRectFill(dirtyRect);
+  [super drawRect:dirtyRect];
+}
+@end
+
 @interface MCSettingsButtonCell : NSButtonCell {
   // A checkbox's regular image is the checkmark image. This additional image
   // is used for the favicon or app icon shown next to the checkmark.
@@ -65,6 +82,10 @@
 @end
 
 @implementation MCSettingsButtonCell
+- (BOOL)isOpaque {
+  return YES;
+}
+
 - (void)setExtraImage:(NSImage*)extraImage {
   extraImage_.reset([extraImage retain]);
 }
@@ -133,7 +154,6 @@
 @end
 
 @implementation MCSettingsEntryView
-
 - (id)initWithController:(MCSettingsController*)controller
                 notifier:(message_center::Notifier*)notifier
                    frame:(NSRect)frame
@@ -218,7 +238,7 @@
   }
 
   if (!checkbox_.get()) {
-    checkbox_.reset([[NSButton alloc] initWithFrame:checkboxFrame]);
+    checkbox_.reset([[MCSettingsButton alloc] initWithFrame:checkboxFrame]);
     [self addSubview:checkbox_];
   } else {
     [checkbox_ setFrame:checkboxFrame];
diff --git a/ui/message_center/cocoa/tray_view_controller.mm b/ui/message_center/cocoa/tray_view_controller.mm
index 5344268..2458457 100644
--- a/ui/message_center/cocoa/tray_view_controller.mm
+++ b/ui/message_center/cocoa/tray_view_controller.mm
@@ -14,6 +14,7 @@
 #import "ui/base/cocoa/hover_image_button.h"
 #include "ui/base/l10n/l10n_util_mac.h"
 #include "ui/base/resource/resource_bundle.h"
+#import "ui/message_center/cocoa/opaque_views.h"
 #import "ui/message_center/cocoa/notification_controller.h"
 #import "ui/message_center/cocoa/settings_controller.h"
 #include "ui/message_center/message_center.h"
@@ -398,19 +399,12 @@
   ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
   NSView* view = [self view];
 
-  auto configureLabel = ^(NSTextField* textField) {
-      [textField setAutoresizingMask:NSViewMinYMargin];
-      [textField setBezeled:NO];
-      [textField setBordered:NO];
-      [textField setDrawsBackground:NO];
-      [textField setEditable:NO];
-      [textField setSelectable:NO];
-  };
-
   // Create the "Notifications" label at the top of the tray.
   NSFont* font = [NSFont labelFontOfSize:message_center::kTitleFontSize];
-  title_.reset([[NSTextField alloc] initWithFrame:NSZeroRect]);
-  configureLabel(title_);
+  NSColor* color = gfx::SkColorToCalibratedNSColor(
+      message_center::kMessageCenterBackgroundColor);
+  title_.reset(
+      [[MCTextField alloc] initWithFrame:NSZeroRect backgroundColor:color]);
 
   [title_ setFont:font];
   [title_ setStringValue:
@@ -541,8 +535,8 @@
 
   // Create the description field for the empty message center.  Initially it is
   // invisible.
-  emptyDescription_.reset([[NSTextField alloc] initWithFrame:NSZeroRect]);
-  configureLabel(emptyDescription_);
+  emptyDescription_.reset(
+      [[MCTextField alloc] initWithFrame:NSZeroRect backgroundColor:color]);
 
   NSFont* smallFont =
       [NSFont labelFontOfSize:message_center::kEmptyCenterFontSize];
diff --git a/ui/message_center/message_center.gyp b/ui/message_center/message_center.gyp
index 8fc29a6..9db4e5a 100644
--- a/ui/message_center/message_center.gyp
+++ b/ui/message_center/message_center.gyp
@@ -28,6 +28,8 @@
       'sources': [
         'cocoa/notification_controller.h',
         'cocoa/notification_controller.mm',
+        'cocoa/opaque_views.h',
+        'cocoa/opaque_views.mm',
         'cocoa/popup_collection.h',
         'cocoa/popup_collection.mm',
         'cocoa/popup_controller.h',
diff --git a/ui/message_center/message_center_impl.cc b/ui/message_center/message_center_impl.cc
index b56e76e..14cbe7b 100644
--- a/ui/message_center/message_center_impl.cc
+++ b/ui/message_center/message_center_impl.cc
@@ -637,15 +637,16 @@
   if (!HasNotification(id))
     return;
 
-  scoped_refptr<NotificationDelegate> delegate =
-      notification_list_->GetNotificationDelegate(id);
-  if (delegate.get())
-    delegate->Close(by_user);
-
   // In many cases |id| is a reference to an existing notification instance
   // but the instance can be destructed in RemoveNotification(). Hence
   // copies the id explicitly here.
   std::string copied_id(id);
+
+  scoped_refptr<NotificationDelegate> delegate =
+      notification_list_->GetNotificationDelegate(copied_id);
+  if (delegate.get())
+    delegate->Close(by_user);
+
   notification_list_->RemoveNotification(copied_id);
   notification_cache_.Rebuild(
       notification_list_->GetVisibleNotifications(blockers_));
diff --git a/ui/native_theme/common_theme.cc b/ui/native_theme/common_theme.cc
index 0e6b76b..49d59c8 100644
--- a/ui/native_theme/common_theme.cc
+++ b/ui/native_theme/common_theme.cc
@@ -32,6 +32,8 @@
 const SkColor kDisabledMenuItemForegroundColor = SkColorSetRGB(161, 161, 146);
 const SkColor kHoverMenuItemBackgroundColor =
     SkColorSetARGB(204, 255, 255, 255);
+// Button:
+const SkColor kButtonHoverBackgroundColor = SkColorSetRGB(0xEA, 0xEA, 0xEA);
 
 }  // namespace
 
@@ -79,6 +81,10 @@
     case NativeTheme::kColorId_ButtonDisabledColor:
       *color = kDisabledMenuItemForegroundColor;
       break;
+    // Button
+    case NativeTheme::kColorId_ButtonHoverBackgroundColor:
+      *color = kButtonHoverBackgroundColor;
+      break;
     default:
       return false;
   }
diff --git a/ui/native_theme/fallback_theme.cc b/ui/native_theme/fallback_theme.cc
index ffb15fd..ab6fc27 100644
--- a/ui/native_theme/fallback_theme.cc
+++ b/ui/native_theme/fallback_theme.cc
@@ -36,6 +36,8 @@
   static const SkColor kButtonDisabledColor = SkColorSetRGB(0x99, 0x99, 0x99);
   static const SkColor kButtonHighlightColor = SkColorSetRGB(0, 0, 0);
   static const SkColor kButtonHoverColor = kButtonEnabledColor;
+  static const SkColor kButtonHoverBackgroundColor =
+      SkColorSetRGB(0xEA, 0xEA, 0xEA);
   // MenuItem:
   static const SkColor kEnabledMenuItemForegroundColor = kButtonEnabledColor;
   static const SkColor kDisabledMenuItemForegroundColor = kButtonDisabledColor;
@@ -135,6 +137,8 @@
       return kButtonHighlightColor;
     case kColorId_ButtonHoverColor:
       return kButtonHoverColor;
+    case kColorId_ButtonHoverBackgroundColor:
+      return kButtonHoverBackgroundColor;
 
     // MenuItem
     case kColorId_EnabledMenuItemForegroundColor:
diff --git a/ui/native_theme/native_theme.h b/ui/native_theme/native_theme.h
index 67af252..aab923a 100644
--- a/ui/native_theme/native_theme.h
+++ b/ui/native_theme/native_theme.h
@@ -240,6 +240,7 @@
     kColorId_ButtonDisabledColor,
     kColorId_ButtonHighlightColor,
     kColorId_ButtonHoverColor,
+    kColorId_ButtonHoverBackgroundColor,
     // MenuItem
     kColorId_EnabledMenuItemForegroundColor,
     kColorId_DisabledMenuItemForegroundColor,
diff --git a/ui/native_theme/native_theme.target.darwin-arm.mk b/ui/native_theme/native_theme.target.darwin-arm.mk
index 1882cbf..c15f7c8 100644
--- a/ui/native_theme/native_theme.target.darwin-arm.mk
+++ b/ui/native_theme/native_theme.target.darwin-arm.mk
@@ -99,12 +99,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -221,12 +224,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -300,7 +306,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/native_theme/native_theme.target.darwin-mips.mk b/ui/native_theme/native_theme.target.darwin-mips.mk
index 3776302..f6a88a5 100644
--- a/ui/native_theme/native_theme.target.darwin-mips.mk
+++ b/ui/native_theme/native_theme.target.darwin-mips.mk
@@ -98,12 +98,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -219,12 +222,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -296,7 +302,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/native_theme/native_theme.target.darwin-x86.mk b/ui/native_theme/native_theme.target.darwin-x86.mk
index 44e2198..d255548 100644
--- a/ui/native_theme/native_theme.target.darwin-x86.mk
+++ b/ui/native_theme/native_theme.target.darwin-x86.mk
@@ -100,12 +100,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -221,12 +224,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -296,7 +302,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/native_theme/native_theme.target.darwin-x86_64.mk b/ui/native_theme/native_theme.target.darwin-x86_64.mk
index f11a32e..2151037 100644
--- a/ui/native_theme/native_theme.target.darwin-x86_64.mk
+++ b/ui/native_theme/native_theme.target.darwin-x86_64.mk
@@ -100,12 +100,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -222,12 +225,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -298,7 +304,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/native_theme/native_theme.target.linux-arm.mk b/ui/native_theme/native_theme.target.linux-arm.mk
index 1882cbf..c15f7c8 100644
--- a/ui/native_theme/native_theme.target.linux-arm.mk
+++ b/ui/native_theme/native_theme.target.linux-arm.mk
@@ -99,12 +99,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -221,12 +224,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -300,7 +306,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/native_theme/native_theme.target.linux-mips.mk b/ui/native_theme/native_theme.target.linux-mips.mk
index 3776302..f6a88a5 100644
--- a/ui/native_theme/native_theme.target.linux-mips.mk
+++ b/ui/native_theme/native_theme.target.linux-mips.mk
@@ -98,12 +98,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -219,12 +222,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -296,7 +302,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/native_theme/native_theme.target.linux-x86.mk b/ui/native_theme/native_theme.target.linux-x86.mk
index 44e2198..d255548 100644
--- a/ui/native_theme/native_theme.target.linux-x86.mk
+++ b/ui/native_theme/native_theme.target.linux-x86.mk
@@ -100,12 +100,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -221,12 +224,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -296,7 +302,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/native_theme/native_theme.target.linux-x86_64.mk b/ui/native_theme/native_theme.target.linux-x86_64.mk
index f11a32e..2151037 100644
--- a/ui/native_theme/native_theme.target.linux-x86_64.mk
+++ b/ui/native_theme/native_theme.target.linux-x86_64.mk
@@ -100,12 +100,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -222,12 +225,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -298,7 +304,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/native_theme/native_theme_win.cc b/ui/native_theme/native_theme_win.cc
index a09be6c..55c9f48 100644
--- a/ui/native_theme/native_theme_win.cc
+++ b/ui/native_theme/native_theme_win.cc
@@ -50,6 +50,7 @@
 const SkColor kButtonBackgroundColor = SkColorSetRGB(0xde, 0xde, 0xde);
 const SkColor kButtonHighlightColor = SkColorSetARGB(200, 255, 255, 255);
 const SkColor kButtonHoverColor = SkColorSetRGB(6, 45, 117);
+const SkColor kButtonHoverBackgroundColor = SkColorSetRGB(0xEA, 0xEA, 0xEA);
 // MenuItem:
 const SkColor kEnabledMenuItemForegroundColor = SkColorSetRGB(6, 45, 117);
 const SkColor kDisabledMenuItemForegroundColor = SkColorSetRGB(161, 161, 146);
@@ -532,6 +533,8 @@
       return kButtonHighlightColor;
     case kColorId_ButtonHoverColor:
       return kButtonHoverColor;
+    case kColorId_ButtonHoverBackgroundColor:
+      return kButtonHoverBackgroundColor;
 
     // MenuItem
     case kColorId_EnabledMenuItemForegroundColor:
diff --git a/ui/ozone/ozone.gyp b/ui/ozone/ozone.gyp
index 0dfb9c7..8ccb0d7 100644
--- a/ui/ozone/ozone.gyp
+++ b/ui/ozone/ozone.gyp
@@ -41,10 +41,30 @@
         'ozone_platform.h',
         'ozone_switches.cc',
         'ozone_switches.h',
+        'platform/dri/chromeos/display_mode_dri.cc',
+        'platform/dri/chromeos/display_mode_dri.h',
+        'platform/dri/chromeos/display_snapshot_dri.cc',
+        'platform/dri/chromeos/display_snapshot_dri.h',
+        'platform/dri/chromeos/native_display_delegate_dri.cc',
+        'platform/dri/chromeos/native_display_delegate_dri.h',
         'platform/dri/ozone_platform_dri.cc',
         'platform/dri/ozone_platform_dri.h',
         'platform/dri/cursor_factory_evdev_dri.cc',
         'platform/dri/cursor_factory_evdev_dri.h',
+        'platform/dri/dri_buffer.cc',
+        'platform/dri/dri_buffer.h',
+        'platform/dri/dri_surface.cc',
+        'platform/dri/dri_surface.h',
+        'platform/dri/dri_surface_factory.cc',
+        'platform/dri/dri_surface_factory.h',
+        'platform/dri/dri_util.cc',
+        'platform/dri/dri_util.h',
+        'platform/dri/dri_vsync_provider.cc',
+        'platform/dri/dri_vsync_provider.h',
+        'platform/dri/dri_wrapper.cc',
+        'platform/dri/dri_wrapper.h',
+        'platform/dri/hardware_display_controller.cc',
+        'platform/dri/hardware_display_controller.h',
         'platform/test/ozone_platform_test.cc',
         'platform/test/ozone_platform_test.h',
         '<@(external_ozone_platform_files)',
@@ -80,7 +100,11 @@
             'ozone_platforms': [
               'dri'
             ]
-          }
+          },
+          'dependencies': [
+            '../../build/linux/system.gyp:dridrm',
+            '../../ui/display/display.gyp:display_util',
+          ],
         }, {  # ozone_platform_dri==0
           'sources/': [
             ['exclude', '^platform/dri/'],
diff --git a/ui/ozone/ozone_platform.cc b/ui/ozone/ozone_platform.cc
index feb36ba..e8199b2 100644
--- a/ui/ozone/ozone_platform.cc
+++ b/ui/ozone/ozone_platform.cc
@@ -6,6 +6,9 @@
 #include "base/debug/trace_event.h"
 #include "base/logging.h"
 #include "ui/base/cursor/ozone/cursor_factory_ozone.h"
+#include "ui/events/ozone/event_factory_ozone.h"
+#include "ui/gfx/ozone/surface_factory_ozone.h"
+#include "ui/ozone/ime/input_method_context_factory_ozone.h"
 #include "ui/ozone/ozone_platform.h"
 #include "ui/ozone/ozone_platform_list.h"
 #include "ui/ozone/ozone_switches.h"
diff --git a/ui/ozone/ozone_platform.h b/ui/ozone/ozone_platform.h
index e87f422..536ff0e 100644
--- a/ui/ozone/ozone_platform.h
+++ b/ui/ozone/ozone_platform.h
@@ -6,14 +6,17 @@
 #define UI_OZONE_OZONE_PLATFORM_H_
 
 #include "base/memory/scoped_ptr.h"
-#include "ui/events/ozone/event_factory_ozone.h"
-#include "ui/gfx/ozone/surface_factory_ozone.h"
-#include "ui/ozone/ime/input_method_context_factory_ozone.h"
 #include "ui/ozone/ozone_export.h"
 
+namespace gfx {
+class SurfaceFactoryOzone;
+}
+
 namespace ui {
 
 class CursorFactoryOzone;
+class EventFactoryOzone;
+class InputMethodContextFactoryOzone;
 class NativeDisplayDelegate;
 
 // Base class for Ozone platform implementations.
diff --git a/ui/ozone/ozone_unittests.gypi b/ui/ozone/ozone_unittests.gypi
new file mode 100644
index 0000000..b9d8819
--- /dev/null
+++ b/ui/ozone/ozone_unittests.gypi
@@ -0,0 +1,23 @@
+# 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.
+
+{
+  'sources': [
+    'platform/dri/hardware_display_controller_unittest.cc',
+    'platform/dri/dri_surface_factory_unittest.cc',
+    'platform/dri/dri_surface_unittest.cc',
+  ],
+  'conditions': [
+    ['ozone_platform_dri == 1', {
+      'dependencies': [
+        '../build/linux/system.gyp:dridrm',
+        '../ui/ozone/ozone.gyp:ozone',
+      ],
+    }, {
+      'sources/': [
+        ['exclude', '^platform/dri/'],
+      ],
+    }],
+  ],
+}
diff --git a/ui/ozone/platform/caca/caca_surface_factory.cc b/ui/ozone/platform/caca/caca_surface_factory.cc
index 13b8a8c..1786831 100644
--- a/ui/ozone/platform/caca/caca_surface_factory.cc
+++ b/ui/ozone/platform/caca/caca_surface_factory.cc
@@ -23,6 +23,8 @@
   CacaSurface(CacaConnection* connection);
   virtual ~CacaSurface();
 
+  bool Initialize();
+
   // gfx::SurfaceOzoneCanvas overrides:
   virtual skia::RefPtr<SkCanvas> GetCanvas() OVERRIDE;
   virtual bool ResizeCanvas(const gfx::Size& viewport_size) OVERRIDE;
@@ -46,7 +48,7 @@
   caca_free_dither(dither_);
 }
 
-bool CacaSurface::InitializeCanvas() {
+bool CacaSurface::Initialize() {
   SkImageInfo info = SkImageInfo::Make(connection_->bitmap_size().width(),
                                        connection_->bitmap_size().height(),
                                        kPMColor_SkColorType,
@@ -140,7 +142,9 @@
   CHECK_EQ(INITIALIZED, state_);
   CHECK_EQ(kDefaultWidgetHandle, widget);
 
-  return make_scoped_ptr<gfx::SurfaceOzoneCanvas>(new CacaSurface(connection_));
+  scoped_ptr<CacaSurface> canvas(new CacaSurface(connection_));
+  CHECK(canvas->Initialize());
+  return canvas.PassAs<gfx::SurfaceOzoneCanvas>();
 }
 
 }  // namespace ui
diff --git a/ui/ozone/platform/caca/caca_surface_factory.h b/ui/ozone/platform/caca/caca_surface_factory.h
index 80fd34f..c3db5fd 100644
--- a/ui/ozone/platform/caca/caca_surface_factory.h
+++ b/ui/ozone/platform/caca/caca_surface_factory.h
@@ -10,6 +10,10 @@
 #include "base/memory/scoped_ptr.h"
 #include "ui/gfx/ozone/surface_factory_ozone.h"
 
+namespace gfx {
+class SurfaceOzone;
+}
+
 namespace ui {
 
 class CacaConnection;
@@ -26,7 +30,7 @@
   virtual bool LoadEGLGLES2Bindings(
       AddGLLibraryCallback add_gl_library,
       SetGLGetProcAddressProcCallback set_gl_get_proc_address) OVERRIDE;
-  virtual scoped_ptr<gfx::SurfaceOzone> CreateSurfaceForWidget(
+  virtual scoped_ptr<gfx::SurfaceOzoneCanvas> CreateCanvasForWidget(
       gfx::AcceleratedWidget widget) OVERRIDE;
 
  private:
diff --git a/ui/ozone/platform/caca/ozone_platform_caca.cc b/ui/ozone/platform/caca/ozone_platform_caca.cc
index 6a35c6b..a5a6b02 100644
--- a/ui/ozone/platform/caca/ozone_platform_caca.cc
+++ b/ui/ozone/platform/caca/ozone_platform_caca.cc
@@ -4,8 +4,12 @@
 
 #include "ui/ozone/platform/caca/ozone_platform_caca.h"
 
+#include "ui/base/cursor/ozone/cursor_factory_ozone.h"
+#include "ui/ozone/ime/input_method_context_factory_ozone.h"
 #include "ui/ozone/ozone_platform.h"
 #include "ui/ozone/platform/caca/caca_connection.h"
+#include "ui/ozone/platform/caca/caca_event_factory.h"
+#include "ui/ozone/platform/caca/caca_surface_factory.h"
 
 #if defined(OS_CHROMEOS)
 #include "ui/ozone/common/chromeos/native_display_delegate_ozone.h"
@@ -13,38 +17,50 @@
 
 namespace ui {
 
-OzonePlatformCaca::OzonePlatformCaca()
-    : connection_(),
-      surface_factory_ozone_(&connection_),
-      event_factory_ozone_(&connection_) {}
+namespace {
 
-OzonePlatformCaca::~OzonePlatformCaca() {}
+class OzonePlatformCaca : public OzonePlatform {
+ public:
+  OzonePlatformCaca()
+      : surface_factory_ozone_(&connection_),
+        event_factory_ozone_(&connection_) {}
+  virtual ~OzonePlatformCaca() {}
 
-gfx::SurfaceFactoryOzone* OzonePlatformCaca::GetSurfaceFactoryOzone() {
-  return &surface_factory_ozone_;
-}
-
-ui::EventFactoryOzone* OzonePlatformCaca::GetEventFactoryOzone() {
-  return &event_factory_ozone_;
-}
-
-ui::InputMethodContextFactoryOzone*
-OzonePlatformCaca::GetInputMethodContextFactoryOzone() {
-  return &input_method_context_factory_ozone_;
-}
-
-ui::CursorFactoryOzone* OzonePlatformCaca::GetCursorFactoryOzone() {
-  return &cursor_factory_ozone_;
-}
+  // OzonePlatform:
+  virtual gfx::SurfaceFactoryOzone* GetSurfaceFactoryOzone() OVERRIDE {
+    return &surface_factory_ozone_;
+  }
+  virtual EventFactoryOzone* GetEventFactoryOzone() OVERRIDE {
+    return &event_factory_ozone_;
+  }
+  virtual InputMethodContextFactoryOzone* GetInputMethodContextFactoryOzone()
+      OVERRIDE {
+    return &input_method_context_factory_ozone_;
+  }
+  virtual CursorFactoryOzone* GetCursorFactoryOzone() OVERRIDE {
+    return &cursor_factory_ozone_;
+  }
 
 #if defined(OS_CHROMEOS)
-scoped_ptr<ui::NativeDisplayDelegate>
-OzonePlatformCaca::CreateNativeDisplayDelegate() {
-  return scoped_ptr<ui::NativeDisplayDelegate>(
-      new NativeDisplayDelegateOzone());
-}
+  virtual scoped_ptr<NativeDisplayDelegate> CreateNativeDisplayDelegate()
+      OVERRIDE {
+    return scoped_ptr<NativeDisplayDelegate>(new NativeDisplayDelegateOzone());
+  }
 #endif
 
+ private:
+  CacaConnection connection_;
+  CacaSurfaceFactory surface_factory_ozone_;
+  CacaEventFactory event_factory_ozone_;
+  // This creates a minimal input context.
+  InputMethodContextFactoryOzone input_method_context_factory_ozone_;
+  CursorFactoryOzone cursor_factory_ozone_;
+
+  DISALLOW_COPY_AND_ASSIGN(OzonePlatformCaca);
+};
+
+}  // namespace
+
 OzonePlatform* CreateOzonePlatformCaca() { return new OzonePlatformCaca; }
 
 }  // namespace ui
diff --git a/ui/ozone/platform/caca/ozone_platform_caca.h b/ui/ozone/platform/caca/ozone_platform_caca.h
index f25b947..bf1f735 100644
--- a/ui/ozone/platform/caca/ozone_platform_caca.h
+++ b/ui/ozone/platform/caca/ozone_platform_caca.h
@@ -5,45 +5,12 @@
 #ifndef UI_OZONE_PLATFORM_CACA_OZONE_PLATFORM_CACA_H_
 #define UI_OZONE_PLATFORM_CACA_OZONE_PLATFORM_CACA_H_
 
-#include "ui/base/cursor/ozone/cursor_factory_ozone.h"
-#include "ui/ozone/ozone_export.h"
-#include "ui/ozone/ozone_platform.h"
-#include "ui/ozone/platform/caca/caca_connection.h"
-#include "ui/ozone/platform/caca/caca_event_factory.h"
-#include "ui/ozone/platform/caca/caca_surface_factory.h"
-
 namespace ui {
 
-class CacaConnection;
-
-class OzonePlatformCaca : public OzonePlatform {
- public:
-  OzonePlatformCaca();
-  virtual ~OzonePlatformCaca();
-
-  virtual gfx::SurfaceFactoryOzone* GetSurfaceFactoryOzone() OVERRIDE;
-  virtual ui::EventFactoryOzone* GetEventFactoryOzone() OVERRIDE;
-  virtual ui::InputMethodContextFactoryOzone*
-      GetInputMethodContextFactoryOzone() OVERRIDE;
-  virtual ui::CursorFactoryOzone* GetCursorFactoryOzone() OVERRIDE;
-#if defined(OS_CHROMEOS)
-  virtual scoped_ptr<ui::NativeDisplayDelegate>
-      CreateNativeDisplayDelegate() OVERRIDE;
-#endif
-
- private:
-  ui::CacaConnection connection_;
-  ui::CacaSurfaceFactory surface_factory_ozone_;
-  ui::CacaEventFactory event_factory_ozone_;
-  // This creates a minimal input context.
-  ui::InputMethodContextFactoryOzone input_method_context_factory_ozone_;
-  ui::CursorFactoryOzone cursor_factory_ozone_;
-
-  DISALLOW_COPY_AND_ASSIGN(OzonePlatformCaca);
-};
+class OzonePlatform;
 
 // Constructor hook for use in ozone_platform_list.cc
-OZONE_EXPORT OzonePlatform* CreateOzonePlatformCaca();
+OzonePlatform* CreateOzonePlatformCaca();
 
 }  // namespace ui
 
diff --git a/ui/ozone/platform/dri/DEPS b/ui/ozone/platform/dri/DEPS
new file mode 100644
index 0000000..ee54c22
--- /dev/null
+++ b/ui/ozone/platform/dri/DEPS
@@ -0,0 +1,4 @@
+include_rules = [
+  "+skia/ext",
+  "+third_party/skia",
+]
diff --git a/ui/ozone/platform/dri/chromeos/DEPS b/ui/ozone/platform/dri/chromeos/DEPS
new file mode 100644
index 0000000..0ab1471
--- /dev/null
+++ b/ui/ozone/platform/dri/chromeos/DEPS
@@ -0,0 +1,3 @@
+include_rules = [
+  "+ui/display/util",
+]
diff --git a/ui/ozone/platform/dri/chromeos/display_mode_dri.cc b/ui/ozone/platform/dri/chromeos/display_mode_dri.cc
new file mode 100644
index 0000000..707cb91
--- /dev/null
+++ b/ui/ozone/platform/dri/chromeos/display_mode_dri.cc
@@ -0,0 +1,17 @@
+// 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.
+
+#include "ui/ozone/platform/dri/chromeos/display_mode_dri.h"
+
+namespace ui {
+
+DisplayModeDri::DisplayModeDri(const drmModeModeInfo& mode)
+    : DisplayMode(gfx::Size(mode.hdisplay, mode.vdisplay),
+                  mode.flags & DRM_MODE_FLAG_INTERLACE,
+                  mode.vrefresh),
+      mode_info_(mode) {}
+
+DisplayModeDri::~DisplayModeDri() {}
+
+}  // namespace ui
diff --git a/ui/ozone/platform/dri/chromeos/display_mode_dri.h b/ui/ozone/platform/dri/chromeos/display_mode_dri.h
new file mode 100644
index 0000000..ab50df2
--- /dev/null
+++ b/ui/ozone/platform/dri/chromeos/display_mode_dri.h
@@ -0,0 +1,33 @@
+// 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.
+
+#ifndef UI_OZONE_PLATFORM_DRI_CHROMEOS_DISPLAY_MODE_DRI_H_
+#define UI_OZONE_PLATFORM_DRI_CHROMEOS_DISPLAY_MODE_DRI_H_
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <xf86drmMode.h>
+
+#include "ui/display/types/chromeos/display_mode.h"
+
+namespace ui {
+
+class DisplayModeDri : public DisplayMode {
+ public:
+  DisplayModeDri(const drmModeModeInfo& mode);
+  virtual ~DisplayModeDri();
+
+  // Native details about this mode. Only used internally in the DRI
+  // implementation.
+  drmModeModeInfo mode_info() const { return mode_info_; }
+
+ private:
+  drmModeModeInfo mode_info_;
+
+  DISALLOW_COPY_AND_ASSIGN(DisplayModeDri);
+};
+
+}  // namespace ui
+
+#endif  // UI_OZONE_PLATFORM_DRI_CHROMEOS_DISPLAY_MODE_DRI_H_
diff --git a/ui/ozone/platform/dri/chromeos/display_snapshot_dri.cc b/ui/ozone/platform/dri/chromeos/display_snapshot_dri.cc
new file mode 100644
index 0000000..df9f4c6
--- /dev/null
+++ b/ui/ozone/platform/dri/chromeos/display_snapshot_dri.cc
@@ -0,0 +1,142 @@
+// 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.
+
+#include "ui/ozone/platform/dri/chromeos/display_snapshot_dri.h"
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <xf86drmMode.h>
+
+#include "base/format_macros.h"
+#include "base/logging.h"
+#include "base/strings/stringprintf.h"
+#include "ui/display/util/edid_parser.h"
+#include "ui/ozone/platform/dri/chromeos/display_mode_dri.h"
+#include "ui/ozone/platform/dri/dri_wrapper.h"
+
+namespace ui {
+
+namespace {
+
+DisplayConnectionType GetDisplayType(drmModeConnector* connector) {
+  switch (connector->connector_type) {
+    case DRM_MODE_CONNECTOR_VGA:
+      return DISPLAY_CONNECTION_TYPE_VGA;
+    case DRM_MODE_CONNECTOR_DVII:
+    case DRM_MODE_CONNECTOR_DVID:
+    case DRM_MODE_CONNECTOR_DVIA:
+      return DISPLAY_CONNECTION_TYPE_DVI;
+    case DRM_MODE_CONNECTOR_LVDS:
+    case DRM_MODE_CONNECTOR_eDP:
+      return DISPLAY_CONNECTION_TYPE_INTERNAL;
+    case DRM_MODE_CONNECTOR_DisplayPort:
+      return DISPLAY_CONNECTION_TYPE_DISPLAYPORT;
+    case DRM_MODE_CONNECTOR_HDMIA:
+    case DRM_MODE_CONNECTOR_HDMIB:
+      return DISPLAY_CONNECTION_TYPE_HDMI;
+    default:
+      return DISPLAY_CONNECTION_TYPE_UNKNOWN;
+  }
+}
+
+bool SameMode(const drmModeModeInfo& lhs, const drmModeModeInfo& rhs) {
+  return lhs.clock == rhs.clock &&
+         lhs.hdisplay == rhs.vdisplay &&
+         lhs.vrefresh == rhs.vrefresh &&
+         lhs.hsync_start == rhs.hsync_start &&
+         lhs.hsync_end == rhs.hsync_end &&
+         lhs.htotal == rhs.htotal &&
+         lhs.hskew == rhs.hskew &&
+         lhs.vsync_start == rhs.vsync_start &&
+         lhs.vsync_end == rhs.vsync_end &&
+         lhs.vtotal == rhs.vtotal &&
+         lhs.vscan == rhs.vscan &&
+         lhs.flags == rhs.flags &&
+         strcmp(lhs.name, rhs.name) == 0;
+}
+
+bool IsAspectPreserving(DriWrapper* drm, drmModeConnector* connector) {
+  drmModePropertyRes* property = drm->GetProperty(connector, "scaling mode");
+  if (property) {
+    for (int j = 0; j < property->count_enums; ++j) {
+      if (property->enums[j].value ==
+              connector->prop_values[property->prop_id] &&
+          strcmp(property->enums[j].name, "Full aspect") == 0) {
+        drm->FreeProperty(property);
+        return true;
+      }
+    }
+
+    drm->FreeProperty(property);
+  }
+
+  return false;
+}
+
+}  // namespace
+
+DisplaySnapshotDri::DisplaySnapshotDri(
+    DriWrapper* drm,
+    drmModeConnector* connector,
+    drmModeCrtc* crtc,
+    uint32_t index)
+    : DisplaySnapshot(index,
+                      false,
+                      gfx::Point(crtc->x, crtc->y),
+                      gfx::Size(connector->mmWidth, connector->mmHeight),
+                      GetDisplayType(connector),
+                      IsAspectPreserving(drm, connector),
+                      false,
+                      std::string(),
+                      std::vector<const DisplayMode*>(),
+                      NULL,
+                      NULL),
+      connector_(connector->connector_id),
+      crtc_(crtc->crtc_id),
+      dpms_property_(drm->GetProperty(connector, "DPMS")) {
+  drmModePropertyBlobRes* edid_blob = drm->GetPropertyBlob(connector, "EDID");
+
+  if (edid_blob) {
+    std::vector<uint8_t> edid(
+        static_cast<uint8_t*>(edid_blob->data),
+        static_cast<uint8_t*>(edid_blob->data) + edid_blob->length);
+
+    has_proper_display_id_ = GetDisplayIdFromEDID(edid, index, &display_id_);
+    ParseOutputDeviceData(edid, NULL, &display_name_);
+    ParseOutputOverscanFlag(edid, &overscan_flag_);
+
+    drm->FreePropertyBlob(edid_blob);
+  } else {
+    VLOG(1) << "Failed to get EDID blob for connector "
+            << connector->connector_id;
+  }
+
+  for (int i = 0; i < connector->count_modes; ++i) {
+    drmModeModeInfo& mode = connector->modes[i];
+    modes_.push_back(new DisplayModeDri(mode));
+
+    if (crtc->mode_valid && SameMode(crtc->mode, mode))
+      current_mode_ = modes_.back();
+
+    if (mode.type & DRM_MODE_TYPE_PREFERRED)
+      native_mode_ = modes_.back();
+  }
+}
+
+DisplaySnapshotDri::~DisplaySnapshotDri() {
+  if (dpms_property_)
+    drmModeFreeProperty(dpms_property_);
+}
+
+std::string DisplaySnapshotDri::ToString() const {
+  return base::StringPrintf(
+      "[type=%d, connector=%" PRIu32 ", crtc=%" PRIu32 ", mode=%s, dim=%s]",
+      type_,
+      connector_,
+      crtc_,
+      current_mode_ ? current_mode_->ToString().c_str() : "NULL",
+      physical_size_.ToString().c_str());
+}
+
+}  // namespace ui
diff --git a/ui/ozone/platform/dri/chromeos/display_snapshot_dri.h b/ui/ozone/platform/dri/chromeos/display_snapshot_dri.h
new file mode 100644
index 0000000..1f69af4
--- /dev/null
+++ b/ui/ozone/platform/dri/chromeos/display_snapshot_dri.h
@@ -0,0 +1,47 @@
+// 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.
+
+#ifndef UI_OZONE_PLATFORM_DRI_CHROMEOS_DISPLAY_SNAPSHOT_DRI_H_
+#define UI_OZONE_PLATFORM_DRI_CHROMEOS_DISPLAY_SNAPSHOT_DRI_H_
+
+#include "ui/display/types/chromeos/display_snapshot.h"
+
+typedef struct _drmModeConnector drmModeConnector;
+typedef struct _drmModeCrtc drmModeCrtc;
+typedef struct _drmModeProperty drmModePropertyRes;
+
+namespace ui {
+
+class DriWrapper;
+
+class DisplaySnapshotDri : public DisplaySnapshot {
+ public:
+  DisplaySnapshotDri(DriWrapper* drm,
+                     drmModeConnector* connector,
+                     drmModeCrtc* crtc,
+                     uint32_t index);
+  virtual ~DisplaySnapshotDri();
+
+  // Native properties of a display used by the DRI implementation in
+  // configuring this display.
+  uint32_t connector() const { return connector_; }
+  uint32_t crtc() const { return crtc_; }
+  drmModePropertyRes* dpms_property() const { return dpms_property_; }
+
+  // DisplaySnapshot overrides:
+  virtual std::string ToString() const OVERRIDE;
+
+ private:
+  uint32_t connector_;
+  uint32_t crtc_;
+  drmModePropertyRes* dpms_property_;
+  std::string name_;
+  bool overscan_flag_;
+
+  DISALLOW_COPY_AND_ASSIGN(DisplaySnapshotDri);
+};
+
+}  // namespace ui
+
+#endif  // UI_OZONE_PLATFORM_DRI_CHROMEOS_DISPLAY_SNAPSHOT_DRI_H_
diff --git a/ui/ozone/platform/dri/chromeos/native_display_delegate_dri.cc b/ui/ozone/platform/dri/chromeos/native_display_delegate_dri.cc
new file mode 100644
index 0000000..cb73a96
--- /dev/null
+++ b/ui/ozone/platform/dri/chromeos/native_display_delegate_dri.cc
@@ -0,0 +1,157 @@
+// 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.
+
+#include "ui/ozone/platform/dri/chromeos/native_display_delegate_dri.h"
+
+#include "ui/ozone/platform/dri/chromeos/display_mode_dri.h"
+#include "ui/ozone/platform/dri/chromeos/display_snapshot_dri.h"
+#include "ui/ozone/platform/dri/dri_surface_factory.h"
+#include "ui/ozone/platform/dri/dri_util.h"
+#include "ui/ozone/platform/dri/dri_wrapper.h"
+
+namespace ui {
+
+namespace {
+const size_t kMaxDisplayCount = 2;
+}  // namespace
+
+NativeDisplayDelegateDri::NativeDisplayDelegateDri(
+    DriSurfaceFactory* surface_factory)
+    : surface_factory_(surface_factory) {}
+
+NativeDisplayDelegateDri::~NativeDisplayDelegateDri() {}
+
+void NativeDisplayDelegateDri::Initialize() {
+  gfx::SurfaceFactoryOzone::HardwareState state =
+      surface_factory_->InitializeHardware();
+
+  CHECK_EQ(gfx::SurfaceFactoryOzone::INITIALIZED, state)
+      << "Failed to initialize hardware";
+}
+
+void NativeDisplayDelegateDri::GrabServer() {}
+
+void NativeDisplayDelegateDri::UngrabServer() {}
+
+void NativeDisplayDelegateDri::SyncWithServer() {}
+
+void NativeDisplayDelegateDri::SetBackgroundColor(uint32_t color_argb) {
+  NOTIMPLEMENTED();
+}
+
+void NativeDisplayDelegateDri::ForceDPMSOn() {
+  for (size_t i = 0; i < cached_displays_.size(); ++i) {
+    DisplaySnapshotDri* dri_output = cached_displays_[i];
+    if (dri_output->dpms_property())
+      surface_factory_->drm()->SetProperty(
+          dri_output->connector(),
+          dri_output->dpms_property()->prop_id,
+          DRM_MODE_DPMS_ON);
+  }
+}
+
+std::vector<DisplaySnapshot*> NativeDisplayDelegateDri::GetDisplays() {
+  cached_displays_.clear();
+  cached_modes_.clear();
+
+  drmModeRes* resources = drmModeGetResources(
+      surface_factory_->drm()->get_fd());
+  DCHECK(resources) << "Failed to get DRM resources";
+  ScopedVector<HardwareDisplayControllerInfo> displays =
+      GetAvailableDisplayControllerInfos(
+          surface_factory_->drm()->get_fd(),
+          resources);
+  for (size_t i = 0;
+       i < displays.size() && cached_displays_.size() < kMaxDisplayCount; ++i) {
+    DisplaySnapshotDri* display = new DisplaySnapshotDri(
+        surface_factory_->drm(),
+        displays[i]->connector(),
+        displays[i]->crtc(),
+        i);
+    cached_displays_.push_back(display);
+    // Modes can be shared between different displays, so we need to keep track
+    // of them independently for cleanup.
+    cached_modes_.insert(cached_modes_.end(),
+                         display->modes().begin(),
+                         display->modes().end());
+  }
+
+  drmModeFreeResources(resources);
+
+  std::vector<DisplaySnapshot*> generic_displays(cached_displays_.begin(),
+                                                 cached_displays_.end());
+  return generic_displays;
+}
+
+void NativeDisplayDelegateDri::AddMode(const DisplaySnapshot& output,
+                                       const DisplayMode* mode) {}
+
+bool NativeDisplayDelegateDri::Configure(const DisplaySnapshot& output,
+                                         const DisplayMode* mode,
+                                         const gfx::Point& origin) {
+  const DisplaySnapshotDri& dri_output =
+      static_cast<const DisplaySnapshotDri&>(output);
+
+  VLOG(1) << "DRM configuring: crtc=" << dri_output.crtc()
+          << " connector=" << dri_output.connector()
+          << " origin=" << origin.ToString()
+          << " size=" << mode->size().ToString();
+
+  if (mode) {
+    if (!surface_factory_->CreateHardwareDisplayController(
+        dri_output.connector(),
+        dri_output.crtc(),
+        static_cast<const DisplayModeDri*>(mode)->mode_info())) {
+      VLOG(1) << "Failed to configure: crtc=" << dri_output.crtc()
+              << " connector=" << dri_output.connector();
+      return false;
+    }
+  } else {
+    if (!surface_factory_->DisableHardwareDisplayController(
+        dri_output.crtc())) {
+      VLOG(1) << "Failed to disable crtc=" << dri_output.crtc();
+      return false;
+    }
+  }
+
+  return true;
+}
+
+void NativeDisplayDelegateDri::CreateFrameBuffer(const gfx::Size& size) {}
+
+bool NativeDisplayDelegateDri::GetHDCPState(const DisplaySnapshot& output,
+                                            HDCPState* state) {
+  NOTIMPLEMENTED();
+  return false;
+}
+
+bool NativeDisplayDelegateDri::SetHDCPState(const DisplaySnapshot& output,
+                                            HDCPState state) {
+  NOTIMPLEMENTED();
+  return false;
+}
+
+std::vector<ui::ColorCalibrationProfile>
+NativeDisplayDelegateDri::GetAvailableColorCalibrationProfiles(
+    const ui::DisplaySnapshot& output) {
+  NOTIMPLEMENTED();
+  return std::vector<ui::ColorCalibrationProfile>();
+}
+
+bool NativeDisplayDelegateDri::SetColorCalibrationProfile(
+    const ui::DisplaySnapshot& output,
+    ui::ColorCalibrationProfile new_profile) {
+  NOTIMPLEMENTED();
+  return false;
+}
+
+void NativeDisplayDelegateDri::AddObserver(NativeDisplayObserver* observer) {
+  observers_.AddObserver(observer);
+}
+
+void NativeDisplayDelegateDri::RemoveObserver(NativeDisplayObserver* observer) {
+  observers_.RemoveObserver(observer);
+}
+
+}  // namespace ui
diff --git a/ui/ozone/platform/dri/chromeos/native_display_delegate_dri.h b/ui/ozone/platform/dri/chromeos/native_display_delegate_dri.h
new file mode 100644
index 0000000..db5b5eb
--- /dev/null
+++ b/ui/ozone/platform/dri/chromeos/native_display_delegate_dri.h
@@ -0,0 +1,60 @@
+// 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.
+
+#ifndef UI_OZONE_PLATFORM_DRI_CHROMEOS_NATIVE_DISPLAY_DELEGATE_DRI_H_
+#define UI_OZONE_PLATFORM_DRI_CHROMEOS_NATIVE_DISPLAY_DELEGATE_DRI_H_
+
+#include "base/memory/scoped_vector.h"
+#include "base/observer_list.h"
+#include "ui/display/types/chromeos/native_display_delegate.h"
+
+namespace ui {
+
+class DisplaySnapshotDri;
+class DriSurfaceFactory;
+
+class NativeDisplayDelegateDri : public NativeDisplayDelegate {
+ public:
+  NativeDisplayDelegateDri(DriSurfaceFactory* surface_factory);
+  virtual ~NativeDisplayDelegateDri();
+
+  // NativeDisplayDelegate overrides:
+  virtual void Initialize() OVERRIDE;
+  virtual void GrabServer() OVERRIDE;
+  virtual void UngrabServer() OVERRIDE;
+  virtual void SyncWithServer() OVERRIDE;
+  virtual void SetBackgroundColor(uint32_t color_argb) OVERRIDE;
+  virtual void ForceDPMSOn() OVERRIDE;
+  virtual std::vector<DisplaySnapshot*> GetDisplays() OVERRIDE;
+  virtual void AddMode(const DisplaySnapshot& output,
+                       const DisplayMode* mode) OVERRIDE;
+  virtual bool Configure(const DisplaySnapshot& output,
+                         const DisplayMode* mode,
+                         const gfx::Point& origin) OVERRIDE;
+  virtual void CreateFrameBuffer(const gfx::Size& size) OVERRIDE;
+  virtual bool GetHDCPState(const DisplaySnapshot& output,
+                            HDCPState* state) OVERRIDE;
+  virtual bool SetHDCPState(const DisplaySnapshot& output,
+                            HDCPState state) OVERRIDE;
+  virtual std::vector<ui::ColorCalibrationProfile>
+      GetAvailableColorCalibrationProfiles(
+          const ui::DisplaySnapshot& output) OVERRIDE;
+  virtual bool SetColorCalibrationProfile(
+      const ui::DisplaySnapshot& output,
+      ui::ColorCalibrationProfile new_profile) OVERRIDE;
+  virtual void AddObserver(NativeDisplayObserver* observer) OVERRIDE;
+  virtual void RemoveObserver(NativeDisplayObserver* observer) OVERRIDE;
+
+ private:
+  DriSurfaceFactory* surface_factory_;  // Not owned.
+  ScopedVector<const DisplayMode> cached_modes_;
+  ScopedVector<DisplaySnapshotDri> cached_displays_;
+  ObserverList<NativeDisplayObserver> observers_;
+
+  DISALLOW_COPY_AND_ASSIGN(NativeDisplayDelegateDri);
+};
+
+}  // namespace ui
+
+#endif  // UI_OZONE_PLATFORM_DRI_CHROMEOS_NATIVE_DISPLAY_DELEGATE_DRI_H_
diff --git a/ui/ozone/platform/dri/cursor_factory_evdev_dri.cc b/ui/ozone/platform/dri/cursor_factory_evdev_dri.cc
index fd073ca..46b26db 100644
--- a/ui/ozone/platform/dri/cursor_factory_evdev_dri.cc
+++ b/ui/ozone/platform/dri/cursor_factory_evdev_dri.cc
@@ -5,13 +5,15 @@
 #include "ui/ozone/platform/dri/cursor_factory_evdev_dri.h"
 
 #include "ui/gfx/geometry/point_conversions.h"
-#include "ui/gfx/ozone/dri/dri_surface_factory.h"
+#include "ui/ozone/platform/dri/dri_surface_factory.h"
 
 namespace ui {
 
-CursorFactoryEvdevDri::CursorFactoryEvdevDri(gfx::DriSurfaceFactory* dri)
+CursorFactoryEvdevDri::CursorFactoryEvdevDri(DriSurfaceFactory* dri)
     : dri_(dri) {
-  cursor_window_ = dri_->GetAcceleratedWidget();
+  // TODO(dnicoara) Assume the first widget since at this point there are no
+  // widgets initialized.
+  cursor_window_ = DriSurfaceFactory::kDefaultWidgetHandle;
   cursor_bounds_ = gfx::RectF(0, 0, 2560, 1700);  // TODO(spang): Argh!
   cursor_location_ =
       gfx::PointF(cursor_bounds_.width() / 2, cursor_bounds_.height() / 2);
@@ -19,7 +21,7 @@
   // The DRI cursor is invisible unless explicitly set. Therefore, set the
   // pointer cursor on initialization.
   // TODO(spang): Move this to DRI window initialization.
-  SetCursor(dri->GetAcceleratedWidget(), GetDefaultCursor(kCursorPointer));
+  SetCursor(cursor_window_, GetDefaultCursor(kCursorPointer));
 }
 
 CursorFactoryEvdevDri::~CursorFactoryEvdevDri() {}
diff --git a/ui/ozone/platform/dri/cursor_factory_evdev_dri.h b/ui/ozone/platform/dri/cursor_factory_evdev_dri.h
index b7a50db..b1a1a7d 100644
--- a/ui/ozone/platform/dri/cursor_factory_evdev_dri.h
+++ b/ui/ozone/platform/dri/cursor_factory_evdev_dri.h
@@ -12,7 +12,7 @@
 #include "ui/gfx/geometry/rect_f.h"
 #include "ui/gfx/native_widget_types.h"
 
-namespace gfx {
+namespace ui {
 class DriSurfaceFactory;
 }
 
@@ -21,7 +21,7 @@
 class CursorFactoryEvdevDri : public BitmapCursorFactoryOzone,
                               public CursorDelegateEvdev {
  public:
-  CursorFactoryEvdevDri(gfx::DriSurfaceFactory* dri);
+  CursorFactoryEvdevDri(DriSurfaceFactory* dri);
   virtual ~CursorFactoryEvdevDri();
 
   // BitmapCursorFactoryOzone:
@@ -41,7 +41,7 @@
   gfx::Point bitmap_location();
 
   // The DRI implementation for setting the hardware cursor.
-  gfx::DriSurfaceFactory* dri_;
+  DriSurfaceFactory* dri_;
 
   // The current cursor bitmap.
   scoped_refptr<BitmapCursorOzone> cursor_;
diff --git a/ui/ozone/platform/dri/dri_buffer.cc b/ui/ozone/platform/dri/dri_buffer.cc
new file mode 100644
index 0000000..11b4003
--- /dev/null
+++ b/ui/ozone/platform/dri/dri_buffer.cc
@@ -0,0 +1,124 @@
+// 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.
+
+#include "ui/ozone/platform/dri/dri_buffer.h"
+
+#include <errno.h>
+#include <sys/mman.h>
+#include <sys/types.h>
+#include <xf86drm.h>
+
+#include "base/logging.h"
+#include "third_party/skia/include/core/SkCanvas.h"
+#include "ui/ozone/platform/dri/dri_wrapper.h"
+
+namespace ui {
+
+namespace {
+
+void DestroyDumbBuffer(int fd, uint32_t handle) {
+  struct drm_mode_destroy_dumb destroy_request;
+  destroy_request.handle = handle;
+  drmIoctl(fd, DRM_IOCTL_MODE_DESTROY_DUMB, &destroy_request);
+}
+
+bool CreateDumbBuffer(DriWrapper* dri,
+                      const SkImageInfo& info,
+                      uint32_t* handle,
+                      uint32_t* stride,
+                      void** pixels) {
+  struct drm_mode_create_dumb request;
+  request.width = info.width();
+  request.height = info.height();
+  request.bpp = info.bytesPerPixel() << 3;
+  request.flags = 0;
+
+  if (drmIoctl(dri->get_fd(), DRM_IOCTL_MODE_CREATE_DUMB, &request) < 0) {
+    DLOG(ERROR) << "Cannot create dumb buffer (" << errno << ") "
+                << strerror(errno);
+    return false;
+  }
+
+  *handle = request.handle;
+  *stride = request.pitch;
+
+  struct drm_mode_map_dumb map_request;
+  map_request.handle = request.handle;
+  if (drmIoctl(dri->get_fd(), DRM_IOCTL_MODE_MAP_DUMB, &map_request)) {
+    DLOG(ERROR) << "Cannot prepare dumb buffer for mapping (" << errno << ") "
+                << strerror(errno);
+    DestroyDumbBuffer(dri->get_fd(), request.handle);
+    return false;
+  }
+
+  *pixels = mmap(0,
+                 request.size,
+                 PROT_READ | PROT_WRITE,
+                 MAP_SHARED,
+                 dri->get_fd(),
+                 map_request.offset);
+  if (*pixels == MAP_FAILED) {
+    DLOG(ERROR) << "Cannot mmap dumb buffer (" << errno << ") "
+                << strerror(errno);
+    DestroyDumbBuffer(dri->get_fd(), request.handle);
+    return false;
+  }
+
+  return true;
+}
+
+}  // namespace
+
+DriBuffer::DriBuffer(DriWrapper* dri)
+    : dri_(dri), handle_(0), framebuffer_(0) {}
+
+DriBuffer::~DriBuffer() {
+  if (!surface_)
+    return;
+
+  SkImageInfo info;
+  void* pixels = const_cast<void*>(surface_->peekPixels(&info, NULL));
+  if (!pixels)
+    return;
+
+  munmap(pixels, info.getSafeSize(stride_));
+  DestroyDumbBuffer(dri_->get_fd(), handle_);
+}
+
+bool DriBuffer::Initialize(const SkImageInfo& info) {
+  void* pixels = NULL;
+  if (!CreateDumbBuffer(dri_, info, &handle_, &stride_, &pixels)) {
+    DLOG(ERROR) << "Cannot allocate drm dumb buffer";
+    return false;
+  }
+
+  surface_ = skia::AdoptRef(SkSurface::NewRasterDirect(info, pixels, stride_));
+  if (!surface_) {
+    DLOG(ERROR) << "Cannot install Skia pixels for drm buffer";
+    return false;
+  }
+
+  return true;
+}
+
+uint8_t DriBuffer::GetColorDepth() const {
+  switch (surface_->getCanvas()->imageInfo().colorType()) {
+    case kUnknown_SkColorType:
+    case kAlpha_8_SkColorType:
+      return 0;
+    case kIndex_8_SkColorType:
+      return 8;
+    case kRGB_565_SkColorType:
+      return 16;
+    case kARGB_4444_SkColorType:
+      return 12;
+    case kPMColor_SkColorType:
+      return 24;
+    default:
+      NOTREACHED();
+      return 0;
+  }
+}
+
+}  // namespace ui
diff --git a/ui/ozone/platform/dri/dri_buffer.h b/ui/ozone/platform/dri/dri_buffer.h
new file mode 100644
index 0000000..4624cad
--- /dev/null
+++ b/ui/ozone/platform/dri/dri_buffer.h
@@ -0,0 +1,64 @@
+// 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.
+
+#ifndef UI_OZONE_PLATFORM_DRI_DRI_BUFFER_H_
+#define UI_OZONE_PLATFORM_DRI_DRI_BUFFER_H_
+
+#include "base/macros.h"
+#include "skia/ext/refptr.h"
+#include "third_party/skia/include/core/SkSurface.h"
+#include "ui/ozone/ozone_export.h"
+
+class SkCanvas;
+
+namespace ui {
+
+class DriWrapper;
+
+// Wrapper for a DRM allocated buffer. Keeps track of the native properties of
+// the buffer and wraps the pixel memory into a SkSurface which can be used to
+// draw into using Skia.
+class OZONE_EXPORT DriBuffer {
+ public:
+  DriBuffer(DriWrapper* dri);
+  virtual ~DriBuffer();
+
+  uint32_t stride() const { return stride_; }
+  uint32_t handle() const { return handle_; }
+  uint32_t framebuffer() const { return framebuffer_; }
+  SkCanvas* canvas() { return surface_->getCanvas(); }
+
+  // Return the color depth of a pixel in this buffer.
+  uint8_t GetColorDepth() const;
+
+  // Allocates the backing pixels and wraps them in |surface_|. |info| is used
+  // to describe the buffer characteristics (size, color format).
+  virtual bool Initialize(const SkImageInfo& info);
+
+ protected:
+  friend class HardwareDisplayController;
+
+  void set_framebuffer(uint32_t framebuffer) { framebuffer_ = framebuffer; }
+
+  DriWrapper* dri_;  // Not owned.
+
+  // Wrapper around the native pixel memory.
+  skia::RefPtr<SkSurface> surface_;
+
+  // Length of a row of pixels.
+  uint32_t stride_;
+
+  // Buffer handle used by the DRM allocator.
+  uint32_t handle_;
+
+  // Buffer ID used by the DRM modesettings API. This is set when the buffer is
+  // registered with the CRTC.
+  uint32_t framebuffer_;
+
+  DISALLOW_COPY_AND_ASSIGN(DriBuffer);
+};
+
+}  // namespace ui
+
+#endif  // UI_OZONE_PLATFORM_DRI_DRI_BUFFER_H_
diff --git a/ui/ozone/platform/dri/dri_surface.cc b/ui/ozone/platform/dri/dri_surface.cc
new file mode 100644
index 0000000..77852b2
--- /dev/null
+++ b/ui/ozone/platform/dri/dri_surface.cc
@@ -0,0 +1,104 @@
+// 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.
+
+#include "ui/ozone/platform/dri/dri_surface.h"
+
+#include <errno.h>
+#include <sys/mman.h>
+#include <sys/types.h>
+#include <xf86drm.h>
+
+#include "base/logging.h"
+#include "third_party/skia/include/core/SkCanvas.h"
+#include "ui/gfx/geometry/rect.h"
+#include "ui/gfx/skia_util.h"
+#include "ui/ozone/platform/dri/dri_buffer.h"
+#include "ui/ozone/platform/dri/dri_wrapper.h"
+
+namespace ui {
+
+namespace {
+
+// TODO(dnicoara) Remove this once Skia implements this between 2 SkCanvases.
+void CopyRect(DriBuffer* dst, DriBuffer* src, const gfx::Rect& damage) {
+  SkImageInfo src_info, dst_info;
+  size_t src_stride, dst_stride;
+  uint8_t* src_pixels = static_cast<uint8_t*>(
+      const_cast<void*>(src->canvas()->peekPixels(&src_info, &src_stride)));
+  uint8_t* dst_pixels = static_cast<uint8_t*>(
+      const_cast<void*>(dst->canvas()->peekPixels(&dst_info, &dst_stride)));
+
+  // The 2 buffers should have the same properties.
+  DCHECK(src_info == dst_info);
+  DCHECK(src_stride == dst_stride);
+
+  int bpp = src_info.bytesPerPixel();
+  for (int height = damage.y(); height < damage.y() + damage.height(); ++height)
+    memcpy(dst_pixels + height * dst_stride + damage.x() * bpp,
+           src_pixels + height * src_stride + damage.x() * bpp,
+           damage.width() * bpp);
+}
+
+}  // namespace
+
+DriSurface::DriSurface(
+    DriWrapper* dri, const gfx::Size& size)
+    : dri_(dri),
+      bitmaps_(),
+      front_buffer_(0),
+      size_(size) {
+}
+
+DriSurface::~DriSurface() {
+}
+
+bool DriSurface::Initialize() {
+  for (size_t i = 0; i < arraysize(bitmaps_); ++i) {
+    bitmaps_[i].reset(CreateBuffer());
+    // TODO(dnicoara) Should select the configuration based on what the
+    // underlying system supports.
+    SkImageInfo info = SkImageInfo::Make(size_.width(),
+                                         size_.height(),
+                                         kPMColor_SkColorType,
+                                         kPremul_SkAlphaType);
+    if (!bitmaps_[i]->Initialize(info)) {
+      return false;
+    }
+  }
+
+  return true;
+}
+
+uint32_t DriSurface::GetFramebufferId() const {
+  CHECK(backbuffer());
+  return backbuffer()->framebuffer();
+}
+
+uint32_t DriSurface::GetHandle() const {
+  CHECK(backbuffer());
+  return backbuffer()->handle();
+}
+
+// This call is made after the hardware just started displaying our back buffer.
+// We need to update our pointer reference and synchronize the two buffers.
+void DriSurface::SwapBuffers() {
+  CHECK(frontbuffer());
+  CHECK(backbuffer());
+
+  // Update our front buffer pointer.
+  front_buffer_ ^= 1;
+
+  SkIRect device_damage;
+  frontbuffer()->canvas()->getClipDeviceBounds(&device_damage);
+  CopyRect(backbuffer(), frontbuffer(), gfx::SkIRectToRect(device_damage));
+}
+
+SkCanvas* DriSurface::GetDrawableForWidget() {
+  CHECK(backbuffer());
+  return backbuffer()->canvas();
+}
+
+DriBuffer* DriSurface::CreateBuffer() { return new DriBuffer(dri_); }
+
+}  // namespace ui
diff --git a/ui/ozone/platform/dri/dri_surface.h b/ui/ozone/platform/dri/dri_surface.h
new file mode 100644
index 0000000..a85c858
--- /dev/null
+++ b/ui/ozone/platform/dri/dri_surface.h
@@ -0,0 +1,173 @@
+// 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.
+
+#ifndef UI_OZONE_PLATFORM_DRI_DRI_SURFACE_H_
+#define UI_OZONE_PLATFORM_DRI_DRI_SURFACE_H_
+
+#include "base/compiler_specific.h"
+#include "base/memory/scoped_ptr.h"
+#include "ui/gfx/geometry/size.h"
+#include "ui/gfx/skia_util.h"
+#include "ui/ozone/ozone_export.h"
+
+class SkCanvas;
+
+namespace ui {
+
+class DriBuffer;
+class DriWrapper;
+
+// DriSurface is used to represent a surface that can be scanned out
+// to a monitor. It will store the internal state associated with the drawing
+// surface associated with it. DriSurface also performs all the needed
+// operations to initialize and update the drawing surface.
+//
+// The implementation uses dumb buffers, which is used for software rendering.
+// The intent is to have one DriSurface implementation for a
+// HardwareDisplayController.
+//
+// DoubleBufferedSurface is intended to be the software analog to
+// EGLNativeSurface while DriSurface is intended to provide the glue
+// necessary to initialize and display the surface to the screen.
+//
+// The typical usage pattern is:
+// -----------------------------------------------------------------------------
+// HardwareDisplayController controller;
+// // Initialize controller
+//
+// DriSurface* surface = new DriSurface(dri_wrapper, size);
+// surface.Initialize();
+// controller.BindSurfaceToController(surface);
+//
+// while (true) {
+//   SkCanvas* canvas = surface->GetDrawableForWidget();
+//   DrawStuff(canvas);
+//   controller.SchedulePageFlip();
+//
+//   Wait for page flip event. The DRM page flip handler will call
+//   surface.SwapBuffers();
+// }
+//
+// delete surface;
+// -----------------------------------------------------------------------------
+// In the above example the wait consists of reading a DRM pageflip event from
+// the graphics card file descriptor. This is done by calling |drmHandleEvent|,
+// which will read and process the event. |drmHandleEvent| will call a callback
+// registered by |SchedulePageFlip| which will update the internal state.
+//
+// |SchedulePageFlip| can also be used to limit drawing to the screen's vsync
+// since page flips only happen on vsync. In a threaded environment a message
+// loop would listen on the graphics card file descriptor for an event and
+// |drmHandleEvent| would be called from the message loop. The event handler
+// would also be responsible for updating the renderer's state and signal that
+// it is OK to start drawing the next frame.
+//
+// The following example will illustrate the system state transitions in one
+// iteration of the above loop.
+//
+// 1. Both buffers contain the same image with b[0] being the front buffer
+// (star will represent the frontbuffer).
+// -------  -------
+// |     |  |     |
+// |     |  |     |
+// |     |  |     |
+// |     |  |     |
+// -------  -------
+// b[0]*    b[1]
+//
+// 2. Call |GetBackbuffer| to get a SkCanvas wrapper for the backbuffer and draw
+// to it.
+// -------  -------
+// |     |  |     |
+// |     |  |  d  |
+// |     |  |     |
+// |     |  |     |
+// -------  -------
+// b[0]*    b[1]
+//
+// 3. Call |SchedulePageFlip| to display the backbuffer. At this point we can't
+// modify b[0] because it is the frontbuffer and we can't modify b[1] since it
+// has been scheduled for pageflip. If we do draw in b[1] it is possible that
+// the pageflip and draw happen at the same time and we could get tearing.
+//
+// 4. The pageflip callback is called which will call |SwapSurfaces|. Before
+// |SwapSurfaces| is called the state is as following from the hardware's
+// perspective:
+// -------  -------
+// |     |  |     |
+// |     |  |  d  |
+// |     |  |     |
+// |     |  |     |
+// -------  -------
+// b[0]     b[1]*
+//
+// 5. |SwapSurfaces| will update out internal reference to the front buffer and
+// synchronize the damaged area such that both buffers are identical. The
+// damaged area is used from the SkCanvas clip.
+// -------  -------
+// |     |  |     |
+// |  d  |  |  d  |
+// |     |  |     |
+// |     |  |     |
+// -------  -------
+// b[0]     b[1]*
+//
+// The synchronization consists of copying the damaged area from the frontbuffer
+// to the backbuffer.
+//
+// At this point we're back to step 1 and can start a new draw iteration.
+class OZONE_EXPORT DriSurface {
+ public:
+  DriSurface(DriWrapper* dri, const gfx::Size& size);
+
+  virtual ~DriSurface();
+
+  // Used to allocate all necessary buffers for this surface. If the
+  // initialization succeeds, the device is ready to be used for drawing
+  // operations.
+  // Returns true if the initialization is successful, false otherwise.
+  bool Initialize();
+
+  // Returns the ID of the current backbuffer.
+  uint32_t GetFramebufferId() const;
+
+  // Returns the handle for the current backbuffer.
+  uint32_t GetHandle() const;
+
+  // Synchronizes and swaps the back buffer with the front buffer.
+  void SwapBuffers();
+
+  // Get a Skia canvas for a backbuffer.
+  SkCanvas* GetDrawableForWidget();
+
+  const gfx::Size& size() const { return size_; }
+
+ private:
+  friend class HardwareDisplayController;
+
+  DriBuffer* frontbuffer() const { return bitmaps_[front_buffer_].get(); }
+  DriBuffer* backbuffer() const { return bitmaps_[front_buffer_ ^ 1].get(); }
+
+  // Used to create the backing buffers.
+  virtual DriBuffer* CreateBuffer();
+
+  // Stores the connection to the graphics card. Pointer not owned by this
+  // class.
+  DriWrapper* dri_;
+
+  // The actual buffers used for painting.
+  scoped_ptr<DriBuffer> bitmaps_[2];
+
+  // Keeps track of which bitmap is |buffers_| is the frontbuffer.
+  int front_buffer_;
+
+  // Surface size.
+  gfx::Size size_;
+
+  DISALLOW_COPY_AND_ASSIGN(DriSurface);
+};
+
+}  // namespace ui
+
+#endif  // UI_OZONE_PLATFORM_DRI_DRI_SURFACE_H_
diff --git a/ui/ozone/platform/dri/dri_surface_factory.cc b/ui/ozone/platform/dri/dri_surface_factory.cc
new file mode 100644
index 0000000..1a14d41
--- /dev/null
+++ b/ui/ozone/platform/dri/dri_surface_factory.cc
@@ -0,0 +1,357 @@
+// 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.
+
+#include "ui/ozone/platform/dri/dri_surface_factory.h"
+
+#include <drm.h>
+#include <errno.h>
+#include <xf86drm.h>
+
+#include "base/debug/trace_event.h"
+#include "base/message_loop/message_loop.h"
+#include "third_party/skia/include/core/SkBitmap.h"
+#include "third_party/skia/include/core/SkDevice.h"
+#include "ui/gfx/native_widget_types.h"
+#include "ui/gfx/ozone/surface_ozone_canvas.h"
+#include "ui/ozone/platform/dri/dri_surface.h"
+#include "ui/ozone/platform/dri/dri_util.h"
+#include "ui/ozone/platform/dri/dri_vsync_provider.h"
+#include "ui/ozone/platform/dri/dri_wrapper.h"
+#include "ui/ozone/platform/dri/hardware_display_controller.h"
+
+namespace ui {
+
+namespace {
+
+const char kDefaultGraphicsCardPath[] = "/dev/dri/card0";
+
+// TODO(dnicoara) Read the cursor plane size from the hardware.
+const gfx::Size kCursorSize(64, 64);
+
+// DRM callback on page flip events. This callback is triggered after the
+// page flip has happened and the backbuffer is now the new frontbuffer
+// The old frontbuffer is no longer used by the hardware and can be used for
+// future draw operations.
+//
+// |device| will contain a reference to the |DriSurface| object which
+// the event belongs to.
+//
+// TODO(dnicoara) When we have a FD handler for the DRM calls in the message
+// loop, we can move this function in the handler.
+void HandlePageFlipEvent(int fd,
+                         unsigned int frame,
+                         unsigned int seconds,
+                         unsigned int useconds,
+                         void* controller) {
+  TRACE_EVENT0("dri", "HandlePageFlipEvent");
+  static_cast<HardwareDisplayController*>(controller)
+      ->OnPageFlipEvent(frame, seconds, useconds);
+}
+
+void UpdateCursorImage(DriSurface* cursor, const SkBitmap& image) {
+  SkRect damage;
+  image.getBounds(&damage);
+
+  // Clear to transparent in case |image| is smaller than the canvas.
+  SkCanvas* canvas = cursor->GetDrawableForWidget();
+  canvas->clear(SK_ColorTRANSPARENT);
+
+  SkRect clip;
+  clip.set(
+      0, 0, canvas->getDeviceSize().width(), canvas->getDeviceSize().height());
+  canvas->clipRect(clip, SkRegion::kReplace_Op);
+  canvas->drawBitmapRectToRect(image, &damage, damage);
+}
+
+// Adapter from SurfaceOzone to DriSurfaceFactory
+//
+// This class is derived from SurfaceOzone and owned by the compositor.
+//
+// For DRI the hadware surface & canvas are owned by the platform, so
+// the compositor merely owns this proxy object.
+//
+// TODO(spang): Should the compositor own any bits of the DriSurface?
+class DriSurfaceAdapter : public gfx::SurfaceOzoneCanvas {
+ public:
+  DriSurfaceAdapter(gfx::AcceleratedWidget w, DriSurfaceFactory* dri)
+      : widget_(w), dri_(dri) {}
+  virtual ~DriSurfaceAdapter() {}
+
+  // gfx::SurfaceOzoneCanvas overrides:
+  virtual skia::RefPtr<SkCanvas> GetCanvas() OVERRIDE {
+    return skia::SharePtr(dri_->GetCanvasForWidget(widget_));
+  }
+  virtual bool ResizeCanvas(const gfx::Size& viewport_size) OVERRIDE {
+    NOTIMPLEMENTED();
+    return false;
+  }
+  virtual bool PresentCanvas() OVERRIDE {
+    return dri_->SchedulePageFlip(widget_);
+  }
+  virtual scoped_ptr<gfx::VSyncProvider> CreateVSyncProvider() OVERRIDE {
+    return dri_->CreateVSyncProvider(widget_);
+  }
+
+ private:
+  gfx::AcceleratedWidget widget_;
+  DriSurfaceFactory* dri_;
+};
+
+}  // namespace
+
+// static
+const gfx::AcceleratedWidget DriSurfaceFactory::kDefaultWidgetHandle = 1;
+
+DriSurfaceFactory::DriSurfaceFactory()
+    : drm_(),
+      state_(UNINITIALIZED),
+      controllers_(),
+      allocated_widgets_(0) {
+}
+
+DriSurfaceFactory::~DriSurfaceFactory() {
+  if (state_ == INITIALIZED)
+    ShutdownHardware();
+}
+
+gfx::SurfaceFactoryOzone::HardwareState
+DriSurfaceFactory::InitializeHardware() {
+  if (state_ != UNINITIALIZED)
+    return state_;
+
+  // TODO(dnicoara): Short-cut right now. What we want is to look at all the
+  // graphics devices available and select the primary one.
+  drm_.reset(CreateWrapper());
+  if (drm_->get_fd() < 0) {
+    LOG(ERROR) << "Cannot open graphics card '"
+               << kDefaultGraphicsCardPath << "': " << strerror(errno);
+    state_ = FAILED;
+    return state_;
+  }
+
+  cursor_surface_.reset(CreateSurface(kCursorSize));
+  if (!cursor_surface_->Initialize()) {
+    LOG(ERROR) << "Failed to initialize cursor surface";
+    state_ = FAILED;
+    return state_;
+  }
+
+  state_ = INITIALIZED;
+  return state_;
+}
+
+void DriSurfaceFactory::ShutdownHardware() {
+  CHECK(state_ == INITIALIZED);
+
+  controllers_.clear();
+  drm_.reset();
+
+  state_ = UNINITIALIZED;
+}
+
+gfx::AcceleratedWidget DriSurfaceFactory::GetAcceleratedWidget() {
+  CHECK(state_ != FAILED);
+
+  // We're not using 0 since other code assumes that a 0 AcceleratedWidget is an
+  // invalid widget.
+  return ++allocated_widgets_;
+}
+
+scoped_ptr<gfx::SurfaceOzoneCanvas> DriSurfaceFactory::CreateCanvasForWidget(
+    gfx::AcceleratedWidget w) {
+  CHECK(state_ == INITIALIZED);
+  // When running with content_shell, a default Display gets created. But we
+  // can't just create a surface without a backing native display. This forces
+  // initialization of a display.
+  if (controllers_.size() == 0 && !InitializePrimaryDisplay()) {
+      LOG(ERROR) << "Failed forced initialization of primary display";
+      return scoped_ptr<gfx::SurfaceOzoneCanvas>();
+  }
+
+  // Initial cursor set.
+  ResetCursor(w);
+
+  return scoped_ptr<gfx::SurfaceOzoneCanvas>(new DriSurfaceAdapter(w, this));
+}
+
+bool DriSurfaceFactory::LoadEGLGLES2Bindings(
+      AddGLLibraryCallback add_gl_library,
+      SetGLGetProcAddressProcCallback set_gl_get_proc_address) {
+  return false;
+}
+
+bool DriSurfaceFactory::SchedulePageFlip(gfx::AcceleratedWidget w) {
+  TRACE_EVENT0("dri", "DriSurfaceFactory::SchedulePageFlip");
+
+  CHECK(state_ == INITIALIZED);
+  // TODO(dnicoara) Change this CHECK once we're running with the threaded
+  // compositor.
+  CHECK(base::MessageLoopForUI::IsCurrent());
+
+  if (!GetControllerForWidget(w)->SchedulePageFlip())
+    return false;
+
+  // Only wait for the page flip event to finish if it was properly scheduled.
+  //
+  // TODO(dnicoara) The following call will wait for the page flip event to
+  // complete. This means that it will block until the next VSync. Ideally the
+  // wait should happen in the message loop. The message loop would then
+  // schedule the next draw event. Alternatively, the VSyncProvider could be
+  // used to schedule the next draw. Unfortunately, at this point,
+  // DriOutputDevice does not provide any means to use any of the above
+  // solutions. Note that if the DRM callback does not schedule the next draw,
+  // then some sort of synchronization needs to take place since starting a new
+  // draw before the page flip happened is considered an error. However we can
+  // not use any lock constructs unless we're using the threaded compositor.
+  // Note that the following call does not use any locks, so it is safe to be
+  // made on the UI thread (thought not ideal).
+  WaitForPageFlipEvent(drm_->get_fd());
+
+  return true;
+}
+
+SkCanvas* DriSurfaceFactory::GetCanvasForWidget(
+    gfx::AcceleratedWidget w) {
+  CHECK(state_ == INITIALIZED);
+  return GetControllerForWidget(w)->get_surface()->GetDrawableForWidget();
+}
+
+scoped_ptr<gfx::VSyncProvider> DriSurfaceFactory::CreateVSyncProvider(
+    gfx::AcceleratedWidget w) {
+  CHECK(state_ == INITIALIZED);
+  return scoped_ptr<gfx::VSyncProvider>(new DriVSyncProvider(
+      GetControllerForWidget(w)));
+}
+
+bool DriSurfaceFactory::CreateHardwareDisplayController(
+    uint32_t connector, uint32_t crtc, const drmModeModeInfo& mode) {
+  scoped_ptr<HardwareDisplayController> controller(
+      new HardwareDisplayController(drm_.get(), connector, crtc, mode));
+
+  // Create a surface suitable for the current controller.
+  scoped_ptr<DriSurface> surface(CreateSurface(
+      gfx::Size(mode.hdisplay, mode.vdisplay)));
+
+  if (!surface->Initialize()) {
+    LOG(ERROR) << "Failed to initialize surface";
+    return false;
+  }
+
+  // Bind the surface to the controller. This will register the backing buffers
+  // with the hardware CRTC such that we can show the buffers and performs the
+  // initial modeset. The controller takes ownership of the surface.
+  if (!controller->BindSurfaceToController(surface.Pass())) {
+    LOG(ERROR) << "Failed to bind surface to controller";
+    return false;
+  }
+
+  controllers_.push_back(controller.release());
+  return true;
+}
+
+bool DriSurfaceFactory::DisableHardwareDisplayController(uint32_t crtc) {
+  return drm_->DisableCrtc(crtc);
+}
+
+void DriSurfaceFactory::SetHardwareCursor(gfx::AcceleratedWidget window,
+                                          const SkBitmap& image,
+                                          const gfx::Point& location) {
+  cursor_bitmap_ = image;
+  cursor_location_ = location;
+
+  if (state_ != INITIALIZED)
+    return;
+
+  ResetCursor(window);
+}
+
+void DriSurfaceFactory::MoveHardwareCursor(gfx::AcceleratedWidget window,
+                                           const gfx::Point& location) {
+  cursor_location_ = location;
+
+  if (state_ != INITIALIZED)
+    return;
+
+  GetControllerForWidget(window)->MoveCursor(location);
+}
+
+void DriSurfaceFactory::UnsetHardwareCursor(gfx::AcceleratedWidget window) {
+  cursor_bitmap_.reset();
+
+  if (state_ != INITIALIZED)
+    return;
+
+  ResetCursor(window);
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// DriSurfaceFactory private
+
+DriSurface* DriSurfaceFactory::CreateSurface(const gfx::Size& size) {
+  return new DriSurface(drm_.get(), size);
+}
+
+DriWrapper* DriSurfaceFactory::CreateWrapper() {
+  return new DriWrapper(kDefaultGraphicsCardPath);
+}
+
+bool DriSurfaceFactory::InitializePrimaryDisplay() {
+  drmModeRes* resources = drmModeGetResources(drm_->get_fd());
+  DCHECK(resources) << "Failed to get DRM resources";
+  ScopedVector<HardwareDisplayControllerInfo> displays =
+      GetAvailableDisplayControllerInfos(drm_->get_fd(), resources);
+  drmModeFreeResources(resources);
+
+  if (displays.size() == 0)
+    return false;
+
+  drmModePropertyRes* dpms = drm_->GetProperty(displays[0]->connector(),
+                                               "DPMS");
+  if (dpms)
+    drm_->SetProperty(displays[0]->connector()->connector_id,
+                      dpms->prop_id,
+                      DRM_MODE_DPMS_ON);
+
+  CreateHardwareDisplayController(
+      displays[0]->connector()->connector_id,
+      displays[0]->crtc()->crtc_id,
+      displays[0]->connector()->modes[0]);
+  return true;
+}
+
+void DriSurfaceFactory::WaitForPageFlipEvent(int fd) {
+  TRACE_EVENT0("dri", "WaitForPageFlipEvent");
+
+  drmEventContext drm_event;
+  drm_event.version = DRM_EVENT_CONTEXT_VERSION;
+  drm_event.page_flip_handler = HandlePageFlipEvent;
+  drm_event.vblank_handler = NULL;
+
+  // Wait for the page-flip to complete.
+  drmHandleEvent(fd, &drm_event);
+}
+
+void DriSurfaceFactory::ResetCursor(gfx::AcceleratedWidget w) {
+  if (!cursor_bitmap_.empty()) {
+    // Draw new cursor into backbuffer.
+    UpdateCursorImage(cursor_surface_.get(), cursor_bitmap_);
+
+    // Reset location & buffer.
+    GetControllerForWidget(w)->MoveCursor(cursor_location_);
+    GetControllerForWidget(w)->SetCursor(cursor_surface_.get());
+  } else {
+    // No cursor set.
+    GetControllerForWidget(w)->UnsetCursor();
+  }
+}
+
+HardwareDisplayController* DriSurfaceFactory::GetControllerForWidget(
+    gfx::AcceleratedWidget w) {
+  CHECK_GE(w, 1);
+  CHECK_LE(static_cast<size_t>(w), controllers_.size());
+
+  return controllers_[w - 1];
+}
+
+}  // namespace ui
diff --git a/ui/ozone/platform/dri/dri_surface_factory.h b/ui/ozone/platform/dri/dri_surface_factory.h
new file mode 100644
index 0000000..2a35871
--- /dev/null
+++ b/ui/ozone/platform/dri/dri_surface_factory.h
@@ -0,0 +1,117 @@
+// 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.
+
+#ifndef UI_OZONE_PLATFORM_DRI_DRI_SURFACE_FACTORY_H_
+#define UI_OZONE_PLATFORM_DRI_DRI_SURFACE_FACTORY_H_
+
+#include "base/memory/scoped_ptr.h"
+#include "base/memory/scoped_vector.h"
+#include "third_party/skia/include/core/SkBitmap.h"
+#include "ui/gfx/ozone/surface_factory_ozone.h"
+#include "ui/ozone/ozone_export.h"
+
+typedef struct _drmModeModeInfo drmModeModeInfo;
+
+namespace gfx {
+class SurfaceOzoneCanvas;
+}
+
+namespace ui {
+
+class DriSurface;
+class DriWrapper;
+class HardwareDisplayController;
+
+// SurfaceFactoryOzone implementation on top of DRM/KMS using dumb buffers.
+// This implementation is used in conjunction with the software rendering
+// path.
+class OZONE_EXPORT DriSurfaceFactory : public gfx::SurfaceFactoryOzone {
+ public:
+  static const gfx::AcceleratedWidget kDefaultWidgetHandle;
+
+  DriSurfaceFactory();
+  virtual ~DriSurfaceFactory();
+
+  // SurfaceFactoryOzone overrides:
+  virtual HardwareState InitializeHardware() OVERRIDE;
+  virtual void ShutdownHardware() OVERRIDE;
+
+  virtual gfx::AcceleratedWidget GetAcceleratedWidget() OVERRIDE;
+
+  virtual scoped_ptr<gfx::SurfaceOzoneCanvas> CreateCanvasForWidget(
+      gfx::AcceleratedWidget w) OVERRIDE;
+
+  virtual bool LoadEGLGLES2Bindings(
+      AddGLLibraryCallback add_gl_library,
+      SetGLGetProcAddressProcCallback set_gl_get_proc_address) OVERRIDE;
+
+  virtual bool SchedulePageFlip(gfx::AcceleratedWidget w);
+
+  virtual SkCanvas* GetCanvasForWidget(gfx::AcceleratedWidget w);
+
+  virtual scoped_ptr<gfx::VSyncProvider> CreateVSyncProvider(
+      gfx::AcceleratedWidget w);
+
+  void SetHardwareCursor(gfx::AcceleratedWidget window,
+                         const SkBitmap& image,
+                         const gfx::Point& location);
+
+  void MoveHardwareCursor(gfx::AcceleratedWidget window,
+                          const gfx::Point& location);
+
+  void UnsetHardwareCursor(gfx::AcceleratedWidget window);
+
+  // Called to initialize a new display. The display is then added to
+  // |controllers_|. When GetAcceleratedWidget() is called it will get the next
+  // available display from |controllers_|.
+  bool CreateHardwareDisplayController(uint32_t connector,
+                                       uint32_t crtc,
+                                       const drmModeModeInfo& mode);
+
+  bool DisableHardwareDisplayController(uint32_t crtc);
+
+  DriWrapper* drm() const { return drm_.get(); }
+
+ private:
+  virtual DriSurface* CreateSurface(const gfx::Size& size);
+
+  virtual DriWrapper* CreateWrapper();
+
+  // On non CrOS builds there is no display configurator to look-up available
+  // displays and initialize the HDCs. In such cases this is called internally
+  // to initialize a display.
+  virtual bool InitializePrimaryDisplay();
+
+  // Blocks until a DRM event is read.
+  // TODO(dnicoara) Remove once we can safely move DRM event processing in the
+  // message loop while correctly signaling when we're done displaying the
+  // pending frame.
+  virtual void WaitForPageFlipEvent(int fd);
+
+  // Draw the last set cursor & update the cursor plane.
+  void ResetCursor(gfx::AcceleratedWidget w);
+
+  // Returns the controller in |controllers_| associated with |w|.
+  HardwareDisplayController* GetControllerForWidget(
+      gfx::AcceleratedWidget w);
+
+  scoped_ptr<DriWrapper> drm_;
+
+  HardwareState state_;
+
+  // Active outputs.
+  ScopedVector<HardwareDisplayController> controllers_;
+  int allocated_widgets_;
+
+  scoped_ptr<DriSurface> cursor_surface_;
+
+  SkBitmap cursor_bitmap_;
+  gfx::Point cursor_location_;
+
+  DISALLOW_COPY_AND_ASSIGN(DriSurfaceFactory);
+};
+
+}  // namespace ui
+
+#endif  // UI_OZONE_PLATFORM_DRI_DRI_SURFACE_FACTORY_H_
diff --git a/ui/ozone/platform/dri/dri_surface_factory_unittest.cc b/ui/ozone/platform/dri/dri_surface_factory_unittest.cc
new file mode 100644
index 0000000..ff1c088
--- /dev/null
+++ b/ui/ozone/platform/dri/dri_surface_factory_unittest.cc
@@ -0,0 +1,366 @@
+// 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.
+
+#include <vector>
+
+#include "base/memory/scoped_ptr.h"
+#include "base/message_loop/message_loop.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/skia/include/core/SkCanvas.h"
+#include "third_party/skia/include/core/SkColor.h"
+#include "ui/gfx/ozone/surface_factory_ozone.h"
+#include "ui/gfx/ozone/surface_ozone_canvas.h"
+#include "ui/ozone/platform/dri/dri_buffer.h"
+#include "ui/ozone/platform/dri/dri_surface.h"
+#include "ui/ozone/platform/dri/dri_surface_factory.h"
+#include "ui/ozone/platform/dri/dri_wrapper.h"
+#include "ui/ozone/platform/dri/hardware_display_controller.h"
+
+namespace {
+
+const drmModeModeInfo kDefaultMode =
+    {0, 6, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, {'\0'}};
+
+// Mock file descriptor ID.
+const int kFd = 3;
+
+// Mock connector ID.
+const uint32_t kConnectorId = 1;
+
+// Mock CRTC ID.
+const uint32_t kCrtcId = 1;
+
+const gfx::AcceleratedWidget kDefaultWidgetHandle = 1;
+
+// The real DriWrapper makes actual DRM calls which we can't use in unit tests.
+class MockDriWrapper : public ui::DriWrapper {
+ public:
+  MockDriWrapper(int fd) : DriWrapper(""),
+                           add_framebuffer_expectation_(true),
+                           page_flip_expectation_(true) {
+    fd_ = fd;
+  }
+
+  virtual ~MockDriWrapper() { fd_ = -1; }
+
+  virtual drmModeCrtc* GetCrtc(uint32_t crtc_id) OVERRIDE {
+    return new drmModeCrtc;
+  }
+
+  virtual void FreeCrtc(drmModeCrtc* crtc) OVERRIDE {
+    delete crtc;
+  }
+
+  virtual bool SetCrtc(uint32_t crtc_id,
+                       uint32_t framebuffer,
+                       uint32_t* connectors,
+                       drmModeModeInfo* mode) OVERRIDE {
+    return true;
+  }
+
+  virtual bool SetCrtc(drmModeCrtc* crtc, uint32_t* connectors) OVERRIDE {
+    return true;
+  }
+
+  virtual bool AddFramebuffer(const drmModeModeInfo& mode,
+                              uint8_t depth,
+                              uint8_t bpp,
+                              uint32_t stride,
+                              uint32_t handle,
+                              uint32_t* framebuffer) OVERRIDE {
+    return add_framebuffer_expectation_;
+  }
+
+  virtual bool RemoveFramebuffer(uint32_t framebuffer) OVERRIDE { return true; }
+
+  virtual bool PageFlip(uint32_t crtc_id,
+                        uint32_t framebuffer,
+                        void* data) OVERRIDE {
+    static_cast<ui::HardwareDisplayController*>(data)->get_surface()
+        ->SwapBuffers();
+    return page_flip_expectation_;
+  }
+
+  virtual bool SetProperty(uint32_t connector_id,
+                           uint32_t property_id,
+                           uint64_t value) OVERRIDE { return true; }
+
+  virtual void FreeProperty(drmModePropertyRes* prop) OVERRIDE { delete prop; }
+
+  virtual drmModePropertyBlobRes* GetPropertyBlob(drmModeConnector* connector,
+                                                  const char* name) OVERRIDE {
+    return new drmModePropertyBlobRes;
+  }
+
+  virtual void FreePropertyBlob(drmModePropertyBlobRes* blob) OVERRIDE {
+    delete blob;
+  }
+
+  virtual bool SetCursor(uint32_t crtc_id,
+                         uint32_t handle,
+                         uint32_t width,
+                         uint32_t height) OVERRIDE { return true; }
+
+  virtual bool MoveCursor(uint32_t crtc_id, int x, int y) OVERRIDE {
+    return true;
+  }
+
+  void set_add_framebuffer_expectation(bool state) {
+    add_framebuffer_expectation_ = state;
+  }
+
+  void set_page_flip_expectation(bool state) {
+    page_flip_expectation_ = state;
+  }
+
+ private:
+  bool add_framebuffer_expectation_;
+  bool page_flip_expectation_;
+
+  DISALLOW_COPY_AND_ASSIGN(MockDriWrapper);
+};
+
+class MockDriBuffer : public ui::DriBuffer {
+ public:
+  MockDriBuffer(ui::DriWrapper* dri) : DriBuffer(dri) {}
+  virtual ~MockDriBuffer() {
+    surface_.clear();
+  }
+
+  virtual bool Initialize(const SkImageInfo& info) OVERRIDE {
+    surface_ = skia::AdoptRef(SkSurface::NewRaster(info));
+    surface_->getCanvas()->clear(SK_ColorBLACK);
+
+    return true;
+  }
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(MockDriBuffer);
+};
+
+class MockDriSurface : public ui::DriSurface {
+ public:
+  MockDriSurface(ui::DriWrapper* dri, const gfx::Size& size)
+      : DriSurface(dri, size), dri_(dri) {}
+  virtual ~MockDriSurface() {}
+
+  const std::vector<MockDriBuffer*>& bitmaps() const { return bitmaps_; }
+
+ private:
+  virtual ui::DriBuffer* CreateBuffer() OVERRIDE {
+    MockDriBuffer* bitmap = new MockDriBuffer(dri_);
+    bitmaps_.push_back(bitmap);
+
+    return bitmap;
+  }
+
+  ui::DriWrapper* dri_;                  // Not owned.
+  std::vector<MockDriBuffer*> bitmaps_;  // Not owned.
+
+  DISALLOW_COPY_AND_ASSIGN(MockDriSurface);
+};
+
+// SSFO would normally allocate DRM resources. We can't rely on having a DRM
+// backend to allocate and display our buffers. Thus, we replace these
+// resources with stubs. For DRM calls, we simply use stubs that do nothing and
+// for buffers we use the default SkBitmap allocator.
+class MockDriSurfaceFactory : public ui::DriSurfaceFactory {
+ public:
+  MockDriSurfaceFactory()
+      : DriSurfaceFactory(),
+        mock_drm_(NULL),
+        drm_wrapper_expectation_(true),
+        initialize_controller_expectation_(true) {}
+  virtual ~MockDriSurfaceFactory() {};
+
+  void set_drm_wrapper_expectation(bool state) {
+    drm_wrapper_expectation_ = state;
+  }
+
+  void set_initialize_controller_expectation(bool state) {
+    initialize_controller_expectation_ = state;
+  }
+
+  MockDriWrapper* get_drm() const {
+    return mock_drm_;
+  }
+
+  const std::vector<MockDriSurface*>& get_surfaces() const { return surfaces_; }
+
+ private:
+  virtual ui::DriSurface* CreateSurface(const gfx::Size& size) OVERRIDE {
+    MockDriSurface* surface = new MockDriSurface(mock_drm_, size);
+    surfaces_.push_back(surface);
+    return surface;
+  }
+
+  virtual ui::DriWrapper* CreateWrapper() OVERRIDE {
+    if (drm_wrapper_expectation_)
+      mock_drm_ = new MockDriWrapper(kFd);
+    else
+      mock_drm_ = new MockDriWrapper(-1);
+
+    return mock_drm_;
+  }
+
+  // Normally we'd use DRM to figure out the controller configuration. But we
+  // can't use DRM in unit tests, so we just create a fake configuration.
+  virtual bool InitializePrimaryDisplay() OVERRIDE {
+    if (initialize_controller_expectation_) {
+      return CreateHardwareDisplayController(
+          kConnectorId, kCrtcId, kDefaultMode);
+    } else {
+      return false;
+    }
+  }
+
+  virtual void WaitForPageFlipEvent(int fd) OVERRIDE {}
+
+  MockDriWrapper* mock_drm_;
+  bool drm_wrapper_expectation_;
+  bool initialize_controller_expectation_;
+  std::vector<MockDriSurface*> surfaces_;  // Not owned.
+
+  DISALLOW_COPY_AND_ASSIGN(MockDriSurfaceFactory);
+};
+
+}  // namespace
+
+class DriSurfaceFactoryTest : public testing::Test {
+ public:
+  DriSurfaceFactoryTest() {}
+
+  virtual void SetUp() OVERRIDE;
+  virtual void TearDown() OVERRIDE;
+ protected:
+  scoped_ptr<base::MessageLoop> message_loop_;
+  scoped_ptr<MockDriSurfaceFactory> factory_;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(DriSurfaceFactoryTest);
+};
+
+void DriSurfaceFactoryTest::SetUp() {
+  message_loop_.reset(new base::MessageLoopForUI);
+  factory_.reset(new MockDriSurfaceFactory());
+}
+
+void DriSurfaceFactoryTest::TearDown() {
+  factory_.reset();
+  message_loop_.reset();
+}
+
+TEST_F(DriSurfaceFactoryTest, FailInitialization) {
+  factory_->set_drm_wrapper_expectation(false);
+
+  EXPECT_EQ(gfx::SurfaceFactoryOzone::FAILED, factory_->InitializeHardware());
+}
+
+TEST_F(DriSurfaceFactoryTest, SuccessfulInitialization) {
+  EXPECT_EQ(gfx::SurfaceFactoryOzone::INITIALIZED,
+            factory_->InitializeHardware());
+}
+
+TEST_F(DriSurfaceFactoryTest, FailSurfaceInitialization) {
+  factory_->set_initialize_controller_expectation(false);
+
+  EXPECT_EQ(gfx::SurfaceFactoryOzone::INITIALIZED,
+            factory_->InitializeHardware());
+
+  gfx::AcceleratedWidget w = factory_->GetAcceleratedWidget();
+  EXPECT_EQ(kDefaultWidgetHandle, w);
+
+  EXPECT_FALSE(factory_->CreateCanvasForWidget(w));
+}
+
+TEST_F(DriSurfaceFactoryTest, FailBindingSurfaceToController) {
+  EXPECT_EQ(gfx::SurfaceFactoryOzone::INITIALIZED,
+            factory_->InitializeHardware());
+
+  factory_->get_drm()->set_add_framebuffer_expectation(false);
+
+  gfx::AcceleratedWidget w = factory_->GetAcceleratedWidget();
+  EXPECT_EQ(kDefaultWidgetHandle, w);
+
+  EXPECT_FALSE(factory_->CreateCanvasForWidget(w));
+}
+
+TEST_F(DriSurfaceFactoryTest, SuccessfulWidgetRealization) {
+  EXPECT_EQ(gfx::SurfaceFactoryOzone::INITIALIZED,
+            factory_->InitializeHardware());
+
+  gfx::AcceleratedWidget w = factory_->GetAcceleratedWidget();
+  EXPECT_EQ(kDefaultWidgetHandle, w);
+
+  EXPECT_TRUE(factory_->CreateCanvasForWidget(w));
+}
+
+TEST_F(DriSurfaceFactoryTest, FailSchedulePageFlip) {
+  EXPECT_EQ(gfx::SurfaceFactoryOzone::INITIALIZED,
+            factory_->InitializeHardware());
+
+  factory_->get_drm()->set_page_flip_expectation(false);
+
+  gfx::AcceleratedWidget w = factory_->GetAcceleratedWidget();
+  EXPECT_EQ(kDefaultWidgetHandle, w);
+
+  scoped_ptr<gfx::SurfaceOzoneCanvas> surf = factory_->CreateCanvasForWidget(w);
+  EXPECT_TRUE(surf);
+
+  EXPECT_FALSE(factory_->SchedulePageFlip(w));
+}
+
+TEST_F(DriSurfaceFactoryTest, SuccessfulSchedulePageFlip) {
+  EXPECT_EQ(gfx::SurfaceFactoryOzone::INITIALIZED,
+            factory_->InitializeHardware());
+
+  gfx::AcceleratedWidget w = factory_->GetAcceleratedWidget();
+  EXPECT_EQ(kDefaultWidgetHandle, w);
+
+  scoped_ptr<gfx::SurfaceOzoneCanvas> surf = factory_->CreateCanvasForWidget(w);
+  EXPECT_TRUE(surf);
+
+  EXPECT_TRUE(factory_->SchedulePageFlip(w));
+}
+
+TEST_F(DriSurfaceFactoryTest, SetCursorImage) {
+  EXPECT_EQ(gfx::SurfaceFactoryOzone::INITIALIZED,
+            factory_->InitializeHardware());
+
+  gfx::AcceleratedWidget w = factory_->GetAcceleratedWidget();
+  EXPECT_EQ(kDefaultWidgetHandle, w);
+
+  scoped_ptr<gfx::SurfaceOzoneCanvas> surf = factory_->CreateCanvasForWidget(w);
+  EXPECT_TRUE(surf);
+
+  SkBitmap image;
+  SkImageInfo info = SkImageInfo::Make(
+      6, 4, kPMColor_SkColorType, kPremul_SkAlphaType);
+  image.allocPixels(info);
+  image.eraseColor(SK_ColorWHITE);
+
+  factory_->SetHardwareCursor(w, image, gfx::Point(4, 2));
+  const std::vector<MockDriSurface*>& surfaces = factory_->get_surfaces();
+
+  // The first surface is the cursor surface since it is allocated early in the
+  // initialization process.
+  const std::vector<MockDriBuffer*>& bitmaps = surfaces[0]->bitmaps();
+
+  // The surface should have been initialized to a double-buffered surface.
+  EXPECT_EQ(2u, bitmaps.size());
+
+  SkBitmap cursor;
+  bitmaps[1]->canvas()->readPixels(&cursor, 0, 0);
+
+  // Check that the frontbuffer is displaying the right image as set above.
+  for (int i = 0; i < cursor.height(); ++i) {
+    for (int j = 0; j < cursor.width(); ++j) {
+      if (j < info.width() && i < info.height())
+        EXPECT_EQ(SK_ColorWHITE, cursor.getColor(j, i));
+      else
+        EXPECT_EQ(static_cast<SkColor>(SK_ColorTRANSPARENT),
+                  cursor.getColor(j, i));
+    }
+  }
+}
diff --git a/ui/ozone/platform/dri/dri_surface_unittest.cc b/ui/ozone/platform/dri/dri_surface_unittest.cc
new file mode 100644
index 0000000..ed7393a
--- /dev/null
+++ b/ui/ozone/platform/dri/dri_surface_unittest.cc
@@ -0,0 +1,217 @@
+// 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.
+
+#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/skia/include/core/SkCanvas.h"
+#include "third_party/skia/include/core/SkColor.h"
+#include "third_party/skia/include/core/SkDevice.h"
+#include "ui/ozone/platform/dri/dri_buffer.h"
+#include "ui/ozone/platform/dri/dri_surface.h"
+#include "ui/ozone/platform/dri/hardware_display_controller.h"
+
+namespace {
+
+// Create a basic mode for a 6x4 screen.
+const drmModeModeInfo kDefaultMode =
+    {0, 6, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, {'\0'}};
+
+// Mock file descriptor ID.
+const int kFd = 3;
+
+// Mock connector ID.
+const uint32_t kConnectorId = 1;
+
+// Mock CRTC ID.
+const uint32_t kCrtcId = 1;
+
+class MockDriWrapper : public ui::DriWrapper {
+ public:
+  MockDriWrapper() : DriWrapper(""), id_(1) { fd_ = kFd; }
+  virtual ~MockDriWrapper() { fd_ = -1; }
+
+  virtual drmModeCrtc* GetCrtc(uint32_t crtc_id) OVERRIDE { return NULL; }
+  virtual void FreeCrtc(drmModeCrtc* crtc) OVERRIDE {}
+  virtual bool SetCrtc(uint32_t crtc_id,
+                       uint32_t framebuffer,
+                       uint32_t* connectors,
+                       drmModeModeInfo* mode) OVERRIDE { return true; }
+  virtual bool SetCrtc(drmModeCrtc* crtc, uint32_t* connectors) OVERRIDE {
+    return true;
+  }
+  virtual bool AddFramebuffer(const drmModeModeInfo& mode,
+                              uint8_t depth,
+                              uint8_t bpp,
+                              uint32_t stride,
+                              uint32_t handle,
+                              uint32_t* framebuffer) OVERRIDE {
+    *framebuffer = id_++;
+    return true;
+  }
+  virtual bool RemoveFramebuffer(uint32_t framebuffer) OVERRIDE { return true; }
+  virtual bool PageFlip(uint32_t crtc_id,
+                        uint32_t framebuffer,
+                        void* data) OVERRIDE {
+    return true;
+  }
+  virtual bool SetProperty(uint32_t connector_id,
+                           uint32_t property_id,
+                           uint64_t value) OVERRIDE { return true; }
+  virtual void FreeProperty(drmModePropertyRes* prop) OVERRIDE { delete prop; }
+  virtual drmModePropertyBlobRes* GetPropertyBlob(drmModeConnector* connector,
+                                                  const char* name) OVERRIDE {
+    return new drmModePropertyBlobRes;
+  }
+  virtual void FreePropertyBlob(drmModePropertyBlobRes* blob) OVERRIDE {
+    delete blob;
+  }
+
+ private:
+  int id_;
+  DISALLOW_COPY_AND_ASSIGN(MockDriWrapper);
+};
+
+class MockDriBuffer : public ui::DriBuffer {
+ public:
+  MockDriBuffer(ui::DriWrapper* dri, bool initialize_expectation)
+      : DriBuffer(dri), initialize_expectation_(initialize_expectation) {}
+  virtual ~MockDriBuffer() {
+    surface_.clear();
+  }
+
+  virtual bool Initialize(const SkImageInfo& info) OVERRIDE {
+    if (!initialize_expectation_)
+      return false;
+
+    surface_ = skia::AdoptRef(SkSurface::NewRaster(info));
+    surface_->getCanvas()->clear(SK_ColorBLACK);
+
+    return true;
+  }
+
+ private:
+  bool initialize_expectation_;
+
+  DISALLOW_COPY_AND_ASSIGN(MockDriBuffer);
+};
+
+class MockDriSurface : public ui::DriSurface {
+ public:
+  MockDriSurface(ui::DriWrapper* dri, const gfx::Size& size)
+      : DriSurface(dri, size), dri_(dri), initialize_expectation_(true) {}
+  virtual ~MockDriSurface() {}
+
+  void set_initialize_expectation(bool state) {
+    initialize_expectation_ = state;
+  }
+
+ private:
+  virtual ui::DriBuffer* CreateBuffer() OVERRIDE {
+    return new MockDriBuffer(dri_, initialize_expectation_);
+  }
+
+  ui::DriWrapper* dri_;
+  bool initialize_expectation_;
+
+  DISALLOW_COPY_AND_ASSIGN(MockDriSurface);
+};
+
+}  // namespace
+
+class DriSurfaceTest : public testing::Test {
+ public:
+  DriSurfaceTest() {}
+
+  virtual void SetUp() OVERRIDE;
+  virtual void TearDown() OVERRIDE;
+
+ protected:
+  scoped_ptr<MockDriWrapper> drm_;
+  scoped_ptr<ui::HardwareDisplayController> controller_;
+  scoped_ptr<MockDriSurface> surface_;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(DriSurfaceTest);
+};
+
+void DriSurfaceTest::SetUp() {
+  drm_.reset(new MockDriWrapper());
+  controller_.reset(new ui::HardwareDisplayController(
+      drm_.get(), kConnectorId, kCrtcId, kDefaultMode));
+
+  surface_.reset(new MockDriSurface(drm_.get(),
+                                    gfx::Size(kDefaultMode.hdisplay,
+                                              kDefaultMode.vdisplay)));
+}
+
+void DriSurfaceTest::TearDown() {
+  surface_.reset();
+  controller_.reset();
+  drm_.reset();
+}
+
+TEST_F(DriSurfaceTest, FailInitialization) {
+  surface_->set_initialize_expectation(false);
+  EXPECT_FALSE(surface_->Initialize());
+}
+
+TEST_F(DriSurfaceTest, SuccessfulInitialization) {
+  EXPECT_TRUE(surface_->Initialize());
+}
+
+TEST_F(DriSurfaceTest, CheckFBIDOnSwap) {
+  EXPECT_TRUE(surface_->Initialize());
+  controller_->BindSurfaceToController(surface_.PassAs<ui::DriSurface>());
+
+  // Check that the framebuffer ID is correct.
+  EXPECT_EQ(2u, controller_->get_surface()->GetFramebufferId());
+
+  controller_->get_surface()->SwapBuffers();
+
+  EXPECT_EQ(1u, controller_->get_surface()->GetFramebufferId());
+}
+
+TEST_F(DriSurfaceTest, CheckPixelPointerOnSwap) {
+  EXPECT_TRUE(surface_->Initialize());
+
+  void* bitmap_pixels1 = surface_->GetDrawableForWidget()->getDevice()
+      ->accessBitmap(false).getPixels();
+
+  surface_->SwapBuffers();
+
+  void* bitmap_pixels2 = surface_->GetDrawableForWidget()->getDevice()
+      ->accessBitmap(false).getPixels();
+
+  // Check that once the buffers have been swapped the drawable's underlying
+  // pixels have been changed.
+  EXPECT_NE(bitmap_pixels1, bitmap_pixels2);
+}
+
+TEST_F(DriSurfaceTest, CheckCorrectBufferSync) {
+  EXPECT_TRUE(surface_->Initialize());
+
+  SkCanvas* canvas = surface_->GetDrawableForWidget();
+  SkRect clip;
+  // Modify part of the canvas.
+  clip.set(0, 0,
+           canvas->getDeviceSize().width() / 2,
+           canvas->getDeviceSize().height() / 2);
+  canvas->clipRect(clip, SkRegion::kReplace_Op);
+
+  canvas->drawColor(SK_ColorWHITE);
+
+  surface_->SwapBuffers();
+
+  // Verify that the modified contents have been copied over on swap (make sure
+  // the 2 buffers have the same content).
+  for (int i = 0; i < canvas->getDeviceSize().height(); ++i) {
+    for (int j = 0; j < canvas->getDeviceSize().width(); ++j) {
+      if (i < clip.height() && j < clip.width())
+        EXPECT_EQ(SK_ColorWHITE,
+                  canvas->getDevice()->accessBitmap(false).getColor(j, i));
+      else
+        EXPECT_EQ(SK_ColorBLACK,
+                  canvas->getDevice()->accessBitmap(false).getColor(j, i));
+    }
+  }
+}
diff --git a/ui/ozone/platform/dri/dri_util.cc b/ui/ozone/platform/dri/dri_util.cc
new file mode 100644
index 0000000..cb7cdf7
--- /dev/null
+++ b/ui/ozone/platform/dri/dri_util.cc
@@ -0,0 +1,108 @@
+// 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.
+
+#include "ui/ozone/platform/dri/dri_util.h"
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <xf86drmMode.h>
+
+namespace ui {
+
+namespace {
+
+bool IsCrtcInUse(uint32_t crtc,
+                 const ScopedVector<HardwareDisplayControllerInfo>& displays) {
+  for (size_t i = 0; i < displays.size(); ++i) {
+    if (crtc == displays[i]->crtc()->crtc_id)
+      return true;
+  }
+
+  return false;
+}
+
+uint32_t GetCrtc(int fd,
+                 drmModeConnector* connector,
+                 drmModeRes* resources,
+                 const ScopedVector<HardwareDisplayControllerInfo>& displays) {
+  // If the connector already has an encoder try to re-use.
+  if (connector->encoder_id) {
+    drmModeEncoder* encoder = drmModeGetEncoder(fd, connector->encoder_id);
+    if (encoder) {
+      if (encoder->crtc_id && !IsCrtcInUse(encoder->crtc_id, displays)) {
+        uint32_t crtc = encoder->crtc_id;
+        drmModeFreeEncoder(encoder);
+        return crtc;
+      }
+      drmModeFreeEncoder(encoder);
+    }
+  }
+
+  // Try to find an encoder for the connector.
+  for (int i = 0; i < connector->count_encoders; ++i) {
+    drmModeEncoder* encoder = drmModeGetEncoder(fd, connector->encoders[i]);
+    if (!encoder)
+      continue;
+
+    for (int j = 0; j < resources->count_crtcs; ++j) {
+      // Check if the encoder is compatible with this CRTC
+      if (!(encoder->possible_crtcs & (1 << j)) ||
+          IsCrtcInUse(resources->crtcs[j], displays)) {
+        continue;
+      }
+
+      drmModeFreeEncoder(encoder);
+      return resources->crtcs[j];
+    }
+
+    drmModeFreeEncoder(encoder);
+  }
+
+  return 0;
+}
+
+}  // namespace
+
+HardwareDisplayControllerInfo::HardwareDisplayControllerInfo(
+    drmModeConnector* connector,
+    drmModeCrtc* crtc)
+    : connector_(connector),
+      crtc_(crtc) {}
+
+HardwareDisplayControllerInfo::~HardwareDisplayControllerInfo() {
+  drmModeFreeConnector(connector_);
+  drmModeFreeCrtc(crtc_);
+}
+
+ScopedVector<HardwareDisplayControllerInfo>
+GetAvailableDisplayControllerInfos(int fd, drmModeRes* resources) {
+  ScopedVector<HardwareDisplayControllerInfo> displays;
+
+  for (int i = 0; i < resources->count_connectors; ++i) {
+    drmModeConnector* connector = drmModeGetConnector(
+        fd, resources->connectors[i]);
+
+    if (!connector)
+      continue;
+
+    if (connector->connection != DRM_MODE_CONNECTED ||
+        connector->count_modes == 0) {
+      drmModeFreeConnector(connector);
+      continue;
+    }
+
+    uint32_t crtc_id = GetCrtc(fd, connector, resources, displays);
+    if (!crtc_id) {
+      drmModeFreeConnector(connector);
+      continue;
+    }
+
+    drmModeCrtc* crtc = drmModeGetCrtc(fd, crtc_id);
+    displays.push_back(new HardwareDisplayControllerInfo(connector, crtc));
+  }
+
+  return displays.Pass();
+}
+
+}  // namespace ui
diff --git a/ui/ozone/platform/dri/dri_util.h b/ui/ozone/platform/dri/dri_util.h
new file mode 100644
index 0000000..f2d72b4
--- /dev/null
+++ b/ui/ozone/platform/dri/dri_util.h
@@ -0,0 +1,41 @@
+// 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.
+
+#ifndef UI_OZONE_PLATFORM_DRI_DRI_UTIL_H_
+#define UI_OZONE_PLATFORM_DRI_DRI_UTIL_H_
+
+#include "base/macros.h"
+#include "base/memory/scoped_vector.h"
+
+typedef struct _drmModeConnector drmModeConnector;
+typedef struct _drmModeCrtc drmModeCrtc;
+typedef struct _drmModeRes drmModeRes;
+
+namespace ui {
+
+// Representation of the information required to initialize and configure a
+// native display.
+class HardwareDisplayControllerInfo {
+ public:
+  HardwareDisplayControllerInfo(drmModeConnector* connector, drmModeCrtc* crtc);
+  ~HardwareDisplayControllerInfo();
+
+  drmModeConnector* connector() const { return connector_; }
+  drmModeCrtc* crtc() const { return crtc_; }
+
+ private:
+  drmModeConnector* connector_;
+  drmModeCrtc* crtc_;
+
+  DISALLOW_COPY_AND_ASSIGN(HardwareDisplayControllerInfo);
+};
+
+// Looks-up and parses the native display configurations returning all available
+// displays.
+ScopedVector<HardwareDisplayControllerInfo>
+GetAvailableDisplayControllerInfos(int fd, drmModeRes* resources);
+
+}  // namespace ui
+
+#endif  // UI_OZONE_PLATFORM_DRI_DRI_UTIL_H_
diff --git a/ui/ozone/platform/dri/dri_vsync_provider.cc b/ui/ozone/platform/dri/dri_vsync_provider.cc
new file mode 100644
index 0000000..9c61762
--- /dev/null
+++ b/ui/ozone/platform/dri/dri_vsync_provider.cc
@@ -0,0 +1,32 @@
+// 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.
+
+#include "ui/ozone/platform/dri/dri_vsync_provider.h"
+
+#include "base/time/time.h"
+#include "ui/ozone/platform/dri/hardware_display_controller.h"
+
+namespace ui {
+
+DriVSyncProvider::DriVSyncProvider(HardwareDisplayController* controller)
+    : controller_(controller) {}
+
+DriVSyncProvider::~DriVSyncProvider() {}
+
+void DriVSyncProvider::GetVSyncParameters(const UpdateVSyncCallback& callback) {
+  // The value is invalid, so we can't update the parameters.
+  if (controller_->get_time_of_last_flip() == 0)
+    return;
+
+  // Stores the time of the last refresh.
+  base::TimeTicks timebase =
+      base::TimeTicks::FromInternalValue(controller_->get_time_of_last_flip());
+  // Stores the refresh rate.
+  base::TimeDelta interval =
+      base::TimeDelta::FromSeconds(1) / controller_->get_mode().vrefresh;
+
+  callback.Run(timebase, interval);
+}
+
+}  // namespace ui
diff --git a/ui/ozone/platform/dri/dri_vsync_provider.h b/ui/ozone/platform/dri/dri_vsync_provider.h
new file mode 100644
index 0000000..f031a8e
--- /dev/null
+++ b/ui/ozone/platform/dri/dri_vsync_provider.h
@@ -0,0 +1,29 @@
+// 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.
+
+#ifndef UI_OZONE_PLATFORM_IMPL_DRI_VSYNC_PROVIDER_H_
+#define UI_OZONE_PLATFORM_IMPL_DRI_VSYNC_PROVIDER_H_
+
+#include "ui/gfx/vsync_provider.h"
+
+namespace ui {
+
+class HardwareDisplayController;
+
+class DriVSyncProvider : public gfx::VSyncProvider {
+ public:
+  DriVSyncProvider(HardwareDisplayController* controller);
+  virtual ~DriVSyncProvider();
+
+  virtual void GetVSyncParameters(const UpdateVSyncCallback& callback) OVERRIDE;
+
+ private:
+  HardwareDisplayController* controller_;
+
+  DISALLOW_COPY_AND_ASSIGN(DriVSyncProvider);
+};
+
+}  // namespace ui
+
+#endif  // UI_OZONE_PLATFORM_IMPL_DRI_VSYNC_PROVIDER_H_
diff --git a/ui/ozone/platform/dri/dri_wrapper.cc b/ui/ozone/platform/dri/dri_wrapper.cc
new file mode 100644
index 0000000..38524de
--- /dev/null
+++ b/ui/ozone/platform/dri/dri_wrapper.cc
@@ -0,0 +1,157 @@
+// 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.
+
+#include "ui/ozone/platform/dri/dri_wrapper.h"
+
+#include <fcntl.h>
+#include <unistd.h>
+#include <xf86drmMode.h>
+
+#include "base/logging.h"
+
+namespace ui {
+
+DriWrapper::DriWrapper(const char* device_path) {
+  fd_ = open(device_path, O_RDWR | O_CLOEXEC);
+}
+
+DriWrapper::~DriWrapper() {
+  if (fd_ >= 0)
+    close(fd_);
+}
+
+drmModeCrtc* DriWrapper::GetCrtc(uint32_t crtc_id) {
+  CHECK(fd_ >= 0);
+  return drmModeGetCrtc(fd_, crtc_id);
+}
+
+void DriWrapper::FreeCrtc(drmModeCrtc* crtc) {
+  drmModeFreeCrtc(crtc);
+}
+
+bool DriWrapper::SetCrtc(uint32_t crtc_id,
+                         uint32_t framebuffer,
+                         uint32_t* connectors,
+                         drmModeModeInfo* mode) {
+  CHECK(fd_ >= 0);
+  return !drmModeSetCrtc(fd_, crtc_id, framebuffer, 0, 0, connectors, 1, mode);
+}
+
+bool DriWrapper::SetCrtc(drmModeCrtc* crtc, uint32_t* connectors) {
+  CHECK(fd_ >= 0);
+  return !drmModeSetCrtc(fd_,
+                         crtc->crtc_id,
+                         crtc->buffer_id,
+                         crtc->x,
+                         crtc->y,
+                         connectors,
+                         1,
+                         &crtc->mode);
+}
+
+bool DriWrapper::DisableCrtc(uint32_t crtc_id) {
+  CHECK(fd_ >= 0);
+  return !drmModeSetCrtc(fd_, crtc_id, 0, 0, 0, NULL, 0, NULL);
+}
+
+bool DriWrapper::AddFramebuffer(const drmModeModeInfo& mode,
+                                     uint8_t depth,
+                                     uint8_t bpp,
+                                     uint32_t stride,
+                                     uint32_t handle,
+                                     uint32_t* framebuffer) {
+  CHECK(fd_ >= 0);
+  return !drmModeAddFB(fd_,
+                       mode.hdisplay,
+                       mode.vdisplay,
+                       depth,
+                       bpp,
+                       stride,
+                       handle,
+                       framebuffer);
+}
+
+bool DriWrapper::RemoveFramebuffer(uint32_t framebuffer) {
+  CHECK(fd_ >= 0);
+  return !drmModeRmFB(fd_, framebuffer);
+}
+
+bool DriWrapper::PageFlip(uint32_t crtc_id,
+                               uint32_t framebuffer,
+                               void* data) {
+  CHECK(fd_ >= 0);
+  return !drmModePageFlip(fd_,
+                          crtc_id,
+                          framebuffer,
+                          DRM_MODE_PAGE_FLIP_EVENT,
+                          data);
+}
+
+drmModePropertyRes* DriWrapper::GetProperty(drmModeConnector* connector,
+                                            const char* name) {
+  for (int i = 0; i < connector->count_props; ++i) {
+    drmModePropertyRes* property = drmModeGetProperty(fd_, connector->props[i]);
+    if (!property)
+      continue;
+
+    if (strcmp(property->name, name) == 0)
+      return property;
+
+    drmModeFreeProperty(property);
+  }
+
+  return NULL;
+}
+
+bool DriWrapper::SetProperty(uint32_t connector_id,
+                             uint32_t property_id,
+                             uint64_t value) {
+  CHECK(fd_ >= 0);
+  return !drmModeConnectorSetProperty(fd_, connector_id, property_id, value);
+}
+
+void DriWrapper::FreeProperty(drmModePropertyRes* prop) {
+  drmModeFreeProperty(prop);
+}
+
+drmModePropertyBlobRes* DriWrapper::GetPropertyBlob(drmModeConnector* connector,
+                                                    const char* name) {
+  CHECK(fd_ >= 0);
+  for (int i = 0; i < connector->count_props; ++i) {
+    drmModePropertyRes* property = drmModeGetProperty(fd_, connector->props[i]);
+    if (!property)
+      continue;
+
+    if (strcmp(property->name, name) == 0 &&
+        property->flags & DRM_MODE_PROP_BLOB) {
+      drmModePropertyBlobRes* blob =
+          drmModeGetPropertyBlob(fd_, connector->prop_values[i]);
+      drmModeFreeProperty(property);
+      return blob;
+    }
+
+    drmModeFreeProperty(property);
+  }
+
+  return NULL;
+}
+
+void DriWrapper::FreePropertyBlob(drmModePropertyBlobRes* blob) {
+  drmModeFreePropertyBlob(blob);
+}
+
+bool DriWrapper::SetCursor(uint32_t crtc_id,
+                           uint32_t handle,
+                           uint32_t width,
+                           uint32_t height) {
+  CHECK(fd_ >= 0);
+  return !drmModeSetCursor(fd_, crtc_id, handle, width, height);
+}
+
+bool DriWrapper::MoveCursor(uint32_t crtc_id, int x, int y) {
+  CHECK(fd_ >= 0);
+  return !drmModeMoveCursor(fd_, crtc_id, x, y);
+}
+
+}  // namespace ui
diff --git a/ui/ozone/platform/dri/dri_wrapper.h b/ui/ozone/platform/dri/dri_wrapper.h
new file mode 100644
index 0000000..a14489d
--- /dev/null
+++ b/ui/ozone/platform/dri/dri_wrapper.h
@@ -0,0 +1,123 @@
+// 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.
+
+#ifndef UI_OZONE_PLATFORM_DRI_DRI_WRAPPER_H_
+#define UI_OZONE_PLATFORM_DRI_DRI_WRAPPER_H_
+
+#include <stdint.h>
+
+#include "base/basictypes.h"
+#include "ui/ozone/ozone_export.h"
+
+typedef struct _drmModeConnector drmModeConnector;
+typedef struct _drmModeCrtc drmModeCrtc;
+typedef struct _drmModeModeInfo drmModeModeInfo;
+typedef struct _drmModeProperty drmModePropertyRes;
+typedef struct _drmModePropertyBlob drmModePropertyBlobRes;
+
+namespace ui {
+
+// Wraps DRM calls into a nice interface. Used to provide different
+// implementations of the DRM calls. For the actual implementation the DRM API
+// would be called. In unit tests this interface would be stubbed.
+class OZONE_EXPORT DriWrapper {
+ public:
+  DriWrapper(const char* device_path);
+  virtual ~DriWrapper();
+
+  // Get the CRTC state. This is generally used to save state before using the
+  // CRTC. When the user finishes using the CRTC, the user should restore the
+  // CRTC to it's initial state. Use |SetCrtc| to restore the state.
+  virtual drmModeCrtc* GetCrtc(uint32_t crtc_id);
+
+  // Frees the CRTC mode object.
+  virtual void FreeCrtc(drmModeCrtc* crtc);
+
+  // Used to configure CRTC with ID |crtc_id| to use the connector in
+  // |connectors|. The CRTC will be configured with mode |mode| and will display
+  // the framebuffer with ID |framebuffer|. Before being able to display the
+  // framebuffer, it should be registered with the CRTC using |AddFramebuffer|.
+  virtual bool SetCrtc(uint32_t crtc_id,
+                       uint32_t framebuffer,
+                       uint32_t* connectors,
+                       drmModeModeInfo* mode);
+
+  // Used to set a specific configuration to the CRTC. Normally this function
+  // would be called with a CRTC saved state (from |GetCrtc|) to restore it to
+  // its original configuration.
+  virtual bool SetCrtc(drmModeCrtc* crtc, uint32_t* connectors);
+
+  virtual bool DisableCrtc(uint32_t crtc_id);
+
+  // Register a buffer with the CRTC. On successful registration, the CRTC will
+  // assign a framebuffer ID to |framebuffer|.
+  virtual bool AddFramebuffer(const drmModeModeInfo& mode,
+                              uint8_t depth,
+                              uint8_t bpp,
+                              uint32_t stride,
+                              uint32_t handle,
+                              uint32_t* framebuffer);
+
+  // Deregister the given |framebuffer|.
+  virtual bool RemoveFramebuffer(uint32_t framebuffer);
+
+  // Schedules a pageflip for CRTC |crtc_id|. This function will return
+  // immediately. Upon completion of the pageflip event, the CRTC will be
+  // displaying the buffer with ID |framebuffer| and will have a DRM event
+  // queued on |fd_|. |data| is a generic pointer to some information the user
+  // will receive when processing the pageflip event.
+  virtual bool PageFlip(uint32_t crtc_id, uint32_t framebuffer, void* data);
+
+  // Returns the property with name |name| associated with |connector|. Returns
+  // NULL if property not found. If the returned value is valid, it must be
+  // released using FreeProperty().
+  virtual drmModePropertyRes* GetProperty(drmModeConnector* connector,
+                                          const char* name);
+
+  // Sets the value of property with ID |property_id| to |value|. The property
+  // is applied to the connector with ID |connector_id|.
+  virtual bool SetProperty(uint32_t connector_id,
+                           uint32_t property_id,
+                           uint64_t value);
+
+  // Frees |prop| and any resources it allocated when it was created. |prop|
+  // must be a valid object.
+  virtual void FreeProperty(drmModePropertyRes* prop);
+
+  // Return a binary blob associated with |connector|. The binary blob is
+  // associated with the property with name |name|. Return NULL if the property
+  // could not be found or if the property does not have a binary blob. If valid
+  // the returned object must be freed using FreePropertyBlob().
+  virtual drmModePropertyBlobRes* GetPropertyBlob(drmModeConnector* connector,
+                                                  const char* name);
+
+  // Frees |blob| and any resources allocated when it was created. |blob| must
+  // be a valid object.
+  virtual void FreePropertyBlob(drmModePropertyBlobRes* blob);
+
+  // Set the cursor to be displayed in CRTC |crtc_id|. (width, height) is the
+  // cursor size pointed by |handle|.
+  virtual bool SetCursor(uint32_t crtc_id,
+                         uint32_t handle,
+                         uint32_t width,
+                         uint32_t height);
+
+
+  // Move the cursor on CRTC |crtc_id| to (x, y);
+  virtual bool MoveCursor(uint32_t crtc_id, int x, int y);
+
+  int get_fd() const { return fd_; }
+
+ protected:
+  // The file descriptor associated with this wrapper. All DRM operations will
+  // be performed using this FD.
+  int fd_;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(DriWrapper);
+};
+
+}  // namespace ui
+
+#endif  // UI_OZONE_PLATFORM_DRI_DRI_WRAPPER_H_
diff --git a/ui/ozone/platform/dri/hardware_display_controller.cc b/ui/ozone/platform/dri/hardware_display_controller.cc
new file mode 100644
index 0000000..ae9c410
--- /dev/null
+++ b/ui/ozone/platform/dri/hardware_display_controller.cc
@@ -0,0 +1,121 @@
+// 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.
+
+#include "ui/ozone/platform/dri/hardware_display_controller.h"
+
+#include <errno.h>
+#include <string.h>
+
+#include "base/basictypes.h"
+#include "base/debug/trace_event.h"
+#include "base/logging.h"
+#include "base/time/time.h"
+#include "third_party/skia/include/core/SkCanvas.h"
+#include "ui/gfx/geometry/point.h"
+#include "ui/ozone/platform/dri/dri_buffer.h"
+#include "ui/ozone/platform/dri/dri_surface.h"
+#include "ui/ozone/platform/dri/dri_wrapper.h"
+
+namespace ui {
+
+HardwareDisplayController::HardwareDisplayController(
+    DriWrapper* drm,
+    uint32_t connector_id,
+    uint32_t crtc_id,
+    drmModeModeInfo mode)
+    : drm_(drm),
+      connector_id_(connector_id),
+      crtc_id_(crtc_id),
+      mode_(mode),
+      surface_(),
+      time_of_last_flip_(0) {}
+
+HardwareDisplayController::~HardwareDisplayController() {
+  // Reset the cursor.
+  UnsetCursor();
+
+  if (surface_.get()) {
+    // Unregister the buffers.
+    for (size_t i = 0; i < arraysize(surface_->bitmaps_); ++i) {
+      if (!drm_->RemoveFramebuffer(surface_->bitmaps_[i]->framebuffer()))
+        DLOG(ERROR) << "Failed to remove FB: " << strerror(errno);
+    }
+  }
+}
+
+bool
+HardwareDisplayController::BindSurfaceToController(
+    scoped_ptr<DriSurface> surface) {
+  CHECK(surface);
+  // Register the buffers.
+  for (size_t i = 0; i < arraysize(surface->bitmaps_); ++i) {
+    uint32_t fb_id;
+    if (!drm_->AddFramebuffer(
+            mode_,
+            surface->bitmaps_[i]->GetColorDepth(),
+            surface->bitmaps_[i]->canvas()->imageInfo().bytesPerPixel() << 3,
+            surface->bitmaps_[i]->stride(),
+            surface->bitmaps_[i]->handle(),
+            &fb_id)) {
+      DLOG(ERROR) << "Failed to register framebuffer: " << strerror(errno);
+      return false;
+    }
+    surface->bitmaps_[i]->set_framebuffer(fb_id);
+  }
+
+  if (!drm_->SetCrtc(crtc_id_,
+                     surface->GetFramebufferId(),
+                     &connector_id_,
+                     &mode_)) {
+    LOG(ERROR) << "Failed to modeset: crtc=" << crtc_id_ << " connector="
+               << connector_id_ << " framebuffer_id="
+               << surface->GetFramebufferId();
+    return false;
+  }
+
+  surface_.reset(surface.release());
+  return true;
+}
+
+bool HardwareDisplayController::SchedulePageFlip() {
+  CHECK(surface_);
+
+  if (!drm_->PageFlip(crtc_id_,
+                      surface_->GetFramebufferId(),
+                      this)) {
+    LOG(ERROR) << "Cannot page flip: " << strerror(errno);
+    return false;
+  }
+
+  return true;
+}
+
+void HardwareDisplayController::OnPageFlipEvent(unsigned int frame,
+                                                unsigned int seconds,
+                                                unsigned int useconds) {
+  time_of_last_flip_ =
+      static_cast<uint64_t>(seconds) * base::Time::kMicrosecondsPerSecond +
+      useconds;
+
+  surface_->SwapBuffers();
+}
+
+bool HardwareDisplayController::SetCursor(DriSurface* surface) {
+  bool ret = drm_->SetCursor(crtc_id_,
+                         surface->GetHandle(),
+                         surface->size().width(),
+                         surface->size().height());
+  surface->SwapBuffers();
+  return ret;
+}
+
+bool HardwareDisplayController::UnsetCursor() {
+  return drm_->SetCursor(crtc_id_, 0, 0, 0);
+}
+
+bool HardwareDisplayController::MoveCursor(const gfx::Point& location) {
+  return drm_->MoveCursor(crtc_id_, location.x(), location.y());
+}
+
+}  // namespace ui
diff --git a/ui/ozone/platform/dri/hardware_display_controller.h b/ui/ozone/platform/dri/hardware_display_controller.h
new file mode 100644
index 0000000..af7dd86
--- /dev/null
+++ b/ui/ozone/platform/dri/hardware_display_controller.h
@@ -0,0 +1,163 @@
+// 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.
+
+#ifndef UI_OZONE_PLATFORM_DRI_HARDWARE_DISPLAY_CONTROLLER_H_
+#define UI_OZONE_PLATFORM_DRI_HARDWARE_DISPLAY_CONTROLLER_H_
+
+#include <stddef.h>
+#include <stdint.h>
+#include <xf86drmMode.h>
+#include <vector>
+
+#include "base/basictypes.h"
+#include "base/memory/scoped_ptr.h"
+#include "ui/ozone/ozone_export.h"
+#include "ui/ozone/platform/dri/dri_wrapper.h"
+
+namespace gfx {
+class Point;
+}
+
+namespace ui {
+
+class DriSurface;
+
+// The HDCOz will handle modesettings and scannout operations for hardware
+// devices.
+//
+// In the DRM world there are 3 components that need to be paired up to be able
+// to display an image to the monitor: CRTC (cathode ray tube controller),
+// encoder and connector. The CRTC determines which framebuffer to read, when
+// to scanout and where to scanout. Encoders converts the stream from the CRTC
+// to the appropriate format for the connector. The connector is the physical
+// connection that monitors connect to.
+//
+// There is no 1:1:1 pairing for these components. It is possible for an encoder
+// to be compatible to multiple CRTCs and each connector can be used with
+// multiple encoders. In addition, it is possible to use one CRTC with multiple
+// connectors such that we can display the same image on multiple monitors.
+//
+// For example, the following configuration shows 2 different screens being
+// initialized separately.
+// -------------      -------------
+// | Connector |      | Connector |
+// |   HDMI    |      |    VGA    |
+// -------------      -------------
+//       ^                  ^
+//       |                  |
+// -------------      -------------
+// |  Encoder1  |     |  Encoder2 |
+// -------------      -------------
+//       ^                  ^
+//       |                  |
+// -------------      -------------
+// |   CRTC1   |      |   CRTC2   |
+// -------------      -------------
+//
+// In the following configuration 2 different screens are associated with the
+// same CRTC, so on scanout the same framebuffer will be displayed on both
+// monitors.
+// -------------      -------------
+// | Connector |      | Connector |
+// |   HDMI    |      |    VGA    |
+// -------------      -------------
+//       ^                  ^
+//       |                  |
+// -------------      -------------
+// |  Encoder1  |     |  Encoder2 |
+// -------------      -------------
+//       ^                  ^
+//       |                  |
+//      ----------------------
+//      |        CRTC1       |
+//      ----------------------
+//
+// Note that it is possible to have more connectors than CRTCs which means that
+// only a subset of connectors can be active independently, showing different
+// framebuffers. Though, in this case, it would be possible to have all
+// connectors active if some use the same CRTC to mirror the display.
+//
+// TODO(dnicoara) Need to have a way to detect events (such as monitor
+// connected or disconnected).
+class OZONE_EXPORT HardwareDisplayController {
+ public:
+  HardwareDisplayController(DriWrapper* drm,
+                            uint32_t connector_id,
+                            uint32_t crtc_id,
+                            drmModeModeInfo mode);
+
+  ~HardwareDisplayController();
+
+  // Associate the HDCO with a surface implementation and initialize it.
+  bool BindSurfaceToController(scoped_ptr<DriSurface> surface);
+
+  // Schedules the |surface_|'s framebuffer to be displayed on the next vsync
+  // event. The event will be posted on the graphics card file descriptor |fd_|
+  // and it can be read and processed by |drmHandleEvent|. That function can
+  // define the callback for the page flip event. A generic data argument will
+  // be presented to the callback. We use that argument to pass in the HDCO
+  // object the event belongs to.
+  //
+  // Between this call and the callback, the framebuffer used in this call
+  // should not be modified in any way as it would cause screen tearing if the
+  // hardware performed the flip. Note that the frontbuffer should also not
+  // be modified as it could still be displayed.
+  //
+  // Note that this function does not block. Also, this function should not be
+  // called again before the page flip occurrs.
+  //
+  // Returns true if the page flip was successfully registered, false otherwise.
+  bool SchedulePageFlip();
+
+  // Called when the page flip event occurred. The event is provided by the
+  // kernel when a VBlank event finished. This allows the controller to
+  // update internal state and propagate the update to the surface.
+  // The tuple (seconds, useconds) represents the event timestamp. |seconds|
+  // represents the number of seconds while |useconds| represents the
+  // microseconds (< 1 second) in the timestamp.
+  void OnPageFlipEvent(unsigned int frame,
+                       unsigned int seconds,
+                       unsigned int useconds);
+
+  // Set the hardware cursor to show the contents of |surface|.
+  bool SetCursor(DriSurface* surface);
+
+  bool UnsetCursor();
+
+  // Moves the hardware cursor to |location|.
+  bool MoveCursor(const gfx::Point& location);
+
+  int get_fd() const { return drm_->get_fd(); };
+
+  const drmModeModeInfo& get_mode() const { return mode_; };
+
+  DriSurface* get_surface() const { return surface_.get(); };
+
+  uint64_t get_time_of_last_flip() const {
+    return time_of_last_flip_;
+  };
+
+ private:
+  // Object containing the connection to the graphics device and wraps the API
+  // calls to control it.
+  DriWrapper* drm_;
+
+  // TODO(dnicoara) Need to allow a CRTC to have multiple connectors.
+  uint32_t connector_id_;
+
+  uint32_t crtc_id_;
+
+  // TODO(dnicoara) Need to store all the modes.
+  drmModeModeInfo mode_;
+
+  scoped_ptr<DriSurface> surface_;
+
+  uint64_t time_of_last_flip_;
+
+  DISALLOW_COPY_AND_ASSIGN(HardwareDisplayController);
+};
+
+}  // namespace ui
+
+#endif  // UI_OZONE_PLATFORM_DRI_HARDWARE_DISPLAY_CONTROLLER_H_
diff --git a/ui/ozone/platform/dri/hardware_display_controller_unittest.cc b/ui/ozone/platform/dri/hardware_display_controller_unittest.cc
new file mode 100644
index 0000000..1beb85b
--- /dev/null
+++ b/ui/ozone/platform/dri/hardware_display_controller_unittest.cc
@@ -0,0 +1,289 @@
+// 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.
+
+#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/skia/include/core/SkCanvas.h"
+#include "ui/ozone/platform/dri/dri_buffer.h"
+#include "ui/ozone/platform/dri/dri_surface.h"
+#include "ui/ozone/platform/dri/dri_wrapper.h"
+#include "ui/ozone/platform/dri/hardware_display_controller.h"
+
+namespace {
+
+// Create a basic mode for a 6x4 screen.
+const drmModeModeInfo kDefaultMode =
+    {0, 6, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, {'\0'}};
+
+const gfx::Size kDefaultModeSize(kDefaultMode.hdisplay, kDefaultMode.vdisplay);
+
+// Mock file descriptor ID.
+const int kFd = 3;
+
+// Mock connector ID.
+const uint32_t kConnectorId = 1;
+
+// Mock CRTC ID.
+const uint32_t kCrtcId = 1;
+
+// The real DriWrapper makes actual DRM calls which we can't use in unit tests.
+class MockDriWrapper : public ui::DriWrapper {
+ public:
+  MockDriWrapper(int fd) : DriWrapper(""),
+                                get_crtc_call_count_(0),
+                                free_crtc_call_count_(0),
+                                restore_crtc_call_count_(0),
+                                add_framebuffer_call_count_(0),
+                                remove_framebuffer_call_count_(0),
+                                set_crtc_expectation_(true),
+                                add_framebuffer_expectation_(true),
+                                page_flip_expectation_(true) {
+    fd_ = fd;
+  }
+
+  virtual ~MockDriWrapper() { fd_ = -1; }
+
+  virtual drmModeCrtc* GetCrtc(uint32_t crtc_id) OVERRIDE {
+    get_crtc_call_count_++;
+    return new drmModeCrtc;
+  }
+
+  virtual void FreeCrtc(drmModeCrtc* crtc) OVERRIDE {
+    free_crtc_call_count_++;
+    delete crtc;
+  }
+
+  virtual bool SetCrtc(uint32_t crtc_id,
+                       uint32_t framebuffer,
+                       uint32_t* connectors,
+                       drmModeModeInfo* mode) OVERRIDE {
+    return set_crtc_expectation_;
+  }
+
+  virtual bool SetCrtc(drmModeCrtc* crtc, uint32_t* connectors) OVERRIDE {
+    restore_crtc_call_count_++;
+    return true;
+  }
+
+  virtual bool AddFramebuffer(const drmModeModeInfo& mode,
+                              uint8_t depth,
+                              uint8_t bpp,
+                              uint32_t stride,
+                              uint32_t handle,
+                              uint32_t* framebuffer) OVERRIDE {
+    add_framebuffer_call_count_++;
+    return add_framebuffer_expectation_;
+  }
+
+  virtual bool RemoveFramebuffer(uint32_t framebuffer) OVERRIDE {
+    remove_framebuffer_call_count_++;
+    return true;
+  }
+
+  virtual bool PageFlip(uint32_t crtc_id,
+                        uint32_t framebuffer,
+                        void* data) OVERRIDE {
+    return page_flip_expectation_;
+  }
+
+  virtual bool SetProperty(uint32_t connector_id,
+                           uint32_t property_id,
+                           uint64_t value) OVERRIDE { return true; }
+
+  virtual void FreeProperty(drmModePropertyRes* prop) OVERRIDE { delete prop; }
+
+  virtual drmModePropertyBlobRes* GetPropertyBlob(drmModeConnector* connector,
+                                                  const char* name) OVERRIDE {
+    return new drmModePropertyBlobRes;
+  }
+
+  virtual void FreePropertyBlob(drmModePropertyBlobRes* blob) OVERRIDE {
+    delete blob;
+  }
+
+  virtual bool SetCursor(uint32_t crtc_id,
+                         uint32_t handle,
+                         uint32_t width,
+                         uint32_t height) OVERRIDE { return true; }
+
+  virtual bool MoveCursor(uint32_t crtc_id, int x, int y) OVERRIDE {
+    return true;
+  }
+
+  int get_get_crtc_call_count() const {
+    return get_crtc_call_count_;
+  }
+
+  int get_free_crtc_call_count() const {
+    return free_crtc_call_count_;
+  }
+
+  int get_restore_crtc_call_count() const {
+    return restore_crtc_call_count_;
+  }
+
+  int get_add_framebuffer_call_count() const {
+    return add_framebuffer_call_count_;
+  }
+
+  int get_remove_framebuffer_call_count() const {
+    return remove_framebuffer_call_count_;
+  }
+
+  void set_set_crtc_expectation(bool state) {
+    set_crtc_expectation_ = state;
+  }
+
+  void set_add_framebuffer_expectation(bool state) {
+    add_framebuffer_expectation_ = state;
+  }
+
+  void set_page_flip_expectation(bool state) {
+    page_flip_expectation_ = state;
+  }
+
+ private:
+  int get_crtc_call_count_;
+  int free_crtc_call_count_;
+  int restore_crtc_call_count_;
+  int add_framebuffer_call_count_;
+  int remove_framebuffer_call_count_;
+
+  bool set_crtc_expectation_;
+  bool add_framebuffer_expectation_;
+  bool page_flip_expectation_;
+
+  DISALLOW_COPY_AND_ASSIGN(MockDriWrapper);
+};
+
+class MockDriBuffer : public ui::DriBuffer {
+ public:
+  MockDriBuffer(ui::DriWrapper* dri) : DriBuffer(dri) {}
+  virtual ~MockDriBuffer() {
+    surface_.clear();
+  }
+
+  virtual bool Initialize(const SkImageInfo& info) OVERRIDE {
+    surface_ = skia::AdoptRef(SkSurface::NewRaster(info));
+    surface_->getCanvas()->clear(SK_ColorBLACK);
+
+    return true;
+  }
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(MockDriBuffer);
+};
+
+class MockDriSurface : public ui::DriSurface {
+ public:
+  MockDriSurface(ui::DriWrapper* dri, const gfx::Size& size)
+      : DriSurface(dri, size), dri_(dri) {}
+  virtual ~MockDriSurface() {}
+
+ private:
+  virtual ui::DriBuffer* CreateBuffer() OVERRIDE {
+    return new MockDriBuffer(dri_);
+  }
+
+  ui::DriWrapper* dri_;
+
+  DISALLOW_COPY_AND_ASSIGN(MockDriSurface);
+};
+
+}  // namespace
+
+class HardwareDisplayControllerTest : public testing::Test {
+ public:
+  HardwareDisplayControllerTest() {}
+  virtual ~HardwareDisplayControllerTest() {}
+
+  virtual void SetUp() OVERRIDE;
+  virtual void TearDown() OVERRIDE;
+ protected:
+  scoped_ptr<ui::HardwareDisplayController> controller_;
+  scoped_ptr<MockDriWrapper> drm_;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(HardwareDisplayControllerTest);
+};
+
+void HardwareDisplayControllerTest::SetUp() {
+  drm_.reset(new MockDriWrapper(kFd));
+  controller_.reset(new ui::HardwareDisplayController(
+      drm_.get(), kConnectorId, kCrtcId, kDefaultMode));
+}
+
+void HardwareDisplayControllerTest::TearDown() {
+  controller_.reset();
+  drm_.reset();
+}
+
+TEST_F(HardwareDisplayControllerTest, CheckStateAfterSurfaceIsBound) {
+  scoped_ptr<ui::DriSurface> surface(
+      new MockDriSurface(drm_.get(), kDefaultModeSize));
+
+  EXPECT_TRUE(surface->Initialize());
+  EXPECT_TRUE(controller_->BindSurfaceToController(surface.Pass()));
+
+  EXPECT_EQ(2, drm_->get_add_framebuffer_call_count());
+  EXPECT_TRUE(controller_->get_surface() != NULL);
+}
+
+TEST_F(HardwareDisplayControllerTest, CheckStateIfBindingFails) {
+  drm_->set_add_framebuffer_expectation(false);
+
+  scoped_ptr<ui::DriSurface> surface(
+      new MockDriSurface(drm_.get(), kDefaultModeSize));
+
+  EXPECT_TRUE(surface->Initialize());
+  EXPECT_FALSE(controller_->BindSurfaceToController(surface.Pass()));
+
+  EXPECT_EQ(1, drm_->get_add_framebuffer_call_count());
+  EXPECT_EQ(NULL, controller_->get_surface());
+}
+
+TEST_F(HardwareDisplayControllerTest, CheckStateAfterPageFlip) {
+  scoped_ptr<ui::DriSurface> surface(
+      new MockDriSurface(drm_.get(), kDefaultModeSize));
+
+  EXPECT_TRUE(surface->Initialize());
+  EXPECT_TRUE(controller_->BindSurfaceToController(surface.Pass()));
+
+  EXPECT_TRUE(controller_->SchedulePageFlip());
+  EXPECT_TRUE(controller_->get_surface() != NULL);
+}
+
+TEST_F(HardwareDisplayControllerTest, CheckStateIfModesetFails) {
+  drm_->set_set_crtc_expectation(false);
+
+  scoped_ptr<ui::DriSurface> surface(
+      new MockDriSurface(drm_.get(), kDefaultModeSize));
+
+  EXPECT_TRUE(surface->Initialize());
+  EXPECT_FALSE(controller_->BindSurfaceToController(surface.Pass()));
+  EXPECT_EQ(NULL, controller_->get_surface());
+}
+
+TEST_F(HardwareDisplayControllerTest, CheckStateIfPageFlipFails) {
+  drm_->set_page_flip_expectation(false);
+
+  scoped_ptr<ui::DriSurface> surface(
+      new MockDriSurface(drm_.get(), kDefaultModeSize));
+
+  EXPECT_TRUE(surface->Initialize());
+  EXPECT_TRUE(controller_->BindSurfaceToController(surface.Pass()));
+  EXPECT_FALSE(controller_->SchedulePageFlip());
+}
+
+TEST_F(HardwareDisplayControllerTest, CheckProperDestruction) {
+  scoped_ptr<ui::DriSurface> surface(
+      new MockDriSurface(drm_.get(), kDefaultModeSize));
+
+  EXPECT_TRUE(surface->Initialize());
+  EXPECT_TRUE(controller_->BindSurfaceToController(surface.Pass()));
+  EXPECT_TRUE(controller_->get_surface() != NULL);
+
+  controller_.reset();
+
+  EXPECT_EQ(2, drm_->get_remove_framebuffer_call_count());
+}
diff --git a/ui/ozone/platform/dri/ozone_platform_dri.cc b/ui/ozone/platform/dri/ozone_platform_dri.cc
index 8175a1d..bd0561f 100644
--- a/ui/ozone/platform/dri/ozone_platform_dri.cc
+++ b/ui/ozone/platform/dri/ozone_platform_dri.cc
@@ -5,45 +5,65 @@
 #include "ui/ozone/platform/dri/ozone_platform_dri.h"
 
 #include "ui/events/ozone/evdev/cursor_delegate_evdev.h"
+#include "ui/events/ozone/evdev/event_factory_evdev.h"
+#include "ui/ozone/ime/input_method_context_factory_ozone.h"
 #include "ui/ozone/ozone_platform.h"
+#include "ui/ozone/platform/dri/cursor_factory_evdev_dri.h"
+#include "ui/ozone/platform/dri/dri_surface_factory.h"
 
 #if defined(OS_CHROMEOS)
-#include "ui/ozone/common/chromeos/native_display_delegate_ozone.h"
+#include "ui/ozone/platform/dri/chromeos/native_display_delegate_dri.h"
 #endif
 
 namespace ui {
 
-OzonePlatformDri::OzonePlatformDri()
-    : cursor_factory_ozone_(&surface_factory_ozone_),
-      event_factory_ozone_(&cursor_factory_ozone_) {}
+namespace {
 
-OzonePlatformDri::~OzonePlatformDri() {}
+// OzonePlatform for Linux DRI (Direct Rendering Infrastructure)
+//
+// This platform is Linux without any display server (no X, wayland, or
+// anything). This means chrome alone owns the display and input devices.
+class OzonePlatformDri : public OzonePlatform {
+ public:
+  OzonePlatformDri()
+      : cursor_factory_ozone_(&surface_factory_ozone_),
+        event_factory_ozone_(&cursor_factory_ozone_) {}
+  virtual ~OzonePlatformDri() {}
 
-gfx::SurfaceFactoryOzone* OzonePlatformDri::GetSurfaceFactoryOzone() {
-  return &surface_factory_ozone_;
-}
-
-ui::EventFactoryOzone* OzonePlatformDri::GetEventFactoryOzone() {
-  return &event_factory_ozone_;
-}
-
-ui::InputMethodContextFactoryOzone*
-OzonePlatformDri::GetInputMethodContextFactoryOzone() {
-  return &input_method_context_factory_ozone_;
-}
-
-ui::CursorFactoryOzone* OzonePlatformDri::GetCursorFactoryOzone() {
-  return &cursor_factory_ozone_;
-}
-
+  // OzonePlatform:
+  virtual gfx::SurfaceFactoryOzone* GetSurfaceFactoryOzone() OVERRIDE {
+    return &surface_factory_ozone_;
+  }
+  virtual ui::EventFactoryOzone* GetEventFactoryOzone() OVERRIDE {
+    return &event_factory_ozone_;
+  }
+  virtual ui::InputMethodContextFactoryOzone*
+  GetInputMethodContextFactoryOzone() OVERRIDE {
+    return &input_method_context_factory_ozone_;
+  }
+  virtual ui::CursorFactoryOzone* GetCursorFactoryOzone() OVERRIDE {
+    return &cursor_factory_ozone_;
+  }
 #if defined(OS_CHROMEOS)
-scoped_ptr<ui::NativeDisplayDelegate>
-OzonePlatformDri::CreateNativeDisplayDelegate() {
-  return scoped_ptr<ui::NativeDisplayDelegate>(
-      new NativeDisplayDelegateOzone());
-}
+  virtual scoped_ptr<ui::NativeDisplayDelegate> CreateNativeDisplayDelegate()
+      OVERRIDE {
+    return scoped_ptr<ui::NativeDisplayDelegate>(
+        new NativeDisplayDelegateDri(&surface_factory_ozone_));
+  }
 #endif
 
+ private:
+  ui::DriSurfaceFactory surface_factory_ozone_;
+  ui::CursorFactoryEvdevDri cursor_factory_ozone_;
+  ui::EventFactoryEvdev event_factory_ozone_;
+  // This creates a minimal input context.
+  ui::InputMethodContextFactoryOzone input_method_context_factory_ozone_;
+
+  DISALLOW_COPY_AND_ASSIGN(OzonePlatformDri);
+};
+
+}  // namespace
+
 OzonePlatform* CreateOzonePlatformDri() { return new OzonePlatformDri; }
 
 }  // namespace ui
diff --git a/ui/ozone/platform/dri/ozone_platform_dri.h b/ui/ozone/platform/dri/ozone_platform_dri.h
index dff706b..a63a054 100644
--- a/ui/ozone/platform/dri/ozone_platform_dri.h
+++ b/ui/ozone/platform/dri/ozone_platform_dri.h
@@ -5,41 +5,9 @@
 #ifndef UI_OZONE_PLATFORM_DRI_OZONE_PLATFORM_DRI_H_
 #define UI_OZONE_PLATFORM_DRI_OZONE_PLATFORM_DRI_H_
 
-#include "ui/events/ozone/evdev/event_factory_evdev.h"
-#include "ui/gfx/ozone/dri/dri_surface_factory.h"
-#include "ui/ozone/ozone_platform.h"
-#include "ui/ozone/platform/dri/cursor_factory_evdev_dri.h"
-
 namespace ui {
 
-// OzonePlatform for Linux DRI (Direct Rendering Infrastructure)
-//
-// This platform is Linux without any display server (no X, wayland, or
-// anything). This means chrome alone owns the display and input devices.
-class OzonePlatformDri : public OzonePlatform {
- public:
-  OzonePlatformDri();
-  virtual ~OzonePlatformDri();
-
-  virtual gfx::SurfaceFactoryOzone* GetSurfaceFactoryOzone() OVERRIDE;
-  virtual ui::EventFactoryOzone* GetEventFactoryOzone() OVERRIDE;
-  virtual ui::InputMethodContextFactoryOzone*
-      GetInputMethodContextFactoryOzone() OVERRIDE;
-  virtual ui::CursorFactoryOzone* GetCursorFactoryOzone() OVERRIDE;
-#if defined(OS_CHROMEOS)
-  virtual scoped_ptr<ui::NativeDisplayDelegate>
-      CreateNativeDisplayDelegate() OVERRIDE;
-#endif
-
- private:
-  gfx::DriSurfaceFactory surface_factory_ozone_;
-  ui::CursorFactoryEvdevDri cursor_factory_ozone_;
-  ui::EventFactoryEvdev event_factory_ozone_;
-  // This creates a minimal input context.
-  ui::InputMethodContextFactoryOzone input_method_context_factory_ozone_;
-
-  DISALLOW_COPY_AND_ASSIGN(OzonePlatformDri);
-};
+class OzonePlatform;
 
 // Constructor hook for use in ozone_platform_list.cc
 OzonePlatform* CreateOzonePlatformDri();
diff --git a/ui/ozone/platform/test/ozone_platform_test.cc b/ui/ozone/platform/test/ozone_platform_test.cc
index 2a84895..da94ba4 100644
--- a/ui/ozone/platform/test/ozone_platform_test.cc
+++ b/ui/ozone/platform/test/ozone_platform_test.cc
@@ -6,6 +6,10 @@
 
 #include "base/command_line.h"
 #include "base/files/file_path.h"
+#include "ui/base/cursor/ozone/cursor_factory_ozone.h"
+#include "ui/events/ozone/evdev/event_factory_evdev.h"
+#include "ui/gfx/ozone/impl/file_surface_factory.h"
+#include "ui/ozone/ime/input_method_context_factory_ozone.h"
 #include "ui/ozone/ozone_platform.h"
 #include "ui/ozone/ozone_switches.h"
 
@@ -15,37 +19,51 @@
 
 namespace ui {
 
-OzonePlatformTest::OzonePlatformTest(const base::FilePath& dump_file)
-    : surface_factory_ozone_(dump_file) {}
+namespace {
 
-OzonePlatformTest::~OzonePlatformTest() {}
+// OzonePlatform for testing
+//
+// This platform dumps images to a file for testing purposes.
+class OzonePlatformTest : public OzonePlatform {
+ public:
+  OzonePlatformTest(const base::FilePath& dump_file)
+      : surface_factory_ozone_(dump_file) {}
+  virtual ~OzonePlatformTest() {}
 
-gfx::SurfaceFactoryOzone* OzonePlatformTest::GetSurfaceFactoryOzone() {
-  return &surface_factory_ozone_;
-}
-
-ui::EventFactoryOzone* OzonePlatformTest::GetEventFactoryOzone() {
-  return &event_factory_ozone_;
-}
-
-ui::InputMethodContextFactoryOzone*
-OzonePlatformTest::GetInputMethodContextFactoryOzone() {
-  return &input_method_context_factory_ozone_;
-}
-
-ui::CursorFactoryOzone* OzonePlatformTest::GetCursorFactoryOzone() {
-  return &cursor_factory_ozone_;
-}
+  // OzonePlatform:
+  virtual gfx::SurfaceFactoryOzone* GetSurfaceFactoryOzone() OVERRIDE {
+    return &surface_factory_ozone_;
+  }
+  virtual ui::EventFactoryOzone* GetEventFactoryOzone() OVERRIDE {
+    return &event_factory_ozone_;
+  }
+  virtual ui::InputMethodContextFactoryOzone*
+  GetInputMethodContextFactoryOzone() OVERRIDE {
+    return &input_method_context_factory_ozone_;
+  }
+  virtual ui::CursorFactoryOzone* GetCursorFactoryOzone() OVERRIDE {
+    return &cursor_factory_ozone_;
+  }
 
 #if defined(OS_CHROMEOS)
-scoped_ptr<ui::NativeDisplayDelegate>
-OzonePlatformTest::CreateNativeDisplayDelegate() {
-  return scoped_ptr<ui::NativeDisplayDelegate>(
-      new NativeDisplayDelegateOzone());
-  return scoped_ptr<ui::NativeDisplayDelegate>();
-}
+  virtual scoped_ptr<ui::NativeDisplayDelegate> CreateNativeDisplayDelegate()
+      OVERRIDE {
+    return scoped_ptr<ui::NativeDisplayDelegate>(
+        new NativeDisplayDelegateOzone());
+  }
 #endif
 
+ private:
+  gfx::FileSurfaceFactory surface_factory_ozone_;
+  ui::EventFactoryEvdev event_factory_ozone_;
+  ui::InputMethodContextFactoryOzone input_method_context_factory_ozone_;
+  ui::CursorFactoryOzone cursor_factory_ozone_;
+
+  DISALLOW_COPY_AND_ASSIGN(OzonePlatformTest);
+};
+
+}  // namespace
+
 OzonePlatform* CreateOzonePlatformTest() {
   CommandLine* cmd = CommandLine::ForCurrentProcess();
   base::FilePath location = base::FilePath("/dev/null");
diff --git a/ui/ozone/platform/test/ozone_platform_test.h b/ui/ozone/platform/test/ozone_platform_test.h
index 1f6a964..fb25fd6 100644
--- a/ui/ozone/platform/test/ozone_platform_test.h
+++ b/ui/ozone/platform/test/ozone_platform_test.h
@@ -5,40 +5,9 @@
 #ifndef UI_OZONE_PLATFORM_TEST_OZONE_PLATFORM_TEST_H_
 #define UI_OZONE_PLATFORM_TEST_OZONE_PLATFORM_TEST_H_
 
-#include "base/files/file_path.h"
-#include "ui/base/cursor/ozone/cursor_factory_ozone.h"
-#include "ui/events/ozone/evdev/event_factory_evdev.h"
-#include "ui/gfx/ozone/impl/file_surface_factory.h"
-#include "ui/ozone/ozone_platform.h"
-
 namespace ui {
 
-// OzonePlatform for testing
-//
-// This platform dumps images to a file for testing purposes.
-class OzonePlatformTest : public OzonePlatform {
- public:
-  OzonePlatformTest(const base::FilePath& dump_file);
-  virtual ~OzonePlatformTest();
-
-  virtual gfx::SurfaceFactoryOzone* GetSurfaceFactoryOzone() OVERRIDE;
-  virtual ui::EventFactoryOzone* GetEventFactoryOzone() OVERRIDE;
-  virtual ui::InputMethodContextFactoryOzone*
-      GetInputMethodContextFactoryOzone() OVERRIDE;
-  virtual ui::CursorFactoryOzone* GetCursorFactoryOzone() OVERRIDE;
-#if defined(OS_CHROMEOS)
-  virtual scoped_ptr<ui::NativeDisplayDelegate>
-      CreateNativeDisplayDelegate() OVERRIDE;
-#endif
-
- private:
-  gfx::FileSurfaceFactory surface_factory_ozone_;
-  ui::EventFactoryEvdev event_factory_ozone_;
-  ui::InputMethodContextFactoryOzone input_method_context_factory_ozone_;
-  ui::CursorFactoryOzone cursor_factory_ozone_;
-
-  DISALLOW_COPY_AND_ASSIGN(OzonePlatformTest);
-};
+class OzonePlatform;
 
 // Constructor hook for use in ozone_platform_list.cc
 OzonePlatform* CreateOzonePlatformTest();
diff --git a/ui/resources/BUILD.gn b/ui/resources/BUILD.gn
new file mode 100644
index 0000000..30e62ba
--- /dev/null
+++ b/ui/resources/BUILD.gn
@@ -0,0 +1,10 @@
+# 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("//tools/grit/grit_rule.gni")
+
+grit("resources") {
+  output_name = "ui_resources"
+  source = "ui_resources.grd"
+}
diff --git a/ui/resources/ui_resources.grd b/ui/resources/ui_resources.grd
index 260f05c..6cd4ed9 100644
--- a/ui/resources/ui_resources.grd
+++ b/ui/resources/ui_resources.grd
@@ -259,7 +259,7 @@
         <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_F_H_TOP_RIGHT" file="common/combobox_button_top_right_focused_hover.png" />
         <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_F_P_TOP_RIGHT" file="common/combobox_button_top_right_focused_pressed.png" />
       </if>
-      <if expr="toolkit_uses_gtk or toolkit_views">
+      <if expr="toolkit_views">
         <structure type="chrome_scaled_image" name="IDR_CONTENT_BOTTOM_CENTER" file="content_bottom_center.png" />
         <structure type="chrome_scaled_image" name="IDR_CONTENT_BOTTOM_LEFT_CORNER" file="content_bottom_left_corner.png" />
         <structure type="chrome_scaled_image" name="IDR_CONTENT_BOTTOM_RIGHT_CORNER" file="content_bottom_right_corner.png" />
@@ -484,7 +484,7 @@
         <structure type="chrome_scaled_image" name="IDR_SCROLLBAR_THUMB_BASE_PRESSED_TOP_LEFT" file="common/aura_scrollbar_thumb_base_pressed_top_left.png" />
         <structure type="chrome_scaled_image" name="IDR_SCROLLBAR_THUMB_BASE_PRESSED_TOP_RIGHT" file="common/aura_scrollbar_thumb_base_pressed_top_right.png" />
       </if>
-      <if expr="toolkit_uses_gtk or toolkit_views">
+      <if expr="toolkit_views">
         <structure type="chrome_scaled_image" name="IDR_TEXTBUTTON_HOVER_BOTTOM" file="common/textbutton_hover_bottom.png" />
         <structure type="chrome_scaled_image" name="IDR_TEXTBUTTON_HOVER_BOTTOM_LEFT" file="common/textbutton_hover_bottom_left.png" />
         <structure type="chrome_scaled_image" name="IDR_TEXTBUTTON_HOVER_BOTTOM_RIGHT" file="common/textbutton_hover_bottom_right.png" />
@@ -524,7 +524,7 @@
         <structure type="chrome_scaled_image" name="IDR_TRAY_EMPTY" file="mac/notification_tray_empty.png"/>
         <structure type="chrome_scaled_image" name="IDR_TRAY_EMPTY_PRESSED" file="mac/notification_tray_empty_pressed.png"/>
       </if>
-      <if expr="toolkit_uses_gtk or toolkit_views">
+      <if expr="toolkit_views">
         <structure type="chrome_scaled_image" name="IDR_WINDOW_BOTTOM_CENTER" file="common/window_bottom_center.png" />
         <structure type="chrome_scaled_image" name="IDR_WINDOW_BOTTOM_LEFT_CORNER" file="common/window_bottom_left_corner.png" />
         <structure type="chrome_scaled_image" name="IDR_WINDOW_BOTTOM_RIGHT_CORNER" file="common/window_bottom_right_corner.png" />
diff --git a/ui/shell_dialogs/shell_dialogs.target.darwin-arm.mk b/ui/shell_dialogs/shell_dialogs.target.darwin-arm.mk
index 6f79920..3fc1b31 100644
--- a/ui/shell_dialogs/shell_dialogs.target.darwin-arm.mk
+++ b/ui/shell_dialogs/shell_dialogs.target.darwin-arm.mk
@@ -102,12 +102,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -226,12 +229,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -307,7 +313,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/shell_dialogs/shell_dialogs.target.darwin-mips.mk b/ui/shell_dialogs/shell_dialogs.target.darwin-mips.mk
index fbc9133..1f9c408 100644
--- a/ui/shell_dialogs/shell_dialogs.target.darwin-mips.mk
+++ b/ui/shell_dialogs/shell_dialogs.target.darwin-mips.mk
@@ -101,12 +101,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -224,12 +227,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -303,7 +309,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/shell_dialogs/shell_dialogs.target.darwin-x86.mk b/ui/shell_dialogs/shell_dialogs.target.darwin-x86.mk
index fa6bfaf..bcd87f6 100644
--- a/ui/shell_dialogs/shell_dialogs.target.darwin-x86.mk
+++ b/ui/shell_dialogs/shell_dialogs.target.darwin-x86.mk
@@ -103,12 +103,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -226,12 +229,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -303,7 +309,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/shell_dialogs/shell_dialogs.target.darwin-x86_64.mk b/ui/shell_dialogs/shell_dialogs.target.darwin-x86_64.mk
index 61d7198..38e6267 100644
--- a/ui/shell_dialogs/shell_dialogs.target.darwin-x86_64.mk
+++ b/ui/shell_dialogs/shell_dialogs.target.darwin-x86_64.mk
@@ -103,12 +103,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -227,12 +230,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -305,7 +311,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/shell_dialogs/shell_dialogs.target.linux-arm.mk b/ui/shell_dialogs/shell_dialogs.target.linux-arm.mk
index 6f79920..3fc1b31 100644
--- a/ui/shell_dialogs/shell_dialogs.target.linux-arm.mk
+++ b/ui/shell_dialogs/shell_dialogs.target.linux-arm.mk
@@ -102,12 +102,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -226,12 +229,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -307,7 +313,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/shell_dialogs/shell_dialogs.target.linux-mips.mk b/ui/shell_dialogs/shell_dialogs.target.linux-mips.mk
index fbc9133..1f9c408 100644
--- a/ui/shell_dialogs/shell_dialogs.target.linux-mips.mk
+++ b/ui/shell_dialogs/shell_dialogs.target.linux-mips.mk
@@ -101,12 +101,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -224,12 +227,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -303,7 +309,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/shell_dialogs/shell_dialogs.target.linux-x86.mk b/ui/shell_dialogs/shell_dialogs.target.linux-x86.mk
index fa6bfaf..bcd87f6 100644
--- a/ui/shell_dialogs/shell_dialogs.target.linux-x86.mk
+++ b/ui/shell_dialogs/shell_dialogs.target.linux-x86.mk
@@ -103,12 +103,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -226,12 +229,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -303,7 +309,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/shell_dialogs/shell_dialogs.target.linux-x86_64.mk b/ui/shell_dialogs/shell_dialogs.target.linux-x86_64.mk
index 61d7198..38e6267 100644
--- a/ui/shell_dialogs/shell_dialogs.target.linux-x86_64.mk
+++ b/ui/shell_dialogs/shell_dialogs.target.linux-x86_64.mk
@@ -103,12 +103,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -227,12 +230,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -305,7 +311,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/snapshot/snapshot.target.darwin-arm.mk b/ui/snapshot/snapshot.target.darwin-arm.mk
index 6d81bf2..df5313c 100644
--- a/ui/snapshot/snapshot.target.darwin-arm.mk
+++ b/ui/snapshot/snapshot.target.darwin-arm.mk
@@ -93,12 +93,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -215,12 +218,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -294,7 +300,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/snapshot/snapshot.target.darwin-mips.mk b/ui/snapshot/snapshot.target.darwin-mips.mk
index add41c0..6b0bd0d 100644
--- a/ui/snapshot/snapshot.target.darwin-mips.mk
+++ b/ui/snapshot/snapshot.target.darwin-mips.mk
@@ -92,12 +92,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -213,12 +216,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -290,7 +296,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/snapshot/snapshot.target.darwin-x86.mk b/ui/snapshot/snapshot.target.darwin-x86.mk
index 4febd0e..18528de 100644
--- a/ui/snapshot/snapshot.target.darwin-x86.mk
+++ b/ui/snapshot/snapshot.target.darwin-x86.mk
@@ -94,12 +94,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -215,12 +218,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -290,7 +296,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/snapshot/snapshot.target.darwin-x86_64.mk b/ui/snapshot/snapshot.target.darwin-x86_64.mk
index 427add6..098730a 100644
--- a/ui/snapshot/snapshot.target.darwin-x86_64.mk
+++ b/ui/snapshot/snapshot.target.darwin-x86_64.mk
@@ -94,12 +94,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -216,12 +219,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -292,7 +298,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/snapshot/snapshot.target.linux-arm.mk b/ui/snapshot/snapshot.target.linux-arm.mk
index 6d81bf2..df5313c 100644
--- a/ui/snapshot/snapshot.target.linux-arm.mk
+++ b/ui/snapshot/snapshot.target.linux-arm.mk
@@ -93,12 +93,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -215,12 +218,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -294,7 +300,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/snapshot/snapshot.target.linux-mips.mk b/ui/snapshot/snapshot.target.linux-mips.mk
index add41c0..6b0bd0d 100644
--- a/ui/snapshot/snapshot.target.linux-mips.mk
+++ b/ui/snapshot/snapshot.target.linux-mips.mk
@@ -92,12 +92,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -213,12 +216,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -290,7 +296,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/snapshot/snapshot.target.linux-x86.mk b/ui/snapshot/snapshot.target.linux-x86.mk
index 4febd0e..18528de 100644
--- a/ui/snapshot/snapshot.target.linux-x86.mk
+++ b/ui/snapshot/snapshot.target.linux-x86.mk
@@ -94,12 +94,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -215,12 +218,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -290,7 +296,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/snapshot/snapshot.target.linux-x86_64.mk b/ui/snapshot/snapshot.target.linux-x86_64.mk
index 427add6..098730a 100644
--- a/ui/snapshot/snapshot.target.linux-x86_64.mk
+++ b/ui/snapshot/snapshot.target.linux-x86_64.mk
@@ -94,12 +94,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -216,12 +219,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -292,7 +298,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/surface/surface.target.darwin-arm.mk b/ui/surface/surface.target.darwin-arm.mk
index f8c16b3..5e7eb7f 100644
--- a/ui/surface/surface.target.darwin-arm.mk
+++ b/ui/surface/surface.target.darwin-arm.mk
@@ -45,7 +45,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-fno-tree-sra \
 	-fuse-ld=gold \
 	-Wno-psabi \
@@ -97,12 +96,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
@@ -173,7 +175,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-fno-tree-sra \
 	-fuse-ld=gold \
 	-Wno-psabi \
@@ -225,12 +226,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
@@ -308,7 +312,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/surface/surface.target.darwin-mips.mk b/ui/surface/surface.target.darwin-mips.mk
index fa800ab..12ee7d8 100644
--- a/ui/surface/surface.target.darwin-mips.mk
+++ b/ui/surface/surface.target.darwin-mips.mk
@@ -45,7 +45,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-EL \
 	-mhard-float \
 	-ffunction-sections \
@@ -96,12 +95,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
@@ -172,7 +174,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-EL \
 	-mhard-float \
 	-ffunction-sections \
@@ -223,12 +224,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
@@ -304,7 +308,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/surface/surface.target.darwin-x86.mk b/ui/surface/surface.target.darwin-x86.mk
index cb2b06d..4cceb14 100644
--- a/ui/surface/surface.target.darwin-x86.mk
+++ b/ui/surface/surface.target.darwin-x86.mk
@@ -44,7 +44,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-msse2 \
 	-mfpmath=sse \
 	-mmmx \
@@ -98,12 +97,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
@@ -171,7 +173,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-msse2 \
 	-mfpmath=sse \
 	-mmmx \
@@ -225,12 +226,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
@@ -304,7 +308,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/surface/surface.target.darwin-x86_64.mk b/ui/surface/surface.target.darwin-x86_64.mk
index f6317b5..0f7186a 100644
--- a/ui/surface/surface.target.darwin-x86_64.mk
+++ b/ui/surface/surface.target.darwin-x86_64.mk
@@ -46,7 +46,6 @@
 	-pipe \
 	-fPIC \
 	-Wno-unused-local-typedefs \
-	-Wno-unknown-pragmas \
 	-m64 \
 	-march=x86-64 \
 	-fuse-ld=gold \
@@ -98,12 +97,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
@@ -174,7 +176,6 @@
 	-pipe \
 	-fPIC \
 	-Wno-unused-local-typedefs \
-	-Wno-unknown-pragmas \
 	-m64 \
 	-march=x86-64 \
 	-fuse-ld=gold \
@@ -226,12 +227,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
@@ -306,7 +310,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/surface/surface.target.linux-arm.mk b/ui/surface/surface.target.linux-arm.mk
index f8c16b3..5e7eb7f 100644
--- a/ui/surface/surface.target.linux-arm.mk
+++ b/ui/surface/surface.target.linux-arm.mk
@@ -45,7 +45,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-fno-tree-sra \
 	-fuse-ld=gold \
 	-Wno-psabi \
@@ -97,12 +96,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
@@ -173,7 +175,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-fno-tree-sra \
 	-fuse-ld=gold \
 	-Wno-psabi \
@@ -225,12 +226,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
@@ -308,7 +312,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/surface/surface.target.linux-mips.mk b/ui/surface/surface.target.linux-mips.mk
index fa800ab..12ee7d8 100644
--- a/ui/surface/surface.target.linux-mips.mk
+++ b/ui/surface/surface.target.linux-mips.mk
@@ -45,7 +45,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-EL \
 	-mhard-float \
 	-ffunction-sections \
@@ -96,12 +95,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
@@ -172,7 +174,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-EL \
 	-mhard-float \
 	-ffunction-sections \
@@ -223,12 +224,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
@@ -304,7 +308,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/surface/surface.target.linux-x86.mk b/ui/surface/surface.target.linux-x86.mk
index cb2b06d..4cceb14 100644
--- a/ui/surface/surface.target.linux-x86.mk
+++ b/ui/surface/surface.target.linux-x86.mk
@@ -44,7 +44,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-msse2 \
 	-mfpmath=sse \
 	-mmmx \
@@ -98,12 +97,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
@@ -171,7 +173,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-msse2 \
 	-mfpmath=sse \
 	-mmmx \
@@ -225,12 +226,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DUSE_OPENSSL=1' \
@@ -304,7 +308,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/surface/surface.target.linux-x86_64.mk b/ui/surface/surface.target.linux-x86_64.mk
index f6317b5..0f7186a 100644
--- a/ui/surface/surface.target.linux-x86_64.mk
+++ b/ui/surface/surface.target.linux-x86_64.mk
@@ -46,7 +46,6 @@
 	-pipe \
 	-fPIC \
 	-Wno-unused-local-typedefs \
-	-Wno-unknown-pragmas \
 	-m64 \
 	-march=x86-64 \
 	-fuse-ld=gold \
@@ -98,12 +97,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
@@ -174,7 +176,6 @@
 	-pipe \
 	-fPIC \
 	-Wno-unused-local-typedefs \
-	-Wno-unknown-pragmas \
 	-m64 \
 	-march=x86-64 \
 	-fuse-ld=gold \
@@ -226,12 +227,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DPOSIX_AVOID_MMAP' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
@@ -306,7 +310,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/ui/ui_unittests.gyp b/ui/ui_unittests.gyp
index 5b57002..cfea347 100644
--- a/ui/ui_unittests.gyp
+++ b/ui/ui_unittests.gyp
@@ -8,54 +8,6 @@
   },
   'targets': [
     {
-      'target_name': 'ui_test_support',
-      'dependencies': [
-        '../base/base.gyp:base',
-        '../skia/skia.gyp:skia',
-        '../testing/gtest.gyp:gtest',
-        'gfx/gfx.gyp:gfx',
-        'gfx/gfx.gyp:gfx_geometry',
-      ],
-      'sources': [
-        'base/test/ui_controls.h',
-        'base/test/ui_controls_aura.cc',
-        'base/test/ui_controls_internal_win.cc',
-        'base/test/ui_controls_internal_win.h',
-        'base/test/ui_controls_mac.mm',
-        'base/test/ui_controls_win.cc',
-      ],
-      'include_dirs': [
-        '../',
-      ],
-      'conditions': [
-        ['OS!="ios"', {
-          'type': 'static_library',
-          'includes': [ 'base/ime/ime_test_support.gypi' ],
-        }, {  # OS=="ios"
-          # None of the sources in this target are built on iOS, resulting in
-          # link errors when building targets that depend on this target
-          # because the static library isn't found. If this target is changed
-          # to have sources that are built on iOS, the target should be changed
-          # to be of type static_library on all platforms.
-          'type': 'none',
-          # The cocoa files don't apply to iOS.
-          'sources/': [['exclude', 'cocoa']],
-        }],
-        ['chromeos==1', {
-          'dependencies': [
-            '../chromeos/chromeos.gyp:chromeos_test_support_without_gmock',
-            '../skia/skia.gyp:skia',
-          ],
-        }],
-        ['use_aura==1', {
-          'sources!': [
-            'base/test/ui_controls_mac.mm',
-            'base/test/ui_controls_win.cc',
-          ],
-        }],
-      ],
-    },
-    {
       'target_name': 'ui_unittests',
       'type': '<(gtest_target_type)',
       'dependencies': [
@@ -69,11 +21,11 @@
         '../url/url.gyp:url_lib',
         'base/strings/ui_strings.gyp:ui_strings',
         'base/ui_base.gyp:ui_base',
+        'base/ui_base.gyp:ui_base_test_support',
         'events/events.gyp:events_base',
         'gfx/gfx.gyp:gfx_test_support',
         'resources/ui_resources.gyp:ui_resources',
         'resources/ui_resources.gyp:ui_test_pak',
-        'ui_test_support',
       ],
       # iOS uses a small subset of ui. common_sources are the only files that
       # are built on iOS.
@@ -135,9 +87,6 @@
         'gfx/font_list_unittest.cc',
         'gfx/image/image_mac_unittest.mm',
         'gfx/image/image_util_unittest.cc',
-        'gfx/ozone/dri/hardware_display_controller_unittest.cc',
-        'gfx/ozone/dri/dri_surface_factory_unittest.cc',
-        'gfx/ozone/dri/dri_surface_unittest.cc',
         'gfx/platform_font_mac_unittest.mm',
         'gfx/render_text_unittest.cc',
         'gfx/sequential_id_generator_unittest.cc',
@@ -146,6 +95,7 @@
       ],
       'includes': [
         'display/display_unittests.gypi',
+        'ozone/ozone_unittests.gypi',
       ],
       'include_dirs': [
         '../',
@@ -239,14 +189,6 @@
             '../tools/xdisplaycheck/xdisplaycheck.gyp:xdisplaycheck',
           ],
         }],
-        ['toolkit_uses_gtk == 1', {
-          'sources': [
-            'base/dragdrop/gtk_dnd_util_unittest.cc',
-          ],
-          'dependencies': [
-            '../build/linux/system.gyp:gtk',
-          ],
-        }],
         ['OS=="android" or OS=="ios"', {
           'sources!': [
             'gfx/render_text_unittest.cc',
@@ -285,11 +227,6 @@
             'gfx/screen_unittest.cc',
           ],
         }],
-        ['use_ozone==1', {
-          'dependencies': [
-          '<(DEPTH)/build/linux/system.gyp:dridrm',
-          ],
-        }],
         ['use_ozone==1 and use_pango==0', {
           'sources!': [
             'gfx/text_elider_unittest.cc',
@@ -300,6 +237,9 @@
           ],
         }],
         ['chromeos==1', {
+          'dependencies': [
+            '../chromeos/chromeos.gyp:chromeos',
+          ],
           'sources!': [
             'base/dragdrop/os_exchange_data_provider_aurax11_unittest.cc',
           ],
@@ -343,7 +283,6 @@
           ],
           'variables': {
             'test_suite_name': 'ui_unittests',
-            'input_shlib_path': '<(SHARED_LIB_DIR)/<(SHARED_LIB_PREFIX)ui_unittests<(SHARED_LIB_SUFFIX)',
           },
           'includes': [ '../build/apk_test.gypi' ],
         },
diff --git a/ui/views/accessibility/ax_tree_source_views.cc b/ui/views/accessibility/ax_tree_source_views.cc
index 27f8802..80c1125 100644
--- a/ui/views/accessibility/ax_tree_source_views.cc
+++ b/ui/views/accessibility/ax_tree_source_views.cc
@@ -4,6 +4,8 @@
 
 #include "ui/views/accessibility/ax_tree_source_views.h"
 
+#include <vector>
+
 #include "base/strings/utf_string_conversions.h"
 #include "ui/accessibility/ax_view_state.h"
 #include "ui/views/widget/widget.h"
@@ -13,7 +15,7 @@
 // A simple store associating each |View| with a unique id.
 class AXViewStore {
  public:
-  AXViewStore() : view_id_(0) {};
+  AXViewStore() : view_id_(0) {}
 
   int32 GetOrStoreView(View* view) {
     int32 current_id = RetrieveId(view);
@@ -63,15 +65,18 @@
   std::map<View*, int32> view_to_id_;
 };
 
-AXTreeSourceViews::AXTreeSourceViews(Widget* root) :
-    view_store_(new AXViewStore()),
-    root_(root) {
+AXTreeSourceViews::AXTreeSourceViews(Widget* root)
+    : view_store_(new AXViewStore()),
+      root_(root) {
   root->AddObserver(this);
+  root->AddRemovalsObserver(this);
 }
 
 AXTreeSourceViews::~AXTreeSourceViews() {
-  if (root_)
+  if (root_) {
     root_->RemoveObserver(this);
+    root_->RemoveRemovalsObserver(this);
+  }
 }
 
 View* AXTreeSourceViews::GetRoot() const {
@@ -148,4 +153,4 @@
     root_ = NULL;
 }
 
-} // namespace views
+}  // namespace views
diff --git a/ui/views/accessibility/ax_tree_source_views_unittest.cc b/ui/views/accessibility/ax_tree_source_views_unittest.cc
index 9472faf..7b46bfe 100644
--- a/ui/views/accessibility/ax_tree_source_views_unittest.cc
+++ b/ui/views/accessibility/ax_tree_source_views_unittest.cc
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include <vector>
+
 #include "base/memory/scoped_ptr.h"
 #include "base/strings/utf_string_conversions.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -68,9 +70,7 @@
 
 TEST_F(AXTreeSourceViewsTest, SimpleSerialization) {
   AXTreeSourceViews ax_tree(widget_.get());
-  ui::AXTreeSource<View*>* ax_source =
-      static_cast<ui::AXTreeSource<View*>* >(&ax_tree);
-  ui::AXTreeSerializer<View*> ax_serializer(ax_source);
+  ui::AXTreeSerializer<View*> ax_serializer(&ax_tree);
   ui::AXTreeUpdate out_update;
   ax_serializer.SerializeChanges(ax_tree.GetRoot(), &out_update);
   ASSERT_EQ(3U, out_update.nodes.size());
@@ -82,4 +82,4 @@
             out_update.nodes[2].ToString());
 }
 
-} // namespace views
+}  // namespace views
diff --git a/ui/views/bubble/bubble_delegate.h b/ui/views/bubble/bubble_delegate.h
index 0142889..8bfd4a2 100644
--- a/ui/views/bubble/bubble_delegate.h
+++ b/ui/views/bubble/bubble_delegate.h
@@ -184,9 +184,6 @@
   // Insets applied to the |anchor_view_| bounds.
   gfx::Insets anchor_view_insets_;
 
-  // The widget hosting the border for this bubble (non-Aura Windows only).
-  Widget* border_widget_;
-
   // If true, the bubble does not take focus on display; default is false.
   bool use_focusless_;
 
diff --git a/ui/views/controls/label.cc b/ui/views/controls/label.cc
index cadd40b..717d2e0 100644
--- a/ui/views/controls/label.cc
+++ b/ui/views/controls/label.cc
@@ -323,7 +323,7 @@
                       int flags) {
   gfx::ShadowValues shadows;
   if (has_shadow_)
-    shadows.push_back(gfx::ShadowValue(shadow_offset_, 0,
+    shadows.push_back(gfx::ShadowValue(shadow_offset_, shadow_blur_,
         enabled() ? enabled_shadow_color_ : disabled_shadow_color_));
   canvas->DrawStringRectWithShadows(text, font_list_,
       enabled() ? actual_enabled_color_ : actual_disabled_color_,
@@ -398,6 +398,7 @@
   disabled_shadow_color_ = 0;
   shadow_offset_.SetPoint(1, 1);
   has_shadow_ = false;
+  shadow_blur_ = 0;
   cached_heights_.resize(kCachedSizeLimit);
   ResetCachedSize();
 
diff --git a/ui/views/controls/label.h b/ui/views/controls/label.h
index 0964b03..17251f3 100644
--- a/ui/views/controls/label.h
+++ b/ui/views/controls/label.h
@@ -94,6 +94,9 @@
   // Sets the drop shadow's offset from the text.
   void SetShadowOffset(int x, int y);
 
+  // Sets the shadow blur. Default is zero.
+  void set_shadow_blur(double shadow_blur) { shadow_blur_ = shadow_blur; }
+
   // Disables shadows.
   void ClearEmbellishing();
 
@@ -267,6 +270,8 @@
   bool auto_color_readability_;
   mutable gfx::Size text_size_;
   mutable bool text_size_valid_;
+  // Indicates the level of shadow blurring. Default is zero.
+  double shadow_blur_;
   int line_height_;
   bool is_multi_line_;
   bool is_obscured_;
diff --git a/ui/views/controls/menu/menu_controller.cc b/ui/views/controls/menu/menu_controller.cc
index 1861724..a63448d 100644
--- a/ui/views/controls/menu/menu_controller.cc
+++ b/ui/views/controls/menu/menu_controller.cc
@@ -13,18 +13,21 @@
 #include "base/run_loop.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/time/time.h"
+#include "ui/aura/client/screen_position_client.h"
 #include "ui/aura/env.h"
 #include "ui/aura/window.h"
 #include "ui/aura/window_event_dispatcher.h"
+#include "ui/aura/window_tree_host.h"
 #include "ui/base/dragdrop/drag_utils.h"
 #include "ui/base/dragdrop/os_exchange_data.h"
 #include "ui/base/l10n/l10n_util.h"
-#include "ui/events/event_constants.h"
+#include "ui/events/event.h"
 #include "ui/events/event_utils.h"
 #include "ui/events/platform/platform_event_source.h"
 #include "ui/events/platform/scoped_event_dispatcher.h"
 #include "ui/gfx/canvas.h"
 #include "ui/gfx/native_widget_types.h"
+#include "ui/gfx/point.h"
 #include "ui/gfx/screen.h"
 #include "ui/gfx/vector2d.h"
 #include "ui/native_theme/native_theme.h"
@@ -35,9 +38,9 @@
 #include "ui/views/controls/menu/menu_scroll_view_container.h"
 #include "ui/views/controls/menu/submenu_view.h"
 #include "ui/views/drag_utils.h"
-#include "ui/views/event_utils.h"
 #include "ui/views/focus/view_storage.h"
 #include "ui/views/mouse_constants.h"
+#include "ui/views/view.h"
 #include "ui/views/view_constants.h"
 #include "ui/views/views_delegate.h"
 #include "ui/views/widget/root_view.h"
@@ -56,6 +59,7 @@
 #include "ui/views/controls/menu/menu_event_dispatcher_linux.h"
 #endif
 
+using aura::client::ScreenPositionClient;
 using base::Time;
 using base::TimeDelta;
 using ui::OSExchangeData;
@@ -973,14 +977,7 @@
 #if defined(OS_WIN)
     // We're going to close and we own the mouse capture. We need to repost the
     // mouse down, otherwise the window the user clicked on won't get the event.
-    if (!state_.item) {
-      // We some times get an event after closing all the menus. Ignore it. Make
-      // sure the menu is in fact not visible. If the menu is visible, then
-      // we're in a bad state where we think the menu isn't visibile but it is.
-      DCHECK(!source->GetWidget()->IsVisible());
-    } else {
-      RepostEvent(source, event);
-    }
+    RepostEvent(source, event);
 #endif
 
     // And close.
@@ -2145,53 +2142,107 @@
 
 void MenuController::RepostEvent(SubmenuView* source,
                                  const ui::LocatedEvent& event) {
+  if (!event.IsMouseEvent()) {
+    // TODO(rbyers): Gesture event repost is tricky to get right
+    // crbug.com/170987.
+    DCHECK(event.IsGestureEvent());
+    return;
+  }
+
+#if defined(OS_WIN)
+  if (!state_.item) {
+    // We some times get an event after closing all the menus. Ignore it. Make
+    // sure the menu is in fact not visible. If the menu is visible, then
+    // we're in a bad state where we think the menu isn't visibile but it is.
+    DCHECK(!source->GetWidget()->IsVisible());
+    return;
+  }
+
+  state_.item->GetRootMenuItem()->GetSubmenu()->ReleaseCapture();
+#endif
+
   gfx::Point screen_loc(event.location());
   View::ConvertPointToScreen(source->GetScrollViewContainer(), &screen_loc);
-
   gfx::NativeView native_view = source->GetWidget()->GetNativeView();
+  if (!native_view)
+    return;
+
   gfx::Screen* screen = gfx::Screen::GetScreenFor(native_view);
   gfx::NativeWindow window = screen->GetWindowAtScreenPoint(screen_loc);
 
-  // On Windows, it is ok for window to be NULL. Please refer to the
-  // RepostLocatedEvent function for more information.
 #if defined(OS_WIN)
-  // Release the capture.
-  SubmenuView* submenu = state_.item->GetRootMenuItem()->GetSubmenu();
-  submenu->ReleaseCapture();
-
-  gfx::NativeView view = submenu->GetWidget()->GetNativeView();
-  if (view && window) {
-    DWORD view_tid = GetWindowThreadProcessId(HWNDForNativeView(view), NULL);
-    if (view_tid != GetWindowThreadProcessId(HWNDForNativeView(window), NULL)) {
+  // PostMessage() to metro windows isn't allowed (access will be denied). Don't
+  // try to repost with Win32 if the window under the mouse press is in metro.
+  if (!ViewsDelegate::views_delegate ||
+      !ViewsDelegate::views_delegate->IsWindowInMetro(window)) {
+    HWND target_window = window ? HWNDForNativeWindow(window) :
+                                  WindowFromPoint(screen_loc.ToPOINT());
+    HWND source_window = HWNDForNativeView(native_view);
+    if (!target_window || !source_window ||
+        GetWindowThreadProcessId(source_window, NULL) !=
+        GetWindowThreadProcessId(target_window, NULL)) {
       // Even though we have mouse capture, windows generates a mouse event if
       // the other window is in a separate thread. Only repost an event if
-      // |view| was created on the same thread, else the target window can get
-      // double events leading to bad behavior.
+      // |target_window| and |source_window| were created on the same thread,
+      // else double events can occur and lead to bad behavior.
       return;
     }
+
+    // Determine whether the click was in the client area or not.
+    // NOTE: WM_NCHITTEST coordinates are relative to the screen.
+    LPARAM coords = MAKELPARAM(screen_loc.x(), screen_loc.y());
+    LRESULT nc_hit_result = SendMessage(target_window, WM_NCHITTEST, 0, coords);
+    const bool client_area = nc_hit_result == HTCLIENT;
+
+    // TODO(sky): this isn't right. The event to generate should correspond with
+    // the event we just got. MouseEvent only tells us what is down, which may
+    // differ. Need to add ability to get changed button from MouseEvent.
+    int event_type;
+    int flags = event.flags();
+    if (flags & ui::EF_LEFT_MOUSE_BUTTON) {
+      event_type = client_area ? WM_LBUTTONDOWN : WM_NCLBUTTONDOWN;
+    } else if (flags & ui::EF_MIDDLE_MOUSE_BUTTON) {
+      event_type = client_area ? WM_MBUTTONDOWN : WM_NCMBUTTONDOWN;
+    } else if (flags & ui::EF_RIGHT_MOUSE_BUTTON) {
+      event_type = client_area ? WM_RBUTTONDOWN : WM_NCRBUTTONDOWN;
+    } else {
+      NOTREACHED();
+      return;
+    }
+
+    int window_x = screen_loc.x();
+    int window_y = screen_loc.y();
+    if (client_area) {
+      POINT pt = { window_x, window_y };
+      ScreenToClient(target_window, &pt);
+      window_x = pt.x;
+      window_y = pt.y;
+    }
+
+    WPARAM target = client_area ? event.native_event().wParam : nc_hit_result;
+    LPARAM window_coords = MAKELPARAM(window_x, window_y);
+    PostMessage(target_window, event_type, target, window_coords);
+    return;
   }
-#else
+#endif
+  // Non-Windows Aura or |window| is in metro mode.
   if (!window)
     return;
-#endif
 
-  scoped_ptr<ui::LocatedEvent> clone;
-  if (event.IsMouseEvent()) {
-    clone.reset(new ui::MouseEvent(static_cast<const ui::MouseEvent&>(event)));
-  } else if (event.IsGestureEvent()) {
-    // TODO(rbyers): Gesture event repost is tricky to get right
-    // crbug.com/170987.
+  aura::Window* root = window->GetRootWindow();
+  ScreenPositionClient* spc = aura::client::GetScreenPositionClient(root);
+  if (!spc)
     return;
-  } else {
-    NOTREACHED();
-    return;
-  }
-  clone->set_location(screen_loc);
 
-  RepostLocatedEvent(window, *clone);
+  gfx::Point root_loc(screen_loc);
+  spc->ConvertPointFromScreen(root, &root_loc);
+
+  ui::MouseEvent clone(static_cast<const ui::MouseEvent&>(event));
+  clone.set_location(root_loc);
+  clone.set_root_location(root_loc);
+  root->GetHost()->dispatcher()->RepostEvent(clone);
 }
 
-
 void MenuController::SetDropMenuItem(
     MenuItemView* new_target,
     MenuDelegate::DropPosition new_position) {
diff --git a/ui/views/controls/menu/menu_message_pump_dispatcher_linux.cc b/ui/views/controls/menu/menu_message_pump_dispatcher_linux.cc
deleted file mode 100644
index 0172f8b..0000000
--- a/ui/views/controls/menu/menu_message_pump_dispatcher_linux.cc
+++ /dev/null
@@ -1,48 +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.
-
-#include "ui/views/controls/menu/menu_message_pump_dispatcher.h"
-
-#include "ui/events/event_utils.h"
-#include "ui/events/keycodes/keyboard_code_conversion.h"
-#include "ui/events/keycodes/keyboard_codes.h"
-#include "ui/views/controls/menu/menu_controller.h"
-
-namespace views {
-namespace internal {
-
-uint32_t MenuMessagePumpDispatcher::Dispatch(const base::NativeEvent& event) {
-  if (menu_controller_->exit_type() == MenuController::EXIT_ALL ||
-      menu_controller_->exit_type() == MenuController::EXIT_DESTROYED)
-    return (POST_DISPATCH_QUIT_LOOP | POST_DISPATCH_PERFORM_DEFAULT);
-
-  switch (ui::EventTypeFromNative(event)) {
-    case ui::ET_KEY_PRESSED: {
-      if (!menu_controller_->OnKeyDown(ui::KeyboardCodeFromNative(event)))
-        return POST_DISPATCH_QUIT_LOOP;
-
-      // Do not check mnemonics if the Alt or Ctrl modifiers are pressed.
-      int flags = ui::EventFlagsFromNative(event);
-      if ((flags & (ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN)) == 0) {
-        char c = ui::GetCharacterFromKeyCode(ui::KeyboardCodeFromNative(event),
-                                             flags);
-        if (menu_controller_->SelectByChar(c))
-          return POST_DISPATCH_QUIT_LOOP;
-      }
-      return POST_DISPATCH_NONE;
-    }
-    case ui::ET_KEY_RELEASED:
-      return POST_DISPATCH_NONE;
-    default:
-      break;
-  }
-
-  return POST_DISPATCH_PERFORM_DEFAULT |
-         (menu_controller_->exit_type() == MenuController::EXIT_NONE
-              ? POST_DISPATCH_NONE
-              : POST_DISPATCH_QUIT_LOOP);
-}
-
-}  // namespace internal
-}  // namespace views
diff --git a/ui/views/controls/tree/tree_view.cc b/ui/views/controls/tree/tree_view.cc
index bf75a65..d5a3911 100644
--- a/ui/views/controls/tree/tree_view.cc
+++ b/ui/views/controls/tree/tree_view.cc
@@ -79,7 +79,6 @@
       editable_(true),
       controller_(NULL),
       root_shown_(true),
-      has_custom_icons_(false),
       row_height_(font_list_.GetHeight() + kTextVerticalPadding * 2) {
   SetFocusable(true);
   closed_icon_ = *ui::ResourceBundle::GetSharedInstance().GetImageNamed(
diff --git a/ui/views/controls/tree/tree_view.h b/ui/views/controls/tree/tree_view.h
index 097700a..24780fc 100644
--- a/ui/views/controls/tree/tree_view.h
+++ b/ui/views/controls/tree/tree_view.h
@@ -374,9 +374,6 @@
   // Whether or not the root is shown in the tree.
   bool root_shown_;
 
-  // Did the model return a non-empty set of icons from GetIcons?
-  bool has_custom_icons_;
-
   // Cached preferred size.
   gfx::Size preferred_size_;
 
diff --git a/ui/views/controls/webview/web_dialog_view.cc b/ui/views/controls/webview/web_dialog_view.cc
index a1f41c1..688892c 100644
--- a/ui/views/controls/webview/web_dialog_view.cc
+++ b/ui/views/controls/webview/web_dialog_view.cc
@@ -42,7 +42,6 @@
     WebContentsHandler* handler)
     : ClientView(NULL, NULL),
       WebDialogWebContentsDelegate(context, handler),
-      initialized_(false),
       delegate_(delegate),
       web_view_(new views::WebView(context)),
       is_attempting_close_dialog_(false),
diff --git a/ui/views/controls/webview/web_dialog_view.h b/ui/views/controls/webview/web_dialog_view.h
index 902aa32..b138abd 100644
--- a/ui/views/controls/webview/web_dialog_view.h
+++ b/ui/views/controls/webview/web_dialog_view.h
@@ -122,11 +122,6 @@
   // Initializes the contents of the dialog.
   void InitDialog();
 
-  // Whether the view is initialized. That is, dialog accelerators is registered
-  // and FreezeUpdates property is set to prevent WM from showing the window
-  // until the property is removed.
-  bool initialized_;
-
   // This view is a delegate to the HTML content since it needs to get notified
   // about when the dialog is closing. For all other actions (besides dialog
   // closing) we delegate to the creator of this view, which we keep track of
diff --git a/ui/views/event_utils.h b/ui/views/event_utils.h
deleted file mode 100644
index 03bf65b..0000000
--- a/ui/views/event_utils.h
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2013 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 UI_VIEWS_EVENT_UTILS_H_
-#define UI_VIEWS_EVENT_UTILS_H_
-
-#include "ui/gfx/native_widget_types.h"
-#include "ui/views/views_export.h"
-
-namespace ui {
-class LocatedEvent;
-}
-
-namespace views {
-
-// Reposts a located event natively. Returns false when |event| could not be
-// reposted. |event| should be in screen coordinates. |window| is the target
-// window that the event will be forwarded to. Only some events are supported.
-// On Windows |window| can be NULL, in which case the event is forwarded to
-// the HWND at the current location if it is on the same thread.
-VIEWS_EXPORT bool RepostLocatedEvent(gfx::NativeWindow window,
-                                     const ui::LocatedEvent& event);
-
-#if defined(OS_WIN)
-// Reposts a located event to the HWND passed in.
-VIEWS_EXPORT bool RepostLocatedEventWin(HWND window,
-                                        const ui::LocatedEvent& event);
-#endif
-
-}  // namespace views
-
-#endif  // UI_VIEWS_EVENT_UTILS_H_
diff --git a/ui/views/event_utils_aura.cc b/ui/views/event_utils_aura.cc
deleted file mode 100644
index 5e93e8e..0000000
--- a/ui/views/event_utils_aura.cc
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright 2013 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 "ui/views/event_utils.h"
-
-#include "base/logging.h"
-#include "base/memory/scoped_ptr.h"
-#include "ui/aura/client/screen_position_client.h"
-#include "ui/aura/window_event_dispatcher.h"
-#include "ui/aura/window_tree_host.h"
-#include "ui/events/event.h"
-#include "ui/gfx/point.h"
-#include "ui/views/views_delegate.h"
-
-using aura::client::ScreenPositionClient;
-
-namespace views {
-
-bool RepostLocatedEvent(gfx::NativeWindow window,
-                        const ui::LocatedEvent& event) {
-#if defined(OS_WIN)
-  // On Windows, if the |window| parameter is NULL, then we attempt to repost
-  // the event to the window at the current location, if it is on the current
-  // thread.
-  HWND target_window = NULL;
-  if (!window) {
-    target_window = ::WindowFromPoint(event.location().ToPOINT());
-    if (::GetWindowThreadProcessId(target_window, NULL) !=
-        ::GetCurrentThreadId())
-      return false;
-  } else {
-    if (ViewsDelegate::views_delegate &&
-        !ViewsDelegate::views_delegate->IsWindowInMetro(window))
-      target_window = window->GetHost()->GetAcceleratedWidget();
-  }
-  return RepostLocatedEventWin(target_window, event);
-#else
-  if (!window)
-    return false;
-
-  aura::Window* root_window = window->GetRootWindow();
-
-  gfx::Point root_loc(event.location());
-  ScreenPositionClient* spc =
-      aura::client::GetScreenPositionClient(root_window);
-  if (!spc)
-    return false;
-
-  spc->ConvertPointFromScreen(root_window, &root_loc);
-
-  scoped_ptr<ui::LocatedEvent> relocated;
-  if (!event.IsMouseEvent()) {
-    // TODO(rbyers): Gesture event repost is tricky to get right
-    // crbug.com/170987.
-    DCHECK(event.IsGestureEvent());
-    return false;
-  }
-
-  const ui::MouseEvent& orig = static_cast<const ui::MouseEvent&>(event);
-  relocated.reset(new ui::MouseEvent(orig));
-  relocated->set_location(root_loc);
-  relocated->set_root_location(root_loc);
-
-  root_window->GetHost()->dispatcher()->RepostEvent(*relocated);
-  return true;
-#endif
-}
-
-}  // namespace views
diff --git a/ui/views/event_utils_win.cc b/ui/views/event_utils_win.cc
deleted file mode 100644
index 78cb9df..0000000
--- a/ui/views/event_utils_win.cc
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2013 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 "ui/views/event_utils.h"
-
-#include <windowsx.h>
-
-#include "base/logging.h"
-#include "ui/events/event.h"
-#include "ui/events/event_constants.h"
-#include "ui/gfx/point.h"
-
-namespace views {
-
-bool RepostLocatedEventWin(HWND window,
-                           const ui::LocatedEvent& event) {
-  if (!window)
-    return false;
-
-  // Determine whether the click was in the client area or not.
-  // NOTE: WM_NCHITTEST coordinates are relative to the screen.
-  const gfx::Point screen_loc = event.location();
-  LRESULT nc_hit_result = SendMessage(window, WM_NCHITTEST, 0,
-                                      MAKELPARAM(screen_loc.x(),
-                                                 screen_loc.y()));
-  const bool in_client_area = nc_hit_result == HTCLIENT;
-
-  // TODO(sky): this isn't right. The event to generate should correspond with
-  // the event we just got. MouseEvent only tells us what is down, which may
-  // differ. Need to add ability to get changed button from MouseEvent.
-  int event_type;
-  int flags = event.flags();
-  if (flags & ui::EF_LEFT_MOUSE_BUTTON) {
-    event_type = in_client_area ? WM_LBUTTONDOWN : WM_NCLBUTTONDOWN;
-  } else if (flags & ui::EF_MIDDLE_MOUSE_BUTTON) {
-    event_type = in_client_area ? WM_MBUTTONDOWN : WM_NCMBUTTONDOWN;
-  } else if (flags & ui::EF_RIGHT_MOUSE_BUTTON) {
-    event_type = in_client_area ? WM_RBUTTONDOWN : WM_NCRBUTTONDOWN;
-  } else {
-    NOTREACHED();
-    return false;
-  }
-
-  int window_x = screen_loc.x();
-  int window_y = screen_loc.y();
-  if (in_client_area) {
-    POINT pt = {window_x, window_y};
-    ScreenToClient(window, &pt);
-    window_x = pt.x;
-    window_y = pt.y;
-  }
-
-  WPARAM target = in_client_area ? event.native_event().wParam : nc_hit_result;
-  PostMessage(window, event_type, target, MAKELPARAM(window_x, window_y));
-  return true;
-}
-
-}  // namespace views
diff --git a/ui/views/layout/grid_layout.cc b/ui/views/layout/grid_layout.cc
index 9466c51..e28a1b7 100644
--- a/ui/views/layout/grid_layout.cc
+++ b/ui/views/layout/grid_layout.cc
@@ -162,7 +162,6 @@
          GridLayout::SizeType size_type,
          int fixed_width,
          int min_width,
-         size_t index,
          bool is_padding)
     : LayoutElement(resize_percent),
       h_align_(h_align),
@@ -171,7 +170,6 @@
       same_size_column_(-1),
       fixed_width_(fixed_width),
       min_width_(min_width),
-      index_(index),
       is_padding_(is_padding),
       master_column_(NULL) {}
 
@@ -201,9 +199,6 @@
   const int fixed_width_;
   const int min_width_;
 
-  // Index of this column in the ColumnSet.
-  const size_t index_;
-
   const bool is_padding_;
 
   // If multiple columns have their sizes linked, one is the
@@ -264,10 +259,8 @@
 
 class Row : public LayoutElement {
  public:
-  Row(bool fixed_height, int height, float resize_percent,
-      ColumnSet* column_set)
+  Row(int height, float resize_percent, ColumnSet* column_set)
     : LayoutElement(resize_percent),
-      fixed_height_(fixed_height),
       height_(height),
       column_set_(column_set),
       max_ascent_(0),
@@ -301,7 +294,6 @@
   }
 
  private:
-  const bool fixed_height_;
   const int height_;
   // The column set used for this row; null for padding rows.
   ColumnSet* column_set_;
@@ -422,8 +414,7 @@
                           int min_width,
                           bool is_padding) {
   Column* column = new Column(h_align, v_align, resize_percent, size_type,
-                              fixed_width, min_width, columns_.size(),
-                              is_padding);
+                              fixed_width, min_width, is_padding);
   columns_.push_back(column);
 }
 
@@ -718,11 +709,11 @@
 void GridLayout::StartRow(float vertical_resize, int column_set_id) {
   ColumnSet* column_set = GetColumnSet(column_set_id);
   DCHECK(column_set);
-  AddRow(new Row(false, 0, vertical_resize, column_set));
+  AddRow(new Row(0, vertical_resize, column_set));
 }
 
 void GridLayout::AddPaddingRow(float vertical_resize, int pixel_count) {
-  AddRow(new Row(true, pixel_count, vertical_resize, NULL));
+  AddRow(new Row(pixel_count, vertical_resize, NULL));
 }
 
 void GridLayout::SkipColumns(int col_count) {
diff --git a/ui/views/metrics_aura.cc b/ui/views/metrics_aura.cc
index 03aa832..046baa8 100644
--- a/ui/views/metrics_aura.cc
+++ b/ui/views/metrics_aura.cc
@@ -11,7 +11,6 @@
 namespace {
 
 // Default double click interval in milliseconds.
-// Same as what gtk uses.
 const int kDefaultDoubleClickInterval = 500;
 
 }  // namespace
diff --git a/ui/views/test/test_views_delegate.cc b/ui/views/test/test_views_delegate.cc
index 47c1d66..d68eb3f 100644
--- a/ui/views/test/test_views_delegate.cc
+++ b/ui/views/test/test_views_delegate.cc
@@ -4,15 +4,8 @@
 
 #include "ui/views/test/test_views_delegate.h"
 
-#include "base/command_line.h"
-#include "base/logging.h"
-#include "content/public/test/web_contents_tester.h"
 #include "ui/wm/core/wm_state.h"
 
-#if !defined(OS_CHROMEOS)
-#include "ui/views/widget/desktop_aura/desktop_native_widget_aura.h"
-#include "ui/views/widget/native_widget_aura.h"
-#endif
 
 namespace views {
 
@@ -31,50 +24,14 @@
   use_transparent_windows_ = transparent;
 }
 
-void TestViewsDelegate::SaveWindowPlacement(const Widget* window,
-                                            const std::string& window_name,
-                                            const gfx::Rect& bounds,
-                                            ui::WindowShowState show_state) {
-}
-
-bool TestViewsDelegate::GetSavedWindowPlacement(
-    const Widget* window,
-    const std::string& window_name,
-    gfx::Rect* bounds,
-    ui:: WindowShowState* show_state) const {
-  return false;
-}
-
-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
-gfx::ImageSkia* TestViewsDelegate::GetDefaultWindowIcon() const {
-  return NULL;
-}
-#endif
-
-NonClientFrameView* TestViewsDelegate::CreateDefaultNonClientFrameView(
-    Widget* widget) {
-  return NULL;
-}
-
-content::WebContents* TestViewsDelegate::CreateWebContents(
-    content::BrowserContext* browser_context,
-    content::SiteInstance* site_instance) {
-  return NULL;
-}
-
 void TestViewsDelegate::OnBeforeWidgetInit(
     Widget::InitParams* params,
     internal::NativeWidgetDelegate* delegate) {
   if (params->opacity == Widget::InitParams::INFER_OPACITY) {
-    if (use_transparent_windows_)
-      params->opacity = Widget::InitParams::TRANSLUCENT_WINDOW;
-    else
-      params->opacity = Widget::InitParams::OPAQUE_WINDOW;
+    params->opacity = use_transparent_windows_ ?
+        Widget::InitParams::TRANSLUCENT_WINDOW :
+        Widget::InitParams::OPAQUE_WINDOW;
   }
 }
 
-base::TimeDelta TestViewsDelegate::GetDefaultTextfieldObscuredRevealDuration() {
-  return base::TimeDelta();
-}
-
 }  // namespace views
diff --git a/ui/views/test/test_views_delegate.h b/ui/views/test/test_views_delegate.h
index 3642160..52f11a0 100644
--- a/ui/views/test/test_views_delegate.h
+++ b/ui/views/test/test_views_delegate.h
@@ -5,24 +5,14 @@
 #ifndef UI_VIEWS_TEST_TEST_VIEWS_DELEGATE_H_
 #define UI_VIEWS_TEST_TEST_VIEWS_DELEGATE_H_
 
-#include "base/basictypes.h"
-#include "base/compiler_specific.h"
 #include "base/memory/scoped_ptr.h"
-#include "build/build_config.h"
-#include "ui/accessibility/ax_enums.h"
 #include "ui/views/views_delegate.h"
 
-namespace ui {
-class Clipboard;
-}
-
 namespace wm {
 class WMState;
 }
 
 namespace views {
-class View;
-class Widget;
 
 class TestViewsDelegate : public ViewsDelegate {
  public:
@@ -31,51 +21,13 @@
 
   void SetUseTransparentWindows(bool transparent);
 
-  // Overridden from ViewsDelegate:
-  virtual void SaveWindowPlacement(const Widget* window,
-                                   const std::string& window_name,
-                                   const gfx::Rect& bounds,
-                                   ui::WindowShowState show_state) OVERRIDE;
-  virtual bool GetSavedWindowPlacement(
-      const Widget* window,
-      const std::string& window_name,
-      gfx::Rect* bounds,
-      ui::WindowShowState* show_state) const OVERRIDE;
-
-  virtual void NotifyAccessibilityEvent(
-      View* view, ui::AXEvent event_type) OVERRIDE {}
-
-  virtual void NotifyMenuItemFocused(const base::string16& menu_name,
-                                     const base::string16& menu_item_name,
-                                     int item_index,
-                                     int item_count,
-                                     bool has_submenu) OVERRIDE {}
-#if defined(OS_WIN)
-  virtual HICON GetDefaultWindowIcon() const OVERRIDE {
-    return NULL;
-  }
-
-  virtual bool IsWindowInMetro(gfx::NativeWindow window) const {
-    return false;
-  }
-#elif defined(OS_LINUX) && !defined(OS_CHROMEOS)
-  virtual gfx::ImageSkia* GetDefaultWindowIcon() const OVERRIDE;
-#endif
-  virtual NonClientFrameView* CreateDefaultNonClientFrameView(
-      Widget* widget) OVERRIDE;
-  virtual void AddRef() OVERRIDE {}
-  virtual void ReleaseRef() OVERRIDE {}
-  virtual content::WebContents* CreateWebContents(
-      content::BrowserContext* browser_context,
-      content::SiteInstance* site_instance) OVERRIDE;
+  // ViewsDelegate:
   virtual void OnBeforeWidgetInit(
       Widget::InitParams* params,
       internal::NativeWidgetDelegate* delegate) OVERRIDE;
-  virtual base::TimeDelta GetDefaultTextfieldObscuredRevealDuration() OVERRIDE;
 
  private:
   bool use_transparent_windows_;
-
   scoped_ptr<wm::WMState> wm_state_;
 
   DISALLOW_COPY_AND_ASSIGN(TestViewsDelegate);
diff --git a/ui/views/view.cc b/ui/views/view.cc
index 763714e..43b7ba9 100644
--- a/ui/views/view.cc
+++ b/ui/views/view.cc
@@ -2148,6 +2148,15 @@
       context_menu_controller_ : 0;
   View::DragInfo* drag_info = GetDragInfo();
 
+  // TODO(sky): for debugging 360238.
+  int storage_id = 0;
+  if (event.IsOnlyRightMouseButton() && context_menu_controller &&
+      kContextMenuOnMousePress && HitTestPoint(event.location())) {
+    ViewStorage* view_storage = ViewStorage::GetInstance();
+    storage_id = view_storage->CreateStorageID();
+    view_storage->StoreView(storage_id, this);
+  }
+
   const bool enabled = enabled_;
   const bool result = OnMousePressed(event);
 
@@ -2160,6 +2169,8 @@
     // from mouse pressed.
     gfx::Point location(event.location());
     if (HitTestPoint(location)) {
+      if (storage_id != 0)
+        CHECK_EQ(this, ViewStorage::GetInstance()->RetrieveView(storage_id));
       ConvertPointToScreen(this, &location);
       ShowContextMenu(location, ui::MENU_SOURCE_MOUSE);
       return true;
diff --git a/ui/views/view_aura.cc b/ui/views/view_aura.cc
index 006f1da..ce60963 100644
--- a/ui/views/view_aura.cc
+++ b/ui/views/view_aura.cc
@@ -7,11 +7,9 @@
 namespace {
 
 // Default horizontal drag threshold in pixels.
-// Same as what gtk uses.
 const int kDefaultHorizontalDragThreshold = 8;
 
 // Default vertical drag threshold in pixels.
-// Same as what gtk uses.
 const int kDefaultVerticalDragThreshold = 8;
 
 }  // namespace
diff --git a/ui/views/views.gyp b/ui/views/views.gyp
index 4f5e4e4..f553d25 100644
--- a/ui/views/views.gyp
+++ b/ui/views/views.gyp
@@ -29,7 +29,7 @@
         '../gfx/gfx.gyp:gfx_geometry',
         '../native_theme/native_theme.gyp:native_theme',
         '../resources/ui_resources.gyp:ui_resources',
-        '../wm/wm.gyp:wm_core',
+        '../wm/wm.gyp:wm',
       ],
       'export_dependent_settings': [
         '../accessibility/accessibility.gyp:ax_gen',
@@ -232,9 +232,6 @@
         'drag_controller.h',
         'drag_utils.cc',
         'drag_utils.h',
-        'event_utils.h',
-        'event_utils_aura.cc',
-        'event_utils_win.cc',
         'focus/external_focus_tracker.cc',
         'focus/external_focus_tracker.h',
         'focus/focus_manager.cc',
@@ -389,8 +386,6 @@
         'widget/widget_removals_observer.h',
         'widget/window_reorderer.cc',
         'widget/window_reorderer.h',
-        'win/appbar.cc',
-        'win/appbar.h',
         'win/fullscreen_handler.cc',
         'win/fullscreen_handler.h',
         'win/hwnd_message_handler.cc',
@@ -436,7 +431,7 @@
         }],
         ['chromeos==0 and use_x11==1', {
           'dependencies': [
-            '../display/display.gyp:display',
+            '../display/display.gyp:display_util',
           ],
         }],
         ['OS=="linux" and chromeos==0', {
@@ -516,7 +511,7 @@
         '../events/events.gyp:events',
         '../gfx/gfx.gyp:gfx',
         '../gfx/gfx.gyp:gfx_geometry',
-        '../wm/wm.gyp:wm_core',
+        '../wm/wm.gyp:wm',
         'views',
       ],
       'include_dirs': [
@@ -572,6 +567,7 @@
         '../aura/aura.gyp:aura_test_support',
         '../base/strings/ui_strings.gyp:ui_strings',
         '../base/ui_base.gyp:ui_base',
+        '../base/ui_base.gyp:ui_base_test_support',
         '../compositor/compositor.gyp:compositor',
         '../compositor/compositor.gyp:compositor_test_support',
         '../events/events.gyp:events',
@@ -579,8 +575,7 @@
         '../gfx/gfx.gyp:gfx_geometry',
         '../resources/ui_resources.gyp:ui_resources',
         '../resources/ui_resources.gyp:ui_test_pak',
-        '../ui_unittests.gyp:ui_test_support',
-        '../wm/wm.gyp:wm_core',
+        '../wm/wm.gyp:wm',
         'views',
         'views_test_support',
       ],
diff --git a/ui/views/views_delegate.cc b/ui/views/views_delegate.cc
index 6552dd7..d7bd031 100644
--- a/ui/views/views_delegate.cc
+++ b/ui/views/views_delegate.cc
@@ -17,8 +17,75 @@
   ui::TouchSelectionControllerFactory::SetInstance(NULL);
 }
 
+void ViewsDelegate::SaveWindowPlacement(const Widget* widget,
+                                        const std::string& window_name,
+                                        const gfx::Rect& bounds,
+                                        ui::WindowShowState show_state) {
+}
+
+bool ViewsDelegate::GetSavedWindowPlacement(
+    const Widget* widget,
+    const std::string& window_name,
+    gfx::Rect* bounds,
+    ui::WindowShowState* show_state) const {
+  return false;
+}
+
+void ViewsDelegate::NotifyAccessibilityEvent(View* view,
+                                             ui::AXEvent event_type) {
+}
+
+void ViewsDelegate::NotifyMenuItemFocused(const base::string16& menu_name,
+                                          const base::string16& menu_item_name,
+                                          int item_index,
+                                          int item_count,
+                                          bool has_submenu) {
+}
+
+#if defined(OS_WIN)
+HICON ViewsDelegate::GetDefaultWindowIcon() const {
+  return NULL;
+}
+
+bool ViewsDelegate::IsWindowInMetro(gfx::NativeWindow window) const {
+  return false;
+}
+#elif defined(OS_LINUX) && !defined(OS_CHROMEOS)
+gfx::ImageSkia* ViewsDelegate::GetDefaultWindowIcon() const {
+  return NULL;
+}
+#endif
+
+NonClientFrameView* ViewsDelegate::CreateDefaultNonClientFrameView(
+    Widget* widget) {
+  return NULL;
+}
+
+void ViewsDelegate::AddRef() {
+}
+
+void ViewsDelegate::ReleaseRef() {
+}
+
+content::WebContents* ViewsDelegate::CreateWebContents(
+    content::BrowserContext* browser_context,
+    content::SiteInstance* site_instance) {
+  return NULL;
+}
+
+base::TimeDelta ViewsDelegate::GetDefaultTextfieldObscuredRevealDuration() {
+  return base::TimeDelta();
+}
+
 bool ViewsDelegate::WindowManagerProvidesTitleBar(bool maximized) {
   return false;
 }
 
+#if defined(OS_WIN)
+int ViewsDelegate::GetAppbarAutohideEdges(HMONITOR monitor,
+                                          const base::Closure& callback) {
+  return EDGE_BOTTOM;
+}
+#endif
+
 }  // namespace views
diff --git a/ui/views/views_delegate.h b/ui/views/views_delegate.h
index 4201dbb..8be8a0d 100644
--- a/ui/views/views_delegate.h
+++ b/ui/views/views_delegate.h
@@ -52,11 +52,16 @@
 // implementation.
 class VIEWS_EXPORT ViewsDelegate {
  public:
-  // The active ViewsDelegate used by the views system.
-  static ViewsDelegate* views_delegate;
+#if defined(OS_WIN)
+  enum AppbarAutohideEdge {
+    EDGE_TOP    = 1 << 0,
+    EDGE_LEFT   = 1 << 1,
+    EDGE_BOTTOM = 1 << 2,
+    EDGE_RIGHT  = 1 << 3,
+  };
+#endif
 
   ViewsDelegate();
-
   virtual ~ViewsDelegate();
 
   // Saves the position, size and "show" state for the window with the
@@ -64,19 +69,16 @@
   virtual void SaveWindowPlacement(const Widget* widget,
                                    const std::string& window_name,
                                    const gfx::Rect& bounds,
-                                   ui::WindowShowState show_state) = 0;
+                                   ui::WindowShowState show_state);
 
   // Retrieves the saved position and size and "show" state for the window with
   // the specified name.
-  virtual bool GetSavedWindowPlacement(
-      const Widget* widget,
-      const std::string& window_name,
-      gfx::Rect* bounds,
-      ui::WindowShowState* show_state) const = 0;
+  virtual bool GetSavedWindowPlacement(const Widget* widget,
+                                       const std::string& window_name,
+                                       gfx::Rect* bounds,
+                                       ui::WindowShowState* show_state) const;
 
-  virtual void NotifyAccessibilityEvent(
-      View* view,
-      ui::AXEvent event_type) = 0;
+  virtual void NotifyAccessibilityEvent(View* view, ui::AXEvent event_type);
 
   // For accessibility, notify the delegate that a menu item was focused
   // so that alternate feedback (speech / magnified text) can be provided.
@@ -84,40 +86,39 @@
                                      const base::string16& menu_item_name,
                                      int item_index,
                                      int item_count,
-                                     bool has_submenu) = 0;
+                                     bool has_submenu);
 
 #if defined(OS_WIN)
   // Retrieves the default window icon to use for windows if none is specified.
-  virtual HICON GetDefaultWindowIcon() const = 0;
+  virtual HICON GetDefaultWindowIcon() const;
   // Returns true if the window passed in is in the Windows 8 metro
   // environment.
-  virtual bool IsWindowInMetro(gfx::NativeWindow window) const = 0;
+  virtual bool IsWindowInMetro(gfx::NativeWindow window) const;
 #elif defined(OS_LINUX) && !defined(OS_CHROMEOS)
-  virtual gfx::ImageSkia* GetDefaultWindowIcon() const = 0;
+  virtual gfx::ImageSkia* GetDefaultWindowIcon() const;
 #endif
 
   // Creates a default NonClientFrameView to be used for windows that don't
   // specify their own. If this function returns NULL, the
   // views::CustomFrameView type will be used.
-  virtual NonClientFrameView* CreateDefaultNonClientFrameView(
-      Widget* widget) = 0;
+  virtual NonClientFrameView* CreateDefaultNonClientFrameView(Widget* widget);
 
   // AddRef/ReleaseRef are invoked while a menu is visible. They are used to
   // ensure we don't attempt to exit while a menu is showing.
-  virtual void AddRef() = 0;
-  virtual void ReleaseRef() = 0;
+  virtual void AddRef();
+  virtual void ReleaseRef();
 
   // Creates a web contents. This will return NULL unless overriden.
   virtual content::WebContents* CreateWebContents(
       content::BrowserContext* browser_context,
-      content::SiteInstance* site_instance) = 0;
+      content::SiteInstance* site_instance);
 
   // Gives the platform a chance to modify the properties of a Widget.
   virtual void OnBeforeWidgetInit(Widget::InitParams* params,
                                   internal::NativeWidgetDelegate* delegate) = 0;
 
   // Returns the default obscured text reveal duration.
-  virtual base::TimeDelta GetDefaultTextfieldObscuredRevealDuration() = 0;
+  virtual base::TimeDelta GetDefaultTextfieldObscuredRevealDuration();
 
   // Returns true if the operating system's window manager will always provide a
   // title bar with caption buttons (ignoring the setting to
@@ -125,8 +126,24 @@
   // maximized windows; otherwise to restored windows.
   virtual bool WindowManagerProvidesTitleBar(bool maximized);
 
+#if defined(OS_WIN)
+  // Starts a query for the appbar autohide edges of the specified monitor and
+  // returns the current value.  If the query finds the edges have changed from
+  // the current value, |callback| is subsequently invoked.  If the edges have
+  // not changed, |callback| is never run.
+  //
+  // The return value is a bitmask of AppbarAutohideEdge.
+  virtual int GetAppbarAutohideEdges(HMONITOR monitor,
+                                     const base::Closure& callback);
+#endif
+
+  // The active ViewsDelegate used by the views system.
+  static ViewsDelegate* views_delegate;
+
  private:
   scoped_ptr<ViewsTouchSelectionControllerFactory> views_tsc_factory_;
+
+  DISALLOW_COPY_AND_ASSIGN(ViewsDelegate);
 };
 
 }  // namespace views
diff --git a/ui/views/widget/desktop_aura/desktop_drag_drop_client_aurax11.cc b/ui/views/widget/desktop_aura/desktop_drag_drop_client_aurax11.cc
index 9dc300b..f07140a 100644
--- a/ui/views/widget/desktop_aura/desktop_drag_drop_client_aurax11.cc
+++ b/ui/views/widget/desktop_aura/desktop_drag_drop_client_aurax11.cc
@@ -9,7 +9,6 @@
 #include "base/event_types.h"
 #include "base/lazy_instance.h"
 #include "base/message_loop/message_loop.h"
-#include "base/message_loop/message_pump_dispatcher.h"
 #include "ui/aura/window.h"
 #include "ui/aura/window_tree_host.h"
 #include "ui/base/clipboard/clipboard.h"
@@ -621,12 +620,12 @@
 
 void DesktopDragDropClientAuraX11::OnSelectionNotify(
     const XSelectionEvent& xselection) {
-  if (!target_current_context_) {
-    NOTIMPLEMENTED();
-    return;
-  }
+  if (target_current_context_)
+    target_current_context_->OnSelectionNotify(xselection);
 
-  target_current_context_->OnSelectionNotify(xselection);
+  // ICCCM requires us to delete the property passed into SelectionNotify.
+  if (xselection.property != None)
+    XDeleteProperty(xdisplay_, xwindow_, xselection.property);
 }
 
 int DesktopDragDropClientAuraX11::StartDragAndDrop(
diff --git a/ui/views/widget/desktop_aura/desktop_native_cursor_manager.cc b/ui/views/widget/desktop_aura/desktop_native_cursor_manager.cc
index ec898fb..187aa6e 100644
--- a/ui/views/widget/desktop_aura/desktop_native_cursor_manager.cc
+++ b/ui/views/widget/desktop_aura/desktop_native_cursor_manager.cc
@@ -40,7 +40,8 @@
     const gfx::Display& display,
     wm::NativeCursorManagerDelegate* delegate) {
   cursor_loader_->UnloadAll();
-  cursor_loader_->set_display(display);
+  cursor_loader_->set_rotation(display.rotation());
+  cursor_loader_->set_scale(display.device_scale_factor());
 
   if (cursor_loader_updater_.get())
     cursor_loader_updater_->OnDisplayUpdated(display, cursor_loader_.get());
diff --git a/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc b/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc
index 12aec92..914c1d2 100644
--- a/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc
+++ b/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc
@@ -437,9 +437,8 @@
   //             handed way of accomplishing focus.
   // No event filter for aura::Env. Create CompoundEvnetFilter per
   // WindowEventDispatcher.
-  root_window_event_filter_ = new wm::CompoundEventFilter;
-  // Pass ownership of the filter to the root_window.
-  host_->window()->SetEventFilter(root_window_event_filter_);
+  root_window_event_filter_.reset(new wm::CompoundEventFilter);
+  host_->window()->AddPreTargetHandler(root_window_event_filter_.get());
 
   // The host's dispatcher must be added to |native_cursor_manager_| before
   // OnNativeWidgetCreated() is called.
diff --git a/ui/views/widget/desktop_aura/desktop_native_widget_aura.h b/ui/views/widget/desktop_aura/desktop_native_widget_aura.h
index 85a0a3a..8735ac0 100644
--- a/ui/views/widget/desktop_aura/desktop_native_widget_aura.h
+++ b/ui/views/widget/desktop_aura/desktop_native_widget_aura.h
@@ -83,7 +83,7 @@
     return input_method_event_filter_.get();
   }
   wm::CompoundEventFilter* root_window_event_filter() {
-    return root_window_event_filter_;
+    return root_window_event_filter_.get();
   }
   aura::WindowTreeHost* host() {
     return host_.get();
@@ -280,7 +280,7 @@
   scoped_ptr<FocusManagerEventHandler> focus_manager_event_handler_;
 
   // Toplevel event filter which dispatches to other event filters.
-  wm::CompoundEventFilter* root_window_event_filter_;
+  scoped_ptr<wm::CompoundEventFilter> root_window_event_filter_;
 
   scoped_ptr<wm::InputMethodEventFilter> input_method_event_filter_;
 
diff --git a/ui/views/widget/desktop_aura/desktop_screen_x11.cc b/ui/views/widget/desktop_aura/desktop_screen_x11.cc
index 0e6858b..99ca833 100644
--- a/ui/views/widget/desktop_aura/desktop_screen_x11.cc
+++ b/ui/views/widget/desktop_aura/desktop_screen_x11.cc
@@ -16,8 +16,8 @@
 #include "ui/aura/window_event_dispatcher.h"
 #include "ui/aura/window_tree_host.h"
 #include "ui/base/layout.h"
-#include "ui/display/display_util.h"
-#include "ui/display/x11/edid_parser_x11.h"
+#include "ui/display/util/display_util.h"
+#include "ui/display/util/x11/edid_parser_x11.h"
 #include "ui/events/platform/platform_event_source.h"
 #include "ui/gfx/display.h"
 #include "ui/gfx/display_observer.h"
@@ -141,7 +141,9 @@
       ui::PlatformEventSource::GetInstance()->AddPlatformEventDispatcher(this);
     XRRSelectInput(xdisplay_,
                    x_root_window_,
-                   RRScreenChangeNotifyMask | RROutputChangeNotifyMask);
+                   RRScreenChangeNotifyMask |
+                   RROutputChangeNotifyMask |
+                   RRCrtcChangeNotifyMask);
 
     displays_ = BuildDisplaysFromXRandRInfo();
   } else {
diff --git a/ui/views/widget/desktop_aura/desktop_screen_x11_unittest.cc b/ui/views/widget/desktop_aura/desktop_screen_x11_unittest.cc
index d0c0a86..b0f4c81 100644
--- a/ui/views/widget/desktop_aura/desktop_screen_x11_unittest.cc
+++ b/ui/views/widget/desktop_aura/desktop_screen_x11_unittest.cc
@@ -8,9 +8,12 @@
 #include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "ui/aura/client/aura_constants.h"
+#include "ui/aura/test/event_generator.h"
 #include "ui/aura/window.h"
 #include "ui/aura/window_event_dispatcher.h"
 #include "ui/aura/window_tree_host.h"
+#include "ui/base/hit_test.h"
 #include "ui/base/x/x11_util.h"
 #include "ui/events/platform/platform_event_dispatcher.h"
 #include "ui/events/platform/platform_event_source.h"
@@ -21,6 +24,34 @@
 #include "ui/views/widget/desktop_aura/desktop_native_widget_aura.h"
 #include "ui/views/widget/desktop_aura/desktop_window_tree_host_x11.h"
 
+namespace {
+
+// Class which allows for the designation of non-client component targets of
+// hit tests.
+class TestDesktopNativeWidgetAura : public views::DesktopNativeWidgetAura {
+ public:
+  explicit TestDesktopNativeWidgetAura(
+      views::internal::NativeWidgetDelegate* delegate)
+      : views::DesktopNativeWidgetAura(delegate) {}
+  virtual ~TestDesktopNativeWidgetAura() {}
+
+  void set_window_component(int window_component) {
+    window_component_ = window_component;
+  }
+
+  // DesktopNativeWidgetAura:
+  virtual int GetNonClientComponent(const gfx::Point& point) const OVERRIDE {
+    return window_component_;
+  }
+
+ private:
+  int window_component_;
+
+  DISALLOW_COPY_AND_ASSIGN(TestDesktopNativeWidgetAura);
+};
+
+}  // namespace
+
 namespace views {
 
 const int64 kFirstDisplay = 5321829;
@@ -125,12 +156,18 @@
     removed_display_.clear();
   }
 
-  Widget* BuildTopLevelDesktopWidget(const gfx::Rect& bounds) {
+  Widget* BuildTopLevelDesktopWidget(const gfx::Rect& bounds,
+      bool use_test_native_widget) {
     Widget* toplevel = new Widget;
     Widget::InitParams toplevel_params =
         CreateParams(Widget::InitParams::TYPE_WINDOW);
-    toplevel_params.native_widget =
-        new views::DesktopNativeWidgetAura(toplevel);
+    if (use_test_native_widget) {
+      toplevel_params.native_widget =
+          new TestDesktopNativeWidgetAura(toplevel);
+    } else {
+      toplevel_params.native_widget =
+          new views::DesktopNativeWidgetAura(toplevel);
+    }
     toplevel_params.bounds = bounds;
     toplevel_params.remove_standard_frame = true;
     toplevel->Init(toplevel_params);
@@ -275,10 +312,12 @@
 }
 
 TEST_F(DesktopScreenX11Test, GetWindowAtScreenPoint) {
-  Widget* window_one = BuildTopLevelDesktopWidget(gfx::Rect(110, 110, 10, 10));
-  Widget* window_two = BuildTopLevelDesktopWidget(gfx::Rect(150, 150, 10, 10));
+  Widget* window_one = BuildTopLevelDesktopWidget(gfx::Rect(110, 110, 10, 10),
+      false);
+  Widget* window_two = BuildTopLevelDesktopWidget(gfx::Rect(150, 150, 10, 10),
+      false);
   Widget* window_three =
-      BuildTopLevelDesktopWidget(gfx::Rect(115, 115, 20, 20));
+      BuildTopLevelDesktopWidget(gfx::Rect(115, 115, 20, 20), false);
 
   window_three->Show();
   window_two->Show();
@@ -317,8 +356,10 @@
                                   gfx::Rect(640, 0, 1024, 768)));
   screen()->ProcessDisplayChange(displays);
 
-  Widget* window_one = BuildTopLevelDesktopWidget(gfx::Rect(10, 10, 10, 10));
-  Widget* window_two = BuildTopLevelDesktopWidget(gfx::Rect(650, 50, 10, 10));
+  Widget* window_one = BuildTopLevelDesktopWidget(gfx::Rect(10, 10, 10, 10),
+      false);
+  Widget* window_two = BuildTopLevelDesktopWidget(gfx::Rect(650, 50, 10, 10),
+      false);
 
   EXPECT_EQ(
       kFirstDisplay,
@@ -331,4 +372,87 @@
   window_two->CloseNow();
 }
 
+// Tests that the window is maximized in response to a double click event.
+TEST_F(DesktopScreenX11Test, DoubleClickHeaderMaximizes) {
+  Widget* widget = BuildTopLevelDesktopWidget(gfx::Rect(0, 0, 100, 100), true);
+  widget->Show();
+  TestDesktopNativeWidgetAura* native_widget =
+      static_cast<TestDesktopNativeWidgetAura*>(widget->native_widget());
+  native_widget->set_window_component(HTCAPTION);
+
+  aura::Window* window = widget->GetNativeWindow();
+  window->SetProperty(aura::client::kCanMaximizeKey, true);
+
+  // Cast to superclass as DesktopWindowTreeHostX11 hide IsMaximized
+  DesktopWindowTreeHost* rwh =
+      DesktopWindowTreeHostX11::GetHostForXID(window->GetHost()->
+          GetAcceleratedWidget());
+
+  aura::test::EventGenerator generator(window);
+  generator.ClickLeftButton();
+  generator.DoubleClickLeftButton();
+  RunPendingMessages();
+  EXPECT_TRUE(rwh->IsMaximized());
+
+  widget->CloseNow();
+}
+
+// Tests that the window does not maximize in response to a double click event,
+// if the first click was to a different target component than that of the
+// second click.
+TEST_F(DesktopScreenX11Test, DoubleClickTwoDifferentTargetsDoesntMaximizes) {
+  Widget* widget = BuildTopLevelDesktopWidget(gfx::Rect(0, 0, 100, 100), true);
+  widget->Show();
+  TestDesktopNativeWidgetAura* native_widget =
+      static_cast<TestDesktopNativeWidgetAura*>(widget->native_widget());
+
+  aura::Window* window = widget->GetNativeWindow();
+  window->SetProperty(aura::client::kCanMaximizeKey, true);
+
+  // Cast to superclass as DesktopWindowTreeHostX11 hide IsMaximized
+  DesktopWindowTreeHost* rwh =
+      DesktopWindowTreeHostX11::GetHostForXID(window->GetHost()->
+          GetAcceleratedWidget());
+
+  aura::test::EventGenerator generator(window);
+  native_widget->set_window_component(HTCLIENT);
+  generator.ClickLeftButton();
+  native_widget->set_window_component(HTCAPTION);
+  generator.DoubleClickLeftButton();
+  RunPendingMessages();
+  EXPECT_FALSE(rwh->IsMaximized());
+
+  widget->CloseNow();
+}
+
+// Tests that the window does not maximize in response to a double click event,
+// if the double click was interrupted by a right click.
+TEST_F(DesktopScreenX11Test, RightClickDuringDoubleClickDoesntMaximize) {
+  Widget* widget = BuildTopLevelDesktopWidget(gfx::Rect(0, 0, 100, 100), true);
+  widget->Show();
+  TestDesktopNativeWidgetAura* native_widget =
+      static_cast<TestDesktopNativeWidgetAura*>(widget->native_widget());
+
+  aura::Window* window = widget->GetNativeWindow();
+  window->SetProperty(aura::client::kCanMaximizeKey, true);
+
+  // Cast to superclass as DesktopWindowTreeHostX11 hide IsMaximized
+  DesktopWindowTreeHost* rwh = static_cast<DesktopWindowTreeHost*>(
+      DesktopWindowTreeHostX11::GetHostForXID(window->GetHost()->
+          GetAcceleratedWidget()));
+
+  aura::test::EventGenerator generator(window);
+  native_widget->set_window_component(HTCLIENT);
+  generator.ClickLeftButton();
+  native_widget->set_window_component(HTCAPTION);
+  generator.PressRightButton();
+  generator.ReleaseRightButton();
+  EXPECT_FALSE(rwh->IsMaximized());
+  generator.DoubleClickLeftButton();
+  RunPendingMessages();
+  EXPECT_FALSE(rwh->IsMaximized());
+
+  widget->CloseNow();
+}
+
 }  // namespace views
diff --git a/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc b/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc
index 221d184..efd24b6 100644
--- a/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc
+++ b/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc
@@ -34,6 +34,7 @@
 #include "ui/gfx/insets.h"
 #include "ui/gfx/path.h"
 #include "ui/gfx/path_x11.h"
+#include "ui/gfx/screen.h"
 #include "ui/native_theme/native_theme.h"
 #include "ui/views/corewm/tooltip_aura.h"
 #include "ui/views/ime/input_method.h"
@@ -342,8 +343,9 @@
 
 void DesktopWindowTreeHostX11::ShowMaximizedWithBounds(
     const gfx::Rect& restored_bounds) {
-  restored_bounds_ = restored_bounds;
   ShowWindowWithState(ui::SHOW_STATE_MAXIMIZED);
+  // Enforce |restored_bounds_| since calling Maximize() could have reset it.
+  restored_bounds_ = restored_bounds;
 }
 
 bool DesktopWindowTreeHostX11::IsVisible() const {
@@ -484,9 +486,9 @@
 }
 
 void DesktopWindowTreeHostX11::Maximize() {
-  // When we're the process requesting the maximizing, we can accurately keep
-  // track of our restored bounds instead of relying on the heuristics that are
-  // in the PropertyNotify and ConfigureNotify handlers.
+  // When we are in the process of requesting to maximize a window, we can
+  // accurately keep track of our restored bounds instead of relying on the
+  // heuristics that are in the PropertyNotify and ConfigureNotify handlers.
   restored_bounds_ = bounds_;
 
   SetWMSpecState(true,
@@ -614,10 +616,27 @@
 }
 
 void DesktopWindowTreeHostX11::SetFullscreen(bool fullscreen) {
+  if (is_fullscreen_ == fullscreen)
+    return;
   is_fullscreen_ = fullscreen;
   SetWMSpecState(fullscreen,
                  atom_cache_.GetAtom("_NET_WM_STATE_FULLSCREEN"),
                  None);
+  // Try to guess the size we will have after the switch to/from fullscreen:
+  // - (may) avoid transient states
+  // - works around Flash content which expects to have the size updated
+  //   synchronously.
+  // See https://crbug.com/361408
+  if (fullscreen) {
+    restored_bounds_ = bounds_;
+    const gfx::Display display =
+        gfx::Screen::GetScreenFor(NULL)->GetDisplayNearestWindow(window());
+    bounds_ = display.bounds();
+  } else {
+    bounds_ = restored_bounds_;
+  }
+  OnHostMoved(bounds_.origin());
+  OnHostResized(bounds_.size());
 }
 
 bool DesktopWindowTreeHostX11::IsFullscreen() const {
@@ -1316,8 +1335,6 @@
   switch (xev->type) {
     case EnterNotify:
     case LeaveNotify: {
-      if (!g_current_capture)
-        X11DesktopHandler::get()->ProcessXEvent(xev);
       ui::MouseEvent mouse_event(xev);
       DispatchMouseEvent(&mouse_event);
       break;
@@ -1365,6 +1382,7 @@
       if (xev->xfocus.mode != NotifyGrab) {
         ReleaseCapture();
         OnHostLostWindowCapture();
+        X11DesktopHandler::get()->ProcessXEvent(xev);
       } else {
         dispatcher()->OnHostLostMouseGrab();
       }
diff --git a/ui/views/widget/desktop_aura/x11_desktop_handler.cc b/ui/views/widget/desktop_aura/x11_desktop_handler.cc
index 170b5f7..0d764e4 100644
--- a/ui/views/widget/desktop_aura/x11_desktop_handler.cc
+++ b/ui/views/widget/desktop_aura/x11_desktop_handler.cc
@@ -104,21 +104,14 @@
 
 void X11DesktopHandler::ProcessXEvent(XEvent* event) {
   switch (event->type) {
-    case EnterNotify:
-      if (event->xcrossing.focus == True &&
-          current_window_ != event->xcrossing.window)
-        OnActiveWindowChanged(event->xcrossing.window);
-      break;
-    case LeaveNotify:
-      if (event->xcrossing.focus == False &&
-          current_window_ == event->xcrossing.window)
-        OnActiveWindowChanged(None);
-      break;
     case FocusIn:
-      if (event->xfocus.mode == NotifyNormal &&
-          current_window_ != event->xfocus.window)
+      if (current_window_ != event->xfocus.window)
         OnActiveWindowChanged(event->xfocus.window);
       break;
+    case FocusOut:
+      if (current_window_ == event->xfocus.window)
+        OnActiveWindowChanged(None);
+      break;
     default:
       NOTREACHED();
   }
diff --git a/ui/views/widget/desktop_aura/x11_whole_screen_move_loop.cc b/ui/views/widget/desktop_aura/x11_whole_screen_move_loop.cc
index 250b9de..e465174 100644
--- a/ui/views/widget/desktop_aura/x11_whole_screen_move_loop.cc
+++ b/ui/views/widget/desktop_aura/x11_whole_screen_move_loop.cc
@@ -131,6 +131,8 @@
 
 bool X11WholeScreenMoveLoop::RunMoveLoop(aura::Window* source,
                                          gfx::NativeCursor cursor) {
+  DCHECK(!in_move_loop_);  // Can only handle one nested loop at a time.
+
   // Start a capture on the host, so that it continues to receive events during
   // the drag. This may be second time we are capturing the mouse events - the
   // first being when a mouse is first pressed. That first capture needs to be
@@ -140,23 +142,21 @@
   {
     ScopedCapturer capturer(source->GetHost());
 
-    DCHECK(!in_move_loop_);  // Can only handle one nested loop at a time.
-    in_move_loop_ = true;
-
-    XDisplay* display = gfx::GetXDisplay();
-
-    grab_input_window_ = CreateDragInputWindow(display);
-    if (!drag_image_.isNull() && CheckIfIconValid())
-      CreateDragImageWindow();
-    ui::PlatformEventSource::GetInstance()->AddPlatformEventDispatcher(this);
+    grab_input_window_ = CreateDragInputWindow(gfx::GetXDisplay());
     // Releasing ScopedCapturer ensures that any other instance of
     // X11ScopedCapture will not prematurely release grab that will be acquired
     // below.
   }
   // TODO(varkha): Consider integrating GrabPointerAndKeyboard with
   // ScopedCapturer to avoid possibility of logically keeping multiple grabs.
-  if (!GrabPointerAndKeyboard(cursor))
+  if (!GrabPointerAndKeyboard(cursor)) {
+    XDestroyWindow(gfx::GetXDisplay(), grab_input_window_);
     return false;
+  }
+
+  ui::PlatformEventSource::GetInstance()->AddPlatformEventDispatcher(this);
+  if (!drag_image_.isNull() && CheckIfIconValid())
+    CreateDragImageWindow();
 
   // We are handling a mouse drag outside of the aura::RootWindow system. We
   // must manually make aura think that the mouse button is pressed so that we
@@ -167,6 +167,7 @@
     should_reset_mouse_flags_ = true;
   }
 
+  in_move_loop_ = true;
   canceled_ = false;
   base::MessageLoopForUI* loop = base::MessageLoopForUI::current();
   base::MessageLoop::ScopedNestableTaskAllower allow_nested(loop);
diff --git a/ui/views/widget/desktop_aura/x11_window_event_filter.cc b/ui/views/widget/desktop_aura/x11_window_event_filter.cc
index d6fbfc0..887bb97 100644
--- a/ui/views/widget/desktop_aura/x11_window_event_filter.cc
+++ b/ui/views/widget/desktop_aura/x11_window_event_filter.cc
@@ -68,7 +68,8 @@
       x_root_window_(DefaultRootWindow(xdisplay_)),
       atom_cache_(xdisplay_, kAtomsToCache),
       window_tree_host_(window_tree_host),
-      is_active_(false) {
+      is_active_(false),
+      click_component_(HTNOWHERE) {
 }
 
 X11WindowEventFilter::~X11WindowEventFilter() {
@@ -102,8 +103,13 @@
   if (!target->delegate())
     return;
 
+  int previous_click_component = HTNOWHERE;
   int component =
       target->delegate()->GetNonClientComponent(event->location());
+  if (event->IsLeftMouseButton()) {
+    previous_click_component = click_component_;
+    click_component_ = component;
+  }
   if (component == HTCLIENT)
     return;
 
@@ -134,15 +140,18 @@
   }
 
   // Left button case.
-  if (event->flags() & ui::EF_IS_DOUBLE_CLICK &&
-      component == HTCAPTION &&
-      target->GetProperty(aura::client::kCanMaximizeKey)) {
-    // Our event is a double click in the caption area in a window that can be
-    // maximized. We are responsible for dispatching this as a minimize/
-    // maximize on X11 (Windows converts this to min/max events for us).
-    ToggleMaximizedState();
-    event->SetHandled();
-    return;
+  if (event->flags() & ui::EF_IS_DOUBLE_CLICK) {
+    click_component_ = HTNOWHERE;
+    if (component == HTCAPTION &&
+        target->GetProperty(aura::client::kCanMaximizeKey) &&
+        previous_click_component == component) {
+      // Our event is a double click in the caption area in a window that can be
+      // maximized. We are responsible for dispatching this as a minimize/
+      // maximize on X11 (Windows converts this to min/max events for us).
+      ToggleMaximizedState();
+      event->SetHandled();
+      return;
+    }
   }
 
   // Get the |x_root_window_| location out of the native event.
diff --git a/ui/views/widget/desktop_aura/x11_window_event_filter.h b/ui/views/widget/desktop_aura/x11_window_event_filter.h
index 47bc69f..5c7e722 100644
--- a/ui/views/widget/desktop_aura/x11_window_event_filter.h
+++ b/ui/views/widget/desktop_aura/x11_window_event_filter.h
@@ -60,6 +60,13 @@
   // True if |xwindow_| is the current _NET_ACTIVE_WINDOW.
   bool is_active_;
 
+  // The non-client component for the target of a MouseEvent. Mouse events can
+  // be destructive to the window tree, which can cause the component of a
+  // ui::EF_IS_DOUBLE_CLICK event to no longer be the same as that of the
+  // initial click. Acting on a double click should only occur for matching
+  // components.
+  int click_component_;
+
   DISALLOW_COPY_AND_ASSIGN(X11WindowEventFilter);
 };
 
diff --git a/ui/views/widget/monitor_win.cc b/ui/views/widget/monitor_win.cc
index 2c6d830..1220671 100644
--- a/ui/views/widget/monitor_win.cc
+++ b/ui/views/widget/monitor_win.cc
@@ -4,10 +4,9 @@
 
 #include "ui/views/widget/monitor_win.h"
 
-#include <shellapi.h>
+#include <windows.h>
 
 #include "base/logging.h"
-#include "base/win/win_util.h"
 #include "ui/gfx/rect.h"
 
 namespace views {
@@ -16,8 +15,7 @@
   RECT p_rect = rect.ToRECT();
   HMONITOR monitor = MonitorFromRect(&p_rect, MONITOR_DEFAULTTONEAREST);
   if (monitor) {
-    MONITORINFO mi = {0};
-    mi.cbSize = sizeof(mi);
+    MONITORINFO mi = { sizeof(MONITORINFO) };
     GetMonitorInfo(monitor, &mi);
     return gfx::Rect(mi.rcWork);
   }
@@ -25,15 +23,4 @@
   return gfx::Rect();
 }
 
-HWND GetTopmostAutoHideTaskbarForEdge(UINT edge, HMONITOR monitor) {
-  // NOTE: this may be invoked on a background thread.
-  APPBARDATA taskbar_data =  { sizeof(APPBARDATA), NULL, 0, edge };
-  HWND taskbar = reinterpret_cast<HWND>(SHAppBarMessage(ABM_GETAUTOHIDEBAR,
-                                                        &taskbar_data));
-  return (::IsWindow(taskbar) && (monitor != NULL) &&
-         (MonitorFromWindow(taskbar, MONITOR_DEFAULTTONULL) == monitor) &&
-         (GetWindowLong(taskbar, GWL_EXSTYLE) & WS_EX_TOPMOST)) ?
-      taskbar : NULL;
-}
-
 }  // namespace views
diff --git a/ui/views/widget/monitor_win.h b/ui/views/widget/monitor_win.h
index 87bdc4e..ef4d3dd 100644
--- a/ui/views/widget/monitor_win.h
+++ b/ui/views/widget/monitor_win.h
@@ -5,8 +5,6 @@
 #ifndef UI_VIEWS_WIDGET_MONITOR_WIN_H_
 #define UI_VIEWS_WIDGET_MONITOR_WIN_H_
 
-#include <windows.h>
-
 #include "ui/views/views_export.h"
 
 namespace gfx {
@@ -19,14 +17,6 @@
 // intersection with the specified rectangle.
 VIEWS_EXPORT gfx::Rect GetMonitorBoundsForRect(const gfx::Rect& rect);
 
-// Returns the always-on-top auto-hiding taskbar for edge |edge| (one of
-// ABE_LEFT, TOP, RIGHT, or BOTTOM) of monitor |monitor|. NULL is returned
-// if nothing is found.
-//
-// WARNING: this function spawns a nested message loop. Use Appbar instead if
-// possible.
-VIEWS_EXPORT HWND GetTopmostAutoHideTaskbarForEdge(UINT edge, HMONITOR monitor);
-
 }  // namespace views
 
 #endif  // UI_VIEWS_WIDGET_MONITOR_WIN_H_
diff --git a/ui/views/win/appbar.cc b/ui/views/win/appbar.cc
deleted file mode 100644
index 92151d4..0000000
--- a/ui/views/win/appbar.cc
+++ /dev/null
@@ -1,88 +0,0 @@
-// Copyright 2013 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 "ui/views/win/appbar.h"
-
-#include <shellapi.h>
-
-#include "base/auto_reset.h"
-#include "base/bind.h"
-#include "base/location.h"
-#include "base/threading/worker_pool.h"
-#include "base/win/scoped_com_initializer.h"
-#include "ui/views/widget/monitor_win.h"
-
-namespace views {
-
-namespace {
-
-void GetEdgesOnWorkerThread(HMONITOR monitor, int* edge) {
-  base::win::ScopedCOMInitializer com_initializer;
-  *edge = 0;
-  if (GetTopmostAutoHideTaskbarForEdge(ABE_LEFT, monitor))
-    *edge = Appbar::EDGE_LEFT;
-  if (GetTopmostAutoHideTaskbarForEdge(ABE_TOP, monitor))
-    *edge = Appbar::EDGE_TOP;
-  if (GetTopmostAutoHideTaskbarForEdge(ABE_RIGHT, monitor))
-    *edge = Appbar::EDGE_RIGHT;
-  if (GetTopmostAutoHideTaskbarForEdge(ABE_BOTTOM, monitor))
-    *edge = Appbar::EDGE_BOTTOM;
-}
-
-}
-
-// static
-Appbar* Appbar::instance() {
-  static Appbar* appbar = NULL;
-  if (!appbar)
-    appbar = new Appbar();
-  return appbar;
-}
-
-int Appbar::GetAutohideEdges(HMONITOR monitor, const base::Closure& callback) {
-  // Initialize the map with EDGE_BOTTOM. This is important, as if we return an
-  // initial value of 0 (no auto-hide edges) then we'll go fullscreen and
-  // windows will automatically remove WS_EX_TOPMOST from the appbar resulting
-  // in us thinking there is no auto-hide edges. By returning at least one edge
-  // we don't initially go fullscreen until we figure out the real auto-hide
-  // edges.
-  if (edge_map_.find(monitor) == edge_map_.end())
-    edge_map_[monitor] = Appbar::EDGE_BOTTOM;
-  if (!in_callback_) {
-    int* edge = new int;
-    base::WorkerPool::PostTaskAndReply(
-        FROM_HERE,
-        base::Bind(&GetEdgesOnWorkerThread,
-                   monitor,
-                   base::Unretained(edge)),
-        base::Bind(&Appbar::OnGotEdges,
-                   weak_factory_.GetWeakPtr(),
-                   callback,
-                   monitor,
-                   edge_map_[monitor],
-                   base::Owned(edge)),
-        false);
-  }
-  return edge_map_[monitor];
-}
-
-Appbar::Appbar() : weak_factory_(this), in_callback_(false) {
-}
-
-Appbar::~Appbar() {
-}
-
-void Appbar::OnGotEdges(const base::Closure& callback,
-                        HMONITOR monitor,
-                        int returned_edges,
-                        int* edges) {
-  edge_map_[monitor] = *edges;
-  if (returned_edges == *edges)
-    return;
-
-  base::AutoReset<bool> in_callback_setter(&in_callback_, true);
-  callback.Run();
-}
-
-}  // namespace views
diff --git a/ui/views/win/appbar.h b/ui/views/win/appbar.h
deleted file mode 100644
index 4c24c19..0000000
--- a/ui/views/win/appbar.h
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright 2013 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 UI_VIEWS_WIN_APPBAR_H_
-#define UI_VIEWS_WIN_APPBAR_H_
-
-#include <map>
-
-#include <windows.h>
-
-#include "base/basictypes.h"
-#include "base/callback_forward.h"
-#include "base/memory/weak_ptr.h"
-
-namespace views {
-
-// Appbar provides an API to query for the edges of the monitor that have an
-// autohide bar.
-// NOTE: querying is done on a separate thread as it spawns a nested message
-// loop. The nested message loop is particularly problematic here as it's
-// possible for the nested message loop to run during window creation and
-// startup time (WM_NCCALCSIZE is called at creation time).
-class Appbar {
- public:
-  enum Edge {
-    EDGE_TOP    = 1 << 0,
-    EDGE_LEFT   = 1 << 1,
-    EDGE_BOTTOM = 1 << 2,
-    EDGE_RIGHT  = 1 << 3,
-  };
-
-  // Returns the singleton instance.
-  static Appbar* instance();
-
-  // Starts a query for the autohide edges of the specified monitor and returns
-  // the current value. If the edges have changed |callback| is subsequently
-  // invoked. If the edges have not changed |callback| is never run.
-  //
-  // Return value is a bitmask of Edges.
-  int GetAutohideEdges(HMONITOR monitor, const base::Closure& callback);
-
- private:
-  typedef std::map<HMONITOR, int> EdgeMap;
-
-  Appbar();
-  ~Appbar();
-
-  // Callback on main thread with the edges. |returned_edges| is the value that
-  // was returned from the call to GetAutohideEdges() that initiated the lookup.
-  void OnGotEdges(const base::Closure& callback,
-                  HMONITOR monitor,
-                  int returned_edges,
-                  int* edges);
-
-  EdgeMap edge_map_;
-
-  base::WeakPtrFactory<Appbar> weak_factory_;
-
-  // If true we're in the process of notifying a callback. When true we do not
-  // start a new query.
-  bool in_callback_;
-
-  DISALLOW_COPY_AND_ASSIGN(Appbar);
-};
-
-}  // namespace views
-
-#endif  // UI_VIEWS_WIN_APPBAR_H_
-
diff --git a/ui/views/win/hwnd_message_handler.cc b/ui/views/win/hwnd_message_handler.cc
index a647d20..e2c9a13 100644
--- a/ui/views/win/hwnd_message_handler.cc
+++ b/ui/views/win/hwnd_message_handler.cc
@@ -38,7 +38,6 @@
 #include "ui/views/views_delegate.h"
 #include "ui/views/widget/monitor_win.h"
 #include "ui/views/widget/widget_hwnd_utils.h"
-#include "ui/views/win/appbar.h"
 #include "ui/views/win/fullscreen_handler.h"
 #include "ui/views/win/hwnd_message_handler_delegate.h"
 #include "ui/views/win/scoped_fullscreen_visibility.h"
@@ -971,10 +970,12 @@
 
 int HWNDMessageHandler::GetAppbarAutohideEdges(HMONITOR monitor) {
   autohide_factory_.InvalidateWeakPtrs();
-  return Appbar::instance()->GetAutohideEdges(
-      monitor,
-      base::Bind(&HWNDMessageHandler::OnAppbarAutohideEdgesChanged,
-                 autohide_factory_.GetWeakPtr()));
+  return ViewsDelegate::views_delegate ?
+      ViewsDelegate::views_delegate->GetAppbarAutohideEdges(
+          monitor,
+          base::Bind(&HWNDMessageHandler::OnAppbarAutohideEdgesChanged,
+                     autohide_factory_.GetWeakPtr())) :
+      ViewsDelegate::EDGE_BOTTOM;
 }
 
 void HWNDMessageHandler::OnAppbarAutohideEdgesChanged() {
@@ -1089,7 +1090,8 @@
   if (IsMaximized()) {
     // Windows automatically adds a standard width border to all sides when a
     // window is maximized.
-    int border_thickness = GetSystemMetrics(SM_CXSIZEFRAME);
+    int border_thickness =
+        GetSystemMetrics(SM_CXSIZEFRAME) + GetSystemMetrics(SM_CXPADDEDBORDER);
     if (remove_standard_frame_)
       border_thickness -= 1;
     *insets = gfx::Insets(
@@ -1667,9 +1669,9 @@
       }
     }
     const int autohide_edges = GetAppbarAutohideEdges(monitor);
-    if (autohide_edges & Appbar::EDGE_LEFT)
+    if (autohide_edges & ViewsDelegate::EDGE_LEFT)
       client_rect->left += kAutoHideTaskbarThicknessPx;
-    if (autohide_edges & Appbar::EDGE_TOP) {
+    if (autohide_edges & ViewsDelegate::EDGE_TOP) {
       if (!delegate_->IsUsingCustomFrame()) {
         // Tricky bit.  Due to a bug in DwmDefWindowProc()'s handling of
         // WM_NCHITTEST, having any nonclient area atop the window causes the
@@ -1685,9 +1687,9 @@
         client_rect->top += kAutoHideTaskbarThicknessPx;
       }
     }
-    if (autohide_edges & Appbar::EDGE_RIGHT)
+    if (autohide_edges & ViewsDelegate::EDGE_RIGHT)
       client_rect->right -= kAutoHideTaskbarThicknessPx;
-    if (autohide_edges & Appbar::EDGE_BOTTOM)
+    if (autohide_edges & ViewsDelegate::EDGE_BOTTOM)
       client_rect->bottom -= kAutoHideTaskbarThicknessPx;
 
     // We cannot return WVR_REDRAW when there is nonclient area, or Windows
@@ -1757,8 +1759,10 @@
         // the vertical scrollar down arrow would be drawn.
         // We check if the hittest coordinates lie in this region and if yes
         // we return HTCLIENT.
-        int border_width = ::GetSystemMetrics(SM_CXSIZEFRAME);
-        int border_height = ::GetSystemMetrics(SM_CYSIZEFRAME);
+        int border_width = ::GetSystemMetrics(SM_CXSIZEFRAME) +
+                           GetSystemMetrics(SM_CXPADDEDBORDER);
+        int border_height = ::GetSystemMetrics(SM_CYSIZEFRAME) +
+                            GetSystemMetrics(SM_CXPADDEDBORDER);
         int scroll_width = ::GetSystemMetrics(SM_CXVSCROLL);
         int scroll_height = ::GetSystemMetrics(SM_CYVSCROLL);
         RECT window_rect;
@@ -2221,7 +2225,8 @@
           new_window_rect = monitor_rect;
         } else if (IsMaximized()) {
           new_window_rect = work_area;
-          int border_thickness = GetSystemMetrics(SM_CXSIZEFRAME);
+          int border_thickness = GetSystemMetrics(SM_CXSIZEFRAME) +
+                                 GetSystemMetrics(SM_CXPADDEDBORDER);
           new_window_rect.Inset(-border_thickness, -border_thickness);
         } else {
           new_window_rect = gfx::Rect(window_rect);
diff --git a/ui/views/win/hwnd_message_handler.h b/ui/views/win/hwnd_message_handler.h
index 9b29b1d..f4fc19a 100644
--- a/ui/views/win/hwnd_message_handler.h
+++ b/ui/views/win/hwnd_message_handler.h
@@ -229,11 +229,13 @@
                                          WPARAM w_param,
                                          LPARAM l_param) OVERRIDE;
 
-  // Returns the auto-hide edges of the appbar. See Appbar::GetAutohideEdges()
-  // for details. If the edges change OnAppbarAutohideEdgesChanged() is called.
+  // Returns the auto-hide edges of the appbar. See
+  // ViewsDelegate::GetAppbarAutohideEdges() for details. If the edges change,
+  // OnAppbarAutohideEdgesChanged() is called.
   int GetAppbarAutohideEdges(HMONITOR monitor);
 
-  // Callback if the autohide edges have changed. See Appbar for details.
+  // Callback if the autohide edges have changed. See
+  // ViewsDelegate::GetAppbarAutohideEdges() for details.
   void OnAppbarAutohideEdgesChanged();
 
   // Can be called after the delegate has had the opportunity to set focus and
diff --git a/ui/webui/resources/js/cr/ui/list.js b/ui/webui/resources/js/cr/ui/list.js
index 1dc38b6..3f1d1a8 100644
--- a/ui/webui/resources/js/cr/ui/list.js
+++ b/ui/webui/resources/js/cr/ui/list.js
@@ -631,6 +631,7 @@
         }
       }
       this.cachedItems_ = newCachedItems;
+      this.pinnedItem_ = null;
 
       var newCachedItemHeights = {};
       for (var index in this.cachedItemHeights_) {
diff --git a/ui/wm/core/base_focus_rules.h b/ui/wm/core/base_focus_rules.h
index 7195dad..07dfb65 100644
--- a/ui/wm/core/base_focus_rules.h
+++ b/ui/wm/core/base_focus_rules.h
@@ -13,7 +13,7 @@
 
 // A set of basic focus and activation rules. Specializations should most likely
 // subclass this and call up to these methods rather than reimplementing them.
-class WM_CORE_EXPORT BaseFocusRules : public FocusRules {
+class WM_EXPORT BaseFocusRules : public FocusRules {
  protected:
   BaseFocusRules();
   virtual ~BaseFocusRules();
diff --git a/ui/wm/core/capture_controller.h b/ui/wm/core/capture_controller.h
index a368b63..d802818 100644
--- a/ui/wm/core/capture_controller.h
+++ b/ui/wm/core/capture_controller.h
@@ -11,12 +11,12 @@
 #include "base/compiler_specific.h"
 #include "ui/aura/client/capture_client.h"
 #include "ui/aura/window_observer.h"
-#include "ui/wm/core/wm_core_export.h"
+#include "ui/wm/wm_export.h"
 
 namespace wm {
 
 // Internal CaptureClient implementation. See ScopedCaptureClient for details.
-class WM_CORE_EXPORT CaptureController : public aura::client::CaptureClient {
+class WM_EXPORT CaptureController : public aura::client::CaptureClient {
  public:
   // Adds |root| to the list of RootWindows notified when capture changes.
   void Attach(aura::Window* root);
@@ -53,7 +53,7 @@
 // ScopedCaptureClient is responsible for creating a CaptureClient for a
 // RootWindow. Specifically it creates a single CaptureController that is shared
 // among all ScopedCaptureClients and adds the RootWindow to it.
-class WM_CORE_EXPORT ScopedCaptureClient : public aura::WindowObserver {
+class WM_EXPORT ScopedCaptureClient : public aura::WindowObserver {
  public:
   explicit ScopedCaptureClient(aura::Window* root);
   virtual ~ScopedCaptureClient();
diff --git a/ui/wm/core/compound_event_filter.cc b/ui/wm/core/compound_event_filter.cc
index 21270e3..d1f652c 100644
--- a/ui/wm/core/compound_event_filter.cc
+++ b/ui/wm/core/compound_event_filter.cc
@@ -30,8 +30,7 @@
 bool ShouldHideCursorOnTouch(const ui::TouchEvent& event) {
 #if defined(OS_WIN)
   return true;
-#endif  // defind(OS_WIN)
-#if defined(OS_CHROMEOS)
+#elif defined(OS_CHROMEOS)
 #if defined(USE_X11)
   int device_id = event.source_device_id();
   if (device_id >= 0 &&
diff --git a/ui/wm/core/compound_event_filter.h b/ui/wm/core/compound_event_filter.h
index 4b72673..ab4fdf8 100644
--- a/ui/wm/core/compound_event_filter.h
+++ b/ui/wm/core/compound_event_filter.h
@@ -10,7 +10,7 @@
 #include "ui/events/event.h"
 #include "ui/events/event_handler.h"
 #include "ui/gfx/native_widget_types.h"
-#include "ui/wm/core/wm_core_export.h"
+#include "ui/wm/wm_export.h"
 
 namespace aura {
 class CursorManager;
@@ -37,7 +37,7 @@
 // consumed by any of those filters. If an event is consumed by a filter, the
 // rest of the filter(s) and CompoundEventFilter will not see the consumed
 // event.
-class WM_CORE_EXPORT CompoundEventFilter : public ui::EventHandler {
+class WM_EXPORT CompoundEventFilter : public ui::EventHandler {
  public:
   CompoundEventFilter();
   virtual ~CompoundEventFilter();
diff --git a/ui/wm/core/cursor_manager.h b/ui/wm/core/cursor_manager.h
index 0fe25f7..f60ef14 100644
--- a/ui/wm/core/cursor_manager.h
+++ b/ui/wm/core/cursor_manager.h
@@ -14,7 +14,7 @@
 #include "ui/gfx/native_widget_types.h"
 #include "ui/gfx/point.h"
 #include "ui/wm/core/native_cursor_manager_delegate.h"
-#include "ui/wm/core/wm_core_export.h"
+#include "ui/wm/wm_export.h"
 
 namespace gfx {
 class Display;
@@ -36,8 +36,8 @@
 // requests to queue any further changes until a later time. It sends changes
 // to the NativeCursorManager, which communicates back to us when these changes
 // were made through the NativeCursorManagerDelegate interface.
-class WM_CORE_EXPORT CursorManager : public aura::client::CursorClient,
-                                     public NativeCursorManagerDelegate {
+class WM_EXPORT CursorManager : public aura::client::CursorClient,
+                                public NativeCursorManagerDelegate {
  public:
   explicit CursorManager(scoped_ptr<NativeCursorManager> delegate);
   virtual ~CursorManager();
diff --git a/ui/wm/core/easy_resize_window_targeter.h b/ui/wm/core/easy_resize_window_targeter.h
index fae6d46..90b0848 100644
--- a/ui/wm/core/easy_resize_window_targeter.h
+++ b/ui/wm/core/easy_resize_window_targeter.h
@@ -7,13 +7,13 @@
 
 #include "ui/aura/window_targeter.h"
 #include "ui/gfx/geometry/insets.h"
-#include "ui/wm/core/wm_core_export.h"
+#include "ui/wm/wm_export.h"
 
 namespace wm {
 
 // An EventTargeter for a container window that uses a slightly larger
 // hit-target region for easier resize.
-class WM_CORE_EXPORT EasyResizeWindowTargeter : public aura::WindowTargeter {
+class WM_EXPORT EasyResizeWindowTargeter : public aura::WindowTargeter {
  public:
   // |container| window is the owner of this targeter.
   EasyResizeWindowTargeter(aura::Window* container,
diff --git a/ui/wm/core/focus_controller.h b/ui/wm/core/focus_controller.h
index fecdd2e..3366ea0 100644
--- a/ui/wm/core/focus_controller.h
+++ b/ui/wm/core/focus_controller.h
@@ -12,8 +12,8 @@
 #include "ui/aura/client/focus_client.h"
 #include "ui/aura/window_observer.h"
 #include "ui/events/event_handler.h"
-#include "ui/wm/core/wm_core_export.h"
 #include "ui/wm/public/activation_client.h"
+#include "ui/wm/wm_export.h"
 
 namespace wm {
 
@@ -34,10 +34,10 @@
 // . Window disposition changes (implemented here in aura::WindowObserver).
 //   (The FocusController registers itself as an observer of the active and
 //    focused windows).
-class WM_CORE_EXPORT FocusController : public aura::client::ActivationClient,
-                                       public aura::client::FocusClient,
-                                       public ui::EventHandler,
-                                       public aura::WindowObserver {
+class WM_EXPORT FocusController : public aura::client::ActivationClient,
+                                  public aura::client::FocusClient,
+                                  public ui::EventHandler,
+                                  public aura::WindowObserver {
  public:
   // |rules| cannot be NULL.
   explicit FocusController(FocusRules* rules);
diff --git a/ui/wm/core/focus_rules.h b/ui/wm/core/focus_rules.h
index 79ffd74..cb9a4dd 100644
--- a/ui/wm/core/focus_rules.h
+++ b/ui/wm/core/focus_rules.h
@@ -5,7 +5,7 @@
 #ifndef UI_WM_CORE_FOCUS_RULES_H_
 #define UI_WM_CORE_FOCUS_RULES_H_
 
-#include "ui/wm/core/wm_core_export.h"
+#include "ui/wm/wm_export.h"
 
 namespace aura {
 class Window;
@@ -15,7 +15,7 @@
 
 // Implemented by an object that establishes the rules about what can be
 // focused or activated.
-class WM_CORE_EXPORT FocusRules {
+class WM_EXPORT FocusRules {
  public:
   virtual ~FocusRules() {}
 
diff --git a/ui/wm/core/image_grid.h b/ui/wm/core/image_grid.h
index 49ac642..bee1e46 100644
--- a/ui/wm/core/image_grid.h
+++ b/ui/wm/core/image_grid.h
@@ -12,7 +12,7 @@
 #include "ui/compositor/layer_delegate.h"
 #include "ui/gfx/rect.h"
 #include "ui/gfx/size.h"
-#include "ui/wm/core/wm_core_export.h"
+#include "ui/wm/wm_export.h"
 
 namespace gfx {
 class Image;
@@ -56,10 +56,10 @@
 //   | xXX|
 //   ...
 //
-class WM_CORE_EXPORT ImageGrid {
+class WM_EXPORT ImageGrid {
  public:
   // Helper class for use by tests.
-  class WM_CORE_EXPORT TestAPI {
+  class WM_EXPORT TestAPI {
    public:
     TestAPI(ImageGrid* grid) : grid_(grid) {}
 
diff --git a/ui/wm/core/input_method_event_filter.h b/ui/wm/core/input_method_event_filter.h
index 17a6a0e..c4033d1 100644
--- a/ui/wm/core/input_method_event_filter.h
+++ b/ui/wm/core/input_method_event_filter.h
@@ -11,7 +11,7 @@
 #include "ui/base/ime/input_method_delegate.h"
 #include "ui/events/event_handler.h"
 #include "ui/gfx/native_widget_types.h"
-#include "ui/wm/core/wm_core_export.h"
+#include "ui/wm/wm_export.h"
 
 namespace ui {
 class EventProcessor;
@@ -22,7 +22,7 @@
 
 // An event filter that forwards a KeyEvent to a system IME, and dispatches a
 // TranslatedKeyEvent to the root window as needed.
-class WM_CORE_EXPORT InputMethodEventFilter
+class WM_EXPORT InputMethodEventFilter
     : public ui::EventHandler,
       public ui::internal::InputMethodDelegate {
  public:
diff --git a/ui/wm/core/input_method_event_filter_unittest.cc b/ui/wm/core/input_method_event_filter_unittest.cc
index 038ec00..6fc1b39 100644
--- a/ui/wm/core/input_method_event_filter_unittest.cc
+++ b/ui/wm/core/input_method_event_filter_unittest.cc
@@ -27,35 +27,36 @@
 typedef aura::test::AuraTestBase InputMethodEventFilterTest;
 
 TEST_F(InputMethodEventFilterTest, TestInputMethodProperty) {
-  CompoundEventFilter* root_filter = new CompoundEventFilter;
-  root_window()->SetEventFilter(root_filter);
+  CompoundEventFilter root_filter;
+  root_window()->AddPreTargetHandler(&root_filter);
 
   InputMethodEventFilter input_method_event_filter(
       host()->GetAcceleratedWidget());
-  root_filter->AddHandler(&input_method_event_filter);
+  root_filter.AddHandler(&input_method_event_filter);
 
   // Tests if InputMethodEventFilter adds a window property on its
   // construction.
   EXPECT_TRUE(root_window()->GetProperty(
       aura::client::kRootWindowInputMethodKey));
 
-  root_filter->RemoveHandler(&input_method_event_filter);
+  root_filter.RemoveHandler(&input_method_event_filter);
+  root_window()->RemovePreTargetHandler(&root_filter);
 }
 
 // Tests if InputMethodEventFilter dispatches a ui::ET_TRANSLATED_KEY_* event to
 // the root window.
 TEST_F(InputMethodEventFilterTest, TestInputMethodKeyEventPropagation) {
-  CompoundEventFilter* root_filter = new CompoundEventFilter;
-  root_window()->SetEventFilter(root_filter);
+  CompoundEventFilter root_filter;
+  root_window()->AddPreTargetHandler(&root_filter);
 
   // Add the InputMethodEventFilter before the TestEventFilter.
   InputMethodEventFilter input_method_event_filter(
       host()->GetAcceleratedWidget());
-  root_filter->AddHandler(&input_method_event_filter);
+  root_filter.AddHandler(&input_method_event_filter);
 
   // Add TestEventFilter to the RootWindow.
   ui::test::TestEventHandler test_filter;
-  root_filter->AddHandler(&test_filter);
+  root_filter.AddHandler(&test_filter);
 
   // We need an active window. Otherwise, the root window will not forward a key
   // event to event filters.
@@ -79,11 +80,12 @@
   generator.ReleaseKey(ui::VKEY_SPACE, 0);
   EXPECT_EQ(2, test_filter.num_key_events());
 
-  root_filter->RemoveHandler(&input_method_event_filter);
-  root_filter->RemoveHandler(&test_filter);
+  root_filter.RemoveHandler(&input_method_event_filter);
+  root_filter.RemoveHandler(&test_filter);
 
   // Reset window before |test_delegate| gets deleted.
   window.reset();
+  root_window()->RemovePreTargetHandler(&root_filter);
 }
 
 }  // namespace wm
diff --git a/ui/wm/core/masked_window_targeter.h b/ui/wm/core/masked_window_targeter.h
index 846021a..46cf4d2 100644
--- a/ui/wm/core/masked_window_targeter.h
+++ b/ui/wm/core/masked_window_targeter.h
@@ -6,7 +6,7 @@
 #define UI_WM_CORE_MASKED_WINDOW_TARGETER_H_
 
 #include "ui/aura/window_targeter.h"
-#include "ui/wm/core/wm_core_export.h"
+#include "ui/wm/wm_export.h"
 
 namespace gfx {
 class Path;
@@ -14,7 +14,7 @@
 
 namespace wm {
 
-class WM_CORE_EXPORT MaskedWindowTargeter : public aura::WindowTargeter {
+class WM_EXPORT MaskedWindowTargeter : public aura::WindowTargeter {
  public:
   explicit MaskedWindowTargeter(aura::Window* masked_window);
   virtual ~MaskedWindowTargeter();
diff --git a/ui/wm/core/native_cursor_manager.h b/ui/wm/core/native_cursor_manager.h
index 6697728..c1da74d 100644
--- a/ui/wm/core/native_cursor_manager.h
+++ b/ui/wm/core/native_cursor_manager.h
@@ -7,7 +7,7 @@
 
 #include "base/strings/string16.h"
 #include "ui/wm/core/native_cursor_manager_delegate.h"
-#include "ui/wm/core/wm_core_export.h"
+#include "ui/wm/wm_export.h"
 
 namespace gfx {
 class Display;
@@ -19,7 +19,7 @@
 // requested changes to cursor state. When requested, implementer should tell
 // the CursorManager of any actual state changes performed through the
 // delegate.
-class WM_CORE_EXPORT NativeCursorManager {
+class WM_EXPORT NativeCursorManager {
  public:
   virtual ~NativeCursorManager() {}
 
diff --git a/ui/wm/core/native_cursor_manager_delegate.h b/ui/wm/core/native_cursor_manager_delegate.h
index aad9825..1393b2c 100644
--- a/ui/wm/core/native_cursor_manager_delegate.h
+++ b/ui/wm/core/native_cursor_manager_delegate.h
@@ -7,14 +7,14 @@
 
 #include "ui/base/cursor/cursor.h"
 #include "ui/gfx/native_widget_types.h"
-#include "ui/wm/core/wm_core_export.h"
+#include "ui/wm/wm_export.h"
 
 namespace wm {
 
 // The non-public interface that CursorManager exposes to its users. This
 // gives accessors to all the current state, and mutators to all the current
 // state.
-class WM_CORE_EXPORT NativeCursorManagerDelegate {
+class WM_EXPORT NativeCursorManagerDelegate {
  public:
   virtual ~NativeCursorManagerDelegate() {}
 
diff --git a/ui/wm/core/shadow.h b/ui/wm/core/shadow.h
index fa42976..c153ecf 100644
--- a/ui/wm/core/shadow.h
+++ b/ui/wm/core/shadow.h
@@ -9,7 +9,7 @@
 #include "base/memory/scoped_ptr.h"
 #include "ui/compositor/layer_animation_observer.h"
 #include "ui/gfx/rect.h"
-#include "ui/wm/core/wm_core_export.h"
+#include "ui/wm/wm_export.h"
 
 namespace ui {
 class Layer;
@@ -20,7 +20,7 @@
 class ImageGrid;
 
 // Simple class that draws a drop shadow around content at given bounds.
-class WM_CORE_EXPORT Shadow : public ui::ImplicitAnimationObserver {
+class WM_EXPORT Shadow : public ui::ImplicitAnimationObserver {
  public:
   enum Style {
     // Active windows have more opaque shadows, shifted down to make the window
diff --git a/ui/wm/core/shadow_controller.h b/ui/wm/core/shadow_controller.h
index 47aa743..c846894 100644
--- a/ui/wm/core/shadow_controller.h
+++ b/ui/wm/core/shadow_controller.h
@@ -10,8 +10,8 @@
 #include "base/basictypes.h"
 #include "base/compiler_specific.h"
 #include "base/memory/ref_counted.h"
-#include "ui/wm/core/wm_core_export.h"
 #include "ui/wm/public/activation_change_observer.h"
+#include "ui/wm/wm_export.h"
 
 namespace aura {
 class Window;
@@ -31,10 +31,10 @@
 // shadows as needed. ShadowController itself is light weight and per
 // ActivationClient. ShadowController delegates to its implementation class,
 // which observes all window creation.
-class WM_CORE_EXPORT ShadowController :
+class WM_EXPORT ShadowController :
     public aura::client::ActivationChangeObserver {
  public:
-  class WM_CORE_EXPORT TestApi {
+  class WM_EXPORT TestApi {
    public:
     explicit TestApi(ShadowController* controller) : controller_(controller) {}
     ~TestApi() {}
diff --git a/ui/wm/core/shadow_types.h b/ui/wm/core/shadow_types.h
index 49c92fd..1198a43 100644
--- a/ui/wm/core/shadow_types.h
+++ b/ui/wm/core/shadow_types.h
@@ -6,7 +6,7 @@
 #define UI_WM_CORE_SHADOW_TYPES_H_
 
 #include "ui/aura/window.h"
-#include "ui/wm/core/wm_core_export.h"
+#include "ui/wm/wm_export.h"
 
 namespace aura {
 class Window;
@@ -22,8 +22,8 @@
   SHADOW_TYPE_RECTANGULAR,
 };
 
-WM_CORE_EXPORT void SetShadowType(aura::Window* window, ShadowType shadow_type);
-WM_CORE_EXPORT ShadowType GetShadowType(aura::Window* window);
+WM_EXPORT void SetShadowType(aura::Window* window, ShadowType shadow_type);
+WM_EXPORT ShadowType GetShadowType(aura::Window* window);
 
 // A property key describing the drop shadow that should be displayed under the
 // window.  If unset, no shadow is displayed.
diff --git a/ui/wm/core/transient_window_controller.h b/ui/wm/core/transient_window_controller.h
index 125cd28..8638824 100644
--- a/ui/wm/core/transient_window_controller.h
+++ b/ui/wm/core/transient_window_controller.h
@@ -5,14 +5,14 @@
 #ifndef UI_WM_CORE_TRANSIENT_WINDOW_CONTROLLER_H_
 #define UI_WM_CORE_TRANSIENT_WINDOW_CONTROLLER_H_
 
-#include "ui/wm/core/wm_core_export.h"
 #include "ui/wm/public/transient_window_client.h"
+#include "ui/wm/wm_export.h"
 
 namespace wm {
 
 // TransientWindowClient implementation. Uses TransientWindowManager to handle
 // tracking transient per window.
-class WM_CORE_EXPORT TransientWindowController
+class WM_EXPORT TransientWindowController
     : public aura::client::TransientWindowClient {
  public:
   TransientWindowController();
diff --git a/ui/wm/core/transient_window_manager.h b/ui/wm/core/transient_window_manager.h
index 350bb1a..7d37679 100644
--- a/ui/wm/core/transient_window_manager.h
+++ b/ui/wm/core/transient_window_manager.h
@@ -9,7 +9,7 @@
 
 #include "base/observer_list.h"
 #include "ui/aura/window_observer.h"
-#include "ui/wm/core/wm_core_export.h"
+#include "ui/wm/wm_export.h"
 
 namespace wm {
 
@@ -26,7 +26,7 @@
 // Transient windows are typically used for popups and menus.
 // TODO(sky): when we nuke TransientWindowClient rename this to
 // TransientWindowController.
-class WM_CORE_EXPORT TransientWindowManager : public aura::WindowObserver {
+class WM_EXPORT TransientWindowManager : public aura::WindowObserver {
  public:
   typedef std::vector<aura::Window*> Windows;
 
diff --git a/ui/wm/core/transient_window_observer.h b/ui/wm/core/transient_window_observer.h
index 6a7a2e2..aff5af5 100644
--- a/ui/wm/core/transient_window_observer.h
+++ b/ui/wm/core/transient_window_observer.h
@@ -5,7 +5,7 @@
 #ifndef UI_WM_CORE_TRANSIENT_WINDOW_OBSERVER_H_
 #define UI_WM_CORE_TRANSIENT_WINDOW_OBSERVER_H_
 
-#include "ui/wm/core/wm_core_export.h"
+#include "ui/wm/wm_export.h"
 
 namespace aura {
 class Window;
@@ -13,7 +13,7 @@
 
 namespace wm {
 
-class WM_CORE_EXPORT TransientWindowObserver {
+class WM_EXPORT TransientWindowObserver {
  public:
   // Called when a transient child is added to |window|.
   virtual void OnTransientChildAdded(aura::Window* window,
diff --git a/ui/wm/core/transient_window_stacking_client.h b/ui/wm/core/transient_window_stacking_client.h
index 5641a22..4ab4aea 100644
--- a/ui/wm/core/transient_window_stacking_client.h
+++ b/ui/wm/core/transient_window_stacking_client.h
@@ -6,13 +6,13 @@
 #define UI_WM_CORE_TRANSIENT_WINDOW_STACKING_CLIENT_H_
 
 #include "ui/aura/client/window_stacking_client.h"
-#include "ui/wm/core/wm_core_export.h"
+#include "ui/wm/wm_export.h"
 
 namespace wm {
 
 class TransientWindowManager;
 
-class WM_CORE_EXPORT TransientWindowStackingClient
+class WM_EXPORT TransientWindowStackingClient
     : public aura::client::WindowStackingClient {
  public:
   TransientWindowStackingClient();
diff --git a/ui/wm/core/user_activity_detector.h b/ui/wm/core/user_activity_detector.h
index 6a94db1..851f07a 100644
--- a/ui/wm/core/user_activity_detector.h
+++ b/ui/wm/core/user_activity_detector.h
@@ -10,14 +10,14 @@
 #include "base/observer_list.h"
 #include "base/time/time.h"
 #include "ui/events/event_handler.h"
-#include "ui/wm/core/wm_core_export.h"
+#include "ui/wm/wm_export.h"
 
 namespace wm {
 
 class UserActivityObserver;
 
 // Watches for input events and notifies observers that the user is active.
-class WM_CORE_EXPORT UserActivityDetector : public ui::EventHandler {
+class WM_EXPORT UserActivityDetector : public ui::EventHandler {
  public:
   // Minimum amount of time between notifications to observers.
   static const int kNotifyIntervalMs;
diff --git a/ui/wm/core/user_activity_observer.h b/ui/wm/core/user_activity_observer.h
index 2c3b887..0fb35a6 100644
--- a/ui/wm/core/user_activity_observer.h
+++ b/ui/wm/core/user_activity_observer.h
@@ -6,7 +6,7 @@
 #define UI_WM_CORE_USER_ACTIVITY_OBSERVER_H_
 
 #include "base/basictypes.h"
-#include "ui/wm/core/wm_core_export.h"
+#include "ui/wm/wm_export.h"
 
 namespace ui {
 class Event;
@@ -16,7 +16,7 @@
 
 // Interface for classes that want to be notified about user activity.
 // Implementations should register themselves with UserActivityDetector.
-class WM_CORE_EXPORT UserActivityObserver {
+class WM_EXPORT UserActivityObserver {
  public:
   // Invoked periodically while the user is active (i.e. generating input
   // events). |event| is the event that triggered the notification; it may
diff --git a/ui/wm/core/visibility_controller.h b/ui/wm/core/visibility_controller.h
index 912e974..47ae991 100644
--- a/ui/wm/core/visibility_controller.h
+++ b/ui/wm/core/visibility_controller.h
@@ -8,11 +8,11 @@
 #include "base/compiler_specific.h"
 #include "base/logging.h"
 #include "ui/aura/client/visibility_client.h"
-#include "ui/wm/core/wm_core_export.h"
+#include "ui/wm/wm_export.h"
 
 namespace wm {
 
-class WM_CORE_EXPORT VisibilityController
+class WM_EXPORT VisibilityController
     : public aura::client::VisibilityClient {
  public:
   VisibilityController();
@@ -47,7 +47,7 @@
 //   // previous state.
 // }
 //
-class WM_CORE_EXPORT SuspendChildWindowVisibilityAnimations {
+class WM_EXPORT SuspendChildWindowVisibilityAnimations {
  public:
   // Suspend visibility animations of child windows.
   explicit SuspendChildWindowVisibilityAnimations(aura::Window* window);
@@ -66,7 +66,7 @@
 };
 
 // Tells |window| to animate visibility changes to its children.
-void WM_CORE_EXPORT SetChildWindowVisibilityChangesAnimated(
+void WM_EXPORT SetChildWindowVisibilityChangesAnimated(
     aura::Window* window);
 
 }  // namespace wm
diff --git a/ui/wm/core/window_animations.cc b/ui/wm/core/window_animations.cc
index 42439e3..bea416f 100644
--- a/ui/wm/core/window_animations.cc
+++ b/ui/wm/core/window_animations.cc
@@ -41,7 +41,7 @@
 DECLARE_WINDOW_PROPERTY_TYPE(wm::WindowVisibilityAnimationType)
 DECLARE_WINDOW_PROPERTY_TYPE(wm::WindowVisibilityAnimationTransition)
 DECLARE_WINDOW_PROPERTY_TYPE(float)
-DECLARE_EXPORTED_WINDOW_PROPERTY_TYPE(WM_CORE_EXPORT, bool)
+DECLARE_EXPORTED_WINDOW_PROPERTY_TYPE(WM_EXPORT, bool)
 
 namespace wm {
 namespace {
diff --git a/ui/wm/core/window_animations.h b/ui/wm/core/window_animations.h
index b2ab4de..1c55d49 100644
--- a/ui/wm/core/window_animations.h
+++ b/ui/wm/core/window_animations.h
@@ -8,7 +8,7 @@
 #include <vector>
 
 #include "ui/compositor/scoped_layer_animation_settings.h"
-#include "ui/wm/core/wm_core_export.h"
+#include "ui/wm/wm_export.h"
 
 namespace aura {
 class Window;
@@ -58,26 +58,25 @@
 
 // These two methods use int for type rather than WindowVisibilityAnimationType
 // since downstream libraries can extend the set of animations.
-WM_CORE_EXPORT void SetWindowVisibilityAnimationType(aura::Window* window,
-                                                     int type);
-WM_CORE_EXPORT int GetWindowVisibilityAnimationType(aura::Window* window);
+WM_EXPORT void SetWindowVisibilityAnimationType(aura::Window* window, int type);
+WM_EXPORT int GetWindowVisibilityAnimationType(aura::Window* window);
 
-WM_CORE_EXPORT void SetWindowVisibilityAnimationTransition(
+WM_EXPORT void SetWindowVisibilityAnimationTransition(
     aura::Window* window,
     WindowVisibilityAnimationTransition transition);
 
-WM_CORE_EXPORT bool HasWindowVisibilityAnimationTransition(
+WM_EXPORT bool HasWindowVisibilityAnimationTransition(
     aura::Window* window,
     WindowVisibilityAnimationTransition transition);
 
-WM_CORE_EXPORT void SetWindowVisibilityAnimationDuration(
+WM_EXPORT void SetWindowVisibilityAnimationDuration(
     aura::Window* window,
     const base::TimeDelta& duration);
 
-WM_CORE_EXPORT base::TimeDelta GetWindowVisibilityAnimationDuration(
+WM_EXPORT base::TimeDelta GetWindowVisibilityAnimationDuration(
     const aura::Window& window);
 
-WM_CORE_EXPORT void SetWindowVisibilityAnimationVerticalPosition(
+WM_EXPORT void SetWindowVisibilityAnimationVerticalPosition(
     aura::Window* window,
     float position);
 
@@ -86,7 +85,7 @@
 // Use this to ensure that the hiding animation is visible even after
 // the window is deleted or deactivated, instead of using
 // ui::ScopedLayerAnimationSettings directly.
-class WM_CORE_EXPORT ScopedHidingAnimationSettings {
+class WM_EXPORT ScopedHidingAnimationSettings {
  public:
   explicit ScopedHidingAnimationSettings(aura::Window* window);
   ~ScopedHidingAnimationSettings();
@@ -104,15 +103,14 @@
 };
 
 // Returns false if the |window| didn't animate.
-WM_CORE_EXPORT bool AnimateOnChildWindowVisibilityChanged(aura::Window* window,
-                                                          bool visible);
-WM_CORE_EXPORT bool AnimateWindow(aura::Window* window,
-                                  WindowAnimationType type);
+WM_EXPORT bool AnimateOnChildWindowVisibilityChanged(aura::Window* window,
+                                                     bool visible);
+WM_EXPORT bool AnimateWindow(aura::Window* window, WindowAnimationType type);
 
 // Returns true if window animations are disabled for |window|. Window
 // animations are enabled by default. If |window| is NULL, this just checks
 // if the global flag disabling window animations is present.
-WM_CORE_EXPORT bool WindowAnimationsDisabled(aura::Window* window);
+WM_EXPORT bool WindowAnimationsDisabled(aura::Window* window);
 
 }  // namespace wm
 
diff --git a/ui/wm/core/window_modality_controller.h b/ui/wm/core/window_modality_controller.h
index d098d57..4d52c21 100644
--- a/ui/wm/core/window_modality_controller.h
+++ b/ui/wm/core/window_modality_controller.h
@@ -11,7 +11,7 @@
 #include "ui/aura/env_observer.h"
 #include "ui/aura/window_observer.h"
 #include "ui/events/event_handler.h"
-#include "ui/wm/core/wm_core_export.h"
+#include "ui/wm/wm_export.h"
 
 namespace ui {
 class EventTarget;
@@ -21,18 +21,18 @@
 namespace wm {
 
 // Sets the modal parent for the child.
-WM_CORE_EXPORT void SetModalParent(aura::Window* child, aura::Window* parent);
+WM_EXPORT void SetModalParent(aura::Window* child, aura::Window* parent);
 
 // Returns the modal transient child of |window|, or NULL if |window| does not
 // have any modal transient children.
-WM_CORE_EXPORT aura::Window* GetModalTransient(aura::Window* window);
+WM_EXPORT aura::Window* GetModalTransient(aura::Window* window);
 
 // WindowModalityController is an event filter that consumes events sent to
 // windows that are the transient parents of window-modal windows. This filter
 // must be added to the CompoundEventFilter so that activation works properly.
-class WM_CORE_EXPORT WindowModalityController : public ui::EventHandler,
-                                                public aura::EnvObserver,
-                                                public aura::WindowObserver {
+class WM_EXPORT WindowModalityController : public ui::EventHandler,
+                                           public aura::EnvObserver,
+                                           public aura::WindowObserver {
  public:
   explicit WindowModalityController(ui::EventTarget* event_target);
   virtual ~WindowModalityController();
diff --git a/ui/wm/core/window_util.h b/ui/wm/core/window_util.h
index 81989f9..78f2ffb 100644
--- a/ui/wm/core/window_util.h
+++ b/ui/wm/core/window_util.h
@@ -10,7 +10,7 @@
 #include "base/basictypes.h"
 #include "base/compiler_specific.h"
 #include "base/memory/scoped_ptr.h"
-#include "ui/wm/core/wm_core_export.h"
+#include "ui/wm/wm_export.h"
 
 namespace aura {
 class Window;
@@ -24,18 +24,18 @@
 
 namespace wm {
 
-WM_CORE_EXPORT void ActivateWindow(aura::Window* window);
-WM_CORE_EXPORT void DeactivateWindow(aura::Window* window);
-WM_CORE_EXPORT bool IsActiveWindow(aura::Window* window);
-WM_CORE_EXPORT bool CanActivateWindow(aura::Window* window);
+WM_EXPORT void ActivateWindow(aura::Window* window);
+WM_EXPORT void DeactivateWindow(aura::Window* window);
+WM_EXPORT bool IsActiveWindow(aura::Window* window);
+WM_EXPORT bool CanActivateWindow(aura::Window* window);
 
 // Retrieves the activatable window for |window|. The ActivationClient makes
 // this determination.
-WM_CORE_EXPORT aura::Window* GetActivatableWindow(aura::Window* window);
+WM_EXPORT aura::Window* GetActivatableWindow(aura::Window* window);
 
 // Retrieves the toplevel window for |window|. The ActivationClient makes this
 // determination.
-WM_CORE_EXPORT aura::Window* GetToplevelWindow(aura::Window* window);
+WM_EXPORT aura::Window* GetToplevelWindow(aura::Window* window);
 
 // Returns the existing Layer for |root| (and all its descendants) and creates
 // a new layer for |root| and all its descendants. This is intended for
@@ -43,26 +43,24 @@
 //
 // As a result of this |root| has freshly created layers, meaning the layers
 // have not yet been painted to.
-WM_CORE_EXPORT scoped_ptr<ui::LayerTreeOwner> RecreateLayers(
+WM_EXPORT scoped_ptr<ui::LayerTreeOwner> RecreateLayers(
     ui::LayerOwner* root);
 
 // Convenience functions that get the TransientWindowManager for the window and
 // redirect appropriately. These are preferable to calling functions on
 // TransientWindowManager as they handle the appropriate NULL checks.
-WM_CORE_EXPORT aura::Window* GetTransientParent(aura::Window* window);
-WM_CORE_EXPORT const aura::Window* GetTransientParent(
+WM_EXPORT aura::Window* GetTransientParent(aura::Window* window);
+WM_EXPORT const aura::Window* GetTransientParent(
     const aura::Window* window);
-WM_CORE_EXPORT const std::vector<aura::Window*>& GetTransientChildren(
+WM_EXPORT const std::vector<aura::Window*>& GetTransientChildren(
     const aura::Window* window);
-WM_CORE_EXPORT void AddTransientChild(aura::Window* parent,
-                                      aura::Window* child);
-WM_CORE_EXPORT void RemoveTransientChild(aura::Window* parent,
-                                         aura::Window* child);
+WM_EXPORT void AddTransientChild(aura::Window* parent, aura::Window* child);
+WM_EXPORT void RemoveTransientChild(aura::Window* parent, aura::Window* child);
 
 // Returns true if |window| has |ancestor| as a transient ancestor. A transient
 // ancestor is found by following the transient parent chain of the window.
-WM_CORE_EXPORT bool HasTransientAncestor(const aura::Window* window,
-                                         const aura::Window* ancestor);
+WM_EXPORT bool HasTransientAncestor(const aura::Window* window,
+                                    const aura::Window* ancestor);
 
 }  // namespace wm
 
diff --git a/ui/wm/core/wm_core_export.h b/ui/wm/core/wm_core_export.h
deleted file mode 100644
index 2056ccc..0000000
--- a/ui/wm/core/wm_core_export.h
+++ /dev/null
@@ -1,32 +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.
-
-#ifndef UI_WM_CORE_WM_CORE_EXPORT_H_
-#define UI_WM_CORE_WM_CORE_EXPORT_H_
-
-// Defines WM_CORE_EXPORT so that functionality implemented by the Views module
-// can be exported to consumers.
-
-#if defined(COMPONENT_BUILD)
-#if defined(WIN32)
-
-#if defined(WM_CORE_IMPLEMENTATION)
-#define WM_CORE_EXPORT __declspec(dllexport)
-#else
-#define WM_CORE_EXPORT __declspec(dllimport)
-#endif  // defined(WM_CORE_IMPLEMENTATION)
-
-#else  // defined(WIN32)
-#if defined(WM_CORE_IMPLEMENTATION)
-#define WM_CORE_EXPORT __attribute__((visibility("default")))
-#else
-#define WM_CORE_EXPORT
-#endif
-#endif
-
-#else  // defined(COMPONENT_BUILD)
-#define WM_CORE_EXPORT
-#endif
-
-#endif  // UI_WM_CORE_WM_CORE_EXPORT_H_
diff --git a/ui/wm/core/wm_core_switches.h b/ui/wm/core/wm_core_switches.h
index dd48025..05658d6 100644
--- a/ui/wm/core/wm_core_switches.h
+++ b/ui/wm/core/wm_core_switches.h
@@ -6,7 +6,7 @@
 #define UI_WM_CORE_WM_CORE_SWITCHES_H_
 
 #include "build/build_config.h"
-#include "ui/wm/core/wm_core_export.h"
+#include "ui/wm/wm_export.h"
 
 namespace wm {
 namespace switches {
@@ -16,7 +16,7 @@
 // see chromeos::LoginUtil::GetOffTheRecordCommandLine().)
 
 // Please keep alphabetized.
-WM_CORE_EXPORT extern const char kWindowAnimationsDisabled[];
+WM_EXPORT extern const char kWindowAnimationsDisabled[];
 
 }  // namespace switches
 }  // namespace wm
diff --git a/ui/wm/core/wm_state.cc b/ui/wm/core/wm_state.cc
index 991940e..6d58086 100644
--- a/ui/wm/core/wm_state.cc
+++ b/ui/wm/core/wm_state.cc
@@ -15,8 +15,6 @@
       transient_window_client_(new TransientWindowController) {
   aura::client::SetWindowStackingClient(window_stacking_client_.get());
   aura::client::SetTransientWindowClient(transient_window_client_.get());
-  if (!ui::PlatformEventSource::GetInstance())
-    event_source_ = ui::PlatformEventSource::CreateDefault();
 }
 
 WMState::~WMState() {
diff --git a/ui/wm/core/wm_state.h b/ui/wm/core/wm_state.h
index dff17a6..289c9da 100644
--- a/ui/wm/core/wm_state.h
+++ b/ui/wm/core/wm_state.h
@@ -6,11 +6,7 @@
 #define UI_WM_CORE_WM_STATE_H_
 
 #include "base/memory/scoped_ptr.h"
-#include "ui/wm/core/wm_core_export.h"
-
-namespace ui {
-class PlatformEventSource;
-}
+#include "ui/wm/wm_export.h"
 
 namespace wm {
 
@@ -18,7 +14,7 @@
 class TransientWindowStackingClient;
 
 // Installs state needed by the window manager.
-class WM_CORE_EXPORT WMState {
+class WM_EXPORT WMState {
  public:
   WMState();
   ~WMState();
@@ -27,7 +23,6 @@
  private:
   scoped_ptr<TransientWindowStackingClient> window_stacking_client_;
   scoped_ptr<TransientWindowController> transient_window_client_;
-  scoped_ptr<ui::PlatformEventSource> event_source_;
 
   DISALLOW_COPY_AND_ASSIGN(WMState);
 };
diff --git a/ui/wm/test/wm_test_helper.cc b/ui/wm/test/wm_test_helper.cc
index dddb7af..1982be5 100644
--- a/ui/wm/test/wm_test_helper.cc
+++ b/ui/wm/test/wm_test_helper.cc
@@ -9,7 +9,6 @@
 #include "ui/aura/env.h"
 #include "ui/aura/test/test_focus_client.h"
 #include "ui/aura/window.h"
-#include "ui/events/platform/platform_event_source.h"
 #include "ui/wm/core/compound_event_filter.h"
 #include "ui/wm/core/input_method_event_filter.h"
 
@@ -17,7 +16,6 @@
 
 WMTestHelper::WMTestHelper(const gfx::Size& default_window_size) {
   aura::Env::CreateInstance();
-  event_source_ = ui::PlatformEventSource::CreateDefault();
   host_.reset(aura::WindowTreeHost::Create(gfx::Rect(default_window_size)));
   host_->InitHost();
   aura::client::SetWindowTreeClient(host_->window(), this);
@@ -25,9 +23,8 @@
   focus_client_.reset(new aura::test::TestFocusClient);
   aura::client::SetFocusClient(host_->window(), focus_client_.get());
 
-  root_window_event_filter_ = new wm::CompoundEventFilter;
-  // Pass ownership of the filter to the root_window.
-  host_->window()->SetEventFilter(root_window_event_filter_);
+  root_window_event_filter_.reset(new wm::CompoundEventFilter);
+  host_->window()->AddPreTargetHandler(root_window_event_filter_.get());
 
   input_method_filter_.reset(new wm::InputMethodEventFilter(
       host_->GetAcceleratedWidget()));
diff --git a/ui/wm/test/wm_test_helper.h b/ui/wm/test/wm_test_helper.h
index 1bde9f3..1a3dd09 100644
--- a/ui/wm/test/wm_test_helper.h
+++ b/ui/wm/test/wm_test_helper.h
@@ -25,10 +25,6 @@
 class Size;
 }
 
-namespace ui {
-class PlatformEventSource;
-}
-
 namespace wm {
 
 class CompoundEventFilter;
@@ -52,14 +48,11 @@
  private:
   scoped_ptr<aura::WindowTreeHost> host_;
 
-  // Owned by the root Window.
-  wm::CompoundEventFilter* root_window_event_filter_;
-
+  scoped_ptr<wm::CompoundEventFilter> root_window_event_filter_;
   scoped_ptr<aura::client::DefaultCaptureClient> capture_client_;
   scoped_ptr<wm::InputMethodEventFilter> input_method_filter_;
   scoped_ptr<aura::client::DefaultActivationClient> activation_client_;
   scoped_ptr<aura::client::FocusClient> focus_client_;
-  scoped_ptr<ui::PlatformEventSource> event_source_;
 
   DISALLOW_COPY_AND_ASSIGN(WMTestHelper);
 };
diff --git a/ui/wm/wm.gyp b/ui/wm/wm.gyp
index 5d124b1..17ceaa3 100644
--- a/ui/wm/wm.gyp
+++ b/ui/wm/wm.gyp
@@ -8,19 +8,7 @@
   },
   'targets': [
     {
-      'target_name': 'wm_public',
-      'type': 'static_library',
-      'dependencies': [
-        '../../skia/skia.gyp:skia',
-        '../aura/aura.gyp:aura',
-        '../gfx/gfx.gyp:gfx_geometry',
-      ],
-      'sources': [
-        'public/window_types.h',
-      ],
-    },
-    {
-      'target_name': 'wm_core',
+      'target_name': 'wm',
       'type': '<(component)',
       'dependencies': [
         '../../base/base.gyp:base',
@@ -35,7 +23,7 @@
         '../base/ui_base.gyp:ui_base',
       ],
       'defines': [
-        'WM_CORE_IMPLEMENTATION',
+        'WM_IMPLEMENTATION',
       ],
       'sources': [
         'core/base_focus_rules.cc',
@@ -83,11 +71,12 @@
         'core/window_modality_controller.h',
         'core/window_util.cc',
         'core/window_util.h',
-        'core/wm_core_export.h',
         'core/wm_core_switches.cc',
         'core/wm_core_switches.h',
         'core/wm_state.cc',
         'core/wm_state.h',
+        'public/window_types.h',
+        'wm_export.h',
       ],
     },
     {
@@ -105,7 +94,7 @@
       ],
     },
     {
-      'target_name': 'wm_core_unittests',
+      'target_name': 'wm_unittests',
       'type': 'executable',
       'dependencies': [
         '../../base/base.gyp:base',
@@ -120,7 +109,7 @@
         '../gfx/gfx.gyp:gfx_geometry',
         '../gfx/gfx.gyp:gfx',
         '../base/ui_base.gyp:ui_base',
-        'wm_core',
+        'wm',
         'wm_test_support',
       ],
       'sources': [
diff --git a/ui/wm/wm_export.h b/ui/wm/wm_export.h
new file mode 100644
index 0000000..461d693
--- /dev/null
+++ b/ui/wm/wm_export.h
@@ -0,0 +1,32 @@
+// 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.
+
+#ifndef UI_WM_WM_EXPORT_H_
+#define UI_WM_WM_EXPORT_H_
+
+// Defines WM_EXPORT so that functionality implemented by the WM module
+// can be exported to consumers.
+
+#if defined(COMPONENT_BUILD)
+#if defined(WIN32)
+
+#if defined(WM_IMPLEMENTATION)
+#define WM_EXPORT __declspec(dllexport)
+#else
+#define WM_EXPORT __declspec(dllimport)
+#endif  // defined(WM_IMPLEMENTATION)
+
+#else  // defined(WIN32)
+#if defined(WM_IMPLEMENTATION)
+#define WM_EXPORT __attribute__((visibility("default")))
+#else
+#define WM_EXPORT
+#endif
+#endif
+
+#else  // defined(COMPONENT_BUILD)
+#define WM_EXPORT
+#endif
+
+#endif  // UI_WM_WM_EXPORT_H_
diff --git a/url/gurl.cc b/url/gurl.cc
index 77b8def..c79cdba 100644
--- a/url/gurl.cc
+++ b/url/gurl.cc
@@ -86,16 +86,17 @@
   InitCanonical(url_string, false);
 }
 
-GURL::GURL(const char* canonical_spec, size_t canonical_spec_len,
-           const url_parse::Parsed& parsed, bool is_valid)
+GURL::GURL(const char* canonical_spec,
+           size_t canonical_spec_len,
+           const url::Parsed& parsed,
+           bool is_valid)
     : spec_(canonical_spec, canonical_spec_len),
       is_valid_(is_valid),
       parsed_(parsed) {
   InitializeFromCanonicalSpec();
 }
 
-GURL::GURL(std::string canonical_spec,
-           const url_parse::Parsed& parsed, bool is_valid)
+GURL::GURL(std::string canonical_spec, const url::Parsed& parsed, bool is_valid)
     : is_valid_(is_valid),
       parsed_(parsed) {
   spec_.swap(canonical_spec);
@@ -107,8 +108,8 @@
   // Reserve enough room in the output for the input, plus some extra so that
   // we have room if we have to escape a few things without reallocating.
   spec_.reserve(input_spec.size() + 32);
-  url_canon::StdStringCanonOutput output(&spec_);
-  is_valid_ = url_util::Canonicalize(
+  url::StdStringCanonOutput output(&spec_);
+  is_valid_ = url::Canonicalize(
       input_spec.data(), static_cast<int>(input_spec.length()), trim_path_end,
       NULL, &output, &parsed_);
 
@@ -131,12 +132,12 @@
   // what we would have produced. Skip checking for invalid URLs have no meaning
   // and we can't always canonicalize then reproducabely.
   if (is_valid_) {
-    url_parse::Component scheme;
+    url::Component scheme;
     // We can't do this check on the inner_url of a filesystem URL, as
     // canonical_spec actually points to the start of the outer URL, so we'd
     // end up with infinite recursion in this constructor.
-    if (!url_util::FindAndCompareScheme(spec_.data(), spec_.length(),
-                                        "filesystem", &scheme) ||
+    if (!url::FindAndCompareScheme(spec_.data(), spec_.length(),
+                                   "filesystem", &scheme) ||
         scheme.begin == parsed_.scheme.begin) {
       // We need to retain trailing whitespace on path URLs, as the |parsed_|
       // spec we originally received may legitimately contain trailing white-
@@ -186,7 +187,7 @@
 // Note: code duplicated below (it's inconvenient to use a template here).
 GURL GURL::ResolveWithCharsetConverter(
     const std::string& relative,
-    url_canon::CharsetConverter* charset_converter) const {
+    url::CharsetConverter* charset_converter) const {
   // Not allowed for invalid URLs.
   if (!is_valid_)
     return GURL();
@@ -196,12 +197,12 @@
   // Reserve enough room in the output for the input, plus some extra so that
   // we have room if we have to escape a few things without reallocating.
   result.spec_.reserve(spec_.size() + 32);
-  url_canon::StdStringCanonOutput output(&result.spec_);
+  url::StdStringCanonOutput output(&result.spec_);
 
-  if (!url_util::ResolveRelative(
-          spec_.data(), static_cast<int>(spec_.length()), parsed_,
-          relative.data(), static_cast<int>(relative.length()),
-          charset_converter, &output, &result.parsed_)) {
+  if (!url::ResolveRelative(spec_.data(), static_cast<int>(spec_.length()),
+                            parsed_, relative.data(),
+                            static_cast<int>(relative.length()),
+                            charset_converter, &output, &result.parsed_)) {
     // Error resolving, return an empty URL.
     return GURL();
   }
@@ -219,7 +220,7 @@
 // Note: code duplicated above (it's inconvenient to use a template here).
 GURL GURL::ResolveWithCharsetConverter(
     const base::string16& relative,
-    url_canon::CharsetConverter* charset_converter) const {
+    url::CharsetConverter* charset_converter) const {
   // Not allowed for invalid URLs.
   if (!is_valid_)
     return GURL();
@@ -229,12 +230,12 @@
   // Reserve enough room in the output for the input, plus some extra so that
   // we have room if we have to escape a few things without reallocating.
   result.spec_.reserve(spec_.size() + 32);
-  url_canon::StdStringCanonOutput output(&result.spec_);
+  url::StdStringCanonOutput output(&result.spec_);
 
-  if (!url_util::ResolveRelative(
-          spec_.data(), static_cast<int>(spec_.length()), parsed_,
-          relative.data(), static_cast<int>(relative.length()),
-          charset_converter, &output, &result.parsed_)) {
+  if (!url::ResolveRelative(spec_.data(), static_cast<int>(spec_.length()),
+                            parsed_, relative.data(),
+                            static_cast<int>(relative.length()),
+                            charset_converter, &output, &result.parsed_)) {
     // Error resolving, return an empty URL.
     return GURL();
   }
@@ -251,7 +252,7 @@
 
 // Note: code duplicated below (it's inconvenient to use a template here).
 GURL GURL::ReplaceComponents(
-    const url_canon::Replacements<char>& replacements) const {
+    const url::Replacements<char>& replacements) const {
   GURL result;
 
   // Not allowed for invalid URLs.
@@ -261,9 +262,9 @@
   // Reserve enough room in the output for the input, plus some extra so that
   // we have room if we have to escape a few things without reallocating.
   result.spec_.reserve(spec_.size() + 32);
-  url_canon::StdStringCanonOutput output(&result.spec_);
+  url::StdStringCanonOutput output(&result.spec_);
 
-  result.is_valid_ = url_util::ReplaceComponents(
+  result.is_valid_ = url::ReplaceComponents(
       spec_.data(), static_cast<int>(spec_.length()), parsed_, replacements,
       NULL, &output, &result.parsed_);
 
@@ -277,7 +278,7 @@
 
 // Note: code duplicated above (it's inconvenient to use a template here).
 GURL GURL::ReplaceComponents(
-    const url_canon::Replacements<base::char16>& replacements) const {
+    const url::Replacements<base::char16>& replacements) const {
   GURL result;
 
   // Not allowed for invalid URLs.
@@ -287,9 +288,9 @@
   // Reserve enough room in the output for the input, plus some extra so that
   // we have room if we have to escape a few things without reallocating.
   result.spec_.reserve(spec_.size() + 32);
-  url_canon::StdStringCanonOutput output(&result.spec_);
+  url::StdStringCanonOutput output(&result.spec_);
 
-  result.is_valid_ = url_util::ReplaceComponents(
+  result.is_valid_ = url::ReplaceComponents(
       spec_.data(), static_cast<int>(spec_.length()), parsed_, replacements,
       NULL, &output, &result.parsed_);
 
@@ -310,7 +311,7 @@
   if (SchemeIsFileSystem())
     return inner_url_->GetOrigin();
 
-  url_canon::Replacements<char> replacements;
+  url::Replacements<char> replacements;
   replacements.ClearUsername();
   replacements.ClearPassword();
   replacements.ClearPath();
@@ -325,7 +326,7 @@
       (!has_ref() && !has_username() && !has_password()))
     return GURL(*this);
 
-  url_canon::Replacements<char> replacements;
+  url::Replacements<char> replacements;
   replacements.ClearRef();
   replacements.ClearUsername();
   replacements.ClearPassword();
@@ -357,15 +358,15 @@
 }
 
 bool GURL::IsStandard() const {
-  return url_util::IsStandard(spec_.data(), parsed_.scheme);
+  return url::IsStandard(spec_.data(), parsed_.scheme);
 }
 
 bool GURL::SchemeIs(const char* lower_ascii_scheme) const {
   if (parsed_.scheme.len <= 0)
     return lower_ascii_scheme == NULL;
-  return url_util::LowerCaseEqualsASCII(spec_.data() + parsed_.scheme.begin,
-                                        spec_.data() + parsed_.scheme.end(),
-                                        lower_ascii_scheme);
+  return url::LowerCaseEqualsASCII(spec_.data() + parsed_.scheme.begin,
+                                   spec_.data() + parsed_.scheme.end(),
+                                   lower_ascii_scheme);
 }
 
 bool GURL::SchemeIsHTTPOrHTTPS() const {
@@ -378,21 +379,21 @@
 
 int GURL::IntPort() const {
   if (parsed_.port.is_nonempty())
-    return url_parse::ParsePort(spec_.data(), parsed_.port);
-  return url_parse::PORT_UNSPECIFIED;
+    return url::ParsePort(spec_.data(), parsed_.port);
+  return url::PORT_UNSPECIFIED;
 }
 
 int GURL::EffectiveIntPort() const {
   int int_port = IntPort();
-  if (int_port == url_parse::PORT_UNSPECIFIED && IsStandard())
-    return url_canon::DefaultPortForScheme(spec_.data() + parsed_.scheme.begin,
-                                           parsed_.scheme.len);
+  if (int_port == url::PORT_UNSPECIFIED && IsStandard())
+    return url::DefaultPortForScheme(spec_.data() + parsed_.scheme.begin,
+                                     parsed_.scheme.len);
   return int_port;
 }
 
 std::string GURL::ExtractFileName() const {
-  url_parse::Component file_component;
-  url_parse::ExtractFileName(spec_.data(), parsed_.path, &file_component);
+  url::Component file_component;
+  url::ExtractFileName(spec_.data(), parsed_.path, &file_component);
   return ComponentString(file_component);
 }
 
@@ -416,7 +417,7 @@
 
 std::string GURL::HostNoBrackets() const {
   // If host looks like an IPv6 literal, strip the square brackets.
-  url_parse::Component h(parsed_.host);
+  url::Component h(parsed_.host);
   if (h.len >= 2 && spec_[h.begin] == '[' && spec_[h.end() - 1] == ']') {
     h.begin++;
     h.len -= 2;
@@ -432,10 +433,10 @@
   if (!is_valid_ || spec_.empty())
      return false;
 
-  url_canon::RawCanonOutputT<char, 128> ignored_output;
-  url_canon::CanonHostInfo host_info;
-  url_canon::CanonicalizeIPAddress(spec_.c_str(), parsed_.host,
-                                   &ignored_output, &host_info);
+  url::RawCanonOutputT<char, 128> ignored_output;
+  url::CanonHostInfo host_info;
+  url::CanonicalizeIPAddress(spec_.c_str(), parsed_.host, &ignored_output,
+                             &host_info);
   return host_info.IsIPAddress();
 }
 
@@ -502,10 +503,10 @@
   const char* start_pos = spec_.data() + parsed_.host.begin +
                           host_len - domain_len;
 
-  if (!url_util::LowerCaseEqualsASCII(start_pos,
-                                      last_pos + 1,
-                                      lower_ascii_domain,
-                                      lower_ascii_domain + domain_len))
+  if (!url::LowerCaseEqualsASCII(start_pos,
+                                 last_pos + 1,
+                                 lower_ascii_domain,
+                                 lower_ascii_domain + domain_len))
     return false;
 
   // Check whether host has right domain start with dot, make sure we got
diff --git a/url/gurl.h b/url/gurl.h
index 28897d1..b8632b4 100644
--- a/url/gurl.h
+++ b/url/gurl.h
@@ -17,8 +17,8 @@
 
 class URL_EXPORT GURL {
  public:
-  typedef url_canon::StdStringReplacements<std::string> Replacements;
-  typedef url_canon::StdStringReplacements<base::string16> ReplacementsW;
+  typedef url::StdStringReplacements<std::string> Replacements;
+  typedef url::StdStringReplacements<base::string16> ReplacementsW;
 
   // Creates an empty, invalid URL.
   GURL();
@@ -40,16 +40,17 @@
   // Constructor for URLs that have already been parsed and canonicalized. This
   // is used for conversions from KURL, for example. The caller must supply all
   // information associated with the URL, which must be correct and consistent.
-  GURL(const char* canonical_spec, size_t canonical_spec_len,
-       const url_parse::Parsed& parsed, bool is_valid);
+  GURL(const char* canonical_spec,
+       size_t canonical_spec_len,
+       const url::Parsed& parsed,
+       bool is_valid);
   // Notice that we take the canonical_spec by value so that we can convert
   // from WebURL without copying the string. When we call this constructor
   // we pass in a temporary std::string, which lets the compiler skip the
   // copy and just move the std::string into the function argument. In the
   // implementation, we use swap to move the data into the GURL itself,
   // which means we end up with zero copies.
-  GURL(std::string canonical_spec,
-       const url_parse::Parsed& parsed, bool is_valid);
+  GURL(std::string canonical_spec, const url::Parsed& parsed, bool is_valid);
 
   ~GURL();
 
@@ -105,7 +106,7 @@
   // or may not be valid. If you are using this to index into the spec, BE
   // SURE YOU ARE USING possibly_invalid_spec() to get the spec, and that you
   // don't do anything "important" with invalid specs.
-  const url_parse::Parsed& parsed_for_possibly_invalid_spec() const {
+  const url::Parsed& parsed_for_possibly_invalid_spec() const {
     return parsed_;
   }
 
@@ -152,10 +153,10 @@
   // name).
   GURL ResolveWithCharsetConverter(
       const std::string& relative,
-      url_canon::CharsetConverter* charset_converter) const;
+      url::CharsetConverter* charset_converter) const;
   GURL ResolveWithCharsetConverter(
       const base::string16& relative,
-      url_canon::CharsetConverter* charset_converter) const;
+      url::CharsetConverter* charset_converter) const;
 
   // Creates a new GURL by replacing the current URL's components with the
   // supplied versions. See the Replacements class in url_canon.h for more.
@@ -166,12 +167,11 @@
   // It is an error to replace components of an invalid URL. The result will
   // be the empty URL.
   //
-  // Note that we use the more general url_canon::Replacements type to give
+  // Note that we use the more general url::Replacements type to give
   // callers extra flexibility rather than our override.
+  GURL ReplaceComponents(const url::Replacements<char>& replacements) const;
   GURL ReplaceComponents(
-      const url_canon::Replacements<char>& replacements) const;
-  GURL ReplaceComponents(
-      const url_canon::Replacements<base::char16>& replacements) const;
+      const url::Replacements<base::char16>& replacements) const;
 
   // A helper function that is equivalent to replacing the path with a slash
   // and clearing out everything after that. We sometimes need to know just the
@@ -377,7 +377,7 @@
   void InitializeFromCanonicalSpec();
 
   // Returns the substring of the input identified by the given component.
-  std::string ComponentString(const url_parse::Component& comp) const {
+  std::string ComponentString(const url::Component& comp) const {
     if (comp.len <= 0)
       return std::string();
     return std::string(spec_, comp.begin, comp.len);
@@ -392,7 +392,7 @@
   bool is_valid_;
 
   // Identified components of the canonical spec.
-  url_parse::Parsed parsed_;
+  url::Parsed parsed_;
 
   // Used for nested schemes [currently only filesystem:].
   scoped_ptr<GURL> inner_url_;
diff --git a/url/gurl_unittest.cc b/url/gurl_unittest.cc
index 738f2cc..89375a8 100644
--- a/url/gurl_unittest.cc
+++ b/url/gurl_unittest.cc
@@ -14,18 +14,20 @@
 #define ARRAYSIZE ARRAYSIZE_UNSAFE
 #endif
 
-using url_test_utils::WStringToUTF16;
-using url_test_utils::ConvertUTF8ToUTF16;
+namespace url {
+
+using test_utils::WStringToUTF16;
+using test_utils::ConvertUTF8ToUTF16;
 
 namespace {
 
 template<typename CHAR>
-void SetupReplacement(void (url_canon::Replacements<CHAR>::*func)(const CHAR*,
-                          const url_parse::Component&),
-                      url_canon::Replacements<CHAR>* replacements,
-                      const CHAR* str) {
+void SetupReplacement(
+    void (Replacements<CHAR>::*func)(const CHAR*, const Component&),
+    Replacements<CHAR>* replacements,
+    const CHAR* str) {
   if (str) {
-    url_parse::Component comp;
+    Component comp;
     if (str[0])
       comp.len = static_cast<int>(strlen(str));
     (replacements->*func)(str, comp);
@@ -85,6 +87,14 @@
   EXPECT_EQ("/foo;bar", url.path());
   EXPECT_EQ("q=a", url.query());
   EXPECT_EQ("ref", url.ref());
+
+  // Test parsing userinfo with special characters.
+  GURL url_special_pass("http://user:%40!$&'()*+,;=:@google.com:12345");
+  EXPECT_TRUE(url_special_pass.is_valid());
+  // GURL canonicalizes some delimiters.
+  EXPECT_EQ("%40!$&%27()*+,%3B%3D%3A", url_special_pass.password());
+  EXPECT_EQ("google.com", url_special_pass.host());
+  EXPECT_EQ("12345", url_special_pass.port());
 }
 
 TEST(GURLTest, Empty) {
@@ -97,7 +107,7 @@
   EXPECT_EQ("", url.password());
   EXPECT_EQ("", url.host());
   EXPECT_EQ("", url.port());
-  EXPECT_EQ(url_parse::PORT_UNSPECIFIED, url.IntPort());
+  EXPECT_EQ(PORT_UNSPECIFIED, url.IntPort());
   EXPECT_EQ("", url.path());
   EXPECT_EQ("", url.query());
   EXPECT_EQ("", url.ref());
@@ -130,7 +140,7 @@
   EXPECT_EQ("", invalid2.password());
   EXPECT_EQ("", invalid2.host());
   EXPECT_EQ("", invalid2.port());
-  EXPECT_EQ(url_parse::PORT_UNSPECIFIED, invalid2.IntPort());
+  EXPECT_EQ(PORT_UNSPECIFIED, invalid2.IntPort());
   EXPECT_EQ("", invalid2.path());
   EXPECT_EQ("", invalid2.query());
   EXPECT_EQ("", invalid2.ref());
@@ -165,7 +175,7 @@
   EXPECT_EQ("", invalid2.password());
   EXPECT_EQ("", invalid2.host());
   EXPECT_EQ("", invalid2.port());
-  EXPECT_EQ(url_parse::PORT_UNSPECIFIED, invalid2.IntPort());
+  EXPECT_EQ(PORT_UNSPECIFIED, invalid2.IntPort());
   EXPECT_EQ("", invalid2.path());
   EXPECT_EQ("", invalid2.query());
   EXPECT_EQ("", invalid2.ref());
@@ -190,7 +200,7 @@
   EXPECT_EQ("", url2.password());
   EXPECT_EQ("", url2.host());
   EXPECT_EQ("", url2.port());
-  EXPECT_EQ(url_parse::PORT_UNSPECIFIED, url2.IntPort());
+  EXPECT_EQ(PORT_UNSPECIFIED, url2.IntPort());
   EXPECT_EQ("/foo;bar", url2.path());
   EXPECT_EQ("q=a", url2.query());
   EXPECT_EQ("ref", url2.ref());
@@ -208,8 +218,49 @@
   EXPECT_EQ("", inner->ref());
 }
 
+TEST(GURLTest, IsValid) {
+  const char* valid_cases[] = {
+    "http://google.com",
+    "unknown://google.com",
+    "http://user:pass@google.com",
+    "http://google.com:12345",
+    "http://google.com/path",
+    "http://google.com//path",
+    "http://google.com?k=v#fragment",
+    "http://user:pass@google.com:12345/path?k=v#fragment",
+    "http:/path",
+    "http:path",
+    "://google.com",
+  };
+  for (size_t i = 0; i < ARRAYSIZE(valid_cases); i++) {
+    EXPECT_TRUE(GURL(valid_cases[i]).is_valid())
+        << "Case: " << valid_cases[i];
+  }
+
+  const char* invalid_cases[] = {
+    "http://?k=v",
+    "http:://google.com",
+    "http//google.com",
+    "http://google.com:12three45",
+    "path",
+  };
+  for (size_t i = 0; i < ARRAYSIZE(invalid_cases); i++) {
+    EXPECT_FALSE(GURL(invalid_cases[i]).is_valid())
+        << "Case: " << invalid_cases[i];
+  }
+}
+
+TEST(GURLTest, ExtraSlashesBeforeAuthority) {
+  // According to RFC3986, the hier-part for URI with an authority must use only
+  // two slashes, GURL intentionally just ignores slashes more than 2 and parses
+  // the following part as an authority.
+  GURL url("http:///host");
+  EXPECT_EQ("host", url.host());
+  EXPECT_EQ("/", url.path());
+}
+
 // Given an invalid URL, we should still get most of the components.
-TEST(GURLTest, Invalid) {
+TEST(GURLTest, ComponentGettersWorkEvenForInvalidURL) {
   GURL url("http:google.com:foo");
   EXPECT_FALSE(url.is_valid());
   EXPECT_EQ("http://google.com:foo/", url.possibly_invalid_spec());
@@ -219,7 +270,7 @@
   EXPECT_EQ("", url.password());
   EXPECT_EQ("google.com", url.host());
   EXPECT_EQ("foo", url.port());
-  EXPECT_EQ(url_parse::PORT_INVALID, url.IntPort());
+  EXPECT_EQ(PORT_INVALID, url.IntPort());
   EXPECT_EQ("/", url.path());
   EXPECT_EQ("", url.query());
   EXPECT_EQ("", url.ref());
@@ -372,7 +423,7 @@
 TEST(GURLTest, ClearFragmentOnDataUrl) {
   // http://crbug.com/291747 - a data URL may legitimately have trailing
   // whitespace in the spec after the ref is cleared. Test this does not trigger
-  // the url_parse::Parsed importing validation DCHECK in GURL.
+  // the Parsed importing validation DCHECK in GURL.
   GURL url(" data: one ? two # three ");
 
   // By default the trailing whitespace will have been stripped.
@@ -443,16 +494,16 @@
     {"gopher://www.google.com:80/", 80},
 
     // file - no port
-    {"file://www.google.com/", url_parse::PORT_UNSPECIFIED},
-    {"file://www.google.com:443/", url_parse::PORT_UNSPECIFIED},
+    {"file://www.google.com/", PORT_UNSPECIFIED},
+    {"file://www.google.com:443/", PORT_UNSPECIFIED},
 
     // data - no port
-    {"data:www.google.com:90", url_parse::PORT_UNSPECIFIED},
-    {"data:www.google.com", url_parse::PORT_UNSPECIFIED},
+    {"data:www.google.com:90", PORT_UNSPECIFIED},
+    {"data:www.google.com", PORT_UNSPECIFIED},
 
     // filesystem - no port
-    {"filesystem:http://www.google.com:90/t/foo", url_parse::PORT_UNSPECIFIED},
-    {"filesystem:file:///t/foo", url_parse::PORT_UNSPECIFIED},
+    {"filesystem:http://www.google.com:90/t/foo", PORT_UNSPECIFIED},
+    {"filesystem:file:///t/foo", PORT_UNSPECIFIED},
   };
 
   for (size_t i = 0; i < ARRAYSIZE(port_tests); i++) {
@@ -583,3 +634,5 @@
   EXPECT_TRUE(GURL("wss://bar/").SchemeIsWSOrWSS());
   EXPECT_FALSE(GURL("http://bar/").SchemeIsWSOrWSS());
 }
+
+}  // namespace url
diff --git a/url/third_party/mozilla/url_parse.cc b/url/third_party/mozilla/url_parse.cc
index 84a7558..6256796 100644
--- a/url/third_party/mozilla/url_parse.cc
+++ b/url/third_party/mozilla/url_parse.cc
@@ -43,7 +43,7 @@
 #include "url/url_util.h"
 #include "url/url_util_internal.h"
 
-namespace url_parse {
+namespace url {
 
 namespace {
 
@@ -376,7 +376,7 @@
     return;
   }
 
-  url_parse::Component inner_scheme;
+  Component inner_scheme;
   const CHAR* inner_spec = &spec[inner_start];
   int inner_spec_len = spec_len - inner_start;
 
@@ -394,15 +394,13 @@
 
   Parsed inner_parsed;
 
-  if (url_util::CompareSchemeComponent(
-      spec, inner_scheme, url_util::kFileScheme)) {
+  if (CompareSchemeComponent(spec, inner_scheme, kFileScheme)) {
     // File URLs are special.
     ParseFileURL(inner_spec, inner_spec_len, &inner_parsed);
-  } else if (url_util::CompareSchemeComponent(spec, inner_scheme,
-      url_util::kFileSystemScheme)) {
+  } else if (CompareSchemeComponent(spec, inner_scheme, kFileSystemScheme)) {
     // Filesystem URLs don't nest.
     return;
-  } else if (url_util::IsStandard(spec, inner_scheme)) {
+  } else if (IsStandard(spec, inner_scheme)) {
     // All "normal" URLs.
     DoParseStandardURL(inner_spec, inner_spec_len, &inner_parsed);
   } else {
@@ -686,7 +684,7 @@
     cur++;
 
   // Save the new query
-  *query = url_parse::MakeRange(cur, end);
+  *query = MakeRange(cur, end);
   return true;
 }
 
@@ -943,4 +941,4 @@
   DoParseAfterScheme(spec, spec_len, after_scheme, parsed);
 }
 
-}  // namespace url_parse
+}  // namespace url
diff --git a/url/third_party/mozilla/url_parse.h b/url/third_party/mozilla/url_parse.h
index 9d943e5..cc3f2dd 100644
--- a/url/third_party/mozilla/url_parse.h
+++ b/url/third_party/mozilla/url_parse.h
@@ -11,7 +11,7 @@
 #include "base/strings/string16.h"
 #include "url/url_export.h"
 
-namespace url_parse {
+namespace url {
 
 // Deprecated, but WebKit/WebCore/platform/KURLGooglePrivate.h and
 // KURLGoogle.cpp still rely on this type.
@@ -69,17 +69,17 @@
 //
 // Typical usage would be:
 //
-//    url_parse::Parsed parsed;
-//    url_parse::Component scheme;
-//    if (!url_parse::ExtractScheme(url, url_len, &scheme))
+//    Parsed parsed;
+//    Component scheme;
+//    if (!ExtractScheme(url, url_len, &scheme))
 //      return I_CAN_NOT_FIND_THE_SCHEME_DUDE;
 //
 //    if (IsStandardScheme(url, scheme))  // Not provided by this component
 //      url_parseParseStandardURL(url, url_len, &parsed);
 //    else if (IsFileURL(url, scheme))    // Not provided by this component
-//      url_parse::ParseFileURL(url, url_len, &parsed);
+//      ParseFileURL(url, url_len, &parsed);
 //    else
-//      url_parse::ParsePathURL(url, url_len, &parsed);
+//      ParsePathURL(url, url_len, &parsed);
 //
 struct URL_EXPORT Parsed {
   // Identifies different components.
@@ -367,6 +367,6 @@
                                      Component* key,
                                      Component* value);
 
-}  // namespace url_parse
+}  // namespace url
 
 #endif  // URL_THIRD_PARTY_MOZILLA_URL_PARSE_H_
diff --git a/url/url_canon.h b/url/url_canon.h
index e118f3a..624eeaf 100644
--- a/url/url_canon.h
+++ b/url/url_canon.h
@@ -12,7 +12,7 @@
 #include "url/url_export.h"
 #include "url/url_parse.h"
 
-namespace url_canon {
+namespace url {
 
 // Canonicalizer output -------------------------------------------------------
 
@@ -274,13 +274,13 @@
 //
 // The 8-bit version requires UTF-8 encoding.
 URL_EXPORT bool CanonicalizeScheme(const char* spec,
-                                   const url_parse::Component& scheme,
+                                   const Component& scheme,
                                    CanonOutput* output,
-                                   url_parse::Component* out_scheme);
+                                   Component* out_scheme);
 URL_EXPORT bool CanonicalizeScheme(const base::char16* spec,
-                                   const url_parse::Component& scheme,
+                                   const Component& scheme,
                                    CanonOutput* output,
-                                   url_parse::Component* out_scheme);
+                                   Component* out_scheme);
 
 // User info: username/password. If present, this will add the delimiters so
 // the output will be "<username>:<password>@" or "<username>@". Empty
@@ -293,20 +293,19 @@
 //
 // The 8-bit version requires UTF-8 encoding.
 URL_EXPORT bool CanonicalizeUserInfo(const char* username_source,
-                                     const url_parse::Component& username,
+                                     const Component& username,
                                      const char* password_source,
-                                     const url_parse::Component& password,
+                                     const Component& password,
                                      CanonOutput* output,
-                                     url_parse::Component* out_username,
-                                     url_parse::Component* out_password);
+                                     Component* out_username,
+                                     Component* out_password);
 URL_EXPORT bool CanonicalizeUserInfo(const base::char16* username_source,
-                                     const url_parse::Component& username,
+                                     const Component& username,
                                      const base::char16* password_source,
-                                     const url_parse::Component& password,
+                                     const Component& password,
                                      CanonOutput* output,
-                                     url_parse::Component* out_username,
-                                     url_parse::Component* out_password);
-
+                                     Component* out_username,
+                                     Component* out_password);
 
 // This structure holds detailed state exported from the IP/Host canonicalizers.
 // Additional fields may be added as callers require them.
@@ -339,7 +338,7 @@
   // Location of host within the canonicalized output.
   // CanonicalizeIPAddress() only sets this field if |family| is IPV4 or IPV6.
   // CanonicalizeHostVerbose() always sets it.
-  url_parse::Component out_host;
+  Component out_host;
 
   // |address| contains the parsed IP Address (if any) in its first
   // AddressLength() bytes, in network order. If IsIPAddress() is false
@@ -359,28 +358,27 @@
 // The 8-bit version requires UTF-8 encoding.  Use this version when you only
 // need to know whether canonicalization succeeded.
 URL_EXPORT bool CanonicalizeHost(const char* spec,
-                                 const url_parse::Component& host,
+                                 const Component& host,
                                  CanonOutput* output,
-                                 url_parse::Component* out_host);
+                                 Component* out_host);
 URL_EXPORT bool CanonicalizeHost(const base::char16* spec,
-                                 const url_parse::Component& host,
+                                 const Component& host,
                                  CanonOutput* output,
-                                 url_parse::Component* out_host);
+                                 Component* out_host);
 
 // Extended version of CanonicalizeHost, which returns additional information.
 // Use this when you need to know whether the hostname was an IP address.
 // A successful return is indicated by host_info->family != BROKEN.  See the
 // definition of CanonHostInfo above for details.
 URL_EXPORT void CanonicalizeHostVerbose(const char* spec,
-                                        const url_parse::Component& host,
+                                        const Component& host,
                                         CanonOutput* output,
                                         CanonHostInfo* host_info);
 URL_EXPORT void CanonicalizeHostVerbose(const base::char16* spec,
-                                        const url_parse::Component& host,
+                                        const Component& host,
                                         CanonOutput* output,
                                         CanonHostInfo* host_info);
 
-
 // IP addresses.
 //
 // Tries to interpret the given host name as an IPv4 or IPv6 address. If it is
@@ -392,29 +390,29 @@
 // the input is unescaped and name-prepped, etc. It should not normally be
 // necessary or wise to call this directly.
 URL_EXPORT void CanonicalizeIPAddress(const char* spec,
-                                      const url_parse::Component& host,
+                                      const Component& host,
                                       CanonOutput* output,
                                       CanonHostInfo* host_info);
 URL_EXPORT void CanonicalizeIPAddress(const base::char16* spec,
-                                      const url_parse::Component& host,
+                                      const Component& host,
                                       CanonOutput* output,
                                       CanonHostInfo* host_info);
 
 // Port: this function will add the colon for the port if a port is present.
-// The caller can pass url_parse::PORT_UNSPECIFIED as the
+// The caller can pass PORT_UNSPECIFIED as the
 // default_port_for_scheme argument if there is no default port.
 //
 // The 8-bit version requires UTF-8 encoding.
 URL_EXPORT bool CanonicalizePort(const char* spec,
-                                 const url_parse::Component& port,
+                                 const Component& port,
                                  int default_port_for_scheme,
                                  CanonOutput* output,
-                                 url_parse::Component* out_port);
+                                 Component* out_port);
 URL_EXPORT bool CanonicalizePort(const base::char16* spec,
-                                 const url_parse::Component& port,
+                                 const Component& port,
                                  int default_port_for_scheme,
                                  CanonOutput* output,
-                                 url_parse::Component* out_port);
+                                 Component* out_port);
 
 // Returns the default port for the given canonical scheme, or PORT_UNSPECIFIED
 // if the scheme is unknown.
@@ -430,13 +428,13 @@
 // the path that the server expects (we'll escape high-bit characters), so
 // if something is invalid, it's their problem.
 URL_EXPORT bool CanonicalizePath(const char* spec,
-                                 const url_parse::Component& path,
+                                 const Component& path,
                                  CanonOutput* output,
-                                 url_parse::Component* out_path);
+                                 Component* out_path);
 URL_EXPORT bool CanonicalizePath(const base::char16* spec,
-                                 const url_parse::Component& path,
+                                 const Component& path,
                                  CanonOutput* output,
-                                 url_parse::Component* out_path);
+                                 Component* out_path);
 
 // Canonicalizes the input as a file path. This is like CanonicalizePath except
 // that it also handles Windows drive specs. For example, the path can begin
@@ -445,13 +443,13 @@
 //
 // The 8-bit version requires UTF-8 encoding.
 URL_EXPORT bool FileCanonicalizePath(const char* spec,
-                                     const url_parse::Component& path,
+                                     const Component& path,
                                      CanonOutput* output,
-                                     url_parse::Component* out_path);
+                                     Component* out_path);
 URL_EXPORT bool FileCanonicalizePath(const base::char16* spec,
-                                     const url_parse::Component& path,
+                                     const Component& path,
                                      CanonOutput* output,
-                                     url_parse::Component* out_path);
+                                     Component* out_path);
 
 // Query: Prepends the ? if needed.
 //
@@ -466,15 +464,15 @@
 //
 // The converter can be NULL. In this case, the output encoding will be UTF-8.
 URL_EXPORT void CanonicalizeQuery(const char* spec,
-                                  const url_parse::Component& query,
+                                  const Component& query,
                                   CharsetConverter* converter,
                                   CanonOutput* output,
-                                  url_parse::Component* out_query);
+                                  Component* out_query);
 URL_EXPORT void CanonicalizeQuery(const base::char16* spec,
-                                  const url_parse::Component& query,
+                                  const Component& query,
                                   CharsetConverter* converter,
                                   CanonOutput* output,
-                                  url_parse::Component* out_query);
+                                  Component* out_query);
 
 // Ref: Prepends the # if needed. The output will be UTF-8 (this is the only
 // canonicalizer that does not produce ASCII output). The output is
@@ -483,13 +481,13 @@
 // This function will not fail. If the input is invalid UTF-8/UTF-16, we'll use
 // the "Unicode replacement character" for the confusing bits and copy the rest.
 URL_EXPORT void CanonicalizeRef(const char* spec,
-                                const url_parse::Component& path,
+                                const Component& path,
                                 CanonOutput* output,
-                                url_parse::Component* out_path);
+                                Component* out_path);
 URL_EXPORT void CanonicalizeRef(const base::char16* spec,
-                                const url_parse::Component& path,
+                                const Component& path,
                                 CanonOutput* output,
-                                url_parse::Component* out_path);
+                                Component* out_path);
 
 // Full canonicalizer ---------------------------------------------------------
 //
@@ -504,57 +502,57 @@
 // Use for standard URLs with authorities and paths.
 URL_EXPORT bool CanonicalizeStandardURL(const char* spec,
                                         int spec_len,
-                                        const url_parse::Parsed& parsed,
+                                        const Parsed& parsed,
                                         CharsetConverter* query_converter,
                                         CanonOutput* output,
-                                        url_parse::Parsed* new_parsed);
+                                        Parsed* new_parsed);
 URL_EXPORT bool CanonicalizeStandardURL(const base::char16* spec,
                                         int spec_len,
-                                        const url_parse::Parsed& parsed,
+                                        const Parsed& parsed,
                                         CharsetConverter* query_converter,
                                         CanonOutput* output,
-                                        url_parse::Parsed* new_parsed);
+                                        Parsed* new_parsed);
 
 // Use for file URLs.
 URL_EXPORT bool CanonicalizeFileURL(const char* spec,
                                     int spec_len,
-                                    const url_parse::Parsed& parsed,
+                                    const Parsed& parsed,
                                     CharsetConverter* query_converter,
                                     CanonOutput* output,
-                                    url_parse::Parsed* new_parsed);
+                                    Parsed* new_parsed);
 URL_EXPORT bool CanonicalizeFileURL(const base::char16* spec,
                                     int spec_len,
-                                    const url_parse::Parsed& parsed,
+                                    const Parsed& parsed,
                                     CharsetConverter* query_converter,
                                     CanonOutput* output,
-                                    url_parse::Parsed* new_parsed);
+                                    Parsed* new_parsed);
 
 // Use for filesystem URLs.
 URL_EXPORT bool CanonicalizeFileSystemURL(const char* spec,
                                           int spec_len,
-                                          const url_parse::Parsed& parsed,
+                                          const Parsed& parsed,
                                           CharsetConverter* query_converter,
                                           CanonOutput* output,
-                                          url_parse::Parsed* new_parsed);
+                                          Parsed* new_parsed);
 URL_EXPORT bool CanonicalizeFileSystemURL(const base::char16* spec,
                                           int spec_len,
-                                          const url_parse::Parsed& parsed,
+                                          const Parsed& parsed,
                                           CharsetConverter* query_converter,
                                           CanonOutput* output,
-                                          url_parse::Parsed* new_parsed);
+                                          Parsed* new_parsed);
 
 // Use for path URLs such as javascript. This does not modify the path in any
 // way, for example, by escaping it.
 URL_EXPORT bool CanonicalizePathURL(const char* spec,
                                     int spec_len,
-                                    const url_parse::Parsed& parsed,
+                                    const Parsed& parsed,
                                     CanonOutput* output,
-                                    url_parse::Parsed* new_parsed);
+                                    Parsed* new_parsed);
 URL_EXPORT bool CanonicalizePathURL(const base::char16* spec,
                                     int spec_len,
-                                    const url_parse::Parsed& parsed,
+                                    const Parsed& parsed,
                                     CanonOutput* output,
-                                    url_parse::Parsed* new_parsed);
+                                    Parsed* new_parsed);
 
 // Use for mailto URLs. This "canonicalizes" the url into a path and query
 // component. It does not attempt to merge "to" fields. It uses UTF-8 for
@@ -563,14 +561,14 @@
 // etc. which would influence a query encoding normally are irrelevant.
 URL_EXPORT bool CanonicalizeMailtoURL(const char* spec,
                                       int spec_len,
-                                      const url_parse::Parsed& parsed,
+                                      const Parsed& parsed,
                                       CanonOutput* output,
-                                      url_parse::Parsed* new_parsed);
+                                      Parsed* new_parsed);
 URL_EXPORT bool CanonicalizeMailtoURL(const base::char16* spec,
                                       int spec_len,
-                                      const url_parse::Parsed& parsed,
+                                      const Parsed& parsed,
                                       CanonOutput* output,
-                                      url_parse::Parsed* new_parsed);
+                                      Parsed* new_parsed);
 
 // Part replacer --------------------------------------------------------------
 
@@ -580,7 +578,7 @@
 // treated on the same code path as regular canonicalization (the same string
 // for each component).
 //
-// A url_parse::Parsed structure usually goes along with this. Those
+// A Parsed structure usually goes along with this. Those
 // components identify offsets within these strings, so that they can all be
 // in the same string, or spread arbitrarily across different ones.
 //
@@ -643,7 +641,7 @@
   }
 
   // Scheme
-  void SetScheme(const CHAR* s, const url_parse::Component& comp) {
+  void SetScheme(const CHAR* s, const Component& comp) {
     sources_.scheme = s;
     components_.scheme = comp;
   }
@@ -651,86 +649,86 @@
   bool IsSchemeOverridden() const { return sources_.scheme != NULL; }
 
   // Username
-  void SetUsername(const CHAR* s, const url_parse::Component& comp) {
+  void SetUsername(const CHAR* s, const Component& comp) {
     sources_.username = s;
     components_.username = comp;
   }
   void ClearUsername() {
     sources_.username = Placeholder();
-    components_.username = url_parse::Component();
+    components_.username = Component();
   }
   bool IsUsernameOverridden() const { return sources_.username != NULL; }
 
   // Password
-  void SetPassword(const CHAR* s, const url_parse::Component& comp) {
+  void SetPassword(const CHAR* s, const Component& comp) {
     sources_.password = s;
     components_.password = comp;
   }
   void ClearPassword() {
     sources_.password = Placeholder();
-    components_.password = url_parse::Component();
+    components_.password = Component();
   }
   bool IsPasswordOverridden() const { return sources_.password != NULL; }
 
   // Host
-  void SetHost(const CHAR* s, const url_parse::Component& comp) {
+  void SetHost(const CHAR* s, const Component& comp) {
     sources_.host = s;
     components_.host = comp;
   }
   void ClearHost() {
     sources_.host = Placeholder();
-    components_.host = url_parse::Component();
+    components_.host = Component();
   }
   bool IsHostOverridden() const { return sources_.host != NULL; }
 
   // Port
-  void SetPort(const CHAR* s, const url_parse::Component& comp) {
+  void SetPort(const CHAR* s, const Component& comp) {
     sources_.port = s;
     components_.port = comp;
   }
   void ClearPort() {
     sources_.port = Placeholder();
-    components_.port = url_parse::Component();
+    components_.port = Component();
   }
   bool IsPortOverridden() const { return sources_.port != NULL; }
 
   // Path
-  void SetPath(const CHAR* s, const url_parse::Component& comp) {
+  void SetPath(const CHAR* s, const Component& comp) {
     sources_.path = s;
     components_.path = comp;
   }
   void ClearPath() {
     sources_.path = Placeholder();
-    components_.path = url_parse::Component();
+    components_.path = Component();
   }
   bool IsPathOverridden() const { return sources_.path != NULL; }
 
   // Query
-  void SetQuery(const CHAR* s, const url_parse::Component& comp) {
+  void SetQuery(const CHAR* s, const Component& comp) {
     sources_.query = s;
     components_.query = comp;
   }
   void ClearQuery() {
     sources_.query = Placeholder();
-    components_.query = url_parse::Component();
+    components_.query = Component();
   }
   bool IsQueryOverridden() const { return sources_.query != NULL; }
 
   // Ref
-  void SetRef(const CHAR* s, const url_parse::Component& comp) {
+  void SetRef(const CHAR* s, const Component& comp) {
     sources_.ref = s;
     components_.ref = comp;
   }
   void ClearRef() {
     sources_.ref = Placeholder();
-    components_.ref = url_parse::Component();
+    components_.ref = Component();
   }
   bool IsRefOverridden() const { return sources_.ref != NULL; }
 
   // Getters for the itnernal data. See the variables below for how the
   // information is encoded.
   const URLComponentSource<CHAR>& sources() const { return sources_; }
-  const url_parse::Parsed& components() const { return components_; }
+  const Parsed& components() const { return components_; }
 
  private:
   // Returns a pointer to a static empty string that is used as a placeholder
@@ -751,80 +749,80 @@
   // We use a pointer to the empty string for the source when the component
   // should be deleted.
   URLComponentSource<CHAR> sources_;
-  url_parse::Parsed components_;
+  Parsed components_;
 };
 
 // The base must be an 8-bit canonical URL.
 URL_EXPORT bool ReplaceStandardURL(const char* base,
-                                   const url_parse::Parsed& base_parsed,
+                                   const Parsed& base_parsed,
                                    const Replacements<char>& replacements,
                                    CharsetConverter* query_converter,
                                    CanonOutput* output,
-                                   url_parse::Parsed* new_parsed);
+                                   Parsed* new_parsed);
 URL_EXPORT bool ReplaceStandardURL(
     const char* base,
-    const url_parse::Parsed& base_parsed,
+    const Parsed& base_parsed,
     const Replacements<base::char16>& replacements,
     CharsetConverter* query_converter,
     CanonOutput* output,
-    url_parse::Parsed* new_parsed);
+    Parsed* new_parsed);
 
 // Filesystem URLs can only have the path, query, or ref replaced.
 // All other components will be ignored.
 URL_EXPORT bool ReplaceFileSystemURL(const char* base,
-                                     const url_parse::Parsed& base_parsed,
+                                     const Parsed& base_parsed,
                                      const Replacements<char>& replacements,
                                      CharsetConverter* query_converter,
                                      CanonOutput* output,
-                                     url_parse::Parsed* new_parsed);
+                                     Parsed* new_parsed);
 URL_EXPORT bool ReplaceFileSystemURL(
     const char* base,
-    const url_parse::Parsed& base_parsed,
+    const Parsed& base_parsed,
     const Replacements<base::char16>& replacements,
     CharsetConverter* query_converter,
     CanonOutput* output,
-    url_parse::Parsed* new_parsed);
+    Parsed* new_parsed);
 
 // Replacing some parts of a file URL is not permitted. Everything except
 // the host, path, query, and ref will be ignored.
 URL_EXPORT bool ReplaceFileURL(const char* base,
-                               const url_parse::Parsed& base_parsed,
+                               const Parsed& base_parsed,
                                const Replacements<char>& replacements,
                                CharsetConverter* query_converter,
                                CanonOutput* output,
-                               url_parse::Parsed* new_parsed);
+                               Parsed* new_parsed);
 URL_EXPORT bool ReplaceFileURL(const char* base,
-                               const url_parse::Parsed& base_parsed,
+                               const Parsed& base_parsed,
                                const Replacements<base::char16>& replacements,
                                CharsetConverter* query_converter,
                                CanonOutput* output,
-                               url_parse::Parsed* new_parsed);
+                               Parsed* new_parsed);
 
 // Path URLs can only have the scheme and path replaced. All other components
 // will be ignored.
 URL_EXPORT bool ReplacePathURL(const char* base,
-                               const url_parse::Parsed& base_parsed,
+                               const Parsed& base_parsed,
                                const Replacements<char>& replacements,
                                CanonOutput* output,
-                               url_parse::Parsed* new_parsed);
+                               Parsed* new_parsed);
 URL_EXPORT bool ReplacePathURL(const char* base,
-                               const url_parse::Parsed& base_parsed,
+                               const Parsed& base_parsed,
                                const Replacements<base::char16>& replacements,
                                CanonOutput* output,
-                               url_parse::Parsed* new_parsed);
+                               Parsed* new_parsed);
 
 // Mailto URLs can only have the scheme, path, and query replaced.
 // All other components will be ignored.
 URL_EXPORT bool ReplaceMailtoURL(const char* base,
-                                 const url_parse::Parsed& base_parsed,
+                                 const Parsed& base_parsed,
                                  const Replacements<char>& replacements,
                                  CanonOutput* output,
-                                 url_parse::Parsed* new_parsed);
+                                 Parsed* new_parsed);
 URL_EXPORT bool ReplaceMailtoURL(const char* base,
-                                 const url_parse::Parsed& base_parsed,
+                                 const Parsed& base_parsed,
                                  const Replacements<base::char16>& replacements,
                                  CanonOutput* output,
-                                 url_parse::Parsed* new_parsed);
+                                 Parsed* new_parsed);
 
 // Relative URL ---------------------------------------------------------------
 
@@ -840,19 +838,19 @@
 //
 // The base URL should always be canonical, therefore is ASCII.
 URL_EXPORT bool IsRelativeURL(const char* base,
-                              const url_parse::Parsed& base_parsed,
+                              const Parsed& base_parsed,
                               const char* fragment,
                               int fragment_len,
                               bool is_base_hierarchical,
                               bool* is_relative,
-                              url_parse::Component* relative_component);
+                              Component* relative_component);
 URL_EXPORT bool IsRelativeURL(const char* base,
-                              const url_parse::Parsed& base_parsed,
+                              const Parsed& base_parsed,
                               const base::char16* fragment,
                               int fragment_len,
                               bool is_base_hierarchical,
                               bool* is_relative,
-                              url_parse::Component* relative_component);
+                              Component* relative_component);
 
 // Given a canonical parsed source URL, a URL fragment known to be relative,
 // and the identified relevant portion of the relative URL (computed by
@@ -872,25 +870,23 @@
 // Returns true on success. On failure, the output will be "something
 // reasonable" that will be consistent and valid, just probably not what
 // was intended by the web page author or caller.
-URL_EXPORT bool ResolveRelativeURL(
-    const char* base_url,
-    const url_parse::Parsed& base_parsed,
-    bool base_is_file,
-    const char* relative_url,
-    const url_parse::Component& relative_component,
-    CharsetConverter* query_converter,
-    CanonOutput* output,
-    url_parse::Parsed* out_parsed);
-URL_EXPORT bool ResolveRelativeURL(
-    const char* base_url,
-    const url_parse::Parsed& base_parsed,
-    bool base_is_file,
-    const base::char16* relative_url,
-    const url_parse::Component& relative_component,
-    CharsetConverter* query_converter,
-    CanonOutput* output,
-    url_parse::Parsed* out_parsed);
+URL_EXPORT bool ResolveRelativeURL(const char* base_url,
+                                   const Parsed& base_parsed,
+                                   bool base_is_file,
+                                   const char* relative_url,
+                                   const Component& relative_component,
+                                   CharsetConverter* query_converter,
+                                   CanonOutput* output,
+                                   Parsed* out_parsed);
+URL_EXPORT bool ResolveRelativeURL(const char* base_url,
+                                   const Parsed& base_parsed,
+                                   bool base_is_file,
+                                   const base::char16* relative_url,
+                                   const Component& relative_component,
+                                   CharsetConverter* query_converter,
+                                   CanonOutput* output,
+                                   Parsed* out_parsed);
 
-}  // namespace url_canon
+}  // namespace url
 
 #endif  // URL_URL_CANON_H_
diff --git a/url/url_canon_etc.cc b/url/url_canon_etc.cc
index a1512f6..7409efd 100644
--- a/url/url_canon_etc.cc
+++ b/url/url_canon_etc.cc
@@ -9,7 +9,7 @@
 #include "url/url_canon.h"
 #include "url/url_canon_internal.h"
 
-namespace url_canon {
+namespace url {
 
 namespace {
 
@@ -82,12 +82,12 @@
 
 template<typename CHAR, typename UCHAR>
 bool DoScheme(const CHAR* spec,
-              const url_parse::Component& scheme,
+              const Component& scheme,
               CanonOutput* output,
-              url_parse::Component* out_scheme) {
+              Component* out_scheme) {
   if (scheme.len <= 0) {
     // Scheme is unspecified or empty, convert to empty by appending a colon.
-    *out_scheme = url_parse::Component(output->length(), 0);
+    *out_scheme = Component(output->length(), 0);
     output->push_back(':');
     return true;
   }
@@ -98,7 +98,7 @@
   // Danger: it's important that this code does not strip any characters: it
   // only emits the canonical version (be it valid or escaped) of each of
   // the input characters. Stripping would put it out of sync with
-  // url_util::FindAndCompareScheme, which could cause some security checks on
+  // FindAndCompareScheme, which could cause some security checks on
   // schemes to be incorrect.
   bool success = true;
   int end = scheme.end();
@@ -146,16 +146,16 @@
 // replacing components.
 template<typename CHAR, typename UCHAR>
 bool DoUserInfo(const CHAR* username_spec,
-                const url_parse::Component& username,
+                const Component& username,
                 const CHAR* password_spec,
-                const url_parse::Component& password,
+                const Component& password,
                 CanonOutput* output,
-                url_parse::Component* out_username,
-                url_parse::Component* out_password) {
+                Component* out_username,
+                Component* out_password) {
   if (username.len <= 0 && password.len <= 0) {
     // Common case: no user info. We strip empty username/passwords.
-    *out_username = url_parse::Component();
-    *out_password = url_parse::Component();
+    *out_username = Component();
+    *out_password = Component();
     return true;
   }
 
@@ -177,7 +177,7 @@
                        CHAR_USERINFO, output);
     out_password->len = output->length() - out_password->begin;
   } else {
-    *out_password = url_parse::Component();
+    *out_password = Component();
   }
 
   output->push_back('@');
@@ -192,18 +192,17 @@
 // This function will prepend the colon if there will be a port.
 template<typename CHAR, typename UCHAR>
 bool DoPort(const CHAR* spec,
-            const url_parse::Component& port,
+            const Component& port,
             int default_port_for_scheme,
             CanonOutput* output,
-            url_parse::Component* out_port) {
-  int port_num = url_parse::ParsePort(spec, port);
-  if (port_num == url_parse::PORT_UNSPECIFIED ||
-      port_num == default_port_for_scheme) {
-    *out_port = url_parse::Component();
+            Component* out_port) {
+  int port_num = ParsePort(spec, port);
+  if (port_num == PORT_UNSPECIFIED || port_num == default_port_for_scheme) {
+    *out_port = Component();
     return true;  // Leave port empty.
   }
 
-  if (port_num == url_parse::PORT_INVALID) {
+  if (port_num == PORT_INVALID) {
     // Invalid port: We'll copy the text from the input so the user can see
     // what the error was, and mark the URL as invalid by returning false.
     output->push_back(':');
@@ -231,12 +230,12 @@
 
 template<typename CHAR, typename UCHAR>
 void DoCanonicalizeRef(const CHAR* spec,
-                       const url_parse::Component& ref,
+                       const Component& ref,
                        CanonOutput* output,
-                       url_parse::Component* out_ref) {
+                       Component* out_ref) {
   if (ref.len < 0) {
     // Common case of no ref.
-    *out_ref = url_parse::Component();
+    *out_ref = Component();
     return;
   }
 
@@ -295,74 +294,74 @@
 }
 
 bool CanonicalizeScheme(const char* spec,
-                        const url_parse::Component& scheme,
+                        const Component& scheme,
                         CanonOutput* output,
-                        url_parse::Component* out_scheme) {
+                        Component* out_scheme) {
   return DoScheme<char, unsigned char>(spec, scheme, output, out_scheme);
 }
 
 bool CanonicalizeScheme(const base::char16* spec,
-                        const url_parse::Component& scheme,
+                        const Component& scheme,
                         CanonOutput* output,
-                        url_parse::Component* out_scheme) {
+                        Component* out_scheme) {
   return DoScheme<base::char16, base::char16>(spec, scheme, output, out_scheme);
 }
 
 bool CanonicalizeUserInfo(const char* username_source,
-                          const url_parse::Component& username,
+                          const Component& username,
                           const char* password_source,
-                          const url_parse::Component& password,
+                          const Component& password,
                           CanonOutput* output,
-                          url_parse::Component* out_username,
-                          url_parse::Component* out_password) {
+                          Component* out_username,
+                          Component* out_password) {
   return DoUserInfo<char, unsigned char>(
       username_source, username, password_source, password,
       output, out_username, out_password);
 }
 
 bool CanonicalizeUserInfo(const base::char16* username_source,
-                          const url_parse::Component& username,
+                          const Component& username,
                           const base::char16* password_source,
-                          const url_parse::Component& password,
+                          const Component& password,
                           CanonOutput* output,
-                          url_parse::Component* out_username,
-                          url_parse::Component* out_password) {
+                          Component* out_username,
+                          Component* out_password) {
   return DoUserInfo<base::char16, base::char16>(
       username_source, username, password_source, password,
       output, out_username, out_password);
 }
 
 bool CanonicalizePort(const char* spec,
-                      const url_parse::Component& port,
+                      const Component& port,
                       int default_port_for_scheme,
                       CanonOutput* output,
-                      url_parse::Component* out_port) {
+                      Component* out_port) {
   return DoPort<char, unsigned char>(spec, port,
                                      default_port_for_scheme,
                                      output, out_port);
 }
 
 bool CanonicalizePort(const base::char16* spec,
-                      const url_parse::Component& port,
+                      const Component& port,
                       int default_port_for_scheme,
                       CanonOutput* output,
-                      url_parse::Component* out_port) {
+                      Component* out_port) {
   return DoPort<base::char16, base::char16>(spec, port, default_port_for_scheme,
                                             output, out_port);
 }
 
 void CanonicalizeRef(const char* spec,
-                     const url_parse::Component& ref,
+                     const Component& ref,
                      CanonOutput* output,
-                     url_parse::Component* out_ref) {
+                     Component* out_ref) {
   DoCanonicalizeRef<char, unsigned char>(spec, ref, output, out_ref);
 }
 
 void CanonicalizeRef(const base::char16* spec,
-                     const url_parse::Component& ref,
+                     const Component& ref,
                      CanonOutput* output,
-                     url_parse::Component* out_ref) {
+                     Component* out_ref) {
   DoCanonicalizeRef<base::char16, base::char16>(spec, ref, output, out_ref);
 }
 
-}  // namespace url_canon
+}  // namespace url
diff --git a/url/url_canon_filesystemurl.cc b/url/url_canon_filesystemurl.cc
index 225e109..f330e22 100644
--- a/url/url_canon_filesystemurl.cc
+++ b/url/url_canon_filesystemurl.cc
@@ -11,7 +11,7 @@
 #include "url/url_util.h"
 #include "url/url_util_internal.h"
 
-namespace url_canon {
+namespace url {
 
 namespace {
 
@@ -20,18 +20,18 @@
 template<typename CHAR, typename UCHAR>
 bool DoCanonicalizeFileSystemURL(const CHAR* spec,
                                  const URLComponentSource<CHAR>& source,
-                                 const url_parse::Parsed& parsed,
+                                 const Parsed& parsed,
                                  CharsetConverter* charset_converter,
                                  CanonOutput* output,
-                                 url_parse::Parsed* new_parsed) {
+                                 Parsed* new_parsed) {
   // filesystem only uses {scheme, path, query, ref} -- clear the rest.
   new_parsed->username.reset();
   new_parsed->password.reset();
   new_parsed->host.reset();
   new_parsed->port.reset();
 
-  const url_parse::Parsed* inner_parsed = parsed.inner_parsed();
-  url_parse::Parsed new_inner_parsed;
+  const Parsed* inner_parsed = parsed.inner_parsed();
+  Parsed new_inner_parsed;
 
   // Scheme (known, so we don't bother running it through the more
   // complicated scheme canonicalizer).
@@ -43,20 +43,16 @@
     return false;
 
   bool success = true;
-  if (url_util::CompareSchemeComponent(spec, inner_parsed->scheme,
-      url_util::kFileScheme)) {
+  if (CompareSchemeComponent(spec, inner_parsed->scheme, kFileScheme)) {
     new_inner_parsed.scheme.begin = output->length();
     output->Append("file://", 7);
     new_inner_parsed.scheme.len = 4;
     success &= CanonicalizePath(spec, inner_parsed->path, output,
                                 &new_inner_parsed.path);
-  } else if (url_util::IsStandard(spec, inner_parsed->scheme)) {
-    success =
-        url_canon::CanonicalizeStandardURL(spec,
-                                           parsed.inner_parsed()->Length(),
-                                           *parsed.inner_parsed(),
-                                           charset_converter, output,
-                                           &new_inner_parsed);
+  } else if (IsStandard(spec, inner_parsed->scheme)) {
+    success = CanonicalizeStandardURL(spec, parsed.inner_parsed()->Length(),
+                                      *parsed.inner_parsed(), charset_converter,
+                                      output, &new_inner_parsed);
   } else {
     // TODO(ericu): The URL is wrong, but should we try to output more of what
     // we were given?  Echoing back filesystem:mailto etc. doesn't seem all that
@@ -83,10 +79,10 @@
 
 bool CanonicalizeFileSystemURL(const char* spec,
                                int spec_len,
-                               const url_parse::Parsed& parsed,
+                               const Parsed& parsed,
                                CharsetConverter* charset_converter,
                                CanonOutput* output,
-                               url_parse::Parsed* new_parsed) {
+                               Parsed* new_parsed) {
   return DoCanonicalizeFileSystemURL<char, unsigned char>(
       spec, URLComponentSource<char>(spec), parsed, charset_converter, output,
       new_parsed);
@@ -94,40 +90,40 @@
 
 bool CanonicalizeFileSystemURL(const base::char16* spec,
                                int spec_len,
-                               const url_parse::Parsed& parsed,
+                               const Parsed& parsed,
                                CharsetConverter* charset_converter,
                                CanonOutput* output,
-                               url_parse::Parsed* new_parsed) {
+                               Parsed* new_parsed) {
   return DoCanonicalizeFileSystemURL<base::char16, base::char16>(
       spec, URLComponentSource<base::char16>(spec), parsed, charset_converter,
       output, new_parsed);
 }
 
 bool ReplaceFileSystemURL(const char* base,
-                          const url_parse::Parsed& base_parsed,
+                          const Parsed& base_parsed,
                           const Replacements<char>& replacements,
                           CharsetConverter* charset_converter,
                           CanonOutput* output,
-                          url_parse::Parsed* new_parsed) {
+                          Parsed* new_parsed) {
   URLComponentSource<char> source(base);
-  url_parse::Parsed parsed(base_parsed);
+  Parsed parsed(base_parsed);
   SetupOverrideComponents(base, replacements, &source, &parsed);
   return DoCanonicalizeFileSystemURL<char, unsigned char>(
       base, source, parsed, charset_converter, output, new_parsed);
 }
 
 bool ReplaceFileSystemURL(const char* base,
-                          const url_parse::Parsed& base_parsed,
+                          const Parsed& base_parsed,
                           const Replacements<base::char16>& replacements,
                           CharsetConverter* charset_converter,
                           CanonOutput* output,
-                          url_parse::Parsed* new_parsed) {
+                          Parsed* new_parsed) {
   RawCanonOutput<1024> utf8;
   URLComponentSource<char> source(base);
-  url_parse::Parsed parsed(base_parsed);
+  Parsed parsed(base_parsed);
   SetupUTF16OverrideComponents(base, replacements, &utf8, &source, &parsed);
   return DoCanonicalizeFileSystemURL<char, unsigned char>(
       base, source, parsed, charset_converter, output, new_parsed);
 }
 
-}  // namespace url_canon
+}  // namespace url
diff --git a/url/url_canon_fileurl.cc b/url/url_canon_fileurl.cc
index 123583a..1322be7 100644
--- a/url/url_canon_fileurl.cc
+++ b/url/url_canon_fileurl.cc
@@ -9,7 +9,7 @@
 #include "url/url_file.h"
 #include "url/url_parse_internal.h"
 
-namespace url_canon {
+namespace url {
 
 namespace {
 
@@ -25,10 +25,10 @@
                     CanonOutput* output) {
   // The path could be one of several things: /foo/bar, c:/foo/bar, /c:/foo,
   // (with backslashes instead of slashes as well).
-  int num_slashes = url_parse::CountConsecutiveSlashes(spec, begin, end);
+  int num_slashes = CountConsecutiveSlashes(spec, begin, end);
   int after_slashes = begin + num_slashes;
 
-  if (!url_parse::DoesBeginWindowsDriveSpec(spec, after_slashes, end))
+  if (!DoesBeginWindowsDriveSpec(spec, after_slashes, end))
     return begin;  // Haven't consumed any characters
 
   // A drive spec is the start of a path, so we need to add a slash for the
@@ -53,9 +53,9 @@
 
 template<typename CHAR, typename UCHAR>
 bool DoFileCanonicalizePath(const CHAR* spec,
-                            const url_parse::Component& path,
+                            const Component& path,
                             CanonOutput* output,
-                            url_parse::Component* out_path) {
+                            Component* out_path) {
   // Copies and normalizes the "c:" at the beginning, if present.
   out_path->begin = output->length();
   int after_drive;
@@ -72,9 +72,8 @@
     // Use the regular path canonicalizer to canonicalize the rest of the
     // path. Give it a fake output component to write into. DoCanonicalizeFile
     // will compute the full path component.
-    url_parse::Component sub_path =
-        url_parse::MakeRange(after_drive, path.end());
-    url_parse::Component fake_output_path;
+    Component sub_path = MakeRange(after_drive, path.end());
+    Component fake_output_path;
     success = CanonicalizePath(spec, sub_path, output, &fake_output_path);
   } else {
     // No input path, canonicalize to a slash.
@@ -87,14 +86,14 @@
 
 template<typename CHAR, typename UCHAR>
 bool DoCanonicalizeFileURL(const URLComponentSource<CHAR>& source,
-                           const url_parse::Parsed& parsed,
+                           const Parsed& parsed,
                            CharsetConverter* query_converter,
                            CanonOutput* output,
-                           url_parse::Parsed* new_parsed) {
+                           Parsed* new_parsed) {
   // Things we don't set in file: URLs.
-  new_parsed->username = url_parse::Component();
-  new_parsed->password = url_parse::Component();
-  new_parsed->port = url_parse::Component();
+  new_parsed->username = Component();
+  new_parsed->password = Component();
+  new_parsed->port = Component();
 
   // Scheme (known, so we don't bother running it through the more
   // complicated scheme canonicalizer).
@@ -124,10 +123,10 @@
 
 bool CanonicalizeFileURL(const char* spec,
                          int spec_len,
-                         const url_parse::Parsed& parsed,
+                         const Parsed& parsed,
                          CharsetConverter* query_converter,
                          CanonOutput* output,
-                         url_parse::Parsed* new_parsed) {
+                         Parsed* new_parsed) {
   return DoCanonicalizeFileURL<char, unsigned char>(
       URLComponentSource<char>(spec), parsed, query_converter,
       output, new_parsed);
@@ -135,56 +134,56 @@
 
 bool CanonicalizeFileURL(const base::char16* spec,
                          int spec_len,
-                         const url_parse::Parsed& parsed,
+                         const Parsed& parsed,
                          CharsetConverter* query_converter,
                          CanonOutput* output,
-                         url_parse::Parsed* new_parsed) {
+                         Parsed* new_parsed) {
   return DoCanonicalizeFileURL<base::char16, base::char16>(
       URLComponentSource<base::char16>(spec), parsed, query_converter,
       output, new_parsed);
 }
 
 bool FileCanonicalizePath(const char* spec,
-                          const url_parse::Component& path,
+                          const Component& path,
                           CanonOutput* output,
-                          url_parse::Component* out_path) {
+                          Component* out_path) {
   return DoFileCanonicalizePath<char, unsigned char>(spec, path,
                                                      output, out_path);
 }
 
 bool FileCanonicalizePath(const base::char16* spec,
-                          const url_parse::Component& path,
+                          const Component& path,
                           CanonOutput* output,
-                          url_parse::Component* out_path) {
+                          Component* out_path) {
   return DoFileCanonicalizePath<base::char16, base::char16>(spec, path,
                                                             output, out_path);
 }
 
 bool ReplaceFileURL(const char* base,
-                    const url_parse::Parsed& base_parsed,
+                    const Parsed& base_parsed,
                     const Replacements<char>& replacements,
                     CharsetConverter* query_converter,
                     CanonOutput* output,
-                    url_parse::Parsed* new_parsed) {
+                    Parsed* new_parsed) {
   URLComponentSource<char> source(base);
-  url_parse::Parsed parsed(base_parsed);
+  Parsed parsed(base_parsed);
   SetupOverrideComponents(base, replacements, &source, &parsed);
   return DoCanonicalizeFileURL<char, unsigned char>(
       source, parsed, query_converter, output, new_parsed);
 }
 
 bool ReplaceFileURL(const char* base,
-                    const url_parse::Parsed& base_parsed,
+                    const Parsed& base_parsed,
                     const Replacements<base::char16>& replacements,
                     CharsetConverter* query_converter,
                     CanonOutput* output,
-                    url_parse::Parsed* new_parsed) {
+                    Parsed* new_parsed) {
   RawCanonOutput<1024> utf8;
   URLComponentSource<char> source(base);
-  url_parse::Parsed parsed(base_parsed);
+  Parsed parsed(base_parsed);
   SetupUTF16OverrideComponents(base, replacements, &utf8, &source, &parsed);
   return DoCanonicalizeFileURL<char, unsigned char>(
       source, parsed, query_converter, output, new_parsed);
 }
 
-}  // namespace url_canon
+}  // namespace url
diff --git a/url/url_canon_host.cc b/url/url_canon_host.cc
index 9530652..513248a 100644
--- a/url/url_canon_host.cc
+++ b/url/url_canon_host.cc
@@ -6,7 +6,7 @@
 #include "url/url_canon.h"
 #include "url/url_canon_internal.h"
 
-namespace url_canon {
+namespace url {
 
 namespace {
 
@@ -75,8 +75,10 @@
 // |has_non_ascii| will be true if there are any non-7-bit characters, and
 // |has_escaped| will be true if there is a percent sign.
 template<typename CHAR, typename UCHAR>
-void ScanHostname(const CHAR* spec, const url_parse::Component& host,
-                  bool* has_non_ascii, bool* has_escaped) {
+void ScanHostname(const CHAR* spec,
+                  const Component& host,
+                  bool* has_non_ascii,
+                  bool* has_escaped) {
   int end = host.end();
   *has_non_ascii = false;
   *has_escaped = false;
@@ -287,13 +289,13 @@
 
 template<typename CHAR, typename UCHAR>
 void DoHost(const CHAR* spec,
-            const url_parse::Component& host,
+            const Component& host,
             CanonOutput* output,
             CanonHostInfo* host_info) {
   if (host.len <= 0) {
     // Empty hosts don't need anything.
     host_info->family = CanonHostInfo::NEUTRAL;
-    host_info->out_host = url_parse::Component();
+    host_info->out_host = Component();
     return;
   }
 
@@ -322,7 +324,7 @@
     // should not cause an allocation.
     RawCanonOutput<64> canon_ip;
     CanonicalizeIPAddress(output->data(),
-                          url_parse::MakeRange(output_begin, output->length()),
+                          MakeRange(output_begin, output->length()),
                           &canon_ip, host_info);
 
     // If we got an IPv4/IPv6 address, copy the canonical form back to the
@@ -334,15 +336,15 @@
     }
   }
 
-  host_info->out_host = url_parse::MakeRange(output_begin, output->length());
+  host_info->out_host = MakeRange(output_begin, output->length());
 }
 
 }  // namespace
 
 bool CanonicalizeHost(const char* spec,
-                      const url_parse::Component& host,
+                      const Component& host,
                       CanonOutput* output,
-                      url_parse::Component* out_host) {
+                      Component* out_host) {
   CanonHostInfo host_info;
   DoHost<char, unsigned char>(spec, host, output, &host_info);
   *out_host = host_info.out_host;
@@ -350,9 +352,9 @@
 }
 
 bool CanonicalizeHost(const base::char16* spec,
-                      const url_parse::Component& host,
+                      const Component& host,
                       CanonOutput* output,
-                      url_parse::Component* out_host) {
+                      Component* out_host) {
   CanonHostInfo host_info;
   DoHost<base::char16, base::char16>(spec, host, output, &host_info);
   *out_host = host_info.out_host;
@@ -360,17 +362,17 @@
 }
 
 void CanonicalizeHostVerbose(const char* spec,
-                             const url_parse::Component& host,
+                             const Component& host,
                              CanonOutput* output,
-                             CanonHostInfo *host_info) {
+                             CanonHostInfo* host_info) {
   DoHost<char, unsigned char>(spec, host, output, host_info);
 }
 
 void CanonicalizeHostVerbose(const base::char16* spec,
-                             const url_parse::Component& host,
+                             const Component& host,
                              CanonOutput* output,
-                             CanonHostInfo *host_info) {
+                             CanonHostInfo* host_info) {
   DoHost<base::char16, base::char16>(spec, host, output, host_info);
 }
 
-}  // namespace url_canon
+}  // namespace url
diff --git a/url/url_canon_icu.cc b/url/url_canon_icu.cc
index cabbbf2..d53d7cc 100644
--- a/url/url_canon_icu.cc
+++ b/url/url_canon_icu.cc
@@ -15,7 +15,7 @@
 #include "url/url_canon_icu.h"
 #include "url/url_canon_internal.h"  // for _itoa_s
 
-namespace url_canon {
+namespace url {
 
 namespace {
 
@@ -227,4 +227,4 @@
   return false;
 }
 
-}  // namespace url_canon
+}  // namespace url
diff --git a/url/url_canon_icu.h b/url/url_canon_icu.h
index 1159768..c963289 100644
--- a/url/url_canon_icu.h
+++ b/url/url_canon_icu.h
@@ -13,7 +13,7 @@
 
 typedef struct UConverter UConverter;
 
-namespace url_canon {
+namespace url {
 
 // An implementation of CharsetConverter that implementations can use to
 // interface the canonicalizer with ICU's conversion routines.
@@ -35,6 +35,6 @@
   UConverter* converter_;
 };
 
-}  // namespace url_canon
+}  // namespace url
 
 #endif  // URL_URL_CANON_ICU_H_
diff --git a/url/url_canon_internal.cc b/url/url_canon_internal.cc
index 15f93f7..bbd1484 100644
--- a/url/url_canon_internal.cc
+++ b/url/url_canon_internal.cc
@@ -10,7 +10,7 @@
 
 #include "url/url_canon_internal.h"
 
-namespace url_canon {
+namespace url {
 
 namespace {
 
@@ -58,12 +58,12 @@
   }
 }
 
-// Overrides one component, see the url_canon::Replacements structure for
+// Overrides one component, see the Replacements structure for
 // what the various combionations of source pointer and component mean.
 void DoOverrideComponent(const char* override_source,
-                         const url_parse::Component& override_component,
+                         const Component& override_component,
                          const char** dest,
-                         url_parse::Component* dest_component) {
+                         Component* dest_component) {
   if (override_source) {
     *dest = override_source;
     *dest_component = override_component;
@@ -82,16 +82,15 @@
 // may get resized while we're overriding a subsequent component. Instead, the
 // caller should use the beginning of the |utf8_buffer| as the string pointer
 // for all components once all overrides have been prepared.
-bool PrepareUTF16OverrideComponent(
-    const base::char16* override_source,
-    const url_parse::Component& override_component,
-    CanonOutput* utf8_buffer,
-    url_parse::Component* dest_component) {
+bool PrepareUTF16OverrideComponent(const base::char16* override_source,
+                                   const Component& override_component,
+                                   CanonOutput* utf8_buffer,
+                                   Component* dest_component) {
   bool success = true;
   if (override_source) {
     if (!override_component.is_valid()) {
       // Non-"valid" component (means delete), so we need to preserve that.
-      *dest_component = url_parse::Component();
+      *dest_component = Component();
     } else {
       // Convert to UTF-8.
       dest_component->begin = utf8_buffer->length();
@@ -282,10 +281,10 @@
 void SetupOverrideComponents(const char* base,
                              const Replacements<char>& repl,
                              URLComponentSource<char>* source,
-                             url_parse::Parsed* parsed) {
+                             Parsed* parsed) {
   // Get the source and parsed structures of the things we are replacing.
   const URLComponentSource<char>& repl_source = repl.sources();
-  const url_parse::Parsed& repl_parsed = repl.components();
+  const Parsed& repl_parsed = repl.components();
 
   DoOverrideComponent(repl_source.scheme, repl_parsed.scheme,
                       &source->scheme, &parsed->scheme);
@@ -314,12 +313,12 @@
                                   const Replacements<base::char16>& repl,
                                   CanonOutput* utf8_buffer,
                                   URLComponentSource<char>* source,
-                                  url_parse::Parsed* parsed) {
+                                  Parsed* parsed) {
   bool success = true;
 
   // Get the source and parsed structures of the things we are replacing.
   const URLComponentSource<base::char16>& repl_source = repl.sources();
-  const url_parse::Parsed& repl_parsed = repl.components();
+  const Parsed& repl_parsed = repl.components();
 
   success &= PrepareUTF16OverrideComponent(
       repl_source.scheme, repl_parsed.scheme,
@@ -402,4 +401,4 @@
 
 #endif  // !WIN32
 
-}  // namespace url_canon
+}  // namespace url
diff --git a/url/url_canon_internal.h b/url/url_canon_internal.h
index b76f887..e8efd82 100644
--- a/url/url_canon_internal.h
+++ b/url/url_canon_internal.h
@@ -15,7 +15,7 @@
 #include "base/logging.h"
 #include "url/url_canon.h"
 
-namespace url_canon {
+namespace url {
 
 // Character type handling -----------------------------------------------------
 
@@ -354,7 +354,7 @@
 // Converts from UTF-16 to 8-bit using the character set converter. If the
 // converter is NULL, this will use UTF-8.
 void ConvertUTF16ToQueryEncoding(const base::char16* input,
-                                 const url_parse::Component& query,
+                                 const Component& query,
                                  CharsetConverter* converter,
                                  CanonOutput* output);
 
@@ -370,7 +370,7 @@
 void SetupOverrideComponents(const char* base,
                              const Replacements<char>& repl,
                              URLComponentSource<char>* source,
-                             url_parse::Parsed* parsed);
+                             Parsed* parsed);
 
 // Like the above 8-bit version, except that it additionally converts the
 // UTF-16 input to UTF-8 before doing the overrides.
@@ -392,16 +392,16 @@
                                   const Replacements<base::char16>& repl,
                                   CanonOutput* utf8_buffer,
                                   URLComponentSource<char>* source,
-                                  url_parse::Parsed* parsed);
+                                  Parsed* parsed);
 
 // Implemented in url_canon_path.cc, these are required by the relative URL
 // resolver as well, so we declare them here.
 bool CanonicalizePartialPath(const char* spec,
-                             const url_parse::Component& path,
+                             const Component& path,
                              int path_begin_in_output,
                              CanonOutput* output);
 bool CanonicalizePartialPath(const base::char16* spec,
-                             const url_parse::Component& path,
+                             const Component& path,
                              int path_begin_in_output,
                              CanonOutput* output);
 
@@ -432,6 +432,6 @@
 
 #endif  // WIN32
 
-}  // namespace url_canon
+}  // namespace url
 
 #endif  // URL_URL_CANON_INTERNAL_H_
diff --git a/url/url_canon_internal_file.h b/url/url_canon_internal_file.h
index eadc79c..6903098 100644
--- a/url/url_canon_internal_file.h
+++ b/url/url_canon_internal_file.h
@@ -18,7 +18,7 @@
 #include "url/url_file.h"
 #include "url/url_parse_internal.h"
 
-using namespace url_canon;
+namespace url {
 
 // Given a pointer into the spec, this copies and canonicalizes the drive
 // letter and colon to the output, if one is found. If there is not a drive
@@ -66,11 +66,11 @@
   // path. We supply it with the path following the slashes. It won't prepend
   // a slash because it assumes any nonempty path already starts with one.
   // We explicitly filter out calls with no path here to prevent that case.
-  ParsedURL::Component sub_path(after_slashes, end - after_slashes);
+  ParsedComponent sub_path(after_slashes, end - after_slashes);
   if (sub_path.len > 0) {
     // Give it a fake output component to write into. DoCanonicalizeFile will
     // compute the full path component.
-    ParsedURL::Component fake_output_path;
+    ParsedComponent fake_output_path;
     URLCanonInternal<CHAR, UCHAR>::DoPath(
         spec, sub_path, output, &fake_output_path);
   }
@@ -82,9 +82,9 @@
                                   CanonOutput* output,
                                   ParsedURL* new_parsed) {
   // Things we don't set in file: URLs.
-  new_parsed->username = ParsedURL::Component(0, -1);
-  new_parsed->password = ParsedURL::Component(0, -1);
-  new_parsed->port = ParsedURL::Component(0, -1);
+  new_parsed->username = ParsedComponent(0, -1);
+  new_parsed->password = ParsedComponent(0, -1);
+  new_parsed->port = ParsedComponent(0, -1);
 
   // Scheme (known, so we don't bother running it through the more
   // complicated scheme canonicalizer).
@@ -130,4 +130,6 @@
   return success;
 }
 
+}  // namespace url
+
 #endif  // URL_URL_CANON_INTERNAL_FILE_H_
diff --git a/url/url_canon_ip.cc b/url/url_canon_ip.cc
index f884c2e..6ed8ba7 100644
--- a/url/url_canon_ip.cc
+++ b/url/url_canon_ip.cc
@@ -10,7 +10,7 @@
 #include "base/logging.h"
 #include "url/url_canon_internal.h"
 
-namespace url_canon {
+namespace url {
 
 namespace {
 
@@ -31,8 +31,8 @@
 
 template<typename CHAR, typename UCHAR>
 bool DoFindIPv4Components(const CHAR* spec,
-                          const url_parse::Component& host,
-                          url_parse::Component components[4]) {
+                          const Component& host,
+                          Component components[4]) {
   if (!host.is_nonempty())
     return false;
 
@@ -43,8 +43,7 @@
     if (i >= end || spec[i] == '.') {
       // Found the end of the current component.
       int component_len = i - cur_component_begin;
-      components[cur_component] =
-          url_parse::Component(cur_component_begin, component_len);
+      components[cur_component] = Component(cur_component_begin, component_len);
 
       // The next component starts after the dot.
       cur_component_begin = i + 1;
@@ -76,7 +75,7 @@
 
   // Fill in any unused components.
   while (cur_component < 4)
-    components[cur_component++] = url_parse::Component();
+    components[cur_component++] = Component();
   return true;
 }
 
@@ -91,10 +90,9 @@
 // out any input that is greater than 7 bits. The components are assumed
 // to be non-empty.
 template<typename CHAR>
-CanonHostInfo::Family IPv4ComponentToNumber(
-    const CHAR* spec,
-    const url_parse::Component& component,
-    uint32* number) {
+CanonHostInfo::Family IPv4ComponentToNumber(const CHAR* spec,
+                                            const Component& component,
+                                            uint32* number) {
   // Figure out the base
   SharedCharTypes base;
   int base_prefix_len = 0;  // Size of the prefix for this base.
@@ -159,11 +157,11 @@
 // See declaration of IPv4AddressToNumber for documentation.
 template<typename CHAR>
 CanonHostInfo::Family DoIPv4AddressToNumber(const CHAR* spec,
-                                            const url_parse::Component& host,
+                                            const Component& host,
                                             unsigned char address[4],
                                             int* num_ipv4_components) {
   // The identified components. Not all may exist.
-  url_parse::Component components[4];
+  Component components[4];
   if (!FindIPv4Components(spec, host, components))
     return CanonHostInfo::NEUTRAL;
 
@@ -227,7 +225,7 @@
 // is NEUTRAL, and we could use a second opinion.
 template<typename CHAR, typename UCHAR>
 bool DoCanonicalizeIPv4Address(const CHAR* spec,
-                               const url_parse::Component& host,
+                               const Component& host,
                                CanonOutput* output,
                                CanonHostInfo* host_info) {
   host_info->family = IPv4AddressToNumber(
@@ -295,7 +293,7 @@
   }
 
   // There can be up to 8 hex components (colon separated) in the literal.
-  url_parse::Component hex_components[8];
+  Component hex_components[8];
 
   // The count of hex components present. Ranges from [0,8].
   int num_hex_components;
@@ -305,16 +303,14 @@
   int index_of_contraction;
 
   // The range of characters which are an IPv4 literal.
-  url_parse::Component ipv4_component;
+  Component ipv4_component;
 };
 
 // Parse the IPv6 input string. If parsing succeeded returns true and fills
 // |parsed| with the information. If parsing failed (because the input is
 // invalid) returns false.
 template<typename CHAR, typename UCHAR>
-bool DoParseIPv6(const CHAR* spec,
-                 const url_parse::Component& host,
-                 IPv6Parsed* parsed) {
+bool DoParseIPv6(const CHAR* spec, const Component& host, IPv6Parsed* parsed) {
   // Zero-out the info.
   parsed->reset();
 
@@ -359,7 +355,7 @@
           return false;
 
         parsed->hex_components[parsed->num_hex_components++] =
-            url_parse::Component(cur_component_begin, component_len);
+            Component(cur_component_begin, component_len);
       }
     }
 
@@ -390,8 +386,8 @@
           // Since IPv4 address can only appear at the end, assume the rest
           // of the string is an IPv4 address. (We will parse this separately
           // later).
-          parsed->ipv4_component = url_parse::Component(
-              cur_component_begin, end - cur_component_begin);
+          parsed->ipv4_component =
+              Component(cur_component_begin, end - cur_component_begin);
           break;
         } else {
           // The character was neither a hex digit, nor an IPv4 character.
@@ -440,8 +436,7 @@
 // already verified that each character in the string was a hex digit, and
 // that there were no more than 4 characters.
 template<typename CHAR>
-uint16 IPv6HexComponentToNumber(const CHAR* spec,
-                                const url_parse::Component& component) {
+uint16 IPv6HexComponentToNumber(const CHAR* spec, const Component& component) {
   DCHECK(component.len <= 4);
 
   // Copy the hex string into a C-string.
@@ -459,7 +454,7 @@
 // true on success. False means that the input was not a valid IPv6 address.
 template<typename CHAR, typename UCHAR>
 bool DoIPv6AddressToNumber(const CHAR* spec,
-                           const url_parse::Component& host,
+                           const Component& host,
                            unsigned char address[16]) {
   // Make sure the component is bounded by '[' and ']'.
   int end = host.end();
@@ -467,7 +462,7 @@
     return false;
 
   // Exclude the square brackets.
-  url_parse::Component ipv6_comp(host.begin + 1, host.len - 2);
+  Component ipv6_comp(host.begin + 1, host.len - 2);
 
   // Parse the IPv6 address -- identify where all the colon separated hex
   // components are, the "::" contraction, and the embedded IPv4 address.
@@ -522,12 +517,12 @@
 // range into |contraction_range|. The run of zeros must be at least 16 bits,
 // and if there is a tie the first is chosen.
 void ChooseIPv6ContractionRange(const unsigned char address[16],
-                                url_parse::Component* contraction_range) {
+                                Component* contraction_range) {
   // The longest run of zeros in |address| seen so far.
-  url_parse::Component max_range;
+  Component max_range;
 
   // The current run of zeros in |address| being iterated over.
-  url_parse::Component cur_range;
+  Component cur_range;
 
   for (int i = 0; i < 16; i += 2) {
     // Test for 16 bits worth of zero.
@@ -536,7 +531,7 @@
     if (is_zero) {
       // Add the zero to the current range (or start a new one).
       if (!cur_range.is_valid())
-        cur_range = url_parse::Component(i, 0);
+        cur_range = Component(i, 0);
       cur_range.len += 2;
     }
 
@@ -556,7 +551,7 @@
 // is NEUTRAL, and we could use a second opinion.
 template<typename CHAR, typename UCHAR>
 bool DoCanonicalizeIPv6Address(const CHAR* spec,
-                               const url_parse::Component& host,
+                               const Component& host,
                                CanonOutput* output,
                                CanonHostInfo* host_info) {
   // Turn the IP address into a 128 bit number.
@@ -608,7 +603,7 @@
   // http://tools.ietf.org/html/draft-kawamura-ipv6-text-representation-01#section-4
 
   // Start by finding where to place the "::" contraction (if any).
-  url_parse::Component contraction_range;
+  Component contraction_range;
   ChooseIPv6ContractionRange(address, &contraction_range);
 
   for (int i = 0; i <= 14;) {
@@ -640,20 +635,20 @@
 }
 
 bool FindIPv4Components(const char* spec,
-                        const url_parse::Component& host,
-                        url_parse::Component components[4]) {
+                        const Component& host,
+                        Component components[4]) {
   return DoFindIPv4Components<char, unsigned char>(spec, host, components);
 }
 
 bool FindIPv4Components(const base::char16* spec,
-                        const url_parse::Component& host,
-                        url_parse::Component components[4]) {
+                        const Component& host,
+                        Component components[4]) {
   return DoFindIPv4Components<base::char16, base::char16>(
       spec, host, components);
 }
 
 void CanonicalizeIPAddress(const char* spec,
-                           const url_parse::Component& host,
+                           const Component& host,
                            CanonOutput* output,
                            CanonHostInfo* host_info) {
   if (DoCanonicalizeIPv4Address<char, unsigned char>(
@@ -665,7 +660,7 @@
 }
 
 void CanonicalizeIPAddress(const base::char16* spec,
-                           const url_parse::Component& host,
+                           const Component& host,
                            CanonOutput* output,
                            CanonHostInfo* host_info) {
   if (DoCanonicalizeIPv4Address<base::char16, base::char16>(
@@ -677,14 +672,14 @@
 }
 
 CanonHostInfo::Family IPv4AddressToNumber(const char* spec,
-                                          const url_parse::Component& host,
+                                          const Component& host,
                                           unsigned char address[4],
                                           int* num_ipv4_components) {
   return DoIPv4AddressToNumber<char>(spec, host, address, num_ipv4_components);
 }
 
 CanonHostInfo::Family IPv4AddressToNumber(const base::char16* spec,
-                                          const url_parse::Component& host,
+                                          const Component& host,
                                           unsigned char address[4],
                                           int* num_ipv4_components) {
   return DoIPv4AddressToNumber<base::char16>(
@@ -692,15 +687,15 @@
 }
 
 bool IPv6AddressToNumber(const char* spec,
-                         const url_parse::Component& host,
+                         const Component& host,
                          unsigned char address[16]) {
   return DoIPv6AddressToNumber<char, unsigned char>(spec, host, address);
 }
 
 bool IPv6AddressToNumber(const base::char16* spec,
-                         const url_parse::Component& host,
+                         const Component& host,
                          unsigned char address[16]) {
   return DoIPv6AddressToNumber<base::char16, base::char16>(spec, host, address);
 }
 
-}  // namespace url_canon
+}  // namespace url
diff --git a/url/url_canon_ip.h b/url/url_canon_ip.h
index b2e4a7e..19ecfdb 100644
--- a/url/url_canon_ip.h
+++ b/url/url_canon_ip.h
@@ -10,7 +10,7 @@
 #include "url/url_export.h"
 #include "url/url_parse.h"
 
-namespace url_canon {
+namespace url {
 
 // Writes the given IPv4 address to |output|.
 URL_EXPORT void AppendIPv4Address(const unsigned char address[4],
@@ -39,11 +39,11 @@
 // notice these spaces and escape them, which will make IP address finding
 // fail. This seems like better behavior than stripping after a space.
 URL_EXPORT bool FindIPv4Components(const char* spec,
-                                   const url_parse::Component& host,
-                                   url_parse::Component components[4]);
+                                   const Component& host,
+                                   Component components[4]);
 URL_EXPORT bool FindIPv4Components(const base::char16* spec,
-                                   const url_parse::Component& host,
-                                   url_parse::Component components[4]);
+                                   const Component& host,
+                                   Component components[4]);
 
 // Converts an IPv4 address to a 32-bit number (network byte order).
 //
@@ -56,16 +56,14 @@
 //
 // On success, |num_ipv4_components| will be populated with the number of
 // components in the IPv4 address.
-URL_EXPORT CanonHostInfo::Family IPv4AddressToNumber(
-    const char* spec,
-    const url_parse::Component& host,
-    unsigned char address[4],
-    int* num_ipv4_components);
-URL_EXPORT CanonHostInfo::Family IPv4AddressToNumber(
-    const base::char16* spec,
-    const url_parse::Component& host,
-    unsigned char address[4],
-    int* num_ipv4_components);
+URL_EXPORT CanonHostInfo::Family IPv4AddressToNumber(const char* spec,
+                                                     const Component& host,
+                                                     unsigned char address[4],
+                                                     int* num_ipv4_components);
+URL_EXPORT CanonHostInfo::Family IPv4AddressToNumber(const base::char16* spec,
+                                                     const Component& host,
+                                                     unsigned char address[4],
+                                                     int* num_ipv4_components);
 
 // Converts an IPv6 address to a 128-bit number (network byte order), returning
 // true on success. False means that the input was not a valid IPv6 address.
@@ -73,12 +71,12 @@
 // NOTE that |host| is expected to be surrounded by square brackets.
 // i.e. "[::1]" rather than "::1".
 URL_EXPORT bool IPv6AddressToNumber(const char* spec,
-                                    const url_parse::Component& host,
+                                    const Component& host,
                                     unsigned char address[16]);
 URL_EXPORT bool IPv6AddressToNumber(const base::char16* spec,
-                                    const url_parse::Component& host,
+                                    const Component& host,
                                     unsigned char address[16]);
 
-}  // namespace url_canon
+}  // namespace url
 
 #endif  // URL_URL_CANON_IP_H_
diff --git a/url/url_canon_mailtourl.cc b/url/url_canon_mailtourl.cc
index 7d9d18a..7c48b95 100644
--- a/url/url_canon_mailtourl.cc
+++ b/url/url_canon_mailtourl.cc
@@ -9,23 +9,21 @@
 #include "url/url_file.h"
 #include "url/url_parse_internal.h"
 
-namespace url_canon {
+namespace url {
 
 namespace {
 
-
-template<typename CHAR, typename UCHAR>
+template <typename CHAR, typename UCHAR>
 bool DoCanonicalizeMailtoURL(const URLComponentSource<CHAR>& source,
-                             const url_parse::Parsed& parsed,
+                             const Parsed& parsed,
                              CanonOutput* output,
-                             url_parse::Parsed* new_parsed) {
-
+                             Parsed* new_parsed) {
   // mailto: only uses {scheme, path, query} -- clear the rest.
-  new_parsed->username = url_parse::Component();
-  new_parsed->password = url_parse::Component();
-  new_parsed->host = url_parse::Component();
-  new_parsed->port = url_parse::Component();
-  new_parsed->ref = url_parse::Component();
+  new_parsed->username = Component();
+  new_parsed->password = Component();
+  new_parsed->host = Component();
+  new_parsed->port = Component();
+  new_parsed->ref = Component();
 
   // Scheme (known, so we don't bother running it through the more
   // complicated scheme canonicalizer).
@@ -67,46 +65,46 @@
 } // namespace
 
 bool CanonicalizeMailtoURL(const char* spec,
-                          int spec_len,
-                          const url_parse::Parsed& parsed,
-                          CanonOutput* output,
-                          url_parse::Parsed* new_parsed) {
+                           int spec_len,
+                           const Parsed& parsed,
+                           CanonOutput* output,
+                           Parsed* new_parsed) {
   return DoCanonicalizeMailtoURL<char, unsigned char>(
       URLComponentSource<char>(spec), parsed, output, new_parsed);
 }
 
 bool CanonicalizeMailtoURL(const base::char16* spec,
                            int spec_len,
-                           const url_parse::Parsed& parsed,
+                           const Parsed& parsed,
                            CanonOutput* output,
-                           url_parse::Parsed* new_parsed) {
+                           Parsed* new_parsed) {
   return DoCanonicalizeMailtoURL<base::char16, base::char16>(
       URLComponentSource<base::char16>(spec), parsed, output, new_parsed);
 }
 
 bool ReplaceMailtoURL(const char* base,
-                      const url_parse::Parsed& base_parsed,
+                      const Parsed& base_parsed,
                       const Replacements<char>& replacements,
                       CanonOutput* output,
-                      url_parse::Parsed* new_parsed) {
+                      Parsed* new_parsed) {
   URLComponentSource<char> source(base);
-  url_parse::Parsed parsed(base_parsed);
+  Parsed parsed(base_parsed);
   SetupOverrideComponents(base, replacements, &source, &parsed);
   return DoCanonicalizeMailtoURL<char, unsigned char>(
       source, parsed, output, new_parsed);
 }
 
 bool ReplaceMailtoURL(const char* base,
-                      const url_parse::Parsed& base_parsed,
+                      const Parsed& base_parsed,
                       const Replacements<base::char16>& replacements,
                       CanonOutput* output,
-                      url_parse::Parsed* new_parsed) {
+                      Parsed* new_parsed) {
   RawCanonOutput<1024> utf8;
   URLComponentSource<char> source(base);
-  url_parse::Parsed parsed(base_parsed);
+  Parsed parsed(base_parsed);
   SetupUTF16OverrideComponents(base, replacements, &utf8, &source, &parsed);
   return DoCanonicalizeMailtoURL<char, unsigned char>(
       source, parsed, output, new_parsed);
 }
 
-}  // namespace url_canon
+}  // namespace url
diff --git a/url/url_canon_path.cc b/url/url_canon_path.cc
index f42af68..ceff689 100644
--- a/url/url_canon_path.cc
+++ b/url/url_canon_path.cc
@@ -7,7 +7,7 @@
 #include "url/url_canon_internal.h"
 #include "url/url_parse_internal.h"
 
-namespace url_canon {
+namespace url {
 
 namespace {
 
@@ -105,7 +105,7 @@
     *consumed_len = 0;
     return DIRECTORY_CUR;
   }
-  if (url_parse::IsURLSlash(spec[after_dot])) {
+  if (IsURLSlash(spec[after_dot])) {
     // Single dot followed by a slash.
     *consumed_len = 1;  // Consume the slash
     return DIRECTORY_CUR;
@@ -119,7 +119,7 @@
       *consumed_len = second_dot_len;
       return DIRECTORY_UP;
     }
-    if (url_parse::IsURLSlash(spec[after_second_dot])) {
+    if (IsURLSlash(spec[after_second_dot])) {
       // Double dot followed by a slash.
       *consumed_len = second_dot_len + 1;
       return DIRECTORY_UP;
@@ -177,7 +177,7 @@
 // it would be correct for most systems.
 template<typename CHAR, typename UCHAR>
 bool DoPartialPath(const CHAR* spec,
-                   const url_parse::Component& path,
+                   const Component& path,
                    int path_begin_in_output,
                    CanonOutput* output) {
   int end = path.end();
@@ -295,9 +295,9 @@
 
 template<typename CHAR, typename UCHAR>
 bool DoPath(const CHAR* spec,
-            const url_parse::Component& path,
+            const Component& path,
             CanonOutput* output,
-            url_parse::Component* out_path) {
+            Component* out_path) {
   bool success = true;
   out_path->begin = output->length();
   if (path.len > 0) {
@@ -305,7 +305,7 @@
     // and then canonicalize it, it will of course have a slash already. This
     // check is for the replacement and relative URL resolving cases of file
     // URLs.
-    if (!url_parse::IsURLSlash(spec[path.begin]))
+    if (!IsURLSlash(spec[path.begin]))
       output->push_back('/');
 
     success = DoPartialPath<CHAR, UCHAR>(spec, path, out_path->begin, output);
@@ -320,21 +320,21 @@
 }  // namespace
 
 bool CanonicalizePath(const char* spec,
-                      const url_parse::Component& path,
+                      const Component& path,
                       CanonOutput* output,
-                      url_parse::Component* out_path) {
+                      Component* out_path) {
   return DoPath<char, unsigned char>(spec, path, output, out_path);
 }
 
 bool CanonicalizePath(const base::char16* spec,
-                      const url_parse::Component& path,
+                      const Component& path,
                       CanonOutput* output,
-                      url_parse::Component* out_path) {
+                      Component* out_path) {
   return DoPath<base::char16, base::char16>(spec, path, output, out_path);
 }
 
 bool CanonicalizePartialPath(const char* spec,
-                             const url_parse::Component& path,
+                             const Component& path,
                              int path_begin_in_output,
                              CanonOutput* output) {
   return DoPartialPath<char, unsigned char>(spec, path, path_begin_in_output,
@@ -342,7 +342,7 @@
 }
 
 bool CanonicalizePartialPath(const base::char16* spec,
-                             const url_parse::Component& path,
+                             const Component& path,
                              int path_begin_in_output,
                              CanonOutput* output) {
   return DoPartialPath<base::char16, base::char16>(spec, path,
@@ -350,4 +350,4 @@
                                                    output);
 }
 
-}  // namespace url_canon
+}  // namespace url
diff --git a/url/url_canon_pathurl.cc b/url/url_canon_pathurl.cc
index 8f7dee4..e81a4af 100644
--- a/url/url_canon_pathurl.cc
+++ b/url/url_canon_pathurl.cc
@@ -9,7 +9,7 @@
 #include "url/url_canon.h"
 #include "url/url_canon_internal.h"
 
-namespace url_canon {
+namespace url {
 
 namespace {
 
@@ -18,10 +18,10 @@
 // prior to the canonicalized component; i.e. for the '?' or '#' characters.
 template<typename CHAR, typename UCHAR>
 bool DoCanonicalizePathComponent(const CHAR* source,
-                                 const url_parse::Component& component,
+                                 const Component& component,
                                  CHAR seperator,
                                  CanonOutput* output,
-                                 url_parse::Component* new_component) {
+                                 Component* new_component) {
   bool success = true;
   if (component.is_valid()) {
     if (seperator)
@@ -46,11 +46,11 @@
   return success;
 }
 
-template<typename CHAR, typename UCHAR>
+template <typename CHAR, typename UCHAR>
 bool DoCanonicalizePathURL(const URLComponentSource<CHAR>& source,
-                           const url_parse::Parsed& parsed,
+                           const Parsed& parsed,
                            CanonOutput* output,
-                           url_parse::Parsed* new_parsed) {
+                           Parsed* new_parsed) {
   // Scheme: this will append the colon.
   bool success = CanonicalizeScheme(source.scheme, parsed.scheme,
                                     output, &new_parsed->scheme);
@@ -77,45 +77,45 @@
 
 bool CanonicalizePathURL(const char* spec,
                          int spec_len,
-                         const url_parse::Parsed& parsed,
+                         const Parsed& parsed,
                          CanonOutput* output,
-                         url_parse::Parsed* new_parsed) {
+                         Parsed* new_parsed) {
   return DoCanonicalizePathURL<char, unsigned char>(
       URLComponentSource<char>(spec), parsed, output, new_parsed);
 }
 
 bool CanonicalizePathURL(const base::char16* spec,
                          int spec_len,
-                         const url_parse::Parsed& parsed,
+                         const Parsed& parsed,
                          CanonOutput* output,
-                         url_parse::Parsed* new_parsed) {
+                         Parsed* new_parsed) {
   return DoCanonicalizePathURL<base::char16, base::char16>(
       URLComponentSource<base::char16>(spec), parsed, output, new_parsed);
 }
 
 bool ReplacePathURL(const char* base,
-                    const url_parse::Parsed& base_parsed,
+                    const Parsed& base_parsed,
                     const Replacements<char>& replacements,
                     CanonOutput* output,
-                    url_parse::Parsed* new_parsed) {
+                    Parsed* new_parsed) {
   URLComponentSource<char> source(base);
-  url_parse::Parsed parsed(base_parsed);
+  Parsed parsed(base_parsed);
   SetupOverrideComponents(base, replacements, &source, &parsed);
   return DoCanonicalizePathURL<char, unsigned char>(
       source, parsed, output, new_parsed);
 }
 
 bool ReplacePathURL(const char* base,
-                    const url_parse::Parsed& base_parsed,
+                    const Parsed& base_parsed,
                     const Replacements<base::char16>& replacements,
                     CanonOutput* output,
-                    url_parse::Parsed* new_parsed) {
+                    Parsed* new_parsed) {
   RawCanonOutput<1024> utf8;
   URLComponentSource<char> source(base);
-  url_parse::Parsed parsed(base_parsed);
+  Parsed parsed(base_parsed);
   SetupUTF16OverrideComponents(base, replacements, &utf8, &source, &parsed);
   return DoCanonicalizePathURL<char, unsigned char>(
       source, parsed, output, new_parsed);
 }
 
-}  // namespace url_canon
+}  // namespace url
diff --git a/url/url_canon_query.cc b/url/url_canon_query.cc
index b17a73b..5494ddf 100644
--- a/url/url_canon_query.cc
+++ b/url/url_canon_query.cc
@@ -35,14 +35,14 @@
 // replace all invalid sequences (including invalid UTF-16 sequences, which IE
 // doesn't) with the "invalid character," and we will escape it.
 
-namespace url_canon {
+namespace url {
 
 namespace {
 
 // Returns true if the characters starting at |begin| and going until |end|
 // (non-inclusive) are all representable in 7-bits.
 template<typename CHAR, typename UCHAR>
-bool IsAllASCII(const CHAR* spec, const url_parse::Component& query) {
+bool IsAllASCII(const CHAR* spec, const Component& query) {
   int end = query.end();
   for (int i = query.begin; i < end; i++) {
     if (static_cast<UCHAR>(spec[i]) >= 0x80)
@@ -69,7 +69,7 @@
 // Runs the converter on the given UTF-8 input. Since the converter expects
 // UTF-16, we have to convert first. The converter must be non-NULL.
 void RunConverter(const char* spec,
-                  const url_parse::Component& query,
+                  const Component& query,
                   CharsetConverter* converter,
                   CanonOutput* output) {
   // This function will replace any misencoded values with the invalid
@@ -83,7 +83,7 @@
 // anything, but this overriddden function allows us to use the same code
 // for both UTF-8 and UTF-16 input.
 void RunConverter(const base::char16* spec,
-                  const url_parse::Component& query,
+                  const Component& query,
                   CharsetConverter* converter,
                   CanonOutput* output) {
   converter->ConvertFromUTF16(&spec[query.begin], query.len, output);
@@ -91,7 +91,7 @@
 
 template<typename CHAR, typename UCHAR>
 void DoConvertToQueryEncoding(const CHAR* spec,
-                              const url_parse::Component& query,
+                              const Component& query,
                               CharsetConverter* converter,
                               CanonOutput* output) {
   if (IsAllASCII<CHAR, UCHAR>(spec, query)) {
@@ -116,12 +116,12 @@
 
 template<typename CHAR, typename UCHAR>
 void DoCanonicalizeQuery(const CHAR* spec,
-                         const url_parse::Component& query,
+                         const Component& query,
                          CharsetConverter* converter,
                          CanonOutput* output,
-                         url_parse::Component* out_query) {
+                         Component* out_query) {
   if (query.len < 0) {
-    *out_query = url_parse::Component();
+    *out_query = Component();
     return;
   }
 
@@ -136,29 +136,29 @@
 }  // namespace
 
 void CanonicalizeQuery(const char* spec,
-                       const url_parse::Component& query,
+                       const Component& query,
                        CharsetConverter* converter,
                        CanonOutput* output,
-                       url_parse::Component* out_query) {
+                       Component* out_query) {
   DoCanonicalizeQuery<char, unsigned char>(spec, query, converter,
                                            output, out_query);
 }
 
 void CanonicalizeQuery(const base::char16* spec,
-                       const url_parse::Component& query,
+                       const Component& query,
                        CharsetConverter* converter,
                        CanonOutput* output,
-                       url_parse::Component* out_query) {
+                       Component* out_query) {
   DoCanonicalizeQuery<base::char16, base::char16>(spec, query, converter,
                                                   output, out_query);
 }
 
 void ConvertUTF16ToQueryEncoding(const base::char16* input,
-                                 const url_parse::Component& query,
+                                 const Component& query,
                                  CharsetConverter* converter,
                                  CanonOutput* output) {
   DoConvertToQueryEncoding<base::char16, base::char16>(input, query,
                                                        converter, output);
 }
 
-}  // namespace url_canon
+}  // namespace url
diff --git a/url/url_canon_relative.cc b/url/url_canon_relative.cc
index c210587..275a6fd 100644
--- a/url/url_canon_relative.cc
+++ b/url/url_canon_relative.cc
@@ -11,7 +11,7 @@
 #include "url/url_parse_internal.h"
 #include "url/url_util_internal.h"
 
-namespace url_canon {
+namespace url {
 
 namespace {
 
@@ -26,9 +26,9 @@
 // The base URL should always be canonical, therefore is ASCII.
 template<typename CHAR>
 bool AreSchemesEqual(const char* base,
-                     const url_parse::Component& base_scheme,
+                     const Component& base_scheme,
                      const CHAR* cmp,
-                     const url_parse::Component& cmp_scheme) {
+                     const Component& cmp_scheme) {
   if (base_scheme.len != cmp_scheme.len)
     return false;
   for (int i = 0; i < base_scheme.len; i++) {
@@ -52,8 +52,8 @@
                                     int spec_len) {
   if (start_offset >= spec_len)
     return false;
-  return url_parse::IsURLSlash(spec[start_offset]) &&
-      url_parse::DoesBeginWindowsDriveSpec(spec, start_offset + 1, spec_len);
+  return IsURLSlash(spec[start_offset]) &&
+         DoesBeginWindowsDriveSpec(spec, start_offset + 1, spec_len);
 }
 
 #endif  // WIN32
@@ -61,20 +61,20 @@
 // See IsRelativeURL in the header file for usage.
 template<typename CHAR>
 bool DoIsRelativeURL(const char* base,
-                     const url_parse::Parsed& base_parsed,
+                     const Parsed& base_parsed,
                      const CHAR* url,
                      int url_len,
                      bool is_base_hierarchical,
                      bool* is_relative,
-                     url_parse::Component* relative_component) {
+                     Component* relative_component) {
   *is_relative = false;  // So we can default later to not relative.
 
   // Trim whitespace and construct a new range for the substring.
   int begin = 0;
-  url_parse::TrimURL(url, &begin, &url_len);
+  TrimURL(url, &begin, &url_len);
   if (begin >= url_len) {
     // Empty URLs are relative, but do nothing.
-    *relative_component = url_parse::Component(begin, 0);
+    *relative_component = Component(begin, 0);
     *is_relative = true;
     return true;
   }
@@ -91,8 +91,8 @@
   //
   // We require strict backslashes when detecting UNC since two forward
   // shashes should be treated a a relative URL with a hostname.
-  if (url_parse::DoesBeginWindowsDriveSpec(url, begin, url_len) ||
-      url_parse::DoesBeginUNCPath(url, begin, url_len, true))
+  if (DoesBeginWindowsDriveSpec(url, begin, url_len) ||
+      DoesBeginUNCPath(url, begin, url_len, true))
     return true;
 #endif  // WIN32
 
@@ -100,9 +100,9 @@
   // BUT: Just because we have a scheme, doesn't make it absolute.
   // "http:foo.html" is a relative URL with path "foo.html". If the scheme is
   // empty, we treat it as relative (":foo") like IE does.
-  url_parse::Component scheme;
+  Component scheme;
   const bool scheme_is_empty =
-      !url_parse::ExtractScheme(url, url_len, &scheme) || scheme.len == 0;
+      !ExtractScheme(url, url_len, &scheme) || scheme.len == 0;
   if (scheme_is_empty) {
     if (url[begin] == '#') {
       // |url| is a bare fragement (e.g. "#foo"). This can be resolved against
@@ -112,7 +112,7 @@
       return false;
     }
 
-    *relative_component = url_parse::MakeRange(begin, url_len);
+    *relative_component = MakeRange(begin, url_len);
     *is_relative = true;
     return true;
   }
@@ -125,7 +125,7 @@
         // Don't allow relative URLs if the base scheme doesn't support it.
         return false;
       }
-      *relative_component = url_parse::MakeRange(begin, url_len);
+      *relative_component = MakeRange(begin, url_len);
       *is_relative = true;
       return true;
     }
@@ -145,20 +145,19 @@
 
   // If it's a filesystem URL, the only valid way to make it relative is not to
   // supply a scheme.  There's no equivalent to e.g. http:index.html.
-  if (url_util::CompareSchemeComponent(url, scheme, "filesystem"))
+  if (CompareSchemeComponent(url, scheme, "filesystem"))
     return true;
 
   // ExtractScheme guarantees that the colon immediately follows what it
   // considers to be the scheme. CountConsecutiveSlashes will handle the
   // case where the begin offset is the end of the input.
-  int num_slashes = url_parse::CountConsecutiveSlashes(url, colon_offset + 1,
-                                                       url_len);
+  int num_slashes = CountConsecutiveSlashes(url, colon_offset + 1, url_len);
 
   if (num_slashes == 0 || num_slashes == 1) {
     // No slashes means it's a relative path like "http:foo.html". One slash
     // is an absolute path. "http:/home/foo.html"
     *is_relative = true;
-    *relative_component = url_parse::MakeRange(colon_offset + 1, url_len);
+    *relative_component = MakeRange(colon_offset + 1, url_len);
     return true;
   }
 
@@ -197,12 +196,12 @@
 // source should already be canonical, we don't have to do anything special,
 // and the input is ASCII.
 void CopyOneComponent(const char* source,
-                      const url_parse::Component& source_component,
+                      const Component& source_component,
                       CanonOutput* output,
-                      url_parse::Component* output_component) {
+                      Component* output_component) {
   if (source_component.len < 0) {
     // This component is not present.
-    *output_component = url_parse::Component();
+    *output_component = Component();
     return;
   }
 
@@ -237,8 +236,7 @@
 
   // If the relative begins with a drive spec, don't do anything. The existing
   // drive spec in the base will be replaced.
-  if (url_parse::DoesBeginWindowsDriveSpec(relative_url,
-                                           path_start, relative_url_len)) {
+  if (DoesBeginWindowsDriveSpec(relative_url, path_start, relative_url_len)) {
     return base_path_begin;  // Relative URL path is "C:/foo"
   }
 
@@ -264,23 +262,19 @@
 // the input is a relative path or less (qyuery or ref).
 template<typename CHAR>
 bool DoResolveRelativePath(const char* base_url,
-                           const url_parse::Parsed& base_parsed,
+                           const Parsed& base_parsed,
                            bool base_is_file,
                            const CHAR* relative_url,
-                           const url_parse::Component& relative_component,
+                           const Component& relative_component,
                            CharsetConverter* query_converter,
                            CanonOutput* output,
-                           url_parse::Parsed* out_parsed) {
+                           Parsed* out_parsed) {
   bool success = true;
 
   // We know the authority section didn't change, copy it to the output. We
   // also know we have a path so can copy up to there.
-  url_parse::Component path, query, ref;
-  url_parse::ParsePathInternal(relative_url,
-                               relative_component,
-                               &path,
-                               &query,
-                               &ref);
+  Component path, query, ref;
+  ParsePathInternal(relative_url, relative_component, &path, &query, &ref);
   // Canonical URLs always have a path, so we can use that offset.
   output->Append(base_url, base_parsed.path.begin);
 
@@ -305,7 +299,7 @@
     }
 #endif  // WIN32
 
-    if (url_parse::IsURLSlash(relative_url[path.begin])) {
+    if (IsURLSlash(relative_url[path.begin])) {
       // Easy case: the path is an absolute path on the server, so we can
       // just replace everything from the path on with the new versions.
       // Since the input should be canonical hierarchical URL, we should
@@ -321,7 +315,7 @@
                       output);
       success &= CanonicalizePartialPath(relative_url, path, path_begin,
                                          output);
-      out_parsed->path = url_parse::MakeRange(path_begin, output->length());
+      out_parsed->path = MakeRange(path_begin, output->length());
 
       // Copy the rest of the stuff after the path from the relative path.
     }
@@ -332,8 +326,7 @@
     CanonicalizeRef(relative_url, ref, output, &out_parsed->ref);
 
     // Fix the path beginning to add back the "C:" we may have written above.
-    out_parsed->path = url_parse::MakeRange(true_path_begin,
-                                            out_parsed->path.end());
+    out_parsed->path = MakeRange(true_path_begin, out_parsed->path.end());
     return success;
   }
 
@@ -373,17 +366,17 @@
 // should be kept from the original URL is the scheme.
 template<typename CHAR>
 bool DoResolveRelativeHost(const char* base_url,
-                           const url_parse::Parsed& base_parsed,
+                           const Parsed& base_parsed,
                            const CHAR* relative_url,
-                           const url_parse::Component& relative_component,
+                           const Component& relative_component,
                            CharsetConverter* query_converter,
                            CanonOutput* output,
-                           url_parse::Parsed* out_parsed) {
+                           Parsed* out_parsed) {
   // Parse the relative URL, just like we would for anything following a
   // scheme.
-  url_parse::Parsed relative_parsed;  // Everything but the scheme is valid.
-  url_parse::ParseAfterScheme(relative_url, relative_component.end(),
-                              relative_component.begin, &relative_parsed);
+  Parsed relative_parsed;  // Everything but the scheme is valid.
+  ParseAfterScheme(relative_url, relative_component.end(),
+                   relative_component.begin, &relative_parsed);
 
   // Now we can just use the replacement function to replace all the necessary
   // parts of the old URL with the new one.
@@ -404,16 +397,16 @@
 // include: "//hostname/path", "/c:/foo", and "//hostname/c:/foo".
 template<typename CHAR>
 bool DoResolveAbsoluteFile(const CHAR* relative_url,
-                           const url_parse::Component& relative_component,
+                           const Component& relative_component,
                            CharsetConverter* query_converter,
                            CanonOutput* output,
-                           url_parse::Parsed* out_parsed) {
+                           Parsed* out_parsed) {
   // Parse the file URL. The file URl parsing function uses the same logic
   // as we do for determining if the file is absolute, in which case it will
   // not bother to look for a scheme.
-  url_parse::Parsed relative_parsed;
-  url_parse::ParseFileURL(&relative_url[relative_component.begin],
-                          relative_component.len, &relative_parsed);
+  Parsed relative_parsed;
+  ParseFileURL(&relative_url[relative_component.begin], relative_component.len,
+               &relative_parsed);
 
   return CanonicalizeFileURL(&relative_url[relative_component.begin],
                              relative_component.len, relative_parsed,
@@ -423,13 +416,13 @@
 // TODO(brettw) treat two slashes as root like Mozilla for FTP?
 template<typename CHAR>
 bool DoResolveRelativeURL(const char* base_url,
-                          const url_parse::Parsed& base_parsed,
+                          const Parsed& base_parsed,
                           bool base_is_file,
                           const CHAR* relative_url,
-                          const url_parse::Component& relative_component,
+                          const Component& relative_component,
                           CharsetConverter* query_converter,
                           CanonOutput* output,
-                          url_parse::Parsed* out_parsed) {
+                          Parsed* out_parsed) {
   // Starting point for our output parsed. We'll fix what we change.
   *out_parsed = base_parsed;
 
@@ -456,7 +449,7 @@
     return true;
   }
 
-  int num_slashes = url_parse::CountConsecutiveSlashes(
+  int num_slashes = CountConsecutiveSlashes(
       relative_url, relative_component.begin, relative_component.end());
 
 #ifdef WIN32
@@ -472,13 +465,13 @@
   // be setting the path.
   //
   // This assumes the absolute path resolver handles absolute URLs like this
-  // properly. url_util::DoCanonicalize does this.
+  // properly. DoCanonicalize does this.
   int after_slashes = relative_component.begin + num_slashes;
-  if (url_parse::DoesBeginUNCPath(relative_url, relative_component.begin,
-                                  relative_component.end(), !base_is_file) ||
+  if (DoesBeginUNCPath(relative_url, relative_component.begin,
+                       relative_component.end(), !base_is_file) ||
       ((num_slashes == 0 || base_is_file) &&
-       url_parse::DoesBeginWindowsDriveSpec(relative_url, after_slashes,
-                                            relative_component.end()))) {
+       DoesBeginWindowsDriveSpec(
+           relative_url, after_slashes, relative_component.end()))) {
     return DoResolveAbsoluteFile(relative_url, relative_component,
                                  query_converter, output, out_parsed);
   }
@@ -514,53 +507,53 @@
 }  // namespace
 
 bool IsRelativeURL(const char* base,
-                   const url_parse::Parsed& base_parsed,
+                   const Parsed& base_parsed,
                    const char* fragment,
                    int fragment_len,
                    bool is_base_hierarchical,
                    bool* is_relative,
-                   url_parse::Component* relative_component) {
+                   Component* relative_component) {
   return DoIsRelativeURL<char>(
       base, base_parsed, fragment, fragment_len, is_base_hierarchical,
       is_relative, relative_component);
 }
 
 bool IsRelativeURL(const char* base,
-                   const url_parse::Parsed& base_parsed,
+                   const Parsed& base_parsed,
                    const base::char16* fragment,
                    int fragment_len,
                    bool is_base_hierarchical,
                    bool* is_relative,
-                   url_parse::Component* relative_component) {
+                   Component* relative_component) {
   return DoIsRelativeURL<base::char16>(
       base, base_parsed, fragment, fragment_len, is_base_hierarchical,
       is_relative, relative_component);
 }
 
 bool ResolveRelativeURL(const char* base_url,
-                        const url_parse::Parsed& base_parsed,
+                        const Parsed& base_parsed,
                         bool base_is_file,
                         const char* relative_url,
-                        const url_parse::Component& relative_component,
+                        const Component& relative_component,
                         CharsetConverter* query_converter,
                         CanonOutput* output,
-                        url_parse::Parsed* out_parsed) {
+                        Parsed* out_parsed) {
   return DoResolveRelativeURL<char>(
       base_url, base_parsed, base_is_file, relative_url,
       relative_component, query_converter, output, out_parsed);
 }
 
 bool ResolveRelativeURL(const char* base_url,
-                        const url_parse::Parsed& base_parsed,
+                        const Parsed& base_parsed,
                         bool base_is_file,
                         const base::char16* relative_url,
-                        const url_parse::Component& relative_component,
+                        const Component& relative_component,
                         CharsetConverter* query_converter,
                         CanonOutput* output,
-                        url_parse::Parsed* out_parsed) {
+                        Parsed* out_parsed) {
   return DoResolveRelativeURL<base::char16>(
       base_url, base_parsed, base_is_file, relative_url,
       relative_component, query_converter, output, out_parsed);
 }
 
-}  // namespace url_canon
+}  // namespace url
diff --git a/url/url_canon_stdstring.cc b/url/url_canon_stdstring.cc
index ad81a2f..366a2e0 100644
--- a/url/url_canon_stdstring.cc
+++ b/url/url_canon_stdstring.cc
@@ -4,7 +4,7 @@
 
 #include "url/url_canon_stdstring.h"
 
-namespace url_canon {
+namespace url {
 
 StdStringCanonOutput::StdStringCanonOutput(std::string* str)
     : CanonOutput(), str_(str) {
@@ -29,4 +29,4 @@
   buffer_len_ = sz;
 }
 
-}  // namespace url_canon
+}  // namespace url
diff --git a/url/url_canon_stdstring.h b/url/url_canon_stdstring.h
index 0915672..e859fe2 100644
--- a/url/url_canon_stdstring.h
+++ b/url/url_canon_stdstring.h
@@ -15,7 +15,7 @@
 #include "url/url_canon.h"
 #include "url/url_export.h"
 
-namespace url_canon {
+namespace url {
 
 // Write into a std::string given in the constructor. This object does not own
 // the string itself, and the user must ensure that the string stays alive
@@ -53,43 +53,34 @@
 // The strings passed as arguments are not copied and must remain valid until
 // this class goes out of scope.
 template<typename STR>
-class StdStringReplacements :
-    public url_canon::Replacements<typename STR::value_type> {
+class StdStringReplacements : public Replacements<typename STR::value_type> {
  public:
   void SetSchemeStr(const STR& s) {
-    this->SetScheme(s.data(),
-                    url_parse::Component(0, static_cast<int>(s.length())));
+    this->SetScheme(s.data(), Component(0, static_cast<int>(s.length())));
   }
   void SetUsernameStr(const STR& s) {
-    this->SetUsername(s.data(),
-                      url_parse::Component(0, static_cast<int>(s.length())));
+    this->SetUsername(s.data(), Component(0, static_cast<int>(s.length())));
   }
   void SetPasswordStr(const STR& s) {
-    this->SetPassword(s.data(),
-                      url_parse::Component(0, static_cast<int>(s.length())));
+    this->SetPassword(s.data(), Component(0, static_cast<int>(s.length())));
   }
   void SetHostStr(const STR& s) {
-    this->SetHost(s.data(),
-                  url_parse::Component(0, static_cast<int>(s.length())));
+    this->SetHost(s.data(), Component(0, static_cast<int>(s.length())));
   }
   void SetPortStr(const STR& s) {
-    this->SetPort(s.data(),
-                  url_parse::Component(0, static_cast<int>(s.length())));
+    this->SetPort(s.data(), Component(0, static_cast<int>(s.length())));
   }
   void SetPathStr(const STR& s) {
-    this->SetPath(s.data(),
-                  url_parse::Component(0, static_cast<int>(s.length())));
+    this->SetPath(s.data(), Component(0, static_cast<int>(s.length())));
   }
   void SetQueryStr(const STR& s) {
-    this->SetQuery(s.data(),
-                   url_parse::Component(0, static_cast<int>(s.length())));
+    this->SetQuery(s.data(), Component(0, static_cast<int>(s.length())));
   }
   void SetRefStr(const STR& s) {
-    this->SetRef(s.data(),
-                 url_parse::Component(0, static_cast<int>(s.length())));
+    this->SetRef(s.data(), Component(0, static_cast<int>(s.length())));
   }
 };
 
-}  // namespace url_canon
+}  // namespace url
 
 #endif  // URL_URL_CANON_STDSTRING_H_
diff --git a/url/url_canon_stdurl.cc b/url/url_canon_stdurl.cc
index 548dc99..1f5000e 100644
--- a/url/url_canon_stdurl.cc
+++ b/url/url_canon_stdurl.cc
@@ -8,16 +8,16 @@
 #include "url/url_canon.h"
 #include "url/url_canon_internal.h"
 
-namespace url_canon {
+namespace url {
 
 namespace {
 
 template<typename CHAR, typename UCHAR>
 bool DoCanonicalizeStandardURL(const URLComponentSource<CHAR>& source,
-                               const url_parse::Parsed& parsed,
+                               const Parsed& parsed,
                                CharsetConverter* query_converter,
                                CanonOutput* output,
-                               url_parse::Parsed* new_parsed) {
+                               Parsed* new_parsed) {
   // Scheme: this will append the colon.
   bool success = CanonicalizeScheme(source.scheme, parsed.scheme,
                                     output, &new_parsed->scheme);
@@ -72,7 +72,7 @@
     // When we have an empty path, make up a path when we have an authority
     // or something following the path. The only time we allow an empty
     // output path is when there is nothing else.
-    new_parsed->path = url_parse::Component(output->length(), 1);
+    new_parsed->path = Component(output->length(), 1);
     output->push_back('/');
   } else {
     // No path at all
@@ -95,7 +95,7 @@
 // Returns the default port for the given canonical scheme, or PORT_UNSPECIFIED
 // if the scheme is unknown.
 int DefaultPortForScheme(const char* scheme, int scheme_len) {
-  int default_port = url_parse::PORT_UNSPECIFIED;
+  int default_port = PORT_UNSPECIFIED;
   switch (scheme_len) {
     case 4:
       if (!strncmp(scheme, "http", scheme_len))
@@ -125,10 +125,10 @@
 
 bool CanonicalizeStandardURL(const char* spec,
                              int spec_len,
-                             const url_parse::Parsed& parsed,
+                             const Parsed& parsed,
                              CharsetConverter* query_converter,
                              CanonOutput* output,
-                             url_parse::Parsed* new_parsed) {
+                             Parsed* new_parsed) {
   return DoCanonicalizeStandardURL<char, unsigned char>(
       URLComponentSource<char>(spec), parsed, query_converter,
       output, new_parsed);
@@ -136,10 +136,10 @@
 
 bool CanonicalizeStandardURL(const base::char16* spec,
                              int spec_len,
-                             const url_parse::Parsed& parsed,
+                             const Parsed& parsed,
                              CharsetConverter* query_converter,
                              CanonOutput* output,
-                             url_parse::Parsed* new_parsed) {
+                             Parsed* new_parsed) {
   return DoCanonicalizeStandardURL<base::char16, base::char16>(
       URLComponentSource<base::char16>(spec), parsed, query_converter,
       output, new_parsed);
@@ -155,13 +155,13 @@
 // You would also need to update DoReplaceComponents in url_util.cc which
 // relies on this re-checking everything (see the comment there for why).
 bool ReplaceStandardURL(const char* base,
-                        const url_parse::Parsed& base_parsed,
+                        const Parsed& base_parsed,
                         const Replacements<char>& replacements,
                         CharsetConverter* query_converter,
                         CanonOutput* output,
-                        url_parse::Parsed* new_parsed) {
+                        Parsed* new_parsed) {
   URLComponentSource<char> source(base);
-  url_parse::Parsed parsed(base_parsed);
+  Parsed parsed(base_parsed);
   SetupOverrideComponents(base, replacements, &source, &parsed);
   return DoCanonicalizeStandardURL<char, unsigned char>(
       source, parsed, query_converter, output, new_parsed);
@@ -170,17 +170,17 @@
 // For 16-bit replacements, we turn all the replacements into UTF-8 so the
 // regular codepath can be used.
 bool ReplaceStandardURL(const char* base,
-                        const url_parse::Parsed& base_parsed,
+                        const Parsed& base_parsed,
                         const Replacements<base::char16>& replacements,
                         CharsetConverter* query_converter,
                         CanonOutput* output,
-                        url_parse::Parsed* new_parsed) {
+                        Parsed* new_parsed) {
   RawCanonOutput<1024> utf8;
   URLComponentSource<char> source(base);
-  url_parse::Parsed parsed(base_parsed);
+  Parsed parsed(base_parsed);
   SetupUTF16OverrideComponents(base, replacements, &utf8, &source, &parsed);
   return DoCanonicalizeStandardURL<char, unsigned char>(
       source, parsed, query_converter, output, new_parsed);
 }
 
-}  // namespace url_canon
+}  // namespace url
diff --git a/url/url_canon_unittest.cc b/url/url_canon_unittest.cc
index 9997afa..55f9608 100644
--- a/url/url_canon_unittest.cc
+++ b/url/url_canon_unittest.cc
@@ -20,17 +20,18 @@
 #define ARRAYSIZE ARRAYSIZE_UNSAFE
 #endif
 
-using url_test_utils::WStringToUTF16;
-using url_test_utils::ConvertUTF8ToUTF16;
-using url_test_utils::ConvertUTF16ToUTF8;
-using url_canon::CanonHostInfo;
+namespace url {
+
+using test_utils::WStringToUTF16;
+using test_utils::ConvertUTF8ToUTF16;
+using test_utils::ConvertUTF16ToUTF8;
 
 namespace {
 
 struct ComponentCase {
   const char* input;
   const char* expected;
-  url_parse::Component expected_component;
+  Component expected_component;
   bool expected_success;
 };
 
@@ -41,7 +42,7 @@
   const char* input8;
   const wchar_t* input16;
   const char* expected;
-  url_parse::Component expected_component;
+  Component expected_component;
   bool expected_success;
 };
 
@@ -51,7 +52,7 @@
   const char* input8;
   const wchar_t* input16;
   const char* expected;
-  url_parse::Component expected_component;
+  Component expected_component;
 
   // CanonHostInfo fields, for verbose output.
   CanonHostInfo::Family expected_family;
@@ -64,8 +65,8 @@
       << "Bad IP address length: " << length;
   std::string result;
   for (int i = 0; i < length; ++i) {
-    result.push_back(url_canon::kHexCharLookup[(bytes[i] >> 4) & 0xf]);
-    result.push_back(url_canon::kHexCharLookup[bytes[i] & 0xf]);
+    result.push_back(kHexCharLookup[(bytes[i] >> 4) & 0xf]);
+    result.push_back(kHexCharLookup[bytes[i] & 0xf]);
   }
   return result;
 }
@@ -117,15 +118,14 @@
 // tests for wide replacements.
 template<typename CHAR>
 void SetupReplComp(
-    void (url_canon::Replacements<CHAR>::*set)(const CHAR*,
-                                               const url_parse::Component&),
-    void (url_canon::Replacements<CHAR>::*clear)(),
-    url_canon::Replacements<CHAR>* rep,
+    void (Replacements<CHAR>::*set)(const CHAR*, const Component&),
+    void (Replacements<CHAR>::*clear)(),
+    Replacements<CHAR>* rep,
     const CHAR* str) {
   if (str && str[0] == kDeleteComp[0]) {
     (rep->*clear)();
   } else if (str) {
-    (rep->*set)(str, url_parse::Component(0, static_cast<int>(strlen(str))));
+    (rep->*set)(str, Component(0, static_cast<int>(strlen(str))));
   }
 }
 
@@ -146,8 +146,8 @@
   std::string out_str;
   for (size_t i = 0; i < ARRAYSIZE(utf_cases); i++) {
     out_str.clear();
-    url_canon::StdStringCanonOutput output(&out_str);
-    url_canon::AppendUTF8Value(utf_cases[i].input, &output);
+    StdStringCanonOutput output(&out_str);
+    AppendUTF8Value(utf_cases[i].input, &output);
     output.Complete();
     EXPECT_EQ(utf_cases[i].output, out_str);
   }
@@ -159,10 +159,10 @@
 #if defined(GTEST_HAS_DEATH_TEST) && defined(NDEBUG)
 TEST(URLCanonTest, DoAppendUTF8Invalid) {
   std::string out_str;
-  url_canon::StdStringCanonOutput output(&out_str);
+  StdStringCanonOutput output(&out_str);
   // Invalid code point (too large).
   ASSERT_DEBUG_DEATH({
-    url_canon::AppendUTF8Value(0x110000, &output);
+    AppendUTF8Value(0x110000, &output);
     output.Complete();
     EXPECT_EQ("", out_str);
   }, "");
@@ -201,7 +201,7 @@
   for (size_t i = 0; i < ARRAYSIZE(utf_cases); i++) {
     if (utf_cases[i].input8) {
       out_str.clear();
-      url_canon::StdStringCanonOutput output(&out_str);
+      StdStringCanonOutput output(&out_str);
 
       int input_len = static_cast<int>(strlen(utf_cases[i].input8));
       bool success = true;
@@ -215,7 +215,7 @@
     }
     if (utf_cases[i].input16) {
       out_str.clear();
-      url_canon::StdStringCanonOutput output(&out_str);
+      StdStringCanonOutput output(&out_str);
 
       base::string16 input_str(WStringToUTF16(utf_cases[i].input16));
       int input_len = static_cast<int>(input_str.length());
@@ -264,10 +264,10 @@
   for (size_t i = 0; i < ARRAYSIZE(icu_cases); i++) {
     UConvScoper conv(icu_cases[i].encoding);
     ASSERT_TRUE(conv.converter() != NULL);
-    url_canon::ICUCharsetConverter converter(conv.converter());
+    ICUCharsetConverter converter(conv.converter());
 
     std::string str;
-    url_canon::StdStringCanonOutput output(&str);
+    StdStringCanonOutput output(&str);
 
     base::string16 input_str(WStringToUTF16(icu_cases[i].input));
     int input_len = static_cast<int>(input_str.length());
@@ -282,14 +282,14 @@
   const int static_size = 16;
   UConvScoper conv("utf-8");
   ASSERT_TRUE(conv.converter());
-  url_canon::ICUCharsetConverter converter(conv.converter());
+  ICUCharsetConverter converter(conv.converter());
   for (int i = static_size - 2; i <= static_size + 2; i++) {
     // Make a string with the appropriate length.
     base::string16 input;
     for (int ch = 0; ch < i; ch++)
       input.push_back('a');
 
-    url_canon::RawCanonOutput<static_size> output;
+    RawCanonOutput<static_size> output;
     converter.ConvertFromUTF16(input.c_str(), static_cast<int>(input.length()),
                                &output);
     EXPECT_EQ(input.length(), static_cast<size_t>(output.length()));
@@ -306,27 +306,27 @@
   // out the rest of the URL, which is not present in the input. We check,
   // however, that the output range includes everything but the colon.
   ComponentCase scheme_cases[] = {
-    {"http", "http:", url_parse::Component(0, 4), true},
-    {"HTTP", "http:", url_parse::Component(0, 4), true},
-    {" HTTP ", "%20http%20:", url_parse::Component(0, 10), false},
-    {"htt: ", "htt%3A%20:", url_parse::Component(0, 9), false},
-    {"\xe4\xbd\xa0\xe5\xa5\xbdhttp", "%E4%BD%A0%E5%A5%BDhttp:", url_parse::Component(0, 22), false},
+    {"http", "http:", Component(0, 4), true},
+    {"HTTP", "http:", Component(0, 4), true},
+    {" HTTP ", "%20http%20:", Component(0, 10), false},
+    {"htt: ", "htt%3A%20:", Component(0, 9), false},
+    {"\xe4\xbd\xa0\xe5\xa5\xbdhttp", "%E4%BD%A0%E5%A5%BDhttp:", Component(0, 22), false},
       // Don't re-escape something already escaped. Note that it will
       // "canonicalize" the 'A' to 'a', but that's OK.
-    {"ht%3Atp", "ht%3atp:", url_parse::Component(0, 7), false},
+    {"ht%3Atp", "ht%3atp:", Component(0, 7), false},
   };
 
   std::string out_str;
 
   for (size_t i = 0; i < arraysize(scheme_cases); i++) {
     int url_len = static_cast<int>(strlen(scheme_cases[i].input));
-    url_parse::Component in_comp(0, url_len);
-    url_parse::Component out_comp;
+    Component in_comp(0, url_len);
+    Component out_comp;
 
     out_str.clear();
-    url_canon::StdStringCanonOutput output1(&out_str);
-    bool success = url_canon::CanonicalizeScheme(scheme_cases[i].input,
-                                                 in_comp, &output1, &out_comp);
+    StdStringCanonOutput output1(&out_str);
+    bool success = CanonicalizeScheme(scheme_cases[i].input, in_comp, &output1,
+                                      &out_comp);
     output1.Complete();
 
     EXPECT_EQ(scheme_cases[i].expected_success, success);
@@ -336,12 +336,12 @@
 
     // Now try the wide version
     out_str.clear();
-    url_canon::StdStringCanonOutput output2(&out_str);
+    StdStringCanonOutput output2(&out_str);
 
     base::string16 wide_input(ConvertUTF8ToUTF16(scheme_cases[i].input));
     in_comp.len = static_cast<int>(wide_input.length());
-    success = url_canon::CanonicalizeScheme(wide_input.c_str(), in_comp,
-                                            &output2, &out_comp);
+    success = CanonicalizeScheme(wide_input.c_str(), in_comp, &output2,
+                                 &out_comp);
     output2.Complete();
 
     EXPECT_EQ(scheme_cases[i].expected_success, success);
@@ -352,12 +352,11 @@
 
   // Test the case where the scheme is declared nonexistant, it should be
   // converted into an empty scheme.
-  url_parse::Component out_comp;
+  Component out_comp;
   out_str.clear();
-  url_canon::StdStringCanonOutput output(&out_str);
+  StdStringCanonOutput output(&out_str);
 
-  EXPECT_TRUE(url_canon::CanonicalizeScheme("", url_parse::Component(0, -1),
-                                            &output, &out_comp));
+  EXPECT_TRUE(CanonicalizeScheme("", Component(0, -1), &output, &out_comp));
   output.Complete();
 
   EXPECT_EQ(std::string(":"), out_str);
@@ -368,37 +367,37 @@
 TEST(URLCanonTest, Host) {
   IPAddressCase host_cases[] = {
        // Basic canonicalization, uppercase should be converted to lowercase.
-    {"GoOgLe.CoM", L"GoOgLe.CoM", "google.com", url_parse::Component(0, 10), CanonHostInfo::NEUTRAL, -1, ""},
+    {"GoOgLe.CoM", L"GoOgLe.CoM", "google.com", Component(0, 10), CanonHostInfo::NEUTRAL, -1, ""},
       // Spaces and some other characters should be escaped.
-    {"Goo%20 goo%7C|.com", L"Goo%20 goo%7C|.com", "goo%20%20goo%7C%7C.com", url_parse::Component(0, 22), CanonHostInfo::NEUTRAL, -1, ""},
+    {"Goo%20 goo%7C|.com", L"Goo%20 goo%7C|.com", "goo%20%20goo%7C%7C.com", Component(0, 22), CanonHostInfo::NEUTRAL, -1, ""},
       // Exciting different types of spaces!
-    {NULL, L"GOO\x00a0\x3000goo.com", "goo%20%20goo.com", url_parse::Component(0, 16), CanonHostInfo::NEUTRAL, -1, ""},
+    {NULL, L"GOO\x00a0\x3000goo.com", "goo%20%20goo.com", Component(0, 16), CanonHostInfo::NEUTRAL, -1, ""},
       // Other types of space (no-break, zero-width, zero-width-no-break) are
       // name-prepped away to nothing.
-    {NULL, L"GOO\x200b\x2060\xfeffgoo.com", "googoo.com", url_parse::Component(0, 10), CanonHostInfo::NEUTRAL, -1, ""},
+    {NULL, L"GOO\x200b\x2060\xfeffgoo.com", "googoo.com", Component(0, 10), CanonHostInfo::NEUTRAL, -1, ""},
       // Ideographic full stop (full-width period for Chinese, etc.) should be
       // treated as a dot.
-    {NULL, L"www.foo\x3002" L"bar.com", "www.foo.bar.com", url_parse::Component(0, 15), CanonHostInfo::NEUTRAL, -1, ""},
+    {NULL, L"www.foo\x3002" L"bar.com", "www.foo.bar.com", Component(0, 15), CanonHostInfo::NEUTRAL, -1, ""},
       // Invalid unicode characters should fail...
       // ...In wide input, ICU will barf and we'll end up with the input as
       //    escaped UTF-8 (the invalid character should be replaced with the
       //    replacement character).
-    {"\xef\xb7\x90zyx.com", L"\xfdd0zyx.com", "%EF%BF%BDzyx.com", url_parse::Component(0, 16), CanonHostInfo::BROKEN, -1, ""},
+    {"\xef\xb7\x90zyx.com", L"\xfdd0zyx.com", "%EF%BF%BDzyx.com", Component(0, 16), CanonHostInfo::BROKEN, -1, ""},
       // ...This is the same as previous but with with escaped.
-    {"%ef%b7%90zyx.com", L"%ef%b7%90zyx.com", "%EF%BF%BDzyx.com", url_parse::Component(0, 16), CanonHostInfo::BROKEN, -1, ""},
+    {"%ef%b7%90zyx.com", L"%ef%b7%90zyx.com", "%EF%BF%BDzyx.com", Component(0, 16), CanonHostInfo::BROKEN, -1, ""},
       // Test name prepping, fullwidth input should be converted to ASCII and NOT
       // IDN-ized. This is "Go" in fullwidth UTF-8/UTF-16.
-    {"\xef\xbc\xa7\xef\xbd\x8f.com", L"\xff27\xff4f.com", "go.com", url_parse::Component(0, 6), CanonHostInfo::NEUTRAL, -1, ""},
+    {"\xef\xbc\xa7\xef\xbd\x8f.com", L"\xff27\xff4f.com", "go.com", Component(0, 6), CanonHostInfo::NEUTRAL, -1, ""},
       // Test that fullwidth escaped values are properly name-prepped,
       // then converted or rejected.
       // ...%41 in fullwidth = 'A' (also as escaped UTF-8 input)
-    {"\xef\xbc\x85\xef\xbc\x94\xef\xbc\x91.com", L"\xff05\xff14\xff11.com", "a.com", url_parse::Component(0, 5), CanonHostInfo::NEUTRAL, -1, ""},
-    {"%ef%bc%85%ef%bc%94%ef%bc%91.com", L"%ef%bc%85%ef%bc%94%ef%bc%91.com", "a.com", url_parse::Component(0, 5), CanonHostInfo::NEUTRAL, -1, ""},
+    {"\xef\xbc\x85\xef\xbc\x94\xef\xbc\x91.com", L"\xff05\xff14\xff11.com", "a.com", Component(0, 5), CanonHostInfo::NEUTRAL, -1, ""},
+    {"%ef%bc%85%ef%bc%94%ef%bc%91.com", L"%ef%bc%85%ef%bc%94%ef%bc%91.com", "a.com", Component(0, 5), CanonHostInfo::NEUTRAL, -1, ""},
       // ...%00 in fullwidth should fail (also as escaped UTF-8 input)
-    {"\xef\xbc\x85\xef\xbc\x90\xef\xbc\x90.com", L"\xff05\xff10\xff10.com", "%00.com", url_parse::Component(0, 7), CanonHostInfo::BROKEN, -1, ""},
-    {"%ef%bc%85%ef%bc%90%ef%bc%90.com", L"%ef%bc%85%ef%bc%90%ef%bc%90.com", "%00.com", url_parse::Component(0, 7), CanonHostInfo::BROKEN, -1, ""},
+    {"\xef\xbc\x85\xef\xbc\x90\xef\xbc\x90.com", L"\xff05\xff10\xff10.com", "%00.com", Component(0, 7), CanonHostInfo::BROKEN, -1, ""},
+    {"%ef%bc%85%ef%bc%90%ef%bc%90.com", L"%ef%bc%85%ef%bc%90%ef%bc%90.com", "%00.com", Component(0, 7), CanonHostInfo::BROKEN, -1, ""},
       // Basic IDN support, UTF-8 and UTF-16 input should be converted to IDN
-    {"\xe4\xbd\xa0\xe5\xa5\xbd\xe4\xbd\xa0\xe5\xa5\xbd", L"\x4f60\x597d\x4f60\x597d", "xn--6qqa088eba", url_parse::Component(0, 14), CanonHostInfo::NEUTRAL, -1, ""},
+    {"\xe4\xbd\xa0\xe5\xa5\xbd\xe4\xbd\xa0\xe5\xa5\xbd", L"\x4f60\x597d\x4f60\x597d", "xn--6qqa088eba", Component(0, 14), CanonHostInfo::NEUTRAL, -1, ""},
       // See http://unicode.org/cldr/utility/idna.jsp for other
       // examples/experiments and http://goo.gl/7yG11o
       // for the full list of characters handled differently by
@@ -409,153 +408,153 @@
       // Sharp-s is mapped to 'ss' in UTS 46 and IDNA 2003.
       // Otherwise, it'd be "xn--fuball-cta.de".
     {"fu\xc3\x9f" "ball.de", L"fu\x00df" L"ball.de", "fussball.de",
-      url_parse::Component(0, 11), CanonHostInfo::NEUTRAL, -1, ""},
+      Component(0, 11), CanonHostInfo::NEUTRAL, -1, ""},
       // Final-sigma (U+03C3) is mapped to regular sigma (U+03C2).
       // Otherwise, it'd be "xn--wxaijb9b".
     {"\xcf\x83\xcf\x8c\xce\xbb\xce\xbf\xcf\x82", L"\x3c3\x3cc\x3bb\x3bf\x3c2",
-      "xn--wxaikc6b", url_parse::Component(0, 12),
+      "xn--wxaikc6b", Component(0, 12),
       CanonHostInfo::NEUTRAL, -1, ""},
       // ZWNJ (U+200C) and ZWJ (U+200D) are mapped away in UTS 46 transitional
       // handling as well as in IDNA 2003.
     {"a\xe2\x80\x8c" "b\xe2\x80\x8d" "c", L"a\x200c" L"b\x200d" L"c", "abc",
-      url_parse::Component(0, 3), CanonHostInfo::NEUTRAL, -1, ""},
+      Component(0, 3), CanonHostInfo::NEUTRAL, -1, ""},
       // ZWJ between Devanagari characters is still mapped away in UTS 46
       // transitional handling. IDNA 2008 would give xn--11bo0mv54g.
     {"\xe0\xa4\x95\xe0\xa5\x8d\xe2\x80\x8d\xe0\xa4\x9c",
      L"\x915\x94d\x200d\x91c", "xn--11bo0m",
-     url_parse::Component(0, 10), CanonHostInfo::NEUTRAL, -1, ""},
+     Component(0, 10), CanonHostInfo::NEUTRAL, -1, ""},
       // Fullwidth exclamation mark is disallowed. UTS 46, table 4, row (b)
       // However, we do allow this at the moment because we don't use
       // STD3 rules and canonicalize full-width ASCII to ASCII.
     {"wow\xef\xbc\x81", L"wow\xff01", "wow%21",
-      url_parse::Component(0, 6), CanonHostInfo::NEUTRAL, -1, ""},
+      Component(0, 6), CanonHostInfo::NEUTRAL, -1, ""},
       // U+2132 (turned capital F) is disallowed. UTS 46, table 4, row (c)
       // Allowed in IDNA 2003, but the mapping changed after Unicode 3.2
     {"\xe2\x84\xb2oo", L"\x2132oo", "%E2%84%B2oo",
-      url_parse::Component(0, 11), CanonHostInfo::BROKEN, -1, ""},
+      Component(0, 11), CanonHostInfo::BROKEN, -1, ""},
       // U+2F868 (CJK Comp) is disallowed. UTS 46, table 4, row (d)
       // Allowed in IDNA 2003, but the mapping changed after Unicode 3.2
     {"\xf0\xaf\xa1\xa8\xe5\xa7\xbb.cn", L"\xd87e\xdc68\x59fb.cn",
       "%F0%AF%A1%A8%E5%A7%BB.cn",
-      url_parse::Component(0, 24), CanonHostInfo::BROKEN, -1, ""},
+      Component(0, 24), CanonHostInfo::BROKEN, -1, ""},
       // Maps uppercase letters to lower case letters. UTS 46 table 4 row (e)
     {"M\xc3\x9cNCHEN", L"M\xdcNCHEN", "xn--mnchen-3ya",
-      url_parse::Component(0, 14), CanonHostInfo::NEUTRAL, -1, ""},
+      Component(0, 14), CanonHostInfo::NEUTRAL, -1, ""},
       // Symbol/punctuations are allowed in IDNA 2003/UTS46.
       // Not allowed in IDNA 2008. UTS 46 table 4 row (f).
     {"\xe2\x99\xa5ny.us", L"\x2665ny.us", "xn--ny-s0x.us",
-      url_parse::Component(0, 13), CanonHostInfo::NEUTRAL, -1, ""},
+      Component(0, 13), CanonHostInfo::NEUTRAL, -1, ""},
       // U+11013 is new in Unicode 6.0 and is allowed. UTS 46 table 4, row (h)
       // We used to allow it because we passed through unassigned code points.
     {"\xf0\x91\x80\x93.com", L"\xd804\xdc13.com", "xn--n00d.com",
-      url_parse::Component(0, 12), CanonHostInfo::NEUTRAL, -1, ""},
+      Component(0, 12), CanonHostInfo::NEUTRAL, -1, ""},
       // U+0602 is disallowed in UTS46/IDNA 2008. UTS 46 table 4, row(i)
       // Used to be allowed in INDA 2003.
     {"\xd8\x82.eg", L"\x602.eg", "%D8%82.eg",
-      url_parse::Component(0, 9), CanonHostInfo::BROKEN, -1, ""},
+      Component(0, 9), CanonHostInfo::BROKEN, -1, ""},
       // U+20B7 is new in Unicode 5.2 (not a part of IDNA 2003 based
       // on Unicode 3.2). We did allow it in the past because we let unassigned
       // code point pass. We continue to allow it even though it's a
       // "punctuation and symbol" blocked in IDNA 2008.
       // UTS 46 table 4, row (j)
     {"\xe2\x82\xb7.com", L"\x20b7.com", "xn--wzg.com",
-      url_parse::Component(0, 11), CanonHostInfo::NEUTRAL, -1, ""},
+      Component(0, 11), CanonHostInfo::NEUTRAL, -1, ""},
       // Maps uppercase letters to lower case letters.
       // In IDNA 2003, it's allowed without case-folding
       // ( xn--bc-7cb.com ) because it's not defined in Unicode 3.2
       // (added in Unicode 4.1). UTS 46 table 4 row (k)
     {"bc\xc8\xba.com", L"bc\x23a.com", "xn--bc-is1a.com",
-      url_parse::Component(0, 15), CanonHostInfo::NEUTRAL, -1, ""},
+      Component(0, 15), CanonHostInfo::NEUTRAL, -1, ""},
       // BiDi check test
       // "Divehi" in Divehi (Thaana script) ends with BidiClass=NSM.
       // Disallowed in IDNA 2003 but now allowed in UTS 46/IDNA 2008.
     {"\xde\x8b\xde\xa8\xde\x88\xde\xac\xde\x80\xde\xa8",
      L"\x78b\x7a8\x788\x7ac\x780\x7a8", "xn--hqbpi0jcw",
-     url_parse::Component(0, 13), CanonHostInfo::NEUTRAL, -1, ""},
+     Component(0, 13), CanonHostInfo::NEUTRAL, -1, ""},
       // Disallowed in both IDNA 2003 and 2008 with BiDi check.
       // Labels starting with a RTL character cannot end with a LTR character.
     {"\xd8\xac\xd8\xa7\xd8\xb1xyz", L"\x62c\x627\x631xyz",
-     "%D8%AC%D8%A7%D8%B1xyz", url_parse::Component(0, 21),
+     "%D8%AC%D8%A7%D8%B1xyz", Component(0, 21),
      CanonHostInfo::BROKEN, -1, ""},
       // Labels starting with a RTL character can end with BC=EN (European
       // number). Disallowed in IDNA 2003 but now allowed.
     {"\xd8\xac\xd8\xa7\xd8\xb1" "2", L"\x62c\x627\x631" L"2",
-     "xn--2-ymcov", url_parse::Component(0, 11),
+     "xn--2-ymcov", Component(0, 11),
      CanonHostInfo::NEUTRAL, -1, ""},
       // Labels starting with a RTL character cannot have "L" characters
       // even if it ends with an BC=EN. Disallowed in both IDNA 2003/2008.
     {"\xd8\xac\xd8\xa7\xd8\xb1xy2", L"\x62c\x627\x631xy2",
-     "%D8%AC%D8%A7%D8%B1xy2", url_parse::Component(0, 21),
+     "%D8%AC%D8%A7%D8%B1xy2", Component(0, 21),
      CanonHostInfo::BROKEN, -1, ""},
       // Labels starting with a RTL character can end with BC=AN (Arabic number)
       // Disallowed in IDNA 2003, but now allowed.
     {"\xd8\xac\xd8\xa7\xd8\xb1\xd9\xa2", L"\x62c\x627\x631\x662",
-     "xn--mgbjq0r", url_parse::Component(0, 11),
+     "xn--mgbjq0r", Component(0, 11),
      CanonHostInfo::NEUTRAL, -1, ""},
       // Labels starting with a RTL character cannot have "L" characters
       // even if it ends with an BC=AN (Arabic number).
       // Disallowed in both IDNA 2003/2008.
     {"\xd8\xac\xd8\xa7\xd8\xb1xy\xd9\xa2", L"\x62c\x627\x631xy\x662",
-     "%D8%AC%D8%A7%D8%B1xy%D9%A2", url_parse::Component(0, 26),
+     "%D8%AC%D8%A7%D8%B1xy%D9%A2", Component(0, 26),
      CanonHostInfo::BROKEN, -1, ""},
       // Labels starting with a RTL character cannot mix BC=EN and BC=AN
     {"\xd8\xac\xd8\xa7\xd8\xb1xy2\xd9\xa2", L"\x62c\x627\x631xy2\x662",
-     "%D8%AC%D8%A7%D8%B1xy2%D9%A2", url_parse::Component(0, 27),
+     "%D8%AC%D8%A7%D8%B1xy2%D9%A2", Component(0, 27),
      CanonHostInfo::BROKEN, -1, ""},
       // As of Unicode 6.2, U+20CF is not assigned. We do not allow it.
     {"\xe2\x83\x8f.com", L"\x20cf.com", "%E2%83%8F.com",
-      url_parse::Component(0, 13), CanonHostInfo::BROKEN, -1, ""},
+      Component(0, 13), CanonHostInfo::BROKEN, -1, ""},
       // U+0080 is not allowed.
     {"\xc2\x80.com", L"\x80.com", "%C2%80.com",
-      url_parse::Component(0, 10), CanonHostInfo::BROKEN, -1, ""},
+      Component(0, 10), CanonHostInfo::BROKEN, -1, ""},
       // Mixed UTF-8 and escaped UTF-8 (narrow case) and UTF-16 and escaped
       // Mixed UTF-8 and escaped UTF-8 (narrow case) and UTF-16 and escaped
       // UTF-8 (wide case). The output should be equivalent to the true wide
       // character input above).
     {"%E4%BD%A0%E5%A5%BD\xe4\xbd\xa0\xe5\xa5\xbd",
       L"%E4%BD%A0%E5%A5%BD\x4f60\x597d", "xn--6qqa088eba",
-      url_parse::Component(0, 14), CanonHostInfo::NEUTRAL, -1, ""},
+      Component(0, 14), CanonHostInfo::NEUTRAL, -1, ""},
       // Invalid escaped characters should fail and the percents should be
       // escaped.
-    {"%zz%66%a", L"%zz%66%a", "%25zzf%25a", url_parse::Component(0, 10),
+    {"%zz%66%a", L"%zz%66%a", "%25zzf%25a", Component(0, 10),
       CanonHostInfo::BROKEN, -1, ""},
       // If we get an invalid character that has been escaped.
-    {"%25", L"%25", "%25", url_parse::Component(0, 3),
+    {"%25", L"%25", "%25", Component(0, 3),
       CanonHostInfo::BROKEN, -1, ""},
-    {"hello%00", L"hello%00", "hello%00", url_parse::Component(0, 8),
+    {"hello%00", L"hello%00", "hello%00", Component(0, 8),
       CanonHostInfo::BROKEN, -1, ""},
       // Escaped numbers should be treated like IP addresses if they are.
     {"%30%78%63%30%2e%30%32%35%30.01", L"%30%78%63%30%2e%30%32%35%30.01",
-      "192.168.0.1", url_parse::Component(0, 11), CanonHostInfo::IPV4, 3,
+      "192.168.0.1", Component(0, 11), CanonHostInfo::IPV4, 3,
       "C0A80001"},
     {"%30%78%63%30%2e%30%32%35%30.01%2e", L"%30%78%63%30%2e%30%32%35%30.01%2e",
-      "192.168.0.1", url_parse::Component(0, 11), CanonHostInfo::IPV4, 3,
+      "192.168.0.1", Component(0, 11), CanonHostInfo::IPV4, 3,
       "C0A80001"},
       // Invalid escaping should trigger the regular host error handling.
-    {"%3g%78%63%30%2e%30%32%35%30%2E.01", L"%3g%78%63%30%2e%30%32%35%30%2E.01", "%253gxc0.0250..01", url_parse::Component(0, 17), CanonHostInfo::BROKEN, -1, ""},
+    {"%3g%78%63%30%2e%30%32%35%30%2E.01", L"%3g%78%63%30%2e%30%32%35%30%2E.01", "%253gxc0.0250..01", Component(0, 17), CanonHostInfo::BROKEN, -1, ""},
       // Something that isn't exactly an IP should get treated as a host and
       // spaces escaped.
-    {"192.168.0.1 hello", L"192.168.0.1 hello", "192.168.0.1%20hello", url_parse::Component(0, 19), CanonHostInfo::NEUTRAL, -1, ""},
+    {"192.168.0.1 hello", L"192.168.0.1 hello", "192.168.0.1%20hello", Component(0, 19), CanonHostInfo::NEUTRAL, -1, ""},
       // Fullwidth and escaped UTF-8 fullwidth should still be treated as IP.
       // These are "0Xc0.0250.01" in fullwidth.
-    {"\xef\xbc\x90%Ef%bc\xb8%ef%Bd%83\xef\xbc\x90%EF%BC%8E\xef\xbc\x90\xef\xbc\x92\xef\xbc\x95\xef\xbc\x90\xef\xbc%8E\xef\xbc\x90\xef\xbc\x91", L"\xff10\xff38\xff43\xff10\xff0e\xff10\xff12\xff15\xff10\xff0e\xff10\xff11", "192.168.0.1", url_parse::Component(0, 11), CanonHostInfo::IPV4, 3, "C0A80001"},
+    {"\xef\xbc\x90%Ef%bc\xb8%ef%Bd%83\xef\xbc\x90%EF%BC%8E\xef\xbc\x90\xef\xbc\x92\xef\xbc\x95\xef\xbc\x90\xef\xbc%8E\xef\xbc\x90\xef\xbc\x91", L"\xff10\xff38\xff43\xff10\xff0e\xff10\xff12\xff15\xff10\xff0e\xff10\xff11", "192.168.0.1", Component(0, 11), CanonHostInfo::IPV4, 3, "C0A80001"},
       // Broken IP addresses get marked as such.
-    {"192.168.0.257", L"192.168.0.257", "192.168.0.257", url_parse::Component(0, 13), CanonHostInfo::BROKEN, -1, ""},
-    {"[google.com]", L"[google.com]", "[google.com]", url_parse::Component(0, 12), CanonHostInfo::BROKEN, -1, ""},
+    {"192.168.0.257", L"192.168.0.257", "192.168.0.257", Component(0, 13), CanonHostInfo::BROKEN, -1, ""},
+    {"[google.com]", L"[google.com]", "[google.com]", Component(0, 12), CanonHostInfo::BROKEN, -1, ""},
       // Cyrillic letter followed by '(' should return punycode for '(' escaped
       // before punycode string was created. I.e.
       // if '(' is escaped after punycode is created we would get xn--%28-8tb
       // (incorrect).
-    {"\xd1\x82(", L"\x0442(", "xn--%28-7ed", url_parse::Component(0, 11),
+    {"\xd1\x82(", L"\x0442(", "xn--%28-7ed", Component(0, 11),
       CanonHostInfo::NEUTRAL, -1, ""},
       // Address with all hexidecimal characters with leading number of 1<<32
       // or greater and should return NEUTRAL rather than BROKEN if not all
       // components are numbers.
-    {"12345678912345.de", L"12345678912345.de", "12345678912345.de", url_parse::Component(0, 17), CanonHostInfo::NEUTRAL, -1, ""},
-    {"1.12345678912345.de", L"1.12345678912345.de", "1.12345678912345.de", url_parse::Component(0, 19), CanonHostInfo::NEUTRAL, -1, ""},
-    {"12345678912345.12345678912345.de", L"12345678912345.12345678912345.de", "12345678912345.12345678912345.de", url_parse::Component(0, 32), CanonHostInfo::NEUTRAL, -1, ""},
-    {"1.2.0xB3A73CE5B59.de", L"1.2.0xB3A73CE5B59.de", "1.2.0xb3a73ce5b59.de", url_parse::Component(0, 20), CanonHostInfo::NEUTRAL, -1, ""},
-    {"12345678912345.0xde", L"12345678912345.0xde", "12345678912345.0xde", url_parse::Component(0, 19), CanonHostInfo::BROKEN, -1, ""},
+    {"12345678912345.de", L"12345678912345.de", "12345678912345.de", Component(0, 17), CanonHostInfo::NEUTRAL, -1, ""},
+    {"1.12345678912345.de", L"1.12345678912345.de", "1.12345678912345.de", Component(0, 19), CanonHostInfo::NEUTRAL, -1, ""},
+    {"12345678912345.12345678912345.de", L"12345678912345.12345678912345.de", "12345678912345.12345678912345.de", Component(0, 32), CanonHostInfo::NEUTRAL, -1, ""},
+    {"1.2.0xB3A73CE5B59.de", L"1.2.0xB3A73CE5B59.de", "1.2.0xb3a73ce5b59.de", Component(0, 20), CanonHostInfo::NEUTRAL, -1, ""},
+    {"12345678912345.0xde", L"12345678912345.0xde", "12345678912345.0xde", Component(0, 19), CanonHostInfo::BROKEN, -1, ""},
   };
 
   // CanonicalizeHost() non-verbose.
@@ -564,14 +563,14 @@
     // Narrow version.
     if (host_cases[i].input8) {
       int host_len = static_cast<int>(strlen(host_cases[i].input8));
-      url_parse::Component in_comp(0, host_len);
-      url_parse::Component out_comp;
+      Component in_comp(0, host_len);
+      Component out_comp;
 
       out_str.clear();
-      url_canon::StdStringCanonOutput output(&out_str);
+      StdStringCanonOutput output(&out_str);
 
-      bool success = url_canon::CanonicalizeHost(host_cases[i].input8, in_comp,
-                                                 &output, &out_comp);
+      bool success = CanonicalizeHost(host_cases[i].input8, in_comp, &output,
+                                      &out_comp);
       output.Complete();
 
       EXPECT_EQ(host_cases[i].expected_family != CanonHostInfo::BROKEN,
@@ -588,14 +587,14 @@
     if (host_cases[i].input16) {
       base::string16 input16(WStringToUTF16(host_cases[i].input16));
       int host_len = static_cast<int>(input16.length());
-      url_parse::Component in_comp(0, host_len);
-      url_parse::Component out_comp;
+      Component in_comp(0, host_len);
+      Component out_comp;
 
       out_str.clear();
-      url_canon::StdStringCanonOutput output(&out_str);
+      StdStringCanonOutput output(&out_str);
 
-      bool success = url_canon::CanonicalizeHost(input16.c_str(), in_comp,
-                                                 &output, &out_comp);
+      bool success = CanonicalizeHost(input16.c_str(), in_comp, &output,
+                                      &out_comp);
       output.Complete();
 
       EXPECT_EQ(host_cases[i].expected_family != CanonHostInfo::BROKEN,
@@ -611,14 +610,14 @@
     // Narrow version.
     if (host_cases[i].input8) {
       int host_len = static_cast<int>(strlen(host_cases[i].input8));
-      url_parse::Component in_comp(0, host_len);
+      Component in_comp(0, host_len);
 
       out_str.clear();
-      url_canon::StdStringCanonOutput output(&out_str);
+      StdStringCanonOutput output(&out_str);
       CanonHostInfo host_info;
 
-      url_canon::CanonicalizeHostVerbose(host_cases[i].input8, in_comp,
-                                         &output, &host_info);
+      CanonicalizeHostVerbose(host_cases[i].input8, in_comp, &output,
+                              &host_info);
       output.Complete();
 
       EXPECT_EQ(host_cases[i].expected_family, host_info.family);
@@ -638,14 +637,13 @@
     if (host_cases[i].input16) {
       base::string16 input16(WStringToUTF16(host_cases[i].input16));
       int host_len = static_cast<int>(input16.length());
-      url_parse::Component in_comp(0, host_len);
+      Component in_comp(0, host_len);
 
       out_str.clear();
-      url_canon::StdStringCanonOutput output(&out_str);
+      StdStringCanonOutput output(&out_str);
       CanonHostInfo host_info;
 
-      url_canon::CanonicalizeHostVerbose(input16.c_str(), in_comp,
-                                         &output, &host_info);
+      CanonicalizeHostVerbose(input16.c_str(), in_comp, &output, &host_info);
       output.Complete();
 
       EXPECT_EQ(host_cases[i].expected_family, host_info.family);
@@ -666,87 +664,85 @@
 TEST(URLCanonTest, IPv4) {
   IPAddressCase cases[] = {
       // Empty is not an IP address.
-    {"", L"", "", url_parse::Component(), CanonHostInfo::NEUTRAL, -1, ""},
-    {".", L".", "", url_parse::Component(), CanonHostInfo::NEUTRAL, -1, ""},
+    {"", L"", "", Component(), CanonHostInfo::NEUTRAL, -1, ""},
+    {".", L".", "", Component(), CanonHostInfo::NEUTRAL, -1, ""},
       // Regular IP addresses in different bases.
-    {"192.168.0.1", L"192.168.0.1", "192.168.0.1", url_parse::Component(0, 11), CanonHostInfo::IPV4, 4, "C0A80001"},
-    {"0300.0250.00.01", L"0300.0250.00.01", "192.168.0.1", url_parse::Component(0, 11), CanonHostInfo::IPV4, 4, "C0A80001"},
-    {"0xC0.0Xa8.0x0.0x1", L"0xC0.0Xa8.0x0.0x1", "192.168.0.1", url_parse::Component(0, 11), CanonHostInfo::IPV4, 4, "C0A80001"},
+    {"192.168.0.1", L"192.168.0.1", "192.168.0.1", Component(0, 11), CanonHostInfo::IPV4, 4, "C0A80001"},
+    {"0300.0250.00.01", L"0300.0250.00.01", "192.168.0.1", Component(0, 11), CanonHostInfo::IPV4, 4, "C0A80001"},
+    {"0xC0.0Xa8.0x0.0x1", L"0xC0.0Xa8.0x0.0x1", "192.168.0.1", Component(0, 11), CanonHostInfo::IPV4, 4, "C0A80001"},
       // Non-IP addresses due to invalid characters.
-    {"192.168.9.com", L"192.168.9.com", "", url_parse::Component(), CanonHostInfo::NEUTRAL, -1, ""},
+    {"192.168.9.com", L"192.168.9.com", "", Component(), CanonHostInfo::NEUTRAL, -1, ""},
       // Invalid characters for the base should be rejected.
-    {"19a.168.0.1", L"19a.168.0.1", "", url_parse::Component(), CanonHostInfo::NEUTRAL, -1, ""},
-    {"0308.0250.00.01", L"0308.0250.00.01", "", url_parse::Component(), CanonHostInfo::NEUTRAL, -1, ""},
-    {"0xCG.0xA8.0x0.0x1", L"0xCG.0xA8.0x0.0x1", "", url_parse::Component(), CanonHostInfo::NEUTRAL, -1, ""},
+    {"19a.168.0.1", L"19a.168.0.1", "", Component(), CanonHostInfo::NEUTRAL, -1, ""},
+    {"0308.0250.00.01", L"0308.0250.00.01", "", Component(), CanonHostInfo::NEUTRAL, -1, ""},
+    {"0xCG.0xA8.0x0.0x1", L"0xCG.0xA8.0x0.0x1", "", Component(), CanonHostInfo::NEUTRAL, -1, ""},
       // If there are not enough components, the last one should fill them out.
-    {"192", L"192", "0.0.0.192", url_parse::Component(0, 9), CanonHostInfo::IPV4, 1, "000000C0"},
-    {"0xC0a80001", L"0xC0a80001", "192.168.0.1", url_parse::Component(0, 11), CanonHostInfo::IPV4, 1, "C0A80001"},
-    {"030052000001", L"030052000001", "192.168.0.1", url_parse::Component(0, 11), CanonHostInfo::IPV4, 1, "C0A80001"},
-    {"000030052000001", L"000030052000001", "192.168.0.1", url_parse::Component(0, 11), CanonHostInfo::IPV4, 1, "C0A80001"},
-    {"192.168", L"192.168", "192.0.0.168", url_parse::Component(0, 11), CanonHostInfo::IPV4, 2, "C00000A8"},
-    {"192.0x00A80001", L"192.0x000A80001", "192.168.0.1", url_parse::Component(0, 11), CanonHostInfo::IPV4, 2, "C0A80001"},
-    {"0xc0.052000001", L"0xc0.052000001", "192.168.0.1", url_parse::Component(0, 11), CanonHostInfo::IPV4, 2, "C0A80001"},
-    {"192.168.1", L"192.168.1", "192.168.0.1", url_parse::Component(0, 11), CanonHostInfo::IPV4, 3, "C0A80001"},
+    {"192", L"192", "0.0.0.192", Component(0, 9), CanonHostInfo::IPV4, 1, "000000C0"},
+    {"0xC0a80001", L"0xC0a80001", "192.168.0.1", Component(0, 11), CanonHostInfo::IPV4, 1, "C0A80001"},
+    {"030052000001", L"030052000001", "192.168.0.1", Component(0, 11), CanonHostInfo::IPV4, 1, "C0A80001"},
+    {"000030052000001", L"000030052000001", "192.168.0.1", Component(0, 11), CanonHostInfo::IPV4, 1, "C0A80001"},
+    {"192.168", L"192.168", "192.0.0.168", Component(0, 11), CanonHostInfo::IPV4, 2, "C00000A8"},
+    {"192.0x00A80001", L"192.0x000A80001", "192.168.0.1", Component(0, 11), CanonHostInfo::IPV4, 2, "C0A80001"},
+    {"0xc0.052000001", L"0xc0.052000001", "192.168.0.1", Component(0, 11), CanonHostInfo::IPV4, 2, "C0A80001"},
+    {"192.168.1", L"192.168.1", "192.168.0.1", Component(0, 11), CanonHostInfo::IPV4, 3, "C0A80001"},
       // Too many components means not an IP address.
-    {"192.168.0.0.1", L"192.168.0.0.1", "", url_parse::Component(), CanonHostInfo::NEUTRAL, -1, ""},
+    {"192.168.0.0.1", L"192.168.0.0.1", "", Component(), CanonHostInfo::NEUTRAL, -1, ""},
       // We allow a single trailing dot.
-    {"192.168.0.1.", L"192.168.0.1.", "192.168.0.1", url_parse::Component(0, 11), CanonHostInfo::IPV4, 4, "C0A80001"},
-    {"192.168.0.1. hello", L"192.168.0.1. hello", "", url_parse::Component(), CanonHostInfo::NEUTRAL, -1, ""},
-    {"192.168.0.1..", L"192.168.0.1..", "", url_parse::Component(), CanonHostInfo::NEUTRAL, -1, ""},
+    {"192.168.0.1.", L"192.168.0.1.", "192.168.0.1", Component(0, 11), CanonHostInfo::IPV4, 4, "C0A80001"},
+    {"192.168.0.1. hello", L"192.168.0.1. hello", "", Component(), CanonHostInfo::NEUTRAL, -1, ""},
+    {"192.168.0.1..", L"192.168.0.1..", "", Component(), CanonHostInfo::NEUTRAL, -1, ""},
       // Two dots in a row means not an IP address.
-    {"192.168..1", L"192.168..1", "", url_parse::Component(), CanonHostInfo::NEUTRAL, -1, ""},
+    {"192.168..1", L"192.168..1", "", Component(), CanonHostInfo::NEUTRAL, -1, ""},
       // Any numerical overflow should be marked as BROKEN.
-    {"0x100.0", L"0x100.0", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
-    {"0x100.0.0", L"0x100.0.0", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
-    {"0x100.0.0.0", L"0x100.0.0.0", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
-    {"0.0x100.0.0", L"0.0x100.0.0", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
-    {"0.0.0x100.0", L"0.0.0x100.0", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
-    {"0.0.0.0x100", L"0.0.0.0x100", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
-    {"0.0.0x10000", L"0.0.0x10000", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
-    {"0.0x1000000", L"0.0x1000000", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
-    {"0x100000000", L"0x100000000", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
+    {"0x100.0", L"0x100.0", "", Component(), CanonHostInfo::BROKEN, -1, ""},
+    {"0x100.0.0", L"0x100.0.0", "", Component(), CanonHostInfo::BROKEN, -1, ""},
+    {"0x100.0.0.0", L"0x100.0.0.0", "", Component(), CanonHostInfo::BROKEN, -1, ""},
+    {"0.0x100.0.0", L"0.0x100.0.0", "", Component(), CanonHostInfo::BROKEN, -1, ""},
+    {"0.0.0x100.0", L"0.0.0x100.0", "", Component(), CanonHostInfo::BROKEN, -1, ""},
+    {"0.0.0.0x100", L"0.0.0.0x100", "", Component(), CanonHostInfo::BROKEN, -1, ""},
+    {"0.0.0x10000", L"0.0.0x10000", "", Component(), CanonHostInfo::BROKEN, -1, ""},
+    {"0.0x1000000", L"0.0x1000000", "", Component(), CanonHostInfo::BROKEN, -1, ""},
+    {"0x100000000", L"0x100000000", "", Component(), CanonHostInfo::BROKEN, -1, ""},
       // Repeat the previous tests, minus 1, to verify boundaries.
-    {"0xFF.0", L"0xFF.0", "255.0.0.0", url_parse::Component(0, 9), CanonHostInfo::IPV4, 2, "FF000000"},
-    {"0xFF.0.0", L"0xFF.0.0", "255.0.0.0", url_parse::Component(0, 9), CanonHostInfo::IPV4, 3, "FF000000"},
-    {"0xFF.0.0.0", L"0xFF.0.0.0", "255.0.0.0", url_parse::Component(0, 9), CanonHostInfo::IPV4, 4, "FF000000"},
-    {"0.0xFF.0.0", L"0.0xFF.0.0", "0.255.0.0", url_parse::Component(0, 9), CanonHostInfo::IPV4, 4, "00FF0000"},
-    {"0.0.0xFF.0", L"0.0.0xFF.0", "0.0.255.0", url_parse::Component(0, 9), CanonHostInfo::IPV4, 4, "0000FF00"},
-    {"0.0.0.0xFF", L"0.0.0.0xFF", "0.0.0.255", url_parse::Component(0, 9), CanonHostInfo::IPV4, 4, "000000FF"},
-    {"0.0.0xFFFF", L"0.0.0xFFFF", "0.0.255.255", url_parse::Component(0, 11), CanonHostInfo::IPV4, 3, "0000FFFF"},
-    {"0.0xFFFFFF", L"0.0xFFFFFF", "0.255.255.255", url_parse::Component(0, 13), CanonHostInfo::IPV4, 2, "00FFFFFF"},
-    {"0xFFFFFFFF", L"0xFFFFFFFF", "255.255.255.255", url_parse::Component(0, 15), CanonHostInfo::IPV4, 1, "FFFFFFFF"},
+    {"0xFF.0", L"0xFF.0", "255.0.0.0", Component(0, 9), CanonHostInfo::IPV4, 2, "FF000000"},
+    {"0xFF.0.0", L"0xFF.0.0", "255.0.0.0", Component(0, 9), CanonHostInfo::IPV4, 3, "FF000000"},
+    {"0xFF.0.0.0", L"0xFF.0.0.0", "255.0.0.0", Component(0, 9), CanonHostInfo::IPV4, 4, "FF000000"},
+    {"0.0xFF.0.0", L"0.0xFF.0.0", "0.255.0.0", Component(0, 9), CanonHostInfo::IPV4, 4, "00FF0000"},
+    {"0.0.0xFF.0", L"0.0.0xFF.0", "0.0.255.0", Component(0, 9), CanonHostInfo::IPV4, 4, "0000FF00"},
+    {"0.0.0.0xFF", L"0.0.0.0xFF", "0.0.0.255", Component(0, 9), CanonHostInfo::IPV4, 4, "000000FF"},
+    {"0.0.0xFFFF", L"0.0.0xFFFF", "0.0.255.255", Component(0, 11), CanonHostInfo::IPV4, 3, "0000FFFF"},
+    {"0.0xFFFFFF", L"0.0xFFFFFF", "0.255.255.255", Component(0, 13), CanonHostInfo::IPV4, 2, "00FFFFFF"},
+    {"0xFFFFFFFF", L"0xFFFFFFFF", "255.255.255.255", Component(0, 15), CanonHostInfo::IPV4, 1, "FFFFFFFF"},
       // Old trunctations tests.  They're all "BROKEN" now.
-    {"276.256.0xf1a2.077777", L"276.256.0xf1a2.077777", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
-    {"192.168.0.257", L"192.168.0.257", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
-    {"192.168.0xa20001", L"192.168.0xa20001", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
-    {"192.015052000001", L"192.015052000001", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
-    {"0X12C0a80001", L"0X12C0a80001", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
-    {"276.1.2", L"276.1.2", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
+    {"276.256.0xf1a2.077777", L"276.256.0xf1a2.077777", "", Component(), CanonHostInfo::BROKEN, -1, ""},
+    {"192.168.0.257", L"192.168.0.257", "", Component(), CanonHostInfo::BROKEN, -1, ""},
+    {"192.168.0xa20001", L"192.168.0xa20001", "", Component(), CanonHostInfo::BROKEN, -1, ""},
+    {"192.015052000001", L"192.015052000001", "", Component(), CanonHostInfo::BROKEN, -1, ""},
+    {"0X12C0a80001", L"0X12C0a80001", "", Component(), CanonHostInfo::BROKEN, -1, ""},
+    {"276.1.2", L"276.1.2", "", Component(), CanonHostInfo::BROKEN, -1, ""},
       // Spaces should be rejected.
-    {"192.168.0.1 hello", L"192.168.0.1 hello", "", url_parse::Component(), CanonHostInfo::NEUTRAL, -1, ""},
+    {"192.168.0.1 hello", L"192.168.0.1 hello", "", Component(), CanonHostInfo::NEUTRAL, -1, ""},
       // Very large numbers.
-    {"0000000000000300.0x00000000000000fF.00000000000000001", L"0000000000000300.0x00000000000000fF.00000000000000001", "192.255.0.1", url_parse::Component(0, 11), CanonHostInfo::IPV4, 3, "C0FF0001"},
-    {"0000000000000300.0xffffffffFFFFFFFF.3022415481470977", L"0000000000000300.0xffffffffFFFFFFFF.3022415481470977", "", url_parse::Component(0, 11), CanonHostInfo::BROKEN, -1, ""},
+    {"0000000000000300.0x00000000000000fF.00000000000000001", L"0000000000000300.0x00000000000000fF.00000000000000001", "192.255.0.1", Component(0, 11), CanonHostInfo::IPV4, 3, "C0FF0001"},
+    {"0000000000000300.0xffffffffFFFFFFFF.3022415481470977", L"0000000000000300.0xffffffffFFFFFFFF.3022415481470977", "", Component(0, 11), CanonHostInfo::BROKEN, -1, ""},
       // A number has no length limit, but long numbers can still overflow.
-    {"00000000000000000001", L"00000000000000000001", "0.0.0.1", url_parse::Component(0, 7), CanonHostInfo::IPV4, 1, "00000001"},
-    {"0000000000000000100000000000000001", L"0000000000000000100000000000000001", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
+    {"00000000000000000001", L"00000000000000000001", "0.0.0.1", Component(0, 7), CanonHostInfo::IPV4, 1, "00000001"},
+    {"0000000000000000100000000000000001", L"0000000000000000100000000000000001", "", Component(), CanonHostInfo::BROKEN, -1, ""},
       // If a long component is non-numeric, it's a hostname, *not* a broken IP.
-    {"0.0.0.000000000000000000z", L"0.0.0.000000000000000000z", "", url_parse::Component(), CanonHostInfo::NEUTRAL, -1, ""},
-    {"0.0.0.100000000000000000z", L"0.0.0.100000000000000000z", "", url_parse::Component(), CanonHostInfo::NEUTRAL, -1, ""},
+    {"0.0.0.000000000000000000z", L"0.0.0.000000000000000000z", "", Component(), CanonHostInfo::NEUTRAL, -1, ""},
+    {"0.0.0.100000000000000000z", L"0.0.0.100000000000000000z", "", Component(), CanonHostInfo::NEUTRAL, -1, ""},
       // Truncation of all zeros should still result in 0.
-    {"0.00.0x.0x0", L"0.00.0x.0x0", "0.0.0.0", url_parse::Component(0, 7), CanonHostInfo::IPV4, 4, "00000000"},
+    {"0.00.0x.0x0", L"0.00.0x.0x0", "0.0.0.0", Component(0, 7), CanonHostInfo::IPV4, 4, "00000000"},
   };
 
   for (size_t i = 0; i < arraysize(cases); i++) {
     // 8-bit version.
-    url_parse::Component component(0,
-                                   static_cast<int>(strlen(cases[i].input8)));
+    Component component(0, static_cast<int>(strlen(cases[i].input8)));
 
     std::string out_str1;
-    url_canon::StdStringCanonOutput output1(&out_str1);
-    url_canon::CanonHostInfo host_info;
-    url_canon::CanonicalizeIPAddress(cases[i].input8, component, &output1,
-                                     &host_info);
+    StdStringCanonOutput output1(&out_str1);
+    CanonHostInfo host_info;
+    CanonicalizeIPAddress(cases[i].input8, component, &output1, &host_info);
     output1.Complete();
 
     EXPECT_EQ(cases[i].expected_family, host_info.family);
@@ -762,12 +758,11 @@
 
     // 16-bit version.
     base::string16 input16(WStringToUTF16(cases[i].input16));
-    component = url_parse::Component(0, static_cast<int>(input16.length()));
+    component = Component(0, static_cast<int>(input16.length()));
 
     std::string out_str2;
-    url_canon::StdStringCanonOutput output2(&out_str2);
-    url_canon::CanonicalizeIPAddress(input16.c_str(), component, &output2,
-                                     &host_info);
+    StdStringCanonOutput output2(&out_str2);
+    CanonicalizeIPAddress(input16.c_str(), component, &output2, &host_info);
     output2.Complete();
 
     EXPECT_EQ(cases[i].expected_family, host_info.family);
@@ -786,83 +781,83 @@
 TEST(URLCanonTest, IPv6) {
   IPAddressCase cases[] = {
       // Empty is not an IP address.
-    {"", L"", "", url_parse::Component(), CanonHostInfo::NEUTRAL, -1, ""},
+    {"", L"", "", Component(), CanonHostInfo::NEUTRAL, -1, ""},
       // Non-IPs with [:] characters are marked BROKEN.
-    {":", L":", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
-    {"[", L"[", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
-    {"[:", L"[:", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
-    {"]", L"]", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
-    {":]", L":]", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
-    {"[]", L"[]", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
-    {"[:]", L"[:]", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
+    {":", L":", "", Component(), CanonHostInfo::BROKEN, -1, ""},
+    {"[", L"[", "", Component(), CanonHostInfo::BROKEN, -1, ""},
+    {"[:", L"[:", "", Component(), CanonHostInfo::BROKEN, -1, ""},
+    {"]", L"]", "", Component(), CanonHostInfo::BROKEN, -1, ""},
+    {":]", L":]", "", Component(), CanonHostInfo::BROKEN, -1, ""},
+    {"[]", L"[]", "", Component(), CanonHostInfo::BROKEN, -1, ""},
+    {"[:]", L"[:]", "", Component(), CanonHostInfo::BROKEN, -1, ""},
       // Regular IP address is invalid without bounding '[' and ']'.
-    {"2001:db8::1", L"2001:db8::1", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
-    {"[2001:db8::1", L"[2001:db8::1", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
-    {"2001:db8::1]", L"2001:db8::1]", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
+    {"2001:db8::1", L"2001:db8::1", "", Component(), CanonHostInfo::BROKEN, -1, ""},
+    {"[2001:db8::1", L"[2001:db8::1", "", Component(), CanonHostInfo::BROKEN, -1, ""},
+    {"2001:db8::1]", L"2001:db8::1]", "", Component(), CanonHostInfo::BROKEN, -1, ""},
       // Regular IP addresses.
-    {"[::]", L"[::]", "[::]", url_parse::Component(0,4), CanonHostInfo::IPV6, -1, "00000000000000000000000000000000"},
-    {"[::1]", L"[::1]", "[::1]", url_parse::Component(0,5), CanonHostInfo::IPV6, -1, "00000000000000000000000000000001"},
-    {"[1::]", L"[1::]", "[1::]", url_parse::Component(0,5), CanonHostInfo::IPV6, -1, "00010000000000000000000000000000"},
+    {"[::]", L"[::]", "[::]", Component(0,4), CanonHostInfo::IPV6, -1, "00000000000000000000000000000000"},
+    {"[::1]", L"[::1]", "[::1]", Component(0,5), CanonHostInfo::IPV6, -1, "00000000000000000000000000000001"},
+    {"[1::]", L"[1::]", "[1::]", Component(0,5), CanonHostInfo::IPV6, -1, "00010000000000000000000000000000"},
 
     // Leading zeros should be stripped.
-    {"[000:01:02:003:004:5:6:007]", L"[000:01:02:003:004:5:6:007]", "[0:1:2:3:4:5:6:7]", url_parse::Component(0,17), CanonHostInfo::IPV6, -1, "00000001000200030004000500060007"},
+    {"[000:01:02:003:004:5:6:007]", L"[000:01:02:003:004:5:6:007]", "[0:1:2:3:4:5:6:7]", Component(0,17), CanonHostInfo::IPV6, -1, "00000001000200030004000500060007"},
 
     // Upper case letters should be lowercased.
-    {"[A:b:c:DE:fF:0:1:aC]", L"[A:b:c:DE:fF:0:1:aC]", "[a:b:c:de:ff:0:1:ac]", url_parse::Component(0,20), CanonHostInfo::IPV6, -1, "000A000B000C00DE00FF0000000100AC"},
+    {"[A:b:c:DE:fF:0:1:aC]", L"[A:b:c:DE:fF:0:1:aC]", "[a:b:c:de:ff:0:1:ac]", Component(0,20), CanonHostInfo::IPV6, -1, "000A000B000C00DE00FF0000000100AC"},
 
     // The same address can be written with different contractions, but should
     // get canonicalized to the same thing.
-    {"[1:0:0:2::3:0]", L"[1:0:0:2::3:0]", "[1::2:0:0:3:0]", url_parse::Component(0,14), CanonHostInfo::IPV6, -1, "00010000000000020000000000030000"},
-    {"[1::2:0:0:3:0]", L"[1::2:0:0:3:0]", "[1::2:0:0:3:0]", url_parse::Component(0,14), CanonHostInfo::IPV6, -1, "00010000000000020000000000030000"},
+    {"[1:0:0:2::3:0]", L"[1:0:0:2::3:0]", "[1::2:0:0:3:0]", Component(0,14), CanonHostInfo::IPV6, -1, "00010000000000020000000000030000"},
+    {"[1::2:0:0:3:0]", L"[1::2:0:0:3:0]", "[1::2:0:0:3:0]", Component(0,14), CanonHostInfo::IPV6, -1, "00010000000000020000000000030000"},
 
     // Addresses with embedded IPv4.
-    {"[::192.168.0.1]", L"[::192.168.0.1]", "[::c0a8:1]", url_parse::Component(0,10), CanonHostInfo::IPV6, -1, "000000000000000000000000C0A80001"},
-    {"[::ffff:192.168.0.1]", L"[::ffff:192.168.0.1]", "[::ffff:c0a8:1]", url_parse::Component(0,15), CanonHostInfo::IPV6, -1, "00000000000000000000FFFFC0A80001"},
-    {"[::eeee:192.168.0.1]", L"[::eeee:192.168.0.1]", "[::eeee:c0a8:1]", url_parse::Component(0, 15), CanonHostInfo::IPV6, -1, "00000000000000000000EEEEC0A80001"},
-    {"[2001::192.168.0.1]", L"[2001::192.168.0.1]", "[2001::c0a8:1]", url_parse::Component(0, 14), CanonHostInfo::IPV6, -1, "200100000000000000000000C0A80001"},
-    {"[1:2:192.168.0.1:5:6]", L"[1:2:192.168.0.1:5:6]", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
+    {"[::192.168.0.1]", L"[::192.168.0.1]", "[::c0a8:1]", Component(0,10), CanonHostInfo::IPV6, -1, "000000000000000000000000C0A80001"},
+    {"[::ffff:192.168.0.1]", L"[::ffff:192.168.0.1]", "[::ffff:c0a8:1]", Component(0,15), CanonHostInfo::IPV6, -1, "00000000000000000000FFFFC0A80001"},
+    {"[::eeee:192.168.0.1]", L"[::eeee:192.168.0.1]", "[::eeee:c0a8:1]", Component(0, 15), CanonHostInfo::IPV6, -1, "00000000000000000000EEEEC0A80001"},
+    {"[2001::192.168.0.1]", L"[2001::192.168.0.1]", "[2001::c0a8:1]", Component(0, 14), CanonHostInfo::IPV6, -1, "200100000000000000000000C0A80001"},
+    {"[1:2:192.168.0.1:5:6]", L"[1:2:192.168.0.1:5:6]", "", Component(), CanonHostInfo::BROKEN, -1, ""},
 
     // IPv4 with last component missing.
-    {"[::ffff:192.1.2]", L"[::ffff:192.1.2]", "[::ffff:c001:2]", url_parse::Component(0,15), CanonHostInfo::IPV6, -1, "00000000000000000000FFFFC0010002"},
+    {"[::ffff:192.1.2]", L"[::ffff:192.1.2]", "[::ffff:c001:2]", Component(0,15), CanonHostInfo::IPV6, -1, "00000000000000000000FFFFC0010002"},
 
     // IPv4 using hex.
     // TODO(eroman): Should this format be disallowed?
-    {"[::ffff:0xC0.0Xa8.0x0.0x1]", L"[::ffff:0xC0.0Xa8.0x0.0x1]", "[::ffff:c0a8:1]", url_parse::Component(0,15), CanonHostInfo::IPV6, -1, "00000000000000000000FFFFC0A80001"},
+    {"[::ffff:0xC0.0Xa8.0x0.0x1]", L"[::ffff:0xC0.0Xa8.0x0.0x1]", "[::ffff:c0a8:1]", Component(0,15), CanonHostInfo::IPV6, -1, "00000000000000000000FFFFC0A80001"},
 
     // There may be zeros surrounding the "::" contraction.
-    {"[0:0::0:0:8]", L"[0:0::0:0:8]", "[::8]", url_parse::Component(0,5), CanonHostInfo::IPV6, -1, "00000000000000000000000000000008"},
+    {"[0:0::0:0:8]", L"[0:0::0:0:8]", "[::8]", Component(0,5), CanonHostInfo::IPV6, -1, "00000000000000000000000000000008"},
 
-    {"[2001:db8::1]", L"[2001:db8::1]", "[2001:db8::1]", url_parse::Component(0,13), CanonHostInfo::IPV6, -1, "20010DB8000000000000000000000001"},
+    {"[2001:db8::1]", L"[2001:db8::1]", "[2001:db8::1]", Component(0,13), CanonHostInfo::IPV6, -1, "20010DB8000000000000000000000001"},
 
       // Can only have one "::" contraction in an IPv6 string literal.
-    {"[2001::db8::1]", L"[2001::db8::1]", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
+    {"[2001::db8::1]", L"[2001::db8::1]", "", Component(), CanonHostInfo::BROKEN, -1, ""},
       // No more than 2 consecutive ':'s.
-    {"[2001:db8:::1]", L"[2001:db8:::1]", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
-    {"[:::]", L"[:::]", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
+    {"[2001:db8:::1]", L"[2001:db8:::1]", "", Component(), CanonHostInfo::BROKEN, -1, ""},
+    {"[:::]", L"[:::]", "", Component(), CanonHostInfo::BROKEN, -1, ""},
       // Non-IP addresses due to invalid characters.
-    {"[2001::.com]", L"[2001::.com]", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
+    {"[2001::.com]", L"[2001::.com]", "", Component(), CanonHostInfo::BROKEN, -1, ""},
       // If there are not enough components, the last one should fill them out.
     // ... omitted at this time ...
       // Too many components means not an IP address.  Similarly with too few if using IPv4 compat or mapped addresses.
-    {"[::192.168.0.0.1]", L"[::192.168.0.0.1]", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
-    {"[::ffff:192.168.0.0.1]", L"[::ffff:192.168.0.0.1]", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
-    {"[1:2:3:4:5:6:7:8:9]", L"[1:2:3:4:5:6:7:8:9]", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
+    {"[::192.168.0.0.1]", L"[::192.168.0.0.1]", "", Component(), CanonHostInfo::BROKEN, -1, ""},
+    {"[::ffff:192.168.0.0.1]", L"[::ffff:192.168.0.0.1]", "", Component(), CanonHostInfo::BROKEN, -1, ""},
+    {"[1:2:3:4:5:6:7:8:9]", L"[1:2:3:4:5:6:7:8:9]", "", Component(), CanonHostInfo::BROKEN, -1, ""},
     // Too many bits (even though 8 comonents, the last one holds 32 bits).
-    {"[0:0:0:0:0:0:0:192.168.0.1]", L"[0:0:0:0:0:0:0:192.168.0.1]", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
+    {"[0:0:0:0:0:0:0:192.168.0.1]", L"[0:0:0:0:0:0:0:192.168.0.1]", "", Component(), CanonHostInfo::BROKEN, -1, ""},
 
     // Too many bits specified -- the contraction would have to be zero-length
     // to not exceed 128 bits.
-    {"[1:2:3:4:5:6::192.168.0.1]", L"[1:2:3:4:5:6::192.168.0.1]", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
+    {"[1:2:3:4:5:6::192.168.0.1]", L"[1:2:3:4:5:6::192.168.0.1]", "", Component(), CanonHostInfo::BROKEN, -1, ""},
 
     // The contraction is for 16 bits of zero.
-    {"[1:2:3:4:5:6::8]", L"[1:2:3:4:5:6::8]", "[1:2:3:4:5:6:0:8]", url_parse::Component(0,17), CanonHostInfo::IPV6, -1, "00010002000300040005000600000008"},
+    {"[1:2:3:4:5:6::8]", L"[1:2:3:4:5:6::8]", "[1:2:3:4:5:6:0:8]", Component(0,17), CanonHostInfo::IPV6, -1, "00010002000300040005000600000008"},
 
     // Cannot have a trailing colon.
-    {"[1:2:3:4:5:6:7:8:]", L"[1:2:3:4:5:6:7:8:]", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
-    {"[1:2:3:4:5:6:192.168.0.1:]", L"[1:2:3:4:5:6:192.168.0.1:]", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
+    {"[1:2:3:4:5:6:7:8:]", L"[1:2:3:4:5:6:7:8:]", "", Component(), CanonHostInfo::BROKEN, -1, ""},
+    {"[1:2:3:4:5:6:192.168.0.1:]", L"[1:2:3:4:5:6:192.168.0.1:]", "", Component(), CanonHostInfo::BROKEN, -1, ""},
 
     // Cannot have negative numbers.
-    {"[-1:2:3:4:5:6:7:8]", L"[-1:2:3:4:5:6:7:8]", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
+    {"[-1:2:3:4:5:6:7:8]", L"[-1:2:3:4:5:6:7:8]", "", Component(), CanonHostInfo::BROKEN, -1, ""},
 
     // Scope ID -- the URL may contain an optional ["%" <scope_id>] section.
     // The scope_id should be included in the canonicalized URL, and is an
@@ -871,37 +866,35 @@
     // Invalid because no ID was given after the percent.
 
     // Don't allow scope-id
-    {"[1::%1]", L"[1::%1]", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
-    {"[1::%eth0]", L"[1::%eth0]", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
-    {"[1::%]", L"[1::%]", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
-    {"[%]", L"[%]", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
-    {"[::%:]", L"[::%:]", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
+    {"[1::%1]", L"[1::%1]", "", Component(), CanonHostInfo::BROKEN, -1, ""},
+    {"[1::%eth0]", L"[1::%eth0]", "", Component(), CanonHostInfo::BROKEN, -1, ""},
+    {"[1::%]", L"[1::%]", "", Component(), CanonHostInfo::BROKEN, -1, ""},
+    {"[%]", L"[%]", "", Component(), CanonHostInfo::BROKEN, -1, ""},
+    {"[::%:]", L"[::%:]", "", Component(), CanonHostInfo::BROKEN, -1, ""},
 
     // Don't allow leading or trailing colons.
-    {"[:0:0::0:0:8]", L"[:0:0::0:0:8]", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
-    {"[0:0::0:0:8:]", L"[0:0::0:0:8:]", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
-    {"[:0:0::0:0:8:]", L"[:0:0::0:0:8:]", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
+    {"[:0:0::0:0:8]", L"[:0:0::0:0:8]", "", Component(), CanonHostInfo::BROKEN, -1, ""},
+    {"[0:0::0:0:8:]", L"[0:0::0:0:8:]", "", Component(), CanonHostInfo::BROKEN, -1, ""},
+    {"[:0:0::0:0:8:]", L"[:0:0::0:0:8:]", "", Component(), CanonHostInfo::BROKEN, -1, ""},
 
       // We allow a single trailing dot.
     // ... omitted at this time ...
       // Two dots in a row means not an IP address.
-    {"[::192.168..1]", L"[::192.168..1]", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
+    {"[::192.168..1]", L"[::192.168..1]", "", Component(), CanonHostInfo::BROKEN, -1, ""},
       // Any non-first components get truncated to one byte.
     // ... omitted at this time ...
       // Spaces should be rejected.
-    {"[::1 hello]", L"[::1 hello]", "", url_parse::Component(), CanonHostInfo::BROKEN, -1, ""},
+    {"[::1 hello]", L"[::1 hello]", "", Component(), CanonHostInfo::BROKEN, -1, ""},
   };
 
   for (size_t i = 0; i < arraysize(cases); i++) {
     // 8-bit version.
-    url_parse::Component component(0,
-                                   static_cast<int>(strlen(cases[i].input8)));
+    Component component(0, static_cast<int>(strlen(cases[i].input8)));
 
     std::string out_str1;
-    url_canon::StdStringCanonOutput output1(&out_str1);
-    url_canon::CanonHostInfo host_info;
-    url_canon::CanonicalizeIPAddress(cases[i].input8, component, &output1,
-                                     &host_info);
+    StdStringCanonOutput output1(&out_str1);
+    CanonHostInfo host_info;
+    CanonicalizeIPAddress(cases[i].input8, component, &output1, &host_info);
     output1.Complete();
 
     EXPECT_EQ(cases[i].expected_family, host_info.family);
@@ -916,12 +909,11 @@
 
     // 16-bit version.
     base::string16 input16(WStringToUTF16(cases[i].input16));
-    component = url_parse::Component(0, static_cast<int>(input16.length()));
+    component = Component(0, static_cast<int>(input16.length()));
 
     std::string out_str2;
-    url_canon::StdStringCanonOutput output2(&out_str2);
-    url_canon::CanonicalizeIPAddress(input16.c_str(), component, &output2,
-                                     &host_info);
+    StdStringCanonOutput output2(&out_str2);
+    CanonicalizeIPAddress(input16.c_str(), component, &output2, &host_info);
     output2.Complete();
 
     EXPECT_EQ(cases[i].expected_family, host_info.family);
@@ -937,17 +929,15 @@
 
 TEST(URLCanonTest, IPEmpty) {
   std::string out_str1;
-  url_canon::StdStringCanonOutput output1(&out_str1);
-  url_canon::CanonHostInfo host_info;
+  StdStringCanonOutput output1(&out_str1);
+  CanonHostInfo host_info;
 
   // This tests tests.
   const char spec[] = "192.168.0.1";
-  url_canon::CanonicalizeIPAddress(spec, url_parse::Component(),
-                                   &output1, &host_info);
+  CanonicalizeIPAddress(spec, Component(), &output1, &host_info);
   EXPECT_FALSE(host_info.IsIPAddress());
 
-  url_canon::CanonicalizeIPAddress(spec, url_parse::Component(0, 0),
-                                   &output1, &host_info);
+  CanonicalizeIPAddress(spec, Component(0, 0), &output1, &host_info);
   EXPECT_FALSE(host_info.IsIPAddress());
 }
 
@@ -959,38 +949,39 @@
   struct UserComponentCase {
     const char* input;
     const char* expected;
-    url_parse::Component expected_username;
-    url_parse::Component expected_password;
+    Component expected_username;
+    Component expected_password;
     bool expected_success;
   } user_info_cases[] = {
-    {"http://user:pass@host.com/", "user:pass@", url_parse::Component(0, 4), url_parse::Component(5, 4), true},
-    {"http://@host.com/", "", url_parse::Component(0, -1), url_parse::Component(0, -1), true},
-    {"http://:@host.com/", "", url_parse::Component(0, -1), url_parse::Component(0, -1), true},
-    {"http://foo:@host.com/", "foo@", url_parse::Component(0, 3), url_parse::Component(0, -1), true},
-    {"http://:foo@host.com/", ":foo@", url_parse::Component(0, 0), url_parse::Component(1, 3), true},
-    {"http://^ :$\t@host.com/", "%5E%20:$%09@", url_parse::Component(0, 6), url_parse::Component(7, 4), true},
-    {"http://user:pass@/", "user:pass@", url_parse::Component(0, 4), url_parse::Component(5, 4), true},
-    {"http://%2540:bar@domain.com/", "%2540:bar@", url_parse::Component(0, 5), url_parse::Component(6, 3), true },
+    {"http://user:pass@host.com/", "user:pass@", Component(0, 4), Component(5, 4), true},
+    {"http://@host.com/", "", Component(0, -1), Component(0, -1), true},
+    {"http://:@host.com/", "", Component(0, -1), Component(0, -1), true},
+    {"http://foo:@host.com/", "foo@", Component(0, 3), Component(0, -1), true},
+    {"http://:foo@host.com/", ":foo@", Component(0, 0), Component(1, 3), true},
+    {"http://^ :$\t@host.com/", "%5E%20:$%09@", Component(0, 6), Component(7, 4), true},
+    {"http://user:pass@/", "user:pass@", Component(0, 4), Component(5, 4), true},
+    {"http://%2540:bar@domain.com/", "%2540:bar@", Component(0, 5), Component(6, 3), true },
 
       // IE7 compatability: old versions allowed backslashes in usernames, but
       // IE7 does not. We disallow it as well.
-    {"ftp://me\\mydomain:pass@foo.com/", "", url_parse::Component(0, -1), url_parse::Component(0, -1), true},
+    {"ftp://me\\mydomain:pass@foo.com/", "", Component(0, -1), Component(0, -1), true},
   };
 
   for (size_t i = 0; i < ARRAYSIZE(user_info_cases); i++) {
     int url_len = static_cast<int>(strlen(user_info_cases[i].input));
-    url_parse::Parsed parsed;
-    url_parse::ParseStandardURL(user_info_cases[i].input, url_len, &parsed);
-    url_parse::Component out_user, out_pass;
+    Parsed parsed;
+    ParseStandardURL(user_info_cases[i].input, url_len, &parsed);
+    Component out_user, out_pass;
     std::string out_str;
-    url_canon::StdStringCanonOutput output1(&out_str);
+    StdStringCanonOutput output1(&out_str);
 
-    bool success = url_canon::CanonicalizeUserInfo(user_info_cases[i].input,
-                                                   parsed.username,
-                                                   user_info_cases[i].input,
-                                                   parsed.password,
-                                                   &output1, &out_user,
-                                                   &out_pass);
+    bool success = CanonicalizeUserInfo(user_info_cases[i].input,
+                                        parsed.username,
+                                        user_info_cases[i].input,
+                                        parsed.password,
+                                        &output1,
+                                        &out_user,
+                                        &out_pass);
     output1.Complete();
 
     EXPECT_EQ(user_info_cases[i].expected_success, success);
@@ -1002,13 +993,15 @@
 
     // Now try the wide version
     out_str.clear();
-    url_canon::StdStringCanonOutput output2(&out_str);
+    StdStringCanonOutput output2(&out_str);
     base::string16 wide_input(ConvertUTF8ToUTF16(user_info_cases[i].input));
-    success = url_canon::CanonicalizeUserInfo(wide_input.c_str(),
-                                              parsed.username,
-                                              wide_input.c_str(),
-                                              parsed.password,
-                                              &output2, &out_user, &out_pass);
+    success = CanonicalizeUserInfo(wide_input.c_str(),
+                                   parsed.username,
+                                   wide_input.c_str(),
+                                   parsed.password,
+                                   &output2,
+                                   &out_user,
+                                   &out_pass);
     output2.Complete();
 
     EXPECT_EQ(user_info_cases[i].expected_success, success);
@@ -1030,28 +1023,30 @@
     const char* input;
     int default_port;
     const char* expected;
-    url_parse::Component expected_component;
+    Component expected_component;
     bool expected_success;
   } port_cases[] = {
       // Invalid input should be copied w/ failure.
-    {"as df", 80, ":as%20df", url_parse::Component(1, 7), false},
-    {"-2", 80, ":-2", url_parse::Component(1, 2), false},
+    {"as df", 80, ":as%20df", Component(1, 7), false},
+    {"-2", 80, ":-2", Component(1, 2), false},
       // Default port should be omitted.
-    {"80", 80, "", url_parse::Component(0, -1), true},
-    {"8080", 80, ":8080", url_parse::Component(1, 4), true},
+    {"80", 80, "", Component(0, -1), true},
+    {"8080", 80, ":8080", Component(1, 4), true},
       // PORT_UNSPECIFIED should mean always keep the port.
-    {"80", url_parse::PORT_UNSPECIFIED, ":80", url_parse::Component(1, 2), true},
+    {"80", PORT_UNSPECIFIED, ":80", Component(1, 2), true},
   };
 
   for (size_t i = 0; i < ARRAYSIZE(port_cases); i++) {
     int url_len = static_cast<int>(strlen(port_cases[i].input));
-    url_parse::Component in_comp(0, url_len);
-    url_parse::Component out_comp;
+    Component in_comp(0, url_len);
+    Component out_comp;
     std::string out_str;
-    url_canon::StdStringCanonOutput output1(&out_str);
-    bool success = url_canon::CanonicalizePort(port_cases[i].input, in_comp,
-                                               port_cases[i].default_port,
-                                               &output1, &out_comp);
+    StdStringCanonOutput output1(&out_str);
+    bool success = CanonicalizePort(port_cases[i].input,
+                                    in_comp,
+                                    port_cases[i].default_port,
+                                    &output1,
+                                    &out_comp);
     output1.Complete();
 
     EXPECT_EQ(port_cases[i].expected_success, success);
@@ -1061,11 +1056,13 @@
 
     // Now try the wide version
     out_str.clear();
-    url_canon::StdStringCanonOutput output2(&out_str);
+    StdStringCanonOutput output2(&out_str);
     base::string16 wide_input(ConvertUTF8ToUTF16(port_cases[i].input));
-    success = url_canon::CanonicalizePort(wide_input.c_str(), in_comp,
-                                          port_cases[i].default_port,
-                                          &output2, &out_comp);
+    success = CanonicalizePort(wide_input.c_str(),
+                               in_comp,
+                               port_cases[i].default_port,
+                               &output2,
+                               &out_comp);
     output2.Complete();
 
     EXPECT_EQ(port_cases[i].expected_success, success);
@@ -1078,84 +1075,84 @@
 TEST(URLCanonTest, Path) {
   DualComponentCase path_cases[] = {
     // ----- path collapsing tests -----
-    {"/././foo", L"/././foo", "/foo", url_parse::Component(0, 4), true},
-    {"/./.foo", L"/./.foo", "/.foo", url_parse::Component(0, 5), true},
-    {"/foo/.", L"/foo/.", "/foo/", url_parse::Component(0, 5), true},
-    {"/foo/./", L"/foo/./", "/foo/", url_parse::Component(0, 5), true},
+    {"/././foo", L"/././foo", "/foo", Component(0, 4), true},
+    {"/./.foo", L"/./.foo", "/.foo", Component(0, 5), true},
+    {"/foo/.", L"/foo/.", "/foo/", Component(0, 5), true},
+    {"/foo/./", L"/foo/./", "/foo/", Component(0, 5), true},
       // double dots followed by a slash or the end of the string count
-    {"/foo/bar/..", L"/foo/bar/..", "/foo/", url_parse::Component(0, 5), true},
-    {"/foo/bar/../", L"/foo/bar/../", "/foo/", url_parse::Component(0, 5), true},
+    {"/foo/bar/..", L"/foo/bar/..", "/foo/", Component(0, 5), true},
+    {"/foo/bar/../", L"/foo/bar/../", "/foo/", Component(0, 5), true},
       // don't count double dots when they aren't followed by a slash
-    {"/foo/..bar", L"/foo/..bar", "/foo/..bar", url_parse::Component(0, 10), true},
+    {"/foo/..bar", L"/foo/..bar", "/foo/..bar", Component(0, 10), true},
       // some in the middle
-    {"/foo/bar/../ton", L"/foo/bar/../ton", "/foo/ton", url_parse::Component(0, 8), true},
-    {"/foo/bar/../ton/../../a", L"/foo/bar/../ton/../../a", "/a", url_parse::Component(0, 2), true},
+    {"/foo/bar/../ton", L"/foo/bar/../ton", "/foo/ton", Component(0, 8), true},
+    {"/foo/bar/../ton/../../a", L"/foo/bar/../ton/../../a", "/a", Component(0, 2), true},
       // we should not be able to go above the root
-    {"/foo/../../..", L"/foo/../../..", "/", url_parse::Component(0, 1), true},
-    {"/foo/../../../ton", L"/foo/../../../ton", "/ton", url_parse::Component(0, 4), true},
+    {"/foo/../../..", L"/foo/../../..", "/", Component(0, 1), true},
+    {"/foo/../../../ton", L"/foo/../../../ton", "/ton", Component(0, 4), true},
       // escaped dots should be unescaped and treated the same as dots
-    {"/foo/%2e", L"/foo/%2e", "/foo/", url_parse::Component(0, 5), true},
-    {"/foo/%2e%2", L"/foo/%2e%2", "/foo/.%2", url_parse::Component(0, 8), true},
-    {"/foo/%2e./%2e%2e/.%2e/%2e.bar", L"/foo/%2e./%2e%2e/.%2e/%2e.bar", "/..bar", url_parse::Component(0, 6), true},
+    {"/foo/%2e", L"/foo/%2e", "/foo/", Component(0, 5), true},
+    {"/foo/%2e%2", L"/foo/%2e%2", "/foo/.%2", Component(0, 8), true},
+    {"/foo/%2e./%2e%2e/.%2e/%2e.bar", L"/foo/%2e./%2e%2e/.%2e/%2e.bar", "/..bar", Component(0, 6), true},
       // Multiple slashes in a row should be preserved and treated like empty
       // directory names.
-    {"////../..", L"////../..", "//", url_parse::Component(0, 2), true},
+    {"////../..", L"////../..", "//", Component(0, 2), true},
 
     // ----- escaping tests -----
-    {"/foo", L"/foo", "/foo", url_parse::Component(0, 4), true},
+    {"/foo", L"/foo", "/foo", Component(0, 4), true},
       // Valid escape sequence
-    {"/%20foo", L"/%20foo", "/%20foo", url_parse::Component(0, 7), true},
+    {"/%20foo", L"/%20foo", "/%20foo", Component(0, 7), true},
       // Invalid escape sequence we should pass through unchanged.
-    {"/foo%", L"/foo%", "/foo%", url_parse::Component(0, 5), true},
-    {"/foo%2", L"/foo%2", "/foo%2", url_parse::Component(0, 6), true},
+    {"/foo%", L"/foo%", "/foo%", Component(0, 5), true},
+    {"/foo%2", L"/foo%2", "/foo%2", Component(0, 6), true},
       // Invalid escape sequence: bad characters should be treated the same as
       // the sourrounding text, not as escaped (in this case, UTF-8).
-    {"/foo%2zbar", L"/foo%2zbar", "/foo%2zbar", url_parse::Component(0, 10), true},
-    {"/foo%2\xc2\xa9zbar", NULL, "/foo%2%C2%A9zbar", url_parse::Component(0, 16), true},
-    {NULL, L"/foo%2\xc2\xa9zbar", "/foo%2%C3%82%C2%A9zbar", url_parse::Component(0, 22), true},
+    {"/foo%2zbar", L"/foo%2zbar", "/foo%2zbar", Component(0, 10), true},
+    {"/foo%2\xc2\xa9zbar", NULL, "/foo%2%C2%A9zbar", Component(0, 16), true},
+    {NULL, L"/foo%2\xc2\xa9zbar", "/foo%2%C3%82%C2%A9zbar", Component(0, 22), true},
       // Regular characters that are escaped should be unescaped
-    {"/foo%41%7a", L"/foo%41%7a", "/fooAz", url_parse::Component(0, 6), true},
+    {"/foo%41%7a", L"/foo%41%7a", "/fooAz", Component(0, 6), true},
       // Funny characters that are unescaped should be escaped
-    {"/foo\x09\x91%91", NULL, "/foo%09%91%91", url_parse::Component(0, 13), true},
-    {NULL, L"/foo\x09\x91%91", "/foo%09%C2%91%91", url_parse::Component(0, 16), true},
+    {"/foo\x09\x91%91", NULL, "/foo%09%91%91", Component(0, 13), true},
+    {NULL, L"/foo\x09\x91%91", "/foo%09%C2%91%91", Component(0, 16), true},
       // Invalid characters that are escaped should cause a failure.
-    {"/foo%00%51", L"/foo%00%51", "/foo%00Q", url_parse::Component(0, 8), false},
+    {"/foo%00%51", L"/foo%00%51", "/foo%00Q", Component(0, 8), false},
       // Some characters should be passed through unchanged regardless of esc.
-    {"/(%28:%3A%29)", L"/(%28:%3A%29)", "/(%28:%3A%29)", url_parse::Component(0, 13), true},
+    {"/(%28:%3A%29)", L"/(%28:%3A%29)", "/(%28:%3A%29)", Component(0, 13), true},
       // Characters that are properly escaped should not have the case changed
       // of hex letters.
-    {"/%3A%3a%3C%3c", L"/%3A%3a%3C%3c", "/%3A%3a%3C%3c", url_parse::Component(0, 13), true},
+    {"/%3A%3a%3C%3c", L"/%3A%3a%3C%3c", "/%3A%3a%3C%3c", Component(0, 13), true},
       // Funny characters that are unescaped should be escaped
-    {"/foo\tbar", L"/foo\tbar", "/foo%09bar", url_parse::Component(0, 10), true},
+    {"/foo\tbar", L"/foo\tbar", "/foo%09bar", Component(0, 10), true},
       // Backslashes should get converted to forward slashes
-    {"\\foo\\bar", L"\\foo\\bar", "/foo/bar", url_parse::Component(0, 8), true},
+    {"\\foo\\bar", L"\\foo\\bar", "/foo/bar", Component(0, 8), true},
       // Hashes found in paths (possibly only when the caller explicitly sets
       // the path on an already-parsed URL) should be escaped.
-    {"/foo#bar", L"/foo#bar", "/foo%23bar", url_parse::Component(0, 10), true},
+    {"/foo#bar", L"/foo#bar", "/foo%23bar", Component(0, 10), true},
       // %7f should be allowed and %3D should not be unescaped (these were wrong
       // in a previous version).
-    {"/%7Ffp3%3Eju%3Dduvgw%3Dd", L"/%7Ffp3%3Eju%3Dduvgw%3Dd", "/%7Ffp3%3Eju%3Dduvgw%3Dd", url_parse::Component(0, 24), true},
+    {"/%7Ffp3%3Eju%3Dduvgw%3Dd", L"/%7Ffp3%3Eju%3Dduvgw%3Dd", "/%7Ffp3%3Eju%3Dduvgw%3Dd", Component(0, 24), true},
       // @ should be passed through unchanged (escaped or unescaped).
-    {"/@asdf%40", L"/@asdf%40", "/@asdf%40", url_parse::Component(0, 9), true},
+    {"/@asdf%40", L"/@asdf%40", "/@asdf%40", Component(0, 9), true},
 
     // ----- encoding tests -----
       // Basic conversions
-    {"/\xe4\xbd\xa0\xe5\xa5\xbd\xe4\xbd\xa0\xe5\xa5\xbd", L"/\x4f60\x597d\x4f60\x597d", "/%E4%BD%A0%E5%A5%BD%E4%BD%A0%E5%A5%BD", url_parse::Component(0, 37), true},
+    {"/\xe4\xbd\xa0\xe5\xa5\xbd\xe4\xbd\xa0\xe5\xa5\xbd", L"/\x4f60\x597d\x4f60\x597d", "/%E4%BD%A0%E5%A5%BD%E4%BD%A0%E5%A5%BD", Component(0, 37), true},
       // Invalid unicode characters should fail. We only do validation on
       // UTF-16 input, so this doesn't happen on 8-bit.
-    {"/\xef\xb7\x90zyx", NULL, "/%EF%B7%90zyx", url_parse::Component(0, 13), true},
-    {NULL, L"/\xfdd0zyx", "/%EF%BF%BDzyx", url_parse::Component(0, 13), false},
+    {"/\xef\xb7\x90zyx", NULL, "/%EF%B7%90zyx", Component(0, 13), true},
+    {NULL, L"/\xfdd0zyx", "/%EF%BF%BDzyx", Component(0, 13), false},
   };
 
   for (size_t i = 0; i < arraysize(path_cases); i++) {
     if (path_cases[i].input8) {
       int len = static_cast<int>(strlen(path_cases[i].input8));
-      url_parse::Component in_comp(0, len);
-      url_parse::Component out_comp;
+      Component in_comp(0, len);
+      Component out_comp;
       std::string out_str;
-      url_canon::StdStringCanonOutput output(&out_str);
-      bool success = url_canon::CanonicalizePath(path_cases[i].input8, in_comp,
-                                                 &output, &out_comp);
+      StdStringCanonOutput output(&out_str);
+      bool success =
+          CanonicalizePath(path_cases[i].input8, in_comp, &output, &out_comp);
       output.Complete();
 
       EXPECT_EQ(path_cases[i].expected_success, success);
@@ -1167,13 +1164,13 @@
     if (path_cases[i].input16) {
       base::string16 input16(WStringToUTF16(path_cases[i].input16));
       int len = static_cast<int>(input16.length());
-      url_parse::Component in_comp(0, len);
-      url_parse::Component out_comp;
+      Component in_comp(0, len);
+      Component out_comp;
       std::string out_str;
-      url_canon::StdStringCanonOutput output(&out_str);
+      StdStringCanonOutput output(&out_str);
 
-      bool success = url_canon::CanonicalizePath(input16.c_str(), in_comp,
-                                                 &output, &out_comp);
+      bool success =
+          CanonicalizePath(input16.c_str(), in_comp, &output, &out_comp);
       output.Complete();
 
       EXPECT_EQ(path_cases[i].expected_success, success);
@@ -1186,13 +1183,12 @@
   // Manual test: embedded NULLs should be escaped and the URL should be marked
   // as invalid.
   const char path_with_null[] = "/ab\0c";
-  url_parse::Component in_comp(0, 5);
-  url_parse::Component out_comp;
+  Component in_comp(0, 5);
+  Component out_comp;
 
   std::string out_str;
-  url_canon::StdStringCanonOutput output(&out_str);
-  bool success = url_canon::CanonicalizePath(path_with_null, in_comp,
-                                             &output, &out_comp);
+  StdStringCanonOutput output(&out_str);
+  bool success = CanonicalizePath(path_with_null, in_comp, &output, &out_comp);
   output.Complete();
   EXPECT_FALSE(success);
   EXPECT_EQ("/ab%00c", out_str);
@@ -1235,25 +1231,25 @@
   };
 
   for (size_t i = 0; i < ARRAYSIZE(query_cases); i++) {
-    url_parse::Component out_comp;
+    Component out_comp;
 
     UConvScoper conv(query_cases[i].encoding);
     ASSERT_TRUE(!query_cases[i].encoding || conv.converter());
-    url_canon::ICUCharsetConverter converter(conv.converter());
+    ICUCharsetConverter converter(conv.converter());
 
     // Map NULL to a NULL converter pointer.
-    url_canon::ICUCharsetConverter* conv_pointer = &converter;
+    ICUCharsetConverter* conv_pointer = &converter;
     if (!query_cases[i].encoding)
       conv_pointer = NULL;
 
     if (query_cases[i].input8) {
       int len = static_cast<int>(strlen(query_cases[i].input8));
-      url_parse::Component in_comp(0, len);
+      Component in_comp(0, len);
       std::string out_str;
 
-      url_canon::StdStringCanonOutput output(&out_str);
-      url_canon::CanonicalizeQuery(query_cases[i].input8, in_comp,
-                                   conv_pointer, &output, &out_comp);
+      StdStringCanonOutput output(&out_str);
+      CanonicalizeQuery(query_cases[i].input8, in_comp, conv_pointer, &output,
+                        &out_comp);
       output.Complete();
 
       EXPECT_EQ(query_cases[i].expected, out_str);
@@ -1262,12 +1258,12 @@
     if (query_cases[i].input16) {
       base::string16 input16(WStringToUTF16(query_cases[i].input16));
       int len = static_cast<int>(input16.length());
-      url_parse::Component in_comp(0, len);
+      Component in_comp(0, len);
       std::string out_str;
 
-      url_canon::StdStringCanonOutput output(&out_str);
-      url_canon::CanonicalizeQuery(input16.c_str(), in_comp,
-                                   conv_pointer, &output, &out_comp);
+      StdStringCanonOutput output(&out_str);
+      CanonicalizeQuery(input16.c_str(), in_comp, conv_pointer, &output,
+                        &out_comp);
       output.Complete();
 
       EXPECT_EQ(query_cases[i].expected, out_str);
@@ -1276,10 +1272,9 @@
 
   // Extra test for input with embedded NULL;
   std::string out_str;
-  url_canon::StdStringCanonOutput output(&out_str);
-  url_parse::Component out_comp;
-  url_canon::CanonicalizeQuery("a \x00z\x01", url_parse::Component(0, 5), NULL,
-                               &output, &out_comp);
+  StdStringCanonOutput output(&out_str);
+  Component out_comp;
+  CanonicalizeQuery("a \x00z\x01", Component(0, 5), NULL, &output, &out_comp);
   output.Complete();
   EXPECT_EQ("?a%20%00z%01", out_str);
 }
@@ -1288,34 +1283,33 @@
   // Refs are trivial, it just checks the encoding.
   DualComponentCase ref_cases[] = {
       // Regular one, we shouldn't escape spaces, et al.
-    {"hello, world", L"hello, world", "#hello, world", url_parse::Component(1, 12), true},
+    {"hello, world", L"hello, world", "#hello, world", Component(1, 12), true},
       // UTF-8/wide input should be preserved
-    {"\xc2\xa9", L"\xa9", "#\xc2\xa9", url_parse::Component(1, 2), true},
+    {"\xc2\xa9", L"\xa9", "#\xc2\xa9", Component(1, 2), true},
       // Test a characer that takes > 16 bits (U+10300 = old italic letter A)
-    {"\xF0\x90\x8C\x80ss", L"\xd800\xdf00ss", "#\xF0\x90\x8C\x80ss", url_parse::Component(1, 6), true},
+    {"\xF0\x90\x8C\x80ss", L"\xd800\xdf00ss", "#\xF0\x90\x8C\x80ss", Component(1, 6), true},
       // Escaping should be preserved unchanged, even invalid ones
-    {"%41%a", L"%41%a", "#%41%a", url_parse::Component(1, 5), true},
+    {"%41%a", L"%41%a", "#%41%a", Component(1, 5), true},
       // Invalid UTF-8/16 input should be flagged and the input made valid
-    {"\xc2", NULL, "#\xef\xbf\xbd", url_parse::Component(1, 3), true},
-    {NULL, L"\xd800\x597d", "#\xef\xbf\xbd\xe5\xa5\xbd", url_parse::Component(1, 6), true},
+    {"\xc2", NULL, "#\xef\xbf\xbd", Component(1, 3), true},
+    {NULL, L"\xd800\x597d", "#\xef\xbf\xbd\xe5\xa5\xbd", Component(1, 6), true},
       // Test a Unicode invalid character.
-    {"a\xef\xb7\x90", L"a\xfdd0", "#a\xef\xbf\xbd", url_parse::Component(1, 4), true},
+    {"a\xef\xb7\x90", L"a\xfdd0", "#a\xef\xbf\xbd", Component(1, 4), true},
       // Refs can have # signs and we should preserve them.
-    {"asdf#qwer", L"asdf#qwer", "#asdf#qwer", url_parse::Component(1, 9), true},
-    {"#asdf", L"#asdf", "##asdf", url_parse::Component(1, 5), true},
+    {"asdf#qwer", L"asdf#qwer", "#asdf#qwer", Component(1, 9), true},
+    {"#asdf", L"#asdf", "##asdf", Component(1, 5), true},
   };
 
   for (size_t i = 0; i < arraysize(ref_cases); i++) {
     // 8-bit input
     if (ref_cases[i].input8) {
       int len = static_cast<int>(strlen(ref_cases[i].input8));
-      url_parse::Component in_comp(0, len);
-      url_parse::Component out_comp;
+      Component in_comp(0, len);
+      Component out_comp;
 
       std::string out_str;
-      url_canon::StdStringCanonOutput output(&out_str);
-      url_canon::CanonicalizeRef(ref_cases[i].input8, in_comp,
-                                 &output, &out_comp);
+      StdStringCanonOutput output(&out_str);
+      CanonicalizeRef(ref_cases[i].input8, in_comp, &output, &out_comp);
       output.Complete();
 
       EXPECT_EQ(ref_cases[i].expected_component.begin, out_comp.begin);
@@ -1327,12 +1321,12 @@
     if (ref_cases[i].input16) {
       base::string16 input16(WStringToUTF16(ref_cases[i].input16));
       int len = static_cast<int>(input16.length());
-      url_parse::Component in_comp(0, len);
-      url_parse::Component out_comp;
+      Component in_comp(0, len);
+      Component out_comp;
 
       std::string out_str;
-      url_canon::StdStringCanonOutput output(&out_str);
-      url_canon::CanonicalizeRef(input16.c_str(), in_comp, &output, &out_comp);
+      StdStringCanonOutput output(&out_str);
+      CanonicalizeRef(input16.c_str(), in_comp, &output, &out_comp);
       output.Complete();
 
       EXPECT_EQ(ref_cases[i].expected_component.begin, out_comp.begin);
@@ -1343,13 +1337,12 @@
 
   // Try one with an embedded NULL. It should be stripped.
   const char null_input[5] = "ab\x00z";
-  url_parse::Component null_input_component(0, 4);
-  url_parse::Component out_comp;
+  Component null_input_component(0, 4);
+  Component out_comp;
 
   std::string out_str;
-  url_canon::StdStringCanonOutput output(&out_str);
-  url_canon::CanonicalizeRef(null_input, null_input_component,
-                             &output, &out_comp);
+  StdStringCanonOutput output(&out_str);
+  CanonicalizeRef(null_input, null_input_component, &output, &out_comp);
   output.Complete();
 
   EXPECT_EQ(1, out_comp.begin);
@@ -1406,13 +1399,13 @@
 
   for (size_t i = 0; i < ARRAYSIZE(cases); i++) {
     int url_len = static_cast<int>(strlen(cases[i].input));
-    url_parse::Parsed parsed;
-    url_parse::ParseStandardURL(cases[i].input, url_len, &parsed);
+    Parsed parsed;
+    ParseStandardURL(cases[i].input, url_len, &parsed);
 
-    url_parse::Parsed out_parsed;
+    Parsed out_parsed;
     std::string out_str;
-    url_canon::StdStringCanonOutput output(&out_str);
-    bool success = url_canon::CanonicalizeStandardURL(
+    StdStringCanonOutput output(&out_str);
+    bool success = CanonicalizeStandardURL(
         cases[i].input, url_len, parsed, NULL, &output, &out_parsed);
     output.Complete();
 
@@ -1439,11 +1432,11 @@
   for (size_t i = 0; i < arraysize(replace_cases); i++) {
     const ReplaceCase& cur = replace_cases[i];
     int base_len = static_cast<int>(strlen(cur.base));
-    url_parse::Parsed parsed;
-    url_parse::ParseStandardURL(cur.base, base_len, &parsed);
+    Parsed parsed;
+    ParseStandardURL(cur.base, base_len, &parsed);
 
-    url_canon::Replacements<char> r;
-    typedef url_canon::Replacements<char> R;  // Clean up syntax.
+    Replacements<char> r;
+    typedef Replacements<char> R;  // Clean up syntax.
 
     // Note that for the scheme we pass in a different clear function since
     // there is no function to clear the scheme.
@@ -1457,10 +1450,10 @@
     SetupReplComp(&R::SetRef, &R::ClearRef, &r, cur.ref);
 
     std::string out_str;
-    url_canon::StdStringCanonOutput output(&out_str);
-    url_parse::Parsed out_parsed;
-    url_canon::ReplaceStandardURL(replace_cases[i].base, parsed,
-                                  r, NULL, &output, &out_parsed);
+    StdStringCanonOutput output(&out_str);
+    Parsed out_parsed;
+    ReplaceStandardURL(replace_cases[i].base, parsed, r, NULL, &output,
+                       &out_parsed);
     output.Complete();
 
     EXPECT_EQ(replace_cases[i].expected, out_str);
@@ -1471,25 +1464,25 @@
     const char src[] = "http://www.google.com/here_is_the_path";
     int src_len = static_cast<int>(strlen(src));
 
-    url_parse::Parsed parsed;
-    url_parse::ParseStandardURL(src, src_len, &parsed);
+    Parsed parsed;
+    ParseStandardURL(src, src_len, &parsed);
 
     // Replace the path to 0 length string. By using 1 as the string address,
     // the test should get an access violation if it tries to dereference it.
-    url_canon::Replacements<char> r;
-    r.SetPath(reinterpret_cast<char*>(0x00000001), url_parse::Component(0, 0));
+    Replacements<char> r;
+    r.SetPath(reinterpret_cast<char*>(0x00000001), Component(0, 0));
     std::string out_str1;
-    url_canon::StdStringCanonOutput output1(&out_str1);
-    url_parse::Parsed new_parsed;
-    url_canon::ReplaceStandardURL(src, parsed, r, NULL, &output1, &new_parsed);
+    StdStringCanonOutput output1(&out_str1);
+    Parsed new_parsed;
+    ReplaceStandardURL(src, parsed, r, NULL, &output1, &new_parsed);
     output1.Complete();
     EXPECT_STREQ("http://www.google.com/", out_str1.c_str());
 
     // Same with an "invalid" path.
-    r.SetPath(reinterpret_cast<char*>(0x00000001), url_parse::Component());
+    r.SetPath(reinterpret_cast<char*>(0x00000001), Component());
     std::string out_str2;
-    url_canon::StdStringCanonOutput output2(&out_str2);
-    url_canon::ReplaceStandardURL(src, parsed, r, NULL, &output2, &new_parsed);
+    StdStringCanonOutput output2(&out_str2);
+    ReplaceStandardURL(src, parsed, r, NULL, &output2, &new_parsed);
     output2.Complete();
     EXPECT_STREQ("http://www.google.com/", out_str2.c_str());
   }
@@ -1517,11 +1510,11 @@
   for (size_t i = 0; i < arraysize(replace_cases); i++) {
     const ReplaceCase& cur = replace_cases[i];
     int base_len = static_cast<int>(strlen(cur.base));
-    url_parse::Parsed parsed;
-    url_parse::ParseFileURL(cur.base, base_len, &parsed);
+    Parsed parsed;
+    ParseFileURL(cur.base, base_len, &parsed);
 
-    url_canon::Replacements<char> r;
-    typedef url_canon::Replacements<char> R;  // Clean up syntax.
+    Replacements<char> r;
+    typedef Replacements<char> R;  // Clean up syntax.
     SetupReplComp(&R::SetScheme, &R::ClearRef, &r, cur.scheme);
     SetupReplComp(&R::SetUsername, &R::ClearUsername, &r, cur.username);
     SetupReplComp(&R::SetPassword, &R::ClearPassword, &r, cur.password);
@@ -1532,10 +1525,9 @@
     SetupReplComp(&R::SetRef, &R::ClearRef, &r, cur.ref);
 
     std::string out_str;
-    url_canon::StdStringCanonOutput output(&out_str);
-    url_parse::Parsed out_parsed;
-    url_canon::ReplaceFileURL(cur.base, parsed,
-                              r, NULL, &output, &out_parsed);
+    StdStringCanonOutput output(&out_str);
+    Parsed out_parsed;
+    ReplaceFileURL(cur.base, parsed, r, NULL, &output, &out_parsed);
     output.Complete();
 
     EXPECT_EQ(replace_cases[i].expected, out_str);
@@ -1568,11 +1560,11 @@
   for (size_t i = 0; i < arraysize(replace_cases); i++) {
     const ReplaceCase& cur = replace_cases[i];
     int base_len = static_cast<int>(strlen(cur.base));
-    url_parse::Parsed parsed;
-    url_parse::ParseFileSystemURL(cur.base, base_len, &parsed);
+    Parsed parsed;
+    ParseFileSystemURL(cur.base, base_len, &parsed);
 
-    url_canon::Replacements<char> r;
-    typedef url_canon::Replacements<char> R;  // Clean up syntax.
+    Replacements<char> r;
+    typedef Replacements<char> R;  // Clean up syntax.
     SetupReplComp(&R::SetScheme, &R::ClearRef, &r, cur.scheme);
     SetupReplComp(&R::SetUsername, &R::ClearUsername, &r, cur.username);
     SetupReplComp(&R::SetPassword, &R::ClearPassword, &r, cur.password);
@@ -1583,10 +1575,9 @@
     SetupReplComp(&R::SetRef, &R::ClearRef, &r, cur.ref);
 
     std::string out_str;
-    url_canon::StdStringCanonOutput output(&out_str);
-    url_parse::Parsed out_parsed;
-    url_canon::ReplaceFileSystemURL(cur.base, parsed, r, NULL,
-                                    &output, &out_parsed);
+    StdStringCanonOutput output(&out_str);
+    Parsed out_parsed;
+    ReplaceFileSystemURL(cur.base, parsed, r, NULL, &output, &out_parsed);
     output.Complete();
 
     EXPECT_EQ(replace_cases[i].expected, out_str);
@@ -1608,11 +1599,11 @@
   for (size_t i = 0; i < arraysize(replace_cases); i++) {
     const ReplaceCase& cur = replace_cases[i];
     int base_len = static_cast<int>(strlen(cur.base));
-    url_parse::Parsed parsed;
-    url_parse::ParsePathURL(cur.base, base_len, false, &parsed);
+    Parsed parsed;
+    ParsePathURL(cur.base, base_len, false, &parsed);
 
-    url_canon::Replacements<char> r;
-    typedef url_canon::Replacements<char> R;  // Clean up syntax.
+    Replacements<char> r;
+    typedef Replacements<char> R;  // Clean up syntax.
     SetupReplComp(&R::SetScheme, &R::ClearRef, &r, cur.scheme);
     SetupReplComp(&R::SetUsername, &R::ClearUsername, &r, cur.username);
     SetupReplComp(&R::SetPassword, &R::ClearPassword, &r, cur.password);
@@ -1623,10 +1614,9 @@
     SetupReplComp(&R::SetRef, &R::ClearRef, &r, cur.ref);
 
     std::string out_str;
-    url_canon::StdStringCanonOutput output(&out_str);
-    url_parse::Parsed out_parsed;
-    url_canon::ReplacePathURL(cur.base, parsed,
-                              r, &output, &out_parsed);
+    StdStringCanonOutput output(&out_str);
+    Parsed out_parsed;
+    ReplacePathURL(cur.base, parsed, r, &output, &out_parsed);
     output.Complete();
 
     EXPECT_EQ(replace_cases[i].expected, out_str);
@@ -1660,11 +1650,11 @@
   for (size_t i = 0; i < arraysize(replace_cases); i++) {
     const ReplaceCase& cur = replace_cases[i];
     int base_len = static_cast<int>(strlen(cur.base));
-    url_parse::Parsed parsed;
-    url_parse::ParseMailtoURL(cur.base, base_len, &parsed);
+    Parsed parsed;
+    ParseMailtoURL(cur.base, base_len, &parsed);
 
-    url_canon::Replacements<char> r;
-    typedef url_canon::Replacements<char> R;
+    Replacements<char> r;
+    typedef Replacements<char> R;
     SetupReplComp(&R::SetScheme, &R::ClearRef, &r, cur.scheme);
     SetupReplComp(&R::SetUsername, &R::ClearUsername, &r, cur.username);
     SetupReplComp(&R::SetPassword, &R::ClearPassword, &r, cur.password);
@@ -1675,10 +1665,9 @@
     SetupReplComp(&R::SetRef, &R::ClearRef, &r, cur.ref);
 
     std::string out_str;
-    url_canon::StdStringCanonOutput output(&out_str);
-    url_parse::Parsed out_parsed;
-    url_canon::ReplaceMailtoURL(cur.base, parsed,
-                                r, &output, &out_parsed);
+    StdStringCanonOutput output(&out_str);
+    Parsed out_parsed;
+    ReplaceMailtoURL(cur.base, parsed, r, &output, &out_parsed);
     output.Complete();
 
     EXPECT_EQ(replace_cases[i].expected, out_str);
@@ -1690,74 +1679,73 @@
     const char* input;
     const char* expected;
     bool expected_success;
-    url_parse::Component expected_host;
-    url_parse::Component expected_path;
+    Component expected_host;
+    Component expected_path;
   } cases[] = {
 #ifdef _WIN32
       // Windows-style paths
-    {"file:c:\\foo\\bar.html", "file:///C:/foo/bar.html", true, url_parse::Component(), url_parse::Component(7, 16)},
-    {"  File:c|////foo\\bar.html", "file:///C:////foo/bar.html", true, url_parse::Component(), url_parse::Component(7, 19)},
-    {"file:", "file:///", true, url_parse::Component(), url_parse::Component(7, 1)},
-    {"file:UNChost/path", "file://unchost/path", true, url_parse::Component(7, 7), url_parse::Component(14, 5)},
+    {"file:c:\\foo\\bar.html", "file:///C:/foo/bar.html", true, Component(), Component(7, 16)},
+    {"  File:c|////foo\\bar.html", "file:///C:////foo/bar.html", true, Component(), Component(7, 19)},
+    {"file:", "file:///", true, Component(), Component(7, 1)},
+    {"file:UNChost/path", "file://unchost/path", true, Component(7, 7), Component(14, 5)},
       // CanonicalizeFileURL supports absolute Windows style paths for IE
       // compatability. Note that the caller must decide that this is a file
       // URL itself so it can call the file canonicalizer. This is usually
       // done automatically as part of relative URL resolving.
-    {"c:\\foo\\bar", "file:///C:/foo/bar", true, url_parse::Component(), url_parse::Component(7, 11)},
-    {"C|/foo/bar", "file:///C:/foo/bar", true, url_parse::Component(), url_parse::Component(7, 11)},
-    {"/C|\\foo\\bar", "file:///C:/foo/bar", true, url_parse::Component(), url_parse::Component(7, 11)},
-    {"//C|/foo/bar", "file:///C:/foo/bar", true, url_parse::Component(), url_parse::Component(7, 11)},
-    {"//server/file", "file://server/file", true, url_parse::Component(7, 6), url_parse::Component(13, 5)},
-    {"\\\\server\\file", "file://server/file", true, url_parse::Component(7, 6), url_parse::Component(13, 5)},
-    {"/\\server/file", "file://server/file", true, url_parse::Component(7, 6), url_parse::Component(13, 5)},
+    {"c:\\foo\\bar", "file:///C:/foo/bar", true, Component(), Component(7, 11)},
+    {"C|/foo/bar", "file:///C:/foo/bar", true, Component(), Component(7, 11)},
+    {"/C|\\foo\\bar", "file:///C:/foo/bar", true, Component(), Component(7, 11)},
+    {"//C|/foo/bar", "file:///C:/foo/bar", true, Component(), Component(7, 11)},
+    {"//server/file", "file://server/file", true, Component(7, 6), Component(13, 5)},
+    {"\\\\server\\file", "file://server/file", true, Component(7, 6), Component(13, 5)},
+    {"/\\server/file", "file://server/file", true, Component(7, 6), Component(13, 5)},
       // We should preserve the number of slashes after the colon for IE
       // compatability, except when there is none, in which case we should
       // add one.
-    {"file:c:foo/bar.html", "file:///C:/foo/bar.html", true, url_parse::Component(), url_parse::Component(7, 16)},
-    {"file:/\\/\\C:\\\\//foo\\bar.html", "file:///C:////foo/bar.html", true, url_parse::Component(), url_parse::Component(7, 19)},
+    {"file:c:foo/bar.html", "file:///C:/foo/bar.html", true, Component(), Component(7, 16)},
+    {"file:/\\/\\C:\\\\//foo\\bar.html", "file:///C:////foo/bar.html", true, Component(), Component(7, 19)},
       // Three slashes should be non-UNC, even if there is no drive spec (IE
       // does this, which makes the resulting request invalid).
-    {"file:///foo/bar.txt", "file:///foo/bar.txt", true, url_parse::Component(), url_parse::Component(7, 12)},
+    {"file:///foo/bar.txt", "file:///foo/bar.txt", true, Component(), Component(7, 12)},
       // TODO(brettw) we should probably fail for invalid host names, which
       // would change the expected result on this test. We also currently allow
       // colon even though it's probably invalid, because its currently the
       // "natural" result of the way the canonicalizer is written. There doesn't
       // seem to be a strong argument for why allowing it here would be bad, so
       // we just tolerate it and the load will fail later.
-    {"FILE:/\\/\\7:\\\\//foo\\bar.html", "file://7:////foo/bar.html", false, url_parse::Component(7, 2), url_parse::Component(9, 16)},
-    {"file:filer/home\\me", "file://filer/home/me", true, url_parse::Component(7, 5), url_parse::Component(12, 8)},
+    {"FILE:/\\/\\7:\\\\//foo\\bar.html", "file://7:////foo/bar.html", false, Component(7, 2), Component(9, 16)},
+    {"file:filer/home\\me", "file://filer/home/me", true, Component(7, 5), Component(12, 8)},
       // Make sure relative paths can't go above the "C:"
-    {"file:///C:/foo/../../../bar.html", "file:///C:/bar.html", true, url_parse::Component(), url_parse::Component(7, 12)},
+    {"file:///C:/foo/../../../bar.html", "file:///C:/bar.html", true, Component(), Component(7, 12)},
       // Busted refs shouldn't make the whole thing fail.
-    {"file:///C:/asdf#\xc2", "file:///C:/asdf#\xef\xbf\xbd", true, url_parse::Component(), url_parse::Component(7, 8)},
+    {"file:///C:/asdf#\xc2", "file:///C:/asdf#\xef\xbf\xbd", true, Component(), Component(7, 8)},
 #else
       // Unix-style paths
-    {"file:///home/me", "file:///home/me", true, url_parse::Component(), url_parse::Component(7, 8)},
+    {"file:///home/me", "file:///home/me", true, Component(), Component(7, 8)},
       // Windowsy ones should get still treated as Unix-style.
-    {"file:c:\\foo\\bar.html", "file:///c:/foo/bar.html", true, url_parse::Component(), url_parse::Component(7, 16)},
-    {"file:c|//foo\\bar.html", "file:///c%7C//foo/bar.html", true, url_parse::Component(), url_parse::Component(7, 19)},
+    {"file:c:\\foo\\bar.html", "file:///c:/foo/bar.html", true, Component(), Component(7, 16)},
+    {"file:c|//foo\\bar.html", "file:///c%7C//foo/bar.html", true, Component(), Component(7, 19)},
       // file: tests from WebKit (LayoutTests/fast/loader/url-parse-1.html)
-    {"//", "file:///", true, url_parse::Component(), url_parse::Component(7, 1)},
-    {"///", "file:///", true, url_parse::Component(), url_parse::Component(7, 1)},
-    {"///test", "file:///test", true, url_parse::Component(), url_parse::Component(7, 5)},
-    {"file://test", "file://test/", true, url_parse::Component(7, 4), url_parse::Component(11, 1)},
-    {"file://localhost",  "file://localhost/", true, url_parse::Component(7, 9), url_parse::Component(16, 1)},
-    {"file://localhost/", "file://localhost/", true, url_parse::Component(7, 9), url_parse::Component(16, 1)},
-    {"file://localhost/test", "file://localhost/test", true, url_parse::Component(7, 9), url_parse::Component(16, 5)},
+    {"//", "file:///", true, Component(), Component(7, 1)},
+    {"///", "file:///", true, Component(), Component(7, 1)},
+    {"///test", "file:///test", true, Component(), Component(7, 5)},
+    {"file://test", "file://test/", true, Component(7, 4), Component(11, 1)},
+    {"file://localhost",  "file://localhost/", true, Component(7, 9), Component(16, 1)},
+    {"file://localhost/", "file://localhost/", true, Component(7, 9), Component(16, 1)},
+    {"file://localhost/test", "file://localhost/test", true, Component(7, 9), Component(16, 5)},
 #endif  // _WIN32
   };
 
   for (size_t i = 0; i < ARRAYSIZE(cases); i++) {
     int url_len = static_cast<int>(strlen(cases[i].input));
-    url_parse::Parsed parsed;
-    url_parse::ParseFileURL(cases[i].input, url_len, &parsed);
+    Parsed parsed;
+    ParseFileURL(cases[i].input, url_len, &parsed);
 
-    url_parse::Parsed out_parsed;
+    Parsed out_parsed;
     std::string out_str;
-    url_canon::StdStringCanonOutput output(&out_str);
-    bool success = url_canon::CanonicalizeFileURL(cases[i].input, url_len,
-                                                  parsed, NULL, &output,
-                                                  &out_parsed);
+    StdStringCanonOutput output(&out_str);
+    bool success = CanonicalizeFileURL(cases[i].input, url_len, parsed, NULL,
+                                       &output, &out_parsed);
     output.Complete();
 
     EXPECT_EQ(cases[i].expected_success, success);
@@ -1793,15 +1781,14 @@
 
   for (size_t i = 0; i < ARRAYSIZE(cases); i++) {
     int url_len = static_cast<int>(strlen(cases[i].input));
-    url_parse::Parsed parsed;
-    url_parse::ParseFileSystemURL(cases[i].input, url_len, &parsed);
+    Parsed parsed;
+    ParseFileSystemURL(cases[i].input, url_len, &parsed);
 
-    url_parse::Parsed out_parsed;
+    Parsed out_parsed;
     std::string out_str;
-    url_canon::StdStringCanonOutput output(&out_str);
-    bool success = url_canon::CanonicalizeFileSystemURL(cases[i].input, url_len,
-                                                        parsed, NULL, &output,
-                                                        &out_parsed);
+    StdStringCanonOutput output(&out_str);
+    bool success = CanonicalizeFileSystemURL(cases[i].input, url_len, parsed,
+                                             NULL, &output, &out_parsed);
     output.Complete();
 
     EXPECT_EQ(cases[i].expected_success, success);
@@ -1829,15 +1816,14 @@
 
   for (size_t i = 0; i < ARRAYSIZE(path_cases); i++) {
     int url_len = static_cast<int>(strlen(path_cases[i].input));
-    url_parse::Parsed parsed;
-    url_parse::ParsePathURL(path_cases[i].input, url_len, true, &parsed);
+    Parsed parsed;
+    ParsePathURL(path_cases[i].input, url_len, true, &parsed);
 
-    url_parse::Parsed out_parsed;
+    Parsed out_parsed;
     std::string out_str;
-    url_canon::StdStringCanonOutput output(&out_str);
-    bool success = url_canon::CanonicalizePathURL(path_cases[i].input, url_len,
-                                                  parsed, &output,
-                                                  &out_parsed);
+    StdStringCanonOutput output(&out_str);
+    bool success = CanonicalizePathURL(path_cases[i].input, url_len, parsed,
+                                       &output, &out_parsed);
     output.Complete();
 
     EXPECT_TRUE(success);
@@ -1859,28 +1845,28 @@
     const char* input;
     const char* expected;
     bool expected_success;
-    url_parse::Component expected_path;
-    url_parse::Component expected_query;
+    Component expected_path;
+    Component expected_query;
   } cases[] = {
-    {"mailto:addr1", "mailto:addr1", true, url_parse::Component(7, 5), url_parse::Component()},
-    {"mailto:addr1@foo.com", "mailto:addr1@foo.com", true, url_parse::Component(7, 13), url_parse::Component()},
+    {"mailto:addr1", "mailto:addr1", true, Component(7, 5), Component()},
+    {"mailto:addr1@foo.com", "mailto:addr1@foo.com", true, Component(7, 13), Component()},
     // Trailing whitespace is stripped.
-    {"MaIlTo:addr1 \t ", "mailto:addr1", true, url_parse::Component(7, 5), url_parse::Component()},
-    {"MaIlTo:addr1?to=jon", "mailto:addr1?to=jon", true, url_parse::Component(7, 5), url_parse::Component(13,6)},
-    {"mailto:addr1,addr2", "mailto:addr1,addr2", true, url_parse::Component(7, 11), url_parse::Component()},
-    {"mailto:addr1, addr2", "mailto:addr1, addr2", true, url_parse::Component(7, 12), url_parse::Component()},
-    {"mailto:addr1%2caddr2", "mailto:addr1%2caddr2", true, url_parse::Component(7, 13), url_parse::Component()},
-    {"mailto:\xF0\x90\x8C\x80", "mailto:%F0%90%8C%80", true, url_parse::Component(7, 12), url_parse::Component()},
+    {"MaIlTo:addr1 \t ", "mailto:addr1", true, Component(7, 5), Component()},
+    {"MaIlTo:addr1?to=jon", "mailto:addr1?to=jon", true, Component(7, 5), Component(13,6)},
+    {"mailto:addr1,addr2", "mailto:addr1,addr2", true, Component(7, 11), Component()},
+    {"mailto:addr1, addr2", "mailto:addr1, addr2", true, Component(7, 12), Component()},
+    {"mailto:addr1%2caddr2", "mailto:addr1%2caddr2", true, Component(7, 13), Component()},
+    {"mailto:\xF0\x90\x8C\x80", "mailto:%F0%90%8C%80", true, Component(7, 12), Component()},
     // Null character should be escaped to %00
-    {"mailto:addr1\0addr2?foo", "mailto:addr1%00addr2?foo", true, url_parse::Component(7, 13), url_parse::Component(21, 3)},
+    {"mailto:addr1\0addr2?foo", "mailto:addr1%00addr2?foo", true, Component(7, 13), Component(21, 3)},
     // Invalid -- UTF-8 encoded surrogate value.
-    {"mailto:\xed\xa0\x80", "mailto:%EF%BF%BD", false, url_parse::Component(7, 9), url_parse::Component()},
-    {"mailto:addr1?", "mailto:addr1?", true, url_parse::Component(7, 5), url_parse::Component(13, 0)},
+    {"mailto:\xed\xa0\x80", "mailto:%EF%BF%BD", false, Component(7, 9), Component()},
+    {"mailto:addr1?", "mailto:addr1?", true, Component(7, 5), Component(13, 0)},
   };
 
   // Define outside of loop to catch bugs where components aren't reset
-  url_parse::Parsed parsed;
-  url_parse::Parsed out_parsed;
+  Parsed parsed;
+  Parsed out_parsed;
 
   for (size_t i = 0; i < ARRAYSIZE(cases); i++) {
     int url_len = static_cast<int>(strlen(cases[i].input));
@@ -1889,13 +1875,12 @@
       // as the string terminator.
       url_len = 22;
     }
-    url_parse::ParseMailtoURL(cases[i].input, url_len, &parsed);
+    ParseMailtoURL(cases[i].input, url_len, &parsed);
 
     std::string out_str;
-    url_canon::StdStringCanonOutput output(&out_str);
-    bool success = url_canon::CanonicalizeMailtoURL(cases[i].input, url_len,
-                                                    parsed, &output,
-                                                    &out_parsed);
+    StdStringCanonOutput output(&out_str);
+    bool success = CanonicalizeMailtoURL(cases[i].input, url_len, parsed,
+                                         &output, &out_parsed);
     output.Complete();
 
     EXPECT_EQ(cases[i].expected_success, success);
@@ -1921,35 +1906,35 @@
   // _itoa_s about, and ensure that the extra byte is untouched.
   char buf[6];
   memset(buf, 0xff, sizeof(buf));
-  EXPECT_EQ(0, url_canon::_itoa_s(12, buf, sizeof(buf) - 1, 10));
+  EXPECT_EQ(0, _itoa_s(12, buf, sizeof(buf) - 1, 10));
   EXPECT_STREQ("12", buf);
   EXPECT_EQ('\xFF', buf[3]);
 
   // Test the edge cases - exactly the buffer size and one over
   memset(buf, 0xff, sizeof(buf));
-  EXPECT_EQ(0, url_canon::_itoa_s(1234, buf, sizeof(buf) - 1, 10));
+  EXPECT_EQ(0, _itoa_s(1234, buf, sizeof(buf) - 1, 10));
   EXPECT_STREQ("1234", buf);
   EXPECT_EQ('\xFF', buf[5]);
 
   memset(buf, 0xff, sizeof(buf));
-  EXPECT_EQ(EINVAL, url_canon::_itoa_s(12345, buf, sizeof(buf) - 1, 10));
+  EXPECT_EQ(EINVAL, _itoa_s(12345, buf, sizeof(buf) - 1, 10));
   EXPECT_EQ('\xFF', buf[5]);  // should never write to this location
 
   // Test the template overload (note that this will see the full buffer)
   memset(buf, 0xff, sizeof(buf));
-  EXPECT_EQ(0, url_canon::_itoa_s(12, buf, 10));
+  EXPECT_EQ(0, _itoa_s(12, buf, 10));
   EXPECT_STREQ("12", buf);
   EXPECT_EQ('\xFF', buf[3]);
 
   memset(buf, 0xff, sizeof(buf));
-  EXPECT_EQ(0, url_canon::_itoa_s(12345, buf, 10));
+  EXPECT_EQ(0, _itoa_s(12345, buf, 10));
   EXPECT_STREQ("12345", buf);
 
-  EXPECT_EQ(EINVAL, url_canon::_itoa_s(123456, buf, 10));
+  EXPECT_EQ(EINVAL, _itoa_s(123456, buf, 10));
 
   // Test that radix 16 is supported.
   memset(buf, 0xff, sizeof(buf));
-  EXPECT_EQ(0, url_canon::_itoa_s(1234, buf, sizeof(buf) - 1, 16));
+  EXPECT_EQ(0, _itoa_s(1234, buf, sizeof(buf) - 1, 16));
   EXPECT_STREQ("4d2", buf);
   EXPECT_EQ('\xFF', buf[5]);
 }
@@ -1962,37 +1947,36 @@
   const char fill_mem = 0xff;
   const base::char16 fill_char = 0xffff;
   memset(buf, fill_mem, sizeof(buf));
-  EXPECT_EQ(0, url_canon::_itow_s(12, buf, sizeof(buf) / 2 - 1, 10));
+  EXPECT_EQ(0, _itow_s(12, buf, sizeof(buf) / 2 - 1, 10));
   EXPECT_EQ(WStringToUTF16(L"12"), base::string16(buf));
   EXPECT_EQ(fill_char, buf[3]);
 
   // Test the edge cases - exactly the buffer size and one over
-  EXPECT_EQ(0, url_canon::_itow_s(1234, buf, sizeof(buf) / 2 - 1, 10));
+  EXPECT_EQ(0, _itow_s(1234, buf, sizeof(buf) / 2 - 1, 10));
   EXPECT_EQ(WStringToUTF16(L"1234"), base::string16(buf));
   EXPECT_EQ(fill_char, buf[5]);
 
   memset(buf, fill_mem, sizeof(buf));
-  EXPECT_EQ(EINVAL, url_canon::_itow_s(12345, buf, sizeof(buf) / 2 - 1, 10));
+  EXPECT_EQ(EINVAL, _itow_s(12345, buf, sizeof(buf) / 2 - 1, 10));
   EXPECT_EQ(fill_char, buf[5]);  // should never write to this location
 
   // Test the template overload (note that this will see the full buffer)
   memset(buf, fill_mem, sizeof(buf));
-  EXPECT_EQ(0, url_canon::_itow_s(12, buf, 10));
+  EXPECT_EQ(0, _itow_s(12, buf, 10));
   EXPECT_EQ(WStringToUTF16(L"12"), base::string16(buf));
   EXPECT_EQ(fill_char, buf[3]);
 
   memset(buf, fill_mem, sizeof(buf));
-  EXPECT_EQ(0, url_canon::_itow_s(12345, buf, 10));
+  EXPECT_EQ(0, _itow_s(12345, buf, 10));
   EXPECT_EQ(WStringToUTF16(L"12345"), base::string16(buf));
 
-  EXPECT_EQ(EINVAL, url_canon::_itow_s(123456, buf, 10));
+  EXPECT_EQ(EINVAL, _itow_s(123456, buf, 10));
 }
 
 #endif  // !WIN32
 
 // Returns true if the given two structures are the same.
-static bool ParsedIsEqual(const url_parse::Parsed& a,
-                          const url_parse::Parsed& b) {
+static bool ParsedIsEqual(const Parsed& a, const Parsed& b) {
   return a.scheme.begin == b.scheme.begin && a.scheme.len == b.scheme.len &&
          a.username.begin == b.username.begin && a.username.len == b.username.len &&
          a.password.begin == b.password.begin && a.password.len == b.password.len &&
@@ -2150,20 +2134,20 @@
   for (size_t i = 0; i < ARRAYSIZE(rel_cases); i++) {
     const RelativeCase& cur_case = rel_cases[i];
 
-    url_parse::Parsed parsed;
+    Parsed parsed;
     int base_len = static_cast<int>(strlen(cur_case.base));
     if (cur_case.is_base_file)
-      url_parse::ParseFileURL(cur_case.base, base_len, &parsed);
+      ParseFileURL(cur_case.base, base_len, &parsed);
     else if (cur_case.is_base_hier)
-      url_parse::ParseStandardURL(cur_case.base, base_len, &parsed);
+      ParseStandardURL(cur_case.base, base_len, &parsed);
     else
-      url_parse::ParsePathURL(cur_case.base, base_len, false, &parsed);
+      ParsePathURL(cur_case.base, base_len, false, &parsed);
 
     // First see if it is relative.
     int test_len = static_cast<int>(strlen(cur_case.test));
     bool is_relative;
-    url_parse::Component relative_component;
-    bool succeed_is_rel = url_canon::IsRelativeURL(
+    Component relative_component;
+    bool succeed_is_rel = IsRelativeURL(
         cur_case.base, parsed, cur_case.test, test_len, cur_case.is_base_hier,
         &is_relative, &relative_component);
 
@@ -2174,12 +2158,12 @@
     // Now resolve it.
     if (succeed_is_rel && is_relative && cur_case.is_rel) {
       std::string resolved;
-      url_canon::StdStringCanonOutput output(&resolved);
-      url_parse::Parsed resolved_parsed;
+      StdStringCanonOutput output(&resolved);
+      Parsed resolved_parsed;
 
-      bool succeed_resolve = url_canon::ResolveRelativeURL(
-          cur_case.base, parsed, cur_case.is_base_file,
-          cur_case.test, relative_component, NULL, &output, &resolved_parsed);
+      bool succeed_resolve = ResolveRelativeURL(
+          cur_case.base, parsed, cur_case.is_base_file, cur_case.test,
+          relative_component, NULL, &output, &resolved_parsed);
       output.Complete();
 
       EXPECT_EQ(cur_case.succeed_resolve, succeed_resolve);
@@ -2187,16 +2171,14 @@
 
       // Verify that the output parsed structure is the same as parsing a
       // the URL freshly.
-      url_parse::Parsed ref_parsed;
+      Parsed ref_parsed;
       int resolved_len = static_cast<int>(resolved.size());
       if (cur_case.is_base_file) {
-        url_parse::ParseFileURL(resolved.c_str(), resolved_len, &ref_parsed);
+        ParseFileURL(resolved.c_str(), resolved_len, &ref_parsed);
       } else if (cur_case.is_base_hier) {
-        url_parse::ParseStandardURL(resolved.c_str(), resolved_len,
-                                    &ref_parsed);
+        ParseStandardURL(resolved.c_str(), resolved_len, &ref_parsed);
       } else {
-        url_parse::ParsePathURL(resolved.c_str(), resolved_len, false,
-                                &ref_parsed);
+        ParsePathURL(resolved.c_str(), resolved_len, false, &ref_parsed);
       }
       EXPECT_TRUE(ParsedIsEqual(ref_parsed, resolved_parsed));
     }
@@ -2210,28 +2192,28 @@
 TEST(URLCanonTest, ReplacementOverflow) {
   const char src[] = "file:///C:/foo/bar";
   int src_len = static_cast<int>(strlen(src));
-  url_parse::Parsed parsed;
-  url_parse::ParseFileURL(src, src_len, &parsed);
+  Parsed parsed;
+  ParseFileURL(src, src_len, &parsed);
 
   // Override two components, the path with something short, and the query with
   // sonething long enough to trigger the bug.
-  url_canon::Replacements<base::char16> repl;
+  Replacements<base::char16> repl;
   base::string16 new_query;
   for (int i = 0; i < 4800; i++)
     new_query.push_back('a');
 
   base::string16 new_path(WStringToUTF16(L"/foo"));
-  repl.SetPath(new_path.c_str(), url_parse::Component(0, 4));
+  repl.SetPath(new_path.c_str(), Component(0, 4));
   repl.SetQuery(new_query.c_str(),
-                url_parse::Component(0, static_cast<int>(new_query.length())));
+                Component(0, static_cast<int>(new_query.length())));
 
   // Call ReplaceComponents on the string. It doesn't matter if we call it for
   // standard URLs, file URLs, etc, since they will go to the same replacement
   // function that was buggy.
-  url_parse::Parsed repl_parsed;
+  Parsed repl_parsed;
   std::string repl_str;
-  url_canon::StdStringCanonOutput repl_output(&repl_str);
-  url_canon::ReplaceFileURL(src, parsed, repl, NULL, &repl_output, &repl_parsed);
+  StdStringCanonOutput repl_output(&repl_str);
+  ReplaceFileURL(src, parsed, repl, NULL, &repl_output, &repl_parsed);
   repl_output.Complete();
 
   // Generate the expected string and check.
@@ -2240,3 +2222,5 @@
     expected.push_back('a');
   EXPECT_TRUE(expected == repl_str);
 }
+
+}  // namespace url
diff --git a/url/url_export.h b/url/url_export.h
index 15ef19e..177ec28 100644
--- a/url/url_export.h
+++ b/url/url_export.h
@@ -30,4 +30,11 @@
 
 #endif  // define(COMPONENT_BUILD)
 
+// TODO(vitalybuka, crbug.com/364747) url_util is deprecated, remove after
+// fixing depending code.
+namespace url {}
+namespace url_util = ::url;
+namespace url_parse = ::url;
+namespace url_canon = ::url;
+
 #endif  // URL_URL_EXPORT_H_
diff --git a/url/url_file.h b/url/url_file.h
index f81c21f..540cb25 100644
--- a/url/url_file.h
+++ b/url/url_file.h
@@ -10,7 +10,7 @@
 
 #include "url/url_parse_internal.h"
 
-namespace url_parse {
+namespace url {
 
 #ifdef WIN32
 
@@ -78,6 +78,6 @@
 
 #endif  // WIN32
 
-}  // namespace url_parse
+}  // namespace url
 
 #endif  // URL_URL_FILE_H_
diff --git a/url/url_lib.target.darwin-arm.mk b/url/url_lib.target.darwin-arm.mk
index fe761c2..b3d223f 100644
--- a/url/url_lib.target.darwin-arm.mk
+++ b/url/url_lib.target.darwin-arm.mk
@@ -251,7 +251,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/url/url_lib.target.darwin-mips.mk b/url/url_lib.target.darwin-mips.mk
index cfd0f52..5ef016b 100644
--- a/url/url_lib.target.darwin-mips.mk
+++ b/url/url_lib.target.darwin-mips.mk
@@ -247,7 +247,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/url/url_lib.target.darwin-x86.mk b/url/url_lib.target.darwin-x86.mk
index 3649e40..b91c668 100644
--- a/url/url_lib.target.darwin-x86.mk
+++ b/url/url_lib.target.darwin-x86.mk
@@ -249,7 +249,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/url/url_lib.target.darwin-x86_64.mk b/url/url_lib.target.darwin-x86_64.mk
index 5ceb542..cca0ff7 100644
--- a/url/url_lib.target.darwin-x86_64.mk
+++ b/url/url_lib.target.darwin-x86_64.mk
@@ -249,7 +249,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/url/url_lib.target.linux-arm.mk b/url/url_lib.target.linux-arm.mk
index fe761c2..b3d223f 100644
--- a/url/url_lib.target.linux-arm.mk
+++ b/url/url_lib.target.linux-arm.mk
@@ -251,7 +251,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/url/url_lib.target.linux-mips.mk b/url/url_lib.target.linux-mips.mk
index cfd0f52..5ef016b 100644
--- a/url/url_lib.target.linux-mips.mk
+++ b/url/url_lib.target.linux-mips.mk
@@ -247,7 +247,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/url/url_lib.target.linux-x86.mk b/url/url_lib.target.linux-x86.mk
index 3649e40..b91c668 100644
--- a/url/url_lib.target.linux-x86.mk
+++ b/url/url_lib.target.linux-x86.mk
@@ -249,7 +249,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/url/url_lib.target.linux-x86_64.mk b/url/url_lib.target.linux-x86_64.mk
index 5ceb542..cca0ff7 100644
--- a/url/url_lib.target.linux-x86_64.mk
+++ b/url/url_lib.target.linux-x86_64.mk
@@ -249,7 +249,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/url/url_parse_file.cc b/url/url_parse_file.cc
index a2f7ce3..c08ddc6 100644
--- a/url/url_parse_file.cc
+++ b/url/url_parse_file.cc
@@ -38,7 +38,7 @@
 //      it looks like an absolute drive path. Also, slashes and backslashes are
 //      equally valid here.
 
-namespace url_parse {
+namespace url {
 
 namespace {
 
@@ -219,4 +219,4 @@
   DoParseFileURL(url, url_len, parsed);
 }
 
-}  // namespace url_parse
+}  // namespace url
diff --git a/url/url_parse_internal.h b/url/url_parse_internal.h
index e61379c..4070b7e 100644
--- a/url/url_parse_internal.h
+++ b/url/url_parse_internal.h
@@ -9,7 +9,7 @@
 
 #include "url/url_parse.h"
 
-namespace url_parse {
+namespace url {
 
 // We treat slashes and backslashes the same for IE compatability.
 inline bool IsURLSlash(base::char16 ch) {
@@ -86,6 +86,6 @@
                       int after_scheme,
                       Parsed* parsed);
 
-}  // namespace url_parse
+}  // namespace url
 
 #endif  // URL_URL_PARSE_INTERNAL_H_
diff --git a/url/url_parse_unittest.cc b/url/url_parse_unittest.cc
index f080fb5..a8b7f85 100644
--- a/url/url_parse_unittest.cc
+++ b/url/url_parse_unittest.cc
@@ -45,7 +45,7 @@
 //      it looks like an absolute drive path. Also, slashes and backslashes are
 //      equally valid here.
 
-namespace url_parse {
+namespace url {
 namespace {
 
 // Used for regular URL parse cases.
@@ -96,7 +96,7 @@
 
 bool ComponentMatches(const char* input,
                       const char* reference,
-                      const url_parse::Component& component) {
+                      const Component& component) {
   // If the component is nonexistant (length == -1), it should begin at 0.
   EXPECT_TRUE(component.len >= 0 || component.len == -1);
 
@@ -116,7 +116,7 @@
   return strncmp(reference, &input[component.begin], component.len) == 0;
 }
 
-void ExpectInvalidComponent(const url_parse::Component& component) {
+void ExpectInvalidComponent(const Component& component) {
   EXPECT_EQ(0, component.begin);
   EXPECT_EQ(-1, component.len);
 }
@@ -145,8 +145,8 @@
   for (size_t i = 0; i < arraysize(length_cases); i++) {
     int true_length = static_cast<int>(strlen(length_cases[i]));
 
-    url_parse::Parsed parsed;
-    url_parse::ParseStandardURL(length_cases[i], true_length, &parsed);
+    Parsed parsed;
+    ParseStandardURL(length_cases[i], true_length, &parsed);
 
     EXPECT_EQ(true_length, parsed.Length());
   }
@@ -205,11 +205,11 @@
     int length = static_cast<int>(strlen(count_cases[i].url));
 
     // Simple test to distinguish file and standard URLs.
-    url_parse::Parsed parsed;
+    Parsed parsed;
     if (length > 0 && count_cases[i].url[0] == 'f')
-      url_parse::ParseFileURL(count_cases[i].url, length, &parsed);
+      ParseFileURL(count_cases[i].url, length, &parsed);
     else
-      url_parse::ParseStandardURL(count_cases[i].url, length, &parsed);
+      ParseStandardURL(count_cases[i].url, length, &parsed);
 
     int chars_before = parsed.CountCharactersBefore(
         count_cases[i].component, count_cases[i].include_delimiter);
@@ -318,11 +318,11 @@
 TEST(URLParser, Standard) {
   // Declared outside for loop to try to catch cases in init() where we forget
   // to reset something that is reset by the constructor.
-  url_parse::Parsed parsed;
+  Parsed parsed;
   for (size_t i = 0; i < arraysize(cases); i++) {
     const char* url = cases[i].input;
-    url_parse::ParseStandardURL(url, static_cast<int>(strlen(url)), &parsed);
-    int port = url_parse::ParsePort(url, parsed.port);
+    ParseStandardURL(url, static_cast<int>(strlen(url)), &parsed);
+    int port = ParsePort(url, parsed.port);
 
     EXPECT_TRUE(ComponentMatches(url, cases[i].scheme, parsed.scheme));
     EXPECT_TRUE(ComponentMatches(url, cases[i].username, parsed.username));
@@ -353,10 +353,10 @@
 TEST(URLParser, PathURL) {
   // Declared outside for loop to try to catch cases in init() where we forget
   // to reset something that is reset by the construtor.
-  url_parse::Parsed parsed;
+  Parsed parsed;
   for (size_t i = 0; i < arraysize(path_cases); i++) {
     const char* url = path_cases[i].input;
-    url_parse::ParsePathURL(url, static_cast<int>(strlen(url)), false, &parsed);
+    ParsePathURL(url, static_cast<int>(strlen(url)), false, &parsed);
 
     EXPECT_TRUE(ComponentMatches(url, path_cases[i].scheme, parsed.scheme))
         << i;
@@ -452,11 +452,11 @@
 TEST(URLParser, ParseFileURL) {
   // Declared outside for loop to try to catch cases in init() where we forget
   // to reset something that is reset by the construtor.
-  url_parse::Parsed parsed;
+  Parsed parsed;
   for (size_t i = 0; i < arraysize(file_cases); i++) {
     const char* url = file_cases[i].input;
-    url_parse::ParseFileURL(url, static_cast<int>(strlen(url)), &parsed);
-    int port = url_parse::ParsePort(url, parsed.port);
+    ParseFileURL(url, static_cast<int>(strlen(url)), &parsed);
+    int port = ParsePort(url, parsed.port);
 
     EXPECT_TRUE(ComponentMatches(url, file_cases[i].scheme, parsed.scheme))
         << " for case #" << i << " [" << url << "] "
@@ -513,11 +513,11 @@
     const char* url = file_cases[i].input;
     int len = static_cast<int>(strlen(url));
 
-    url_parse::Parsed parsed;
-    url_parse::ParseStandardURL(url, len, &parsed);
+    Parsed parsed;
+    ParseStandardURL(url, len, &parsed);
 
-    url_parse::Component file_name;
-    url_parse::ExtractFileName(url, parsed.path, &file_name);
+    Component file_name;
+    ExtractFileName(url, parsed.path, &file_name);
 
     EXPECT_TRUE(ComponentMatches(url, file_cases[i].expected, file_name));
   }
@@ -530,14 +530,14 @@
                            int parameter,
                            const char* expected_key,
                            const char* expected_value) {
-  url_parse::Parsed parsed;
-  url_parse::ParseStandardURL(url, static_cast<int>(strlen(url)), &parsed);
+  Parsed parsed;
+  ParseStandardURL(url, static_cast<int>(strlen(url)), &parsed);
 
-  url_parse::Component query = parsed.query;
+  Component query = parsed.query;
 
   for (int i = 1; i <= parameter; i++) {
-    url_parse::Component key, value;
-    if (!url_parse::ExtractQueryKeyValue(url, &query, &key, &value)) {
+    Component key, value;
+    if (!ExtractQueryKeyValue(url, &query, &key, &value)) {
       if (parameter >= i && !expected_key)
         return true;  // Expected nonexistant key, got one.
       return false;  // Not enough keys.
@@ -616,16 +616,16 @@
 TEST(URLParser, MailtoUrl) {
   // Declared outside for loop to try to catch cases in init() where we forget
   // to reset something that is reset by the construtor.
-  url_parse::Parsed parsed;
+  Parsed parsed;
   for (size_t i = 0; i < arraysize(mailto_cases); ++i) {
     const char* url = mailto_cases[i].input;
-    url_parse::ParseMailtoURL(url, static_cast<int>(strlen(url)), &parsed);
-    int port = url_parse::ParsePort(url, parsed.port);
+    ParseMailtoURL(url, static_cast<int>(strlen(url)), &parsed);
+    int port = ParsePort(url, parsed.port);
 
     EXPECT_TRUE(ComponentMatches(url, mailto_cases[i].scheme, parsed.scheme));
     EXPECT_TRUE(ComponentMatches(url, mailto_cases[i].path, parsed.path));
     EXPECT_TRUE(ComponentMatches(url, mailto_cases[i].query, parsed.query));
-    EXPECT_EQ(url_parse::PORT_UNSPECIFIED, port);
+    EXPECT_EQ(PORT_UNSPECIFIED, port);
 
     // The remaining components are never used for mailto urls.
     ExpectInvalidComponent(parsed.username);
@@ -648,11 +648,11 @@
 TEST(URLParser, FileSystemURL) {
   // Declared outside for loop to try to catch cases in init() where we forget
   // to reset something that is reset by the construtor.
-  url_parse::Parsed parsed;
+  Parsed parsed;
   for (size_t i = 0; i < arraysize(filesystem_cases); i++) {
     const FileSystemURLParseCase* parsecase = &filesystem_cases[i];
     const char* url = parsecase->input;
-    url_parse::ParseFileSystemURL(url, static_cast<int>(strlen(url)), &parsed);
+    ParseFileSystemURL(url, static_cast<int>(strlen(url)), &parsed);
 
     EXPECT_TRUE(ComponentMatches(url, "filesystem", parsed.scheme));
     EXPECT_EQ(!parsecase->inner_scheme, !parsed.inner_parsed());
@@ -666,7 +666,7 @@
           parsed.inner_parsed()->password));
       EXPECT_TRUE(ComponentMatches(url, parsecase->inner_host,
           parsed.inner_parsed()->host));
-      int port = url_parse::ParsePort(url, parsed.inner_parsed()->port);
+      int port = ParsePort(url, parsed.inner_parsed()->port);
       EXPECT_EQ(parsecase->inner_port, port);
 
       // The remaining components are never used for filesystem urls.
@@ -687,4 +687,4 @@
 }
 
 }  // namespace
-}  // namespace url_parse
+}  // namespace url
diff --git a/url/url_test_utils.h b/url/url_test_utils.h
index 64b4acb..6400bac 100644
--- a/url/url_test_utils.h
+++ b/url/url_test_utils.h
@@ -14,7 +14,9 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "url/url_canon_internal.h"
 
-namespace url_test_utils {
+namespace url {
+
+namespace test_utils {
 
 // Converts a UTF-16 string from native wchar_t format to char16, by
 // truncating the high 32 bits.  This is not meant to handle true UTF-32
@@ -32,22 +34,23 @@
 inline base::string16 ConvertUTF8ToUTF16(const std::string& src) {
   int length = static_cast<int>(src.length());
   EXPECT_LT(length, 1024);
-  url_canon::RawCanonOutputW<1024> output;
-  EXPECT_TRUE(url_canon::ConvertUTF8ToUTF16(src.data(), length, &output));
+  RawCanonOutputW<1024> output;
+  EXPECT_TRUE(ConvertUTF8ToUTF16(src.data(), length, &output));
   return base::string16(output.data(), output.length());
 }
 
 // Converts a string from UTF-16 to UTF-8
 inline std::string ConvertUTF16ToUTF8(const base::string16& src) {
   std::string str;
-  url_canon::StdStringCanonOutput output(&str);
-  EXPECT_TRUE(url_canon::ConvertUTF16ToUTF8(src.data(),
-                                            static_cast<int>(src.length()),
-                                            &output));
+  StdStringCanonOutput output(&str);
+  EXPECT_TRUE(ConvertUTF16ToUTF8(src.data(), static_cast<int>(src.length()),
+                                 &output));
   output.Complete();
   return str;
 }
 
-}  // namespace url_test_utils
+}  // namespace test_utils
+
+}  // namespace url
 
 #endif  // URL_URL_TEST_UTILS_H_
diff --git a/url/url_util.cc b/url/url_util.cc
index 2b4f7ad..ff1fdf9 100644
--- a/url/url_util.cc
+++ b/url/url_util.cc
@@ -12,7 +12,7 @@
 #include "url/url_file.h"
 #include "url/url_util_internal.h"
 
-namespace url_util {
+namespace url {
 
 const char kFileScheme[] = "file";
 const char kFileSystemScheme[] = "filesystem";
@@ -22,7 +22,8 @@
 
 // ASCII-specific tolower.  The standard library's tolower is locale sensitive,
 // so we don't want to use it here.
-template <class Char> inline Char ToLowerASCII(Char c) {
+template<class Char>
+inline Char ToLowerASCII(Char c) {
   return (c >= 'A' && c <= 'Z') ? (c + ('a' - 'A')) : c;
 }
 
@@ -70,7 +71,7 @@
 // lower-case |compare_to| buffer.
 template<typename CHAR>
 inline bool DoCompareSchemeComponent(const CHAR* spec,
-                                     const url_parse::Component& component,
+                                     const Component& component,
                                      const char* compare_to) {
   if (!component.is_nonempty())
     return compare_to[0] == 0;  // When component is empty, match empty scheme.
@@ -82,7 +83,7 @@
 // Returns true if the given scheme identified by |scheme| within |spec| is one
 // of the registered "standard" schemes.
 template<typename CHAR>
-bool DoIsStandard(const CHAR* spec, const url_parse::Component& scheme) {
+bool DoIsStandard(const CHAR* spec, const Component& scheme) {
   if (!scheme.is_nonempty())
     return false;  // Empty or invalid schemes are non-standard.
 
@@ -99,19 +100,19 @@
 bool DoFindAndCompareScheme(const CHAR* str,
                             int str_len,
                             const char* compare,
-                            url_parse::Component* found_scheme) {
+                            Component* found_scheme) {
   // Before extracting scheme, canonicalize the URL to remove any whitespace.
   // This matches the canonicalization done in DoCanonicalize function.
-  url_canon::RawCanonOutputT<CHAR> whitespace_buffer;
+  RawCanonOutputT<CHAR> whitespace_buffer;
   int spec_len;
   const CHAR* spec = RemoveURLWhitespace(str, str_len,
                                          &whitespace_buffer, &spec_len);
 
-  url_parse::Component our_scheme;
-  if (!url_parse::ExtractScheme(spec, spec_len, &our_scheme)) {
+  Component our_scheme;
+  if (!ExtractScheme(spec, spec_len, &our_scheme)) {
     // No scheme.
     if (found_scheme)
-      *found_scheme = url_parse::Component();
+      *found_scheme = Component();
     return false;
   }
   if (found_scheme)
@@ -120,19 +121,20 @@
 }
 
 template<typename CHAR>
-bool DoCanonicalize(const CHAR* in_spec, int in_spec_len,
+bool DoCanonicalize(const CHAR* in_spec,
+                    int in_spec_len,
                     bool trim_path_end,
-                    url_canon::CharsetConverter* charset_converter,
-                    url_canon::CanonOutput* output,
-                    url_parse::Parsed* output_parsed) {
+                    CharsetConverter* charset_converter,
+                    CanonOutput* output,
+                    Parsed* output_parsed) {
   // Remove any whitespace from the middle of the relative URL, possibly
   // copying to the new buffer.
-  url_canon::RawCanonOutputT<CHAR> whitespace_buffer;
+  RawCanonOutputT<CHAR> whitespace_buffer;
   int spec_len;
   const CHAR* spec = RemoveURLWhitespace(in_spec, in_spec_len,
                                          &whitespace_buffer, &spec_len);
 
-  url_parse::Parsed parsed_input;
+  Parsed parsed_input;
 #ifdef WIN32
   // For Windows, we allow things that look like absolute Windows paths to be
   // fixed up magically to file URLs. This is done for IE compatability. For
@@ -144,17 +146,16 @@
   // has no meaning as an absolute path name. This is because browsers on Mac
   // & Unix don't generally do this, so there is no compatibility reason for
   // doing so.
-  if (url_parse::DoesBeginUNCPath(spec, 0, spec_len, false) ||
-      url_parse::DoesBeginWindowsDriveSpec(spec, 0, spec_len)) {
-    url_parse::ParseFileURL(spec, spec_len, &parsed_input);
-    return url_canon::CanonicalizeFileURL(spec, spec_len, parsed_input,
-                                          charset_converter,
-                                          output, output_parsed);
+  if (DoesBeginUNCPath(spec, 0, spec_len, false) ||
+      DoesBeginWindowsDriveSpec(spec, 0, spec_len)) {
+    ParseFileURL(spec, spec_len, &parsed_input);
+    return CanonicalizeFileURL(spec, spec_len, parsed_input, charset_converter,
+                               output, output_parsed);
   }
 #endif
 
-  url_parse::Component scheme;
-  if (!url_parse::ExtractScheme(spec, spec_len, &scheme))
+  Component scheme;
+  if (!ExtractScheme(spec, spec_len, &scheme))
     return false;
 
   // This is the parsed version of the input URL, we have to canonicalize it
@@ -162,36 +163,33 @@
   bool success;
   if (DoCompareSchemeComponent(spec, scheme, kFileScheme)) {
     // File URLs are special.
-    url_parse::ParseFileURL(spec, spec_len, &parsed_input);
-    success = url_canon::CanonicalizeFileURL(spec, spec_len, parsed_input,
-                                             charset_converter, output,
-                                             output_parsed);
+    ParseFileURL(spec, spec_len, &parsed_input);
+    success = CanonicalizeFileURL(spec, spec_len, parsed_input,
+                                  charset_converter, output, output_parsed);
   } else if (DoCompareSchemeComponent(spec, scheme, kFileSystemScheme)) {
     // Filesystem URLs are special.
-    url_parse::ParseFileSystemURL(spec, spec_len, &parsed_input);
-    success = url_canon::CanonicalizeFileSystemURL(spec, spec_len,
-                                                   parsed_input,
-                                                   charset_converter,
-                                                   output, output_parsed);
+    ParseFileSystemURL(spec, spec_len, &parsed_input);
+    success = CanonicalizeFileSystemURL(spec, spec_len, parsed_input,
+                                        charset_converter, output,
+                                        output_parsed);
 
   } else if (DoIsStandard(spec, scheme)) {
     // All "normal" URLs.
-    url_parse::ParseStandardURL(spec, spec_len, &parsed_input);
-    success = url_canon::CanonicalizeStandardURL(spec, spec_len, parsed_input,
-                                                 charset_converter,
-                                                 output, output_parsed);
+    ParseStandardURL(spec, spec_len, &parsed_input);
+    success = CanonicalizeStandardURL(spec, spec_len, parsed_input,
+                                      charset_converter, output, output_parsed);
 
   } else if (DoCompareSchemeComponent(spec, scheme, kMailtoScheme)) {
     // Mailto are treated like a standard url with only a scheme, path, query
-    url_parse::ParseMailtoURL(spec, spec_len, &parsed_input);
-    success = url_canon::CanonicalizeMailtoURL(spec, spec_len, parsed_input,
-                                               output, output_parsed);
+    ParseMailtoURL(spec, spec_len, &parsed_input);
+    success = CanonicalizeMailtoURL(spec, spec_len, parsed_input, output,
+                                    output_parsed);
 
   } else {
     // "Weird" URLs like data: and javascript:
-    url_parse::ParsePathURL(spec, spec_len, trim_path_end, &parsed_input);
-    success = url_canon::CanonicalizePathURL(spec, spec_len, parsed_input,
-                                             output, output_parsed);
+    ParsePathURL(spec, spec_len, trim_path_end, &parsed_input);
+    success = CanonicalizePathURL(spec, spec_len, parsed_input, output,
+                                  output_parsed);
   }
   return success;
 }
@@ -199,15 +197,15 @@
 template<typename CHAR>
 bool DoResolveRelative(const char* base_spec,
                        int base_spec_len,
-                       const url_parse::Parsed& base_parsed,
+                       const Parsed& base_parsed,
                        const CHAR* in_relative,
                        int in_relative_length,
-                       url_canon::CharsetConverter* charset_converter,
-                       url_canon::CanonOutput* output,
-                       url_parse::Parsed* output_parsed) {
+                       CharsetConverter* charset_converter,
+                       CanonOutput* output,
+                       Parsed* output_parsed) {
   // Remove any whitespace from the middle of the relative URL, possibly
   // copying to the new buffer.
-  url_canon::RawCanonOutputT<CHAR> whitespace_buffer;
+  RawCanonOutputT<CHAR> whitespace_buffer;
   int relative_length;
   const CHAR* relative = RemoveURLWhitespace(in_relative, in_relative_length,
                                              &whitespace_buffer,
@@ -217,8 +215,8 @@
   if (base_spec &&
       base_parsed.scheme.is_nonempty()) {
     int after_scheme = base_parsed.scheme.end() + 1;  // Skip past the colon.
-    int num_slashes = url_parse::CountConsecutiveSlashes(
-        base_spec, after_scheme, base_spec_len);
+    int num_slashes = CountConsecutiveSlashes(base_spec, after_scheme,
+                                              base_spec_len);
     base_is_authority_based = num_slashes > 1;
     base_is_hierarchical = num_slashes > 0;
   }
@@ -228,12 +226,10 @@
       DoIsStandard(base_spec, base_parsed.scheme);
 
   bool is_relative;
-  url_parse::Component relative_component;
-  if (!url_canon::IsRelativeURL(base_spec, base_parsed,
-                                relative, relative_length,
-                                (base_is_hierarchical || standard_base_scheme),
-                                &is_relative,
-                                &relative_component)) {
+  Component relative_component;
+  if (!IsRelativeURL(base_spec, base_parsed, relative, relative_length,
+                     (base_is_hierarchical || standard_base_scheme),
+                     &is_relative, &relative_component)) {
     // Error resolving.
     return false;
   }
@@ -242,14 +238,13 @@
   // non-standard URLs are treated as PathURLs, but if the base has an
   // authority we would like to preserve it.
   if (is_relative && base_is_authority_based && !standard_base_scheme) {
-    url_parse::Parsed base_parsed_authority;
+    Parsed base_parsed_authority;
     ParseStandardURL(base_spec, base_spec_len, &base_parsed_authority);
     if (base_parsed_authority.host.is_nonempty()) {
       bool did_resolve_succeed =
-          url_canon::ResolveRelativeURL(base_spec, base_parsed_authority,
-                                        false, relative,
-                                        relative_component, charset_converter,
-                                        output, output_parsed);
+          ResolveRelativeURL(base_spec, base_parsed_authority, false, relative,
+                             relative_component, charset_converter, output,
+                             output_parsed);
       // The output_parsed is incorrect at this point (because it was built
       // based on base_parsed_authority instead of base_parsed) and needs to be
       // re-created.
@@ -261,10 +256,9 @@
     // Relative, resolve and canonicalize.
     bool file_base_scheme = base_parsed.scheme.is_nonempty() &&
         DoCompareSchemeComponent(base_spec, base_parsed.scheme, kFileScheme);
-    return url_canon::ResolveRelativeURL(base_spec, base_parsed,
-                                         file_base_scheme, relative,
-                                         relative_component, charset_converter,
-                                         output, output_parsed);
+    return ResolveRelativeURL(base_spec, base_parsed, file_base_scheme, relative,
+                              relative_component, charset_converter, output,
+                              output_parsed);
   }
 
   // Not relative, canonicalize the input.
@@ -275,11 +269,11 @@
 template<typename CHAR>
 bool DoReplaceComponents(const char* spec,
                          int spec_len,
-                         const url_parse::Parsed& parsed,
-                         const url_canon::Replacements<CHAR>& replacements,
-                         url_canon::CharsetConverter* charset_converter,
-                         url_canon::CanonOutput* output,
-                         url_parse::Parsed* out_parsed) {
+                         const Parsed& parsed,
+                         const Replacements<CHAR>& replacements,
+                         CharsetConverter* charset_converter,
+                         CanonOutput* output,
+                         Parsed* out_parsed) {
   // If the scheme is overridden, just do a simple string substitution and
   // reparse the whole thing. There are lots of edge cases that we really don't
   // want to deal with. Like what happens if I replace "http://e:8080/foo"
@@ -296,12 +290,11 @@
   if (replacements.IsSchemeOverridden()) {
     // Canonicalize the new scheme so it is 8-bit and can be concatenated with
     // the existing spec.
-    url_canon::RawCanonOutput<128> scheme_replaced;
-    url_parse::Component scheme_replaced_parsed;
-    url_canon::CanonicalizeScheme(
-        replacements.sources().scheme,
-        replacements.components().scheme,
-        &scheme_replaced, &scheme_replaced_parsed);
+    RawCanonOutput<128> scheme_replaced;
+    Component scheme_replaced_parsed;
+    CanonicalizeScheme(replacements.sources().scheme,
+                       replacements.components().scheme,
+                       &scheme_replaced, &scheme_replaced_parsed);
 
     // We can assume that the input is canonicalized, which means it always has
     // a colon after the scheme (or where the scheme would be).
@@ -314,8 +307,8 @@
 
     // We now need to completely re-parse the resulting string since its meaning
     // may have changed with the different scheme.
-    url_canon::RawCanonOutput<128> recanonicalized;
-    url_parse::Parsed recanonicalized_parsed;
+    RawCanonOutput<128> recanonicalized;
+    Parsed recanonicalized_parsed;
     DoCanonicalize(scheme_replaced.data(), scheme_replaced.length(), true,
                    charset_converter,
                    &recanonicalized, &recanonicalized_parsed);
@@ -333,8 +326,8 @@
     // after this call to check validity (this assumes replacing the scheme is
     // much much less common than other types of replacements, like clearing the
     // ref).
-    url_canon::Replacements<CHAR> replacements_no_scheme = replacements;
-    replacements_no_scheme.SetScheme(NULL, url_parse::Component());
+    Replacements<CHAR> replacements_no_scheme = replacements;
+    replacements_no_scheme.SetScheme(NULL, Component());
     return DoReplaceComponents(recanonicalized.data(), recanonicalized.length(),
                                recanonicalized_parsed, replacements_no_scheme,
                                charset_converter, output, out_parsed);
@@ -343,26 +336,23 @@
   // If we get here, then we know the scheme doesn't need to be replaced, so can
   // just key off the scheme in the spec to know how to do the replacements.
   if (DoCompareSchemeComponent(spec, parsed.scheme, kFileScheme)) {
-    return url_canon::ReplaceFileURL(spec, parsed, replacements,
-                                     charset_converter, output, out_parsed);
+    return ReplaceFileURL(spec, parsed, replacements, charset_converter, output,
+                          out_parsed);
   }
   if (DoCompareSchemeComponent(spec, parsed.scheme, kFileSystemScheme)) {
-    return url_canon::ReplaceFileSystemURL(spec, parsed, replacements,
-                                           charset_converter, output,
-                                           out_parsed);
+    return ReplaceFileSystemURL(spec, parsed, replacements, charset_converter,
+                                output, out_parsed);
   }
   if (DoIsStandard(spec, parsed.scheme)) {
-    return url_canon::ReplaceStandardURL(spec, parsed, replacements,
-                                         charset_converter, output, out_parsed);
+    return ReplaceStandardURL(spec, parsed, replacements, charset_converter,
+                              output, out_parsed);
   }
   if (DoCompareSchemeComponent(spec, parsed.scheme, kMailtoScheme)) {
-     return url_canon::ReplaceMailtoURL(spec, parsed, replacements,
-                                        output, out_parsed);
+    return ReplaceMailtoURL(spec, parsed, replacements, output, out_parsed);
   }
 
   // Default is a path URL.
-  return url_canon::ReplacePathURL(spec, parsed, replacements,
-                                   output, out_parsed);
+  return ReplacePathURL(spec, parsed, replacements, output, out_parsed);
 }
 
 }  // namespace
@@ -407,34 +397,34 @@
   standard_schemes_locked = true;
 }
 
-bool IsStandard(const char* spec, const url_parse::Component& scheme) {
+bool IsStandard(const char* spec, const Component& scheme) {
   return DoIsStandard(spec, scheme);
 }
 
-bool IsStandard(const base::char16* spec, const url_parse::Component& scheme) {
+bool IsStandard(const base::char16* spec, const Component& scheme) {
   return DoIsStandard(spec, scheme);
 }
 
 bool FindAndCompareScheme(const char* str,
                           int str_len,
                           const char* compare,
-                          url_parse::Component* found_scheme) {
+                          Component* found_scheme) {
   return DoFindAndCompareScheme(str, str_len, compare, found_scheme);
 }
 
 bool FindAndCompareScheme(const base::char16* str,
                           int str_len,
                           const char* compare,
-                          url_parse::Component* found_scheme) {
+                          Component* found_scheme) {
   return DoFindAndCompareScheme(str, str_len, compare, found_scheme);
 }
 
 bool Canonicalize(const char* spec,
                   int spec_len,
                   bool trim_path_end,
-                  url_canon::CharsetConverter* charset_converter,
-                  url_canon::CanonOutput* output,
-                  url_parse::Parsed* output_parsed) {
+                  CharsetConverter* charset_converter,
+                  CanonOutput* output,
+                  Parsed* output_parsed) {
   return DoCanonicalize(spec, spec_len, trim_path_end, charset_converter,
                         output, output_parsed);
 }
@@ -442,21 +432,21 @@
 bool Canonicalize(const base::char16* spec,
                   int spec_len,
                   bool trim_path_end,
-                  url_canon::CharsetConverter* charset_converter,
-                  url_canon::CanonOutput* output,
-                  url_parse::Parsed* output_parsed) {
+                  CharsetConverter* charset_converter,
+                  CanonOutput* output,
+                  Parsed* output_parsed) {
   return DoCanonicalize(spec, spec_len, trim_path_end, charset_converter,
                         output, output_parsed);
 }
 
 bool ResolveRelative(const char* base_spec,
                      int base_spec_len,
-                     const url_parse::Parsed& base_parsed,
+                     const Parsed& base_parsed,
                      const char* relative,
                      int relative_length,
-                     url_canon::CharsetConverter* charset_converter,
-                     url_canon::CanonOutput* output,
-                     url_parse::Parsed* output_parsed) {
+                     CharsetConverter* charset_converter,
+                     CanonOutput* output,
+                     Parsed* output_parsed) {
   return DoResolveRelative(base_spec, base_spec_len, base_parsed,
                            relative, relative_length,
                            charset_converter, output, output_parsed);
@@ -464,12 +454,12 @@
 
 bool ResolveRelative(const char* base_spec,
                      int base_spec_len,
-                     const url_parse::Parsed& base_parsed,
+                     const Parsed& base_parsed,
                      const base::char16* relative,
                      int relative_length,
-                     url_canon::CharsetConverter* charset_converter,
-                     url_canon::CanonOutput* output,
-                     url_parse::Parsed* output_parsed) {
+                     CharsetConverter* charset_converter,
+                     CanonOutput* output,
+                     Parsed* output_parsed) {
   return DoResolveRelative(base_spec, base_spec_len, base_parsed,
                            relative, relative_length,
                            charset_converter, output, output_parsed);
@@ -477,23 +467,22 @@
 
 bool ReplaceComponents(const char* spec,
                        int spec_len,
-                       const url_parse::Parsed& parsed,
-                       const url_canon::Replacements<char>& replacements,
-                       url_canon::CharsetConverter* charset_converter,
-                       url_canon::CanonOutput* output,
-                       url_parse::Parsed* out_parsed) {
+                       const Parsed& parsed,
+                       const Replacements<char>& replacements,
+                       CharsetConverter* charset_converter,
+                       CanonOutput* output,
+                       Parsed* out_parsed) {
   return DoReplaceComponents(spec, spec_len, parsed, replacements,
                              charset_converter, output, out_parsed);
 }
 
-bool ReplaceComponents(
-      const char* spec,
-      int spec_len,
-      const url_parse::Parsed& parsed,
-      const url_canon::Replacements<base::char16>& replacements,
-      url_canon::CharsetConverter* charset_converter,
-      url_canon::CanonOutput* output,
-      url_parse::Parsed* out_parsed) {
+bool ReplaceComponents(const char* spec,
+                       int spec_len,
+                       const Parsed& parsed,
+                       const Replacements<base::char16>& replacements,
+                       CharsetConverter* charset_converter,
+                       CanonOutput* output,
+                       Parsed* out_parsed) {
   return DoReplaceComponents(spec, spec_len, parsed, replacements,
                              charset_converter, output, out_parsed);
 }
@@ -523,13 +512,14 @@
   return DoLowerCaseEqualsASCII(a_begin, a_end, b);
 }
 
-void DecodeURLEscapeSequences(const char* input, int length,
-                              url_canon::CanonOutputW* output) {
-  url_canon::RawCanonOutputT<char> unescaped_chars;
+void DecodeURLEscapeSequences(const char* input,
+                              int length,
+                              CanonOutputW* output) {
+  RawCanonOutputT<char> unescaped_chars;
   for (int i = 0; i < length; i++) {
     if (input[i] == '%') {
       unsigned char ch;
-      if (url_canon::DecodeEscaped(input, &i, length, &ch)) {
+      if (DecodeEscaped(input, &i, length, &ch)) {
         unescaped_chars.push_back(ch);
       } else {
         // Invalid escape sequence, copy the percent literal.
@@ -553,10 +543,10 @@
       // character.
       int next_character = i;
       unsigned code_point;
-      if (url_canon::ReadUTFChar(unescaped_chars.data(), &next_character,
-                                 unescaped_chars.length(), &code_point)) {
+      if (ReadUTFChar(unescaped_chars.data(), &next_character,
+                      unescaped_chars.length(), &code_point)) {
         // Valid UTF-8 character, convert to UTF-16.
-        url_canon::AppendUTF16Value(code_point, output);
+        AppendUTF16Value(code_point, output);
         i = next_character;
       } else {
         // If there are any sequences that are not valid UTF-8, we keep
@@ -572,11 +562,10 @@
   }
 }
 
-void EncodeURIComponent(const char* input, int length,
-                        url_canon::CanonOutput* output) {
+void EncodeURIComponent(const char* input, int length, CanonOutput* output) {
   for (int i = 0; i < length; ++i) {
     unsigned char c = static_cast<unsigned char>(input[i]);
-    if (url_canon::IsComponentChar(c))
+    if (IsComponentChar(c))
       output->push_back(c);
     else
       AppendEscapedChar(c, output);
@@ -584,15 +573,15 @@
 }
 
 bool CompareSchemeComponent(const char* spec,
-                            const url_parse::Component& component,
+                            const Component& component,
                             const char* compare_to) {
   return DoCompareSchemeComponent(spec, component, compare_to);
 }
 
 bool CompareSchemeComponent(const base::char16* spec,
-                            const url_parse::Component& component,
+                            const Component& component,
                             const char* compare_to) {
   return DoCompareSchemeComponent(spec, component, compare_to);
 }
 
-}  // namespace url_util
+}  // namespace url
diff --git a/url/url_util.h b/url/url_util.h
index eff386c..4229525 100644
--- a/url/url_util.h
+++ b/url/url_util.h
@@ -12,7 +12,7 @@
 #include "url/url_export.h"
 #include "url/url_parse.h"
 
-namespace url_util {
+namespace url {
 
 // Init ------------------------------------------------------------------------
 
@@ -66,35 +66,34 @@
 URL_EXPORT bool FindAndCompareScheme(const char* str,
                                      int str_len,
                                      const char* compare,
-                                     url_parse::Component* found_scheme);
+                                     Component* found_scheme);
 URL_EXPORT bool FindAndCompareScheme(const base::char16* str,
                                      int str_len,
                                      const char* compare,
-                                     url_parse::Component* found_scheme);
+                                     Component* found_scheme);
 inline bool FindAndCompareScheme(const std::string& str,
                                  const char* compare,
-                                 url_parse::Component* found_scheme) {
+                                 Component* found_scheme) {
   return FindAndCompareScheme(str.data(), static_cast<int>(str.size()),
                               compare, found_scheme);
 }
 inline bool FindAndCompareScheme(const base::string16& str,
                                  const char* compare,
-                                 url_parse::Component* found_scheme) {
+                                 Component* found_scheme) {
   return FindAndCompareScheme(str.data(), static_cast<int>(str.size()),
                               compare, found_scheme);
 }
 
 // Returns true if the given string represents a standard URL. This means that
 // either the scheme is in the list of known standard schemes.
-URL_EXPORT bool IsStandard(const char* spec,
-                           const url_parse::Component& scheme);
-URL_EXPORT bool IsStandard(const base::char16* spec,
-                           const url_parse::Component& scheme);
+URL_EXPORT bool IsStandard(const char* spec, const Component& scheme);
+URL_EXPORT bool IsStandard(const base::char16* spec, const Component& scheme);
 
 // TODO(brettw) remove this. This is a temporary compatibility hack to avoid
 // breaking the WebKit build when this version is synced via Chrome.
-inline bool IsStandard(const char* spec, int spec_len,
-                       const url_parse::Component& scheme) {
+inline bool IsStandard(const char* spec,
+                       int spec_len,
+                       const Component& scheme) {
   return IsStandard(spec, scheme);
 }
 
@@ -104,7 +103,7 @@
 // should use the URL object, although this may be useful if performance is
 // critical and you don't want to do the heap allocation for the std::string.
 //
-// As with the url_canon::Canonicalize* functions, the charset converter can
+// As with the Canonicalize* functions, the charset converter can
 // be NULL to use UTF-8 (it will be faster in this case).
 //
 // Returns true if a valid URL was produced, false if not. On failure, the
@@ -113,15 +112,15 @@
 URL_EXPORT bool Canonicalize(const char* spec,
                              int spec_len,
                              bool trim_path_end,
-                             url_canon::CharsetConverter* charset_converter,
-                             url_canon::CanonOutput* output,
-                             url_parse::Parsed* output_parsed);
+                             CharsetConverter* charset_converter,
+                             CanonOutput* output,
+                             Parsed* output_parsed);
 URL_EXPORT bool Canonicalize(const base::char16* spec,
                              int spec_len,
                              bool trim_path_end,
-                             url_canon::CharsetConverter* charset_converter,
-                             url_canon::CanonOutput* output,
-                             url_parse::Parsed* output_parsed);
+                             CharsetConverter* charset_converter,
+                             CanonOutput* output,
+                             Parsed* output_parsed);
 
 // Resolves a potentially relative URL relative to the given parsed base URL.
 // The base MUST be valid. The resulting canonical URL and parsed information
@@ -135,41 +134,40 @@
 // a valid URL.
 URL_EXPORT bool ResolveRelative(const char* base_spec,
                                 int base_spec_len,
-                                const url_parse::Parsed& base_parsed,
+                                const Parsed& base_parsed,
                                 const char* relative,
                                 int relative_length,
-                                url_canon::CharsetConverter* charset_converter,
-                                url_canon::CanonOutput* output,
-                                url_parse::Parsed* output_parsed);
+                                CharsetConverter* charset_converter,
+                                CanonOutput* output,
+                                Parsed* output_parsed);
 URL_EXPORT bool ResolveRelative(const char* base_spec,
                                 int base_spec_len,
-                                const url_parse::Parsed& base_parsed,
+                                const Parsed& base_parsed,
                                 const base::char16* relative,
                                 int relative_length,
-                                url_canon::CharsetConverter* charset_converter,
-                                url_canon::CanonOutput* output,
-                                url_parse::Parsed* output_parsed);
+                                CharsetConverter* charset_converter,
+                                CanonOutput* output,
+                                Parsed* output_parsed);
 
 // Replaces components in the given VALID input url. The new canonical URL info
 // is written to output and out_parsed.
 //
 // Returns true if the resulting URL is valid.
+URL_EXPORT bool ReplaceComponents(const char* spec,
+                                  int spec_len,
+                                  const Parsed& parsed,
+                                  const Replacements<char>& replacements,
+                                  CharsetConverter* charset_converter,
+                                  CanonOutput* output,
+                                  Parsed* out_parsed);
 URL_EXPORT bool ReplaceComponents(
     const char* spec,
     int spec_len,
-    const url_parse::Parsed& parsed,
-    const url_canon::Replacements<char>& replacements,
-    url_canon::CharsetConverter* charset_converter,
-    url_canon::CanonOutput* output,
-    url_parse::Parsed* out_parsed);
-URL_EXPORT bool ReplaceComponents(
-    const char* spec,
-    int spec_len,
-    const url_parse::Parsed& parsed,
-    const url_canon::Replacements<base::char16>& replacements,
-    url_canon::CharsetConverter* charset_converter,
-    url_canon::CanonOutput* output,
-    url_parse::Parsed* out_parsed);
+    const Parsed& parsed,
+    const Replacements<base::char16>& replacements,
+    CharsetConverter* charset_converter,
+    CanonOutput* output,
+    Parsed* out_parsed);
 
 // String helper functions ----------------------------------------------------
 
@@ -191,15 +189,16 @@
                                      const char* b);
 
 // Unescapes the given string using URL escaping rules.
-URL_EXPORT void DecodeURLEscapeSequences(const char* input, int length,
-                                         url_canon::CanonOutputW* output);
+URL_EXPORT void DecodeURLEscapeSequences(const char* input,
+                                         int length,
+                                         CanonOutputW* output);
 
 // Escapes the given string as defined by the JS method encodeURIComponent.  See
 // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/encodeURIComponent
-URL_EXPORT void EncodeURIComponent(const char* input, int length,
-                                   url_canon::CanonOutput* output);
+URL_EXPORT void EncodeURIComponent(const char* input,
+                                   int length,
+                                   CanonOutput* output);
 
-
-}  // namespace url_util
+}  // namespace url
 
 #endif  // URL_URL_UTIL_H_
diff --git a/url/url_util_internal.h b/url/url_util_internal.h
index af91389..c6274cc 100644
--- a/url/url_util_internal.h
+++ b/url/url_util_internal.h
@@ -10,7 +10,7 @@
 #include "base/strings/string16.h"
 #include "url/url_parse.h"
 
-namespace url_util {
+namespace url {
 
 extern const char kFileScheme[];
 extern const char kFileSystemScheme[];
@@ -19,12 +19,12 @@
 // Given a string and a range inside the string, compares it to the given
 // lower-case |compare_to| buffer.
 bool CompareSchemeComponent(const char* spec,
-                            const url_parse::Component& component,
+                            const Component& component,
                             const char* compare_to);
 bool CompareSchemeComponent(const base::char16* spec,
-                            const url_parse::Component& component,
+                            const Component& component,
                             const char* compare_to);
 
-}  // namespace url_util
+}  // namespace url
 
 #endif  // URL_URL_UTIL_INTERNAL_H_
diff --git a/url/url_util_unittest.cc b/url/url_util_unittest.cc
index 70adc5b..f84b70d 100644
--- a/url/url_util_unittest.cc
+++ b/url/url_util_unittest.cc
@@ -9,102 +9,95 @@
 #include "url/url_test_utils.h"
 #include "url/url_util.h"
 
+namespace url {
+
 TEST(URLUtilTest, FindAndCompareScheme) {
-  url_parse::Component found_scheme;
+  Component found_scheme;
 
   // Simple case where the scheme is found and matches.
   const char kStr1[] = "http://www.com/";
-  EXPECT_TRUE(url_util::FindAndCompareScheme(
+  EXPECT_TRUE(FindAndCompareScheme(
       kStr1, static_cast<int>(strlen(kStr1)), "http", NULL));
-  EXPECT_TRUE(url_util::FindAndCompareScheme(
+  EXPECT_TRUE(FindAndCompareScheme(
       kStr1, static_cast<int>(strlen(kStr1)), "http", &found_scheme));
-  EXPECT_TRUE(found_scheme == url_parse::Component(0, 4));
+  EXPECT_TRUE(found_scheme == Component(0, 4));
 
   // A case where the scheme is found and doesn't match.
-  EXPECT_FALSE(url_util::FindAndCompareScheme(
+  EXPECT_FALSE(FindAndCompareScheme(
       kStr1, static_cast<int>(strlen(kStr1)), "https", &found_scheme));
-  EXPECT_TRUE(found_scheme == url_parse::Component(0, 4));
+  EXPECT_TRUE(found_scheme == Component(0, 4));
 
   // A case where there is no scheme.
   const char kStr2[] = "httpfoobar";
-  EXPECT_FALSE(url_util::FindAndCompareScheme(
+  EXPECT_FALSE(FindAndCompareScheme(
       kStr2, static_cast<int>(strlen(kStr2)), "http", &found_scheme));
-  EXPECT_TRUE(found_scheme == url_parse::Component());
+  EXPECT_TRUE(found_scheme == Component());
 
   // When there is an empty scheme, it should match the empty scheme.
   const char kStr3[] = ":foo.com/";
-  EXPECT_TRUE(url_util::FindAndCompareScheme(
+  EXPECT_TRUE(FindAndCompareScheme(
       kStr3, static_cast<int>(strlen(kStr3)), "", &found_scheme));
-  EXPECT_TRUE(found_scheme == url_parse::Component(0, 0));
+  EXPECT_TRUE(found_scheme == Component(0, 0));
 
   // But when there is no scheme, it should fail.
-  EXPECT_FALSE(url_util::FindAndCompareScheme("", 0, "", &found_scheme));
-  EXPECT_TRUE(found_scheme == url_parse::Component());
+  EXPECT_FALSE(FindAndCompareScheme("", 0, "", &found_scheme));
+  EXPECT_TRUE(found_scheme == Component());
 
   // When there is a whitespace char in scheme, it should canonicalize the url
   // before comparison.
   const char whtspc_str[] = " \r\n\tjav\ra\nscri\tpt:alert(1)";
-  EXPECT_TRUE(url_util::FindAndCompareScheme(
-      whtspc_str, static_cast<int>(strlen(whtspc_str)), "javascript",
-      &found_scheme));
-  EXPECT_TRUE(found_scheme == url_parse::Component(1, 10));
+  EXPECT_TRUE(FindAndCompareScheme(whtspc_str,
+                                   static_cast<int>(strlen(whtspc_str)),
+                                   "javascript", &found_scheme));
+  EXPECT_TRUE(found_scheme == Component(1, 10));
 
   // Control characters should be stripped out on the ends, and kept in the
   // middle.
   const char ctrl_str[] = "\02jav\02scr\03ipt:alert(1)";
-  EXPECT_FALSE(url_util::FindAndCompareScheme(
-      ctrl_str, static_cast<int>(strlen(ctrl_str)), "javascript",
-      &found_scheme));
-  EXPECT_TRUE(found_scheme == url_parse::Component(1, 11));
+  EXPECT_FALSE(FindAndCompareScheme(ctrl_str,
+                                    static_cast<int>(strlen(ctrl_str)),
+                                    "javascript", &found_scheme));
+  EXPECT_TRUE(found_scheme == Component(1, 11));
 }
 
 TEST(URLUtilTest, ReplaceComponents) {
-  url_parse::Parsed parsed;
-  url_canon::RawCanonOutputT<char> output;
-  url_parse::Parsed new_parsed;
+  Parsed parsed;
+  RawCanonOutputT<char> output;
+  Parsed new_parsed;
 
   // Check that the following calls do not cause crash
-  url_canon::Replacements<char> replacements;
-  replacements.SetRef("test", url_parse::Component(0, 4));
-  url_util::ReplaceComponents(NULL, 0, parsed, replacements, NULL, &output,
-                              &new_parsed);
-  url_util::ReplaceComponents("", 0, parsed, replacements, NULL, &output,
-                              &new_parsed);
+  Replacements<char> replacements;
+  replacements.SetRef("test", Component(0, 4));
+  ReplaceComponents(NULL, 0, parsed, replacements, NULL, &output, &new_parsed);
+  ReplaceComponents("", 0, parsed, replacements, NULL, &output, &new_parsed);
   replacements.ClearRef();
-  replacements.SetHost("test", url_parse::Component(0, 4));
-  url_util::ReplaceComponents(NULL, 0, parsed, replacements, NULL, &output,
-                              &new_parsed);
-  url_util::ReplaceComponents("", 0, parsed, replacements, NULL, &output,
-                              &new_parsed);
+  replacements.SetHost("test", Component(0, 4));
+  ReplaceComponents(NULL, 0, parsed, replacements, NULL, &output, &new_parsed);
+  ReplaceComponents("", 0, parsed, replacements, NULL, &output, &new_parsed);
 
   replacements.ClearHost();
-  url_util::ReplaceComponents(NULL, 0, parsed, replacements, NULL, &output,
-                              &new_parsed);
-  url_util::ReplaceComponents("", 0, parsed, replacements, NULL, &output,
-                              &new_parsed);
-  url_util::ReplaceComponents(NULL, 0, parsed, replacements, NULL, &output,
-                              &new_parsed);
-  url_util::ReplaceComponents("", 0, parsed, replacements, NULL, &output,
-                              &new_parsed);
+  ReplaceComponents(NULL, 0, parsed, replacements, NULL, &output, &new_parsed);
+  ReplaceComponents("", 0, parsed, replacements, NULL, &output, &new_parsed);
+  ReplaceComponents(NULL, 0, parsed, replacements, NULL, &output, &new_parsed);
+  ReplaceComponents("", 0, parsed, replacements, NULL, &output, &new_parsed);
 }
 
 static std::string CheckReplaceScheme(const char* base_url,
                                       const char* scheme) {
   // Make sure the input is canonicalized.
-  url_canon::RawCanonOutput<32> original;
-  url_parse::Parsed original_parsed;
-  url_util::Canonicalize(base_url, strlen(base_url), true, NULL,
-                         &original, &original_parsed);
+  RawCanonOutput<32> original;
+  Parsed original_parsed;
+  Canonicalize(base_url, strlen(base_url), true, NULL, &original,
+               &original_parsed);
 
-  url_canon::Replacements<char> replacements;
-  replacements.SetScheme(scheme, url_parse::Component(0, strlen(scheme)));
+  Replacements<char> replacements;
+  replacements.SetScheme(scheme, Component(0, strlen(scheme)));
 
   std::string output_string;
-  url_canon::StdStringCanonOutput output(&output_string);
-  url_parse::Parsed output_parsed;
-  url_util::ReplaceComponents(original.data(), original.length(),
-                              original_parsed, replacements, NULL,
-                              &output, &output_parsed);
+  StdStringCanonOutput output(&output_string);
+  Parsed output_parsed;
+  ReplaceComponents(original.data(), original.length(), original_parsed,
+                    replacements, NULL, &output, &output_parsed);
 
   output.Complete();
   return output_string;
@@ -168,28 +161,26 @@
 
   for (size_t i = 0; i < ARRAYSIZE_UNSAFE(decode_cases); i++) {
     const char* input = decode_cases[i].input;
-    url_canon::RawCanonOutputT<base::char16> output;
-    url_util::DecodeURLEscapeSequences(input, strlen(input), &output);
+    RawCanonOutputT<base::char16> output;
+    DecodeURLEscapeSequences(input, strlen(input), &output);
     EXPECT_EQ(decode_cases[i].output,
-              url_test_utils::ConvertUTF16ToUTF8(
-                base::string16(output.data(), output.length())));
+              test_utils::ConvertUTF16ToUTF8(base::string16(output.data(),
+                                                            output.length())));
   }
 
   // Our decode should decode %00
   const char zero_input[] = "%00";
-  url_canon::RawCanonOutputT<base::char16> zero_output;
-  url_util::DecodeURLEscapeSequences(zero_input, strlen(zero_input),
-                                     &zero_output);
-  EXPECT_NE("%00",
-            url_test_utils::ConvertUTF16ToUTF8(
-              base::string16(zero_output.data(), zero_output.length())));
+  RawCanonOutputT<base::char16> zero_output;
+  DecodeURLEscapeSequences(zero_input, strlen(zero_input), &zero_output);
+  EXPECT_NE("%00", test_utils::ConvertUTF16ToUTF8(
+      base::string16(zero_output.data(), zero_output.length())));
 
   // Test the error behavior for invalid UTF-8.
   const char invalid_input[] = "%e4%a0%e5%a5%bd";
   const base::char16 invalid_expected[4] = {0x00e4, 0x00a0, 0x597d, 0};
-  url_canon::RawCanonOutputT<base::char16> invalid_output;
-  url_util::DecodeURLEscapeSequences(invalid_input, strlen(invalid_input),
-                                     &invalid_output);
+  RawCanonOutputT<base::char16> invalid_output;
+  DecodeURLEscapeSequences(invalid_input, strlen(invalid_input),
+                           &invalid_output);
   EXPECT_EQ(base::string16(invalid_expected),
             base::string16(invalid_output.data(), invalid_output.length()));
 }
@@ -220,15 +211,15 @@
 
   for (size_t i = 0; i < ARRAYSIZE_UNSAFE(encode_cases); i++) {
     const char* input = encode_cases[i].input;
-    url_canon::RawCanonOutputT<char> buffer;
-    url_util::EncodeURIComponent(input, strlen(input), &buffer);
+    RawCanonOutputT<char> buffer;
+    EncodeURIComponent(input, strlen(input), &buffer);
     std::string output(buffer.data(), buffer.length());
     EXPECT_EQ(encode_cases[i].output, output);
   }
 }
 
 TEST(URLUtilTest, TestResolveRelativeWithNonStandardBase) {
-  // This tests non-standard (in the sense that GURL::IsStandard() == false)
+  // This tests non-standard (in the sense that GIsStandard() == false)
   // hierarchical schemes.
   struct ResolveRelativeCase {
     const char* base;
@@ -285,18 +276,16 @@
 
   for (size_t i = 0; i < ARRAYSIZE_UNSAFE(resolve_non_standard_cases); i++) {
     const ResolveRelativeCase& test_data = resolve_non_standard_cases[i];
-    url_parse::Parsed base_parsed;
-    url_parse::ParsePathURL(test_data.base, strlen(test_data.base), false,
-                            &base_parsed);
+    Parsed base_parsed;
+    ParsePathURL(test_data.base, strlen(test_data.base), false, &base_parsed);
 
     std::string resolved;
-    url_canon::StdStringCanonOutput output(&resolved);
-    url_parse::Parsed resolved_parsed;
-    bool valid =
-        url_util::ResolveRelative(test_data.base, strlen(test_data.base),
-                                  base_parsed,
-                                  test_data.rel, strlen(test_data.rel),
-                                  NULL, &output, &resolved_parsed);
+    StdStringCanonOutput output(&resolved);
+    Parsed resolved_parsed;
+    bool valid = ResolveRelative(test_data.base, strlen(test_data.base),
+                                 base_parsed, test_data.rel,
+                                 strlen(test_data.rel), NULL, &output,
+                                 &resolved_parsed);
     output.Complete();
 
     EXPECT_EQ(test_data.is_valid, valid) << i;
@@ -304,3 +293,5 @@
       EXPECT_EQ(test_data.out, resolved) << i;
   }
 }
+
+}  // namespace url
diff --git a/webkit/browser/appcache/appcache_group.h b/webkit/browser/appcache/appcache_group.h
index fda3212..04bbd10 100644
--- a/webkit/browser/appcache/appcache_group.h
+++ b/webkit/browser/appcache/appcache_group.h
@@ -24,6 +24,7 @@
 FORWARD_DECLARE_TEST(AppCacheUpdateJobTest, AlreadyChecking);
 FORWARD_DECLARE_TEST(AppCacheUpdateJobTest, AlreadyDownloading);
 class AppCacheUpdateJobTest;
+class MockAppCacheStorage;
 }
 
 namespace appcache {
@@ -105,8 +106,8 @@
 
   friend class base::RefCounted<AppCacheGroup>;
   friend class content::AppCacheUpdateJobTest;
+  friend class content::MockAppCacheStorage;  // for old_caches()
   friend class AppCacheUpdateJob;
-  friend class MockAppCacheStorage;  // for old_caches()
 
   ~AppCacheGroup();
 
diff --git a/webkit/browser/appcache/appcache_response.h b/webkit/browser/appcache/appcache_response.h
index 610bdf4..6829fe6 100644
--- a/webkit/browser/appcache/appcache_response.h
+++ b/webkit/browser/appcache/appcache_response.h
@@ -19,6 +19,10 @@
 class IOBuffer;
 }
 
+namespace content {
+class MockAppCacheStorage;
+}
+
 namespace appcache {
 
 class AppCacheStorage;
@@ -170,7 +174,7 @@
 
  protected:
   friend class AppCacheStorageImpl;
-  friend class MockAppCacheStorage;
+  friend class content::MockAppCacheStorage;
 
   // Should only be constructed by the storage class.
   AppCacheResponseReader(int64 response_id,
@@ -228,7 +232,7 @@
 
  private:
   friend class AppCacheStorageImpl;
-  friend class MockAppCacheStorage;
+  friend class content::MockAppCacheStorage;
 
   enum CreationPhase {
     NO_ATTEMPT,
diff --git a/webkit/browser/appcache/mock_appcache_service.cc b/webkit/browser/appcache/mock_appcache_service.cc
deleted file mode 100644
index fa3d26f..0000000
--- a/webkit/browser/appcache/mock_appcache_service.cc
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright (c) 2011 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 "webkit/browser/appcache/mock_appcache_service.h"
-
-#include "base/bind.h"
-#include "base/message_loop/message_loop.h"
-
-namespace appcache {
-
-static void DeferredCallCallback(
-    const net::CompletionCallback& callback, int rv) {
-  callback.Run(rv);
-}
-
-void MockAppCacheService::DeleteAppCachesForOrigin(
-    const GURL& origin, const net::CompletionCallback& callback) {
-  ++delete_called_count_;
-  base::MessageLoop::current()->PostTask(
-      FROM_HERE,
-      base::Bind(&DeferredCallCallback,
-                 callback,
-                 mock_delete_appcaches_for_origin_result_));
-}
-
-}  // namespace appcache
diff --git a/webkit/browser/appcache/mock_appcache_service.h b/webkit/browser/appcache/mock_appcache_service.h
deleted file mode 100644
index 4c8cfa5..0000000
--- a/webkit/browser/appcache/mock_appcache_service.h
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright (c) 2011 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 WEBKIT_BROWSER_APPCACHE_MOCK_APPCACHE_SERVICE_H_
-#define WEBKIT_BROWSER_APPCACHE_MOCK_APPCACHE_SERVICE_H_
-
-#include "base/compiler_specific.h"
-#include "webkit/browser/appcache/appcache_service.h"
-#include "webkit/browser/appcache/mock_appcache_storage.h"
-#include "webkit/browser/quota/quota_manager.h"
-
-namespace appcache {
-
-// For use by unit tests.
-class MockAppCacheService : public AppCacheService {
- public:
-  MockAppCacheService()
-    : AppCacheService(NULL),
-      mock_delete_appcaches_for_origin_result_(net::OK),
-      delete_called_count_(0) {
-    storage_.reset(new MockAppCacheStorage(this));
-  }
-
-  // Just returns a canned completion code without actually
-  // removing groups and caches in our mock storage instance.
-  virtual void DeleteAppCachesForOrigin(
-      const GURL& origin,
-      const net::CompletionCallback& callback) OVERRIDE;
-
-  void set_quota_manager_proxy(quota::QuotaManagerProxy* proxy) {
-    quota_manager_proxy_ = proxy;
-  }
-
-  void set_mock_delete_appcaches_for_origin_result(int rv) {
-    mock_delete_appcaches_for_origin_result_ = rv;
-  }
-
-  int delete_called_count() const { return delete_called_count_; }
-
- private:
-  int mock_delete_appcaches_for_origin_result_;
-  int delete_called_count_;
-};
-
-}  // namespace appcache
-
-#endif  // WEBKIT_BROWSER_APPCACHE_MOCK_APPCACHE_SERVICE_H_
diff --git a/webkit/browser/appcache/mock_appcache_storage.cc b/webkit/browser/appcache/mock_appcache_storage.cc
deleted file mode 100644
index 7611b90..0000000
--- a/webkit/browser/appcache/mock_appcache_storage.cc
+++ /dev/null
@@ -1,543 +0,0 @@
-// Copyright (c) 2011 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 "webkit/browser/appcache/mock_appcache_storage.h"
-
-#include "base/bind.h"
-#include "base/logging.h"
-#include "base/memory/ref_counted.h"
-#include "base/message_loop/message_loop.h"
-#include "base/stl_util.h"
-#include "webkit/browser/appcache/appcache.h"
-#include "webkit/browser/appcache/appcache_entry.h"
-#include "webkit/browser/appcache/appcache_group.h"
-#include "webkit/browser/appcache/appcache_response.h"
-#include "webkit/browser/appcache/appcache_service.h"
-
-// This is a quick and easy 'mock' implementation of the storage interface
-// that doesn't put anything to disk.
-//
-// We simply add an extra reference to objects when they're put in storage,
-// and remove the extra reference when they are removed from storage.
-// Responses are never really removed from the in-memory disk cache.
-// Delegate callbacks are made asyncly to appropiately mimic what will
-// happen with a real disk-backed storage impl that involves IO on a
-// background thread.
-
-namespace appcache {
-
-MockAppCacheStorage::MockAppCacheStorage(AppCacheService* service)
-    : AppCacheStorage(service),
-      simulate_make_group_obsolete_failure_(false),
-      simulate_store_group_and_newest_cache_failure_(false),
-      simulate_find_main_resource_(false),
-      simulate_find_sub_resource_(false),
-      simulated_found_cache_id_(kNoCacheId),
-      simulated_found_group_id_(0),
-      simulated_found_network_namespace_(false),
-      weak_factory_(this) {
-  last_cache_id_ = 0;
-  last_group_id_ = 0;
-  last_response_id_ = 0;
-}
-
-MockAppCacheStorage::~MockAppCacheStorage() {
-}
-
-void MockAppCacheStorage::GetAllInfo(Delegate* delegate) {
-  ScheduleTask(
-      base::Bind(&MockAppCacheStorage::ProcessGetAllInfo,
-                 weak_factory_.GetWeakPtr(),
-                 make_scoped_refptr(GetOrCreateDelegateReference(delegate))));
-}
-
-void MockAppCacheStorage::LoadCache(int64 id, Delegate* delegate) {
-  DCHECK(delegate);
-  AppCache* cache = working_set_.GetCache(id);
-  if (ShouldCacheLoadAppearAsync(cache)) {
-    ScheduleTask(
-        base::Bind(&MockAppCacheStorage::ProcessLoadCache,
-                   weak_factory_.GetWeakPtr(), id,
-                   make_scoped_refptr(GetOrCreateDelegateReference(delegate))));
-    return;
-  }
-  ProcessLoadCache(id, GetOrCreateDelegateReference(delegate));
-}
-
-void MockAppCacheStorage::LoadOrCreateGroup(
-    const GURL& manifest_url, Delegate* delegate) {
-  DCHECK(delegate);
-  AppCacheGroup* group = working_set_.GetGroup(manifest_url);
-  if (ShouldGroupLoadAppearAsync(group)) {
-    ScheduleTask(
-        base::Bind(&MockAppCacheStorage::ProcessLoadOrCreateGroup,
-                   weak_factory_.GetWeakPtr(), manifest_url,
-                   make_scoped_refptr(GetOrCreateDelegateReference(delegate))));
-    return;
-  }
-  ProcessLoadOrCreateGroup(
-      manifest_url, GetOrCreateDelegateReference(delegate));
-}
-
-void MockAppCacheStorage::StoreGroupAndNewestCache(
-    AppCacheGroup* group, AppCache* newest_cache, Delegate* delegate) {
-  DCHECK(group && delegate && newest_cache);
-
-  // Always make this operation look async.
-  ScheduleTask(
-      base::Bind(&MockAppCacheStorage::ProcessStoreGroupAndNewestCache,
-                 weak_factory_.GetWeakPtr(), make_scoped_refptr(group),
-                 make_scoped_refptr(newest_cache),
-                 make_scoped_refptr(GetOrCreateDelegateReference(delegate))));
-}
-
-void MockAppCacheStorage::FindResponseForMainRequest(
-    const GURL& url, const GURL& preferred_manifest_url, Delegate* delegate) {
-  DCHECK(delegate);
-
-  // Note: MockAppCacheStorage does not respect the preferred_manifest_url.
-
-  // Always make this operation look async.
-  ScheduleTask(
-      base::Bind(&MockAppCacheStorage::ProcessFindResponseForMainRequest,
-                 weak_factory_.GetWeakPtr(), url,
-                 make_scoped_refptr(GetOrCreateDelegateReference(delegate))));
-}
-
-void MockAppCacheStorage::FindResponseForSubRequest(
-    AppCache* cache, const GURL& url,
-    AppCacheEntry* found_entry, AppCacheEntry* found_fallback_entry,
-    bool* found_network_namespace) {
-  DCHECK(cache && cache->is_complete());
-
-  // This layer of indirection is here to facilitate testing.
-  if (simulate_find_sub_resource_) {
-    *found_entry = simulated_found_entry_;
-    *found_fallback_entry = simulated_found_fallback_entry_;
-    *found_network_namespace = simulated_found_network_namespace_;
-    simulate_find_sub_resource_ = false;
-    return;
-  }
-
-  GURL fallback_namespace_not_used;
-  GURL intercept_namespace_not_used;
-  cache->FindResponseForRequest(
-      url, found_entry, &intercept_namespace_not_used,
-      found_fallback_entry,  &fallback_namespace_not_used,
-      found_network_namespace);
-}
-
-void MockAppCacheStorage::MarkEntryAsForeign(
-    const GURL& entry_url, int64 cache_id) {
-  AppCache* cache = working_set_.GetCache(cache_id);
-  if (cache) {
-    AppCacheEntry* entry = cache->GetEntry(entry_url);
-    DCHECK(entry);
-    if (entry)
-      entry->add_types(AppCacheEntry::FOREIGN);
-  }
-}
-
-void MockAppCacheStorage::MakeGroupObsolete(AppCacheGroup* group,
-                                            Delegate* delegate,
-                                            int response_code) {
-  DCHECK(group && delegate);
-
-  // Always make this method look async.
-  ScheduleTask(
-      base::Bind(&MockAppCacheStorage::ProcessMakeGroupObsolete,
-                 weak_factory_.GetWeakPtr(),
-                 make_scoped_refptr(group),
-                 make_scoped_refptr(GetOrCreateDelegateReference(delegate)),
-                 response_code));
-}
-
-AppCacheResponseReader* MockAppCacheStorage::CreateResponseReader(
-    const GURL& manifest_url, int64 group_id, int64 response_id) {
-  if (simulated_reader_)
-    return simulated_reader_.release();
-  return new AppCacheResponseReader(response_id, group_id, disk_cache());
-}
-
-AppCacheResponseWriter* MockAppCacheStorage::CreateResponseWriter(
-    const GURL& manifest_url, int64 group_id) {
-  return new AppCacheResponseWriter(NewResponseId(),  group_id, disk_cache());
-}
-
-void MockAppCacheStorage::DoomResponses(
-    const GURL& manifest_url, const std::vector<int64>& response_ids) {
-  DeleteResponses(manifest_url, response_ids);
-}
-
-void MockAppCacheStorage::DeleteResponses(
-    const GURL& manifest_url, const std::vector<int64>& response_ids) {
-  // We don't bother with actually removing responses from the disk-cache,
-  // just keep track of which ids have been doomed or deleted
-  std::vector<int64>::const_iterator it = response_ids.begin();
-  while (it != response_ids.end()) {
-    doomed_response_ids_.insert(*it);
-    ++it;
-  }
-}
-
-void MockAppCacheStorage::ProcessGetAllInfo(
-    scoped_refptr<DelegateReference> delegate_ref) {
-  if (delegate_ref->delegate)
-    delegate_ref->delegate->OnAllInfo(simulated_appcache_info_.get());
-}
-
-void MockAppCacheStorage::ProcessLoadCache(
-    int64 id, scoped_refptr<DelegateReference> delegate_ref) {
-  AppCache* cache = working_set_.GetCache(id);
-  if (delegate_ref->delegate)
-    delegate_ref->delegate->OnCacheLoaded(cache, id);
-}
-
-void MockAppCacheStorage::ProcessLoadOrCreateGroup(
-    const GURL& manifest_url, scoped_refptr<DelegateReference> delegate_ref) {
-  scoped_refptr<AppCacheGroup> group(working_set_.GetGroup(manifest_url));
-
-  // Newly created groups are not put in the stored_groups collection
-  // until StoreGroupAndNewestCache is called.
-  if (!group.get())
-    group = new AppCacheGroup(service_->storage(), manifest_url, NewGroupId());
-
-  if (delegate_ref->delegate)
-    delegate_ref->delegate->OnGroupLoaded(group.get(), manifest_url);
-}
-
-void MockAppCacheStorage::ProcessStoreGroupAndNewestCache(
-    scoped_refptr<AppCacheGroup> group,
-    scoped_refptr<AppCache> newest_cache,
-    scoped_refptr<DelegateReference> delegate_ref) {
-  Delegate* delegate = delegate_ref->delegate;
-  if (simulate_store_group_and_newest_cache_failure_) {
-    if (delegate)
-      delegate->OnGroupAndNewestCacheStored(
-          group.get(), newest_cache.get(), false, false);
-    return;
-  }
-
-  AddStoredGroup(group.get());
-  if (newest_cache.get() != group->newest_complete_cache()) {
-    newest_cache->set_complete(true);
-    group->AddCache(newest_cache.get());
-    AddStoredCache(newest_cache.get());
-
-    // Copy the collection prior to removal, on final release
-    // of a cache the group's collection will change.
-    AppCacheGroup::Caches copy = group->old_caches();
-    RemoveStoredCaches(copy);
-  }
-
-  if (delegate)
-    delegate->OnGroupAndNewestCacheStored(
-        group.get(), newest_cache.get(), true, false);
-}
-
-namespace {
-
-struct FoundCandidate {
-  GURL namespace_entry_url;
-  AppCacheEntry entry;
-  int64 cache_id;
-  int64 group_id;
-  GURL manifest_url;
-  bool is_cache_in_use;
-
-  FoundCandidate()
-      : cache_id(kNoCacheId), group_id(0), is_cache_in_use(false) {}
-};
-
-void MaybeTakeNewNamespaceEntry(
-    NamespaceType namespace_type,
-    const AppCacheEntry &entry,
-    const GURL& namespace_url,
-    bool cache_is_in_use,
-    FoundCandidate* best_candidate,
-    GURL* best_candidate_namespace,
-    AppCache* cache,
-    AppCacheGroup* group) {
-  DCHECK(entry.has_response_id());
-
-  bool take_new_entry = true;
-
-  // Does the new candidate entry trump our current best candidate?
-  if (best_candidate->entry.has_response_id()) {
-    // Longer namespace prefix matches win.
-    size_t candidate_length =
-        namespace_url.spec().length();
-    size_t best_length =
-        best_candidate_namespace->spec().length();
-
-    if (candidate_length > best_length) {
-      take_new_entry = true;
-    } else if (candidate_length == best_length &&
-               cache_is_in_use && !best_candidate->is_cache_in_use) {
-      take_new_entry = true;
-    } else {
-      take_new_entry = false;
-    }
-  }
-
-  if (take_new_entry) {
-    if (namespace_type == FALLBACK_NAMESPACE) {
-      best_candidate->namespace_entry_url =
-          cache->GetFallbackEntryUrl(namespace_url);
-    } else {
-      best_candidate->namespace_entry_url =
-          cache->GetInterceptEntryUrl(namespace_url);
-    }
-    best_candidate->entry = entry;
-    best_candidate->cache_id = cache->cache_id();
-    best_candidate->group_id = group->group_id();
-    best_candidate->manifest_url = group->manifest_url();
-    best_candidate->is_cache_in_use = cache_is_in_use;
-    *best_candidate_namespace = namespace_url;
-  }
-}
-}  // namespace
-
-void MockAppCacheStorage::ProcessFindResponseForMainRequest(
-    const GURL& url, scoped_refptr<DelegateReference> delegate_ref) {
-  if (simulate_find_main_resource_) {
-    simulate_find_main_resource_ = false;
-    if (delegate_ref->delegate) {
-      delegate_ref->delegate->OnMainResponseFound(
-          url, simulated_found_entry_,
-          simulated_found_fallback_url_, simulated_found_fallback_entry_,
-          simulated_found_cache_id_, simulated_found_group_id_,
-          simulated_found_manifest_url_);
-    }
-    return;
-  }
-
-  // This call has no persistent side effects, if the delegate has gone
-  // away, we can just bail out early.
-  if (!delegate_ref->delegate)
-    return;
-
-  // TODO(michaeln): The heuristics around choosing amoungst
-  // multiple candidates is under specified, and just plain
-  // not fully understood. Refine these over time. In particular,
-  // * prefer candidates from newer caches
-  // * take into account the cache associated with the document
-  //   that initiated the navigation
-  // * take into account the cache associated with the document
-  //   currently residing in the frame being navigated
-  FoundCandidate found_candidate;
-  GURL found_intercept_candidate_namespace;
-  FoundCandidate found_fallback_candidate;
-  GURL found_fallback_candidate_namespace;
-
-  for (StoredGroupMap::const_iterator it = stored_groups_.begin();
-       it != stored_groups_.end(); ++it) {
-    AppCacheGroup* group = it->second.get();
-    AppCache* cache = group->newest_complete_cache();
-    if (group->is_obsolete() || !cache ||
-        (url.GetOrigin() != group->manifest_url().GetOrigin())) {
-      continue;
-    }
-
-    AppCacheEntry found_entry;
-    AppCacheEntry found_fallback_entry;
-    GURL found_intercept_namespace;
-    GURL found_fallback_namespace;
-    bool ignore_found_network_namespace = false;
-    bool found = cache->FindResponseForRequest(
-                            url, &found_entry, &found_intercept_namespace,
-                            &found_fallback_entry, &found_fallback_namespace,
-                            &ignore_found_network_namespace);
-
-    // 6.11.1 Navigating across documents, Step 10.
-    // Network namespacing doesn't apply to main resource loads,
-    // and foreign entries are excluded.
-    if (!found || ignore_found_network_namespace ||
-        (found_entry.has_response_id() && found_entry.IsForeign()) ||
-        (found_fallback_entry.has_response_id() &&
-         found_fallback_entry.IsForeign())) {
-      continue;
-    }
-
-    // We have a bias for hits from caches that are in use.
-    bool is_in_use = IsCacheStored(cache) && !cache->HasOneRef();
-
-    if (found_entry.has_response_id() &&
-        found_intercept_namespace.is_empty()) {
-      found_candidate.namespace_entry_url = GURL();
-      found_candidate.entry = found_entry;
-      found_candidate.cache_id = cache->cache_id();
-      found_candidate.group_id = group->group_id();
-      found_candidate.manifest_url = group->manifest_url();
-      found_candidate.is_cache_in_use = is_in_use;
-      if (is_in_use)
-        break;  // We break out of the loop with this direct hit.
-    } else if (found_entry.has_response_id() &&
-               !found_intercept_namespace.is_empty()) {
-      MaybeTakeNewNamespaceEntry(
-          INTERCEPT_NAMESPACE,
-          found_entry, found_intercept_namespace, is_in_use,
-          &found_candidate, &found_intercept_candidate_namespace,
-          cache, group);
-    } else {
-      DCHECK(found_fallback_entry.has_response_id());
-      MaybeTakeNewNamespaceEntry(
-          FALLBACK_NAMESPACE,
-          found_fallback_entry, found_fallback_namespace, is_in_use,
-          &found_fallback_candidate, &found_fallback_candidate_namespace,
-          cache, group);
-    }
-  }
-
-  // Found a direct hit or an intercept namespace hit.
-  if (found_candidate.entry.has_response_id()) {
-    delegate_ref->delegate->OnMainResponseFound(
-        url, found_candidate.entry, found_candidate.namespace_entry_url,
-        AppCacheEntry(),  found_candidate.cache_id, found_candidate.group_id,
-        found_candidate.manifest_url);
-    return;
-  }
-
-  // Found a fallback namespace.
-  if (found_fallback_candidate.entry.has_response_id()) {
-    delegate_ref->delegate->OnMainResponseFound(
-        url, AppCacheEntry(),
-        found_fallback_candidate.namespace_entry_url,
-        found_fallback_candidate.entry,
-        found_fallback_candidate.cache_id,
-        found_fallback_candidate.group_id,
-        found_fallback_candidate.manifest_url);
-    return;
-  }
-
-  // Didn't find anything.
-  delegate_ref->delegate->OnMainResponseFound(
-      url, AppCacheEntry(), GURL(), AppCacheEntry(), kNoCacheId, 0, GURL());
-}
-
-void MockAppCacheStorage::ProcessMakeGroupObsolete(
-    scoped_refptr<AppCacheGroup> group,
-    scoped_refptr<DelegateReference> delegate_ref,
-    int response_code) {
-  if (simulate_make_group_obsolete_failure_) {
-    if (delegate_ref->delegate)
-      delegate_ref->delegate->OnGroupMadeObsolete(
-          group.get(), false, response_code);
-    return;
-  }
-
-  RemoveStoredGroup(group.get());
-  if (group->newest_complete_cache())
-    RemoveStoredCache(group->newest_complete_cache());
-
-  // Copy the collection prior to removal, on final release
-  // of a cache the group's collection will change.
-  AppCacheGroup::Caches copy = group->old_caches();
-  RemoveStoredCaches(copy);
-
-  group->set_obsolete(true);
-
-  // Also remove from the working set, caches for an 'obsolete' group
-  // may linger in use, but the group itself cannot be looked up by
-  // 'manifest_url' in the working set any longer.
-  working_set()->RemoveGroup(group.get());
-
-  if (delegate_ref->delegate)
-    delegate_ref->delegate->OnGroupMadeObsolete(
-        group.get(), true, response_code);
-}
-
-void MockAppCacheStorage::ScheduleTask(const base::Closure& task) {
-  pending_tasks_.push_back(task);
-  base::MessageLoop::current()->PostTask(
-      FROM_HERE,
-      base::Bind(&MockAppCacheStorage::RunOnePendingTask,
-                 weak_factory_.GetWeakPtr()));
-}
-
-void MockAppCacheStorage::RunOnePendingTask() {
-  DCHECK(!pending_tasks_.empty());
-  base::Closure task = pending_tasks_.front();
-  pending_tasks_.pop_front();
-  task.Run();
-}
-
-void MockAppCacheStorage::AddStoredCache(AppCache* cache) {
-  int64 cache_id = cache->cache_id();
-  if (stored_caches_.find(cache_id) == stored_caches_.end()) {
-    stored_caches_.insert(
-        StoredCacheMap::value_type(cache_id, make_scoped_refptr(cache)));
-  }
-}
-
-void MockAppCacheStorage::RemoveStoredCache(AppCache* cache) {
-  // Do not remove from the working set, active caches are still usable
-  // and may be looked up by id until they fall out of use.
-  stored_caches_.erase(cache->cache_id());
-}
-
-void MockAppCacheStorage::RemoveStoredCaches(
-    const AppCacheGroup::Caches& caches) {
-  AppCacheGroup::Caches::const_iterator it = caches.begin();
-  while (it != caches.end()) {
-    RemoveStoredCache(*it);
-    ++it;
-  }
-}
-
-void MockAppCacheStorage::AddStoredGroup(AppCacheGroup* group) {
-  const GURL& url = group->manifest_url();
-  if (stored_groups_.find(url) == stored_groups_.end()) {
-    stored_groups_.insert(
-        StoredGroupMap::value_type(url, make_scoped_refptr(group)));
-  }
-}
-
-void MockAppCacheStorage::RemoveStoredGroup(AppCacheGroup* group) {
-  stored_groups_.erase(group->manifest_url());
-}
-
-bool MockAppCacheStorage::ShouldGroupLoadAppearAsync(
-    const AppCacheGroup* group) {
-  // We'll have to query the database to see if a group for the
-  // manifest_url exists on disk. So return true for async.
-  if (!group)
-    return true;
-
-  // Groups without a newest cache can't have been put to disk yet, so
-  // we can synchronously return a reference we have in the working set.
-  if (!group->newest_complete_cache())
-    return false;
-
-  // The LoadGroup interface implies also loading the newest cache, so
-  // if loading the newest cache should appear async, so too must the
-  // loading of this group.
-  if (!ShouldCacheLoadAppearAsync(group->newest_complete_cache()))
-    return false;
-
-
-  // If any of the old caches are "in use", then the group must also
-  // be memory resident and not require async loading.
-  const AppCacheGroup::Caches& old_caches = group->old_caches();
-  AppCacheGroup::Caches::const_iterator it = old_caches.begin();
-  while (it != old_caches.end()) {
-    // "in use" caches don't require async loading
-    if (!ShouldCacheLoadAppearAsync(*it))
-      return false;
-    ++it;
-  }
-
-  return true;
-}
-
-bool MockAppCacheStorage::ShouldCacheLoadAppearAsync(const AppCache* cache) {
-  if (!cache)
-    return true;
-
-  // If the 'stored' ref is the only ref, real storage will have to load from
-  // the database.
-  return IsCacheStored(cache) && cache->HasOneRef();
-}
-
-}  // namespace appcache
diff --git a/webkit/browser/appcache/mock_appcache_storage.h b/webkit/browser/appcache/mock_appcache_storage.h
deleted file mode 100644
index 3c65d8d..0000000
--- a/webkit/browser/appcache/mock_appcache_storage.h
+++ /dev/null
@@ -1,246 +0,0 @@
-// Copyright (c) 2011 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 WEBKIT_BROWSER_APPCACHE_MOCK_APPCACHE_STORAGE_H_
-#define WEBKIT_BROWSER_APPCACHE_MOCK_APPCACHE_STORAGE_H_
-
-#include <deque>
-#include <map>
-#include <vector>
-
-#include "base/callback.h"
-#include "base/containers/hash_tables.h"
-#include "base/gtest_prod_util.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/memory/weak_ptr.h"
-#include "webkit/browser/appcache/appcache.h"
-#include "webkit/browser/appcache/appcache_disk_cache.h"
-#include "webkit/browser/appcache/appcache_group.h"
-#include "webkit/browser/appcache/appcache_response.h"
-#include "webkit/browser/appcache/appcache_storage.h"
-
-namespace content {
-FORWARD_DECLARE_TEST(AppCacheServiceTest, DeleteAppCachesForOrigin);
-FORWARD_DECLARE_TEST(MockAppCacheStorageTest, BasicFindMainResponse);
-FORWARD_DECLARE_TEST(MockAppCacheStorageTest,
-                     BasicFindMainFallbackResponse);
-FORWARD_DECLARE_TEST(MockAppCacheStorageTest, CreateGroup);
-FORWARD_DECLARE_TEST(MockAppCacheStorageTest, FindMainResponseExclusions);
-FORWARD_DECLARE_TEST(MockAppCacheStorageTest,
-                     FindMainResponseWithMultipleCandidates);
-FORWARD_DECLARE_TEST(MockAppCacheStorageTest, LoadCache_FarHit);
-FORWARD_DECLARE_TEST(MockAppCacheStorageTest, LoadGroupAndCache_FarHit);
-FORWARD_DECLARE_TEST(MockAppCacheStorageTest, MakeGroupObsolete);
-FORWARD_DECLARE_TEST(MockAppCacheStorageTest, StoreNewGroup);
-FORWARD_DECLARE_TEST(MockAppCacheStorageTest, StoreExistingGroup);
-FORWARD_DECLARE_TEST(MockAppCacheStorageTest,
-                     StoreExistingGroupExistingCache);
-class AppCacheRequestHandlerTest;
-class AppCacheServiceTest;
-class MockAppCacheStorageTest;
-}
-
-namespace appcache {
-
-// For use in unit tests.
-// Note: This class is also being used to bootstrap our development efforts.
-// We can get layout tests up and running, and back fill with real storage
-// somewhat in parallel.
-class MockAppCacheStorage : public AppCacheStorage {
- public:
-  explicit MockAppCacheStorage(AppCacheService* service);
-  virtual ~MockAppCacheStorage();
-
-  virtual void GetAllInfo(Delegate* delegate) OVERRIDE;
-  virtual void LoadCache(int64 id, Delegate* delegate) OVERRIDE;
-  virtual void LoadOrCreateGroup(const GURL& manifest_url,
-                                 Delegate* delegate) OVERRIDE;
-  virtual void StoreGroupAndNewestCache(AppCacheGroup* group,
-                                        AppCache* newest_cache,
-                                        Delegate* delegate) OVERRIDE;
-  virtual void FindResponseForMainRequest(const GURL& url,
-                                          const GURL& preferred_manifest_url,
-                                          Delegate* delegate) OVERRIDE;
-  virtual void FindResponseForSubRequest(
-      AppCache* cache, const GURL& url,
-      AppCacheEntry* found_entry, AppCacheEntry* found_fallback_entry,
-      bool * found_network_namespace) OVERRIDE;
-  virtual void MarkEntryAsForeign(const GURL& entry_url,
-                                  int64 cache_id) OVERRIDE;
-  virtual void MakeGroupObsolete(AppCacheGroup* group,
-                                 Delegate* delegate,
-                                 int response_code) OVERRIDE;
-  virtual AppCacheResponseReader* CreateResponseReader(
-      const GURL& manifest_url, int64 group_id, int64 response_id) OVERRIDE;
-  virtual AppCacheResponseWriter* CreateResponseWriter(
-      const GURL& manifest_url, int64 group_id) OVERRIDE;
-  virtual void DoomResponses(
-      const GURL& manifest_url,
-      const std::vector<int64>& response_ids) OVERRIDE;
-  virtual void DeleteResponses(
-      const GURL& manifest_url,
-      const std::vector<int64>& response_ids) OVERRIDE;
-
- private:
-  friend class content::AppCacheRequestHandlerTest;
-  friend class content::AppCacheServiceTest;
-  friend class content::AppCacheUpdateJobTest;
-  friend class content::MockAppCacheStorageTest;
-
-  typedef base::hash_map<int64, scoped_refptr<AppCache> > StoredCacheMap;
-  typedef std::map<GURL, scoped_refptr<AppCacheGroup> > StoredGroupMap;
-  typedef std::set<int64> DoomedResponseIds;
-
-  void ProcessGetAllInfo(scoped_refptr<DelegateReference> delegate_ref);
-  void ProcessLoadCache(
-      int64 id, scoped_refptr<DelegateReference> delegate_ref);
-  void ProcessLoadOrCreateGroup(
-      const GURL& manifest_url, scoped_refptr<DelegateReference> delegate_ref);
-  void ProcessStoreGroupAndNewestCache(
-      scoped_refptr<AppCacheGroup> group, scoped_refptr<AppCache> newest_cache,
-      scoped_refptr<DelegateReference> delegate_ref);
-  void ProcessMakeGroupObsolete(scoped_refptr<AppCacheGroup> group,
-                                scoped_refptr<DelegateReference> delegate_ref,
-                                int response_code);
-  void ProcessFindResponseForMainRequest(
-      const GURL& url, scoped_refptr<DelegateReference> delegate_ref);
-
-  void ScheduleTask(const base::Closure& task);
-  void RunOnePendingTask();
-
-  void AddStoredCache(AppCache* cache);
-  void RemoveStoredCache(AppCache* cache);
-  void RemoveStoredCaches(const AppCacheGroup::Caches& caches);
-  bool IsCacheStored(const AppCache* cache) {
-    return stored_caches_.find(cache->cache_id()) != stored_caches_.end();
-  }
-
-  void AddStoredGroup(AppCacheGroup* group);
-  void RemoveStoredGroup(AppCacheGroup* group);
-  bool IsGroupStored(const AppCacheGroup* group) {
-    return IsGroupForManifestStored(group->manifest_url());
-  }
-  bool IsGroupForManifestStored(const GURL& manifest_url) {
-    return stored_groups_.find(manifest_url) != stored_groups_.end();
-  }
-
-  // These helpers determine when certain operations should complete
-  // asynchronously vs synchronously to faithfully mimic, or mock,
-  // the behavior of the real implemenation of the AppCacheStorage
-  // interface.
-  bool ShouldGroupLoadAppearAsync(const AppCacheGroup* group);
-  bool ShouldCacheLoadAppearAsync(const AppCache* cache);
-
-  // Lazily constructed in-memory disk cache.
-  AppCacheDiskCache* disk_cache() {
-    if (!disk_cache_) {
-      const int kMaxCacheSize = 10 * 1024 * 1024;
-      disk_cache_.reset(new AppCacheDiskCache);
-      disk_cache_->InitWithMemBackend(kMaxCacheSize, net::CompletionCallback());
-    }
-    return disk_cache_.get();
-  }
-
-  // Simulate failures for testing. Once set all subsequent calls
-  // to MakeGroupObsolete or StorageGroupAndNewestCache will fail.
-  void SimulateMakeGroupObsoleteFailure() {
-    simulate_make_group_obsolete_failure_ = true;
-  }
-  void SimulateStoreGroupAndNewestCacheFailure() {
-    simulate_store_group_and_newest_cache_failure_ = true;
-  }
-
-  // Simulate FindResponseFor results for testing. These
-  // provided values will be return on the next call to
-  // the corresponding Find method, subsequent calls are
-  // unaffected.
-  void SimulateFindMainResource(
-      const AppCacheEntry& entry,
-      const GURL& fallback_url,
-      const AppCacheEntry& fallback_entry,
-      int64 cache_id,
-      int64 group_id,
-      const GURL& manifest_url) {
-    simulate_find_main_resource_ = true;
-    simulate_find_sub_resource_ = false;
-    simulated_found_entry_ = entry;
-    simulated_found_fallback_url_ = fallback_url;
-    simulated_found_fallback_entry_ = fallback_entry;
-    simulated_found_cache_id_ = cache_id;
-    simulated_found_group_id_ = group_id;
-    simulated_found_manifest_url_ = manifest_url,
-    simulated_found_network_namespace_ = false;  // N/A to main resource loads
-  }
-  void SimulateFindSubResource(
-      const AppCacheEntry& entry,
-      const AppCacheEntry& fallback_entry,
-      bool network_namespace) {
-    simulate_find_main_resource_ = false;
-    simulate_find_sub_resource_ = true;
-    simulated_found_entry_ = entry;
-    simulated_found_fallback_entry_ = fallback_entry;
-    simulated_found_cache_id_ = kNoCacheId;  // N/A to sub resource loads
-    simulated_found_manifest_url_ = GURL();  // N/A to sub resource loads
-    simulated_found_group_id_ = 0;  // N/A to sub resource loads
-    simulated_found_network_namespace_ = network_namespace;
-  }
-
-  void SimulateGetAllInfo(AppCacheInfoCollection* info) {
-    simulated_appcache_info_ = info;
-  }
-
-  void SimulateResponseReader(AppCacheResponseReader* reader) {
-    simulated_reader_.reset(reader);
-  }
-
-  StoredCacheMap stored_caches_;
-  StoredGroupMap stored_groups_;
-  DoomedResponseIds doomed_response_ids_;
-  scoped_ptr<AppCacheDiskCache> disk_cache_;
-  std::deque<base::Closure> pending_tasks_;
-
-  bool simulate_make_group_obsolete_failure_;
-  bool simulate_store_group_and_newest_cache_failure_;
-
-  bool simulate_find_main_resource_;
-  bool simulate_find_sub_resource_;
-  AppCacheEntry simulated_found_entry_;
-  AppCacheEntry simulated_found_fallback_entry_;
-  int64 simulated_found_cache_id_;
-  int64 simulated_found_group_id_;
-  GURL simulated_found_fallback_url_;
-  GURL simulated_found_manifest_url_;
-  bool simulated_found_network_namespace_;
-  scoped_refptr<AppCacheInfoCollection> simulated_appcache_info_;
-  scoped_ptr<AppCacheResponseReader> simulated_reader_;
-
-  base::WeakPtrFactory<MockAppCacheStorage> weak_factory_;
-
-  FRIEND_TEST_ALL_PREFIXES(content::MockAppCacheStorageTest,
-                           BasicFindMainResponse);
-  FRIEND_TEST_ALL_PREFIXES(content::MockAppCacheStorageTest,
-                           BasicFindMainFallbackResponse);
-  FRIEND_TEST_ALL_PREFIXES(content::MockAppCacheStorageTest, CreateGroup);
-  FRIEND_TEST_ALL_PREFIXES(content::MockAppCacheStorageTest,
-                           FindMainResponseExclusions);
-  FRIEND_TEST_ALL_PREFIXES(content::MockAppCacheStorageTest,
-                           FindMainResponseWithMultipleCandidates);
-  FRIEND_TEST_ALL_PREFIXES(content::MockAppCacheStorageTest, LoadCache_FarHit);
-  FRIEND_TEST_ALL_PREFIXES(content::MockAppCacheStorageTest,
-                           LoadGroupAndCache_FarHit);
-  FRIEND_TEST_ALL_PREFIXES(content::MockAppCacheStorageTest, MakeGroupObsolete);
-  FRIEND_TEST_ALL_PREFIXES(content::MockAppCacheStorageTest, StoreNewGroup);
-  FRIEND_TEST_ALL_PREFIXES(content::MockAppCacheStorageTest,
-                           StoreExistingGroup);
-  FRIEND_TEST_ALL_PREFIXES(content::MockAppCacheStorageTest,
-                           StoreExistingGroupExistingCache);
-  FRIEND_TEST_ALL_PREFIXES(content::AppCacheServiceTest,
-                           DeleteAppCachesForOrigin);
-
-  DISALLOW_COPY_AND_ASSIGN(MockAppCacheStorage);
-};
-
-}  // namespace appcache
-
-#endif  // WEBKIT_BROWSER_APPCACHE_MOCK_APPCACHE_STORAGE_H_
diff --git a/webkit/browser/blob/local_file_stream_reader.cc b/webkit/browser/blob/local_file_stream_reader.cc
index 31c4f8c..e5f35a6 100644
--- a/webkit/browser/blob/local_file_stream_reader.cc
+++ b/webkit/browser/blob/local_file_stream_reader.cc
@@ -89,7 +89,7 @@
     return;
   }
 
-  stream_impl_.reset(new net::FileStream(NULL, task_runner_));
+  stream_impl_.reset(new net::FileStream(task_runner_));
   const int result = stream_impl_->Open(
       file_path_, kOpenFlagsForRead,
       base::Bind(&LocalFileStreamReader::DidOpenFileStream,
diff --git a/webkit/browser/fileapi/external_mount_points.cc b/webkit/browser/fileapi/external_mount_points.cc
index 42b6de7..010fb08 100644
--- a/webkit/browser/fileapi/external_mount_points.cc
+++ b/webkit/browser/fileapi/external_mount_points.cc
@@ -30,6 +30,10 @@
   return base::FilePath(path_str).NormalizePathSeparators();
 }
 
+bool IsOverlappingMountPathForbidden(fileapi::FileSystemType type) {
+  return type != fileapi::kFileSystemTypeNativeMedia;
+}
+
 // Wrapper around ref-counted ExternalMountPoints that will be used to lazily
 // create and initialize LazyInstance system ExternalMountPoints.
 class SystemMountPointsLazyWrapper {
@@ -101,11 +105,11 @@
   base::AutoLock locker(lock_);
 
   base::FilePath path = NormalizeFilePath(path_in);
-  if (!ValidateNewMountPoint(mount_name, path))
+  if (!ValidateNewMountPoint(mount_name, type, path))
     return false;
 
   instance_map_[mount_name] = new Instance(type, path, mount_option);
-  if (!path.empty())
+  if (!path.empty() && IsOverlappingMountPathForbidden(type))
     path_to_name_map_.insert(std::make_pair(path, mount_name));
   return true;
 }
@@ -122,7 +126,8 @@
   if (found == instance_map_.end())
     return false;
   Instance* instance = found->second;
-  path_to_name_map_.erase(NormalizeFilePath(instance->path()));
+  if (IsOverlappingMountPathForbidden(instance->type()))
+    path_to_name_map_.erase(NormalizeFilePath(instance->path()));
   delete found->second;
   instance_map_.erase(found);
   return true;
@@ -303,6 +308,7 @@
 }
 
 bool ExternalMountPoints::ValidateNewMountPoint(const std::string& mount_name,
+                                                FileSystemType type,
                                                 const base::FilePath& path) {
   lock_.AssertAcquired();
 
@@ -323,22 +329,28 @@
   if (path.ReferencesParent() || !path.IsAbsolute())
     return false;
 
-  // Check there the new path does not overlap with one of the existing ones.
-  std::map<base::FilePath, std::string>::reverse_iterator potential_parent(
-      path_to_name_map_.upper_bound(path));
-  if (potential_parent != path_to_name_map_.rend()) {
-    if (potential_parent->first == path ||
-        potential_parent->first.IsParent(path)) {
-      return false;
+  if (IsOverlappingMountPathForbidden(type)) {
+    // Check there the new path does not overlap with one of the existing ones.
+    std::map<base::FilePath, std::string>::reverse_iterator potential_parent(
+        path_to_name_map_.upper_bound(path));
+    if (potential_parent != path_to_name_map_.rend()) {
+      if (potential_parent->first == path ||
+          potential_parent->first.IsParent(path)) {
+        return false;
+      }
+    }
+
+    std::map<base::FilePath, std::string>::iterator potential_child =
+        path_to_name_map_.upper_bound(path);
+    if (potential_child != path_to_name_map_.end()) {
+      if (potential_child->first == path ||
+          path.IsParent(potential_child->first)) {
+        return false;
+      }
     }
   }
 
-  std::map<base::FilePath, std::string>::iterator potential_child =
-      path_to_name_map_.upper_bound(path);
-  if (potential_child == path_to_name_map_.end())
-    return true;
-  return !(potential_child->first == path) &&
-         !path.IsParent(potential_child->first);
+  return true;
 }
 
 }  // namespace fileapi
diff --git a/webkit/browser/fileapi/external_mount_points.h b/webkit/browser/fileapi/external_mount_points.h
index 1748a09..fefa6fe 100644
--- a/webkit/browser/fileapi/external_mount_points.h
+++ b/webkit/browser/fileapi/external_mount_points.h
@@ -51,7 +51,8 @@
   //
   // Overlapping mount points in a single MountPoints instance are not allowed.
   // Adding mount point whose path overlaps with an existing mount point will
-  // fail.
+  // fail except for media galleries, which do not count toward registered
+  // paths for overlap calculation.
   //
   // If not empty, |path| must be absolute. It is allowed for the path to be
   // empty, but |GetVirtualPath| will not work for those mount points.
@@ -91,6 +92,11 @@
   // Returns false if the path cannot be resolved (e.g. if the path is not
   // part of any registered filesystem).
   //
+  // Media gallery type file systems do not count for this calculation. i.e.
+  // if only a media gallery is registered for the path, false will be returned.
+  // If a media gallery and another file system are registered for related
+  // paths, only the other registration is taken into account.
+  //
   // Returned virtual_path will have normalized path separators.
   bool GetVirtualPath(const base::FilePath& absolute_path,
                       base::FilePath* virtual_path) const;
@@ -130,10 +136,12 @@
   //  - there is no registered mount point with mount_name
   //  - path does not contain a reference to a parent
   //  - path is absolute
-  //  - path does not overlap with an existing mount point path.
+  //  - path does not overlap with an existing mount point path unless it is a
+  //    media gallery type.
   //
   // |lock_| should be taken before calling this method.
   bool ValidateNewMountPoint(const std::string& mount_name,
+                             FileSystemType type,
                              const base::FilePath& path);
 
   // This lock needs to be obtained when accessing the instance_map_.
diff --git a/webkit/browser/fileapi/file_system_context.cc b/webkit/browser/fileapi/file_system_context.cc
index f6e7df3..847a68b 100644
--- a/webkit/browser/fileapi/file_system_context.cc
+++ b/webkit/browser/fileapi/file_system_context.cc
@@ -51,10 +51,29 @@
     base::File::Error error,
     const base::File::Info& file_info) {
   if (error != base::File::FILE_OK) {
-    callback.Run(error, FileSystemInfo(), base::FilePath(), false);
+    if (error == base::File::FILE_ERROR_NOT_FOUND) {
+      callback.Run(base::File::FILE_OK, info, path,
+                   FileSystemContext::RESOLVED_ENTRY_NOT_FOUND);
+    } else {
+      callback.Run(error, FileSystemInfo(), base::FilePath(),
+                   FileSystemContext::RESOLVED_ENTRY_NOT_FOUND);
+    }
     return;
   }
-  callback.Run(error, info, path, file_info.is_directory);
+  callback.Run(error, info, path, file_info.is_directory ?
+      FileSystemContext::RESOLVED_ENTRY_DIRECTORY :
+      FileSystemContext::RESOLVED_ENTRY_FILE);
+}
+
+void RelayResolveURLCallback(
+    scoped_refptr<base::MessageLoopProxy> message_loop,
+    const FileSystemContext::ResolveURLCallback& callback,
+    base::File::Error result,
+    const FileSystemInfo& info,
+    const base::FilePath& file_path,
+    FileSystemContext::ResolvedEntryType type) {
+  message_loop->PostTask(
+      FROM_HERE, base::Bind(callback, result, info, file_path, type));
 }
 
 }  // namespace
@@ -322,15 +341,24 @@
 void FileSystemContext::ResolveURL(
     const FileSystemURL& url,
     const ResolveURLCallback& callback) {
-  // TODO(nhiroki, kinuko): Remove this thread restriction, so it can be called
-  // on either UI or IO thread.
-  DCHECK(io_task_runner_->RunsTasksOnCurrentThread());
   DCHECK(!callback.is_null());
 
+  // If not on IO thread, forward before passing the task to the backend.
+  if (!io_task_runner_->RunsTasksOnCurrentThread()) {
+    ResolveURLCallback relay_callback =
+        base::Bind(&RelayResolveURLCallback,
+                   base::MessageLoopProxy::current(), callback);
+    io_task_runner_->PostTask(
+        FROM_HERE,
+        base::Bind(&FileSystemContext::ResolveURL, this, url, relay_callback));
+    return;
+  }
+
   FileSystemBackend* backend = GetFileSystemBackend(url.type());
   if (!backend) {
     callback.Run(base::File::FILE_ERROR_SECURITY,
-                 FileSystemInfo(), base::FilePath(), false);
+                 FileSystemInfo(), base::FilePath(),
+                 FileSystemContext::RESOLVED_ENTRY_NOT_FOUND);
     return;
   }
 
@@ -560,7 +588,8 @@
   DCHECK(io_task_runner_->RunsTasksOnCurrentThread());
 
   if (error != base::File::FILE_OK) {
-    callback.Run(error, FileSystemInfo(), base::FilePath(), false);
+    callback.Run(error, FileSystemInfo(), base::FilePath(),
+                 FileSystemContext::RESOLVED_ENTRY_NOT_FOUND);
     return;
   }
 
diff --git a/webkit/browser/fileapi/file_system_context.h b/webkit/browser/fileapi/file_system_context.h
index ba91af7..6e53981 100644
--- a/webkit/browser/fileapi/file_system_context.h
+++ b/webkit/browser/fileapi/file_system_context.h
@@ -188,10 +188,15 @@
       OpenFileSystemCallback;
 
   // Used for ResolveURL.
+  enum ResolvedEntryType {
+    RESOLVED_ENTRY_FILE,
+    RESOLVED_ENTRY_DIRECTORY,
+    RESOLVED_ENTRY_NOT_FOUND,
+  };
   typedef base::Callback<void(base::File::Error result,
                               const FileSystemInfo& info,
                               const base::FilePath& file_path,
-                              bool is_directory)> ResolveURLCallback;
+                              ResolvedEntryType type)> ResolveURLCallback;
 
   // Used for DeleteFileSystem and OpenPluginPrivateFileSystem.
   typedef base::Callback<void(base::File::Error result)> StatusCallback;
@@ -207,9 +212,12 @@
       OpenFileSystemMode mode,
       const OpenFileSystemCallback& callback);
 
-  // Opens the filesystem for the given |url| as read-only, and then checks the
-  // existence of the file entry referred by the URL. This should be called on
-  // the IO thread.
+  // Opens the filesystem for the given |url| as read-only, if the filesystem
+  // backend referred by the URL allows opening by resolveURL. Otherwise it
+  // fails with FILE_ERROR_SECURITY. The entry pointed by the URL can be
+  // absent; in that case RESOLVED_ENTRY_NOT_FOUND type is returned to the
+  // callback for indicating the absence. Can be called from any thread with
+  // a message loop. |callback| is invoked on the caller thread.
   void ResolveURL(
       const FileSystemURL& url,
       const ResolveURLCallback& callback);
diff --git a/webkit/browser/fileapi/local_file_stream_writer.cc b/webkit/browser/fileapi/local_file_stream_writer.cc
index 45e358a..a6c6a51 100644
--- a/webkit/browser/fileapi/local_file_stream_writer.cc
+++ b/webkit/browser/fileapi/local_file_stream_writer.cc
@@ -101,7 +101,7 @@
   DCHECK(has_pending_operation_);
   DCHECK(!stream_impl_.get());
 
-  stream_impl_.reset(new net::FileStream(NULL, task_runner_));
+  stream_impl_.reset(new net::FileStream(task_runner_));
 
   int open_flags = 0;
   switch (open_or_create_) {
diff --git a/webkit/browser/quota/mock_storage_client.cc b/webkit/browser/quota/mock_storage_client.cc
deleted file mode 100644
index eb344bc..0000000
--- a/webkit/browser/quota/mock_storage_client.cc
+++ /dev/null
@@ -1,186 +0,0 @@
-// Copyright 2013 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 "webkit/browser/quota/mock_storage_client.h"
-
-#include "base/basictypes.h"
-#include "base/bind.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/memory/singleton.h"
-#include "base/message_loop/message_loop_proxy.h"
-#include "base/stl_util.h"
-#include "net/base/net_util.h"
-#include "webkit/browser/quota/quota_manager_proxy.h"
-
-namespace quota {
-
-using std::make_pair;
-
-MockStorageClient::MockStorageClient(
-    QuotaManagerProxy* quota_manager_proxy,
-    const MockOriginData* mock_data, QuotaClient::ID id, size_t mock_data_size)
-    : quota_manager_proxy_(quota_manager_proxy),
-      id_(id),
-      mock_time_counter_(0),
-      weak_factory_(this) {
-  Populate(mock_data, mock_data_size);
-}
-
-void MockStorageClient::Populate(
-    const MockOriginData* mock_data,
-    size_t mock_data_size) {
-  for (size_t i = 0; i < mock_data_size; ++i) {
-    origin_data_[make_pair(GURL(mock_data[i].origin), mock_data[i].type)] =
-        mock_data[i].usage;
-  }
-}
-
-MockStorageClient::~MockStorageClient() {}
-
-void MockStorageClient::AddOriginAndNotify(
-    const GURL& origin_url, StorageType type, int64 size) {
-  DCHECK(origin_data_.find(make_pair(origin_url, type)) == origin_data_.end());
-  DCHECK_GE(size, 0);
-  origin_data_[make_pair(origin_url, type)] = size;
-  quota_manager_proxy_->quota_manager()->NotifyStorageModifiedInternal(
-      id(), origin_url, type, size, IncrementMockTime());
-}
-
-void MockStorageClient::ModifyOriginAndNotify(
-    const GURL& origin_url, StorageType type, int64 delta) {
-  OriginDataMap::iterator find = origin_data_.find(make_pair(origin_url, type));
-  DCHECK(find != origin_data_.end());
-  find->second += delta;
-  DCHECK_GE(find->second, 0);
-
-  // TODO(tzik): Check quota to prevent usage exceed
-  quota_manager_proxy_->quota_manager()->NotifyStorageModifiedInternal(
-      id(), origin_url, type, delta, IncrementMockTime());
-}
-
-void MockStorageClient::TouchAllOriginsAndNotify() {
-  for (OriginDataMap::const_iterator itr = origin_data_.begin();
-       itr != origin_data_.end();
-       ++itr) {
-    quota_manager_proxy_->quota_manager()->NotifyStorageModifiedInternal(
-        id(), itr->first.first, itr->first.second, 0, IncrementMockTime());
-  }
-}
-
-void MockStorageClient::AddOriginToErrorSet(
-    const GURL& origin_url, StorageType type) {
-  error_origins_.insert(make_pair(origin_url, type));
-}
-
-base::Time MockStorageClient::IncrementMockTime() {
-  ++mock_time_counter_;
-  return base::Time::FromDoubleT(mock_time_counter_ * 10.0);
-}
-
-QuotaClient::ID MockStorageClient::id() const {
-  return id_;
-}
-
-void MockStorageClient::OnQuotaManagerDestroyed() {
-  delete this;
-}
-
-void MockStorageClient::GetOriginUsage(const GURL& origin_url,
-                                       StorageType type,
-                                       const GetUsageCallback& callback) {
-  base::MessageLoopProxy::current()->PostTask(
-      FROM_HERE,
-      base::Bind(&MockStorageClient::RunGetOriginUsage,
-                 weak_factory_.GetWeakPtr(), origin_url, type, callback));
-}
-
-void MockStorageClient::GetOriginsForType(
-    StorageType type, const GetOriginsCallback& callback) {
-  base::MessageLoopProxy::current()->PostTask(
-      FROM_HERE,
-      base::Bind(&MockStorageClient::RunGetOriginsForType,
-                 weak_factory_.GetWeakPtr(), type, callback));
-}
-
-void MockStorageClient::GetOriginsForHost(
-    StorageType type, const std::string& host,
-    const GetOriginsCallback& callback) {
-  base::MessageLoopProxy::current()->PostTask(
-      FROM_HERE,
-      base::Bind(&MockStorageClient::RunGetOriginsForHost,
-                 weak_factory_.GetWeakPtr(), type, host, callback));
-}
-
-void MockStorageClient::DeleteOriginData(
-    const GURL& origin, StorageType type,
-    const DeletionCallback& callback) {
-  base::MessageLoopProxy::current()->PostTask(
-      FROM_HERE,
-      base::Bind(&MockStorageClient::RunDeleteOriginData,
-                 weak_factory_.GetWeakPtr(), origin, type, callback));
-}
-
-bool MockStorageClient::DoesSupport(quota::StorageType type) const {
-  return true;
-}
-
-void MockStorageClient::RunGetOriginUsage(
-    const GURL& origin_url, StorageType type,
-    const GetUsageCallback& callback) {
-  OriginDataMap::iterator find = origin_data_.find(make_pair(origin_url, type));
-  if (find == origin_data_.end()) {
-    callback.Run(0);
-  } else {
-    callback.Run(find->second);
-  }
-}
-
-void MockStorageClient::RunGetOriginsForType(
-    StorageType type, const GetOriginsCallback& callback) {
-  std::set<GURL> origins;
-  for (OriginDataMap::iterator iter = origin_data_.begin();
-       iter != origin_data_.end(); ++iter) {
-    if (type == iter->first.second)
-      origins.insert(iter->first.first);
-  }
-  callback.Run(origins);
-}
-
-void MockStorageClient::RunGetOriginsForHost(
-    StorageType type, const std::string& host,
-    const GetOriginsCallback& callback) {
-  std::set<GURL> origins;
-  for (OriginDataMap::iterator iter = origin_data_.begin();
-       iter != origin_data_.end(); ++iter) {
-    std::string host_or_spec = net::GetHostOrSpecFromURL(iter->first.first);
-    if (type == iter->first.second && host == host_or_spec)
-      origins.insert(iter->first.first);
-  }
-  callback.Run(origins);
-}
-
-void MockStorageClient::RunDeleteOriginData(
-    const GURL& origin_url,
-    StorageType type,
-    const DeletionCallback& callback) {
-  ErrorOriginSet::iterator itr_error =
-      error_origins_.find(make_pair(origin_url, type));
-  if (itr_error != error_origins_.end()) {
-    callback.Run(kQuotaErrorInvalidModification);
-    return;
-  }
-
-  OriginDataMap::iterator itr =
-      origin_data_.find(make_pair(origin_url, type));
-  if (itr != origin_data_.end()) {
-    int64 delta = itr->second;
-    quota_manager_proxy_->
-        NotifyStorageModified(id(), origin_url, type, -delta);
-    origin_data_.erase(itr);
-  }
-
-  callback.Run(kQuotaStatusOk);
-}
-
-}  // namespace quota
diff --git a/webkit/browser/quota/mock_storage_client.h b/webkit/browser/quota/mock_storage_client.h
deleted file mode 100644
index 42c6162..0000000
--- a/webkit/browser/quota/mock_storage_client.h
+++ /dev/null
@@ -1,96 +0,0 @@
-// Copyright 2013 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 WEBKIT_BROWSER_QUOTA_MOCK_STORAGE_CLIENT_H_
-#define WEBKIT_BROWSER_QUOTA_MOCK_STORAGE_CLIENT_H_
-
-#include <map>
-#include <set>
-#include <string>
-#include <utility>
-
-#include "base/compiler_specific.h"
-#include "base/memory/weak_ptr.h"
-#include "base/time/time.h"
-#include "url/gurl.h"
-#include "webkit/browser/quota/quota_client.h"
-
-namespace quota {
-
-class QuotaManagerProxy;
-
-struct MockOriginData {
-  const char* origin;
-  StorageType type;
-  int64 usage;
-};
-
-// Mock storage class for testing.
-class MockStorageClient : public QuotaClient {
- public:
-  MockStorageClient(QuotaManagerProxy* quota_manager_proxy,
-                    const MockOriginData* mock_data,
-                    QuotaClient::ID id,
-                    size_t mock_data_size);
-  virtual ~MockStorageClient();
-
-  // To add or modify mock data in this client.
-  void AddOriginAndNotify(
-      const GURL& origin_url, StorageType type, int64 size);
-  void ModifyOriginAndNotify(
-      const GURL& origin_url, StorageType type, int64 delta);
-  void TouchAllOriginsAndNotify();
-
-  void AddOriginToErrorSet(const GURL& origin_url, StorageType type);
-
-  base::Time IncrementMockTime();
-
-  // QuotaClient methods.
-  virtual QuotaClient::ID id() const OVERRIDE;
-  virtual void OnQuotaManagerDestroyed() OVERRIDE;
-  virtual void GetOriginUsage(const GURL& origin_url,
-                              StorageType type,
-                              const GetUsageCallback& callback) OVERRIDE;
-  virtual void GetOriginsForType(StorageType type,
-                                 const GetOriginsCallback& callback) OVERRIDE;
-  virtual void GetOriginsForHost(StorageType type, const std::string& host,
-                                 const GetOriginsCallback& callback) OVERRIDE;
-  virtual void DeleteOriginData(const GURL& origin,
-                                StorageType type,
-                                const DeletionCallback& callback) OVERRIDE;
-  virtual bool DoesSupport(quota::StorageType type) const OVERRIDE;
-
- private:
-  void RunGetOriginUsage(const GURL& origin_url,
-                         StorageType type,
-                         const GetUsageCallback& callback);
-  void RunGetOriginsForType(StorageType type,
-                            const GetOriginsCallback& callback);
-  void RunGetOriginsForHost(StorageType type,
-                            const std::string& host,
-                            const GetOriginsCallback& callback);
-  void RunDeleteOriginData(const GURL& origin_url,
-                           StorageType type,
-                           const DeletionCallback& callback);
-
-  void Populate(const MockOriginData* mock_data, size_t mock_data_size);
-
-  scoped_refptr<QuotaManagerProxy> quota_manager_proxy_;
-  const ID id_;
-
-  typedef std::map<std::pair<GURL, StorageType>, int64> OriginDataMap;
-  OriginDataMap origin_data_;
-  typedef std::set<std::pair<GURL, StorageType> > ErrorOriginSet;
-  ErrorOriginSet error_origins_;
-
-  int mock_time_counter_;
-
-  base::WeakPtrFactory<MockStorageClient> weak_factory_;
-
-  DISALLOW_COPY_AND_ASSIGN(MockStorageClient);
-};
-
-}  // namespace quota
-
-#endif  // WEBKIT_BROWSER_QUOTA_MOCK_STORAGE_CLIENT_H_
diff --git a/webkit/browser/quota/quota_database.h b/webkit/browser/quota/quota_database.h
index d12bf94..c64fde7 100644
--- a/webkit/browser/quota/quota_database.h
+++ b/webkit/browser/quota/quota_database.h
@@ -19,6 +19,10 @@
 #include "webkit/browser/webkit_storage_browser_export.h"
 #include "webkit/common/quota/quota_types.h"
 
+namespace content {
+class QuotaDatabaseTest;
+}
+
 namespace sql {
 class Connection;
 class MetaTable;
@@ -172,7 +176,7 @@
 
   base::OneShotTimer<QuotaDatabase> timer_;
 
-  friend class QuotaDatabaseTest;
+  friend class content::QuotaDatabaseTest;
   friend class QuotaManager;
 
   static const TableSchema kTables[];
diff --git a/webkit/browser/quota/quota_database_unittest.cc b/webkit/browser/quota/quota_database_unittest.cc
deleted file mode 100644
index d20f723..0000000
--- a/webkit/browser/quota/quota_database_unittest.cc
+++ /dev/null
@@ -1,563 +0,0 @@
-// Copyright 2013 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 <algorithm>
-#include <iterator>
-#include <set>
-
-#include "base/bind.h"
-#include "base/callback.h"
-#include "base/file_util.h"
-#include "base/files/scoped_temp_dir.h"
-#include "base/message_loop/message_loop.h"
-#include "sql/connection.h"
-#include "sql/meta_table.h"
-#include "sql/statement.h"
-#include "sql/transaction.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "url/gurl.h"
-#include "webkit/browser/quota/mock_special_storage_policy.h"
-#include "webkit/browser/quota/quota_database.h"
-
-namespace quota {
-namespace {
-
-const base::Time kZeroTime;
-
-const char kDBFileName[] = "quota_manager.db";
-
-}  // namespace
-
-class QuotaDatabaseTest : public testing::Test {
- protected:
-  typedef QuotaDatabase::QuotaTableEntry QuotaTableEntry;
-  typedef QuotaDatabase::QuotaTableCallback QuotaTableCallback;
-  typedef QuotaDatabase::OriginInfoTableCallback
-      OriginInfoTableCallback;
-
-  void LazyOpen(const base::FilePath& kDbFile) {
-    QuotaDatabase db(kDbFile);
-    EXPECT_FALSE(db.LazyOpen(false));
-    ASSERT_TRUE(db.LazyOpen(true));
-    EXPECT_TRUE(db.db_.get());
-    EXPECT_TRUE(kDbFile.empty() || base::PathExists(kDbFile));
-  }
-
-  void UpgradeSchemaV2toV3(const base::FilePath& kDbFile) {
-    const QuotaTableEntry entries[] = {
-      QuotaTableEntry("a", kStorageTypeTemporary,  1),
-      QuotaTableEntry("b", kStorageTypeTemporary,  2),
-      QuotaTableEntry("c", kStorageTypePersistent, 3),
-    };
-
-    CreateV2Database(kDbFile, entries, ARRAYSIZE_UNSAFE(entries));
-
-    QuotaDatabase db(kDbFile);
-    EXPECT_TRUE(db.LazyOpen(true));
-    EXPECT_TRUE(db.db_.get());
-
-    typedef EntryVerifier<QuotaTableEntry> Verifier;
-    Verifier verifier(entries, entries + ARRAYSIZE_UNSAFE(entries));
-    EXPECT_TRUE(db.DumpQuotaTable(
-        base::Bind(&Verifier::Run, base::Unretained(&verifier))));
-    EXPECT_TRUE(verifier.table.empty());
-  }
-
-  void HostQuota(const base::FilePath& kDbFile) {
-    QuotaDatabase db(kDbFile);
-    ASSERT_TRUE(db.LazyOpen(true));
-
-    const char* kHost = "foo.com";
-    const int kQuota1 = 13579;
-    const int kQuota2 = kQuota1 + 1024;
-
-    int64 quota = -1;
-    EXPECT_FALSE(db.GetHostQuota(kHost, kStorageTypeTemporary, &quota));
-    EXPECT_FALSE(db.GetHostQuota(kHost, kStorageTypePersistent, &quota));
-
-    // Insert quota for temporary.
-    EXPECT_TRUE(db.SetHostQuota(kHost, kStorageTypeTemporary, kQuota1));
-    EXPECT_TRUE(db.GetHostQuota(kHost, kStorageTypeTemporary, &quota));
-    EXPECT_EQ(kQuota1, quota);
-
-    // Update quota for temporary.
-    EXPECT_TRUE(db.SetHostQuota(kHost, kStorageTypeTemporary, kQuota2));
-    EXPECT_TRUE(db.GetHostQuota(kHost, kStorageTypeTemporary, &quota));
-    EXPECT_EQ(kQuota2, quota);
-
-    // Quota for persistent must not be updated.
-    EXPECT_FALSE(db.GetHostQuota(kHost, kStorageTypePersistent, &quota));
-
-    // Delete temporary storage quota.
-    EXPECT_TRUE(db.DeleteHostQuota(kHost, kStorageTypeTemporary));
-    EXPECT_FALSE(db.GetHostQuota(kHost, kStorageTypeTemporary, &quota));
-  }
-
-  void GlobalQuota(const base::FilePath& kDbFile) {
-    QuotaDatabase db(kDbFile);
-    ASSERT_TRUE(db.LazyOpen(true));
-
-    const char* kTempQuotaKey = QuotaDatabase::kTemporaryQuotaOverrideKey;
-    const char* kAvailSpaceKey = QuotaDatabase::kDesiredAvailableSpaceKey;
-
-    int64 value = 0;
-    const int64 kValue1 = 456;
-    const int64 kValue2 = 123000;
-    EXPECT_FALSE(db.GetQuotaConfigValue(kTempQuotaKey, &value));
-    EXPECT_FALSE(db.GetQuotaConfigValue(kAvailSpaceKey, &value));
-
-    EXPECT_TRUE(db.SetQuotaConfigValue(kTempQuotaKey, kValue1));
-    EXPECT_TRUE(db.GetQuotaConfigValue(kTempQuotaKey, &value));
-    EXPECT_EQ(kValue1, value);
-
-    EXPECT_TRUE(db.SetQuotaConfigValue(kTempQuotaKey, kValue2));
-    EXPECT_TRUE(db.GetQuotaConfigValue(kTempQuotaKey, &value));
-    EXPECT_EQ(kValue2, value);
-
-    EXPECT_TRUE(db.SetQuotaConfigValue(kAvailSpaceKey, kValue1));
-    EXPECT_TRUE(db.GetQuotaConfigValue(kAvailSpaceKey, &value));
-    EXPECT_EQ(kValue1, value);
-
-    EXPECT_TRUE(db.SetQuotaConfigValue(kAvailSpaceKey, kValue2));
-    EXPECT_TRUE(db.GetQuotaConfigValue(kAvailSpaceKey, &value));
-    EXPECT_EQ(kValue2, value);
-  }
-
-  void OriginLastAccessTimeLRU(const base::FilePath& kDbFile) {
-    QuotaDatabase db(kDbFile);
-    ASSERT_TRUE(db.LazyOpen(true));
-
-    std::set<GURL> exceptions;
-    GURL origin;
-    EXPECT_TRUE(db.GetLRUOrigin(kStorageTypeTemporary, exceptions,
-                                NULL, &origin));
-    EXPECT_TRUE(origin.is_empty());
-
-    const GURL kOrigin1("http://a/");
-    const GURL kOrigin2("http://b/");
-    const GURL kOrigin3("http://c/");
-    const GURL kOrigin4("http://p/");
-
-    // Adding three temporary storages, and
-    EXPECT_TRUE(db.SetOriginLastAccessTime(
-        kOrigin1, kStorageTypeTemporary, base::Time::FromInternalValue(10)));
-    EXPECT_TRUE(db.SetOriginLastAccessTime(
-        kOrigin2, kStorageTypeTemporary, base::Time::FromInternalValue(20)));
-    EXPECT_TRUE(db.SetOriginLastAccessTime(
-        kOrigin3, kStorageTypeTemporary, base::Time::FromInternalValue(30)));
-
-    // one persistent.
-    EXPECT_TRUE(db.SetOriginLastAccessTime(
-        kOrigin4, kStorageTypePersistent, base::Time::FromInternalValue(40)));
-
-    EXPECT_TRUE(db.GetLRUOrigin(kStorageTypeTemporary, exceptions,
-                                NULL, &origin));
-    EXPECT_EQ(kOrigin1.spec(), origin.spec());
-
-    // Test that unlimited origins are exluded from eviction, but
-    // protected origins are not excluded.
-    scoped_refptr<MockSpecialStoragePolicy> policy(
-        new MockSpecialStoragePolicy);
-    policy->AddUnlimited(kOrigin1);
-    policy->AddProtected(kOrigin2);
-    EXPECT_TRUE(db.GetLRUOrigin(
-        kStorageTypeTemporary, exceptions, policy.get(), &origin));
-    EXPECT_EQ(kOrigin2.spec(), origin.spec());
-
-    exceptions.insert(kOrigin1);
-    EXPECT_TRUE(db.GetLRUOrigin(kStorageTypeTemporary, exceptions,
-                                NULL, &origin));
-    EXPECT_EQ(kOrigin2.spec(), origin.spec());
-
-    exceptions.insert(kOrigin2);
-    EXPECT_TRUE(db.GetLRUOrigin(kStorageTypeTemporary, exceptions,
-                                NULL, &origin));
-    EXPECT_EQ(kOrigin3.spec(), origin.spec());
-
-    exceptions.insert(kOrigin3);
-    EXPECT_TRUE(db.GetLRUOrigin(kStorageTypeTemporary, exceptions,
-                                NULL, &origin));
-    EXPECT_TRUE(origin.is_empty());
-
-    EXPECT_TRUE(db.SetOriginLastAccessTime(
-        kOrigin1, kStorageTypeTemporary, base::Time::Now()));
-
-    // Delete origin/type last access time information.
-    EXPECT_TRUE(db.DeleteOriginInfo(kOrigin3, kStorageTypeTemporary));
-
-    // Querying again to see if the deletion has worked.
-    exceptions.clear();
-    EXPECT_TRUE(db.GetLRUOrigin(kStorageTypeTemporary, exceptions,
-                                NULL, &origin));
-    EXPECT_EQ(kOrigin2.spec(), origin.spec());
-
-    exceptions.insert(kOrigin1);
-    exceptions.insert(kOrigin2);
-    EXPECT_TRUE(db.GetLRUOrigin(kStorageTypeTemporary, exceptions,
-                                NULL, &origin));
-    EXPECT_TRUE(origin.is_empty());
-  }
-
-  void OriginLastModifiedSince(const base::FilePath& kDbFile) {
-    QuotaDatabase db(kDbFile);
-    ASSERT_TRUE(db.LazyOpen(true));
-
-    std::set<GURL> origins;
-    EXPECT_TRUE(db.GetOriginsModifiedSince(
-        kStorageTypeTemporary, &origins, base::Time()));
-    EXPECT_TRUE(origins.empty());
-
-    const GURL kOrigin1("http://a/");
-    const GURL kOrigin2("http://b/");
-    const GURL kOrigin3("http://c/");
-
-    // Report last mod time for the test origins.
-    EXPECT_TRUE(db.SetOriginLastModifiedTime(
-        kOrigin1, kStorageTypeTemporary, base::Time::FromInternalValue(0)));
-    EXPECT_TRUE(db.SetOriginLastModifiedTime(
-        kOrigin2, kStorageTypeTemporary, base::Time::FromInternalValue(10)));
-    EXPECT_TRUE(db.SetOriginLastModifiedTime(
-        kOrigin3, kStorageTypeTemporary, base::Time::FromInternalValue(20)));
-
-    EXPECT_TRUE(db.GetOriginsModifiedSince(
-        kStorageTypeTemporary, &origins, base::Time()));
-    EXPECT_EQ(3U, origins.size());
-    EXPECT_EQ(1U, origins.count(kOrigin1));
-    EXPECT_EQ(1U, origins.count(kOrigin2));
-    EXPECT_EQ(1U, origins.count(kOrigin3));
-
-    EXPECT_TRUE(db.GetOriginsModifiedSince(
-        kStorageTypeTemporary, &origins, base::Time::FromInternalValue(5)));
-    EXPECT_EQ(2U, origins.size());
-    EXPECT_EQ(0U, origins.count(kOrigin1));
-    EXPECT_EQ(1U, origins.count(kOrigin2));
-    EXPECT_EQ(1U, origins.count(kOrigin3));
-
-    EXPECT_TRUE(db.GetOriginsModifiedSince(
-        kStorageTypeTemporary, &origins, base::Time::FromInternalValue(15)));
-    EXPECT_EQ(1U, origins.size());
-    EXPECT_EQ(0U, origins.count(kOrigin1));
-    EXPECT_EQ(0U, origins.count(kOrigin2));
-    EXPECT_EQ(1U, origins.count(kOrigin3));
-
-    EXPECT_TRUE(db.GetOriginsModifiedSince(
-        kStorageTypeTemporary, &origins, base::Time::FromInternalValue(25)));
-    EXPECT_TRUE(origins.empty());
-
-    // Update origin1's mod time but for persistent storage.
-    EXPECT_TRUE(db.SetOriginLastModifiedTime(
-        kOrigin1, kStorageTypePersistent, base::Time::FromInternalValue(30)));
-
-    // Must have no effects on temporary origins info.
-    EXPECT_TRUE(db.GetOriginsModifiedSince(
-        kStorageTypeTemporary, &origins, base::Time::FromInternalValue(5)));
-    EXPECT_EQ(2U, origins.size());
-    EXPECT_EQ(0U, origins.count(kOrigin1));
-    EXPECT_EQ(1U, origins.count(kOrigin2));
-    EXPECT_EQ(1U, origins.count(kOrigin3));
-
-    // One more update for persistent origin2.
-    EXPECT_TRUE(db.SetOriginLastModifiedTime(
-        kOrigin2, kStorageTypePersistent, base::Time::FromInternalValue(40)));
-
-    EXPECT_TRUE(db.GetOriginsModifiedSince(
-        kStorageTypePersistent, &origins, base::Time::FromInternalValue(25)));
-    EXPECT_EQ(2U, origins.size());
-    EXPECT_EQ(1U, origins.count(kOrigin1));
-    EXPECT_EQ(1U, origins.count(kOrigin2));
-    EXPECT_EQ(0U, origins.count(kOrigin3));
-
-    EXPECT_TRUE(db.GetOriginsModifiedSince(
-        kStorageTypePersistent, &origins, base::Time::FromInternalValue(35)));
-    EXPECT_EQ(1U, origins.size());
-    EXPECT_EQ(0U, origins.count(kOrigin1));
-    EXPECT_EQ(1U, origins.count(kOrigin2));
-    EXPECT_EQ(0U, origins.count(kOrigin3));
-  }
-
-  void RegisterInitialOriginInfo(const base::FilePath& kDbFile) {
-    QuotaDatabase db(kDbFile);
-
-    const GURL kOrigins[] = {
-      GURL("http://a/"),
-      GURL("http://b/"),
-      GURL("http://c/") };
-    std::set<GURL> origins(kOrigins, kOrigins + ARRAYSIZE_UNSAFE(kOrigins));
-
-    EXPECT_TRUE(db.RegisterInitialOriginInfo(origins, kStorageTypeTemporary));
-
-    int used_count = -1;
-    EXPECT_TRUE(db.FindOriginUsedCount(GURL("http://a/"),
-                                       kStorageTypeTemporary,
-                                       &used_count));
-    EXPECT_EQ(0, used_count);
-
-    EXPECT_TRUE(db.SetOriginLastAccessTime(
-        GURL("http://a/"), kStorageTypeTemporary,
-        base::Time::FromDoubleT(1.0)));
-    used_count = -1;
-    EXPECT_TRUE(db.FindOriginUsedCount(GURL("http://a/"),
-                                       kStorageTypeTemporary,
-                                       &used_count));
-    EXPECT_EQ(1, used_count);
-
-    EXPECT_TRUE(db.RegisterInitialOriginInfo(origins, kStorageTypeTemporary));
-
-    used_count = -1;
-    EXPECT_TRUE(db.FindOriginUsedCount(GURL("http://a/"),
-                                       kStorageTypeTemporary,
-                                       &used_count));
-    EXPECT_EQ(1, used_count);
-  }
-
-  template <typename EntryType>
-  struct EntryVerifier {
-    std::set<EntryType> table;
-
-    template <typename Iterator>
-    EntryVerifier(Iterator itr, Iterator end)
-        : table(itr, end) {}
-
-    bool Run(const EntryType& entry) {
-      EXPECT_EQ(1u, table.erase(entry));
-      return true;
-    }
-  };
-
-  void DumpQuotaTable(const base::FilePath& kDbFile) {
-    QuotaTableEntry kTableEntries[] = {
-      QuotaTableEntry("http://go/", kStorageTypeTemporary, 1),
-      QuotaTableEntry("http://oo/", kStorageTypeTemporary, 2),
-      QuotaTableEntry("http://gle/", kStorageTypePersistent, 3)
-    };
-    QuotaTableEntry* begin = kTableEntries;
-    QuotaTableEntry* end = kTableEntries + ARRAYSIZE_UNSAFE(kTableEntries);
-
-    QuotaDatabase db(kDbFile);
-    EXPECT_TRUE(db.LazyOpen(true));
-    AssignQuotaTable(db.db_.get(), begin, end);
-    db.Commit();
-
-    typedef EntryVerifier<QuotaTableEntry> Verifier;
-    Verifier verifier(begin, end);
-    EXPECT_TRUE(db.DumpQuotaTable(
-        base::Bind(&Verifier::Run, base::Unretained(&verifier))));
-    EXPECT_TRUE(verifier.table.empty());
-  }
-
-  void DumpOriginInfoTable(const base::FilePath& kDbFile) {
-    base::Time now(base::Time::Now());
-    typedef QuotaDatabase::OriginInfoTableEntry Entry;
-    Entry kTableEntries[] = {
-      Entry(GURL("http://go/"), kStorageTypeTemporary, 2147483647, now, now),
-      Entry(GURL("http://oo/"), kStorageTypeTemporary, 0, now, now),
-      Entry(GURL("http://gle/"), kStorageTypeTemporary, 1, now, now),
-    };
-    Entry* begin = kTableEntries;
-    Entry* end = kTableEntries + ARRAYSIZE_UNSAFE(kTableEntries);
-
-    QuotaDatabase db(kDbFile);
-    EXPECT_TRUE(db.LazyOpen(true));
-    AssignOriginInfoTable(db.db_.get(), begin, end);
-    db.Commit();
-
-    typedef EntryVerifier<Entry> Verifier;
-    Verifier verifier(begin, end);
-    EXPECT_TRUE(db.DumpOriginInfoTable(
-        base::Bind(&Verifier::Run, base::Unretained(&verifier))));
-    EXPECT_TRUE(verifier.table.empty());
-  }
-
- private:
-  template <typename Iterator>
-  void AssignQuotaTable(sql::Connection* db, Iterator itr, Iterator end) {
-    ASSERT_NE(db, (sql::Connection*)NULL);
-    for (; itr != end; ++itr) {
-      const char* kSql =
-          "INSERT INTO HostQuotaTable"
-          " (host, type, quota)"
-          " VALUES (?, ?, ?)";
-      sql::Statement statement;
-      statement.Assign(db->GetCachedStatement(SQL_FROM_HERE, kSql));
-      ASSERT_TRUE(statement.is_valid());
-
-      statement.BindString(0, itr->host);
-      statement.BindInt(1, static_cast<int>(itr->type));
-      statement.BindInt64(2, itr->quota);
-      EXPECT_TRUE(statement.Run());
-    }
-  }
-
-  template <typename Iterator>
-  void AssignOriginInfoTable(sql::Connection* db, Iterator itr, Iterator end) {
-    ASSERT_NE(db, (sql::Connection*)NULL);
-    for (; itr != end; ++itr) {
-      const char* kSql =
-          "INSERT INTO OriginInfoTable"
-          " (origin, type, used_count, last_access_time, last_modified_time)"
-          " VALUES (?, ?, ?, ?, ?)";
-      sql::Statement statement;
-      statement.Assign(db->GetCachedStatement(SQL_FROM_HERE, kSql));
-      ASSERT_TRUE(statement.is_valid());
-
-      statement.BindString(0, itr->origin.spec());
-      statement.BindInt(1, static_cast<int>(itr->type));
-      statement.BindInt(2, itr->used_count);
-      statement.BindInt64(3, itr->last_access_time.ToInternalValue());
-      statement.BindInt64(4, itr->last_modified_time.ToInternalValue());
-      EXPECT_TRUE(statement.Run());
-    }
-  }
-
-  bool OpenDatabase(sql::Connection* db, const base::FilePath& kDbFile) {
-    if (kDbFile.empty()) {
-      return db->OpenInMemory();
-    }
-    if (!base::CreateDirectory(kDbFile.DirName()))
-      return false;
-    if (!db->Open(kDbFile))
-      return false;
-    db->Preload();
-    return true;
-  }
-
-  // Create V2 database and populate some data.
-  void CreateV2Database(
-      const base::FilePath& kDbFile,
-      const QuotaTableEntry* entries,
-      size_t entries_size) {
-    scoped_ptr<sql::Connection> db(new sql::Connection);
-    scoped_ptr<sql::MetaTable> meta_table(new sql::MetaTable);
-
-    // V2 schema definitions.
-    static const int kCurrentVersion = 2;
-    static const int kCompatibleVersion = 2;
-    static const char kHostQuotaTable[] = "HostQuotaTable";
-    static const char kOriginLastAccessTable[] = "OriginLastAccessTable";
-    static const QuotaDatabase::TableSchema kTables[] = {
-      { kHostQuotaTable,
-        "(host TEXT NOT NULL,"
-        " type INTEGER NOT NULL,"
-        " quota INTEGER,"
-        " UNIQUE(host, type))" },
-      { kOriginLastAccessTable,
-        "(origin TEXT NOT NULL,"
-        " type INTEGER NOT NULL,"
-        " used_count INTEGER,"
-        " last_access_time INTEGER,"
-        " UNIQUE(origin, type))" },
-    };
-    static const QuotaDatabase::IndexSchema kIndexes[] = {
-      { "HostIndex",
-        kHostQuotaTable,
-        "(host)",
-        false },
-      { "OriginLastAccessIndex",
-        kOriginLastAccessTable,
-        "(origin, last_access_time)",
-        false },
-    };
-
-    ASSERT_TRUE(OpenDatabase(db.get(), kDbFile));
-    EXPECT_TRUE(QuotaDatabase::CreateSchema(
-            db.get(), meta_table.get(),
-            kCurrentVersion, kCompatibleVersion,
-            kTables, ARRAYSIZE_UNSAFE(kTables),
-            kIndexes, ARRAYSIZE_UNSAFE(kIndexes)));
-
-    // V2 and V3 QuotaTable are compatible, so we can simply use
-    // AssignQuotaTable to poplulate v2 database here.
-    db->BeginTransaction();
-    AssignQuotaTable(db.get(), entries, entries + entries_size);
-    db->CommitTransaction();
-  }
-
-  base::MessageLoop message_loop_;
-};
-
-TEST_F(QuotaDatabaseTest, LazyOpen) {
-  base::ScopedTempDir data_dir;
-  ASSERT_TRUE(data_dir.CreateUniqueTempDir());
-  const base::FilePath kDbFile = data_dir.path().AppendASCII(kDBFileName);
-  LazyOpen(kDbFile);
-  LazyOpen(base::FilePath());
-}
-
-TEST_F(QuotaDatabaseTest, UpgradeSchema) {
-  base::ScopedTempDir data_dir;
-  ASSERT_TRUE(data_dir.CreateUniqueTempDir());
-  const base::FilePath kDbFile = data_dir.path().AppendASCII(kDBFileName);
-  UpgradeSchemaV2toV3(kDbFile);
-}
-
-TEST_F(QuotaDatabaseTest, HostQuota) {
-  base::ScopedTempDir data_dir;
-  ASSERT_TRUE(data_dir.CreateUniqueTempDir());
-  const base::FilePath kDbFile = data_dir.path().AppendASCII(kDBFileName);
-  HostQuota(kDbFile);
-  HostQuota(base::FilePath());
-}
-
-TEST_F(QuotaDatabaseTest, GlobalQuota) {
-  base::ScopedTempDir data_dir;
-  ASSERT_TRUE(data_dir.CreateUniqueTempDir());
-  const base::FilePath kDbFile = data_dir.path().AppendASCII(kDBFileName);
-  GlobalQuota(kDbFile);
-  GlobalQuota(base::FilePath());
-}
-
-TEST_F(QuotaDatabaseTest, OriginLastAccessTimeLRU) {
-  base::ScopedTempDir data_dir;
-  ASSERT_TRUE(data_dir.CreateUniqueTempDir());
-  const base::FilePath kDbFile = data_dir.path().AppendASCII(kDBFileName);
-  OriginLastAccessTimeLRU(kDbFile);
-  OriginLastAccessTimeLRU(base::FilePath());
-}
-
-TEST_F(QuotaDatabaseTest, OriginLastModifiedSince) {
-  base::ScopedTempDir data_dir;
-  ASSERT_TRUE(data_dir.CreateUniqueTempDir());
-  const base::FilePath kDbFile = data_dir.path().AppendASCII(kDBFileName);
-  OriginLastModifiedSince(kDbFile);
-  OriginLastModifiedSince(base::FilePath());
-}
-
-TEST_F(QuotaDatabaseTest, BootstrapFlag) {
-  base::ScopedTempDir data_dir;
-  ASSERT_TRUE(data_dir.CreateUniqueTempDir());
-
-  const base::FilePath kDbFile = data_dir.path().AppendASCII(kDBFileName);
-  QuotaDatabase db(kDbFile);
-
-  EXPECT_FALSE(db.IsOriginDatabaseBootstrapped());
-  EXPECT_TRUE(db.SetOriginDatabaseBootstrapped(true));
-  EXPECT_TRUE(db.IsOriginDatabaseBootstrapped());
-  EXPECT_TRUE(db.SetOriginDatabaseBootstrapped(false));
-  EXPECT_FALSE(db.IsOriginDatabaseBootstrapped());
-}
-
-TEST_F(QuotaDatabaseTest, RegisterInitialOriginInfo) {
-  base::ScopedTempDir data_dir;
-  ASSERT_TRUE(data_dir.CreateUniqueTempDir());
-  const base::FilePath kDbFile = data_dir.path().AppendASCII(kDBFileName);
-  RegisterInitialOriginInfo(kDbFile);
-  RegisterInitialOriginInfo(base::FilePath());
-}
-
-TEST_F(QuotaDatabaseTest, DumpQuotaTable) {
-  base::ScopedTempDir data_dir;
-  ASSERT_TRUE(data_dir.CreateUniqueTempDir());
-  const base::FilePath kDbFile = data_dir.path().AppendASCII(kDBFileName);
-  DumpQuotaTable(kDbFile);
-  DumpQuotaTable(base::FilePath());
-}
-
-TEST_F(QuotaDatabaseTest, DumpOriginInfoTable) {
-  base::ScopedTempDir data_dir;
-  ASSERT_TRUE(data_dir.CreateUniqueTempDir());
-  const base::FilePath kDbFile = data_dir.path().AppendASCII(kDBFileName);
-  DumpOriginInfoTable(kDbFile);
-  DumpOriginInfoTable(base::FilePath());
-}
-}  // namespace quota
diff --git a/webkit/browser/quota/quota_manager.h b/webkit/browser/quota/quota_manager.h
index 12108ea..ebb953a 100644
--- a/webkit/browser/quota/quota_manager.h
+++ b/webkit/browser/quota/quota_manager.h
@@ -40,6 +40,10 @@
 
 namespace content {
 class MockQuotaManager;
+class MockStorageClient;
+class QuotaManagerTest;
+class StorageMonitorTest;
+
 }
 
 namespace quota {
@@ -261,14 +265,14 @@
  private:
   friend class base::DeleteHelper<QuotaManager>;
   friend class base::RefCountedThreadSafe<QuotaManager, QuotaManagerDeleter>;
-  friend class MockQuotaManager;
-  friend class MockStorageClient;
+  friend class content::QuotaManagerTest;
+  friend class content::StorageMonitorTest;
+  friend class content::MockQuotaManager;
+  friend class content::MockStorageClient;
   friend class quota_internals::QuotaInternalsProxy;
   friend class QuotaManagerProxy;
-  friend class QuotaManagerTest;
   friend class QuotaTemporaryStorageEvictor;
   friend struct QuotaManagerDeleter;
-  friend class StorageMonitorTest;
 
   class GetUsageInfoTask;
 
diff --git a/webkit/browser/quota/quota_manager_unittest.cc b/webkit/browser/quota/quota_manager_unittest.cc
deleted file mode 100644
index cc70931..0000000
--- a/webkit/browser/quota/quota_manager_unittest.cc
+++ /dev/null
@@ -1,2174 +0,0 @@
-// Copyright 2013 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 <algorithm>
-#include <set>
-#include <sstream>
-#include <vector>
-
-#include "base/bind.h"
-#include "base/file_util.h"
-#include "base/files/scoped_temp_dir.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/memory/weak_ptr.h"
-#include "base/message_loop/message_loop_proxy.h"
-#include "base/run_loop.h"
-#include "base/stl_util.h"
-#include "base/sys_info.h"
-#include "base/time/time.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "url/gurl.h"
-#include "webkit/browser/quota/mock_special_storage_policy.h"
-#include "webkit/browser/quota/mock_storage_client.h"
-#include "webkit/browser/quota/quota_database.h"
-#include "webkit/browser/quota/quota_manager.h"
-#include "webkit/browser/quota/quota_manager_proxy.h"
-
-using base::MessageLoopProxy;
-
-namespace quota {
-
-namespace {
-
-// For shorter names.
-const StorageType kTemp = kStorageTypeTemporary;
-const StorageType kPerm = kStorageTypePersistent;
-const StorageType kSync = kStorageTypeSyncable;
-
-const int kAllClients = QuotaClient::kAllClientsMask;
-
-const int64 kAvailableSpaceForApp = 13377331U;
-
-const int64 kMinimumPreserveForSystem = QuotaManager::kMinimumPreserveForSystem;
-const int kPerHostTemporaryPortion = QuotaManager::kPerHostTemporaryPortion;
-
-// Returns a deterministic value for the amount of available disk space.
-int64 GetAvailableDiskSpaceForTest(const base::FilePath&) {
-  return kAvailableSpaceForApp + kMinimumPreserveForSystem;
-}
-
-}  // namespace
-
-class QuotaManagerTest : public testing::Test {
- protected:
-  typedef QuotaManager::QuotaTableEntry QuotaTableEntry;
-  typedef QuotaManager::QuotaTableEntries QuotaTableEntries;
-  typedef QuotaManager::OriginInfoTableEntries OriginInfoTableEntries;
-
- public:
-  QuotaManagerTest()
-      : mock_time_counter_(0),
-        weak_factory_(this) {
-  }
-
-  virtual void SetUp() {
-    ASSERT_TRUE(data_dir_.CreateUniqueTempDir());
-    mock_special_storage_policy_ = new MockSpecialStoragePolicy;
-    ResetQuotaManager(false /* is_incognito */);
-  }
-
-  virtual void TearDown() {
-    // Make sure the quota manager cleans up correctly.
-    quota_manager_ = NULL;
-    base::RunLoop().RunUntilIdle();
-  }
-
- protected:
-  void ResetQuotaManager(bool is_incognito) {
-    quota_manager_ = new QuotaManager(is_incognito,
-                                      data_dir_.path(),
-                                      MessageLoopProxy::current().get(),
-                                      MessageLoopProxy::current().get(),
-                                      mock_special_storage_policy_.get());
-    // Don't (automatically) start the eviction for testing.
-    quota_manager_->eviction_disabled_ = true;
-    // Don't query the hard disk for remaining capacity.
-    quota_manager_->get_disk_space_fn_ = &GetAvailableDiskSpaceForTest;
-    additional_callback_count_ = 0;
-  }
-
-  MockStorageClient* CreateClient(
-      const MockOriginData* mock_data,
-      size_t mock_data_size,
-      QuotaClient::ID id) {
-    return new MockStorageClient(quota_manager_->proxy(),
-                                 mock_data, id, mock_data_size);
-  }
-
-  void RegisterClient(MockStorageClient* client) {
-    quota_manager_->proxy()->RegisterClient(client);
-  }
-
-  void GetUsageInfo() {
-    usage_info_.clear();
-    quota_manager_->GetUsageInfo(
-        base::Bind(&QuotaManagerTest::DidGetUsageInfo,
-                   weak_factory_.GetWeakPtr()));
-  }
-
-  void GetUsageAndQuotaForWebApps(const GURL& origin,
-                                  StorageType type) {
-    quota_status_ = kQuotaStatusUnknown;
-    usage_ = -1;
-    quota_ = -1;
-    quota_manager_->GetUsageAndQuotaForWebApps(
-        origin, type, base::Bind(&QuotaManagerTest::DidGetUsageAndQuota,
-                                 weak_factory_.GetWeakPtr()));
-  }
-
-  void GetUsageAndQuotaForStorageClient(const GURL& origin,
-                                        StorageType type) {
-    quota_status_ = kQuotaStatusUnknown;
-    usage_ = -1;
-    quota_ = -1;
-    quota_manager_->GetUsageAndQuota(
-        origin, type, base::Bind(&QuotaManagerTest::DidGetUsageAndQuota,
-                                 weak_factory_.GetWeakPtr()));
-  }
-
-  void GetTemporaryGlobalQuota() {
-    quota_status_ = kQuotaStatusUnknown;
-    quota_ = -1;
-    quota_manager_->GetTemporaryGlobalQuota(
-        base::Bind(&QuotaManagerTest::DidGetQuota,
-                   weak_factory_.GetWeakPtr()));
-  }
-
-  void SetTemporaryGlobalQuota(int64 new_quota) {
-    quota_status_ = kQuotaStatusUnknown;
-    quota_ = -1;
-    quota_manager_->SetTemporaryGlobalOverrideQuota(
-        new_quota,
-        base::Bind(&QuotaManagerTest::DidGetQuota,
-                   weak_factory_.GetWeakPtr()));
-  }
-
-  void GetPersistentHostQuota(const std::string& host) {
-    quota_status_ = kQuotaStatusUnknown;
-    quota_ = -1;
-    quota_manager_->GetPersistentHostQuota(
-        host,
-        base::Bind(&QuotaManagerTest::DidGetHostQuota,
-                   weak_factory_.GetWeakPtr()));
-  }
-
-  void SetPersistentHostQuota(const std::string& host, int64 new_quota) {
-    quota_status_ = kQuotaStatusUnknown;
-    quota_ = -1;
-    quota_manager_->SetPersistentHostQuota(
-        host, new_quota,
-        base::Bind(&QuotaManagerTest::DidGetHostQuota,
-                   weak_factory_.GetWeakPtr()));
-  }
-
-  void GetGlobalUsage(StorageType type) {
-    usage_ = -1;
-    unlimited_usage_ = -1;
-    quota_manager_->GetGlobalUsage(
-        type,
-        base::Bind(&QuotaManagerTest::DidGetGlobalUsage,
-                   weak_factory_.GetWeakPtr()));
-  }
-
-  void GetHostUsage(const std::string& host, StorageType type) {
-    usage_ = -1;
-    quota_manager_->GetHostUsage(
-        host, type,
-        base::Bind(&QuotaManagerTest::DidGetHostUsage,
-                   weak_factory_.GetWeakPtr()));
-  }
-
-  void RunAdditionalUsageAndQuotaTask(const GURL& origin, StorageType type) {
-    quota_manager_->GetUsageAndQuota(
-        origin, type,
-        base::Bind(&QuotaManagerTest::DidGetUsageAndQuotaAdditional,
-                   weak_factory_.GetWeakPtr()));
-  }
-
-  void DeleteClientOriginData(QuotaClient* client,
-                              const GURL& origin,
-                              StorageType type) {
-    DCHECK(client);
-    quota_status_ = kQuotaStatusUnknown;
-    client->DeleteOriginData(
-        origin, type,
-        base::Bind(&QuotaManagerTest::StatusCallback,
-                   weak_factory_.GetWeakPtr()));
-  }
-
-  void EvictOriginData(const GURL& origin,
-                       StorageType type) {
-    quota_status_ = kQuotaStatusUnknown;
-    quota_manager_->EvictOriginData(
-        origin, type,
-        base::Bind(&QuotaManagerTest::StatusCallback,
-                   weak_factory_.GetWeakPtr()));
-  }
-
-  void DeleteOriginData(const GURL& origin,
-                        StorageType type,
-                        int quota_client_mask) {
-    quota_status_ = kQuotaStatusUnknown;
-    quota_manager_->DeleteOriginData(
-        origin, type, quota_client_mask,
-        base::Bind(&QuotaManagerTest::StatusCallback,
-                   weak_factory_.GetWeakPtr()));
-  }
-
-  void DeleteHostData(const std::string& host,
-                      StorageType type,
-                      int quota_client_mask) {
-    quota_status_ = kQuotaStatusUnknown;
-    quota_manager_->DeleteHostData(
-        host, type, quota_client_mask,
-        base::Bind(&QuotaManagerTest::StatusCallback,
-                   weak_factory_.GetWeakPtr()));
-  }
-
-  void GetAvailableSpace() {
-    quota_status_ = kQuotaStatusUnknown;
-    available_space_ = -1;
-    quota_manager_->GetAvailableSpace(
-        base::Bind(&QuotaManagerTest::DidGetAvailableSpace,
-                   weak_factory_.GetWeakPtr()));
-  }
-
-  void GetUsageAndQuotaForEviction() {
-    quota_status_ = kQuotaStatusUnknown;
-    usage_ = -1;
-    unlimited_usage_ = -1;
-    quota_ = -1;
-    available_space_ = -1;
-    quota_manager_->GetUsageAndQuotaForEviction(
-        base::Bind(&QuotaManagerTest::DidGetUsageAndQuotaForEviction,
-                   weak_factory_.GetWeakPtr()));
-  }
-
-  void GetCachedOrigins(StorageType type, std::set<GURL>* origins) {
-    ASSERT_TRUE(origins != NULL);
-    origins->clear();
-    quota_manager_->GetCachedOrigins(type, origins);
-  }
-
-  void NotifyStorageAccessed(QuotaClient* client,
-                             const GURL& origin,
-                             StorageType type) {
-    DCHECK(client);
-    quota_manager_->NotifyStorageAccessedInternal(
-        client->id(), origin, type, IncrementMockTime());
-  }
-
-  void DeleteOriginFromDatabase(const GURL& origin, StorageType type) {
-    quota_manager_->DeleteOriginFromDatabase(origin, type);
-  }
-
-  void GetLRUOrigin(StorageType type) {
-    lru_origin_ = GURL();
-    quota_manager_->GetLRUOrigin(
-        type,
-        base::Bind(&QuotaManagerTest::DidGetLRUOrigin,
-                   weak_factory_.GetWeakPtr()));
-  }
-
-  void NotifyOriginInUse(const GURL& origin) {
-    quota_manager_->NotifyOriginInUse(origin);
-  }
-
-  void NotifyOriginNoLongerInUse(const GURL& origin) {
-    quota_manager_->NotifyOriginNoLongerInUse(origin);
-  }
-
-  void GetOriginsModifiedSince(StorageType type, base::Time modified_since) {
-    modified_origins_.clear();
-    modified_origins_type_ = kStorageTypeUnknown;
-    quota_manager_->GetOriginsModifiedSince(
-        type, modified_since,
-        base::Bind(&QuotaManagerTest::DidGetModifiedOrigins,
-                   weak_factory_.GetWeakPtr()));
-  }
-
-  void DumpQuotaTable() {
-    quota_entries_.clear();
-    quota_manager_->DumpQuotaTable(
-        base::Bind(&QuotaManagerTest::DidDumpQuotaTable,
-                   weak_factory_.GetWeakPtr()));
-  }
-
-  void DumpOriginInfoTable() {
-    origin_info_entries_.clear();
-    quota_manager_->DumpOriginInfoTable(
-        base::Bind(&QuotaManagerTest::DidDumpOriginInfoTable,
-                   weak_factory_.GetWeakPtr()));
-  }
-
-  void DidGetUsageInfo(const UsageInfoEntries& entries) {
-    usage_info_.insert(usage_info_.begin(), entries.begin(), entries.end());
-  }
-
-  void DidGetUsageAndQuota(QuotaStatusCode status, int64 usage, int64 quota) {
-    quota_status_ = status;
-    usage_ = usage;
-    quota_ = quota;
-  }
-
-  void DidGetQuota(QuotaStatusCode status,
-                   int64 quota) {
-    quota_status_ = status;
-    quota_ = quota;
-  }
-
-  void DidGetAvailableSpace(QuotaStatusCode status, int64 available_space) {
-    quota_status_ = status;
-    available_space_ = available_space;
-  }
-
-  void DidGetHostQuota(QuotaStatusCode status,
-                       int64 quota) {
-    quota_status_ = status;
-    quota_ = quota;
-  }
-
-  void DidGetGlobalUsage(int64 usage,
-                         int64 unlimited_usage) {
-    usage_ = usage;
-    unlimited_usage_ = unlimited_usage;
-  }
-
-  void DidGetHostUsage(int64 usage) {
-    usage_ = usage;
-  }
-
-  void StatusCallback(QuotaStatusCode status) {
-    ++status_callback_count_;
-    quota_status_ = status;
-  }
-
-  void DidGetUsageAndQuotaForEviction(QuotaStatusCode status,
-                                      const UsageAndQuota& usage_and_quota) {
-    quota_status_ = status;
-    limited_usage_ = usage_and_quota.global_limited_usage;
-    quota_ = usage_and_quota.quota;
-    available_space_ = usage_and_quota.available_disk_space;
-  }
-
-  void DidGetLRUOrigin(const GURL& origin) {
-    lru_origin_ = origin;
-  }
-
-  void DidGetModifiedOrigins(const std::set<GURL>& origins, StorageType type) {
-    modified_origins_ = origins;
-    modified_origins_type_ = type;
-  }
-
-  void DidDumpQuotaTable(const QuotaTableEntries& entries) {
-    quota_entries_ = entries;
-  }
-
-  void DidDumpOriginInfoTable(const OriginInfoTableEntries& entries) {
-    origin_info_entries_ = entries;
-  }
-
-  void GetUsage_WithModifyTestBody(const StorageType type);
-
-  void set_additional_callback_count(int c) { additional_callback_count_ = c; }
-  int additional_callback_count() const { return additional_callback_count_; }
-  void DidGetUsageAndQuotaAdditional(
-      QuotaStatusCode status, int64 usage, int64 quota) {
-    ++additional_callback_count_;
-  }
-
-  QuotaManager* quota_manager() const { return quota_manager_.get(); }
-  void set_quota_manager(QuotaManager* quota_manager) {
-    quota_manager_ = quota_manager;
-  }
-
-  MockSpecialStoragePolicy* mock_special_storage_policy() const {
-    return mock_special_storage_policy_.get();
-  }
-
-  QuotaStatusCode status() const { return quota_status_; }
-  const UsageInfoEntries& usage_info() const { return usage_info_; }
-  int64 usage() const { return usage_; }
-  int64 limited_usage() const { return limited_usage_; }
-  int64 unlimited_usage() const { return unlimited_usage_; }
-  int64 quota() const { return quota_; }
-  int64 available_space() const { return available_space_; }
-  const GURL& lru_origin() const { return lru_origin_; }
-  const std::set<GURL>& modified_origins() const { return modified_origins_; }
-  StorageType modified_origins_type() const { return modified_origins_type_; }
-  const QuotaTableEntries& quota_entries() const { return quota_entries_; }
-  const OriginInfoTableEntries& origin_info_entries() const {
-    return origin_info_entries_;
-  }
-  base::FilePath profile_path() const { return data_dir_.path(); }
-  int status_callback_count() const { return status_callback_count_; }
-  void reset_status_callback_count() { status_callback_count_ = 0; }
-
- private:
-  base::Time IncrementMockTime() {
-    ++mock_time_counter_;
-    return base::Time::FromDoubleT(mock_time_counter_ * 10.0);
-  }
-
-  base::MessageLoop message_loop_;
-  base::ScopedTempDir data_dir_;
-
-  scoped_refptr<QuotaManager> quota_manager_;
-  scoped_refptr<MockSpecialStoragePolicy> mock_special_storage_policy_;
-
-  QuotaStatusCode quota_status_;
-  UsageInfoEntries usage_info_;
-  int64 usage_;
-  int64 limited_usage_;
-  int64 unlimited_usage_;
-  int64 quota_;
-  int64 available_space_;
-  GURL lru_origin_;
-  std::set<GURL> modified_origins_;
-  StorageType modified_origins_type_;
-  QuotaTableEntries quota_entries_;
-  OriginInfoTableEntries origin_info_entries_;
-  int status_callback_count_;
-
-  int additional_callback_count_;
-
-  int mock_time_counter_;
-
-  base::WeakPtrFactory<QuotaManagerTest> weak_factory_;
-
-  DISALLOW_COPY_AND_ASSIGN(QuotaManagerTest);
-};
-
-TEST_F(QuotaManagerTest, GetUsageInfo) {
-  static const MockOriginData kData1[] = {
-    { "http://foo.com/",       kTemp,  10 },
-    { "http://foo.com:8080/",  kTemp,  15 },
-    { "http://bar.com/",       kTemp,  20 },
-    { "http://bar.com/",       kPerm,  50 },
-  };
-  static const MockOriginData kData2[] = {
-    { "https://foo.com/",      kTemp,  30 },
-    { "https://foo.com:8081/", kTemp,  35 },
-    { "http://bar.com/",       kPerm,  40 },
-    { "http://example.com/",   kPerm,  40 },
-  };
-  RegisterClient(CreateClient(kData1, ARRAYSIZE_UNSAFE(kData1),
-      QuotaClient::kFileSystem));
-  RegisterClient(CreateClient(kData2, ARRAYSIZE_UNSAFE(kData2),
-      QuotaClient::kDatabase));
-
-  GetUsageInfo();
-  base::RunLoop().RunUntilIdle();
-
-  EXPECT_EQ(4U, usage_info().size());
-  for (size_t i = 0; i < usage_info().size(); ++i) {
-    const UsageInfo& info = usage_info()[i];
-    if (info.host == "foo.com" && info.type == kTemp) {
-      EXPECT_EQ(10 + 15 + 30 + 35, info.usage);
-    } else if (info.host == "bar.com" && info.type == kTemp) {
-      EXPECT_EQ(20, info.usage);
-    } else if (info.host == "bar.com" && info.type == kPerm) {
-      EXPECT_EQ(50 + 40, info.usage);
-    } else if (info.host == "example.com" && info.type == kPerm) {
-      EXPECT_EQ(40, info.usage);
-    } else {
-      ADD_FAILURE()
-          << "Unexpected host, type: " << info.host << ", " << info.type;
-    }
-  }
-}
-
-TEST_F(QuotaManagerTest, GetUsageAndQuota_Simple) {
-  static const MockOriginData kData[] = {
-    { "http://foo.com/", kTemp, 10 },
-    { "http://foo.com/", kPerm, 80 },
-  };
-  RegisterClient(CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
-      QuotaClient::kFileSystem));
-
-  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(80, usage());
-  EXPECT_EQ(0, quota());
-
-  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(10, usage());
-  EXPECT_LE(0, quota());
-  int64 quota_returned_for_foo = quota();
-
-  GetUsageAndQuotaForWebApps(GURL("http://bar.com/"), kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(0, usage());
-  EXPECT_EQ(quota_returned_for_foo, quota());
-}
-
-TEST_F(QuotaManagerTest, GetUsage_NoClient) {
-  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(0, usage());
-
-  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(0, usage());
-
-  GetHostUsage("foo.com", kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(0, usage());
-
-  GetHostUsage("foo.com", kPerm);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(0, usage());
-
-  GetGlobalUsage(kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(0, usage());
-  EXPECT_EQ(0, unlimited_usage());
-
-  GetGlobalUsage(kPerm);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(0, usage());
-  EXPECT_EQ(0, unlimited_usage());
-}
-
-TEST_F(QuotaManagerTest, GetUsage_EmptyClient) {
-  RegisterClient(CreateClient(NULL, 0, QuotaClient::kFileSystem));
-  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(0, usage());
-
-  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(0, usage());
-
-  GetHostUsage("foo.com", kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(0, usage());
-
-  GetHostUsage("foo.com", kPerm);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(0, usage());
-
-  GetGlobalUsage(kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(0, usage());
-  EXPECT_EQ(0, unlimited_usage());
-
-  GetGlobalUsage(kPerm);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(0, usage());
-  EXPECT_EQ(0, unlimited_usage());
-}
-
-TEST_F(QuotaManagerTest, GetTemporaryUsageAndQuota_MultiOrigins) {
-  static const MockOriginData kData[] = {
-    { "http://foo.com/",        kTemp,  10 },
-    { "http://foo.com:8080/",   kTemp,  20 },
-    { "http://bar.com/",        kTemp,   5 },
-    { "https://bar.com/",       kTemp,   7 },
-    { "http://baz.com/",        kTemp,  30 },
-    { "http://foo.com/",        kPerm,  40 },
-  };
-  RegisterClient(CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
-      QuotaClient::kFileSystem));
-
-  // This time explicitly sets a temporary global quota.
-  SetTemporaryGlobalQuota(100);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(100, quota());
-
-  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(10 + 20, usage());
-
-  const int kPerHostQuota = 100 / kPerHostTemporaryPortion;
-
-  // The host's quota should be its full portion of the global quota
-  // since global usage is under the global quota.
-  EXPECT_EQ(kPerHostQuota, quota());
-
-  GetUsageAndQuotaForWebApps(GURL("http://bar.com/"), kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(5 + 7, usage());
-  EXPECT_EQ(kPerHostQuota, quota());
-}
-
-TEST_F(QuotaManagerTest, GetUsage_MultipleClients) {
-  static const MockOriginData kData1[] = {
-    { "http://foo.com/",              kTemp, 1 },
-    { "http://bar.com/",              kTemp, 2 },
-    { "http://bar.com/",              kPerm, 4 },
-    { "http://unlimited/",            kPerm, 8 },
-    { "http://installed/",            kPerm, 16 },
-  };
-  static const MockOriginData kData2[] = {
-    { "https://foo.com/",             kTemp, 128 },
-    { "http://example.com/",          kPerm, 256 },
-    { "http://unlimited/",            kTemp, 512 },
-    { "http://installed/",            kTemp, 1024 },
-  };
-  mock_special_storage_policy()->AddUnlimited(GURL("http://unlimited/"));
-  mock_special_storage_policy()->GrantQueryDiskSize(GURL("http://installed/"));
-  RegisterClient(CreateClient(kData1, ARRAYSIZE_UNSAFE(kData1),
-      QuotaClient::kFileSystem));
-  RegisterClient(CreateClient(kData2, ARRAYSIZE_UNSAFE(kData2),
-      QuotaClient::kDatabase));
-
-  const int64 kTempQuotaBase =
-      GetAvailableDiskSpaceForTest(base::FilePath()) / kPerHostTemporaryPortion;
-
-  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(1 + 128, usage());
-
-  GetUsageAndQuotaForWebApps(GURL("http://bar.com/"), kPerm);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(4, usage());
-
-  GetUsageAndQuotaForWebApps(GURL("http://unlimited/"), kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(512, usage());
-  EXPECT_EQ(std::min(kAvailableSpaceForApp, kTempQuotaBase) + usage(), quota());
-
-  GetUsageAndQuotaForWebApps(GURL("http://unlimited/"), kPerm);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(8, usage());
-  EXPECT_EQ(kAvailableSpaceForApp + usage(), quota());
-
-  GetAvailableSpace();
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_LE(0, available_space());
-
-  GetUsageAndQuotaForWebApps(GURL("http://installed/"), kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(1024, usage());
-  EXPECT_EQ(std::min(kAvailableSpaceForApp, kTempQuotaBase) + usage(), quota());
-
-  GetUsageAndQuotaForWebApps(GURL("http://installed/"), kPerm);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(16, usage());
-  EXPECT_EQ(usage(), quota());  // Over-budget case.
-
-  GetGlobalUsage(kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(1 + 2 + 128 + 512 + 1024, usage());
-  EXPECT_EQ(512, unlimited_usage());
-
-  GetGlobalUsage(kPerm);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(4 + 8 + 16 + 256, usage());
-  EXPECT_EQ(8, unlimited_usage());
-}
-
-void QuotaManagerTest::GetUsage_WithModifyTestBody(const StorageType type) {
-  const MockOriginData data[] = {
-    { "http://foo.com/",   type,  10 },
-    { "http://foo.com:1/", type,  20 },
-  };
-  MockStorageClient* client = CreateClient(data, ARRAYSIZE_UNSAFE(data),
-      QuotaClient::kFileSystem);
-  RegisterClient(client);
-
-  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), type);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(10 + 20, usage());
-
-  client->ModifyOriginAndNotify(GURL("http://foo.com/"), type, 30);
-  client->ModifyOriginAndNotify(GURL("http://foo.com:1/"), type, -5);
-  client->AddOriginAndNotify(GURL("https://foo.com/"), type, 1);
-
-  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), type);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(10 + 20 + 30 - 5 + 1, usage());
-  int foo_usage = usage();
-
-  client->AddOriginAndNotify(GURL("http://bar.com/"), type, 40);
-  GetUsageAndQuotaForWebApps(GURL("http://bar.com/"), type);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(40, usage());
-
-  GetGlobalUsage(type);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(foo_usage + 40, usage());
-  EXPECT_EQ(0, unlimited_usage());
-}
-
-TEST_F(QuotaManagerTest, GetTemporaryUsage_WithModify) {
-  GetUsage_WithModifyTestBody(kTemp);
-}
-
-TEST_F(QuotaManagerTest, GetTemporaryUsageAndQuota_WithAdditionalTasks) {
-  static const MockOriginData kData[] = {
-    { "http://foo.com/",        kTemp, 10 },
-    { "http://foo.com:8080/",   kTemp, 20 },
-    { "http://bar.com/",        kTemp, 13 },
-    { "http://foo.com/",        kPerm, 40 },
-  };
-  RegisterClient(CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
-      QuotaClient::kFileSystem));
-  SetTemporaryGlobalQuota(100);
-  base::RunLoop().RunUntilIdle();
-
-  const int kPerHostQuota = 100 / QuotaManager::kPerHostTemporaryPortion;
-
-  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp);
-  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp);
-  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(10 + 20, usage());
-  EXPECT_EQ(kPerHostQuota, quota());
-
-  set_additional_callback_count(0);
-  RunAdditionalUsageAndQuotaTask(GURL("http://foo.com/"),
-                                 kTemp);
-  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp);
-  RunAdditionalUsageAndQuotaTask(GURL("http://bar.com/"), kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(10 + 20, usage());
-  EXPECT_EQ(kPerHostQuota, quota());
-  EXPECT_EQ(2, additional_callback_count());
-}
-
-TEST_F(QuotaManagerTest, GetTemporaryUsageAndQuota_NukeManager) {
-  static const MockOriginData kData[] = {
-    { "http://foo.com/",        kTemp, 10 },
-    { "http://foo.com:8080/",   kTemp, 20 },
-    { "http://bar.com/",        kTemp, 13 },
-    { "http://foo.com/",        kPerm, 40 },
-  };
-  RegisterClient(CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
-      QuotaClient::kFileSystem));
-  SetTemporaryGlobalQuota(100);
-  base::RunLoop().RunUntilIdle();
-
-  set_additional_callback_count(0);
-  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp);
-  RunAdditionalUsageAndQuotaTask(GURL("http://foo.com/"),
-                                 kTemp);
-  RunAdditionalUsageAndQuotaTask(GURL("http://bar.com/"),
-                                 kTemp);
-
-  DeleteOriginData(GURL("http://foo.com/"), kTemp, kAllClients);
-  DeleteOriginData(GURL("http://bar.com/"), kTemp, kAllClients);
-
-  // Nuke before waiting for callbacks.
-  set_quota_manager(NULL);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaErrorAbort, status());
-}
-
-TEST_F(QuotaManagerTest, GetTemporaryUsageAndQuota_Overbudget) {
-  static const MockOriginData kData[] = {
-    { "http://usage1/",    kTemp,   1 },
-    { "http://usage10/",   kTemp,  10 },
-    { "http://usage200/",  kTemp, 200 },
-  };
-  RegisterClient(CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
-      QuotaClient::kFileSystem));
-  SetTemporaryGlobalQuota(100);
-  base::RunLoop().RunUntilIdle();
-
-  const int kPerHostQuota = 100 / QuotaManager::kPerHostTemporaryPortion;
-
-  GetUsageAndQuotaForWebApps(GURL("http://usage1/"), kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(1, usage());
-  EXPECT_EQ(1, quota());  // should be clamped to our current usage
-
-  GetUsageAndQuotaForWebApps(GURL("http://usage10/"), kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(10, usage());
-  EXPECT_EQ(10, quota());
-
-  GetUsageAndQuotaForWebApps(GURL("http://usage200/"), kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(200, usage());
-  EXPECT_EQ(kPerHostQuota, quota());  // should be clamped to the nominal quota
-}
-
-TEST_F(QuotaManagerTest, GetTemporaryUsageAndQuota_Unlimited) {
-  static const MockOriginData kData[] = {
-    { "http://usage10/",   kTemp,    10 },
-    { "http://usage50/",   kTemp,    50 },
-    { "http://unlimited/", kTemp,  4000 },
-  };
-  mock_special_storage_policy()->AddUnlimited(GURL("http://unlimited/"));
-  MockStorageClient* client = CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
-      QuotaClient::kFileSystem);
-  RegisterClient(client);
-
-  // Test when not overbugdet.
-  SetTemporaryGlobalQuota(1000);
-  base::RunLoop().RunUntilIdle();
-
-  GetGlobalUsage(kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(10 + 50 + 4000, usage());
-  EXPECT_EQ(4000, unlimited_usage());
-
-  const int kPerHostQuotaFor1000 =
-      1000 / QuotaManager::kPerHostTemporaryPortion;
-
-  GetUsageAndQuotaForWebApps(GURL("http://usage10/"), kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(10, usage());
-  EXPECT_EQ(kPerHostQuotaFor1000, quota());
-
-  GetUsageAndQuotaForWebApps(GURL("http://usage50/"), kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(50, usage());
-  EXPECT_EQ(kPerHostQuotaFor1000, quota());
-
-  GetUsageAndQuotaForWebApps(GURL("http://unlimited/"), kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(4000, usage());
-  EXPECT_EQ(kAvailableSpaceForApp + usage(), quota());
-
-  GetUsageAndQuotaForStorageClient(GURL("http://unlimited/"), kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(0, usage());
-  EXPECT_EQ(QuotaManager::kNoLimit, quota());
-
-  // Test when overbugdet.
-  SetTemporaryGlobalQuota(100);
-  base::RunLoop().RunUntilIdle();
-
-  const int kPerHostQuotaFor100 =
-      100 / QuotaManager::kPerHostTemporaryPortion;
-
-  GetUsageAndQuotaForWebApps(GURL("http://usage10/"), kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(10, usage());
-  EXPECT_EQ(kPerHostQuotaFor100, quota());
-
-  GetUsageAndQuotaForWebApps(GURL("http://usage50/"), kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(50, usage());
-  EXPECT_EQ(kPerHostQuotaFor100, quota());
-
-  GetUsageAndQuotaForWebApps(GURL("http://unlimited/"), kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(4000, usage());
-  EXPECT_EQ(kAvailableSpaceForApp + usage(), quota());
-
-  GetUsageAndQuotaForStorageClient(GURL("http://unlimited/"), kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(0, usage());
-  EXPECT_EQ(QuotaManager::kNoLimit, quota());
-
-  // Revoke the unlimited rights and make sure the change is noticed.
-  mock_special_storage_policy()->Reset();
-  mock_special_storage_policy()->NotifyCleared();
-
-  GetGlobalUsage(kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(10 + 50 + 4000, usage());
-  EXPECT_EQ(0, unlimited_usage());
-
-  GetUsageAndQuotaForWebApps(GURL("http://usage10/"), kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(10, usage());
-  EXPECT_EQ(10, quota());  // should be clamped to our current usage
-
-  GetUsageAndQuotaForWebApps(GURL("http://usage50/"), kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(50, usage());
-  EXPECT_EQ(kPerHostQuotaFor100, quota());
-
-  GetUsageAndQuotaForWebApps(GURL("http://unlimited/"), kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(4000, usage());
-  EXPECT_EQ(kPerHostQuotaFor100, quota());
-
-  GetUsageAndQuotaForStorageClient(GURL("http://unlimited/"), kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(4000, usage());
-  EXPECT_EQ(kPerHostQuotaFor100, quota());
-}
-
-TEST_F(QuotaManagerTest, OriginInUse) {
-  const GURL kFooOrigin("http://foo.com/");
-  const GURL kBarOrigin("http://bar.com/");
-
-  EXPECT_FALSE(quota_manager()->IsOriginInUse(kFooOrigin));
-  quota_manager()->NotifyOriginInUse(kFooOrigin);  // count of 1
-  EXPECT_TRUE(quota_manager()->IsOriginInUse(kFooOrigin));
-  quota_manager()->NotifyOriginInUse(kFooOrigin);  // count of 2
-  EXPECT_TRUE(quota_manager()->IsOriginInUse(kFooOrigin));
-  quota_manager()->NotifyOriginNoLongerInUse(kFooOrigin);  // count of 1
-  EXPECT_TRUE(quota_manager()->IsOriginInUse(kFooOrigin));
-
-  EXPECT_FALSE(quota_manager()->IsOriginInUse(kBarOrigin));
-  quota_manager()->NotifyOriginInUse(kBarOrigin);
-  EXPECT_TRUE(quota_manager()->IsOriginInUse(kBarOrigin));
-  quota_manager()->NotifyOriginNoLongerInUse(kBarOrigin);
-  EXPECT_FALSE(quota_manager()->IsOriginInUse(kBarOrigin));
-
-  quota_manager()->NotifyOriginNoLongerInUse(kFooOrigin);
-  EXPECT_FALSE(quota_manager()->IsOriginInUse(kFooOrigin));
-}
-
-TEST_F(QuotaManagerTest, GetAndSetPerststentHostQuota) {
-  RegisterClient(CreateClient(NULL, 0, QuotaClient::kFileSystem));
-
-  GetPersistentHostQuota("foo.com");
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(0, quota());
-
-  SetPersistentHostQuota("foo.com", 100);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(100, quota());
-
-  GetPersistentHostQuota("foo.com");
-  SetPersistentHostQuota("foo.com", 200);
-  GetPersistentHostQuota("foo.com");
-  SetPersistentHostQuota("foo.com", QuotaManager::kPerHostPersistentQuotaLimit);
-  GetPersistentHostQuota("foo.com");
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(QuotaManager::kPerHostPersistentQuotaLimit, quota());
-
-  // Persistent quota should be capped at the per-host quota limit.
-  SetPersistentHostQuota("foo.com",
-                         QuotaManager::kPerHostPersistentQuotaLimit + 100);
-  GetPersistentHostQuota("foo.com");
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(QuotaManager::kPerHostPersistentQuotaLimit, quota());
-}
-
-TEST_F(QuotaManagerTest, GetAndSetPersistentUsageAndQuota) {
-  RegisterClient(CreateClient(NULL, 0, QuotaClient::kFileSystem));
-
-  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(0, usage());
-  EXPECT_EQ(0, quota());
-
-  SetPersistentHostQuota("foo.com", 100);
-  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(0, usage());
-  EXPECT_EQ(100, quota());
-
-  // For installed app GetUsageAndQuotaForWebApps returns the capped quota.
-  mock_special_storage_policy()->GrantQueryDiskSize(GURL("http://installed/"));
-  SetPersistentHostQuota("installed", kAvailableSpaceForApp + 100);
-  GetUsageAndQuotaForWebApps(GURL("http://installed/"), kPerm);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kAvailableSpaceForApp, quota());
-
-  // Ditto for unlimited apps.
-  mock_special_storage_policy()->AddUnlimited(GURL("http://unlimited/"));
-  GetUsageAndQuotaForWebApps(GURL("http://unlimited/"), kPerm);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kAvailableSpaceForApp, quota());
-
-  // GetUsageAndQuotaForStorageClient should just return 0 usage and
-  // kNoLimit quota.
-  GetUsageAndQuotaForStorageClient(GURL("http://unlimited/"), kPerm);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(0, usage());
-  EXPECT_EQ(QuotaManager::kNoLimit, quota());
-}
-
-TEST_F(QuotaManagerTest, GetSyncableQuota) {
-  RegisterClient(CreateClient(NULL, 0, QuotaClient::kFileSystem));
-
-  // Pre-condition check: available disk space (for testing) is less than
-  // the default quota for syncable storage.
-  EXPECT_LE(kAvailableSpaceForApp,
-            QuotaManager::kSyncableStorageDefaultHostQuota);
-
-  // For installed apps the quota manager should return
-  // kAvailableSpaceForApp as syncable quota (because of the pre-condition).
-  mock_special_storage_policy()->GrantQueryDiskSize(GURL("http://installed/"));
-  GetUsageAndQuotaForWebApps(GURL("http://installed/"), kSync);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(0, usage());
-  EXPECT_EQ(kAvailableSpaceForApp, quota());
-
-  // If it's not installed (which shouldn't happen in real case) it
-  // should just return the default host quota for syncable.
-  GetUsageAndQuotaForWebApps(GURL("http://foo/"), kSync);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(0, usage());
-  EXPECT_EQ(QuotaManager::kSyncableStorageDefaultHostQuota, quota());
-}
-
-TEST_F(QuotaManagerTest, GetPersistentUsageAndQuota_MultiOrigins) {
-  static const MockOriginData kData[] = {
-    { "http://foo.com/",        kPerm, 10 },
-    { "http://foo.com:8080/",   kPerm, 20 },
-    { "https://foo.com/",       kPerm, 13 },
-    { "https://foo.com:8081/",  kPerm, 19 },
-    { "http://bar.com/",        kPerm,  5 },
-    { "https://bar.com/",       kPerm,  7 },
-    { "http://baz.com/",        kPerm, 30 },
-    { "http://foo.com/",        kTemp, 40 },
-  };
-  RegisterClient(CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
-      QuotaClient::kFileSystem));
-
-  SetPersistentHostQuota("foo.com", 100);
-  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(10 + 20 + 13 + 19, usage());
-  EXPECT_EQ(100, quota());
-}
-
-TEST_F(QuotaManagerTest, GetPersistentUsage_WithModify) {
-  GetUsage_WithModifyTestBody(kPerm);
-}
-
-TEST_F(QuotaManagerTest, GetPersistentUsageAndQuota_WithAdditionalTasks) {
-  static const MockOriginData kData[] = {
-    { "http://foo.com/",        kPerm,  10 },
-    { "http://foo.com:8080/",   kPerm,  20 },
-    { "http://bar.com/",        kPerm,  13 },
-    { "http://foo.com/",        kTemp,  40 },
-  };
-  RegisterClient(CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
-      QuotaClient::kFileSystem));
-  SetPersistentHostQuota("foo.com", 100);
-
-  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm);
-  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm);
-  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(10 + 20, usage());
-  EXPECT_EQ(100, quota());
-
-  set_additional_callback_count(0);
-  RunAdditionalUsageAndQuotaTask(GURL("http://foo.com/"),
-                                 kPerm);
-  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm);
-  RunAdditionalUsageAndQuotaTask(GURL("http://bar.com/"), kPerm);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(10 + 20, usage());
-  EXPECT_EQ(2, additional_callback_count());
-}
-
-TEST_F(QuotaManagerTest, GetPersistentUsageAndQuota_NukeManager) {
-  static const MockOriginData kData[] = {
-    { "http://foo.com/",        kPerm,  10 },
-    { "http://foo.com:8080/",   kPerm,  20 },
-    { "http://bar.com/",        kPerm,  13 },
-    { "http://foo.com/",        kTemp,  40 },
-  };
-  RegisterClient(CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
-      QuotaClient::kFileSystem));
-  SetPersistentHostQuota("foo.com", 100);
-
-  set_additional_callback_count(0);
-  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm);
-  RunAdditionalUsageAndQuotaTask(GURL("http://foo.com/"), kPerm);
-  RunAdditionalUsageAndQuotaTask(GURL("http://bar.com/"), kPerm);
-
-  // Nuke before waiting for callbacks.
-  set_quota_manager(NULL);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaErrorAbort, status());
-}
-
-TEST_F(QuotaManagerTest, GetUsage_Simple) {
-  static const MockOriginData kData[] = {
-    { "http://foo.com/",   kPerm,       1 },
-    { "http://foo.com:1/", kPerm,      20 },
-    { "http://bar.com/",   kTemp,     300 },
-    { "https://buz.com/",  kTemp,    4000 },
-    { "http://buz.com/",   kTemp,   50000 },
-    { "http://bar.com:1/", kPerm,  600000 },
-    { "http://foo.com/",   kTemp, 7000000 },
-  };
-  RegisterClient(CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
-      QuotaClient::kFileSystem));
-
-  GetGlobalUsage(kPerm);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(usage(), 1 + 20 + 600000);
-  EXPECT_EQ(0, unlimited_usage());
-
-  GetGlobalUsage(kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(usage(), 300 + 4000 + 50000 + 7000000);
-  EXPECT_EQ(0, unlimited_usage());
-
-  GetHostUsage("foo.com", kPerm);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(usage(), 1 + 20);
-
-  GetHostUsage("buz.com", kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(usage(), 4000 + 50000);
-}
-
-TEST_F(QuotaManagerTest, GetUsage_WithModification) {
-  static const MockOriginData kData[] = {
-    { "http://foo.com/",   kPerm,       1 },
-    { "http://foo.com:1/", kPerm,      20 },
-    { "http://bar.com/",   kTemp,     300 },
-    { "https://buz.com/",  kTemp,    4000 },
-    { "http://buz.com/",   kTemp,   50000 },
-    { "http://bar.com:1/", kPerm,  600000 },
-    { "http://foo.com/",   kTemp, 7000000 },
-  };
-
-  MockStorageClient* client = CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
-      QuotaClient::kFileSystem);
-  RegisterClient(client);
-
-  GetGlobalUsage(kPerm);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(usage(), 1 + 20 + 600000);
-  EXPECT_EQ(0, unlimited_usage());
-
-  client->ModifyOriginAndNotify(
-      GURL("http://foo.com/"), kPerm, 80000000);
-
-  GetGlobalUsage(kPerm);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(usage(), 1 + 20 + 600000 + 80000000);
-  EXPECT_EQ(0, unlimited_usage());
-
-  GetGlobalUsage(kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(usage(), 300 + 4000 + 50000 + 7000000);
-  EXPECT_EQ(0, unlimited_usage());
-
-  client->ModifyOriginAndNotify(
-      GURL("http://foo.com/"), kTemp, 1);
-
-  GetGlobalUsage(kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(usage(), 300 + 4000 + 50000 + 7000000 + 1);
-  EXPECT_EQ(0, unlimited_usage());
-
-  GetHostUsage("buz.com", kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(usage(), 4000 + 50000);
-
-  client->ModifyOriginAndNotify(
-      GURL("http://buz.com/"), kTemp, 900000000);
-
-  GetHostUsage("buz.com", kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(usage(), 4000 + 50000 + 900000000);
-}
-
-TEST_F(QuotaManagerTest, GetUsage_WithDeleteOrigin) {
-  static const MockOriginData kData[] = {
-    { "http://foo.com/",   kTemp,     1 },
-    { "http://foo.com:1/", kTemp,    20 },
-    { "http://foo.com/",   kPerm,   300 },
-    { "http://bar.com/",   kTemp,  4000 },
-  };
-  MockStorageClient* client = CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
-      QuotaClient::kFileSystem);
-  RegisterClient(client);
-
-  GetGlobalUsage(kTemp);
-  base::RunLoop().RunUntilIdle();
-  int64 predelete_global_tmp = usage();
-
-  GetHostUsage("foo.com", kTemp);
-  base::RunLoop().RunUntilIdle();
-  int64 predelete_host_tmp = usage();
-
-  GetHostUsage("foo.com", kPerm);
-  base::RunLoop().RunUntilIdle();
-  int64 predelete_host_pers = usage();
-
-  DeleteClientOriginData(client, GURL("http://foo.com/"),
-                         kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-
-  GetGlobalUsage(kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(predelete_global_tmp - 1, usage());
-
-  GetHostUsage("foo.com", kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(predelete_host_tmp - 1, usage());
-
-  GetHostUsage("foo.com", kPerm);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(predelete_host_pers, usage());
-}
-
-TEST_F(QuotaManagerTest, GetAvailableSpaceTest) {
-  GetAvailableSpace();
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_LE(0, available_space());
-}
-
-TEST_F(QuotaManagerTest, EvictOriginData) {
-  static const MockOriginData kData1[] = {
-    { "http://foo.com/",   kTemp,     1 },
-    { "http://foo.com:1/", kTemp,    20 },
-    { "http://foo.com/",   kPerm,   300 },
-    { "http://bar.com/",   kTemp,  4000 },
-  };
-  static const MockOriginData kData2[] = {
-    { "http://foo.com/",   kTemp, 50000 },
-    { "http://foo.com:1/", kTemp,  6000 },
-    { "http://foo.com/",   kPerm,   700 },
-    { "https://foo.com/",  kTemp,    80 },
-    { "http://bar.com/",   kTemp,     9 },
-  };
-  MockStorageClient* client1 = CreateClient(kData1, ARRAYSIZE_UNSAFE(kData1),
-      QuotaClient::kFileSystem);
-  MockStorageClient* client2 = CreateClient(kData2, ARRAYSIZE_UNSAFE(kData2),
-      QuotaClient::kDatabase);
-  RegisterClient(client1);
-  RegisterClient(client2);
-
-  GetGlobalUsage(kTemp);
-  base::RunLoop().RunUntilIdle();
-  int64 predelete_global_tmp = usage();
-
-  GetHostUsage("foo.com", kTemp);
-  base::RunLoop().RunUntilIdle();
-  int64 predelete_host_tmp = usage();
-
-  GetHostUsage("foo.com", kPerm);
-  base::RunLoop().RunUntilIdle();
-  int64 predelete_host_pers = usage();
-
-  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kData1); ++i)
-    quota_manager()->NotifyStorageAccessed(QuotaClient::kUnknown,
-        GURL(kData1[i].origin), kData1[i].type);
-  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kData2); ++i)
-    quota_manager()->NotifyStorageAccessed(QuotaClient::kUnknown,
-        GURL(kData2[i].origin), kData2[i].type);
-  base::RunLoop().RunUntilIdle();
-
-  EvictOriginData(GURL("http://foo.com/"), kTemp);
-  base::RunLoop().RunUntilIdle();
-
-  DumpOriginInfoTable();
-  base::RunLoop().RunUntilIdle();
-
-  typedef OriginInfoTableEntries::const_iterator iterator;
-  for (iterator itr(origin_info_entries().begin()),
-                end(origin_info_entries().end());
-       itr != end; ++itr) {
-    if (itr->type == kTemp)
-      EXPECT_NE(std::string("http://foo.com/"), itr->origin.spec());
-  }
-
-  GetGlobalUsage(kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(predelete_global_tmp - (1 + 50000), usage());
-
-  GetHostUsage("foo.com", kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(predelete_host_tmp - (1 + 50000), usage());
-
-  GetHostUsage("foo.com", kPerm);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(predelete_host_pers, usage());
-}
-
-TEST_F(QuotaManagerTest, EvictOriginDataWithDeletionError) {
-  static const MockOriginData kData[] = {
-    { "http://foo.com/",   kTemp,       1 },
-    { "http://foo.com:1/", kTemp,      20 },
-    { "http://foo.com/",   kPerm,     300 },
-    { "http://bar.com/",   kTemp,    4000 },
-  };
-  static const int kNumberOfTemporaryOrigins = 3;
-  MockStorageClient* client = CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
-      QuotaClient::kFileSystem);
-  RegisterClient(client);
-
-  GetGlobalUsage(kTemp);
-  base::RunLoop().RunUntilIdle();
-  int64 predelete_global_tmp = usage();
-
-  GetHostUsage("foo.com", kTemp);
-  base::RunLoop().RunUntilIdle();
-  int64 predelete_host_tmp = usage();
-
-  GetHostUsage("foo.com", kPerm);
-  base::RunLoop().RunUntilIdle();
-  int64 predelete_host_pers = usage();
-
-  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kData); ++i)
-    NotifyStorageAccessed(client, GURL(kData[i].origin), kData[i].type);
-  base::RunLoop().RunUntilIdle();
-
-  client->AddOriginToErrorSet(GURL("http://foo.com/"), kTemp);
-
-  for (int i = 0;
-       i < QuotaManager::kThresholdOfErrorsToBeBlacklisted + 1;
-       ++i) {
-    EvictOriginData(GURL("http://foo.com/"), kTemp);
-    base::RunLoop().RunUntilIdle();
-    EXPECT_EQ(kQuotaErrorInvalidModification, status());
-  }
-
-  DumpOriginInfoTable();
-  base::RunLoop().RunUntilIdle();
-
-  bool found_origin_in_database = false;
-  typedef OriginInfoTableEntries::const_iterator iterator;
-  for (iterator itr(origin_info_entries().begin()),
-                end(origin_info_entries().end());
-       itr != end; ++itr) {
-    if (itr->type == kTemp &&
-        GURL("http://foo.com/") == itr->origin) {
-      found_origin_in_database = true;
-      break;
-    }
-  }
-  // The origin "http://foo.com/" should be in the database.
-  EXPECT_TRUE(found_origin_in_database);
-
-  for (size_t i = 0; i < kNumberOfTemporaryOrigins - 1; ++i) {
-    GetLRUOrigin(kTemp);
-    base::RunLoop().RunUntilIdle();
-    EXPECT_FALSE(lru_origin().is_empty());
-    // The origin "http://foo.com/" should not be in the LRU list.
-    EXPECT_NE(std::string("http://foo.com/"), lru_origin().spec());
-    DeleteOriginFromDatabase(lru_origin(), kTemp);
-    base::RunLoop().RunUntilIdle();
-  }
-
-  // Now the LRU list must be empty.
-  GetLRUOrigin(kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_TRUE(lru_origin().is_empty());
-
-  // Deleting origins from the database should not affect the results of the
-  // following checks.
-  GetGlobalUsage(kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(predelete_global_tmp, usage());
-
-  GetHostUsage("foo.com", kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(predelete_host_tmp, usage());
-
-  GetHostUsage("foo.com", kPerm);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(predelete_host_pers, usage());
-}
-
-TEST_F(QuotaManagerTest, GetUsageAndQuotaForEviction) {
-  static const MockOriginData kData[] = {
-    { "http://foo.com/",   kTemp,       1 },
-    { "http://foo.com:1/", kTemp,      20 },
-    { "http://foo.com/",   kPerm,     300 },
-    { "http://unlimited/", kTemp,    4000 },
-  };
-
-  mock_special_storage_policy()->AddUnlimited(GURL("http://unlimited/"));
-  MockStorageClient* client = CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
-      QuotaClient::kFileSystem);
-  RegisterClient(client);
-
-  SetTemporaryGlobalQuota(10000000);
-  base::RunLoop().RunUntilIdle();
-
-  GetUsageAndQuotaForEviction();
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(21, limited_usage());
-  EXPECT_EQ(10000000, quota());
-  EXPECT_LE(0, available_space());
-}
-
-TEST_F(QuotaManagerTest, DeleteHostDataSimple) {
-  static const MockOriginData kData[] = {
-    { "http://foo.com/",   kTemp,     1 },
-  };
-  MockStorageClient* client = CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
-      QuotaClient::kFileSystem);
-  RegisterClient(client);
-
-  GetGlobalUsage(kTemp);
-  base::RunLoop().RunUntilIdle();
-  const int64 predelete_global_tmp = usage();
-
-  GetHostUsage("foo.com", kTemp);
-  base::RunLoop().RunUntilIdle();
-  int64 predelete_host_tmp = usage();
-
-  GetHostUsage("foo.com", kPerm);
-  base::RunLoop().RunUntilIdle();
-  int64 predelete_host_pers = usage();
-
-  DeleteHostData(std::string(), kTemp, kAllClients);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-
-  GetGlobalUsage(kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(predelete_global_tmp, usage());
-
-  GetHostUsage("foo.com", kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(predelete_host_tmp, usage());
-
-  GetHostUsage("foo.com", kPerm);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(predelete_host_pers, usage());
-
-  DeleteHostData("foo.com", kTemp, kAllClients);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-
-  GetGlobalUsage(kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(predelete_global_tmp - 1, usage());
-
-  GetHostUsage("foo.com", kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(predelete_host_tmp - 1, usage());
-
-  GetHostUsage("foo.com", kPerm);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(predelete_host_pers, usage());
-}
-
-TEST_F(QuotaManagerTest, DeleteHostDataMultiple) {
-  static const MockOriginData kData1[] = {
-    { "http://foo.com/",   kTemp,     1 },
-    { "http://foo.com:1/", kTemp,    20 },
-    { "http://foo.com/",   kPerm,   300 },
-    { "http://bar.com/",   kTemp,  4000 },
-  };
-  static const MockOriginData kData2[] = {
-    { "http://foo.com/",   kTemp, 50000 },
-    { "http://foo.com:1/", kTemp,  6000 },
-    { "http://foo.com/",   kPerm,   700 },
-    { "https://foo.com/",  kTemp,    80 },
-    { "http://bar.com/",   kTemp,     9 },
-  };
-  MockStorageClient* client1 = CreateClient(kData1, ARRAYSIZE_UNSAFE(kData1),
-      QuotaClient::kFileSystem);
-  MockStorageClient* client2 = CreateClient(kData2, ARRAYSIZE_UNSAFE(kData2),
-      QuotaClient::kDatabase);
-  RegisterClient(client1);
-  RegisterClient(client2);
-
-  GetGlobalUsage(kTemp);
-  base::RunLoop().RunUntilIdle();
-  const int64 predelete_global_tmp = usage();
-
-  GetHostUsage("foo.com", kTemp);
-  base::RunLoop().RunUntilIdle();
-  const int64 predelete_foo_tmp = usage();
-
-  GetHostUsage("bar.com", kTemp);
-  base::RunLoop().RunUntilIdle();
-  const int64 predelete_bar_tmp = usage();
-
-  GetHostUsage("foo.com", kPerm);
-  base::RunLoop().RunUntilIdle();
-  const int64 predelete_foo_pers = usage();
-
-  GetHostUsage("bar.com", kPerm);
-  base::RunLoop().RunUntilIdle();
-  const int64 predelete_bar_pers = usage();
-
-  reset_status_callback_count();
-  DeleteHostData("foo.com", kTemp, kAllClients);
-  DeleteHostData("bar.com", kTemp, kAllClients);
-  DeleteHostData("foo.com", kTemp, kAllClients);
-  base::RunLoop().RunUntilIdle();
-
-  EXPECT_EQ(3, status_callback_count());
-
-  DumpOriginInfoTable();
-  base::RunLoop().RunUntilIdle();
-
-  typedef OriginInfoTableEntries::const_iterator iterator;
-  for (iterator itr(origin_info_entries().begin()),
-                end(origin_info_entries().end());
-       itr != end; ++itr) {
-    if (itr->type == kTemp) {
-      EXPECT_NE(std::string("http://foo.com/"), itr->origin.spec());
-      EXPECT_NE(std::string("http://foo.com:1/"), itr->origin.spec());
-      EXPECT_NE(std::string("https://foo.com/"), itr->origin.spec());
-      EXPECT_NE(std::string("http://bar.com/"), itr->origin.spec());
-    }
-  }
-
-  GetGlobalUsage(kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(predelete_global_tmp - (1 + 20 + 4000 + 50000 + 6000 + 80 + 9),
-            usage());
-
-  GetHostUsage("foo.com", kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(predelete_foo_tmp - (1 + 20 + 50000 + 6000 + 80), usage());
-
-  GetHostUsage("bar.com", kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(predelete_bar_tmp - (4000 + 9), usage());
-
-  GetHostUsage("foo.com", kPerm);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(predelete_foo_pers, usage());
-
-  GetHostUsage("bar.com", kPerm);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(predelete_bar_pers, usage());
-}
-
-// Single-run DeleteOriginData cases must be well covered by
-// EvictOriginData tests.
-TEST_F(QuotaManagerTest, DeleteOriginDataMultiple) {
-  static const MockOriginData kData1[] = {
-    { "http://foo.com/",   kTemp,     1 },
-    { "http://foo.com:1/", kTemp,    20 },
-    { "http://foo.com/",   kPerm,   300 },
-    { "http://bar.com/",   kTemp,  4000 },
-  };
-  static const MockOriginData kData2[] = {
-    { "http://foo.com/",   kTemp, 50000 },
-    { "http://foo.com:1/", kTemp,  6000 },
-    { "http://foo.com/",   kPerm,   700 },
-    { "https://foo.com/",  kTemp,    80 },
-    { "http://bar.com/",   kTemp,     9 },
-  };
-  MockStorageClient* client1 = CreateClient(kData1, ARRAYSIZE_UNSAFE(kData1),
-      QuotaClient::kFileSystem);
-  MockStorageClient* client2 = CreateClient(kData2, ARRAYSIZE_UNSAFE(kData2),
-      QuotaClient::kDatabase);
-  RegisterClient(client1);
-  RegisterClient(client2);
-
-  GetGlobalUsage(kTemp);
-  base::RunLoop().RunUntilIdle();
-  const int64 predelete_global_tmp = usage();
-
-  GetHostUsage("foo.com", kTemp);
-  base::RunLoop().RunUntilIdle();
-  const int64 predelete_foo_tmp = usage();
-
-  GetHostUsage("bar.com", kTemp);
-  base::RunLoop().RunUntilIdle();
-  const int64 predelete_bar_tmp = usage();
-
-  GetHostUsage("foo.com", kPerm);
-  base::RunLoop().RunUntilIdle();
-  const int64 predelete_foo_pers = usage();
-
-  GetHostUsage("bar.com", kPerm);
-  base::RunLoop().RunUntilIdle();
-  const int64 predelete_bar_pers = usage();
-
-  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kData1); ++i)
-    quota_manager()->NotifyStorageAccessed(QuotaClient::kUnknown,
-        GURL(kData1[i].origin), kData1[i].type);
-  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kData2); ++i)
-    quota_manager()->NotifyStorageAccessed(QuotaClient::kUnknown,
-        GURL(kData2[i].origin), kData2[i].type);
-  base::RunLoop().RunUntilIdle();
-
-  reset_status_callback_count();
-  DeleteOriginData(GURL("http://foo.com/"), kTemp, kAllClients);
-  DeleteOriginData(GURL("http://bar.com/"), kTemp, kAllClients);
-  DeleteOriginData(GURL("http://foo.com/"), kTemp, kAllClients);
-  base::RunLoop().RunUntilIdle();
-
-  EXPECT_EQ(3, status_callback_count());
-
-  DumpOriginInfoTable();
-  base::RunLoop().RunUntilIdle();
-
-  typedef OriginInfoTableEntries::const_iterator iterator;
-  for (iterator itr(origin_info_entries().begin()),
-                end(origin_info_entries().end());
-       itr != end; ++itr) {
-    if (itr->type == kTemp) {
-      EXPECT_NE(std::string("http://foo.com/"), itr->origin.spec());
-      EXPECT_NE(std::string("http://bar.com/"), itr->origin.spec());
-    }
-  }
-
-  GetGlobalUsage(kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(predelete_global_tmp - (1 + 4000 + 50000 + 9), usage());
-
-  GetHostUsage("foo.com", kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(predelete_foo_tmp - (1 + 50000), usage());
-
-  GetHostUsage("bar.com", kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(predelete_bar_tmp - (4000 + 9), usage());
-
-  GetHostUsage("foo.com", kPerm);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(predelete_foo_pers, usage());
-
-  GetHostUsage("bar.com", kPerm);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(predelete_bar_pers, usage());
-}
-
-TEST_F(QuotaManagerTest, GetCachedOrigins) {
-  static const MockOriginData kData[] = {
-    { "http://a.com/",   kTemp,       1 },
-    { "http://a.com:1/", kTemp,      20 },
-    { "http://b.com/",   kPerm,     300 },
-    { "http://c.com/",   kTemp,    4000 },
-  };
-  MockStorageClient* client = CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
-      QuotaClient::kFileSystem);
-  RegisterClient(client);
-
-  // TODO(kinuko): Be careful when we add cache pruner.
-
-  std::set<GURL> origins;
-  GetCachedOrigins(kTemp, &origins);
-  EXPECT_TRUE(origins.empty());
-
-  // No matter how we make queries the quota manager tries to cache all
-  // the origins at startup.
-  GetHostUsage("a.com", kTemp);
-  base::RunLoop().RunUntilIdle();
-  GetCachedOrigins(kTemp, &origins);
-  EXPECT_EQ(3U, origins.size());
-
-  GetHostUsage("b.com", kTemp);
-  base::RunLoop().RunUntilIdle();
-  GetCachedOrigins(kTemp, &origins);
-  EXPECT_EQ(3U, origins.size());
-
-  GetCachedOrigins(kPerm, &origins);
-  EXPECT_TRUE(origins.empty());
-
-  GetGlobalUsage(kTemp);
-  base::RunLoop().RunUntilIdle();
-  GetCachedOrigins(kTemp, &origins);
-  EXPECT_EQ(3U, origins.size());
-
-  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kData); ++i) {
-    if (kData[i].type == kTemp)
-      EXPECT_TRUE(origins.find(GURL(kData[i].origin)) != origins.end());
-  }
-}
-
-TEST_F(QuotaManagerTest, NotifyAndLRUOrigin) {
-  static const MockOriginData kData[] = {
-    { "http://a.com/",   kTemp,  0 },
-    { "http://a.com:1/", kTemp,  0 },
-    { "https://a.com/",  kTemp,  0 },
-    { "http://b.com/",   kPerm,  0 },  // persistent
-    { "http://c.com/",   kTemp,  0 },
-  };
-  MockStorageClient* client = CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
-      QuotaClient::kFileSystem);
-  RegisterClient(client);
-
-  GURL origin;
-  GetLRUOrigin(kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_TRUE(lru_origin().is_empty());
-
-  NotifyStorageAccessed(client, GURL("http://a.com/"), kTemp);
-  GetLRUOrigin(kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ("http://a.com/", lru_origin().spec());
-
-  NotifyStorageAccessed(client, GURL("http://b.com/"), kPerm);
-  NotifyStorageAccessed(client, GURL("https://a.com/"), kTemp);
-  NotifyStorageAccessed(client, GURL("http://c.com/"), kTemp);
-  GetLRUOrigin(kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ("http://a.com/", lru_origin().spec());
-
-  DeleteOriginFromDatabase(lru_origin(), kTemp);
-  GetLRUOrigin(kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ("https://a.com/", lru_origin().spec());
-
-  DeleteOriginFromDatabase(lru_origin(), kTemp);
-  GetLRUOrigin(kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ("http://c.com/", lru_origin().spec());
-}
-
-TEST_F(QuotaManagerTest, GetLRUOriginWithOriginInUse) {
-  static const MockOriginData kData[] = {
-    { "http://a.com/",   kTemp,  0 },
-    { "http://a.com:1/", kTemp,  0 },
-    { "https://a.com/",  kTemp,  0 },
-    { "http://b.com/",   kPerm,  0 },  // persistent
-    { "http://c.com/",   kTemp,  0 },
-  };
-  MockStorageClient* client = CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
-      QuotaClient::kFileSystem);
-  RegisterClient(client);
-
-  GURL origin;
-  GetLRUOrigin(kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_TRUE(lru_origin().is_empty());
-
-  NotifyStorageAccessed(client, GURL("http://a.com/"), kTemp);
-  NotifyStorageAccessed(client, GURL("http://b.com/"), kPerm);
-  NotifyStorageAccessed(client, GURL("https://a.com/"), kTemp);
-  NotifyStorageAccessed(client, GURL("http://c.com/"), kTemp);
-
-  GetLRUOrigin(kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ("http://a.com/", lru_origin().spec());
-
-  // Notify origin http://a.com is in use.
-  NotifyOriginInUse(GURL("http://a.com/"));
-  GetLRUOrigin(kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ("https://a.com/", lru_origin().spec());
-
-  // Notify origin https://a.com is in use while GetLRUOrigin is running.
-  GetLRUOrigin(kTemp);
-  NotifyOriginInUse(GURL("https://a.com/"));
-  base::RunLoop().RunUntilIdle();
-  // Post-filtering must have excluded the returned origin, so we will
-  // see empty result here.
-  EXPECT_TRUE(lru_origin().is_empty());
-
-  // Notify access for http://c.com while GetLRUOrigin is running.
-  GetLRUOrigin(kTemp);
-  NotifyStorageAccessed(client, GURL("http://c.com/"), kTemp);
-  base::RunLoop().RunUntilIdle();
-  // Post-filtering must have excluded the returned origin, so we will
-  // see empty result here.
-  EXPECT_TRUE(lru_origin().is_empty());
-
-  NotifyOriginNoLongerInUse(GURL("http://a.com/"));
-  NotifyOriginNoLongerInUse(GURL("https://a.com/"));
-  GetLRUOrigin(kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ("http://a.com/", lru_origin().spec());
-}
-
-TEST_F(QuotaManagerTest, GetOriginsModifiedSince) {
-  static const MockOriginData kData[] = {
-    { "http://a.com/",   kTemp,  0 },
-    { "http://a.com:1/", kTemp,  0 },
-    { "https://a.com/",  kTemp,  0 },
-    { "http://b.com/",   kPerm,  0 },  // persistent
-    { "http://c.com/",   kTemp,  0 },
-  };
-  MockStorageClient* client = CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
-      QuotaClient::kFileSystem);
-  RegisterClient(client);
-
-  GetOriginsModifiedSince(kTemp, base::Time());
-  base::RunLoop().RunUntilIdle();
-  EXPECT_TRUE(modified_origins().empty());
-  EXPECT_EQ(modified_origins_type(), kTemp);
-
-  base::Time time1 = client->IncrementMockTime();
-  client->ModifyOriginAndNotify(GURL("http://a.com/"), kTemp, 10);
-  client->ModifyOriginAndNotify(GURL("http://a.com:1/"), kTemp, 10);
-  client->ModifyOriginAndNotify(GURL("http://b.com/"), kPerm, 10);
-  base::Time time2 = client->IncrementMockTime();
-  client->ModifyOriginAndNotify(GURL("https://a.com/"), kTemp, 10);
-  client->ModifyOriginAndNotify(GURL("http://c.com/"), kTemp, 10);
-  base::Time time3 = client->IncrementMockTime();
-
-  GetOriginsModifiedSince(kTemp, time1);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(4U, modified_origins().size());
-  EXPECT_EQ(modified_origins_type(), kTemp);
-  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kData); ++i) {
-    if (kData[i].type == kTemp)
-      EXPECT_EQ(1U, modified_origins().count(GURL(kData[i].origin)));
-  }
-
-  GetOriginsModifiedSince(kTemp, time2);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(2U, modified_origins().size());
-
-  GetOriginsModifiedSince(kTemp, time3);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_TRUE(modified_origins().empty());
-  EXPECT_EQ(modified_origins_type(), kTemp);
-
-  client->ModifyOriginAndNotify(GURL("http://a.com/"), kTemp, 10);
-
-  GetOriginsModifiedSince(kTemp, time3);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(1U, modified_origins().size());
-  EXPECT_EQ(1U, modified_origins().count(GURL("http://a.com/")));
-  EXPECT_EQ(modified_origins_type(), kTemp);
-}
-
-TEST_F(QuotaManagerTest, DumpQuotaTable) {
-  SetPersistentHostQuota("example1.com", 1);
-  SetPersistentHostQuota("example2.com", 20);
-  SetPersistentHostQuota("example3.com", 300);
-  base::RunLoop().RunUntilIdle();
-
-  DumpQuotaTable();
-  base::RunLoop().RunUntilIdle();
-
-  const QuotaTableEntry kEntries[] = {
-    QuotaTableEntry("example1.com", kPerm, 1),
-    QuotaTableEntry("example2.com", kPerm, 20),
-    QuotaTableEntry("example3.com", kPerm, 300),
-  };
-  std::set<QuotaTableEntry> entries
-      (kEntries, kEntries + ARRAYSIZE_UNSAFE(kEntries));
-
-  typedef QuotaTableEntries::const_iterator iterator;
-  for (iterator itr(quota_entries().begin()), end(quota_entries().end());
-       itr != end; ++itr) {
-    SCOPED_TRACE(testing::Message()
-                 << "host = " << itr->host << ", "
-                 << "quota = " << itr->quota);
-    EXPECT_EQ(1u, entries.erase(*itr));
-  }
-  EXPECT_TRUE(entries.empty());
-}
-
-TEST_F(QuotaManagerTest, DumpOriginInfoTable) {
-  using std::make_pair;
-
-  quota_manager()->NotifyStorageAccessed(
-      QuotaClient::kUnknown,
-      GURL("http://example.com/"),
-      kTemp);
-  quota_manager()->NotifyStorageAccessed(
-      QuotaClient::kUnknown,
-      GURL("http://example.com/"),
-      kPerm);
-  quota_manager()->NotifyStorageAccessed(
-      QuotaClient::kUnknown,
-      GURL("http://example.com/"),
-      kPerm);
-  base::RunLoop().RunUntilIdle();
-
-  DumpOriginInfoTable();
-  base::RunLoop().RunUntilIdle();
-
-  typedef std::pair<GURL, StorageType> TypedOrigin;
-  typedef std::pair<TypedOrigin, int> Entry;
-  const Entry kEntries[] = {
-    make_pair(make_pair(GURL("http://example.com/"), kTemp), 1),
-    make_pair(make_pair(GURL("http://example.com/"), kPerm), 2),
-  };
-  std::set<Entry> entries
-      (kEntries, kEntries + ARRAYSIZE_UNSAFE(kEntries));
-
-  typedef OriginInfoTableEntries::const_iterator iterator;
-  for (iterator itr(origin_info_entries().begin()),
-                end(origin_info_entries().end());
-       itr != end; ++itr) {
-    SCOPED_TRACE(testing::Message()
-                 << "host = " << itr->origin << ", "
-                 << "type = " << itr->type << ", "
-                 << "used_count = " << itr->used_count);
-    EXPECT_EQ(1u, entries.erase(
-        make_pair(make_pair(itr->origin, itr->type),
-                  itr->used_count)));
-  }
-  EXPECT_TRUE(entries.empty());
-}
-
-TEST_F(QuotaManagerTest, QuotaForEmptyHost) {
-  GetPersistentHostQuota(std::string());
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(0, quota());
-
-  SetPersistentHostQuota(std::string(), 10);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaErrorNotSupported, status());
-}
-
-TEST_F(QuotaManagerTest, DeleteSpecificClientTypeSingleOrigin) {
-  static const MockOriginData kData1[] = {
-    { "http://foo.com/",   kTemp, 1 },
-  };
-  static const MockOriginData kData2[] = {
-    { "http://foo.com/",   kTemp, 2 },
-  };
-  static const MockOriginData kData3[] = {
-    { "http://foo.com/",   kTemp, 4 },
-  };
-  static const MockOriginData kData4[] = {
-    { "http://foo.com/",   kTemp, 8 },
-  };
-  MockStorageClient* client1 = CreateClient(kData1, ARRAYSIZE_UNSAFE(kData1),
-      QuotaClient::kFileSystem);
-  MockStorageClient* client2 = CreateClient(kData2, ARRAYSIZE_UNSAFE(kData2),
-      QuotaClient::kAppcache);
-  MockStorageClient* client3 = CreateClient(kData3, ARRAYSIZE_UNSAFE(kData3),
-      QuotaClient::kDatabase);
-  MockStorageClient* client4 = CreateClient(kData4, ARRAYSIZE_UNSAFE(kData4),
-      QuotaClient::kIndexedDatabase);
-  RegisterClient(client1);
-  RegisterClient(client2);
-  RegisterClient(client3);
-  RegisterClient(client4);
-
-  GetHostUsage("foo.com", kTemp);
-  base::RunLoop().RunUntilIdle();
-  const int64 predelete_foo_tmp = usage();
-
-  DeleteOriginData(GURL("http://foo.com/"), kTemp, QuotaClient::kFileSystem);
-  base::RunLoop().RunUntilIdle();
-  GetHostUsage("foo.com", kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(predelete_foo_tmp - 1, usage());
-
-  DeleteOriginData(GURL("http://foo.com/"), kTemp, QuotaClient::kAppcache);
-  base::RunLoop().RunUntilIdle();
-  GetHostUsage("foo.com", kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(predelete_foo_tmp - 2 - 1, usage());
-
-  DeleteOriginData(GURL("http://foo.com/"), kTemp, QuotaClient::kDatabase);
-  base::RunLoop().RunUntilIdle();
-  GetHostUsage("foo.com", kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(predelete_foo_tmp - 4 - 2 - 1, usage());
-
-  DeleteOriginData(GURL("http://foo.com/"), kTemp,
-      QuotaClient::kIndexedDatabase);
-  base::RunLoop().RunUntilIdle();
-  GetHostUsage("foo.com", kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(predelete_foo_tmp - 8 - 4 - 2 - 1, usage());
-}
-
-TEST_F(QuotaManagerTest, DeleteSpecificClientTypeSingleHost) {
-  static const MockOriginData kData1[] = {
-    { "http://foo.com:1111/",   kTemp, 1 },
-  };
-  static const MockOriginData kData2[] = {
-    { "http://foo.com:2222/",   kTemp, 2 },
-  };
-  static const MockOriginData kData3[] = {
-    { "http://foo.com:3333/",   kTemp, 4 },
-  };
-  static const MockOriginData kData4[] = {
-    { "http://foo.com:4444/",   kTemp, 8 },
-  };
-  MockStorageClient* client1 = CreateClient(kData1, ARRAYSIZE_UNSAFE(kData1),
-      QuotaClient::kFileSystem);
-  MockStorageClient* client2 = CreateClient(kData2, ARRAYSIZE_UNSAFE(kData2),
-      QuotaClient::kAppcache);
-  MockStorageClient* client3 = CreateClient(kData3, ARRAYSIZE_UNSAFE(kData3),
-      QuotaClient::kDatabase);
-  MockStorageClient* client4 = CreateClient(kData4, ARRAYSIZE_UNSAFE(kData4),
-      QuotaClient::kIndexedDatabase);
-  RegisterClient(client1);
-  RegisterClient(client2);
-  RegisterClient(client3);
-  RegisterClient(client4);
-
-  GetHostUsage("foo.com", kTemp);
-  base::RunLoop().RunUntilIdle();
-  const int64 predelete_foo_tmp = usage();
-
-  DeleteHostData("foo.com", kTemp, QuotaClient::kFileSystem);
-  base::RunLoop().RunUntilIdle();
-  GetHostUsage("foo.com", kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(predelete_foo_tmp - 1, usage());
-
-  DeleteHostData("foo.com", kTemp, QuotaClient::kAppcache);
-  base::RunLoop().RunUntilIdle();
-  GetHostUsage("foo.com", kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(predelete_foo_tmp - 2 - 1, usage());
-
-  DeleteHostData("foo.com", kTemp, QuotaClient::kDatabase);
-  base::RunLoop().RunUntilIdle();
-  GetHostUsage("foo.com", kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(predelete_foo_tmp - 4 - 2 - 1, usage());
-
-  DeleteHostData("foo.com", kTemp, QuotaClient::kIndexedDatabase);
-  base::RunLoop().RunUntilIdle();
-  GetHostUsage("foo.com", kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(predelete_foo_tmp - 8 - 4 - 2 - 1, usage());
-}
-
-TEST_F(QuotaManagerTest, DeleteMultipleClientTypesSingleOrigin) {
-  static const MockOriginData kData1[] = {
-    { "http://foo.com/",   kTemp, 1 },
-  };
-  static const MockOriginData kData2[] = {
-    { "http://foo.com/",   kTemp, 2 },
-  };
-  static const MockOriginData kData3[] = {
-    { "http://foo.com/",   kTemp, 4 },
-  };
-  static const MockOriginData kData4[] = {
-    { "http://foo.com/",   kTemp, 8 },
-  };
-  MockStorageClient* client1 = CreateClient(kData1, ARRAYSIZE_UNSAFE(kData1),
-      QuotaClient::kFileSystem);
-  MockStorageClient* client2 = CreateClient(kData2, ARRAYSIZE_UNSAFE(kData2),
-      QuotaClient::kAppcache);
-  MockStorageClient* client3 = CreateClient(kData3, ARRAYSIZE_UNSAFE(kData3),
-      QuotaClient::kDatabase);
-  MockStorageClient* client4 = CreateClient(kData4, ARRAYSIZE_UNSAFE(kData4),
-      QuotaClient::kIndexedDatabase);
-  RegisterClient(client1);
-  RegisterClient(client2);
-  RegisterClient(client3);
-  RegisterClient(client4);
-
-  GetHostUsage("foo.com", kTemp);
-  base::RunLoop().RunUntilIdle();
-  const int64 predelete_foo_tmp = usage();
-
-  DeleteOriginData(GURL("http://foo.com/"), kTemp,
-      QuotaClient::kFileSystem | QuotaClient::kDatabase);
-  base::RunLoop().RunUntilIdle();
-  GetHostUsage("foo.com", kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(predelete_foo_tmp - 4 - 1, usage());
-
-  DeleteOriginData(GURL("http://foo.com/"), kTemp,
-      QuotaClient::kAppcache | QuotaClient::kIndexedDatabase);
-  base::RunLoop().RunUntilIdle();
-  GetHostUsage("foo.com", kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(predelete_foo_tmp - 8 - 4 - 2 - 1, usage());
-}
-
-TEST_F(QuotaManagerTest, DeleteMultipleClientTypesSingleHost) {
-  static const MockOriginData kData1[] = {
-    { "http://foo.com:1111/",   kTemp, 1 },
-  };
-  static const MockOriginData kData2[] = {
-    { "http://foo.com:2222/",   kTemp, 2 },
-  };
-  static const MockOriginData kData3[] = {
-    { "http://foo.com:3333/",   kTemp, 4 },
-  };
-  static const MockOriginData kData4[] = {
-    { "http://foo.com:4444/",   kTemp, 8 },
-  };
-  MockStorageClient* client1 = CreateClient(kData1, ARRAYSIZE_UNSAFE(kData1),
-      QuotaClient::kFileSystem);
-  MockStorageClient* client2 = CreateClient(kData2, ARRAYSIZE_UNSAFE(kData2),
-      QuotaClient::kAppcache);
-  MockStorageClient* client3 = CreateClient(kData3, ARRAYSIZE_UNSAFE(kData3),
-      QuotaClient::kDatabase);
-  MockStorageClient* client4 = CreateClient(kData4, ARRAYSIZE_UNSAFE(kData4),
-      QuotaClient::kIndexedDatabase);
-  RegisterClient(client1);
-  RegisterClient(client2);
-  RegisterClient(client3);
-  RegisterClient(client4);
-
-  GetHostUsage("foo.com", kTemp);
-  base::RunLoop().RunUntilIdle();
-  const int64 predelete_foo_tmp = usage();
-
-  DeleteHostData("foo.com", kTemp,
-      QuotaClient::kFileSystem | QuotaClient::kAppcache);
-  base::RunLoop().RunUntilIdle();
-  GetHostUsage("foo.com", kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(predelete_foo_tmp - 2 - 1, usage());
-
-  DeleteHostData("foo.com", kTemp,
-      QuotaClient::kDatabase | QuotaClient::kIndexedDatabase);
-  base::RunLoop().RunUntilIdle();
-  GetHostUsage("foo.com", kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(predelete_foo_tmp - 8 - 4 - 2 - 1, usage());
-}
-
-TEST_F(QuotaManagerTest, GetUsageAndQuota_Incognito) {
-  ResetQuotaManager(true);
-
-  static const MockOriginData kData[] = {
-    { "http://foo.com/", kTemp, 10 },
-    { "http://foo.com/", kPerm, 80 },
-  };
-  RegisterClient(CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
-      QuotaClient::kFileSystem));
-
-  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(80, usage());
-  EXPECT_EQ(0, quota());
-
-  SetTemporaryGlobalQuota(100);
-  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(10, usage());
-  EXPECT_LE(std::min(static_cast<int64>(100 / kPerHostTemporaryPortion),
-                     QuotaManager::kIncognitoDefaultQuotaLimit), quota());
-
-  mock_special_storage_policy()->AddUnlimited(GURL("http://foo.com/"));
-  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(80, usage());
-  EXPECT_EQ(QuotaManager::kIncognitoDefaultQuotaLimit, quota());
-
-  GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(kQuotaStatusOk, status());
-  EXPECT_EQ(10, usage());
-  EXPECT_EQ(QuotaManager::kIncognitoDefaultQuotaLimit, quota());
-}
-
-}  // namespace quota
diff --git a/webkit/browser/quota/quota_temporary_storage_evictor.h b/webkit/browser/quota/quota_temporary_storage_evictor.h
index 3ebcb78..244fa0f 100644
--- a/webkit/browser/quota/quota_temporary_storage_evictor.h
+++ b/webkit/browser/quota/quota_temporary_storage_evictor.h
@@ -16,6 +16,10 @@
 
 class GURL;
 
+namespace content {
+class QuotaTemporaryStorageEvictorTest;
+}
+
 namespace quota {
 
 class QuotaEvictionHandler;
@@ -84,7 +88,7 @@
   }
 
  private:
-  friend class QuotaTemporaryStorageEvictorTest;
+  friend class content::QuotaTemporaryStorageEvictorTest;
 
   void StartEvictionTimerWithDelay(int delay_ms);
   void ConsiderEviction();
diff --git a/webkit/browser/quota/quota_temporary_storage_evictor_unittest.cc b/webkit/browser/quota/quota_temporary_storage_evictor_unittest.cc
deleted file mode 100644
index 941facf..0000000
--- a/webkit/browser/quota/quota_temporary_storage_evictor_unittest.cc
+++ /dev/null
@@ -1,410 +0,0 @@
-// Copyright 2013 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 <list>
-#include <map>
-#include <utility>
-
-#include "base/bind.h"
-#include "base/callback.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/memory/weak_ptr.h"
-#include "base/message_loop/message_loop_proxy.h"
-#include "base/run_loop.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "webkit/browser/quota/mock_storage_client.h"
-#include "webkit/browser/quota/quota_manager.h"
-#include "webkit/browser/quota/quota_temporary_storage_evictor.h"
-
-namespace quota {
-
-class QuotaTemporaryStorageEvictorTest;
-
-namespace {
-
-class MockQuotaEvictionHandler : public quota::QuotaEvictionHandler {
- public:
-  explicit MockQuotaEvictionHandler(QuotaTemporaryStorageEvictorTest *test)
-      : quota_(0),
-        available_space_(0),
-        error_on_evict_origin_data_(false),
-        error_on_get_usage_and_quota_(false) {}
-
-  virtual void EvictOriginData(
-      const GURL& origin,
-      StorageType type,
-      const EvictOriginDataCallback& callback) OVERRIDE {
-    if (error_on_evict_origin_data_) {
-      callback.Run(quota::kQuotaErrorInvalidModification);
-      return;
-    }
-    int64 origin_usage = EnsureOriginRemoved(origin);
-    if (origin_usage >= 0)
-      available_space_ += origin_usage;
-    callback.Run(quota::kQuotaStatusOk);
-  }
-
-  virtual void GetUsageAndQuotaForEviction(
-      const UsageAndQuotaCallback& callback) OVERRIDE {
-    if (error_on_get_usage_and_quota_) {
-      callback.Run(quota::kQuotaErrorInvalidAccess, UsageAndQuota());
-      return;
-    }
-    if (!task_for_get_usage_and_quota_.is_null())
-      task_for_get_usage_and_quota_.Run();
-    UsageAndQuota quota_and_usage(-1, GetUsage(), quota_, available_space_);
-    callback.Run(quota::kQuotaStatusOk, quota_and_usage);
-  }
-
-  virtual void GetLRUOrigin(
-      StorageType type,
-      const GetLRUOriginCallback& callback) OVERRIDE {
-    if (origin_order_.empty())
-      callback.Run(GURL());
-    else
-      callback.Run(GURL(origin_order_.front()));
-  }
-
-  int64 GetUsage() const {
-    int64 total_usage = 0;
-    for (std::map<GURL, int64>::const_iterator p = origins_.begin();
-         p != origins_.end();
-         ++p)
-      total_usage += p->second;
-    return total_usage;
-  }
-
-  void set_quota(int64 quota) {
-    quota_ = quota;
-  }
-  void set_available_space(int64 available_space) {
-    available_space_ = available_space;
-  }
-  void set_task_for_get_usage_and_quota(const base::Closure& task) {
-    task_for_get_usage_and_quota_= task;
-  }
-  void set_error_on_evict_origin_data(bool error_on_evict_origin_data) {
-    error_on_evict_origin_data_ = error_on_evict_origin_data;
-  }
-  void set_error_on_get_usage_and_quota(bool error_on_get_usage_and_quota) {
-    error_on_get_usage_and_quota_ = error_on_get_usage_and_quota;
-  }
-
-  // Simulates an access to |origin|.  It reorders the internal LRU list.
-  // It internally uses AddOrigin().
-  void AccessOrigin(const GURL& origin) {
-    std::map<GURL, int64>::iterator found = origins_.find(origin);
-    EXPECT_TRUE(origins_.end() != found);
-    AddOrigin(origin, found->second);
-  }
-
-  // Simulates adding or overwriting the |origin| to the internal origin set
-  // with the |usage|.  It also adds or moves the |origin| to the end of the
-  // LRU list.
-  void AddOrigin(const GURL& origin, int64 usage) {
-    EnsureOriginRemoved(origin);
-    origin_order_.push_back(origin);
-    origins_[origin] = usage;
-  }
-
- private:
-  int64 EnsureOriginRemoved(const GURL& origin) {
-    int64 origin_usage;
-    if (origins_.find(origin) == origins_.end())
-      return -1;
-    else
-      origin_usage = origins_[origin];
-
-    origins_.erase(origin);
-    origin_order_.remove(origin);
-    return origin_usage;
-  }
-
-  int64 quota_;
-  int64 available_space_;
-  std::list<GURL> origin_order_;
-  std::map<GURL, int64> origins_;
-  bool error_on_evict_origin_data_;
-  bool error_on_get_usage_and_quota_;
-
-  base::Closure task_for_get_usage_and_quota_;
-};
-
-}  // namespace
-
-class QuotaTemporaryStorageEvictorTest : public testing::Test {
- public:
-  QuotaTemporaryStorageEvictorTest()
-      : num_get_usage_and_quota_for_eviction_(0),
-        weak_factory_(this) {}
-
-  virtual void SetUp() {
-    quota_eviction_handler_.reset(new MockQuotaEvictionHandler(this));
-
-    // Run multiple evictions in a single RunUntilIdle() when interval_ms == 0
-    temporary_storage_evictor_.reset(new QuotaTemporaryStorageEvictor(
-        quota_eviction_handler_.get(), 0));
-  }
-
-  virtual void TearDown() {
-    temporary_storage_evictor_.reset();
-    quota_eviction_handler_.reset();
-    base::RunLoop().RunUntilIdle();
-  }
-
-  void TaskForRepeatedEvictionTest(
-      const std::pair<GURL, int64>& origin_to_be_added,
-      const GURL& origin_to_be_accessed,
-      int expected_usage_after_first,
-      int expected_usage_after_second) {
-    EXPECT_GE(4, num_get_usage_and_quota_for_eviction_);
-    switch (num_get_usage_and_quota_for_eviction_) {
-    case 2:
-      EXPECT_EQ(expected_usage_after_first,
-                quota_eviction_handler()->GetUsage());
-      if (!origin_to_be_added.first.is_empty())
-        quota_eviction_handler()->AddOrigin(origin_to_be_added.first,
-                                            origin_to_be_added.second);
-      if (!origin_to_be_accessed.is_empty())
-        quota_eviction_handler()->AccessOrigin(origin_to_be_accessed);
-      break;
-    case 3:
-      EXPECT_EQ(expected_usage_after_second,
-                quota_eviction_handler()->GetUsage());
-      temporary_storage_evictor()->set_repeated_eviction(false);
-      break;
-    }
-    ++num_get_usage_and_quota_for_eviction_;
-  }
-
- protected:
-  MockQuotaEvictionHandler* quota_eviction_handler() const {
-    return static_cast<MockQuotaEvictionHandler*>(
-        quota_eviction_handler_.get());
-  }
-
-  QuotaTemporaryStorageEvictor* temporary_storage_evictor() const {
-    return temporary_storage_evictor_.get();
-  }
-
-  const QuotaTemporaryStorageEvictor::Statistics& statistics() const {
-    return temporary_storage_evictor()->statistics_;
-  }
-
-  void set_repeated_eviction(bool repeated_eviction) const {
-    return temporary_storage_evictor_->set_repeated_eviction(repeated_eviction);
-  }
-
-  int num_get_usage_and_quota_for_eviction() const {
-    return num_get_usage_and_quota_for_eviction_;
-  }
-
-  int64 default_min_available_disk_space_to_start_eviction() const {
-    return 1000 * 1000 * 500;
-  }
-
-  void set_min_available_disk_space_to_start_eviction(int64 value) const {
-    temporary_storage_evictor_->set_min_available_disk_space_to_start_eviction(
-        value);
-  }
-
-  void reset_min_available_disk_space_to_start_eviction() const {
-    temporary_storage_evictor_->
-        reset_min_available_disk_space_to_start_eviction();
-  }
-
-  base::MessageLoop message_loop_;
-  scoped_ptr<MockQuotaEvictionHandler> quota_eviction_handler_;
-  scoped_ptr<QuotaTemporaryStorageEvictor> temporary_storage_evictor_;
-
-  int num_get_usage_and_quota_for_eviction_;
-
-  base::WeakPtrFactory<QuotaTemporaryStorageEvictorTest> weak_factory_;
-
-  DISALLOW_COPY_AND_ASSIGN(QuotaTemporaryStorageEvictorTest);
-};
-
-TEST_F(QuotaTemporaryStorageEvictorTest, SimpleEvictionTest) {
-  quota_eviction_handler()->AddOrigin(GURL("http://www.z.com"), 3000);
-  quota_eviction_handler()->AddOrigin(GURL("http://www.y.com"), 200);
-  quota_eviction_handler()->AddOrigin(GURL("http://www.x.com"), 500);
-  quota_eviction_handler()->set_quota(4000);
-  quota_eviction_handler()->set_available_space(1000000000);
-  EXPECT_EQ(3000 + 200 + 500, quota_eviction_handler()->GetUsage());
-  set_repeated_eviction(false);
-  temporary_storage_evictor()->Start();
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(200 + 500, quota_eviction_handler()->GetUsage());
-
-  EXPECT_EQ(0, statistics().num_errors_on_evicting_origin);
-  EXPECT_EQ(0, statistics().num_errors_on_getting_usage_and_quota);
-  EXPECT_EQ(1, statistics().num_evicted_origins);
-  EXPECT_EQ(1, statistics().num_eviction_rounds);
-  EXPECT_EQ(0, statistics().num_skipped_eviction_rounds);
-}
-
-TEST_F(QuotaTemporaryStorageEvictorTest, MultipleEvictionTest) {
-  quota_eviction_handler()->AddOrigin(GURL("http://www.z.com"), 20);
-  quota_eviction_handler()->AddOrigin(GURL("http://www.y.com"), 2900);
-  quota_eviction_handler()->AddOrigin(GURL("http://www.x.com"), 450);
-  quota_eviction_handler()->AddOrigin(GURL("http://www.w.com"), 400);
-  quota_eviction_handler()->set_quota(4000);
-  quota_eviction_handler()->set_available_space(1000000000);
-  EXPECT_EQ(20 + 2900 + 450 + 400, quota_eviction_handler()->GetUsage());
-  set_repeated_eviction(false);
-  temporary_storage_evictor()->Start();
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(450 + 400, quota_eviction_handler()->GetUsage());
-
-  EXPECT_EQ(0, statistics().num_errors_on_evicting_origin);
-  EXPECT_EQ(0, statistics().num_errors_on_getting_usage_and_quota);
-  EXPECT_EQ(2, statistics().num_evicted_origins);
-  EXPECT_EQ(1, statistics().num_eviction_rounds);
-  EXPECT_EQ(0, statistics().num_skipped_eviction_rounds);
-}
-
-TEST_F(QuotaTemporaryStorageEvictorTest, RepeatedEvictionTest) {
-  const int64 a_size = 400;
-  const int64 b_size = 150;
-  const int64 c_size = 120;
-  const int64 d_size = 292;
-  const int64 initial_total_size = a_size + b_size + c_size + d_size;
-  const int64 e_size = 275;
-
-  quota_eviction_handler()->AddOrigin(GURL("http://www.d.com"), d_size);
-  quota_eviction_handler()->AddOrigin(GURL("http://www.c.com"), c_size);
-  quota_eviction_handler()->AddOrigin(GURL("http://www.b.com"), b_size);
-  quota_eviction_handler()->AddOrigin(GURL("http://www.a.com"), a_size);
-  quota_eviction_handler()->set_quota(1000);
-  quota_eviction_handler()->set_available_space(1000000000);
-  quota_eviction_handler()->set_task_for_get_usage_and_quota(
-      base::Bind(&QuotaTemporaryStorageEvictorTest::TaskForRepeatedEvictionTest,
-                 weak_factory_.GetWeakPtr(),
-                 std::make_pair(GURL("http://www.e.com"), e_size), GURL(),
-                 initial_total_size - d_size,
-                 initial_total_size - d_size + e_size - c_size));
-  EXPECT_EQ(initial_total_size, quota_eviction_handler()->GetUsage());
-  temporary_storage_evictor()->Start();
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(initial_total_size - d_size + e_size - c_size - b_size,
-            quota_eviction_handler()->GetUsage());
-  EXPECT_EQ(5, num_get_usage_and_quota_for_eviction());
-
-  EXPECT_EQ(0, statistics().num_errors_on_evicting_origin);
-  EXPECT_EQ(0, statistics().num_errors_on_getting_usage_and_quota);
-  EXPECT_EQ(3, statistics().num_evicted_origins);
-  EXPECT_EQ(2, statistics().num_eviction_rounds);
-  EXPECT_EQ(0, statistics().num_skipped_eviction_rounds);
-}
-
-TEST_F(QuotaTemporaryStorageEvictorTest, RepeatedEvictionSkippedTest) {
-  const int64 a_size = 400;
-  const int64 b_size = 150;
-  const int64 c_size = 120;
-  const int64 d_size = 292;
-  const int64 initial_total_size = a_size + b_size + c_size + d_size;
-
-  quota_eviction_handler()->AddOrigin(GURL("http://www.d.com"), d_size);
-  quota_eviction_handler()->AddOrigin(GURL("http://www.c.com"), c_size);
-  quota_eviction_handler()->AddOrigin(GURL("http://www.b.com"), b_size);
-  quota_eviction_handler()->AddOrigin(GURL("http://www.a.com"), a_size);
-  quota_eviction_handler()->set_quota(1000);
-  quota_eviction_handler()->set_available_space(1000000000);
-  quota_eviction_handler()->set_task_for_get_usage_and_quota(
-      base::Bind(&QuotaTemporaryStorageEvictorTest::TaskForRepeatedEvictionTest,
-                 weak_factory_.GetWeakPtr(), std::make_pair(GURL(), 0), GURL(),
-                 initial_total_size - d_size, initial_total_size - d_size));
-  EXPECT_EQ(initial_total_size, quota_eviction_handler()->GetUsage());
-  set_repeated_eviction(true);
-  temporary_storage_evictor()->Start();
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(initial_total_size - d_size, quota_eviction_handler()->GetUsage());
-  EXPECT_EQ(4, num_get_usage_and_quota_for_eviction());
-
-  EXPECT_EQ(0, statistics().num_errors_on_evicting_origin);
-  EXPECT_EQ(0, statistics().num_errors_on_getting_usage_and_quota);
-  EXPECT_EQ(1, statistics().num_evicted_origins);
-  EXPECT_EQ(3, statistics().num_eviction_rounds);
-  EXPECT_EQ(2, statistics().num_skipped_eviction_rounds);
-}
-
-TEST_F(QuotaTemporaryStorageEvictorTest, RepeatedEvictionWithAccessOriginTest) {
-  const int64 a_size = 400;
-  const int64 b_size = 150;
-  const int64 c_size = 120;
-  const int64 d_size = 292;
-  const int64 initial_total_size = a_size + b_size + c_size + d_size;
-  const int64 e_size = 275;
-
-  quota_eviction_handler()->AddOrigin(GURL("http://www.d.com"), d_size);
-  quota_eviction_handler()->AddOrigin(GURL("http://www.c.com"), c_size);
-  quota_eviction_handler()->AddOrigin(GURL("http://www.b.com"), b_size);
-  quota_eviction_handler()->AddOrigin(GURL("http://www.a.com"), a_size);
-  quota_eviction_handler()->set_quota(1000);
-  quota_eviction_handler()->set_available_space(1000000000);
-  quota_eviction_handler()->set_task_for_get_usage_and_quota(
-      base::Bind(&QuotaTemporaryStorageEvictorTest::TaskForRepeatedEvictionTest,
-                 weak_factory_.GetWeakPtr(),
-                 std::make_pair(GURL("http://www.e.com"), e_size),
-                 GURL("http://www.c.com"),
-                 initial_total_size - d_size,
-                 initial_total_size - d_size + e_size - b_size));
-  EXPECT_EQ(initial_total_size, quota_eviction_handler()->GetUsage());
-  temporary_storage_evictor()->Start();
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(initial_total_size - d_size + e_size - b_size - a_size,
-            quota_eviction_handler()->GetUsage());
-  EXPECT_EQ(5, num_get_usage_and_quota_for_eviction());
-
-  EXPECT_EQ(0, statistics().num_errors_on_evicting_origin);
-  EXPECT_EQ(0, statistics().num_errors_on_getting_usage_and_quota);
-  EXPECT_EQ(3, statistics().num_evicted_origins);
-  EXPECT_EQ(2, statistics().num_eviction_rounds);
-  EXPECT_EQ(0, statistics().num_skipped_eviction_rounds);
-}
-
-TEST_F(QuotaTemporaryStorageEvictorTest, DiskSpaceNonEvictionTest) {
-  quota_eviction_handler()->AddOrigin(GURL("http://www.z.com"), 414);
-  quota_eviction_handler()->AddOrigin(GURL("http://www.x.com"), 450);
-  quota_eviction_handler()->set_quota(10000);
-  quota_eviction_handler()->set_available_space(
-      default_min_available_disk_space_to_start_eviction() - 350);
-  EXPECT_EQ(414 + 450, quota_eviction_handler()->GetUsage());
-  reset_min_available_disk_space_to_start_eviction();
-  set_repeated_eviction(false);
-  temporary_storage_evictor()->Start();
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(414 + 450, quota_eviction_handler()->GetUsage());
-
-  EXPECT_EQ(0, statistics().num_errors_on_evicting_origin);
-  EXPECT_EQ(0, statistics().num_errors_on_getting_usage_and_quota);
-  EXPECT_EQ(0, statistics().num_evicted_origins);
-  EXPECT_EQ(1, statistics().num_eviction_rounds);
-  EXPECT_EQ(1, statistics().num_skipped_eviction_rounds);
-}
-
-TEST_F(QuotaTemporaryStorageEvictorTest, DiskSpaceEvictionTest) {
-  quota_eviction_handler()->AddOrigin(GURL("http://www.z.com"), 294);
-  quota_eviction_handler()->AddOrigin(GURL("http://www.y.com"), 120);
-  quota_eviction_handler()->AddOrigin(GURL("http://www.x.com"), 150);
-  quota_eviction_handler()->AddOrigin(GURL("http://www.w.com"), 300);
-  quota_eviction_handler()->set_quota(10000);
-  quota_eviction_handler()->set_available_space(
-      default_min_available_disk_space_to_start_eviction() - 350);
-  EXPECT_EQ(294 + 120 + 150 + 300, quota_eviction_handler()->GetUsage());
-  set_min_available_disk_space_to_start_eviction(
-      default_min_available_disk_space_to_start_eviction());
-  set_repeated_eviction(false);
-  temporary_storage_evictor()->Start();
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(150 + 300, quota_eviction_handler()->GetUsage());
-
-  EXPECT_EQ(0, statistics().num_errors_on_evicting_origin);
-  EXPECT_EQ(0, statistics().num_errors_on_getting_usage_and_quota);
-  EXPECT_EQ(2, statistics().num_evicted_origins);
-  EXPECT_EQ(1, statistics().num_eviction_rounds);
-  EXPECT_EQ(0, statistics().num_skipped_eviction_rounds);
-}
-
-}  // namespace quota
diff --git a/webkit/browser/quota/storage_monitor.h b/webkit/browser/quota/storage_monitor.h
index 2ac6053..e52fd18 100644
--- a/webkit/browser/quota/storage_monitor.h
+++ b/webkit/browser/quota/storage_monitor.h
@@ -12,6 +12,10 @@
 #include "base/timer/timer.h"
 #include "webkit/browser/quota/storage_observer.h"
 
+namespace content {
+class StorageMonitorTestBase;
+}
+
 namespace quota {
 
 class QuotaManager;
@@ -59,7 +63,7 @@
   base::OneShotTimer<StorageObserverList> notification_timer_;
   StorageObserver::Event pending_event_;
 
-  friend class StorageMonitorTestBase;
+  friend class content::StorageMonitorTestBase;
 
   DISALLOW_COPY_AND_ASSIGN(StorageObserverList);
 };
@@ -107,7 +111,7 @@
 
   base::WeakPtrFactory<HostStorageObservers> weak_factory_;
 
-  friend class StorageMonitorTestBase;
+  friend class content::StorageMonitorTestBase;
 
   DISALLOW_COPY_AND_ASSIGN(HostStorageObservers);
 };
diff --git a/webkit/browser/quota/storage_monitor_unittest.cc b/webkit/browser/quota/storage_monitor_unittest.cc
deleted file mode 100644
index f1e287c..0000000
--- a/webkit/browser/quota/storage_monitor_unittest.cc
+++ /dev/null
@@ -1,692 +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.
-
-#include <vector>
-
-#include "base/files/scoped_temp_dir.h"
-#include "base/message_loop/message_loop.h"
-#include "base/message_loop/message_loop_proxy.h"
-#include "base/run_loop.h"
-#include "net/base/net_util.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "webkit/browser/quota/mock_special_storage_policy.h"
-#include "webkit/browser/quota/mock_storage_client.h"
-#include "webkit/browser/quota/quota_manager.h"
-#include "webkit/browser/quota/quota_manager_proxy.h"
-#include "webkit/browser/quota/storage_monitor.h"
-#include "webkit/browser/quota/storage_observer.h"
-
-namespace quota {
-
-namespace {
-
-const char kDefaultOrigin[] = "http://www.foo.com/";
-const char kAlternativeOrigin[] = "http://www.bar.com/";
-
-class MockObserver : public StorageObserver {
- public:
-  const StorageObserver::Event& LastEvent() const {
-    CHECK(!events_.empty());
-    return events_.back();
-  }
-
-  int EventCount() const {
-    return events_.size();
-  }
-
-  // StorageObserver implementation:
-  virtual void OnStorageEvent(const StorageObserver::Event& event) OVERRIDE {
-    events_.push_back(event);
-  }
-
- private:
-  std::vector<StorageObserver::Event> events_;
-};
-
-// A mock quota manager for overriding GetUsageAndQuotaForWebApps().
-class UsageMockQuotaManager : public QuotaManager {
- public:
-  UsageMockQuotaManager(SpecialStoragePolicy* special_storage_policy)
-      : QuotaManager(
-            false,
-            base::FilePath(),
-            base::MessageLoopProxy::current().get(),
-            base::MessageLoopProxy::current().get(),
-            special_storage_policy),
-        callback_usage_(0),
-        callback_quota_(0),
-        callback_status_(kQuotaStatusOk),
-        initialized_(false) {
-  }
-
-  void SetCallbackParams(int64 usage, int64 quota, QuotaStatusCode status) {
-    initialized_ = true;
-    callback_quota_ = quota;
-    callback_usage_ = usage;
-    callback_status_ = status;
-  }
-
-  void InvokeCallback() {
-    delayed_callback_.Run(callback_status_, callback_usage_, callback_quota_);
-  }
-
-  virtual void GetUsageAndQuotaForWebApps(
-      const GURL& origin,
-      StorageType type,
-      const GetUsageAndQuotaCallback& callback) OVERRIDE {
-    if (initialized_)
-      callback.Run(callback_status_, callback_usage_, callback_quota_);
-    else
-      delayed_callback_ = callback;
-  }
-
- protected:
-  virtual ~UsageMockQuotaManager() {}
-
- private:
-  int64 callback_usage_;
-  int64 callback_quota_;
-  QuotaStatusCode callback_status_;
-  bool initialized_;
-  GetUsageAndQuotaCallback delayed_callback_;
-};
-
-}  // namespace
-
-class StorageMonitorTestBase : public testing::Test {
- protected:
-  void DispatchPendingEvents(StorageObserverList& observer_list) {
-    observer_list.DispatchPendingEvent();
-  }
-
-  const StorageObserver::Event* GetPendingEvent(
-      const StorageObserverList& observer_list) {
-    return observer_list.notification_timer_.IsRunning()
-                ? &observer_list.pending_event_ : NULL;
-  }
-
-  const StorageObserver::Event* GetPendingEvent(
-      const HostStorageObservers& host_observers) {
-    return GetPendingEvent(host_observers.observers_);
-  }
-
-  int GetRequiredUpdatesCount(const StorageObserverList& observer_list) {
-    int count = 0;
-    for (StorageObserverList::StorageObserverStateMap::const_iterator it =
-            observer_list.observers_.begin();
-         it != observer_list.observers_.end(); ++it) {
-      if (it->second.requires_update)
-        ++count;
-    }
-
-    return count;
-  }
-
-  int GetRequiredUpdatesCount(const HostStorageObservers& host_observers) {
-    return GetRequiredUpdatesCount(host_observers.observers_);
-  }
-
-  void SetLastNotificationTime(StorageObserverList& observer_list,
-                               StorageObserver* observer) {
-    ASSERT_TRUE(observer_list.observers_.find(observer) !=
-                observer_list.observers_.end());
-
-    StorageObserverList::ObserverState& state =
-        observer_list.observers_[observer];
-    state.last_notification_time = base::TimeTicks::Now() - state.rate;
-  }
-
-  void SetLastNotificationTime(HostStorageObservers& host_observers,
-                               StorageObserver* observer) {
-    SetLastNotificationTime(host_observers.observers_, observer);
-  }
-
-  int GetObserverCount(const HostStorageObservers& host_observers) {
-    return host_observers.observers_.ObserverCount();
-  }
-};
-
-class StorageTestWithManagerBase : public StorageMonitorTestBase {
- public:
-  virtual void SetUp() OVERRIDE {
-    storage_policy_ = new MockSpecialStoragePolicy();
-    quota_manager_ = new UsageMockQuotaManager(storage_policy_.get());
-  }
-
-  virtual void TearDown() OVERRIDE {
-    // This ensures the quota manager is destroyed correctly.
-    quota_manager_ = NULL;
-    base::RunLoop().RunUntilIdle();
-  }
-
- protected:
-  base::MessageLoop message_loop_;
-  scoped_refptr<MockSpecialStoragePolicy> storage_policy_;
-  scoped_refptr<UsageMockQuotaManager> quota_manager_;
-};
-
-// Tests for StorageObserverList:
-
-typedef StorageMonitorTestBase StorageObserverListTest;
-
-// Test dispatching events to one observer.
-TEST_F(StorageObserverListTest, DispatchEventToSingleObserver) {
-  // A message loop is required as StorageObserverList may schedule jobs.
-  base::MessageLoop loop(base::MessageLoop::TYPE_DEFAULT);
-
-  StorageObserver::MonitorParams params(kStorageTypePersistent,
-                                        GURL(kDefaultOrigin),
-                                        base::TimeDelta::FromHours(1),
-                                        false);
-  MockObserver mock_observer;
-  StorageObserverList observer_list;
-  observer_list.AddObserver(&mock_observer, params);
-
-  StorageObserver::Event event;
-  event.filter = params.filter;
-
-  // Verify that the first event is dispatched immediately.
-  event.quota = 1;
-  event.usage = 1;
-  observer_list.OnStorageChange(event);
-  EXPECT_EQ(1, mock_observer.EventCount());
-  EXPECT_EQ(event, mock_observer.LastEvent());
-  EXPECT_EQ(NULL, GetPendingEvent(observer_list));
-  EXPECT_EQ(0, GetRequiredUpdatesCount(observer_list));
-
-  // Verify that the next event is pending.
-  event.quota = 2;
-  event.usage = 2;
-  observer_list.OnStorageChange(event);
-  EXPECT_EQ(1, mock_observer.EventCount());
-  ASSERT_TRUE(GetPendingEvent(observer_list));
-  EXPECT_EQ(event, *GetPendingEvent(observer_list));
-  EXPECT_EQ(1, GetRequiredUpdatesCount(observer_list));
-
-  // Fake the last notification time so that an event will be dispatched.
-  SetLastNotificationTime(observer_list, &mock_observer);
-  event.quota = 3;
-  event.usage = 3;
-  observer_list.OnStorageChange(event);
-  EXPECT_EQ(2, mock_observer.EventCount());
-  EXPECT_EQ(event, mock_observer.LastEvent());
-  EXPECT_EQ(NULL, GetPendingEvent(observer_list));
-  EXPECT_EQ(0, GetRequiredUpdatesCount(observer_list));
-
-  // Remove the observer.
-  event.quota = 4;
-  event.usage = 4;
-  observer_list.RemoveObserver(&mock_observer);
-  observer_list.OnStorageChange(event);
-  EXPECT_EQ(2, mock_observer.EventCount());
-  EXPECT_EQ(NULL, GetPendingEvent(observer_list));
-}
-
-// Test dispatching events to multiple observers.
-TEST_F(StorageObserverListTest, DispatchEventToMultipleObservers) {
-  // A message loop is required as StorageObserverList may schedule jobs.
-  base::MessageLoop loop(base::MessageLoop::TYPE_DEFAULT);
-
-  MockObserver mock_observer1;
-  MockObserver mock_observer2;
-  StorageObserverList observer_list;
-  StorageObserver::Filter filter(kStorageTypePersistent,
-                                 GURL(kDefaultOrigin));
-  observer_list.AddObserver(
-      &mock_observer1,
-      StorageObserver::MonitorParams(
-          filter, base::TimeDelta::FromHours(1), false));
-  observer_list.AddObserver(
-      &mock_observer2,
-      StorageObserver::MonitorParams(
-          filter, base::TimeDelta::FromHours(2), false));
-
-  StorageObserver::Event event;
-  event.filter = filter;
-
-  // Verify that the first event is dispatched immediately.
-  event.quota = 1;
-  event.usage = 1;
-  observer_list.OnStorageChange(event);
-  EXPECT_EQ(1, mock_observer1.EventCount());
-  EXPECT_EQ(1, mock_observer2.EventCount());
-  EXPECT_EQ(event, mock_observer1.LastEvent());
-  EXPECT_EQ(event, mock_observer2.LastEvent());
-  EXPECT_EQ(NULL, GetPendingEvent(observer_list));
-  EXPECT_EQ(0, GetRequiredUpdatesCount(observer_list));
-
-  // Fake the last notification time so that observer1 will receive the next
-  // event, but it will be pending for observer2.
-  SetLastNotificationTime(observer_list, &mock_observer1);
-  event.quota = 2;
-  event.usage = 2;
-  observer_list.OnStorageChange(event);
-  EXPECT_EQ(2, mock_observer1.EventCount());
-  EXPECT_EQ(1, mock_observer2.EventCount());
-  EXPECT_EQ(event, mock_observer1.LastEvent());
-  ASSERT_TRUE(GetPendingEvent(observer_list));
-  EXPECT_EQ(event, *GetPendingEvent(observer_list));
-  EXPECT_EQ(1, GetRequiredUpdatesCount(observer_list));
-
-  // Now dispatch the pending event to observer2.
-  SetLastNotificationTime(observer_list, &mock_observer2);
-  DispatchPendingEvents(observer_list);
-  EXPECT_EQ(2, mock_observer1.EventCount());
-  EXPECT_EQ(2, mock_observer2.EventCount());
-  EXPECT_EQ(event, mock_observer1.LastEvent());
-  EXPECT_EQ(event, mock_observer2.LastEvent());
-  EXPECT_EQ(NULL, GetPendingEvent(observer_list));
-  EXPECT_EQ(0, GetRequiredUpdatesCount(observer_list));
-}
-
-// Ensure that the |origin| field in events match the origin specified by the
-// observer on registration.
-TEST_F(StorageObserverListTest, ReplaceEventOrigin) {
-  StorageObserver::MonitorParams params(kStorageTypePersistent,
-                                        GURL(kDefaultOrigin),
-                                        base::TimeDelta::FromHours(1),
-                                        false);
-  MockObserver mock_observer;
-  StorageObserverList observer_list;
-  observer_list.AddObserver(&mock_observer, params);
-
-  StorageObserver::Event dispatched_event;
-  dispatched_event.filter = params.filter;
-  dispatched_event.filter.origin = GURL("https://www.foo.com/bar");
-  observer_list.OnStorageChange(dispatched_event);
-
-  EXPECT_EQ(params.filter.origin, mock_observer.LastEvent().filter.origin);
-}
-
-// Tests for HostStorageObservers:
-
-typedef StorageTestWithManagerBase HostStorageObserversTest;
-
-// Verify that HostStorageObservers is initialized after the first usage change.
-TEST_F(HostStorageObserversTest, InitializeOnUsageChange) {
-  StorageObserver::MonitorParams params(kStorageTypePersistent,
-                                        GURL(kDefaultOrigin),
-                                        base::TimeDelta::FromHours(1),
-                                        false);
-  const int64 kUsage = 324554;
-  const int64 kQuota = 234354354;
-  quota_manager_->SetCallbackParams(kUsage, kQuota, kQuotaStatusOk);
-
-  MockObserver mock_observer;
-  HostStorageObservers host_observers(quota_manager_.get());
-  host_observers.AddObserver(&mock_observer, params);
-
-  // Verify that HostStorageObservers dispatches the first event correctly.
-  StorageObserver::Event expected_event(params.filter, kUsage, kQuota);
-  host_observers.NotifyUsageChange(params.filter, 87324);
-  EXPECT_EQ(1, mock_observer.EventCount());
-  EXPECT_EQ(expected_event, mock_observer.LastEvent());
-  EXPECT_TRUE(host_observers.is_initialized());
-
-  // Verify that HostStorageObservers handles subsequent usage changes
-  // correctly.
-  const int64 kDelta = 2345;
-  expected_event.usage += kDelta;
-  SetLastNotificationTime(host_observers, &mock_observer);
-  host_observers.NotifyUsageChange(params.filter, kDelta);
-  EXPECT_EQ(2, mock_observer.EventCount());
-  EXPECT_EQ(expected_event, mock_observer.LastEvent());
-}
-
-// Verify that HostStorageObservers is initialized after the adding the first
-// observer that elected to receive the initial state.
-TEST_F(HostStorageObserversTest, InitializeOnObserver) {
-  const int64 kUsage = 74387;
-  const int64 kQuota = 92834743;
-  quota_manager_->SetCallbackParams(kUsage, kQuota, kQuotaStatusOk);
-  HostStorageObservers host_observers(quota_manager_.get());
-
-  // |host_observers| should not be initialized after the first observer is
-  // added because it did not elect to receive the initial state.
-  StorageObserver::MonitorParams params(kStorageTypePersistent,
-                                        GURL(kDefaultOrigin),
-                                        base::TimeDelta::FromHours(1),
-                                        false);
-  MockObserver mock_observer1;
-  host_observers.AddObserver(&mock_observer1, params);
-  EXPECT_FALSE(host_observers.is_initialized());
-  EXPECT_EQ(0, mock_observer1.EventCount());
-
-  // |host_observers| should be initialized after the second observer is
-  // added.
-  MockObserver mock_observer2;
-  params.dispatch_initial_state = true;
-  host_observers.AddObserver(&mock_observer2, params);
-  StorageObserver::Event expected_event(params.filter, kUsage, kQuota);
-  EXPECT_EQ(0, mock_observer1.EventCount());
-  EXPECT_EQ(1, mock_observer2.EventCount());
-  EXPECT_EQ(expected_event, mock_observer2.LastEvent());
-  EXPECT_TRUE(host_observers.is_initialized());
-  EXPECT_EQ(NULL, GetPendingEvent(host_observers));
-  EXPECT_EQ(0, GetRequiredUpdatesCount(host_observers));
-
-  // Verify that both observers will receive events after a usage change.
-  const int64 kDelta = 2345;
-  expected_event.usage += kDelta;
-  SetLastNotificationTime(host_observers, &mock_observer2);
-  host_observers.NotifyUsageChange(params.filter, kDelta);
-  EXPECT_EQ(1, mock_observer1.EventCount());
-  EXPECT_EQ(2, mock_observer2.EventCount());
-  EXPECT_EQ(expected_event, mock_observer1.LastEvent());
-  EXPECT_EQ(expected_event, mock_observer2.LastEvent());
-  EXPECT_EQ(NULL, GetPendingEvent(host_observers));
-  EXPECT_EQ(0, GetRequiredUpdatesCount(host_observers));
-
-  // Verify that the addition of a third observer only causes an event to be
-  // dispatched to the new observer.
-  MockObserver mock_observer3;
-  params.dispatch_initial_state = true;
-  host_observers.AddObserver(&mock_observer3, params);
-  EXPECT_EQ(1, mock_observer1.EventCount());
-  EXPECT_EQ(2, mock_observer2.EventCount());
-  EXPECT_EQ(1, mock_observer3.EventCount());
-  EXPECT_EQ(expected_event, mock_observer3.LastEvent());
-}
-
-// Verify that negative usage and quota is changed to zero.
-TEST_F(HostStorageObserversTest, NegativeUsageAndQuota) {
-  StorageObserver::MonitorParams params(kStorageTypePersistent,
-                                        GURL(kDefaultOrigin),
-                                        base::TimeDelta::FromHours(1),
-                                        false);
-  const int64 kUsage = -324554;
-  const int64 kQuota = -234354354;
-  quota_manager_->SetCallbackParams(kUsage, kQuota, kQuotaStatusOk);
-
-  MockObserver mock_observer;
-  HostStorageObservers host_observers(quota_manager_.get());
-  host_observers.AddObserver(&mock_observer, params);
-
-  StorageObserver::Event expected_event(params.filter, 0, 0);
-  host_observers.NotifyUsageChange(params.filter, -87324);
-  EXPECT_EQ(expected_event, mock_observer.LastEvent());
-}
-
-// Verify that HostStorageObservers can recover from a bad initialization.
-TEST_F(HostStorageObserversTest, RecoverFromBadUsageInit) {
-  StorageObserver::MonitorParams params(kStorageTypePersistent,
-                                        GURL(kDefaultOrigin),
-                                        base::TimeDelta::FromHours(1),
-                                        false);
-  MockObserver mock_observer;
-  HostStorageObservers host_observers(quota_manager_.get());
-  host_observers.AddObserver(&mock_observer, params);
-
-  // Set up the quota manager to return an error status.
-  const int64 kUsage = 6656;
-  const int64 kQuota = 99585556;
-  quota_manager_->SetCallbackParams(kUsage, kQuota, kQuotaErrorNotSupported);
-
-  // Verify that |host_observers| is not initialized and an event has not been
-  // dispatched.
-  host_observers.NotifyUsageChange(params.filter, 9438);
-  EXPECT_EQ(0, mock_observer.EventCount());
-  EXPECT_FALSE(host_observers.is_initialized());
-  EXPECT_EQ(NULL, GetPendingEvent(host_observers));
-  EXPECT_EQ(0, GetRequiredUpdatesCount(host_observers));
-
-  // Now ensure that quota manager returns a good status.
-  quota_manager_->SetCallbackParams(kUsage, kQuota, kQuotaStatusOk);
-  host_observers.NotifyUsageChange(params.filter, 9048543);
-  StorageObserver::Event expected_event(params.filter, kUsage, kQuota);
-  EXPECT_EQ(1, mock_observer.EventCount());
-  EXPECT_EQ(expected_event, mock_observer.LastEvent());
-  EXPECT_TRUE(host_observers.is_initialized());
-}
-
-// Verify that HostStorageObservers handle initialization of the cached usage
-// and quota correctly.
-TEST_F(HostStorageObserversTest, AsyncInitialization) {
-  StorageObserver::MonitorParams params(kStorageTypePersistent,
-                                        GURL(kDefaultOrigin),
-                                        base::TimeDelta::FromHours(1),
-                                        false);
-  MockObserver mock_observer;
-  HostStorageObservers host_observers(quota_manager_.get());
-  host_observers.AddObserver(&mock_observer, params);
-
-  // Trigger initialization. Leave the mock quota manager uninitialized so that
-  // the callback is not invoked.
-  host_observers.NotifyUsageChange(params.filter, 7645);
-  EXPECT_EQ(0, mock_observer.EventCount());
-  EXPECT_FALSE(host_observers.is_initialized());
-  EXPECT_EQ(NULL, GetPendingEvent(host_observers));
-  EXPECT_EQ(0, GetRequiredUpdatesCount(host_observers));
-
-  // Simulate notifying |host_observers| of a usage change before initialization
-  // is complete.
-  const int64 kUsage = 6656;
-  const int64 kQuota = 99585556;
-  const int64 kDelta = 327643;
-  host_observers.NotifyUsageChange(params.filter, kDelta);
-  EXPECT_EQ(0, mock_observer.EventCount());
-  EXPECT_FALSE(host_observers.is_initialized());
-  EXPECT_EQ(NULL, GetPendingEvent(host_observers));
-  EXPECT_EQ(0, GetRequiredUpdatesCount(host_observers));
-
-  // Simulate an asynchronous callback from QuotaManager.
-  quota_manager_->SetCallbackParams(kUsage, kQuota, kQuotaStatusOk);
-  quota_manager_->InvokeCallback();
-  StorageObserver::Event expected_event(params.filter, kUsage + kDelta, kQuota);
-  EXPECT_EQ(1, mock_observer.EventCount());
-  EXPECT_EQ(expected_event, mock_observer.LastEvent());
-  EXPECT_TRUE(host_observers.is_initialized());
-  EXPECT_EQ(NULL, GetPendingEvent(host_observers));
-  EXPECT_EQ(0, GetRequiredUpdatesCount(host_observers));
-}
-
-// Tests for StorageTypeObservers:
-
-typedef StorageTestWithManagerBase StorageTypeObserversTest;
-
-// Test adding and removing observers.
-TEST_F(StorageTypeObserversTest, AddRemoveObservers) {
-  StorageTypeObservers type_observers(quota_manager_.get());
-
-  StorageObserver::MonitorParams params1(kStorageTypePersistent,
-                                         GURL(kDefaultOrigin),
-                                         base::TimeDelta::FromHours(1),
-                                         false);
-  StorageObserver::MonitorParams params2(kStorageTypePersistent,
-                                         GURL(kAlternativeOrigin),
-                                         base::TimeDelta::FromHours(1),
-                                         false);
-  std::string host1 = net::GetHostOrSpecFromURL(params1.filter.origin);
-  std::string host2 = net::GetHostOrSpecFromURL(params2.filter.origin);
-
-  MockObserver mock_observer1;
-  MockObserver mock_observer2;
-  MockObserver mock_observer3;
-  type_observers.AddObserver(&mock_observer1, params1);
-  type_observers.AddObserver(&mock_observer2, params1);
-
-  type_observers.AddObserver(&mock_observer1, params2);
-  type_observers.AddObserver(&mock_observer2, params2);
-  type_observers.AddObserver(&mock_observer3, params2);
-
-  // Verify that the observers have been removed correctly.
-  ASSERT_TRUE(type_observers.GetHostObservers(host1));
-  ASSERT_TRUE(type_observers.GetHostObservers(host2));
-  EXPECT_EQ(2, GetObserverCount(*type_observers.GetHostObservers(host1)));
-  EXPECT_EQ(3, GetObserverCount(*type_observers.GetHostObservers(host2)));
-
-  // Remove an observer for a specific filter.
-  type_observers.RemoveObserverForFilter(&mock_observer1, params1.filter);
-  ASSERT_TRUE(type_observers.GetHostObservers(host1));
-  ASSERT_TRUE(type_observers.GetHostObservers(host2));
-  EXPECT_EQ(1, GetObserverCount(*type_observers.GetHostObservers(host1)));
-  EXPECT_EQ(3, GetObserverCount(*type_observers.GetHostObservers(host2)));
-
-  // Remove all instances of an observer.
-  type_observers.RemoveObserver(&mock_observer2);
-  ASSERT_TRUE(type_observers.GetHostObservers(host2));
-  EXPECT_EQ(2, GetObserverCount(*type_observers.GetHostObservers(host2)));
-  // Observers of host1 has been deleted as it is empty.
-  EXPECT_FALSE(type_observers.GetHostObservers(host1));
-}
-
-// Tests for StorageMonitor:
-
-class StorageMonitorTest : public StorageTestWithManagerBase {
- public:
-  StorageMonitorTest()
-      : storage_monitor_(NULL),
-        params1_(kStorageTypeTemporary,
-                 GURL(kDefaultOrigin),
-                 base::TimeDelta::FromHours(1),
-                 false),
-        params2_(kStorageTypePersistent,
-                 GURL(kDefaultOrigin),
-                 base::TimeDelta::FromHours(1),
-                 false) {
-  }
-
- protected:
-  virtual void SetUp() OVERRIDE {
-    StorageTestWithManagerBase::SetUp();
-
-    storage_monitor_ = quota_manager_->storage_monitor_.get();
-    host_ = net::GetHostOrSpecFromURL(params1_.filter.origin);
-
-    storage_monitor_->AddObserver(&mock_observer1_, params1_);
-    storage_monitor_->AddObserver(&mock_observer2_, params1_);
-
-    storage_monitor_->AddObserver(&mock_observer1_, params2_);
-    storage_monitor_->AddObserver(&mock_observer2_, params2_);
-    storage_monitor_->AddObserver(&mock_observer3_, params2_);
-  }
-
-  int GetObserverCount(StorageType storage_type) {
-    const StorageTypeObservers* type_observers =
-        storage_monitor_->GetStorageTypeObservers(storage_type);
-    return StorageMonitorTestBase::GetObserverCount(
-                *type_observers->GetHostObservers(host_));
-  }
-
-  void CheckObserverCount(int expected_temporary, int expected_persistent) {
-    ASSERT_TRUE(storage_monitor_->GetStorageTypeObservers(
-                    kStorageTypeTemporary));
-    ASSERT_TRUE(storage_monitor_->GetStorageTypeObservers(
-                    kStorageTypeTemporary)->GetHostObservers(host_));
-    EXPECT_EQ(expected_temporary, GetObserverCount(kStorageTypeTemporary));
-
-    ASSERT_TRUE(storage_monitor_->GetStorageTypeObservers(
-                    kStorageTypePersistent));
-    ASSERT_TRUE(storage_monitor_->GetStorageTypeObservers(
-                    kStorageTypePersistent)->GetHostObservers(host_));
-    EXPECT_EQ(expected_persistent, GetObserverCount(kStorageTypePersistent));
-  }
-
-  StorageMonitor* storage_monitor_;
-  StorageObserver::MonitorParams params1_;
-  StorageObserver::MonitorParams params2_;
-  MockObserver mock_observer1_;
-  MockObserver mock_observer2_;
-  MockObserver mock_observer3_;
-  std::string host_;
-};
-
-// Test adding storage observers.
-TEST_F(StorageMonitorTest, AddObservers) {
-  // Verify that the observers are added correctly.
-  CheckObserverCount(2, 3);
-}
-
-// Test dispatching events to storage observers.
-TEST_F(StorageMonitorTest, EventDispatch) {
-  // Verify dispatch of events.
-  const int64 kUsage = 5325;
-  const int64 kQuota = 903845;
-  quota_manager_->SetCallbackParams(kUsage, kQuota, kQuotaStatusOk);
-  storage_monitor_->NotifyUsageChange(params1_.filter, 9048543);
-
-  StorageObserver::Event expected_event(params1_.filter, kUsage, kQuota);
-  EXPECT_EQ(1, mock_observer1_.EventCount());
-  EXPECT_EQ(1, mock_observer2_.EventCount());
-  EXPECT_EQ(0, mock_observer3_.EventCount());
-  EXPECT_EQ(expected_event, mock_observer1_.LastEvent());
-  EXPECT_EQ(expected_event, mock_observer2_.LastEvent());
-}
-
-// Test removing all instances of an observer.
-TEST_F(StorageMonitorTest, RemoveObserver) {
-  storage_monitor_->RemoveObserver(&mock_observer1_);
-  CheckObserverCount(1, 2);
-}
-
-// Test removing an observer for a specific filter.
-TEST_F(StorageMonitorTest, RemoveObserverForFilter) {
-  storage_monitor_->RemoveObserverForFilter(&mock_observer1_, params2_.filter);
-  CheckObserverCount(2, 2);
-}
-
-// Integration test for QuotaManager and StorageMonitor:
-
-class StorageMonitorIntegrationTest : public testing::Test {
- public:
-  virtual void SetUp() OVERRIDE {
-    ASSERT_TRUE(data_dir_.CreateUniqueTempDir());
-    storage_policy_ = new MockSpecialStoragePolicy();
-    quota_manager_ = new QuotaManager(
-        false,
-        data_dir_.path(),
-        base::MessageLoopProxy::current().get(),
-        base::MessageLoopProxy::current().get(),
-        storage_policy_.get());
-
-    client_ = new MockStorageClient(quota_manager_->proxy(),
-                                    NULL,
-                                    QuotaClient::kFileSystem,
-                                    0);
-
-    quota_manager_->proxy()->RegisterClient(client_);
-  }
-
-  virtual void TearDown() OVERRIDE {
-    // This ensures the quota manager is destroyed correctly.
-    quota_manager_ = NULL;
-    base::RunLoop().RunUntilIdle();
-  }
-
- protected:
-  base::MessageLoop message_loop_;
-  base::ScopedTempDir data_dir_;
-  scoped_refptr<MockSpecialStoragePolicy> storage_policy_;
-  scoped_refptr<QuotaManager> quota_manager_;
-  MockStorageClient* client_;
-};
-
-// This test simulates a usage change in a quota client and verifies that a
-// storage observer will receive a storage event.
-TEST_F(StorageMonitorIntegrationTest, NotifyUsageEvent) {
-  const StorageType kTestStorageType = kStorageTypePersistent;
-  const int64 kTestUsage = 234743;
-
-  // Register the observer.
-  StorageObserver::MonitorParams params(kTestStorageType,
-                                        GURL(kDefaultOrigin),
-                                        base::TimeDelta::FromHours(1),
-                                        false);
-  MockObserver mock_observer;
-  quota_manager_->AddStorageObserver(&mock_observer, params);
-
-  // Fire a usage change.
-  client_->AddOriginAndNotify(GURL(kDefaultOrigin),
-                              kTestStorageType,
-                              kTestUsage);
-  base::RunLoop().RunUntilIdle();
-
-  // Verify that the observer receives it.
-  ASSERT_EQ(1, mock_observer.EventCount());
-  const StorageObserver::Event& event = mock_observer.LastEvent();
-  EXPECT_EQ(params.filter, event.filter);
-  EXPECT_EQ(kTestUsage, event.usage);
-}
-
-}  // namespace quota
diff --git a/webkit/browser/quota/usage_tracker_unittest.cc b/webkit/browser/quota/usage_tracker_unittest.cc
deleted file mode 100644
index 8e9d029..0000000
--- a/webkit/browser/quota/usage_tracker_unittest.cc
+++ /dev/null
@@ -1,328 +0,0 @@
-// Copyright 2013 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 "base/bind.h"
-#include "base/run_loop.h"
-#include "net/base/net_util.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "webkit/browser/quota/mock_special_storage_policy.h"
-#include "webkit/browser/quota/usage_tracker.h"
-
-namespace quota {
-
-namespace {
-
-void DidGetGlobalUsage(bool* done,
-                       int64* usage_out,
-                       int64* unlimited_usage_out,
-                       int64 usage,
-                       int64 unlimited_usage) {
-  EXPECT_FALSE(*done);
-  *done = true;
-  *usage_out = usage;
-  *unlimited_usage_out = unlimited_usage;
-}
-
-void DidGetUsage(bool* done,
-                 int64* usage_out,
-                 int64 usage) {
-  EXPECT_FALSE(*done);
-  *done = true;
-  *usage_out = usage;
-}
-
-}  // namespace
-
-class MockQuotaClient : public QuotaClient {
- public:
-  MockQuotaClient() {}
-  virtual ~MockQuotaClient() {}
-
-  virtual ID id() const OVERRIDE {
-    return kFileSystem;
-  }
-
-  virtual void OnQuotaManagerDestroyed() OVERRIDE {}
-
-  virtual void GetOriginUsage(const GURL& origin,
-                              StorageType type,
-                              const GetUsageCallback& callback) OVERRIDE {
-    EXPECT_EQ(kStorageTypeTemporary, type);
-    int64 usage = GetUsage(origin);
-    base::MessageLoop::current()->PostTask(FROM_HERE,
-                                           base::Bind(callback, usage));
-  }
-
-  virtual void GetOriginsForType(StorageType type,
-                                 const GetOriginsCallback& callback) OVERRIDE {
-    EXPECT_EQ(kStorageTypeTemporary, type);
-    std::set<GURL> origins;
-    for (UsageMap::const_iterator itr = usage_map_.begin();
-         itr != usage_map_.end(); ++itr) {
-      origins.insert(itr->first);
-    }
-    base::MessageLoop::current()->PostTask(FROM_HERE,
-                                           base::Bind(callback, origins));
-  }
-
-  virtual void GetOriginsForHost(StorageType type,
-                                 const std::string& host,
-                                 const GetOriginsCallback& callback) OVERRIDE {
-    EXPECT_EQ(kStorageTypeTemporary, type);
-    std::set<GURL> origins;
-    for (UsageMap::const_iterator itr = usage_map_.begin();
-         itr != usage_map_.end(); ++itr) {
-      if (net::GetHostOrSpecFromURL(itr->first) == host)
-        origins.insert(itr->first);
-    }
-    base::MessageLoop::current()->PostTask(FROM_HERE,
-                                           base::Bind(callback, origins));
-  }
-
-  virtual void DeleteOriginData(const GURL& origin,
-                                StorageType type,
-                                const DeletionCallback& callback) OVERRIDE {
-    EXPECT_EQ(kStorageTypeTemporary, type);
-    usage_map_.erase(origin);
-    base::MessageLoop::current()->PostTask(
-        FROM_HERE, base::Bind(callback, kQuotaStatusOk));
-  }
-
-  virtual bool DoesSupport(quota::StorageType type) const OVERRIDE {
-    return type == quota::kStorageTypeTemporary;
-  }
-
-  int64 GetUsage(const GURL& origin) {
-    UsageMap::const_iterator found = usage_map_.find(origin);
-    if (found == usage_map_.end())
-      return 0;
-    return found->second;
-  }
-
-  void SetUsage(const GURL& origin, int64 usage) {
-    usage_map_[origin] = usage;
-  }
-
-  int64 UpdateUsage(const GURL& origin, int64 delta) {
-    return usage_map_[origin] += delta;
-  }
-
- private:
-  typedef std::map<GURL, int64> UsageMap;
-
-  UsageMap usage_map_;
-
-  DISALLOW_COPY_AND_ASSIGN(MockQuotaClient);
-};
-
-class UsageTrackerTest : public testing::Test {
- public:
-  UsageTrackerTest()
-      : storage_policy_(new MockSpecialStoragePolicy()),
-        usage_tracker_(GetUsageTrackerList(), kStorageTypeTemporary,
-                       storage_policy_.get(), NULL) {
-  }
-
-  virtual ~UsageTrackerTest() {}
-
-  UsageTracker* usage_tracker() {
-    return &usage_tracker_;
-  }
-
-  void UpdateUsage(const GURL& origin, int64 delta) {
-    quota_client_.UpdateUsage(origin, delta);
-    usage_tracker_.UpdateUsageCache(quota_client_.id(), origin, delta);
-    base::RunLoop().RunUntilIdle();
-  }
-
-  void UpdateUsageWithoutNotification(const GURL& origin, int64 delta) {
-    quota_client_.UpdateUsage(origin, delta);
-  }
-
-  void GetGlobalLimitedUsage(int64* limited_usage) {
-    bool done = false;
-    usage_tracker_.GetGlobalLimitedUsage(base::Bind(
-        &DidGetUsage, &done, limited_usage));
-    base::RunLoop().RunUntilIdle();
-
-    EXPECT_TRUE(done);
-  }
-
-  void GetGlobalUsage(int64* usage, int64* unlimited_usage) {
-    bool done = false;
-    usage_tracker_.GetGlobalUsage(base::Bind(
-        &DidGetGlobalUsage,
-        &done, usage, unlimited_usage));
-    base::RunLoop().RunUntilIdle();
-
-    EXPECT_TRUE(done);
-  }
-
-  void GetHostUsage(const std::string& host, int64* usage) {
-    bool done = false;
-    usage_tracker_.GetHostUsage(host, base::Bind(&DidGetUsage, &done, usage));
-    base::RunLoop().RunUntilIdle();
-
-    EXPECT_TRUE(done);
-  }
-
-  void GrantUnlimitedStoragePolicy(const GURL& origin) {
-    if (!storage_policy_->IsStorageUnlimited(origin)) {
-      storage_policy_->AddUnlimited(origin);
-      storage_policy_->NotifyGranted(
-          origin, SpecialStoragePolicy::STORAGE_UNLIMITED);
-    }
-  }
-
-  void RevokeUnlimitedStoragePolicy(const GURL& origin) {
-    if (storage_policy_->IsStorageUnlimited(origin)) {
-      storage_policy_->RemoveUnlimited(origin);
-      storage_policy_->NotifyRevoked(
-          origin, SpecialStoragePolicy::STORAGE_UNLIMITED);
-    }
-  }
-
-  void SetUsageCacheEnabled(const GURL& origin, bool enabled) {
-    usage_tracker_.SetUsageCacheEnabled(
-        quota_client_.id(), origin, enabled);
-  }
-
- private:
-  QuotaClientList GetUsageTrackerList() {
-    QuotaClientList client_list;
-    client_list.push_back(&quota_client_);
-    return client_list;
-  }
-
-  base::MessageLoop message_loop_;
-
-  scoped_refptr<MockSpecialStoragePolicy> storage_policy_;
-  MockQuotaClient quota_client_;
-  UsageTracker usage_tracker_;
-
-  DISALLOW_COPY_AND_ASSIGN(UsageTrackerTest);
-};
-
-TEST_F(UsageTrackerTest, GrantAndRevokeUnlimitedStorage) {
-  int64 usage = 0;
-  int64 unlimited_usage = 0;
-  int64 host_usage = 0;
-  GetGlobalUsage(&usage, &unlimited_usage);
-  EXPECT_EQ(0, usage);
-  EXPECT_EQ(0, unlimited_usage);
-
-  const GURL origin("http://example.com");
-  const std::string host(net::GetHostOrSpecFromURL(origin));
-
-  UpdateUsage(origin, 100);
-  GetGlobalUsage(&usage, &unlimited_usage);
-  GetHostUsage(host, &host_usage);
-  EXPECT_EQ(100, usage);
-  EXPECT_EQ(0, unlimited_usage);
-  EXPECT_EQ(100, host_usage);
-
-  GrantUnlimitedStoragePolicy(origin);
-  GetGlobalUsage(&usage, &unlimited_usage);
-  GetHostUsage(host, &host_usage);
-  EXPECT_EQ(100, usage);
-  EXPECT_EQ(100, unlimited_usage);
-  EXPECT_EQ(100, host_usage);
-
-  RevokeUnlimitedStoragePolicy(origin);
-  GetGlobalUsage(&usage, &unlimited_usage);
-  GetHostUsage(host, &host_usage);
-  EXPECT_EQ(100, usage);
-  EXPECT_EQ(0, unlimited_usage);
-  EXPECT_EQ(100, host_usage);
-}
-
-TEST_F(UsageTrackerTest, CacheDisabledClientTest) {
-  int64 usage = 0;
-  int64 unlimited_usage = 0;
-  int64 host_usage = 0;
-
-  const GURL origin("http://example.com");
-  const std::string host(net::GetHostOrSpecFromURL(origin));
-
-  UpdateUsage(origin, 100);
-  GetGlobalUsage(&usage, &unlimited_usage);
-  GetHostUsage(host, &host_usage);
-  EXPECT_EQ(100, usage);
-  EXPECT_EQ(0, unlimited_usage);
-  EXPECT_EQ(100, host_usage);
-
-  UpdateUsageWithoutNotification(origin, 100);
-  GetGlobalUsage(&usage, &unlimited_usage);
-  GetHostUsage(host, &host_usage);
-  EXPECT_EQ(100, usage);
-  EXPECT_EQ(0, unlimited_usage);
-  EXPECT_EQ(100, host_usage);
-
-  GrantUnlimitedStoragePolicy(origin);
-  UpdateUsageWithoutNotification(origin, 100);
-  SetUsageCacheEnabled(origin, false);
-  UpdateUsageWithoutNotification(origin, 100);
-
-  GetGlobalUsage(&usage, &unlimited_usage);
-  GetHostUsage(host, &host_usage);
-  EXPECT_EQ(400, usage);
-  EXPECT_EQ(400, unlimited_usage);
-  EXPECT_EQ(400, host_usage);
-
-  RevokeUnlimitedStoragePolicy(origin);
-  GetGlobalUsage(&usage, &unlimited_usage);
-  GetHostUsage(host, &host_usage);
-  EXPECT_EQ(400, usage);
-  EXPECT_EQ(0, unlimited_usage);
-  EXPECT_EQ(400, host_usage);
-
-  SetUsageCacheEnabled(origin, true);
-  UpdateUsage(origin, 100);
-
-  GetGlobalUsage(&usage, &unlimited_usage);
-  GetHostUsage(host, &host_usage);
-  EXPECT_EQ(500, usage);
-  EXPECT_EQ(0, unlimited_usage);
-  EXPECT_EQ(500, host_usage);
-}
-
-TEST_F(UsageTrackerTest, LimitedGlobalUsageTest) {
-  const GURL kNormal("http://normal");
-  const GURL kUnlimited("http://unlimited");
-  const GURL kNonCached("http://non_cached");
-  const GURL kNonCachedUnlimited("http://non_cached-unlimited");
-
-  GrantUnlimitedStoragePolicy(kUnlimited);
-  GrantUnlimitedStoragePolicy(kNonCachedUnlimited);
-
-  SetUsageCacheEnabled(kNonCached, false);
-  SetUsageCacheEnabled(kNonCachedUnlimited, false);
-
-  UpdateUsageWithoutNotification(kNormal, 1);
-  UpdateUsageWithoutNotification(kUnlimited, 2);
-  UpdateUsageWithoutNotification(kNonCached, 4);
-  UpdateUsageWithoutNotification(kNonCachedUnlimited, 8);
-
-  int64 limited_usage = 0;
-  int64 total_usage = 0;
-  int64 unlimited_usage = 0;
-
-  GetGlobalLimitedUsage(&limited_usage);
-  GetGlobalUsage(&total_usage, &unlimited_usage);
-  EXPECT_EQ(1 + 4, limited_usage);
-  EXPECT_EQ(1 + 2 + 4 + 8, total_usage);
-  EXPECT_EQ(2 + 8, unlimited_usage);
-
-  UpdateUsageWithoutNotification(kNonCached, 16 - 4);
-  UpdateUsageWithoutNotification(kNonCachedUnlimited, 32 - 8);
-
-  GetGlobalLimitedUsage(&limited_usage);
-  GetGlobalUsage(&total_usage, &unlimited_usage);
-  EXPECT_EQ(1 + 16, limited_usage);
-  EXPECT_EQ(1 + 2 + 16 + 32, total_usage);
-  EXPECT_EQ(2 + 32, unlimited_usage);
-}
-
-
-}  // namespace quota
diff --git a/webkit/child/webkit_child.target.darwin-arm.mk b/webkit/child/webkit_child.target.darwin-arm.mk
index 3bc0a86..56063f8 100644
--- a/webkit/child/webkit_child.target.darwin-arm.mk
+++ b/webkit/child/webkit_child.target.darwin-arm.mk
@@ -98,12 +98,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -239,12 +242,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -336,7 +342,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/child/webkit_child.target.darwin-mips.mk b/webkit/child/webkit_child.target.darwin-mips.mk
index f1e927d..da545b8 100644
--- a/webkit/child/webkit_child.target.darwin-mips.mk
+++ b/webkit/child/webkit_child.target.darwin-mips.mk
@@ -97,12 +97,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -237,12 +240,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -332,7 +338,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/child/webkit_child.target.darwin-x86.mk b/webkit/child/webkit_child.target.darwin-x86.mk
index bf4ccae..a1333c6 100644
--- a/webkit/child/webkit_child.target.darwin-x86.mk
+++ b/webkit/child/webkit_child.target.darwin-x86.mk
@@ -98,12 +98,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -238,12 +241,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -332,7 +338,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/child/webkit_child.target.darwin-x86_64.mk b/webkit/child/webkit_child.target.darwin-x86_64.mk
index 756980c..57f4d58 100644
--- a/webkit/child/webkit_child.target.darwin-x86_64.mk
+++ b/webkit/child/webkit_child.target.darwin-x86_64.mk
@@ -99,12 +99,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -240,12 +243,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -334,7 +340,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/child/webkit_child.target.linux-arm.mk b/webkit/child/webkit_child.target.linux-arm.mk
index 3bc0a86..56063f8 100644
--- a/webkit/child/webkit_child.target.linux-arm.mk
+++ b/webkit/child/webkit_child.target.linux-arm.mk
@@ -98,12 +98,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -239,12 +242,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -336,7 +342,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/child/webkit_child.target.linux-mips.mk b/webkit/child/webkit_child.target.linux-mips.mk
index f1e927d..da545b8 100644
--- a/webkit/child/webkit_child.target.linux-mips.mk
+++ b/webkit/child/webkit_child.target.linux-mips.mk
@@ -97,12 +97,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -237,12 +240,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -332,7 +338,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/child/webkit_child.target.linux-x86.mk b/webkit/child/webkit_child.target.linux-x86.mk
index bf4ccae..a1333c6 100644
--- a/webkit/child/webkit_child.target.linux-x86.mk
+++ b/webkit/child/webkit_child.target.linux-x86.mk
@@ -98,12 +98,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -238,12 +241,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -332,7 +338,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/child/webkit_child.target.linux-x86_64.mk b/webkit/child/webkit_child.target.linux-x86_64.mk
index 756980c..57f4d58 100644
--- a/webkit/child/webkit_child.target.linux-x86_64.mk
+++ b/webkit/child/webkit_child.target.linux-x86_64.mk
@@ -99,12 +99,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -240,12 +243,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -334,7 +340,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/common/gpu/webkit_gpu.gyp b/webkit/common/gpu/webkit_gpu.gyp
index 1ccd5dc..a0b24cd 100644
--- a/webkit/common/gpu/webkit_gpu.gyp
+++ b/webkit/common/gpu/webkit_gpu.gyp
@@ -21,6 +21,7 @@
             '<(DEPTH)/gpu/gpu.gyp:command_buffer_service',
             '<(DEPTH)/gpu/gpu.gyp:gles2_c_lib',
             '<(DEPTH)/gpu/gpu.gyp:gles2_implementation',
+            '<(DEPTH)/gpu/gpu.gyp:gl_in_process_context',
             '<(DEPTH)/gpu/skia_bindings/skia_bindings.gyp:gpu_skia_bindings',
             '<(DEPTH)/skia/skia.gyp:skia',
             '<(DEPTH)/third_party/WebKit/public/blink.gyp:blink_minimal',
diff --git a/webkit/common/gpu/webkit_gpu.target.darwin-arm.mk b/webkit/common/gpu/webkit_gpu.target.darwin-arm.mk
index 6c5745e..d9719c7 100644
--- a/webkit/common/gpu/webkit_gpu.target.darwin-arm.mk
+++ b/webkit/common/gpu/webkit_gpu.target.darwin-arm.mk
@@ -44,7 +44,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-Wno-format \
 	-fno-tree-sra \
 	-fuse-ld=gold \
@@ -100,12 +99,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -173,7 +175,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-Wno-format \
 	-fno-tree-sra \
 	-fuse-ld=gold \
@@ -229,12 +230,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -310,7 +314,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/common/gpu/webkit_gpu.target.darwin-mips.mk b/webkit/common/gpu/webkit_gpu.target.darwin-mips.mk
index d105c5a..4c8a486 100644
--- a/webkit/common/gpu/webkit_gpu.target.darwin-mips.mk
+++ b/webkit/common/gpu/webkit_gpu.target.darwin-mips.mk
@@ -45,7 +45,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-Wno-format \
 	-EL \
 	-mhard-float \
@@ -100,12 +99,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -174,7 +176,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-Wno-format \
 	-EL \
 	-mhard-float \
@@ -229,12 +230,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -308,7 +312,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/common/gpu/webkit_gpu.target.darwin-x86.mk b/webkit/common/gpu/webkit_gpu.target.darwin-x86.mk
index d3bb33a..d99e41d 100644
--- a/webkit/common/gpu/webkit_gpu.target.darwin-x86.mk
+++ b/webkit/common/gpu/webkit_gpu.target.darwin-x86.mk
@@ -43,7 +43,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-Wno-format \
 	-msse2 \
 	-mfpmath=sse \
@@ -101,12 +100,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -172,7 +174,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-Wno-format \
 	-msse2 \
 	-mfpmath=sse \
@@ -230,12 +231,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -308,7 +312,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/common/gpu/webkit_gpu.target.darwin-x86_64.mk b/webkit/common/gpu/webkit_gpu.target.darwin-x86_64.mk
index a24b8f8..a29baad 100644
--- a/webkit/common/gpu/webkit_gpu.target.darwin-x86_64.mk
+++ b/webkit/common/gpu/webkit_gpu.target.darwin-x86_64.mk
@@ -45,7 +45,6 @@
 	-pipe \
 	-fPIC \
 	-Wno-unused-local-typedefs \
-	-Wno-unknown-pragmas \
 	-Wno-format \
 	-m64 \
 	-march=x86-64 \
@@ -101,12 +100,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -174,7 +176,6 @@
 	-pipe \
 	-fPIC \
 	-Wno-unused-local-typedefs \
-	-Wno-unknown-pragmas \
 	-Wno-format \
 	-m64 \
 	-march=x86-64 \
@@ -230,12 +231,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -308,7 +312,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/common/gpu/webkit_gpu.target.linux-arm.mk b/webkit/common/gpu/webkit_gpu.target.linux-arm.mk
index 6c5745e..d9719c7 100644
--- a/webkit/common/gpu/webkit_gpu.target.linux-arm.mk
+++ b/webkit/common/gpu/webkit_gpu.target.linux-arm.mk
@@ -44,7 +44,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-Wno-format \
 	-fno-tree-sra \
 	-fuse-ld=gold \
@@ -100,12 +99,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -173,7 +175,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-Wno-format \
 	-fno-tree-sra \
 	-fuse-ld=gold \
@@ -229,12 +230,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -310,7 +314,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/common/gpu/webkit_gpu.target.linux-mips.mk b/webkit/common/gpu/webkit_gpu.target.linux-mips.mk
index d105c5a..4c8a486 100644
--- a/webkit/common/gpu/webkit_gpu.target.linux-mips.mk
+++ b/webkit/common/gpu/webkit_gpu.target.linux-mips.mk
@@ -45,7 +45,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-Wno-format \
 	-EL \
 	-mhard-float \
@@ -100,12 +99,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -174,7 +176,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-Wno-format \
 	-EL \
 	-mhard-float \
@@ -229,12 +230,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -308,7 +312,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/common/gpu/webkit_gpu.target.linux-x86.mk b/webkit/common/gpu/webkit_gpu.target.linux-x86.mk
index d3bb33a..d99e41d 100644
--- a/webkit/common/gpu/webkit_gpu.target.linux-x86.mk
+++ b/webkit/common/gpu/webkit_gpu.target.linux-x86.mk
@@ -43,7 +43,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-Wno-format \
 	-msse2 \
 	-mfpmath=sse \
@@ -101,12 +100,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -172,7 +174,6 @@
 	-fvisibility=hidden \
 	-pipe \
 	-fPIC \
-	-Wno-unknown-pragmas \
 	-Wno-format \
 	-msse2 \
 	-mfpmath=sse \
@@ -230,12 +231,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -308,7 +312,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/common/gpu/webkit_gpu.target.linux-x86_64.mk b/webkit/common/gpu/webkit_gpu.target.linux-x86_64.mk
index a24b8f8..a29baad 100644
--- a/webkit/common/gpu/webkit_gpu.target.linux-x86_64.mk
+++ b/webkit/common/gpu/webkit_gpu.target.linux-x86_64.mk
@@ -45,7 +45,6 @@
 	-pipe \
 	-fPIC \
 	-Wno-unused-local-typedefs \
-	-Wno-unknown-pragmas \
 	-Wno-format \
 	-m64 \
 	-march=x86-64 \
@@ -101,12 +100,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -174,7 +176,6 @@
 	-pipe \
 	-fPIC \
 	-Wno-unused-local-typedefs \
-	-Wno-unknown-pragmas \
 	-Wno-format \
 	-m64 \
 	-march=x86-64 \
@@ -230,12 +231,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DMESA_EGL_NO_X11_HEADERS' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
@@ -308,7 +312,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/common/webkit_common.gyp b/webkit/common/webkit_common.gyp
index 21260c2..dd3e20e 100644
--- a/webkit/common/webkit_common.gyp
+++ b/webkit/common/webkit_common.gyp
@@ -53,12 +53,6 @@
       ],
 
       'conditions': [
-        ['toolkit_uses_gtk == 1', {
-          'dependencies': [
-            '<(DEPTH)/build/linux/system.gyp:gtk',
-          ],
-          'sources/': [['exclude', '_x11\\.cc$']],
-        }],
         ['use_aura==1 and use_x11==1', {
           'dependencies': [
             '<(DEPTH)/build/linux/system.gyp:xcursor',
diff --git a/webkit/common/webkit_common.target.darwin-arm.mk b/webkit/common/webkit_common.target.darwin-arm.mk
index b085519..4e20d7a 100644
--- a/webkit/common/webkit_common.target.darwin-arm.mk
+++ b/webkit/common/webkit_common.target.darwin-arm.mk
@@ -101,12 +101,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -227,12 +230,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -309,7 +315,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/common/webkit_common.target.darwin-mips.mk b/webkit/common/webkit_common.target.darwin-mips.mk
index 4dff3c1..d332c35 100644
--- a/webkit/common/webkit_common.target.darwin-mips.mk
+++ b/webkit/common/webkit_common.target.darwin-mips.mk
@@ -100,12 +100,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -225,12 +228,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -305,7 +311,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/common/webkit_common.target.darwin-x86.mk b/webkit/common/webkit_common.target.darwin-x86.mk
index 4d14877..4e1c432 100644
--- a/webkit/common/webkit_common.target.darwin-x86.mk
+++ b/webkit/common/webkit_common.target.darwin-x86.mk
@@ -101,12 +101,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -226,12 +229,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -305,7 +311,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/common/webkit_common.target.darwin-x86_64.mk b/webkit/common/webkit_common.target.darwin-x86_64.mk
index 2d2c555..2529877 100644
--- a/webkit/common/webkit_common.target.darwin-x86_64.mk
+++ b/webkit/common/webkit_common.target.darwin-x86_64.mk
@@ -102,12 +102,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -228,12 +231,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -307,7 +313,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/common/webkit_common.target.linux-arm.mk b/webkit/common/webkit_common.target.linux-arm.mk
index b085519..4e20d7a 100644
--- a/webkit/common/webkit_common.target.linux-arm.mk
+++ b/webkit/common/webkit_common.target.linux-arm.mk
@@ -101,12 +101,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -227,12 +230,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -309,7 +315,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/common/webkit_common.target.linux-mips.mk b/webkit/common/webkit_common.target.linux-mips.mk
index 4dff3c1..d332c35 100644
--- a/webkit/common/webkit_common.target.linux-mips.mk
+++ b/webkit/common/webkit_common.target.linux-mips.mk
@@ -100,12 +100,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -225,12 +228,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -305,7 +311,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/common/webkit_common.target.linux-x86.mk b/webkit/common/webkit_common.target.linux-x86.mk
index 4d14877..4e1c432 100644
--- a/webkit/common/webkit_common.target.linux-x86.mk
+++ b/webkit/common/webkit_common.target.linux-x86.mk
@@ -101,12 +101,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -226,12 +229,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -305,7 +311,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/common/webkit_common.target.linux-x86_64.mk b/webkit/common/webkit_common.target.linux-x86_64.mk
index 2d2c555..2529877 100644
--- a/webkit/common/webkit_common.target.linux-x86_64.mk
+++ b/webkit/common/webkit_common.target.linux-x86_64.mk
@@ -102,12 +102,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -228,12 +231,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
@@ -307,7 +313,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/common/webpreferences.cc b/webkit/common/webpreferences.cc
index 96b0dff..dc13da1 100644
--- a/webkit/common/webpreferences.cc
+++ b/webkit/common/webpreferences.cc
@@ -56,13 +56,13 @@
       privileged_webgl_extensions_enabled(false),
       webgl_errors_to_console_enabled(true),
       mock_scrollbars_enabled(false),
-      layer_squashing_enabled(false),
+      layer_squashing_enabled(true),
       threaded_html_parser(true),
       show_paint_rects(false),
       asynchronous_spell_checking_enabled(true),
       unified_textchecker_enabled(false),
       accelerated_compositing_enabled(false),
-      force_compositing_mode(false),
+      force_compositing_mode(true),
       accelerated_compositing_for_3d_transforms_enabled(false),
       accelerated_compositing_for_animation_enabled(false),
       accelerated_compositing_for_video_enabled(false),
@@ -81,7 +81,6 @@
       should_print_backgrounds(false),
       should_clear_document_background(true),
       enable_scroll_animator(false),
-      visual_word_movement_enabled(false),
       lazy_layout_enabled(false),
       region_based_columns_enabled(false),
       touch_enabled(false),
diff --git a/webkit/common/webpreferences.h b/webkit/common/webpreferences.h
index 3428cd0..36f5261 100644
--- a/webkit/common/webpreferences.h
+++ b/webkit/common/webpreferences.h
@@ -129,7 +129,6 @@
   bool should_print_backgrounds;
   bool should_clear_document_background;
   bool enable_scroll_animator;
-  bool visual_word_movement_enabled;
   bool css_variables_enabled;
   bool lazy_layout_enabled;
   bool region_based_columns_enabled;
diff --git a/webkit/glue/resources/default_100_percent/synthetic_touch_cursor.png b/webkit/glue/resources/default_100_percent/synthetic_touch_cursor.png
deleted file mode 100644
index 883e690..0000000
--- a/webkit/glue/resources/default_100_percent/synthetic_touch_cursor.png
+++ /dev/null
Binary files differ
diff --git a/webkit/glue/resources/webkit_resources.grd b/webkit/glue/resources/webkit_resources.grd
index ddd978e..02ce66f 100644
--- a/webkit/glue/resources/webkit_resources.grd
+++ b/webkit/glue/resources/webkit_resources.grd
@@ -133,7 +133,6 @@
       </if>
       <structure type="chrome_scaled_image" name="IDR_PASSWORD_GENERATION_ICON" file="password_generation.png" />
       <structure type="chrome_scaled_image" name="IDR_PASSWORD_GENERATION_ICON_HOVER" file="password_generation_hover.png" />
-      <structure type="chrome_scaled_image" name="IDR_SYNTHETIC_TOUCH_CURSOR" file="synthetic_touch_cursor.png" />
     </structures>
   </release>
 </grit>
diff --git a/webkit/glue/resources/webkit_strings_am.xtb b/webkit/glue/resources/webkit_strings_am.xtb
index b9f4b82..c405105 100644
--- a/webkit/glue/resources/webkit_strings_am.xtb
+++ b/webkit/glue/resources/webkit_strings_am.xtb
@@ -7,7 +7,7 @@
 <translation id="1729654308190250600">እባክዎ ባዶ ያልሆነ የኢሜይል አድራሻ ያስገቡ።</translation>
 <translation id="6015796118275082299">ዓመት</translation>
 <translation id="9186171386827445984">ሰነዱን በመጫን ላይ፦ <ph name="PAGE_NUMBER"/>/<ph name="NUMBER_OF_PAGES"/> ገጾች...</translation>
-<translation id="1235745349614807883">የቅርብ ጊዜ ፍለጋዎችን አስወግድ</translation>
+<translation id="1235745349614807883">የቅርብ ጊዜ ፍለጋዎችን አጽዳ</translation>
 <translation id="7223624360433298498">ያለፈው ጊዜ</translation>
 <translation id="1171774979989969504">እባክዎ የኢሜይል አድራሻ ያስገቡ።</translation>
 <translation id="709897737746224366">እባክዎ የተጠየቀውን ቅርጸት ያዛምዱ።</translation>
diff --git a/webkit/glue/resources/webkit_strings_vi.xtb b/webkit/glue/resources/webkit_strings_vi.xtb
index f0aa193..c4b363e 100644
--- a/webkit/glue/resources/webkit_strings_vi.xtb
+++ b/webkit/glue/resources/webkit_strings_vi.xtb
@@ -56,7 +56,7 @@
 <translation id="2674318244760992338">chân trang</translation>
 <translation id="8987927404178983737">Tháng</translation>
 <translation id="8115662671911883373">bắt đầu hiển thị phụ đề chi tiết</translation>
-<translation id="7364796246159120393">Chọn Tệp tin</translation>
+<translation id="7364796246159120393">Chọn tệp</translation>
 <translation id="2761667185364618470">Vui lòng chọn hộp kiểm này nếu bạn muốn tiếp tục.</translation>
 <translation id="8534579021159131403">Phút</translation>
 <translation id="819205353528511139">phát phim ở chế độ toàn màn hình</translation>
diff --git a/webkit/renderer/compositor_bindings/compositor_bindings_tests.gyp b/webkit/renderer/compositor_bindings/compositor_bindings_tests.gyp
index 47014fb..53978a2 100644
--- a/webkit/renderer/compositor_bindings/compositor_bindings_tests.gyp
+++ b/webkit/renderer/compositor_bindings/compositor_bindings_tests.gyp
@@ -63,7 +63,6 @@
           ],
           'variables': {
             'test_suite_name': 'webkit_compositor_bindings_unittests',
-            'input_shlib_path': '<(SHARED_LIB_DIR)/<(SHARED_LIB_PREFIX)webkit_compositor_bindings_unittests<(SHARED_LIB_SUFFIX)',
           },
           'includes': [ '../../../build/apk_test.gypi' ],
         },
diff --git a/webkit/renderer/compositor_bindings/web_compositor_support_impl.cc b/webkit/renderer/compositor_bindings/web_compositor_support_impl.cc
index 09af014..15bb2a6 100644
--- a/webkit/renderer/compositor_bindings/web_compositor_support_impl.cc
+++ b/webkit/renderer/compositor_bindings/web_compositor_support_impl.cc
@@ -97,14 +97,6 @@
                                    is_left_side_vertical_scrollbar);
 }
 
-WebScrollbarLayer* WebCompositorSupportImpl::createSolidColorScrollbarLayer(
-    WebScrollbar::Orientation orientation,
-    int thumb_thickness,
-    bool is_left_side_vertical_scrollbar) {
-  return new WebScrollbarLayerImpl(
-      orientation, thumb_thickness, 0, is_left_side_vertical_scrollbar);
-}
-
 WebAnimation* WebCompositorSupportImpl::createAnimation(
     const blink::WebAnimationCurve& curve,
     blink::WebAnimation::TargetProperty target,
diff --git a/webkit/renderer/compositor_bindings/web_compositor_support_impl.h b/webkit/renderer/compositor_bindings/web_compositor_support_impl.h
index 27494c7..aa7eee0 100644
--- a/webkit/renderer/compositor_bindings/web_compositor_support_impl.h
+++ b/webkit/renderer/compositor_bindings/web_compositor_support_impl.h
@@ -40,11 +40,6 @@
       int thumb_thickness,
       int track_start,
       bool is_left_side_vertical_scrollbar);
-  // FIXME(aelias): Delete this after Blink roll.
-  virtual blink::WebScrollbarLayer* createSolidColorScrollbarLayer(
-      blink::WebScrollbar::Orientation orientation,
-      int thumb_thickness,
-      bool is_left_side_vertical_scrollbar);
   virtual blink::WebAnimation* createAnimation(
       const blink::WebAnimationCurve& curve,
       blink::WebAnimation::TargetProperty target,
diff --git a/webkit/renderer/compositor_bindings/web_layer_impl.h b/webkit/renderer/compositor_bindings/web_layer_impl.h
index 7fab5e5..4e46e30 100644
--- a/webkit/renderer/compositor_bindings/web_layer_impl.h
+++ b/webkit/renderer/compositor_bindings/web_layer_impl.h
@@ -25,9 +25,6 @@
 
 namespace cc { class Layer; }
 
-// TODO(senorblanco):  Remove this once WebKit changes have landed.
-class SkImageFilter;
-
 namespace blink {
 class WebFilterOperations;
 class WebLayerClient;
diff --git a/webkit/renderer/compositor_bindings/webkit_compositor_bindings.target.darwin-arm.mk b/webkit/renderer/compositor_bindings/webkit_compositor_bindings.target.darwin-arm.mk
index 633fc86..4a8e0cc 100644
--- a/webkit/renderer/compositor_bindings/webkit_compositor_bindings.target.darwin-arm.mk
+++ b/webkit/renderer/compositor_bindings/webkit_compositor_bindings.target.darwin-arm.mk
@@ -113,12 +113,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -252,12 +255,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -347,7 +353,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/renderer/compositor_bindings/webkit_compositor_bindings.target.darwin-mips.mk b/webkit/renderer/compositor_bindings/webkit_compositor_bindings.target.darwin-mips.mk
index 3b38794..37ca52c 100644
--- a/webkit/renderer/compositor_bindings/webkit_compositor_bindings.target.darwin-mips.mk
+++ b/webkit/renderer/compositor_bindings/webkit_compositor_bindings.target.darwin-mips.mk
@@ -112,12 +112,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -250,12 +253,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -343,7 +349,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/renderer/compositor_bindings/webkit_compositor_bindings.target.darwin-x86.mk b/webkit/renderer/compositor_bindings/webkit_compositor_bindings.target.darwin-x86.mk
index 4c3515b..40d4091 100644
--- a/webkit/renderer/compositor_bindings/webkit_compositor_bindings.target.darwin-x86.mk
+++ b/webkit/renderer/compositor_bindings/webkit_compositor_bindings.target.darwin-x86.mk
@@ -114,12 +114,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -253,12 +256,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -345,7 +351,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/renderer/compositor_bindings/webkit_compositor_bindings.target.darwin-x86_64.mk b/webkit/renderer/compositor_bindings/webkit_compositor_bindings.target.darwin-x86_64.mk
index b5ef15b..9a5496c 100644
--- a/webkit/renderer/compositor_bindings/webkit_compositor_bindings.target.darwin-x86_64.mk
+++ b/webkit/renderer/compositor_bindings/webkit_compositor_bindings.target.darwin-x86_64.mk
@@ -114,12 +114,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -253,12 +256,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -345,7 +351,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/renderer/compositor_bindings/webkit_compositor_bindings.target.linux-arm.mk b/webkit/renderer/compositor_bindings/webkit_compositor_bindings.target.linux-arm.mk
index 633fc86..4a8e0cc 100644
--- a/webkit/renderer/compositor_bindings/webkit_compositor_bindings.target.linux-arm.mk
+++ b/webkit/renderer/compositor_bindings/webkit_compositor_bindings.target.linux-arm.mk
@@ -113,12 +113,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -252,12 +255,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -347,7 +353,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/renderer/compositor_bindings/webkit_compositor_bindings.target.linux-mips.mk b/webkit/renderer/compositor_bindings/webkit_compositor_bindings.target.linux-mips.mk
index 3b38794..37ca52c 100644
--- a/webkit/renderer/compositor_bindings/webkit_compositor_bindings.target.linux-mips.mk
+++ b/webkit/renderer/compositor_bindings/webkit_compositor_bindings.target.linux-mips.mk
@@ -112,12 +112,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -250,12 +253,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -343,7 +349,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/renderer/compositor_bindings/webkit_compositor_bindings.target.linux-x86.mk b/webkit/renderer/compositor_bindings/webkit_compositor_bindings.target.linux-x86.mk
index 4c3515b..40d4091 100644
--- a/webkit/renderer/compositor_bindings/webkit_compositor_bindings.target.linux-x86.mk
+++ b/webkit/renderer/compositor_bindings/webkit_compositor_bindings.target.linux-x86.mk
@@ -114,12 +114,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -253,12 +256,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -345,7 +351,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/renderer/compositor_bindings/webkit_compositor_bindings.target.linux-x86_64.mk b/webkit/renderer/compositor_bindings/webkit_compositor_bindings.target.linux-x86_64.mk
index b5ef15b..9a5496c 100644
--- a/webkit/renderer/compositor_bindings/webkit_compositor_bindings.target.linux-x86_64.mk
+++ b/webkit/renderer/compositor_bindings/webkit_compositor_bindings.target.linux-x86_64.mk
@@ -114,12 +114,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -253,12 +256,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -345,7 +351,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/renderer/compositor_bindings/webkit_compositor_support.target.darwin-arm.mk b/webkit/renderer/compositor_bindings/webkit_compositor_support.target.darwin-arm.mk
index f9c0873..2e9cb28 100644
--- a/webkit/renderer/compositor_bindings/webkit_compositor_support.target.darwin-arm.mk
+++ b/webkit/renderer/compositor_bindings/webkit_compositor_support.target.darwin-arm.mk
@@ -91,12 +91,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -212,12 +215,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -291,7 +297,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/renderer/compositor_bindings/webkit_compositor_support.target.darwin-mips.mk b/webkit/renderer/compositor_bindings/webkit_compositor_support.target.darwin-mips.mk
index f52fdfa..2fb2a8e 100644
--- a/webkit/renderer/compositor_bindings/webkit_compositor_support.target.darwin-mips.mk
+++ b/webkit/renderer/compositor_bindings/webkit_compositor_support.target.darwin-mips.mk
@@ -90,12 +90,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -210,12 +213,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -287,7 +293,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/renderer/compositor_bindings/webkit_compositor_support.target.darwin-x86.mk b/webkit/renderer/compositor_bindings/webkit_compositor_support.target.darwin-x86.mk
index 7cfc7be..fc15b60 100644
--- a/webkit/renderer/compositor_bindings/webkit_compositor_support.target.darwin-x86.mk
+++ b/webkit/renderer/compositor_bindings/webkit_compositor_support.target.darwin-x86.mk
@@ -92,12 +92,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -213,12 +216,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -289,7 +295,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/renderer/compositor_bindings/webkit_compositor_support.target.darwin-x86_64.mk b/webkit/renderer/compositor_bindings/webkit_compositor_support.target.darwin-x86_64.mk
index a0cd1fc..0a8c612 100644
--- a/webkit/renderer/compositor_bindings/webkit_compositor_support.target.darwin-x86_64.mk
+++ b/webkit/renderer/compositor_bindings/webkit_compositor_support.target.darwin-x86_64.mk
@@ -92,12 +92,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -213,12 +216,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -289,7 +295,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/renderer/compositor_bindings/webkit_compositor_support.target.linux-arm.mk b/webkit/renderer/compositor_bindings/webkit_compositor_support.target.linux-arm.mk
index f9c0873..2e9cb28 100644
--- a/webkit/renderer/compositor_bindings/webkit_compositor_support.target.linux-arm.mk
+++ b/webkit/renderer/compositor_bindings/webkit_compositor_support.target.linux-arm.mk
@@ -91,12 +91,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -212,12 +215,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -291,7 +297,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/renderer/compositor_bindings/webkit_compositor_support.target.linux-mips.mk b/webkit/renderer/compositor_bindings/webkit_compositor_support.target.linux-mips.mk
index f52fdfa..2fb2a8e 100644
--- a/webkit/renderer/compositor_bindings/webkit_compositor_support.target.linux-mips.mk
+++ b/webkit/renderer/compositor_bindings/webkit_compositor_support.target.linux-mips.mk
@@ -90,12 +90,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -210,12 +213,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -287,7 +293,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/renderer/compositor_bindings/webkit_compositor_support.target.linux-x86.mk b/webkit/renderer/compositor_bindings/webkit_compositor_support.target.linux-x86.mk
index 7cfc7be..fc15b60 100644
--- a/webkit/renderer/compositor_bindings/webkit_compositor_support.target.linux-x86.mk
+++ b/webkit/renderer/compositor_bindings/webkit_compositor_support.target.linux-x86.mk
@@ -92,12 +92,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -213,12 +216,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -289,7 +295,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/renderer/compositor_bindings/webkit_compositor_support.target.linux-x86_64.mk b/webkit/renderer/compositor_bindings/webkit_compositor_support.target.linux-x86_64.mk
index a0cd1fc..0a8c612 100644
--- a/webkit/renderer/compositor_bindings/webkit_compositor_support.target.linux-x86_64.mk
+++ b/webkit/renderer/compositor_bindings/webkit_compositor_support.target.linux-x86_64.mk
@@ -92,12 +92,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -213,12 +216,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DUSE_OPENSSL=1' \
 	'-DUSE_OPENSSL_CERTS=1' \
 	'-D__STDC_CONSTANT_MACROS' \
@@ -289,7 +295,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/webkit_resources.target.darwin-arm.mk b/webkit/webkit_resources.target.darwin-arm.mk
index 214096e..c65c409 100644
--- a/webkit/webkit_resources.target.darwin-arm.mk
+++ b/webkit/webkit_resources.target.darwin-arm.mk
@@ -19,7 +19,7 @@
 $(gyp_shared_intermediate_dir)/webkit/grit/webkit_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/webkit/grit/webkit_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/webkit/grit/webkit_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/webkit/grit/webkit_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/webkit/glue/resources/webkit_resources.grd $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/broken_image.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech_recording.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech_waiting.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_overlay_play.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/pan_icon.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/password_generation.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/password_generation_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_cancel.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_cancel_pressed.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_magnifier.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_magnifier_results.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/synthetic_touch_cursor.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/textarea_resize_corner.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/broken_image.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/pan_icon.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/textarea_resize_corner.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/webkit/grit/webkit_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/webkit/glue/resources/webkit_resources.grd $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/broken_image.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech_recording.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech_waiting.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_overlay_play.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/pan_icon.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/password_generation.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/password_generation_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_cancel.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_cancel_pressed.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_magnifier.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_magnifier_results.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/textarea_resize_corner.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/broken_image.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/pan_icon.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/textarea_resize_corner.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from glue/resources/webkit_resources.grd ($@)"
 	$(hide)cd $(gyp_local_path)/webkit; mkdir -p $(gyp_shared_intermediate_dir)/webkit/grit $(gyp_shared_intermediate_dir)/webkit; python ../tools/grit/grit.py -i glue/resources/webkit_resources.grd build -f ../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/webkit" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc
 
diff --git a/webkit/webkit_resources.target.darwin-mips.mk b/webkit/webkit_resources.target.darwin-mips.mk
index 214096e..c65c409 100644
--- a/webkit/webkit_resources.target.darwin-mips.mk
+++ b/webkit/webkit_resources.target.darwin-mips.mk
@@ -19,7 +19,7 @@
 $(gyp_shared_intermediate_dir)/webkit/grit/webkit_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/webkit/grit/webkit_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/webkit/grit/webkit_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/webkit/grit/webkit_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/webkit/glue/resources/webkit_resources.grd $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/broken_image.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech_recording.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech_waiting.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_overlay_play.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/pan_icon.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/password_generation.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/password_generation_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_cancel.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_cancel_pressed.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_magnifier.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_magnifier_results.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/synthetic_touch_cursor.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/textarea_resize_corner.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/broken_image.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/pan_icon.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/textarea_resize_corner.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/webkit/grit/webkit_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/webkit/glue/resources/webkit_resources.grd $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/broken_image.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech_recording.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech_waiting.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_overlay_play.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/pan_icon.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/password_generation.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/password_generation_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_cancel.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_cancel_pressed.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_magnifier.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_magnifier_results.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/textarea_resize_corner.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/broken_image.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/pan_icon.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/textarea_resize_corner.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from glue/resources/webkit_resources.grd ($@)"
 	$(hide)cd $(gyp_local_path)/webkit; mkdir -p $(gyp_shared_intermediate_dir)/webkit/grit $(gyp_shared_intermediate_dir)/webkit; python ../tools/grit/grit.py -i glue/resources/webkit_resources.grd build -f ../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/webkit" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc
 
diff --git a/webkit/webkit_resources.target.darwin-x86.mk b/webkit/webkit_resources.target.darwin-x86.mk
index 214096e..c65c409 100644
--- a/webkit/webkit_resources.target.darwin-x86.mk
+++ b/webkit/webkit_resources.target.darwin-x86.mk
@@ -19,7 +19,7 @@
 $(gyp_shared_intermediate_dir)/webkit/grit/webkit_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/webkit/grit/webkit_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/webkit/grit/webkit_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/webkit/grit/webkit_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/webkit/glue/resources/webkit_resources.grd $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/broken_image.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech_recording.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech_waiting.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_overlay_play.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/pan_icon.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/password_generation.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/password_generation_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_cancel.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_cancel_pressed.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_magnifier.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_magnifier_results.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/synthetic_touch_cursor.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/textarea_resize_corner.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/broken_image.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/pan_icon.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/textarea_resize_corner.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/webkit/grit/webkit_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/webkit/glue/resources/webkit_resources.grd $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/broken_image.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech_recording.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech_waiting.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_overlay_play.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/pan_icon.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/password_generation.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/password_generation_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_cancel.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_cancel_pressed.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_magnifier.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_magnifier_results.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/textarea_resize_corner.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/broken_image.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/pan_icon.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/textarea_resize_corner.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from glue/resources/webkit_resources.grd ($@)"
 	$(hide)cd $(gyp_local_path)/webkit; mkdir -p $(gyp_shared_intermediate_dir)/webkit/grit $(gyp_shared_intermediate_dir)/webkit; python ../tools/grit/grit.py -i glue/resources/webkit_resources.grd build -f ../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/webkit" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc
 
diff --git a/webkit/webkit_resources.target.darwin-x86_64.mk b/webkit/webkit_resources.target.darwin-x86_64.mk
index 214096e..c65c409 100644
--- a/webkit/webkit_resources.target.darwin-x86_64.mk
+++ b/webkit/webkit_resources.target.darwin-x86_64.mk
@@ -19,7 +19,7 @@
 $(gyp_shared_intermediate_dir)/webkit/grit/webkit_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/webkit/grit/webkit_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/webkit/grit/webkit_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/webkit/grit/webkit_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/webkit/glue/resources/webkit_resources.grd $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/broken_image.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech_recording.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech_waiting.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_overlay_play.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/pan_icon.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/password_generation.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/password_generation_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_cancel.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_cancel_pressed.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_magnifier.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_magnifier_results.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/synthetic_touch_cursor.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/textarea_resize_corner.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/broken_image.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/pan_icon.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/textarea_resize_corner.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/webkit/grit/webkit_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/webkit/glue/resources/webkit_resources.grd $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/broken_image.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech_recording.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech_waiting.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_overlay_play.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/pan_icon.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/password_generation.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/password_generation_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_cancel.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_cancel_pressed.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_magnifier.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_magnifier_results.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/textarea_resize_corner.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/broken_image.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/pan_icon.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/textarea_resize_corner.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from glue/resources/webkit_resources.grd ($@)"
 	$(hide)cd $(gyp_local_path)/webkit; mkdir -p $(gyp_shared_intermediate_dir)/webkit/grit $(gyp_shared_intermediate_dir)/webkit; python ../tools/grit/grit.py -i glue/resources/webkit_resources.grd build -f ../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/webkit" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc
 
diff --git a/webkit/webkit_resources.target.linux-arm.mk b/webkit/webkit_resources.target.linux-arm.mk
index 214096e..c65c409 100644
--- a/webkit/webkit_resources.target.linux-arm.mk
+++ b/webkit/webkit_resources.target.linux-arm.mk
@@ -19,7 +19,7 @@
 $(gyp_shared_intermediate_dir)/webkit/grit/webkit_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/webkit/grit/webkit_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/webkit/grit/webkit_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/webkit/grit/webkit_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/webkit/glue/resources/webkit_resources.grd $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/broken_image.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech_recording.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech_waiting.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_overlay_play.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/pan_icon.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/password_generation.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/password_generation_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_cancel.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_cancel_pressed.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_magnifier.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_magnifier_results.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/synthetic_touch_cursor.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/textarea_resize_corner.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/broken_image.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/pan_icon.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/textarea_resize_corner.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/webkit/grit/webkit_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/webkit/glue/resources/webkit_resources.grd $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/broken_image.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech_recording.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech_waiting.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_overlay_play.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/pan_icon.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/password_generation.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/password_generation_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_cancel.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_cancel_pressed.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_magnifier.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_magnifier_results.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/textarea_resize_corner.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/broken_image.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/pan_icon.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/textarea_resize_corner.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from glue/resources/webkit_resources.grd ($@)"
 	$(hide)cd $(gyp_local_path)/webkit; mkdir -p $(gyp_shared_intermediate_dir)/webkit/grit $(gyp_shared_intermediate_dir)/webkit; python ../tools/grit/grit.py -i glue/resources/webkit_resources.grd build -f ../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/webkit" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc
 
diff --git a/webkit/webkit_resources.target.linux-mips.mk b/webkit/webkit_resources.target.linux-mips.mk
index 214096e..c65c409 100644
--- a/webkit/webkit_resources.target.linux-mips.mk
+++ b/webkit/webkit_resources.target.linux-mips.mk
@@ -19,7 +19,7 @@
 $(gyp_shared_intermediate_dir)/webkit/grit/webkit_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/webkit/grit/webkit_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/webkit/grit/webkit_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/webkit/grit/webkit_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/webkit/glue/resources/webkit_resources.grd $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/broken_image.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech_recording.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech_waiting.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_overlay_play.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/pan_icon.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/password_generation.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/password_generation_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_cancel.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_cancel_pressed.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_magnifier.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_magnifier_results.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/synthetic_touch_cursor.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/textarea_resize_corner.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/broken_image.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/pan_icon.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/textarea_resize_corner.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/webkit/grit/webkit_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/webkit/glue/resources/webkit_resources.grd $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/broken_image.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech_recording.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech_waiting.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_overlay_play.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/pan_icon.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/password_generation.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/password_generation_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_cancel.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_cancel_pressed.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_magnifier.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_magnifier_results.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/textarea_resize_corner.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/broken_image.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/pan_icon.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/textarea_resize_corner.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from glue/resources/webkit_resources.grd ($@)"
 	$(hide)cd $(gyp_local_path)/webkit; mkdir -p $(gyp_shared_intermediate_dir)/webkit/grit $(gyp_shared_intermediate_dir)/webkit; python ../tools/grit/grit.py -i glue/resources/webkit_resources.grd build -f ../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/webkit" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc
 
diff --git a/webkit/webkit_resources.target.linux-x86.mk b/webkit/webkit_resources.target.linux-x86.mk
index 214096e..c65c409 100644
--- a/webkit/webkit_resources.target.linux-x86.mk
+++ b/webkit/webkit_resources.target.linux-x86.mk
@@ -19,7 +19,7 @@
 $(gyp_shared_intermediate_dir)/webkit/grit/webkit_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/webkit/grit/webkit_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/webkit/grit/webkit_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/webkit/grit/webkit_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/webkit/glue/resources/webkit_resources.grd $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/broken_image.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech_recording.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech_waiting.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_overlay_play.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/pan_icon.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/password_generation.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/password_generation_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_cancel.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_cancel_pressed.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_magnifier.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_magnifier_results.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/synthetic_touch_cursor.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/textarea_resize_corner.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/broken_image.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/pan_icon.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/textarea_resize_corner.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/webkit/grit/webkit_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/webkit/glue/resources/webkit_resources.grd $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/broken_image.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech_recording.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech_waiting.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_overlay_play.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/pan_icon.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/password_generation.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/password_generation_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_cancel.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_cancel_pressed.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_magnifier.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_magnifier_results.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/textarea_resize_corner.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/broken_image.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/pan_icon.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/textarea_resize_corner.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from glue/resources/webkit_resources.grd ($@)"
 	$(hide)cd $(gyp_local_path)/webkit; mkdir -p $(gyp_shared_intermediate_dir)/webkit/grit $(gyp_shared_intermediate_dir)/webkit; python ../tools/grit/grit.py -i glue/resources/webkit_resources.grd build -f ../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/webkit" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc
 
diff --git a/webkit/webkit_resources.target.linux-x86_64.mk b/webkit/webkit_resources.target.linux-x86_64.mk
index 214096e..c65c409 100644
--- a/webkit/webkit_resources.target.linux-x86_64.mk
+++ b/webkit/webkit_resources.target.linux-x86_64.mk
@@ -19,7 +19,7 @@
 $(gyp_shared_intermediate_dir)/webkit/grit/webkit_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
 $(gyp_shared_intermediate_dir)/webkit/grit/webkit_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
 $(gyp_shared_intermediate_dir)/webkit/grit/webkit_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/webkit/grit/webkit_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/webkit/glue/resources/webkit_resources.grd $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/broken_image.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech_recording.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech_waiting.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_overlay_play.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/pan_icon.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/password_generation.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/password_generation_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_cancel.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_cancel_pressed.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_magnifier.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_magnifier_results.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/synthetic_touch_cursor.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/textarea_resize_corner.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/broken_image.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/pan_icon.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/textarea_resize_corner.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/webkit/grit/webkit_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/webkit/glue/resources/webkit_resources.grd $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/broken_image.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech_recording.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/input_speech_waiting.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_closedcaption_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_fullscreen_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_overlay_play.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_pause_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_play_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_slider_thumb_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level0_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level1_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level2_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_sound_level3_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_disabled.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_down.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/mediaplayer_volume_slider_thumb_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/pan_icon.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/password_generation.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/password_generation_hover.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_cancel.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_cancel_pressed.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_magnifier.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/search_magnifier_results.png $(LOCAL_PATH)/webkit/glue/resources/default_100_percent/textarea_resize_corner.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/broken_image.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/pan_icon.png $(LOCAL_PATH)/webkit/glue/resources/default_200_percent/textarea_resize_corner.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
 	@echo "Gyp action: Generating resources from glue/resources/webkit_resources.grd ($@)"
 	$(hide)cd $(gyp_local_path)/webkit; mkdir -p $(gyp_shared_intermediate_dir)/webkit/grit $(gyp_shared_intermediate_dir)/webkit; python ../tools/grit/grit.py -i glue/resources/webkit_resources.grd build -f ../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/webkit" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses -D enable_webrtc
 
diff --git a/webkit/webkit_storage_browser.target.darwin-arm.mk b/webkit/webkit_storage_browser.target.darwin-arm.mk
index 16cbc37..ef57e18 100644
--- a/webkit/webkit_storage_browser.target.darwin-arm.mk
+++ b/webkit/webkit_storage_browser.target.darwin-arm.mk
@@ -176,12 +176,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -321,12 +324,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -421,7 +427,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/webkit_storage_browser.target.darwin-mips.mk b/webkit/webkit_storage_browser.target.darwin-mips.mk
index c62d7e1..bde4194 100644
--- a/webkit/webkit_storage_browser.target.darwin-mips.mk
+++ b/webkit/webkit_storage_browser.target.darwin-mips.mk
@@ -175,12 +175,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -319,12 +322,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -417,7 +423,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/webkit_storage_browser.target.darwin-x86.mk b/webkit/webkit_storage_browser.target.darwin-x86.mk
index 0e1817c..729af6f 100644
--- a/webkit/webkit_storage_browser.target.darwin-x86.mk
+++ b/webkit/webkit_storage_browser.target.darwin-x86.mk
@@ -176,12 +176,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -320,12 +323,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -417,7 +423,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/webkit_storage_browser.target.darwin-x86_64.mk b/webkit/webkit_storage_browser.target.darwin-x86_64.mk
index e061c9c..c2015c0 100644
--- a/webkit/webkit_storage_browser.target.darwin-x86_64.mk
+++ b/webkit/webkit_storage_browser.target.darwin-x86_64.mk
@@ -177,12 +177,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -322,12 +325,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -419,7 +425,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/webkit_storage_browser.target.linux-arm.mk b/webkit/webkit_storage_browser.target.linux-arm.mk
index 16cbc37..ef57e18 100644
--- a/webkit/webkit_storage_browser.target.linux-arm.mk
+++ b/webkit/webkit_storage_browser.target.linux-arm.mk
@@ -176,12 +176,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -321,12 +324,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -421,7 +427,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/webkit_storage_browser.target.linux-mips.mk b/webkit/webkit_storage_browser.target.linux-mips.mk
index c62d7e1..bde4194 100644
--- a/webkit/webkit_storage_browser.target.linux-mips.mk
+++ b/webkit/webkit_storage_browser.target.linux-mips.mk
@@ -175,12 +175,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -319,12 +322,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -417,7 +423,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/webkit_storage_browser.target.linux-x86.mk b/webkit/webkit_storage_browser.target.linux-x86.mk
index 0e1817c..729af6f 100644
--- a/webkit/webkit_storage_browser.target.linux-x86.mk
+++ b/webkit/webkit_storage_browser.target.linux-x86.mk
@@ -176,12 +176,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -320,12 +323,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -417,7 +423,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/webkit_storage_browser.target.linux-x86_64.mk b/webkit/webkit_storage_browser.target.linux-x86_64.mk
index e061c9c..c2015c0 100644
--- a/webkit/webkit_storage_browser.target.linux-x86_64.mk
+++ b/webkit/webkit_storage_browser.target.linux-x86_64.mk
@@ -177,12 +177,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -322,12 +325,15 @@
 	'-DSK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS=1' \
 	'-DSK_SUPPORT_LEGACY_GETTOPDEVICE' \
 	'-DSK_SUPPORT_LEGACY_PICTURE_CAN_RECORD' \
+	'-DSK_SUPPORT_DEPRECATED_RECORD_FLAGS' \
+	'-DSK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES' \
 	'-DSK_SUPPORT_LEGACY_N32_NAME' \
+	'-DSK_SUPPORT_LEGACY_PROCXFERMODE' \
+	'-DSK_SUPPORT_LEGACY_PICTURE_HEADERS' \
 	'-DSK_SUPPORT_LEGACY_GETTOTALCLIP' \
 	'-DSK_BUILD_FOR_ANDROID' \
 	'-DSK_USE_POSIX_THREADS' \
 	'-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
-	'-DSK_IGNORE_FREETYPE_ROTATION_FIX' \
 	'-DU_USING_ICU_NAMESPACE=0' \
 	'-DCHROME_PNG_WRITE_SUPPORT' \
 	'-DPNG_USER_CONFIG' \
@@ -419,7 +425,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/webkit_storage_common.target.darwin-arm.mk b/webkit/webkit_storage_common.target.darwin-arm.mk
index 36bc5be..5e12705 100644
--- a/webkit/webkit_storage_common.target.darwin-arm.mk
+++ b/webkit/webkit_storage_common.target.darwin-arm.mk
@@ -240,7 +240,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/webkit_storage_common.target.darwin-mips.mk b/webkit/webkit_storage_common.target.darwin-mips.mk
index 4a64eba..a701092 100644
--- a/webkit/webkit_storage_common.target.darwin-mips.mk
+++ b/webkit/webkit_storage_common.target.darwin-mips.mk
@@ -236,7 +236,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/webkit_storage_common.target.darwin-x86.mk b/webkit/webkit_storage_common.target.darwin-x86.mk
index 8e246bb..c5d35e4 100644
--- a/webkit/webkit_storage_common.target.darwin-x86.mk
+++ b/webkit/webkit_storage_common.target.darwin-x86.mk
@@ -236,7 +236,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/webkit_storage_common.target.darwin-x86_64.mk b/webkit/webkit_storage_common.target.darwin-x86_64.mk
index 335d321..db2627e 100644
--- a/webkit/webkit_storage_common.target.darwin-x86_64.mk
+++ b/webkit/webkit_storage_common.target.darwin-x86_64.mk
@@ -238,7 +238,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/webkit_storage_common.target.linux-arm.mk b/webkit/webkit_storage_common.target.linux-arm.mk
index 36bc5be..5e12705 100644
--- a/webkit/webkit_storage_common.target.linux-arm.mk
+++ b/webkit/webkit_storage_common.target.linux-arm.mk
@@ -240,7 +240,6 @@
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
 	-Wl,--icf=safe \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/webkit_storage_common.target.linux-mips.mk b/webkit/webkit_storage_common.target.linux-mips.mk
index 4a64eba..a701092 100644
--- a/webkit/webkit_storage_common.target.linux-mips.mk
+++ b/webkit/webkit_storage_common.target.linux-mips.mk
@@ -236,7 +236,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/webkit_storage_common.target.linux-x86.mk b/webkit/webkit_storage_common.target.linux-x86.mk
index 8e246bb..c5d35e4 100644
--- a/webkit/webkit_storage_common.target.linux-x86.mk
+++ b/webkit/webkit_storage_common.target.linux-x86.mk
@@ -236,7 +236,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/webkit/webkit_storage_common.target.linux-x86_64.mk b/webkit/webkit_storage_common.target.linux-x86_64.mk
index 335d321..db2627e 100644
--- a/webkit/webkit_storage_common.target.linux-x86_64.mk
+++ b/webkit/webkit_storage_common.target.linux-x86_64.mk
@@ -238,7 +238,6 @@
 	-nostdlib \
 	-Wl,--no-undefined \
 	-Wl,--exclude-libs=ALL \
-	-Wl,--gc-sections \
 	-Wl,--warn-shared-textrel \
 	-Wl,-O1 \
 	-Wl,--as-needed
diff --git a/win8/metro_driver/chrome_app_view_ash.cc b/win8/metro_driver/chrome_app_view_ash.cc
index 8e1f0e6..a82ab1f 100644
--- a/win8/metro_driver/chrome_app_view_ash.cc
+++ b/win8/metro_driver/chrome_app_view_ash.cc
@@ -919,16 +919,18 @@
 // window which ensures that the chrome application tile does not show up in
 // the running metro apps list on the top left corner.
 void ChromeAppViewAsh::OnMetroExit(MetroTerminateMethod method) {
-  HWND core_window = core_window_hwnd();
-  if (method == TERMINATE_USING_KEY_SEQUENCE && core_window != NULL &&
-      core_window == ::GetForegroundWindow()) {
-    DVLOG(1) << "We are in the foreground. Exiting via Alt F4";
-    SendKeySequence(VK_F4, ALT);
-    if (ui_channel_)
-      ui_channel_->Close();
-  } else {
-    globals.app_exit->Exit();
+  if (base::win::GetVersion() >= base::win::VERSION_WIN8) {
+    HWND core_window = core_window_hwnd();
+    if (method == TERMINATE_USING_KEY_SEQUENCE && core_window != NULL &&
+        core_window == ::GetForegroundWindow()) {
+      DVLOG(1) << "We are in the foreground. Exiting via Alt F4";
+      SendKeySequence(VK_F4, ALT);
+    }
   }
+  if (ui_channel_)
+    ui_channel_->Close();
+
+  globals.app_exit->Exit();
 }
 
 void ChromeAppViewAsh::OnInputSourceChanged() {
@@ -1326,13 +1328,14 @@
     return S_OK;
   }
 
-  winfoundtn::Size size;
-  HRESULT hr = args->get_Size(&size);
-  if (FAILED(hr))
-    return hr;
+  // winui::Core::IWindowSizeChangedEventArgs args->Size appears to return
+  // scaled values under HiDPI. We will instead use GetWindowRect() which
+  // should always return values in Pixels.
+  RECT rect = {0};
+  ::GetWindowRect(core_window_hwnd_, &rect);
 
-  uint32 cx = static_cast<uint32>(size.Width);
-  uint32 cy = static_cast<uint32>(size.Height);
+  uint32 cx = static_cast<uint32>(rect.right - rect.left);
+  uint32 cy = static_cast<uint32>(rect.bottom - rect.top);
 
   DVLOG(1) << "Window size changed: width=" << cx << ", height=" << cy;
   ui_channel_->Send(new MetroViewerHostMsg_WindowSizeChanged(cx, cy));
diff --git a/win8/metro_driver/ime/text_service.cc b/win8/metro_driver/ime/text_service.cc
index de82a78..dbb74f3 100644
--- a/win8/metro_driver/ime/text_service.cc
+++ b/win8/metro_driver/ime/text_service.cc
@@ -334,7 +334,7 @@
 
  private:
   // TextService overrides:
-  virtual void TextService::CancelComposition() OVERRIDE {
+  virtual void CancelComposition() OVERRIDE {
     if (!current_document_) {
       VLOG(0) << "|current_document_| is NULL due to the previous error.";
       return;
diff --git a/win8/metro_driver/metro_driver_win7.cc b/win8/metro_driver/metro_driver_win7.cc
index 2e5aba7..fedba65 100644
--- a/win8/metro_driver/metro_driver_win7.cc
+++ b/win8/metro_driver/metro_driver_win7.cc
@@ -8,22 +8,31 @@
 #include "base/logging.h"
 
 EXTERN_C IMAGE_DOS_HEADER __ImageBase;
+int g_window_count = 0;
 
 LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
                          WPARAM wparam, LPARAM lparam) {
   PAINTSTRUCT ps;
   HDC hdc;
   switch (message) {
+    case WM_CREATE:
+      ++g_window_count;
+      break;
     case WM_PAINT:
       hdc = ::BeginPaint(hwnd, &ps);
-      EndPaint(hwnd, &ps);
+      ::EndPaint(hwnd, &ps);
       break;
     case WM_LBUTTONUP:
       //  TODO(cpu): Remove this test code.
       ::InvalidateRect(hwnd, NULL, TRUE);
       break;
+    case WM_CLOSE:
+      ::DestroyWindow(hwnd);
+      break;
     case WM_DESTROY:
-      PostQuitMessage(0);
+      --g_window_count;
+      if (!g_window_count)
+        ::PostQuitMessage(0);
       break;
     default:
       return ::DefWindowProc(hwnd, message, wparam, lparam);
@@ -51,7 +60,7 @@
                                 MAKEINTATOM(::RegisterClassExW(&wcex)),
                                 L"metro_win7",
                                 WS_POPUP | WS_VISIBLE,
-                                0, 0, 1024, 1024,
+                                0, 0, 1600, 900,
                                 NULL, NULL, hInst, NULL);
   return hwnd;
 }
@@ -146,7 +155,7 @@
       return E_FAIL;
 
     MSG msg = {0};
-    while(::GetMessage(&msg, NULL, 0, 0) != 0) {
+    while((::GetMessage(&msg, NULL, 0, 0) != 0) && g_window_count > 0) {
       ::TranslateMessage(&msg);
       ::DispatchMessage(&msg);
     }
@@ -194,7 +203,8 @@
   }
 
   ~CoreWindowEmulation() {
-    ::DestroyWindow(core_hwnd_);
+    if (core_hwnd_)
+      ::DestroyWindow(core_hwnd_);
   }
 
   // ICoreWindow implementation:
@@ -269,6 +279,8 @@
   }
 
   virtual HRESULT STDMETHODCALLTYPE Close(void) {
+    ::PostMessage(core_hwnd_, WM_CLOSE, 0, 0);
+    core_hwnd_ = NULL;
     return S_OK;
   }
 
@@ -550,6 +562,10 @@
     }
   }
 
+  HRESULT Close() {
+    return core_window_->Close();
+  }
+
   // ICoreApplicationView implementation:
   virtual HRESULT STDMETHODCALLTYPE get_CoreWindow(
     winui::Core::ICoreWindow** value) {
@@ -585,7 +601,7 @@
   }
 
  private:
-  mswr::ComPtr<winui::Core::ICoreWindow> core_window_;
+  mswr::ComPtr<CoreWindowEmulation> core_window_;
   mswr::ComPtr<ActivatedHandler> activated_handler_;
 };
 
@@ -665,7 +681,7 @@
   // ICoreApplicationExit implementation:
 
   virtual HRESULT STDMETHODCALLTYPE Exit(void) {
-    return S_OK;
+    return view_emulation_->Close();
   }
 
   virtual HRESULT STDMETHODCALLTYPE add_Exiting(
diff --git a/win8/util/win8_util.cc b/win8/util/win8_util.cc
deleted file mode 100644
index b630b8f..0000000
--- a/win8/util/win8_util.cc
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (c) 2012 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 "win8/util/win8_util.h"
-
-#include "base/win/metro.h"
-
-namespace win8 {
-
-bool IsSingleWindowMetroMode() {
-#if defined(USE_ASH)
-  return false;
-#else
-  return base::win::IsMetroProcess();
-#endif
-}
-
-}  // namespace win8
diff --git a/win8/util/win8_util.h b/win8/util/win8_util.h
deleted file mode 100644
index 25d6ec0..0000000
--- a/win8/util/win8_util.h
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright (c) 2012 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 WIN8_UTIL_WIN8_UTIL_H_
-#define WIN8_UTIL_WIN8_UTIL_H_
-
-namespace win8 {
-
-// Returns true if this process is running in fullscreen Metro mode on Win8+.
-// Callers should always prefer this method to base::win::IsMetroProcess() for
-// UI properties dependent on the single window mode as this method is also
-// aware of the Ash environment in which multiple Chrome windows can live.
-bool IsSingleWindowMetroMode();
-
-}  // namespace win8
-
-#endif  // WIN8_UTIL_WIN8_UTIL_H_
diff --git a/win8/viewer/metro_viewer_process_host.cc b/win8/viewer/metro_viewer_process_host.cc
index a44ea3c..cb6a202 100644
--- a/win8/viewer/metro_viewer_process_host.cc
+++ b/win8/viewer/metro_viewer_process_host.cc
@@ -10,12 +10,14 @@
 #include "base/file_util.h"
 #include "base/files/file_path.h"
 #include "base/memory/ref_counted.h"
+#include "base/path_service.h"
 #include "base/process/process.h"
 #include "base/process/process_handle.h"
 #include "base/strings/string16.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/time/time.h"
 #include "base/win/scoped_comptr.h"
+#include "base/win/windows_version.h"
 #include "ipc/ipc_message.h"
 #include "ipc/ipc_message_macros.h"
 #include "ui/aura/remote_window_tree_host_win.h"
@@ -87,17 +89,27 @@
   message_filter_ = new InternalMessageFilter(this);
   channel_->AddFilter(message_filter_);
 
-  base::win::ScopedComPtr<IApplicationActivationManager> activator;
-  HRESULT hr = activator.CreateInstance(CLSID_ApplicationActivationManager);
-  if (SUCCEEDED(hr)) {
-    DWORD pid = 0;
-    // Use the "connect" verb to
-    hr = activator->ActivateApplication(
-        app_user_model_id.c_str(), kMetroViewerConnectVerb, AO_NONE, &pid);
-  }
+  if (base::win::GetVersion() >= base::win::VERSION_WIN8) {
+    base::win::ScopedComPtr<IApplicationActivationManager> activator;
+    HRESULT hr = activator.CreateInstance(CLSID_ApplicationActivationManager);
+    if (SUCCEEDED(hr)) {
+      DWORD pid = 0;
+      // Use the "connect" verb to
+      hr = activator->ActivateApplication(
+          app_user_model_id.c_str(), kMetroViewerConnectVerb, AO_NONE, &pid);
+    }
 
-  LOG_IF(ERROR, FAILED(hr)) << "Tried and failed to launch Metro Chrome. "
-                            << "hr=" << std::hex << hr;
+    LOG_IF(ERROR, FAILED(hr)) << "Tried and failed to launch Metro Chrome. "
+                              << "hr=" << std::hex << hr;
+  } else {
+    // For Windows 7 we need to launch the viewer ourselves.
+    base::FilePath chrome_path;
+    if (!PathService::Get(base::DIR_EXE, &chrome_path))
+      return false;
+    // TODO(cpu): launch with "-ServerName:DefaultBrowserServer"
+    // note that the viewer might try to launch chrome again.
+    CHECK(false);
+  }
 
   // Having launched the viewer process, now we wait for it to connect.
   bool success =
diff --git a/win8/win8.gyp b/win8/win8.gyp
index a20509c..e4f45c2 100644
--- a/win8/win8.gyp
+++ b/win8/win8.gyp
@@ -10,17 +10,6 @@
   ],
   'targets': [
     {
-      'target_name': 'win8_util',
-      'type': 'static_library',
-      'dependencies': [
-        '../base/base.gyp:base',
-      ],
-      'sources': [
-        'util/win8_util.cc',
-        'util/win8_util.h',
-      ],
-    },
-    {
       'target_name': 'metro_viewer_constants',
       'type': 'static_library',
       'include_dirs': [
